[
  {
    "path": ".gitignore",
    "content": ".vscode\n*.log\n**/__pycache__/\n**/data/\n**/output/\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2025 Fangfu-0830\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n\n# ✨LangScene-X: Reconstruct Generalizable 3D Language-Embedded Scenes with TriMap Video Diffusion✨\n\n<p align=\"center\">\n<a href=\"https://liuff19.github.io/\">Fangfu Liu</a><sup>1</sup>,\n<a href=\"https://lifuguan.github.io/\">Hao Li</a><sup>2</sup>,\n<a href=\"https://github.com/chijw\">Jiawei Chi</a><sup>1</sup>,\n<a href=\"https://hanyang-21.github.io/\">Hanyang Wang</a><sup>1,3</sup>,\n<a href=\"https://github.com/liuff19/LangScene-X\">Minghui Yang</a><sup>3</sup>,\n<a href=\"https://github.com/liuff19/LangScene-X\">Fudong Wang</a><sup>3</sup>,   \n<a href=\"https://duanyueqi.github.io/\">Yueqi Duan</a><sup>1</sup>\n<br>\n    <sup>1</sup>Tsinghua University, <sup>2</sup>NTU, <sup>3</sup>Ant Group     \n</p>\n<h3 align=\"center\">ICCV 2025 🔥</h3>\n<a href=\"https://arxiv.org/abs/2507.02813\"><img src='https://img.shields.io/badge/arXiv-2507.02813-b31b1b.svg'></a> &nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://liuff19.github.io/LangScene-X\"><img src='https://img.shields.io/badge/Project-Page-Green'></a> &nbsp;&nbsp;&nbsp;&nbsp;\n<a href=\"https://huggingface.co/chijw/LangScene-X\"><img src='https://img.shields.io/badge/LangSceneX-huggingface-yellow'></a> &nbsp;&nbsp;&nbsp;&nbsp;\n<a><img src='https://img.shields.io/badge/License-MIT-blue'></a> &nbsp;&nbsp;&nbsp;&nbsp;\n\n![Teaser Visualization](assets/teaser.png)\n</div>\n\n**LangScene-X:** We propose LangScene-X, a unified model that generates RGB, segmentation map, and normal map, enabling to reconstruct 3D field from sparse views input.\n\n## 📢 News\n- 🔥 [04/07/2025] We release \"LangScene-X: Reconstruct Generalizable 3D Language-Embedded Scenes with TriMap Video Diffusion\". Check our [project page](https://liuff19.github.io/LangScene-X) and [arXiv paper](https://arxiv.org/abs/2507.02813).\n\n## 🌟 Pipeline\n\n![Pipeline Visualization](assets/pipeline.png)\n\nPipeline of LangScene-X. Our model is composed of a TriMap Video Diffusion model which generates RGB, segmentation map, and normal map videos, an Auto Encoder that compresses the language feature, and a field constructor that reconstructs 3DGS from the generated videos. \n\n\n## 🎨 Video Demos from TriMap Video Diffusion\n\nhttps://github.com/user-attachments/assets/55346d53-eb04-490e-bb70-64555e97e040\n\nhttps://github.com/user-attachments/assets/d6eb28b9-2af8-49a7-bb8b-0d4cba7843a5\n\nhttps://github.com/user-attachments/assets/396f11ef-85dc-41de-882e-e249c25b9961\n\n## ⚙️ Setup\n\n### 1. Clone Repository\n```bash\ngit clone https://github.com/liuff19/LangScene-X.git\ncd LangScene-X\n```\n### 2. Environment Setup\n\n1. **Create conda environment**\n\n```bash\nconda create -n langscenex python=3.10 -y\nconda activate langscenex\n```\n2. **Install dependencies**\n```bash\nconda install pytorch torchvision -c pytorch -y\npip install -e field_construction/submodules/simple-knn\npip install -e field_construction/submodules/diff-langsurf-rasterizer\npip install -e auto-seg/submodules/segment-anything-1\npip install -e auto-seg/submodules/segment-anything-2\npip install -r requirements.txt\n```\n\n### 3. Model Checkpoints\nThe checkpoints of SAM, SAM2 and fine-tuned CogVideoX can be downloaded from our [huggingface repository](https://huggingface.co/chijw/LangScene-X).\n\n## 💻Running\n\n### Quick Start\nYou can start quickly by running the following scripts:\n```bash\nchmod +x quick_start.sh\n./quick_start.sh <first_rgb_image_path> <last_rgb_image_path>\n```\n### Render\nRun the following command to render from the reconstructed 3DGS field:\n```bash \npython entry_point.py \\\n    pipeline.rgb_video_path=\"does/not/matter\" \\\n    pipeline.normal_video_path=\"does/not/matter\" \\\n    pipeline.seg_video_path=\"does/not/matter\" \\\n    pipeline.data_path=\"does/not/matter\" \\\n    gaussian.dataset.source_path=\"does/not/matter\" \\\n    gaussian.dataset.model_path=\"output/path\" \\\n    pipeline.selection=False \\\n    gaussian.opt.max_geo_iter=1500 \\\n    gaussian.opt.normal_optim=True \\\n    gaussian.opt.optim_pose=True \\\n    pipeline.skip_video_process=True \\\n    pipeline.skip_lang_feature_extraction=True \\\n    pipeline.mode=\"render\"\n```\nYou can also configurate by editting `configs/field_construction.yaml`.\n\n## ✒️ TODO List\n- [x] Per-scene Auto Encoder released\n- [x] Fine-tuned CogVideoX checkpoints released\n- [ ] Generalizable Auto Encoder (LQC)\n- [ ] Improved TriMap Video Diffusion model\n\n## 🔗Acknowledgement\n\nWe are thankful for the following great works when implementing LangScene-X:\n\n- [CogVideoX](https://github.com/THUDM/CogVideo), [CogvideX-Interpolation](https://github.com/feizc/CogvideX-Interpolation), [LangSplat](https://github.com/minghanqin/LangSplat), [LangSurf](https://github.com/lifuguan/LangSurf), [VGGT](https://github.com/facebookresearch/vggt), [3DGS](https://github.com/graphdeco-inria/gaussian-splatting), [SAM2](https://github.com/facebookresearch/sam2)\n\n## 📚Citation\n\n```bibtex\n@misc{liu2025langscenexreconstructgeneralizable3d,\n      title={LangScene-X: Reconstruct Generalizable 3D Language-Embedded Scenes with TriMap Video Diffusion}, \n      author={Fangfu Liu and Hao Li and Jiawei Chi and Hanyang Wang and Minghui Yang and Fudong Wang and Yueqi Duan},\n      year={2025},\n      eprint={2507.02813},\n      archivePrefix={arXiv},\n      primaryClass={cs.CV},\n      url={https://arxiv.org/abs/2507.02813}, \n}\n```\n"
  },
  {
    "path": "auto-seg/auto-mask-align.py",
    "content": "import argparse\nimport os\nimport random\n\nimport cv2\nimport imageio\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport torch\nfrom loguru import logger\nfrom PIL import Image\nfrom segment_anything import SamAutomaticMaskGenerator, sam_model_registry\nfrom tqdm import tqdm\n\n# use bfloat16 for the entire notebook\ntorch.autocast(device_type=\"cuda\", dtype=torch.bfloat16).__enter__()\n\nif torch.cuda.get_device_properties(0).major >= 8:\n    # turn on tfloat32 for Ampere GPUs (https://pytorch.org/docs/stable/notes/cuda.html#tensorfloat-32-tf32-on-ampere-devices)\n    torch.backends.cuda.matmul.allow_tf32 = True\n    torch.backends.cudnn.allow_tf32 = True\n\nfrom sam2.automatic_mask_generator import SAM2AutomaticMaskGenerator\nfrom sam2.build_sam import build_sam2, build_sam2_video_predictor\n\n\ndef show_anns(anns, borders=True):\n    if len(anns) == 0:\n        return\n    sorted_anns = sorted(anns, key=(lambda x: x['area']), reverse=True)\n    ax = plt.gca()\n    ax.set_autoscale_on(False)\n\n    img = np.ones((sorted_anns[0]['segmentation'].shape[0], sorted_anns[0]['segmentation'].shape[1], 4))\n    img[:,:,3] = 0\n    for ann in sorted_anns:\n        m = ann['segmentation']\n        color_mask = np.concatenate([np.random.random(3), [0.5]])\n        img[m] = color_mask \n        if borders:\n            import cv2\n            contours, _ = cv2.findContours(m.astype(np.uint8),cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) \n            # Try to smooth contours\n            contours = [cv2.approxPolyDP(contour, epsilon=0.01, closed=True) for contour in contours]\n            cv2.drawContours(img, contours, -1, (0,0,1,0.4), thickness=1) \n\n    ax.imshow(img)\n\n\ndef mask_nms(masks, scores, iou_thr=0.7, score_thr=0.1, inner_thr=0.2, **kwargs):\n    \"\"\"\n    Perform mask non-maximum suppression (NMS) on a set of masks based on their scores.\n    \n    Args:\n        masks (torch.Tensor): has shape (num_masks, H, W)\n        scores (torch.Tensor): The scores of the masks, has shape (num_masks,)\n        iou_thr (float, optional): The threshold for IoU.\n        score_thr (float, optional): The threshold for the mask scores.\n        inner_thr (float, optional): The threshold for the overlap rate.\n        **kwargs: Additional keyword arguments.\n    Returns:\n        selected_idx (torch.Tensor): A tensor representing the selected indices of the masks after NMS.\n    \"\"\"\n    scores, idx = scores.sort(0, descending=True)\n    num_masks = idx.shape[0]\n    \n    masks_ord = masks[idx.view(-1), :]\n    masks_area = torch.sum(masks_ord, dim=(1, 2), dtype=torch.float)\n\n    mask_chunk_size = 20\n    \n    mask_chunks = masks_ord.split(mask_chunk_size, dim=0)\n    area_chunks = masks_area.split(mask_chunk_size, dim=0)\n\n    iou_matrix = []\n    inner_iou_matrix = []\n\n    for i_areas, i_chunk in zip(area_chunks, mask_chunks):\n        row_iou_matrix = []\n        row_inner_iou_matrix = []\n        for j_areas, j_chunk in zip(area_chunks, mask_chunks):\n            intersection = torch.logical_and(i_chunk.unsqueeze(1), j_chunk.unsqueeze(0)).sum(dim=(-1, -2))\n            union = torch.logical_or(i_chunk.unsqueeze(1), j_chunk.unsqueeze(0)).sum(dim=(-1, -2))\n            local_iou_mat = intersection / union \n            row_iou_matrix.append(local_iou_mat)\n\n            row_inter_mat = intersection / i_areas[:, None]\n            col_inter_mat = intersection / j_areas[None, :]\n\n            inter = torch.logical_and(row_inter_mat < 0.5, col_inter_mat >= 0.85)\n\n            local_inner_iou_mat = torch.zeros((len(i_areas), len(j_areas)))\n            local_inner_iou_mat[inter] = 1 - row_inter_mat[inter] * col_inter_mat[inter]\n            row_inner_iou_matrix.append(local_inner_iou_mat)\n\n        row_iou_matrix = torch.cat(row_iou_matrix, dim=1)\n        row_inner_iou_matrix = torch.cat(row_inner_iou_matrix, dim=1)\n        iou_matrix.append(row_iou_matrix)\n        inner_iou_matrix.append(row_inner_iou_matrix)\n    iou_matrix = torch.cat(iou_matrix, dim=0)\n    inner_iou_matrix = torch.cat(inner_iou_matrix, dim=0)\n\n    iou_matrix.triu_(diagonal=1)\n    iou_max, _ = iou_matrix.max(dim=0)\n    inner_iou_matrix_u = torch.triu(inner_iou_matrix, diagonal=1)\n    inner_iou_max_u, _ = inner_iou_matrix_u.max(dim=0)\n    inner_iou_matrix_l = torch.tril(inner_iou_matrix, diagonal=1)\n    inner_iou_max_l, _ = inner_iou_matrix_l.max(dim=0)\n    \n    keep = iou_max <= iou_thr\n    keep_conf = scores > score_thr\n    keep_inner_u = inner_iou_max_u <= 1 - inner_thr\n    keep_inner_l = inner_iou_max_l <= 1 - inner_thr\n    \n    if keep_conf.sum() == 0:\n        index = scores.topk(3).indices\n        keep_conf[index, 0] = True\n    if keep_inner_u.sum() == 0:\n        index = scores.topk(3).indices\n        keep_inner_u[index, 0] = True\n    if keep_inner_l.sum() == 0:\n        index = scores.topk(3).indices\n        keep_inner_l[index, 0] = True\n    keep *= keep_conf\n    keep *= keep_inner_u\n    keep *= keep_inner_l\n\n    selected_idx = idx[keep]\n    return selected_idx\n\n\ndef filter(keep: torch.Tensor, masks_result) -> None:\n    keep = keep.int().cpu().numpy()\n    result_keep = []\n    for i, m in enumerate(masks_result):\n        if i in keep: result_keep.append(m)\n    return result_keep\n\n\ndef masks_update(*args, **kwargs):\n    # remove redundant masks based on the scores and overlap rate between masks\n    masks_new = ()\n    for masks_lvl in (args):\n        if isinstance(masks_lvl, tuple):\n            masks_lvl = masks_lvl[0]  # If it's a tuple, take the first element\n        if len(masks_lvl) == 0:\n            masks_new += (masks_lvl,)\n            continue\n            \n        # Check if masks_lvl is a list of dictionaries\n        if isinstance(masks_lvl[0], dict):\n            seg_pred = torch.from_numpy(np.stack([m['segmentation'] for m in masks_lvl], axis=0))\n            iou_pred = torch.from_numpy(np.stack([m['predicted_iou'] for m in masks_lvl], axis=0))\n            stability = torch.from_numpy(np.stack([m['stability_score'] for m in masks_lvl], axis=0))\n        else:\n            # If it's a direct list of masks, use them directly\n            seg_pred = torch.from_numpy(np.stack(masks_lvl, axis=0))\n            # Create default values for cases without iou and stability\n            iou_pred = torch.ones(len(masks_lvl))\n            stability = torch.ones(len(masks_lvl))\n\n        scores = stability * iou_pred\n        keep_mask_nms = mask_nms(seg_pred, scores, **kwargs)\n        masks_lvl = filter(keep_mask_nms, masks_lvl)\n        masks_new += (masks_lvl,)\n    return masks_new\n\ndef show_mask(mask, ax, obj_id=None, random_color=False):\n    if random_color:\n        color = np.concatenate([np.random.random(3), np.array([0.6])], axis=0)\n    else:\n        cmap = plt.get_cmap(\"tab20\")\n        cmap_idx = 0 if obj_id is None else obj_id\n        color = np.array([*cmap(cmap_idx)[:3], 0.6])\n    h, w = mask.shape[-2:]\n    mask_image = mask.reshape(h, w, 1) * color.reshape(1, 1, -1)\n    ax.imshow(mask_image)\n\ndef save_mask(mask,frame_idx,save_dir):\n    image_array = (mask * 255).astype(np.uint8)\n    # Create image object\n    image = Image.fromarray(image_array[0])\n\n    # Save image\n    image.save(os.path.join(save_dir,f'{frame_idx:03}.png'))\n\ndef save_masks(mask_list,frame_idx,save_dir):\n    os.makedirs(save_dir,exist_ok=True)\n    if len(mask_list[0].shape) == 3:\n        # Calculate dimensions for concatenated image\n        total_width = mask_list[0].shape[2] * len(mask_list)\n        max_height = mask_list[0].shape[1]\n        # Create large image\n        final_image = Image.new('RGB', (total_width, max_height))\n        for i, img in enumerate(mask_list):\n            img = Image.fromarray((img[0] * 255).astype(np.uint8)).convert(\"RGB\")\n            final_image.paste(img, (i * img.width, 0))\n        final_image.save(os.path.join(save_dir,f\"mask_{frame_idx:03}.png\"))\n    else:\n        # Calculate dimensions for concatenated image\n        total_width = mask_list[0].shape[1] * len(mask_list)\n        max_height = mask_list[0].shape[0]\n        # Create large image\n        final_image = Image.new('RGB', (total_width, max_height))\n        for i, img in enumerate(mask_list):\n            img = Image.fromarray((img * 255).astype(np.uint8)).convert(\"RGB\")\n            final_image.paste(img, (i * img.width, 0))\n        final_image.save(os.path.join(save_dir,f\"mask_{frame_idx:03}.png\"))\n\ndef save_masks_npy(mask_list,frame_idx,save_dir):\n    np.save(os.path.join(save_dir,f\"mask_{frame_idx:03}.npy\"),np.array(mask_list))\n    \ndef show_points(coords, labels, ax, marker_size=200):\n    pos_points = coords[labels==1]\n    neg_points = coords[labels==0]\n    ax.scatter(pos_points[:, 0], pos_points[:, 1], color='green', marker='*', s=marker_size, edgecolor='white', linewidth=1.25)\n    ax.scatter(neg_points[:, 0], neg_points[:, 1], color='red', marker='*', s=marker_size, edgecolor='white', linewidth=1.25)  \n\ndef make_enlarge_bbox(origin_bbox, max_width,max_height,ratio):\n    width = origin_bbox[2]\n    height = origin_bbox[3]\n    new_box = [max(origin_bbox[0]-width*(ratio-1)/2,0),max(origin_bbox[1]-height*(ratio-1)/2,0)]\n    new_box.append(min(width*ratio,max_width-new_box[0]))\n    new_box.append(min(height*ratio,max_height-new_box[1]))\n    return new_box\n\ndef sample_points(masks, enlarge_bbox,positive_num=1,negtive_num=40):\n    ex, ey, ewidth, eheight = enlarge_bbox\n    positive_count = positive_num\n    negtive_count = negtive_num\n    output_points = []\n    while True:\n        x = int(np.random.uniform(ex, ex + ewidth))\n        y = int(np.random.uniform(ey, ey + eheight))\n        if masks[y][x]==True and positive_count>0:\n            output_points.append((x,y,1))\n            positive_count-=1\n        elif masks[y][x]==False and negtive_count>0:\n            output_points.append((x,y,0))\n            negtive_count-=1\n        if positive_count == 0 and negtive_count == 0:\n            break\n\n    return output_points\n\ndef sample_points_from_mask(mask):\n    # Get indices of all True values\n    true_indices = np.argwhere(mask)\n\n    # Check if there are any True values\n    if true_indices.size == 0:\n        raise ValueError(\"The mask does not contain any True values.\")\n\n    # Randomly select a point from True value indices\n    random_index = np.random.choice(len(true_indices))\n    sample_point = true_indices[random_index]\n\n    return tuple(sample_point)\n\ndef search_new_obj(masks_from_prev, mask_list,other_masks_list=None,mask_ratio_thresh=0,ratio=0.5, area_threash = 5000):\n    new_mask_list = []\n\n    # Calculate mask_none, representing areas not included in any previous masks\n    mask_none = ~masks_from_prev[0].copy()[0]\n    for prev_mask in masks_from_prev[1:]:\n        mask_none &= ~prev_mask[0]\n\n    for mask in mask_list:\n        seg = mask['segmentation']\n        if (mask_none & seg).sum()/seg.sum() > ratio and seg.sum() > area_threash:\n            new_mask_list.append(mask)\n    \n    for mask in new_mask_list:\n        mask_none &= ~mask['segmentation']\n    logger.info(len(new_mask_list))\n    logger.info(\"now ratio:\",mask_none.sum() / (mask_none.shape[0] * mask_none.shape[1]) )\n    logger.info(\"expected ratios:\",mask_ratio_thresh)\n    if other_masks_list is not None:\n        for mask in other_masks_list:\n            if mask_none.sum() / (mask_none.shape[0] * mask_none.shape[1]) > mask_ratio_thresh: # Still a lot of gaps, greater than current thresh\n                seg = mask['segmentation']\n                if (mask_none & seg).sum()/seg.sum() > ratio and seg.sum() > area_threash:\n                    new_mask_list.append(mask)\n                    mask_none &= ~seg\n            else:\n                break\n    logger.info(len(new_mask_list))\n\n    return new_mask_list\n\ndef get_bbox_from_mask(mask):\n    # Get row and column indices of non-zero elements\n    rows = np.any(mask, axis=1)\n    cols = np.any(mask, axis=0)\n    \n    # Find min and max indices of non-zero rows and columns\n    ymin, ymax = np.where(rows)[0][[0, -1]]\n    xmin, xmax = np.where(cols)[0][[0, -1]]\n    \n    # Calculate width and height\n    width = xmax - xmin + 1\n    height = ymax - ymin + 1\n    \n    return xmin, ymin, width, height\n\ndef cal_no_mask_area_ratio(out_mask_list):\n    h = out_mask_list[0].shape[1]\n    w = out_mask_list[0].shape[2]\n    mask_none = ~out_mask_list[0].copy()\n    for prev_mask in out_mask_list[1:]:\n        mask_none &= ~prev_mask\n    return(mask_none.sum() / (h * w))\n\n\nclass Prompts:\n    def __init__(self,bs:int):\n        self.batch_size = bs\n        self.prompts = {}\n        self.obj_list = []\n        self.key_frame_list = []\n        self.key_frame_obj_begin_list = []\n\n    def add(self,obj_id,frame_id,mask):\n        if obj_id not in self.obj_list:\n            new_obj = True\n            self.prompts[obj_id] = []\n            self.obj_list.append(obj_id)\n        else:\n            new_obj = False\n        self.prompts[obj_id].append((frame_id,mask))\n        if frame_id not in self.key_frame_list and new_obj:\n            # import ipdb; ipdb.set_trace()\n            self.key_frame_list.append(frame_id)\n            self.key_frame_obj_begin_list.append(obj_id)\n            logger.info(\"key_frame_obj_begin_list:\",self.key_frame_obj_begin_list)\n    \n    def get_obj_num(self):\n        return len(self.obj_list)\n    \n    def __len__(self):\n        if self.obj_list % self.batch_size == 0:\n            return len(self.obj_list) // self.batch_size\n        else:\n            return len(self.obj_list) // self.batch_size +1\n    \n    def __iter__(self):\n        # self.batch_index = 0\n        self.start_idx = 0\n        self.iter_frameindex = 0\n        return self\n\n    def __next__(self):\n        if self.start_idx < len(self.obj_list):\n            if self.iter_frameindex == len(self.key_frame_list)-1:\n                end_idx = min(self.start_idx+self.batch_size, len(self.obj_list))\n            else:\n                if self.start_idx+self.batch_size < self.key_frame_obj_begin_list[self.iter_frameindex+1]:\n                    end_idx = self.start_idx+self.batch_size\n                else:\n                    end_idx =  self.key_frame_obj_begin_list[self.iter_frameindex+1]\n                    self.iter_frameindex+=1\n                # end_idx = min(self.start_idx+self.batch_size, self.key_frame_obj_begin_list[self.iter_frameindex+1])\n            batch_keys = self.obj_list[self.start_idx:end_idx]\n            batch_prompts = {key: self.prompts[key] for key in batch_keys}\n            self.start_idx = end_idx\n            return batch_prompts\n        # if self.batch_index * self.batch_size < len(self.obj_list):\n        #     start_idx = self.batch_index * self.batch_size\n        #     end_idx = min(start_idx + self.batch_size, len(self.obj_list))\n        #     batch_keys = self.obj_list[start_idx:end_idx]\n        #     batch_prompts = {key: self.prompts[key] for key in batch_keys}\n        #     self.batch_index += 1\n        #     return batch_prompts\n        else:\n            raise StopIteration\n        \ndef get_video_segments(prompts_loader,predictor,inference_state,final_output=False):\n\n    video_segments = {}\n    for batch_prompts in tqdm(prompts_loader,desc=\"processing prompts\\n\"):\n        predictor.reset_state(inference_state)\n        for id, prompt_list in batch_prompts.items():\n            for prompt in prompt_list:\n                # import ipdb; ipdb.set_trace()\n                _, out_obj_ids, out_mask_logits = predictor.add_new_mask(\n                    inference_state=inference_state,\n                    frame_idx=prompt[0],\n                    obj_id=id,\n                    mask=prompt[1]\n                )\n        # start_frame_idx = 0 if final_output else None\n        for out_frame_idx, out_obj_ids, out_mask_logits in predictor.propagate_in_video(inference_state):\n            if out_frame_idx not in video_segments:\n                video_segments[out_frame_idx] = { }\n            for i, out_obj_id in enumerate(out_obj_ids):\n                video_segments[out_frame_idx][out_obj_id]= (out_mask_logits[i] > 0.0).cpu().numpy()\n        \n        if final_output:\n            for out_frame_idx, out_obj_ids, out_mask_logits in predictor.propagate_in_video(inference_state,reverse=True):\n                for i, out_obj_id in enumerate(out_obj_ids):\n                    video_segments[out_frame_idx][out_obj_id]= (out_mask_logits[i] > 0.0).cpu().numpy()\n    return video_segments\n\nif __name__ == '__main__':\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"--video_path\",type=str,required=True)\n    parser.add_argument(\"--output_dir\",type=str,required=True)\n    parser.add_argument(\"--level\",choices=['default','small','middle','large'])\n    parser.add_argument(\"--batch_size\",type=int,default=20)\n    parser.add_argument(\"--sam1_checkpoint\",type=str,default=\"/home/lff/bigdata1/cjw/checkpoints/sam/sam_vit_h_4b8939.pth\")\n    parser.add_argument(\"--sam2_checkpoint\",type=str,default=\"/home/lff/bigdata1/cjw/checkpoints/sam2/sam2_hiera_large.pt\")\n    parser.add_argument(\"--detect_stride\",type=int,default=10)\n    parser.add_argument(\"--use_other_level\",type=int,default=1)\n    parser.add_argument(\"--postnms\",type=int,default=1)\n    parser.add_argument(\"--pred_iou_thresh\",type=float,default=0.7)\n    parser.add_argument(\"--box_nms_thresh\",type=float,default=0.7)\n    parser.add_argument(\"--stability_score_thresh\",type=float,default=0.85)\n    parser.add_argument(\"--reverse\", action=\"store_true\")\n    \n    level_dict = {\n        \"default\": 0,\n        \"small\": 1, \n        \"middle\": 2,\n        \"large\": 3\n    }\n    args = parser.parse_args()\n    logger.add(os.path.join(args.output_dir,f'{args.level}.log'), rotation=\"500 MB\")\n    logger.info(args)\n    video_dir = args.video_path\n    level = args.level\n    base_dir = args.output_dir\n\n    ##### load Sam2 and Sam1 Model #####\n    sam2_checkpoint = args.sam2_checkpoint\n    model_cfg = \"sam2_hiera_l.yaml\"\n    predictor = build_sam2_video_predictor(model_cfg, sam2_checkpoint)\n\n    sam2 = build_sam2(model_cfg, sam2_checkpoint, device='cuda', apply_postprocessing=False)\n\n    sam_ckpt_path = args.sam1_checkpoint\n\n    sam = sam_model_registry[\"vit_h\"](checkpoint=sam_ckpt_path).to('cuda')\n    mask_generator = SamAutomaticMaskGenerator(\n        model=sam,\n        points_per_side=32,\n        pred_iou_thresh=args.pred_iou_thresh, \n        box_nms_thresh=args.box_nms_thresh, \n        stability_score_thresh=args.stability_score_thresh, \n        crop_n_layers=1,\n        crop_n_points_downscale_factor=1,\n        min_mask_region_area=100,\n    )\n    # scan all the JPEG frame names in this directory\n    frame_names = [\n        p for p in os.listdir(video_dir)\n        if os.path.splitext(p)[-1] in [\".jpg\", \".jpeg\", \".JPG\", \".JPEG\", \".png\"]\n    ]\n    try:\n        frame_names.sort(key=lambda p: int(os.path.splitext(p)[0]), reverse=args.reverse)\n    except:\n        frame_names.sort(key=lambda p: os.path.splitext(p)[0], reverse=args.reverse)\n\n    now_frame = 0\n    inference_state = predictor.init_state(video_path=video_dir)\n    masks_from_prev = []\n    sum_id = 0 # Record total number of objects\n\n    prompts_loader = Prompts(bs=args.batch_size)  # hold all the clicks we add for visualization\n    \n    while True:\n        logger.info(f\"frame: {now_frame}\")\n        \n        sum_id = prompts_loader.get_obj_num()\n        image_path = os.path.join(video_dir,frame_names[now_frame])\n        image = cv2.imread(image_path)\n        \n        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n        # resize if the input is too large:\n        orig_h, orig_w = image.shape[:2]\n        if orig_h > 1080:\n            logger.info(\"Resizing original image to 1080P...\")\n            scale = 1080 / orig_h\n            h = int(orig_h * scale)\n            w = int(orig_w * scale)\n            image = cv2.resize(image, (w, h))\n\n        # Generate only large masks\n        # masks_l = mask_generator.generate_l(image)\n        all_masks = mask_generator.generate(image)\n        masks = all_masks[level_dict[args.level]]\n        # masks_l = mask_generator.generate(image)\n        \n        if args.postnms:\n        #     # Pass masks_l directly, no need to wrap in tuple\n        #     # masks_l = masks_update(masks_l, iou_thr=0.8, score_thr=0.7, inner_thr=0.5)[0]\n            masks = masks_update(masks, iou_thr=0.8, score_thr=0.7, inner_thr=0.5)[0]\n\n        # Use large level masks\n        # masks = masks_l\n        other_masks = None\n        \n        if not args.use_other_level:\n            other_masks = None\n\n        if now_frame == 0: # first frame\n            ann_obj_id_list = range(len(masks))\n            for ann_obj_id in tqdm(ann_obj_id_list):\n                seg = masks[ann_obj_id]['segmentation']\n                prompts_loader.add(ann_obj_id,0,seg)\n        else:  \n            new_mask_list = search_new_obj(masks_from_prev, masks, other_masks,mask_ratio_thresh)\n            logger.info(f\"number of new obj: {len(new_mask_list)}\")\n\n            for id,mask in enumerate(masks_from_prev):\n                if mask.sum() == 0:\n                    continue\n                prompts_loader.add(id,now_frame,mask[0])\n\n            for i in range(len(new_mask_list)):\n                new_mask = new_mask_list[i]['segmentation']\n                prompts_loader.add(sum_id+i,now_frame,new_mask)\n\n        logger.info(f\"obj num: {prompts_loader.get_obj_num()}\")\n\n        if now_frame==0 or len(new_mask_list)!=0:\n            video_segments = get_video_segments(prompts_loader,predictor,inference_state)\n        \n        vis_frame_stride = args.detect_stride\n        max_area_no_mask = (0,-1)\n        for out_frame_idx in tqdm(range(0, len(frame_names), vis_frame_stride)):\n            if out_frame_idx < now_frame:\n                continue\n            \n            out_mask_list = []\n            for out_obj_id, out_mask in video_segments[out_frame_idx].items():\n                out_mask_list.append(out_mask)\n            \n            no_mask_ratio = cal_no_mask_area_ratio(out_mask_list)\n            if now_frame == out_frame_idx:\n                mask_ratio_thresh = no_mask_ratio\n                logger.info(f\"mask_ratio_thresh: {mask_ratio_thresh}\")\n\n            if no_mask_ratio > mask_ratio_thresh + 0.01 and out_frame_idx > now_frame:\n                masks_from_prev = out_mask_list\n                max_area_no_mask = (no_mask_ratio, out_frame_idx)\n                logger.info(max_area_no_mask)\n                break\n        if max_area_no_mask[1] == -1:\n            break\n        logger.info(\"max_area_no_mask:\", max_area_no_mask)\n        now_frame = max_area_no_mask[1]\n\n    ###### Final output ######\n    save_dir = os.path.join(base_dir,level,\"final-output\")\n    os.makedirs(save_dir, exist_ok=True)\n    \n    video_segments = get_video_segments(prompts_loader,predictor,inference_state,final_output=True)\n    for out_frame_idx in tqdm(range(0, len(frame_names), 1)):\n        out_mask_list = []\n        for out_obj_id, out_mask in video_segments[out_frame_idx].items():\n            out_mask_list.append(out_mask)\n\n        no_mask_ratio = cal_no_mask_area_ratio(out_mask_list)\n        logger.info(no_mask_ratio)\n\n        save_masks(out_mask_list, out_frame_idx,save_dir)\n        save_masks_npy(out_mask_list, out_frame_idx,save_dir)\n\n    ###### Generate Visualization Frames ######\n    logger.info(\"Start generating visualization frames...\")\n    vis_save_dir = os.path.join(base_dir,level,'visualization','full-mask-npy')\n    os.makedirs(vis_save_dir,exist_ok=True)\n    frame_save_dir = os.path.join(base_dir,level,'visualization','frames')\n    os.makedirs(frame_save_dir, exist_ok=True)\n\n    # Read all npy files\n    npy_name_list = []\n    for name in os.listdir(save_dir):\n        if 'npy' in name:\n            npy_name_list.append(name)\n    npy_name_list.sort()\n    logger.info(f\"Found {len(npy_name_list)} npy files\")\n\n    npy_list = [np.load(os.path.join(save_dir,name)) for name in npy_name_list]\n    image_list = [Image.open(os.path.join(video_dir,name)) for name in frame_names]\n\n    assert len(npy_list) == len(image_list), \"Number of npy files does not match number of images\"\n    logger.info(f\"Processing {len(npy_list)} frames in total\")\n\n    # Generate random colors\n    def generate_random_colors(num_colors):\n        colors = []\n        for _ in range(num_colors):\n            reroll = True\n            iter_cnt = 0\n            while reroll and iter_cnt < 100:\n                iter_cnt += 1\n                reroll = False\n                color = tuple(random.randint(1, 255) for _ in range(3))\n                for selected_color in colors:\n                    if np.linalg.norm(np.array(color) - np.array(selected_color)) < 70:\n                        reroll = True\n                        break\n            colors.append(color)\n        return colors\n\n    num_masks = max(len(masks) for masks in npy_list)\n    colors = generate_random_colors(num_masks)\n    post_colors = [(0, 0, 0)] + colors\n    post_colors = np.array(post_colors) # [num_masks, 3]\n    np.save(os.path.join(base_dir, \"colors.npy\"), post_colors)\n\n    # Only process first and last frames\n    # frames_to_process = [0, -1]  # Indices for first and last frames\n    \n    for frame_idx in range(len(frame_names)):\n    # for frame_idx in frames_to_process:\n        masks = npy_list[frame_idx]\n        image = image_list[frame_idx]\n        \n        image_np = np.array(image)\n        mask_combined = np.zeros_like(image_np, dtype=np.uint8)\n\n        for mask_id, mask in enumerate(masks):\n            mask = mask.squeeze(0)\n            mask_area = mask > 0\n            mask_combined[mask_area, :] = colors[mask_id]\n\n        # Blend original image with colored mask\n        mask_combined = np.clip(mask_combined, 0, 255)\n\n        # blended_image = cv2.addWeighted(image_np, 0.7, mask_combined, 0.3, 0)\n        blended_image = mask_combined\n\n        # change the save path\n        frame_name = frame_names[frame_idx]\n        frame_save_dir = base_dir\n        output_path = os.path.join(frame_save_dir, frame_name)\n        Image.fromarray(blended_image).save(output_path)\n        logger.info(f\"Frame saved to: {output_path}\")"
  },
  {
    "path": "auto-seg/sam2/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom hydra import initialize_config_module\n\ninitialize_config_module(\"sam2_configs\", version_base=\"1.2\")\n"
  },
  {
    "path": "auto-seg/sam2/automatic_mask_generator.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n# Adapted from https://github.com/facebookresearch/segment-anything/blob/main/segment_anything/automatic_mask_generator.py\nfrom typing import Any, Dict, List, Optional, Tuple\n\nimport numpy as np\nimport torch\nfrom torchvision.ops.boxes import batched_nms, box_area  # type: ignore\n\nfrom sam2.modeling.sam2_base import SAM2Base\nfrom sam2.sam2_image_predictor import SAM2ImagePredictor\nfrom sam2.utils.amg import (\n    area_from_rle,\n    batch_iterator,\n    batched_mask_to_box,\n    box_xyxy_to_xywh,\n    build_all_layer_point_grids,\n    calculate_stability_score,\n    coco_encode_rle,\n    generate_crop_boxes,\n    is_box_near_crop_edge,\n    mask_to_rle_pytorch,\n    MaskData,\n    remove_small_regions,\n    rle_to_mask,\n    uncrop_boxes_xyxy,\n    uncrop_masks,\n    uncrop_points,\n)\n\n\nclass SAM2AutomaticMaskGenerator:\n    def __init__(\n        self,\n        model: SAM2Base,\n        points_per_side: Optional[int] = 32,\n        points_per_batch: int = 64,\n        pred_iou_thresh: float = 0.8,\n        stability_score_thresh: float = 0.95,\n        stability_score_offset: float = 1.0,\n        mask_threshold: float = 0.0,\n        box_nms_thresh: float = 0.7,\n        crop_n_layers: int = 0,\n        crop_nms_thresh: float = 0.7,\n        crop_overlap_ratio: float = 512 / 1500,\n        crop_n_points_downscale_factor: int = 1,\n        point_grids: Optional[List[np.ndarray]] = None,\n        min_mask_region_area: int = 0,\n        output_mode: str = \"binary_mask\",\n        use_m2m: bool = False,\n        multimask_output: bool = True,\n        **kwargs,\n    ) -> None:\n        \"\"\"\n        Using a SAM 2 model, generates masks for the entire image.\n        Generates a grid of point prompts over the image, then filters\n        low quality and duplicate masks. The default settings are chosen\n        for SAM 2 with a HieraL backbone.\n\n        Arguments:\n          model (Sam): The SAM 2 model to use for mask prediction.\n          points_per_side (int or None): The number of points to be sampled\n            along one side of the image. The total number of points is\n            points_per_side**2. If None, 'point_grids' must provide explicit\n            point sampling.\n          points_per_batch (int): Sets the number of points run simultaneously\n            by the model. Higher numbers may be faster but use more GPU memory.\n          pred_iou_thresh (float): A filtering threshold in [0,1], using the\n            model's predicted mask quality.\n          stability_score_thresh (float): A filtering threshold in [0,1], using\n            the stability of the mask under changes to the cutoff used to binarize\n            the model's mask predictions.\n          stability_score_offset (float): The amount to shift the cutoff when\n            calculated the stability score.\n          mask_threshold (float): Threshold for binarizing the mask logits\n          box_nms_thresh (float): The box IoU cutoff used by non-maximal\n            suppression to filter duplicate masks.\n          crop_n_layers (int): If >0, mask prediction will be run again on\n            crops of the image. Sets the number of layers to run, where each\n            layer has 2**i_layer number of image crops.\n          crop_nms_thresh (float): The box IoU cutoff used by non-maximal\n            suppression to filter duplicate masks between different crops.\n          crop_overlap_ratio (float): Sets the degree to which crops overlap.\n            In the first crop layer, crops will overlap by this fraction of\n            the image length. Later layers with more crops scale down this overlap.\n          crop_n_points_downscale_factor (int): The number of points-per-side\n            sampled in layer n is scaled down by crop_n_points_downscale_factor**n.\n          point_grids (list(np.ndarray) or None): A list over explicit grids\n            of points used for sampling, normalized to [0,1]. The nth grid in the\n            list is used in the nth crop layer. Exclusive with points_per_side.\n          min_mask_region_area (int): If >0, postprocessing will be applied\n            to remove disconnected regions and holes in masks with area smaller\n            than min_mask_region_area. Requires opencv.\n          output_mode (str): The form masks are returned in. Can be 'binary_mask',\n            'uncompressed_rle', or 'coco_rle'. 'coco_rle' requires pycocotools.\n            For large resolutions, 'binary_mask' may consume large amounts of\n            memory.\n          use_m2m (bool): Whether to add a one step refinement using previous mask predictions.\n          multimask_output (bool): Whether to output multimask at each point of the grid.\n        \"\"\"\n\n        assert (points_per_side is None) != (\n            point_grids is None\n        ), \"Exactly one of points_per_side or point_grid must be provided.\"\n        if points_per_side is not None:\n            self.point_grids = build_all_layer_point_grids(\n                points_per_side,\n                crop_n_layers,\n                crop_n_points_downscale_factor,\n            )\n        elif point_grids is not None:\n            self.point_grids = point_grids\n        else:\n            raise ValueError(\"Can't have both points_per_side and point_grid be None.\")\n\n        assert output_mode in [\n            \"binary_mask\",\n            \"uncompressed_rle\",\n            \"coco_rle\",\n        ], f\"Unknown output_mode {output_mode}.\"\n        if output_mode == \"coco_rle\":\n            try:\n                from pycocotools import mask as mask_utils  # type: ignore  # noqa: F401\n            except ImportError as e:\n                print(\"Please install pycocotools\")\n                raise e\n\n        self.predictor = SAM2ImagePredictor(\n            model,\n            max_hole_area=min_mask_region_area,\n            max_sprinkle_area=min_mask_region_area,\n        )\n        self.points_per_batch = points_per_batch\n        self.pred_iou_thresh = pred_iou_thresh\n        self.stability_score_thresh = stability_score_thresh\n        self.stability_score_offset = stability_score_offset\n        self.mask_threshold = mask_threshold\n        self.box_nms_thresh = box_nms_thresh\n        self.crop_n_layers = crop_n_layers\n        self.crop_nms_thresh = crop_nms_thresh\n        self.crop_overlap_ratio = crop_overlap_ratio\n        self.crop_n_points_downscale_factor = crop_n_points_downscale_factor\n        self.min_mask_region_area = min_mask_region_area\n        self.output_mode = output_mode\n        self.use_m2m = use_m2m\n        self.multimask_output = multimask_output\n\n    @classmethod\n    def from_pretrained(cls, model_id: str, **kwargs) -> \"SAM2AutomaticMaskGenerator\":\n        \"\"\"\n        Load a pretrained model from the Hugging Face hub.\n\n        Arguments:\n          model_id (str): The Hugging Face repository ID.\n          **kwargs: Additional arguments to pass to the model constructor.\n\n        Returns:\n          (SAM2AutomaticMaskGenerator): The loaded model.\n        \"\"\"\n        from sam2.build_sam import build_sam2_hf\n\n        sam_model = build_sam2_hf(model_id, **kwargs)\n        return cls(sam_model, **kwargs)\n\n    @torch.no_grad()\n    def generate(self, image: np.ndarray) -> List[Dict[str, Any]]:\n        \"\"\"\n        Generates masks for the given image.\n\n        Arguments:\n          image (np.ndarray): The image to generate masks for, in HWC uint8 format.\n\n        Returns:\n           list(dict(str, any)): A list over records for masks. Each record is\n             a dict containing the following keys:\n               segmentation (dict(str, any) or np.ndarray): The mask. If\n                 output_mode='binary_mask', is an array of shape HW. Otherwise,\n                 is a dictionary containing the RLE.\n               bbox (list(float)): The box around the mask, in XYWH format.\n               area (int): The area in pixels of the mask.\n               predicted_iou (float): The model's own prediction of the mask's\n                 quality. This is filtered by the pred_iou_thresh parameter.\n               point_coords (list(list(float))): The point coordinates input\n                 to the model to generate this mask.\n               stability_score (float): A measure of the mask's quality. This\n                 is filtered on using the stability_score_thresh parameter.\n               crop_box (list(float)): The crop of the image used to generate\n                 the mask, given in XYWH format.\n        \"\"\"\n\n        # Generate masks\n        mask_data = self._generate_masks(image)\n\n        # Encode masks\n        if self.output_mode == \"coco_rle\":\n            mask_data[\"segmentations\"] = [\n                coco_encode_rle(rle) for rle in mask_data[\"rles\"]\n            ]\n        elif self.output_mode == \"binary_mask\":\n            mask_data[\"segmentations\"] = [rle_to_mask(rle) for rle in mask_data[\"rles\"]]\n        else:\n            mask_data[\"segmentations\"] = mask_data[\"rles\"]\n\n        # Write mask records\n        curr_anns = []\n        for idx in range(len(mask_data[\"segmentations\"])):\n            ann = {\n                \"segmentation\": mask_data[\"segmentations\"][idx],\n                \"area\": area_from_rle(mask_data[\"rles\"][idx]),\n                \"bbox\": box_xyxy_to_xywh(mask_data[\"boxes\"][idx]).tolist(),\n                \"predicted_iou\": mask_data[\"iou_preds\"][idx].item(),\n                \"point_coords\": [mask_data[\"points\"][idx].tolist()],\n                \"stability_score\": mask_data[\"stability_score\"][idx].item(),\n                \"crop_box\": box_xyxy_to_xywh(mask_data[\"crop_boxes\"][idx]).tolist(),\n            }\n            curr_anns.append(ann)\n\n        return curr_anns\n\n    def _generate_masks(self, image: np.ndarray) -> MaskData:\n        orig_size = image.shape[:2]\n        crop_boxes, layer_idxs = generate_crop_boxes(\n            orig_size, self.crop_n_layers, self.crop_overlap_ratio\n        )\n\n        # Iterate over image crops\n        data = MaskData()\n        for crop_box, layer_idx in zip(crop_boxes, layer_idxs):\n            crop_data = self._process_crop(image, crop_box, layer_idx, orig_size)\n            data.cat(crop_data)\n\n        # Remove duplicate masks between crops\n        if len(crop_boxes) > 1:\n            # Prefer masks from smaller crops\n            scores = 1 / box_area(data[\"crop_boxes\"])\n            scores = scores.to(data[\"boxes\"].device)\n            keep_by_nms = batched_nms(\n                data[\"boxes\"].float(),\n                scores,\n                torch.zeros_like(data[\"boxes\"][:, 0]),  # categories\n                iou_threshold=self.crop_nms_thresh,\n            )\n            data.filter(keep_by_nms)\n        data.to_numpy()\n        return data\n\n    def _process_crop(\n        self,\n        image: np.ndarray,\n        crop_box: List[int],\n        crop_layer_idx: int,\n        orig_size: Tuple[int, ...],\n    ) -> MaskData:\n        # Crop the image and calculate embeddings\n        x0, y0, x1, y1 = crop_box\n        cropped_im = image[y0:y1, x0:x1, :]\n        cropped_im_size = cropped_im.shape[:2]\n        self.predictor.set_image(cropped_im)\n\n        # Get points for this crop\n        points_scale = np.array(cropped_im_size)[None, ::-1]\n        points_for_image = self.point_grids[crop_layer_idx] * points_scale\n\n        # Generate masks for this crop in batches\n        data = MaskData()\n        for (points,) in batch_iterator(self.points_per_batch, points_for_image):\n            batch_data = self._process_batch(\n                points, cropped_im_size, crop_box, orig_size, normalize=True\n            )\n            data.cat(batch_data)\n            del batch_data\n        self.predictor.reset_predictor()\n\n        # Remove duplicates within this crop.\n        keep_by_nms = batched_nms(\n            data[\"boxes\"].float(),\n            data[\"iou_preds\"],\n            torch.zeros_like(data[\"boxes\"][:, 0]),  # categories\n            iou_threshold=self.box_nms_thresh,\n        )\n        data.filter(keep_by_nms)\n\n        # Return to the original image frame\n        data[\"boxes\"] = uncrop_boxes_xyxy(data[\"boxes\"], crop_box)\n        data[\"points\"] = uncrop_points(data[\"points\"], crop_box)\n        data[\"crop_boxes\"] = torch.tensor([crop_box for _ in range(len(data[\"rles\"]))])\n\n        return data\n\n    def _process_batch(\n        self,\n        points: np.ndarray,\n        im_size: Tuple[int, ...],\n        crop_box: List[int],\n        orig_size: Tuple[int, ...],\n        normalize=False,\n    ) -> MaskData:\n        orig_h, orig_w = orig_size\n\n        # Run model on this batch\n        points = torch.as_tensor(\n            points, dtype=torch.float32, device=self.predictor.device\n        )\n        in_points = self.predictor._transforms.transform_coords(\n            points, normalize=normalize, orig_hw=im_size\n        )\n        in_labels = torch.ones(\n            in_points.shape[0], dtype=torch.int, device=in_points.device\n        )\n        masks, iou_preds, low_res_masks = self.predictor._predict(\n            in_points[:, None, :],\n            in_labels[:, None],\n            multimask_output=self.multimask_output,\n            return_logits=True,\n        )\n\n        # Serialize predictions and store in MaskData\n        data = MaskData(\n            masks=masks.flatten(0, 1),\n            iou_preds=iou_preds.flatten(0, 1),\n            points=points.repeat_interleave(masks.shape[1], dim=0),\n            low_res_masks=low_res_masks.flatten(0, 1),\n        )\n        del masks\n\n        if not self.use_m2m:\n            # Filter by predicted IoU\n            if self.pred_iou_thresh > 0.0:\n                keep_mask = data[\"iou_preds\"] > self.pred_iou_thresh\n                data.filter(keep_mask)\n\n            # Calculate and filter by stability score\n            data[\"stability_score\"] = calculate_stability_score(\n                data[\"masks\"], self.mask_threshold, self.stability_score_offset\n            )\n            if self.stability_score_thresh > 0.0:\n                keep_mask = data[\"stability_score\"] >= self.stability_score_thresh\n                data.filter(keep_mask)\n        else:\n            # One step refinement using previous mask predictions\n            in_points = self.predictor._transforms.transform_coords(\n                data[\"points\"], normalize=normalize, orig_hw=im_size\n            )\n            labels = torch.ones(\n                in_points.shape[0], dtype=torch.int, device=in_points.device\n            )\n            masks, ious = self.refine_with_m2m(\n                in_points, labels, data[\"low_res_masks\"], self.points_per_batch\n            )\n            data[\"masks\"] = masks.squeeze(1)\n            data[\"iou_preds\"] = ious.squeeze(1)\n\n            if self.pred_iou_thresh > 0.0:\n                keep_mask = data[\"iou_preds\"] > self.pred_iou_thresh\n                data.filter(keep_mask)\n\n            data[\"stability_score\"] = calculate_stability_score(\n                data[\"masks\"], self.mask_threshold, self.stability_score_offset\n            )\n            if self.stability_score_thresh > 0.0:\n                keep_mask = data[\"stability_score\"] >= self.stability_score_thresh\n                data.filter(keep_mask)\n\n        # Threshold masks and calculate boxes\n        data[\"masks\"] = data[\"masks\"] > self.mask_threshold\n        data[\"boxes\"] = batched_mask_to_box(data[\"masks\"])\n\n        # Filter boxes that touch crop boundaries\n        keep_mask = ~is_box_near_crop_edge(\n            data[\"boxes\"], crop_box, [0, 0, orig_w, orig_h]\n        )\n        if not torch.all(keep_mask):\n            data.filter(keep_mask)\n\n        # Compress to RLE\n        data[\"masks\"] = uncrop_masks(data[\"masks\"], crop_box, orig_h, orig_w)\n        data[\"rles\"] = mask_to_rle_pytorch(data[\"masks\"])\n        del data[\"masks\"]\n\n        return data\n\n    @staticmethod\n    def postprocess_small_regions(\n        mask_data: MaskData, min_area: int, nms_thresh: float\n    ) -> MaskData:\n        \"\"\"\n        Removes small disconnected regions and holes in masks, then reruns\n        box NMS to remove any new duplicates.\n\n        Edits mask_data in place.\n\n        Requires open-cv as a dependency.\n        \"\"\"\n        if len(mask_data[\"rles\"]) == 0:\n            return mask_data\n\n        # Filter small disconnected regions and holes\n        new_masks = []\n        scores = []\n        for rle in mask_data[\"rles\"]:\n            mask = rle_to_mask(rle)\n\n            mask, changed = remove_small_regions(mask, min_area, mode=\"holes\")\n            unchanged = not changed\n            mask, changed = remove_small_regions(mask, min_area, mode=\"islands\")\n            unchanged = unchanged and not changed\n\n            new_masks.append(torch.as_tensor(mask).unsqueeze(0))\n            # Give score=0 to changed masks and score=1 to unchanged masks\n            # so NMS will prefer ones that didn't need postprocessing\n            scores.append(float(unchanged))\n\n        # Recalculate boxes and remove any new duplicates\n        masks = torch.cat(new_masks, dim=0)\n        boxes = batched_mask_to_box(masks)\n        keep_by_nms = batched_nms(\n            boxes.float(),\n            torch.as_tensor(scores),\n            torch.zeros_like(boxes[:, 0]),  # categories\n            iou_threshold=nms_thresh,\n        )\n\n        # Only recalculate RLEs for masks that have changed\n        for i_mask in keep_by_nms:\n            if scores[i_mask] == 0.0:\n                mask_torch = masks[i_mask].unsqueeze(0)\n                mask_data[\"rles\"][i_mask] = mask_to_rle_pytorch(mask_torch)[0]\n                mask_data[\"boxes\"][i_mask] = boxes[i_mask]  # update res directly\n        mask_data.filter(keep_by_nms)\n\n        return mask_data\n\n    def refine_with_m2m(self, points, point_labels, low_res_masks, points_per_batch):\n        new_masks = []\n        new_iou_preds = []\n\n        for cur_points, cur_point_labels, low_res_mask in batch_iterator(\n            points_per_batch, points, point_labels, low_res_masks\n        ):\n            best_masks, best_iou_preds, _ = self.predictor._predict(\n                cur_points[:, None, :],\n                cur_point_labels[:, None],\n                mask_input=low_res_mask[:, None, :],\n                multimask_output=False,\n                return_logits=True,\n            )\n            new_masks.append(best_masks)\n            new_iou_preds.append(best_iou_preds)\n        masks = torch.cat(new_masks, dim=0)\n        return masks, torch.cat(new_iou_preds, dim=0)\n"
  },
  {
    "path": "auto-seg/sam2/build_sam.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport logging\n\nimport torch\nfrom hydra import compose\nfrom hydra.utils import instantiate\nfrom omegaconf import OmegaConf\n\n\ndef build_sam2(\n    config_file,\n    ckpt_path=None,\n    device=\"cuda\",\n    mode=\"eval\",\n    hydra_overrides_extra=[],\n    apply_postprocessing=True,\n    **kwargs,\n):\n\n    if apply_postprocessing:\n        hydra_overrides_extra = hydra_overrides_extra.copy()\n        hydra_overrides_extra += [\n            # dynamically fall back to multi-mask if the single mask is not stable\n            \"++model.sam_mask_decoder_extra_args.dynamic_multimask_via_stability=true\",\n            \"++model.sam_mask_decoder_extra_args.dynamic_multimask_stability_delta=0.05\",\n            \"++model.sam_mask_decoder_extra_args.dynamic_multimask_stability_thresh=0.98\",\n        ]\n    # Read config and init model\n    cfg = compose(config_name=config_file, overrides=hydra_overrides_extra)\n    OmegaConf.resolve(cfg)\n    model = instantiate(cfg.model, _recursive_=True)\n    _load_checkpoint(model, ckpt_path)\n    model = model.to(device)\n    if mode == \"eval\":\n        model.eval()\n    return model\n\n\ndef build_sam2_video_predictor(\n    config_file,\n    ckpt_path=None,\n    device=\"cuda\",\n    mode=\"eval\",\n    hydra_overrides_extra=[],\n    apply_postprocessing=True,\n    **kwargs,\n):\n    hydra_overrides = [\n        \"++model._target_=sam2.sam2_video_predictor.SAM2VideoPredictor\",\n    ]\n    if apply_postprocessing:\n        hydra_overrides_extra = hydra_overrides_extra.copy()\n        hydra_overrides_extra += [\n            # dynamically fall back to multi-mask if the single mask is not stable\n            \"++model.sam_mask_decoder_extra_args.dynamic_multimask_via_stability=true\",\n            \"++model.sam_mask_decoder_extra_args.dynamic_multimask_stability_delta=0.05\",\n            \"++model.sam_mask_decoder_extra_args.dynamic_multimask_stability_thresh=0.98\",\n            # the sigmoid mask logits on interacted frames with clicks in the memory encoder so that the encoded masks are exactly as what users see from clicking\n            \"++model.binarize_mask_from_pts_for_mem_enc=true\",\n            # fill small holes in the low-res masks up to `fill_hole_area` (before resizing them to the original video resolution)\n            \"++model.fill_hole_area=8\",\n        ]\n    hydra_overrides.extend(hydra_overrides_extra)\n\n    # Read config and init model\n    cfg = compose(config_name=config_file, overrides=hydra_overrides)\n    OmegaConf.resolve(cfg)\n    model = instantiate(cfg.model, _recursive_=True)\n    _load_checkpoint(model, ckpt_path)\n    model = model.to(device)\n    if mode == \"eval\":\n        model.eval()\n    return model\n\n\ndef build_sam2_hf(model_id, **kwargs):\n\n    from huggingface_hub import hf_hub_download\n\n    model_id_to_filenames = {\n        \"facebook/sam2-hiera-tiny\": (\"sam2_hiera_t.yaml\", \"sam2_hiera_tiny.pt\"),\n        \"facebook/sam2-hiera-small\": (\"sam2_hiera_s.yaml\", \"sam2_hiera_small.pt\"),\n        \"facebook/sam2-hiera-base-plus\": (\n            \"sam2_hiera_b+.yaml\",\n            \"sam2_hiera_base_plus.pt\",\n        ),\n        \"facebook/sam2-hiera-large\": (\"sam2_hiera_l.yaml\", \"sam2_hiera_large.pt\"),\n    }\n    config_name, checkpoint_name = model_id_to_filenames[model_id]\n    ckpt_path = hf_hub_download(repo_id=model_id, filename=checkpoint_name)\n    return build_sam2(config_file=config_name, ckpt_path=ckpt_path, **kwargs)\n\n\ndef build_sam2_video_predictor_hf(model_id, **kwargs):\n\n    from huggingface_hub import hf_hub_download\n\n    model_id_to_filenames = {\n        \"facebook/sam2-hiera-tiny\": (\"sam2_hiera_t.yaml\", \"sam2_hiera_tiny.pt\"),\n        \"facebook/sam2-hiera-small\": (\"sam2_hiera_s.yaml\", \"sam2_hiera_small.pt\"),\n        \"facebook/sam2-hiera-base-plus\": (\n            \"sam2_hiera_b+.yaml\",\n            \"sam2_hiera_base_plus.pt\",\n        ),\n        \"facebook/sam2-hiera-large\": (\"sam2_hiera_l.yaml\", \"sam2_hiera_large.pt\"),\n    }\n    config_name, checkpoint_name = model_id_to_filenames[model_id]\n    ckpt_path = hf_hub_download(repo_id=model_id, filename=checkpoint_name)\n    return build_sam2_video_predictor(\n        config_file=config_name, ckpt_path=ckpt_path, **kwargs\n    )\n\n\ndef _load_checkpoint(model, ckpt_path):\n    if ckpt_path is not None:\n        sd = torch.load(ckpt_path, map_location=\"cpu\")[\"model\"]\n        missing_keys, unexpected_keys = model.load_state_dict(sd)\n        if missing_keys:\n            logging.error(missing_keys)\n            raise RuntimeError()\n        if unexpected_keys:\n            logging.error(unexpected_keys)\n            raise RuntimeError()\n        logging.info(\"Loaded checkpoint sucessfully\")\n"
  },
  {
    "path": "auto-seg/sam2/csrc/connected_components.cu",
    "content": "// Copyright (c) Meta Platforms, Inc. and affiliates.\n// All rights reserved.\n\n// This source code is licensed under the license found in the\n// LICENSE file in the root directory of this source tree.\n\n// adapted from https://github.com/zsef123/Connected_components_PyTorch\n// with license found in the LICENSE_cctorch file in the root directory.\n#include <ATen/cuda/CUDAContext.h>\n#include <cuda.h>\n#include <cuda_runtime.h>\n#include <torch/extension.h>\n#include <torch/script.h>\n#include <vector>\n\n// 2d\n#define BLOCK_ROWS 16\n#define BLOCK_COLS 16\n\nnamespace cc2d {\n\ntemplate <typename T>\n__device__ __forceinline__ unsigned char hasBit(T bitmap, unsigned char pos) {\n  return (bitmap >> pos) & 1;\n}\n\n__device__ int32_t find(const int32_t* s_buf, int32_t n) {\n  while (s_buf[n] != n)\n    n = s_buf[n];\n  return n;\n}\n\n__device__ int32_t find_n_compress(int32_t* s_buf, int32_t n) {\n  const int32_t id = n;\n  while (s_buf[n] != n) {\n    n = s_buf[n];\n    s_buf[id] = n;\n  }\n  return n;\n}\n\n__device__ void union_(int32_t* s_buf, int32_t a, int32_t b) {\n  bool done;\n  do {\n    a = find(s_buf, a);\n    b = find(s_buf, b);\n\n    if (a < b) {\n      int32_t old = atomicMin(s_buf + b, a);\n      done = (old == b);\n      b = old;\n    } else if (b < a) {\n      int32_t old = atomicMin(s_buf + a, b);\n      done = (old == a);\n      a = old;\n    } else\n      done = true;\n\n  } while (!done);\n}\n\n__global__ void\ninit_labeling(int32_t* label, const uint32_t W, const uint32_t H) {\n  const uint32_t row = (blockIdx.y * blockDim.y + threadIdx.y) * 2;\n  const uint32_t col = (blockIdx.x * blockDim.x + threadIdx.x) * 2;\n  const uint32_t idx = row * W + col;\n\n  if (row < H && col < W)\n    label[idx] = idx;\n}\n\n__global__ void\nmerge(uint8_t* img, int32_t* label, const uint32_t W, const uint32_t H) {\n  const uint32_t row = (blockIdx.y * blockDim.y + threadIdx.y) * 2;\n  const uint32_t col = (blockIdx.x * blockDim.x + threadIdx.x) * 2;\n  const uint32_t idx = row * W + col;\n\n  if (row >= H || col >= W)\n    return;\n\n  uint32_t P = 0;\n\n  if (img[idx])\n    P |= 0x777;\n  if (row + 1 < H && img[idx + W])\n    P |= 0x777 << 4;\n  if (col + 1 < W && img[idx + 1])\n    P |= 0x777 << 1;\n\n  if (col == 0)\n    P &= 0xEEEE;\n  if (col + 1 >= W)\n    P &= 0x3333;\n  else if (col + 2 >= W)\n    P &= 0x7777;\n\n  if (row == 0)\n    P &= 0xFFF0;\n  if (row + 1 >= H)\n    P &= 0xFF;\n\n  if (P > 0) {\n    // If need check about top-left pixel(if flag the first bit) and hit the\n    // top-left pixel\n    if (hasBit(P, 0) && img[idx - W - 1]) {\n      union_(label, idx, idx - 2 * W - 2); // top left block\n    }\n\n    if ((hasBit(P, 1) && img[idx - W]) || (hasBit(P, 2) && img[idx - W + 1]))\n      union_(label, idx, idx - 2 * W); // top bottom block\n\n    if (hasBit(P, 3) && img[idx + 2 - W])\n      union_(label, idx, idx - 2 * W + 2); // top right block\n\n    if ((hasBit(P, 4) && img[idx - 1]) || (hasBit(P, 8) && img[idx + W - 1]))\n      union_(label, idx, idx - 2); // just left block\n  }\n}\n\n__global__ void compression(int32_t* label, const int32_t W, const int32_t H) {\n  const uint32_t row = (blockIdx.y * blockDim.y + threadIdx.y) * 2;\n  const uint32_t col = (blockIdx.x * blockDim.x + threadIdx.x) * 2;\n  const uint32_t idx = row * W + col;\n\n  if (row < H && col < W)\n    find_n_compress(label, idx);\n}\n\n__global__ void final_labeling(\n    const uint8_t* img,\n    int32_t* label,\n    const int32_t W,\n    const int32_t H) {\n  const uint32_t row = (blockIdx.y * blockDim.y + threadIdx.y) * 2;\n  const uint32_t col = (blockIdx.x * blockDim.x + threadIdx.x) * 2;\n  const uint32_t idx = row * W + col;\n\n  if (row >= H || col >= W)\n    return;\n\n  int32_t y = label[idx] + 1;\n\n  if (img[idx])\n    label[idx] = y;\n  else\n    label[idx] = 0;\n\n  if (col + 1 < W) {\n    if (img[idx + 1])\n      label[idx + 1] = y;\n    else\n      label[idx + 1] = 0;\n\n    if (row + 1 < H) {\n      if (img[idx + W + 1])\n        label[idx + W + 1] = y;\n      else\n        label[idx + W + 1] = 0;\n    }\n  }\n\n  if (row + 1 < H) {\n    if (img[idx + W])\n      label[idx + W] = y;\n    else\n      label[idx + W] = 0;\n  }\n}\n\n__global__ void init_counting(\n    const int32_t* label,\n    int32_t* count_init,\n    const int32_t W,\n    const int32_t H) {\n  const uint32_t row = (blockIdx.y * blockDim.y + threadIdx.y);\n  const uint32_t col = (blockIdx.x * blockDim.x + threadIdx.x);\n  const uint32_t idx = row * W + col;\n\n  if (row >= H || col >= W)\n    return;\n\n  int32_t y = label[idx];\n  if (y > 0) {\n    int32_t count_idx = y - 1;\n    atomicAdd(count_init + count_idx, 1);\n  }\n}\n\n__global__ void final_counting(\n    const int32_t* label,\n    const int32_t* count_init,\n    int32_t* count_final,\n    const int32_t W,\n    const int32_t H) {\n  const uint32_t row = (blockIdx.y * blockDim.y + threadIdx.y);\n  const uint32_t col = (blockIdx.x * blockDim.x + threadIdx.x);\n  const uint32_t idx = row * W + col;\n\n  if (row >= H || col >= W)\n    return;\n\n  int32_t y = label[idx];\n  if (y > 0) {\n    int32_t count_idx = y - 1;\n    count_final[idx] = count_init[count_idx];\n  } else {\n    count_final[idx] = 0;\n  }\n}\n\n} // namespace cc2d\n\nstd::vector<torch::Tensor> get_connected_componnets(\n    const torch::Tensor& inputs) {\n  AT_ASSERTM(inputs.is_cuda(), \"inputs must be a CUDA tensor\");\n  AT_ASSERTM(inputs.ndimension() == 4, \"inputs must be [N, 1, H, W] shape\");\n  AT_ASSERTM(\n      inputs.scalar_type() == torch::kUInt8, \"inputs must be a uint8 type\");\n\n  const uint32_t N = inputs.size(0);\n  const uint32_t C = inputs.size(1);\n  const uint32_t H = inputs.size(2);\n  const uint32_t W = inputs.size(3);\n\n  AT_ASSERTM(C == 1, \"inputs must be [N, 1, H, W] shape\");\n  AT_ASSERTM((H % 2) == 0, \"height must be an even number\");\n  AT_ASSERTM((W % 2) == 0, \"width must be an even number\");\n\n  // label must be uint32_t\n  auto label_options =\n      torch::TensorOptions().dtype(torch::kInt32).device(inputs.device());\n  torch::Tensor labels = torch::zeros({N, C, H, W}, label_options);\n  torch::Tensor counts_init = torch::zeros({N, C, H, W}, label_options);\n  torch::Tensor counts_final = torch::zeros({N, C, H, W}, label_options);\n\n  dim3 grid = dim3(\n      ((W + 1) / 2 + BLOCK_COLS - 1) / BLOCK_COLS,\n      ((H + 1) / 2 + BLOCK_ROWS - 1) / BLOCK_ROWS);\n  dim3 block = dim3(BLOCK_COLS, BLOCK_ROWS);\n  dim3 grid_count =\n      dim3((W + BLOCK_COLS) / BLOCK_COLS, (H + BLOCK_ROWS) / BLOCK_ROWS);\n  dim3 block_count = dim3(BLOCK_COLS, BLOCK_ROWS);\n  cudaStream_t stream = at::cuda::getCurrentCUDAStream();\n\n  for (int n = 0; n < N; n++) {\n    uint32_t offset = n * H * W;\n\n    cc2d::init_labeling<<<grid, block, 0, stream>>>(\n        labels.data_ptr<int32_t>() + offset, W, H);\n    cc2d::merge<<<grid, block, 0, stream>>>(\n        inputs.data_ptr<uint8_t>() + offset,\n        labels.data_ptr<int32_t>() + offset,\n        W,\n        H);\n    cc2d::compression<<<grid, block, 0, stream>>>(\n        labels.data_ptr<int32_t>() + offset, W, H);\n    cc2d::final_labeling<<<grid, block, 0, stream>>>(\n        inputs.data_ptr<uint8_t>() + offset,\n        labels.data_ptr<int32_t>() + offset,\n        W,\n        H);\n\n    // get the counting of each pixel\n    cc2d::init_counting<<<grid_count, block_count, 0, stream>>>(\n        labels.data_ptr<int32_t>() + offset,\n        counts_init.data_ptr<int32_t>() + offset,\n        W,\n        H);\n    cc2d::final_counting<<<grid_count, block_count, 0, stream>>>(\n        labels.data_ptr<int32_t>() + offset,\n        counts_init.data_ptr<int32_t>() + offset,\n        counts_final.data_ptr<int32_t>() + offset,\n        W,\n        H);\n  }\n\n  // returned values are [labels, counts]\n  std::vector<torch::Tensor> outputs;\n  outputs.push_back(labels);\n  outputs.push_back(counts_final);\n  return outputs;\n}\n\nPYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {\n  m.def(\n      \"get_connected_componnets\",\n      &get_connected_componnets,\n      \"get_connected_componnets\");\n}\n"
  },
  {
    "path": "auto-seg/sam2/modeling/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n"
  },
  {
    "path": "auto-seg/sam2/modeling/backbones/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n"
  },
  {
    "path": "auto-seg/sam2/modeling/backbones/hieradet.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom functools import partial\nfrom typing import List, Tuple, Union\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom sam2.modeling.backbones.utils import (\n    PatchEmbed,\n    window_partition,\n    window_unpartition,\n)\n\nfrom sam2.modeling.sam2_utils import DropPath, MLP\n\n\ndef do_pool(x: torch.Tensor, pool: nn.Module, norm: nn.Module = None) -> torch.Tensor:\n    if pool is None:\n        return x\n    # (B, H, W, C) -> (B, C, H, W)\n    x = x.permute(0, 3, 1, 2)\n    x = pool(x)\n    # (B, C, H', W') -> (B, H', W', C)\n    x = x.permute(0, 2, 3, 1)\n    if norm:\n        x = norm(x)\n\n    return x\n\n\nclass MultiScaleAttention(nn.Module):\n    def __init__(\n        self,\n        dim: int,\n        dim_out: int,\n        num_heads: int,\n        q_pool: nn.Module = None,\n    ):\n        super().__init__()\n\n        self.dim = dim\n        self.dim_out = dim_out\n        self.num_heads = num_heads\n        self.q_pool = q_pool\n        self.qkv = nn.Linear(dim, dim_out * 3)\n        self.proj = nn.Linear(dim_out, dim_out)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        B, H, W, _ = x.shape\n        # qkv with shape (B, H * W, 3, nHead, C)\n        qkv = self.qkv(x).reshape(B, H * W, 3, self.num_heads, -1)\n        # q, k, v with shape (B, H * W, nheads, C)\n        q, k, v = torch.unbind(qkv, 2)\n\n        # Q pooling (for downsample at stage changes)\n        if self.q_pool:\n            q = do_pool(q.reshape(B, H, W, -1), self.q_pool)\n            H, W = q.shape[1:3]  # downsampled shape\n            q = q.reshape(B, H * W, self.num_heads, -1)\n\n        # Torch's SDPA expects [B, nheads, H*W, C] so we transpose\n        x = F.scaled_dot_product_attention(\n            q.transpose(1, 2),\n            k.transpose(1, 2),\n            v.transpose(1, 2),\n        )\n        # Transpose back\n        x = x.transpose(1, 2)\n        x = x.reshape(B, H, W, -1)\n\n        x = self.proj(x)\n\n        return x\n\n\nclass MultiScaleBlock(nn.Module):\n    def __init__(\n        self,\n        dim: int,\n        dim_out: int,\n        num_heads: int,\n        mlp_ratio: float = 4.0,\n        drop_path: float = 0.0,\n        norm_layer: Union[nn.Module, str] = \"LayerNorm\",\n        q_stride: Tuple[int, int] = None,\n        act_layer: nn.Module = nn.GELU,\n        window_size: int = 0,\n    ):\n        super().__init__()\n\n        if isinstance(norm_layer, str):\n            norm_layer = partial(getattr(nn, norm_layer), eps=1e-6)\n\n        self.dim = dim\n        self.dim_out = dim_out\n        self.norm1 = norm_layer(dim)\n\n        self.window_size = window_size\n\n        self.pool, self.q_stride = None, q_stride\n        if self.q_stride:\n            self.pool = nn.MaxPool2d(\n                kernel_size=q_stride, stride=q_stride, ceil_mode=False\n            )\n\n        self.attn = MultiScaleAttention(\n            dim,\n            dim_out,\n            num_heads=num_heads,\n            q_pool=self.pool,\n        )\n        self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()\n\n        self.norm2 = norm_layer(dim_out)\n        self.mlp = MLP(\n            dim_out,\n            int(dim_out * mlp_ratio),\n            dim_out,\n            num_layers=2,\n            activation=act_layer,\n        )\n\n        if dim != dim_out:\n            self.proj = nn.Linear(dim, dim_out)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        shortcut = x  # B, H, W, C\n        x = self.norm1(x)\n\n        # Skip connection\n        if self.dim != self.dim_out:\n            shortcut = do_pool(self.proj(x), self.pool)\n\n        # Window partition\n        window_size = self.window_size\n        if window_size > 0:\n            H, W = x.shape[1], x.shape[2]\n            x, pad_hw = window_partition(x, window_size)\n\n        # Window Attention + Q Pooling (if stage change)\n        x = self.attn(x)\n        if self.q_stride:\n            # Shapes have changed due to Q pooling\n            window_size = self.window_size // self.q_stride[0]\n            H, W = shortcut.shape[1:3]\n\n            pad_h = (window_size - H % window_size) % window_size\n            pad_w = (window_size - W % window_size) % window_size\n            pad_hw = (H + pad_h, W + pad_w)\n\n        # Reverse window partition\n        if self.window_size > 0:\n            x = window_unpartition(x, window_size, pad_hw, (H, W))\n\n        x = shortcut + self.drop_path(x)\n        # MLP\n        x = x + self.drop_path(self.mlp(self.norm2(x)))\n        return x\n\n\nclass Hiera(nn.Module):\n    \"\"\"\n    Reference: https://arxiv.org/abs/2306.00989\n    \"\"\"\n\n    def __init__(\n        self,\n        embed_dim: int = 96,  # initial embed dim\n        num_heads: int = 1,  # initial number of heads\n        drop_path_rate: float = 0.0,  # stochastic depth\n        q_pool: int = 3,  # number of q_pool stages\n        q_stride: Tuple[int, int] = (2, 2),  # downsample stride bet. stages\n        stages: Tuple[int, ...] = (2, 3, 16, 3),  # blocks per stage\n        dim_mul: float = 2.0,  # dim_mul factor at stage shift\n        head_mul: float = 2.0,  # head_mul factor at stage shift\n        window_pos_embed_bkg_spatial_size: Tuple[int, int] = (14, 14),\n        # window size per stage, when not using global att.\n        window_spec: Tuple[int, ...] = (\n            8,\n            4,\n            14,\n            7,\n        ),\n        # global attn in these blocks\n        global_att_blocks: Tuple[int, ...] = (\n            12,\n            16,\n            20,\n        ),\n        return_interm_layers=True,  # return feats from every stage\n    ):\n        super().__init__()\n\n        assert len(stages) == len(window_spec)\n        self.window_spec = window_spec\n\n        depth = sum(stages)\n        self.q_stride = q_stride\n        self.stage_ends = [sum(stages[:i]) - 1 for i in range(1, len(stages) + 1)]\n        assert 0 <= q_pool <= len(self.stage_ends[:-1])\n        self.q_pool_blocks = [x + 1 for x in self.stage_ends[:-1]][:q_pool]\n        self.return_interm_layers = return_interm_layers\n\n        self.patch_embed = PatchEmbed(\n            embed_dim=embed_dim,\n        )\n        # Which blocks have global att?\n        self.global_att_blocks = global_att_blocks\n\n        # Windowed positional embedding (https://arxiv.org/abs/2311.05613)\n        self.window_pos_embed_bkg_spatial_size = window_pos_embed_bkg_spatial_size\n        self.pos_embed = nn.Parameter(\n            torch.zeros(1, embed_dim, *self.window_pos_embed_bkg_spatial_size)\n        )\n        self.pos_embed_window = nn.Parameter(\n            torch.zeros(1, embed_dim, self.window_spec[0], self.window_spec[0])\n        )\n\n        dpr = [\n            x.item() for x in torch.linspace(0, drop_path_rate, depth)\n        ]  # stochastic depth decay rule\n\n        cur_stage = 1\n        self.blocks = nn.ModuleList()\n\n        for i in range(depth):\n            dim_out = embed_dim\n            # lags by a block, so first block of\n            # next stage uses an initial window size\n            # of previous stage and final window size of current stage\n            window_size = self.window_spec[cur_stage - 1]\n\n            if self.global_att_blocks is not None:\n                window_size = 0 if i in self.global_att_blocks else window_size\n\n            if i - 1 in self.stage_ends:\n                dim_out = int(embed_dim * dim_mul)\n                num_heads = int(num_heads * head_mul)\n                cur_stage += 1\n\n            block = MultiScaleBlock(\n                dim=embed_dim,\n                dim_out=dim_out,\n                num_heads=num_heads,\n                drop_path=dpr[i],\n                q_stride=self.q_stride if i in self.q_pool_blocks else None,\n                window_size=window_size,\n            )\n\n            embed_dim = dim_out\n            self.blocks.append(block)\n\n        self.channel_list = (\n            [self.blocks[i].dim_out for i in self.stage_ends[::-1]]\n            if return_interm_layers\n            else [self.blocks[-1].dim_out]\n        )\n\n    def _get_pos_embed(self, hw: Tuple[int, int]) -> torch.Tensor:\n        h, w = hw\n        window_embed = self.pos_embed_window\n        pos_embed = F.interpolate(self.pos_embed, size=(h, w), mode=\"bicubic\")\n        pos_embed = pos_embed + window_embed.tile(\n            [x // y for x, y in zip(pos_embed.shape, window_embed.shape)]\n        )\n        pos_embed = pos_embed.permute(0, 2, 3, 1)\n        return pos_embed\n\n    def forward(self, x: torch.Tensor) -> List[torch.Tensor]:\n        x = self.patch_embed(x)\n        # x: (B, H, W, C)\n\n        # Add pos embed\n        x = x + self._get_pos_embed(x.shape[1:3])\n\n        outputs = []\n        for i, blk in enumerate(self.blocks):\n            x = blk(x)\n            if (i == self.stage_ends[-1]) or (\n                i in self.stage_ends and self.return_interm_layers\n            ):\n                feats = x.permute(0, 3, 1, 2)\n                outputs.append(feats)\n\n        return outputs\n"
  },
  {
    "path": "auto-seg/sam2/modeling/backbones/image_encoder.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom typing import List, Optional\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\n\nclass ImageEncoder(nn.Module):\n    def __init__(\n        self,\n        trunk: nn.Module,\n        neck: nn.Module,\n        scalp: int = 0,\n    ):\n        super().__init__()\n        self.trunk = trunk\n        self.neck = neck\n        self.scalp = scalp\n        assert (\n            self.trunk.channel_list == self.neck.backbone_channel_list\n        ), f\"Channel dims of trunk and neck do not match. Trunk: {self.trunk.channel_list}, neck: {self.neck.backbone_channel_list}\"\n\n    def forward(self, sample: torch.Tensor):\n        # Forward through backbone\n        features, pos = self.neck(self.trunk(sample))\n        if self.scalp > 0:\n            # Discard the lowest resolution features\n            features, pos = features[: -self.scalp], pos[: -self.scalp]\n\n        src = features[-1]\n        output = {\n            \"vision_features\": src,\n            \"vision_pos_enc\": pos,\n            \"backbone_fpn\": features,\n        }\n        return output\n\n\nclass FpnNeck(nn.Module):\n    \"\"\"\n    A modified variant of Feature Pyramid Network (FPN) neck\n    (we remove output conv and also do bicubic interpolation similar to ViT\n    pos embed interpolation)\n    \"\"\"\n\n    def __init__(\n        self,\n        position_encoding: nn.Module,\n        d_model: int,\n        backbone_channel_list: List[int],\n        kernel_size: int = 1,\n        stride: int = 1,\n        padding: int = 0,\n        fpn_interp_model: str = \"bilinear\",\n        fuse_type: str = \"sum\",\n        fpn_top_down_levels: Optional[List[int]] = None,\n    ):\n        \"\"\"Initialize the neck\n        :param trunk: the backbone\n        :param position_encoding: the positional encoding to use\n        :param d_model: the dimension of the model\n        :param neck_norm: the normalization to use\n        \"\"\"\n        super().__init__()\n        self.position_encoding = position_encoding\n        self.convs = nn.ModuleList()\n        self.backbone_channel_list = backbone_channel_list\n        for dim in backbone_channel_list:\n            current = nn.Sequential()\n            current.add_module(\n                \"conv\",\n                nn.Conv2d(\n                    in_channels=dim,\n                    out_channels=d_model,\n                    kernel_size=kernel_size,\n                    stride=stride,\n                    padding=padding,\n                ),\n            )\n\n            self.convs.append(current)\n        self.fpn_interp_model = fpn_interp_model\n        assert fuse_type in [\"sum\", \"avg\"]\n        self.fuse_type = fuse_type\n\n        # levels to have top-down features in its outputs\n        # e.g. if fpn_top_down_levels is [2, 3], then only outputs of level 2 and 3\n        # have top-down propagation, while outputs of level 0 and level 1 have only\n        # lateral features from the same backbone level.\n        if fpn_top_down_levels is None:\n            # default is to have top-down features on all levels\n            fpn_top_down_levels = range(len(self.convs))\n        self.fpn_top_down_levels = list(fpn_top_down_levels)\n\n    def forward(self, xs: List[torch.Tensor]):\n\n        out = [None] * len(self.convs)\n        pos = [None] * len(self.convs)\n        assert len(xs) == len(self.convs)\n        # fpn forward pass\n        # see https://github.com/facebookresearch/detectron2/blob/main/detectron2/modeling/backbone/fpn.py\n        prev_features = None\n        # forward in top-down order (from low to high resolution)\n        n = len(self.convs) - 1\n        for i in range(n, -1, -1):\n            x = xs[i]\n            lateral_features = self.convs[n - i](x)\n            if i in self.fpn_top_down_levels and prev_features is not None:\n                top_down_features = F.interpolate(\n                    prev_features.to(dtype=torch.float32),\n                    scale_factor=2.0,\n                    mode=self.fpn_interp_model,\n                    align_corners=(\n                        None if self.fpn_interp_model == \"nearest\" else False\n                    ),\n                    antialias=False,\n                )\n                prev_features = lateral_features + top_down_features\n                if self.fuse_type == \"avg\":\n                    prev_features /= 2\n            else:\n                prev_features = lateral_features\n            x_out = prev_features\n            out[i] = x_out\n            pos[i] = self.position_encoding(x_out).to(x_out.dtype)\n\n        return out, pos\n"
  },
  {
    "path": "auto-seg/sam2/modeling/backbones/utils.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\"\"\"Some utilities for backbones, in particular for windowing\"\"\"\n\nfrom typing import Tuple\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\n\ndef window_partition(x, window_size):\n    \"\"\"\n    Partition into non-overlapping windows with padding if needed.\n    Args:\n        x (tensor): input tokens with [B, H, W, C].\n        window_size (int): window size.\n    Returns:\n        windows: windows after partition with [B * num_windows, window_size, window_size, C].\n        (Hp, Wp): padded height and width before partition\n    \"\"\"\n    B, H, W, C = x.shape\n\n    pad_h = (window_size - H % window_size) % window_size\n    pad_w = (window_size - W % window_size) % window_size\n    if pad_h > 0 or pad_w > 0:\n        x = F.pad(x, (0, 0, 0, pad_w, 0, pad_h))\n    Hp, Wp = H + pad_h, W + pad_w\n\n    x = x.view(B, Hp // window_size, window_size, Wp // window_size, window_size, C)\n    windows = (\n        x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size, window_size, C)\n    )\n    return windows, (Hp, Wp)\n\n\ndef window_unpartition(windows, window_size, pad_hw, hw):\n    \"\"\"\n    Window unpartition into original sequences and removing padding.\n    Args:\n        x (tensor): input tokens with [B * num_windows, window_size, window_size, C].\n        window_size (int): window size.\n        pad_hw (Tuple): padded height and width (Hp, Wp).\n        hw (Tuple): original height and width (H, W) before padding.\n    Returns:\n        x: unpartitioned sequences with [B, H, W, C].\n    \"\"\"\n    Hp, Wp = pad_hw\n    H, W = hw\n    B = windows.shape[0] // (Hp * Wp // window_size // window_size)\n    x = windows.view(\n        B, Hp // window_size, Wp // window_size, window_size, window_size, -1\n    )\n    x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, Hp, Wp, -1)\n\n    if Hp > H or Wp > W:\n        x = x[:, :H, :W, :].contiguous()\n    return x\n\n\nclass PatchEmbed(nn.Module):\n    \"\"\"\n    Image to Patch Embedding.\n    \"\"\"\n\n    def __init__(\n        self,\n        kernel_size: Tuple[int, ...] = (7, 7),\n        stride: Tuple[int, ...] = (4, 4),\n        padding: Tuple[int, ...] = (3, 3),\n        in_chans: int = 3,\n        embed_dim: int = 768,\n    ):\n        \"\"\"\n        Args:\n            kernel_size (Tuple): kernel size of the projection layer.\n            stride (Tuple): stride of the projection layer.\n            padding (Tuple): padding size of the projection layer.\n            in_chans (int): Number of input image channels.\n            embed_dim (int):  embed_dim (int): Patch embedding dimension.\n        \"\"\"\n        super().__init__()\n        self.proj = nn.Conv2d(\n            in_chans, embed_dim, kernel_size=kernel_size, stride=stride, padding=padding\n        )\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x = self.proj(x)\n        # B C H W -> B H W C\n        x = x.permute(0, 2, 3, 1)\n        return x\n"
  },
  {
    "path": "auto-seg/sam2/modeling/memory_attention.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom typing import Optional\n\nimport torch\nfrom torch import nn, Tensor\n\nfrom sam2.modeling.sam.transformer import RoPEAttention\n\nfrom sam2.modeling.sam2_utils import get_activation_fn, get_clones\n\n\nclass MemoryAttentionLayer(nn.Module):\n\n    def __init__(\n        self,\n        activation: str,\n        cross_attention: nn.Module,\n        d_model: int,\n        dim_feedforward: int,\n        dropout: float,\n        pos_enc_at_attn: bool,\n        pos_enc_at_cross_attn_keys: bool,\n        pos_enc_at_cross_attn_queries: bool,\n        self_attention: nn.Module,\n    ):\n        super().__init__()\n        self.d_model = d_model\n        self.dim_feedforward = dim_feedforward\n        self.dropout_value = dropout\n        self.self_attn = self_attention\n        self.cross_attn_image = cross_attention\n\n        # Implementation of Feedforward model\n        self.linear1 = nn.Linear(d_model, dim_feedforward)\n        self.dropout = nn.Dropout(dropout)\n        self.linear2 = nn.Linear(dim_feedforward, d_model)\n\n        self.norm1 = nn.LayerNorm(d_model)\n        self.norm2 = nn.LayerNorm(d_model)\n        self.norm3 = nn.LayerNorm(d_model)\n        self.dropout1 = nn.Dropout(dropout)\n        self.dropout2 = nn.Dropout(dropout)\n        self.dropout3 = nn.Dropout(dropout)\n\n        self.activation_str = activation\n        self.activation = get_activation_fn(activation)\n\n        # Where to add pos enc\n        self.pos_enc_at_attn = pos_enc_at_attn\n        self.pos_enc_at_cross_attn_queries = pos_enc_at_cross_attn_queries\n        self.pos_enc_at_cross_attn_keys = pos_enc_at_cross_attn_keys\n\n    def _forward_sa(self, tgt, query_pos):\n        # Self-Attention\n        tgt2 = self.norm1(tgt)\n        q = k = tgt2 + query_pos if self.pos_enc_at_attn else tgt2\n        tgt2 = self.self_attn(q, k, v=tgt2)\n        tgt = tgt + self.dropout1(tgt2)\n        return tgt\n\n    def _forward_ca(self, tgt, memory, query_pos, pos, num_k_exclude_rope=0):\n        kwds = {}\n        if num_k_exclude_rope > 0:\n            assert isinstance(self.cross_attn_image, RoPEAttention)\n            kwds = {\"num_k_exclude_rope\": num_k_exclude_rope}\n\n        # Cross-Attention\n        tgt2 = self.norm2(tgt)\n        tgt2 = self.cross_attn_image(\n            q=tgt2 + query_pos if self.pos_enc_at_cross_attn_queries else tgt2,\n            k=memory + pos if self.pos_enc_at_cross_attn_keys else memory,\n            v=memory,\n            **kwds,\n        )\n        tgt = tgt + self.dropout2(tgt2)\n        return tgt\n\n    def forward(\n        self,\n        tgt,\n        memory,\n        pos: Optional[Tensor] = None,\n        query_pos: Optional[Tensor] = None,\n        num_k_exclude_rope: int = 0,\n    ) -> torch.Tensor:\n\n        # Self-Attn, Cross-Attn\n        tgt = self._forward_sa(tgt, query_pos)\n        tgt = self._forward_ca(tgt, memory, query_pos, pos, num_k_exclude_rope)\n        # MLP\n        tgt2 = self.norm3(tgt)\n        tgt2 = self.linear2(self.dropout(self.activation(self.linear1(tgt2))))\n        tgt = tgt + self.dropout3(tgt2)\n        return tgt\n\n\nclass MemoryAttention(nn.Module):\n    def __init__(\n        self,\n        d_model: int,\n        pos_enc_at_input: bool,\n        layer: nn.Module,\n        num_layers: int,\n        batch_first: bool = True,  # Do layers expect batch first input?\n    ):\n        super().__init__()\n        self.d_model = d_model\n        self.layers = get_clones(layer, num_layers)\n        self.num_layers = num_layers\n        self.norm = nn.LayerNorm(d_model)\n        self.pos_enc_at_input = pos_enc_at_input\n        self.batch_first = batch_first\n\n    def forward(\n        self,\n        curr: torch.Tensor,  # self-attention inputs\n        memory: torch.Tensor,  # cross-attention inputs\n        curr_pos: Optional[Tensor] = None,  # pos_enc for self-attention inputs\n        memory_pos: Optional[Tensor] = None,  # pos_enc for cross-attention inputs\n        num_obj_ptr_tokens: int = 0,  # number of object pointer *tokens*\n    ):\n        if isinstance(curr, list):\n            assert isinstance(curr_pos, list)\n            assert len(curr) == len(curr_pos) == 1\n            curr, curr_pos = (\n                curr[0],\n                curr_pos[0],\n            )\n\n        assert (\n            curr.shape[1] == memory.shape[1]\n        ), \"Batch size must be the same for curr and memory\"\n\n        output = curr\n        if self.pos_enc_at_input and curr_pos is not None:\n            output = output + 0.1 * curr_pos\n\n        if self.batch_first:\n            # Convert to batch first\n            output = output.transpose(0, 1)\n            curr_pos = curr_pos.transpose(0, 1)\n            memory = memory.transpose(0, 1)\n            memory_pos = memory_pos.transpose(0, 1)\n\n        for layer in self.layers:\n            kwds = {}\n            if isinstance(layer.cross_attn_image, RoPEAttention):\n                kwds = {\"num_k_exclude_rope\": num_obj_ptr_tokens}\n\n            output = layer(\n                tgt=output,\n                memory=memory,\n                pos=memory_pos,\n                query_pos=curr_pos,\n                **kwds,\n            )\n        normed_output = self.norm(output)\n\n        if self.batch_first:\n            # Convert back to seq first\n            normed_output = normed_output.transpose(0, 1)\n            curr_pos = curr_pos.transpose(0, 1)\n\n        return normed_output\n"
  },
  {
    "path": "auto-seg/sam2/modeling/memory_encoder.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport math\nfrom typing import Tuple\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom sam2.modeling.sam2_utils import DropPath, get_clones, LayerNorm2d\n\n\nclass MaskDownSampler(nn.Module):\n    \"\"\"\n    Progressively downsample a mask by total_stride, each time by stride.\n    Note that LayerNorm is applied per *token*, like in ViT.\n\n    With each downsample (by a factor stride**2), channel capacity increases by the same factor.\n    In the end, we linearly project to embed_dim channels.\n    \"\"\"\n\n    def __init__(\n        self,\n        embed_dim=256,\n        kernel_size=4,\n        stride=4,\n        padding=0,\n        total_stride=16,\n        activation=nn.GELU,\n    ):\n        super().__init__()\n        num_layers = int(math.log2(total_stride) // math.log2(stride))\n        assert stride**num_layers == total_stride\n        self.encoder = nn.Sequential()\n        mask_in_chans, mask_out_chans = 1, 1\n        for _ in range(num_layers):\n            mask_out_chans = mask_in_chans * (stride**2)\n            self.encoder.append(\n                nn.Conv2d(\n                    mask_in_chans,\n                    mask_out_chans,\n                    kernel_size=kernel_size,\n                    stride=stride,\n                    padding=padding,\n                )\n            )\n            self.encoder.append(LayerNorm2d(mask_out_chans))\n            self.encoder.append(activation())\n            mask_in_chans = mask_out_chans\n\n        self.encoder.append(nn.Conv2d(mask_out_chans, embed_dim, kernel_size=1))\n\n    def forward(self, x):\n        return self.encoder(x)\n\n\n# Lightly adapted from ConvNext (https://github.com/facebookresearch/ConvNeXt)\nclass CXBlock(nn.Module):\n    r\"\"\"ConvNeXt Block. There are two equivalent implementations:\n    (1) DwConv -> LayerNorm (channels_first) -> 1x1 Conv -> GELU -> 1x1 Conv; all in (N, C, H, W)\n    (2) DwConv -> Permute to (N, H, W, C); LayerNorm (channels_last) -> Linear -> GELU -> Linear; Permute back\n    We use (2) as we find it slightly faster in PyTorch\n\n    Args:\n        dim (int): Number of input channels.\n        drop_path (float): Stochastic depth rate. Default: 0.0\n        layer_scale_init_value (float): Init value for Layer Scale. Default: 1e-6.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim,\n        kernel_size=7,\n        padding=3,\n        drop_path=0.0,\n        layer_scale_init_value=1e-6,\n        use_dwconv=True,\n    ):\n        super().__init__()\n        self.dwconv = nn.Conv2d(\n            dim,\n            dim,\n            kernel_size=kernel_size,\n            padding=padding,\n            groups=dim if use_dwconv else 1,\n        )  # depthwise conv\n        self.norm = LayerNorm2d(dim, eps=1e-6)\n        self.pwconv1 = nn.Linear(\n            dim, 4 * dim\n        )  # pointwise/1x1 convs, implemented with linear layers\n        self.act = nn.GELU()\n        self.pwconv2 = nn.Linear(4 * dim, dim)\n        self.gamma = (\n            nn.Parameter(layer_scale_init_value * torch.ones((dim)), requires_grad=True)\n            if layer_scale_init_value > 0\n            else None\n        )\n        self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()\n\n    def forward(self, x):\n        input = x\n        x = self.dwconv(x)\n        x = self.norm(x)\n        x = x.permute(0, 2, 3, 1)  # (N, C, H, W) -> (N, H, W, C)\n        x = self.pwconv1(x)\n        x = self.act(x)\n        x = self.pwconv2(x)\n        if self.gamma is not None:\n            x = self.gamma * x\n        x = x.permute(0, 3, 1, 2)  # (N, H, W, C) -> (N, C, H, W)\n\n        x = input + self.drop_path(x)\n        return x\n\n\nclass Fuser(nn.Module):\n    def __init__(self, layer, num_layers, dim=None, input_projection=False):\n        super().__init__()\n        self.proj = nn.Identity()\n        self.layers = get_clones(layer, num_layers)\n\n        if input_projection:\n            assert dim is not None\n            self.proj = nn.Conv2d(dim, dim, kernel_size=1)\n\n    def forward(self, x):\n        # normally x: (N, C, H, W)\n        x = self.proj(x)\n        for layer in self.layers:\n            x = layer(x)\n        return x\n\n\nclass MemoryEncoder(nn.Module):\n    def __init__(\n        self,\n        out_dim,\n        mask_downsampler,\n        fuser,\n        position_encoding,\n        in_dim=256,  # in_dim of pix_feats\n    ):\n        super().__init__()\n\n        self.mask_downsampler = mask_downsampler\n\n        self.pix_feat_proj = nn.Conv2d(in_dim, in_dim, kernel_size=1)\n        self.fuser = fuser\n        self.position_encoding = position_encoding\n        self.out_proj = nn.Identity()\n        if out_dim != in_dim:\n            self.out_proj = nn.Conv2d(in_dim, out_dim, kernel_size=1)\n\n    def forward(\n        self,\n        pix_feat: torch.Tensor,\n        masks: torch.Tensor,\n        skip_mask_sigmoid: bool = False,\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        ## Process masks\n        # sigmoid, so that less domain shift from gt masks which are bool\n        if not skip_mask_sigmoid:\n            masks = F.sigmoid(masks)\n        masks = self.mask_downsampler(masks)\n\n        ## Fuse pix_feats and downsampled masks\n        # in case the visual features are on CPU, cast them to CUDA\n        pix_feat = pix_feat.to(masks.device)\n\n        x = self.pix_feat_proj(pix_feat)\n        x = x + masks\n        x = self.fuser(x)\n        x = self.out_proj(x)\n\n        pos = self.position_encoding(x).to(x.dtype)\n\n        return {\"vision_features\": x, \"vision_pos_enc\": [pos]}\n"
  },
  {
    "path": "auto-seg/sam2/modeling/position_encoding.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport math\nfrom typing import Any, Optional, Tuple\n\nimport numpy as np\n\nimport torch\nfrom torch import nn\n\n\nclass PositionEmbeddingSine(nn.Module):\n    \"\"\"\n    This is a more standard version of the position embedding, very similar to the one\n    used by the Attention Is All You Need paper, generalized to work on images.\n    \"\"\"\n\n    def __init__(\n        self,\n        num_pos_feats,\n        temperature: int = 10000,\n        normalize: bool = True,\n        scale: Optional[float] = None,\n    ):\n        super().__init__()\n        assert num_pos_feats % 2 == 0, \"Expecting even model width\"\n        self.num_pos_feats = num_pos_feats // 2\n        self.temperature = temperature\n        self.normalize = normalize\n        if scale is not None and normalize is False:\n            raise ValueError(\"normalize should be True if scale is passed\")\n        if scale is None:\n            scale = 2 * math.pi\n        self.scale = scale\n\n        self.cache = {}\n\n    def _encode_xy(self, x, y):\n        # The positions are expected to be normalized\n        assert len(x) == len(y) and x.ndim == y.ndim == 1\n        x_embed = x * self.scale\n        y_embed = y * self.scale\n\n        dim_t = torch.arange(self.num_pos_feats, dtype=torch.float32, device=x.device)\n        dim_t = self.temperature ** (2 * (dim_t // 2) / self.num_pos_feats)\n\n        pos_x = x_embed[:, None] / dim_t\n        pos_y = y_embed[:, None] / dim_t\n        pos_x = torch.stack(\n            (pos_x[:, 0::2].sin(), pos_x[:, 1::2].cos()), dim=2\n        ).flatten(1)\n        pos_y = torch.stack(\n            (pos_y[:, 0::2].sin(), pos_y[:, 1::2].cos()), dim=2\n        ).flatten(1)\n        return pos_x, pos_y\n\n    @torch.no_grad()\n    def encode_boxes(self, x, y, w, h):\n        pos_x, pos_y = self._encode_xy(x, y)\n        pos = torch.cat((pos_y, pos_x, h[:, None], w[:, None]), dim=1)\n        return pos\n\n    encode = encode_boxes  # Backwards compatibility\n\n    @torch.no_grad()\n    def encode_points(self, x, y, labels):\n        (bx, nx), (by, ny), (bl, nl) = x.shape, y.shape, labels.shape\n        assert bx == by and nx == ny and bx == bl and nx == nl\n        pos_x, pos_y = self._encode_xy(x.flatten(), y.flatten())\n        pos_x, pos_y = pos_x.reshape(bx, nx, -1), pos_y.reshape(by, ny, -1)\n        pos = torch.cat((pos_y, pos_x, labels[:, :, None]), dim=2)\n        return pos\n\n    @torch.no_grad()\n    def forward(self, x: torch.Tensor):\n        cache_key = (x.shape[-2], x.shape[-1])\n        if cache_key in self.cache:\n            return self.cache[cache_key][None].repeat(x.shape[0], 1, 1, 1)\n        y_embed = (\n            torch.arange(1, x.shape[-2] + 1, dtype=torch.float32, device=x.device)\n            .view(1, -1, 1)\n            .repeat(x.shape[0], 1, x.shape[-1])\n        )\n        x_embed = (\n            torch.arange(1, x.shape[-1] + 1, dtype=torch.float32, device=x.device)\n            .view(1, 1, -1)\n            .repeat(x.shape[0], x.shape[-2], 1)\n        )\n\n        if self.normalize:\n            eps = 1e-6\n            y_embed = y_embed / (y_embed[:, -1:, :] + eps) * self.scale\n            x_embed = x_embed / (x_embed[:, :, -1:] + eps) * self.scale\n\n        dim_t = torch.arange(self.num_pos_feats, dtype=torch.float32, device=x.device)\n        dim_t = self.temperature ** (2 * (dim_t // 2) / self.num_pos_feats)\n\n        pos_x = x_embed[:, :, :, None] / dim_t\n        pos_y = y_embed[:, :, :, None] / dim_t\n        pos_x = torch.stack(\n            (pos_x[:, :, :, 0::2].sin(), pos_x[:, :, :, 1::2].cos()), dim=4\n        ).flatten(3)\n        pos_y = torch.stack(\n            (pos_y[:, :, :, 0::2].sin(), pos_y[:, :, :, 1::2].cos()), dim=4\n        ).flatten(3)\n        pos = torch.cat((pos_y, pos_x), dim=3).permute(0, 3, 1, 2)\n        self.cache[cache_key] = pos[0]\n        return pos\n\n\nclass PositionEmbeddingRandom(nn.Module):\n    \"\"\"\n    Positional encoding using random spatial frequencies.\n    \"\"\"\n\n    def __init__(self, num_pos_feats: int = 64, scale: Optional[float] = None) -> None:\n        super().__init__()\n        if scale is None or scale <= 0.0:\n            scale = 1.0\n        self.register_buffer(\n            \"positional_encoding_gaussian_matrix\",\n            scale * torch.randn((2, num_pos_feats)),\n        )\n\n    def _pe_encoding(self, coords: torch.Tensor) -> torch.Tensor:\n        \"\"\"Positionally encode points that are normalized to [0,1].\"\"\"\n        # assuming coords are in [0, 1]^2 square and have d_1 x ... x d_n x 2 shape\n        coords = 2 * coords - 1\n        coords = coords @ self.positional_encoding_gaussian_matrix\n        coords = 2 * np.pi * coords\n        # outputs d_1 x ... x d_n x C shape\n        return torch.cat([torch.sin(coords), torch.cos(coords)], dim=-1)\n\n    def forward(self, size: Tuple[int, int]) -> torch.Tensor:\n        \"\"\"Generate positional encoding for a grid of the specified size.\"\"\"\n        h, w = size\n        device: Any = self.positional_encoding_gaussian_matrix.device\n        grid = torch.ones((h, w), device=device, dtype=torch.float32)\n        y_embed = grid.cumsum(dim=0) - 0.5\n        x_embed = grid.cumsum(dim=1) - 0.5\n        y_embed = y_embed / h\n        x_embed = x_embed / w\n\n        pe = self._pe_encoding(torch.stack([x_embed, y_embed], dim=-1))\n        return pe.permute(2, 0, 1)  # C x H x W\n\n    def forward_with_coords(\n        self, coords_input: torch.Tensor, image_size: Tuple[int, int]\n    ) -> torch.Tensor:\n        \"\"\"Positionally encode points that are not normalized to [0,1].\"\"\"\n        coords = coords_input.clone()\n        coords[:, :, 0] = coords[:, :, 0] / image_size[1]\n        coords[:, :, 1] = coords[:, :, 1] / image_size[0]\n        return self._pe_encoding(coords.to(torch.float))  # B x N x C\n\n\n# Rotary Positional Encoding, adapted from:\n# 1. https://github.com/meta-llama/codellama/blob/main/llama/model.py\n# 2. https://github.com/naver-ai/rope-vit\n# 3. https://github.com/lucidrains/rotary-embedding-torch\n\n\ndef init_t_xy(end_x: int, end_y: int):\n    t = torch.arange(end_x * end_y, dtype=torch.float32)\n    t_x = (t % end_x).float()\n    t_y = torch.div(t, end_x, rounding_mode=\"floor\").float()\n    return t_x, t_y\n\n\ndef compute_axial_cis(dim: int, end_x: int, end_y: int, theta: float = 10000.0):\n    freqs_x = 1.0 / (theta ** (torch.arange(0, dim, 4)[: (dim // 4)].float() / dim))\n    freqs_y = 1.0 / (theta ** (torch.arange(0, dim, 4)[: (dim // 4)].float() / dim))\n\n    t_x, t_y = init_t_xy(end_x, end_y)\n    freqs_x = torch.outer(t_x, freqs_x)\n    freqs_y = torch.outer(t_y, freqs_y)\n    freqs_cis_x = torch.polar(torch.ones_like(freqs_x), freqs_x)\n    freqs_cis_y = torch.polar(torch.ones_like(freqs_y), freqs_y)\n    return torch.cat([freqs_cis_x, freqs_cis_y], dim=-1)\n\n\ndef reshape_for_broadcast(freqs_cis: torch.Tensor, x: torch.Tensor):\n    ndim = x.ndim\n    assert 0 <= 1 < ndim\n    assert freqs_cis.shape == (x.shape[-2], x.shape[-1])\n    shape = [d if i >= ndim - 2 else 1 for i, d in enumerate(x.shape)]\n    return freqs_cis.view(*shape)\n\n\ndef apply_rotary_enc(\n    xq: torch.Tensor,\n    xk: torch.Tensor,\n    freqs_cis: torch.Tensor,\n    repeat_freqs_k: bool = False,\n):\n    xq_ = torch.view_as_complex(xq.float().reshape(*xq.shape[:-1], -1, 2))\n    xk_ = (\n        torch.view_as_complex(xk.float().reshape(*xk.shape[:-1], -1, 2))\n        if xk.shape[-2] != 0\n        else None\n    )\n    freqs_cis = reshape_for_broadcast(freqs_cis, xq_)\n    xq_out = torch.view_as_real(xq_ * freqs_cis).flatten(3)\n    if xk_ is None:\n        # no keys to rotate, due to dropout\n        return xq_out.type_as(xq).to(xq.device), xk\n    # repeat freqs along seq_len dim to match k seq_len\n    if repeat_freqs_k:\n        r = xk_.shape[-2] // xq_.shape[-2]\n        if freqs_cis.is_cuda:\n            freqs_cis = freqs_cis.repeat(*([1] * (freqs_cis.ndim - 2)), r, 1)\n        else:\n            # torch.repeat on complex numbers may not be supported on non-CUDA devices\n            # (freqs_cis has 4 dims and we repeat on dim 2) so we use expand + flatten\n            freqs_cis = freqs_cis.unsqueeze(2).expand(-1, -1, r, -1, -1).flatten(2, 3)\n    xk_out = torch.view_as_real(xk_ * freqs_cis).flatten(3)\n    return xq_out.type_as(xq).to(xq.device), xk_out.type_as(xk).to(xk.device)\n"
  },
  {
    "path": "auto-seg/sam2/modeling/sam/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n"
  },
  {
    "path": "auto-seg/sam2/modeling/sam/mask_decoder.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom typing import List, Optional, Tuple, Type\n\nimport torch\nfrom torch import nn\n\nfrom sam2.modeling.sam2_utils import LayerNorm2d, MLP\n\n\nclass MaskDecoder(nn.Module):\n    def __init__(\n        self,\n        *,\n        transformer_dim: int,\n        transformer: nn.Module,\n        num_multimask_outputs: int = 3,\n        activation: Type[nn.Module] = nn.GELU,\n        iou_head_depth: int = 3,\n        iou_head_hidden_dim: int = 256,\n        use_high_res_features: bool = False,\n        iou_prediction_use_sigmoid=False,\n        dynamic_multimask_via_stability=False,\n        dynamic_multimask_stability_delta=0.05,\n        dynamic_multimask_stability_thresh=0.98,\n        pred_obj_scores: bool = False,\n        pred_obj_scores_mlp: bool = False,\n        use_multimask_token_for_obj_ptr: bool = False,\n    ) -> None:\n        \"\"\"\n        Predicts masks given an image and prompt embeddings, using a\n        transformer architecture.\n\n        Arguments:\n          transformer_dim (int): the channel dimension of the transformer\n          transformer (nn.Module): the transformer used to predict masks\n          num_multimask_outputs (int): the number of masks to predict\n            when disambiguating masks\n          activation (nn.Module): the type of activation to use when\n            upscaling masks\n          iou_head_depth (int): the depth of the MLP used to predict\n            mask quality\n          iou_head_hidden_dim (int): the hidden dimension of the MLP\n            used to predict mask quality\n        \"\"\"\n        super().__init__()\n        self.transformer_dim = transformer_dim\n        self.transformer = transformer\n\n        self.num_multimask_outputs = num_multimask_outputs\n\n        self.iou_token = nn.Embedding(1, transformer_dim)\n        self.num_mask_tokens = num_multimask_outputs + 1\n        self.mask_tokens = nn.Embedding(self.num_mask_tokens, transformer_dim)\n\n        self.pred_obj_scores = pred_obj_scores\n        if self.pred_obj_scores:\n            self.obj_score_token = nn.Embedding(1, transformer_dim)\n        self.use_multimask_token_for_obj_ptr = use_multimask_token_for_obj_ptr\n\n        self.output_upscaling = nn.Sequential(\n            nn.ConvTranspose2d(\n                transformer_dim, transformer_dim // 4, kernel_size=2, stride=2\n            ),\n            LayerNorm2d(transformer_dim // 4),\n            activation(),\n            nn.ConvTranspose2d(\n                transformer_dim // 4, transformer_dim // 8, kernel_size=2, stride=2\n            ),\n            activation(),\n        )\n        self.use_high_res_features = use_high_res_features\n        if use_high_res_features:\n            self.conv_s0 = nn.Conv2d(\n                transformer_dim, transformer_dim // 8, kernel_size=1, stride=1\n            )\n            self.conv_s1 = nn.Conv2d(\n                transformer_dim, transformer_dim // 4, kernel_size=1, stride=1\n            )\n\n        self.output_hypernetworks_mlps = nn.ModuleList(\n            [\n                MLP(transformer_dim, transformer_dim, transformer_dim // 8, 3)\n                for i in range(self.num_mask_tokens)\n            ]\n        )\n\n        self.iou_prediction_head = MLP(\n            transformer_dim,\n            iou_head_hidden_dim,\n            self.num_mask_tokens,\n            iou_head_depth,\n            sigmoid_output=iou_prediction_use_sigmoid,\n        )\n        if self.pred_obj_scores:\n            self.pred_obj_score_head = nn.Linear(transformer_dim, 1)\n            if pred_obj_scores_mlp:\n                self.pred_obj_score_head = MLP(transformer_dim, transformer_dim, 1, 3)\n\n        # When outputting a single mask, optionally we can dynamically fall back to the best\n        # multimask output token if the single mask output token gives low stability scores.\n        self.dynamic_multimask_via_stability = dynamic_multimask_via_stability\n        self.dynamic_multimask_stability_delta = dynamic_multimask_stability_delta\n        self.dynamic_multimask_stability_thresh = dynamic_multimask_stability_thresh\n\n    def forward(\n        self,\n        image_embeddings: torch.Tensor,\n        image_pe: torch.Tensor,\n        sparse_prompt_embeddings: torch.Tensor,\n        dense_prompt_embeddings: torch.Tensor,\n        multimask_output: bool,\n        repeat_image: bool,\n        high_res_features: Optional[List[torch.Tensor]] = None,\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"\n        Predict masks given image and prompt embeddings.\n\n        Arguments:\n          image_embeddings (torch.Tensor): the embeddings from the image encoder\n          image_pe (torch.Tensor): positional encoding with the shape of image_embeddings\n          sparse_prompt_embeddings (torch.Tensor): the embeddings of the points and boxes\n          dense_prompt_embeddings (torch.Tensor): the embeddings of the mask inputs\n          multimask_output (bool): Whether to return multiple masks or a single\n            mask.\n\n        Returns:\n          torch.Tensor: batched predicted masks\n          torch.Tensor: batched predictions of mask quality\n          torch.Tensor: batched SAM token for mask output\n        \"\"\"\n        masks, iou_pred, mask_tokens_out, object_score_logits = self.predict_masks(\n            image_embeddings=image_embeddings,\n            image_pe=image_pe,\n            sparse_prompt_embeddings=sparse_prompt_embeddings,\n            dense_prompt_embeddings=dense_prompt_embeddings,\n            repeat_image=repeat_image,\n            high_res_features=high_res_features,\n        )\n\n        # Select the correct mask or masks for output\n        if multimask_output:\n            masks = masks[:, 1:, :, :]\n            iou_pred = iou_pred[:, 1:]\n        elif self.dynamic_multimask_via_stability and not self.training:\n            masks, iou_pred = self._dynamic_multimask_via_stability(masks, iou_pred)\n        else:\n            masks = masks[:, 0:1, :, :]\n            iou_pred = iou_pred[:, 0:1]\n\n        if multimask_output and self.use_multimask_token_for_obj_ptr:\n            sam_tokens_out = mask_tokens_out[:, 1:]  # [b, 3, c] shape\n        else:\n            # Take the mask output token. Here we *always* use the token for single mask output.\n            # At test time, even if we track after 1-click (and using multimask_output=True),\n            # we still take the single mask token here. The rationale is that we always track\n            # after multiple clicks during training, so the past tokens seen during training\n            # are always the single mask token (and we'll let it be the object-memory token).\n            sam_tokens_out = mask_tokens_out[:, 0:1]  # [b, 1, c] shape\n\n        # Prepare output\n        return masks, iou_pred, sam_tokens_out, object_score_logits\n\n    def predict_masks(\n        self,\n        image_embeddings: torch.Tensor,\n        image_pe: torch.Tensor,\n        sparse_prompt_embeddings: torch.Tensor,\n        dense_prompt_embeddings: torch.Tensor,\n        repeat_image: bool,\n        high_res_features: Optional[List[torch.Tensor]] = None,\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Predicts masks. See 'forward' for more details.\"\"\"\n        # Concatenate output tokens\n        s = 0\n        if self.pred_obj_scores:\n            output_tokens = torch.cat(\n                [\n                    self.obj_score_token.weight,\n                    self.iou_token.weight,\n                    self.mask_tokens.weight,\n                ],\n                dim=0,\n            )\n            s = 1\n        else:\n            output_tokens = torch.cat(\n                [self.iou_token.weight, self.mask_tokens.weight], dim=0\n            )\n        output_tokens = output_tokens.unsqueeze(0).expand(\n            sparse_prompt_embeddings.size(0), -1, -1\n        )\n        tokens = torch.cat((output_tokens, sparse_prompt_embeddings), dim=1)\n\n        # Expand per-image data in batch direction to be per-mask\n        if repeat_image:\n            src = torch.repeat_interleave(image_embeddings, tokens.shape[0], dim=0)\n        else:\n            assert image_embeddings.shape[0] == tokens.shape[0]\n            src = image_embeddings\n        src = src + dense_prompt_embeddings\n        assert (\n            image_pe.size(0) == 1\n        ), \"image_pe should have size 1 in batch dim (from `get_dense_pe()`)\"\n        pos_src = torch.repeat_interleave(image_pe, tokens.shape[0], dim=0)\n        b, c, h, w = src.shape\n\n        # Run the transformer\n        hs, src = self.transformer(src, pos_src, tokens)\n        iou_token_out = hs[:, s, :]\n        mask_tokens_out = hs[:, s + 1 : (s + 1 + self.num_mask_tokens), :]\n\n        # Upscale mask embeddings and predict masks using the mask tokens\n        src = src.transpose(1, 2).view(b, c, h, w)\n        if not self.use_high_res_features:\n            upscaled_embedding = self.output_upscaling(src)\n        else:\n            dc1, ln1, act1, dc2, act2 = self.output_upscaling\n            feat_s0, feat_s1 = high_res_features\n            upscaled_embedding = act1(ln1(dc1(src) + feat_s1))\n            upscaled_embedding = act2(dc2(upscaled_embedding) + feat_s0)\n\n        hyper_in_list: List[torch.Tensor] = []\n        for i in range(self.num_mask_tokens):\n            hyper_in_list.append(\n                self.output_hypernetworks_mlps[i](mask_tokens_out[:, i, :])\n            )\n        hyper_in = torch.stack(hyper_in_list, dim=1)\n        b, c, h, w = upscaled_embedding.shape\n        masks = (hyper_in @ upscaled_embedding.view(b, c, h * w)).view(b, -1, h, w)\n\n        # Generate mask quality predictions\n        iou_pred = self.iou_prediction_head(iou_token_out)\n        if self.pred_obj_scores:\n            assert s == 1\n            object_score_logits = self.pred_obj_score_head(hs[:, 0, :])\n        else:\n            # Obj scores logits - default to 10.0, i.e. assuming the object is present, sigmoid(10)=1\n            object_score_logits = 10.0 * iou_pred.new_ones(iou_pred.shape[0], 1)\n\n        return masks, iou_pred, mask_tokens_out, object_score_logits\n\n    def _get_stability_scores(self, mask_logits):\n        \"\"\"\n        Compute stability scores of the mask logits based on the IoU between upper and\n        lower thresholds, similar to https://github.com/fairinternal/onevision/pull/568.\n        \"\"\"\n        mask_logits = mask_logits.flatten(-2)\n        stability_delta = self.dynamic_multimask_stability_delta\n        area_i = torch.sum(mask_logits > stability_delta, dim=-1).float()\n        area_u = torch.sum(mask_logits > -stability_delta, dim=-1).float()\n        stability_scores = torch.where(area_u > 0, area_i / area_u, 1.0)\n        return stability_scores\n\n    def _dynamic_multimask_via_stability(self, all_mask_logits, all_iou_scores):\n        \"\"\"\n        When outputting a single mask, if the stability score from the current single-mask\n        output (based on output token 0) falls below a threshold, we instead select from\n        multi-mask outputs (based on output token 1~3) the mask with the highest predicted\n        IoU score. This is intended to ensure a valid mask for both clicking and tracking.\n        \"\"\"\n        # The best mask from multimask output tokens (1~3)\n        multimask_logits = all_mask_logits[:, 1:, :, :]\n        multimask_iou_scores = all_iou_scores[:, 1:]\n        best_scores_inds = torch.argmax(multimask_iou_scores, dim=-1)\n        batch_inds = torch.arange(\n            multimask_iou_scores.size(0), device=all_iou_scores.device\n        )\n        best_multimask_logits = multimask_logits[batch_inds, best_scores_inds]\n        best_multimask_logits = best_multimask_logits.unsqueeze(1)\n        best_multimask_iou_scores = multimask_iou_scores[batch_inds, best_scores_inds]\n        best_multimask_iou_scores = best_multimask_iou_scores.unsqueeze(1)\n\n        # The mask from singlemask output token 0 and its stability score\n        singlemask_logits = all_mask_logits[:, 0:1, :, :]\n        singlemask_iou_scores = all_iou_scores[:, 0:1]\n        stability_scores = self._get_stability_scores(singlemask_logits)\n        is_stable = stability_scores >= self.dynamic_multimask_stability_thresh\n\n        # Dynamically fall back to best multimask output upon low stability scores.\n        mask_logits_out = torch.where(\n            is_stable[..., None, None].expand_as(singlemask_logits),\n            singlemask_logits,\n            best_multimask_logits,\n        )\n        iou_scores_out = torch.where(\n            is_stable.expand_as(singlemask_iou_scores),\n            singlemask_iou_scores,\n            best_multimask_iou_scores,\n        )\n        return mask_logits_out, iou_scores_out\n"
  },
  {
    "path": "auto-seg/sam2/modeling/sam/prompt_encoder.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom typing import Optional, Tuple, Type\n\nimport torch\nfrom torch import nn\n\nfrom sam2.modeling.position_encoding import PositionEmbeddingRandom\n\nfrom sam2.modeling.sam2_utils import LayerNorm2d\n\n\nclass PromptEncoder(nn.Module):\n    def __init__(\n        self,\n        embed_dim: int,\n        image_embedding_size: Tuple[int, int],\n        input_image_size: Tuple[int, int],\n        mask_in_chans: int,\n        activation: Type[nn.Module] = nn.GELU,\n    ) -> None:\n        \"\"\"\n        Encodes prompts for input to SAM's mask decoder.\n\n        Arguments:\n          embed_dim (int): The prompts' embedding dimension\n          image_embedding_size (tuple(int, int)): The spatial size of the\n            image embedding, as (H, W).\n          input_image_size (int): The padded size of the image as input\n            to the image encoder, as (H, W).\n          mask_in_chans (int): The number of hidden channels used for\n            encoding input masks.\n          activation (nn.Module): The activation to use when encoding\n            input masks.\n        \"\"\"\n        super().__init__()\n        self.embed_dim = embed_dim\n        self.input_image_size = input_image_size\n        self.image_embedding_size = image_embedding_size\n        self.pe_layer = PositionEmbeddingRandom(embed_dim // 2)\n\n        self.num_point_embeddings: int = 4  # pos/neg point + 2 box corners\n        point_embeddings = [\n            nn.Embedding(1, embed_dim) for i in range(self.num_point_embeddings)\n        ]\n        self.point_embeddings = nn.ModuleList(point_embeddings)\n        self.not_a_point_embed = nn.Embedding(1, embed_dim)\n\n        self.mask_input_size = (\n            4 * image_embedding_size[0],\n            4 * image_embedding_size[1],\n        )\n        self.mask_downscaling = nn.Sequential(\n            nn.Conv2d(1, mask_in_chans // 4, kernel_size=2, stride=2),\n            LayerNorm2d(mask_in_chans // 4),\n            activation(),\n            nn.Conv2d(mask_in_chans // 4, mask_in_chans, kernel_size=2, stride=2),\n            LayerNorm2d(mask_in_chans),\n            activation(),\n            nn.Conv2d(mask_in_chans, embed_dim, kernel_size=1),\n        )\n        self.no_mask_embed = nn.Embedding(1, embed_dim)\n\n    def get_dense_pe(self) -> torch.Tensor:\n        \"\"\"\n        Returns the positional encoding used to encode point prompts,\n        applied to a dense set of points the shape of the image encoding.\n\n        Returns:\n          torch.Tensor: Positional encoding with shape\n            1x(embed_dim)x(embedding_h)x(embedding_w)\n        \"\"\"\n        return self.pe_layer(self.image_embedding_size).unsqueeze(0)\n\n    def _embed_points(\n        self,\n        points: torch.Tensor,\n        labels: torch.Tensor,\n        pad: bool,\n    ) -> torch.Tensor:\n        \"\"\"Embeds point prompts.\"\"\"\n        points = points + 0.5  # Shift to center of pixel\n        if pad:\n            padding_point = torch.zeros((points.shape[0], 1, 2), device=points.device)\n            padding_label = -torch.ones((labels.shape[0], 1), device=labels.device)\n            points = torch.cat([points, padding_point], dim=1)\n            labels = torch.cat([labels, padding_label], dim=1)\n        point_embedding = self.pe_layer.forward_with_coords(\n            points, self.input_image_size\n        )\n        point_embedding[labels == -1] = 0.0\n        point_embedding[labels == -1] += self.not_a_point_embed.weight\n        point_embedding[labels == 0] += self.point_embeddings[0].weight\n        point_embedding[labels == 1] += self.point_embeddings[1].weight\n        point_embedding[labels == 2] += self.point_embeddings[2].weight\n        point_embedding[labels == 3] += self.point_embeddings[3].weight\n        return point_embedding\n\n    def _embed_boxes(self, boxes: torch.Tensor) -> torch.Tensor:\n        \"\"\"Embeds box prompts.\"\"\"\n        boxes = boxes + 0.5  # Shift to center of pixel\n        coords = boxes.reshape(-1, 2, 2)\n        corner_embedding = self.pe_layer.forward_with_coords(\n            coords, self.input_image_size\n        )\n        corner_embedding[:, 0, :] += self.point_embeddings[2].weight\n        corner_embedding[:, 1, :] += self.point_embeddings[3].weight\n        return corner_embedding\n\n    def _embed_masks(self, masks: torch.Tensor) -> torch.Tensor:\n        \"\"\"Embeds mask inputs.\"\"\"\n        mask_embedding = self.mask_downscaling(masks)\n        return mask_embedding\n\n    def _get_batch_size(\n        self,\n        points: Optional[Tuple[torch.Tensor, torch.Tensor]],\n        boxes: Optional[torch.Tensor],\n        masks: Optional[torch.Tensor],\n    ) -> int:\n        \"\"\"\n        Gets the batch size of the output given the batch size of the input prompts.\n        \"\"\"\n        if points is not None:\n            return points[0].shape[0]\n        elif boxes is not None:\n            return boxes.shape[0]\n        elif masks is not None:\n            return masks.shape[0]\n        else:\n            return 1\n\n    def _get_device(self) -> torch.device:\n        return self.point_embeddings[0].weight.device\n\n    def forward(\n        self,\n        points: Optional[Tuple[torch.Tensor, torch.Tensor]],\n        boxes: Optional[torch.Tensor],\n        masks: Optional[torch.Tensor],\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"\n        Embeds different types of prompts, returning both sparse and dense\n        embeddings.\n\n        Arguments:\n          points (tuple(torch.Tensor, torch.Tensor) or none): point coordinates\n            and labels to embed.\n          boxes (torch.Tensor or none): boxes to embed\n          masks (torch.Tensor or none): masks to embed\n\n        Returns:\n          torch.Tensor: sparse embeddings for the points and boxes, with shape\n            BxNx(embed_dim), where N is determined by the number of input points\n            and boxes.\n          torch.Tensor: dense embeddings for the masks, in the shape\n            Bx(embed_dim)x(embed_H)x(embed_W)\n        \"\"\"\n        bs = self._get_batch_size(points, boxes, masks)\n        sparse_embeddings = torch.empty(\n            (bs, 0, self.embed_dim), device=self._get_device()\n        )\n        if points is not None:\n            coords, labels = points\n            point_embeddings = self._embed_points(coords, labels, pad=(boxes is None))\n            sparse_embeddings = torch.cat([sparse_embeddings, point_embeddings], dim=1)\n        if boxes is not None:\n            box_embeddings = self._embed_boxes(boxes)\n            sparse_embeddings = torch.cat([sparse_embeddings, box_embeddings], dim=1)\n\n        if masks is not None:\n            dense_embeddings = self._embed_masks(masks)\n        else:\n            dense_embeddings = self.no_mask_embed.weight.reshape(1, -1, 1, 1).expand(\n                bs, -1, self.image_embedding_size[0], self.image_embedding_size[1]\n            )\n\n        return sparse_embeddings, dense_embeddings\n"
  },
  {
    "path": "auto-seg/sam2/modeling/sam/transformer.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport contextlib\nimport math\nimport warnings\nfrom functools import partial\nfrom typing import Tuple, Type\n\nimport torch\nimport torch.nn.functional as F\nfrom torch import nn, Tensor\n\nfrom sam2.modeling.position_encoding import apply_rotary_enc, compute_axial_cis\nfrom sam2.modeling.sam2_utils import MLP\nfrom sam2.utils.misc import get_sdpa_settings\n\nwarnings.simplefilter(action=\"ignore\", category=FutureWarning)\n# Check whether Flash Attention is available (and use it by default)\nOLD_GPU, USE_FLASH_ATTN, MATH_KERNEL_ON = get_sdpa_settings()\n# A fallback setting to allow all available kernels if Flash Attention fails\nALLOW_ALL_KERNELS = False\n\n\ndef sdp_kernel_context(dropout_p):\n    \"\"\"\n    Get the context for the attention scaled dot-product kernel. We use Flash Attention\n    by default, but fall back to all available kernels if Flash Attention fails.\n    \"\"\"\n    if ALLOW_ALL_KERNELS:\n        return contextlib.nullcontext()\n\n    return torch.backends.cuda.sdp_kernel(\n        enable_flash=USE_FLASH_ATTN,\n        # if Flash attention kernel is off, then math kernel needs to be enabled\n        enable_math=(OLD_GPU and dropout_p > 0.0) or MATH_KERNEL_ON,\n        enable_mem_efficient=OLD_GPU,\n    )\n\n\nclass TwoWayTransformer(nn.Module):\n    def __init__(\n        self,\n        depth: int,\n        embedding_dim: int,\n        num_heads: int,\n        mlp_dim: int,\n        activation: Type[nn.Module] = nn.ReLU,\n        attention_downsample_rate: int = 2,\n    ) -> None:\n        \"\"\"\n        A transformer decoder that attends to an input image using\n        queries whose positional embedding is supplied.\n\n        Args:\n          depth (int): number of layers in the transformer\n          embedding_dim (int): the channel dimension for the input embeddings\n          num_heads (int): the number of heads for multihead attention. Must\n            divide embedding_dim\n          mlp_dim (int): the channel dimension internal to the MLP block\n          activation (nn.Module): the activation to use in the MLP block\n        \"\"\"\n        super().__init__()\n        self.depth = depth\n        self.embedding_dim = embedding_dim\n        self.num_heads = num_heads\n        self.mlp_dim = mlp_dim\n        self.layers = nn.ModuleList()\n\n        for i in range(depth):\n            self.layers.append(\n                TwoWayAttentionBlock(\n                    embedding_dim=embedding_dim,\n                    num_heads=num_heads,\n                    mlp_dim=mlp_dim,\n                    activation=activation,\n                    attention_downsample_rate=attention_downsample_rate,\n                    skip_first_layer_pe=(i == 0),\n                )\n            )\n\n        self.final_attn_token_to_image = Attention(\n            embedding_dim, num_heads, downsample_rate=attention_downsample_rate\n        )\n        self.norm_final_attn = nn.LayerNorm(embedding_dim)\n\n    def forward(\n        self,\n        image_embedding: Tensor,\n        image_pe: Tensor,\n        point_embedding: Tensor,\n    ) -> Tuple[Tensor, Tensor]:\n        \"\"\"\n        Args:\n          image_embedding (torch.Tensor): image to attend to. Should be shape\n            B x embedding_dim x h x w for any h and w.\n          image_pe (torch.Tensor): the positional encoding to add to the image. Must\n            have the same shape as image_embedding.\n          point_embedding (torch.Tensor): the embedding to add to the query points.\n            Must have shape B x N_points x embedding_dim for any N_points.\n\n        Returns:\n          torch.Tensor: the processed point_embedding\n          torch.Tensor: the processed image_embedding\n        \"\"\"\n        # BxCxHxW -> BxHWxC == B x N_image_tokens x C\n        bs, c, h, w = image_embedding.shape\n        image_embedding = image_embedding.flatten(2).permute(0, 2, 1)\n        image_pe = image_pe.flatten(2).permute(0, 2, 1)\n\n        # Prepare queries\n        queries = point_embedding\n        keys = image_embedding\n\n        # Apply transformer blocks and final layernorm\n        for layer in self.layers:\n            queries, keys = layer(\n                queries=queries,\n                keys=keys,\n                query_pe=point_embedding,\n                key_pe=image_pe,\n            )\n\n        # Apply the final attention layer from the points to the image\n        q = queries + point_embedding\n        k = keys + image_pe\n        attn_out = self.final_attn_token_to_image(q=q, k=k, v=keys)\n        queries = queries + attn_out\n        queries = self.norm_final_attn(queries)\n\n        return queries, keys\n\n\nclass TwoWayAttentionBlock(nn.Module):\n    def __init__(\n        self,\n        embedding_dim: int,\n        num_heads: int,\n        mlp_dim: int = 2048,\n        activation: Type[nn.Module] = nn.ReLU,\n        attention_downsample_rate: int = 2,\n        skip_first_layer_pe: bool = False,\n    ) -> None:\n        \"\"\"\n        A transformer block with four layers: (1) self-attention of sparse\n        inputs, (2) cross attention of sparse inputs to dense inputs, (3) mlp\n        block on sparse inputs, and (4) cross attention of dense inputs to sparse\n        inputs.\n\n        Arguments:\n          embedding_dim (int): the channel dimension of the embeddings\n          num_heads (int): the number of heads in the attention layers\n          mlp_dim (int): the hidden dimension of the mlp block\n          activation (nn.Module): the activation of the mlp block\n          skip_first_layer_pe (bool): skip the PE on the first layer\n        \"\"\"\n        super().__init__()\n        self.self_attn = Attention(embedding_dim, num_heads)\n        self.norm1 = nn.LayerNorm(embedding_dim)\n\n        self.cross_attn_token_to_image = Attention(\n            embedding_dim, num_heads, downsample_rate=attention_downsample_rate\n        )\n        self.norm2 = nn.LayerNorm(embedding_dim)\n\n        self.mlp = MLP(\n            embedding_dim, mlp_dim, embedding_dim, num_layers=2, activation=activation\n        )\n        self.norm3 = nn.LayerNorm(embedding_dim)\n\n        self.norm4 = nn.LayerNorm(embedding_dim)\n        self.cross_attn_image_to_token = Attention(\n            embedding_dim, num_heads, downsample_rate=attention_downsample_rate\n        )\n\n        self.skip_first_layer_pe = skip_first_layer_pe\n\n    def forward(\n        self, queries: Tensor, keys: Tensor, query_pe: Tensor, key_pe: Tensor\n    ) -> Tuple[Tensor, Tensor]:\n        # Self attention block\n        if self.skip_first_layer_pe:\n            queries = self.self_attn(q=queries, k=queries, v=queries)\n        else:\n            q = queries + query_pe\n            attn_out = self.self_attn(q=q, k=q, v=queries)\n            queries = queries + attn_out\n        queries = self.norm1(queries)\n\n        # Cross attention block, tokens attending to image embedding\n        q = queries + query_pe\n        k = keys + key_pe\n        attn_out = self.cross_attn_token_to_image(q=q, k=k, v=keys)\n        queries = queries + attn_out\n        queries = self.norm2(queries)\n\n        # MLP block\n        mlp_out = self.mlp(queries)\n        queries = queries + mlp_out\n        queries = self.norm3(queries)\n\n        # Cross attention block, image embedding attending to tokens\n        q = queries + query_pe\n        k = keys + key_pe\n        attn_out = self.cross_attn_image_to_token(q=k, k=q, v=queries)\n        keys = keys + attn_out\n        keys = self.norm4(keys)\n\n        return queries, keys\n\n\nclass Attention(nn.Module):\n    \"\"\"\n    An attention layer that allows for downscaling the size of the embedding\n    after projection to queries, keys, and values.\n    \"\"\"\n\n    def __init__(\n        self,\n        embedding_dim: int,\n        num_heads: int,\n        downsample_rate: int = 1,\n        dropout: float = 0.0,\n        kv_in_dim: int = None,\n    ) -> None:\n        super().__init__()\n        self.embedding_dim = embedding_dim\n        self.kv_in_dim = kv_in_dim if kv_in_dim is not None else embedding_dim\n        self.internal_dim = embedding_dim // downsample_rate\n        self.num_heads = num_heads\n        assert (\n            self.internal_dim % num_heads == 0\n        ), \"num_heads must divide embedding_dim.\"\n\n        self.q_proj = nn.Linear(embedding_dim, self.internal_dim)\n        self.k_proj = nn.Linear(self.kv_in_dim, self.internal_dim)\n        self.v_proj = nn.Linear(self.kv_in_dim, self.internal_dim)\n        self.out_proj = nn.Linear(self.internal_dim, embedding_dim)\n\n        self.dropout_p = dropout\n\n    def _separate_heads(self, x: Tensor, num_heads: int) -> Tensor:\n        b, n, c = x.shape\n        x = x.reshape(b, n, num_heads, c // num_heads)\n        return x.transpose(1, 2)  # B x N_heads x N_tokens x C_per_head\n\n    def _recombine_heads(self, x: Tensor) -> Tensor:\n        b, n_heads, n_tokens, c_per_head = x.shape\n        x = x.transpose(1, 2)\n        return x.reshape(b, n_tokens, n_heads * c_per_head)  # B x N_tokens x C\n\n    def forward(self, q: Tensor, k: Tensor, v: Tensor) -> Tensor:\n        # Input projections\n        q = self.q_proj(q)\n        k = self.k_proj(k)\n        v = self.v_proj(v)\n\n        # Separate into heads\n        q = self._separate_heads(q, self.num_heads)\n        k = self._separate_heads(k, self.num_heads)\n        v = self._separate_heads(v, self.num_heads)\n\n        dropout_p = self.dropout_p if self.training else 0.0\n        # Attention\n        try:\n            with sdp_kernel_context(dropout_p):\n                out = F.scaled_dot_product_attention(q, k, v, dropout_p=dropout_p)\n        except Exception as e:\n            # Fall back to all kernels if the Flash attention kernel fails\n            warnings.warn(\n                f\"Flash Attention kernel failed due to: {e}\\nFalling back to all available \"\n                f\"kernels for scaled_dot_product_attention (which may have a slower speed).\",\n                category=UserWarning,\n                stacklevel=2,\n            )\n            global ALLOW_ALL_KERNELS\n            ALLOW_ALL_KERNELS = True\n            out = F.scaled_dot_product_attention(q, k, v, dropout_p=dropout_p)\n\n        out = self._recombine_heads(out)\n        out = self.out_proj(out)\n\n        return out\n\n\nclass RoPEAttention(Attention):\n    \"\"\"Attention with rotary position encoding.\"\"\"\n\n    def __init__(\n        self,\n        *args,\n        rope_theta=10000.0,\n        # whether to repeat q rope to match k length\n        # this is needed for cross-attention to memories\n        rope_k_repeat=False,\n        feat_sizes=(32, 32),  # [w, h] for stride 16 feats at 512 resolution\n        **kwargs,\n    ):\n        super().__init__(*args, **kwargs)\n\n        self.compute_cis = partial(\n            compute_axial_cis, dim=self.internal_dim // self.num_heads, theta=rope_theta\n        )\n        freqs_cis = self.compute_cis(end_x=feat_sizes[0], end_y=feat_sizes[1])\n        self.freqs_cis = freqs_cis\n        self.rope_k_repeat = rope_k_repeat\n\n    def forward(\n        self, q: Tensor, k: Tensor, v: Tensor, num_k_exclude_rope: int = 0\n    ) -> Tensor:\n        # Input projections\n        q = self.q_proj(q)\n        k = self.k_proj(k)\n        v = self.v_proj(v)\n\n        # Separate into heads\n        q = self._separate_heads(q, self.num_heads)\n        k = self._separate_heads(k, self.num_heads)\n        v = self._separate_heads(v, self.num_heads)\n\n        # Apply rotary position encoding\n        w = h = math.sqrt(q.shape[-2])\n        self.freqs_cis = self.freqs_cis.to(q.device)\n        if self.freqs_cis.shape[0] != q.shape[-2]:\n            self.freqs_cis = self.compute_cis(end_x=w, end_y=h).to(q.device)\n        if q.shape[-2] != k.shape[-2]:\n            assert self.rope_k_repeat\n\n        num_k_rope = k.size(-2) - num_k_exclude_rope\n        q, k[:, :, :num_k_rope] = apply_rotary_enc(\n            q,\n            k[:, :, :num_k_rope],\n            freqs_cis=self.freqs_cis,\n            repeat_freqs_k=self.rope_k_repeat,\n        )\n\n        dropout_p = self.dropout_p if self.training else 0.0\n        # Attention\n        try:\n            with sdp_kernel_context(dropout_p):\n                out = F.scaled_dot_product_attention(q, k, v, dropout_p=dropout_p)\n        except Exception as e:\n            # Fall back to all kernels if the Flash attention kernel fails\n            warnings.warn(\n                f\"Flash Attention kernel failed due to: {e}\\nFalling back to all available \"\n                f\"kernels for scaled_dot_product_attention (which may have a slower speed).\",\n                category=UserWarning,\n                stacklevel=2,\n            )\n            global ALLOW_ALL_KERNELS\n            ALLOW_ALL_KERNELS = True\n            out = F.scaled_dot_product_attention(q, k, v, dropout_p=dropout_p)\n\n        out = self._recombine_heads(out)\n        out = self.out_proj(out)\n\n        return out\n"
  },
  {
    "path": "auto-seg/sam2/modeling/sam2_base.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch\nimport torch.distributed\nimport torch.nn.functional as F\n\nfrom torch.nn.init import trunc_normal_\n\nfrom sam2.modeling.sam.mask_decoder import MaskDecoder\nfrom sam2.modeling.sam.prompt_encoder import PromptEncoder\nfrom sam2.modeling.sam.transformer import TwoWayTransformer\nfrom sam2.modeling.sam2_utils import get_1d_sine_pe, MLP, select_closest_cond_frames\n\n# a large negative value as a placeholder score for missing objects\nNO_OBJ_SCORE = -1024.0\n\n\nclass SAM2Base(torch.nn.Module):\n    def __init__(\n        self,\n        image_encoder,\n        memory_attention,\n        memory_encoder,\n        num_maskmem=7,  # default 1 input frame + 6 previous frames\n        image_size=512,\n        backbone_stride=16,  # stride of the image backbone output\n        sigmoid_scale_for_mem_enc=1.0,  # scale factor for mask sigmoid prob\n        sigmoid_bias_for_mem_enc=0.0,  # bias factor for mask sigmoid prob\n        # During evaluation, whether to binarize the sigmoid mask logits on interacted frames with clicks\n        binarize_mask_from_pts_for_mem_enc=False,\n        use_mask_input_as_output_without_sam=False,  # on frames with mask input, whether to directly output the input mask without using a SAM prompt encoder + mask decoder\n        # The maximum number of conditioning frames to participate in the memory attention (-1 means no limit; if there are more conditioning frames than this limit,\n        # we only cross-attend to the temporally closest `max_cond_frames_in_attn` conditioning frames in the encoder when tracking each frame). This gives the model\n        # a temporal locality when handling a large number of annotated frames (since closer frames should be more important) and also avoids GPU OOM.\n        max_cond_frames_in_attn=-1,\n        # on the first frame, whether to directly add the no-memory embedding to the image feature\n        # (instead of using the transformer encoder)\n        directly_add_no_mem_embed=False,\n        # whether to use high-resolution feature maps in the SAM mask decoder\n        use_high_res_features_in_sam=False,\n        # whether to output multiple (3) masks for the first click on initial conditioning frames\n        multimask_output_in_sam=False,\n        # the minimum and maximum number of clicks to use multimask_output_in_sam (only relevant when `multimask_output_in_sam=True`;\n        # default is 1 for both, meaning that only the first click gives multimask output; also note that a box counts as two points)\n        multimask_min_pt_num=1,\n        multimask_max_pt_num=1,\n        # whether to also use multimask output for tracking (not just for the first click on initial conditioning frames; only relevant when `multimask_output_in_sam=True`)\n        multimask_output_for_tracking=False,\n        # Whether to use multimask tokens for obj ptr; Only relevant when both\n        # use_obj_ptrs_in_encoder=True and multimask_output_for_tracking=True\n        use_multimask_token_for_obj_ptr: bool = False,\n        # whether to use sigmoid to restrict ious prediction to [0-1]\n        iou_prediction_use_sigmoid=False,\n        # The memory bank's temporal stride during evaluation (i.e. the `r` parameter in XMem and Cutie; XMem and Cutie use r=5).\n        # For r>1, the (self.num_maskmem - 1) non-conditioning memory frames consist of\n        # (self.num_maskmem - 2) nearest frames from every r-th frames, plus the last frame.\n        memory_temporal_stride_for_eval=1,\n        # if `add_all_frames_to_correct_as_cond` is True, we also append to the conditioning frame list any frame that receives a later correction click\n        # if `add_all_frames_to_correct_as_cond` is False, we conditioning frame list to only use those initial conditioning frames\n        add_all_frames_to_correct_as_cond=False,\n        # whether to apply non-overlapping constraints on the object masks in the memory encoder during evaluation (to avoid/alleviate superposing masks)\n        non_overlap_masks_for_mem_enc=False,\n        # whether to cross-attend to object pointers from other frames (based on SAM output tokens) in the encoder\n        use_obj_ptrs_in_encoder=False,\n        # the maximum number of object pointers from other frames in encoder cross attention (only relevant when `use_obj_ptrs_in_encoder=True`)\n        max_obj_ptrs_in_encoder=16,\n        # whether to add temporal positional encoding to the object pointers in the encoder (only relevant when `use_obj_ptrs_in_encoder=True`)\n        add_tpos_enc_to_obj_ptrs=True,\n        # whether to add an extra linear projection layer for the temporal positional encoding in the object pointers to avoid potential interference\n        # with spatial positional encoding (only relevant when both `use_obj_ptrs_in_encoder=True` and `add_tpos_enc_to_obj_ptrs=True`)\n        proj_tpos_enc_in_obj_ptrs=False,\n        # whether to only attend to object pointers in the past (before the current frame) in the encoder during evaluation\n        # (only relevant when `use_obj_ptrs_in_encoder=True`; this might avoid pointer information too far in the future to distract the initial tracking)\n        only_obj_ptrs_in_the_past_for_eval=False,\n        # Whether to predict if there is an object in the frame\n        pred_obj_scores: bool = False,\n        # Whether to use an MLP to predict object scores\n        pred_obj_scores_mlp: bool = False,\n        # Only relevant if pred_obj_scores=True and use_obj_ptrs_in_encoder=True;\n        # Whether to have a fixed no obj pointer when there is no object present\n        # or to use it as an additive embedding with obj_ptr produced by decoder\n        fixed_no_obj_ptr: bool = False,\n        # Soft no object, i.e. mix in no_obj_ptr softly,\n        # hope to make recovery easier if there is a mistake and mitigate accumulation of errors\n        soft_no_obj_ptr: bool = False,\n        use_mlp_for_obj_ptr_proj: bool = False,\n        # extra arguments used to construct the SAM mask decoder; if not None, it should be a dict of kwargs to be passed into `MaskDecoder` class.\n        sam_mask_decoder_extra_args=None,\n        compile_image_encoder: bool = False,\n    ):\n        super().__init__()\n\n        # Part 1: the image backbone\n        self.image_encoder = image_encoder\n        # Use level 0, 1, 2 for high-res setting, or just level 2 for the default setting\n        self.use_high_res_features_in_sam = use_high_res_features_in_sam\n        self.num_feature_levels = 3 if use_high_res_features_in_sam else 1\n        self.use_obj_ptrs_in_encoder = use_obj_ptrs_in_encoder\n        self.max_obj_ptrs_in_encoder = max_obj_ptrs_in_encoder\n        if use_obj_ptrs_in_encoder:\n            # A conv layer to downsample the mask prompt to stride 4 (the same stride as\n            # low-res SAM mask logits) and to change its scales from 0~1 to SAM logit scale,\n            # so that it can be fed into the SAM mask decoder to generate a pointer.\n            self.mask_downsample = torch.nn.Conv2d(1, 1, kernel_size=4, stride=4)\n        self.add_tpos_enc_to_obj_ptrs = add_tpos_enc_to_obj_ptrs\n        if proj_tpos_enc_in_obj_ptrs:\n            assert add_tpos_enc_to_obj_ptrs  # these options need to be used together\n        self.proj_tpos_enc_in_obj_ptrs = proj_tpos_enc_in_obj_ptrs\n        self.only_obj_ptrs_in_the_past_for_eval = only_obj_ptrs_in_the_past_for_eval\n\n        # Part 2: memory attention to condition current frame's visual features\n        # with memories (and obj ptrs) from past frames\n        self.memory_attention = memory_attention\n        self.hidden_dim = memory_attention.d_model\n\n        # Part 3: memory encoder for the previous frame's outputs\n        self.memory_encoder = memory_encoder\n        self.mem_dim = self.hidden_dim\n        if hasattr(self.memory_encoder, \"out_proj\") and hasattr(\n            self.memory_encoder.out_proj, \"weight\"\n        ):\n            # if there is compression of memories along channel dim\n            self.mem_dim = self.memory_encoder.out_proj.weight.shape[0]\n        self.num_maskmem = num_maskmem  # Number of memories accessible\n        # Temporal encoding of the memories\n        self.maskmem_tpos_enc = torch.nn.Parameter(\n            torch.zeros(num_maskmem, 1, 1, self.mem_dim)\n        )\n        trunc_normal_(self.maskmem_tpos_enc, std=0.02)\n        # a single token to indicate no memory embedding from previous frames\n        self.no_mem_embed = torch.nn.Parameter(torch.zeros(1, 1, self.hidden_dim))\n        self.no_mem_pos_enc = torch.nn.Parameter(torch.zeros(1, 1, self.hidden_dim))\n        trunc_normal_(self.no_mem_embed, std=0.02)\n        trunc_normal_(self.no_mem_pos_enc, std=0.02)\n        self.directly_add_no_mem_embed = directly_add_no_mem_embed\n        # Apply sigmoid to the output raw mask logits (to turn them from\n        # range (-inf, +inf) to range (0, 1)) before feeding them into the memory encoder\n        self.sigmoid_scale_for_mem_enc = sigmoid_scale_for_mem_enc\n        self.sigmoid_bias_for_mem_enc = sigmoid_bias_for_mem_enc\n        self.binarize_mask_from_pts_for_mem_enc = binarize_mask_from_pts_for_mem_enc\n        self.non_overlap_masks_for_mem_enc = non_overlap_masks_for_mem_enc\n        self.memory_temporal_stride_for_eval = memory_temporal_stride_for_eval\n        # On frames with mask input, whether to directly output the input mask without\n        # using a SAM prompt encoder + mask decoder\n        self.use_mask_input_as_output_without_sam = use_mask_input_as_output_without_sam\n        self.multimask_output_in_sam = multimask_output_in_sam\n        self.multimask_min_pt_num = multimask_min_pt_num\n        self.multimask_max_pt_num = multimask_max_pt_num\n        self.multimask_output_for_tracking = multimask_output_for_tracking\n        self.use_multimask_token_for_obj_ptr = use_multimask_token_for_obj_ptr\n        self.iou_prediction_use_sigmoid = iou_prediction_use_sigmoid\n\n        # Part 4: SAM-style prompt encoder (for both mask and point inputs)\n        # and SAM-style mask decoder for the final mask output\n        self.image_size = image_size\n        self.backbone_stride = backbone_stride\n        self.sam_mask_decoder_extra_args = sam_mask_decoder_extra_args\n        self.pred_obj_scores = pred_obj_scores\n        self.pred_obj_scores_mlp = pred_obj_scores_mlp\n        self.fixed_no_obj_ptr = fixed_no_obj_ptr\n        self.soft_no_obj_ptr = soft_no_obj_ptr\n        if self.fixed_no_obj_ptr:\n            assert self.pred_obj_scores\n            assert self.use_obj_ptrs_in_encoder\n        if self.pred_obj_scores and self.use_obj_ptrs_in_encoder:\n            self.no_obj_ptr = torch.nn.Parameter(torch.zeros(1, self.hidden_dim))\n            trunc_normal_(self.no_obj_ptr, std=0.02)\n        self.use_mlp_for_obj_ptr_proj = use_mlp_for_obj_ptr_proj\n\n        self._build_sam_heads()\n        self.add_all_frames_to_correct_as_cond = add_all_frames_to_correct_as_cond\n        self.max_cond_frames_in_attn = max_cond_frames_in_attn\n\n        # Model compilation\n        if compile_image_encoder:\n            # Compile the forward function (not the full module) to allow loading checkpoints.\n            print(\n                \"Image encoder compilation is enabled. First forward pass will be slow.\"\n            )\n            self.image_encoder.forward = torch.compile(\n                self.image_encoder.forward,\n                mode=\"max-autotune\",\n                fullgraph=True,\n                dynamic=False,\n            )\n\n    @property\n    def device(self):\n        return next(self.parameters()).device\n\n    def forward(self, *args, **kwargs):\n        raise NotImplementedError(\n            \"Please use the corresponding methods in SAM2VideoPredictor for inference.\"\n            \"See notebooks/video_predictor_example.ipynb for an example.\"\n        )\n\n    def _build_sam_heads(self):\n        \"\"\"Build SAM-style prompt encoder and mask decoder.\"\"\"\n        self.sam_prompt_embed_dim = self.hidden_dim\n        self.sam_image_embedding_size = self.image_size // self.backbone_stride\n\n        # build PromptEncoder and MaskDecoder from SAM\n        # (their hyperparameters like `mask_in_chans=16` are from SAM code)\n        self.sam_prompt_encoder = PromptEncoder(\n            embed_dim=self.sam_prompt_embed_dim,\n            image_embedding_size=(\n                self.sam_image_embedding_size,\n                self.sam_image_embedding_size,\n            ),\n            input_image_size=(self.image_size, self.image_size),\n            mask_in_chans=16,\n        )\n        self.sam_mask_decoder = MaskDecoder(\n            num_multimask_outputs=3,\n            transformer=TwoWayTransformer(\n                depth=2,\n                embedding_dim=self.sam_prompt_embed_dim,\n                mlp_dim=2048,\n                num_heads=8,\n            ),\n            transformer_dim=self.sam_prompt_embed_dim,\n            iou_head_depth=3,\n            iou_head_hidden_dim=256,\n            use_high_res_features=self.use_high_res_features_in_sam,\n            iou_prediction_use_sigmoid=self.iou_prediction_use_sigmoid,\n            pred_obj_scores=self.pred_obj_scores,\n            pred_obj_scores_mlp=self.pred_obj_scores_mlp,\n            use_multimask_token_for_obj_ptr=self.use_multimask_token_for_obj_ptr,\n            **(self.sam_mask_decoder_extra_args or {}),\n        )\n        if self.use_obj_ptrs_in_encoder:\n            # a linear projection on SAM output tokens to turn them into object pointers\n            self.obj_ptr_proj = torch.nn.Linear(self.hidden_dim, self.hidden_dim)\n            if self.use_mlp_for_obj_ptr_proj:\n                self.obj_ptr_proj = MLP(\n                    self.hidden_dim, self.hidden_dim, self.hidden_dim, 3\n                )\n        else:\n            self.obj_ptr_proj = torch.nn.Identity()\n        if self.proj_tpos_enc_in_obj_ptrs:\n            # a linear projection on temporal positional encoding in object pointers to\n            # avoid potential interference with spatial positional encoding\n            self.obj_ptr_tpos_proj = torch.nn.Linear(self.hidden_dim, self.mem_dim)\n        else:\n            self.obj_ptr_tpos_proj = torch.nn.Identity()\n\n    def _forward_sam_heads(\n        self,\n        backbone_features,\n        point_inputs=None,\n        mask_inputs=None,\n        high_res_features=None,\n        multimask_output=False,\n    ):\n        \"\"\"\n        Forward SAM prompt encoders and mask heads.\n\n        Inputs:\n        - backbone_features: image features of [B, C, H, W] shape\n        - point_inputs: a dictionary with \"point_coords\" and \"point_labels\", where\n          1) \"point_coords\" has [B, P, 2] shape and float32 dtype and contains the\n             absolute pixel-unit coordinate in (x, y) format of the P input points\n          2) \"point_labels\" has shape [B, P] and int32 dtype, where 1 means\n             positive clicks, 0 means negative clicks, and -1 means padding\n        - mask_inputs: a mask of [B, 1, H*16, W*16] shape, float or bool, with the\n          same spatial size as the image.\n        - high_res_features: either 1) None or 2) or a list of length 2 containing\n          two feature maps of [B, C, 4*H, 4*W] and [B, C, 2*H, 2*W] shapes respectively,\n          which will be used as high-resolution feature maps for SAM decoder.\n        - multimask_output: if it's True, we output 3 candidate masks and their 3\n          corresponding IoU estimates, and if it's False, we output only 1 mask and\n          its corresponding IoU estimate.\n\n        Outputs:\n        - low_res_multimasks: [B, M, H*4, W*4] shape (where M = 3 if\n          `multimask_output=True` and M = 1 if `multimask_output=False`), the SAM\n          output mask logits (before sigmoid) for the low-resolution masks, with 4x\n          the resolution (1/4 stride) of the input backbone_features.\n        - high_res_multimasks: [B, M, H*16, W*16] shape (where M = 3\n          if `multimask_output=True` and M = 1 if `multimask_output=False`),\n          upsampled from the low-resolution masks, with shape size as the image\n          (stride is 1 pixel).\n        - ious, [B, M] shape, where (where M = 3 if `multimask_output=True` and M = 1\n          if `multimask_output=False`), the estimated IoU of each output mask.\n        - low_res_masks: [B, 1, H*4, W*4] shape, the best mask in `low_res_multimasks`.\n          If `multimask_output=True`, it's the mask with the highest IoU estimate.\n          If `multimask_output=False`, it's the same as `low_res_multimasks`.\n        - high_res_masks: [B, 1, H*16, W*16] shape, the best mask in `high_res_multimasks`.\n          If `multimask_output=True`, it's the mask with the highest IoU estimate.\n          If `multimask_output=False`, it's the same as `high_res_multimasks`.\n        - obj_ptr: [B, C] shape, the object pointer vector for the output mask, extracted\n          based on the output token from the SAM mask decoder.\n        \"\"\"\n        B = backbone_features.size(0)\n        device = backbone_features.device\n        assert backbone_features.size(1) == self.sam_prompt_embed_dim\n        assert backbone_features.size(2) == self.sam_image_embedding_size\n        assert backbone_features.size(3) == self.sam_image_embedding_size\n\n        # a) Handle point prompts\n        if point_inputs is not None:\n            sam_point_coords = point_inputs[\"point_coords\"]\n            sam_point_labels = point_inputs[\"point_labels\"]\n            assert sam_point_coords.size(0) == B and sam_point_labels.size(0) == B\n        else:\n            # If no points are provide, pad with an empty point (with label -1)\n            sam_point_coords = torch.zeros(B, 1, 2, device=device)\n            sam_point_labels = -torch.ones(B, 1, dtype=torch.int32, device=device)\n\n        # b) Handle mask prompts\n        if mask_inputs is not None:\n            # If mask_inputs is provided, downsize it into low-res mask input if needed\n            # and feed it as a dense mask prompt into the SAM mask encoder\n            assert len(mask_inputs.shape) == 4 and mask_inputs.shape[:2] == (B, 1)\n            if mask_inputs.shape[-2:] != self.sam_prompt_encoder.mask_input_size:\n                sam_mask_prompt = F.interpolate(\n                    mask_inputs.float(),\n                    size=self.sam_prompt_encoder.mask_input_size,\n                    align_corners=False,\n                    mode=\"bilinear\",\n                    antialias=True,  # use antialias for downsampling\n                )\n            else:\n                sam_mask_prompt = mask_inputs\n        else:\n            # Otherwise, simply feed None (and SAM's prompt encoder will add\n            # a learned `no_mask_embed` to indicate no mask input in this case).\n            sam_mask_prompt = None\n\n        sparse_embeddings, dense_embeddings = self.sam_prompt_encoder(\n            points=(sam_point_coords, sam_point_labels),\n            boxes=None,\n            masks=sam_mask_prompt,\n        )\n        (\n            low_res_multimasks,\n            ious,\n            sam_output_tokens,\n            object_score_logits,\n        ) = self.sam_mask_decoder(\n            image_embeddings=backbone_features,\n            image_pe=self.sam_prompt_encoder.get_dense_pe(),\n            sparse_prompt_embeddings=sparse_embeddings,\n            dense_prompt_embeddings=dense_embeddings,\n            multimask_output=multimask_output,\n            repeat_image=False,  # the image is already batched\n            high_res_features=high_res_features,\n        )\n        if self.pred_obj_scores:\n            is_obj_appearing = object_score_logits > 0\n\n            # Mask used for spatial memories is always a *hard* choice between obj and no obj,\n            # consistent with the actual mask prediction\n            low_res_multimasks = torch.where(\n                is_obj_appearing[:, None, None],\n                low_res_multimasks,\n                NO_OBJ_SCORE,\n            )\n\n        # convert masks from possibly bfloat16 (or float16) to float32\n        # (older PyTorch versions before 2.1 don't support `interpolate` on bf16)\n        low_res_multimasks = low_res_multimasks.float()\n        high_res_multimasks = F.interpolate(\n            low_res_multimasks,\n            size=(self.image_size, self.image_size),\n            mode=\"bilinear\",\n            align_corners=False,\n        )\n\n        sam_output_token = sam_output_tokens[:, 0]\n        if multimask_output:\n            # take the best mask prediction (with the highest IoU estimation)\n            best_iou_inds = torch.argmax(ious, dim=-1)\n            batch_inds = torch.arange(B, device=device)\n            low_res_masks = low_res_multimasks[batch_inds, best_iou_inds].unsqueeze(1)\n            high_res_masks = high_res_multimasks[batch_inds, best_iou_inds].unsqueeze(1)\n            if sam_output_tokens.size(1) > 1:\n                sam_output_token = sam_output_tokens[batch_inds, best_iou_inds]\n        else:\n            low_res_masks, high_res_masks = low_res_multimasks, high_res_multimasks\n\n        # Extract object pointer from the SAM output token (with occlusion handling)\n        obj_ptr = self.obj_ptr_proj(sam_output_token)\n        if self.pred_obj_scores:\n            # Allow *soft* no obj ptr, unlike for masks\n            if self.soft_no_obj_ptr:\n                # Only hard possible with gt\n                assert not self.teacher_force_obj_scores_for_mem\n                lambda_is_obj_appearing = object_score_logits.sigmoid()\n            else:\n                lambda_is_obj_appearing = is_obj_appearing.float()\n\n            if self.fixed_no_obj_ptr:\n                obj_ptr = lambda_is_obj_appearing * obj_ptr\n            obj_ptr = obj_ptr + (1 - lambda_is_obj_appearing) * self.no_obj_ptr\n\n        return (\n            low_res_multimasks,\n            high_res_multimasks,\n            ious,\n            low_res_masks,\n            high_res_masks,\n            obj_ptr,\n            object_score_logits,\n        )\n\n    def _use_mask_as_output(self, backbone_features, high_res_features, mask_inputs):\n        \"\"\"\n        Directly turn binary `mask_inputs` into a output mask logits without using SAM.\n        (same input and output shapes as in _forward_sam_heads above).\n        \"\"\"\n        # Use -10/+10 as logits for neg/pos pixels (very close to 0/1 in prob after sigmoid).\n        out_scale, out_bias = 20.0, -10.0  # sigmoid(-10.0)=4.5398e-05\n        mask_inputs_float = mask_inputs.float()\n        high_res_masks = mask_inputs_float * out_scale + out_bias\n        low_res_masks = F.interpolate(\n            high_res_masks,\n            size=(high_res_masks.size(-2) // 4, high_res_masks.size(-1) // 4),\n            align_corners=False,\n            mode=\"bilinear\",\n            antialias=True,  # use antialias for downsampling\n        )\n        # a dummy IoU prediction of all 1's under mask input\n        ious = mask_inputs.new_ones(mask_inputs.size(0), 1).float()\n        if not self.use_obj_ptrs_in_encoder:\n            # all zeros as a dummy object pointer (of shape [B, C])\n            obj_ptr = torch.zeros(\n                mask_inputs.size(0), self.hidden_dim, device=mask_inputs.device\n            )\n        else:\n            # produce an object pointer using the SAM decoder from the mask input\n            _, _, _, _, _, obj_ptr, _ = self._forward_sam_heads(\n                backbone_features=backbone_features,\n                mask_inputs=self.mask_downsample(mask_inputs_float),\n                high_res_features=high_res_features,\n            )\n        # In this method, we are treating mask_input as output, e.g. using it directly to create spatial mem;\n        # Below, we follow the same design axiom to use mask_input to decide if obj appears or not instead of relying\n        # on the object_scores from the SAM decoder.\n        is_obj_appearing = torch.any(mask_inputs.flatten(1).float() > 0.0, dim=1)\n        is_obj_appearing = is_obj_appearing[..., None]\n        lambda_is_obj_appearing = is_obj_appearing.float()\n        object_score_logits = out_scale * lambda_is_obj_appearing + out_bias\n        if self.pred_obj_scores:\n            if self.fixed_no_obj_ptr:\n                obj_ptr = lambda_is_obj_appearing * obj_ptr\n            obj_ptr = obj_ptr + (1 - lambda_is_obj_appearing) * self.no_obj_ptr\n\n        return (\n            low_res_masks,\n            high_res_masks,\n            ious,\n            low_res_masks,\n            high_res_masks,\n            obj_ptr,\n            object_score_logits,\n        )\n\n    def forward_image(self, img_batch: torch.Tensor):\n        \"\"\"Get the image feature on the input batch.\"\"\"\n        backbone_out = self.image_encoder(img_batch)\n        if self.use_high_res_features_in_sam:\n            # precompute projected level 0 and level 1 features in SAM decoder\n            # to avoid running it again on every SAM click\n            backbone_out[\"backbone_fpn\"][0] = self.sam_mask_decoder.conv_s0(\n                backbone_out[\"backbone_fpn\"][0]\n            )\n            backbone_out[\"backbone_fpn\"][1] = self.sam_mask_decoder.conv_s1(\n                backbone_out[\"backbone_fpn\"][1]\n            )\n        return backbone_out\n\n    def _prepare_backbone_features(self, backbone_out):\n        \"\"\"Prepare and flatten visual features.\"\"\"\n        backbone_out = backbone_out.copy()\n        assert len(backbone_out[\"backbone_fpn\"]) == len(backbone_out[\"vision_pos_enc\"])\n        assert len(backbone_out[\"backbone_fpn\"]) >= self.num_feature_levels\n\n        feature_maps = backbone_out[\"backbone_fpn\"][-self.num_feature_levels :]\n        vision_pos_embeds = backbone_out[\"vision_pos_enc\"][-self.num_feature_levels :]\n\n        feat_sizes = [(x.shape[-2], x.shape[-1]) for x in vision_pos_embeds]\n        # flatten NxCxHxW to HWxNxC\n        vision_feats = [x.flatten(2).permute(2, 0, 1) for x in feature_maps]\n        vision_pos_embeds = [x.flatten(2).permute(2, 0, 1) for x in vision_pos_embeds]\n\n        return backbone_out, vision_feats, vision_pos_embeds, feat_sizes\n\n    def _prepare_memory_conditioned_features(\n        self,\n        frame_idx,\n        is_init_cond_frame,\n        current_vision_feats,\n        current_vision_pos_embeds,\n        feat_sizes,\n        output_dict,\n        num_frames,\n        track_in_reverse=False,  # tracking in reverse time order (for demo usage)\n    ):\n        \"\"\"Fuse the current frame's visual feature map with previous memory.\"\"\"\n        B = current_vision_feats[-1].size(1)  # batch size on this frame\n        C = self.hidden_dim\n        H, W = feat_sizes[-1]  # top-level (lowest-resolution) feature size\n        device = current_vision_feats[-1].device\n        # The case of `self.num_maskmem == 0` below is primarily used for reproducing SAM on images.\n        # In this case, we skip the fusion with any memory.\n        if self.num_maskmem == 0:  # Disable memory and skip fusion\n            pix_feat = current_vision_feats[-1].permute(1, 2, 0).view(B, C, H, W)\n            return pix_feat\n\n        num_obj_ptr_tokens = 0\n        # Step 1: condition the visual features of the current frame on previous memories\n        if not is_init_cond_frame:\n            # Retrieve the memories encoded with the maskmem backbone\n            to_cat_memory, to_cat_memory_pos_embed = [], []\n            # Add conditioning frames's output first (all cond frames have t_pos=0 for\n            # when getting temporal positional embedding below)\n            assert len(output_dict[\"cond_frame_outputs\"]) > 0\n            # Select a maximum number of temporally closest cond frames for cross attention\n            cond_outputs = output_dict[\"cond_frame_outputs\"]\n            selected_cond_outputs, unselected_cond_outputs = select_closest_cond_frames(\n                frame_idx, cond_outputs, self.max_cond_frames_in_attn\n            )\n            t_pos_and_prevs = [(0, out) for out in selected_cond_outputs.values()]\n            # Add last (self.num_maskmem - 1) frames before current frame for non-conditioning memory\n            # the earliest one has t_pos=1 and the latest one has t_pos=self.num_maskmem-1\n            # We also allow taking the memory frame non-consecutively (with r>1), in which case\n            # we take (self.num_maskmem - 2) frames among every r-th frames plus the last frame.\n            r = self.memory_temporal_stride_for_eval\n            for t_pos in range(1, self.num_maskmem):\n                t_rel = self.num_maskmem - t_pos  # how many frames before current frame\n                if t_rel == 1:\n                    # for t_rel == 1, we take the last frame (regardless of r)\n                    if not track_in_reverse:\n                        # the frame immediately before this frame (i.e. frame_idx - 1)\n                        prev_frame_idx = frame_idx - t_rel\n                    else:\n                        # the frame immediately after this frame (i.e. frame_idx + 1)\n                        prev_frame_idx = frame_idx + t_rel\n                else:\n                    # for t_rel >= 2, we take the memory frame from every r-th frames\n                    if not track_in_reverse:\n                        # first find the nearest frame among every r-th frames before this frame\n                        # for r=1, this would be (frame_idx - 2)\n                        prev_frame_idx = ((frame_idx - 2) // r) * r\n                        # then seek further among every r-th frames\n                        prev_frame_idx = prev_frame_idx - (t_rel - 2) * r\n                    else:\n                        # first find the nearest frame among every r-th frames after this frame\n                        # for r=1, this would be (frame_idx + 2)\n                        prev_frame_idx = -(-(frame_idx + 2) // r) * r\n                        # then seek further among every r-th frames\n                        prev_frame_idx = prev_frame_idx + (t_rel - 2) * r\n                out = output_dict[\"non_cond_frame_outputs\"].get(prev_frame_idx, None)\n                if out is None:\n                    # If an unselected conditioning frame is among the last (self.num_maskmem - 1)\n                    # frames, we still attend to it as if it's a non-conditioning frame.\n                    out = unselected_cond_outputs.get(prev_frame_idx, None)\n                t_pos_and_prevs.append((t_pos, out))\n\n            for t_pos, prev in t_pos_and_prevs:\n                if prev is None:\n                    continue  # skip padding frames\n                # \"maskmem_features\" might have been offloaded to CPU in demo use cases,\n                # so we load it back to GPU (it's a no-op if it's already on GPU).\n                feats = prev[\"maskmem_features\"].to(device, non_blocking=True)\n                to_cat_memory.append(feats.flatten(2).permute(2, 0, 1))\n                # Spatial positional encoding (it might have been offloaded to CPU in eval)\n                maskmem_enc = prev[\"maskmem_pos_enc\"][-1].to(device)\n                maskmem_enc = maskmem_enc.flatten(2).permute(2, 0, 1)\n                # Temporal positional encoding\n                maskmem_enc = (\n                    maskmem_enc + self.maskmem_tpos_enc[self.num_maskmem - t_pos - 1]\n                )\n                to_cat_memory_pos_embed.append(maskmem_enc)\n\n            # Construct the list of past object pointers\n            if self.use_obj_ptrs_in_encoder:\n                max_obj_ptrs_in_encoder = min(num_frames, self.max_obj_ptrs_in_encoder)\n                # First add those object pointers from selected conditioning frames\n                # (optionally, only include object pointers in the past during evaluation)\n                if not self.training and self.only_obj_ptrs_in_the_past_for_eval:\n                    ptr_cond_outputs = {\n                        t: out\n                        for t, out in selected_cond_outputs.items()\n                        if (t >= frame_idx if track_in_reverse else t <= frame_idx)\n                    }\n                else:\n                    ptr_cond_outputs = selected_cond_outputs\n                pos_and_ptrs = [\n                    # Temporal pos encoding contains how far away each pointer is from current frame\n                    (abs(frame_idx - t), out[\"obj_ptr\"])\n                    for t, out in ptr_cond_outputs.items()\n                ]\n                # Add up to (max_obj_ptrs_in_encoder - 1) non-conditioning frames before current frame\n                for t_diff in range(1, max_obj_ptrs_in_encoder):\n                    t = frame_idx + t_diff if track_in_reverse else frame_idx - t_diff\n                    if t < 0 or (num_frames is not None and t >= num_frames):\n                        break\n                    out = output_dict[\"non_cond_frame_outputs\"].get(\n                        t, unselected_cond_outputs.get(t, None)\n                    )\n                    if out is not None:\n                        pos_and_ptrs.append((t_diff, out[\"obj_ptr\"]))\n                # If we have at least one object pointer, add them to the across attention\n                if len(pos_and_ptrs) > 0:\n                    pos_list, ptrs_list = zip(*pos_and_ptrs)\n                    # stack object pointers along dim=0 into [ptr_seq_len, B, C] shape\n                    obj_ptrs = torch.stack(ptrs_list, dim=0)\n                    # a temporal positional embedding based on how far each object pointer is from\n                    # the current frame (sine embedding normalized by the max pointer num).\n                    if self.add_tpos_enc_to_obj_ptrs:\n                        t_diff_max = max_obj_ptrs_in_encoder - 1\n                        tpos_dim = C if self.proj_tpos_enc_in_obj_ptrs else self.mem_dim\n                        obj_pos = torch.tensor(pos_list, device=device)\n                        obj_pos = get_1d_sine_pe(obj_pos / t_diff_max, dim=tpos_dim)\n                        obj_pos = self.obj_ptr_tpos_proj(obj_pos)\n                        obj_pos = obj_pos.unsqueeze(1).expand(-1, B, self.mem_dim)\n                    else:\n                        obj_pos = obj_ptrs.new_zeros(len(pos_list), B, self.mem_dim)\n                    if self.mem_dim < C:\n                        # split a pointer into (C // self.mem_dim) tokens for self.mem_dim < C\n                        obj_ptrs = obj_ptrs.reshape(\n                            -1, B, C // self.mem_dim, self.mem_dim\n                        )\n                        obj_ptrs = obj_ptrs.permute(0, 2, 1, 3).flatten(0, 1)\n                        obj_pos = obj_pos.repeat_interleave(C // self.mem_dim, dim=0)\n                    to_cat_memory.append(obj_ptrs)\n                    to_cat_memory_pos_embed.append(obj_pos)\n                    num_obj_ptr_tokens = obj_ptrs.shape[0]\n                else:\n                    num_obj_ptr_tokens = 0\n        else:\n            # for initial conditioning frames, encode them without using any previous memory\n            if self.directly_add_no_mem_embed:\n                # directly add no-mem embedding (instead of using the transformer encoder)\n                pix_feat_with_mem = current_vision_feats[-1] + self.no_mem_embed\n                pix_feat_with_mem = pix_feat_with_mem.permute(1, 2, 0).view(B, C, H, W)\n                return pix_feat_with_mem\n\n            # Use a dummy token on the first frame (to avoid empty memory input to tranformer encoder)\n            to_cat_memory = [self.no_mem_embed.expand(1, B, self.mem_dim)]\n            to_cat_memory_pos_embed = [self.no_mem_pos_enc.expand(1, B, self.mem_dim)]\n\n        # Step 2: Concatenate the memories and forward through the transformer encoder\n        memory = torch.cat(to_cat_memory, dim=0)\n        memory_pos_embed = torch.cat(to_cat_memory_pos_embed, dim=0)\n\n        pix_feat_with_mem = self.memory_attention(\n            curr=current_vision_feats,\n            curr_pos=current_vision_pos_embeds,\n            memory=memory,\n            memory_pos=memory_pos_embed,\n            num_obj_ptr_tokens=num_obj_ptr_tokens,\n        )\n        # reshape the output (HW)BC => BCHW\n        pix_feat_with_mem = pix_feat_with_mem.permute(1, 2, 0).view(B, C, H, W)\n        return pix_feat_with_mem\n\n    def _encode_new_memory(\n        self,\n        current_vision_feats,\n        feat_sizes,\n        pred_masks_high_res,\n        is_mask_from_pts,\n    ):\n        \"\"\"Encode the current image and its prediction into a memory feature.\"\"\"\n        B = current_vision_feats[-1].size(1)  # batch size on this frame\n        C = self.hidden_dim\n        H, W = feat_sizes[-1]  # top-level (lowest-resolution) feature size\n        # top-level feature, (HW)BC => BCHW\n        pix_feat = current_vision_feats[-1].permute(1, 2, 0).view(B, C, H, W)\n        if self.non_overlap_masks_for_mem_enc and not self.training:\n            # optionally, apply non-overlapping constraints to the masks (it's applied\n            # in the batch dimension and should only be used during eval, where all\n            # the objects come from the same video under batch size 1).\n            pred_masks_high_res = self._apply_non_overlapping_constraints(\n                pred_masks_high_res\n            )\n        # scale the raw mask logits with a temperature before applying sigmoid\n        binarize = self.binarize_mask_from_pts_for_mem_enc and is_mask_from_pts\n        if binarize and not self.training:\n            mask_for_mem = (pred_masks_high_res > 0).float()\n        else:\n            # apply sigmoid on the raw mask logits to turn them into range (0, 1)\n            mask_for_mem = torch.sigmoid(pred_masks_high_res)\n        # apply scale and bias terms to the sigmoid probabilities\n        if self.sigmoid_scale_for_mem_enc != 1.0:\n            mask_for_mem = mask_for_mem * self.sigmoid_scale_for_mem_enc\n        if self.sigmoid_bias_for_mem_enc != 0.0:\n            mask_for_mem = mask_for_mem + self.sigmoid_bias_for_mem_enc\n        maskmem_out = self.memory_encoder(\n            pix_feat, mask_for_mem, skip_mask_sigmoid=True  # sigmoid already applied\n        )\n        maskmem_features = maskmem_out[\"vision_features\"]\n        maskmem_pos_enc = maskmem_out[\"vision_pos_enc\"]\n\n        return maskmem_features, maskmem_pos_enc\n\n    def track_step(\n        self,\n        frame_idx,\n        is_init_cond_frame,\n        current_vision_feats,\n        current_vision_pos_embeds,\n        feat_sizes,\n        point_inputs,\n        mask_inputs,\n        output_dict,\n        num_frames,\n        track_in_reverse=False,  # tracking in reverse time order (for demo usage)\n        # Whether to run the memory encoder on the predicted masks. Sometimes we might want\n        # to skip the memory encoder with `run_mem_encoder=False`. For example,\n        # in demo we might call `track_step` multiple times for each user click,\n        # and only encode the memory when the user finalizes their clicks. And in ablation\n        # settings like SAM training on static images, we don't need the memory encoder.\n        run_mem_encoder=True,\n        # The previously predicted SAM mask logits (which can be fed together with new clicks in demo).\n        prev_sam_mask_logits=None,\n    ):\n        current_out = {\"point_inputs\": point_inputs, \"mask_inputs\": mask_inputs}\n        # High-resolution feature maps for the SAM head, reshape (HW)BC => BCHW\n        if len(current_vision_feats) > 1:\n            high_res_features = [\n                x.permute(1, 2, 0).view(x.size(1), x.size(2), *s)\n                for x, s in zip(current_vision_feats[:-1], feat_sizes[:-1])\n            ]\n        else:\n            high_res_features = None\n        if mask_inputs is not None and self.use_mask_input_as_output_without_sam:\n            # When use_mask_input_as_output_without_sam=True, we directly output the mask input\n            # (see it as a GT mask) without using a SAM prompt encoder + mask decoder.\n            pix_feat = current_vision_feats[-1].permute(1, 2, 0)\n            pix_feat = pix_feat.view(-1, self.hidden_dim, *feat_sizes[-1])\n            sam_outputs = self._use_mask_as_output(\n                pix_feat, high_res_features, mask_inputs\n            )\n        else:\n            # fused the visual feature with previous memory features in the memory bank\n            pix_feat_with_mem = self._prepare_memory_conditioned_features(\n                frame_idx=frame_idx,\n                is_init_cond_frame=is_init_cond_frame,\n                current_vision_feats=current_vision_feats[-1:],\n                current_vision_pos_embeds=current_vision_pos_embeds[-1:],\n                feat_sizes=feat_sizes[-1:],\n                output_dict=output_dict,\n                num_frames=num_frames,\n                track_in_reverse=track_in_reverse,\n            )\n            # apply SAM-style segmentation head\n            # here we might feed previously predicted low-res SAM mask logits into the SAM mask decoder,\n            # e.g. in demo where such logits come from earlier interaction instead of correction sampling\n            # (in this case, any `mask_inputs` shouldn't reach here as they are sent to _use_mask_as_output instead)\n            if prev_sam_mask_logits is not None:\n                assert point_inputs is not None and mask_inputs is None\n                mask_inputs = prev_sam_mask_logits\n            multimask_output = self._use_multimask(is_init_cond_frame, point_inputs)\n            sam_outputs = self._forward_sam_heads(\n                backbone_features=pix_feat_with_mem,\n                point_inputs=point_inputs,\n                mask_inputs=mask_inputs,\n                high_res_features=high_res_features,\n                multimask_output=multimask_output,\n            )\n        (\n            _,\n            _,\n            _,\n            low_res_masks,\n            high_res_masks,\n            obj_ptr,\n            _,\n        ) = sam_outputs\n\n        current_out[\"pred_masks\"] = low_res_masks\n        current_out[\"pred_masks_high_res\"] = high_res_masks\n        current_out[\"obj_ptr\"] = obj_ptr\n\n        # Finally run the memory encoder on the predicted mask to encode\n        # it into a new memory feature (that can be used in future frames)\n        if run_mem_encoder and self.num_maskmem > 0:\n            high_res_masks_for_mem_enc = high_res_masks\n            maskmem_features, maskmem_pos_enc = self._encode_new_memory(\n                current_vision_feats=current_vision_feats,\n                feat_sizes=feat_sizes,\n                pred_masks_high_res=high_res_masks_for_mem_enc,\n                is_mask_from_pts=(point_inputs is not None),\n            )\n            current_out[\"maskmem_features\"] = maskmem_features\n            current_out[\"maskmem_pos_enc\"] = maskmem_pos_enc\n        else:\n            current_out[\"maskmem_features\"] = None\n            current_out[\"maskmem_pos_enc\"] = None\n\n        return current_out\n\n    def _use_multimask(self, is_init_cond_frame, point_inputs):\n        \"\"\"Whether to use multimask output in the SAM head.\"\"\"\n        num_pts = 0 if point_inputs is None else point_inputs[\"point_labels\"].size(1)\n        multimask_output = (\n            self.multimask_output_in_sam\n            and (is_init_cond_frame or self.multimask_output_for_tracking)\n            and (self.multimask_min_pt_num <= num_pts <= self.multimask_max_pt_num)\n        )\n        return multimask_output\n\n    def _apply_non_overlapping_constraints(self, pred_masks):\n        \"\"\"\n        Apply non-overlapping constraints to the object scores in pred_masks. Here we\n        keep only the highest scoring object at each spatial location in pred_masks.\n        \"\"\"\n        batch_size = pred_masks.size(0)\n        if batch_size == 1:\n            return pred_masks\n\n        device = pred_masks.device\n        # \"max_obj_inds\": object index of the object with the highest score at each location\n        max_obj_inds = torch.argmax(pred_masks, dim=0, keepdim=True)\n        # \"batch_obj_inds\": object index of each object slice (along dim 0) in `pred_masks`\n        batch_obj_inds = torch.arange(batch_size, device=device)[:, None, None, None]\n        keep = max_obj_inds == batch_obj_inds\n        # suppress overlapping regions' scores below -10.0 so that the foreground regions\n        # don't overlap (here sigmoid(-10.0)=4.5398e-05)\n        pred_masks = torch.where(keep, pred_masks, torch.clamp(pred_masks, max=-10.0))\n        return pred_masks\n"
  },
  {
    "path": "auto-seg/sam2/modeling/sam2_utils.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\nimport copy\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\n\ndef select_closest_cond_frames(frame_idx, cond_frame_outputs, max_cond_frame_num):\n    \"\"\"\n    Select up to `max_cond_frame_num` conditioning frames from `cond_frame_outputs`\n    that are temporally closest to the current frame at `frame_idx`. Here, we take\n    - a) the closest conditioning frame before `frame_idx` (if any);\n    - b) the closest conditioning frame after `frame_idx` (if any);\n    - c) any other temporally closest conditioning frames until reaching a total\n         of `max_cond_frame_num` conditioning frames.\n\n    Outputs:\n    - selected_outputs: selected items (keys & values) from `cond_frame_outputs`.\n    - unselected_outputs: items (keys & values) not selected in `cond_frame_outputs`.\n    \"\"\"\n    if max_cond_frame_num == -1 or len(cond_frame_outputs) <= max_cond_frame_num:\n        selected_outputs = cond_frame_outputs\n        unselected_outputs = {}\n    else:\n        assert max_cond_frame_num >= 2, \"we should allow using 2+ conditioning frames\"\n        selected_outputs = {}\n\n        # the closest conditioning frame before `frame_idx` (if any)\n        idx_before = max((t for t in cond_frame_outputs if t < frame_idx), default=None)\n        if idx_before is not None:\n            selected_outputs[idx_before] = cond_frame_outputs[idx_before]\n\n        # the closest conditioning frame after `frame_idx` (if any)\n        idx_after = min((t for t in cond_frame_outputs if t >= frame_idx), default=None)\n        if idx_after is not None:\n            selected_outputs[idx_after] = cond_frame_outputs[idx_after]\n\n        # add other temporally closest conditioning frames until reaching a total\n        # of `max_cond_frame_num` conditioning frames.\n        num_remain = max_cond_frame_num - len(selected_outputs)\n        inds_remain = sorted(\n            (t for t in cond_frame_outputs if t not in selected_outputs),\n            key=lambda x: abs(x - frame_idx),\n        )[:num_remain]\n        selected_outputs.update((t, cond_frame_outputs[t]) for t in inds_remain)\n        unselected_outputs = {\n            t: v for t, v in cond_frame_outputs.items() if t not in selected_outputs\n        }\n\n    return selected_outputs, unselected_outputs\n\n\ndef get_1d_sine_pe(pos_inds, dim, temperature=10000):\n    \"\"\"\n    Get 1D sine positional embedding as in the original Transformer paper.\n    \"\"\"\n    pe_dim = dim // 2\n    dim_t = torch.arange(pe_dim, dtype=torch.float32, device=pos_inds.device)\n    dim_t = temperature ** (2 * (dim_t // 2) / pe_dim)\n\n    pos_embed = pos_inds.unsqueeze(-1) / dim_t\n    pos_embed = torch.cat([pos_embed.sin(), pos_embed.cos()], dim=-1)\n    return pos_embed\n\n\ndef get_activation_fn(activation):\n    \"\"\"Return an activation function given a string\"\"\"\n    if activation == \"relu\":\n        return F.relu\n    if activation == \"gelu\":\n        return F.gelu\n    if activation == \"glu\":\n        return F.glu\n    raise RuntimeError(f\"activation should be relu/gelu, not {activation}.\")\n\n\ndef get_clones(module, N):\n    return nn.ModuleList([copy.deepcopy(module) for i in range(N)])\n\n\nclass DropPath(nn.Module):\n    # adapted from https://github.com/huggingface/pytorch-image-models/blob/main/timm/layers/drop.py\n    def __init__(self, drop_prob=0.0, scale_by_keep=True):\n        super(DropPath, self).__init__()\n        self.drop_prob = drop_prob\n        self.scale_by_keep = scale_by_keep\n\n    def forward(self, x):\n        if self.drop_prob == 0.0 or not self.training:\n            return x\n        keep_prob = 1 - self.drop_prob\n        shape = (x.shape[0],) + (1,) * (x.ndim - 1)\n        random_tensor = x.new_empty(shape).bernoulli_(keep_prob)\n        if keep_prob > 0.0 and self.scale_by_keep:\n            random_tensor.div_(keep_prob)\n        return x * random_tensor\n\n\n# Lightly adapted from\n# https://github.com/facebookresearch/MaskFormer/blob/main/mask_former/modeling/transformer/transformer_predictor.py # noqa\nclass MLP(nn.Module):\n    def __init__(\n        self,\n        input_dim: int,\n        hidden_dim: int,\n        output_dim: int,\n        num_layers: int,\n        activation: nn.Module = nn.ReLU,\n        sigmoid_output: bool = False,\n    ) -> None:\n        super().__init__()\n        self.num_layers = num_layers\n        h = [hidden_dim] * (num_layers - 1)\n        self.layers = nn.ModuleList(\n            nn.Linear(n, k) for n, k in zip([input_dim] + h, h + [output_dim])\n        )\n        self.sigmoid_output = sigmoid_output\n        self.act = activation()\n\n    def forward(self, x):\n        for i, layer in enumerate(self.layers):\n            x = self.act(layer(x)) if i < self.num_layers - 1 else layer(x)\n        if self.sigmoid_output:\n            x = F.sigmoid(x)\n        return x\n\n\n# From https://github.com/facebookresearch/detectron2/blob/main/detectron2/layers/batch_norm.py # noqa\n# Itself from https://github.com/facebookresearch/ConvNeXt/blob/d1fa8f6fef0a165b27399986cc2bdacc92777e40/models/convnext.py#L119  # noqa\nclass LayerNorm2d(nn.Module):\n    def __init__(self, num_channels: int, eps: float = 1e-6) -> None:\n        super().__init__()\n        self.weight = nn.Parameter(torch.ones(num_channels))\n        self.bias = nn.Parameter(torch.zeros(num_channels))\n        self.eps = eps\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        u = x.mean(1, keepdim=True)\n        s = (x - u).pow(2).mean(1, keepdim=True)\n        x = (x - u) / torch.sqrt(s + self.eps)\n        x = self.weight[:, None, None] * x + self.bias[:, None, None]\n        return x\n"
  },
  {
    "path": "auto-seg/sam2/sam2_image_predictor.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport logging\n\nfrom typing import List, Optional, Tuple, Union\n\nimport numpy as np\nimport torch\nfrom PIL.Image import Image\n\nfrom sam2.modeling.sam2_base import SAM2Base\n\nfrom sam2.utils.transforms import SAM2Transforms\n\n\nclass SAM2ImagePredictor:\n    def __init__(\n        self,\n        sam_model: SAM2Base,\n        mask_threshold=0.0,\n        max_hole_area=0.0,\n        max_sprinkle_area=0.0,\n        **kwargs,\n    ) -> None:\n        \"\"\"\n        Uses SAM-2 to calculate the image embedding for an image, and then\n        allow repeated, efficient mask prediction given prompts.\n\n        Arguments:\n          sam_model (Sam-2): The model to use for mask prediction.\n          mask_threshold (float): The threshold to use when converting mask logits\n            to binary masks. Masks are thresholded at 0 by default.\n          max_hole_area (int): If max_hole_area > 0, we fill small holes in up to\n            the maximum area of max_hole_area in low_res_masks.\n          max_sprinkle_area (int): If max_sprinkle_area > 0, we remove small sprinkles up to\n            the maximum area of max_sprinkle_area in low_res_masks.\n        \"\"\"\n        super().__init__()\n        self.model = sam_model\n        self._transforms = SAM2Transforms(\n            resolution=self.model.image_size,\n            mask_threshold=mask_threshold,\n            max_hole_area=max_hole_area,\n            max_sprinkle_area=max_sprinkle_area,\n        )\n\n        # Predictor state\n        self._is_image_set = False\n        self._features = None\n        self._orig_hw = None\n        # Whether the predictor is set for single image or a batch of images\n        self._is_batch = False\n\n        # Predictor config\n        self.mask_threshold = mask_threshold\n\n        # Spatial dim for backbone feature maps\n        self._bb_feat_sizes = [\n            (256, 256),\n            (128, 128),\n            (64, 64),\n        ]\n\n    @classmethod\n    def from_pretrained(cls, model_id: str, **kwargs) -> \"SAM2ImagePredictor\":\n        \"\"\"\n        Load a pretrained model from the Hugging Face hub.\n\n        Arguments:\n          model_id (str): The Hugging Face repository ID.\n          **kwargs: Additional arguments to pass to the model constructor.\n\n        Returns:\n          (SAM2ImagePredictor): The loaded model.\n        \"\"\"\n        from sam2.build_sam import build_sam2_hf\n\n        sam_model = build_sam2_hf(model_id, **kwargs)\n        return cls(sam_model, **kwargs)\n\n    @torch.no_grad()\n    def set_image(\n        self,\n        image: Union[np.ndarray, Image],\n    ) -> None:\n        \"\"\"\n        Calculates the image embeddings for the provided image, allowing\n        masks to be predicted with the 'predict' method.\n\n        Arguments:\n          image (np.ndarray or PIL Image): The input image to embed in RGB format. The image should be in HWC format if np.ndarray, or WHC format if PIL Image\n          with pixel values in [0, 255].\n          image_format (str): The color format of the image, in ['RGB', 'BGR'].\n        \"\"\"\n        self.reset_predictor()\n        # Transform the image to the form expected by the model\n        if isinstance(image, np.ndarray):\n            logging.info(\"For numpy array image, we assume (HxWxC) format\")\n            self._orig_hw = [image.shape[:2]]\n        elif isinstance(image, Image):\n            w, h = image.size\n            self._orig_hw = [(h, w)]\n        else:\n            raise NotImplementedError(\"Image format not supported\")\n\n        input_image = self._transforms(image)\n        input_image = input_image[None, ...].to(self.device)\n\n        assert (\n            len(input_image.shape) == 4 and input_image.shape[1] == 3\n        ), f\"input_image must be of size 1x3xHxW, got {input_image.shape}\"\n        logging.info(\"Computing image embeddings for the provided image...\")\n        backbone_out = self.model.forward_image(input_image)\n        _, vision_feats, _, _ = self.model._prepare_backbone_features(backbone_out)\n        # Add no_mem_embed, which is added to the lowest rest feat. map during training on videos\n        if self.model.directly_add_no_mem_embed:\n            vision_feats[-1] = vision_feats[-1] + self.model.no_mem_embed\n\n        feats = [\n            feat.permute(1, 2, 0).view(1, -1, *feat_size)\n            for feat, feat_size in zip(vision_feats[::-1], self._bb_feat_sizes[::-1])\n        ][::-1]\n        self._features = {\"image_embed\": feats[-1], \"high_res_feats\": feats[:-1]}\n        self._is_image_set = True\n        logging.info(\"Image embeddings computed.\")\n\n    @torch.no_grad()\n    def set_image_batch(\n        self,\n        image_list: List[Union[np.ndarray]],\n    ) -> None:\n        \"\"\"\n        Calculates the image embeddings for the provided image batch, allowing\n        masks to be predicted with the 'predict_batch' method.\n\n        Arguments:\n          image_list (List[np.ndarray]): The input images to embed in RGB format. The image should be in HWC format if np.ndarray\n          with pixel values in [0, 255].\n        \"\"\"\n        self.reset_predictor()\n        assert isinstance(image_list, list)\n        self._orig_hw = []\n        for image in image_list:\n            assert isinstance(\n                image, np.ndarray\n            ), \"Images are expected to be an np.ndarray in RGB format, and of shape  HWC\"\n            self._orig_hw.append(image.shape[:2])\n        # Transform the image to the form expected by the model\n        img_batch = self._transforms.forward_batch(image_list)\n        img_batch = img_batch.to(self.device)\n        batch_size = img_batch.shape[0]\n        assert (\n            len(img_batch.shape) == 4 and img_batch.shape[1] == 3\n        ), f\"img_batch must be of size Bx3xHxW, got {img_batch.shape}\"\n        logging.info(\"Computing image embeddings for the provided images...\")\n        backbone_out = self.model.forward_image(img_batch)\n        _, vision_feats, _, _ = self.model._prepare_backbone_features(backbone_out)\n        # Add no_mem_embed, which is added to the lowest rest feat. map during training on videos\n        if self.model.directly_add_no_mem_embed:\n            vision_feats[-1] = vision_feats[-1] + self.model.no_mem_embed\n\n        feats = [\n            feat.permute(1, 2, 0).view(batch_size, -1, *feat_size)\n            for feat, feat_size in zip(vision_feats[::-1], self._bb_feat_sizes[::-1])\n        ][::-1]\n        self._features = {\"image_embed\": feats[-1], \"high_res_feats\": feats[:-1]}\n        self._is_image_set = True\n        self._is_batch = True\n        logging.info(\"Image embeddings computed.\")\n\n    def predict_batch(\n        self,\n        point_coords_batch: List[np.ndarray] = None,\n        point_labels_batch: List[np.ndarray] = None,\n        box_batch: List[np.ndarray] = None,\n        mask_input_batch: List[np.ndarray] = None,\n        multimask_output: bool = True,\n        return_logits: bool = False,\n        normalize_coords=True,\n    ) -> Tuple[List[np.ndarray], List[np.ndarray], List[np.ndarray]]:\n        \"\"\"This function is very similar to predict(...), however it is used for batched mode, when the model is expected to generate predictions on multiple images.\n        It returns a tuple of lists of masks, ious, and low_res_masks_logits.\n        \"\"\"\n        assert self._is_batch, \"This function should only be used when in batched mode\"\n        if not self._is_image_set:\n            raise RuntimeError(\n                \"An image must be set with .set_image_batch(...) before mask prediction.\"\n            )\n        num_images = len(self._features[\"image_embed\"])\n        all_masks = []\n        all_ious = []\n        all_low_res_masks = []\n        for img_idx in range(num_images):\n            # Transform input prompts\n            point_coords = (\n                point_coords_batch[img_idx] if point_coords_batch is not None else None\n            )\n            point_labels = (\n                point_labels_batch[img_idx] if point_labels_batch is not None else None\n            )\n            box = box_batch[img_idx] if box_batch is not None else None\n            mask_input = (\n                mask_input_batch[img_idx] if mask_input_batch is not None else None\n            )\n            mask_input, unnorm_coords, labels, unnorm_box = self._prep_prompts(\n                point_coords,\n                point_labels,\n                box,\n                mask_input,\n                normalize_coords,\n                img_idx=img_idx,\n            )\n            masks, iou_predictions, low_res_masks = self._predict(\n                unnorm_coords,\n                labels,\n                unnorm_box,\n                mask_input,\n                multimask_output,\n                return_logits=return_logits,\n                img_idx=img_idx,\n            )\n            masks_np = masks.squeeze(0).float().detach().cpu().numpy()\n            iou_predictions_np = (\n                iou_predictions.squeeze(0).float().detach().cpu().numpy()\n            )\n            low_res_masks_np = low_res_masks.squeeze(0).float().detach().cpu().numpy()\n            all_masks.append(masks_np)\n            all_ious.append(iou_predictions_np)\n            all_low_res_masks.append(low_res_masks_np)\n\n        return all_masks, all_ious, all_low_res_masks\n\n    def predict(\n        self,\n        point_coords: Optional[np.ndarray] = None,\n        point_labels: Optional[np.ndarray] = None,\n        box: Optional[np.ndarray] = None,\n        mask_input: Optional[np.ndarray] = None,\n        multimask_output: bool = True,\n        return_logits: bool = False,\n        normalize_coords=True,\n    ) -> Tuple[np.ndarray, np.ndarray, np.ndarray]:\n        \"\"\"\n        Predict masks for the given input prompts, using the currently set image.\n\n        Arguments:\n          point_coords (np.ndarray or None): A Nx2 array of point prompts to the\n            model. Each point is in (X,Y) in pixels.\n          point_labels (np.ndarray or None): A length N array of labels for the\n            point prompts. 1 indicates a foreground point and 0 indicates a\n            background point.\n          box (np.ndarray or None): A length 4 array given a box prompt to the\n            model, in XYXY format.\n          mask_input (np.ndarray): A low resolution mask input to the model, typically\n            coming from a previous prediction iteration. Has form 1xHxW, where\n            for SAM, H=W=256.\n          multimask_output (bool): If true, the model will return three masks.\n            For ambiguous input prompts (such as a single click), this will often\n            produce better masks than a single prediction. If only a single\n            mask is needed, the model's predicted quality score can be used\n            to select the best mask. For non-ambiguous prompts, such as multiple\n            input prompts, multimask_output=False can give better results.\n          return_logits (bool): If true, returns un-thresholded masks logits\n            instead of a binary mask.\n          normalize_coords (bool): If true, the point coordinates will be normalized to the range [0,1] and point_coords is expected to be wrt. image dimensions.\n\n        Returns:\n          (np.ndarray): The output masks in CxHxW format, where C is the\n            number of masks, and (H, W) is the original image size.\n          (np.ndarray): An array of length C containing the model's\n            predictions for the quality of each mask.\n          (np.ndarray): An array of shape CxHxW, where C is the number\n            of masks and H=W=256. These low resolution logits can be passed to\n            a subsequent iteration as mask input.\n        \"\"\"\n        if not self._is_image_set:\n            raise RuntimeError(\n                \"An image must be set with .set_image(...) before mask prediction.\"\n            )\n\n        # Transform input prompts\n\n        mask_input, unnorm_coords, labels, unnorm_box = self._prep_prompts(\n            point_coords, point_labels, box, mask_input, normalize_coords\n        )\n\n        masks, iou_predictions, low_res_masks = self._predict(\n            unnorm_coords,\n            labels,\n            unnorm_box,\n            mask_input,\n            multimask_output,\n            return_logits=return_logits,\n        )\n\n        masks_np = masks.squeeze(0).float().detach().cpu().numpy()\n        iou_predictions_np = iou_predictions.squeeze(0).float().detach().cpu().numpy()\n        low_res_masks_np = low_res_masks.squeeze(0).float().detach().cpu().numpy()\n        return masks_np, iou_predictions_np, low_res_masks_np\n\n    def _prep_prompts(\n        self, point_coords, point_labels, box, mask_logits, normalize_coords, img_idx=-1\n    ):\n\n        unnorm_coords, labels, unnorm_box, mask_input = None, None, None, None\n        if point_coords is not None:\n            assert (\n                point_labels is not None\n            ), \"point_labels must be supplied if point_coords is supplied.\"\n            point_coords = torch.as_tensor(\n                point_coords, dtype=torch.float, device=self.device\n            )\n            unnorm_coords = self._transforms.transform_coords(\n                point_coords, normalize=normalize_coords, orig_hw=self._orig_hw[img_idx]\n            )\n            labels = torch.as_tensor(point_labels, dtype=torch.int, device=self.device)\n            if len(unnorm_coords.shape) == 2:\n                unnorm_coords, labels = unnorm_coords[None, ...], labels[None, ...]\n        if box is not None:\n            box = torch.as_tensor(box, dtype=torch.float, device=self.device)\n            unnorm_box = self._transforms.transform_boxes(\n                box, normalize=normalize_coords, orig_hw=self._orig_hw[img_idx]\n            )  # Bx2x2\n        if mask_logits is not None:\n            mask_input = torch.as_tensor(\n                mask_logits, dtype=torch.float, device=self.device\n            )\n            if len(mask_input.shape) == 3:\n                mask_input = mask_input[None, :, :, :]\n        return mask_input, unnorm_coords, labels, unnorm_box\n\n    @torch.no_grad()\n    def _predict(\n        self,\n        point_coords: Optional[torch.Tensor],\n        point_labels: Optional[torch.Tensor],\n        boxes: Optional[torch.Tensor] = None,\n        mask_input: Optional[torch.Tensor] = None,\n        multimask_output: bool = True,\n        return_logits: bool = False,\n        img_idx: int = -1,\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"\n        Predict masks for the given input prompts, using the currently set image.\n        Input prompts are batched torch tensors and are expected to already be\n        transformed to the input frame using SAM2Transforms.\n\n        Arguments:\n          point_coords (torch.Tensor or None): A BxNx2 array of point prompts to the\n            model. Each point is in (X,Y) in pixels.\n          point_labels (torch.Tensor or None): A BxN array of labels for the\n            point prompts. 1 indicates a foreground point and 0 indicates a\n            background point.\n          boxes (np.ndarray or None): A Bx4 array given a box prompt to the\n            model, in XYXY format.\n          mask_input (np.ndarray): A low resolution mask input to the model, typically\n            coming from a previous prediction iteration. Has form Bx1xHxW, where\n            for SAM, H=W=256. Masks returned by a previous iteration of the\n            predict method do not need further transformation.\n          multimask_output (bool): If true, the model will return three masks.\n            For ambiguous input prompts (such as a single click), this will often\n            produce better masks than a single prediction. If only a single\n            mask is needed, the model's predicted quality score can be used\n            to select the best mask. For non-ambiguous prompts, such as multiple\n            input prompts, multimask_output=False can give better results.\n          return_logits (bool): If true, returns un-thresholded masks logits\n            instead of a binary mask.\n\n        Returns:\n          (torch.Tensor): The output masks in BxCxHxW format, where C is the\n            number of masks, and (H, W) is the original image size.\n          (torch.Tensor): An array of shape BxC containing the model's\n            predictions for the quality of each mask.\n          (torch.Tensor): An array of shape BxCxHxW, where C is the number\n            of masks and H=W=256. These low res logits can be passed to\n            a subsequent iteration as mask input.\n        \"\"\"\n        if not self._is_image_set:\n            raise RuntimeError(\n                \"An image must be set with .set_image(...) before mask prediction.\"\n            )\n\n        if point_coords is not None:\n            concat_points = (point_coords, point_labels)\n        else:\n            concat_points = None\n\n        # Embed prompts\n        if boxes is not None:\n            box_coords = boxes.reshape(-1, 2, 2)\n            box_labels = torch.tensor([[2, 3]], dtype=torch.int, device=boxes.device)\n            box_labels = box_labels.repeat(boxes.size(0), 1)\n            # we merge \"boxes\" and \"points\" into a single \"concat_points\" input (where\n            # boxes are added at the beginning) to sam_prompt_encoder\n            if concat_points is not None:\n                concat_coords = torch.cat([box_coords, concat_points[0]], dim=1)\n                concat_labels = torch.cat([box_labels, concat_points[1]], dim=1)\n                concat_points = (concat_coords, concat_labels)\n            else:\n                concat_points = (box_coords, box_labels)\n\n        sparse_embeddings, dense_embeddings = self.model.sam_prompt_encoder(\n            points=concat_points,\n            boxes=None,\n            masks=mask_input,\n        )\n\n        # Predict masks\n        batched_mode = (\n            concat_points is not None and concat_points[0].shape[0] > 1\n        )  # multi object prediction\n        high_res_features = [\n            feat_level[img_idx].unsqueeze(0)\n            for feat_level in self._features[\"high_res_feats\"]\n        ]\n        low_res_masks, iou_predictions, _, _ = self.model.sam_mask_decoder(\n            image_embeddings=self._features[\"image_embed\"][img_idx].unsqueeze(0),\n            image_pe=self.model.sam_prompt_encoder.get_dense_pe(),\n            sparse_prompt_embeddings=sparse_embeddings,\n            dense_prompt_embeddings=dense_embeddings,\n            multimask_output=multimask_output,\n            repeat_image=batched_mode,\n            high_res_features=high_res_features,\n        )\n\n        # Upscale the masks to the original image resolution\n        masks = self._transforms.postprocess_masks(\n            low_res_masks, self._orig_hw[img_idx]\n        )\n        low_res_masks = torch.clamp(low_res_masks, -32.0, 32.0)\n        if not return_logits:\n            masks = masks > self.mask_threshold\n\n        return masks, iou_predictions, low_res_masks\n\n    def get_image_embedding(self) -> torch.Tensor:\n        \"\"\"\n        Returns the image embeddings for the currently set image, with\n        shape 1xCxHxW, where C is the embedding dimension and (H,W) are\n        the embedding spatial dimension of SAM (typically C=256, H=W=64).\n        \"\"\"\n        if not self._is_image_set:\n            raise RuntimeError(\n                \"An image must be set with .set_image(...) to generate an embedding.\"\n            )\n        assert (\n            self._features is not None\n        ), \"Features must exist if an image has been set.\"\n        return self._features[\"image_embed\"]\n\n    @property\n    def device(self) -> torch.device:\n        return self.model.device\n\n    def reset_predictor(self) -> None:\n        \"\"\"\n        Resets the image embeddings and other state variables.\n        \"\"\"\n        self._is_image_set = False\n        self._features = None\n        self._orig_hw = None\n        self._is_batch = False\n"
  },
  {
    "path": "auto-seg/sam2/sam2_video_predictor.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport warnings\nfrom collections import OrderedDict\n\nimport torch\n\nfrom tqdm import tqdm\n\nfrom sam2.modeling.sam2_base import NO_OBJ_SCORE, SAM2Base\nfrom sam2.utils.misc import concat_points, fill_holes_in_mask_scores, load_video_frames\n\n\nclass SAM2VideoPredictor(SAM2Base):\n    \"\"\"The predictor class to handle user interactions and manage inference states.\"\"\"\n\n    def __init__(\n        self,\n        fill_hole_area=0,\n        # whether to apply non-overlapping constraints on the output object masks\n        non_overlap_masks=False,\n        # whether to clear non-conditioning memory of the surrounding frames (which may contain outdated information) after adding correction clicks;\n        # note that this would only apply to *single-object tracking* unless `clear_non_cond_mem_for_multi_obj` is also set to True)\n        clear_non_cond_mem_around_input=False,\n        # whether to also clear non-conditioning memory of the surrounding frames (only effective when `clear_non_cond_mem_around_input` is True).\n        clear_non_cond_mem_for_multi_obj=False,\n        **kwargs,\n    ):\n        super().__init__(**kwargs)\n        self.fill_hole_area = fill_hole_area\n        self.non_overlap_masks = non_overlap_masks\n        self.clear_non_cond_mem_around_input = clear_non_cond_mem_around_input\n        self.clear_non_cond_mem_for_multi_obj = clear_non_cond_mem_for_multi_obj\n\n    @torch.inference_mode()\n    def init_state(\n        self,\n        video_path,\n        offload_video_to_cpu=False,\n        offload_state_to_cpu=False,\n        async_loading_frames=False,\n    ):\n        \"\"\"Initialize an inference state.\"\"\"\n        compute_device = self.device  # device of the model\n        images, video_height, video_width = load_video_frames(\n            video_path=video_path,\n            image_size=self.image_size,\n            offload_video_to_cpu=offload_video_to_cpu,\n            async_loading_frames=async_loading_frames,\n            compute_device=compute_device,\n        )\n        inference_state = {}\n        inference_state[\"images\"] = images\n        inference_state[\"num_frames\"] = len(images)\n        # whether to offload the video frames to CPU memory\n        # turning on this option saves the GPU memory with only a very small overhead\n        inference_state[\"offload_video_to_cpu\"] = offload_video_to_cpu\n        # whether to offload the inference state to CPU memory\n        # turning on this option saves the GPU memory at the cost of a lower tracking fps\n        # (e.g. in a test case of 768x768 model, fps dropped from 27 to 24 when tracking one object\n        # and from 24 to 21 when tracking two objects)\n        inference_state[\"offload_state_to_cpu\"] = offload_state_to_cpu\n        # the original video height and width, used for resizing final output scores\n        inference_state[\"video_height\"] = video_height\n        inference_state[\"video_width\"] = video_width\n        inference_state[\"device\"] = compute_device\n        if offload_state_to_cpu:\n            inference_state[\"storage_device\"] = torch.device(\"cpu\")\n        else:\n            inference_state[\"storage_device\"] = compute_device\n        # inputs on each frame\n        inference_state[\"point_inputs_per_obj\"] = {}\n        inference_state[\"mask_inputs_per_obj\"] = {}\n        # visual features on a small number of recently visited frames for quick interactions\n        inference_state[\"cached_features\"] = {}\n        # values that don't change across frames (so we only need to hold one copy of them)\n        inference_state[\"constants\"] = {}\n        # mapping between client-side object id and model-side object index\n        inference_state[\"obj_id_to_idx\"] = OrderedDict()\n        inference_state[\"obj_idx_to_id\"] = OrderedDict()\n        inference_state[\"obj_ids\"] = []\n        # A storage to hold the model's tracking results and states on each frame\n        inference_state[\"output_dict\"] = {\n            \"cond_frame_outputs\": {},  # dict containing {frame_idx: <out>}\n            \"non_cond_frame_outputs\": {},  # dict containing {frame_idx: <out>}\n        }\n        # Slice (view) of each object tracking results, sharing the same memory with \"output_dict\"\n        inference_state[\"output_dict_per_obj\"] = {}\n        # A temporary storage to hold new outputs when user interact with a frame\n        # to add clicks or mask (it's merged into \"output_dict\" before propagation starts)\n        inference_state[\"temp_output_dict_per_obj\"] = {}\n        # Frames that already holds consolidated outputs from click or mask inputs\n        # (we directly use their consolidated outputs during tracking)\n        inference_state[\"consolidated_frame_inds\"] = {\n            \"cond_frame_outputs\": set(),  # set containing frame indices\n            \"non_cond_frame_outputs\": set(),  # set containing frame indices\n        }\n        # metadata for each tracking frame (e.g. which direction it's tracked)\n        inference_state[\"tracking_has_started\"] = False\n        inference_state[\"frames_already_tracked\"] = {}\n        # Warm up the visual backbone and cache the image feature on frame 0\n        self._get_image_feature(inference_state, frame_idx=0, batch_size=1)\n        return inference_state\n\n    @classmethod\n    def from_pretrained(cls, model_id: str, **kwargs) -> \"SAM2VideoPredictor\":\n        \"\"\"\n        Load a pretrained model from the Hugging Face hub.\n\n        Arguments:\n          model_id (str): The Hugging Face repository ID.\n          **kwargs: Additional arguments to pass to the model constructor.\n\n        Returns:\n          (SAM2VideoPredictor): The loaded model.\n        \"\"\"\n        from sam2.build_sam import build_sam2_video_predictor_hf\n\n        sam_model = build_sam2_video_predictor_hf(model_id, **kwargs)\n        return sam_model\n\n    def _obj_id_to_idx(self, inference_state, obj_id):\n        \"\"\"Map client-side object id to model-side object index.\"\"\"\n        obj_idx = inference_state[\"obj_id_to_idx\"].get(obj_id, None)\n        if obj_idx is not None:\n            return obj_idx\n\n        # This is a new object id not sent to the server before. We only allow adding\n        # new objects *before* the tracking starts.\n        allow_new_object = not inference_state[\"tracking_has_started\"]\n        if allow_new_object:\n            # get the next object slot\n            obj_idx = len(inference_state[\"obj_id_to_idx\"])\n            inference_state[\"obj_id_to_idx\"][obj_id] = obj_idx\n            inference_state[\"obj_idx_to_id\"][obj_idx] = obj_id\n            inference_state[\"obj_ids\"] = list(inference_state[\"obj_id_to_idx\"])\n            # set up input and output structures for this object\n            inference_state[\"point_inputs_per_obj\"][obj_idx] = {}\n            inference_state[\"mask_inputs_per_obj\"][obj_idx] = {}\n            inference_state[\"output_dict_per_obj\"][obj_idx] = {\n                \"cond_frame_outputs\": {},  # dict containing {frame_idx: <out>}\n                \"non_cond_frame_outputs\": {},  # dict containing {frame_idx: <out>}\n            }\n            inference_state[\"temp_output_dict_per_obj\"][obj_idx] = {\n                \"cond_frame_outputs\": {},  # dict containing {frame_idx: <out>}\n                \"non_cond_frame_outputs\": {},  # dict containing {frame_idx: <out>}\n            }\n            return obj_idx\n        else:\n            raise RuntimeError(\n                f\"Cannot add new object id {obj_id} after tracking starts. \"\n                f\"All existing object ids: {inference_state['obj_ids']}. \"\n                f\"Please call 'reset_state' to restart from scratch.\"\n            )\n\n    def _obj_idx_to_id(self, inference_state, obj_idx):\n        \"\"\"Map model-side object index to client-side object id.\"\"\"\n        return inference_state[\"obj_idx_to_id\"][obj_idx]\n\n    def _get_obj_num(self, inference_state):\n        \"\"\"Get the total number of unique object ids received so far in this session.\"\"\"\n        return len(inference_state[\"obj_idx_to_id\"])\n\n    @torch.inference_mode()\n    def add_new_points_or_box(\n        self,\n        inference_state,\n        frame_idx,\n        obj_id,\n        points=None,\n        labels=None,\n        clear_old_points=True,\n        normalize_coords=True,\n        box=None,\n    ):\n        \"\"\"Add new points to a frame.\"\"\"\n        obj_idx = self._obj_id_to_idx(inference_state, obj_id)\n        point_inputs_per_frame = inference_state[\"point_inputs_per_obj\"][obj_idx]\n        mask_inputs_per_frame = inference_state[\"mask_inputs_per_obj\"][obj_idx]\n\n        if (points is not None) != (labels is not None):\n            raise ValueError(\"points and labels must be provided together\")\n        if points is None and box is None:\n            raise ValueError(\"at least one of points or box must be provided as input\")\n\n        if points is None:\n            points = torch.zeros(0, 2, dtype=torch.float32)\n        elif not isinstance(points, torch.Tensor):\n            points = torch.tensor(points, dtype=torch.float32)\n        if labels is None:\n            labels = torch.zeros(0, dtype=torch.int32)\n        elif not isinstance(labels, torch.Tensor):\n            labels = torch.tensor(labels, dtype=torch.int32)\n        if points.dim() == 2:\n            points = points.unsqueeze(0)  # add batch dimension\n        if labels.dim() == 1:\n            labels = labels.unsqueeze(0)  # add batch dimension\n\n        # If `box` is provided, we add it as the first two points with labels 2 and 3\n        # along with the user-provided points (consistent with how SAM 2 is trained).\n        if box is not None:\n            if not clear_old_points:\n                raise ValueError(\n                    \"cannot add box without clearing old points, since \"\n                    \"box prompt must be provided before any point prompt \"\n                    \"(please use clear_old_points=True instead)\"\n                )\n            if inference_state[\"tracking_has_started\"]:\n                warnings.warn(\n                    \"You are adding a box after tracking starts. SAM 2 may not always be \"\n                    \"able to incorporate a box prompt for *refinement*. If you intend to \"\n                    \"use box prompt as an *initial* input before tracking, please call \"\n                    \"'reset_state' on the inference state to restart from scratch.\",\n                    category=UserWarning,\n                    stacklevel=2,\n                )\n            if not isinstance(box, torch.Tensor):\n                box = torch.tensor(box, dtype=torch.float32, device=points.device)\n            box_coords = box.reshape(1, 2, 2)\n            box_labels = torch.tensor([2, 3], dtype=torch.int32, device=labels.device)\n            box_labels = box_labels.reshape(1, 2)\n            points = torch.cat([box_coords, points], dim=1)\n            labels = torch.cat([box_labels, labels], dim=1)\n\n        if normalize_coords:\n            video_H = inference_state[\"video_height\"]\n            video_W = inference_state[\"video_width\"]\n            points = points / torch.tensor([video_W, video_H]).to(points.device)\n        # scale the (normalized) coordinates by the model's internal image size\n        points = points * self.image_size\n        points = points.to(inference_state[\"device\"])\n        labels = labels.to(inference_state[\"device\"])\n\n        if not clear_old_points:\n            point_inputs = point_inputs_per_frame.get(frame_idx, None)\n        else:\n            point_inputs = None\n        point_inputs = concat_points(point_inputs, points, labels)\n\n        point_inputs_per_frame[frame_idx] = point_inputs\n        mask_inputs_per_frame.pop(frame_idx, None)\n        # If this frame hasn't been tracked before, we treat it as an initial conditioning\n        # frame, meaning that the inputs points are to generate segments on this frame without\n        # using any memory from other frames, like in SAM. Otherwise (if it has been tracked),\n        # the input points will be used to correct the already tracked masks.\n        is_init_cond_frame = frame_idx not in inference_state[\"frames_already_tracked\"]\n        # whether to track in reverse time order\n        if is_init_cond_frame:\n            reverse = False\n        else:\n            reverse = inference_state[\"frames_already_tracked\"][frame_idx][\"reverse\"]\n        obj_output_dict = inference_state[\"output_dict_per_obj\"][obj_idx]\n        obj_temp_output_dict = inference_state[\"temp_output_dict_per_obj\"][obj_idx]\n        # Add a frame to conditioning output if it's an initial conditioning frame or\n        # if the model sees all frames receiving clicks/mask as conditioning frames.\n        is_cond = is_init_cond_frame or self.add_all_frames_to_correct_as_cond\n        storage_key = \"cond_frame_outputs\" if is_cond else \"non_cond_frame_outputs\"\n\n        # Get any previously predicted mask logits on this object and feed it along with\n        # the new clicks into the SAM mask decoder.\n        prev_sam_mask_logits = None\n        # lookup temporary output dict first, which contains the most recent output\n        # (if not found, then lookup conditioning and non-conditioning frame output)\n        prev_out = obj_temp_output_dict[storage_key].get(frame_idx)\n        if prev_out is None:\n            prev_out = obj_output_dict[\"cond_frame_outputs\"].get(frame_idx)\n            if prev_out is None:\n                prev_out = obj_output_dict[\"non_cond_frame_outputs\"].get(frame_idx)\n\n        if prev_out is not None and prev_out[\"pred_masks\"] is not None:\n            device = inference_state[\"device\"]\n            prev_sam_mask_logits = prev_out[\"pred_masks\"].to(device, non_blocking=True)\n            # Clamp the scale of prev_sam_mask_logits to avoid rare numerical issues.\n            prev_sam_mask_logits = torch.clamp(prev_sam_mask_logits, -32.0, 32.0)\n        current_out, _ = self._run_single_frame_inference(\n            inference_state=inference_state,\n            output_dict=obj_output_dict,  # run on the slice of a single object\n            frame_idx=frame_idx,\n            batch_size=1,  # run on the slice of a single object\n            is_init_cond_frame=is_init_cond_frame,\n            point_inputs=point_inputs,\n            mask_inputs=None,\n            reverse=reverse,\n            # Skip the memory encoder when adding clicks or mask. We execute the memory encoder\n            # at the beginning of `propagate_in_video` (after user finalize their clicks). This\n            # allows us to enforce non-overlapping constraints on all objects before encoding\n            # them into memory.\n            run_mem_encoder=False,\n            prev_sam_mask_logits=prev_sam_mask_logits,\n        )\n        # Add the output to the output dict (to be used as future memory)\n        obj_temp_output_dict[storage_key][frame_idx] = current_out\n\n        # Resize the output mask to the original video resolution\n        obj_ids = inference_state[\"obj_ids\"]\n        consolidated_out = self._consolidate_temp_output_across_obj(\n            inference_state,\n            frame_idx,\n            is_cond=is_cond,\n            run_mem_encoder=False,\n            consolidate_at_video_res=True,\n        )\n        _, video_res_masks = self._get_orig_video_res_output(\n            inference_state, consolidated_out[\"pred_masks_video_res\"]\n        )\n        return frame_idx, obj_ids, video_res_masks\n\n    def add_new_points(self, *args, **kwargs):\n        \"\"\"Deprecated method. Please use `add_new_points_or_box` instead.\"\"\"\n        return self.add_new_points_or_box(*args, **kwargs)\n\n    @torch.inference_mode()\n    def add_new_mask(\n        self,\n        inference_state,\n        frame_idx,\n        obj_id,\n        mask,\n    ):\n        \"\"\"Add new mask to a frame.\"\"\"\n        obj_idx = self._obj_id_to_idx(inference_state, obj_id)\n        point_inputs_per_frame = inference_state[\"point_inputs_per_obj\"][obj_idx]\n        mask_inputs_per_frame = inference_state[\"mask_inputs_per_obj\"][obj_idx]\n\n        if not isinstance(mask, torch.Tensor):\n            mask = torch.tensor(mask, dtype=torch.bool)\n        assert mask.dim() == 2\n        mask_H, mask_W = mask.shape\n        mask_inputs_orig = mask[None, None]  # add batch and channel dimension\n        mask_inputs_orig = mask_inputs_orig.float().to(inference_state[\"device\"])\n\n        # resize the mask if it doesn't match the model's image size\n        if mask_H != self.image_size or mask_W != self.image_size:\n            mask_inputs = torch.nn.functional.interpolate(\n                mask_inputs_orig,\n                size=(self.image_size, self.image_size),\n                align_corners=False,\n                mode=\"bilinear\",\n                antialias=True,  # use antialias for downsampling\n            )\n            mask_inputs = (mask_inputs >= 0.5).float()\n        else:\n            mask_inputs = mask_inputs_orig\n\n        mask_inputs_per_frame[frame_idx] = mask_inputs\n        point_inputs_per_frame.pop(frame_idx, None)\n        # If this frame hasn't been tracked before, we treat it as an initial conditioning\n        # frame, meaning that the inputs points are to generate segments on this frame without\n        # using any memory from other frames, like in SAM. Otherwise (if it has been tracked),\n        # the input points will be used to correct the already tracked masks.\n        is_init_cond_frame = frame_idx not in inference_state[\"frames_already_tracked\"]\n        # whether to track in reverse time order\n        if is_init_cond_frame:\n            reverse = False\n        else:\n            reverse = inference_state[\"frames_already_tracked\"][frame_idx][\"reverse\"]\n        obj_output_dict = inference_state[\"output_dict_per_obj\"][obj_idx]\n        obj_temp_output_dict = inference_state[\"temp_output_dict_per_obj\"][obj_idx]\n        # Add a frame to conditioning output if it's an initial conditioning frame or\n        # if the model sees all frames receiving clicks/mask as conditioning frames.\n        is_cond = is_init_cond_frame or self.add_all_frames_to_correct_as_cond\n        storage_key = \"cond_frame_outputs\" if is_cond else \"non_cond_frame_outputs\"\n\n        current_out, _ = self._run_single_frame_inference(\n            inference_state=inference_state,\n            output_dict=obj_output_dict,  # run on the slice of a single object\n            frame_idx=frame_idx,\n            batch_size=1,  # run on the slice of a single object\n            is_init_cond_frame=is_init_cond_frame,\n            point_inputs=None,\n            mask_inputs=mask_inputs,\n            reverse=reverse,\n            # Skip the memory encoder when adding clicks or mask. We execute the memory encoder\n            # at the beginning of `propagate_in_video` (after user finalize their clicks). This\n            # allows us to enforce non-overlapping constraints on all objects before encoding\n            # them into memory.\n            run_mem_encoder=False,\n        )\n        # Add the output to the output dict (to be used as future memory)\n        obj_temp_output_dict[storage_key][frame_idx] = current_out\n\n        # Resize the output mask to the original video resolution\n        obj_ids = inference_state[\"obj_ids\"]\n        consolidated_out = self._consolidate_temp_output_across_obj(\n            inference_state,\n            frame_idx,\n            is_cond=is_cond,\n            run_mem_encoder=False,\n            consolidate_at_video_res=True,\n        )\n        _, video_res_masks = self._get_orig_video_res_output(\n            inference_state, consolidated_out[\"pred_masks_video_res\"]\n        )\n        return frame_idx, obj_ids, video_res_masks\n\n    def _get_orig_video_res_output(self, inference_state, any_res_masks):\n        \"\"\"\n        Resize the object scores to the original video resolution (video_res_masks)\n        and apply non-overlapping constraints for final output.\n        \"\"\"\n        device = inference_state[\"device\"]\n        video_H = inference_state[\"video_height\"]\n        video_W = inference_state[\"video_width\"]\n        any_res_masks = any_res_masks.to(device, non_blocking=True)\n        if any_res_masks.shape[-2:] == (video_H, video_W):\n            video_res_masks = any_res_masks\n        else:\n            video_res_masks = torch.nn.functional.interpolate(\n                any_res_masks,\n                size=(video_H, video_W),\n                mode=\"bilinear\",\n                align_corners=False,\n            )\n        if self.non_overlap_masks:\n            video_res_masks = self._apply_non_overlapping_constraints(video_res_masks)\n        return any_res_masks, video_res_masks\n\n    def _consolidate_temp_output_across_obj(\n        self,\n        inference_state,\n        frame_idx,\n        is_cond,\n        run_mem_encoder,\n        consolidate_at_video_res=False,\n    ):\n        \"\"\"\n        Consolidate the per-object temporary outputs in `temp_output_dict_per_obj` on\n        a frame into a single output for all objects, including\n        1) fill any missing objects either from `output_dict_per_obj` (if they exist in\n           `output_dict_per_obj` for this frame) or leave them as placeholder values\n           (if they don't exist in `output_dict_per_obj` for this frame);\n        2) if specified, rerun memory encoder after apply non-overlapping constraints\n           on the object scores.\n        \"\"\"\n        batch_size = self._get_obj_num(inference_state)\n        storage_key = \"cond_frame_outputs\" if is_cond else \"non_cond_frame_outputs\"\n        # Optionally, we allow consolidating the temporary outputs at the original\n        # video resolution (to provide a better editing experience for mask prompts).\n        if consolidate_at_video_res:\n            assert not run_mem_encoder, \"memory encoder cannot run at video resolution\"\n            consolidated_H = inference_state[\"video_height\"]\n            consolidated_W = inference_state[\"video_width\"]\n            consolidated_mask_key = \"pred_masks_video_res\"\n        else:\n            consolidated_H = consolidated_W = self.image_size // 4\n            consolidated_mask_key = \"pred_masks\"\n\n        # Initialize `consolidated_out`. Its \"maskmem_features\" and \"maskmem_pos_enc\"\n        # will be added when rerunning the memory encoder after applying non-overlapping\n        # constraints to object scores. Its \"pred_masks\" are prefilled with a large\n        # negative value (NO_OBJ_SCORE) to represent missing objects.\n        consolidated_out = {\n            \"maskmem_features\": None,\n            \"maskmem_pos_enc\": None,\n            consolidated_mask_key: torch.full(\n                size=(batch_size, 1, consolidated_H, consolidated_W),\n                fill_value=NO_OBJ_SCORE,\n                dtype=torch.float32,\n                device=inference_state[\"storage_device\"],\n            ),\n            \"obj_ptr\": torch.full(\n                size=(batch_size, self.hidden_dim),\n                fill_value=NO_OBJ_SCORE,\n                dtype=torch.float32,\n                device=inference_state[\"device\"],\n            ),\n        }\n        empty_mask_ptr = None\n        for obj_idx in range(batch_size):\n            obj_temp_output_dict = inference_state[\"temp_output_dict_per_obj\"][obj_idx]\n            obj_output_dict = inference_state[\"output_dict_per_obj\"][obj_idx]\n            out = obj_temp_output_dict[storage_key].get(frame_idx, None)\n            # If the object doesn't appear in \"temp_output_dict_per_obj\" on this frame,\n            # we fall back and look up its previous output in \"output_dict_per_obj\".\n            # We look up both \"cond_frame_outputs\" and \"non_cond_frame_outputs\" in\n            # \"output_dict_per_obj\" to find a previous output for this object.\n            if out is None:\n                out = obj_output_dict[\"cond_frame_outputs\"].get(frame_idx, None)\n            if out is None:\n                out = obj_output_dict[\"non_cond_frame_outputs\"].get(frame_idx, None)\n            # If the object doesn't appear in \"output_dict_per_obj\" either, we skip it\n            # and leave its mask scores to the default scores (i.e. the NO_OBJ_SCORE\n            # placeholder above) and set its object pointer to be a dummy pointer.\n            if out is None:\n                # Fill in dummy object pointers for those objects without any inputs or\n                # tracking outcomes on this frame (only do it under `run_mem_encoder=True`,\n                # i.e. when we need to build the memory for tracking).\n                if run_mem_encoder:\n                    if empty_mask_ptr is None:\n                        empty_mask_ptr = self._get_empty_mask_ptr(\n                            inference_state, frame_idx\n                        )\n                    # fill object pointer with a dummy pointer (based on an empty mask)\n                    consolidated_out[\"obj_ptr\"][obj_idx : obj_idx + 1] = empty_mask_ptr\n                continue\n            # Add the temporary object output mask to consolidated output mask\n            obj_mask = out[\"pred_masks\"]\n            consolidated_pred_masks = consolidated_out[consolidated_mask_key]\n            if obj_mask.shape[-2:] == consolidated_pred_masks.shape[-2:]:\n                consolidated_pred_masks[obj_idx : obj_idx + 1] = obj_mask\n            else:\n                # Resize first if temporary object mask has a different resolution\n                resized_obj_mask = torch.nn.functional.interpolate(\n                    obj_mask,\n                    size=consolidated_pred_masks.shape[-2:],\n                    mode=\"bilinear\",\n                    align_corners=False,\n                )\n                consolidated_pred_masks[obj_idx : obj_idx + 1] = resized_obj_mask\n            consolidated_out[\"obj_ptr\"][obj_idx : obj_idx + 1] = out[\"obj_ptr\"]\n\n        # Optionally, apply non-overlapping constraints on the consolidated scores\n        # and rerun the memory encoder\n        if run_mem_encoder:\n            device = inference_state[\"device\"]\n            high_res_masks = torch.nn.functional.interpolate(\n                consolidated_out[\"pred_masks\"].to(device, non_blocking=True),\n                size=(self.image_size, self.image_size),\n                mode=\"bilinear\",\n                align_corners=False,\n            )\n            if self.non_overlap_masks_for_mem_enc:\n                high_res_masks = self._apply_non_overlapping_constraints(high_res_masks)\n            maskmem_features, maskmem_pos_enc = self._run_memory_encoder(\n                inference_state=inference_state,\n                frame_idx=frame_idx,\n                batch_size=batch_size,\n                high_res_masks=high_res_masks,\n                is_mask_from_pts=True,  # these frames are what the user interacted with\n            )\n            consolidated_out[\"maskmem_features\"] = maskmem_features\n            consolidated_out[\"maskmem_pos_enc\"] = maskmem_pos_enc\n\n        return consolidated_out\n\n    def _get_empty_mask_ptr(self, inference_state, frame_idx):\n        \"\"\"Get a dummy object pointer based on an empty mask on the current frame.\"\"\"\n        # A dummy (empty) mask with a single object\n        batch_size = 1\n        mask_inputs = torch.zeros(\n            (batch_size, 1, self.image_size, self.image_size),\n            dtype=torch.float32,\n            device=inference_state[\"device\"],\n        )\n\n        # Retrieve correct image features\n        (\n            _,\n            _,\n            current_vision_feats,\n            current_vision_pos_embeds,\n            feat_sizes,\n        ) = self._get_image_feature(inference_state, frame_idx, batch_size)\n\n        # Feed the empty mask and image feature above to get a dummy object pointer\n        current_out = self.track_step(\n            frame_idx=frame_idx,\n            is_init_cond_frame=True,\n            current_vision_feats=current_vision_feats,\n            current_vision_pos_embeds=current_vision_pos_embeds,\n            feat_sizes=feat_sizes,\n            point_inputs=None,\n            mask_inputs=mask_inputs,\n            output_dict={},\n            num_frames=inference_state[\"num_frames\"],\n            track_in_reverse=False,\n            run_mem_encoder=False,\n            prev_sam_mask_logits=None,\n        )\n        return current_out[\"obj_ptr\"]\n\n    @torch.inference_mode()\n    def propagate_in_video_preflight(self, inference_state):\n        \"\"\"Prepare inference_state and consolidate temporary outputs before tracking.\"\"\"\n        # Tracking has started and we don't allow adding new objects until session is reset.\n        inference_state[\"tracking_has_started\"] = True\n        batch_size = self._get_obj_num(inference_state)\n\n        # Consolidate per-object temporary outputs in \"temp_output_dict_per_obj\" and\n        # add them into \"output_dict\".\n        temp_output_dict_per_obj = inference_state[\"temp_output_dict_per_obj\"]\n        output_dict = inference_state[\"output_dict\"]\n        # \"consolidated_frame_inds\" contains indices of those frames where consolidated\n        # temporary outputs have been added (either in this call or any previous calls\n        # to `propagate_in_video_preflight`).\n        consolidated_frame_inds = inference_state[\"consolidated_frame_inds\"]\n        for is_cond in [False, True]:\n            # Separately consolidate conditioning and non-conditioning temp outputs\n            storage_key = \"cond_frame_outputs\" if is_cond else \"non_cond_frame_outputs\"\n            # Find all the frames that contain temporary outputs for any objects\n            # (these should be the frames that have just received clicks for mask inputs\n            # via `add_new_points_or_box` or `add_new_mask`)\n            temp_frame_inds = set()\n            for obj_temp_output_dict in temp_output_dict_per_obj.values():\n                temp_frame_inds.update(obj_temp_output_dict[storage_key].keys())\n            consolidated_frame_inds[storage_key].update(temp_frame_inds)\n            # consolidate the temporary output across all objects on this frame\n            for frame_idx in temp_frame_inds:\n                consolidated_out = self._consolidate_temp_output_across_obj(\n                    inference_state, frame_idx, is_cond=is_cond, run_mem_encoder=True\n                )\n                # merge them into \"output_dict\" and also create per-object slices\n                output_dict[storage_key][frame_idx] = consolidated_out\n                self._add_output_per_object(\n                    inference_state, frame_idx, consolidated_out, storage_key\n                )\n                clear_non_cond_mem = self.clear_non_cond_mem_around_input and (\n                    self.clear_non_cond_mem_for_multi_obj or batch_size <= 1\n                )\n                if clear_non_cond_mem:\n                    # clear non-conditioning memory of the surrounding frames\n                    self._clear_non_cond_mem_around_input(inference_state, frame_idx)\n\n            # clear temporary outputs in `temp_output_dict_per_obj`\n            for obj_temp_output_dict in temp_output_dict_per_obj.values():\n                obj_temp_output_dict[storage_key].clear()\n\n        # edge case: if an output is added to \"cond_frame_outputs\", we remove any prior\n        # output on the same frame in \"non_cond_frame_outputs\"\n        for frame_idx in output_dict[\"cond_frame_outputs\"]:\n            output_dict[\"non_cond_frame_outputs\"].pop(frame_idx, None)\n        for obj_output_dict in inference_state[\"output_dict_per_obj\"].values():\n            for frame_idx in obj_output_dict[\"cond_frame_outputs\"]:\n                obj_output_dict[\"non_cond_frame_outputs\"].pop(frame_idx, None)\n        for frame_idx in consolidated_frame_inds[\"cond_frame_outputs\"]:\n            assert frame_idx in output_dict[\"cond_frame_outputs\"]\n            consolidated_frame_inds[\"non_cond_frame_outputs\"].discard(frame_idx)\n\n        # Make sure that the frame indices in \"consolidated_frame_inds\" are exactly those frames\n        # with either points or mask inputs (which should be true under a correct workflow).\n        all_consolidated_frame_inds = (\n            consolidated_frame_inds[\"cond_frame_outputs\"]\n            | consolidated_frame_inds[\"non_cond_frame_outputs\"]\n        )\n        input_frames_inds = set()\n        for point_inputs_per_frame in inference_state[\"point_inputs_per_obj\"].values():\n            input_frames_inds.update(point_inputs_per_frame.keys())\n        for mask_inputs_per_frame in inference_state[\"mask_inputs_per_obj\"].values():\n            input_frames_inds.update(mask_inputs_per_frame.keys())\n        assert all_consolidated_frame_inds == input_frames_inds\n\n    @torch.inference_mode()\n    def propagate_in_video(\n        self,\n        inference_state,\n        start_frame_idx=None,\n        max_frame_num_to_track=None,\n        reverse=False,\n    ):\n        \"\"\"Propagate the input points across frames to track in the entire video.\"\"\"\n        self.propagate_in_video_preflight(inference_state)\n\n        output_dict = inference_state[\"output_dict\"]\n        consolidated_frame_inds = inference_state[\"consolidated_frame_inds\"]\n        obj_ids = inference_state[\"obj_ids\"]\n        num_frames = inference_state[\"num_frames\"]\n        batch_size = self._get_obj_num(inference_state)\n        if len(output_dict[\"cond_frame_outputs\"]) == 0:\n            raise RuntimeError(\"No points are provided; please add points first\")\n        clear_non_cond_mem = self.clear_non_cond_mem_around_input and (\n            self.clear_non_cond_mem_for_multi_obj or batch_size <= 1\n        )\n\n        # set start index, end index, and processing order\n        if start_frame_idx is None:\n            # default: start from the earliest frame with input points\n            start_frame_idx = min(output_dict[\"cond_frame_outputs\"])\n        if max_frame_num_to_track is None:\n            # default: track all the frames in the video\n            max_frame_num_to_track = num_frames\n        if reverse:\n            end_frame_idx = max(start_frame_idx - max_frame_num_to_track, 0)\n            if start_frame_idx > 0:\n                processing_order = range(start_frame_idx, end_frame_idx - 1, -1)\n            else:\n                processing_order = []  # skip reverse tracking if starting from frame 0\n        else:\n            end_frame_idx = min(\n                start_frame_idx + max_frame_num_to_track, num_frames - 1\n            )\n            processing_order = range(start_frame_idx, end_frame_idx + 1)\n\n        for frame_idx in tqdm(processing_order, desc=\"propagate in video\"):\n            # We skip those frames already in consolidated outputs (these are frames\n            # that received input clicks or mask). Note that we cannot directly run\n            # batched forward on them via `_run_single_frame_inference` because the\n            # number of clicks on each object might be different.\n            if frame_idx in consolidated_frame_inds[\"cond_frame_outputs\"]:\n                storage_key = \"cond_frame_outputs\"\n                current_out = output_dict[storage_key][frame_idx]\n                pred_masks = current_out[\"pred_masks\"]\n                if clear_non_cond_mem:\n                    # clear non-conditioning memory of the surrounding frames\n                    self._clear_non_cond_mem_around_input(inference_state, frame_idx)\n            elif frame_idx in consolidated_frame_inds[\"non_cond_frame_outputs\"]:\n                storage_key = \"non_cond_frame_outputs\"\n                current_out = output_dict[storage_key][frame_idx]\n                pred_masks = current_out[\"pred_masks\"]\n            else:\n                storage_key = \"non_cond_frame_outputs\"\n                current_out, pred_masks = self._run_single_frame_inference(\n                    inference_state=inference_state,\n                    output_dict=output_dict,\n                    frame_idx=frame_idx,\n                    batch_size=batch_size,\n                    is_init_cond_frame=False,\n                    point_inputs=None,\n                    mask_inputs=None,\n                    reverse=reverse,\n                    run_mem_encoder=True,\n                )\n                output_dict[storage_key][frame_idx] = current_out\n            # Create slices of per-object outputs for subsequent interaction with each\n            # individual object after tracking.\n            self._add_output_per_object(\n                inference_state, frame_idx, current_out, storage_key\n            )\n            inference_state[\"frames_already_tracked\"][frame_idx] = {\"reverse\": reverse}\n\n            # Resize the output mask to the original video resolution (we directly use\n            # the mask scores on GPU for output to avoid any CPU conversion in between)\n            _, video_res_masks = self._get_orig_video_res_output(\n                inference_state, pred_masks\n            )\n            yield frame_idx, obj_ids, video_res_masks\n\n    def _add_output_per_object(\n        self, inference_state, frame_idx, current_out, storage_key\n    ):\n        \"\"\"\n        Split a multi-object output into per-object output slices and add them into\n        `output_dict_per_obj`. The resulting slices share the same tensor storage.\n        \"\"\"\n        maskmem_features = current_out[\"maskmem_features\"]\n        assert maskmem_features is None or isinstance(maskmem_features, torch.Tensor)\n\n        maskmem_pos_enc = current_out[\"maskmem_pos_enc\"]\n        assert maskmem_pos_enc is None or isinstance(maskmem_pos_enc, list)\n\n        output_dict_per_obj = inference_state[\"output_dict_per_obj\"]\n        for obj_idx, obj_output_dict in output_dict_per_obj.items():\n            obj_slice = slice(obj_idx, obj_idx + 1)\n            obj_out = {\n                \"maskmem_features\": None,\n                \"maskmem_pos_enc\": None,\n                \"pred_masks\": current_out[\"pred_masks\"][obj_slice],\n                \"obj_ptr\": current_out[\"obj_ptr\"][obj_slice],\n            }\n            if maskmem_features is not None:\n                obj_out[\"maskmem_features\"] = maskmem_features[obj_slice]\n            if maskmem_pos_enc is not None:\n                obj_out[\"maskmem_pos_enc\"] = [x[obj_slice] for x in maskmem_pos_enc]\n            obj_output_dict[storage_key][frame_idx] = obj_out\n\n    @torch.inference_mode()\n    def reset_state(self, inference_state):\n        \"\"\"Remove all input points or mask in all frames throughout the video.\"\"\"\n        self._reset_tracking_results(inference_state)\n        # Remove all object ids\n        inference_state[\"obj_id_to_idx\"].clear()\n        inference_state[\"obj_idx_to_id\"].clear()\n        inference_state[\"obj_ids\"].clear()\n        inference_state[\"point_inputs_per_obj\"].clear()\n        inference_state[\"mask_inputs_per_obj\"].clear()\n        inference_state[\"output_dict_per_obj\"].clear()\n        inference_state[\"temp_output_dict_per_obj\"].clear()\n\n    def _reset_tracking_results(self, inference_state):\n        \"\"\"Reset all tracking inputs and results across the videos.\"\"\"\n        for v in inference_state[\"point_inputs_per_obj\"].values():\n            v.clear()\n        for v in inference_state[\"mask_inputs_per_obj\"].values():\n            v.clear()\n        for v in inference_state[\"output_dict_per_obj\"].values():\n            v[\"cond_frame_outputs\"].clear()\n            v[\"non_cond_frame_outputs\"].clear()\n        for v in inference_state[\"temp_output_dict_per_obj\"].values():\n            v[\"cond_frame_outputs\"].clear()\n            v[\"non_cond_frame_outputs\"].clear()\n        inference_state[\"output_dict\"][\"cond_frame_outputs\"].clear()\n        inference_state[\"output_dict\"][\"non_cond_frame_outputs\"].clear()\n        inference_state[\"consolidated_frame_inds\"][\"cond_frame_outputs\"].clear()\n        inference_state[\"consolidated_frame_inds\"][\"non_cond_frame_outputs\"].clear()\n        inference_state[\"tracking_has_started\"] = False\n        inference_state[\"frames_already_tracked\"].clear()\n\n    def _get_image_feature(self, inference_state, frame_idx, batch_size):\n        \"\"\"Compute the image features on a given frame.\"\"\"\n        # Look up in the cache first\n        image, backbone_out = inference_state[\"cached_features\"].get(\n            frame_idx, (None, None)\n        )\n        if backbone_out is None:\n            # Cache miss -- we will run inference on a single image\n            device = inference_state[\"device\"]\n            image = inference_state[\"images\"][frame_idx].to(device).float().unsqueeze(0)\n            backbone_out = self.forward_image(image)\n            # Cache the most recent frame's feature (for repeated interactions with\n            # a frame; we can use an LRU cache for more frames in the future).\n            inference_state[\"cached_features\"] = {frame_idx: (image, backbone_out)}\n\n        # expand the features to have the same dimension as the number of objects\n        expanded_image = image.expand(batch_size, -1, -1, -1)\n        expanded_backbone_out = {\n            \"backbone_fpn\": backbone_out[\"backbone_fpn\"].copy(),\n            \"vision_pos_enc\": backbone_out[\"vision_pos_enc\"].copy(),\n        }\n        for i, feat in enumerate(expanded_backbone_out[\"backbone_fpn\"]):\n            expanded_backbone_out[\"backbone_fpn\"][i] = feat.expand(\n                batch_size, -1, -1, -1\n            )\n        for i, pos in enumerate(expanded_backbone_out[\"vision_pos_enc\"]):\n            pos = pos.expand(batch_size, -1, -1, -1)\n            expanded_backbone_out[\"vision_pos_enc\"][i] = pos\n\n        features = self._prepare_backbone_features(expanded_backbone_out)\n        features = (expanded_image,) + features\n        return features\n\n    def _run_single_frame_inference(\n        self,\n        inference_state,\n        output_dict,\n        frame_idx,\n        batch_size,\n        is_init_cond_frame,\n        point_inputs,\n        mask_inputs,\n        reverse,\n        run_mem_encoder,\n        prev_sam_mask_logits=None,\n    ):\n        \"\"\"Run tracking on a single frame based on current inputs and previous memory.\"\"\"\n        # Retrieve correct image features\n        (\n            _,\n            _,\n            current_vision_feats,\n            current_vision_pos_embeds,\n            feat_sizes,\n        ) = self._get_image_feature(inference_state, frame_idx, batch_size)\n\n        # point and mask should not appear as input simultaneously on the same frame\n        assert point_inputs is None or mask_inputs is None\n        current_out = self.track_step(\n            frame_idx=frame_idx,\n            is_init_cond_frame=is_init_cond_frame,\n            current_vision_feats=current_vision_feats,\n            current_vision_pos_embeds=current_vision_pos_embeds,\n            feat_sizes=feat_sizes,\n            point_inputs=point_inputs,\n            mask_inputs=mask_inputs,\n            output_dict=output_dict,\n            num_frames=inference_state[\"num_frames\"],\n            track_in_reverse=reverse,\n            run_mem_encoder=run_mem_encoder,\n            prev_sam_mask_logits=prev_sam_mask_logits,\n        )\n\n        # optionally offload the output to CPU memory to save GPU space\n        storage_device = inference_state[\"storage_device\"]\n        maskmem_features = current_out[\"maskmem_features\"]\n        if maskmem_features is not None:\n            maskmem_features = maskmem_features.to(torch.bfloat16)\n            maskmem_features = maskmem_features.to(storage_device, non_blocking=True)\n        pred_masks_gpu = current_out[\"pred_masks\"]\n        # potentially fill holes in the predicted masks\n        if self.fill_hole_area > 0:\n            pred_masks_gpu = fill_holes_in_mask_scores(\n                pred_masks_gpu, self.fill_hole_area\n            )\n        pred_masks = pred_masks_gpu.to(storage_device, non_blocking=True)\n        # \"maskmem_pos_enc\" is the same across frames, so we only need to store one copy of it\n        maskmem_pos_enc = self._get_maskmem_pos_enc(inference_state, current_out)\n        # object pointer is a small tensor, so we always keep it on GPU memory for fast access\n        obj_ptr = current_out[\"obj_ptr\"]\n        # make a compact version of this frame's output to reduce the state size\n        compact_current_out = {\n            \"maskmem_features\": maskmem_features,\n            \"maskmem_pos_enc\": maskmem_pos_enc,\n            \"pred_masks\": pred_masks,\n            \"obj_ptr\": obj_ptr,\n        }\n        return compact_current_out, pred_masks_gpu\n\n    def _run_memory_encoder(\n        self, inference_state, frame_idx, batch_size, high_res_masks, is_mask_from_pts\n    ):\n        \"\"\"\n        Run the memory encoder on `high_res_masks`. This is usually after applying\n        non-overlapping constraints to object scores. Since their scores changed, their\n        memory also need to be computed again with the memory encoder.\n        \"\"\"\n        # Retrieve correct image features\n        _, _, current_vision_feats, _, feat_sizes = self._get_image_feature(\n            inference_state, frame_idx, batch_size\n        )\n        maskmem_features, maskmem_pos_enc = self._encode_new_memory(\n            current_vision_feats=current_vision_feats,\n            feat_sizes=feat_sizes,\n            pred_masks_high_res=high_res_masks,\n            is_mask_from_pts=is_mask_from_pts,\n        )\n\n        # optionally offload the output to CPU memory to save GPU space\n        storage_device = inference_state[\"storage_device\"]\n        maskmem_features = maskmem_features.to(torch.bfloat16)\n        maskmem_features = maskmem_features.to(storage_device, non_blocking=True)\n        # \"maskmem_pos_enc\" is the same across frames, so we only need to store one copy of it\n        maskmem_pos_enc = self._get_maskmem_pos_enc(\n            inference_state, {\"maskmem_pos_enc\": maskmem_pos_enc}\n        )\n        return maskmem_features, maskmem_pos_enc\n\n    def _get_maskmem_pos_enc(self, inference_state, current_out):\n        \"\"\"\n        `maskmem_pos_enc` is the same across frames and objects, so we cache it as\n        a constant in the inference session to reduce session storage size.\n        \"\"\"\n        model_constants = inference_state[\"constants\"]\n        # \"out_maskmem_pos_enc\" should be either a list of tensors or None\n        out_maskmem_pos_enc = current_out[\"maskmem_pos_enc\"]\n        if out_maskmem_pos_enc is not None:\n            if \"maskmem_pos_enc\" not in model_constants:\n                assert isinstance(out_maskmem_pos_enc, list)\n                # only take the slice for one object, since it's same across objects\n                maskmem_pos_enc = [x[0:1].clone() for x in out_maskmem_pos_enc]\n                model_constants[\"maskmem_pos_enc\"] = maskmem_pos_enc\n            else:\n                maskmem_pos_enc = model_constants[\"maskmem_pos_enc\"]\n            # expand the cached maskmem_pos_enc to the actual batch size\n            batch_size = out_maskmem_pos_enc[0].size(0)\n            expanded_maskmem_pos_enc = [\n                x.expand(batch_size, -1, -1, -1) for x in maskmem_pos_enc\n            ]\n        else:\n            expanded_maskmem_pos_enc = None\n        return expanded_maskmem_pos_enc\n\n    def _clear_non_cond_mem_around_input(self, inference_state, frame_idx):\n        \"\"\"\n        Remove the non-conditioning memory around the input frame. When users provide\n        correction clicks, the surrounding frames' non-conditioning memories can still\n        contain outdated object appearance information and could confuse the model.\n\n        This method clears those non-conditioning memories surrounding the interacted\n        frame to avoid giving the model both old and new information about the object.\n        \"\"\"\n        r = self.memory_temporal_stride_for_eval\n        frame_idx_begin = frame_idx - r * self.num_maskmem\n        frame_idx_end = frame_idx + r * self.num_maskmem\n        output_dict = inference_state[\"output_dict\"]\n        non_cond_frame_outputs = output_dict[\"non_cond_frame_outputs\"]\n        for t in range(frame_idx_begin, frame_idx_end + 1):\n            non_cond_frame_outputs.pop(t, None)\n            for obj_output_dict in inference_state[\"output_dict_per_obj\"].values():\n                obj_output_dict[\"non_cond_frame_outputs\"].pop(t, None)\n"
  },
  {
    "path": "auto-seg/sam2/utils/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n"
  },
  {
    "path": "auto-seg/sam2/utils/amg.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport math\nfrom copy import deepcopy\nfrom itertools import product\nfrom typing import Any, Dict, Generator, ItemsView, List, Tuple\n\nimport numpy as np\nimport torch\n\n# Very lightly adapted from https://github.com/facebookresearch/segment-anything/blob/main/segment_anything/utils/amg.py\n\n\nclass MaskData:\n    \"\"\"\n    A structure for storing masks and their related data in batched format.\n    Implements basic filtering and concatenation.\n    \"\"\"\n\n    def __init__(self, **kwargs) -> None:\n        for v in kwargs.values():\n            assert isinstance(\n                v, (list, np.ndarray, torch.Tensor)\n            ), \"MaskData only supports list, numpy arrays, and torch tensors.\"\n        self._stats = dict(**kwargs)\n\n    def __setitem__(self, key: str, item: Any) -> None:\n        assert isinstance(\n            item, (list, np.ndarray, torch.Tensor)\n        ), \"MaskData only supports list, numpy arrays, and torch tensors.\"\n        self._stats[key] = item\n\n    def __delitem__(self, key: str) -> None:\n        del self._stats[key]\n\n    def __getitem__(self, key: str) -> Any:\n        return self._stats[key]\n\n    def items(self) -> ItemsView[str, Any]:\n        return self._stats.items()\n\n    def filter(self, keep: torch.Tensor) -> None:\n        for k, v in self._stats.items():\n            if v is None:\n                self._stats[k] = None\n            elif isinstance(v, torch.Tensor):\n                self._stats[k] = v[torch.as_tensor(keep, device=v.device)]\n            elif isinstance(v, np.ndarray):\n                self._stats[k] = v[keep.detach().cpu().numpy()]\n            elif isinstance(v, list) and keep.dtype == torch.bool:\n                self._stats[k] = [a for i, a in enumerate(v) if keep[i]]\n            elif isinstance(v, list):\n                self._stats[k] = [v[i] for i in keep]\n            else:\n                raise TypeError(f\"MaskData key {k} has an unsupported type {type(v)}.\")\n\n    def cat(self, new_stats: \"MaskData\") -> None:\n        for k, v in new_stats.items():\n            if k not in self._stats or self._stats[k] is None:\n                self._stats[k] = deepcopy(v)\n            elif isinstance(v, torch.Tensor):\n                self._stats[k] = torch.cat([self._stats[k], v], dim=0)\n            elif isinstance(v, np.ndarray):\n                self._stats[k] = np.concatenate([self._stats[k], v], axis=0)\n            elif isinstance(v, list):\n                self._stats[k] = self._stats[k] + deepcopy(v)\n            else:\n                raise TypeError(f\"MaskData key {k} has an unsupported type {type(v)}.\")\n\n    def to_numpy(self) -> None:\n        for k, v in self._stats.items():\n            if isinstance(v, torch.Tensor):\n                self._stats[k] = v.float().detach().cpu().numpy()\n\n\ndef is_box_near_crop_edge(\n    boxes: torch.Tensor, crop_box: List[int], orig_box: List[int], atol: float = 20.0\n) -> torch.Tensor:\n    \"\"\"Filter masks at the edge of a crop, but not at the edge of the original image.\"\"\"\n    crop_box_torch = torch.as_tensor(crop_box, dtype=torch.float, device=boxes.device)\n    orig_box_torch = torch.as_tensor(orig_box, dtype=torch.float, device=boxes.device)\n    boxes = uncrop_boxes_xyxy(boxes, crop_box).float()\n    near_crop_edge = torch.isclose(boxes, crop_box_torch[None, :], atol=atol, rtol=0)\n    near_image_edge = torch.isclose(boxes, orig_box_torch[None, :], atol=atol, rtol=0)\n    near_crop_edge = torch.logical_and(near_crop_edge, ~near_image_edge)\n    return torch.any(near_crop_edge, dim=1)\n\n\ndef box_xyxy_to_xywh(box_xyxy: torch.Tensor) -> torch.Tensor:\n    box_xywh = deepcopy(box_xyxy)\n    box_xywh[2] = box_xywh[2] - box_xywh[0]\n    box_xywh[3] = box_xywh[3] - box_xywh[1]\n    return box_xywh\n\n\ndef batch_iterator(batch_size: int, *args) -> Generator[List[Any], None, None]:\n    assert len(args) > 0 and all(\n        len(a) == len(args[0]) for a in args\n    ), \"Batched iteration must have inputs of all the same size.\"\n    n_batches = len(args[0]) // batch_size + int(len(args[0]) % batch_size != 0)\n    for b in range(n_batches):\n        yield [arg[b * batch_size : (b + 1) * batch_size] for arg in args]\n\n\ndef mask_to_rle_pytorch(tensor: torch.Tensor) -> List[Dict[str, Any]]:\n    \"\"\"\n    Encodes masks to an uncompressed RLE, in the format expected by\n    pycoco tools.\n    \"\"\"\n    # Put in fortran order and flatten h,w\n    b, h, w = tensor.shape\n    tensor = tensor.permute(0, 2, 1).flatten(1)\n\n    # Compute change indices\n    diff = tensor[:, 1:] ^ tensor[:, :-1]\n    change_indices = diff.nonzero()\n\n    # Encode run length\n    out = []\n    for i in range(b):\n        cur_idxs = change_indices[change_indices[:, 0] == i, 1]\n        cur_idxs = torch.cat(\n            [\n                torch.tensor([0], dtype=cur_idxs.dtype, device=cur_idxs.device),\n                cur_idxs + 1,\n                torch.tensor([h * w], dtype=cur_idxs.dtype, device=cur_idxs.device),\n            ]\n        )\n        btw_idxs = cur_idxs[1:] - cur_idxs[:-1]\n        counts = [] if tensor[i, 0] == 0 else [0]\n        counts.extend(btw_idxs.detach().cpu().tolist())\n        out.append({\"size\": [h, w], \"counts\": counts})\n    return out\n\n\ndef rle_to_mask(rle: Dict[str, Any]) -> np.ndarray:\n    \"\"\"Compute a binary mask from an uncompressed RLE.\"\"\"\n    h, w = rle[\"size\"]\n    mask = np.empty(h * w, dtype=bool)\n    idx = 0\n    parity = False\n    for count in rle[\"counts\"]:\n        mask[idx : idx + count] = parity\n        idx += count\n        parity ^= True\n    mask = mask.reshape(w, h)\n    return mask.transpose()  # Put in C order\n\n\ndef area_from_rle(rle: Dict[str, Any]) -> int:\n    return sum(rle[\"counts\"][1::2])\n\n\ndef calculate_stability_score(\n    masks: torch.Tensor, mask_threshold: float, threshold_offset: float\n) -> torch.Tensor:\n    \"\"\"\n    Computes the stability score for a batch of masks. The stability\n    score is the IoU between the binary masks obtained by thresholding\n    the predicted mask logits at high and low values.\n    \"\"\"\n    # One mask is always contained inside the other.\n    # Save memory by preventing unnecessary cast to torch.int64\n    intersections = (\n        (masks > (mask_threshold + threshold_offset))\n        .sum(-1, dtype=torch.int16)\n        .sum(-1, dtype=torch.int32)\n    )\n    unions = (\n        (masks > (mask_threshold - threshold_offset))\n        .sum(-1, dtype=torch.int16)\n        .sum(-1, dtype=torch.int32)\n    )\n    return intersections / unions\n\n\ndef build_point_grid(n_per_side: int) -> np.ndarray:\n    \"\"\"Generates a 2D grid of points evenly spaced in [0,1]x[0,1].\"\"\"\n    offset = 1 / (2 * n_per_side)\n    points_one_side = np.linspace(offset, 1 - offset, n_per_side)\n    points_x = np.tile(points_one_side[None, :], (n_per_side, 1))\n    points_y = np.tile(points_one_side[:, None], (1, n_per_side))\n    points = np.stack([points_x, points_y], axis=-1).reshape(-1, 2)\n    return points\n\n\ndef build_all_layer_point_grids(\n    n_per_side: int, n_layers: int, scale_per_layer: int\n) -> List[np.ndarray]:\n    \"\"\"Generates point grids for all crop layers.\"\"\"\n    points_by_layer = []\n    for i in range(n_layers + 1):\n        n_points = int(n_per_side / (scale_per_layer**i))\n        points_by_layer.append(build_point_grid(n_points))\n    return points_by_layer\n\n\ndef generate_crop_boxes(\n    im_size: Tuple[int, ...], n_layers: int, overlap_ratio: float\n) -> Tuple[List[List[int]], List[int]]:\n    \"\"\"\n    Generates a list of crop boxes of different sizes. Each layer\n    has (2**i)**2 boxes for the ith layer.\n    \"\"\"\n    crop_boxes, layer_idxs = [], []\n    im_h, im_w = im_size\n    short_side = min(im_h, im_w)\n\n    # Original image\n    crop_boxes.append([0, 0, im_w, im_h])\n    layer_idxs.append(0)\n\n    def crop_len(orig_len, n_crops, overlap):\n        return int(math.ceil((overlap * (n_crops - 1) + orig_len) / n_crops))\n\n    for i_layer in range(n_layers):\n        n_crops_per_side = 2 ** (i_layer + 1)\n        overlap = int(overlap_ratio * short_side * (2 / n_crops_per_side))\n\n        crop_w = crop_len(im_w, n_crops_per_side, overlap)\n        crop_h = crop_len(im_h, n_crops_per_side, overlap)\n\n        crop_box_x0 = [int((crop_w - overlap) * i) for i in range(n_crops_per_side)]\n        crop_box_y0 = [int((crop_h - overlap) * i) for i in range(n_crops_per_side)]\n\n        # Crops in XYWH format\n        for x0, y0 in product(crop_box_x0, crop_box_y0):\n            box = [x0, y0, min(x0 + crop_w, im_w), min(y0 + crop_h, im_h)]\n            crop_boxes.append(box)\n            layer_idxs.append(i_layer + 1)\n\n    return crop_boxes, layer_idxs\n\n\ndef uncrop_boxes_xyxy(boxes: torch.Tensor, crop_box: List[int]) -> torch.Tensor:\n    x0, y0, _, _ = crop_box\n    offset = torch.tensor([[x0, y0, x0, y0]], device=boxes.device)\n    # Check if boxes has a channel dimension\n    if len(boxes.shape) == 3:\n        offset = offset.unsqueeze(1)\n    return boxes + offset\n\n\ndef uncrop_points(points: torch.Tensor, crop_box: List[int]) -> torch.Tensor:\n    x0, y0, _, _ = crop_box\n    offset = torch.tensor([[x0, y0]], device=points.device)\n    # Check if points has a channel dimension\n    if len(points.shape) == 3:\n        offset = offset.unsqueeze(1)\n    return points + offset\n\n\ndef uncrop_masks(\n    masks: torch.Tensor, crop_box: List[int], orig_h: int, orig_w: int\n) -> torch.Tensor:\n    x0, y0, x1, y1 = crop_box\n    if x0 == 0 and y0 == 0 and x1 == orig_w and y1 == orig_h:\n        return masks\n    # Coordinate transform masks\n    pad_x, pad_y = orig_w - (x1 - x0), orig_h - (y1 - y0)\n    pad = (x0, pad_x - x0, y0, pad_y - y0)\n    return torch.nn.functional.pad(masks, pad, value=0)\n\n\ndef remove_small_regions(\n    mask: np.ndarray, area_thresh: float, mode: str\n) -> Tuple[np.ndarray, bool]:\n    \"\"\"\n    Removes small disconnected regions and holes in a mask. Returns the\n    mask and an indicator of if the mask has been modified.\n    \"\"\"\n    import cv2  # type: ignore\n\n    assert mode in [\"holes\", \"islands\"]\n    correct_holes = mode == \"holes\"\n    working_mask = (correct_holes ^ mask).astype(np.uint8)\n    n_labels, regions, stats, _ = cv2.connectedComponentsWithStats(working_mask, 8)\n    sizes = stats[:, -1][1:]  # Row 0 is background label\n    small_regions = [i + 1 for i, s in enumerate(sizes) if s < area_thresh]\n    if len(small_regions) == 0:\n        return mask, False\n    fill_labels = [0] + small_regions\n    if not correct_holes:\n        fill_labels = [i for i in range(n_labels) if i not in fill_labels]\n        # If every region is below threshold, keep largest\n        if len(fill_labels) == 0:\n            fill_labels = [int(np.argmax(sizes)) + 1]\n    mask = np.isin(regions, fill_labels)\n    return mask, True\n\n\ndef coco_encode_rle(uncompressed_rle: Dict[str, Any]) -> Dict[str, Any]:\n    from pycocotools import mask as mask_utils  # type: ignore\n\n    h, w = uncompressed_rle[\"size\"]\n    rle = mask_utils.frPyObjects(uncompressed_rle, h, w)\n    rle[\"counts\"] = rle[\"counts\"].decode(\"utf-8\")  # Necessary to serialize with json\n    return rle\n\n\ndef batched_mask_to_box(masks: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Calculates boxes in XYXY format around masks. Return [0,0,0,0] for\n    an empty mask. For input shape C1xC2x...xHxW, the output shape is C1xC2x...x4.\n    \"\"\"\n    # torch.max below raises an error on empty inputs, just skip in this case\n    if torch.numel(masks) == 0:\n        return torch.zeros(*masks.shape[:-2], 4, device=masks.device)\n\n    # Normalize shape to CxHxW\n    shape = masks.shape\n    h, w = shape[-2:]\n    if len(shape) > 2:\n        masks = masks.flatten(0, -3)\n    else:\n        masks = masks.unsqueeze(0)\n\n    # Get top and bottom edges\n    in_height, _ = torch.max(masks, dim=-1)\n    in_height_coords = in_height * torch.arange(h, device=in_height.device)[None, :]\n    bottom_edges, _ = torch.max(in_height_coords, dim=-1)\n    in_height_coords = in_height_coords + h * (~in_height)\n    top_edges, _ = torch.min(in_height_coords, dim=-1)\n\n    # Get left and right edges\n    in_width, _ = torch.max(masks, dim=-2)\n    in_width_coords = in_width * torch.arange(w, device=in_width.device)[None, :]\n    right_edges, _ = torch.max(in_width_coords, dim=-1)\n    in_width_coords = in_width_coords + w * (~in_width)\n    left_edges, _ = torch.min(in_width_coords, dim=-1)\n\n    # If the mask is empty the right edge will be to the left of the left edge.\n    # Replace these boxes with [0, 0, 0, 0]\n    empty_filter = (right_edges < left_edges) | (bottom_edges < top_edges)\n    out = torch.stack([left_edges, top_edges, right_edges, bottom_edges], dim=-1)\n    out = out * (~empty_filter).unsqueeze(-1)\n\n    # Return to original shape\n    if len(shape) > 2:\n        out = out.reshape(*shape[:-2], 4)\n    else:\n        out = out[0]\n\n    return out\n"
  },
  {
    "path": "auto-seg/sam2/utils/misc.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport os\nimport warnings\nfrom threading import Thread\n\nimport numpy as np\nimport torch\nfrom PIL import Image\nfrom tqdm import tqdm\n\n\ndef get_sdpa_settings():\n    if torch.cuda.is_available():\n        old_gpu = torch.cuda.get_device_properties(0).major < 7\n        # only use Flash Attention on Ampere (8.0) or newer GPUs\n        use_flash_attn = torch.cuda.get_device_properties(0).major >= 8\n        if not use_flash_attn:\n            warnings.warn(\n                \"Flash Attention is disabled as it requires a GPU with Ampere (8.0) CUDA capability.\",\n                category=UserWarning,\n                stacklevel=2,\n            )\n        # keep math kernel for PyTorch versions before 2.2 (Flash Attention v2 is only\n        # available on PyTorch 2.2+, while Flash Attention v1 cannot handle all cases)\n        pytorch_version = tuple(int(v) for v in torch.__version__.split(\".\")[:2])\n        if pytorch_version < (2, 2):\n            warnings.warn(\n                f\"You are using PyTorch {torch.__version__} without Flash Attention v2 support. \"\n                \"Consider upgrading to PyTorch 2.2+ for Flash Attention v2 (which could be faster).\",\n                category=UserWarning,\n                stacklevel=2,\n            )\n        math_kernel_on = pytorch_version < (2, 2) or not use_flash_attn\n    else:\n        old_gpu = True\n        use_flash_attn = False\n        math_kernel_on = True\n\n    return old_gpu, use_flash_attn, math_kernel_on\n\n\ndef get_connected_components(mask):\n    \"\"\"\n    Get the connected components (8-connectivity) of binary masks of shape (N, 1, H, W).\n\n    Inputs:\n    - mask: A binary mask tensor of shape (N, 1, H, W), where 1 is foreground and 0 is\n            background.\n\n    Outputs:\n    - labels: A tensor of shape (N, 1, H, W) containing the connected component labels\n              for foreground pixels and 0 for background pixels.\n    - counts: A tensor of shape (N, 1, H, W) containing the area of the connected\n              components for foreground pixels and 0 for background pixels.\n    \"\"\"\n    from sam2 import _C\n\n    return _C.get_connected_componnets(mask.to(torch.uint8).contiguous())\n\n\ndef mask_to_box(masks: torch.Tensor):\n    \"\"\"\n    compute bounding box given an input mask\n\n    Inputs:\n    - masks: [B, 1, H, W] masks, dtype=torch.Tensor\n\n    Returns:\n    - box_coords: [B, 1, 4], contains (x, y) coordinates of top left and bottom right box corners, dtype=torch.Tensor\n    \"\"\"\n    B, _, h, w = masks.shape\n    device = masks.device\n    xs = torch.arange(w, device=device, dtype=torch.int32)\n    ys = torch.arange(h, device=device, dtype=torch.int32)\n    grid_xs, grid_ys = torch.meshgrid(xs, ys, indexing=\"xy\")\n    grid_xs = grid_xs[None, None, ...].expand(B, 1, h, w)\n    grid_ys = grid_ys[None, None, ...].expand(B, 1, h, w)\n    min_xs, _ = torch.min(torch.where(masks, grid_xs, w).flatten(-2), dim=-1)\n    max_xs, _ = torch.max(torch.where(masks, grid_xs, -1).flatten(-2), dim=-1)\n    min_ys, _ = torch.min(torch.where(masks, grid_ys, h).flatten(-2), dim=-1)\n    max_ys, _ = torch.max(torch.where(masks, grid_ys, -1).flatten(-2), dim=-1)\n    bbox_coords = torch.stack((min_xs, min_ys, max_xs, max_ys), dim=-1)\n\n    return bbox_coords\n\n\ndef _load_img_as_tensor(img_path, image_size):\n    img_pil = Image.open(img_path)\n    img_np = np.array(img_pil.convert(\"RGB\").resize((image_size, image_size)))\n    if img_np.dtype == np.uint8:  # np.uint8 is expected for JPEG images\n        img_np = img_np / 255.0\n    else:\n        raise RuntimeError(f\"Unknown image dtype: {img_np.dtype} on {img_path}\")\n    img = torch.from_numpy(img_np).permute(2, 0, 1)\n    video_width, video_height = img_pil.size  # the original video size\n    return img, video_height, video_width\n\n\nclass AsyncVideoFrameLoader:\n    \"\"\"\n    A list of video frames to be load asynchronously without blocking session start.\n    \"\"\"\n\n    def __init__(\n        self,\n        img_paths,\n        image_size,\n        offload_video_to_cpu,\n        img_mean,\n        img_std,\n        compute_device,\n    ):\n        self.img_paths = img_paths\n        self.image_size = image_size\n        self.offload_video_to_cpu = offload_video_to_cpu\n        self.img_mean = img_mean\n        self.img_std = img_std\n        # items in `self.images` will be loaded asynchronously\n        self.images = [None] * len(img_paths)\n        # catch and raise any exceptions in the async loading thread\n        self.exception = None\n        # video_height and video_width be filled when loading the first image\n        self.video_height = None\n        self.video_width = None\n        self.compute_device = compute_device\n\n        # load the first frame to fill video_height and video_width and also\n        # to cache it (since it's most likely where the user will click)\n        self.__getitem__(0)\n\n        # load the rest of frames asynchronously without blocking the session start\n        def _load_frames():\n            try:\n                for n in tqdm(range(len(self.images)), desc=\"frame loading (JPEG)\"):\n                    self.__getitem__(n)\n            except Exception as e:\n                self.exception = e\n\n        self.thread = Thread(target=_load_frames, daemon=True)\n        self.thread.start()\n\n    def __getitem__(self, index):\n        if self.exception is not None:\n            raise RuntimeError(\"Failure in frame loading thread\") from self.exception\n\n        img = self.images[index]\n        if img is not None:\n            return img\n\n        img, video_height, video_width = _load_img_as_tensor(\n            self.img_paths[index], self.image_size\n        )\n        self.video_height = video_height\n        self.video_width = video_width\n        # normalize by mean and std\n        img -= self.img_mean\n        img /= self.img_std\n        if not self.offload_video_to_cpu:\n            img = img.to(self.compute_device, non_blocking=True)\n        self.images[index] = img\n        return img\n\n    def __len__(self):\n        return len(self.images)\n\n\ndef load_video_frames(\n    video_path,\n    image_size,\n    offload_video_to_cpu,\n    img_mean=(0.485, 0.456, 0.406),\n    img_std=(0.229, 0.224, 0.225),\n    async_loading_frames=False,\n    compute_device=torch.device(\"cuda\"),\n):\n    \"\"\"\n    Load the video frames from a directory of JPEG files (\"<frame_index>.jpg\" format).\n\n    The frames are resized to image_size x image_size and are loaded to GPU if\n    `offload_video_to_cpu` is `False` and to CPU if `offload_video_to_cpu` is `True`.\n\n    You can load a frame asynchronously by setting `async_loading_frames` to `True`.\n    \"\"\"\n    if isinstance(video_path, str) and os.path.isdir(video_path):\n        jpg_folder = video_path\n    else:\n        raise NotImplementedError(\n            \"Only JPEG frames are supported at this moment. For video files, you may use \"\n            \"ffmpeg (https://ffmpeg.org/) to extract frames into a folder of JPEG files, such as \\n\"\n            \"```\\n\"\n            \"ffmpeg -i <your_video>.mp4 -q:v 2 -start_number 0 <output_dir>/'%05d.jpg'\\n\"\n            \"```\\n\"\n            \"where `-q:v` generates high-quality JPEG frames and `-start_number 0` asks \"\n            \"ffmpeg to start the JPEG file from 00000.jpg.\"\n        )\n\n    frame_names = [\n        p\n        for p in os.listdir(jpg_folder)\n        if os.path.splitext(p)[-1] in [\".jpg\", \".jpeg\", \".JPG\", \".JPEG\", \".png\"]\n    ]\n    try:\n        frame_names.sort(key=lambda p: int(os.path.splitext(p)[0]))\n    except:\n        frame_names.sort(key=lambda p: os.path.splitext(p)[0])\n    num_frames = len(frame_names)\n    if num_frames == 0:\n        raise RuntimeError(f\"no images found in {jpg_folder}\")\n    img_paths = [os.path.join(jpg_folder, frame_name) for frame_name in frame_names]\n    img_mean = torch.tensor(img_mean, dtype=torch.float32)[:, None, None]\n    img_std = torch.tensor(img_std, dtype=torch.float32)[:, None, None]\n\n    if async_loading_frames:\n        lazy_images = AsyncVideoFrameLoader(\n            img_paths,\n            image_size,\n            offload_video_to_cpu,\n            img_mean,\n            img_std,\n            compute_device,\n        )\n        return lazy_images, lazy_images.video_height, lazy_images.video_width\n\n    images = torch.zeros(num_frames, 3, image_size, image_size, dtype=torch.float32)\n    for n, img_path in enumerate(tqdm(img_paths, desc=\"frame loading (JPEG)\")):\n        images[n], video_height, video_width = _load_img_as_tensor(img_path, image_size)\n    if not offload_video_to_cpu:\n        images = images.to(compute_device)\n        img_mean = img_mean.to(compute_device)\n        img_std = img_std.to(compute_device)\n    # normalize by mean and std\n    images -= img_mean\n    images /= img_std\n    return images, video_height, video_width\n\n\ndef fill_holes_in_mask_scores(mask, max_area):\n    \"\"\"\n    A post processor to fill small holes in mask scores with area under `max_area`.\n    \"\"\"\n    # Holes are those connected components in background with area <= self.max_area\n    # (background regions are those with mask scores <= 0)\n    assert max_area > 0, \"max_area must be positive\"\n\n    input_mask = mask\n    try:\n        labels, areas = get_connected_components(mask <= 0)\n        is_hole = (labels > 0) & (areas <= max_area)\n        # We fill holes with a small positive mask score (0.1) to change them to foreground.\n        mask = torch.where(is_hole, 0.1, mask)\n    except Exception as e:\n        # Skip the post-processing step on removing small holes if the CUDA kernel fails\n        warnings.warn(\n            f\"{e}\\n\\nSkipping the post-processing step due to the error above. You can \"\n            \"still use SAM 2 and it's OK to ignore the error above, although some post-processing \"\n            \"functionality may be limited (which doesn't affect the results in most cases; see \"\n            \"https://github.com/facebookresearch/segment-anything-2/blob/main/INSTALL.md).\",\n            category=UserWarning,\n            stacklevel=2,\n        )\n        mask = input_mask\n\n    return mask\n\n\ndef concat_points(old_point_inputs, new_points, new_labels):\n    \"\"\"Add new points and labels to previous point inputs (add at the end).\"\"\"\n    if old_point_inputs is None:\n        points, labels = new_points, new_labels\n    else:\n        points = torch.cat([old_point_inputs[\"point_coords\"], new_points], dim=1)\n        labels = torch.cat([old_point_inputs[\"point_labels\"], new_labels], dim=1)\n\n    return {\"point_coords\": points, \"point_labels\": labels}\n"
  },
  {
    "path": "auto-seg/sam2/utils/transforms.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport warnings\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torchvision.transforms import Normalize, Resize, ToTensor\n\n\nclass SAM2Transforms(nn.Module):\n    def __init__(\n        self, resolution, mask_threshold, max_hole_area=0.0, max_sprinkle_area=0.0\n    ):\n        \"\"\"\n        Transforms for SAM2.\n        \"\"\"\n        super().__init__()\n        self.resolution = resolution\n        self.mask_threshold = mask_threshold\n        self.max_hole_area = max_hole_area\n        self.max_sprinkle_area = max_sprinkle_area\n        self.mean = [0.485, 0.456, 0.406]\n        self.std = [0.229, 0.224, 0.225]\n        self.to_tensor = ToTensor()\n        self.transforms = torch.jit.script(\n            nn.Sequential(\n                Resize((self.resolution, self.resolution)),\n                Normalize(self.mean, self.std),\n            )\n        )\n\n    def __call__(self, x):\n        x = self.to_tensor(x)\n        return self.transforms(x)\n\n    def forward_batch(self, img_list):\n        img_batch = [self.transforms(self.to_tensor(img)) for img in img_list]\n        img_batch = torch.stack(img_batch, dim=0)\n        return img_batch\n\n    def transform_coords(\n        self, coords: torch.Tensor, normalize=False, orig_hw=None\n    ) -> torch.Tensor:\n        \"\"\"\n        Expects a torch tensor with length 2 in the last dimension. The coordinates can be in absolute image or normalized coordinates,\n        If the coords are in absolute image coordinates, normalize should be set to True and original image size is required.\n\n        Returns\n            Un-normalized coordinates in the range of [0, 1] which is expected by the SAM2 model.\n        \"\"\"\n        if normalize:\n            assert orig_hw is not None\n            h, w = orig_hw\n            coords = coords.clone()\n            coords[..., 0] = coords[..., 0] / w\n            coords[..., 1] = coords[..., 1] / h\n\n        coords = coords * self.resolution  # unnormalize coords\n        return coords\n\n    def transform_boxes(\n        self, boxes: torch.Tensor, normalize=False, orig_hw=None\n    ) -> torch.Tensor:\n        \"\"\"\n        Expects a tensor of shape Bx4. The coordinates can be in absolute image or normalized coordinates,\n        if the coords are in absolute image coordinates, normalize should be set to True and original image size is required.\n        \"\"\"\n        boxes = self.transform_coords(boxes.reshape(-1, 2, 2), normalize, orig_hw)\n        return boxes\n\n    def postprocess_masks(self, masks: torch.Tensor, orig_hw) -> torch.Tensor:\n        \"\"\"\n        Perform PostProcessing on output masks.\n        \"\"\"\n        from sam2.utils.misc import get_connected_components\n\n        masks = masks.float()\n        input_masks = masks\n        mask_flat = masks.flatten(0, 1).unsqueeze(1)  # flatten as 1-channel image\n        try:\n            if self.max_hole_area > 0:\n                # Holes are those connected components in background with area <= self.fill_hole_area\n                # (background regions are those with mask scores <= self.mask_threshold)\n                labels, areas = get_connected_components(\n                    mask_flat <= self.mask_threshold\n                )\n                is_hole = (labels > 0) & (areas <= self.max_hole_area)\n                is_hole = is_hole.reshape_as(masks)\n                # We fill holes with a small positive mask score (10.0) to change them to foreground.\n                masks = torch.where(is_hole, self.mask_threshold + 10.0, masks)\n\n            if self.max_sprinkle_area > 0:\n                labels, areas = get_connected_components(\n                    mask_flat > self.mask_threshold\n                )\n                is_hole = (labels > 0) & (areas <= self.max_sprinkle_area)\n                is_hole = is_hole.reshape_as(masks)\n                # We fill holes with negative mask score (-10.0) to change them to background.\n                masks = torch.where(is_hole, self.mask_threshold - 10.0, masks)\n        except Exception as e:\n            # Skip the post-processing step if the CUDA kernel fails\n            warnings.warn(\n                f\"{e}\\n\\nSkipping the post-processing step due to the error above. You can \"\n                \"still use SAM 2 and it's OK to ignore the error above, although some post-processing \"\n                \"functionality may be limited (which doesn't affect the results in most cases; see \"\n                \"https://github.com/facebookresearch/segment-anything-2/blob/main/INSTALL.md).\",\n                category=UserWarning,\n                stacklevel=2,\n            )\n            masks = input_masks\n\n        masks = F.interpolate(masks, orig_hw, mode=\"bilinear\", align_corners=False)\n        return masks\n"
  },
  {
    "path": "auto-seg/sam2_configs/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n"
  },
  {
    "path": "auto-seg/sam2_configs/sam2_hiera_b+.yaml",
    "content": "# @package _global_\n\n# Model\nmodel:\n  _target_: sam2.modeling.sam2_base.SAM2Base\n  image_encoder:\n    _target_: sam2.modeling.backbones.image_encoder.ImageEncoder\n    scalp: 1\n    trunk:\n      _target_: sam2.modeling.backbones.hieradet.Hiera\n      embed_dim: 112\n      num_heads: 2\n    neck:\n      _target_: sam2.modeling.backbones.image_encoder.FpnNeck\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 256\n        normalize: true\n        scale: null\n        temperature: 10000\n      d_model: 256\n      backbone_channel_list: [896, 448, 224, 112]\n      fpn_top_down_levels: [2, 3]  # output level 0 and 1 directly use the backbone features\n      fpn_interp_model: nearest\n\n  memory_attention:\n    _target_: sam2.modeling.memory_attention.MemoryAttention\n    d_model: 256\n    pos_enc_at_input: true\n    layer:\n      _target_: sam2.modeling.memory_attention.MemoryAttentionLayer\n      activation: relu\n      dim_feedforward: 2048\n      dropout: 0.1\n      pos_enc_at_attn: false\n      self_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n      d_model: 256\n      pos_enc_at_cross_attn_keys: true\n      pos_enc_at_cross_attn_queries: false\n      cross_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        rope_k_repeat: True\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n        kv_in_dim: 64\n    num_layers: 4\n\n  memory_encoder:\n      _target_: sam2.modeling.memory_encoder.MemoryEncoder\n      out_dim: 64\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 64\n        normalize: true\n        scale: null\n        temperature: 10000\n      mask_downsampler:\n        _target_: sam2.modeling.memory_encoder.MaskDownSampler\n        kernel_size: 3\n        stride: 2\n        padding: 1\n      fuser:\n        _target_: sam2.modeling.memory_encoder.Fuser\n        layer:\n          _target_: sam2.modeling.memory_encoder.CXBlock\n          dim: 256\n          kernel_size: 7\n          padding: 3\n          layer_scale_init_value: 1e-6\n          use_dwconv: True  # depth-wise convs\n        num_layers: 2\n\n  num_maskmem: 7\n  image_size: 1024\n  # apply scaled sigmoid on mask logits for memory encoder, and directly feed input mask as output mask\n  sigmoid_scale_for_mem_enc: 20.0\n  sigmoid_bias_for_mem_enc: -10.0\n  use_mask_input_as_output_without_sam: true\n  # Memory\n  directly_add_no_mem_embed: true\n  # use high-resolution feature map in the SAM mask decoder\n  use_high_res_features_in_sam: true\n  # output 3 masks on the first click on initial conditioning frames\n  multimask_output_in_sam: true\n  # SAM heads\n  iou_prediction_use_sigmoid: True\n  # cross-attend to object pointers from other frames (based on SAM output tokens) in the encoder\n  use_obj_ptrs_in_encoder: true\n  add_tpos_enc_to_obj_ptrs: false\n  only_obj_ptrs_in_the_past_for_eval: true\n  # object occlusion prediction\n  pred_obj_scores: true\n  pred_obj_scores_mlp: true\n  fixed_no_obj_ptr: true\n  # multimask tracking settings\n  multimask_output_for_tracking: true\n  use_multimask_token_for_obj_ptr: true\n  multimask_min_pt_num: 0\n  multimask_max_pt_num: 1\n  use_mlp_for_obj_ptr_proj: true\n  # Compilation flag\n  compile_image_encoder: False\n"
  },
  {
    "path": "auto-seg/sam2_configs/sam2_hiera_l.yaml",
    "content": "# @package _global_\n\n# Model\nmodel:\n  _target_: sam2.modeling.sam2_base.SAM2Base\n  image_encoder:\n    _target_: sam2.modeling.backbones.image_encoder.ImageEncoder\n    scalp: 1\n    trunk:\n      _target_: sam2.modeling.backbones.hieradet.Hiera\n      embed_dim: 144\n      num_heads: 2\n      stages: [2, 6, 36, 4]\n      global_att_blocks: [23, 33, 43]\n      window_pos_embed_bkg_spatial_size: [7, 7]\n      window_spec: [8, 4, 16, 8]\n    neck:\n      _target_: sam2.modeling.backbones.image_encoder.FpnNeck\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 256\n        normalize: true\n        scale: null\n        temperature: 10000\n      d_model: 256\n      backbone_channel_list: [1152, 576, 288, 144]\n      fpn_top_down_levels: [2, 3]  # output level 0 and 1 directly use the backbone features\n      fpn_interp_model: nearest\n\n  memory_attention:\n    _target_: sam2.modeling.memory_attention.MemoryAttention\n    d_model: 256\n    pos_enc_at_input: true\n    layer:\n      _target_: sam2.modeling.memory_attention.MemoryAttentionLayer\n      activation: relu\n      dim_feedforward: 2048\n      dropout: 0.1\n      pos_enc_at_attn: false\n      self_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n      d_model: 256\n      pos_enc_at_cross_attn_keys: true\n      pos_enc_at_cross_attn_queries: false\n      cross_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        rope_k_repeat: True\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n        kv_in_dim: 64\n    num_layers: 4\n\n  memory_encoder:\n      _target_: sam2.modeling.memory_encoder.MemoryEncoder\n      out_dim: 64\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 64\n        normalize: true\n        scale: null\n        temperature: 10000\n      mask_downsampler:\n        _target_: sam2.modeling.memory_encoder.MaskDownSampler\n        kernel_size: 3\n        stride: 2\n        padding: 1\n      fuser:\n        _target_: sam2.modeling.memory_encoder.Fuser\n        layer:\n          _target_: sam2.modeling.memory_encoder.CXBlock\n          dim: 256\n          kernel_size: 7\n          padding: 3\n          layer_scale_init_value: 1e-6\n          use_dwconv: True  # depth-wise convs\n        num_layers: 2\n\n  num_maskmem: 7\n  image_size: 1024\n  # apply scaled sigmoid on mask logits for memory encoder, and directly feed input mask as output mask\n  sigmoid_scale_for_mem_enc: 20.0\n  sigmoid_bias_for_mem_enc: -10.0\n  use_mask_input_as_output_without_sam: true\n  # Memory\n  directly_add_no_mem_embed: true\n  # use high-resolution feature map in the SAM mask decoder\n  use_high_res_features_in_sam: true\n  # output 3 masks on the first click on initial conditioning frames\n  multimask_output_in_sam: true\n  # SAM heads\n  iou_prediction_use_sigmoid: True\n  # cross-attend to object pointers from other frames (based on SAM output tokens) in the encoder\n  use_obj_ptrs_in_encoder: true\n  add_tpos_enc_to_obj_ptrs: false\n  only_obj_ptrs_in_the_past_for_eval: true\n  # object occlusion prediction\n  pred_obj_scores: true\n  pred_obj_scores_mlp: true\n  fixed_no_obj_ptr: true\n  # multimask tracking settings\n  multimask_output_for_tracking: true\n  use_multimask_token_for_obj_ptr: true\n  multimask_min_pt_num: 0\n  multimask_max_pt_num: 1\n  use_mlp_for_obj_ptr_proj: true\n  # Compilation flag\n  compile_image_encoder: False\n"
  },
  {
    "path": "auto-seg/sam2_configs/sam2_hiera_s.yaml",
    "content": "# @package _global_\n\n# Model\nmodel:\n  _target_: sam2.modeling.sam2_base.SAM2Base\n  image_encoder:\n    _target_: sam2.modeling.backbones.image_encoder.ImageEncoder\n    scalp: 1\n    trunk:\n      _target_: sam2.modeling.backbones.hieradet.Hiera\n      embed_dim: 96\n      num_heads: 1\n      stages: [1, 2, 11, 2]\n      global_att_blocks: [7, 10, 13]\n      window_pos_embed_bkg_spatial_size: [7, 7]\n    neck:\n      _target_: sam2.modeling.backbones.image_encoder.FpnNeck\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 256\n        normalize: true\n        scale: null\n        temperature: 10000\n      d_model: 256\n      backbone_channel_list: [768, 384, 192, 96]\n      fpn_top_down_levels: [2, 3]  # output level 0 and 1 directly use the backbone features\n      fpn_interp_model: nearest\n\n  memory_attention:\n    _target_: sam2.modeling.memory_attention.MemoryAttention\n    d_model: 256\n    pos_enc_at_input: true\n    layer:\n      _target_: sam2.modeling.memory_attention.MemoryAttentionLayer\n      activation: relu\n      dim_feedforward: 2048\n      dropout: 0.1\n      pos_enc_at_attn: false\n      self_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n      d_model: 256\n      pos_enc_at_cross_attn_keys: true\n      pos_enc_at_cross_attn_queries: false\n      cross_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        rope_k_repeat: True\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n        kv_in_dim: 64\n    num_layers: 4\n\n  memory_encoder:\n      _target_: sam2.modeling.memory_encoder.MemoryEncoder\n      out_dim: 64\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 64\n        normalize: true\n        scale: null\n        temperature: 10000\n      mask_downsampler:\n        _target_: sam2.modeling.memory_encoder.MaskDownSampler\n        kernel_size: 3\n        stride: 2\n        padding: 1\n      fuser:\n        _target_: sam2.modeling.memory_encoder.Fuser\n        layer:\n          _target_: sam2.modeling.memory_encoder.CXBlock\n          dim: 256\n          kernel_size: 7\n          padding: 3\n          layer_scale_init_value: 1e-6\n          use_dwconv: True  # depth-wise convs\n        num_layers: 2\n\n  num_maskmem: 7\n  image_size: 1024\n  # apply scaled sigmoid on mask logits for memory encoder, and directly feed input mask as output mask\n  sigmoid_scale_for_mem_enc: 20.0\n  sigmoid_bias_for_mem_enc: -10.0\n  use_mask_input_as_output_without_sam: true\n  # Memory\n  directly_add_no_mem_embed: true\n  # use high-resolution feature map in the SAM mask decoder\n  use_high_res_features_in_sam: true\n  # output 3 masks on the first click on initial conditioning frames\n  multimask_output_in_sam: true\n  # SAM heads\n  iou_prediction_use_sigmoid: True\n  # cross-attend to object pointers from other frames (based on SAM output tokens) in the encoder\n  use_obj_ptrs_in_encoder: true\n  add_tpos_enc_to_obj_ptrs: false\n  only_obj_ptrs_in_the_past_for_eval: true\n  # object occlusion prediction\n  pred_obj_scores: true\n  pred_obj_scores_mlp: true\n  fixed_no_obj_ptr: true\n  # multimask tracking settings\n  multimask_output_for_tracking: true\n  use_multimask_token_for_obj_ptr: true\n  multimask_min_pt_num: 0\n  multimask_max_pt_num: 1\n  use_mlp_for_obj_ptr_proj: true\n  # Compilation flag\n  compile_image_encoder: False\n"
  },
  {
    "path": "auto-seg/sam2_configs/sam2_hiera_t.yaml",
    "content": "# @package _global_\n\n# Model\nmodel:\n  _target_: sam2.modeling.sam2_base.SAM2Base\n  image_encoder:\n    _target_: sam2.modeling.backbones.image_encoder.ImageEncoder\n    scalp: 1\n    trunk:\n      _target_: sam2.modeling.backbones.hieradet.Hiera\n      embed_dim: 96\n      num_heads: 1\n      stages: [1, 2, 7, 2]\n      global_att_blocks: [5, 7, 9]\n      window_pos_embed_bkg_spatial_size: [7, 7]\n    neck:\n      _target_: sam2.modeling.backbones.image_encoder.FpnNeck\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 256\n        normalize: true\n        scale: null\n        temperature: 10000\n      d_model: 256\n      backbone_channel_list: [768, 384, 192, 96]\n      fpn_top_down_levels: [2, 3]  # output level 0 and 1 directly use the backbone features\n      fpn_interp_model: nearest\n\n  memory_attention:\n    _target_: sam2.modeling.memory_attention.MemoryAttention\n    d_model: 256\n    pos_enc_at_input: true\n    layer:\n      _target_: sam2.modeling.memory_attention.MemoryAttentionLayer\n      activation: relu\n      dim_feedforward: 2048\n      dropout: 0.1\n      pos_enc_at_attn: false\n      self_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n      d_model: 256\n      pos_enc_at_cross_attn_keys: true\n      pos_enc_at_cross_attn_queries: false\n      cross_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        rope_k_repeat: True\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n        kv_in_dim: 64\n    num_layers: 4\n\n  memory_encoder:\n      _target_: sam2.modeling.memory_encoder.MemoryEncoder\n      out_dim: 64\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 64\n        normalize: true\n        scale: null\n        temperature: 10000\n      mask_downsampler:\n        _target_: sam2.modeling.memory_encoder.MaskDownSampler\n        kernel_size: 3\n        stride: 2\n        padding: 1\n      fuser:\n        _target_: sam2.modeling.memory_encoder.Fuser\n        layer:\n          _target_: sam2.modeling.memory_encoder.CXBlock\n          dim: 256\n          kernel_size: 7\n          padding: 3\n          layer_scale_init_value: 1e-6\n          use_dwconv: True  # depth-wise convs\n        num_layers: 2\n\n  num_maskmem: 7\n  image_size: 1024\n  # apply scaled sigmoid on mask logits for memory encoder, and directly feed input mask as output mask\n  # SAM decoder\n  sigmoid_scale_for_mem_enc: 20.0\n  sigmoid_bias_for_mem_enc: -10.0\n  use_mask_input_as_output_without_sam: true\n  # Memory\n  directly_add_no_mem_embed: true\n  # use high-resolution feature map in the SAM mask decoder\n  use_high_res_features_in_sam: true\n  # output 3 masks on the first click on initial conditioning frames\n  multimask_output_in_sam: true\n  # SAM heads\n  iou_prediction_use_sigmoid: True\n  # cross-attend to object pointers from other frames (based on SAM output tokens) in the encoder\n  use_obj_ptrs_in_encoder: true\n  add_tpos_enc_to_obj_ptrs: false\n  only_obj_ptrs_in_the_past_for_eval: true\n  # object occlusion prediction\n  pred_obj_scores: true\n  pred_obj_scores_mlp: true\n  fixed_no_obj_ptr: true\n  # multimask tracking settings\n  multimask_output_for_tracking: true\n  use_multimask_token_for_obj_ptr: true\n  multimask_min_pt_num: 0\n  multimask_max_pt_num: 1\n  use_mlp_for_obj_ptr_proj: true\n  # Compilation flag\n  # HieraT does not currently support compilation, should always be set to False\n  compile_image_encoder: False\n"
  },
  {
    "path": "auto-seg/sam2_hiera_l.yaml",
    "content": "# @package _global_\n# model\nmodel:\n  _target_: sam2.modeling.sam2_base.SAM2Base\n  image_encoder:\n    _target_: sam2.modeling.backbones.image_encoder.ImageEncoder\n    scalp: 1\n    trunk:\n      _target_: sam2.modeling.backbones.hieradet.Hiera\n      embed_dim: 144\n      num_heads: 2\n      stages: [2, 6, 36, 4]\n      global_att_blocks: [23, 33, 43]\n      window_pos_embed_bkg_spatial_size: [7, 7]\n      window_spec: [8, 4, 16, 8]\n    neck:\n      _target_: sam2.modeling.backbones.image_encoder.FpnNeck\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 256\n        normalize: true\n        scale: null\n        temperature: 10000\n      d_model: 256\n      backbone_channel_list: [1152, 576, 288, 144]\n      fpn_top_down_levels: [2, 3]  # output level 0 and 1 directly use the backbone features\n      fpn_interp_model: nearest\n\n  memory_attention:\n    _target_: sam2.modeling.memory_attention.MemoryAttention\n    d_model: 256\n    pos_enc_at_input: true\n    layer:\n      _target_: sam2.modeling.memory_attention.MemoryAttentionLayer\n      activation: relu\n      dim_feedforward: 2048\n      dropout: 0.1\n      pos_enc_at_attn: false\n      self_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n      d_model: 256\n      pos_enc_at_cross_attn_keys: true\n      pos_enc_at_cross_attn_queries: false\n      cross_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        rope_k_repeat: True\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n        kv_in_dim: 64\n    num_layers: 4\n\n  memory_encoder:\n      _target_: sam2.modeling.memory_encoder.MemoryEncoder\n      out_dim: 64\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 64\n        normalize: true\n        scale: null\n        temperature: 10000\n      mask_downsampler:\n        _target_: sam2.modeling.memory_encoder.MaskDownSampler\n        kernel_size: 3\n        stride: 2\n        padding: 1\n      fuser:\n        _target_: sam2.modeling.memory_encoder.Fuser\n        layer:\n          _target_: sam2.modeling.memory_encoder.CXBlock\n          dim: 256\n          kernel_size: 7\n          padding: 3\n          layer_scale_init_value: 1e-6\n          use_dwconv: True  # depth-wise convs\n        num_layers: 2\n\n  num_maskmem: 7\n  image_size: 1024\n  # apply scaled sigmoid on mask logits for memory encoder, and directly feed input mask as output mask\n  sigmoid_scale_for_mem_enc: 20.0\n  sigmoid_bias_for_mem_enc: -10.0\n  use_mask_input_as_output_without_sam: true\n  # Memory\n  directly_add_no_mem_embed: true\n  # use high-resolution feature map in the SAM mask decoder\n  use_high_res_features_in_sam: true\n  # output 3 masks on the first click on initial conditioning frames\n  multimask_output_in_sam: true\n  # SAM heads\n  iou_prediction_use_sigmoid: True\n  # cross-attend to object pointers from other frames (based on SAM output tokens) in the encoder\n  use_obj_ptrs_in_encoder: true\n  add_tpos_enc_to_obj_ptrs: false\n  only_obj_ptrs_in_the_past_for_eval: true\n  # object occlusion prediction\n  pred_obj_scores: true\n  pred_obj_scores_mlp: true\n  fixed_no_obj_ptr: true\n  # multimask tracking settings\n  multimask_output_for_tracking: true\n  use_multimask_token_for_obj_ptr: true\n  multimask_min_pt_num: 0\n  multimask_max_pt_num: 1\n  use_mlp_for_obj_ptr_proj: true\n  # Compilation flag\n  compile_image_encoder: False\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/.gitignore",
    "content": ".nfs*\n\n# compilation and distribution\n__pycache__\n_ext\n*.pyc\n*.pyd\n*.so\n*.dll\n*.egg-info/\nbuild/\ndist/\nwheels/\n\n# pytorch/python/numpy formats\n*.pth\n*.pkl\n*.npy\n*.ts\nmodel_ts*.txt\n\n# onnx models\n*.onnx\n\n# ipython/jupyter notebooks\n**/.ipynb_checkpoints/\n\n# Editor temporaries\n*.swn\n*.swo\n*.swp\n*~\n\n# editor settings\n.idea\n.vscode\n_darcs\n\n# demo \n**/node_modules\nyarn.lock\npackage-lock.json"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/README.md",
    "content": "# Segment-Anything-LangSplat\nThis is the modidied version of [SAM](https://github.com/facebookresearch/segment-anything) for [LangSplat](https://github.com/minghanqin/LangSplat). Please follow the original repository of [SAM](https://github.com/facebookresearch/segment-anything) to install."
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/scripts/amg.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport cv2  # type: ignore\n\nfrom segment_anything import SamAutomaticMaskGenerator, sam_model_registry\n\nimport argparse\nimport json\nimport os\nfrom typing import Any, Dict, List\n\nparser = argparse.ArgumentParser(\n    description=(\n        \"Runs automatic mask generation on an input image or directory of images, \"\n        \"and outputs masks as either PNGs or COCO-style RLEs. Requires open-cv, \"\n        \"as well as pycocotools if saving in RLE format.\"\n    )\n)\n\nparser.add_argument(\n    \"--input\",\n    type=str,\n    required=True,\n    help=\"Path to either a single input image or folder of images.\",\n)\n\nparser.add_argument(\n    \"--output\",\n    type=str,\n    required=True,\n    help=(\n        \"Path to the directory where masks will be output. Output will be either a folder \"\n        \"of PNGs per image or a single json with COCO-style masks.\"\n    ),\n)\n\nparser.add_argument(\n    \"--model-type\",\n    type=str,\n    required=True,\n    help=\"The type of model to load, in ['default', 'vit_h', 'vit_l', 'vit_b']\",\n)\n\nparser.add_argument(\n    \"--checkpoint\",\n    type=str,\n    required=True,\n    help=\"The path to the SAM checkpoint to use for mask generation.\",\n)\n\nparser.add_argument(\"--device\", type=str, default=\"cuda\", help=\"The device to run generation on.\")\n\nparser.add_argument(\n    \"--convert-to-rle\",\n    action=\"store_true\",\n    help=(\n        \"Save masks as COCO RLEs in a single json instead of as a folder of PNGs. \"\n        \"Requires pycocotools.\"\n    ),\n)\n\namg_settings = parser.add_argument_group(\"AMG Settings\")\n\namg_settings.add_argument(\n    \"--points-per-side\",\n    type=int,\n    default=None,\n    help=\"Generate masks by sampling a grid over the image with this many points to a side.\",\n)\n\namg_settings.add_argument(\n    \"--points-per-batch\",\n    type=int,\n    default=None,\n    help=\"How many input points to process simultaneously in one batch.\",\n)\n\namg_settings.add_argument(\n    \"--pred-iou-thresh\",\n    type=float,\n    default=None,\n    help=\"Exclude masks with a predicted score from the model that is lower than this threshold.\",\n)\n\namg_settings.add_argument(\n    \"--stability-score-thresh\",\n    type=float,\n    default=None,\n    help=\"Exclude masks with a stability score lower than this threshold.\",\n)\n\namg_settings.add_argument(\n    \"--stability-score-offset\",\n    type=float,\n    default=None,\n    help=\"Larger values perturb the mask more when measuring stability score.\",\n)\n\namg_settings.add_argument(\n    \"--box-nms-thresh\",\n    type=float,\n    default=None,\n    help=\"The overlap threshold for excluding a duplicate mask.\",\n)\n\namg_settings.add_argument(\n    \"--crop-n-layers\",\n    type=int,\n    default=None,\n    help=(\n        \"If >0, mask generation is run on smaller crops of the image to generate more masks. \"\n        \"The value sets how many different scales to crop at.\"\n    ),\n)\n\namg_settings.add_argument(\n    \"--crop-nms-thresh\",\n    type=float,\n    default=None,\n    help=\"The overlap threshold for excluding duplicate masks across different crops.\",\n)\n\namg_settings.add_argument(\n    \"--crop-overlap-ratio\",\n    type=int,\n    default=None,\n    help=\"Larger numbers mean image crops will overlap more.\",\n)\n\namg_settings.add_argument(\n    \"--crop-n-points-downscale-factor\",\n    type=int,\n    default=None,\n    help=\"The number of points-per-side in each layer of crop is reduced by this factor.\",\n)\n\namg_settings.add_argument(\n    \"--min-mask-region-area\",\n    type=int,\n    default=None,\n    help=(\n        \"Disconnected mask regions or holes with area smaller than this value \"\n        \"in pixels are removed by postprocessing.\"\n    ),\n)\n\n\ndef write_masks_to_folder(masks: List[Dict[str, Any]], path: str) -> None:\n    header = \"id,area,bbox_x0,bbox_y0,bbox_w,bbox_h,point_input_x,point_input_y,predicted_iou,stability_score,crop_box_x0,crop_box_y0,crop_box_w,crop_box_h\"  # noqa\n    metadata = [header]\n    for i, mask_data in enumerate(masks):\n        mask = mask_data[\"segmentation\"]\n        filename = f\"{i}.png\"\n        cv2.imwrite(os.path.join(path, filename), mask * 255)\n        mask_metadata = [\n            str(i),\n            str(mask_data[\"area\"]),\n            *[str(x) for x in mask_data[\"bbox\"]],\n            *[str(x) for x in mask_data[\"point_coords\"][0]],\n            str(mask_data[\"predicted_iou\"]),\n            str(mask_data[\"stability_score\"]),\n            *[str(x) for x in mask_data[\"crop_box\"]],\n        ]\n        row = \",\".join(mask_metadata)\n        metadata.append(row)\n    metadata_path = os.path.join(path, \"metadata.csv\")\n    with open(metadata_path, \"w\") as f:\n        f.write(\"\\n\".join(metadata))\n\n    return\n\n\ndef get_amg_kwargs(args):\n    amg_kwargs = {\n        \"points_per_side\": args.points_per_side,\n        \"points_per_batch\": args.points_per_batch,\n        \"pred_iou_thresh\": args.pred_iou_thresh,\n        \"stability_score_thresh\": args.stability_score_thresh,\n        \"stability_score_offset\": args.stability_score_offset,\n        \"box_nms_thresh\": args.box_nms_thresh,\n        \"crop_n_layers\": args.crop_n_layers,\n        \"crop_nms_thresh\": args.crop_nms_thresh,\n        \"crop_overlap_ratio\": args.crop_overlap_ratio,\n        \"crop_n_points_downscale_factor\": args.crop_n_points_downscale_factor,\n        \"min_mask_region_area\": args.min_mask_region_area,\n    }\n    amg_kwargs = {k: v for k, v in amg_kwargs.items() if v is not None}\n    return amg_kwargs\n\n\ndef main(args: argparse.Namespace) -> None:\n    print(\"Loading model...\")\n    sam = sam_model_registry[args.model_type](checkpoint=args.checkpoint)\n    _ = sam.to(device=args.device)\n    output_mode = \"coco_rle\" if args.convert_to_rle else \"binary_mask\"\n    amg_kwargs = get_amg_kwargs(args)\n    generator = SamAutomaticMaskGenerator(sam, output_mode=output_mode, **amg_kwargs)\n\n    if not os.path.isdir(args.input):\n        targets = [args.input]\n    else:\n        targets = [\n            f for f in os.listdir(args.input) if not os.path.isdir(os.path.join(args.input, f))\n        ]\n        targets = [os.path.join(args.input, f) for f in targets]\n\n    os.makedirs(args.output, exist_ok=True)\n\n    for t in targets:\n        print(f\"Processing '{t}'...\")\n        image = cv2.imread(t)\n        if image is None:\n            print(f\"Could not load '{t}' as an image, skipping...\")\n            continue\n        image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)\n\n        masks = generator.generate(image)\n\n        base = os.path.basename(t)\n        base = os.path.splitext(base)[0]\n        save_base = os.path.join(args.output, base)\n        if output_mode == \"binary_mask\":\n            os.makedirs(save_base, exist_ok=False)\n            write_masks_to_folder(masks, save_base)\n        else:\n            save_file = save_base + \".json\"\n            with open(save_file, \"w\") as f:\n                json.dump(masks, f)\n    print(\"Done!\")\n\n\nif __name__ == \"__main__\":\n    args = parser.parse_args()\n    main(args)\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/scripts/export_onnx_model.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch\n\nfrom segment_anything import sam_model_registry\nfrom segment_anything.utils.onnx import SamOnnxModel\n\nimport argparse\nimport warnings\n\ntry:\n    import onnxruntime  # type: ignore\n\n    onnxruntime_exists = True\nexcept ImportError:\n    onnxruntime_exists = False\n\nparser = argparse.ArgumentParser(\n    description=\"Export the SAM prompt encoder and mask decoder to an ONNX model.\"\n)\n\nparser.add_argument(\n    \"--checkpoint\", type=str, required=True, help=\"The path to the SAM model checkpoint.\"\n)\n\nparser.add_argument(\n    \"--output\", type=str, required=True, help=\"The filename to save the ONNX model to.\"\n)\n\nparser.add_argument(\n    \"--model-type\",\n    type=str,\n    required=True,\n    help=\"In ['default', 'vit_h', 'vit_l', 'vit_b']. Which type of SAM model to export.\",\n)\n\nparser.add_argument(\n    \"--return-single-mask\",\n    action=\"store_true\",\n    help=(\n        \"If true, the exported ONNX model will only return the best mask, \"\n        \"instead of returning multiple masks. For high resolution images \"\n        \"this can improve runtime when upscaling masks is expensive.\"\n    ),\n)\n\nparser.add_argument(\n    \"--opset\",\n    type=int,\n    default=17,\n    help=\"The ONNX opset version to use. Must be >=11\",\n)\n\nparser.add_argument(\n    \"--quantize-out\",\n    type=str,\n    default=None,\n    help=(\n        \"If set, will quantize the model and save it with this name. \"\n        \"Quantization is performed with quantize_dynamic from onnxruntime.quantization.quantize.\"\n    ),\n)\n\nparser.add_argument(\n    \"--gelu-approximate\",\n    action=\"store_true\",\n    help=(\n        \"Replace GELU operations with approximations using tanh. Useful \"\n        \"for some runtimes that have slow or unimplemented erf ops, used in GELU.\"\n    ),\n)\n\nparser.add_argument(\n    \"--use-stability-score\",\n    action=\"store_true\",\n    help=(\n        \"Replaces the model's predicted mask quality score with the stability \"\n        \"score calculated on the low resolution masks using an offset of 1.0. \"\n    ),\n)\n\nparser.add_argument(\n    \"--return-extra-metrics\",\n    action=\"store_true\",\n    help=(\n        \"The model will return five results: (masks, scores, stability_scores, \"\n        \"areas, low_res_logits) instead of the usual three. This can be \"\n        \"significantly slower for high resolution outputs.\"\n    ),\n)\n\n\ndef run_export(\n    model_type: str,\n    checkpoint: str,\n    output: str,\n    opset: int,\n    return_single_mask: bool,\n    gelu_approximate: bool = False,\n    use_stability_score: bool = False,\n    return_extra_metrics=False,\n):\n    print(\"Loading model...\")\n    sam = sam_model_registry[model_type](checkpoint=checkpoint)\n\n    onnx_model = SamOnnxModel(\n        model=sam,\n        return_single_mask=return_single_mask,\n        use_stability_score=use_stability_score,\n        return_extra_metrics=return_extra_metrics,\n    )\n\n    if gelu_approximate:\n        for n, m in onnx_model.named_modules():\n            if isinstance(m, torch.nn.GELU):\n                m.approximate = \"tanh\"\n\n    dynamic_axes = {\n        \"point_coords\": {1: \"num_points\"},\n        \"point_labels\": {1: \"num_points\"},\n    }\n\n    embed_dim = sam.prompt_encoder.embed_dim\n    embed_size = sam.prompt_encoder.image_embedding_size\n    mask_input_size = [4 * x for x in embed_size]\n    dummy_inputs = {\n        \"image_embeddings\": torch.randn(1, embed_dim, *embed_size, dtype=torch.float),\n        \"point_coords\": torch.randint(low=0, high=1024, size=(1, 5, 2), dtype=torch.float),\n        \"point_labels\": torch.randint(low=0, high=4, size=(1, 5), dtype=torch.float),\n        \"mask_input\": torch.randn(1, 1, *mask_input_size, dtype=torch.float),\n        \"has_mask_input\": torch.tensor([1], dtype=torch.float),\n        \"orig_im_size\": torch.tensor([1500, 2250], dtype=torch.float),\n    }\n\n    _ = onnx_model(**dummy_inputs)\n\n    output_names = [\"masks\", \"iou_predictions\", \"low_res_masks\"]\n\n    with warnings.catch_warnings():\n        warnings.filterwarnings(\"ignore\", category=torch.jit.TracerWarning)\n        warnings.filterwarnings(\"ignore\", category=UserWarning)\n        with open(output, \"wb\") as f:\n            print(f\"Exporting onnx model to {output}...\")\n            torch.onnx.export(\n                onnx_model,\n                tuple(dummy_inputs.values()),\n                f,\n                export_params=True,\n                verbose=False,\n                opset_version=opset,\n                do_constant_folding=True,\n                input_names=list(dummy_inputs.keys()),\n                output_names=output_names,\n                dynamic_axes=dynamic_axes,\n            )\n\n    if onnxruntime_exists:\n        ort_inputs = {k: to_numpy(v) for k, v in dummy_inputs.items()}\n        # set cpu provider default\n        providers = [\"CPUExecutionProvider\"]\n        ort_session = onnxruntime.InferenceSession(output, providers=providers)\n        _ = ort_session.run(None, ort_inputs)\n        print(\"Model has successfully been run with ONNXRuntime.\")\n\n\ndef to_numpy(tensor):\n    return tensor.cpu().numpy()\n\n\nif __name__ == \"__main__\":\n    args = parser.parse_args()\n    run_export(\n        model_type=args.model_type,\n        checkpoint=args.checkpoint,\n        output=args.output,\n        opset=args.opset,\n        return_single_mask=args.return_single_mask,\n        gelu_approximate=args.gelu_approximate,\n        use_stability_score=args.use_stability_score,\n        return_extra_metrics=args.return_extra_metrics,\n    )\n\n    if args.quantize_out is not None:\n        assert onnxruntime_exists, \"onnxruntime is required to quantize the model.\"\n        from onnxruntime.quantization import QuantType  # type: ignore\n        from onnxruntime.quantization.quantize import quantize_dynamic  # type: ignore\n\n        print(f\"Quantizing model and writing to {args.quantize_out}...\")\n        quantize_dynamic(\n            model_input=args.output,\n            model_output=args.quantize_out,\n            optimize_model=True,\n            per_channel=False,\n            reduce_range=False,\n            weight_type=QuantType.QUInt8,\n        )\n        print(\"Done!\")\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/segment_anything/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom .build_sam import (\n    build_sam,\n    build_sam_vit_h,\n    build_sam_vit_l,\n    build_sam_vit_b,\n    sam_model_registry,\n)\nfrom .predictor import SamPredictor\nfrom .automatic_mask_generator import SamAutomaticMaskGenerator\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/segment_anything/automatic_mask_generator.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport numpy as np\nimport torch\nfrom torchvision.ops.boxes import batched_nms, box_area  # type: ignore\n\nfrom typing import Any, Dict, List, Optional, Tuple\n\nfrom .modeling import Sam\nfrom .predictor import SamPredictor\nfrom .utils.amg import (\n    MaskData,\n    area_from_rle,\n    batch_iterator,\n    batched_mask_to_box,\n    box_xyxy_to_xywh,\n    build_all_layer_point_grids,\n    calculate_stability_score,\n    coco_encode_rle,\n    generate_crop_boxes,\n    is_box_near_crop_edge,\n    mask_to_rle_pytorch,\n    remove_small_regions,\n    rle_to_mask,\n    uncrop_boxes_xyxy,\n    uncrop_masks,\n    uncrop_points,\n)\n\n\nclass SamAutomaticMaskGenerator:\n    def __init__(\n        self,\n        model: Sam,\n        points_per_side: Optional[int] = 32,\n        points_per_batch: int = 64,\n        pred_iou_thresh: float = 0.88,\n        stability_score_thresh: float = 0.95,\n        stability_score_offset: float = 1.0,\n        box_nms_thresh: float = 0.7,\n        crop_n_layers: int = 0,\n        crop_nms_thresh: float = 0.7,\n        crop_overlap_ratio: float = 512 / 1500,\n        crop_n_points_downscale_factor: int = 1,\n        point_grids: Optional[List[np.ndarray]] = None,\n        min_mask_region_area: int = 0,\n        output_mode: str = \"binary_mask\",\n    ) -> None:\n        \"\"\"\n        Using a SAM model, generates masks for the entire image.\n        Generates a grid of point prompts over the image, then filters\n        low quality and duplicate masks. The default settings are chosen\n        for SAM with a ViT-H backbone.\n\n        Arguments:\n          model (Sam): The SAM model to use for mask prediction.\n          points_per_side (int or None): The number of points to be sampled\n            along one side of the image. The total number of points is\n            points_per_side**2. If None, 'point_grids' must provide explicit\n            point sampling.\n          points_per_batch (int): Sets the number of points run simultaneously\n            by the model. Higher numbers may be faster but use more GPU memory.\n          pred_iou_thresh (float): A filtering threshold in [0,1], using the\n            model's predicted mask quality.\n          stability_score_thresh (float): A filtering threshold in [0,1], using\n            the stability of the mask under changes to the cutoff used to binarize\n            the model's mask predictions.\n          stability_score_offset (float): The amount to shift the cutoff when\n            calculated the stability score.\n          box_nms_thresh (float): The box IoU cutoff used by non-maximal\n            suppression to filter duplicate masks.\n          crop_n_layers (int): If >0, mask prediction will be run again on\n            crops of the image. Sets the number of layers to run, where each\n            layer has 2**i_layer number of image crops.\n          crop_nms_thresh (float): The box IoU cutoff used by non-maximal\n            suppression to filter duplicate masks between different crops.\n          crop_overlap_ratio (float): Sets the degree to which crops overlap.\n            In the first crop layer, crops will overlap by this fraction of\n            the image length. Later layers with more crops scale down this overlap.\n          crop_n_points_downscale_factor (int): The number of points-per-side\n            sampled in layer n is scaled down by crop_n_points_downscale_factor**n.\n          point_grids (list(np.ndarray) or None): A list over explicit grids\n            of points used for sampling, normalized to [0,1]. The nth grid in the\n            list is used in the nth crop layer. Exclusive with points_per_side.\n          min_mask_region_area (int): If >0, postprocessing will be applied\n            to remove disconnected regions and holes in masks with area smaller\n            than min_mask_region_area. Requires opencv.\n          output_mode (str): The form masks are returned in. Can be 'binary_mask',\n            'uncompressed_rle', or 'coco_rle'. 'coco_rle' requires pycocotools.\n            For large resolutions, 'binary_mask' may consume large amounts of\n            memory.\n        \"\"\"\n\n        assert (points_per_side is None) != (\n            point_grids is None\n        ), \"Exactly one of points_per_side or point_grid must be provided.\"\n        if points_per_side is not None:\n            self.point_grids = build_all_layer_point_grids(\n                points_per_side,\n                crop_n_layers,\n                crop_n_points_downscale_factor,\n            )\n        elif point_grids is not None:\n            self.point_grids = point_grids\n        else:\n            raise ValueError(\"Can't have both points_per_side and point_grid be None.\")\n\n        assert output_mode in [\n            \"binary_mask\",\n            \"uncompressed_rle\",\n            \"coco_rle\",\n        ], f\"Unknown output_mode {output_mode}.\"\n        if output_mode == \"coco_rle\":\n            from pycocotools import mask as mask_utils  # type: ignore # noqa: F401\n\n        # if min_mask_region_area > 0:\n        #     import cv2  # type: ignore # noqa: F401\n\n        self.predictor = SamPredictor(model)\n        self.points_per_batch = points_per_batch\n        self.pred_iou_thresh = pred_iou_thresh\n        self.stability_score_thresh = stability_score_thresh\n        self.stability_score_offset = stability_score_offset\n        self.box_nms_thresh = box_nms_thresh\n        self.crop_n_layers = crop_n_layers\n        self.crop_nms_thresh = crop_nms_thresh\n        self.crop_overlap_ratio = crop_overlap_ratio\n        self.crop_n_points_downscale_factor = crop_n_points_downscale_factor\n        self.min_mask_region_area = min_mask_region_area\n        self.output_mode = output_mode\n\n    @torch.no_grad()\n    def generate(self, image: np.ndarray) -> List[Dict[str, Any]]:\n        \"\"\"\n        Generates masks for the given image.\n\n        Arguments:\n          image (np.ndarray): The image to generate masks for, in HWC uint8 format.\n\n        Returns:\n           list(dict(str, any)): A list over records for masks. Each record is\n             a dict containing the following keys:\n               segmentation (dict(str, any) or np.ndarray): The mask. If\n                 output_mode='binary_mask', is an array of shape HW. Otherwise,\n                 is a dictionary containing the RLE.\n               bbox (list(float)): The box around the mask, in XYWH format.\n               area (int): The area in pixels of the mask.\n               predicted_iou (float): The model's own prediction of the mask's\n                 quality. This is filtered by the pred_iou_thresh parameter.\n               point_coords (list(list(float))): The point coordinates input\n                 to the model to generate this mask.\n               stability_score (float): A measure of the mask's quality. This\n                 is filtered on using the stability_score_thresh parameter.\n               crop_box (list(float)): The crop of the image used to generate\n                 the mask, given in XYWH format.\n        \"\"\"\n\n        # Generate masks\n        mask_data, mask_data_s, mask_data_m, mask_data_l = self._generate_masks(image)\n\n        curr_anns = self.generate_curr_anns(mask_data)\n        curr_anns_s = self.generate_curr_anns(mask_data_s)\n        curr_anns_m = self.generate_curr_anns(mask_data_m)\n        curr_anns_l = self.generate_curr_anns(mask_data_l)\n        return curr_anns, curr_anns_s, curr_anns_m, curr_anns_l\n\n    def generate_curr_anns(\n            self,\n            mask_data,\n\n    ) -> List[Dict[str, Any]]:\n\n        # Filter small disconnected regions and holes in masks\n        if self.min_mask_region_area > 0:\n            mask_data = self.postprocess_small_regions(\n                mask_data,\n                self.min_mask_region_area,\n                max(self.box_nms_thresh, self.crop_nms_thresh),\n            )\n\n        # Encode masks\n        if self.output_mode == \"coco_rle\":\n            mask_data[\"segmentations\"] = [coco_encode_rle(rle) for rle in mask_data[\"rles\"]]\n        elif self.output_mode == \"binary_mask\":\n            mask_data[\"segmentations\"] = [rle_to_mask(rle) for rle in mask_data[\"rles\"]]\n        else:\n            mask_data[\"segmentations\"] = mask_data[\"rles\"]\n\n        # Write mask records\n        curr_anns = []\n        for idx in range(len(mask_data[\"segmentations\"])):\n            ann = {\n                \"segmentation\": mask_data[\"segmentations\"][idx],\n                \"area\": area_from_rle(mask_data[\"rles\"][idx]),\n                \"bbox\": box_xyxy_to_xywh(mask_data[\"boxes\"][idx]).tolist(),\n                \"predicted_iou\": mask_data[\"iou_preds\"][idx].item(),\n                \"point_coords\": [mask_data[\"points\"][idx].tolist()],\n                \"stability_score\": mask_data[\"stability_score\"][idx].item(),\n                \"crop_box\": box_xyxy_to_xywh(mask_data[\"crop_boxes\"][idx]).tolist(),\n            }\n            curr_anns.append(ann)\n\n        return curr_anns\n\n    def _generate_masks(self, image: np.ndarray) -> MaskData:\n        orig_size = image.shape[:2]\n        crop_boxes, layer_idxs = generate_crop_boxes(\n            orig_size, self.crop_n_layers, self.crop_overlap_ratio\n        )\n\n        # Iterate over image crops\n        data = MaskData()\n        data_s, data_m, data_l = MaskData(), MaskData(), MaskData()\n        for crop_box, layer_idx in zip(crop_boxes, layer_idxs):\n            crop_data, crop_data_s, crop_data_m, crop_data_l = self._process_crop(image, crop_box, layer_idx, orig_size)\n            data.cat(crop_data)\n            data_s.cat(crop_data_s)\n            data_m.cat(crop_data_m)\n            data_l.cat(crop_data_l)\n        data = self._generate_masks_data(data, crop_boxes)\n        data_s = self._generate_masks_data(data_s, crop_boxes)\n        data_m = self._generate_masks_data(data_m, crop_boxes)\n        data_l = self._generate_masks_data(data_l, crop_boxes)\n        return data, data_s, data_m, data_l\n\n    def _generate_masks_data(\n            self,\n            data,\n            crop_boxes,\n\n    ) -> MaskData:\n\n        # Remove duplicate masks between crops\n        if len(crop_boxes) > 1:\n            # Prefer masks from smaller crops\n            scores = 1 / box_area(data[\"crop_boxes\"])\n            scores = scores.to(data[\"boxes\"].device)\n            keep_by_nms = batched_nms(\n                data[\"boxes\"].float(),\n                scores,\n                torch.zeros_like(data[\"boxes\"][:, 0]),  # categories\n                iou_threshold=self.crop_nms_thresh,\n            )\n            data.filter(keep_by_nms)\n\n        data.to_numpy()\n        return data\n\n    def _process_crop(\n        self,\n        image: np.ndarray,\n        crop_box: List[int],\n        crop_layer_idx: int,\n        orig_size: Tuple[int, ...],\n    ) -> MaskData:\n        # Crop the image and calculate embeddings\n        x0, y0, x1, y1 = crop_box\n        cropped_im = image[y0:y1, x0:x1, :]\n        cropped_im_size = cropped_im.shape[:2]\n        self.predictor.set_image(cropped_im)\n\n        # Get points for this crop\n        points_scale = np.array(cropped_im_size)[None, ::-1]\n        points_for_image = self.point_grids[crop_layer_idx] * points_scale\n\n        # Generate masks for this crop in batches\n        data = MaskData()\n        data_s, data_m, data_l = MaskData(), MaskData(), MaskData()\n        for (points,) in batch_iterator(self.points_per_batch, points_for_image):\n            batch_data, batch_data_s, batch_data_m, batch_data_l = self._process_batch(points, cropped_im_size, crop_box, orig_size)\n            data.cat(batch_data)\n            data_s.cat(batch_data_s)\n            data_m.cat(batch_data_m)\n            data_l.cat(batch_data_l)\n            del batch_data, batch_data_s, batch_data_m, batch_data_l\n        self.predictor.reset_image()\n        data = self._process_crop_data(data, crop_box)\n        data_s = self._process_crop_data(data_s, crop_box)\n        data_m = self._process_crop_data(data_m, crop_box)\n        data_l = self._process_crop_data(data_l, crop_box)\n        return data, data_s, data_m, data_l\n\n    def _process_crop_data(\n            self,\n            data,\n            crop_box: List[int],\n    ) -> MaskData:\n        # Remove duplicates within this crop.\n        keep_by_nms = batched_nms(\n            data[\"boxes\"].float(),\n            data[\"iou_preds\"],\n            torch.zeros_like(data[\"boxes\"][:, 0]),  # categories\n            iou_threshold=self.box_nms_thresh,\n        )\n        data.filter(keep_by_nms)\n\n        # Return to the original image frame\n        data[\"boxes\"] = uncrop_boxes_xyxy(data[\"boxes\"], crop_box)\n        data[\"points\"] = uncrop_points(data[\"points\"], crop_box)\n        data[\"crop_boxes\"] = torch.tensor([crop_box for _ in range(len(data[\"rles\"]))])\n\n        return data\n\n    def _process_batch(\n        self,\n        points: np.ndarray,\n        im_size: Tuple[int, ...],\n        crop_box: List[int],\n        orig_size: Tuple[int, ...],\n    ) -> MaskData:\n        orig_h, orig_w = orig_size\n\n        # Run model on this batch\n        transformed_points = self.predictor.transform.apply_coords(points, im_size)\n        in_points = torch.as_tensor(transformed_points, device=self.predictor.device)\n        in_labels = torch.ones(in_points.shape[0], dtype=torch.int, device=in_points.device)\n        masks, iou_preds, _ = self.predictor.predict_torch(\n            in_points[:, None, :],\n            in_labels[:, None],\n            multimask_output=True,\n            return_logits=True,\n        )\n        # print('..............................................')\n        # print(masks.shape)torch.Size([64, 3, 738, 994])\n        # print(masks.flatten(0, 1).shape)torch.Size([192, 738, 994])\n        # print(masks[:,0,:,:].shape)torch.Size([64, 738, 994]\n        # print(points.shape)(64, 2)\n        # print(torch.as_tensor(points.repeat(masks.shape[1], axis=0)).shape)torch.Size([192, 2])\n        # print(iou_preds.shape)torch.Size([64, 3])\n        # Serialize predictions and store in MaskData\n        # mask type: s m l\n        data_s = MaskData(\n            masks=masks[:,0,:,:],\n            iou_preds=iou_preds[:,0],\n            points=torch.as_tensor(points),\n        )\n        data_m = MaskData(\n            masks=masks[:,1,:,:],\n            iou_preds=iou_preds[:,1],\n            points=torch.as_tensor(points),\n        )\n        data_l = MaskData(\n            masks=masks[:,2,:,:],\n            iou_preds=iou_preds[:,2],\n            points=torch.as_tensor(points),\n        )\n        data = MaskData(\n            masks=masks.flatten(0, 1),\n            iou_preds=iou_preds.flatten(0, 1),\n            points=torch.as_tensor(points.repeat(masks.shape[1], axis=0)),\n        )\n        del masks\n\n        data = self._process_batch_data(data, crop_box, orig_w, orig_h)\n        data_s = self._process_batch_data(data_s, crop_box, orig_w, orig_h)\n        data_m = self._process_batch_data(data_m, crop_box, orig_w, orig_h)\n        data_l = self._process_batch_data(data_l, crop_box, orig_w, orig_h)\n        return data, data_s, data_m, data_l\n    \n    def _process_batch_data(\n            self,\n            data,\n            crop_box,\n            orig_w,\n            orig_h,\n\n    ):\n        # Filter by predicted IoU\n        if self.pred_iou_thresh > 0.0:\n            keep_mask = data[\"iou_preds\"] > self.pred_iou_thresh\n            data.filter(keep_mask)\n\n        # Calculate stability score\n        data[\"stability_score\"] = calculate_stability_score(\n            data[\"masks\"], self.predictor.model.mask_threshold, self.stability_score_offset\n        )\n        if self.stability_score_thresh > 0.0:\n            keep_mask = data[\"stability_score\"] >= self.stability_score_thresh\n            data.filter(keep_mask)\n\n        # Threshold masks and calculate boxes\n        data[\"masks\"] = data[\"masks\"] > self.predictor.model.mask_threshold\n        data[\"boxes\"] = batched_mask_to_box(data[\"masks\"])\n\n        # Filter boxes that touch crop boundaries\n        keep_mask = ~is_box_near_crop_edge(data[\"boxes\"], crop_box, [0, 0, orig_w, orig_h])\n        if not torch.all(keep_mask):\n            data.filter(keep_mask)\n\n        # Compress to RLE\n        data[\"masks\"] = uncrop_masks(data[\"masks\"], crop_box, orig_h, orig_w)\n        data[\"rles\"] = mask_to_rle_pytorch(data[\"masks\"])\n        del data[\"masks\"]\n\n        return data\n\n    @staticmethod\n    def postprocess_small_regions(\n        mask_data: MaskData, min_area: int, nms_thresh: float\n    ) -> MaskData:\n        \"\"\"\n        Removes small disconnected regions and holes in masks, then reruns\n        box NMS to remove any new duplicates.\n\n        Edits mask_data in place.\n\n        Requires open-cv as a dependency.\n        \"\"\"\n        if len(mask_data[\"rles\"]) == 0:\n            return mask_data\n\n        # Filter small disconnected regions and holes\n        new_masks = []\n        scores = []\n        for rle in mask_data[\"rles\"]:\n            mask = rle_to_mask(rle)\n\n            mask, changed = remove_small_regions(mask, min_area, mode=\"holes\")\n            unchanged = not changed\n            mask, changed = remove_small_regions(mask, min_area, mode=\"islands\")\n            unchanged = unchanged and not changed\n\n            new_masks.append(torch.as_tensor(mask).unsqueeze(0))\n            # Give score=0 to changed masks and score=1 to unchanged masks\n            # so NMS will prefer ones that didn't need postprocessing\n            scores.append(float(unchanged))\n\n        # Recalculate boxes and remove any new duplicates\n        masks = torch.cat(new_masks, dim=0)\n        boxes = batched_mask_to_box(masks)\n        keep_by_nms = batched_nms(\n            boxes.float(),\n            torch.as_tensor(scores),\n            torch.zeros_like(boxes[:, 0]),  # categories\n            iou_threshold=nms_thresh,\n        )\n\n        # Only recalculate RLEs for masks that have changed\n        for i_mask in keep_by_nms:\n            if scores[i_mask] == 0.0:\n                mask_torch = masks[i_mask].unsqueeze(0)\n                mask_data[\"rles\"][i_mask] = mask_to_rle_pytorch(mask_torch)[0]\n                mask_data[\"boxes\"][i_mask] = boxes[i_mask]  # update res directly\n        mask_data.filter(keep_by_nms)\n\n        return mask_data\n\n    @torch.no_grad()\n    def generate_l(self, image: np.ndarray) -> List[Dict[str, Any]]:\n        \"\"\"\n        Generates only large masks for the given image, skipping the generation of small and medium masks.\n\n        Arguments:\n          image (np.ndarray): The image to generate masks for, in HWC uint8 format.\n\n        Returns:\n           list(dict(str, any)): A list of records for large masks only.\n        \"\"\"\n        # Generate only large masks\n        mask_data_l = self._generate_masks_l(image)\n        curr_anns_l = self.generate_curr_anns(mask_data_l)\n        return curr_anns_l\n\n    def _generate_masks_l(self, image: np.ndarray) -> MaskData:\n        \"\"\"\n        Internal method that generates only large masks for the given image.\n        Skips the generation of small and medium masks for better performance.\n        \n        Arguments:\n          image (np.ndarray): The image to generate masks for.\n          \n        Returns:\n          MaskData: The mask data for large masks only.\n        \"\"\"\n        orig_size = image.shape[:2]\n        crop_boxes, layer_idxs = generate_crop_boxes(\n            orig_size, self.crop_n_layers, self.crop_overlap_ratio\n        )\n\n        # Iterate over image crops\n        data_l = MaskData()\n        for crop_box, layer_idx in zip(crop_boxes, layer_idxs):\n            crop_data_l = self._process_crop_l(image, crop_box, layer_idx, orig_size)\n            data_l.cat(crop_data_l)\n        \n        data_l = self._generate_masks_data(data_l, crop_boxes)\n        return data_l\n\n    def _process_crop_l(\n        self,\n        image: np.ndarray,\n        crop_box: List[int],\n        crop_layer_idx: int,\n        orig_size: Tuple[int, ...],\n    ) -> MaskData:\n        # Crop the image and calculate embeddings\n        x0, y0, x1, y1 = crop_box\n        cropped_im = image[y0:y1, x0:x1, :]\n        cropped_im_size = cropped_im.shape[:2]\n        self.predictor.set_image(cropped_im)\n\n        # Get points for this crop\n        points_scale = np.array(cropped_im_size)[None, ::-1]\n        points_for_image = self.point_grids[crop_layer_idx] * points_scale\n\n        # Generate only large masks for this crop in batches\n        data_l = MaskData()\n        for (points,) in batch_iterator(self.points_per_batch, points_for_image):\n            batch_data_l = self._process_batch_l(points, cropped_im_size, crop_box, orig_size)\n            data_l.cat(batch_data_l)\n            del batch_data_l\n        self.predictor.reset_image()\n        \n        data_l = self._process_crop_data(data_l, crop_box)\n        return data_l\n\n    def _process_batch_l(\n        self,\n        points: np.ndarray,\n        im_size: Tuple[int, ...],\n        crop_box: List[int],\n        orig_size: Tuple[int, ...],\n    ) -> MaskData:\n        orig_h, orig_w = orig_size\n\n        # Run model on this batch\n        transformed_points = self.predictor.transform.apply_coords(points, im_size)\n        in_points = torch.as_tensor(transformed_points, device=self.predictor.device)\n        in_labels = torch.ones(in_points.shape[0], dtype=torch.int, device=in_points.device)\n        masks, iou_preds, _ = self.predictor.predict_torch(\n            in_points[:, None, :],\n            in_labels[:, None],\n            multimask_output=True,\n            return_logits=True,\n        )\n\n        # Only process the large masks (index 2)\n        data_l = MaskData(\n            masks=masks[:,2,:,:],  # Only take the large mask\n            iou_preds=iou_preds[:,2],  # Only take the large mask IoU\n            points=torch.as_tensor(points),\n        )\n        del masks\n\n        # Filter by predicted IoU and stability score\n        if self.pred_iou_thresh > 0.0:\n            keep_mask = data_l[\"iou_preds\"] > self.pred_iou_thresh\n            data_l.filter(keep_mask)\n\n        # Calculate stability score\n        data_l[\"stability_score\"] = calculate_stability_score(\n            data_l[\"masks\"], self.predictor.model.mask_threshold, self.stability_score_offset\n        )\n        if self.stability_score_thresh > 0.0:\n            keep_mask = data_l[\"stability_score\"] >= self.stability_score_thresh\n            data_l.filter(keep_mask)\n\n        # Threshold masks and calculate boxes\n        data_l[\"masks\"] = data_l[\"masks\"] > self.predictor.model.mask_threshold\n        data_l[\"boxes\"] = batched_mask_to_box(data_l[\"masks\"])\n\n        # Filter boxes that touch crop boundaries\n        keep_mask = ~is_box_near_crop_edge(data_l[\"boxes\"], crop_box, [0, 0, orig_w, orig_h])\n        if not torch.all(keep_mask):\n            data_l.filter(keep_mask)\n\n        # Compress to RLE\n        data_l[\"masks\"] = uncrop_masks(data_l[\"masks\"], crop_box, orig_h, orig_w)\n        data_l[\"rles\"] = mask_to_rle_pytorch(data_l[\"masks\"])\n        del data_l[\"masks\"]\n\n        return data_l\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/segment_anything/build_sam.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch\n\nfrom functools import partial\n\nfrom .modeling import ImageEncoderViT, MaskDecoder, PromptEncoder, Sam, TwoWayTransformer\n\n\ndef build_sam_vit_h(checkpoint=None):\n    return _build_sam(\n        encoder_embed_dim=1280,\n        encoder_depth=32,\n        encoder_num_heads=16,\n        encoder_global_attn_indexes=[7, 15, 23, 31],\n        checkpoint=checkpoint,\n    )\n\n\nbuild_sam = build_sam_vit_h\n\n\ndef build_sam_vit_l(checkpoint=None):\n    return _build_sam(\n        encoder_embed_dim=1024,\n        encoder_depth=24,\n        encoder_num_heads=16,\n        encoder_global_attn_indexes=[5, 11, 17, 23],\n        checkpoint=checkpoint,\n    )\n\n\ndef build_sam_vit_b(checkpoint=None):\n    return _build_sam(\n        encoder_embed_dim=768,\n        encoder_depth=12,\n        encoder_num_heads=12,\n        encoder_global_attn_indexes=[2, 5, 8, 11],\n        checkpoint=checkpoint,\n    )\n\n\nsam_model_registry = {\n    \"default\": build_sam_vit_h,\n    \"vit_h\": build_sam_vit_h,\n    \"vit_l\": build_sam_vit_l,\n    \"vit_b\": build_sam_vit_b,\n}\n\n\ndef _build_sam(\n    encoder_embed_dim,\n    encoder_depth,\n    encoder_num_heads,\n    encoder_global_attn_indexes,\n    checkpoint=None,\n):\n    prompt_embed_dim = 256\n    image_size = 1024\n    vit_patch_size = 16\n    image_embedding_size = image_size // vit_patch_size\n    sam = Sam(\n        image_encoder=ImageEncoderViT(\n            depth=encoder_depth,\n            embed_dim=encoder_embed_dim,\n            img_size=image_size,\n            mlp_ratio=4,\n            norm_layer=partial(torch.nn.LayerNorm, eps=1e-6),\n            num_heads=encoder_num_heads,\n            patch_size=vit_patch_size,\n            qkv_bias=True,\n            use_rel_pos=True,\n            global_attn_indexes=encoder_global_attn_indexes,\n            window_size=14,\n            out_chans=prompt_embed_dim,\n        ),\n        prompt_encoder=PromptEncoder(\n            embed_dim=prompt_embed_dim,\n            image_embedding_size=(image_embedding_size, image_embedding_size),\n            input_image_size=(image_size, image_size),\n            mask_in_chans=16,\n        ),\n        mask_decoder=MaskDecoder(\n            num_multimask_outputs=3,\n            transformer=TwoWayTransformer(\n                depth=2,\n                embedding_dim=prompt_embed_dim,\n                mlp_dim=2048,\n                num_heads=8,\n            ),\n            transformer_dim=prompt_embed_dim,\n            iou_head_depth=3,\n            iou_head_hidden_dim=256,\n        ),\n        pixel_mean=[123.675, 116.28, 103.53],\n        pixel_std=[58.395, 57.12, 57.375],\n    )\n    sam.eval()\n    if checkpoint is not None:\n        with open(checkpoint, \"rb\") as f:\n            state_dict = torch.load(f)\n        sam.load_state_dict(state_dict)\n    return sam\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/segment_anything/modeling/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom .sam import Sam\nfrom .image_encoder import ImageEncoderViT\nfrom .mask_decoder import MaskDecoder\nfrom .prompt_encoder import PromptEncoder\nfrom .transformer import TwoWayTransformer\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/segment_anything/modeling/common.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch\nimport torch.nn as nn\n\nfrom typing import Type\n\n\nclass MLPBlock(nn.Module):\n    def __init__(\n        self,\n        embedding_dim: int,\n        mlp_dim: int,\n        act: Type[nn.Module] = nn.GELU,\n    ) -> None:\n        super().__init__()\n        self.lin1 = nn.Linear(embedding_dim, mlp_dim)\n        self.lin2 = nn.Linear(mlp_dim, embedding_dim)\n        self.act = act()\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        return self.lin2(self.act(self.lin1(x)))\n\n\n# From https://github.com/facebookresearch/detectron2/blob/main/detectron2/layers/batch_norm.py # noqa\n# Itself from https://github.com/facebookresearch/ConvNeXt/blob/d1fa8f6fef0a165b27399986cc2bdacc92777e40/models/convnext.py#L119  # noqa\nclass LayerNorm2d(nn.Module):\n    def __init__(self, num_channels: int, eps: float = 1e-6) -> None:\n        super().__init__()\n        self.weight = nn.Parameter(torch.ones(num_channels))\n        self.bias = nn.Parameter(torch.zeros(num_channels))\n        self.eps = eps\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        u = x.mean(1, keepdim=True)\n        s = (x - u).pow(2).mean(1, keepdim=True)\n        x = (x - u) / torch.sqrt(s + self.eps)\n        x = self.weight[:, None, None] * x + self.bias[:, None, None]\n        return x\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/segment_anything/modeling/image_encoder.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom typing import Optional, Tuple, Type\n\nfrom .common import LayerNorm2d, MLPBlock\n\n\n# This class and its supporting functions below lightly adapted from the ViTDet backbone available at: https://github.com/facebookresearch/detectron2/blob/main/detectron2/modeling/backbone/vit.py # noqa\nclass ImageEncoderViT(nn.Module):\n    def __init__(\n        self,\n        img_size: int = 1024,\n        patch_size: int = 16,\n        in_chans: int = 3,\n        embed_dim: int = 768,\n        depth: int = 12,\n        num_heads: int = 12,\n        mlp_ratio: float = 4.0,\n        out_chans: int = 256,\n        qkv_bias: bool = True,\n        norm_layer: Type[nn.Module] = nn.LayerNorm,\n        act_layer: Type[nn.Module] = nn.GELU,\n        use_abs_pos: bool = True,\n        use_rel_pos: bool = False,\n        rel_pos_zero_init: bool = True,\n        window_size: int = 0,\n        global_attn_indexes: Tuple[int, ...] = (),\n    ) -> None:\n        \"\"\"\n        Args:\n            img_size (int): Input image size.\n            patch_size (int): Patch size.\n            in_chans (int): Number of input image channels.\n            embed_dim (int): Patch embedding dimension.\n            depth (int): Depth of ViT.\n            num_heads (int): Number of attention heads in each ViT block.\n            mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.\n            qkv_bias (bool): If True, add a learnable bias to query, key, value.\n            norm_layer (nn.Module): Normalization layer.\n            act_layer (nn.Module): Activation layer.\n            use_abs_pos (bool): If True, use absolute positional embeddings.\n            use_rel_pos (bool): If True, add relative positional embeddings to the attention map.\n            rel_pos_zero_init (bool): If True, zero initialize relative positional parameters.\n            window_size (int): Window size for window attention blocks.\n            global_attn_indexes (list): Indexes for blocks using global attention.\n        \"\"\"\n        super().__init__()\n        self.img_size = img_size\n\n        self.patch_embed = PatchEmbed(\n            kernel_size=(patch_size, patch_size),\n            stride=(patch_size, patch_size),\n            in_chans=in_chans,\n            embed_dim=embed_dim,\n        )\n\n        self.pos_embed: Optional[nn.Parameter] = None\n        if use_abs_pos:\n            # Initialize absolute positional embedding with pretrain image size.\n            self.pos_embed = nn.Parameter(\n                torch.zeros(1, img_size // patch_size, img_size // patch_size, embed_dim)\n            )\n\n        self.blocks = nn.ModuleList()\n        for i in range(depth):\n            block = Block(\n                dim=embed_dim,\n                num_heads=num_heads,\n                mlp_ratio=mlp_ratio,\n                qkv_bias=qkv_bias,\n                norm_layer=norm_layer,\n                act_layer=act_layer,\n                use_rel_pos=use_rel_pos,\n                rel_pos_zero_init=rel_pos_zero_init,\n                window_size=window_size if i not in global_attn_indexes else 0,\n                input_size=(img_size // patch_size, img_size // patch_size),\n            )\n            self.blocks.append(block)\n\n        self.neck = nn.Sequential(\n            nn.Conv2d(\n                embed_dim,\n                out_chans,\n                kernel_size=1,\n                bias=False,\n            ),\n            LayerNorm2d(out_chans),\n            nn.Conv2d(\n                out_chans,\n                out_chans,\n                kernel_size=3,\n                padding=1,\n                bias=False,\n            ),\n            LayerNorm2d(out_chans),\n        )\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x = self.patch_embed(x)\n        if self.pos_embed is not None:\n            x = x + self.pos_embed\n\n        for blk in self.blocks:\n            x = blk(x)\n\n        x = self.neck(x.permute(0, 3, 1, 2))\n\n        return x\n\n\nclass Block(nn.Module):\n    \"\"\"Transformer blocks with support of window attention and residual propagation blocks\"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        num_heads: int,\n        mlp_ratio: float = 4.0,\n        qkv_bias: bool = True,\n        norm_layer: Type[nn.Module] = nn.LayerNorm,\n        act_layer: Type[nn.Module] = nn.GELU,\n        use_rel_pos: bool = False,\n        rel_pos_zero_init: bool = True,\n        window_size: int = 0,\n        input_size: Optional[Tuple[int, int]] = None,\n    ) -> None:\n        \"\"\"\n        Args:\n            dim (int): Number of input channels.\n            num_heads (int): Number of attention heads in each ViT block.\n            mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.\n            qkv_bias (bool): If True, add a learnable bias to query, key, value.\n            norm_layer (nn.Module): Normalization layer.\n            act_layer (nn.Module): Activation layer.\n            use_rel_pos (bool): If True, add relative positional embeddings to the attention map.\n            rel_pos_zero_init (bool): If True, zero initialize relative positional parameters.\n            window_size (int): Window size for window attention blocks. If it equals 0, then\n                use global attention.\n            input_size (tuple(int, int) or None): Input resolution for calculating the relative\n                positional parameter size.\n        \"\"\"\n        super().__init__()\n        self.norm1 = norm_layer(dim)\n        self.attn = Attention(\n            dim,\n            num_heads=num_heads,\n            qkv_bias=qkv_bias,\n            use_rel_pos=use_rel_pos,\n            rel_pos_zero_init=rel_pos_zero_init,\n            input_size=input_size if window_size == 0 else (window_size, window_size),\n        )\n\n        self.norm2 = norm_layer(dim)\n        self.mlp = MLPBlock(embedding_dim=dim, mlp_dim=int(dim * mlp_ratio), act=act_layer)\n\n        self.window_size = window_size\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        shortcut = x\n        x = self.norm1(x)\n        # Window partition\n        if self.window_size > 0:\n            H, W = x.shape[1], x.shape[2]\n            x, pad_hw = window_partition(x, self.window_size)\n\n        x = self.attn(x)\n        # Reverse window partition\n        if self.window_size > 0:\n            x = window_unpartition(x, self.window_size, pad_hw, (H, W))\n\n        x = shortcut + x\n        x = x + self.mlp(self.norm2(x))\n\n        return x\n\n\nclass Attention(nn.Module):\n    \"\"\"Multi-head Attention block with relative position embeddings.\"\"\"\n\n    def __init__(\n        self,\n        dim: int,\n        num_heads: int = 8,\n        qkv_bias: bool = True,\n        use_rel_pos: bool = False,\n        rel_pos_zero_init: bool = True,\n        input_size: Optional[Tuple[int, int]] = None,\n    ) -> None:\n        \"\"\"\n        Args:\n            dim (int): Number of input channels.\n            num_heads (int): Number of attention heads.\n            qkv_bias (bool):  If True, add a learnable bias to query, key, value.\n            rel_pos (bool): If True, add relative positional embeddings to the attention map.\n            rel_pos_zero_init (bool): If True, zero initialize relative positional parameters.\n            input_size (tuple(int, int) or None): Input resolution for calculating the relative\n                positional parameter size.\n        \"\"\"\n        super().__init__()\n        self.num_heads = num_heads\n        head_dim = dim // num_heads\n        self.scale = head_dim**-0.5\n\n        self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)\n        self.proj = nn.Linear(dim, dim)\n\n        self.use_rel_pos = use_rel_pos\n        if self.use_rel_pos:\n            assert (\n                input_size is not None\n            ), \"Input size must be provided if using relative positional encoding.\"\n            # initialize relative positional embeddings\n            self.rel_pos_h = nn.Parameter(torch.zeros(2 * input_size[0] - 1, head_dim))\n            self.rel_pos_w = nn.Parameter(torch.zeros(2 * input_size[1] - 1, head_dim))\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        B, H, W, _ = x.shape\n        # qkv with shape (3, B, nHead, H * W, C)\n        qkv = self.qkv(x).reshape(B, H * W, 3, self.num_heads, -1).permute(2, 0, 3, 1, 4)\n        # q, k, v with shape (B * nHead, H * W, C)\n        q, k, v = qkv.reshape(3, B * self.num_heads, H * W, -1).unbind(0)\n\n        attn = (q * self.scale) @ k.transpose(-2, -1)\n\n        if self.use_rel_pos:\n            attn = add_decomposed_rel_pos(attn, q, self.rel_pos_h, self.rel_pos_w, (H, W), (H, W))\n\n        attn = attn.softmax(dim=-1)\n        x = (attn @ v).view(B, self.num_heads, H, W, -1).permute(0, 2, 3, 1, 4).reshape(B, H, W, -1)\n        x = self.proj(x)\n\n        return x\n\n\ndef window_partition(x: torch.Tensor, window_size: int) -> Tuple[torch.Tensor, Tuple[int, int]]:\n    \"\"\"\n    Partition into non-overlapping windows with padding if needed.\n    Args:\n        x (tensor): input tokens with [B, H, W, C].\n        window_size (int): window size.\n\n    Returns:\n        windows: windows after partition with [B * num_windows, window_size, window_size, C].\n        (Hp, Wp): padded height and width before partition\n    \"\"\"\n    B, H, W, C = x.shape\n\n    pad_h = (window_size - H % window_size) % window_size\n    pad_w = (window_size - W % window_size) % window_size\n    if pad_h > 0 or pad_w > 0:\n        x = F.pad(x, (0, 0, 0, pad_w, 0, pad_h))\n    Hp, Wp = H + pad_h, W + pad_w\n\n    x = x.view(B, Hp // window_size, window_size, Wp // window_size, window_size, C)\n    windows = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size, window_size, C)\n    return windows, (Hp, Wp)\n\n\ndef window_unpartition(\n    windows: torch.Tensor, window_size: int, pad_hw: Tuple[int, int], hw: Tuple[int, int]\n) -> torch.Tensor:\n    \"\"\"\n    Window unpartition into original sequences and removing padding.\n    Args:\n        windows (tensor): input tokens with [B * num_windows, window_size, window_size, C].\n        window_size (int): window size.\n        pad_hw (Tuple): padded height and width (Hp, Wp).\n        hw (Tuple): original height and width (H, W) before padding.\n\n    Returns:\n        x: unpartitioned sequences with [B, H, W, C].\n    \"\"\"\n    Hp, Wp = pad_hw\n    H, W = hw\n    B = windows.shape[0] // (Hp * Wp // window_size // window_size)\n    x = windows.view(B, Hp // window_size, Wp // window_size, window_size, window_size, -1)\n    x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, Hp, Wp, -1)\n\n    if Hp > H or Wp > W:\n        x = x[:, :H, :W, :].contiguous()\n    return x\n\n\ndef get_rel_pos(q_size: int, k_size: int, rel_pos: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Get relative positional embeddings according to the relative positions of\n        query and key sizes.\n    Args:\n        q_size (int): size of query q.\n        k_size (int): size of key k.\n        rel_pos (Tensor): relative position embeddings (L, C).\n\n    Returns:\n        Extracted positional embeddings according to relative positions.\n    \"\"\"\n    max_rel_dist = int(2 * max(q_size, k_size) - 1)\n    # Interpolate rel pos if needed.\n    if rel_pos.shape[0] != max_rel_dist:\n        # Interpolate rel pos.\n        rel_pos_resized = F.interpolate(\n            rel_pos.reshape(1, rel_pos.shape[0], -1).permute(0, 2, 1),\n            size=max_rel_dist,\n            mode=\"linear\",\n        )\n        rel_pos_resized = rel_pos_resized.reshape(-1, max_rel_dist).permute(1, 0)\n    else:\n        rel_pos_resized = rel_pos\n\n    # Scale the coords with short length if shapes for q and k are different.\n    q_coords = torch.arange(q_size)[:, None] * max(k_size / q_size, 1.0)\n    k_coords = torch.arange(k_size)[None, :] * max(q_size / k_size, 1.0)\n    relative_coords = (q_coords - k_coords) + (k_size - 1) * max(q_size / k_size, 1.0)\n\n    return rel_pos_resized[relative_coords.long()]\n\n\ndef add_decomposed_rel_pos(\n    attn: torch.Tensor,\n    q: torch.Tensor,\n    rel_pos_h: torch.Tensor,\n    rel_pos_w: torch.Tensor,\n    q_size: Tuple[int, int],\n    k_size: Tuple[int, int],\n) -> torch.Tensor:\n    \"\"\"\n    Calculate decomposed Relative Positional Embeddings from :paper:`mvitv2`.\n    https://github.com/facebookresearch/mvit/blob/19786631e330df9f3622e5402b4a419a263a2c80/mvit/models/attention.py   # noqa B950\n    Args:\n        attn (Tensor): attention map.\n        q (Tensor): query q in the attention layer with shape (B, q_h * q_w, C).\n        rel_pos_h (Tensor): relative position embeddings (Lh, C) for height axis.\n        rel_pos_w (Tensor): relative position embeddings (Lw, C) for width axis.\n        q_size (Tuple): spatial sequence size of query q with (q_h, q_w).\n        k_size (Tuple): spatial sequence size of key k with (k_h, k_w).\n\n    Returns:\n        attn (Tensor): attention map with added relative positional embeddings.\n    \"\"\"\n    q_h, q_w = q_size\n    k_h, k_w = k_size\n    Rh = get_rel_pos(q_h, k_h, rel_pos_h)\n    Rw = get_rel_pos(q_w, k_w, rel_pos_w)\n\n    B, _, dim = q.shape\n    r_q = q.reshape(B, q_h, q_w, dim)\n    rel_h = torch.einsum(\"bhwc,hkc->bhwk\", r_q, Rh)\n    rel_w = torch.einsum(\"bhwc,wkc->bhwk\", r_q, Rw)\n\n    attn = (\n        attn.view(B, q_h, q_w, k_h, k_w) + rel_h[:, :, :, :, None] + rel_w[:, :, :, None, :]\n    ).view(B, q_h * q_w, k_h * k_w)\n\n    return attn\n\n\nclass PatchEmbed(nn.Module):\n    \"\"\"\n    Image to Patch Embedding.\n    \"\"\"\n\n    def __init__(\n        self,\n        kernel_size: Tuple[int, int] = (16, 16),\n        stride: Tuple[int, int] = (16, 16),\n        padding: Tuple[int, int] = (0, 0),\n        in_chans: int = 3,\n        embed_dim: int = 768,\n    ) -> None:\n        \"\"\"\n        Args:\n            kernel_size (Tuple): kernel size of the projection layer.\n            stride (Tuple): stride of the projection layer.\n            padding (Tuple): padding size of the projection layer.\n            in_chans (int): Number of input image channels.\n            embed_dim (int): Patch embedding dimension.\n        \"\"\"\n        super().__init__()\n\n        self.proj = nn.Conv2d(\n            in_chans, embed_dim, kernel_size=kernel_size, stride=stride, padding=padding\n        )\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x = self.proj(x)\n        # B C H W -> B H W C\n        x = x.permute(0, 2, 3, 1)\n        return x\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/segment_anything/modeling/mask_decoder.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\n\nfrom typing import List, Tuple, Type\n\nfrom .common import LayerNorm2d\n\n\nclass MaskDecoder(nn.Module):\n    def __init__(\n        self,\n        *,\n        transformer_dim: int,\n        transformer: nn.Module,\n        num_multimask_outputs: int = 3,\n        activation: Type[nn.Module] = nn.GELU,\n        iou_head_depth: int = 3,\n        iou_head_hidden_dim: int = 256,\n    ) -> None:\n        \"\"\"\n        Predicts masks given an image and prompt embeddings, using a\n        transformer architecture.\n\n        Arguments:\n          transformer_dim (int): the channel dimension of the transformer\n          transformer (nn.Module): the transformer used to predict masks\n          num_multimask_outputs (int): the number of masks to predict\n            when disambiguating masks\n          activation (nn.Module): the type of activation to use when\n            upscaling masks\n          iou_head_depth (int): the depth of the MLP used to predict\n            mask quality\n          iou_head_hidden_dim (int): the hidden dimension of the MLP\n            used to predict mask quality\n        \"\"\"\n        super().__init__()\n        self.transformer_dim = transformer_dim\n        self.transformer = transformer\n\n        self.num_multimask_outputs = num_multimask_outputs\n\n        self.iou_token = nn.Embedding(1, transformer_dim)\n        self.num_mask_tokens = num_multimask_outputs + 1\n        self.mask_tokens = nn.Embedding(self.num_mask_tokens, transformer_dim)\n\n        self.output_upscaling = nn.Sequential(\n            nn.ConvTranspose2d(transformer_dim, transformer_dim // 4, kernel_size=2, stride=2),\n            LayerNorm2d(transformer_dim // 4),\n            activation(),\n            nn.ConvTranspose2d(transformer_dim // 4, transformer_dim // 8, kernel_size=2, stride=2),\n            activation(),\n        )\n        self.output_hypernetworks_mlps = nn.ModuleList(\n            [\n                MLP(transformer_dim, transformer_dim, transformer_dim // 8, 3)\n                for i in range(self.num_mask_tokens)\n            ]\n        )\n\n        self.iou_prediction_head = MLP(\n            transformer_dim, iou_head_hidden_dim, self.num_mask_tokens, iou_head_depth\n        )\n\n    def forward(\n        self,\n        image_embeddings: torch.Tensor,\n        image_pe: torch.Tensor,\n        sparse_prompt_embeddings: torch.Tensor,\n        dense_prompt_embeddings: torch.Tensor,\n        multimask_output: bool,\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"\n        Predict masks given image and prompt embeddings.\n\n        Arguments:\n          image_embeddings (torch.Tensor): the embeddings from the image encoder\n          image_pe (torch.Tensor): positional encoding with the shape of image_embeddings\n          sparse_prompt_embeddings (torch.Tensor): the embeddings of the points and boxes\n          dense_prompt_embeddings (torch.Tensor): the embeddings of the mask inputs\n          multimask_output (bool): Whether to return multiple masks or a single\n            mask.\n\n        Returns:\n          torch.Tensor: batched predicted masks\n          torch.Tensor: batched predictions of mask quality\n        \"\"\"\n        masks, iou_pred = self.predict_masks(\n            image_embeddings=image_embeddings,\n            image_pe=image_pe,\n            sparse_prompt_embeddings=sparse_prompt_embeddings,\n            dense_prompt_embeddings=dense_prompt_embeddings,\n        )\n\n        # Select the correct mask or masks for output\n        if multimask_output:\n            mask_slice = slice(1, None)\n        else:\n            mask_slice = slice(0, 1)\n        masks = masks[:, mask_slice, :, :]\n        iou_pred = iou_pred[:, mask_slice]\n\n        # Prepare output\n        return masks, iou_pred\n\n    def predict_masks(\n        self,\n        image_embeddings: torch.Tensor,\n        image_pe: torch.Tensor,\n        sparse_prompt_embeddings: torch.Tensor,\n        dense_prompt_embeddings: torch.Tensor,\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Predicts masks. See 'forward' for more details.\"\"\"\n        # Concatenate output tokens\n        output_tokens = torch.cat([self.iou_token.weight, self.mask_tokens.weight], dim=0)\n        output_tokens = output_tokens.unsqueeze(0).expand(sparse_prompt_embeddings.size(0), -1, -1)\n        tokens = torch.cat((output_tokens, sparse_prompt_embeddings), dim=1)\n\n        # Expand per-image data in batch direction to be per-mask\n        src = torch.repeat_interleave(image_embeddings, tokens.shape[0], dim=0)\n        src = src + dense_prompt_embeddings\n        pos_src = torch.repeat_interleave(image_pe, tokens.shape[0], dim=0)\n        b, c, h, w = src.shape\n\n        # Run the transformer\n        hs, src = self.transformer(src, pos_src, tokens)\n        iou_token_out = hs[:, 0, :]\n        mask_tokens_out = hs[:, 1 : (1 + self.num_mask_tokens), :]\n\n        # Upscale mask embeddings and predict masks using the mask tokens\n        src = src.transpose(1, 2).view(b, c, h, w)\n        upscaled_embedding = self.output_upscaling(src)\n        hyper_in_list: List[torch.Tensor] = []\n        for i in range(self.num_mask_tokens):\n            hyper_in_list.append(self.output_hypernetworks_mlps[i](mask_tokens_out[:, i, :]))\n        hyper_in = torch.stack(hyper_in_list, dim=1)\n        b, c, h, w = upscaled_embedding.shape\n        masks = (hyper_in @ upscaled_embedding.view(b, c, h * w)).view(b, -1, h, w)\n\n        # Generate mask quality predictions\n        iou_pred = self.iou_prediction_head(iou_token_out)\n\n        return masks, iou_pred\n\n\n# Lightly adapted from\n# https://github.com/facebookresearch/MaskFormer/blob/main/mask_former/modeling/transformer/transformer_predictor.py # noqa\nclass MLP(nn.Module):\n    def __init__(\n        self,\n        input_dim: int,\n        hidden_dim: int,\n        output_dim: int,\n        num_layers: int,\n        sigmoid_output: bool = False,\n    ) -> None:\n        super().__init__()\n        self.num_layers = num_layers\n        h = [hidden_dim] * (num_layers - 1)\n        self.layers = nn.ModuleList(\n            nn.Linear(n, k) for n, k in zip([input_dim] + h, h + [output_dim])\n        )\n        self.sigmoid_output = sigmoid_output\n\n    def forward(self, x):\n        for i, layer in enumerate(self.layers):\n            x = F.relu(layer(x)) if i < self.num_layers - 1 else layer(x)\n        if self.sigmoid_output:\n            x = F.sigmoid(x)\n        return x\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/segment_anything/modeling/prompt_encoder.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport numpy as np\nimport torch\nfrom torch import nn\n\nfrom typing import Any, Optional, Tuple, Type\n\nfrom .common import LayerNorm2d\n\n\nclass PromptEncoder(nn.Module):\n    def __init__(\n        self,\n        embed_dim: int,\n        image_embedding_size: Tuple[int, int],\n        input_image_size: Tuple[int, int],\n        mask_in_chans: int,\n        activation: Type[nn.Module] = nn.GELU,\n    ) -> None:\n        \"\"\"\n        Encodes prompts for input to SAM's mask decoder.\n\n        Arguments:\n          embed_dim (int): The prompts' embedding dimension\n          image_embedding_size (tuple(int, int)): The spatial size of the\n            image embedding, as (H, W).\n          input_image_size (int): The padded size of the image as input\n            to the image encoder, as (H, W).\n          mask_in_chans (int): The number of hidden channels used for\n            encoding input masks.\n          activation (nn.Module): The activation to use when encoding\n            input masks.\n        \"\"\"\n        super().__init__()\n        self.embed_dim = embed_dim\n        self.input_image_size = input_image_size\n        self.image_embedding_size = image_embedding_size\n        self.pe_layer = PositionEmbeddingRandom(embed_dim // 2)\n\n        self.num_point_embeddings: int = 4  # pos/neg point + 2 box corners\n        point_embeddings = [nn.Embedding(1, embed_dim) for i in range(self.num_point_embeddings)]\n        self.point_embeddings = nn.ModuleList(point_embeddings)\n        self.not_a_point_embed = nn.Embedding(1, embed_dim)\n\n        self.mask_input_size = (4 * image_embedding_size[0], 4 * image_embedding_size[1])\n        self.mask_downscaling = nn.Sequential(\n            nn.Conv2d(1, mask_in_chans // 4, kernel_size=2, stride=2),\n            LayerNorm2d(mask_in_chans // 4),\n            activation(),\n            nn.Conv2d(mask_in_chans // 4, mask_in_chans, kernel_size=2, stride=2),\n            LayerNorm2d(mask_in_chans),\n            activation(),\n            nn.Conv2d(mask_in_chans, embed_dim, kernel_size=1),\n        )\n        self.no_mask_embed = nn.Embedding(1, embed_dim)\n\n    def get_dense_pe(self) -> torch.Tensor:\n        \"\"\"\n        Returns the positional encoding used to encode point prompts,\n        applied to a dense set of points the shape of the image encoding.\n\n        Returns:\n          torch.Tensor: Positional encoding with shape\n            1x(embed_dim)x(embedding_h)x(embedding_w)\n        \"\"\"\n        return self.pe_layer(self.image_embedding_size).unsqueeze(0)\n\n    def _embed_points(\n        self,\n        points: torch.Tensor,\n        labels: torch.Tensor,\n        pad: bool,\n    ) -> torch.Tensor:\n        \"\"\"Embeds point prompts.\"\"\"\n        points = points + 0.5  # Shift to center of pixel\n        if pad:\n            padding_point = torch.zeros((points.shape[0], 1, 2), device=points.device)\n            padding_label = -torch.ones((labels.shape[0], 1), device=labels.device)\n            points = torch.cat([points, padding_point], dim=1)\n            labels = torch.cat([labels, padding_label], dim=1)\n        point_embedding = self.pe_layer.forward_with_coords(points, self.input_image_size)\n        point_embedding[labels == -1] = 0.0\n        point_embedding[labels == -1] += self.not_a_point_embed.weight\n        point_embedding[labels == 0] += self.point_embeddings[0].weight\n        point_embedding[labels == 1] += self.point_embeddings[1].weight\n        return point_embedding\n\n    def _embed_boxes(self, boxes: torch.Tensor) -> torch.Tensor:\n        \"\"\"Embeds box prompts.\"\"\"\n        boxes = boxes + 0.5  # Shift to center of pixel\n        coords = boxes.reshape(-1, 2, 2)\n        corner_embedding = self.pe_layer.forward_with_coords(coords, self.input_image_size)\n        corner_embedding[:, 0, :] += self.point_embeddings[2].weight\n        corner_embedding[:, 1, :] += self.point_embeddings[3].weight\n        return corner_embedding\n\n    def _embed_masks(self, masks: torch.Tensor) -> torch.Tensor:\n        \"\"\"Embeds mask inputs.\"\"\"\n        mask_embedding = self.mask_downscaling(masks)\n        return mask_embedding\n\n    def _get_batch_size(\n        self,\n        points: Optional[Tuple[torch.Tensor, torch.Tensor]],\n        boxes: Optional[torch.Tensor],\n        masks: Optional[torch.Tensor],\n    ) -> int:\n        \"\"\"\n        Gets the batch size of the output given the batch size of the input prompts.\n        \"\"\"\n        if points is not None:\n            return points[0].shape[0]\n        elif boxes is not None:\n            return boxes.shape[0]\n        elif masks is not None:\n            return masks.shape[0]\n        else:\n            return 1\n\n    def _get_device(self) -> torch.device:\n        return self.point_embeddings[0].weight.device\n\n    def forward(\n        self,\n        points: Optional[Tuple[torch.Tensor, torch.Tensor]],\n        boxes: Optional[torch.Tensor],\n        masks: Optional[torch.Tensor],\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"\n        Embeds different types of prompts, returning both sparse and dense\n        embeddings.\n\n        Arguments:\n          points (tuple(torch.Tensor, torch.Tensor) or none): point coordinates\n            and labels to embed.\n          boxes (torch.Tensor or none): boxes to embed\n          masks (torch.Tensor or none): masks to embed\n\n        Returns:\n          torch.Tensor: sparse embeddings for the points and boxes, with shape\n            BxNx(embed_dim), where N is determined by the number of input points\n            and boxes.\n          torch.Tensor: dense embeddings for the masks, in the shape\n            Bx(embed_dim)x(embed_H)x(embed_W)\n        \"\"\"\n        bs = self._get_batch_size(points, boxes, masks)\n        sparse_embeddings = torch.empty((bs, 0, self.embed_dim), device=self._get_device())\n        if points is not None:\n            coords, labels = points\n            point_embeddings = self._embed_points(coords, labels, pad=(boxes is None))\n            sparse_embeddings = torch.cat([sparse_embeddings, point_embeddings], dim=1)\n        if boxes is not None:\n            box_embeddings = self._embed_boxes(boxes)\n            sparse_embeddings = torch.cat([sparse_embeddings, box_embeddings], dim=1)\n\n        if masks is not None:\n            dense_embeddings = self._embed_masks(masks)\n        else:\n            dense_embeddings = self.no_mask_embed.weight.reshape(1, -1, 1, 1).expand(\n                bs, -1, self.image_embedding_size[0], self.image_embedding_size[1]\n            )\n\n        return sparse_embeddings, dense_embeddings\n\n\nclass PositionEmbeddingRandom(nn.Module):\n    \"\"\"\n    Positional encoding using random spatial frequencies.\n    \"\"\"\n\n    def __init__(self, num_pos_feats: int = 64, scale: Optional[float] = None) -> None:\n        super().__init__()\n        if scale is None or scale <= 0.0:\n            scale = 1.0\n        self.register_buffer(\n            \"positional_encoding_gaussian_matrix\",\n            scale * torch.randn((2, num_pos_feats)),\n        )\n\n    def _pe_encoding(self, coords: torch.Tensor) -> torch.Tensor:\n        \"\"\"Positionally encode points that are normalized to [0,1].\"\"\"\n        # assuming coords are in [0, 1]^2 square and have d_1 x ... x d_n x 2 shape\n        coords = 2 * coords - 1\n        coords = coords @ self.positional_encoding_gaussian_matrix\n        coords = 2 * np.pi * coords\n        # outputs d_1 x ... x d_n x C shape\n        return torch.cat([torch.sin(coords), torch.cos(coords)], dim=-1)\n\n    def forward(self, size: Tuple[int, int]) -> torch.Tensor:\n        \"\"\"Generate positional encoding for a grid of the specified size.\"\"\"\n        h, w = size\n        device: Any = self.positional_encoding_gaussian_matrix.device\n        grid = torch.ones((h, w), device=device, dtype=torch.float32)\n        y_embed = grid.cumsum(dim=0) - 0.5\n        x_embed = grid.cumsum(dim=1) - 0.5\n        y_embed = y_embed / h\n        x_embed = x_embed / w\n\n        pe = self._pe_encoding(torch.stack([x_embed, y_embed], dim=-1))\n        return pe.permute(2, 0, 1)  # C x H x W\n\n    def forward_with_coords(\n        self, coords_input: torch.Tensor, image_size: Tuple[int, int]\n    ) -> torch.Tensor:\n        \"\"\"Positionally encode points that are not normalized to [0,1].\"\"\"\n        coords = coords_input.clone()\n        coords[:, :, 0] = coords[:, :, 0] / image_size[1]\n        coords[:, :, 1] = coords[:, :, 1] / image_size[0]\n        return self._pe_encoding(coords.to(torch.float))  # B x N x C\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/segment_anything/modeling/sam.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch\nfrom torch import nn\nfrom torch.nn import functional as F\n\nfrom typing import Any, Dict, List, Tuple\n\nfrom .image_encoder import ImageEncoderViT\nfrom .mask_decoder import MaskDecoder\nfrom .prompt_encoder import PromptEncoder\n\n\nclass Sam(nn.Module):\n    mask_threshold: float = 0.0\n    image_format: str = \"RGB\"\n\n    def __init__(\n        self,\n        image_encoder: ImageEncoderViT,\n        prompt_encoder: PromptEncoder,\n        mask_decoder: MaskDecoder,\n        pixel_mean: List[float] = [123.675, 116.28, 103.53],\n        pixel_std: List[float] = [58.395, 57.12, 57.375],\n    ) -> None:\n        \"\"\"\n        SAM predicts object masks from an image and input prompts.\n\n        Arguments:\n          image_encoder (ImageEncoderViT): The backbone used to encode the\n            image into image embeddings that allow for efficient mask prediction.\n          prompt_encoder (PromptEncoder): Encodes various types of input prompts.\n          mask_decoder (MaskDecoder): Predicts masks from the image embeddings\n            and encoded prompts.\n          pixel_mean (list(float)): Mean values for normalizing pixels in the input image.\n          pixel_std (list(float)): Std values for normalizing pixels in the input image.\n        \"\"\"\n        super().__init__()\n        self.image_encoder = image_encoder\n        self.prompt_encoder = prompt_encoder\n        self.mask_decoder = mask_decoder\n        self.register_buffer(\"pixel_mean\", torch.Tensor(pixel_mean).view(-1, 1, 1), False)\n        self.register_buffer(\"pixel_std\", torch.Tensor(pixel_std).view(-1, 1, 1), False)\n\n    @property\n    def device(self) -> Any:\n        return self.pixel_mean.device\n\n    @torch.no_grad()\n    def forward(\n        self,\n        batched_input: List[Dict[str, Any]],\n        multimask_output: bool,\n    ) -> List[Dict[str, torch.Tensor]]:\n        \"\"\"\n        Predicts masks end-to-end from provided images and prompts.\n        If prompts are not known in advance, using SamPredictor is\n        recommended over calling the model directly.\n\n        Arguments:\n          batched_input (list(dict)): A list over input images, each a\n            dictionary with the following keys. A prompt key can be\n            excluded if it is not present.\n              'image': The image as a torch tensor in 3xHxW format,\n                already transformed for input to the model.\n              'original_size': (tuple(int, int)) The original size of\n                the image before transformation, as (H, W).\n              'point_coords': (torch.Tensor) Batched point prompts for\n                this image, with shape BxNx2. Already transformed to the\n                input frame of the model.\n              'point_labels': (torch.Tensor) Batched labels for point prompts,\n                with shape BxN.\n              'boxes': (torch.Tensor) Batched box inputs, with shape Bx4.\n                Already transformed to the input frame of the model.\n              'mask_inputs': (torch.Tensor) Batched mask inputs to the model,\n                in the form Bx1xHxW.\n          multimask_output (bool): Whether the model should predict multiple\n            disambiguating masks, or return a single mask.\n\n        Returns:\n          (list(dict)): A list over input images, where each element is\n            as dictionary with the following keys.\n              'masks': (torch.Tensor) Batched binary mask predictions,\n                with shape BxCxHxW, where B is the number of input prompts,\n                C is determined by multimask_output, and (H, W) is the\n                original size of the image.\n              'iou_predictions': (torch.Tensor) The model's predictions\n                of mask quality, in shape BxC.\n              'low_res_logits': (torch.Tensor) Low resolution logits with\n                shape BxCxHxW, where H=W=256. Can be passed as mask input\n                to subsequent iterations of prediction.\n        \"\"\"\n        input_images = torch.stack([self.preprocess(x[\"image\"]) for x in batched_input], dim=0)\n        image_embeddings = self.image_encoder(input_images)\n\n        outputs = []\n        for image_record, curr_embedding in zip(batched_input, image_embeddings):\n            if \"point_coords\" in image_record:\n                points = (image_record[\"point_coords\"], image_record[\"point_labels\"])\n            else:\n                points = None\n            sparse_embeddings, dense_embeddings = self.prompt_encoder(\n                points=points,\n                boxes=image_record.get(\"boxes\", None),\n                masks=image_record.get(\"mask_inputs\", None),\n            )\n            low_res_masks, iou_predictions = self.mask_decoder(\n                image_embeddings=curr_embedding.unsqueeze(0),\n                image_pe=self.prompt_encoder.get_dense_pe(),\n                sparse_prompt_embeddings=sparse_embeddings,\n                dense_prompt_embeddings=dense_embeddings,\n                multimask_output=multimask_output,\n            )\n            masks = self.postprocess_masks(\n                low_res_masks,\n                input_size=image_record[\"image\"].shape[-2:],\n                original_size=image_record[\"original_size\"],\n            )\n            masks = masks > self.mask_threshold\n            outputs.append(\n                {\n                    \"masks\": masks,\n                    \"iou_predictions\": iou_predictions,\n                    \"low_res_logits\": low_res_masks,\n                }\n            )\n        return outputs\n\n    def postprocess_masks(\n        self,\n        masks: torch.Tensor,\n        input_size: Tuple[int, ...],\n        original_size: Tuple[int, ...],\n    ) -> torch.Tensor:\n        \"\"\"\n        Remove padding and upscale masks to the original image size.\n\n        Arguments:\n          masks (torch.Tensor): Batched masks from the mask_decoder,\n            in BxCxHxW format.\n          input_size (tuple(int, int)): The size of the image input to the\n            model, in (H, W) format. Used to remove padding.\n          original_size (tuple(int, int)): The original size of the image\n            before resizing for input to the model, in (H, W) format.\n\n        Returns:\n          (torch.Tensor): Batched masks in BxCxHxW format, where (H, W)\n            is given by original_size.\n        \"\"\"\n        masks = F.interpolate(\n            masks,\n            (self.image_encoder.img_size, self.image_encoder.img_size),\n            mode=\"bilinear\",\n            align_corners=False,\n        )\n        masks = masks[..., : input_size[0], : input_size[1]]\n        masks = F.interpolate(masks, original_size, mode=\"bilinear\", align_corners=False)\n        return masks\n\n    def preprocess(self, x: torch.Tensor) -> torch.Tensor:\n        \"\"\"Normalize pixel values and pad to a square input.\"\"\"\n        # Normalize colors\n        x = (x - self.pixel_mean) / self.pixel_std\n\n        # Pad\n        h, w = x.shape[-2:]\n        padh = self.image_encoder.img_size - h\n        padw = self.image_encoder.img_size - w\n        x = F.pad(x, (0, padw, 0, padh))\n        return x\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/segment_anything/modeling/transformer.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch\nfrom torch import Tensor, nn\n\nimport math\nfrom typing import Tuple, Type\n\nfrom .common import MLPBlock\n\n\nclass TwoWayTransformer(nn.Module):\n    def __init__(\n        self,\n        depth: int,\n        embedding_dim: int,\n        num_heads: int,\n        mlp_dim: int,\n        activation: Type[nn.Module] = nn.ReLU,\n        attention_downsample_rate: int = 2,\n    ) -> None:\n        \"\"\"\n        A transformer decoder that attends to an input image using\n        queries whose positional embedding is supplied.\n\n        Args:\n          depth (int): number of layers in the transformer\n          embedding_dim (int): the channel dimension for the input embeddings\n          num_heads (int): the number of heads for multihead attention. Must\n            divide embedding_dim\n          mlp_dim (int): the channel dimension internal to the MLP block\n          activation (nn.Module): the activation to use in the MLP block\n        \"\"\"\n        super().__init__()\n        self.depth = depth\n        self.embedding_dim = embedding_dim\n        self.num_heads = num_heads\n        self.mlp_dim = mlp_dim\n        self.layers = nn.ModuleList()\n\n        for i in range(depth):\n            self.layers.append(\n                TwoWayAttentionBlock(\n                    embedding_dim=embedding_dim,\n                    num_heads=num_heads,\n                    mlp_dim=mlp_dim,\n                    activation=activation,\n                    attention_downsample_rate=attention_downsample_rate,\n                    skip_first_layer_pe=(i == 0),\n                )\n            )\n\n        self.final_attn_token_to_image = Attention(\n            embedding_dim, num_heads, downsample_rate=attention_downsample_rate\n        )\n        self.norm_final_attn = nn.LayerNorm(embedding_dim)\n\n    def forward(\n        self,\n        image_embedding: Tensor,\n        image_pe: Tensor,\n        point_embedding: Tensor,\n    ) -> Tuple[Tensor, Tensor]:\n        \"\"\"\n        Args:\n          image_embedding (torch.Tensor): image to attend to. Should be shape\n            B x embedding_dim x h x w for any h and w.\n          image_pe (torch.Tensor): the positional encoding to add to the image. Must\n            have the same shape as image_embedding.\n          point_embedding (torch.Tensor): the embedding to add to the query points.\n            Must have shape B x N_points x embedding_dim for any N_points.\n\n        Returns:\n          torch.Tensor: the processed point_embedding\n          torch.Tensor: the processed image_embedding\n        \"\"\"\n        # BxCxHxW -> BxHWxC == B x N_image_tokens x C\n        bs, c, h, w = image_embedding.shape\n        image_embedding = image_embedding.flatten(2).permute(0, 2, 1)\n        image_pe = image_pe.flatten(2).permute(0, 2, 1)\n\n        # Prepare queries\n        queries = point_embedding\n        keys = image_embedding\n\n        # Apply transformer blocks and final layernorm\n        for layer in self.layers:\n            queries, keys = layer(\n                queries=queries,\n                keys=keys,\n                query_pe=point_embedding,\n                key_pe=image_pe,\n            )\n\n        # Apply the final attention layer from the points to the image\n        q = queries + point_embedding\n        k = keys + image_pe\n        attn_out = self.final_attn_token_to_image(q=q, k=k, v=keys)\n        queries = queries + attn_out\n        queries = self.norm_final_attn(queries)\n\n        return queries, keys\n\n\nclass TwoWayAttentionBlock(nn.Module):\n    def __init__(\n        self,\n        embedding_dim: int,\n        num_heads: int,\n        mlp_dim: int = 2048,\n        activation: Type[nn.Module] = nn.ReLU,\n        attention_downsample_rate: int = 2,\n        skip_first_layer_pe: bool = False,\n    ) -> None:\n        \"\"\"\n        A transformer block with four layers: (1) self-attention of sparse\n        inputs, (2) cross attention of sparse inputs to dense inputs, (3) mlp\n        block on sparse inputs, and (4) cross attention of dense inputs to sparse\n        inputs.\n\n        Arguments:\n          embedding_dim (int): the channel dimension of the embeddings\n          num_heads (int): the number of heads in the attention layers\n          mlp_dim (int): the hidden dimension of the mlp block\n          activation (nn.Module): the activation of the mlp block\n          skip_first_layer_pe (bool): skip the PE on the first layer\n        \"\"\"\n        super().__init__()\n        self.self_attn = Attention(embedding_dim, num_heads)\n        self.norm1 = nn.LayerNorm(embedding_dim)\n\n        self.cross_attn_token_to_image = Attention(\n            embedding_dim, num_heads, downsample_rate=attention_downsample_rate\n        )\n        self.norm2 = nn.LayerNorm(embedding_dim)\n\n        self.mlp = MLPBlock(embedding_dim, mlp_dim, activation)\n        self.norm3 = nn.LayerNorm(embedding_dim)\n\n        self.norm4 = nn.LayerNorm(embedding_dim)\n        self.cross_attn_image_to_token = Attention(\n            embedding_dim, num_heads, downsample_rate=attention_downsample_rate\n        )\n\n        self.skip_first_layer_pe = skip_first_layer_pe\n\n    def forward(\n        self, queries: Tensor, keys: Tensor, query_pe: Tensor, key_pe: Tensor\n    ) -> Tuple[Tensor, Tensor]:\n        # Self attention block\n        if self.skip_first_layer_pe:\n            queries = self.self_attn(q=queries, k=queries, v=queries)\n        else:\n            q = queries + query_pe\n            attn_out = self.self_attn(q=q, k=q, v=queries)\n            queries = queries + attn_out\n        queries = self.norm1(queries)\n\n        # Cross attention block, tokens attending to image embedding\n        q = queries + query_pe\n        k = keys + key_pe\n        attn_out = self.cross_attn_token_to_image(q=q, k=k, v=keys)\n        queries = queries + attn_out\n        queries = self.norm2(queries)\n\n        # MLP block\n        mlp_out = self.mlp(queries)\n        queries = queries + mlp_out\n        queries = self.norm3(queries)\n\n        # Cross attention block, image embedding attending to tokens\n        q = queries + query_pe\n        k = keys + key_pe\n        attn_out = self.cross_attn_image_to_token(q=k, k=q, v=queries)\n        keys = keys + attn_out\n        keys = self.norm4(keys)\n\n        return queries, keys\n\n\nclass Attention(nn.Module):\n    \"\"\"\n    An attention layer that allows for downscaling the size of the embedding\n    after projection to queries, keys, and values.\n    \"\"\"\n\n    def __init__(\n        self,\n        embedding_dim: int,\n        num_heads: int,\n        downsample_rate: int = 1,\n    ) -> None:\n        super().__init__()\n        self.embedding_dim = embedding_dim\n        self.internal_dim = embedding_dim // downsample_rate\n        self.num_heads = num_heads\n        assert self.internal_dim % num_heads == 0, \"num_heads must divide embedding_dim.\"\n\n        self.q_proj = nn.Linear(embedding_dim, self.internal_dim)\n        self.k_proj = nn.Linear(embedding_dim, self.internal_dim)\n        self.v_proj = nn.Linear(embedding_dim, self.internal_dim)\n        self.out_proj = nn.Linear(self.internal_dim, embedding_dim)\n\n    def _separate_heads(self, x: Tensor, num_heads: int) -> Tensor:\n        b, n, c = x.shape\n        x = x.reshape(b, n, num_heads, c // num_heads)\n        return x.transpose(1, 2)  # B x N_heads x N_tokens x C_per_head\n\n    def _recombine_heads(self, x: Tensor) -> Tensor:\n        b, n_heads, n_tokens, c_per_head = x.shape\n        x = x.transpose(1, 2)\n        return x.reshape(b, n_tokens, n_heads * c_per_head)  # B x N_tokens x C\n\n    def forward(self, q: Tensor, k: Tensor, v: Tensor) -> Tensor:\n        # Input projections\n        q = self.q_proj(q)\n        k = self.k_proj(k)\n        v = self.v_proj(v)\n\n        # Separate into heads\n        q = self._separate_heads(q, self.num_heads)\n        k = self._separate_heads(k, self.num_heads)\n        v = self._separate_heads(v, self.num_heads)\n\n        # Attention\n        _, _, _, c_per_head = q.shape\n        attn = q @ k.permute(0, 1, 3, 2)  # B x N_heads x N_tokens x N_tokens\n        attn = attn / math.sqrt(c_per_head)\n        attn = torch.softmax(attn, dim=-1)\n\n        # Get output\n        out = attn @ v\n        out = self._recombine_heads(out)\n        out = self.out_proj(out)\n\n        return out\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/segment_anything/predictor.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport numpy as np\nimport torch\n\nfrom segment_anything.modeling import Sam\n\nfrom typing import Optional, Tuple\n\nfrom .utils.transforms import ResizeLongestSide\n\n\nclass SamPredictor:\n    def __init__(\n        self,\n        sam_model: Sam,\n    ) -> None:\n        \"\"\"\n        Uses SAM to calculate the image embedding for an image, and then\n        allow repeated, efficient mask prediction given prompts.\n\n        Arguments:\n          sam_model (Sam): The model to use for mask prediction.\n        \"\"\"\n        super().__init__()\n        self.model = sam_model\n        self.transform = ResizeLongestSide(sam_model.image_encoder.img_size)\n        self.reset_image()\n\n    def set_image(\n        self,\n        image: np.ndarray,\n        image_format: str = \"RGB\",\n    ) -> None:\n        \"\"\"\n        Calculates the image embeddings for the provided image, allowing\n        masks to be predicted with the 'predict' method.\n\n        Arguments:\n          image (np.ndarray): The image for calculating masks. Expects an\n            image in HWC uint8 format, with pixel values in [0, 255].\n          image_format (str): The color format of the image, in ['RGB', 'BGR'].\n        \"\"\"\n        assert image_format in [\n            \"RGB\",\n            \"BGR\",\n        ], f\"image_format must be in ['RGB', 'BGR'], is {image_format}.\"\n        if image_format != self.model.image_format:\n            image = image[..., ::-1]\n\n        # Transform the image to the form expected by the model\n        input_image = self.transform.apply_image(image)\n        input_image_torch = torch.as_tensor(input_image, device=self.device)\n        input_image_torch = input_image_torch.permute(2, 0, 1).contiguous()[None, :, :, :]\n\n        self.set_torch_image(input_image_torch, image.shape[:2])\n\n    @torch.no_grad()\n    def set_torch_image(\n        self,\n        transformed_image: torch.Tensor,\n        original_image_size: Tuple[int, ...],\n    ) -> None:\n        \"\"\"\n        Calculates the image embeddings for the provided image, allowing\n        masks to be predicted with the 'predict' method. Expects the input\n        image to be already transformed to the format expected by the model.\n\n        Arguments:\n          transformed_image (torch.Tensor): The input image, with shape\n            1x3xHxW, which has been transformed with ResizeLongestSide.\n          original_image_size (tuple(int, int)): The size of the image\n            before transformation, in (H, W) format.\n        \"\"\"\n        assert (\n            len(transformed_image.shape) == 4\n            and transformed_image.shape[1] == 3\n            and max(*transformed_image.shape[2:]) == self.model.image_encoder.img_size\n        ), f\"set_torch_image input must be BCHW with long side {self.model.image_encoder.img_size}.\"\n        self.reset_image()\n\n        self.original_size = original_image_size\n        self.input_size = tuple(transformed_image.shape[-2:])\n        input_image = self.model.preprocess(transformed_image)\n        self.features = self.model.image_encoder(input_image)\n        self.is_image_set = True\n\n    def predict(\n        self,\n        point_coords: Optional[np.ndarray] = None,\n        point_labels: Optional[np.ndarray] = None,\n        box: Optional[np.ndarray] = None,\n        mask_input: Optional[np.ndarray] = None,\n        multimask_output: bool = True,\n        return_logits: bool = False,\n    ) -> Tuple[np.ndarray, np.ndarray, np.ndarray]:\n        \"\"\"\n        Predict masks for the given input prompts, using the currently set image.\n\n        Arguments:\n          point_coords (np.ndarray or None): A Nx2 array of point prompts to the\n            model. Each point is in (X,Y) in pixels.\n          point_labels (np.ndarray or None): A length N array of labels for the\n            point prompts. 1 indicates a foreground point and 0 indicates a\n            background point.\n          box (np.ndarray or None): A length 4 array given a box prompt to the\n            model, in XYXY format.\n          mask_input (np.ndarray): A low resolution mask input to the model, typically\n            coming from a previous prediction iteration. Has form 1xHxW, where\n            for SAM, H=W=256.\n          multimask_output (bool): If true, the model will return three masks.\n            For ambiguous input prompts (such as a single click), this will often\n            produce better masks than a single prediction. If only a single\n            mask is needed, the model's predicted quality score can be used\n            to select the best mask. For non-ambiguous prompts, such as multiple\n            input prompts, multimask_output=False can give better results.\n          return_logits (bool): If true, returns un-thresholded masks logits\n            instead of a binary mask.\n\n        Returns:\n          (np.ndarray): The output masks in CxHxW format, where C is the\n            number of masks, and (H, W) is the original image size.\n          (np.ndarray): An array of length C containing the model's\n            predictions for the quality of each mask.\n          (np.ndarray): An array of shape CxHxW, where C is the number\n            of masks and H=W=256. These low resolution logits can be passed to\n            a subsequent iteration as mask input.\n        \"\"\"\n        if not self.is_image_set:\n            raise RuntimeError(\"An image must be set with .set_image(...) before mask prediction.\")\n\n        # Transform input prompts\n        coords_torch, labels_torch, box_torch, mask_input_torch = None, None, None, None\n        if point_coords is not None:\n            assert (\n                point_labels is not None\n            ), \"point_labels must be supplied if point_coords is supplied.\"\n            point_coords = self.transform.apply_coords(point_coords, self.original_size)\n            coords_torch = torch.as_tensor(point_coords, dtype=torch.float, device=self.device)\n            labels_torch = torch.as_tensor(point_labels, dtype=torch.int, device=self.device)\n            coords_torch, labels_torch = coords_torch[None, :, :], labels_torch[None, :]\n        if box is not None:\n            box = self.transform.apply_boxes(box, self.original_size)\n            box_torch = torch.as_tensor(box, dtype=torch.float, device=self.device)\n            box_torch = box_torch[None, :]\n        if mask_input is not None:\n            mask_input_torch = torch.as_tensor(mask_input, dtype=torch.float, device=self.device)\n            mask_input_torch = mask_input_torch[None, :, :, :]\n\n        masks, iou_predictions, low_res_masks = self.predict_torch(\n            coords_torch,\n            labels_torch,\n            box_torch,\n            mask_input_torch,\n            multimask_output,\n            return_logits=return_logits,\n        )\n\n        masks_np = masks[0].detach().cpu().numpy()\n        iou_predictions_np = iou_predictions[0].detach().cpu().numpy()\n        low_res_masks_np = low_res_masks[0].detach().cpu().numpy()\n        return masks_np, iou_predictions_np, low_res_masks_np\n\n    @torch.no_grad()\n    def predict_torch(\n        self,\n        point_coords: Optional[torch.Tensor],\n        point_labels: Optional[torch.Tensor],\n        boxes: Optional[torch.Tensor] = None,\n        mask_input: Optional[torch.Tensor] = None,\n        multimask_output: bool = True,\n        return_logits: bool = False,\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"\n        Predict masks for the given input prompts, using the currently set image.\n        Input prompts are batched torch tensors and are expected to already be\n        transformed to the input frame using ResizeLongestSide.\n\n        Arguments:\n          point_coords (torch.Tensor or None): A BxNx2 array of point prompts to the\n            model. Each point is in (X,Y) in pixels.\n          point_labels (torch.Tensor or None): A BxN array of labels for the\n            point prompts. 1 indicates a foreground point and 0 indicates a\n            background point.\n          boxes (np.ndarray or None): A Bx4 array given a box prompt to the\n            model, in XYXY format.\n          mask_input (np.ndarray): A low resolution mask input to the model, typically\n            coming from a previous prediction iteration. Has form Bx1xHxW, where\n            for SAM, H=W=256. Masks returned by a previous iteration of the\n            predict method do not need further transformation.\n          multimask_output (bool): If true, the model will return three masks.\n            For ambiguous input prompts (such as a single click), this will often\n            produce better masks than a single prediction. If only a single\n            mask is needed, the model's predicted quality score can be used\n            to select the best mask. For non-ambiguous prompts, such as multiple\n            input prompts, multimask_output=False can give better results.\n          return_logits (bool): If true, returns un-thresholded masks logits\n            instead of a binary mask.\n\n        Returns:\n          (torch.Tensor): The output masks in BxCxHxW format, where C is the\n            number of masks, and (H, W) is the original image size.\n          (torch.Tensor): An array of shape BxC containing the model's\n            predictions for the quality of each mask.\n          (torch.Tensor): An array of shape BxCxHxW, where C is the number\n            of masks and H=W=256. These low res logits can be passed to\n            a subsequent iteration as mask input.\n        \"\"\"\n        if not self.is_image_set:\n            raise RuntimeError(\"An image must be set with .set_image(...) before mask prediction.\")\n\n        if point_coords is not None:\n            points = (point_coords, point_labels)\n        else:\n            points = None\n\n        # Embed prompts\n        sparse_embeddings, dense_embeddings = self.model.prompt_encoder(\n            points=points,\n            boxes=boxes,\n            masks=mask_input,\n        )\n\n        # Predict masks\n        low_res_masks, iou_predictions = self.model.mask_decoder(\n            image_embeddings=self.features,\n            image_pe=self.model.prompt_encoder.get_dense_pe(),\n            sparse_prompt_embeddings=sparse_embeddings,\n            dense_prompt_embeddings=dense_embeddings,\n            multimask_output=multimask_output,\n        )\n\n        # Upscale the masks to the original image resolution\n        masks = self.model.postprocess_masks(low_res_masks, self.input_size, self.original_size)\n\n        if not return_logits:\n            masks = masks > self.model.mask_threshold\n\n        return masks, iou_predictions, low_res_masks\n\n    def get_image_embedding(self) -> torch.Tensor:\n        \"\"\"\n        Returns the image embeddings for the currently set image, with\n        shape 1xCxHxW, where C is the embedding dimension and (H,W) are\n        the embedding spatial dimension of SAM (typically C=256, H=W=64).\n        \"\"\"\n        if not self.is_image_set:\n            raise RuntimeError(\n                \"An image must be set with .set_image(...) to generate an embedding.\"\n            )\n        assert self.features is not None, \"Features must exist if an image has been set.\"\n        return self.features\n\n    @property\n    def device(self) -> torch.device:\n        return self.model.device\n\n    def reset_image(self) -> None:\n        \"\"\"Resets the currently set image.\"\"\"\n        self.is_image_set = False\n        self.features = None\n        self.orig_h = None\n        self.orig_w = None\n        self.input_h = None\n        self.input_w = None\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/segment_anything/utils/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/segment_anything/utils/amg.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport numpy as np\nimport torch\n\nimport math\nfrom copy import deepcopy\nfrom itertools import product\nfrom typing import Any, Dict, Generator, ItemsView, List, Tuple\n\n\nclass MaskData:\n    \"\"\"\n    A structure for storing masks and their related data in batched format.\n    Implements basic filtering and concatenation.\n    \"\"\"\n\n    def __init__(self, **kwargs) -> None:\n        for v in kwargs.values():\n            assert isinstance(\n                v, (list, np.ndarray, torch.Tensor)\n            ), \"MaskData only supports list, numpy arrays, and torch tensors.\"\n        self._stats = dict(**kwargs)\n\n    def __setitem__(self, key: str, item: Any) -> None:\n        assert isinstance(\n            item, (list, np.ndarray, torch.Tensor)\n        ), \"MaskData only supports list, numpy arrays, and torch tensors.\"\n        self._stats[key] = item\n\n    def __delitem__(self, key: str) -> None:\n        del self._stats[key]\n\n    def __getitem__(self, key: str) -> Any:\n        return self._stats[key]\n\n    def items(self) -> ItemsView[str, Any]:\n        return self._stats.items()\n\n    def filter(self, keep: torch.Tensor) -> None:\n        for k, v in self._stats.items():\n            if v is None:\n                self._stats[k] = None\n            elif isinstance(v, torch.Tensor):\n                self._stats[k] = v[torch.as_tensor(keep, device=v.device)]\n            elif isinstance(v, np.ndarray):\n                self._stats[k] = v[keep.detach().cpu().numpy()]\n            elif isinstance(v, list) and keep.dtype == torch.bool:\n                self._stats[k] = [a for i, a in enumerate(v) if keep[i]]\n            elif isinstance(v, list):\n                self._stats[k] = [v[i] for i in keep]\n            else:\n                raise TypeError(f\"MaskData key {k} has an unsupported type {type(v)}.\")\n\n    def cat(self, new_stats: \"MaskData\") -> None:\n        for k, v in new_stats.items():\n            if k not in self._stats or self._stats[k] is None:\n                self._stats[k] = deepcopy(v)\n            elif isinstance(v, torch.Tensor):\n                self._stats[k] = torch.cat([self._stats[k], v], dim=0)\n            elif isinstance(v, np.ndarray):\n                self._stats[k] = np.concatenate([self._stats[k], v], axis=0)\n            elif isinstance(v, list):\n                self._stats[k] = self._stats[k] + deepcopy(v)\n            else:\n                raise TypeError(f\"MaskData key {k} has an unsupported type {type(v)}.\")\n\n    def to_numpy(self) -> None:\n        for k, v in self._stats.items():\n            if isinstance(v, torch.Tensor):\n                if v.dtype == torch.bfloat16:\n                    v = v.to(torch.float32)\n                self._stats[k] = v.detach().cpu().numpy()\n\n\ndef is_box_near_crop_edge(\n    boxes: torch.Tensor, crop_box: List[int], orig_box: List[int], atol: float = 20.0\n) -> torch.Tensor:\n    \"\"\"Filter masks at the edge of a crop, but not at the edge of the original image.\"\"\"\n    crop_box_torch = torch.as_tensor(crop_box, dtype=torch.float, device=boxes.device)\n    orig_box_torch = torch.as_tensor(orig_box, dtype=torch.float, device=boxes.device)\n    boxes = uncrop_boxes_xyxy(boxes, crop_box).float()\n    near_crop_edge = torch.isclose(boxes, crop_box_torch[None, :], atol=atol, rtol=0)\n    near_image_edge = torch.isclose(boxes, orig_box_torch[None, :], atol=atol, rtol=0)\n    near_crop_edge = torch.logical_and(near_crop_edge, ~near_image_edge)\n    return torch.any(near_crop_edge, dim=1)\n\n\ndef box_xyxy_to_xywh(box_xyxy: torch.Tensor) -> torch.Tensor:\n    box_xywh = deepcopy(box_xyxy)\n    box_xywh[2] = box_xywh[2] - box_xywh[0]\n    box_xywh[3] = box_xywh[3] - box_xywh[1]\n    return box_xywh\n\n\ndef batch_iterator(batch_size: int, *args) -> Generator[List[Any], None, None]:\n    assert len(args) > 0 and all(\n        len(a) == len(args[0]) for a in args\n    ), \"Batched iteration must have inputs of all the same size.\"\n    n_batches = len(args[0]) // batch_size + int(len(args[0]) % batch_size != 0)\n    for b in range(n_batches):\n        yield [arg[b * batch_size : (b + 1) * batch_size] for arg in args]\n\n\ndef mask_to_rle_pytorch(tensor: torch.Tensor) -> List[Dict[str, Any]]:\n    \"\"\"\n    Encodes masks to an uncompressed RLE, in the format expected by\n    pycoco tools.\n    \"\"\"\n    # Put in fortran order and flatten h,w\n    b, h, w = tensor.shape\n    tensor = tensor.permute(0, 2, 1).flatten(1)\n\n    # Compute change indices\n    diff = tensor[:, 1:] ^ tensor[:, :-1]\n    change_indices = diff.nonzero()\n\n    # Encode run length\n    out = []\n    for i in range(b):\n        cur_idxs = change_indices[change_indices[:, 0] == i, 1]\n        cur_idxs = torch.cat(\n            [\n                torch.tensor([0], dtype=cur_idxs.dtype, device=cur_idxs.device),\n                cur_idxs + 1,\n                torch.tensor([h * w], dtype=cur_idxs.dtype, device=cur_idxs.device),\n            ]\n        )\n        btw_idxs = cur_idxs[1:] - cur_idxs[:-1]\n        counts = [] if tensor[i, 0] == 0 else [0]\n        counts.extend(btw_idxs.detach().cpu().tolist())\n        out.append({\"size\": [h, w], \"counts\": counts})\n    return out\n\n\ndef rle_to_mask(rle: Dict[str, Any]) -> np.ndarray:\n    \"\"\"Compute a binary mask from an uncompressed RLE.\"\"\"\n    h, w = rle[\"size\"]\n    mask = np.empty(h * w, dtype=bool)\n    idx = 0\n    parity = False\n    for count in rle[\"counts\"]:\n        mask[idx : idx + count] = parity\n        idx += count\n        parity ^= True\n    mask = mask.reshape(w, h)\n    return mask.transpose()  # Put in C order\n\n\ndef area_from_rle(rle: Dict[str, Any]) -> int:\n    return sum(rle[\"counts\"][1::2])\n\n\ndef calculate_stability_score(\n    masks: torch.Tensor, mask_threshold: float, threshold_offset: float\n) -> torch.Tensor:\n    \"\"\"\n    Computes the stability score for a batch of masks. The stability\n    score is the IoU between the binary masks obtained by thresholding\n    the predicted mask logits at high and low values.\n    \"\"\"\n    # One mask is always contained inside the other.\n    # Save memory by preventing unnecessary cast to torch.int64\n    intersections = (\n        (masks > (mask_threshold + threshold_offset))\n        .sum(-1, dtype=torch.int16)\n        .sum(-1, dtype=torch.int32)\n    )\n    unions = (\n        (masks > (mask_threshold - threshold_offset))\n        .sum(-1, dtype=torch.int16)\n        .sum(-1, dtype=torch.int32)\n    )\n    return intersections / unions\n\n\ndef build_point_grid(n_per_side: int) -> np.ndarray:\n    \"\"\"Generates a 2D grid of points evenly spaced in [0,1]x[0,1].\"\"\"\n    offset = 1 / (2 * n_per_side)\n    points_one_side = np.linspace(offset, 1 - offset, n_per_side)\n    points_x = np.tile(points_one_side[None, :], (n_per_side, 1))\n    points_y = np.tile(points_one_side[:, None], (1, n_per_side))\n    points = np.stack([points_x, points_y], axis=-1).reshape(-1, 2)\n    return points\n\n\ndef build_all_layer_point_grids(\n    n_per_side: int, n_layers: int, scale_per_layer: int\n) -> List[np.ndarray]:\n    \"\"\"Generates point grids for all crop layers.\"\"\"\n    points_by_layer = []\n    for i in range(n_layers + 1):\n        n_points = int(n_per_side / (scale_per_layer**i))\n        points_by_layer.append(build_point_grid(n_points))\n    return points_by_layer\n\n\ndef generate_crop_boxes(\n    im_size: Tuple[int, ...], n_layers: int, overlap_ratio: float\n) -> Tuple[List[List[int]], List[int]]:\n    \"\"\"\n    Generates a list of crop boxes of different sizes. Each layer\n    has (2**i)**2 boxes for the ith layer.\n    \"\"\"\n    crop_boxes, layer_idxs = [], []\n    im_h, im_w = im_size\n    short_side = min(im_h, im_w)\n\n    # Original image\n    crop_boxes.append([0, 0, im_w, im_h])\n    layer_idxs.append(0)\n\n    def crop_len(orig_len, n_crops, overlap):\n        return int(math.ceil((overlap * (n_crops - 1) + orig_len) / n_crops))\n\n    for i_layer in range(n_layers):\n        n_crops_per_side = 2 ** (i_layer + 1)\n        overlap = int(overlap_ratio * short_side * (2 / n_crops_per_side))\n\n        crop_w = crop_len(im_w, n_crops_per_side, overlap)\n        crop_h = crop_len(im_h, n_crops_per_side, overlap)\n\n        crop_box_x0 = [int((crop_w - overlap) * i) for i in range(n_crops_per_side)]\n        crop_box_y0 = [int((crop_h - overlap) * i) for i in range(n_crops_per_side)]\n\n        # Crops in XYWH format\n        for x0, y0 in product(crop_box_x0, crop_box_y0):\n            box = [x0, y0, min(x0 + crop_w, im_w), min(y0 + crop_h, im_h)]\n            crop_boxes.append(box)\n            layer_idxs.append(i_layer + 1)\n\n    return crop_boxes, layer_idxs\n\n\ndef uncrop_boxes_xyxy(boxes: torch.Tensor, crop_box: List[int]) -> torch.Tensor:\n    x0, y0, _, _ = crop_box\n    offset = torch.tensor([[x0, y0, x0, y0]], device=boxes.device)\n    # Check if boxes has a channel dimension\n    if len(boxes.shape) == 3:\n        offset = offset.unsqueeze(1)\n    return boxes + offset\n\n\ndef uncrop_points(points: torch.Tensor, crop_box: List[int]) -> torch.Tensor:\n    x0, y0, _, _ = crop_box\n    offset = torch.tensor([[x0, y0]], device=points.device)\n    # Check if points has a channel dimension\n    if len(points.shape) == 3:\n        offset = offset.unsqueeze(1)\n    return points + offset\n\n\ndef uncrop_masks(\n    masks: torch.Tensor, crop_box: List[int], orig_h: int, orig_w: int\n) -> torch.Tensor:\n    x0, y0, x1, y1 = crop_box\n    if x0 == 0 and y0 == 0 and x1 == orig_w and y1 == orig_h:\n        return masks\n    # Coordinate transform masks\n    pad_x, pad_y = orig_w - (x1 - x0), orig_h - (y1 - y0)\n    pad = (x0, pad_x - x0, y0, pad_y - y0)\n    return torch.nn.functional.pad(masks, pad, value=0)\n\n\ndef remove_small_regions(\n    mask: np.ndarray, area_thresh: float, mode: str\n) -> Tuple[np.ndarray, bool]:\n    \"\"\"\n    Removes small disconnected regions and holes in a mask. Returns the\n    mask and an indicator of if the mask has been modified.\n    \"\"\"\n    import cv2  # type: ignore\n\n    assert mode in [\"holes\", \"islands\"]\n    correct_holes = mode == \"holes\"\n    working_mask = (correct_holes ^ mask).astype(np.uint8)\n    n_labels, regions, stats, _ = cv2.connectedComponentsWithStats(working_mask, 8)\n    sizes = stats[:, -1][1:]  # Row 0 is background label\n    small_regions = [i + 1 for i, s in enumerate(sizes) if s < area_thresh]\n    if len(small_regions) == 0:\n        return mask, False\n    fill_labels = [0] + small_regions\n    if not correct_holes:\n        fill_labels = [i for i in range(n_labels) if i not in fill_labels]\n        # If every region is below threshold, keep largest\n        if len(fill_labels) == 0:\n            fill_labels = [int(np.argmax(sizes)) + 1]\n    mask = np.isin(regions, fill_labels)\n    return mask, True\n\n\ndef coco_encode_rle(uncompressed_rle: Dict[str, Any]) -> Dict[str, Any]:\n    from pycocotools import mask as mask_utils  # type: ignore\n\n    h, w = uncompressed_rle[\"size\"]\n    rle = mask_utils.frPyObjects(uncompressed_rle, h, w)\n    rle[\"counts\"] = rle[\"counts\"].decode(\"utf-8\")  # Necessary to serialize with json\n    return rle\n\n\ndef batched_mask_to_box(masks: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Calculates boxes in XYXY format around masks. Return [0,0,0,0] for\n    an empty mask. For input shape C1xC2x...xHxW, the output shape is C1xC2x...x4.\n    \"\"\"\n    # torch.max below raises an error on empty inputs, just skip in this case\n    if torch.numel(masks) == 0:\n        return torch.zeros(*masks.shape[:-2], 4, device=masks.device)\n\n    # Normalize shape to CxHxW\n    shape = masks.shape\n    h, w = shape[-2:]\n    if len(shape) > 2:\n        masks = masks.flatten(0, -3)\n    else:\n        masks = masks.unsqueeze(0)\n\n    # Get top and bottom edges\n    in_height, _ = torch.max(masks, dim=-1)\n    in_height_coords = in_height * torch.arange(h, device=in_height.device)[None, :]\n    bottom_edges, _ = torch.max(in_height_coords, dim=-1)\n    in_height_coords = in_height_coords + h * (~in_height)\n    top_edges, _ = torch.min(in_height_coords, dim=-1)\n\n    # Get left and right edges\n    in_width, _ = torch.max(masks, dim=-2)\n    in_width_coords = in_width * torch.arange(w, device=in_width.device)[None, :]\n    right_edges, _ = torch.max(in_width_coords, dim=-1)\n    in_width_coords = in_width_coords + w * (~in_width)\n    left_edges, _ = torch.min(in_width_coords, dim=-1)\n\n    # If the mask is empty the right edge will be to the left of the left edge.\n    # Replace these boxes with [0, 0, 0, 0]\n    empty_filter = (right_edges < left_edges) | (bottom_edges < top_edges)\n    out = torch.stack([left_edges, top_edges, right_edges, bottom_edges], dim=-1)\n    out = out * (~empty_filter).unsqueeze(-1)\n\n    # Return to original shape\n    if len(shape) > 2:\n        out = out.reshape(*shape[:-2], 4)\n    else:\n        out = out[0]\n\n    return out\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/segment_anything/utils/onnx.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch\nimport torch.nn as nn\nfrom torch.nn import functional as F\n\nfrom typing import Tuple\n\nfrom ..modeling import Sam\nfrom .amg import calculate_stability_score\n\n\nclass SamOnnxModel(nn.Module):\n    \"\"\"\n    This model should not be called directly, but is used in ONNX export.\n    It combines the prompt encoder, mask decoder, and mask postprocessing of Sam,\n    with some functions modified to enable model tracing. Also supports extra\n    options controlling what information. See the ONNX export script for details.\n    \"\"\"\n\n    def __init__(\n        self,\n        model: Sam,\n        return_single_mask: bool,\n        use_stability_score: bool = False,\n        return_extra_metrics: bool = False,\n    ) -> None:\n        super().__init__()\n        self.mask_decoder = model.mask_decoder\n        self.model = model\n        self.img_size = model.image_encoder.img_size\n        self.return_single_mask = return_single_mask\n        self.use_stability_score = use_stability_score\n        self.stability_score_offset = 1.0\n        self.return_extra_metrics = return_extra_metrics\n\n    @staticmethod\n    def resize_longest_image_size(\n        input_image_size: torch.Tensor, longest_side: int\n    ) -> torch.Tensor:\n        input_image_size = input_image_size.to(torch.float32)\n        scale = longest_side / torch.max(input_image_size)\n        transformed_size = scale * input_image_size\n        transformed_size = torch.floor(transformed_size + 0.5).to(torch.int64)\n        return transformed_size\n\n    def _embed_points(self, point_coords: torch.Tensor, point_labels: torch.Tensor) -> torch.Tensor:\n        point_coords = point_coords + 0.5\n        point_coords = point_coords / self.img_size\n        point_embedding = self.model.prompt_encoder.pe_layer._pe_encoding(point_coords)\n        point_labels = point_labels.unsqueeze(-1).expand_as(point_embedding)\n\n        point_embedding = point_embedding * (point_labels != -1)\n        point_embedding = point_embedding + self.model.prompt_encoder.not_a_point_embed.weight * (\n            point_labels == -1\n        )\n\n        for i in range(self.model.prompt_encoder.num_point_embeddings):\n            point_embedding = point_embedding + self.model.prompt_encoder.point_embeddings[\n                i\n            ].weight * (point_labels == i)\n\n        return point_embedding\n\n    def _embed_masks(self, input_mask: torch.Tensor, has_mask_input: torch.Tensor) -> torch.Tensor:\n        mask_embedding = has_mask_input * self.model.prompt_encoder.mask_downscaling(input_mask)\n        mask_embedding = mask_embedding + (\n            1 - has_mask_input\n        ) * self.model.prompt_encoder.no_mask_embed.weight.reshape(1, -1, 1, 1)\n        return mask_embedding\n\n    def mask_postprocessing(self, masks: torch.Tensor, orig_im_size: torch.Tensor) -> torch.Tensor:\n        masks = F.interpolate(\n            masks,\n            size=(self.img_size, self.img_size),\n            mode=\"bilinear\",\n            align_corners=False,\n        )\n\n        prepadded_size = self.resize_longest_image_size(orig_im_size, self.img_size).to(torch.int64)\n        masks = masks[..., : prepadded_size[0], : prepadded_size[1]]  # type: ignore\n\n        orig_im_size = orig_im_size.to(torch.int64)\n        h, w = orig_im_size[0], orig_im_size[1]\n        masks = F.interpolate(masks, size=(h, w), mode=\"bilinear\", align_corners=False)\n        return masks\n\n    def select_masks(\n        self, masks: torch.Tensor, iou_preds: torch.Tensor, num_points: int\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        # Determine if we should return the multiclick mask or not from the number of points.\n        # The reweighting is used to avoid control flow.\n        score_reweight = torch.tensor(\n            [[1000] + [0] * (self.model.mask_decoder.num_mask_tokens - 1)]\n        ).to(iou_preds.device)\n        score = iou_preds + (num_points - 2.5) * score_reweight\n        best_idx = torch.argmax(score, dim=1)\n        masks = masks[torch.arange(masks.shape[0]), best_idx, :, :].unsqueeze(1)\n        iou_preds = iou_preds[torch.arange(masks.shape[0]), best_idx].unsqueeze(1)\n\n        return masks, iou_preds\n\n    @torch.no_grad()\n    def forward(\n        self,\n        image_embeddings: torch.Tensor,\n        point_coords: torch.Tensor,\n        point_labels: torch.Tensor,\n        mask_input: torch.Tensor,\n        has_mask_input: torch.Tensor,\n        orig_im_size: torch.Tensor,\n    ):\n        sparse_embedding = self._embed_points(point_coords, point_labels)\n        dense_embedding = self._embed_masks(mask_input, has_mask_input)\n\n        masks, scores = self.model.mask_decoder.predict_masks(\n            image_embeddings=image_embeddings,\n            image_pe=self.model.prompt_encoder.get_dense_pe(),\n            sparse_prompt_embeddings=sparse_embedding,\n            dense_prompt_embeddings=dense_embedding,\n        )\n\n        if self.use_stability_score:\n            scores = calculate_stability_score(\n                masks, self.model.mask_threshold, self.stability_score_offset\n            )\n\n        if self.return_single_mask:\n            masks, scores = self.select_masks(masks, scores, point_coords.shape[1])\n\n        upscaled_masks = self.mask_postprocessing(masks, orig_im_size)\n\n        if self.return_extra_metrics:\n            stability_scores = calculate_stability_score(\n                upscaled_masks, self.model.mask_threshold, self.stability_score_offset\n            )\n            areas = (upscaled_masks > self.model.mask_threshold).sum(-1).sum(-1)\n            return upscaled_masks, scores, stability_scores, areas, masks\n\n        return upscaled_masks, scores, masks\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/segment_anything/utils/transforms.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport numpy as np\nimport torch\nfrom torch.nn import functional as F\nfrom torchvision.transforms.functional import resize, to_pil_image  # type: ignore\n\nfrom copy import deepcopy\nfrom typing import Tuple\n\n\nclass ResizeLongestSide:\n    \"\"\"\n    Resizes images to the longest side 'target_length', as well as provides\n    methods for resizing coordinates and boxes. Provides methods for\n    transforming both numpy array and batched torch tensors.\n    \"\"\"\n\n    def __init__(self, target_length: int) -> None:\n        self.target_length = target_length\n\n    def apply_image(self, image: np.ndarray) -> np.ndarray:\n        \"\"\"\n        Expects a numpy array with shape HxWxC in uint8 format.\n        \"\"\"\n        target_size = self.get_preprocess_shape(image.shape[0], image.shape[1], self.target_length)\n        return np.array(resize(to_pil_image(image), target_size))\n\n    def apply_coords(self, coords: np.ndarray, original_size: Tuple[int, ...]) -> np.ndarray:\n        \"\"\"\n        Expects a numpy array of length 2 in the final dimension. Requires the\n        original image size in (H, W) format.\n        \"\"\"\n        old_h, old_w = original_size\n        new_h, new_w = self.get_preprocess_shape(\n            original_size[0], original_size[1], self.target_length\n        )\n        coords = deepcopy(coords).astype(float)\n        coords[..., 0] = coords[..., 0] * (new_w / old_w)\n        coords[..., 1] = coords[..., 1] * (new_h / old_h)\n        return coords\n\n    def apply_boxes(self, boxes: np.ndarray, original_size: Tuple[int, ...]) -> np.ndarray:\n        \"\"\"\n        Expects a numpy array shape Bx4. Requires the original image size\n        in (H, W) format.\n        \"\"\"\n        boxes = self.apply_coords(boxes.reshape(-1, 2, 2), original_size)\n        return boxes.reshape(-1, 4)\n\n    def apply_image_torch(self, image: torch.Tensor) -> torch.Tensor:\n        \"\"\"\n        Expects batched images with shape BxCxHxW and float format. This\n        transformation may not exactly match apply_image. apply_image is\n        the transformation expected by the model.\n        \"\"\"\n        # Expects an image in BCHW format. May not exactly match apply_image.\n        target_size = self.get_preprocess_shape(image.shape[2], image.shape[3], self.target_length)\n        return F.interpolate(\n            image, target_size, mode=\"bilinear\", align_corners=False, antialias=True\n        )\n\n    def apply_coords_torch(\n        self, coords: torch.Tensor, original_size: Tuple[int, ...]\n    ) -> torch.Tensor:\n        \"\"\"\n        Expects a torch tensor with length 2 in the last dimension. Requires the\n        original image size in (H, W) format.\n        \"\"\"\n        old_h, old_w = original_size\n        new_h, new_w = self.get_preprocess_shape(\n            original_size[0], original_size[1], self.target_length\n        )\n        coords = deepcopy(coords).to(torch.float)\n        coords[..., 0] = coords[..., 0] * (new_w / old_w)\n        coords[..., 1] = coords[..., 1] * (new_h / old_h)\n        return coords\n\n    def apply_boxes_torch(\n        self, boxes: torch.Tensor, original_size: Tuple[int, ...]\n    ) -> torch.Tensor:\n        \"\"\"\n        Expects a torch tensor with shape Bx4. Requires the original image\n        size in (H, W) format.\n        \"\"\"\n        boxes = self.apply_coords_torch(boxes.reshape(-1, 2, 2), original_size)\n        return boxes.reshape(-1, 4)\n\n    @staticmethod\n    def get_preprocess_shape(oldh: int, oldw: int, long_side_length: int) -> Tuple[int, int]:\n        \"\"\"\n        Compute the output size given input size and target long side length.\n        \"\"\"\n        scale = long_side_length * 1.0 / max(oldh, oldw)\n        newh, neww = oldh * scale, oldw * scale\n        neww = int(neww + 0.5)\n        newh = int(newh + 0.5)\n        return (newh, neww)\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/setup.cfg",
    "content": "[isort]\nline_length=100\nmulti_line_output=3\ninclude_trailing_comma=True\nknown_standard_library=numpy,setuptools\nskip_glob=*/__init__.py\nknown_myself=segment_anything\nknown_third_party=matplotlib,cv2,torch,torchvision,pycocotools,onnx,black,isort\nno_lines_before=STDLIB,THIRDPARTY\nsections=FUTURE,STDLIB,THIRDPARTY,MYSELF,FIRSTPARTY,LOCALFOLDER\ndefault_section=FIRSTPARTY\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-1/setup.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom setuptools import find_packages, setup\n\nsetup(\n    name=\"segment_anything\",\n    version=\"1.0\",\n    install_requires=[],\n    packages=find_packages(exclude=\"notebooks\"),\n    extras_require={\n        \"all\": [\"matplotlib\", \"pycocotools\", \"opencv-python\", \"onnx\", \"onnxruntime\"],\n        \"dev\": [\"flake8\", \"isort\", \"black\", \"mypy\"],\n    },\n)\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/.clang-format",
    "content": "AccessModifierOffset: -1\nAlignAfterOpenBracket: AlwaysBreak\nAlignConsecutiveAssignments: false\nAlignConsecutiveDeclarations: false\nAlignEscapedNewlinesLeft: true\nAlignOperands:   false\nAlignTrailingComments: false\nAllowAllParametersOfDeclarationOnNextLine: false\nAllowShortBlocksOnASingleLine: false\nAllowShortCaseLabelsOnASingleLine: false\nAllowShortFunctionsOnASingleLine: Empty\nAllowShortIfStatementsOnASingleLine: false\nAllowShortLoopsOnASingleLine: false\nAlwaysBreakAfterReturnType: None\nAlwaysBreakBeforeMultilineStrings: true\nAlwaysBreakTemplateDeclarations: true\nBinPackArguments: false\nBinPackParameters: false\nBraceWrapping:\n  AfterClass:      false\n  AfterControlStatement: false\n  AfterEnum:       false\n  AfterFunction:   false\n  AfterNamespace:  false\n  AfterObjCDeclaration: false\n  AfterStruct:     false\n  AfterUnion:      false\n  BeforeCatch:     false\n  BeforeElse:      false\n  IndentBraces:    false\nBreakBeforeBinaryOperators: None\nBreakBeforeBraces: Attach\nBreakBeforeTernaryOperators: true\nBreakConstructorInitializersBeforeComma: false\nBreakAfterJavaFieldAnnotations: false\nBreakStringLiterals: false\nColumnLimit:     80\nCommentPragmas:  '^ IWYU pragma:'\nConstructorInitializerAllOnOneLineOrOnePerLine: true\nConstructorInitializerIndentWidth: 4\nContinuationIndentWidth: 4\nCpp11BracedListStyle: true\nDerivePointerAlignment: false\nDisableFormat:   false\nForEachMacros:   [ FOR_EACH, FOR_EACH_R, FOR_EACH_RANGE, ]\nIncludeCategories:\n  - Regex:           '^<.*\\.h(pp)?>'\n    Priority:        1\n  - Regex:           '^<.*'\n    Priority:        2\n  - Regex:           '.*'\n    Priority:        3\nIndentCaseLabels: true\nIndentWidth:     2\nIndentWrappedFunctionNames: false\nKeepEmptyLinesAtTheStartOfBlocks: false\nMacroBlockBegin: ''\nMacroBlockEnd:   ''\nMaxEmptyLinesToKeep: 1\nNamespaceIndentation: None\nObjCBlockIndentWidth: 2\nObjCSpaceAfterProperty: false\nObjCSpaceBeforeProtocolList: false\nPenaltyBreakBeforeFirstCallParameter: 1\nPenaltyBreakComment: 300\nPenaltyBreakFirstLessLess: 120\nPenaltyBreakString: 1000\nPenaltyExcessCharacter: 1000000\nPenaltyReturnTypeOnItsOwnLine: 200\nPointerAlignment: Left\nReflowComments:  true\nSortIncludes:    true\nSpaceAfterCStyleCast: false\nSpaceBeforeAssignmentOperators: true\nSpaceBeforeParens: ControlStatements\nSpaceInEmptyParentheses: false\nSpacesBeforeTrailingComments: 1\nSpacesInAngles:  false\nSpacesInContainerLiterals: true\nSpacesInCStyleCastParentheses: false\nSpacesInParentheses: false\nSpacesInSquareBrackets: false\nStandard:        Cpp11\nTabWidth:        8\nUseTab:          Never\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/.gitignore",
    "content": ".vscode/\n.DS_Store\n__pycache__/\n*-checkpoint.ipynb\n.venv\n*.egg*\nbuild/*\n_C.*\noutputs/*\ncheckpoints/*.pt\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/.watchmanconfig",
    "content": "{}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/CODE_OF_CONDUCT.md",
    "content": "# Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to make participation in our project and\nour community a harassment-free experience for everyone, regardless of age, body\nsize, disability, ethnicity, sex characteristics, gender identity and expression,\nlevel of experience, education, socio-economic status, nationality, personal\nappearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or\n  advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic\n  address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n  professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable\nbehavior and are expected to take appropriate and fair corrective action in\nresponse to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or\nreject comments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct, or to ban temporarily or\npermanently any contributor for other behaviors that they deem inappropriate,\nthreatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies within all project spaces, and it also applies when\nan individual is representing the project or its community in public spaces.\nExamples of representing a project or community include using an official\nproject e-mail address, posting via an official social media account, or acting\nas an appointed representative at an online or offline event. Representation of\na project may be further defined and clarified by project maintainers.\n\nThis Code of Conduct also applies outside the project spaces when there is a\nreasonable belief that an individual's behavior may have a negative impact on\nthe project or its community.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported by contacting the project team at <opensource-conduct@fb.com>. All\ncomplaints will be reviewed and investigated and will result in a response that\nis deemed necessary and appropriate to the circumstances. The project team is\nobligated to maintain confidentiality with regard to the reporter of an incident.\nFurther details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good\nfaith may face temporary or permanent repercussions as determined by other\nmembers of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,\navailable at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\n[homepage]: https://www.contributor-covenant.org\n\nFor answers to common questions about this code of conduct, see\nhttps://www.contributor-covenant.org/faq\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/CONTRIBUTING.md",
    "content": "# Contributing to segment-anything\nWe want to make contributing to this project as easy and transparent as\npossible.\n\n## Pull Requests\nWe actively welcome your pull requests.\n\n1. Fork the repo and create your branch from `main`.\n2. If you've added code that should be tested, add tests.\n3. If you've changed APIs, update the documentation.\n4. Ensure the test suite passes.\n5. Make sure your code lints, using the `ufmt format` command. Linting requires `black==24.2.0`, `usort==1.0.2`, and `ufmt==2.0.0b2`, which can be installed via `pip install -e \".[dev]\"`.\n6. If you haven't already, complete the Contributor License Agreement (\"CLA\").\n\n## Contributor License Agreement (\"CLA\")\nIn order to accept your pull request, we need you to submit a CLA. You only need\nto do this once to work on any of Facebook's open source projects.\n\nComplete your CLA here: <https://code.facebook.com/cla>\n\n## Issues\nWe use GitHub issues to track public bugs. Please ensure your description is\nclear and has sufficient instructions to be able to reproduce the issue.\n\nFacebook has a [bounty program](https://www.facebook.com/whitehat/) for the safe\ndisclosure of security bugs. In those cases, please go through the process\noutlined on that page and do not file a public issue.\n\n## License\nBy contributing to segment-anything, you agree that your contributions will be licensed\nunder the LICENSE file in the root directory of this source tree.\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/INSTALL.md",
    "content": "## Installation\n\n### Requirements\n\n- Linux with Python ≥ 3.10, PyTorch ≥ 2.3.1 and [torchvision](https://github.com/pytorch/vision/) that matches the PyTorch installation. Install them together at https://pytorch.org to ensure this.\n  * Note older versions of Python or PyTorch may also work. However, the versions above are strongly recommended to provide all features such as `torch.compile`.\n- [CUDA toolkits](https://developer.nvidia.com/cuda-toolkit-archive) that match the CUDA version for your PyTorch installation. This should typically be CUDA 12.1 if you follow the default installation command.\n- If you are installing on Windows, it's strongly recommended to use [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) with Ubuntu.\n\nThen, install SAM 2 from the root of this repository via\n```bash\npip install -e \".[notebooks]\"\n```\n\nNote that you may skip building the SAM 2 CUDA extension during installation via environment variable `SAM2_BUILD_CUDA=0`, as follows:\n```bash\n# skip the SAM 2 CUDA extension\nSAM2_BUILD_CUDA=0 pip install -e \".[notebooks]\"\n```\nThis would also skip the post-processing step at runtime (removing small holes and sprinkles in the output masks, which requires the CUDA extension), but shouldn't affect the results in most cases.\n\n### Building the SAM 2 CUDA extension\n\nBy default, we allow the installation to proceed even if the SAM 2 CUDA extension fails to build. (In this case, the build errors are hidden unless using `-v` for verbose output in `pip install`.)\n\nIf you see a message like `Skipping the post-processing step due to the error above` at runtime or `Failed to build the SAM 2 CUDA extension due to the error above` during installation, it indicates that the SAM 2 CUDA extension failed to build in your environment. In this case, **you can still use SAM 2 for both image and video applications**. The post-processing step (removing small holes and sprinkles in the output masks) will be skipped, but this shouldn't affect the results in most cases.\n\nIf you would like to enable this post-processing step, you can reinstall SAM 2 on a GPU machine with environment variable `SAM2_BUILD_ALLOW_ERRORS=0` to force building the CUDA extension (and raise errors if it fails to build), as follows\n```bash\npip uninstall -y SAM-2 && \\\nrm -f ./sam2/*.so && \\\nSAM2_BUILD_ALLOW_ERRORS=0 pip install -v -e \".[notebooks]\"\n```\n\nNote that PyTorch needs to be installed first before building the SAM 2 CUDA extension. It's also necessary to install [CUDA toolkits](https://developer.nvidia.com/cuda-toolkit-archive) that match the CUDA version for your PyTorch installation. (This should typically be CUDA 12.1 if you follow the default installation command.) After installing the CUDA toolkits, you can check its version via `nvcc --version`.\n\nPlease check the section below on common installation issues if the CUDA extension fails to build during installation or load at runtime.\n\n### Common Installation Issues\n\nClick each issue for its solutions:\n\n<details>\n<summary>\nI got `ImportError: cannot import name '_C' from 'sam2'`\n</summary>\n<br/>\n\nThis is usually because you haven't run the `pip install -e \".[notebooks]\"` step above or the installation failed. Please install SAM 2 first, and see the other issues if your installation fails.\n\nIn some systems, you may need to run `python setup.py build_ext --inplace` in the SAM 2 repo root as suggested in https://github.com/facebookresearch/sam2/issues/77.\n</details>\n\n<details>\n<summary>\nI got `MissingConfigException: Cannot find primary config 'configs/sam2.1/sam2.1_hiera_l.yaml'`\n</summary>\n<br/>\n\nThis is usually because you haven't run the `pip install -e .` step above, so `sam2` isn't in your Python's `sys.path`. Please run this installation step. In case it still fails after the installation step, you may try manually adding the root of this repo to `PYTHONPATH` via\n```bash\nexport SAM2_REPO_ROOT=/path/to/sam2  # path to this repo\nexport PYTHONPATH=\"${SAM2_REPO_ROOT}:${PYTHONPATH}\"\n```\nto manually add `sam2_configs` into your Python's `sys.path`.\n\n</details>\n\n<details>\n<summary>\nI got `RuntimeError: Error(s) in loading state_dict for SAM2Base` when loading the new SAM 2.1 checkpoints\n</summary>\n<br/>\n\nThis is likely because you have installed a previous version of this repo, which doesn't have the new modules to support the SAM 2.1 checkpoints yet. Please try the following steps:\n\n1. pull the latest code from the `main` branch of this repo\n2. run `pip uninstall -y SAM-2` to uninstall any previous installations\n3. then install the latest repo again using `pip install -e \".[notebooks]\"`\n\nIn case the steps above still don't resolve the error, please try running in your Python environment the following\n```python\nfrom sam2.modeling import sam2_base\n\nprint(sam2_base.__file__)\n```\nand check whether the content in the printed local path of `sam2/modeling/sam2_base.py` matches the latest one in https://github.com/facebookresearch/sam2/blob/main/sam2/modeling/sam2_base.py (e.g. whether your local file has `no_obj_embed_spatial`) to indentify if you're still using a previous installation.\n\n</details>\n\n<details>\n<summary>\nMy installation failed with `CUDA_HOME environment variable is not set`\n</summary>\n<br/>\n\nThis usually happens because the installation step cannot find the CUDA toolkits (that contain the NVCC compiler) to build a custom CUDA kernel in SAM 2. Please install [CUDA toolkits](https://developer.nvidia.com/cuda-toolkit-archive) or the version that matches the CUDA version for your PyTorch installation. If the error persists after installing CUDA toolkits, you may explicitly specify `CUDA_HOME` via\n```\nexport CUDA_HOME=/usr/local/cuda  # change to your CUDA toolkit path\n```\nand rerun the installation.\n\nAlso, you should make sure\n```\npython -c 'import torch; from torch.utils.cpp_extension import CUDA_HOME; print(torch.cuda.is_available(), CUDA_HOME)'\n```\nprint `(True, a directory with cuda)` to verify that the CUDA toolkits are correctly set up.\n\nIf you are still having problems after verifying that the CUDA toolkit is installed and the `CUDA_HOME` environment variable is set properly, you may have to add the `--no-build-isolation` flag to the pip command:\n```\npip install --no-build-isolation -e .\n```\n\n</details>\n\n<details>\n<summary>\nI got `undefined symbol: _ZN3c1015SmallVectorBaseIjE8grow_podEPKvmm` (or similar errors)\n</summary>\n<br/>\n\nThis usually happens because you have multiple versions of dependencies (PyTorch or CUDA) in your environment. During installation, the SAM 2 library is compiled against one version library while at run time it links against another version. This might be due to that you have different versions of PyTorch or CUDA installed separately via `pip` or `conda`. You may delete one of the duplicates to only keep a single PyTorch and CUDA version.\n\nIn particular, if you have a lower PyTorch version than 2.3.1, it's recommended to upgrade to PyTorch 2.3.1 or higher first. Otherwise, the installation script will try to upgrade to the latest PyTorch using `pip`, which could sometimes lead to duplicated PyTorch installation if you have previously installed another PyTorch version using `conda`.\n\nWe have been building SAM 2 against PyTorch 2.3.1 internally. However, a few user comments (e.g. https://github.com/facebookresearch/sam2/issues/22, https://github.com/facebookresearch/sam2/issues/14) suggested that downgrading to PyTorch 2.1.0 might resolve this problem. In case the error persists, you may try changing the restriction from `torch>=2.3.1` to `torch>=2.1.0` in both [`pyproject.toml`](pyproject.toml) and [`setup.py`](setup.py) to allow PyTorch 2.1.0.\n</details>\n\n<details>\n<summary>\nI got `CUDA error: no kernel image is available for execution on the device`\n</summary>\n<br/>\n\nA possible cause could be that the CUDA kernel is somehow not compiled towards your GPU's CUDA [capability](https://developer.nvidia.com/cuda-gpus). This could happen if the installation is done in an environment different from the runtime (e.g. in a slurm system).\n\nYou can try pulling the latest code from the SAM 2 repo and running the following\n```\nexport TORCH_CUDA_ARCH_LIST=9.0 8.0 8.6 8.9 7.0 7.2 7.5 6.0`\n```\nto manually specify the CUDA capability in the compilation target that matches your GPU.\n</details>\n\n<details>\n<summary>\nI got `RuntimeError: No available kernel. Aborting execution.` (or similar errors)\n</summary>\n<br/>\n\nThis is probably because your machine doesn't have a GPU or a compatible PyTorch version for Flash Attention (see also https://discuss.pytorch.org/t/using-f-scaled-dot-product-attention-gives-the-error-runtimeerror-no-available-kernel-aborting-execution/180900 for a discussion in PyTorch forum). You may be able to resolve this error by replacing the line\n```python\nOLD_GPU, USE_FLASH_ATTN, MATH_KERNEL_ON = get_sdpa_settings()\n```\nin [`sam2/modeling/sam/transformer.py`](sam2/modeling/sam/transformer.py) with\n```python\nOLD_GPU, USE_FLASH_ATTN, MATH_KERNEL_ON = True, True, True\n```\nto relax the attention kernel setting and use other kernels than Flash Attention.\n</details>\n\n<details>\n<summary>\nI got `Error compiling objects for extension`\n</summary>\n<br/>\n\nYou may see error log of:\n> unsupported Microsoft Visual Studio version! Only the versions between 2017 and 2022 (inclusive) are supported! The nvcc flag '-allow-unsupported-compiler' can be used to override this version check; however, using an unsupported host compiler may cause compilation failure or incorrect run time execution. Use at your own risk.\n\nThis is probably because your versions of CUDA and Visual Studio are incompatible. (see also https://stackoverflow.com/questions/78515942/cuda-compatibility-with-visual-studio-2022-version-17-10 for a discussion in stackoverflow).<br> \nYou may be able to fix this by adding the `-allow-unsupported-compiler` argument to `nvcc` after L48 in the [setup.py](https://github.com/facebookresearch/sam2/blob/main/setup.py). <br>\nAfter adding the argument, `get_extension()` will look like this:\n```python\ndef get_extensions():\n    srcs = [\"sam2/csrc/connected_components.cu\"]\n    compile_args = {\n        \"cxx\": [],\n        \"nvcc\": [\n            \"-DCUDA_HAS_FP16=1\",\n            \"-D__CUDA_NO_HALF_OPERATORS__\",\n            \"-D__CUDA_NO_HALF_CONVERSIONS__\",\n            \"-D__CUDA_NO_HALF2_OPERATORS__\",\n            \"-allow-unsupported-compiler\"  # Add this argument\n        ],\n    }\n    ext_modules = [CUDAExtension(\"sam2._C\", srcs, extra_compile_args=compile_args)]\n    return ext_modules\n```\n</details>\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   APPENDIX: How to apply the Apache License to your work.\n\n      To apply the Apache License to your work, attach the following\n      boilerplate notice, with the fields enclosed by brackets \"[]\"\n      replaced with your own identifying information. (Don't include\n      the brackets!)  The text should be enclosed in the appropriate\n      comment syntax for the file format. We also recommend that a\n      file or class name and description of purpose be included on the\n      same \"printed page\" as the copyright notice for easier\n      identification within third-party archives.\n\n   Copyright [yyyy] [name of copyright owner]\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/LICENSE_cctorch",
    "content": "BSD 3-Clause License\n\nCopyright (c) 2020, the respective contributors, as shown by the AUTHORS file.\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its\n   contributors may be used to endorse or promote products derived from\n   this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/MANIFEST.in",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nrecursive-include sam2 *.yaml #include all config files\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/README.md",
    "content": "# SAM 2: Segment Anything in Images and Videos\n\n**[AI at Meta, FAIR](https://ai.meta.com/research/)**\n\n[Nikhila Ravi](https://nikhilaravi.com/), [Valentin Gabeur](https://gabeur.github.io/), [Yuan-Ting Hu](https://scholar.google.com/citations?user=E8DVVYQAAAAJ&hl=en), [Ronghang Hu](https://ronghanghu.com/), [Chaitanya Ryali](https://scholar.google.com/citations?user=4LWx24UAAAAJ&hl=en), [Tengyu Ma](https://scholar.google.com/citations?user=VeTSl0wAAAAJ&hl=en), [Haitham Khedr](https://hkhedr.com/), [Roman Rädle](https://scholar.google.de/citations?user=Tpt57v0AAAAJ&hl=en), [Chloe Rolland](https://scholar.google.com/citations?hl=fr&user=n-SnMhoAAAAJ), [Laura Gustafson](https://scholar.google.com/citations?user=c8IpF9gAAAAJ&hl=en), [Eric Mintun](https://ericmintun.github.io/), [Junting Pan](https://junting.github.io/), [Kalyan Vasudev Alwala](https://scholar.google.co.in/citations?user=m34oaWEAAAAJ&hl=en), [Nicolas Carion](https://www.nicolascarion.com/), [Chao-Yuan Wu](https://chaoyuan.org/), [Ross Girshick](https://www.rossgirshick.info/), [Piotr Dollár](https://pdollar.github.io/), [Christoph Feichtenhofer](https://feichtenhofer.github.io/)\n\n[[`Paper`](https://ai.meta.com/research/publications/sam-2-segment-anything-in-images-and-videos/)] [[`Project`](https://ai.meta.com/sam2)] [[`Demo`](https://sam2.metademolab.com/)] [[`Dataset`](https://ai.meta.com/datasets/segment-anything-video)] [[`Blog`](https://ai.meta.com/blog/segment-anything-2)] [[`BibTeX`](#citing-sam-2)]\n\n![SAM 2 architecture](assets/model_diagram.png?raw=true)\n\n**Segment Anything Model 2 (SAM 2)** is a foundation model towards solving promptable visual segmentation in images and videos. We extend SAM to video by considering images as a video with a single frame. The model design is a simple transformer architecture with streaming memory for real-time video processing. We build a model-in-the-loop data engine, which improves model and data via user interaction, to collect [**our SA-V dataset**](https://ai.meta.com/datasets/segment-anything-video), the largest video segmentation dataset to date. SAM 2 trained on our data provides strong performance across a wide range of tasks and visual domains.\n\n![SA-V dataset](assets/sa_v_dataset.jpg?raw=true)\n\n## Latest updates\n\n**09/30/2024 -- SAM 2.1 Developer Suite (new checkpoints, training code, web demo) is released**\n\n- A new suite of improved model checkpoints (denoted as **SAM 2.1**) are released. See [Model Description](#model-description) for details.\n  * To use the new SAM 2.1 checkpoints, you need the latest model code from this repo. If you have installed an earlier version of this repo, please first uninstall the previous version via `pip uninstall SAM-2`, pull the latest code from this repo (with `git pull`), and then reinstall the repo following [Installation](#installation) below.\n- The training (and fine-tuning) code has been released. See [`training/README.md`](training/README.md) on how to get started.\n- The frontend + backend code for the SAM 2 web demo has been released. See [`demo/README.md`](demo/README.md) for details.\n\n## Installation\n\nSAM 2 needs to be installed first before use. The code requires `python>=3.10`, as well as `torch>=2.3.1` and `torchvision>=0.18.1`. Please follow the instructions [here](https://pytorch.org/get-started/locally/) to install both PyTorch and TorchVision dependencies. You can install SAM 2 on a GPU machine using:\n\n```bash\ngit clone https://github.com/facebookresearch/sam2.git && cd sam2\n\npip install -e .\n```\nIf you are installing on Windows, it's strongly recommended to use [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install) with Ubuntu.\n\nTo use the SAM 2 predictor and run the example notebooks, `jupyter` and `matplotlib` are required and can be installed by:\n\n```bash\npip install -e \".[notebooks]\"\n```\n\nNote:\n1. It's recommended to create a new Python environment via [Anaconda](https://www.anaconda.com/) for this installation and install PyTorch 2.3.1 (or higher) via `pip` following https://pytorch.org/. If you have a PyTorch version lower than 2.3.1 in your current environment, the installation command above will try to upgrade it to the latest PyTorch version using `pip`.\n2. The step above requires compiling a custom CUDA kernel with the `nvcc` compiler. If it isn't already available on your machine, please install the [CUDA toolkits](https://developer.nvidia.com/cuda-toolkit-archive) with a version that matches your PyTorch CUDA version.\n3. If you see a message like `Failed to build the SAM 2 CUDA extension` during installation, you can ignore it and still use SAM 2 (some post-processing functionality may be limited, but it doesn't affect the results in most cases).\n\nPlease see [`INSTALL.md`](./INSTALL.md) for FAQs on potential issues and solutions.\n\n## Getting Started\n\n### Download Checkpoints\n\nFirst, we need to download a model checkpoint. All the model checkpoints can be downloaded by running:\n\n```bash\ncd checkpoints && \\\n./download_ckpts.sh && \\\ncd ..\n```\n\nor individually from:\n\n- [sam2.1_hiera_tiny.pt](https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_tiny.pt)\n- [sam2.1_hiera_small.pt](https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_small.pt)\n- [sam2.1_hiera_base_plus.pt](https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_base_plus.pt)\n- [sam2.1_hiera_large.pt](https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_large.pt)\n\n(note that these are the improved checkpoints denoted as SAM 2.1; see [Model Description](#model-description) for details.)\n\nThen SAM 2 can be used in a few lines as follows for image and video prediction.\n\n### Image prediction\n\nSAM 2 has all the capabilities of [SAM](https://github.com/facebookresearch/segment-anything) on static images, and we provide image prediction APIs that closely resemble SAM for image use cases. The `SAM2ImagePredictor` class has an easy interface for image prompting.\n\n```python\nimport torch\nfrom sam2.build_sam import build_sam2\nfrom sam2.sam2_image_predictor import SAM2ImagePredictor\n\ncheckpoint = \"./checkpoints/sam2.1_hiera_large.pt\"\nmodel_cfg = \"configs/sam2.1/sam2.1_hiera_l.yaml\"\npredictor = SAM2ImagePredictor(build_sam2(model_cfg, checkpoint))\n\nwith torch.inference_mode(), torch.autocast(\"cuda\", dtype=torch.bfloat16):\n    predictor.set_image(<your_image>)\n    masks, _, _ = predictor.predict(<input_prompts>)\n```\n\nPlease refer to the examples in [image_predictor_example.ipynb](./notebooks/image_predictor_example.ipynb) (also in Colab [here](https://colab.research.google.com/github/facebookresearch/sam2/blob/main/notebooks/image_predictor_example.ipynb)) for static image use cases.\n\nSAM 2 also supports automatic mask generation on images just like SAM. Please see [automatic_mask_generator_example.ipynb](./notebooks/automatic_mask_generator_example.ipynb) (also in Colab [here](https://colab.research.google.com/github/facebookresearch/sam2/blob/main/notebooks/automatic_mask_generator_example.ipynb)) for automatic mask generation in images.\n\n### Video prediction\n\nFor promptable segmentation and tracking in videos, we provide a video predictor with APIs for example to add prompts and propagate masklets throughout a video. SAM 2 supports video inference on multiple objects and uses an inference state to keep track of the interactions in each video.\n\n```python\nimport torch\nfrom sam2.build_sam import build_sam2_video_predictor\n\ncheckpoint = \"./checkpoints/sam2.1_hiera_large.pt\"\nmodel_cfg = \"configs/sam2.1/sam2.1_hiera_l.yaml\"\npredictor = build_sam2_video_predictor(model_cfg, checkpoint)\n\nwith torch.inference_mode(), torch.autocast(\"cuda\", dtype=torch.bfloat16):\n    state = predictor.init_state(<your_video>)\n\n    # add new prompts and instantly get the output on the same frame\n    frame_idx, object_ids, masks = predictor.add_new_points_or_box(state, <your_prompts>):\n\n    # propagate the prompts to get masklets throughout the video\n    for frame_idx, object_ids, masks in predictor.propagate_in_video(state):\n        ...\n```\n\nPlease refer to the examples in [video_predictor_example.ipynb](./notebooks/video_predictor_example.ipynb) (also in Colab [here](https://colab.research.google.com/github/facebookresearch/sam2/blob/main/notebooks/video_predictor_example.ipynb)) for details on how to add click or box prompts, make refinements, and track multiple objects in videos.\n\n## Load from 🤗 Hugging Face\n\nAlternatively, models can also be loaded from [Hugging Face](https://huggingface.co/models?search=facebook/sam2) (requires `pip install huggingface_hub`).\n\nFor image prediction:\n\n```python\nimport torch\nfrom sam2.sam2_image_predictor import SAM2ImagePredictor\n\npredictor = SAM2ImagePredictor.from_pretrained(\"facebook/sam2-hiera-large\")\n\nwith torch.inference_mode(), torch.autocast(\"cuda\", dtype=torch.bfloat16):\n    predictor.set_image(<your_image>)\n    masks, _, _ = predictor.predict(<input_prompts>)\n```\n\nFor video prediction:\n\n```python\nimport torch\nfrom sam2.sam2_video_predictor import SAM2VideoPredictor\n\npredictor = SAM2VideoPredictor.from_pretrained(\"facebook/sam2-hiera-large\")\n\nwith torch.inference_mode(), torch.autocast(\"cuda\", dtype=torch.bfloat16):\n    state = predictor.init_state(<your_video>)\n\n    # add new prompts and instantly get the output on the same frame\n    frame_idx, object_ids, masks = predictor.add_new_points_or_box(state, <your_prompts>):\n\n    # propagate the prompts to get masklets throughout the video\n    for frame_idx, object_ids, masks in predictor.propagate_in_video(state):\n        ...\n```\n\n## Model Description\n\n### SAM 2.1 checkpoints\n\nThe table below shows the improved SAM 2.1 checkpoints released on September 29, 2024.\n|      **Model**       | **Size (M)** |    **Speed (FPS)**     | **SA-V test (J&F)** | **MOSE val (J&F)** | **LVOS v2 (J&F)** |\n| :------------------: | :----------: | :--------------------: | :-----------------: | :----------------: | :---------------: |\n|   sam2.1_hiera_tiny <br /> ([config](sam2/configs/sam2.1/sam2.1_hiera_t.yaml), [checkpoint](https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_tiny.pt))    |     38.9     |          47.2          |        76.5         |        71.8        |       77.3        |\n|   sam2.1_hiera_small <br /> ([config](sam2/configs/sam2.1/sam2.1_hiera_s.yaml), [checkpoint](https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_small.pt))   |      46      | 43.3 (53.0 compiled\\*) |        76.6         |        73.5        |       78.3        |\n| sam2.1_hiera_base_plus <br /> ([config](sam2/configs/sam2.1/sam2.1_hiera_b+.yaml), [checkpoint](https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_base_plus.pt)) |     80.8     | 34.8 (43.8 compiled\\*) |        78.2         |        73.7        |       78.2        |\n|   sam2.1_hiera_large <br /> ([config](sam2/configs/sam2.1/sam2.1_hiera_l.yaml), [checkpoint](https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_large.pt))   |    224.4     | 24.2 (30.2 compiled\\*) |        79.5         |        74.6        |       80.6        |\n\n### SAM 2 checkpoints\n\nThe previous SAM 2 checkpoints released on July 29, 2024 can be found as follows:\n\n|      **Model**       | **Size (M)** |    **Speed (FPS)**     | **SA-V test (J&F)** | **MOSE val (J&F)** | **LVOS v2 (J&F)** |\n| :------------------: | :----------: | :--------------------: | :-----------------: | :----------------: | :---------------: |\n|   sam2_hiera_tiny <br /> ([config](sam2/configs/sam2/sam2_hiera_t.yaml), [checkpoint](https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_tiny.pt))   |     38.9     |          47.2          |        75.0         |        70.9        |       75.3        |\n|   sam2_hiera_small <br /> ([config](sam2/configs/sam2/sam2_hiera_s.yaml), [checkpoint](https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_small.pt))   |      46      | 43.3 (53.0 compiled\\*) |        74.9         |        71.5        |       76.4        |\n| sam2_hiera_base_plus <br /> ([config](sam2/configs/sam2/sam2_hiera_b+.yaml), [checkpoint](https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_base_plus.pt)) |     80.8     | 34.8 (43.8 compiled\\*) |        74.7         |        72.8        |       75.8        |\n|   sam2_hiera_large <br /> ([config](sam2/configs/sam2/sam2_hiera_l.yaml), [checkpoint](https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_large.pt))   |    224.4     | 24.2 (30.2 compiled\\*) |        76.0         |        74.6        |       79.8        |\n\n\\* Compile the model by setting `compile_image_encoder: True` in the config.\n\n## Segment Anything Video Dataset\n\nSee [sav_dataset/README.md](sav_dataset/README.md) for details.\n\n## Training SAM 2\n\nYou can train or fine-tune SAM 2 on custom datasets of images, videos, or both. Please check the training [README](training/README.md) on how to get started.\n\n## Web demo for SAM 2\n\nWe have released the frontend + backend code for the SAM 2 web demo (a locally deployable version similar to https://sam2.metademolab.com/demo). Please see the web demo [README](demo/README.md) for details.\n\n## License\n\nThe SAM 2 model checkpoints, SAM 2 demo code (front-end and back-end), and SAM 2 training code are licensed under [Apache 2.0](./LICENSE), however the [Inter Font](https://github.com/rsms/inter?tab=OFL-1.1-1-ov-file) and [Noto Color Emoji](https://github.com/googlefonts/noto-emoji) used in the SAM 2 demo code are made available under the [SIL Open Font License, version 1.1](https://openfontlicense.org/open-font-license-official-text/).\n\n## Contributing\n\nSee [contributing](CONTRIBUTING.md) and the [code of conduct](CODE_OF_CONDUCT.md).\n\n## Contributors\n\nThe SAM 2 project was made possible with the help of many contributors (alphabetical):\n\nKaren Bergan, Daniel Bolya, Alex Bosenberg, Kai Brown, Vispi Cassod, Christopher Chedeau, Ida Cheng, Luc Dahlin, Shoubhik Debnath, Rene Martinez Doehner, Grant Gardner, Sahir Gomez, Rishi Godugu, Baishan Guo, Caleb Ho, Andrew Huang, Somya Jain, Bob Kamma, Amanda Kallet, Jake Kinney, Alexander Kirillov, Shiva Koduvayur, Devansh Kukreja, Robert Kuo, Aohan Lin, Parth Malani, Jitendra Malik, Mallika Malhotra, Miguel Martin, Alexander Miller, Sasha Mitts, William Ngan, George Orlin, Joelle Pineau, Kate Saenko, Rodrick Shepard, Azita Shokrpour, David Soofian, Jonathan Torres, Jenny Truong, Sagar Vaze, Meng Wang, Claudette Ward, Pengchuan Zhang.\n\nThird-party code: we use a GPU-based connected component algorithm adapted from [`cc_torch`](https://github.com/zsef123/Connected_components_PyTorch) (with its license in [`LICENSE_cctorch`](./LICENSE_cctorch)) as an optional post-processing step for the mask predictions.\n\n## Citing SAM 2\n\nIf you use SAM 2 or the SA-V dataset in your research, please use the following BibTeX entry.\n\n```bibtex\n@article{ravi2024sam2,\n  title={SAM 2: Segment Anything in Images and Videos},\n  author={Ravi, Nikhila and Gabeur, Valentin and Hu, Yuan-Ting and Hu, Ronghang and Ryali, Chaitanya and Ma, Tengyu and Khedr, Haitham and R{\\\"a}dle, Roman and Rolland, Chloe and Gustafson, Laura and Mintun, Eric and Pan, Junting and Alwala, Kalyan Vasudev and Carion, Nicolas and Wu, Chao-Yuan and Girshick, Ross and Doll{\\'a}r, Piotr and Feichtenhofer, Christoph},\n  journal={arXiv preprint arXiv:2408.00714},\n  url={https://arxiv.org/abs/2408.00714},\n  year={2024}\n}\n```\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/backend.Dockerfile",
    "content": "ARG BASE_IMAGE=pytorch/pytorch:2.3.1-cuda12.1-cudnn8-runtime\nARG MODEL_SIZE=base_plus\n\nFROM ${BASE_IMAGE}\n\n# Gunicorn environment variables\nENV GUNICORN_WORKERS=1\nENV GUNICORN_THREADS=2\nENV GUNICORN_PORT=5000\n\n# SAM 2 environment variables\nENV APP_ROOT=/opt/sam2\nENV PYTHONUNBUFFERED=1\nENV SAM2_BUILD_CUDA=0\nENV MODEL_SIZE=${MODEL_SIZE}\n\n# Install system requirements\nRUN apt-get update && apt-get install -y --no-install-recommends \\\n    ffmpeg \\\n    libavutil-dev \\\n    libavcodec-dev \\\n    libavformat-dev \\\n    libswscale-dev \\\n    pkg-config \\\n    build-essential \\\n    libffi-dev\n\nCOPY setup.py .\nCOPY README.md .\n\nRUN pip install --upgrade pip setuptools\nRUN pip install -e \".[interactive-demo]\"\n\n# https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite/issues/69#issuecomment-1826764707\nRUN rm /opt/conda/bin/ffmpeg && ln -s /bin/ffmpeg /opt/conda/bin/ffmpeg\n\n# Make app directory. This directory will host all files required for the\n# backend and SAM 2 inference files.\nRUN mkdir ${APP_ROOT}\n\n# Copy backend server files\nCOPY demo/backend/server ${APP_ROOT}/server\n\n# Copy SAM 2 inference files\nCOPY sam2 ${APP_ROOT}/server/sam2\n\n# Download SAM 2.1 checkpoints\nADD https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_tiny.pt ${APP_ROOT}/checkpoints/sam2.1_hiera_tiny.pt\nADD https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_small.pt ${APP_ROOT}/checkpoints/sam2.1_hiera_small.pt\nADD https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_base_plus.pt ${APP_ROOT}/checkpoints/sam2.1_hiera_base_plus.pt\nADD https://dl.fbaipublicfiles.com/segment_anything_2/092824/sam2.1_hiera_large.pt ${APP_ROOT}/checkpoints/sam2.1_hiera_large.pt\n\nWORKDIR ${APP_ROOT}/server\n\n# https://pythonspeed.com/articles/gunicorn-in-docker/\nCMD gunicorn --worker-tmp-dir /dev/shm \\\n    --worker-class gthread app:app \\\n    --log-level info \\\n    --access-logfile /dev/stdout \\\n    --log-file /dev/stderr \\\n    --workers ${GUNICORN_WORKERS} \\\n    --threads ${GUNICORN_THREADS} \\\n    --bind 0.0.0.0:${GUNICORN_PORT} \\\n    --timeout 60\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/checkpoints/download_ckpts.sh",
    "content": "#!/bin/bash\n\n# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n# Use either wget or curl to download the checkpoints\nif command -v wget &> /dev/null; then\n    CMD=\"wget\"\nelif command -v curl &> /dev/null; then\n    CMD=\"curl -L -O\"\nelse\n    echo \"Please install wget or curl to download the checkpoints.\"\n    exit 1\nfi\n\n# Define the URLs for SAM 2 checkpoints\n# SAM2_BASE_URL=\"https://dl.fbaipublicfiles.com/segment_anything_2/072824\"\n# sam2_hiera_t_url=\"${SAM2_BASE_URL}/sam2_hiera_tiny.pt\"\n# sam2_hiera_s_url=\"${SAM2_BASE_URL}/sam2_hiera_small.pt\"\n# sam2_hiera_b_plus_url=\"${SAM2_BASE_URL}/sam2_hiera_base_plus.pt\"\n# sam2_hiera_l_url=\"${SAM2_BASE_URL}/sam2_hiera_large.pt\"\n\n# Download each of the four checkpoints using wget\n# echo \"Downloading sam2_hiera_tiny.pt checkpoint...\"\n# $CMD $sam2_hiera_t_url || { echo \"Failed to download checkpoint from $sam2_hiera_t_url\"; exit 1; }\n\n# echo \"Downloading sam2_hiera_small.pt checkpoint...\"\n# $CMD $sam2_hiera_s_url || { echo \"Failed to download checkpoint from $sam2_hiera_s_url\"; exit 1; }\n\n# echo \"Downloading sam2_hiera_base_plus.pt checkpoint...\"\n# $CMD $sam2_hiera_b_plus_url || { echo \"Failed to download checkpoint from $sam2_hiera_b_plus_url\"; exit 1; }\n\n# echo \"Downloading sam2_hiera_large.pt checkpoint...\"\n# $CMD $sam2_hiera_l_url || { echo \"Failed to download checkpoint from $sam2_hiera_l_url\"; exit 1; }\n\n# Define the URLs for SAM 2.1 checkpoints\nSAM2p1_BASE_URL=\"https://dl.fbaipublicfiles.com/segment_anything_2/092824\"\nsam2p1_hiera_t_url=\"${SAM2p1_BASE_URL}/sam2.1_hiera_tiny.pt\"\nsam2p1_hiera_s_url=\"${SAM2p1_BASE_URL}/sam2.1_hiera_small.pt\"\nsam2p1_hiera_b_plus_url=\"${SAM2p1_BASE_URL}/sam2.1_hiera_base_plus.pt\"\nsam2p1_hiera_l_url=\"${SAM2p1_BASE_URL}/sam2.1_hiera_large.pt\"\n\n# SAM 2.1 checkpoints\necho \"Downloading sam2.1_hiera_tiny.pt checkpoint...\"\n$CMD $sam2p1_hiera_t_url || { echo \"Failed to download checkpoint from $sam2p1_hiera_t_url\"; exit 1; }\n\necho \"Downloading sam2.1_hiera_small.pt checkpoint...\"\n$CMD $sam2p1_hiera_s_url || { echo \"Failed to download checkpoint from $sam2p1_hiera_s_url\"; exit 1; }\n\necho \"Downloading sam2.1_hiera_base_plus.pt checkpoint...\"\n$CMD $sam2p1_hiera_b_plus_url || { echo \"Failed to download checkpoint from $sam2p1_hiera_b_plus_url\"; exit 1; }\n\necho \"Downloading sam2.1_hiera_large.pt checkpoint...\"\n$CMD $sam2p1_hiera_l_url || { echo \"Failed to download checkpoint from $sam2p1_hiera_l_url\"; exit 1; }\n\necho \"All checkpoints are downloaded successfully.\"\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/.gitignore",
    "content": "data/uploads\ndata/posters\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/README.md",
    "content": "# SAM 2 Demo\n\nWelcome to the SAM 2 Demo! This project consists of a frontend built with React TypeScript and Vite and a backend service using Python Flask and Strawberry GraphQL. Both components can be run in Docker containers or locally on MPS (Metal Performance Shaders) or CPU. However, running the backend service on MPS or CPU devices may result in significantly slower performance (FPS).\n\n## Prerequisites\n\nBefore you begin, ensure you have the following installed on your system:\n\n- Docker and Docker Compose\n- [OPTIONAL] Node.js and Yarn for running frontend locally\n- [OPTIONAL] Anaconda for running backend locally\n\n### Installing Docker\n\nTo install Docker, follow these steps:\n\n1. Go to the [Docker website](https://www.docker.com/get-started)\n2. Follow the installation instructions for your operating system.\n\n### [OPTIONAL] Installing Node.js and Yarn\n\nTo install Node.js and Yarn, follow these steps:\n\n1. Go to the [Node.js website](https://nodejs.org/en/download/).\n2. Follow the installation instructions for your operating system.\n3. Once Node.js is installed, open a terminal or command prompt and run the following command to install Yarn:\n\n```\nnpm install -g yarn\n```\n\n### [OPTIONAL] Installing Anaconda\n\nTo install Anaconda, follow these steps:\n\n1. Go to the [Anaconda website](https://www.anaconda.com/products/distribution).\n2. Follow the installation instructions for your operating system.\n\n## Quick Start\n\nTo get both the frontend and backend running quickly using Docker, you can use the following command:\n\n```bash\ndocker compose up --build\n```\n\n> [!WARNING]\n> On macOS, Docker containers only support running on CPU. MPS is not supported through Docker. If you want to run the demo backend service on MPS, you will need to run it locally (see \"Running the Backend Locally\" below).\n\nThis will build and start both services. You can access them at:\n\n- **Frontend:** [http://localhost:7262](http://localhost:7262)\n- **Backend:** [http://localhost:7263/graphql](http://localhost:7263/graphql)\n\n## Running Backend with MPS Support\n\nMPS (Metal Performance Shaders) is not supported with Docker. To use MPS, you need to run the backend on your local machine.\n\n### Setting Up Your Environment\n\n1. **Create Conda environment**\n\n   Create a new Conda environment for this project by running the following command or use your existing conda environment for SAM 2:\n\n   ```\n   conda create --name sam2-demo python=3.10 --yes\n   ```\n\n   This will create a new environment named `sam2-demo` with Python 3.10 as the interpreter.\n\n2. **Activate the Conda environment:**\n\n   ```bash\n   conda activate sam2-demo\n   ```\n\n3. **Install ffmpeg**\n\n   ```bash\n   conda install -c conda-forge ffmpeg\n   ```\n\n4. **Install SAM 2 demo dependencies:**\n\nInstall project dependencies by running the following command in the SAM 2 checkout root directory:\n\n```bash\npip install -e '.[interactive-demo]'\n```\n\n### Running the Backend Locally\n\nDownload the SAM 2 checkpoints:\n\n```bash\n(cd ./checkpoints && ./download_ckpts.sh)\n```\n\nUse the following command to start the backend with MPS support:\n\n```bash\ncd demo/backend/server/\n```\n\n```bash\nPYTORCH_ENABLE_MPS_FALLBACK=1 \\\nAPP_ROOT=\"$(pwd)/../../../\" \\\nAPP_URL=http://localhost:7263 \\\nMODEL_SIZE=base_plus \\\nDATA_PATH=\"$(pwd)/../../data\" \\\nDEFAULT_VIDEO_PATH=gallery/05_default_juggle.mp4 \\\ngunicorn \\\n    --worker-class gthread app:app \\\n    --workers 1 \\\n    --threads 2 \\\n    --bind 0.0.0.0:7263 \\\n    --timeout 60\n```\n\nOptions for the `MODEL_SIZE` argument are \"tiny\", \"small\", \"base_plus\" (default), and \"large\".\n\n> [!WARNING]\n> Running the backend service on MPS devices can cause fatal crashes with the Gunicorn worker due to insufficient MPS memory. Try switching to CPU devices by setting the `SAM2_DEMO_FORCE_CPU_DEVICE=1` environment variable.\n\n### Starting the Frontend\n\nIf you wish to run the frontend separately (useful for development), follow these steps:\n\n1. **Navigate to demo frontend directory:**\n\n   ```bash\n   cd demo/frontend\n   ```\n\n2. **Install dependencies:**\n\n   ```bash\n   yarn install\n   ```\n\n3. **Start the development server:**\n\n   ```bash\n   yarn dev --port 7262\n   ```\n\nThis will start the frontend development server on [http://localhost:7262](http://localhost:7262).\n\n## Docker Tips\n\n- To rebuild the Docker containers (useful if you've made changes to the Dockerfile or dependencies):\n\n  ```bash\n  docker compose up --build\n  ```\n\n- To stop the Docker containers:\n\n  ```bash\n  docker compose down\n  ```\n\n## Contributing\n\nContributions are welcome! Please read our contributing guidelines to get started.\n\n## License\n\nSee the LICENSE file for details.\n\n---\n\nBy following these instructions, you should have a fully functional development environment for both the frontend and backend of the SAM 2 Demo. Happy coding!\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/backend/server/app.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport logging\nfrom typing import Any, Generator\n\nfrom app_conf import (\n    GALLERY_PATH,\n    GALLERY_PREFIX,\n    POSTERS_PATH,\n    POSTERS_PREFIX,\n    UPLOADS_PATH,\n    UPLOADS_PREFIX,\n)\nfrom data.loader import preload_data\nfrom data.schema import schema\nfrom data.store import set_videos\nfrom flask import Flask, make_response, Request, request, Response, send_from_directory\nfrom flask_cors import CORS\nfrom inference.data_types import PropagateDataResponse, PropagateInVideoRequest\nfrom inference.multipart import MultipartResponseBuilder\nfrom inference.predictor import InferenceAPI\nfrom strawberry.flask.views import GraphQLView\n\nlogger = logging.getLogger(__name__)\n\napp = Flask(__name__)\ncors = CORS(app, supports_credentials=True)\n\nvideos = preload_data()\nset_videos(videos)\n\ninference_api = InferenceAPI()\n\n\n@app.route(\"/healthy\")\ndef healthy() -> Response:\n    return make_response(\"OK\", 200)\n\n\n@app.route(f\"/{GALLERY_PREFIX}/<path:path>\", methods=[\"GET\"])\ndef send_gallery_video(path: str) -> Response:\n    try:\n        return send_from_directory(\n            GALLERY_PATH,\n            path,\n        )\n    except:\n        raise ValueError(\"resource not found\")\n\n\n@app.route(f\"/{POSTERS_PREFIX}/<path:path>\", methods=[\"GET\"])\ndef send_poster_image(path: str) -> Response:\n    try:\n        return send_from_directory(\n            POSTERS_PATH,\n            path,\n        )\n    except:\n        raise ValueError(\"resource not found\")\n\n\n@app.route(f\"/{UPLOADS_PREFIX}/<path:path>\", methods=[\"GET\"])\ndef send_uploaded_video(path: str):\n    try:\n        return send_from_directory(\n            UPLOADS_PATH,\n            path,\n        )\n    except:\n        raise ValueError(\"resource not found\")\n\n\n# TOOD: Protect route with ToS permission check\n@app.route(\"/propagate_in_video\", methods=[\"POST\"])\ndef propagate_in_video() -> Response:\n    data = request.json\n    args = {\n        \"session_id\": data[\"session_id\"],\n        \"start_frame_index\": data.get(\"start_frame_index\", 0),\n    }\n\n    boundary = \"frame\"\n    frame = gen_track_with_mask_stream(boundary, **args)\n    return Response(frame, mimetype=\"multipart/x-savi-stream; boundary=\" + boundary)\n\n\ndef gen_track_with_mask_stream(\n    boundary: str,\n    session_id: str,\n    start_frame_index: int,\n) -> Generator[bytes, None, None]:\n    with inference_api.autocast_context():\n        request = PropagateInVideoRequest(\n            type=\"propagate_in_video\",\n            session_id=session_id,\n            start_frame_index=start_frame_index,\n        )\n\n        for chunk in inference_api.propagate_in_video(request=request):\n            yield MultipartResponseBuilder.build(\n                boundary=boundary,\n                headers={\n                    \"Content-Type\": \"application/json; charset=utf-8\",\n                    \"Frame-Current\": \"-1\",\n                    # Total frames minus the reference frame\n                    \"Frame-Total\": \"-1\",\n                    \"Mask-Type\": \"RLE[]\",\n                },\n                body=chunk.to_json().encode(\"UTF-8\"),\n            ).get_message()\n\n\nclass MyGraphQLView(GraphQLView):\n    def get_context(self, request: Request, response: Response) -> Any:\n        return {\"inference_api\": inference_api}\n\n\n# Add GraphQL route to Flask app.\napp.add_url_rule(\n    \"/graphql\",\n    view_func=MyGraphQLView.as_view(\n        \"graphql_view\",\n        schema=schema,\n        # Disable GET queries\n        # https://strawberry.rocks/docs/operations/deployment\n        # https://strawberry.rocks/docs/integrations/flask\n        allow_queries_via_get=False,\n        # Strawberry recently changed multipart request handling, which now\n        # requires enabling support explicitly for views.\n        # https://github.com/strawberry-graphql/strawberry/issues/3655\n        multipart_uploads_enabled=True,\n    ),\n)\n\n\nif __name__ == \"__main__\":\n    app.run(host=\"0.0.0.0\", port=5000)\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/backend/server/app_conf.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport logging\nimport os\nfrom pathlib import Path\n\nlogger = logging.getLogger(__name__)\n\nAPP_ROOT = os.getenv(\"APP_ROOT\", \"/opt/sam2\")\n\nAPI_URL = os.getenv(\"API_URL\", \"http://localhost:7263\")\n\nMODEL_SIZE = os.getenv(\"MODEL_SIZE\", \"base_plus\")\n\nlogger.info(f\"using model size {MODEL_SIZE}\")\n\nFFMPEG_NUM_THREADS = int(os.getenv(\"FFMPEG_NUM_THREADS\", \"1\"))\n\n# Path for all data used in API\nDATA_PATH = Path(os.getenv(\"DATA_PATH\", \"/data\"))\n\n# Max duration an uploaded video can have in seconds. The default is 10\n# seconds.\nMAX_UPLOAD_VIDEO_DURATION = float(os.environ.get(\"MAX_UPLOAD_VIDEO_DURATION\", \"10\"))\n\n# If set, it will define which video is returned by the default video query for\n# desktop\nDEFAULT_VIDEO_PATH = os.getenv(\"DEFAULT_VIDEO_PATH\")\n\n# Prefix for gallery videos\nGALLERY_PREFIX = \"gallery\"\n\n# Path where all gallery videos are stored\nGALLERY_PATH = DATA_PATH / GALLERY_PREFIX\n\n# Prefix for uploaded videos\nUPLOADS_PREFIX = \"uploads\"\n\n# Path where all uploaded videos are stored\nUPLOADS_PATH = DATA_PATH / UPLOADS_PREFIX\n\n# Prefix for video posters (1st frame of video)\nPOSTERS_PREFIX = \"posters\"\n\n# Path where all posters are stored\nPOSTERS_PATH = DATA_PATH / POSTERS_PREFIX\n\n# Make sure any of those paths exist\nos.makedirs(DATA_PATH, exist_ok=True)\nos.makedirs(GALLERY_PATH, exist_ok=True)\nos.makedirs(UPLOADS_PATH, exist_ok=True)\nos.makedirs(POSTERS_PATH, exist_ok=True)\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/backend/server/inference/data_types.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom dataclasses import dataclass\nfrom typing import Dict, List, Optional, Union\n\nfrom dataclasses_json import dataclass_json\nfrom torch import Tensor\n\n\n@dataclass_json\n@dataclass\nclass Mask:\n    size: List[int]\n    counts: str\n\n\n@dataclass_json\n@dataclass\nclass BaseRequest:\n    type: str\n\n\n@dataclass_json\n@dataclass\nclass StartSessionRequest(BaseRequest):\n    type: str\n    path: str\n    session_id: Optional[str] = None\n\n\n@dataclass_json\n@dataclass\nclass SaveSessionRequest(BaseRequest):\n    type: str\n    session_id: str\n\n\n@dataclass_json\n@dataclass\nclass LoadSessionRequest(BaseRequest):\n    type: str\n    session_id: str\n\n\n@dataclass_json\n@dataclass\nclass RenewSessionRequest(BaseRequest):\n    type: str\n    session_id: str\n\n\n@dataclass_json\n@dataclass\nclass CloseSessionRequest(BaseRequest):\n    type: str\n    session_id: str\n\n\n@dataclass_json\n@dataclass\nclass AddPointsRequest(BaseRequest):\n    type: str\n    session_id: str\n    frame_index: int\n    clear_old_points: bool\n    object_id: int\n    labels: List[int]\n    points: List[List[float]]\n\n\n@dataclass_json\n@dataclass\nclass AddMaskRequest(BaseRequest):\n    type: str\n    session_id: str\n    frame_index: int\n    object_id: int\n    mask: Mask\n\n\n@dataclass_json\n@dataclass\nclass ClearPointsInFrameRequest(BaseRequest):\n    type: str\n    session_id: str\n    frame_index: int\n    object_id: int\n\n\n@dataclass_json\n@dataclass\nclass ClearPointsInVideoRequest(BaseRequest):\n    type: str\n    session_id: str\n\n\n@dataclass_json\n@dataclass\nclass RemoveObjectRequest(BaseRequest):\n    type: str\n    session_id: str\n    object_id: int\n\n\n@dataclass_json\n@dataclass\nclass PropagateInVideoRequest(BaseRequest):\n    type: str\n    session_id: str\n    start_frame_index: int\n\n\n@dataclass_json\n@dataclass\nclass CancelPropagateInVideoRequest(BaseRequest):\n    type: str\n    session_id: str\n\n\n@dataclass_json\n@dataclass\nclass StartSessionResponse:\n    session_id: str\n\n\n@dataclass_json\n@dataclass\nclass SaveSessionResponse:\n    session_id: str\n\n\n@dataclass_json\n@dataclass\nclass LoadSessionResponse:\n    session_id: str\n\n\n@dataclass_json\n@dataclass\nclass RenewSessionResponse:\n    session_id: str\n\n\n@dataclass_json\n@dataclass\nclass CloseSessionResponse:\n    success: bool\n\n\n@dataclass_json\n@dataclass\nclass ClearPointsInVideoResponse:\n    success: bool\n\n\n@dataclass_json\n@dataclass\nclass PropagateDataValue:\n    object_id: int\n    mask: Mask\n\n\n@dataclass_json\n@dataclass\nclass PropagateDataResponse:\n    frame_index: int\n    results: List[PropagateDataValue]\n\n\n@dataclass_json\n@dataclass\nclass RemoveObjectResponse:\n    results: List[PropagateDataResponse]\n\n\n@dataclass_json\n@dataclass\nclass CancelPorpagateResponse:\n    success: bool\n\n\n@dataclass_json\n@dataclass\nclass InferenceSession:\n    start_time: float\n    last_use_time: float\n    session_id: str\n    state: Dict[str, Dict[str, Union[Tensor, Dict[int, Tensor]]]]\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/backend/server/inference/multipart.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom typing import Dict, Union\n\n\nclass MultipartResponseBuilder:\n    message: bytes\n\n    def __init__(self, boundary: str) -> None:\n        self.message = b\"--\" + boundary.encode(\"utf-8\") + b\"\\r\\n\"\n\n    @classmethod\n    def build(\n        cls, boundary: str, headers: Dict[str, str], body: Union[str, bytes]\n    ) -> \"MultipartResponseBuilder\":\n        builder = cls(boundary=boundary)\n        for k, v in headers.items():\n            builder.__append_header(key=k, value=v)\n        if isinstance(body, bytes):\n            builder.__append_body(body)\n        elif isinstance(body, str):\n            builder.__append_body(body.encode(\"utf-8\"))\n        else:\n            raise ValueError(\n                f\"body needs to be of type bytes or str but got {type(body)}\"\n            )\n\n        return builder\n\n    def get_message(self) -> bytes:\n        return self.message\n\n    def __append_header(self, key: str, value: str) -> \"MultipartResponseBuilder\":\n        self.message += key.encode(\"utf-8\") + b\": \" + value.encode(\"utf-8\") + b\"\\r\\n\"\n        return self\n\n    def __close_header(self) -> \"MultipartResponseBuilder\":\n        self.message += b\"\\r\\n\"\n        return self\n\n    def __append_body(self, body: bytes) -> \"MultipartResponseBuilder\":\n        self.__append_header(key=\"Content-Length\", value=str(len(body)))\n        self.__close_header()\n        self.message += body\n        return self\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/backend/server/inference/predictor.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport contextlib\nimport logging\nimport os\nimport uuid\nfrom pathlib import Path\nfrom threading import Lock\nfrom typing import Any, Dict, Generator, List\n\nimport numpy as np\nimport torch\nfrom app_conf import APP_ROOT, MODEL_SIZE\nfrom inference.data_types import (\n    AddMaskRequest,\n    AddPointsRequest,\n    CancelPorpagateResponse,\n    CancelPropagateInVideoRequest,\n    ClearPointsInFrameRequest,\n    ClearPointsInVideoRequest,\n    ClearPointsInVideoResponse,\n    CloseSessionRequest,\n    CloseSessionResponse,\n    Mask,\n    PropagateDataResponse,\n    PropagateDataValue,\n    PropagateInVideoRequest,\n    RemoveObjectRequest,\n    RemoveObjectResponse,\n    StartSessionRequest,\n    StartSessionResponse,\n)\nfrom pycocotools.mask import decode as decode_masks, encode as encode_masks\nfrom sam2.build_sam import build_sam2_video_predictor\n\n\nlogger = logging.getLogger(__name__)\n\n\nclass InferenceAPI:\n\n    def __init__(self) -> None:\n        super(InferenceAPI, self).__init__()\n\n        self.session_states: Dict[str, Any] = {}\n        self.score_thresh = 0\n\n        if MODEL_SIZE == \"tiny\":\n            checkpoint = Path(APP_ROOT) / \"checkpoints/sam2.1_hiera_tiny.pt\"\n            model_cfg = \"configs/sam2.1/sam2.1_hiera_t.yaml\"\n        elif MODEL_SIZE == \"small\":\n            checkpoint = Path(APP_ROOT) / \"checkpoints/sam2.1_hiera_small.pt\"\n            model_cfg = \"configs/sam2.1/sam2.1_hiera_s.yaml\"\n        elif MODEL_SIZE == \"large\":\n            checkpoint = Path(APP_ROOT) / \"checkpoints/sam2.1_hiera_large.pt\"\n            model_cfg = \"configs/sam2.1/sam2.1_hiera_l.yaml\"\n        else:  # base_plus (default)\n            checkpoint = Path(APP_ROOT) / \"checkpoints/sam2.1_hiera_base_plus.pt\"\n            model_cfg = \"configs/sam2.1/sam2.1_hiera_b+.yaml\"\n\n        # select the device for computation\n        force_cpu_device = os.environ.get(\"SAM2_DEMO_FORCE_CPU_DEVICE\", \"0\") == \"1\"\n        if force_cpu_device:\n            logger.info(\"forcing CPU device for SAM 2 demo\")\n        if torch.cuda.is_available() and not force_cpu_device:\n            device = torch.device(\"cuda\")\n        elif torch.backends.mps.is_available() and not force_cpu_device:\n            device = torch.device(\"mps\")\n        else:\n            device = torch.device(\"cpu\")\n        logger.info(f\"using device: {device}\")\n\n        if device.type == \"cuda\":\n            # turn on tfloat32 for Ampere GPUs (https://pytorch.org/docs/stable/notes/cuda.html#tensorfloat-32-tf32-on-ampere-devices)\n            if torch.cuda.get_device_properties(0).major >= 8:\n                torch.backends.cuda.matmul.allow_tf32 = True\n                torch.backends.cudnn.allow_tf32 = True\n        elif device.type == \"mps\":\n            logging.warning(\n                \"\\nSupport for MPS devices is preliminary. SAM 2 is trained with CUDA and might \"\n                \"give numerically different outputs and sometimes degraded performance on MPS. \"\n                \"See e.g. https://github.com/pytorch/pytorch/issues/84936 for a discussion.\"\n            )\n\n        self.device = device\n        self.predictor = build_sam2_video_predictor(\n            model_cfg, checkpoint, device=device\n        )\n        self.inference_lock = Lock()\n\n    def autocast_context(self):\n        if self.device.type == \"cuda\":\n            return torch.autocast(\"cuda\", dtype=torch.bfloat16)\n        else:\n            return contextlib.nullcontext()\n\n    def start_session(self, request: StartSessionRequest) -> StartSessionResponse:\n        with self.autocast_context(), self.inference_lock:\n            session_id = str(uuid.uuid4())\n            # for MPS devices, we offload the video frames to CPU by default to avoid\n            # memory fragmentation in MPS (which sometimes crashes the entire process)\n            offload_video_to_cpu = self.device.type == \"mps\"\n            inference_state = self.predictor.init_state(\n                request.path,\n                offload_video_to_cpu=offload_video_to_cpu,\n            )\n            self.session_states[session_id] = {\n                \"canceled\": False,\n                \"state\": inference_state,\n            }\n            return StartSessionResponse(session_id=session_id)\n\n    def close_session(self, request: CloseSessionRequest) -> CloseSessionResponse:\n        is_successful = self.__clear_session_state(request.session_id)\n        return CloseSessionResponse(success=is_successful)\n\n    def add_points(\n        self, request: AddPointsRequest, test: str = \"\"\n    ) -> PropagateDataResponse:\n        with self.autocast_context(), self.inference_lock:\n            session = self.__get_session(request.session_id)\n            inference_state = session[\"state\"]\n\n            frame_idx = request.frame_index\n            obj_id = request.object_id\n            points = request.points\n            labels = request.labels\n            clear_old_points = request.clear_old_points\n\n            # add new prompts and instantly get the output on the same frame\n            frame_idx, object_ids, masks = self.predictor.add_new_points_or_box(\n                inference_state=inference_state,\n                frame_idx=frame_idx,\n                obj_id=obj_id,\n                points=points,\n                labels=labels,\n                clear_old_points=clear_old_points,\n                normalize_coords=False,\n            )\n\n            masks_binary = (masks > self.score_thresh)[:, 0].cpu().numpy()\n\n            rle_mask_list = self.__get_rle_mask_list(\n                object_ids=object_ids, masks=masks_binary\n            )\n\n            return PropagateDataResponse(\n                frame_index=frame_idx,\n                results=rle_mask_list,\n            )\n\n    def add_mask(self, request: AddMaskRequest) -> PropagateDataResponse:\n        \"\"\"\n        Add new points on a specific video frame.\n        - mask is a numpy array of shape [H_im, W_im] (containing 1 for foreground and 0 for background).\n        Note: providing an input mask would overwrite any previous input points on this frame.\n        \"\"\"\n        with self.autocast_context(), self.inference_lock:\n            session_id = request.session_id\n            frame_idx = request.frame_index\n            obj_id = request.object_id\n            rle_mask = {\n                \"counts\": request.mask.counts,\n                \"size\": request.mask.size,\n            }\n\n            mask = decode_masks(rle_mask)\n\n            logger.info(\n                f\"add mask on frame {frame_idx} in session {session_id}: {obj_id=}, {mask.shape=}\"\n            )\n            session = self.__get_session(session_id)\n            inference_state = session[\"state\"]\n\n            frame_idx, obj_ids, video_res_masks = self.model.add_new_mask(\n                inference_state=inference_state,\n                frame_idx=frame_idx,\n                obj_id=obj_id,\n                mask=torch.tensor(mask > 0),\n            )\n            masks_binary = (video_res_masks > self.score_thresh)[:, 0].cpu().numpy()\n\n            rle_mask_list = self.__get_rle_mask_list(\n                object_ids=obj_ids, masks=masks_binary\n            )\n\n            return PropagateDataResponse(\n                frame_index=frame_idx,\n                results=rle_mask_list,\n            )\n\n    def clear_points_in_frame(\n        self, request: ClearPointsInFrameRequest\n    ) -> PropagateDataResponse:\n        \"\"\"\n        Remove all input points in a specific frame.\n        \"\"\"\n        with self.autocast_context(), self.inference_lock:\n            session_id = request.session_id\n            frame_idx = request.frame_index\n            obj_id = request.object_id\n\n            logger.info(\n                f\"clear inputs on frame {frame_idx} in session {session_id}: {obj_id=}\"\n            )\n            session = self.__get_session(session_id)\n            inference_state = session[\"state\"]\n            frame_idx, obj_ids, video_res_masks = (\n                self.predictor.clear_all_prompts_in_frame(\n                    inference_state, frame_idx, obj_id\n                )\n            )\n            masks_binary = (video_res_masks > self.score_thresh)[:, 0].cpu().numpy()\n\n            rle_mask_list = self.__get_rle_mask_list(\n                object_ids=obj_ids, masks=masks_binary\n            )\n\n            return PropagateDataResponse(\n                frame_index=frame_idx,\n                results=rle_mask_list,\n            )\n\n    def clear_points_in_video(\n        self, request: ClearPointsInVideoRequest\n    ) -> ClearPointsInVideoResponse:\n        \"\"\"\n        Remove all input points in all frames throughout the video.\n        \"\"\"\n        with self.autocast_context(), self.inference_lock:\n            session_id = request.session_id\n            logger.info(f\"clear all inputs across the video in session {session_id}\")\n            session = self.__get_session(session_id)\n            inference_state = session[\"state\"]\n            self.predictor.reset_state(inference_state)\n            return ClearPointsInVideoResponse(success=True)\n\n    def remove_object(self, request: RemoveObjectRequest) -> RemoveObjectResponse:\n        \"\"\"\n        Remove an object id from the tracking state.\n        \"\"\"\n        with self.autocast_context(), self.inference_lock:\n            session_id = request.session_id\n            obj_id = request.object_id\n            logger.info(f\"remove object in session {session_id}: {obj_id=}\")\n            session = self.__get_session(session_id)\n            inference_state = session[\"state\"]\n            new_obj_ids, updated_frames = self.predictor.remove_object(\n                inference_state, obj_id\n            )\n\n            results = []\n            for frame_index, video_res_masks in updated_frames:\n                masks = (video_res_masks > self.score_thresh)[:, 0].cpu().numpy()\n                rle_mask_list = self.__get_rle_mask_list(\n                    object_ids=new_obj_ids, masks=masks\n                )\n                results.append(\n                    PropagateDataResponse(\n                        frame_index=frame_index,\n                        results=rle_mask_list,\n                    )\n                )\n\n            return RemoveObjectResponse(results=results)\n\n    def propagate_in_video(\n        self, request: PropagateInVideoRequest\n    ) -> Generator[PropagateDataResponse, None, None]:\n        session_id = request.session_id\n        start_frame_idx = request.start_frame_index\n        propagation_direction = \"both\"\n        max_frame_num_to_track = None\n\n        \"\"\"\n        Propagate existing input points in all frames to track the object across video.\n        \"\"\"\n\n        # Note that as this method is a generator, we also need to use autocast_context\n        # in caller to this method to ensure that it's called under the correct context\n        # (we've added `autocast_context` to `gen_track_with_mask_stream` in app.py).\n        with self.autocast_context(), self.inference_lock:\n            logger.info(\n                f\"propagate in video in session {session_id}: \"\n                f\"{propagation_direction=}, {start_frame_idx=}, {max_frame_num_to_track=}\"\n            )\n\n            try:\n                session = self.__get_session(session_id)\n                session[\"canceled\"] = False\n\n                inference_state = session[\"state\"]\n                if propagation_direction not in [\"both\", \"forward\", \"backward\"]:\n                    raise ValueError(\n                        f\"invalid propagation direction: {propagation_direction}\"\n                    )\n\n                # First doing the forward propagation\n                if propagation_direction in [\"both\", \"forward\"]:\n                    for outputs in self.predictor.propagate_in_video(\n                        inference_state=inference_state,\n                        start_frame_idx=start_frame_idx,\n                        max_frame_num_to_track=max_frame_num_to_track,\n                        reverse=False,\n                    ):\n                        if session[\"canceled\"]:\n                            return None\n\n                        frame_idx, obj_ids, video_res_masks = outputs\n                        masks_binary = (\n                            (video_res_masks > self.score_thresh)[:, 0].cpu().numpy()\n                        )\n\n                        rle_mask_list = self.__get_rle_mask_list(\n                            object_ids=obj_ids, masks=masks_binary\n                        )\n\n                        yield PropagateDataResponse(\n                            frame_index=frame_idx,\n                            results=rle_mask_list,\n                        )\n\n                # Then doing the backward propagation (reverse in time)\n                if propagation_direction in [\"both\", \"backward\"]:\n                    for outputs in self.predictor.propagate_in_video(\n                        inference_state=inference_state,\n                        start_frame_idx=start_frame_idx,\n                        max_frame_num_to_track=max_frame_num_to_track,\n                        reverse=True,\n                    ):\n                        if session[\"canceled\"]:\n                            return None\n\n                        frame_idx, obj_ids, video_res_masks = outputs\n                        masks_binary = (\n                            (video_res_masks > self.score_thresh)[:, 0].cpu().numpy()\n                        )\n\n                        rle_mask_list = self.__get_rle_mask_list(\n                            object_ids=obj_ids, masks=masks_binary\n                        )\n\n                        yield PropagateDataResponse(\n                            frame_index=frame_idx,\n                            results=rle_mask_list,\n                        )\n            finally:\n                # Log upon completion (so that e.g. we can see if two propagations happen in parallel).\n                # Using `finally` here to log even when the tracking is aborted with GeneratorExit.\n                logger.info(\n                    f\"propagation ended in session {session_id}; {self.__get_session_stats()}\"\n                )\n\n    def cancel_propagate_in_video(\n        self, request: CancelPropagateInVideoRequest\n    ) -> CancelPorpagateResponse:\n        session = self.__get_session(request.session_id)\n        session[\"canceled\"] = True\n        return CancelPorpagateResponse(success=True)\n\n    def __get_rle_mask_list(\n        self, object_ids: List[int], masks: np.ndarray\n    ) -> List[PropagateDataValue]:\n        \"\"\"\n        Return a list of data values, i.e. list of object/mask combos.\n        \"\"\"\n        return [\n            self.__get_mask_for_object(object_id=object_id, mask=mask)\n            for object_id, mask in zip(object_ids, masks)\n        ]\n\n    def __get_mask_for_object(\n        self, object_id: int, mask: np.ndarray\n    ) -> PropagateDataValue:\n        \"\"\"\n        Create a data value for an object/mask combo.\n        \"\"\"\n        mask_rle = encode_masks(np.array(mask, dtype=np.uint8, order=\"F\"))\n        mask_rle[\"counts\"] = mask_rle[\"counts\"].decode()\n        return PropagateDataValue(\n            object_id=object_id,\n            mask=Mask(\n                size=mask_rle[\"size\"],\n                counts=mask_rle[\"counts\"],\n            ),\n        )\n\n    def __get_session(self, session_id: str):\n        session = self.session_states.get(session_id, None)\n        if session is None:\n            raise RuntimeError(\n                f\"Cannot find session {session_id}; it might have expired\"\n            )\n        return session\n\n    def __get_session_stats(self):\n        \"\"\"Get a statistics string for live sessions and their GPU usage.\"\"\"\n        # print both the session ids and their video frame numbers\n        live_session_strs = [\n            f\"'{session_id}' ({session['state']['num_frames']} frames, \"\n            f\"{len(session['state']['obj_ids'])} objects)\"\n            for session_id, session in self.session_states.items()\n        ]\n        session_stats_str = (\n            \"Test String Here - -\"\n            f\"live sessions: [{', '.join(live_session_strs)}], GPU memory: \"\n            f\"{torch.cuda.memory_allocated() // 1024**2} MiB used and \"\n            f\"{torch.cuda.memory_reserved() // 1024**2} MiB reserved\"\n            f\" (max over time: {torch.cuda.max_memory_allocated() // 1024**2} MiB used \"\n            f\"and {torch.cuda.max_memory_reserved() // 1024**2} MiB reserved)\"\n        )\n        return session_stats_str\n\n    def __clear_session_state(self, session_id: str) -> bool:\n        session = self.session_states.pop(session_id, None)\n        if session is None:\n            logger.warning(\n                f\"cannot close session {session_id} as it does not exist (it might have expired); \"\n                f\"{self.__get_session_stats()}\"\n            )\n            return False\n        else:\n            logger.info(f\"removed session {session_id}; {self.__get_session_stats()}\")\n            return True\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/.babelrc",
    "content": "{\n  \"env\": {\n      \"production\": {\n          \"plugins\": [\"babel-plugin-strip-invariant\"]\n      }\n  }\n}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/.dockerignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\nstorybook-static\n.env\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n\n# Test results\n/coverage/\n/test-results/\n/playwright-report/\n/playwright/.cache/\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/.eslintignore",
    "content": "node_modules/\ndist/\nenv.d.ts"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/.eslintrc.cjs",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nmodule.exports = {\n  root: true,\n  env: {browser: true, es2020: true},\n  extends: [\n    'eslint:recommended',\n    'plugin:@typescript-eslint/recommended',\n    'plugin:react/recommended',\n    'plugin:react-hooks/recommended',\n    'plugin:import/recommended',\n    'plugin:prettier/recommended',\n  ],\n  ignorePatterns: ['dist', '.eslintrc.cjs'],\n  parser: '@typescript-eslint/parser',\n  parserOptions: {\n    ecmaVersion: 'latest',\n    sourceType: 'module',\n    project: ['./tsconfig.json', './tsconfig.node.json'],\n    tsconfigRootDir: __dirname,\n  },\n  plugins: ['react-refresh'],\n  settings: {\n    react: {\n      version: 'detect',\n    },\n    'import/resolver': {\n      typescript: {},\n      node: {},\n    },\n  },\n  rules: {\n    'no-console': 'warn',\n    curly: 'warn',\n    'react/jsx-no-useless-fragment': 'warn',\n    '@typescript-eslint/no-unused-vars': [\n      'warn',\n      {\n        argsIgnorePattern: '^_',\n      },\n    ],\n    'react-refresh/only-export-components': [\n      'warn',\n      {\n        allowConstantExport: true,\n      },\n    ],\n    'react/react-in-jsx-scope': 'off',\n  },\n};\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/.gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\nlerna-debug.log*\n\nnode_modules\ndist\ndist-ssr\n*.local\nstorybook-static\n.env\n\n# Editor directories and files\n.vscode/*\n!.vscode/extensions.json\n.idea\n.DS_Store\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n\n# Test results\n/coverage/\n/test-results/\n/playwright-report/\n/playwright/.cache/\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/.prettierignore",
    "content": "node_modules/\ndist/"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/.prettierrc.json",
    "content": "{\n  \"arrowParens\": \"avoid\",\n  \"bracketSameLine\": true,\n  \"bracketSpacing\": false,\n  \"singleQuote\": true,\n  \"tabWidth\": 2,\n  \"trailingComma\": \"all\",\n  \"endOfLine\": \"auto\"\n}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/.watchmanconfig",
    "content": "{}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/frontend.Dockerfile",
    "content": "# Stage 1: Build Stage\nFROM node:22.9.0 AS build\n\nWORKDIR /app\n\n# Copy package.json and yarn.lock\nCOPY package.json ./\nCOPY yarn.lock ./\n\n# Install dependencies\nRUN yarn install --frozen-lockfile\n\n# Copy source code\nCOPY . .\n\n# Build the application\nRUN yarn build\n\n# Stage 2: Production Stage\nFROM nginx:latest\n\n# Copy built files from the build stage to the production image\nCOPY --from=build /app/dist /usr/share/nginx/html\n\n# Container startup command for the web server (nginx in this case)\nCMD [\"nginx\", \"-g\", \"daemon off;\"]\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/index.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\" />\n    <meta\n      name=\"viewport\"\n      content=\"width=device-width, initial-scale=1.0, shrink-to-fit=no\" />\n    <title>SAM 2 Demo | By Meta FAIR</title>\n  </head>\n  <body>\n    <div id=\"root\"></div>\n    <script type=\"module\" src=\"/src/main.tsx\"></script>\n  </body>\n</html>\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/package.json",
    "content": "{\n  \"name\": \"frontend-vite\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"vite\",\n    \"merge-schemas\": \"tsx schemas/merge-schemas\",\n    \"relay\": \"yarn merge-schemas && relay-compiler\",\n    \"build\": \"tsc && vite build\",\n    \"lint\": \"eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0\",\n    \"preview\": \"vite preview --open\"\n  },\n  \"dependencies\": {\n    \"@carbon/icons-react\": \"^11.34.1\",\n    \"@heroicons/react\": \"^2.0.18\",\n    \"@monaco-editor/react\": \"^4.6.0\",\n    \"@stylexjs/stylex\": \"^0.6.1\",\n    \"graphql\": \"^16.8.1\",\n    \"immer\": \"^10.0.3\",\n    \"immutability-helper\": \"^3.1.1\",\n    \"jotai\": \"^2.6.1\",\n    \"jotai-immer\": \"^0.3.0\",\n    \"localforage\": \"^1.10.0\",\n    \"monaco-editor\": \"^0.48.0\",\n    \"mp4box\": \"^0.5.2\",\n    \"pts\": \"^0.12.8\",\n    \"react\": \"^18.2.0\",\n    \"react-daisyui\": \"^4.1.0\",\n    \"react-device-detect\": \"^2.2.3\",\n    \"react-dom\": \"^18.2.0\",\n    \"react-dropzone\": \"^14.2.3\",\n    \"react-error-boundary\": \"^4.0.11\",\n    \"react-photo-album\": \"^2.3.0\",\n    \"react-pts-canvas\": \"^0.5.2\",\n    \"react-relay\": \"^16.2.0\",\n    \"react-router-dom\": \"^6.15.0\",\n    \"relay-runtime\": \"^16.2.0\",\n    \"serialize-error\": \"^11.0.3\",\n    \"use-immer\": \"^0.9.0\",\n    \"use-resize-observer\": \"^9.1.0\"\n  },\n  \"devDependencies\": {\n    \"@graphql-tools/load-files\": \"^7.0.0\",\n    \"@graphql-tools/merge\": \"^9.0.4\",\n    \"@tailwindcss/typography\": \"^0.5.9\",\n    \"@types/dom-webcodecs\": \"^0.1.11\",\n    \"@types/invariant\": \"^2.2.37\",\n    \"@types/node\": \"^20.14.10\",\n    \"@types/react\": \"^18.2.47\",\n    \"@types/react-dom\": \"^18.2.7\",\n    \"@types/react-relay\": \"^16.0.6\",\n    \"@types/relay-runtime\": \"^14.1.13\",\n    \"@typescript-eslint/eslint-plugin\": \"^6.18.1\",\n    \"@typescript-eslint/parser\": \"^6.18.1\",\n    \"@vitejs/plugin-react\": \"^4.2.1\",\n    \"autoprefixer\": \"^10.4.15\",\n    \"babel-plugin-relay\": \"^16.2.0\",\n    \"babel-plugin-strip-invariant\": \"^1.0.0\",\n    \"daisyui\": \"^3.6.3\",\n    \"eslint\": \"^8.48.0\",\n    \"eslint-config-prettier\": \"^9.0.0\",\n    \"eslint-import-resolver-alias\": \"^1.1.2\",\n    \"eslint-import-resolver-typescript\": \"^3.6.3\",\n    \"eslint-plugin-import\": \"^2.28.1\",\n    \"eslint-plugin-prettier\": \"^5.1.3\",\n    \"eslint-plugin-react\": \"^7.33.2\",\n    \"eslint-plugin-react-hooks\": \"^4.6.0\",\n    \"eslint-plugin-react-refresh\": \"^0.4.3\",\n    \"invariant\": \"^2.2.4\",\n    \"postcss\": \"^8.4.28\",\n    \"postinstall-postinstall\": \"^2.1.0\",\n    \"prettier\": \"^3.0.3\",\n    \"relay-compiler\": \"^16.2.0\",\n    \"sass\": \"^1.66.1\",\n    \"strip-ansi\": \"^7.1.0\",\n    \"tailwindcss\": \"^3.3.3\",\n    \"tsx\": \"^4.16.2\",\n    \"typescript\": \">=4.3.5 <5.4.0\",\n    \"vite\": \"^5.0.11\",\n    \"vite-plugin-babel\": \"^1.2.0\",\n    \"vite-plugin-relay\": \"^2.0.0\",\n    \"vite-plugin-stylex-dev\": \"^0.5.2\"\n  },\n  \"resolutions\": {\n    \"wrap-ansi\": \"7.0.0\"\n  },\n  \"relay\": {\n    \"src\": \"./src/\",\n    \"schema\": \"./schema.graphql\",\n    \"language\": \"typescript\",\n    \"eagerEsModules\": true,\n    \"exclude\": [\n      \"**/node_modules/**\",\n      \"**/__mocks__/**\",\n      \"**/__generated__/**\"\n    ]\n  }\n}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/postcss.config.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport default {\n  plugins: {\n    'postcss-import': {},\n    'tailwindcss/nesting': {},\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n};\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/schema.graphql",
    "content": "input AddPointsInput {\n  sessionId: String!\n  frameIndex: Int!\n  clearOldPoints: Boolean!\n  objectId: Int!\n  labels: [Int!]!\n  points: [[Float!]!]!\n}\n\ntype CancelPropagateInVideo {\n  success: Boolean!\n}\n\ninput CancelPropagateInVideoInput {\n  sessionId: String!\n}\n\ninput ClearPointsInFrameInput {\n  sessionId: String!\n  frameIndex: Int!\n  objectId: Int!\n}\n\ntype ClearPointsInVideo {\n  success: Boolean!\n}\n\ninput ClearPointsInVideoInput {\n  sessionId: String!\n}\n\ntype CloseSession {\n  success: Boolean!\n}\n\ninput CloseSessionInput {\n  sessionId: String!\n}\n\ntype Mutation {\n  startSession(input: StartSessionInput!): StartSession!\n  closeSession(input: CloseSessionInput!): CloseSession!\n  addPoints(input: AddPointsInput!): RLEMaskListOnFrame!\n  clearPointsInFrame(input: ClearPointsInFrameInput!): RLEMaskListOnFrame!\n  clearPointsInVideo(input: ClearPointsInVideoInput!): ClearPointsInVideo!\n  removeObject(input: RemoveObjectInput!): [RLEMaskListOnFrame!]!\n  cancelPropagateInVideo(\n    input: CancelPropagateInVideoInput!\n  ): CancelPropagateInVideo!\n  createDeletionId: String!\n  acceptTos: Boolean!\n  acceptTermsOfService: String!\n  uploadVideo(\n    file: Upload!\n    startTimeSec: Float = null\n    durationTimeSec: Float = null\n  ): Video!\n  uploadSharedVideo(file: Upload!): SharedVideo!\n  uploadAnnotations(file: Upload!): Boolean!\n}\n\ninput PingInput {\n  sessionId: String!\n}\n\ntype Pong {\n  success: Boolean!\n}\n\ntype Query {\n  ping(input: PingInput!): Pong!\n  defaultVideo: Video!\n  videos(\n    \"\"\"\n    Returns the items in the list that come before the specified cursor.\n    \"\"\"\n    before: String = null\n    \"\"\"\n    Returns the items in the list that come after the specified cursor.\n    \"\"\"\n    after: String = null\n    \"\"\"\n    Returns the first n items from the list.\n    \"\"\"\n    first: Int = null\n    \"\"\"\n    Returns the items in the list that come after the specified cursor.\n    \"\"\"\n    last: Int = null\n  ): VideoConnection!\n  sharedVideo(path: String!): SharedVideo!\n}\n\ntype RLEMask {\n  size: [Int!]!\n  counts: String!\n  order: String!\n}\n\ntype RLEMaskForObject {\n  objectId: Int!\n  rleMask: RLEMask!\n}\n\ntype RLEMaskListOnFrame {\n  frameIndex: Int!\n  rleMaskList: [RLEMaskForObject!]!\n}\n\ninput RemoveObjectInput {\n  sessionId: String!\n  objectId: Int!\n}\n\ntype StartSession {\n  sessionId: String!\n}\n\ninput StartSessionInput {\n  path: String!\n}\n\n\"\"\"\nThe `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"4\"`) or integer (such as `4`) input value will be accepted as an ID.\n\"\"\"\nscalar GlobalID\n  @specifiedBy(url: \"https://relay.dev/graphql/objectidentification.htm\")\n\n\"\"\"\nAn object with a Globally Unique ID\n\"\"\"\ninterface Node {\n  \"\"\"\n  The Globally Unique ID of this object\n  \"\"\"\n  id: GlobalID!\n}\n\n\"\"\"\nInformation to aid in pagination.\n\"\"\"\ntype PageInfo {\n  \"\"\"\n  When paginating forwards, are there more items?\n  \"\"\"\n  hasNextPage: Boolean!\n  \"\"\"\n  When paginating backwards, are there more items?\n  \"\"\"\n  hasPreviousPage: Boolean!\n  \"\"\"\n  When paginating backwards, the cursor to continue.\n  \"\"\"\n  startCursor: String\n  \"\"\"\n  When paginating forwards, the cursor to continue.\n  \"\"\"\n  endCursor: String\n}\n\ntype SharedVideo {\n  path: String!\n  url: String!\n}\n\nscalar Upload\n\ntype Video implements Node {\n  \"\"\"\n  The Globally Unique ID of this object\n  \"\"\"\n  id: GlobalID!\n  path: String!\n  posterPath: String\n  width: Int!\n  height: Int!\n  url: String!\n  posterUrl: String!\n}\n\n\"\"\"\nA connection to a list of items.\n\"\"\"\ntype VideoConnection {\n  \"\"\"\n  Pagination data for this connection\n  \"\"\"\n  pageInfo: PageInfo!\n  \"\"\"\n  Contains the nodes in this connection\n  \"\"\"\n  edges: [VideoEdge!]!\n}\n\n\"\"\"\nAn edge in a connection.\n\"\"\"\ntype VideoEdge {\n  \"\"\"\n  A cursor for use in pagination\n  \"\"\"\n  cursor: String!\n  \"\"\"\n  The item at the end of the edge\n  \"\"\"\n  node: Video!\n}\n\nschema {\n  query: Query\n  mutation: Mutation\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/schemas/inference-api-schema.graphql",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#    http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\ninput AddPointsInput {\n  sessionId: String!\n  frameIndex: Int!\n  clearOldPoints: Boolean!\n  objectId: Int!\n  labels: [Int!]!\n  points: [[Float!]!]!\n}\n\ntype CancelPropagateInVideo {\n  success: Boolean!\n}\n\ninput CancelPropagateInVideoInput {\n  sessionId: String!\n}\n\ninput ClearPointsInFrameInput {\n  sessionId: String!\n  frameIndex: Int!\n  objectId: Int!\n}\n\ntype ClearPointsInVideo {\n  success: Boolean!\n}\n\ninput ClearPointsInVideoInput {\n  sessionId: String!\n}\n\ntype CloseSession {\n  success: Boolean!\n}\n\ninput CloseSessionInput {\n  sessionId: String!\n}\n\ntype Mutation {\n  startSession(input: StartSessionInput!): StartSession!\n  closeSession(input: CloseSessionInput!): CloseSession!\n  addPoints(input: AddPointsInput!): RLEMaskListOnFrame!\n  clearPointsInFrame(input: ClearPointsInFrameInput!): RLEMaskListOnFrame!\n  clearPointsInVideo(input: ClearPointsInVideoInput!): ClearPointsInVideo!\n  removeObject(input: RemoveObjectInput!): [RLEMaskListOnFrame!]!\n  cancelPropagateInVideo(\n    input: CancelPropagateInVideoInput!\n  ): CancelPropagateInVideo!\n}\n\ninput PingInput {\n  sessionId: String!\n}\n\ntype Pong {\n  success: Boolean!\n}\n\ntype Query {\n  ping(input: PingInput!): Pong!\n}\n\ntype RLEMask {\n  size: [Int!]!\n  counts: String!\n  order: String!\n}\n\ntype RLEMaskForObject {\n  objectId: Int!\n  rleMask: RLEMask!\n}\n\ntype RLEMaskListOnFrame {\n  frameIndex: Int!\n  rleMaskList: [RLEMaskForObject!]!\n}\n\ninput RemoveObjectInput {\n  sessionId: String!\n  objectId: Int!\n}\n\ntype StartSession {\n  sessionId: String!\n}\n\ninput StartSessionInput {\n  path: String!\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/schemas/merge-schemas.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {loadFilesSync} from '@graphql-tools/load-files';\nimport {mergeTypeDefs} from '@graphql-tools/merge';\nimport fs from 'fs';\nimport {print} from 'graphql';\nimport path from 'path';\nimport * as prettier from 'prettier';\nimport {fileURLToPath} from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nconst loadedFiles = loadFilesSync(`${__dirname}/*.graphql`);\nconst typeDefs = mergeTypeDefs(loadedFiles);\nconst printedTypeDefs = print(typeDefs);\nconst prettyTypeDefs = await prettier.format(printedTypeDefs, {\n  parser: 'graphql',\n});\nfs.writeFileSync('schema.graphql', prettyTypeDefs);\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/schemas/video-api-schema.graphql",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#    http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"\nThe `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `\"4\"`) or integer (such as `4`) input value will be accepted as an ID.\n\"\"\"\nscalar GlobalID\n  @specifiedBy(url: \"https://relay.dev/graphql/objectidentification.htm\")\n\ntype Mutation {\n  createDeletionId: String!\n  acceptTos: Boolean!\n  acceptTermsOfService: String!\n  uploadVideo(\n    file: Upload!\n    startTimeSec: Float = null\n    durationTimeSec: Float = null\n  ): Video!\n  uploadSharedVideo(file: Upload!): SharedVideo!\n  uploadAnnotations(file: Upload!): Boolean!\n}\n\n\"\"\"\nAn object with a Globally Unique ID\n\"\"\"\ninterface Node {\n  \"\"\"\n  The Globally Unique ID of this object\n  \"\"\"\n  id: GlobalID!\n}\n\n\"\"\"\nInformation to aid in pagination.\n\"\"\"\ntype PageInfo {\n  \"\"\"\n  When paginating forwards, are there more items?\n  \"\"\"\n  hasNextPage: Boolean!\n\n  \"\"\"\n  When paginating backwards, are there more items?\n  \"\"\"\n  hasPreviousPage: Boolean!\n\n  \"\"\"\n  When paginating backwards, the cursor to continue.\n  \"\"\"\n  startCursor: String\n\n  \"\"\"\n  When paginating forwards, the cursor to continue.\n  \"\"\"\n  endCursor: String\n}\n\ntype Query {\n  defaultVideo: Video!\n  videos(\n    \"\"\"\n    Returns the items in the list that come before the specified cursor.\n    \"\"\"\n    before: String = null\n\n    \"\"\"\n    Returns the items in the list that come after the specified cursor.\n    \"\"\"\n    after: String = null\n\n    \"\"\"\n    Returns the first n items from the list.\n    \"\"\"\n    first: Int = null\n\n    \"\"\"\n    Returns the items in the list that come after the specified cursor.\n    \"\"\"\n    last: Int = null\n  ): VideoConnection!\n  sharedVideo(path: String!): SharedVideo!\n}\n\ntype SharedVideo {\n  path: String!\n  url: String!\n}\n\nscalar Upload\n\ntype Video implements Node {\n  \"\"\"\n  The Globally Unique ID of this object\n  \"\"\"\n  id: GlobalID!\n  path: String!\n  posterPath: String\n  width: Int!\n  height: Int!\n  url: String!\n  posterUrl: String!\n}\n\n\"\"\"\nA connection to a list of items.\n\"\"\"\ntype VideoConnection {\n  \"\"\"\n  Pagination data for this connection\n  \"\"\"\n  pageInfo: PageInfo!\n\n  \"\"\"\n  Contains the nodes in this connection\n  \"\"\"\n  edges: [VideoEdge!]!\n}\n\n\"\"\"\nAn edge in a connection.\n\"\"\"\ntype VideoEdge {\n  \"\"\"\n  A cursor for use in pagination\n  \"\"\"\n  cursor: String!\n\n  \"\"\"\n  The item at the end of the edge\n  \"\"\"\n  node: Video!\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/App.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport SAM2DemoApp from '@/demo/SAM2DemoApp';\nimport SettingsContextProvider from '@/settings/SettingsContextProvider';\nimport {RouterProvider, createBrowserRouter} from 'react-router-dom';\n\nexport default function App() {\n  const router = createBrowserRouter([\n    {\n      path: '*',\n      element: (\n        <SettingsContextProvider>\n          <SAM2DemoApp />\n        </SettingsContextProvider>\n      ),\n    },\n  ]);\n\n  return <RouterProvider router={router} />;\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/assets/scss/App.scss",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n *     http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n\n.tab {\n  display: flex;\n  padding: 0px 0px;\n  margin-right: 6px;\n  align-items: center;\n  height: 100%;\n}\n\n@layer base {\n  @font-face {\n    font-family: 'Inter';\n    src: url(/fonts/Inter-VariableFont.ttf) format('truetype-variations');\n  }\n}\n\nbody {\n  font-family: 'Inter', sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\nbody,\nhtml,\n#root {\n  height: 100%;\n  @media screen and (max-width: '768px') {\n    overflow: hidden;\n  }\n}\n\n:root {\n  --segEv-font: 'Inter', system-ui, -apple-system, BlinkMacSystemFont,\n    'Segoe UI', Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue',\n    sans-serif;\n  --perspective: 4000px;\n  color-scheme: dark;\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-family: 'Inter', sans-serif;\n}\n\n.prose .display h1 {\n  @apply text-4xl text-gray-800 font-medium leading-tight;\n}\n\n.prose .display h2 {\n  @apply text-gray-800 font-medium leading-tight;\n  font-size: 2.5rem;\n}\n\n.prose h1 {\n  @apply text-3xl text-gray-800 font-medium leading-tight mt-2 mb-4;\n  letter-spacing: 0.016rem;\n}\n\n.prose h2 {\n  @apply text-2xl text-gray-800 font-medium leading-tight my-2;\n  letter-spacing: 0.01rem;\n}\n\n.prose h3 {\n  @apply text-xl text-gray-800 font-medium leading-tight my-2;\n  letter-spacing: 0.005rem;\n}\n\n.prose h4 {\n  @apply text-lg text-gray-800 font-medium leading-tight my-2;\n}\n\n.prose h5 {\n  @apply text-xl text-gray-700 font-normal leading-normal my-2;\n  letter-spacing: 0.005rem;\n}\n\n.prose h6 {\n  @apply text-base text-gray-700 font-normal leading-normal my-2;\n}\n\n.prose p {\n  @apply text-sm text-gray-700 font-normal leading-normal;\n  @apply leading-snug;\n}\n\n.prose ol,\n.prose ul {\n  @apply text-sm text-gray-700 font-normal leading-normal;\n  padding-right: 2rem;\n}\n\n.dark-mode h1,\n.dark-mode h2,\n.dark-mode h3,\n.dark-mode h4,\n.dark-mode h5,\n.dark-mode p,\n.dark-mode ol,\n.dark-mode ul,\n.dark-mode p *,\n.dark-mode ol *,\n.dark-mode ul *,\n≈ {\n  @apply text-white;\n}\n\n.dark-mode h4,\n.dark-mode h6,\n.dark-mode li::marker,\n.dark-mode a {\n  @apply text-gray-200;\n}\n\n.flex-grow-2 {\n  flex-grow: 2;\n}\n\n.flex-grow-3 {\n  flex-grow: 3;\n}\n\n.flex-grow-4 {\n  flex-grow: 4;\n}\n\n.flex-grow-5 {\n  flex-grow: 5;\n}\n\n.nav-title {\n  font-family: var(--segEv-font);\n}\n\n.segment-active {\n  animation: segment-highlight 2s linear infinite;\n  stroke-dasharray: 5, 10;\n  stroke-width: 4px;\n}\n\n@keyframes segment-highlight {\n  to {\n    stroke-dashoffset: 60;\n  }\n}\n\n.segment-select {\n  animation: segment-dotted 2s linear infinite;\n  stroke-dasharray: 3, 5;\n  stroke-width: 3px;\n}\n\n@keyframes segment-dotted {\n  to {\n    stroke-dashoffset: 24;\n  }\n}\n\n/**\n * Daisy UI customizations\n */\n\n.btn {\n  @apply normal-case rounded-md;\n}\n\n.comp_summary h1,\n.comp_summary h2,\n.comp_summary h3 {\n  @apply mb-4;\n}\n\n.disabled {\n  opacity: 0.4;\n  pointer-events: none;\n}\n\n.absolute-center {\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n}\n\n@screen lg {\n  .drawer .grid {\n    grid-template-columns: max-content 1fr;\n  }\n}\n\n.fade-in {\n  transition: opacity 0.5s;\n  opacity: 1 !important;\n}\n\n.react-photo-gallery--gallery > div {\n  gap: 0.25rem;\n}\n\n.sticker {\n  filter: drop-shadow(0.25rem 0.25rem 5px #fff)\n    drop-shadow(-0.25rem 0.25rem 5px #fff)\n    drop-shadow(0.25rem -0.25rem 5px #fff)\n    drop-shadow(-0.25rem -0.25rem 5px #fff);\n  transition: filter 0.3s ease-out;\n}\n\n.sticker:hover,\n.sticker-select {\n  filter: drop-shadow(0.25rem 0.25rem 1px #2962d9)\n    drop-shadow(-0.25rem 0.25rem 1px #2962d9)\n    drop-shadow(0.25rem -0.25rem 1px #2962d9)\n    drop-shadow(-0.25rem -0.25rem 1px #2962d9);\n}\n\n/* keyframe animations */\n.mask-path,\n.reveal {\n  opacity: 0;\n  animation: reveal 0.4s ease-in forwards;\n}\n\n.slow-reveal {\n  animation: reveal 1s ease-in;\n}\n\n.reveal-then-conceal {\n  opacity: 0;\n  animation: reveal-then-conceal 1.5s ease-in-out forwards;\n}\n\n@keyframes reveal {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n\n@keyframes reveal-then-conceal {\n  from {\n    opacity: 0;\n  }\n  50% {\n    opacity: 1;\n  }\n  to {\n    opacity: 0;\n  }\n}\n\n.background-animate {\n  background-size: 400%;\n  animation: pulse 3s ease infinite;\n}\n\n@keyframes pulse {\n  0%,\n  100% {\n    background-position: 0% 50%;\n  }\n  50% {\n    background-position: 100% 50%;\n  }\n}\n\n/* Fix for Safari and Mobile Safari:\nExtracted Tailwind progress-bar styles and applied\nthem to a <div> instead of a <progress> element  */\n\n.loading-bar {\n  position: relative;\n  width: 100%;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n  overflow: hidden;\n  height: 0.5rem;\n  border-radius: 1rem;\n  border-radius: var(--rounded-box, 1rem);\n  vertical-align: baseline;\n  background-color: hsl(var(--n) / var(--tw-bg-opacity));\n  --tw-bg-opacity: 0.2;\n\n  &::after {\n    --tw-bg-opacity: 1;\n    background-color: hsl(var(--n) / var(--tw-bg-opacity));\n    content: '';\n    position: absolute;\n    top: 0px;\n    bottom: 0px;\n    left: -40%;\n    width: 33.333333%;\n    border-radius: 1rem;\n    border-radius: var(--rounded-box, 1rem);\n    animation: loading 5s infinite ease-in-out;\n  }\n}\n\n@keyframes loading {\n  50% {\n    left: 107%;\n  }\n}\n\n@keyframes inAnimation {\n  0% {\n    opacity: 0;\n    max-height: 0px;\n  }\n  50% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 1;\n    max-height: 600px;\n  }\n}\n\n@keyframes outAnimation {\n  0% {\n    opacity: 1;\n    max-height: 600px;\n  }\n  50% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 0;\n    max-height: 0px;\n  }\n}\n\n@keyframes ellipsisAnimation {\n  0% {\n    content: '';\n  }\n  25% {\n    content: '.';\n  }\n  50% {\n    content: '..';\n  }\n  75% {\n    content: '...';\n  }\n}\n\n.ellipsis::after {\n  content: '';\n  animation: ellipsisAnimation 1.5s infinite;\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/codecs/VideoDecoder.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {cloneFrame} from '@/common/codecs/WebCodecUtils';\nimport {FileStream} from '@/common/utils/FileUtils';\nimport {\n  createFile,\n  DataStream,\n  MP4ArrayBuffer,\n  MP4File,\n  MP4Sample,\n  MP4VideoTrack,\n} from 'mp4box';\nimport {isAndroid, isChrome, isEdge, isWindows} from 'react-device-detect';\n\nexport type ImageFrame = {\n  bitmap: VideoFrame;\n  timestamp: number;\n  duration: number;\n};\n\nexport type DecodedVideo = {\n  width: number;\n  height: number;\n  frames: ImageFrame[];\n  numFrames: number;\n  fps: number;\n};\n\nfunction decodeInternal(\n  identifier: string,\n  onReady: (mp4File: MP4File) => Promise<void>,\n  onProgress: (decodedVideo: DecodedVideo) => void,\n): Promise<DecodedVideo> {\n  return new Promise((resolve, reject) => {\n    const imageFrames: ImageFrame[] = [];\n    const globalSamples: MP4Sample[] = [];\n\n    let decoder: VideoDecoder;\n\n    let track: MP4VideoTrack | null = null;\n    const mp4File = createFile();\n\n    mp4File.onError = reject;\n    mp4File.onReady = async info => {\n      if (info.videoTracks.length > 0) {\n        track = info.videoTracks[0];\n      } else {\n        // The video does not have a video track, so looking if there is an\n        // \"otherTracks\" available. Note, I couldn't find any documentation\n        // about \"otherTracks\" in WebCodecs [1], but it was available in the\n        // info for MP4V-ES, which isn't supported by Chrome [2].\n        // However, we'll still try to get the track and then throw an error\n        // further down in the VideoDecoder.isConfigSupported if the codec is\n        // not supported by the browser.\n        //\n        // [1] https://www.w3.org/TR/webcodecs/\n        // [2] https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Video_codecs#mp4v-es\n        track = info.otherTracks[0];\n      }\n\n      if (track == null) {\n        reject(new Error(`${identifier} does not contain a video track`));\n        return;\n      }\n\n      const timescale = track.timescale;\n      const edits = track.edits;\n\n      let frame_n = 0;\n      decoder = new VideoDecoder({\n        // Be careful with any await in this function. The VideoDecoder will\n        // not await output and continue calling it with decoded frames.\n        async output(inputFrame) {\n          if (track == null) {\n            reject(new Error(`${identifier} does not contain a video track`));\n            return;\n          }\n\n          const saveTrack = track;\n\n          // If the track has edits, we'll need to check that only frames are\n          // returned that are within the edit list. This can happen for\n          // trimmed videos that have not been transcoded and therefore the\n          // video track contains more frames than those visually rendered when\n          // playing back the video.\n          if (edits != null && edits.length > 0) {\n            const cts = Math.round(\n              (inputFrame.timestamp * timescale) / 1_000_000,\n            );\n            if (cts < edits[0].media_time) {\n              inputFrame.close();\n              return;\n            }\n          }\n\n          // Workaround for Chrome where the decoding stops at ~17 frames unless\n          // the VideoFrame is closed. So, the workaround here is to create a\n          // new VideoFrame and close the decoded VideoFrame.\n          // The frame has to be cloned, or otherwise some frames at the end of the\n          // video will be black. Note, the default VideoFrame.clone doesn't work\n          // and it is using a frame cloning found here:\n          // https://webcodecs-blogpost-demo.glitch.me/\n          if (\n            (isAndroid && isChrome) ||\n            (isWindows && isChrome) ||\n            (isWindows && isEdge)\n          ) {\n            const clonedFrame = await cloneFrame(inputFrame);\n            inputFrame.close();\n            inputFrame = clonedFrame;\n          }\n\n          const sample = globalSamples[frame_n];\n          if (sample != null) {\n            const duration = (sample.duration * 1_000_000) / sample.timescale;\n            imageFrames.push({\n              bitmap: inputFrame,\n              timestamp: inputFrame.timestamp,\n              duration,\n            });\n            // Sort frames in order of timestamp. This is needed because Safari\n            // can return decoded frames out of order.\n            imageFrames.sort((a, b) => (a.timestamp < b.timestamp ? 1 : -1));\n            // Update progress on first frame and then every 40th frame\n            if (onProgress != null && frame_n % 100 === 0) {\n              onProgress({\n                width: saveTrack.track_width,\n                height: saveTrack.track_height,\n                frames: imageFrames,\n                numFrames: saveTrack.nb_samples,\n                fps:\n                  (saveTrack.nb_samples / saveTrack.duration) *\n                  saveTrack.timescale,\n              });\n            }\n          }\n          frame_n++;\n\n          if (saveTrack.nb_samples === frame_n) {\n            // Sort frames in order of timestamp. This is needed because Safari\n            // can return decoded frames out of order.\n            imageFrames.sort((a, b) => (a.timestamp > b.timestamp ? 1 : -1));\n            resolve({\n              width: saveTrack.track_width,\n              height: saveTrack.track_height,\n              frames: imageFrames,\n              numFrames: saveTrack.nb_samples,\n              fps:\n                (saveTrack.nb_samples / saveTrack.duration) *\n                saveTrack.timescale,\n            });\n          }\n        },\n        error(error) {\n          reject(error);\n        },\n      });\n\n      let description;\n      const trak = mp4File.getTrackById(track.id);\n      const entries = trak?.mdia?.minf?.stbl?.stsd?.entries;\n      if (entries == null) {\n        return;\n      }\n      for (const entry of entries) {\n        if (entry.avcC || entry.hvcC) {\n          const stream = new DataStream(undefined, 0, DataStream.BIG_ENDIAN);\n          if (entry.avcC) {\n            entry.avcC.write(stream);\n          } else if (entry.hvcC) {\n            entry.hvcC.write(stream);\n          }\n          description = new Uint8Array(stream.buffer, 8); // Remove the box header.\n          break;\n        }\n      }\n\n      const configuration: VideoDecoderConfig = {\n        codec: track.codec,\n        codedWidth: track.track_width,\n        codedHeight: track.track_height,\n        description,\n      };\n      const supportedConfig =\n        await VideoDecoder.isConfigSupported(configuration);\n      if (supportedConfig.supported == true) {\n        decoder.configure(configuration);\n\n        mp4File.setExtractionOptions(track.id, null, {\n          nbSamples: Infinity,\n        });\n        mp4File.start();\n      } else {\n        reject(\n          new Error(\n            `Decoder config faile: config ${JSON.stringify(\n              supportedConfig.config,\n            )} is not supported`,\n          ),\n        );\n        return;\n      }\n    };\n\n    mp4File.onSamples = async (\n      _id: number,\n      _user: unknown,\n      samples: MP4Sample[],\n    ) => {\n      for (const sample of samples) {\n        globalSamples.push(sample);\n        decoder.decode(\n          new EncodedVideoChunk({\n            type: sample.is_sync ? 'key' : 'delta',\n            timestamp: (sample.cts * 1_000_000) / sample.timescale,\n            duration: (sample.duration * 1_000_000) / sample.timescale,\n            data: sample.data,\n          }),\n        );\n      }\n      await decoder.flush();\n      decoder.close();\n    };\n\n    onReady(mp4File);\n  });\n}\n\nexport function decode(\n  file: File,\n  onProgress: (decodedVideo: DecodedVideo) => void,\n): Promise<DecodedVideo> {\n  return decodeInternal(\n    file.name,\n    async (mp4File: MP4File) => {\n      const reader = new FileReader();\n      reader.onload = function () {\n        const result = this.result as MP4ArrayBuffer;\n        if (result != null) {\n          result.fileStart = 0;\n          mp4File.appendBuffer(result);\n        }\n        mp4File.flush();\n      };\n      reader.readAsArrayBuffer(file);\n    },\n    onProgress,\n  );\n}\n\nexport function decodeStream(\n  fileStream: FileStream,\n  onProgress: (decodedVideo: DecodedVideo) => void,\n): Promise<DecodedVideo> {\n  return decodeInternal(\n    'stream',\n    async (mp4File: MP4File) => {\n      let part = await fileStream.next();\n      while (part.done === false) {\n        const result = part.value.data.buffer as MP4ArrayBuffer;\n        if (result != null) {\n          result.fileStart = part.value.range.start;\n          mp4File.appendBuffer(result);\n        }\n        mp4File.flush();\n        part = await fileStream.next();\n      }\n    },\n    onProgress,\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/codecs/VideoEncoder.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {ImageFrame} from '@/common/codecs/VideoDecoder';\nimport {MP4ArrayBuffer, createFile} from 'mp4box';\n\n// The selection of timescale and seconds/key-frame value are\n// explained in the following docs: https://github.com/vjeux/mp4-h264-re-encode\nconst TIMESCALE = 90000;\nconst SECONDS_PER_KEY_FRAME = 2;\n\nexport function encode(\n  width: number,\n  height: number,\n  numFrames: number,\n  framesGenerator: AsyncGenerator<ImageFrame, unknown>,\n  progressCallback?: (progress: number) => void,\n): Promise<MP4ArrayBuffer> {\n  return new Promise((resolve, reject) => {\n    let encodedFrameIndex = 0;\n    let nextKeyFrameTimestamp = 0;\n    let trackID: number | null = null;\n    const durations: number[] = [];\n\n    const outputFile = createFile();\n\n    const encoder = new VideoEncoder({\n      output(chunk, metaData) {\n        const uint8 = new Uint8Array(chunk.byteLength);\n        chunk.copyTo(uint8);\n\n        const description = metaData?.decoderConfig?.description;\n        if (trackID === null) {\n          trackID = outputFile.addTrack({\n            width: width,\n            height: height,\n            timescale: TIMESCALE,\n            avcDecoderConfigRecord: description,\n          });\n        }\n        const shiftedDuration = durations.shift();\n        if (shiftedDuration != null) {\n          outputFile.addSample(trackID, uint8, {\n            duration: getScaledDuration(shiftedDuration),\n            is_sync: chunk.type === 'key',\n          });\n          encodedFrameIndex++;\n          progressCallback?.(encodedFrameIndex / numFrames);\n        }\n\n        if (encodedFrameIndex === numFrames) {\n          resolve(outputFile.getBuffer());\n        }\n      },\n      error(error) {\n        reject(error);\n        return;\n      },\n    });\n\n    const setConfigurationAndEncodeFrames = async () => {\n      // The codec value was taken from the following implementation and seems\n      // reasonable for our use case for now:\n      // https://github.com/vjeux/mp4-h264-re-encode/blob/main/mp4box.html#L103\n\n      // Additional details about codecs can be found here:\n      //  - https://developer.mozilla.org/en-US/docs/Web/Media/Formats/codecs_parameter\n      //  - https://www.w3.org/TR/webcodecs-codec-registry/#video-codec-registry\n      //\n      // The following setting is a good compromise between output video file\n      // size and quality. The latencyMode \"realtime\" is needed for Safari,\n      // which otherwise will produce 20x larger files when in quality\n      // latencyMode. Chrome does a really good job with file size even when\n      // latencyMode is set to quality.\n      const configuration: VideoEncoderConfig = {\n        codec: 'avc1.4d0034',\n        width: roundToNearestEven(width),\n        height: roundToNearestEven(height),\n        bitrate: 14_000_000,\n        alpha: 'discard',\n        bitrateMode: 'variable',\n        latencyMode: 'realtime',\n      };\n      const supportedConfig =\n        await VideoEncoder.isConfigSupported(configuration);\n      if (supportedConfig.supported === true) {\n        encoder.configure(configuration);\n      } else {\n        throw new Error(\n          `Unsupported video encoder config ${JSON.stringify(supportedConfig)}`,\n        );\n      }\n\n      for await (const frame of framesGenerator) {\n        const {bitmap, duration, timestamp} = frame;\n        durations.push(duration);\n        let keyFrame = false;\n        if (timestamp >= nextKeyFrameTimestamp) {\n          await encoder.flush();\n          keyFrame = true;\n          nextKeyFrameTimestamp = timestamp + SECONDS_PER_KEY_FRAME * 1e6;\n        }\n        encoder.encode(bitmap, {keyFrame});\n        bitmap.close();\n      }\n\n      await encoder.flush();\n      encoder.close();\n    };\n\n    setConfigurationAndEncodeFrames();\n  });\n}\n\nfunction getScaledDuration(rawDuration: number) {\n  return rawDuration / (1_000_000 / TIMESCALE);\n}\n\nfunction roundToNearestEven(dim: number) {\n  const rounded = Math.round(dim);\n\n  if (rounded % 2 === 0) {\n    return rounded;\n  } else {\n    return rounded + (rounded > dim ? -1 : 1);\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/codecs/WebCodecUtils.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n// https://github.com/w3c/webcodecs/issues/88\n// https://issues.chromium.org/issues/40725065\n// https://webcodecs-blogpost-demo.glitch.me/\nexport async function cloneFrame(frame: VideoFrame): Promise<VideoFrame> {\n  const {\n    codedHeight,\n    codedWidth,\n    colorSpace,\n    displayHeight,\n    displayWidth,\n    format,\n    timestamp,\n  } = frame;\n  const rect = {x: 0, y: 0, width: codedWidth, height: codedHeight};\n  const data = new ArrayBuffer(frame.allocationSize({rect}));\n  try {\n    await frame.copyTo(data, {rect});\n  } catch (error) {\n    // The VideoFrame#copyTo on x64 builds on macOS fails. The workaround here\n    // is to clone the frame.\n    // https://stackoverflow.com/questions/77898766/inconsistent-behavior-of-webcodecs-copyto-method-across-different-browsers-an\n    return frame.clone();\n  }\n  return new VideoFrame(data, {\n    codedHeight,\n    codedWidth,\n    colorSpace,\n    displayHeight,\n    displayWidth,\n    duration: frame.duration ?? undefined,\n    format: format!,\n    timestamp,\n    visibleRect: frame.visibleRect ?? undefined,\n  });\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/MobileFirstClickBanner.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport ChangeVideoModal from '@/common/components/gallery/ChangeVideoModal';\nimport {DEMO_SHORT_NAME} from '@/demo/DemoConfig';\nimport {spacing} from '@/theme/tokens.stylex';\nimport {ImageCopy} from '@carbon/icons-react';\nimport stylex from '@stylexjs/stylex';\nimport {Button} from 'react-daisyui';\n\nconst styles = stylex.create({\n  container: {\n    position: 'relative',\n    backgroundColor: '#000',\n    padding: spacing[5],\n    paddingVertical: spacing[6],\n    display: 'flex',\n    flexDirection: 'column',\n    gap: spacing[4],\n  },\n});\n\nexport default function MobileFirstClickBanner() {\n  return (\n    <div {...stylex.props(styles.container)}>\n      <div className=\"flex text-white text-lg\">\n        Click an object in the video to start\n      </div>\n      <div className=\"text-sm text-[#A7B3BF]\">\n        <p>\n          You&apos;ll be able to use {DEMO_SHORT_NAME} to make fun edits to any\n          video by tracking objects and applying visual effects. To start, click\n          any object in the video.\n        </p>\n      </div>\n      <div className=\"flex items-center\">\n        <ChangeVideoModal\n          videoGalleryModalTrigger={MobileVideoGalleryModalTrigger}\n          showUploadInGallery={true}\n        />\n      </div>\n    </div>\n  );\n}\n\ntype MobileVideoGalleryModalTriggerProps = {\n  onClick: () => void;\n};\n\nfunction MobileVideoGalleryModalTrigger({\n  onClick,\n}: MobileVideoGalleryModalTriggerProps) {\n  return (\n    <Button\n      color=\"ghost\"\n      startIcon={<ImageCopy size={20} />}\n      onClick={onClick}\n      className=\"text-white p-0\">\n      Change video\n    </Button>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/Tooltip.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {PropsWithChildren} from 'react';\n\ntype Props = PropsWithChildren<{\n  className?: string;\n  message: string;\n  position?: 'left' | 'top' | 'right' | 'bottom';\n}>;\n\n/**\n * This is a custom Tooltip component because React Daisy UI does not have an\n * option to *only* show tooltip on large devices.\n */\nexport default function Tooltip({\n  children,\n  className = '',\n  message,\n  position = 'top',\n}: Props) {\n  return (\n    <div\n      className={`lg:tooltip tooltip-${position} ${className}`}\n      data-tip={message}>\n      {children}\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/AddObjectButton.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport useMessagesSnackbar from '@/common/components/snackbar/useDemoMessagesSnackbar';\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport {activeTrackletObjectIdAtom, labelTypeAtom} from '@/demo/atoms';\nimport {Add} from '@carbon/icons-react';\nimport {useSetAtom} from 'jotai';\n\nexport default function AddObjectButton() {\n  const video = useVideo();\n  const setActiveTrackletId = useSetAtom(activeTrackletObjectIdAtom);\n  const setLabelType = useSetAtom(labelTypeAtom);\n  const {enqueueMessage} = useMessagesSnackbar();\n\n  async function addObject() {\n    enqueueMessage('addObjectClick');\n    const tracklet = await video?.createTracklet();\n    if (tracklet != null) {\n      setActiveTrackletId(tracklet.id);\n      setLabelType('positive');\n    }\n  }\n\n  return (\n    <div\n      onClick={addObject}\n      className=\"group flex justify-start mx-4 px-4 bg-transparent text-white !rounded-xl border-none cursor-pointer\">\n      <div className=\"flex gap-6 items-center\">\n        <div className=\" group-hover:bg-graydark-700 border border-white relative h-12 w-12 md:w-20 md:h-20 shrink-0 rounded-lg flex items-center justify-center\">\n          <Add size={36} className=\"group-hover:text-white text-gray-300\" />\n        </div>\n        <div className=\"font-medium text-base\">Add another object</div>\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/ClearAllPointsInVideoButton.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport useRestartSession from '@/common/components/session/useRestartSession';\nimport useMessagesSnackbar from '@/common/components/snackbar/useDemoMessagesSnackbar';\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport {isPlayingAtom, isStreamingAtom, labelTypeAtom} from '@/demo/atoms';\nimport {Reset} from '@carbon/icons-react';\nimport stylex from '@stylexjs/stylex';\nimport {useAtomValue, useSetAtom} from 'jotai';\nimport {useState} from 'react';\nimport {Button, Loading} from 'react-daisyui';\n\nconst styles = stylex.create({\n  container: {\n    display: 'flex',\n    alignItems: 'center',\n  },\n});\n\ntype Props = {\n  onRestart: () => void;\n};\n\nexport default function ClearAllPointsInVideoButton({onRestart}: Props) {\n  const [isLoading, setIsLoading] = useState<boolean>(false);\n  const isPlaying = useAtomValue(isPlayingAtom);\n  const isStreaming = useAtomValue(isStreamingAtom);\n  const setLabelType = useSetAtom(labelTypeAtom);\n  const {clearMessage} = useMessagesSnackbar();\n  const {restartSession} = useRestartSession();\n\n  const video = useVideo();\n\n  async function handleRestart() {\n    if (video === null) {\n      return;\n    }\n\n    setIsLoading(true);\n    if (isPlaying) {\n      video.pause();\n    }\n    if (isStreaming) {\n      await video.abortStreamMasks();\n    }\n    const isSuccessful = await video.clearPointsInVideo();\n    if (!isSuccessful) {\n      await restartSession();\n    }\n    video.frame = 0;\n    setLabelType('positive');\n    onRestart();\n    clearMessage();\n    setIsLoading(false);\n  }\n\n  return (\n    <div {...stylex.props(styles.container)}>\n      <Button\n        color=\"ghost\"\n        onClick={handleRestart}\n        className=\"!px-4 !rounded-full font-medium text-white hover:bg-black\"\n        startIcon={isLoading ? <Loading size=\"sm\" /> : <Reset size={20} />}>\n        Start over\n      </Button>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/CloseSessionButton.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport PrimaryCTAButton from '@/common/components/button/PrimaryCTAButton';\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport {ChevronRight} from '@carbon/icons-react';\n\ntype Props = {\n  onSessionClose: () => void;\n};\n\nexport default function CloseSessionButton({onSessionClose}: Props) {\n  const video = useVideo();\n\n  function handleCloseSession() {\n    video?.closeSession();\n    video?.logAnnotations();\n    onSessionClose();\n  }\n\n  return (\n    <PrimaryCTAButton onClick={handleCloseSession} endIcon={<ChevronRight />}>\n      Good to go\n    </PrimaryCTAButton>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/FirstClickView.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport ChangeVideo from '@/common/components/gallery/ChangeVideoModal';\nimport useMessagesSnackbar from '@/common/components/snackbar/useDemoMessagesSnackbar';\nimport {DEMO_SHORT_NAME} from '@/demo/DemoConfig';\nimport {useEffect, useRef} from 'react';\n\nexport default function FirstClickView() {\n  const isFirstClickMessageShown = useRef(false);\n  const {enqueueMessage} = useMessagesSnackbar();\n\n  useEffect(() => {\n    if (!isFirstClickMessageShown.current) {\n      isFirstClickMessageShown.current = true;\n      enqueueMessage('firstClick');\n    }\n  }, [enqueueMessage]);\n\n  return (\n    <div className=\"w-full h-full flex flex-col p-8\">\n      <div className=\"grow flex flex-col gap-6\">\n        <h2 className=\"text-2xl\">Click an object in the video to start</h2>\n        <p className=\"!text-gray-60\">\n          You&apos;ll be able to use {DEMO_SHORT_NAME} to make fun edits to any\n          video by tracking objects and applying visual effects.\n        </p>\n        <p className=\"!text-gray-60\">\n          To start, click any object in the video.\n        </p>\n      </div>\n      <div className=\"flex items-center\">\n        <ChangeVideo />\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/LimitNotice.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {InformationFilled} from '@carbon/icons-react';\n\nexport default function LimitNotice() {\n  return (\n    <div className=\"mt-6 gap-3 mx-6 flex items-center text-gray-400\">\n      <div>\n        <InformationFilled size={32} />\n      </div>\n      <div className=\"text-sm leading-snug\">\n        In this demo, you can track up to 3 objects, even though the SAM 2 model\n        does not have a limit.\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/MobileObjectsList.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport ClearAllPointsInVideoButton from '@/common/components/annotations/ClearAllPointsInVideoButton';\nimport ObjectThumbnail from '@/common/components/annotations/ObjectThumbnail';\nimport {OBJECT_TOOLBAR_INDEX} from '@/common/components/toolbar/ToolbarConfig';\nimport {BaseTracklet} from '@/common/tracker/Tracker';\nimport {activeTrackletObjectIdAtom, trackletObjectsAtom} from '@/demo/atoms';\nimport {spacing} from '@/theme/tokens.stylex';\nimport stylex from '@stylexjs/stylex';\nimport {useAtomValue, useSetAtom} from 'jotai';\n\nconst styles = stylex.create({\n  container: {\n    display: 'flex',\n    padding: spacing[5],\n    borderTop: '1px solid #DEE3E9',\n  },\n  trackletsContainer: {\n    flexGrow: 1,\n    display: 'flex',\n    alignItems: 'center',\n    gap: spacing[5],\n  },\n});\n\ntype Props = {\n  showActiveObject: () => void;\n  onTabChange: (newIndex: number) => void;\n};\n\nexport default function MobileObjectsList({\n  showActiveObject,\n  onTabChange,\n}: Props) {\n  const tracklets = useAtomValue(trackletObjectsAtom);\n  const setActiveTrackletId = useSetAtom(activeTrackletObjectIdAtom);\n\n  function handleSelectObject(tracklet: BaseTracklet) {\n    setActiveTrackletId(tracklet.id);\n    showActiveObject();\n  }\n\n  return (\n    <div {...stylex.props(styles.container)}>\n      <div {...stylex.props(styles.trackletsContainer)}>\n        {tracklets.map(tracklet => {\n          const {id, color, thumbnail} = tracklet;\n          return (\n            <ObjectThumbnail\n              key={id}\n              color={color}\n              thumbnail={thumbnail}\n              onClick={() => {\n                handleSelectObject(tracklet);\n              }}\n            />\n          );\n        })}\n      </div>\n      <ClearAllPointsInVideoButton\n        onRestart={() => onTabChange(OBJECT_TOOLBAR_INDEX)}\n      />\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/MobileObjectsToolbar.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport MobileObjectsToolbarHeader from '@/common/components/annotations/MobileObjectsToolbarHeader';\nimport ObjectsToolbarBottomActions from '@/common/components/annotations/ObjectsToolbarBottomActions';\nimport {getObjectLabel} from '@/common/components/annotations/ObjectUtils';\nimport ToolbarObject from '@/common/components/annotations/ToolbarObject';\nimport MobileFirstClickBanner from '@/common/components/MobileFirstClickBanner';\nimport {activeTrackletObjectAtom, isFirstClickMadeAtom} from '@/demo/atoms';\nimport {useAtomValue} from 'jotai';\n\ntype Props = {\n  onTabChange: (newIndex: number) => void;\n};\n\nexport default function MobileObjectsToolbar({onTabChange}: Props) {\n  const activeTracklet = useAtomValue(activeTrackletObjectAtom);\n  const isFirstClickMade = useAtomValue(isFirstClickMadeAtom);\n\n  if (!isFirstClickMade) {\n    return <MobileFirstClickBanner />;\n  }\n\n  return (\n    <div className=\"w-full\">\n      <MobileObjectsToolbarHeader />\n      {activeTracklet != null && (\n        <ToolbarObject\n          label={getObjectLabel(activeTracklet)}\n          tracklet={activeTracklet}\n          isActive={true}\n          isMobile={true}\n        />\n      )}\n\n      <ObjectsToolbarBottomActions onTabChange={onTabChange} />\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/MobileObjectsToolbarHeader.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport ToolbarProgressChip from '@/common/components/toolbar/ToolbarProgressChip';\nimport {isStreamingAtom, streamingStateAtom} from '@/demo/atoms';\nimport {useAtomValue} from 'jotai';\n\nexport default function MobileObjectsToolbarHeader() {\n  const isStreaming = useAtomValue(isStreamingAtom);\n  const streamingState = useAtomValue(streamingStateAtom);\n\n  return (\n    <div className=\"w-full flex gap-4 items-center px-5 py-5\">\n      <div className=\"grow text-sm text-white\">\n        <ToolbarProgressChip />\n        {streamingState === 'full'\n          ? 'Review your selected objects across the video, and continue to edit if needed. Once everything looks good, press “Next” to continue.'\n          : isStreaming\n            ? 'Watch the video closely for any places where your objects aren’t tracked correctly. You can also stop tracking to make additional edits.'\n            : 'Edit your object selection with a few more clicks if needed. Press “Track objects” to track your objects throughout the video.'}\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/ObjectActions.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport PointsToggle from '@/common/components/annotations/PointsToggle';\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport useReportError from '@/common/error/useReportError';\nimport {\n  activeTrackletObjectIdAtom,\n  isPlayingAtom,\n  isStreamingAtom,\n} from '@/demo/atoms';\nimport {\n  AddFilled,\n  Select_02,\n  SubtractFilled,\n  TrashCan,\n} from '@carbon/icons-react';\nimport {useAtom, useAtomValue} from 'jotai';\nimport {useState} from 'react';\nimport type {ButtonProps} from 'react-daisyui';\nimport {Button} from 'react-daisyui';\n\ntype Props = {\n  objectId: number;\n  active: boolean;\n};\n\nfunction CustomButton({className, ...props}: ButtonProps) {\n  return (\n    <Button\n      size=\"sm\"\n      color=\"ghost\"\n      className={`font-medium border-none hover:bg-black  px-2 h-10 ${className}`}\n      {...props}>\n      {props.children}\n    </Button>\n  );\n}\n\nexport default function ObjectActions({objectId, active}: Props) {\n  const [isRemovingObject, setIsRemovingObject] = useState<boolean>(false);\n  const [activeTrackId, setActiveTrackletId] = useAtom(\n    activeTrackletObjectIdAtom,\n  );\n  const isStreaming = useAtomValue(isStreamingAtom);\n  const isPlaying = useAtom(isPlayingAtom);\n\n  const video = useVideo();\n  const reportError = useReportError();\n\n  async function handleRemoveObject(\n    event: React.MouseEvent<HTMLButtonElement>,\n  ) {\n    try {\n      event.stopPropagation();\n      setIsRemovingObject(true);\n      if (isStreaming) {\n        await video?.abortStreamMasks();\n      }\n      if (isPlaying) {\n        video?.pause();\n      }\n      await video?.deleteTracklet(objectId);\n    } catch (error) {\n      reportError(error);\n    } finally {\n      setIsRemovingObject(false);\n      if (activeTrackId === objectId) {\n        setActiveTrackletId(null);\n      }\n    }\n  }\n\n  return (\n    <div>\n      {active && (\n        <div className=\"text-sm mt-1 leading-snug text-gray-400 hidden md:block ml-2 md:mb-4\">\n          Select <AddFilled size={14} className=\"inline\" /> to add areas to the\n          object and <SubtractFilled size={14} className=\"inline\" /> to remove\n          areas from the object in the video. Click on an existing point to\n          delete it.\n        </div>\n      )}\n\n      <div className=\"flex justify-between items-center md:mt-2 mt-0\">\n        {active ? (\n          <PointsToggle />\n        ) : (\n          <>\n            <CustomButton startIcon={<Select_02 size={24} />}>\n              Edit selection\n            </CustomButton>\n            <CustomButton\n              loading={isRemovingObject}\n              onClick={handleRemoveObject}\n              startIcon={!isRemovingObject && <TrashCan size={24} />}>\n              <span className=\"hidden md:inline\">Clear</span>\n            </CustomButton>\n          </>\n        )}\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/ObjectPlaceholder.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {BLUE_PINK_FILL_BR} from '@/theme/gradientStyle';\n\ntype Props = {\n  showPlus?: boolean;\n  onClick?: () => void;\n};\n\nexport default function ObjectPlaceholder({showPlus = true, onClick}: Props) {\n  return (\n    <div\n      className={`relative ${BLUE_PINK_FILL_BR} h-12 w-12 md:h-20 md:w-20 shrink-0 rounded-lg`}\n      onClick={onClick}>\n      {showPlus && (\n        <div className=\"absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2\">\n          <svg\n            xmlns=\"http://www.w3.org/2000/svg\"\n            width=\"16\"\n            height=\"16\"\n            viewBox=\"0 0 16 16\"\n            fill=\"none\">\n            <path\n              d=\"M16 7H9V0H7V7H0V9H7V16H9V9H16V7Z\"\n              fill=\"#667788\"\n              fillOpacity={1}\n            />\n          </svg>\n        </div>\n      )}\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/ObjectThumbnail.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\ntype Props = {\n  thumbnail: string | null;\n  color: string;\n  onClick?: () => void;\n};\n\nexport default function ObjectThumbnail({thumbnail, color, onClick}: Props) {\n  return (\n    <div\n      className=\"relative h-12 w-12 md:w-20 md:h-20 shrink-0 p-2 rounded-lg bg-contain bg-no-repeat bg-center\"\n      style={{\n        backgroundColor: color,\n      }}\n      onClick={onClick}>\n      <div\n        className=\"w-full h-full bg-contain bg-no-repeat bg-center\"\n        style={{\n          backgroundImage: thumbnail == null ? 'none' : `url(${thumbnail})`,\n        }}></div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/ObjectUtils.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {BaseTracklet} from '@/common/tracker/Tracker';\n\nexport function getObjectLabel(tracklet: BaseTracklet) {\n  return `Object ${tracklet.id + 1}`;\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/ObjectsToolbar.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport AddObjectButton from '@/common/components/annotations/AddObjectButton';\nimport FirstClickView from '@/common/components/annotations/FirstClickView';\nimport LimitNotice from '@/common/components/annotations/LimitNotice';\nimport ObjectsToolbarBottomActions from '@/common/components/annotations/ObjectsToolbarBottomActions';\nimport ObjectsToolbarHeader from '@/common/components/annotations/ObjectsToolbarHeader';\nimport {getObjectLabel} from '@/common/components/annotations/ObjectUtils';\nimport ToolbarObject from '@/common/components/annotations/ToolbarObject';\nimport {\n  activeTrackletObjectAtom,\n  activeTrackletObjectIdAtom,\n  isAddObjectEnabledAtom,\n  isFirstClickMadeAtom,\n  isTrackletObjectLimitReachedAtom,\n  trackletObjectsAtom,\n} from '@/demo/atoms';\nimport {useAtomValue, useSetAtom} from 'jotai';\n\ntype Props = {\n  onTabChange: (newIndex: number) => void;\n};\n\nexport default function ObjectsToolbar({onTabChange}: Props) {\n  const tracklets = useAtomValue(trackletObjectsAtom);\n  const activeTracklet = useAtomValue(activeTrackletObjectAtom);\n  const setActiveTrackletId = useSetAtom(activeTrackletObjectIdAtom);\n  const isFirstClickMade = useAtomValue(isFirstClickMadeAtom);\n  const isObjectLimitReached = useAtomValue(isTrackletObjectLimitReachedAtom);\n  const isAddObjectEnabled = useAtomValue(isAddObjectEnabledAtom);\n\n  if (!isFirstClickMade) {\n    return <FirstClickView />;\n  }\n\n  return (\n    <div className=\"flex flex-col h-full\">\n      <ObjectsToolbarHeader />\n      <div className=\"grow w-full overflow-y-auto\">\n        {tracklets.map(tracklet => {\n          return (\n            <ToolbarObject\n              key={tracklet.id}\n              label={getObjectLabel(tracklet)}\n              tracklet={tracklet}\n              isActive={activeTracklet?.id === tracklet.id}\n              onClick={() => {\n                setActiveTrackletId(tracklet.id);\n              }}\n            />\n          );\n        })}\n        {isAddObjectEnabled && <AddObjectButton />}\n        {isObjectLimitReached && <LimitNotice />}\n      </div>\n      <ObjectsToolbarBottomActions onTabChange={onTabChange} />\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/ObjectsToolbarBottomActions.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport ClearAllPointsInVideoButton from '@/common/components/annotations/ClearAllPointsInVideoButton';\nimport CloseSessionButton from '@/common/components/annotations/CloseSessionButton';\nimport TrackAndPlayButton from '@/common/components/button/TrackAndPlayButton';\nimport ToolbarBottomActionsWrapper from '@/common/components/toolbar/ToolbarBottomActionsWrapper';\nimport {\n  EFFECT_TOOLBAR_INDEX,\n  OBJECT_TOOLBAR_INDEX,\n} from '@/common/components/toolbar/ToolbarConfig';\nimport {streamingStateAtom} from '@/demo/atoms';\nimport {useAtomValue} from 'jotai';\n\ntype Props = {\n  onTabChange: (newIndex: number) => void;\n};\n\nexport default function ObjectsToolbarBottomActions({onTabChange}: Props) {\n  const streamingState = useAtomValue(streamingStateAtom);\n\n  const isTrackingEnabled =\n    streamingState !== 'none' && streamingState !== 'full';\n\n  function handleSwitchToEffectsTab() {\n    onTabChange(EFFECT_TOOLBAR_INDEX);\n  }\n\n  return (\n    <ToolbarBottomActionsWrapper>\n      <ClearAllPointsInVideoButton\n        onRestart={() => onTabChange(OBJECT_TOOLBAR_INDEX)}\n      />\n      {isTrackingEnabled && <TrackAndPlayButton />}\n      {streamingState === 'full' && (\n        <CloseSessionButton onSessionClose={handleSwitchToEffectsTab} />\n      )}\n    </ToolbarBottomActionsWrapper>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/ObjectsToolbarHeader.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport ToolbarHeaderWrapper from '@/common/components/toolbar/ToolbarHeaderWrapper';\nimport {isStreamingAtom, streamingStateAtom} from '@/demo/atoms';\nimport {useAtomValue} from 'jotai';\n\nexport default function ObjectsToolbarHeader() {\n  const isStreaming = useAtomValue(isStreamingAtom);\n  const streamingState = useAtomValue(streamingStateAtom);\n\n  return (\n    <ToolbarHeaderWrapper\n      title={\n        streamingState === 'full'\n          ? 'Review tracked objects'\n          : isStreaming\n            ? 'Tracking objects'\n            : 'Select objects'\n      }\n      description={\n        streamingState === 'full'\n          ? 'Review your selected objects across the video, and continue to edit if needed. Once everything looks good, press “Next” to continue.'\n          : isStreaming\n            ? 'Watch the video closely for any places where your objects aren’t tracked correctly. You can also stop tracking to make additional edits.'\n            : 'Adjust the selection of your object, or add additional objects. Press “Track objects” to track your objects throughout the video.'\n      }\n      className=\"mb-8\"\n    />\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/PointsToggle.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {labelTypeAtom} from '@/demo/atoms';\nimport {AddFilled, SubtractFilled} from '@carbon/icons-react';\nimport {useAtom} from 'jotai';\n\nexport default function PointsToggle() {\n  const [labelType, setLabelType] = useAtom(labelTypeAtom);\n  const isPositive = labelType === 'positive';\n\n  const buttonStyle = (selected: boolean) =>\n    `btn-md bg-graydark-800 !text-white md:px-2 lg:px-4 py-0.5 ${selected ? `border border-white hover:bg-graydark-800` : `border-graydark-700 hover:bg-graydark-700`}`;\n\n  return (\n    <div className=\"flex items-center w-full md:ml-2\">\n      <div className=\"join group grow gap-[1px]\">\n        <button\n          className={`w-1/2  btn join-item text-white ${buttonStyle(isPositive)}`}\n          onClick={() => setLabelType('positive')}>\n          <AddFilled size={24} className=\"text-blue-500\" /> Add\n        </button>\n        <button\n          className={`w-1/2 btn join-item text-red-700 ${buttonStyle(!isPositive)}`}\n          onClick={() => setLabelType('negative')}>\n          <SubtractFilled size={24} className=\"text-red-400\" />\n          Remove\n        </button>\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/PrimaryCTAButton.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport GradientBorder from '@/common/components/button/GradientBorder';\nimport type {ReactNode} from 'react';\n\ntype Props = {\n  disabled?: boolean;\n  endIcon?: ReactNode;\n} & React.DOMAttributes<HTMLButtonElement>;\n\nexport default function PrimaryCTAButton({\n  children,\n  disabled,\n  endIcon,\n  ...props\n}: Props) {\n  return (\n    <GradientBorder disabled={disabled}>\n      <button\n        className={`btn ${disabled && 'btn-disabled'} !rounded-full !bg-black !text-white !border-none`}\n        {...props}>\n        {children}\n        {endIcon != null && endIcon}\n      </button>\n    </GradientBorder>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/ToolbarObject.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport ObjectActions from '@/common/components/annotations/ObjectActions';\nimport ObjectPlaceholder from '@/common/components/annotations/ObjectPlaceholder';\nimport ObjectThumbnail from '@/common/components/annotations/ObjectThumbnail';\nimport ToolbarObjectContainer from '@/common/components/annotations/ToolbarObjectContainer';\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport {BaseTracklet} from '@/common/tracker/Tracker';\nimport emptyFunction from '@/common/utils/emptyFunction';\nimport {activeTrackletObjectIdAtom} from '@/demo/atoms';\nimport {useSetAtom} from 'jotai';\n\ntype Props = {\n  label: string;\n  tracklet: BaseTracklet;\n  isActive: boolean;\n  isMobile?: boolean;\n  onClick?: () => void;\n  onThumbnailClick?: () => void;\n};\n\nexport default function ToolbarObject({\n  label,\n  tracklet,\n  isActive,\n  isMobile = false,\n  onClick,\n  onThumbnailClick = emptyFunction,\n}: Props) {\n  const video = useVideo();\n  const setActiveTrackletId = useSetAtom(activeTrackletObjectIdAtom);\n\n  async function handleCancelNewObject() {\n    try {\n      await video?.deleteTracklet(tracklet.id);\n    } catch (error) {\n      reportError(error);\n    } finally {\n      setActiveTrackletId(null);\n    }\n  }\n\n  if (!tracklet.isInitialized) {\n    return (\n      <ToolbarObjectContainer\n        alignItems=\"center\"\n        isActive={isActive}\n        title=\"New object\"\n        subtitle=\"No object is currently selected. Click an object in the video.\"\n        thumbnail={<ObjectPlaceholder showPlus={false} />}\n        isMobile={isMobile}\n        onClick={onClick}\n        onCancel={handleCancelNewObject}\n      />\n    );\n  }\n\n  return (\n    <ToolbarObjectContainer\n      isActive={isActive}\n      onClick={onClick}\n      title={label}\n      subtitle=\"\"\n      thumbnail={\n        <ObjectThumbnail\n          thumbnail={tracklet.thumbnail}\n          color={tracklet.color}\n          onClick={onThumbnailClick}\n        />\n      }\n      isMobile={isMobile}>\n      <ObjectActions objectId={tracklet.id} active={isActive} />\n    </ToolbarObjectContainer>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/ToolbarObjectContainer.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {spacing} from '@/theme/tokens.stylex';\nimport {Close} from '@carbon/icons-react';\nimport stylex from '@stylexjs/stylex';\nimport {PropsWithChildren, ReactNode} from 'react';\n\nconst sharedStyles = stylex.create({\n  container: {\n    display: 'flex',\n    overflow: 'hidden',\n    cursor: 'pointer',\n    flexShrink: 0,\n    borderTop: 'none',\n    backgroundColor: {\n      '@media screen and (max-width: 768px)': '#000',\n    },\n    paddingHorizontal: {\n      default: spacing[8],\n      '@media screen and (max-width: 768px)': spacing[5],\n    },\n    paddingBottom: {\n      default: spacing[8],\n      '@media screen and (max-width: 768px)': 10,\n    },\n  },\n  activeContainer: {\n    background: '#000',\n    borderRadius: 16,\n    marginHorizontal: 16,\n    padding: {\n      default: spacing[4],\n      '@media screen and (max-width: 768px)': spacing[5],\n    },\n    marginBottom: {\n      default: spacing[8],\n      '@media screen and (max-width: 768px)': 0,\n    },\n  },\n  itemsCenter: {\n    alignItems: 'center',\n  },\n  rightColumn: {\n    marginStart: {\n      default: spacing[4],\n      '@media screen and (max-width: 768px)': 0,\n    },\n    flexGrow: 1,\n    alignItems: 'center',\n  },\n});\n\ntype ToolbarObjectContainerProps = PropsWithChildren<{\n  alignItems?: 'top' | 'center';\n  isActive: boolean;\n  title: string;\n  subtitle: string;\n  thumbnail: ReactNode;\n  isMobile: boolean;\n  onCancel?: () => void;\n  onClick?: () => void;\n}>;\n\nexport default function ToolbarObjectContainer({\n  alignItems = 'top',\n  children,\n  isActive,\n  title,\n  subtitle,\n  thumbnail,\n  isMobile,\n  onClick,\n  onCancel,\n}: ToolbarObjectContainerProps) {\n  if (isMobile) {\n    return (\n      <div\n        onClick={onClick}\n        {...stylex.props(sharedStyles.container, sharedStyles.itemsCenter)}>\n        <div {...stylex.props(sharedStyles.rightColumn)}>{children}</div>\n      </div>\n    );\n  }\n\n  return (\n    <div\n      onClick={onClick}\n      {...stylex.props(\n        sharedStyles.container,\n        isActive && sharedStyles.activeContainer,\n        alignItems === 'center' && sharedStyles.itemsCenter,\n      )}>\n      {thumbnail}\n      <div {...stylex.props(sharedStyles.rightColumn)}>\n        <div className=\"text-md font-semibold ml-2\">{title}</div>\n        {subtitle.length > 0 && (\n          <div className=\"text-sm text-gray-400 leading-5 mt-2 ml-2\">\n            {subtitle}\n          </div>\n        )}\n        {children}\n      </div>\n      {onCancel != null && (\n        <div className=\"items-start self-stretch\" onClick={onCancel}>\n          <Close size={32} />\n        </div>\n      )}\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/TrackletSwimlane.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport useSelectedFrameHelper from '@/common/components/video/filmstrip/useSelectedFrameHelper';\nimport {BaseTracklet, DatalessMask} from '@/common/tracker/Tracker';\nimport {spacing, w} from '@/theme/tokens.stylex';\nimport stylex from '@stylexjs/stylex';\nimport {useMemo} from 'react';\n\nconst styles = stylex.create({\n  container: {\n    display: 'flex',\n    alignItems: 'center',\n    gap: spacing[4],\n    width: '100%',\n  },\n  trackletNameContainer: {\n    width: w[12],\n    textAlign: 'center',\n    fontSize: '10px',\n    color: 'white',\n  },\n  swimlaneContainer: {\n    flexGrow: 1,\n    position: 'relative',\n    display: 'flex',\n    height: 12,\n    marginVertical: '0.25rem' /* 4px */,\n    '@media screen and (max-width: 768px)': {\n      marginVertical: 0,\n    },\n  },\n  swimlane: {\n    position: 'absolute',\n    left: 0,\n    top: '50%',\n    width: '100%',\n    height: 1,\n    transform: 'translate3d(0, -50%, 0)',\n    opacity: 0.4,\n  },\n  segment: {\n    position: 'absolute',\n    top: '50%',\n    height: 1,\n    transform: 'translate3d(0, -50%, 0)',\n  },\n  segmentationPoint: {\n    position: 'absolute',\n    top: '50%',\n    transform: 'translate3d(0, -50%, 0)',\n    borderRadius: '50%',\n    cursor: 'pointer',\n    width: 12,\n    height: 12,\n    '@media screen and (max-width: 768px)': {\n      width: 8,\n      height: 8,\n    },\n  },\n});\n\ntype SwimlineSegment = {\n  left: number;\n  width: number;\n};\n\ntype Props = {\n  tracklet: BaseTracklet;\n  onSelectFrame: (tracklet: BaseTracklet, index: number) => void;\n};\n\nfunction getSwimlaneSegments(masks: DatalessMask[]): SwimlineSegment[] {\n  if (masks.length === 0) {\n    return [];\n  }\n\n  const swimlineSegments: SwimlineSegment[] = [];\n  let left = -1;\n\n  for (let frameIndex = 0; frameIndex < masks.length; ++frameIndex) {\n    const isEmpty = masks?.[frameIndex]?.isEmpty ?? true;\n    if (left === -1 && !isEmpty) {\n      left = frameIndex;\n    } else if (left !== -1 && (isEmpty || frameIndex == masks.length - 1)) {\n      swimlineSegments.push({\n        left,\n        width: frameIndex - left + 1,\n      });\n      left = -1;\n    }\n  }\n\n  return swimlineSegments;\n}\n\nexport default function TrackletSwimlane({tracklet, onSelectFrame}: Props) {\n  const selection = useSelectedFrameHelper();\n\n  const segments = useMemo(() => {\n    return getSwimlaneSegments(tracklet.masks);\n  }, [tracklet.masks]);\n\n  const framesWithPoints = tracklet.points.reduce<number[]>(\n    (frames, pts, frameIndex) => {\n      if (pts != null && pts.length > 0) {\n        frames.push(frameIndex);\n      }\n      return frames;\n    },\n    [],\n  );\n\n  if (selection === null) {\n    return;\n  }\n\n  return (\n    <div {...stylex.props(styles.container)}>\n      <div {...stylex.props(styles.trackletNameContainer)}>\n        Object {tracklet.id + 1}\n      </div>\n      <div {...stylex.props(styles.swimlaneContainer)}>\n        <div\n          {...stylex.props(styles.swimlane)}\n          style={{\n            backgroundColor: tracklet.color,\n          }}\n        />\n        {segments.map(segment => {\n          return (\n            <div\n              key={segment.left}\n              {...stylex.props(styles.segment)}\n              style={{\n                backgroundColor: tracklet.color,\n                left: selection.toPosition(segment.left),\n                width: selection.toPosition(segment.width),\n              }}\n            />\n          );\n        })}\n        {framesWithPoints.map(index => {\n          return (\n            <div\n              key={`frame${index}`}\n              onClick={() => {\n                onSelectFrame?.(tracklet, index);\n              }}\n              {...stylex.props(styles.segmentationPoint)}\n              style={{\n                left: Math.floor(selection.toPosition(index) - 4),\n                backgroundColor: tracklet.color,\n              }}\n            />\n          );\n        })}\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/TrackletsAnnotation.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport TrackletSwimlane from '@/common/components/annotations/TrackletSwimlane';\nimport useTracklets from '@/common/components/annotations/useTracklets';\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport {BaseTracklet} from '@/common/tracker/Tracker';\nimport {m, spacing} from '@/theme/tokens.stylex';\nimport stylex from '@stylexjs/stylex';\n\nconst styles = stylex.create({\n  container: {\n    marginTop: m[3],\n    height: 75,\n    paddingHorizontal: spacing[4],\n    '@media screen and (max-width: 768px)': {\n      height: 25,\n    },\n  },\n});\n\nexport default function TrackletsAnnotation() {\n  const video = useVideo();\n  const tracklets = useTracklets();\n\n  function handleSelectFrame(_tracklet: BaseTracklet, index: number) {\n    if (video !== null) {\n      video.frame = index;\n    }\n  }\n\n  return (\n    <div {...stylex.props(styles.container)}>\n      {tracklets.map(tracklet => (\n        <TrackletSwimlane\n          key={tracklet.id}\n          tracklet={tracklet}\n          onSelectFrame={handleSelectFrame}\n        />\n      ))}\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/annotations/useTracklets.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {trackletObjectsAtom} from '@/demo/atoms';\nimport {useAtomValue} from 'jotai';\n\nexport default function useTracklets() {\n  return useAtomValue(trackletObjectsAtom);\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/button/GradientBorder.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport stylex from '@stylexjs/stylex';\n\nimport {gradients} from '@/theme/tokens.stylex';\n\nenum GradientTypes {\n  fullGradient = 'fullGradient',\n  bluePinkGradient = 'bluePinkGradient',\n}\n\ntype Props = {\n  gradientType?: GradientTypes;\n  disabled?: boolean;\n  rounded?: boolean;\n  className?: string;\n} & React.DOMAttributes<HTMLDivElement>;\n\nconst styles = stylex.create({\n  animationHover: {\n    ':hover': {\n      backgroundPosition: '300% 100%',\n    },\n  },\n\n  fullGradient: {\n    border: '2px solid transparent',\n    background: gradients['rainbow'],\n    backgroundSize: '100% 400%',\n    transition: 'background 0.35s ease-in-out',\n  },\n\n  bluePinkGradient: {\n    border: '2px solid transparent',\n    background: gradients['rainbow'],\n  },\n});\n\nexport default function GradientBorder({\n  gradientType = GradientTypes.fullGradient,\n  disabled,\n  rounded = true,\n  className = '',\n  children,\n}: Props) {\n  const gradient = (name: GradientTypes) => {\n    if (name === GradientTypes.fullGradient) {\n      return styles.fullGradient;\n    } else if (name === GradientTypes.bluePinkGradient) {\n      return styles.bluePinkGradient;\n    }\n  };\n\n  return (\n    <div\n      className={`${stylex(gradient(gradientType), !disabled && styles.animationHover)} ${disabled && 'opacity-30'} ${rounded && 'rounded-full'} ${className}`}>\n      {children}\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/button/PlaybackButton.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {OBJECT_TOOLBAR_INDEX} from '@/common/components/toolbar/ToolbarConfig';\nimport Tooltip from '@/common/components/Tooltip';\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport {isPlayingAtom, streamingStateAtom, toolbarTabIndex} from '@/demo/atoms';\nimport {PauseFilled, PlayFilledAlt} from '@carbon/icons-react';\nimport {useAtomValue} from 'jotai';\nimport {useCallback, useEffect} from 'react';\n\nexport default function PlaybackButton() {\n  const tabIndex = useAtomValue(toolbarTabIndex);\n  const streamingState = useAtomValue(streamingStateAtom);\n  const isPlaying = useAtomValue(isPlayingAtom);\n  const video = useVideo();\n\n  const isDisabled =\n    tabIndex === OBJECT_TOOLBAR_INDEX &&\n    streamingState !== 'none' &&\n    streamingState !== 'full';\n\n  const handlePlay = useCallback(() => {\n    video?.play();\n  }, [video]);\n\n  const handlePause = useCallback(() => {\n    video?.pause();\n  }, [video]);\n\n  const handleClick = useCallback(() => {\n    if (isDisabled) {\n      return;\n    }\n    if (isPlaying) {\n      handlePause();\n    } else {\n      handlePlay();\n    }\n  }, [isDisabled, isPlaying, handlePlay, handlePause]);\n\n  useEffect(() => {\n    const handleKey = (event: KeyboardEvent) => {\n      const callback = {\n        KeyK: handleClick,\n      }[event.code];\n      if (callback != null) {\n        event.preventDefault();\n        callback();\n      }\n    };\n    document.addEventListener('keydown', handleKey);\n    return () => {\n      document.removeEventListener('keydown', handleKey);\n    };\n  }, [handleClick]);\n\n  return (\n    <Tooltip message={`${isPlaying ? 'Pause' : 'Play'} (k)`}>\n      <button\n        disabled={isDisabled}\n        className={`group !rounded-full !w-10 !h-10 flex items-center justify-center ${getButtonStyles(isDisabled)}`}\n        onClick={handleClick}>\n        {isPlaying ? (\n          <PauseFilled size={18} />\n        ) : (\n          <PlayFilledAlt\n            size={18}\n            className={!isDisabled ? 'group-hover:text-green-500' : ''}\n          />\n        )}\n      </button>\n    </Tooltip>\n  );\n}\n\nfunction getButtonStyles(isDisabled: boolean): string {\n  if (isDisabled) {\n    return '!bg-gray-600 !text-graydark-700';\n  }\n  return `!text-black bg-white`;\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/button/PrimaryCTAButton.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport GradientBorder from '@/common/components/button/GradientBorder';\nimport type {ReactNode} from 'react';\n\ntype Props = {\n  disabled?: boolean;\n  endIcon?: ReactNode;\n} & React.DOMAttributes<HTMLButtonElement>;\n\nexport default function PrimaryCTAButton({\n  children,\n  disabled,\n  endIcon,\n  ...props\n}: Props) {\n  return (\n    <GradientBorder disabled={disabled}>\n      <button\n        className={`btn ${disabled && 'btn-disabled'} !rounded-full !bg-black !text-white !border-none`}\n        {...props}>\n        {children}\n        {endIcon != null && endIcon}\n      </button>\n    </GradientBorder>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/button/ResponsiveButton.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport useScreenSize from '@/common/screen/useScreenSize';\nimport type {ReactNode} from 'react';\nimport type {ButtonProps} from 'react-daisyui';\nimport {Button} from 'react-daisyui';\n\ntype Props = ButtonProps & {startIcon: ReactNode};\n\nexport default function ResponsiveButton(props: Props) {\n  const {isMobile} = useScreenSize();\n\n  return <Button {...props}>{!isMobile && props.children}</Button>;\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/button/TrackAndPlayButton.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport PrimaryCTAButton from '@/common/components/button/PrimaryCTAButton';\nimport useMessagesSnackbar from '@/common/components/snackbar/useDemoMessagesSnackbar';\nimport useFunctionThrottle from '@/common/components/useFunctionThrottle';\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport {\n  areTrackletObjectsInitializedAtom,\n  isStreamingAtom,\n  sessionAtom,\n  streamingStateAtom,\n} from '@/demo/atoms';\nimport {ChevronRight} from '@carbon/icons-react';\nimport {useAtom, useAtomValue, useSetAtom} from 'jotai';\nimport {useCallback, useEffect} from 'react';\n\nexport default function TrackAndPlayButton() {\n  const video = useVideo();\n  const [isStreaming, setIsStreaming] = useAtom(isStreamingAtom);\n  const streamingState = useAtomValue(streamingStateAtom);\n  const areObjectsInitialized = useAtomValue(areTrackletObjectsInitializedAtom);\n  const setSession = useSetAtom(sessionAtom);\n  const {enqueueMessage} = useMessagesSnackbar();\n  const {isThrottled, maxThrottles, throttle} = useFunctionThrottle(250, 4);\n\n  const isTrackAndPlayDisabled =\n    streamingState === 'aborting' || streamingState === 'requesting';\n\n  useEffect(() => {\n    function onStreamingStarted() {\n      setIsStreaming(true);\n    }\n    video?.addEventListener('streamingStarted', onStreamingStarted);\n\n    function onStreamingCompleted() {\n      enqueueMessage('trackAndPlayComplete');\n      setIsStreaming(false);\n    }\n    video?.addEventListener('streamingCompleted', onStreamingCompleted);\n\n    return () => {\n      video?.removeEventListener('streamingStarted', onStreamingStarted);\n      video?.removeEventListener('streamingCompleted', onStreamingCompleted);\n    };\n  }, [video, setIsStreaming, enqueueMessage]);\n\n  const handleTrackAndPlay = useCallback(() => {\n    if (isTrackAndPlayDisabled) {\n      return;\n    }\n    if (maxThrottles && isThrottled) {\n      enqueueMessage('trackAndPlayThrottlingWarning');\n    }\n\n    // Throttling is only applied while streaming because we should\n    // only throttle after a user has aborted inference. This way,\n    // a user can still quickly abort a stream if they notice the\n    // inferred mask is misaligned.\n    throttle(\n      () => {\n        if (!isStreaming) {\n          enqueueMessage('trackAndPlayClick');\n          video?.streamMasks();\n          setSession(previousSession =>\n            previousSession == null\n              ? previousSession\n              : {...previousSession, ranPropagation: true},\n          );\n        } else {\n          video?.abortStreamMasks();\n        }\n      },\n      {enableThrottling: isStreaming},\n    );\n  }, [\n    isTrackAndPlayDisabled,\n    isThrottled,\n    isStreaming,\n    maxThrottles,\n    video,\n    setSession,\n    enqueueMessage,\n    throttle,\n  ]);\n\n  useEffect(() => {\n    const handleKey = (event: KeyboardEvent) => {\n      const callback = {\n        KeyK: handleTrackAndPlay,\n      }[event.code];\n      if (callback != null) {\n        event.preventDefault();\n        callback();\n      }\n    };\n    document.addEventListener('keydown', handleKey);\n    return () => {\n      document.removeEventListener('keydown', handleKey);\n    };\n  }, [handleTrackAndPlay]);\n\n  return (\n    <PrimaryCTAButton\n      disabled={isThrottled || !areObjectsInitialized}\n      onClick={handleTrackAndPlay}\n      endIcon={isStreaming ? undefined : <ChevronRight size={20} />}>\n      {isStreaming ? 'Cancel Tracking' : 'Track objects'}\n    </PrimaryCTAButton>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/code/InitializeLocalMonaco.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {loader} from '@monaco-editor/react';\n\nimport Logger from '@/common/logger/Logger';\nimport * as monaco from 'monaco-editor';\nimport editorWorker from 'monaco-editor/esm/vs/editor/editor.worker?worker';\nimport tsWorker from 'monaco-editor/esm/vs/language/typescript/ts.worker?worker';\n\nself.MonacoEnvironment = {\n  getWorker(_, label) {\n    if (label === 'typescript' || label === 'javascript') {\n      return new tsWorker();\n    }\n    return new editorWorker();\n  },\n};\n\nloader.config({monaco});\n\nloader.init().then(monaco => {\n  Logger.debug('initialized monaco', monaco);\n});\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/effects/BackgroundEffects.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {backgroundEffects} from '@/common/components/effects/EffectsUtils';\nimport EffectVariantBadge from '@/common/components/effects/EffectVariantBadge';\nimport ToolbarActionIcon from '@/common/components/toolbar/ToolbarActionIcon';\nimport ToolbarSection from '@/common/components/toolbar/ToolbarSection';\nimport useVideoEffect from '@/common/components/video/editor/useVideoEffect';\nimport {EffectIndex} from '@/common/components/video/effects/Effects';\nimport {activeBackgroundEffectAtom} from '@/demo/atoms';\nimport {useAtomValue} from 'jotai';\n\nexport default function BackgroundEffects() {\n  const setEffect = useVideoEffect();\n  const activeEffect = useAtomValue(activeBackgroundEffectAtom);\n\n  return (\n    <ToolbarSection title=\"Background\" borderBottom={false}>\n      {backgroundEffects.map(backgroundEffect => {\n        return (\n          <ToolbarActionIcon\n            variant=\"toggle\"\n            key={backgroundEffect.title}\n            icon={backgroundEffect.Icon}\n            title={backgroundEffect.title}\n            isActive={activeEffect.name === backgroundEffect.effectName}\n            badge={\n              activeEffect.name === backgroundEffect.effectName && (\n                <EffectVariantBadge\n                  label={`${activeEffect.variant + 1}/${activeEffect.numVariants}`}\n                />\n              )\n            }\n            onClick={() => {\n              if (activeEffect.name === backgroundEffect.effectName) {\n                setEffect(backgroundEffect.effectName, EffectIndex.BACKGROUND, {\n                  variant:\n                    (activeEffect.variant + 1) % activeEffect.numVariants,\n                });\n              } else {\n                setEffect(backgroundEffect.effectName, EffectIndex.BACKGROUND);\n              }\n            }}\n          />\n        );\n      })}\n    </ToolbarSection>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/effects/EffectVariantBadge.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {right, top} from '@/theme/tokens.stylex';\nimport stylex from '@stylexjs/stylex';\n\nconst styles = stylex.create({\n  variantBadge: {\n    position: 'absolute',\n    top: top[1],\n    right: right[1],\n    backgroundColor: '#280578',\n    color: '#D2D2FF',\n    fontVariantNumeric: 'tabular-nums',\n    paddingHorizontal: 4,\n    paddingVertical: 1,\n    fontSize: 9,\n    borderRadius: 6,\n    fontWeight: 'bold',\n  },\n});\n\ntype Props = {\n  label: string;\n};\n\nexport default function VariantBadge({label}: Props) {\n  return <div {...stylex.props(styles.variantBadge)}>{label}</div>;\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/effects/EffectsCarousel.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CarouselContainerShadow} from '@/common/components/effects/EffectsCarouselShadow';\nimport {DemoEffect} from '@/common/components/effects/EffectsUtils';\nimport useVideoEffect from '@/common/components/video/editor/useVideoEffect';\nimport type {EffectIndex} from '@/common/components/video/effects/Effects';\nimport {Effects} from '@/common/components/video/effects/Effects';\nimport {color, fontSize, spacing} from '@/theme/tokens.stylex';\nimport stylex from '@stylexjs/stylex';\n\ntype Props = {\n  label: string;\n  effects: DemoEffect[];\n  activeEffect: keyof Effects;\n  index: EffectIndex;\n};\n\nconst styles = stylex.create({\n  container: {\n    display: 'flex',\n    flexDirection: 'column',\n    gap: spacing[2],\n    width: '100%',\n  },\n  label: {\n    fontSize: fontSize['xs'],\n    color: '#A6ACB2',\n    textAlign: 'center',\n  },\n  carouselContainer: {\n    position: 'relative',\n    borderRadius: '8px',\n    overflow: 'hidden',\n    width: '100%',\n    height: '120px',\n    backgroundColor: color['gray-700'],\n  },\n});\n\nexport default function EffectsCarousel({\n  label,\n  effects,\n  activeEffect,\n  index: effectIndex,\n}: Props) {\n  const setEffect = useVideoEffect();\n\n  return (\n    <div {...stylex.props(styles.container)}>\n      <div {...stylex.props(styles.label)}>{label}</div>\n      <div {...stylex.props(styles.carouselContainer)}>\n        <CarouselContainerShadow isTop={true} />\n        <div className=\"carousel carousel-vertical w-full h-full text-white\">\n          <div className={`carousel-item h-6`} />\n          {effects.map(({effectName, Icon, title}, index) => {\n            const isActive = activeEffect === effectName;\n            return (\n              <div\n                key={index}\n                className={`carousel-item flex items-center h-6 gap-2 px-4`}\n                onClick={() => setEffect(effectName, effectIndex)}>\n                <Icon\n                  color={isActive ? '#FB73A5' : undefined}\n                  size={18}\n                  fontWeight={10}\n                />\n                <div\n                  className={`text-sm ${isActive ? 'text-[#FB73A5] font-bold' : 'font-medium'}`}>\n                  {title}\n                </div>\n              </div>\n            );\n          })}\n          <div className={`carousel-item h-6`} />\n        </div>\n        <CarouselContainerShadow isTop={false} />\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/effects/EffectsCarouselShadow.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {spacing} from '@/theme/tokens.stylex';\nimport stylex from '@stylexjs/stylex';\n\nconst styles = stylex.create({\n  container: {\n    position: 'absolute',\n    width: '100%',\n    height: spacing[8],\n    pointerEvents: 'none',\n  },\n});\n\ntype CarouselContainerShadowProps = {\n  isTop: boolean;\n};\n\nconst edgeColor = 'rgba(55, 62, 65, 1)';\nconst transitionColor = 'rgba(55, 62, 65, 0.2)';\n\nexport function CarouselContainerShadow({isTop}: CarouselContainerShadowProps) {\n  return (\n    <div\n      {...stylex.props(styles.container)}\n      style={{\n        background: `linear-gradient(${isTop ? `${edgeColor}, ${transitionColor}` : `${transitionColor}, ${edgeColor}`})`,\n        top: isTop ? 0 : undefined,\n        bottom: isTop ? undefined : 0,\n      }}\n    />\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/effects/EffectsToolbar.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport BackgroundEffects from '@/common/components/effects/BackgroundEffects';\nimport EffectsToolbarBottomActions from '@/common/components/effects/EffectsToolbarBottomActions';\nimport EffectsToolbarHeader from '@/common/components/effects/EffectsToolbarHeader';\nimport HighlightEffects from '@/common/components/effects/HighlightEffects';\nimport useMessagesSnackbar from '@/common/components/snackbar/useDemoMessagesSnackbar';\nimport {useEffect, useRef} from 'react';\n\ntype Props = {\n  onTabChange: (newIndex: number) => void;\n};\n\nexport default function EffectsToolbar({onTabChange}: Props) {\n  const isEffectsMessageShown = useRef(false);\n  const {enqueueMessage} = useMessagesSnackbar();\n\n  useEffect(() => {\n    if (!isEffectsMessageShown.current) {\n      isEffectsMessageShown.current = true;\n      enqueueMessage('effectsMessage');\n    }\n  }, [enqueueMessage]);\n\n  return (\n    <div className=\"flex flex-col h-full\">\n      <EffectsToolbarHeader />\n      <div className=\"grow overflow-y-auto\">\n        <HighlightEffects />\n        <BackgroundEffects />\n      </div>\n      <EffectsToolbarBottomActions onTabChange={onTabChange} />\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/effects/EffectsToolbarBottomActions.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport PrimaryCTAButton from '@/common/components/button/PrimaryCTAButton';\nimport RestartSessionButton from '@/common/components/session/RestartSessionButton';\nimport ToolbarBottomActionsWrapper from '@/common/components/toolbar/ToolbarBottomActionsWrapper';\nimport {\n  MORE_OPTIONS_TOOLBAR_INDEX,\n  OBJECT_TOOLBAR_INDEX,\n} from '@/common/components/toolbar/ToolbarConfig';\nimport {ChevronRight} from '@carbon/icons-react';\n\ntype Props = {\n  onTabChange: (newIndex: number) => void;\n};\n\nexport default function EffectsToolbarBottomActions({onTabChange}: Props) {\n  function handleSwitchToMoreOptionsTab() {\n    onTabChange(MORE_OPTIONS_TOOLBAR_INDEX);\n  }\n\n  return (\n    <ToolbarBottomActionsWrapper>\n      <RestartSessionButton\n        onRestartSession={() => onTabChange(OBJECT_TOOLBAR_INDEX)}\n      />\n      <PrimaryCTAButton\n        onClick={handleSwitchToMoreOptionsTab}\n        endIcon={<ChevronRight />}>\n        Next\n      </PrimaryCTAButton>\n    </ToolbarBottomActionsWrapper>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/effects/EffectsToolbarHeader.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport ToolbarHeaderWrapper from '@/common/components/toolbar/ToolbarHeaderWrapper';\nimport useVideoEffect from '@/common/components/video/editor/useVideoEffect';\nimport {\n  EffectIndex,\n  effectPresets,\n} from '@/common/components/video/effects/Effects';\nimport {BLUE_PINK_FILL} from '@/theme/gradientStyle';\nimport {MagicWandFilled} from '@carbon/icons-react';\nimport {useCallback, useRef} from 'react';\nimport {Button} from 'react-daisyui';\n\nexport default function EffectsToolbarHeader() {\n  const preset = useRef(0);\n  const setEffect = useVideoEffect();\n\n  const handleTogglePreset = useCallback(() => {\n    preset.current++;\n    const [background, highlight] =\n      effectPresets[preset.current % effectPresets.length];\n    setEffect(background.name, EffectIndex.BACKGROUND, {\n      variant: background.variant,\n    });\n    setEffect(highlight.name, EffectIndex.HIGHLIGHT, {\n      variant: highlight.variant,\n    });\n  }, [setEffect]);\n\n  return (\n    <ToolbarHeaderWrapper\n      title=\"Add effects\"\n      description=\"Apply visual effects to your selected objects and the background. Keeping clicking the same effect for different variations.\"\n      bottomSection={\n        <div className=\"flex mt-1\">\n          <Button\n            color=\"ghost\"\n            size=\"md\"\n            className={`font-medium bg-black !rounded-full hover:!bg-gradient-to-br ${BLUE_PINK_FILL} border-none`}\n            endIcon={<MagicWandFilled size={20} className=\"text-white \" />}\n            onClick={handleTogglePreset}>\n            Surprise Me\n          </Button>\n        </div>\n      }\n      className=\"pb-4\"\n    />\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/effects/EffectsUtils.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {Effects} from '@/common/components/video/effects/Effects';\nimport type {CarbonIconType} from '@carbon/icons-react';\nimport {\n  AppleDash,\n  Asterisk,\n  Barcode,\n  CenterCircle,\n  ColorPalette,\n  ColorSwitch,\n  Development,\n  Erase,\n  FaceWink,\n  Humidity,\n  Image,\n  Overlay,\n  TextFont,\n} from '@carbon/icons-react';\n\nexport type DemoEffect = {\n  title: string;\n  Icon: CarbonIconType;\n  effectName: keyof Effects;\n};\n\nexport const backgroundEffects: DemoEffect[] = [\n  {title: 'Original', Icon: Image, effectName: 'Original'},\n  {title: 'Erase', Icon: Erase, effectName: 'EraseBackground'},\n  {\n    title: 'Gradient',\n    Icon: ColorPalette,\n    effectName: 'Gradient',\n  },\n  {\n    title: 'Pixelate',\n    Icon: Development,\n    effectName: 'Pixelate',\n  },\n  {title: 'Desaturate', Icon: ColorSwitch, effectName: 'Desaturate'},\n  {title: 'Text', Icon: TextFont, effectName: 'BackgroundText'},\n  {title: 'Blur', Icon: Humidity, effectName: 'BackgroundBlur'},\n  {title: 'Outline', Icon: AppleDash, effectName: 'Sobel'},\n];\n\nexport const highlightEffects: DemoEffect[] = [\n  {title: 'Original', Icon: Image, effectName: 'Cutout'},\n  {title: 'Erase', Icon: Erase, effectName: 'EraseForeground'},\n  {title: 'Gradient', Icon: ColorPalette, effectName: 'VibrantMask'},\n  {title: 'Pixelate', Icon: Development, effectName: 'PixelateMask'},\n  {\n    title: 'Overlay',\n    Icon: Overlay,\n    effectName: 'Overlay',\n  },\n  {title: 'Emoji', Icon: FaceWink, effectName: 'Replace'},\n  {title: 'Burst', Icon: Asterisk, effectName: 'Burst'},\n  {title: 'Spotlight', Icon: CenterCircle, effectName: 'Scope'},\n];\n\nexport const moreEffects: DemoEffect[] = [\n  {title: 'Noisy', Icon: Barcode, effectName: 'NoisyMask'},\n];\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/effects/HighlightEffects.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport EffectVariantBadge from '@/common/components/effects/EffectVariantBadge';\nimport ToolbarActionIcon from '@/common/components/toolbar/ToolbarActionIcon';\nimport ToolbarSection from '@/common/components/toolbar/ToolbarSection';\nimport useVideoEffect from '@/common/components/video/editor/useVideoEffect';\nimport {EffectIndex} from '@/common/components/video/effects/Effects';\nimport {\n  activeHighlightEffectAtom,\n  activeHighlightEffectGroupAtom,\n} from '@/demo/atoms';\nimport {useAtomValue} from 'jotai';\n\nexport default function HighlightEffects() {\n  const setEffect = useVideoEffect();\n  const activeEffect = useAtomValue(activeHighlightEffectAtom);\n  const activeEffectsGroup = useAtomValue(activeHighlightEffectGroupAtom);\n\n  return (\n    <ToolbarSection title=\"Selected Objects\" borderBottom={true}>\n      {activeEffectsGroup.map(highlightEffect => {\n        return (\n          <ToolbarActionIcon\n            variant=\"toggle\"\n            key={highlightEffect.title}\n            icon={highlightEffect.Icon}\n            title={highlightEffect.title}\n            isActive={activeEffect.name === highlightEffect.effectName}\n            badge={\n              activeEffect.name === highlightEffect.effectName && (\n                <EffectVariantBadge\n                  label={`${activeEffect.variant + 1}/${activeEffect.numVariants}`}\n                />\n              )\n            }\n            onClick={() => {\n              if (activeEffect.name === highlightEffect.effectName) {\n                setEffect(highlightEffect.effectName, EffectIndex.HIGHLIGHT, {\n                  variant:\n                    (activeEffect.variant + 1) % activeEffect.numVariants,\n                });\n              } else {\n                setEffect(highlightEffect.effectName, EffectIndex.HIGHLIGHT);\n              }\n            }}\n          />\n        );\n      })}\n    </ToolbarSection>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/effects/MobileEffectsToolbar.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport EffectsCarousel from '@/common/components/effects/EffectsCarousel';\nimport {backgroundEffects} from '@/common/components/effects/EffectsUtils';\nimport useVideoEffect from '@/common/components/video/editor/useVideoEffect';\nimport {\n  EffectIndex,\n  effectPresets,\n} from '@/common/components/video/effects/Effects';\nimport {ListBoxes, MagicWand, MagicWandFilled} from '@carbon/icons-react';\nimport {useCallback, useRef, useState} from 'react';\nimport {Button} from 'react-daisyui';\n\nimport EffectsToolbarBottomActions from '@/common/components/effects/EffectsToolbarBottomActions';\nimport ToolbarProgressChip from '@/common/components/toolbar/ToolbarProgressChip';\nimport {\n  activeBackgroundEffectAtom,\n  activeHighlightEffectAtom,\n  activeHighlightEffectGroupAtom,\n} from '@/demo/atoms';\nimport {BLUE_PINK_FILL} from '@/theme/gradientStyle';\nimport {useAtomValue} from 'jotai';\n\ntype Props = {\n  onTabChange: (newIndex: number) => void;\n};\n\nexport default function MobileEffectsToolbar({onTabChange}: Props) {\n  const preset = useRef(0);\n  const setEffect = useVideoEffect();\n  const [showEffectsCarousels, setShowEffectsCarousels] = useState<boolean>();\n\n  const activeBackground = useAtomValue(activeBackgroundEffectAtom);\n  const activeHighlight = useAtomValue(activeHighlightEffectAtom);\n  const activeHighlightEffectsGroup = useAtomValue(\n    activeHighlightEffectGroupAtom,\n  );\n\n  const handleTogglePreset = useCallback(() => {\n    preset.current++;\n    const [background, highlight] =\n      effectPresets[preset.current % effectPresets.length];\n    setEffect(background.name, EffectIndex.BACKGROUND, {\n      variant: background.variant,\n    });\n    setEffect(highlight.name, EffectIndex.HIGHLIGHT, {\n      variant: highlight.variant,\n    });\n  }, [setEffect]);\n\n  return (\n    <div className=\"w-full\">\n      {showEffectsCarousels ? (\n        <div className=\"flex gap-2 px-2 py-4 items-center p-6\">\n          <Button\n            color=\"ghost\"\n            className=\"mt-6 !px-2 !text-[#FB73A5]\"\n            startIcon={<MagicWand size={20} />}\n            onClick={handleTogglePreset}\n          />\n          <EffectsCarousel\n            label=\"Highlights\"\n            effects={activeHighlightEffectsGroup}\n            activeEffect={activeHighlight.name}\n            index={1}\n          />\n          <EffectsCarousel\n            label=\"Background\"\n            effects={backgroundEffects}\n            activeEffect={activeBackground.name}\n            index={0}\n          />\n        </div>\n      ) : (\n        <div className=\"flex flex-col gap-6 p-6\">\n          <div className=\"text-sm text-white\">\n            <ToolbarProgressChip />\n            Apply visual effects to your selected objects and the background.\n          </div>\n          <div className=\"grid grid-cols-2 gap-2\">\n            <Button\n              color=\"ghost\"\n              endIcon={<MagicWandFilled size={20} />}\n              className={`font-bold bg-black !rounded-full !bg-gradient-to-br ${BLUE_PINK_FILL} border-none text-white`}\n              onClick={handleTogglePreset}>\n              Surprise Me\n            </Button>\n            <Button\n              color=\"ghost\"\n              className={`font-bold bg-black !rounded-full border-none text-white`}\n              startIcon={<ListBoxes size={20} />}\n              onClick={() => setShowEffectsCarousels(true)}>\n              More effects\n            </Button>\n          </div>\n        </div>\n      )}\n\n      <EffectsToolbarBottomActions onTabChange={onTabChange} />\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/effects/MoreFunEffects.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {moreEffects} from '@/common/components/effects/EffectsUtils';\nimport EffectVariantBadge from '@/common/components/effects/EffectVariantBadge';\nimport ToolbarActionIcon from '@/common/components/toolbar/ToolbarActionIcon';\nimport ToolbarSection from '@/common/components/toolbar/ToolbarSection';\nimport useVideoEffect from '@/common/components/video/editor/useVideoEffect';\nimport {EffectIndex} from '@/common/components/video/effects/Effects';\nimport {activeHighlightEffectAtom} from '@/demo/atoms';\nimport {useAtomValue} from 'jotai';\n\nexport default function MoreFunEffects() {\n  const setEffect = useVideoEffect();\n  const activeEffect = useAtomValue(activeHighlightEffectAtom);\n\n  return (\n    <ToolbarSection title=\"Selected Objects\" borderBottom={true}>\n      {moreEffects.map(effect => {\n        return (\n          <ToolbarActionIcon\n            variant=\"toggle\"\n            key={effect.title}\n            icon={effect.Icon}\n            title={effect.title}\n            isActive={activeEffect.name === effect.effectName}\n            badge={\n              activeEffect.name === effect.effectName && (\n                <EffectVariantBadge\n                  label={`${activeEffect.variant + 1}/${activeEffect.numVariants}`}\n                />\n              )\n            }\n            onClick={() => {\n              setEffect(effect.effectName, EffectIndex.HIGHLIGHT);\n            }}\n          />\n        );\n      })}\n    </ToolbarSection>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/gallery/ChangeVideoModal.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type {VideoGalleryTriggerProps} from '@/common/components/gallery/DemoVideoGalleryModal';\nimport DemoVideoGalleryModal from '@/common/components/gallery/DemoVideoGalleryModal';\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport Logger from '@/common/logger/Logger';\nimport {isStreamingAtom, uploadingStateAtom, VideoData} from '@/demo/atoms';\nimport {useAtomValue, useSetAtom} from 'jotai';\nimport {ComponentType, useCallback} from 'react';\nimport {useNavigate} from 'react-router-dom';\n\ntype Props = {\n  videoGalleryModalTrigger?: ComponentType<VideoGalleryTriggerProps>;\n  showUploadInGallery?: boolean;\n  onChangeVideo?: () => void;\n};\n\nexport default function ChangeVideoModal({\n  videoGalleryModalTrigger: VideoGalleryModalTriggerComponent,\n  showUploadInGallery = true,\n  onChangeVideo,\n}: Props) {\n  const isStreaming = useAtomValue(isStreamingAtom);\n  const setUploadingState = useSetAtom(uploadingStateAtom);\n  const video = useVideo();\n  const navigate = useNavigate();\n\n  const handlePause = useCallback(() => {\n    video?.pause();\n  }, [video]);\n\n  function handlePauseOrAbortVideo() {\n    if (isStreaming) {\n      video?.abortStreamMasks();\n    } else {\n      handlePause();\n    }\n  }\n\n  function handleSwitchVideos(video: VideoData) {\n    // Retain any search parameter\n    navigate(\n      {\n        pathname: location.pathname,\n        search: location.search,\n      },\n      {\n        state: {\n          video,\n        },\n      },\n    );\n    onChangeVideo?.();\n  }\n\n  function handleUploadVideoError(error: Error) {\n    setUploadingState('error');\n    Logger.error(error);\n  }\n\n  return (\n    <DemoVideoGalleryModal\n      trigger={VideoGalleryModalTriggerComponent}\n      showUploadInGallery={showUploadInGallery}\n      onOpen={handlePauseOrAbortVideo}\n      onSelect={handleSwitchVideos}\n      onUploadVideoError={handleUploadVideoError}\n    />\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/gallery/DefaultVideoGalleryModalTrigger.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport ResponsiveButton from '@/common/components/button/ResponsiveButton';\nimport type {VideoGalleryTriggerProps} from '@/common/components/gallery/DemoVideoGalleryModal';\nimport {ImageCopy} from '@carbon/icons-react';\n\nexport default function DefaultVideoGalleryModalTrigger({\n  onClick,\n}: VideoGalleryTriggerProps) {\n  return (\n    <ResponsiveButton\n      color=\"ghost\"\n      className=\"hover:!bg-black\"\n      startIcon={<ImageCopy size={20} />}\n      onClick={onClick}>\n      Change video\n    </ResponsiveButton>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/gallery/DemoVideoGallery.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {DemoVideoGalleryQuery} from '@/common/components/gallery/__generated__/DemoVideoGalleryQuery.graphql';\nimport VideoGalleryUploadVideo from '@/common/components/gallery/VideoGalleryUploadPhoto';\nimport VideoPhoto from '@/common/components/gallery/VideoPhoto';\nimport useScreenSize from '@/common/screen/useScreenSize';\nimport {VideoData} from '@/demo/atoms';\nimport {DEMO_SHORT_NAME} from '@/demo/DemoConfig';\nimport {fontSize, fontWeight, spacing} from '@/theme/tokens.stylex';\nimport stylex from '@stylexjs/stylex';\nimport {useMemo} from 'react';\nimport PhotoAlbum, {Photo, RenderPhotoProps} from 'react-photo-album';\nimport {graphql, useLazyLoadQuery} from 'react-relay';\nimport {useLocation, useNavigate} from 'react-router-dom';\n\nconst styles = stylex.create({\n  container: {\n    display: 'flex',\n    flexDirection: 'column',\n    marginHorizontal: spacing[1],\n    height: '100%',\n    lineHeight: 1.2,\n    paddingTop: spacing[8],\n  },\n  headerContainer: {\n    marginBottom: spacing[8],\n    fontWeight: fontWeight['medium'],\n    fontSize: fontSize['2xl'],\n    '@media screen and (max-width: 768px)': {\n      marginTop: spacing[0],\n      marginBottom: spacing[8],\n      marginHorizontal: spacing[4],\n      fontSize: fontSize['xl'],\n    },\n  },\n  albumContainer: {\n    flex: '1 1 0%',\n    width: '100%',\n    overflowY: 'auto',\n  },\n});\n\ntype Props = {\n  showUploadInGallery?: boolean;\n  onSelect?: (video: VideoPhotoData) => void;\n  onUpload: (video: VideoData) => void;\n  onUploadStart?: () => void;\n  onUploadError?: (error: Error) => void;\n};\n\ntype VideoPhotoData = Photo &\n  VideoData & {\n    poster: string;\n    isUploadOption: boolean;\n  };\n\nexport default function DemoVideoGallery({\n  showUploadInGallery = false,\n  onSelect,\n  onUpload,\n  onUploadStart,\n  onUploadError,\n}: Props) {\n  const navigate = useNavigate();\n  const location = useLocation();\n  const {isMobile: isMobileScreenSize} = useScreenSize();\n\n  const data = useLazyLoadQuery<DemoVideoGalleryQuery>(\n    graphql`\n      query DemoVideoGalleryQuery {\n        videos {\n          edges {\n            node {\n              id\n              path\n              posterPath\n              url\n              posterUrl\n              height\n              width\n              posterUrl\n            }\n          }\n        }\n      }\n    `,\n    {},\n  );\n\n  const allVideos: VideoPhotoData[] = useMemo(() => {\n    return data.videos.edges.map(video => {\n      return {\n        src: video.node.url,\n        path: video.node.path,\n        poster: video.node.posterPath,\n        posterPath: video.node.posterPath,\n        url: video.node.url,\n        posterUrl: video.node.posterUrl,\n        width: video.node.width,\n        height: video.node.height,\n        isUploadOption: false,\n      } as VideoPhotoData;\n    });\n  }, [data.videos.edges]);\n\n  const shareableVideos: VideoPhotoData[] = useMemo(() => {\n    const filteredVideos = [...allVideos];\n\n    if (showUploadInGallery) {\n      const uploadOption = {\n        src: '',\n        width: 1280,\n        height: 720,\n        poster: '',\n        isUploadOption: true,\n      } as VideoPhotoData;\n      filteredVideos.unshift(uploadOption);\n    }\n\n    return filteredVideos;\n  }, [allVideos, showUploadInGallery]);\n\n  const renderPhoto = ({\n    photo: video,\n    imageProps,\n  }: RenderPhotoProps<VideoPhotoData>) => {\n    const {style} = imageProps;\n    const {url, posterUrl} = video;\n\n    return video.isUploadOption ? (\n      <VideoGalleryUploadVideo\n        style={style}\n        onUpload={handleUploadVideo}\n        onUploadError={onUploadError}\n        onUploadStart={onUploadStart}\n      />\n    ) : (\n      <VideoPhoto\n        src={url}\n        poster={posterUrl}\n        style={style}\n        onClick={() => {\n          navigate(location.pathname, {\n            state: {\n              video,\n            },\n          });\n          onSelect?.(video);\n        }}\n      />\n    );\n  };\n\n  function handleUploadVideo(video: VideoData) {\n    navigate(location.pathname, {\n      state: {\n        video,\n      },\n    });\n    onUpload?.(video);\n  }\n\n  const descriptionStyle = 'text-sm md:text-base text-gray-400 leading-snug';\n\n  return (\n    <div {...stylex.props(styles.container)}>\n      <div {...stylex.props(styles.albumContainer)}>\n        <div className=\"pt-0 md:px-16 md:pt-8 md:pb-8\">\n          <div {...stylex.props(styles.headerContainer)}>\n            <h3 className=\"mb-2\">\n              Select a video to try{' '}\n              <span className=\"hidden md:inline\">\n                with the {DEMO_SHORT_NAME}\n              </span>\n            </h3>\n            <p className={descriptionStyle}>\n              You’ll be able to download what you make.\n            </p>\n          </div>\n\n          <PhotoAlbum<VideoPhotoData>\n            layout=\"rows\"\n            photos={shareableVideos}\n            targetRowHeight={isMobileScreenSize ? 120 : 200}\n            rowConstraints={{\n              singleRowMaxHeight: isMobileScreenSize ? 120 : 240,\n              maxPhotos: 3,\n            }}\n            renderPhoto={renderPhoto}\n            spacing={4}\n          />\n        </div>\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/gallery/DemoVideoGalleryModal.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport DefaultVideoGalleryModalTrigger from '@/common/components/gallery/DefaultVideoGalleryModalTrigger';\nimport {\n  frameIndexAtom,\n  sessionAtom,\n  uploadingStateAtom,\n  VideoData,\n} from '@/demo/atoms';\nimport {spacing} from '@/theme/tokens.stylex';\nimport {Close} from '@carbon/icons-react';\nimport stylex from '@stylexjs/stylex';\nimport {useSetAtom} from 'jotai';\nimport {ComponentType, useCallback, useRef} from 'react';\nimport {Modal} from 'react-daisyui';\nimport DemoVideoGallery from './DemoVideoGallery';\n\nconst styles = stylex.create({\n  container: {\n    position: 'relative',\n    minWidth: '85vw',\n    minHeight: '85vh',\n    overflow: 'hidden',\n    color: '#fff',\n    boxShadow: '0 0 100px 50px #000',\n    borderRadius: 16,\n    border: '2px solid transparent',\n    background:\n      'linear-gradient(#1A1C1F, #1A1C1F) padding-box, linear-gradient(to right bottom, #FB73A5,#595FEF,#94EAE2,#FCCB6B) border-box',\n  },\n  closeButton: {\n    position: 'absolute',\n    top: 0,\n    right: 0,\n    padding: spacing[3],\n    zIndex: 10,\n    cursor: 'pointer',\n    ':hover': {\n      opacity: 0.7,\n    },\n  },\n  galleryContainer: {\n    position: 'absolute',\n    top: spacing[4],\n    left: 0,\n    right: 0,\n    bottom: 0,\n    overflowY: 'auto',\n  },\n});\n\nexport type VideoGalleryTriggerProps = {\n  onClick: () => void;\n};\n\ntype Props = {\n  trigger?: ComponentType<VideoGalleryTriggerProps>;\n  showUploadInGallery?: boolean;\n  onOpen?: () => void;\n  onSelect?: (video: VideoData, isUpload?: boolean) => void;\n  onUploadVideoError?: (error: Error) => void;\n};\n\nexport default function DemoVideoGalleryModal({\n  trigger: VideoGalleryModalTrigger = DefaultVideoGalleryModalTrigger,\n  showUploadInGallery = false,\n  onOpen,\n  onSelect,\n  onUploadVideoError,\n}: Props) {\n  const modalRef = useRef<HTMLDialogElement | null>(null);\n\n  const setFrameIndex = useSetAtom(frameIndexAtom);\n  const setUploadingState = useSetAtom(uploadingStateAtom);\n  const setSession = useSetAtom(sessionAtom);\n\n  function openModal() {\n    const modal = modalRef.current;\n    if (modal != null) {\n      modal.style.display = 'grid';\n      modal.showModal();\n    }\n  }\n\n  function closeModal() {\n    const modal = modalRef.current;\n    if (modal != null) {\n      modal.close();\n      modal.style.display = 'none';\n    }\n  }\n\n  const handleSelect = useCallback(\n    async (video: VideoData, isUpload?: boolean) => {\n      closeModal();\n      setFrameIndex(0);\n      onSelect?.(video, isUpload);\n      setUploadingState('default');\n      setSession(null);\n    },\n    [setFrameIndex, onSelect, setUploadingState, setSession],\n  );\n\n  function handleUploadVideoStart() {\n    setUploadingState('uploading');\n    closeModal();\n  }\n\n  function handleOpenVideoGalleryModal() {\n    onOpen?.();\n    openModal();\n  }\n\n  return (\n    <>\n      <VideoGalleryModalTrigger onClick={handleOpenVideoGalleryModal} />\n      <Modal ref={modalRef} {...stylex.props(styles.container)}>\n        <div onClick={closeModal} {...stylex.props(styles.closeButton)}>\n          <Close size={28} />\n        </div>\n        <Modal.Body>\n          <div {...stylex.props(styles.galleryContainer)}>\n            <DemoVideoGallery\n              showUploadInGallery={showUploadInGallery}\n              onSelect={video => handleSelect(video)}\n              onUpload={video => handleSelect(video, true)}\n              onUploadStart={handleUploadVideoStart}\n              onUploadError={onUploadVideoError}\n            />\n          </div>\n        </Modal.Body>\n      </Modal>\n    </>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/gallery/VideoGalleryUploadPhoto.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport useUploadVideo from '@/common/components/gallery/useUploadVideo';\nimport useScreenSize from '@/common/screen/useScreenSize';\nimport {VideoData} from '@/demo/atoms';\nimport {MAX_UPLOAD_FILE_SIZE} from '@/demo/DemoConfig';\nimport {BLUE_PINK_FILL_BR} from '@/theme/gradientStyle';\nimport {RetryFailed, Upload} from '@carbon/icons-react';\nimport {CSSProperties, ReactNode} from 'react';\nimport {Loading} from 'react-daisyui';\n\ntype Props = {\n  style: CSSProperties;\n  onUpload: (video: VideoData) => void;\n  onUploadStart?: () => void;\n  onUploadError?: (error: Error) => void;\n};\n\nexport default function VideoGalleryUploadVideo({\n  style,\n  onUpload,\n  onUploadStart,\n  onUploadError,\n}: Props) {\n  const {getRootProps, getInputProps, isUploading, error} = useUploadVideo({\n    onUpload,\n    onUploadStart,\n    onUploadError,\n  });\n  const {isMobile} = useScreenSize();\n\n  return (\n    <div className={`cursor-pointer ${BLUE_PINK_FILL_BR}`} style={style}>\n      <span {...getRootProps()}>\n        <input {...getInputProps()} />\n        <div className=\"relative w-full h-full\">\n          <div className=\"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\">\n            {isUploading && (\n              <IconWrapper\n                icon={\n                  <Loading\n                    size={isMobile ? 'md' : 'lg'}\n                    className=\"text-white\"\n                  />\n                }\n                title=\"Uploading ...\"\n              />\n            )}\n            {error !== null && (\n              <IconWrapper\n                icon={<RetryFailed color=\"white\" size={isMobile ? 24 : 32} />}\n                title={error}\n              />\n            )}\n            {!isUploading && error === null && (\n              <IconWrapper\n                icon={<Upload color=\"white\" size={isMobile ? 24 : 32} />}\n                title={\n                  <>\n                    Upload{' '}\n                    <div className=\"text-xs opacity-70\">\n                      Max {MAX_UPLOAD_FILE_SIZE}\n                    </div>\n                  </>\n                }\n              />\n            )}\n          </div>\n        </div>\n      </span>\n    </div>\n  );\n}\n\ntype IconWrapperProps = {\n  icon: ReactNode;\n  title: ReactNode | string;\n};\n\nfunction IconWrapper({icon, title}: IconWrapperProps) {\n  return (\n    <>\n      <div className=\"flex justify-center\">{icon}</div>\n      <div className=\"mt-1 text-sm md:text-lg text-white font-medium text-center leading-tight\">\n        {title}\n      </div>\n    </>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/gallery/VideoPhoto.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Logger from '@/common/logger/Logger';\nimport stylex from '@stylexjs/stylex';\nimport {\n  CSSProperties,\n  MouseEventHandler,\n  useCallback,\n  useEffect,\n  useRef,\n} from 'react';\n\nconst styles = stylex.create({\n  background: {\n    backgroundRepeat: 'no-repeat',\n    backgroundSize: 'cover',\n    backgroundPosition: 'center',\n    cursor: 'pointer',\n  },\n  video: {\n    width: '100%',\n    height: '100%',\n  },\n});\n\ntype Props = {\n  onClick: MouseEventHandler<HTMLVideoElement> | undefined;\n  src: string;\n  poster: string;\n  style: CSSProperties;\n};\n\nexport default function VideoPhoto({src, poster, style, onClick}: Props) {\n  const videoRef = useRef<HTMLVideoElement | null>(null);\n  const playPromiseRef = useRef<Promise<void> | null>(null);\n\n  const play = useCallback(() => {\n    const video = videoRef.current;\n    // Only play video if it is not already playing\n    if (video != null && video.paused) {\n      // This quirky way of handling video play/pause in the browser is needed\n      // due to the async nature of the video play API:\n      // https://developer.chrome.com/blog/play-request-was-interrupted/\n      const playPromise = video.play();\n      playPromise.catch(error => {\n        Logger.error('Failed to play video', error);\n      });\n      playPromiseRef.current = playPromise;\n    }\n  }, []);\n\n  const pause = useCallback(() => {\n    // Only pause video if it is playing\n    const playPromise = playPromiseRef.current;\n    if (playPromise != null) {\n      playPromise\n        .then(() => {\n          videoRef.current?.pause();\n        })\n        .catch(error => {\n          Logger.error('Failed to pause video', error);\n        })\n        .finally(() => {\n          playPromiseRef.current = null;\n        });\n    }\n  }, []);\n\n  useEffect(() => {\n    return () => {\n      pause();\n    };\n  }, [pause]);\n\n  return (\n    <div\n      style={{\n        ...style,\n        backgroundImage: `url(${poster})`,\n      }}\n      {...stylex.props(styles.background)}>\n      <video\n        ref={videoRef}\n        {...stylex.props(styles.video)}\n        preload=\"none\"\n        playsInline\n        loop\n        muted\n        title=\"Gallery Video\"\n        poster={poster}\n        onMouseEnter={play}\n        onMouseLeave={pause}\n        onClick={onClick}>\n        <source src={src} type=\"video/mp4\" />\n        Sorry, your browser does not support embedded videos.\n      </video>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/gallery/__generated__/DemoVideoGalleryModalQuery.graphql.ts",
    "content": "/**\n * @generated SignedSource<<db7e183e1996cf656749b4e33c2424e6>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { ConcreteRequest, Query } from 'relay-runtime';\nimport { FragmentRefs } from \"relay-runtime\";\nexport type DemoVideoGalleryModalQuery$variables = Record<PropertyKey, never>;\nexport type DemoVideoGalleryModalQuery$data = {\n  readonly \" $fragmentSpreads\": FragmentRefs<\"DatasetsDropdown_datasets\" | \"VideoGallery_videos\">;\n};\nexport type DemoVideoGalleryModalQuery = {\n  response: DemoVideoGalleryModalQuery$data;\n  variables: DemoVideoGalleryModalQuery$variables;\n};\n\nconst node: ConcreteRequest = (function(){\nvar v0 = [\n  {\n    \"alias\": null,\n    \"args\": null,\n    \"kind\": \"ScalarField\",\n    \"name\": \"name\",\n    \"storageKey\": null\n  }\n],\nv1 = [\n  {\n    \"kind\": \"Literal\",\n    \"name\": \"after\",\n    \"value\": \"\"\n  },\n  {\n    \"kind\": \"Literal\",\n    \"name\": \"first\",\n    \"value\": 20\n  }\n],\nv2 = {\n  \"alias\": null,\n  \"args\": null,\n  \"kind\": \"ScalarField\",\n  \"name\": \"__typename\",\n  \"storageKey\": null\n};\nreturn {\n  \"fragment\": {\n    \"argumentDefinitions\": [],\n    \"kind\": \"Fragment\",\n    \"metadata\": null,\n    \"name\": \"DemoVideoGalleryModalQuery\",\n    \"selections\": [\n      {\n        \"args\": null,\n        \"kind\": \"FragmentSpread\",\n        \"name\": \"DatasetsDropdown_datasets\"\n      },\n      {\n        \"args\": null,\n        \"kind\": \"FragmentSpread\",\n        \"name\": \"VideoGallery_videos\"\n      }\n    ],\n    \"type\": \"Query\",\n    \"abstractKey\": null\n  },\n  \"kind\": \"Request\",\n  \"operation\": {\n    \"argumentDefinitions\": [],\n    \"kind\": \"Operation\",\n    \"name\": \"DemoVideoGalleryModalQuery\",\n    \"selections\": [\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"concreteType\": \"DatasetConnection\",\n        \"kind\": \"LinkedField\",\n        \"name\": \"datasets\",\n        \"plural\": false,\n        \"selections\": [\n          {\n            \"alias\": null,\n            \"args\": null,\n            \"concreteType\": \"DatasetEdge\",\n            \"kind\": \"LinkedField\",\n            \"name\": \"edges\",\n            \"plural\": true,\n            \"selections\": [\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"concreteType\": \"Dataset\",\n                \"kind\": \"LinkedField\",\n                \"name\": \"node\",\n                \"plural\": false,\n                \"selections\": (v0/*: any*/),\n                \"storageKey\": null\n              }\n            ],\n            \"storageKey\": null\n          }\n        ],\n        \"storageKey\": null\n      },\n      {\n        \"alias\": null,\n        \"args\": (v1/*: any*/),\n        \"concreteType\": \"VideoConnection\",\n        \"kind\": \"LinkedField\",\n        \"name\": \"videos\",\n        \"plural\": false,\n        \"selections\": [\n          (v2/*: any*/),\n          {\n            \"alias\": null,\n            \"args\": null,\n            \"concreteType\": \"PageInfo\",\n            \"kind\": \"LinkedField\",\n            \"name\": \"pageInfo\",\n            \"plural\": false,\n            \"selections\": [\n              (v2/*: any*/),\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"hasPreviousPage\",\n                \"storageKey\": null\n              },\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"hasNextPage\",\n                \"storageKey\": null\n              },\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"startCursor\",\n                \"storageKey\": null\n              },\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"endCursor\",\n                \"storageKey\": null\n              }\n            ],\n            \"storageKey\": null\n          },\n          {\n            \"alias\": null,\n            \"args\": null,\n            \"concreteType\": \"VideoEdge\",\n            \"kind\": \"LinkedField\",\n            \"name\": \"edges\",\n            \"plural\": true,\n            \"selections\": [\n              (v2/*: any*/),\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"concreteType\": \"Video\",\n                \"kind\": \"LinkedField\",\n                \"name\": \"node\",\n                \"plural\": false,\n                \"selections\": [\n                  (v2/*: any*/),\n                  {\n                    \"alias\": null,\n                    \"args\": null,\n                    \"kind\": \"ScalarField\",\n                    \"name\": \"id\",\n                    \"storageKey\": null\n                  },\n                  {\n                    \"alias\": null,\n                    \"args\": null,\n                    \"kind\": \"ScalarField\",\n                    \"name\": \"path\",\n                    \"storageKey\": null\n                  },\n                  {\n                    \"alias\": null,\n                    \"args\": null,\n                    \"kind\": \"ScalarField\",\n                    \"name\": \"posterPath\",\n                    \"storageKey\": null\n                  },\n                  {\n                    \"alias\": null,\n                    \"args\": null,\n                    \"kind\": \"ScalarField\",\n                    \"name\": \"url\",\n                    \"storageKey\": null\n                  },\n                  {\n                    \"alias\": null,\n                    \"args\": null,\n                    \"kind\": \"ScalarField\",\n                    \"name\": \"posterUrl\",\n                    \"storageKey\": null\n                  },\n                  {\n                    \"alias\": null,\n                    \"args\": null,\n                    \"kind\": \"ScalarField\",\n                    \"name\": \"width\",\n                    \"storageKey\": null\n                  },\n                  {\n                    \"alias\": null,\n                    \"args\": null,\n                    \"kind\": \"ScalarField\",\n                    \"name\": \"height\",\n                    \"storageKey\": null\n                  },\n                  {\n                    \"alias\": null,\n                    \"args\": null,\n                    \"concreteType\": \"Dataset\",\n                    \"kind\": \"LinkedField\",\n                    \"name\": \"dataset\",\n                    \"plural\": false,\n                    \"selections\": (v0/*: any*/),\n                    \"storageKey\": null\n                  },\n                  {\n                    \"alias\": null,\n                    \"args\": null,\n                    \"concreteType\": \"VideoPermissions\",\n                    \"kind\": \"LinkedField\",\n                    \"name\": \"permissions\",\n                    \"plural\": false,\n                    \"selections\": [\n                      {\n                        \"alias\": null,\n                        \"args\": null,\n                        \"kind\": \"ScalarField\",\n                        \"name\": \"canShare\",\n                        \"storageKey\": null\n                      },\n                      {\n                        \"alias\": null,\n                        \"args\": null,\n                        \"kind\": \"ScalarField\",\n                        \"name\": \"canDownload\",\n                        \"storageKey\": null\n                      }\n                    ],\n                    \"storageKey\": null\n                  }\n                ],\n                \"storageKey\": null\n              },\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"cursor\",\n                \"storageKey\": null\n              }\n            ],\n            \"storageKey\": null\n          }\n        ],\n        \"storageKey\": \"videos(after:\\\"\\\",first:20)\"\n      },\n      {\n        \"alias\": null,\n        \"args\": (v1/*: any*/),\n        \"filters\": [\n          \"datasetName\"\n        ],\n        \"handle\": \"connection\",\n        \"key\": \"VideoGallery_videos\",\n        \"kind\": \"LinkedHandle\",\n        \"name\": \"videos\"\n      }\n    ]\n  },\n  \"params\": {\n    \"cacheID\": \"e0bccf553377682e6bc283c2ce53bee5\",\n    \"id\": null,\n    \"metadata\": {},\n    \"name\": \"DemoVideoGalleryModalQuery\",\n    \"operationKind\": \"query\",\n    \"text\": \"query DemoVideoGalleryModalQuery {\\n  ...DatasetsDropdown_datasets\\n  ...VideoGallery_videos\\n}\\n\\nfragment DatasetsDropdown_datasets on Query {\\n  datasets {\\n    edges {\\n      node {\\n        name\\n      }\\n    }\\n  }\\n}\\n\\nfragment VideoGallery_videos on Query {\\n  videos(first: 20, after: \\\"\\\") {\\n    __typename\\n    pageInfo {\\n      __typename\\n      hasPreviousPage\\n      hasNextPage\\n      startCursor\\n      endCursor\\n    }\\n    edges {\\n      __typename\\n      node {\\n        __typename\\n        id\\n        path\\n        posterPath\\n        url\\n        posterUrl\\n        width\\n        height\\n        dataset {\\n          name\\n        }\\n        permissions {\\n          canShare\\n          canDownload\\n        }\\n      }\\n      cursor\\n    }\\n  }\\n}\\n\"\n  }\n};\n})();\n\n(node as any).hash = \"d09e34e2b9f2e25c2d564106de5f9c89\";\n\nexport default node;\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/gallery/__generated__/DemoVideoGalleryQuery.graphql.ts",
    "content": "/**\n * @generated SignedSource<<20d31a82b5f3b251b0e42b4f0e3522b8>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { ConcreteRequest, Query } from 'relay-runtime';\nexport type DemoVideoGalleryQuery$variables = Record<PropertyKey, never>;\nexport type DemoVideoGalleryQuery$data = {\n  readonly videos: {\n    readonly edges: ReadonlyArray<{\n      readonly node: {\n        readonly height: number;\n        readonly id: any;\n        readonly path: string;\n        readonly posterPath: string | null | undefined;\n        readonly posterUrl: string;\n        readonly url: string;\n        readonly width: number;\n      };\n    }>;\n  };\n};\nexport type DemoVideoGalleryQuery = {\n  response: DemoVideoGalleryQuery$data;\n  variables: DemoVideoGalleryQuery$variables;\n};\n\nconst node: ConcreteRequest = (function(){\nvar v0 = [\n  {\n    \"alias\": null,\n    \"args\": null,\n    \"concreteType\": \"VideoConnection\",\n    \"kind\": \"LinkedField\",\n    \"name\": \"videos\",\n    \"plural\": false,\n    \"selections\": [\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"concreteType\": \"VideoEdge\",\n        \"kind\": \"LinkedField\",\n        \"name\": \"edges\",\n        \"plural\": true,\n        \"selections\": [\n          {\n            \"alias\": null,\n            \"args\": null,\n            \"concreteType\": \"Video\",\n            \"kind\": \"LinkedField\",\n            \"name\": \"node\",\n            \"plural\": false,\n            \"selections\": [\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"id\",\n                \"storageKey\": null\n              },\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"path\",\n                \"storageKey\": null\n              },\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"posterPath\",\n                \"storageKey\": null\n              },\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"url\",\n                \"storageKey\": null\n              },\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"posterUrl\",\n                \"storageKey\": null\n              },\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"height\",\n                \"storageKey\": null\n              },\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"width\",\n                \"storageKey\": null\n              }\n            ],\n            \"storageKey\": null\n          }\n        ],\n        \"storageKey\": null\n      }\n    ],\n    \"storageKey\": null\n  }\n];\nreturn {\n  \"fragment\": {\n    \"argumentDefinitions\": [],\n    \"kind\": \"Fragment\",\n    \"metadata\": null,\n    \"name\": \"DemoVideoGalleryQuery\",\n    \"selections\": (v0/*: any*/),\n    \"type\": \"Query\",\n    \"abstractKey\": null\n  },\n  \"kind\": \"Request\",\n  \"operation\": {\n    \"argumentDefinitions\": [],\n    \"kind\": \"Operation\",\n    \"name\": \"DemoVideoGalleryQuery\",\n    \"selections\": (v0/*: any*/)\n  },\n  \"params\": {\n    \"cacheID\": \"4dae74153a5528f2631b59dfb0adb021\",\n    \"id\": null,\n    \"metadata\": {},\n    \"name\": \"DemoVideoGalleryQuery\",\n    \"operationKind\": \"query\",\n    \"text\": \"query DemoVideoGalleryQuery {\\n  videos {\\n    edges {\\n      node {\\n        id\\n        path\\n        posterPath\\n        url\\n        posterUrl\\n        height\\n        width\\n      }\\n    }\\n  }\\n}\\n\"\n  }\n};\n})();\n\n(node as any).hash = \"d22ac5e58f6e4eb696651be49b410e4e\";\n\nexport default node;\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/gallery/__generated__/useUploadVideoMutation.graphql.ts",
    "content": "/**\n * @generated SignedSource<<76014dced98d6c8989e7322712e38963>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { ConcreteRequest, Mutation } from 'relay-runtime';\nexport type useUploadVideoMutation$variables = {\n  file: any;\n};\nexport type useUploadVideoMutation$data = {\n  readonly uploadVideo: {\n    readonly height: number;\n    readonly id: any;\n    readonly path: string;\n    readonly posterPath: string | null | undefined;\n    readonly posterUrl: string;\n    readonly url: string;\n    readonly width: number;\n  };\n};\nexport type useUploadVideoMutation = {\n  response: useUploadVideoMutation$data;\n  variables: useUploadVideoMutation$variables;\n};\n\nconst node: ConcreteRequest = (function(){\nvar v0 = [\n  {\n    \"defaultValue\": null,\n    \"kind\": \"LocalArgument\",\n    \"name\": \"file\"\n  }\n],\nv1 = [\n  {\n    \"alias\": null,\n    \"args\": [\n      {\n        \"kind\": \"Variable\",\n        \"name\": \"file\",\n        \"variableName\": \"file\"\n      }\n    ],\n    \"concreteType\": \"Video\",\n    \"kind\": \"LinkedField\",\n    \"name\": \"uploadVideo\",\n    \"plural\": false,\n    \"selections\": [\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"id\",\n        \"storageKey\": null\n      },\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"height\",\n        \"storageKey\": null\n      },\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"width\",\n        \"storageKey\": null\n      },\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"url\",\n        \"storageKey\": null\n      },\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"path\",\n        \"storageKey\": null\n      },\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"posterPath\",\n        \"storageKey\": null\n      },\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"posterUrl\",\n        \"storageKey\": null\n      }\n    ],\n    \"storageKey\": null\n  }\n];\nreturn {\n  \"fragment\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Fragment\",\n    \"metadata\": null,\n    \"name\": \"useUploadVideoMutation\",\n    \"selections\": (v1/*: any*/),\n    \"type\": \"Mutation\",\n    \"abstractKey\": null\n  },\n  \"kind\": \"Request\",\n  \"operation\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Operation\",\n    \"name\": \"useUploadVideoMutation\",\n    \"selections\": (v1/*: any*/)\n  },\n  \"params\": {\n    \"cacheID\": \"dcbaf1bf411627fdb9dfbb827592cfc0\",\n    \"id\": null,\n    \"metadata\": {},\n    \"name\": \"useUploadVideoMutation\",\n    \"operationKind\": \"mutation\",\n    \"text\": \"mutation useUploadVideoMutation(\\n  $file: Upload!\\n) {\\n  uploadVideo(file: $file) {\\n    id\\n    height\\n    width\\n    url\\n    path\\n    posterPath\\n    posterUrl\\n  }\\n}\\n\"\n  }\n};\n})();\n\n(node as any).hash = \"710e462504d76597af8695b7fc70b4cf\";\n\nexport default node;\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/gallery/useUploadVideo.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {useUploadVideoMutation} from '@/common/components/gallery/__generated__/useUploadVideoMutation.graphql';\nimport Logger from '@/common/logger/Logger';\nimport {VideoData} from '@/demo/atoms';\nimport {useState} from 'react';\nimport {FileRejection, FileWithPath, useDropzone} from 'react-dropzone';\nimport {graphql, useMutation} from 'react-relay';\n\nconst ACCEPT_VIDEOS = {\n  'video/mp4': ['.mp4'],\n  'video/quicktime': ['.mov'],\n};\n\n// 70 MB default max video upload size\nconst MAX_FILE_SIZE_IN_MB = 70;\nconst MAX_VIDEO_UPLOAD_SIZE = MAX_FILE_SIZE_IN_MB * 1024 ** 2;\n\ntype Props = {\n  onUpload: (video: VideoData) => void;\n  onUploadStart?: () => void;\n  onUploadError?: (error: Error) => void;\n};\n\nexport default function useUploadVideo({\n  onUpload,\n  onUploadStart,\n  onUploadError,\n}: Props) {\n  const [error, setError] = useState<string | null>(null);\n  const [commit, isMutationInFlight] = useMutation<useUploadVideoMutation>(\n    graphql`\n      mutation useUploadVideoMutation($file: Upload!) {\n        uploadVideo(file: $file) {\n          id\n          height\n          width\n          url\n          path\n          posterPath\n          posterUrl\n        }\n      }\n    `,\n  );\n\n  const {getRootProps, getInputProps} = useDropzone({\n    accept: ACCEPT_VIDEOS,\n    multiple: false,\n    maxFiles: 1,\n    onDrop: (\n      acceptedFiles: FileWithPath[],\n      fileRejections: FileRejection[],\n    ) => {\n      setError(null);\n\n      // Check if any of the files (only 1 file allowed) is rejected. The\n      // rejected file has an error (e.g., 'file-too-large'). Rendering an\n      // appropriate message.\n      if (fileRejections.length > 0 && fileRejections[0].errors.length > 0) {\n        const code = fileRejections[0].errors[0].code;\n        if (code === 'file-too-large') {\n          setError(\n            `File too large. Try a video under ${MAX_FILE_SIZE_IN_MB} MB`,\n          );\n          return;\n        }\n      }\n\n      if (acceptedFiles.length === 0) {\n        setError('File not accepted. Please try again.');\n        return;\n      }\n      if (acceptedFiles.length > 1) {\n        setError('Too many files. Please try again with 1 file.');\n        return;\n      }\n\n      onUploadStart?.();\n      const file = acceptedFiles[0];\n\n      commit({\n        variables: {\n          file,\n        },\n        uploadables: {\n          file,\n        },\n        onCompleted: response => onUpload(response.uploadVideo),\n        onError: error => {\n          Logger.error(error);\n          onUploadError?.(error);\n          setError('Upload failed.');\n        },\n      });\n    },\n    onError: error => {\n      Logger.error(error);\n      setError('File not supported.');\n    },\n    maxSize: MAX_VIDEO_UPLOAD_SIZE,\n  });\n\n  return {\n    getRootProps,\n    getInputProps,\n    isUploading: isMutationInFlight,\n    error,\n    setError,\n  };\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/icons/GitHubIcon.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\ntype Props = {\n  className?: string;\n};\n\nexport function GitHubIcon({className}: Props) {\n  return (\n    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\" className={className}>\n      <path\n        fillRule=\"evenodd\"\n        clipRule=\"evenodd\"\n        d=\"M12 2C6.477 2 2 6.463 2 11.97c0 4.404 2.865 8.14 6.839 9.458.5.092.682-.216.682-.48 0-.236-.008-.864-.013-1.695-2.782.602-3.369-1.337-3.369-1.337-.454-1.151-1.11-1.458-1.11-1.458-.908-.618.069-.606.069-.606 1.003.07 1.531 1.027 1.531 1.027.892 1.524 2.341 1.084 2.91.828.092-.643.35-1.083.636-1.332-2.22-.251-4.555-1.107-4.555-4.927 0-1.088.39-1.979 1.029-2.675-.103-.252-.446-1.266.098-2.638 0 0 .84-.268 2.75 1.022A9.607 9.607 0 0 1 12 6.82c.85.004 1.705.114 2.504.336 1.909-1.29 2.747-1.022 2.747-1.022.546 1.372.202 2.386.1 2.638.64.696 1.028 1.587 1.028 2.675 0 3.83-2.339 4.673-4.566 4.92.359.307.678.915.678 1.846 0 1.332-.012 2.407-.012 2.734 0 .267.18.577.688.48 3.97-1.32 6.833-5.054 6.833-9.458C22 6.463 17.522 2 12 2Z\"></path>\n    </svg>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/options/DownloadOption.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {Package} from '@carbon/icons-react';\nimport OptionButton from './OptionButton';\nimport useDownloadVideo from './useDownloadVideo';\n\nexport default function DownloadOption() {\n  const {download, state} = useDownloadVideo();\n\n  return (\n    <OptionButton\n      title=\"Download\"\n      Icon={Package}\n      loadingProps={{\n        loading: state === 'started' || state === 'encoding',\n        label: 'Downloading...',\n      }}\n      onClick={download}\n    />\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/options/GalleryOption.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport ChangeVideoModal from '@/common/components/gallery/ChangeVideoModal';\nimport type {VideoGalleryTriggerProps} from '@/common/components/gallery/DemoVideoGalleryModal';\nimport useScreenSize from '@/common/screen/useScreenSize';\nimport {ImageCopy} from '@carbon/icons-react';\nimport OptionButton from './OptionButton';\n\ntype Props = {\n  onChangeVideo: () => void;\n};\nexport default function GalleryOption({onChangeVideo}: Props) {\n  return (\n    <ChangeVideoModal\n      videoGalleryModalTrigger={GalleryTrigger}\n      showUploadInGallery={false}\n      onChangeVideo={onChangeVideo}\n    />\n  );\n}\n\nfunction GalleryTrigger({onClick}: VideoGalleryTriggerProps) {\n  const {isMobile} = useScreenSize();\n\n  return (\n    <OptionButton\n      variant=\"flat\"\n      title={isMobile ? 'Gallery' : 'Browse gallery'}\n      Icon={ImageCopy}\n      onClick={onClick}\n    />\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/options/MoreOptionsToolbar.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport MoreOptionsToolbarBottomActions from '@/common/components/options/MoreOptionsToolbarBottomActions';\nimport ShareSection from '@/common/components/options/ShareSection';\nimport TryAnotherVideoSection from '@/common/components/options/TryAnotherVideoSection';\nimport useMessagesSnackbar from '@/common/components/snackbar/useDemoMessagesSnackbar';\nimport ToolbarHeaderWrapper from '@/common/components/toolbar/ToolbarHeaderWrapper';\nimport useScreenSize from '@/common/screen/useScreenSize';\nimport {useEffect, useRef} from 'react';\n\ntype Props = {\n  onTabChange: (newIndex: number) => void;\n};\n\nexport default function MoreOptionsToolbar({onTabChange}: Props) {\n  const {isMobile} = useScreenSize();\n  const {clearMessage} = useMessagesSnackbar();\n  const didClearMessageSnackbar = useRef(false);\n\n  useEffect(() => {\n    if (!didClearMessageSnackbar.current) {\n      didClearMessageSnackbar.current = true;\n      clearMessage();\n    }\n  }, [clearMessage]);\n\n  return (\n    <div className=\"flex flex-col h-full\">\n      <div className=\"grow\">\n        <ToolbarHeaderWrapper\n          title=\"Nice work! What's next?\"\n          className=\"pb-0 !border-b-0 !text-white\"\n          showProgressChip={false}\n        />\n        <ShareSection />\n        {!isMobile && <div className=\"h-[1px] bg-black mt-4 mb-8\"></div>}\n        <TryAnotherVideoSection onTabChange={onTabChange} />\n      </div>\n      {!isMobile && (\n        <MoreOptionsToolbarBottomActions onTabChange={onTabChange} />\n      )}\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/options/MoreOptionsToolbarBottomActions.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport RestartSessionButton from '@/common/components/session/RestartSessionButton';\nimport {\n  EFFECT_TOOLBAR_INDEX,\n  OBJECT_TOOLBAR_INDEX,\n} from '@/common/components/toolbar/ToolbarConfig';\nimport {ChevronLeft} from '@carbon/icons-react';\nimport {Button} from 'react-daisyui';\nimport ToolbarBottomActionsWrapper from '../toolbar/ToolbarBottomActionsWrapper';\n\ntype Props = {\n  onTabChange: (newIndex: number) => void;\n};\n\nexport default function MoreOptionsToolbarBottomActions({onTabChange}: Props) {\n  function handleReturnToEffectsTab() {\n    onTabChange(EFFECT_TOOLBAR_INDEX);\n  }\n\n  return (\n    <ToolbarBottomActionsWrapper>\n      <Button\n        color=\"ghost\"\n        onClick={handleReturnToEffectsTab}\n        className=\"!px-4 !rounded-full font-medium text-white hover:bg-black\"\n        startIcon={<ChevronLeft />}>\n        Edit effects\n      </Button>\n      <RestartSessionButton\n        onRestartSession={() => onTabChange(OBJECT_TOOLBAR_INDEX)}\n      />\n    </ToolbarBottomActionsWrapper>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/options/OptionButton.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport GradientBorder from '@/common/components/button/GradientBorder';\nimport useScreenSize from '@/common/screen/useScreenSize';\nimport {BLUE_PINK_FILL_BR} from '@/theme/gradientStyle';\nimport type {CarbonIconType} from '@carbon/icons-react';\nimport {Loading} from 'react-daisyui';\n\ntype Props = {\n  variant?: 'default' | 'flat' | 'gradient';\n  title: string | React.ReactNode;\n  Icon: CarbonIconType;\n  isActive?: boolean;\n  isDisabled?: boolean;\n  loadingProps?: {\n    loading: boolean;\n    label?: string;\n  };\n  onClick: () => void;\n};\n\nexport default function OptionButton({\n  variant = 'default',\n  title,\n  Icon,\n  isActive = false,\n  isDisabled = false,\n  loadingProps,\n  onClick,\n}: Props) {\n  const {isMobile} = useScreenSize();\n  const isLoading = loadingProps?.loading === true;\n\n  function handleClick() {\n    if (isDisabled) {\n      return;\n    }\n    onClick();\n  }\n\n  const ButtonBase = (\n    <div\n      onClick={handleClick}\n      className={`relative rounded-lg h-full flex items-center justify-center \n${variant === 'default' ? 'bg-graydark-700' : ''}\n${!isDisabled && 'cursor-pointer'}\n${isDisabled ? 'text-gray-300' : ''}\n${isActive && BLUE_PINK_FILL_BR}`}>\n      <div className=\"flex gap-2 items-center py-4 md:py-6\">\n        {isLoading ? (\n          <Loading size=\"md\" className=\"mx-auto mt-1\" />\n        ) : (\n          <Icon\n            size={isMobile ? 24 : 28}\n            className={`mx-auto ${isDisabled ? 'text-gray-300' : 'text-white'}`}\n          />\n        )}\n        <div className=\"text-base font-medium text-white\">\n          {isLoading && loadingProps?.label != null\n            ? loadingProps.label\n            : title}\n        </div>\n      </div>\n    </div>\n  );\n\n  return variant === 'gradient' ? (\n    <GradientBorder rounded={false} className={'rounded-lg md:rounded-full'}>\n      {ButtonBase}\n    </GradientBorder>\n  ) : (\n    ButtonBase\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/options/ShareSection.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport DownloadOption from './DownloadOption';\n\nexport default function ShareSection() {\n  return (\n    <div className=\"p-5 md:p-8\">\n      <DownloadOption />\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/options/ShareUtils.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport async function handleSaveVideo(\n  videoPath: string,\n  fileName?: string,\n): Promise<void> {\n  const blob = await fetch(videoPath).then(res => res.blob());\n\n  return new Promise(resolve => {\n    const reader = new FileReader();\n    reader.readAsDataURL(blob);\n    reader.addEventListener('load', () => {\n      const elem = document.createElement('a');\n      elem.download = fileName ?? getFileName();\n      if (typeof reader.result === 'string') {\n        elem.href = reader.result;\n      }\n      elem.click();\n      resolve();\n    });\n  });\n}\n\nexport function getFileName() {\n  const date = new Date();\n  const timestamp = date.getTime();\n  return `sam2_masked_video_${timestamp}.mp4`;\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/options/TryAnotherVideoSection.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport GalleryOption from '@/common/components/options/GalleryOption';\nimport UploadOption from '@/common/components/options/UploadOption';\nimport {OBJECT_TOOLBAR_INDEX} from '@/common/components/toolbar/ToolbarConfig';\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport useScreenSize from '@/common/screen/useScreenSize';\n\ntype Props = {\n  onTabChange: (tabIndex: number) => void;\n};\n\nexport default function TryAnotherVideoSection({onTabChange}: Props) {\n  const {isMobile} = useScreenSize();\n  const video = useVideo();\n\n  function handleVideoChange() {\n    if (video != null) {\n      video.pause();\n      video.frame = 0;\n    }\n    onTabChange(OBJECT_TOOLBAR_INDEX);\n  }\n\n  if (isMobile) {\n    return (\n      <div className=\"px-8 pb-8\">\n        <div className=\"font-medium text-gray-300 text-sm\">\n          Or, try another video\n        </div>\n        <div className=\"flex flex-row gap-4 mt-4 w-full\">\n          <div className=\"flex-1\">\n            <UploadOption onUpload={handleVideoChange} />\n          </div>\n          <div className=\"flex-1\">\n            <GalleryOption onChangeVideo={handleVideoChange} />\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"px-8 pb-8\">\n      <div className=\"font-medium text-gray-300 text-base\">\n        Try another video\n      </div>\n      <div className=\"flex flex-col gap-4 mt-4\">\n        <UploadOption onUpload={handleVideoChange} />\n        <GalleryOption onChangeVideo={handleVideoChange} />\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/options/UploadOption.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport useUploadVideo from '@/common/components/gallery/useUploadVideo';\nimport OptionButton from '@/common/components/options/OptionButton';\nimport Logger from '@/common/logger/Logger';\nimport useScreenSize from '@/common/screen/useScreenSize';\nimport {sessionAtom, uploadingStateAtom} from '@/demo/atoms';\nimport {MAX_UPLOAD_FILE_SIZE} from '@/demo/DemoConfig';\nimport {Close, CloudUpload} from '@carbon/icons-react';\nimport {useSetAtom} from 'jotai';\nimport {useNavigate} from 'react-router-dom';\n\ntype Props = {\n  onUpload: () => void;\n};\n\nexport default function UploadOption({onUpload}: Props) {\n  const navigate = useNavigate();\n  const {isMobile} = useScreenSize();\n  const setUploadingState = useSetAtom(uploadingStateAtom);\n  const setSession = useSetAtom(sessionAtom);\n\n  const {getRootProps, getInputProps, isUploading, error} = useUploadVideo({\n    onUpload: videoData => {\n      navigate(\n        {pathname: location.pathname, search: location.search},\n        {state: {video: videoData}},\n      );\n      onUpload();\n      setUploadingState('default');\n      setSession(null);\n    },\n    onUploadError: (error: Error) => {\n      setUploadingState('error');\n      Logger.error(error);\n    },\n    onUploadStart: () => {\n      setUploadingState('uploading');\n    },\n  });\n\n  return (\n    <div className=\"cursor-pointer\" {...getRootProps()}>\n      <input {...getInputProps()} />\n\n      <OptionButton\n        variant=\"gradient\"\n        title={\n          error !== null ? (\n            'Upload Error'\n          ) : isMobile ? (\n            <>\n              Upload{' '}\n              <div className=\"text-xs opacity-70\">\n                Max {MAX_UPLOAD_FILE_SIZE}\n              </div>\n            </>\n          ) : (\n            <>\n              Upload your own{' '}\n              <div className=\"text-xs opacity-70\">\n                Max {MAX_UPLOAD_FILE_SIZE}\n              </div>\n            </>\n          )\n        }\n        Icon={error !== null ? Close : CloudUpload}\n        loadingProps={{loading: isUploading, label: 'Uploading...'}}\n        onClick={() => {}}\n      />\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/options/__generated__/GetLinkOptionShareVideoMutation.graphql.ts",
    "content": "/**\n * @generated SignedSource<<39d7e92a6c15de1583c90ae21a7825e5>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { ConcreteRequest, Mutation } from 'relay-runtime';\nexport type GetLinkOptionShareVideoMutation$variables = {\n  file: any;\n};\nexport type GetLinkOptionShareVideoMutation$data = {\n  readonly uploadSharedVideo: {\n    readonly path: string;\n  };\n};\nexport type GetLinkOptionShareVideoMutation = {\n  response: GetLinkOptionShareVideoMutation$data;\n  variables: GetLinkOptionShareVideoMutation$variables;\n};\n\nconst node: ConcreteRequest = (function(){\nvar v0 = [\n  {\n    \"defaultValue\": null,\n    \"kind\": \"LocalArgument\",\n    \"name\": \"file\"\n  }\n],\nv1 = [\n  {\n    \"alias\": null,\n    \"args\": [\n      {\n        \"kind\": \"Variable\",\n        \"name\": \"file\",\n        \"variableName\": \"file\"\n      }\n    ],\n    \"concreteType\": \"SharedVideo\",\n    \"kind\": \"LinkedField\",\n    \"name\": \"uploadSharedVideo\",\n    \"plural\": false,\n    \"selections\": [\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"path\",\n        \"storageKey\": null\n      }\n    ],\n    \"storageKey\": null\n  }\n];\nreturn {\n  \"fragment\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Fragment\",\n    \"metadata\": null,\n    \"name\": \"GetLinkOptionShareVideoMutation\",\n    \"selections\": (v1/*: any*/),\n    \"type\": \"Mutation\",\n    \"abstractKey\": null\n  },\n  \"kind\": \"Request\",\n  \"operation\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Operation\",\n    \"name\": \"GetLinkOptionShareVideoMutation\",\n    \"selections\": (v1/*: any*/)\n  },\n  \"params\": {\n    \"cacheID\": \"f02ec81a41c8d75c3733853e1fb04f58\",\n    \"id\": null,\n    \"metadata\": {},\n    \"name\": \"GetLinkOptionShareVideoMutation\",\n    \"operationKind\": \"mutation\",\n    \"text\": \"mutation GetLinkOptionShareVideoMutation(\\n  $file: Upload!\\n) {\\n  uploadSharedVideo(file: $file) {\\n    path\\n  }\\n}\\n\"\n  }\n};\n})();\n\n(node as any).hash = \"c1b085da9afaac5f19eeb99ff561ed55\";\n\nexport default node;\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/options/useDownloadVideo.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {getFileName} from '@/common/components/options/ShareUtils';\nimport {\n  EncodingCompletedEvent,\n  EncodingStateUpdateEvent,\n} from '@/common/components/video/VideoWorkerBridge';\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport {MP4ArrayBuffer} from 'mp4box';\nimport {useState} from 'react';\n\ntype DownloadingState = 'default' | 'started' | 'encoding' | 'completed';\n\ntype State = {\n  state: DownloadingState;\n  progress: number;\n  download: (shouldSave?: boolean) => Promise<MP4ArrayBuffer>;\n};\n\nexport default function useDownloadVideo(): State {\n  const [downloadingState, setDownloadingState] =\n    useState<DownloadingState>('default');\n  const [progress, setProgress] = useState<number>(0);\n\n  const video = useVideo();\n\n  async function download(shouldSave = true): Promise<MP4ArrayBuffer> {\n    return new Promise(resolve => {\n      function onEncodingStateUpdate(event: EncodingStateUpdateEvent) {\n        setDownloadingState('encoding');\n        setProgress(event.progress);\n      }\n\n      function onEncodingComplete(event: EncodingCompletedEvent) {\n        const file = event.file;\n\n        if (shouldSave) {\n          saveVideo(file, getFileName());\n        }\n\n        video?.removeEventListener('encodingCompleted', onEncodingComplete);\n        video?.removeEventListener(\n          'encodingStateUpdate',\n          onEncodingStateUpdate,\n        );\n        setDownloadingState('completed');\n        resolve(file);\n      }\n\n      video?.addEventListener('encodingStateUpdate', onEncodingStateUpdate);\n      video?.addEventListener('encodingCompleted', onEncodingComplete);\n\n      if (downloadingState === 'default' || downloadingState === 'completed') {\n        setDownloadingState('started');\n        video?.pause();\n        video?.encode();\n      }\n    });\n  }\n\n  function saveVideo(file: MP4ArrayBuffer, fileName: string) {\n    const blob = new Blob([file]);\n    const url = window.URL.createObjectURL(blob);\n\n    const a = document.createElement('a');\n    document.body.appendChild(a);\n    a.setAttribute('href', url);\n    a.setAttribute('download', fileName);\n    a.setAttribute('target', '_self');\n    a.click();\n    window.URL.revokeObjectURL(url);\n  }\n\n  return {download, progress, state: downloadingState};\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/session/RestartSessionButton.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport useRestartSession from '@/common/components/session/useRestartSession';\nimport {Reset} from '@carbon/icons-react';\nimport {Button, Loading} from 'react-daisyui';\n\ntype Props = {\n  onRestartSession: () => void;\n};\n\nexport default function RestartSessionButton({onRestartSession}: Props) {\n  const {restartSession, isLoading} = useRestartSession();\n\n  function handleRestartSession() {\n    restartSession(onRestartSession);\n  }\n\n  return (\n    <Button\n      color=\"ghost\"\n      onClick={handleRestartSession}\n      className=\"!px-4 !rounded-full font-medium text-white hover:bg-black\"\n      startIcon={isLoading ? <Loading size=\"sm\" /> : <Reset size={20} />}>\n      Start over\n    </Button>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/session/__generated__/useCloseSessionBeforeUnloadMutation.graphql.ts",
    "content": "/**\n * @generated SignedSource<<f56872c0a8b65fa7e9bdaff351930ff0>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { ConcreteRequest, Mutation } from 'relay-runtime';\nexport type CloseSessionInput = {\n  sessionId: string;\n};\nexport type useCloseSessionBeforeUnloadMutation$variables = {\n  input: CloseSessionInput;\n};\nexport type useCloseSessionBeforeUnloadMutation$data = {\n  readonly closeSession: {\n    readonly success: boolean;\n  };\n};\nexport type useCloseSessionBeforeUnloadMutation = {\n  response: useCloseSessionBeforeUnloadMutation$data;\n  variables: useCloseSessionBeforeUnloadMutation$variables;\n};\n\nconst node: ConcreteRequest = (function(){\nvar v0 = [\n  {\n    \"defaultValue\": null,\n    \"kind\": \"LocalArgument\",\n    \"name\": \"input\"\n  }\n],\nv1 = [\n  {\n    \"alias\": null,\n    \"args\": [\n      {\n        \"kind\": \"Variable\",\n        \"name\": \"input\",\n        \"variableName\": \"input\"\n      }\n    ],\n    \"concreteType\": \"CloseSession\",\n    \"kind\": \"LinkedField\",\n    \"name\": \"closeSession\",\n    \"plural\": false,\n    \"selections\": [\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"success\",\n        \"storageKey\": null\n      }\n    ],\n    \"storageKey\": null\n  }\n];\nreturn {\n  \"fragment\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Fragment\",\n    \"metadata\": null,\n    \"name\": \"useCloseSessionBeforeUnloadMutation\",\n    \"selections\": (v1/*: any*/),\n    \"type\": \"Mutation\",\n    \"abstractKey\": null\n  },\n  \"kind\": \"Request\",\n  \"operation\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Operation\",\n    \"name\": \"useCloseSessionBeforeUnloadMutation\",\n    \"selections\": (v1/*: any*/)\n  },\n  \"params\": {\n    \"cacheID\": \"99b73bd43a9f74104d545778cebbd15c\",\n    \"id\": null,\n    \"metadata\": {},\n    \"name\": \"useCloseSessionBeforeUnloadMutation\",\n    \"operationKind\": \"mutation\",\n    \"text\": \"mutation useCloseSessionBeforeUnloadMutation(\\n  $input: CloseSessionInput!\\n) {\\n  closeSession(input: $input) {\\n    success\\n  }\\n}\\n\"\n  }\n};\n})();\n\n(node as any).hash = \"55dd870645c9736b797b90819ddb1b92\";\n\nexport default node;\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/session/useCloseSessionBeforeUnload.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {useCloseSessionBeforeUnloadMutation$variables} from '@/common/components/session/__generated__/useCloseSessionBeforeUnloadMutation.graphql';\nimport {sessionAtom} from '@/demo/atoms';\nimport useSettingsContext from '@/settings/useSettingsContext';\nimport {useAtomValue} from 'jotai';\nimport {useEffect, useMemo} from 'react';\nimport {ConcreteRequest, graphql} from 'relay-runtime';\n\n/**\n * The useCloseSessionBeforeUnload is a dirty workaround to send close session\n * requests on window/tab close. Going through Relay does not send the request\n * even if the `keepalive` flag is set for the request. It does work when the\n * fetch is called directly with the close session mutation.\n *\n * Caveat: there is static typing, but there might be other caveats around this\n * quirky hack.\n */\nexport default function useCloseSessionBeforeUnload() {\n  const session = useAtomValue(sessionAtom);\n  const {settings} = useSettingsContext();\n\n  const data = useMemo(() => {\n    if (session == null) {\n      return null;\n    }\n\n    const graphQLTaggedNode = graphql`\n      mutation useCloseSessionBeforeUnloadMutation($input: CloseSessionInput!) {\n        closeSession(input: $input) {\n          success\n        }\n      }\n    ` as ConcreteRequest;\n\n    const variables: useCloseSessionBeforeUnloadMutation$variables = {\n      input: {\n        sessionId: session.id,\n      },\n    };\n\n    const query = graphQLTaggedNode.params.text;\n    if (query === null) {\n      return null;\n    }\n\n    return {\n      query,\n      variables,\n    };\n  }, [session]);\n\n  useEffect(() => {\n    function onBeforeUpload() {\n      if (data == null) {\n        return;\n      }\n\n      fetch(`${settings.inferenceAPIEndpoint}/graphql`, {\n        method: 'POST',\n        credentials: 'include',\n        headers: {\n          'Content-Type': 'application/json',\n        },\n        keepalive: true,\n        body: JSON.stringify(data),\n      });\n    }\n    window.addEventListener('beforeunload', onBeforeUpload);\n    return () => {\n      window.removeEventListener('beforeunload', onBeforeUpload);\n    };\n  }, [data, session, settings.inferenceAPIEndpoint]);\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/session/useRestartSession.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport useMessagesSnackbar from '@/common/components/snackbar/useDemoMessagesSnackbar';\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport useInputVideo from '@/common/components/video/useInputVideo';\nimport {\n  activeTrackletObjectIdAtom,\n  isPlayingAtom,\n  isStreamingAtom,\n  labelTypeAtom,\n  trackletObjectsAtom,\n} from '@/demo/atoms';\nimport {useAtomValue, useSetAtom} from 'jotai';\nimport {useState} from 'react';\n\nexport default function useRestartSession() {\n  const [isLoading, setIsLoading] = useState<boolean>();\n  const isPlaying = useAtomValue(isPlayingAtom);\n  const isStreaming = useAtomValue(isStreamingAtom);\n  const setActiveTrackletObjectId = useSetAtom(activeTrackletObjectIdAtom);\n  const setTracklets = useSetAtom(trackletObjectsAtom);\n  const setLabelType = useSetAtom(labelTypeAtom);\n  const {clearMessage} = useMessagesSnackbar();\n\n  const {inputVideo} = useInputVideo();\n  const video = useVideo();\n\n  async function restartSession(onRestart?: () => void) {\n    if (video === null || inputVideo === null) {\n      return;\n    }\n\n    setIsLoading(true);\n    if (isPlaying) {\n      video.pause();\n    }\n    if (isStreaming) {\n      await video.abortStreamMasks();\n    }\n    await video?.startSession(inputVideo.path);\n    video.frame = 0;\n    setActiveTrackletObjectId(0);\n    setTracklets([]);\n    setLabelType('positive');\n    onRestart?.();\n    clearMessage();\n    setIsLoading(false);\n  }\n\n  return {isLoading, restartSession};\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/snackbar/DemoMessagesSnackbarUtils.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {EnqueueOption} from '@/common/components/snackbar/useMessagesSnackbar';\n\nexport type MessageOptions = EnqueueOption & {\n  repeat?: boolean;\n};\n\ntype MessageEvent = {\n  text: string;\n  shown: boolean;\n  action?: Element;\n  options?: MessageOptions;\n};\n\nexport interface MessagesEventMap {\n  startSession: MessageEvent;\n  firstClick: MessageEvent;\n  pointClick: MessageEvent;\n  addObjectClick: MessageEvent;\n  trackAndPlayClick: MessageEvent;\n  trackAndPlayComplete: MessageEvent;\n  trackAndPlayThrottlingWarning: MessageEvent;\n  effectsMessage: MessageEvent;\n}\n\nexport const defaultMessageMap: MessagesEventMap = {\n  startSession: {\n    text: 'Starting session',\n    shown: false,\n    options: {type: 'loading', showClose: false, repeat: true, duration: 2000},\n  },\n  firstClick: {\n    text: 'Tip: Click on any object in the video to get started.',\n    shown: false,\n    options: {expire: false, repeat: false},\n  },\n  pointClick: {\n    text: 'Tip: Not what you expected? Add a few more clicks until the full object you want is selected.',\n    shown: false,\n    options: {expire: false, repeat: false},\n  },\n  addObjectClick: {\n    text: 'Tip: Add a new object by clicking on it in the video.',\n    shown: false,\n    options: {expire: false, repeat: false},\n  },\n  trackAndPlayClick: {\n    text: 'Hang tight while your objects are tracked! You’ll be able to apply visual effects in the next step. Stop tracking at any point to adjust your selections if the tracking doesn’t look right.',\n    shown: false,\n    options: {expire: false, repeat: false},\n  },\n  trackAndPlayComplete: {\n    text: 'Tip: You can fix tracking issues by going back to the frames where tracking is not quite right and adding or removing clicks.',\n    shown: false,\n    options: {expire: false, repeat: false},\n  },\n  trackAndPlayThrottlingWarning: {\n    text: 'Looks like you have clicked the tracking button a bit too often! To keep things running smoothly, we have temporarily disabled the button.',\n    shown: false,\n    options: {repeat: true},\n  },\n  effectsMessage: {\n    text: 'Tip: If you aren’t sure where to get started, click “Surprise Me” to apply a surprise effect to your video.',\n    shown: false,\n    options: {expire: false, repeat: false},\n  },\n};\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/snackbar/MessagesSnackbar.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport useScreenSize from '@/common/screen/useScreenSize';\nimport {color, gradients} from '@/theme/tokens.stylex';\nimport {Close} from '@carbon/icons-react';\nimport stylex from '@stylexjs/stylex';\nimport {useAtomValue} from 'jotai';\nimport {Loading, RadialProgress} from 'react-daisyui';\nimport {messageAtom} from './snackbarAtoms';\nimport useExpireMessage from './useExpireMessage';\nimport useMessagesSnackbar from './useMessagesSnackbar';\n\nconst styles = stylex.create({\n  container: {\n    position: 'absolute',\n    top: '8px',\n    right: '8px',\n  },\n  mobileContainer: {\n    position: 'absolute',\n    bottom: '8px',\n    left: '8px',\n    right: '8px',\n  },\n  messageContainer: {\n    padding: '20px 20px',\n    color: '#FFF',\n    borderRadius: '8px',\n    fontSize: '0.9rem',\n    maxWidth: 400,\n    border: '2px solid transparent',\n    background: gradients['yellowTeal'],\n  },\n  messageWarningContainer: {\n    background: '#FFDC32',\n    color: color['gray-900'],\n  },\n  messageContent: {\n    display: 'flex',\n    alignItems: 'center',\n    gap: '8px',\n  },\n  progress: {\n    flexShrink: 0,\n    color: 'rgba(255, 255, 255, 0.1)',\n  },\n  closeColumn: {\n    display: 'flex',\n    alignSelf: 'stretch',\n    alignItems: 'start',\n  },\n});\n\nexport default function MessagesSnackbar() {\n  const message = useAtomValue(messageAtom);\n  const {clearMessage} = useMessagesSnackbar();\n  const {isMobile} = useScreenSize();\n\n  useExpireMessage();\n\n  if (message == null) {\n    return null;\n  }\n\n  const closeIcon = (\n    <Close\n      size={24}\n      color={message.type === 'warning' ? color['gray-900'] : 'white'}\n      opacity={1}\n      className=\"z-20 hover:text-gray-300 color-white cursor-pointer !opacity-100 shrink-0\"\n      onClick={clearMessage}\n    />\n  );\n\n  return (\n    <div\n      {...stylex.props(isMobile ? styles.mobileContainer : styles.container)}>\n      <div\n        {...stylex.props(\n          styles.messageContainer,\n          message.type === 'warning' && styles.messageWarningContainer,\n        )}>\n        <div {...stylex.props(styles.messageContent)}>\n          <div>{message.text}</div>\n          {message.type === 'loading' && <Loading size=\"xs\" variant=\"dots\" />}\n          {message.showClose && (\n            <div {...stylex.props(styles.closeColumn)}>\n              {message.expire ? (\n                <RadialProgress\n                  value={message.progress * 100}\n                  size=\"32px\"\n                  thickness=\"2px\"\n                  {...stylex.props(styles.progress)}>\n                  {closeIcon}\n                </RadialProgress>\n              ) : (\n                closeIcon\n              )}\n            </div>\n          )}\n        </div>\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/snackbar/snackbarAtoms.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {atom} from 'jotai';\n\nexport type MessageType = 'info' | 'loading' | 'warning';\n\nexport type Message = {\n  type: MessageType;\n  text: string;\n  duration: number;\n  progress: number;\n  startTime: number;\n  expire: boolean;\n  showClose: boolean;\n  showReset: boolean;\n};\n\nexport const messageAtom = atom<Message | null>(null);\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/snackbar/useDemoMessagesSnackbar.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {MessagesEventMap} from '@/common/components/snackbar/DemoMessagesSnackbarUtils';\nimport useMessagesSnackbar from '@/common/components/snackbar/useMessagesSnackbar';\nimport {messageMapAtom} from '@/demo/atoms';\nimport {useAtom} from 'jotai';\nimport {useCallback} from 'react';\n\ntype State = {\n  enqueueMessage: (messageType: keyof MessagesEventMap) => void;\n  clearMessage: () => void;\n};\n\nexport default function useDemoMessagesSnackbar(): State {\n  const [messageMap, setMessageMap] = useAtom(messageMapAtom);\n  const {enqueueMessage: enqueue, clearMessage} = useMessagesSnackbar();\n\n  const enqueueMessage = useCallback(\n    (messageType: keyof MessagesEventMap) => {\n      const {text, shown, options} = messageMap[messageType];\n      if (!options?.repeat && shown === true) {\n        return;\n      }\n      enqueue(text, options);\n      const newState = {...messageMap};\n      newState[messageType].shown = true;\n      setMessageMap(newState);\n    },\n    [enqueue, messageMap, setMessageMap],\n  );\n\n  return {enqueueMessage, clearMessage};\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/snackbar/useExpireMessage.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {useAtom} from 'jotai';\nimport {useEffect, useRef} from 'react';\nimport {Message, messageAtom} from '@/common/components/snackbar/snackbarAtoms';\n\nexport default function useExpireMessage() {\n  const [message, setMessage] = useAtom(messageAtom);\n  const messageRef = useRef<Message | null>(null);\n  const intervalRef = useRef<NodeJS.Timeout | null>(null);\n\n  useEffect(() => {\n    messageRef.current = message;\n  }, [message]);\n\n  useEffect(() => {\n    function resetInterval() {\n      if (intervalRef.current != null) {\n        clearInterval(intervalRef.current);\n        intervalRef.current = null;\n      }\n    }\n    if (intervalRef.current == null && message != null && message.expire) {\n      intervalRef.current = setInterval(() => {\n        const prevMessage = messageRef.current;\n        if (prevMessage == null) {\n          setMessage(null);\n          resetInterval();\n          return;\n        }\n        const messageDuration = Date.now() - prevMessage.startTime;\n        if (messageDuration > prevMessage.duration) {\n          setMessage(null);\n          resetInterval();\n          return;\n        }\n        setMessage({\n          ...prevMessage,\n          progress: messageDuration / prevMessage.duration,\n        });\n      }, 20);\n    }\n  }, [message, setMessage]);\n\n  useEffect(() => {\n    return () => {\n      if (intervalRef.current != null) {\n        clearInterval(intervalRef.current);\n      }\n    };\n  }, []);\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/snackbar/useMessagesSnackbar.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {useSetAtom} from 'jotai';\nimport {useCallback} from 'react';\nimport {\n  MessageType,\n  messageAtom,\n} from '@/common/components/snackbar/snackbarAtoms';\n\nexport type EnqueueOption = {\n  duration?: number;\n  type?: MessageType;\n  expire?: boolean;\n  showClose?: boolean;\n  showReset?: boolean;\n};\n\ntype State = {\n  clearMessage: () => void;\n  enqueueMessage: (message: string, options?: EnqueueOption) => void;\n};\n\nexport default function useMessagesSnackbar(): State {\n  const setMessage = useSetAtom(messageAtom);\n\n  const enqueueMessage = useCallback(\n    (message: string, options?: EnqueueOption) => {\n      setMessage({\n        text: message,\n        type: options?.type ?? 'info',\n        duration: options?.duration ?? 5000,\n        progress: 0,\n        startTime: Date.now(),\n        expire: options?.expire ?? true,\n        showClose: options?.showClose ?? true,\n        showReset: options?.showReset ?? false,\n      });\n    },\n    [setMessage],\n  );\n\n  function clearMessage() {\n    setMessage(null);\n  }\n\n  return {enqueueMessage, clearMessage};\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/toolbar/DesktopToolbar.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport ObjectsToolbar from '@/common/components/annotations/ObjectsToolbar';\nimport EffectsToolbar from '@/common/components/effects/EffectsToolbar';\nimport MoreOptionsToolbar from '@/common/components/options/MoreOptionsToolbar';\nimport type {CSSProperties} from 'react';\n\ntype Props = {\n  tabIndex: number;\n  onTabChange: (newIndex: number) => void;\n};\n\nexport default function DesktopToolbar({tabIndex, onTabChange}: Props) {\n  const toolbarShadow: CSSProperties = {\n    boxShadow: '0px 1px 3px 1px rgba(0,0,0,.25)',\n    transition: 'box-shadow 0.8s ease-out',\n  };\n\n  const tabs = [\n    <ObjectsToolbar key=\"objects\" onTabChange={onTabChange} />,\n    <EffectsToolbar key=\"effects\" onTabChange={onTabChange} />,\n    <MoreOptionsToolbar key=\"options\" onTabChange={onTabChange} />,\n  ];\n\n  return (\n    <div\n      style={toolbarShadow}\n      className=\"bg-graydark-800 text-white md:basis-[350px] lg:basis-[435px] shrink-0 rounded-xl\">\n      {tabs[tabIndex]}\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/toolbar/MobileToolbar.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport MobileObjectsToolbar from '@/common/components/annotations/MobileObjectsToolbar';\nimport MobileEffectsToolbar from '@/common/components/effects/MobileEffectsToolbar';\nimport MoreOptionsToolbar from '@/common/components/options/MoreOptionsToolbar';\n\ntype Props = {\n  tabIndex: number;\n  onTabChange: (newIndex: number) => void;\n};\n\nexport default function MobileToolbar({tabIndex, onTabChange}: Props) {\n  const tabs = [\n    <MobileObjectsToolbar key=\"objects\" onTabChange={onTabChange} />,\n    <MobileEffectsToolbar key=\"effects\" onTabChange={onTabChange} />,\n    <MoreOptionsToolbar key=\"more-options\" onTabChange={onTabChange} />,\n  ];\n\n  return (\n    <div className=\"relative flex flex-col bg-black\">{tabs[tabIndex]}</div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/toolbar/Toolbar.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport useListenToStreamingState from '@/common/components/toolbar/useListenToStreamingState';\nimport useToolbarTabs from '@/common/components/toolbar/useToolbarTabs';\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport useVideoEffect from '@/common/components/video/editor/useVideoEffect';\nimport {EffectIndex} from '@/common/components/video/effects/Effects';\nimport useScreenSize from '@/common/screen/useScreenSize';\nimport {\n  codeEditorOpenedAtom,\n  isPlayingAtom,\n  isStreamingAtom,\n} from '@/demo/atoms';\nimport {useAtom, useAtomValue, useSetAtom} from 'jotai';\nimport {useCallback, useEffect} from 'react';\nimport DesktopToolbar from './DesktopToolbar';\nimport MobileToolbar from './MobileToolbar';\nimport {OBJECT_TOOLBAR_INDEX} from './ToolbarConfig';\n\nexport default function Toolbar() {\n  const [tabIndex, setTabIndex] = useToolbarTabs();\n  const video = useVideo();\n  const setIsPlaying = useSetAtom(isPlayingAtom);\n  const [isStreaming, setIsStreaming] = useAtom(isStreamingAtom);\n  const codeEditorOpened = useAtomValue(codeEditorOpenedAtom);\n  const {isMobile} = useScreenSize();\n  const setEffect = useVideoEffect();\n\n  const resetEffects = useCallback(() => {\n    setEffect('Original', EffectIndex.BACKGROUND, {variant: 0});\n    setEffect('Overlay', EffectIndex.HIGHLIGHT, {variant: 0});\n  }, [setEffect]);\n\n  const handleStopVideo = useCallback(() => {\n    if (isStreaming) {\n      video?.abortStreamMasks();\n    } else {\n      video?.pause();\n    }\n  }, [video, isStreaming]);\n\n  const handleTabChange = useCallback(\n    (newIndex: number) => {\n      if (newIndex === OBJECT_TOOLBAR_INDEX) {\n        handleStopVideo();\n        resetEffects();\n      }\n\n      setTabIndex(newIndex);\n    },\n    [handleStopVideo, resetEffects, setTabIndex],\n  );\n\n  useListenToStreamingState();\n\n  useEffect(() => {\n    function onPlay() {\n      setIsPlaying(true);\n    }\n    function onPause() {\n      setIsPlaying(false);\n    }\n\n    video?.addEventListener('play', onPlay);\n    video?.addEventListener('pause', onPause);\n    return () => {\n      video?.removeEventListener('play', onPlay);\n      video?.removeEventListener('pause', onPause);\n    };\n  }, [video, resetEffects, setIsStreaming, setIsPlaying]);\n\n  if (codeEditorOpened) {\n    return null;\n  }\n\n  return isMobile ? (\n    <MobileToolbar tabIndex={tabIndex} onTabChange={handleTabChange} />\n  ) : (\n    <DesktopToolbar tabIndex={tabIndex} onTabChange={handleTabChange} />\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/toolbar/ToolbarActionIcon.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport GradientBorder from '@/common/components/button/GradientBorder';\nimport useScreenSize from '@/common/screen/useScreenSize';\nimport {BLUE_PINK_FILL_BR} from '@/theme/gradientStyle';\nimport type {CarbonIconType} from '@carbon/icons-react';\nimport {Loading} from 'react-daisyui';\n\ntype Props = {\n  isDisabled?: boolean;\n  isActive?: boolean;\n  icon: CarbonIconType;\n  title: string;\n  badge?: React.ReactNode;\n  variant: 'toggle' | 'button' | 'gradient' | 'flat';\n  span?: 1 | 2;\n  loadingProps?: {\n    loading: boolean;\n    label?: string;\n  };\n  onClick: () => void;\n};\n\nexport default function ToolbarActionIcon({\n  variant,\n  isDisabled = false,\n  isActive = false,\n  title,\n  badge,\n  loadingProps,\n  icon: Icon,\n  span = 1,\n  onClick,\n}: Props) {\n  const {isMobile} = useScreenSize();\n  const isLoading = loadingProps?.loading === true;\n\n  function handleClick() {\n    if (isDisabled) {\n      return;\n    }\n    onClick();\n  }\n\n  const ButtonBase = (\n    <div\n      onClick={handleClick}\n      className={`relative rounded-lg h-full flex items-center justify-center select-none\n      ${!isDisabled && 'cursor-pointer hover:bg-black'}\n      ${span === 1 && 'col-span-1'} \n      ${span === 2 && 'col-span-2'}\n      ${variant === 'button' && (isDisabled ? 'bg-graydark-500 text-gray-300' : 'bg-graydark-700 hover:bg-graydark-800 text-white')} \n      ${variant === 'toggle' && (isActive ? BLUE_PINK_FILL_BR : 'bg-inherit')}\n      ${variant === 'flat' && (isDisabled ? ' text-gray-600' : 'text-white')} \n      `}>\n      <div className=\"py-4 px-2\">\n        <div className=\"flex items-center justify-center\">\n          {isLoading ? (\n            <Loading size=\"md\" className=\"mx-auto\" />\n          ) : (\n            <Icon\n              size={isMobile ? 24 : 28}\n              color={isActive ? 'white' : 'black'}\n              className={`mx-auto ${isDisabled ? 'text-gray-300' : 'text-white'}`}\n            />\n          )}\n        </div>\n        <div\n          className={`mt-1 md:mt-2 text-center text-xs font-bold ${isActive && 'text-white'}`}>\n          {isLoading && loadingProps?.label != null\n            ? loadingProps.label\n            : title}\n        </div>\n        {isActive && badge}\n      </div>\n    </div>\n  );\n\n  return variant == 'gradient' ? (\n    <GradientBorder rounded={false} className=\"rounded-lg h-full text-white\">\n      {ButtonBase}\n    </GradientBorder>\n  ) : (\n    ButtonBase\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/toolbar/ToolbarBottomActionsWrapper.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {spacing} from '@/theme/tokens.stylex';\nimport stylex from '@stylexjs/stylex';\nimport {PropsWithChildren} from 'react';\n\nconst styles = stylex.create({\n  container: {\n    display: 'flex',\n    alignItems: 'center',\n    justifyContent: 'space-between',\n    paddingTop: {\n      default: spacing[2],\n      '@media screen and (max-width: 768px)': spacing[4],\n    },\n    paddingBottom: spacing[6],\n    paddingHorizontal: spacing[6],\n  },\n});\n\nexport default function ToolbarBottomActionsWrapper({\n  children,\n}: PropsWithChildren) {\n  return <div {...stylex.props(styles.container)}>{children}</div>;\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/toolbar/ToolbarConfig.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const OBJECT_TOOLBAR_INDEX = 0;\nexport const EFFECT_TOOLBAR_INDEX = 1;\nexport const MORE_OPTIONS_TOOLBAR_INDEX = 2;\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/toolbar/ToolbarHeaderWrapper.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {ReactNode} from 'react';\nimport ToolbarProgressChip from './ToolbarProgressChip';\n\ntype Props = {\n  title: string;\n  description?: string;\n  bottomSection?: ReactNode;\n  showProgressChip?: boolean;\n  className?: string;\n};\n\nexport default function ToolbarHeaderWrapper({\n  title,\n  description,\n  bottomSection,\n  showProgressChip = true,\n  className,\n}: Props) {\n  return (\n    <div\n      className={`flex flex-col gap-2 p-8 border-b border-b-black ${className}`}>\n      <div className=\"flex items-center\">\n        {showProgressChip && <ToolbarProgressChip />}\n        <h2 className=\"text-xl\">{title}</h2>\n      </div>\n\n      {description != null && (\n        <div className=\"flex-1 text-gray-400\">{description}</div>\n      )}\n      {bottomSection != null && bottomSection}\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/toolbar/ToolbarProgressChip.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {OBJECT_TOOLBAR_INDEX} from '@/common/components/toolbar/ToolbarConfig';\nimport useToolbarTabs from '@/common/components/toolbar/useToolbarTabs';\nimport {streamingStateAtom} from '@/demo/atoms';\nimport {useAtomValue} from 'jotai';\nimport {useMemo} from 'react';\nimport {Loading} from 'react-daisyui';\n\nconst TOTAL_DEMO_STEPS = 3;\n\nexport default function ToolbarProgressChip() {\n  const [toolbarIndex] = useToolbarTabs();\n  const streamingState = useAtomValue(streamingStateAtom);\n\n  const showLoader = useMemo(() => {\n    return streamingState === 'partial' || streamingState === 'requesting';\n  }, [streamingState]);\n\n  function getStepValue() {\n    if (toolbarIndex === OBJECT_TOOLBAR_INDEX) {\n      return streamingState !== 'full' ? 1 : 2;\n    }\n    return 3;\n  }\n\n  return (\n    <span className=\"inline-flex items-center justify-center rounded-full text-xs md:text-sm font-medium bg-white text-black w-10 md:w-12 h-5 md:h-6 mr-2 shrink-0 \">\n      {showLoader ? (\n        <Loading className=\"w-2 md:w-4\" />\n      ) : (\n        `${getStepValue()}/${TOTAL_DEMO_STEPS}`\n      )}\n    </span>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/toolbar/ToolbarSection.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {PropsWithChildren} from 'react';\n\ntype Props = PropsWithChildren<{\n  title: string;\n  borderBottom?: boolean;\n}>;\n\nexport default function ToolbarSection({\n  children,\n  title,\n  borderBottom = false,\n}: Props) {\n  return (\n    <div className={`p-6 ${borderBottom && 'border-b border-black'}`}>\n      <div className=\"font-bold ml-2\">{title}</div>\n      <div className=\"grid grid-cols-4 gap-2 mt-2 md:mt-6\">{children}</div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/toolbar/useListenToStreamingState.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {StreamingStateUpdateEvent} from '@/common/components/video/VideoWorkerBridge';\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport {StreamingState} from '@/common/tracker/Tracker';\nimport {isStreamingAtom, streamingStateAtom} from '@/demo/atoms';\nimport {useAtom} from 'jotai';\nimport {useEffect} from 'react';\n\nexport default function useListenToStreamingState(): {\n  isStreaming: boolean;\n  streamingState: StreamingState;\n} {\n  const [streamingState, setStreamingState] = useAtom(streamingStateAtom);\n  const [isStreaming, setIsStreaming] = useAtom(isStreamingAtom);\n  const video = useVideo();\n\n  useEffect(() => {\n    function onStreamingStateUpdate(event: StreamingStateUpdateEvent) {\n      setStreamingState(event.state);\n    }\n    function onStreamingStarted() {\n      setIsStreaming(true);\n    }\n    function onStreamingCompleted() {\n      setIsStreaming(false);\n    }\n    video?.addEventListener('streamingStateUpdate', onStreamingStateUpdate);\n    video?.addEventListener('streamingStarted', onStreamingStarted);\n    video?.addEventListener('streamingCompleted', onStreamingCompleted);\n\n    return () => {\n      video?.removeEventListener(\n        'streamingStateUpdate',\n        onStreamingStateUpdate,\n      );\n      video?.removeEventListener('streamingStarted', onStreamingStarted);\n      video?.removeEventListener('streamingCompleted', onStreamingCompleted);\n    };\n  }, [video, setStreamingState, setIsStreaming]);\n\n  return {isStreaming, streamingState};\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/toolbar/useToolbarTabs.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {toolbarTabIndex} from '@/demo/atoms';\nimport {useAtom} from 'jotai';\n\ntype State = [tabIndex: number, setTabIndex: (tabIndex: number) => void];\n\nexport default function useToolbarTabs(): State {\n  return useAtom(toolbarTabIndex);\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/useFunctionThrottle.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {useCallback, useState} from 'react';\n\ntype ThrottleOptions = {\n  enableThrottling?: boolean;\n};\ntype State = {\n  isThrottled: boolean;\n  maxThrottles: boolean;\n  throttle: (callback: () => void, options?: ThrottleOptions) => void;\n};\n\nexport default function useFunctionThrottle(\n  initialDelay: number,\n  numThrottles: number,\n): State {\n  const [isThrottled, setIsThrottled] = useState<boolean>(false);\n  const [lastClickTime, setLastClickTime] = useState<number | null>(null);\n  const [numTimesThrottled, setNumTimesThrottled] = useState<number>(1);\n\n  /**\n   * The following function's callback gets throttled when the time between two\n   * executions is less than a threshold.\n   *\n   * The threshold is calculated linearly by multiplying the initial delay\n   * and the number of times the button has been throttled. The button can be\n   * throttled up to numThrottles times.\n   *\n   * The function has an optional flag - enableThrottling - which allows a callsite\n   * to optionally disable throttling. This is useful in cases where throttling may\n   * not be necessary. (e.g. for the Track & Play button, we would only like to\n   * throttle after a stream is aborted.)\n   */\n  const throttle = useCallback(\n    (\n      callback: () => void,\n      options: ThrottleOptions = {\n        enableThrottling: true,\n      },\n    ) => {\n      if (isThrottled) {\n        return;\n      }\n\n      const currentTime = Date.now();\n      if (lastClickTime == null) {\n        callback();\n        setLastClickTime(currentTime);\n        return;\n      }\n\n      const timeBetweenClicks = currentTime - lastClickTime;\n      const delay = initialDelay * numTimesThrottled;\n      const shouldThrottle =\n        options.enableThrottling && delay > timeBetweenClicks;\n\n      if (shouldThrottle) {\n        setIsThrottled(true);\n        setTimeout(() => {\n          setIsThrottled(false);\n        }, delay);\n        setNumTimesThrottled(prev => {\n          return prev === numThrottles ? numThrottles : prev + 1;\n        });\n      }\n\n      callback();\n      setLastClickTime(currentTime);\n    },\n    [initialDelay, numThrottles, isThrottled, lastClickTime, numTimesThrottled],\n  );\n\n  return {\n    isThrottled,\n    maxThrottles: numTimesThrottled === numThrottles,\n    throttle,\n  };\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/ChangeVideoModal.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport type {VideoGalleryTriggerProps} from '@/common/components/gallery/DemoVideoGalleryModal';\nimport DemoVideoGalleryModal from '@/common/components/gallery/DemoVideoGalleryModal';\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport Logger from '@/common/logger/Logger';\nimport {isStreamingAtom, uploadingStateAtom, VideoData} from '@/demo/atoms';\nimport {useAtomValue, useSetAtom} from 'jotai';\nimport {ComponentType, useCallback} from 'react';\nimport {useNavigate} from 'react-router-dom';\n\ntype Props = {\n  videoGalleryModalTrigger?: ComponentType<VideoGalleryTriggerProps>;\n  showUploadInGallery?: boolean;\n  onChangeVideo?: () => void;\n};\n\nexport default function ChangeVideoModal({\n  videoGalleryModalTrigger: VideoGalleryModalTriggerComponent,\n  showUploadInGallery = true,\n  onChangeVideo,\n}: Props) {\n  const isStreaming = useAtomValue(isStreamingAtom);\n  const setUploadingState = useSetAtom(uploadingStateAtom);\n  const video = useVideo();\n  const navigate = useNavigate();\n\n  const handlePause = useCallback(() => {\n    video?.pause();\n  }, [video]);\n\n  function handlePauseOrAbortVideo() {\n    if (isStreaming) {\n      video?.abortStreamMasks();\n    } else {\n      handlePause();\n    }\n  }\n\n  function handleSwitchVideos(video: VideoData) {\n    // Retain any search parameter\n    navigate(\n      {\n        pathname: location.pathname,\n        search: location.search,\n      },\n      {\n        state: {\n          video,\n        },\n      },\n    );\n    onChangeVideo?.();\n  }\n\n  function handleUploadVideoError(error: Error) {\n    setUploadingState('error');\n    Logger.error(error);\n  }\n\n  return (\n    <DemoVideoGalleryModal\n      trigger={VideoGalleryModalTriggerComponent}\n      showUploadInGallery={showUploadInGallery}\n      onOpen={handlePauseOrAbortVideo}\n      onSelect={handleSwitchVideos}\n      onUploadVideoError={handleUploadVideoError}\n    />\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/EventEmitter.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\ntype EventMap<WorkerEventMap> = {\n  type: keyof WorkerEventMap;\n  listener: (ev: WorkerEventMap[keyof WorkerEventMap]) => unknown;\n};\n\nexport class EventEmitter<WorkerEventMap> {\n  listeners: EventMap<WorkerEventMap>[] = [];\n\n  trigger<K extends keyof WorkerEventMap>(type: K, ev: WorkerEventMap[K]) {\n    this.listeners\n      .filter(listener => type === listener.type)\n      .forEach(({listener}) => {\n        setTimeout(() => listener(ev), 0);\n      });\n  }\n\n  addEventListener<K extends keyof WorkerEventMap>(\n    type: K,\n    listener: (ev: WorkerEventMap[K]) => unknown,\n  ): void {\n    // @ts-expect-error Incorrect typing. Not sure how to correctly type it\n    this.listeners.push({type, listener});\n  }\n\n  removeEventListener<K extends keyof WorkerEventMap>(\n    type: K,\n    listener: (ev: WorkerEventMap[K]) => unknown,\n  ): void {\n    this.listeners = this.listeners.filter(\n      existingListener =>\n        !(\n          existingListener.type === type &&\n          existingListener.listener === listener\n        ),\n    );\n  }\n\n  destroy() {\n    this.listeners.length = 0;\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/Video.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {BaseTracklet, SegmentationPoint} from '@/common/tracker/Tracker';\nimport {TrackerOptions, Trackers} from '@/common/tracker/Trackers';\nimport {PauseFilled, PlayFilledAlt} from '@carbon/icons-react';\nimport stylex, {StyleXStyles} from '@stylexjs/stylex';\nimport {\n  CSSProperties,\n  forwardRef,\n  useEffect,\n  useImperativeHandle,\n  useMemo,\n  useRef,\n} from 'react';\nimport {Button} from 'react-daisyui';\n\nimport {EffectIndex, Effects} from '@/common/components/video/effects/Effects';\nimport useReportError from '@/common/error/useReportError';\nimport Logger from '@/common/logger/Logger';\nimport {isPlayingAtom, isVideoLoadingAtom} from '@/demo/atoms';\nimport {color} from '@/theme/tokens.stylex';\nimport {useAtom} from 'jotai';\nimport useResizeObserver from 'use-resize-observer';\nimport VideoLoadingOverlay from './VideoLoadingOverlay';\nimport {\n  StreamingStateUpdateEvent,\n  VideoWorkerEventMap,\n} from './VideoWorkerBridge';\nimport {EffectOptions} from './effects/Effect';\nimport useVideoWorker from './useVideoWorker';\n\nconst styles = stylex.create({\n  container: {\n    position: 'relative',\n    width: '100%',\n    height: '100%',\n  },\n  canvasContainer: {\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n    backgroundColor: color['gray-800'],\n    width: '100%',\n    height: '100%',\n  },\n  controls: {\n    position: 'absolute',\n    bottom: 0,\n    left: 0,\n    width: '100%',\n    padding: 8,\n    background: 'linear-gradient(#00000000, #000000ff)',\n  },\n  controlButton: {\n    color: 'white',\n  },\n});\n\ntype Props = {\n  src: string;\n  width: number;\n  height: number;\n  loading?: boolean;\n  containerStyle?: StyleXStyles<{\n    position: CSSProperties['position'];\n  }>;\n  canvasStyle?: StyleXStyles<{\n    width: CSSProperties['width'];\n  }>;\n  controls?: boolean;\n  createVideoWorker?: () => Worker;\n};\n\nexport type VideoRef = {\n  getCanvas(): HTMLCanvasElement | null;\n  get width(): number;\n  get height(): number;\n  get frame(): number;\n  set frame(index: number);\n  get numberOfFrames(): number;\n  play(): void;\n  pause(): void;\n  stop(): void;\n  previousFrame(): void;\n  nextFrame(): void;\n  setEffect(\n    name: keyof Effects,\n    index: EffectIndex,\n    options?: EffectOptions,\n  ): void;\n  encode(): void;\n  streamMasks(): void;\n  abortStreamMasks(): Promise<void>;\n  addEventListener<K extends keyof VideoWorkerEventMap>(\n    type: K,\n    listener: (ev: VideoWorkerEventMap[K]) => unknown,\n  ): void;\n  removeEventListener<K extends keyof VideoWorkerEventMap>(\n    type: K,\n    listener: (ev: VideoWorkerEventMap[K]) => unknown,\n  ): void;\n  createFilmstrip(width: number, height: number): Promise<ImageBitmap>;\n  // Tracker\n  initializeTracker(name: keyof Trackers, options?: TrackerOptions): void;\n  startSession(videoUrl: string): Promise<string | null>;\n  closeSession(): void;\n  logAnnotations(): void;\n  createTracklet(): Promise<BaseTracklet>;\n  deleteTracklet(trackletId: number): Promise<void>;\n  updatePoints(trackletId: number, points: SegmentationPoint[]): void;\n  clearPointsInVideo(): Promise<boolean>;\n  getWorker_ONLY_USE_WITH_CAUTION(): Worker;\n};\n\nexport default forwardRef<VideoRef, Props>(function Video(\n  {\n    src,\n    width,\n    height,\n    containerStyle,\n    canvasStyle,\n    createVideoWorker,\n    controls = false,\n    loading = false,\n  },\n  ref,\n) {\n  const reportError = useReportError();\n  const canvasRef = useRef<HTMLCanvasElement>(null);\n  const [isPlaying, setIsPlaying] = useAtom(isPlayingAtom);\n  const [isVideoLoading, setIsVideoLoading] = useAtom(isVideoLoadingAtom);\n\n  const bridge = useVideoWorker(src, canvasRef, {\n    createVideoWorker,\n  });\n\n  const {\n    ref: resizeObserverRef,\n    width: resizeWidth = 1,\n    height: resizeHeight = 1,\n  } = useResizeObserver<HTMLDivElement>();\n\n  const canvasHeight = useMemo(() => {\n    const resizeRatio = resizeWidth / width;\n    return Math.min(height * resizeRatio, resizeHeight);\n  }, [resizeWidth, height, width, resizeHeight]);\n\n  useImperativeHandle(\n    ref,\n    () => ({\n      getCanvas() {\n        return canvasRef.current;\n      },\n      get width() {\n        return bridge.width;\n      },\n      get height() {\n        return bridge.width;\n      },\n      get frame() {\n        return bridge.frame;\n      },\n      set frame(index: number) {\n        bridge.frame = index;\n      },\n      get numberOfFrames() {\n        return bridge.numberOfFrames;\n      },\n      play(): void {\n        bridge.play();\n      },\n      pause(): void {\n        bridge.pause();\n      },\n      stop(): void {\n        bridge.stop();\n      },\n      previousFrame(): void {\n        bridge.previousFrame();\n      },\n      nextFrame(): void {\n        bridge.nextFrame();\n      },\n      setEffect(\n        name: keyof Effects,\n        index: number,\n        options?: EffectOptions,\n      ): void {\n        bridge.setEffect(name, index, options);\n      },\n      encode(): void {\n        bridge.encode();\n      },\n      streamMasks(): void {\n        bridge.streamMasks();\n      },\n      abortStreamMasks(): Promise<void> {\n        return bridge.abortStreamMasks();\n      },\n      addEventListener<K extends keyof VideoWorkerEventMap>(\n        type: K,\n        listener: (ev: VideoWorkerEventMap[K]) => unknown,\n      ): void {\n        bridge.addEventListener(type, listener);\n      },\n      removeEventListener<K extends keyof VideoWorkerEventMap>(\n        type: K,\n        listener: (ev: VideoWorkerEventMap[K]) => unknown,\n      ): void {\n        bridge.removeEventListener(type, listener);\n      },\n      createFilmstrip(width: number, height: number): Promise<ImageBitmap> {\n        return bridge.createFilmstrip(width, height);\n      },\n      // Tracker\n      initializeTracker(name: keyof Trackers, options: TrackerOptions): void {\n        bridge.initializeTracker(name, options);\n      },\n      startSession(videoUrl: string): Promise<string | null> {\n        return bridge.startSession(videoUrl);\n      },\n      closeSession(): void {\n        bridge.closeSession();\n      },\n      logAnnotations(): void {\n        bridge.logAnnotations();\n      },\n      createTracklet(): Promise<BaseTracklet> {\n        return bridge.createTracklet();\n      },\n      deleteTracklet(trackletId: number): Promise<void> {\n        return bridge.deleteTracklet(trackletId);\n      },\n      updatePoints(trackletId: number, points: SegmentationPoint[]): void {\n        bridge.updatePoints(trackletId, points);\n      },\n      clearPointsInVideo(): Promise<boolean> {\n        return bridge.clearPointsInVideo();\n      },\n      getWorker_ONLY_USE_WITH_CAUTION() {\n        return bridge.getWorker_ONLY_USE_WITH_CAUTION();\n      },\n    }),\n    [bridge],\n  );\n\n  // Handle video playback events (get playback state to main thread)\n  useEffect(() => {\n    let isPlaying = false;\n\n    function onFocus() {\n      // Workaround for Safari where the video frame renders black on\n      // unknown events. Trigger re-render frame on focus.\n      if (!isPlaying) {\n        bridge.goToFrame(bridge.frame);\n      }\n    }\n\n    function onVisibilityChange() {\n      // Workaround for Safari where the video frame renders black on\n      // visibility change hidden. Returning to visible shows a black\n      // frame instead of rendering the current frame.\n      if (document.visibilityState === 'visible' && !isPlaying) {\n        bridge.goToFrame(bridge.frame);\n      }\n    }\n\n    function onError(event: ErrorEvent) {\n      const error = event.error;\n      Logger.error(error);\n      reportError(error);\n    }\n\n    function onPlay() {\n      isPlaying = true;\n      setIsPlaying(true);\n    }\n    function onPause() {\n      isPlaying = false;\n      setIsPlaying(false);\n    }\n\n    function onStreamingDone(event: StreamingStateUpdateEvent) {\n      // continue to play after streaming is done (state is \"full\")\n      if (event.state === 'full') {\n        bridge.play();\n      }\n    }\n\n    function onLoadStart() {\n      setIsVideoLoading(true);\n    }\n\n    function onDecodeStart() {\n      setIsVideoLoading(false);\n    }\n\n    window.addEventListener('focus', onFocus);\n    window.addEventListener('visibilitychange', onVisibilityChange);\n    bridge.addEventListener('error', onError);\n    bridge.addEventListener('play', onPlay);\n    bridge.addEventListener('pause', onPause);\n    bridge.addEventListener('streamingStateUpdate', onStreamingDone);\n    bridge.addEventListener('loadstart', onLoadStart);\n    bridge.addEventListener('decode', onDecodeStart);\n    return () => {\n      window.removeEventListener('focus', onFocus);\n      window.removeEventListener('visibilitychange', onVisibilityChange);\n      bridge.removeEventListener('error', onError);\n      bridge.removeEventListener('play', onPlay);\n      bridge.removeEventListener('pause', onPause);\n      bridge.removeEventListener('streamingStateUpdate', onStreamingDone);\n      bridge.removeEventListener('loadstart', onLoadStart);\n      bridge.removeEventListener('decode', onDecodeStart);\n    };\n  }, [bridge, reportError, setIsPlaying, setIsVideoLoading]);\n\n  return (\n    <div\n      {...stylex.props(containerStyle ?? styles.container)}\n      ref={resizeObserverRef}>\n      <div {...stylex.props(styles.canvasContainer)}>\n        {(isVideoLoading || loading) && <VideoLoadingOverlay />}\n        <canvas\n          ref={canvasRef}\n          {...stylex.props(canvasStyle)}\n          className=\"lg:rounded-[4px]\"\n          width={width}\n          height={height}\n          style={{\n            height: canvasHeight,\n          }}\n        />\n      </div>\n      {controls && (\n        <div {...stylex.props(styles.controls)}>\n          <Button\n            color=\"ghost\"\n            size=\"xs\"\n            startIcon={\n              isPlaying ? (\n                <PauseFilled\n                  {...stylex.props(styles.controlButton)}\n                  size={14}\n                />\n              ) : (\n                <PlayFilledAlt\n                  {...stylex.props(styles.controlButton)}\n                  size={14}\n                />\n              )\n            }\n            onClick={() => {\n              isPlaying ? bridge.pause() : bridge.play();\n            }}\n          />\n        </div>\n      )}\n    </div>\n  );\n});\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/VideoFilmstripWithPlayback.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport PlaybackButton from '@/common/components/button/PlaybackButton';\nimport VideoFilmstrip from '@/common/components/video/filmstrip/VideoFilmstrip';\nimport {spacing, w} from '@/theme/tokens.stylex';\nimport stylex from '@stylexjs/stylex';\n\nconst styles = stylex.create({\n  container: {\n    display: 'flex',\n    alignItems: 'end',\n    gap: spacing[4],\n    paddingHorizontal: spacing[4],\n    width: '100%',\n  },\n  playbackButtonContainer: {\n    display: 'flex',\n    justifyContent: 'center',\n    alignItems: 'center',\n    width: w[12],\n    height: w[12],\n  },\n  filmstripContainer: {\n    flexGrow: 1,\n  },\n});\n\nexport default function VideoFilmstripWithPlayback() {\n  return (\n    <div {...stylex.props(styles.container)}>\n      <div {...stylex.props(styles.playbackButtonContainer)}>\n        <PlaybackButton />\n      </div>\n      <div {...stylex.props(styles.filmstripContainer)}>\n        <VideoFilmstrip />\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/VideoLoadingOverlay.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {fontSize, fontWeight, spacing} from '@/theme/tokens.stylex';\nimport stylex from '@stylexjs/stylex';\nimport {Loading} from 'react-daisyui';\n\nconst styles = stylex.create({\n  overlay: {\n    position: 'absolute',\n    width: '100%',\n    height: '100%',\n    background: 'rgba(0,0,0,0.5)',\n  },\n  indicatorContainer: {\n    position: 'absolute',\n    top: '50%',\n    left: '50%',\n    transform: 'translate(-50%, -50%)',\n    display: 'flex',\n    alignItems: 'center',\n    gap: spacing[4],\n    color: 'white',\n  },\n  indicatorText: {\n    color: 'white',\n    fontSize: fontSize['sm'],\n    fontWeight: fontWeight['medium'],\n  },\n});\n\ntype Props = {\n  label?: string;\n};\n\nexport default function VideoLoadingOverlay({label}: Props) {\n  return (\n    <div {...stylex.props(styles.overlay)}>\n      <div {...stylex.props(styles.indicatorContainer)}>\n        <Loading size=\"sm\" />\n        <div {...stylex.props(styles.indicatorText)}>\n          {label ?? 'Loading video...'}\n        </div>\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/VideoWorker.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {registerSerializableConstructors} from '@/common/error/ErrorSerializationUtils';\nimport {Tracker} from '@/common/tracker/Tracker';\nimport {TrackerRequestMessageEvent} from '@/common/tracker/TrackerTypes';\nimport {TRACKER_MAPPING} from '@/common/tracker/Trackers';\nimport {serializeError} from 'serialize-error';\nimport VideoWorkerContext from './VideoWorkerContext';\nimport {\n  ErrorResponse,\n  VideoWorkerRequestMessageEvent,\n} from './VideoWorkerTypes';\n\nregisterSerializableConstructors();\n\nconst context = new VideoWorkerContext();\nlet tracker: Tracker | null = null;\n\nlet statsEnabled = false;\n\nself.addEventListener(\n  'message',\n  async (\n    event: VideoWorkerRequestMessageEvent | TrackerRequestMessageEvent,\n  ) => {\n    try {\n      switch (event.data.action) {\n        // Initialize context\n        case 'setCanvas':\n          context.setCanvas(event.data.canvas);\n          break;\n        case 'setSource':\n          context.setSource(event.data.source);\n          break;\n\n        // Playback\n        case 'play':\n          context.play();\n          break;\n        case 'pause':\n          context.pause();\n          break;\n        case 'stop':\n          context.stop();\n          break;\n        case 'frameUpdate':\n          context.goToFrame(event.data.index);\n          break;\n\n        // Filmstrip\n        case 'filmstrip': {\n          const {width, height} = event.data;\n          await context.createFilmstrip(width, height);\n          break;\n        }\n\n        // Effects\n        case 'setEffect': {\n          const {name, index, options} = event.data;\n          await context.setEffect(name, index, options);\n          break;\n        }\n\n        // Encode\n        case 'encode': {\n          await context.encode();\n          break;\n        }\n\n        case 'enableStats': {\n          statsEnabled = true;\n          context.enableStats();\n          tracker?.enableStats();\n          break;\n        }\n\n        // Tracker\n        case 'initializeTracker': {\n          const {name, options} = event.data;\n          const Tracker = TRACKER_MAPPING[name];\n          // Update the endpoint for the streaming API\n          tracker = new Tracker(context, options);\n          if (statsEnabled) {\n            tracker.enableStats();\n          }\n          break;\n        }\n        case 'startSession': {\n          const {videoUrl} = event.data;\n          await tracker?.startSession(videoUrl);\n          break;\n        }\n        case 'createTracklet':\n          tracker?.createTracklet();\n          break;\n        case 'deleteTracklet':\n          await tracker?.deleteTracklet(event.data.trackletId);\n          break;\n        case 'closeSession':\n          tracker?.closeSession();\n          break;\n        case 'updatePoints': {\n          const {frameIndex, objectId, points} = event.data;\n          context.allowEffectAnimation(true, objectId, points);\n          await tracker?.updatePoints(frameIndex, objectId, points);\n          break;\n        }\n        case 'clearPointsInFrame': {\n          const {frameIndex, objectId} = event.data;\n          await tracker?.clearPointsInFrame(frameIndex, objectId);\n          break;\n        }\n        case 'clearPointsInVideo':\n          await tracker?.clearPointsInVideo();\n          break;\n        case 'streamMasks': {\n          const {frameIndex} = event.data;\n          context.allowEffectAnimation(false);\n          await tracker?.streamMasks(frameIndex);\n          break;\n        }\n        case 'abortStreamMasks':\n          tracker?.abortStreamMasks();\n          break;\n      }\n    } catch (error) {\n      const serializedError = serializeError(error);\n      const errorResponse: ErrorResponse = {\n        action: 'error',\n        error: serializedError,\n      };\n      self.postMessage(errorResponse);\n    }\n  },\n);\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/VideoWorkerBridge.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {EffectIndex, Effects} from '@/common/components/video/effects/Effects';\nimport {registerSerializableConstructors} from '@/common/error/ErrorSerializationUtils';\nimport {\n  BaseTracklet,\n  SegmentationPoint,\n  StreamingState,\n} from '@/common/tracker/Tracker';\nimport {\n  AbortStreamMasksRequest,\n  AddPointsResponse,\n  ClearPointsInFrameRequest,\n  ClearPointsInVideoRequest,\n  ClearPointsInVideoResponse,\n  CloseSessionRequest,\n  CreateTrackletRequest,\n  DeleteTrackletRequest,\n  InitializeTrackerRequest,\n  LogAnnotationsRequest,\n  SessionStartFailedResponse,\n  SessionStartedResponse,\n  StartSessionRequest,\n  StreamMasksRequest,\n  StreamingStateUpdateResponse,\n  TrackerRequest,\n  TrackerResponseMessageEvent,\n  TrackletCreatedResponse,\n  TrackletDeletedResponse,\n  UpdatePointsRequest,\n} from '@/common/tracker/TrackerTypes';\nimport {TrackerOptions, Trackers} from '@/common/tracker/Trackers';\nimport {MP4ArrayBuffer} from 'mp4box';\nimport {deserializeError, type ErrorObject} from 'serialize-error';\nimport {EventEmitter} from './EventEmitter';\nimport {\n  EncodeVideoRequest,\n  FilmstripRequest,\n  FilmstripResponse,\n  FrameUpdateRequest,\n  PauseRequest,\n  PlayRequest,\n  SetCanvasRequest,\n  SetEffectRequest,\n  SetSourceRequest,\n  StopRequest,\n  VideoWorkerRequest,\n  VideoWorkerResponseMessageEvent,\n} from './VideoWorkerTypes';\nimport {EffectOptions} from './effects/Effect';\n\nregisterSerializableConstructors();\n\nexport type DecodeEvent = {\n  totalFrames: number;\n  numFrames: number;\n  fps: number;\n  width: number;\n  height: number;\n  done: boolean;\n};\n\nexport type LoadStartEvent = unknown;\n\nexport type EffectUpdateEvent = {\n  name: keyof Effects;\n  index: EffectIndex;\n  variant: number;\n  numVariants: number;\n};\n\nexport type EncodingStateUpdateEvent = {\n  progress: number;\n};\n\nexport type EncodingCompletedEvent = {\n  file: MP4ArrayBuffer;\n};\n\nexport interface PlayEvent {}\n\nexport interface PauseEvent {}\n\nexport interface FilmstripEvent {\n  filmstrip: ImageBitmap;\n}\n\nexport interface FrameUpdateEvent {\n  index: number;\n}\n\nexport interface SessionStartedEvent {\n  sessionId: string;\n}\n\nexport interface SessionStartFailedEvent {}\n\nexport interface TrackletCreatedEvent {\n  // Do not send masks between workers and main thread because they are huge,\n  // and sending them would eventually slow down the main thread.\n  tracklet: BaseTracklet;\n}\n\nexport interface TrackletsEvent {\n  // Do not send masks between workers and main thread because they are huge,\n  // and sending them would eventually slow down the main thread.\n  tracklets: BaseTracklet[];\n}\n\nexport interface TrackletDeletedEvent {\n  isSuccessful: boolean;\n}\n\nexport interface AddPointsEvent {\n  isSuccessful: boolean;\n}\n\nexport interface ClearPointsInVideoEvent {\n  isSuccessful: boolean;\n}\n\nexport interface StreamingStartedEvent {}\n\nexport interface StreamingCompletedEvent {}\n\nexport interface StreamingStateUpdateEvent {\n  state: StreamingState;\n}\n\nexport interface RenderingErrorEvent {\n  error: ErrorObject;\n}\n\nexport interface VideoWorkerEventMap {\n  error: ErrorEvent;\n  decode: DecodeEvent;\n  encodingStateUpdate: EncodingStateUpdateEvent;\n  encodingCompleted: EncodingCompletedEvent;\n  play: PlayEvent;\n  pause: PauseEvent;\n  filmstrip: FilmstripEvent;\n  frameUpdate: FrameUpdateEvent;\n  sessionStarted: SessionStartedEvent;\n  sessionStartFailed: SessionStartFailedEvent;\n  trackletCreated: TrackletCreatedEvent;\n  trackletsUpdated: TrackletsEvent;\n  trackletDeleted: TrackletDeletedEvent;\n  addPoints: AddPointsEvent;\n  clearPointsInVideo: ClearPointsInVideoEvent;\n  streamingStarted: StreamingStartedEvent;\n  streamingCompleted: StreamingCompletedEvent;\n  streamingStateUpdate: StreamingStateUpdateEvent;\n  // HTMLVideoElement events https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#events\n  loadstart: LoadStartEvent;\n  effectUpdate: EffectUpdateEvent;\n  renderingError: RenderingErrorEvent;\n}\n\ntype Metadata = {\n  totalFrames: number;\n  fps: number;\n  width: number;\n  height: number;\n};\n\nexport default class VideoWorkerBridge extends EventEmitter<VideoWorkerEventMap> {\n  static create(workerFactory: () => Worker) {\n    const worker = workerFactory();\n    return new VideoWorkerBridge(worker);\n  }\n\n  protected worker: Worker;\n  private metadata: Metadata | null = null;\n  private frameIndex: number = 0;\n\n  private _sessionId: string | null = null;\n\n  public get sessionId() {\n    return this._sessionId;\n  }\n\n  public get width() {\n    return this.metadata?.width ?? 0;\n  }\n\n  public get height() {\n    return this.metadata?.height ?? 0;\n  }\n\n  public get numberOfFrames() {\n    return this.metadata?.totalFrames ?? 0;\n  }\n\n  public get fps() {\n    return this.metadata?.fps ?? 0;\n  }\n\n  public get frame() {\n    return this.frameIndex;\n  }\n\n  constructor(worker: Worker) {\n    super();\n    this.worker = worker;\n\n    worker.addEventListener(\n      'message',\n      (\n        event: VideoWorkerResponseMessageEvent | TrackerResponseMessageEvent,\n      ) => {\n        switch (event.data.action) {\n          case 'error':\n            // Deserialize error before triggering the event\n            event.data.error = deserializeError(event.data.error);\n            break;\n          case 'decode':\n            this.metadata = event.data;\n            break;\n          case 'frameUpdate':\n            this.frameIndex = event.data.index;\n            break;\n          case 'sessionStarted':\n            this._sessionId = event.data.sessionId;\n            break;\n        }\n        this.trigger(event.data.action, event.data);\n      },\n    );\n  }\n\n  public setCanvas(canvas: HTMLCanvasElement): void {\n    const offscreenCanvas = canvas.transferControlToOffscreen();\n    this.sendRequest<SetCanvasRequest>(\n      'setCanvas',\n      {\n        canvas: offscreenCanvas,\n      },\n      [offscreenCanvas],\n    );\n  }\n\n  public setSource(source: string): void {\n    this.sendRequest<SetSourceRequest>('setSource', {\n      source,\n    });\n  }\n\n  public terminate(): void {\n    super.destroy();\n    this.worker.terminate();\n  }\n\n  public play(): void {\n    this.sendRequest<PlayRequest>('play');\n  }\n\n  public pause(): void {\n    this.sendRequest<PauseRequest>('pause');\n  }\n\n  public stop(): void {\n    this.sendRequest<StopRequest>('stop');\n  }\n\n  public goToFrame(index: number): void {\n    this.sendRequest<FrameUpdateRequest>('frameUpdate', {\n      index,\n    });\n  }\n\n  public previousFrame(): void {\n    const index = Math.max(0, this.frameIndex - 1);\n    this.goToFrame(index);\n  }\n\n  public nextFrame(): void {\n    const index = Math.min(this.frameIndex + 1, this.numberOfFrames - 1);\n    this.goToFrame(index);\n  }\n\n  public set frame(index: number) {\n    this.sendRequest<FrameUpdateRequest>('frameUpdate', {index});\n  }\n\n  createFilmstrip(width: number, height: number): Promise<ImageBitmap> {\n    return new Promise((resolve, _reject) => {\n      const handleFilmstripResponse = (\n        event: MessageEvent<FilmstripResponse>,\n      ) => {\n        if (event.data.action === 'filmstrip') {\n          this.worker.removeEventListener('message', handleFilmstripResponse);\n          resolve(event.data.filmstrip);\n        }\n      };\n\n      this.worker.addEventListener('message', handleFilmstripResponse);\n\n      this.sendRequest<FilmstripRequest>('filmstrip', {\n        width,\n        height,\n      });\n    });\n  }\n\n  setEffect(name: keyof Effects, index: EffectIndex, options?: EffectOptions) {\n    this.sendRequest<SetEffectRequest>('setEffect', {\n      name,\n      index,\n      options,\n    });\n  }\n\n  encode(): void {\n    this.sendRequest<EncodeVideoRequest>('encode');\n  }\n\n  initializeTracker(name: keyof Trackers, options: TrackerOptions): void {\n    this.sendRequest<InitializeTrackerRequest>('initializeTracker', {\n      name,\n      options,\n    });\n  }\n\n  startSession(videoUrl: string): Promise<string | null> {\n    return new Promise(resolve => {\n      const handleResponse = (\n        event: MessageEvent<\n          SessionStartedResponse | SessionStartFailedResponse\n        >,\n      ) => {\n        if (event.data.action === 'sessionStarted') {\n          this.worker.removeEventListener('message', handleResponse);\n          resolve(event.data.sessionId);\n        }\n        if (event.data.action === 'sessionStartFailed') {\n          this.worker.removeEventListener('message', handleResponse);\n          resolve(null);\n        }\n      };\n\n      this.worker.addEventListener('message', handleResponse);\n      this.sendRequest<StartSessionRequest>('startSession', {\n        videoUrl,\n      });\n    });\n  }\n\n  closeSession(): void {\n    this.sendRequest<CloseSessionRequest>('closeSession');\n  }\n\n  logAnnotations(): void {\n    this.sendRequest<LogAnnotationsRequest>('logAnnotations');\n  }\n\n  createTracklet(): Promise<BaseTracklet> {\n    return new Promise(resolve => {\n      const handleResponse = (event: MessageEvent<TrackletCreatedResponse>) => {\n        if (event.data.action === 'trackletCreated') {\n          this.worker.removeEventListener('message', handleResponse);\n          resolve(event.data.tracklet);\n        }\n      };\n\n      this.worker.addEventListener('message', handleResponse);\n\n      this.sendRequest<CreateTrackletRequest>('createTracklet');\n    });\n  }\n\n  deleteTracklet(trackletId: number): Promise<void> {\n    return new Promise((resolve, reject) => {\n      const handleResponse = (event: MessageEvent<TrackletDeletedResponse>) => {\n        if (event.data.action === 'trackletDeleted') {\n          this.worker.removeEventListener('message', handleResponse);\n          if (event.data.isSuccessful) {\n            resolve();\n          } else {\n            reject(`could not delete tracklet ${trackletId}`);\n          }\n        }\n      };\n      this.worker.addEventListener('message', handleResponse);\n      this.sendRequest<DeleteTrackletRequest>('deleteTracklet', {trackletId});\n    });\n  }\n\n  updatePoints(\n    objectId: number,\n    points: SegmentationPoint[],\n  ): Promise<boolean> {\n    return new Promise(resolve => {\n      const handleResponse = (event: MessageEvent<AddPointsResponse>) => {\n        if (event.data.action === 'addPoints') {\n          this.worker.removeEventListener('message', handleResponse);\n          resolve(event.data.isSuccessful);\n        }\n      };\n\n      this.worker.addEventListener('message', handleResponse);\n\n      this.sendRequest<UpdatePointsRequest>('updatePoints', {\n        frameIndex: this.frame,\n        objectId,\n        points,\n      });\n    });\n  }\n\n  clearPointsInFrame(objectId: number) {\n    this.sendRequest<ClearPointsInFrameRequest>('clearPointsInFrame', {\n      frameIndex: this.frame,\n      objectId,\n    });\n  }\n\n  clearPointsInVideo(): Promise<boolean> {\n    return new Promise(resolve => {\n      const handleResponse = (\n        event: MessageEvent<ClearPointsInVideoResponse>,\n      ) => {\n        if (event.data.action === 'clearPointsInVideo') {\n          this.worker.removeEventListener('message', handleResponse);\n          resolve(event.data.isSuccessful);\n        }\n      };\n      this.worker.addEventListener('message', handleResponse);\n      this.sendRequest<ClearPointsInVideoRequest>('clearPointsInVideo');\n    });\n  }\n\n  streamMasks(): void {\n    this.sendRequest<StreamMasksRequest>('streamMasks', {\n      frameIndex: this.frame,\n    });\n  }\n\n  abortStreamMasks(): Promise<void> {\n    return new Promise(resolve => {\n      const handleAbortResponse = (\n        event: MessageEvent<StreamingStateUpdateResponse>,\n      ) => {\n        if (\n          event.data.action === 'streamingStateUpdate' &&\n          event.data.state === 'aborted'\n        ) {\n          this.worker.removeEventListener('message', handleAbortResponse);\n          resolve();\n        }\n      };\n\n      this.worker.addEventListener('message', handleAbortResponse);\n      this.sendRequest<AbortStreamMasksRequest>('abortStreamMasks');\n    });\n  }\n\n  getWorker_ONLY_USE_WITH_CAUTION(): Worker {\n    return this.worker;\n  }\n\n  /**\n   * Convenient function to have typed postMessage.\n   *\n   * @param action Video worker action\n   * @param message Actual payload\n   * @param transfer Any object that should be transferred instead of cloned\n   */\n  protected sendRequest<T extends VideoWorkerRequest | TrackerRequest>(\n    action: T['action'],\n    payload?: Omit<T, 'action'>,\n    transfer?: Transferable[],\n  ) {\n    this.worker.postMessage(\n      {\n        action,\n        ...payload,\n      },\n      {\n        transfer,\n      },\n    );\n  }\n\n  // // Override EventEmitter\n\n  // addEventListener<K extends keyof WorkerEventMap>(\n  //   type: K,\n  //   listener: (ev: WorkerEventMap[K]) => unknown,\n  // ): void {\n  //   switch (type) {\n  //     case 'frameUpdate':\n  //       {\n  //         const event: FrameUpdateEvent = {\n  //           index: this.frameIndex,\n  //         };\n  //         // @ts-expect-error Incorrect typing. Not sure how to correctly type it\n  //         listener(event);\n  //       }\n  //       break;\n  //     case 'sessionStarted': {\n  //       if (this.sessionId !== null) {\n  //         const event: SessionStartedEvent = {\n  //           sessionId: this.sessionId,\n  //         };\n  //         // @ts-expect-error Incorrect typing. Not sure how to correctly type it\n  //         listener(event);\n  //       }\n  //     }\n  //   }\n  //   super.addEventListener(type, listener);\n  // }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/VideoWorkerContext.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n  DecodedVideo,\n  ImageFrame,\n  decodeStream,\n} from '@/common/codecs/VideoDecoder';\nimport {encode as encodeVideo} from '@/common/codecs/VideoEncoder';\nimport {\n  Effect,\n  EffectActionPoint,\n  EffectFrameContext,\n  EffectOptions,\n} from '@/common/components/video/effects/Effect';\nimport AllEffects, {\n  EffectIndex,\n  Effects,\n} from '@/common/components/video/effects/Effects';\nimport Logger from '@/common/logger/Logger';\nimport {Mask, SegmentationPoint, Tracklet} from '@/common/tracker/Tracker';\nimport {streamFile} from '@/common/utils/FileUtils';\nimport {Stats} from '@/debug/stats/Stats';\nimport {VIDEO_WATERMARK_TEXT} from '@/demo/DemoConfig';\nimport CreateFilmstripError from '@/graphql/errors/CreateFilmstripError';\nimport DrawFrameError from '@/graphql/errors/DrawFrameError';\nimport WebGLContextError from '@/graphql/errors/WebGLContextError';\nimport {RLEObject} from '@/jscocotools/mask';\nimport invariant from 'invariant';\nimport {CanvasForm} from 'pts';\nimport {serializeError} from 'serialize-error';\nimport {\n  DecodeResponse,\n  EffectUpdateResponse,\n  EncodingCompletedResponse,\n  EncodingStateUpdateResponse,\n  FilmstripResponse,\n  FrameUpdateResponse,\n  PauseRequest,\n  PlayRequest,\n  RenderingErrorResponse,\n  VideoWorkerResponse,\n} from './VideoWorkerTypes';\n\nfunction getEvenlySpacedItems(decodedVideo: DecodedVideo, x: number) {\n  const p = Math.floor(decodedVideo.numFrames / Math.max(1, x - 1));\n  const middleFrames = decodedVideo.frames\n    .slice(p, p * x)\n    .filter(function (_, i) {\n      return 0 == i % p;\n    });\n  return [\n    decodedVideo.frames[0],\n    ...middleFrames,\n    decodedVideo.frames[decodedVideo.numFrames - 1],\n  ];\n}\n\nexport type FrameInfo = {\n  tracklet: Tracklet;\n  mask: Mask;\n};\n\nconst WATERMARK_BOX_HORIZONTAL_PADDING = 10;\nconst WATERMARK_BOX_VERTICAL_PADDING = 10;\n\nexport type VideoStats = {\n  fps?: Stats;\n  videoFps?: Stats;\n  total?: Stats;\n  effect0?: Stats;\n  effect1?: Stats;\n  frameBmp?: Stats;\n  maskBmp?: Stats;\n  memory?: Stats;\n};\n\nexport default class VideoWorkerContext {\n  private _canvas: OffscreenCanvas | null = null;\n  private _stats: VideoStats = {};\n  private _ctx: OffscreenCanvasRenderingContext2D | null = null;\n  private _form: CanvasForm | null = null;\n  private _decodedVideo: DecodedVideo | null = null;\n  private _frameIndex: number = 0;\n  private _isPlaying: boolean = false;\n  private _playbackRAFHandle: number | null = null;\n  private _playbackTimeoutHandle: NodeJS.Timeout | null = null;\n  private _isDrawing: boolean = false;\n  private _glObjects: WebGL2RenderingContext | null = null;\n  private _glBackground: WebGL2RenderingContext | null = null;\n  private _canvasHighlights: OffscreenCanvas | null = null;\n  private _canvasBackground: OffscreenCanvas | null = null;\n  private _allowAnimation: boolean = false;\n  private _currentSegmetationPoint: EffectActionPoint | null = null;\n\n  private _effects: Effect[];\n  private _tracklets: Tracklet[] = [];\n\n  public get width(): number {\n    return this._decodedVideo?.width ?? 0;\n  }\n\n  public get height(): number {\n    return this._decodedVideo?.height ?? 0;\n  }\n\n  public get frameIndex(): number {\n    return this._frameIndex;\n  }\n\n  public get currentFrame(): VideoFrame | null {\n    return this._decodedVideo?.frames[this._frameIndex].bitmap ?? null;\n  }\n\n  constructor() {\n    this._effects = [\n      AllEffects.Original, // Image as background\n      AllEffects.Overlay, // Masks on top\n    ];\n\n    // Loading watermark fonts. This is going to be async, but by the time of\n    // video encoding, the fonts should be available.\n    this._loadWatermarkFonts();\n  }\n\n  private initializeWebGLContext(width: number, height: number): void {\n    // Given that we use highlight and background effects as layers,\n    // we need to create two WebGL contexts, one for each set.\n    // To avoid memory leaks and too many active contexts,\n    // these contexts must be re-used over the lifecycle of the session.\n\n    if (this._canvasHighlights == null && this._glObjects == null) {\n      this._canvasHighlights = new OffscreenCanvas(width, height);\n      this._glObjects = this._canvasHighlights.getContext('webgl2');\n\n      this._canvasHighlights.addEventListener(\n        'webglcontextlost',\n        event => {\n          event.preventDefault();\n          this._sendRenderingError(\n            new WebGLContextError('WebGL context lost.'),\n          );\n        },\n        false,\n      );\n    } else if (\n      this._canvasHighlights != null &&\n      (this._canvasHighlights.width !== width ||\n        this._canvasHighlights.height !== height)\n    ) {\n      // Resize canvas and webgl viewport\n      this._canvasHighlights.width = width;\n      this._canvasHighlights.height = height;\n      if (this._glObjects != null) {\n        this._glObjects.viewport(0, 0, width, height);\n      }\n    }\n\n    if (this._canvasBackground == null && this._glBackground == null) {\n      this._canvasBackground = new OffscreenCanvas(width, height);\n      this._glBackground = this._canvasBackground.getContext('webgl2');\n\n      this._canvasBackground.addEventListener(\n        'webglcontextlost',\n        event => {\n          event.preventDefault();\n          this._sendRenderingError(\n            new WebGLContextError('WebGL context lost.'),\n          );\n        },\n        false,\n      );\n    } else if (\n      this._canvasBackground != null &&\n      (this._canvasBackground.width != width ||\n        this._canvasBackground.height != height)\n    ) {\n      // Resize canvas and webgl viewport\n      this._canvasBackground.width = width;\n      this._canvasBackground.height = height;\n      if (this._glBackground != null) {\n        this._glBackground.viewport(0, 0, width, height);\n      }\n    }\n  }\n\n  public setCanvas(canvas: OffscreenCanvas) {\n    this._canvas = canvas;\n    this._ctx = canvas.getContext('2d');\n    if (this._ctx == null) {\n      throw new Error('could not initialize drawing context');\n    }\n    this._form = new CanvasForm(this._ctx);\n  }\n\n  public setSource(src: string) {\n    this.close();\n\n    // Clear state of previous source.\n    this.updateFrameIndex(0);\n    this._tracklets = [];\n\n    this._decodeVideo(src);\n  }\n\n  public goToFrame(index: number): void {\n    // Cancel any ongoing render\n    this._cancelRender();\n    this.updateFrameIndex(index);\n    this._playbackRAFHandle = requestAnimationFrame(this._drawFrame.bind(this));\n  }\n\n  public play(): void {\n    // Video already playing\n    if (this._isPlaying) {\n      return;\n    }\n\n    // Cannot playback without frames\n    if (this._decodedVideo === null) {\n      throw new Error('no decoded video');\n    }\n\n    const {numFrames, fps} = this._decodedVideo;\n    const timePerFrame = 1000 / (fps ?? 30);\n    let startTime: number | null = null;\n    // The offset frame index compensate for cases where the video playback\n    // does not start at frame index 0.\n    const offsetFrameIndex = this._frameIndex;\n\n    const updateFrame = (time: number) => {\n      if (startTime === null) {\n        startTime = time;\n      }\n\n      this._stats.fps?.begin();\n\n      const diff = time - startTime;\n      const expectedFrame =\n        (Math.floor(diff / timePerFrame) + offsetFrameIndex) % numFrames;\n\n      if (this._frameIndex !== expectedFrame && !this._isDrawing) {\n        // Update to the next expected frame\n        this.updateFrameIndex(expectedFrame);\n        this._drawFrame();\n      }\n\n      this._playbackRAFHandle = requestAnimationFrame(updateFrame);\n\n      this._stats.fps?.end();\n    };\n\n    this.updatePlayback(true);\n    this._playbackRAFHandle = requestAnimationFrame(updateFrame);\n  }\n\n  public pause(): void {\n    this.updatePlayback(false);\n    this._cancelRender();\n  }\n\n  public stop(): void {\n    this.pause();\n    this.updateFrameIndex(0);\n  }\n\n  public async createFilmstrip(width: number, height: number): Promise<void> {\n    if (width < 1 || height < 1) {\n      Logger.warn(\n        `Cannot create filmstrip because width ${width} or height ${height} is too small.`,\n      );\n      return;\n    }\n\n    try {\n      const canvas = new OffscreenCanvas(width, height);\n      const ctx = canvas.getContext('2d');\n\n      if (this._decodedVideo !== null) {\n        const scale = canvas.height / this._decodedVideo.height;\n        const resizeWidth = this._decodedVideo.width * scale;\n\n        const spacedFrames = getEvenlySpacedItems(\n          this._decodedVideo,\n          Math.ceil(canvas.width / resizeWidth),\n        );\n\n        spacedFrames.forEach((frame, idx) => {\n          if (frame != null) {\n            ctx?.drawImage(\n              frame.bitmap,\n              resizeWidth * idx,\n              0,\n              resizeWidth,\n              canvas.height,\n            );\n          }\n        });\n      }\n\n      const filmstrip = await createImageBitmap(canvas);\n\n      this.sendResponse<FilmstripResponse>(\n        'filmstrip',\n        {\n          filmstrip,\n        },\n        [filmstrip],\n      );\n    } catch {\n      this._sendRenderingError(\n        new CreateFilmstripError('Failed to create filmstrip'),\n      );\n    }\n  }\n\n  public async setEffect(\n    name: keyof Effects,\n    index: EffectIndex,\n    options?: EffectOptions,\n  ): Promise<void> {\n    const effect: Effect = AllEffects[name];\n\n    // The effect has changed.\n    if (this._effects[index] !== effect) {\n      // Effect changed. Cleanup old effect first. Effects are responsible for\n      // cleaning up their memory.\n      await this._effects[index].cleanup();\n\n      const offCanvas =\n        index === EffectIndex.BACKGROUND\n          ? this._canvasBackground\n          : this._canvasHighlights;\n      invariant(offCanvas != null, 'need OffscreenCanvas to render effects');\n      const webglContext =\n        index === EffectIndex.BACKGROUND ? this._glBackground : this._glObjects;\n      invariant(webglContext != null, 'need WebGL context to render effects');\n\n      // Initialize the effect. This can be used by effects to prepare\n      // resources needed for rendering. If the video wasn't decoded yet, the\n      // effect setup will happen in the _decodeVideo function.\n      if (this._decodedVideo != null) {\n        await effect.setup({\n          width: this._decodedVideo.width,\n          height: this._decodedVideo.height,\n          canvas: offCanvas,\n          gl: webglContext,\n        });\n      }\n    }\n\n    // Update effect if already set effect was clicked again. This can happen\n    // when there is a new variant of the effect.\n    if (options != null) {\n      // Update effect if already set effect was clicked again. This can happen\n      // when there is a new variant of the effect.\n      await effect.update(options);\n    }\n\n    // Notify the frontend about the effect state including its variant.\n    this.sendResponse<EffectUpdateResponse>('effectUpdate', {\n      name,\n      index,\n      variant: effect.variant,\n      numVariants: effect.numVariants,\n    });\n\n    this._effects[index] = effect;\n    this._playbackRAFHandle = requestAnimationFrame(this._drawFrame.bind(this));\n  }\n\n  async encode() {\n    const decodedVideo = this._decodedVideo;\n    invariant(\n      decodedVideo !== null,\n      'cannot encode video because there is no decoded video available',\n    );\n\n    const canvas = new OffscreenCanvas(this.width, this.height);\n    const ctx = canvas.getContext('2d', {willReadFrequently: true});\n    invariant(\n      ctx !== null,\n      'cannot encode video because failed to construct offscreen canvas context',\n    );\n\n    const form = new CanvasForm(ctx);\n\n    const file = await encodeVideo(\n      this.width,\n      this.height,\n      decodedVideo.frames.length,\n      this._framesGenerator(decodedVideo, canvas, form),\n      progress => {\n        this.sendResponse<EncodingStateUpdateResponse>('encodingStateUpdate', {\n          progress,\n        });\n      },\n    );\n    this.sendResponse<EncodingCompletedResponse>(\n      'encodingCompleted',\n      {\n        file,\n      },\n      [file],\n    );\n  }\n\n  private async *_framesGenerator(\n    decodedVideo: DecodedVideo,\n    canvas: OffscreenCanvas,\n    form: CanvasForm,\n  ): AsyncGenerator<ImageFrame, undefined> {\n    const frames = decodedVideo.frames;\n\n    for (let frameIndex = 0; frameIndex < frames.length; ++frameIndex) {\n      await this._drawFrameImpl(form, frameIndex, true);\n\n      const frame = frames[frameIndex];\n      const videoFrame = new VideoFrame(canvas, {\n        timestamp: frame.bitmap.timestamp,\n      });\n\n      yield {\n        bitmap: videoFrame,\n        timestamp: frame.timestamp,\n        duration: frame.duration,\n      };\n\n      videoFrame.close();\n    }\n  }\n\n  public enableStats() {\n    this._stats.fps = new Stats('fps');\n    this._stats.videoFps = new Stats('fps', 'V');\n    this._stats.total = new Stats('ms', 'T');\n    this._stats.effect0 = new Stats('ms', 'B');\n    this._stats.effect1 = new Stats('ms', 'H');\n    this._stats.frameBmp = new Stats('ms', 'F');\n    this._stats.maskBmp = new Stats('ms', 'M');\n    this._stats.memory = new Stats('memory');\n  }\n\n  public allowEffectAnimation(\n    allow: boolean = true,\n    objectId?: number,\n    points?: SegmentationPoint[],\n  ) {\n    if (objectId != null && points != null && points.length) {\n      const last_point_position = points[points.length - 1];\n      this._currentSegmetationPoint = {\n        objectId,\n        position: [last_point_position[0], last_point_position[1]],\n      };\n    }\n\n    if (!allow) {\n      this._currentSegmetationPoint = null;\n    }\n\n    this._allowAnimation = allow;\n  }\n\n  public close(): void {\n    // Clear any frame content\n    this._ctx?.reset();\n\n    // Close frames of previously decoded video.\n    this._decodedVideo?.frames.forEach(f => f.bitmap.close());\n    this._decodedVideo = null;\n  }\n\n  // TRACKER\n\n  public updateTracklets(\n    frameIndex: number,\n    tracklets: Tracklet[],\n    shouldGoToFrame: boolean = true,\n  ): void {\n    this._tracklets = tracklets;\n    if (shouldGoToFrame) {\n      this.goToFrame(frameIndex);\n    }\n  }\n\n  public clearTrackletMasks(tracklet: Tracklet): void {\n    this._tracklets = this._tracklets.filter(t => t.id != tracklet.id);\n  }\n\n  public clearMasks(): void {\n    this._tracklets = [];\n  }\n\n  // PRIVATE FUNCTIONS\n\n  private sendResponse<T extends VideoWorkerResponse>(\n    action: T['action'],\n    message?: Omit<T, 'action'>,\n    transfer?: Transferable[],\n  ): void {\n    self.postMessage(\n      {\n        action,\n        ...message,\n      },\n      {\n        transfer,\n      },\n    );\n  }\n\n  private async _decodeVideo(src: string): Promise<void> {\n    const canvas = this._canvas;\n    invariant(canvas != null, 'need canvas to render decoded video');\n\n    this.sendResponse('loadstart');\n\n    const fileStream = streamFile(src, {\n      credentials: 'same-origin',\n      cache: 'no-store',\n    });\n\n    let renderedFirstFrame = false;\n    this._decodedVideo = await decodeStream(fileStream, async progress => {\n      const {fps, height, width, numFrames, frames} = progress;\n      this._decodedVideo = progress;\n      if (!renderedFirstFrame) {\n        renderedFirstFrame = true;\n        canvas.width = width;\n        canvas.height = height;\n        // Set WebGL contexts right after the first frame decoded\n        this.initializeWebGLContext(width, height);\n\n        // Initialize effect once first frame was decoded.\n        for (const [i, effect] of this._effects.entries()) {\n          const offCanvas =\n            i === EffectIndex.BACKGROUND\n              ? this._canvasBackground\n              : this._canvasHighlights;\n          invariant(offCanvas != null, 'need canvas to render effects');\n          const webglContext =\n            i === EffectIndex.BACKGROUND ? this._glBackground : this._glObjects;\n          invariant(\n            webglContext != null,\n            'need WebGL context to render effects',\n          );\n          await effect.setup({\n            width,\n            height,\n            canvas: offCanvas,\n            gl: webglContext,\n          });\n        }\n\n        // Need to render frame immediately. Cannot go through\n        // requestAnimationFrame because then rendering this frame would be\n        // delayed until the full video has finished decoding.\n        this._drawFrame();\n\n        this._stats.videoFps?.updateMaxValue(fps);\n        this._stats.total?.updateMaxValue(1000 / fps);\n        this._stats.effect0?.updateMaxValue(1000 / fps);\n        this._stats.effect1?.updateMaxValue(1000 / fps);\n        this._stats.frameBmp?.updateMaxValue(1000 / fps);\n        this._stats.maskBmp?.updateMaxValue(1000 / fps);\n      }\n      this.sendResponse<DecodeResponse>('decode', {\n        totalFrames: numFrames,\n        numFrames: frames.length,\n        fps: fps,\n        width: width,\n        height: height,\n        done: false,\n      });\n    });\n\n    if (!renderedFirstFrame) {\n      canvas.width = this._decodedVideo.width;\n      canvas.height = this._decodedVideo.height;\n      this._drawFrame();\n    }\n\n    this.sendResponse<DecodeResponse>('decode', {\n      totalFrames: this._decodedVideo.numFrames,\n      numFrames: this._decodedVideo.frames.length,\n      fps: this._decodedVideo.fps,\n      width: this._decodedVideo.width,\n      height: this._decodedVideo.height,\n      done: true,\n    });\n  }\n\n  private _drawFrame(): void {\n    if (this._canvas !== null && this._form !== null) {\n      this._drawFrameImpl(this._form, this._frameIndex);\n    }\n  }\n\n  private async _drawFrameImpl(\n    form: CanvasForm,\n    frameIndex: number,\n    enableWatermark: boolean = false,\n    step: number = 0,\n    maxSteps: number = 40,\n  ): Promise<void> {\n    if (this._decodedVideo === null) {\n      return;\n    }\n\n    {\n      this._stats.videoFps?.begin();\n      this._stats.total?.begin();\n      this._stats.memory?.begin();\n    }\n\n    try {\n      const frame = this._decodedVideo.frames[frameIndex];\n      const {bitmap} = frame;\n\n      this._stats.frameBmp?.begin();\n\n      // Need to convert VideoFrame to ImageBitmap because Safari can only apply\n      // globalCompositeOperation on ImageBitmap and fails on VideoFrame. FWIW,\n      // Chrome treats VideoFrame similarly to ImageBitmap.\n      const frameBitmap = await createImageBitmap(bitmap);\n\n      this._stats.frameBmp?.end();\n\n      const masks: Mask[] = [];\n      const colors: string[] = [];\n      const tracklets: Tracklet[] = [];\n      this._tracklets.forEach(tracklet => {\n        const mask = tracklet.masks[frameIndex];\n        if (mask != null) {\n          masks.push(mask);\n          tracklets.push(tracklet);\n          colors.push(tracklet.color);\n        }\n      });\n      const effectActionPoint = this._currentSegmetationPoint;\n\n      this._stats.maskBmp?.begin();\n\n      const effectMaskPromises = masks.map(async ({data, bounds}) => {\n        return {\n          bounds,\n          bitmap: data as RLEObject,\n        };\n      });\n      const effectMasks = await Promise.all(effectMaskPromises);\n\n      this._stats.maskBmp?.end();\n\n      form.ctx.fillStyle = 'rgba(0, 0, 0, 0)';\n      form.ctx.fillRect(0, 0, this.width, this.height);\n\n      const effectParams: EffectFrameContext = {\n        frame: frameBitmap,\n        masks: effectMasks,\n        maskColors: colors,\n        frameIndex: frameIndex,\n        totalFrames: this._decodedVideo.frames.length,\n        fps: this._decodedVideo.fps,\n        width: frameBitmap.width,\n        height: frameBitmap.height,\n        actionPoint: null,\n      };\n\n      // Allows animation within a single frame.\n      if (this._allowAnimation && step < maxSteps) {\n        const animationDuration = 2; // Total duration of the animation in seconds\n        const progress = step / maxSteps;\n        const timeParameter = progress * animationDuration;\n        // Pass dynamic effect params\n        effectParams.timeParameter = timeParameter;\n        effectParams.actionPoint = effectActionPoint;\n\n        this._processEffects(form, effectParams, tracklets);\n\n        // Use RAF to draw frame, and update the display,\n        // this avoids to wait until the javascript call stack is cleared.\n        requestAnimationFrame(() =>\n          this._drawFrameImpl(form, frameIndex, false, step + 1, maxSteps),\n        );\n      } else {\n        this._processEffects(form, effectParams, tracklets);\n      }\n\n      if (enableWatermark) {\n        this._drawWatermark(form, frameBitmap);\n      }\n\n      // Do not simply drop the JavaScript reference to the ImageBitmap; doing so\n      // will keep its graphics resource alive until the next time the garbage\n      // collector runs.\n      frameBitmap.close();\n\n      {\n        this._stats.videoFps?.end();\n        this._stats.total?.end();\n        this._stats.memory?.end();\n      }\n\n      this._isDrawing = false;\n    } catch {\n      this._sendRenderingError(new DrawFrameError('Failed to draw frame'));\n    }\n  }\n\n  private _drawWatermark(form: CanvasForm, frameBitmap: ImageBitmap): void {\n    const frameWidth = this._canvas?.width || frameBitmap.width;\n    const frameHeight = this._canvas?.height || frameBitmap.height;\n    // Font size is either 12 or smaller based on available width\n    // since the font is not monospaced, we approximate it'll fit 1.5 more characters than monospaced\n    const approximateFontSize = Math.min(\n      Math.floor(frameWidth / (VIDEO_WATERMARK_TEXT.length / 1.5)),\n      12,\n    );\n\n    form.ctx.font = `${approximateFontSize}px \"Inter\", sans-serif`;\n    const measureGeneratedBy = form.ctx.measureText(VIDEO_WATERMARK_TEXT);\n\n    const textBoxWidth =\n      measureGeneratedBy.width + 2 * WATERMARK_BOX_HORIZONTAL_PADDING;\n    const textBoxHeight =\n      measureGeneratedBy.actualBoundingBoxAscent +\n      2 * WATERMARK_BOX_VERTICAL_PADDING;\n    const textBoxX = frameWidth - textBoxWidth;\n    const textBoxY = frameHeight - textBoxHeight;\n\n    form.ctx.fillStyle = 'rgba(0, 0, 0, 0.4)';\n    form.ctx.beginPath();\n    form.ctx.roundRect(\n      Math.round(textBoxX),\n      Math.round(textBoxY),\n      Math.round(textBoxWidth),\n      Math.round(textBoxHeight),\n      [WATERMARK_BOX_HORIZONTAL_PADDING, 0, 0, 0],\n    );\n    form.ctx.fill();\n\n    // Always reset the text style because some effects may change text styling in the same ctx\n    form.ctx.fillStyle = 'rgba(255, 255, 255, 0.8)';\n    form.ctx.textAlign = 'left';\n\n    form.ctx.fillText(\n      VIDEO_WATERMARK_TEXT,\n      Math.round(textBoxX + WATERMARK_BOX_HORIZONTAL_PADDING),\n      Math.round(\n        textBoxY +\n          WATERMARK_BOX_VERTICAL_PADDING +\n          measureGeneratedBy.actualBoundingBoxAscent,\n      ),\n    );\n  }\n\n  private updateFrameIndex(index: number): void {\n    this._frameIndex = index;\n    this.sendResponse<FrameUpdateResponse>('frameUpdate', {\n      index,\n    });\n  }\n\n  private _loadWatermarkFonts() {\n    const requiredFonts = [\n      {\n        url: '/fonts/Inter-VariableFont.ttf',\n        format: 'truetype-variations',\n      },\n    ];\n    requiredFonts.forEach(requiredFont => {\n      const fontFace = new FontFace(\n        'Inter',\n        `url(${requiredFont.url}) format('${requiredFont.format}')`,\n      );\n      fontFace.load().then(font => {\n        self.fonts.add(font);\n      });\n    });\n  }\n\n  private updatePlayback(playing: boolean): void {\n    if (playing) {\n      this.sendResponse<PlayRequest>('play');\n    } else {\n      this.sendResponse<PauseRequest>('pause');\n    }\n    this._isPlaying = playing;\n  }\n\n  private _cancelRender(): void {\n    if (this._playbackTimeoutHandle !== null) {\n      clearTimeout(this._playbackTimeoutHandle);\n      this._playbackTimeoutHandle = null;\n    }\n    if (this._playbackRAFHandle !== null) {\n      cancelAnimationFrame(this._playbackRAFHandle);\n      this._playbackRAFHandle = null;\n    }\n  }\n\n  private _sendRenderingError(error: Error): void {\n    this.sendResponse<RenderingErrorResponse>('renderingError', {\n      error: serializeError(error),\n    });\n  }\n\n  private _processEffects(\n    form: CanvasForm,\n    effectParams: EffectFrameContext,\n    tracklets: Tracklet[],\n  ) {\n    for (let i = 0; i < this._effects.length; i++) {\n      const effect = this._effects[i];\n\n      if (i === 0) {\n        this._stats.effect0?.begin();\n      } else if (i === 1) {\n        this._stats.effect1?.begin();\n      }\n\n      effect.apply(form, effectParams, tracklets);\n\n      if (i === 0) {\n        this._stats.effect0?.end();\n      } else if (i === 1) {\n        this._stats.effect1?.end();\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/VideoWorkerTypes.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n  DecodeEvent,\n  EffectUpdateEvent,\n  EncodingCompletedEvent,\n  EncodingStateUpdateEvent,\n  FilmstripEvent,\n  FrameUpdateEvent,\n  LoadStartEvent,\n  RenderingErrorEvent,\n} from './VideoWorkerBridge';\nimport {EffectOptions} from './effects/Effect';\nimport type {Effects} from './effects/Effects';\n\nexport type Request<A, P> = {\n  action: A;\n} & P;\n\n// REQUESTS\n\nexport type SetCanvasRequest = Request<\n  'setCanvas',\n  {\n    canvas: OffscreenCanvas;\n  }\n>;\nexport type SetSourceRequest = Request<\n  'setSource',\n  {\n    source: string;\n  }\n>;\nexport type PlayRequest = Request<'play', unknown>;\nexport type PauseRequest = Request<'pause', unknown>;\nexport type StopRequest = Request<'stop', unknown>;\nexport type FrameUpdateRequest = Request<\n  'frameUpdate',\n  {\n    index: number;\n  }\n>;\nexport type FilmstripRequest = Request<\n  'filmstrip',\n  {\n    width: number;\n    height: number;\n  }\n>;\nexport type SetEffectRequest = Request<\n  'setEffect',\n  {\n    name: keyof Effects;\n    index: number;\n    options?: EffectOptions;\n  }\n>;\n\nexport type EncodeVideoRequest = Request<'encode', unknown>;\n\nexport type EnableStatsRequest = Request<'enableStats', unknown>;\n\nexport type VideoWorkerRequest =\n  | SetCanvasRequest\n  | SetSourceRequest\n  | PlayRequest\n  | PauseRequest\n  | StopRequest\n  | FrameUpdateRequest\n  | FilmstripRequest\n  | SetEffectRequest\n  | EncodeVideoRequest\n  | EnableStatsRequest;\n\nexport type VideoWorkerRequestMessageEvent = MessageEvent<VideoWorkerRequest>;\n\n// RESPONSES\n\nexport type ErrorResponse = Request<\n  'error',\n  {\n    error: unknown;\n  }\n>;\n\nexport type DecodeResponse = Request<'decode', DecodeEvent>;\n\nexport type EncodingStateUpdateResponse = Request<\n  'encodingStateUpdate',\n  EncodingStateUpdateEvent\n>;\n\nexport type EncodingCompletedResponse = Request<\n  'encodingCompleted',\n  EncodingCompletedEvent\n>;\n\nexport type FilmstripResponse = Request<'filmstrip', FilmstripEvent>;\n\nexport type PlayResponse = Request<'play', unknown>;\n\nexport type PauseResponse = Request<'pause', unknown>;\n\nexport type FrameUpdateResponse = Request<'frameUpdate', FrameUpdateEvent>;\n\nexport type RenderingErrorResponse = Request<\n  'renderingError',\n  RenderingErrorEvent\n>;\n\n// HTMLVideoElement events https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#events\n\nexport type LoadStartResponse = Request<'loadstart', LoadStartEvent>;\n\nexport type EffectUpdateResponse = Request<'effectUpdate', EffectUpdateEvent>;\n\nexport type VideoWorkerResponse =\n  | ErrorResponse\n  | FilmstripResponse\n  | DecodeResponse\n  | EncodingStateUpdateResponse\n  | EncodingCompletedResponse\n  | PlayResponse\n  | PauseResponse\n  | FrameUpdateResponse\n  | LoadStartResponse\n  | RenderingErrorResponse\n  | EffectUpdateResponse;\n\nexport type VideoWorkerResponseMessageEvent = MessageEvent<VideoWorkerResponse>;\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/editor/DemoVideoEditor.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport TrackletsAnnotation from '@/common/components/annotations/TrackletsAnnotation';\nimport useCloseSessionBeforeUnload from '@/common/components/session/useCloseSessionBeforeUnload';\nimport MessagesSnackbar from '@/common/components/snackbar/MessagesSnackbar';\nimport useMessagesSnackbar from '@/common/components/snackbar/useDemoMessagesSnackbar';\nimport {OBJECT_TOOLBAR_INDEX} from '@/common/components/toolbar/ToolbarConfig';\nimport useToolbarTabs from '@/common/components/toolbar/useToolbarTabs';\nimport VideoFilmstripWithPlayback from '@/common/components/video/VideoFilmstripWithPlayback';\nimport {\n  FrameUpdateEvent,\n  RenderingErrorEvent,\n  SessionStartedEvent,\n  TrackletsEvent,\n} from '@/common/components/video/VideoWorkerBridge';\nimport VideoEditor from '@/common/components/video/editor/VideoEditor';\nimport useResetDemoEditor from '@/common/components/video/editor/useResetEditor';\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport InteractionLayer from '@/common/components/video/layers/InteractionLayer';\nimport {PointsLayer} from '@/common/components/video/layers/PointsLayer';\nimport LoadingStateScreen from '@/common/loading/LoadingStateScreen';\nimport UploadLoadingScreen from '@/common/loading/UploadLoadingScreen';\nimport useScreenSize from '@/common/screen/useScreenSize';\nimport {SegmentationPoint} from '@/common/tracker/Tracker';\nimport {\n  activeTrackletObjectIdAtom,\n  frameIndexAtom,\n  isAddObjectEnabledAtom,\n  isPlayingAtom,\n  isVideoLoadingAtom,\n  pointsAtom,\n  sessionAtom,\n  streamingStateAtom,\n  trackletObjectsAtom,\n  uploadingStateAtom,\n  VideoData,\n} from '@/demo/atoms';\nimport useSettingsContext from '@/settings/useSettingsContext';\nimport {color, spacing} from '@/theme/tokens.stylex';\nimport stylex from '@stylexjs/stylex';\nimport {useAtom, useAtomValue, useSetAtom} from 'jotai';\nimport {useEffect, useState} from 'react';\nimport type {ErrorObject} from 'serialize-error';\n\nconst styles = stylex.create({\n  container: {\n    display: 'flex',\n    flexDirection: 'column',\n    overflow: 'auto',\n    width: '100%',\n    borderColor: color['gray-800'],\n    backgroundColor: color['gray-800'],\n    borderWidth: 8,\n    borderRadius: 12,\n    '@media screen and (max-width: 768px)': {\n      // on mobile, we want to grow the editor container so that the editor\n      // fills the remaining vertical space between the navbar and bottom\n      // of the page\n      flexGrow: 1,\n      borderWidth: 0,\n      borderRadius: 0,\n      paddingBottom: spacing[4],\n    },\n  },\n  loadingScreenWrapper: {\n    position: 'absolute',\n    top: 0,\n    left: 0,\n    width: '100%',\n    height: '100%',\n    background: 'white',\n    overflow: 'hidden',\n    overflowY: 'auto',\n    zIndex: 999,\n  },\n});\n\ntype Props = {\n  video: VideoData;\n};\n\nexport default function DemoVideoEditor({video: inputVideo}: Props) {\n  const {settings} = useSettingsContext();\n  const video = useVideo();\n\n  const [isSessionStartFailed, setIsSessionStartFailed] =\n    useState<boolean>(false);\n\n  const [session, setSession] = useAtom(sessionAtom);\n\n  const [activeTrackletId, setActiveTrackletObjectId] = useAtom(\n    activeTrackletObjectIdAtom,\n  );\n  const setTrackletObjects = useSetAtom(trackletObjectsAtom);\n  const setFrameIndex = useSetAtom(frameIndexAtom);\n  const points = useAtomValue(pointsAtom);\n  const isAddObjectEnabled = useAtomValue(isAddObjectEnabledAtom);\n  const streamingState = useAtomValue(streamingStateAtom);\n  const isPlaying = useAtomValue(isPlayingAtom);\n  const isVideoLoading = useAtomValue(isVideoLoadingAtom);\n  const uploadingState = useAtomValue(uploadingStateAtom);\n\n  const [renderingError, setRenderingError] = useState<ErrorObject | null>(\n    null,\n  );\n\n  const {isMobile} = useScreenSize();\n\n  const [tabIndex] = useToolbarTabs();\n  const {enqueueMessage} = useMessagesSnackbar();\n\n  useCloseSessionBeforeUnload();\n\n  const {resetEditor, resetSession} = useResetDemoEditor();\n  useEffect(() => {\n    resetEditor();\n  }, [inputVideo, resetEditor]);\n\n  useEffect(() => {\n    function onFrameUpdate(event: FrameUpdateEvent) {\n      setFrameIndex(event.index);\n    }\n\n    // Listen to frame updates to fetch the frame index in the main thread,\n    // which is then used downstream to render points per frame.\n    video?.addEventListener('frameUpdate', onFrameUpdate);\n\n    function onSessionStarted(event: SessionStartedEvent) {\n      setSession({id: event.sessionId, ranPropagation: false});\n    }\n\n    video?.addEventListener('sessionStarted', onSessionStarted);\n\n    function onSessionStartFailed() {\n      setIsSessionStartFailed(true);\n    }\n\n    video?.addEventListener('sessionStartFailed', onSessionStartFailed);\n\n    function onTrackletsUpdated(event: TrackletsEvent) {\n      const tracklets = event.tracklets;\n      if (tracklets.length === 0) {\n        resetSession();\n      }\n      setTrackletObjects(tracklets);\n    }\n\n    video?.addEventListener('trackletsUpdated', onTrackletsUpdated);\n\n    function onRenderingError(event: RenderingErrorEvent) {\n      setRenderingError(event.error);\n    }\n\n    video?.addEventListener('renderingError', onRenderingError);\n\n    video?.initializeTracker('SAM 2', {\n      inferenceEndpoint: settings.inferenceAPIEndpoint,\n    });\n\n    video?.startSession(inputVideo.path);\n\n    return () => {\n      video?.closeSession();\n      video?.removeEventListener('frameUpdate', onFrameUpdate);\n      video?.removeEventListener('sessionStarted', onSessionStarted);\n      video?.removeEventListener('sessionStartFailed', onSessionStartFailed);\n      video?.removeEventListener('trackletsUpdated', onTrackletsUpdated);\n      video?.removeEventListener('renderingError', onRenderingError);\n    };\n  }, [\n    setFrameIndex,\n    setSession,\n    setTrackletObjects,\n    resetSession,\n    inputVideo,\n    video,\n    settings.inferenceAPIEndpoint,\n    settings.videoAPIEndpoint,\n  ]);\n\n  async function handleOptimisticPointUpdate(newPoints: SegmentationPoint[]) {\n    if (session == null) {\n      return;\n    }\n\n    async function createActiveTracklet() {\n      if (!isAddObjectEnabled || newPoints.length === 0) {\n        return;\n      }\n      const tracklet = await video?.createTracklet();\n      if (tracklet != null && newPoints.length > 0) {\n        setActiveTrackletObjectId(tracklet.id);\n        video?.updatePoints(tracklet.id, [newPoints[newPoints.length - 1]]);\n      }\n    }\n\n    if (activeTrackletId != null) {\n      video?.updatePoints(activeTrackletId, newPoints);\n    } else {\n      await createActiveTracklet();\n    }\n    enqueueMessage('pointClick');\n  }\n\n  async function handleAddPoint(point: SegmentationPoint) {\n    if (streamingState === 'partial' || streamingState === 'requesting') {\n      return;\n    }\n    if (isPlaying) {\n      return video?.pause();\n    }\n    handleOptimisticPointUpdate([...points, point]);\n  }\n\n  function handleRemovePoint(point: SegmentationPoint) {\n    if (\n      isPlaying ||\n      streamingState === 'partial' ||\n      streamingState === 'requesting'\n    ) {\n      return;\n    }\n    handleOptimisticPointUpdate(points.filter(p => p !== point));\n  }\n\n  // The interaction layer handles clicks onto the video canvas. It is used\n  // to get absolute point clicks within the video's coordinate system.\n  // The PointsLayer handles rendering of input points and allows removing\n  // individual points by clicking on them.\n  const layers = (\n    <>\n      {tabIndex === OBJECT_TOOLBAR_INDEX && (\n        <>\n          <InteractionLayer\n            key=\"interaction-layer\"\n            onPoint={point => handleAddPoint(point)}\n          />\n          <PointsLayer\n            key=\"points-layer\"\n            points={points}\n            onRemovePoint={handleRemovePoint}\n          />\n        </>\n      )}\n      {!isMobile && <MessagesSnackbar key=\"snackbar-layer\" />}\n    </>\n  );\n\n  return (\n    <>\n      {(isVideoLoading || session === null) && !isSessionStartFailed && (\n        <div {...stylex.props(styles.loadingScreenWrapper)}>\n          <LoadingStateScreen\n            title=\"Loading demo...\"\n            description=\"This may take a few moments, you're almost there!\"\n          />\n        </div>\n      )}\n      {isSessionStartFailed && (\n        <div {...stylex.props(styles.loadingScreenWrapper)}>\n          <LoadingStateScreen\n            title=\"Did we just break the internet?\"\n            description={\n              <>Uh oh, it looks like there was an issue starting a session.</>\n            }\n            linkProps={{to: '..', label: 'Back to homepage'}}\n          />\n        </div>\n      )}\n      {isMobile && renderingError != null && (\n        <div {...stylex.props(styles.loadingScreenWrapper)}>\n          <LoadingStateScreen\n            title=\"Well, this is embarrassing...\"\n            description=\"This demo is not optimized for your device. Please try again on a different device with a larger screen.\"\n            linkProps={{to: '..', label: 'Back to homepage'}}\n          />\n        </div>\n      )}\n      {uploadingState !== 'default' && (\n        <div {...stylex.props(styles.loadingScreenWrapper)}>\n          <UploadLoadingScreen />\n        </div>\n      )}\n      <div {...stylex.props(styles.container)}>\n        <VideoEditor\n          video={inputVideo}\n          layers={layers}\n          loading={session == null}>\n          <div className=\"bg-graydark-800 w-full\">\n            <VideoFilmstripWithPlayback />\n            <TrackletsAnnotation />\n          </div>\n        </VideoEditor>\n      </div>\n    </>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/editor/ImageUtils.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport function convertVideoFrameToImageData(\n  videoFrame: VideoFrame,\n): ImageData | undefined {\n  const canvas = new OffscreenCanvas(\n    videoFrame.displayWidth,\n    videoFrame.displayHeight,\n  );\n  const ctx = canvas.getContext('2d');\n  ctx?.drawImage(videoFrame, 0, 0);\n  return ctx?.getImageData(0, 0, canvas.width, canvas.height);\n}\n\n/**\n * This utility provides two functions:\n * `process`: to find the bounding box of non-empty pixels from an ImageData, when looping through all its pixels\n * `crop` to cut out the subsection found in `process`\n * @returns\n */\nexport function findBoundingBox() {\n  let xMin = Number.MAX_VALUE;\n  let yMin = Number.MAX_VALUE;\n  let xMax = Number.MIN_VALUE;\n  let yMax = Number.MIN_VALUE;\n  return {\n    process: function (x: number, y: number, hasData: boolean) {\n      if (hasData) {\n        xMin = Math.min(x, xMin);\n        xMax = Math.max(x, xMax);\n        yMin = Math.min(y, yMin);\n        yMax = Math.max(y, yMax);\n      }\n      return [xMin, xMax, yMin, yMax];\n    },\n    crop(imageData: ImageData): ImageData | null {\n      const canvas = new OffscreenCanvas(imageData.width, imageData.height);\n      const ctx = canvas.getContext('2d');\n\n      const boundingBoxWidth = xMax - xMin;\n      const boundingBoxHeight = yMax - yMin;\n      if (ctx && boundingBoxWidth > 0 && boundingBoxHeight > 0) {\n        ctx.clearRect(0, 0, canvas.width, canvas.height);\n        ctx.putImageData(imageData, 0, 0);\n        return ctx.getImageData(\n          xMin,\n          yMin,\n          boundingBoxWidth,\n          boundingBoxHeight,\n        );\n      } else {\n        return null;\n      }\n    },\n    getBox(): [[number, number], [number, number]] {\n      return [\n        [xMin, yMin],\n        [xMax, yMax],\n      ];\n    },\n  };\n}\n\nexport function magnifyImageRegion(\n  canvas: HTMLCanvasElement | null,\n  x: number,\n  y: number,\n  radius: number = 25,\n  scale: number = 2,\n): string {\n  if (canvas == null) {\n    return '';\n  }\n  const ctx = canvas.getContext('2d');\n  if (ctx) {\n    const minX = x - radius < 0 ? radius - x : 0;\n    const minY = y - radius < 0 ? radius - y : 0;\n    const region = ctx.getImageData(\n      Math.max(x - radius, 0),\n      Math.max(y - radius, 0),\n      radius * 2,\n      radius * 2,\n    );\n\n    // ImageData doesn't scale-transform correctly on canvas\n    // So we first draw the original size on an offscreen canvas, and then scale it\n    const regionCanvas = new OffscreenCanvas(region.width, region.height);\n    const regionCtx = regionCanvas.getContext('2d');\n    regionCtx?.putImageData(region, minX > 0 ? minX : 0, minY > 0 ? minY : 0);\n\n    const scaleCanvas = document.createElement('canvas');\n    scaleCanvas.width = Math.round(region.width * scale);\n    scaleCanvas.height = Math.round(region.height * scale);\n    const scaleCtx = scaleCanvas.getContext('2d');\n    scaleCtx?.scale(scale, scale);\n    scaleCtx?.drawImage(regionCanvas, 0, 0);\n\n    return scaleCanvas.toDataURL();\n  }\n  return '';\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/editor/VideoEditor.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {VideoData} from '@/demo/atoms';\nimport stylex, {StyleXStyles} from '@stylexjs/stylex';\nimport {useSetAtom} from 'jotai';\nimport {PropsWithChildren, RefObject, useEffect, useRef} from 'react';\nimport Video, {VideoRef} from '../Video';\nimport {videoAtom} from './atoms';\n\nconst MAX_VIDEO_WIDTH = 1280;\n\nconst styles = stylex.create({\n  editorContainer: {\n    position: 'relative',\n    display: 'flex',\n    flexDirection: 'column',\n    alignItems: 'center',\n    width: '100%',\n    height: '100%',\n    borderRadius: '0.375rem',\n    overflow: {\n      default: 'clip',\n      '@media screen and (max-width: 768px)': 'visible',\n    },\n  },\n  videoContainer: {\n    position: 'relative',\n    flexGrow: 1,\n    overflow: 'hidden',\n    width: '100%',\n    maxWidth: MAX_VIDEO_WIDTH,\n  },\n  layers: {\n    position: 'absolute',\n    left: 0,\n    top: 0,\n    bottom: 0,\n    right: 0,\n  },\n  loadingMessage: {\n    position: 'absolute',\n    top: '8px',\n    right: '8px',\n    padding: '6px 10px',\n    backgroundColor: '#6441D2CC',\n    color: '#FFF',\n    display: 'flex',\n    alignItems: 'center',\n    gap: '8px',\n    borderRadius: '8px',\n    fontSize: '0.8rem',\n  },\n});\n\nexport type InteractionLayerProps = {\n  style: StyleXStyles;\n  videoRef: RefObject<VideoRef>;\n};\n\nexport type ControlsProps = {\n  isPlaying: boolean;\n  onPlay: () => void;\n  onPause: () => void;\n  onPreviousFrame?: () => void;\n  onNextFrame?: () => void;\n};\n\ntype Props = PropsWithChildren<{\n  video: VideoData;\n  layers?: React.ReactNode;\n  loading?: boolean;\n}>;\n\nexport default function VideoEditor({\n  video: inputVideo,\n  layers,\n  loading,\n  children,\n}: Props) {\n  const videoRef = useRef<VideoRef>(null);\n  const setVideo = useSetAtom(videoAtom);\n\n  // Initialize video atom\n  useEffect(() => {\n    setVideo(videoRef.current);\n    return () => {\n      setVideo(null);\n    };\n  }, [setVideo]);\n\n  return (\n    <div {...stylex.props(styles.editorContainer)}>\n      <div {...stylex.props(styles.videoContainer)}>\n        <Video\n          ref={videoRef}\n          src={inputVideo.url}\n          width={inputVideo.width}\n          height={inputVideo.height}\n          loading={loading}\n        />\n        <div {...stylex.props(styles.layers)}>{layers}</div>\n      </div>\n      {children}\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/editor/VideoEditorUtils.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {Mask, Tracklet} from '@/common/tracker/Tracker';\nimport {\n  convertVideoFrameToImageData,\n  findBoundingBox,\n} from '@/common/utils/ImageUtils';\nimport {DataArray} from '@/jscocotools/mask';\nimport invariant from 'invariant';\n\nfunction getCanvas(\n  width: number,\n  height: number,\n  isOffscreen: boolean = false,\n): HTMLCanvasElement | OffscreenCanvas {\n  if (isOffscreen || typeof document === 'undefined') {\n    return new OffscreenCanvas(width, height);\n  }\n  const canvas = document.createElement('canvas');\n  canvas.width = width;\n  canvas.height = height;\n  return canvas;\n}\n\nexport function drawFrame(\n  ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D,\n  frame: VideoFrame | HTMLImageElement,\n  width: number,\n  height: number,\n) {\n  ctx?.drawImage(frame, 0, 0, width, height);\n}\n\n/**\n * Given a mask and the image frame, get the masked image cropped to its bounding box.\n */\nexport function getThumbnailImageDataOld(\n  mask: DataArray,\n  videoFrame: VideoFrame,\n): ImageData | null {\n  const data = mask.data;\n  if (!ArrayBuffer.isView(data) || !(data instanceof Uint8Array)) {\n    return new ImageData(0, 0);\n  }\n\n  const frame = convertVideoFrameToImageData(videoFrame);\n  if (!frame) {\n    return new ImageData(0, 0);\n  }\n\n  const frameData = frame.data;\n  const scaleX = frame.width / mask.shape[1];\n  const scaleY = frame.height / mask.shape[0];\n  const boundingBox = findBoundingBox();\n  const transformedData = new Uint8ClampedArray(data.length * 4);\n\n  for (let i = 0; i < data.length; i++) {\n    // Since the mask is rotated, new width is the mask's height = mask.shape[1];\n    // Transform matrix: doing a rotate 90deg and then flip horizontal is the same as flipping x and y\n    // [ 0 1 ]   [ -1 0 ]   =   [ 0 1 ]\n    // [-1 0 ] x [  0 1 ]   =   [ 1 0 ]\n    // So, we can find the new index as: newY * newWidth + newX\n    const newX = Math.floor(i / mask.shape[0]); // ie, new x is the current y\n    const newY = i % mask.shape[0];\n    const transformedIndex = (newY * mask.shape[1] + newX) * 4;\n    const frameDataIndex = (newY * mask.shape[1] * scaleY + newX * scaleX) * 4;\n\n    transformedData[transformedIndex] = frameData[frameDataIndex];\n    transformedData[transformedIndex + 1] = frameData[frameDataIndex + 1];\n    transformedData[transformedIndex + 2] = frameData[frameDataIndex + 2];\n    transformedData[transformedIndex + 3] = (data[i] && 255) || 0; // A value\n\n    boundingBox.process(newX, newY, data[i] > 0);\n  }\n\n  const rotatedData = new ImageData(\n    transformedData,\n    mask.shape[1],\n    mask.shape[0],\n  ); // flip w and h of the mask\n\n  return boundingBox.crop(rotatedData);\n}\n\n/**\n * Given a mask, the mask rendering context, and the video frame, get the\n * masked image cropped to its bounding box.\n */\nfunction getThumbnailImageData(\n  mask: Mask,\n  maskCtx: OffscreenCanvasRenderingContext2D,\n  frameBitmap: ImageBitmap,\n): ImageData | null {\n  const x = mask.bounds[0][0];\n  const y = mask.bounds[0][1];\n  const w = mask.bounds[1][0] - mask.bounds[0][0];\n  const h = mask.bounds[1][1] - mask.bounds[0][1];\n\n  if (w <= 0 || h <= 0) {\n    return null;\n  }\n\n  const thumbnailMaskData = maskCtx.getImageData(x, y, w, h);\n\n  const canvas = new OffscreenCanvas(w, h);\n  const ctx = canvas.getContext('2d');\n  invariant(ctx !== null, '2d context cannot be null');\n\n  ctx.putImageData(thumbnailMaskData, 0, 0);\n  ctx.globalCompositeOperation = 'source-in';\n  ctx.drawImage(frameBitmap, x, y, w, h, 0, 0, w, h);\n\n  return ctx.getImageData(0, 0, w, h);\n}\n\nexport async function generateThumbnail(\n  track: Tracklet,\n  frameIndex: number,\n  mask: Mask,\n  frame: VideoFrame,\n  ctx: OffscreenCanvasRenderingContext2D,\n): Promise<void> {\n  // If a frame doesn't have points, the points will be undefined.\n  const hasPoints = (track.points[frameIndex]?.length ?? 0) > 0;\n  if (!hasPoints) {\n    return;\n  }\n  invariant(frame !== null, 'frame must be ready');\n  const bitmap = await createImageBitmap(frame);\n  const thumbnailImageData = getThumbnailImageData(\n    mask,\n    ctx as OffscreenCanvasRenderingContext2D,\n    bitmap,\n  );\n\n  bitmap.close();\n  if (thumbnailImageData != null) {\n    const thumbnailDataURL = await getDataURLFromImageData(thumbnailImageData);\n    track.thumbnail = thumbnailDataURL;\n  }\n}\n\nexport async function getDataURLFromImageData(\n  imageData: ImageData | null,\n): Promise<string> {\n  if (!imageData) {\n    return '';\n  }\n\n  const canvas = getCanvas(imageData.width, imageData.height);\n  const ctx = canvas.getContext('2d');\n\n  if (ctx === null) {\n    return '';\n  }\n\n  ctx?.putImageData(imageData, 0, 0);\n\n  if (canvas instanceof OffscreenCanvas) {\n    const blob = await canvas.convertToBlob();\n    return new Promise(resolve => {\n      const reader = new FileReader();\n      reader.addEventListener(\n        'load',\n        () => {\n          const result = reader.result;\n          if (typeof result === 'string') {\n            resolve(result);\n          } else {\n            resolve('');\n          }\n        },\n        false,\n      );\n      reader.readAsDataURL(blob);\n    });\n  }\n  return canvas.toDataURL();\n}\n\nexport function hexToRgb(hex: string): {\n  r: number;\n  g: number;\n  b: number;\n  a: number;\n} {\n  const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i.exec(\n    hex,\n  );\n  return result\n    ? {\n        r: parseInt(result[1], 16),\n        g: parseInt(result[2], 16),\n        b: parseInt(result[3], 16),\n        a: result[4] != null ? parseInt(result[4], 16) : 128,\n      }\n    : {r: 255, g: 0, b: 0, a: 128};\n}\n\nexport function getPointInImage(\n  event: React.MouseEvent<HTMLElement>,\n  canvas: HTMLCanvasElement,\n  normalized: boolean = false,\n): [x: number, y: number] {\n  const rect = canvas.getBoundingClientRect();\n\n  const matrix = new DOMMatrix();\n\n  // First, center the image\n  const elementCenter = new DOMPoint(\n    canvas.clientWidth / 2,\n    canvas.clientHeight / 2,\n  );\n  const imageCenter = new DOMPoint(canvas.width / 2, canvas.height / 2);\n  matrix.translateSelf(\n    elementCenter.x - imageCenter.x,\n    elementCenter.y - imageCenter.y,\n  );\n\n  // Containing the object take the minimal scale\n  const scale = Math.min(\n    canvas.clientWidth / canvas.width,\n    canvas.clientHeight / canvas.height,\n  );\n  matrix.scaleSelf(scale, scale, 1, imageCenter.x, imageCenter.y);\n\n  const point = new DOMPoint(\n    event.clientX - rect.left,\n    event.clientY - rect.top,\n  );\n  const imagePoint = matrix.inverse().transformPoint(point);\n\n  const x = Math.max(Math.min(imagePoint.x, canvas.width), 0);\n  const y = Math.max(Math.min(imagePoint.y, canvas.height), 0);\n\n  if (normalized) {\n    return [x / canvas.width, y / canvas.height];\n  }\n  return [x, y];\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/editor/atoms.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {atom} from 'jotai';\nimport {VideoRef} from '../Video';\n\nexport const videoAtom = atom<VideoRef | null>(null);\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/editor/useResetEditor.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {OBJECT_TOOLBAR_INDEX} from '@/common/components/toolbar/ToolbarConfig';\nimport useToolbarTabs from '@/common/components/toolbar/useToolbarTabs';\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport {\n  activeTrackletObjectIdAtom,\n  frameIndexAtom,\n  isPlayingAtom,\n  isStreamingAtom,\n  sessionAtom,\n  streamingStateAtom,\n  trackletObjectsAtom,\n} from '@/demo/atoms';\nimport {DEFAULT_EFFECT_LAYERS} from '@/demo/DemoConfig';\nimport {useSetAtom} from 'jotai';\nimport {useCallback} from 'react';\n\ntype State = {\n  resetEditor: () => void;\n  resetEffects: () => void;\n  resetSession: () => void;\n};\n\nexport default function useResetEditor(): State {\n  const video = useVideo();\n\n  const setSession = useSetAtom(sessionAtom);\n  const setActiveTrackletObjectId = useSetAtom(activeTrackletObjectIdAtom);\n  const setTrackletObjects = useSetAtom(trackletObjectsAtom);\n  const setFrameIndex = useSetAtom(frameIndexAtom);\n  const setStreamingState = useSetAtom(streamingStateAtom);\n  const setIsPlaying = useSetAtom(isPlayingAtom);\n  const setIsStreaming = useSetAtom(isStreamingAtom);\n  const [, setDemoTabIndex] = useToolbarTabs();\n\n  const resetEffects = useCallback(() => {\n    video?.setEffect(DEFAULT_EFFECT_LAYERS.background, 0, {variant: 0});\n    video?.setEffect(DEFAULT_EFFECT_LAYERS.highlight, 1, {variant: 0});\n  }, [video]);\n\n  const resetEditor = useCallback(() => {\n    setFrameIndex(0);\n    setSession(null);\n    setActiveTrackletObjectId(0);\n    setTrackletObjects([]);\n    setStreamingState('none');\n    setIsPlaying(false);\n    setIsStreaming(false);\n    resetEffects();\n    setDemoTabIndex(OBJECT_TOOLBAR_INDEX);\n  }, [\n    setFrameIndex,\n    setSession,\n    setActiveTrackletObjectId,\n    setTrackletObjects,\n    setStreamingState,\n    setIsPlaying,\n    setIsStreaming,\n    resetEffects,\n    setDemoTabIndex,\n  ]);\n\n  const resetSession = useCallback(() => {\n    setSession(prev => {\n      if (prev === null) {\n        return prev;\n      }\n      return {...prev, ranPropagation: false};\n    });\n    setActiveTrackletObjectId(null);\n    resetEffects();\n  }, [setSession, setActiveTrackletObjectId, resetEffects]);\n\n  return {resetEditor, resetEffects, resetSession};\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/editor/useVideo.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {useAtomValue} from 'jotai';\nimport {videoAtom} from './atoms';\n\nexport default function useVideo() {\n  return useAtomValue(videoAtom);\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/editor/useVideoEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport {\n  activeBackgroundEffectAtom,\n  activeHighlightEffectAtom,\n} from '@/demo/atoms';\nimport {useSetAtom} from 'jotai';\nimport {useCallback, useEffect} from 'react';\nimport {EffectUpdateEvent} from '../VideoWorkerBridge';\nimport {EffectOptions} from '../effects/Effect';\nimport Effects, {EffectIndex, Effects as EffectsType} from '../effects/Effects';\n\nexport default function useVideoEffect() {\n  const video = useVideo();\n  const setBackgroundEffect = useSetAtom(activeBackgroundEffectAtom);\n  const setHighlightEffect = useSetAtom(activeHighlightEffectAtom);\n\n  // The useEffect will listen to any effect updates from the worker. The\n  // worker is the source of truth, which effect and effect variant is\n  // currently applied. The main thread will be notified whenever an effect\n  // or effect variant changes.\n  useEffect(() => {\n    function onEffectUpdate(event: EffectUpdateEvent) {\n      if (event.index === EffectIndex.BACKGROUND) {\n        setBackgroundEffect(event);\n      } else {\n        setHighlightEffect(event);\n      }\n    }\n    video?.addEventListener('effectUpdate', onEffectUpdate);\n    return () => {\n      video?.removeEventListener('effectUpdate', onEffectUpdate);\n    };\n  }, [video, setBackgroundEffect, setHighlightEffect]);\n\n  return useCallback(\n    (name: keyof EffectsType, index: EffectIndex, options?: EffectOptions) => {\n      video?.setEffect(name, index, options);\n      const effect = Effects[name];\n      const effectVariant = options?.variant ?? 0;\n\n      if (index === EffectIndex.BACKGROUND) {\n        setBackgroundEffect({\n          name,\n          variant: effectVariant,\n          numVariants: effect.numVariants,\n        });\n      } else {\n        setHighlightEffect({\n          name,\n          variant: options?.variant ?? 0,\n          numVariants: effect.numVariants,\n        });\n      }\n    },\n    [video, setBackgroundEffect, setHighlightEffect],\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/ArrowGLEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport BaseGLEffect from '@/common/components/video/effects/BaseGLEffect';\nimport {\n  EffectFrameContext,\n  EffectInit,\n} from '@/common/components/video/effects/Effect';\nimport fragmentShaderSource from '@/common/components/video/effects/shaders/Arrow.frag?raw';\nimport vertexShaderSource from '@/common/components/video/effects/shaders/DefaultVert.vert?raw';\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport {normalizeBounds} from '@/common/utils/ShaderUtils';\nimport {RLEObject, decode} from '@/jscocotools/mask';\nimport invariant from 'invariant';\nimport {CanvasForm} from 'pts';\n\nexport default class ArrowGLEffect extends BaseGLEffect {\n  private _numMasks: number = 0;\n  private _numMasksUniformLocation: WebGLUniformLocation | null = null;\n\n  // Must from start 1, main texture takes.\n  private _masksTextureUnitStart: number = 1;\n\n  constructor() {\n    super(4);\n    this.vertexShaderSource = vertexShaderSource;\n    this.fragmentShaderSource = fragmentShaderSource;\n  }\n\n  protected setupUniforms(\n    gl: WebGL2RenderingContext,\n    program: WebGLProgram,\n    init: EffectInit,\n  ): void {\n    super.setupUniforms(gl, program, init);\n\n    this._numMasksUniformLocation = gl.getUniformLocation(program, 'uNumMasks');\n    gl.uniform1i(this._numMasksUniformLocation, this._numMasks);\n  }\n\n  apply(form: CanvasForm, context: EffectFrameContext, _tracklets: Tracklet[]) {\n    const gl = this._gl;\n    const program = this._program;\n\n    if (!program) {\n      return;\n    }\n    invariant(gl !== null, 'WebGL2 context is required');\n\n    gl.clearColor(0.0, 0.0, 0.0, 1.0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    // dynamic uniforms per frame\n    const styleIndex = Math.floor(this.variant / 2) % 2;\n    gl.uniform1i(this._numMasksUniformLocation, context.masks.length);\n    gl.uniform1f(\n      gl.getUniformLocation(program, 'uCurrentFrame'),\n      context.frameIndex,\n    );\n    gl.uniform1i(\n      gl.getUniformLocation(program, 'uLineColor'),\n      this.variant % 2 === 0 ? 0 : 1,\n    );\n    gl.uniform1i(\n      gl.getUniformLocation(program, 'uArrow'),\n      styleIndex === 0 ? 1 : 0,\n    );\n\n    gl.activeTexture(gl.TEXTURE0);\n    gl.bindTexture(gl.TEXTURE_2D, this._frameTexture);\n    gl.texImage2D(\n      gl.TEXTURE_2D,\n      0,\n      gl.RGBA,\n      context.width,\n      context.height,\n      0,\n      gl.RGBA,\n      gl.UNSIGNED_BYTE,\n      context.frame,\n    );\n\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n\n    // Create and bind 2D textures for each mask\n    context.masks.forEach((mask, index) => {\n      const maskTexture = gl.createTexture();\n      const decodedMask = decode([mask.bitmap as RLEObject]);\n      const maskData = decodedMask.data as Uint8Array;\n      gl.activeTexture(gl.TEXTURE0 + index + this._masksTextureUnitStart);\n      gl.bindTexture(gl.TEXTURE_2D, maskTexture);\n\n      const boundaries = normalizeBounds(\n        mask.bounds[0],\n        mask.bounds[1],\n        context.width,\n        context.height,\n      );\n\n      gl.uniform1i(\n        gl.getUniformLocation(program, `uMaskTexture${index}`),\n        index + this._masksTextureUnitStart,\n      );\n      gl.uniform4fv(gl.getUniformLocation(program, `bbox${index}`), boundaries);\n\n      // dynamic uniforms per mask\n      gl.uniform1i(\n        gl.getUniformLocation(program, `uMaskTexture${index}`),\n        this._masksTextureUnitStart + index,\n      );\n\n      gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        0,\n        gl.LUMINANCE,\n        context.height,\n        context.width,\n        0,\n        gl.LUMINANCE,\n        gl.UNSIGNED_BYTE,\n        maskData,\n      );\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n      gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n    });\n\n    const ctx = form.ctx;\n    invariant(this._canvas !== null, 'canvas is required');\n    ctx.drawImage(this._canvas, 0, 0);\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/BackgroundBlurEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport BaseGLEffect from '@/common/components/video/effects/BaseGLEffect';\nimport {\n  EffectFrameContext,\n  EffectInit,\n} from '@/common/components/video/effects/Effect';\nimport fragmentShaderSource from '@/common/components/video/effects/shaders/BackgroundBlur.frag?raw';\nimport vertexShaderSource from '@/common/components/video/effects/shaders/DefaultVert.vert?raw';\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport invariant from 'invariant';\nimport {CanvasForm} from 'pts';\n\nexport default class BackgroundBlurEffect extends BaseGLEffect {\n  private _blurRadius: number = 3;\n\n  constructor() {\n    super(3);\n\n    this.vertexShaderSource = vertexShaderSource;\n    this.fragmentShaderSource = fragmentShaderSource;\n  }\n\n  protected setupUniforms(\n    gl: WebGL2RenderingContext,\n    program: WebGLProgram,\n    init: EffectInit,\n  ): void {\n    super.setupUniforms(gl, program, init);\n\n    gl.uniform1i(\n      gl.getUniformLocation(program, 'uBlurRadius'),\n      this._blurRadius,\n    );\n  }\n\n  apply(form: CanvasForm, context: EffectFrameContext, _tracklets: Tracklet[]) {\n    const gl = this._gl;\n    const program = this._program;\n\n    if (!program) {\n      return;\n    }\n    invariant(gl !== null, 'WebGL2 context is required');\n\n    gl.clearColor(0.0, 0.0, 0.0, 1.0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    const blurRadius = [3, 6, 12][this.variant % 3];\n    gl.uniform1i(gl.getUniformLocation(program, 'uBlurRadius'), blurRadius);\n\n    gl.activeTexture(gl.TEXTURE0);\n    gl.bindTexture(gl.TEXTURE_2D, this._frameTexture);\n    gl.texImage2D(\n      gl.TEXTURE_2D,\n      0,\n      gl.RGBA,\n      context.width,\n      context.height,\n      0,\n      gl.RGBA,\n      gl.UNSIGNED_BYTE,\n      context.frame,\n    );\n\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n    const ctx = form.ctx;\n    invariant(this._canvas !== null, 'canvas is required');\n    ctx.drawImage(this._canvas, 0, 0);\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/BackgroundTextEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport {DEMO_SHORT_NAME} from '@/demo/DemoConfig';\nimport {Bound, CanvasForm, Num, Pt, Shaping} from 'pts';\nimport {AbstractEffect, EffectFrameContext} from './Effect';\n\nexport default class BackgroundTextEffect extends AbstractEffect {\n  constructor() {\n    super(2);\n  }\n\n  apply(\n    form: CanvasForm,\n    context: EffectFrameContext,\n    _tracklets: Tracklet[],\n  ): void {\n    form.image([0, 0], context.frame);\n\n    const words = ['SEGMENT', 'ANYTHING', 'WOW'];\n    const paragraph = `${DEMO_SHORT_NAME} is designed for efficient video processing with streaming inference to enable real-time, interactive applications.`;\n    const progress = context.frameIndex / context.totalFrames;\n\n    // Zooming heading\n    if (this.variant % 2 === 0) {\n      const step = context.totalFrames / words.length;\n      const wordIndex = Math.floor(progress * words.length);\n      const fontSize = context.width / Math.max(4, words[wordIndex].length - 1);\n      const sizeMax = fontSize * 1.2;\n\n      const t = Shaping.quadraticInOut(\n        Num.cycle((context.frameIndex - wordIndex * step) / step),\n      );\n      const currentSize = fontSize + Shaping.sineInOut(t, sizeMax - fontSize);\n      form.fillOnly('#fff').font(currentSize, 'bold');\n      const area = new Pt(\n        context.width,\n        context.height - (context.height / 4) * (1 - t),\n      )\n        .toBound()\n        .scale(1.5, [context.width / 2, 0]);\n\n      form\n        .alignText('center', 'middle')\n        .textBox(area, words[wordIndex], 'middle');\n\n      // Scrolling paragraph\n    } else {\n      const t = Shaping.quadraticInOut(Num.cycle(progress));\n      const offset = t * context.height;\n      const area = Bound.fromArray([\n        [0, -context.height + offset],\n        [context.width, context.height],\n      ]);\n      form.fillOnly('#00000066').rect(area);\n      form.fillOnly('#fff').font(context.width / 8, 'bold');\n      form\n        .fillOnly('#fff')\n        .alignText('start')\n        .paragraphBox(area, paragraph, 0.8, 'top', false);\n    }\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/BaseGLEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Logger from '@/common/logger/Logger';\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport invariant from 'invariant';\nimport {CanvasForm} from 'pts';\nimport {AbstractEffect, EffectFrameContext, EffectInit} from './Effect';\n\nexport default abstract class BaseGLEffect extends AbstractEffect {\n  protected _canvas: OffscreenCanvas | null = null;\n  protected _gl: WebGL2RenderingContext | null = null;\n  protected _program: WebGLProgram | null = null;\n\n  protected _frameTextureUnit: number = 0;\n  protected _frameTexture: WebGLTexture | null = null;\n\n  protected vertexShaderSource: string = '';\n  protected fragmentShaderSource: string = '';\n\n  protected _vertexShader: WebGLShader | null = null;\n  protected _fragmentShader: WebGLShader | null = null;\n\n  async setup(init: EffectInit): Promise<void> {\n    const {canvas, gl} = init;\n\n    if (canvas != null && gl != null) {\n      this._canvas = canvas;\n      this._gl = gl;\n    }\n\n    invariant(this._gl !== null, 'WebGL2 context is required');\n\n    const program = this._gl.createProgram();\n    this._program = program;\n\n    {\n      const vertexShader = this._gl.createShader(this._gl.VERTEX_SHADER);\n      this._vertexShader = vertexShader;\n      invariant(vertexShader !== null, 'vertexShader required');\n      this._gl.shaderSource(vertexShader, this.vertexShaderSource);\n      this._gl.compileShader(vertexShader);\n      invariant(program !== null, 'program required');\n      this._gl.attachShader(program, vertexShader);\n\n      const fragmentShader = this._gl.createShader(this._gl.FRAGMENT_SHADER);\n      this._fragmentShader = fragmentShader;\n      invariant(fragmentShader !== null, 'fragmentShader required');\n      this._gl.shaderSource(fragmentShader, this.fragmentShaderSource);\n      this._gl.compileShader(fragmentShader);\n      this._gl.attachShader(program, fragmentShader);\n\n      this._gl.linkProgram(program);\n\n      if (!this._gl.getProgramParameter(program, this._gl.LINK_STATUS)) {\n        Logger.error(this._gl.getShaderInfoLog(vertexShader));\n        Logger.error(this._gl.getShaderInfoLog(fragmentShader));\n      }\n    }\n    this._gl.useProgram(program);\n\n    this.setupBuffers(this._gl);\n    this.setupUniforms(this._gl, program, init);\n  }\n\n  apply(form: CanvasForm, context: EffectFrameContext, _tracklets: Tracklet[]) {\n    const gl = this._gl;\n    invariant(gl !== null, 'WebGL2 context is required');\n\n    gl.clearColor(0.0, 0.0, 0.0, 1.0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    gl.activeTexture(gl.TEXTURE0 + this._frameTextureUnit);\n    gl.bindTexture(gl.TEXTURE_2D, this._frameTexture);\n    gl.texImage2D(\n      gl.TEXTURE_2D,\n      0,\n      gl.RGBA,\n      context.frame.width,\n      context.frame.height,\n      0,\n      gl.RGBA,\n      gl.UNSIGNED_BYTE,\n      context.frame,\n    );\n\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n    gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);\n\n    // Apply shader\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n    const ctx = form.ctx;\n    invariant(this._canvas !== null, 'canvas is required');\n    ctx.drawImage(this._canvas, 0, 0);\n  }\n\n  async cleanup(): Promise<void> {\n    if (this._gl != null) {\n      // Dispose of WebGL resources, e.g., textures, buffers, etc.\n      if (this._frameTexture != null) {\n        this._gl.deleteTexture(this._frameTexture);\n        this._frameTexture = null;\n      }\n\n      if (\n        this._program != null &&\n        this._vertexShader != null &&\n        this._fragmentShader != null\n      ) {\n        this._gl.detachShader(this._program, this._vertexShader);\n        this._gl.deleteShader(this._vertexShader);\n        this._gl.detachShader(this._program, this._fragmentShader);\n        this._gl.deleteShader(this._fragmentShader);\n      }\n    }\n  }\n\n  protected setupBuffers(gl: WebGL2RenderingContext) {\n    const vertexBufferData = new Float32Array([\n      1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, -1.0,\n    ]);\n\n    const texCoordBufferData = new Float32Array([\n      1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0,\n    ]);\n\n    const vertexBuffer = gl.createBuffer();\n    gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);\n    gl.bufferData(gl.ARRAY_BUFFER, vertexBufferData, gl.STATIC_DRAW);\n    gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 0, 0);\n    gl.enableVertexAttribArray(0);\n\n    const texCoordBuffer = gl.createBuffer();\n    gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer);\n    gl.bufferData(gl.ARRAY_BUFFER, texCoordBufferData, gl.STATIC_DRAW);\n    gl.vertexAttribPointer(1, 2, gl.FLOAT, false, 0, 0);\n    gl.enableVertexAttribArray(1);\n  }\n\n  protected setupUniforms(\n    gl: WebGL2RenderingContext,\n    program: WebGLProgram,\n    init: EffectInit,\n  ) {\n    this._frameTexture = gl.createTexture();\n\n    gl.uniform1i(\n      gl.getUniformLocation(program, 'uSampler'),\n      this._frameTextureUnit,\n    );\n\n    gl.uniform2f(\n      gl.getUniformLocation(program, 'uSize'),\n      init.width,\n      init.height,\n    );\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/BurstGLEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {hexToRgb} from '@/common/components/video/editor/VideoEditorUtils';\nimport BaseGLEffect from '@/common/components/video/effects/BaseGLEffect';\nimport {\n  EffectFrameContext,\n  EffectInit,\n} from '@/common/components/video/effects/Effect';\nimport fragmentShaderSource from '@/common/components/video/effects/shaders/Burst.frag?raw';\nimport vertexShaderSource from '@/common/components/video/effects/shaders/DefaultVert.vert?raw';\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport {normalizeBounds, preAllocateTextures} from '@/common/utils/ShaderUtils';\nimport {RLEObject, decode} from '@/jscocotools/mask';\nimport invariant from 'invariant';\nimport {CanvasForm} from 'pts';\n\nexport default class BurstGLEffect extends BaseGLEffect {\n  private _numMasks: number = 0;\n  private _numMasksUniformLocation: WebGLUniformLocation | null = null;\n\n  // Must from start 1, main texture takes.\n  private _masksTextureUnitStart: number = 1;\n  private _maskTextures: WebGLTexture[] = [];\n\n  constructor() {\n    super(4);\n    this.vertexShaderSource = vertexShaderSource;\n    this.fragmentShaderSource = fragmentShaderSource;\n  }\n\n  protected setupUniforms(\n    gl: WebGL2RenderingContext,\n    program: WebGLProgram,\n    init: EffectInit,\n  ): void {\n    super.setupUniforms(gl, program, init);\n\n    this._numMasksUniformLocation = gl.getUniformLocation(program, 'uNumMasks');\n    gl.uniform1i(this._numMasksUniformLocation, this._numMasks);\n\n    // We know the max number of textures, pre-allocate 3.\n    this._maskTextures = preAllocateTextures(gl, 3);\n  }\n\n  apply(form: CanvasForm, context: EffectFrameContext, _tracklets: Tracklet[]) {\n    const gl = this._gl;\n    const program = this._program;\n\n    if (!program) {\n      return;\n    }\n    invariant(gl !== null, 'WebGL2 context is required');\n\n    gl.clearColor(0.0, 0.0, 0.0, 1.0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    const styleIndex = Math.floor(this.variant / 2) % 2;\n\n    // dynamic uniforms per frame\n    gl.uniform1i(this._numMasksUniformLocation, context.masks.length);\n    gl.uniform1i(\n      gl.getUniformLocation(program, 'uLineColor'),\n      this.variant % 2 === 0 ? 1 : 0,\n    );\n    gl.uniform1i(\n      gl.getUniformLocation(program, 'uInterleave'),\n      styleIndex === 0 ? 0 : 1,\n    );\n\n    gl.activeTexture(gl.TEXTURE0);\n    gl.bindTexture(gl.TEXTURE_2D, this._frameTexture);\n    gl.texImage2D(\n      gl.TEXTURE_2D,\n      0,\n      gl.RGBA,\n      context.width,\n      context.height,\n      0,\n      gl.RGBA,\n      gl.UNSIGNED_BYTE,\n      context.frame,\n    );\n\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n\n    // Create and bind 2D textures for each mask\n    context.masks.forEach((mask, index) => {\n      const decodedMask = decode([mask.bitmap as RLEObject]);\n      const maskData = decodedMask.data as Uint8Array;\n      gl.activeTexture(gl.TEXTURE0 + index + this._masksTextureUnitStart);\n      gl.bindTexture(gl.TEXTURE_2D, this._maskTextures[index]);\n\n      const boundaries = normalizeBounds(\n        mask.bounds[0],\n        mask.bounds[1],\n        context.width,\n        context.height,\n      );\n\n      // dynamic uniforms per mask\n      gl.uniform1i(\n        gl.getUniformLocation(program, `uMaskTexture${index}`),\n        this._masksTextureUnitStart + index,\n      );\n      const color = hexToRgb(context.maskColors[index]);\n      gl.uniform4f(\n        gl.getUniformLocation(program, `uMaskColor${index}`),\n        color.r,\n        color.g,\n        color.b,\n        color.a,\n      );\n      gl.uniform4fv(gl.getUniformLocation(program, `bbox${index}`), boundaries);\n\n      gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        0,\n        gl.LUMINANCE,\n        context.height,\n        context.width,\n        0,\n        gl.LUMINANCE,\n        gl.UNSIGNED_BYTE,\n        maskData,\n      );\n    });\n\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n    // Unbind textures\n    gl.bindTexture(gl.TEXTURE_2D, null);\n    context.masks.forEach((_, index) => {\n      gl.activeTexture(gl.TEXTURE0 + index + this._masksTextureUnitStart);\n      gl.bindTexture(gl.TEXTURE_2D, null);\n    });\n\n    const ctx = form.ctx;\n    invariant(this._canvas !== null, 'canvas is required');\n    ctx.drawImage(this._canvas, 0, 0);\n  }\n\n  async cleanup(): Promise<void> {\n    super.cleanup();\n\n    if (this._gl != null) {\n      // Delete mask textures to prevent memory leaks\n      this._maskTextures.forEach(texture => {\n        if (texture != null && this._gl != null) {\n          this._gl.deleteTexture(texture);\n        }\n      });\n      this._maskTextures = [];\n    }\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/CutoutGLEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport BaseGLEffect from '@/common/components/video/effects/BaseGLEffect';\nimport {\n  EffectFrameContext,\n  EffectInit,\n} from '@/common/components/video/effects/Effect';\nimport fragmentShaderSource from '@/common/components/video/effects/shaders/Cutout.frag?raw';\nimport vertexShaderSource from '@/common/components/video/effects/shaders/DefaultVert.vert?raw';\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport {preAllocateTextures} from '@/common/utils/ShaderUtils';\nimport {RLEObject, decode} from '@/jscocotools/mask';\nimport invariant from 'invariant';\nimport {CanvasForm} from 'pts';\n\nexport default class CutoutGLEffect extends BaseGLEffect {\n  private _numMasks: number = 0;\n  private _numMasksUniformLocation: WebGLUniformLocation | null = null;\n\n  // Must from start 1, main texture takes.\n  private _masksTextureUnitStart: number = 1;\n  private _maskTextures: WebGLTexture[] = [];\n\n  constructor() {\n    super(4);\n    this.vertexShaderSource = vertexShaderSource;\n    this.fragmentShaderSource = fragmentShaderSource;\n  }\n\n  protected setupUniforms(\n    gl: WebGL2RenderingContext,\n    program: WebGLProgram,\n    init: EffectInit,\n  ): void {\n    super.setupUniforms(gl, program, init);\n\n    this._numMasksUniformLocation = gl.getUniformLocation(program, 'uNumMasks');\n    gl.uniform1i(this._numMasksUniformLocation, this._numMasks);\n\n    // We know the max number of textures, pre-allocate 3.\n    this._maskTextures = preAllocateTextures(gl, 3);\n  }\n\n  apply(form: CanvasForm, context: EffectFrameContext, _tracklets: Tracklet[]) {\n    const gl = this._gl;\n    const program = this._program;\n\n    if (!program) {\n      return;\n    }\n    invariant(gl !== null, 'WebGL2 context is required');\n\n    gl.clearColor(0.0, 0.0, 0.0, 1.0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    // dynamic uniforms per frame\n    const contrastValue = [1.0, 1.6, 0.75, 0.0][this.variant % 4];\n    gl.uniform1f(gl.getUniformLocation(program, 'uContrast'), contrastValue);\n    gl.uniform1i(this._numMasksUniformLocation, context.masks.length);\n\n    gl.activeTexture(gl.TEXTURE0);\n    gl.bindTexture(gl.TEXTURE_2D, this._frameTexture);\n    gl.texImage2D(\n      gl.TEXTURE_2D,\n      0,\n      gl.RGBA,\n      context.width,\n      context.height,\n      0,\n      gl.RGBA,\n      gl.UNSIGNED_BYTE,\n      context.frame,\n    );\n\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n\n    // Create and bind 2D textures for each mask\n    context.masks.forEach((mask, index) => {\n      const decodedMask = decode([mask.bitmap as RLEObject]);\n      const maskData = decodedMask.data as Uint8Array;\n      gl.activeTexture(gl.TEXTURE0 + index + this._masksTextureUnitStart);\n      gl.bindTexture(gl.TEXTURE_2D, this._maskTextures[index]);\n\n      // dynamic uniforms per mask\n      gl.uniform1i(\n        gl.getUniformLocation(program, `uMaskTexture${index}`),\n        this._masksTextureUnitStart + index,\n      );\n\n      gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        0,\n        gl.LUMINANCE,\n        context.height,\n        context.width,\n        0,\n        gl.LUMINANCE,\n        gl.UNSIGNED_BYTE,\n        maskData,\n      );\n    });\n\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n    // Unbind textures\n    gl.bindTexture(gl.TEXTURE_2D, null);\n    context.masks.forEach((_, index) => {\n      gl.activeTexture(gl.TEXTURE0 + index + this._masksTextureUnitStart);\n      gl.bindTexture(gl.TEXTURE_2D, null);\n    });\n\n    const ctx = form.ctx;\n    invariant(this._canvas !== null, 'canvas is required');\n    ctx.drawImage(this._canvas, 0, 0);\n  }\n\n  async cleanup(): Promise<void> {\n    super.cleanup();\n\n    if (this._gl != null) {\n      // Delete mask textures to prevent memory leaks\n      this._maskTextures.forEach(texture => {\n        if (texture != null && this._gl != null) {\n          this._gl.deleteTexture(texture);\n        }\n      });\n      this._maskTextures = [];\n    }\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/DesaturateEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport {CanvasForm} from 'pts';\nimport {AbstractEffect, EffectFrameContext} from './Effect';\n\nexport default class DesaturateEffect extends AbstractEffect {\n  constructor() {\n    super(3);\n  }\n\n  apply(form: CanvasForm, context: EffectFrameContext, _tracklets: Tracklet[]) {\n    form.ctx.save();\n    form.ctx.filter = ['contrast(100%)', 'contrast(150%)', 'contrast(50%)'][\n      this.variant % 3\n    ];\n    form.image([0, 0], context.frame);\n    form.ctx.globalCompositeOperation = 'hue';\n    form.fillOnly('#fff').rect([\n      [0, 0],\n      [context.width, context.height],\n    ]);\n    form.ctx.restore();\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/Effect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {Effects} from '@/common/components/video/effects/Effects';\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport {RLEObject} from '@/jscocotools/mask';\nimport {CanvasForm} from 'pts';\n\nexport type EffectLayers = {\n  background: keyof Effects;\n  highlight: keyof Effects;\n};\n\nexport type EffectOptions = {\n  variant: number;\n};\n\nexport type EffectInit = {\n  width: number;\n  height: number;\n  gl?: WebGL2RenderingContext;\n  canvas?: OffscreenCanvas;\n};\n\nexport type EffectMask = {\n  bitmap: ImageBitmap | RLEObject;\n  bounds: [[number, number], [number, number]];\n};\n\nexport type EffectActionPoint = {\n  objectId: number;\n  position: [number, number];\n};\n\nexport type EffectFrameContext = {\n  frameIndex: number;\n  totalFrames: number;\n  fps: number;\n  width: number;\n  height: number;\n  masks: EffectMask[];\n  maskColors: string[];\n  frame: ImageBitmap;\n  timeParameter?: number;\n  actionPoint: EffectActionPoint | null;\n};\n\nexport interface Effect {\n  variant: number;\n  numVariants: number;\n  nextVariant(): void;\n  setup(init: EffectInit): Promise<void>;\n  update(options: EffectOptions): Promise<void>;\n  cleanup(): Promise<void>;\n  apply(\n    form: CanvasForm,\n    context: EffectFrameContext,\n    tracklets: Tracklet[],\n  ): void;\n}\n\nexport abstract class AbstractEffect implements Effect {\n  public numVariants: number;\n  public variant: number;\n\n  constructor(numVariants: number) {\n    this.numVariants = numVariants;\n    this.variant = 0;\n  }\n\n  nextVariant() {\n    // Cycle through variants\n    this.variant = (this.variant + 1) % this.numVariants;\n  }\n\n  async setup(_init: EffectInit): Promise<void> {\n    // noop\n  }\n\n  async update(options: EffectOptions): Promise<void> {\n    this.variant = options.variant;\n  }\n\n  async cleanup(): Promise<void> {\n    // noop\n  }\n\n  abstract apply(\n    form: CanvasForm,\n    context: EffectFrameContext,\n    tracklets: Tracklet[],\n  ): void;\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/EffectUtils.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport invariant from 'invariant';\nimport {Group} from 'pts';\nimport {EffectFrameContext} from './Effect';\n\nexport type MaskCanvas = {\n  maskCanvas: OffscreenCanvas;\n  bounds: number[][];\n  scaleX: number;\n  scaleY: number;\n};\n\nimport {Effects} from '@/common/components/video/effects/Effects';\nimport type {CarbonIconType} from '@carbon/icons-react';\nimport {\n  AppleDash,\n  Asterisk,\n  Barcode,\n  CenterCircle,\n  ColorPalette,\n  ColorSwitch,\n  Development,\n  Erase,\n  FaceWink,\n  Humidity,\n  Image,\n  Overlay,\n  TextFont,\n} from '@carbon/icons-react';\n\nexport type DemoEffect = {\n  title: string;\n  Icon: CarbonIconType;\n  effectName: keyof Effects;\n};\n\nexport const backgroundEffects: DemoEffect[] = [\n  {title: 'Original', Icon: Image, effectName: 'Original'},\n  {title: 'Erase', Icon: Erase, effectName: 'EraseBackground'},\n  {\n    title: 'Gradient',\n    Icon: ColorPalette,\n    effectName: 'Gradient',\n  },\n  {\n    title: 'Pixelate',\n    Icon: Development,\n    effectName: 'Pixelate',\n  },\n  {title: 'Desaturate', Icon: ColorSwitch, effectName: 'Desaturate'},\n  {title: 'Text', Icon: TextFont, effectName: 'BackgroundText'},\n  {title: 'Blur', Icon: Humidity, effectName: 'BackgroundBlur'},\n  {title: 'Outline', Icon: AppleDash, effectName: 'Sobel'},\n];\n\nexport const highlightEffects: DemoEffect[] = [\n  {title: 'Original', Icon: Image, effectName: 'Cutout'},\n  {title: 'Erase', Icon: Erase, effectName: 'EraseForeground'},\n  {title: 'Gradient', Icon: ColorPalette, effectName: 'VibrantMask'},\n  {title: 'Pixelate', Icon: Development, effectName: 'PixelateMask'},\n  {\n    title: 'Overlay',\n    Icon: Overlay,\n    effectName: 'Overlay',\n  },\n  {title: 'Emoji', Icon: FaceWink, effectName: 'Replace'},\n  {title: 'Burst', Icon: Asterisk, effectName: 'Burst'},\n  {title: 'Spotlight', Icon: CenterCircle, effectName: 'Scope'},\n];\n\nexport const moreEffects: DemoEffect[] = [\n  {title: 'Noisy', Icon: Barcode, effectName: 'NoisyMask'},\n];\n\n// Store existing content in a temporary canvas\n// This can be used in HighlightEffect composite blending, so that the existing background effect can be put back via \"destination-over\"\nexport function copyCanvasContent(\n  ctx: CanvasRenderingContext2D,\n  effectContext: EffectFrameContext,\n): OffscreenCanvas {\n  const {width, height} = effectContext;\n  const previousContent = ctx.getImageData(0, 0, width, height);\n  const tempCanvas = new OffscreenCanvas(width, height);\n  const tempCtx = tempCanvas.getContext('2d');\n  tempCtx?.putImageData(previousContent, 0, 0);\n  return tempCanvas;\n}\n\nexport function isInvalidMask(bound: number[][] | Group) {\n  return (\n    bound[0].length < 2 ||\n    bound[1].length < 2 ||\n    bound[1][0] - bound[0][0] < 1 ||\n    bound[1][1] - bound[0][1] < 1\n  );\n}\n\nexport type MaskRenderingData = {\n  canvas: OffscreenCanvas;\n  scale: number[];\n  bounds: number[][];\n};\n\nexport class EffectLayer {\n  canvas: OffscreenCanvas;\n  ctx: OffscreenCanvasRenderingContext2D;\n  width: number;\n  height: number;\n\n  constructor(context: EffectFrameContext) {\n    this.canvas = new OffscreenCanvas(context.width, context.height);\n    const ctx = this.canvas.getContext('2d');\n    invariant(ctx !== null, 'context cannot be  null');\n    this.ctx = ctx;\n    this.width = context.width;\n    this.height = context.height;\n  }\n\n  image(source: CanvasImageSourceWebCodecs) {\n    this.ctx.drawImage(source, 0, 0);\n  }\n\n  filter(filterString: string) {\n    this.ctx.filter = filterString;\n  }\n\n  composite(blend: GlobalCompositeOperation) {\n    this.ctx.globalCompositeOperation = blend;\n  }\n\n  fill(color: string) {\n    this.ctx.fillStyle = color;\n    this.ctx.fillRect(0, 0, this.width, this.height);\n  }\n\n  clear() {\n    this.ctx.clearRect(0, 0, this.width, this.height);\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/Effects.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport BackgroundTextEffect from './BackgroundTextEffect';\nimport DesaturateEffect from './DesaturateEffect';\nimport {Effect} from './Effect';\nimport EraseBackgroundEffect from './EraseBackgroundEffect';\nimport OriginalEffect from './OriginalEffect';\nimport OverlayEffect from './OverlayEffect';\nimport ArrowGLEffect from './ArrowGLEffect';\nimport BackgroundBlurEffect from './BackgroundBlurEffect';\nimport BurstGLEffect from './BurstGLEffect';\nimport CutoutGLEffect from './CutoutGLEffect';\nimport EraseForegroundGLEffect from './EraseForegroundGLEffect';\nimport GradientEffect from './GradientEffect';\nimport NoisyMaskEffect from './NoisyMaskEffect';\nimport PixelateEffect from './PixelateEffect';\nimport PixelateMaskGLEffect from './PixelateMaskGLEffect';\nimport ReplaceGLEffect from './ReplaceGLEffect';\nimport ScopeGLEffect from './ScopeGLEffect';\nimport SobelEffect from './SobelEffect';\nimport VibrantMaskEffect from './VibrantMaskEffect';\n\nexport type Effects = {\n  /* Backgrounds */\n  Original: Effect;\n  EraseBackground: Effect;\n  Desaturate: Effect;\n  Pixelate: Effect;\n  Sobel: Effect;\n  BackgroundText: Effect;\n  BackgroundBlur: Effect;\n  Gradient: Effect;\n\n  /* Highlights */\n  Overlay: Effect;\n  EraseForeground: Effect;\n  Cutout: Effect;\n  Scope: Effect;\n  VibrantMask: Effect;\n  Replace: Effect;\n  Burst: Effect;\n  PixelateMask: Effect;\n  Arrow: Effect;\n\n  /* More Effects */\n  NoisyMask: Effect;\n};\n\nexport default {\n  /* Backgrounds */\n  Original: new OriginalEffect(),\n  EraseBackground: new EraseBackgroundEffect(),\n  Desaturate: new DesaturateEffect(),\n  Pixelate: new PixelateEffect(),\n  Sobel: new SobelEffect(),\n  BackgroundText: new BackgroundTextEffect(),\n  BackgroundBlur: new BackgroundBlurEffect(),\n  Gradient: new GradientEffect(),\n\n  /* Highlights */\n  Overlay: new OverlayEffect(),\n  EraseForeground: new EraseForegroundGLEffect(),\n  Cutout: new CutoutGLEffect(),\n  Scope: new ScopeGLEffect(),\n  VibrantMask: new VibrantMaskEffect(),\n  Replace: new ReplaceGLEffect(),\n  Burst: new BurstGLEffect(),\n  PixelateMask: new PixelateMaskGLEffect(),\n  Arrow: new ArrowGLEffect(),\n\n  /* More Effects */\n  NoisyMask: new NoisyMaskEffect(),\n} as Effects;\n\nexport enum EffectIndex {\n  BACKGROUND = 0,\n  HIGHLIGHT = 1,\n}\n\ntype EffectComboItem = {name: keyof Effects; variant: number};\n\nexport type EffectsCombo = [EffectComboItem, EffectComboItem];\n\nexport const effectPresets: EffectsCombo[] = [\n  [\n    {name: 'Original', variant: 0},\n    {name: 'Overlay', variant: 0},\n  ],\n  [\n    {name: 'Desaturate', variant: 0},\n    {name: 'Burst', variant: 2},\n  ],\n  [\n    {name: 'Desaturate', variant: 1},\n    {name: 'VibrantMask', variant: 0},\n  ],\n  [\n    {name: 'BackgroundText', variant: 1},\n    {name: 'Cutout', variant: 0},\n  ],\n  [\n    {name: 'Original', variant: 0},\n    {name: 'PixelateMask', variant: 1},\n  ],\n  [\n    {name: 'Desaturate', variant: 2},\n    {name: 'Cutout', variant: 0},\n  ],\n  [\n    {name: 'Sobel', variant: 3},\n    {name: 'Cutout', variant: 1},\n  ],\n  [\n    {name: 'Sobel', variant: 2},\n    {name: 'EraseForeground', variant: 2},\n  ],\n  [\n    {name: 'EraseBackground', variant: 0},\n    {name: 'EraseForeground', variant: 0},\n  ],\n];\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/EraseBackgroundEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport {CanvasForm} from 'pts';\nimport {AbstractEffect, EffectFrameContext} from './Effect';\n\nexport default class EraseBackgroundEffect extends AbstractEffect {\n  constructor() {\n    super(3);\n  }\n\n  apply(\n    form: CanvasForm,\n    context: EffectFrameContext,\n    _tracklets: Tracklet[],\n  ): void {\n    const fillColor = ['#000', '#fff', '#0f0'][this.variant % 3];\n    form.fillOnly(fillColor).rect([\n      [0, 0],\n      [context.width, context.height],\n    ]);\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/EraseForegroundEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport {CanvasForm} from 'pts';\nimport {AbstractEffect, EffectFrameContext} from './Effect';\nimport {EffectLayer} from './EffectUtils';\n\nexport default class EraseForegroundEffect extends AbstractEffect {\n  constructor() {\n    super(3);\n  }\n\n  apply(\n    form: CanvasForm,\n    context: EffectFrameContext,\n    _tracklets: Tracklet[],\n  ): void {\n    const effect = new EffectLayer(context);\n    const fillColor = ['#fff', '#000', '#0f0'][this.variant % 3];\n    for (const mask of context.masks) {\n      effect.image(mask.bitmap as ImageBitmap);\n      effect.composite('source-in');\n      effect.fill(fillColor);\n    }\n    form.image([0, 0], effect.canvas);\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/EraseForegroundGLEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport BaseGLEffect from '@/common/components/video/effects/BaseGLEffect';\nimport {\n  EffectFrameContext,\n  EffectInit,\n} from '@/common/components/video/effects/Effect';\nimport vertexShaderSource from '@/common/components/video/effects/shaders/DefaultVert.vert?raw';\nimport fragmentShaderSource from '@/common/components/video/effects/shaders/EraseForeground.frag?raw';\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport {preAllocateTextures} from '@/common/utils/ShaderUtils';\nimport {RLEObject, decode} from '@/jscocotools/mask';\nimport invariant from 'invariant';\nimport {CanvasForm} from 'pts';\n\nexport default class EraseForegroundGLEffect extends BaseGLEffect {\n  private _numMasks: number = 0;\n  private _numMasksUniformLocation: WebGLUniformLocation | null = null;\n\n  private _maskTextures: WebGLTexture[] = [];\n\n  constructor() {\n    super(3);\n    this.vertexShaderSource = vertexShaderSource;\n    this.fragmentShaderSource = fragmentShaderSource;\n  }\n\n  protected setupUniforms(\n    gl: WebGL2RenderingContext,\n    program: WebGLProgram,\n    init: EffectInit,\n  ): void {\n    super.setupUniforms(gl, program, init);\n\n    this._numMasksUniformLocation = gl.getUniformLocation(program, 'uNumMasks');\n    gl.uniform1i(this._numMasksUniformLocation, this._numMasks);\n\n    // We know the max number of textures, pre-allocate 3.\n    this._maskTextures = preAllocateTextures(gl, 3);\n  }\n\n  apply(form: CanvasForm, context: EffectFrameContext, _tracklets: Tracklet[]) {\n    const gl = this._gl;\n    const program = this._program;\n\n    invariant(gl !== null, 'WebGL2 context is required');\n    invariant(program !== null, 'Not WebGL program found');\n\n    const fillColor = [\n      [1, 1, 1],\n      [0, 0, 0],\n      [0, 1, 0],\n    ][this.variant % 3];\n\n    gl.clearColor(0.0, 0.0, 0.0, 1.0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    gl.uniform1i(this._numMasksUniformLocation, context.masks.length);\n    gl.uniform3fv(gl.getUniformLocation(program, 'uBgColor'), fillColor);\n\n    context.masks.forEach((mask, index) => {\n      const decodedMask = decode([mask.bitmap as RLEObject]);\n      const maskData = decodedMask.data as Uint8Array;\n      gl.activeTexture(gl.TEXTURE0 + index);\n      gl.bindTexture(gl.TEXTURE_2D, this._maskTextures[index]);\n\n      gl.uniform1i(\n        gl.getUniformLocation(program, `uMaskTexture${index}`),\n        index,\n      );\n\n      gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        0,\n        gl.LUMINANCE,\n        context.height,\n        context.width,\n        0,\n        gl.LUMINANCE,\n        gl.UNSIGNED_BYTE,\n        maskData,\n      );\n    });\n\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n    // Unbind textures\n    gl.bindTexture(gl.TEXTURE_2D, null);\n    context.masks.forEach((_, index) => {\n      gl.activeTexture(gl.TEXTURE0 + index);\n      gl.bindTexture(gl.TEXTURE_2D, null);\n    });\n\n    const ctx = form.ctx;\n    invariant(this._canvas !== null, 'canvas is required');\n\n    if (context.masks.length) {\n      ctx.drawImage(this._canvas, 0, 0);\n    }\n  }\n\n  async cleanup(): Promise<void> {\n    super.cleanup();\n\n    if (this._gl != null) {\n      // Delete mask textures to prevent memory leaks\n      this._maskTextures.forEach(texture => {\n        if (texture != null && this._gl != null) {\n          this._gl.deleteTexture(texture);\n        }\n      });\n      this._maskTextures = [];\n    }\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/GradientEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport BaseGLEffect from '@/common/components/video/effects/BaseGLEffect';\nimport {\n  EffectFrameContext,\n  EffectInit,\n} from '@/common/components/video/effects/Effect';\nimport vertexShaderSource from '@/common/components/video/effects/shaders/DefaultVert.vert?raw';\nimport fragmentShaderSource from '@/common/components/video/effects/shaders/Gradient.frag?raw';\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport {generateLUTDATA, load3DLUT} from '@/common/utils/ShaderUtils';\nimport invariant from 'invariant';\nimport {CanvasForm} from 'pts';\n\nexport default class GradientEffect extends BaseGLEffect {\n  private lutSize: number = 2;\n  private _lutTextures: WebGLTexture[] = [];\n\n  // Must be 1, main background texture takes 0.\n  private _extraTextureUnit: number = 1;\n\n  constructor() {\n    super(3);\n\n    this.vertexShaderSource = vertexShaderSource;\n    this.fragmentShaderSource = fragmentShaderSource;\n  }\n\n  protected setupUniforms(\n    gl: WebGL2RenderingContext,\n    program: WebGLProgram,\n    init: EffectInit,\n  ): void {\n    super.setupUniforms(gl, program, init);\n\n    gl.uniform1i(\n      gl.getUniformLocation(program, 'uColorGradeLUT'),\n      this._extraTextureUnit,\n    );\n\n    this._lutTextures = []; // clear any previous pool of textures\n\n    for (let i = 0; i < this.numVariants; i++) {\n      const _lutData = generateLUTDATA(this.lutSize);\n      const _extraTexture = load3DLUT(gl, this.lutSize, _lutData);\n      this._lutTextures.push(_extraTexture as WebGLTexture);\n    }\n  }\n\n  apply(form: CanvasForm, context: EffectFrameContext, _tracklets: Tracklet[]) {\n    const gl = this._gl;\n    const program = this._program;\n\n    if (!program) {\n      return;\n    }\n    invariant(gl !== null, 'WebGL2 context is required');\n\n    gl.clearColor(0.0, 0.0, 0.0, 1.0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    // Bind the LUT texture to texture unit 1\n    const lutTexture = this._lutTextures[this.variant];\n    gl.activeTexture(gl.TEXTURE1);\n    gl.bindTexture(gl.TEXTURE_3D, lutTexture);\n\n    gl.activeTexture(gl.TEXTURE0);\n    gl.bindTexture(gl.TEXTURE_2D, this._frameTexture);\n    gl.texImage2D(\n      gl.TEXTURE_2D,\n      0,\n      gl.RGBA,\n      context.width,\n      context.height,\n      0,\n      gl.RGBA,\n      gl.UNSIGNED_BYTE,\n      context.frame,\n    );\n\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n    const ctx = form.ctx;\n    invariant(this._canvas !== null, 'canvas is required');\n    ctx.drawImage(this._canvas, 0, 0);\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/NoisyMaskEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport BaseGLEffect from '@/common/components/video/effects/BaseGLEffect';\nimport {\n  EffectFrameContext,\n  EffectInit,\n} from '@/common/components/video/effects/Effect';\nimport vertexShaderSource from '@/common/components/video/effects/shaders/DefaultVert.vert?raw';\nimport fragmentShaderSource from '@/common/components/video/effects/shaders/NoisyMask.frag?raw';\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport {RLEObject, decode} from '@/jscocotools/mask';\nimport invariant from 'invariant';\nimport {CanvasForm} from 'pts';\n\nexport default class NoisyMaskEffect extends BaseGLEffect {\n  private _numMasks: number = 0;\n  private _numMasksUniformLocation: WebGLUniformLocation | null = null;\n  private _currentFrameLocation: WebGLUniformLocation | null = null;\n\n  constructor() {\n    super(1);\n    this.vertexShaderSource = vertexShaderSource;\n    this.fragmentShaderSource = fragmentShaderSource;\n  }\n\n  protected setupUniforms(\n    gl: WebGL2RenderingContext,\n    program: WebGLProgram,\n    init: EffectInit,\n  ): void {\n    super.setupUniforms(gl, program, init);\n\n    this._numMasksUniformLocation = gl.getUniformLocation(program, 'uNumMasks');\n    gl.uniform1i(this._numMasksUniformLocation, this._numMasks);\n\n    this._currentFrameLocation = gl.getUniformLocation(\n      program,\n      'uCurrentFrame',\n    );\n    gl.uniform1f(this._currentFrameLocation, 0);\n  }\n\n  apply(form: CanvasForm, context: EffectFrameContext, _tracklets: Tracklet[]) {\n    const gl = this._gl;\n    const program = this._program;\n\n    if (!program) {\n      return;\n    }\n    invariant(gl !== null, 'WebGL2 context is required');\n\n    gl.clearColor(0.0, 0.0, 0.0, 1.0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    // dynamic uniforms per frame\n    gl.uniform1f(this._currentFrameLocation, context.frameIndex);\n    gl.uniform1i(this._numMasksUniformLocation, context.masks.length);\n\n    // Create and bind 2D textures for each mask\n    context.masks.forEach((mask, index) => {\n      const maskTexture = gl.createTexture();\n      const decodedMask = decode([mask.bitmap as RLEObject]);\n      const maskData = decodedMask.data as Uint8Array;\n      gl.activeTexture(gl.TEXTURE0 + index);\n      gl.bindTexture(gl.TEXTURE_2D, maskTexture);\n\n      // dynamic uniforms per mask\n      gl.uniform1i(\n        gl.getUniformLocation(program, `uMaskTexture${index}`),\n        index,\n      );\n\n      gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        0,\n        gl.LUMINANCE,\n        context.height,\n        context.width,\n        0,\n        gl.LUMINANCE,\n        gl.UNSIGNED_BYTE,\n        maskData,\n      );\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n\n      gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n    });\n\n    const ctx = form.ctx;\n    invariant(this._canvas !== null, 'canvas is required');\n    ctx.drawImage(this._canvas, 0, 0);\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/OriginalEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport {CanvasForm} from 'pts';\nimport {AbstractEffect, EffectFrameContext} from './Effect';\n\nexport default class OriginalEffect extends AbstractEffect {\n  constructor() {\n    super(3);\n  }\n\n  apply(\n    form: CanvasForm,\n    context: EffectFrameContext,\n    _tracklets: Tracklet[],\n  ): void {\n    form.ctx.save();\n    if (this.variant % 3 === 1) {\n      form.ctx.filter = 'saturate(120%) contrast(120%)';\n    } else if (this.variant % 3 === 2) {\n      form.ctx.filter = 'brightness(70%) contrast(115%)';\n    }\n\n    form.image([0, 0], context.frame);\n    form.ctx.restore();\n\n    if (this.variant % 3 === 2) {\n      form.fillOnly('#00000066').rect([\n        [0, 0],\n        [context.width, context.height],\n      ]);\n    }\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/OverlayEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {hexToRgb} from '@/common/components/video/editor/VideoEditorUtils';\nimport BaseGLEffect from '@/common/components/video/effects/BaseGLEffect';\nimport {\n  EffectFrameContext,\n  EffectInit,\n} from '@/common/components/video/effects/Effect';\nimport vertexShaderSource from '@/common/components/video/effects/shaders/DefaultVert.vert?raw';\nimport fragmentShaderSource from '@/common/components/video/effects/shaders/Overlay.frag?raw';\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport {\n  findIndexByTrackletId,\n  preAllocateTextures,\n} from '@/common/utils/ShaderUtils';\nimport {RLEObject, decode} from '@/jscocotools/mask';\nimport invariant from 'invariant';\nimport {CanvasForm} from 'pts';\n\nexport default class OverlayEffect extends BaseGLEffect {\n  private _numMasks: number = 0;\n  private _numMasksUniformLocation: WebGLUniformLocation | null = null;\n\n  // Must start from 1, main texture takes 0.\n  private _masksTextureUnitStart: number = 1;\n  private _maskTextures: WebGLTexture[] = [];\n  private _clickPosition: number[] | null = null;\n  private _activeMask: number = 0;\n\n  constructor() {\n    super(8);\n    this.vertexShaderSource = vertexShaderSource;\n    this.fragmentShaderSource = fragmentShaderSource;\n  }\n\n  protected setupUniforms(\n    gl: WebGL2RenderingContext,\n    program: WebGLProgram,\n    init: EffectInit,\n  ): void {\n    super.setupUniforms(gl, program, init);\n\n    this._numMasksUniformLocation = gl.getUniformLocation(program, 'uNumMasks');\n    gl.uniform1i(this._numMasksUniformLocation, this._numMasks);\n\n    // We know the max number of textures, pre-allocate 3.\n    this._maskTextures = preAllocateTextures(gl, 3);\n  }\n\n  apply(form: CanvasForm, context: EffectFrameContext, _tracklets: Tracklet[]) {\n    const gl = this._gl;\n    const program = this._program;\n\n    invariant(gl !== null, 'WebGL2 context is required');\n    invariant(program !== null, 'Not WebGL program found');\n\n    gl.clearColor(0.0, 0.0, 0.0, 1.0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    const opacity = [0.5, 0.75, 0.35, 0.95][this.variant % 4];\n    gl.uniform1f(\n      gl.getUniformLocation(program, 'uTime'),\n      context.timeParameter ?? 1.5, // Pass a constant value when no time parameter\n    );\n    gl.uniform1f(gl.getUniformLocation(program, 'uOpacity'), opacity);\n    gl.uniform1i(this._numMasksUniformLocation, context.masks.length);\n    gl.uniform1i(\n      gl.getUniformLocation(program, 'uBorder'),\n      this.variant % this.numVariants < 4 ? 1 : 0,\n    );\n\n    if (context.actionPoint) {\n      const clickPos = [\n        context.actionPoint.position[0] / context.width,\n        context.actionPoint.position[1] / context.height,\n      ];\n      this._clickPosition = clickPos;\n      this._activeMask = findIndexByTrackletId(\n        context.actionPoint.objectId,\n        _tracklets,\n      );\n    }\n\n    gl.uniform2fv(\n      gl.getUniformLocation(program, 'uClickPos'),\n      this._clickPosition ?? [0, 0],\n    );\n    gl.uniform1i(\n      gl.getUniformLocation(program, 'uActiveMask'),\n      this._activeMask,\n    );\n\n    // Activate original frame texture\n    gl.activeTexture(gl.TEXTURE0);\n    gl.bindTexture(gl.TEXTURE_2D, this._frameTexture);\n    gl.texImage2D(\n      gl.TEXTURE_2D,\n      0,\n      gl.RGBA,\n      context.width,\n      context.height,\n      0,\n      gl.RGBA,\n      gl.UNSIGNED_BYTE,\n      context.frame,\n    );\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n\n    context.masks.forEach((mask, index) => {\n      const decodedMask = decode([mask.bitmap as RLEObject]);\n      const maskData = decodedMask.data as Uint8Array;\n      gl.activeTexture(gl.TEXTURE0 + index + this._masksTextureUnitStart);\n      gl.bindTexture(gl.TEXTURE_2D, this._maskTextures[index]);\n\n      gl.uniform1i(\n        gl.getUniformLocation(program, `uMaskTexture${index}`),\n        this._masksTextureUnitStart + index,\n      );\n\n      const color = hexToRgb(context.maskColors[index]);\n      gl.uniform4f(\n        gl.getUniformLocation(program, `uMaskColor${index}`),\n        color.r,\n        color.g,\n        color.b,\n        color.a,\n      );\n\n      // 1 byte aligment\n      gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        0,\n        gl.LUMINANCE,\n        context.height,\n        context.width,\n        0,\n        gl.LUMINANCE,\n        gl.UNSIGNED_BYTE,\n        maskData,\n      );\n    });\n\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n    // Unbind textures\n    gl.bindTexture(gl.TEXTURE_2D, null);\n    context.masks.forEach((_, index) => {\n      gl.activeTexture(gl.TEXTURE0 + index + this._masksTextureUnitStart);\n      gl.bindTexture(gl.TEXTURE_2D, null);\n    });\n\n    const ctx = form.ctx;\n    invariant(this._canvas !== null, 'canvas is required');\n\n    ctx.drawImage(this._canvas, 0, 0);\n    this._clickPosition = null;\n  }\n\n  async cleanup(): Promise<void> {\n    super.cleanup();\n\n    if (this._gl != null) {\n      // Delete mask textures to prevent memory leaks\n      this._maskTextures.forEach(texture => {\n        if (texture != null && this._gl != null) {\n          this._gl.deleteTexture(texture);\n        }\n      });\n      this._maskTextures = [];\n    }\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/PixelateEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport BaseGLEffect from '@/common/components/video/effects/BaseGLEffect';\nimport {\n  EffectFrameContext,\n  EffectInit,\n} from '@/common/components/video/effects/Effect';\nimport vertexShaderSource from '@/common/components/video/effects/shaders/DefaultVert.vert?raw';\nimport fragmentShaderSource from '@/common/components/video/effects/shaders/Pixelate.frag?raw';\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport invariant from 'invariant';\nimport {CanvasForm} from 'pts';\n\nexport default class PixelateEffect extends BaseGLEffect {\n  private _blockSize: number = 10.0;\n\n  constructor() {\n    super(3);\n\n    this.vertexShaderSource = vertexShaderSource;\n    this.fragmentShaderSource = fragmentShaderSource;\n  }\n\n  protected setupUniforms(\n    gl: WebGL2RenderingContext,\n    program: WebGLProgram,\n    init: EffectInit,\n  ): void {\n    super.setupUniforms(gl, program, init);\n\n    gl.uniform1f(gl.getUniformLocation(program, 'uBlockSize'), this._blockSize);\n  }\n\n  apply(form: CanvasForm, context: EffectFrameContext, _tracklets: Tracklet[]) {\n    const gl = this._gl;\n    const program = this._program;\n\n    if (!program) {\n      return;\n    }\n    invariant(gl !== null, 'WebGL2 context is required');\n\n    gl.clearColor(0.0, 0.0, 0.0, 1.0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    const blockSize = [10, 20, 30][this.variant];\n\n    // dynamic uniforms per frame\n    gl.uniform1f(gl.getUniformLocation(program, 'uBlockSize'), blockSize);\n\n    gl.activeTexture(gl.TEXTURE0);\n    gl.bindTexture(gl.TEXTURE_2D, this._frameTexture);\n    gl.texImage2D(\n      gl.TEXTURE_2D,\n      0,\n      gl.RGBA,\n      context.width,\n      context.height,\n      0,\n      gl.RGBA,\n      gl.UNSIGNED_BYTE,\n      context.frame,\n    );\n\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n    gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);\n\n    // Apply shader\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n    const ctx = form.ctx;\n    invariant(this._canvas !== null, 'canvas is required');\n    ctx.drawImage(this._canvas, 0, 0);\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/PixelateMaskGLEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport BaseGLEffect from '@/common/components/video/effects/BaseGLEffect';\nimport {\n  EffectFrameContext,\n  EffectInit,\n} from '@/common/components/video/effects/Effect';\nimport vertexShaderSource from '@/common/components/video/effects/shaders/DefaultVert.vert?raw';\nimport fragmentShaderSource from '@/common/components/video/effects/shaders/PixelateMask.frag?raw';\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport {preAllocateTextures} from '@/common/utils/ShaderUtils';\nimport {RLEObject, decode} from '@/jscocotools/mask';\nimport invariant from 'invariant';\nimport {CanvasForm} from 'pts';\n\nexport default class PixelateMaskGLEffect extends BaseGLEffect {\n  private _numMasks: number = 0;\n  private _numMasksUniformLocation: WebGLUniformLocation | null = null;\n\n  // Must from start 1, main texture takes.\n  private _masksTextureUnitStart: number = 1;\n  private _maskTextures: WebGLTexture[] = [];\n\n  constructor() {\n    super(3);\n    this.vertexShaderSource = vertexShaderSource;\n    this.fragmentShaderSource = fragmentShaderSource;\n  }\n\n  protected setupUniforms(\n    gl: WebGL2RenderingContext,\n    program: WebGLProgram,\n    init: EffectInit,\n  ): void {\n    super.setupUniforms(gl, program, init);\n\n    this._numMasksUniformLocation = gl.getUniformLocation(program, 'uNumMasks');\n    gl.uniform1i(this._numMasksUniformLocation, this._numMasks);\n\n    // We know the max number of textures, pre-allocate 3.\n    this._maskTextures = preAllocateTextures(gl, 3);\n  }\n\n  apply(form: CanvasForm, context: EffectFrameContext, _tracklets: Tracklet[]) {\n    const gl = this._gl;\n    const program = this._program;\n\n    if (!program) {\n      return;\n    }\n    invariant(gl !== null, 'WebGL2 context is required');\n\n    gl.clearColor(0.0, 0.0, 0.0, 1.0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    const blockSize = [10, 20, 30][this.variant];\n\n    // dynamic uniforms per frame\n    gl.uniform1i(this._numMasksUniformLocation, context.masks.length);\n    gl.uniform1f(gl.getUniformLocation(program, 'uBlockSize'), blockSize);\n\n    gl.activeTexture(gl.TEXTURE0);\n    gl.bindTexture(gl.TEXTURE_2D, this._frameTexture);\n    gl.texImage2D(\n      gl.TEXTURE_2D,\n      0,\n      gl.RGBA,\n      context.width,\n      context.height,\n      0,\n      gl.RGBA,\n      gl.UNSIGNED_BYTE,\n      context.frame,\n    );\n\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n\n    // Create and bind 2D textures for each mask\n    context.masks.forEach((mask, index) => {\n      const decodedMask = decode([mask.bitmap as RLEObject]);\n      const maskData = decodedMask.data as Uint8Array;\n      gl.activeTexture(gl.TEXTURE0 + index + this._masksTextureUnitStart);\n      gl.bindTexture(gl.TEXTURE_2D, this._maskTextures[index]);\n      gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        0,\n        gl.LUMINANCE,\n        context.height,\n        context.width,\n        0,\n        gl.LUMINANCE,\n        gl.UNSIGNED_BYTE,\n        maskData,\n      );\n\n      // dynamic uniforms per mask\n      gl.uniform1i(\n        gl.getUniformLocation(program, `uMaskTexture${index}`),\n        this._masksTextureUnitStart + index,\n      );\n    });\n\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n    // Unbind textures\n    gl.bindTexture(gl.TEXTURE_2D, null);\n    context.masks.forEach((_, index) => {\n      gl.activeTexture(gl.TEXTURE0 + index + this._masksTextureUnitStart);\n      gl.bindTexture(gl.TEXTURE_2D, null);\n    });\n\n    const ctx = form.ctx;\n    invariant(this._canvas !== null, 'canvas is required');\n    ctx.drawImage(this._canvas, 0, 0);\n  }\n\n  async cleanup(): Promise<void> {\n    super.cleanup();\n\n    if (this._gl != null) {\n      // Delete mask textures to prevent memory leaks\n      this._maskTextures.forEach(texture => {\n        if (texture != null && this._gl != null) {\n          this._gl.deleteTexture(texture);\n        }\n      });\n      this._maskTextures = [];\n    }\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/ReplaceGLEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport angeryIcon from '@/assets/icons/angery.png';\nimport heartIcon from '@/assets/icons/heart.png';\nimport whistleIcon from '@/assets/icons/whistle.png';\nimport BaseGLEffect from '@/common/components/video/effects/BaseGLEffect';\nimport {\n  EffectFrameContext,\n  EffectInit,\n} from '@/common/components/video/effects/Effect';\nimport vertexShaderSource from '@/common/components/video/effects/shaders/DefaultVert.vert?raw';\nimport fragmentShaderSource from '@/common/components/video/effects/shaders/Replace.frag?raw';\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport {normalizeBounds, preAllocateTextures} from '@/common/utils/ShaderUtils';\nimport {RLEObject, decode} from '@/jscocotools/mask';\nimport invariant from 'invariant';\nimport {CanvasForm} from 'pts';\n\nexport default class ReplaceGLEffect extends BaseGLEffect {\n  private _numMasks: number = 0;\n  private _numMasksUniformLocation: WebGLUniformLocation | null = null;\n  private _bitmap: ImageBitmap[] = [];\n  private _extraTextureUnit: number = 1;\n  private _extraTexture: WebGLTexture | null = null;\n  private _fillBg: number = 0;\n  private _fillBgLocation: WebGLUniformLocation | null = null;\n  private _masksTextureUnitStart: number = 2;\n  private _maskTextures: WebGLTexture[] = [];\n\n  constructor() {\n    super(6);\n    this.vertexShaderSource = vertexShaderSource;\n    this.fragmentShaderSource = fragmentShaderSource;\n  }\n\n  protected async setupUniforms(\n    gl: WebGL2RenderingContext,\n    program: WebGLProgram,\n    init: EffectInit,\n  ) {\n    super.setupUniforms(gl, program, init);\n    this._extraTexture = gl.createTexture();\n\n    this._numMasksUniformLocation = gl.getUniformLocation(program, 'uNumMasks');\n    gl.uniform1i(this._numMasksUniformLocation, this._numMasks);\n\n    this._fillBgLocation = gl.getUniformLocation(program, 'uFill');\n    gl.uniform1i(this._fillBgLocation, this._fillBg);\n\n    gl.uniform1i(\n      gl.getUniformLocation(program, 'uEmojiTexture'),\n      this._extraTextureUnit,\n    );\n\n    // We know the max number of textures, pre-allocate 3.\n    this._maskTextures = preAllocateTextures(gl, 3);\n\n    this._bitmap = []; // clear any previous pool of texture\n\n    let response = await fetch(angeryIcon);\n    let blob = await response.blob();\n    const angery = await createImageBitmap(blob);\n\n    response = await fetch(heartIcon);\n    blob = await response.blob();\n    const heart = await createImageBitmap(blob);\n\n    response = await fetch(whistleIcon);\n    blob = await response.blob();\n    const whistle = await createImageBitmap(blob);\n\n    this._bitmap = [angery, heart, whistle];\n  }\n\n  apply(form: CanvasForm, context: EffectFrameContext, _tracklets: Tracklet[]) {\n    const gl = this._gl;\n    const program = this._program;\n\n    invariant(gl !== null, 'WebGL2 context is required');\n    invariant(program !== null, 'Not WebGL program found');\n\n    const iconIndex = Math.floor(this.variant / 2) % this._bitmap.length;\n\n    if (this._bitmap === null) {\n      return;\n    }\n\n    gl.clearColor(0.0, 0.0, 0.0, 1.0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    // dynamic uniforms per frame\n    gl.uniform1i(this._numMasksUniformLocation, context.masks.length);\n    gl.uniform1i(this._fillBgLocation, this.variant % 2 === 0 ? 0 : 1);\n\n    // Bind the extra texture/emoji to texture unit 1\n    if (this._bitmap.length) {\n      gl.activeTexture(gl.TEXTURE0 + this._extraTextureUnit);\n      gl.bindTexture(gl.TEXTURE_2D, this._extraTexture);\n\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        0,\n        gl.RGBA,\n        this._bitmap[iconIndex].width,\n        this._bitmap[iconIndex].height,\n        0,\n        gl.RGBA,\n        gl.UNSIGNED_BYTE,\n        this._bitmap[iconIndex],\n      );\n\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n      gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n    }\n\n    context.masks.forEach((mask, index) => {\n      const decodedMask = decode([mask.bitmap as RLEObject]);\n      const maskData = decodedMask.data as Uint8Array;\n      gl.activeTexture(gl.TEXTURE0 + index + this._masksTextureUnitStart);\n      gl.bindTexture(gl.TEXTURE_2D, this._maskTextures[index]);\n\n      const boundaries = normalizeBounds(\n        mask.bounds[0],\n        mask.bounds[1],\n        context.width,\n        context.height,\n      );\n\n      gl.uniform1i(\n        gl.getUniformLocation(program, `uMaskTexture${index}`),\n        index + this._masksTextureUnitStart,\n      );\n      gl.uniform4fv(gl.getUniformLocation(program, `bbox${index}`), boundaries);\n\n      gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        0,\n        gl.LUMINANCE,\n        context.height,\n        context.width,\n        0,\n        gl.LUMINANCE,\n        gl.UNSIGNED_BYTE,\n        maskData,\n      );\n    });\n\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n    // Unbind textures\n    gl.bindTexture(gl.TEXTURE_2D, null);\n    context.masks.forEach((_, index) => {\n      gl.activeTexture(gl.TEXTURE0 + index + this._masksTextureUnitStart);\n      gl.bindTexture(gl.TEXTURE_2D, null);\n    });\n\n    const ctx = form.ctx;\n    invariant(this._canvas !== null, 'canvas is required');\n    ctx.drawImage(this._canvas, 0, 0);\n  }\n\n  async cleanup(): Promise<void> {\n    super.cleanup();\n\n    if (this._gl != null) {\n      // Delete mask textures to prevent memory leaks\n      this._maskTextures.forEach(texture => {\n        if (texture != null && this._gl != null) {\n          this._gl.deleteTexture(texture);\n        }\n      });\n      this._maskTextures = [];\n    }\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/ScopeGLEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {hexToRgb} from '@/common/components/video/editor/VideoEditorUtils';\nimport BaseGLEffect from '@/common/components/video/effects/BaseGLEffect';\nimport {\n  EffectFrameContext,\n  EffectInit,\n} from '@/common/components/video/effects/Effect';\nimport vertexShaderSource from '@/common/components/video/effects/shaders/DefaultVert.vert?raw';\nimport fragmentShaderSource from '@/common/components/video/effects/shaders/Scope.frag?raw';\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport {normalizeBounds, preAllocateTextures} from '@/common/utils/ShaderUtils';\nimport {RLEObject, decode} from '@/jscocotools/mask';\nimport invariant from 'invariant';\nimport {CanvasForm} from 'pts';\n\nexport default class ScopeGLEffect extends BaseGLEffect {\n  private _numMasks: number = 0;\n  private _numMasksUniformLocation: WebGLUniformLocation | null = null;\n\n  // Must from start 2, main texture takes 0 and 1.\n  private _masksTextureUnitStart: number = 2;\n  private _maskTextures: WebGLTexture[] = [];\n\n  constructor() {\n    super(6);\n    this.vertexShaderSource = vertexShaderSource;\n    this.fragmentShaderSource = fragmentShaderSource;\n  }\n\n  protected setupUniforms(\n    gl: WebGL2RenderingContext,\n    program: WebGLProgram,\n    init: EffectInit,\n  ): void {\n    super.setupUniforms(gl, program, init);\n\n    this._numMasksUniformLocation = gl.getUniformLocation(program, 'uNumMasks');\n    gl.uniform1i(this._numMasksUniformLocation, this._numMasks);\n\n    // We know the max number of textures, pre-allocate 3.\n    this._maskTextures = preAllocateTextures(gl, 3);\n  }\n\n  apply(form: CanvasForm, context: EffectFrameContext, _tracklets: Tracklet[]) {\n    const gl = this._gl;\n    const program = this._program;\n\n    if (!program) {\n      return;\n    }\n    invariant(gl !== null, 'WebGL2 context is required');\n\n    gl.clearColor(0.0, 0.0, 0.0, 1.0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    // dynamic uniforms per frame\n    gl.uniform1i(this._numMasksUniformLocation, context.masks.length);\n\n    gl.activeTexture(gl.TEXTURE0);\n    gl.bindTexture(gl.TEXTURE_2D, this._frameTexture);\n    gl.texImage2D(\n      gl.TEXTURE_2D,\n      0,\n      gl.RGBA,\n      context.width,\n      context.height,\n      0,\n      gl.RGBA,\n      gl.UNSIGNED_BYTE,\n      context.frame,\n    );\n\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n\n    // Create and bind 2D textures for each mask\n    context.masks.forEach((mask, index) => {\n      const decodedMask = decode([mask.bitmap as RLEObject]);\n      const maskData = decodedMask.data as Uint8Array;\n      gl.activeTexture(gl.TEXTURE0 + index + this._masksTextureUnitStart);\n      gl.bindTexture(gl.TEXTURE_2D, this._maskTextures[index]);\n\n      const boundaries = normalizeBounds(\n        mask.bounds[0],\n        mask.bounds[1],\n        context.width,\n        context.height,\n      );\n\n      const styleIndex = Math.floor(this.variant / 2) % 2;\n\n      // dynamic uniforms per mask\n      gl.uniform1i(\n        gl.getUniformLocation(program, `uMaskTexture${index}`),\n        this._masksTextureUnitStart + index,\n      );\n      const color = hexToRgb(context.maskColors[index]);\n      gl.uniform4f(\n        gl.getUniformLocation(program, `uMaskColor${index}`),\n        color.r,\n        color.g,\n        color.b,\n        color.a,\n      );\n      gl.uniform4fv(gl.getUniformLocation(program, `bbox${index}`), boundaries);\n      gl.uniform1i(\n        gl.getUniformLocation(program, 'uFillColor'),\n        this.variant % 2 === 0 ? 0 : 1,\n      );\n      gl.uniform1i(\n        gl.getUniformLocation(program, 'uLight'),\n        styleIndex === 0 ? 0 : 1,\n      );\n      gl.uniform1i(\n        gl.getUniformLocation(program, 'uTransparency'),\n        Math.floor(this.variant / 2) % 3 === 2 ? 1 : 0,\n      );\n\n      gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        0,\n        gl.LUMINANCE,\n        context.height,\n        context.width,\n        0,\n        gl.LUMINANCE,\n        gl.UNSIGNED_BYTE,\n        maskData,\n      );\n    });\n\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n    // Unbind textures\n    gl.bindTexture(gl.TEXTURE_2D, null);\n    context.masks.forEach((_, index) => {\n      gl.activeTexture(gl.TEXTURE0 + index + this._masksTextureUnitStart);\n      gl.bindTexture(gl.TEXTURE_2D, null);\n    });\n\n    const ctx = form.ctx;\n    invariant(this._canvas !== null, 'canvas is required');\n    ctx.drawImage(this._canvas, 0, 0);\n  }\n\n  async cleanup(): Promise<void> {\n    super.cleanup();\n\n    if (this._gl != null) {\n      // Delete mask textures to prevent memory leaks\n      this._maskTextures.forEach(texture => {\n        if (texture != null && this._gl != null) {\n          this._gl.deleteTexture(texture);\n        }\n      });\n      this._maskTextures = [];\n    }\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/SobelEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport BaseGLEffect from '@/common/components/video/effects/BaseGLEffect';\nimport {\n  EffectFrameContext,\n  EffectInit,\n} from '@/common/components/video/effects/Effect';\nimport vertexShaderSource from '@/common/components/video/effects/shaders/DefaultVert.vert?raw';\nimport fragmentShaderSource from '@/common/components/video/effects/shaders/Sobel.frag?raw';\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport invariant from 'invariant';\nimport {CanvasForm} from 'pts';\n\nexport default class SobelEffect extends BaseGLEffect {\n  constructor() {\n    super(4);\n\n    this.vertexShaderSource = vertexShaderSource;\n    this.fragmentShaderSource = fragmentShaderSource;\n  }\n\n  protected setupUniforms(\n    gl: WebGL2RenderingContext,\n    program: WebGLProgram,\n    init: EffectInit,\n  ): void {\n    super.setupUniforms(gl, program, init);\n  }\n\n  apply(form: CanvasForm, context: EffectFrameContext, _tracklets: Tracklet[]) {\n    const gl = this._gl;\n    const program = this._program;\n\n    if (!program) {\n      return;\n    }\n    invariant(gl !== null, 'WebGL2 context is required');\n\n    gl.clearColor(0.0, 0.0, 0.0, 1.0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    const pairIndex = Math.floor(this.variant / 2) % 2;\n    gl.uniform1i(\n      gl.getUniformLocation(program, 'uSwapColor'),\n      this.variant % 2 === 0 ? 1 : 0,\n    );\n    gl.uniform1i(\n      gl.getUniformLocation(program, 'uMonocolor'),\n      pairIndex === 0 ? 0 : 1,\n    );\n\n    gl.activeTexture(gl.TEXTURE0);\n    gl.bindTexture(gl.TEXTURE_2D, this._frameTexture);\n    gl.texImage2D(\n      gl.TEXTURE_2D,\n      0,\n      gl.RGBA,\n      context.width,\n      context.height,\n      0,\n      gl.RGBA,\n      gl.UNSIGNED_BYTE,\n      context.frame,\n    );\n\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n    const ctx = form.ctx;\n    invariant(this._canvas !== null, 'canvas is required');\n    ctx.drawImage(this._canvas, 0, 0);\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/VibrantMaskEffect.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport BaseGLEffect from '@/common/components/video/effects/BaseGLEffect';\nimport {\n  EffectFrameContext,\n  EffectInit,\n} from '@/common/components/video/effects/Effect';\nimport vertexShaderSource from '@/common/components/video/effects/shaders/DefaultVert.vert?raw';\nimport fragmentShaderSource from '@/common/components/video/effects/shaders/VibrantMask.frag?raw';\nimport {Tracklet} from '@/common/tracker/Tracker';\nimport {\n  generateLUTDATA,\n  load3DLUT,\n  preAllocateTextures,\n} from '@/common/utils/ShaderUtils';\nimport {RLEObject, decode} from '@/jscocotools/mask';\nimport invariant from 'invariant';\nimport {CanvasForm} from 'pts';\n\nexport default class VibrantMaskEffect extends BaseGLEffect {\n  private lutSize: number = 4;\n\n  private _numMasks: number = 0;\n  private _numMasksUniformLocation: WebGLUniformLocation | null = null;\n  private _currentFrameLocation: WebGLUniformLocation | null = null;\n  private _lutTextures: WebGLTexture[] = [];\n  private _maskTextures: WebGLTexture[] = [];\n\n  // Must be 1, main background texture takes 0.\n  private _extraTextureUnit: number = 1;\n\n  // Must from start 2, main texture takes 0 and 1.\n  private _masksTextureUnitStart: number = 2;\n\n  constructor() {\n    super(3);\n    this.vertexShaderSource = vertexShaderSource;\n    this.fragmentShaderSource = fragmentShaderSource;\n  }\n\n  protected setupUniforms(\n    gl: WebGL2RenderingContext,\n    program: WebGLProgram,\n    init: EffectInit,\n  ): void {\n    super.setupUniforms(gl, program, init);\n\n    gl.uniform1i(\n      gl.getUniformLocation(program, 'uColorGradeLUT'),\n      this._extraTextureUnit,\n    );\n\n    this._numMasksUniformLocation = gl.getUniformLocation(program, 'uNumMasks');\n    gl.uniform1i(this._numMasksUniformLocation, this._numMasks);\n\n    this._currentFrameLocation = gl.getUniformLocation(\n      program,\n      'uCurrentFrame',\n    );\n    gl.uniform1f(this._currentFrameLocation, 0);\n\n    // We know the max number of textures, pre-allocate 3.\n    this._maskTextures = preAllocateTextures(gl, 3);\n\n    this._lutTextures = []; // clear any previous pool of textures\n\n    for (let i = 0; i < this.numVariants; i++) {\n      const _lutData = generateLUTDATA(this.lutSize);\n      const _extraTexture = load3DLUT(gl, this.lutSize, _lutData);\n      this._lutTextures.push(_extraTexture as WebGLTexture);\n    }\n  }\n\n  apply(form: CanvasForm, context: EffectFrameContext, _tracklets: Tracklet[]) {\n    const gl = this._gl;\n    const program = this._program;\n\n    if (!program) {\n      return;\n    }\n    invariant(gl !== null, 'WebGL2 context is required');\n\n    gl.clearColor(0.0, 0.0, 0.0, 1.0);\n    gl.clear(gl.COLOR_BUFFER_BIT);\n\n    // dynamic uniforms per frame\n    gl.uniform1f(this._currentFrameLocation, context.frameIndex);\n    gl.uniform1i(this._numMasksUniformLocation, context.masks.length);\n\n    // Bind the LUT texture to texture unit 1\n    const lutTexture = this._lutTextures[this.variant];\n    gl.activeTexture(gl.TEXTURE1);\n    gl.bindTexture(gl.TEXTURE_3D, lutTexture);\n\n    gl.activeTexture(gl.TEXTURE0);\n    gl.bindTexture(gl.TEXTURE_2D, this._frameTexture);\n    gl.texImage2D(\n      gl.TEXTURE_2D,\n      0,\n      gl.RGBA,\n      context.width,\n      context.height,\n      0,\n      gl.RGBA,\n      gl.UNSIGNED_BYTE,\n      context.frame,\n    );\n\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n\n    // Create and bind 2D textures for each mask\n    context.masks.forEach((mask, index) => {\n      const decodedMask = decode([mask.bitmap as RLEObject]);\n      const maskData = decodedMask.data as Uint8Array;\n      gl.activeTexture(gl.TEXTURE0 + index + this._masksTextureUnitStart);\n      gl.bindTexture(gl.TEXTURE_2D, this._maskTextures[index]);\n\n      // dynamic uniforms per mask\n      gl.uniform1i(\n        gl.getUniformLocation(program, `uMaskTexture${index}`),\n        this._masksTextureUnitStart + index,\n      );\n\n      gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1);\n      gl.texImage2D(\n        gl.TEXTURE_2D,\n        0,\n        gl.LUMINANCE,\n        context.height,\n        context.width,\n        0,\n        gl.LUMINANCE,\n        gl.UNSIGNED_BYTE,\n        maskData,\n      );\n    });\n\n    gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);\n\n    // Unbind textures\n    gl.bindTexture(gl.TEXTURE_2D, null);\n    context.masks.forEach((_, index) => {\n      gl.activeTexture(gl.TEXTURE0 + index + this._masksTextureUnitStart);\n      gl.bindTexture(gl.TEXTURE_2D, null);\n    });\n\n    const ctx = form.ctx;\n    invariant(this._canvas !== null, 'canvas is required');\n    ctx.drawImage(this._canvas, 0, 0);\n  }\n\n  async cleanup(): Promise<void> {\n    super.cleanup();\n\n    if (this._gl != null) {\n      // Delete mask textures to prevent memory leaks\n      this._maskTextures.forEach(texture => {\n        if (texture != null && this._gl != null) {\n          this._gl.deleteTexture(texture);\n        }\n      });\n      this._maskTextures = [];\n    }\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/shaders/Arrow.frag",
    "content": "#version 300 es\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//     http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nprecision mediump float;\n\nin vec2 vTexCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 uSize;\nuniform int uNumMasks;\nuniform float uCurrentFrame;\nuniform bool uLineColor;\nuniform bool uArrow;\nuniform sampler2D uMaskTexture0;\nuniform sampler2D uMaskTexture1;\nuniform sampler2D uMaskTexture2;\n\nuniform vec4 bbox0;\nuniform vec4 bbox1;\nuniform vec4 bbox2;\n\nout vec4 fragColor;\n\nfloat addv(vec2 a) {\n  return a.x + a.y;\n}\n\n#define dd(a) dot(a,a)\n\nvec2 solveCubic2(vec3 a) {\n  float p = a.y - a.x * a.x / 3.0f;\n  float p3 = p * p * p;\n  float q = a.x * (2.0f * a.x * a.x - 9.0f * a.y) / 27.0f + a.z;\n  float d = q * q + 4.0f * p3 / 27.0f;\n  if(d > 0.0f) {\n    vec2 x = (vec2(1.0f, -1.0f) * sqrt(d) - q) * 0.5f;\n    return vec2(addv(sign(x) * pow(abs(x), vec2(1.0f / 3.0f))) - a.x / 3.0f);\n  }\n  float v = acos(-sqrt(-27.0f / p3) * q * 0.5f) / 3.0f;\n  float m = cos(v);\n  float n = sin(v) * 1.732050808f;\n  return vec2(m + m, -n - m) * sqrt(-p / 3.0f) - a.x / 3.0f;\n}\n\nfloat calculateDistanceToQuadraticBezier(vec2 p, vec2 a, vec2 b, vec2 c) {\n  b += mix(vec2(1e-4f), vec2(0.0f), abs(sign(b * 2.0f - a - c)));\n  vec2 A = b - a;\n  vec2 B = c - b - A;\n  vec2 C = p - a;\n  vec2 D = A * 2.0f;\n  vec2 T = clamp((solveCubic2(vec3(-3.0f * dot(A, B), dot(C, B) - 2.0f * dd(A), dot(C, A)) / -dd(B))), 0.0f, 1.0f);\n  return sqrt(min(dd(C - (D + B * T.x) * T.x), dd(C - (D + B * T.y) * T.y)));\n}\n\nfloat crossProduct(vec2 a, vec2 b) {\n  return a.x * b.y - a.y * b.x;\n}\n\nbool pointInTriangle(vec2 pt, vec2 v0, vec2 v1, vec2 v2) {\n  vec2 v0v1 = v1 - v0;\n  vec2 v1v2 = v2 - v1;\n  vec2 v2v0 = v0 - v2;\n  float d0 = sign(crossProduct(v0v1, pt - v0));\n  float d1 = sign(crossProduct(v1v2, pt - v1));\n  float d2 = sign(crossProduct(v2v0, pt - v2));\n  bool has_neg = (d0 < 0.0f) || (d1 < 0.0f) || (d2 < 0.0f);\n  bool has_pos = (d0 > 0.0f) || (d1 > 0.0f) || (d2 > 0.0f);\n  return !(has_neg && has_pos);\n}\n\nvoid main() {\n  vec4 color = texture(uSampler, vTexCoord);\n  vec2 fragCoord = vTexCoord * uSize;\n  float aspectRatio = uSize.y / uSize.x;\n  float time = uCurrentFrame * 0.05f;\n  vec3 multicolor = vec3(0.5f + 0.5f * sin(time), 0.5f + 0.5f * cos(time), 0.5f - 0.5f * sin(time));\n\n  vec4 mask1 = vec4(0.0f);\n  vec4 mask2 = vec4(0.0f);\n  vec4 mask3 = vec4(0.0f);\n\n  bool scoped = false;\n  bool intersected = false;\n  float threshold = 0.75f;\n  float circleRadius = 0.015f;\n\n  if(uNumMasks > 0) {\n    mask1 = texture(uMaskTexture0, vec2(vTexCoord.y, vTexCoord.x));\n    bool visible = bbox0 != vec4(0.0f);\n\n    vec2 p0 = vec2((bbox0.x + bbox0.z) * 0.5f, bbox0.y); // Top center\n    vec2 p1 = vec2(bbox0.x + 0.5f * (bbox0.z - bbox0.x) * (0.5f + 0.5f * sin(time)), bbox0.y - 0.25f);\n    //vec2 p1 = vec2(0.5f, 0.5f);\n    vec2 p2 = vec2(bbox0.x + 0.5f * (bbox0.z - bbox0.x) * (0.5f + 0.5f * cos(time)), (bbox0.w + bbox0.y) * 0.5f);\n    float d = calculateDistanceToQuadraticBezier(vTexCoord, p0, p1, p2);\n    d *= length(uSize.xy) * 0.25f;\n\n    vec2 v0 = p0 + vec2(-0.020f, -0.020f); // Left vertex\n    vec2 v1 = p0 + vec2(0.020f, -0.020f);  // Right vertex\n    vec2 v2 = p0 + vec2(0.0f, 0.020f);  // Bottom vertex\n    // Check if the point is inside the triangle\n    bool inside = pointInTriangle(vTexCoord, v0, v1, v2);\n\n    // Circle drawing\n    vec2 adjustedCoord = vTexCoord - p0;\n    adjustedCoord.x /= aspectRatio;\n    float circleDistance = length(adjustedCoord);\n\n    if(d < threshold && visible) {\n      scoped = true;\n    }\n\n    if(uArrow && inside && visible) {\n      intersected = true;\n    } else if(!uArrow && circleDistance < circleRadius && visible) {\n      intersected = true;\n    }\n  }\n\n  if(uNumMasks > 1) {\n    mask2 = texture(uMaskTexture1, vec2(vTexCoord.y, vTexCoord.x));\n    bool visible = bbox1 != vec4(0.0f);\n\n    vec2 p0 = vec2((bbox1.x + bbox1.z) * 0.5f, bbox1.y);\n    vec2 p1 = vec2(bbox1.x + 0.5f * (bbox1.z - bbox1.x) * (0.5f + 0.5f * sin(time)), bbox1.y - 0.25f);\n    vec2 p2 = vec2(bbox1.x + 0.5f * (bbox1.z - bbox1.x) * (0.5f + 0.5f * cos(time)), (bbox1.w + bbox1.y) * 0.5f);\n    float d = calculateDistanceToQuadraticBezier(vTexCoord, p0, p1, p2);\n    d *= length(uSize.xy) * 0.25f;\n\n    vec2 v0 = p0 + vec2(-0.020f, -0.020f);\n    vec2 v1 = p0 + vec2(0.020f, -0.020f);\n    vec2 v2 = p0 + vec2(0.0f, 0.020f);\n    bool inside = pointInTriangle(vTexCoord, v0, v1, v2);\n\n    // Circle drawing\n    vec2 adjustedCoord = vTexCoord - p0;\n    adjustedCoord.x /= aspectRatio;\n    float circleDistance = length(adjustedCoord);\n\n    if(d < threshold && visible) {\n      scoped = true;\n    }\n\n    if(uArrow && inside && visible) {\n      intersected = true;\n    } else if(!uArrow && circleDistance < circleRadius && visible) {\n      intersected = true;\n    }\n  }\n\n  if(uNumMasks > 2) {\n    mask3 = texture(uMaskTexture2, vec2(vTexCoord.y, vTexCoord.x));\n    bool visible = bbox2 != vec4(0.0f);\n\n    vec2 p0 = vec2((bbox2.x + bbox2.z) * 0.5f, bbox2.y);\n    vec2 p1 = vec2(bbox2.x + 0.5f * (bbox2.z - bbox2.x) * (0.5f + 0.5f * sin(time)), bbox2.y - 0.25f);\n    vec2 p2 = vec2(bbox2.x + 0.5f * (bbox2.z - bbox2.x) * (0.5f + 0.5f * cos(time)), (bbox2.w + bbox2.y) * 0.5f);\n    float d = calculateDistanceToQuadraticBezier(vTexCoord, p0, p1, p2);\n    d *= length(uSize.xy) * 0.25f;\n\n    vec2 v0 = p0 + vec2(-0.020f, -0.020f);\n    vec2 v1 = p0 + vec2(0.020f, -0.020f);\n    vec2 v2 = p0 + vec2(0.0f, 0.020f);\n    bool inside = pointInTriangle(vTexCoord, v0, v1, v2);\n\n    vec2 adjustedCoord = vTexCoord - p0;\n    adjustedCoord.x /= aspectRatio;\n    float circleDistance = length(adjustedCoord);\n\n    if(d < threshold && visible) {\n      scoped = true;\n    }\n\n    if(uArrow && inside && visible) {\n      intersected = true;\n    } else if(!uArrow && circleDistance < circleRadius && visible) {\n      intersected = true;\n    }\n  }\n\n  bool overlap = (mask1.r > 0.0f || mask2.r > 0.0f || mask3.r > 0.0f);\n  if(overlap) {\n    fragColor = color;\n  }\n\n  if(scoped || intersected) {\n    fragColor = uLineColor ? vec4(multicolor, 1.0f) : vec4(1.0f);\n    if(intersected) {\n      fragColor = vec4(multicolor, 1.0f);\n    }\n  } else {\n    fragColor = overlap ? color : vec4(0.0f, 0.0f, 0.0f, 0.0f);\n  }\n}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/shaders/BackgroundBlur.frag",
    "content": "#version 300 es\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//     http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nprecision mediump float;\n\nin vec2 vTexCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 uSize;\nuniform int uBlurRadius;\n\nout vec4 fragColor;\n\nvoid main() {\n  vec2 texOffset = 1.0f / uSize;\n  // texel color\n  vec3 color = texture(uSampler, vTexCoord).rgb;\n  float sampleCount = 0.0f;\n\n  // sample the surrounding pixels based on the blur radius\n  for(int x = -uBlurRadius; x <= uBlurRadius; x++) {\n    for(int y = -uBlurRadius; y <= uBlurRadius; y++) {\n      vec2 offset = vec2(float(x), float(y)) * texOffset;\n      color += texture(uSampler, vTexCoord + offset).rgb;\n      sampleCount += 1.0f;\n    }\n  }\n\n  // average the colors of the sampled pixels\n  color /= sampleCount;\n  fragColor = vec4(color, 1.0f);\n}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/shaders/Burst.frag",
    "content": "#version 300 es\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//     http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nprecision highp float;\n\nin vec2 vTexCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 uSize; // resolution\nuniform int uNumMasks;\nuniform bool uLineColor;\nuniform bool uInterleave;\nuniform sampler2D uMaskTexture0;\nuniform sampler2D uMaskTexture1;\nuniform sampler2D uMaskTexture2;\n\nuniform vec4 uMaskColor0;\nuniform vec4 uMaskColor1;\nuniform vec4 uMaskColor2;\n\nuniform vec4 bbox0;\nuniform vec4 bbox1;\nuniform vec4 bbox2;\n\nout vec4 fragColor;\n\nvoid main() {\n  float PI = radians(180.0f);\n  float lines = uInterleave ? 12.0f : 80.0f;\n  vec4 color = texture(uSampler, vTexCoord);\n  vec4 color1 = uMaskColor0 / 255.0;\n  vec4 color2 = uMaskColor1 / 255.0;\n  vec4 color3 = uMaskColor2 / 255.0;\n\n  vec4 mask1 = vec4(0.0f);\n  vec4 mask2 = vec4(0.0f);\n  vec4 mask3 = vec4(0.0f);\n  vec4 scopedColor = vec4(0.0f);\n\n  vec2 fragCoord = vTexCoord * uSize; // transform to pixel space\n  bool scoped = false;\n  vec4 transparent = vec4(0.0);\n  float p = PI / lines;\n\n  if(uNumMasks > 0) {\n    mask1 = texture(uMaskTexture0, vec2(vTexCoord.y, vTexCoord.x));\n\n    vec2 center1 = (bbox0.xy + bbox0.zw) * 0.5f * uSize;\n    vec2 fragCoordT = (fragCoord - center1) / uSize.y;\n    float a = mod(atan(fragCoordT.y, fragCoordT.x) + p, p + p) - p; // angle of fragment\n\n    float pattern = sin(a * lines);\n    // smoothstep for antialiasing\n    float line = smoothstep(2.8 / uSize.y, 0.0, length(fragCoordT) * abs(sin(a)));\n    \n    vec4 colorToBlend = uLineColor ? vec4(color1.rgb, 0.80f) : vec4(1.0f);\n    bool visible = bbox0 != vec4(0.0f);\n\n    if (uInterleave && visible) {\n      vec4 tempColor = mix(transparent, colorToBlend, step(0.0, pattern));\n      scopedColor += tempColor;\n      scoped = true;\n    } else if (!uInterleave && visible) {\n      vec4 tempColor = uLineColor ? vec4(color1.rgb * line, line) : vec4(line);\n      scopedColor += tempColor;\n      scoped = true;\n    }\n  }\n\n  if(uNumMasks > 1) {\n    mask2 = texture(uMaskTexture1, vec2(vTexCoord.y, vTexCoord.x));\n\n    vec2 center2 = (bbox1.xy + bbox1.zw) * 0.5f * uSize;\n    vec2 fragCoordT = (fragCoord - center2) / uSize.y;\n    float a = mod(atan(fragCoordT.y, fragCoordT.x) + p, p + p) - p; // angle of fragment\n\n    float pattern = sin(a * lines);\n    float line = smoothstep(2.8 / uSize.y, 0.0, length(fragCoordT) * abs(sin(a)));\n    \n    vec4 colorToBlend = uLineColor ? vec4(color2.rgb, 0.8f) : vec4(1.0f);\n    bool visible = bbox1 != vec4(0.0f);\n\n    if (uInterleave && visible) {\n      vec4 tempColor = mix(transparent, colorToBlend, step(0.0, pattern));\n      if (scopedColor == vec4(0.0)) {\n        scopedColor += tempColor;\n      }\n      scoped = true;\n    } else if (!uInterleave && visible) {\n      vec4 tempColor = uLineColor ? vec4(color2.rgb * line, line) : vec4(line);\n      scopedColor += tempColor;    \n      scoped = true;\n    }\n  }\n\n  if (uNumMasks > 2) {\n    mask3 = texture(uMaskTexture2, vec2(vTexCoord.y, vTexCoord.x));\n\n    vec2 center3 = (bbox2.xy + bbox2.zw) * 0.5f * uSize;\n    vec2 fragCoordT = (fragCoord - center3) / uSize.y;\n\n    float a = mod(atan(fragCoordT.y, fragCoordT.x) + p, p + p) - p; // angle of fragment\n\n    float pattern = sin(a * lines);\n    float line = smoothstep(2.8 / uSize.y, 0.0, length(fragCoordT) * abs(sin(a)));\n\n    vec4 colorToBlend = uLineColor ? vec4(color3.rgb, 0.8f) : vec4(1.0f);\n    bool visible = bbox2 != vec4(0.0f);\n\n    if (uInterleave && visible) {\n      vec4 tempColor = mix(transparent, colorToBlend, step(0.0, pattern));\n      if (scopedColor == vec4(0.0)) {\n        scopedColor += tempColor;\n      }\n      scoped = true;\n    } else if (!uInterleave && visible) {\n      vec4 tempColor = uLineColor ? vec4(color3.rgb * line, line) : vec4(line);\n      scopedColor += tempColor;\n      scoped = true;\n    }\n  }\n\n  bool overlap = (mask1.r > 0.0f || mask2.r > 0.0f || mask3.r > 0.0f);\n  if(scoped) {\n    fragColor = overlap ? color : scopedColor;\n  } else {\n    fragColor = overlap ? color : vec4(0.0f, 0.0f, 0.0f, 0.0f);\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/shaders/Cutout.frag",
    "content": "#version 300 es\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//     http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nprecision mediump float;\n\nin vec2 vTexCoord;\n\nuniform sampler2D uSampler;\nuniform float uContrast;\nuniform int uNumMasks;\nuniform sampler2D uMaskTexture0;\nuniform sampler2D uMaskTexture1;\nuniform sampler2D uMaskTexture2;\n\nout vec4 fragColor;\n\nvec3 applySepia(vec4 color) {\n  float gray = dot(color.rgb, vec3(0.3, 0.59, 0.11));\n  vec3 sepia = vec3(gray) * vec3(1.2, 1.0, 0.8);\n  sepia.r = min(sepia.r, 1.0);\n  sepia.g = min(sepia.g, 1.0);\n  sepia.b = min(sepia.b, 1.0);\n\n  return sepia;\n}\n\nvoid main() {\n  vec4 color = texture(uSampler, vTexCoord);\n\n  vec4 color1 = vec4(0.0f);\n  vec4 color2 = vec4(0.0f);\n  vec4 color3 = vec4(0.0f);\n\n  if(uNumMasks > 0) {\n    color1 = texture(uMaskTexture0, vec2(vTexCoord.y, vTexCoord.x));\n  }\n  if(uNumMasks > 1) {\n    color2 = texture(uMaskTexture1, vec2(vTexCoord.y, vTexCoord.x));\n  }\n  if(uNumMasks > 2) {\n    color3 = texture(uMaskTexture2, vec2(vTexCoord.y, vTexCoord.x));\n  }\n\n  bool overlap = (color1.r > 0.0f || color2.r > 0.0f || color3.r > 0.0f);\n  if(overlap) {    \n    if (uContrast == 0.0) {\n      color = vec4(applySepia(color), color.a);\n    } else {\n      color.rgb = ((color.rgb - 0.5) * max(uContrast, 0.0)) + 0.5;   \n    }\n    fragColor = color;\n  } else {\n    fragColor = vec4(0.0f);\n  }\n}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/shaders/DefaultVert.vert",
    "content": "#version 300 es\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//     http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nlayout(location = 0) in vec4 aPosition;\nlayout(location = 1) in vec2 aTexCoord;\n\nout vec2 vTexCoord;\n\nvoid main() {\n  vTexCoord = vec2(aTexCoord.s, 1.0f - aTexCoord.t);\n  gl_Position = aPosition;\n}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/shaders/EraseForeground.frag",
    "content": "#version 300 es\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//     http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nprecision lowp float;\n\nin vec2 vTexCoord;\nuniform int uNumMasks;\nuniform vec3 uBgColor;\nuniform sampler2D uMaskTexture0;\nuniform sampler2D uMaskTexture1;\nuniform sampler2D uMaskTexture2;\n\nout vec4 fragColor;\n\nvoid main() {\n  vec4 finalColor = vec4(0.0f, 0.0f, 0.0f, 0.0f);\n  float totalMaskValue = 0.0f;\n\n  if(uNumMasks > 0) {\n    float maskValue0 = texture(uMaskTexture0, vec2(vTexCoord.y, vTexCoord.x)).r;\n    totalMaskValue += maskValue0;\n  }\n  if(uNumMasks > 1) {\n    float maskValue1 = texture(uMaskTexture1, vec2(vTexCoord.y, vTexCoord.x)).r;\n    totalMaskValue += maskValue1;\n  }\n  if(uNumMasks > 2) {\n    float maskValue2 = texture(uMaskTexture2, vec2(vTexCoord.y, vTexCoord.x)).r;\n    totalMaskValue += maskValue2;\n  }\n\n  if(totalMaskValue > 0.0f) {\n    finalColor = vec4(uBgColor, 1.0f);\n  } else {\n    finalColor.a = 0.0f;\n  }\n  fragColor = finalColor;\n}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/shaders/Gradient.frag",
    "content": "#version 300 es\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//     http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nprecision mediump float;\nprecision mediump sampler3D;\n\nin vec2 vTexCoord;\n\nuniform sampler2D uSampler;\nuniform sampler3D uColorGradeLUT;\nuniform mediump vec2 uSize;\n\nout vec4 fragColor;\n\nvoid main() {\n\n  // texel color\n  vec3 color = texture(uSampler, vTexCoord).rgb;\n  vec3 gradedColor = texture(uColorGradeLUT, color).rgb;\n  fragColor = vec4(gradedColor, 1);\n}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/shaders/NoisyMask.frag",
    "content": "#version 300 es\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//     http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nprecision mediump float;\n\nin vec2 vTexCoord;\n\nuniform float uCurrentFrame;\nuniform int uNumMasks;\nuniform sampler2D uMaskTexture0;\nuniform sampler2D uMaskTexture1;\nuniform sampler2D uMaskTexture2;\n\nout vec4 fragColor;\n\nvec3 startColor = vec3(0.0f, 0.67f, 1.0f);\nvec3 endColor = vec3(0.05f, 0.06f, 0.05f);\n\nfloat random(vec2 st) {\n  return fract(sin(dot(st.xy, vec2(12.9898f, 78.233f))) *\n    43758.5453123f);\n}\n\nvoid main() {\n  vec4 finalColor = vec4(0.0f, 0.0f, 0.0f, 0.0f);\n  float totalMaskValue = 0.0f;\n\n  if(uNumMasks > 0) {\n    float maskValue0 = texture(uMaskTexture0, vec2(vTexCoord.y, vTexCoord.x)).r;\n    totalMaskValue += maskValue0;\n  }\n  if(uNumMasks > 1) {\n    float maskValue1 = texture(uMaskTexture1, vec2(vTexCoord.y, vTexCoord.x)).r;\n    totalMaskValue += maskValue1;\n  }\n  if(uNumMasks > 2) {\n    float maskValue2 = texture(uMaskTexture2, vec2(vTexCoord.y, vTexCoord.x)).r;\n    totalMaskValue += maskValue2;\n  }\n\n  // Dynamic color alteration using sin(time)\n  float time = uCurrentFrame * 0.1f;\n  vec3 dynamicColor = mix(startColor, endColor, sin(time));\n  vec3 colorVariation = mix(vec3(0.0f, 0.0f, 0.0f), vec3(1.0f, 1.0f, 1.0f), vTexCoord.y);\n\n  // apply randomness to the final color\n  float rnd = random(vTexCoord.xy);\n \n  if(totalMaskValue > 0.0f) {\n    finalColor = vec4(mix(dynamicColor, colorVariation, rnd), 1.0f);\n  } else {\n    finalColor.a = 0.0f;\n  }\n  fragColor = finalColor;\n}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/shaders/Overlay.frag",
    "content": "#version 300 es\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//     http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nprecision highp float;\n\nin vec2 vTexCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 uSize;\nuniform int uNumMasks;\nuniform float uOpacity;\nuniform bool uBorder;\nuniform sampler2D uMaskTexture0;\nuniform sampler2D uMaskTexture1;\nuniform sampler2D uMaskTexture2;\n\nuniform vec4 uMaskColor0;\nuniform vec4 uMaskColor1;\nuniform vec4 uMaskColor2;\n\nuniform float uTime;\nuniform vec2 uClickPos;\nuniform int uActiveMask;\n\nout vec4 fragColor;\n\nvec4 lowerSaturation(vec4 color, float saturationFactor) {\n  float luminance = 0.299f * color.r + 0.587f * color.g + 0.114f * color.b; // Calculate luminance\n  vec3 gray = vec3(luminance);\n  vec3 saturated = mix(gray, color.rgb, saturationFactor); // Mix gray with original color based on saturation factor\n  return vec4(saturated, color.a);\n}\n\nvec4 detectEdges(sampler2D textureSampler, float coverage, vec4 edgeColor) {\n  vec2 tvTexCoord = vec2(vTexCoord.y, vTexCoord.x);\n  vec2 texOffset = 1.0f / uSize;\n  vec3 result = vec3(0.0f);\n  // neighboring pixels\n  vec3 tLeft = texture(textureSampler, tvTexCoord + texOffset * vec2(-coverage, coverage)).rgb;\n  vec3 tRight = texture(textureSampler, tvTexCoord + texOffset * vec2(coverage, -coverage)).rgb;\n  vec3 bLeft = texture(textureSampler, tvTexCoord + texOffset * vec2(-coverage, -coverage)).rgb;\n  vec3 bRight = texture(textureSampler, tvTexCoord + texOffset * vec2(coverage, coverage)).rgb;\n\n  // calculate the gradient edge of the current pixel using [3x3] sobel operator.\n  vec3 xEdge = tLeft + 2.0f * texture(textureSampler, tvTexCoord + texOffset * vec2(-coverage, 0)).rgb + bLeft - tRight - 2.0f * texture(textureSampler, tvTexCoord + texOffset * vec2(coverage, 0)).rgb - bRight;\n  vec3 yEdge = tLeft + 2.0f * texture(textureSampler, tvTexCoord + texOffset * vec2(0, coverage)).rgb + tRight - bLeft - 2.0f * texture(textureSampler, tvTexCoord + texOffset * vec2(0, -coverage)).rgb - bRight;\n\n  // magnitude of the gradient at the current pixel.\n  result = sqrt(xEdge * xEdge + yEdge * yEdge);\n  return result.r > 1e-6f ? edgeColor : vec4(0.0f, 0.0f, 0.0f, 0.0f);\n}\n\nvec2 calculateAdjustedTexCoord(vec2 vTexCoord, vec4 bbox, float aspectRatio) {\n  vec2 center = vec2((bbox.x + bbox.z) * 0.5f, bbox.w);\n  float radiusX = abs(bbox.z - bbox.x);\n  float radiusY = radiusX / aspectRatio;\n  float scale = 1.0f;\n  radiusX *= scale;\n  radiusY *= scale;\n  vec2 adjustedTexCoord = (vTexCoord - center) / vec2(radiusX, radiusY) + vec2(0.5f);\n  return adjustedTexCoord;\n}\n\nvoid main() {\n  vec4 color = texture(uSampler, vTexCoord);\n  vec4 color1 = uMaskColor0 / 255.0;\n  vec4 color2 = uMaskColor1 / 255.0;\n  vec4 color3 = uMaskColor2 / 255.0;\n  float saturationFactor = 0.7;\n  float aspectRatio = uSize.y / uSize.x;\n  vec2 tvTexCoord = vec2(vTexCoord.y, vTexCoord.x);\n\n  vec4 finalColor = vec4(0.0f, 0.0f, 0.0f, 0.0f);\n  float totalMaskValue = 0.0f;\n  vec4 edgeColor = vec4(0.0f, 0.0f, 0.0f, 0.0f);\n  float numRipples = 1.75;\n  float timeThreshold = 1.1; // can take any value from [0.0, 1.5]\n  vec2 adjustedClickCoord =  calculateAdjustedTexCoord(vTexCoord, vec4(uClickPos, uClickPos + 0.1), aspectRatio);\n\n  if(uNumMasks > 0) {\n    float maskValue0 = texture(uMaskTexture0, tvTexCoord).r;\n    vec4 saturatedColor = lowerSaturation(color1, saturationFactor);\n    vec4 plainColor= vec4(vec3(saturatedColor).rgb, 1.0);\n    vec4 rippleColor = vec4(color1.rgb, 0.2);\n    \n    if (uActiveMask == 0 && uTime < timeThreshold) {\n      float dist = length(adjustedClickCoord);\n      float colorFactor = abs(sin((dist - uTime) * numRipples));\n      plainColor = vec4(mix(rippleColor, plainColor, colorFactor));\n    };\n    \n    if (uTime >= timeThreshold) {\n      plainColor= vec4(vec3(saturatedColor).rgb, 1.0);\n    }\n    finalColor += maskValue0 * plainColor;\n    totalMaskValue += maskValue0;\n\n    edgeColor = detectEdges(uMaskTexture0, 1.25, color1);\n  }\n  if(uNumMasks > 1) {\n    float maskValue1 = texture(uMaskTexture1, tvTexCoord).r;\n    vec4 saturatedColor = lowerSaturation(color2, saturationFactor);\n    vec4 plainColor= vec4(vec3(saturatedColor).rgb, 1.0);\n    vec4 rippleColor = vec4(color2.rgb, 0.2);\n\n    if (uActiveMask == 1 && uTime < timeThreshold) {\n      float dist = length(adjustedClickCoord);\n      float colorFactor = abs(sin((dist - uTime) * numRipples));\n      plainColor = vec4(mix(rippleColor, plainColor, colorFactor));\n    }\n\n    if (uTime >= timeThreshold) {\n      plainColor= vec4(vec3(saturatedColor).rgb, 1.0);\n    }\n    finalColor += maskValue1 * plainColor;\n    totalMaskValue += maskValue1;\n\n    if(edgeColor.a <= 0.0f) {\n      edgeColor = detectEdges(uMaskTexture1, 1.25, color2);\n    }\n  }\n  if(uNumMasks > 2) {\n    float maskValue2 = texture(uMaskTexture2, tvTexCoord).r;\n    vec4 saturatedColor = lowerSaturation(color3, saturationFactor);\n    vec4 plainColor= vec4(vec3(saturatedColor).rgb, 1.0);\n    vec4 rippleColor = vec4(color3.rgb, 0.2);\n\n    if (uActiveMask == 2 && uTime < timeThreshold) {\n      float dist = length(adjustedClickCoord);\n      float colorFactor = abs(sin((dist - uTime) * numRipples));\n      plainColor = vec4(mix(rippleColor, plainColor, colorFactor));\n    }\n\n    if (uTime >= timeThreshold) {\n      plainColor= vec4(vec3(saturatedColor).rgb, 1.0);\n    }\n\n    finalColor += maskValue2 * plainColor;\n    totalMaskValue += maskValue2;\n\n    if(edgeColor.a <= 0.0f) {\n      edgeColor = detectEdges(uMaskTexture2, 1.25, color3);\n    }\n  }\n\n  if(totalMaskValue > 0.0f) {\n    finalColor /= totalMaskValue;\n    finalColor = mix(color, finalColor, uOpacity);\n  } else {\n    finalColor.a = 0.0f;\n  }\n\n  if(edgeColor.a > 0.0f && uBorder) {\n    finalColor = vec4(vec3(edgeColor), 1.0f);\n  }\n  fragColor = finalColor;\n}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/shaders/Overlay.vert",
    "content": "#version 300 es\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//     http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nlayout(location = 0) in vec4 aPosition;\nlayout(location = 1) in vec2 aTexCoord;\n\nout vec2 vTexCoord;\n\nvoid main() {\n  // Rotate texture 90 degrees clockwise\n  vTexCoord = vec2(1.0f - aTexCoord.t, aTexCoord.s);\n  gl_Position = aPosition;\n}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/shaders/Pixelate.frag",
    "content": "#version 300 es\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//     http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nprecision mediump float;\n\nin vec2 vTexCoord;\n\nuniform sampler2D uSampler;\nuniform mediump vec2 uSize;\nuniform lowp float uBlockSize;\n\nout vec4 fragColor;\n\nvoid main() {\n  vec2 uv = vTexCoord.xy;\n  float dx = uBlockSize / uSize.x;\n  float dy = uBlockSize / uSize.y;\n\n  // Sample from 2 places to get a better average texel color\n  vec2 sampleCoord = (vec2(dx * floor((uv.x / dx)), dy * floor((uv.y / dy))) +\n    vec2(dx * ceil((uv.x / dx)), dy * ceil((uv.y / dy)))) / 2.0f;\n\n  vec4 frameColor = texture(uSampler, sampleCoord);\n  fragColor = frameColor;\n}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/shaders/PixelateMask.frag",
    "content": "#version 300 es\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//     http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nprecision mediump float;\n\nin vec2 vTexCoord;\n\nuniform sampler2D uSampler;\nuniform mediump vec2 uSize;\nuniform lowp float uBlockSize;\nuniform int uNumMasks;\nuniform sampler2D uMaskTexture0;\nuniform sampler2D uMaskTexture1;\nuniform sampler2D uMaskTexture2;\n\nout vec4 fragColor;\n\nvoid main() {\n  vec4 color = texture(uSampler, vTexCoord);\n  vec2 uv = vTexCoord.xy;\n  float dx = uBlockSize / uSize.x;\n  float dy = uBlockSize / uSize.y;\n\n  vec4 color1 = vec4(0.0f);\n  vec4 color2 = vec4(0.0f);\n  vec4 color3 = vec4(0.0f);\n\n  vec2 sampleCoord = (vec2(dx * floor((uv.x / dx)), dy * floor((uv.y / dy))) +\n  vec2(dx * ceil((uv.x / dx)), dy * ceil((uv.y / dy)))) / 2.0f;\n  vec4 frameColor = texture(uSampler, sampleCoord);\n  color = frameColor;\n\n  if(uNumMasks > 0) {\n    color1 = texture(uMaskTexture0, vec2(vTexCoord.y, vTexCoord.x));\n  }\n  if(uNumMasks > 1) {\n    color2 = texture(uMaskTexture1, vec2(vTexCoord.y, vTexCoord.x));    \n  }\n  if(uNumMasks > 2) {\n    color3 = texture(uMaskTexture2, vec2(vTexCoord.y, vTexCoord.x));\n  }\n\n  bool overlap = (color1.r > 0.0f || color2.r > 0.0f || color3.r > 0.0f);\n  if(overlap) {\n    fragColor = color;\n  } else {\n    fragColor = vec4(0.0f);\n  }\n}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/shaders/Replace.frag",
    "content": "#version 300 es\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//     http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nprecision lowp float;\n\nin vec2 vTexCoord;\nuniform vec2 uSize;\nuniform int uNumMasks;\nuniform sampler2D uEmojiTexture;\nuniform bool uFill; // use all emoji texture\nuniform sampler2D uMaskTexture0;\nuniform sampler2D uMaskTexture1;\nuniform sampler2D uMaskTexture2;\n\nuniform vec4 bbox0;\nuniform vec4 bbox1;\nuniform vec4 bbox2;\n\nout vec4 fragColor;\n\nvec2 calculateAdjustedTexCoord(vec2 vTexCoord, vec4 bbox, float aspectRatio, out float distanceFromCenter) {\n  vec2 center = (bbox.xy + bbox.zw) * 0.5f;\n  float radiusX = abs(bbox.z - bbox.x);\n  float radiusY = radiusX / aspectRatio;\n  float scale = 1.25f;\n  radiusX *= scale;\n  radiusY *= scale;\n  vec2 adjustedTexCoord = (vTexCoord - center) / vec2(radiusX, radiusY) + vec2(0.5f);\n  distanceFromCenter = length((vTexCoord - center) / vec2(radiusX * 0.5f, radiusY * 0.5f));\n  return adjustedTexCoord;\n}\n\nvoid main() {\n  vec4 finalColor = vec4(0.0f);\n\n  float aspectRatio = uSize.y / uSize.x;\n  float totalMaskValue = 0.0f;\n  vec4 bgFill = vec4(1.0f, 0.0f, 0.0f, 1.0f);\n\n  vec4 emojiColor;\n\n  if(uNumMasks > 0) {\n    float maskValue0 = texture(uMaskTexture0, vec2(vTexCoord.y, vTexCoord.x)).r;\n    float distanceFromCenter;\n    vec2 adjustedTexCoord = calculateAdjustedTexCoord(vTexCoord, bbox0, aspectRatio, distanceFromCenter);\n\n    if(maskValue0 > 0.0f) {\n      emojiColor = texture(uEmojiTexture, adjustedTexCoord);\n      if(distanceFromCenter > 0.85f && !uFill) {\n        emojiColor = bgFill;\n      }\n    }\n    if(uFill) {\n      emojiColor = texture(uEmojiTexture, adjustedTexCoord);\n    }\n    \n    totalMaskValue += maskValue0;\n  }\n  if(uNumMasks > 1) {\n    float maskValue1 = texture(uMaskTexture1, vec2(vTexCoord.y, vTexCoord.x)).r;\n    float distanceFromCenter;\n    vec2 adjustedTexCoord = calculateAdjustedTexCoord(vTexCoord, bbox1, aspectRatio, distanceFromCenter);\n\n    if(maskValue1 > 0.0f) {\n      emojiColor = texture(uEmojiTexture, adjustedTexCoord);\n      if(distanceFromCenter > 0.85f && !uFill) {\n        emojiColor = bgFill;\n      }\n    }\n    if(uFill && emojiColor.a == 0.0f) {\n      emojiColor = texture(uEmojiTexture, adjustedTexCoord);\n    }\n      \n    totalMaskValue += maskValue1;\n  }\n  if(uNumMasks > 2) {\n    float maskValue2 = texture(uMaskTexture2, vec2(vTexCoord.y, vTexCoord.x)).r;\n    float distanceFromCenter;\n    vec2 adjustedTexCoord = calculateAdjustedTexCoord(vTexCoord, bbox2, aspectRatio, distanceFromCenter);\n    if(maskValue2 > 0.0f) {\n      emojiColor = texture(uEmojiTexture, adjustedTexCoord);\n      if(distanceFromCenter > 0.85f && !uFill) {\n        emojiColor = bgFill;\n      }\n    }\n    if(uFill && emojiColor.a == 0.0f) {\n      emojiColor = texture(uEmojiTexture, adjustedTexCoord);\n    }\n\n    totalMaskValue += maskValue2;\n  }\n\n  if(totalMaskValue > 0.0f) {\n    finalColor = emojiColor;\n  } else {\n    finalColor = uFill ? emojiColor : vec4(0.0f);\n  }\n  fragColor = finalColor;\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/shaders/Scope.frag",
    "content": "#version 300 es\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//     http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nprecision mediump float;\n\nin vec2 vTexCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 uSize;\nuniform int uNumMasks;\nuniform bool uFillColor;\nuniform bool uLight;\nuniform bool uTransparency;\nuniform sampler2D uMaskTexture0;\nuniform sampler2D uMaskTexture1;\nuniform sampler2D uMaskTexture2;\n\nuniform vec4 uMaskColor0;\nuniform vec4 uMaskColor1;\nuniform vec4 uMaskColor2;\n\nuniform vec4 bbox0;\nuniform vec4 bbox1;\nuniform vec4 bbox2;\n\nout vec4 fragColor;\n\nvoid main() {\n  vec4 color = texture(uSampler, vTexCoord);\n  float aspectRatio = uSize.y / uSize.x;\n  float radiusThreshold = 0.8f;\n  float tickness = 0.085f;\n\n  vec4 mask1 = vec4(0.0f);\n  vec4 mask2 = vec4(0.0f);\n  vec4 mask3 = vec4(0.0f);\n  vec4 color1 = uMaskColor0 / 255.0;\n  vec4 color2 = uMaskColor1 / 255.0;\n  vec4 color3 = uMaskColor2 / 255.0;\n  vec4 scopedColor = vec4(0.0f);\n\n  bool scoped = false;\n  vec4 whiteVariation = uTransparency ? vec4(0.0,0.0,0.0,1.0) : vec4(1.0);\n\n  if(uNumMasks > 0) {\n    mask1 = texture(uMaskTexture0, vec2(vTexCoord.y, vTexCoord.x));\n\n    vec2 center1 = (bbox0.xy + bbox0.zw) * 0.5f;\n    float radiusX1 = abs(bbox0.y - bbox0.w) * 0.5f;\n    float radiusY1 = radiusX1 / aspectRatio;\n\n    float distX1 = (vTexCoord.x - center1.x) / radiusX1;\n    float distY1 = (vTexCoord.y - center1.y) / radiusY1;\n    float dist1 = sqrt(pow(distX1, 2.0f) + pow(distY1, 2.0f));\n   \n    if(uFillColor) {\n      if(dist1 >= radiusThreshold - tickness && dist1 <= radiusThreshold) {\n        scoped = true;\n        scopedColor = uLight ? whiteVariation : color1;\n      }\n    } else if(dist1 <= radiusThreshold) {\n      scoped = true;\n      scopedColor = uLight ? whiteVariation : color1;\n    }\n  }\n  if(uNumMasks > 1) {\n    mask2 = texture(uMaskTexture1, vec2(vTexCoord.y, vTexCoord.x));\n\n    vec2 center2 = (bbox1.xy + bbox1.zw) * 0.5f;\n    float radiusX2 = abs(bbox1.y - bbox1.w) * 0.5f;\n    float radiusY2 = radiusX2 / aspectRatio;\n\n    float distX2 = (vTexCoord.x - center2.x) / radiusX2;\n    float distY2 = (vTexCoord.y - center2.y) / radiusY2;\n    float dist2 = sqrt(pow(distX2, 2.0f) + pow(distY2, 2.0f));\n\n    if(uFillColor) {\n      if(dist2 >= radiusThreshold - tickness && dist2 <= radiusThreshold) {\n        scoped = true;\n        scopedColor = uLight ? whiteVariation : color2;\n      }\n    } else if(dist2 <= radiusThreshold) {\n      scoped = true;\n      scopedColor = uLight ? whiteVariation : color2;\n    }\n  }\n  if(uNumMasks > 2) {\n    mask3 = texture(uMaskTexture2, vec2(vTexCoord.y, vTexCoord.x));\n\n    vec2 center3 = (bbox2.xy + bbox2.zw) * 0.5f;\n    float radiusX3 = abs(bbox2.y - bbox2.w) * 0.5f;\n    float radiusY3 = radiusX3 / aspectRatio;\n\n    float distX3 = (vTexCoord.x - center3.x) / radiusX3;\n    float distY3 = (vTexCoord.y - center3.y) / radiusY3;\n    float dist3 = sqrt(pow(distX3, 2.0f) + pow(distY3, 2.0f));\n\n    if(uFillColor) {\n      if(dist3 >= radiusThreshold - tickness && dist3 <= radiusThreshold) {\n        scoped = true;\n        scopedColor = uLight ? whiteVariation : color3;\n      }\n    } else if(dist3 <= radiusThreshold) {\n      scoped = true;\n      scopedColor = uLight ? whiteVariation : color3;\n    }\n  }\n\n  bool overlap = (mask1.r > 0.0f || mask2.r > 0.0f || mask3.r > 0.0f);\n\n  if(scoped) {\n    fragColor = overlap ? color : scopedColor;\n    fragColor.a = uTransparency ? fragColor.a : 1.0;\n  } else {\n    fragColor = overlap ? color : vec4(0.0f, 0.0f, 0.0f, 0.0f);\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/shaders/Sobel.frag",
    "content": "#version 300 es\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//     http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nprecision mediump float;\n\nin vec2 vTexCoord;\n\nuniform sampler2D uSampler;\nuniform vec2 uSize;\nuniform bool uSwapColor;\nuniform bool uMonocolor;\n\nout vec4 fragColor;\n\nvoid main() {\n  // calculate the offset for one pixel in texture coordinates\n  vec2 texOffset = 1.0f / uSize;\n  vec3 result = vec3(0.0f);\n  // neighboring pixels\n  vec3 tLeft = texture(uSampler, vTexCoord + texOffset * vec2(-1, 1)).rgb;\n  vec3 tRight = texture(uSampler, vTexCoord + texOffset * vec2(1, -1)).rgb;\n  vec3 bLeft = texture(uSampler, vTexCoord + texOffset * vec2(-1, -1)).rgb;\n  vec3 bRight = texture(uSampler, vTexCoord + texOffset * vec2(1, 1)).rgb;\n  \n  // calculate the gradient edge of the current pixel using [3x3] sobel operator.\n  vec3 xEdge = tLeft + 2.0f * texture(uSampler, vTexCoord + texOffset * vec2(-1, 0)).rgb + bLeft - tRight - 2.0f * texture(uSampler, vTexCoord + texOffset * vec2(1, 0)).rgb - bRight;\n  vec3 yEdge = tLeft + 2.0f * texture(uSampler, vTexCoord + texOffset * vec2(0, 1)).rgb + tRight - bLeft - 2.0f * texture(uSampler, vTexCoord + texOffset * vec2(0, -1)).rgb - bRight;\n\n  // magnitude of the gradient at the current pixel.\n  result = sqrt(xEdge * xEdge + yEdge * yEdge);\n  \n  if (uMonocolor) {\n    // Convert result to a grayscale intensity\n    float intensity = length(result) / sqrt(3.0);\n    // Threshold to determine if the color should be white or black\n    float threshold = 0.2;\n    if (intensity > threshold) {\n      fragColor = uSwapColor ? vec4(1.0) : vec4(0.0, 0.0, 0.0, 1.0);\n    } else {\n      fragColor = uSwapColor ? vec4(0.0, 0.0, 0.0, 1.0) : vec4(1.0);\n    }\n  } else {\n    result = uSwapColor ? result : vec3(0.0, 1.0, 0.0) * result;\n    vec4 finalColor = vec4(result, 1.0f);\n    fragColor = finalColor;\n  }\n}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/effects/shaders/VibrantMask.frag",
    "content": "#version 300 es\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n// \n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n// \n//     http://www.apache.org/licenses/LICENSE-2.0\n// \n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nprecision mediump float;\nprecision mediump sampler3D;\n\nin vec2 vTexCoord;\n\nuniform sampler2D uSampler;\nuniform float uCurrentFrame;\nuniform sampler3D uColorGradeLUT;\nuniform int uNumMasks;\nuniform sampler2D uMaskTexture0;\nuniform sampler2D uMaskTexture1;\nuniform sampler2D uMaskTexture2;\n\nout vec4 fragColor;\n\nvoid main() {\n  vec4 color = texture(uSampler, vTexCoord);\n  vec3 gradedColor = texture(uColorGradeLUT, color.rgb).rgb;\n\n  vec4 color1 = vec4(0.0f);\n  vec4 color2 = vec4(0.0f);\n  vec4 color3 = vec4(0.0f);\n\n  // Apply edge detection for each mask\n  // We can't use dynamic indexing with samplers in GLSL ES 3.0.\n  // https://registry.khronos.org/OpenGL/specs/es/3.0/GLSL_ES_Specification_3.00.pdf Ch 12.30\n  if(uNumMasks > 0) {\n    color1 = texture(uMaskTexture0, vec2(vTexCoord.y, vTexCoord.x));\n  }\n  if(uNumMasks > 1) {\n    color2 = texture(uMaskTexture1, vec2(vTexCoord.y, vTexCoord.x));\n  }\n  if(uNumMasks > 2) {\n    color3 = texture(uMaskTexture2, vec2(vTexCoord.y, vTexCoord.x));\n  }\n\n  bool overlap = (color1.r > 0.0f || color2.r > 0.0f || color3.r > 0.0f);\n  if(overlap) {\n    fragColor = vec4(gradedColor, 1);\n  } else {\n    fragColor = vec4(0.0f);\n  }\n}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/filmstrip/FilmstripUtil.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {CanvasForm, CanvasSpace, Font, Group, Pt, Triangle} from 'pts';\nimport SelectedFrameHelper from './SelectedFrameHelper';\nimport {PADDING_BOTTOM, PADDING_TOP} from './VideoFilmstrip';\n\nexport function getPointerPosition(\n  event: React.PointerEvent<HTMLCanvasElement>,\n) {\n  const rect = event.currentTarget.getBoundingClientRect();\n  return new Pt(event.clientX - rect.left, event.clientY - rect.top);\n}\n\nexport function drawFilmstrip(\n  filmstrip: ImageBitmap | null,\n  space: CanvasSpace | undefined,\n  form: CanvasForm | undefined,\n) {\n  if (filmstrip == null || space == undefined || form?.ctx == undefined) {\n    return;\n  }\n\n  const ratio =\n    filmstrip.width / (filmstrip.height + PADDING_TOP + PADDING_BOTTOM);\n\n  form.image(\n    [\n      [0, PADDING_TOP],\n      [space.size.x, space.size.x / ratio],\n    ],\n    filmstrip,\n  );\n}\n\nexport function getTimeFromFrame(frame: number, fps: number): string {\n  const seconds = Math.floor(frame / fps);\n  const frameRemaining = frame - fps * seconds;\n  return `${seconds}:${frameRemaining.toFixed().toString().padStart(2, '0')}`;\n}\n\nexport function drawMarker(\n  space: CanvasSpace | undefined,\n  form: CanvasForm | undefined,\n  selectedFrameHelper: SelectedFrameHelper,\n  pointerPosition: Pt | null,\n  scanLabel: string | false,\n  fps: number,\n) {\n  if (space == undefined || form?.ctx == undefined) {\n    return;\n  }\n\n  const marker = Group.fromArray([\n    [0, PADDING_TOP],\n    [0, space.height - PADDING_BOTTOM],\n  ]);\n\n  const currentMarker = marker\n    .clone()\n    .add(Math.max(5, selectedFrameHelper.position), 0);\n\n  const getTextPosition = (label: string, marker: Group) => {\n    const textWidth = form.ctx.measureText(label).width;\n    return marker[0]\n      .$subtract(textWidth / 2, 0)\n      .$min(space.width - textWidth, PADDING_TOP - 10)\n      .$max(textWidth / 2 - 2, 0);\n  };\n\n  // draw current marker\n  form\n    .strokeOnly('#00000066', 5)\n    .line(currentMarker)\n    .strokeOnly('#fff', 1)\n    .line(currentMarker)\n    .fill('#000')\n    .polygon(\n      Triangle.fromCenter(currentMarker[0].$add(0, 10), 5).rotate2D(Math.PI),\n    );\n\n  // draw text\n  const frameLabel = getTimeFromFrame(selectedFrameHelper.index, fps);\n  form\n    .font(new Font(12, 'monospace'))\n    .fillOnly('#fff')\n    .text(getTextPosition(frameLabel, currentMarker), frameLabel);\n\n  // draw scanning ghost marker\n  if (\n    selectedFrameHelper.isScanning &&\n    pointerPosition != null &&\n    scanLabel != false\n  ) {\n    const scanMarker = marker.clone().add(pointerPosition.x, 0);\n    form.strokeOnly('#ffffff66', 5).line(scanMarker);\n\n    form\n      .font(new Font(12, 'monospace'))\n      .fillOnly('#8595A4')\n      .text(getTextPosition(scanLabel, scanMarker), scanLabel);\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/filmstrip/SelectedFrameHelper.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport default class SelectedFrameHelper {\n  private frames = 0;\n  private frameToWidthRatio = 1;\n  private selectedIndex = 0;\n  private scanning = false;\n\n  constructor(totalFrames: number, totalWidth: number, index?: number) {\n    this.reset(totalFrames, totalWidth, index);\n  }\n\n  reset(totalFrames: number, totalWidth: number, index?: number) {\n    this.frames = totalFrames;\n    this.frameToWidthRatio = totalWidth / this.frames;\n    if (index != null) {\n      this.select(index);\n    }\n  }\n\n  select(index: number) {\n    this.selectedIndex = index >= this.frames ? this.frames - index : index;\n  }\n\n  toPosition(index: number) {\n    return index * this.frameToWidthRatio;\n  }\n\n  toIndex(position: number) {\n    return Math.floor(position / this.frameToWidthRatio);\n  }\n\n  get index(): number {\n    return this.selectedIndex;\n  }\n\n  get position(): number {\n    return this.selectedIndex * this.frameToWidthRatio;\n  }\n\n  scan(state: boolean) {\n    this.scanning = state;\n  }\n\n  get isScanning(): boolean {\n    return this.scanning;\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/filmstrip/VideoFilmstrip.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport SelectedFrameHelper from '@/common/components/video/filmstrip/SelectedFrameHelper';\nimport {isPlayingAtom} from '@/demo/atoms';\nimport stylex from '@stylexjs/stylex';\nimport {useAtomValue, useSetAtom} from 'jotai';\nimport {CanvasSpace, Pt} from 'pts';\nimport {useCallback, useEffect, useMemo, useRef} from 'react';\nimport {PtsCanvas, PtsCanvasImperative} from 'react-pts-canvas';\nimport {VideoRef} from '../Video';\nimport {DecodeEvent, FrameUpdateEvent} from '../VideoWorkerBridge';\nimport useVideo from '../editor/useVideo';\nimport {\n  drawFilmstrip,\n  drawMarker,\n  getPointerPosition,\n  getTimeFromFrame,\n} from './FilmstripUtil';\nimport {selectedFrameHelperAtom} from './atoms';\nimport useDisableScrolling from './useDisableScrolling';\n\nconst styles = stylex.create({\n  container: {\n    display: 'flex',\n    flexDirection: 'column',\n  },\n  filmstripWrapper: {\n    position: 'relative',\n    width: '100%',\n    height: '5rem' /* 80px */,\n  },\n  filmstrip: {\n    position: 'absolute',\n    top: 0,\n    left: 0,\n    bottom: 0,\n    right: 0,\n    cursor: 'col-resize',\n    overflow: 'hidden',\n  },\n  canvas: {\n    width: '100%',\n    height: '100%',\n  },\n});\n\nexport const PADDING_TOP = 30;\nexport const PADDING_BOTTOM = 0;\n\nexport default function VideoFilmstrip() {\n  const video = useVideo();\n  const ptsCanvasRef = useRef<PtsCanvasImperative | null>(null);\n  const filmstripRef = useRef<ImageBitmap | null>(null);\n  const isPlayingOnPointerDownRef = useRef<boolean>(false);\n  const isPlaying = useAtomValue(isPlayingAtom);\n\n  const {enable: enableScrolling, disable: disableScrolling} =\n    useDisableScrolling();\n\n  const pointerPositionRef = useRef<Pt | null>(null);\n  const animateRAFHandle = useRef<number | null>(null);\n\n  const selectedFrameHelper = useMemo(() => new SelectedFrameHelper(1, 1), []);\n  const setSelectedFrameHelper = useSetAtom(selectedFrameHelperAtom);\n\n  const fpsRef = useRef<number>(30);\n\n  useEffect(() => {\n    function onDecode(event: DecodeEvent) {\n      video?.removeEventListener('decode', onDecode);\n      fpsRef.current = event.fps;\n    }\n    video?.addEventListener('decode', onDecode);\n    return () => {\n      video?.removeEventListener('decode', onDecode);\n    };\n  }, [video]);\n\n  useEffect(() => {\n    setSelectedFrameHelper(selectedFrameHelper);\n  }, [setSelectedFrameHelper, selectedFrameHelper]);\n\n  const computeFrame = useCallback(\n    (normalizedPosition: number): {index: number} | null => {\n      if (video == null) {\n        return null;\n      }\n\n      const numFrames = video.numberOfFrames;\n      const index = Math.min(\n        Math.max(0, Math.floor(normalizedPosition * numFrames)),\n        numFrames - 1,\n      );\n      // The frame is needed for the CAE model. Do we still want to support it?\n      // return {image: decodedVideo.frames[index], index: index};\n      return {index};\n    },\n    [video],\n  );\n\n  const createFilmstrip = useCallback(\n    async (\n      video: VideoRef | null,\n      space: CanvasSpace | undefined,\n      frameIndex?: number,\n    ) => {\n      if (video === null || space == undefined) {\n        return;\n      }\n\n      const bitmap: ImageBitmap = await video?.createFilmstrip(\n        space.width,\n        space.height - (PADDING_TOP - PADDING_BOTTOM),\n      );\n\n      filmstripRef.current = bitmap;\n\n      selectedFrameHelper.reset(video.numberOfFrames, space.width, frameIndex); // also reset index to first frame\n\n      return bitmap;\n    },\n    [selectedFrameHelper],\n  );\n\n  // Custom animation handler\n  const handleRAF = useCallback(() => {\n    animateRAFHandle.current = null;\n    const space = ptsCanvasRef.current?.getSpace();\n    const form = ptsCanvasRef.current?.getForm();\n    if (space == undefined || form == undefined) {\n      return;\n    }\n\n    // Clear space, in particular clearing the frame index number of\n    // previous renders.\n    space.clear();\n\n    drawFilmstrip(filmstripRef.current, space, form);\n\n    const scanLabel =\n      selectedFrameHelper.isScanning &&\n      pointerPositionRef.current !== null &&\n      fpsRef.current !== null &&\n      getTimeFromFrame(\n        computeFrame(pointerPositionRef.current.x / space.width)?.index ?? 0,\n        fpsRef.current,\n      );\n\n    drawMarker(\n      space,\n      form,\n      selectedFrameHelper,\n      pointerPositionRef.current,\n      scanLabel,\n      fpsRef.current,\n    );\n  }, [computeFrame, selectedFrameHelper]);\n\n  const handleAnimate = useCallback(() => {\n    if (animateRAFHandle.current === null) {\n      animateRAFHandle.current = requestAnimationFrame(handleRAF);\n    }\n  }, [handleRAF]);\n\n  const handleFrameUpdate = useCallback(\n    (event: FrameUpdateEvent) => {\n      if (!selectedFrameHelper.isScanning) {\n        selectedFrameHelper.select(event.index);\n      }\n      handleAnimate();\n    },\n    [handleAnimate, selectedFrameHelper],\n  );\n\n  // Register a frame update listener on the video to update the filmstrip\n  // indicator when the video changes frames.\n  useEffect(() => {\n    video?.addEventListener('frameUpdate', handleFrameUpdate);\n    return () => {\n      video?.removeEventListener('frameUpdate', handleFrameUpdate);\n    };\n  }, [video, handleFrameUpdate]);\n\n  // Initiate filmstrip image\n  useEffect(() => {\n    const space = ptsCanvasRef.current?.getSpace();\n\n    async function onLoadStart() {\n      await createFilmstrip(video, space, 0);\n      handleAnimate();\n    }\n\n    async function progress() {\n      await createFilmstrip(video, space, 0);\n      handleAnimate();\n    }\n\n    void progress();\n\n    video?.addEventListener('loadstart', onLoadStart);\n    video?.addEventListener('decode', progress);\n\n    return () => {\n      video?.removeEventListener('loadstart', onLoadStart);\n      video?.removeEventListener('decode', progress);\n    };\n  }, [createFilmstrip, selectedFrameHelper, handleAnimate, video]);\n\n  return (\n    <div {...stylex.props(styles.container)}>\n      <div {...stylex.props(styles.filmstripWrapper)}>\n        <div {...stylex.props(styles.filmstrip)}>\n          <PtsCanvas\n            {...stylex.props(styles.canvas)}\n            ref={ptsCanvasRef}\n            background=\"transparent\"\n            resize={true}\n            refresh={false}\n            play={false}\n            onPtsResize={async space => {\n              if (video != null && space != undefined) {\n                selectedFrameHelper.reset(video.numberOfFrames, space.width);\n              }\n              if (video !== null) {\n                await createFilmstrip(video, space);\n              }\n              handleAnimate();\n            }}\n            onPointerDown={event => {\n              const canvas = ptsCanvasRef.current?.getCanvas();\n              canvas?.setPointerCapture(event.pointerId);\n\n              // Disable page scrolling while interacting with the filmstrip\n              disableScrolling();\n\n              pointerPositionRef.current = getPointerPosition(event);\n              selectedFrameHelper.scan(true);\n\n              // Pause the video when a user initially has their pointer down.\n              // Playback will resume once the onPointerUp event is triggered.\n              isPlayingOnPointerDownRef.current = isPlaying;\n              if (isPlaying) {\n                video?.pause();\n              }\n            }}\n            onPointerUp={event => {\n              // Enable page scrolling after interaction with filmstrip is done\n              enableScrolling();\n\n              const space = ptsCanvasRef.current?.getSpace();\n              if (space != undefined) {\n                pointerPositionRef.current = getPointerPosition(event);\n\n                selectedFrameHelper.scan(false);\n                const frame = computeFrame(\n                  pointerPositionRef.current.x / space.size.x,\n                );\n                if (\n                  frame != null &&\n                  selectedFrameHelper.index !== frame.index\n                ) {\n                  selectedFrameHelper.select(frame.index);\n                  if (video !== null) {\n                    video.frame = frame.index;\n                    if (isPlayingOnPointerDownRef.current) {\n                      video.play();\n                    }\n                  }\n                }\n                handleAnimate();\n              }\n\n              pointerPositionRef.current = null;\n            }}\n            onPointerMove={event => {\n              if (\n                !selectedFrameHelper.isScanning ||\n                pointerPositionRef.current === null\n              ) {\n                return;\n              }\n\n              const space = ptsCanvasRef.current?.getSpace();\n              const form = ptsCanvasRef.current?.getForm();\n              if (\n                selectedFrameHelper.isScanning &&\n                space != null &&\n                form != null\n              ) {\n                pointerPositionRef.current = getPointerPosition(event);\n\n                const frame = computeFrame(\n                  pointerPositionRef.current.x / space.size.x,\n                );\n                if (frame != null) {\n                  handleAnimate();\n                  if (video !== null) {\n                    video.frame = frame.index;\n                  }\n                }\n              }\n            }}\n          />\n        </div>\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/filmstrip/atoms.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {atom} from 'jotai';\nimport SelectedFrameHelper from './SelectedFrameHelper';\n\nexport const selectedFrameHelperAtom = atom<SelectedFrameHelper | null>(null);\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/filmstrip/useDisableScrolling.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {useCallback, useEffect, useRef} from 'react';\n\nfunction preventDefault(event: TouchEvent) {\n  event.preventDefault();\n}\n\nexport default function useDisableScrolling() {\n  const isDisabledRef = useRef<boolean>(false);\n\n  const disable = useCallback(() => {\n    // Scrolling is already disabled\n    if (isDisabledRef.current) {\n      return;\n    }\n    isDisabledRef.current = true;\n    document.body.addEventListener('touchmove', preventDefault, {\n      passive: false,\n    });\n  }, []);\n\n  const enable = useCallback(() => {\n    // Scrolling is not disabled\n    if (!isDisabledRef.current) {\n      return;\n    }\n    isDisabledRef.current = false;\n    document.body.removeEventListener('touchmove', preventDefault);\n  }, []);\n\n  useEffect(() => {\n    // Enable scrolling again on unmount\n    return () => {\n      enable();\n    };\n  }, [enable]);\n\n  return {\n    disable,\n    enable,\n  };\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/filmstrip/useSelectedFrameHelper.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {useAtomValue} from 'jotai';\nimport {selectedFrameHelperAtom} from './atoms';\n\nexport default function useSelectedFrameHelper() {\n  return useAtomValue(selectedFrameHelperAtom);\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/layers/InteractionLayer.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport useVideo from '@/common/components/video/editor/useVideo';\nimport {getPointInImage} from '@/common/components/video/editor/VideoEditorUtils';\nimport {SegmentationPoint} from '@/common/tracker/Tracker';\nimport {labelTypeAtom} from '@/demo/atoms';\nimport stylex from '@stylexjs/stylex';\nimport {useAtomValue} from 'jotai';\nimport {MouseEvent} from 'react';\n\nconst styles = stylex.create({\n  container: {\n    position: 'absolute',\n    left: 0,\n    top: 0,\n    right: 0,\n    bottom: 0,\n  },\n});\n\ntype Props = {\n  onPoint: (point: SegmentationPoint) => void;\n};\n\nexport default function InteractionLayer({onPoint}: Props) {\n  const video = useVideo();\n  // Use labelType to swap positive and negative points. The most important use\n  // case is the switch between positive and negative label for left mouse\n  // clicks.\n  const labelType = useAtomValue(labelTypeAtom);\n\n  return (\n    <div\n      {...stylex.props(styles.container)}\n      onClick={(event: MouseEvent<HTMLDivElement>) => {\n        const canvas = video?.getCanvas();\n        if (canvas != null) {\n          const point = getPointInImage(event, canvas);\n          onPoint([...point, labelType === 'positive' ? 1 : 0]);\n        }\n      }}\n      onContextMenu={event => {\n        event.preventDefault();\n        const canvas = video?.getCanvas();\n        if (canvas != null) {\n          const point = getPointInImage(event, canvas);\n          onPoint([...point, labelType === 'positive' ? 0 : 1]);\n        }\n      }}\n    />\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/layers/PointsLayer.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {SegmentationPoint} from '@/common/tracker/Tracker';\nimport stylex from '@stylexjs/stylex';\nimport {useMemo} from 'react';\nimport useResizeObserver from 'use-resize-observer';\nimport useVideo from '../editor/useVideo';\n\nconst styles = stylex.create({\n  container: {\n    position: 'absolute',\n    width: '100%',\n    height: '100%',\n    pointerEvents: 'none',\n  },\n});\n\ntype Props = {\n  points: SegmentationPoint[];\n  onRemovePoint: (point: SegmentationPoint) => void;\n};\n\nexport function PointsLayer({points, onRemovePoint}: Props) {\n  const video = useVideo();\n  const videoCanvas = useMemo(() => video?.getCanvas(), [video]);\n\n  const {\n    ref,\n    width: containerWidth = 1,\n    height: containerHeight = 1,\n  } = useResizeObserver<SVGElement>();\n\n  const canvasWidth = videoCanvas?.width ?? 1;\n  const canvasHeight = videoCanvas?.height ?? 1;\n\n  const sizeMultiplier = useMemo(() => {\n    const widthMultiplier = canvasWidth / containerWidth;\n    const heightMultiplier = canvasHeight / containerHeight;\n\n    return Math.max(widthMultiplier, heightMultiplier);\n  }, [canvasWidth, canvasHeight, containerWidth, containerHeight]);\n\n  const pointRadius = useMemo(() => 8 * sizeMultiplier, [sizeMultiplier]);\n  const pointStroke = useMemo(() => 2 * sizeMultiplier, [sizeMultiplier]);\n\n  return (\n    <svg\n      ref={ref}\n      {...stylex.props(styles.container)}\n      xmlns=\"http://www.w3.org/2000/svg\"\n      viewBox={`0 0 ${canvasWidth} ${canvasHeight}`}>\n      {/*\n       * This is a debug element to verify the SVG element overlays\n       * perfectly with the canvas element.\n       */}\n      {/*\n      <rect\n        fill=\"rgba(255, 255, 0, 0.5)\"\n        width={decodedVideo?.width}\n        height={decodedVideo?.height}\n      />\n      */}\n      {/* Render points */}\n      {points.map((point, idx) => {\n        const isAdd = point[2] === 1;\n        return (\n          <g key={idx} className=\"cursor-pointer\">\n            <circle\n              className=\"stroke-white hover:stroke-gray-400\"\n              pointerEvents=\"visiblePainted\"\n              cx={point[0]}\n              cy={point[1]}\n              r={pointRadius}\n              fill={isAdd ? '#000000' : '#E6193B'}\n              strokeWidth={pointStroke}\n              onClick={event => {\n                event.stopPropagation();\n                onRemovePoint(point);\n              }}\n            />\n            <line\n              x1={point[0] - pointRadius / 2}\n              y1={point[1]}\n              x2={point[0] + pointRadius / 2}\n              y2={point[1]}\n              strokeWidth={pointStroke}\n              stroke=\"white\"\n            />\n            {isAdd && (\n              <line\n                x1={point[0]}\n                y1={point[1] - pointRadius / 2}\n                x2={point[0]}\n                y2={point[1] + pointRadius / 2}\n                strokeWidth={pointStroke}\n                stroke=\"white\"\n              />\n            )}\n          </g>\n        );\n      })}\n    </svg>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/useInputVideo.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {inputVideoAtom} from '@/demo/atoms';\nimport {useAtom} from 'jotai';\n\nexport default function useInputVideo() {\n  const [inputVideo, setInputVideo] = useAtom(inputVideoAtom);\n  return {inputVideo, setInputVideo};\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/components/video/useVideoWorker.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {RefObject, useEffect, useMemo, useRef} from 'react';\nimport VideoWorkerBridge from './VideoWorkerBridge';\n\ntype Options = {\n  createVideoWorker?: () => Worker;\n  createWorkerBridge?: CreateWorkerBridgeFunction;\n};\n\nconst DEFAULT_OPTIONS: Options = {\n  createVideoWorker: () =>\n    new Worker(new URL('./VideoWorker', import.meta.url), {\n      type: 'module',\n    }),\n};\n\ntype WorkerFactory = () => Worker;\n\ntype CreateWorkerBridgeFunction = (\n  workerFactory: WorkerFactory,\n) => VideoWorkerBridge;\n\nexport default function useVideoWorker(\n  src: string,\n  canvasRef: RefObject<HTMLCanvasElement>,\n  options: Options = {},\n) {\n  const isControlTransferredToOffscreenRef = useRef(false);\n\n  const mergedOptions = useMemo(() => {\n    const definedProps = (o: Options) =>\n      Object.fromEntries(\n        Object.entries(o).filter(([_k, v]) => v !== undefined),\n      );\n    return Object.assign(\n      DEFAULT_OPTIONS,\n      definedProps(options),\n    ) as Required<Options>;\n  }, [options]);\n\n  const worker = useMemo(() => {\n    if (mergedOptions.createWorkerBridge) {\n      return mergedOptions.createWorkerBridge(mergedOptions.createVideoWorker);\n    }\n    return VideoWorkerBridge.create(mergedOptions.createVideoWorker);\n  }, [mergedOptions]);\n\n  useEffect(() => {\n    const canvas = canvasRef.current;\n\n    if (canvas == null) {\n      return;\n    }\n\n    if (isControlTransferredToOffscreenRef.current) {\n      return;\n    }\n\n    isControlTransferredToOffscreenRef.current = true;\n\n    worker.setCanvas(canvas);\n\n    return () => {\n      // Cannot terminate worker in DEV mode\n      // workerRef.current?.terminate();\n    };\n  }, [canvasRef, mergedOptions, worker]);\n\n  useEffect(() => {\n    worker.setSource(src);\n  }, [src, worker]);\n\n  return worker;\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/error/ErrorFallback.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport useReportError from '@/common/error/useReportError';\nimport {Button} from 'react-daisyui';\nimport {FallbackProps} from 'react-error-boundary';\n\nexport default function ErrorFallback({\n  error,\n  resetErrorBoundary,\n}: FallbackProps) {\n  const reportError = useReportError();\n\n  function handleReportError() {\n    reportError(error);\n  }\n\n  return (\n    <div className=\"h-full flex flex-col gap-2 items-center justify-center\">\n      <p>Please check your connection and retry or report error.</p>\n      <div className=\"flex flex-row gap-2\">\n        <Button color=\"ghost\" onClick={resetErrorBoundary}>\n          Retry\n        </Button>\n        <Button\n          className=\"text-error\"\n          color=\"ghost\"\n          onClick={handleReportError}>\n          Report Error\n        </Button>\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/error/ErrorReport.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {getErrorTitle} from '@/common/error/ErrorUtils';\nimport errorReportAtom from '@/common/error/errorReportAtom';\nimport emptyFunction from '@/common/utils/emptyFunction';\nimport {BugAntIcon} from '@heroicons/react/24/outline';\nimport {Editor} from '@monaco-editor/react';\nimport {useAtom} from 'jotai';\nimport {useEffect, useRef} from 'react';\nimport {Button, Modal} from 'react-daisyui';\n\ntype Props = {\n  onReport?: (error: Error) => void;\n};\n\nexport default function ErrorReport({onReport = emptyFunction}: Props) {\n  const [error, setError] = useAtom(errorReportAtom);\n  const errorModalRef = useRef<HTMLDialogElement>(null);\n\n  // Clean error state on ESC\n  useEffect(() => {\n    function onCloseDialog() {\n      setError(null);\n    }\n    const errorModal = errorModalRef.current;\n    errorModal?.addEventListener('close', onCloseDialog);\n    return () => {\n      errorModal?.removeEventListener('close', onCloseDialog);\n    };\n  }, [setError]);\n\n  useEffect(() => {\n    if (error != null) {\n      errorModalRef.current?.showModal();\n    } else {\n      errorModalRef.current?.close();\n    }\n  }, [error, setError]);\n\n  function handleCloseModal() {\n    errorModalRef.current?.close();\n  }\n\n  function handleReport() {\n    if (error != null) {\n      onReport(error);\n    }\n  }\n\n  return (\n    <Modal ref={errorModalRef} className=\"max-w-[800px]\">\n      <Modal.Header>\n        {error != null ? getErrorTitle(error) : 'Unknown error'}\n      </Modal.Header>\n      <Modal.Body>\n        <Editor\n          className=\"h-[400px]\"\n          language=\"javascript\"\n          value={error?.stack ?? ''}\n          options={{\n            wordWrap: 'wordWrapColumn',\n            scrollBeyondLastLine: false,\n            readOnly: true,\n            minimap: {\n              enabled: false,\n            },\n          }}\n        />\n      </Modal.Body>\n      <Modal.Actions>\n        <Button\n          color=\"error\"\n          startIcon={<BugAntIcon className=\"w-4 h-4\" />}\n          onClick={handleReport}>\n          Report\n        </Button>\n        <Button onClick={handleCloseModal}>Close</Button>\n      </Modal.Actions>\n    </Modal>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/error/ErrorSerializationUtils.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport CreateFilmstripError from '@/graphql/errors/CreateFilmstripError';\nimport DrawFrameError from '@/graphql/errors/DrawFrameError';\nimport WebGLContextError from '@/graphql/errors/WebGLContextError';\nimport {errorConstructors} from 'serialize-error';\n\nexport function registerSerializableConstructors() {\n  // @ts-expect-error Wrong `errorConstructors` types\n  errorConstructors.set('DrawFrameError', DrawFrameError);\n  // @ts-expect-error Wrong `errorConstructors` types\n  errorConstructors.set('CreateFilmstripError', CreateFilmstripError);\n  // @ts-expect-error Wrong `errorConstructors` types\n  errorConstructors.set('WebGLContextError', WebGLContextError);\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/error/ErrorUtils.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport CreateFilmstripError from '@/graphql/errors/CreateFilmstripError';\nimport DrawFrameError from '@/graphql/errors/DrawFrameError';\nimport WebGLContextError from '@/graphql/errors/WebGLContextError';\nimport {deserializeError, type ErrorObject} from 'serialize-error';\n\nexport type RenderingErrorType =\n  | 'webgl_context'\n  | 'draw_frame'\n  | 'create_filmstrip'\n  | 'error';\n\nexport function getRenderErrorType(error?: ErrorObject): RenderingErrorType {\n  const deserializedError = deserializeError(error);\n\n  if (deserializedError instanceof WebGLContextError) {\n    return 'webgl_context';\n  }\n  if (deserializedError instanceof DrawFrameError) {\n    return 'draw_frame';\n  }\n  if (deserializedError instanceof CreateFilmstripError) {\n    return 'create_filmstrip';\n  }\n  return 'error';\n}\n\n/**\n * This function extracts the title from an error message.\n * The title is defined as the text before the first newline character.\n *\n * @param error The error object from which the title is to be extracted.\n * @returns The title of the error message.\n * @example\n * ```ts\n * const error = new Error('This is the title\\nThis is the body');\n * const title = getErrorTitle(error);\n * console.log(title); // 'This is the title'\n * ```\n */\nexport function getErrorTitle({message}: Error): string {\n  const idx = message.indexOf('\\n');\n  return idx < 0 ? message : message.substring(0, idx);\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/error/errorReportAtom.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {atom} from 'jotai';\n\nexport default atom<Error | null>(null);\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/error/useReportError.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport errorReportAtom from '@/common/error/errorReportAtom';\nimport {useSetAtom} from 'jotai';\nimport {useCallback} from 'react';\n\nexport default function useReportError() {\n  const setError = useSetAtom(errorReportAtom);\n  return useCallback(\n    (error: unknown) => {\n      if (typeof error === 'string') {\n        setError(new Error(error));\n      } else if (error instanceof Error) {\n        setError(error);\n      } else {\n        setError(new Error('unknown error occurred'));\n      }\n    },\n    [setError],\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/loading/LoadingMessage.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {Loading} from 'react-daisyui';\n\nexport default function LoadingMessage() {\n  return (\n    <div className=\"flex flex-col w-full h-full justify-center items-center bg-black text-white\">\n      <div className=\"flex justify-center\">\n        <Loading className=\"mr-2\" /> Fetching data\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/loading/LoadingStateScreen.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport introVideo from '@/assets/videos/sam2_720px_dark.mp4';\nimport introVideoPoster from '@/assets/videos/sam2_video_poster.png';\nimport StaticVideoPlayer from '@/common/loading/StaticVideoPlayer';\nimport {borderRadius, fontSize, spacing} from '@/theme/tokens.stylex';\nimport stylex from '@stylexjs/stylex';\nimport {PropsWithChildren, ReactNode} from 'react';\nimport {Link} from 'react-router-dom';\n\nconst styles = stylex.create({\n  container: {\n    backgroundColor: '#000',\n    minHeight: '100%',\n  },\n  content: {\n    display: 'flex',\n    flexDirection: 'column',\n    gap: spacing[8],\n    maxWidth: '36rem', //* 576px */\n    marginHorizontal: 'auto',\n    paddingVertical: {\n      default: '6rem',\n      '@media screen and (max-width: 768px)': '3rem',\n    },\n    paddingHorizontal: spacing[8],\n    color: '#fff',\n  },\n  animationContainer: {\n    display: 'flex',\n    justifyContent: 'center',\n  },\n  animation: {\n    border: '2px solid white',\n    borderRadius: borderRadius['xl'],\n    maxWidth: 450,\n    maxHeight: 450,\n    height: '100%',\n    overflow: 'hidden',\n    '@media screen and (max-width: 768px)': {\n      height: 300,\n      width: 300,\n    },\n  },\n  title: {\n    textAlign: 'center',\n    lineHeight: '2rem',\n    fontSize: fontSize['2xl'],\n    fontWeight: 400,\n  },\n  description: {\n    textAlign: 'center',\n    color: '#A7B3BF',\n  },\n  link: {\n    textAlign: 'center',\n    textDecorationLine: 'underline',\n    color: '#A7B3BF',\n  },\n});\n\ntype Props = PropsWithChildren<{\n  title: string;\n  description?: string | ReactNode;\n  linkProps?: {\n    to: string;\n    label: string;\n  };\n}>;\n\nexport default function LoadingStateScreen({\n  title,\n  description,\n  children,\n  linkProps,\n}: Props) {\n  return (\n    <div {...stylex.props(styles.container)}>\n      <div {...stylex.props(styles.content)}>\n        <div {...stylex.props(styles.animationContainer)}>\n          <div {...stylex.props(styles.animation)}>\n            <StaticVideoPlayer\n              src={introVideo}\n              aspectRatio=\"square\"\n              poster={introVideoPoster}\n              muted={true}\n              loop={true}\n              autoPlay={true}\n              playsInline={true}\n              controls={false}\n            />\n          </div>\n        </div>\n        <h2 {...stylex.props(styles.title)}>{title}</h2>\n        {description != null && (\n          <div {...stylex.props(styles.description)}>{description}</div>\n        )}\n        {children}\n        {linkProps != null && (\n          <Link to={linkProps.to} {...stylex.props(styles.link)}>\n            {linkProps.label}\n          </Link>\n        )}\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/loading/StaticVideoPlayer.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport React from 'react';\n\nexport type VideoAspectRatio = 'wide' | 'square' | 'normal' | 'fill';\n\nexport type VideoProps = {\n  src: string;\n  aspectRatio?: VideoAspectRatio;\n  className?: string;\n  containerClassName?: string;\n} & React.VideoHTMLAttributes<HTMLVideoElement>;\n\nexport default function StaticVideoPlayer({\n  src,\n  aspectRatio,\n  className = '',\n  containerClassName = '',\n  ...props\n}: VideoProps) {\n  let aspect =\n    aspectRatio === 'wide'\n      ? `aspect-video`\n      : aspectRatio === 'square'\n        ? 'aspect-square'\n        : 'aspect-auto';\n\n  let videoSize = '';\n\n  if (aspectRatio === 'fill') {\n    aspect =\n      'absolute object-cover right-0 bottom-0 min-w-full min-h-full h-full';\n    videoSize = 'w-full h-full object-cover object-center';\n  }\n\n  return (\n    <div\n      className={`w-full relative flex flex-col ${aspect} ${containerClassName}`}>\n      <video className={`m-0 ${videoSize} ${className}`} {...props}>\n        <source src={src} type=\"video/mp4\" />\n        Sorry, your browser does not support embedded videos.\n      </video>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/loading/UploadLoadingScreen.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport ChangeVideoModal from '@/common/components/gallery/ChangeVideoModal';\nimport type {VideoGalleryTriggerProps} from '@/common/components/gallery/DemoVideoGalleryModal';\nimport LoadingStateScreen from '@/common/loading/LoadingStateScreen';\nimport {uploadingStateAtom} from '@/demo/atoms';\nimport {ImageCopy} from '@carbon/icons-react';\nimport {useAtomValue} from 'jotai';\nimport OptionButton from '../components/options/OptionButton';\n\nexport default function UploadLoadingScreen() {\n  const uploadingState = useAtomValue(uploadingStateAtom);\n\n  if (uploadingState === 'error') {\n    return (\n      <LoadingStateScreen\n        title=\"Uh oh, we cannot process this video\"\n        description=\"Please upload another video, and make sure that the video’s file size is less than 70Mb. \">\n        <div className=\"max-w-[250px] w-full mx-auto\">\n          <ChangeVideoModal\n            videoGalleryModalTrigger={UploadLoadingScreenChangeVideoTrigger}\n          />\n        </div>\n      </LoadingStateScreen>\n    );\n  }\n\n  return (\n    <LoadingStateScreen\n      title=\"Uploading video...\"\n      description=\"Sit tight while we upload your video.\"\n    />\n  );\n}\n\nfunction UploadLoadingScreenChangeVideoTrigger({\n  onClick,\n}: VideoGalleryTriggerProps) {\n  return (\n    <OptionButton\n      variant=\"gradient\"\n      title=\"Change video\"\n      Icon={ImageCopy}\n      onClick={onClick}\n    />\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/logger/DemoLogger.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {RenderingErrorType} from '@/common/error/ErrorUtils';\nimport Logger from './Logger';\n\ntype UploadSourceType = 'gallery' | 'option';\n\n// Maps event names to an optional payload for each event\ntype DemoEventMap = {\n  // User events\n  user_click_canvas: {\n    click_type: 'add_point' | 'remove_point';\n    click_action: 'add_object' | 'refine_object';\n    click_variant?: 'positive' | 'negative';\n  };\n  user_click_object: {\n    tracklet_id: number;\n  };\n  user_click_track_and_play: {\n    track_and_play_click_type: 'stream' | 'abort';\n  };\n  user_click_apply_effect: {\n    effect_type: 'background' | 'object';\n    effect_name: string;\n    effect_variant: number;\n  };\n  user_change_video: {\n    gallery_video_url: string;\n  };\n  user_upload_video: {\n    upload_source: UploadSourceType;\n  };\n  user_click_share: {\n    gallery_video_url: string;\n  };\n  user_click_download: {\n    gallery_video_url: string;\n  };\n  user_click_web_share: undefined;\n  // Error events\n  client_error_rendering: {\n    rendering_error_type: RenderingErrorType;\n  };\n  client_error_start_session: undefined;\n  client_error_upload_video: {\n    upload_source: UploadSourceType;\n    upload_error_message: string;\n  };\n  client_error_unsupported_browser: undefined;\n  client_error_page_not_found: {\n    path: string;\n  };\n  client_error_general: {\n    message: string;\n  };\n  client_error_fallback: {\n    fallback_error_message: string;\n  };\n\n  // Dataset events\n  client_error_fallback_dataset: {\n    dataset_fallback_error_message: string;\n  };\n  dataset_client_impression_event: {\n    impression_type: 'grid_view' | 'detailed_view';\n    video_id?: string;\n  };\n  dataset_client_click_events: {\n    click_type: 'search' | 'next_page' | 'prev_page';\n    video_id?: string;\n  };\n};\n\nexport interface LoggerInterface<TEventMap> {\n  event: <K extends keyof TEventMap>(\n    eventName: K,\n    options?: TEventMap[K],\n  ) => void;\n}\n\nexport function initialize(): void {\n  // noop\n}\n\nexport class DemoLogger implements LoggerInterface<DemoEventMap> {\n  event<K extends keyof DemoEventMap>(eventName: K, options?: DemoEventMap[K]) {\n    Logger.info(eventName, options ?? {});\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/logger/LogEnvironment.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {LogLevel} from '@/common/logger/Logger';\n\n// Only enable debug logging in modes that are set in MODES_WITH_LOGGER. The\n// default is always error only.\nexport const LOG_LEVEL: LogLevel =\n  import.meta.env.MODE === 'production' ? 'debug' : 'error';\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/logger/Logger.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {LOG_LEVEL} from './LogEnvironment';\n\n/** Signature of a logging function */\nexport type LogFn = {\n  (message?: unknown, ...optionalParams: unknown[]): void;\n};\n\n/** Basic logger interface */\nexport interface Logger {\n  info: LogFn;\n  warn: LogFn;\n  error: LogFn;\n  debug: LogFn;\n}\n\n/** Log levels */\nexport type LogLevel = 'info' | 'warn' | 'error' | 'debug';\n\nconst NO_OP: LogFn = (_message?: unknown, ..._optionalParams: unknown[]) => {};\n\n/** Logger which outputs to the browser console */\nexport class ConsoleLogger implements Logger {\n  readonly info: LogFn;\n  readonly warn: LogFn;\n  readonly error: LogFn;\n  readonly debug: LogFn;\n\n  constructor(options?: {level?: LogLevel}) {\n    const {level} = options || {};\n\n    // eslint-disable-next-line no-console\n    this.error = console.error.bind(console);\n\n    if (level === 'error') {\n      this.debug = NO_OP;\n      this.warn = NO_OP;\n      this.info = NO_OP;\n\n      return;\n    }\n\n    // eslint-disable-next-line no-console\n    this.warn = console.warn.bind(console);\n\n    if (level === 'warn') {\n      this.debug = NO_OP;\n      this.info = NO_OP;\n\n      return;\n    }\n\n    // eslint-disable-next-line no-console\n    this.info = console.log.bind(console);\n\n    if (level === 'info') {\n      this.debug = NO_OP;\n\n      return;\n    }\n\n    // eslint-disable-next-line no-console\n    this.debug = console.debug.bind(console);\n  }\n}\n\nexport default new ConsoleLogger({level: LOG_LEVEL});\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/screen/useScreenSize.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {screenSizes} from '@/theme/tokens.stylex';\nimport {useLayoutEffect, useState} from 'react';\n\nexport default function useScreenSize(): {\n  screenSize: number;\n  isMobile: boolean;\n} {\n  const [screenSize, setScreenSize] = useState<number>(0);\n\n  useLayoutEffect(() => {\n    const updateSize = (): void => {\n      setScreenSize(window.innerWidth);\n    };\n    window.addEventListener('resize', updateSize);\n    updateSize();\n    return (): void => window.removeEventListener('resize', updateSize);\n  }, []);\n\n  return {isMobile: screenSize < screenSizes['md'], screenSize};\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/tracker/SAM2Model.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {generateThumbnail} from '@/common/components/video/editor/VideoEditorUtils';\nimport VideoWorkerContext from '@/common/components/video/VideoWorkerContext';\nimport Logger from '@/common/logger/Logger';\nimport {\n  SAM2ModelAddNewPointsMutation,\n  SAM2ModelAddNewPointsMutation$data,\n} from '@/common/tracker/__generated__/SAM2ModelAddNewPointsMutation.graphql';\nimport {SAM2ModelCancelPropagateInVideoMutation} from '@/common/tracker/__generated__/SAM2ModelCancelPropagateInVideoMutation.graphql';\nimport {SAM2ModelClearPointsInFrameMutation} from '@/common/tracker/__generated__/SAM2ModelClearPointsInFrameMutation.graphql';\nimport {SAM2ModelClearPointsInVideoMutation} from '@/common/tracker/__generated__/SAM2ModelClearPointsInVideoMutation.graphql';\nimport {SAM2ModelCloseSessionMutation} from '@/common/tracker/__generated__/SAM2ModelCloseSessionMutation.graphql';\nimport {SAM2ModelRemoveObjectMutation} from '@/common/tracker/__generated__/SAM2ModelRemoveObjectMutation.graphql';\nimport {SAM2ModelStartSessionMutation} from '@/common/tracker/__generated__/SAM2ModelStartSessionMutation.graphql';\nimport {\n  BaseTracklet,\n  Mask,\n  SegmentationPoint,\n  StreamingState,\n  Tracker,\n  Tracklet,\n} from '@/common/tracker/Tracker';\nimport {TrackerOptions} from '@/common/tracker/Trackers';\nimport {\n  ClearPointsInVideoResponse,\n  SessionStartFailedResponse,\n  SessionStartedResponse,\n  StreamingCompletedResponse,\n  StreamingStartedResponse,\n  StreamingStateUpdateResponse,\n  TrackletCreatedResponse,\n  TrackletDeletedResponse,\n  TrackletsUpdatedResponse,\n} from '@/common/tracker/TrackerTypes';\nimport {convertMaskToRGBA} from '@/common/utils/MaskUtils';\nimport multipartStream from '@/common/utils/MultipartStream';\nimport {Stats} from '@/debug/stats/Stats';\nimport {INFERENCE_API_ENDPOINT} from '@/demo/DemoConfig';\nimport {createEnvironment} from '@/graphql/RelayEnvironment';\nimport {\n  DataArray,\n  Masks,\n  RLEObject,\n  decode,\n  encode,\n  toBbox,\n} from '@/jscocotools/mask';\nimport {THEME_COLORS} from '@/theme/colors';\nimport invariant from 'invariant';\nimport {IEnvironment, commitMutation, graphql} from 'relay-runtime';\n\ntype Options = Pick<TrackerOptions, 'inferenceEndpoint'>;\n\ntype Session = {\n  id: string | null;\n  tracklets: {[id: number]: Tracklet};\n};\n\ntype StreamMasksResult = {\n  frameIndex: number;\n  rleMaskList: Array<{\n    objectId: number;\n    rleMask: RLEObject;\n  }>;\n};\n\ntype StreamMasksAbortResult = {\n  aborted: boolean;\n};\n\nexport class SAM2Model extends Tracker {\n  private _endpoint: string;\n  private _environment: IEnvironment;\n\n  private abortController: AbortController | null = null;\n  private _session: Session = {\n    id: null,\n    tracklets: {},\n  };\n  private _streamingState: StreamingState = 'none';\n\n  private _emptyMask: RLEObject | null = null;\n\n  private _maskCanvas: OffscreenCanvas;\n  private _maskCtx: OffscreenCanvasRenderingContext2D;\n\n  private _stats?: Stats;\n\n  constructor(\n    context: VideoWorkerContext,\n    options: Options = {\n      inferenceEndpoint: INFERENCE_API_ENDPOINT,\n    },\n  ) {\n    super(context);\n    this._endpoint = options.inferenceEndpoint;\n    this._environment = createEnvironment(options.inferenceEndpoint);\n\n    this._maskCanvas = new OffscreenCanvas(0, 0);\n    const maskCtx = this._maskCanvas.getContext('2d');\n    invariant(maskCtx != null, 'context cannot be null');\n    this._maskCtx = maskCtx;\n  }\n\n  public startSession(videoPath: string): Promise<void> {\n    // Reset streaming state. Force update with the true flag to make sure the\n    // UI updates its state.\n    this._updateStreamingState('none', true);\n\n    return new Promise(resolve => {\n      try {\n        commitMutation<SAM2ModelStartSessionMutation>(this._environment, {\n          mutation: graphql`\n            mutation SAM2ModelStartSessionMutation($input: StartSessionInput!) {\n              startSession(input: $input) {\n                sessionId\n              }\n            }\n          `,\n          variables: {\n            input: {\n              path: videoPath,\n            },\n          },\n          onCompleted: response => {\n            const {sessionId} = response.startSession;\n            this._session.id = sessionId;\n\n            this._sendResponse<SessionStartedResponse>('sessionStarted', {\n              sessionId,\n            });\n\n            // Clear any tracklets from the previous session when\n            // a new session is started\n            this._clearTracklets();\n\n            // Make an empty tracklet\n            this.createTracklet();\n            resolve();\n          },\n          onError: error => {\n            Logger.error(error);\n            this._sendResponse<SessionStartFailedResponse>(\n              'sessionStartFailed',\n            );\n            resolve();\n          },\n        });\n      } catch (error) {\n        Logger.error(error);\n        this._sendResponse<SessionStartFailedResponse>('sessionStartFailed');\n        resolve();\n      }\n    });\n  }\n\n  public closeSession(): Promise<void> {\n    const sessionId = this._session.id;\n\n    // Do not call cleanup before retrieving the session id because cleanup\n    // will reset the session id. If the order would be changed, it would\n    // never execute the closeSession mutation.\n    this._cleanup();\n\n    if (sessionId === null) {\n      return Promise.resolve();\n    }\n    return new Promise((resolve, reject) => {\n      commitMutation<SAM2ModelCloseSessionMutation>(this._environment, {\n        mutation: graphql`\n          mutation SAM2ModelCloseSessionMutation($input: CloseSessionInput!) {\n            closeSession(input: $input) {\n              success\n            }\n          }\n        `,\n        variables: {\n          input: {\n            sessionId,\n          },\n        },\n        onCompleted: response => {\n          const {success} = response.closeSession;\n          if (success === false) {\n            reject(new Error('Failed to close session'));\n            return;\n          }\n          resolve();\n        },\n        onError: error => {\n          Logger.error(error);\n          reject(error);\n        },\n      });\n    });\n  }\n\n  public createTracklet(): void {\n    // This will return 0 for for empty tracklets and otherwise the next\n    // largest number.\n    const nextId =\n      Object.values(this._session.tracklets).reduce(\n        (prev, curr) => Math.max(prev, curr.id),\n        -1,\n      ) + 1;\n\n    const newTracklet = {\n      id: nextId,\n      color: THEME_COLORS[nextId % THEME_COLORS.length],\n      thumbnail: null,\n      points: [],\n      masks: [],\n      isInitialized: false,\n    };\n\n    this._session.tracklets[nextId] = newTracklet;\n\n    // Notify the main thread\n    this._updateTracklets();\n\n    this._sendResponse<TrackletCreatedResponse>('trackletCreated', {\n      tracklet: newTracklet,\n    });\n  }\n\n  public deleteTracklet(trackletId: number): Promise<void> {\n    const sessionId = this._session.id;\n    if (sessionId === null) {\n      return Promise.reject('No active session');\n    }\n\n    const tracklet = this._session.tracklets[trackletId];\n    invariant(\n      tracklet != null,\n      'tracklet for tracklet id %s not initialized',\n      trackletId,\n    );\n\n    return new Promise((resolve, reject) => {\n      commitMutation<SAM2ModelRemoveObjectMutation>(this._environment, {\n        mutation: graphql`\n          mutation SAM2ModelRemoveObjectMutation($input: RemoveObjectInput!) {\n            removeObject(input: $input) {\n              frameIndex\n              rleMaskList {\n                objectId\n                rleMask {\n                  counts\n                  size\n                }\n              }\n            }\n          }\n        `,\n        variables: {\n          input: {objectId: trackletId, sessionId},\n        },\n        onCompleted: response => {\n          const trackletUpdates = response.removeObject;\n          this._sendResponse<TrackletDeletedResponse>('trackletDeleted', {\n            isSuccessful: true,\n          });\n          for (const trackletUpdate of trackletUpdates) {\n            this._updateTrackletMasks(\n              trackletUpdate,\n              trackletUpdate.frameIndex === this._context.frameIndex,\n              false, // shouldGoToFrame\n            );\n          }\n          this._removeTrackletMasks(tracklet);\n          resolve();\n        },\n        onError: error => {\n          this._sendResponse<TrackletDeletedResponse>('trackletDeleted', {\n            isSuccessful: false,\n          });\n          Logger.error(error);\n          reject(error);\n        },\n      });\n    });\n  }\n\n  public updatePoints(\n    frameIndex: number,\n    objectId: number,\n    points: SegmentationPoint[],\n  ): Promise<void> {\n    const sessionId = this._session.id;\n    if (sessionId === null) {\n      return Promise.reject('No active session');\n    }\n\n    // TODO: This is not the right place to initialize the empty mask.\n    // Move this into the constructor and listen to events on the context.\n    // Note, the initial context.width and context.height is 0, so it needs\n    // to happen based on an event, so when the video is initialized, it needs\n    // to notify the tracker to update the empty mask.\n    if (this._emptyMask === null) {\n      // We need to round the height/width to the nearest integer since\n      // Masks.toTensor() expects an integer value for the height/width.\n      const tensor = new Masks(\n        Math.trunc(this._context.height),\n        Math.trunc(this._context.width),\n        1,\n      ).toDataArray();\n      this._emptyMask = encode(tensor)[0];\n    }\n\n    const tracklet = this._session.tracklets[objectId];\n    invariant(\n      tracklet != null,\n      'tracklet for object id %s not initialized',\n      objectId,\n    );\n\n    // Mark session needing propagation when point is set\n    this._updateStreamingState('required');\n\n    // Clear all points in frame if no points are provided.\n    if (points.length === 0) {\n      return this.clearPointsInFrame(frameIndex, objectId);\n    }\n    return new Promise((resolve, reject) => {\n      const normalizedPoints = points.map(p => [\n        p[0] / this._context.width,\n        p[1] / this._context.height,\n      ]);\n      const labels = points.map(p => p[2]);\n      commitMutation<SAM2ModelAddNewPointsMutation>(this._environment, {\n        mutation: graphql`\n          mutation SAM2ModelAddNewPointsMutation($input: AddPointsInput!) {\n            addPoints(input: $input) {\n              frameIndex\n              rleMaskList {\n                objectId\n                rleMask {\n                  counts\n                  size\n                }\n              }\n            }\n          }\n        `,\n        variables: {\n          input: {\n            sessionId,\n            frameIndex,\n            objectId,\n            labels: labels,\n            points: normalizedPoints,\n            clearOldPoints: true,\n          },\n        },\n        onCompleted: response => {\n          tracklet.points[frameIndex] = points;\n          tracklet.isInitialized = true;\n          this._updateTrackletMasks(response.addPoints, true);\n          resolve();\n        },\n        onError: error => {\n          Logger.error(error);\n          reject(error);\n        },\n      });\n    });\n  }\n\n  public clearPointsInFrame(\n    frameIndex: number,\n    objectId: number,\n  ): Promise<void> {\n    const sessionId = this._session.id;\n    if (sessionId === null) {\n      return Promise.reject('No active session');\n    }\n\n    const tracklet = this._session.tracklets[objectId];\n    invariant(\n      tracklet != null,\n      'tracklet for object id %s not initialized',\n      objectId,\n    );\n\n    // Mark session needing propagation when point is set\n    this._updateStreamingState('required');\n\n    return new Promise((resolve, reject) => {\n      commitMutation<SAM2ModelClearPointsInFrameMutation>(this._environment, {\n        mutation: graphql`\n          mutation SAM2ModelClearPointsInFrameMutation(\n            $input: ClearPointsInFrameInput!\n          ) {\n            clearPointsInFrame(input: $input) {\n              frameIndex\n              rleMaskList {\n                objectId\n                rleMask {\n                  counts\n                  size\n                }\n              }\n            }\n          }\n        `,\n        variables: {\n          input: {\n            sessionId,\n            frameIndex,\n            objectId,\n          },\n        },\n        onCompleted: response => {\n          tracklet.points[frameIndex] = [];\n          tracklet.isInitialized = true;\n          this._updateTrackletMasks(response.clearPointsInFrame, true);\n          resolve();\n        },\n        onError: error => {\n          Logger.error(error);\n          reject(error);\n        },\n      });\n    });\n  }\n\n  public clearPointsInVideo(): Promise<void> {\n    const sessionId = this._session.id;\n    if (sessionId === null) {\n      return Promise.reject('No active session');\n    }\n\n    // Mark session needing propagation when point is set\n    this._updateStreamingState('none');\n\n    return new Promise(resolve => {\n      commitMutation<SAM2ModelClearPointsInVideoMutation>(this._environment, {\n        mutation: graphql`\n          mutation SAM2ModelClearPointsInVideoMutation(\n            $input: ClearPointsInVideoInput!\n          ) {\n            clearPointsInVideo(input: $input) {\n              success\n            }\n          }\n        `,\n        variables: {\n          input: {\n            sessionId,\n          },\n        },\n        onCompleted: response => {\n          const {success} = response.clearPointsInVideo;\n          if (!success) {\n            this._sendResponse<ClearPointsInVideoResponse>(\n              'clearPointsInVideo',\n              {isSuccessful: false},\n            );\n            return;\n          }\n\n          // Reset points and masks for each tracklet\n          this._clearTracklets();\n\n          // Notify the main thread\n          this._context.goToFrame(this._context.frameIndex);\n          this._updateTracklets();\n          this._sendResponse<ClearPointsInVideoResponse>('clearPointsInVideo', {\n            isSuccessful: true,\n          });\n          resolve();\n        },\n        onError: error => {\n          this._sendResponse<ClearPointsInVideoResponse>('clearPointsInVideo', {\n            isSuccessful: false,\n          });\n          Logger.error(error);\n        },\n      });\n    });\n  }\n\n  public async streamMasks(frameIndex: number): Promise<void> {\n    const sessionId = this._session.id;\n    if (sessionId === null) {\n      return Promise.reject('No active session');\n    }\n    try {\n      this._sendResponse<StreamingStartedResponse>('streamingStarted');\n\n      // 1. Clear previous masks\n      this._context.clearMasks();\n      this._clearTrackletMasks();\n\n      // 2. Create abort controller and async generator\n      const controller = new AbortController();\n      this.abortController = controller;\n\n      this._updateStreamingState('requesting');\n      const generator = this._streamMasksForSession(\n        controller,\n        sessionId,\n        frameIndex,\n      );\n\n      // 3. parse stream response and update masks in session objects\n      let isAborted = false;\n      for await (const result of generator) {\n        if ('aborted' in result) {\n          this._updateStreamingState('aborting');\n          await this._abortRequest();\n          this._updateStreamingState('aborted');\n          isAborted = true;\n        } else {\n          await this._updateTrackletMasks(result, false);\n          this._updateStreamingState('partial');\n        }\n      }\n\n      if (!isAborted) {\n        // Mark session needing propagation when point is set\n        this._updateStreamingState('full');\n      }\n    } catch (error) {\n      Logger.error(error);\n      throw error;\n    }\n\n    this._sendResponse<StreamingCompletedResponse>('streamingCompleted');\n  }\n\n  public abortStreamMasks() {\n    this.abortController?.abort();\n    this._sendResponse<StreamingCompletedResponse>('streamingCompleted');\n  }\n\n  public enableStats(): void {\n    this._stats = new Stats('ms', 'D', 1000 / 25);\n  }\n\n  // PRIVATE\n\n  private _cleanup() {\n    this._session.id = null;\n    // Clear existing tracklets\n    this._session.tracklets = [];\n  }\n\n  private _clearTracklets() {\n    this._session.tracklets = [];\n    this._context.clearMasks();\n  }\n\n  private _updateStreamingState(\n    state: StreamingState,\n    forceUpdate: boolean = false,\n  ) {\n    if (!forceUpdate && this._streamingState === state) {\n      return;\n    }\n    this._streamingState = state;\n    this._sendResponse<StreamingStateUpdateResponse>('streamingStateUpdate', {\n      state,\n    });\n  }\n\n  private async _removeTrackletMasks(tracklet: Tracklet) {\n    this._context.clearTrackletMasks(tracklet);\n    delete this._session.tracklets[tracklet.id];\n\n    // Notify the main thread\n    this._context.goToFrame(this._context.frameIndex);\n    this._updateTracklets();\n  }\n\n  private async _updateTrackletMasks(\n    data: SAM2ModelAddNewPointsMutation$data['addPoints'],\n    updateThumbnails: boolean,\n    shouldGoToFrame: boolean = true,\n  ) {\n    const {frameIndex, rleMaskList} = data;\n\n    // 1. parse and decode masks for all objects\n    for (const {objectId, rleMask} of rleMaskList) {\n      const track = this._session.tracklets[objectId];\n      const {size, counts} = rleMask;\n      const rleObject: RLEObject = {\n        size: [size[0], size[1]],\n        counts: counts,\n      };\n      const isEmpty = counts === this._emptyMask?.counts;\n\n      this._stats?.begin();\n\n      const decodedMask = decode([rleObject]);\n      const bbox = toBbox([rleObject]);\n\n      const mask: Mask = {\n        data: rleObject as RLEObject,\n        shape: [...decodedMask.shape],\n        bounds: [\n          [bbox[0], bbox[1]],\n          [bbox[0] + bbox[2], bbox[1] + bbox[3]],\n        ],\n        isEmpty,\n      } as const;\n      track.masks[frameIndex] = mask;\n\n      if (updateThumbnails && !isEmpty) {\n        const {ctx} = await this._compressMaskForCanvas(decodedMask);\n        const frame = this._context.currentFrame as VideoFrame;\n        await generateThumbnail(track, frameIndex, mask, frame, ctx);\n      }\n    }\n\n    this._context.updateTracklets(\n      frameIndex,\n      Object.values(this._session.tracklets),\n      shouldGoToFrame,\n    );\n\n    // Notify the main thread\n    this._updateTracklets();\n  }\n\n  private _updateTracklets() {\n    const tracklets: BaseTracklet[] = Object.values(\n      this._session.tracklets,\n    ).map(tracklet => {\n      // Notify the main thread\n      const {\n        id,\n        color,\n        isInitialized,\n        points: trackletPoints,\n        thumbnail,\n        masks,\n      } = tracklet;\n      return {\n        id,\n        color,\n        isInitialized,\n        points: trackletPoints,\n        thumbnail,\n        masks: masks.map(mask => ({\n          shape: mask.shape,\n          bounds: mask.bounds,\n          isEmpty: mask.isEmpty,\n        })),\n      };\n    });\n\n    this._sendResponse<TrackletsUpdatedResponse>('trackletsUpdated', {\n      tracklets,\n    });\n  }\n\n  private _clearTrackletMasks() {\n    const keys = Object.keys(this._session.tracklets);\n    for (const key of keys) {\n      const trackletId = Number(key);\n      const tracklet = {...this._session.tracklets[trackletId], masks: []};\n      this._session.tracklets[trackletId] = tracklet;\n    }\n    this._updateTracklets();\n  }\n\n  private async _compressMaskForCanvas(\n    decodedMask: DataArray,\n  ): Promise<{compressedData: Blob; ctx: OffscreenCanvasRenderingContext2D}> {\n    const data = convertMaskToRGBA(decodedMask.data as Uint8Array);\n\n    this._maskCanvas.width = decodedMask.shape[0];\n    this._maskCanvas.height = decodedMask.shape[1];\n\n    const imageData = new ImageData(\n      data,\n      decodedMask.shape[0],\n      decodedMask.shape[1],\n    );\n    this._maskCtx.putImageData(imageData, 0, 0);\n\n    const canvas = new OffscreenCanvas(\n      decodedMask.shape[1],\n      decodedMask.shape[0],\n    );\n\n    const ctx = canvas.getContext('2d');\n    invariant(ctx != null, 'context cannot be null');\n    ctx.save();\n    ctx.rotate(Math.PI / 2);\n    // Since the image was previously rotated 90° clockwise, after the image is rotated,\n    // we scale the canvas's width using scaleY and height using scaleX.\n    ctx.scale(1, -1);\n    ctx.drawImage(this._maskCanvas, 0, 0);\n    ctx.restore();\n\n    const compressedData = await canvas.convertToBlob({type: 'image/png'});\n\n    return {compressedData, ctx};\n  }\n\n  private async *_streamMasksForSession(\n    abortController: AbortController,\n    sessionId: string,\n    startFrameIndex: undefined | number = 0,\n  ): AsyncGenerator<StreamMasksResult | StreamMasksAbortResult, undefined> {\n    const url = `${this._endpoint}/propagate_in_video`;\n\n    const requestBody = {\n      session_id: sessionId,\n      start_frame_index: startFrameIndex,\n    };\n\n    const headers: {[name: string]: string} = Object.assign({\n      'Content-Type': 'application/json',\n    });\n\n    const response = await fetch(url, {\n      method: 'POST',\n      body: JSON.stringify(requestBody),\n      headers,\n    });\n\n    const contentType = response.headers.get('Content-Type');\n    if (\n      contentType == null ||\n      !contentType.startsWith('multipart/x-savi-stream;')\n    ) {\n      throw new Error(\n        'endpoint needs to support Content-Type \"multipart/x-savi-stream\"',\n      );\n    }\n\n    const responseBody = response.body;\n    if (responseBody == null) {\n      throw new Error('response body is null');\n    }\n\n    const reader = multipartStream(contentType, responseBody).getReader();\n\n    const textDecoder = new TextDecoder();\n\n    while (true) {\n      if (abortController.signal.aborted) {\n        reader.releaseLock();\n        yield {aborted: true};\n        return;\n      }\n\n      const {done, value} = await reader.read();\n      if (done) {\n        return;\n      }\n\n      const {headers, body} = value;\n\n      const contentType = headers.get('Content-Type') as string;\n\n      if (contentType.startsWith('application/json')) {\n        const jsonResponse = JSON.parse(textDecoder.decode(body));\n        const maskResults = jsonResponse.results;\n        const rleMaskList = maskResults.map(\n          (mask: {object_id: number; mask: RLEObject}) => {\n            return {\n              objectId: mask.object_id,\n              rleMask: mask.mask,\n            };\n          },\n        );\n        yield {\n          frameIndex: jsonResponse.frame_index,\n          rleMaskList,\n        };\n      }\n    }\n  }\n\n  private async _abortRequest(): Promise<void> {\n    const sessionId = this._session.id;\n    invariant(sessionId != null, 'session id cannot be empty');\n    return new Promise((resolve, reject) => {\n      try {\n        commitMutation<SAM2ModelCancelPropagateInVideoMutation>(\n          this._environment,\n          {\n            mutation: graphql`\n              mutation SAM2ModelCancelPropagateInVideoMutation(\n                $input: CancelPropagateInVideoInput!\n              ) {\n                cancelPropagateInVideo(input: $input) {\n                  success\n                }\n              }\n            `,\n            variables: {\n              input: {\n                sessionId,\n              },\n            },\n            onCompleted: response => {\n              const {success} = response.cancelPropagateInVideo;\n              if (!success) {\n                reject(`could not abort session ${sessionId}`);\n                return;\n              }\n              resolve();\n            },\n            onError: error => {\n              Logger.error(error);\n              reject(error);\n            },\n          },\n        );\n      } catch (error) {\n        Logger.error(error);\n        reject(error);\n      }\n    });\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/tracker/Tracker.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport VideoWorkerContext from '@/common/components/video/VideoWorkerContext';\n\nimport {TrackerOptions} from '@/common/tracker/Trackers';\nimport {TrackerResponse} from '@/common/tracker/TrackerTypes';\nimport {RLEObject} from '@/jscocotools/mask';\n\nexport type Point = [x: number, y: number];\n\nexport type SegmentationPoint = [...point: Point, label: 0 | 1];\n\nexport type FramePoints = Array<SegmentationPoint> | undefined;\n\nexport type Mask = DatalessMask & {\n  data: Blob | RLEObject;\n};\n\nexport type DatalessMask = {\n  shape: number[];\n  bounds: [[number, number], [number, number]];\n  isEmpty: boolean;\n};\n\nexport type Tracklet = {\n  id: number;\n  color: string;\n  thumbnail: string | null;\n  points: FramePoints[];\n  masks: Mask[];\n  isInitialized: boolean;\n};\n\nexport type BaseTracklet = Omit<Tracklet, 'masks'> & {\n  masks: DatalessMask[];\n};\n\nexport type StreamingState =\n  | 'none'\n  | 'required'\n  | 'requesting'\n  | 'aborting'\n  | 'aborted'\n  | 'partial'\n  | 'full';\n\nexport interface ITracker {\n  startSession(videoUrl: string): Promise<void>;\n  closeSession(): Promise<void>;\n  createTracklet(): void;\n  deleteTracklet(trackletId: number): Promise<void>;\n  updatePoints(\n    frameIndex: number,\n    objectId: number,\n    points: SegmentationPoint[],\n  ): Promise<void>;\n  clearPointsInFrame(frameIndex: number, objectId: number): Promise<void>;\n  clearPointsInVideo(): Promise<void>;\n  streamMasks(frameIndex: number): Promise<void>;\n  abortStreamMasks(): void;\n  enableStats(): void;\n}\n\nexport abstract class Tracker implements ITracker {\n  protected _context: VideoWorkerContext;\n  constructor(context: VideoWorkerContext, _options?: TrackerOptions) {\n    this._context = context;\n  }\n  abstract startSession(videoUrl: string): Promise<void>;\n  abstract closeSession(): Promise<void>;\n  abstract createTracklet(): void;\n  abstract deleteTracklet(trackletId: number): Promise<void>;\n  abstract updatePoints(\n    frameIndex: number,\n    objectId: number,\n    points: SegmentationPoint[],\n  ): Promise<void>;\n  abstract clearPointsInFrame(\n    frameIndex: number,\n    objectId: number,\n  ): Promise<void>;\n  abstract clearPointsInVideo(): Promise<void>;\n  abstract streamMasks(frameIndex: number): Promise<void>;\n  abstract abortStreamMasks(): void;\n  abstract enableStats(): void;\n\n  // PRIVATE FUNCTIONS\n\n  protected _sendResponse<T extends TrackerResponse>(\n    action: T['action'],\n    message?: Omit<T, 'action'>,\n    transfer?: Transferable[],\n  ): void {\n    self.postMessage(\n      {\n        action,\n        ...message,\n      },\n      {\n        transfer,\n      },\n    );\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/tracker/TrackerTypes.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {SegmentationPoint} from '@/common/tracker/Tracker';\nimport {TrackerOptions, Trackers} from '@/common/tracker/Trackers';\nimport {\n  AddPointsEvent,\n  ClearPointsInVideoEvent,\n  SessionStartFailedEvent,\n  SessionStartedEvent,\n  StreamingCompletedEvent,\n  StreamingStartedEvent,\n  StreamingStateUpdateEvent,\n  TrackletCreatedEvent,\n  TrackletDeletedEvent,\n  TrackletsEvent,\n} from '../components/video/VideoWorkerBridge';\n\nexport type Flags = {\n  masks: boolean;\n  effect: boolean;\n};\n\nexport type Request<A, P> = {\n  action: A;\n} & P;\n\n// REQUESTS\n\nexport type InitializeTrackerRequest = Request<\n  'initializeTracker',\n  {\n    name: keyof Trackers;\n    options: TrackerOptions;\n  }\n>;\nexport type StartSessionRequest = Request<\n  'startSession',\n  {\n    videoUrl: string;\n  }\n>;\nexport type CloseSessionRequest = Request<'closeSession', unknown>;\nexport type CreateTrackletRequest = Request<'createTracklet', unknown>;\nexport type DeleteTrackletRequest = Request<\n  'deleteTracklet',\n  {\n    trackletId: number;\n  }\n>;\nexport type UpdatePointsRequest = Request<\n  'updatePoints',\n  {\n    frameIndex: number;\n    objectId: number;\n    points: SegmentationPoint[];\n  }\n>;\nexport type ClearPointsInFrameRequest = Request<\n  'clearPointsInFrame',\n  {\n    frameIndex: number;\n    objectId: number;\n  }\n>;\nexport type ClearPointsInVideoRequest = Request<'clearPointsInVideo', unknown>;\nexport type StreamMasksRequest = Request<\n  'streamMasks',\n  {\n    frameIndex: number;\n  }\n>;\nexport type AbortStreamMasksRequest = Request<'abortStreamMasks', unknown>;\n\nexport type LogAnnotationsRequest = Request<'logAnnotations', unknown>;\n\nexport type TrackerRequest =\n  | InitializeTrackerRequest\n  | StartSessionRequest\n  | CloseSessionRequest\n  | CreateTrackletRequest\n  | DeleteTrackletRequest\n  | UpdatePointsRequest\n  | ClearPointsInFrameRequest\n  | ClearPointsInVideoRequest\n  | StreamMasksRequest\n  | AbortStreamMasksRequest\n  | LogAnnotationsRequest;\n\nexport type TrackerRequestMessageEvent = MessageEvent<TrackerRequest>;\n\n// RESPONSES\n\nexport type SessionStartedResponse = Request<\n  'sessionStarted',\n  SessionStartedEvent\n>;\n\nexport type SessionStartFailedResponse = Request<\n  'sessionStartFailed',\n  SessionStartFailedEvent\n>;\n\nexport type TrackletCreatedResponse = Request<\n  'trackletCreated',\n  TrackletCreatedEvent\n>;\n\nexport type TrackletsUpdatedResponse = Request<\n  'trackletsUpdated',\n  TrackletsEvent\n>;\n\nexport type TrackletDeletedResponse = Request<\n  'trackletDeleted',\n  TrackletDeletedEvent\n>;\n\nexport type AddPointsResponse = Request<'addPoints', AddPointsEvent>;\n\nexport type ClearPointsInVideoResponse = Request<\n  'clearPointsInVideo',\n  ClearPointsInVideoEvent\n>;\n\nexport type StreamingStartedResponse = Request<\n  'streamingStarted',\n  StreamingStartedEvent\n>;\n\nexport type StreamingCompletedResponse = Request<\n  'streamingCompleted',\n  StreamingCompletedEvent\n>;\n\nexport type StreamingStateUpdateResponse = Request<\n  'streamingStateUpdate',\n  StreamingStateUpdateEvent\n>;\n\nexport type TrackerResponse =\n  | SessionStartedResponse\n  | SessionStartFailedResponse\n  | TrackletCreatedResponse\n  | TrackletsUpdatedResponse\n  | TrackletDeletedResponse\n  | AddPointsResponse\n  | ClearPointsInVideoResponse\n  | StreamingStartedResponse\n  | StreamingCompletedResponse\n  | StreamingStateUpdateResponse;\n\nexport type TrackerResponseMessageEvent = MessageEvent<TrackerResponse>;\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/tracker/Trackers.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {SAM2Model} from './SAM2Model';\n\nexport type Headers = {[name: string]: string};\n\nexport type TrackerOptions = {\n  inferenceEndpoint: string;\n};\n\nexport type Trackers = {\n  'SAM 2': typeof SAM2Model;\n};\n\nexport const TRACKER_MAPPING: Trackers = {\n  'SAM 2': SAM2Model,\n};\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/tracker/__generated__/SAM2ModelAddNewPointsMutation.graphql.ts",
    "content": "/**\n * @generated SignedSource<<db1ee50f3027130f61feafb624026897>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { ConcreteRequest, Mutation } from 'relay-runtime';\nexport type AddPointsInput = {\n  clearOldPoints: boolean;\n  frameIndex: number;\n  labels: ReadonlyArray<number>;\n  objectId: number;\n  points: ReadonlyArray<ReadonlyArray<number>>;\n  sessionId: string;\n};\nexport type SAM2ModelAddNewPointsMutation$variables = {\n  input: AddPointsInput;\n};\nexport type SAM2ModelAddNewPointsMutation$data = {\n  readonly addPoints: {\n    readonly frameIndex: number;\n    readonly rleMaskList: ReadonlyArray<{\n      readonly objectId: number;\n      readonly rleMask: {\n        readonly counts: string;\n        readonly size: ReadonlyArray<number>;\n      };\n    }>;\n  };\n};\nexport type SAM2ModelAddNewPointsMutation = {\n  response: SAM2ModelAddNewPointsMutation$data;\n  variables: SAM2ModelAddNewPointsMutation$variables;\n};\n\nconst node: ConcreteRequest = (function(){\nvar v0 = [\n  {\n    \"defaultValue\": null,\n    \"kind\": \"LocalArgument\",\n    \"name\": \"input\"\n  }\n],\nv1 = [\n  {\n    \"alias\": null,\n    \"args\": [\n      {\n        \"kind\": \"Variable\",\n        \"name\": \"input\",\n        \"variableName\": \"input\"\n      }\n    ],\n    \"concreteType\": \"RLEMaskListOnFrame\",\n    \"kind\": \"LinkedField\",\n    \"name\": \"addPoints\",\n    \"plural\": false,\n    \"selections\": [\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"frameIndex\",\n        \"storageKey\": null\n      },\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"concreteType\": \"RLEMaskForObject\",\n        \"kind\": \"LinkedField\",\n        \"name\": \"rleMaskList\",\n        \"plural\": true,\n        \"selections\": [\n          {\n            \"alias\": null,\n            \"args\": null,\n            \"kind\": \"ScalarField\",\n            \"name\": \"objectId\",\n            \"storageKey\": null\n          },\n          {\n            \"alias\": null,\n            \"args\": null,\n            \"concreteType\": \"RLEMask\",\n            \"kind\": \"LinkedField\",\n            \"name\": \"rleMask\",\n            \"plural\": false,\n            \"selections\": [\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"counts\",\n                \"storageKey\": null\n              },\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"size\",\n                \"storageKey\": null\n              }\n            ],\n            \"storageKey\": null\n          }\n        ],\n        \"storageKey\": null\n      }\n    ],\n    \"storageKey\": null\n  }\n];\nreturn {\n  \"fragment\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Fragment\",\n    \"metadata\": null,\n    \"name\": \"SAM2ModelAddNewPointsMutation\",\n    \"selections\": (v1/*: any*/),\n    \"type\": \"Mutation\",\n    \"abstractKey\": null\n  },\n  \"kind\": \"Request\",\n  \"operation\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Operation\",\n    \"name\": \"SAM2ModelAddNewPointsMutation\",\n    \"selections\": (v1/*: any*/)\n  },\n  \"params\": {\n    \"cacheID\": \"dc86527e91907e696683458ed0943d2f\",\n    \"id\": null,\n    \"metadata\": {},\n    \"name\": \"SAM2ModelAddNewPointsMutation\",\n    \"operationKind\": \"mutation\",\n    \"text\": \"mutation SAM2ModelAddNewPointsMutation(\\n  $input: AddPointsInput!\\n) {\\n  addPoints(input: $input) {\\n    frameIndex\\n    rleMaskList {\\n      objectId\\n      rleMask {\\n        counts\\n        size\\n      }\\n    }\\n  }\\n}\\n\"\n  }\n};\n})();\n\n(node as any).hash = \"3c96f05877dd91668c1f9e8a3f1203a5\";\n\nexport default node;\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/tracker/__generated__/SAM2ModelCancelPropagateInVideoMutation.graphql.ts",
    "content": "/**\n * @generated SignedSource<<87827cb79ef9276cd5a66026151e937c>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { ConcreteRequest, Mutation } from 'relay-runtime';\nexport type CancelPropagateInVideoInput = {\n  sessionId: string;\n};\nexport type SAM2ModelCancelPropagateInVideoMutation$variables = {\n  input: CancelPropagateInVideoInput;\n};\nexport type SAM2ModelCancelPropagateInVideoMutation$data = {\n  readonly cancelPropagateInVideo: {\n    readonly success: boolean;\n  };\n};\nexport type SAM2ModelCancelPropagateInVideoMutation = {\n  response: SAM2ModelCancelPropagateInVideoMutation$data;\n  variables: SAM2ModelCancelPropagateInVideoMutation$variables;\n};\n\nconst node: ConcreteRequest = (function(){\nvar v0 = [\n  {\n    \"defaultValue\": null,\n    \"kind\": \"LocalArgument\",\n    \"name\": \"input\"\n  }\n],\nv1 = [\n  {\n    \"alias\": null,\n    \"args\": [\n      {\n        \"kind\": \"Variable\",\n        \"name\": \"input\",\n        \"variableName\": \"input\"\n      }\n    ],\n    \"concreteType\": \"CancelPropagateInVideo\",\n    \"kind\": \"LinkedField\",\n    \"name\": \"cancelPropagateInVideo\",\n    \"plural\": false,\n    \"selections\": [\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"success\",\n        \"storageKey\": null\n      }\n    ],\n    \"storageKey\": null\n  }\n];\nreturn {\n  \"fragment\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Fragment\",\n    \"metadata\": null,\n    \"name\": \"SAM2ModelCancelPropagateInVideoMutation\",\n    \"selections\": (v1/*: any*/),\n    \"type\": \"Mutation\",\n    \"abstractKey\": null\n  },\n  \"kind\": \"Request\",\n  \"operation\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Operation\",\n    \"name\": \"SAM2ModelCancelPropagateInVideoMutation\",\n    \"selections\": (v1/*: any*/)\n  },\n  \"params\": {\n    \"cacheID\": \"f00f78f24741d27828f0bd95b0f373c2\",\n    \"id\": null,\n    \"metadata\": {},\n    \"name\": \"SAM2ModelCancelPropagateInVideoMutation\",\n    \"operationKind\": \"mutation\",\n    \"text\": \"mutation SAM2ModelCancelPropagateInVideoMutation(\\n  $input: CancelPropagateInVideoInput!\\n) {\\n  cancelPropagateInVideo(input: $input) {\\n    success\\n  }\\n}\\n\"\n  }\n};\n})();\n\n(node as any).hash = \"1abafecade479ab3c45f9cecf0360285\";\n\nexport default node;\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/tracker/__generated__/SAM2ModelClearPointsInFrameMutation.graphql.ts",
    "content": "/**\n * @generated SignedSource<<7330d05db0fe66bbd89190cc665dd8d9>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { ConcreteRequest, Mutation } from 'relay-runtime';\nexport type ClearPointsInFrameInput = {\n  frameIndex: number;\n  objectId: number;\n  sessionId: string;\n};\nexport type SAM2ModelClearPointsInFrameMutation$variables = {\n  input: ClearPointsInFrameInput;\n};\nexport type SAM2ModelClearPointsInFrameMutation$data = {\n  readonly clearPointsInFrame: {\n    readonly frameIndex: number;\n    readonly rleMaskList: ReadonlyArray<{\n      readonly objectId: number;\n      readonly rleMask: {\n        readonly counts: string;\n        readonly size: ReadonlyArray<number>;\n      };\n    }>;\n  };\n};\nexport type SAM2ModelClearPointsInFrameMutation = {\n  response: SAM2ModelClearPointsInFrameMutation$data;\n  variables: SAM2ModelClearPointsInFrameMutation$variables;\n};\n\nconst node: ConcreteRequest = (function(){\nvar v0 = [\n  {\n    \"defaultValue\": null,\n    \"kind\": \"LocalArgument\",\n    \"name\": \"input\"\n  }\n],\nv1 = [\n  {\n    \"alias\": null,\n    \"args\": [\n      {\n        \"kind\": \"Variable\",\n        \"name\": \"input\",\n        \"variableName\": \"input\"\n      }\n    ],\n    \"concreteType\": \"RLEMaskListOnFrame\",\n    \"kind\": \"LinkedField\",\n    \"name\": \"clearPointsInFrame\",\n    \"plural\": false,\n    \"selections\": [\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"frameIndex\",\n        \"storageKey\": null\n      },\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"concreteType\": \"RLEMaskForObject\",\n        \"kind\": \"LinkedField\",\n        \"name\": \"rleMaskList\",\n        \"plural\": true,\n        \"selections\": [\n          {\n            \"alias\": null,\n            \"args\": null,\n            \"kind\": \"ScalarField\",\n            \"name\": \"objectId\",\n            \"storageKey\": null\n          },\n          {\n            \"alias\": null,\n            \"args\": null,\n            \"concreteType\": \"RLEMask\",\n            \"kind\": \"LinkedField\",\n            \"name\": \"rleMask\",\n            \"plural\": false,\n            \"selections\": [\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"counts\",\n                \"storageKey\": null\n              },\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"size\",\n                \"storageKey\": null\n              }\n            ],\n            \"storageKey\": null\n          }\n        ],\n        \"storageKey\": null\n      }\n    ],\n    \"storageKey\": null\n  }\n];\nreturn {\n  \"fragment\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Fragment\",\n    \"metadata\": null,\n    \"name\": \"SAM2ModelClearPointsInFrameMutation\",\n    \"selections\": (v1/*: any*/),\n    \"type\": \"Mutation\",\n    \"abstractKey\": null\n  },\n  \"kind\": \"Request\",\n  \"operation\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Operation\",\n    \"name\": \"SAM2ModelClearPointsInFrameMutation\",\n    \"selections\": (v1/*: any*/)\n  },\n  \"params\": {\n    \"cacheID\": \"b4f20e0205c26d5dc3614935ac73fa3f\",\n    \"id\": null,\n    \"metadata\": {},\n    \"name\": \"SAM2ModelClearPointsInFrameMutation\",\n    \"operationKind\": \"mutation\",\n    \"text\": \"mutation SAM2ModelClearPointsInFrameMutation(\\n  $input: ClearPointsInFrameInput!\\n) {\\n  clearPointsInFrame(input: $input) {\\n    frameIndex\\n    rleMaskList {\\n      objectId\\n      rleMask {\\n        counts\\n        size\\n      }\\n    }\\n  }\\n}\\n\"\n  }\n};\n})();\n\n(node as any).hash = \"880295870f14839040acf8f191fa1409\";\n\nexport default node;\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/tracker/__generated__/SAM2ModelClearPointsInVideoMutation.graphql.ts",
    "content": "/**\n * @generated SignedSource<<092c43655450b8af706e546837e0a01c>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { ConcreteRequest, Mutation } from 'relay-runtime';\nexport type ClearPointsInVideoInput = {\n  sessionId: string;\n};\nexport type SAM2ModelClearPointsInVideoMutation$variables = {\n  input: ClearPointsInVideoInput;\n};\nexport type SAM2ModelClearPointsInVideoMutation$data = {\n  readonly clearPointsInVideo: {\n    readonly success: boolean;\n  };\n};\nexport type SAM2ModelClearPointsInVideoMutation = {\n  response: SAM2ModelClearPointsInVideoMutation$data;\n  variables: SAM2ModelClearPointsInVideoMutation$variables;\n};\n\nconst node: ConcreteRequest = (function(){\nvar v0 = [\n  {\n    \"defaultValue\": null,\n    \"kind\": \"LocalArgument\",\n    \"name\": \"input\"\n  }\n],\nv1 = [\n  {\n    \"alias\": null,\n    \"args\": [\n      {\n        \"kind\": \"Variable\",\n        \"name\": \"input\",\n        \"variableName\": \"input\"\n      }\n    ],\n    \"concreteType\": \"ClearPointsInVideo\",\n    \"kind\": \"LinkedField\",\n    \"name\": \"clearPointsInVideo\",\n    \"plural\": false,\n    \"selections\": [\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"success\",\n        \"storageKey\": null\n      }\n    ],\n    \"storageKey\": null\n  }\n];\nreturn {\n  \"fragment\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Fragment\",\n    \"metadata\": null,\n    \"name\": \"SAM2ModelClearPointsInVideoMutation\",\n    \"selections\": (v1/*: any*/),\n    \"type\": \"Mutation\",\n    \"abstractKey\": null\n  },\n  \"kind\": \"Request\",\n  \"operation\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Operation\",\n    \"name\": \"SAM2ModelClearPointsInVideoMutation\",\n    \"selections\": (v1/*: any*/)\n  },\n  \"params\": {\n    \"cacheID\": \"c23b3d5afca5b235328a562369056527\",\n    \"id\": null,\n    \"metadata\": {},\n    \"name\": \"SAM2ModelClearPointsInVideoMutation\",\n    \"operationKind\": \"mutation\",\n    \"text\": \"mutation SAM2ModelClearPointsInVideoMutation(\\n  $input: ClearPointsInVideoInput!\\n) {\\n  clearPointsInVideo(input: $input) {\\n    success\\n  }\\n}\\n\"\n  }\n};\n})();\n\n(node as any).hash = \"020267989385cb8b8f0e5cdde784d17e\";\n\nexport default node;\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/tracker/__generated__/SAM2ModelCloseSessionMutation.graphql.ts",
    "content": "/**\n * @generated SignedSource<<48ee5db240b8093e9e53bf0329c8bab7>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { ConcreteRequest, Mutation } from 'relay-runtime';\nexport type CloseSessionInput = {\n  sessionId: string;\n};\nexport type SAM2ModelCloseSessionMutation$variables = {\n  input: CloseSessionInput;\n};\nexport type SAM2ModelCloseSessionMutation$data = {\n  readonly closeSession: {\n    readonly success: boolean;\n  };\n};\nexport type SAM2ModelCloseSessionMutation = {\n  response: SAM2ModelCloseSessionMutation$data;\n  variables: SAM2ModelCloseSessionMutation$variables;\n};\n\nconst node: ConcreteRequest = (function(){\nvar v0 = [\n  {\n    \"defaultValue\": null,\n    \"kind\": \"LocalArgument\",\n    \"name\": \"input\"\n  }\n],\nv1 = [\n  {\n    \"alias\": null,\n    \"args\": [\n      {\n        \"kind\": \"Variable\",\n        \"name\": \"input\",\n        \"variableName\": \"input\"\n      }\n    ],\n    \"concreteType\": \"CloseSession\",\n    \"kind\": \"LinkedField\",\n    \"name\": \"closeSession\",\n    \"plural\": false,\n    \"selections\": [\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"success\",\n        \"storageKey\": null\n      }\n    ],\n    \"storageKey\": null\n  }\n];\nreturn {\n  \"fragment\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Fragment\",\n    \"metadata\": null,\n    \"name\": \"SAM2ModelCloseSessionMutation\",\n    \"selections\": (v1/*: any*/),\n    \"type\": \"Mutation\",\n    \"abstractKey\": null\n  },\n  \"kind\": \"Request\",\n  \"operation\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Operation\",\n    \"name\": \"SAM2ModelCloseSessionMutation\",\n    \"selections\": (v1/*: any*/)\n  },\n  \"params\": {\n    \"cacheID\": \"aa7177838c16536b397bfee2d15a94ee\",\n    \"id\": null,\n    \"metadata\": {},\n    \"name\": \"SAM2ModelCloseSessionMutation\",\n    \"operationKind\": \"mutation\",\n    \"text\": \"mutation SAM2ModelCloseSessionMutation(\\n  $input: CloseSessionInput!\\n) {\\n  closeSession(input: $input) {\\n    success\\n  }\\n}\\n\"\n  }\n};\n})();\n\n(node as any).hash = \"6e1008de944562dc1922cd3f9cc40f10\";\n\nexport default node;\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/tracker/__generated__/SAM2ModelRemoveObjectMutation.graphql.ts",
    "content": "/**\n * @generated SignedSource<<3d0d7bdc0d4304f08ea91b7df9efeb1f>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { ConcreteRequest, Mutation } from 'relay-runtime';\nexport type RemoveObjectInput = {\n  objectId: number;\n  sessionId: string;\n};\nexport type SAM2ModelRemoveObjectMutation$variables = {\n  input: RemoveObjectInput;\n};\nexport type SAM2ModelRemoveObjectMutation$data = {\n  readonly removeObject: ReadonlyArray<{\n    readonly frameIndex: number;\n    readonly rleMaskList: ReadonlyArray<{\n      readonly objectId: number;\n      readonly rleMask: {\n        readonly counts: string;\n        readonly size: ReadonlyArray<number>;\n      };\n    }>;\n  }>;\n};\nexport type SAM2ModelRemoveObjectMutation = {\n  response: SAM2ModelRemoveObjectMutation$data;\n  variables: SAM2ModelRemoveObjectMutation$variables;\n};\n\nconst node: ConcreteRequest = (function(){\nvar v0 = [\n  {\n    \"defaultValue\": null,\n    \"kind\": \"LocalArgument\",\n    \"name\": \"input\"\n  }\n],\nv1 = [\n  {\n    \"alias\": null,\n    \"args\": [\n      {\n        \"kind\": \"Variable\",\n        \"name\": \"input\",\n        \"variableName\": \"input\"\n      }\n    ],\n    \"concreteType\": \"RLEMaskListOnFrame\",\n    \"kind\": \"LinkedField\",\n    \"name\": \"removeObject\",\n    \"plural\": true,\n    \"selections\": [\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"frameIndex\",\n        \"storageKey\": null\n      },\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"concreteType\": \"RLEMaskForObject\",\n        \"kind\": \"LinkedField\",\n        \"name\": \"rleMaskList\",\n        \"plural\": true,\n        \"selections\": [\n          {\n            \"alias\": null,\n            \"args\": null,\n            \"kind\": \"ScalarField\",\n            \"name\": \"objectId\",\n            \"storageKey\": null\n          },\n          {\n            \"alias\": null,\n            \"args\": null,\n            \"concreteType\": \"RLEMask\",\n            \"kind\": \"LinkedField\",\n            \"name\": \"rleMask\",\n            \"plural\": false,\n            \"selections\": [\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"counts\",\n                \"storageKey\": null\n              },\n              {\n                \"alias\": null,\n                \"args\": null,\n                \"kind\": \"ScalarField\",\n                \"name\": \"size\",\n                \"storageKey\": null\n              }\n            ],\n            \"storageKey\": null\n          }\n        ],\n        \"storageKey\": null\n      }\n    ],\n    \"storageKey\": null\n  }\n];\nreturn {\n  \"fragment\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Fragment\",\n    \"metadata\": null,\n    \"name\": \"SAM2ModelRemoveObjectMutation\",\n    \"selections\": (v1/*: any*/),\n    \"type\": \"Mutation\",\n    \"abstractKey\": null\n  },\n  \"kind\": \"Request\",\n  \"operation\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Operation\",\n    \"name\": \"SAM2ModelRemoveObjectMutation\",\n    \"selections\": (v1/*: any*/)\n  },\n  \"params\": {\n    \"cacheID\": \"0accbe68b8deea021539365678e58172\",\n    \"id\": null,\n    \"metadata\": {},\n    \"name\": \"SAM2ModelRemoveObjectMutation\",\n    \"operationKind\": \"mutation\",\n    \"text\": \"mutation SAM2ModelRemoveObjectMutation(\\n  $input: RemoveObjectInput!\\n) {\\n  removeObject(input: $input) {\\n    frameIndex\\n    rleMaskList {\\n      objectId\\n      rleMask {\\n        counts\\n        size\\n      }\\n    }\\n  }\\n}\\n\"\n  }\n};\n})();\n\n(node as any).hash = \"2dddf010d202332e6e012443cc1d8e55\";\n\nexport default node;\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/tracker/__generated__/SAM2ModelStartSessionMutation.graphql.ts",
    "content": "/**\n * @generated SignedSource<<90910bae5bb646118174e736434aac56>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { ConcreteRequest, Mutation } from 'relay-runtime';\nexport type StartSessionInput = {\n  path: string;\n};\nexport type SAM2ModelStartSessionMutation$variables = {\n  input: StartSessionInput;\n};\nexport type SAM2ModelStartSessionMutation$data = {\n  readonly startSession: {\n    readonly sessionId: string;\n  };\n};\nexport type SAM2ModelStartSessionMutation = {\n  response: SAM2ModelStartSessionMutation$data;\n  variables: SAM2ModelStartSessionMutation$variables;\n};\n\nconst node: ConcreteRequest = (function(){\nvar v0 = [\n  {\n    \"defaultValue\": null,\n    \"kind\": \"LocalArgument\",\n    \"name\": \"input\"\n  }\n],\nv1 = [\n  {\n    \"alias\": null,\n    \"args\": [\n      {\n        \"kind\": \"Variable\",\n        \"name\": \"input\",\n        \"variableName\": \"input\"\n      }\n    ],\n    \"concreteType\": \"StartSession\",\n    \"kind\": \"LinkedField\",\n    \"name\": \"startSession\",\n    \"plural\": false,\n    \"selections\": [\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"sessionId\",\n        \"storageKey\": null\n      }\n    ],\n    \"storageKey\": null\n  }\n];\nreturn {\n  \"fragment\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Fragment\",\n    \"metadata\": null,\n    \"name\": \"SAM2ModelStartSessionMutation\",\n    \"selections\": (v1/*: any*/),\n    \"type\": \"Mutation\",\n    \"abstractKey\": null\n  },\n  \"kind\": \"Request\",\n  \"operation\": {\n    \"argumentDefinitions\": (v0/*: any*/),\n    \"kind\": \"Operation\",\n    \"name\": \"SAM2ModelStartSessionMutation\",\n    \"selections\": (v1/*: any*/)\n  },\n  \"params\": {\n    \"cacheID\": \"2403f5005f5bb3805109874569f2050e\",\n    \"id\": null,\n    \"metadata\": {},\n    \"name\": \"SAM2ModelStartSessionMutation\",\n    \"operationKind\": \"mutation\",\n    \"text\": \"mutation SAM2ModelStartSessionMutation(\\n  $input: StartSessionInput!\\n) {\\n  startSession(input: $input) {\\n    sessionId\\n  }\\n}\\n\"\n  }\n};\n})();\n\n(node as any).hash = \"5cf0005c7a54fc87c539dd4cbd5fef5d\";\n\nexport default node;\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/utils/FileUtils.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Logger from '@/common/logger/Logger';\n\ntype Range = {\n  start: number;\n  end: number;\n};\n\ntype FileStreamPart = {\n  data: Uint8Array;\n  range: Range;\n  contentLength: number;\n};\n\nexport type FileStream = AsyncGenerator<FileStreamPart, File | null, null>;\n\n/**\n * Asynchronously generates a SHA-256 hash for a Blob object.\n *\n * DO NOT USE this function casually. Computing the SHA-256 is expensive and can\n * take several 100 milliseconds to complete.\n *\n * @param blob - The Blob object to be hashed.\n * @returns A Promise that resolves to a string representing the SHA-256 hash of\n * the Blob.\n */\nexport async function hashBlob(blob: Blob): Promise<string> {\n  const buffer = await blob.arrayBuffer();\n  // Crypto subtle is only availabe in secure contexts. For example, this will\n  // be the case when running the project locally with http protocol.\n  // https://developer.mozilla.org/en-US/docs/Web/API/Crypto/subtle\n  if (crypto.subtle != null) {\n    const hashBuffer = await crypto.subtle.digest('SHA-256', buffer);\n    const hashArray = Array.from(new Uint8Array(hashBuffer));\n    return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');\n  }\n  // If not secure context, return random string\n  return (Math.random() + 1).toString(36).substring(7);\n}\n\nexport async function* streamFile(url: string, init?: RequestInit): FileStream {\n  try {\n    const response = await fetch(url, init);\n\n    let blob: Blob;\n\n    // Try to download the file with a stream reader. This has the benefit\n    // of providing progress during the download. It requires the body and\n    // Content-Length. As a fallback, it uses the blob function on the\n    // response object.\n    const contentLength = response.headers.get('Content-Length');\n    if (response.body != null && contentLength != null) {\n      const totalLength = parseInt(contentLength);\n      const chunks: Uint8Array[] = [];\n      let start = 0;\n      let end = 0;\n\n      const reader = response.body.getReader();\n      try {\n        while (true) {\n          const {done, value} = await reader.read();\n          if (done) {\n            break;\n          }\n\n          start = end;\n          end += value.length;\n\n          yield {\n            data: value,\n            range: {start, end},\n            contentLength: totalLength,\n          };\n        }\n      } finally {\n        reader.releaseLock();\n      }\n      blob = new Blob(chunks);\n    } else {\n      blob = await response.blob();\n    }\n\n    const filename = await hashBlob(blob);\n    return new File([blob], `${filename}.mp4`);\n  } catch (error) {\n    Logger.error('aborting download due to component unmount', error);\n  }\n  return null;\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/utils/ImageUtils.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport function convertVideoFrameToImageData(\n  videoFrame: VideoFrame,\n): ImageData | undefined {\n  const canvas = new OffscreenCanvas(\n    videoFrame.displayWidth,\n    videoFrame.displayHeight,\n  );\n  const ctx = canvas.getContext('2d');\n  ctx?.drawImage(videoFrame, 0, 0);\n  return ctx?.getImageData(0, 0, canvas.width, canvas.height);\n}\n\n/**\n * This utility provides two functions:\n * `process`: to find the bounding box of non-empty pixels from an ImageData, when looping through all its pixels\n * `crop` to cut out the subsection found in `process`\n * @returns\n */\nexport function findBoundingBox() {\n  let xMin = Number.MAX_VALUE;\n  let yMin = Number.MAX_VALUE;\n  let xMax = Number.MIN_VALUE;\n  let yMax = Number.MIN_VALUE;\n  return {\n    process: function (x: number, y: number, hasData: boolean) {\n      if (hasData) {\n        xMin = Math.min(x, xMin);\n        xMax = Math.max(x, xMax);\n        yMin = Math.min(y, yMin);\n        yMax = Math.max(y, yMax);\n      }\n      return [xMin, xMax, yMin, yMax];\n    },\n    crop(imageData: ImageData): ImageData | null {\n      const canvas = new OffscreenCanvas(imageData.width, imageData.height);\n      const ctx = canvas.getContext('2d');\n\n      const boundingBoxWidth = xMax - xMin;\n      const boundingBoxHeight = yMax - yMin;\n      if (ctx && boundingBoxWidth > 0 && boundingBoxHeight > 0) {\n        ctx.clearRect(0, 0, canvas.width, canvas.height);\n        ctx.putImageData(imageData, 0, 0);\n        return ctx.getImageData(\n          xMin,\n          yMin,\n          boundingBoxWidth,\n          boundingBoxHeight,\n        );\n      } else {\n        return null;\n      }\n    },\n    getBox(): [[number, number], [number, number]] {\n      return [\n        [xMin, yMin],\n        [xMax, yMax],\n      ];\n    },\n  };\n}\n\nexport function magnifyImageRegion(\n  canvas: HTMLCanvasElement | null,\n  x: number,\n  y: number,\n  radius: number = 25,\n  scale: number = 2,\n): string {\n  if (canvas == null) {\n    return '';\n  }\n  const ctx = canvas.getContext('2d');\n  if (ctx) {\n    const minX = x - radius < 0 ? radius - x : 0;\n    const minY = y - radius < 0 ? radius - y : 0;\n    const region = ctx.getImageData(\n      Math.max(x - radius, 0),\n      Math.max(y - radius, 0),\n      radius * 2,\n      radius * 2,\n    );\n\n    // ImageData doesn't scale-transform correctly on canvas\n    // So we first draw the original size on an offscreen canvas, and then scale it\n    const regionCanvas = new OffscreenCanvas(region.width, region.height);\n    const regionCtx = regionCanvas.getContext('2d');\n    regionCtx?.putImageData(region, minX > 0 ? minX : 0, minY > 0 ? minY : 0);\n\n    const scaleCanvas = document.createElement('canvas');\n    scaleCanvas.width = Math.round(region.width * scale);\n    scaleCanvas.height = Math.round(region.height * scale);\n    const scaleCtx = scaleCanvas.getContext('2d');\n    scaleCtx?.scale(scale, scale);\n    scaleCtx?.drawImage(regionCanvas, 0, 0);\n\n    return scaleCanvas.toDataURL();\n  }\n  return '';\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/utils/MaskUtils.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Converts an image mask represented as a binary image (foreground pixels are\n * `>1` and background pixels are `0`) stored in a Uint8Array to an RGBA\n * representation where background pixels have an alpha value of 0 and\n * foreground pixels have an alpha value of 255. This is useful for compositing\n * the mask onto another image.\n *\n * ```typescript\n * const rgba = convertMaskDataToRGBA(mask.data);\n * ```\n *\n * @param data - The image mask represented as a Uint8Array\n * @returns A new Uint8ClampedArray representing the mask in RGBA format\n */\nexport function convertMaskToRGBA(data: Uint8Array): Uint8ClampedArray {\n  // Shifting pixels instead of assigning them individually per pixel is\n  // much faster. See JSPerf benchamrk: https://jsperf.app/morifo\n  const len = data.length;\n  const tempData = new Uint32Array(len);\n  const RGA = 0x00ffffff;\n  const FOREGROUND = 0xff000000;\n  const BACKGROUND = 0x00000000;\n  for (let i = 0; i < len; i++) {\n    const alpha = data[i] > 0 ? FOREGROUND : BACKGROUND; // alpha is the high byte. Bits 24-31\n    tempData[i] = alpha + RGA;\n  }\n  return new Uint8ClampedArray(tempData.buffer);\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/utils/MultipartStream.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nconst decoder = new TextDecoder();\nconst encoder = new TextEncoder();\nconst blankLine = encoder.encode('\\r\\n');\n\nconst STATE_BOUNDARY = 0;\nconst STATE_HEADERS = 1;\nconst STATE_BODY = 2;\n\n/**\n * Compares two Uint8Array objects for equality.\n * @param {Uint8Array} a\n * @param {Uint8Array} b\n * @return {bool}\n */\nfunction compareArrays(a: Uint8Array, b: Uint8Array): boolean {\n  if (a.length != b.length) {\n    return false;\n  }\n  for (let i = 0; i < a.length; i++) {\n    if (a[i] != b[i]) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Parses a Content-Type into a multipart boundary.\n * @param {string} contentType\n * @return {Uint8Array} boundary line, including preceding -- and trailing \\r\\n\n */\nfunction getBoundary(contentType: string): Uint8Array | null {\n  // Expects the form \"multipart/...; boundary=...\".\n  // This is not a full MIME media type parser but should be good enough.\n  const MULTIPART_TYPE = 'multipart/';\n  const BOUNDARY_PARAM = '; boundary=';\n  if (!contentType.startsWith(MULTIPART_TYPE)) {\n    return null;\n  }\n  const i = contentType.indexOf(BOUNDARY_PARAM, MULTIPART_TYPE.length);\n  if (i == -1) {\n    return null;\n  }\n  const suffix = contentType.substring(i + BOUNDARY_PARAM.length);\n  return encoder.encode('--' + suffix + '\\r\\n');\n}\n\n/**\n * Creates a multipart stream.\n * @param {string} contentType A Content-Type header.\n * @param {ReadableStream} body The body of a HTTP response.\n * @return {ReadableStream} a stream of {headers: Headers, body: Uint8Array}\n *     objects.\n */\nexport default function multipartStream(\n  contentType: string,\n  body: ReadableStream,\n): ReadableStream {\n  const reader = body.getReader();\n  return new ReadableStream({\n    async start(controller) {\n      // Define the boundary.\n      const boundary = getBoundary(contentType);\n      if (boundary === null) {\n        controller.error(\n          new Error(\n            'Invalid content type for multipart stream: ' + contentType,\n          ),\n        );\n        return;\n      }\n      let pos = 0;\n      let buf = new Uint8Array(); // buf.slice(pos) has unprocessed data.\n      let state = STATE_BOUNDARY;\n      let headers: Headers | null = null; // non-null in STATE_HEADERS and STATE_BODY.\n      let contentLength: number | null = null; // non-null in STATE_BODY.\n\n      /**\n       * Consumes all complete data in buf or raises an Error.\n       * May leave incomplete data at buf.slice(pos).\n       */\n      function processBuf() {\n        // The while(true) condition is reqired\n        // eslint-disable-next-line no-constant-condition\n        while (true) {\n          if (boundary === null) {\n            controller.error(\n              new Error(\n                'Invalid content type for multipart stream: ' + contentType,\n              ),\n            );\n            return;\n          }\n          switch (state) {\n            case STATE_BOUNDARY:\n              // Read blank lines (if any) then boundary.\n              while (\n                buf.length >= pos + blankLine.length &&\n                compareArrays(buf.slice(pos, pos + blankLine.length), blankLine)\n              ) {\n                pos += blankLine.length;\n              }\n\n              // Check that it starts with a boundary.\n              if (buf.length < pos + boundary.length) {\n                return;\n              }\n\n              if (\n                !compareArrays(buf.slice(pos, pos + boundary.length), boundary)\n              ) {\n                throw new Error('bad part boundary');\n              }\n              pos += boundary.length;\n              state = STATE_HEADERS;\n              headers = new Headers();\n              break;\n\n            case STATE_HEADERS: {\n              const cr = buf.indexOf('\\r'.charCodeAt(0), pos);\n              if (cr == -1 || buf.length == cr + 1) {\n                return;\n              }\n              if (buf[cr + 1] != '\\n'.charCodeAt(0)) {\n                throw new Error('bad part header line (CR without NL)');\n              }\n              const line = decoder.decode(buf.slice(pos, cr));\n              pos = cr + 2;\n              if (line == '') {\n                const rawContentLength = headers?.get('Content-Length');\n                if (rawContentLength == null) {\n                  throw new Error('missing/invalid part Content-Length');\n                }\n                contentLength = parseInt(rawContentLength, 10);\n                if (isNaN(contentLength)) {\n                  throw new Error('missing/invalid part Content-Length');\n                }\n                state = STATE_BODY;\n                break;\n              }\n              const colon = line.indexOf(':');\n              const name = line.substring(0, colon);\n              if (colon == line.length || line[colon + 1] != ' ') {\n                throw new Error('bad part header line (no \": \")');\n              }\n              const value = line.substring(colon + 2);\n              headers?.append(name, value);\n              break;\n            }\n            case STATE_BODY: {\n              if (contentLength === null) {\n                throw new Error('content length not set');\n              }\n              if (buf.length < pos + contentLength) {\n                return;\n              }\n              const body = buf.slice(pos, pos + contentLength);\n              pos += contentLength;\n              controller.enqueue({\n                headers: headers,\n                body: body,\n              });\n              headers = null;\n              contentLength = null;\n              state = STATE_BOUNDARY;\n              break;\n            }\n          }\n        }\n      }\n\n      // The while(true) condition is required\n      // eslint-disable-next-line no-constant-condition\n      while (true) {\n        const {done, value} = await reader.read();\n        const buffered = buf.length - pos;\n        if (done) {\n          if (state != STATE_BOUNDARY || buffered > 0) {\n            throw Error('multipart stream ended mid-part');\n          }\n          controller.close();\n          return;\n        }\n\n        // Update buf.slice(pos) to include the new data from value.\n        if (buffered == 0) {\n          buf = value;\n        } else {\n          const newLen = buffered + value.length;\n          const newBuf = new Uint8Array(newLen);\n          newBuf.set(buf.slice(pos), 0);\n          newBuf.set(value, buffered);\n          buf = newBuf;\n        }\n        pos = 0;\n\n        processBuf();\n      }\n    },\n    cancel(reason) {\n      return body.cancel(reason);\n    },\n  });\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/utils/ShaderUtils.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {Tracklet} from '@/common/tracker/Tracker';\n\n/**\n * util funtion to generate a WebGL texture using a look up table.\n * @param {WebGL2RenderingContext} gl - The WebGL2 rendering context.\n * @param {number} lutSize - The size of the LUT in each dimension.\n * @param {Uint8Array} lutData - The LUT data as an array of unsigned 8-bit integers.\n * @returns {WebGLTexture} - The WebGL texture object representing the loaded LUT.\n */\nexport function load3DLUT(\n  gl: WebGL2RenderingContext,\n  lutSize: number,\n  lutData: Uint8Array,\n) {\n  const texture = gl.createTexture();\n  gl.bindTexture(gl.TEXTURE_3D, texture);\n  gl.texParameteri(gl.TEXTURE_3D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n  gl.texParameteri(gl.TEXTURE_3D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\n  gl.texParameteri(gl.TEXTURE_3D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n  gl.texParameteri(gl.TEXTURE_3D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n  gl.texParameteri(gl.TEXTURE_3D, gl.TEXTURE_WRAP_R, gl.CLAMP_TO_EDGE);\n  // Pixel storage modes must be set to default for 3D textures\n  gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, false);\n  gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, false);\n\n  gl.texImage3D(\n    gl.TEXTURE_3D,\n    0,\n    gl.RGBA,\n    lutSize,\n    lutSize,\n    lutSize,\n    0,\n    gl.RGBA,\n    gl.UNSIGNED_BYTE,\n    lutData,\n  );\n  gl.bindTexture(gl.TEXTURE_3D, null);\n  return texture;\n}\n\n/**\n * Generates a 3D lookup table (LUT) data with random RGBA values.\n * @param {number} lutSize - The size of the LUT in each dimension.\n * @returns {Uint8Array} - The LUT data as an array of unsigned 8-bit integers.\n */\nexport function generateLUTDATA(lutSize: number) {\n  const totalEntries = lutSize * lutSize * lutSize; // 3D LUT nodes\n  const lutData = new Uint8Array(totalEntries * 4); // Each entry has an RGBA value\n\n  for (let i = 0; i < totalEntries; i++) {\n    lutData[i * 4 + 0] = Math.floor(Math.random() * 256); // Random red value\n    lutData[i * 4 + 1] = Math.floor(Math.random() * 256); // Random green value\n    lutData[i * 4 + 2] = Math.floor(Math.random() * 256); // Random blue value\n    lutData[i * 4 + 3] = 1; // alpha value\n  }\n\n  return lutData;\n}\n\n/**\n * Normalizes the bounds of a rectangle defined by two points (A and B) within a given width and height.\n * @param {number[]} pointA - The coordinates of the first point defining the rectangle.\n * @param {number[]} pointB - The coordinates of the second point defining the rectangle.\n * @param {number} width - The width of the canvas or container where the rectangle is drawn.\n * @param {number} height - The height of the canvas or container where the rectangle is drawn.\n * @returns {number[]} - An array containing the normalized x and y coordinates of the rectangle's corners.\n */\nexport function normalizeBounds(\n  pointA: number[],\n  pointB: number[],\n  width: number,\n  height: number,\n) {\n  return [\n    pointA[0] / width,\n    pointA[1] / height,\n    pointB[0] / width,\n    pointB[1] / height,\n  ];\n}\n\n/**\n * Pre-allocates a specified number of 2D textures for use in WebGL2 rendering.\n * @param {WebGL2RenderingContext} gl - The WebGL2 rendering context.\n * @param {number} numTextures - The number of textures to be pre-allocated.\n * @returns {WebGLTexture[]} - An array of WebGL textures, each pre-allocated and ready for use.\n */\nexport function preAllocateTextures(\n  gl: WebGL2RenderingContext,\n  numTextures: number,\n) {\n  const maskTextures = [];\n\n  for (let i = 0; i < numTextures; i++) {\n    const maskTexture = gl.createTexture();\n\n    gl.bindTexture(gl.TEXTURE_2D, maskTexture);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n    maskTextures.push(maskTexture);\n  }\n\n  return maskTextures as WebGLTexture[];\n}\n\n/**\n * Finds the index of a Tracklet object within an array based on its unique identifier.\n * @param objects - The array of Tracklet objects to search within.\n * @param id - The unique identifier of the Tracklet object to find.\n * @returns The index of the `Tracklet` object with the specified `id` in the `objects` array.\n */\nexport function findIndexByTrackletId(id: number, objects: Tracklet[]): number {\n  return objects.findIndex(obj => obj.id === id);\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/utils/emptyFunction.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * This function accepts and discards inputs; it has no side effects. This is\n * primarily useful idiomatically for overridable function endpoints which\n * always need to be callable, since JS lacks a null-call idiom ala Cocoa.\n */\nexport default function () {}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/common/utils/uuid.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Generates a random UUID (Universally Unique Identifier) following the version\n * 4 standard.\n *\n * The function replaces each 'x' and 'y' in the template\n * 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx' with random hexadecimal digits. For\n * 'y', the function ensures the first hexadecimal digit is '8', '9', 'A', or\n * 'B' as per the UUID v4 standard.\n *\n * @returns A string representing a version 4 UUID.\n *\n * @example\n *\n * const id = uuidv4();\n * console.log(id); // Outputs: '3f0d2c77-4f69-4c1e-8a6e-35e866e8a5d1'\n */\nexport function uuidv4() {\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n    const r = (Math.random() * 16) | 0,\n      v = c == 'x' ? r : (r & 0x3) | 0x8;\n    return v.toString(16);\n  });\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/debug/stats/Stats.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/**\n * Derived from mrdoob / http://mrdoob.com/\n */\n\nimport Logger from '@/common/logger/Logger';\nimport {uuidv4} from '@/common/utils/uuid';\nimport invariant from 'invariant';\n\nexport type Request<A, P> = {\n  action: A;\n} & P;\n\nexport type Response<A, P> = Request<A, P>;\n\nexport type GetStatsCanvasRequest = Request<\n  'getStatsCanvas',\n  {\n    id: string;\n    width: number;\n    height: number;\n  }\n>;\n\nexport type GetMemoryStatsRequest = Request<\n  'getMemoryStats',\n  {\n    id: string;\n    jsHeapSizeLimit: number;\n    totalJSHeapSize: number;\n    usedJSHeapSize: number;\n  }\n>;\n\nexport type SetStatsCanvasResponse = Response<\n  'setStatsCanvas',\n  {\n    id: string;\n    canvas: OffscreenCanvas;\n    devicePixelRatio: number;\n  }\n>;\n\nexport type MemoryStatsResponse = Response<\n  'memoryStats',\n  {\n    id: string;\n    jsHeapSizeLimit: number;\n    totalJSHeapSize: number;\n    usedJSHeapSize: number;\n  }\n>;\n\nexport type StatsType = 'fps' | 'ms' | 'memory';\n\nexport class Stats {\n  private maxValue: number;\n  private beginTime: number;\n  private prevTime: number;\n  private frames: number;\n\n  private fpsPanel: Panel | null = null;\n  private msPanel: Panel | null = null;\n  private memPanel: Panel | null = null;\n\n  constructor(type: StatsType, label: string = '', maxValue: number = 100) {\n    const id = uuidv4();\n\n    this.maxValue = maxValue;\n    this.beginTime = (performance || Date).now();\n    this.prevTime = this.beginTime;\n    this.frames = 0;\n\n    const onMessage = (event: MessageEvent<SetStatsCanvasResponse>) => {\n      if (event.data.action === 'setStatsCanvas' && event.data.id === id) {\n        const {canvas, devicePixelRatio} = event.data;\n        if (type === 'fps') {\n          this.fpsPanel = new Panel(\n            canvas,\n            devicePixelRatio,\n            `FPS ${label}`.trim(),\n            '#0ff',\n            '#002',\n          );\n        } else if (type === 'ms') {\n          this.msPanel = new Panel(\n            canvas,\n            devicePixelRatio,\n            `MS ${label}`.trim(),\n            '#0f0',\n            '#020',\n          );\n        } else if (type === 'memory') {\n          this.memPanel = new Panel(\n            canvas,\n            devicePixelRatio,\n            `MB ${label}`.trim(),\n            '#f08',\n            '#201',\n          );\n        }\n        self.removeEventListener('message', onMessage);\n      }\n    };\n\n    self.addEventListener('message', onMessage);\n\n    self.postMessage({\n      action: 'getStatsCanvas',\n      id,\n      width: 80,\n      height: 48,\n    } as GetStatsCanvasRequest);\n  }\n\n  updateMaxValue(maxValue: number) {\n    this.maxValue = maxValue;\n  }\n\n  begin() {\n    this.beginTime = (performance || Date).now();\n  }\n\n  end() {\n    this.frames++;\n\n    const time = (performance || Date).now();\n\n    this.msPanel?.update(time - this.beginTime, this.maxValue);\n\n    if (time >= this.prevTime + 1000) {\n      this.fpsPanel?.update(\n        (this.frames * 1000) / (time - this.prevTime),\n        this.maxValue,\n      );\n\n      this.prevTime = time;\n      this.frames = 0;\n\n      const id = uuidv4();\n      const onMessage = (event: MessageEvent<MemoryStatsResponse>) => {\n        if (event.data.action === 'memoryStats' && event.data.id === id) {\n          const {usedJSHeapSize, jsHeapSizeLimit} = event.data;\n          this.memPanel?.update(\n            usedJSHeapSize / 1048576,\n            jsHeapSizeLimit / 1048576,\n          );\n        }\n      };\n\n      self.addEventListener('message', onMessage);\n\n      self.postMessage({\n        action: 'getMemoryStats',\n        id,\n      } as GetMemoryStatsRequest);\n    }\n\n    return time;\n  }\n\n  update() {\n    this.beginTime = this.end();\n  }\n}\n\nexport class Panel {\n  private min = Infinity;\n  private max = 0;\n  private round = Math.round;\n\n  private PR: number;\n  private WIDTH: number;\n  private HEIGHT: number;\n  private TEXT_X: number;\n  private TEXT_Y: number;\n  private GRAPH_X: number;\n  private GRAPH_Y: number;\n  private GRAPH_WIDTH: number;\n  private GRAPH_HEIGHT: number;\n\n  public canvas: HTMLCanvasElement | OffscreenCanvas;\n  private context:\n    | CanvasRenderingContext2D\n    | OffscreenCanvasRenderingContext2D\n    | null = null;\n\n  private name: string;\n  private fg: string;\n  private bg: string;\n\n  constructor(\n    canvas: HTMLCanvasElement | OffscreenCanvas,\n    devicePixelRatio: number,\n    name: string,\n    fg: string,\n    bg: string,\n  ) {\n    this.canvas = canvas;\n    this.name = name;\n    this.fg = fg;\n    this.bg = bg;\n\n    this.PR = this.round(devicePixelRatio || 1);\n    this.WIDTH = 80 * this.PR;\n    this.HEIGHT = 48 * this.PR;\n    this.TEXT_X = 3 * this.PR;\n    this.TEXT_Y = 2 * this.PR;\n    this.GRAPH_X = 3 * this.PR;\n    this.GRAPH_Y = 15 * this.PR;\n    this.GRAPH_WIDTH = 74 * this.PR;\n    this.GRAPH_HEIGHT = 30 * this.PR;\n\n    const context: OffscreenCanvasRenderingContext2D | RenderingContext | null =\n      canvas.getContext('2d');\n    invariant(context !== null, 'context 2d is required');\n\n    if (\n      !(context instanceof CanvasRenderingContext2D) &&\n      !(context instanceof OffscreenCanvasRenderingContext2D)\n    ) {\n      Logger.warn(\n        'rendering stats requires CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D',\n      );\n      return;\n    }\n\n    context.font = 'bold ' + 9 * this.PR + 'px Helvetica,Arial,sans-serif';\n    context.textBaseline = 'top';\n\n    context.fillStyle = bg;\n    context.fillRect(0, 0, this.WIDTH, this.HEIGHT);\n\n    context.fillStyle = fg;\n    context.fillText(name, this.TEXT_X, this.TEXT_Y);\n    context.fillRect(\n      this.GRAPH_X,\n      this.GRAPH_Y,\n      this.GRAPH_WIDTH,\n      this.GRAPH_HEIGHT,\n    );\n\n    context.fillStyle = bg;\n    context.globalAlpha = 0.9;\n    context.fillRect(\n      this.GRAPH_X,\n      this.GRAPH_Y,\n      this.GRAPH_WIDTH,\n      this.GRAPH_HEIGHT,\n    );\n\n    this.context = context;\n  }\n\n  update(value: number, maxValue: number) {\n    invariant(this.context !== null, 'context 2d is required');\n\n    this.min = Math.min(this.min, value);\n    this.max = Math.max(this.max, value);\n\n    this.context.fillStyle = this.bg;\n    this.context.globalAlpha = 1;\n    this.context.fillRect(0, 0, this.WIDTH, this.GRAPH_Y);\n    this.context.fillStyle = this.fg;\n    this.context.fillText(\n      this.round(value) +\n        ' ' +\n        this.name +\n        ' (' +\n        this.round(this.min) +\n        '-' +\n        this.round(this.max) +\n        ')',\n      this.TEXT_X,\n      this.TEXT_Y,\n    );\n\n    this.context.drawImage(\n      this.canvas,\n      this.GRAPH_X + this.PR,\n      this.GRAPH_Y,\n      this.GRAPH_WIDTH - this.PR,\n      this.GRAPH_HEIGHT,\n      this.GRAPH_X,\n      this.GRAPH_Y,\n      this.GRAPH_WIDTH - this.PR,\n      this.GRAPH_HEIGHT,\n    );\n\n    this.context.fillRect(\n      this.GRAPH_X + this.GRAPH_WIDTH - this.PR,\n      this.GRAPH_Y,\n      this.PR,\n      this.GRAPH_HEIGHT,\n    );\n\n    this.context.fillStyle = this.bg;\n    this.context.globalAlpha = 0.9;\n    this.context.fillRect(\n      this.GRAPH_X + this.GRAPH_WIDTH - this.PR,\n      this.GRAPH_Y,\n      this.PR,\n      this.round((1 - value / maxValue) * this.GRAPH_HEIGHT),\n    );\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/debug/stats/StatsView.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {EnableStatsRequest} from '@/common/components/video/VideoWorkerTypes';\nimport stylex from '@stylexjs/stylex';\nimport {useEffect, useMemo, useRef, useState} from 'react';\nimport {useLocation} from 'react-router-dom';\nimport useVideo from '../../common/components/video/editor/useVideo';\nimport {\n  GetMemoryStatsRequest,\n  GetStatsCanvasRequest,\n  MemoryStatsResponse,\n  SetStatsCanvasResponse,\n} from './Stats';\n\nconst styles = stylex.create({\n  container: {\n    position: 'fixed',\n    top: 0,\n    left: 0,\n    width: '100%',\n    overflowX: 'auto',\n    display: 'flex',\n    flexDirection: 'row',\n    cursor: 'pointer',\n    opacity: 0.9,\n    zIndex: 10000,\n  },\n});\n\nconst URL_PARAM = 'monitors';\n\nexport default function StatsView() {\n  const {search} = useLocation();\n  const video = useVideo();\n  const containerRef = useRef<HTMLDivElement | null>(null);\n  const [isWrapped, setIsWrapped] = useState<boolean>(false);\n\n  const isEnabled = useMemo(() => {\n    const urlSearchParams = new URLSearchParams(search);\n    return (\n      urlSearchParams.has(URL_PARAM) &&\n      ['true', ''].includes(urlSearchParams.get('monitors') ?? '')\n    );\n  }, [search]);\n\n  useEffect(() => {\n    if (!isEnabled) {\n      return;\n    }\n\n    const worker = video?.getWorker_ONLY_USE_WITH_CAUTION();\n\n    // Enable stats for video worker\n    worker?.postMessage({\n      action: 'enableStats',\n    } as EnableStatsRequest);\n\n    function onMessage(\n      event: MessageEvent<GetStatsCanvasRequest | GetMemoryStatsRequest>,\n    ) {\n      if (event.data.action === 'getStatsCanvas') {\n        // Add stats canvas and hand control over to worker\n        const canvas = document.createElement('canvas');\n        canvas.width = event.data.width * window.devicePixelRatio;\n        canvas.height = event.data.height * window.devicePixelRatio;\n        canvas.style.width = `${event.data.width}px`;\n        canvas.style.height = `${event.data.height}px`;\n        containerRef.current?.appendChild(canvas);\n\n        const offscreenCanvas = canvas.transferControlToOffscreen();\n        worker?.postMessage(\n          {\n            action: 'setStatsCanvas',\n            id: event.data.id,\n            canvas: offscreenCanvas,\n            devicePixelRatio: window.devicePixelRatio,\n          } as SetStatsCanvasResponse,\n          {\n            transfer: [offscreenCanvas],\n          },\n        );\n      } else if (event.data.action === 'getMemoryStats') {\n        // @ts-expect-error performance.memory might not exist\n        const memory = performance.memory ?? {\n          jsHeapSizeLimit: 0,\n          totalJSHeapSize: 0,\n          usedJSHeapSize: 0,\n        };\n        worker?.postMessage({\n          action: 'memoryStats',\n          id: event.data.id,\n          jsHeapSizeLimit: memory.jsHeapSizeLimit,\n          totalJSHeapSize: memory.totalJSHeapSize,\n          usedJSHeapSize: memory.usedJSHeapSize,\n        } as MemoryStatsResponse);\n      }\n    }\n\n    worker?.addEventListener('message', onMessage);\n    return () => {\n      worker?.removeEventListener('message', onMessage);\n    };\n  }, [video, isEnabled]);\n\n  function handleClick() {\n    setIsWrapped(w => !w);\n  }\n\n  if (!isEnabled) {\n    return null;\n  }\n\n  return (\n    <div\n      ref={containerRef}\n      {...stylex.props(styles.container)}\n      style={{flexWrap: isWrapped ? 'wrap' : 'unset'}}\n      onDoubleClick={handleClick}\n    />\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/demo/DemoConfig.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {Effects} from '@/common/components/video/effects/Effects';\n\ntype EffectLayers = {\n  background: keyof Effects;\n  highlight: keyof Effects;\n};\n\nexport const DEMO_SHORT_NAME = 'SAM 2 Demo';\nexport const RESEARCH_BY_META_AI = 'By Meta FAIR';\nexport const DEMO_FRIENDLY_NAME = 'Segment Anything 2 Demo';\nexport const VIDEO_WATERMARK_TEXT = `Modified with ${DEMO_FRIENDLY_NAME}`;\nexport const PROJECT_GITHUB_URL =\n  'https://github.com/facebookresearch/sam2';\nexport const AIDEMOS_URL = 'https://aidemos.meta.com';\nexport const ABOUT_URL = 'https://ai.meta.com/sam2';\nexport const EMAIL_ADDRESS = 'segment-anything@meta.com';\nexport const BLOG_URL = 'http://ai.meta.com/blog/sam2';\n\nexport const VIDEO_API_ENDPOINT = 'http://localhost:7263';\nexport const INFERENCE_API_ENDPOINT = 'http://localhost:7263';\n\nexport const demoObjectLimit = 3;\n\nexport const DEFAULT_EFFECT_LAYERS: EffectLayers = {\n  background: 'Original',\n  highlight: 'Overlay',\n};\n\nexport const MAX_UPLOAD_FILE_SIZE = '70MB';\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/demo/DemoErrorFallback.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport LoadingStateScreen from '@/common/loading/LoadingStateScreen';\nimport {FallbackProps} from 'react-error-boundary';\n\nexport default function DemoErrorFallback(_props: FallbackProps) {\n  return (\n    <LoadingStateScreen\n      title=\"Well, this is embarrassing...\"\n      description=\"This demo is not optimized for your device. Please try again on a different device with a larger screen.\"\n      linkProps={{to: '..', label: 'Back to homepage'}}\n    />\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/demo/DemoSuspenseFallback.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport LoadingStateScreen from '@/common/loading/LoadingStateScreen';\n\nexport default function DemoSuspenseFallback() {\n  return <LoadingStateScreen title=\"Fetching data\" />;\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/demo/SAM2DemoApp.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport '@/assets/scss/App.scss';\nimport ErrorReport from '@/common/error/ErrorReport';\nimport DemoErrorFallback from '@/demo/DemoErrorFallback';\nimport DemoSuspenseFallback from '@/demo/DemoSuspenseFallback';\nimport RelayEnvironmentProvider from '@/graphql/RelayEnvironmentProvider';\nimport RootLayout from '@/layouts/RootLayout';\nimport SAM2DemoPage from '@/routes/DemoPageWrapper';\nimport PageNotFoundPage from '@/routes/PageNotFoundPage';\nimport useSettingsContext from '@/settings/useSettingsContext';\nimport {Route, Routes} from 'react-router-dom';\n\nexport default function DemoAppWrapper() {\n  const {settings} = useSettingsContext();\n  return (\n    <RelayEnvironmentProvider\n      endpoint={settings.videoAPIEndpoint}\n      suspenseFallback={<DemoSuspenseFallback />}\n      errorFallback={DemoErrorFallback}>\n      <DemoApp />\n    </RelayEnvironmentProvider>\n  );\n}\n\nfunction DemoApp() {\n  return (\n    <>\n      <Routes>\n        <Route element={<RootLayout />}>\n          <Route index={true} element={<SAM2DemoPage />} />\n          <Route path=\"*\" element={<PageNotFoundPage />} />\n        </Route>\n      </Routes>\n      <ErrorReport />\n    </>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/demo/atoms.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {\n  defaultMessageMap,\n  MessagesEventMap,\n} from '@/common/components/snackbar/DemoMessagesSnackbarUtils';\nimport {Effects} from '@/common/components/video/effects/Effects';\nimport {\n  DemoEffect,\n  highlightEffects,\n} from '@/common/components/video/effects/EffectUtils';\nimport {\n  BaseTracklet,\n  SegmentationPoint,\n  StreamingState,\n} from '@/common/tracker/Tracker';\nimport type {DataArray} from '@/jscocotools/mask';\nimport {atom} from 'jotai';\n\nexport type VideoData = {\n  path: string;\n  posterPath: string | null | undefined;\n  url: string;\n  posterUrl: string;\n  width: number;\n  height: number;\n};\n\nexport const frameIndexAtom = atom<number>(0);\n\nexport const inputVideoAtom = atom<VideoData | null>(null);\n\n// #####################\n// SESSION\n// #####################\n\nexport type Session = {\n  id: string;\n  ranPropagation: boolean;\n};\n\nexport const sessionAtom = atom<Session | null>(null);\n\n// #####################\n// STREAMING/PLAYBACK\n// #####################\n\nexport const isVideoLoadingAtom = atom<boolean>(false);\n\nexport const streamingStateAtom = atom<StreamingState>('none');\n\nexport const isPlayingAtom = atom<boolean>(false);\n\nexport const isStreamingAtom = atom<boolean>(false);\n\n// #####################\n// OBJECTS\n// #####################\n\nexport type TrackletMask = {\n  mask: DataArray;\n  isEmpty: boolean;\n};\n\nexport type TrackletObject = {\n  id: number;\n  color: string;\n  thumbnail: string | null;\n  points: SegmentationPoint[][];\n  masks: TrackletMask[];\n  isInitialized: boolean;\n};\n\nconst MAX_NUMBER_TRACKLET_OBJECTS = 3;\n\nexport const activeTrackletObjectIdAtom = atom<number | null>(0);\n\nexport const activeTrackletObjectAtom = atom<BaseTracklet | null>(get => {\n  const objectId = get(activeTrackletObjectIdAtom);\n  const tracklets = get(trackletObjectsAtom);\n  return tracklets.find(obj => obj.id === objectId) ?? null;\n});\n\nexport const trackletObjectsAtom = atom<BaseTracklet[]>([]);\n\nexport const maxTrackletObjectIdAtom = atom<number>(get => {\n  const tracklets = get(trackletObjectsAtom);\n  return tracklets.reduce((prev, curr) => Math.max(prev, curr.id), 0);\n});\n\nexport const isTrackletObjectLimitReachedAtom = atom<boolean>(\n  get => get(trackletObjectsAtom).length >= MAX_NUMBER_TRACKLET_OBJECTS,\n);\n\nexport const areTrackletObjectsInitializedAtom = atom<boolean>(get =>\n  get(trackletObjectsAtom).every(obj => obj.isInitialized),\n);\n\nexport const isFirstClickMadeAtom = atom(get => {\n  const tracklets = get(trackletObjectsAtom);\n  return tracklets.some(tracklet => tracklet.points.length > 0);\n});\n\nexport const pointsAtom = atom<SegmentationPoint[]>(get => {\n  const frameIndex = get(frameIndexAtom);\n  const activeTracklet = get(activeTrackletObjectAtom);\n  return activeTracklet?.points[frameIndex] ?? [];\n});\n\nexport const labelTypeAtom = atom<'positive' | 'negative'>('positive');\n\nexport const isAddObjectEnabledAtom = atom<boolean>(get => {\n  const session = get(sessionAtom);\n  const trackletsInitialized = get(areTrackletObjectsInitializedAtom);\n  const isObjectLimitReached = get(isTrackletObjectLimitReachedAtom);\n  return (\n    session?.ranPropagation === false &&\n    trackletsInitialized &&\n    !isObjectLimitReached\n  );\n});\n\nexport const codeEditorOpenedAtom = atom<boolean>(false);\n\nexport const tutorialVideoEnabledAtom = atom<boolean>(true);\n\n// #####################\n// Effects\n// #####################\n\ntype EffectConfig = {\n  name: keyof Effects;\n  variant: number;\n  numVariants: number;\n};\n\nexport const activeBackgroundEffectAtom = atom<EffectConfig>({\n  name: 'Original',\n  variant: 0,\n  numVariants: 0,\n});\n\nexport const activeHighlightEffectAtom = atom<EffectConfig>({\n  name: 'Overlay',\n  variant: 0,\n  numVariants: 0,\n});\n\nexport const activeHighlightEffectGroupAtom =\n  atom<DemoEffect[]>(highlightEffects);\n\n// #####################\n// Toolbar\n// #####################\n\nexport const toolbarTabIndex = atom<number>(0);\n\n// #####################\n// Messages snackbar\n// #####################\n\nexport const messageMapAtom = atom<MessagesEventMap>(defaultMessageMap);\n\n// #####################\n// Upload state\n// #####################\n\nexport const uploadingStateAtom = atom<'default' | 'uploading' | 'error'>(\n  'default',\n);\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/graphql/RelayEnvironment.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Logger from '@/common/logger/Logger';\nimport {\n  CacheConfig,\n  Environment,\n  FetchFunction,\n  GraphQLResponse,\n  LogEvent,\n  Network,\n  ObservableFromValue,\n  RecordSource,\n  RequestParameters,\n  Store,\n  UploadableMap,\n  Variables,\n} from 'relay-runtime';\nimport fetchGraphQL from './fetchGraphQL';\n\nfunction createFetchRelay(endpoint: string): FetchFunction {\n  return (\n    request: RequestParameters,\n    variables: Variables,\n    cacheConfig: CacheConfig,\n    uploadables?: UploadableMap | null,\n  ): ObservableFromValue<GraphQLResponse> => {\n    Logger.debug(\n      `fetching query ${request.name} with ${JSON.stringify(variables)}`,\n    );\n    return fetchGraphQL(endpoint, request, variables, cacheConfig, uploadables);\n  };\n}\n\nexport function createEnvironment(endpoint: string): Environment {\n  return new Environment({\n    log: (logEvent: LogEvent) => Logger.debug(logEvent.name, logEvent),\n    network: Network.create(createFetchRelay(endpoint)),\n    store: new Store(new RecordSource()),\n  });\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/graphql/RelayEnvironmentProvider.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport ErrorFallback from '@/common/error/ErrorFallback';\nimport LoadingMessage from '@/common/loading/LoadingMessage';\nimport {createEnvironment} from '@/graphql/RelayEnvironment';\nimport {\n  ComponentType,\n  PropsWithChildren,\n  ReactNode,\n  Suspense,\n  useMemo,\n  useState,\n} from 'react';\nimport {ErrorBoundary, FallbackProps} from 'react-error-boundary';\nimport {RelayEnvironmentProvider} from 'react-relay';\n\ntype Props = PropsWithChildren<{\n  suspenseFallback?: ReactNode;\n  errorFallback?: ComponentType<FallbackProps>;\n  endpoint: string;\n}>;\n\nexport default function OnevisionRelayEnvironmentProvider({\n  suspenseFallback,\n  errorFallback = ErrorFallback,\n  endpoint,\n  children,\n}: Props) {\n  const [retryKey, setRetryKey] = useState<number>(0);\n\n  const environment = useMemo(() => {\n    return createEnvironment(endpoint);\n    // The retryKey is needed to force a new Relay Environment\n    // instance when the user retries after an error occurred.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [endpoint, retryKey]);\n\n  // Force re-creating Relay Environment\n  function handleReset() {\n    setRetryKey(k => k + 1);\n  }\n\n  return (\n    <ErrorBoundary onReset={handleReset} FallbackComponent={errorFallback}>\n      <RelayEnvironmentProvider environment={environment}>\n        <Suspense fallback={suspenseFallback ?? <LoadingMessage />}>\n          {children}\n        </Suspense>\n      </RelayEnvironmentProvider>\n    </ErrorBoundary>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/graphql/errors/CreateFilmstripError.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport default class CreateFilmstripError extends Error {\n  override name = 'CreateFilmstripError';\n  constructor(message?: string) {\n    super(message);\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/graphql/errors/DrawFrameError.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport default class DrawFrameError extends Error {\n  override name = 'DrawFrameError';\n  constructor(message?: string) {\n    super(message);\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/graphql/errors/WebGLContextError.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport default class WebGLContextError extends Error {\n  override name = 'WebGLContextError';\n  constructor(message?: string) {\n    super(message);\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/graphql/fetchGraphQL.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Logger from '@/common/logger/Logger';\nimport {\n  CacheConfig,\n  GraphQLResponse,\n  RequestParameters,\n  UploadableMap,\n  Variables,\n} from 'relay-runtime';\n\n/**\n * Inspired by https://github.com/facebook/relay/issues/1844\n */\nexport default async function fetchGraphQL(\n  endpoint: string,\n  request: RequestParameters,\n  variables: Variables,\n  cacheConfig: CacheConfig,\n  uploadables?: UploadableMap | null,\n): Promise<GraphQLResponse> {\n  const url = `${endpoint}/graphql`;\n\n  const headers: {[name: string]: string} = {};\n  const requestInit: RequestInit = {\n    method: 'POST',\n    headers,\n    credentials: 'include',\n  };\n\n  const customHeaders = (cacheConfig?.metadata?.headers ?? {}) as {\n    [key: string]: string;\n  };\n\n  requestInit.headers = Object.assign(customHeaders, requestInit.headers);\n\n  if (uploadables != null) {\n    const formData = new FormData();\n    formData.append(\n      'operations',\n      JSON.stringify({\n        query: request.text,\n        variables,\n      }),\n    );\n\n    const uploadableMap: {\n      [key: string]: string[];\n    } = {};\n\n    Object.keys(uploadables).forEach(key => {\n      uploadableMap[key] = [`variables.${key}`];\n    });\n\n    formData.append('map', JSON.stringify(uploadableMap));\n\n    Object.keys(uploadables).forEach(key => {\n      formData.append(key, uploadables[key]);\n    });\n\n    requestInit.body = formData;\n  } else {\n    requestInit.headers = Object.assign(\n      {'Content-Type': 'application/json'},\n      requestInit.headers,\n    );\n\n    requestInit.body = JSON.stringify({\n      query: request.text,\n      variables,\n    });\n  }\n\n  try {\n    const response = await fetch(url, requestInit);\n    const result = await response.json();\n\n    // Handle any intentional GraphQL errors, which are passed through the\n    // errors property in the JSON payload.\n    if ('errors' in result) {\n      for (const error of result.errors) {\n        Logger.error(error);\n      }\n    }\n\n    return result;\n  } catch (error) {\n    Logger.error(`Could not connect to GraphQL endpoint ${url}`, error);\n    throw error;\n  }\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/jscocotools/mask.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport class DataArray {\n  data: Uint8Array;\n  readonly shape: number[];\n\n  constructor(data: Uint8Array, shape: Array<number>) {\n    this.data = data;\n    this.shape = shape;\n  }\n}\n\nexport type RLEObject = {\n  size: [h: number, w: number];\n  counts: string;\n};\n\ntype RLE = {\n  h: number;\n  w: number;\n  m: number;\n  cnts: number[];\n};\n\ntype BB = number[];\n\nfunction rleInit(R: RLE, h: number, w: number, m: number, cnts: number[]) {\n  R.h = h;\n  R.w = w;\n  R.m = m;\n  R.cnts = m === 0 ? [0] : cnts;\n}\n\nfunction rlesInit(R: RLE[], n: number) {\n  let i;\n  for (i = 0; i < n; i++) {\n    R[i] = {h: 0, w: 0, m: 0, cnts: [0]};\n    rleInit(R[i], 0, 0, 0, [0]);\n  }\n}\n\nclass RLEs {\n  _R: RLE[];\n  _n: number;\n\n  constructor(n: number) {\n    this._R = [];\n    rlesInit(this._R, n);\n    this._n = n;\n  }\n}\n\nexport class Masks {\n  _mask: Uint8Array;\n  _h: number;\n  _w: number;\n  _n: number;\n\n  constructor(h: number, w: number, n: number) {\n    this._mask = new Uint8Array(h * w * n);\n    this._h = h;\n    this._w = w;\n    this._n = n;\n  }\n\n  toDataArray(): DataArray {\n    return new DataArray(this._mask, [this._h, this._w, this._n]);\n  }\n}\n\n// encode mask to RLEs objects\n// list of RLE string can be generated by RLEs member function\nexport function encode(mask: DataArray): RLEObject[] {\n  const h = mask.shape[0];\n  const w = mask.shape[1];\n  const n = mask.shape[2];\n  const Rs = new RLEs(n);\n  rleEncode(Rs._R, mask.data, h, w, n);\n  const objs = _toString(Rs);\n  return objs;\n}\n\n// decode mask from compressed list of RLE string or RLEs object\nexport function decode(rleObjs: RLEObject[]): DataArray {\n  const Rs = _frString(rleObjs);\n  const h = Rs._R[0].h;\n  const w = Rs._R[0].w;\n  const n = Rs._n;\n  const masks = new Masks(h, w, n);\n  rleDecode(Rs._R, masks._mask, n);\n  return masks.toDataArray();\n}\n\nexport function toBbox(rleObjs: RLEObject[]): BB {\n  const Rs = _frString(rleObjs);\n  const n = Rs._n;\n  const bb: BB = [];\n  rleToBbox(Rs._R, bb, n);\n  return bb;\n}\n\nfunction rleEncode(R: RLE[], M: Uint8Array, h: number, w: number, n: number) {\n  let i;\n  let j;\n  let k;\n  const a = w * h;\n  let c;\n  const cnts: number[] = [];\n  let p;\n  for (i = 0; i < n; i++) {\n    const from = a * i;\n    const to = a * (i + 1);\n    // Slice data for current RLE object\n    const T = M.slice(from, to);\n    k = 0;\n    p = 0;\n    c = 0;\n    for (j = 0; j < a; j++) {\n      if (T[j] !== p) {\n        cnts[k++] = c;\n        c = 0;\n        p = T[j];\n      }\n      c++;\n    }\n    cnts[k++] = c;\n    rleInit(R[i], h, w, k, [...cnts]);\n  }\n}\n\nfunction rleDecode(R: RLE[], M: Uint8Array, n: number): void {\n  let i;\n  let j;\n  let k;\n  let p = 0;\n  for (i = 0; i < n; i++) {\n    let v = false;\n    for (j = 0; j < R[i].m; j++) {\n      for (k = 0; k < R[i].cnts[j]; k++) {\n        M[p++] = v === false ? 0 : 1;\n      }\n      v = !v;\n    }\n  }\n}\n\nfunction rleToString(R: RLE): string {\n  /* Similar to LEB128 but using 6 bits/char and ascii chars 48-111. */\n  let i;\n  const m = R.m;\n  let p = 0;\n  let x: number;\n  let more;\n  const s: string[] = [];\n  for (i = 0; i < m; i++) {\n    x = R.cnts[i];\n    if (i > 2) {\n      x -= R.cnts[i - 2];\n    }\n    more = true; // 1;\n    while (more) {\n      let c = x & 0x1f;\n      x >>= 5;\n      more = c & 0x10 ? x != -1 : x != 0;\n      if (more) {\n        c |= 0x20;\n      }\n      c += 48;\n      s[p++] = String.fromCharCode(c);\n    }\n  }\n  return s.join('');\n}\n\n// internal conversion from Python RLEs object to compressed RLE format\nfunction _toString(Rs: RLEs): RLEObject[] {\n  const n = Rs._n;\n  let py_string;\n  let c_string;\n  const objs: RLEObject[] = [];\n  for (let i = 0; i < n; i++) {\n    c_string = rleToString(Rs._R[i]);\n    py_string = c_string;\n    objs.push({\n      size: [Rs._R[i].h, Rs._R[i].w],\n      counts: py_string,\n    });\n  }\n  return objs;\n}\n\n// internal conversion from compressed RLE format to Python RLEs object\nfunction _frString(rleObjs: RLEObject[]): RLEs {\n  const n = rleObjs.length;\n  const Rs = new RLEs(n);\n  let py_string;\n  let c_string;\n  for (let i = 0; i < rleObjs.length; i++) {\n    const obj = rleObjs[i];\n    py_string = obj.counts;\n    c_string = py_string;\n    rleFrString(Rs._R[i], c_string, obj.size[0], obj.size[1]);\n  }\n  return Rs;\n}\n\nfunction rleToBbox(R: RLE[], bb: BB, n: number) {\n  for (let i = 0; i < n; i++) {\n    const h = R[i].h;\n    const w = R[i].w;\n    let m = R[i].m;\n    // The RLE structure likely contains run-length encoded data where each\n    // element represents a count of consecutive pixels with the same value in\n    // a binary image (black or white). Since the counts represent both black\n    // and white pixels, this operation ((siz)(m/2)) * 2 is used to ensure that\n    // m is always an even number. By doing so, the code can later check\n    // whether the current pixel is black or white based on whether the index j\n    // is even or odd.\n    m = Math.floor(m / 2) * 2;\n    let xs = w;\n    let ys = h;\n    let xe = 0;\n    let ye = 0;\n    let cc = 0;\n    let t;\n    let y;\n    let x;\n    let xp = 0;\n    if (m === 0) {\n      bb[4 * i] = bb[4 * i + 1] = bb[4 * i + 2] = bb[4 * i + 3] = 0;\n      continue;\n    }\n    for (let j = 0; j < m; j++) {\n      cc += R[i].cnts[j];\n      t = cc - (j % 2);\n      y = t % h;\n      x = Math.floor((t - y) / h);\n      if (j % 2 === 0) {\n        xp = x;\n      } else if (xp < x) {\n        ys = 0;\n        ye = h - 1;\n      }\n      xs = Math.min(xs, x);\n      xe = Math.max(xe, x);\n      ys = Math.min(ys, y);\n      ye = Math.max(ye, y);\n    }\n    bb[4 * i] = xs;\n    bb[4 * i + 2] = xe - xs + 1;\n    bb[4 * i + 1] = ys;\n    bb[4 * i + 3] = ye - ys + 1;\n  }\n}\n\nfunction rleFrString(R: RLE, s: string, h: number, w: number): void {\n  let m = 0;\n  let p = 0;\n  let k;\n  let x;\n  let more;\n  let cnts = [];\n  while (s[m]) {\n    m++;\n  }\n  cnts = [];\n  m = 0;\n  while (s[p]) {\n    x = 0;\n    k = 0;\n    more = 1;\n    while (more) {\n      const c = s.charCodeAt(p) - 48;\n      x |= (c & 0x1f) << (5 * k);\n      more = c & 0x20;\n      p++;\n      k++;\n      if (!more && c & 0x10) {\n        x |= -1 << (5 * k);\n      }\n    }\n    if (m > 2) {\n      x += cnts[m - 2];\n    }\n    cnts[m++] = x;\n  }\n  rleInit(R, h, w, m, cnts);\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/layouts/DemoPageLayout.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {spacing} from '@/theme/tokens.stylex';\nimport stylex from '@stylexjs/stylex';\nimport {PropsWithChildren} from 'react';\n\ntype Props = PropsWithChildren;\n\nconst styles = stylex.create({\n  container: {\n    width: '100%',\n    height: '100%',\n    display: 'flex',\n    justifyContent: 'stretch',\n    alignItems: 'stretch',\n    gap: spacing[12],\n    paddingHorizontal: spacing[12],\n    paddingVertical: spacing[4],\n    '@media screen and (max-width: 768px)': {\n      display: 'flex',\n      flexDirection: 'column-reverse',\n      gap: 0,\n      marginTop: spacing[0],\n      marginBottom: spacing[0],\n      paddingHorizontal: spacing[0],\n      paddingBottom: spacing[0],\n    },\n  },\n});\n\nexport default function DemoPageLayout({children}: Props) {\n  return <div {...stylex.props(styles.container)}>{children}</div>;\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/layouts/RootLayout.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport LoadingStateScreen from '@/common/loading/LoadingStateScreen';\nimport useSettingsContext from '@/settings/useSettingsContext';\nimport {Cog6ToothIcon} from '@heroicons/react/24/outline';\nimport stylex from '@stylexjs/stylex';\nimport {Suspense} from 'react';\nimport {Button, Indicator} from 'react-daisyui';\nimport {Outlet} from 'react-router-dom';\n\nconst styles = stylex.create({\n  container: {\n    display: 'flex',\n    flexDirection: 'column',\n    height: '100%',\n    maxHeight: '100vh',\n    backgroundColor: '#000',\n  },\n  content: {\n    position: 'relative',\n    flex: '1 1 0%',\n    display: 'flex',\n    flexDirection: 'column',\n    overflowX: 'auto',\n    overflowY: {\n      default: 'auto',\n      '@media screen and (max-width: 768px)': 'auto',\n    },\n  },\n  debugActions: {\n    display: 'flex',\n    flexDirection: 'column',\n    position: 'fixed',\n    top: 100,\n    right: 0,\n    backgroundColor: 'white',\n    borderRadius: 3,\n  },\n});\n\nexport default function RootLayout() {\n  const {openModal, hasChanged} = useSettingsContext();\n\n  return (\n    <div {...stylex.props(styles.container)}>\n      <div {...stylex.props(styles.content)}>\n        <Suspense\n          fallback={\n            <LoadingStateScreen\n              title=\"Loading demo...\"\n              description=\"This may take a few moments, you're almost there!\"\n            />\n          }>\n          <Outlet />\n        </Suspense>\n      </div>\n      <div {...stylex.props(styles.debugActions)}>\n        <Indicator>\n          {hasChanged && (\n            <Indicator.Item\n              className=\"badge badge-primary scale-50\"\n              horizontal=\"start\"\n              vertical=\"top\"\n            />\n          )}\n          <Button\n            color=\"ghost\"\n            onClick={openModal}\n            shape=\"circle\"\n            size=\"xs\"\n            startIcon={<Cog6ToothIcon className=\"w-4 h-4\" />}\n            title=\"Bugnub\"\n          />\n        </Indicator>\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/routes/DemoPage.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Toolbar from '@/common/components/toolbar/Toolbar';\nimport DemoVideoEditor from '@/common/components/video/editor/DemoVideoEditor';\nimport useInputVideo from '@/common/components/video/useInputVideo';\nimport StatsView from '@/debug/stats/StatsView';\nimport {VideoData} from '@/demo/atoms';\nimport DemoPageLayout from '@/layouts/DemoPageLayout';\nimport {DemoPageQuery} from '@/routes/__generated__/DemoPageQuery.graphql';\nimport {useEffect, useMemo} from 'react';\nimport {graphql, useLazyLoadQuery} from 'react-relay';\nimport {Location, useLocation} from 'react-router-dom';\n\ntype LocationState = {\n  video?: VideoData;\n};\n\nexport default function DemoPage() {\n  const {state} = useLocation() as Location<LocationState>;\n  const data = useLazyLoadQuery<DemoPageQuery>(\n    graphql`\n      query DemoPageQuery {\n        defaultVideo {\n          path\n          posterPath\n          url\n          posterUrl\n          height\n          width\n        }\n      }\n    `,\n    {},\n  );\n  const {setInputVideo} = useInputVideo();\n\n  const video = useMemo(() => {\n    return state?.video ?? data.defaultVideo;\n  }, [state, data]);\n\n  useEffect(() => {\n    setInputVideo(video);\n  }, [video, setInputVideo]);\n\n  return (\n    <DemoPageLayout>\n      <StatsView />\n      <Toolbar />\n      <DemoVideoEditor video={video} />\n    </DemoPageLayout>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/routes/DemoPageWrapper.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport LoadingStateScreen from '@/common/loading/LoadingStateScreen';\nimport DemoPage from '@/routes/DemoPage';\nimport stylex from '@stylexjs/stylex';\nimport {isFirefox} from 'react-device-detect';\n\nconst styles = stylex.create({\n  link: {\n    textDecorationLine: 'underline',\n    color: '#A7B3BF',\n  },\n});\n\nconst REQUIRED_WINDOW_APIS = ['VideoEncoder', 'VideoDecoder', 'VideoFrame'];\n\nfunction isBrowserSupported() {\n  for (const api of REQUIRED_WINDOW_APIS) {\n    if (!(api in window)) {\n      return false;\n    }\n  }\n\n  // Test if transferControlToOffscreen is supported. For example, this will\n  // fail on iOS version < 16.4\n  // https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/transferControlToOffscreen\n  const canvas = document.createElement('canvas');\n  if (typeof canvas.transferControlToOffscreen !== 'function') {\n    return false;\n  }\n\n  return true;\n}\n\nexport default function DemoPageWrapper() {\n  const isBrowserUnsupported = !isBrowserSupported();\n\n  if (isBrowserUnsupported && isFirefox) {\n    const nightlyUrl = 'https://wiki.mozilla.org/Nightly';\n    return (\n      <LoadingStateScreen\n        title=\"Sorry Firefox!\"\n        description={\n          <div>\n            This version of Firefox doesn’t support the video features we’ll\n            need to run this demo. You can either update Firefox to the latest\n            nightly build{' '}\n            <a\n              {...stylex.props(styles.link)}\n              href={nightlyUrl}\n              target=\"_blank\"\n              rel=\"noreferrer\">\n              here\n            </a>\n            , or try again using Chrome or Safari.\n          </div>\n        }\n        linkProps={{to: '..', label: 'Back to homepage'}}\n      />\n    );\n  }\n\n  if (isBrowserUnsupported) {\n    return (\n      <LoadingStateScreen\n        title=\"Uh oh, this browser isn’t supported.\"\n        description=\"This browser doesn’t support the video features we’ll need to run this demo. Try again using Chrome, Safari, or Firefox Nightly.\"\n        linkProps={{to: '..', label: 'Back to homepage'}}\n      />\n    );\n  }\n\n  return <DemoPage />;\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/routes/PageNotFoundPage.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport LoadingStateScreen from '@/common/loading/LoadingStateScreen';\n\nexport default function PageNotFoundPage() {\n  return (\n    <LoadingStateScreen\n      title=\"Page not found\"\n      description=\"It looks like you might be in the wrong place.\"\n      linkProps={{\n        to: '..',\n        label: 'Click here to access the SAM 2 Demo',\n      }}\n    />\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/routes/__generated__/DemoPageQuery.graphql.ts",
    "content": "/**\n * @generated SignedSource<<f457eacd20a61cba601921caee2a18f5>>\n * @lightSyntaxTransform\n * @nogrep\n */\n\n/* tslint:disable */\n/* eslint-disable */\n// @ts-nocheck\n\nimport { ConcreteRequest, Query } from 'relay-runtime';\nexport type DemoPageQuery$variables = Record<PropertyKey, never>;\nexport type DemoPageQuery$data = {\n  readonly defaultVideo: {\n    readonly height: number;\n    readonly path: string;\n    readonly posterPath: string | null | undefined;\n    readonly posterUrl: string;\n    readonly url: string;\n    readonly width: number;\n  };\n};\nexport type DemoPageQuery = {\n  response: DemoPageQuery$data;\n  variables: DemoPageQuery$variables;\n};\n\nconst node: ConcreteRequest = (function(){\nvar v0 = [\n  {\n    \"alias\": null,\n    \"args\": null,\n    \"concreteType\": \"Video\",\n    \"kind\": \"LinkedField\",\n    \"name\": \"defaultVideo\",\n    \"plural\": false,\n    \"selections\": [\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"path\",\n        \"storageKey\": null\n      },\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"posterPath\",\n        \"storageKey\": null\n      },\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"url\",\n        \"storageKey\": null\n      },\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"posterUrl\",\n        \"storageKey\": null\n      },\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"height\",\n        \"storageKey\": null\n      },\n      {\n        \"alias\": null,\n        \"args\": null,\n        \"kind\": \"ScalarField\",\n        \"name\": \"width\",\n        \"storageKey\": null\n      }\n    ],\n    \"storageKey\": null\n  }\n];\nreturn {\n  \"fragment\": {\n    \"argumentDefinitions\": [],\n    \"kind\": \"Fragment\",\n    \"metadata\": null,\n    \"name\": \"DemoPageQuery\",\n    \"selections\": (v0/*: any*/),\n    \"type\": \"Query\",\n    \"abstractKey\": null\n  },\n  \"kind\": \"Request\",\n  \"operation\": {\n    \"argumentDefinitions\": [],\n    \"kind\": \"Operation\",\n    \"name\": \"DemoPageQuery\",\n    \"selections\": (v0/*: any*/)\n  },\n  \"params\": {\n    \"cacheID\": \"71cbafce4d2d047acdc54d86504f2d2e\",\n    \"id\": null,\n    \"metadata\": {},\n    \"name\": \"DemoPageQuery\",\n    \"operationKind\": \"query\",\n    \"text\": \"query DemoPageQuery {\\n  defaultVideo {\\n    path\\n    posterPath\\n    url\\n    posterUrl\\n    height\\n    width\\n  }\\n}\\n\"\n  }\n};\n})();\n\n(node as any).hash = \"63c9465d78b30d42d6fc11e50a9af142\";\n\nexport default node;\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/settings/ApprovableInput.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport Tooltip from '@/common/components/Tooltip';\nimport {ArrowPathIcon, CheckIcon, XMarkIcon} from '@heroicons/react/24/solid';\nimport {ChangeEvent, KeyboardEvent, useEffect, useMemo, useState} from 'react';\nimport {Button, Form, Input, Join} from 'react-daisyui';\n\ntype Props<T extends string | number> = Omit<\n  React.InputHTMLAttributes<HTMLInputElement>,\n  'size' | 'color' | 'onChange'\n> & {\n  label: string;\n  defaultValue: T;\n  initialValue: T;\n  onChange: (value: string) => void;\n};\n\nfunction getStep(value: number) {\n  const stringValue = String(value);\n  const decimals = stringValue.split('.')[1];\n  if (decimals != null) {\n    // Not using 0.1 ** decimals.length because this will result in rounding\n    // errors, e.g., 0.1 ** 2 => 0.010000000000000002.\n    return 1 / 10 ** decimals.length;\n  }\n  return 1;\n}\n\nexport default function ApprovableInput<T extends string | number>({\n  label,\n  defaultValue,\n  initialValue,\n  onChange,\n  ...otherProps\n}: Props<T>) {\n  const [value, setValue] = useState<string>(`${initialValue}`);\n\n  useEffect(() => {\n    setValue(`${initialValue}`);\n  }, [initialValue]);\n\n  const step = useMemo(() => {\n    return typeof defaultValue === 'number' && isFinite(defaultValue)\n      ? getStep(defaultValue)\n      : undefined;\n  }, [defaultValue]);\n\n  return (\n    <div>\n      <Form.Label className=\"flex-col items-start gap-2\" title={label}>\n        <Join className=\"w-full\">\n          <Input\n            {...otherProps}\n            className=\"w-full join-item\"\n            value={value}\n            step={step}\n            placeholder={`${defaultValue}`}\n            onChange={(event: ChangeEvent<HTMLInputElement>) => {\n              setValue(event.target.value);\n            }}\n            onKeyDown={(event: KeyboardEvent<HTMLInputElement>) => {\n              if (event.key === 'Enter') {\n                event.preventDefault();\n                onChange(value);\n              }\n            }}\n          />\n          <Tooltip message=\"Reset to default\">\n            <Button\n              className=\"join-item\"\n              onClick={event => {\n                event.preventDefault();\n                setValue(`${defaultValue}`);\n              }}>\n              <ArrowPathIcon className=\"h-4 w-4\" />\n            </Button>\n          </Tooltip>\n          <Tooltip message=\"Revert change\">\n            <Button\n              className=\"join-item\"\n              color=\"neutral\"\n              disabled={initialValue == value}\n              onClick={event => {\n                event.preventDefault();\n                setValue(`${initialValue}`);\n              }}>\n              <XMarkIcon className=\"h-4 w-4\" />\n            </Button>\n          </Tooltip>\n          <Tooltip message=\"Apply change\">\n            <Button\n              className=\"join-item\"\n              color=\"primary\"\n              disabled={initialValue == value}\n              onClick={event => {\n                event.preventDefault();\n                onChange(value);\n              }}>\n              <CheckIcon className=\"h-4 w-4\" />\n            </Button>\n          </Tooltip>\n        </Join>\n      </Form.Label>\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/settings/SAM2Settings.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {INFERENCE_API_ENDPOINT, VIDEO_API_ENDPOINT} from '@/demo/DemoConfig';\nimport ApprovableInput from '@/settings/ApprovableInput';\nimport useSettingsContext from '@/settings/useSettingsContext';\n\nexport default function SAMVSettings() {\n  const {settings, dispatch} = useSettingsContext();\n\n  return (\n    <div>\n      <ApprovableInput\n        label=\"Video API Endpoint\"\n        defaultValue={VIDEO_API_ENDPOINT}\n        initialValue={settings.videoAPIEndpoint}\n        onChange={url => dispatch({type: 'change-video-api-endpoint', url})}\n      />\n      <ApprovableInput\n        label=\"Inference API Endpoint\"\n        defaultValue={INFERENCE_API_ENDPOINT}\n        initialValue={settings.inferenceAPIEndpoint}\n        onChange={url => dispatch({type: 'change-inference-api-endpoint', url})}\n      />\n    </div>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/settings/SettingsContextProvider.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport emptyFunction from '@/common/utils/emptyFunction';\nimport {INFERENCE_API_ENDPOINT, VIDEO_API_ENDPOINT} from '@/demo/DemoConfig';\nimport SettingsModal from '@/settings/SettingsModal';\nimport {\n  Action,\n  DEFAULT_SETTINGS,\n  Settings,\n  settingsReducer,\n} from '@/settings/SettingsReducer';\nimport {\n  PropsWithChildren,\n  createContext,\n  useCallback,\n  useMemo,\n  useRef,\n} from 'react';\nimport {useImmerReducer} from 'use-immer';\n\ntype ContextProps = {\n  settings: Settings;\n  dispatch: React.Dispatch<Action>;\n  openModal: () => void;\n  closeModal: () => void;\n  hasChanged: boolean;\n};\n\nexport const SettingsContext = createContext<ContextProps>({\n  settings: DEFAULT_SETTINGS,\n  dispatch: emptyFunction,\n  openModal: emptyFunction,\n  closeModal: emptyFunction,\n  hasChanged: false,\n});\n\ntype Props = PropsWithChildren;\n\nexport default function SettingsContextProvider({children}: Props) {\n  const [state, dispatch] = useImmerReducer(\n    settingsReducer,\n    DEFAULT_SETTINGS,\n    settings => {\n      // Load the settings from local storage. Eventually use the reducer init\n      // to handle initial loading.\n      return settingsReducer(settings, {type: 'load-state'});\n    },\n  );\n\n  const modalRef = useRef<HTMLDialogElement>(null);\n\n  const openModal = useCallback(() => {\n    modalRef.current?.showModal();\n  }, [modalRef]);\n\n  const handleCloseModal = useCallback(() => {\n    modalRef.current?.close();\n  }, [modalRef]);\n\n  const hasChanged = useMemo(() => {\n    return (\n      VIDEO_API_ENDPOINT !== state.videoAPIEndpoint ||\n      INFERENCE_API_ENDPOINT !== state.inferenceAPIEndpoint\n    );\n  }, [state.videoAPIEndpoint, state.inferenceAPIEndpoint]);\n\n  const value = useMemo(\n    () => ({\n      settings: state,\n      dispatch,\n      openModal,\n      closeModal: handleCloseModal,\n      hasChanged,\n    }),\n    [state, dispatch, openModal, handleCloseModal, hasChanged],\n  );\n\n  return (\n    <SettingsContext.Provider value={value}>\n      {children}\n      <SettingsModal ref={modalRef} />\n    </SettingsContext.Provider>\n  );\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/settings/SettingsModal.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {DEMO_FRIENDLY_NAME} from '@/demo/DemoConfig';\nimport SAM2Settings from '@/settings/SAM2Settings';\nimport {XMarkIcon} from '@heroicons/react/24/solid';\nimport {forwardRef, useState} from 'react';\nimport {Button, Modal} from 'react-daisyui';\nimport useSettingsContext from './useSettingsContext';\n\ntype Props = unknown;\n\ntype Config = {\n  key: 'sam2';\n  title: string;\n  component: React.ElementType;\n};\n\nconst SettingsConfig: Config[] = [\n  {\n    key: 'sam2',\n    title: DEMO_FRIENDLY_NAME,\n    component: SAM2Settings,\n  },\n];\n\nexport default forwardRef<HTMLDialogElement, Props>(\n  function SettingsModal(_props, ref) {\n    const {closeModal} = useSettingsContext();\n    const [activeConfig, setActiveConfig] = useState<Config>(SettingsConfig[0]);\n\n    const SettingsComponent = activeConfig.component;\n\n    return (\n      <Modal\n        data-testid=\"settings-modal\"\n        ref={ref}\n        className=\"lg:absolute lg:top-10 lg:w-11/12 lg:max-w-4xl flex flex-col\"\n        responsive={true}>\n        <Button\n          size=\"sm\"\n          color=\"ghost\"\n          shape=\"circle\"\n          className=\"absolute right-2 top-2\"\n          startIcon={<XMarkIcon className=\"w-6 h-6\" />}\n          onClick={closeModal}\n        />\n        <Modal.Header className=\"font-bold\">Settings</Modal.Header>\n        <Modal.Body className=\"flex flex-col grow overflow-hidden\">\n          <div className=\"flex flex-col md:lg:flex-row gap-4 md:lg:gap-12 overflow-hidden\">\n            <div className=\"flex flex-row shrink-0 md:lg:flex-col gap-4 md:lg:py-2 overflow-x-auto\">\n              {SettingsConfig.map(config => (\n                <div\n                  key={config.key}\n                  data-testid={`show-settings-${config.key}`}\n                  className={`cursor-pointer whitespace-nowrap ${\n                    activeConfig.key === config.key && 'text-primary'\n                  } ${\n                    activeConfig.key === config.key &&\n                    'sm:underline md:lg:no-underline sm:underline-offset-4'\n                  }`}\n                  onClick={() => setActiveConfig(config)}>\n                  {config.title}\n                </div>\n              ))}\n            </div>\n            <div\n              data-testid={`settings-${activeConfig.key}`}\n              className=\"overflow-hidden overflow-y-auto grow md:lg:pt-2\">\n              <div className=\"flex flex-col grow-0 flex-1\">\n                <h1 className=\"hidden md:lg:block\">{activeConfig.title}</h1>\n                <SettingsComponent />\n              </div>\n            </div>\n          </div>\n        </Modal.Body>\n        <Modal.Actions className=\"shrink-0\">\n          <Button onClick={closeModal}>Close</Button>\n        </Modal.Actions>\n      </Modal>\n    );\n  },\n);\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/settings/SettingsReducer.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {INFERENCE_API_ENDPOINT, VIDEO_API_ENDPOINT} from '@/demo/DemoConfig';\n\nexport type Settings = {\n  videoAPIEndpoint: string;\n  inferenceAPIEndpoint: string;\n};\n\n// Key used to store the settings in the browser's local storage.\nexport const SAM2_SETTINGS_KEY = 'SAM2_SETTINGS_KEY';\n\nexport type Action =\n  | {type: 'load-state'}\n  | {type: 'change-video-api-endpoint'; url: string}\n  | {type: 'change-inference-api-endpoint'; url: string};\n\nexport const DEFAULT_SETTINGS: Settings = {\n  videoAPIEndpoint: VIDEO_API_ENDPOINT,\n  inferenceAPIEndpoint: INFERENCE_API_ENDPOINT,\n};\n\nexport function settingsReducer(state: Settings, action: Action): Settings {\n  function storeSettings(newState: Settings): void {\n    localStorage.setItem(SAM2_SETTINGS_KEY, JSON.stringify(newState));\n  }\n\n  switch (action.type) {\n    case 'load-state': {\n      try {\n        const serializedSettings = localStorage.getItem(SAM2_SETTINGS_KEY);\n        if (serializedSettings != null) {\n          return JSON.parse(serializedSettings) as Settings;\n        } else {\n          // Store default settings in local storage. This will populate the\n          // settings in the local storage on first app load or when user\n          // cleared the browser cache.\n          storeSettings(state);\n        }\n      } catch {\n        // Could not parse settings. Using default settings instead.\n      }\n      return state;\n    }\n    case 'change-video-api-endpoint':\n      state.videoAPIEndpoint = action.url;\n      break;\n    case 'change-inference-api-endpoint':\n      state.inferenceAPIEndpoint = action.url;\n      break;\n  }\n\n  // Store the settings state on every change\n  storeSettings(state);\n\n  return state;\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/settings/useSettingsContext.tsx",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {useContext} from 'react';\nimport {SettingsContext} from '@/settings/SettingsContextProvider';\n\nexport default function useSettingsContext() {\n  return useContext(SettingsContext);\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/theme/colors.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const THEME_COLORS = [\n  '#3880F3',\n  '#F0AA19',\n  '#00D2BE',\n  '#28D232',\n  '#8773FF',\n  '#00C8F0',\n  '#FA8719',\n  '#E6193B',\n  '#FA7DC8',\n];\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/theme/gradientStyle.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport const BLUE_PINK_FILL = 'from-[#595FEF] from-40% to-[#FB73A5]';\nexport const BLUE_PINK_FILL_BR =\n  'bg-gradient-to-br from-[#595FEF] from-30% to-[#FB73A5]';\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/theme/tokens.stylex.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as stylex from '@stylexjs/stylex';\n\nexport const spacing = stylex.defineVars({\n  '0': '0rem',\n  '0.5': '0.125rem',\n  '1': '0.25rem',\n  '1.5': '0.375rem',\n  '2': '0.5rem',\n  '2.5': '0.625rem',\n  '3': '0.75rem',\n  '3.5': '0.875rem',\n  '4': '1rem',\n  '5': '1.25rem',\n  '6': '1.5rem',\n  '7': '1.75rem',\n  '8': '2rem',\n  '9': '2.25rem',\n  '10': '2.5rem',\n  '11': '2.75rem',\n  '12': '3rem',\n});\n\nexport const gap = stylex.defineVars({\n  4: '1rem' /* 16px */,\n});\n\nexport const w = stylex.defineVars({\n  full: '100%',\n  12: '3rem' /* 48px */,\n  96: '24rem' /* 384px */,\n});\n\nexport const m = stylex.defineVars({\n  3: '0.75rem' /* 12px */,\n});\n\nexport const fontSize = stylex.defineVars({\n  xs: '0.75rem',\n  sm: '0.875rem',\n  base: '1rem',\n  lg: '1.125rem',\n  xl: '1.25rem',\n  '2xl': '1.5rem',\n});\n\nexport const fontWeight = stylex.defineVars({\n  thin: 100,\n  extralight: 200,\n  light: 300,\n  normal: 400,\n  medium: 500,\n  semibold: 600,\n  bold: 700,\n  extrabold: 800,\n});\n\nexport const color = stylex.defineVars({\n  subtitle: 'rgb(107 114 128)',\n  'gray-900': 'rgb(17 24 39)',\n  'gray-800': 'rgb(26 28 31)',\n  'gray-700': 'rgb(55 62 65)',\n  'blue-600': 'rgb(37 99 235)',\n});\n\nexport const screenSizes = {\n  sm: 640,\n  md: 768,\n  lg: 1024,\n  xl: 1280,\n  '2xl': 1536,\n};\n\nexport const borderRadius = stylex.defineVars({\n  sm: '0.125rem',\n  md: '0.375rem',\n  lg: '0.5rem',\n  xl: '0.75rem',\n});\n\nexport const top = stylex.defineVars({\n  0: 0,\n  1: '0.25rem' /* 4px */,\n  2: '0.5rem' /* 8px */,\n});\n\nexport const right = stylex.defineVars({\n  0: 0,\n  1: '0.25rem' /* 4px */,\n  2: '0.5rem' /* 8px */,\n});\n\nexport const gradients = stylex.defineVars({\n  rainbow:\n    'linear-gradient(#000, #000) padding-box, linear-gradient(to right bottom, #FB73A5,#595FEF,#94EAE2,#FCCB6B) border-box',\n\n  rainbowReverse:\n    'linear-gradient(#000, #000) padding-box, linear-gradient(to left top, #FB73A5,#595FEF,#94EAE2,#FCCB6B) border-box',\n\n  yellowTeal:\n    'linear-gradient(#000, #000) padding-box, linear-gradient(to right bottom, #94EAE2,#FCCB6B) border-box',\n});\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/types/mp4box/index.d.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\ndeclare module 'mp4box' {\n  export interface MP4MediaTrackEdit {\n    media_rate_fraction: number;\n    media_rate_integer: number;\n    media_time: number;\n    segment_duration: number;\n  }\n\n  export interface MP4MediaTrack {\n    id: number;\n    created: Date;\n    modified: Date;\n    movie_duration: number;\n    movie_timescale: number;\n    layer: number;\n    alternate_group: number;\n    volume: number;\n    track_width: number;\n    track_height: number;\n    timescale: number;\n    duration: number;\n    bitrate: number;\n    codec: string;\n    language: string;\n    nb_samples: number;\n    samples_duration: number;\n    edits: MP4MediaTrackEdit[];\n  }\n\n  export interface MP4VideoData {\n    width: number;\n    height: number;\n  }\n\n  export interface MP4VideoTrack extends MP4MediaTrack {\n    video: MP4VideoData;\n  }\n\n  export interface MP4AudioData {\n    sample_rate: number;\n    channel_count: number;\n    sample_size: number;\n  }\n\n  export interface MP4AudioTrack extends MP4MediaTrack {\n    audio: MP4AudioData;\n  }\n\n  export type MP4Track = MP4VideoTrack | MP4AudioTrack;\n\n  export interface MP4Info {\n    duration: number;\n    timescale: number;\n    fragment_duration: number;\n    isFragmented: boolean;\n    isProgressive: boolean;\n    hasIOD: boolean;\n    brands: string[];\n    created: Date;\n    modified: Date;\n    tracks: MP4Track[];\n    audioTracks: MP4AudioTrack[];\n    videoTracks: MP4VideoTrack[];\n    otherTracks: MP4VideoTrack[];\n  }\n\n  export interface MP4Sample {\n    alreadyRead: number;\n    chunk_index: number;\n    chunk_run_index: number;\n    cts: number;\n    data: Uint8Array;\n    degradation_priority: number;\n    depends_on: number;\n    description: unknown;\n    description_index: number;\n    dts: number;\n    duration: number;\n    has_redundancy: number;\n    is_depended_on: number;\n    is_leading: number;\n    is_sync: boolean;\n    number: number;\n    offset: number;\n    size: number;\n    timescale: number;\n    track_id: number;\n  }\n\n  export type MP4ArrayBuffer = ArrayBuffer & {fileStart: number};\n\n  export class DataStream {\n    static BIG_ENDIAN: boolean;\n    static LITTLE_ENDIAN: boolean;\n    buffer: ArrayBuffer;\n    constructor(\n      arrayBuffer?: ArrayBuffer,\n      byteOffset: number,\n      endianness: boolean,\n    ): void;\n  }\n\n  export interface Trak {\n    mdia?: {\n      minf?: {\n        stbl?: {\n          stsd?: {\n            entries: {\n              avcC?: {\n                write: (stream: DataStream) => void;\n              };\n              hvcC?: {\n                write: (stream: DataStream) => void;\n              };\n            }[];\n          };\n        };\n      };\n    };\n  }\n\n  export namespace BoxParser {\n    export class Box {\n      size?: number;\n      data?: Uint8Array;\n\n      constructor(type?: string, size?: number);\n\n      add(name: string): Box;\n      addBox(box: Box): Box;\n      addEntry(value: string, prop?: string): void;\n      write(stream: DataStream): void;\n      writeHeader(stream: DataStream, msg?: string): void;\n      computeSize(): void;\n    }\n\n    export class ContainerBox extends Box {}\n\n    export class avcCBox extends ContainerBox {}\n\n    export class hvcCBox extends ContainerBox {}\n\n    export class vpcCBox extends ContainerBox {}\n\n    export class av1CBox extends ContainerBox {}\n  }\n\n  export interface TrackOptions {\n    id?: number;\n    type?: string;\n    width?: number;\n    height?: number;\n    duration?: number;\n    layer?: number;\n    timescale?: number;\n    media_duration?: number;\n    language?: string;\n    hdlr?: string;\n\n    // video\n    avcDecoderConfigRecord?: BufferSource;\n\n    // audio\n    balance?: number;\n    channel_count?: number;\n    samplesize?: number;\n    samplerate?: number;\n\n    //captions\n    namespace?: string;\n    schema_location?: string;\n    auxiliary_mime_types?: string;\n\n    description?: BoxParser.Box;\n    description_boxes?: BoxParser.Box[];\n\n    default_sample_description_index_id?: number;\n    default_sample_duration?: number;\n    default_sample_size?: number;\n    default_sample_flags?: number;\n  }\n\n  export interface SampleOptions {\n    sample_description_index?: number;\n    duration?: number;\n    cts?: number;\n    dts?: number;\n    is_sync?: boolean;\n    is_leading?: number;\n    depends_on?: number;\n    is_depended_on?: number;\n    has_redundancy?: number;\n    degradation_priority?: number;\n  }\n\n  export interface Sample {\n    number: number;\n    track_id: number;\n    timescale: number;\n    description_index: number;\n    description: {\n      avcC?: BoxParser.avcCBox; // h.264\n      hvcC?: BoxParser.hvcCBox; // hevc\n      vpcC?: BoxParser.vpcCBox; // vp9\n      av1C?: BoxParser.av1CBox; // av1\n    };\n    data: ArrayBuffer;\n    size: number;\n    alreadyRead?: number;\n    duration: number;\n    cts: number;\n    dts: number;\n    is_sync: boolean;\n    is_leading?: number;\n    depends_on?: number;\n    is_depended_on?: number;\n    has_redundancy?: number;\n    degradation_priority?: number;\n    offset?: number;\n  }\n\n  export interface MP4File {\n    getBuffer(): MP4ArrayBuffer;\n    addTrack(options?: TrackOptions): number;\n    addSample(\n      track: number,\n      data: ArrayBuffer,\n      options?: SampleOptions,\n    ): Sample;\n    addSample(\n      trackID: number,\n      uint8: Uint8Array,\n      arg2: {duration: number; is_sync: boolean},\n    ): void;\n    onMoovStart?: () => void;\n    onReady?: (info: MP4Info) => void;\n    onError?: (e: string) => void;\n    onSamples?: (id: number, user: unknown, samples: MP4Sample[]) => unknown;\n    appendBuffer(data: MP4ArrayBuffer): number;\n    save(fileName: string): void;\n    start(): void;\n    stop(): void;\n    /**\n     * Indicates that the next samples to process (for extraction or\n     * segmentation) start at the given time (Number, in seconds) or at the\n     * time of the previous Random Access Point (if useRap is true, default\n     * is false). Returns the offset in the file of the next bytes to be\n     * provided via appendBuffer.\n     *\n     * @param time - Start at the given time (Number, in seconds)\n     * @param useRap - Random Access Point (if useRap is true, default is false)\n     * @returns Returns the offset in the file of the next bytes to be provided via appendBuffer.\n     */\n    seek: (time: number, useRap: boolean) => number;\n    flush(): void;\n    releaseUsedSamples(trackId: number, sampleNumber: number): void;\n    setExtractionOptions(\n      trackId: number,\n      user?: unknown,\n      options?: {nbSamples?: number; rapAlignment?: number},\n    ): void;\n    getTrackById(trackId: number): Trak;\n  }\n\n  export function createFile(): MP4File;\n\n  export {};\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/src/vite-env.d.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/// <reference types=\"vite/client\" />\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/tailwind.config.js",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport tailwindCSSTypography from '@tailwindcss/typography';\nimport daisyui from 'daisyui';\nimport * as daisyColorThemes from 'daisyui/src/theming/themes';\n\n/** @type {import('tailwindcss').Config} */\nexport default {\n  content: [\n    './index.html',\n    './src/**/*.{js,ts,jsx,tsx}',\n    'node_modules/daisyui/dist/**/*.js',\n    'node_modules/react-daisyui/dist/**/*.js',\n  ],\n\n  daisyui: {\n    styled: true,\n    themes: [\n      {\n        light: {\n          ...daisyColorThemes['[data-theme=light]'],\n          'base-100': '#FFFFFF',\n          'base-200': '#F1F4F7',\n          'base-300': '#DEE3E9',\n          primary: '#0064E0',\n          'primary-content': '#FFFFFF',\n          secondary: '#0F191E',\n          'secondary-content': '#FFFFFF',\n          accent: '#6441D2',\n          'accent-content': '#FFFFFF',\n          info: '#009B9B',\n          'info-content': '#FFFFFF',\n          success: '#0F9B14',\n          'success-content': '#FFFFFF',\n          warning: '#FA8719',\n          'warning-content': '#FFFFFF',\n          error: '#C80A28',\n          'error-content': '#FFFFFF',\n\n          '--rounded-box': '0.35rem', // border radius rounded-box utility class, used in card and other large boxes\n          '--rounded-btn': '0.35rem', // border radius rounded-btn utility class, used in buttons and similar element\n          '--rounded-badge': '1rem', // border radius rounded-badge utility class, used in badges and similar\n        },\n      },\n      'dark',\n    ],\n  },\n  theme: {\n    fontSize: {\n      xs: ['0.75rem', {lineHeight: '1.5'}],\n      sm: ['0.875rem', {lineHeight: '1.5'}],\n      base: ['1rem', {lineHeight: '1.5'}],\n      lg: ['1.125rem', {lineHeight: '1.2', fontWeight: 500}],\n      xl: ['1.25rem', {lineHeight: '1.2', fontWeight: 500}],\n      '2xl': [\n        '1.5rem',\n        {lineHeight: '1.2', fontWeight: 500, letterSpacing: '0.005rem'},\n      ],\n      '3xl': [\n        '2.25rem',\n        {lineHeight: '1.2', fontWeight: 500, letterSpacing: '0.01rem'},\n      ],\n      '4xl': [\n        '3rem',\n        {lineHeight: '1.2', fontWeight: 500, letterSpacing: '0.016rem'},\n      ],\n      '5xl': [\n        '4rem',\n        {lineHeight: '1.2', fontWeight: 400, letterSpacing: '0.016rem'},\n      ],\n      '6xl': [\n        '5rem',\n        {lineHeight: '1.2', fontWeight: 400, letterSpacing: '0.016rem'},\n      ],\n    },\n    extend: {\n      colors: {\n        graydark: {\n          50: '#f1f4f7',\n          100: '#DEE3E9',\n          200: '#CBD2D9',\n          300: '#A7B3BF',\n          400: '#8595A4',\n          500: '#667788',\n          600: '#465A69',\n          700: '#343845',\n          800: '#1A1C1F',\n          900: '#0F191E',\n        },\n      },\n      lineHeight: {\n        tight: 1.2,\n      },\n      backgroundImage: {\n        dot: 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAAXNSR0IArs4c6QAAABdJREFUGBljYGBg+A/FQAoTMGEKDUcRAATwAgFGIXEOAAAAAElFTkSuQmCC)',\n      },\n      keyframes: {\n        wiggle: {\n          '0%, 100%': {transform: 'rotate(-3deg)'},\n          '50%': {transform: 'rotate(3deg)'},\n        },\n      },\n      animation: {\n        wiggle: 'wiggle .25s ease-in-out',\n      },\n      typography: {\n        DEFAULT: {\n          css: {\n            maxWidth: '100%', // add required value here\n            a: {\n              textDecoration: 'none',\n            },\n          },\n        },\n      },\n    },\n  },\n  plugins: [tailwindCSSTypography, daisyui],\n};\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/tsconfig.json",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n{\n  \"compilerOptions\": {\n    \"target\": \"ES2020\",\n    \"useDefineForClassFields\": true,\n    \"lib\": [\"ES2020\", \"DOM\", \"DOM.Iterable\", \"webworker\"],\n    \"module\": \"ESNext\",\n    \"skipLibCheck\": true,\n\n    /* Bundler mode */\n    \"moduleResolution\": \"bundler\",\n    \"allowImportingTsExtensions\": true,\n    \"resolveJsonModule\": true,\n    \"isolatedModules\": true,\n    \"esModuleInterop\": true, // esModuleInterop true required for Jest\n    \"noEmit\": true,\n    \"jsx\": \"react-jsx\",\n\n    /* Linting */\n    \"strict\": true,\n    \"noUnusedLocals\": true,\n    \"noUnusedParameters\": true,\n    \"noFallthroughCasesInSwitch\": true,\n\n    \"baseUrl\": \"./src\",\n    \"paths\": {\n      \"mp4box\": [\"types/mp4box\"],\n      \"@/*\": [\"*\"]\n    }\n  },\n  \"include\": [\"src\"],\n  \"references\": [{\"path\": \"./tsconfig.node.json\"}]\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/tsconfig.node.json",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n{\n  \"compilerOptions\": {\n    \"composite\": true,\n    \"skipLibCheck\": true,\n    \"module\": \"ESNext\",\n    \"target\": \"ES2017\",\n    \"moduleResolution\": \"bundler\",\n    \"allowSyntheticDefaultImports\": true,\n    \"strictNullChecks\": true\n  },\n  \"include\": [\"vite.config.ts\", \"schemas\"]\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/demo/frontend/vite.config.ts",
    "content": "/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport react from '@vitejs/plugin-react';\nimport jotaiDebugLabel from 'jotai/babel/plugin-debug-label';\nimport jotaiReactRefresh from 'jotai/babel/plugin-react-refresh';\nimport path from 'path';\nimport {defineConfig} from 'vite';\nimport babel from 'vite-plugin-babel';\nimport relay from 'vite-plugin-relay';\nimport {stylexPlugin} from 'vite-plugin-stylex-dev';\n\nexport default defineConfig({\n  resolve: {\n    alias: {\n      '@': path.resolve(__dirname, './src'),\n    },\n  },\n  plugins: [\n    react({\n      babel: {\n        plugins: [jotaiDebugLabel, jotaiReactRefresh],\n      },\n    }),\n    stylexPlugin(),\n    relay,\n    babel(),\n  ],\n  worker: {\n    plugins: () => [relay],\n  },\n});\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/docker-compose.yaml",
    "content": "services:\n  frontend:\n    image: sam2/frontend\n    build:\n      context: ./demo/frontend\n      dockerfile: frontend.Dockerfile\n    ports:\n      - 7262:80\n\n  backend:\n    image: sam2/backend\n    build:\n      context: .\n      dockerfile: backend.Dockerfile\n    ports:\n      - 7263:5000\n    volumes:\n      - ./demo/data/:/data/:rw\n    environment:\n      - SERVER_ENVIRONMENT=DEV\n      - GUNICORN_WORKERS=1\n      # Inference API needs to have at least 2 threads to handle an incoming\n      # parallel cancel propagation request\n      - GUNICORN_THREADS=2\n      - GUNICORN_PORT=5000\n      - API_URL=http://localhost:7263\n      - DEFAULT_VIDEO_PATH=gallery/05_default_juggle.mp4\n      # # ffmpeg/video encode settings\n      - FFMPEG_NUM_THREADS=1\n      - VIDEO_ENCODE_CODEC=libx264\n      - VIDEO_ENCODE_CRF=23\n      - VIDEO_ENCODE_FPS=24\n      - VIDEO_ENCODE_MAX_WIDTH=1280\n      - VIDEO_ENCODE_MAX_HEIGHT=720\n      - VIDEO_ENCODE_VERBOSE=False\n    deploy:\n      resources:\n        reservations:\n          devices:\n            - driver: nvidia\n              count: 1\n              capabilities: [gpu]\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/pyproject.toml",
    "content": "[build-system]\nrequires = [\n    \"setuptools>=61.0\",  \n    \"torch>=2.3.1\",\n    ]\nbuild-backend = \"setuptools.build_meta\"\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom hydra import initialize_config_module\nfrom hydra.core.global_hydra import GlobalHydra\n\nif not GlobalHydra.instance().is_initialized():\n    initialize_config_module(\"sam2\", version_base=\"1.2\")\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/automatic_mask_generator.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n# Adapted from https://github.com/facebookresearch/segment-anything/blob/main/segment_anything/automatic_mask_generator.py\nfrom typing import Any, Dict, List, Optional, Tuple\n\nimport numpy as np\nimport torch\nfrom torchvision.ops.boxes import batched_nms, box_area  # type: ignore\n\nfrom sam2.modeling.sam2_base import SAM2Base\nfrom sam2.sam2_image_predictor import SAM2ImagePredictor\nfrom sam2.utils.amg import (\n    area_from_rle,\n    batch_iterator,\n    batched_mask_to_box,\n    box_xyxy_to_xywh,\n    build_all_layer_point_grids,\n    calculate_stability_score,\n    coco_encode_rle,\n    generate_crop_boxes,\n    is_box_near_crop_edge,\n    mask_to_rle_pytorch,\n    MaskData,\n    remove_small_regions,\n    rle_to_mask,\n    uncrop_boxes_xyxy,\n    uncrop_masks,\n    uncrop_points,\n)\n\n\nclass SAM2AutomaticMaskGenerator:\n    def __init__(\n        self,\n        model: SAM2Base,\n        points_per_side: Optional[int] = 32,\n        points_per_batch: int = 64,\n        pred_iou_thresh: float = 0.8,\n        stability_score_thresh: float = 0.95,\n        stability_score_offset: float = 1.0,\n        mask_threshold: float = 0.0,\n        box_nms_thresh: float = 0.7,\n        crop_n_layers: int = 0,\n        crop_nms_thresh: float = 0.7,\n        crop_overlap_ratio: float = 512 / 1500,\n        crop_n_points_downscale_factor: int = 1,\n        point_grids: Optional[List[np.ndarray]] = None,\n        min_mask_region_area: int = 0,\n        output_mode: str = \"binary_mask\",\n        use_m2m: bool = False,\n        multimask_output: bool = True,\n        **kwargs,\n    ) -> None:\n        \"\"\"\n        Using a SAM 2 model, generates masks for the entire image.\n        Generates a grid of point prompts over the image, then filters\n        low quality and duplicate masks. The default settings are chosen\n        for SAM 2 with a HieraL backbone.\n\n        Arguments:\n          model (Sam): The SAM 2 model to use for mask prediction.\n          points_per_side (int or None): The number of points to be sampled\n            along one side of the image. The total number of points is\n            points_per_side**2. If None, 'point_grids' must provide explicit\n            point sampling.\n          points_per_batch (int): Sets the number of points run simultaneously\n            by the model. Higher numbers may be faster but use more GPU memory.\n          pred_iou_thresh (float): A filtering threshold in [0,1], using the\n            model's predicted mask quality.\n          stability_score_thresh (float): A filtering threshold in [0,1], using\n            the stability of the mask under changes to the cutoff used to binarize\n            the model's mask predictions.\n          stability_score_offset (float): The amount to shift the cutoff when\n            calculated the stability score.\n          mask_threshold (float): Threshold for binarizing the mask logits\n          box_nms_thresh (float): The box IoU cutoff used by non-maximal\n            suppression to filter duplicate masks.\n          crop_n_layers (int): If >0, mask prediction will be run again on\n            crops of the image. Sets the number of layers to run, where each\n            layer has 2**i_layer number of image crops.\n          crop_nms_thresh (float): The box IoU cutoff used by non-maximal\n            suppression to filter duplicate masks between different crops.\n          crop_overlap_ratio (float): Sets the degree to which crops overlap.\n            In the first crop layer, crops will overlap by this fraction of\n            the image length. Later layers with more crops scale down this overlap.\n          crop_n_points_downscale_factor (int): The number of points-per-side\n            sampled in layer n is scaled down by crop_n_points_downscale_factor**n.\n          point_grids (list(np.ndarray) or None): A list over explicit grids\n            of points used for sampling, normalized to [0,1]. The nth grid in the\n            list is used in the nth crop layer. Exclusive with points_per_side.\n          min_mask_region_area (int): If >0, postprocessing will be applied\n            to remove disconnected regions and holes in masks with area smaller\n            than min_mask_region_area. Requires opencv.\n          output_mode (str): The form masks are returned in. Can be 'binary_mask',\n            'uncompressed_rle', or 'coco_rle'. 'coco_rle' requires pycocotools.\n            For large resolutions, 'binary_mask' may consume large amounts of\n            memory.\n          use_m2m (bool): Whether to add a one step refinement using previous mask predictions.\n          multimask_output (bool): Whether to output multimask at each point of the grid.\n        \"\"\"\n\n        assert (points_per_side is None) != (\n            point_grids is None\n        ), \"Exactly one of points_per_side or point_grid must be provided.\"\n        if points_per_side is not None:\n            self.point_grids = build_all_layer_point_grids(\n                points_per_side,\n                crop_n_layers,\n                crop_n_points_downscale_factor,\n            )\n        elif point_grids is not None:\n            self.point_grids = point_grids\n        else:\n            raise ValueError(\"Can't have both points_per_side and point_grid be None.\")\n\n        assert output_mode in [\n            \"binary_mask\",\n            \"uncompressed_rle\",\n            \"coco_rle\",\n        ], f\"Unknown output_mode {output_mode}.\"\n        if output_mode == \"coco_rle\":\n            try:\n                from pycocotools import mask as mask_utils  # type: ignore  # noqa: F401\n            except ImportError as e:\n                print(\"Please install pycocotools\")\n                raise e\n\n        self.predictor = SAM2ImagePredictor(\n            model,\n            max_hole_area=min_mask_region_area,\n            max_sprinkle_area=min_mask_region_area,\n        )\n        self.points_per_batch = points_per_batch\n        self.pred_iou_thresh = pred_iou_thresh\n        self.stability_score_thresh = stability_score_thresh\n        self.stability_score_offset = stability_score_offset\n        self.mask_threshold = mask_threshold\n        self.box_nms_thresh = box_nms_thresh\n        self.crop_n_layers = crop_n_layers\n        self.crop_nms_thresh = crop_nms_thresh\n        self.crop_overlap_ratio = crop_overlap_ratio\n        self.crop_n_points_downscale_factor = crop_n_points_downscale_factor\n        self.min_mask_region_area = min_mask_region_area\n        self.output_mode = output_mode\n        self.use_m2m = use_m2m\n        self.multimask_output = multimask_output\n\n    @classmethod\n    def from_pretrained(cls, model_id: str, **kwargs) -> \"SAM2AutomaticMaskGenerator\":\n        \"\"\"\n        Load a pretrained model from the Hugging Face hub.\n\n        Arguments:\n          model_id (str): The Hugging Face repository ID.\n          **kwargs: Additional arguments to pass to the model constructor.\n\n        Returns:\n          (SAM2AutomaticMaskGenerator): The loaded model.\n        \"\"\"\n        from sam2.build_sam import build_sam2_hf\n\n        sam_model = build_sam2_hf(model_id, **kwargs)\n        return cls(sam_model, **kwargs)\n\n    @torch.no_grad()\n    def generate(self, image: np.ndarray) -> List[Dict[str, Any]]:\n        \"\"\"\n        Generates masks for the given image.\n\n        Arguments:\n          image (np.ndarray): The image to generate masks for, in HWC uint8 format.\n\n        Returns:\n           list(dict(str, any)): A list over records for masks. Each record is\n             a dict containing the following keys:\n               segmentation (dict(str, any) or np.ndarray): The mask. If\n                 output_mode='binary_mask', is an array of shape HW. Otherwise,\n                 is a dictionary containing the RLE.\n               bbox (list(float)): The box around the mask, in XYWH format.\n               area (int): The area in pixels of the mask.\n               predicted_iou (float): The model's own prediction of the mask's\n                 quality. This is filtered by the pred_iou_thresh parameter.\n               point_coords (list(list(float))): The point coordinates input\n                 to the model to generate this mask.\n               stability_score (float): A measure of the mask's quality. This\n                 is filtered on using the stability_score_thresh parameter.\n               crop_box (list(float)): The crop of the image used to generate\n                 the mask, given in XYWH format.\n        \"\"\"\n\n        # Generate masks\n        mask_data = self._generate_masks(image)\n\n        # Encode masks\n        if self.output_mode == \"coco_rle\":\n            mask_data[\"segmentations\"] = [\n                coco_encode_rle(rle) for rle in mask_data[\"rles\"]\n            ]\n        elif self.output_mode == \"binary_mask\":\n            mask_data[\"segmentations\"] = [rle_to_mask(rle) for rle in mask_data[\"rles\"]]\n        else:\n            mask_data[\"segmentations\"] = mask_data[\"rles\"]\n\n        # Write mask records\n        curr_anns = []\n        for idx in range(len(mask_data[\"segmentations\"])):\n            ann = {\n                \"segmentation\": mask_data[\"segmentations\"][idx],\n                \"area\": area_from_rle(mask_data[\"rles\"][idx]),\n                \"bbox\": box_xyxy_to_xywh(mask_data[\"boxes\"][idx]).tolist(),\n                \"predicted_iou\": mask_data[\"iou_preds\"][idx].item(),\n                \"point_coords\": [mask_data[\"points\"][idx].tolist()],\n                \"stability_score\": mask_data[\"stability_score\"][idx].item(),\n                \"crop_box\": box_xyxy_to_xywh(mask_data[\"crop_boxes\"][idx]).tolist(),\n            }\n            curr_anns.append(ann)\n\n        return curr_anns\n\n    def _generate_masks(self, image: np.ndarray) -> MaskData:\n        orig_size = image.shape[:2]\n        crop_boxes, layer_idxs = generate_crop_boxes(\n            orig_size, self.crop_n_layers, self.crop_overlap_ratio\n        )\n\n        # Iterate over image crops\n        data = MaskData()\n        for crop_box, layer_idx in zip(crop_boxes, layer_idxs):\n            crop_data = self._process_crop(image, crop_box, layer_idx, orig_size)\n            data.cat(crop_data)\n\n        # Remove duplicate masks between crops\n        if len(crop_boxes) > 1:\n            # Prefer masks from smaller crops\n            scores = 1 / box_area(data[\"crop_boxes\"])\n            scores = scores.to(data[\"boxes\"].device)\n            keep_by_nms = batched_nms(\n                data[\"boxes\"].float(),\n                scores,\n                torch.zeros_like(data[\"boxes\"][:, 0]),  # categories\n                iou_threshold=self.crop_nms_thresh,\n            )\n            data.filter(keep_by_nms)\n        data.to_numpy()\n        return data\n\n    def _process_crop(\n        self,\n        image: np.ndarray,\n        crop_box: List[int],\n        crop_layer_idx: int,\n        orig_size: Tuple[int, ...],\n    ) -> MaskData:\n        # Crop the image and calculate embeddings\n        x0, y0, x1, y1 = crop_box\n        cropped_im = image[y0:y1, x0:x1, :]\n        cropped_im_size = cropped_im.shape[:2]\n        self.predictor.set_image(cropped_im)\n\n        # Get points for this crop\n        points_scale = np.array(cropped_im_size)[None, ::-1]\n        points_for_image = self.point_grids[crop_layer_idx] * points_scale\n\n        # Generate masks for this crop in batches\n        data = MaskData()\n        for (points,) in batch_iterator(self.points_per_batch, points_for_image):\n            batch_data = self._process_batch(\n                points, cropped_im_size, crop_box, orig_size, normalize=True\n            )\n            data.cat(batch_data)\n            del batch_data\n        self.predictor.reset_predictor()\n\n        # Remove duplicates within this crop.\n        keep_by_nms = batched_nms(\n            data[\"boxes\"].float(),\n            data[\"iou_preds\"],\n            torch.zeros_like(data[\"boxes\"][:, 0]),  # categories\n            iou_threshold=self.box_nms_thresh,\n        )\n        data.filter(keep_by_nms)\n\n        # Return to the original image frame\n        data[\"boxes\"] = uncrop_boxes_xyxy(data[\"boxes\"], crop_box)\n        data[\"points\"] = uncrop_points(data[\"points\"], crop_box)\n        data[\"crop_boxes\"] = torch.tensor([crop_box for _ in range(len(data[\"rles\"]))])\n\n        return data\n\n    def _process_batch(\n        self,\n        points: np.ndarray,\n        im_size: Tuple[int, ...],\n        crop_box: List[int],\n        orig_size: Tuple[int, ...],\n        normalize=False,\n    ) -> MaskData:\n        orig_h, orig_w = orig_size\n\n        # Run model on this batch\n        points = torch.as_tensor(\n            points, dtype=torch.float32, device=self.predictor.device\n        )\n        in_points = self.predictor._transforms.transform_coords(\n            points, normalize=normalize, orig_hw=im_size\n        )\n        in_labels = torch.ones(\n            in_points.shape[0], dtype=torch.int, device=in_points.device\n        )\n        masks, iou_preds, low_res_masks = self.predictor._predict(\n            in_points[:, None, :],\n            in_labels[:, None],\n            multimask_output=self.multimask_output,\n            return_logits=True,\n        )\n\n        # Serialize predictions and store in MaskData\n        data = MaskData(\n            masks=masks.flatten(0, 1),\n            iou_preds=iou_preds.flatten(0, 1),\n            points=points.repeat_interleave(masks.shape[1], dim=0),\n            low_res_masks=low_res_masks.flatten(0, 1),\n        )\n        del masks\n\n        if not self.use_m2m:\n            # Filter by predicted IoU\n            if self.pred_iou_thresh > 0.0:\n                keep_mask = data[\"iou_preds\"] > self.pred_iou_thresh\n                data.filter(keep_mask)\n\n            # Calculate and filter by stability score\n            data[\"stability_score\"] = calculate_stability_score(\n                data[\"masks\"], self.mask_threshold, self.stability_score_offset\n            )\n            if self.stability_score_thresh > 0.0:\n                keep_mask = data[\"stability_score\"] >= self.stability_score_thresh\n                data.filter(keep_mask)\n        else:\n            # One step refinement using previous mask predictions\n            in_points = self.predictor._transforms.transform_coords(\n                data[\"points\"], normalize=normalize, orig_hw=im_size\n            )\n            labels = torch.ones(\n                in_points.shape[0], dtype=torch.int, device=in_points.device\n            )\n            masks, ious = self.refine_with_m2m(\n                in_points, labels, data[\"low_res_masks\"], self.points_per_batch\n            )\n            data[\"masks\"] = masks.squeeze(1)\n            data[\"iou_preds\"] = ious.squeeze(1)\n\n            if self.pred_iou_thresh > 0.0:\n                keep_mask = data[\"iou_preds\"] > self.pred_iou_thresh\n                data.filter(keep_mask)\n\n            data[\"stability_score\"] = calculate_stability_score(\n                data[\"masks\"], self.mask_threshold, self.stability_score_offset\n            )\n            if self.stability_score_thresh > 0.0:\n                keep_mask = data[\"stability_score\"] >= self.stability_score_thresh\n                data.filter(keep_mask)\n\n        # Threshold masks and calculate boxes\n        data[\"masks\"] = data[\"masks\"] > self.mask_threshold\n        data[\"boxes\"] = batched_mask_to_box(data[\"masks\"])\n\n        # Filter boxes that touch crop boundaries\n        keep_mask = ~is_box_near_crop_edge(\n            data[\"boxes\"], crop_box, [0, 0, orig_w, orig_h]\n        )\n        if not torch.all(keep_mask):\n            data.filter(keep_mask)\n\n        # Compress to RLE\n        data[\"masks\"] = uncrop_masks(data[\"masks\"], crop_box, orig_h, orig_w)\n        data[\"rles\"] = mask_to_rle_pytorch(data[\"masks\"])\n        del data[\"masks\"]\n\n        return data\n\n    @staticmethod\n    def postprocess_small_regions(\n        mask_data: MaskData, min_area: int, nms_thresh: float\n    ) -> MaskData:\n        \"\"\"\n        Removes small disconnected regions and holes in masks, then reruns\n        box NMS to remove any new duplicates.\n\n        Edits mask_data in place.\n\n        Requires open-cv as a dependency.\n        \"\"\"\n        if len(mask_data[\"rles\"]) == 0:\n            return mask_data\n\n        # Filter small disconnected regions and holes\n        new_masks = []\n        scores = []\n        for rle in mask_data[\"rles\"]:\n            mask = rle_to_mask(rle)\n\n            mask, changed = remove_small_regions(mask, min_area, mode=\"holes\")\n            unchanged = not changed\n            mask, changed = remove_small_regions(mask, min_area, mode=\"islands\")\n            unchanged = unchanged and not changed\n\n            new_masks.append(torch.as_tensor(mask).unsqueeze(0))\n            # Give score=0 to changed masks and score=1 to unchanged masks\n            # so NMS will prefer ones that didn't need postprocessing\n            scores.append(float(unchanged))\n\n        # Recalculate boxes and remove any new duplicates\n        masks = torch.cat(new_masks, dim=0)\n        boxes = batched_mask_to_box(masks)\n        keep_by_nms = batched_nms(\n            boxes.float(),\n            torch.as_tensor(scores),\n            torch.zeros_like(boxes[:, 0]),  # categories\n            iou_threshold=nms_thresh,\n        )\n\n        # Only recalculate RLEs for masks that have changed\n        for i_mask in keep_by_nms:\n            if scores[i_mask] == 0.0:\n                mask_torch = masks[i_mask].unsqueeze(0)\n                mask_data[\"rles\"][i_mask] = mask_to_rle_pytorch(mask_torch)[0]\n                mask_data[\"boxes\"][i_mask] = boxes[i_mask]  # update res directly\n        mask_data.filter(keep_by_nms)\n\n        return mask_data\n\n    def refine_with_m2m(self, points, point_labels, low_res_masks, points_per_batch):\n        new_masks = []\n        new_iou_preds = []\n\n        for cur_points, cur_point_labels, low_res_mask in batch_iterator(\n            points_per_batch, points, point_labels, low_res_masks\n        ):\n            best_masks, best_iou_preds, _ = self.predictor._predict(\n                cur_points[:, None, :],\n                cur_point_labels[:, None],\n                mask_input=low_res_mask[:, None, :],\n                multimask_output=False,\n                return_logits=True,\n            )\n            new_masks.append(best_masks)\n            new_iou_preds.append(best_iou_preds)\n        masks = torch.cat(new_masks, dim=0)\n        return masks, torch.cat(new_iou_preds, dim=0)\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/build_sam.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport logging\nimport os\n\nimport torch\nfrom hydra import compose\nfrom hydra.utils import instantiate\nfrom omegaconf import OmegaConf\n\nimport sam2\n\n# Check if the user is running Python from the parent directory of the sam2 repo\n# (i.e. the directory where this repo is cloned into) -- this is not supported since\n# it could shadow the sam2 package and cause issues.\nif os.path.isdir(os.path.join(sam2.__path__[0], \"sam2\")):\n    # If the user has \"sam2/sam2\" in their path, they are likey importing the repo itself\n    # as \"sam2\" rather than importing the \"sam2\" python package (i.e. \"sam2/sam2\" directory).\n    # This typically happens because the user is running Python from the parent directory\n    # that contains the sam2 repo they cloned.\n    raise RuntimeError(\n        \"You're likely running Python from the parent directory of the sam2 repository \"\n        \"(i.e. the directory where https://github.com/facebookresearch/sam2 is cloned into). \"\n        \"This is not supported since the `sam2` Python package could be shadowed by the \"\n        \"repository name (the repository is also named `sam2` and contains the Python package \"\n        \"in `sam2/sam2`). Please run Python from another directory (e.g. from the repo dir \"\n        \"rather than its parent dir, or from your home directory) after installing SAM 2.\"\n    )\n\n\nHF_MODEL_ID_TO_FILENAMES = {\n    \"facebook/sam2-hiera-tiny\": (\n        \"configs/sam2/sam2_hiera_t.yaml\",\n        \"sam2_hiera_tiny.pt\",\n    ),\n    \"facebook/sam2-hiera-small\": (\n        \"configs/sam2/sam2_hiera_s.yaml\",\n        \"sam2_hiera_small.pt\",\n    ),\n    \"facebook/sam2-hiera-base-plus\": (\n        \"configs/sam2/sam2_hiera_b+.yaml\",\n        \"sam2_hiera_base_plus.pt\",\n    ),\n    \"facebook/sam2-hiera-large\": (\n        \"configs/sam2/sam2_hiera_l.yaml\",\n        \"sam2_hiera_large.pt\",\n    ),\n    \"facebook/sam2.1-hiera-tiny\": (\n        \"configs/sam2.1/sam2.1_hiera_t.yaml\",\n        \"sam2.1_hiera_tiny.pt\",\n    ),\n    \"facebook/sam2.1-hiera-small\": (\n        \"configs/sam2.1/sam2.1_hiera_s.yaml\",\n        \"sam2.1_hiera_small.pt\",\n    ),\n    \"facebook/sam2.1-hiera-base-plus\": (\n        \"configs/sam2.1/sam2.1_hiera_b+.yaml\",\n        \"sam2.1_hiera_base_plus.pt\",\n    ),\n    \"facebook/sam2.1-hiera-large\": (\n        \"configs/sam2.1/sam2.1_hiera_l.yaml\",\n        \"sam2.1_hiera_large.pt\",\n    ),\n}\n\n\ndef build_sam2(\n    config_file,\n    ckpt_path=None,\n    device=\"cuda\",\n    mode=\"eval\",\n    hydra_overrides_extra=[],\n    apply_postprocessing=True,\n    **kwargs,\n):\n\n    if apply_postprocessing:\n        hydra_overrides_extra = hydra_overrides_extra.copy()\n        hydra_overrides_extra += [\n            # dynamically fall back to multi-mask if the single mask is not stable\n            \"++model.sam_mask_decoder_extra_args.dynamic_multimask_via_stability=true\",\n            \"++model.sam_mask_decoder_extra_args.dynamic_multimask_stability_delta=0.05\",\n            \"++model.sam_mask_decoder_extra_args.dynamic_multimask_stability_thresh=0.98\",\n        ]\n    # Read config and init model\n    cfg = compose(config_name=config_file, overrides=hydra_overrides_extra)\n    OmegaConf.resolve(cfg)\n    model = instantiate(cfg.model, _recursive_=True)\n    _load_checkpoint(model, ckpt_path)\n    model = model.to(device)\n    if mode == \"eval\":\n        model.eval()\n    return model\n\n\ndef build_sam2_video_predictor(\n    config_file,\n    ckpt_path=None,\n    device=\"cuda\",\n    mode=\"eval\",\n    hydra_overrides_extra=[],\n    apply_postprocessing=True,\n    **kwargs,\n):\n    hydra_overrides = [\n        \"++model._target_=sam2.sam2_video_predictor.SAM2VideoPredictor\",\n    ]\n    if apply_postprocessing:\n        hydra_overrides_extra = hydra_overrides_extra.copy()\n        hydra_overrides_extra += [\n            # dynamically fall back to multi-mask if the single mask is not stable\n            \"++model.sam_mask_decoder_extra_args.dynamic_multimask_via_stability=true\",\n            \"++model.sam_mask_decoder_extra_args.dynamic_multimask_stability_delta=0.05\",\n            \"++model.sam_mask_decoder_extra_args.dynamic_multimask_stability_thresh=0.98\",\n            # the sigmoid mask logits on interacted frames with clicks in the memory encoder so that the encoded masks are exactly as what users see from clicking\n            \"++model.binarize_mask_from_pts_for_mem_enc=true\",\n            # fill small holes in the low-res masks up to `fill_hole_area` (before resizing them to the original video resolution)\n            \"++model.fill_hole_area=8\",\n        ]\n    hydra_overrides.extend(hydra_overrides_extra)\n\n    # Read config and init model\n    cfg = compose(config_name=config_file, overrides=hydra_overrides)\n    OmegaConf.resolve(cfg)\n    model = instantiate(cfg.model, _recursive_=True)\n    _load_checkpoint(model, ckpt_path)\n    model = model.to(device)\n    if mode == \"eval\":\n        model.eval()\n    return model\n\n\ndef _hf_download(model_id):\n    from huggingface_hub import hf_hub_download\n\n    config_name, checkpoint_name = HF_MODEL_ID_TO_FILENAMES[model_id]\n    ckpt_path = hf_hub_download(repo_id=model_id, filename=checkpoint_name)\n    return config_name, ckpt_path\n\n\ndef build_sam2_hf(model_id, **kwargs):\n    config_name, ckpt_path = _hf_download(model_id)\n    return build_sam2(config_file=config_name, ckpt_path=ckpt_path, **kwargs)\n\n\ndef build_sam2_video_predictor_hf(model_id, **kwargs):\n    config_name, ckpt_path = _hf_download(model_id)\n    return build_sam2_video_predictor(\n        config_file=config_name, ckpt_path=ckpt_path, **kwargs\n    )\n\n\ndef _load_checkpoint(model, ckpt_path):\n    if ckpt_path is not None:\n        sd = torch.load(ckpt_path, map_location=\"cpu\", weights_only=True)[\"model\"]\n        missing_keys, unexpected_keys = model.load_state_dict(sd)\n        if missing_keys:\n            logging.error(missing_keys)\n            raise RuntimeError()\n        if unexpected_keys:\n            logging.error(unexpected_keys)\n            raise RuntimeError()\n        logging.info(\"Loaded checkpoint sucessfully\")\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/configs/sam2/sam2_hiera_b+.yaml",
    "content": "# @package _global_\n\n# Model\nmodel:\n  _target_: sam2.modeling.sam2_base.SAM2Base\n  image_encoder:\n    _target_: sam2.modeling.backbones.image_encoder.ImageEncoder\n    scalp: 1\n    trunk:\n      _target_: sam2.modeling.backbones.hieradet.Hiera\n      embed_dim: 112\n      num_heads: 2\n    neck:\n      _target_: sam2.modeling.backbones.image_encoder.FpnNeck\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 256\n        normalize: true\n        scale: null\n        temperature: 10000\n      d_model: 256\n      backbone_channel_list: [896, 448, 224, 112]\n      fpn_top_down_levels: [2, 3]  # output level 0 and 1 directly use the backbone features\n      fpn_interp_model: nearest\n\n  memory_attention:\n    _target_: sam2.modeling.memory_attention.MemoryAttention\n    d_model: 256\n    pos_enc_at_input: true\n    layer:\n      _target_: sam2.modeling.memory_attention.MemoryAttentionLayer\n      activation: relu\n      dim_feedforward: 2048\n      dropout: 0.1\n      pos_enc_at_attn: false\n      self_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n      d_model: 256\n      pos_enc_at_cross_attn_keys: true\n      pos_enc_at_cross_attn_queries: false\n      cross_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        rope_k_repeat: True\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n        kv_in_dim: 64\n    num_layers: 4\n\n  memory_encoder:\n      _target_: sam2.modeling.memory_encoder.MemoryEncoder\n      out_dim: 64\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 64\n        normalize: true\n        scale: null\n        temperature: 10000\n      mask_downsampler:\n        _target_: sam2.modeling.memory_encoder.MaskDownSampler\n        kernel_size: 3\n        stride: 2\n        padding: 1\n      fuser:\n        _target_: sam2.modeling.memory_encoder.Fuser\n        layer:\n          _target_: sam2.modeling.memory_encoder.CXBlock\n          dim: 256\n          kernel_size: 7\n          padding: 3\n          layer_scale_init_value: 1e-6\n          use_dwconv: True  # depth-wise convs\n        num_layers: 2\n\n  num_maskmem: 7\n  image_size: 1024\n  # apply scaled sigmoid on mask logits for memory encoder, and directly feed input mask as output mask\n  sigmoid_scale_for_mem_enc: 20.0\n  sigmoid_bias_for_mem_enc: -10.0\n  use_mask_input_as_output_without_sam: true\n  # Memory\n  directly_add_no_mem_embed: true\n  # use high-resolution feature map in the SAM mask decoder\n  use_high_res_features_in_sam: true\n  # output 3 masks on the first click on initial conditioning frames\n  multimask_output_in_sam: true\n  # SAM heads\n  iou_prediction_use_sigmoid: True\n  # cross-attend to object pointers from other frames (based on SAM output tokens) in the encoder\n  use_obj_ptrs_in_encoder: true\n  add_tpos_enc_to_obj_ptrs: false\n  only_obj_ptrs_in_the_past_for_eval: true\n  # object occlusion prediction\n  pred_obj_scores: true\n  pred_obj_scores_mlp: true\n  fixed_no_obj_ptr: true\n  # multimask tracking settings\n  multimask_output_for_tracking: true\n  use_multimask_token_for_obj_ptr: true\n  multimask_min_pt_num: 0\n  multimask_max_pt_num: 1\n  use_mlp_for_obj_ptr_proj: true\n  # Compilation flag\n  compile_image_encoder: False\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/configs/sam2/sam2_hiera_l.yaml",
    "content": "# @package _global_\n\n# Model\nmodel:\n  _target_: sam2.modeling.sam2_base.SAM2Base\n  image_encoder:\n    _target_: sam2.modeling.backbones.image_encoder.ImageEncoder\n    scalp: 1\n    trunk:\n      _target_: sam2.modeling.backbones.hieradet.Hiera\n      embed_dim: 144\n      num_heads: 2\n      stages: [2, 6, 36, 4]\n      global_att_blocks: [23, 33, 43]\n      window_pos_embed_bkg_spatial_size: [7, 7]\n      window_spec: [8, 4, 16, 8]\n    neck:\n      _target_: sam2.modeling.backbones.image_encoder.FpnNeck\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 256\n        normalize: true\n        scale: null\n        temperature: 10000\n      d_model: 256\n      backbone_channel_list: [1152, 576, 288, 144]\n      fpn_top_down_levels: [2, 3]  # output level 0 and 1 directly use the backbone features\n      fpn_interp_model: nearest\n\n  memory_attention:\n    _target_: sam2.modeling.memory_attention.MemoryAttention\n    d_model: 256\n    pos_enc_at_input: true\n    layer:\n      _target_: sam2.modeling.memory_attention.MemoryAttentionLayer\n      activation: relu\n      dim_feedforward: 2048\n      dropout: 0.1\n      pos_enc_at_attn: false\n      self_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n      d_model: 256\n      pos_enc_at_cross_attn_keys: true\n      pos_enc_at_cross_attn_queries: false\n      cross_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        rope_k_repeat: True\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n        kv_in_dim: 64\n    num_layers: 4\n\n  memory_encoder:\n      _target_: sam2.modeling.memory_encoder.MemoryEncoder\n      out_dim: 64\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 64\n        normalize: true\n        scale: null\n        temperature: 10000\n      mask_downsampler:\n        _target_: sam2.modeling.memory_encoder.MaskDownSampler\n        kernel_size: 3\n        stride: 2\n        padding: 1\n      fuser:\n        _target_: sam2.modeling.memory_encoder.Fuser\n        layer:\n          _target_: sam2.modeling.memory_encoder.CXBlock\n          dim: 256\n          kernel_size: 7\n          padding: 3\n          layer_scale_init_value: 1e-6\n          use_dwconv: True  # depth-wise convs\n        num_layers: 2\n\n  num_maskmem: 7\n  image_size: 1024\n  # apply scaled sigmoid on mask logits for memory encoder, and directly feed input mask as output mask\n  sigmoid_scale_for_mem_enc: 20.0\n  sigmoid_bias_for_mem_enc: -10.0\n  use_mask_input_as_output_without_sam: true\n  # Memory\n  directly_add_no_mem_embed: true\n  # use high-resolution feature map in the SAM mask decoder\n  use_high_res_features_in_sam: true\n  # output 3 masks on the first click on initial conditioning frames\n  multimask_output_in_sam: true\n  # SAM heads\n  iou_prediction_use_sigmoid: True\n  # cross-attend to object pointers from other frames (based on SAM output tokens) in the encoder\n  use_obj_ptrs_in_encoder: true\n  add_tpos_enc_to_obj_ptrs: false\n  only_obj_ptrs_in_the_past_for_eval: true\n  # object occlusion prediction\n  pred_obj_scores: true\n  pred_obj_scores_mlp: true\n  fixed_no_obj_ptr: true\n  # multimask tracking settings\n  multimask_output_for_tracking: true\n  use_multimask_token_for_obj_ptr: true\n  multimask_min_pt_num: 0\n  multimask_max_pt_num: 1\n  use_mlp_for_obj_ptr_proj: true\n  # Compilation flag\n  compile_image_encoder: False\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/configs/sam2/sam2_hiera_s.yaml",
    "content": "# @package _global_\n\n# Model\nmodel:\n  _target_: sam2.modeling.sam2_base.SAM2Base\n  image_encoder:\n    _target_: sam2.modeling.backbones.image_encoder.ImageEncoder\n    scalp: 1\n    trunk:\n      _target_: sam2.modeling.backbones.hieradet.Hiera\n      embed_dim: 96\n      num_heads: 1\n      stages: [1, 2, 11, 2]\n      global_att_blocks: [7, 10, 13]\n      window_pos_embed_bkg_spatial_size: [7, 7]\n    neck:\n      _target_: sam2.modeling.backbones.image_encoder.FpnNeck\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 256\n        normalize: true\n        scale: null\n        temperature: 10000\n      d_model: 256\n      backbone_channel_list: [768, 384, 192, 96]\n      fpn_top_down_levels: [2, 3]  # output level 0 and 1 directly use the backbone features\n      fpn_interp_model: nearest\n\n  memory_attention:\n    _target_: sam2.modeling.memory_attention.MemoryAttention\n    d_model: 256\n    pos_enc_at_input: true\n    layer:\n      _target_: sam2.modeling.memory_attention.MemoryAttentionLayer\n      activation: relu\n      dim_feedforward: 2048\n      dropout: 0.1\n      pos_enc_at_attn: false\n      self_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n      d_model: 256\n      pos_enc_at_cross_attn_keys: true\n      pos_enc_at_cross_attn_queries: false\n      cross_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        rope_k_repeat: True\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n        kv_in_dim: 64\n    num_layers: 4\n\n  memory_encoder:\n      _target_: sam2.modeling.memory_encoder.MemoryEncoder\n      out_dim: 64\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 64\n        normalize: true\n        scale: null\n        temperature: 10000\n      mask_downsampler:\n        _target_: sam2.modeling.memory_encoder.MaskDownSampler\n        kernel_size: 3\n        stride: 2\n        padding: 1\n      fuser:\n        _target_: sam2.modeling.memory_encoder.Fuser\n        layer:\n          _target_: sam2.modeling.memory_encoder.CXBlock\n          dim: 256\n          kernel_size: 7\n          padding: 3\n          layer_scale_init_value: 1e-6\n          use_dwconv: True  # depth-wise convs\n        num_layers: 2\n\n  num_maskmem: 7\n  image_size: 1024\n  # apply scaled sigmoid on mask logits for memory encoder, and directly feed input mask as output mask\n  sigmoid_scale_for_mem_enc: 20.0\n  sigmoid_bias_for_mem_enc: -10.0\n  use_mask_input_as_output_without_sam: true\n  # Memory\n  directly_add_no_mem_embed: true\n  # use high-resolution feature map in the SAM mask decoder\n  use_high_res_features_in_sam: true\n  # output 3 masks on the first click on initial conditioning frames\n  multimask_output_in_sam: true\n  # SAM heads\n  iou_prediction_use_sigmoid: True\n  # cross-attend to object pointers from other frames (based on SAM output tokens) in the encoder\n  use_obj_ptrs_in_encoder: true\n  add_tpos_enc_to_obj_ptrs: false\n  only_obj_ptrs_in_the_past_for_eval: true\n  # object occlusion prediction\n  pred_obj_scores: true\n  pred_obj_scores_mlp: true\n  fixed_no_obj_ptr: true\n  # multimask tracking settings\n  multimask_output_for_tracking: true\n  use_multimask_token_for_obj_ptr: true\n  multimask_min_pt_num: 0\n  multimask_max_pt_num: 1\n  use_mlp_for_obj_ptr_proj: true\n  # Compilation flag\n  compile_image_encoder: False\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/configs/sam2/sam2_hiera_t.yaml",
    "content": "# @package _global_\n\n# Model\nmodel:\n  _target_: sam2.modeling.sam2_base.SAM2Base\n  image_encoder:\n    _target_: sam2.modeling.backbones.image_encoder.ImageEncoder\n    scalp: 1\n    trunk:\n      _target_: sam2.modeling.backbones.hieradet.Hiera\n      embed_dim: 96\n      num_heads: 1\n      stages: [1, 2, 7, 2]\n      global_att_blocks: [5, 7, 9]\n      window_pos_embed_bkg_spatial_size: [7, 7]\n    neck:\n      _target_: sam2.modeling.backbones.image_encoder.FpnNeck\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 256\n        normalize: true\n        scale: null\n        temperature: 10000\n      d_model: 256\n      backbone_channel_list: [768, 384, 192, 96]\n      fpn_top_down_levels: [2, 3]  # output level 0 and 1 directly use the backbone features\n      fpn_interp_model: nearest\n\n  memory_attention:\n    _target_: sam2.modeling.memory_attention.MemoryAttention\n    d_model: 256\n    pos_enc_at_input: true\n    layer:\n      _target_: sam2.modeling.memory_attention.MemoryAttentionLayer\n      activation: relu\n      dim_feedforward: 2048\n      dropout: 0.1\n      pos_enc_at_attn: false\n      self_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n      d_model: 256\n      pos_enc_at_cross_attn_keys: true\n      pos_enc_at_cross_attn_queries: false\n      cross_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        rope_k_repeat: True\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n        kv_in_dim: 64\n    num_layers: 4\n\n  memory_encoder:\n      _target_: sam2.modeling.memory_encoder.MemoryEncoder\n      out_dim: 64\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 64\n        normalize: true\n        scale: null\n        temperature: 10000\n      mask_downsampler:\n        _target_: sam2.modeling.memory_encoder.MaskDownSampler\n        kernel_size: 3\n        stride: 2\n        padding: 1\n      fuser:\n        _target_: sam2.modeling.memory_encoder.Fuser\n        layer:\n          _target_: sam2.modeling.memory_encoder.CXBlock\n          dim: 256\n          kernel_size: 7\n          padding: 3\n          layer_scale_init_value: 1e-6\n          use_dwconv: True  # depth-wise convs\n        num_layers: 2\n\n  num_maskmem: 7\n  image_size: 1024\n  # apply scaled sigmoid on mask logits for memory encoder, and directly feed input mask as output mask\n  # SAM decoder\n  sigmoid_scale_for_mem_enc: 20.0\n  sigmoid_bias_for_mem_enc: -10.0\n  use_mask_input_as_output_without_sam: true\n  # Memory\n  directly_add_no_mem_embed: true\n  # use high-resolution feature map in the SAM mask decoder\n  use_high_res_features_in_sam: true\n  # output 3 masks on the first click on initial conditioning frames\n  multimask_output_in_sam: true\n  # SAM heads\n  iou_prediction_use_sigmoid: True\n  # cross-attend to object pointers from other frames (based on SAM output tokens) in the encoder\n  use_obj_ptrs_in_encoder: true\n  add_tpos_enc_to_obj_ptrs: false\n  only_obj_ptrs_in_the_past_for_eval: true\n  # object occlusion prediction\n  pred_obj_scores: true\n  pred_obj_scores_mlp: true\n  fixed_no_obj_ptr: true\n  # multimask tracking settings\n  multimask_output_for_tracking: true\n  use_multimask_token_for_obj_ptr: true\n  multimask_min_pt_num: 0\n  multimask_max_pt_num: 1\n  use_mlp_for_obj_ptr_proj: true\n  # Compilation flag\n  # HieraT does not currently support compilation, should always be set to False\n  compile_image_encoder: False\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/configs/sam2.1/sam2.1_hiera_b+.yaml",
    "content": "# @package _global_\n\n# Model\nmodel:\n  _target_: sam2.modeling.sam2_base.SAM2Base\n  image_encoder:\n    _target_: sam2.modeling.backbones.image_encoder.ImageEncoder\n    scalp: 1\n    trunk:\n      _target_: sam2.modeling.backbones.hieradet.Hiera\n      embed_dim: 112\n      num_heads: 2\n    neck:\n      _target_: sam2.modeling.backbones.image_encoder.FpnNeck\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 256\n        normalize: true\n        scale: null\n        temperature: 10000\n      d_model: 256\n      backbone_channel_list: [896, 448, 224, 112]\n      fpn_top_down_levels: [2, 3]  # output level 0 and 1 directly use the backbone features\n      fpn_interp_model: nearest\n\n  memory_attention:\n    _target_: sam2.modeling.memory_attention.MemoryAttention\n    d_model: 256\n    pos_enc_at_input: true\n    layer:\n      _target_: sam2.modeling.memory_attention.MemoryAttentionLayer\n      activation: relu\n      dim_feedforward: 2048\n      dropout: 0.1\n      pos_enc_at_attn: false\n      self_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n      d_model: 256\n      pos_enc_at_cross_attn_keys: true\n      pos_enc_at_cross_attn_queries: false\n      cross_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        rope_k_repeat: True\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n        kv_in_dim: 64\n    num_layers: 4\n\n  memory_encoder:\n      _target_: sam2.modeling.memory_encoder.MemoryEncoder\n      out_dim: 64\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 64\n        normalize: true\n        scale: null\n        temperature: 10000\n      mask_downsampler:\n        _target_: sam2.modeling.memory_encoder.MaskDownSampler\n        kernel_size: 3\n        stride: 2\n        padding: 1\n      fuser:\n        _target_: sam2.modeling.memory_encoder.Fuser\n        layer:\n          _target_: sam2.modeling.memory_encoder.CXBlock\n          dim: 256\n          kernel_size: 7\n          padding: 3\n          layer_scale_init_value: 1e-6\n          use_dwconv: True  # depth-wise convs\n        num_layers: 2\n\n  num_maskmem: 7\n  image_size: 1024\n  # apply scaled sigmoid on mask logits for memory encoder, and directly feed input mask as output mask\n  sigmoid_scale_for_mem_enc: 20.0\n  sigmoid_bias_for_mem_enc: -10.0\n  use_mask_input_as_output_without_sam: true\n  # Memory\n  directly_add_no_mem_embed: true\n  no_obj_embed_spatial: true\n  # use high-resolution feature map in the SAM mask decoder\n  use_high_res_features_in_sam: true\n  # output 3 masks on the first click on initial conditioning frames\n  multimask_output_in_sam: true\n  # SAM heads\n  iou_prediction_use_sigmoid: True\n  # cross-attend to object pointers from other frames (based on SAM output tokens) in the encoder\n  use_obj_ptrs_in_encoder: true\n  add_tpos_enc_to_obj_ptrs: true\n  proj_tpos_enc_in_obj_ptrs: true\n  use_signed_tpos_enc_to_obj_ptrs: true\n  only_obj_ptrs_in_the_past_for_eval: true\n  # object occlusion prediction\n  pred_obj_scores: true\n  pred_obj_scores_mlp: true\n  fixed_no_obj_ptr: true\n  # multimask tracking settings\n  multimask_output_for_tracking: true\n  use_multimask_token_for_obj_ptr: true\n  multimask_min_pt_num: 0\n  multimask_max_pt_num: 1\n  use_mlp_for_obj_ptr_proj: true\n  # Compilation flag\n  compile_image_encoder: False\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/configs/sam2.1/sam2.1_hiera_l.yaml",
    "content": "# @package _global_\n\n# Model\nmodel:\n  _target_: sam2.modeling.sam2_base.SAM2Base\n  image_encoder:\n    _target_: sam2.modeling.backbones.image_encoder.ImageEncoder\n    scalp: 1\n    trunk:\n      _target_: sam2.modeling.backbones.hieradet.Hiera\n      embed_dim: 144\n      num_heads: 2\n      stages: [2, 6, 36, 4]\n      global_att_blocks: [23, 33, 43]\n      window_pos_embed_bkg_spatial_size: [7, 7]\n      window_spec: [8, 4, 16, 8]\n    neck:\n      _target_: sam2.modeling.backbones.image_encoder.FpnNeck\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 256\n        normalize: true\n        scale: null\n        temperature: 10000\n      d_model: 256\n      backbone_channel_list: [1152, 576, 288, 144]\n      fpn_top_down_levels: [2, 3]  # output level 0 and 1 directly use the backbone features\n      fpn_interp_model: nearest\n\n  memory_attention:\n    _target_: sam2.modeling.memory_attention.MemoryAttention\n    d_model: 256\n    pos_enc_at_input: true\n    layer:\n      _target_: sam2.modeling.memory_attention.MemoryAttentionLayer\n      activation: relu\n      dim_feedforward: 2048\n      dropout: 0.1\n      pos_enc_at_attn: false\n      self_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n      d_model: 256\n      pos_enc_at_cross_attn_keys: true\n      pos_enc_at_cross_attn_queries: false\n      cross_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        rope_k_repeat: True\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n        kv_in_dim: 64\n    num_layers: 4\n\n  memory_encoder:\n      _target_: sam2.modeling.memory_encoder.MemoryEncoder\n      out_dim: 64\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 64\n        normalize: true\n        scale: null\n        temperature: 10000\n      mask_downsampler:\n        _target_: sam2.modeling.memory_encoder.MaskDownSampler\n        kernel_size: 3\n        stride: 2\n        padding: 1\n      fuser:\n        _target_: sam2.modeling.memory_encoder.Fuser\n        layer:\n          _target_: sam2.modeling.memory_encoder.CXBlock\n          dim: 256\n          kernel_size: 7\n          padding: 3\n          layer_scale_init_value: 1e-6\n          use_dwconv: True  # depth-wise convs\n        num_layers: 2\n\n  num_maskmem: 7\n  image_size: 1024\n  # apply scaled sigmoid on mask logits for memory encoder, and directly feed input mask as output mask\n  sigmoid_scale_for_mem_enc: 20.0\n  sigmoid_bias_for_mem_enc: -10.0\n  use_mask_input_as_output_without_sam: true\n  # Memory\n  directly_add_no_mem_embed: true\n  no_obj_embed_spatial: true\n  # use high-resolution feature map in the SAM mask decoder\n  use_high_res_features_in_sam: true\n  # output 3 masks on the first click on initial conditioning frames\n  multimask_output_in_sam: true\n  # SAM heads\n  iou_prediction_use_sigmoid: True\n  # cross-attend to object pointers from other frames (based on SAM output tokens) in the encoder\n  use_obj_ptrs_in_encoder: true\n  add_tpos_enc_to_obj_ptrs: true\n  proj_tpos_enc_in_obj_ptrs: true\n  use_signed_tpos_enc_to_obj_ptrs: true\n  only_obj_ptrs_in_the_past_for_eval: true\n  # object occlusion prediction\n  pred_obj_scores: true\n  pred_obj_scores_mlp: true\n  fixed_no_obj_ptr: true\n  # multimask tracking settings\n  multimask_output_for_tracking: true\n  use_multimask_token_for_obj_ptr: true\n  multimask_min_pt_num: 0\n  multimask_max_pt_num: 1\n  use_mlp_for_obj_ptr_proj: true\n  # Compilation flag\n  compile_image_encoder: False\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/configs/sam2.1/sam2.1_hiera_s.yaml",
    "content": "# @package _global_\n\n# Model\nmodel:\n  _target_: sam2.modeling.sam2_base.SAM2Base\n  image_encoder:\n    _target_: sam2.modeling.backbones.image_encoder.ImageEncoder\n    scalp: 1\n    trunk:\n      _target_: sam2.modeling.backbones.hieradet.Hiera\n      embed_dim: 96\n      num_heads: 1\n      stages: [1, 2, 11, 2]\n      global_att_blocks: [7, 10, 13]\n      window_pos_embed_bkg_spatial_size: [7, 7]\n    neck:\n      _target_: sam2.modeling.backbones.image_encoder.FpnNeck\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 256\n        normalize: true\n        scale: null\n        temperature: 10000\n      d_model: 256\n      backbone_channel_list: [768, 384, 192, 96]\n      fpn_top_down_levels: [2, 3]  # output level 0 and 1 directly use the backbone features\n      fpn_interp_model: nearest\n\n  memory_attention:\n    _target_: sam2.modeling.memory_attention.MemoryAttention\n    d_model: 256\n    pos_enc_at_input: true\n    layer:\n      _target_: sam2.modeling.memory_attention.MemoryAttentionLayer\n      activation: relu\n      dim_feedforward: 2048\n      dropout: 0.1\n      pos_enc_at_attn: false\n      self_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n      d_model: 256\n      pos_enc_at_cross_attn_keys: true\n      pos_enc_at_cross_attn_queries: false\n      cross_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        rope_k_repeat: True\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n        kv_in_dim: 64\n    num_layers: 4\n\n  memory_encoder:\n      _target_: sam2.modeling.memory_encoder.MemoryEncoder\n      out_dim: 64\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 64\n        normalize: true\n        scale: null\n        temperature: 10000\n      mask_downsampler:\n        _target_: sam2.modeling.memory_encoder.MaskDownSampler\n        kernel_size: 3\n        stride: 2\n        padding: 1\n      fuser:\n        _target_: sam2.modeling.memory_encoder.Fuser\n        layer:\n          _target_: sam2.modeling.memory_encoder.CXBlock\n          dim: 256\n          kernel_size: 7\n          padding: 3\n          layer_scale_init_value: 1e-6\n          use_dwconv: True  # depth-wise convs\n        num_layers: 2\n\n  num_maskmem: 7\n  image_size: 1024\n  # apply scaled sigmoid on mask logits for memory encoder, and directly feed input mask as output mask\n  sigmoid_scale_for_mem_enc: 20.0\n  sigmoid_bias_for_mem_enc: -10.0\n  use_mask_input_as_output_without_sam: true\n  # Memory\n  directly_add_no_mem_embed: true\n  no_obj_embed_spatial: true\n  # use high-resolution feature map in the SAM mask decoder\n  use_high_res_features_in_sam: true\n  # output 3 masks on the first click on initial conditioning frames\n  multimask_output_in_sam: true\n  # SAM heads\n  iou_prediction_use_sigmoid: True\n  # cross-attend to object pointers from other frames (based on SAM output tokens) in the encoder\n  use_obj_ptrs_in_encoder: true\n  add_tpos_enc_to_obj_ptrs: true\n  proj_tpos_enc_in_obj_ptrs: true\n  use_signed_tpos_enc_to_obj_ptrs: true\n  only_obj_ptrs_in_the_past_for_eval: true\n  # object occlusion prediction\n  pred_obj_scores: true\n  pred_obj_scores_mlp: true\n  fixed_no_obj_ptr: true\n  # multimask tracking settings\n  multimask_output_for_tracking: true\n  use_multimask_token_for_obj_ptr: true\n  multimask_min_pt_num: 0\n  multimask_max_pt_num: 1\n  use_mlp_for_obj_ptr_proj: true\n  # Compilation flag\n  compile_image_encoder: False\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/configs/sam2.1/sam2.1_hiera_t.yaml",
    "content": "# @package _global_\n\n# Model\nmodel:\n  _target_: sam2.modeling.sam2_base.SAM2Base\n  image_encoder:\n    _target_: sam2.modeling.backbones.image_encoder.ImageEncoder\n    scalp: 1\n    trunk:\n      _target_: sam2.modeling.backbones.hieradet.Hiera\n      embed_dim: 96\n      num_heads: 1\n      stages: [1, 2, 7, 2]\n      global_att_blocks: [5, 7, 9]\n      window_pos_embed_bkg_spatial_size: [7, 7]\n    neck:\n      _target_: sam2.modeling.backbones.image_encoder.FpnNeck\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 256\n        normalize: true\n        scale: null\n        temperature: 10000\n      d_model: 256\n      backbone_channel_list: [768, 384, 192, 96]\n      fpn_top_down_levels: [2, 3]  # output level 0 and 1 directly use the backbone features\n      fpn_interp_model: nearest\n\n  memory_attention:\n    _target_: sam2.modeling.memory_attention.MemoryAttention\n    d_model: 256\n    pos_enc_at_input: true\n    layer:\n      _target_: sam2.modeling.memory_attention.MemoryAttentionLayer\n      activation: relu\n      dim_feedforward: 2048\n      dropout: 0.1\n      pos_enc_at_attn: false\n      self_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n      d_model: 256\n      pos_enc_at_cross_attn_keys: true\n      pos_enc_at_cross_attn_queries: false\n      cross_attention:\n        _target_: sam2.modeling.sam.transformer.RoPEAttention\n        rope_theta: 10000.0\n        feat_sizes: [32, 32]\n        rope_k_repeat: True\n        embedding_dim: 256\n        num_heads: 1\n        downsample_rate: 1\n        dropout: 0.1\n        kv_in_dim: 64\n    num_layers: 4\n\n  memory_encoder:\n      _target_: sam2.modeling.memory_encoder.MemoryEncoder\n      out_dim: 64\n      position_encoding:\n        _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n        num_pos_feats: 64\n        normalize: true\n        scale: null\n        temperature: 10000\n      mask_downsampler:\n        _target_: sam2.modeling.memory_encoder.MaskDownSampler\n        kernel_size: 3\n        stride: 2\n        padding: 1\n      fuser:\n        _target_: sam2.modeling.memory_encoder.Fuser\n        layer:\n          _target_: sam2.modeling.memory_encoder.CXBlock\n          dim: 256\n          kernel_size: 7\n          padding: 3\n          layer_scale_init_value: 1e-6\n          use_dwconv: True  # depth-wise convs\n        num_layers: 2\n\n  num_maskmem: 7\n  image_size: 1024\n  # apply scaled sigmoid on mask logits for memory encoder, and directly feed input mask as output mask\n  # SAM decoder\n  sigmoid_scale_for_mem_enc: 20.0\n  sigmoid_bias_for_mem_enc: -10.0\n  use_mask_input_as_output_without_sam: true\n  # Memory\n  directly_add_no_mem_embed: true\n  no_obj_embed_spatial: true\n  # use high-resolution feature map in the SAM mask decoder\n  use_high_res_features_in_sam: true\n  # output 3 masks on the first click on initial conditioning frames\n  multimask_output_in_sam: true\n  # SAM heads\n  iou_prediction_use_sigmoid: True\n  # cross-attend to object pointers from other frames (based on SAM output tokens) in the encoder\n  use_obj_ptrs_in_encoder: true\n  add_tpos_enc_to_obj_ptrs: true\n  proj_tpos_enc_in_obj_ptrs: true\n  use_signed_tpos_enc_to_obj_ptrs: true\n  only_obj_ptrs_in_the_past_for_eval: true\n  # object occlusion prediction\n  pred_obj_scores: true\n  pred_obj_scores_mlp: true\n  fixed_no_obj_ptr: true\n  # multimask tracking settings\n  multimask_output_for_tracking: true\n  use_multimask_token_for_obj_ptr: true\n  multimask_min_pt_num: 0\n  multimask_max_pt_num: 1\n  use_mlp_for_obj_ptr_proj: true\n  # Compilation flag\n  # HieraT does not currently support compilation, should always be set to False\n  compile_image_encoder: False\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/configs/sam2.1_training/sam2.1_hiera_b+_MOSE_finetune.yaml",
    "content": "# @package _global_\n\nscratch:\n  resolution: 1024\n  train_batch_size: 1\n  num_train_workers: 10\n  num_frames: 8\n  max_num_objects: 3\n  base_lr: 5.0e-6\n  vision_lr: 3.0e-06\n  phases_per_epoch: 1\n  num_epochs: 40\n\ndataset:\n  # PATHS to Dataset\n  img_folder: /fsx-onevision/shared/data/academic_vos_data/MOSE/train/JPEGImages # PATH to MOSE JPEGImages folder\n  gt_folder: /fsx-onevision/shared/data/academic_vos_data/MOSE/train/Annotations/  # PATH to MOSE Annotations folder\n  file_list_txt: training/assets/MOSE_sample_train_list.txt # Optional PATH to filelist containing a subset of videos to be used for training\n  multiplier: 2\n\n# Video transforms\nvos:\n  train_transforms:\n    - _target_: training.dataset.transforms.ComposeAPI\n      transforms:\n        - _target_: training.dataset.transforms.RandomHorizontalFlip\n          consistent_transform: True\n        - _target_: training.dataset.transforms.RandomAffine\n          degrees: 25\n          shear: 20\n          image_interpolation: bilinear\n          consistent_transform: True\n        - _target_: training.dataset.transforms.RandomResizeAPI\n          sizes: ${scratch.resolution}\n          square: true\n          consistent_transform: True\n        - _target_: training.dataset.transforms.ColorJitter\n          consistent_transform: True\n          brightness: 0.1\n          contrast: 0.03\n          saturation: 0.03\n          hue: null\n        - _target_: training.dataset.transforms.RandomGrayscale\n          p: 0.05\n          consistent_transform: True\n        - _target_: training.dataset.transforms.ColorJitter\n          consistent_transform: False\n          brightness: 0.1\n          contrast: 0.05\n          saturation: 0.05\n          hue: null\n        - _target_: training.dataset.transforms.ToTensorAPI\n        - _target_: training.dataset.transforms.NormalizeAPI\n          mean: [0.485, 0.456, 0.406]\n          std: [0.229, 0.224, 0.225]\n\ntrainer:\n  _target_: training.trainer.Trainer\n  mode: train_only\n  max_epochs: ${times:${scratch.num_epochs},${scratch.phases_per_epoch}}\n  accelerator: cuda\n  seed_value: 123\n\n  model:\n    _target_: training.model.sam2.SAM2Train\n    image_encoder:\n      _target_: sam2.modeling.backbones.image_encoder.ImageEncoder\n      scalp: 1\n      trunk:\n        _target_: sam2.modeling.backbones.hieradet.Hiera\n        embed_dim: 112\n        num_heads: 2\n        drop_path_rate: 0.1\n      neck:\n        _target_: sam2.modeling.backbones.image_encoder.FpnNeck\n        position_encoding:\n          _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n          num_pos_feats: 256\n          normalize: true\n          scale: null\n          temperature: 10000\n        d_model: 256\n        backbone_channel_list: [896, 448, 224, 112]\n        fpn_top_down_levels: [2, 3]  # output level 0 and 1 directly use the backbone features\n        fpn_interp_model: nearest\n\n    memory_attention:\n      _target_: sam2.modeling.memory_attention.MemoryAttention\n      d_model: 256\n      pos_enc_at_input: true\n      layer:\n        _target_: sam2.modeling.memory_attention.MemoryAttentionLayer\n        activation: relu\n        dim_feedforward: 2048\n        dropout: 0.1\n        pos_enc_at_attn: false\n        self_attention:\n          _target_: sam2.modeling.sam.transformer.RoPEAttention\n          rope_theta: 10000.0\n          feat_sizes: [32, 32]\n          embedding_dim: 256\n          num_heads: 1\n          downsample_rate: 1\n          dropout: 0.1\n        d_model: 256\n        pos_enc_at_cross_attn_keys: true\n        pos_enc_at_cross_attn_queries: false\n        cross_attention:\n          _target_: sam2.modeling.sam.transformer.RoPEAttention\n          rope_theta: 10000.0\n          feat_sizes: [32, 32]\n          rope_k_repeat: True\n          embedding_dim: 256\n          num_heads: 1\n          downsample_rate: 1\n          dropout: 0.1\n          kv_in_dim: 64\n      num_layers: 4\n\n    memory_encoder:\n        _target_: sam2.modeling.memory_encoder.MemoryEncoder\n        out_dim: 64\n        position_encoding:\n          _target_: sam2.modeling.position_encoding.PositionEmbeddingSine\n          num_pos_feats: 64\n          normalize: true\n          scale: null\n          temperature: 10000\n        mask_downsampler:\n          _target_: sam2.modeling.memory_encoder.MaskDownSampler\n          kernel_size: 3\n          stride: 2\n          padding: 1\n        fuser:\n          _target_: sam2.modeling.memory_encoder.Fuser\n          layer:\n            _target_: sam2.modeling.memory_encoder.CXBlock\n            dim: 256\n            kernel_size: 7\n            padding: 3\n            layer_scale_init_value: 1e-6\n            use_dwconv: True  # depth-wise convs\n          num_layers: 2\n\n    num_maskmem: 7\n    image_size: ${scratch.resolution}\n    # apply scaled sigmoid on mask logits for memory encoder, and directly feed input mask as output mask\n    sigmoid_scale_for_mem_enc: 20.0\n    sigmoid_bias_for_mem_enc: -10.0\n    use_mask_input_as_output_without_sam: true\n    # Memory\n    directly_add_no_mem_embed: true\n    no_obj_embed_spatial: true\n    # use high-resolution feature map in the SAM mask decoder\n    use_high_res_features_in_sam: true\n    # output 3 masks on the first click on initial conditioning frames\n    multimask_output_in_sam: true\n    # SAM heads\n    iou_prediction_use_sigmoid: True\n    # cross-attend to object pointers from other frames (based on SAM output tokens) in the encoder\n    use_obj_ptrs_in_encoder: true\n    add_tpos_enc_to_obj_ptrs: true\n    proj_tpos_enc_in_obj_ptrs: true\n    use_signed_tpos_enc_to_obj_ptrs: true\n    only_obj_ptrs_in_the_past_for_eval: true\n    # object occlusion prediction\n    pred_obj_scores: true\n    pred_obj_scores_mlp: true\n    fixed_no_obj_ptr: true\n    # multimask tracking settings\n    multimask_output_for_tracking: true\n    use_multimask_token_for_obj_ptr: true\n    multimask_min_pt_num: 0\n    multimask_max_pt_num: 1\n    use_mlp_for_obj_ptr_proj: true\n    # Compilation flag\n    # compile_image_encoder: False\n\n    ####### Training specific params #######\n    # box/point input and corrections\n    prob_to_use_pt_input_for_train: 0.5\n    prob_to_use_pt_input_for_eval: 0.0\n    prob_to_use_box_input_for_train: 0.5  # 0.5*0.5 = 0.25 prob to use box instead of points\n    prob_to_use_box_input_for_eval: 0.0\n    prob_to_sample_from_gt_for_train: 0.1  # with a small prob, sampling correction points from GT mask instead of prediction errors\n    num_frames_to_correct_for_train: 2  # iteratively sample on random 1~2 frames (always include the first frame)\n    num_frames_to_correct_for_eval: 1  # only iteratively sample on first frame\n    rand_frames_to_correct_for_train: True  # random #init-cond-frame ~ 2\n    add_all_frames_to_correct_as_cond: True  # when a frame receives a correction click, it becomes a conditioning frame (even if it's not initially a conditioning frame)\n    # maximum 2 initial conditioning frames\n    num_init_cond_frames_for_train: 2\n    rand_init_cond_frames_for_train: True  # random 1~2\n    num_correction_pt_per_frame: 7\n    use_act_ckpt_iterative_pt_sampling: false\n    \n\n    \n    num_init_cond_frames_for_eval: 1  # only mask on the first frame\n    forward_backbone_per_frame_for_eval: True\n    \n\n  data:\n    train:\n      _target_: training.dataset.sam2_datasets.TorchTrainMixedDataset\n      phases_per_epoch: ${scratch.phases_per_epoch}\n      batch_sizes:\n        - ${scratch.train_batch_size}\n\n      datasets:\n        - _target_: training.dataset.utils.RepeatFactorWrapper\n          dataset:\n            _target_: training.dataset.utils.ConcatDataset\n            datasets:\n            - _target_: training.dataset.vos_dataset.VOSDataset\n              transforms: ${vos.train_transforms}\n              training: true\n              video_dataset:\n                _target_: training.dataset.vos_raw_dataset.PNGRawDataset\n                img_folder: ${dataset.img_folder}\n                gt_folder: ${dataset.gt_folder}\n                file_list_txt: ${dataset.file_list_txt}\n              sampler:\n                _target_: training.dataset.vos_sampler.RandomUniformSampler\n                num_frames: ${scratch.num_frames}\n                max_num_objects: ${scratch.max_num_objects}\n              multiplier: ${dataset.multiplier}\n      shuffle: True\n      num_workers: ${scratch.num_train_workers}\n      pin_memory: True\n      drop_last: True\n      collate_fn:\n        _target_: training.utils.data_utils.collate_fn\n        _partial_: true\n        dict_key: all\n\n  optim:\n    amp:\n      enabled: True\n      amp_dtype: bfloat16\n\n    optimizer:\n      _target_: torch.optim.AdamW\n\n    gradient_clip:\n      _target_: training.optimizer.GradientClipper\n      max_norm: 0.1\n      norm_type: 2\n\n    param_group_modifiers:\n      - _target_: training.optimizer.layer_decay_param_modifier\n        _partial_: True\n        layer_decay_value: 0.9\n        apply_to: 'image_encoder.trunk'\n        overrides:\n          - pattern: '*pos_embed*'\n            value: 1.0\n\n    options:\n      lr:\n        - scheduler:\n            _target_: fvcore.common.param_scheduler.CosineParamScheduler\n            start_value: ${scratch.base_lr}\n            end_value: ${divide:${scratch.base_lr},10}\n        - scheduler:\n            _target_: fvcore.common.param_scheduler.CosineParamScheduler\n            start_value: ${scratch.vision_lr}\n            end_value: ${divide:${scratch.vision_lr},10}\n          param_names:\n            - 'image_encoder.*'\n      weight_decay:\n        - scheduler:\n            _target_: fvcore.common.param_scheduler.ConstantParamScheduler\n            value: 0.1\n        - scheduler:\n            _target_: fvcore.common.param_scheduler.ConstantParamScheduler\n            value: 0.0\n          param_names:\n            - '*bias*'\n          module_cls_names: ['torch.nn.LayerNorm']\n\n  loss:\n    all:\n      _target_: training.loss_fns.MultiStepMultiMasksAndIous\n      weight_dict:\n        loss_mask: 20\n        loss_dice: 1\n        loss_iou: 1\n        loss_class: 1\n      supervise_all_iou: true\n      iou_use_l1_loss: true\n      pred_obj_scores: true\n      focal_gamma_obj_score: 0.0\n      focal_alpha_obj_score: -1.0\n\n  distributed:\n    backend: nccl\n    find_unused_parameters: True\n\n  logging:\n    tensorboard_writer:\n      _target_: training.utils.logger.make_tensorboard_logger\n      log_dir:  ${launcher.experiment_log_dir}/tensorboard\n      flush_secs: 120\n      should_log: True\n    log_dir: ${launcher.experiment_log_dir}/logs\n    log_freq: 10\n\n  # initialize from a SAM 2 checkpoint\n  checkpoint:\n    save_dir: ${launcher.experiment_log_dir}/checkpoints\n    save_freq: 0 # 0 only last checkpoint is saved.\n    model_weight_initializer:\n      _partial_: True\n      _target_: training.utils.checkpoint_utils.load_state_dict_into_model\n      strict: True\n      ignore_unexpected_keys: null\n      ignore_missing_keys: null\n\n      state_dict:\n        _target_: training.utils.checkpoint_utils.load_checkpoint_and_apply_kernels\n        checkpoint_path: ./checkpoints/sam2.1_hiera_base_plus.pt # PATH to SAM 2.1 checkpoint\n        ckpt_state_dict_keys: ['model']\n\nlauncher:\n  num_nodes: 1\n  gpus_per_node: 8\n  experiment_log_dir: null # Path to log directory, defaults to ./sam2_logs/${config_name}\n\n# SLURM args if running on a cluster\nsubmitit:\n  partition: null\n  account: null\n  qos: null\n  cpus_per_task: 10\n  use_cluster: false\n  timeout_hour: 24\n  name: null\n  port_range: [10000, 65000]\n\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/csrc/connected_components.cu",
    "content": "// Copyright (c) Meta Platforms, Inc. and affiliates.\n// All rights reserved.\n\n// This source code is licensed under the license found in the\n// LICENSE file in the root directory of this source tree.\n\n// adapted from https://github.com/zsef123/Connected_components_PyTorch\n// with license found in the LICENSE_cctorch file in the root directory.\n#include <ATen/cuda/CUDAContext.h>\n#include <cuda.h>\n#include <cuda_runtime.h>\n#include <torch/extension.h>\n#include <torch/script.h>\n#include <vector>\n\n// 2d\n#define BLOCK_ROWS 16\n#define BLOCK_COLS 16\n\nnamespace cc2d {\n\ntemplate <typename T>\n__device__ __forceinline__ unsigned char hasBit(T bitmap, unsigned char pos) {\n  return (bitmap >> pos) & 1;\n}\n\n__device__ int32_t find(const int32_t* s_buf, int32_t n) {\n  while (s_buf[n] != n)\n    n = s_buf[n];\n  return n;\n}\n\n__device__ int32_t find_n_compress(int32_t* s_buf, int32_t n) {\n  const int32_t id = n;\n  while (s_buf[n] != n) {\n    n = s_buf[n];\n    s_buf[id] = n;\n  }\n  return n;\n}\n\n__device__ void union_(int32_t* s_buf, int32_t a, int32_t b) {\n  bool done;\n  do {\n    a = find(s_buf, a);\n    b = find(s_buf, b);\n\n    if (a < b) {\n      int32_t old = atomicMin(s_buf + b, a);\n      done = (old == b);\n      b = old;\n    } else if (b < a) {\n      int32_t old = atomicMin(s_buf + a, b);\n      done = (old == a);\n      a = old;\n    } else\n      done = true;\n\n  } while (!done);\n}\n\n__global__ void\ninit_labeling(int32_t* label, const uint32_t W, const uint32_t H) {\n  const uint32_t row = (blockIdx.y * blockDim.y + threadIdx.y) * 2;\n  const uint32_t col = (blockIdx.x * blockDim.x + threadIdx.x) * 2;\n  const uint32_t idx = row * W + col;\n\n  if (row < H && col < W)\n    label[idx] = idx;\n}\n\n__global__ void\nmerge(uint8_t* img, int32_t* label, const uint32_t W, const uint32_t H) {\n  const uint32_t row = (blockIdx.y * blockDim.y + threadIdx.y) * 2;\n  const uint32_t col = (blockIdx.x * blockDim.x + threadIdx.x) * 2;\n  const uint32_t idx = row * W + col;\n\n  if (row >= H || col >= W)\n    return;\n\n  uint32_t P = 0;\n\n  if (img[idx])\n    P |= 0x777;\n  if (row + 1 < H && img[idx + W])\n    P |= 0x777 << 4;\n  if (col + 1 < W && img[idx + 1])\n    P |= 0x777 << 1;\n\n  if (col == 0)\n    P &= 0xEEEE;\n  if (col + 1 >= W)\n    P &= 0x3333;\n  else if (col + 2 >= W)\n    P &= 0x7777;\n\n  if (row == 0)\n    P &= 0xFFF0;\n  if (row + 1 >= H)\n    P &= 0xFF;\n\n  if (P > 0) {\n    // If need check about top-left pixel(if flag the first bit) and hit the\n    // top-left pixel\n    if (hasBit(P, 0) && img[idx - W - 1]) {\n      union_(label, idx, idx - 2 * W - 2); // top left block\n    }\n\n    if ((hasBit(P, 1) && img[idx - W]) || (hasBit(P, 2) && img[idx - W + 1]))\n      union_(label, idx, idx - 2 * W); // top bottom block\n\n    if (hasBit(P, 3) && img[idx + 2 - W])\n      union_(label, idx, idx - 2 * W + 2); // top right block\n\n    if ((hasBit(P, 4) && img[idx - 1]) || (hasBit(P, 8) && img[idx + W - 1]))\n      union_(label, idx, idx - 2); // just left block\n  }\n}\n\n__global__ void compression(int32_t* label, const int32_t W, const int32_t H) {\n  const uint32_t row = (blockIdx.y * blockDim.y + threadIdx.y) * 2;\n  const uint32_t col = (blockIdx.x * blockDim.x + threadIdx.x) * 2;\n  const uint32_t idx = row * W + col;\n\n  if (row < H && col < W)\n    find_n_compress(label, idx);\n}\n\n__global__ void final_labeling(\n    const uint8_t* img,\n    int32_t* label,\n    const int32_t W,\n    const int32_t H) {\n  const uint32_t row = (blockIdx.y * blockDim.y + threadIdx.y) * 2;\n  const uint32_t col = (blockIdx.x * blockDim.x + threadIdx.x) * 2;\n  const uint32_t idx = row * W + col;\n\n  if (row >= H || col >= W)\n    return;\n\n  int32_t y = label[idx] + 1;\n\n  if (img[idx])\n    label[idx] = y;\n  else\n    label[idx] = 0;\n\n  if (col + 1 < W) {\n    if (img[idx + 1])\n      label[idx + 1] = y;\n    else\n      label[idx + 1] = 0;\n\n    if (row + 1 < H) {\n      if (img[idx + W + 1])\n        label[idx + W + 1] = y;\n      else\n        label[idx + W + 1] = 0;\n    }\n  }\n\n  if (row + 1 < H) {\n    if (img[idx + W])\n      label[idx + W] = y;\n    else\n      label[idx + W] = 0;\n  }\n}\n\n__global__ void init_counting(\n    const int32_t* label,\n    int32_t* count_init,\n    const int32_t W,\n    const int32_t H) {\n  const uint32_t row = (blockIdx.y * blockDim.y + threadIdx.y);\n  const uint32_t col = (blockIdx.x * blockDim.x + threadIdx.x);\n  const uint32_t idx = row * W + col;\n\n  if (row >= H || col >= W)\n    return;\n\n  int32_t y = label[idx];\n  if (y > 0) {\n    int32_t count_idx = y - 1;\n    atomicAdd(count_init + count_idx, 1);\n  }\n}\n\n__global__ void final_counting(\n    const int32_t* label,\n    const int32_t* count_init,\n    int32_t* count_final,\n    const int32_t W,\n    const int32_t H) {\n  const uint32_t row = (blockIdx.y * blockDim.y + threadIdx.y);\n  const uint32_t col = (blockIdx.x * blockDim.x + threadIdx.x);\n  const uint32_t idx = row * W + col;\n\n  if (row >= H || col >= W)\n    return;\n\n  int32_t y = label[idx];\n  if (y > 0) {\n    int32_t count_idx = y - 1;\n    count_final[idx] = count_init[count_idx];\n  } else {\n    count_final[idx] = 0;\n  }\n}\n\n} // namespace cc2d\n\nstd::vector<torch::Tensor> get_connected_componnets(\n    const torch::Tensor& inputs) {\n  AT_ASSERTM(inputs.is_cuda(), \"inputs must be a CUDA tensor\");\n  AT_ASSERTM(inputs.ndimension() == 4, \"inputs must be [N, 1, H, W] shape\");\n  AT_ASSERTM(\n      inputs.scalar_type() == torch::kUInt8, \"inputs must be a uint8 type\");\n\n  const uint32_t N = inputs.size(0);\n  const uint32_t C = inputs.size(1);\n  const uint32_t H = inputs.size(2);\n  const uint32_t W = inputs.size(3);\n\n  AT_ASSERTM(C == 1, \"inputs must be [N, 1, H, W] shape\");\n  AT_ASSERTM((H % 2) == 0, \"height must be an even number\");\n  AT_ASSERTM((W % 2) == 0, \"width must be an even number\");\n\n  // label must be uint32_t\n  auto label_options =\n      torch::TensorOptions().dtype(torch::kInt32).device(inputs.device());\n  torch::Tensor labels = torch::zeros({N, C, H, W}, label_options);\n  torch::Tensor counts_init = torch::zeros({N, C, H, W}, label_options);\n  torch::Tensor counts_final = torch::zeros({N, C, H, W}, label_options);\n\n  dim3 grid = dim3(\n      ((W + 1) / 2 + BLOCK_COLS - 1) / BLOCK_COLS,\n      ((H + 1) / 2 + BLOCK_ROWS - 1) / BLOCK_ROWS);\n  dim3 block = dim3(BLOCK_COLS, BLOCK_ROWS);\n  dim3 grid_count =\n      dim3((W + BLOCK_COLS) / BLOCK_COLS, (H + BLOCK_ROWS) / BLOCK_ROWS);\n  dim3 block_count = dim3(BLOCK_COLS, BLOCK_ROWS);\n  cudaStream_t stream = at::cuda::getCurrentCUDAStream();\n\n  for (int n = 0; n < N; n++) {\n    uint32_t offset = n * H * W;\n\n    cc2d::init_labeling<<<grid, block, 0, stream>>>(\n        labels.data_ptr<int32_t>() + offset, W, H);\n    cc2d::merge<<<grid, block, 0, stream>>>(\n        inputs.data_ptr<uint8_t>() + offset,\n        labels.data_ptr<int32_t>() + offset,\n        W,\n        H);\n    cc2d::compression<<<grid, block, 0, stream>>>(\n        labels.data_ptr<int32_t>() + offset, W, H);\n    cc2d::final_labeling<<<grid, block, 0, stream>>>(\n        inputs.data_ptr<uint8_t>() + offset,\n        labels.data_ptr<int32_t>() + offset,\n        W,\n        H);\n\n    // get the counting of each pixel\n    cc2d::init_counting<<<grid_count, block_count, 0, stream>>>(\n        labels.data_ptr<int32_t>() + offset,\n        counts_init.data_ptr<int32_t>() + offset,\n        W,\n        H);\n    cc2d::final_counting<<<grid_count, block_count, 0, stream>>>(\n        labels.data_ptr<int32_t>() + offset,\n        counts_init.data_ptr<int32_t>() + offset,\n        counts_final.data_ptr<int32_t>() + offset,\n        W,\n        H);\n  }\n\n  // returned values are [labels, counts]\n  std::vector<torch::Tensor> outputs;\n  outputs.push_back(labels);\n  outputs.push_back(counts_final);\n  return outputs;\n}\n\nPYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {\n  m.def(\n      \"get_connected_componnets\",\n      &get_connected_componnets,\n      \"get_connected_componnets\");\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/modeling/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/modeling/backbones/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/modeling/backbones/hieradet.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport logging\nfrom functools import partial\nfrom typing import List, Tuple, Union\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom iopath.common.file_io import g_pathmgr\n\nfrom sam2.modeling.backbones.utils import (\n    PatchEmbed,\n    window_partition,\n    window_unpartition,\n)\n\nfrom sam2.modeling.sam2_utils import DropPath, MLP\n\n\ndef do_pool(x: torch.Tensor, pool: nn.Module, norm: nn.Module = None) -> torch.Tensor:\n    if pool is None:\n        return x\n    # (B, H, W, C) -> (B, C, H, W)\n    x = x.permute(0, 3, 1, 2)\n    x = pool(x)\n    # (B, C, H', W') -> (B, H', W', C)\n    x = x.permute(0, 2, 3, 1)\n    if norm:\n        x = norm(x)\n\n    return x\n\n\nclass MultiScaleAttention(nn.Module):\n    def __init__(\n        self,\n        dim: int,\n        dim_out: int,\n        num_heads: int,\n        q_pool: nn.Module = None,\n    ):\n        super().__init__()\n\n        self.dim = dim\n        self.dim_out = dim_out\n        self.num_heads = num_heads\n        self.q_pool = q_pool\n        self.qkv = nn.Linear(dim, dim_out * 3)\n        self.proj = nn.Linear(dim_out, dim_out)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        B, H, W, _ = x.shape\n        # qkv with shape (B, H * W, 3, nHead, C)\n        qkv = self.qkv(x).reshape(B, H * W, 3, self.num_heads, -1)\n        # q, k, v with shape (B, H * W, nheads, C)\n        q, k, v = torch.unbind(qkv, 2)\n\n        # Q pooling (for downsample at stage changes)\n        if self.q_pool:\n            q = do_pool(q.reshape(B, H, W, -1), self.q_pool)\n            H, W = q.shape[1:3]  # downsampled shape\n            q = q.reshape(B, H * W, self.num_heads, -1)\n\n        # Torch's SDPA expects [B, nheads, H*W, C] so we transpose\n        x = F.scaled_dot_product_attention(\n            q.transpose(1, 2),\n            k.transpose(1, 2),\n            v.transpose(1, 2),\n        )\n        # Transpose back\n        x = x.transpose(1, 2)\n        x = x.reshape(B, H, W, -1)\n\n        x = self.proj(x)\n\n        return x\n\n\nclass MultiScaleBlock(nn.Module):\n    def __init__(\n        self,\n        dim: int,\n        dim_out: int,\n        num_heads: int,\n        mlp_ratio: float = 4.0,\n        drop_path: float = 0.0,\n        norm_layer: Union[nn.Module, str] = \"LayerNorm\",\n        q_stride: Tuple[int, int] = None,\n        act_layer: nn.Module = nn.GELU,\n        window_size: int = 0,\n    ):\n        super().__init__()\n\n        if isinstance(norm_layer, str):\n            norm_layer = partial(getattr(nn, norm_layer), eps=1e-6)\n\n        self.dim = dim\n        self.dim_out = dim_out\n        self.norm1 = norm_layer(dim)\n\n        self.window_size = window_size\n\n        self.pool, self.q_stride = None, q_stride\n        if self.q_stride:\n            self.pool = nn.MaxPool2d(\n                kernel_size=q_stride, stride=q_stride, ceil_mode=False\n            )\n\n        self.attn = MultiScaleAttention(\n            dim,\n            dim_out,\n            num_heads=num_heads,\n            q_pool=self.pool,\n        )\n        self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()\n\n        self.norm2 = norm_layer(dim_out)\n        self.mlp = MLP(\n            dim_out,\n            int(dim_out * mlp_ratio),\n            dim_out,\n            num_layers=2,\n            activation=act_layer,\n        )\n\n        if dim != dim_out:\n            self.proj = nn.Linear(dim, dim_out)\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        shortcut = x  # B, H, W, C\n        x = self.norm1(x)\n\n        # Skip connection\n        if self.dim != self.dim_out:\n            shortcut = do_pool(self.proj(x), self.pool)\n\n        # Window partition\n        window_size = self.window_size\n        if window_size > 0:\n            H, W = x.shape[1], x.shape[2]\n            x, pad_hw = window_partition(x, window_size)\n\n        # Window Attention + Q Pooling (if stage change)\n        x = self.attn(x)\n        if self.q_stride:\n            # Shapes have changed due to Q pooling\n            window_size = self.window_size // self.q_stride[0]\n            H, W = shortcut.shape[1:3]\n\n            pad_h = (window_size - H % window_size) % window_size\n            pad_w = (window_size - W % window_size) % window_size\n            pad_hw = (H + pad_h, W + pad_w)\n\n        # Reverse window partition\n        if self.window_size > 0:\n            x = window_unpartition(x, window_size, pad_hw, (H, W))\n\n        x = shortcut + self.drop_path(x)\n        # MLP\n        x = x + self.drop_path(self.mlp(self.norm2(x)))\n        return x\n\n\nclass Hiera(nn.Module):\n    \"\"\"\n    Reference: https://arxiv.org/abs/2306.00989\n    \"\"\"\n\n    def __init__(\n        self,\n        embed_dim: int = 96,  # initial embed dim\n        num_heads: int = 1,  # initial number of heads\n        drop_path_rate: float = 0.0,  # stochastic depth\n        q_pool: int = 3,  # number of q_pool stages\n        q_stride: Tuple[int, int] = (2, 2),  # downsample stride bet. stages\n        stages: Tuple[int, ...] = (2, 3, 16, 3),  # blocks per stage\n        dim_mul: float = 2.0,  # dim_mul factor at stage shift\n        head_mul: float = 2.0,  # head_mul factor at stage shift\n        window_pos_embed_bkg_spatial_size: Tuple[int, int] = (14, 14),\n        # window size per stage, when not using global att.\n        window_spec: Tuple[int, ...] = (\n            8,\n            4,\n            14,\n            7,\n        ),\n        # global attn in these blocks\n        global_att_blocks: Tuple[int, ...] = (\n            12,\n            16,\n            20,\n        ),\n        weights_path=None,\n        return_interm_layers=True,  # return feats from every stage\n    ):\n        super().__init__()\n\n        assert len(stages) == len(window_spec)\n        self.window_spec = window_spec\n\n        depth = sum(stages)\n        self.q_stride = q_stride\n        self.stage_ends = [sum(stages[:i]) - 1 for i in range(1, len(stages) + 1)]\n        assert 0 <= q_pool <= len(self.stage_ends[:-1])\n        self.q_pool_blocks = [x + 1 for x in self.stage_ends[:-1]][:q_pool]\n        self.return_interm_layers = return_interm_layers\n\n        self.patch_embed = PatchEmbed(\n            embed_dim=embed_dim,\n        )\n        # Which blocks have global att?\n        self.global_att_blocks = global_att_blocks\n\n        # Windowed positional embedding (https://arxiv.org/abs/2311.05613)\n        self.window_pos_embed_bkg_spatial_size = window_pos_embed_bkg_spatial_size\n        self.pos_embed = nn.Parameter(\n            torch.zeros(1, embed_dim, *self.window_pos_embed_bkg_spatial_size)\n        )\n        self.pos_embed_window = nn.Parameter(\n            torch.zeros(1, embed_dim, self.window_spec[0], self.window_spec[0])\n        )\n\n        dpr = [\n            x.item() for x in torch.linspace(0, drop_path_rate, depth)\n        ]  # stochastic depth decay rule\n\n        cur_stage = 1\n        self.blocks = nn.ModuleList()\n\n        for i in range(depth):\n            dim_out = embed_dim\n            # lags by a block, so first block of\n            # next stage uses an initial window size\n            # of previous stage and final window size of current stage\n            window_size = self.window_spec[cur_stage - 1]\n\n            if self.global_att_blocks is not None:\n                window_size = 0 if i in self.global_att_blocks else window_size\n\n            if i - 1 in self.stage_ends:\n                dim_out = int(embed_dim * dim_mul)\n                num_heads = int(num_heads * head_mul)\n                cur_stage += 1\n\n            block = MultiScaleBlock(\n                dim=embed_dim,\n                dim_out=dim_out,\n                num_heads=num_heads,\n                drop_path=dpr[i],\n                q_stride=self.q_stride if i in self.q_pool_blocks else None,\n                window_size=window_size,\n            )\n\n            embed_dim = dim_out\n            self.blocks.append(block)\n\n        self.channel_list = (\n            [self.blocks[i].dim_out for i in self.stage_ends[::-1]]\n            if return_interm_layers\n            else [self.blocks[-1].dim_out]\n        )\n\n        if weights_path is not None:\n            with g_pathmgr.open(weights_path, \"rb\") as f:\n                chkpt = torch.load(f, map_location=\"cpu\")\n            logging.info(\"loading Hiera\", self.load_state_dict(chkpt, strict=False))\n\n    def _get_pos_embed(self, hw: Tuple[int, int]) -> torch.Tensor:\n        h, w = hw\n        window_embed = self.pos_embed_window\n        pos_embed = F.interpolate(self.pos_embed, size=(h, w), mode=\"bicubic\")\n        pos_embed = pos_embed + window_embed.tile(\n            [x // y for x, y in zip(pos_embed.shape, window_embed.shape)]\n        )\n        pos_embed = pos_embed.permute(0, 2, 3, 1)\n        return pos_embed\n\n    def forward(self, x: torch.Tensor) -> List[torch.Tensor]:\n        x = self.patch_embed(x)\n        # x: (B, H, W, C)\n\n        # Add pos embed\n        x = x + self._get_pos_embed(x.shape[1:3])\n\n        outputs = []\n        for i, blk in enumerate(self.blocks):\n            x = blk(x)\n            if (i == self.stage_ends[-1]) or (\n                i in self.stage_ends and self.return_interm_layers\n            ):\n                feats = x.permute(0, 3, 1, 2)\n                outputs.append(feats)\n\n        return outputs\n\n    def get_layer_id(self, layer_name):\n        # https://github.com/microsoft/unilm/blob/master/beit/optim_factory.py#L33\n        num_layers = self.get_num_layers()\n\n        if layer_name.find(\"rel_pos\") != -1:\n            return num_layers + 1\n        elif layer_name.find(\"pos_embed\") != -1:\n            return 0\n        elif layer_name.find(\"patch_embed\") != -1:\n            return 0\n        elif layer_name.find(\"blocks\") != -1:\n            return int(layer_name.split(\"blocks\")[1].split(\".\")[1]) + 1\n        else:\n            return num_layers + 1\n\n    def get_num_layers(self) -> int:\n        return len(self.blocks)\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/modeling/backbones/image_encoder.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom typing import List, Optional\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\n\nclass ImageEncoder(nn.Module):\n    def __init__(\n        self,\n        trunk: nn.Module,\n        neck: nn.Module,\n        scalp: int = 0,\n    ):\n        super().__init__()\n        self.trunk = trunk\n        self.neck = neck\n        self.scalp = scalp\n        assert (\n            self.trunk.channel_list == self.neck.backbone_channel_list\n        ), f\"Channel dims of trunk and neck do not match. Trunk: {self.trunk.channel_list}, neck: {self.neck.backbone_channel_list}\"\n\n    def forward(self, sample: torch.Tensor):\n        # Forward through backbone\n        features, pos = self.neck(self.trunk(sample))\n        if self.scalp > 0:\n            # Discard the lowest resolution features\n            features, pos = features[: -self.scalp], pos[: -self.scalp]\n\n        src = features[-1]\n        output = {\n            \"vision_features\": src,\n            \"vision_pos_enc\": pos,\n            \"backbone_fpn\": features,\n        }\n        return output\n\n\nclass FpnNeck(nn.Module):\n    \"\"\"\n    A modified variant of Feature Pyramid Network (FPN) neck\n    (we remove output conv and also do bicubic interpolation similar to ViT\n    pos embed interpolation)\n    \"\"\"\n\n    def __init__(\n        self,\n        position_encoding: nn.Module,\n        d_model: int,\n        backbone_channel_list: List[int],\n        kernel_size: int = 1,\n        stride: int = 1,\n        padding: int = 0,\n        fpn_interp_model: str = \"bilinear\",\n        fuse_type: str = \"sum\",\n        fpn_top_down_levels: Optional[List[int]] = None,\n    ):\n        \"\"\"Initialize the neck\n        :param trunk: the backbone\n        :param position_encoding: the positional encoding to use\n        :param d_model: the dimension of the model\n        :param neck_norm: the normalization to use\n        \"\"\"\n        super().__init__()\n        self.position_encoding = position_encoding\n        self.convs = nn.ModuleList()\n        self.backbone_channel_list = backbone_channel_list\n        self.d_model = d_model\n        for dim in backbone_channel_list:\n            current = nn.Sequential()\n            current.add_module(\n                \"conv\",\n                nn.Conv2d(\n                    in_channels=dim,\n                    out_channels=d_model,\n                    kernel_size=kernel_size,\n                    stride=stride,\n                    padding=padding,\n                ),\n            )\n\n            self.convs.append(current)\n        self.fpn_interp_model = fpn_interp_model\n        assert fuse_type in [\"sum\", \"avg\"]\n        self.fuse_type = fuse_type\n\n        # levels to have top-down features in its outputs\n        # e.g. if fpn_top_down_levels is [2, 3], then only outputs of level 2 and 3\n        # have top-down propagation, while outputs of level 0 and level 1 have only\n        # lateral features from the same backbone level.\n        if fpn_top_down_levels is None:\n            # default is to have top-down features on all levels\n            fpn_top_down_levels = range(len(self.convs))\n        self.fpn_top_down_levels = list(fpn_top_down_levels)\n\n    def forward(self, xs: List[torch.Tensor]):\n\n        out = [None] * len(self.convs)\n        pos = [None] * len(self.convs)\n        assert len(xs) == len(self.convs)\n        # fpn forward pass\n        # see https://github.com/facebookresearch/detectron2/blob/main/detectron2/modeling/backbone/fpn.py\n        prev_features = None\n        # forward in top-down order (from low to high resolution)\n        n = len(self.convs) - 1\n        for i in range(n, -1, -1):\n            x = xs[i]\n            lateral_features = self.convs[n - i](x)\n            if i in self.fpn_top_down_levels and prev_features is not None:\n                top_down_features = F.interpolate(\n                    prev_features.to(dtype=torch.float32),\n                    scale_factor=2.0,\n                    mode=self.fpn_interp_model,\n                    align_corners=(\n                        None if self.fpn_interp_model == \"nearest\" else False\n                    ),\n                    antialias=False,\n                )\n                prev_features = lateral_features + top_down_features\n                if self.fuse_type == \"avg\":\n                    prev_features /= 2\n            else:\n                prev_features = lateral_features\n            x_out = prev_features\n            out[i] = x_out\n            pos[i] = self.position_encoding(x_out).to(x_out.dtype)\n\n        return out, pos\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/modeling/backbones/utils.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\"\"\"Some utilities for backbones, in particular for windowing\"\"\"\n\nfrom typing import Tuple\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\n\ndef window_partition(x, window_size):\n    \"\"\"\n    Partition into non-overlapping windows with padding if needed.\n    Args:\n        x (tensor): input tokens with [B, H, W, C].\n        window_size (int): window size.\n    Returns:\n        windows: windows after partition with [B * num_windows, window_size, window_size, C].\n        (Hp, Wp): padded height and width before partition\n    \"\"\"\n    B, H, W, C = x.shape\n\n    pad_h = (window_size - H % window_size) % window_size\n    pad_w = (window_size - W % window_size) % window_size\n    if pad_h > 0 or pad_w > 0:\n        x = F.pad(x, (0, 0, 0, pad_w, 0, pad_h))\n    Hp, Wp = H + pad_h, W + pad_w\n\n    x = x.view(B, Hp // window_size, window_size, Wp // window_size, window_size, C)\n    windows = (\n        x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size, window_size, C)\n    )\n    return windows, (Hp, Wp)\n\n\ndef window_unpartition(windows, window_size, pad_hw, hw):\n    \"\"\"\n    Window unpartition into original sequences and removing padding.\n    Args:\n        x (tensor): input tokens with [B * num_windows, window_size, window_size, C].\n        window_size (int): window size.\n        pad_hw (Tuple): padded height and width (Hp, Wp).\n        hw (Tuple): original height and width (H, W) before padding.\n    Returns:\n        x: unpartitioned sequences with [B, H, W, C].\n    \"\"\"\n    Hp, Wp = pad_hw\n    H, W = hw\n    B = windows.shape[0] // (Hp * Wp // window_size // window_size)\n    x = windows.view(\n        B, Hp // window_size, Wp // window_size, window_size, window_size, -1\n    )\n    x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, Hp, Wp, -1)\n\n    if Hp > H or Wp > W:\n        x = x[:, :H, :W, :].contiguous()\n    return x\n\n\nclass PatchEmbed(nn.Module):\n    \"\"\"\n    Image to Patch Embedding.\n    \"\"\"\n\n    def __init__(\n        self,\n        kernel_size: Tuple[int, ...] = (7, 7),\n        stride: Tuple[int, ...] = (4, 4),\n        padding: Tuple[int, ...] = (3, 3),\n        in_chans: int = 3,\n        embed_dim: int = 768,\n    ):\n        \"\"\"\n        Args:\n            kernel_size (Tuple): kernel size of the projection layer.\n            stride (Tuple): stride of the projection layer.\n            padding (Tuple): padding size of the projection layer.\n            in_chans (int): Number of input image channels.\n            embed_dim (int):  embed_dim (int): Patch embedding dimension.\n        \"\"\"\n        super().__init__()\n        self.proj = nn.Conv2d(\n            in_chans, embed_dim, kernel_size=kernel_size, stride=stride, padding=padding\n        )\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        x = self.proj(x)\n        # B C H W -> B H W C\n        x = x.permute(0, 2, 3, 1)\n        return x\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/modeling/memory_attention.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom typing import Optional\n\nimport torch\nfrom torch import nn, Tensor\n\nfrom sam2.modeling.sam.transformer import RoPEAttention\n\nfrom sam2.modeling.sam2_utils import get_activation_fn, get_clones\n\n\nclass MemoryAttentionLayer(nn.Module):\n\n    def __init__(\n        self,\n        activation: str,\n        cross_attention: nn.Module,\n        d_model: int,\n        dim_feedforward: int,\n        dropout: float,\n        pos_enc_at_attn: bool,\n        pos_enc_at_cross_attn_keys: bool,\n        pos_enc_at_cross_attn_queries: bool,\n        self_attention: nn.Module,\n    ):\n        super().__init__()\n        self.d_model = d_model\n        self.dim_feedforward = dim_feedforward\n        self.dropout_value = dropout\n        self.self_attn = self_attention\n        self.cross_attn_image = cross_attention\n\n        # Implementation of Feedforward model\n        self.linear1 = nn.Linear(d_model, dim_feedforward)\n        self.dropout = nn.Dropout(dropout)\n        self.linear2 = nn.Linear(dim_feedforward, d_model)\n\n        self.norm1 = nn.LayerNorm(d_model)\n        self.norm2 = nn.LayerNorm(d_model)\n        self.norm3 = nn.LayerNorm(d_model)\n        self.dropout1 = nn.Dropout(dropout)\n        self.dropout2 = nn.Dropout(dropout)\n        self.dropout3 = nn.Dropout(dropout)\n\n        self.activation_str = activation\n        self.activation = get_activation_fn(activation)\n\n        # Where to add pos enc\n        self.pos_enc_at_attn = pos_enc_at_attn\n        self.pos_enc_at_cross_attn_queries = pos_enc_at_cross_attn_queries\n        self.pos_enc_at_cross_attn_keys = pos_enc_at_cross_attn_keys\n\n    def _forward_sa(self, tgt, query_pos):\n        # Self-Attention\n        tgt2 = self.norm1(tgt)\n        q = k = tgt2 + query_pos if self.pos_enc_at_attn else tgt2\n        tgt2 = self.self_attn(q, k, v=tgt2)\n        tgt = tgt + self.dropout1(tgt2)\n        return tgt\n\n    def _forward_ca(self, tgt, memory, query_pos, pos, num_k_exclude_rope=0):\n        kwds = {}\n        if num_k_exclude_rope > 0:\n            assert isinstance(self.cross_attn_image, RoPEAttention)\n            kwds = {\"num_k_exclude_rope\": num_k_exclude_rope}\n\n        # Cross-Attention\n        tgt2 = self.norm2(tgt)\n        tgt2 = self.cross_attn_image(\n            q=tgt2 + query_pos if self.pos_enc_at_cross_attn_queries else tgt2,\n            k=memory + pos if self.pos_enc_at_cross_attn_keys else memory,\n            v=memory,\n            **kwds,\n        )\n        tgt = tgt + self.dropout2(tgt2)\n        return tgt\n\n    def forward(\n        self,\n        tgt,\n        memory,\n        pos: Optional[Tensor] = None,\n        query_pos: Optional[Tensor] = None,\n        num_k_exclude_rope: int = 0,\n    ) -> torch.Tensor:\n\n        # Self-Attn, Cross-Attn\n        tgt = self._forward_sa(tgt, query_pos)\n        tgt = self._forward_ca(tgt, memory, query_pos, pos, num_k_exclude_rope)\n        # MLP\n        tgt2 = self.norm3(tgt)\n        tgt2 = self.linear2(self.dropout(self.activation(self.linear1(tgt2))))\n        tgt = tgt + self.dropout3(tgt2)\n        return tgt\n\n\nclass MemoryAttention(nn.Module):\n    def __init__(\n        self,\n        d_model: int,\n        pos_enc_at_input: bool,\n        layer: nn.Module,\n        num_layers: int,\n        batch_first: bool = True,  # Do layers expect batch first input?\n    ):\n        super().__init__()\n        self.d_model = d_model\n        self.layers = get_clones(layer, num_layers)\n        self.num_layers = num_layers\n        self.norm = nn.LayerNorm(d_model)\n        self.pos_enc_at_input = pos_enc_at_input\n        self.batch_first = batch_first\n\n    def forward(\n        self,\n        curr: torch.Tensor,  # self-attention inputs\n        memory: torch.Tensor,  # cross-attention inputs\n        curr_pos: Optional[Tensor] = None,  # pos_enc for self-attention inputs\n        memory_pos: Optional[Tensor] = None,  # pos_enc for cross-attention inputs\n        num_obj_ptr_tokens: int = 0,  # number of object pointer *tokens*\n    ):\n        if isinstance(curr, list):\n            assert isinstance(curr_pos, list)\n            assert len(curr) == len(curr_pos) == 1\n            curr, curr_pos = (\n                curr[0],\n                curr_pos[0],\n            )\n\n        assert (\n            curr.shape[1] == memory.shape[1]\n        ), \"Batch size must be the same for curr and memory\"\n\n        output = curr\n        if self.pos_enc_at_input and curr_pos is not None:\n            output = output + 0.1 * curr_pos\n\n        if self.batch_first:\n            # Convert to batch first\n            output = output.transpose(0, 1)\n            curr_pos = curr_pos.transpose(0, 1)\n            memory = memory.transpose(0, 1)\n            memory_pos = memory_pos.transpose(0, 1)\n\n        for layer in self.layers:\n            kwds = {}\n            if isinstance(layer.cross_attn_image, RoPEAttention):\n                kwds = {\"num_k_exclude_rope\": num_obj_ptr_tokens}\n\n            output = layer(\n                tgt=output,\n                memory=memory,\n                pos=memory_pos,\n                query_pos=curr_pos,\n                **kwds,\n            )\n        normed_output = self.norm(output)\n\n        if self.batch_first:\n            # Convert back to seq first\n            normed_output = normed_output.transpose(0, 1)\n            curr_pos = curr_pos.transpose(0, 1)\n\n        return normed_output\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/modeling/memory_encoder.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport math\nfrom typing import Tuple\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom sam2.modeling.sam2_utils import DropPath, get_clones, LayerNorm2d\n\n\nclass MaskDownSampler(nn.Module):\n    \"\"\"\n    Progressively downsample a mask by total_stride, each time by stride.\n    Note that LayerNorm is applied per *token*, like in ViT.\n\n    With each downsample (by a factor stride**2), channel capacity increases by the same factor.\n    In the end, we linearly project to embed_dim channels.\n    \"\"\"\n\n    def __init__(\n        self,\n        embed_dim=256,\n        kernel_size=4,\n        stride=4,\n        padding=0,\n        total_stride=16,\n        activation=nn.GELU,\n    ):\n        super().__init__()\n        num_layers = int(math.log2(total_stride) // math.log2(stride))\n        assert stride**num_layers == total_stride\n        self.encoder = nn.Sequential()\n        mask_in_chans, mask_out_chans = 1, 1\n        for _ in range(num_layers):\n            mask_out_chans = mask_in_chans * (stride**2)\n            self.encoder.append(\n                nn.Conv2d(\n                    mask_in_chans,\n                    mask_out_chans,\n                    kernel_size=kernel_size,\n                    stride=stride,\n                    padding=padding,\n                )\n            )\n            self.encoder.append(LayerNorm2d(mask_out_chans))\n            self.encoder.append(activation())\n            mask_in_chans = mask_out_chans\n\n        self.encoder.append(nn.Conv2d(mask_out_chans, embed_dim, kernel_size=1))\n\n    def forward(self, x):\n        return self.encoder(x)\n\n\n# Lightly adapted from ConvNext (https://github.com/facebookresearch/ConvNeXt)\nclass CXBlock(nn.Module):\n    r\"\"\"ConvNeXt Block. There are two equivalent implementations:\n    (1) DwConv -> LayerNorm (channels_first) -> 1x1 Conv -> GELU -> 1x1 Conv; all in (N, C, H, W)\n    (2) DwConv -> Permute to (N, H, W, C); LayerNorm (channels_last) -> Linear -> GELU -> Linear; Permute back\n    We use (2) as we find it slightly faster in PyTorch\n\n    Args:\n        dim (int): Number of input channels.\n        drop_path (float): Stochastic depth rate. Default: 0.0\n        layer_scale_init_value (float): Init value for Layer Scale. Default: 1e-6.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim,\n        kernel_size=7,\n        padding=3,\n        drop_path=0.0,\n        layer_scale_init_value=1e-6,\n        use_dwconv=True,\n    ):\n        super().__init__()\n        self.dwconv = nn.Conv2d(\n            dim,\n            dim,\n            kernel_size=kernel_size,\n            padding=padding,\n            groups=dim if use_dwconv else 1,\n        )  # depthwise conv\n        self.norm = LayerNorm2d(dim, eps=1e-6)\n        self.pwconv1 = nn.Linear(\n            dim, 4 * dim\n        )  # pointwise/1x1 convs, implemented with linear layers\n        self.act = nn.GELU()\n        self.pwconv2 = nn.Linear(4 * dim, dim)\n        self.gamma = (\n            nn.Parameter(layer_scale_init_value * torch.ones((dim)), requires_grad=True)\n            if layer_scale_init_value > 0\n            else None\n        )\n        self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()\n\n    def forward(self, x):\n        input = x\n        x = self.dwconv(x)\n        x = self.norm(x)\n        x = x.permute(0, 2, 3, 1)  # (N, C, H, W) -> (N, H, W, C)\n        x = self.pwconv1(x)\n        x = self.act(x)\n        x = self.pwconv2(x)\n        if self.gamma is not None:\n            x = self.gamma * x\n        x = x.permute(0, 3, 1, 2)  # (N, H, W, C) -> (N, C, H, W)\n\n        x = input + self.drop_path(x)\n        return x\n\n\nclass Fuser(nn.Module):\n    def __init__(self, layer, num_layers, dim=None, input_projection=False):\n        super().__init__()\n        self.proj = nn.Identity()\n        self.layers = get_clones(layer, num_layers)\n\n        if input_projection:\n            assert dim is not None\n            self.proj = nn.Conv2d(dim, dim, kernel_size=1)\n\n    def forward(self, x):\n        # normally x: (N, C, H, W)\n        x = self.proj(x)\n        for layer in self.layers:\n            x = layer(x)\n        return x\n\n\nclass MemoryEncoder(nn.Module):\n    def __init__(\n        self,\n        out_dim,\n        mask_downsampler,\n        fuser,\n        position_encoding,\n        in_dim=256,  # in_dim of pix_feats\n    ):\n        super().__init__()\n\n        self.mask_downsampler = mask_downsampler\n\n        self.pix_feat_proj = nn.Conv2d(in_dim, in_dim, kernel_size=1)\n        self.fuser = fuser\n        self.position_encoding = position_encoding\n        self.out_proj = nn.Identity()\n        if out_dim != in_dim:\n            self.out_proj = nn.Conv2d(in_dim, out_dim, kernel_size=1)\n\n    def forward(\n        self,\n        pix_feat: torch.Tensor,\n        masks: torch.Tensor,\n        skip_mask_sigmoid: bool = False,\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        ## Process masks\n        # sigmoid, so that less domain shift from gt masks which are bool\n        if not skip_mask_sigmoid:\n            masks = F.sigmoid(masks)\n        masks = self.mask_downsampler(masks)\n\n        ## Fuse pix_feats and downsampled masks\n        # in case the visual features are on CPU, cast them to CUDA\n        pix_feat = pix_feat.to(masks.device)\n\n        x = self.pix_feat_proj(pix_feat)\n        x = x + masks\n        x = self.fuser(x)\n        x = self.out_proj(x)\n\n        pos = self.position_encoding(x).to(x.dtype)\n\n        return {\"vision_features\": x, \"vision_pos_enc\": [pos]}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/modeling/position_encoding.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport math\nfrom typing import Any, Optional, Tuple\n\nimport numpy as np\n\nimport torch\nfrom torch import nn\n\n\nclass PositionEmbeddingSine(nn.Module):\n    \"\"\"\n    This is a more standard version of the position embedding, very similar to the one\n    used by the Attention Is All You Need paper, generalized to work on images.\n    \"\"\"\n\n    def __init__(\n        self,\n        num_pos_feats,\n        temperature: int = 10000,\n        normalize: bool = True,\n        scale: Optional[float] = None,\n    ):\n        super().__init__()\n        assert num_pos_feats % 2 == 0, \"Expecting even model width\"\n        self.num_pos_feats = num_pos_feats // 2\n        self.temperature = temperature\n        self.normalize = normalize\n        if scale is not None and normalize is False:\n            raise ValueError(\"normalize should be True if scale is passed\")\n        if scale is None:\n            scale = 2 * math.pi\n        self.scale = scale\n\n        self.cache = {}\n\n    def _encode_xy(self, x, y):\n        # The positions are expected to be normalized\n        assert len(x) == len(y) and x.ndim == y.ndim == 1\n        x_embed = x * self.scale\n        y_embed = y * self.scale\n\n        dim_t = torch.arange(self.num_pos_feats, dtype=torch.float32, device=x.device)\n        dim_t = self.temperature ** (2 * (dim_t // 2) / self.num_pos_feats)\n\n        pos_x = x_embed[:, None] / dim_t\n        pos_y = y_embed[:, None] / dim_t\n        pos_x = torch.stack(\n            (pos_x[:, 0::2].sin(), pos_x[:, 1::2].cos()), dim=2\n        ).flatten(1)\n        pos_y = torch.stack(\n            (pos_y[:, 0::2].sin(), pos_y[:, 1::2].cos()), dim=2\n        ).flatten(1)\n        return pos_x, pos_y\n\n    @torch.no_grad()\n    def encode_boxes(self, x, y, w, h):\n        pos_x, pos_y = self._encode_xy(x, y)\n        pos = torch.cat((pos_y, pos_x, h[:, None], w[:, None]), dim=1)\n        return pos\n\n    encode = encode_boxes  # Backwards compatibility\n\n    @torch.no_grad()\n    def encode_points(self, x, y, labels):\n        (bx, nx), (by, ny), (bl, nl) = x.shape, y.shape, labels.shape\n        assert bx == by and nx == ny and bx == bl and nx == nl\n        pos_x, pos_y = self._encode_xy(x.flatten(), y.flatten())\n        pos_x, pos_y = pos_x.reshape(bx, nx, -1), pos_y.reshape(by, ny, -1)\n        pos = torch.cat((pos_y, pos_x, labels[:, :, None]), dim=2)\n        return pos\n\n    @torch.no_grad()\n    def forward(self, x: torch.Tensor):\n        cache_key = (x.shape[-2], x.shape[-1])\n        if cache_key in self.cache:\n            return self.cache[cache_key][None].repeat(x.shape[0], 1, 1, 1)\n        y_embed = (\n            torch.arange(1, x.shape[-2] + 1, dtype=torch.float32, device=x.device)\n            .view(1, -1, 1)\n            .repeat(x.shape[0], 1, x.shape[-1])\n        )\n        x_embed = (\n            torch.arange(1, x.shape[-1] + 1, dtype=torch.float32, device=x.device)\n            .view(1, 1, -1)\n            .repeat(x.shape[0], x.shape[-2], 1)\n        )\n\n        if self.normalize:\n            eps = 1e-6\n            y_embed = y_embed / (y_embed[:, -1:, :] + eps) * self.scale\n            x_embed = x_embed / (x_embed[:, :, -1:] + eps) * self.scale\n\n        dim_t = torch.arange(self.num_pos_feats, dtype=torch.float32, device=x.device)\n        dim_t = self.temperature ** (2 * (dim_t // 2) / self.num_pos_feats)\n\n        pos_x = x_embed[:, :, :, None] / dim_t\n        pos_y = y_embed[:, :, :, None] / dim_t\n        pos_x = torch.stack(\n            (pos_x[:, :, :, 0::2].sin(), pos_x[:, :, :, 1::2].cos()), dim=4\n        ).flatten(3)\n        pos_y = torch.stack(\n            (pos_y[:, :, :, 0::2].sin(), pos_y[:, :, :, 1::2].cos()), dim=4\n        ).flatten(3)\n        pos = torch.cat((pos_y, pos_x), dim=3).permute(0, 3, 1, 2)\n        self.cache[cache_key] = pos[0]\n        return pos\n\n\nclass PositionEmbeddingRandom(nn.Module):\n    \"\"\"\n    Positional encoding using random spatial frequencies.\n    \"\"\"\n\n    def __init__(self, num_pos_feats: int = 64, scale: Optional[float] = None) -> None:\n        super().__init__()\n        if scale is None or scale <= 0.0:\n            scale = 1.0\n        self.register_buffer(\n            \"positional_encoding_gaussian_matrix\",\n            scale * torch.randn((2, num_pos_feats)),\n        )\n\n    def _pe_encoding(self, coords: torch.Tensor) -> torch.Tensor:\n        \"\"\"Positionally encode points that are normalized to [0,1].\"\"\"\n        # assuming coords are in [0, 1]^2 square and have d_1 x ... x d_n x 2 shape\n        coords = 2 * coords - 1\n        coords = coords @ self.positional_encoding_gaussian_matrix\n        coords = 2 * np.pi * coords\n        # outputs d_1 x ... x d_n x C shape\n        return torch.cat([torch.sin(coords), torch.cos(coords)], dim=-1)\n\n    def forward(self, size: Tuple[int, int]) -> torch.Tensor:\n        \"\"\"Generate positional encoding for a grid of the specified size.\"\"\"\n        h, w = size\n        device: Any = self.positional_encoding_gaussian_matrix.device\n        grid = torch.ones((h, w), device=device, dtype=torch.float32)\n        y_embed = grid.cumsum(dim=0) - 0.5\n        x_embed = grid.cumsum(dim=1) - 0.5\n        y_embed = y_embed / h\n        x_embed = x_embed / w\n\n        pe = self._pe_encoding(torch.stack([x_embed, y_embed], dim=-1))\n        return pe.permute(2, 0, 1)  # C x H x W\n\n    def forward_with_coords(\n        self, coords_input: torch.Tensor, image_size: Tuple[int, int]\n    ) -> torch.Tensor:\n        \"\"\"Positionally encode points that are not normalized to [0,1].\"\"\"\n        coords = coords_input.clone()\n        coords[:, :, 0] = coords[:, :, 0] / image_size[1]\n        coords[:, :, 1] = coords[:, :, 1] / image_size[0]\n        return self._pe_encoding(coords.to(torch.float))  # B x N x C\n\n\n# Rotary Positional Encoding, adapted from:\n# 1. https://github.com/meta-llama/codellama/blob/main/llama/model.py\n# 2. https://github.com/naver-ai/rope-vit\n# 3. https://github.com/lucidrains/rotary-embedding-torch\n\n\ndef init_t_xy(end_x: int, end_y: int):\n    t = torch.arange(end_x * end_y, dtype=torch.float32)\n    t_x = (t % end_x).float()\n    t_y = torch.div(t, end_x, rounding_mode=\"floor\").float()\n    return t_x, t_y\n\n\ndef compute_axial_cis(dim: int, end_x: int, end_y: int, theta: float = 10000.0):\n    freqs_x = 1.0 / (theta ** (torch.arange(0, dim, 4)[: (dim // 4)].float() / dim))\n    freqs_y = 1.0 / (theta ** (torch.arange(0, dim, 4)[: (dim // 4)].float() / dim))\n\n    t_x, t_y = init_t_xy(end_x, end_y)\n    freqs_x = torch.outer(t_x, freqs_x)\n    freqs_y = torch.outer(t_y, freqs_y)\n    freqs_cis_x = torch.polar(torch.ones_like(freqs_x), freqs_x)\n    freqs_cis_y = torch.polar(torch.ones_like(freqs_y), freqs_y)\n    return torch.cat([freqs_cis_x, freqs_cis_y], dim=-1)\n\n\ndef reshape_for_broadcast(freqs_cis: torch.Tensor, x: torch.Tensor):\n    ndim = x.ndim\n    assert 0 <= 1 < ndim\n    assert freqs_cis.shape == (x.shape[-2], x.shape[-1])\n    shape = [d if i >= ndim - 2 else 1 for i, d in enumerate(x.shape)]\n    return freqs_cis.view(*shape)\n\n\ndef apply_rotary_enc(\n    xq: torch.Tensor,\n    xk: torch.Tensor,\n    freqs_cis: torch.Tensor,\n    repeat_freqs_k: bool = False,\n):\n    xq_ = torch.view_as_complex(xq.float().reshape(*xq.shape[:-1], -1, 2))\n    xk_ = (\n        torch.view_as_complex(xk.float().reshape(*xk.shape[:-1], -1, 2))\n        if xk.shape[-2] != 0\n        else None\n    )\n    freqs_cis = reshape_for_broadcast(freqs_cis, xq_)\n    xq_out = torch.view_as_real(xq_ * freqs_cis).flatten(3)\n    if xk_ is None:\n        # no keys to rotate, due to dropout\n        return xq_out.type_as(xq).to(xq.device), xk\n    # repeat freqs along seq_len dim to match k seq_len\n    if repeat_freqs_k:\n        r = xk_.shape[-2] // xq_.shape[-2]\n        if freqs_cis.is_cuda:\n            freqs_cis = freqs_cis.repeat(*([1] * (freqs_cis.ndim - 2)), r, 1)\n        else:\n            # torch.repeat on complex numbers may not be supported on non-CUDA devices\n            # (freqs_cis has 4 dims and we repeat on dim 2) so we use expand + flatten\n            freqs_cis = freqs_cis.unsqueeze(2).expand(-1, -1, r, -1, -1).flatten(2, 3)\n    xk_out = torch.view_as_real(xk_ * freqs_cis).flatten(3)\n    return xq_out.type_as(xq).to(xq.device), xk_out.type_as(xk).to(xk.device)\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/modeling/sam/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/modeling/sam/mask_decoder.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom typing import List, Optional, Tuple, Type\n\nimport torch\nfrom torch import nn\n\nfrom sam2.modeling.sam2_utils import LayerNorm2d, MLP\n\n\nclass MaskDecoder(nn.Module):\n    def __init__(\n        self,\n        *,\n        transformer_dim: int,\n        transformer: nn.Module,\n        num_multimask_outputs: int = 3,\n        activation: Type[nn.Module] = nn.GELU,\n        iou_head_depth: int = 3,\n        iou_head_hidden_dim: int = 256,\n        use_high_res_features: bool = False,\n        iou_prediction_use_sigmoid=False,\n        dynamic_multimask_via_stability=False,\n        dynamic_multimask_stability_delta=0.05,\n        dynamic_multimask_stability_thresh=0.98,\n        pred_obj_scores: bool = False,\n        pred_obj_scores_mlp: bool = False,\n        use_multimask_token_for_obj_ptr: bool = False,\n    ) -> None:\n        \"\"\"\n        Predicts masks given an image and prompt embeddings, using a\n        transformer architecture.\n\n        Arguments:\n          transformer_dim (int): the channel dimension of the transformer\n          transformer (nn.Module): the transformer used to predict masks\n          num_multimask_outputs (int): the number of masks to predict\n            when disambiguating masks\n          activation (nn.Module): the type of activation to use when\n            upscaling masks\n          iou_head_depth (int): the depth of the MLP used to predict\n            mask quality\n          iou_head_hidden_dim (int): the hidden dimension of the MLP\n            used to predict mask quality\n        \"\"\"\n        super().__init__()\n        self.transformer_dim = transformer_dim\n        self.transformer = transformer\n\n        self.num_multimask_outputs = num_multimask_outputs\n\n        self.iou_token = nn.Embedding(1, transformer_dim)\n        self.num_mask_tokens = num_multimask_outputs + 1\n        self.mask_tokens = nn.Embedding(self.num_mask_tokens, transformer_dim)\n\n        self.pred_obj_scores = pred_obj_scores\n        if self.pred_obj_scores:\n            self.obj_score_token = nn.Embedding(1, transformer_dim)\n        self.use_multimask_token_for_obj_ptr = use_multimask_token_for_obj_ptr\n\n        self.output_upscaling = nn.Sequential(\n            nn.ConvTranspose2d(\n                transformer_dim, transformer_dim // 4, kernel_size=2, stride=2\n            ),\n            LayerNorm2d(transformer_dim // 4),\n            activation(),\n            nn.ConvTranspose2d(\n                transformer_dim // 4, transformer_dim // 8, kernel_size=2, stride=2\n            ),\n            activation(),\n        )\n        self.use_high_res_features = use_high_res_features\n        if use_high_res_features:\n            self.conv_s0 = nn.Conv2d(\n                transformer_dim, transformer_dim // 8, kernel_size=1, stride=1\n            )\n            self.conv_s1 = nn.Conv2d(\n                transformer_dim, transformer_dim // 4, kernel_size=1, stride=1\n            )\n\n        self.output_hypernetworks_mlps = nn.ModuleList(\n            [\n                MLP(transformer_dim, transformer_dim, transformer_dim // 8, 3)\n                for i in range(self.num_mask_tokens)\n            ]\n        )\n\n        self.iou_prediction_head = MLP(\n            transformer_dim,\n            iou_head_hidden_dim,\n            self.num_mask_tokens,\n            iou_head_depth,\n            sigmoid_output=iou_prediction_use_sigmoid,\n        )\n        if self.pred_obj_scores:\n            self.pred_obj_score_head = nn.Linear(transformer_dim, 1)\n            if pred_obj_scores_mlp:\n                self.pred_obj_score_head = MLP(transformer_dim, transformer_dim, 1, 3)\n\n        # When outputting a single mask, optionally we can dynamically fall back to the best\n        # multimask output token if the single mask output token gives low stability scores.\n        self.dynamic_multimask_via_stability = dynamic_multimask_via_stability\n        self.dynamic_multimask_stability_delta = dynamic_multimask_stability_delta\n        self.dynamic_multimask_stability_thresh = dynamic_multimask_stability_thresh\n\n    def forward(\n        self,\n        image_embeddings: torch.Tensor,\n        image_pe: torch.Tensor,\n        sparse_prompt_embeddings: torch.Tensor,\n        dense_prompt_embeddings: torch.Tensor,\n        multimask_output: bool,\n        repeat_image: bool,\n        high_res_features: Optional[List[torch.Tensor]] = None,\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"\n        Predict masks given image and prompt embeddings.\n\n        Arguments:\n          image_embeddings (torch.Tensor): the embeddings from the image encoder\n          image_pe (torch.Tensor): positional encoding with the shape of image_embeddings\n          sparse_prompt_embeddings (torch.Tensor): the embeddings of the points and boxes\n          dense_prompt_embeddings (torch.Tensor): the embeddings of the mask inputs\n          multimask_output (bool): Whether to return multiple masks or a single\n            mask.\n\n        Returns:\n          torch.Tensor: batched predicted masks\n          torch.Tensor: batched predictions of mask quality\n          torch.Tensor: batched SAM token for mask output\n        \"\"\"\n        masks, iou_pred, mask_tokens_out, object_score_logits = self.predict_masks(\n            image_embeddings=image_embeddings,\n            image_pe=image_pe,\n            sparse_prompt_embeddings=sparse_prompt_embeddings,\n            dense_prompt_embeddings=dense_prompt_embeddings,\n            repeat_image=repeat_image,\n            high_res_features=high_res_features,\n        )\n\n        # Select the correct mask or masks for output\n        if multimask_output:\n            masks = masks[:, 1:, :, :]\n            iou_pred = iou_pred[:, 1:]\n        elif self.dynamic_multimask_via_stability and not self.training:\n            masks, iou_pred = self._dynamic_multimask_via_stability(masks, iou_pred)\n        else:\n            masks = masks[:, 0:1, :, :]\n            iou_pred = iou_pred[:, 0:1]\n\n        if multimask_output and self.use_multimask_token_for_obj_ptr:\n            sam_tokens_out = mask_tokens_out[:, 1:]  # [b, 3, c] shape\n        else:\n            # Take the mask output token. Here we *always* use the token for single mask output.\n            # At test time, even if we track after 1-click (and using multimask_output=True),\n            # we still take the single mask token here. The rationale is that we always track\n            # after multiple clicks during training, so the past tokens seen during training\n            # are always the single mask token (and we'll let it be the object-memory token).\n            sam_tokens_out = mask_tokens_out[:, 0:1]  # [b, 1, c] shape\n\n        # Prepare output\n        return masks, iou_pred, sam_tokens_out, object_score_logits\n\n    def predict_masks(\n        self,\n        image_embeddings: torch.Tensor,\n        image_pe: torch.Tensor,\n        sparse_prompt_embeddings: torch.Tensor,\n        dense_prompt_embeddings: torch.Tensor,\n        repeat_image: bool,\n        high_res_features: Optional[List[torch.Tensor]] = None,\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Predicts masks. See 'forward' for more details.\"\"\"\n        # Concatenate output tokens\n        s = 0\n        if self.pred_obj_scores:\n            output_tokens = torch.cat(\n                [\n                    self.obj_score_token.weight,\n                    self.iou_token.weight,\n                    self.mask_tokens.weight,\n                ],\n                dim=0,\n            )\n            s = 1\n        else:\n            output_tokens = torch.cat(\n                [self.iou_token.weight, self.mask_tokens.weight], dim=0\n            )\n        output_tokens = output_tokens.unsqueeze(0).expand(\n            sparse_prompt_embeddings.size(0), -1, -1\n        )\n        tokens = torch.cat((output_tokens, sparse_prompt_embeddings), dim=1)\n\n        # Expand per-image data in batch direction to be per-mask\n        if repeat_image:\n            src = torch.repeat_interleave(image_embeddings, tokens.shape[0], dim=0)\n        else:\n            assert image_embeddings.shape[0] == tokens.shape[0]\n            src = image_embeddings\n        src = src + dense_prompt_embeddings\n        assert (\n            image_pe.size(0) == 1\n        ), \"image_pe should have size 1 in batch dim (from `get_dense_pe()`)\"\n        pos_src = torch.repeat_interleave(image_pe, tokens.shape[0], dim=0)\n        b, c, h, w = src.shape\n\n        # Run the transformer\n        hs, src = self.transformer(src, pos_src, tokens)\n        iou_token_out = hs[:, s, :]\n        mask_tokens_out = hs[:, s + 1 : (s + 1 + self.num_mask_tokens), :]\n\n        # Upscale mask embeddings and predict masks using the mask tokens\n        src = src.transpose(1, 2).view(b, c, h, w)\n        if not self.use_high_res_features:\n            upscaled_embedding = self.output_upscaling(src)\n        else:\n            dc1, ln1, act1, dc2, act2 = self.output_upscaling\n            feat_s0, feat_s1 = high_res_features\n            upscaled_embedding = act1(ln1(dc1(src) + feat_s1))\n            upscaled_embedding = act2(dc2(upscaled_embedding) + feat_s0)\n\n        hyper_in_list: List[torch.Tensor] = []\n        for i in range(self.num_mask_tokens):\n            hyper_in_list.append(\n                self.output_hypernetworks_mlps[i](mask_tokens_out[:, i, :])\n            )\n        hyper_in = torch.stack(hyper_in_list, dim=1)\n        b, c, h, w = upscaled_embedding.shape\n        masks = (hyper_in @ upscaled_embedding.view(b, c, h * w)).view(b, -1, h, w)\n\n        # Generate mask quality predictions\n        iou_pred = self.iou_prediction_head(iou_token_out)\n        if self.pred_obj_scores:\n            assert s == 1\n            object_score_logits = self.pred_obj_score_head(hs[:, 0, :])\n        else:\n            # Obj scores logits - default to 10.0, i.e. assuming the object is present, sigmoid(10)=1\n            object_score_logits = 10.0 * iou_pred.new_ones(iou_pred.shape[0], 1)\n\n        return masks, iou_pred, mask_tokens_out, object_score_logits\n\n    def _get_stability_scores(self, mask_logits):\n        \"\"\"\n        Compute stability scores of the mask logits based on the IoU between upper and\n        lower thresholds.\n        \"\"\"\n        mask_logits = mask_logits.flatten(-2)\n        stability_delta = self.dynamic_multimask_stability_delta\n        area_i = torch.sum(mask_logits > stability_delta, dim=-1).float()\n        area_u = torch.sum(mask_logits > -stability_delta, dim=-1).float()\n        stability_scores = torch.where(area_u > 0, area_i / area_u, 1.0)\n        return stability_scores\n\n    def _dynamic_multimask_via_stability(self, all_mask_logits, all_iou_scores):\n        \"\"\"\n        When outputting a single mask, if the stability score from the current single-mask\n        output (based on output token 0) falls below a threshold, we instead select from\n        multi-mask outputs (based on output token 1~3) the mask with the highest predicted\n        IoU score. This is intended to ensure a valid mask for both clicking and tracking.\n        \"\"\"\n        # The best mask from multimask output tokens (1~3)\n        multimask_logits = all_mask_logits[:, 1:, :, :]\n        multimask_iou_scores = all_iou_scores[:, 1:]\n        best_scores_inds = torch.argmax(multimask_iou_scores, dim=-1)\n        batch_inds = torch.arange(\n            multimask_iou_scores.size(0), device=all_iou_scores.device\n        )\n        best_multimask_logits = multimask_logits[batch_inds, best_scores_inds]\n        best_multimask_logits = best_multimask_logits.unsqueeze(1)\n        best_multimask_iou_scores = multimask_iou_scores[batch_inds, best_scores_inds]\n        best_multimask_iou_scores = best_multimask_iou_scores.unsqueeze(1)\n\n        # The mask from singlemask output token 0 and its stability score\n        singlemask_logits = all_mask_logits[:, 0:1, :, :]\n        singlemask_iou_scores = all_iou_scores[:, 0:1]\n        stability_scores = self._get_stability_scores(singlemask_logits)\n        is_stable = stability_scores >= self.dynamic_multimask_stability_thresh\n\n        # Dynamically fall back to best multimask output upon low stability scores.\n        mask_logits_out = torch.where(\n            is_stable[..., None, None].expand_as(singlemask_logits),\n            singlemask_logits,\n            best_multimask_logits,\n        )\n        iou_scores_out = torch.where(\n            is_stable.expand_as(singlemask_iou_scores),\n            singlemask_iou_scores,\n            best_multimask_iou_scores,\n        )\n        return mask_logits_out, iou_scores_out\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/modeling/sam/prompt_encoder.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom typing import Optional, Tuple, Type\n\nimport torch\nfrom torch import nn\n\nfrom sam2.modeling.position_encoding import PositionEmbeddingRandom\n\nfrom sam2.modeling.sam2_utils import LayerNorm2d\n\n\nclass PromptEncoder(nn.Module):\n    def __init__(\n        self,\n        embed_dim: int,\n        image_embedding_size: Tuple[int, int],\n        input_image_size: Tuple[int, int],\n        mask_in_chans: int,\n        activation: Type[nn.Module] = nn.GELU,\n    ) -> None:\n        \"\"\"\n        Encodes prompts for input to SAM's mask decoder.\n\n        Arguments:\n          embed_dim (int): The prompts' embedding dimension\n          image_embedding_size (tuple(int, int)): The spatial size of the\n            image embedding, as (H, W).\n          input_image_size (int): The padded size of the image as input\n            to the image encoder, as (H, W).\n          mask_in_chans (int): The number of hidden channels used for\n            encoding input masks.\n          activation (nn.Module): The activation to use when encoding\n            input masks.\n        \"\"\"\n        super().__init__()\n        self.embed_dim = embed_dim\n        self.input_image_size = input_image_size\n        self.image_embedding_size = image_embedding_size\n        self.pe_layer = PositionEmbeddingRandom(embed_dim // 2)\n\n        self.num_point_embeddings: int = 4  # pos/neg point + 2 box corners\n        point_embeddings = [\n            nn.Embedding(1, embed_dim) for i in range(self.num_point_embeddings)\n        ]\n        self.point_embeddings = nn.ModuleList(point_embeddings)\n        self.not_a_point_embed = nn.Embedding(1, embed_dim)\n\n        self.mask_input_size = (\n            4 * image_embedding_size[0],\n            4 * image_embedding_size[1],\n        )\n        self.mask_downscaling = nn.Sequential(\n            nn.Conv2d(1, mask_in_chans // 4, kernel_size=2, stride=2),\n            LayerNorm2d(mask_in_chans // 4),\n            activation(),\n            nn.Conv2d(mask_in_chans // 4, mask_in_chans, kernel_size=2, stride=2),\n            LayerNorm2d(mask_in_chans),\n            activation(),\n            nn.Conv2d(mask_in_chans, embed_dim, kernel_size=1),\n        )\n        self.no_mask_embed = nn.Embedding(1, embed_dim)\n\n    def get_dense_pe(self) -> torch.Tensor:\n        \"\"\"\n        Returns the positional encoding used to encode point prompts,\n        applied to a dense set of points the shape of the image encoding.\n\n        Returns:\n          torch.Tensor: Positional encoding with shape\n            1x(embed_dim)x(embedding_h)x(embedding_w)\n        \"\"\"\n        return self.pe_layer(self.image_embedding_size).unsqueeze(0)\n\n    def _embed_points(\n        self,\n        points: torch.Tensor,\n        labels: torch.Tensor,\n        pad: bool,\n    ) -> torch.Tensor:\n        \"\"\"Embeds point prompts.\"\"\"\n        points = points + 0.5  # Shift to center of pixel\n        if pad:\n            padding_point = torch.zeros((points.shape[0], 1, 2), device=points.device)\n            padding_label = -torch.ones((labels.shape[0], 1), device=labels.device)\n            points = torch.cat([points, padding_point], dim=1)\n            labels = torch.cat([labels, padding_label], dim=1)\n        point_embedding = self.pe_layer.forward_with_coords(\n            points, self.input_image_size\n        )\n        point_embedding[labels == -1] = 0.0\n        point_embedding[labels == -1] += self.not_a_point_embed.weight\n        point_embedding[labels == 0] += self.point_embeddings[0].weight\n        point_embedding[labels == 1] += self.point_embeddings[1].weight\n        point_embedding[labels == 2] += self.point_embeddings[2].weight\n        point_embedding[labels == 3] += self.point_embeddings[3].weight\n        return point_embedding\n\n    def _embed_boxes(self, boxes: torch.Tensor) -> torch.Tensor:\n        \"\"\"Embeds box prompts.\"\"\"\n        boxes = boxes + 0.5  # Shift to center of pixel\n        coords = boxes.reshape(-1, 2, 2)\n        corner_embedding = self.pe_layer.forward_with_coords(\n            coords, self.input_image_size\n        )\n        corner_embedding[:, 0, :] += self.point_embeddings[2].weight\n        corner_embedding[:, 1, :] += self.point_embeddings[3].weight\n        return corner_embedding\n\n    def _embed_masks(self, masks: torch.Tensor) -> torch.Tensor:\n        \"\"\"Embeds mask inputs.\"\"\"\n        mask_embedding = self.mask_downscaling(masks)\n        return mask_embedding\n\n    def _get_batch_size(\n        self,\n        points: Optional[Tuple[torch.Tensor, torch.Tensor]],\n        boxes: Optional[torch.Tensor],\n        masks: Optional[torch.Tensor],\n    ) -> int:\n        \"\"\"\n        Gets the batch size of the output given the batch size of the input prompts.\n        \"\"\"\n        if points is not None:\n            return points[0].shape[0]\n        elif boxes is not None:\n            return boxes.shape[0]\n        elif masks is not None:\n            return masks.shape[0]\n        else:\n            return 1\n\n    def _get_device(self) -> torch.device:\n        return self.point_embeddings[0].weight.device\n\n    def forward(\n        self,\n        points: Optional[Tuple[torch.Tensor, torch.Tensor]],\n        boxes: Optional[torch.Tensor],\n        masks: Optional[torch.Tensor],\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"\n        Embeds different types of prompts, returning both sparse and dense\n        embeddings.\n\n        Arguments:\n          points (tuple(torch.Tensor, torch.Tensor) or none): point coordinates\n            and labels to embed.\n          boxes (torch.Tensor or none): boxes to embed\n          masks (torch.Tensor or none): masks to embed\n\n        Returns:\n          torch.Tensor: sparse embeddings for the points and boxes, with shape\n            BxNx(embed_dim), where N is determined by the number of input points\n            and boxes.\n          torch.Tensor: dense embeddings for the masks, in the shape\n            Bx(embed_dim)x(embed_H)x(embed_W)\n        \"\"\"\n        bs = self._get_batch_size(points, boxes, masks)\n        sparse_embeddings = torch.empty(\n            (bs, 0, self.embed_dim), device=self._get_device()\n        )\n        if points is not None:\n            coords, labels = points\n            point_embeddings = self._embed_points(coords, labels, pad=(boxes is None))\n            sparse_embeddings = torch.cat([sparse_embeddings, point_embeddings], dim=1)\n        if boxes is not None:\n            box_embeddings = self._embed_boxes(boxes)\n            sparse_embeddings = torch.cat([sparse_embeddings, box_embeddings], dim=1)\n\n        if masks is not None:\n            dense_embeddings = self._embed_masks(masks)\n        else:\n            dense_embeddings = self.no_mask_embed.weight.reshape(1, -1, 1, 1).expand(\n                bs, -1, self.image_embedding_size[0], self.image_embedding_size[1]\n            )\n\n        return sparse_embeddings, dense_embeddings\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/modeling/sam/transformer.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport contextlib\nimport math\nimport warnings\nfrom functools import partial\nfrom typing import Tuple, Type\n\nimport torch\nimport torch.nn.functional as F\nfrom torch import nn, Tensor\n\nfrom sam2.modeling.position_encoding import apply_rotary_enc, compute_axial_cis\nfrom sam2.modeling.sam2_utils import MLP\nfrom sam2.utils.misc import get_sdpa_settings\n\nwarnings.simplefilter(action=\"ignore\", category=FutureWarning)\n# Check whether Flash Attention is available (and use it by default)\nOLD_GPU, USE_FLASH_ATTN, MATH_KERNEL_ON = get_sdpa_settings()\n# A fallback setting to allow all available kernels if Flash Attention fails\nALLOW_ALL_KERNELS = False\n\n\ndef sdp_kernel_context(dropout_p):\n    \"\"\"\n    Get the context for the attention scaled dot-product kernel. We use Flash Attention\n    by default, but fall back to all available kernels if Flash Attention fails.\n    \"\"\"\n    if ALLOW_ALL_KERNELS:\n        return contextlib.nullcontext()\n\n    return torch.backends.cuda.sdp_kernel(\n        enable_flash=USE_FLASH_ATTN,\n        # if Flash attention kernel is off, then math kernel needs to be enabled\n        enable_math=(OLD_GPU and dropout_p > 0.0) or MATH_KERNEL_ON,\n        enable_mem_efficient=OLD_GPU,\n    )\n\n\nclass TwoWayTransformer(nn.Module):\n    def __init__(\n        self,\n        depth: int,\n        embedding_dim: int,\n        num_heads: int,\n        mlp_dim: int,\n        activation: Type[nn.Module] = nn.ReLU,\n        attention_downsample_rate: int = 2,\n    ) -> None:\n        \"\"\"\n        A transformer decoder that attends to an input image using\n        queries whose positional embedding is supplied.\n\n        Args:\n          depth (int): number of layers in the transformer\n          embedding_dim (int): the channel dimension for the input embeddings\n          num_heads (int): the number of heads for multihead attention. Must\n            divide embedding_dim\n          mlp_dim (int): the channel dimension internal to the MLP block\n          activation (nn.Module): the activation to use in the MLP block\n        \"\"\"\n        super().__init__()\n        self.depth = depth\n        self.embedding_dim = embedding_dim\n        self.num_heads = num_heads\n        self.mlp_dim = mlp_dim\n        self.layers = nn.ModuleList()\n\n        for i in range(depth):\n            self.layers.append(\n                TwoWayAttentionBlock(\n                    embedding_dim=embedding_dim,\n                    num_heads=num_heads,\n                    mlp_dim=mlp_dim,\n                    activation=activation,\n                    attention_downsample_rate=attention_downsample_rate,\n                    skip_first_layer_pe=(i == 0),\n                )\n            )\n\n        self.final_attn_token_to_image = Attention(\n            embedding_dim, num_heads, downsample_rate=attention_downsample_rate\n        )\n        self.norm_final_attn = nn.LayerNorm(embedding_dim)\n\n    def forward(\n        self,\n        image_embedding: Tensor,\n        image_pe: Tensor,\n        point_embedding: Tensor,\n    ) -> Tuple[Tensor, Tensor]:\n        \"\"\"\n        Args:\n          image_embedding (torch.Tensor): image to attend to. Should be shape\n            B x embedding_dim x h x w for any h and w.\n          image_pe (torch.Tensor): the positional encoding to add to the image. Must\n            have the same shape as image_embedding.\n          point_embedding (torch.Tensor): the embedding to add to the query points.\n            Must have shape B x N_points x embedding_dim for any N_points.\n\n        Returns:\n          torch.Tensor: the processed point_embedding\n          torch.Tensor: the processed image_embedding\n        \"\"\"\n        # BxCxHxW -> BxHWxC == B x N_image_tokens x C\n        bs, c, h, w = image_embedding.shape\n        image_embedding = image_embedding.flatten(2).permute(0, 2, 1)\n        image_pe = image_pe.flatten(2).permute(0, 2, 1)\n\n        # Prepare queries\n        queries = point_embedding\n        keys = image_embedding\n\n        # Apply transformer blocks and final layernorm\n        for layer in self.layers:\n            queries, keys = layer(\n                queries=queries,\n                keys=keys,\n                query_pe=point_embedding,\n                key_pe=image_pe,\n            )\n\n        # Apply the final attention layer from the points to the image\n        q = queries + point_embedding\n        k = keys + image_pe\n        attn_out = self.final_attn_token_to_image(q=q, k=k, v=keys)\n        queries = queries + attn_out\n        queries = self.norm_final_attn(queries)\n\n        return queries, keys\n\n\nclass TwoWayAttentionBlock(nn.Module):\n    def __init__(\n        self,\n        embedding_dim: int,\n        num_heads: int,\n        mlp_dim: int = 2048,\n        activation: Type[nn.Module] = nn.ReLU,\n        attention_downsample_rate: int = 2,\n        skip_first_layer_pe: bool = False,\n    ) -> None:\n        \"\"\"\n        A transformer block with four layers: (1) self-attention of sparse\n        inputs, (2) cross attention of sparse inputs to dense inputs, (3) mlp\n        block on sparse inputs, and (4) cross attention of dense inputs to sparse\n        inputs.\n\n        Arguments:\n          embedding_dim (int): the channel dimension of the embeddings\n          num_heads (int): the number of heads in the attention layers\n          mlp_dim (int): the hidden dimension of the mlp block\n          activation (nn.Module): the activation of the mlp block\n          skip_first_layer_pe (bool): skip the PE on the first layer\n        \"\"\"\n        super().__init__()\n        self.self_attn = Attention(embedding_dim, num_heads)\n        self.norm1 = nn.LayerNorm(embedding_dim)\n\n        self.cross_attn_token_to_image = Attention(\n            embedding_dim, num_heads, downsample_rate=attention_downsample_rate\n        )\n        self.norm2 = nn.LayerNorm(embedding_dim)\n\n        self.mlp = MLP(\n            embedding_dim, mlp_dim, embedding_dim, num_layers=2, activation=activation\n        )\n        self.norm3 = nn.LayerNorm(embedding_dim)\n\n        self.norm4 = nn.LayerNorm(embedding_dim)\n        self.cross_attn_image_to_token = Attention(\n            embedding_dim, num_heads, downsample_rate=attention_downsample_rate\n        )\n\n        self.skip_first_layer_pe = skip_first_layer_pe\n\n    def forward(\n        self, queries: Tensor, keys: Tensor, query_pe: Tensor, key_pe: Tensor\n    ) -> Tuple[Tensor, Tensor]:\n        # Self attention block\n        if self.skip_first_layer_pe:\n            queries = self.self_attn(q=queries, k=queries, v=queries)\n        else:\n            q = queries + query_pe\n            attn_out = self.self_attn(q=q, k=q, v=queries)\n            queries = queries + attn_out\n        queries = self.norm1(queries)\n\n        # Cross attention block, tokens attending to image embedding\n        q = queries + query_pe\n        k = keys + key_pe\n        attn_out = self.cross_attn_token_to_image(q=q, k=k, v=keys)\n        queries = queries + attn_out\n        queries = self.norm2(queries)\n\n        # MLP block\n        mlp_out = self.mlp(queries)\n        queries = queries + mlp_out\n        queries = self.norm3(queries)\n\n        # Cross attention block, image embedding attending to tokens\n        q = queries + query_pe\n        k = keys + key_pe\n        attn_out = self.cross_attn_image_to_token(q=k, k=q, v=queries)\n        keys = keys + attn_out\n        keys = self.norm4(keys)\n\n        return queries, keys\n\n\nclass Attention(nn.Module):\n    \"\"\"\n    An attention layer that allows for downscaling the size of the embedding\n    after projection to queries, keys, and values.\n    \"\"\"\n\n    def __init__(\n        self,\n        embedding_dim: int,\n        num_heads: int,\n        downsample_rate: int = 1,\n        dropout: float = 0.0,\n        kv_in_dim: int = None,\n    ) -> None:\n        super().__init__()\n        self.embedding_dim = embedding_dim\n        self.kv_in_dim = kv_in_dim if kv_in_dim is not None else embedding_dim\n        self.internal_dim = embedding_dim // downsample_rate\n        self.num_heads = num_heads\n        assert (\n            self.internal_dim % num_heads == 0\n        ), \"num_heads must divide embedding_dim.\"\n\n        self.q_proj = nn.Linear(embedding_dim, self.internal_dim)\n        self.k_proj = nn.Linear(self.kv_in_dim, self.internal_dim)\n        self.v_proj = nn.Linear(self.kv_in_dim, self.internal_dim)\n        self.out_proj = nn.Linear(self.internal_dim, embedding_dim)\n\n        self.dropout_p = dropout\n\n    def _separate_heads(self, x: Tensor, num_heads: int) -> Tensor:\n        b, n, c = x.shape\n        x = x.reshape(b, n, num_heads, c // num_heads)\n        return x.transpose(1, 2)  # B x N_heads x N_tokens x C_per_head\n\n    def _recombine_heads(self, x: Tensor) -> Tensor:\n        b, n_heads, n_tokens, c_per_head = x.shape\n        x = x.transpose(1, 2)\n        return x.reshape(b, n_tokens, n_heads * c_per_head)  # B x N_tokens x C\n\n    def forward(self, q: Tensor, k: Tensor, v: Tensor) -> Tensor:\n        # Input projections\n        q = self.q_proj(q)\n        k = self.k_proj(k)\n        v = self.v_proj(v)\n\n        # Separate into heads\n        q = self._separate_heads(q, self.num_heads)\n        k = self._separate_heads(k, self.num_heads)\n        v = self._separate_heads(v, self.num_heads)\n\n        dropout_p = self.dropout_p if self.training else 0.0\n        # Attention\n        try:\n            with sdp_kernel_context(dropout_p):\n                out = F.scaled_dot_product_attention(q, k, v, dropout_p=dropout_p)\n        except Exception as e:\n            # Fall back to all kernels if the Flash attention kernel fails\n            warnings.warn(\n                f\"Flash Attention kernel failed due to: {e}\\nFalling back to all available \"\n                f\"kernels for scaled_dot_product_attention (which may have a slower speed).\",\n                category=UserWarning,\n                stacklevel=2,\n            )\n            global ALLOW_ALL_KERNELS\n            ALLOW_ALL_KERNELS = True\n            out = F.scaled_dot_product_attention(q, k, v, dropout_p=dropout_p)\n\n        out = self._recombine_heads(out)\n        out = self.out_proj(out)\n\n        return out\n\n\nclass RoPEAttention(Attention):\n    \"\"\"Attention with rotary position encoding.\"\"\"\n\n    def __init__(\n        self,\n        *args,\n        rope_theta=10000.0,\n        # whether to repeat q rope to match k length\n        # this is needed for cross-attention to memories\n        rope_k_repeat=False,\n        feat_sizes=(32, 32),  # [w, h] for stride 16 feats at 512 resolution\n        **kwargs,\n    ):\n        super().__init__(*args, **kwargs)\n\n        self.compute_cis = partial(\n            compute_axial_cis, dim=self.internal_dim // self.num_heads, theta=rope_theta\n        )\n        freqs_cis = self.compute_cis(end_x=feat_sizes[0], end_y=feat_sizes[1])\n        self.freqs_cis = freqs_cis\n        self.rope_k_repeat = rope_k_repeat\n\n    def forward(\n        self, q: Tensor, k: Tensor, v: Tensor, num_k_exclude_rope: int = 0\n    ) -> Tensor:\n        # Input projections\n        q = self.q_proj(q)\n        k = self.k_proj(k)\n        v = self.v_proj(v)\n\n        # Separate into heads\n        q = self._separate_heads(q, self.num_heads)\n        k = self._separate_heads(k, self.num_heads)\n        v = self._separate_heads(v, self.num_heads)\n\n        # Apply rotary position encoding\n        w = h = math.sqrt(q.shape[-2])\n        self.freqs_cis = self.freqs_cis.to(q.device)\n        if self.freqs_cis.shape[0] != q.shape[-2]:\n            self.freqs_cis = self.compute_cis(end_x=w, end_y=h).to(q.device)\n        if q.shape[-2] != k.shape[-2]:\n            assert self.rope_k_repeat\n\n        num_k_rope = k.size(-2) - num_k_exclude_rope\n        q, k[:, :, :num_k_rope] = apply_rotary_enc(\n            q,\n            k[:, :, :num_k_rope],\n            freqs_cis=self.freqs_cis,\n            repeat_freqs_k=self.rope_k_repeat,\n        )\n\n        dropout_p = self.dropout_p if self.training else 0.0\n        # Attention\n        try:\n            with sdp_kernel_context(dropout_p):\n                out = F.scaled_dot_product_attention(q, k, v, dropout_p=dropout_p)\n        except Exception as e:\n            # Fall back to all kernels if the Flash attention kernel fails\n            warnings.warn(\n                f\"Flash Attention kernel failed due to: {e}\\nFalling back to all available \"\n                f\"kernels for scaled_dot_product_attention (which may have a slower speed).\",\n                category=UserWarning,\n                stacklevel=2,\n            )\n            global ALLOW_ALL_KERNELS\n            ALLOW_ALL_KERNELS = True\n            out = F.scaled_dot_product_attention(q, k, v, dropout_p=dropout_p)\n\n        out = self._recombine_heads(out)\n        out = self.out_proj(out)\n\n        return out\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/modeling/sam2_base.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch\nimport torch.distributed\nimport torch.nn.functional as F\n\nfrom torch.nn.init import trunc_normal_\n\nfrom sam2.modeling.sam.mask_decoder import MaskDecoder\nfrom sam2.modeling.sam.prompt_encoder import PromptEncoder\nfrom sam2.modeling.sam.transformer import TwoWayTransformer\nfrom sam2.modeling.sam2_utils import get_1d_sine_pe, MLP, select_closest_cond_frames\n\n# a large negative value as a placeholder score for missing objects\nNO_OBJ_SCORE = -1024.0\n\n\nclass SAM2Base(torch.nn.Module):\n    def __init__(\n        self,\n        image_encoder,\n        memory_attention,\n        memory_encoder,\n        num_maskmem=7,  # default 1 input frame + 6 previous frames\n        image_size=512,\n        backbone_stride=16,  # stride of the image backbone output\n        sigmoid_scale_for_mem_enc=1.0,  # scale factor for mask sigmoid prob\n        sigmoid_bias_for_mem_enc=0.0,  # bias factor for mask sigmoid prob\n        # During evaluation, whether to binarize the sigmoid mask logits on interacted frames with clicks\n        binarize_mask_from_pts_for_mem_enc=False,\n        use_mask_input_as_output_without_sam=False,  # on frames with mask input, whether to directly output the input mask without using a SAM prompt encoder + mask decoder\n        # The maximum number of conditioning frames to participate in the memory attention (-1 means no limit; if there are more conditioning frames than this limit,\n        # we only cross-attend to the temporally closest `max_cond_frames_in_attn` conditioning frames in the encoder when tracking each frame). This gives the model\n        # a temporal locality when handling a large number of annotated frames (since closer frames should be more important) and also avoids GPU OOM.\n        max_cond_frames_in_attn=-1,\n        # on the first frame, whether to directly add the no-memory embedding to the image feature\n        # (instead of using the transformer encoder)\n        directly_add_no_mem_embed=False,\n        # whether to use high-resolution feature maps in the SAM mask decoder\n        use_high_res_features_in_sam=False,\n        # whether to output multiple (3) masks for the first click on initial conditioning frames\n        multimask_output_in_sam=False,\n        # the minimum and maximum number of clicks to use multimask_output_in_sam (only relevant when `multimask_output_in_sam=True`;\n        # default is 1 for both, meaning that only the first click gives multimask output; also note that a box counts as two points)\n        multimask_min_pt_num=1,\n        multimask_max_pt_num=1,\n        # whether to also use multimask output for tracking (not just for the first click on initial conditioning frames; only relevant when `multimask_output_in_sam=True`)\n        multimask_output_for_tracking=False,\n        # Whether to use multimask tokens for obj ptr; Only relevant when both\n        # use_obj_ptrs_in_encoder=True and multimask_output_for_tracking=True\n        use_multimask_token_for_obj_ptr: bool = False,\n        # whether to use sigmoid to restrict ious prediction to [0-1]\n        iou_prediction_use_sigmoid=False,\n        # The memory bank's temporal stride during evaluation (i.e. the `r` parameter in XMem and Cutie; XMem and Cutie use r=5).\n        # For r>1, the (self.num_maskmem - 1) non-conditioning memory frames consist of\n        # (self.num_maskmem - 2) nearest frames from every r-th frames, plus the last frame.\n        memory_temporal_stride_for_eval=1,\n        # whether to apply non-overlapping constraints on the object masks in the memory encoder during evaluation (to avoid/alleviate superposing masks)\n        non_overlap_masks_for_mem_enc=False,\n        # whether to cross-attend to object pointers from other frames (based on SAM output tokens) in the encoder\n        use_obj_ptrs_in_encoder=False,\n        # the maximum number of object pointers from other frames in encoder cross attention (only relevant when `use_obj_ptrs_in_encoder=True`)\n        max_obj_ptrs_in_encoder=16,\n        # whether to add temporal positional encoding to the object pointers in the encoder (only relevant when `use_obj_ptrs_in_encoder=True`)\n        add_tpos_enc_to_obj_ptrs=True,\n        # whether to add an extra linear projection layer for the temporal positional encoding in the object pointers to avoid potential interference\n        # with spatial positional encoding (only relevant when both `use_obj_ptrs_in_encoder=True` and `add_tpos_enc_to_obj_ptrs=True`)\n        proj_tpos_enc_in_obj_ptrs=False,\n        # whether to use signed distance (instead of unsigned absolute distance) in the temporal positional encoding in the object pointers\n        # (only relevant when both `use_obj_ptrs_in_encoder=True` and `add_tpos_enc_to_obj_ptrs=True`)\n        use_signed_tpos_enc_to_obj_ptrs=False,\n        # whether to only attend to object pointers in the past (before the current frame) in the encoder during evaluation\n        # (only relevant when `use_obj_ptrs_in_encoder=True`; this might avoid pointer information too far in the future to distract the initial tracking)\n        only_obj_ptrs_in_the_past_for_eval=False,\n        # Whether to predict if there is an object in the frame\n        pred_obj_scores: bool = False,\n        # Whether to use an MLP to predict object scores\n        pred_obj_scores_mlp: bool = False,\n        # Only relevant if pred_obj_scores=True and use_obj_ptrs_in_encoder=True;\n        # Whether to have a fixed no obj pointer when there is no object present\n        # or to use it as an additive embedding with obj_ptr produced by decoder\n        fixed_no_obj_ptr: bool = False,\n        # Soft no object, i.e. mix in no_obj_ptr softly,\n        # hope to make recovery easier if there is a mistake and mitigate accumulation of errors\n        soft_no_obj_ptr: bool = False,\n        use_mlp_for_obj_ptr_proj: bool = False,\n        # add no obj embedding to spatial frames\n        no_obj_embed_spatial: bool = False,\n        # extra arguments used to construct the SAM mask decoder; if not None, it should be a dict of kwargs to be passed into `MaskDecoder` class.\n        sam_mask_decoder_extra_args=None,\n        compile_image_encoder: bool = False,\n    ):\n        super().__init__()\n\n        # Part 1: the image backbone\n        self.image_encoder = image_encoder\n        # Use level 0, 1, 2 for high-res setting, or just level 2 for the default setting\n        self.use_high_res_features_in_sam = use_high_res_features_in_sam\n        self.num_feature_levels = 3 if use_high_res_features_in_sam else 1\n        self.use_obj_ptrs_in_encoder = use_obj_ptrs_in_encoder\n        self.max_obj_ptrs_in_encoder = max_obj_ptrs_in_encoder\n        if use_obj_ptrs_in_encoder:\n            # A conv layer to downsample the mask prompt to stride 4 (the same stride as\n            # low-res SAM mask logits) and to change its scales from 0~1 to SAM logit scale,\n            # so that it can be fed into the SAM mask decoder to generate a pointer.\n            self.mask_downsample = torch.nn.Conv2d(1, 1, kernel_size=4, stride=4)\n        self.add_tpos_enc_to_obj_ptrs = add_tpos_enc_to_obj_ptrs\n        if proj_tpos_enc_in_obj_ptrs:\n            assert add_tpos_enc_to_obj_ptrs  # these options need to be used together\n        self.proj_tpos_enc_in_obj_ptrs = proj_tpos_enc_in_obj_ptrs\n        self.use_signed_tpos_enc_to_obj_ptrs = use_signed_tpos_enc_to_obj_ptrs\n        self.only_obj_ptrs_in_the_past_for_eval = only_obj_ptrs_in_the_past_for_eval\n\n        # Part 2: memory attention to condition current frame's visual features\n        # with memories (and obj ptrs) from past frames\n        self.memory_attention = memory_attention\n        self.hidden_dim = image_encoder.neck.d_model\n\n        # Part 3: memory encoder for the previous frame's outputs\n        self.memory_encoder = memory_encoder\n        self.mem_dim = self.hidden_dim\n        if hasattr(self.memory_encoder, \"out_proj\") and hasattr(\n            self.memory_encoder.out_proj, \"weight\"\n        ):\n            # if there is compression of memories along channel dim\n            self.mem_dim = self.memory_encoder.out_proj.weight.shape[0]\n        self.num_maskmem = num_maskmem  # Number of memories accessible\n        # Temporal encoding of the memories\n        self.maskmem_tpos_enc = torch.nn.Parameter(\n            torch.zeros(num_maskmem, 1, 1, self.mem_dim)\n        )\n        trunc_normal_(self.maskmem_tpos_enc, std=0.02)\n        # a single token to indicate no memory embedding from previous frames\n        self.no_mem_embed = torch.nn.Parameter(torch.zeros(1, 1, self.hidden_dim))\n        self.no_mem_pos_enc = torch.nn.Parameter(torch.zeros(1, 1, self.hidden_dim))\n        trunc_normal_(self.no_mem_embed, std=0.02)\n        trunc_normal_(self.no_mem_pos_enc, std=0.02)\n        self.directly_add_no_mem_embed = directly_add_no_mem_embed\n        # Apply sigmoid to the output raw mask logits (to turn them from\n        # range (-inf, +inf) to range (0, 1)) before feeding them into the memory encoder\n        self.sigmoid_scale_for_mem_enc = sigmoid_scale_for_mem_enc\n        self.sigmoid_bias_for_mem_enc = sigmoid_bias_for_mem_enc\n        self.binarize_mask_from_pts_for_mem_enc = binarize_mask_from_pts_for_mem_enc\n        self.non_overlap_masks_for_mem_enc = non_overlap_masks_for_mem_enc\n        self.memory_temporal_stride_for_eval = memory_temporal_stride_for_eval\n        # On frames with mask input, whether to directly output the input mask without\n        # using a SAM prompt encoder + mask decoder\n        self.use_mask_input_as_output_without_sam = use_mask_input_as_output_without_sam\n        self.multimask_output_in_sam = multimask_output_in_sam\n        self.multimask_min_pt_num = multimask_min_pt_num\n        self.multimask_max_pt_num = multimask_max_pt_num\n        self.multimask_output_for_tracking = multimask_output_for_tracking\n        self.use_multimask_token_for_obj_ptr = use_multimask_token_for_obj_ptr\n        self.iou_prediction_use_sigmoid = iou_prediction_use_sigmoid\n\n        # Part 4: SAM-style prompt encoder (for both mask and point inputs)\n        # and SAM-style mask decoder for the final mask output\n        self.image_size = image_size\n        self.backbone_stride = backbone_stride\n        self.sam_mask_decoder_extra_args = sam_mask_decoder_extra_args\n        self.pred_obj_scores = pred_obj_scores\n        self.pred_obj_scores_mlp = pred_obj_scores_mlp\n        self.fixed_no_obj_ptr = fixed_no_obj_ptr\n        self.soft_no_obj_ptr = soft_no_obj_ptr\n        if self.fixed_no_obj_ptr:\n            assert self.pred_obj_scores\n            assert self.use_obj_ptrs_in_encoder\n        if self.pred_obj_scores and self.use_obj_ptrs_in_encoder:\n            self.no_obj_ptr = torch.nn.Parameter(torch.zeros(1, self.hidden_dim))\n            trunc_normal_(self.no_obj_ptr, std=0.02)\n        self.use_mlp_for_obj_ptr_proj = use_mlp_for_obj_ptr_proj\n        self.no_obj_embed_spatial = None\n        if no_obj_embed_spatial:\n            self.no_obj_embed_spatial = torch.nn.Parameter(torch.zeros(1, self.mem_dim))\n            trunc_normal_(self.no_obj_embed_spatial, std=0.02)\n\n        self._build_sam_heads()\n        self.max_cond_frames_in_attn = max_cond_frames_in_attn\n\n        # Model compilation\n        if compile_image_encoder:\n            # Compile the forward function (not the full module) to allow loading checkpoints.\n            print(\n                \"Image encoder compilation is enabled. First forward pass will be slow.\"\n            )\n            self.image_encoder.forward = torch.compile(\n                self.image_encoder.forward,\n                mode=\"max-autotune\",\n                fullgraph=True,\n                dynamic=False,\n            )\n\n    @property\n    def device(self):\n        return next(self.parameters()).device\n\n    def forward(self, *args, **kwargs):\n        raise NotImplementedError(\n            \"Please use the corresponding methods in SAM2VideoPredictor for inference or SAM2Train for training/fine-tuning\"\n            \"See notebooks/video_predictor_example.ipynb for an inference example.\"\n        )\n\n    def _build_sam_heads(self):\n        \"\"\"Build SAM-style prompt encoder and mask decoder.\"\"\"\n        self.sam_prompt_embed_dim = self.hidden_dim\n        self.sam_image_embedding_size = self.image_size // self.backbone_stride\n\n        # build PromptEncoder and MaskDecoder from SAM\n        # (their hyperparameters like `mask_in_chans=16` are from SAM code)\n        self.sam_prompt_encoder = PromptEncoder(\n            embed_dim=self.sam_prompt_embed_dim,\n            image_embedding_size=(\n                self.sam_image_embedding_size,\n                self.sam_image_embedding_size,\n            ),\n            input_image_size=(self.image_size, self.image_size),\n            mask_in_chans=16,\n        )\n        self.sam_mask_decoder = MaskDecoder(\n            num_multimask_outputs=3,\n            transformer=TwoWayTransformer(\n                depth=2,\n                embedding_dim=self.sam_prompt_embed_dim,\n                mlp_dim=2048,\n                num_heads=8,\n            ),\n            transformer_dim=self.sam_prompt_embed_dim,\n            iou_head_depth=3,\n            iou_head_hidden_dim=256,\n            use_high_res_features=self.use_high_res_features_in_sam,\n            iou_prediction_use_sigmoid=self.iou_prediction_use_sigmoid,\n            pred_obj_scores=self.pred_obj_scores,\n            pred_obj_scores_mlp=self.pred_obj_scores_mlp,\n            use_multimask_token_for_obj_ptr=self.use_multimask_token_for_obj_ptr,\n            **(self.sam_mask_decoder_extra_args or {}),\n        )\n        if self.use_obj_ptrs_in_encoder:\n            # a linear projection on SAM output tokens to turn them into object pointers\n            self.obj_ptr_proj = torch.nn.Linear(self.hidden_dim, self.hidden_dim)\n            if self.use_mlp_for_obj_ptr_proj:\n                self.obj_ptr_proj = MLP(\n                    self.hidden_dim, self.hidden_dim, self.hidden_dim, 3\n                )\n        else:\n            self.obj_ptr_proj = torch.nn.Identity()\n        if self.proj_tpos_enc_in_obj_ptrs:\n            # a linear projection on temporal positional encoding in object pointers to\n            # avoid potential interference with spatial positional encoding\n            self.obj_ptr_tpos_proj = torch.nn.Linear(self.hidden_dim, self.mem_dim)\n        else:\n            self.obj_ptr_tpos_proj = torch.nn.Identity()\n\n    def _forward_sam_heads(\n        self,\n        backbone_features,\n        point_inputs=None,\n        mask_inputs=None,\n        high_res_features=None,\n        multimask_output=False,\n    ):\n        \"\"\"\n        Forward SAM prompt encoders and mask heads.\n\n        Inputs:\n        - backbone_features: image features of [B, C, H, W] shape\n        - point_inputs: a dictionary with \"point_coords\" and \"point_labels\", where\n          1) \"point_coords\" has [B, P, 2] shape and float32 dtype and contains the\n             absolute pixel-unit coordinate in (x, y) format of the P input points\n          2) \"point_labels\" has shape [B, P] and int32 dtype, where 1 means\n             positive clicks, 0 means negative clicks, and -1 means padding\n        - mask_inputs: a mask of [B, 1, H*16, W*16] shape, float or bool, with the\n          same spatial size as the image.\n        - high_res_features: either 1) None or 2) or a list of length 2 containing\n          two feature maps of [B, C, 4*H, 4*W] and [B, C, 2*H, 2*W] shapes respectively,\n          which will be used as high-resolution feature maps for SAM decoder.\n        - multimask_output: if it's True, we output 3 candidate masks and their 3\n          corresponding IoU estimates, and if it's False, we output only 1 mask and\n          its corresponding IoU estimate.\n\n        Outputs:\n        - low_res_multimasks: [B, M, H*4, W*4] shape (where M = 3 if\n          `multimask_output=True` and M = 1 if `multimask_output=False`), the SAM\n          output mask logits (before sigmoid) for the low-resolution masks, with 4x\n          the resolution (1/4 stride) of the input backbone_features.\n        - high_res_multimasks: [B, M, H*16, W*16] shape (where M = 3\n          if `multimask_output=True` and M = 1 if `multimask_output=False`),\n          upsampled from the low-resolution masks, with shape size as the image\n          (stride is 1 pixel).\n        - ious, [B, M] shape, where (where M = 3 if `multimask_output=True` and M = 1\n          if `multimask_output=False`), the estimated IoU of each output mask.\n        - low_res_masks: [B, 1, H*4, W*4] shape, the best mask in `low_res_multimasks`.\n          If `multimask_output=True`, it's the mask with the highest IoU estimate.\n          If `multimask_output=False`, it's the same as `low_res_multimasks`.\n        - high_res_masks: [B, 1, H*16, W*16] shape, the best mask in `high_res_multimasks`.\n          If `multimask_output=True`, it's the mask with the highest IoU estimate.\n          If `multimask_output=False`, it's the same as `high_res_multimasks`.\n        - obj_ptr: [B, C] shape, the object pointer vector for the output mask, extracted\n          based on the output token from the SAM mask decoder.\n        \"\"\"\n        B = backbone_features.size(0)\n        device = backbone_features.device\n        assert backbone_features.size(1) == self.sam_prompt_embed_dim\n        assert backbone_features.size(2) == self.sam_image_embedding_size\n        assert backbone_features.size(3) == self.sam_image_embedding_size\n\n        # a) Handle point prompts\n        if point_inputs is not None:\n            sam_point_coords = point_inputs[\"point_coords\"]\n            sam_point_labels = point_inputs[\"point_labels\"]\n            assert sam_point_coords.size(0) == B and sam_point_labels.size(0) == B\n        else:\n            # If no points are provide, pad with an empty point (with label -1)\n            sam_point_coords = torch.zeros(B, 1, 2, device=device)\n            sam_point_labels = -torch.ones(B, 1, dtype=torch.int32, device=device)\n\n        # b) Handle mask prompts\n        if mask_inputs is not None:\n            # If mask_inputs is provided, downsize it into low-res mask input if needed\n            # and feed it as a dense mask prompt into the SAM mask encoder\n            assert len(mask_inputs.shape) == 4 and mask_inputs.shape[:2] == (B, 1)\n            if mask_inputs.shape[-2:] != self.sam_prompt_encoder.mask_input_size:\n                sam_mask_prompt = F.interpolate(\n                    mask_inputs.float(),\n                    size=self.sam_prompt_encoder.mask_input_size,\n                    align_corners=False,\n                    mode=\"bilinear\",\n                    antialias=True,  # use antialias for downsampling\n                )\n            else:\n                sam_mask_prompt = mask_inputs\n        else:\n            # Otherwise, simply feed None (and SAM's prompt encoder will add\n            # a learned `no_mask_embed` to indicate no mask input in this case).\n            sam_mask_prompt = None\n\n        sparse_embeddings, dense_embeddings = self.sam_prompt_encoder(\n            points=(sam_point_coords, sam_point_labels),\n            boxes=None,\n            masks=sam_mask_prompt,\n        )\n        (\n            low_res_multimasks,\n            ious,\n            sam_output_tokens,\n            object_score_logits,\n        ) = self.sam_mask_decoder(\n            image_embeddings=backbone_features,\n            image_pe=self.sam_prompt_encoder.get_dense_pe(),\n            sparse_prompt_embeddings=sparse_embeddings,\n            dense_prompt_embeddings=dense_embeddings,\n            multimask_output=multimask_output,\n            repeat_image=False,  # the image is already batched\n            high_res_features=high_res_features,\n        )\n        if self.pred_obj_scores:\n            is_obj_appearing = object_score_logits > 0\n\n            # Mask used for spatial memories is always a *hard* choice between obj and no obj,\n            # consistent with the actual mask prediction\n            low_res_multimasks = torch.where(\n                is_obj_appearing[:, None, None],\n                low_res_multimasks,\n                NO_OBJ_SCORE,\n            )\n\n        # convert masks from possibly bfloat16 (or float16) to float32\n        # (older PyTorch versions before 2.1 don't support `interpolate` on bf16)\n        low_res_multimasks = low_res_multimasks.float()\n        high_res_multimasks = F.interpolate(\n            low_res_multimasks,\n            size=(self.image_size, self.image_size),\n            mode=\"bilinear\",\n            align_corners=False,\n        )\n\n        sam_output_token = sam_output_tokens[:, 0]\n        if multimask_output:\n            # take the best mask prediction (with the highest IoU estimation)\n            best_iou_inds = torch.argmax(ious, dim=-1)\n            batch_inds = torch.arange(B, device=device)\n            low_res_masks = low_res_multimasks[batch_inds, best_iou_inds].unsqueeze(1)\n            high_res_masks = high_res_multimasks[batch_inds, best_iou_inds].unsqueeze(1)\n            if sam_output_tokens.size(1) > 1:\n                sam_output_token = sam_output_tokens[batch_inds, best_iou_inds]\n        else:\n            low_res_masks, high_res_masks = low_res_multimasks, high_res_multimasks\n\n        # Extract object pointer from the SAM output token (with occlusion handling)\n        obj_ptr = self.obj_ptr_proj(sam_output_token)\n        if self.pred_obj_scores:\n            # Allow *soft* no obj ptr, unlike for masks\n            if self.soft_no_obj_ptr:\n                lambda_is_obj_appearing = object_score_logits.sigmoid()\n            else:\n                lambda_is_obj_appearing = is_obj_appearing.float()\n\n            if self.fixed_no_obj_ptr:\n                obj_ptr = lambda_is_obj_appearing * obj_ptr\n            obj_ptr = obj_ptr + (1 - lambda_is_obj_appearing) * self.no_obj_ptr\n\n        return (\n            low_res_multimasks,\n            high_res_multimasks,\n            ious,\n            low_res_masks,\n            high_res_masks,\n            obj_ptr,\n            object_score_logits,\n        )\n\n    def _use_mask_as_output(self, backbone_features, high_res_features, mask_inputs):\n        \"\"\"\n        Directly turn binary `mask_inputs` into a output mask logits without using SAM.\n        (same input and output shapes as in _forward_sam_heads above).\n        \"\"\"\n        # Use -10/+10 as logits for neg/pos pixels (very close to 0/1 in prob after sigmoid).\n        out_scale, out_bias = 20.0, -10.0  # sigmoid(-10.0)=4.5398e-05\n        mask_inputs_float = mask_inputs.float()\n        high_res_masks = mask_inputs_float * out_scale + out_bias\n        low_res_masks = F.interpolate(\n            high_res_masks,\n            size=(high_res_masks.size(-2) // 4, high_res_masks.size(-1) // 4),\n            align_corners=False,\n            mode=\"bilinear\",\n            antialias=True,  # use antialias for downsampling\n        )\n        # a dummy IoU prediction of all 1's under mask input\n        ious = mask_inputs.new_ones(mask_inputs.size(0), 1).float()\n        if not self.use_obj_ptrs_in_encoder:\n            # all zeros as a dummy object pointer (of shape [B, C])\n            obj_ptr = torch.zeros(\n                mask_inputs.size(0), self.hidden_dim, device=mask_inputs.device\n            )\n        else:\n            # produce an object pointer using the SAM decoder from the mask input\n            _, _, _, _, _, obj_ptr, _ = self._forward_sam_heads(\n                backbone_features=backbone_features,\n                mask_inputs=self.mask_downsample(mask_inputs_float),\n                high_res_features=high_res_features,\n            )\n        # In this method, we are treating mask_input as output, e.g. using it directly to create spatial mem;\n        # Below, we follow the same design axiom to use mask_input to decide if obj appears or not instead of relying\n        # on the object_scores from the SAM decoder.\n        is_obj_appearing = torch.any(mask_inputs.flatten(1).float() > 0.0, dim=1)\n        is_obj_appearing = is_obj_appearing[..., None]\n        lambda_is_obj_appearing = is_obj_appearing.float()\n        object_score_logits = out_scale * lambda_is_obj_appearing + out_bias\n        if self.pred_obj_scores:\n            if self.fixed_no_obj_ptr:\n                obj_ptr = lambda_is_obj_appearing * obj_ptr\n            obj_ptr = obj_ptr + (1 - lambda_is_obj_appearing) * self.no_obj_ptr\n\n        return (\n            low_res_masks,\n            high_res_masks,\n            ious,\n            low_res_masks,\n            high_res_masks,\n            obj_ptr,\n            object_score_logits,\n        )\n\n    def forward_image(self, img_batch: torch.Tensor):\n        \"\"\"Get the image feature on the input batch.\"\"\"\n        backbone_out = self.image_encoder(img_batch)\n        if self.use_high_res_features_in_sam:\n            # precompute projected level 0 and level 1 features in SAM decoder\n            # to avoid running it again on every SAM click\n            backbone_out[\"backbone_fpn\"][0] = self.sam_mask_decoder.conv_s0(\n                backbone_out[\"backbone_fpn\"][0]\n            )\n            backbone_out[\"backbone_fpn\"][1] = self.sam_mask_decoder.conv_s1(\n                backbone_out[\"backbone_fpn\"][1]\n            )\n        return backbone_out\n\n    def _prepare_backbone_features(self, backbone_out):\n        \"\"\"Prepare and flatten visual features.\"\"\"\n        backbone_out = backbone_out.copy()\n        assert len(backbone_out[\"backbone_fpn\"]) == len(backbone_out[\"vision_pos_enc\"])\n        assert len(backbone_out[\"backbone_fpn\"]) >= self.num_feature_levels\n\n        feature_maps = backbone_out[\"backbone_fpn\"][-self.num_feature_levels :]\n        vision_pos_embeds = backbone_out[\"vision_pos_enc\"][-self.num_feature_levels :]\n\n        feat_sizes = [(x.shape[-2], x.shape[-1]) for x in vision_pos_embeds]\n        # flatten NxCxHxW to HWxNxC\n        vision_feats = [x.flatten(2).permute(2, 0, 1) for x in feature_maps]\n        vision_pos_embeds = [x.flatten(2).permute(2, 0, 1) for x in vision_pos_embeds]\n\n        return backbone_out, vision_feats, vision_pos_embeds, feat_sizes\n\n    def _prepare_memory_conditioned_features(\n        self,\n        frame_idx,\n        is_init_cond_frame,\n        current_vision_feats,\n        current_vision_pos_embeds,\n        feat_sizes,\n        output_dict,\n        num_frames,\n        track_in_reverse=False,  # tracking in reverse time order (for demo usage)\n    ):\n        \"\"\"Fuse the current frame's visual feature map with previous memory.\"\"\"\n        B = current_vision_feats[-1].size(1)  # batch size on this frame\n        C = self.hidden_dim\n        H, W = feat_sizes[-1]  # top-level (lowest-resolution) feature size\n        device = current_vision_feats[-1].device\n        # The case of `self.num_maskmem == 0` below is primarily used for reproducing SAM on images.\n        # In this case, we skip the fusion with any memory.\n        if self.num_maskmem == 0:  # Disable memory and skip fusion\n            pix_feat = current_vision_feats[-1].permute(1, 2, 0).view(B, C, H, W)\n            return pix_feat\n\n        num_obj_ptr_tokens = 0\n        tpos_sign_mul = -1 if track_in_reverse else 1\n        # Step 1: condition the visual features of the current frame on previous memories\n        if not is_init_cond_frame:\n            # Retrieve the memories encoded with the maskmem backbone\n            to_cat_memory, to_cat_memory_pos_embed = [], []\n            # Add conditioning frames's output first (all cond frames have t_pos=0 for\n            # when getting temporal positional embedding below)\n            assert len(output_dict[\"cond_frame_outputs\"]) > 0\n            # Select a maximum number of temporally closest cond frames for cross attention\n            cond_outputs = output_dict[\"cond_frame_outputs\"]\n            selected_cond_outputs, unselected_cond_outputs = select_closest_cond_frames(\n                frame_idx, cond_outputs, self.max_cond_frames_in_attn\n            )\n            t_pos_and_prevs = [(0, out) for out in selected_cond_outputs.values()]\n            # Add last (self.num_maskmem - 1) frames before current frame for non-conditioning memory\n            # the earliest one has t_pos=1 and the latest one has t_pos=self.num_maskmem-1\n            # We also allow taking the memory frame non-consecutively (with stride>1), in which case\n            # we take (self.num_maskmem - 2) frames among every stride-th frames plus the last frame.\n            stride = 1 if self.training else self.memory_temporal_stride_for_eval\n            for t_pos in range(1, self.num_maskmem):\n                t_rel = self.num_maskmem - t_pos  # how many frames before current frame\n                if t_rel == 1:\n                    # for t_rel == 1, we take the last frame (regardless of r)\n                    if not track_in_reverse:\n                        # the frame immediately before this frame (i.e. frame_idx - 1)\n                        prev_frame_idx = frame_idx - t_rel\n                    else:\n                        # the frame immediately after this frame (i.e. frame_idx + 1)\n                        prev_frame_idx = frame_idx + t_rel\n                else:\n                    # for t_rel >= 2, we take the memory frame from every r-th frames\n                    if not track_in_reverse:\n                        # first find the nearest frame among every r-th frames before this frame\n                        # for r=1, this would be (frame_idx - 2)\n                        prev_frame_idx = ((frame_idx - 2) // stride) * stride\n                        # then seek further among every r-th frames\n                        prev_frame_idx = prev_frame_idx - (t_rel - 2) * stride\n                    else:\n                        # first find the nearest frame among every r-th frames after this frame\n                        # for r=1, this would be (frame_idx + 2)\n                        prev_frame_idx = -(-(frame_idx + 2) // stride) * stride\n                        # then seek further among every r-th frames\n                        prev_frame_idx = prev_frame_idx + (t_rel - 2) * stride\n                out = output_dict[\"non_cond_frame_outputs\"].get(prev_frame_idx, None)\n                if out is None:\n                    # If an unselected conditioning frame is among the last (self.num_maskmem - 1)\n                    # frames, we still attend to it as if it's a non-conditioning frame.\n                    out = unselected_cond_outputs.get(prev_frame_idx, None)\n                t_pos_and_prevs.append((t_pos, out))\n\n            for t_pos, prev in t_pos_and_prevs:\n                if prev is None:\n                    continue  # skip padding frames\n                # \"maskmem_features\" might have been offloaded to CPU in demo use cases,\n                # so we load it back to GPU (it's a no-op if it's already on GPU).\n                feats = prev[\"maskmem_features\"].to(device, non_blocking=True)\n                to_cat_memory.append(feats.flatten(2).permute(2, 0, 1))\n                # Spatial positional encoding (it might have been offloaded to CPU in eval)\n                maskmem_enc = prev[\"maskmem_pos_enc\"][-1].to(device)\n                maskmem_enc = maskmem_enc.flatten(2).permute(2, 0, 1)\n                # Temporal positional encoding\n                maskmem_enc = (\n                    maskmem_enc + self.maskmem_tpos_enc[self.num_maskmem - t_pos - 1]\n                )\n                to_cat_memory_pos_embed.append(maskmem_enc)\n\n            # Construct the list of past object pointers\n            if self.use_obj_ptrs_in_encoder:\n                max_obj_ptrs_in_encoder = min(num_frames, self.max_obj_ptrs_in_encoder)\n                # First add those object pointers from selected conditioning frames\n                # (optionally, only include object pointers in the past during evaluation)\n                if not self.training and self.only_obj_ptrs_in_the_past_for_eval:\n                    ptr_cond_outputs = {\n                        t: out\n                        for t, out in selected_cond_outputs.items()\n                        if (t >= frame_idx if track_in_reverse else t <= frame_idx)\n                    }\n                else:\n                    ptr_cond_outputs = selected_cond_outputs\n                pos_and_ptrs = [\n                    # Temporal pos encoding contains how far away each pointer is from current frame\n                    (\n                        (\n                            (frame_idx - t) * tpos_sign_mul\n                            if self.use_signed_tpos_enc_to_obj_ptrs\n                            else abs(frame_idx - t)\n                        ),\n                        out[\"obj_ptr\"],\n                    )\n                    for t, out in ptr_cond_outputs.items()\n                ]\n                # Add up to (max_obj_ptrs_in_encoder - 1) non-conditioning frames before current frame\n                for t_diff in range(1, max_obj_ptrs_in_encoder):\n                    t = frame_idx + t_diff if track_in_reverse else frame_idx - t_diff\n                    if t < 0 or (num_frames is not None and t >= num_frames):\n                        break\n                    out = output_dict[\"non_cond_frame_outputs\"].get(\n                        t, unselected_cond_outputs.get(t, None)\n                    )\n                    if out is not None:\n                        pos_and_ptrs.append((t_diff, out[\"obj_ptr\"]))\n                # If we have at least one object pointer, add them to the across attention\n                if len(pos_and_ptrs) > 0:\n                    pos_list, ptrs_list = zip(*pos_and_ptrs)\n                    # stack object pointers along dim=0 into [ptr_seq_len, B, C] shape\n                    obj_ptrs = torch.stack(ptrs_list, dim=0)\n                    # a temporal positional embedding based on how far each object pointer is from\n                    # the current frame (sine embedding normalized by the max pointer num).\n                    if self.add_tpos_enc_to_obj_ptrs:\n                        t_diff_max = max_obj_ptrs_in_encoder - 1\n                        tpos_dim = C if self.proj_tpos_enc_in_obj_ptrs else self.mem_dim\n                        obj_pos = torch.tensor(pos_list, device=device)\n                        obj_pos = get_1d_sine_pe(obj_pos / t_diff_max, dim=tpos_dim)\n                        obj_pos = self.obj_ptr_tpos_proj(obj_pos)\n                        obj_pos = obj_pos.unsqueeze(1).expand(-1, B, self.mem_dim)\n                    else:\n                        obj_pos = obj_ptrs.new_zeros(len(pos_list), B, self.mem_dim)\n                    if self.mem_dim < C:\n                        # split a pointer into (C // self.mem_dim) tokens for self.mem_dim < C\n                        obj_ptrs = obj_ptrs.reshape(\n                            -1, B, C // self.mem_dim, self.mem_dim\n                        )\n                        obj_ptrs = obj_ptrs.permute(0, 2, 1, 3).flatten(0, 1)\n                        obj_pos = obj_pos.repeat_interleave(C // self.mem_dim, dim=0)\n                    to_cat_memory.append(obj_ptrs)\n                    to_cat_memory_pos_embed.append(obj_pos)\n                    num_obj_ptr_tokens = obj_ptrs.shape[0]\n                else:\n                    num_obj_ptr_tokens = 0\n        else:\n            # for initial conditioning frames, encode them without using any previous memory\n            if self.directly_add_no_mem_embed:\n                # directly add no-mem embedding (instead of using the transformer encoder)\n                pix_feat_with_mem = current_vision_feats[-1] + self.no_mem_embed\n                pix_feat_with_mem = pix_feat_with_mem.permute(1, 2, 0).view(B, C, H, W)\n                return pix_feat_with_mem\n\n            # Use a dummy token on the first frame (to avoid empty memory input to tranformer encoder)\n            to_cat_memory = [self.no_mem_embed.expand(1, B, self.mem_dim)]\n            to_cat_memory_pos_embed = [self.no_mem_pos_enc.expand(1, B, self.mem_dim)]\n\n        # Step 2: Concatenate the memories and forward through the transformer encoder\n        memory = torch.cat(to_cat_memory, dim=0)\n        memory_pos_embed = torch.cat(to_cat_memory_pos_embed, dim=0)\n\n        pix_feat_with_mem = self.memory_attention(\n            curr=current_vision_feats,\n            curr_pos=current_vision_pos_embeds,\n            memory=memory,\n            memory_pos=memory_pos_embed,\n            num_obj_ptr_tokens=num_obj_ptr_tokens,\n        )\n        # reshape the output (HW)BC => BCHW\n        pix_feat_with_mem = pix_feat_with_mem.permute(1, 2, 0).view(B, C, H, W)\n        return pix_feat_with_mem\n\n    def _encode_new_memory(\n        self,\n        current_vision_feats,\n        feat_sizes,\n        pred_masks_high_res,\n        object_score_logits,\n        is_mask_from_pts,\n    ):\n        \"\"\"Encode the current image and its prediction into a memory feature.\"\"\"\n        B = current_vision_feats[-1].size(1)  # batch size on this frame\n        C = self.hidden_dim\n        H, W = feat_sizes[-1]  # top-level (lowest-resolution) feature size\n        # top-level feature, (HW)BC => BCHW\n        pix_feat = current_vision_feats[-1].permute(1, 2, 0).view(B, C, H, W)\n        if self.non_overlap_masks_for_mem_enc and not self.training:\n            # optionally, apply non-overlapping constraints to the masks (it's applied\n            # in the batch dimension and should only be used during eval, where all\n            # the objects come from the same video under batch size 1).\n            pred_masks_high_res = self._apply_non_overlapping_constraints(\n                pred_masks_high_res\n            )\n        # scale the raw mask logits with a temperature before applying sigmoid\n        binarize = self.binarize_mask_from_pts_for_mem_enc and is_mask_from_pts\n        if binarize and not self.training:\n            mask_for_mem = (pred_masks_high_res > 0).float()\n        else:\n            # apply sigmoid on the raw mask logits to turn them into range (0, 1)\n            mask_for_mem = torch.sigmoid(pred_masks_high_res)\n        # apply scale and bias terms to the sigmoid probabilities\n        if self.sigmoid_scale_for_mem_enc != 1.0:\n            mask_for_mem = mask_for_mem * self.sigmoid_scale_for_mem_enc\n        if self.sigmoid_bias_for_mem_enc != 0.0:\n            mask_for_mem = mask_for_mem + self.sigmoid_bias_for_mem_enc\n        maskmem_out = self.memory_encoder(\n            pix_feat, mask_for_mem, skip_mask_sigmoid=True  # sigmoid already applied\n        )\n        maskmem_features = maskmem_out[\"vision_features\"]\n        maskmem_pos_enc = maskmem_out[\"vision_pos_enc\"]\n        # add a no-object embedding to the spatial memory to indicate that the frame\n        # is predicted to be occluded (i.e. no object is appearing in the frame)\n        if self.no_obj_embed_spatial is not None:\n            is_obj_appearing = (object_score_logits > 0).float()\n            maskmem_features += (\n                1 - is_obj_appearing[..., None, None]\n            ) * self.no_obj_embed_spatial[..., None, None].expand(\n                *maskmem_features.shape\n            )\n\n        return maskmem_features, maskmem_pos_enc\n\n    def _track_step(\n        self,\n        frame_idx,\n        is_init_cond_frame,\n        current_vision_feats,\n        current_vision_pos_embeds,\n        feat_sizes,\n        point_inputs,\n        mask_inputs,\n        output_dict,\n        num_frames,\n        track_in_reverse,\n        prev_sam_mask_logits,\n    ):\n        current_out = {\"point_inputs\": point_inputs, \"mask_inputs\": mask_inputs}\n        # High-resolution feature maps for the SAM head, reshape (HW)BC => BCHW\n        if len(current_vision_feats) > 1:\n            high_res_features = [\n                x.permute(1, 2, 0).view(x.size(1), x.size(2), *s)\n                for x, s in zip(current_vision_feats[:-1], feat_sizes[:-1])\n            ]\n        else:\n            high_res_features = None\n        if mask_inputs is not None and self.use_mask_input_as_output_without_sam:\n            # When use_mask_input_as_output_without_sam=True, we directly output the mask input\n            # (see it as a GT mask) without using a SAM prompt encoder + mask decoder.\n            pix_feat = current_vision_feats[-1].permute(1, 2, 0)\n            pix_feat = pix_feat.view(-1, self.hidden_dim, *feat_sizes[-1])\n            sam_outputs = self._use_mask_as_output(\n                pix_feat, high_res_features, mask_inputs\n            )\n        else:\n            # fused the visual feature with previous memory features in the memory bank\n            pix_feat = self._prepare_memory_conditioned_features(\n                frame_idx=frame_idx,\n                is_init_cond_frame=is_init_cond_frame,\n                current_vision_feats=current_vision_feats[-1:],\n                current_vision_pos_embeds=current_vision_pos_embeds[-1:],\n                feat_sizes=feat_sizes[-1:],\n                output_dict=output_dict,\n                num_frames=num_frames,\n                track_in_reverse=track_in_reverse,\n            )\n            # apply SAM-style segmentation head\n            # here we might feed previously predicted low-res SAM mask logits into the SAM mask decoder,\n            # e.g. in demo where such logits come from earlier interaction instead of correction sampling\n            # (in this case, any `mask_inputs` shouldn't reach here as they are sent to _use_mask_as_output instead)\n            if prev_sam_mask_logits is not None:\n                assert point_inputs is not None and mask_inputs is None\n                mask_inputs = prev_sam_mask_logits\n            multimask_output = self._use_multimask(is_init_cond_frame, point_inputs)\n            sam_outputs = self._forward_sam_heads(\n                backbone_features=pix_feat,\n                point_inputs=point_inputs,\n                mask_inputs=mask_inputs,\n                high_res_features=high_res_features,\n                multimask_output=multimask_output,\n            )\n\n        return current_out, sam_outputs, high_res_features, pix_feat\n\n    def _encode_memory_in_output(\n        self,\n        current_vision_feats,\n        feat_sizes,\n        point_inputs,\n        run_mem_encoder,\n        high_res_masks,\n        object_score_logits,\n        current_out,\n    ):\n        if run_mem_encoder and self.num_maskmem > 0:\n            high_res_masks_for_mem_enc = high_res_masks\n            maskmem_features, maskmem_pos_enc = self._encode_new_memory(\n                current_vision_feats=current_vision_feats,\n                feat_sizes=feat_sizes,\n                pred_masks_high_res=high_res_masks_for_mem_enc,\n                object_score_logits=object_score_logits,\n                is_mask_from_pts=(point_inputs is not None),\n            )\n            current_out[\"maskmem_features\"] = maskmem_features\n            current_out[\"maskmem_pos_enc\"] = maskmem_pos_enc\n        else:\n            current_out[\"maskmem_features\"] = None\n            current_out[\"maskmem_pos_enc\"] = None\n\n    def track_step(\n        self,\n        frame_idx,\n        is_init_cond_frame,\n        current_vision_feats,\n        current_vision_pos_embeds,\n        feat_sizes,\n        point_inputs,\n        mask_inputs,\n        output_dict,\n        num_frames,\n        track_in_reverse=False,  # tracking in reverse time order (for demo usage)\n        # Whether to run the memory encoder on the predicted masks. Sometimes we might want\n        # to skip the memory encoder with `run_mem_encoder=False`. For example,\n        # in demo we might call `track_step` multiple times for each user click,\n        # and only encode the memory when the user finalizes their clicks. And in ablation\n        # settings like SAM training on static images, we don't need the memory encoder.\n        run_mem_encoder=True,\n        # The previously predicted SAM mask logits (which can be fed together with new clicks in demo).\n        prev_sam_mask_logits=None,\n    ):\n        current_out, sam_outputs, _, _ = self._track_step(\n            frame_idx,\n            is_init_cond_frame,\n            current_vision_feats,\n            current_vision_pos_embeds,\n            feat_sizes,\n            point_inputs,\n            mask_inputs,\n            output_dict,\n            num_frames,\n            track_in_reverse,\n            prev_sam_mask_logits,\n        )\n\n        (\n            _,\n            _,\n            _,\n            low_res_masks,\n            high_res_masks,\n            obj_ptr,\n            object_score_logits,\n        ) = sam_outputs\n\n        current_out[\"pred_masks\"] = low_res_masks\n        current_out[\"pred_masks_high_res\"] = high_res_masks\n        current_out[\"obj_ptr\"] = obj_ptr\n        if not self.training:\n            # Only add this in inference (to avoid unused param in activation checkpointing;\n            # it's mainly used in the demo to encode spatial memories w/ consolidated masks)\n            current_out[\"object_score_logits\"] = object_score_logits\n\n        # Finally run the memory encoder on the predicted mask to encode\n        # it into a new memory feature (that can be used in future frames)\n        self._encode_memory_in_output(\n            current_vision_feats,\n            feat_sizes,\n            point_inputs,\n            run_mem_encoder,\n            high_res_masks,\n            object_score_logits,\n            current_out,\n        )\n\n        return current_out\n\n    def _use_multimask(self, is_init_cond_frame, point_inputs):\n        \"\"\"Whether to use multimask output in the SAM head.\"\"\"\n        num_pts = 0 if point_inputs is None else point_inputs[\"point_labels\"].size(1)\n        multimask_output = (\n            self.multimask_output_in_sam\n            and (is_init_cond_frame or self.multimask_output_for_tracking)\n            and (self.multimask_min_pt_num <= num_pts <= self.multimask_max_pt_num)\n        )\n        return multimask_output\n\n    def _apply_non_overlapping_constraints(self, pred_masks):\n        \"\"\"\n        Apply non-overlapping constraints to the object scores in pred_masks. Here we\n        keep only the highest scoring object at each spatial location in pred_masks.\n        \"\"\"\n        batch_size = pred_masks.size(0)\n        if batch_size == 1:\n            return pred_masks\n\n        device = pred_masks.device\n        # \"max_obj_inds\": object index of the object with the highest score at each location\n        max_obj_inds = torch.argmax(pred_masks, dim=0, keepdim=True)\n        # \"batch_obj_inds\": object index of each object slice (along dim 0) in `pred_masks`\n        batch_obj_inds = torch.arange(batch_size, device=device)[:, None, None, None]\n        keep = max_obj_inds == batch_obj_inds\n        # suppress overlapping regions' scores below -10.0 so that the foreground regions\n        # don't overlap (here sigmoid(-10.0)=4.5398e-05)\n        pred_masks = torch.where(keep, pred_masks, torch.clamp(pred_masks, max=-10.0))\n        return pred_masks\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/modeling/sam2_utils.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\nimport copy\nfrom typing import Tuple\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom sam2.utils.misc import mask_to_box\n\n\ndef select_closest_cond_frames(frame_idx, cond_frame_outputs, max_cond_frame_num):\n    \"\"\"\n    Select up to `max_cond_frame_num` conditioning frames from `cond_frame_outputs`\n    that are temporally closest to the current frame at `frame_idx`. Here, we take\n    - a) the closest conditioning frame before `frame_idx` (if any);\n    - b) the closest conditioning frame after `frame_idx` (if any);\n    - c) any other temporally closest conditioning frames until reaching a total\n         of `max_cond_frame_num` conditioning frames.\n\n    Outputs:\n    - selected_outputs: selected items (keys & values) from `cond_frame_outputs`.\n    - unselected_outputs: items (keys & values) not selected in `cond_frame_outputs`.\n    \"\"\"\n    if max_cond_frame_num == -1 or len(cond_frame_outputs) <= max_cond_frame_num:\n        selected_outputs = cond_frame_outputs\n        unselected_outputs = {}\n    else:\n        assert max_cond_frame_num >= 2, \"we should allow using 2+ conditioning frames\"\n        selected_outputs = {}\n\n        # the closest conditioning frame before `frame_idx` (if any)\n        idx_before = max((t for t in cond_frame_outputs if t < frame_idx), default=None)\n        if idx_before is not None:\n            selected_outputs[idx_before] = cond_frame_outputs[idx_before]\n\n        # the closest conditioning frame after `frame_idx` (if any)\n        idx_after = min((t for t in cond_frame_outputs if t >= frame_idx), default=None)\n        if idx_after is not None:\n            selected_outputs[idx_after] = cond_frame_outputs[idx_after]\n\n        # add other temporally closest conditioning frames until reaching a total\n        # of `max_cond_frame_num` conditioning frames.\n        num_remain = max_cond_frame_num - len(selected_outputs)\n        inds_remain = sorted(\n            (t for t in cond_frame_outputs if t not in selected_outputs),\n            key=lambda x: abs(x - frame_idx),\n        )[:num_remain]\n        selected_outputs.update((t, cond_frame_outputs[t]) for t in inds_remain)\n        unselected_outputs = {\n            t: v for t, v in cond_frame_outputs.items() if t not in selected_outputs\n        }\n\n    return selected_outputs, unselected_outputs\n\n\ndef get_1d_sine_pe(pos_inds, dim, temperature=10000):\n    \"\"\"\n    Get 1D sine positional embedding as in the original Transformer paper.\n    \"\"\"\n    pe_dim = dim // 2\n    dim_t = torch.arange(pe_dim, dtype=torch.float32, device=pos_inds.device)\n    dim_t = temperature ** (2 * (dim_t // 2) / pe_dim)\n\n    pos_embed = pos_inds.unsqueeze(-1) / dim_t\n    pos_embed = torch.cat([pos_embed.sin(), pos_embed.cos()], dim=-1)\n    return pos_embed\n\n\ndef get_activation_fn(activation):\n    \"\"\"Return an activation function given a string\"\"\"\n    if activation == \"relu\":\n        return F.relu\n    if activation == \"gelu\":\n        return F.gelu\n    if activation == \"glu\":\n        return F.glu\n    raise RuntimeError(f\"activation should be relu/gelu, not {activation}.\")\n\n\ndef get_clones(module, N):\n    return nn.ModuleList([copy.deepcopy(module) for i in range(N)])\n\n\nclass DropPath(nn.Module):\n    # adapted from https://github.com/huggingface/pytorch-image-models/blob/main/timm/layers/drop.py\n    def __init__(self, drop_prob=0.0, scale_by_keep=True):\n        super(DropPath, self).__init__()\n        self.drop_prob = drop_prob\n        self.scale_by_keep = scale_by_keep\n\n    def forward(self, x):\n        if self.drop_prob == 0.0 or not self.training:\n            return x\n        keep_prob = 1 - self.drop_prob\n        shape = (x.shape[0],) + (1,) * (x.ndim - 1)\n        random_tensor = x.new_empty(shape).bernoulli_(keep_prob)\n        if keep_prob > 0.0 and self.scale_by_keep:\n            random_tensor.div_(keep_prob)\n        return x * random_tensor\n\n\n# Lightly adapted from\n# https://github.com/facebookresearch/MaskFormer/blob/main/mask_former/modeling/transformer/transformer_predictor.py # noqa\nclass MLP(nn.Module):\n    def __init__(\n        self,\n        input_dim: int,\n        hidden_dim: int,\n        output_dim: int,\n        num_layers: int,\n        activation: nn.Module = nn.ReLU,\n        sigmoid_output: bool = False,\n    ) -> None:\n        super().__init__()\n        self.num_layers = num_layers\n        h = [hidden_dim] * (num_layers - 1)\n        self.layers = nn.ModuleList(\n            nn.Linear(n, k) for n, k in zip([input_dim] + h, h + [output_dim])\n        )\n        self.sigmoid_output = sigmoid_output\n        self.act = activation()\n\n    def forward(self, x):\n        for i, layer in enumerate(self.layers):\n            x = self.act(layer(x)) if i < self.num_layers - 1 else layer(x)\n        if self.sigmoid_output:\n            x = F.sigmoid(x)\n        return x\n\n\n# From https://github.com/facebookresearch/detectron2/blob/main/detectron2/layers/batch_norm.py # noqa\n# Itself from https://github.com/facebookresearch/ConvNeXt/blob/d1fa8f6fef0a165b27399986cc2bdacc92777e40/models/convnext.py#L119  # noqa\nclass LayerNorm2d(nn.Module):\n    def __init__(self, num_channels: int, eps: float = 1e-6) -> None:\n        super().__init__()\n        self.weight = nn.Parameter(torch.ones(num_channels))\n        self.bias = nn.Parameter(torch.zeros(num_channels))\n        self.eps = eps\n\n    def forward(self, x: torch.Tensor) -> torch.Tensor:\n        u = x.mean(1, keepdim=True)\n        s = (x - u).pow(2).mean(1, keepdim=True)\n        x = (x - u) / torch.sqrt(s + self.eps)\n        x = self.weight[:, None, None] * x + self.bias[:, None, None]\n        return x\n\n\ndef sample_box_points(\n    masks: torch.Tensor,\n    noise: float = 0.1,  # SAM default\n    noise_bound: int = 20,  # SAM default\n    top_left_label: int = 2,\n    bottom_right_label: int = 3,\n) -> Tuple[np.array, np.array]:\n    \"\"\"\n    Sample a noised version of the top left and bottom right corners of a given `bbox`\n\n    Inputs:\n    - masks: [B, 1, H,W] boxes, dtype=torch.Tensor\n    - noise: noise as a fraction of box width and height, dtype=float\n    - noise_bound: maximum amount of noise (in pure pixesl), dtype=int\n\n    Returns:\n    - box_coords: [B, num_pt, 2], contains (x, y) coordinates of top left and bottom right box corners, dtype=torch.float\n    - box_labels: [B, num_pt], label 2 is reserverd for top left and 3 for bottom right corners, dtype=torch.int32\n    \"\"\"\n    device = masks.device\n    box_coords = mask_to_box(masks)\n    B, _, H, W = masks.shape\n    box_labels = torch.tensor(\n        [top_left_label, bottom_right_label], dtype=torch.int, device=device\n    ).repeat(B)\n    if noise > 0.0:\n        if not isinstance(noise_bound, torch.Tensor):\n            noise_bound = torch.tensor(noise_bound, device=device)\n        bbox_w = box_coords[..., 2] - box_coords[..., 0]\n        bbox_h = box_coords[..., 3] - box_coords[..., 1]\n        max_dx = torch.min(bbox_w * noise, noise_bound)\n        max_dy = torch.min(bbox_h * noise, noise_bound)\n        box_noise = 2 * torch.rand(B, 1, 4, device=device) - 1\n        box_noise = box_noise * torch.stack((max_dx, max_dy, max_dx, max_dy), dim=-1)\n\n        box_coords = box_coords + box_noise\n        img_bounds = (\n            torch.tensor([W, H, W, H], device=device) - 1\n        )  # uncentered pixel coords\n        box_coords.clamp_(torch.zeros_like(img_bounds), img_bounds)  # In place clamping\n\n    box_coords = box_coords.reshape(-1, 2, 2)  # always 2 points\n    box_labels = box_labels.reshape(-1, 2)\n    return box_coords, box_labels\n\n\ndef sample_random_points_from_errors(gt_masks, pred_masks, num_pt=1):\n    \"\"\"\n    Sample `num_pt` random points (along with their labels) independently from the error regions.\n\n    Inputs:\n    - gt_masks: [B, 1, H_im, W_im] masks, dtype=torch.bool\n    - pred_masks: [B, 1, H_im, W_im] masks, dtype=torch.bool or None\n    - num_pt: int, number of points to sample independently for each of the B error maps\n\n    Outputs:\n    - points: [B, num_pt, 2], dtype=torch.float, contains (x, y) coordinates of each sampled point\n    - labels: [B, num_pt], dtype=torch.int32, where 1 means positive clicks and 0 means\n      negative clicks\n    \"\"\"\n    if pred_masks is None:  # if pred_masks is not provided, treat it as empty\n        pred_masks = torch.zeros_like(gt_masks)\n    assert gt_masks.dtype == torch.bool and gt_masks.size(1) == 1\n    assert pred_masks.dtype == torch.bool and pred_masks.shape == gt_masks.shape\n    assert num_pt >= 0\n\n    B, _, H_im, W_im = gt_masks.shape\n    device = gt_masks.device\n\n    # false positive region, a new point sampled in this region should have\n    # negative label to correct the FP error\n    fp_masks = ~gt_masks & pred_masks\n    # false negative region, a new point sampled in this region should have\n    # positive label to correct the FN error\n    fn_masks = gt_masks & ~pred_masks\n    # whether the prediction completely match the ground-truth on each mask\n    all_correct = torch.all((gt_masks == pred_masks).flatten(2), dim=2)\n    all_correct = all_correct[..., None, None]\n\n    # channel 0 is FP map, while channel 1 is FN map\n    pts_noise = torch.rand(B, num_pt, H_im, W_im, 2, device=device)\n    # sample a negative new click from FP region or a positive new click\n    # from FN region, depend on where the maximum falls,\n    # and in case the predictions are all correct (no FP or FN), we just\n    # sample a negative click from the background region\n    pts_noise[..., 0] *= fp_masks | (all_correct & ~gt_masks)\n    pts_noise[..., 1] *= fn_masks\n    pts_idx = pts_noise.flatten(2).argmax(dim=2)\n    labels = (pts_idx % 2).to(torch.int32)\n    pts_idx = pts_idx // 2\n    pts_x = pts_idx % W_im\n    pts_y = pts_idx // W_im\n    points = torch.stack([pts_x, pts_y], dim=2).to(torch.float)\n    return points, labels\n\n\ndef sample_one_point_from_error_center(gt_masks, pred_masks, padding=True):\n    \"\"\"\n    Sample 1 random point (along with its label) from the center of each error region,\n    that is, the point with the largest distance to the boundary of each error region.\n    This is the RITM sampling method from https://github.com/saic-vul/ritm_interactive_segmentation/blob/master/isegm/inference/clicker.py\n\n    Inputs:\n    - gt_masks: [B, 1, H_im, W_im] masks, dtype=torch.bool\n    - pred_masks: [B, 1, H_im, W_im] masks, dtype=torch.bool or None\n    - padding: if True, pad with boundary of 1 px for distance transform\n\n    Outputs:\n    - points: [B, 1, 2], dtype=torch.float, contains (x, y) coordinates of each sampled point\n    - labels: [B, 1], dtype=torch.int32, where 1 means positive clicks and 0 means negative clicks\n    \"\"\"\n    import cv2\n\n    if pred_masks is None:\n        pred_masks = torch.zeros_like(gt_masks)\n    assert gt_masks.dtype == torch.bool and gt_masks.size(1) == 1\n    assert pred_masks.dtype == torch.bool and pred_masks.shape == gt_masks.shape\n\n    B, _, _, W_im = gt_masks.shape\n    device = gt_masks.device\n\n    # false positive region, a new point sampled in this region should have\n    # negative label to correct the FP error\n    fp_masks = ~gt_masks & pred_masks\n    # false negative region, a new point sampled in this region should have\n    # positive label to correct the FN error\n    fn_masks = gt_masks & ~pred_masks\n\n    fp_masks = fp_masks.cpu().numpy()\n    fn_masks = fn_masks.cpu().numpy()\n    points = torch.zeros(B, 1, 2, dtype=torch.float)\n    labels = torch.ones(B, 1, dtype=torch.int32)\n    for b in range(B):\n        fn_mask = fn_masks[b, 0]\n        fp_mask = fp_masks[b, 0]\n        if padding:\n            fn_mask = np.pad(fn_mask, ((1, 1), (1, 1)), \"constant\")\n            fp_mask = np.pad(fp_mask, ((1, 1), (1, 1)), \"constant\")\n        # compute the distance of each point in FN/FP region to its boundary\n        fn_mask_dt = cv2.distanceTransform(fn_mask.astype(np.uint8), cv2.DIST_L2, 0)\n        fp_mask_dt = cv2.distanceTransform(fp_mask.astype(np.uint8), cv2.DIST_L2, 0)\n        if padding:\n            fn_mask_dt = fn_mask_dt[1:-1, 1:-1]\n            fp_mask_dt = fp_mask_dt[1:-1, 1:-1]\n\n        # take the point in FN/FP region with the largest distance to its boundary\n        fn_mask_dt_flat = fn_mask_dt.reshape(-1)\n        fp_mask_dt_flat = fp_mask_dt.reshape(-1)\n        fn_argmax = np.argmax(fn_mask_dt_flat)\n        fp_argmax = np.argmax(fp_mask_dt_flat)\n        is_positive = fn_mask_dt_flat[fn_argmax] > fp_mask_dt_flat[fp_argmax]\n        pt_idx = fn_argmax if is_positive else fp_argmax\n        points[b, 0, 0] = pt_idx % W_im  # x\n        points[b, 0, 1] = pt_idx // W_im  # y\n        labels[b, 0] = int(is_positive)\n\n    points = points.to(device)\n    labels = labels.to(device)\n    return points, labels\n\n\ndef get_next_point(gt_masks, pred_masks, method):\n    if method == \"uniform\":\n        return sample_random_points_from_errors(gt_masks, pred_masks)\n    elif method == \"center\":\n        return sample_one_point_from_error_center(gt_masks, pred_masks)\n    else:\n        raise ValueError(f\"unknown sampling method {method}\")\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/sam2_image_predictor.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport logging\n\nfrom typing import List, Optional, Tuple, Union\n\nimport numpy as np\nimport torch\nfrom PIL.Image import Image\n\nfrom sam2.modeling.sam2_base import SAM2Base\n\nfrom sam2.utils.transforms import SAM2Transforms\n\n\nclass SAM2ImagePredictor:\n    def __init__(\n        self,\n        sam_model: SAM2Base,\n        mask_threshold=0.0,\n        max_hole_area=0.0,\n        max_sprinkle_area=0.0,\n        **kwargs,\n    ) -> None:\n        \"\"\"\n        Uses SAM-2 to calculate the image embedding for an image, and then\n        allow repeated, efficient mask prediction given prompts.\n\n        Arguments:\n          sam_model (Sam-2): The model to use for mask prediction.\n          mask_threshold (float): The threshold to use when converting mask logits\n            to binary masks. Masks are thresholded at 0 by default.\n          max_hole_area (int): If max_hole_area > 0, we fill small holes in up to\n            the maximum area of max_hole_area in low_res_masks.\n          max_sprinkle_area (int): If max_sprinkle_area > 0, we remove small sprinkles up to\n            the maximum area of max_sprinkle_area in low_res_masks.\n        \"\"\"\n        super().__init__()\n        self.model = sam_model\n        self._transforms = SAM2Transforms(\n            resolution=self.model.image_size,\n            mask_threshold=mask_threshold,\n            max_hole_area=max_hole_area,\n            max_sprinkle_area=max_sprinkle_area,\n        )\n\n        # Predictor state\n        self._is_image_set = False\n        self._features = None\n        self._orig_hw = None\n        # Whether the predictor is set for single image or a batch of images\n        self._is_batch = False\n\n        # Predictor config\n        self.mask_threshold = mask_threshold\n\n        # Spatial dim for backbone feature maps\n        self._bb_feat_sizes = [\n            (256, 256),\n            (128, 128),\n            (64, 64),\n        ]\n\n    @classmethod\n    def from_pretrained(cls, model_id: str, **kwargs) -> \"SAM2ImagePredictor\":\n        \"\"\"\n        Load a pretrained model from the Hugging Face hub.\n\n        Arguments:\n          model_id (str): The Hugging Face repository ID.\n          **kwargs: Additional arguments to pass to the model constructor.\n\n        Returns:\n          (SAM2ImagePredictor): The loaded model.\n        \"\"\"\n        from sam2.build_sam import build_sam2_hf\n\n        sam_model = build_sam2_hf(model_id, **kwargs)\n        return cls(sam_model, **kwargs)\n\n    @torch.no_grad()\n    def set_image(\n        self,\n        image: Union[np.ndarray, Image],\n    ) -> None:\n        \"\"\"\n        Calculates the image embeddings for the provided image, allowing\n        masks to be predicted with the 'predict' method.\n\n        Arguments:\n          image (np.ndarray or PIL Image): The input image to embed in RGB format. The image should be in HWC format if np.ndarray, or WHC format if PIL Image\n          with pixel values in [0, 255].\n          image_format (str): The color format of the image, in ['RGB', 'BGR'].\n        \"\"\"\n        self.reset_predictor()\n        # Transform the image to the form expected by the model\n        if isinstance(image, np.ndarray):\n            logging.info(\"For numpy array image, we assume (HxWxC) format\")\n            self._orig_hw = [image.shape[:2]]\n        elif isinstance(image, Image):\n            w, h = image.size\n            self._orig_hw = [(h, w)]\n        else:\n            raise NotImplementedError(\"Image format not supported\")\n\n        input_image = self._transforms(image)\n        input_image = input_image[None, ...].to(self.device)\n\n        assert (\n            len(input_image.shape) == 4 and input_image.shape[1] == 3\n        ), f\"input_image must be of size 1x3xHxW, got {input_image.shape}\"\n        logging.info(\"Computing image embeddings for the provided image...\")\n        backbone_out = self.model.forward_image(input_image)\n        _, vision_feats, _, _ = self.model._prepare_backbone_features(backbone_out)\n        # Add no_mem_embed, which is added to the lowest rest feat. map during training on videos\n        if self.model.directly_add_no_mem_embed:\n            vision_feats[-1] = vision_feats[-1] + self.model.no_mem_embed\n\n        feats = [\n            feat.permute(1, 2, 0).view(1, -1, *feat_size)\n            for feat, feat_size in zip(vision_feats[::-1], self._bb_feat_sizes[::-1])\n        ][::-1]\n        self._features = {\"image_embed\": feats[-1], \"high_res_feats\": feats[:-1]}\n        self._is_image_set = True\n        logging.info(\"Image embeddings computed.\")\n\n    @torch.no_grad()\n    def set_image_batch(\n        self,\n        image_list: List[Union[np.ndarray]],\n    ) -> None:\n        \"\"\"\n        Calculates the image embeddings for the provided image batch, allowing\n        masks to be predicted with the 'predict_batch' method.\n\n        Arguments:\n          image_list (List[np.ndarray]): The input images to embed in RGB format. The image should be in HWC format if np.ndarray\n          with pixel values in [0, 255].\n        \"\"\"\n        self.reset_predictor()\n        assert isinstance(image_list, list)\n        self._orig_hw = []\n        for image in image_list:\n            assert isinstance(\n                image, np.ndarray\n            ), \"Images are expected to be an np.ndarray in RGB format, and of shape  HWC\"\n            self._orig_hw.append(image.shape[:2])\n        # Transform the image to the form expected by the model\n        img_batch = self._transforms.forward_batch(image_list)\n        img_batch = img_batch.to(self.device)\n        batch_size = img_batch.shape[0]\n        assert (\n            len(img_batch.shape) == 4 and img_batch.shape[1] == 3\n        ), f\"img_batch must be of size Bx3xHxW, got {img_batch.shape}\"\n        logging.info(\"Computing image embeddings for the provided images...\")\n        backbone_out = self.model.forward_image(img_batch)\n        _, vision_feats, _, _ = self.model._prepare_backbone_features(backbone_out)\n        # Add no_mem_embed, which is added to the lowest rest feat. map during training on videos\n        if self.model.directly_add_no_mem_embed:\n            vision_feats[-1] = vision_feats[-1] + self.model.no_mem_embed\n\n        feats = [\n            feat.permute(1, 2, 0).view(batch_size, -1, *feat_size)\n            for feat, feat_size in zip(vision_feats[::-1], self._bb_feat_sizes[::-1])\n        ][::-1]\n        self._features = {\"image_embed\": feats[-1], \"high_res_feats\": feats[:-1]}\n        self._is_image_set = True\n        self._is_batch = True\n        logging.info(\"Image embeddings computed.\")\n\n    def predict_batch(\n        self,\n        point_coords_batch: List[np.ndarray] = None,\n        point_labels_batch: List[np.ndarray] = None,\n        box_batch: List[np.ndarray] = None,\n        mask_input_batch: List[np.ndarray] = None,\n        multimask_output: bool = True,\n        return_logits: bool = False,\n        normalize_coords=True,\n    ) -> Tuple[List[np.ndarray], List[np.ndarray], List[np.ndarray]]:\n        \"\"\"This function is very similar to predict(...), however it is used for batched mode, when the model is expected to generate predictions on multiple images.\n        It returns a tuple of lists of masks, ious, and low_res_masks_logits.\n        \"\"\"\n        assert self._is_batch, \"This function should only be used when in batched mode\"\n        if not self._is_image_set:\n            raise RuntimeError(\n                \"An image must be set with .set_image_batch(...) before mask prediction.\"\n            )\n        num_images = len(self._features[\"image_embed\"])\n        all_masks = []\n        all_ious = []\n        all_low_res_masks = []\n        for img_idx in range(num_images):\n            # Transform input prompts\n            point_coords = (\n                point_coords_batch[img_idx] if point_coords_batch is not None else None\n            )\n            point_labels = (\n                point_labels_batch[img_idx] if point_labels_batch is not None else None\n            )\n            box = box_batch[img_idx] if box_batch is not None else None\n            mask_input = (\n                mask_input_batch[img_idx] if mask_input_batch is not None else None\n            )\n            mask_input, unnorm_coords, labels, unnorm_box = self._prep_prompts(\n                point_coords,\n                point_labels,\n                box,\n                mask_input,\n                normalize_coords,\n                img_idx=img_idx,\n            )\n            masks, iou_predictions, low_res_masks = self._predict(\n                unnorm_coords,\n                labels,\n                unnorm_box,\n                mask_input,\n                multimask_output,\n                return_logits=return_logits,\n                img_idx=img_idx,\n            )\n            masks_np = masks.squeeze(0).float().detach().cpu().numpy()\n            iou_predictions_np = (\n                iou_predictions.squeeze(0).float().detach().cpu().numpy()\n            )\n            low_res_masks_np = low_res_masks.squeeze(0).float().detach().cpu().numpy()\n            all_masks.append(masks_np)\n            all_ious.append(iou_predictions_np)\n            all_low_res_masks.append(low_res_masks_np)\n\n        return all_masks, all_ious, all_low_res_masks\n\n    def predict(\n        self,\n        point_coords: Optional[np.ndarray] = None,\n        point_labels: Optional[np.ndarray] = None,\n        box: Optional[np.ndarray] = None,\n        mask_input: Optional[np.ndarray] = None,\n        multimask_output: bool = True,\n        return_logits: bool = False,\n        normalize_coords=True,\n    ) -> Tuple[np.ndarray, np.ndarray, np.ndarray]:\n        \"\"\"\n        Predict masks for the given input prompts, using the currently set image.\n\n        Arguments:\n          point_coords (np.ndarray or None): A Nx2 array of point prompts to the\n            model. Each point is in (X,Y) in pixels.\n          point_labels (np.ndarray or None): A length N array of labels for the\n            point prompts. 1 indicates a foreground point and 0 indicates a\n            background point.\n          box (np.ndarray or None): A length 4 array given a box prompt to the\n            model, in XYXY format.\n          mask_input (np.ndarray): A low resolution mask input to the model, typically\n            coming from a previous prediction iteration. Has form 1xHxW, where\n            for SAM, H=W=256.\n          multimask_output (bool): If true, the model will return three masks.\n            For ambiguous input prompts (such as a single click), this will often\n            produce better masks than a single prediction. If only a single\n            mask is needed, the model's predicted quality score can be used\n            to select the best mask. For non-ambiguous prompts, such as multiple\n            input prompts, multimask_output=False can give better results.\n          return_logits (bool): If true, returns un-thresholded masks logits\n            instead of a binary mask.\n          normalize_coords (bool): If true, the point coordinates will be normalized to the range [0,1] and point_coords is expected to be wrt. image dimensions.\n\n        Returns:\n          (np.ndarray): The output masks in CxHxW format, where C is the\n            number of masks, and (H, W) is the original image size.\n          (np.ndarray): An array of length C containing the model's\n            predictions for the quality of each mask.\n          (np.ndarray): An array of shape CxHxW, where C is the number\n            of masks and H=W=256. These low resolution logits can be passed to\n            a subsequent iteration as mask input.\n        \"\"\"\n        if not self._is_image_set:\n            raise RuntimeError(\n                \"An image must be set with .set_image(...) before mask prediction.\"\n            )\n\n        # Transform input prompts\n\n        mask_input, unnorm_coords, labels, unnorm_box = self._prep_prompts(\n            point_coords, point_labels, box, mask_input, normalize_coords\n        )\n\n        masks, iou_predictions, low_res_masks = self._predict(\n            unnorm_coords,\n            labels,\n            unnorm_box,\n            mask_input,\n            multimask_output,\n            return_logits=return_logits,\n        )\n\n        masks_np = masks.squeeze(0).float().detach().cpu().numpy()\n        iou_predictions_np = iou_predictions.squeeze(0).float().detach().cpu().numpy()\n        low_res_masks_np = low_res_masks.squeeze(0).float().detach().cpu().numpy()\n        return masks_np, iou_predictions_np, low_res_masks_np\n\n    def _prep_prompts(\n        self, point_coords, point_labels, box, mask_logits, normalize_coords, img_idx=-1\n    ):\n\n        unnorm_coords, labels, unnorm_box, mask_input = None, None, None, None\n        if point_coords is not None:\n            assert (\n                point_labels is not None\n            ), \"point_labels must be supplied if point_coords is supplied.\"\n            point_coords = torch.as_tensor(\n                point_coords, dtype=torch.float, device=self.device\n            )\n            unnorm_coords = self._transforms.transform_coords(\n                point_coords, normalize=normalize_coords, orig_hw=self._orig_hw[img_idx]\n            )\n            labels = torch.as_tensor(point_labels, dtype=torch.int, device=self.device)\n            if len(unnorm_coords.shape) == 2:\n                unnorm_coords, labels = unnorm_coords[None, ...], labels[None, ...]\n        if box is not None:\n            box = torch.as_tensor(box, dtype=torch.float, device=self.device)\n            unnorm_box = self._transforms.transform_boxes(\n                box, normalize=normalize_coords, orig_hw=self._orig_hw[img_idx]\n            )  # Bx2x2\n        if mask_logits is not None:\n            mask_input = torch.as_tensor(\n                mask_logits, dtype=torch.float, device=self.device\n            )\n            if len(mask_input.shape) == 3:\n                mask_input = mask_input[None, :, :, :]\n        return mask_input, unnorm_coords, labels, unnorm_box\n\n    @torch.no_grad()\n    def _predict(\n        self,\n        point_coords: Optional[torch.Tensor],\n        point_labels: Optional[torch.Tensor],\n        boxes: Optional[torch.Tensor] = None,\n        mask_input: Optional[torch.Tensor] = None,\n        multimask_output: bool = True,\n        return_logits: bool = False,\n        img_idx: int = -1,\n    ) -> Tuple[torch.Tensor, torch.Tensor, torch.Tensor]:\n        \"\"\"\n        Predict masks for the given input prompts, using the currently set image.\n        Input prompts are batched torch tensors and are expected to already be\n        transformed to the input frame using SAM2Transforms.\n\n        Arguments:\n          point_coords (torch.Tensor or None): A BxNx2 array of point prompts to the\n            model. Each point is in (X,Y) in pixels.\n          point_labels (torch.Tensor or None): A BxN array of labels for the\n            point prompts. 1 indicates a foreground point and 0 indicates a\n            background point.\n          boxes (np.ndarray or None): A Bx4 array given a box prompt to the\n            model, in XYXY format.\n          mask_input (np.ndarray): A low resolution mask input to the model, typically\n            coming from a previous prediction iteration. Has form Bx1xHxW, where\n            for SAM, H=W=256. Masks returned by a previous iteration of the\n            predict method do not need further transformation.\n          multimask_output (bool): If true, the model will return three masks.\n            For ambiguous input prompts (such as a single click), this will often\n            produce better masks than a single prediction. If only a single\n            mask is needed, the model's predicted quality score can be used\n            to select the best mask. For non-ambiguous prompts, such as multiple\n            input prompts, multimask_output=False can give better results.\n          return_logits (bool): If true, returns un-thresholded masks logits\n            instead of a binary mask.\n\n        Returns:\n          (torch.Tensor): The output masks in BxCxHxW format, where C is the\n            number of masks, and (H, W) is the original image size.\n          (torch.Tensor): An array of shape BxC containing the model's\n            predictions for the quality of each mask.\n          (torch.Tensor): An array of shape BxCxHxW, where C is the number\n            of masks and H=W=256. These low res logits can be passed to\n            a subsequent iteration as mask input.\n        \"\"\"\n        if not self._is_image_set:\n            raise RuntimeError(\n                \"An image must be set with .set_image(...) before mask prediction.\"\n            )\n\n        if point_coords is not None:\n            concat_points = (point_coords, point_labels)\n        else:\n            concat_points = None\n\n        # Embed prompts\n        if boxes is not None:\n            box_coords = boxes.reshape(-1, 2, 2)\n            box_labels = torch.tensor([[2, 3]], dtype=torch.int, device=boxes.device)\n            box_labels = box_labels.repeat(boxes.size(0), 1)\n            # we merge \"boxes\" and \"points\" into a single \"concat_points\" input (where\n            # boxes are added at the beginning) to sam_prompt_encoder\n            if concat_points is not None:\n                concat_coords = torch.cat([box_coords, concat_points[0]], dim=1)\n                concat_labels = torch.cat([box_labels, concat_points[1]], dim=1)\n                concat_points = (concat_coords, concat_labels)\n            else:\n                concat_points = (box_coords, box_labels)\n\n        sparse_embeddings, dense_embeddings = self.model.sam_prompt_encoder(\n            points=concat_points,\n            boxes=None,\n            masks=mask_input,\n        )\n\n        # Predict masks\n        batched_mode = (\n            concat_points is not None and concat_points[0].shape[0] > 1\n        )  # multi object prediction\n        high_res_features = [\n            feat_level[img_idx].unsqueeze(0)\n            for feat_level in self._features[\"high_res_feats\"]\n        ]\n        low_res_masks, iou_predictions, _, _ = self.model.sam_mask_decoder(\n            image_embeddings=self._features[\"image_embed\"][img_idx].unsqueeze(0),\n            image_pe=self.model.sam_prompt_encoder.get_dense_pe(),\n            sparse_prompt_embeddings=sparse_embeddings,\n            dense_prompt_embeddings=dense_embeddings,\n            multimask_output=multimask_output,\n            repeat_image=batched_mode,\n            high_res_features=high_res_features,\n        )\n\n        # Upscale the masks to the original image resolution\n        masks = self._transforms.postprocess_masks(\n            low_res_masks, self._orig_hw[img_idx]\n        )\n        low_res_masks = torch.clamp(low_res_masks, -32.0, 32.0)\n        if not return_logits:\n            masks = masks > self.mask_threshold\n\n        return masks, iou_predictions, low_res_masks\n\n    def get_image_embedding(self) -> torch.Tensor:\n        \"\"\"\n        Returns the image embeddings for the currently set image, with\n        shape 1xCxHxW, where C is the embedding dimension and (H,W) are\n        the embedding spatial dimension of SAM (typically C=256, H=W=64).\n        \"\"\"\n        if not self._is_image_set:\n            raise RuntimeError(\n                \"An image must be set with .set_image(...) to generate an embedding.\"\n            )\n        assert (\n            self._features is not None\n        ), \"Features must exist if an image has been set.\"\n        return self._features[\"image_embed\"]\n\n    @property\n    def device(self) -> torch.device:\n        return self.model.device\n\n    def reset_predictor(self) -> None:\n        \"\"\"\n        Resets the image embeddings and other state variables.\n        \"\"\"\n        self._is_image_set = False\n        self._features = None\n        self._orig_hw = None\n        self._is_batch = False\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/sam2_video_predictor.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport warnings\nfrom collections import OrderedDict\n\nimport torch\nimport torch.nn.functional as F\nfrom sam2.modeling.sam2_base import NO_OBJ_SCORE, SAM2Base\nfrom sam2.utils.misc import (concat_points, fill_holes_in_mask_scores,\n                             load_video_frames)\nfrom tqdm import tqdm\n\n\nclass SAM2VideoPredictor(SAM2Base):\n    \"\"\"The predictor class to handle user interactions and manage inference states.\"\"\"\n\n    def __init__(\n        self,\n        fill_hole_area=0,\n        # whether to apply non-overlapping constraints on the output object masks\n        non_overlap_masks=False,\n        # whether to clear non-conditioning memory of the surrounding frames (which may contain outdated information) after adding correction clicks;\n        # note that this would only apply to *single-object tracking* unless `clear_non_cond_mem_for_multi_obj` is also set to True)\n        clear_non_cond_mem_around_input=False,\n        # if `add_all_frames_to_correct_as_cond` is True, we also append to the conditioning frame list any frame that receives a later correction click\n        # if `add_all_frames_to_correct_as_cond` is False, we conditioning frame list to only use those initial conditioning frames\n        add_all_frames_to_correct_as_cond=False,\n        **kwargs,\n    ):\n        super().__init__(**kwargs)\n        self.fill_hole_area = fill_hole_area\n        self.non_overlap_masks = non_overlap_masks\n        self.clear_non_cond_mem_around_input = clear_non_cond_mem_around_input\n        self.add_all_frames_to_correct_as_cond = add_all_frames_to_correct_as_cond\n\n    @torch.inference_mode()\n    def init_state(\n        self,\n        video_path,\n        offload_video_to_cpu=False,\n        offload_state_to_cpu=False,\n        async_loading_frames=False,\n    ):\n        \"\"\"Initialize an inference state.\"\"\"\n        compute_device = self.device  # device of the model\n        images, video_height, video_width = load_video_frames(\n            video_path=video_path,\n            image_size=self.image_size,\n            offload_video_to_cpu=offload_video_to_cpu,\n            async_loading_frames=async_loading_frames,\n            compute_device=compute_device,\n        )\n        inference_state = {}\n        inference_state[\"images\"] = images\n        inference_state[\"num_frames\"] = len(images)\n        # whether to offload the video frames to CPU memory\n        # turning on this option saves the GPU memory with only a very small overhead\n        inference_state[\"offload_video_to_cpu\"] = offload_video_to_cpu\n        # whether to offload the inference state to CPU memory\n        # turning on this option saves the GPU memory at the cost of a lower tracking fps\n        # (e.g. in a test case of 768x768 model, fps dropped from 27 to 24 when tracking one object\n        # and from 24 to 21 when tracking two objects)\n        inference_state[\"offload_state_to_cpu\"] = offload_state_to_cpu\n        # the original video height and width, used for resizing final output scores\n        inference_state[\"video_height\"] = video_height\n        inference_state[\"video_width\"] = video_width\n        inference_state[\"device\"] = compute_device\n        if offload_state_to_cpu:\n            inference_state[\"storage_device\"] = torch.device(\"cpu\")\n        else:\n            inference_state[\"storage_device\"] = compute_device\n        # inputs on each frame\n        inference_state[\"point_inputs_per_obj\"] = {}\n        inference_state[\"mask_inputs_per_obj\"] = {}\n        # visual features on a small number of recently visited frames for quick interactions\n        inference_state[\"cached_features\"] = {}\n        # values that don't change across frames (so we only need to hold one copy of them)\n        inference_state[\"constants\"] = {}\n        # mapping between client-side object id and model-side object index\n        inference_state[\"obj_id_to_idx\"] = OrderedDict()\n        inference_state[\"obj_idx_to_id\"] = OrderedDict()\n        inference_state[\"obj_ids\"] = []\n        # Slice (view) of each object tracking results, sharing the same memory with \"output_dict\"\n        inference_state[\"output_dict_per_obj\"] = {}\n        # A temporary storage to hold new outputs when user interact with a frame\n        # to add clicks or mask (it's merged into \"output_dict\" before propagation starts)\n        inference_state[\"temp_output_dict_per_obj\"] = {}\n        # Frames that already holds consolidated outputs from click or mask inputs\n        # (we directly use their consolidated outputs during tracking)\n        # metadata for each tracking frame (e.g. which direction it's tracked)\n        inference_state[\"frames_tracked_per_obj\"] = {}\n        # Warm up the visual backbone and cache the image feature on frame 0\n        self._get_image_feature(inference_state, frame_idx=0, batch_size=1)\n        return inference_state\n\n    @classmethod\n    def from_pretrained(cls, model_id: str, **kwargs) -> \"SAM2VideoPredictor\":\n        \"\"\"\n        Load a pretrained model from the Hugging Face hub.\n\n        Arguments:\n          model_id (str): The Hugging Face repository ID.\n          **kwargs: Additional arguments to pass to the model constructor.\n\n        Returns:\n          (SAM2VideoPredictor): The loaded model.\n        \"\"\"\n        from sam2.build_sam import build_sam2_video_predictor_hf\n\n        sam_model = build_sam2_video_predictor_hf(model_id, **kwargs)\n        return sam_model\n\n    def _obj_id_to_idx(self, inference_state, obj_id):\n        \"\"\"Map client-side object id to model-side object index.\"\"\"\n        obj_idx = inference_state[\"obj_id_to_idx\"].get(obj_id, None)\n        if obj_idx is not None:\n            return obj_idx\n\n        # We always allow adding new objects (including after tracking starts).\n        allow_new_object = True\n        if allow_new_object:\n            # get the next object slot\n            obj_idx = len(inference_state[\"obj_id_to_idx\"])\n            inference_state[\"obj_id_to_idx\"][obj_id] = obj_idx\n            inference_state[\"obj_idx_to_id\"][obj_idx] = obj_id\n            inference_state[\"obj_ids\"] = list(inference_state[\"obj_id_to_idx\"])\n            # set up input and output structures for this object\n            inference_state[\"point_inputs_per_obj\"][obj_idx] = {}\n            inference_state[\"mask_inputs_per_obj\"][obj_idx] = {}\n            inference_state[\"output_dict_per_obj\"][obj_idx] = {\n                \"cond_frame_outputs\": {},  # dict containing {frame_idx: <out>}\n                \"non_cond_frame_outputs\": {},  # dict containing {frame_idx: <out>}\n            }\n            inference_state[\"temp_output_dict_per_obj\"][obj_idx] = {\n                \"cond_frame_outputs\": {},  # dict containing {frame_idx: <out>}\n                \"non_cond_frame_outputs\": {},  # dict containing {frame_idx: <out>}\n            }\n            inference_state[\"frames_tracked_per_obj\"][obj_idx] = {}\n            return obj_idx\n        else:\n            raise RuntimeError(\n                f\"Cannot add new object id {obj_id} after tracking starts. \"\n                f\"All existing object ids: {inference_state['obj_ids']}. \"\n                f\"Please call 'reset_state' to restart from scratch.\"\n            )\n\n    def _obj_idx_to_id(self, inference_state, obj_idx):\n        \"\"\"Map model-side object index to client-side object id.\"\"\"\n        return inference_state[\"obj_idx_to_id\"][obj_idx]\n\n    def _get_obj_num(self, inference_state):\n        \"\"\"Get the total number of unique object ids received so far in this session.\"\"\"\n        return len(inference_state[\"obj_idx_to_id\"])\n\n    @torch.inference_mode()\n    def add_new_points_or_box(\n        self,\n        inference_state,\n        frame_idx,\n        obj_id,\n        points=None,\n        labels=None,\n        clear_old_points=True,\n        normalize_coords=True,\n        box=None,\n    ):\n        \"\"\"Add new points to a frame.\"\"\"\n        obj_idx = self._obj_id_to_idx(inference_state, obj_id)\n        point_inputs_per_frame = inference_state[\"point_inputs_per_obj\"][obj_idx]\n        mask_inputs_per_frame = inference_state[\"mask_inputs_per_obj\"][obj_idx]\n\n        if (points is not None) != (labels is not None):\n            raise ValueError(\"points and labels must be provided together\")\n        if points is None and box is None:\n            raise ValueError(\"at least one of points or box must be provided as input\")\n\n        if points is None:\n            points = torch.zeros(0, 2, dtype=torch.float32)\n        elif not isinstance(points, torch.Tensor):\n            points = torch.tensor(points, dtype=torch.float32)\n        if labels is None:\n            labels = torch.zeros(0, dtype=torch.int32)\n        elif not isinstance(labels, torch.Tensor):\n            labels = torch.tensor(labels, dtype=torch.int32)\n        if points.dim() == 2:\n            points = points.unsqueeze(0)  # add batch dimension\n        if labels.dim() == 1:\n            labels = labels.unsqueeze(0)  # add batch dimension\n\n        # If `box` is provided, we add it as the first two points with labels 2 and 3\n        # along with the user-provided points (consistent with how SAM 2 is trained).\n        if box is not None:\n            if not clear_old_points:\n                raise ValueError(\n                    \"cannot add box without clearing old points, since \"\n                    \"box prompt must be provided before any point prompt \"\n                    \"(please use clear_old_points=True instead)\"\n                )\n            if not isinstance(box, torch.Tensor):\n                box = torch.tensor(box, dtype=torch.float32, device=points.device)\n            box_coords = box.reshape(1, 2, 2)\n            box_labels = torch.tensor([2, 3], dtype=torch.int32, device=labels.device)\n            box_labels = box_labels.reshape(1, 2)\n            points = torch.cat([box_coords, points], dim=1)\n            labels = torch.cat([box_labels, labels], dim=1)\n\n        if normalize_coords:\n            video_H = inference_state[\"video_height\"]\n            video_W = inference_state[\"video_width\"]\n            points = points / torch.tensor([video_W, video_H]).to(points.device)\n        # scale the (normalized) coordinates by the model's internal image size\n        points = points * self.image_size\n        points = points.to(inference_state[\"device\"])\n        labels = labels.to(inference_state[\"device\"])\n\n        if not clear_old_points:\n            point_inputs = point_inputs_per_frame.get(frame_idx, None)\n        else:\n            point_inputs = None\n        point_inputs = concat_points(point_inputs, points, labels)\n\n        point_inputs_per_frame[frame_idx] = point_inputs\n        mask_inputs_per_frame.pop(frame_idx, None)\n        # If this frame hasn't been tracked before, we treat it as an initial conditioning\n        # frame, meaning that the inputs points are to generate segments on this frame without\n        # using any memory from other frames, like in SAM. Otherwise (if it has been tracked),\n        # the input points will be used to correct the already tracked masks.\n        obj_frames_tracked = inference_state[\"frames_tracked_per_obj\"][obj_idx]\n        is_init_cond_frame = frame_idx not in obj_frames_tracked\n        # whether to track in reverse time order\n        if is_init_cond_frame:\n            reverse = False\n        else:\n            reverse = obj_frames_tracked[frame_idx][\"reverse\"]\n        obj_output_dict = inference_state[\"output_dict_per_obj\"][obj_idx]\n        obj_temp_output_dict = inference_state[\"temp_output_dict_per_obj\"][obj_idx]\n        # Add a frame to conditioning output if it's an initial conditioning frame or\n        # if the model sees all frames receiving clicks/mask as conditioning frames.\n        is_cond = is_init_cond_frame or self.add_all_frames_to_correct_as_cond\n        storage_key = \"cond_frame_outputs\" if is_cond else \"non_cond_frame_outputs\"\n\n        # Get any previously predicted mask logits on this object and feed it along with\n        # the new clicks into the SAM mask decoder.\n        prev_sam_mask_logits = None\n        # lookup temporary output dict first, which contains the most recent output\n        # (if not found, then lookup conditioning and non-conditioning frame output)\n        prev_out = obj_temp_output_dict[storage_key].get(frame_idx)\n        if prev_out is None:\n            prev_out = obj_output_dict[\"cond_frame_outputs\"].get(frame_idx)\n            if prev_out is None:\n                prev_out = obj_output_dict[\"non_cond_frame_outputs\"].get(frame_idx)\n\n        if prev_out is not None and prev_out[\"pred_masks\"] is not None:\n            device = inference_state[\"device\"]\n            prev_sam_mask_logits = prev_out[\"pred_masks\"].to(device, non_blocking=True)\n            # Clamp the scale of prev_sam_mask_logits to avoid rare numerical issues.\n            prev_sam_mask_logits = torch.clamp(prev_sam_mask_logits, -32.0, 32.0)\n        current_out, _ = self._run_single_frame_inference(\n            inference_state=inference_state,\n            output_dict=obj_output_dict,  # run on the slice of a single object\n            frame_idx=frame_idx,\n            batch_size=1,  # run on the slice of a single object\n            is_init_cond_frame=is_init_cond_frame,\n            point_inputs=point_inputs,\n            mask_inputs=None,\n            reverse=reverse,\n            # Skip the memory encoder when adding clicks or mask. We execute the memory encoder\n            # at the beginning of `propagate_in_video` (after user finalize their clicks). This\n            # allows us to enforce non-overlapping constraints on all objects before encoding\n            # them into memory.\n            run_mem_encoder=False,\n            prev_sam_mask_logits=prev_sam_mask_logits,\n        )\n        # Add the output to the output dict (to be used as future memory)\n        obj_temp_output_dict[storage_key][frame_idx] = current_out\n\n        # Resize the output mask to the original video resolution\n        obj_ids = inference_state[\"obj_ids\"]\n        consolidated_out = self._consolidate_temp_output_across_obj(\n            inference_state,\n            frame_idx,\n            is_cond=is_cond,\n            consolidate_at_video_res=True,\n        )\n        _, video_res_masks = self._get_orig_video_res_output(\n            inference_state, consolidated_out[\"pred_masks_video_res\"]\n        )\n        return frame_idx, obj_ids, video_res_masks\n\n    def add_new_points(self, *args, **kwargs):\n        \"\"\"Deprecated method. Please use `add_new_points_or_box` instead.\"\"\"\n        return self.add_new_points_or_box(*args, **kwargs)\n\n    @torch.inference_mode()\n    def add_new_mask(\n        self,\n        inference_state,\n        frame_idx,\n        obj_id,\n        mask,\n    ):\n        \"\"\"Add new mask to a frame.\"\"\"\n        obj_idx = self._obj_id_to_idx(inference_state, obj_id)\n        point_inputs_per_frame = inference_state[\"point_inputs_per_obj\"][obj_idx]\n        mask_inputs_per_frame = inference_state[\"mask_inputs_per_obj\"][obj_idx]\n\n        if not isinstance(mask, torch.Tensor):\n            mask = torch.tensor(mask, dtype=torch.bool)\n        assert mask.dim() == 2\n        mask_H, mask_W = mask.shape\n        mask_inputs_orig = mask[None, None]  # add batch and channel dimension\n        mask_inputs_orig = mask_inputs_orig.float().to(inference_state[\"device\"])\n\n        # resize the mask if it doesn't match the model's image size\n        if mask_H != self.image_size or mask_W != self.image_size:\n            mask_inputs = torch.nn.functional.interpolate(\n                mask_inputs_orig,\n                size=(self.image_size, self.image_size),\n                align_corners=False,\n                mode=\"bilinear\",\n                antialias=True,  # use antialias for downsampling\n            )\n            mask_inputs = (mask_inputs >= 0.5).float()\n        else:\n            mask_inputs = mask_inputs_orig\n\n        mask_inputs_per_frame[frame_idx] = mask_inputs\n        point_inputs_per_frame.pop(frame_idx, None)\n        # If this frame hasn't been tracked before, we treat it as an initial conditioning\n        # frame, meaning that the inputs points are to generate segments on this frame without\n        # using any memory from other frames, like in SAM. Otherwise (if it has been tracked),\n        # the input points will be used to correct the already tracked masks.\n        obj_frames_tracked = inference_state[\"frames_tracked_per_obj\"][obj_idx]\n        is_init_cond_frame = frame_idx not in obj_frames_tracked\n        # whether to track in reverse time order\n        if is_init_cond_frame:\n            reverse = False\n        else:\n            reverse = obj_frames_tracked[frame_idx][\"reverse\"]\n        obj_output_dict = inference_state[\"output_dict_per_obj\"][obj_idx]\n        obj_temp_output_dict = inference_state[\"temp_output_dict_per_obj\"][obj_idx]\n        # Add a frame to conditioning output if it's an initial conditioning frame or\n        # if the model sees all frames receiving clicks/mask as conditioning frames.\n        is_cond = is_init_cond_frame or self.add_all_frames_to_correct_as_cond\n        storage_key = \"cond_frame_outputs\" if is_cond else \"non_cond_frame_outputs\"\n\n        current_out, _ = self._run_single_frame_inference(\n            inference_state=inference_state,\n            output_dict=obj_output_dict,  # run on the slice of a single object\n            frame_idx=frame_idx,\n            batch_size=1,  # run on the slice of a single object\n            is_init_cond_frame=is_init_cond_frame,\n            point_inputs=None,\n            mask_inputs=mask_inputs,\n            reverse=reverse,\n            # Skip the memory encoder when adding clicks or mask. We execute the memory encoder\n            # at the beginning of `propagate_in_video` (after user finalize their clicks). This\n            # allows us to enforce non-overlapping constraints on all objects before encoding\n            # them into memory.\n            run_mem_encoder=False,\n        )\n        # Add the output to the output dict (to be used as future memory)\n        obj_temp_output_dict[storage_key][frame_idx] = current_out\n\n        # Resize the output mask to the original video resolution\n        obj_ids = inference_state[\"obj_ids\"]\n        consolidated_out = self._consolidate_temp_output_across_obj(\n            inference_state,\n            frame_idx,\n            is_cond=is_cond,\n            consolidate_at_video_res=True,\n        )\n        _, video_res_masks = self._get_orig_video_res_output(\n            inference_state, consolidated_out[\"pred_masks_video_res\"]\n        )\n        return frame_idx, obj_ids, video_res_masks\n\n    def _get_orig_video_res_output(self, inference_state, any_res_masks):\n        \"\"\"\n        Resize the object scores to the original video resolution (video_res_masks)\n        and apply non-overlapping constraints for final output.\n        \"\"\"\n        device = inference_state[\"device\"]\n        video_H = inference_state[\"video_height\"]\n        video_W = inference_state[\"video_width\"]\n        any_res_masks = any_res_masks.to(device, non_blocking=True)\n        if any_res_masks.shape[-2:] == (video_H, video_W):\n            video_res_masks = any_res_masks\n        else:\n            video_res_masks = torch.nn.functional.interpolate(\n                any_res_masks,\n                size=(video_H, video_W),\n                mode=\"bilinear\",\n                align_corners=False,\n            )\n        if self.non_overlap_masks:\n            video_res_masks = self._apply_non_overlapping_constraints(video_res_masks)\n        return any_res_masks, video_res_masks\n\n    def _consolidate_temp_output_across_obj(\n        self,\n        inference_state,\n        frame_idx,\n        is_cond,\n        consolidate_at_video_res=False,\n    ):\n        \"\"\"\n        Consolidate the per-object temporary outputs in `temp_output_dict_per_obj` on\n        a frame into a single output for all objects, including\n        1) fill any missing objects either from `output_dict_per_obj` (if they exist in\n           `output_dict_per_obj` for this frame) or leave them as placeholder values\n           (if they don't exist in `output_dict_per_obj` for this frame);\n        2) if specified, rerun memory encoder after apply non-overlapping constraints\n           on the object scores.\n        \"\"\"\n        batch_size = self._get_obj_num(inference_state)\n        storage_key = \"cond_frame_outputs\" if is_cond else \"non_cond_frame_outputs\"\n        # Optionally, we allow consolidating the temporary outputs at the original\n        # video resolution (to provide a better editing experience for mask prompts).\n        if consolidate_at_video_res:\n            consolidated_H = inference_state[\"video_height\"]\n            consolidated_W = inference_state[\"video_width\"]\n            consolidated_mask_key = \"pred_masks_video_res\"\n        else:\n            consolidated_H = consolidated_W = self.image_size // 4\n            consolidated_mask_key = \"pred_masks\"\n\n        # Initialize `consolidated_out`. Its \"maskmem_features\" and \"maskmem_pos_enc\"\n        # will be added when rerunning the memory encoder after applying non-overlapping\n        # constraints to object scores. Its \"pred_masks\" are prefilled with a large\n        # negative value (NO_OBJ_SCORE) to represent missing objects.\n        consolidated_out = {\n            consolidated_mask_key: torch.full(\n                size=(batch_size, 1, consolidated_H, consolidated_W),\n                fill_value=NO_OBJ_SCORE,\n                dtype=torch.float32,\n                device=inference_state[\"storage_device\"],\n            ),\n        }\n        for obj_idx in range(batch_size):\n            obj_temp_output_dict = inference_state[\"temp_output_dict_per_obj\"][obj_idx]\n            obj_output_dict = inference_state[\"output_dict_per_obj\"][obj_idx]\n            out = obj_temp_output_dict[storage_key].get(frame_idx, None)\n            # If the object doesn't appear in \"temp_output_dict_per_obj\" on this frame,\n            # we fall back and look up its previous output in \"output_dict_per_obj\".\n            # We look up both \"cond_frame_outputs\" and \"non_cond_frame_outputs\" in\n            # \"output_dict_per_obj\" to find a previous output for this object.\n            if out is None:\n                out = obj_output_dict[\"cond_frame_outputs\"].get(frame_idx, None)\n            if out is None:\n                out = obj_output_dict[\"non_cond_frame_outputs\"].get(frame_idx, None)\n            # If the object doesn't appear in \"output_dict_per_obj\" either, we skip it\n            # and leave its mask scores to the default scores (i.e. the NO_OBJ_SCORE\n            # placeholder above) and set its object pointer to be a dummy pointer.\n            if out is None:\n                continue\n            # Add the temporary object output mask to consolidated output mask\n            obj_mask = out[\"pred_masks\"]\n            consolidated_pred_masks = consolidated_out[consolidated_mask_key]\n            if obj_mask.shape[-2:] == consolidated_pred_masks.shape[-2:]:\n                consolidated_pred_masks[obj_idx : obj_idx + 1] = obj_mask\n            else:\n                # Resize first if temporary object mask has a different resolution\n                resized_obj_mask = torch.nn.functional.interpolate(\n                    obj_mask,\n                    size=consolidated_pred_masks.shape[-2:],\n                    mode=\"bilinear\",\n                    align_corners=False,\n                )\n                consolidated_pred_masks[obj_idx : obj_idx + 1] = resized_obj_mask\n\n        return consolidated_out\n\n    @torch.inference_mode()\n    def propagate_in_video_preflight(self, inference_state):\n        \"\"\"Prepare inference_state and consolidate temporary outputs before tracking.\"\"\"\n        # Check and make sure that every object has received input points or masks.\n        batch_size = self._get_obj_num(inference_state)\n        if batch_size == 0:\n            raise RuntimeError(\n                \"No input points or masks are provided for any object; please add inputs first.\"\n            )\n\n        # Consolidate per-object temporary outputs in \"temp_output_dict_per_obj\" and\n        # add them into \"output_dict\".\n        for obj_idx in range(batch_size):\n            obj_output_dict = inference_state[\"output_dict_per_obj\"][obj_idx]\n            obj_temp_output_dict = inference_state[\"temp_output_dict_per_obj\"][obj_idx]\n            for is_cond in [False, True]:\n                # Separately consolidate conditioning and non-conditioning temp outputs\n                storage_key = (\n                    \"cond_frame_outputs\" if is_cond else \"non_cond_frame_outputs\"\n                )\n                # Find all the frames that contain temporary outputs for any objects\n                # (these should be the frames that have just received clicks for mask inputs\n                # via `add_new_points_or_box` or `add_new_mask`)\n                for frame_idx, out in obj_temp_output_dict[storage_key].items():\n                    # Run memory encoder on the temporary outputs (if the memory feature is missing)\n                    if out[\"maskmem_features\"] is None:\n                        high_res_masks = torch.nn.functional.interpolate(\n                            out[\"pred_masks\"].to(inference_state[\"device\"]),\n                            size=(self.image_size, self.image_size),\n                            mode=\"bilinear\",\n                            align_corners=False,\n                        )\n                        maskmem_features, maskmem_pos_enc = self._run_memory_encoder(\n                            inference_state=inference_state,\n                            frame_idx=frame_idx,\n                            batch_size=1,  # run on the slice of a single object\n                            high_res_masks=high_res_masks,\n                            object_score_logits=out[\"object_score_logits\"],\n                            # these frames are what the user interacted with\n                            is_mask_from_pts=True,\n                        )\n                        out[\"maskmem_features\"] = maskmem_features\n                        out[\"maskmem_pos_enc\"] = maskmem_pos_enc\n\n                    obj_output_dict[storage_key][frame_idx] = out\n                    if self.clear_non_cond_mem_around_input:\n                        # clear non-conditioning memory of the surrounding frames\n                        self._clear_obj_non_cond_mem_around_input(\n                            inference_state, frame_idx, obj_idx\n                        )\n\n                # clear temporary outputs in `temp_output_dict_per_obj`\n                obj_temp_output_dict[storage_key].clear()\n\n            # check and make sure that every object has received input points or masks\n            obj_output_dict = inference_state[\"output_dict_per_obj\"][obj_idx]\n            if len(obj_output_dict[\"cond_frame_outputs\"]) == 0:\n                obj_id = self._obj_idx_to_id(inference_state, obj_idx)\n                raise RuntimeError(\n                    f\"No input points or masks are provided for object id {obj_id}; please add inputs first.\"\n                )\n            # edge case: if an output is added to \"cond_frame_outputs\", we remove any prior\n            # output on the same frame in \"non_cond_frame_outputs\"\n            for frame_idx in obj_output_dict[\"cond_frame_outputs\"]:\n                obj_output_dict[\"non_cond_frame_outputs\"].pop(frame_idx, None)\n\n    @torch.inference_mode()\n    def propagate_in_video(\n        self,\n        inference_state,\n        start_frame_idx=None,\n        max_frame_num_to_track=None,\n        reverse=False,\n    ):\n        \"\"\"Propagate the input points across frames to track in the entire video.\"\"\"\n        self.propagate_in_video_preflight(inference_state)\n\n        obj_ids = inference_state[\"obj_ids\"]\n        num_frames = inference_state[\"num_frames\"]\n        batch_size = self._get_obj_num(inference_state)\n\n        # set start index, end index, and processing order\n        if start_frame_idx is None:\n            # default: start from the earliest frame with input points\n            start_frame_idx = min(\n                t\n                for obj_output_dict in inference_state[\"output_dict_per_obj\"].values()\n                for t in obj_output_dict[\"cond_frame_outputs\"]\n            )\n        if max_frame_num_to_track is None:\n            # default: track all the frames in the video\n            max_frame_num_to_track = num_frames\n        if reverse:\n            end_frame_idx = max(start_frame_idx - max_frame_num_to_track, 0)\n            if start_frame_idx > 0:\n                processing_order = range(start_frame_idx, end_frame_idx - 1, -1)\n            else:\n                processing_order = []  # skip reverse tracking if starting from frame 0\n        else:\n            end_frame_idx = min(\n                start_frame_idx + max_frame_num_to_track, num_frames - 1\n            )\n            processing_order = range(start_frame_idx, end_frame_idx + 1)\n\n        for frame_idx in tqdm(processing_order, desc=\"propagate in video\"):\n            pred_masks_per_obj = [None] * batch_size\n            for obj_idx in range(batch_size):\n                obj_output_dict = inference_state[\"output_dict_per_obj\"][obj_idx]\n                # We skip those frames already in consolidated outputs (these are frames\n                # that received input clicks or mask). Note that we cannot directly run\n                # batched forward on them via `_run_single_frame_inference` because the\n                # number of clicks on each object might be different.\n                if frame_idx in obj_output_dict[\"cond_frame_outputs\"]:\n                    storage_key = \"cond_frame_outputs\"\n                    current_out = obj_output_dict[storage_key][frame_idx]\n                    device = inference_state[\"device\"]\n                    pred_masks = current_out[\"pred_masks\"].to(device, non_blocking=True)\n                    if self.clear_non_cond_mem_around_input:\n                        # clear non-conditioning memory of the surrounding frames\n                        self._clear_obj_non_cond_mem_around_input(\n                            inference_state, frame_idx, obj_idx\n                        )\n                else:\n                    storage_key = \"non_cond_frame_outputs\"\n                    current_out, pred_masks = self._run_single_frame_inference(\n                        inference_state=inference_state,\n                        output_dict=obj_output_dict,\n                        frame_idx=frame_idx,\n                        batch_size=1,  # run on the slice of a single object\n                        is_init_cond_frame=False,\n                        point_inputs=None,\n                        mask_inputs=None,\n                        reverse=reverse,\n                        run_mem_encoder=True,\n                    )\n                    obj_output_dict[storage_key][frame_idx] = current_out\n\n                inference_state[\"frames_tracked_per_obj\"][obj_idx][frame_idx] = {\n                    \"reverse\": reverse\n                }\n                pred_masks_per_obj[obj_idx] = pred_masks\n\n            # Resize the output mask to the original video resolution (we directly use\n            # the mask scores on GPU for output to avoid any CPU conversion in between)\n            if len(pred_masks_per_obj) > 1:\n                all_pred_masks = torch.cat(pred_masks_per_obj, dim=0)\n            else:\n                all_pred_masks = pred_masks_per_obj[0]\n            _, video_res_masks = self._get_orig_video_res_output(\n                inference_state, all_pred_masks\n            )\n            yield frame_idx, obj_ids, video_res_masks\n\n    @torch.inference_mode()\n    def clear_all_prompts_in_frame(\n        self, inference_state, frame_idx, obj_id, need_output=True\n    ):\n        \"\"\"Remove all input points or mask in a specific frame for a given object.\"\"\"\n        obj_idx = self._obj_id_to_idx(inference_state, obj_id)\n\n        # Clear the conditioning information on the given frame\n        inference_state[\"point_inputs_per_obj\"][obj_idx].pop(frame_idx, None)\n        inference_state[\"mask_inputs_per_obj\"][obj_idx].pop(frame_idx, None)\n\n        temp_output_dict_per_obj = inference_state[\"temp_output_dict_per_obj\"]\n        temp_output_dict_per_obj[obj_idx][\"cond_frame_outputs\"].pop(frame_idx, None)\n        temp_output_dict_per_obj[obj_idx][\"non_cond_frame_outputs\"].pop(frame_idx, None)\n\n        # Remove the frame's conditioning output (possibly downgrading it to non-conditioning)\n        obj_output_dict = inference_state[\"output_dict_per_obj\"][obj_idx]\n        out = obj_output_dict[\"cond_frame_outputs\"].pop(frame_idx, None)\n        if out is not None:\n            # The frame is not a conditioning frame anymore since it's not receiving inputs,\n            # so we \"downgrade\" its output (if exists) to a non-conditioning frame output.\n            obj_output_dict[\"non_cond_frame_outputs\"][frame_idx] = out\n            inference_state[\"frames_tracked_per_obj\"][obj_idx].pop(frame_idx, None)\n\n        if not need_output:\n            return\n        # Finally, output updated masks per object (after removing the inputs above)\n        obj_ids = inference_state[\"obj_ids\"]\n        is_cond = any(\n            frame_idx in obj_temp_output_dict[\"cond_frame_outputs\"]\n            for obj_temp_output_dict in temp_output_dict_per_obj.values()\n        )\n        consolidated_out = self._consolidate_temp_output_across_obj(\n            inference_state,\n            frame_idx,\n            is_cond=is_cond,\n            consolidate_at_video_res=True,\n        )\n        _, video_res_masks = self._get_orig_video_res_output(\n            inference_state, consolidated_out[\"pred_masks_video_res\"]\n        )\n        return frame_idx, obj_ids, video_res_masks\n\n    @torch.inference_mode()\n    def reset_state(self, inference_state):\n        \"\"\"Remove all input points or mask in all frames throughout the video.\"\"\"\n        self._reset_tracking_results(inference_state)\n        # Remove all object ids\n        inference_state[\"obj_id_to_idx\"].clear()\n        inference_state[\"obj_idx_to_id\"].clear()\n        inference_state[\"obj_ids\"].clear()\n        inference_state[\"point_inputs_per_obj\"].clear()\n        inference_state[\"mask_inputs_per_obj\"].clear()\n        inference_state[\"output_dict_per_obj\"].clear()\n        inference_state[\"temp_output_dict_per_obj\"].clear()\n        inference_state[\"frames_tracked_per_obj\"].clear()\n\n    def _reset_tracking_results(self, inference_state):\n        \"\"\"Reset all tracking inputs and results across the videos.\"\"\"\n        for v in inference_state[\"point_inputs_per_obj\"].values():\n            v.clear()\n        for v in inference_state[\"mask_inputs_per_obj\"].values():\n            v.clear()\n        for v in inference_state[\"output_dict_per_obj\"].values():\n            v[\"cond_frame_outputs\"].clear()\n            v[\"non_cond_frame_outputs\"].clear()\n        for v in inference_state[\"temp_output_dict_per_obj\"].values():\n            v[\"cond_frame_outputs\"].clear()\n            v[\"non_cond_frame_outputs\"].clear()\n        for v in inference_state[\"frames_tracked_per_obj\"].values():\n            v.clear()\n\n    def _get_image_feature(self, inference_state, frame_idx, batch_size):\n        \"\"\"Compute the image features on a given frame.\"\"\"\n        # Look up in the cache first\n        image, backbone_out = inference_state[\"cached_features\"].get(\n            frame_idx, (None, None)\n        )\n        if backbone_out is None:\n            # Cache miss -- we will run inference on a single image\n            device = inference_state[\"device\"]\n            image = inference_state[\"images\"][frame_idx].to(device).float().unsqueeze(0)\n            backbone_out = self.forward_image(image)\n            # Cache the most recent frame's feature (for repeated interactions with\n            # a frame; we can use an LRU cache for more frames in the future).\n            inference_state[\"cached_features\"] = {frame_idx: (image, backbone_out)}\n\n        # expand the features to have the same dimension as the number of objects\n        expanded_image = image.expand(batch_size, -1, -1, -1)\n        expanded_backbone_out = {\n            \"backbone_fpn\": backbone_out[\"backbone_fpn\"].copy(),\n            \"vision_pos_enc\": backbone_out[\"vision_pos_enc\"].copy(),\n        }\n        for i, feat in enumerate(expanded_backbone_out[\"backbone_fpn\"]):\n            expanded_backbone_out[\"backbone_fpn\"][i] = feat.expand(\n                batch_size, -1, -1, -1\n            )\n        for i, pos in enumerate(expanded_backbone_out[\"vision_pos_enc\"]):\n            pos = pos.expand(batch_size, -1, -1, -1)\n            expanded_backbone_out[\"vision_pos_enc\"][i] = pos\n\n        features = self._prepare_backbone_features(expanded_backbone_out)\n        features = (expanded_image,) + features\n        return features\n\n    def _run_single_frame_inference(\n        self,\n        inference_state,\n        output_dict,\n        frame_idx,\n        batch_size,\n        is_init_cond_frame,\n        point_inputs,\n        mask_inputs,\n        reverse,\n        run_mem_encoder,\n        prev_sam_mask_logits=None,\n    ):\n        \"\"\"Run tracking on a single frame based on current inputs and previous memory.\"\"\"\n        # Retrieve correct image features\n        (\n            _,\n            _,\n            current_vision_feats,\n            current_vision_pos_embeds,\n            feat_sizes,\n        ) = self._get_image_feature(inference_state, frame_idx, batch_size)\n\n        # point and mask should not appear as input simultaneously on the same frame\n        assert point_inputs is None or mask_inputs is None\n        current_out = self.track_step(\n            frame_idx=frame_idx,\n            is_init_cond_frame=is_init_cond_frame,\n            current_vision_feats=current_vision_feats,\n            current_vision_pos_embeds=current_vision_pos_embeds,\n            feat_sizes=feat_sizes,\n            point_inputs=point_inputs,\n            mask_inputs=mask_inputs,\n            output_dict=output_dict,\n            num_frames=inference_state[\"num_frames\"],\n            track_in_reverse=reverse,\n            run_mem_encoder=run_mem_encoder,\n            prev_sam_mask_logits=prev_sam_mask_logits,\n        )\n\n        # optionally offload the output to CPU memory to save GPU space\n        storage_device = inference_state[\"storage_device\"]\n        maskmem_features = current_out[\"maskmem_features\"]\n        if maskmem_features is not None:\n            maskmem_features = maskmem_features.to(torch.bfloat16)\n            maskmem_features = maskmem_features.to(storage_device, non_blocking=True)\n        pred_masks_gpu = current_out[\"pred_masks\"]\n        # potentially fill holes in the predicted masks\n        if self.fill_hole_area > 0:\n            pred_masks_gpu = fill_holes_in_mask_scores(\n                pred_masks_gpu, self.fill_hole_area\n            )\n        pred_masks = pred_masks_gpu.to(storage_device, non_blocking=True)\n        # \"maskmem_pos_enc\" is the same across frames, so we only need to store one copy of it\n        maskmem_pos_enc = self._get_maskmem_pos_enc(inference_state, current_out)\n        # object pointer is a small tensor, so we always keep it on GPU memory for fast access\n        obj_ptr = current_out[\"obj_ptr\"]\n        object_score_logits = current_out[\"object_score_logits\"]\n        # make a compact version of this frame's output to reduce the state size\n        compact_current_out = {\n            \"maskmem_features\": maskmem_features,\n            \"maskmem_pos_enc\": maskmem_pos_enc,\n            \"pred_masks\": pred_masks,\n            \"obj_ptr\": obj_ptr,\n            \"object_score_logits\": object_score_logits,\n        }\n        return compact_current_out, pred_masks_gpu\n\n    def _run_memory_encoder(\n        self,\n        inference_state,\n        frame_idx,\n        batch_size,\n        high_res_masks,\n        object_score_logits,\n        is_mask_from_pts,\n    ):\n        \"\"\"\n        Run the memory encoder on `high_res_masks`. This is usually after applying\n        non-overlapping constraints to object scores. Since their scores changed, their\n        memory also need to be computed again with the memory encoder.\n        \"\"\"\n        # Retrieve correct image features\n        _, _, current_vision_feats, _, feat_sizes = self._get_image_feature(\n            inference_state, frame_idx, batch_size\n        )\n        maskmem_features, maskmem_pos_enc = self._encode_new_memory(\n            current_vision_feats=current_vision_feats,\n            feat_sizes=feat_sizes,\n            pred_masks_high_res=high_res_masks,\n            object_score_logits=object_score_logits,\n            is_mask_from_pts=is_mask_from_pts,\n        )\n\n        # optionally offload the output to CPU memory to save GPU space\n        storage_device = inference_state[\"storage_device\"]\n        maskmem_features = maskmem_features.to(torch.bfloat16)\n        maskmem_features = maskmem_features.to(storage_device, non_blocking=True)\n        # \"maskmem_pos_enc\" is the same across frames, so we only need to store one copy of it\n        maskmem_pos_enc = self._get_maskmem_pos_enc(\n            inference_state, {\"maskmem_pos_enc\": maskmem_pos_enc}\n        )\n        return maskmem_features, maskmem_pos_enc\n\n    def _get_maskmem_pos_enc(self, inference_state, current_out):\n        \"\"\"\n        `maskmem_pos_enc` is the same across frames and objects, so we cache it as\n        a constant in the inference session to reduce session storage size.\n        \"\"\"\n        model_constants = inference_state[\"constants\"]\n        # \"out_maskmem_pos_enc\" should be either a list of tensors or None\n        out_maskmem_pos_enc = current_out[\"maskmem_pos_enc\"]\n        if out_maskmem_pos_enc is not None:\n            if \"maskmem_pos_enc\" not in model_constants:\n                assert isinstance(out_maskmem_pos_enc, list)\n                # only take the slice for one object, since it's same across objects\n                maskmem_pos_enc = [x[0:1].clone() for x in out_maskmem_pos_enc]\n                model_constants[\"maskmem_pos_enc\"] = maskmem_pos_enc\n            else:\n                maskmem_pos_enc = model_constants[\"maskmem_pos_enc\"]\n            # expand the cached maskmem_pos_enc to the actual batch size\n            batch_size = out_maskmem_pos_enc[0].size(0)\n            expanded_maskmem_pos_enc = [\n                x.expand(batch_size, -1, -1, -1) for x in maskmem_pos_enc\n            ]\n        else:\n            expanded_maskmem_pos_enc = None\n        return expanded_maskmem_pos_enc\n\n    @torch.inference_mode()\n    def remove_object(self, inference_state, obj_id, strict=False, need_output=True):\n        \"\"\"\n        Remove an object id from the tracking state. If strict is True, we check whether\n        the object id actually exists and raise an error if it doesn't exist.\n        \"\"\"\n        old_obj_idx_to_rm = inference_state[\"obj_id_to_idx\"].get(obj_id, None)\n        updated_frames = []\n        # Check whether this object_id to remove actually exists and possibly raise an error.\n        if old_obj_idx_to_rm is None:\n            if not strict:\n                return inference_state[\"obj_ids\"], updated_frames\n            raise RuntimeError(\n                f\"Cannot remove object id {obj_id} as it doesn't exist. \"\n                f\"All existing object ids: {inference_state['obj_ids']}.\"\n            )\n\n        # If this is the only remaining object id, we simply reset the state.\n        if len(inference_state[\"obj_id_to_idx\"]) == 1:\n            self.reset_state(inference_state)\n            return inference_state[\"obj_ids\"], updated_frames\n\n        # There are still remaining objects after removing this object id. In this case,\n        # we need to delete the object storage from inference state tensors.\n        # Step 0: clear the input on those frames where this object id has point or mask input\n        # (note that this step is required as it might downgrade conditioning frames to\n        # non-conditioning ones)\n        obj_input_frames_inds = set()\n        obj_input_frames_inds.update(\n            inference_state[\"point_inputs_per_obj\"][old_obj_idx_to_rm]\n        )\n        obj_input_frames_inds.update(\n            inference_state[\"mask_inputs_per_obj\"][old_obj_idx_to_rm]\n        )\n        for frame_idx in obj_input_frames_inds:\n            self.clear_all_prompts_in_frame(\n                inference_state, frame_idx, obj_id, need_output=False\n            )\n\n        # Step 1: Update the object id mapping (note that it must be done after Step 0,\n        # since Step 0 still requires the old object id mappings in inference_state)\n        old_obj_ids = inference_state[\"obj_ids\"]\n        old_obj_inds = list(range(len(old_obj_ids)))\n        remain_old_obj_inds = old_obj_inds.copy()\n        remain_old_obj_inds.remove(old_obj_idx_to_rm)\n        new_obj_ids = [old_obj_ids[old_idx] for old_idx in remain_old_obj_inds]\n        new_obj_inds = list(range(len(new_obj_ids)))\n        # build new mappings\n        old_idx_to_new_idx = dict(zip(remain_old_obj_inds, new_obj_inds))\n        inference_state[\"obj_id_to_idx\"] = dict(zip(new_obj_ids, new_obj_inds))\n        inference_state[\"obj_idx_to_id\"] = dict(zip(new_obj_inds, new_obj_ids))\n        inference_state[\"obj_ids\"] = new_obj_ids\n\n        # Step 2: For per-object tensor storage, we shift their obj_idx in the dict keys.\n        def _map_keys(container):\n            new_kvs = []\n            for k in old_obj_inds:\n                v = container.pop(k)\n                if k in old_idx_to_new_idx:\n                    new_kvs.append((old_idx_to_new_idx[k], v))\n            container.update(new_kvs)\n\n        _map_keys(inference_state[\"point_inputs_per_obj\"])\n        _map_keys(inference_state[\"mask_inputs_per_obj\"])\n        _map_keys(inference_state[\"output_dict_per_obj\"])\n        _map_keys(inference_state[\"temp_output_dict_per_obj\"])\n        _map_keys(inference_state[\"frames_tracked_per_obj\"])\n\n        # Step 3: Further collect the outputs on those frames in `obj_input_frames_inds`, which\n        # could show an updated mask for objects previously occluded by the object being removed\n        if need_output:\n            temp_output_dict_per_obj = inference_state[\"temp_output_dict_per_obj\"]\n            for frame_idx in obj_input_frames_inds:\n                is_cond = any(\n                    frame_idx in obj_temp_output_dict[\"cond_frame_outputs\"]\n                    for obj_temp_output_dict in temp_output_dict_per_obj.values()\n                )\n                consolidated_out = self._consolidate_temp_output_across_obj(\n                    inference_state,\n                    frame_idx,\n                    is_cond=is_cond,\n                    consolidate_at_video_res=True,\n                )\n                _, video_res_masks = self._get_orig_video_res_output(\n                    inference_state, consolidated_out[\"pred_masks_video_res\"]\n                )\n                updated_frames.append((frame_idx, video_res_masks))\n\n        return inference_state[\"obj_ids\"], updated_frames\n\n    def _clear_non_cond_mem_around_input(self, inference_state, frame_idx):\n        \"\"\"\n        Remove the non-conditioning memory around the input frame. When users provide\n        correction clicks, the surrounding frames' non-conditioning memories can still\n        contain outdated object appearance information and could confuse the model.\n\n        This method clears those non-conditioning memories surrounding the interacted\n        frame to avoid giving the model both old and new information about the object.\n        \"\"\"\n        r = self.memory_temporal_stride_for_eval\n        frame_idx_begin = frame_idx - r * self.num_maskmem\n        frame_idx_end = frame_idx + r * self.num_maskmem\n        batch_size = self._get_obj_num(inference_state)\n        for obj_idx in range(batch_size):\n            obj_output_dict = inference_state[\"output_dict_per_obj\"][obj_idx]\n            non_cond_frame_outputs = obj_output_dict[\"non_cond_frame_outputs\"]\n            for t in range(frame_idx_begin, frame_idx_end + 1):\n                non_cond_frame_outputs.pop(t, None)\n\n\nclass SAM2VideoPredictorVOS(SAM2VideoPredictor):\n    \"\"\"Optimized for the VOS setting\"\"\"\n\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n        self._compile_all_components()\n\n    def _compile_all_components(self):\n        print(\"Compiling all components for VOS setting. First time may be very slow.\")\n        self.memory_encoder.forward = torch.compile(\n            self.memory_encoder.forward,\n            mode=\"max-autotune\",\n            fullgraph=True,\n            dynamic=False,\n        )\n\n        self.memory_attention.forward = torch.compile(\n            self.memory_attention.forward,\n            mode=\"max-autotune\",\n            fullgraph=True,\n            dynamic=True,  # Num. of memories varies\n        )\n\n        self.sam_prompt_encoder.forward = torch.compile(\n            self.sam_prompt_encoder.forward,\n            mode=\"max-autotune\",\n            fullgraph=True,\n            dynamic=False,  # Accuracy regression on True\n        )\n\n        self.sam_mask_decoder.forward = torch.compile(\n            self.sam_mask_decoder.forward,\n            mode=\"max-autotune\",\n            fullgraph=True,\n            dynamic=False,  # Accuracy regression on True\n        )\n\n    def forward_image(self, img_batch: torch.Tensor):\n        \"\"\"\n        Identical to the corresponding method in the parent (SAM2VideoPredictor), but\n        cloning the backbone features and pos encoding to enable compilation.\n        \"\"\"\n        backbone_out = self.image_encoder(img_batch)\n        if self.use_high_res_features_in_sam:\n            # precompute projected level 0 and level 1 features in SAM decoder\n            # to avoid running it again on every SAM click\n            backbone_out[\"backbone_fpn\"][0] = self.sam_mask_decoder.conv_s0(\n                backbone_out[\"backbone_fpn\"][0]\n            )\n            backbone_out[\"backbone_fpn\"][1] = self.sam_mask_decoder.conv_s1(\n                backbone_out[\"backbone_fpn\"][1]\n            )\n        # Clone to help torch.compile\n        for i in range(len(backbone_out[\"backbone_fpn\"])):\n            backbone_out[\"backbone_fpn\"][i] = backbone_out[\"backbone_fpn\"][i].clone()\n            backbone_out[\"vision_pos_enc\"][i] = backbone_out[\"vision_pos_enc\"][\n                i\n            ].clone()\n        return backbone_out\n\n    def _forward_sam_heads(\n        self,\n        backbone_features,\n        point_inputs=None,\n        mask_inputs=None,\n        high_res_features=None,\n        multimask_output=False,\n    ):\n        \"\"\"\n        Identical to the corresponding method in the parent (SAM2VideoPredictor), but\n        cloning the outputs of prompt_encoder and mask_decoder to enable compilation.\n        \"\"\"\n        B = backbone_features.size(0)\n        device = backbone_features.device\n        assert backbone_features.size(1) == self.sam_prompt_embed_dim\n        assert backbone_features.size(2) == self.sam_image_embedding_size\n        assert backbone_features.size(3) == self.sam_image_embedding_size\n\n        # a) Handle point prompts\n        if point_inputs is not None:\n            sam_point_coords = point_inputs[\"point_coords\"]\n            sam_point_labels = point_inputs[\"point_labels\"]\n            assert sam_point_coords.size(0) == B and sam_point_labels.size(0) == B\n        else:\n            # If no points are provide, pad with an empty point (with label -1)\n            sam_point_coords = torch.zeros(B, 1, 2, device=device)\n            sam_point_labels = -torch.ones(B, 1, dtype=torch.int32, device=device)\n\n        # b) Handle mask prompts\n        if mask_inputs is not None:\n            # If mask_inputs is provided, downsize it into low-res mask input if needed\n            # and feed it as a dense mask prompt into the SAM mask encoder\n            assert len(mask_inputs.shape) == 4 and mask_inputs.shape[:2] == (B, 1)\n            if mask_inputs.shape[-2:] != self.sam_prompt_encoder.mask_input_size:\n                sam_mask_prompt = F.interpolate(\n                    mask_inputs.float(),\n                    size=self.sam_prompt_encoder.mask_input_size,\n                    align_corners=False,\n                    mode=\"bilinear\",\n                    antialias=True,  # use antialias for downsampling\n                )\n            else:\n                sam_mask_prompt = mask_inputs\n        else:\n            # Otherwise, simply feed None (and SAM's prompt encoder will add\n            # a learned `no_mask_embed` to indicate no mask input in this case).\n            sam_mask_prompt = None\n\n        sparse_embeddings, dense_embeddings = self.sam_prompt_encoder(\n            points=(sam_point_coords, sam_point_labels),\n            boxes=None,\n            masks=sam_mask_prompt,\n        )\n        # Clone image_pe and the outputs of sam_prompt_encoder\n        # to enable compilation\n        sparse_embeddings = sparse_embeddings.clone()\n        dense_embeddings = dense_embeddings.clone()\n        image_pe = self.sam_prompt_encoder.get_dense_pe().clone()\n        (\n            low_res_multimasks,\n            ious,\n            sam_output_tokens,\n            object_score_logits,\n        ) = self.sam_mask_decoder(\n            image_embeddings=backbone_features,\n            image_pe=image_pe,\n            sparse_prompt_embeddings=sparse_embeddings,\n            dense_prompt_embeddings=dense_embeddings,\n            multimask_output=multimask_output,\n            repeat_image=False,  # the image is already batched\n            high_res_features=high_res_features,\n        )\n        # Clone the output of sam_mask_decoder\n        # to enable compilation\n        low_res_multimasks = low_res_multimasks.clone()\n        ious = ious.clone()\n        sam_output_tokens = sam_output_tokens.clone()\n        object_score_logits = object_score_logits.clone()\n\n        if self.pred_obj_scores:\n            is_obj_appearing = object_score_logits > 0\n\n            # Mask used for spatial memories is always a *hard* choice between obj and no obj,\n            # consistent with the actual mask prediction\n            low_res_multimasks = torch.where(\n                is_obj_appearing[:, None, None],\n                low_res_multimasks,\n                NO_OBJ_SCORE,\n            )\n\n        # convert masks from possibly bfloat16 (or float16) to float32\n        # (older PyTorch versions before 2.1 don't support `interpolate` on bf16)\n        low_res_multimasks = low_res_multimasks.float()\n        high_res_multimasks = F.interpolate(\n            low_res_multimasks,\n            size=(self.image_size, self.image_size),\n            mode=\"bilinear\",\n            align_corners=False,\n        )\n\n        sam_output_token = sam_output_tokens[:, 0]\n        if multimask_output:\n            # take the best mask prediction (with the highest IoU estimation)\n            best_iou_inds = torch.argmax(ious, dim=-1)\n            batch_inds = torch.arange(B, device=device)\n            low_res_masks = low_res_multimasks[batch_inds, best_iou_inds].unsqueeze(1)\n            high_res_masks = high_res_multimasks[batch_inds, best_iou_inds].unsqueeze(1)\n            if sam_output_tokens.size(1) > 1:\n                sam_output_token = sam_output_tokens[batch_inds, best_iou_inds]\n        else:\n            low_res_masks, high_res_masks = low_res_multimasks, high_res_multimasks\n\n        # Extract object pointer from the SAM output token (with occlusion handling)\n        obj_ptr = self.obj_ptr_proj(sam_output_token)\n        if self.pred_obj_scores:\n            # Allow *soft* no obj ptr, unlike for masks\n            if self.soft_no_obj_ptr:\n                lambda_is_obj_appearing = object_score_logits.sigmoid()\n            else:\n                lambda_is_obj_appearing = is_obj_appearing.float()\n\n            if self.fixed_no_obj_ptr:\n                obj_ptr = lambda_is_obj_appearing * obj_ptr\n            obj_ptr = obj_ptr + (1 - lambda_is_obj_appearing) * self.no_obj_ptr\n\n        return (\n            low_res_multimasks,\n            high_res_multimasks,\n            ious,\n            low_res_masks,\n            high_res_masks,\n            obj_ptr,\n            object_score_logits,\n        )\n\n    def _encode_new_memory(\n        self,\n        current_vision_feats,\n        feat_sizes,\n        pred_masks_high_res,\n        object_score_logits,\n        is_mask_from_pts,\n    ):\n        \"\"\"\n        Identical to the corresponding method in the parent (SAM2VideoPredictor), but\n        cloning the memories and their pos enc to enable compilation.\n        \"\"\"\n        B = current_vision_feats[-1].size(1)  # batch size on this frame\n        C = self.hidden_dim\n        H, W = feat_sizes[-1]  # top-level (lowest-resolution) feature size\n        # top-level feature, (HW)BC => BCHW\n        pix_feat = current_vision_feats[-1].permute(1, 2, 0).view(B, C, H, W)\n        if self.non_overlap_masks_for_mem_enc and not self.training:\n            # optionally, apply non-overlapping constraints to the masks (it's applied\n            # in the batch dimension and should only be used during eval, where all\n            # the objects come from the same video under batch size 1).\n            pred_masks_high_res = self._apply_non_overlapping_constraints(\n                pred_masks_high_res\n            )\n        # scale the raw mask logits with a temperature before applying sigmoid\n        binarize = self.binarize_mask_from_pts_for_mem_enc and is_mask_from_pts\n        if binarize and not self.training:\n            mask_for_mem = (pred_masks_high_res > 0).float()\n        else:\n            # apply sigmoid on the raw mask logits to turn them into range (0, 1)\n            mask_for_mem = torch.sigmoid(pred_masks_high_res)\n        # apply scale and bias terms to the sigmoid probabilities\n        if self.sigmoid_scale_for_mem_enc != 1.0:\n            mask_for_mem = mask_for_mem * self.sigmoid_scale_for_mem_enc\n        if self.sigmoid_bias_for_mem_enc != 0.0:\n            mask_for_mem = mask_for_mem + self.sigmoid_bias_for_mem_enc\n        maskmem_out = self.memory_encoder(\n            pix_feat, mask_for_mem, skip_mask_sigmoid=True  # sigmoid already applied\n        )\n        # Clone the feats and pos_enc to enable compilation\n        maskmem_features = maskmem_out[\"vision_features\"].clone()\n        maskmem_pos_enc = [m.clone() for m in maskmem_out[\"vision_pos_enc\"]]\n        # add a no-object embedding to the spatial memory to indicate that the frame\n        # is predicted to be occluded (i.e. no object is appearing in the frame)\n        if self.no_obj_embed_spatial is not None:\n            is_obj_appearing = (object_score_logits > 0).float()\n            maskmem_features += (\n                1 - is_obj_appearing[..., None, None]\n            ) * self.no_obj_embed_spatial[..., None, None].expand(\n                *maskmem_features.shape\n            )\n\n        return maskmem_features, maskmem_pos_enc"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/sam2_video_predictor_legacy.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport warnings\nfrom collections import OrderedDict\n\nimport torch\nfrom sam2.modeling.sam2_base import NO_OBJ_SCORE, SAM2Base\nfrom sam2.utils.misc import (concat_points, fill_holes_in_mask_scores,\n                             load_video_frames)\nfrom tqdm import tqdm\n\n\nclass SAM2VideoPredictor(SAM2Base):\n    \"\"\"The predictor class to handle user interactions and manage inference states.\"\"\"\n\n    def __init__(\n        self,\n        fill_hole_area=0,\n        # whether to apply non-overlapping constraints on the output object masks\n        non_overlap_masks=False,\n        # whether to clear non-conditioning memory of the surrounding frames (which may contain outdated information) after adding correction clicks;\n        # note that this would only apply to *single-object tracking* unless `clear_non_cond_mem_for_multi_obj` is also set to True)\n        clear_non_cond_mem_around_input=False,\n        # whether to also clear non-conditioning memory of the surrounding frames (only effective when `clear_non_cond_mem_around_input` is True).\n        clear_non_cond_mem_for_multi_obj=False,\n        # if `add_all_frames_to_correct_as_cond` is True, we also append to the conditioning frame list any frame that receives a later correction click\n        # if `add_all_frames_to_correct_as_cond` is False, we conditioning frame list to only use those initial conditioning frames\n        add_all_frames_to_correct_as_cond=False,\n        **kwargs,\n    ):\n        super().__init__(**kwargs)\n        self.fill_hole_area = fill_hole_area\n        self.non_overlap_masks = non_overlap_masks\n        self.clear_non_cond_mem_around_input = clear_non_cond_mem_around_input\n        self.clear_non_cond_mem_for_multi_obj = clear_non_cond_mem_for_multi_obj\n        self.add_all_frames_to_correct_as_cond = add_all_frames_to_correct_as_cond\n\n    @torch.inference_mode()\n    def init_state(\n        self,\n        video_path,\n        offload_video_to_cpu=False,\n        offload_state_to_cpu=False,\n        async_loading_frames=False,\n    ):\n        \"\"\"Initialize an inference state.\"\"\"\n        compute_device = self.device  # device of the model\n        images, video_height, video_width = load_video_frames(\n            video_path=video_path,\n            image_size=self.image_size,\n            offload_video_to_cpu=offload_video_to_cpu,\n            async_loading_frames=async_loading_frames,\n            compute_device=compute_device,\n        )\n        inference_state = {}\n        inference_state[\"images\"] = images\n        inference_state[\"num_frames\"] = len(images)\n        # whether to offload the video frames to CPU memory\n        # turning on this option saves the GPU memory with only a very small overhead\n        inference_state[\"offload_video_to_cpu\"] = offload_video_to_cpu\n        # whether to offload the inference state to CPU memory\n        # turning on this option saves the GPU memory at the cost of a lower tracking fps\n        # (e.g. in a test case of 768x768 model, fps dropped from 27 to 24 when tracking one object\n        # and from 24 to 21 when tracking two objects)\n        inference_state[\"offload_state_to_cpu\"] = offload_state_to_cpu\n        # the original video height and width, used for resizing final output scores\n        inference_state[\"video_height\"] = video_height\n        inference_state[\"video_width\"] = video_width\n        inference_state[\"device\"] = compute_device\n        if offload_state_to_cpu:\n            inference_state[\"storage_device\"] = torch.device(\"cpu\")\n        else:\n            inference_state[\"storage_device\"] = compute_device\n        # inputs on each frame\n        inference_state[\"point_inputs_per_obj\"] = {}\n        inference_state[\"mask_inputs_per_obj\"] = {}\n        # visual features on a small number of recently visited frames for quick interactions\n        inference_state[\"cached_features\"] = {}\n        # values that don't change across frames (so we only need to hold one copy of them)\n        inference_state[\"constants\"] = {}\n        # mapping between client-side object id and model-side object index\n        inference_state[\"obj_id_to_idx\"] = OrderedDict()\n        inference_state[\"obj_idx_to_id\"] = OrderedDict()\n        inference_state[\"obj_ids\"] = []\n        # A storage to hold the model's tracking results and states on each frame\n        inference_state[\"output_dict\"] = {\n            \"cond_frame_outputs\": {},  # dict containing {frame_idx: <out>}\n            \"non_cond_frame_outputs\": {},  # dict containing {frame_idx: <out>}\n        }\n        # Slice (view) of each object tracking results, sharing the same memory with \"output_dict\"\n        inference_state[\"output_dict_per_obj\"] = {}\n        # A temporary storage to hold new outputs when user interact with a frame\n        # to add clicks or mask (it's merged into \"output_dict\" before propagation starts)\n        inference_state[\"temp_output_dict_per_obj\"] = {}\n        # Frames that already holds consolidated outputs from click or mask inputs\n        # (we directly use their consolidated outputs during tracking)\n        inference_state[\"consolidated_frame_inds\"] = {\n            \"cond_frame_outputs\": set(),  # set containing frame indices\n            \"non_cond_frame_outputs\": set(),  # set containing frame indices\n        }\n        # metadata for each tracking frame (e.g. which direction it's tracked)\n        inference_state[\"tracking_has_started\"] = False\n        inference_state[\"frames_already_tracked\"] = {}\n        # Warm up the visual backbone and cache the image feature on frame 0\n        self._get_image_feature(inference_state, frame_idx=0, batch_size=1)\n        return inference_state\n\n    @classmethod\n    def from_pretrained(cls, model_id: str, **kwargs) -> \"SAM2VideoPredictor\":\n        \"\"\"\n        Load a pretrained model from the Hugging Face hub.\n\n        Arguments:\n          model_id (str): The Hugging Face repository ID.\n          **kwargs: Additional arguments to pass to the model constructor.\n\n        Returns:\n          (SAM2VideoPredictor): The loaded model.\n        \"\"\"\n        from sam2.build_sam import build_sam2_video_predictor_hf\n\n        sam_model = build_sam2_video_predictor_hf(model_id, **kwargs)\n        return sam_model\n\n    def _obj_id_to_idx(self, inference_state, obj_id):\n        \"\"\"Map client-side object id to model-side object index.\"\"\"\n        obj_idx = inference_state[\"obj_id_to_idx\"].get(obj_id, None)\n        if obj_idx is not None:\n            return obj_idx\n\n        # This is a new object id not sent to the server before. We only allow adding\n        # new objects *before* the tracking starts.\n        allow_new_object = not inference_state[\"tracking_has_started\"]\n        if allow_new_object:\n            # get the next object slot\n            obj_idx = len(inference_state[\"obj_id_to_idx\"])\n            inference_state[\"obj_id_to_idx\"][obj_id] = obj_idx\n            inference_state[\"obj_idx_to_id\"][obj_idx] = obj_id\n            inference_state[\"obj_ids\"] = list(inference_state[\"obj_id_to_idx\"])\n            # set up input and output structures for this object\n            inference_state[\"point_inputs_per_obj\"][obj_idx] = {}\n            inference_state[\"mask_inputs_per_obj\"][obj_idx] = {}\n            inference_state[\"output_dict_per_obj\"][obj_idx] = {\n                \"cond_frame_outputs\": {},  # dict containing {frame_idx: <out>}\n                \"non_cond_frame_outputs\": {},  # dict containing {frame_idx: <out>}\n            }\n            inference_state[\"temp_output_dict_per_obj\"][obj_idx] = {\n                \"cond_frame_outputs\": {},  # dict containing {frame_idx: <out>}\n                \"non_cond_frame_outputs\": {},  # dict containing {frame_idx: <out>}\n            }\n            return obj_idx\n        else:\n            raise RuntimeError(\n                f\"Cannot add new object id {obj_id} after tracking starts. \"\n                f\"All existing object ids: {inference_state['obj_ids']}. \"\n                f\"Please call 'reset_state' to restart from scratch.\"\n            )\n\n    def _obj_idx_to_id(self, inference_state, obj_idx):\n        \"\"\"Map model-side object index to client-side object id.\"\"\"\n        return inference_state[\"obj_idx_to_id\"][obj_idx]\n\n    def _get_obj_num(self, inference_state):\n        \"\"\"Get the total number of unique object ids received so far in this session.\"\"\"\n        return len(inference_state[\"obj_idx_to_id\"])\n\n    @torch.inference_mode()\n    def add_new_points_or_box(\n        self,\n        inference_state,\n        frame_idx,\n        obj_id,\n        points=None,\n        labels=None,\n        clear_old_points=True,\n        normalize_coords=True,\n        box=None,\n    ):\n        \"\"\"Add new points to a frame.\"\"\"\n        obj_idx = self._obj_id_to_idx(inference_state, obj_id)\n        point_inputs_per_frame = inference_state[\"point_inputs_per_obj\"][obj_idx]\n        mask_inputs_per_frame = inference_state[\"mask_inputs_per_obj\"][obj_idx]\n\n        if (points is not None) != (labels is not None):\n            raise ValueError(\"points and labels must be provided together\")\n        if points is None and box is None:\n            raise ValueError(\"at least one of points or box must be provided as input\")\n\n        if points is None:\n            points = torch.zeros(0, 2, dtype=torch.float32)\n        elif not isinstance(points, torch.Tensor):\n            points = torch.tensor(points, dtype=torch.float32)\n        if labels is None:\n            labels = torch.zeros(0, dtype=torch.int32)\n        elif not isinstance(labels, torch.Tensor):\n            labels = torch.tensor(labels, dtype=torch.int32)\n        if points.dim() == 2:\n            points = points.unsqueeze(0)  # add batch dimension\n        if labels.dim() == 1:\n            labels = labels.unsqueeze(0)  # add batch dimension\n\n        # If `box` is provided, we add it as the first two points with labels 2 and 3\n        # along with the user-provided points (consistent with how SAM 2 is trained).\n        if box is not None:\n            if not clear_old_points:\n                raise ValueError(\n                    \"cannot add box without clearing old points, since \"\n                    \"box prompt must be provided before any point prompt \"\n                    \"(please use clear_old_points=True instead)\"\n                )\n            if inference_state[\"tracking_has_started\"]:\n                warnings.warn(\n                    \"You are adding a box after tracking starts. SAM 2 may not always be \"\n                    \"able to incorporate a box prompt for *refinement*. If you intend to \"\n                    \"use box prompt as an *initial* input before tracking, please call \"\n                    \"'reset_state' on the inference state to restart from scratch.\",\n                    category=UserWarning,\n                    stacklevel=2,\n                )\n            if not isinstance(box, torch.Tensor):\n                box = torch.tensor(box, dtype=torch.float32, device=points.device)\n            box_coords = box.reshape(1, 2, 2)\n            box_labels = torch.tensor([2, 3], dtype=torch.int32, device=labels.device)\n            box_labels = box_labels.reshape(1, 2)\n            points = torch.cat([box_coords, points], dim=1)\n            labels = torch.cat([box_labels, labels], dim=1)\n\n        if normalize_coords:\n            video_H = inference_state[\"video_height\"]\n            video_W = inference_state[\"video_width\"]\n            points = points / torch.tensor([video_W, video_H]).to(points.device)\n        # scale the (normalized) coordinates by the model's internal image size\n        points = points * self.image_size\n        points = points.to(inference_state[\"device\"])\n        labels = labels.to(inference_state[\"device\"])\n\n        if not clear_old_points:\n            point_inputs = point_inputs_per_frame.get(frame_idx, None)\n        else:\n            point_inputs = None\n        point_inputs = concat_points(point_inputs, points, labels)\n\n        point_inputs_per_frame[frame_idx] = point_inputs\n        mask_inputs_per_frame.pop(frame_idx, None)\n        # If this frame hasn't been tracked before, we treat it as an initial conditioning\n        # frame, meaning that the inputs points are to generate segments on this frame without\n        # using any memory from other frames, like in SAM. Otherwise (if it has been tracked),\n        # the input points will be used to correct the already tracked masks.\n        is_init_cond_frame = frame_idx not in inference_state[\"frames_already_tracked\"]\n        # whether to track in reverse time order\n        if is_init_cond_frame:\n            reverse = False\n        else:\n            reverse = inference_state[\"frames_already_tracked\"][frame_idx][\"reverse\"]\n        obj_output_dict = inference_state[\"output_dict_per_obj\"][obj_idx]\n        obj_temp_output_dict = inference_state[\"temp_output_dict_per_obj\"][obj_idx]\n        # Add a frame to conditioning output if it's an initial conditioning frame or\n        # if the model sees all frames receiving clicks/mask as conditioning frames.\n        is_cond = is_init_cond_frame or self.add_all_frames_to_correct_as_cond\n        storage_key = \"cond_frame_outputs\" if is_cond else \"non_cond_frame_outputs\"\n\n        # Get any previously predicted mask logits on this object and feed it along with\n        # the new clicks into the SAM mask decoder.\n        prev_sam_mask_logits = None\n        # lookup temporary output dict first, which contains the most recent output\n        # (if not found, then lookup conditioning and non-conditioning frame output)\n        prev_out = obj_temp_output_dict[storage_key].get(frame_idx)\n        if prev_out is None:\n            prev_out = obj_output_dict[\"cond_frame_outputs\"].get(frame_idx)\n            if prev_out is None:\n                prev_out = obj_output_dict[\"non_cond_frame_outputs\"].get(frame_idx)\n\n        if prev_out is not None and prev_out[\"pred_masks\"] is not None:\n            device = inference_state[\"device\"]\n            prev_sam_mask_logits = prev_out[\"pred_masks\"].to(device, non_blocking=True)\n            # Clamp the scale of prev_sam_mask_logits to avoid rare numerical issues.\n            prev_sam_mask_logits = torch.clamp(prev_sam_mask_logits, -32.0, 32.0)\n        current_out, _ = self._run_single_frame_inference(\n            inference_state=inference_state,\n            output_dict=obj_output_dict,  # run on the slice of a single object\n            frame_idx=frame_idx,\n            batch_size=1,  # run on the slice of a single object\n            is_init_cond_frame=is_init_cond_frame,\n            point_inputs=point_inputs,\n            mask_inputs=None,\n            reverse=reverse,\n            # Skip the memory encoder when adding clicks or mask. We execute the memory encoder\n            # at the beginning of `propagate_in_video` (after user finalize their clicks). This\n            # allows us to enforce non-overlapping constraints on all objects before encoding\n            # them into memory.\n            run_mem_encoder=False,\n            prev_sam_mask_logits=prev_sam_mask_logits,\n        )\n        # Add the output to the output dict (to be used as future memory)\n        obj_temp_output_dict[storage_key][frame_idx] = current_out\n\n        # Resize the output mask to the original video resolution\n        obj_ids = inference_state[\"obj_ids\"]\n        consolidated_out = self._consolidate_temp_output_across_obj(\n            inference_state,\n            frame_idx,\n            is_cond=is_cond,\n            run_mem_encoder=False,\n            consolidate_at_video_res=True,\n        )\n        _, video_res_masks = self._get_orig_video_res_output(\n            inference_state, consolidated_out[\"pred_masks_video_res\"]\n        )\n        return frame_idx, obj_ids, video_res_masks\n\n    def add_new_points(self, *args, **kwargs):\n        \"\"\"Deprecated method. Please use `add_new_points_or_box` instead.\"\"\"\n        return self.add_new_points_or_box(*args, **kwargs)\n\n    @torch.inference_mode()\n    def add_new_mask(\n        self,\n        inference_state,\n        frame_idx,\n        obj_id,\n        mask,\n    ):\n        \"\"\"Add new mask to a frame.\"\"\"\n        obj_idx = self._obj_id_to_idx(inference_state, obj_id)\n        point_inputs_per_frame = inference_state[\"point_inputs_per_obj\"][obj_idx]\n        mask_inputs_per_frame = inference_state[\"mask_inputs_per_obj\"][obj_idx]\n\n        if not isinstance(mask, torch.Tensor):\n            mask = torch.tensor(mask, dtype=torch.bool)\n        assert mask.dim() == 2\n        mask_H, mask_W = mask.shape\n        mask_inputs_orig = mask[None, None]  # add batch and channel dimension\n        mask_inputs_orig = mask_inputs_orig.float().to(inference_state[\"device\"])\n\n        # resize the mask if it doesn't match the model's image size\n        if mask_H != self.image_size or mask_W != self.image_size:\n            mask_inputs = torch.nn.functional.interpolate(\n                mask_inputs_orig,\n                size=(self.image_size, self.image_size),\n                align_corners=False,\n                mode=\"bilinear\",\n                antialias=True,  # use antialias for downsampling\n            )\n            mask_inputs = (mask_inputs >= 0.5).float()\n        else:\n            mask_inputs = mask_inputs_orig\n\n        mask_inputs_per_frame[frame_idx] = mask_inputs\n        point_inputs_per_frame.pop(frame_idx, None)\n        # If this frame hasn't been tracked before, we treat it as an initial conditioning\n        # frame, meaning that the inputs points are to generate segments on this frame without\n        # using any memory from other frames, like in SAM. Otherwise (if it has been tracked),\n        # the input points will be used to correct the already tracked masks.\n        is_init_cond_frame = frame_idx not in inference_state[\"frames_already_tracked\"]\n        # whether to track in reverse time order\n        if is_init_cond_frame:\n            reverse = False\n        else:\n            reverse = inference_state[\"frames_already_tracked\"][frame_idx][\"reverse\"]\n        obj_output_dict = inference_state[\"output_dict_per_obj\"][obj_idx]\n        obj_temp_output_dict = inference_state[\"temp_output_dict_per_obj\"][obj_idx]\n        # Add a frame to conditioning output if it's an initial conditioning frame or\n        # if the model sees all frames receiving clicks/mask as conditioning frames.\n        is_cond = is_init_cond_frame or self.add_all_frames_to_correct_as_cond\n        storage_key = \"cond_frame_outputs\" if is_cond else \"non_cond_frame_outputs\"\n\n        current_out, _ = self._run_single_frame_inference(\n            inference_state=inference_state,\n            output_dict=obj_output_dict,  # run on the slice of a single object\n            frame_idx=frame_idx,\n            batch_size=1,  # run on the slice of a single object\n            is_init_cond_frame=is_init_cond_frame,\n            point_inputs=None,\n            mask_inputs=mask_inputs,\n            reverse=reverse,\n            # Skip the memory encoder when adding clicks or mask. We execute the memory encoder\n            # at the beginning of `propagate_in_video` (after user finalize their clicks). This\n            # allows us to enforce non-overlapping constraints on all objects before encoding\n            # them into memory.\n            run_mem_encoder=False,\n        )\n        # Add the output to the output dict (to be used as future memory)\n        obj_temp_output_dict[storage_key][frame_idx] = current_out\n\n        # Resize the output mask to the original video resolution\n        obj_ids = inference_state[\"obj_ids\"]\n        consolidated_out = self._consolidate_temp_output_across_obj(\n            inference_state,\n            frame_idx,\n            is_cond=is_cond,\n            run_mem_encoder=False,\n            consolidate_at_video_res=True,\n        )\n        _, video_res_masks = self._get_orig_video_res_output(\n            inference_state, consolidated_out[\"pred_masks_video_res\"]\n        )\n        return frame_idx, obj_ids, video_res_masks\n\n    def _get_orig_video_res_output(self, inference_state, any_res_masks):\n        \"\"\"\n        Resize the object scores to the original video resolution (video_res_masks)\n        and apply non-overlapping constraints for final output.\n        \"\"\"\n        device = inference_state[\"device\"]\n        video_H = inference_state[\"video_height\"]\n        video_W = inference_state[\"video_width\"]\n        any_res_masks = any_res_masks.to(device, non_blocking=True)\n        if any_res_masks.shape[-2:] == (video_H, video_W):\n            video_res_masks = any_res_masks\n        else:\n            video_res_masks = torch.nn.functional.interpolate(\n                any_res_masks,\n                size=(video_H, video_W),\n                mode=\"bilinear\",\n                align_corners=False,\n            )\n        if self.non_overlap_masks:\n            video_res_masks = self._apply_non_overlapping_constraints(video_res_masks)\n        return any_res_masks, video_res_masks\n\n    def _consolidate_temp_output_across_obj(\n        self,\n        inference_state,\n        frame_idx,\n        is_cond,\n        run_mem_encoder,\n        consolidate_at_video_res=False,\n    ):\n        \"\"\"\n        Consolidate the per-object temporary outputs in `temp_output_dict_per_obj` on\n        a frame into a single output for all objects, including\n        1) fill any missing objects either from `output_dict_per_obj` (if they exist in\n           `output_dict_per_obj` for this frame) or leave them as placeholder values\n           (if they don't exist in `output_dict_per_obj` for this frame);\n        2) if specified, rerun memory encoder after apply non-overlapping constraints\n           on the object scores.\n        \"\"\"\n        batch_size = self._get_obj_num(inference_state)\n        storage_key = \"cond_frame_outputs\" if is_cond else \"non_cond_frame_outputs\"\n        # Optionally, we allow consolidating the temporary outputs at the original\n        # video resolution (to provide a better editing experience for mask prompts).\n        if consolidate_at_video_res:\n            assert not run_mem_encoder, \"memory encoder cannot run at video resolution\"\n            consolidated_H = inference_state[\"video_height\"]\n            consolidated_W = inference_state[\"video_width\"]\n            consolidated_mask_key = \"pred_masks_video_res\"\n        else:\n            consolidated_H = consolidated_W = self.image_size // 4\n            consolidated_mask_key = \"pred_masks\"\n\n        # Initialize `consolidated_out`. Its \"maskmem_features\" and \"maskmem_pos_enc\"\n        # will be added when rerunning the memory encoder after applying non-overlapping\n        # constraints to object scores. Its \"pred_masks\" are prefilled with a large\n        # negative value (NO_OBJ_SCORE) to represent missing objects.\n        consolidated_out = {\n            \"maskmem_features\": None,\n            \"maskmem_pos_enc\": None,\n            consolidated_mask_key: torch.full(\n                size=(batch_size, 1, consolidated_H, consolidated_W),\n                fill_value=NO_OBJ_SCORE,\n                dtype=torch.float32,\n                device=inference_state[\"storage_device\"],\n            ),\n            \"obj_ptr\": torch.full(\n                size=(batch_size, self.hidden_dim),\n                fill_value=NO_OBJ_SCORE,\n                dtype=torch.float32,\n                device=inference_state[\"device\"],\n            ),\n            \"object_score_logits\": torch.full(\n                size=(batch_size, 1),\n                # default to 10.0 for object_score_logits, i.e. assuming the object is\n                # present as sigmoid(10)=1, same as in `predict_masks` of `MaskDecoder`\n                fill_value=10.0,\n                dtype=torch.float32,\n                device=inference_state[\"device\"],\n            ),\n        }\n        empty_mask_ptr = None\n        for obj_idx in range(batch_size):\n            obj_temp_output_dict = inference_state[\"temp_output_dict_per_obj\"][obj_idx]\n            obj_output_dict = inference_state[\"output_dict_per_obj\"][obj_idx]\n            out = obj_temp_output_dict[storage_key].get(frame_idx, None)\n            # If the object doesn't appear in \"temp_output_dict_per_obj\" on this frame,\n            # we fall back and look up its previous output in \"output_dict_per_obj\".\n            # We look up both \"cond_frame_outputs\" and \"non_cond_frame_outputs\" in\n            # \"output_dict_per_obj\" to find a previous output for this object.\n            if out is None:\n                out = obj_output_dict[\"cond_frame_outputs\"].get(frame_idx, None)\n            if out is None:\n                out = obj_output_dict[\"non_cond_frame_outputs\"].get(frame_idx, None)\n            # If the object doesn't appear in \"output_dict_per_obj\" either, we skip it\n            # and leave its mask scores to the default scores (i.e. the NO_OBJ_SCORE\n            # placeholder above) and set its object pointer to be a dummy pointer.\n            if out is None:\n                # Fill in dummy object pointers for those objects without any inputs or\n                # tracking outcomes on this frame (only do it under `run_mem_encoder=True`,\n                # i.e. when we need to build the memory for tracking).\n                if run_mem_encoder:\n                    if empty_mask_ptr is None:\n                        empty_mask_ptr = self._get_empty_mask_ptr(\n                            inference_state, frame_idx\n                        )\n                    # fill object pointer with a dummy pointer (based on an empty mask)\n                    consolidated_out[\"obj_ptr\"][obj_idx : obj_idx + 1] = empty_mask_ptr\n                continue\n            # Add the temporary object output mask to consolidated output mask\n            obj_mask = out[\"pred_masks\"]\n            consolidated_pred_masks = consolidated_out[consolidated_mask_key]\n            if obj_mask.shape[-2:] == consolidated_pred_masks.shape[-2:]:\n                consolidated_pred_masks[obj_idx : obj_idx + 1] = obj_mask\n            else:\n                # Resize first if temporary object mask has a different resolution\n                resized_obj_mask = torch.nn.functional.interpolate(\n                    obj_mask,\n                    size=consolidated_pred_masks.shape[-2:],\n                    mode=\"bilinear\",\n                    align_corners=False,\n                )\n                consolidated_pred_masks[obj_idx : obj_idx + 1] = resized_obj_mask\n            consolidated_out[\"obj_ptr\"][obj_idx : obj_idx + 1] = out[\"obj_ptr\"]\n            consolidated_out[\"object_score_logits\"][obj_idx : obj_idx + 1] = out[\n                \"object_score_logits\"\n            ]\n\n        # Optionally, apply non-overlapping constraints on the consolidated scores\n        # and rerun the memory encoder\n        if run_mem_encoder:\n            device = inference_state[\"device\"]\n            high_res_masks = torch.nn.functional.interpolate(\n                consolidated_out[\"pred_masks\"].to(device, non_blocking=True),\n                size=(self.image_size, self.image_size),\n                mode=\"bilinear\",\n                align_corners=False,\n            )\n            if self.non_overlap_masks_for_mem_enc:\n                high_res_masks = self._apply_non_overlapping_constraints(high_res_masks)\n            maskmem_features, maskmem_pos_enc = self._run_memory_encoder(\n                inference_state=inference_state,\n                frame_idx=frame_idx,\n                batch_size=batch_size,\n                high_res_masks=high_res_masks,\n                object_score_logits=consolidated_out[\"object_score_logits\"],\n                is_mask_from_pts=True,  # these frames are what the user interacted with\n            )\n            consolidated_out[\"maskmem_features\"] = maskmem_features\n            consolidated_out[\"maskmem_pos_enc\"] = maskmem_pos_enc\n\n        return consolidated_out\n\n    def _get_empty_mask_ptr(self, inference_state, frame_idx):\n        \"\"\"Get a dummy object pointer based on an empty mask on the current frame.\"\"\"\n        # A dummy (empty) mask with a single object\n        batch_size = 1\n        mask_inputs = torch.zeros(\n            (batch_size, 1, self.image_size, self.image_size),\n            dtype=torch.float32,\n            device=inference_state[\"device\"],\n        )\n\n        # Retrieve correct image features\n        (\n            _,\n            _,\n            current_vision_feats,\n            current_vision_pos_embeds,\n            feat_sizes,\n        ) = self._get_image_feature(inference_state, frame_idx, batch_size)\n\n        # Feed the empty mask and image feature above to get a dummy object pointer\n        current_out = self.track_step(\n            frame_idx=frame_idx,\n            is_init_cond_frame=True,\n            current_vision_feats=current_vision_feats,\n            current_vision_pos_embeds=current_vision_pos_embeds,\n            feat_sizes=feat_sizes,\n            point_inputs=None,\n            mask_inputs=mask_inputs,\n            output_dict={},\n            num_frames=inference_state[\"num_frames\"],\n            track_in_reverse=False,\n            run_mem_encoder=False,\n            prev_sam_mask_logits=None,\n        )\n        return current_out[\"obj_ptr\"]\n\n    @torch.inference_mode()\n    def propagate_in_video_preflight(self, inference_state):\n        \"\"\"Prepare inference_state and consolidate temporary outputs before tracking.\"\"\"\n        # Tracking has started and we don't allow adding new objects until session is reset.\n        inference_state[\"tracking_has_started\"] = True\n        batch_size = self._get_obj_num(inference_state)\n\n        # Consolidate per-object temporary outputs in \"temp_output_dict_per_obj\" and\n        # add them into \"output_dict\".\n        temp_output_dict_per_obj = inference_state[\"temp_output_dict_per_obj\"]\n        output_dict = inference_state[\"output_dict\"]\n        # \"consolidated_frame_inds\" contains indices of those frames where consolidated\n        # temporary outputs have been added (either in this call or any previous calls\n        # to `propagate_in_video_preflight`).\n        consolidated_frame_inds = inference_state[\"consolidated_frame_inds\"]\n        for is_cond in [False, True]:\n            # Separately consolidate conditioning and non-conditioning temp outputs\n            storage_key = \"cond_frame_outputs\" if is_cond else \"non_cond_frame_outputs\"\n            # Find all the frames that contain temporary outputs for any objects\n            # (these should be the frames that have just received clicks for mask inputs\n            # via `add_new_points_or_box` or `add_new_mask`)\n            temp_frame_inds = set()\n            for obj_temp_output_dict in temp_output_dict_per_obj.values():\n                temp_frame_inds.update(obj_temp_output_dict[storage_key].keys())\n            consolidated_frame_inds[storage_key].update(temp_frame_inds)\n            # consolidate the temporary output across all objects on this frame\n            for frame_idx in temp_frame_inds:\n                consolidated_out = self._consolidate_temp_output_across_obj(\n                    inference_state, frame_idx, is_cond=is_cond, run_mem_encoder=True\n                )\n                # merge them into \"output_dict\" and also create per-object slices\n                output_dict[storage_key][frame_idx] = consolidated_out\n                self._add_output_per_object(\n                    inference_state, frame_idx, consolidated_out, storage_key\n                )\n                clear_non_cond_mem = self.clear_non_cond_mem_around_input and (\n                    self.clear_non_cond_mem_for_multi_obj or batch_size <= 1\n                )\n                if clear_non_cond_mem:\n                    # clear non-conditioning memory of the surrounding frames\n                    self._clear_non_cond_mem_around_input(inference_state, frame_idx)\n\n            # clear temporary outputs in `temp_output_dict_per_obj`\n            for obj_temp_output_dict in temp_output_dict_per_obj.values():\n                obj_temp_output_dict[storage_key].clear()\n\n        # edge case: if an output is added to \"cond_frame_outputs\", we remove any prior\n        # output on the same frame in \"non_cond_frame_outputs\"\n        for frame_idx in output_dict[\"cond_frame_outputs\"]:\n            output_dict[\"non_cond_frame_outputs\"].pop(frame_idx, None)\n        for obj_output_dict in inference_state[\"output_dict_per_obj\"].values():\n            for frame_idx in obj_output_dict[\"cond_frame_outputs\"]:\n                obj_output_dict[\"non_cond_frame_outputs\"].pop(frame_idx, None)\n        for frame_idx in consolidated_frame_inds[\"cond_frame_outputs\"]:\n            assert frame_idx in output_dict[\"cond_frame_outputs\"]\n            consolidated_frame_inds[\"non_cond_frame_outputs\"].discard(frame_idx)\n\n        # Make sure that the frame indices in \"consolidated_frame_inds\" are exactly those frames\n        # with either points or mask inputs (which should be true under a correct workflow).\n        all_consolidated_frame_inds = (\n            consolidated_frame_inds[\"cond_frame_outputs\"]\n            | consolidated_frame_inds[\"non_cond_frame_outputs\"]\n        )\n        input_frames_inds = set()\n        for point_inputs_per_frame in inference_state[\"point_inputs_per_obj\"].values():\n            input_frames_inds.update(point_inputs_per_frame.keys())\n        for mask_inputs_per_frame in inference_state[\"mask_inputs_per_obj\"].values():\n            input_frames_inds.update(mask_inputs_per_frame.keys())\n        assert all_consolidated_frame_inds == input_frames_inds\n\n    @torch.inference_mode()\n    def propagate_in_video(\n        self,\n        inference_state,\n        start_frame_idx=None,\n        max_frame_num_to_track=None,\n        reverse=False,\n    ):\n        \"\"\"Propagate the input points across frames to track in the entire video.\"\"\"\n        self.propagate_in_video_preflight(inference_state)\n\n        output_dict = inference_state[\"output_dict\"]\n        consolidated_frame_inds = inference_state[\"consolidated_frame_inds\"]\n        obj_ids = inference_state[\"obj_ids\"]\n        num_frames = inference_state[\"num_frames\"]\n        batch_size = self._get_obj_num(inference_state)\n        if len(output_dict[\"cond_frame_outputs\"]) == 0:\n            raise RuntimeError(\"No points are provided; please add points first\")\n        clear_non_cond_mem = self.clear_non_cond_mem_around_input and (\n            self.clear_non_cond_mem_for_multi_obj or batch_size <= 1\n        )\n\n        # set start index, end index, and processing order\n        if start_frame_idx is None:\n            # default: start from the earliest frame with input points\n            start_frame_idx = min(output_dict[\"cond_frame_outputs\"])\n        if max_frame_num_to_track is None:\n            # default: track all the frames in the video\n            max_frame_num_to_track = num_frames\n        if reverse:\n            end_frame_idx = max(start_frame_idx - max_frame_num_to_track, 0)\n            if start_frame_idx > 0:\n                processing_order = range(start_frame_idx, end_frame_idx - 1, -1)\n            else:\n                processing_order = []  # skip reverse tracking if starting from frame 0\n        else:\n            end_frame_idx = min(\n                start_frame_idx + max_frame_num_to_track, num_frames - 1\n            )\n            processing_order = range(start_frame_idx, end_frame_idx + 1)\n\n        for frame_idx in tqdm(processing_order, desc=\"propagate in video\"):\n            # We skip those frames already in consolidated outputs (these are frames\n            # that received input clicks or mask). Note that we cannot directly run\n            # batched forward on them via `_run_single_frame_inference` because the\n            # number of clicks on each object might be different.\n            if frame_idx in consolidated_frame_inds[\"cond_frame_outputs\"]:\n                storage_key = \"cond_frame_outputs\"\n                current_out = output_dict[storage_key][frame_idx]\n                pred_masks = current_out[\"pred_masks\"]\n                if clear_non_cond_mem:\n                    # clear non-conditioning memory of the surrounding frames\n                    self._clear_non_cond_mem_around_input(inference_state, frame_idx)\n            elif frame_idx in consolidated_frame_inds[\"non_cond_frame_outputs\"]:\n                storage_key = \"non_cond_frame_outputs\"\n                current_out = output_dict[storage_key][frame_idx]\n                pred_masks = current_out[\"pred_masks\"]\n            else:\n                storage_key = \"non_cond_frame_outputs\"\n                current_out, pred_masks = self._run_single_frame_inference(\n                    inference_state=inference_state,\n                    output_dict=output_dict,\n                    frame_idx=frame_idx,\n                    batch_size=batch_size,\n                    is_init_cond_frame=False,\n                    point_inputs=None,\n                    mask_inputs=None,\n                    reverse=reverse,\n                    run_mem_encoder=True,\n                )\n                output_dict[storage_key][frame_idx] = current_out\n            # Create slices of per-object outputs for subsequent interaction with each\n            # individual object after tracking.\n            self._add_output_per_object(\n                inference_state, frame_idx, current_out, storage_key\n            )\n            inference_state[\"frames_already_tracked\"][frame_idx] = {\"reverse\": reverse}\n\n            # Resize the output mask to the original video resolution (we directly use\n            # the mask scores on GPU for output to avoid any CPU conversion in between)\n            _, video_res_masks = self._get_orig_video_res_output(\n                inference_state, pred_masks\n            )\n            yield frame_idx, obj_ids, video_res_masks\n\n    def _add_output_per_object(\n        self, inference_state, frame_idx, current_out, storage_key\n    ):\n        \"\"\"\n        Split a multi-object output into per-object output slices and add them into\n        `output_dict_per_obj`. The resulting slices share the same tensor storage.\n        \"\"\"\n        maskmem_features = current_out[\"maskmem_features\"]\n        assert maskmem_features is None or isinstance(maskmem_features, torch.Tensor)\n\n        maskmem_pos_enc = current_out[\"maskmem_pos_enc\"]\n        assert maskmem_pos_enc is None or isinstance(maskmem_pos_enc, list)\n\n        output_dict_per_obj = inference_state[\"output_dict_per_obj\"]\n        for obj_idx, obj_output_dict in output_dict_per_obj.items():\n            obj_slice = slice(obj_idx, obj_idx + 1)\n            obj_out = {\n                \"maskmem_features\": None,\n                \"maskmem_pos_enc\": None,\n                \"pred_masks\": current_out[\"pred_masks\"][obj_slice],\n                \"obj_ptr\": current_out[\"obj_ptr\"][obj_slice],\n                \"object_score_logits\": current_out[\"object_score_logits\"][obj_slice],\n            }\n            if maskmem_features is not None:\n                obj_out[\"maskmem_features\"] = maskmem_features[obj_slice]\n            if maskmem_pos_enc is not None:\n                obj_out[\"maskmem_pos_enc\"] = [x[obj_slice] for x in maskmem_pos_enc]\n            obj_output_dict[storage_key][frame_idx] = obj_out\n\n    @torch.inference_mode()\n    def clear_all_prompts_in_frame(\n        self, inference_state, frame_idx, obj_id, need_output=True\n    ):\n        \"\"\"Remove all input points or mask in a specific frame for a given object.\"\"\"\n        obj_idx = self._obj_id_to_idx(inference_state, obj_id)\n\n        # Clear the conditioning information on the given frame\n        inference_state[\"point_inputs_per_obj\"][obj_idx].pop(frame_idx, None)\n        inference_state[\"mask_inputs_per_obj\"][obj_idx].pop(frame_idx, None)\n\n        temp_output_dict_per_obj = inference_state[\"temp_output_dict_per_obj\"]\n        temp_output_dict_per_obj[obj_idx][\"cond_frame_outputs\"].pop(frame_idx, None)\n        temp_output_dict_per_obj[obj_idx][\"non_cond_frame_outputs\"].pop(frame_idx, None)\n\n        # Check and see if there are still any inputs left on this frame\n        batch_size = self._get_obj_num(inference_state)\n        frame_has_input = False\n        for obj_idx2 in range(batch_size):\n            if frame_idx in inference_state[\"point_inputs_per_obj\"][obj_idx2]:\n                frame_has_input = True\n                break\n            if frame_idx in inference_state[\"mask_inputs_per_obj\"][obj_idx2]:\n                frame_has_input = True\n                break\n\n        # If this frame has no remaining inputs for any objects, we further clear its\n        # conditioning frame status\n        if not frame_has_input:\n            output_dict = inference_state[\"output_dict\"]\n            consolidated_frame_inds = inference_state[\"consolidated_frame_inds\"]\n            consolidated_frame_inds[\"cond_frame_outputs\"].discard(frame_idx)\n            consolidated_frame_inds[\"non_cond_frame_outputs\"].discard(frame_idx)\n            # Remove the frame's conditioning output (possibly downgrading it to non-conditioning)\n            out = output_dict[\"cond_frame_outputs\"].pop(frame_idx, None)\n            if out is not None:\n                # The frame is not a conditioning frame anymore since it's not receiving inputs,\n                # so we \"downgrade\" its output (if exists) to a non-conditioning frame output.\n                output_dict[\"non_cond_frame_outputs\"][frame_idx] = out\n                inference_state[\"frames_already_tracked\"].pop(frame_idx, None)\n            # Similarly, do it for the sliced output on each object.\n            for obj_idx2 in range(batch_size):\n                obj_output_dict = inference_state[\"output_dict_per_obj\"][obj_idx2]\n                obj_out = obj_output_dict[\"cond_frame_outputs\"].pop(frame_idx, None)\n                if obj_out is not None:\n                    obj_output_dict[\"non_cond_frame_outputs\"][frame_idx] = obj_out\n\n            # If all the conditioning frames have been removed, we also clear the tracking outputs\n            if len(output_dict[\"cond_frame_outputs\"]) == 0:\n                self._reset_tracking_results(inference_state)\n\n        if not need_output:\n            return\n        # Finally, output updated masks per object (after removing the inputs above)\n        obj_ids = inference_state[\"obj_ids\"]\n        is_cond = any(\n            frame_idx in obj_temp_output_dict[\"cond_frame_outputs\"]\n            for obj_temp_output_dict in temp_output_dict_per_obj.values()\n        )\n        consolidated_out = self._consolidate_temp_output_across_obj(\n            inference_state,\n            frame_idx,\n            is_cond=is_cond,\n            run_mem_encoder=False,\n            consolidate_at_video_res=True,\n        )\n        _, video_res_masks = self._get_orig_video_res_output(\n            inference_state, consolidated_out[\"pred_masks_video_res\"]\n        )\n        return frame_idx, obj_ids, video_res_masks\n\n    @torch.inference_mode()\n    def reset_state(self, inference_state):\n        \"\"\"Remove all input points or mask in all frames throughout the video.\"\"\"\n        self._reset_tracking_results(inference_state)\n        # Remove all object ids\n        inference_state[\"obj_id_to_idx\"].clear()\n        inference_state[\"obj_idx_to_id\"].clear()\n        inference_state[\"obj_ids\"].clear()\n        inference_state[\"point_inputs_per_obj\"].clear()\n        inference_state[\"mask_inputs_per_obj\"].clear()\n        inference_state[\"output_dict_per_obj\"].clear()\n        inference_state[\"temp_output_dict_per_obj\"].clear()\n\n    def _reset_tracking_results(self, inference_state):\n        \"\"\"Reset all tracking inputs and results across the videos.\"\"\"\n        for v in inference_state[\"point_inputs_per_obj\"].values():\n            v.clear()\n        for v in inference_state[\"mask_inputs_per_obj\"].values():\n            v.clear()\n        for v in inference_state[\"output_dict_per_obj\"].values():\n            v[\"cond_frame_outputs\"].clear()\n            v[\"non_cond_frame_outputs\"].clear()\n        for v in inference_state[\"temp_output_dict_per_obj\"].values():\n            v[\"cond_frame_outputs\"].clear()\n            v[\"non_cond_frame_outputs\"].clear()\n        inference_state[\"output_dict\"][\"cond_frame_outputs\"].clear()\n        inference_state[\"output_dict\"][\"non_cond_frame_outputs\"].clear()\n        inference_state[\"consolidated_frame_inds\"][\"cond_frame_outputs\"].clear()\n        inference_state[\"consolidated_frame_inds\"][\"non_cond_frame_outputs\"].clear()\n        inference_state[\"tracking_has_started\"] = False\n        inference_state[\"frames_already_tracked\"].clear()\n\n    def _get_image_feature(self, inference_state, frame_idx, batch_size):\n        \"\"\"Compute the image features on a given frame.\"\"\"\n        # Look up in the cache first\n        image, backbone_out = inference_state[\"cached_features\"].get(\n            frame_idx, (None, None)\n        )\n        if backbone_out is None:\n            # Cache miss -- we will run inference on a single image\n            device = inference_state[\"device\"]\n            image = inference_state[\"images\"][frame_idx].to(device).float().unsqueeze(0)\n            backbone_out = self.forward_image(image)\n            # Cache the most recent frame's feature (for repeated interactions with\n            # a frame; we can use an LRU cache for more frames in the future).\n            inference_state[\"cached_features\"] = {frame_idx: (image, backbone_out)}\n\n        # expand the features to have the same dimension as the number of objects\n        expanded_image = image.expand(batch_size, -1, -1, -1)\n        expanded_backbone_out = {\n            \"backbone_fpn\": backbone_out[\"backbone_fpn\"].copy(),\n            \"vision_pos_enc\": backbone_out[\"vision_pos_enc\"].copy(),\n        }\n        for i, feat in enumerate(expanded_backbone_out[\"backbone_fpn\"]):\n            expanded_backbone_out[\"backbone_fpn\"][i] = feat.expand(\n                batch_size, -1, -1, -1\n            )\n        for i, pos in enumerate(expanded_backbone_out[\"vision_pos_enc\"]):\n            pos = pos.expand(batch_size, -1, -1, -1)\n            expanded_backbone_out[\"vision_pos_enc\"][i] = pos\n\n        features = self._prepare_backbone_features(expanded_backbone_out)\n        features = (expanded_image,) + features\n        return features\n\n    def _run_single_frame_inference(\n        self,\n        inference_state,\n        output_dict,\n        frame_idx,\n        batch_size,\n        is_init_cond_frame,\n        point_inputs,\n        mask_inputs,\n        reverse,\n        run_mem_encoder,\n        prev_sam_mask_logits=None,\n    ):\n        \"\"\"Run tracking on a single frame based on current inputs and previous memory.\"\"\"\n        # Retrieve correct image features\n        (\n            _,\n            _,\n            current_vision_feats,\n            current_vision_pos_embeds,\n            feat_sizes,\n        ) = self._get_image_feature(inference_state, frame_idx, batch_size)\n\n        # point and mask should not appear as input simultaneously on the same frame\n        assert point_inputs is None or mask_inputs is None\n        current_out = self.track_step(\n            frame_idx=frame_idx,\n            is_init_cond_frame=is_init_cond_frame,\n            current_vision_feats=current_vision_feats,\n            current_vision_pos_embeds=current_vision_pos_embeds,\n            feat_sizes=feat_sizes,\n            point_inputs=point_inputs,\n            mask_inputs=mask_inputs,\n            output_dict=output_dict,\n            num_frames=inference_state[\"num_frames\"],\n            track_in_reverse=reverse,\n            run_mem_encoder=run_mem_encoder,\n            prev_sam_mask_logits=prev_sam_mask_logits,\n        )\n\n        # optionally offload the output to CPU memory to save GPU space\n        storage_device = inference_state[\"storage_device\"]\n        maskmem_features = current_out[\"maskmem_features\"]\n        if maskmem_features is not None:\n            maskmem_features = maskmem_features.to(torch.bfloat16)\n            maskmem_features = maskmem_features.to(storage_device, non_blocking=True)\n        pred_masks_gpu = current_out[\"pred_masks\"]\n        # potentially fill holes in the predicted masks\n        if self.fill_hole_area > 0:\n            pred_masks_gpu = fill_holes_in_mask_scores(\n                pred_masks_gpu, self.fill_hole_area\n            )\n        pred_masks = pred_masks_gpu.to(storage_device, non_blocking=True)\n        # \"maskmem_pos_enc\" is the same across frames, so we only need to store one copy of it\n        maskmem_pos_enc = self._get_maskmem_pos_enc(inference_state, current_out)\n        # object pointer is a small tensor, so we always keep it on GPU memory for fast access\n        obj_ptr = current_out[\"obj_ptr\"]\n        object_score_logits = current_out[\"object_score_logits\"]\n        # make a compact version of this frame's output to reduce the state size\n        compact_current_out = {\n            \"maskmem_features\": maskmem_features,\n            \"maskmem_pos_enc\": maskmem_pos_enc,\n            \"pred_masks\": pred_masks,\n            \"obj_ptr\": obj_ptr,\n            \"object_score_logits\": object_score_logits,\n        }\n        return compact_current_out, pred_masks_gpu\n\n    def _run_memory_encoder(\n        self,\n        inference_state,\n        frame_idx,\n        batch_size,\n        high_res_masks,\n        object_score_logits,\n        is_mask_from_pts,\n    ):\n        \"\"\"\n        Run the memory encoder on `high_res_masks`. This is usually after applying\n        non-overlapping constraints to object scores. Since their scores changed, their\n        memory also need to be computed again with the memory encoder.\n        \"\"\"\n        # Retrieve correct image features\n        _, _, current_vision_feats, _, feat_sizes = self._get_image_feature(\n            inference_state, frame_idx, batch_size\n        )\n        maskmem_features, maskmem_pos_enc = self._encode_new_memory(\n            current_vision_feats=current_vision_feats,\n            feat_sizes=feat_sizes,\n            pred_masks_high_res=high_res_masks,\n            object_score_logits=object_score_logits,\n            is_mask_from_pts=is_mask_from_pts,\n        )\n\n        # optionally offload the output to CPU memory to save GPU space\n        storage_device = inference_state[\"storage_device\"]\n        maskmem_features = maskmem_features.to(torch.bfloat16)\n        maskmem_features = maskmem_features.to(storage_device, non_blocking=True)\n        # \"maskmem_pos_enc\" is the same across frames, so we only need to store one copy of it\n        maskmem_pos_enc = self._get_maskmem_pos_enc(\n            inference_state, {\"maskmem_pos_enc\": maskmem_pos_enc}\n        )\n        return maskmem_features, maskmem_pos_enc\n\n    def _get_maskmem_pos_enc(self, inference_state, current_out):\n        \"\"\"\n        `maskmem_pos_enc` is the same across frames and objects, so we cache it as\n        a constant in the inference session to reduce session storage size.\n        \"\"\"\n        model_constants = inference_state[\"constants\"]\n        # \"out_maskmem_pos_enc\" should be either a list of tensors or None\n        out_maskmem_pos_enc = current_out[\"maskmem_pos_enc\"]\n        if out_maskmem_pos_enc is not None:\n            if \"maskmem_pos_enc\" not in model_constants:\n                assert isinstance(out_maskmem_pos_enc, list)\n                # only take the slice for one object, since it's same across objects\n                maskmem_pos_enc = [x[0:1].clone() for x in out_maskmem_pos_enc]\n                model_constants[\"maskmem_pos_enc\"] = maskmem_pos_enc\n            else:\n                maskmem_pos_enc = model_constants[\"maskmem_pos_enc\"]\n            # expand the cached maskmem_pos_enc to the actual batch size\n            batch_size = out_maskmem_pos_enc[0].size(0)\n            expanded_maskmem_pos_enc = [\n                x.expand(batch_size, -1, -1, -1) for x in maskmem_pos_enc\n            ]\n        else:\n            expanded_maskmem_pos_enc = None\n        return expanded_maskmem_pos_enc\n\n    @torch.inference_mode()\n    def remove_object(self, inference_state, obj_id, strict=False, need_output=True):\n        \"\"\"\n        Remove an object id from the tracking state. If strict is True, we check whether\n        the object id actually exists and raise an error if it doesn't exist.\n        \"\"\"\n        old_obj_idx_to_rm = inference_state[\"obj_id_to_idx\"].get(obj_id, None)\n        updated_frames = []\n        # Check whether this object_id to remove actually exists and possibly raise an error.\n        if old_obj_idx_to_rm is None:\n            if not strict:\n                return inference_state[\"obj_ids\"], updated_frames\n            raise RuntimeError(\n                f\"Cannot remove object id {obj_id} as it doesn't exist. \"\n                f\"All existing object ids: {inference_state['obj_ids']}.\"\n            )\n\n        # If this is the only remaining object id, we simply reset the state.\n        if len(inference_state[\"obj_id_to_idx\"]) == 1:\n            self.reset_state(inference_state)\n            return inference_state[\"obj_ids\"], updated_frames\n\n        # There are still remaining objects after removing this object id. In this case,\n        # we need to delete the object storage from inference state tensors.\n        # Step 0: clear the input on those frames where this object id has point or mask input\n        # (note that this step is required as it might downgrade conditioning frames to\n        # non-conditioning ones)\n        obj_input_frames_inds = set()\n        obj_input_frames_inds.update(\n            inference_state[\"point_inputs_per_obj\"][old_obj_idx_to_rm]\n        )\n        obj_input_frames_inds.update(\n            inference_state[\"mask_inputs_per_obj\"][old_obj_idx_to_rm]\n        )\n        for frame_idx in obj_input_frames_inds:\n            self.clear_all_prompts_in_frame(\n                inference_state, frame_idx, obj_id, need_output=False\n            )\n\n        # Step 1: Update the object id mapping (note that it must be done after Step 0,\n        # since Step 0 still requires the old object id mappings in inference_state)\n        old_obj_ids = inference_state[\"obj_ids\"]\n        old_obj_inds = list(range(len(old_obj_ids)))\n        remain_old_obj_inds = old_obj_inds.copy()\n        remain_old_obj_inds.remove(old_obj_idx_to_rm)\n        new_obj_ids = [old_obj_ids[old_idx] for old_idx in remain_old_obj_inds]\n        new_obj_inds = list(range(len(new_obj_ids)))\n        # build new mappings\n        old_idx_to_new_idx = dict(zip(remain_old_obj_inds, new_obj_inds))\n        inference_state[\"obj_id_to_idx\"] = dict(zip(new_obj_ids, new_obj_inds))\n        inference_state[\"obj_idx_to_id\"] = dict(zip(new_obj_inds, new_obj_ids))\n        inference_state[\"obj_ids\"] = new_obj_ids\n\n        # Step 2: For per-object tensor storage, we shift their obj_idx in the dict keys.\n        # (note that \"consolidated_frame_inds\" doesn't need to be updated in this step as\n        # it's already handled in Step 0)\n        def _map_keys(container):\n            new_kvs = []\n            for k in old_obj_inds:\n                v = container.pop(k)\n                if k in old_idx_to_new_idx:\n                    new_kvs.append((old_idx_to_new_idx[k], v))\n            container.update(new_kvs)\n\n        _map_keys(inference_state[\"point_inputs_per_obj\"])\n        _map_keys(inference_state[\"mask_inputs_per_obj\"])\n        _map_keys(inference_state[\"output_dict_per_obj\"])\n        _map_keys(inference_state[\"temp_output_dict_per_obj\"])\n\n        # Step 3: For packed tensor storage, we index the remaining ids and rebuild the per-object slices.\n        def _slice_state(output_dict, storage_key):\n            for frame_idx, out in output_dict[storage_key].items():\n                out[\"maskmem_features\"] = out[\"maskmem_features\"][remain_old_obj_inds]\n                out[\"maskmem_pos_enc\"] = [\n                    x[remain_old_obj_inds] for x in out[\"maskmem_pos_enc\"]\n                ]\n                # \"maskmem_pos_enc\" is the same across frames, so we only need to store one copy of it\n                out[\"maskmem_pos_enc\"] = self._get_maskmem_pos_enc(inference_state, out)\n                out[\"pred_masks\"] = out[\"pred_masks\"][remain_old_obj_inds]\n                out[\"obj_ptr\"] = out[\"obj_ptr\"][remain_old_obj_inds]\n                out[\"object_score_logits\"] = out[\"object_score_logits\"][\n                    remain_old_obj_inds\n                ]\n                # also update the per-object slices\n                self._add_output_per_object(\n                    inference_state, frame_idx, out, storage_key\n                )\n\n        _slice_state(inference_state[\"output_dict\"], \"cond_frame_outputs\")\n        _slice_state(inference_state[\"output_dict\"], \"non_cond_frame_outputs\")\n\n        # Step 4: Further collect the outputs on those frames in `obj_input_frames_inds`, which\n        # could show an updated mask for objects previously occluded by the object being removed\n        if need_output:\n            temp_output_dict_per_obj = inference_state[\"temp_output_dict_per_obj\"]\n            for frame_idx in obj_input_frames_inds:\n                is_cond = any(\n                    frame_idx in obj_temp_output_dict[\"cond_frame_outputs\"]\n                    for obj_temp_output_dict in temp_output_dict_per_obj.values()\n                )\n                consolidated_out = self._consolidate_temp_output_across_obj(\n                    inference_state,\n                    frame_idx,\n                    is_cond=is_cond,\n                    run_mem_encoder=False,\n                    consolidate_at_video_res=True,\n                )\n                _, video_res_masks = self._get_orig_video_res_output(\n                    inference_state, consolidated_out[\"pred_masks_video_res\"]\n                )\n                updated_frames.append((frame_idx, video_res_masks))\n\n        return inference_state[\"obj_ids\"], updated_frames\n\n    def _clear_non_cond_mem_around_input(self, inference_state, frame_idx):\n        \"\"\"\n        Remove the non-conditioning memory around the input frame. When users provide\n        correction clicks, the surrounding frames' non-conditioning memories can still\n        contain outdated object appearance information and could confuse the model.\n\n        This method clears those non-conditioning memories surrounding the interacted\n        frame to avoid giving the model both old and new information about the object.\n        \"\"\"\n        r = self.memory_temporal_stride_for_eval\n        frame_idx_begin = frame_idx - r * self.num_maskmem\n        frame_idx_end = frame_idx + r * self.num_maskmem\n        output_dict = inference_state[\"output_dict\"]\n        non_cond_frame_outputs = output_dict[\"non_cond_frame_outputs\"]\n        for t in range(frame_idx_begin, frame_idx_end + 1):\n            non_cond_frame_outputs.pop(t, None)\n            for obj_output_dict in inference_state[\"output_dict_per_obj\"].values():\n                obj_output_dict[\"non_cond_frame_outputs\"].pop(t, None)"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/utils/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/utils/amg.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport math\nfrom copy import deepcopy\nfrom itertools import product\nfrom typing import Any, Dict, Generator, ItemsView, List, Tuple\n\nimport numpy as np\nimport torch\n\n# Very lightly adapted from https://github.com/facebookresearch/segment-anything/blob/main/segment_anything/utils/amg.py\n\n\nclass MaskData:\n    \"\"\"\n    A structure for storing masks and their related data in batched format.\n    Implements basic filtering and concatenation.\n    \"\"\"\n\n    def __init__(self, **kwargs) -> None:\n        for v in kwargs.values():\n            assert isinstance(\n                v, (list, np.ndarray, torch.Tensor)\n            ), \"MaskData only supports list, numpy arrays, and torch tensors.\"\n        self._stats = dict(**kwargs)\n\n    def __setitem__(self, key: str, item: Any) -> None:\n        assert isinstance(\n            item, (list, np.ndarray, torch.Tensor)\n        ), \"MaskData only supports list, numpy arrays, and torch tensors.\"\n        self._stats[key] = item\n\n    def __delitem__(self, key: str) -> None:\n        del self._stats[key]\n\n    def __getitem__(self, key: str) -> Any:\n        return self._stats[key]\n\n    def items(self) -> ItemsView[str, Any]:\n        return self._stats.items()\n\n    def filter(self, keep: torch.Tensor) -> None:\n        for k, v in self._stats.items():\n            if v is None:\n                self._stats[k] = None\n            elif isinstance(v, torch.Tensor):\n                self._stats[k] = v[torch.as_tensor(keep, device=v.device)]\n            elif isinstance(v, np.ndarray):\n                self._stats[k] = v[keep.detach().cpu().numpy()]\n            elif isinstance(v, list) and keep.dtype == torch.bool:\n                self._stats[k] = [a for i, a in enumerate(v) if keep[i]]\n            elif isinstance(v, list):\n                self._stats[k] = [v[i] for i in keep]\n            else:\n                raise TypeError(f\"MaskData key {k} has an unsupported type {type(v)}.\")\n\n    def cat(self, new_stats: \"MaskData\") -> None:\n        for k, v in new_stats.items():\n            if k not in self._stats or self._stats[k] is None:\n                self._stats[k] = deepcopy(v)\n            elif isinstance(v, torch.Tensor):\n                self._stats[k] = torch.cat([self._stats[k], v], dim=0)\n            elif isinstance(v, np.ndarray):\n                self._stats[k] = np.concatenate([self._stats[k], v], axis=0)\n            elif isinstance(v, list):\n                self._stats[k] = self._stats[k] + deepcopy(v)\n            else:\n                raise TypeError(f\"MaskData key {k} has an unsupported type {type(v)}.\")\n\n    def to_numpy(self) -> None:\n        for k, v in self._stats.items():\n            if isinstance(v, torch.Tensor):\n                self._stats[k] = v.float().detach().cpu().numpy()\n\n\ndef is_box_near_crop_edge(\n    boxes: torch.Tensor, crop_box: List[int], orig_box: List[int], atol: float = 20.0\n) -> torch.Tensor:\n    \"\"\"Filter masks at the edge of a crop, but not at the edge of the original image.\"\"\"\n    crop_box_torch = torch.as_tensor(crop_box, dtype=torch.float, device=boxes.device)\n    orig_box_torch = torch.as_tensor(orig_box, dtype=torch.float, device=boxes.device)\n    boxes = uncrop_boxes_xyxy(boxes, crop_box).float()\n    near_crop_edge = torch.isclose(boxes, crop_box_torch[None, :], atol=atol, rtol=0)\n    near_image_edge = torch.isclose(boxes, orig_box_torch[None, :], atol=atol, rtol=0)\n    near_crop_edge = torch.logical_and(near_crop_edge, ~near_image_edge)\n    return torch.any(near_crop_edge, dim=1)\n\n\ndef box_xyxy_to_xywh(box_xyxy: torch.Tensor) -> torch.Tensor:\n    box_xywh = deepcopy(box_xyxy)\n    box_xywh[2] = box_xywh[2] - box_xywh[0]\n    box_xywh[3] = box_xywh[3] - box_xywh[1]\n    return box_xywh\n\n\ndef batch_iterator(batch_size: int, *args) -> Generator[List[Any], None, None]:\n    assert len(args) > 0 and all(\n        len(a) == len(args[0]) for a in args\n    ), \"Batched iteration must have inputs of all the same size.\"\n    n_batches = len(args[0]) // batch_size + int(len(args[0]) % batch_size != 0)\n    for b in range(n_batches):\n        yield [arg[b * batch_size : (b + 1) * batch_size] for arg in args]\n\n\ndef mask_to_rle_pytorch(tensor: torch.Tensor) -> List[Dict[str, Any]]:\n    \"\"\"\n    Encodes masks to an uncompressed RLE, in the format expected by\n    pycoco tools.\n    \"\"\"\n    # Put in fortran order and flatten h,w\n    b, h, w = tensor.shape\n    tensor = tensor.permute(0, 2, 1).flatten(1)\n\n    # Compute change indices\n    diff = tensor[:, 1:] ^ tensor[:, :-1]\n    change_indices = diff.nonzero()\n\n    # Encode run length\n    out = []\n    for i in range(b):\n        cur_idxs = change_indices[change_indices[:, 0] == i, 1]\n        cur_idxs = torch.cat(\n            [\n                torch.tensor([0], dtype=cur_idxs.dtype, device=cur_idxs.device),\n                cur_idxs + 1,\n                torch.tensor([h * w], dtype=cur_idxs.dtype, device=cur_idxs.device),\n            ]\n        )\n        btw_idxs = cur_idxs[1:] - cur_idxs[:-1]\n        counts = [] if tensor[i, 0] == 0 else [0]\n        counts.extend(btw_idxs.detach().cpu().tolist())\n        out.append({\"size\": [h, w], \"counts\": counts})\n    return out\n\n\ndef rle_to_mask(rle: Dict[str, Any]) -> np.ndarray:\n    \"\"\"Compute a binary mask from an uncompressed RLE.\"\"\"\n    h, w = rle[\"size\"]\n    mask = np.empty(h * w, dtype=bool)\n    idx = 0\n    parity = False\n    for count in rle[\"counts\"]:\n        mask[idx : idx + count] = parity\n        idx += count\n        parity ^= True\n    mask = mask.reshape(w, h)\n    return mask.transpose()  # Put in C order\n\n\ndef area_from_rle(rle: Dict[str, Any]) -> int:\n    return sum(rle[\"counts\"][1::2])\n\n\ndef calculate_stability_score(\n    masks: torch.Tensor, mask_threshold: float, threshold_offset: float\n) -> torch.Tensor:\n    \"\"\"\n    Computes the stability score for a batch of masks. The stability\n    score is the IoU between the binary masks obtained by thresholding\n    the predicted mask logits at high and low values.\n    \"\"\"\n    # One mask is always contained inside the other.\n    # Save memory by preventing unnecessary cast to torch.int64\n    intersections = (\n        (masks > (mask_threshold + threshold_offset))\n        .sum(-1, dtype=torch.int16)\n        .sum(-1, dtype=torch.int32)\n    )\n    unions = (\n        (masks > (mask_threshold - threshold_offset))\n        .sum(-1, dtype=torch.int16)\n        .sum(-1, dtype=torch.int32)\n    )\n    return intersections / unions\n\n\ndef build_point_grid(n_per_side: int) -> np.ndarray:\n    \"\"\"Generates a 2D grid of points evenly spaced in [0,1]x[0,1].\"\"\"\n    offset = 1 / (2 * n_per_side)\n    points_one_side = np.linspace(offset, 1 - offset, n_per_side)\n    points_x = np.tile(points_one_side[None, :], (n_per_side, 1))\n    points_y = np.tile(points_one_side[:, None], (1, n_per_side))\n    points = np.stack([points_x, points_y], axis=-1).reshape(-1, 2)\n    return points\n\n\ndef build_all_layer_point_grids(\n    n_per_side: int, n_layers: int, scale_per_layer: int\n) -> List[np.ndarray]:\n    \"\"\"Generates point grids for all crop layers.\"\"\"\n    points_by_layer = []\n    for i in range(n_layers + 1):\n        n_points = int(n_per_side / (scale_per_layer**i))\n        points_by_layer.append(build_point_grid(n_points))\n    return points_by_layer\n\n\ndef generate_crop_boxes(\n    im_size: Tuple[int, ...], n_layers: int, overlap_ratio: float\n) -> Tuple[List[List[int]], List[int]]:\n    \"\"\"\n    Generates a list of crop boxes of different sizes. Each layer\n    has (2**i)**2 boxes for the ith layer.\n    \"\"\"\n    crop_boxes, layer_idxs = [], []\n    im_h, im_w = im_size\n    short_side = min(im_h, im_w)\n\n    # Original image\n    crop_boxes.append([0, 0, im_w, im_h])\n    layer_idxs.append(0)\n\n    def crop_len(orig_len, n_crops, overlap):\n        return int(math.ceil((overlap * (n_crops - 1) + orig_len) / n_crops))\n\n    for i_layer in range(n_layers):\n        n_crops_per_side = 2 ** (i_layer + 1)\n        overlap = int(overlap_ratio * short_side * (2 / n_crops_per_side))\n\n        crop_w = crop_len(im_w, n_crops_per_side, overlap)\n        crop_h = crop_len(im_h, n_crops_per_side, overlap)\n\n        crop_box_x0 = [int((crop_w - overlap) * i) for i in range(n_crops_per_side)]\n        crop_box_y0 = [int((crop_h - overlap) * i) for i in range(n_crops_per_side)]\n\n        # Crops in XYWH format\n        for x0, y0 in product(crop_box_x0, crop_box_y0):\n            box = [x0, y0, min(x0 + crop_w, im_w), min(y0 + crop_h, im_h)]\n            crop_boxes.append(box)\n            layer_idxs.append(i_layer + 1)\n\n    return crop_boxes, layer_idxs\n\n\ndef uncrop_boxes_xyxy(boxes: torch.Tensor, crop_box: List[int]) -> torch.Tensor:\n    x0, y0, _, _ = crop_box\n    offset = torch.tensor([[x0, y0, x0, y0]], device=boxes.device)\n    # Check if boxes has a channel dimension\n    if len(boxes.shape) == 3:\n        offset = offset.unsqueeze(1)\n    return boxes + offset\n\n\ndef uncrop_points(points: torch.Tensor, crop_box: List[int]) -> torch.Tensor:\n    x0, y0, _, _ = crop_box\n    offset = torch.tensor([[x0, y0]], device=points.device)\n    # Check if points has a channel dimension\n    if len(points.shape) == 3:\n        offset = offset.unsqueeze(1)\n    return points + offset\n\n\ndef uncrop_masks(\n    masks: torch.Tensor, crop_box: List[int], orig_h: int, orig_w: int\n) -> torch.Tensor:\n    x0, y0, x1, y1 = crop_box\n    if x0 == 0 and y0 == 0 and x1 == orig_w and y1 == orig_h:\n        return masks\n    # Coordinate transform masks\n    pad_x, pad_y = orig_w - (x1 - x0), orig_h - (y1 - y0)\n    pad = (x0, pad_x - x0, y0, pad_y - y0)\n    return torch.nn.functional.pad(masks, pad, value=0)\n\n\ndef remove_small_regions(\n    mask: np.ndarray, area_thresh: float, mode: str\n) -> Tuple[np.ndarray, bool]:\n    \"\"\"\n    Removes small disconnected regions and holes in a mask. Returns the\n    mask and an indicator of if the mask has been modified.\n    \"\"\"\n    import cv2  # type: ignore\n\n    assert mode in [\"holes\", \"islands\"]\n    correct_holes = mode == \"holes\"\n    working_mask = (correct_holes ^ mask).astype(np.uint8)\n    n_labels, regions, stats, _ = cv2.connectedComponentsWithStats(working_mask, 8)\n    sizes = stats[:, -1][1:]  # Row 0 is background label\n    small_regions = [i + 1 for i, s in enumerate(sizes) if s < area_thresh]\n    if len(small_regions) == 0:\n        return mask, False\n    fill_labels = [0] + small_regions\n    if not correct_holes:\n        fill_labels = [i for i in range(n_labels) if i not in fill_labels]\n        # If every region is below threshold, keep largest\n        if len(fill_labels) == 0:\n            fill_labels = [int(np.argmax(sizes)) + 1]\n    mask = np.isin(regions, fill_labels)\n    return mask, True\n\n\ndef coco_encode_rle(uncompressed_rle: Dict[str, Any]) -> Dict[str, Any]:\n    from pycocotools import mask as mask_utils  # type: ignore\n\n    h, w = uncompressed_rle[\"size\"]\n    rle = mask_utils.frPyObjects(uncompressed_rle, h, w)\n    rle[\"counts\"] = rle[\"counts\"].decode(\"utf-8\")  # Necessary to serialize with json\n    return rle\n\n\ndef batched_mask_to_box(masks: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Calculates boxes in XYXY format around masks. Return [0,0,0,0] for\n    an empty mask. For input shape C1xC2x...xHxW, the output shape is C1xC2x...x4.\n    \"\"\"\n    # torch.max below raises an error on empty inputs, just skip in this case\n    if torch.numel(masks) == 0:\n        return torch.zeros(*masks.shape[:-2], 4, device=masks.device)\n\n    # Normalize shape to CxHxW\n    shape = masks.shape\n    h, w = shape[-2:]\n    if len(shape) > 2:\n        masks = masks.flatten(0, -3)\n    else:\n        masks = masks.unsqueeze(0)\n\n    # Get top and bottom edges\n    in_height, _ = torch.max(masks, dim=-1)\n    in_height_coords = in_height * torch.arange(h, device=in_height.device)[None, :]\n    bottom_edges, _ = torch.max(in_height_coords, dim=-1)\n    in_height_coords = in_height_coords + h * (~in_height)\n    top_edges, _ = torch.min(in_height_coords, dim=-1)\n\n    # Get left and right edges\n    in_width, _ = torch.max(masks, dim=-2)\n    in_width_coords = in_width * torch.arange(w, device=in_width.device)[None, :]\n    right_edges, _ = torch.max(in_width_coords, dim=-1)\n    in_width_coords = in_width_coords + w * (~in_width)\n    left_edges, _ = torch.min(in_width_coords, dim=-1)\n\n    # If the mask is empty the right edge will be to the left of the left edge.\n    # Replace these boxes with [0, 0, 0, 0]\n    empty_filter = (right_edges < left_edges) | (bottom_edges < top_edges)\n    out = torch.stack([left_edges, top_edges, right_edges, bottom_edges], dim=-1)\n    out = out * (~empty_filter).unsqueeze(-1)\n\n    # Return to original shape\n    if len(shape) > 2:\n        out = out.reshape(*shape[:-2], 4)\n    else:\n        out = out[0]\n\n    return out\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/utils/misc.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport os\nimport warnings\nfrom threading import Thread\n\nimport numpy as np\nimport torch\nfrom PIL import Image\nfrom tqdm import tqdm\n\n\ndef get_sdpa_settings():\n    if torch.cuda.is_available():\n        old_gpu = torch.cuda.get_device_properties(0).major < 7\n        # only use Flash Attention on Ampere (8.0) or newer GPUs\n        use_flash_attn = torch.cuda.get_device_properties(0).major >= 8\n        if not use_flash_attn:\n            warnings.warn(\n                \"Flash Attention is disabled as it requires a GPU with Ampere (8.0) CUDA capability.\",\n                category=UserWarning,\n                stacklevel=2,\n            )\n        # keep math kernel for PyTorch versions before 2.2 (Flash Attention v2 is only\n        # available on PyTorch 2.2+, while Flash Attention v1 cannot handle all cases)\n        pytorch_version = tuple(int(v) for v in torch.__version__.split(\".\")[:2])\n        if pytorch_version < (2, 2):\n            warnings.warn(\n                f\"You are using PyTorch {torch.__version__} without Flash Attention v2 support. \"\n                \"Consider upgrading to PyTorch 2.2+ for Flash Attention v2 (which could be faster).\",\n                category=UserWarning,\n                stacklevel=2,\n            )\n        math_kernel_on = pytorch_version < (2, 2) or not use_flash_attn\n    else:\n        old_gpu = True\n        use_flash_attn = False\n        math_kernel_on = True\n\n    return old_gpu, use_flash_attn, math_kernel_on\n\n\ndef get_connected_components(mask):\n    \"\"\"\n    Get the connected components (8-connectivity) of binary masks of shape (N, 1, H, W).\n\n    Inputs:\n    - mask: A binary mask tensor of shape (N, 1, H, W), where 1 is foreground and 0 is\n            background.\n\n    Outputs:\n    - labels: A tensor of shape (N, 1, H, W) containing the connected component labels\n              for foreground pixels and 0 for background pixels.\n    - counts: A tensor of shape (N, 1, H, W) containing the area of the connected\n              components for foreground pixels and 0 for background pixels.\n    \"\"\"\n    from sam2 import _C\n\n    return _C.get_connected_componnets(mask.to(torch.uint8).contiguous())\n\n\ndef mask_to_box(masks: torch.Tensor):\n    \"\"\"\n    compute bounding box given an input mask\n\n    Inputs:\n    - masks: [B, 1, H, W] masks, dtype=torch.Tensor\n\n    Returns:\n    - box_coords: [B, 1, 4], contains (x, y) coordinates of top left and bottom right box corners, dtype=torch.Tensor\n    \"\"\"\n    B, _, h, w = masks.shape\n    device = masks.device\n    xs = torch.arange(w, device=device, dtype=torch.int32)\n    ys = torch.arange(h, device=device, dtype=torch.int32)\n    grid_xs, grid_ys = torch.meshgrid(xs, ys, indexing=\"xy\")\n    grid_xs = grid_xs[None, None, ...].expand(B, 1, h, w)\n    grid_ys = grid_ys[None, None, ...].expand(B, 1, h, w)\n    min_xs, _ = torch.min(torch.where(masks, grid_xs, w).flatten(-2), dim=-1)\n    max_xs, _ = torch.max(torch.where(masks, grid_xs, -1).flatten(-2), dim=-1)\n    min_ys, _ = torch.min(torch.where(masks, grid_ys, h).flatten(-2), dim=-1)\n    max_ys, _ = torch.max(torch.where(masks, grid_ys, -1).flatten(-2), dim=-1)\n    bbox_coords = torch.stack((min_xs, min_ys, max_xs, max_ys), dim=-1)\n\n    return bbox_coords\n\n\ndef _load_img_as_tensor(img_path, image_size):\n    img_pil = Image.open(img_path)\n    img_np = np.array(img_pil.convert(\"RGB\").resize((image_size, image_size)))\n    if img_np.dtype == np.uint8:  # np.uint8 is expected for JPEG images\n        img_np = img_np / 255.0\n    else:\n        raise RuntimeError(f\"Unknown image dtype: {img_np.dtype} on {img_path}\")\n    img = torch.from_numpy(img_np).permute(2, 0, 1)\n    video_width, video_height = img_pil.size  # the original video size\n    return img, video_height, video_width\n\n\nclass AsyncVideoFrameLoader:\n    \"\"\"\n    A list of video frames to be load asynchronously without blocking session start.\n    \"\"\"\n\n    def __init__(\n        self,\n        img_paths,\n        image_size,\n        offload_video_to_cpu,\n        img_mean,\n        img_std,\n        compute_device,\n    ):\n        self.img_paths = img_paths\n        self.image_size = image_size\n        self.offload_video_to_cpu = offload_video_to_cpu\n        self.img_mean = img_mean\n        self.img_std = img_std\n        # items in `self.images` will be loaded asynchronously\n        self.images = [None] * len(img_paths)\n        # catch and raise any exceptions in the async loading thread\n        self.exception = None\n        # video_height and video_width be filled when loading the first image\n        self.video_height = None\n        self.video_width = None\n        self.compute_device = compute_device\n\n        # load the first frame to fill video_height and video_width and also\n        # to cache it (since it's most likely where the user will click)\n        self.__getitem__(0)\n\n        # load the rest of frames asynchronously without blocking the session start\n        def _load_frames():\n            try:\n                for n in tqdm(range(len(self.images)), desc=\"frame loading (JPEG)\"):\n                    self.__getitem__(n)\n            except Exception as e:\n                self.exception = e\n\n        self.thread = Thread(target=_load_frames, daemon=True)\n        self.thread.start()\n\n    def __getitem__(self, index):\n        if self.exception is not None:\n            raise RuntimeError(\"Failure in frame loading thread\") from self.exception\n\n        img = self.images[index]\n        if img is not None:\n            return img\n\n        img, video_height, video_width = _load_img_as_tensor(\n            self.img_paths[index], self.image_size\n        )\n        self.video_height = video_height\n        self.video_width = video_width\n        # normalize by mean and std\n        img -= self.img_mean\n        img /= self.img_std\n        if not self.offload_video_to_cpu:\n            img = img.to(self.compute_device, non_blocking=True)\n        self.images[index] = img\n        return img\n\n    def __len__(self):\n        return len(self.images)\n\n\ndef load_video_frames(\n    video_path,\n    image_size,\n    offload_video_to_cpu,\n    img_mean=(0.485, 0.456, 0.406),\n    img_std=(0.229, 0.224, 0.225),\n    async_loading_frames=False,\n    compute_device=torch.device(\"cuda\"),\n):\n    \"\"\"\n    Load the video frames from video_path. The frames are resized to image_size as in\n    the model and are loaded to GPU if offload_video_to_cpu=False. This is used by the demo.\n    \"\"\"\n    is_bytes = isinstance(video_path, bytes)\n    is_str = isinstance(video_path, str)\n    is_mp4_path = is_str and os.path.splitext(video_path)[-1] in [\".mp4\", \".MP4\"]\n    if is_bytes or is_mp4_path:\n        return load_video_frames_from_video_file(\n            video_path=video_path,\n            image_size=image_size,\n            offload_video_to_cpu=offload_video_to_cpu,\n            img_mean=img_mean,\n            img_std=img_std,\n            compute_device=compute_device,\n        )\n    elif is_str and os.path.isdir(video_path):\n        return load_video_frames_from_jpg_images(\n            video_path=video_path,\n            image_size=image_size,\n            offload_video_to_cpu=offload_video_to_cpu,\n            img_mean=img_mean,\n            img_std=img_std,\n            async_loading_frames=async_loading_frames,\n            compute_device=compute_device,\n        )\n    else:\n        raise NotImplementedError(\n            \"Only MP4 video and JPEG folder are supported at this moment\"\n        )\n\n\ndef load_video_frames_from_jpg_images(\n    video_path,\n    image_size,\n    offload_video_to_cpu,\n    img_mean=(0.485, 0.456, 0.406),\n    img_std=(0.229, 0.224, 0.225),\n    async_loading_frames=False,\n    compute_device=torch.device(\"cuda\"),\n):\n    \"\"\"\n    Load the video frames from a directory of JPEG files (\"<frame_index>.jpg\" format).\n\n    The frames are resized to image_size x image_size and are loaded to GPU if\n    `offload_video_to_cpu` is `False` and to CPU if `offload_video_to_cpu` is `True`.\n\n    You can load a frame asynchronously by setting `async_loading_frames` to `True`.\n    \"\"\"\n    if isinstance(video_path, str) and os.path.isdir(video_path):\n        jpg_folder = video_path\n    else:\n        raise NotImplementedError(\n            \"Only JPEG frames are supported at this moment. For video files, you may use \"\n            \"ffmpeg (https://ffmpeg.org/) to extract frames into a folder of JPEG files, such as \\n\"\n            \"```\\n\"\n            \"ffmpeg -i <your_video>.mp4 -q:v 2 -start_number 0 <output_dir>/'%05d.jpg'\\n\"\n            \"```\\n\"\n            \"where `-q:v` generates high-quality JPEG frames and `-start_number 0` asks \"\n            \"ffmpeg to start the JPEG file from 00000.jpg.\"\n        )\n\n    frame_names = [\n        p\n        for p in os.listdir(jpg_folder)\n        if os.path.splitext(p)[-1] in [\".jpg\", \".jpeg\", \".JPG\", \".JPEG\"]\n    ]\n    frame_names.sort(key=lambda p: int(os.path.splitext(p)[0]))\n    num_frames = len(frame_names)\n    if num_frames == 0:\n        raise RuntimeError(f\"no images found in {jpg_folder}\")\n    img_paths = [os.path.join(jpg_folder, frame_name) for frame_name in frame_names]\n    img_mean = torch.tensor(img_mean, dtype=torch.float32)[:, None, None]\n    img_std = torch.tensor(img_std, dtype=torch.float32)[:, None, None]\n\n    if async_loading_frames:\n        lazy_images = AsyncVideoFrameLoader(\n            img_paths,\n            image_size,\n            offload_video_to_cpu,\n            img_mean,\n            img_std,\n            compute_device,\n        )\n        return lazy_images, lazy_images.video_height, lazy_images.video_width\n\n    images = torch.zeros(num_frames, 3, image_size, image_size, dtype=torch.float32)\n    for n, img_path in enumerate(tqdm(img_paths, desc=\"frame loading (JPEG)\")):\n        images[n], video_height, video_width = _load_img_as_tensor(img_path, image_size)\n    if not offload_video_to_cpu:\n        images = images.to(compute_device)\n        img_mean = img_mean.to(compute_device)\n        img_std = img_std.to(compute_device)\n    # normalize by mean and std\n    images -= img_mean\n    images /= img_std\n    return images, video_height, video_width\n\n\ndef load_video_frames_from_video_file(\n    video_path,\n    image_size,\n    offload_video_to_cpu,\n    img_mean=(0.485, 0.456, 0.406),\n    img_std=(0.229, 0.224, 0.225),\n    compute_device=torch.device(\"cuda\"),\n):\n    \"\"\"Load the video frames from a video file.\"\"\"\n    import decord\n\n    img_mean = torch.tensor(img_mean, dtype=torch.float32)[:, None, None]\n    img_std = torch.tensor(img_std, dtype=torch.float32)[:, None, None]\n    # Get the original video height and width\n    decord.bridge.set_bridge(\"torch\")\n    video_height, video_width, _ = decord.VideoReader(video_path).next().shape\n    # Iterate over all frames in the video\n    images = []\n    for frame in decord.VideoReader(video_path, width=image_size, height=image_size):\n        images.append(frame.permute(2, 0, 1))\n\n    images = torch.stack(images, dim=0).float() / 255.0\n    if not offload_video_to_cpu:\n        images = images.to(compute_device)\n        img_mean = img_mean.to(compute_device)\n        img_std = img_std.to(compute_device)\n    # normalize by mean and std\n    images -= img_mean\n    images /= img_std\n    return images, video_height, video_width\n\n\ndef fill_holes_in_mask_scores(mask, max_area):\n    \"\"\"\n    A post processor to fill small holes in mask scores with area under `max_area`.\n    \"\"\"\n    # Holes are those connected components in background with area <= self.max_area\n    # (background regions are those with mask scores <= 0)\n    assert max_area > 0, \"max_area must be positive\"\n\n    input_mask = mask\n    try:\n        labels, areas = get_connected_components(mask <= 0)\n        is_hole = (labels > 0) & (areas <= max_area)\n        # We fill holes with a small positive mask score (0.1) to change them to foreground.\n        mask = torch.where(is_hole, 0.1, mask)\n    except Exception as e:\n        # Skip the post-processing step on removing small holes if the CUDA kernel fails\n        warnings.warn(\n            f\"{e}\\n\\nSkipping the post-processing step due to the error above. You can \"\n            \"still use SAM 2 and it's OK to ignore the error above, although some post-processing \"\n            \"functionality may be limited (which doesn't affect the results in most cases; see \"\n            \"https://github.com/facebookresearch/sam2/blob/main/INSTALL.md).\",\n            category=UserWarning,\n            stacklevel=2,\n        )\n        mask = input_mask\n\n    return mask\n\n\ndef concat_points(old_point_inputs, new_points, new_labels):\n    \"\"\"Add new points and labels to previous point inputs (add at the end).\"\"\"\n    if old_point_inputs is None:\n        points, labels = new_points, new_labels\n    else:\n        points = torch.cat([old_point_inputs[\"point_coords\"], new_points], dim=1)\n        labels = torch.cat([old_point_inputs[\"point_labels\"], new_labels], dim=1)\n\n    return {\"point_coords\": points, \"point_labels\": labels}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sam2/utils/transforms.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport warnings\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torchvision.transforms import Normalize, Resize, ToTensor\n\n\nclass SAM2Transforms(nn.Module):\n    def __init__(\n        self, resolution, mask_threshold, max_hole_area=0.0, max_sprinkle_area=0.0\n    ):\n        \"\"\"\n        Transforms for SAM2.\n        \"\"\"\n        super().__init__()\n        self.resolution = resolution\n        self.mask_threshold = mask_threshold\n        self.max_hole_area = max_hole_area\n        self.max_sprinkle_area = max_sprinkle_area\n        self.mean = [0.485, 0.456, 0.406]\n        self.std = [0.229, 0.224, 0.225]\n        self.to_tensor = ToTensor()\n        self.transforms = torch.jit.script(\n            nn.Sequential(\n                Resize((self.resolution, self.resolution)),\n                Normalize(self.mean, self.std),\n            )\n        )\n\n    def __call__(self, x):\n        x = self.to_tensor(x)\n        return self.transforms(x)\n\n    def forward_batch(self, img_list):\n        img_batch = [self.transforms(self.to_tensor(img)) for img in img_list]\n        img_batch = torch.stack(img_batch, dim=0)\n        return img_batch\n\n    def transform_coords(\n        self, coords: torch.Tensor, normalize=False, orig_hw=None\n    ) -> torch.Tensor:\n        \"\"\"\n        Expects a torch tensor with length 2 in the last dimension. The coordinates can be in absolute image or normalized coordinates,\n        If the coords are in absolute image coordinates, normalize should be set to True and original image size is required.\n\n        Returns\n            Un-normalized coordinates in the range of [0, 1] which is expected by the SAM2 model.\n        \"\"\"\n        if normalize:\n            assert orig_hw is not None\n            h, w = orig_hw\n            coords = coords.clone()\n            coords[..., 0] = coords[..., 0] / w\n            coords[..., 1] = coords[..., 1] / h\n\n        coords = coords * self.resolution  # unnormalize coords\n        return coords\n\n    def transform_boxes(\n        self, boxes: torch.Tensor, normalize=False, orig_hw=None\n    ) -> torch.Tensor:\n        \"\"\"\n        Expects a tensor of shape Bx4. The coordinates can be in absolute image or normalized coordinates,\n        if the coords are in absolute image coordinates, normalize should be set to True and original image size is required.\n        \"\"\"\n        boxes = self.transform_coords(boxes.reshape(-1, 2, 2), normalize, orig_hw)\n        return boxes\n\n    def postprocess_masks(self, masks: torch.Tensor, orig_hw) -> torch.Tensor:\n        \"\"\"\n        Perform PostProcessing on output masks.\n        \"\"\"\n        from sam2.utils.misc import get_connected_components\n\n        masks = masks.float()\n        input_masks = masks\n        mask_flat = masks.flatten(0, 1).unsqueeze(1)  # flatten as 1-channel image\n        try:\n            if self.max_hole_area > 0:\n                # Holes are those connected components in background with area <= self.fill_hole_area\n                # (background regions are those with mask scores <= self.mask_threshold)\n                labels, areas = get_connected_components(\n                    mask_flat <= self.mask_threshold\n                )\n                is_hole = (labels > 0) & (areas <= self.max_hole_area)\n                is_hole = is_hole.reshape_as(masks)\n                # We fill holes with a small positive mask score (10.0) to change them to foreground.\n                masks = torch.where(is_hole, self.mask_threshold + 10.0, masks)\n\n            if self.max_sprinkle_area > 0:\n                labels, areas = get_connected_components(\n                    mask_flat > self.mask_threshold\n                )\n                is_hole = (labels > 0) & (areas <= self.max_sprinkle_area)\n                is_hole = is_hole.reshape_as(masks)\n                # We fill holes with negative mask score (-10.0) to change them to background.\n                masks = torch.where(is_hole, self.mask_threshold - 10.0, masks)\n        except Exception as e:\n            # Skip the post-processing step if the CUDA kernel fails\n            warnings.warn(\n                f\"{e}\\n\\nSkipping the post-processing step due to the error above. You can \"\n                \"still use SAM 2 and it's OK to ignore the error above, although some post-processing \"\n                \"functionality may be limited (which doesn't affect the results in most cases; see \"\n                \"https://github.com/facebookresearch/sam2/blob/main/INSTALL.md).\",\n                category=UserWarning,\n                stacklevel=2,\n            )\n            masks = input_masks\n\n        masks = F.interpolate(masks, orig_hw, mode=\"bilinear\", align_corners=False)\n        return masks\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sav_dataset/LICENSE",
    "content": "BSD License\n\nFor SAM 2 Eval software\n\nCopyright (c) Meta Platforms, Inc. and affiliates.\n\nRedistribution and use in source and binary forms, with or without modification,\nare permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n * Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\n * Neither the name Meta nor the names of its contributors may be used to\n   endorse or promote products derived from this software without specific\n   prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\nANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\nWARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR\nANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\nLOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON\nANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sav_dataset/LICENSE_DAVIS",
    "content": "BSD 3-Clause License\n\nCopyright (c) 2020, DAVIS: Densely Annotated VIdeo Segmentation\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\n3. Neither the name of the copyright holder nor the names of its\n   contributors may be used to endorse or promote products derived from\n   this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sav_dataset/LICENSE_VOS_BENCHMARK",
    "content": "Copyright 2023 Rex Cheng\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE."
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sav_dataset/README.md",
    "content": "# Segment Anything Video (SA-V) Dataset\n\n## Overview\n\n[Segment Anything Video (SA-V)](https://ai.meta.com/datasets/segment-anything-video/), consists of 51K diverse videos and 643K high-quality spatio-temporal segmentation masks (i.e., masklets). The dataset is released under the CC by 4.0 license. Browse the dataset [here](https://sam2.metademolab.com/dataset).\n\n![SA-V dataset](../assets/sa_v_dataset.jpg?raw=true)\n\n## Getting Started\n\n### Download the dataset\n\nVisit [here](https://ai.meta.com/datasets/segment-anything-video-downloads/) to download SA-V including the training, val and test sets.\n\n### Dataset Stats\n\n|            | Num Videos | Num Masklets                              |\n| ---------- | ---------- | ----------------------------------------- |\n| SA-V train | 50,583     | 642,036 (auto 451,720 and manual 190,316) |\n| SA-V val   | 155        | 293                                       |\n| SA-V test  | 150        | 278                                       |\n\n### Notebooks\n\nTo load and visualize the SA-V training set annotations, refer to the example [sav_visualization_example.ipynb](./sav_visualization_example.ipynb) notebook.\n\n### SA-V train\n\nFor SA-V training set we release the mp4 videos and store the masklet annotations per video as json files . Automatic masklets and manual masklets are stored separately as two json files: `{video_id}_auto.json` and `{video_id}_manual.json`. They can be loaded as dictionaries in python in the format below.\n\n```\n{\n    \"video_id\"                        : str; video id\n    \"video_duration\"                  : float64; the duration in seconds of this video\n    \"video_frame_count\"               : float64; the number of frames in the video\n    \"video_height\"                    : float64; the height of the video\n    \"video_width\"                     : float64; the width of the video\n    \"video_resolution\"                : float64; video_height $\\times$ video_width\n    \"video_environment\"               : List[str]; \"Indoor\" or \"Outdoor\"\n    \"video_split\"                     : str; \"train\" for training set\n    \"masklet\"                         : List[List[Dict]]; masklet annotations in list of list of RLEs.\n                                        The outer list is over frames in the video and the inner list\n                                        is over objects in the video.\n    \"masklet_id\"                      : List[int]; the masklet ids\n    \"masklet_size_rel\"                : List[float]; the average mask area normalized by resolution\n                                        across all the frames where the object is visible\n    \"masklet_size_abs\"                : List[float]; the average mask area (in pixels)\n                                        across all the frames where the object is visible\n    \"masklet_size_bucket\"             : List[str]; \"small\": $1$ <= masklet_size_abs < $32^2$,\n                                        \"medium\": $32^2$ <= masklet_size_abs < $96^2$,\n                                        and \"large\": masklet_size_abs > $96^2$\n    \"masklet_visibility_changes\"      : List[int]; the number of times where the visibility changes\n                                        after the first appearance (e.g., invisible -> visible\n                                        or visible -> invisible)\n    \"masklet_first_appeared_frame\"    : List[int]; the index of the frame where the object appears\n                                        the first time in the video. Always 0 for auto masklets.\n    \"masklet_frame_count\"             : List[int]; the number of frames being annotated. Note that\n                                        videos are annotated at 6 fps (annotated every 4 frames)\n                                        while the videos are at 24 fps.\n    \"masklet_edited_frame_count\"      : List[int]; the number of frames being edited by human annotators.\n                                        Always 0 for auto masklets.\n    \"masklet_type\"                    : List[str]; \"auto\" or \"manual\"\n    \"masklet_stability_score\"         : Optional[List[List[float]]]; per-mask stability scores. Auto annotation only.\n    \"masklet_num\"                     : int; the number of manual/auto masklets in the video\n\n}\n```\n\nNote that in SA-V train, there are in total 50,583 videos where all of them have manual annotations. Among the 50,583 videos there are 48,436 videos that also have automatic annotations.\n\n### SA-V val and test\n\nFor SA-V val and test sets, we release the extracted frames as jpeg files, and the masks as png files with the following directory structure:\n\n```\nsav_val(sav_test)\n├── sav_val.txt (sav_test.txt): a list of video ids in the split\n├── JPEGImages_24fps # videos are extracted at 24 fps\n│   ├── {video_id}\n│   │     ├── 00000.jpg        # video frame\n│   │     ├── 00001.jpg        # video frame\n│   │     ├── 00002.jpg        # video frame\n│   │     ├── 00003.jpg        # video frame\n│   │     └── ...\n│   ├── {video_id}\n│   ├── {video_id}\n│   └── ...\n└── Annotations_6fps # videos are annotated at 6 fps\n    ├── {video_id}\n    │     ├── 000               # obj 000\n    │     │    ├── 00000.png    # mask for object 000 in 00000.jpg\n    │     │    ├── 00004.png    # mask for object 000 in 00004.jpg\n    │     │    ├── 00008.png    # mask for object 000 in 00008.jpg\n    │     │    ├── 00012.png    # mask for object 000 in 00012.jpg\n    │     │    └── ...\n    │     ├── 001               # obj 001\n    │     ├── 002               # obj 002\n    │     └── ...\n    ├── {video_id}\n    ├── {video_id}\n    └── ...\n```\n\nAll masklets in val and test sets are manually annotated in every frame by annotators. For each annotated object in a video, we store the annotated masks in a single png. This is because the annotated objects may overlap, e.g., it is possible in our SA-V dataset for there to be a mask for the whole person as well as a separate mask for their hands.\n\n## SA-V Val and Test Evaluation\n\nWe provide an evaluator to compute the common J and F metrics on SA-V val and test sets. To run the evaluation, we need to first install a few dependencies as follows:\n\n```\npip install -r requirements.txt\n```\n\nThen we can evaluate the predictions as follows:\n\n```\npython sav_evaluator.py --gt_root {GT_ROOT} --pred_root {PRED_ROOT}\n```\n\nor run\n\n```\npython sav_evaluator.py --help\n```\n\nto print a complete help message.\n\nThe evaluator expects the `GT_ROOT` to be one of the following folder structures, and `GT_ROOT` and `PRED_ROOT` to have the same structure.\n\n- Same as SA-V val and test directory structure\n\n```\n{GT_ROOT}  # gt root folder\n├── {video_id}\n│     ├── 000               # all masks associated with obj 000\n│     │    ├── 00000.png    # mask for object 000 in frame 00000 (binary mask)\n│     │    └── ...\n│     ├── 001               # all masks associated with obj 001\n│     ├── 002               # all masks associated with obj 002\n│     └── ...\n├── {video_id}\n├── {video_id}\n└── ...\n```\n\nIn the paper for the experiments on SA-V val and test, we run inference on the 24 fps videos, and evaluate on the subset of frames where we have ground truth annotations (first and last annotated frames dropped). The evaluator will ignore the masks in frames where we don't have ground truth annotations.\n\n- Same as [DAVIS](https://github.com/davisvideochallenge/davis2017-evaluation) directory structure\n\n```\n{GT_ROOT}  # gt root folder\n├── {video_id}\n│     ├── 00000.png        # annotations in frame 00000 (may contain multiple objects)\n│     └── ...\n├── {video_id}\n├── {video_id}\n└── ...\n```\n\n## License\n\nThe evaluation code is licensed under the [BSD 3 license](./LICENSE). Please refer to the paper for more details on the models. The videos and annotations in SA-V Dataset are released under CC BY 4.0.\n\nThird-party code: the evaluation software is heavily adapted from [`VOS-Benchmark`](https://github.com/hkchengrex/vos-benchmark) and [`DAVIS`](https://github.com/davisvideochallenge/davis2017-evaluation) (with their licenses in [`LICENSE_DAVIS`](./LICENSE_DAVIS) and [`LICENSE_VOS_BENCHMARK`](./LICENSE_VOS_BENCHMARK)).\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sav_dataset/example/sav_000001_auto.json",
    "content": "{\"video_id\": \"sav_000001\", \"video_duration\": 20.125, \"video_frame_count\": 483.0, \"video_height\": 848.0, \"video_width\": 480.0, \"video_resolution\": 407040.0, \"video_environment\": \"Indoor\", \"video_split\": \"train\", \"masklet\": [[{\"size\": [848, 480], \"counts\": \"ka0e8ka001O1O001O1O2N2N2N2N2N1O2N1O2N1O2N2N1O2N2N2N2N1O2N1O2N2N2N1O2N2N2N1O2N1O2N1O2N2N2N1O2N2N2N1O2N1O2N2N1O2N1O2N2N2N2N2N1O2N1O2N2N1O2N2N2N1O2N2N1O2N1O2N1O2N2N1O2N2N2N2N1O2N2N1O2N2N1O2N1O2N2N2N1O2N2N1O1O2N1O2N2N2N2N2N2N2N2N2N1O2N1O2N2N1O2N2N1O2N2N2N1O2N2N1O2N1O2N2N1O2N2N1O2N1O2N2N2N1O2N2N1O2N2N1O2N1O2N2N2N2N1O2N2N1O2N2N2N1O1O2N1O2N3M2NR\\\\R8\"}, {\"size\": [848, 480], \"counts\": \"[3j0fi0000001O1O002N3N3L3L5L3L^l>3^SA7K4L3M2N2M2O1O00001O00000000O2N1N3J5L4M3O1O001000000001O1N2O1O2N2N2N2N1O1O1O001O001O001O01N100O1O1O1N3N1O2O000O2O0010O01O0001O001O00010O1O2N1O3M3M4L2O0O001O001O1O00001O1O1O001O01O01O0010O01O1O1O1O1O2N1O1O1O1O000001O0000001N4Kh]^1jN^caN5L2O0000O10O1N2M2mNT1M20100001O01O001O00000000001O00O101O000000001O0000000000000001O01O2Oh0XO7I4L1O00O001N2O0N2M3L4L5D;H8N2001O4]NYWOU1Wi0J4L2N3M1O1O1O000O01O1N1H9^Ob0N1001M3L4J6K5J6L4K5M4K5K\\\\V40fiK3L4N1N2O1001O2N2M5IoTg0f0YjXO>fVOQO[h0f1M3N2N1O100000000010O0001O00001O01O0001O0000001O00010O00010O0001O01O00001O00001O000000001O0001O000000001O01O00001O000001O01O0000001O01O01O0000000001O000000000000000000001O00010O0000000001O01O0000000000001O00000O10001O0O10001O0O1N2H8H8J6F:F<CQa7NQ_H=G8D<E:G9H8L4K5N2O10000mJ\"}, {\"size\": [848, 480], \"counts\": \"d7n1bh000000O100000000O010000O1000O10000000O10O10O100000O10O100000000O100000O10O1000000O10O10000000O10O1000000000000O1000O10000O10000000O1000O0100000000O01000000O10000000000O010000000O100O010000O10000000O10O10000000O1000000O10O10000O100000000000O10O10000000O100O1000O01000O10000000O100O1N2N2M3M3M3N2O1N2O1O1O0O2O1O1O1O100O100O10O01O10000O10O10O100000002M2M[[f0EReYOe0ZO3N1O1N101O00001O001N101O001N2O1O001O1O1O1O001O1O1O00000O1000000O10000000O10000O1000O01000000O1000O10000OXOXWOIih05ZWOJfh05]WOIch07]WOIch06^WOJbh07]WOHdh08\\\\WOHdh07]WOIch07]WOIbh07`WOH`h08`WOGah07aWOI_h06bWOJ^h04dWOL\\\\h02fWONZh0OiWO1Xh0ImWO7Ui001000N101N2M3M3N2N1O2N2N2M3M3M2N3N2O1N200000O10000O1\\\\OVWOBkh0;XWODhh0:[WOEfh08]WOGch04bWOL_h0MhWO2[i0000000000O00100O1O001O001O100000O10000O1000O010O010O1N2M3L4J6N2O1000O100000001O000O101O0O101O0000001N1000001O00001O00001N1O10001O0O101O000O2O0000000O2O0000001O0O100000001O0O10000O101O000O3M]VQ2\"}, {\"size\": [848, 480], \"counts\": \"ahm1d0di0;G7I7K5H8I7J6K4L5L4K5L4L4K5L4M3L4M3M3M2M4M3M3L3N3M3M3M3M3L5L3M4L3M3M3M3N2M3M2O2M2N3N_Ld[OQ1Yd0nNo[Om0oc0SOV\\\\Ok0hc0UO[\\\\Oi0cc0WOa\\\\Oh0]c0XOe\\\\Oh0Yc0XOj\\\\Of0Uc0YOo\\\\Oe0Pc0[OS]Od0kb0[OX]Od0gb0[O]]Oc0bb0]O`]Ob0_b0]Oe]Oa0Zb0_Oh]Oa0Wb0_Ok]O?Tb0AP^O<oa0DZ^O5da0Kb^O0^a00h^OKVa05o^OYN\\\\Mm0dc0j0W_OPN\\\\MS1[c0n0j_OPOV`0o0l_OQOS`0o0o_OoNP`0Q1R@nNn?Q1T@oNk?Q1U@oNl?o0V@POj?P1W@oNk?n0V@QOm?l0T@TOn?i0T@VOm?i0S@WOn?g0S@XOo?f0R@ZOo?d0R@\\\\Oo?b0R@^Oo?a0R@]OP`0a0Q@_OP`0?Q@Ao?>S@An?>R@Bo?=R@Bn?=S@Bo?=Q@CP`0<P@DQ`0;o_OEQ`0:Q@EP`0:P@FP`0:P@FQ`08P@GQ`09P@FQ`09o_OGQ`09o_OFR`09o_OGR`08n_OHR`08n_OHS`07n_OHR`08n_OGT`08l_OHU`07k_OIU`07k_OHW`07i_OHX`09g_OF[`09e_OF\\\\`0:e_OD[`0=e_OB\\\\`0?c_O@^`0`0X]O_OhNO00Qd0c0Q]ON]NF`0HSd0e0l\\\\Ok0RO^NTd0f0h\\\\On0TO[NUd0h0b\\\\OQ1_d0PO\\\\[OT1ed0lNQ[O]1od0eNfZOd1Ze0^NaZOe1`e0\\\\N[ZOh1de0\\\\NTZOh1me0]11O1N2TOl0D<I6L5FXXOfMlg0W29M3I7K5I8B`0D]\\\\n6\"}, {\"size\": [848, 480], \"counts\": \"d9o0ai0000O100O100O1000000000O10O10000O1000O1000O10O10000O10000000000O100000O10000O10O01O10O100000000O10000O100000O10O10O100000000O0100000000O10000O10O10O1000O10000O10O1000000O1000O0100000O10O1000O1000000000000000O10000O10000O100000000000000000O1000000O010000O100O10O1O100O010000O2O2N2N3M2M3N1N3N2M3LPVW2=cihM5L2N2O000000000000O100000O01000O0100O10000000O10000O010O1000O010000000000O10O1000O100O1000O010000000O10O010000000O10O1000000000000O0100000O10O010O01000O1000O1000000000000O1000O1000O1000O010O01000O1000O100000000000O01000O0100000O1000O10000000000O1000O0100000O10O100000O10O10000000O10O1000O10O10O10000001N100000O010000O10O10000000O10O10000O0100O100O100000000O1000O1000000000O1000O10O100000000O10000O1000000O010000000O10O100000000001O000O101O00001N100O2O001N3LfP=\"}, {\"size\": [848, 480], \"counts\": \"`ho9o0Vi0=^Oa0WOTN^XOZ2Vg0g0VOi0B>F:000001O00000000000000000000O10000O10000O100O1O1O1N2O1L4E;H8J6E;J6YOg0G9G9_Oa0IgbX1\"}, {\"size\": [848, 480], \"counts\": \"WQe3=oi06J6K4M4L4L4M4L3L4M3M3M4M2M4L4L2O1N2O0O100O100O01000O01O0O2N2N2N2N2N3M2O1O1O01000O0100000000000000010O0000000000001N10000O101N2O0O2N2N2N1O2N1O2M2O2M2O1N2N3N2M3O1N2N2N2O0O3N1N2N2N3MdS]6\"}, {\"size\": [848, 480], \"counts\": \"d0\\\\1Ti00O1O0010O1N1N3N2O1O10O101O2N2N2M3N1O001O001O0O100000000001O002N1O2N2N>B3M2M3L5C^c60i\\\\I9H7J5L6J8H9G2N1O1O0001O0O10O1000O100000000000000000001O000000001O003M3M7I7H8HYhS:\"}, {\"size\": [848, 480], \"counts\": \"ZbV85Zj02N2gYO0hLM[d03f^OU1Ya0lNX^Oc1ga0]NW^Of1ga0\\\\NV^Of1ja0[NS^Of1na0\\\\Nm]Og1Sb0\\\\NV]OX2jb0\\\\N`\\\\Of1`c0]N\\\\\\\\Od1ec0]NX\\\\Od1hc0_NT\\\\Oa1mc0bNo[O_1Qd0gNh[OX1[d0lN_[OT1dd0mNW[OPO5?^e04UZO\\\\Oe02ce0\\\\1l1F9J7L3M3M4M2N3L5K5K6I9FX\\\\\\\\3\"}], [{\"size\": [848, 480], \"counts\": \"`b0P8ab0O1O1O2N1O2N1O2N2N2N1O2N1O2N1O3M2N1O2N1O2N2N2N1O2N2N2N1O2N1O2N2N2N2N1O1O2N2N2N2N2N1O2N1O2N1O3M2N1O2N2N1O2N2N2N2N2N2N1O2N2N1O2N2N2N1O1O2N2N2N1O2N2N1O2N1O2N1O2N2N2N1O2N2N1O2N2N2N1O2N2N2N2N2N2N2N2N1O2N2N2N2N2N2N1O2N2N1O2N2N1O2N2N1O2N1O2N2N1O2N2N2N2N1O2N2N1O2N2N1O2N2N2N2N1O1O2N2N2N1O2N2N1O3M2N1O2N2NSYa8\"}, {\"size\": [848, 480], \"counts\": \"onh06Yj07J2M4M2N1O2N1O1O0O100000N201O0O2N1O1O10000O100001O00001N2O1O1O2N1O1O001O0000001O000000O100O1O1O2N1O1O1N3M200O101N10001O1O01O1O010O001O1O1O100O1O2N2M3N2O1N1O1O001O00001O1O1O1O001O001O10O01O001O1O1O1O1O1O2O0O1O10O000000001O3Lc0fN^VOa0TPe1_ORj[N5mNT1H7N2O1O1O1O1O0000O11O00000001OO2OO2O0O100000000000001O000001O000001O10<C>C=B2N11N1O0O2O0O2J5D<E;CfN\\\\WOc1]h0\\\\NdWOj1[h0YNbWOh1Zh099G3Mj0VO6J2N001O00000O0100DAfVO`0Wi0>F:M0012M3M3J6J6L4K4M5M4IR_T12f`kNa0Ec0]O`0B4O000O101O00010O000000001O0010O000010O00001O0000010O000000001O01O000001O00000000010O00001O00010O0000010O00000000001O000010O000001O00001O0000000001O0000001O00000000000000001O00000001O000001O000000000O101O00000000001O0O1O1O1O1M4J5G9H9G9BgU95VjF;D=C<E<J5N3M2O1O1O100000000^J\"}, {\"size\": [848, 480], \"counts\": \"U8n1bh000O1000000000O1000O10000000000O010000000O10O100000O100000O10O1000000000O010000O1000O1000O100000000O01000000000O1000O100000O010000000O010000000O1000O10000000O1000O100000O100000O10O1000000000O010000O10O10000000O0100000O1000O1000O100000O1000O10000O011O001N3L4M2M4N1N2O2M3M3M3M3M3L4L5K4KRWR22_olM1Vh0Z1O1O000O1000O1000O1000O100000O1000O100000O10O1000O1000O100000O10WOWWOKih05WWOJjh04YWOKgh05YWOKgh04[WOKeh03]WOMbh05^WOIch07^WOHbh06`WOJ`h05aWOK_h04bWOK_h04cWOK]h04dWOL\\\\h01gWOOYh0NiWO2Xh0KjWO6Xh0DlWO<Ti000O01O1N2N2M2O2M3N2M2O2N2N2M3N1N3N2O1O1O11O0O10001\\\\OQWOEoh08VWOFih06^WOGdh04aWOK_h03cWOL_h0OeWO1]i001O00O1000O0100O1O1O1N101000O1000000000O1000O01O1O1O1M3K4N3M3O10O1000000O100000001O0O10001O000O2O001O000O101O00001O0O10001O000O1000001O0O1000001O0O101O0O101O000O10001O0O1000001O0O2O002M101OjjR2\"}, {\"size\": [848, 480], \"counts\": \"]i`2>ji0<F7H8I7I7J5I8I8G9H7J7H8G7K6Ec0[O>J6A?@?L4H8L4L4M2N3N1N2N3M2K6K5M3N1N3O0O101O1O0102M5K4M1N01O010O01O01O00ZKd]OX1\\\\b0cNl]O[1Sb0bNS^O[1ma0cNZ^OX1ga0dN^^O[1aa0cNf^OX1Za0dNm^OY1Sa0eNQ_OY1o`0fNT_OX1l`0gNV_OX1j`0fNZ_OX1g`0dN^_OZ1b`0dNa_O[1_`0cNd_O\\\\1\\\\`0cNg_O[1Y`0cNi_O]1V`0cNk_O\\\\1V`0bNm_O]1S`0aNo_O_1Q`0`NQ@_1P`0^NS@a1m?^NT@b1l?]NV@b1j?]NX@b1h?]NZ@a1h?]NY@c1g?\\\\N[@c1e?]N\\\\@b1e?\\\\N]@c1c?]N]@c1d?[N^@c1b?]N`@b1a?\\\\N`@d1`?\\\\Na@c1`?\\\\N`@c1a?]N_@c1b?[N`@c1b?\\\\N_@c1a?]N_@b1c?]N^@b1c?]N]@c1d?\\\\N\\\\@c1g?ZNZ@f1g?YNY@f1j?WNW@i1l?TNT@k1Yd0O1O2O0O011N101N3M101O0O2NTiP7\"}, {\"size\": [848, 480], \"counts\": \"T:P1`i00O1000000000000O10O1000O1000O10O100000O0100000O100000O10O100000O10O1000O100000O10O1000O100000O010000000O10O100000O010000000O0100000000O10O100000O10000O10O100000O1000O1000O1000O100O0100000000O10O1000000O0100000000O010000000O10000O1N2M2N3L5L3N2O1N2N3M3MSYm10ofRN5J101O0O00101M10001O1O1O1O1N110L5N010O1O1N2O11O0000O1000O0010000O1O010O10O01000000O010000000000O010000000O100O10000000000O100000000O10000O100000000O1000000O010000O010O100O10O01000000O1000000O0100O010O1000O100000O10O1000000O0100O0100O10000O10O1000000000O10O10000000O10O10000000O10O10O1000000O0100000O10O10000000O010000000O1000O10O1000O10O1000O10O1000O1000O10O1000O10O100000O1000O100000O01000000O10O1000000O01000O10000O1000000O10000O10001O0000000O10000O0100000O10000000O1000O1000000O10O10000O001001O001O001O1N100O1O1O2Nj_?\"}, {\"size\": [848, 480], \"counts\": \"nSn9T1gh0f0^Oa0^Oc0XOg0ZOf0WOi00000000001O000000000000O100O100O1000000O100O1O1O1O1M3K5L4C=H8H8E;E;E;A?@Pm[1\"}, {\"size\": [848, 480], \"counts\": \"\\\\\\\\Y3;li0f0@5J6K5L3N3M2N3M2N3M3M2O2N2M2O2M3N2N2M3N1O1O0000000O10O1000000O100O010O1N3K4H8N1N3O1N2O1O1O2O000O100000001O000O101O000O2O0O100O1O100O2O0O101N100O3M101O0O2N1O2N2N1O2N2N2M3L5M4K8Hlbi6\"}, {\"size\": [848, 480], \"counts\": \"Q1d1lh0O100O1O1K5O001O100000O110O101N2N1O1O1N101O00000001O0000001O001N2O1O2N4L<C6Hk]7DabH6M3L4L4K5M4L9G8H2N1O001O00000O100000000000000MZN\\\\WOf1dh0ZN]WOe1ch0[N\\\\WOf1eh02002N00001O0O2O002N1O9G6I>AegS:\"}, {\"size\": [848, 480], \"counts\": \"\\\\hU87Xj02O2eYOF[b0<V]OV1fa0kNQ^O^1na0dNn]O^1Rb0cNl]O^1Tb0dN^]O_OiMn1id0oNP]O^1Pc0fNa\\\\Oe1_c0_N\\\\\\\\Oa1ec0bNV\\\\O`1kc0bNQ\\\\O^1Qd0dNj[O]1Xd0hN`[OX1dd0kNU[OR1We0[M[ZO[16^O?4ae0[1iZOVNce0b1j1H8J6K4M3M3N3L5L4K5J5L7GfP^3\"}], [{\"size\": [848, 480], \"counts\": \"[c0U7]c0N1O2N1O2N2N1O2N2N1O2N1O2N2N1O2N1O2N2N1O2N2N2N2N1O2N2N1O2N2N2N2N2N1O2N1O2N2N3M2N1O2N1O2N2N2N2N2N1O2N2N1O2N2N2N3M1O2N1O2N3M1O2N2N2N1O2N1O2N2N2N1O2N2N2N2N2N1O2N2N2N1O2N2N2N1O2N1O2N2N2N2N2N1O2N2N2N2N2N1O2N2N2N1O2N2N2N2N1O2N2N2N2N2N1O2N2N2N2N2N2N1O2N1O2N2N1O2NTkQ9\"}, {\"size\": [848, 480], \"counts\": \"j4f0li0N1O2N3M4L6In[a03Pd^O5K3M2M2O1O2N1O2M1000000000O100000000O20O0010O01O1N2O2N001O1O00N1101O1N2O01OO10O11O001O00O10000O100O100N3N1M4N1O1O101N10001O0010O01O01O100O001O1O100O1O1O01N2@ZYi41ofVK6L3O2L3O1N2O23L>@\\\\Zf0b0ReYO5Ih0WO:I201N11O0001O0000001O01O000001O000010O0001O001O01O0001O0001O01O0000000000001O00000000001O001O01O001O01O01O000001O000010O0001O000001O01O00000000000000000000010O000000000000000001O01OO11O01O0000000000001O0O100000000O101N1O1O1M3I7G:D<C=BeU9?PjF:B>A>D<M3N3M2O1000000000001O00000eI\"}, {\"size\": [848, 480], \"counts\": \"n8m1ch00000000000O10O100000O10000000O10O10000000O01000000000O010000O100000O1000O10000000O010000000O10O10000000O0100000000O1000O1000O1000000000O01000000000O10O10000000O10O1000000O0100000O0100000O100000O01N2I7M3J8B^ch2=_\\\\WM9H3N001O0O100O100000O100000O100000O01000000O100000O10000O10O0101OO1000O10O10O10000000OYOVWOJjh05YWOIgh06ZWOJfh06ZWOIgh06[WOIeh06\\\\WOJch07]WOIch07]WOIch07]WOHeh06\\\\WOJdh06\\\\WOJdh05]WOKch03_WOMah02`WOMah00cWOO_h0IgWO7\\\\h0BgWO?Ui00O010N2N2M3M3N2N101O1N2N2M3M3N2O0N3N2O10O2O00000O100]OoVOGRi03VWOIlh0M_WO1ch0EfWO:Xi001O000000000O01O1O100O1N10001000O100000O10000O010O1O1N1J7M3N2O010O10000000O10001O0000001N1000001N101O00001O0O101O001O0O1000001O0O100000001O0O10000O2O000O2O000O1000001O0O100O2O0O102MUiW2\"}, {\"size\": [848, 480], \"counts\": \"cnc28Qj0:D:XOh0hMPOQZOn1^e0k1B>]Oc0ZOe0B?L3H9K4M4L3M4M2N2M4L4M2N3N1O2N1O101N1O1O100O101O0O1O10001N1001OO2N10SJZ^OP3fa0kLg^On2Xa0nLQ_Om2o`0nL]_Ok2c`0nLi_Om2W`0PMQ@k2o?RMX@k2g?RM_@k2a?QMe@m2[?RMj@j2V?SMPAk2o>SMVAj2j>UMYAi2g>RM_An2`>QMbAn2^>PMgAn2Y>PMjAn2V>PMnAn2R>QMPBo2o=PMTBn2l=PMWBo2i=PMXBQ3g=nL\\\\BP3e=mL^BR3b=mL`BR3`=mLbBS3]=mLcBS3^=kLdBT3\\\\=kLfBT3Z=lLfBS3\\\\=lLeBS3\\\\=kLeBU3\\\\=iLfBV3[=hLfBX3\\\\=eLeBZ3Zb0O000O10000000000000O100O100O1O1O1O1O10O01O1O001N1O2N2M2O20TL]ZOj2Yg0\\\\Oe0ZO=C9H6J6J<BZYj6\"}, {\"size\": [848, 480], \"counts\": \"m:o0`i010000O10000O10O10000000O10O100000O10O100000O1000O100000O10O100000O01000000000O10O1000000O0100000O10O100000O010O1000O10O10000000O1000O1000000O10O100000O1000O1000O10O10O1000000000O0100000000O1000O02O2N2N1N2O1O1O4K2O4KQSf2HQmYM=I9H2N2OO00O10O1000O100O1000O1000000000O10O100000O010O1000O10O10O10O100000O10O1000000000O10O10000000000O010000O10O10O10000000O10O10000000O010000O010000000O010000O10O100000O10O01000O1000O10O1000000O1000O1000O0100000O100000O1000O100000O0100000O0100000O10O1000000O1000O100000O10O1000000O01000000O01000O1000000O10O1000000O010O10O100000O10O100000O1000O10O1000O01000000000O10O100000O10000O1000000O10O11O0000000O100000000O10000O10000O1000O0100000000O10O10000000000000O01001O001O1O0O2N2O0O4M2Mkhb0\"}, {\"size\": [848, 480], \"counts\": \"gek9b0Wi0i0D;gN[NcYOg1ie0oNUZOR1kd0NT[O2^d0=`[OD\\\\d0`0d[O@[d0b0d[O^O[d0d0c[O]O]d0d0b[O\\\\O]d0f0b[OZO^d0f0b[OZO^d0h0`[OYO_d0g0`[OZO`d0f0_[O[Oad0f0^[OZObd0f0][O[Ocd0f0[[O[Oed0e0Z[O\\\\Oed0i0U[OXOld0j0kZOWMOQ2Ve0T3000O2O000O100O1O2N1N2M3L5@?J7H9@?_Ob0B`0AiU_1\"}, {\"size\": [848, 480], \"counts\": \"PZ]3>Rj03M3M4L2N3M2N2N2N1O1O2N3M2N3M2N3M3M1O001O0000000000000000000000O100O100O1N2N2O1O1M3InVOnNTi0o08L4M3O1O1O1O1N2O1000000001O000000001O0000000000000000000000O10000O11O0000O100O100O1000000O1O1O1O1K5M3M3OQf`6\"}, {\"size\": [848, 480], \"counts\": \"n1Y1Wi0000000001O001O1O1N200O1O1O1O0O101O10O01N21L3N1000001O00O10000001O001O0O3O0O5eNjVOR1ei0D5Kgh5@iWJ3N1M5L3N4K5L4L8G8I5J3M10000O1000000000000O100000000000000O11O0O2O1O001O2N5J:G;B\\\\lR:\"}, {\"size\": [848, 480], \"counts\": \"ZTT84Zj05L2O2WYO6ZMCbd09P]OIWNc1hd0eNo\\\\OJUNd1ld0cNl\\\\OOQNa1Se0aNj\\\\OU2Uc0RNb\\\\Oo1_c0SN^\\\\Om1cc0SN\\\\\\\\On1dc0QN\\\\\\\\OP2ec0oMZ\\\\OQ2gc0nMY\\\\OR2ic0mMV\\\\OS2oc0gMQ\\\\O8oNd0Tg0\\\\OWYO7mf0H[YOJkf05j1E;M2M4O[Xf3\"}], [{\"size\": [848, 480], \"counts\": \"cd0m5ed0N2N2N1O2N2N1O2N2N1O2N2N2N1O2N3M1O2N2N2N2N2N2N2N1O2N2N2N2N2N2N2N2N2N1O2N2N1O2N2N2N2N2N2N2N2N2N2N2N2N2N1O2N2N2N2N2N2N2N1O2N2N2N2N2N1O2N2N2N2N2N2N2N1O2N2N2N2N2N2N2N2N2N2N2N2N1O2N2N2N2N2N2N2N1O2N2N2N3Mcki9\"}, {\"size\": [848, 480], \"counts\": \"kg`05Zj05K3N2N1O2N1O2N1N2O1O2N001O0O1000000000000O100000010O100O1O1O01O0O11O00001N01001O00001N10000000001O00000010O0O100O1O1O1N2N2M3O100O2O0000001O001O01O00010O1O00100O1O1O001O10N1M3K7FQVOKU]n2:g\\\\RMe0A>B5K3N0O1OO1O1N201N101O1O2Md0[Omm9<`QF<J3O100002hNTWOh0nh0VORWOj0Si0POoVOo0Yi003M6J3M1O1O0000000000ADiVO=Qi0c0I61N2M4J7I6L4L4L4L5H\\\\dS1;Z[lN9I=Cc0_O4M1O2O001O01O000001O01O01O0001O01O001O01O01O0000010O0000001O0001O01O0000000000001O00001O01O01O0010O000000000001O0001O01O001O0000001O00O20O000O100001O0000001O0000000001O0001O00000000000000001O00000000001O000O1000000O100N3M2K6A?A`0FQP:0joE>A?B>D;M4M2O1O101O000000001O1O00000000000fH\"}, {\"size\": [848, 480], \"counts\": \"k9m1ch00000000000O100000O1000O1000000000000O10O1000000000O0100000O1000O1000O10000O01000000000O10O10O10000000000O0100000000000O10O10O10000000O01000000000O10O100000000O10O10000000O10O100000O10O10000000O10O1000O100000O010000000O10O01K54L1N7J4Lc0]O;D7J2M4KQ\\\\i2:fcVM5L3M4L5K4K4M3M6J3M2N00000O100000O010000000O010XOUWOKkh04WWOKih05WWOJjh05WWOKhh05ZWOJfh06ZWOJgh04[WOJeh06\\\\WOJdh05]WOKch03_WOMah02`WON`h00bWO0^h0NdWO1]h0JhWO6Yh0EkWO;Ui00O001O1O1M3M3M2O2N2N2O0O2N2M3M3N2O0O2O100000O10001O0\\\\OPWOHPi03VWOKkh0M^WO2dh0I`WO6_i0N1O0O10000000O010O1N20O010000O010O1000000O1O010O1N2O100H_O_VOb0^i0:N2O0100000001N10000000001O0O101O0O101O001O00001N10001O000O2O000000001O0O10000000001N10001O0O101O0O101O0O1000000O101O0O2O001O1N1OfmV2\"}, {\"size\": [848, 480], \"counts\": \"m[f2`0ji07F:G8I8B=G:lNT1\\\\Oc0I7H9E:B>ZOg0H7J6J6M3M3N2M4L3N2N2N3M2N2O1N2N2N2N3L3M3M3N2N2N2O2L3M3N200O1O2N100O100O1O101O0O10gIh^OcMBc5ea0eLb_Ol2^`0kLR@n2n?oLZ@m2c?QMe@k2[?RMl@j2T?SMRAj2n>TMWAi2i>UM\\\\Ah2d>VM`Ai2_>UMfAh2Z>VMkAg2U>VMPBh2P>UMTBj2l=UMWBj2h=UMYBk2g=SM]Bk2c=TM`Bj2`=TMcBl2\\\\=SMfBl2Z=oLmBo2S=QMmBo2S=PMoBP3P=oLQCQ3o<nLSCQ3o<lLSCS3m<lLTCT3l<jLVCV3j<jLWCU3j<iLXCV3i<hLXCX3h<gLZCX3g<gLZCX3g<eL[C[3f<dLZC\\\\3g<bL[C]3la0000000000O10000O1O1000000O10000O1O1O10O10O1O1N1O2O0010O1[LT[Of1Zg0@a0@=C4KRXa6\"}, {\"size\": [848, 480], \"counts\": \"i;P1`i00O100000000000O010000000O10O100000O010000000O1000O1000O100000O01000O1000000O01000000O0100000O10O100000O10O100000O10O1000O10O1000O100000O1000O10000000O01000000O10O1000O1000O10000O01000000O100000O1000O10O100000O1000O10O1000000O01000000000O010000000O100000000O101O001O0O2O00001N2O3M2N1O3M2M2O3Mi^_23Ta`M7H4M3L1O1O10000O10O10O10000000O1000O1000O1000O1000000O01000000000O10O10O100000O10O10O10000000O10O1000000O0100000O01000000O010000000O010000O10O1O1000O100O10000000000O01000000O01000000O10O100000O1000O10O1000O1000O10000000O01000O10O100000000O1000O100000O0100000O010000O010000O01000000O10O1000O1000O100000O1000000O10O100O10000O10000O2O00O1000O10001O0O10000000000O100000O10O100000O1000O1000O100O100O0100000001O1O1N101N101N2N1NT]d0\"}, {\"size\": [848, 480], \"counts\": \"nVi9g0`i0>QOk0mNT1YOe0\\\\Oc0O3O0O100O100O1000000O1000000O0100O010O100000O01O1O1N2N3K4J6C=H8H9A>_Ob0_Oe0lN`da1\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"R3V1Zi0001O001O1N2O001O1O1O001N110OO100001O000000000000000000000001O0000001O002N1O1O001O3M;D6IYc6DT]I3M4L5L4L5K8H8H3M2M101O0000O100000000000000000O100000O2OO2O01N101O1O1O8H=C>@nUQ:\"}, {\"size\": [848, 480], \"counts\": \"\\\\UT893I[43o`0<c]OS1Zb0oN`]OV1`b0lNY]OY1gb0kNb\\\\Oh1^c0_NY\\\\Oc1gc0_NV\\\\Ob1kc0_NQ\\\\Ob1Qd0_Nm[O`1Td0bNi[O^1Xd0dNe[O]1\\\\d0eN_[O[1gd0eNT[O[1Ye0]NbZOB0`0le01iYO^Oe03ke0V1l1D;M4M2N3M3L4M4J;Dkbd3\"}], [{\"size\": [848, 480], \"counts\": \"Uf0[4Wf0N2N2N2N2N2N2N1O2N2N2N2N2N1O2N2N2N2N2N2N2N2N2N2N2N2N2N2N2N2N2N3M2N2N2N2N1O2N3M2N2N2N2N1O2N2N2N2N2N2N2N2N1O3M2N2N2N2N2N2N2N1O2N2N2N2N2N2N2N2NRla:\"}, {\"size\": [848, 480], \"counts\": \"[e76Yj04L4M2M3N2M3N2M2O1O00001O000000001O000O1001O01O000O1000001O000000000000000001O0001O00O2O01O000O1000000000000O10001O0000000001O00000O10000O2N1O1O1O2N10000O1010O00001O00100O1O1O100O1O1O1O1O10O01O0010O0O11O00001O00000001N1O2L4K4H:EQVS5<lilJ6K8G:F2N1O1O0100O1O0010O01O1O1O0010O01O010O0010O01O1O1O2N2N3M1O3M5KgN]OkXO=Ug0CnXO:Rg0FSYO2mf02i1O01N3N101M100010O01O1O01O02N2O0O1O2N2N1O2N1O2N1O4M3K5M1N4L3M5K5K3M2N3M1O1O001O1O00000010O0000000001O000001O000001O000001O00000000001N100O10001N100O1M3F;E:C`0]OdU9<RjFa0A=A?D;N2O101N101O001O01O01O001O00000000001O00001O0000O10hG\"}, {\"size\": [848, 480], \"counts\": \"f:o1ah0O1000000O1000O10O100000000O01000000000O1000000000000O10O1000O10O100000O100000O0100000000O10O10O1000000000O01000000O100000O0100000000000000O1000O100000O01000000O10O1000O10000000O10000000000O10O100000O100000O100000O101O00000O101O1O001N2O1O1O3M4K4M3M5J8I6J8FTgg27gXXM7I:F7H5L4L3M1O1O00000O01O10000O100XORWONmh03UWOJlh05VWOJjh06VWOIkh07UWOIkh06VWOJih06YWOHhh07YWOIgh05[WOKfh03[WOMeh0O_WO1ah0O_WO1`h0McWO3]h0McWO3]h0LbWO6_h0HaWO8bh0GQWOOM<Ui0e0001N10O11O1N3N1O2N2M;F7GdPh0I_oWO7L4N1N2O100O1O1N2L3L5O1O100000O10001O0O1000001O0O10001O00001N1000000O2O00000O100000001N1000000O1000001N10001O0O10001O001O0O2O000O2N2N3NWea2\"}, {\"size\": [848, 480], \"counts\": \"\\\\lm28Pj0;F8H8F9I8H7D<K5G:G8J6K5M3L4J6K6L3K5K5L4J6K5E<E:H8J6L4L4K5M4L3M3O1N2N2O1N3N1N2N2O1N2N2N3N1N2N2N2O1O2N1O100O1OaJP^O`2oa0ZM_^O_2`a0^Mg^O_2Xa0`Mm^O]2Sa0_MS_O_2l`0aMW_O]2i`0aM[_O^2c`0aMa_O]2^`0bMg_O[2Y`0cMk_O[2T`0bMR@\\\\2n?cMU@[2j?fMW@Y2i?fMY@Z2f?eM\\\\@Z2c?fM_@Y2a?eMb@Z2^?dMe@[2[?dMf@]2Y?bMi@]2V?cMk@]2U?aMm@_2S?`Mo@_2Q?`MQA_2o>`MSA_2n>_MTA`2k>`MVA`2j>`MVA`2j>_MWAa2j>^MVAb2j>]MXAb2h>]MYAc2g>\\\\MZAd2f>[M[Ae2e>ZM\\\\Af2d>ZM\\\\Af2d>YM]Ag2c>XM^Ah2c>VM^Aj2b>VM]Ak2d>SM]Am2c>RM^An2b>RM\\\\AP3d>PM\\\\AP3e>nL\\\\AR3d>mL]AS3c>lL]AU3e>iL[AW3f>gL[AY3g>dLZA\\\\3i>`LXA`3j>]LXAb3kb000O10O1000O1000000000O11VNPZOQOQf0i0_ZOmNae0Q1eZOjN\\\\e0T1mZObNWe0c0j2@[VX6\"}, {\"size\": [848, 480], \"counts\": \"e<m0bi010O10O1000000O10000000O10O100000000O1000O1000O1000O100000O0100000O01000000O01000000O0100000O1000O100000O01000O010000000O0100O1000000000O010000000O1000O10000000O0100O10000000O1000O1000O1000000000O0100000O10000O10O1000O100000O10O1000000O10O10000000O1000001O1O1N6K5JmQk2KYnTM7I3L4M3M2N0O10000O01000O10O10O1000O100000O0100000000000O10O10000O01000O10O1000O2O4L2N1N3N2M3N1N4MPo4MQQK3N1O1N2O1O1O1N10001M3M3N2O1O1000O10O10000000000O100000O0100000000O010000O10000O010000000O010000O100000O1000O100000O01000000O10O100000O10O100000O10O1000O1000O1000O02O00000O10O10000000O1000000O011O000000000O1000000000000O1000000O10000O1000000000000O10000O01000000O0100000O100001O002M3N0O2N5JPel0\"}, {\"size\": [848, 480], \"counts\": \"bXd9X1`h0j0POo0VOi0XOi0F9O1N3O0O10O1000O100000000000000000000000O100O2N1N3M2M4L4I6E=E=^Oa0[OZ1gNoPi1\"}, {\"size\": [848, 480], \"counts\": \"`hf49Sj0<F2]O[OVWOk0gh0XOVWOk0jh0TOSWOo0nh0QOnVOR1oh0;M3F^N_WOf1_h07N2005J00O2L3O2O0O2I501O2M200000000000O1000000O100O1N2N2N2K5N2N2N2O1O1M3N2O1O10000O100001O001O001O1O1O1O1O00O11O000000000000O11O0000O3N1N3N1N4M2L4M5L2M4WO_VO:^`_5\"}, {\"size\": [848, 480], \"counts\": \"]4g0hi01O3M2N102O1O0O2N1O3L2N2N3L2ON3001O00000O4NM2O1000000001O00N20000000000010O2ON2N5fNlVOP1ai0H7Dj]7HcbH5L5K5J5L:F7I3M1O1O0000000O1O100000000000O10000000001O001O1O1O1O4L6I:FjdS:\"}, {\"size\": [848, 480], \"counts\": \"Uan7:fh0ImWON@U1^h0mNjWO`1Th0`NjWOc1_e0cNd\\\\OLhMg1ae0_Ne\\\\Ol1Yc0aN[\\\\O`1dc0dNX\\\\O[1hc0kNS\\\\OU1mc0nN`ZOnN[1S2Wd0TOi[Ok0Wd0ZOe[Od0^d0^O_[O`0gd0]Og[O1id0HW[ONPe01R[OBXe0=`2L3BgVO_O_i0=<N3M5HWPl3\"}], [{\"size\": [848, 480], \"counts\": \"eg0k2gg0N2N1O2N3M2N2N1O2N2N2N2N2N2N2N2N2N2N2N2N1O3M2N2N2N2N1O2N2N2N2N2N2N2N2N2N2N2N2N2N2N2N2N2N2NcbV;\"}, {\"size\": [848, 480], \"counts\": \"X7e0ki01N101N2O00001O1O0000001O00001O00000O10001O000000001O0000000000001O000001O0000001O000000000000O100000001N1000001O0000000001O00000O100O1O1N2O1O1O2N101O0000001O00001000O1O100O001O1O2N2N1O100O001O010O0000001O001O00000000001O00001O1O1O1O1O1O102M2N0001N202MoUd1VOfj[N6M2O10N102N1O1O101O0O2O2M2N4K5Kh_d29k_[M<G7Gg0ZO9K0O01001O0001O01O00000010O0001O0000010O001O0000000000010O0000000001O01O000000001O00001O010O01O01O0001O01O0000001O00001O0001O000001O000000001O0001O0000000001O000001O000000000001O0001O0000000000001O000O10001O0O100O101J5F:E<D\\\\j:OdUE>_O`0A?K5M3N100000010O0000001O001O000001O01O000000001O1O000001O01O0000000001O000000RG\"}, {\"size\": [848, 480], \"counts\": \"U;k1eh00O1000O1000000000O010000000000O010000000O1000O10O100000000O10O10000000O0100000O100000O1000O10000O10O100000000000O10O100000O10000000O1000O1000000O01000000000O10O1000000O1000O100000000O10O100000O10O1000O100000O10O10000000000O10O100000O10000000O0100000000000O0100000O100000O10000O10O1000O1M2O2M3L4M3N1N3M4K9H;CbRP3LcmoL6J4L5N0101N3N1O1N101O1O0O100000000000O1N2N2O10O10O100001O00O01000O1O1O1N2N1O2M3N2N2O1N2000O10001O000000000O2O0000001O0O2O00000O2O000O1000001O0O1000001O0O1000001O000O2O00001N10001N10001O0O101O0000001N101O1OO11Ognd2\"}, {\"size\": [848, 480], \"counts\": \"Th]3:oi09J6H6L5J7J5K5L4K5K6H8G8J6K4M4K4M4L4L3L5M2M4L3M4M2N3L3K5L5L3L4K5N3L3M3N2M4M2N2N2N2O2M2M3N2N3N1N2O2N1O1N2O101N1N2O1O100OaKo\\\\Ob1ob0VN^]Of1bb0WNc]Og1\\\\b0WNh]Oh1Wb0WNm]Og1Rb0WNS^Og1la0WNZ^Of1ea0YN_^Of1_a0XNf^Of1Za0XNj^Of1Ua0ZNm^Oe1Sa0YNo^Og1Qa0WNS_Og1l`0YNV_Og1i`0WN[_Og1e`0XN]_Og1c`0XN__Og1``0YNa_Og1_`0XNb_Oh1]`0XNe_Og1[`0XNg_Og1Y`0XNi_Og1W`0XNk_Og1V`0WNk_Oi1U`0VNm_Oi1S`0WNn_Oh1R`0XNo_Og1Q`0XNQ@f1Q`0XNS@e1m?[NV@b1j?^NZ@^1g?`N_A:b>FdA4\\\\>LgA1Z>MiA1W>OjA0V>0kANW>1iAOW>1jANV>2kAMV>2jANV>2iANY>1hANX>3hALY>3hAKZ>4fALZ>4gAJ[>5fAI\\\\>7jABV>>o5O10000O10001O001N1O10000O11O1O0O11O01O00010O2N2O2N2N2M1100N9BZS[5\"}, {\"size\": [848, 480], \"counts\": \"P=o0ai0000O1000O100000O100000000O0100O10O10000000O10O1000O1000O10O1000O1000O10000000O010000000O010O100000O1000000O0100000O1000O1000O1000O10O100000O10000000O100000O01000000O10O100000000O0100000000O01000000O01000000O10O1000000000O0100000O10000000O01000000O10O10000000000000O1001OO1O1N2N2K4O3IgeV30YZiL8M2L4N1O1000O0100O10000O0100000O10O1000000O10O11O000O01000000000O010000000O10O100000O10000O10O1000O100000000O010000000O01000000O100000O1000O100000O1000O01000O1000O10000000O01000000O0100O1000O1000O10O2OO10000000O1000O10000000O100O1000000O1000000000O10O2O00O1000O1000000O10001O00000O1000000O1000000O10O11O00010O0O2O1O2M10O04L2M_WX1\"}, {\"size\": [848, 480], \"counts\": \"baY96di0i0POn0XOh0SOl0TOm0F9N2O1O1000000O1000000000000000O10000000000O100O2N1N3M3J6J6E<E>A`0QOZ1lN^nR2\"}, {\"size\": [848, 480], \"counts\": \"kZX54Wj0>C7I6K5K6J6K4M2N2O001N1N3N1O2O0O2N1O10000O2O1O0O1O10001N0011N1O1O1O1N2M3M3N2N2O1O1O1N200O1O2O0O101O0001O01O000000001O01OO2O00001O00000O101N2O2M102N1N3M2N3M2N3M2N3N2N3L4K]nm4\"}, {\"size\": [848, 480], \"counts\": \"]4b1nh00O0110O00O13M1O001O00000000001O000001O000000000001O0000000O5L>^Oem9AmRF5K7J8G>C3M1N1000000000001OO10000000O1000O11O0000O11O00O2O001O2N5K5JRS[:\"}, {\"size\": [848, 480], \"counts\": \"PZe76Xj03WZOKUa08]^O4ba03\\\\\\\\OBeN]1nd0VOT\\\\Oh1lc0\\\\No[Oe1Qd0_Nj[Oc1Ud0`Ng[O`1Zd0bNc[O_1^d0bN^[O`1bd0bN[[O^1gd0gNR[OX1Qe0kNiZOV1Ze0kN_ZOYO:?ce0Q1cZOgNie0m0bZO`Nle0X1k1H8J8I6K4M3J8ASYT4\"}], [{\"size\": [848, 480], \"counts\": \"Vi0Z1Wi0O2N2N2N2N2N1O1O3M2N1O2N2N3M2N2N2N2N2N2N2Nb^j;\"}, {\"size\": [848, 480], \"counts\": \"T7l0di00000001O0000001O000O101O0000O100001O01O000000010OO01000001O00O1000000000001N101O001O0000O1O2O00000O1O1O1N3O0O1O1000001O00001O00010O010O01O100O1O1O1O2N3N0O001O001O1O00001O01O0000000000000001O10O01O1O1O1O1O101ON2N8Ae]^1_OScaN3M2N2O000O1L5WOh0E;0O100O1O1O100O10000O1001O00000010O4L3N2N3M4L2M3M4L2M6EoW=6ogB7E9@>L4M3N20O6J1OO11O2NO1N21N10O10000O10000000O1O0O2M4H7L4I7J8K6GUk51nTJ4K3K5O1M22O2M2N``e0J__ZO>G8Gd0^O9H3M10O2O0001O00000000010O00001O0000000010O0001O00001O01O01O00000001O01O0000000000010O001O00001OO110O000001O01O0001O0000001O0001O0001O000001O000001O000000000001O0000000000000010O000000O10000000001O000O2O00000O100N2K5G:H8AkU9B`jFe0@<]Od0J5L5M2O101O000000001O0000010O001O000000010O000000001O001O000000010O0000001O000000010O0000001O0001O01O0000000000JSXOhMng0W2XG\"}, {\"size\": [848, 480], \"counts\": \"o:i1fh0010000000000O01000O10000000O10O1000000O10O1000000000O10O10000000O1000O1000000000O100000O010000000O1000O1000000000O010000000000O100000O1000O100000000O10O1000O1000000000O10O1000000000000O1000O100000O0100000O100000O10000000O10O10000000O1000O1000O1000000O0100000000000O2O1O4L8G9oN^VOd0[_e0@e`ZO2ki0e0D<D6K1O0000001N10000000000O10O1000000O10O101O3MO100M3N101O0O101O1O010O2N1O1O1O100O1O100O1O1M3O10000O100O1O1O1O01001M101O0010000O10000O1O1N2O1O1N3Ee_70``H8I5J5N3K5M3L3M3N3O01O00O1000_OmVODUi07PWOHPi02WWOMkh0MZWO2ci0O1O0O11OO10O100O1O001N200O10000000O10000000O100O1N2N2N2M2N3O1O1O010000O100000001O0000001O00000000001O000O2O00000O2O00000O101O00001O000O100O2O0000001N10001N100000000O2O0O101O001N10001O0O[QS3\"}, {\"size\": [848, 480], \"counts\": \"][j36Uj08I5J7K5J5K5L4L4L4K5K4K6F:I5J7J7G8H8K5iNW1@a0K4L4L4L4N3M2O1N2O1O1O1O2N1O100O1O100O101N100O100O100O2O0O100O100000WLd\\\\O?\\\\c0XOS]Oa0mb0ZOc]O;]b0Cm]O5Tb0EX^O3ja0H]^O5ea0Ec^O7]a0Fj^O6Wa0Hm^O5Ta0HP_O6Pa0GU_O7l`0FX_O7i`0H\\\\_O4e`0I__O5b`0He_O3[`0Li_O1W`0Nk_O1V`0Mm_O1S`0No_O1Q`0NQ@1P`0LS@3m?KV@4j?JX@6i?HY@7g?HZ@8g?E\\\\@:d?E^@:b?E_@;b?C_@<b?C`@<`?D`@<a?B`@>`?Ba@<a?B`@>`?B`@=b?B_@=a?C_@<c?C]@=d?B\\\\@=f?BZ@=h?BY@=i?AW@>l?_OU@a0md0O2O000O2O0O2N101N1O3Mcg0KW^Na0ci0>I77B?ZOoUONZid5\"}, {\"size\": [848, 480], \"counts\": \"h<k0ei00O1000000O10000O010000000O1000O1000O100000000O0100000000O1000O1000O100000O10O100000O10O1000000O10O100000O100000O1000O1000O10O1000O10O100000000000O0100O100000O10000000O01000000000000O0100000000O10O1000O0100000000000O10O1000O1000000O010000000O01000000O11N10O10000000O10000000001N4M2N3M7H4MTg?LnX@<D3N1K5N110O11O00000000O0100000000O010000000O1N3M2C\\\\ij1OQWUN3M2O1O2N3M3L4M1O1N1000000O10000000O1000000O1000O100000000000000O010000000O01000000O10000000O10O1000000O100000000O10O10000O0100000O10000000O01000O1000O01000000O0100O10000O010000000O10O011O000000O010000O100000000O1000000O10001O00000O10000O1000000O1000000O11O00O10000000O1000000000O1000001N101O1O0O2O3KdTg1\"}, {\"size\": [848, 480], \"counts\": \"\\\\Yl83ci0U1hNn0YOg0iNV1^Oc0M1O3N100O10000000000000000000O100O100001OO100O1O1O2N1N3K4K6C=I<TOS1POY1bNZV`2\"}, {\"size\": [848, 480], \"counts\": \"Xgm45Tj0<F9I6K4L4L4M2N2N3M2N2N2O2M3M2N2O2M3N1N2M3O0N110O100O1O100O010O11O0O3M3L3N001N2M3O1N2O1O2N001O100O2N100O10001N10001O0O2N101N2O0O2N1O3M1O2N2N2N1M4M4M4L3JlP`5\"}, {\"size\": [848, 480], \"counts\": \"c4\\\\1Ti000000O1001OO10000001O0000003J6kNln99lQF9H3M=B9H2N001O0O11OO10000000O100000000000000000000O1000001O1O103K5L5oNkVO2F3PZh:\"}, {\"size\": [848, 480], \"counts\": \"[WW72]j05iXOKoL0ef08U\\\\Oo0ob0SOl\\\\O\\\\1hb0hNR]OZ1nb0kNY\\\\OD^Nc1Ye0oNS\\\\Oc1mc0`No[Oa1Qd0bNj[O`1Vd0aNh[O`1Yd0aNd[O`1]d0aN_[O`1bd0bN[[O_1fd0cNU[O]1nd0jNiZOUO2h0Ye05^ZOSOb0>We0W1R[O^N]e0R1[2D8J7J7J3J6Ib[b4\"}], [{\"size\": [848, 480], \"counts\": \"ii0g0ji0O1O2N3M1O2N2N1O2N2N2N2NRmQ<\"}, {\"size\": [848, 480], \"counts\": \"m6l0di00000001O0000O1000O10000000O0100O100000000000001O1O0001O0O100O1O2N1O1O1O1O2O000000001O010O1O01O001O1O100O1O2N1O1O1O101N1O1O001O000010O00000000000001O1O001O1O010O1OO2O5J^]^1UO\\\\caN5J6L3N2N000O1SOLTWO?hh0f0O2N101O2N1O10O0N2O2O100O1L5N3O5E;E>D:FeSf29okYM<E9I=D;F0O2O001O01O00000001O01O0001O0000001O10O00000001O00010O0000O11O00001O0000O10010O000001O001O000010O00001O0001O0000001O0001O01O0000000000001O0001O00000000001O00000000001O00000000001N11O00O1000000000001N10000O1O1M4_O`0B`0Eno93RoEW1G8M4M3N1O10001O00001O00010O001O000000001O0000010O00001O0001O00000001O0000001O01O00000001O000001O0001O00000001N1H8M3K5K5M3O1O101O0000000O11O00O1000000000000000[G\"}, {\"size\": [848, 480], \"counts\": \"a:f1jh00000O100000O1000O100000000O10O100000O10000000000O0100000000O1000O10000000O1000000000O10O10000000O1000O100000000000O01000O1000000O1000O100000O100000000000O010000000000000O010000000000O01000O100000O1000O10000O01000O010000001N3M6K5J;DY`e0Oi_ZO`0A7I3M1N102N2N000O0100L4H8H7L6H8CdRP3LfmoL7M201O1O4LO18H2N000000O101O00001N1000001N101N1O1000001N1000001N100000000001O000001N100O1100OO10001N100O1O101N10000O2O00001O2MUib3\"}, {\"size\": [848, 480], \"counts\": \"fiP4?ei0c0@;J5F:I7I7I7YMnMd\\\\O]2Tc0`NP\\\\Oh1jc0nN\\\\[O[1`d0]2K4L5K5N1N2O2N1O1O2N100O1O2N1O2O0O2O0O2O00001O00000O10000O100O2O00001O0O2O001O00001O0O2N2O001O0000fJV]OPNNd4lb0UMo]Oc2Qb0[MY^O]2ga0aMa^OY2`a0dMg^OW2Ya0fMl^OX2Ta0dMS_OY2m`0eMY_OW2h`0eM__OW2a`0fMd_OX2\\\\`0fMh_OX2Y`0dMk_O[2V`0bMo_O[2R`0cMQ@[2Q`0aMS@]2o?`MS@_2o?^MS@a2R`0VMS@i2lc0N1N3N2N1O2M2O001N101O0O1000000O100O100N3L3K5M3K6I8F;C?\\\\O[nd5\"}, {\"size\": [848, 480], \"counts\": \"W<k0ei0O10O10000O1000000O01000000000O10O10O100000O100000O100000O100000000O1000000O0100000O10000O01000000O1000O10000O100000O10O1000O1000O100000O100000O10000000O1000O10000000O1000000O01000000000O1000O1000O100000O10O1O1000000000000O01000001O001N3N5J4M2N5J^[k30bdTL4L1O101O1N01000O001O1O100O1O010O100O001000000O01000O1O01000000O10O1000O1000O10O1010O00O01000000000000O010000000O10O010000000O0100000000O0100000000O10000O1000000O100000000O10000O01000O10000000000O10O1000000000000O0101O001O001O002N1N1O2N4KofW2\"}, {\"size\": [848, 480], \"counts\": \"S[]8[1[h0l0bNRNTYOQ3je0[1N3N1O1O10000000001O000000000O010000O1000001N100O1O1N3M2M3K7G9E;Da0WOU1ZN[iP3\"}, {\"size\": [848, 480], \"counts\": \"ngg4:Rj0<F8I5J4L4M2N2M3O0O2N1N3M2O2N2O2M2O1O1N2O0O100O100O11O0O10000O100O010O1O1O1N2O1O1L4M3N2N2O1O1N2O11N11O0O1O10000000001O0O100O1000O10O2N00101N1O1O1O2N2M4L7K4ESVOJnTe5\"}, {\"size\": [848, 480], \"counts\": \"hm5:Uj04M4K6K3M9F8I4M1N1O00000O1001O0O100000000000O10O2O00000000001O001O1O5K`0_O9HZRX;\"}, {\"size\": [848, 480], \"counts\": \"Pef63\\\\j03M2O2gXOb0\\\\c0A[\\\\Oj0`c0ZOn[OV1Pd0nNf[O[1Wd0iNd[OZ1Zd0lN_[OX1_d0jN\\\\[O[1bd0fN[[O]1cd0fNX[O]1hd0dNU[O^1kd0eNP[O]1Qe0fNiZOZ1Ze0iN_ZOXO8e0]e07QZOSOm0=Xe0o0X[O_NUe0T1\\\\2H7J6J6J4L6E]SR5\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"g6i0gi010O00O200O1O001O00000000N3N1O1O1O101O0O101O00001O01O010O010O1O2N1O101N1O2N2N1O00010O00001O1O001O01O01O000000001O001O001O10O3MkW_1UOoh`N5L4LO11O1O2L3L3O1O2M2:H1N10OO1N201OYQP33_noL;F6Ld0\\\\O4L2O01O00000001O0001O0001O01O01O0000000010O01O0000001O01O01O001O00O20O000000000000001O0000001O0001O0001O000001O0001O0O11O01O000001O01O00000000000001O0000000000001O00000000001O00000000001O0O1000000O101O0O1O1N3M3C=]O]j:3PUET1G8N101N10001O0000001O00001O0001O0001O00001O0001O000001O000000001O01OO20O000001O0000000010O00000000000000001N1M3J6J6M3L5M200O1000000O10001O0000000000000000000O2O0000000000000000001N10O1001O00000O10\\\\G\"}, {\"size\": [848, 480], \"counts\": \"^:e1kh0000000O1000O1O1000000O010000000000000O01000000000000O10O1000O1000O100000O100000000O10O10000000O100000000000O0100000000O0100000O1000O10000000O1000O10O1000000O010000000O1000000O0100000O102N5K:E=BR`e05j_ZO>C5K4L2N1N10000000O010000001O0O2O4L7H5L4L3M2N3M1O0O2O1O1O1O2N2Mina2JUQ^Md0C4L3O0O1O1O2OO2O00000O2O0000001O0O101O0O100O101O00001N10000O2O000O2O00000O1000001N10000000000O101O00000O10001O001N100O10001O0O3N0000001O0000gam3\"}, {\"size\": [848, 480], \"counts\": \"afa3`0ii09H7I7K5J5G9E;A?M3M3L4H8I7F:E;H8F:J6K5M3M3L5I6M3M3N2M3N2O1N3M2N2O1N2N2O1O1O2M101N3M2M3N2L4N2N3N1N2N3N1O101O00001N100O2O00001O00001O001O0O101O0000XJc]O^3\\\\b0^LU^OU3ka0hLb^On2^a0oLl^Oj2Ta0QMW_Oi2i`0TM^_Oh2b`0WMd_Od2\\\\`0ZMi_Oc2W`0[Mn_Oc2Q`0\\\\MS@a2m?]MX@`2h?^M\\\\@`2d?^M`@`2`?^Md@`2]?^Mf@`2Z?^Mi@a2X?]Mj@b2V?\\\\Mm@c2T?YMPAf2P?XMSAg2n>WMTAi2k>UMWAk2k>RMWAl2m>oLUAQ3k>nLVAR3Tc00000000001O00000001O0000O1O1N2L4K5M3G9G9F:F;@`0I8ETPf5\"}, {\"size\": [848, 480], \"counts\": \"S<k0ei000O01000000O01000000O10000000O01000000O011O00O10O1000O10O1000000000O10O100000O10O100000O0100000000O010000000000O10O100000O10O10O10000000O1000O1000000O1000O100000O10O1000000000O100000O1000O1001N2O2N1N2O2M4M4KV\\\\a0Jkc^Ob0B3N10O1000O100O010000000O0100000000O0100000O1000000O10000O10003M4K^__2Jg``M4N1N2M3N100O10000000O10O100000O1000O10O010000O10O1000O100O0100000O0100000O100000O10O1000000O10O10001OO1000O100000O0100000O0100000O10000000O100O1000000O1000O10O100000000O100000O0100000000O10O100000O100000O1000000O11N101O1O001O1N104K3MRdf2\"}, {\"size\": [848, 480], \"counts\": \"T^n7U1gf0oNoYO=`0k0fd0i0W[OXOed0l0Y[OUOfd0l0Z[OTOed0n0Z[OROed0o0[[OQOed0P1Y[OROfd0n0Z[OROfd0n0Z[OROfd0n0Z[OROfd0n0Z[OROfd0n0Z[OROed0o0[[OQOed0o0[[OQOed0P1Z[OPOfd0P1Z[OQOed0o0\\\\[OoNed0Q1[[OoNed0Q1[[OoNed0Q1Z[OPOfd0P1Z[OPOfd0P1Z[OPOfd0P1Z[OPOgd0o0Y[OQOgd0o0Y[OPOhd0P1Y[OoNgd0Q1Y[OnNid0Q1W[OnNkd0Q1V[OlNld0T1T[OjNPe0U1P[OgNTe0W1mZOeNZe0X1kZOnMQf0k1g1B`1_Nd^`3\"}, {\"size\": [848, 480], \"counts\": \"[ZR51Vj0`0G7K3M2N2N2N1O1O1O1O00001O00000000000000000000000000O100O100O100O1O1O1N2O1N2N2N2N2N2O1O1O1N200O1O1O100O100001O0000001O00O11O0000001O2NO1N2O1N200K500OQX\\\\5\"}, {\"size\": [848, 480], \"counts\": \"S4b1nh000000000000000O100000000000001O000O101O1O3M9G<D=Bfig;\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"V7m0ci0O1O1O1O1O1O2N100O10001O00001O01O00100O001O1O2N2O2M1O1O00002N100O00001O000000001O00000010O01O10O5Jib_5\\\\Ok]`J;F9G6J4L7I6J4L2N1O1O100O00001O000000001O01O000001O001O00001O0001O000001O000001O01O00001O01O0001O000000000000000001O000000001O0000000000001O000O1000001O0000000O10000O2N1O1N2G;\\\\Ocj:H\\\\UEm0\\\\Oc0M3N2O000000001O00001O00001O00000001O01O000000001O0000001O01O0001O00000000001O01O000001O0000000010O0000000N2L4I7I7M3N2O1O2O01OO1000001O00000000000O2O0000000O100000000O101O00000000000O100000001O0O100000000O101O00000000000O100000oF\"}, {\"size\": [848, 480], \"counts\": \"g:g1ih00000000000O0100000O10O100000O1000O10O1000000000000O10O1000000000O100000000000O0100000000O10O10O1000000000O10O10000000O10000000O1000O100000O10000000O100000O2O1O2M7J<C=C_ed0EkZ[Of0[O:F7J3L4M00000O1O1O1O0101O00000000O100O0101O0O2O000O10O11O000O10O10000000O100000O100O0101O0O10000O102N4L5K7I6J8HiXe2MYgZM5L1O1O001OO101O00000O10001O1O0O10001O0O1000000O10001N1O10001O1N2N1O^h_4\"}, {\"size\": [848, 480], \"counts\": \"Wj`32Vj0;H6I7J6K4K5K5K5K4L4M4K5L3M4L4L4J6K4M4J6I7J6J6G9K5K5L4M3M3M3M3N2N2M3N2N2N3M2O1M3O1N2O1N2O1O2M2O1O1M3N2M4L3N2N20001O0000001O00000000001O000000000000000000dJS\\\\ORO3h4ic0oKT]Od3lb0VLb]Ob3^b0\\\\Lk]O^3Tb0_LR^O^3na0aLW^O[3ia0cL]^OY3ca0fL`^OX3`a0dLg^OY3Ya0fLk^OX3Ta0gLo^OW3Qa0iLR_OT3n`0kLT_OT3l`0jLY_OS3g`0lL\\\\_OR3d`0mL__OQ3a`0nLb_OQ3]`0nLe_OQ3oc0N1O010O000001O01O01O00001O01O001O103L3M2O0O1N2Aa0WOj0F9_Onfg5\"}, {\"size\": [848, 480], \"counts\": \"^<j0fi000O010000O0100000000O010000000O10O1000000O10O10000000O01000000O1000O10000000O10O1000000O010000000O010000000O1000O1000000O100000O10O100000O10000000O100000000000O010001N102N1N3N3L6K`Vb02]o\\\\OJgi0`0N200O01000O1000000O10O1000000O0100000O0100O10O1000000O010000O10O1000000O10O100000O01000O10000O10O10001OO1O3M3K]Sf2NhlYM3L3N1N100O01000O10000O01000O10O10000000O10O10O1000O01000O1000000O010000000O100000O1000O10000O100000000O01000O1000000000000O10O10000000O010000000000001N101O1O1O1N2O1N3MhkS3\"}, {\"size\": [848, 480], \"counts\": \"WPb7n1cg0R1ZNTMa[On2\\\\d0WMa[Oj2]d0YMa[Og2^d0\\\\M`[Oe2_d0\\\\M`[Od2`d0^M_[Oa2ad0`M^[O`2ad0bM_[O]2ad0dM^[O]2ad0dM_[O[2ad0fM^[OZ2bd0gM^[OX2bd0iM][OW2cd0iM^[OV2bd0kM][OU2cd0lM][OS2cd0mM^[OR2bd0PN\\\\[OP2dd0QN\\\\[On1dd0SN[[Ol1fd0UNZ[Oj1fd0WNY[Oi1hd0WNX[Oh1hd0YNX[Of1hd0[NW[Od1kd0[NV[Oc1kd0^NU[O_1nd0aNQ[O^1Qe0bNoZO[1Te0dNmZOX1Ze0dNgZOW1de0bN]ZOk0gf0bN[YO?aYo3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"a4^1Ri00000000001O1O8G:G8H=BX\\\\S<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"h7e0ki00001N10001O000001O00100O1O1O1O2N1O2N100O2N1O1O1O1O00000001O01O0000001O001O14KXQ]2^OQobM?F8K4M3L3N2N1O1O1O100O2NN2O101M2N5^Om^i2[OUbVM7K6J9G5K7I4L5K4L3M1O2O0O000100O1O2N1O2O1N2N3M3M2O3L>B6J2O1N4K2O1O_b6Fj]I5L5K2N2N2O0O2N2N2N3M1O1O101N3M1O2N2N2N1O7lVObNih0j1H1O00000001N1O1000001L5PO[WO\\\\Og]<a0gZD]1G5O0O2O00000000001O00001O0001O01O000000001O01O0001O001O01O00000001O0000000010O000001O0000000001O0000000O1M3L4I8J5L4O10000000001N1000001O000000000O100000001O000O10000000000O10001O00000O1000000O101O0O10000000000O10001O00000O10000O10000000001O001O00O1001O00ZF\"}, {\"size\": [848, 480], \"counts\": \"V;f1ih010000000O1000O10O1000000000O010000000000O10O100000O10000000O1000O10O100001OO10O1000000000000O010O100000000O0100000O1000000000O01000000O2O2N6J:Ec0\\\\Omjc0OUU\\\\O`0@9H8H3L2N1O101N01000000000O100000O100000000O10000O100000O010000O1000000000O1000O10000000O1000O100000001O1O1O0O101O1O1N101O001N2O1O2N1N4M4L2M4M2N4L5KVTa22hk^M3M00000000000001O1O0O2O0O100O2O002M^Ul4\"}, {\"size\": [848, 480], \"counts\": \"i_g3<oi06K5L3K5L5L3M3L4L4M2L5M2M4M3L4K5L4M3M3L4K5M3K6I6M3M3M3M4L3N2N3K4N2N2N2N3M2N2N2M3O1N3N1N2N2O1N2O1N3N1O1N2O2N1O1O1O2N1O1O1O1O2N1O1O1O2M2O1O1O2M2O1O1O1O2O0O10001N1O10\\\\Kh\\\\OP2Xc0fMX]OT2gb0iMa]OS2_b0iMi]OT2Ub0jMR^OR2na0kMX^OR2ga0mM`^On1_a0QNf^Ol1Za0RNk^Ok1Ua0TNn^Oj1Ra0UNP_Oj1Pa0UNR_Ok1m`0TNY_Og1g`0XNa_OVOmLP2bc0iNT@P1l?oNX@n0h?QOZ@o0e?PO^@n0b?QO`@n0`?QOb@n0^?POf@o0Y?POi@o0W?POl@n0U?POn@n0R?QOPAn0P?QOSAn0m>POUAo0k>POWAo0j>POXAn0h>UOWAh0j>YOXAc0j>]OXA<l>EWAKV?5c50O2O0O11O001O001O1N2N120O1N1N3N1O2N2OW[V5\"}, {\"size\": [848, 480], \"counts\": \"k<j0fi000O1000O100000O10O10000000O10O1000O10000000O100000O1000O10O100000000O010000O100000O10O11O00O10O010000000O0100000000O10O1000O100000O10000000000O101O2M3N2M5L3Lca`03Z^_O7G3O1O1000000000O10O10000O0100000000O0100000O010000O10O10O10O1000000000O010000O1000O100000O100000O10O10000000O01000000O10O1000O1000000O10O1000O011O2N5J4M5K^d^2Me[aM6I3N3L4M1O1N2O000O10000000O100O10O010001O0O10000O101N2O1O2N1N101O1O000O010000O1O1N2O1O100O1O002O000O0100000O010O1000O1000001N101O1O2M4M1NgX`3\"}, {\"size\": [848, 480], \"counts\": \"WmX7e0ih0Z1A;E;H8I5L5B?H6H9J5M4M2M3N1O2N1N20O00000000001O0O2O1N2M3M5I9D9B?ZOY1^M`fW4\"}, {\"size\": [848, 480], \"counts\": \"`]]6=Qj03M3N101N1O2L3O1O1O2N100O2N2O1N1O2O1N1O2O1OO01O0010O10O01N2N2O100O10000O100000001O01O1O2O2M0010O0010O1000O001O2N2O0O101O1N2N1O2N2M4L9^O_hW4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"S8k0ei01O1O1O1O1O00100O001O000000001O001O001O0010O3NYnS2UO]RlM7D:J6K5K6J5N3N1O101N1O1O00N2N200O10000000001O000000001O01O1O1O1O010O1O000001O010O1O1O1O00001O1O0000001OO01O1000O01O1O1G8I7K6N3L5IkQb2KZn]M5M4M3M2N2N3M2M3M4M2O1O1N3M2N3N1L4K5N2L4O1N200O1000000000000001O0000000O10001O00001N1000001N1O1L5_Ob0WOcP:JcoEi0POP1I5N201O00001O0O101O01O0001O000000001O00010O00000000001O01O00010O01O000000001O01O0001O0000000001O0000000O1G9J6M4L3O1O1O1000001O00000O100000001O00000O100000001O00000O1000001O0000000O1000000O2O00000O1000001O0000000O101O0O100000000O100000O11O001O1O0O100000001N1000000000000O100000001O0O1000jE\"}, {\"size\": [848, 480], \"counts\": \"[;e1kh00000000000O0100000000O1000O010000000O1000O10O101OO100000000O10O100000000O10O1000O10000000000O100000O11N2O5J<Ec`e0ZOo_ZO<H?A5J2O1O0O1O101N10O2O00O10000O100000O011O0O1000O1000O1000O1000O10O10000O010O100000O10001O00000O1000O1O1O10O100000000O010O10000O100O1M3M3M3L4N3K4N4I;Gb_Y8\"}, {\"size\": [848, 480], \"counts\": \"mlo3<Pj06K4K5L4L3M4K4K5L4L5J5M3K6L3L4N2M4K4L5M2M3O2M2M4M2M4N1O1N3N1O2M2N3N2M2O2N1N3N1O2M2O101N1O2N1O2N1O2N1O2N101M2O2N1O101N1O10000O2N1O100O2O0O10]N[[O[Mcd0`2k[OYMTd0d2S\\\\OYMmc0e2W\\\\OYMhc0f2\\\\\\\\OXMdc0o1S[OoM^1O^c0`1m[OQNUO3e19Yc0\\\\1X^ObNga0Y1c^OcN]a0Z1l^O`NSa0^1Q4N1N3N2O1M2O2O100N2N2O1O1O100O1O100O1O10O01O2O0O1O1O2N2N101N2N2M4KYZ_5\"}, {\"size\": [848, 480], \"counts\": \"o<j0fi000O1000O10000000O100000O1000O010000000O100000O100000O100000O10O100000O010000000000000O0100000000O1000000O10001O1O2M3N4L6IR\\\\a09dc^O3M2N2O100O100000O1000O1000O100000000O01000O0100000000O010000000O01000000O01000000000O01000000000O10O10000O11N1000O100O10O100000O1O10O2O5J3N1Nocc2NP\\\\\\\\M4O10000O1N2O010O10000O01000O1000O10000000000000O1000O10O1000000000O100000000O100000000O1000000O1000O10000000O10000000O2OO1000002N001O1N2O004K\\\\`m3\"}, {\"size\": [848, 480], \"counts\": \"kSn61Zi0h1ZO4N1000000O1000000000000000000O10O100001O01O00001O001O002N1O6J7Hi0POm\\\\b4\"}, {\"size\": [848, 480], \"counts\": \"WWd67Tj08J3L5M2M3O2N2N1O2O001N101O0O2O00001O0000000000O1000000O1O01000O2O00000001O00001O1O2N101N0001O001O1O1O100O100O1O2M2N1K7I7ITnU4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"WeV55Yj03O2N2N3M4L6J5K4L2O1N3N000OO2O0O2O0O2N>B8I4J_hc6\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"XWo1e0hi09H3M100M4M3M3N1O200000000000001O0010O01O00000000001O00000001O0000000000000100O0000100O1O1O010O0001O001O001O00001O0000001O00O100001O000O1O1M3K5J6L4J6K9GUYU1<_fjN:Fh0[O5M000000001O00001O01O000001O0001O0001O0001O01O01O000001O000010O0001O00001O01O000001O00001O01O0010O0000001O010O001O0000000010O0000000000001O00001O000001OO2O0001O00000000O10001O0000000O2N10000O1K6G8D=Aco9EnVEa0nh0k0@?M3N100000000O2O00010O001O0000000010O000001O000010O000001O000000010O000000010O0000001O0001O000000000L5J5I7J6O1O10000O2O0000000000001N11O0000O100000001O00000O10001O0000000O1000001O00000O1000001N10000000001O0O10001O00000O1000001OO10O2O001O001O0O2O000000000O1000000000001N10001O0O100000000O2O0000O1000O1000000000000O1000000000001N10cE\"}, {\"size\": [848, 480], \"counts\": \"U;f1jh00O1000O100000000O1000000000000O0100000O10O1000O10000O011O2N2M7J9Dh`e0]Ok_ZO:H`0@4M2M2O000O2N010O100O100O100O100O10O101O0000000000000O10O1000O10000000O1000O10000000000000000O10000000000O10000O01000000O0100ZOQWOKoh04TWOJlh05VWOJjh06WWOIhh08XWOHhh08XWOGih08XWOHhh08WWOIih06YWOIgh06ZWOJeh06[WOJfh04\\\\WOLdh03]WOMch02^WONbh00_WO1bh0KaWO4`h0IdWO6Zi01O1N2O1O1O1N2N2N2L4O1N2N1N3M3N2O1O1000O0100001O000]OmVOITi04oVOKQi0LYWO3hh0DaWO:]i0N00O10O01O10000O1000O02O0000O2OO100000000O10O01O1N2M3M3M3N1O2000000001N1000001N1000001N100000001O000O101O0000001O0O2O000O110O00001N1000001N100O10001O1O000O101N100O2O00Roi5\"}, {\"size\": [848, 480], \"counts\": \"egQ4<oi06H7M4J5L5K4N3M4K4L4K4J6H9J5L5E:I8I6M3M3N2N3M2M3N2N2O2N1O1N3N1O1N3M2O1O1O2N1O1O2N101N1O2O0O1O2O1N101N101N100O2O000OgMf[O^NZd0\\\\1S\\\\O]Nmc0]1_\\\\O]Nac0^1g\\\\O_NXc0W1U]OhNjb0P1_]OoNab0l0f]OROZb0k0j]OTOVb0j0m]OUOSb0i0P^OVOPb0g0T^OXOka0g0X^OXOha0g0Z^OWOga0g0\\\\^OXOda0g0_^OVOba0h0a^OWO`a0f0c^OYO]a0f0e^OYO\\\\a0d0i^OXOZa0f0h^OVOZa0h0Y4N1O2N1O2M2O1O2N2N1O2N2N101O1O1O2MT\\\\l5\"}, {\"size\": [848, 480], \"counts\": \"j<h0hi000O0100000000O100000O1000O10O100000000O01000000O1000O10001O0000001O1N2O2N5J7J2MQg?<bX@3N1N101O100O1O100000O1000O11OO10O100000000O10O1000O10O100000O1000O10000000O1000O100000000000O010000000O0100000O10O100000O100000O1000O10O100000O010000000O010000000000000O100000000O01000000000O11O0000O1000O10O1000000O1000O100O10O100000000O10O100000O1000000000000O10O1000000000O10O10000O100000O1000O100000O1000O10O10O100000O01000000000000000O010000000O10000O10OO2N2N2N2N2N3N1N01nUg0MVjXO1O001O1O1O0O2O001O1O1O2N001N2O1O1N10000001N102N1N4M2M4LWg_4\"}, {\"size\": [848, 480], \"counts\": \"Wj\\\\68Vi0\\\\1oNg0hNY1WOh0J6N2O2O0000000O101O00O100000000000000O101O0O1O1O1N3L3J7D<_Ob0^Og0kN]PS5\"}, {\"size\": [848, 480], \"counts\": \"mYV6<ni0>F3L4N1N2N2O1O1O2N1O1O1O100O1O1O10O01000000O01O100O100O100O10000O10001O002O0O0010O01O100O001O002N100O1N3M3M3M3L7FYUg4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"WSf43\\\\j03M4M2QYO0Zc02X\\\\OT1nb0SOg\\\\OR1Xc0SOa\\\\OP1^c0UOo[OZ1Pd0hNh[O^1Xd0dNe[O]1[d0eNb[O\\\\1_d0eN][O]1dd0dNY[O\\\\1id0gNR[OY1Pe0lNhZOU1Ze0nNaZOR1ae0UOSZOQO`0`0ae0U1jZO]N_e0]1mZOlMhe0j1i1C8J4N5J5L6I4L5I7HQ[o6\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"aVW17Qj0c0A8I6H;G3N3N3N2NO1K`WOZN`h0g14O1M300O101N101OO10010O00001O01O01O00O1001O00O20O0000O10001O01O001O1O00010O1O1O1O010O000001O1O00001O0000001O001O000000000000000N2L4N2H8L4J7J5Jge6JbZI4M3L4M2M4O01O2M8@PVOOVog0h0YjXOj0VO6K200000001O001O000000010O001O000001O0001O01O01O0001O01O00010O000001O0001O000000010O001O00000000010O001O01O01O001O001O000001O000001O0001O000000001O000000001O000000001O000O11O0000O2O00001N100O2L3C=@g0ZO_U96RjFm0[Oc0D9N3O000O101O000010O0001O0000000010O0001O000010O00000001O0001O01O00001O0001O0001O000001O01O0001O0O1J6I7J7L3O1000000O101O00000000001O0000000O101O00000000000O2O00000000000O10001O0000000O2O0000001O0O1000000O10001O000000000O1000000000001N2O001O001O00000O101O00001O000O10001O0O10001O00000O10000000000O1000O1000000000O2O0O10000000001N10000000001O0O10000O2O0000000O1000000000000O1000dE\"}, {\"size\": [848, 480], \"counts\": \"k:d1lh00001O0O2O1N;Ee0VO_`e0MeeYOKgi0l0F:G3L100000000O1000000O10O1000N2O100O1000O100000000O10000000O100000O1000000000000000000O011O0000O10000000000000O1000O1000O1000000ZOoVOMQi02RWOLnh04SWOJnh05UWOIkh06WWOIhh08YWOGgh09YWOGgh09YWOGgh08ZWOHfh07[WOIeh07[WOHfh06\\\\WOJdh05]WOLbh02_WONbh01_WOOah0OaWO1_h0LdWO3]i00O1O1N1M4N2O1O0O2N2N3M1N3N2N2M2O200O1O01000000O20O@kVOEUi09nVOFRi08QWOGPi03WWOJlh00YWOOdi00001N10000O10O1O1O1O1O001O100000001O00000000O01O1N3M2M3M2M400O11O01OO1000000O2O00001O0000001O0O1O10000O2O001O000O101O0000001O0000000O2O0000001O0O101O000O10001O0O2O0O100O1O2O0OjfY6\"}, {\"size\": [848, 480], \"counts\": \"`cl37Wj02O2N1O1O1O1O2N100O10000O10000000001O00001N101O001O00001O00001O1O001O1O1O1O1O3M4L4L6J4]XO[NSf0j1eYOYN[f0l1`YOUN_f0o1VYOmMA6Yg0l21O0000001O000O101O001O001O0O101O000O1000000O2O001N100000001N101O0O10000O10001N100O2O00001N100O2O0dNXXO0hg0LaXON`g00fXOL[g02iXOJXg05jXOJWg03mXOJTg06mXOITg05nXOJRg05PYOHSg07c1O101O0O10001O00001O001O1O0010O01O1O1O003N]fW5\"}, {\"size\": [848, 480], \"counts\": \"`<d0li0000O1000O011O001N101O001O5J9GaW=;ThB5J2O10OO2O1O10000000O01000000O1000O10000O100000O1000O1000O100000O10000000O1000O100000000O1000000000O010000000000O1000O10000000O1000O100000O01000000000O1000000000O1000O1000O100O1000O1000O1000000000O10O10000000O01000000000O10O100000O1000O10O1O1O1O002O000O010O10001N1000000000000O11N1000O11O00O100000O10001OO10O101O0O10000O01001O0O10000000000O100000000000000O10O1000000O10O01000000O10O1000O1000O01000O1000000000O1000000000000O100000000000000O100000000O10000O0100000000000O100000000000000O2O001O1O2M3N1O2M2OlSQ5\"}, {\"size\": [848, 480], \"counts\": \"Tcj51di0V1nNi0ROm0ROm0\\\\Od0L5N1O100O2OO1001O00000000000000000000O100N2O2N1N2M4K5J6B?B?kNd1TNoVO8eUe5\"}, {\"size\": [848, 480], \"counts\": \"omY71_j02N2O1N1O1O1N3N2N011N5K010N201N3M105J1O02O1NaVOTO[i0o02M3K4O5I:EPa[4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"^QS46Zj02N3M2N4iXOl0ib0XOl\\\\OP1Tc0TOf\\\\Oo0Zc0TOa\\\\Om0_c0VOn[O[1Qd0fNi[O_1Xd0bNd[O`1\\\\d0bNa[O^1ad0dN[[O]1fd0dNW[O]1jd0gNoZOZ1Se0jNgZOV1[e0mN_ZOQ1ge04YZOaNPf0P1cZOZNUO@ef0n1j1G8M6K3L4M4J6L5J4K5L2M4M4LfR_7\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Tbh1;Tj02O1N2O1O2N010O1O001O1O3M3M011N1O10O10O1O010O2O0O1O2N1O002N1O0001O0O1M3L4M3L4K6J5LRSR47ekmKX1M3K3M3O2N10001O0O101O0000001O01O01O00001O01O0000010O000001O001O01O000001O0001O0001O00000001O01O01O0N2J6H9I6O1O1000000O2O0000000000001O00000000001O0O1000001O0000000O100000001O000O1000001O0O100000001O000O101O00000O101O0000000O10001O00001O1O0O101O00000000000O2O000000000O2O0000001N1000001O000000O10O10000O11O00O1000000O1000001O00000O101O0000000O101O000O2O00O1001N1000001O00000O1O2O0O101O00001O00XS<\"}, {\"size\": [848, 480], \"counts\": \"Wi7>Pj06SVOD[i0m0K:G2O0O100O1001O001N2O1O001O1O001O0O101N101O1O1O1O1N2O001O1O001O1O001O1O1N2O1O1O1O1O1N101O1N2O1O001O1O1N3N001O10O01O0O2O[`a:\"}, {\"size\": [848, 480], \"counts\": \"k^`45Xj06J9H5M3L3M4L5L3M3L5L3L4M2N1O001N101O000O2N100O2O000O2O1N10001O0O01000O10000O100000000O100000000O2O000O101N101N101M2O1O1N2O2N1O1O1bNQMZ[OP3ed0SMX[Oo2gd0SMV[On2jd0TMS[Om2md0VMnZOg2TOQMne0;jZO\\\\2CXMbe0?gZOU2L\\\\M]e0c0bZOo1Vf0VNbYOi1af0P13M3L4M4K4L5L4J5N3M2N3O1M3O1J6J6oNgWOYOWfa5\"}, {\"size\": [848, 480], \"counts\": \"Uk72\\\\j01O2COZVO1gi0;01O100O1O010N2000O100000000O0100O10000000O1000O10000O100000O1000O1000O0100000O2OO100O1000O1000000000O10O2O000000000O2O1O001O001O000O2O001O1O000O2O1N101NPcR:\"}, {\"size\": [848, 480], \"counts\": \"fjZ5f0Qi0l0\\\\Nc1WOh0D<L3O2N101O1N10001O00001O001O00000000001O001ON3M2M4L3M4L4B?@d0SOV1]NUoT6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Uj`33\\\\j04L3N2N2N2N4L9H0O1oWOUO`N3dg0i0gYOCUf0?gYOEXf0<dYOJYf07dYOK\\\\f08`YOH`f0;[YOFif0<RYOCTg0=fXOB^g0a0ZXO_Okg0\\\\18K5I7K4J7K5M2N4L5I7J5J6IcTR8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"f8=Rj01N3N1L4J7YOf0N4N1O00001O0000O100000001O0O1O101N1000000O11O01O00000001O001O01O00000001O01O00000000010O0O11O0000010O001O1O1O1O10O01O01O1O1O001O001O1O000000000000001O0000000O1O1L4K5J5K5L6J8HS`7OP`H4L4L4N1O1O12N3M`Rk2@omTM3N3M3M3M3M2N2N3M2N2O4K1O100O01N2H=[Oio9`0\\\\oEl0B=J5O101O0O10001O1O00001O000000100O00001O01O000001O01O000001O0000010O000001O01O0000010O00000000O2J5I7J6M3O2O0O10000000001O00000O101O000000000000001O000000000O101O0O10000000001O0O10001O00000O10001O000000000O2O0000000000001N10001O0O10001O00001O1O000O10001O00O11O0O100000001O0O1000001O0O1000000O01000000000O10000000001O0O100000001N101O00001O000O100000001N10000O101O0000000O101N100000000000TVj0\"}, {\"size\": [848, 480], \"counts\": \"S:c1mh0000O1000O01001O00000O1000000O0100000000000000000O10000000O1000O100000000O011O00O10O1000O1000000000000000O1000O100000O1000000O10000ZOPWOKPi05RWOJnh05SWOKmh05SWOKmh05SWOKmh05SWOKmh05SWOJnh05SWOKmh05SWOKmh05SWOKmh04TWOLlh04TWOLlh02WWOLjh02YWOMgh01\\\\WONdh0N`WO2bh0GcWO9Zi00O1O1O1O1N2M3M3M3N2N2M3N2M3O001O1O1O10000001O000O100000003jN\\\\WO:_i0N1O000O1000O1O0010000O1000O10O1000O1000000O1000N2O100O1N2N1O02O2NdXd8\"}, {\"size\": [848, 480], \"counts\": \"`\\\\_3>ii0=G7L3M3N1M3O2L3M3L3M4K5XOh0H8M3O1001O100O001O0010O10O010O010O01O010O100O100O1O010O100O2N1O2O0O010O0001O000O2N1N2N3M2N2N3N1O1N3M2O1N3M2N200N2N3N1N2N2N2O1O1O1O1O1O1O1O001O100001O1N2O1L4M2N001N20N2O1M2N4N2M3K5M3N2M4L3N2M3J6M4I8I\\\\cP6\"}, {\"size\": [848, 480], \"counts\": \"e;f0ji0O1000O100000O0100000000O10O1000O10O100000000O1000000000O1000O1000000000O01000O1000O1000000000000O10O1000000O1000O1000O1000O01000000000O10O100000000000O010000000000000000000O10000000000O2O0000O10000O1000O1000000O1000000O10O100000O1000O10000O010000000O01000000000000000O0100000000000O000100O2LRlX2E]TgM0I6O1O2O000001O2N2N1N2MRio5\"}, {\"size\": [848, 480], \"counts\": \"e^\\\\57Wj06J3N5J;E?A?A4L5L3L2O1O1N01O2H7G<B>\\\\OQ[a6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"[gR31^j05L2M3N2N001O1O7fYO_O\\\\LNee0f0P\\\\O^OdN`1Ye0lNY\\\\OITNa1ce0cNZ\\\\Ol1fc0SNZ\\\\On1fc0QNZ\\\\OP2gc0nMX\\\\OT2ic0jM[\\\\OS2Vf0K3L6J3M6J8G:Fgcg8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"n7h0\\\\i0=^Oa0O2N101O01O00000001O01O00000O1000000O2O0O100000001N11O00O11O000010O0000000010O00000000001O01O00000001O00010O001O1O0010O00001O100O1O001O00001O1O0000000000O1000O110OON3L5L3I7H8H8LcZ8JdeG4N2M3K6M1001O5@QVO5]og04]jXO>Eb0_O9I2O1O1O00001O000000001O0010O0001O01O01O00000010O00010O00000010O000010O01O00001O0010O0001O00O10001O0O100O1O1N2N3L3M3N2O1N3M2O1N2N2O1N3M2O1O2N1N2O1O1O100O2O0O100O2O0000000000001O00001O1N2O0O7Ic]<3XbC7J3O1N101O0000000010O01O001O001O00100O1O1O00100O1O1O1O2N1O10O01O2N100O1O2N1O1O2N101N1O1O2N1O1O010O00O1O100000001O0000001O00001O00000O100000001O0000000O2O000000000O100000001N10000000001O0O1000001O0O1000001O0O100000001O0O100000000O10001O001O0O101O000O101O00000000000O101O00001O000O1000000O1000000000000O10000000000O2O00000000001N10000000001O0O10001N1000000000000O2O0000000O101O1O0O2Nf`m0\"}, {\"size\": [848, 480], \"counts\": \"c9d1lh000000000O10O1000O10000000000O1000000O1001N100000O100000000000000O100000O1000O10000O1000O100000O10000O100000000O10O10O1O1O100N2_Oa0O10000O100000O10O100O2N1O1N2M4I]j52bUJ8J5L4K5K3L4O1M4N1N200O100001O0000001O001O6hNTWO?di0K1O00000000O1O1O1N0110O01001O1O001O0O010000O100N2O1N2O1N2M3L4O1O11O0000000O10001N1000001N1010O0001N1000001O00001O000O2O0000001N2O001O00000O101O00001N101M6H^e`7\"}, {\"size\": [848, 480], \"counts\": \"kgR22[j06L2M3O1N1O1O1mMBSZO`0je0CUZO=ke0CVZO<ie0EWZO<ge0EXZO=ge0DWZO=he0DXZO<he0EUZO>ie0DmYOe0Sf0\\\\OlYOd0Sf0_OjYOb0Vf0@fYOc0Yf0_OcYOc0\\\\f0A`YO`0`f0CWYOc0hf0IgXO=Xg0_1O0O101NROSYO[Nlf0d1XYOZNhf0d1[YO[Ndf0e1_YOYN`f0g1bYOXN^f0f1fYOXNZf0g1gYOYNXf0g1iYOYNWf0f1kYOYNUf0f1mYOYNSf0g1mYOYNSf0f1oYOYNPf0g1RZOXNne0h1RZOXNme0h1UZOWNke0i1UZOWNje0i1XZOVNhe0j1XZOVNge0j1ZZOVNfe0j1_110O0100O001O001O1O00100O1O001O1O1O1O1O011N1O100O100O10001O0O2O000010O10O002O0000O010O1O1000O1000O100O100O1O1O1O1O1O1N2O2N1O1O2M2O1N2O1N2O1O1O1N3N1N1M5L3L5G8I8G:CSPP7\"}, {\"size\": [848, 480], \"counts\": \"W;e0ki0O1000O1O100O10O01000000000O1000O100000O10000O10000000000O0100000000000O01000000000O01000O01000000O10O100000000O100000O010001O2M3N002N2O0O1O2N3L2O`l>4\\\\SA2N001O0N5M1O0O10000M30O1000000000O010000000O11O000O0100O1000000000O100000O10O100000000O1000000000000O0100000O1000O10000O1000O10001OO1000000000O1000000O1000O1000000000O10000O10O10O1N1O3M2NTZb7\"}, {\"size\": [848, 480], \"counts\": \"hfl4d1\\\\h0b0UNi1YOg0O1O10001N1000000000000000000000O1001O00O2O0O1O2N1N2N3M2L6F;\\\\On0cNVmc6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"ZlQ31^j05K5L3M4L2N3oWO@jNLZf0h0gZO@cNY1_e0YOi[Oa1Sd0`Nk[Ob1Td0`Ni[Oa1Xd0_Nf[Ob1[d0_Nb[Ob1`d0^N\\\\[Od1ed0^NW[Oc1ld0^NoZOb1Ue0`NeZOa1^e0cNZZO]1ke0bNoYO_1Vf0[12QNWZOROme0h0`ZOkNfe0n0R2J6L4M5L4L3L4M3L3M4K4M3Lnb^8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"[7=Sj0000O100N3L3ROo0L4O1O1O00001O01N100000000O2O000O100O2O000O1000000000001O0001O001O01O000000000000010O00000001O0000010O001O001O1O00100O1O00010O01O1O001O001O00001O00000000000000000O1N3L3M3J6H8K6HohW1KTWhNb0C<Dd0_O2O0001O01O001O0001O0001O00001O01O010O0001O0000010O000010O0000000010O00001O000010O01O001O00001O01O01O01O01O00000000001O0001O0001O00000001O01O000000000001O00001O0O10001O000000000O2O000O100O2L4C=ZOYP:MhoEh0^Ob0I6M3O2O001O0000001O00001O01O01O0000000010O00000001O01O0001O0000010O001O00001O01O00000000001O0000000D<K6K4M30001O0000000O2O000000000000001O0O11OO1000001O0O1000000000001O0O1000000O10001O000O1000001O0O1000001O0O100000000O2O000000000000000O101O001N2O00000000000O2O00001O0O1000001O00001N1000000O10000000000O100000000O10000000001O000O1000001O0O1000001O000O10000O2O000O100000001O000O1O2O0O2Ocmf0\"}, {\"size\": [848, 480], \"counts\": \"k8a1oh00000000O1000000000000O10O1000O1000000000O0100000O10000000000O100000000O02O000000O10000000O1000O1000000000000O01000O100000000O10000000O1000YOSWOJnh05TWOJlh05UWOKkh05UWOKkh04VWOLjh04VWOLjh03WWOMih03XWOLhh03YWOLhh03YWOMgh02ZWONfh01[WOOeh0N^WO2bh0KaWO5ah0FbWO:`h0AcWO?Vi0010O1O1N2O1N2N2N2O1N2N1N3M3M3N2N1O2N2O100001O001O0O110VOQWO1oh0MWWOOlh0F^WO8^i0N2O00000000000000O100OO11O1O10O10000000O010000O0100N3M2O1M3M3L4N2O1001O0O10001O0O10010N1000001O0O2O00001O00001N100000000O2O0000001O00001O0O2O001O00001N101O0O2O001O0O10001N11O01O0O101O000OfYo6\"}, {\"size\": [848, 480], \"counts\": \"TkV22[j07K3M3N1O1O1O003M<D001O001O1O001O1O2M2O00000O2O2M101O2M2O1N3N3L2O1N101O1N2O001N2O2NSNSXOW1ng0aN[XO^1dg0aNaXO\\\\1]g0eNfXOY1Zg0eNjXOY1Ug0gNmXOY1Vh0OhNjNUYOV1hf0mNXYOS1ff0nN[YOR1df0nN]YOR1af0oN`YOQ1^f0POcYOP1\\\\f0QOeYOn0Yf0SOhYOm0Wf0TOjYOk0Tf0WOmYOh0Qf0YOQZOf0me0[OTZOf0ie0[OYZOd0ee0]O^ZOa0ae0_OaZO`0]e0AfZO=We0EkZO:Se0GoZO9od0HQ[O8nd0HS[O8ld0HU[O8kd0GU[O;jd0DW[O<hd0EX[O;hd0EW[O<id0CX[O<id0CX[O<id0CX[O<id0CX[O<id0CX[O<hd0EX[O:id0EW[O;jd0DW[O:jd0FX[O8id0HY[O4id0KY[O2hd0N[[ONgd01][OJdd07^[OCfd0=f20100001N10004Ka0@4L<D:F4K2O1N10000O01O1O1O1O100N2O1N3M2N2M3M3N2N2L5L4K8I4J>]Od^m6\"}, {\"size\": [848, 480], \"counts\": \"^:e0ki0O1000O10000O010O100000000O0100000O1000O1000O100000000000O0100000000000O10O10000000O10000O010000000O1000O10000O0100000O01000000O1000O1000O10000000000O01000000001N01000000000000000O1000000O1000O100O1000O100000O10O10000000O0100000O10O100000O10000O01000001O00000O1000O10000O01000000O100000000O100000000O010000000000000O100000O1000O10O100000O1000000O010000000O10000000O1000O1000O10000O01000O1O10000O0100000O1000O1000000O01000O10000O01000000000O1000000000O10000000O100001O00O0100000000000000001O1O0O2O0O3N1N5Knek5\"}, {\"size\": [848, 480], \"counts\": \"l^R5R2Sf0]2F9M201N10000000000O1000001O000001O00O11N10001O0O2N2N2M3K7J6Cb0[Oh0POan^6\"}, {\"size\": [848, 480], \"counts\": \"PkQ2>oi05L4K4M4M2M3N2M3N2N3M1O2O1N1O2O0O1O100O1O100O100O10O10O10O2O0O1000000O2\\\\NXWO^1ih0`NXWO_1nh0NLcNWWO]1ih0dNVWO[1kh042O1N2O0hNVWOi0kh0TOXWOl0hh0SOYWOl0hh0TO`WOd0gkS9\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"YjV35[j02N2N2M4M4L5L1QXOAeNZ1Qe0XOU\\\\Od1jc0_NQ\\\\Od1nc0`Nn[O`1Sd0aNk[O`1Ud0aNh[O`1Yd0bNb[O_1_d0dN][O]1dd0fNW[O[1kd0hNoZOX1Se0lNfZOU1^e0l17I3mMaZOnNee0i0fZOkNbe0m0V2J6L5L4J6K4M4K4L3M4M2K]_Z8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"lZ45Xj07K4M1O000O2N2M2POQ1N3N1N10010O0000001O01O0000000O1O1O2O0O1O10000O2O00000000001O01O00001O0001O01O00001O00000001O0O11O000000010O1O1O0010O0001O01O00100O001O001O00000000001N1000000000000O1O1N2J6I7L4J6I8GhZ80]eG4L5J4O1O2N14L6]OQVO8Xog02ejXO<D;H:F`0B10OO101O01O0001O0001O01O00000010O0001O000010O000001O01O01O00001O00001O0001O001O01O00001O00010O00001O01O000001O01O0001O0000001O00001O000001O00000000001O001O00000O101O000000001O0O100000001N100N3G9TO`j:<^UEc0A=M4N10001O000O2O001O0001O01O00000010O000001O00000010O00000001O00010O0000001O000001O0001O000001O0O100K5J7I6L4N2O1O2O0000000000001O0O100001OO2O00000000001O0O10000000001O000O1000001N10000000001N100000000O101O000000000O2O0000000O10001O00000O10001O000O1000001O000O1000001O000O101O00001O1N10001O000O1000000000000O10O10000000O101O000O10001O00000O101O001O000O10001N1000000O10001O001N100O1000000O2O00000O1001OO10d\\\\6\"}, {\"size\": [848, 480], \"counts\": \"kk6g0ii06J:F3M6I3N2N0O1000O1000000000O0100000000000000O100000O11O0O100000O1000O1000000000O010000000000O10O100000000000O10O1000000000O010000000000O01XOTWOLlh01XWONhh02YWOMgh03YWOMfh04[WOJfh05[WOKeh04\\\\WOLch03^WONbh01_WONbh01`WON`h01aWOO^h01cWOO]h0OeWO1[h0MfWO3[h0JhWO6Yh0FjWO:Vi00O1M3N2O001O1N2N1N3M4N1M2O2M3N2N101O1000O2O00000O10001O004Ld0\\\\O2M5L1O00O00100N11000O10000000O2O001O00O1000O01O1O1O1M4M1N3M3O1N2O11O0000001O0O1O1000001O000O20O00O101O0000001N10001N10001O00001O00001O000O101O0O10001N1010O0001O0O10001O0O1O2M201N2Of[j6\"}, {\"size\": [848, 480], \"counts\": \"lY`35Yj02M4N3L:F>C3L:G4K4N3L3L4M3M3M3N2M3N1O1N3N1O2N1O2O0O1O1O10O100O100O1O001N1M4K4N3K4K5N3M2J6N2N2N3L3M3M3L4M3N2M3M4M2N2N2O1O1O1N2NSXOBme0<SZOGke08UZOJje05VZOLke03TZOOle0OTZO2le0NRZO4oe0KQZO6ne0IQZO9Pf0FoYO;Qf0EmYO=Vf0@hYOb0Ph03L4L4M3N2M3QOlN[XO[1fg0iNjWOb1Vh0<1O1N3N1hNaWO=`h0_OfWO9IVOch0?hWO5ah0HaWO3dh0FeWO4Qha6\"}, {\"size\": [848, 480], \"counts\": \"cb84;Mci0;UVOGji0`000O100O0100000O0100000O100000O100000O01000000000O10O1000000O1000000O010000000O01000000000O1000O1000O1000000O0100000000000O01000000O01000000000O10O10000000O01000000000O010000000O1000O10000O10O1000000O01000O100000O1000000000O01000000O0100000000000000O10O10000000O100000O10O1001O000O010000000O1000O10O100000O1O1000O1000000000000O01000000O010000000O010000O1000000O1000O1O1000O1000000O100000000O1000O1O1O10O10000O10000000O01000000O100000O10O10000O100000O10O100000000000000000O100000000000O101O1O1O2N1O1N3Mo]c5\"}, {\"size\": [848, 480], \"counts\": \"`lY546^1Xf0a2ZOg0J4O2OO10000000O100010O00O10000001O000000000O2O001N1O3L4L4I9_OnYOVL^f0n2Z1UMTXO]1h^W6\"}, {\"size\": [848, 480], \"counts\": \"goo3>oi05L5K3M4M2N3M1O2O2M101N3M2O1N3N00001N101O0O2O0000000O0100O1O101N100MWWO_Nih0a13O1N2N3N1M301N1O2O1K5O1O1N3K4L9H^^R7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"gb\\\\37Xj03N2M2O2N3L6K4M2mXOIgc09][OYObNb1Ve0WOT\\\\O^1jc0dNR\\\\O_1mc0bNQ\\\\O_1Pd0cNk[O_1Vd0bNg[O_1Zd0cNa[O_1`d0dN[[O]1gd0fNS[OZ1Re0fNhZO[1ae0e14K5kM[ZOWOie0a0cZOVObe0d0gZORO`e0c0]2K4M5L9C>_OnPX8\"}], [{\"size\": [848, 480], \"counts\": \"Pj0`0Pj00001O2N1O1O2N1O2N1O2N1ORmQ<\"}, {\"size\": [848, 480], \"counts\": \"oW>;Tj02O1N2O1N1O2M3VOZOUWO06n0]h0i0O1O2O100O001O0001O000001O00O100O101N10000O101N10000000001O000001O1O1O0001O01O00O100000001O0000000010O001O00001O1O10O01O01O001O1O001O010O0000001N11O0000O100000000O100O1O1L3H8M5G9G:JdZ8KbeG5J5L5L201OO3N5LYUg0LdjXO=E9Hb0_O9I1O1N20N2O00010O000001O00000010O0000010O000001O0010O0000010O000001O0000001O01O01O00000001O01O001O000010O000001O01O01O000000000000010O001O000001O0000000000001O001O0000000O10001O0000000O1000001N1O2J6Bf0ROlU9GcjFe0[O`0YOg0I7M2O2O00001O0000001O001O0001O0001O0000001O01OO1010O000001O01O0001O00010O000000001O01O00000000001O0O1M3G9J6L5N1O100O2O0000000000001O0O100000001O000000000O2O0000000000001O0O100000001N100000001O0O100000001N10000000001N100000000O10001O000000O11O0O2O000000001N1000000000000O2O001O0000001O1N101O0O100000000000000O100000000O01001O00000O10001O000O10001N1000001O000O100O2O000000001N1000000O2O00000O10_I\"}, {\"size\": [848, 480], \"counts\": \"bca07Wj0?Bb0_O3M7I1O1O00001O0000O010000000O10000000000000000O1000O100000000000O1000O1000O1000000O10000000O100000O100000000000O10O10000000O01000000XOSWOMlh03VWOLjh03WWOMih02XWONhh02XWOMih02YWOMgh02[WOMeh03ZWONeh02\\\\WOMeh02\\\\WONdh01]WOOch00^WO0bh0N`WO2`h0KcWO5]h0HfWO7Yh0IjWO6Vh0DoWO=Qh0@RXO`0nh01O1O0O2N2M3N2N1O2M3O1N2L4N1O2N2N10100001O0000001N10000[OSWOGnh04XWOJhi0N2O00000O1000O1O1O1N20O01000000000O10000000O010O1O1O1O1L4L4M3N2O1000000001N10000O10001O00001N1000001O000000001O0O101N10001O0000001O000O2O00000O2O000O101O00001N11O01O0O10001N100O2N101O1N10Qo]6\"}, {\"size\": [848, 480], \"counts\": \"dhe22Uj0f0^O8K3N2O101N1O2N1O1O100106I1O1OO2O001O1O1N1O2N2N1O001O1O1N101N101O0O2O001N101N101N2O001N2O0O2O0O2O1O0O2O00cNaXOJ]g05iXOGWg05RYOGmf07XYOFhf08\\\\YOFdf09^YOGaf07dYOF[f09jYODVf0;P2O1O01O0O2O1N2O11O00001O010O01O0100O0100O001O101O0O2\\\\VOBSi0T1I5L3M>B00O2N1O1O2N1O2M3N2N2N2N2M3N1O1N2O1N2O2M3M2N4M3L5K7I4KPZd6\"}, {\"size\": [848, 480], \"counts\": \"XZc0`0ni02O1O010O10000000000O10O100000O10000000O1000O01000000O10O10O1000000O10000000O10O100000O100000O100000000O1000O1000O1000O1000000O1000O10000000O10O10000000O1000O1000000O010000O1000O10000000O10O1000O10O1000O100000O100000O010000000000O1000O1000000O10O1000000000000O0100000O10O100000O10000000000O1000O1000000O10O1000000O0100000000O10O1000000000O10O10O10O1000000O100000O010000O0101N0100000000O100000O0100000O1000O10O10O10000000000O1000O1000O10O10O100000000O100000000O010001OO1000000000000000000000000O2O2N1N102M\\\\fX5\"}, {\"size\": [848, 480], \"counts\": \"Vjc5[1gf0_2nN\\\\L^ZO]4Ze0a0O000000001O000000000000000000000000O100000000O100O1O1N2L7F:ROS1QO]1fNPok5\"}, {\"size\": [848, 480], \"counts\": \"U]b2=oi09I4L4M2M4M2O1N2N2N100O2O0O1O2O1N2O2M3N5J4M1N1000000O101O1O00O100O100O100N2O1L4O1O1O1010ON2L5IVWOeNlh0X18O0011O0000N2M4N1O2N2N2L5Kb0]OPmV8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"k_f33[j05L3N2M3N3M2N5TYO\\\\OlM6_d0b0Y]ON`MMTe09T]Ok0kb0VOo\\\\Oo0Qc0SO]\\\\O]1dc0dNV\\\\O`1jc0bNR\\\\O`1oc0aNn[O`1Sd0cNg[O_1Zd0cNa[O^1bd0eNX[O\\\\1od0bNkZO^1]e0aN[ZO`1he0b13jMcZOSObe0e0hZOQO_e0g0lZOoN[e0i0\\\\2J4M4M5J8F:C:Kc^l7\"}], [{\"size\": [848, 480], \"counts\": \"dh0l1eh0O2N2N3M2N2N1O1O1O2N1O2N2N2N1O1O1O2N1O1O2N2N1O2N1O2N1O1O1O2N2N1O2N1O2N1O1O2NR\\\\\\\\;\"}, {\"size\": [848, 480], \"counts\": \"S[g08Uj07L2N0O1UVO_Ogi0e0O001O2oNQ1M3N010010O00000001O00010O00O1O1O1O2N1000000O100000001O0001O01O0001O001O0000O2O01O00000001O0O11O0000010O00001O100O001O1O01O10O0001O001O001O00001O0000000O10000000000O1N2M3H8K5J6F;HY`7Lo_H6K4I6N1O1N3N12N8Geog09moWO:Ie0]O7J1O0000000010O000001O01O01O000010O0001O010O000000010O00001O0001O000001O00000010O000001O00001O01O01O00010O00000010O0001O000000010O00001O0000000001O000000001O00000O2O000000001O000O1000001N101O000N2M4]Ob0A]P:@goEP1^O>C=K4O2N1O101O00000010O000001O000010O00000001O0001O01O0000001O01O01O0000000010O00000000000010O0000O101L3G9L4L4M3O2N10000000001O0O100000001O00000000001N10000000001O000O10000000001N10000000000O2O00001O000O100000001O0O1000001O0O101O0000000O10001O000000001N10001O00000O2O00O11O0000001N1000001O00000O2O001O000O01000000000O10O10000000O2O0000000O10001O0O2O0000000O10001O0O101O000OoI\"}, {\"size\": [848, 480], \"counts\": \"k6b1nh00000O101O0O:G:D8I5DQVOLT[a0OP__Oi0^O;F4L6J2N2M101O000000O1001O00O0100000O100000000O10O10000000000000O100000O100000O100000000O1000O100000000000O10O1000000000O1000O10O10000WOUWOMkh03UWOMkh02WWOMih02YWOMfh04[WOKeh05\\\\WOJdh05]WOKch05]WOKch04^WOKbh05_WOKah04`WOL`h02cWOM]h01dWOO\\\\h00fWO0Zh0NhWO2Xh0GoWO8Ui000000O1O1M3M3O1N1N3N2M3M201M3N1N3M20100O1001O00000O11O00[ORWOHoh05UWOImh0M\\\\WO2bi0O1N2O000O010O01O001N3N1O100001O0O10001OO01000O00100N2O2L3M3M2O2O1O100000000001N100O1010OO10001O000O101O00001O000O101O0O100010O000001O000O101O0O10001N101O00001O00001O000O1O2N1O2N101N10^[W6\"}, {\"size\": [848, 480], \"counts\": \"jVk1?mi09H5L4L4L3M4L3M3O1N2N2O1O100O1OfN^WOg0ah0UOeWOk0Zh0POkWOP1kh000000O1O10O0000O1000000000000O10001O001N101O0O2N2O1N10001N1O2N2O0O101O0OXOoWOTOog0j0VXOSOjg0l0n0M2N2O1O2M2O2O1O0O1001O000O2000O101O0O100010O01O00001O0010O010O01O01O01000O101N3N3L;F1N4L5L2M4M5K;E00O001O2N1O2M3N1N3N2N2M3N2M3N2M2O1O2M2O2M3N3L5L3L8G5KdXS7\"}, {\"size\": [848, 480], \"counts\": \"^8e0ki000O0100000O1000000O1000001N6K5J3N2N1OaX86VgG;G1N20O01000000O010000O100000O100000O1000O10O100000000O01000O100000O010000000000O0100000O1000000000O02O00O10000000O100000O100000O1000O100000O1000000000O10O10O100000O010000O1000O10000000O1000O10O100000000O10O010000000O1000000O10000000O0100000O010O100001N10000000O10000000O01000000000O1000000O10O10000000O100000O1000O010000000O10000000O10O1000O100O1000O1000000O1000000O1000O10000O01000000O100000O10000O010O10000O10O100000000O0100000O100000O10O10000O10000O1000O100000000000000000000000N200O10001N2O2N2M3N1OTmR5\"}, {\"size\": [848, 480], \"counts\": \"]Sl5a0Tg0Q3WOd0@`0O1O0000O10000001O0000000000000000O10000000000O100N2O1O1L4K5I7XOh0UO[1fNZlb5\"}, {\"size\": [848, 480], \"counts\": \"eok1=oi07K6J4L3N3M2N2N2N2N2N2O0O2N100O2O0O2O1N101O1N1O10001O0O1000O100003M2N0O110OO1O1O1000000O1N2O1O2N1O1N3K5M2N3N2O1N2N2N2L4M3M4M3K6K4M5HPQj8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"lbo34Zj04M2O2M4M3M6J5QYOKfMBjd0g0`\\\\OUOfNe1gd0XO^\\\\OZOcNb1od0VO[\\\\O`1dc0aNZ\\\\O`1gc0aNV\\\\O`1jc0bNR\\\\O`1oc0bNm[O_1Td0dNf[O^1\\\\d0eN^[O[1ed0gNV[OZ1Pe0fNhZO[1be0c14hMfZOTO]e0g0lZOQOZe0f0Q[OnNYe0g0^2K5M3K7J9C^ke7\"}], [{\"size\": [848, 480], \"counts\": \"Rh0^2Sh0O2N1O1O2N2N001O2N1O2N2N2N1O1O1O2N1O2N1O2N1O1O2N1O2N1O2N2N1O1O2N1O1O1O2N2N1O2N1O2N1O1O2N2N1O2N2N1O1O2N1O1Obno:\"}, {\"size\": [848, 480], \"counts\": \"lco08Wj05K3N000O101N3L3BYOkVOm0ah0l0N1O2O0001O00000001OO2O0O100O100O101O000O10001O00000001O0001O0001O0001O00000000000001O0001O0000000010O001O1O1O001O10O010O001O0010O000001O00001O1N1000000000O01010NO2N2K5I7J6J6I9H[`7GP`H8H6L3K4O2O0010O:EWUg00cjXO=G:Fg0ZO4N001O001O00001O01O0001O0001O01O000010O0000000010O00001O0010O000001O0001O01O00001O000001O01O00001O00010O001O01O01O000001O01O0000001O000001O000000001O000000001O0000001O00000O101O000O1000001O0O101K4H9F9Aa0CbU94PjFf0C=B>J6M20000O2O00001O00010O00001O00000010O000001O0000010O0000001O0001O01O00001O0001O00010O000000001N100H8J6L4M3M4O0O1000001O000O1001O0001N10000000001O0O1000001O0000000O10001O0000000O101O000O1000001O00000O101O000000000O101O000000000O101O0000000O10001O1O0O101O001O0O10001O0000001N10001O00000O2O00000O100000000O100000000000000O02OO10001O000O101O000O1000001OTJ\"}, {\"size\": [848, 480], \"counts\": \"`6j1fh0O100000000O2O0000001O0O2O2M:F6K;D7H;FbUb0?oi]O`0A;E3M2M101O00000000000O10000000O10O1000O100000000O11O000O1000O1000O1000000000O100000O01000000000000O100000000000O1000O1000000O10O10VOUWONlh01VWONjh01XWONhh02XWOOgh01[WOMeh03[WOMeh02]WOMch02^WONah02`WOMah03_WOMah02`WONah0OaWO1_h0NbWO1_h0OaWO1_h0KeWO5[h0HhWO8Xh0EkWO;Uh0AoWO>Qi0100O1N2O1N2L3N3N2O1N2N1N3M3N2N2N101O02O00001O0000001O0ZOQWOJPi0OXWO0jh0H^WO6_i0O1O000O0100O1O001O1O100O100001O000O10000000O010O1N2O1N2N1N3L5M2000O1000001O0O10001N100001O01O00001N1000001O00001N1O101O00001O0000000O101O00001O0O101N11O000001O0O101N2O00001O0O2N101O000O2O00000ORnj5\"}, {\"size\": [848, 480], \"counts\": \"Y]e1`0oi04K5K5K4M3M3M3L4M3M3M3M2O1N3N1N3M2O2N1N3N1N2O2M2O1O2N101N101NcM_XOl1bg0PNaXOQ2og000O1001N100O1O2N1O001O1O1O1O1O001O1O00RO_XOnN`g0n0fXOPOZg0l0lXOSOSg0k0oXOUOQg0h0RYOYOmf0f0UYOYOkf0e0XYO[Ogf0c0\\\\YO]Ocf0`0aYO_O_f0?dYOA[f0>fYOBYf0=jYOCUf0<lYODTf0;nYOEQf09RZOFne09TZOGke08WZOGhe09[ZOEee09^ZOFbe09_ZOG`e09bZOF^e0:bZOF^e09dZOF\\\\e0:eZOE[e0:fZOFZe0:fZOFVe0IgXOa0S2FTe0?nZO@Se0?mZOATe0>mZOASe0?mZOASe0?nZO@Te0>lZOAVe0>jZOBVe0?iZOAXe0>hZOAZe0?eZOA\\\\e0>eZO@\\\\e0a0Z2O0010010O010O10O2O0O3N3L4\\\\VOTO\\\\i0P101O2OO11O01O2N3M1N3M1N2N3M2M5K6IVjc7\"}, {\"size\": [848, 480], \"counts\": \"Z8c0li01000000O100000O1000O10000000O100000O010002N3L5L2N4L1O1OPh:OoWE;dUOGni0>O2OO010O100000O100000O10O1000000000O1000O1000O100000000O1000O1000000000O10O100O10O10O10000000O1000O100000O1000000000O10O1000O1000000000O100000000O01000000000O0100000O100000O100000O100000O10O1000O1O10000000O100000000O1000O1000O100000O10000O0100000000O10O10000000O01000000O10O100000000000000O100000O10O10O100000O100000000O10000000O010O1000O10O100001O0000O01000000000O10O1000O10O100000000000O01000O10O10O1000O100000000O01000000O1000O100000000O10O1000000000000O10O10000O0100000O100000O1000O2O1O001O0O3N4I^oh4\"}, {\"size\": [848, 480], \"counts\": \"i[T6S1^h0R1iNU1lNT1L301O0000001O0000000000000000O1000000O100000000O1O1N2N2L4L4D<B>XOn0YOU1_NchY5\"}, {\"size\": [848, 480], \"counts\": \"W]X2?mi08J4L4M3L3N2N2N2N2N2N2O2M3N1N2O0O2O2N1N100O10001N101O0000000000000O10O1O100O2N10O11O0O1K`WOYNah0d17N2N3N100O2O0O2O0O3N1N2M3M3M3M3M4L4O1IUVOEZR`8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"SfX47Xj04M2M4M5K4VYOEWc0?_\\\\Oi0_b0ZOY]Ol0fb0WOU]Ol0jb0VOi\\\\OV1Vc0lNa\\\\O[1`c0fNY\\\\O_1gc0cNU\\\\O_1lc0bNQ\\\\O^1Qd0eNj[O\\\\1Wd0iNb[OW1ad0kNX[OX1kd0iNoZOX1Ze0L`ZOlNhe0f0iZOoN\\\\e0j0nZOkNYe0o0R[OWNce0_1n1H8K4L6J5J9I5G]m[7\"}], [{\"size\": [848, 480], \"counts\": \"Th0\\\\2Uh0O1O1O2N2N1O1O1O2N1O1O2N1O2N1O2N1O2N1O1O2N1O1O2N2N1O1O2N1O1O2N1O2N1O2N1O2N1O1O2N2N2N1O2N2N1O1O2N2N2N1ObcQ;\"}, {\"size\": [848, 480], \"counts\": \"\\\\RW18Wj06J3N1N2O1N4L001VOXOVWO38m0Zh0j0O100000000001O00000O1O100O100O2O000O10001O0000000010O0000001O000001O00000000001O01O0000000001N1001O00100O1O001O1O1O0100O0010O0001O0010O0001N2O000000O100001O0O1O1N2M3K5I7J6I7J8Ihe6M]ZI6I6L2L5N1O11O007I:DQUg0=^jXO?Dg0YO4M201O1O00001O00010O00001O01O0001O01O0001O0010O0001O00010O00001O0001O01O0000010O0000001O00010O00001O00001O01O01O0000010O0000001O01O00000001O0001O000O2O01OO10001O000000001O00000O10001O0000000O2N1N3H7F:F;BiU9JYjFd0B;B?G8K5O2O0O2O0000001O00010O00001O0000001O0001O01O0000010O00001O0001O01O0000010O0000000010O000000000N2J7I6L4L4N2O1O2O000000001O00000000001N10001O000000000O2O00000000001O0O10000000000O10001O0000000O101O000O10001O00000O2O0000001O000O1000000000000O101O001O001O0O101O1O0000000O2O001O000O2O0000000O2O0000000000000O10000000000O0100000O1000000OUJ\"}, {\"size\": [848, 480], \"counts\": \"`6j1fh00000O100000000O100000000O101O0000000O2O1O2M7I7J=A`0_Oejc0d0iT\\\\O?B;E1O1O1O0O10000000000O1000000000O100000O0100000000000000000O1000O10000000000O10000O1000O100000000000O1000O1000000000O1000O010000VOTWO0lh0OVWO0jh0OXWO0hh00YWOOfh02[WOMeh02\\\\WONdh01]WOOch01^WONbh01_WOOah00`WOOah00`WO0`h0ObWO0^h00bWO0^h0OcWO1]h0MeWO3[h0JhWO5Yh0GkWO9Vi0000O1O1O1O0O2K5M3N2N2N1O2N2M3M3N101O0011O000000001O0O1\\\\OoVOIQi04SWOKnh0OYWOOih0J^WO3ai0O00000000O010O1O002N1O10000000000000O100000O010O1N2O1N2M3M3K5O100001N1000001O0O10001O0000001O00001N10001O000O2O000O2O0001O01O000O101O0000001N100O101O00001O00001N101N101O000O2N100O2O000NSdg5\"}, {\"size\": [848, 480], \"counts\": \"aTl1\\\\1eh0d0D:J5L4L3M4M2M3N2N2N2N2N1O2N101N2N101N2N100O2N101O1N101N101O0O2O001O1O010O01O1O3N1N5K5K2N2N000gNQYOQOQg0j0SYOUOof0f0TYOZOmf0c0VYO\\\\Okf0b0VYO^Ojf0a0WYO_Ojf0>XYOBhf0=YYOCgf0<ZYODgf0:ZYOFgf08ZYOHff07\\\\YOHdf07]YOIdf05]YOKcf04^YOLbf02`YON`f01aYOO`f0OaYO1_f0NbYO1_f0NbYO2_f0LbYO4^f0KcYO5]f0JdYO6\\\\f0JdYO6\\\\f0IfYO5[f0JfYO6Zf0IhYO6Xf0JhYO6Yf0HiYO6Wf0JjYO6Vf0IkYO7Uf0IkYO7Uf0IlYO6Tf0ImYO6Tf0JlYO6Tf0ImYO6Tf0JmYO4Tf0KmYO4Sf0MnYO1Tf0NmYOOVf00kYOG^f07P2N1O2N100O2N1O2N1NQ\\\\o7\"}, {\"size\": [848, 480], \"counts\": \"[8b0mi01O100O100000O10O1000000000000000O1000O100001OO1000O1000001N2O2N3M4L5J_W=?RhB2O0O0100O100000O100000O0100000000000O1000O10000000O1000O11O000O01000000000O0100O100000O1000O100000O01001O00O10O1000O10000000O10O100001O0O10O10000000O10O10000000O1000O100000O100000O10O100000O100O10O10000000000O010000000000000O010000000O0100O11O000O100000O100000O10O10000O10O10000000000O100000000000O10O10O10000001N1000O1000O10000O010000O10O10000000000O1000O11O00O1000O10O100000000O0100000O01000O1000O1000O1000O1000O10O1000000000O0100000000O1000000000O0100000000000O100000O10000O100000000O2O1O1O2M3MkUc4\"}, {\"size\": [848, 480], \"counts\": \"[j[6T1Zh0T1UOj0VOi0YOh0O000000000000001O0000000000O10000000000O1O100O1O1N2M3L4H8D<@`0D<Af0\\\\Om0iN`_Q5\"}, {\"size\": [848, 480], \"counts\": \"Zbf2a0ji06M3L4N2M2O2M3N2O2M3M5K7J1N2O1N2N3N1O1O1N101O0O1000000O10000000000000LkWOmMUh0R25O10000N2O1M3O101J^WO[Nch0e14O10000O2N10101N0K6N2N3N2I7L5K6@hhR8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"fT`44Zj05M3L3N1YYOLob0;h\\\\Ol0Tb0ZO`]On0^b0VOZ]On0fb0UOP]OS1ob0oNf\\\\OZ1[c0gN]\\\\O_1cc0cNY\\\\O_1gc0cNU\\\\O^1mc0cNP\\\\O]1Rd0fNi[O[1Xd0jNa[OV1ad0mNY[OT1jd0oNoZOQ1Te09hZO]N_e0V1V[OZNQe0_1V2F:E=F7I8J7I7I;A]YU7\"}], [{\"size\": [848, 480], \"counts\": \"Rh0^2Sh0O1O2N1O2N1O2N1O2N1O2N1O2N1O1O1O1O1O2N2N2N2N1O2N2N1O1O2N2N1O2N1O2N2N1O2N1O1O2N2N2N1O1O2N2N1O2N2N2N1OR^R;\"}, {\"size\": [848, 480], \"counts\": \"_Q\\\\1>Qj02N2O1O0O2O0N5K2YOg0H8O10001O0000000001O00000O1O1O101O0O1000001N1001O00000010O01O0000001OO101O0001O0001O0O1000001O0001O001O10O01O1O00100O0001O01O01O001O00010O00001O1N10000000000O1O1O1L4J5L6I6H8I8Kge6L]ZI9I3L4M2O1N2002N8Gjog0OSPXO<D`0fVOiNah0l1H1O10001O0001O00000010O001O0000100O00001O0001O000001O00010O000010O000001O00000010O0001O00001O01O01O00010O0001O0001O000010O01O00001O0000001O000001O0000001N101O0000001O000000001N1000000O101N100O1N3D^WOaNih0X1<B=H;CjZ8a0adG`0G8_O`0J6N2N3N1000001O0000010O00001O0001O01O00001O000010O00000001O01O000001O0010O0000000010O00000001N100N2J6I7M4L3N2O1O101O00000000001O000000000O101O0000001O00000O10001O0000000O10001O0000000O101O000000000O2O0000001N100000001O0O1000001O00000O10001O000000001N2O0000001O0O2O000O1000001O00001O0O100000001N1000000000001OO1000O1000000000oI\"}, {\"size\": [848, 480], \"counts\": \"b6j1fh000000000O1000000000001O00000000000000O1000O101O0O3N2N2M>C:Eced02[Z[O6[VOTO[i0X1I6J2M2O1O00O10000000000000000O10O1000O1000000000000000000O01000000000000000O100000O0100000000000000000000O01000000000O10O10O100WOUWOMkh02VWONih02YWOMgh03YWOMgh03ZWOLfh03[WOMdh04]WOKch05]WOKch04^WOKch04^WOLbh03_WOMah01aWOO_h0OcWO1]h0NeWO1[h0MgWO3Yh0HkWO8Vh0DnWO<Rh0@SXO?oh00O001O2K3N3N2N2N2N2M2O2N2M3N1O2N2O0100001O0000O10001[OPWOHPi05UWOIlh00\\\\WONih0G^WO8]i0O101O1OO010N1O2N2O100000000001O0O1001OO10O10O0100O1N2M3M3M3N2O1O100000000000O2O0O10001O0000001O00001O000O101O0O101O000O101O01O01O00000O2O000O2O0O101O001O00001O0000001O0O1N2O2N2O0Oone5\"}, {\"size\": [848, 480], \"counts\": \"ia]2?mi0:E7E<E:B=D=F9I7J5L5M3M2O2N1N3N1O2M2N201N1O100O2O000O20O001O101N1_LdYOl2^f0lLjYOR3kf0O3M1O001O001O000000001O000dNfXOBZg0:lXODUg09oXOEQg09SYOEmf09VYOFjf08YYOGhf06[YOIef06]YOIcf05`YOJ`f05bYOJ^f04dYOL]f02eYOL\\\\f02fYONZf01gYOOYf00iYOOWf00jYO0Vf0OkYO0Wf0NjYO2Vf0MjYO4Wf0JjYO6Vf0IkYO6Vf0JjYO6Wf0HiYO9Wf0GiYO9Wf0GiYO8Xf0GiYO9Xf0FgYO;Zf0CgYO<[f0CdYO=^f0BaYO>af0A_YO>cf0@]YO?hf0]OXYOb0]h0L3N3M3K]ai7\"}, {\"size\": [848, 480], \"counts\": \"\\\\8e0ki000O100000O100O1000O2O0000000000000000000O010000O10O10000000001N1000001O7Hga`0L\\\\^_O<E2N1000O100000O10O1000O1000O100000O1000O10000000O010000000000000000O100000O100000O10000000000000000O10O1000000O10O1000O100000O1000O100000O100000O10O100000000000O10O1000000000O1000O10O100000O10O1000000000O1000000O1000O1000O10O1000000O10O10001O00O1000O10000000O100000O1000O1001N1000O1000000000O1000O100O01000000O1000000000O010000000O100O10O100000001N0100000O1000O1O100000O1000000O100000O100O100O0100000000O10O1000000000O1000000000O010000O1000000O1000O1000000000O1000000000O100000O101O001O1O002M4MUQ_4\"}, {\"size\": [848, 480], \"counts\": \"So_6Q1fh0j0XOh0WOi0\\\\Oc0[Oe0M3000000000001O00000000O1000000O100000000O1O1N2O1M3M3K5G9D<D<^Ok0SOkUn4\"}, {\"size\": [848, 480], \"counts\": \"UUR35Uj0:H5L3N3M3M3N2N3M3M4L6J2N101N2O1N4M1O0O100O1O101O00000001N10000O1O101N01000O11N11M2O1O1J\\\\WO`Ndh0`1]WO^Ndh0a1]WO_Ndh0`1\\\\WOaNch0^1^WObNbh0^1^WObNch0\\\\1^WOcNch0]1]WOcNch0\\\\19O2O10OK6O1M3M4M2O2N3J8Gi`e7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"lSe42[j07K4M3VYON]MEjd0a0\\\\]OV1Yb0nNo\\\\O]OYNi1gd0lNk\\\\OAXNg1ld0lNh\\\\Of1Xc0[Nf\\\\Of1Zc0[Nc\\\\Og1]c0[N_\\\\Of1cc0`NU\\\\Oa1kc0aNR\\\\O`1oc0cNk[O^1Wd0gNb[OZ1_d0kNZ[OT1id0POQ[Oo0Se0S25oMR[OWNUe0c1T[OoMYe0h1n1G9B=G<G6J:BfoQ7\"}], [{\"size\": [848, 480], \"counts\": \"Qh0_2Rh0O1O1O2N1O1O2N1O1O2N1O2N1O2N1O2N1O2N1O2N1O2N1O2N1O2N2N1O2N2N1O2N1O1O2N1O2N1O2N1O2N1O2N1O2N2N1O2N1O1O2N1O1Obno:\"}, {\"size\": [848, 480], \"counts\": \"Vl\\\\13Zj0:H3N1O0O2O0VVO^Oei0g0O1M3TOl0L4O100010O000001O0000O2O0O1O1O101N1O1000001N1001O000000100O0000000001O0001O0000O101O0001O000001O01O00100O1O1O002N010O0001O001O1O00010O00001O00001N10O11O0000000M3N2L4I6M4J6J6J8Ihe6O\\\\ZI3K4M4M3N1001O2NTPh0^OSPXOg0@a0_Ob0@4M101O001O0001O0001O000010O00010O0001O0001O01O000010O000000010O000001O01O0001O00001O00010O001O001O01O01OO20O00001O0001O0001O00000010O00000000001O0000000000001O0000001O00000O101O000O10001O000O1O2H7H9G8Aa0D;G_`7?j^Ha0C<D=I6J7N1O101O000O2O010O00001O00000010O0001O01O01O0000001O01O0001O0001O01O000000010O000000010O000000N2E<K4M3M3M300O2O000000001O000000000O2O00000000001O000000001N10000000001O0O100000001O000O10001O0000001N10000000001O0O1000001O00000O1000001O000000000O2O1O1O00001O0O1000001O000O1000001O000O10001O00000O2O0000000O1000000000000O10jI\"}, {\"size\": [848, 480], \"counts\": \"h6h1hh000O10000000O010000O1000000001O00O10000000O1O10O10001O2M4M8G8H=CRkc0DXU\\\\Od0_O<C:G2N1O1O00000O101O00O100000000000O010000000000000000O1000000000000000O10000000O10000O10O10000000000000O10000O010000000O1000000YOSWOKmh02XWOLhh03YWOMfh02\\\\WONdh03\\\\WOKeh05[WOKeh05\\\\WOJdh05]WOKch04^WOLbh03_WOMah03_WOMah02`WOMah02`WON`h00bWO0^h0MeWO3[h0JhWO6Yh0CnWO;Si010000O1O1M3N2N2N1N3N2M3M2O2M3N2M3N1O2O1001O001O00000YOUWOHmh06UWOIkh05YWOIhh01^WONbi001N100000000O10O1M3O2N1O1000O2O00000000000O100O01O1O1O1N2N2K5L4O10000001O000O100O2O000000001O00001O000O2O00001N10000O2O0000010O00001O000O10001N100O2O001O001O001O0O2O000O101O0O1O103M000000gdb5\"}, {\"size\": [848, 480], \"counts\": \"^fo2c0ei0<E9G9E;D<I7I6L5K4M3M4K4L6L2L4M3M4N1M3M3N2N2N1O2N1O2N1O2N101N1O100O2N1O100000000O1000000001eKbZOb3^e0\\\\LdZOd3]e0YLgZOe3Ze0XLjZOh1EG\\\\f05jYOHVf06nYOHSf04RZOJoe04TZOJme03XZOIie05ZZOJge04\\\\ZOJde04^ZOLbe03`ZOLae02bZOL^e03cZOM^e00eZOO[e00gZONZe01hZONYe00iZOOWe00lZOMUe02nZOKTe03oZOKQe04Q[OJPe06R[OGPe07R[OGod08S[OFod09R[OEPe09e2O0O2O1O0O2O1O0O2O2LQYX7\"}, {\"size\": [848, 480], \"counts\": \"_8f0ji00000000O01000O0100000000O100000000000O0101O000000000O0100000000000O101O3M:CVg?7dX@5L3L200O1000O100000O1000000000O10O100000000000O1000000000000O1000O100000O1000O1000O1000O100000O100000O1000O100000O100000O10O100001OO100000000000O100000O01000O10000O11O0O100000O10O1000O10000000O0100O1000O100000000000000O010000000000O1000O011O0O10000000000O10O100000O10O10000000O1000000000000000O01000O10O100000000O1000O10000000O1000O100O10O1000001O0O10O1000000O01000O10000000O1000O1000000O10000O100000000O0100O10000O100O01000000000O100000O100000O100000000000O10O10000000000000O10O1001OO2O001O1N101N3N1N2NSg[4\"}, {\"size\": [848, 480], \"counts\": \"Wj`6=_i0i0QOk0[Oe0VOi0VOj0^Ob0000001O00001O0000000000O1000000000000O100O1N2O1N2M3M3K5B>H8ZOf0_Oa0^ORal4\"}, {\"size\": [848, 480], \"counts\": \"nPT46Vj0:G6J4M3M3N2M4N2M3L3N2O0O2N6J2O1N10001N101N2O1O0000001OO100001O00EfWO`NYh0`1iWO^NXh0b1<N1O100O2O00001N100O2O000O2O00O10O2O2M1O2N2O1N102M2O2M3L6I6G\\\\jb6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"^cg48Wj04SYO5WMMid00h]O[1Tb0hNh]O[1Wb0hNd]OZ1[b0lN]]OX1bb0lNP]O^1Pc0eNe\\\\Oc1[c0^Na\\\\Od1`c0]N]\\\\Oe1dc0\\\\NY\\\\Oe1gc0\\\\NW\\\\Oe1jc0eNj[O[1Xd0hNb[OY1`d0mNX[OS1jd0QOnZOo0Ve06S[OUNTe0d1X[OjMRO_OPf0a2n1F=^O`0G;G8H8HRUQ7\"}], [{\"size\": [848, 480], \"counts\": \"Yh0W2Zh0O2N2N1O2N1O2N1O1O2N2N2N1O2N1O2N1O2N1O2N1O2N1O2N1O2N1O2N2N1O2N1O2N1O2N1O2N1O2N1O2N1O2N2N1ObbV;\"}, {\"size\": [848, 480], \"counts\": \"Yl\\\\17Wj07K1O0O2O1N2N2M3F9[Oe0M4N110O0000000010O000O1O1O10000O2O000O11O0001O00000000010O0000001O0000000000001O00000001O01O0001O00100O1O001O1O1O01O00100O00001O000010O000001N2O0000000000O0100M3K5K5J6K5J6K7Jge6JaZI5I5M2N3L4N11O6J7HYUg0NbjXOa0C`0Ab0_O3N10001O000010O000001O0000010O000010O000001O01O01O00001O01O01O000010O000001O0000010O00001O001O01O01O00010O0001O000001O01O0001O0001O01O00000001O0000000000001O000000001N100000001O000O1000000O2O0M4C<J7C<C^[8HjdG`0]Oa0C=D;L5L3N2N30O01O0000001O01O01O0000001O01O000001O01O01O000010O000001O01O0001O000000010O00000001O0O1N2L4K6I6M3M3O101N100000001O00000000001O000O100000001O000000000O2O00000000000O101O00000O10001O000000001N1000001O001O0O101O00000O1000000000001O00000O101O001O001N10001O001O000O1000001O0000001N100000001O0O1000000000000O100000O100001OdI\"}, {\"size\": [848, 480], \"counts\": \"l6h1hh0000000O1000000O1000000000000O1000001OO100000O10001O1N2O7H<D<Aced0;UZ[O;E<E2N1N10000000000000000000000O0100000000000000O011O00O100000000000O10000000O1000O10000000O10000000000000O010000000O100000O0100WOUWOMkh02VWONjh01XWONhh02XWONhh01ZWONfh02[WOMeh03[WOMeh03\\\\WOLdh03]WOMch03]WOMch02^WOMch02^WONbh00`WO0`h0NbWO1_h0NbWO2_h0KcWO5]h0GgWO9Yh0DjWO;Vi0000O1O1N2N2M3M3N2N2N2M3N1N3N2N1O2N2O100001O001O000[OQWOIPi04SWOKmh02WWOLkh00ZWONhh0I`WO6]i001O000O1000O1N102N1N2O1001N10001O0O1000000O0100O1O002L3N2M3L3O201O0000O2O00000O101O0000001O0000001O000O2O00001O0O101N1000001O01OO101O00001N100O2O00000O2O1O00001O000O2O00001N100O2O0O1000T_c5\"}, {\"size\": [848, 480], \"counts\": \"VX`3<oi07L3M3L5K4L4L4L4K5L4L4M3M3M3K5L4L4M3L4L4M3N1N3M3M3M3M2M4M3M2O2N1N3N1O2N2N1O2O0O2N101N2N1O10000O2O000OO2L4J6M3L4L4J5J7H9C<M3L3N3O1N3N1O101N1O2M5L<E3L2O002M2N2N2O2M1O101O1N2O1N2O1O1O0O2O1O1N2O1O001O1O2N1O1OhVOE\\\\h0:aWOK^h04[WO4gh0i02N1N2N2N3L4M3I`fo5\"}, {\"size\": [848, 480], \"counts\": \"b8g0ii00000000000O1000O1000000000O1000000000O10000000O100000O1001O1N10001O1O005Jml>E\\\\SA8J7I2M110000000O10O100000000000O10O10O10000000000O0100000O0100000000000O10O100000000O10O1000O10000000000000O10O100000O100000O10O100001OO01000000000O10O1000000000O010000000000O010000000000000O100000O100O11O000O100000000000O10O10000000O010000000000O10O100000O10O1000000O01000O10000000O10000000000000000O0100O1000O10000O10000000000O10O10000O1000O1000000000000O01000000O100000O010000000O100000O1000O10O1000O100000000O01000000000O1000O1000O1000000000000O10000000O1000000000000O10O100000000O101O1O1O2N1N3MmP_4\"}, {\"size\": [848, 480], \"counts\": \"ko_6a0Wi0k0VOh0[Oe0[Od0ZOf0XOh0J7O0000000000001O000000O1000000O1000000O1O1O1O1N2M3K5J6A?D<D<^Ob0D\\\\[m4\"}, {\"size\": [848, 480], \"counts\": \"f^X59Rj07K5L4L3M5K4M3M4L3M3M2N2O1N101N2O0O101O0O10O100O100O1O100N2O100O1O1O100O100000001N10001O0O101O0O2O0O2O0O2N2O1N2O1N2O2L4M3K6ITl`5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Vif42[j06UYO1XM1ed01i]O[1Sb0fNU]OETNi1fd0dNR]OISNf1jd0gNo\\\\OEQNg1nd0lNl\\\\Oc1Sc0aNf\\\\Ob1Zc0`Na\\\\Oc1`c0^N\\\\\\\\Oc1ec0^NX\\\\Od1hc0^NU\\\\Oc1lc0aNn[O_1Sd0hNe[OX1]d0lN][OS1fd0SOP[On0Te05T[OYNRe0c1W[OjMXe0P2i1H;^Oc0D9I7H9G8@QUQ7\"}], [{\"size\": [848, 480], \"counts\": \"Ri0^1Si0O2N1O2N1O1O2N1O2N1O2N1O1O2N2N1O2N2N1O2N1O2N1O2N2N1O1O2N1O1ORPc;\"}, {\"size\": [848, 480], \"counts\": \"n\\\\Z16Zj06I3N1N101N2O0M4@`0_Oa0M201O00001O01O01O000000O101M2O1O10000O1O20O00000010O01O0010O000000001O000000000000001O00000010O001O00101N2N000000010O01O00001O010O001O00001O0O101O00000000000N2N2M2K6J6K6I6J9Fke6MYZI9J4L3M4N1O2O000<CUUg07bjXO:Dk0WO6K201N11O1O000001O001O01O001O0001O00010O0000001O01O01O01O01O000010O000001O0001O01O0000001O010O001O00010O0010O0001O0001O01O00000010O0001O0000000001O00000O10001O01O0001N100000001N100000001O0O1N3M2G9I8B=E>Bn`71h^He0A?E:G:G8M3O2O0O101O00001O00001O00010O00000010O0001O0000010O00001O000010O00000001O01O000010O0000000000N3H7K5L4L4N3N1O101O00000O1010O000000O101O00000000001O0O1000001O0000000O10000000001O000O101O000000001N100000001O0O10001O0000000O10001O0000000O10001O001O0O2O001O0000000O2O0000001O0O101O0000000O2O00000000000O1000000000000O10000000000O101O00\\\\I\"}, {\"size\": [848, 480], \"counts\": \"R7g1ih00000O10001OO10000000000000000O1000O1000001N1O4M3M;E<Bged0FaZ[Oi0ZO9H5K1O001N10000000000000000O1000O1000000000000O1000000000O10000000O10000000000O10000000O100000O100001N10O100000000O10000000O0100WOTWONlh00XWONhh02YWOMgh02ZWONfh02ZWONfh01[WOOeh01\\\\WONdh02\\\\WONch02^WONbh01`WOMah02_WOOah00`WO0`h0OaWO1_h0McWO2^h0JgWO5Yh0IiWO7Vh0FnWO9Ui00O10000N2N1M5M2N2N1O2M3N2N2N2M3N1O2O1O1O11O00001N10000[ORWOHoh04UWOKkh00]WOMeh0LaWO3^i001N1000O01000N2N2N2N2O11O2N00001O000O10O10O10O011N1O1N2L4M3L4O100000O1000001N100000001O01OO10001O00001O0O101O000O2O001O0000001O0O10001O00001N10001O000O2O001O0O110O0O101N2O001NnRj5\"}, {\"size\": [848, 480], \"counts\": \"fbh31Zj09J4K4L5L4K4M4L3M3M3M4L3M3L5J6L3M3L4M3I7M3N2N2N1N3M3L4L4N1M3O2M2N2M4M2O2M200O1O1O2M2O1O1O1O1O100O1O010O10A?L4L3N3N1O2O1F:B>J6L4M4N1O1N2O1O2N1O1N4M2O6I2N2N3M101N2O1N2O1N2O1N101N101O0O2O1O1N2O1O0O3N1O1O2NoVOEng0:oWOKPh04kWO1Wh0MhWO4Yh0LdWO5_h0IWWO`0lh0_ORWOa0Pi0_OnVOa0Ti0<3L5K5K9^Omaf5\"}, {\"size\": [848, 480], \"counts\": \"i8f0ji000O0100000000000O10000000000000000000000O010000000000001N2O1O1N6K3L3NQR>=amA1O1O10O010000O10000000000O010000000000O010000000O1000000O1000O1000O10000000000O1000O1000000000O100000000000000000O01000O100000O1000000000000O1000O100O100000000O0100000O10O1000000000O1000O100000O1000O1000000000000O1000O100000O100000O0100000000O1000O10000000O100000O10000O1000O10001O0000O1000O10000000O1000O100000000000000O100000O1000O1000O10000O10O100000000O10000000O1000O10O1000000O10O10000000O1000O0100O0100O10000O1001O00O10O1000000000O1000000000000000O010000000000000O10O10000000001O0O2O1O001N3N3JW`a4\"}, {\"size\": [848, 480], \"counts\": \"W`]6n0Qi0c0ROm0ZOe0YOg0B?]Ob0J6N2O1O1000001O00000O100000O100O10000O100O1O1N3M2L5I6G9H9@`0A`0@a0Ab0WN^WOe0cho4\"}, {\"size\": [848, 480], \"counts\": \"Zca54Wj09I7J4K5M3L5K5L3M2N1O2O0O2O0O2N10001O0O2O00O100O1O001O1O1O1O1O100O1O2N100O100O2O00000O2O1O0O2O0O2N2O1O0O2O1N2O1N3L5J7IoVZ5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"f^d45Si0]1ZLfNg]O`1Vb0dNf]O_1Xb0dNc]O`1\\\\b0dNn\\\\OGoMi1Re0bNl\\\\On1Tc0UNg\\\\Om1Yc0ZN_\\\\Og1ac0]NY\\\\Oe1gc0_NT\\\\Oa1mc0cNn[O^1Rd0fNh[O[1Yd0lN^[OV1cd0nNW[OQ1kd0TOnZOnN4c0Re0_1[[OPNod0k1a[OYMPe0b2b1I8E:Ma0^O=B9Dh^T7\"}], [{\"size\": [848, 480], \"counts\": \"ci0m0di0O2N2N1O2N1O2N1O1O3M2N1O2N1O1O2N2Nbhm;\"}, {\"size\": [848, 480], \"counts\": \"gmW1:Uj02N2O1O1O1N2M3M2]Oc0E<M2O2O01O01O000000O2O0O100O100O2O000O1000001O0001O000010O00000001O0001O000000001O000001O000001O0001O1O100O1O1O1O010O0001O010O1O00001O00001O0000000000001N100O1N2M3K5J6I7J6K6JV`7Nn_H4K5N2L4O0005Jnog0NooWO=El0UO5M1O10001O01O01O0001O0001O00010O000001O01O0000100O00001O01O000000010O000001O010O00001O001O01O01O001O01O01O0001O01O01O0000000001O010O000000001O0001O000000001O0000000O2O00001O0000001O0O1000001N1L4C=H9C>CQ[86mdG9_O`0C=E:K6N2N1O10001O00000010O0001O0000010O0000001O010O00001O01O0001O00000010O0001O0001O0000010O000O1O1K5J6L5K4M3O1O1000001O00000000001O0000001N10000000001O00000O1000001O0000000O2O000000000O2O00000000001N1000001O00000O101O00000O2O000000000O2O000000001O1N2O001O0000000O101O00000O10001O000O2O0000001O000O100000000000000000O10O100000001O0O100000001O00RI\"}, {\"size\": [848, 480], \"counts\": \"Z7f1jh0000000000000000000O100000000000001N101O0O5Kf0XOmed0_O_Z[Og0@=D9H2L100000000000000O10000000O1000000000000000O01001O00O10000000000O10000000O1000O1000000000O100000O100000O1000O100000000O10000XORWONnh01TWONlh01VWONjh01XWONgh03YWOMgh03ZWOLfh04[WOKeh04\\\\WOLdh03]WOMch02^WONbh02^WONbh01_WONbh00aWOO_h0OcWO1]h0NdWO2]h0JfWO6Zh0GiWO8Yh0CkWO=Si0100O1O0O2N2N2M3N2M3N2N2M3N1O2N2N101O1000000000000000[OSWOGnh05VWOJkh00[WONei0O1O001OO01000O1O1O1O1O1O100001O000000000O010O1000O1N2O1M3N2M3N2N2O100000O2O0000001N1000001O000000001O000O2O00000O2O0000001O0000001O0000001N101O0O2O000O2O00001O001O001N100O101N100O2O1O1OcRj5\"}, {\"size\": [848, 480], \"counts\": \"lXe38Vj04J6K4M4L3M4M2M3M4M2M3M3M3N2N2M2N3M3L4M3M3M3N1N3M2M3N3L4M2N2O1N3M2O2L3M4M2M3M5L3N1M3N3N1N2O1O1N2O1O1O1O1O1O100O010000O0100000O10000O100N3J5G9ZNnYOgNZf0T1VZO[Noe0c1a1N2M3N2N2M2O2N2M3M3N2N101N2N1O2N2O0O2N2O1N2N2O0O2N2O1O1N2N3N001N3N3L[kn5\"}, {\"size\": [848, 480], \"counts\": \"o8g0ii000O10000000000000O10000000O100000000000001N10001O00001O0O8Gkl>KZSA;F3L10100O1000O1000O100000000000O01000000000O1000O10000000O100000000O010000O100000O010000000O1000000000O1000O1000O100000000000000O010000000000000000O1000O1000O100000O10O1000000O010000000000000O10O1000000000O100000000000O1000O10000000O10O100000001OO10O1000000000O10O10O10000000O1000000000O10O10000000O1000O1000000000O1000O100000000O0100O10000000O10001O0O10O1000000O1000O010000000O1000O1000000O1000000O10O10000O010000000O1000000000000O100000000O1000O1000O10000000000000000000000000000O2O001O1O001N4M2Llid4\"}, {\"size\": [848, 480], \"counts\": \"cVZ6l0Pi0e0WOi0ZOe0TOl0D<B>G9N2O1O101O000000000O100000O10000000000O1O1N3N1N2K6K4E<G8C>_Oc0\\\\Oe0XO[TS5\"}, {\"size\": [848, 480], \"counts\": \"c_X5>ni06K6L2M3M4M2N2N2O1N2N3M2O1N2O1O0O2O1O0O10001O0000O100O010N2O1N2N2O1O1O2N100O100O2N101N1O101N1N2O2N2N2N2N3M3M2M4M3Mcod5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"oTa43Zi0`0lVO0gh0Q1aL`Nh]Oe1Ub0_NR]OOQNe1jd0cNP]OKPNe1Pe0fNiZO^Ol1_2Zc0\\\\N`\\\\Of1`c0`NX\\\\Ob1hc0`NU\\\\Oa1kc0aNR\\\\O`1nc0cNm[O_1Sd0eNh[OZ1Zd0lN_[OT1bd0ROW[Om0kd0YOmZOf0We0;V[OQNPe0i1^[O`MPe0[2f1D<I7K5M3L4ROZWOLlh0No0M3N1O2N3LkiR7\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"a^U1<Sj02N2O1O0O2O0N3K5XOh0J6N1O10000001O01OO10000O2O0O1O100O2O0000000000001O01O00100O00000001O000001O000001O00000000001O01O001O100O1O001O001O010O01O1O001O01O01O00001N10001O000000000O1N2L4M3J6L4I8K4J7Jge6N\\\\ZI6J5M3L4N1N21O6JaUg0H_jXO?E>hVOjN_h0i1K2M2O2O01O00010O0000010O0001O0001O01O0000010O000010O00010O00010O000001O0000010O0000001O010O00001O00010O000010O000001O0001O01O000001O01O0001O00000000000000001O001O0000001O000O10001O0000001N1N2K6G8D=EgU9CcjF`0]O`0B?G8L5M3O0O101O00001O000010O000001O01O0001O0001O0001O001O01O0001O0000010O00001O0001O0001O0000O2O0M3J6K5K6L3N200O101O000000001O0000000000001N1000001O00000000001O000000000O2O000000001N100000001O0O100000001O000O101O0O10001O00000000000O101O0000001N101O1O0000001O0O1000001O0000001N10000000001O0O2O00000000000O10000000O100000O101O00000O10001O00000000000O1000gH\"}, {\"size\": [848, 480], \"counts\": \"e7f1jh00000000000O10O100000O0100002N2N0O2O1N2cNXWO3Jc0Rj0Ahjc0>iT\\\\Ob0_O8J0N2O001N100000000000O01000000000O1000000000O01000000000000000000000O1000O100000000O1000O100000000000000000O100000O1000O1000000WOVWOLjh03WWOMih03XWOLhh04XWOLhh03YWOMgh03YWOMgh02ZWOMgh03ZWOLfh03[WOMeh02\\\\WONdh02\\\\WONdh01]WOOch0O_WO1ah0MaWO2`h0LcWO3^h0EiWO;Vi0O010000O100O1L4N2M3N2N1O2M3N2M3N2N2O0O2N200100O00001N1[OQWOIoh04UWOKkh01ZWONjh0F_WO9]i0O1O00000O100O10N2O1O1O1O1001O00000O1000O100O010O001O1O2L3K6M2N1100000000O10001N10001O01O01O000O101O00001O0O101O0O1O20O00000001O000O2O00001O0O101N11O01O000O2O001O0O101O001N100O2O0O101O0Ojal5\"}, {\"size\": [848, 480], \"counts\": \"l_U38Sj07L4L3L4L4H9L3L4L4L4L3M4J6J6L4L3M4M2M4K5L3M3M4K4N2M4M2L5L3L5L3N3L3N3N1N2O1N3N1O1O1O1O100O100O011O00O100000000000001O101N1\\\\MaZO5`e0GgZO5Ye0HlZO6Ue0HoZO5Qe0JR[O4od0KR[O4nd0JU[O4md0JV[O4kd0IY[O4hd0J[[O4gd0J[[O3gd0K\\\\[O3ed0L][O2ed0L][O2ed0L^[O0dd0O^[ONed0O^[ONdd01^[OMdd01_[OKdd03][OJfd06[[OGhd07[[OAld0=e2N1O2N2N110O0O2O0O2O1N2O1N3M3N3LlXe6\"}, {\"size\": [848, 480], \"counts\": \"[9d0ki0100000000000000O10000O0101O1O000000O010001O1N10002N2M102NX]<6`bC2000000O01000O10000000O01O1O1000000O0100000000O100000O10O100000000000O0100000000000000O10O1000000000O100000O100000O01000000O010000O1000000000O100001O00O0100000000000000000O10O101O00000000O0100000O1000O1000001O00O1000O100000O1000O100000O1O2O00000000O011O00000O010O1000O10O10000O10000000000O10000000O100000O011O000001O000000O010000O100000O010000000O10000000O020N010000000O0100000000O10O10000000O100000O10O0100000O10O1000000000000O010001O00O100000O1000000000O100000O10000000000000001O000O2O1O1N2O1O2L3NaSh4\"}, {\"size\": [848, 480], \"counts\": \"olV6j0Ui0b0]Oc0WOi0UOj0A`0F9_Oa0M3O1O1000000O101O00O100000O10000000O1O1O1N2O2M2L5H8D<G9@`0B`0WOn0VOg]V5\"}, {\"size\": [848, 480], \"counts\": \"hSX4?ni08I4L4M2M4M2M3O1O1N1O2N2O1N2O2N1O2M2O1O1N10001O00000O10O100O1O0N4L2M4N2O1O1N3N100O101N1O1O2O0O1O2N1O2N1O3N1N2N2N2N3M4M6Hikb6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"kd^42f0=Zh0T1_LhN`]O]1]b0kNe\\\\OA^Ni1ld0kN`\\\\ODZNe1Ue0lN[\\\\Og1ec0\\\\NW\\\\Oe1hc0^NU\\\\Oc1jc0`NT\\\\O_1mc0cNQ\\\\O]1oc0eNm[O]1Sd0fNi[OZ1Xd0jNb[OW1_d0nN[[OR1fd0TOS[Ol0od08Y[OTNnd0i1Z[OgMRe0T2g1J7G9J7L3L4L5K6YOWWO]OQi0>QWO^OTi0`0mVO]OXi0`0>N2N11OO2N1O4L4K\\\\YP7\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"o^U1:Uj03N1N2O0O2O1M3K5XOh0J5N2000001O000001O0O10000O2N1O100000000O2O000001O01O01O1O0010O00000000000000001O00000000010O0001O00100O1O001O1O0010O001O01O01O1O0000001O0O2N1K6K4K5M3N2N2N2N2O1O1O002M2O1M4KehW1O[WhN9J4M3M3O001N1O2N101N1O000010N1N21OOZWOROlg0l0SXOXOlg0e0UXO]Olg0a0UXO@jg0?VXODig09XXOIgg06YXOLfg03YXOOgg00ZXO0gg0NYXO3gg0LYXO6fg0IZXO8fg0G[XO:eg0D[XO=eg0B\\\\XO?cg0@]XOa0cg0^O]XOb0dg0^OZXOe0eg0YOZXOj0fg0TO[XOn0dg0ROZXOP1fg0oNZXOR1fg0nNYXOT1fg0jN[XOX1^h00O1O2M2N2M4M2O1O2N1O1M4N101N1O110O00001O00000001O01O000000000001O00000000001O000000000O2O00000000001O0O101N1K5I8G8Ab0CT[8OldG=@?C=C<L4M3O2O1O00001O001O0000010O00001O0001O01O0001O01O00001O01O0001O0000010O000010O0000000000001N1O1J6K5K6L3N2O1O101O00000000001O00000000001N100000001O00000000001O00000O1000001O0O1000001O0O10001O00000O10001O0000001N10000000001O0O1000001N10001O001O1N10001O0000000O2O00000000001O000O2O00000000000O2O000000O11O0O01000000O1001N1000001O00000O101O00000000000000ZH\"}, {\"size\": [848, 480], \"counts\": \"R8g1ih00O02O00000O11O0O0100000O0102N1O1N3N1cNTWOS1ai0Cfed0FcZ[Og0ZO;G1N1N101N1000000000000000O0100000000000O10000000000000O10000000O10000000000O1000O1000000000O10000001OO100000O100000O1O1O100O1O1M3M3M3L4O1M3O1L4O100O1O1O1O1O2O3K4N4K[b]1Md]bN5O2M2L5M2N2N200O010O100O10000N200000000001N10000O2O000O2O0O11O01O0000000O101O000O101O001N110O0000001N101O0O101O000O2O0O2O1O001N1O10lfk5\"}, {\"size\": [848, 480], \"counts\": \"eZo11Zj08I6L2M4M2M4M3M3L3N3M2M4N2M2N3L4K4K6K4L5M3L4L3M4L3M3M4M3L4M2M4L3M3N3I6J7K5L3M3N3L3N2O2M3M2N3O0O2N1O1O2O0O2O000O2O001O000O20O0000001O1O001O00001O0O101O0QM^[O0cd0Mb[OO_d0Od[OO^d0Ne[O1[d0Mi[O0Xd0Mk[O2Wd0Kl[O3Ud0Km[O4Ud0In[O4Td0Jm[O6Ud0Gm[O8Td0Gm[O8Ud0Ek[O<Vd0Cj[O<Xd0Bi[O8_d0Fb[O3ed0K][O0id0MY[ONld01U[OLod02R[OKQe03Q[OKQe04P[OITe05mZOIUe06lZOFYe07iZO@ae0=aZO@ce0>Y2N2O1N2N2M5J^Pd7\"}, {\"size\": [848, 480], \"counts\": \"g9e0ki00000000O1001O0000O100000O101O000000O0101O001N101O1O1N2O2N7Hcb;=o\\\\D3OO010000O10O01000000O100O0100000O1000O10O1000O10000000000O1000O100000O10000000O100000O10O1000O1000000000000000O100O0010O001M2N3K6K^]Q2MibnM1O1N2N2O2N001O1O1O1O1O0O2O1O00000O10N20O10O1000O11O000O10O100000O1000O1000O1000000000000000O10O10000000O10O10O1000O10O1000000000000O0100000000O1000000000O100000000000O100000000000O10O10010O0O2O001N2O0O1O2O4KUSh4\"}, {\"size\": [848, 480], \"counts\": \"RmV6U1gh0e0YOg0ZOf0[Od0B>A`0K4N200O1000000000000O10O10000000000N200O1O1N3M2L4L5B=E<F;_Oa0[Oh0UOPXW5\"}, {\"size\": [848, 480], \"counts\": \"UbX37Tj0:E;I4L4M3K4N3M3M2N3M2N2M4M1N3N101O1O00000O10000000O10O100001N1O2N1O2L3N2N2L4N3N1O1O1O1000001O1N3M2O2M2O00O10O4L2N1N3N2N2N2DTVO0Yj0LPn_7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"ea^41\\\\j0;G5PXO@ge0e0SZO^Oke0g0PZOZOPf0j0kYOWOTf0l0hYOWOWf0k0fYOXOWf0j0fYOZOXf0h0eYOZOZf0i0bYOYO]f0j0`YOVO`f0o0YYOTOff0Q1TYOPOmf0U1kXOlNVg0T23N3I7F:I7K6J6K:iNYWOF[k[7\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Rn\\\\18Uj09J000O2OO1N10O1M2YOg0K60O3N1O1O100O101O0O1O100O2O0O10001N1000001O^WOPOdg0P1[XOQOeg0o0YXOSOgg0m0YXOSOgg0l0YXOUOgg0l0TXOWOmg0i0RXOXOog0h0oWOYOQh0g0nWOZORh0f0nWOYOSh0h0lWOXOTh0h0jWOYOXh0f0_WOCah0=^WODbh0<^WOCch0>[WOAgh0>[WOAeh0;aWOC_h08jWOCWh09PXODPh09V1L3N2N2O2N2M3NmmS2e0ZQlM>eVOnNbh0f1I4O1N20O01O0000001O01O0001O01O01O000001O01O001O01O01O00000010O0000001O01O00001O01O0001O001O00010O0000010O0000010O00100O000000010O0000001O0001O00000000001O000O10001O000000001O0000001O000O1O1M4G8E=_ObU9@ZkF5ZOe0F9F:L5K401O1O00000001O01O1O2O3L5K1O1O00100O0000001O010O00000010O000001O00010O000000010O0000000000N3H7K5L4L4N3N100000001O000000001O000O100000001O000000001O0000001N1000000000001N100000000O2O0000000O2O000000001O0O10000O2O00000000001N10000000002N002M100000001O00000O10001O00000O101O0000000O10001O0000000000000O1000O10000O0101O000O10001O000000nG\"}, {\"size\": [848, 480], \"counts\": \"`8i1gh000O100000000O10000000000001O000000O1000000000001O1O1O8H`0@VPR4ZO_PnK2N2N100O1N2N3L3M3N2O10000001O00000000001O00000010OO101O000000010O001O00001N1001O0001O000O10001O0O100O2O1N100000001N2O0000001O0O100O2N3MPWi5\"}, {\"size\": [848, 480], \"counts\": \"Wn;4Zj04M2M2O2M2N2N3M3N2N2M2O2N1O2M2O2M3M3N1O2N1N3N2N2N1O2M201M2N3N2N1O2N1N3N1O2M3N2N1N3N2M2O2N2N2M2O2N1O2M3N2M2O2N1O2N1O2M2O2N2N1O2N2N1N3N1N2O2M2O1O1N2N2O1O1O2N1O1O1O100O1O1O10O0100O10O010O1O1N2N2O2M3N2G8L5M2YNnYOoNSf0i0YZOQOie0l0\\\\ZOQOfe0k0]ZOQOfe0n0\\\\ZOoNge0o0[ZOPOge0m0\\\\ZOPOfe0n0\\\\ZOQOee0m0]ZOROee0l0\\\\ZOROfe0l0]ZOROde0m0]ZOPOfe0o0[ZOlNje0S1WZOjNle0U1UZOjNme0T1TZOkNme0T1TZOjNne0T1TZOkNme0T1i1N1O1O100O2N1O100O1N3O0O1O1O1O2N100O2N1O1O101N101N1O2O0O2O0O[cT8\"}, {\"size\": [848, 480], \"counts\": \"U:h0hi000000000O10000000O10000000001O1O0O01O1N2O1O4L1O1O1O1N2O2N2Mb^Q5KdanJ101N011O002N1O0O11O0000O2O1O1N1000000O10000000000O011O0O10000000000001O0000000000000000000000000000O1000O100O100O10000O100O1O1O100O2O0O2N2O\\\\Xg4\"}, {\"size\": [848, 480], \"counts\": \"[g\\\\625>Si0l0YOd0XOg0ZOg0_O`0B>D<N3M200O100000001O0000O100000000000O01O1O2M2N2N3K4K6@?F;A?@`0@b0\\\\Oe0mNXio4\"}, {\"size\": [848, 480], \"counts\": \"hZf2:Qj08J5K6K5K4M3M3M3M2N2N2N1O2N10000O2O0O10001O000O100000000000000000O1N2O1N2N2N2O1O2O0N200O10001O0O2O010N101O002N0O3M2O1N2N1O2N2N3M3L4M3N1LoPn7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"bPf4:X2I\\\\Nj0D[O`e09Z\\\\OF\\\\N^1Ue0nN\\\\\\\\OGZN_1Xe0POW\\\\Of1gc0_NT\\\\Ob1lc0aNo[Oa1Qd0`Nn[O`1Qd0dNl[O\\\\1Td0fNh[O\\\\1Xd0fNe[OZ1\\\\d0iN_[OX1cd0kNX[OU1id0QOP[Om0Se0YOeZOf0_e0<kZOTNXe0h1R[OhMYe0S2e1J5F;J7K4J>^Ok]T7\"}], [{\"size\": [848, 480], \"counts\": \"Pj0`0Qj0O001O2N2N1O2N2N3Mb\\\\T<\"}, {\"size\": [848, 480], \"counts\": \"g5m0bi010000000O2O0N200O100000001O0O2O00000000000O3LRke1NnTZN4O10001O0001O0O1000010O0000000000010O0000010O000001O0010O01O001O001O1O10O01O2N1O1O1O100O1O2N2N4M5J4L6J3MO2N2O0010O000001O1O000000001O00000000000O100N2N3J5K5L4J6J7J7Gge61[ZI5K5L4M2N30O2NbUg0H_jXO?Dj0VO5N2N2O00010O00000010O000001O01O01O000010O0000010O0001O010O00000001O01O0000010O001O00000010OO20O000010O000010O0001O01O0001O000001O00000000000001O01O000000001N1000000000001O000000001O0O100N3J5H8H9D<EX[8EQeGa0^O>A?D;L4L5L31O01O001O00001O01O01O00001O01O0001O0000010O0000001O00010O00000010O000001O000001O0000000O2K4J6K5K5N2O1O101O00000000001N1000010N1000000000001O0000000O2O0000001O0O1000000000000O10001O0O1000001O0O10001O00000O2O000000000O10001O000000001N10001O00001N10000000001N1000001O000O2O00001N1000001O00cG\"}, {\"size\": [848, 480], \"counts\": \"P9d1lh00000O1000000O1O1O1O1O1O1O1O1N2N102M2O1O001N2O1O1O2O0O011N1N2O1N2001OO1O1O2L300O10000O2EQVO3Wj0Nm\\\\V26kbiM4N2M3J6H7N2I8N1O0O2O1O10O1000O]OoVOIRi05oVOKQi04QWOKnh05SWOJnh05SWOKmh06RWOJoh05QWOKoh05RWOJnh05SWOKmh03UWOMkh02VWONjh00XWO0ih0J\\\\WO6dh0G_WO9\\\\i0000O1O1N2N2N2N2N2N2N2N1O2N2N2L4N101O1001O001O000O10001XOTWOJPi0DjVO1?:bi000N1000O11N01O1O100O100OO11000O1000O100O2O0N101O1N2N2M3M3O1O11O0O1000000O2O0000001N1000001O001O0O10001O00001O0O101O000000001O000O10001O001O000O2O00001O00001N101O00000O2O1N2O00boV5\"}, {\"size\": [848, 480], \"counts\": \"W=d0ji02M3M4K5L3L5L2O2M3N2N2L4N3M3L3M3N1O0O1M300O010O1O100O1N2O0O2O1OO20O1010OO10001O0kYOaM[d0`2d[ObM[d0]2e[OeMYd0[2f[OiMXd0W2g[OkMWd0U2i[OnMUd0R2k[OoMTd0Q2j[ORNTd0n1k[OUNTd0j1l[OYNRd0h1l[OZNSd0f1l[O\\\\NSd0c1m[O_NRd0`1n[OcNPd0]1o[OeNPd0[1n[OhNRd0W1m[OkNRd0T1n[OnNRd0Q1n[OPOQd0P1o[OROPd0m0P\\\\OTOPd0k0P\\\\OVOPd0i0P\\\\OXOoc0h0P\\\\OZOPd0d0P\\\\O_Ooc0`0Q\\\\OAoc0=Q\\\\OEnc0;R\\\\OGmc07U\\\\OIkc06U\\\\OKkc02W\\\\OOic0NY\\\\O3gc0KZ\\\\O6fc0H[\\\\O9dc0F^\\\\O;ac0C_\\\\O?ac0@_\\\\Oa0ac0^O_\\\\Oc0ac0[O_\\\\Og0ac0XO_\\\\Oi0ac0VO`\\\\Oj0`c0TOb\\\\Ol0^c0TOb\\\\Ol0^c0SOc\\\\On0]c0POe\\\\Oo0\\\\c0oNe\\\\OP1\\\\c0POe\\\\Oo0\\\\c0nNf\\\\OR1[c0kNh\\\\OT1Xc0lNi\\\\OS1Wc0lNj\\\\OS1Wc0lNj\\\\OT1Wc0kNj\\\\OT1Vc0kNk\\\\OU1Uc0jNm\\\\OT1Uc0kNk\\\\OU1Vc0iNl\\\\OU1Uc0kNk\\\\OU1Vc0jNk\\\\OU1Uc0kNk\\\\OU1Vc0iNk\\\\OV1Vc0iNk\\\\OW1Vc0hNj\\\\OX1Wc0fNk\\\\OX1Vc0gNk\\\\OY1Vc0fNi\\\\OZ1Xc0eNi\\\\OZ1Yc0eNg\\\\O[1Yc0eNg\\\\OZ1[c0eNe\\\\OY1^c0fNb\\\\OY1_c0fNb\\\\Og0Qd0YOo[O`0Yd0_Og[O?[d0Ad[O=`d0B`[O;dd0D\\\\[O:gd0EY[O7ld0HU[O3Pe0Kl2O2N1N2Ocf18RYNOmNW10N2O1N3O1N2M3O1N2N2N1O1N3N4K6J^me8\"}, {\"size\": [848, 480], \"counts\": \"fha32^j02N1N2O0O4L4L3N3M1O1N010000O10000O10O100000O10000000001N01000000000000O10O1000O1000O100000000O100000000000O100000O010000O1000O10000000O1000O10000O100000O100000O1000000O01000000O10O10000O010000000000O10O10000000000O100000O10000000O1000O10000000O100000O0100000000000O0100000O10O10O100000O100000000000000O100000000000000O10O10000000000000O1000O1000000000O10010O1O0O101O0O1O2N101N_Wo3\"}, {\"size\": [848, 480], \"counts\": \"aTn6`0Xi0j0\\\\Oc0[Oe0\\\\Oc0ZOf0^Ob0F;M2O1O100000000O1000000000O10000000000N2O1O1N3M2L5I7C=B=@b0^Oe0ZOS1_NYV_4\"}, {\"size\": [848, 480], \"counts\": \"Sgg1?mi0:G6K4L4L5L5K6J4K3O0O2N10000O100O10000O100000O1O100N2O1O1N2N2M3N2O1O1N200N2O100O2O0O101O001O0000001O001N20OO2O1N101N2O1O1N2N2N3L3N3L5KP_m8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"PXX5:Z31[MHSe0=V]On0eb0WOS]On0kb0VO[\\\\O^O^Nb1We0UOT\\\\O^1lc0cNQ\\\\O_1nc0dNo[O]1Qd0fNk[O[1Ud0gNh[OX1Zd0kNa[OW1_d0lN\\\\[OU1fd0nNT[OQ1od0TOkZOj0Xe0[OaZOd0ce0=hZORN\\\\e0j1oZOeM\\\\e0T2d1F;J5M5J8I8Fb0\\\\OW[a6\"}], [{\"size\": [848, 480], \"counts\": \"mg0c2ng0O2N1O2N1O2N1O2N2N2N2N1O2N2N2N2N1O2N1O2N2N1O2N2N1O2N1O2N2N2N1O2N2N2N1O2N2N1O2N3M2N1O2N2N2N1O3MbmT;\"}, {\"size\": [848, 480], \"counts\": \"jT51_j03cUO0Sj0;L7I3M2N00001O10O000000000O110O01O010O2N1O2OO01O2N10O01O1OO1O11O10O00000M3O2M2O1N2O100O1000001O0000000O101O0O2O0BTVO01OR]^15R]bN2N2O1O1N2N1I8VOj0L3O10001N1000O2N1O100O1O10001N1001O000000001O010O001O0000010O00000001O0O100000001O01O001O001O100O001O000010O00001O1O00001O01OO2O0000001O0000000O1O1M3O1J6K5L4J6J8Ig^T1=n`kN<^VOnNPi0f1A5N2O001N11O00001O01O00000010O0000010O00001O01O000010O000001O00010O0000010O0000001O00000010O0001O000001O01O001O01O01O001O0000000001O01O0000000001O000000001O000O11O0000000001N10001N1000000O2M2G9I7I8C>DQ[85bdGc0E;B>G8N2O1O1O2O00001O00001O00010O00001O0000010O00001O01O000001O00000010O000001O01O00000001O0001O00000O1M3J6K6K4M3N2O101O000000000O101O0000000000001O00000O1000001O0000000O2O00000000000O101O00000O100000001O0O1000001O00000000iG\"}, {\"size\": [848, 480], \"counts\": \"]9h1hh000O10000000000O10000000O1000000O10O100000000000000O1000O100000O10000000O1000O10000O1000O3N00O1O10000O01000O100O100O101N8I2M4L4M3L3M3M3M3M4L3M4LXTd12fk[Nd0lUODnh0Q1N1O0000O100000000000000000O0100000000000000O01000000000000O1000O10000000000O100000OZOQWOMoh01UWOMkh03UWOMkh02VWONjh02WWOLjh03WWOMih03WWOLjh04WWOKih04YWOJhh06WWOKhh05YWOKgh04ZWOLfh02\\\\WONdh01^WOMch00`WO0`i00O100O1O1O1N2M3O1O0O2N2M3N2N2N2O1N1N3M20100001O000O101O0[OmVOLUi00RWOLRi0GZWO6ai0O1O0O10O1000000O0O2O1O1O10000000000000O0100O1O1O1O1O1M3L4M3O100000O10O11O00000O101O0000000O2O00000O2O00010N1000000O2O001O00000O2O0000001O00001N1000001O00001N100O100O2O1N100O2N10nZX4\"}, {\"size\": [848, 480], \"counts\": \"kl<71Nbi0V1ZO9K5H7G9J6L5J6J5J7I6J6J7J5J7K4L4M4L3N2M3M4N1N2N2O2M2N2N2O1O2N100O1O1O100O2O000O1O1000000000001N]JZ[O^5ld00O12N1O1O01O000000000000000000001N100001OO^LU[Oa1kd0SNl[Ob1Ud0YNS\\\\Oc1mc0[NX\\\\Ob1hc0\\\\N[\\\\Oc1ec0\\\\N_\\\\Oa1ac0]Nc\\\\Oa1]c0]Nh\\\\Oa1Wc0]Nm\\\\Oa1Sc0^NQ]O_1Pc0_NS]O_1mb0`NU]O_1lb0_NW]O_1jb0_NY]O_1gb0`N\\\\]O^1eb0`N]]O`1bb0^Na]Oa1_b0^Nd]O`1]b0_Ne]O`1Zb0_Ng]Oa1Zb0^Ng]Oa1Yb0^Ni]Oa1Yb0\\\\Ni]Oc1Xb0[Ni]Oc1Zb0\\\\Nf]Ob1]b0\\\\Nd]Oa1ab0\\\\N`]O[1kb0aNW]OZ1Rf0M3N2L4M3M3M2J8I^PX9\"}, {\"size\": [848, 480], \"counts\": \"S;h0hi000000000000O010000000000O0100000O10000000O10000000O100000O2O001OO0O2N2O1N2O1N1O2N2N2O1OO10O2O1O1O1O100O100N2OgV_18Ri`N2M1O00010000000O100O010O100O010O10000O1O0O2O1O1O10O1000O100O01000000O1000O10000000O1000000000O1000O10000000O100000O10000000O100000O100000O1O010000000000O010000000O100000O10O10000000O1000O1000O1000000O10O10000O01000000O0100000000O10O10000000O1000000000O1000O100000000000000O10O1000O100000000O10000000O1000O10000000O10O10O10000000O100000O1000O1000O10000000O10O1000O100000O010000000O01000O10000O0100000O10000000O100000000000000O10000000000O0100000O2O0000000O0100000000000O10000000001O001O1O1N3N0O2O2KgbP3\"}, {\"size\": [848, 480], \"counts\": \"khl7l0Ri0d0YOe0\\\\Oe0VOi0@`0B>K5N3M200O101O000000O100000O1000O10000O1O1O1N2O2L3L5H8C=^Oc0D>ZOh0YOS\\\\a3\"}, {\"size\": [848, 480], \"counts\": \"Tdc17Pj0`0D8K4K6L3M3M3M2N2N3M3M3N1O2N1N100O1000000O10O10000O1O1O1N2N2N2O1O2M2O002N1O1O100O1O2O000O101O00001O1O000O101N1O2O001N2N2N1N3N2N3M2N3L4J9FWmo8\"}, {\"size\": [848, 480], \"counts\": \"o2c1mh000O1001OO100O1O1000000000000O1000000O2O011AoVOZOYi0=jVOAXi0=iVODXi08jVODHOdi06eVOLdi0M^VO0lof;\"}, {\"size\": [848, 480], \"counts\": \"YRV62_32Zc05Z\\\\OV1ab0POT]OW1jb0mNo\\\\OW1Pc0nN^\\\\O_OSNh1_e0nNT\\\\Oa1kc0aNQ\\\\Oa1nc0bNn[O`1Rd0bNl[O]1Ud0eNh[O\\\\1Xd0eNe[O\\\\1\\\\d0gN`[OX1bd0kNY[OU1id0QOoZOm0Ve0WOcZOTO47]e0h1nZOiM\\\\e0R2d1I7I7G;K6K4L8G8G8I8GYQa5\"}], [{\"size\": [848, 480], \"counts\": \"Zd0V6[d0O2N1O1O2N2N1O2N2N2N1O1O2N2N1O2N2N2N2N2N1O2N2N3M1O2N1O2N2N2N2N2N1O2N2N2N1O1O2N2N2N1O2N2N2N1O2N2N2N2N1O2N2N2N1O2N2N2N1O2N2N1O2N2N2N1O2N2N2N2N1O2N2N1O2N2N1O2N2N2N2N2N1O2N1O2N1O2N2N1O2N1O2N1O2N2N2N1O2N2N1O2N2N1O1O2N1O2N2N1O1O2N3M3MS^]9\"}, {\"size\": [848, 480], \"counts\": \"h5l0di00O11O000001O000001OO10010O0000001O00001O00O1001O0000000000001O01O01O0001O0001O0000010OO00101O2N4M0N6Jhl>I_SA4M3M3M2N4M1N3M2N2N1O100O1O1O0000O101O0O10000010OO1O1L5L4N1O2N2N3N4K3N2M[\\\\c12bc\\\\N4L3N2N2N2N2J5G:]Od0L20N2002N1O10O0O1M3L40000N2001O001O1O011N00001O0001O000001OO2O0O1O1000001O0003M0000O11O01O01O000001O000010O01O000000001O001N10000000000O1O1O1N2L4K5M3J6J6K7KTYU1LPgjN5I7M3L3ZWO\\\\O^g0d0]XO^Ofg0f0QXO_Oog0h0eWO]O[h0]1O00001O010O001O000010O0000010O000001O0000000010O0000010O0001O00000010O000001O001O01O0001O00010O000000001O00010O0000000000000001O00000001O01O0O110O000000001O000O100000001O000O100O1O1L4J7I6J7C>Be`72Z_H=_O`0D;F;K4N3M201N1000001O0000001O00001O01O0001O0001O01O0000001O01O01O00000000010O0000001O0001O00000000010O0O1O1J6I7K6L3N200O10SH\"}, {\"size\": [848, 480], \"counts\": \"a9k1eh000O101O000O0100000000000O10000000O10O10000000000000000O10O10O100000000O10O100000O100000000000000O010000000000000O100O1N2M2N3K5L4K5L4K4K6L:EVo^30oPaL3L3L4L5M4K2M2O1O1O10OO3N10000O100000O100O1000000O1000000N20000@aVONai0OdVOM^i0Mofi00fYVO1N101N001M3O1N2O1O1O1O100O1O100N2N10100O1O1O100O010O1O1O1O100O11OO10O10O1001N10001O00001O000O101O000000001N1000000O2O000O101O00001O00001N10001N1000001N10001O0O101N1000001O0O2O0O3N^]Q3\"}, {\"size\": [848, 480], \"counts\": \"fm]1o0Ui0`0F8J5I8I5K6K4L4J6L5J5K5K6K4L4K6J5K5I7L5K4L4M4L3L4M3N3N1N2N3M2O1O1O1N2O1O2O000001O1O2N000000000000O2O00000O10000O1O100O1000000O1000000O100000001O0000dKi\\\\O_1Wc0SN`]Od1`b0XNh]Od1Xb0WNP^Of1Pb0WNT^Oh1la0UNX^Oj1ha0TN\\\\^Ok1da0RN`^Ol1`a0SNb^Ol1^a0QNe^Oo1\\\\a0oMf^OP2Za0oMg^OQ2Za0mMg^OT2Ya0iMi^OW2Xa0gMi^OX2Ya0eMi^O[2Ya0aMi^O_2dd0000O1O1O100O10O1O10OO2M3M3L4J6G:I6VOTWO]OiYU8\"}, {\"size\": [848, 480], \"counts\": \"Z;h0hi0000O1000O100000O10O100000O100000O1000000O11O00O010000000O10O1000000000O010000000000000O0100000O100000O1000O1O1M3M3K6JgdP5M_[oJ3M2N2O1N110O1O1O1O1O1N1O200O100O1000O10O100000000000O1000O10000000O1000000O10000000O1000O2O00O1000O1000O1000O010000000O1000000000000O0100O10000000O10O100000O1000O100000O01000O1000O100000O0100000000O01000000000O10O1000O10O100000000O1000000O100000000O100000000O10000000000O1000000000O10000000000001N101O1O1N3N3LWei1\"}, {\"size\": [848, 480], \"counts\": \"ZlR9:_i0i0XOg0^Oa0QOP1_O`0G9H8G9M3N2O101N100000000000000000O100O100O1O1O1O002M2N2K5L4G:E:A`0_Oa0[Oh0nN[jX2\"}, {\"size\": [848, 480], \"counts\": \"V_e2;Rj06I7J5L3M4K6L3L3N4L4L3N1N2N2O0O2O0O100O100O01000O1000O001O001O1O1O1M3N2N3N1O2N1O2N1O2O00001O01O000001O0O011O10OO2O1N2N2N2O1O2M3M2N3M4L5J6FQRn7\"}, {\"size\": [848, 480], \"counts\": \"g36Sj08M8I4M1N101M3TOTOPXOP1ng0POQXOR1ng0oN`WOM9Z1Uh0oNbWOY1]h0>8G4L2OO01O1O1O002N6J010N1001O01N2Nj0mN^c65e\\\\I5L2O3J8I7K;D6K2N10O00001N1O101OO11O1OO1O100000000000O101O001O001O2M5K;mNcVO5RX_:\"}, {\"size\": [848, 480], \"counts\": \"Vj]7:Uj05K5K3N2M4nWOTOZf0o0cYOTOZf0m0cYO]OUf0e0gYO]OYf0d0eYOBVf0`0fYOBZf0`0cYO^O`f0d0\\\\YO\\\\Off0l0RYOROQg0R1hXOnNZg0R23J7K4I7I9L6J6I7I8H6J7I6If^X4\"}], [{\"size\": [848, 480], \"counts\": \"ja0f8ka0O2N2N1O1O2N2N1O2N1O2N2N2N1O2N2N2N2N1O2N1O2N1O2N2N1O2N2N2N2N1O2N2N2N2N1O2N1O2N2N2N1O2N2N2N2N1O2N2N2N2N1O2N2N2N2N2N2N1O2N1O2N2N2N2N1O2N1O2N2N2N2N2N1O2N2N2N1O2N2N2N2N1O2N2N1O2N2N1O2N2N1O2N2N2N2N1O2N2N2N1O2N2N1O2N1O2N2N1O2N2N2N2N2N1O2N1O2N1O2N2N1O2N2N2N1O2N2N2N2N2N1O2N2N1O2N2N2N1O2N2N1O1O2N2N2N2N1O2N2N1O3M2N1O2N1O2N1O2NeUX8\"}, {\"size\": [848, 480], \"counts\": \"d5d0li0000000000O101O0000001O0000010O00001O0000001O0000001O0000001N100000001O000000001O0000000000000000001O000000001O001O000000001O0000001O00000001O01O01O000000000001O0001OO100000000001N3N1O001O3K7H7HlaR30T^mL5O2N1O1O1O1O1O0000000001O000O100000001O00000O10001O0O1000000O101O00000O101O0O10001O0O101N3N1ObVO2Zi03N2N2N2N1O10001N2O1N101N3N1O0O100O100O10O1M3M3L4L7FTZ80neG7J5M3M3L3002N<\\\\OcUg07VjXOe0[VOVOdh0`1K3O2L3O2O001O00010O0000001O000010O01O000000010O000000010O00001O01O0001O001O0010O0001O000000001O0000010O00010O000000001O0000001O01O0000000000000000010OO02O00001O001O000000000000001O0O100000001O0O100O1N2N3J6H7I7E<Gh`7D`_H`0A;F;D;I8I6M4M201N10000010O0001O001O000000000aH\"}, {\"size\": [848, 480], \"counts\": \"a9h1hh00000000000O10O10000000O1000000000000000O1000O1000000000000O10O100000000000O10000000O1000O1000000000000O10O100000O11OO10O100000O1000O100000O100000O0100O1000O10O104iNUWOL25Pj0ITUT32hPkLIhi0T1[O9I3010O0OO10000000000000O0100000O1000O1000O10000000000000000O1000O10O100000O10O100000O100000O100000O1000O100000OYOTWOLlh03VWOKkh04VWOLjh04VWOLjh03WWOLjh04WWOKih04XWOLhh04XWOLhh04XWOLhh03ZWOKgh05YWOKgh04ZWOLfh03[WOLfh03[WOMeh00^WO0ch0L`WO4`h0IbWO8_h0EcWO;Xi01O1O0O2N3M1O2O1N2N2O1M3M3O1N2N2O001O01000001O00000ZOoVOLSi0NUWO0lh0G]WO7^i00000000000O0001O010O100000000O010000000O1O1O001O1O1N2N2M3L4O10O1000001O000O10001N10001O00001N10001O0000001O0O10001O00000O2O00001O00001O00001O0O10001O0O10001O000O2O001O001N100O20O0TiR2\"}, {\"size\": [848, 480], \"counts\": \"QQU2o0Yi09I7J6K5J6K4K5M4K4M3K6J5H9J5J7K4K5J7J5L4K5N3L3M3M3L4O1N3L3N2N2N2N2N2N2O1N3M2O1O1O1O100O1O1O10001N100O1000001O0O10iKV\\\\Oh1jc0mMh\\\\Ol1Xc0nMQ]OP2mb0mM\\\\]On1db0mMe]Oo1[b0nMi]OQ2Wb0lMo]OQ2Pb0nMT^OQ2ka0nMY^Oo1ga0oM]^Oo1ca0oM`^OP2`a0nMd^OP2\\\\a0oMf^OQ2Ya0mMj^OR2Va0mMk^OS2Ua0kMo^OS2Qa0mMP_OS2Pa0kMR_OT2n`0kMT_OU2k`0jMW_OU2j`0jMV_OV2j`0iMX_OV2h`0iMY_OW2h`0gMY_OY2g`0fM[_OY2e`0gMZ_OZ2g`0dM[_O[2e`0eM[_O[2f`0cM[_O]2e`0bM\\\\_O^2e`0aM[_O_2f`0_MZ_Ob2Yd0100O2O0O1O010O2M2000000O02[Nd1nNX]b7\"}, {\"size\": [848, 480], \"counts\": \"Y;i0gi0000O100000O10O1000O100000000O100000O1000O1000000000O10O10000000000O010000000000000000O010000000000O01000000000O1000O1000000O010000000000O010000O10O10O10000000000O01000002N3M3M2M4L6JRbm2Nd]RM5RVONli0<M3001O00O10O100000000O01000000O100O01000O10000000O1000O100000O1000O10000000O10O1000000000O010000000000O01000000O0100000000O0100000O10O100000O100001N1000O1000O01001OO1000O100000000O10O10000000O1000O100O100000O1000000O10O100000O100000O1000000O01000000000O1000O1000O1000O100000O0100000O10O10000000O1000O10000000000O10O1000000000O1000O10O100000000O10000000O10O100000O10O10O100000O01000000O11O00O010000000000000000O100000000O010000000O100O1000O10000000O10000000O10000O1000000001N2O2N1O0O3M3M3M]lf0\"}, {\"size\": [848, 480], \"counts\": \"`US:=hi0>A=@?@`0E;D<^Ob0A?\\\\Oe0H7O100O100O100000000O100000O100O100O1O1O1O1N2N2M3L4I7I8G9VOi0K6B>D?dN]WOBidW1\"}, {\"size\": [848, 480], \"counts\": \"eUh3:Sj0:F6J6K5K4M3L4L2O2N2M2O1O1O1N2O1O1O00100O010O01O1O001N2N2N2O1O1O100O1O1O2N100O1000001O000010O0000010O0001O1O1O1N101O1O1O0O2O1O1N2N2O0O2M4M2N3M3M3M4K4M_\\\\f6\"}, {\"size\": [848, 480], \"counts\": \"R42^j0OM3LMmUO3Rj0;K3M1K4M30002M01010O00O11N2M1O2O1O2N0010010N01000O1000001O00O1010O0O1O1O11O000000HiNVWOX1jh0iNUWOW1kh0iNTWOX1lh0hNSWOY1mh050000O100001O00000000002N2N001O1N2O2nNmVOa0Vi0ZOYWO3oh0MZ_70ZaH;I:F7J:G6J4L1O001O00O1000000000000000001O00000000O100001O1O1O006J4Kd0UOkT^9\"}, {\"size\": [848, 480], \"counts\": \"SnZ83Ti0^1H4kL\\\\NX]Oh1db0aNU]Oa1ib0fNP]O\\\\1ob0fNb\\\\Oh1]c0\\\\N^\\\\Oe1bc0bNV\\\\O_1jc0eNR\\\\O\\\\1nc0fNP\\\\OY1Qd0iNm[OU1Ud0mNh[OR1Zd0QOc[Om0_d0WO][Oe0gd0^OU[O?od0BoZOoNF4ce0l0gZOkNhf0S1YYOiNlf0V1X1O1O1O3N5J6I6K5J6K4L_jY3\"}], [{\"size\": [848, 480], \"counts\": \"Qa0_9Ra0O001O2N1O2N2N2N2N1O2N2N2N2N2N1O2N1O2N2N2N2N1O2N2N1O2N2N2N1O2N2N1O2N2N2N2N2N1O2N2N2N2N2N1O2N2N2N2N1O2N2N1O2N2N2N2N2N2N2N1O2N2N2N2N2N2N1O2N1O2N2N2N2N1O2N2N1O2N3M2N1O2N2N2N2N1O2N2N2N1O2N2N2N2N1O2N2N2N2N2N1O2N2N1O1O2N2N2N1O2N2N2N2N2N2N1O2N2N1O2N2N2N2N2N2N1O2N2N2N2N2N1O2N2N2N2N1O2N2N1O2N2N2N2N1O3M1O2N2N2N1O2N2N2N2N1O1O2N2N2N2N2N2N1O2N2N2N2Ndlo7\"}, {\"size\": [848, 480], \"counts\": \"Qe2;Tj05L0O20N1001O000000001O00001O000000001O00001O00001O00001N2O00010O00001O0000001O00000O1000000000001O00001O000000000000001O0000001O00001O00000000000000000000010O0001O01O00000000001O001O00000O101O000000001O001OO11O00O1O1N2M4O1N2O2L5K6K6Icof2KSPYM`0I9L4O0O11O0000000000001O0O10000000001O000O10001OPWOXOXh0h0hWOXOXh0h0hWOXOXh0h0hWOXOXh0g0iWOYOWh0g0iWOYOWh0g0hWOZOXh0f0hWOZOXh0f0hWOZOYh0d0hWO\\\\OXh0d0hWO\\\\OXh0d0hWO\\\\OXh0d0iWO[OWh0e0hWO\\\\OYh0c0gWO^OXh0b0hWO^OXh0a0iWO@Vh0`0iWOBVh0>jWOBVh0>jWOCUh0<kWOFUh09kWOISh06nWOKQh05oWOKQh05oWOLPh04PXOLQh02oWOOQh00PXO0Qh0OoWO1Qh0OoWO2Qh0LPXO4Qh0KoWO5Qh0KoWO5Qh0JPXO6Qh0IoWO7Qh0InWO8Sh0FnWO:Rh0FnWO:Sh0EmWO;Sh0DnWO;Rh0EoWO;Qh0DPXO=og0BSXO=mg0DRXO;og0FQXO9og0HPXO6Rh0JnWO4Th0KY10000000[nV19VQiNd0VVOXOkh0Z1L3M4L300O2O0010O000010O00001O0001O01O0001O01O000010O000001O0000010O0000001O000010O0001O000010O0001O00001O01O01O0000010O00001O00000000000001O000000000000000000001O00000000001O0000001O0O1000000O2O0O1O1O1N3K4I7J7F9H:DVf61mYI7C=E:H9D;J6M3N3N100O1eH\"}, {\"size\": [848, 480], \"counts\": \"^9g1ih00O1001O0000O10O1000000000000O10000000O1000000000O100000000000O100000000000O0100000000000000O10O100000000000000O1000O10O10000O100000O1000000000O1000O100000O100000O01N2B=I8K5L5I6M2M5JRlU3OTTjL3L1^Oc0H<J2O001O001O1O1O1O1O1O000O2O00001O001O0000O100000O0100000000O1000O010000000000O100000O100000O10000000000000O10YOSWOJnh06SWOImh06TWOJlh05VWOJjh06VWOJjh06VWOIkh06VWOJjh06VWOJjh05XWOJhh06XWOJhh05YWOKhh02ZWONfh01[WOOfh0O[WO1eh0M]WO2dh0K_WO5ch0F_WO;[i000O01O1M3N2N2N101N2O1N2N2N1O2N2N2O1N2N20O10000000001O0ZORWOJPi0NYWONei001O00000000O100O1N2N1O200000O2O000000000O1000O1O0O2N2N2N2N2M2O20001OO1000001O00000O101O0000001O000O101O00001O0000001O0O101O0000001O0O101O0O110N10001O0O10001O00001N101O001Mjol1\"}, {\"size\": [848, 480], \"counts\": \"gfV2Q1Yi08H9I5K5K4M4K4L4M3M3L5K4M4L3L4J7K4L4G:J5M3L4M3M4L3N2M3N2N3M2O1N2N2N2N3M2O1N2N2O1O1N3N1O1O1O10001N10gKU\\\\Om1jc0RNZ\\\\Ol1ec0SNb\\\\Oi1]c0QNm\\\\Ok1Rc0RNT]Ol1lb0PNZ]On1fb0PN_]Om1`b0RNe]Ol1Yb0RNl]Ol1Tb0RNP^Om1na0RNU^Om1ka0RNW^Om1ha0RNZ^On1fa0QN]^Om1ca0RN_^Om1aa0RNa^Om1_a0SNb^Ol1^a0SNd^Ol1\\\\a0SNf^Om1Ya0RNh^On1Xa0QNi^Oo1Wa0PNj^OP2Va0oMk^OQ2Ua0nMl^OR2Ta0mMm^OS2Ta0kMm^OU2Sa0kMm^OU2Sa0jMn^OU2Ta0iMm^OW2Sa0iMm^OW2Sa0iMl^OX2Ua0fMl^OZ2Ta0eMm^O[2Ta0dMk^O]2Ua0bMl^O^2Ua0`Ml^O`2Ua0^Mk^Oc2ad00O100O1O1O100OjN_XO_O^g0=QYO[Omf0e0XYOXOff0h0_YOTO`f0j0iYOQOTf0n0UZOlNje0R1\\\\ZOkNce0S1l1K6O1O2N3G9I7EQc\\\\7\"}, {\"size\": [848, 480], \"counts\": \"U;i0gi0000000000O1000O100000000000O10O1000000000000000O10O100000000O1000000000O10O100000000000O010000000000O1000O100000O01000000O1000O10000000O100000O1000O10O100000000O10O1<C7Ied^2:P[aM6K3M2O1N2OO1000000O10000O1000001O=C4L2N3M1O00bYk00^fTO2O2M1O1N2O2N0O2O001O1N2O1O1O1O0O10001O0000001N01O100O100000O100000O1000000O010000000000O1000O10000000O100000O1000O100000O10000000O01000000000O0100000000O100000O100000O1000O10000000O10O1000000O10O10000000O01000000O10O10000000O10O10000000O100000000000000O01000000000O10000000000O1000O1000O1000O1000O1000O100000O10O100000O10O1000000O1O1000000000O01000O1000000O10000000000O10000O1001OO01000000000000000O1000O100000000000O100001O0000O1000001N3N1N2O2M101Mbn<\"}, {\"size\": [848, 480], \"counts\": \"gm]:d0`i0=B>E:B?C<D<D<G:_O`0_Oa0L4N3N100O100000O100000O10000000O1O1O1O1N2N2N2K5J7H7H8J6B?D<A?G:Cj0^NoXk0\"}, {\"size\": [848, 480], \"counts\": \"PUR4=ki0;I8H6L4L4M3M2N2M2O1O100O100O100O100O010O10O001O1O1O10OO2N2N101O2N1O1O1O100O100O1100O000010O00010N101O01000O001O1O1N2O1O0O3M2O1O1N2N3M3I:E^\\\\a6\"}, {\"size\": [848, 480], \"counts\": \"g3`0Pj00001O0000O2NN3O2O000000000000KETVO<ki060N2O10O00000HD[VO=di09O1O001O0O01001N2N100O2NO111O00O2O001OO0010000001O010N0002O00O10001O00O10O2O0000001K30020O02N1O00O10000001O1N2N2QOkVO>bW8_OdbH5K2N4L7I3UVO_O`i0T1D2O1O000O101O0O1000000000000000000000000001O001O001O1N5L5lNfVOh0cPU9\"}, {\"size\": [848, 480], \"counts\": \"fkd8a0ci0=[Oe0J5N2nL\\\\Ni\\\\OOkMg1Ze0bN_\\\\OQ2_c0TN\\\\\\\\On1cc0VNY\\\\Ok1fc0WNX\\\\Oi1ic0]NP\\\\Oc1Pd0cNk[O[1Wd0fNg[OX1\\\\d0kNa[OR1bd0QOY[Om0kd0XOoZOd0Ve0@dZOUO1Ede0]1QZOmNWg0Q26K5I7L4L4K6K7J8I7H8F:G9GTRo2\"}], [{\"size\": [848, 480], \"counts\": \"\\\\a0T9^a0N2N1O2N2N2N2N1O2N2N2N2N2N1O2N2N2N2N2N1O2N2N1O3M2N1O2N2N2N2N2N2N2N1O2N2N2N1O2N3M1O2N1O2N2N2N2N2N2N1O2N2N2N2N2N2N1O2N1O2N2N2N2N2N2N1O3M2N1O2N2N2N2N1O2N2N2N2N1O3M1O2N2N2N2N2N2N1O2N2N2N1O2N1O2N2N2N2N2N2N1O2N2N1O2N1O2N2N1O2N2N2N1O2N2N2N2N2N2N1O2N2N2N2N2N1O2N2N2N2N2N2N2N1O2N2N2N2N2N1O2N1O2N2N2N2N2N1O2N2N2N2N2N1O2N1O2N2N2NdUX8\"}, {\"size\": [848, 480], \"counts\": \"]5`0Pj00000001O00001O1O00001O000000000000001O00001O00001O001O000000001O0000001O000000001O00000O10001O0000000000000010O00000000000001O0000001O0O10001O000000000010O001O01O01O01O00001O000O10001O001O0O10001O001O0000O2N1O1N2O1N2N2O1O1000001O1O002N3M5K4J5Lhfd0LRY[O2SVO0ii05SVONji0>N10000000000001O2N9G5KV^Y14dafN5L3N0O2N1O1N3L3L4B>F:N1100O001O2O0O100O1000001O000001O001O01O0000010O0001O0000000000000001O01O0000100O1O1O1O001O000001O000010OO2O00001O00001O001N1000000O1O1N101M3K5L4K6I6L4M4K5K]dS1=lakNDah0\\\\1J4K4M4M200000001O00001O0001O0001O00010O0000010O000010O0001O00010O000000001O01O01O0000001O000010O000001O01O01O00001O0001O0001O000001O0001O0000000000000001O0000000000001O0O1000001O000000001O0O1O10000O1O2I6J6L5G8H9G:G]`78V_H=E;F9H9G8M3N2O2O0O101O0000000eH\"}, {\"size\": [848, 480], \"counts\": \"[9f1jh00O11O0000O100000O10000000O10000000O100000000000O10O1000000000000O1000O1000000000O10000000000000O01000000000000O1000O100000O10000000O10O100000O1000O100000000O10O1000000000O10000000000000O10000000O100000000000O1000O1O1O1O1O1N2O1O001O1O1O100N2O100O1O1O00100O10000O10O10O1O100000000001N100000000000000003L4M2N2N3M2N5I_fa1KdY^N5K4L4L4A?H8O1O10O100000000001O0000O1000000000O100000O10000000000000000O10O100000000000O100000000000O10YOVWOHjh07WWOHjh08VWOHjh07WWOIih07WWOIih06XWOJhh06XWOIih06XWOJhh06XWOJhh05YWOJhh05YWOKgh03[WOMeh02\\\\WONdh0O_WO1bh0JbWO6\\\\i0O1000O1N2M3M3N101O1O1N2N2M2O2N2N2N2N2N2O00100001O0@kVOEUi07QWOGPi06TWOGmh04YWOKhh0N_WO1ai00O0000O100000O0O2O1O001O100000000000O100000O100N2O1O001N2L4M3N20000000O1000001O000000001N100000001O00001O000O2O00001O0O101O00001N1000001O00001N1000001O00001N10001N10000O3N001NY_o1\"}, {\"size\": [848, 480], \"counts\": \"WRl12Uj0>E8H7L4J6L4I7J5O21O0O10O010O010ROXNSYOg1gf0`NYYO_1cf0fN]YOZ1_f0iNbYOW1Zf0lNgYOT1Vf0mNlYOS1Qf0oNPZOQ1le0QOVZOP1ge0QOZZOP1be0RO_ZOn0^e0SOdZOl0Ze0VOgZOj0Ue0YOlZOf0Re0[OP[Oe0md0]OT[Ob0id0_OZ[Oa0cd0@_[Oa0]d0Ad[O?Zd0Ah[O>Vd0Cl[O=Qd0DP\\\\O=nc0DS\\\\O;kc0EX\\\\O;fc0D]\\\\O;bc0E\\\\[OkN3_1_d0F\\\\[OoN5Z1^d0G\\\\[ORO6V1]d0H^[ORO6V1Yd0Ia[OSO6S1Yd0Ib[OVO4Q1Xd0Id[OXO4n0Wd0Ke[OYO3k0Wd0Lg[OYO3j0Ud0Mi[OZO2i0Sd0Ml[O[O1g0Rd0Om[O[O1e0Qd00o[O[O2c0nc03P\\\\O[O2b0mc01T\\\\O]O2>ic05X\\\\O\\\\O1<gc06]\\\\O\\\\OK?gc04`\\\\O]OI>fc05e\\\\OZOF`0ec05i\\\\OYOBa0ec06l\\\\OWO_Ob0dc07P]OUO^Ob0bc08Q]OXO\\\\O`0bc08S]OXO[O?bc08U]OXO[O>`c09W]OYOYO=`c09Y]OZOXO;_c0:[]OZOVO<`c09[]O[OUO;_c0:^]O\\\\OSO9^c0;c]OYOQO9]c0=a]O\\\\ORO6]c0=b]O]ORO5\\\\c0=d]O^OPO5[c0=e]O_OPO3[c0=f]OAoN1[c0>e]OCPON[c0?e]OCQOL[c0`0d]OFQOI[c0a0d]OGPOH\\\\c0`0e]OIoNE]c0a0e]OJnNE]c0a0e]OKmND_c0?e]ONkNC`c0?d]OOlNB`c0?c]O1lN@ac0>c]O3lN_Obc0=b]O5jN_Odc0;b]O7iN_Ofc09a]O9gN_Ohc08`]O;fN^Okc06_]O<dN@mc04_]O<bNBoc02^]O>`NCRd0N^]O`0\\\\NDXd0K[]Od0TNHbd0CZ]Og0nMJhd0_OY]Ol0gMIQe0ZOW]OU2jb0jMU]OW2kb0iMT]OX2mb0gMR]OZ2nb0fMQ]OZ2Qc0eMm\\\\O]2Sc0cMl\\\\O]2Vc0bMh\\\\O_2Yc0aMe\\\\O`2]c0`Ma\\\\O\\\\1aNoNod0F]\\\\O[1iNkNld0IY\\\\O\\\\1oNgNkd0LT\\\\O]1TOeNjd0MP\\\\O]1[OaNhd02l[OV1ce0iN[ZOR1ne0lNQZOh0^f0UObYOe0ff0ZOXYO`0Pg0AkXOa0Xg0^OfXO>`g0A^XO:lh01O0NO02402I_[X7\"}, {\"size\": [848, 480], \"counts\": \"Q;j0fi0000000000O01000000000000O1000O1000000000O1000O1000O10000000O1000O1000000000O10O100000000000O10O10000000O0100000000O10O10000000O10O1000000000O10O10000000000O1000O100000000O100000O2O0000O1O100O1O1N2N2N2M3N2N2N2Md[[2M^ddM5M4N2M4M2N00000O10O010O1O0010N1O2N2O1000000O010000000O100000O1000O10O100000000O10000000O10O1000000O1000000000O10O100000000000O010000000000000O1000O10O10000O01000000000000O01000000000O1000O100000O100000O100000O10000000O10O100000O100001N10O1000O1000O10000O10O1000000O10O10000000O1001OO100000O10O1000O10000000000000O100000000O10O100000O10000000O10O100000O1000O1000O10O1000000000O0100000000O0100000000O10O100000O10000O10O1000O0100000000O1000000000001O00O1000O100000000000000O1001O00O10O10000000000000O10O11O1O001O1N2O1N2O2M2MRSa0\"}, {\"size\": [848, 480], \"counts\": \"\\\\iY::mi0=^O`0C<@?F:E;H8B?@?B>D<L4N3N1000000O01000000O10O1000O100O1N2O1N2M3L4J7H7I8E:D=F:D=H:@o0ZNhVOa0jUP1\"}, {\"size\": [848, 480], \"counts\": \"]Tn3>mi09H8J4L4L5L4L3M3N0O2N2N1O2N1O100O1O1000000O010000O1O1O1N2O1N2O1N20O02N1O1O1O2O0O2O00001O00001O001N110O1O0O100O2O1N102N1N2N2O1M3N3M3L4M3MWWf6\"}, {\"size\": [848, 480], \"counts\": \"Va<=ii0F\\\\VO<ci0DZVO`0ei06O10001N100001ON2O1O1O2M20000000000000000O100000000000O100000000000O2O000O1001O0000O2O0000000000000O10000001O00O10O3Mi0oNoh5O[WJ002M3M5J6L5K:F8G4M00010O00000000000001O0000001O00O010000000001O001N2N6K?^OQaW9\"}, {\"size\": [848, 480], \"counts\": \"faa8`0]i0d0E:H9L3^O[NXXOf1Ue0]Nf\\\\O8kM^1^e0`Ne\\\\On1Zc0\\\\Na\\\\O`1`c0bNY\\\\Oc1fc0eNP\\\\O]1Qd0fNk[OX1Xd0jNe[OT1^d0nN^[OQ1ed0SOU[Ok0od0]OgZO[O@MRf0m0VZOPOTg0R24M3M4J6L4J7J7K8H9G6I;E:EgVS3\"}], [{\"size\": [848, 480], \"counts\": \"[b0U8\\\\b0O2N2N2N2N1O3M2N2N1O2N2N2N2N2N2N2N1O2N2N1O2N2N2N2N2N2N1O2N2N2N2N2N2N1O2N2N2N2N2N2N1O2N2N2N1O2N2N2N1O2N2N2N1O3M1O2N2N2N2N2N1O3M2N2N2N1O3M2N1O2N2N2N1O2N2N2N1O2N3M1O1O2N2N1O2N2N3M1O2N2N2N1O2N2N2N2N2N1O2N1O2N2N2N1O2N2N1O2N2N2N2N3M1O2N2N2N2N2N1O2N1O2N2N2N1O2N2N2N2N2N2N2N2N1O3M2N2N1O2N2NcRg8\"}, {\"size\": [848, 480], \"counts\": \"Z5d0li00000001O00001O1O001O00001O00O11O000000001O00001O00001O00000000001O000O11O000001O0000000000001O0000000000001O000000000000010O00001O01O01O00010O00000000000O2O0000001N10010O000000001OO100O1O1N3L3O001O10001O00001O00001O001O1N3I:HXSX25blgM6N1O1N100O1M3I7C=G9N101O01O100O2O0O100O1000000010O0000001O01O01O00000001O000001O000001O00000001O1O010O001O1O1O1O01O00001O00010O00001O001N1000001N10O11O000N2O1N2K5K5L3L5K7J5K5JcdS10X[lN[1jN5M4L3N2O1O101O001O0001O000001O0001O0001O010O0000010O00010O00001O00001O01O0001O00000010O000001O0000010O00001O01O01O00001O0001O000001O0000000001O0000000000001O0000001O00000000001O0000000O2O000O10000N3M2L4I7J7D;J7E=EPf6<cYI;D:H8H9D;I7N3N2O00001N11O000001O001O0000001O00001O0000000dH\"}, {\"size\": [848, 480], \"counts\": \"X9g1ih0000000O100000O100000O1000000000O100000O10000000000000O0100000000000000O10O1000000000O1000O1000O10000000O10O10000000000O100000O100000O100000000000O10000000O10000000000000000O0100000000000000O11O000O1000O10O1000O1000O10000000000O01000000000000000000000O01N2:E2O4L4K4M3M3L4M2N3L3M7Hdnd18UQ[NP1QO1O1N10001OO10O1000000000000000O010000000000000000000000000O10O10000000000000O100000O10000000O1000000YOQWOMnh03UWOKkh05WWOHjh07WWOIih06XWOIih07WWOIih07XWOHhh08XWOHhh07YWOIgh06YWOKgh05YWOKgh03[WOLfh03[WOMfh0O]WO1fh0I]WO7^i000000O010O1M4L2O2O1O1N2N2M2N3N2N2N1O2N2O1N2001N1000001O0]OPWOFPi08TWOFmh01\\\\WOMfh0N_WO1`i000O100000O10O01O1O1O1N2000000001O00O10O10O100O1O1O1M3M3M201N200000000000000000O101O000000001O0O101O000000001N101O00001N10001O00001O000O101O00001N1000001N1000001O000O2O000OlWZ2\"}, {\"size\": [848, 480], \"counts\": \"nUZ2c0]i0e0E8I7J6J4M4K5M3L4M3K5K5G9ZOlL^YOd3ie0o0J6L3M4L3M3N2N2L5N1O1N2O1O1O10001O01O4L1O1O01O0O11O01N1000000O1000000O`LV\\\\O<jc0\\\\Ob\\\\O`0]c0^Oj\\\\O>Vc0^OS]O=mb0A\\\\]O8cb0Ef]O6Zb0Gk]O7Ub0Gn]O8Rb0DR^O<na0BU^O=ja0BX^O>ha0AY^O?fa0@\\\\^O`0da0]O_^Oc0aa0[Oa^Oe0_a0YOc^Og0]a0XOd^Oh0\\\\a0VOf^Oj0Ya0VOh^Oj0Xa0UOi^Ok0Wa0TOk^Ok0Va0SOk^Om0Ua0ROl^On0Ta0QOl^Oo0Ua0POl^OP1Ua0nNl^OR1Ta0mNm^OR1Ta0nNl^OR1Ua0lNl^OS1Va0kNk^OU1Ua0jNl^OV1Ta0jNl^OV1Ta0hNn^OW1Ta0fNn^OZ1Te000O100O100O0N3L4M3M4K8F]jc7\"}, {\"size\": [848, 480], \"counts\": \"o:j0fi0O01000000000O10O10000000O10000000O100000000O01000000000000O10O100000O100000O1000O10000000O010000000O10O100000000O10O10000000000000000O01000000000000O10000000O01000000000000O10O10000000O100000O1000000000O01000000O1000O100O1N2N2N1N300N2N200O0O200M3N3NZoi10ePVN3N100N2O1J6L4N1O200O100000000000O10O100000O1000000O01000000000O1000O1000000000O10000000O100000O1000000000O1000O100000O1000O10O1000000000O1000O10000000O10O1000000000O100000O10O100000O100000O1000O100000000000O10O10000O0100000000O0100000O10000000000O100000O100000O100000O1000000000O1000000000O10O10000000000O100000O1000O100000O10O100000O1000O10000000O1000O1000O1000O100000O10O10000000O100O100000O010O10000000000O100000000000000O1000000000000O100000000000O100000O11O000000O10O11O001O000O2O1O2M101N3MRfl0\"}, {\"size\": [848, 480], \"counts\": \"Vko9b0`i0a0A=B=D<E;C>B=G9E;C=F:N3N100000000O01000000000O0101O0O1N2O1N1N4K4L4G9I8G8F;D<D=H8De0TO`UZ1\"}, {\"size\": [848, 480], \"counts\": \"]h\\\\39Rj09G8J5L6K3L4M3L4M3M3M4L4L2N2N100O100000O1000000O100O100O1O1O1O1M3N2O1N2O1O1O1O1O100O10001N101O001O001N101N2O0O2O001N2N2O1N2O1N2M4K3N4L4IacW7\"}, {\"size\": [848, 480], \"counts\": \"P3T1^i0N1O00O1001OK5N111O0O1001O000000000000000000O11O00O1001O00O100001OO11O00O1000000000000000000000000000000001O0000000000000O2O1Lom9VOnRF6I7J7H;E5L0O2O00000000000O10000000000001O00000000001O00001O2N3M2M4UObVO=Rj0D^d`9\"}, {\"size\": [848, 480], \"counts\": \"diV81Qj0?SOm0G8M3O1mL[NZ]Of1cb0aNU]Oc1ib0eN`\\\\Ok1`c0[NX\\\\Oh1hc0ZNU\\\\Of1lc0bNk[O^1Ud0fNg[OY1[d0iNb[OS1cd0oNY[Oo0kd0VOnZOg0We0_OaZOVO4Cde0^1oYOmNYg0Q25M2J6M4H9J5N4L6J7I8E:G;E:FPZ\\\\3\"}], [{\"size\": [848, 480], \"counts\": \"lb0d7nb0N2N2N2N1O2N2N1O2N2N2N1O2N2N2N2N1O2N2N2N2N2N1O2N2N2N1O2N2N1O2N2N2N2N2N2N2N1O2N2N2N1O2N2N2N2N1O3M2N1O2N2N2N2N1O2N1O2N2N1O2N2N2N2N2N1O2N2N1O2N2N1O2N2N2N1O2N3M1O4L2N1O1O1O2N2N1O2N2N2N1O2N2N1O2N2N2N2N2N1O2N2N2N1O2N2N2N1O2N2N1O2N2N2N1O2N2N2N2N1O2N2N2N2N1O2N2N2N2N2N1O2N2N1O2N2NRWk8\"}, {\"size\": [848, 480], \"counts\": \"Y5h0hi0001O000000001O00001O0000000000001N1000000001O01O001O000000001O0000001O0000000000001O00000001OO100010O0010O00001O0000000000001O0000001N1000001O0001O0O100O1N2M3N3N100O10000010O00001O100O1O2O2N1N2N0001I5L5L5F;KPnX20RRgM3N002N1O1O000VOE_WO;`h0G^WO9ch0G]WO7`h0N`WO2Zh04fWOLVh08jWOHVh08jWOGVh09jWOHVh08jWOGWh09hWOHXh07iWOIWh06iWOKWh05iWOKXh03iWOMWh03hWOOWh01gWO2Xh0MiWO3Wh0LjWO5Uh0KjWO6Wh0IhWO8Xh0HgWO9Yh0GgWO9Yh0FgWO;Zh0DeWO=[h0CeWO=[h0BeWO?[h0BdWO>\\\\h0AeWO?\\\\h0@dWO`0\\\\h0@dWO`0\\\\h0AcWO?]h0@dWO`0\\\\h0@dWO`0\\\\h0AcWO?]h0AcWO?]h0AcWO?^h0_OcWOa0]h0@bWO`0^h0@bWO`0`h0[ObWOe0Ui00\\\\O\\\\O\\\\WOd0bh0^O^WOb0bh0]O_WOb0bh0@\\\\WO`0dh0A[WO?gh0BVWO=lh0CSWO=mh0DRWO;oh0FPWO:Qi0FmVO;Si0FlVO9Ui0IiVO6Xi0a0O0100O101OO010000O1000000O100O010K6G9L3M5Ii^T1\\\\1l_kN5M2L4M3O101O00001O01O000001O0001O0001O000010O00010O0001O0001O01O00001O0000010O0000001O000010O000001O01O01O0010O0001O00000001O0001O000000000001O000000001O000000001O0000000000001O000O101N1000000O1N3K4K5L4J7D;J7F<Eak5:WTJ8E:E:J7G8E;K6M201O000O2O01OO101O01O01O00001O0001O01O00001O00000010O00000001O1O0000001O000bH\"}, {\"size\": [848, 480], \"counts\": \"V9g1ih000O1000000000O100000O10O100000000000O10O1000000000O0100000O1000000000000O0100000000000O1000000O10O100000000000O1000O1000000000000000O1000000O1000000O100M3J6G9G9I8GiYe2g0feZM6K2O0O1000000O11OO10000O010000000O10000O10O01O1O01000O10000001OO0100000000000O100000000O02O0000O100000O10000O10000ZOnVONRi00QWONPi01QWOOoh01SWOMmh03TWOLkh05UWOKkh05UWOKkh04VWOLkh02UWOOkh01VWOMkh01WWOOih00XWO0ih0MYWO3gh0KZWO5gh0JZWO6fh0G]WO9]i0000O1N2M3N2O001N2N2M3M2N3N2O10O10000000O11N1000001O0^OgVOLZi00mVOMTi0LTWO2fi0O0O2O000000O010O1O1M3N2O10000000000001OO100O100O001N2N2M3M3N2O100O100001N10000000001O00000O101O00001O000O101O001N10001O000O2O0000001O00001O0O101O0O10001N1000001O000O2O00k_g2\"}, {\"size\": [848, 480], \"counts\": \"hgQ22oi0P1YO:E7K6K4M3M3M3M4L3M3N3L3N2M3N3K4M3M4L3L4K5\\\\Oe0[Od0I7L4M3L4L4M3N2O1N2O1O1O1O1O100O1O1N200N2O100O100O1O100O1O1000hKa\\\\O_1^c0\\\\NQ]O[1ob0aN]]OW1bb0gNf]OT1Zb0hNl]OV1Tb0cNU^OZ1ka0cN\\\\^OZ1da0dN`^OZ1_a0eNd^O[1[a0cNg^O]1Xa0`Nm^O_1Sa0_NP_O`1Pa0^NR_Ob1n`0[NU_Oe1k`0ZNW_Oe1i`0YNY_Og1g`0XNZ_Oh1e`0WN^_Oh1c`0UN__Ok1a`0TN`_Ol1``0SNb_Ok1_`0SNd_Ol1\\\\`0TNe_Ok1[`0SNg_Om1Z`0RNg_Om1Z`0QNg_Oo1Y`0PNi_Oo1X`0nMj_OQ2Y`0mMh_OR2[d001O00000000001O0000O11O0000000000001N3L5Ka0ZOUPd7\"}, {\"size\": [848, 480], \"counts\": \"l:j0fi0000000000O01000000000O1000O100000000O1000O10O10000000O10O100000O10O100000000O10O100000000000O01000000000000O1000O1000000O1000000000O10O1000000000O010001N5L3M5J3N[Sf26YlYM7N10000O1000000000O10O10000000O010000000O1000O01000000000O0100000000000000O02OO100000000000000O01000000000O01000000O1000O1000000000O1000O10O10000000O1000O10000000O10O100000000O01000000000O1000O10O100000O1000O0100000000O100000O10O100000000000000000000O1000O10000000O1000000O0100000000000O1000O100000O1000O10000000O10O10000000O10O1000000000O10O10000000O01000000000O10O1000000O10O10O10O10000O100000000000000O11O00O10000000O100000O100000000000000O100000000000000O010000100O001N102N2M1O1O4L3NnXX1\"}, {\"size\": [848, 480], \"counts\": \"i]c9:hi0e0\\\\O>B>F9F:B>@a0E9F<D;E;M3N3O0000000000O010000000O100O1O1O1O1N2M3M3M3H8H9I6E<D<E>D>@j0lNhbf1\"}, {\"size\": [848, 480], \"counts\": \"RR_3a0ki08I5L5K3M4L4M3L4M3L5L4L2N1O101N100O1000O0100000000O10O1O1O1M3H8M3N2N2O1N2O10000000O100001O0000001O001O0O10100N2O0O2O1N2O1N2N2N2N1O2N2J6M4J5N2MZjR7\"}, {\"size\": [848, 480], \"counts\": \"c2a1oh001O00000000000O110OO010000000000000O11O00O1N3O0001O002N1OO01001O0001O1OO001001O00002N1O1O1O0O3M=_OfX8AlgG6K5K6K6J<C5L2N001O0000000000000000000000000000000000000002N1O003L5L3L>BSRm9\"}, {\"size\": [848, 480], \"counts\": \"k[j79Rj07[Oc0I8L3G9N2kL]N\\\\]Od1ab0cNf\\\\OGlM50g1]e0dN_\\\\Ol1ac0[NX\\\\Of1hc0aNP\\\\O_1Qd0dNk[O[1Wd0hNe[OW1\\\\d0lNa[OR1bd0QOY[Om0kd0YOmZOd0Ye0@`ZOZONAje0]1nYOjN\\\\g0R23K6K5K4J8I7M5K7I9D8J:F8Hdgh3\"}], [{\"size\": [848, 480], \"counts\": \"kc0e6mc0N2N1O2N2N2N1O2N2N2N1O2N2N2N2N1O2N2N2N2N2N1O2N1O2N2N2N2N1O2N1O2N2N2N2N2N2N2N1O2N1O2N2N2N2N1O2N2N2N2N1O2N2N1O2N2N2N2N1O2N2N2N2N2N2N2N2N1O2N2N1O2N2N1O2N2N2N2N2N2N2N1O2N2N2N2N1O2N2N2N2N2N2N2N2N2N1O2N2N2N1O2N2N2N2N1O2N2N2N1O2N1O2N2N2N2N2NcnZ9\"}, {\"size\": [848, 480], \"counts\": \"Y5i0gi00O1001O01O00001N10010O00001N10001O01O0001O0000001O0000001OO1001O0000001O01O000001O01O0000000001O00001O0O2O001O0000000000O1N2K5L4L5J6M2M4K^ok22TPTMc0K6J3N3M3M00001O1O0M3N3N2001O0000000000000010O00000000O101O0000001O01O00001O0001O01O00100O1O1O1O1O000000001O0001O1O1O1O001O1O001O1O1O0O101O0O1N3L4J5L6I6K4L^e6LhZI3L3N3L3O1N2N200:Ejog0o0ToWO5L4K5M3N1O101O0001O01O00000010O000001O01O01O0001O0001O01O01O000010O0001O0000001O00000010O0001O00010O0000010O00001O000010O00000000000010O000000000001O00000000001O0000000000001N100000001O00000O1O1M4I6K5J7D;H9Fc`74U_H>F9I8D;F:M4M201O000O110N10000010O01O00000010O0001O00001O01O01O000000010O001O000001O0001O0001O000001OO100N2K5L4M3N3O^H\"}, {\"size\": [848, 480], \"counts\": \"U9f1jh000O10000000O1O1000O10000000O01000000000000O100000O100000O10000000000O0100000000000O10000000O100000000000000000O1000000000O10O10000000O02O1O1O2N4K4M3N2L2O1O1O1N2O001O1O001N2O1O1O3M2N1O2M3N2M3Mf`U23R_jMa0D4K8I6K2N2N1O1O00000000000000O1000000000O100000O1000000000000O01000000000O10000000O010000000000O1[OoVOKQi03TWOJlh06VWOHjh08VWOHjh07WWOIih06XWOJhh06XWOJhh06XWOIih06XWOJgh05[WOKeh04\\\\WOLdh03]WOLdh01^WO0bh0O_WO1dh0H`WO8\\\\i000000O1O1M201N2N2O1N2M2N3O1N2M3N2N2O0O2O1O1001N10000AkVOCUi09RWOCoh0:VWODkh05\\\\WOJeh02_WOMci0O0O1000O100O0O2N3M2O1O010001O000000000000O10O10N2O1O1N2M3L4N2O100001O000O1000001O00000O101O000000001O0O101O000O101O00001O0000001N101O00001N10001N1000001O00001N100O100O2M20[cP3\"}, {\"size\": [848, 480], \"counts\": \"ola1<oi07G8K4K6I6K5M3M3L4M3M3L4M3N2L4M3M4M2N2L4N3L3L4M3N2K5M3L5L3N2N2M3M4L3M3M3M3M4M2M3N2M3N2N2N2M3M4M2M3N2M3K5N2O1O1O2N1O100O100O101N10^K[\\\\OY2dc0cMm\\\\OQ2Rc0jMW]OS2hb0lM]]OQ2cb0lMb]OR2]b0mMh]OP2Xb0nMl]OP2Sb0oMP^OP2Pb0mMT^OS2ka0lMX^OR2ha0nMZ^OP2fa0oM]^Oo1ca0PN_^Oo1aa0PN`^OP2`a0oMb^OQ2]a0nMe^OQ2[a0nMg^OQ2Ya0lMj^OU2Ua0jMm^OU2Ta0iMn^OV2Ra0iMo^OW2Qa0iMo^OX2Pa0gMQ_OY2o`0fMS_OY2n`0eMS_OZ2n`0eMR_O\\\\2n`0cMS_O]2n`0bMR_O^2n`0aMS_O_2n`0_MS_Oa2m`0_MS_Oa2m`0^MT_Ob2m`0\\\\MS_Of2l`0YMU_Og2l`0XMT_Oh2n`0UMR_Ol2o`0SMQ_On2Wd0100O1O1O2N1N2N2O1N2O1N1OUOQYOVNPg0]1W1G:F:K5H8I8J6M3M4C=KnZc7\"}, {\"size\": [848, 480], \"counts\": \"k:i0gi00O100000O10O100000O10O100000O1000O1000O1000000O0100000000000000O10O1000000000O10O10000000000O100000O100000O10000000O100000O1000O100000O10O1000000000O100000O100000O1000O10000000O10000000O10O1000O11O1O1O2N2M2O3M2M6JiQS2MXnlM8K3M3L3N1O1N1000000000000O0100000000000O10O100000000000O0100000O100000O1000O10000000O10000000O100000O1000O10000000O1000O100000O10O1000000000O10O10000000000O0100000000O01000000O01000000O100000000000O01000000000000O1000000000O10000000O10000000000O01000000000O10O100000O100000O10O100000O10000000O100000O100000O10O10000000O10O10000000O10O10000O10O10000O010000000O100000000000000O1000O1000000000O10000000000000000O10000000000000O1001O001N10001O1O1N2N2N3N2M`fd1\"}, {\"size\": [848, 480], \"counts\": \"XeX9?di0a0B;A>C>_O`0B>B>D<C>F9J6O1O10001OO10000O10O100000O100O1O1O1O1N2M3J6I7F;K4I8A?F<B>Hf0UOaUR2\"}, {\"size\": [848, 480], \"counts\": \"[Wl3e0hi0<C5K5O1O001O00001O0000001O00000000000000O1O1O100O1O1N2N200O1O100O1O100O10000000000001O001O0000000000001O00O1000000O1001OO1O100O1O1N2N2N2K5J6O5K]jd6\"}, {\"size\": [848, 480], \"counts\": \"d2]1Ti0O10O0001O00001ON200001O0000O1O11OO1O11O1ON2N2001O00001O2N2N1O00001N7I<Abc6Bm\\\\I6L4M4K6K5K;D6K3M0000001O0000O100001O000000O1000000000001OO20O0000002M5L4J?POYVO3fdX:\"}, {\"size\": [848, 480], \"counts\": \"[c_78mi0=ZOe0I6G:ZO^NYXOe1eg0bNSXOa1^e0WNg\\\\O[2Wc0jMf\\\\OV2Zc0lMc\\\\OU2\\\\c0RN]\\\\On1dc0YNdZOWO[1a2Qd0aNj[O_1Wd0dNe[O[1]d0hN_[OW1cd0mNX[OP1ld0WOkZOd0\\\\e0A]ZOVO4Aie0\\\\2Z1M4L3L5K5J6J8J;F7I6I;F8HhZT4\"}], [{\"size\": [848, 480], \"counts\": \"fd0j5hd0N1O2N1O3M2N1O2N1O2N2N1O2N2N2N1O2N2N2N2N2N2N2N1O2N2N1O2N2N1O2N2N2N1O2N2N2N1O2N2N2N2N1O2N2N2N2N2N2N1O2N2N1O2N2N1O2N2N2N2N1O2N2N2N2N2N1O2N2N1O2N2N2N2N2N2N2N2N1O3M1O2N1O2N2N2N1O2N2N3M2N2N1O2N2N2N1O2N1O2N2N2N2Nbaf9\"}, {\"size\": [848, 480], \"counts\": \"Y5n0bi0001O0000001O000000000000000000001O00000O11O0000000010O01O001O0000O20O00O10O11O0O1000O10000O1O1O1O10001O000000010O01O0000O1N2M3L5L3N2N2M4L[bR3Oi]mL3M1O1O2N2N1O1O2N2N1O2N2O0O1O1O3M102M2N2N002O0O1O2N2N2N1O101N1O1O10O1001N1O010O010O0000O20O00000000O1N2O1M3M3K5K5K5J6M4K6Jh^T1i0XgjN[Ofh0[1L3M4L300O11O01O00001O00001O000010O001O0001O01O01O01O0001O00010O0000000010O000001O00010O0O101O01O0001O01O01O00010O0000001O000001O01O00000001O000000000000001O000000001O000000001N100000000O2N1O1O1M3J7I6F;E<Fa`72__H6D=F9D=E;K4N2O101O000O2O010O0000001O0001O01O00001O01O0001O000001O01O1O00000010O00000001O01O000001O01O00000O1I7I7M4L3N2N2O10000000000000001N10[H\"}, {\"size\": [848, 480], \"counts\": \"T9f1jh000000000000O010000000O1000O10000000000O10O10000000O1000O1000000000O1000000000O100000O100000000000000O100000000000000000001O2M5L3M3M5J4M2N1O1N101O000000001N100000000000001O0O10000000001O0O10001O1O00001N101O1O1N2O2N2N2M`Z^1:VeaN4M5K3L3N2N2M3O1N3L4M2N001O001O0O2O000O10O10000000000O100000000000O01000000000000000O10O100000001O0O10001YOmVOOUi0NmVO0Vi0MlVO2Vi0KlVO4Vi0IlVO6Vi0HjVO7Xi0HhVO8Yi0FhVO:Yi0EgVO;gi000O1000001O00000O10001O2O2M3LSc6Ok\\\\I;F?A:H2O1O000001O0AhVOFXi05oVOIPi06TWOHmh02YWOMhh0N]WO1ai000000000O01O1O1O1O00100O2OO2O0000000O10O100O100O1O0N3M3N2N2O100O100000O100000001O00001O000O101O00001O000O10001O00000O2O00001O0O10001O00001N1000001O000O2O00000O2O0O2O1N2OXaZ3\"}, {\"size\": [848, 480], \"counts\": \"Vc^15Tj09J5L4K4L4M3K5J6M3M3N2M3N2M4M2M3M3N3L3N2N2N3L3L4N3N1M3O1N3N1N2N2O2M2O2M2O1O2N1O1O2N1N2O1O2M2O1N3N1O1O1O2N1N2O1O2M2O2N1N3N1O1O2N1O1O1O1O]LeZOeN0X3Ye0lM[[Oo1dd0nMb[OP2]d0mMi[OQ2Vd0mMo[OQ2Pd0oMR\\\\OQ2lc0nMW\\\\OQ2hc0nM[\\\\OQ2cc0nMa\\\\OR2]c0nMe\\\\OQ2Zc0mMj\\\\OS2Sc0nMo\\\\OQ2ob0oMS]OQ2lb0oMV]OQ2hb0oMY]OQ2eb0oM]]OR2bb0mM`]OR2_b0mMc]OS2]b0lMd]OU2[b0iMh]OV2Xb0iMi]OW2Wb0gMj]OZ2Ub0fMl]OZ2Tb0fMl]OZ2Tb0eMm]O[2Rb0eMo]O[2Qb0eMo]O[2Qb0dMP^O\\\\2Pb0cMQ^O]2oa0bMR^O^2na0aMS^O^2na0aMR^O`2oa0^MR^Ob2na0^MR^Ob2ma0^MT^Ob2ma0\\\\MS^Od2na0\\\\MR^On1db0QN\\\\]On1fb0PN\\\\]On1fb0QNZ]On1ib0QNV]Om1nb0QNR]On1he0N2O1O1M3K500N2O1O1O10O1000O100N2M2N3N1O2N1N200000O1N2N2N2N2N1101N3L4K5I8G^YU7\"}, {\"size\": [848, 480], \"counts\": \"j:j0fi00000O010000000O0100000000O0100000000O1000O1000O100000000000O10O10000000000O10O1000000000O1000O10000000O100000O10000000O10000000O10O100000O1000O10000000O1000000000O10O1000000000O1000O1000O10000000O01000000000O10000000O2O001O1O1O1N3N1O2N2N1O1O4KWea1MmZ^N6I3N1O4L3M1O1O0O10000000O100000O1000000000O100000O1000000000O10O1000000O10O10000000O1000O100000000000O010000000O10O100000000O1000O100O100000O100000O1000000000O100000000O0100000000O010000O10000000O10O10000000000000O0100000000000O10O1000000000000O100000O1000O10000000O100000O1000O100000O10O1000000000O10O100000O1000O1000000O010000000O100000O1000O010000O10000000000O1000000000O10O100000000000000O10000000000000O0110O0000000O10002N1N101O3L2O0O2MQjm1\"}, {\"size\": [848, 480], \"counts\": \"]gn89ji0c0\\\\O?A?A>G9^Oc0^Oa0G9RO^LiZOh3Ve0ZLaZOm3^e0c0000000O100000O10000O0100000O1O1O1O1O1N2M3K5J7E:K6F:D<A`0D=Cc0ZOkS\\\\2\"}, {\"size\": [848, 480], \"counts\": \"d_^4`0li05M2N3M2N3N1N2N2O1O1O1O010O010O01O0010O01O1O00100O10O0101N010000000O2O000000O1001O00000O110O000O2O1O001O1O1O002N1N2O1O1O101M3N2N2N3M4K[fV6\"}, {\"size\": [848, 480], \"counts\": \"b2b1oh0O2NO1O1001OO1O11O1O00001O1O1O0000001O1O1N4jNiVOm0ei0Hoh5YOfWJ2O3N2M4M4I9I6K<D5K1O1O00000000000001O00000000000000000000000000001O00002N6J6I>@dha:\"}, {\"size\": [848, 480], \"counts\": \"i_V7<bi0c0@`0G8lL[Nf\\\\O6RNb1Te0^Nf\\\\O4RN_1We0`Nd\\\\OV2[c0RN^\\\\On1ac0XNY\\\\Oi1gc0\\\\NS\\\\Od1mc0bNn[O^1Rd0dNk[O\\\\1Vd0fNf[O[1[d0hNa[OW1ad0mNY[OQ1kd0UOnZOf0Xe0@`ZOSO5Fee0[2\\\\1K5L3K6K5E;M4L8I7H8I7H:F:CQ^]4\"}], [{\"size\": [848, 480], \"counts\": \"\\\\e0T5^e0N2N2N2N2N2N1O2N2N2N1O2N2N2N1O2N2N2N2N1O2N1O2N2N2N1O2N2N2N1O2N2N2N2N2N2N1O2N2N1O2N2N2N1O2N2N1O2N2N2N2N2N1O2N2N2N2N2N1O2N2N2N2N1O2N2N2N2N1O2N2N1O2N2N1O2N2N2N2N1O3M2N2N2N2N1O2N2N2N1O1Ob_P:\"}, {\"size\": [848, 480], \"counts\": \"Y5P1`i00000000000000000001O00000001O1O01O0000001O0000001O00001N1000000000O1O1N3O0O100000000010O001O1O2N2O0O1O1O001O10O01O01O1O0001O01O0000000O20O000000O1O1N2O1L5L3N3M2O2N2M3N3MShV3MkWiL8H6O1O2N100O1O100O10000O1O001O1O001O10O000M2M4L3O2L3K7L_e60`ZI7M2L3N3N1N22N?_OWUg0;ZjXOc0^VOoNgh0c1I4L3N3N1001O000001O0010O0000010O00010O0001O01O01O0000010OO10010O000001O0001O000001O00010O00001O001O0001O0001O001O00010O001O00000001O0001O00O101O0001O00000001N1001O0001O0O1000001N100000000O2N1L4J6J7H7G:H8@h`7<T_H7]Od0J6E:H8L5M2O10001O001O0000010O00001O0001O01O00001O01O0001O00001O01O01O000000010O000001O01O0000000001O0M3J6K5L4M4M2O1O1000001O0O101O000000000000001O000000000O10XH\"}, {\"size\": [848, 480], \"counts\": \"S9g1ih00000O100000O100000O1000O100000O1000000000O100000O1000000000O10O1000000000000O0100000000000000000O01000000000O100000000O1000000O0100000O10000O10000N2J6M2N3N2M3M3M3N2M3M3N2N2M3M5Ka[`22^d_M2M3N2N2L4L4N2O1O1000000O10000O100001O0O101O1O0O1000O11O1O0O011O0000001N3N1O000O0100000000000O101O001O1N101O000O101O000000000O2O0000001N100O101N10Xkc06aT\\\\O101O001O001O1N110O2N00101N1O011N1O01O01O01O000000001N100000001O000O101O0000001N10001O0O101O000O2O001N01010N2N101NYUa3\"}, {\"size\": [848, 480], \"counts\": \"YXo11Zj0:G5K6J5M3L3N3M2M3N2N2M4M2L5M2M4L3M3M3N3L3M3N3K4M4L3K5M4M2M4M2N2M4M2O2M2N2N3N1N3N1N2O2N1O2N1O1O1N2O2N1O1O2N1O1O2N1O2NaLlZOd1Se0WNW[Oe1hd0ZN[[Of1cd0XNb[Of1]d0XNh[Of1Wd0YNn[Od1Qd0[NR\\\\Oe1lc0YNX\\\\Of1hc0YNY\\\\Oh1ec0WN_\\\\Og1_c0YNd\\\\Of1[c0ZNf\\\\Og1Xc0XNj\\\\Oh1Uc0WNn\\\\Oh1Qc0XNQ]Og1nb0XNT]Oi1jb0WNW]Oi1ib0VNY]Oi1fb0WN[]Oi1eb0VN\\\\]Oj1db0UN]]Ol1bb0RN`]On1_b0SNa]Om1_b0RNb]On1]b0RNd]On1\\\\b0QNd]OP2\\\\b0oMe]OR2Zb0nMf]OR2Zb0mMg]OS2Yb0mMg]OS2Yb0lMh]OS2Yb0mMg]OR2Zb0nMe]OQ2]b0nMd]Of1hb0YNY]Ob1mb0]NS]Oa1ob0^NQ]Ob1Pc0^NP]O_1Sc0aNl\\\\O]1Xc0bNh\\\\OZ1\\\\c0eNe\\\\OX1^c0hNa\\\\OV1cc0hN]\\\\OV1fc0jNY\\\\OV1ic0iNW\\\\OV1jc0jNX\\\\OS1ic0mNY\\\\OQ1gc0oNZ\\\\On0ic0QOZ\\\\Oj0hc0VOY\\\\Oh0ic0XOX\\\\Od0jc0]OV\\\\Oa0mc0^OS\\\\O?oc0BS\\\\O9Pd0FR\\\\O6Qd0Jo[O0Wd0OV3O001002N01N1O1O0100110O0MQaS7\"}, {\"size\": [848, 480], \"counts\": \"i:i0gi000O1000O10000000O0100000000000O10O1000000000O1000000000O100000O10000000O10O1000000000O10O1000000000000O010000000O01000000O1000O1000O100000000O10O101N2O1N4M5Eoj]2ORUbM6M3N2N3N1O00100O10000O02O0000O100000O10000000000O10O1000000000000000O010000000O0100000000O10O100000O10000000O1000O100000O100000O1000O100000O1000O100000000000O10O100000000O01000000000O1000001N2O1O1O001N101O2N001O2N1N3N1O11N12MYW=;\\\\hB2M8IN2O10000000O10O100000O1000O1000O100000O1000O1000O10O10000000000O1000O1000O10O1000000O100000000O0100000O100000000000000O10000000O1000O100001OO1000O1001O00001O1O1N101N011N4M1M4MoRV2\"}, {\"size\": [848, 480], \"counts\": \"U^f8g0Zi0a0[Od0C<B?C;_Ob0F:D=A>N2N201O000O10O100O01000O1000000O100O1O1N2N2M4I6E;H9K5D<B?Ab0_Oo0nNPWe2\"}, {\"size\": [848, 480], \"counts\": \"l\\\\d47Pj0;J5L4M3M3N1O2N2N2N101N2N101N101O001O0O1000N2N1O2O100N2O1000O10O101O00000002N3M01O01O00000010O00000O2O0010O02N1O001N2O2N3L3M3N3L4K\\\\^R6\"}, {\"size\": [848, 480], \"counts\": \"_2e1lh0O001O1O1O2N3M1N2O1O=B6Gan4@SRK1N1L6K7L5J6L4K=C4L1O10O000000000000O100001O0000O10000000000001OO1001O000O2O;D`0_Odfk:\"}, {\"size\": [848, 480], \"counts\": \"]Po6l0ai05H7J5kLnNi\\\\OV1Tc0QOS\\\\Od1kc0`NR\\\\Oa1mc0aNo[Oa1Pd0iNf[OX1Zd0kNc[OU1\\\\d0nN`[OT1`d0oN\\\\[OR1dd0QOX[Oo0id0VOP[Ok0Re0ZOfZO[OF0ie0n0TZOkNh0E\\\\e0[2^1L5L4J6K6G8M8H8I7H8H8H9Fbaf4\"}], [{\"size\": [848, 480], \"counts\": \"_f0Q4`f0O1O1O2N2N2N2N1O2N2N2N2N2N1O2N2N2N1O2N2N1O2N1O2N2N1O2N2N2N1O2N3M1O1O2N2N2N2N1O2N3M1O2N2N1O2N1O2N2N2N1O2N1O2N2N2N2N2N1O2N2N1O2N3M2N1O1O2N2N1O3M1O3Mb\\\\_:\"}, {\"size\": [848, 480], \"counts\": \"X5Q1_i0001O0001O010O001O01O001O0000O11N1000000O101O0001N1M3N2N2O1O1O2O00O11O000001O1O1O2O2M3M2O1O0O10O01O10O00001O000000001O01O0000N3N1M3M3M3N2O1N3N1O100O10001O0000001O4JeXR2f0bfmM:J4L3M101O1O1O002O0O001O0001O00000000001O00000000001O0001O00100O1O1O1O1O0010N1010O0001O1O001N1000001O000000000O100O1O1M3K5K6K4J6K5L5J5I\\\\V40giK6K4L3N3L3O110OO2NcUg0NYjXOQ1SO4L3M4M201N1001O001O01O001O01O01O000010O0001O01O0001O010O00000001O01O000001O000001O00001O01O01O00001O0001O01O0010O000001O0000010O0000000001O0000000000001O000000001O00000000001O000O1000001N100O1K5I7L5F:F:GnZ82ldG>E9D=F9K5M3O2N1O110O001O0000001O01O01O0000001O00010O00000010O01O00001O0001O00010O0000000001O01O01O00O2N1L4K5J6M3M3N3N1O11O00O101O000000001O00000000001O000000000O101O0000000000000OWH\"}, {\"size\": [848, 480], \"counts\": \"Q9f1jh0000000000000O01000000000O100000000000O1000O100000000000000000O100000O1000000000000O01001O00O10O100000000000000O1000O1000000000O10000000O100000O1000000000O10O100000000000000000O1000000000O1000O10000000O100000000000O10O2O1O1O6J:Ea0UOTVO0Ved03iT\\\\Oe0]O<D5N1N1000001O0O010001O0000000O10000O1000000O1WO\\\\WODfh06m0O0N2O2I7Oa\\\\^1?obaN8F6L2K301O2M3N2O11O001O0_OkVOGUi06PWOHQi04UWOIkh02ZWONgh0M^WO1bi0O001OO10000O0N3N2O001000000000O2O0000O0100000O1O1N2O1N2M3M201O10000000000001N10000000001O00001O0O2O0000001O000O2O001O000000000O2O00001O0000000O2O00001N1001OO101O0O101O0O2MkXj3\"}, {\"size\": [848, 480], \"counts\": \"TZ^27Uj06H6M4J6M3I6L4J6M4H7N3N1M4L4K4O1N2J6I8E:K5L5M2N2M3M4L3N3N1O100O2N1NjNmYOSNRf0k1TZORNke0l1ZZORNee0m1^ZOSN_e0m1cZOSN\\\\e0l1gZOSNXe0l1kZOTNRe0m1P[ORNod0n1S[OQNld0`1d[O`N\\\\d0X1m[OgNRd0T1T\\\\OlNkc0Q1Z\\\\OnNec0P1^\\\\OQO`c0n0c\\\\OPO^c0n0e\\\\OQOZc0m0k\\\\OQOUc0m0n\\\\OROQc0m0Q]OSOob0k0T]OTOkb0j0Y]OUOgb0i0\\\\]OVOcb0j0_]OUO`b0j0c]OUO\\\\b0j0g]OUOXb0k0j]OTOUb0k0n]OTORb0k0P^OTOoa0k0S^OUOma0j0U^OUOja0j0X^OVOha0i0Z^OVOfa0i0\\\\^OVOda0i0]^OWOba0i0`^OUOaa0j0`^OVO`a0i0a^OWO_a0h0c^OWO\\\\a0i0d]OSOPN3^d0h0`]O[Oac0e0^\\\\O_O_c0`0b\\\\OA]c0?b\\\\OC]c0=c\\\\OC]c0<d\\\\OE\\\\c0:d\\\\OG[c08e\\\\OJZc06e\\\\OK\\\\c04c\\\\OO\\\\c00a\\\\O4^c0K_\\\\O:ac0EX\\\\Oc0gc0]OV\\\\Og0jc0XOQ\\\\Om0oc0SOn[OP1Sd0oNk[OS1Vd0kNi[OU1Zd0jNd[OV1_d0iN^[OX1dd0iNY[OW1jd0hNU[OW1nd0hNP[OY1Re0gNkZOY1Ye0gNcZOX1ae0WOcYOP1cf0[14M7H8H5K:F8E`0^Oj0VO\\\\jU7\"}, {\"size\": [848, 480], \"counts\": \"g:i0gi0000O10000000O1000O100000O10000000O10000000O100000000000O02OO100000000000O01000000000O1000O1000O1000O10000000O1000O100000000000O10O1000000000O100000O10000000O10000000O10O10000000000O100000000O11O000O10O1000000000000000O01000001O1O001N2O2N8G5K2OPc;0m\\\\D3O1FNTVO4ii0;M3N2O1O10O100O1O10000O00100O10000O100O010O10001N2M3N3M2MR\\\\^1LmcaN:J3O1O1O1O1O100O1000000000000O10O100000O10O10000000O01000O1000O10O1000000000O10000000000000O10O10000000O100000O10000000000O100000O100000O1000000000O0100000000O010000000000O010000000000O0100000000O1000O10O10000O1000O10000O1000000O01000O2OO1000000000O100000O1000000000000000O100000000000000000000O110N2O001N2O1N3N2L3No[^2\"}, {\"size\": [848, 480], \"counts\": \"`o^8l0Wi0?^Oa0C<E;B>]Oc0I7_Ob0B=N2O1000001O00O10O01000000000000N2O1O1O1N2N2K5L5B=G:E;B=I8E<Cd0TORfl2\"}, {\"size\": [848, 480], \"counts\": \"o]V44Xj04100OkUO6di0?K5J5L3M2N4L3M4M1O0O100O10001O00O100000O02O0O1O001O1N2O1O1O001O10000O10000O1000O1001O00000000002M101O1N2O1N2O2N2M2N3J=[OTRb6\"}, {\"size\": [848, 480], \"counts\": \"ff65Zj02N101N3N3L4L8H8I;E4L1O0010O001O00000000000O1001OO100001O00O11O00O2O0000002N2N7I8HjoS;\"}, {\"size\": [848, 480], \"counts\": \"Sbg633j0Qi0`0I7K4kL[N]]Og1ab0bNg\\\\Oo1Xc0WN^\\\\On1bc0VNY\\\\Oj1hc0XNaZO[O_1^2oc0bNk[O^1Vd0eNf[O[1Zd0hNc[OX1^d0lN\\\\[OT1gd0oNT[Om0Qe0YOgZOd0^e0BZZOmNf0_O\\\\e0c2[1K5L4I7I8J7K9G7J5I8G9G;GQPn4\"}], [{\"size\": [848, 480], \"counts\": \"ff0j3hf0N2N2N1O3M1O3M1O2N2N1O2N2N2N2N2N1O2N2N2N2N2N1O2N1O2N2N2N2N2N1O2N1O2N2N2N2N1O2N1O2N1O2N2N2N2N1O2N2N2N1O2N2N2N1O2N2N2N2N1O2N2N1O2N2N2N3Mb[d:\"}, {\"size\": [848, 480], \"counts\": \"Z5P1`i000001N1000001O0O1000000000N2K5N2O100O101O0001O001O00010O2N4L3M2N1O001000O10O010O01O01O000001O0001O01O0O100O1N2O1N3M2L4N2O1O1O2N1O100O101O01O000001O5Ilhn3NUWQL5K4M2M4M2O1N2O15JdUg0H]jXOg0ZVOUOgh0]1K4L4M2O2O00000001O0001O00010O000010O01O01O0001O00010O00001O01O0000001O01O0000001O001O01O000000010O00000010O1O00000010O000001O000001O0001O000000000001O0000001O00000000001O000O10001O0O1000000O2L3I7J6D=G:FlZ85ldG=C<C<F;L3N200O2N10001O0010O0001O0000010O0000001O01O01O00000010O0001O0000010O0000001O01O000001O01O000O1N2L5I6L4M3M3N2O2O0000000000001O000000001O000O1000001O00000000001O0000000O10000000000000001O00UH\"}, {\"size\": [848, 480], \"counts\": \"o8f1jh0000000O100000000000000O11O00O10O100000000000000O0100000000O100000000O10000000O1000O10000000000000000O1000O100000000000O10000000O100000O10000000O10000000O10000000O100000O10000000O100000O1000000000000O10001O1N8I:D>^ORVW2NRPhMJmi0`0L2O1O000000O100000000O1O1M5IeVOKai07J4M3L3O2N1O1N2N2N2N2N2N2O0O2M3N101O1O10O2O00010\\\\OnVOHRi07QWOGoh05WWOIjh00]WONgh0K^WO4`i0O0O100O10O1O1N1O3N100O0100000001O00O1000O10O1O1O1O1N2N2M3M3O1000000000O100000001O000000001O001O0O101O00001O0O10001O00000O2O00000O2O0000001O0O101O000O1010O00O101O0O100O1OllP4\"}, {\"size\": [848, 480], \"counts\": \"nYl2;gi0e0[Oa0J4K5J5K5L5H8G9SOXMjYOn2je0S1J5M3M4M2J7K4M3N3M2N3N1O1O2N1O1O101N100O2O0O2O000OZLY[Of1fd0RNn[Ob1Rd0YNY\\\\Oa1gc0\\\\N_\\\\Oa1`c0]Ng\\\\O`1Xc0^Nl\\\\O`1Tc0]NQ]Oa1nb0^NW]O_1ib0`NZ]O^1fb0`N^]O^1ab0bNb]O\\\\1]b0cNg]O[1Yb0dNi]O[1Wb0dNl]OZ1Tb0eNo]OY1Qb0eNS^OY1ma0fNV^OX1ja0hNX^OV1ga0kN[^OS1ea0mN\\\\^OR1ea0lN]^OS1ca0lN`^OR1`a0nNa^OQ1`a0mNc^OQ1]a0nNe^OQ1\\\\a0nNe^OQ1[a0oNe^OQ1\\\\a0mNf^OR1[a0mNf^OR1[a0lNf^OT1Za0lNg^OS1Za0kNg^OU1Za0jNf^OV1[a0gNg^OZ1Za0cNg^O]1[a0`Ng^O^1Ve00000N1O2L4K5K5M4F;AkY]7\"}, {\"size\": [848, 480], \"counts\": \"e:i0gi00O010000000000O0100000000000O100000O1000000000O10O10000000O10O1000000000O010000000000000O10O1000000000O10O1000000000O100000O1000O100000000O1000O100000000000O1000000000O100000000000000O0100000000000O1000000000O10001O1N102N0000000O1O1N2KbRS2G_mlMb0J2O0O1000000O10O2O0000000O1000O1000000000000O01000O10000000O1000000O1000O100O010O1000O1000000000000O10000000000000000O0101O0000O10000000O100000O100000000000000O1000O10O1000000O10O10000000O0100000O10O1000000000O010000000000O010000000O10O1000O10000O10O10000O100000000O10O11O000000O10O100000000000000O100000000000000O1001O00O10O100001O1O1O0O2O1O0O3N1M4MPPe2\"}, {\"size\": [848, 480], \"counts\": \"h[X8b0Zi0g0]Oa0B=A`0D;[Oe0D<D<F:N3N10000000000O10O100O100000000O1O1O1O1O1M3K5M4B=I8D<B=E<D>^Oh0ROSZS3\"}, {\"size\": [848, 480], \"counts\": \"gln3;Qj0;G5J5K6L4L4M3L2N2N1N3N101N10O010000O1000O010O100O1O1N2O1O001O2L3O1O2N100000001O00010O100N2O001O001O0O2O1N101N2O001O1N2O2M3M3L9Fhhh6\"}, {\"size\": [848, 480], \"counts\": \"_2;Uj01O1O002N3M5K5K6J;E5K1O1O000001O001O000000O100001O001O0000N20000001O001O00O17H7J:F8FRiY;\"}, {\"size\": [848, 480], \"counts\": \"on`66Si0X1I7L3jL]N^]Oe1_b0cNT]Od1lb0`Nf\\\\Oi1Zc0^N[\\\\Og1ec0[NX\\\\Of1gc0bNP\\\\O_1Qd0eNj[O\\\\1Vd0fNg[OZ1Zd0jN`[OU1cd0oNX[OP1jd0UOoZOg0Xe0_O^ZOQO9Kbe0U2`1M2K6J7J5I9K6J8H8H5K9F9GUdT5\"}], [{\"size\": [848, 480], \"counts\": \"Pg0`3Qg0O2N2N2N1O2N2N2N2N1O2N2N2N1O2N2N2N2N1O1O2N3M1O2N2N2N1O2N2N2N1O2N2N2N1O2N2N2N2N2N2N1O2N1O2N2N2N2N2N2N2N1O1O2N2N2N2N1O1O2N1O2N1Oceg:\"}, {\"size\": [848, 480], \"counts\": \"X5R1^i0O001O1O1O1M300O11O00000000001O1O100O2N2N2O0O2N1O001O000100O010O001O001O0000001O00001O000O1O1N2N2N2N3N1N2N2O2N100O1O101O000001O001O0001G8O4MQiQ31XVnLj0J3B>AcNaWOe1\\\\h095K1O00001O2N2N1O000O10000O1M2M4L4L4L4J7K5J6Kh^T1>k`kNk0UO5K4L301O00000001O01O000010O00000001O010O0000010O001O00010O00000010O0000000010O00001O00010O00000010O000000010O0001O00001O0001O0001O000001O0000000000001O00000000001O00000000001O000O101O000O100M4J5I7I8E;F<E]`78X_H=D;E:D=I6N3M200O2O00001O00010O00001O0001O01O00001O01O01O0000001O01O0001O00010O00000000010O000000000001N1J6K5K6L3M3O1O2O00000000001N100001OO1000001O00000000001O000000001N100000000O10000000001O000O10001O0000000OUH\"}, {\"size\": [848, 480], \"counts\": \"n8f1jh0000000O10000000O10000000O100000000000000O1000O100000O100000000000000O100000O1000000000O1000000000O100000000000O1000O1000O1000000000O0100000000000O10O100000000000O10000000O100000O100000O10001O1N4M8G;Ea0[OSVW2NPjhM;D60O`VO_OQi0a0mVOGlh09TWOIkh08SWOJlh06SWOKmh05SWOKmh04SWOMmh03SWOMnh00TWO0mh0MUWO3mh0JTWO5bi02N2M3N2O100O0O2O2N1N2O1N101N2O1M3O0O2O10O1000001O0^OmVOGSi08oVOGQi06SWOInh03WWOJkh00[WOOdi0O1O0O10O100O1N2M3O1O10000000O2O0000000000O10O01O1O1O1N2M3L4N200000000000O1000001O0000000O2O00001O00000O2O001O0O101O0000001O00001N10001O0O10001O0O101O0000001O000O101N1O3NYfV4\"}, {\"size\": [848, 480], \"counts\": \"WWb28mi0=E9F:F;F9I7J6XOh0ZOg0F9L4M4J5L4M3M4L3N2N2O1O2M2O2N100O2M2N2N3M2N2N2M3O2N1O1O2O000O101O000O10kKm[On1Rd0lM[\\\\Om1ec0oMe\\\\Ok1[c0RNm\\\\Oi1Rc0QNZ]Oj1fb0TN_]Oj1`b0TNd]Oj1[b0UNj]Oh1Vb0VNo]Og1Pb0XNT^Of1la0YNW^Oe1ia0YNZ^Of1fa0YN\\\\^Of1ca0ZN^^Of1ba0YN`^Og1^a0YNd^Of1\\\\a0YNe^Of1\\\\a0YNf^Of1Za0YNg^Og1Ya0XNi^Og1Xa0VNj^Oj1Ua0WNk^Oi1Va0UNl^Oj1Ta0UNm^Ok1Sa0UNm^Ok1Sa0TNn^Ol1Sa0SNl^On1Ta0QNm^Oo1Sa0QNm^OP2Sa0nMm^OS2Sa0lMm^OU2Ta0jMl^OV2Ua0hMk^OX2Xa0fMg^O[2Za0cMf^O^2[a0`Mf^O`2cd03N1O1N10100O20M2XOdXOSNeg0Y1S1D<EjZ^7\"}, {\"size\": [848, 480], \"counts\": \"d:h0hi00O100000000000O10O100000000000O01000000000O10O1000000000O1000O1000000000O01000000000O10O100000O1000000000000O0100000O1000000000O10000000O10000000O100000000000O10000000O1000000000000000O010000001O000O2O00001O0O1000O2O0O1O2O000001O1O1N2O7@cck1:[\\\\TN4L3N001OO1000O100000000O10000000O10000O100000O100O010000000O1000O10000000O010000000O10O10000000000O100000000000000O100000O1000000000000000O1000O11OO10O100000000O100000O10O1000000000O10O010000000O100000O10000000O10O100000000O010000O1000O10000O100O1000O100O10O100000O100000000000000O10000000000000000O100000000000000O1001O000000O01001O001O001N101O2M102L4M`ij2\"}, {\"size\": [848, 480], \"counts\": \"[bR8`0`i0b0]Ob0B=H8M300aNYNUZOg1Ye0mNeZOT1Pe0XOnZOh0od0\\\\OP[Od0od0^OP[Ob0Pe0^OP[Oc0nd0_OQ[Oa0od0_OQ[Oa0od0@P[O`0Pe0@Q[O?od0BP[O>od0DP[O;Qe0FmZO;Se0GkZO8Ve0JgZO7Ye0NaZO3_e0_2000O100O1N2O1N2M3K6F9H9H8_Oa0C=E<G?fNRTY3\"}, {\"size\": [848, 480], \"counts\": \"^QR4<ni0:J<D6J5K3N1M3O1O1O1O1O100O1O100O10000O1000O10O02O0O1O1O1O0O013M1O1N2O2O00O100001O0001O001O1O01O000O2O002N1O1O1O0O2O002M3N1O1O1N3N2M3M;@TZb6\"}, {\"size\": [848, 480], \"counts\": \"_2k0ei03M>B4L2N000O1O110O000000000000O10000000000000001O00001O1O011N3M5J:Ga0UOeb_;\"}, {\"size\": [848, 480], \"counts\": \"\\\\U[67Yi0S1H6J5L4M3B>K5N2O0^NhMmZOY2Qe0jMlZOW2Te0mMhZOS2Xe0QNcZOo1^e0YNYZOe1ke0`NnYOJ45Tf0;]YO]Ol0DQf0h1\\\\1M4K5H9J6M4M3K5H;Ha0^OPX[5\"}], [{\"size\": [848, 480], \"counts\": \"Wg0Y3Yg0N1O2N2N3M1O2N1O2N2N2N2N1O2N2N2N1O2N2N2N2N2N1O1O2N2N2N1O1O2N2N2N2N1O2N2N2N1O2N2N2N1O3M1O3M2N1O3M2N1O1O2N2N2N1O2N1O2NSjk:\"}, {\"size\": [848, 480], \"counts\": \"T5R1^i000001O01O0001O1O100O2N001O010O001O000001O01O001O010O01O1O1O1O00001O01O01O000O1O1N2N2M4L3N2N2O1O100O2O00000001O000010O01O2N00100O11^O[VO6Pe[3:bTeL8K4L3M4K7KO000M3M3N2L4I7I7N3L5IeP51[oJ6L2M4M2N3N1004K:EeZf0?jdYOk0VO6I4O2N11O000001O0010O0000001O01O00010O0001O01O000010O0001O0001O01O0000010O00001O0001O01O001O0001O01O001O00010O000010O000000001O01O00000000000001O0000000000001O000000001O000000001O0O1000001N1N2L4G:J5C>F:Cg`79Q_H;D=H7E<E:M4M2O10001O00001O001O0000010O00000010O0001O00010O00001O0000010O00001O000001O000001O0001O00000O1K5K5L5K4M3N3O0O1000000O2O01O00O101O00000000001O000000001O00000O10001O0000000O1000001O000O10000000001N10000000001N10SH\"}, {\"size\": [848, 480], \"counts\": \"m8f1jh0000000000000O1000O100000O1001OO10000000000000O0100000000000000O100000000000O10O10000000000000000O1000O100000000000O10O100000O100000O1000000000O1000O1000000000O1000O2OO100000000O100O101O2M:dNiVOl0R]i2^Oj\\\\WM6L2L4N2N2N2M3N2O1M3N2N1O200001N1000001O0]OnVOHSi04SWOIoh0OXWO0ei0O0O1000000000O1N101N200000000000O1000000000O1O100O1O0O2L4L4N20000O10000001O000O101O00000O101O00000O2O00001O000O101O001O000O2O000000001O001N1000001O0O2O00001N10000O2O0O103MXPZ4\"}, {\"size\": [848, 480], \"counts\": \"Rob2j0of0g2H9I6J6L5L3L4L4M3N2N2N2N2O1N2O1O1O1O2N1O1O1N2O100N2O1O1N3L3M3N2N2000001O0000001O000000001O0000000000mKd[OR2\\\\d0dM\\\\\\\\Oo1cc0lMh\\\\On1Xc0mMQ]Oo1ob0mMY]Oo1gb0mMa]Oo1_b0oMe]OP2Zb0nMj]OP2Vb0mMP^OQ2oa0lMV^OR2ja0lMZ^OR2fa0mM\\\\^OR2da0mM^^OR2ba0lMa^OT2^a0kMe^OS2[a0lMf^OT2Za0kMh^OT2Xa0jMk^OU2Ua0iMm^OW2Sa0hMo^OW2Qa0hMP_OX2Pa0gMQ_OY2o`0gMQ_OY2o`0fMR_OZ2n`0fMR_OZ2n`0eMS_O[2m`0eMS_O\\\\2l`0cMU_O]2k`0cMT_O^2l`0aMU_O_2k`0aMU_O_2k`0aMU_O_2k`0`MU_Oa2k`0_MU_Oa2k`0^MU_Oc2k`0]MU_Od2Zd0001N2O1N2OmNdXOWN3c0Wg0Q1_YOfN`f0S1a1J8H;@W^Y7\"}, {\"size\": [848, 480], \"counts\": \"c:h0hi00000000O10000000O0100000000000O10O100000000000O10O100000000000O010000000O1000O1000O1000000000000O100000O1000O100000000000O10O1000000000000000O100000O100000O100000000000O1000000000O100001N01001O2M2O1O1O2N10O0O1M4OO11O0O10000O1000O1O1K6E\\\\gT2:`XkM6N001O0O10O1000O1000000000O010000O0100000000O1000O1000O1000000000000O0100000000000O100000000000000000O02O00O100000O1000O100000O10000000O1000O100000O1000O010000000O10O1000000000O1000O10000000O10O1000O10O1000000O10O1000O10000000O10O10O1000000000000O10000000000000000O100000000000000O1001O000O10O1000001O0000001O1N2O001N3N2L3NPnn2\"}, {\"size\": [848, 480], \"counts\": \"UXo7e0Zi0c0]Ob0_O`0D<B?[Od0B>F:I8M2N2000000O2OO10000O100000000O100O1O1O1O1N3J5I8F9J6E<B>D=D=ARX]3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"\\\\2f1jh00O11O00000000000000000O1000001O0000000000001O001O002N5K;DPbd;\"}, {\"size\": [848, 480], \"counts\": \"ePW6?ei0>@?G8fLcNg\\\\O1TNa1Ue0_Ne\\\\O2RNb1Ye0]Nb\\\\OX2^c0iMa\\\\OW2^c0VNU\\\\Ok1kc0\\\\Nn[Od1Rd0_Nj[Oa1Wd0bNe[O_1[d0cNb[O\\\\1`d0gN\\\\[OX1fd0mNS[OR1Pe0UOfZOSO58\\\\e0j0WZOmNf0J]e0T2b1J5L5C=M7J6H8H8G:H8If\\\\_5\"}], [{\"size\": [848, 480], \"counts\": \"[g0U3\\\\g0O1O2N2N2N1O2N2N2N1O2N2N1O2N2N2N2N2N1O2N2N1O2N2N1O2N2N1O2N2N2N2N2N1O2N2N2N1O2N2N2N2N2N1O2N2N2N2N1O2N1O2N1O2N2N2N2Nbdl:\"}, {\"size\": [848, 480], \"counts\": \"T5X1Xi00000001O01O01O00001O0001O000001O0001O00010O10O0001O010O1O001O0000001N1N2N2M3L5M2N2O1O1O10001O0001O00001O1O100O1O1O1O1O1O01O2M[`\\\\3Fo_cL9Gc0^O5K3M0000K5O1K5K5K5K6L4JgP5M`oJ1M3N3L4M3M200004L>_OP`e0d0\\\\_ZOb0_VOiNhh0d1J4M3N2O00001O01O000001O010O000001O0001O01O000010O000010O0001O0010O0001O0001O01O00001O00001O00010O00001O010O001O010O0000000001O00000001O000001O000000001O000000000O20O00000000O2O000000000O2O000N3I6H8J7C>F:Cb`7:S_H>D:E<E:I7L4O2O0O2O00001O00000010O01O0000010O00001O0001O01O001O0001O01O0000010O00001O0001O0000000000001L3L4J6M3L4N3M2O10001O00000000001O000O10001O000000001O00000000001O000O10000000000O2O0000000O2O000000000O101O00000000000O2OSH\"}, {\"size\": [848, 480], \"counts\": \"m8e1kh0000O01000000000000000000O10O2OO100000000000000O1000O1000000000O100000000000O1000O1000000000000000000O01000000000O1000O10000000O1000000000O10000000O10000000O11O00O1000O1000000O101N5L8H>_O`\\\\n2KbcQM=F5K4M3M2O100O11O01O01N10001XORWOLQi0H[WO5ai0N2O0000O10OO2O1N2O1O10000001O0O100000000000O1O001O1O1M3M3L4N2000000000O2O0000000O2O000000001O000O101O0000001O000O101O001O001O0O101O0000001N101O000O2O00001O000O2O0O100O2N1O\\\\e[4\"}, {\"size\": [848, 480], \"counts\": \"i[a21[g0m0`ZOCRe0S3H8L3M3M4M2M4L3M3L4N2N3M2N2O1N2O2N1O100N3O0O1O1O2N1O100N2O2N1O100N2O2N1O1O2N1O100O1O1O2O00000O101N1000000O2O00kKa\\\\OY1_c0aNj\\\\O\\\\1Uc0bNR]OZ1nb0aNY]O]1gb0`N^]O^1bb0_Nd]O_1[b0^Ni]Oa1Wb0]Nm]Oa1Sb0\\\\NQ^Oc1oa0\\\\NT^Ob1la0\\\\NW^Oc1ia0\\\\NY^Oc1ga0[N\\\\^Od1da0ZN_^Oe1aa0YNb^Of1_a0WNd^Oi1[a0VNf^Oj1Za0UNg^Ok1Ya0TNh^Ol1Xa0SNi^Om1Xa0QNi^Oo1Wa0PNj^OP2Va0oMj^OQ2Wa0nMj^OR2Va0mMk^OS2Va0kMj^OV2Va0iMk^OW2Ua0iMj^OY2Ua0fMk^OZ2Wa0dMj^O\\\\2Va0cMj^O^2Wa0aMh^Oa2Wa0_Mi^Oa2Xa0`Me^O`2]a0^Mb^Od2_a0ZMb^Of2aa0WM^^Oj2dd000hNgXOYOYg0:_YOZOcf0<PZOTOXf0a0T2Bb\\\\Y7\"}, {\"size\": [848, 480], \"counts\": \"b:i0gi0O010000000000O10O10000000O100000O100000000000O0100000000000O0100000000O10000000O100000O1000000O1000000000O01000000000000000O100000O10000000O10000000000000O100000000000O1000O100000001O00001N2O1O0O20O000O11OO2O0O10000O1000000O100O010O1001O1O1N101N102M3Nj[V2H]diM3N3L5L2M3N0000000O100000O01000000000O10000000O01000000000000000000O10O10000000O10000000000000O0100000O1000O10000000O10O10000000O10O100000000O10O100000000000O0100000O1000O1000O1000O1000000O10O1000O1000O10000000000O100000000000000O01001O00O1000O10000001OO1000000O1001O000000O1000001O001O0O2O2N1N1O3N1NQcP3\"}, {\"size\": [848, 480], \"counts\": \"Wcm7c0ai0=N2gN\\\\OdXOe0kf0LTYO4_f0:`YOFPf0k0oYOUObe0Z1_ZOeNVe0g1iZOZNod0m1Q[OSNmd0o1T[OPNld0Q2T[OnMkd0S2U[OmMkd0S2U[OmMkd0S2V[OmMid0S2X[OlMhd0U2W[OjMjd0V2W[OiMhd0X2Y[OgMgd0Z2X[OeMid0[2X[OdMhd0]2W[OcMid0^2X[O`Mhd0`2Y[O^Mhd0c2X[O\\\\Mhd0e2W[OZMjd0f2W[OXMjd0i2U[OWMkd0i2U[OVMld0k2T[ORMnd0o2T[OjLPe0W3U10O01N1N3B>C>G;_OSm^3\"}, {\"size\": [848, 480], \"counts\": \"jZU43Xj0:I9F5N3M2N1O1O1O001O00000000001O0000O1000000000000O1N2O1O1N2O1N2O1N200O1O1O100001O1O1O000000001O2N000000000000000000000000O1O1F[VODjTc6\"}, {\"size\": [848, 480], \"counts\": \"\\\\2d1lh0001O0000000000O10000000000000000000001O001O1O2N5K5K:DmVf;\"}, {\"size\": [848, 480], \"counts\": \"^aT61ni0f0VOg0F8M4M2\\\\O`NUXOc1jg0b0O1O001^NdMoZO]2Pe0gMlZOX2Ve0jMgZOV2Ze0mMaZOR2be0SNXZO3G`0Uf0ClYOJ<4oe09\\\\YOC\\\\h0S15K5E;N2N3N1O2L4L5L7I8FSW`5\"}], [{\"size\": [848, 480], \"counts\": \"[g0U3]g0N1O3M1O2N2N2N1O2N2N2N1O2N2N2N2N2N1O2N2N1O2N2N1O2N2N2N1O2N2N1O2N2N1O2N2N2N2N2N2N2N1O2N2N2N2N1O2N2N2N1O1O2N2N2N2NR_m:\"}, {\"size\": [848, 480], \"counts\": \"T5Y1Wi0O1001O01O0001O001O00000010O000001O0001O0010O01O10O01O001N101N1J6K5N2N3M2O1O1000001O01O001O00100O1O1O002N1O1O1O0010O01O1O01L6]Ocmj44bRUKc0Ah0WO7K2O101N101O010O000001O01O000000010O000010O0000001O01O01O0001O0000010O001O0000010O00001O0000001O010O00001O010O1O001O01O00001O0001O01O0000000000000000001O000000001O0000001O00000O10001O0O1000000M4K4G9I8C=GQ[8NndG=A>F9D<J7M2O100O2O001O0000001O01O01O00001O01O0001O00010O00001O01O000001O01O0001O000010O000000001O00000N2K5K5L5L3M3N200O2O000000001O00000000001N100000001O000000001O000O100000001O000O10000000001O0O1000001O00000O1000001O0000000OTH\"}, {\"size\": [848, 480], \"counts\": \"l8f1jh000O1000000000O10000000O100000000000000000O010000000000O100000000000000O0100000000000000000000O10O1000000000O010000000000O1000000000O1000000000O1000O1000000000O1000000000000O2O1O>A4K4[Od0M3MTZ]31mebL0O1O1O2M3M4N0O10000001O00000000O10O0100O1O1N2N2L4N2N200000000000O2O0O100000001O00000O2O0000000O2O00001O00000O2O00001O0O101O0000001O0O101O0O10001O001N101O0O2O0N2O10k_\\\\4\"}, {\"size\": [848, 480], \"counts\": \"od`2<Pj07E9H7dNEQXO[O1]1ag0\\\\1H8E;M4M2L5L3M3N2N2M3N3M2M4M2O1N3N1O2M3N1O1O2N100O2N101N100O101N100O101O0O100O2O0O101N100O2O000O1O101O000000000O20^L`[OR1`d0cNR\\\\OV1mc0hN[\\\\OS1ec0kN_\\\\OS1bc0hNe\\\\OV1Zc0hNk\\\\OU1Tc0kNm\\\\OU1Sc0iNP]OV1Qc0gNS]OX1lb0gNW]OW1ib0fN[]OY1eb0eN^]OZ1bb0eN_]O[1ab0eN`]OZ1`b0eNb]OZ1^b0eNc]O[1^b0cNd]O\\\\1\\\\b0bNf]O]1[b0bNf]O^1[b0`Nf]O`1Zb0`Ne]O`1\\\\b0_Ne]Oa1[b0_Nd]Oa1]b0^Nd]Ob1]b0\\\\Nc]Oe1]b0ZNd]Of1\\\\b0YNd]Og1^b0XNb]Oh1^b0XNb]Oh1^b0XNb]Og1`b0XN`]Oh1ab0VNa]Oi1`b0VNa]Oh1ab0VNa]Oi1`b0VNc]O<oMJ_d0Ig]O2UNO\\\\d0HW_OMb`[7\"}, {\"size\": [848, 480], \"counts\": \"a:i0gi0O10O10000000000O100000O10000000O100000O1000O100000O100000000O10O100000000000O10000000000O100000O0100000000000000O01000000000000O1000000000O100000000000O100000O1000000000000O1000001O1N10001N2N\\\\Z`2Dke_M9K3O00O101O1O2M2O1N2OP[f01ndYO2O1O1O1O001O2M2O001O001O000O2O001OO1000000O10O10O100000O01000O010000000O1000O1000O10O1000000000000O010000000000O010000000O10O100000O10O100000O10000O1000O10000O10000000000O100000000000O10O1000000000000O100000000000000O100000000000000000001O001N101O2M2O1N3M2OobP3\"}, {\"size\": [848, 480], \"counts\": \"Znk7=di0c0@=]Ob0D=A>B>D<A?D<G:M2O2O0O10000000O100000O10O10000O100O1N2O1L4K6D;I8G8C>C=F:E=Bcg_3\"}, {\"size\": [848, 480], \"counts\": \"ioR4>li0=F7J5J3O2N1N2O2O0O1O2O0O1000001O000O101O0O1000000000O1O1O1O1O1O1O1N2O1O2N1O100O1000000001O0001O1O1O0010OO101O0O2O00001N2O3L7Cd`e6\"}, {\"size\": [848, 480], \"counts\": \"\\\\2e1kh0000000000000O100000000000000000001O0000002N1O7I;E9DXQg;\"}, {\"size\": [848, 480], \"counts\": \"[aT61me02a]OW1Vb0kN_]O`1_b0bN^]Oa1`b0cNh\\\\OLSNd1Te0cNd\\\\O0QN`1[e0cN`\\\\OP2`c0SN]\\\\Om1bc0YNX\\\\Og1ic0`NP\\\\O`1Pd0dNk[O\\\\1Vd0gNf[OY1[d0iNa[OX1ad0jN[[OU1hd0POQ[OTOLa0We0`0fZOnN=JXODoe0i1UZOfNcg0o15E:K6L4N2N2N5Ke0ZO9F9BWla5\"}], [{\"size\": [848, 480], \"counts\": \"Rh0^2Sh0O2N1O2N2N2N2N1O1O2N2N1O2N2N2N1O2N2N2N1O2N2N1O2N2N2N1O2N2N1O2N2N2N2N2N1O2N2N2N1O3M1O2N2NR]W;\"}, {\"size\": [848, 480], \"counts\": \"X5V1Zi000100O001O0000O11O10O00000001O001O000001O1O0010O01O001N1O1@a0L3N3N1O100000001O00000010O001O001O101N001O1O2N001O001O1O0100O00b0]OQTn18bkQN>B<F7K5L2O1O1O001O00010O00000001N11O000001O01OO1001O0001O01O00010O1O1O1O1O10O000000100O001O00001O00001N1000001O01O00O1O1M3L4L4L4K5K5L5K4JgP5O]oJ5L2N2N3M2O2O00O9F^`e02Z_ZO`0Dh0YO4M3O000O2O010O0001O0001O000010O00010O0001O00010O00010O00000001O01O0000010O00001O00010O1O00001O000010O0001O00000010O0001O0001O000000001O000000000000001O01O000000O2O001O01O00O10001O000O100O101N1O1K5F;I6F;FR[8KReG=^Oa0F8F;J5L5N1O101O001O00001O00010O00001O0000010O00001O01O01O0000000010O0000010O0001O0001O0001O0000O2O0M3K5L4K5M4M2N2O1000001O0000001N1001O0000O101O0000001O00000000001O0000000O10001O00000O1000001O00000O2O0000000000001O00000O10oG\"}, {\"size\": [848, 480], \"counts\": \"o8f1jh00O0101OO100000000000O10000000O100000O1000000O100000000O100000000000O10000000O10000000000000O10O100000000000000O1000O100000000000000000O100000O10000000O100000000000O11O0O1000001O4K>BTfd06bY[O9J3O0O101OO1000000001N1000O100000O10O010000000O101O00O01000000O1N2M3M3L4M3N2O1N2N2O1O1O1O1O001O1O10000O1000000O10000000O1000O10000O11O0000O10000O2O1O0N6GoS93PlF6J7J4L5J5K7K3L3O1O01N100^OlVOHUi05PWOHQi02VWOLkh0OZWOOei0O0000000000O001N2O1O1O100O11N101O000O10000000O002N1O1N1O2N2L4N200O11O000O1000001O000000001O0O2O00001O0000001N1000001O00000O2O00001O0O10001O000O2O001O0O101O001N101N10hi_4\"}, {\"size\": [848, 480], \"counts\": \"bRn2<mi09E:F9WOj0B>C<J7K4L5H7G:E:FjKUZO\\\\4ee0:N2N2N2O1O1O1O1O1O1O100O1O100O101O0000O1001O0O11O2N2N1O2N2N00000000N2003M001OOZMfZO8Ze0BQ[O9od0CX[O:ed0G`[O6dd0D`[O:`d0Ce[O;Zd0Cj[O<Vd0Bn[O<Rd0BQ\\\\O=oc0AT\\\\O>lc0@b\\\\O4^c0Kf\\\\O2Zc0Lj\\\\O2Vc0Ln\\\\O2Qc0MR]O2nb0LU]O3kb0KX]O3ib0LX]O4gb0K[]O5fb0I[]O6fb0I\\\\]O6eb0H\\\\]O8db0G]]O8db0G]]O8eb0F\\\\]O:eb0D\\\\]O;eb0D\\\\]O<eb0B]]O<eb0B\\\\]O=gb0AY]O?hb0_OY]O`0ib0_OW]O`0lb0]OU]Ob0nb0[OT]Oc0ob0ZOS]Od0^f0N2M6K5K`WS7\"}, {\"size\": [848, 480], \"counts\": \"c:h0hi0000000000000000O100000O100000O10000000O10O1000000000O0100000000000000O01000000000000O1000O100000O1000000000O0100000000000000O10000000000000O01000000000000O100000000000000O0100001O001N2O1O1O3L;Fof?6e^_OMmi0<N2O2O00000O01000000000000O1000O10000000O1000O10O10000000O10O101O4L2M3N4K^ea1:XZ^N2N101N10000O1000O100000O1000O100000000O10O1000000O010000000000O1000O10000000000000O1000000000000000000O1000O1000O1000000000O010000000000O10O1000000O01000O100000O10O10000O1000000000O01O1000000000O1000000O1000000O100000000O10O100000000000O100000000000000O010000000000O1000O200O1N2O1O1N3N2M1O1O_]Q3\"}, {\"size\": [848, 480], \"counts\": \"^nk7?`i0b0D<_Oa0A>E;D=]Ob0A?D<H8O2N10000O2O0000O1000000000000O1O1O1O1O1O1L4K5E<H7G:B=C=F<E<Dd0[NSWO3Tf_3\"}, {\"size\": [848, 480], \"counts\": \"nUn36Tj0;G6L4L5K4L4M2N2N2N2N3N2M3M3N1O0O1O1000000000O01000O1O1O0O2O1N2N2O1O1N2O1O1O100O1O2O1O0O2O0O2O001N2O1N3M2N3N2L5JQTP7\"}, {\"size\": [848, 480], \"counts\": \"_2c1mh0010O00000000O011O000000000000000000001O001N2O6J;D8GWQg;\"}, {\"size\": [848, 480], \"counts\": \"VaT6?ge0Df]OY1Ub0jNc]O^1[b0eN^]O`1bb0cNZ]O^1eb0eNl\\\\OCnMk1Ue0fNd\\\\Oi1]c0ZN\\\\\\\\Oj1dc0\\\\NU\\\\Oe1kc0`No[Oa1Qd0bNj[O_1Wd0cNf[O]1[d0fNa[OY1bd0iN[[OU1hd0POQ[OSOO`0Te0a0gZOmNXg0Z1]XOeNhg0i19F:L4M3N:E:F9G9DVac5\"}], [{\"size\": [848, 480], \"counts\": \"Sh0]2Uh0N1O2N2N2N2N1O2N1O2N2N2N2N1O2N2N2N2N1O2N2N1O1O2N1O2N2N2N2N2N1O3M3M1O1O2N1O2N1O2N3M2NSRY;\"}, {\"size\": [848, 480], \"counts\": \"a5Q1_i01O1O001O1O1O001O00100O0000001O0010O0000010O0O110O001N101M3]Ob0O2M2O1O101N10000000000001O01O10O2N1O2N1O2O0O1O1O1O1O01O0001O1O02LQon1NjPQN`0G6I6L4K300O1O1O1O1O01O001O2N8G6J3N3L4M1O2N2N2M2N4Kk]Y1HZbfN8I5L4N2N11O4K:Cked08kY[O?Ch0XO8K1O10001O00001O0001O01O001O01O0001O010O00000010O000001O01O0001O01O01O000010O0001O001O000010N11O001O01O00000001O00010O0001O01O00000001O01O000001O0000000O10001O01OO1000001O000000000O2O000O10001L3K5H9G8G:E>B_`7=Q_H>B?D:F:K6N1O100O2O00001O00001O01O01O00001O01O0001O00010O0000001O01O01O000000010O0000001O01O000001OO101L3I7K5M3M3N2O1O2O00000000001O000000001O00000O2O00000000001O000000000O2O0000000000000O2O000000001N100000001O0O10000000001O00fG\"}, {\"size\": [848, 480], \"counts\": \"W9g1ih0O100000000000O10O10000000000000000O100000O10000000O10000000O1000O100000000O100000O100000000000O1000000000O100000O10000000000000000000O100000O1000000000000000000000O010000000001N2O2M=CXQc0^OcU\\\\OFXi0R1E4M3N101O00N2N2^OTWO[OINTi0e0ZWOYOih0c0d0N2O1O1O1O101M[[`2Fkd_M<I1O100001O000000000000O010O100O1M3O1N1N3N2O1O100001O000O2O000000001O0O10001O0O101O0000001O0O1000001O1O00001O000O2O00001N101N101N1O2N1O3N^Sc4\"}, {\"size\": [848, 480], \"counts\": \"k\\\\Z3a0ji07E<D:D=E:H8G9RNVNjZOT2Pe0i1L4M4M2N2N3M3O0N3O0O2O001N1O20O1O6K1N1O00000010N1001OO10000O1000000O1000000000000O100O2O000O10aLU[OPN4n2hd0gNS\\\\Oo0mc0lN\\\\\\\\OP1dc0kNc\\\\OT1[c0mNg\\\\OQ1Yc0kNm\\\\OS1Tc0iNP]OV1Pc0fNV]OX1jb0dN[]OZ1fb0cN]]O]1cb0bN^]O^1bb0`N`]Oa1_b0]Nc]Oc1^b0[Nc]Oe1]b0XNf]Og1[b0XNf]Oh1[b0VNf]Oj1[b0TNf]Ok1\\\\b0RNf]On1^e0O010O1O10O01OO11O<D4K8GT1gNoVj6\"}, {\"size\": [848, 480], \"counts\": \"l:i0gi00000O10O10000000O01000000000O1000000000000O010000000000000O100000O10O10000000000000O01000000000O100000O100000000O1000000000O100000O10000000000O10000000000000O10O100000O1001OO1001O0000000O2O002N1O000000001O014K1O00KIPVO8oi050O2OO100O100O10OL50O3L3N100000000O2O1O0000000O102L[Ta25ak^M3N2N1O0O2O1O0000O1000O100O01O100000O100000O10O100000O100000O1000000000O1000O10001OO1000000O1O100O10O01N2N2N2N3M2O003MkVb04Qi]O4M3M4L1O00O11O000000000O010000000000O10000000000000000O1000000000O11O00001O1N101O003L2O1N2OT]Q3\"}, {\"size\": [848, 480], \"counts\": \"lnk75ji0g0YOc0^O`0C=E<_O`0B>E;D<G9M4N1000000000000O10000000O10000O100O1N2O1M3J7F9G9E<E:D>E:E=Cd0]NSWO2ie_3\"}, {\"size\": [848, 480], \"counts\": \"QWR48Tj07I9F9J4L3N3M2N2N2O3L2O3L101O2N0000000O11OO10000001N1O100O1N2O100N3M2N2N2N2O1O100O101O0O11O01O0O101O0O2O1N3M3M3M2N3N2L7J6Jlmg6\"}, {\"size\": [848, 480], \"counts\": \"i2d1lh000000000000000O10000000000000000O100000001O1O1O1O1O8Ga0\\\\On[e;\"}, {\"size\": [848, 480], \"counts\": \"fWU61]47\\\\a0Ma]OW1Yb0lN^]O]1`b0fNZ]O_1eb0dNf\\\\OISNe1We0eN`\\\\On1_c0WN\\\\\\\\Oj1dc0ZNX\\\\Oe1ic0^NS\\\\Oc1mc0cNl[O]1Vd0fNd[O[1]d0fNa[OY1bd0iNY[OX1hd0lNS[OXOJa0We0<gZOQO=KSOKoe0^1[ZOiNbg0_1TXO]NRh0d1>L3M8H5L:F5K9F6B_fb5\"}], [{\"size\": [848, 480], \"counts\": \"ch0m1dh0O2N2N1O2N1O2N2N2N2N2N3M2N2N2N2N2N2N2N2N2N2N1O2N2N2N1O2N1O2N1O2N1Ob``;\"}, {\"size\": [848, 480], \"counts\": \"o5n0bi01O1O001O00100O2N2N1O000010O01O0010O0001O01O010O0001O01O1O1O0O1D=M2M4M2O1N2O101N10000O101O0001O001O001O101N1O2N1O2N1O100O1O000001NWXi4EmgVKa0Dg0XO7K2O101O001O000001O01O1O001O0010O00001O01O000010O0001O01O01O01O000001O01O01O0000001O00010O00000010O00010O0001O1O001O0001O0001O01O000000001O01O00O1000001O00000000001O0000000000001O000O10000O2N1L4G:I6F;F:Eb`73Y_H?_O`0E9H9I6N2N201N101N11O01O0000001O01O01O0000010O000010O000001O001O01O000001O01O01O00000001O01O000000O1O2I6J6L4M4M2O100O101O000000001N100000001O0000000000001O0000000O1000001O0000000000001N100000000O2O00000O101O000000001N10000000WG\"}, {\"size\": [848, 480], \"counts\": \"f9f1jh00000000000O11N10O1000000000000000000O1000O100000000000O100000000000000O01000000000000000000000O01001N010000000000000O10O100000000000000000O10O11OO100000000000000000O1000000O10000O2O1N<D]Qc0ZO]U\\\\O0Ti0k0L3N4L10001O00000001O0O2O1O3M8H4L5L4M4HhkX2F_TgM8L100N2O2O0O2O0001O0O2O001O1OO1000O10O100O002M2N2M3N1O2N200000000001N10001O00001O0O101O00000O101O001O000O2O00001O00000O2O00001N1000010N10001N10000O101O1N10001N1O1NcY]4\"}, {\"size\": [848, 480], \"counts\": \"kl[3j0Sh0d1\\\\Od0J5M3N2M3N3L3N2L4M3K5G9F:L4M3N2M3N2N3M2O1N2O1O1N2O2N100O10000O10001O0000000O1000000O100O101N10000O100000000O100OcKn[O^2Rd0]MW\\\\O_2ic0^M_\\\\O]2ac0_Mk\\\\OY2Uc0eMQ]OW2ob0fMW]OW2ib0gM[]OX2db0fM`]OX2`b0gMc]OW2]b0gMh]OV2Xb0iMk]OU2Vb0hMo]OU2Qb0jMR^OT2na0jMV^OU2ia0kMX^OT2ga0lM[^OS2fa0kM]^OS2ca0lM_^OT2`a0kMb^OT2_a0kMb^OT2^a0jMd^OV2]a0hMe^OW2\\\\a0hMd^OX2^a0fMb^OZ2jd001O00000O10O100O1010O3L6iMgWOl1Ti0ZO:E?_Ol]`6\"}, {\"size\": [848, 480], \"counts\": \"[;g0ii00000000O1000O10000000O100000O1000000000O11O0O1000O10000000O01000000000000000O10000000O10O1000000000000O1000O100000O10000000O10000000O10000000O10000000O1000000000000O10O1000000000O1000001O001O2N1O001O2N1O2N3Mdi5K_VJ2O1L4GJTVO:ki0501O1O010O10O10O0100000000O1000O10000001N4M3LnPX21QogM5L1O000O10000O10000000000000O1000O1000O100000000000O11OO10O1000000000O01000000000O01000O100000O100000000000O10O1000O100000O100000000O0100000O0100O10000O1000O1000O10000000O100000000000000O11O00O10000000000000O1000O1000001O000000O01000000000000000001N101O1O1O1N3M2N3NUWR3\"}, {\"size\": [848, 480], \"counts\": \"Tok7a0`i0a0^Oa0@`0L3N2UOnMXYOR2Sf0eNjYO\\\\1ie0QOWZOo0]e0]OcZOc0We0ChZO?Ve0BjZO>Ue0CjZO?Ue0AkZO?Ue0@lZO`0Te0@lZO`0Te0@lZO`0Te0_OmZOa0Se0_OmZO`0Te0_OmZOa0Se0_OmZOa0Se0_OmZOa0Se0_OmZO`0Te0_OmZOa0Se0_OmZOa0Se0_OmZOa0Se0^OmZOb0Te0^OlZOa0Te0@lZO?Ve0_OkZO?We0AiZO=Ye0BiZO:Ze0FfZO5`e0IaZOJle06TZOCSf0<oYOVO_f0i0cYOhNkf0V1Z1M4L7HTf_3\"}, {\"size\": [848, 480], \"counts\": \"ncb4:Rj0;E7J5L4M2M3M4M2M3N2N3M2N100O1O10000O100000O01000O1O1O100O1O1O1N2N200O1O1N2O2N100O10001O001O0010O01O001O001O1O1O1O1O1O1N2O1O4K5H8FZWT6\"}, {\"size\": [848, 480], \"counts\": \"X3e1kh001O00O1000000O1001OO1000O101O00000000000O20O0001O0O2O2N>AVad;\"}, {\"size\": [848, 480], \"counts\": \"S\\\\U6g0Pi0m0XOaNTXOd1gg0`NVXOb1ig0cNoWOa1Ph0`0O1O1O1O0hN`MaZO`2`e0aM^ZO_2be0eMZZOZ2he0kMRZO;G?[f0\\\\OfYO2:7Uf0MYYOK_h0n05D=L4M4J6L6J5InZd5\"}], [{\"size\": [848, 480], \"counts\": \"Vi0Z1Wi0O2N1O1O2N2N2N1O2N2N2N1O2N2N2N2N3M2N1O2N2N2NSdi;\"}, {\"size\": [848, 480], \"counts\": \"a6g0hi010001O0010O02N3M2N3M1O1O1O10O01O1O000010O0001O010O000001O001O10O0001O001O0O1O1O1K6J5M3N2N3N100O100O101O0O100001O0010O0100O1O2N2N2N1002JRVOFn\\\\h44R]XK`0C`0A=D4L3O1O001O01O0001O0000010O00001O01O01O000010O01O0001O01O000001O01O01O0000010O0001O00001O01O01O001O01O000001O001O0001O01O01O0000000010O00000000O110O000000001O00000000001O0000000O10001O0O1O1O1L5D<G8F;FmZ83mdG=B?E9H9K4N2N201O001O1O00001O01O0001O001O0001O01O01O01O0000001O010O0000001O01O00000001O01O0001O0000O2M2M3J6L4L4N3M2O100O11O0001O0O10001O000000001O00000000001O000O100000001O000000000O101O0000000O2O00001O00000O10001O000000000O2OfF\"}, {\"size\": [848, 480], \"counts\": \"W:d1kh01000000000O02O000000O100000000000O10000000O1000000000000O100000O100000O11O0000O1000000000000O01000000000000000O1000000O10000000O10O1000000000000O10O1000O100000000000000O100000O10O10001O1N9FUWb0oNhi]O`0lUOGYi0n0I5N1N101O0000000000O01000O10000000000000O0100O1N2M3L4M3N3M4M5I8GWPm0NmoRO2N2O1O100001O3L5JZXU13`gjN6N101N2N1N2O1O1N2N1N3N2000000001N1000001O000000001O001O00001O000O2O00001N10001O0000001N10000O2O0000001N10001O0O101O001N2O001O0McS^4\"}, {\"size\": [848, 480], \"counts\": \"ji`3;ki0<E9F;G8H8E;J6E;I7H8L4L4L4N2M3M3M3L4K6M2F:N2M3N2N2O1N3N1O1O1O101N1O1O100O100O1O1N3M2O1O1O2O0O1000000O2O000O1000001O0000000O101O000OeK\\\\\\\\Ol1dc0oMd\\\\Oo1[c0oMk\\\\Om1Uc0PNR]Ol1nb0RNW]Ok1ib0RN\\\\]Ol1db0QNa]Om1_b0QNe]On1Zb0QNh]On1Yb0PNi]Oo1Wb0oMl]OQ2Sb0nMP^OP2Pb0oMR^OP2oa0lMU^OS2ka0kMY^OS2ga0mMY^OS2ga0lM[^OS2fa0lMZ^OT2fa0kM[^OU2ea0jM\\\\^OV2da0iM]^OW2da0gM\\\\^OZ2da0fM\\\\^OZ2ea0dM[^O^2da0aM\\\\^O`2ea0_M[^Oa2fa0]M[^Oc2ea0]MZ^Od2Pe0^MiXO\\\\1ch0C`V]6\"}, {\"size\": [848, 480], \"counts\": \"j;i0gi00000000000O1000O1000000000O100000O100000O100000000000O10O100000O10000000O10000000O0100000000O1000000000O100000O10O100000O1000O100000000000O01000000000000000O10O100000000000000000O10O1001O001O1N4M1O1O002N1NW]<MjhBLhi0`0N1O10000O01000000000O0100000O10O100O1N2N2N2H6Mbjm0NdURO2M2K5M3N2N2O1O1O0100000O100O02J7M_XU1N^gjN9M0O12OO00000000O10O1000000O10000000O1000000000000O100000000O01000000O01000000000O10O100000O1000O1000000000O10O10O10000000000O0010000000O1000000000000O10000000000O10O1000000000000000O100000000000000O1001O000O01000001O1O1O1O1N2O2M3M3NdVR3\"}, {\"size\": [848, 480], \"counts\": \"nok77ji0b0_O?]Ob0F:C>A>A?@`0E;H8N3N1O100O100000000O0100000000O001O1O1O1O2L3K6F9H9D<B=C?D;E?_Ooe_3\"}, {\"size\": [848, 480], \"counts\": \"``l47Yj02N2N002N1O1O0000000000001O000000000000001O0000O10000O1001O0000O10000O11OO1000000O1O100O1O1O1O1N2O1MShV6\"}, {\"size\": [848, 480], \"counts\": \"h3a1oh01O100O0000000O101O01O000000000000001O000O01O11O00001O001O002M9Gj0QOXVa;\"}, {\"size\": [848, 480], \"counts\": \"VPW65mg04UZO3SNE]g0=[ZOf0VNSOdf08U[Og1Td0YNi[Om1Sd0TNl[Om1Sd0UNj[Ol1Vd0_N^[Ob1bd0aNZ[O`1fd0dNU[O[1nd0eNP[O[1Se0gNiZOW1[e0iNaZOCI;ke06UZOYO?3ce0i0eYOTOQh0_18H8E?H7F=]OXVOJZj0OTZd5\"}], [{\"size\": [848, 480], \"counts\": \"ei0k0fi0O1O2N2N2N2N1O2N2N2N2N1O2N2NSXP<\"}, {\"size\": [848, 480], \"counts\": \"n6f0ji00O2O2N3M2N1O2N2N001O1O010O00001O1O000010O000010O001O000001O1O00001O010O00001O00000010O00O10001N1O1N2M3L5L3O1N200O101O00000001O001O01O3N0O014JYhf4`0TWYK7K6H8I5N3L3N3N000O1O1O010O00010O001O0010O0001O01O01O000010O0001O0001O0001O01O0001O01O0001O000010O01O00001O010O0000000010O00000000001O01O000000000001O000000001O000000010O00000O1000001O000O100O2O0L5E:J7D<HmZ8D[eGe0[O;B?H8I6N2O101N101O0010O000001O01O01O00000010O0001O0000010O001O000010O000001O0001O0000010O000000000O1N3H7L4L4N2M3O2N11O00000000O2O0000001O0000001O0000000000001N10000000001O0000000O10001O00000O101O000000000O2O00000000001O00ZF\"}, {\"size\": [848, 480], \"counts\": \"b:e1kh00000000000O11O00O10000O010001O00O10000000000000O100000O1000000000O010000000000000000O10000000000000000000O100000O10000O100000000O100001OO100000O100000O100000000000O100000O1000000000001O0O2O1O5iNiVOh0ijc0DZU\\\\OHYi0l0J4M3N100000000000000000O02OO10000000O10O0100O1001O0000O100000000000O2N2N4K4L5K6K4K5K5Kg^d2M]a[M7I3N5K1O1O01O001O0O2O0O10001O0O2O001N1000000000001O000O101O001N100O2O0O2O1N2O00cX]4\"}, {\"size\": [848, 480], \"counts\": \"cU_38Sj06H7K6L4J5L5K4M3M3L4L5K4M3L5L3L5M2M4K4N3J5L4L5L3N3L3M3N3K4L4K6L3M4L3N3M2O1O2N1O1O1O2O0O101N100O101O0O100O2O0O100O2O0O2O0O1O1O1O2N1O1O2N1O101O0O`La[OQ1_d0hNl[OT1Td0gNW\\\\OT1hc0gNa\\\\OU1_c0hNg\\\\OV1Xc0gNm\\\\OW1Sc0gNP]OX1Pc0eNT]OZ1lb0cNX]O\\\\1hb0aN\\\\]O^1db0`N^]O`1bb0_N`]O`1`b0_Nb]O`1^b0_Nc]Oa1]b0^Nd]Ob1\\\\b0]Nf]Ob1Zb0]Ng]Oc1Yb0\\\\Ng]Oe1Zb0XNh]Oh1Xb0VNj]Oj1Vb0UNk]Ok1Ub0TNk]Om1Ub0RNl]On1Ub0nMn]OR2Rb0mMn]OT2Rb0lMn]OT2Sb0kMl]OU2Ub0jMk]OV2Wb0iMh]O`1oMXN[d07f]Oh0jc0WOW\\\\O:Xd0Fg[O8]d0Fb[O2dMFmf08_[ONmd01S[OLQe03mZONTe02jZO0Ve00hZO1Ye0OfZO2[e0McZO5]e0KcZOMhM4SR9LVhG5K3M4B=L4002M2O0N3N1O2M4L4KRU\\\\5\"}, {\"size\": [848, 480], \"counts\": \"V<i0gi00000000O10O1000000000O100000O1000000000O11O000O01000000000O0100000000000O10O10000000O1000000O10O100000000000O10000000O1000000000O10000000O10000000000000O100000O100000O10000000000000000O1000O11O1O1O2M2O002M3NX]<6_bC4N010O1O010O100000O1000O010000000000O10O10000000O100000O100O01O1N2M3K5N3L\\\\TQ1OeknN3M3M4N1N2M3N2N1O2O1002N01OO11O00O100O010O2N1N3M2O3K6JbXU14UgjN8O2O000O10000000O100000O1000000O1000O1000000000000O0100O01000000O10O10000000O01000000000000O10O1000000000000O1000000000000000000O1001OO1000000O100000000000O10O20O01O1O1O2M2O1N3NZVR3\"}, {\"size\": [848, 480], \"counts\": \"ldm7h0Yi0`0A?C<B?C<G9@`0D<A?N2O2O0O10000000O10O10O1000000O100O1O1O1N3L3M3I8E:H9E;A`0C>Ce0UOlj^3\"}, {\"size\": [848, 480], \"counts\": \"ZjQ67Sj0;H5K5M2L4M2O2N1O2N1O1O2OO10O100O100O100O01O10O01O10O01O001O1O100O1O10001O01O2N10O0O12N10O10O01O001O100O1O2N1O2N1N3N2N1M5K8E]`g4\"}, {\"size\": [848, 480], \"counts\": \"\\\\4e0ki01N3N3L4^VOWOWi0S1N2M2N2O1O000000000O10O11O000001O00O11O0000000O10001O1N103L:E\\\\a_;\"}, {\"size\": [848, 480], \"counts\": \"PU[6;Rj09I5K5iMUOTYOOg0n0Tf0VOmXO4l0h0Uf0[OeXO3R1d0Xf0LeYO3]f01^YOGkf0>oXOZOZg0l0^XOSOeg0V1oWOhNVh0c16J7G9M6H6POhVO:bYd5\"}], [{\"size\": [848, 480], \"counts\": \"li0d0mi0O2N2N2N2N2N1O1O2N2NSbS<\"}, {\"size\": [848, 480], \"counts\": \"R7R1^i000001O001O001N101O1O01O0001O00001O00010O00001O00000001O010O0000001O001O10O01O00001O00001O00000000001O0O1O1O1N2N2M3L4N3N1O1O1O2N100O1000001O0000YUi1NajVN>I0O21M2O101N1O1N2N2O1M4M2NbPb2`0kn]M=[VO[Olh0X1J5N2O0010O01O001O00000010O01O00010O0001O01O00001O01O01O01O01O000010O0001O01O01O000000010O00001O01O0001O01O0001O000000010O00001O0001O01O00000000O2O0000000000001O0001OO10001O000000001O000O1O2M2L4G:I6E<Ei`7E^_Ha0D;E9C>G8L4N3N101O0O110O00001O00001O01O01O00001O01O0001O00010O00001O0001O01O00000010O0001O0001O000000000O1J7I6L4L4N2O101N10000000001O00000000001O0000001O00000O10001O0000000O101O0000000000001O0O100000001O0O100000001O00000OWF\"}, {\"size\": [848, 480], \"counts\": \"f:e1kh0000000O100000O100000O1000000000000000O100000000000O10000000000O100000O1001OO10O1000000000000O1000000000000000O100000O10000000000O10000000000000O1000000000O1000000000000000O0100000000O1000001N5Kj0TOmPc00[U\\\\OH[i0j0L7G6N2N0000000000O10000000001O000O2O3JSf^2TOjZaM4M2O0O10000000O02O00O01O100O001L5L3M20100000O2O0000001O0O101O00001O0O101O0000001O0000001O0O2O00001O001O0O11O01N1000001O000O2O000000001N10001O0O2O001O1N_YX4\"}, {\"size\": [848, 480], \"counts\": \"dYZ37Wj03N2M3M2N3M2N3M3N1N3M2O2M3N2N2M3N2M2O1O2M2O3L3N2M2O2M3M3L4N2L4M3M2N3M3M2N3M3M3M2N3M3M2M4M2N3M2N3M2N3M2N3M2N3M2O1N3N1N1O11N1N2N3L3N2O1M4N2N1O2M2N3J6ZNe1K6N2N101O100O1O001O1O1O001O1O1O100OfZOgN^a0Y1V]O4jb0KR]O:nb0El\\\\Ob0Tc0]Oh\\\\Oh0Xc0WOe\\\\Om0[c0SOd\\\\On0\\\\c0QOd\\\\OP1\\\\c0oNe\\\\OQ1[c0nNf\\\\OR1Zc0nNf\\\\OQ1[c0nNf\\\\O>ZNiNQe0h0e\\\\O9Ud0Fl[O6Xd0Jh[O3[d0Le[O1_d0Nb[OMcd02][OKgd04Z[OHkd07T[OFPe0:nZOCWe0=iZOAYe0>gZOBZe0>fZO@]e0>cZO^Obe0b0]ZO^Ode0a0\\\\ZO_Oee0a0\\\\ZO\\\\Ofe0d0\\\\ZOYOfe0e0\\\\ZOWOhe0h0Q2O1N2O1O011N001O0O110O1O001O1O1O101N101O0319C0O02N001O1O2M2N4J6J^mR5\"}, {\"size\": [848, 480], \"counts\": \"Z<i0gi000000000000O0100000000000O0100000000000000O10O100000000000O10O1000000O0100000000000000O1000O1000000000O10000000000O0100000000O10O10000000000000000O1000O10000000O10000000O1000O100000000000000O101O001O2N1O2M3HmUOOcW=5\\\\bC6N200M210O10O010000000O1000O100001O0000O02O3M3M2N3L3MgZ[29PedM5L1N100000000000O1000O10O1000O100000O10O10000000000000O1000O100000000000O100000000000O10000000O1000O10O11O00O10000000O10O1000000O010000000000O10O1000O100000000000O1000000000000O1000O10000000O10000000000000000O100000O10O100000000O2O1O001O1N2O3L5KTaP3\"}, {\"size\": [848, 480], \"counts\": \"TZo7e0[i0a0^Oa0B?D;G9E;XOh0I7E;M3O1O2O0O10000000O10O10000000O100O1O1N2N3L3L5J5G:F:C=@a0Aa0_Oe0UOkU]3\"}, {\"size\": [848, 480], \"counts\": \"Z\\\\^61ni0c0I6M3M3N1O2N2O0O2N1O2N1O1O1O100O100O01000O10O00010O001O1O1O1O1000O0100O10010O00010O13M1OO001O001O2N2O1N1O1O1N3N2M4Lf0XOh]]4\"}, {\"size\": [848, 480], \"counts\": \"c44[j02O2M4L9H5K=B6J3N000O10000000000000010O00000000O1001O00O101N1O1O2N103L5L9DSl];\"}, {\"size\": [848, 480], \"counts\": \"UXV66Yi04QWO<dh0m0M2O2M2N2N2N2N1O2N1K6O0O1OO0_NXXO=jg0^ObXO6eg0Di1EXhf5\"}], [{\"size\": [848, 480], \"counts\": \"ki0e0mi0N2N1O2N2N2N1O1O2N4LRbS<\"}, {\"size\": [848, 480], \"counts\": \"Q7R1^i01O001O00000O2O00001O00001O0000010O1O0001O01N11O000000010O00001O00000010O01O001O0000001O00001O000000001N1O1O1O1M3N3L3N2N2N2O2O0O1O100O2O1O00001OfZh14QeWN8J4N2N2O1O1O2O8G7I1O10O000001O100O00000001O0001O00000001O00000001O00010O001O1O1O10O01O00010O0001O1O001O001O00001O000000000000000O1M4I6I7N2K5K6K4LTk5LPUJ5L3O1M202O010nZf02kdYOk0VO6J3N20001OO1001O01O00000000001O0000001O00000010O0000010O00001O01O01O0000100O001O001O100O1O2N001O01O0001O0001O0001O001O000001O0001O01O00000000001O00000O100000010O00000O101O00000000001N100O2M2N2L5F9H9D=Df`7NX_H`0D;G8E;H9J5N3N101O000000001O001O000010O0001O01O01O00001O01O0001O0000010O00001O0001O01O0000000010N1001OO2M2I7K5K5M4N1O1000000O2O00000000001O0000000000001O000000001O00000O10001O000000000O101O00000000001O0O11O0000O2O000000XF\"}, {\"size\": [848, 480], \"counts\": \"d:e1kh00000O100000000000O010000000000000000O10O100000000000O1000O1000000000O10000000000000O1000000000O100000000000000000000O100000O10O10000000000000000O10000000000O10O1000000000000000O100000000O101O2N9Ff0QOSQc08QU\\\\OMZi0j0H8J5N0O2O0000000000O02O00O10O10O01000000000O2OO11O1O00000O100000O10000000O100000000000000000000001OO100000O10000000O100XOoVO1Qi0NSWOOmh00TWO0lh00VWOOih00YWOOgh01YWOOgh01YWONhh01YWOOgh01YWOOgh00YWO1gh0OYWO1hh0MXWO5hh0HZWO8fh0F\\\\WO9eh0E]WO;ch0C_WO=Zi000O1000M1O3N200O1O001M3N2N2N2N2N101M201O02O0O2OO1000^OlVOHUi05PWOHPi06TWOGoh01YWOMei000O1N3N1000ifY6\"}, {\"size\": [848, 480], \"counts\": \"oUj3=Qj05K3N1N2M3O2N1N2O1O1N2O2M3M2O2N3L3N2M2O00N1O2O000O20O1O0000100O1hXO\\\\Nee0e1XZOeN_e0\\\\1`ZOgN^e0Y1_ZOlN_e0T1_ZOPO^e0Q1_ZOSO_e0n0`ZOUO]e0m0bZOTO\\\\e0m0bZOWO[e0j0dZOZOWe0h0hZO[OUe0e0kZO^ORe0c0mZO_OQe0b0mZOBPe0?P[OBnd0?R[OCld0=T[OEjd0;V[OFid09X[OHgd08Y[OIfd07Z[OJed04^[OLad02a[O0^d00a[O1^d00b[O0]d00c[O1]d0Nc[O3\\\\d0Le[O5[d0Jf[O6Zd0If[O8Yd0Hg[O9Yd0Gg[O9Yd0Gg[O9Yd0Gg[O9Yd0Fh[O:Xd0Dj[O<Vd0Dj[O<Vd0Ck[O=Ud0Bm[O=Sd0Bn[O=Sd0Bn[O>Sd0Al[O`0Td0_Om[Oa0Sd0]Oo[Ob0Sd0]Om[Oc0Sd0\\\\On[Od0Sd0[Om[Oe0Sd0ZOn[Of0Sd0YOm[Og0Td0XOl[Og0Ud0XOk[Oi0Vd0VOj[Oj0Vd0UOk[Ok0Vd0TOj[Ok0Xd0TOh[Ol0Xd0TOg[Ol0Zd0SOg[Ol0Zd0SOg[O<jd0DU[O3Ue0LlZO1We0OhZOO[e01eZOFde0:\\\\ZO@je0?WZO]One0b0RZOYOTf0f0lYOWOXf0g0j1O1O1O2N1O1N102N001O1O100O1N201N1N3M3NhUOOTj063J3NSU_5\"}, {\"size\": [848, 480], \"counts\": \"W<i0gi000000000O1000O1000O11N10O10000000000000O0101OO100000000000O10O1000000000O10O10000000O10000000000O100000000000O10O10000000O1000O10000000000000O100000000000O1000O100000000000000000000000O1000O11O001O1O1N2O2N2N6J1O001O001N100000000000000O01N2E;O1O001O0O2O1O1000O1000O10O10000O10O10O1000000O10000O1000O2O00O100000000O100000000O10000000000O1O1O001000O01O10000000000O100000000000O100000O10O01O001O100N2O1O100O010O101N10O10O10O10O101OO100O2N2O0000000O2N10001O0O2O0O2O001O001O00000O100000O1O1O2L3N2ORQ`10in_N7M2O2O0O10000000000000O1000000O10000O1000000000000O10O100000O100000000000000000000O100000O10000000O2O1O2N1O001O4J4Mgfo2\"}, {\"size\": [848, 480], \"counts\": \"aTP8e0]i0`0^O`0D=F9@`0\\\\Od0D<C=H8N3N1O100O2O00O100000000000000O100O1N2M3N2M3M4F9G:D<D=C>Aa0^OlU]3\"}, {\"size\": [848, 480], \"counts\": \"Xg]6>ni05K4M3N2O2N1N3N2N1O1O1O100O2N100000O10000O1O100O10000O100O100O1000001O0002N2O0O10O01O1O010O01O1N101N3M3M3M3L6IP]a4\"}, {\"size\": [848, 480], \"counts\": \"Rd26Yj04L8H6J?A7J1N1000000000000000000000000000000000O2O00000000001O0O2N8C`l];\"}, {\"size\": [848, 480], \"counts\": \"a[Z6X1Qi08XOiNPXO\\\\1ng0hNoWOZ1ee0]N\\\\\\\\OW2bc0lM[\\\\OT2fc0nMW\\\\OS2ic0PNS\\\\OP2oc0QNn[Oo1Td0_N\\\\[Oa1fd0bNU[O^1ld0fNoZOW1Ue0mNfZOBD7ke0=ZZOVO9Mfe0Q1kYOoNgg0S1RXOmNRh0^1;M5B=L4M7I8G:EiZ_5\"}], [{\"size\": [848, 480], \"counts\": \"Pj0`0Pj001O1O2N1O2N2N2NUWU<\"}, {\"size\": [848, 480], \"counts\": \"l6S1]i00000001O000O10001O00001O00001O0010O000000010O01O000000010O0001O00010O001O001O00001O0000010O0O1000001O0N2N2N2N2M3O1M4N1N2O1O1O2N10000O2O00001N2N_Vd1O]i[N8K3N3M2N4M1O2O2N2N2N5K3M2N2O1N2N001O1O00010O0000000001O0000000000001O000001O010O001O1O100O1O001O01O010O001O00001O1O0000001O00000O11O0000O2N1N2H8K4N3L5J6K5L4GVV47iiK3M2N3L3N200002N7A^`e0b0T_ZOk0VO6I5M21N1O11O001O01O0000010O0001O01O000001O010O000001O0001O0010O000001O001O010O0000001O00010O0000001O01O01O00010O001O0010O000001O00000001O000000000000001O0000001O000000001O00000000001O000O1O2N1K5G:I6A`0Ci`7KY_Hc0E9C<F9G9K6N1O100O2O001O0001O01O000010O0001O01O0001O00001O01O0001O00001O01O01O00000010O01O00000001O0000001F9K5J6N3M200O100000001O000000000O101O0000000000001O00000000001O0O100000001O00000O10001O000O10001O00000O101O000000]F\"}, {\"size\": [848, 480], \"counts\": \"`:d1lh000O1000000000O10000000O1000000000000000O100000000000O1000O10000000O100000O1000000000O1000000000000O1000O1000000000O10000000000O100000O100000000000O100000000O100000O10000000O1000001O0000O010006Hj0TOdkc0N`Z[O2Yi0k0I3O2N2O1N100O1000O101O001O00000O10O100O0011O00O1O1000000000O01000O10000O11O00O0100000000000O100000000000O01000000000O01YORWOLnh03TWOLlh03UWOLlh04UWOLjh03XWOLhh04XWOLhh04XWOLhh03ZWOLfh04ZWOKgh04ZWOLfh03[WOMdh04\\\\WOLch04]WOLdh03]WOMch00`WO0`h0NcWO1]h0KfWO5^h0EeWO;Xi00O1N2O002N1N1O3L4M2M3N1O2N2N2N1N3O100000O10001O0@lVOETi07QWOFQi04UWOLkh0M\\\\WO2ai000O101N010000N2O1O1O1O1000O100000000000O10000O1O1M3M3M3N2O1O10O10000000001N1000001O0O10001O0O11O01O000O2O00000O2O00000O2O001O001O001O000O2O0O10001O000O2O000O2O1N101N10VTY4\"}, {\"size\": [848, 480], \"counts\": \"fWe34Yj05J5M3M3M2O2N1O2N2N1O2N1O1O2N1O2N1O2O1N101N2N2N101N1O2N2O0O2N2O0O2O0O2N2O002N1O1N2O1O1N2O1N2N2N2O1N2N3N1N2O1N101O1N1O2O1N101O1N101N101N3N1N1000N1O2O1N101O1N101N2O001O1O100O001O1O1N2N101N2O1O10OQOYXOVOhg0g0^XOUOcg0i0aXOTO`g0k0bXOSO_g0k0dXOSO]g0k0eXOSO]g0k0fXOSO[g0l0fXOSO[g0l0gXOSOXg0m0iXOROXg0m0jXOQOWg0n0kXOQOUg0n0nXOnNTg0Q1V100O0010000O100O100O10000O1000O01000000O2O000O10000000001O1N2O001O1O1N2O2N1O1O1O2N1N2O1O1O1O1O1OTdd4\"}, {\"size\": [848, 480], \"counts\": \"S<i0gi0000000O0100000000O01000000000000O100000O11O00O010000000000O10O1000000000000000O010000000000000O1000O10000000000000O010000000000O1000O10000000000O10O100000000000O01000000000000000000000O10O100001N200O2M3N3M4L4JQc;Nf\\\\D?M1O1O010O1O1O10O10000000O10000000O1000O1000O100000000O01000000O100O01000000000O1000O1000000000000O010000000000O10O1000000000O1000O1000000000O10O1000O100000O01000000000O1000000O1000000000O10O1000000000O10O1000000000000000O1000O100000000O1000000000000O11O00O011O00O10000000O10000000O100000O100000O1000O0100000000000O10000000O1000O010000000O10O10O100000000O0101O0O010000000O10O1000O1000000000O1000000O1000000000000O1000000000000O010000001O000O100000000000000O100000000000001O1N3N002M4M[aP3\"}, {\"size\": [848, 480], \"counts\": \"\\\\TP8d0\\\\i0b0_O?F;D;B>@a0_Oa0B=F:N2O1O100000000O0100000000000000O1N2O1N2N3M2K5H8I8F9E<C>@`0@g0SOf[\\\\3\"}, {\"size\": [848, 480], \"counts\": \"Zm^73\\\\j04M1N2N3M2N2O2M101N2O1N101O001O001O1O001O001O3N0O002N6gVOhNnh0_1N01O001N1O2O1O1M3N2M3N2L5L4L5IaTj3\"}, {\"size\": [848, 480], \"counts\": \"lc28Uj08J8I7H?A3N001O000000000001O0000000000O010001O0000000000001O00001O5Ic0VOjQ];\"}, {\"size\": [848, 480], \"counts\": \"jaY6<Vi0P1SOeNZXOc1Ue0^Nb\\\\O7RN^1[e0]Nb\\\\O7oM^1_e0]N`\\\\OV2`c0lM\\\\\\\\OV2dc0lMY\\\\OU2gc0oMU\\\\OP2lc0VN[ZOBY1Y2\\\\d0`Na[O`1ad0bN[[O^1fd0eNV[OX1od0jNmZO@B<he0:]ZOWO=Fce0V1jYOROeg0V1oWOiNVh0W1jWOcN\\\\h0\\\\1>L7E;F8K;CeU`5\"}], [{\"size\": [848, 480], \"counts\": \"]i0S1^i0O2N1O2N2N2N1O1O1O2N2N2N2N2N2N2N2N2N2NbSl;\"}, {\"size\": [848, 480], \"counts\": \"g6S1]i0001O0000001N10001O010O00001O1O010O000000001O01O0000000010O0001O00001O001O0010O0001O000000001N1000001O0N2N2N2L4N3M2N2N2O1O1O10000O101O00002M2KbVd12Wi[N;L3N1O2M3M3N2O2N2N2N1O2N1O3N3L2N1O1O00001O01O0001O01O01O00000001O01O00000000010O1O001O1O100O1O001O0001O1O00001O1O001O001O00001O0O100001O00O100M3G9L3M4L5K4L5LgoQ1FVPnNc0J3L4L5N10000000001O00010O000010O01O001O01O01O0010O01O1O010O002N1O1O2O0O2N001O3M4L3N1N2N3M2O0O001O00O1O20O1O0001O01O000000000010O0001O0001O000000000000000O10001O10O000000O2O000000001O0000000O1O2N1J7H7J7@`0Ch`7K\\\\_Hb0C9E;F9E<K5M201N1000001O00001O0010O00000001O0000010O00001O00010O0000001O0010O000000010O000001O0001O00000N2G9K6K4M3O1O101O00000000001N10000000001O0000000000001O00000O101O000000001O0000000O10001O0000000O101O0000000O100000cF\"}, {\"size\": [848, 480], \"counts\": \"[:e1kh00000000000000000O10000000O10000000000000O010000000O1000000000000O1000O100000000000000000000000O10000000O10O10000O1000000000000O10000000O100000O1000000000000000000O10O10000000O101O0000O1001N107Hn0kNYkc0a0[T\\\\Oc0^O4K4M3N2N0100000O11O0000000O100000000000000O10000000000000000000O10O1000000000O101O00O1O1O10000O01000O10000000000O100O1O1N1O3K4GeVOYO_i0f06O1N2O001N3M2N3M2M3N3LegV7\"}, {\"size\": [848, 480], \"counts\": \"mn\\\\6:oi09M1N1O2N2O1M3cLTOS]OP1jb0SOS]Oo0lb0SOR]On0nb0ROQ]Oo0ob0QOn\\\\OR1Sc0nNk\\\\OS1Uc0mNi\\\\OV1Vc0kNg\\\\OW1Yc0jNe\\\\OW1[c0iNf\\\\OV1Zc0jNf\\\\OW1Zc0hNf\\\\OX1Zc0iNe\\\\OX1Zc0iNe\\\\OX1Zc0hNe\\\\OZ1[c0fNa\\\\O^1^c0cN^\\\\Oa1bc0_N[\\\\Oc1ec0^NW\\\\Of1ic0YNU\\\\Oi1kc0XNR\\\\Oj1nc0WNo[Ok1Qd0VNl[Ol1Ud0TNh[On1Xd0SNc[OQ2^d0oM][OU2dd0kMS[O]2md0dMnZO`2Se0`MiZOc1\\\\OTNJN42ne0<^ZO`1hf0o06K5K6L3M3M4L3N2M3M4K8J7H8I:F6K4L2N3M7H4L]g_4\"}, {\"size\": [848, 480], \"counts\": \"P<g0ii0000O1000000000O10O100000000000O100000O100000O10000000O100000O01000000000000000000000O01000O1O1N2O10000O1N110001O0O101O00001N100000001O0000000O10001O1O000000000O10O10000000O10O10000O10000O100000001N3N2N1N3N2N7H4M]h:0XWE>J3O10O10K@YVOa0fi041000000O100000O1000O1000000O10O10000000O100000000000000000O1000M3N2L5M1O2N00N22O1N2O1N2N2001OOgZX30WegL:J0O2N1N2O1O1N10000000O0100000O0100000O1000000000000O10O100000000000O100000000000000O100000000000O01000001O1O002N1N2O2NS\\\\Q3\"}, {\"size\": [848, 480], \"counts\": \"VTP8f0[i0a0@>B>F;@?E;\\\\Od0E;G9M4N1O1O10000000000O100000O10000O1O1O1O2L3L4L5G8I7F;E;B`0@`0Bd0]NPWO71HkT]3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Yi14Wj0:J9H;E;D3N0O101O000000000000000000O11OO100000000000001O000000001O4L8Edl];\"}, {\"size\": [848, 480], \"counts\": \"^R[61^j02N2N2O001O1kWOHmN0Rf0?VYODW12ZONZf0j0XZOCROFef0i0VZO6ke0MPZO3Rf00hYO[Oof0l0hXORO^g0P1]XOnNgg0U1SXOjNQh0]1kWO[N\\\\h0b1;J5H=G:A?EhU`5\"}], [{\"size\": [848, 480], \"counts\": \"Ri0^1Ti0N2N2N2N2N2N1O1O2N2N2N2N2N2N2N1O2N2N2N2N1O2N2N2NRog;\"}, {\"size\": [848, 480], \"counts\": \"e6S1]i0001O0000000O2O001O10O01O00001O0010O00000001O000001O0001O01O0000001O00001O1O01O0001O0000001N10000O101N1O1M3M3N2N3M2N2O1N2O101N1000001O1N11O00O5Ih[c15Rd\\\\N7J5L4L4M3M4N5J3M8H3MO101O0000000001O10O00000010O00000000100O000000000001O00000001O010O1O00100O001O01O1O4L7I6J2N1O2N1O1O3M2N2N4K7J4Jfj`11YU_N5L3M2O2N1O100O1O001O1O1O10O01O010O001O00010O000010O0001O0010O01O00010O001O1O2O1N2N2N2N3M3M3N2M4L5K3N2M1O1O1O001O01O00000001O01O00000O10001O01O00O10001O000000001O000000001O00000O101N1O1M4M2H9H8B>Cg`7M[_H`0C;G8E<G8K6M2O2N10010O00001O001O0000000010O01O00001O01O0000010O000001O000010O00000001O01O0001O0001O00000N2I7K6J5M3N200O101O000000001O0000000O101O00000000001O00001O0000000O10001O000000000O10001O0000000O10001O000000000000fF\"}, {\"size\": [848, 480], \"counts\": \"Y:e1kh000000000000000O010000000000000000000O10000000O1001N10O10000000O100000000000O1000O10000000000O100000O10000000000000O1000000O1000O10000000O10000000000O10O1000000000O100000000O0100000O100000001O3L;B\\\\fd03bY[O8G5M3N2N100000000000000O10O1000O100000000001N01001O000O100000O10000000O100000O100000O10000000000000000000000001OO10000YOQWOMoh01SWOOlh00VWO0jh01WWOMjh02WWOMhh04XWOKih05WWOKih05WWOKih04XWOLhh04XWOKih05WWOKih05WWOKih05WWOKih05VWOLjh04WWOKih06VWOJjh05WWOKih04VWONjh01TWO2nh0CRWOI0e0oh0^OQWOOLi0]i0WOcVOh0]i06N22N0N2000O00100000O4M2N4J6JSUf6\"}, {\"size\": [848, 480], \"counts\": \"mVU5d0fi07I7K5M3M2O1N2N2N2N3N1O2M2M3N2L5K4L5K4L5F:J5M3O2O11M3N2O001O010O01O100O010O0001O00000O100O001O1O0N3O0N2M3N2M4M2N2O100N2O1N2M3N2M300O1O1N1O2N2N2O1O1N2N101O1O100O1O1O1O010O1O10O10O10O010O100O100O1O1O1O0000N3J5K5M3L3O2M2O1O10M3N04K6L4M5J_dV4\"}, {\"size\": [848, 480], \"counts\": \"n;h0hi0000O10O1000000000O10O10000000000O100000O1000000O1000O1000000000O01000000000O10O100000000000O1000O10000000000O100000O100O01000000000O1000O1000000000000O01000000000000O01000000000O10O1000000000001O1N3N1O2M5L9FbW=?ngB2N2O1O1O1O0001000001O0O0101O00000000000O100000000O10O1001O00O100O00100O2O000O0100000O1O1000O0100O1O10000O100O100O1O1000O01O100O10O0001O1O1O10000O1000000O1000000Oagl24[XSM2O3M2N1O000O101O0000000000O10O100001OO0100000000O1000000000000O100000O10O1000001O002N1N3N4LT\\\\Q3\"}, {\"size\": [848, 480], \"counts\": \"TTP8e0_i0>_O`0C<D=@?A>K6ZOf0D=L3O1O101N1000O1000000000000O100O1O1O1N2N2M3M4I6G9G:C>@`0B?Dl0aNk[\\\\3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Si1<Sj05J9I9F;F2M2O0000000000000000000000000000000000000001O0O10001O1O2N6Ig0TOWl];\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}], [{\"size\": [848, 480], \"counts\": \"oh0a1Pi0O1O1O1O3M1O2N1O2N1O2N2N2N2N2N2N1O2N2N2N2N3M1O2N2N2N2Nb_e;\"}, {\"size\": [848, 480], \"counts\": \"d6R1^i01N100000001O0000001O001O000000000010O01O0010O01O00000001O00010O0000001O001O00010O0000001N1000001N10000M4K4N2M3M3N2O1O2M200000000O101O2M2O0000fPe1NSoZN<K4M4M2N2N6K8G6J3MO100010O001O0000010O00010O1O1O0000010O1O1OO10000O101O0001O000010O01O001O1O0001O01O01O001O001O1O001O0O101O0000000001O0000O1O1L4J6M3L4K6K4M3J7Jh[3L]dL6K4M3M2M3O2O0O20M3^OWVO:m_e0MoY[O`0E>]VOkNPi0c1E5N00L5H8J6N2O2M2N2O1N2M4M2O1O1N3O0O2O0O1000001N1000001O00001O01O0001O0001O001O01O01O0010O00000O101O000001O00O2O0O1000000000001N1001O000000000001O01O001O10O02N01O01O001O1O0010O01O1O00100O001O10O001N2HSo93kPF8B?H7L5L2O3M1N3N3M2N4M3L3M3M1O1O1O0010O000000010O000001O00001O01O000001O0000010O0000010O000000O1O1N3J5J6L4M3N201N10000000001O0000000O2O000000001O0000001O000000001N1000000000001O0O1000000000000O2O00000000001O0O10hF\"}, {\"size\": [848, 480], \"counts\": \"X:d1lh0000000000000O10O10000000000000O10O11OO10000000O10000000O10O100000000O100001OO100000O1000O1000000000000000000000O010000000000O10000000000O01000000000O1000000O100000O100000000000O100000000O2O002N5I=Cgkc0ZOlT\\\\Oe0gUO_O1OXi0W1I3O1O0O10000000000O1000O10O1001N10000000000O010000000000000O1000000000O1000O10000000000000000000000O10O1000000000000000WOSWOOmh00WWOMih03XWOLhh04XWOKih05WWOKih04XWOLhh04XWOLgh04ZWOLfh03[WOMfh02ZWONgh00YWO1hh0MYWO3gh0LZWO4fh0I]WO7ch0F`WO9bh0CaWO=Yi0O01N2L4O1N2O001N2N2N1O2N2O1M201N3N0O2O10O101O1O00001]OkVOIVi02PWOLRi0KVWO3fi0N001O0O0100000OO2O1O1O01000001N11O000000O01000O3K`Ui5\"}, {\"size\": [848, 480], \"counts\": \"Y`R41_j03L1QN3[YONcf04\\\\YOLdf05[YOLcf05]YOLaf06^YOJaf07^YOJbf06^YOJaf07_YOJ`f06`YOJ_f07`YOJ`f06]YONaf04[YOOef03PYO7nf0MTXO[O033OMg0lg0e1O2O00001N10gNbXO@^g0>gXO_OXg0a0lXO\\\\OTg0c0PYOZOof0g0UYOVOif0j0ZYOTOff0k0\\\\YOTOcf0m0]YOTOaf0m0`YORO_f0o0aYOQO_f0n0bYOSO\\\\f0n0dYOROZf0P1gYOPOWf0P1jYOPOVf0P1kYOPOSf0Q1nYOnNQf0R1PZOoNne0R1SZOmNme0S1SZOmNle0T1TZOmNke0S1UZOmNje0T1WZOlNhe0S1YZOmNfe0T1[ZOkNee0U1[ZOlNce0U1]ZOkNce0U1]ZOkNbe0V1^ZOjNbe0V1^ZOjNae0W1_ZOiN`e0X1`ZOgNae0Y1^ZOhNae0Y1_ZOgN`e0Z1`ZOeN`e0\\\\1`ZOdN`e0]1_ZObN`e0`1aZO^N`e0b1_ZO_N`e0b1`ZO]Nae0c1`ZOZNae0g1_ZOXNbe0h1^ZOVNde0j1\\\\ZOSNfe0n1^11O0O1O1O100O2O0O2O00001O001O010001O1O1N1O101N1O2O1N1O1O1O10O01O010O001O1O001O2N1O2N1O1O1O1O1O1O1O00001O1N10001N2O1O1N2O0O2O1N2N3L4M2M_Rl4\"}, {\"size\": [848, 480], \"counts\": \"l;h0hi00O10O10000000000000O01000000000000000O10O100000O100000O10000000O100000O10000000O1000O1000O10O10000000000000000O100000O10O10000000O10000000O10O100000000O1000O1000000000000O1000O10000000O1000000000001O1N3N1O3M]R>LdmA5M2N1O1N2O1000000000O100000O10000000O01000000000O1000000O0100000000000O10O10000000000O100000O1000000000000O10O100000O10000000O01001OO1000000000001OO01000O1000000O1000O100000O100000000000O0100000000O010000000000000000O0100O01000000O100O10O10000000000000O1000000O100N4JeZh5\"}, {\"size\": [848, 480], \"counts\": \"cTP81ji0j0\\\\O`0A?A>A`0]Ob0B>C=B>M4N1O10O01000000000000000000000O100N2M3N2M3L5I6I7H9D;C?@`0F=@P1`NXa[3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Ui14Xj0:I8H7I>B5L1N10000000000001O01O0O0101OO1001O0000000000000O101O001N3N=jN`VON55Rf^;\"}, {\"size\": [848, 480], \"counts\": \"i[Z6570Ri0V1D9M3lL\\\\Ng\\\\O1RNc1Ve0_Nd\\\\O6mM^1_e0^Na\\\\OU2_c0lM_\\\\OU2ac0mM[\\\\OU2ec0mMX\\\\OS2ic0aNb[O`1_d0cN\\\\[O]1ed0fNX[OV1md0nNmZOYOI9de0c0]ZOQO<Jae0Z1lYOkNbg0X1WXOhNmg0h16C?K6H8J9H5J9Fk`^5\"}], [{\"size\": [848, 480], \"counts\": \"hh0h1ih0O3M1O2N1O1O2N2N2N2N2N2N2N1O2N2N2N2N1O2N2N2N1O2N2N2N1O3M2N2NRPc;\"}, {\"size\": [848, 480], \"counts\": \"b6T1\\\\i0000000001O0O10001O000010O000O11O00000010O01O001O01O01O01O0001O0001O00001O001O000000001O00001N100O1O1N3J5L4M3N2O2N1O100O2O000000001O1NcZh1M]eWN8K3M3N4K5M5J6J9G3M0001O00000001O000001O01O00100O0001O000000000000001O0001O000010O01O001O1O1O10O01O0001N110O1N2O00001O00001O000000000001OO100N2K5J7L3M3K5K5L5J5Ik[30XdL6K4M3M2L4O100011M9DX`e0d0U_ZOi0WO4L3N101001O01O000001O01O000010O00000010O00001O01O0001O010O001O000010O0001O000001O01O00010O00001O000010O01O000010O0001O000000001O01O000000001O0000000000001O000000001O000000001O00000O10001N1O1O2K4F:J7Aa0DmZ86ldG;D;H8C>H7O2N1O2O000000001O00001O01O01O000010O000001O0001O01O0000001O01O01O00000010O000001O0001O0000000O1L5H7L4L5M2N200O1000000000001O00000000001O000O1000001O00000000000O2O0000000000000O101O000000001N1000001O0O10001OjF\"}, {\"size\": [848, 480], \"counts\": \"W:c1mh000000000O0100000000000O10000000O100000000000000O01000000000000O1000O100000000000O100000000000O01000000000000000000O1000O10O1000000000000O100000000000O010000000000000000O10000000000O1000000O2O003L;B\\\\fd0OcY[O>F5K3N100000000O10000O1001O00O02O00000O1000000000000000000O1000O1000000000000000000000O10O10O2OO1000O10000000000O1000O10XORWONnh02TWOLmh02UWOMjh04VWOKkh04VWOLjh04VWOLjh03WWOMih02YWOMgh03YWOLhh03YWOMhh01XWO0hh0OYWO1hh0LZWO4fh0J]WO5fh0D]WO<\\\\i000001M1O2O1O1N2N2M3N2M3O1N1O2N2N2N2O001O10O10001O001N1^OlVOHUi02RWOLRi0GYWO7ai0O0O2OO1000O10N2O1N200O1000000001O0000O100000O01M3M3M3M3O1O1O100O11O000000000O10001O00001O0O10001O00000O101O1O0O2O00001O0O10001O00001O0O10001O000O101N101O01OO2O0O101O0MVZX4\"}, {\"size\": [848, 480], \"counts\": \"PRk3`0mi06J5L3M2O1O1O2O0O2O0O2O0O101N1000001N10001O000N3N3N1O001N2O1O1N4M000O101N1O101N2O0O2O1N2N2O2M2N3N00QNbXOn0[g0oNkXOP1Tg0nNQYOP1mf0nNWYOR1gf0mN\\\\YOS1af0lNbYOV1\\\\f0hNhYOW1Vf0iNkYOX1Sf0fNQZOZ1me0eNWZOZ1ge0gNZZOY1de0hN\\\\ZOY1ae0iN_ZOW1_e0kNbZOT1^e0lNbZOU1\\\\e0kNfZOU1Ye0kNgZOV1Xe0jNiZOU1We0kNiZOV1Ve0iNmZOU1Se0kNnZOU1Qe0kNR[OR1nd0mNU[OR1kd0lNY[OQ1hd0nNZ[OQ1ed0oN][OP1cd0oN^[OP1cd0mN`[OS1nf0001O000010OO100010O0O100O2O1N3N2M2OnMWO^ZOg0ce0\\\\O\\\\ZOa0ee0CYZO:ie0IVZO4je00UZOLme06RZOFPf0=oYO@Tf0b0jYOZOXf0j0f14K2O2M5K2N2O1N1O2O1N3N001O0O100O100O100000O1O101M3N1N3L3N3M2N2N3N1N4K7Iodm4\"}, {\"size\": [848, 480], \"counts\": \"i;i0gi000000000000O10O1000000000000O1000O100000000000O10O10000000O10000000O1000O1000O1000O1000000000O10O100000000000O01000000000O10O10000000000000000O0100000000000O01000000000O100000O100000000000O0100001O1O3L3N1O3L8Hcl>1ZY@Mhi0?N1N2N200O10000000O100000O10O100000000000O010000000O10O10000000000000000O100000O100000O10O100000000O10O10000000000O0100000000000O10O1000000000O10O10000000000000O10O1000000O1000O100000O10000000O01000O1O10O1000000000O010000000000O02OO1000000000O101O00O100000O10000000000O10O1001OO10O10000000000000O0100000O10O1000000000O0100000O10000000O10O10000000O10O10000000O0100000000O100000O10O100000O10000O100000000000000O1000000000O0100000000000000O1000000000000O100010O00O10001N2O1O2M\\\\\\\\Q3\"}, {\"size\": [848, 480], \"counts\": \"YnP8l0Ti0a0A?A>@a0]Ob0C=C=D=M2O1O1O10000000000000000O10000000N2O2M2N2M3L5I6H9G8E=_Oa0B>Gb0oNS\\\\\\\\3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Ri1:Tj07J8H>B6J3M2O00000000000001O0000000000O100000000001O0O10001O001O2N6Ij0ROVl];\"}, {\"size\": [848, 480], \"counts\": \"T[Z6=h0E\\\\h0]1bLcN[]Oe1db0_Nf\\\\ONTNc1Ve0aNc\\\\O0SNa1Xe0bNa\\\\O4oM]1`e0bN]\\\\OQ2cc0SNX\\\\On1hc0YNP\\\\Og1Qd0`Ng[Oa1Yd0bNc[O^1_d0dN][OZ1fd0iNW[Oo0Re0UOhZOZOF7ge0d0\\\\ZOQOXg0V1]XOkNfg0j16I7E=J8I5K7G9I9EPa^5\"}], [{\"size\": [848, 480], \"counts\": \"oh0a1Pi0O1O2N2N2N1O1O2N1O2N2N2N2N2N1O2N2N2N2N2N2N2N1O2N2N2N2Nb_e;\"}, {\"size\": [848, 480], \"counts\": \"a6S1]i00O1000001O000O101O01O0001O000000001O0000010O001O001O0001O001O001O00001O01O01O00001O0000001N1O1N2M3L5L3L4N2O2N1O100O101O0000000000010N4Icef15XZYN7K4N4L6J5K8H8I2M00000001N100001O00001O10O000000010O00000000000000001O0001O010O0000100O1O1O1O0010O00001O001O001O00001O001O00001O000000000O1O1O1L4J6L4K4M5K5K5KdP5O^oJ4L3N2N2N2001O00;^OY`e0c0X_ZO`0]VOQOhh0b1G5M20O1O1001O000001O01O000010O0001O0010O0001O0001O01O00010O0000010O0000001O01O01O00001O01O0001O00010O0000000010O000001O001O0001O01O000000000001O00000000001O000000001O0O10001O000000001O0O100O1N3G8H8C>ER[8LReG<E:C=E:I8L4N100O2O0000001O0000001O01O01O00001O0001O0001O00001O01O01O01O000001O0001O01O0000001O01O00000O1M3K5I8K4M3O1O10001O0O1000000000001O000000001O000O10001O00000000001O00000O10000000001N10000000001O000O1000001O0000nF\"}, {\"size\": [848, 480], \"counts\": \"T:c1mh00000000000000O1000000000O100000000000O10000000O10000000000O0100000000000O1000000000000O01000O100000000000000000000O01000000000O100000O100000O1000000000000O100000000000000O10000000001N1000001N3N7Gi0ROeed0V1ZY[O3N3M2N1000000O10000O100000000O11N2O000000000O1000O1000000000O1000000O10O10000000O100000000000000O100000O10O100000O10ZOPWOLPi03SWOJnh05TWOJlh05VWOJjh05WWOKih05WWOKih05WWOKhh05YWOKgh04ZWOLfh03[WOLfh03[WOMdh04\\\\WOLdh03]WOMch00`WO0`h0McWO3]h0JfWO5[i0000O1O1N2N2O1O1N1N3N2M3N2O0O2M3N2N1O2O1000O1000001O0AkVOCUi0;nVODSi06TWOHnh0OZWO0ci0O2O000O10O100O1O1O1O1O10000000000000000O10000O1O0N3N2L4N101O1O100O11O0O1000001O00000O2O00001O0000001O0O10001O1O000O10001O001O00001O000O2O000O101O0O101N1000001N100O10WoY4\"}, {\"size\": [848, 480], \"counts\": \"eaT59Vj06J6K5E:L3K4M5J5L4L7I5J6K4L5K4K4L4L4M2N3M2N3M3N1N3N1O1O001O1000O10000O100O100O100O010O0010O0001O01O0000000001OO10000O10O10000O01O1O_NcYOPO]f0b0XZOXOhe0b0aZOZO`e0a0gZO\\\\OYe0a0mZO]ORe0b0S[OZOmd0e0X[OVOjd0h0Z[OTOhd0j0_2N3N2N2N1OM34M3L2N2O2K4O1OmWO5de0HZZO>ee0_O\\\\ZOc0ce0[O^ZOg0dg010O001O1M3O3KUhg4\"}, {\"size\": [848, 480], \"counts\": \"g;j0fi000O10000000O1000O10000000O100000O10000000O010000000000O10O10000000000O01000000O1000O10000000000O01000000000000O10000000O100000O100000O10000000O1000O1000000000O100000O100000000O11N10O10000000O11O01N2O1O1O1O8GjW=2ShB4M1O1O001O1O100O10O1000000000000O10000000O100000O1000O10O100000O10O100001OO010000000000O0100000000O10O100000000000O10O10000000O1000O10000000000O10O1000000O10O10000000O10O10O100000O100000O1000O100000O1000O1000000000O1000O10000000O100000000O01000000O1000O10000000000O1000000000O0100000000000000O10O100000000O10O10000000000O010000000O10O10O1000000000O0100000O10000O0100000O10000O100000000000O1000000O10000000000O1000000000000O10O10O101O000000O010000000000O1000000000001O001O1N101O2M4LlaP3\"}, {\"size\": [848, 480], \"counts\": \"gYo75mi0d0ZOb0@>D=@?]Oc0YOg0D<H8N2O1O2O000O10000000O10000000000O1O1O1O1N2N3H7K5K5I8B>C>Aa0\\\\Ol0TO^V]3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"oh1c0li05Jb0@3L2O1N101O0000000000O2O0000000000O100000O1000001O002N1N3N8YOeVOHdi0LaVO1Q[`;\"}, {\"size\": [848, 480], \"counts\": \"T]Y61Z42gK4ge00^]OU1`b0lNb\\\\OL[N`1Re0fN_\\\\OOYN^1We0fN^\\\\OMWN`1[e0eN]\\\\ONPNa1be0eNX\\\\Ol1hc0\\\\No[Oe1Qd0^Nk[Ob1Vd0aNf[O`1Zd0cNb[O]1_d0eN^[O[1dd0gNW[OX1ld0lNoZOP1We0UOaZOTO95\\\\e0l0SZOnNeg0k14I8HiWOQN\\\\h0e1`0I5K6K5K6J7I4L6Ifk\\\\5\"}], [{\"size\": [848, 480], \"counts\": \"gh0i1hh0O2N2N1O2N2N2N2N1O3M2N1O2N2N1O2N2N2N2N2N1O2N1O3M2N2N1O2N2N1O2NbUb;\"}, {\"size\": [848, 480], \"counts\": \"]6T1\\\\i00O101O0001OO101O00000010O0001O000010O000001O000010O0000001O1O0000001O001O01O01O0000001N1O1O1J7K4M3M3N2O1N3O0O1000001O00000000O10101OMoje17kTZN6K5K4L7I<D001O01O0000000000001O000001O010O00000001O0001O000000000001O01O000001O01O1O1O00100O1O1O1O01O001O1O001O001O00001O00000O100000000O100N2J6L4M3I7L4M4KVk5EUUJ8J3L3N2O2M3O02M:^OmUO2]Zf0;^_ZO=Bh0ZO5L2O101O01O01O00001O0001O0001O01O01O01O01O000010O0001O0010O000001O000001O01O00001O01O0001O00001O01O0001O01O0001O00O11O01O01O0000001O000001O0000000000001O0000001N11O00O2O000000001O0000001N1N2K5K6G8H9BY[8GodG`0@`0D:F:K6M2N3N101O0O110O00001O000010O000001O0001O01O00000010O000001O0001O0001O000000010O0000001O0001N100M3I7K5M4J5O1000001O00000O10001O0000000000001O00000000001N10001O000000000O10000000001O0O1000001O000O10001O00000000000OSG\"}, {\"size\": [848, 480], \"counts\": \"R:c1mh000000000O10O10000000000O1000O10000000O10O10000O100000000000000000O10O100000000000000O10O100000000000O10000000000O0100000000000O10000000000O1000O1001O0O1000O100000000000O100000001N101O001O3La0_Ooed0]OaZ[Oo0SO9H2N2O1O0O10000O1000O01000000000O10001O000000000O0100000000000O1000000000O1000O10000000000O100000O10O1000000O10O1000[OnVOLRi03PWOLPi02SWOLnh04RWOLnh03TWOLlh04TWOLlh04UWOKjh05WWOKih05WWOJjh06VWOJjh05WWOKih04XWOLhh02[WOMeh01]WOOdh0N^WO2bh0KaWO4ah0HbWO8[i00O100N2O1N2N2N1N3N2N2O1N2M3M3N2N2N110O100000000001_OkVOEUi06RWOHnh02ZWOLhh0N]WO1ai001O00000O10O1O1N2O100O1OO200000000O1000O10000O100N2N1M4M3N2O1000000000000001N1000001O000O2O00001N11O00O2O00000O2O0000001N10001N1000001O000O101O001N101O00001N10001O1N101OWoY4\"}, {\"size\": [848, 480], \"counts\": \"n`Y5i0\\\\i0`0F7G8WO`NRXOo1cg0f0H6M4J6K4J7J5N20000O100O100O2O00000O100000000000O101O1O2N1O1O1O1O1O1O2N001O1O1N1010O0000000O10000000000O10O100000O10000O10000O10000O1O001NnMPZOcN]Oi0bf0a0Q[OmNQe0P1Y2N2N1N2O1N3M4L4L3N3M2N3M3M3L5L5KSQg4\"}, {\"size\": [848, 480], \"counts\": \"e;i0gi00O10O1000000O0100000000O10O10000000O1000O100000000000O0100000000000000O10O100000000000O01000000000O1000O1000000000O100000O1000000O010000000000O01000000000000000O01000000000O10O1000000000O10001O1O2M3N1O1N2EnUO5]j0IS]<6bhBMmi0=N1O100O001O1000000O10O10O1000000000O10O100000O10000000O010000000000000O0100000000000O0100000O100000O10O1000000O010000000000O10O10O1000000000O10O1000000000000O10O100000000000O10000000000O010000000O1000O10O1000O10000000O0100O100000O2OO1001O00O100000O10000000000000O0100000O1000O100000000O10000O01000000O10O1000000000O10O10000000O10O10O10000000O1000O10000000O0100000000O1000O10000000O10000000O10O10O1000000000000O10000000000O10000000000000O10O1000000000000O1000O020O00O2O001O1N3N1N3Ma\\\\Q3\"}, {\"size\": [848, 480], \"counts\": \"`^n7o0nh0d0@`0E:@`0ZOf0C=_Oa0M3N3N10001O0O10O10000000O11N1000000O1O1O1N2M3K6K4F;D;F<A?Ad0ZOYf_3\"}, {\"size\": [848, 480], \"counts\": \"dho55Wj06E<J3M4N3M2N3M3L3N2O0O1O1O2N104K3N0O2O001N1000O100000000001OO1N2O2N12N01O0N3K4O2M4M101N2O2N2N2L6A_VOD_TU5\"}, {\"size\": [848, 480], \"counts\": \"g3l0di08H:F2M2O00010O000000000001N10000000O1001O000000001O001O001O7I:Ee0WOUVa;\"}, {\"size\": [848, 480], \"counts\": \"]lW69he0Kc]OV1[b0mN]]OY1cb0iNb\\\\OMVN`1Ve0fNa\\\\ONSN_1\\\\e0dN_\\\\Oo1`c0TN]\\\\Ol1dc0_No[Oc1Qd0`Nk[Oa1Ud0bNg[O_1Yd0dNc[O\\\\1^d0gN^[OY1dd0iNW[OX1kd0jNQ[O\\\\ODa0ae0;`ZOQO;7\\\\e0m0QZOkNhg0j15K6D?I5J5K7J8I7I6J5K[[_5\"}], [{\"size\": [848, 480], \"counts\": \"ch0m1eh0N1O2N2N2N1O2N1O2N2N2N1O3M1O2N2N2N2N2N1O2N1O2N2N2N2N2N2N2N2N2N3MR[a;\"}, {\"size\": [848, 480], \"counts\": \"X6Y1Wi0000001O01O0000001O0001O01O0000010O0000000010O0000001O00001O1O00001O0000001O01O000001N1O1O2K4J6L4M3N2O1O1O101O00000O101O0O110O1N`Pe1?nnZN6M3N5Kb0^O10O0000000O101O00000O101O0001O001O010O0000000001O0000000000000000010O0001O010O001O1O1O1O1O01O010O1O001O001O1O000000001O0000000000000O1N2L4M3L4L4J6K5K7IUk5MPUJ4L4L4M2N2N2005KlZf04ldYO>Ca0_O4N1O20O01O000000001O001O01O01O0001O01O0010O000000010O000001O01O0001O000010O0001O001O00010O00001O01O00000001O000010O0001O0000000001O0001O000000O2O0001O0001O00000000001O000O101O000000001N1O1O1L5D;H9C=FmZ84ldG>B=B>G8M3N3N101O001O00001O0000010O00001O0000010O00000010O0001O00000010O000001O01O0001O0000010OO10000O1N2I8J5M3M3N2O1O2O000000001O0000000000001O0O100000001O000000000O2O000000000O2O00000000000O101O0000000000001N100000000O2O0000UG\"}, {\"size\": [848, 480], \"counts\": \"o9d1lh000000000O10O10000O01000000000000000O10O10000000000O10000000000000O01000000000000000000O11OO1000000O01001OO10O1000000O10000000O100000O10000000000000000O100000000000000O10000000002M2N2O5J?_Oked04QZ[Oa0B7H2O000O20O00O10000O010O10000000O100000000000000O011OO10000000O10000000O1000O1000000000000O10000000O1000O1000000O100ZORWOJnh05TWOJlh05UWOKkh05UWOJlh05UWOKkh05UWOKjh05WWOKjh03WWOMih03XWOLhh03YWOMgh03YWOMgh02ZWONfh00\\\\WO0ch0O_WO0ch0L`WO4dh0CaWO=Yi0000O100O1N2N2N2M2O2O1N2M2O2M3M3O1N1O2O1O020O0000O2O001XORWOLoh0NYWOOei01N00000000000OO2N11O1O100O100O10000000O10O01000O1O1O1O1N1L5L4O100000O1000001O000O101O00001O00001O0O10001O00001O0O10001O00001O00001N1000001N10001N10001O001O0O100O2O00001N2O[d[4\"}, {\"size\": [848, 480], \"counts\": \"]]T53\\\\j0[1dN8I5YXO`NUf0j1\\\\YOhNWf0m2K2O1N1O2O0O2O0O10001N1O10000001O0000001O1O00001O001O000000000000001O0000O1O10000000000N200O100O01000O100O100O100O1O1O1O1001O000O2O00000O101N10000O2O00001N2O1N<Eo0PO6J5L4K6I9H3L5L6J7H<D5L5H`Pg4\"}, {\"size\": [848, 480], \"counts\": \"b;i0gi000O10O10000000000000O10O10000000000000O0100000000000O010000000O100000O10000000O100000O11O0O01000000O010000000O100000O100000O100000O100000000O10000000O100000O10000000O1000O2OO100000000001N2O2N1O4Kka`0E_^_O`0A1N2O1O1000O100000O100000O1000O1000O10000000O1000O10000000O10O10000000O010000000000O010000000O0100000000000O1000O1000O11OO01000000000O100000O100000O100000000000O01000000O10O1000000000000O01000000O10O100000O10O10000000000000O100000O1000O10000000O10O1000O10O100000O10O10000000O10O100000000000000O10O100000000000O100000000O01000000000O010000000O1000O1000000O01000O100000000O010O10000000000O1000O10000000000O1000000O10O010000000000O10000000000O1000000000000O01000000001O1O2M2O1N4L3MbQS3\"}, {\"size\": [848, 480], \"counts\": \"Xok7c0Zi0e0YOf0E:]Oc0A?[Oe0^Ob0L4N2O101O0O100000000000O10000000000O1O1N2O1N2N3I6I8D;E<_Ob0C?^Oe0YO[[a3\"}, {\"size\": [848, 480], \"counts\": \"PUZ5f0ei07L3M3M3N1O1O1O2O1N3L4N1N2O2M1O10000O101O0000000000O100000000O2N100O2O1O001O0O2O1N2O2M2K5N3N2N3K5[O]VO6Rj0JVSi5\"}, {\"size\": [848, 480], \"counts\": \"c3b1nh00001O0000000000000000000000000O1000000000001O001O1O2M9Ha0]O``d;\"}, {\"size\": [848, 480], \"counts\": \"lRV63^3a0kb0Dl\\\\OU1`b0nNZ]OW1db0mNb\\\\OEZNb1Te0jN_\\\\OJUN`1\\\\e0hN[\\\\Ok1ec0[NT\\\\Of1lc0_Nm[Oc1Sd0`Nj[O_1Wd0dNe[O]1[d0eNb[O[1`d0gN[[OZ1fd0jNU[OV1md0nNmZOWOKb0[e0>`ZOnNb00\\\\e0l1g1J7E=G9J4L8I5K6I8F8DVka5\"}], [{\"size\": [848, 480], \"counts\": \"ah0o1bh0O2N2N1O2N2N1O1O2N1O2N2N2N2N2N2N1O2N2N2N1O2N1O2N2N2N2N3M2N2N2N3M3Mb``;\"}, {\"size\": [848, 480], \"counts\": \"U6W1Yi0001O1O010O00100O0000001O01O000000000010O0001O001O0000001O001O0000001O0000001O0000000O101N1L4H8K5N2O2M201O00000000000O4L_ef19a`XN8dh0o0M1N11O01O000000O100O101N10000O101O01O001O001O01O0000001O000001O0001O00000001O00001O010O1O1O1O001O10O001O1O001O001O0000001O00001N100001O00O100O1M3K5K5L4L4J7J6KfP5J`oJ6K4M2N3M2N21O1O0OoZf03jdYOl0VO5K4M1100001O00001O01O000001O0001O00010O0001O00010O000010O0001O0000010O00000010O000001O00001O01O0000010O01O001O001O01O01O000000010O0000000000000000000001O00001O00000O101O00000000001O000O101N100N2F;G9]Of0AnZ8:hdG=A=G:@?N2O2N1O101O00001O00001O000010O01O00000010O0000010O000001O00001O01O000001O01O0001O00000001O00000O1J6I7L5L3N2N2000001O00000000001N10000000001O000000000000001O0O10000000001O0O1000000O10001O00000O10001O000O100000001O000000000OZG\"}, {\"size\": [848, 480], \"counts\": \"k9e1kh0000000000000O1000O1000O1000000000000000O1000O1000000O1000000000000O10O11O00000O1000O100000000000O1000000000O10O100000000000000O010000000000000O01001OO1000O100000001N1000000O101O3L9Ga0^Obed0e0jY[O8H5L0O2O0000000000000000000000O100000000O1000O10000000O100000O1000O100000000000000O1000O1000000000000000O10O10000000O100YORWOLnh03WWOIih07WWOIih06XWOJhh06XWOJhh05YWOKfh06ZWOIgh07YWOIgh06ZWOJgh04YWOLhh03YWOMgh01[WOOeh0N^WO2dh0I_WO7bh0DbWO;Zi0000O001O1N2N2M3O1M3N2N2N1O2N2N2L4N2O00100000O20O01O0\\\\OnVOJSi02RWOKPi0NXWO0kh0G]WO6`i0O000O100000O0O2O1O2N001000000001O00O01000O100O1O1N2N2N2M3N1O2O10000001O000000000O101O0000001O000O101O00001O000O2O00001O0O10001O000O2O0000001O0O10001O000O101N101O0O2N0O2ObY]4\"}, {\"size\": [848, 480], \"counts\": \"^_j49Vj0c0\\\\O4N1N3M3M2N3M3M3M2O2cWOWOnf0]2H3N3L2N3N1N2O0O2O00000O2O00000001O00000001O00000O10000O10000O1O10000O1O1O1000000O1N2000000O10000N2O1001O001O0000O11O0000000000001O00000O2O1O1O2N4L7I6J7I7I5K2M4M3M3L4M2N3L3N2M2O2M2N2N2N2N3M4K4L5K4K9GgVf4\"}, {\"size\": [848, 480], \"counts\": \"_;i0gi0000000O1000O1000000000O1000O10000000O100000O100000O10O1000000000O10O100000000000O0100000000000O100000O0100000O1000O10000000000O100000000000O0100000000000O1000O100001N01000000000000O2O1O1O1N3N6IeR>IbmA1O2B3UVOOii0=N2O10O100000O1000O10000000O10O10000000O01000000O01000O1000000000O0100000000000000O1000O100000O1000000000O10O1000000000O01000O1000000O010000000000O01000000000O1000O10000000O100000O1000000O10O10000O1000O1000O10O10000O10O1000000000O010000000000000000O10000000000O100000O100001N01000000000O1000000000O010000000000O01000000O01000000O10O100000000O10O100000O1000O1000O10000O100000O01O1000O100O1000000000000O10000000000O1000O1000000000O10000000000O1000000O10000000000O101O002N1N3N2M3MefT3\"}, {\"size\": [848, 480], \"counts\": \"ZZj77`i0P1UOe0C=]Ob0@`0XOi0@?M3N2O100O2O00000000000000O100000000O100N2N2O1M4J5J7C=E;@a0@b0\\\\Om0lN_Pc3\"}, {\"size\": [848, 480], \"counts\": \"Zgm49Tj0a0_O7K2M3N2M4N0O1O1O1O1O2O1N2O1O1O1O1N2O001OO1000000O110O0O1000001N2N101O0O2N101N2O1O1N2O1O3I6L9I6I4L5IXfT6\"}, {\"size\": [848, 480], \"counts\": \"^3d1mh0O0000000000000000000000000O100000001O00001N2O3L7I:TO^VO2Tjg;\"}, {\"size\": [848, 480], \"counts\": \"i]T63c4NTa06`]OU1^b0nN[]OX1db0kNU]OY1jb0mNo\\\\OU1Qc0mNZ\\\\Of1fc0^NS\\\\Oe1mc0aNk[Oa1Ud0aNh[O_1Yd0cNd[O^1\\\\d0dNa[O\\\\1ad0hNY[OY1gd0kNT[OS1Pe0QOjZOYOF?de0=_ZOnN=4^e0R1mYOiNjg0i16ClWOUN]h0e1<K7I7J6K6H6J9GS`c5\"}], [{\"size\": [848, 480], \"counts\": \"ah0o1bh0O1O1O2N2N1O1O1O2N2N2N1O3M1O2N2N2N1O2N2N2N2N1O2N1O2N2N2N2N2N2N1O2N1O2N2N1ObV];\"}, {\"size\": [848, 480], \"counts\": \"Q6X1Xi0001O0000010O001O001O010O000001O01O00000002N0010O0001O00001O0000001O0000001O00000O100O1N3F9J6N2N2O101O0O1000000000010O2Ln_g15RfWNa0hh0e0N201N1O000000O1O2O00001N0100001O01O1O001O01O000000001O000001O00000010O000001O0010O01O001O100O001O01O001O1O0001O01O0O10001O00000000000O100O1O1K6I5M4K5L5J6K6HfP53YoJ5L4M2M4N1O1001O6F_`e03]_ZO=Eh0VO7L20O00110O0001O000001O01O001O01O00010O0001O0001O01O00010O000001O0001O001O0001O01O001O000010O00000010O000000010O00001O0000000010O0000000001O0000000001O001O0000001O0000000000000O101O00001N100O1N2E<E;@hU9IcjF=@?C<E<K4N201O0O101O001O00000010O000001O0001O0001O000010O0001O00001O01O000001O0000010O0000001O0001O0O1N3J5I7L4M3N2O1O2O00000000001O00000O1000001O00000000001O00000O100000001O000O10001O000000000O2O00000O1000001O000O1000000000000O10]G\"}, {\"size\": [848, 480], \"counts\": \"g9f1jh000O1000000000000O100000O10000000O10000000000O010000000000000O1000000000O10000000O100000000000000O1000000O1000O10000000O100000000000O10O10000000000O0100000000000O1000001N10001O1N4L<CQfd0IWZ[Od0ZO6M2N0O101O00O10000000O1001OO0100000000000000O10000000O1000O10000000000000O0100000000000000O100000000O01000000000O10000YOQWOMoh02TWOLkh04WWOKih04YWOKgh05YWOKgh04YWOLhh03YWOMgh02[WOMeh02\\\\WONch03]WOMbh04^WOKch04^WOLbh02_WOOah0NcWO1]h0MeWO2]h0IfWO8Yi0000O1N1O2O1N2N2N2N2N2M201N2N2N2M3M3O100000O101O00001\\\\OmVOITi02RWOKPi0NXWO0ei0O001N10O1000000O001O1O1O10000000000000000O100O1O0O2O1M3M3N2O1N2O10O101O000O101O000000001O0O10001O00000O2O00001O00000O2O0000001O0O101O0O101O00001N10001O0O10001N1000001N1000dY]4\"}, {\"size\": [848, 480], \"counts\": \"[[k4V1U1DQf0c0gYOISf0:eYOMYf04cYO0\\\\f0S2N1O2N10000000000O100000001O00000O101O0000000001O01O000001O0000000000O10000O10000O100O100O100O100O1O00100O1O100000O10000000000O10000000000O101O001O2M3N6J3M3L6K5Kd0\\\\O4L3M3L4M2M3N1N2N2N1O3N4K7I6J6J6J5Ihhl4\"}, {\"size\": [848, 480], \"counts\": \"\\\\;h0hi000O0100000000O1000000000O10O100000000000O01000000000O10O100000O10000000000000000O01000000000O10O10000000000O010000000000000O1000O10000000O1000O10000000000000O10O100000O10O100000001O002M2O1N5L;Dal>0^SA4lUOMei0a0M2O1O1000O1000O011O000000O10O010000000000O100000O10O1000000000O010000000O1000O100000000O10O10000000O10O10000000O100000O1000O10000000O10000O010000000O1000O0100000O10O1000000000O10O1001O0O1000O1000O10000000O1000O10000000000000O01000000000000O100000O100000O10000000000O10O10000000O10O100000O100000O100000O10O1000000000O010000000O10O10O100000O0100000O100000O0100000000O100000O10O10000000000000O1000O01000000O10001O0O10O1000O1000000000000O100000000000000O10O1000000001O001N3N1O2M3N2MhfT3\"}, {\"size\": [848, 480], \"counts\": \"nYj7e0Si0j0@?B>\\\\Oc0[ORMWYO_3Sf0j0D<N200O100O1000001O0000O10000O100000000O1O1N2N3L3K5J6F;@`0]Od0@b0[OV1`N`Pc3\"}, {\"size\": [848, 480], \"counts\": \"`WU5h0di06L4M1N3N1N2O1O1O2N3N2M4M2N1N2O1N100000O10O1001O0O10000O101O0O2O001O0O2N2O0O2O1O100N3H7L5N3L6K9F3LTkn5\"}, {\"size\": [848, 480], \"counts\": \"[3c1mh001O00000000000000000O100000000000001O00001N2O6I>Bojg;\"}, {\"size\": [848, 480], \"counts\": \"f]T65Y3d0jLDee0I\\\\]OX1cb0jNW]O\\\\1hb0fNT]O]1kb0fNm\\\\O_1Rc0fN[\\\\Oi1ec0]NQ\\\\Og1oc0`Ni[O`1Xd0bNe[O_1[d0cNa[O_1_d0cN^[O]1cd0gNW[OX1md0mNlZOR1Ve0ROdZOUO3;`e0e0TZOnNl0B`e0X2_1J7A`0L5I7K7H5L6J6I7C]`c5\"}], [{\"size\": [848, 480], \"counts\": \"\\\\h0T2]h0O2N1O2N1O2N2N1O2N1O2N2N1O2N2N1O3M1O2N2N1O2N2N1O2N2N2N1O2N2N2N2N2N2N1O2N1O2N2Nba[;\"}, {\"size\": [848, 480], \"counts\": \"T6Q1`i0O2N2N2O1N1OO2M3J5J600O2O0001O01O000001O00010O00001O00001O00001O0000001O0000001N1O1E;J6N2N2O2O000000000001O01O01O001O100O1005JYdk14eaSN?jh0FRWO>lh0c00000001O0O1000001O01O000010O01O000001N1001O00001O01O00000001O001O010O1O1O1O011N0001O001O00010O001O0000001O0O2O0000O100000O1O2J4L5M3L4J6L5K6FVk54lTJ2M3M4M2O1N23M4LkZf04ldYOm0UO5K3N20001O00001O00001O0010O00001O0001O01O01O0001O01O00001O01O01O0000010O00001O01O01O00001O0001O01O0001O01O0000001O01O0001O0000000001O01O00000000000001O00001O00000000000O20O00O10001O0000000O2O0N2J6D<G:C`U90^jF`0F9A?H7M3N2O2N1010O0001O00001O01O01O0000001O01O0001O01O0001O00000010O00000001O0001O01O0000000001O00000M3K6I6L4L4O1O1O2O000000000000001O0000000000001N100000001O00000O101O000000000O2O00000000001N1001OO1000001N100000000000001N10`G\"}, {\"size\": [848, 480], \"counts\": \"d9e1kh000000000O10O10O100000000000O100000000000O10O10000000O100000000O10000000O1000000000O1000000000000O1000000000000O011O00O10000000O1000000000000O100000000O10000O2O00000000000O101O001N3M5L9Fakc0BjZ[OKgi0o0B7I3N1O1O000O10000000000000O100000000O010000000000000O0100000000000O1000O1000000000O100000O10000000O100000O10O10000O100XORWONnh01TWONlh02UWOLlh03UWOMjh04VWOLjh04VWOLjh04WWOJjh05WWOKih05WWOKih04YWOKgh05YWOKgh04ZWOLfh02\\\\WONdh00_WONbh00`WO0bh0JbWO6\\\\i00O100O1N2O1M3M3O1M3N2O0O2N2N2M3N2N2O1O010O11O0000001]OmVOGTi01TWONoh0IXWO6ci0N2N0O01000000O1O00O12N100O11O0O0100000000O10O02N1O1N101N2N2L4N20000000O10001O00000O2O0000001O000O2O00001N100000001N1000001O00000O2O00001O000O2O00001O0O101O001N10000O2O001OV_\\\\4\"}, {\"size\": [848, 480], \"counts\": \"Soh4650ii0`0K7@<K6J4L5J6K5K4F9ROo0G9K4N3M2M3O2M2O2O001O0000001O01O0000000000001O00001O1O1O1O001O1O1O001O1O000000O10O10O100O1O100O10O01O1O1O1O1O10O01O1O1000O10000O100O10001O0O101N2O2M3N5J8QMVYOj1Ph0G5K4L3N1N1O2N1O1N3N8H7G<C9AUVOL[QP5\"}, {\"size\": [848, 480], \"counts\": \"Y;g0ii00000000O100O01000000000O1000O10000000000O10O2OO1000O10O1001O00O100000O10000000O1000000000O10O100000000O0100000000000000O1000O10000000O1000O1000O1000O100000O100000O10000000O010000000000O2O001O3L8Gha`08o]_O4O0O100O10O01000O100000O1000000O1000O1000000O10O1000O10000000O1000O100000000O10O1000000000000O10O1000000O010000000O010000O1000O1000O10000000O1000O1001O00O0101OO10000000O10000000000O01000000000O100000O1000O1000O10000O10O10000000O10O10000000000000000O100000O100000O1000O1000000000O010000000O01000O10000000O10O10000O01000000000O10O1000000000O10O100000O10000000O010000000O100000O10O100O100000O10000000000O10000000O11N10O10000000O10000000000000000O1000O0100000000O1000001O1O1N2O2N2N2MmQS3\"}, {\"size\": [848, 480], \"counts\": \"aTk7;`i0j0XOd0A>_Oa0_Oa0]Oc0^Ob0I7N2O1O2O000O1000000000000000O10000O1O1O1O1N3M2M3L5G9A>C?@`0Bb0TOaVb3\"}, {\"size\": [848, 480], \"counts\": \"lV_57hi0c0K5L2O2M2N3N1O2N2N3M3N2M2N2O000O101O00000O10000000O2O0O10001N10001N2O001O1N2O1M3L4M4M2O2M4L8H:Ehfe5\"}, {\"size\": [848, 480], \"counts\": \"W3g1ih000000000000000O1O1O100000000O1000000000001N3N1O4K8H`0UOYVOLeof;\"}, {\"size\": [848, 480], \"counts\": \"PXU64\\\\3T1\\\\b0PO[]OW1bb0jN[]OY1db0jNU]O\\\\1ib0gNR]O\\\\1nb0hN\\\\\\\\Oj1dc0ZNV\\\\Oh1jc0\\\\NQ\\\\Od1Pd0`Nj[Ob1Vd0bNe[O^1\\\\d0fN_[OZ1cd0hNX[OY1id0lNP[OU1Re0POgZOYOJ<fe0?YZOPO`0Nbe0m1d1J7E;H9J6L3L9H6J6H;AQfb5\"}], [{\"size\": [848, 480], \"counts\": \"ng0b2og0O2N1O2N1O2N1O2N1O2N2N2N1O2N2N2N1O2N2N2N1O2N1O2N2N2N1O2N2N2N1O2N2N2N1O2N2N1O2N2N2N2N2N1O2N1O2NcmT;\"}, {\"size\": [848, 480], \"counts\": \"k5W1Yi00010O1O105J4M00O000O101N100M3M3N2O2O0000000001O01O0001O001N10001O001O000N3\\\\Oc0O1O100O10001N1001O000000100O1O1O1O1O1O100O2N1O10N1O4K;DTcP27jbnM`0lh0d0N2N2N100O1O010O00000001O000000000000001O0001O00001O001O10O02N1O0010O0000100O00001O1N10010N1000010O000000000O1O1M2M4L4L4L4K6H8K4MdP5M_oJ4L4L3M4N1N2O2007Ge`e0C__ZOc0B`0^VOROih0^1J5N1O101O01O0001O01O01O00000010O00010O00001O01O00001O01O0001O00010O000000010O001O00001O000010O0001O0000000010O0000000010O00001O0001O000000000000001O0000000000001O0000001O0O100000001O000O1O101L3I8G8G:D^U91_jF>C<F;G8K5O2O00001O001O0000001O010O0000001O0001O01O00000010O0001O00000010O00000001O0001O000001O01O000O1N2J7J5K5M3N2O10000O2O00000000001O00000O101O0000000000001O0O11OO10001O000000000O1000001O00000O2O000000001O000O1000000000dG\"}, {\"size\": [848, 480], \"counts\": \"a9e1kh00000000000000O010000000000O100000000000000O100000O1000000000O1000000000000O100000O100001O00000O100000O0100000000O10000000000O1000O11O000000000O101O0000000O101O00O10000000O10001O00001N2O9F=CXkc0BQU\\\\Oe0Ab0]O5L001O0O10000000O10001O1O001O00000O1000000000O10O010000O1O100O1000O010000000O1000O100000O10000000O1000O100000000O100XOTWOLlh03UWOMkh03UWOMjh04VWOLjh04WWOKih04XWOKih05WWOKjh04VWOLjh04VWOLjh03WWOMhh03YWOMgh02ZWONfh00\\\\WOOfh0M]WO3fh0E_WO<Zi000O1000O1O1O1N101M3O1N1O2L4M3L4O001O1N2N200000O2O001O1[OlVOLUi0B`WO:\\\\i01OO0000000000ON2001O1O100O100000000000O10O1000O01O100O1O0N3J6N200O10O1000001O00000O2O0000001O00001N1000001O00001O0O101O0000001N10001N1000001O0O10001O001O0O2O000O2O001O1OX_\\\\4\"}, {\"size\": [848, 480], \"counts\": \"`\\\\k4>ki0a0A<D8J6J5L3M3M6J3L3F;_O`0E;J6L5K4N2N3M2O1O1O1O1000000O10000000001O00000001O1O1O1O1O001O001O01O01O00000000000O10000000O1O1O1O100O1O010O1N2O1O100000000O100000O10001O0O2O1O2N1N3N3M3M3M2M3N6J9F`0A5J3N2N2N3M2N4L3M2M8G6K=Dh0WOZjg4\"}, {\"size\": [848, 480], \"counts\": \"V;h0hi000O10O10000000000O1000O10000000O10000000O100000O100000O100000O10O1000000000O1000O100000000000O01000000O01000000O10000000O100000O100000O1000000000O0100000000000000O10O1000O100000000O10001O0O2O2N4K3N2N1N1O3McW=?ngB2N1N2O010O1000O10000000O01000000000000O01000O10000000O1000000000O1000O10O100000O0100000O100000O1000O100000O100000000O01000000000000O1000O100000O1001N1000O100000O100000O1000O10O1000000000O100000O10O10000000O10O1000000000O01000000000O1000O2O00O10000000O01000000O0100000O010000000000O100000000000O010000000O100000O100000000O10O1000O100000O1000O10O1000000O01000000O0100000000O1000000000O010000000O1000000O100000O1000O100000000O100000000O10O10000000O1001O0000O01000000001O1O1N2O1O1N102M2NbbP3\"}, {\"size\": [848, 480], \"counts\": \"Yil7b0Yi0h0]O`0A`0_O`0^Ob0\\\\Od0^Ob0K5O2N100O101O0000000000O10O10000000O1O1O2N1O1M3J7I7E:C>D=@a0^Oh0UNXWOi0UZa3\"}, {\"size\": [848, 480], \"counts\": \"hca5>1Mbi0c0L5M1O1N3N1O2N2N2N3M4M1N2O0O2O1O0O2O001O00000000001O000000O1O1O2O001N2N2N2O0O2N2N3L3J6N2N3N2M5K9GP_b5\"}, {\"size\": [848, 480], \"counts\": \"R3`1Pi0O10000O2O000M2O2O2O00000O10O101O103L3M2OO0O1O3N1N4L8[O`VOJmi0F[VO3]Uf;\"}, {\"size\": [848, 480], \"counts\": \"llV67W3U1^b0nN\\\\]OW1bb0kNc\\\\OKYN_1Se0iN_\\\\OMVN_1[e0gN[\\\\Om1dc0XNW\\\\Oi1ic0\\\\NQ\\\\Oe1oc0_Nl[Oa1Ud0bNg[O_1Yd0cNd[O^1\\\\d0eN_[O\\\\1cd0fNZ[OY1gd0lNS[OS1Pe0SOgZOTO2;^e0e0XZOnNh0F_e0U2b1I7E=I5J7K5L9F6I:G6ESQa5\"}], [{\"size\": [848, 480], \"counts\": \"gg0i2hg0O002N1O1O1O2N1O2N1O2N1O2N1O2N2N2N1O2N2N1O2N1O2N2N2N1O2N2N2N1O3M1O2N2N1O2N1O2N2N1O2N2N2N2N1O2N3M2N1O1O1O2N2NRTo:\"}, {\"size\": [848, 480], \"counts\": \"i5V1Zi000001O1O001O0001O010O3M5K2O0O01O0O100O10000011N2N2N1O1O00000OO2O01AdVOJWi0MbVO7ni0KQVO3Pj04300O10001O000001O001O001O1O011N1O1O1O1O1O00100O1OO100N2MTRX2CiTgMOXO9Qi0KbWO>\\\\h0ORWO8kh0h000O000000001O01O0000001O000000000010O001O1O1O1O010O0010O001O00001O001O00001O001N1000O1000000000N2L4L4K5K5J7J5M5JVdS1?Z[lN>D7H6M2N3O2M2O1N1O1O000010N11O0010O00010O01O00010O0000001O010O0000001O0001O0001O00000010O0001O0000010O00001O010O000000001O0001O000001O00000001O000000000000000O20O0001O0000001N1000000000001N100N2O2H7H9I6@dU91^jF=G:C<F;L3O1O2O0000001O0O20O0001O00001O01O0001O0001O01O00001O000001O01O000000010O00001O01O0000000000000O1K5K6I6L4N2O1O2O00000O2O01O00O10001O00000000001O00000000000O2O00000000000O2O000000000O1000001O00000O101O00000O101OfG\"}, {\"size\": [848, 480], \"counts\": \"_9e1kh000000000000000000000O1000000000O1000O100000000000000O10000000000000O01000000000000O10000000000O10O10000000O10000000000O1000O11OO1000O2OO100000000001N1000000000001N10O10000000O101O00001N102N8G`0_Oaed09_`ZO^Obi0T1E5K2N1O00000000000000000001N101O00000O100000000O010000O1000O0100O10000O10O10000000O10O1000000000000O10O10000000000000XOSWOMmh01VWONjh01WWOOhh02XWOMjh02WWOMih03XWOMfh04ZWOKgh04ZWOLfh03[WOMeh02\\\\WONdh01]WONdh01]WOOeh0N\\\\WO2fh0I]WO7eh0E]WO:]i00000O011O0000O10O10001O11OO3M]\\\\Y1K_ieN5fi0>O2O00000000000001O000O2O001O0000001N10001N101O0000001N10001O00000O2O0000001N10001N100O1OoY]4\"}, {\"size\": [848, 480], \"counts\": \"PXP5h0ai0>M4^MiN[[O^1\\\\d0gN`[O]1\\\\d0gN_[O]1^d0gN][O]1`d0jNU[O\\\\1id0lNhZO^1Ve0P2M2N2O1O1O1N2O000O10000O100O10000O1000000000000001O000000000000000000000000000000O1000000O100O100O10O10O101N10O10001O00O100000O10000000000000000O101O1O001O2N1N2O2N2N1O3L4M3M3M3M4K4M5K9G6J6J<D4K7J5L3L4L5J5L7H5K9Ego]4\"}, {\"size\": [848, 480], \"counts\": \"T;i0gi000O1000O1000000000O100000O10000000O1000O1000O1000000000O10O100000000O0100000000O10O1000000000O10O1000000000O10O100000O10000000O10O100000O100000000000000O1000O10O10000000000O010000000000000O10001O1O1O3L5L5JPX=NhgB=L2O001O001O10000O1000O10000000O1000O100000O0100000O10O100000O1000O10000000000O1000O1000000O10O10000000000000O01000000000000000000000O01000000000O010000O010O100O100O100O100O010O10O10O2N2N1O2N_nQ1IfQnN5L2O2N3M2O0000000O1000000000001N10000O100000001O0O0100O10000000O10O10000O1000O1000O1O01000000O100O100000000O01000000O10O010001O0000000O010000000000000O1000000000000O100000000000000O010000000O2O00001O1N200O2M3N1M3NRSn2\"}, {\"size\": [848, 480], \"counts\": \"P^n7h0Ti0g0_O?@?^Ob0@a0\\\\Oc0@`0L4N3N10000O101O00O1000000O100000O10O100O2M2O1M4L3G9E<D;D?^Ob0_Of0mNil^3\"}, {\"size\": [848, 480], \"counts\": \"nP_5:oi0=F6K5K4M4L3M4M3M4L3N1O1N1O2N10001O0O10001N11O0000000000O1001N2O0O1O2OO1001O0O2N101N2O0K[WO^Nhh0^19I6L3N4J6JPXd5\"}, {\"size\": [848, 480], \"counts\": \"Q3c1mh0001O000000O100000000O1O1N2N2M3M3N2O1O2O00000000100N3L9FV\\\\e;\"}, {\"size\": [848, 480], \"counts\": \"jaX64[j05K4QXODfN3me0;X[OI`N3Xf08R[OMXN3ef03R[Oa0md0HlZO7Se0LgZO7Xe0KeZO8[e0I`ZO;_e0H]ZO9ce0KXZO7he0MQZO6oe0OiYORO7Foe0^1aYOkNfg0k15I7K6G8J:J5K7H8H8H6G;H^a^5\"}], [{\"size\": [848, 480], \"counts\": \"_g0Q3`g0O1O1O2N1O2N1O2N1O2N2N1O2N1O2N2N2N1O2N2N1O2N1O2N2N2N2N2N2N1O2N2N2N1O2N2N2N1O2N1O2N2N2N1O2N2N2N1O2N2N1O2N1O2N2N2N2Nbdl:\"}, {\"size\": [848, 480], \"counts\": \"g5W1Yi00000001O000000002O0O001O0000001O0000000001O001O1O2N3N4K2N1N2O1O0A_VONbi00a0O0L]j01dUO3N101O1O00001O1O001O010O1O1O1O1O100O001O0001N1O1N2K6Koff14nXYN4N2L3O1O2N100001O5K1N8I3MiR9;glF;A;A?M2O000000O1O2O00000000010O0001O00100O1O1O00001O01O001O001O001O1O101N2N2N9G6J7H7J1O2M3Mnk[1=`SdN7K4N2O20O01O00001O0000010O00001O010O00010O001O1O010O1O1O0001O01O1OO2O0001O1O1O1O1O100O1O2N2N4L3M2O0O2N100O1O1O1O1O0001O01O00000001O00000000000000001O0000000000001O000000000O2O00000000001O0N200O1O1H9G8D=C`[8BidGc0D;E:D<G:K4O1O101N10001O00001O0000010O00001O0000010O000000001O01O0001O0001O01O00000010O0000000000010O0O1O1M3H8L5K4M3O1O1000001O0000000000001O00000O1000001O000000001O00000O1000001O0000000O10000O101O00000000001O0O100000iG\"}, {\"size\": [848, 480], \"counts\": \"^9f1jh0000000000000O1000000000O10O1000000000000000000O100000O1000O100000000O1000000000000O0100000000000O10000000000000O010000000000O1000O100000O1000000000000000000O1000001N10000000000O2O00001O0O101O6Ia0^OUkc0OkT\\\\Oc0_O;F2N1O1O000000000000O101O00O11N10001O0000000O1000O100000O0100O1O10000O11N10O1000O0010001N0M4J6J6M3L4M3L4O1O1N3N5Jo_f7\"}, {\"size\": [848, 480], \"counts\": \"^Tk45Zj02N2N3M2O3L4L4M3L4YYOYO^c0m0Y\\\\O[Obc0k0^[O2`d01\\\\[O2ad04Y[OOdd0>lZOGSe0k200O2O1N100O2O1O00000000000O10O1000000000000O10000000O10000000000000000O10000O1000O010000O10000O10000000000001O0O2O00000000001O000O101O00001O00001N2O001O002N1O1O1O1N2O1O2N2N2N2M3N1O3M4L6J5K9G=C=Cb0^O8H3L5L5K2N3M3M4L2M3N2N2N4L5HgWX4\"}, {\"size\": [848, 480], \"counts\": \"S;i0gi0000000O100000O1000O10000000O100000O100000O10000000O100000O1000O1000O10O1000O100000O100000O10000000O10000O10O100000000O0100000000O10000000O1000O1000000000000O010000000000O0100000000000000O01001O001O1N2O2N2N5JTX=JfgB=N2O1O1N20000O0100000000O0100000000O0100000000O10O100000O0100000000O02O000000O10O1000O1000O1K6DeWg34`hXL4N3M2N2N2M2O1ON2O100000000O1000000000000O10000000000O10O100000O2OO1000O100001OO1000001O1N101O2N3L3Mdmn2\"}, {\"size\": [848, 480], \"counts\": \"aXo7f0Xi0d0[Od0B>A>@`0XOh0]Oc0N3M200O10000O101O00O100000000O1000000O1O1O1M3N2L5H7E<F:A?Ab0^Of0UOSR^3\"}, {\"size\": [848, 480], \"counts\": \"nUT52Qj0l0^O<D7K2M3O0O2M2O2N2N3M3N2fWOlMSh0Y201N1O100000001O000O01000O1O10000001O00O100001JQXOiMog0W2RXOgMog0X2SXOgMmg0Y25001N20N2N2O0O102N1O4L1N3M2M4L4G<I5@X_h5\"}, {\"size\": [848, 480], \"counts\": \"o2c1nh0O000000000000O11O000O100000000O100000001OOO2N2M4HlVOPOVi0P15O2M6Kb0ZOnfc;\"}, {\"size\": [848, 480], \"counts\": \"iaX62]j03M5K3N3L6K7I3M3M1O1O3N4K8I3M8H2N1OK6K4N4L8H7I6J6J5I8HRg]5\"}], [{\"size\": [848, 480], \"counts\": \"^g0R3_g0O2N1O1O2N1O3M1O1O2N2N1O2N1O2N2N2N2N1O2N1O1O2N2N2N2N1O2N2N2N1O2N2N2N2N1O2N1O2N2N2N2N2N1O2N1O2N2N2N2N1O2N1O1O2N2N3Mbdl:\"}, {\"size\": [848, 480], \"counts\": \"g5W1Yi000001O00000000010O2N00001O000001O000001O000O11O0000002N1O3M7H2O1@cVOJ^i00e0O1N\\\\j01aUO4N101O1O0000001O001O2N1001O00000O1000OO2O000010O011OO101MfQe1JXnZN<L4I4N2O001O1000O4M5J7J4LZm9?RRF9[OVOTWOW1dh0=N1O10N2N3M2O1000000010O001O0000100O001O00O2M2POQ1I6N4J^Ui1>RjVN;Hc0\\\\O8I4O1O1O1O00001O01O01O001O1O010O00100O001O00100O000000010O000001O0O11O00001O00O2M2001O1O001O010O001O010O000000010O00000000010O0000000000000001O0000000000001O0000000000001N100000001O000O10001N1N2I7H9A`0CT[8NPeG:C=E:E<G8M3O101N100O101O001O0000010O00001O0001O01O0000010O0000000010O0001O0000010O000000001O0001O00000O1N2J6L5K4L4N2N20000O2O0000000000001O000000000O101O00001O000000000O101O00000000000O100000001O000O100000001O000O10jG\"}, {\"size\": [848, 480], \"counts\": \"^9e1kh0000000000000O010000000O100001OO10000000O1000000000O10000000000O100000O011O00O10000O1000000000O1000O1000000000000000000O1000000O010000000000000O1000000000000O01001O000000000O100000000O1000000O4M5J<CZkc0MjT\\\\Ob0^O7J3M1O0O10000001O0O1000000O1000001O000000000O10O1000000O10O0100O1000000O100000O001O1N2O1O1N2M3M3O0N3O1O1O10000O001O1O1O10000O2N1O3M3M3N1N3MllZ7\"}, {\"size\": [848, 480], \"counts\": \"PRb45Wj06M5K3N2M3M3N3L6J4M4K4L3N1N3N2M3lXOVO]d0o0\\\\[OXO`d0R1Q[OUOmd0Z3L3N1O2M3N1O1N2O1O00001N10000O10000000000000000000000O1000000000000O10000O101N1O1O100O1O1O1O1O10000000O11O0000O2O00001O000000001O00000O2O0000000O2O00001O001N2O001N2O1O1O1O0O2O1O1O1N2O2N2M2O3L4M1O3L9HW1hN9H6I2O3M6J4K2O1O1N4M2M5L3L4M2M3N2M3N1O5J5HSbV4\"}, {\"size\": [848, 480], \"counts\": \"S;h0hi00O10000000O10O100000000000O10O1000000000O1000O10000000O100000O0100000O10000000O01000000000000O0100000000O1000000000O010000000O01000000000000O1000000000O1000O100000O10000000O10O10000000000000O101O001O1O1N3N4LgR>EUmA?N2O100N2O010O1000O1000O1000000O0100000000O10000000O10O10000000O01000O10O1N2M3K5N2M3N2Noh_31QW`L3M4M2N3L3M2O000O1000000000O10O1000O10000000000000000O10000000000O100000000O1000000000000O1000O10O1001O00O101O001O1O002M3N2N3LSSn2\"}, {\"size\": [848, 480], \"counts\": \"SSP8a0[i0i0WOe0\\\\Oc0D<ZOg0VOi0H8N2O1O100O1000001O00O0100000O1000000O100O1N2N2L5J5I7I8E<^Oa0^Of0_Od0\\\\O[W]3\"}, {\"size\": [848, 480], \"counts\": \"g]i4j0bi0>D6J5L2M3O1N2N3M2N101N2N2N2N100O2N2OO010001O0O100000000000000010O001O000O2O1O01OO2O00001N101O0O2O0O2N2N1O2N1M4M5L3J5I9I6EbgP6\"}, {\"size\": [848, 480], \"counts\": \"o2b1oh0O000000000000O11O0000000000000O1001O0001OO1001O0O10001O1N5K6I=[OVVOL[j0JmVa;\"}, {\"size\": [848, 480], \"counts\": \"Y\\\\Y63[j06K3N2VYOLTc07d\\\\O2Wc04T\\\\O_OgMc0Uf00\\\\[OQ1cd0TOW[Oo0gd0TOU[Om0kd0UOR[Ol0nd0VOoZOl0Qe0VOjZOl0Ve0ZOcZOg0]e0_O[ZOc0ee0BTZOQO<Obe0m1c1N3I6L5D;O;E9F6K6I8I4JVg]5\"}], [{\"size\": [848, 480], \"counts\": \"gg0i2hg0O1O2N2N1O2N2N1O2N2N1O2N2N2N1O2N2N2N2N1O2N2N1O2N1O2N2N2N1O2N1O2N2N1O2N2N2N1O2N2N2N1O3M2N1O2N2N3M1O2NS^R;\"}, {\"size\": [848, 480], \"counts\": \"g5W1Yi0000000001O000000010O1O1O000000000000010O00000000000001O1O001N1F;J5N3N1O2N2N2O4L1O10O0001OO1N3N3M3N0O110O2N01O001O1O1O2N2O1N01O1O1O02Njke1KUTZN:L6I3M1O100001O5J6J9Hkg:>cWE9E=ZOnN]WOV1ah0=00O02K4N2O11O0000O20O00001O001O010O1O1O010O000010O0O1010O01O000O2O00001O0000000000000O1N2N2J6J5N3K6J6K5Lbe6MaZI3N2L4N200N26]OZ[f0a0]dYOk0WO7H6L110O101O1O00010O0000010O00000010O000001O01O00000010O001O01O000001O0000001O01O000001O001O01O0001O01O01O00000010O01O00000010O0000000000000001O01O00000O1000001O00000000001O00000000001N10000O1O1K6F9J7A`0DS[81jdG=A?G9E:I7N2O2O0O1O101O00001O0000010O00001O0001O01O00000010O000000010O000001O00010O0000000000000001O00000L4I7L5L3M3N2O100O101O0000000000001O00000O1000001O0000001O000O1000001O000000000000000O101O00000O10001O00000000jG\"}, {\"size\": [848, 480], \"counts\": \"^9e1kh00O10O100000000000000O100000000000000000O1000O10000000000O10000000O01000000000000O1000000000O10O10000000000000000O10O10000000O10000000000000000O1000000000000O01001O0000000O1000000O1000001O0O102M5K:Eakc0YOTU\\\\Oh0[O?B4L2M2O00000000000000O100000001O000O100000000000000O010000O100O001000000O10O100000O100000O100000000000O010000000000O010000000AQWO\\\\OPi0>YWO^Ohh0>g0N2M3N1N3L4M3O1N2Oc\\\\^1`0jbaN6K3O1O1000O100000001N1000001N1000001O00001N1000000O2O00001N10001O00001O000O10001O0O1000001N101O0O10001O0O101O1N101N10neV4\"}, {\"size\": [848, 480], \"counts\": \"e\\\\f48Vj09E8K5J6bLPOS]OU1fb0SOR]OW1TM_N_e0>X]O`1_b0cN]]Ob1`b0aN[]Ob1cb0bNX]O`1gb0gNP]O]1ob0gNh\\\\O_1Vc0fNb\\\\O_1]c0dN]\\\\Oa1`c0dNX\\\\Oa1fc0nNg[OX1Xd0a2N2N1O2N2O0O1O1O2N1O1O1O1O11O1O0000000000100O000O3N0010O00000001O0O11O000000O100000O1O100O1000000N2M300O11OO1N101L400O11O00000O2O00000O101O000O2O001N10001N2O1O1N2O2M100O2O3L2O3L5K4M8G6Jh1XN:F8H:F7J4K4L6J6J4L6I7J6H_Wa4\"}, {\"size\": [848, 480], \"counts\": \"R;i0gi000000000000O010000000000O10O1000000000000O01000000000O10O10000000O01000000000O1000O10000000O100000O100000000O1000O1000O100000O10O1000000000000O100000O1000000000O02O00O100000O100000000000O100000001O002M2O2N3L:DUR>1iSA0fi0>N200N2N200O0100000000000O100000O10000O10O10O100000O1000O100000O1000O1000000000000O100000O10O10000000O100000O1000O10000000O100000000O6K8G3MkTd1?ej[N1100O10O100O1000O10O100O10O1000O100000O10O1000000000O01000000000O010000000000O0100000O1000O1000O010000000O1000O10O100000O1000O10000000O1000000000000O10000O10000000000O01001O00000O10O10O1000010O0O01001O001O1N2O1O2N2MVSn2\"}, {\"size\": [848, 480], \"counts\": \"YmP8o0oh0c0\\\\Od0\\\\Oc0_Ob0VOh0E=H7O1O1O1O10000000000O1000O100000000O100O1O1N2N2K6I6J7G8F<XOh0Bb0Bc0YOf\\\\\\\\3\"}, {\"size\": [848, 480], \"counts\": \"X_n42Wj0c0@6L3L7J3M2N4L4M3L4M3M5LO02N2O1N101O2N1O001O00001O0O2O00000000000010O00000000001O1N101O1N101O0O101N10001O0O2O1L5L3M3M3N3M4K8G`0\\\\OYVi5\"}, {\"size\": [848, 480], \"counts\": \"P3b1nh00000000000000000000000000000000001O00000O0100001O0000001O2N7H=C?\\\\OQWa;\"}, {\"size\": [848, 480], \"counts\": \"hVZ66Yj02N3nXO8Xc0K^\\\\O`0]c0F[\\\\O>dc0DU\\\\Ob0ic0Dd[Ok0[d0ZO[[Ok0fd0VOV[Om0id0UOT[OP1hd0ROT[OQ1kd0TOoZOn0Pe0WOiZOi0Ze0[O`ZOZOG5ke0e0VZOoNb0Hde0U2^1K4J7C?K5L6J8G5L7I6I6Jdl\\\\5\"}], [{\"size\": [848, 480], \"counts\": \"bg0n2cg0O2N1O1O2N1O2N2N2N1O2N1O2N2N2N1O2N2N2N1O2N2N2N1O2N2N1O2N2N2N1O3M2N1O2N1O2N2N2N2N1O1O2N2N2N1O1O3M1O2N1O2N2N1O2NbYn:\"}, {\"size\": [848, 480], \"counts\": \"h5V1Zi000001O0O1001O0002N1O00001O000001O000001O00O1000001O01O01N2G8I8M2O101N10001O0001O00010O001O1O00100O1O00001O01O1O001O101N2O1O0O10O10O1O4K2N2Jll`14PS_N<G5K4L3O00O1O101N2N5I7L4Lim9LSRF>F8F:_OmNYWO[1_h0>N1000O1M3O10001O000O1000000010O001O00100O1O000010O00001O001O001O00001O00001O1O00O1001O0O1O1N3K9F;E>DoYh1b0_eWN4M3N2O1O1O00010O1O00010O00001O2N1O101N1O4L3M3M4L3M2N100O1O1O010O001O1O0010O01O001OO2O00000000000000001O000000000000001O000000000O2O01O00O101O0O100O100O2L3G:J5D>DY[8FkdGa0@`0G8F;H7M3O1O2O0O101O00001O0000010O00001O0001O01O0000000010O000001O01O01O00000010O00000001O0001O00000O1O1J7I6L4M3N2O1O10001O000000000O2O00000000001O0O10001O000000000O101O0000000000000O10001O0000000O2O000000000O10iG\"}, {\"size\": [848, 480], \"counts\": \"^9e1kh0000000000000O10O100000000000000000O100000000000O10O10000000000O1000000O11N10O1000000O1000000000000O011O0000O10000000O1000O1000O100000000000O10O1000001O00O10O1000000O10000O2O0N2O1O1O1O2N100N3M4M4K5LVfd0]OYZ[OR1SO4L5K1O1OO100001O000000000000O101O000000000O100000O1000O10O1O1O100O1000O10000000O1000000000O1O1O1O1N2N1O2O1N2N101O1N2O1N2O100O1O1O10O0100O00100O1N2O1M4DPTU7\"}, {\"size\": [848, 480], \"counts\": \"X^j4d0ki0?A9G7H:G8H:F4L4J6L2jLYM`^Oi2^a0[M^^Og2aa0\\\\MZ^Oh2ca0^Mm[O\\\\OT2Y3na0gMj]OZ2Vb0QNU]OY2kb0TNS\\\\Oa2lc0R20000O10000000000O10O10O10000000000O1000000001O00000000O1001O000000001OO20O0000001O1OO2O01O1O0000000001O00000000000O1O100O100O1O10O10O1O1O010O1O0010000O0100O2O000O1000000O2O00001N101O1N2O0O2O1O1O1N3N2N6I5L;Ej1VN9G6I:G;E8G>C=B;F9F8G_kT4\"}, {\"size\": [848, 480], \"counts\": \"S;i0gi00O100000O10000000O10O10000000000O01000000000000O10O1000000000O0100000O01000000000O1000O1000000000O1000O2OO100000O10O10000000O10O100000O10000000000O10O1000000000O10O10000000O01O100O11N:G1N7J002M]jh02`UWO<E4M1O0000000000O1000O1000O100000000000O010000000O1000O10000000000O10O01O1N2O1N2M3N2N2N2M3OmQh33PnWL2M4N1O1N2O1O1O001O010N10000000O100000O10O1000001O000O10O10000000000000O10001O1O001O1N2O3L3NcXm2\"}, {\"size\": [848, 480], \"counts\": \"bmP8e0Ti0i0[Od0@`0WOh0ZOf0C=I7M3O1O100O2O0000000O10O100000000O100O1O100N2N3L3K5J7G8G:^Oc0B`0B?Bg0XOna[3\"}, {\"size\": [848, 480], \"counts\": \"Ri_57Sj0?A<G4K4O9G4L2N3L3O1N1O2N4M1O1N1O2N101N2N1000000000000O2O0000000001O00000000001O1O0000001O1O000O1000O02O0O2N1O2N1N2N202M3N0O4L2N5I5K>XO]]U5\"}, {\"size\": [848, 480], \"counts\": \"Q3a1oh0001O000000000O02O00000000000000000000000000O11O000O10001O1O6I8He0XOPWa;\"}, {\"size\": [848, 480], \"counts\": \"iVZ65Zj03M3M4M6I5L5K4L1O1O2O3L2OO001O1O001O101N4L9G4K7J7GWg]5\"}], [{\"size\": [848, 480], \"counts\": \"ag0o2ag002N1O1O1O2N2N1O2N2N1O2N1O2N2N2N2N1O2N2N1O2N2N2N1O2N2N2N1O2N2N2N2N2N1O2N2N1O2N1O3M1O2N1O2N1O2N2N2N2N1O2N1O2N1O3MR_m:\"}, {\"size\": [848, 480], \"counts\": \"i5U1[i00O2O0000001O00001O1O010O000000000001O0001OO10000O101L3I7N3N2N1O2O00001O000001O01O01O001O001O00100O00001O01O000000010O10O10O2O2N1N100O4L001MRnS2NnQlM9I3M2K5_OZOVWOh0ih0]OoVOe0Si0;100O1N2N2O1O2M2N2O1N2O1N3M2N2O1N3M2N2O1N2O1N3LiSj4O[lUK1O?@2O1O001_NDlXO<Sg0HjXO8Vg0JhXO7Wg0KgXO5Xg0NeXO3Zg0NfXO2Zg0OeXO2Zg00cXO1]g01`XO0`g02]XO0bg01\\\\XO0dg04SXO1ng0Y1O00001O0001O01O00000010O0001O00000010O000000010O000001O000001O0001OO100O1K6H7L4M3M3O1O101O0000000O2O00000000001O00000000001O0000000O101O0000000000000O101O000000001N100000000O101O00gG\"}, {\"size\": [848, 480], \"counts\": \"_9e1kh00000000000O1000000000O0100001O00O100000000000O10O1000000000000O100000O10000000O100000O1000O1000000O1001O0000O1000O100000O100000000000O10O1000000000001O0O100000000O2OO1001O000O10000000000O2O001N3N2M>BUfd0HTZ[O=C4L10O1O10O01O1O010N101O1O001N2O001N101O001N1000001O00000O0100O10000000O0100O100O10000000000O1O100O01000O2O0O10O101O00001O000O2O0O10001O000O2O0O2MfgV7\"}, {\"size\": [848, 480], \"counts\": \"mhV59Qj0e0\\\\Ob0_O<H8G:F5K4L3N1N1O2M2dLSMS_Oo2h`0dMi^O]2Wa0nMX^OSOkMP3lc0VNm]OS2Sb0YNZ]On1fb0cNV\\\\OPN1d3ic0g2O10000O1O100O100O10000O1000000O10000O1O1000000O101O000O11O01O000000000000010O00000000001O0001O001OO11O1O00O11O000000001OO10000O100O100O10000O1N1010000O1000O10O1001O0O2O00001O0O2O001O000O101O00001O0O2O001O001N2O001O1O1N2O1O2N1O1N2O3M1O3dKY\\\\Oi1lc0cMQ]Oo1\\\\f0[Oe0\\\\O`0@5K9F7I6Hbh]3\"}, {\"size\": [848, 480], \"counts\": \"S;i0gi0000000000000O10O100000000000O10O1000000000O01000000000000000O010000000O01000000O10O10000000000000O010001OO100000O1000O100000O10O10000000O100000000O100000O100000O100000O1000000000000000O0100001O00001O1N2O2M5Lla`0E[^_O;F6L2N1O1O010000000000000000O010000O1000O1000O10O1000000O01000000000O1000O1000000000O100000000000000O10O1001O000O100000O1000O10000000O100001O00000O:DSmc3OPS\\\\L:G1O1N3N0000O1000000O10000O010000002N2N1O1O2M3N2McXm2\"}, {\"size\": [848, 480], \"counts\": \"k[S8>Xi0k0oNQ1_O`0G9N3M2O2O0O2O1O001O001O1O1O1O1N2O1O00001O000001O00001O0N3H8]Od0@b0B`0WOWWOQOV[\\\\3\"}, {\"size\": [848, 480], \"counts\": \"RSl5b0ji07I6L5J5K3N3M4M4L3M2N2N4K4N2M2N2N1O2O0O101O0O100000001N1001OO10000000000000000000O1001O01O000000001O00001O001O001O0O2O1O1O1O1N102M3I7L4I8G:H;DUie4\"}, {\"size\": [848, 480], \"counts\": \"Q3\\\\1Ti02N2N1O1O000O100001O00000000000000000O100000O11O0000001O001O5J7J:E>\\\\Ob\\\\`;\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}], [{\"size\": [848, 480], \"counts\": \"cg0m2dg0O2N1O1O2N2N2N1O2N1O2N1O2N2N2N2N2N1O2N1O2N2N1O2N2N2N1O2N1O2N2N1O2N2N2N1O2N2N2N2N2N1O2N2N2N2N2N2N1O2N2N1O2Ncno:\"}, {\"size\": [848, 480], \"counts\": \"i5U1[i00O2O001O1O01O01O1O00000010O0O1001O000001O000O100N2L4L5M2O2N1O2O001O00001O01O001O0010O01O1O001O1O001O01O00010O000000010O01O001O001O01O1O1OZdP2_OS\\\\oM9SOC[WOb0ah0CTWOf0jh0d0L2N4L2N2NO2M2O1001O00O10001O000O101N100000001O01O1O001O0001N100O1O1O2M3N1N2O2L4M2O1O2N1N2O2N1N2N2O1N2O1N2O1N2N2N2O3N0O2MlS`41Ul_K2N3M3M2N2N2N2N1O3N1N2N2N4M6I6J3M2N2N3N2M5dWOUNig0Z2O1O00010O00001O000001O0000000O1I8I6M3L4N2O2O0O1000000O101O0000000000001O000O10001O000000001O00000000000000001O000O100000001O0O1000000O101O00fG\"}, {\"size\": [848, 480], \"counts\": \"_9e1kh00000000000000000O1000000000000000000O10O100000000000O1000000000000O10O100000000000O10O1000000000O10000000O1000O100000000000000O010000000000000O10000000000000000O101OO1000O2OO11O0000000O101O002M3M7Ik`e0ZOieYO2ji0>K0O00O1O10O01O2N00001O001N101O000O101O002N1N200N3N001O0O2OTU[8\"}, {\"size\": [848, 480], \"counts\": \"e[g5a0ci0P1SOc0D>C3M2N2O0O1eLWMn^Oj2o`0YMQ_Og2n`0\\\\Mm^Og2Ra0]Mj^Od2Ua0`Mg^Oa2Ya0iM[^OY2da0lMV^OV2ja0SNi]OQ2Vb0WN`]Ol1_b0^NU]Of1jb0mN\\\\\\\\OZ1cc0j200O1O100O1000001N100O100O2N100O100O2O01OO101O01OO101O000000001O00000000010O0001O000000O2O01O0000000000000000000000O100000000O100O010O100O010000000000O1000000O10000O1000000O1000001O0O10001O0O10001O001N101O001O1N2O1O0O3N1O1O2hLk[OmMd0=dc0Z1n]O]NWb0S1b^O_Nea0X1P4Db0]Oh0TO`TS3\"}, {\"size\": [848, 480], \"counts\": \"T;i0gi00O0100000000000000O01000000000000000O10O1000000000O10O100000000O01000000000O10O1000O10000000O100000000000O0100000000000O010000000O010000000000O100000000000000O10O1000O1000O1000000000000000O10001O001O1O1N3N4K[g?Id^_ONRj0;M4J3O1O1O10O0100000000000O1000O1000O1000O1000O100000000O1000000O1000001O0O2O1O1O1O1O1N2O00001O100O2M4M0OQhi7\"}, {\"size\": [848, 480], \"counts\": \"Z\\\\S85Vj08K5[M1aZO2Ue0;bZOK[e0`0aYOoNDJNn0lf0`2O2O0000000O100000001O00000000001N11O000000010O0O2F;]Oc0Aa0Bg0VOc\\\\\\\\3\"}, {\"size\": [848, 480], \"counts\": \"]e\\\\6o0\\\\i0:I3M5K4L5L4L3M2N2N2N2M201N1O2N1O2N100O2O0O100O2O00000O100000000O100000O10O1001O0000001O000O11O01N10001O2N1O1O0O2O1O002N2N001O1O2M3L3N3CdWO_Nbh0U1XWOmNXi0i0f0WOiVU4\"}, {\"size\": [848, 480], \"counts\": \"Q3`1Pi01O1O001O000000000000000000O1000000000000000O11O0000001N102N6I=D?ZORWa;\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}], [{\"size\": [848, 480], \"counts\": \"kg0e2lg0O2N1O2N2N1O2N2N1O2N2N2N2N1O2N2N1O2N2N2N1O2N2N2N2N2N1O2N1O1O2N1O2N1O2N2N2N1O3M1O2N2N2N1O2N2N1OfmT;\"}, {\"size\": [848, 480], \"counts\": \"i5U1[i00O20O01O1O00001O0010O000001OO2O01O000001O0O1M3L4M3O101N101N2O00001O00001O01O001O01O01O1O001O001O00000010O000001O01O01O1O001O00010O02M2J\\\\VO]OeTi1b0bdWNAPWOf0mh0\\\\OPWOh0mh0[OnVOi0Qi0=N1O1O1O1O1O01O01O001O000010O000000001O0000000001O01O0O1000010O0001O001O1O10O0001O01O000010O01O00001O001O000O2O0000000O1000000M3M3N2J6J6K6J5M4L7HjiR17iUmN>G5L3O0103L3N1N2O1O100O1O2N1O1O101N101N1O101N1000000O2N10001O0O2O000000QX=2mgB10O01O1O1O00002N1O1O1O100O101N2N2N4iVOJlg0`1M2N000000000001O001O000000001O000O1000001O000O1O1O2M2L4E<H7D=\\\\OYVO1eZ82R_Ha0D<F:A>J6K6M2O101O00001O00001O0000010O0000001O01O01O00000010O000001O000010O000001O0001O0001O00000001O000N2K5K5K6K4N2O1O101N1000000000001O000O1000001O00000000001O00000000000O10001O000000000O10001O0000000O101O00000O100000fG\"}, {\"size\": [848, 480], \"counts\": \"`9d1lh000000000000O1000O10000000000000000O100000O10000000O10000000000O100000O10000000O1000O100000O10000000O01000000000000O10000000O100000O10000000000000001N2OO11O0000000O1000O11O0O10001O00O11N2O1O2M6Ickc0^OnT\\\\Og0\\\\O7I3L3N001O00000000000001O00000O100000000O10O1000000O01000O10O100000000000O10O10000000000000000O10000000000O0100000000000XOTWOLlh04TWOKmh04TWOLlh04UWOKkh05VWOJjh06VWOJjh05WWOKih04XWOLhh03YWOLhh04XWOLhh03YWOMhh00ZWO0gh0NZWO2gh0K[WO4gh0H\\\\WO8^i00000OO2O1M3M3N2O001O1O1O1N2N2N1O2N2O1N2N2O11N2OO10]OlVOJSi04UWOHjh07XWOIhh02]WOLhh0L\\\\WO4ai0N10000O10O1000O10O001O001O01000O10000000O10001OO03LhPj5\"}, {\"size\": [848, 480], \"counts\": \"gcP6n0\\\\i08M2M2N3L3L5J6G9L3_LlMZ[OOV3X2^a0TNZ^Oo1ea0TNV^On1ia0WNQ^Ol1na0[N^[OUOY2a2Xb0gN\\\\]O]1cb0mNQ]OU1nb0QOj\\\\OS1Uc0ROc\\\\OQ1]c0SO\\\\\\\\OP1dc0ZOj[Oo0Ud0f201N101O1O0O101O001O1O001O00001O010O1O000001O01O0O11O01O0000000000000001O000000000000000O1000O010000O100O010O01000O01000O01O001000O1O100O10O10O10O0100O10O1000O10000O2O00O1001N10001O0000001O001O0O2N2K4K6_N][OoLhd0]2o1]Od0D<I7K6J5K6K5K5J8I7Gc0XOY\\\\l2\"}, {\"size\": [848, 480], \"counts\": \"T;i0gi000O010000000000000O1000O100000000000O10O1000000000O10O10000000O10O100000000O10O1000O100000O1000000000O1000O1000000000O10O10000000O010000000000O1000000000O10O100000000000O10O100000000000000O101O1O1O1O2M3N3L7IdW=<ogB2O001N2O1O1O10000000O10000000O100000O10000000O010000000O0100000O01000000000000O0100000000000O1000O10000000O10000000O1000O1000000000O100000O10O10000000O1000O100000000000O10O1000O100000000O01000000O1000O10O10000000O01000000000000O1000O0101N01000000O011O0O1000O01000000001OO1000000O2O1N2N3M7GQhW1MnWhN8M2O1O1O1N2O1O1O10OO2O10O1010O0000O10000O100000O1000O100001O00O1000O1001O000O10001O1O1N2O1O3L3M1Mdmn2\"}, {\"size\": [848, 480], \"counts\": \"]Xo7n0oh0d0]Oc0^Oa0[Of0A>A?E<L3O1O1O10001OO10000000O100000O1O1O100O1O1N2N3K4K5G9F;D<@`0E>C>_OlQ^3\"}, {\"size\": [848, 480], \"counts\": \"bme6h0ai0c0A5L3M3M3N3M2N2N2N2N2N3M2N100O100O101N2O0O10000O10001O0O1000001O00000000000000O10010O00001O00001O001O001N101L3M3N3M3M4L3M3M3K4L5L5K5J7I8Gicm3\"}, {\"size\": [848, 480], \"counts\": \"Q3c1mh0000000000000000000000001O00O100001O00000000O0101O00001O2M:Fh0TOPlb;\"}, {\"size\": [848, 480], \"counts\": \"PlW64Si0[1I5iL`Nh\\\\ONSNf1Te0bNa\\\\ONVNb1Xe0cN_\\\\OQ2ac0RN\\\\\\\\On1cc0VNY\\\\Ok1gc0bNj[O`1Vd0bNf[O`1[d0aNb[O_1_d0dN][O\\\\1dd0hNW[OW1ld0mNnZOj0]e0\\\\OXZOa0oe0a0`1K5J6I7K5K8I6K9H6J6J6I7Haa^5\"}], [{\"size\": [848, 480], \"counts\": \"Xh0X2Zh0N2N2N1O2N1O2N2N2N1O2N2N1O2N2N1O2N2N2N1O2N3M1O2N2N2N2N1O2N2N2N2N2N1O2N1O2N1O2N2NRgZ;\"}, {\"size\": [848, 480], \"counts\": \"i5P1`i01O2N100O001O001O0000010OO1000000O1O1N3N10001N100O101O001O1O00001O0001O01O0001O1O00001O000010O0000000010O1O00001O010000N2O2N2M3N3Ah]^1MebaN3N2O1N2N2]Oe0\\\\OROYWOV1dh0<O2O000000001O000001O0O101O000000001O000001O00001O01O000O11O0001O00000000001O0001O1O001O10O01O001O00010O01O1O001O001O01O00O2O00000O101OO1000O1N2M3M3J7K4K5K6I8JSk50lTJ6L3M4N2N1N2N25L9D_`e0M[_ZOd0De0ZO9H4N2O001O01O00000001O00010O00010O00010O00000010O000001O00O110O0000010O000O11O00001O01O0001O00010O001O1O0010O01O001O0000010O00000000000001OO1001N110O000000000O2O0001O0001N10000000001O0O100O1O1I8E;G8E=EoZ84gdGa0D:B?H7L4M4O001O0O110O00001O0001O01O0000001O01O01O000000010O001O00001O01O000001O000001O0001O000001O0O1O1J6J7K4M3N2N2O110O000O1000001O00000000000O2O000000001O00000O100000001O00000000000000001N10000O1000001O000O10001O00000000eG\"}, {\"size\": [848, 480], \"counts\": \"a9c1mh001O1O2N3M2M3N100N2O1O2N2N2N2M3N1O1O1O3M2MPOEnWO:Qh0JPXO1Qh02nWOKSh08P12O3M1O4L3L3N1O101M10O12M2O1O2N2N1O1O3M00000O101OO1001N100000O10000000O100000000000000000O101O00001O000O101OO1000000000O101O000O2O1N2O5J>AXkc03cT\\\\O>F8G6K000000001O00000000O1000000000O10000000O10000000000O10O10000000O1000000000000O010000000000000O1000000000000O10O1000WOUWOLlh03WWOKih05WWOKih05WWOKih04XWOLhh03YWOMgh03YWOMgh03YWOMgh02ZWONfh02ZWOMgh03YWOMgh01[WOOeh00\\\\WO0dh0N_WO1bh0L`WO3eh0E^WO<[i0000O100N1O2N2O1N2N2O10OO2N2N2K4O2N2N2N1010010OO10000[OQWOHQi03VWOJjh03ZWOLjh0K]WO4_i01O00O1000000N100100O1O10OO2O100000O1000O100O1O1O010O1O1O1M3M201O0010O2N1O1M4O0O100O1O2N10001N2O0O10001M3NRUV5\"}, {\"size\": [848, 480], \"counts\": \"_lj5m0Pi0d0VOj0E:K6M2WMVMg]Oo2Wb0h2M1O2N101N2O0O2O2M2O1O1O1N2O1O2N1N2O0O2O1O0O2O1001N00N30O4L100O2N0000001O1O100O001O002N1O2N1O001O00001O00O11O0000O1000000O10O100000O1O11OO1O1O1N1101OO1O1N10100O10O01O1O1O0101N01O1O0101O0O101O0O100O2N1O101N1O2N1O1O2N1O2N1O2N1gKa\\\\O`1bc0TMX[On0_1h1Wf0H9QOn0C=I8H7Bj_Y3\"}, {\"size\": [848, 480], \"counts\": \"U;g0ii000000O10000000O10O100000000000O10O1000000000O010000O100001N10O100000000O10O10O1O1000O01000000000000000O1000000000O1000O1000000000O11N1000000000O0100000000O1000O11O0000O10O1000000000001O1N101O1O3L6K5IRR>:emA5J3N1O1O1000O10O10000000O1000000000000O010000000O10O10000000O10O100000O10O10000000O10000000O1000O10000000O10O10000000000O010000000000O11O00O1000O10O1001O00O1000O10O11O0000O10O10000O0100000O010000000O1000O10000O1O01000O100000O101OO1000O1000O1000000O10O1000000000000O1O1M3M4H^V_1Nki`N0O2O1O1O2N2N2N2N1O0O101OO10000000000000O10O1000000000000O10000001OO10O10000001O001N2O2M2O1N101N3LcbP3\"}, {\"size\": [848, 480], \"counts\": \"ohl7l0oh0f0^Ob0XOh0]Ob0_Oa0C=G9M3O1O2O0000000O1001O00000O10O10O100O101N1N2O1N2K6G8D=_Oa0G:_Ob0]Og0]OYa`3\"}, {\"size\": [848, 480], \"counts\": \"Xka6g0ci08H7L5L3M3M3N2N2N1O2N3M3M2N2O0O2O1N101N101N2O1O1N2O0O2O000000000O100000O101N0100000O101O00000O2O0O101N101N2M2O2N2N2M3L4H\\\\WO`Ngh0]17O2N3M2N3L6E`0\\\\Oi`R4\"}, {\"size\": [848, 480], \"counts\": \"Q3c1mh000000000000000000000000000000000000000O101O001N2N5L7FdVf;\"}, {\"size\": [848, 480], \"counts\": \"kUV6:ef0Kb\\\\OZ1]b0lNd\\\\OF\\\\Nd1od0gNa\\\\OKYNb1Ue0fN_\\\\OORN_1_e0eNZ\\\\On1fc0TNW\\\\Om1ic0\\\\Nm[Oe1Sd0`Ng[Oa1Yd0bNc[O^1^d0eN^[O[1cd0hNY[OX1id0lNQ[OT1Pe0ROhZOn0[e0XOZZOPOb09We0a1][OeMnd0V2i1G9J8H9J6J6K6I6J6J8HRQa5\"}], [{\"size\": [848, 480], \"counts\": \"Qh0_2Sh0N1O1O2N2N2N2N1O1O2N2N2N2N2N2N1O2N1O2N2N2N1O2N1O2N1O2N2N2N2N1O2N1O2N2N1O2N2N2N2N2N1O2N2N2NbbV;\"}, {\"size\": [848, 480], \"counts\": \"aba04\\\\j03M4K3N2OO02N1O102M2N2N100O000000000000O10000O1O2O0O1O100O2O0L5N1O2N11OO2Oc]^11[baN8I1N10000O1O1M4I6@a0D;OO2O11O000001N10000000001O01O00O2N11O00O1000010O01O00000001O0001O0000O101O00000001O001O010O1O0000O2L3O1L5M3L3J7K5M2K5N3N1N3N2N1O2N1O2Lhhl21XWSM3N2M201N101O00001O001O001O01O01O001O1O001O10O01O1O100O1O001O010O001O1O00010O001O1O1O10O0O1L6EQf6EbZI3J9]Oa0C;D>D<J3O100O2O0O1010O01O000000010O00001O01O0001O000001O0001O00001OO2O000O1O1N2O1N3L3L4N2M3M3M4L3O1N2N2O1O2N100O100O101N100O1000001N100O1001O0010O01O1O1O2O1N2N4L1O1O01O01O000000000001O0O100000000O2O0000001O0O10000000001OO1001O00dG\"}, {\"size\": [848, 480], \"counts\": \"o9V1Yi0100000000O100000O010000O100000O01001O0O2O2N5L7H7Him9FnQFh0F9L3M5L1N100O100000000000000O1000O100000000000000O1000000000000000000O1000O1001O0O1000000000000O2O1O4K9G\\\\kc0LhT\\\\O<D9H3M2N00000O11O00O010000000000000000O01001O0O0110O00O100O1O1O2J7A>[O_[_8\"}, {\"size\": [848, 480], \"counts\": \"fQQ5=ni09bN\\\\OdXOk0jf07]XO0[g0h1I7L5H7A`0E9K5F:K6H8I7D=L4K4I6L4N1J7M3N101N10001N10000O2O000000001O0000001O0001O00002N1O2O1N2N3M3M1O1O2N2OO01O001O1O1O0000001O001O00000000000001O000O1000000O100O100000000O100O1O100O100O1O100O1O01000O1O100O100O10O10001O000000000O101O000O101N1PLa\\\\Oo0`c0kNh\\\\OQ1Yc0gNU]OR1lb0jNZ]OT1gb0fNa]OV1`b0gNd]OW1^b0^Nm]Oa1Tb0YNR^Oe1Pb0UNU^Ok1la0nMZ^OP2ja0iM[^Og1[b0nMm]Ok0`f0I<BWVj3\"}, {\"size\": [848, 480], \"counts\": \"V;g0ii00000000O10O10O10000000000O010000000000O01000000O010000000000000000000O0100000O100O001000000O0100000000O2OO100000000000O10O10000000O100000000O10O1000000000O100000000000000O10000000001N2O1O2N2M;ERg?1mX@7F9J2N10O1000O1000O10O10000000O100000000000O10O1000O10O10O11O0O3N3M2N1O1O1N2O1O1O0000O10001OO01N2000O0100000O0010O1O1000O1001N10O10O10000000O100000000O3Nje[7\"}, {\"size\": [848, 480], \"counts\": \"f`m7g0Yi0b0C<L4M2O2O1N2O1TZOQNUc0o1i\\\\OVNTc0k1h\\\\OXNXc0i1d\\\\O[N[c0f1b\\\\O\\\\N^c0e1]\\\\O^Ndc0d1W\\\\O_Nhc0d1Q\\\\O`NQd0`1j[OdNVd0^1c[OgN]d0^1V[OiNjd0_1gZOiNYe0W30O100O2N1N2M3K5J7E:F;]Oc0Ba0_Ok0UOdPc3\"}, {\"size\": [848, 480], \"counts\": \"\\\\k`6d0fi0`0A:H6K6I4N1N2O1N2O2N2N2O001N1O2O1N100O100O100000001OO10O100000000000O1000000O2O000O1O100O1O2O001O1O0O2K5N1O1E<N1O2O0O2O1N2O01000O101N1O2M2N3L7G;Fg[o3\"}, {\"size\": [848, 480], \"counts\": \"R3g1ih0001O00O100000O2O000000010OO1M3O10010O0O2O4K>B`0\\\\Oaeh;\"}, {\"size\": [848, 480], \"counts\": \"]hR67Wj05L4L2QXOAke0a0QZOAne0e0oYO[Ooe0g0oYOZOPf0j0jYOXOVf0i0fYOZOZf0h0bYOZO^f0h0_YOYOaf0j0[YOWOff0k0VYOVOjf0P1PYOPOQg0Q1lXOoNVg0U1aXOnNag0l0`XOTOeg0JYYO5kf0EaYONifk5\"}], [{\"size\": [848, 480], \"counts\": \"Xh0X2Yh0O2N2N2N1O2N2N1O2N1O2N2N2N1O2N2N2N1O2N2N1O2N2N1O2N2N2N1O2N2N2N2N1O2N1O2N1O1O2N2N2NclY;\"}, {\"size\": [848, 480], \"counts\": \"m5Y1Wi00000000001N03N10N10O01N3N1N2O2N3L4L4J8ClbZ25V]eM8I3NO10O2O0O1L4\\\\Od0L4O10000000O100000O1000000O10O1O11O001O000001O000001O01O00000000001O00000000001O01O01O01N2O10O1O3M?A:POZVOb0Qj0In_\\\\38PfbLA_i0P1G5H7H7L5M20000001O1O1O1O1O1O1O2N1O2M3N101M2O3M1O1O1O1O1O001O1N1000000O101O0O1O1M4FfS9@SmF000ZVOb0Yh0@UWOR1hh0=M2O2N100O2N101N10001N10000O2O0O100O2N100O2O0O100O101O0O101O0O101O000000010O000000001O000001O0000000O2J5J6K5K5N3N10000000001N1000000000001O0O10000000001O000000001O000O1000000000000000001N100000000O101O001O0O100000001O0000000O1000000000dG\"}, {\"size\": [848, 480], \"counts\": \"a9e1kh00O1001O0000O101OO100000000O10000O1000000O1001OB]WOmNgh08XWOHi_j0N[ZVO6QVOJ\\\\i09cVOG[i0>aVOD]i0?_VOC_i0h0O2N1O1N2M3M3N2O001O100O10000000O100000000O2O002N4Ka0_OdPc02Wo\\\\O;I?A4L00000000000000000000000O11O0000000O010000000O100000O1000O100000000000O01000000O1000O100000O100000000O100PO\\\\WO4dh0HaWO7_h0FeWO8\\\\h0FgWO9Yi0O2M3N2Nj]k7\"}, {\"size\": [848, 480], \"counts\": \"oW\\\\4<eg0JaZO:We0;XZOIce0f0oYO^Oje0P1lYOSOne0X1iYOlNPf0o2I7H9K4G;G8I5K5K5K4N2M4M2N2O2N1N2N2N3N1O2N1O1O2N100O101N100000000O2O00000010O00001O1O1O102M2N1O1O1O01O00000001O00O2M20000O10000O10001N100O10000O1M4O00000000000O2O0000000001OO100O100000000000000001O00001O001O001O000[Ko\\\\Ok1Rc0gMc]OQ2]b0gMo]OT2Rb0hMU^OU2ka0hM\\\\^OT2ea0dMe^OY2[a0dMl^OX2Ta0fMo^OY2Qa0bMV_O[2l`0aMZ_O\\\\2f`0aM^_O^2c`0`M`_O^2a`0_Mb_O`2^`0^Mg_O^2[`0_Mh_O`2X`0^Mk_Oa2Rd001OO1001O<CQ2jMPc`4\"}, {\"size\": [848, 480], \"counts\": \"V;h0hi00000000000O1000000000O10O10O1000000000O10O100000000000O1000000000O1000O1000O1000000O0101O0O010000000O1000O10000O10000O0100000O100000O1000O10O100000000000O010000000000O101O001O1N2O2N3L6Jfl>2WSA9I0O100M3O1000O100000000000O010000000000O10O1000000000O10O1000000000O0100000O1000O100000O01000000O01000000000000O010000O1000O2O001O2M9EVeV39bZiL3O1O000O11O00O010000000000O10O011O0000O100000000000O01000000000O10000O01000001O00001O1O0O2O1N3M2O2L2NcaU3\"}, {\"size\": [848, 480], \"counts\": \"]Qk7>ei0?F9J6J6L3N3M3M2O3N001O1O1O1N2O2N1O2N1O101N1O2N3N2M10O1N3M4I9F`0ZOoTg3\"}, {\"size\": [848, 480], \"counts\": \"mUP6>ni09I5I7K5J6K5K4J6L3N2M2O2N101N1N3N100O1O100O1000000O010O10000O01000000O100O1O1O1N2O1M3N200O1O2O0O1O2N100O2O1N101O1O1N2O01O10O1O001N3N1O100O1N4M2N1N3N1O103H7Jll[4\"}, {\"size\": [848, 480], \"counts\": \"T3c1mh000000O11O00O100000000001O1N2N4M7H>\\\\Ojdm;\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}], [{\"size\": [848, 480], \"counts\": \"eh0k1fh0O2N2N2N1O2N1O1O2N2N1O2N2N2N1O3M1O2N1O2N1O2N2N2N2N1O1O2N2N2N1O2N2N2NRf_;\"}, {\"size\": [848, 480], \"counts\": \"P6W1Yi000O10000O1O2M200O1O101O0O102N001O01O01O0000001O000001O00000001O0000001O00001O1O1N5KnVd1LWi[N3L3N1N100L5G8O1O100O100O10000O011O0O1O1O001O100O1O101N01O010001O0O2O1O00000O2O00001O101NK6WO]oP3BhQoL3M4M2N1OO001010N01002M1000O1O100001N2O000000001O000000001O0000000oNYOYXOg0ag0_O^XOb0ag0_O_XOa0ag0_O_XOb0_g0_OaXOa0_g0@`XO`0_g0AaXO?_g0AaXO?_g0AaXO?_g0B`XO>`g0B`XO>`g0AaXO>`g0B`XO>`g0B`XO>`g0B`XO>ag0A^XO`0bg0@^XO`0bg0@]XOa0cg0_O]XOa0dg0^O\\\\XOb0dg0^O\\\\XOb0dg0_O[XOa0eg0_O[XOa0eg0^O\\\\XOa0eg0@ZXO`0fg0_O[XOa0eg0_O[XOa0eg0_O[XOa0fg0^OZXOb0fg0^OZXOa0gg0_OXXOb0hg0^OYXOa0hg0^OXXOb0ig0]OWXOb0jg0]OWXO`0mg0_OSXO?og0ASXO;og0E^10dT9M`QF?lh0f0L2O2O0O110O00001O0000010O01O01O0000001O000010O00000010O0010O000000010O0000010O001O0010O00000O100O1N2VOcN^XO`1bg0fNmWOc1Uh066J6J6N2N111N1000000000001O0O10000000000000000O2O000000001O00000O10000000001O0O10000000001O000O2O00000O1000001O0000000O1000001O0000000O10000000bG\"}, {\"size\": [848, 480], \"counts\": \"h9a1oh000O2O001O1O8H3M001O1N100N3VObVO8oPc0JTi]O6I7K3M2N100M3O2M2M3N20000O100O1N2M3M3O1N2O0010O1000000O10O100001N1000O10O10O11O1N2O3M4Lb0\\\\OTkc0NR[[OFbi0Q1D5L2N2N1O000000000000000000000O2O0000O100000000000O1O10O10000000000O1000O02O000O1O2@jU`8\"}, {\"size\": [848, 480], \"counts\": \"R[m3k0^h0Y1POo0XOg0@a0H7K6L3M3M4L4M2O2L3M3N2O1N2O1O1O1O101N1O100O2O0O1O2N100O2N10000O2N10001O00000011N100O0010O00001O00001N100O2O0O2O00000O2O000O2N1000010O00000O100001O000000000000000eKe\\\\Oa1\\\\c0WNX]O\\\\1hb0^Nc]O\\\\1^b0`Nj]O\\\\1Vb0]NU^O_1ka0_NY^O_1ga0_N]^O_1ca0^Na^Oa1_a0]Ne^Oa1\\\\a0\\\\Nh^Ob1Xa0\\\\Nl^Ob1Ta0\\\\No^Oc1Ra0ZNQ_Od1Pa0[NQ_Oe1o`0YNT_Of1m`0WNU_Oi1k`0UNW_Ok1j`0RNX_On1h`0QNY_Oo1h`0oMY_OP2h`0nM[_OQ2f`0mM[_OS2e`0lM]_OR2e`0lM]_OS2c`0lM__OR2c`0lM__OS2c`0jM`_OS2ad0N3L3N2M8H7J8G:E;Ffm[5\"}, {\"size\": [848, 480], \"counts\": \"X;h0hi000000O1000O10000000001O0O100000000000000O101O0000O01000000000000000O1O001O1O1000O0100000000000O100000O10O10O100000000O010000O10O10000000000O1000O1000000000000O011O001O1N2O2N1O6IY]<KkbC<E1O10000O1O1O0010000O100O01000000O10O100000O10O10000000O1000O1001OO01000000O01000000O100O02O1O00001N10O12N1O1N102M8FU]i2=abVM2N000N2O100000000O01000000O10O1000O10O100000O1000O10O01000000000O100000000O100000O100000O1000000000O0100000000000O10O100000O10000000O102N1O2N1O1N4L3M_U\\\\3\"}, {\"size\": [848, 480], \"counts\": \"Xjb713>Vi0m0mNQ1VOk0ZOd0K6L3M3N1N3N3M4L2M200O1O1O0O2O0000000000O1O1O2M2O1M4K5I7C>@a0\\\\Oi0VOknl3\"}, {\"size\": [848, 480], \"counts\": \"n_[5?ki0=F6K7I5K5K4M2N2N1N4K4N2N2N1O2N10001O0000000O1000O1000000O100O1O0O2N2O1O2M2N2O1N2O1O101M200O2O0O101N10010O001O100O1O001O1O0O201M3N1O1O0O3M2O2M3M3M4J7HTRS5\"}, {\"size\": [848, 480], \"counts\": \"V3d1lh00000O1000000000001O002N;D<BdnP<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}], [{\"size\": [848, 480], \"counts\": \"Ti0\\\\1Ui0O3M1O2N1O2N2N002N2N2N1O2N2N2N2N1O2N2N1O1O2N1O2N2NcTg;\"}, {\"size\": [848, 480], \"counts\": \"[^=2^j04L2N1O2N2M2O3M4L2N1O0010O00001O0O2O0O2N2O2N4K`ga1LbX^N6L2O2N0O1O2M2I7H8N2G9000OO3M20O01N200000O1000000000000O2N100001O001O001O10O000000000O1000001O000001O000010O0001O0000O101N10001N101O0O2O1N2O0O10010N1O1O100O1N3N1O2N1O1O4L3L8G[]^1Gfh`N0Tj09L4L4L5J4L4M2M4L3L4L4I8K401O0O1000001O000001O0000000001O0010O00000000000001O01O0001O001O01O01O00010O000000001O00010O00000001O0000000000001O000000001O000O1000001O000000001N100O1O1K6D<^Ob0Ddo9?goEc0_O`0J6M2O2O00001O0000001O001O00000010O00000001O01O01O0000001O01O000001O0001O0001O00000010O000000000O1N2L5I6K5M3M300O101O0O11O000000O101O0000000000001N1000000000001O0000000O10001O0O1000000000001N1000001O0O100000001N1000001O00000O1000000000000000O1O1M2M4G9O1O1UH\"}, {\"size\": [848, 480], \"counts\": \"n9]1Si00O010O1O1O1O1O100000O010000O1O100000O101O2N1O3M2N2N3L3N3M3M2N2M2O2N2M4M2N4L2N1N4MbN5Z11M3M4M2N001O1ON2O1OYVOD\\\\i0:eVOJXi05iVOOTi0OlVO7oh0HPWO<nh0_OVWOd0Xi03N3L3M2O1O1O1O1O1O10OO2000000001N6J=Cged02g`ZO\\\\OM3mh0o0nVOVOlh0Z1O000O101O00000000O1000000000O1000000000000000O0\\\\OaWOSOeh0h0d0M3O1N2N2N1O2N3L3M3LlXj29ofUM5J0101O02N1O0000000001O0O10000O2O00000000000O2O001O1O0O10000000001N2N100O2O0O20O00O1Niaj4\"}, {\"size\": [848, 480], \"counts\": \"m\\\\Z3<Pj05K5M2L5L4L3M4L4L3iNkNmXO[1Xf0m1E:L5K4N5J4M3M2N3M2O1O2N2N1O2N1O2N101N2N101N101O0O2O1N2O1N101O001N101O000010O101N10O00010O00000000001O0000000O10iLc[O;]d0[OT\\\\O>mc0^OZ\\\\O>fc0^Oe\\\\O;[c0Bm\\\\O9Sc0EW]O3ib0Ga]O5_b0Jg]O1Yb0Nj]O0Vb0Nm]O1Sb0MP^O1Rb0LQ^O3oa0KT^O4la0JV^O6ja0IW^O7ia0IW^O7ia0IW^O7ia0GZ^O8ga0FZ^O9ga0E[^O;ea0D\\\\^O<da0B^^O=ca0B^^O>ba0A_^O?aa0@`^O`0`a0_Ob^O?_a0@b^O`0_a0^Ob^Oa0_a0^Ob^Ob0^a0]Oc^Oc0^a0[Oc^Od0^a0\\\\Ob^Od0_a0ZOb^Oe0`a0YOa^Og0`a0WOa^Oh0aa0VOa^Og0ba0WO_^Oh0ee0O1O2O1N4L>_O`oW6\"}, {\"size\": [848, 480], \"counts\": \"Z;i0gi0000000000O010000000000O0100000O01000000000O1000000000000O010000000O1000000000000O10000000000000001N1000O1000O0100O0010000O1000000O1000O10000000O10O2O001N101O1O1O7HXg?JnX@4L8J0O0O10O1000O100000000O010000000000O10O1000O101N1000001N10006Geam23W^RM<H100N10000O1000O10O100000000O10O1000000000O1000O100000000000O100000O001000000O01000O10O1000O1000O10O100000000O1000000000000O1000O10O100000000O10O2OO1000000O1000000000O11O0O2O1O1O1O2N2M2O0OO0Re^3\"}, {\"size\": [848, 480], \"counts\": \"oQ]73`i0[1iNj0TOmMdXOi2af0P1ZOg0L3O010O2O00000O11OO1000000000O100000000O100O2M2N3M3J5J7F<ZOg0]Oj0POgmQ4\"}, {\"size\": [848, 480], \"counts\": \"XRk4?mi08J4K7J7G?D00002O000O2O0O1N3N2N2O000O1000000O100O010000O100O1N2O1N2M3N2O1N1O2O1O100O100O10O2OO2O001O1O001O001N2N101N2O2N1O1N2N102L4M5GUTj5\"}, {\"size\": [848, 480], \"counts\": \"Y3_1Ri0O001O1O2N4L:E:XOUVO3\\\\gV<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}], [{\"size\": [848, 480], \"counts\": \"ii0g0ji0O2N2N2N3M1O2N1O2N1O2N2NRmQ<\"}, {\"size\": [848, 480], \"counts\": \"X6g0ii0000001O00000000100O2N2O1N2L\\\\Uf2OZjYM>N3N1N2O1O001N2N1O101N1O1O2N1M3N201N10O0100000O11O00010O00001O1O10O01O00001O01O001O010N10010O001O001O00000O100000000O1N2M3L4K5I7K7GYYU17bfjN<Ed0]O6L2O1O1O0000001O0001O0001OO10010O0001O0001O01O001O0000010O0000001O000001O01O00001O01O000001O001O01O00010O000001O0001O0001O000000010O00000000000001O0000001O0000000O101O0000001OO10O2O00000O2M2K5D=@Sj::bUEb0C<L3N2O2N1000001O001O0000001O00010N11O0001O01O01O0000001O0001O0001O000001O0001O0000000010O0000000O1N3I6K5K5L4O1O1000001O00000O10001O00000000001O0O1000001O00000O100000001O0O1000000000000O2O0000000O2O0000000000001N10001O0O1000000000000O10000000002N000O2O00001O000O1000\\\\G\"}, {\"size\": [848, 480], \"counts\": \"i9l0?YOah0g0`WOXO`h0g0bWOXO^h0h0bWOXO^h0h0aWOZO^h0e0cWOZO]h0g0cWOYO]h0f0cWO[O]h0d0cWO]O]h0b0dWO^O\\\\h0a0dWO@\\\\h0?eWOA[h0>eWOC[h0<dWOF\\\\h0:bWOG_h08`WOJ`h06_WOK`h05`WOL`h04`WOL`h02aWOO_h00bWO0^h0ObWO2^h0MbWO4]h0LdWO4\\\\h0KeWO5[h0JeWO7[h0HfWO8Yh0GhWO:Xh0FhWO:Yh0DgWO=Zh0BgWO=Vi0O011O1N3N2N5JPS9LSmF6J6I5L6J4L5K2L5L3O1O1000O10O1001O1N2N4M4L=Baim0GfVRO8QVO_Odi0g0O2M4K4N4L5K2N2N2OO1N3OO1O10000O10O01M3O100O0101O2N1OO10000000O10000000000O100000O11N01000000000000O0101OO1000O1000000O1000O01XOh0L4M4GTl`1KWT_N5L5K4M9G1O1O01O000000000O2O000000001N10001N10001O00000O101O00001N10000O2O00001N10001O00001O0O100O2O0O10001N2O0000Ugi4\"}, {\"size\": [848, 480], \"counts\": \"RWR37Sj0:H6L4J6K4K5L4K5K6K4M3K5M2M4L3M3L5K4N2M4K4O1N2K6K4I7K6I6M3L4E<N1N2N3M2O1N2O2M2O1O1O2N100O1001[NR[OfMPe0U2V[OiMmd0c1iZO\\\\M`0n0ld0W1m[OgNTd0S1R\\\\OlNnc0m0Y\\\\OSOgc0i0^\\\\OVObc0h0a\\\\OWO_c0h0c\\\\OWO^c0f0d\\\\OZO\\\\c0d0f\\\\O\\\\OZc0`0k\\\\O_OUc0?m\\\\OBSc0:P]OFPc08S]OGlb08W]OGib08X]OHhb06Z]OJfb05[]OKfb03\\\\]OLdb03]]OMcb01_]ONcb00^]O0bb0O`]O0`b0Oa]O0`b0Oa]O1_b0Nb]O2_b0Lb]O4^b0Kd]O4\\\\b0Ke]O4\\\\b0Ke]O5[b0Kg\\\\O_O]Ne0md0Kf\\\\OC\\\\N`0Pe0Ld\\\\OE[N?Qe0Lc\\\\OF\\\\N>Qe0Kd\\\\OH[N;Re0Mc\\\\OH[N;Se0Kb\\\\OLZN8Ue0Kb\\\\ONXN6Xe0L_\\\\ONZN5Xe0L]\\\\O1[N0Ze0N\\\\\\\\O2ZN0[e0MZ\\\\O4[NN`e0KS\\\\O8^NKae0La[Oi0nN[Oce0IW[OV1VOoNQg0[1PYOcNnf0`1RYO_Nef0j1]YOSNdf0l0lRk6\"}, {\"size\": [848, 480], \"counts\": \"[;j0fi000000000O010000O1000O1000O100000O10000000000O100000000O10O10000000O1000O100001OO0101O0000001N100000O011O00O0100O10000O1000O10000O10O1000000001N101O2N4K7J3MRR>;bmA1O10000000O0100000O10000O010000O010O1O1O00100O1000O01000000O1000O10O100000O100000000O1000O1O10O10000000O10O100000000O01000000000O1000O100000000000O01000O4M2N3M4KkTd1:kj[N1O101OO1000O1000000000O0100O100000O010000000O10O1000O10O1000000000O10O100000000O01000O01000000O10O1000O100000O10O101O0000O01000000O10000000000O10O1000000000000O01000000000O10O101O1O1O000O2O1N2N2OPdc3\"}, {\"size\": [848, 480], \"counts\": \"TmX7k0ih0o0aN]1YOf0ZOf0M3O1O100O10001O0000001OO01000O1000000000001N1O1N3N1L4L5F:E<A`0POe1mMaRV4\"}, {\"size\": [848, 480], \"counts\": \"T]`4420mi0c0F8F8M3M5K2O1N3N2N3M1KVNcWOi1[h08N2OO0100O1000000O02O0O011M2O1N2O1O1O2M2O1O1O2O0O100O2O1O0O20O02M2O0O101N10O11N100O2N1O2N1O2N4L3L5L6J8E^XW6\"}, {\"size\": [848, 480], \"counts\": \"e3[1Xi0M2N5K:EXWY<\"}, {\"size\": [848, 480], \"counts\": \"U\\\\a56Yj01O2N1O:kXOEQM1Wf0=U\\\\O=jc0E`[O^OdNQ1ke0B_[OC^Nn0Sf0B[[OP1dd0TOW[Om0id0VOS[Ok0md0XOnZOj0Re0YOjZOh0We0\\\\ObZOf0^e0_O[ZOd0de0@VZOb0ke0a0\\\\ZOSNee0j1dZOPN]e0h1k1H7E`0H5K9H9H4J6K2M4M4KfWS6\"}], [{\"size\": [848, 480], \"counts\": \"li0d0mi0O2N1O1O2N1O2N1O2N1O3McgR<\"}, {\"size\": [848, 480], \"counts\": \"[6b0oi0O002M3M10OO13N0010O001O00000O2O8JMO2Omjj16mTUN2O1N2O001M3L4WOi0I6M3O1001O000O2N1_Oa0M4M2N7I7IaVg0O`iXO8H4M3N1N1O10O010M2O100O1OO111N10N2N30O11O2M3L3O000O2O0O1N2O1M30002M2OaXZ10\\\\geN6J6L1O1N3N2M3N5J5K4K5J8QWO`Neh0h1M101O00000000001O00010O00001O001O01O00000001O00010O0000000010O01O000010O0000010O00000000010O000001O000000001O01O00000000001O00000000001O000O100000001O000O1000000O2O0N3H7F;[OUP:2loEb0\\\\Od0H7M4N101O001O0000001O00001O01O01O0000001O0001O0001O000001O01O00001O000001O01O0000001O0001O0000000O1J6L4J7K4N2O1O1000000O2O00000000001O00000000000O2O000000001N1000000000000O10001O000O10000000001N100000001N10000000001O000O1000000O10000000000O2O001O00001O0000001N2O00O1001O00[G\"}, {\"size\": [848, 480], \"counts\": \"i9e1kh00000O10000000O10O1000000O1000000O1000O100000O1000O10000000O10000000000O0100O0100TOl0G:HUZ87geG9I2M4K4N1L5N200O10O108H=Amim0KSVRO9J5M3N2M3M3M2O100M3N2O100O0O2O1O1N2O1O001001O2N000000000kNZWO?hh0ZOaWOc0Yi0K5L2LPcP2EQ]oMa0K3M1O1O1O10O01O1O10000O10O100000000O10000O10000O10000000001O000000001N10001O0O10001N1000001O000O10001O0O101O000O2O000O101O00000O2O00001N1O2O0Oekm4\"}, {\"size\": [848, 480], \"counts\": \"XW[32Uj0`0_O=D;H8J5F:G:I6J6I7H8K5F;J6E9I8F9K6J5M4M3M2N2N3M2O1N3N1N21O1O3dMa[OaNbd0c0Y\\\\O[Ohc0?_\\\\O_Oac0=d\\\\OC[c0:i\\\\OEWc0:k\\\\OETc0:n\\\\OFRc08Q]OGob05U]OKkb03X]OLhb02Z]ONfb0O]]O1cb0N_]O1ab0Ma]O3_b0Kd]O4\\\\b0Jg]O5Yb0Ii]O7Wb0Fm]O9Sb0EP^O:Pb0EQ^O<na0CT^O<la0CU^O=ka0BW^O=ia0BX^O>ia0@X^O`0ha0_OZ^O`0fa0_O[^Oa0da0@]^O?da0_O]^O`0da0_O]^Oa0ca0^O_^Oa0ba0]O_^Ob0ba0]O_^Oc0aa0]O_^Oc0ba0[O`]O_OZNU1Wd0\\\\O^]OCXNQ1[d0ZO]]OGWNo0\\\\d0ZO\\\\]OJVNk0`d0ZOY]OLWNj0ad0YOW]OOWNg0dd0YOT]O2WNe0fd0XOQ]O7XN`0hd0ZOj\\\\O:^N;kd0YOe\\\\O?_N8nd0WO`\\\\Od0bN4Qe0VOZ\\\\Oj0eNOUe0SOT\\\\OP1gNLof0<PYOClf0b0UYO\\\\OWf0Z1hYOfNUf0]1kYObNne0f1RZOZNne0f1SZOXNTf0b1mYO[Nkf0o0WYOjN`h0Df^i6\"}, {\"size\": [848, 480], \"counts\": \"];h0hi00000000O10O10O10000O1000O10000000O1000O100000O10O10000000O0100000000O1000O11O00000O2O0000000O1000000O01000000O1O10000000O1000000O1000001O0O2O1O3L7Jc]<JVbC>N1O10000O10O10000000O01000O100O100O00100N110000O10O1000O100000O1000O10000O1000001N10OO1G`RS24emlM4L10000O100O010O10000O100O01000000000000O010000O100000O100000O10O10000O0100O100000O010O10000000O10O1000O1000000000O10O100000O10O10O100000O10O1000000O100000000O10O100000O1000000O10000000O1000O10000000O100000O10000000001O001N102N1O1N2O2Lnmf3\"}, {\"size\": [848, 480], \"counts\": \"_cU7a0kh0V1cN]NiXOd2Zf0X1^Oa0L4N2O2O0O101O00000000000O10O10000O1000000O2O0O1O2M3M3I9G9Ab0[Oh0kNVXO[N^nZ4\"}, {\"size\": [848, 480], \"counts\": \"Xcc4>ni0<C:H6K4M3M4K3N1N3N2N1O1N2O10000O2O00O10O01O1O1N102M2O1N101M4M3N101N1000001O000000001O000000010O0O2O1O1N3N1O1O2M2N2N4M2M2M8H6KflT6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"SR^57Xj02N1O10001O001O1O00000010O0100O10O0010O02DPVO4jP^6\"}], [{\"size\": [848, 480], \"counts\": \"li0d0mi0O2N2N2N1O2N2N1O2N2NSbS<\"}, {\"size\": [848, 480], \"counts\": \"oPc2:Tj0>D3L3N3M3M3M2N01O02N1O10O01O1O1O10O02N3M2N005K1ON3O0K6L3E;I7H9Bn\\\\[24QcdM<K4K5M201O1N1010O01O00001O0001O01O0010O01O000010O01O1O001O10O0001O1O1O01O01O001O010O1O001O001O100O001O1O010O2N1O1O1O101N2N2N2N2N001O01N1000000000001O000000001O0O100000001O0000000O101O00000O10001M2L5F9Ac0_OgU9JRjFm0\\\\Ob0D<L3N2O2O1O0000001O00010O00001O0001O01O000000001O01O0001O0000000010O000001O0000010O0000001O0001O0O1N2H8L4K5L5N1O1000000000001N1000000000001O0000000O10001O000000001O000O10000000000O10001O0000000O2O000O1000001O000O10001O00000O100000000O2OO100001O0O2O00001O0000000O101O0000000O1000[G\"}, {\"size\": [848, 480], \"counts\": \"i9e1kh000000000O10O100000O1000000O100000O10O1000000000O01000000000O010000000000O1O100N2N2N2O1M3M3N2N2L4M3N2N5H8Fjim0k0T\\\\QOSOXi0\\\\1G4M1N0100N2O1O1O2N2M2O3M2N2N6J6I5L4K5L2LY]i27TbVM?M2O1O1O2N1000O2O001N11O01N101O001N2O000O2O1O1O2M3N3M2O0N2MbZm5\"}, {\"size\": [848, 480], \"counts\": \"hXZ3S1Ti0:C=H8D;E;J7I7G9J5L4L4M4L3M4K5I6K6L3M4L3M4M2N2O2M2O1O2N1N2O1O2OZMa[O[O^d0`0k[O]OUd0Nf[OlM:U2Pd0Hj\\\\O6Vc0Gn\\\\O8Qc0ES]O;mb0BW]O>hb0@Z]O`0eb0_O^]O`0bb0^O`]Ob0`b0[Oc]Oe0\\\\b0ZOg]Oe0Xb0ZOj]Of0Vb0YOl]Of0Tb0XOn]Oh0Rb0VOQ^Oi0na0UOU^Ok0ka0SOW^Om0ia0QOZ^On0fa0QO\\\\^Oo0ba0QO_^Oo0aa0POa^Oo0_a0POc^Oo0]a0oNf^OP1Za0oNg^OQ1Ya0nNi^OQ1Wa0mNk^OS1Ua0lNm^OS1Sa0mNn^OR1Ra0lNQ_OR1Qa0mNP_OR1Pa0mNQ_OS1Pa0kNR_OT1n`0kNT_OS1n`0jNT_OV1l`0jNU_OU1l`0iNV_OV1j`0jNV_OU1l`0iNV_OV1j`0iNW_OW1j`0hNV_OW1l`0gNX^OLiM\\\\1oc0gNU^O4iMU1Ud0cNQ^O;iMR1Vg0oNjXOo0Vg0SOjXOl0Vg0UOiXOk0Wg0UOiXOj0Wg0XOiXOf0Wg0\\\\OhXOd0Ug0AjXO=Tg0FmXO9lf0OSYO1jf02WYOLef0:ZYOF[f0f0eYOYOPf0R1QZOlNPf0T1PZOlNoe0WO^YOb1f0TOif0YOeXOc0e00gig6\"}, {\"size\": [848, 480], \"counts\": \"];h0hi000O0101OO10O1000000O010000000000O010000000O01000000O01000000000000O1000000000000O2O00000O1000000000O100000O1000O1000000O010001O000O2O002M4M5K3LQR>>amA1O100O001O100000000O010O100000O1000000O102M3N00001O0O0100O1000O01O100O1O1O10O10001N2O1N4L_aU22_^jM2N2O0O1O2O000O010O1000O1000000O10O100O100000O10O100000O2O00O010001O001N2O001N2O0O2O2O0N3M3NYg?0cX@5K4N2O100N3O00000O1000O10000000O010000000000000O10O100000O1000000000000001N101O001O1N102N2L3Nmbh3\"}, {\"size\": [848, 480], \"counts\": \"ZnS7f0hh0V1mMo1D=C<N3N1O100O101O000000000O1000O1000000O1000001N1O1N3M2L5J7B`0Ae0mNR1VOn0lNcP[4\"}, {\"size\": [848, 480], \"counts\": \"YYi46Sj0b0C9F4N3L4L3M2O1N3N1O1O1O100O10000O10000O10O10OO2N1O2N2O001O1O1O100O1O2O0O100001O010O1O0000010O1OO2O001O001O1O1O1O1N101O1N3N1O1O1O2N2M3L5GSXj5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"j[f52[1R1[f0]OZYOh0bf0^O[YOc0ef0^OlXOn0Ug0TOkXO>bg0B_XO8fg0H\\\\XO1ig0OZXOKig06VXOHlg09RXOEQh0;oWOAUh0`0kWO]O\\\\h0GYWOa0oi0J5K01013L`VX6\"}], [{\"size\": [848, 480], \"counts\": \"oi0a0Pj0O2N2N1O2N1O2N002N2NRbS<\"}, {\"size\": [848, 480], \"counts\": \"jQm5:ni0=J3M2O1O1O001O100O1O101N1O00100O001O0010O01O1O001O010O1O1O2N0010O01O2N002O0O1O1O1O2N2N2O1N3M1O2N01O01O001O0001O0O1001O001O00010O00000000000001O0000001O000O100000001O00000O101O000O100O1O2J5G:_Oc0_OiU9HVjFn0[O?]Oc0M3M200O101O00001O0010O00000001O01O0001O0000001O0001O0001O00000010O000001O00001O01O00000000001O000M3I7L4J6N3M200O100000001O000O10001O00000000000O2O0000000000001O0O100000000O10001O00000O10001O0000000O2O0000000O101O000O100000000000000O101O000O101O0000001N1000000000001O00000000001NZG\"}, {\"size\": [848, 480], \"counts\": \"i9f1jh00000O10000000O10O1000000O1000000O100000O10O100000000O10O100000000000000O1000000000O1000000000000O100000O1000000O02O002M4L2O5J=CXkc0_OYU\\\\O;E4M0cVOFch0:^WOH`h07aWOJ^h05bWOL^h04aWOM^h03aWOO_h01`WO0`h0O`WO2_h0NaWO3_h0MaWO3_h0M`WO4`h0L`WO4`h0L`WO3bh0K^WO6bh0I_WO7ah0I^WO8bh0G_WO9ah0G^WO:bh0E_WO:bh0E^WO<ch0B^WO>ch0@^WO`0ch0^O^WOb0bh0]O^WOd0ch0YO^WOh0Ui000O103N3M6]OPVO7Wj0M\\\\cc2a0P\\\\\\\\M7L100000O101O001N101N2O2N3M3M2N1N2O2M3Nm^Q6\"}, {\"size\": [848, 480], \"counts\": \"Qn[34Wj08ZOe0C<J6E;E;J5K6F9I8G8H9J5J7K4L4M4L3M4L3O2M2N2O2N1N2O2N1O1O2N1O1ObMQ[O]Ood0>Y[O@ed0>_[OA`d0?b[O@]d0=h[OCVd0<m[OCSd0:P\\\\OFoc07V\\\\OHic0Ob\\\\O0^c0Kh\\\\O4Wc0Jl\\\\O7Rc0HQ]O7ob0GT]O8kb0GX]O8hb0GZ]O8eb0H\\\\]O8db0G^]O8ab0Gb]O8^b0Gc]O9]b0Ef]O:Yb0Ej]O:Vb0Dm]O;Sb0Do]O;Pb0BU^O=ka0BV^O?ia0@Y^O?ga0_O\\\\^O`0da0_O^^O`0ba0^Oa^Oa0_a0^Oc^Oa0\\\\a0_Of^O`0Za0^Oi^Oa0Wa0^Ok^Oa0Va0]Ol^Ob0Ta0]On^Ob0Ra0]Oo^Ob0Ra0]OP_Ob0Qa0[OQ_Oe0o`0ZOS_Oe0m`0[OS_Oe0m`0ZOU_Oe0k`0ZOU^O@SNU1ic0ZOS^ODSNQ1jc0ZOS^OGRNo0kc0ZOR^OISNk0mc0WOR^O1QNg0nc0WOP^O4SNc0nc0XOm]O9TN>Pd0XOl]O;SN<Rd0XOj]O`0SN7Td0XOg]Od0UN3Ud0WOf]Oh0TN0Xd0WOc]Ok0UNMXd0WOc]On0UNIZd0XO^]OS1WNEmf0>SYOAkf0b0UYO]Oif0f0VYOYOhf0k0XYOTOgf0m0ZYOQOef0R1[YOlNbf0X1V15O0N]Ob0QOl016HoP^6\"}, {\"size\": [848, 480], \"counts\": \"];h0hi000000000000O0100000O1000O10O10000000O0100000O0100000000000O10O1001OO10O10000000000O1000000000O0100000000000000O1000000000000O101O001N3N3M4K4MRR>:bmA3M2O1O1O1000O101O0000000O0100O10O10000000O0100000000O10O11O0O2O00001O0O100000O100O100O0101N2O1O1N2O1O1N2O0O2O001N101O0OiRn19nlQN4M1O00O0100O100O10000O01000O1000000000O10O100001N2O0O2O001O100O0O101O00000O0100O100O10OO101N2O0O2O1O100O100000O1000O10000O10O10000O1000000000000O10000O1000000O100000O100000O1000O100O10000000000001O001O1N2O0O100O3N3Jnbh3\"}, {\"size\": [848, 480], \"counts\": \"eSS7m0`h0U1UNk1@>F:O1N200O2O00000000001O0O1000O10000O10000O2O000N3N1N3K5I7E=B`0QOU1TOU1fNnj[4\"}, {\"size\": [848, 480], \"counts\": \"ZRo4?ni08I5K6J4L4M2M4M2N2N2M200N2O1O2O0O01O010O100O100O0O2O1N2O1N2O1O1O00100O100O1O2O000001O01O00000010O01O000O2O1O2N001O1N101N3N1O2O0O2N2M7HhSf5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"fYX27Yj02M2O1N2O1N2O1N1PODTWOT1ih0<N100000000001O000000000000001O0O11O00001O01OO02O001O1Od0cNcVO>Whl2L]QTM9J6H7I8F9L5M2O10000000010O0000000010O000001O0000010O000000001O010O0000000010O0000010O000001O000010O0001O0000001O0000000001O000000001O0O100000001O0000000O2O0O10000O1O2N1J6G;]Od0^O[U9`0VjF`0\\\\Oc0E:O2M200O2O001O00001O01O0001O0000000010O000001O01O0001O0000001O01O01O000000010O0000000001O0000000O1L4J6L5I6N2O1O1000001O000000000O2O00000000001O0000000000000O2O0000001O000O10000000000O101O000O1000001O000O1000001O000O100000000O10001O0O101O000000000O2O0000000O10001O00000O1000001O1OWG\"}, {\"size\": [848, 480], \"counts\": \"j9f1jh000000000000O01000000O1000000000O10O1000000O1000000O0100000000O1000O10000001N0100000000O2O000O1000000000O2OO1000000O2O2M4L2O:Ea0]O_Pc0KfU\\\\OKii0m0A;E7I4M10OO1O1000000O11N10O100O100O10O0100001N2O00O1000O101O00000O10000O10OO2B=01N4F9L7^OTVO1jch22[VXM2C=M301O00O2O0O100000001N101O0O101O000000001N10000O2O000O2O00000O101O0O101N101O0O2O0000aUQ5\"}, {\"size\": [848, 480], \"counts\": \"Ue]3:ni0:H7F:I7J6J6J5J7L4H8J5K6J5K5J7K4M4J6K5J5M4K5M2N2N3M3N1N3N2M2O2N1O2O0O2O0O2O0O2O0O101O0O10000OPNW[O[Nid0b1\\\\[O]Ncd0^1c[OaN]d0[1i[OcNXd0m0W\\\\OSOkc0`0a\\\\O_O_c0>d\\\\OB\\\\c0;h\\\\ODYc09j\\\\OGUc06P]OHPc07Q]OIob04U]OKjb04Y]OKgb03[]OMeb01^]ONbb00a]OO_b0Oc]O1]b0Ne]O1[b0Mh]O2Xb0Mj]O2Vb0Ml]O2Ub0Lm]O2Tb0Lo]O3Qb0LR^O2na0NS^O1ma0MU^O3ka0LW^O3ia0MX^O1ia0J\\\\^O6ea0I\\\\^O6da0I]^O7ba0KW]OB_Nb0Zd0KW]OF^N=]d0KT]OL^N8^d0KT]O0\\\\N5`d0KS]O2]N2`d0KS]O5]NO`d0KS]O7]NMad0KR]O;\\\\NIcd0KP]O?\\\\NDed0Lo\\\\Ob0]N@ed0Mm\\\\Oe0^N]Oed0Ml\\\\Oi0^NZOgd0Lj\\\\Ol0_NVOid0Mg\\\\Oo0`NSOid0Mf\\\\OT1`NnNjd0Md\\\\OY1bNiNkd0Mb\\\\O\\\\1cNdNod0M^\\\\O`1fN^NPe00Y\\\\Od1ef02NM3J3F>C?[OPdZ6\"}, {\"size\": [848, 480], \"counts\": \"^;g0ii0000000000000O01000000O1000O10000000O10O10O100000000O10O10000000O010000000000O100000000O0100000000000O1000O100000O2OO10000001N101O1N2O2M5L6Ial>=QSA4M1O10O01000000O010000000O10000000O10O100000O0100000O10O100000000000O10000O101O2N`^d2Lca[M1O10000N2O1O10O1000000000000000O010000000O01000O1000O10O1000000O0100000O100O0100000O0100000000000O010000000000O100000000O1000000O1000000O10000O1000000000O0100000O101O00O10O100001O1O1O1O0O3N1OO02NmWj3\"}, {\"size\": [848, 480], \"counts\": \"[SS7W1Xh0T1\\\\Nc1_O?H8O1O2O0O100000001O00000O1000O1000000O100O101N1O2M2N3I6J7E?XOg0ZOS1hM[WOP1\\\\^]4\"}, {\"size\": [848, 480], \"counts\": \"TPP55Vj09G:I4M2N2M201N1N4L3M201N2N2N2N1O2N1O10000O100O10000O0100O100O001N3N1N2N2O1N2O100O1000000000010O00001O00001O001N2O0O2O1O1N2N3M3M2N3M4FaVe5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"X_W26Yj03N1N2O2N1O1N2N1M3POP1N2000001OO1000001O00000000001O000O11O01O00000000000000001O00001O0001O00O100000001O0001O0000002OO0001O00O2OO21KTWObNfY`2<W``M7K7J4L3N2M203L5J6K6K1M2O1O010O001O000O110O0000001O0001O010O000001O0001O01O1O000001O0001O0000000000000001O00000000001N1000000000001O0O10001O0O1M3L5F9F<]O^U97^jFa0D:@`0K4O2N10001N10010O000000001O01O01O000000001O01O01O00001O01O0001O000001O01O00000010O000000000O10001M2H8M3K5L4O2N100000000000000O2O000000000O101O000000001O0000000O101O000000000O1000001O000O10000000001O0O1000000O101O00000O101O000000000O10001O0O10001O0O2O00000000001O0O10001O0000000O2OUG\"}, {\"size\": [848, 480], \"counts\": \"k9f1jh00000O1000000000O0100000000000000O011OO1000O1000000O1000O1000O100000000O10O2OO10000000001N10O100000O100000O1000000001N4L4M8Ga0^OQkc0IR[[OMli0l0@9H6J3M1O000O100O1O10O1000O10O01000O1000000O3N00000O10000O100000000O1000000O10O10O100N2O1N2M3N1O2N3M101N3M2N2O001O1N2O1O1MnVOCXh09hWOKYh0MkWO5Vi02N2N2N2O10O01N200N2O0O2N2N1O2O1N2O1O010001O1O1N3N3L5L8Hdmn11XRQN30000O11O00001O0O10001O000O2O000O101O0O101N1O100ObjR5\"}, {\"size\": [848, 480], \"counts\": \"dX`3:Qj07K4K5L4K4L5L4I7L3M4L3M4M2L5M2N3K5L3K6M2N2K6M3L3M4L3N3N2J5N3L3N3K4N3L3M3N3N1N2N2N2O2N1O1O1O2N100O100O12N2N3N1N000_M][OUOcd0f0d[OXO\\\\d0e0h[OZOXd0`0o[O_OQd0`0P\\\\O@Pd0?R\\\\O@nc0;X\\\\ODhc09[\\\\OGec02c\\\\OM]c01e\\\\OO[c0Ni\\\\O1Wc0Mk\\\\O3Uc0Kn\\\\O4Rc0Ko\\\\O5Qc0IQ]O7ob0GT]O8lb0GU]O9kb0EX]O9jb0FW]O9ib0FX]O9ib0EY]O;hb0DY]O;gb0DZ]O;gb0D[]O;fb0C[]O=eb0B]]O<db0C]]O=db0A]]O>eb0A\\\\]O>db0A]]O>eb0A[]O>fb0A\\\\]O>eb0A[]O>hb0^O[]Oa0gb0\\\\OZ]Ob0\\\\f0LiV`6\"}, {\"size\": [848, 480], \"counts\": \"_;h0hi00000000000O0100000000O10O10000000000O010000O10O100000O10000000O1000O1000O2OO100000O10O1000000O1000O10000000000O10000000O1001N2O2N1N4M4K4LTg?1kX@;C3O100O10O1000O10O10000000O100O1000O10O10000O010000000O010000O10O1000O1000O10000O10O1000001O0O1000001O00O01000O1000O0100000000O0100000000000O1000O100000O10000000O10O1000O1O100O001O1O1O1N3M2N2O2L\\\\_g18Z`XN5O10000O100O1000000O010000O1000O1000O10O100O1000O1000O10O10000000000O1000000000000O10000O100000O010001O000O10O1000000000000000O01001O1O001O1N103M1O0O2NiWj3\"}, {\"size\": [848, 480], \"counts\": \"`YR7a0hh0[1`N]1WOi0A?K5N1O100O1000001O000000000O10O100000000O1O2N1O2N1O1M4I7D=Ac0UOT1oNX`]4\"}, {\"size\": [848, 480], \"counts\": \"R^S55Uj0>B:I5L5L5K3M101N2N1O2N101O0O1O1000O01000O1O1O001O1M3O010N2O1O100O100000001OO100001O001O0O10001N101O1N2O2M4L3M3L4L7AoVi5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"W]\\\\54[j02mWOMfe05XZOOee05WZOMfe0;SZOFle0<PZO5ae0K]ZO<^NoNlf0h0cZO=]e0KZZO6fe0OUZO1le02PZOGWf0<fYOA^f0a0_YO^Obf0b0]YO]Off0a0ZYO@ff0`0WYODhf08`YO]OVO]O\\\\g07g2N3O0O2Ngk^6\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"jdV25Zj03M2O1N2O2N1N2L3@a0^Oa0O10O1000000000001O0000000000001O000O1000000010O00O11O000010O0000000010N11O00000O1001O00010O001O001O1O01O01O01O001O1O1O0000001O01O000000000001O000O1O1M3M2M4J6H:F<Ff\\\\`2O_c_M3hNLVWO14MI0O9lh0<TWO1kh0k02N1N01O1O000O2O0L4E<O0O1O12O0O00000000000000001O000000001N1000000000001O0O1000001L3F:I8^Oe0@_U98kiFl0\\\\Oc0I7M2O101O0000001O0000001O01O0001O00001O001O01O000001O01O0001O0000010O00000001O01O0000000001O00000O1L4I7M4K4M3N2O10000000001O0000000O101O000000001O000000000O100000001O000O1000001N100000000O10001O0000000O101O000O1000001O000O10000000001N10000000001N10001O001N100000000O2O00001O0000000O10TG\"}, {\"size\": [848, 480], \"counts\": \"m9f1jh0O1000000000O1000O10000000O01000000O100000000000O1000O1000000000000O100000000O10000O10000000000O100000O10000000O101O1O4K7I`0Anjc01PU\\\\O`0A9G5K1N2O0000000O100000000O100001N10000O1000O11N100000000O10O1000000000O100000000O100000000O10O1000O1000000000000O100000O11N0010000O1O1O1O1M3L4C=N2O1O1O3DlgS8\"}, {\"size\": [848, 480], \"counts\": \"]XS4:Pj0:E:H6I7L3K6J6K5K4M5J4L5K5J6K5L3M4L3L5I6J6H9I6J6M4L3M3N2N3M2O2N1N2O1O100O1O2O000003M3M1O2ON1000000OcMR[OYMGm1We07P\\\\OCoc0:U\\\\OEkc06Z\\\\OJfc04]\\\\OKcc02`\\\\ON`c00b\\\\O0^c0Me\\\\O3\\\\c0Ig\\\\O7Yc0Cm\\\\O=Rc0BP]O=Rc0_OQ]Oa0ob0]OS]Oc0mb0ZOW]Oe0ib0YOY]Og0gb0WO[]Oh0fb0WO[]Oi0eb0VO\\\\]Oj0eb0SO]]Ol0db0SO]]Om0cb0RO^]Om0db0QO]]On0db0RO\\\\]On0db0QO]]Oo0db0PO\\\\]On0fb0QO[]Om0hb0ROY]Oj0kb0TOV]Oj0mb0UOT]Oc0Tc0\\\\Om\\\\O4dc0H^\\\\W6\"}, {\"size\": [848, 480], \"counts\": \"a;h0hi00000000O1000O1000O10O100000O10O1000000000O010000000000O010000000O10O10000000O10O10000000O10O10000000O100000O10000000O01001O1N2O2M3N3L[\\\\a0Ijc^O=E2N1O0010000000O1000O1000O1000O100000O10O100O10O100000000000O010000000O010000000O0100000O01000000000O01000000O10000000O1000O100O3N4K5L1N2N1000001N10O1001O0O`lS20[SlM9L1O2M3N1O00100O1000000O10O1000O100O01000O100000O01000000O0100O1000000000000O1000000000000O10000000000O1000O02O0000O0100000000001OO100000001N2O1O1O2M3N2M2Nelk3\"}, {\"size\": [848, 480], \"counts\": \"^QS751f0g0Fbf0h2A>L0fYOgL`e0Y3^ZOlL`e0S3_ZOoLae0P3_ZOQMae0o2^ZOSM`e0n2`ZORM`e0m2aZOSM_e0m2aZOTM^e0l2hZOnLXe0R3kZOlLTe0T3kZOlLUe0X3hZOhLXe0Z3\\\\ZOVL5a0_e0_3^ZObLbe0U4100O10000O100O2N1O2M2M4I7D>\\\\Oh0SOZ1hNaZ^4\"}, {\"size\": [848, 480], \"counts\": \"Yo^5>ni06K4N3L4M2M4K4N1O1N3N1O1O10000O100O10O0100O01O1N101O1O1O001O1O010O101O0O101O00010O0000100O1O00001O1O0010OO2O1O2N2M4M2L6HaP\\\\5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"gb[52\\\\j05L2N4M2O1M3M4N0^VO]OVi0Q1N3M6J3L6K1O0OO2O0O2N3^NVWOZ1\\\\i0C3M5K4L4K6He`[6\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"ZjU25[j03M1N2O1N2O2L3I6UOl0L30000000000001O00000O1000001O000000001N10000000000010O001O0000000001O000001O000000O2O01O001O1O00100O001O0001O1O1O001O001O0000000000000000000O010L4E;H8I7GcTS2IbQlMOii0d0J5LO2IaVOA^i0b071000O1O6E<Fe_72Z`H4gUOLSj09N2M3N3M2N3N2N100010N2O2O0O1O001O2N1M4NkNDVXO=fg0HYXO7cg0O\\\\XO0bg04\\\\12O0O1O1O2N2O0O2N1O2N1O2N2N2N2N2O3kVOeNmh0`1O3MI8M2_OoVOYO\\\\i0`0PP:OioEf0XOh0L3N3O0O2O000000001O00010N11O01O001O00000010O000000010O000001O0001O01O00000000010O000000010OO10000O1J6J6K5L5N1O100O101O0000000000001N100000000000001O000O100000001O000O1000001O000O100000000O1000001O000O10001O00000O1000001O000O10000000000O10001O1O1O0O10001O000O100000000O2O000O100000001O00SG\"}, {\"size\": [848, 480], \"counts\": \"o9d1lh00O1001O0000O010O10000000O1000000O01000000000000000O10O100001O00O10O1000000000000O100000000O10000O10000000O02O001O1O3L:F=CQkc0NPU\\\\Ob0@9F7J1O1O0000000O1000000000O10O1001O00000O100000O10O1000000O1000000000000O100000O100000O1000000000O010000O1001O00O100000000O01000O100000000O1O101O0ZOSWOHnh02]WOGgoV8\"}, {\"size\": [848, 480], \"counts\": \"`YW4;ki0<D<F8G9E<E:H8K5L5K4N2N3L3N2N2N3L3N3M2N2M3N3M2L4N3L3M3M4M2N2N3M2O1O2N1O1O2N1O1O2N100O1O2O000O10001O01O000000000000O1O1000000O100000bLh[Od0Xd0VOR\\\\Og0mc0VOX\\\\Oh0hc0ROa\\\\Ok0_c0ROf\\\\Ol0Zc0QOj\\\\On0Vc0oNn\\\\OP1Rc0lNS]OR1nb0lNT]OT1mb0iNV]OV1jb0hNW]OY1ib0dNY]O]1gb0bNZ]O]1gb0aNZ]O`1fb0^N\\\\]Ob1db0]N\\\\]Od1eb0ZN[]Og1eb0XNZ]Oi1gb0VNY]Oj1ib0TNW]Oj1lb0UNS]Og1Tc0XNk\\\\Ol0Rd0SOn[O<dd0C\\\\[ONUe01e2O3L\\\\Zi5\"}, {\"size\": [848, 480], \"counts\": \"a;i0gi00000000000O10O10000000O1000O100000O1000O100000O10000000O1000O1000000000O0100000O10O10000000O1000O10000000O10O1000000O01001O2N3L3N2M7HT\\\\a0;ac^O4M1O1000O0100000O0100000000O1000O100000O10O10O1000O10000000O10O1000000000O10O100000O10O1000O100000O10O1000O1000000O1000O100000O10O100O10000000O2LlkX2D`TgM4N3L3O1N01000O100O010O10000O100000O0100O10000O100O1O0100000000O1000O10O101N1000000000000O100000000O10000000000O100000O10O100001N10000000O101O1N3N1O1O1N3M3Melk3\"}, {\"size\": [848, 480], \"counts\": \"XPS71]j07J2N2O00001O0O2O1O001O1O1O1N2O1O1O1hWO^O`f0c0\\\\YOAcf0a0YYOBff0`0UYOClf0>oXOEQg0=kXOFTg0<fXOH[g0:ZXONfg0^1002O1N2N6H=@jT_4\"}, {\"size\": [848, 480], \"counts\": \"ngR6<oi09H5L3M4M2O2N1N2O1O100O2N1O1O100O10O0100O10O10O0100O1O1O010O1O1O100O1O1O100010O1O100O1O01O001O10O01O100O1O1O1O1O1O1O2N2N2M3M3K6Gmmd4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"f6;Vj0O0O11O001O1O00010O1O2N002N1OO12N2N001OO2O9^ORbb15Q^]N3N1O001N2N2E;\\\\Od0H7O10000001O0000000000001O000000000010OO1O100001O0000010O00000001O00000O11O000001O000000000001O1O10O01O1O010O01O1O1O00001O01O01O0O10000O10000000000O1N2M3N2K5L4G8K8JkaZ20VddMLbi0n0F=C9H3L2O10O000O101O0O1O100O1O1O100O101N2O0O100O1O1O2M2O2N2jNZWO?`i0J6Id[k0M]dTO<QOi0A>E<M2O2O00001O0000001O00001O00010O00001O0001O0001O0001O01O000000010O000000001O01O0001O00000001O0O1N2J6K5K5M4M20000O101O000000000O1000001O0000000000000O2O0000000O100000001N1000000000000O10001O000O101O00000O10001O00000O10000000000O2O000000000O2O1O001O00000O10001O000O10000O101O0O100000001O00RG\"}, {\"size\": [848, 480], \"counts\": \"P:e1kh000000000O10O100O10000000O10000O1000O1000O1000000000000000000O10000000O10O100000000O10000000000O0100001N101N101O1N3N6J>@?@WPc0=]o\\\\Ob0@7H8I2M2O000001OO100000000000000000O10000000000O10O1001O0O10O1000000O10O10000O1000000000000O100000O100000O1000000000O0100000000O10000O1000O100000O2O00000O103Mj0VO1O3L3La\\\\P8\"}, {\"size\": [848, 480], \"counts\": \"mQ]42Zj06L4M2N2M3M3N2N3L3M3N2M2M4K4D=H7G:F:D;G9J7DcL\\\\YOd3]f0;J7L3N3M2N2O1O2N1O1O1O2N100O1O2N1O10001N10000O2O000000001O000O100O101N1O10000O2O000000001O000000TLU[OaN1W3jd0oMn[Ol1Rd0QNX\\\\Oh1hc0UN^\\\\Oh1bc0VNc\\\\Og1]c0WNi\\\\Of1Vc0WNo\\\\Og1Qc0XNR]Of1nb0YNT]Of1lb0YNW]Oe1jb0YNX]Of1hb0YNZ]Of1fb0YN\\\\]Of1db0YN^]Of1cb0WN`]Oh1ab0VNa]Oi1_b0VNb]Oi1`b0UNb]Oj1^b0TNd]Ol1]b0RNd]Om1]b0SNc]Om1]b0SNd]Ol1]b0SNf]Oj1[b0TN\\\\^OL]LT1Ze0nNR_O=Xca5\"}, {\"size\": [848, 480], \"counts\": \"c;h0hi00000000O10O100000O1000O10000000O100000O100000O1000O10000000O0100000000000O10O10000000O10O1000O1000O10O1000000000O01000O102N2N2N2M4M7EWg?3gX@;G3L2O1000000O1000O1O100000O10000O10O100000O10O1000O1000O10000000O1000O100000O1000O100000O1000O10O100000O010000000O10O10O1000O10O10000000O1000O1000000000O010001O000O101O1N2O1O1O1N10001O1N2O1N3N1Ne[V2;QdiM2N1O000O10000O100O010O100O01000000O100O1001OO01000O1000O100000O1000O100000000O0100O11O1O000000O101O2M101N3N1O3Leam3\"}, {\"size\": [848, 480], \"counts\": \"`jo67Wj04I7L3J5O100O1N2000001N100100O00001N1O10iMZOdZOf0Ye0_OcZOc0Ze0AcZO?]e0CbZO>Rd0RO^[Oc0?;Td0TOX[Oc0c09Vd0UOU[Od0c08Xd0UOQ[Of0g04Zd0WOkZOh0j00]d0ZO_ZOm0U1F^d0CTZOj0f1mNZNOQf0:jYOn0ch0?5Ji0]NRWO1ig`4\"}, {\"size\": [848, 480], \"counts\": \"caS6=Qj09G3M2K7M1N2O2N1O1O1O1O2N100O1O1O10O100O10O010O0100O01000O1O001O1O100O2O000000001O0100O1O10O001O100O1O1O1O001N201N1O1O2M2O1N3L5K8F^Yc4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"e6<Tj0001O1O001O1O011N1O1O1O100O1O000000001OO2O0L>Anl`15QS_N3N1N101O1N2L4C=[Od0N200O1001O000000001O00000O100000010O000O1O1001O0001O01O0000000001O00000O11O0001O000000000100O001O1O001O10O0010O01O001O001O00001O00000O1000000000000O1N2K5M3K6I5J7L5Hnok21QPTM8K5K4O2M2N2O1O101O00000O10000000O100000O100O100O1O001O1O0000O2H9ElS>OekAAXWOk0eh0WO]WOg0bh0YO_WOg0^h0VOWWO1:j0]h0VOYWO09k0`h0YO\\\\WOJKn0jh0VOZWONJm0mh0VOUWOR1jh0:O1102M012`NSWOW1Ri0101O000N2010O000001N100O101O0O1O1O1[O`NYXOb1fg0gNPXOZ1og0hNoWOY1Rh0eNlWO^1Th0bNkWO_1Uh0?O0000001O0001N1O1N2K5K5K5M3N3O0O1000001O0O100000000000001O000000000O10001O00000O100000001N1000000000000O10001O000O101O000O10001O00000O1000000000001N10000000000O2O1O00001OO0101O00001O0O10O11N10001O000O1000001ORG\"}, {\"size\": [848, 480], \"counts\": \"o9e1kh00000000000O10O10000000O10O10O1000000000000O100000O100000000000O100000000000000O10000000O010000O10000O101O1O0O2O2N3L>C=@kjc0;S[[O_Oei0Q1E8G5L1N2O00000000000O0100000000000000O10000000000O100000000O1000O10000000O1000O10O10000000000O1000O100000O1000000000O10O10000XOTWOLlh03VWOKkh04VWOLjh04VWOLjh04VWOLjh03WWOLjh04VWOLjh03XWOLhh03YWOMgh02ZWONgh00ZWO0fh0N\\\\WO2dh0M]WO2dh0J`WO6`h0FdWO:Yi0000O100N2M2O2M3N2O1N2M3N1M4O1N1O2M3O10000001OO01O1O2N2L5I8L>@ef[7\"}, {\"size\": [848, 480], \"counts\": \"Zkl46Xj04K5L3M3M3M3M3N2L4M3kNT1J7gNY1K4M4M2N2O2N1O2N1O2O1N1O101O0O2N2O001N101O0O2O1O001O001O00001O001O000O2O001O00000O2O00000O101O0001O000001O00000000\\\\LQ[Og1od0oMg[Oe1Zd0WNm[Oe1Sd0XNU\\\\Oc1kc0ZNZ\\\\Od1fc0YN_\\\\Oe1bc0XNa\\\\Og1_c0WNf\\\\Of1Zc0XNk\\\\Oe1Vc0YNm\\\\Of1Rc0XNQ]Of1Pc0YNQ]Og1ob0VNU]Oi1lb0UNV]Oj1jb0UNX]Oi1ib0WNX]Oh1ib0UNY]Oj1ib0TNY]Ok1hb0RN\\\\]Ok1oe0[N\\\\WOj0gi0]ObXU5\"}, {\"size\": [848, 480], \"counts\": \"c;h0gi01000O10O1000000000O1000O100000O100000O10O1000O10000000O100000000000000O01000000O010000000O1000O10O1000000000O10O1000O101O2N2N2M3N3Lil>MZSA6J3M1O2N1O10000O010O1000O1000O100000O1000O1000O1000O10O10000000O10O1000O100000O1000O1000000O01000000O10O100000O10O1000O100000O01000O100000O100000000000000O10O1000000O01000000O10000000O010000000000O10002M8H6K1O1ObPX21\\\\ogM=C1O1O10001N02O0000O010000000000O10000000O1000O10000000O100000O100O11O001O00O10001N2O1N2O2N1N2N3LVgl3\"}, {\"size\": [848, 480], \"counts\": \"a[Q7]1kh09L3O1O2O00000O2O00001O001O1O001O1O1O001O1O1O100O1O1O100001N4I`0TOVj`4\"}, {\"size\": [848, 480], \"counts\": \"ibX6<Qj08H9G5L4L4L3N1O1O2N1O1O1O1O100O100O1000000000O100O010O1N2O2N1O1O1O1O1N2O101N10001O0101OO001O1O1N101O1O1N2O1O1N2O1O1M4M5Hn\\\\b4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"jXX54\\\\j01N2O3M5K1O017PVO]Oci0l0L2N3M3N1N6K2NO0000001O1O2M:G9G5J7I4Jbj^6\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"b6>Rj0001O100O1O1O100O1O1O1O10O01OO1001OO10000O1O1O5JcR`1Jdm_N2N3N0O102M2N1J7UOj0M300O100001O000000000000001N11O00000001N1O1001O00000010O0000000O11O01O000001O00000001O0001O001O100O1O001O01O00001O1O10O000001O000O2O00000000000000000N2N2L4J6K5I7K6I7Jce62\\\\ZI5L4N2M3O00O6APVO3oTg0OQeYOd0@f0[O8H4N110O00000010O00000000010O0001O01O0001O01O0001O000010O00001O010O00000000001O00O11ZNgWOS1Pi0K2N2M3N3M4K8H>BhW=:dgB=H7O0O100000O0O2N2N2K5O2O0M2O3M2Mmae0IQ^ZO<F8^Ob012N2O00O00fWOfN`g0Y1aXOhN^g0W1`XOlNag0R1_XOoNag0o0_XOTO`g0k0`XOVO`g0i0^XOZObg0e0\\\\XO_Ocg0`0]XOBbg0<_XOEag09_XOHcg05]XONbg01^XO0bg00]XO1cg0N]XO3cg0L]XO5cg0J]XO7cg0H\\\\XO:dg0E]XO;cg0C^XO>bg0A_XO`0ag0\\\\OaXOe0bg0QOeXOo0\\\\h03N1N3N00003L2O2O0O101N001N3M2M3N2N2O000M11O1N4L4K5O2N1O10001N1M4K4C=H9FPZ83RfG6L2K6L4L4M2M3O2O01O010O01O000000000001O000000000O101O0000001N100000000O10001O000O100000001N101O001O0O10001O00000O1000001N1000001O0000001NSG\"}, {\"size\": [848, 480], \"counts\": \"n9c1lh0100000000000O10000000O01000000000000O100000000000000O100000000000O0101O00000O10O1000O10O100O10000O0101O001O00001N2dNQWOU1`i0E9EQkc0OQU\\\\O`0A8H6I3N1O000000000O100000O1000000000O100000O1000000000000O10O100000000000O100O1000O1000O100000000O100000O10O100000000000000ZOQWOJPi05RWOJnh05TWOJlh05UWOKjh06VWOIkh07UWOIkh06VWOJjh06WWOIih06XWOJhh05YWOKgh05YWOKhh02ZWOMgh02ZWONfh00\\\\WO0dh0N^WO2bh0JbWO6\\\\i000O01O1N2M3N1N3N2O1N1N3M3M3N2O1M201O1000O100000000_OmVOETi07QWOGPi05UWOIii0O2O000000000O10O1N200O1O1O1000O10O100000O010000O001N2N2L4N1O2O10000001O00000O100000001O00000O2O01O0001N1000001N100O101O0O1O1O2M3M4LTag5\"}, {\"size\": [848, 480], \"counts\": \"jRV56Wj06L2L3O2N2N1N3M3dN]OgXOf0Pg0JgXO8mf0:iXOKSg0;fXOIkf0V2M2N2O1N3N2N1O2N101N101N2O1O1N2O001O0O2O1O1O1O001O1O002N0010O01O010O1O10O01O001N10001O0001O0000000001O01O0000001O00000lL`ZOX1`e0bNmZOW1Se0gNR[OV1nd0eN[[OW1ed0hN^[OV1cd0fNb[OX1^d0gNe[OV1\\\\d0gNi[OW1Xd0fNl[OX1Td0fNo[OX1Rd0fNP\\\\OZ1Pd0eNR\\\\OZ1oc0cNU\\\\OZ1lc0fNY\\\\OB_Nf0Ze0FP4N2M4M2N2NTZk4\"}, {\"size\": [848, 480], \"counts\": \"`;i0gi0000000000O010000000000O01000000O01000000000000O01000000000O10O10000000O1000O10000000O10O100000O100000000000000O100000O02O1O1O3L3N3L5KTg?1jX@5J9I2O001N01000000O0100000O100000O1000O10000000O0100000O1000O10000000O01000000O0100000000O01000000O1000O100000O10000000O01000O100000O10O10000O1000O10O100000O1000000O011O0000000O01000000O1000O1000O1000O1000000000O010O100000O10O100000O1000000O01000000000O1000O1000O10000000O1000000000O1000000000000O010000000O10000O100000001N1NZa]1DR_bN5K4N2N4L000O10010O0000O101O1N101O1O2M2O2Lham3\"}, {\"size\": [848, 480], \"counts\": \"]\\\\Q7482ch0f1D6N1O2OHgWOUN\\\\h0e1;O100O10000O1001N101O001O3M>B1O00010O00O101O1N102N2N8Gao_4\"}, {\"size\": [848, 480], \"counts\": \"^Pa6?ni07J4M4K5K5L2N2N1O2N10001N100O100O11O00O2O00O1000000O1O1M3O1O1N3N2O0O101N1O100000001O001N101O001N2O1N2O3M2L3M4IgS^4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"jXX55Yj04M2nXO4^c0N\\\\\\\\OP1jb0TOm\\\\OU1ob0lN\\\\\\\\O_O`Ni1Se0iN[\\\\O@_Ni1Ve0kN^ZO\\\\Of1W2mc0eNn[O\\\\1Sd0fNf[O^1[d0bNb[O`1^d0cN][O^1ed0dNW[O]1id0gNQ[OZ1Qe0jNhZOW1Ze0nN]ZOT1ee0MgZObN\\\\e0Z1oZOUN_e0c1k1E:G:I:J8H5L4K4M1N2N2N2N2M4M2MmPY6\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"a6>Rj00O200O1O1O1O1O1O1O1O010O1O0001O00000O1O2O0O1N3L4JWX_10mg`N2N2O1O0O2N2M3H8XOg0M3N2000000001O00000000000O2O00000O101O00000000010O01O0000000000000001O01O0000000001O000001O001O100O001O0010O001O1O00001O001O001O00001O00O100000000000O1L4N2H8K5J6K6HU`7OP`H4L4M2N3O01O2MR[f0FPeYOe0@h0YO6K3O0000000010O0000001O0001O00001O01O0001O000010O000000010O00000010O0000001O01O0001O0000001O00000010O01O0001O01O0001O01O01UNQXOR1jh0L3N4J;CY^<ASbC8I7F9H8K5N2000000O01000000O2I8Ahi:OYVE`0H7D;O11N5L1O4K1O4L4M1N1O2N2N101N4L[NC[YO9df01UYONjf09oXOGQg0`0iXO_OWg0f0cXO\\\\O\\\\g0g0aXOYO`g0j0\\\\XOVOdg0m0YXOSOfg0P1XXOPOig0P1VXOQOig0o0VXOROjg0o0TXOROlg0n0TXOSOkg0m0UXOSOkg0m0TXOUOlg0j0TXOVOlg0j0TXOVOlg0k0RXOVOng0j0RXOWOmg0i0RXOXOng0h0QXOYOPh0g0oWOYOQh0g0oWOYOQh0g0oWOZOPh0g0nWOZORh0b101O01O00000QOQXO]Oog0c0QXO[OQh0e0oWOTOXh09mWO_OK2^h0=kWO_OGOdh0;kWOF`h08bWOH^h05fWOI[h06fWOKYh05fWOMYh02hWONXh02fWO0[h0OcWO4\\\\h0LcWO5]h0JcWO7]h0IcWO6^h0IbWO7`h0H^WO:ah0G^WO8dh0HZWO9hh0EYWO8kh0GUWO8lh0GWWO0Qi0OjZ84ieG2N2M2N2O1O1O1O00100N10100N2O1O1N2000O01O1O100O001O1O1O1O1000O1000001O000O1000001O001N10001O000000000O101O0O1000001O000O101OTG\"}, {\"size\": [848, 480], \"counts\": \"l9d1lh00O0100000000000000O1000000000000O1000O01000000000000O10001O000O100000O10000000000O0100000000O100000O11O001O0O2O1O8H>A=Agjc0a0kT\\\\O<D6J5J3N1O00000O10000000000000O100000O100000O10000O100000000O100000O100000O1000000000O10O1000000000000O100000O100000000000O100XOTWOLlh03WWOKhh06YWOIgh07YWOIgh06ZWOIgh07YWOIgh06ZWOJfh06ZWOIgh06ZWOJfh05[WOJgh04ZWOLfh02\\\\WONdh00]WO1ch0L`WO3bh0HbWO8[i00000O01N2L4N2N101N3L2N3L4O1N1M4O1N200O0101O0O11O01_OkVOEUi08PWOFQi06TWOGli0O1O000O10000O01O1N101O100O100O11O00O2O00O1000O1O1O1O0O2M3M3N2N20000001O0000000O10001O0000000O2O000O2O00000O101O0000001O0O10001O00001N1000001N1000001N10000O1O2N2N101N10QdX5\"}, {\"size\": [848, 480], \"counts\": \"Ve]5c0ji08I8H6J4K5K4L3N2M3M4M2N2M3I7K5K6J5J6J6G9^Ob0N3K4O100O2N100O2N101N2O1O1O001O1O1O001O0000000011N3M3M1O1O1O1N10001O000000000O1000000O10001O0O010O1O2ZMdZO5]e0EnZO5Te0GR[O5od0FX[O7id0GY[O8id0EZ[O9gd0E\\\\[O9ed0Ca[OZOXNc0Xf01`\\\\O\\\\Occ0a0W3O1N3N3M2N2N1O3M3Llad4\"}, {\"size\": [848, 480], \"counts\": \"^;j0fi0000000O1000O1000O100000O100000O1000O1000O100000O1000O10000000000O0100000O100000000O010000000000O10O1000000000000O2O00001O1N3N3L5L4Kba`08S^_O8K2N1000000O10O1000O10O10000000O01000000000O10O10000O0100000O10000000O010000O10000000O010000000O1000O1000000000000O1000O100O00100000O01000000000O10O1000000000O10O1000O10O1000000000O10O10000O10O1000000O1000O10O1000O1000O0100000O10O100000000000O2O000000000O0100000000000O0100000000000O10000000000O010000000O10O1000O010000000O10O100000000O1000O1000O1000O01000O1000O100O010O1000O011O0O0100000O10001O1O00000O101OO1000O10O10O10O1O1000O1000000O10O2OO100000000010O00000001N2O0O2O1N3N2NX\\\\n3\"}, {\"size\": [848, 480], \"counts\": \"bcP7c1ff08\\\\YO4Qf0_2H8N1O100O10000000iM^ZO@be0>bZOPNJm0de0R1][OfNdd0Y1i[OZNXd0e1U\\\\OmMlc0T2X2O1O100O100O1O2N1K5G9O2N101N3N2N6I8lNcVOg0\\\\j0VOoS_4\"}, {\"size\": [848, 480], \"counts\": \"cXe69Sj07J7J4L4M3M2N3M3M2N3N1N2N2O0O10001O0O100O10000000O100O1N2O1O1N2N2O101N100O2O0O2O0O101O1N1O2O1N2N2N2O1O2L4L6HTfZ4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"gXX52]j04M2TYOLWc07]\\\\OP1fb0TOP]OV1lb0nN[\\\\O@`Nf1Te0kNZ\\\\OA_Nf1We0jNaZO\\\\Oc1Z2mc0eNl[O\\\\1Td0eNg[O_1Zd0bNb[O`1^d0cN^[O^1bd0eNZ[O\\\\1gd0gNS[OZ1nd0jNmZOW1Te0POaZOQ1ae0OlZOaNWe0\\\\1S[OSNYe0e1l1K7E<H:J<D5L4J4M3M3M2N3M3L5L\\\\kY6\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"_6?Qj00O110O1O001O100N2O100O10O01O1O00O100O101N2N2L4IWm`10nR_N3M101N101N2M3@?@a0L3O100001O000000000O101O00000000000O20O0000000001O01O0000000001O0000000001O01O0000000001O00100O001O001O1O01O001O001O001O001O00001O0000000O100001O00O1N2N2K5J5M4I9F9Kf^T1:o`kN>Dh0WO5N10O100001O0000010O0000001O00010O00001O01O00000010O00000010O000000010O000001O001O0001O0000000000000O2O000000001O000000000O2O1O0000001O0O1N2N2O2N1N3M2O1M3N3M3L5G?AoQh09hmWO8[Oe0H9L4OO1O010O001O001O001O100O2M3bNPWOY1Pj0eNVVO7Vj0JaQ90_nF4ZVO;Zh0T1J1O1O1O010O001O002N1O001O10O0001O1ON2N2K5M4O0O1000001O0O100000001O00000O10001O0O1O1G9N2N2O2M2M3L4N2L`j5KhUJ4M2J4M3N2N2L4N2O010N2O1O1O1O02O1O0000000O100000001O00000O1000O11N2XOeVO9ji0O001N2O1O2N001O001O1N10002NRk3\"}, {\"size\": [848, 480], \"counts\": \"j9d1lh0000000O1000O100000O1000000O10000O1000O1001O000000001N011O001OO1001OO10O100000000000000O0100O1001OO010001OO010001N2O2iNiVOP1di0H=@ojc07lT\\\\O`0A6J6J1O1O0O10O100000000000000O10O1000000000O1000O100000O10000000O10000000O1000000000O10O1000000O10000000O10O10000000000O100ZOPWOLPi03UWOHlh08VWOFjh0:VWOFjh09WWOGih09WWOGhh09YWOFhh0:XWOFih08WWOIih06XWOJhh04ZWOLfh03ZWONfh00\\\\WO0dh0M_WO2ch0JaWO5]i00O100O1N1O2M2O2O1O2M1N3M3M3N1N3N2N2O01000O01000001O0O2]OnVOFTi01TWONii0N1O0O100000O1O1O001O1O1O1O100000010O0O1000O0100O1O1M3N2L4N2O010O100001O0O1000000O2O000000000O2O00001O0O1000001O00000O101O0010O01O0O1O2M2O1Ni\\\\c5\"}, {\"size\": [848, 480], \"counts\": \"Tdf5\\\\1gh0?K5N8C>@:L3M2L5K3K6H8H7J7M3L3N3N1O2M2O2N2O001N101O1O0O2O010O000010O002O2M1O2N3M1O000001O000001OO100000001O0000O02O0000000000000000000000000000hLoZOQ1Qe0jNW[OS1jd0gN_[OU1ad0eNh[OX1Yd0dNm[OY1Td0dNP\\\\OZ1Qd0bNS\\\\O]1nc0`NU\\\\O_1mc0\\\\NX\\\\Oc1hc0ZN[\\\\Oe1gc0VN]\\\\Oi1Vf0N4RO]WOInVa4\"}, {\"size\": [848, 480], \"counts\": \"\\\\;j0fi00000O100000O10O100000O10O100000000000O010000000O10O1000000O1000000000O01000000000000O1000O100000O10O100000000000O011O001O1O2M2N5L5JQb`0Md]_O7UVOKhi0`0O2N0100000O1000O100000O100000O1000000O0100000O1000O01000000O100000000O010000000000O10O100000O1000O10O100000O100000O1000O1000O1000O10000000O10O100000O100000O10O1000000O0100000O10O100000O100000O01000O10O10000000O1000O1000O1000000000000000O0101O00O1001N0100000O100000O10O1000000000O0100000000O011OO10O10O100000000000O10O1000000000O101O1O1NWV_1Lmi`N2O000001O001O1O1O1N3N3Mham3\"}, {\"size\": [848, 480], \"counts\": \"PdP7n0Yh0^1aN\\\\1VOh0L4N3O0O1000000000000000O010O1O1O100O10000O1ZNUZOgNle0V1YZOfNhe0W1^ZOfNce0V1fZOcN\\\\e0Z1nZO\\\\NUe0a1o1N4K6I;Ff0[Ok0TOSY^4\"}, {\"size\": [848, 480], \"counts\": \"kif6`0mi06K4M2M4M2N2M4L4M3N4L1N101O000O1000001O00000O11N1000000O001O10O01M3O2N2M2N3N100O2O001O0O2O001O0O2N2N3M2N4L4L3JXZX4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"fmY52]j02N3kXO=UMI\\\\e0KW]O]1fb0eNb\\\\OKYNd1Te0cNa\\\\OMSNd1\\\\e0cN`ZOBe1^2kc0`Nh[Ob1Xd0aNd[O`1\\\\d0bNa[O_1`d0bN][O^1dd0fNV[O[1ld0jNmZOW1Se0oNeZOR1]e0TOYZOVO2a0he0T1jZOZN_e0a1T[OaM]e0Y2`1J7Aa0I;F9I3M4J4M4L2M3M3N2NbkY6\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"^6?Qj000001O1O001O100N2O100O1O1O0000N2O1N2N3L3N4L5KRm`16iR_N2N3N000O2N1M4J6ZOe0J6N2O1001O0000001O0000000000001O0O10000010O00000000001O01O000000001O00000000001O0000000001O1O00100O001O1O0001O0010OO1010O0001O001O001N1000O1000000000O1N2N2H8K5K5I8I9FUjR1OfUmN=L3M4L3O02M301N100O100O1O1O1O101N1N2O2M2O1N2NYWY31chfL7K4J5K5@`0000000000000000N2O1O2OO02O0O1O10001N1O100O1O1O1O101N100O100O1O1O2N1OjVOB\\\\h0>bWOE]h0:dWOF]h08dWOH\\\\h07dWOJ\\\\h04fWOLZh03fWON[h01cWO1\\\\h0OdWO2]h0MbWO4^h0KcWO5]h0IdWO7[i01O0O001O100000O10000O10002N2M3N1O001O00M3L3M4N2N2O1N2O10O0100O100O1O100O001N2N2N2O1N2O1O1N20O01O100O1O10O10N20000000000lG\"}, {\"size\": [848, 480], \"counts\": \"i9d1lh000000000O010000000O10000000000O100000O100001O0O10001O00001O00O0101O0000000000O02O0000O10O10O1001OO01000000O101O2M7J7H>Aojc0NTU\\\\O>B=D6J3M2M10000000O1000O10000000O10000000O100000O100000O1000O100000O10000000O10000000O1000O1000000O1000O10O10000000000O10O1000ZORWOJnh05UWOIkh07WWOFjh0:UWOGkh08VWOHjh07VWOJjh06WWOIih06YWOHhh07YWOIfh07[WOIeh06[WOKeh03]WOMch00`WO0`h0NbWO2^h0LdWO3^h0HfWO8Xi01O1M3N2O0O2N2N2O1M3N1O2M3M3N102M101001OO01000001O0O2\\\\OnVOHVi0KTWO4fi0N001N10O10000O1N20O01O1O10000000010O00000O10O01000O01O1O1O1OOYfc6\"}, {\"size\": [848, 480], \"counts\": \"X\\\\g57ni0?F9D<VOg0_Oa0H8L5L3M3N2I8K4N3I6D<M4M2M3N3N1N2O1O2N1O1O2N10000O2O0O1O1O2O00000000001O0001O000000000000000000000001N1001O00000000000\\\\LU[Oc1kd0YN][Od1cd0XNe[Oc1[d0XNn[Od1Rd0ZNR\\\\Od1oc0YNU\\\\Oe1kc0YNZ\\\\Od1fc0ZN^\\\\Od1bc0ZNb\\\\Od1_c0YNe\\\\Oe1[c0ZNg\\\\Oe1Yc0YNj\\\\Of1Vc0YNm\\\\Oe1Sc0ZNP]Od1Pc0[NR]Od1nb0[NS]Od1nb0[NT]Od1mb0ZNU]Od1lb0[NV]Od1kb0ZNX]Oc1ib0\\\\N[]O0fMf0Pe0XO[^Ob0ga0\\\\Oc^O;_a0Bf^O8ne0Ki\\\\\\\\4\"}, {\"size\": [848, 480], \"counts\": \"\\\\;h0hi00O10000000O10O1000000000O100000O100000O1000O010000000O10O100000000O100000000000O10O100000O1000000O01000000000000O1000002N1N2O2M5L4Kcg?KbX@1@`0M3O1O1000000O10O100000000O01000000000O1000O010000O10O10000000O10000000000O01000000O10O1000O10O100000O1000O10000000000O010000000O10O1000000000O010000000000O10O10000000O00100000O1000O100000O100000O10O1000O10O10000000O1000O10000000000000O01000000000000O1000000000001N100O2Ndec6\"}, {\"size\": [848, 480], \"counts\": \"ecP714g0fg0o1hNW1K5NfNUZOSNje0l1[ZOQNee0l1dZOmM]e0P2hZOlMYe0S2c1N2N2O1O100O1O1O1O100O10000O100O1000001O1O1O2M4M7Ic0\\\\OSo_4\"}, {\"size\": [848, 480], \"counts\": \"XmS7=Pj07I8H6K3M5K4M2N101N2N2N1O10001N100O101O00O0100000O1O1O100O1O1O1O1M300O1N2O1O2N101N10100O1O100O100O001O2N1N2O100N2O2L3M6E_Rg3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"TSY54[j02O1O2bXO\\\\1kb0gNP]O^1nb0lNV\\\\OB^Ne1[e0lNS\\\\Oe1mc0bNj[O`1Vd0cNe[O_1\\\\d0aNa[Oa1_d0bN][O_1dd0bNY[O^1hd0hNQ[OY1Pe0kNiZOV1Xe0QO\\\\ZOS1fe0JW[OXNmd0e1S2H7J5A`0L;E6K5L2M4L4L2M3M3N2M3NdkY6\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"]6?Qj0001O0010O01O1O1O1O1O001O0000O1N2O2M2N4Hi\\\\c13Yc\\\\N2N2O1O1N1O2M2M4YOf0H8N3N0101O0000001O000000000000001O00000000001O0001O000001O00000000000O2N11O1O0001O00000001O00010O1O1O1O1O01O01O01O001N11O0001O001N100000000000001O000O1N1N4I6K4L5G:K6HR\\\\]3;gcbL5H7L2N2N2O01000001N1Lhi:XObVEd0J4O2N3N01O01N1001O0001O1O00000001O001O000EiVOZOZi08f0KXn93jQF;D2O1O01OaVO]OQi0e0mVO\\\\OSi0f0iVO[OXi0f0fVO[OYi0g0dVO[OZi0n0N120O0ON3N1M4M3J6M3N10]OAXWO=hh0DWWO=hh0DXWO<fh0F[WO9ch0I]WO6ch0K^WO4ah0M_WO4`h0LaWO2_h0OaWO1^h01aWOO_h01aWON`h02aWOM_h03`WON`h02`WON`h02`WON`h02`WON`h02`WON`h02aWOM_h03aWOM_h03bWOK_h05bWOJ^h06bWOJ^h06bWOJ_h05aWOK_h05bWOJ^h06bWOJ^h06bWOJ^h06bWOI`h06bWOH^h08bWOH^h08bWOH^h08bWOH^h08cWOG]h09cWOG^h08bWOH^h07cWOI]h07cWOI]h07n000001O01O0O2O00000010O0000002N1O1O2N2N2N6TVO_O]i0k0O00000O100001O000000000O1000000O10001O004L6J6I2O1O01OOO2oF\"}, {\"size\": [848, 480], \"counts\": \"h9d1lh000O10000000O1000O1000000000O1000O1000000000000O10001O001O1O00O11O1OO010000000000O1000O10O0100000O1000001OO0101O1O2M:G:DVkc0FTU\\\\O?C;D7J4L2M100000000000000000O10O1000000O1000O100000O10O10000000O01001O00O100000O10O10000000000O10000O10O100000O100000O1000O100ZOQWOKoh04UWOIkh07VWOHjh08UWOIjh07WWOHjh07WWOIih07XWOHhh07YWOIgh06ZWOJeh06\\\\WOJdh05]WOKch03^WOMch00aWOO_h0NdWO2]h0JfWO6\\\\h0DgWO=Vi00O0N3N2O1N1O2O1N2N2N1O2M3M3N2O1N2O1O0100000000O2O001ZOPWOJmi0M2O1O0000000O10O1N2O10O01O1000000O11O0000001N4M3MZ_i6\"}, {\"size\": [848, 480], \"counts\": \"nUc53Vj0:F7I8H8I7J5J7G8J6I7I7I7J6L4L4M4M2N2N3L3N2O2M2M3N3M2N2N3L3O1N3N1N2O1O2N100O1O2O0O1O100O100O2N100O100O1O100O2O0O100O10001O0O11O00O1000001O0O100000_LX[OZ1hd0\\\\Nj[O\\\\1Vd0aNP\\\\O\\\\1Pd0bNT\\\\O\\\\1kc0cNY\\\\O[1gc0cN^\\\\OZ1bc0eNa\\\\OY1_c0eNf\\\\OX1[c0eNh\\\\OZ1Wc0eNl\\\\OZ1Tc0eNn\\\\OY1Sc0fNP]OX1Pc0gNQ]OY1Pc0dNS]OZ1nb0eNS]O[1mb0cNU]O]1kb0bNV]O]1lb0aNU]O_1kb0`NU]O9PNLld0JS]O4aNH_d02Q]O3`d0K`[O4cd0J^[O3fd0K[[ONld01U[OMnd02S[OJPe06e201O0O2O1N2O1NmjQ4\"}, {\"size\": [848, 480], \"counts\": \"Z;j0fi0O1000000000000O0100000000000O1000O1000O10O10000000O10000000000O1000000O02O0000O01000000O100000O100000O10O1000000O10001O1O1N3N1O4K6Kbg?KbX@1@8TVOLhi0`0O100O10O100000000O010000000O10000O010000000O10O100000O10000000O10O10000000O01000O10O100000O100000O100000O10O10000000O01000000000000O0100000000O1000O1000O1000O1000O1000O0100000O1000000000O10O1000O10O100000O100000O10O10000000O100000O10O1000000000000O10O100000O101O1N3N3L:Gf[V27RdiM3M2O0O1000O2O00000O1000001O0O2O000O1O2LcRk3\"}, {\"size\": [848, 480], \"counts\": \"f\\\\Q7c0ah0\\\\1E;N2O10O001O1M300O011N10O1000O1000000lNnWOJRh01\\\\XOEeg08cXOC^g09iXOBXg0<_1N2O2N2M3LUZc4\"}, {\"size\": [848, 480], \"counts\": \"lma78Sj0<F7I6K5L3L3N2N1O1O1O1N2O1O100O1O100O10000O01O1O001O1O100O1O1O1O100O1O100O2N1O101N101O011N10O01O0010O01O1O1O1O2M2O1O2M3M7G:Cg\\\\W3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"TSY53[j03O1O1iXOl0ob0VOi\\\\OZ1nb0gNn\\\\O_1ob0bNd\\\\OHlMj1_e0aNfZODY1Z2Qd0eNg[O]1Yd0fNb[O\\\\1_d0eN][O]1cd0fNY[OZ1id0jNP[OV1Re0oNgZOk0be0ZOUZOe0oe0<\\\\ZOoMne0n1ZZOfMne0S2\\\\1K5J6M8_O`0I5L4K5K3K6JhU]6\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"\\\\6`0Pj001O0001O001O001O1O100O1O1O00O1O1O2L3M5Hi\\\\c14Xc\\\\N2N2O0O2O1N2N1M4XOg0H8N2O1001O000000000000001O0O11O0001O00000000001O000001O000001O0O1000000O11O01O01O0001N11O001O00100O1O1O001O0001O001O1O0000001O00001O000000000000000O1O1O1M3J6K5J6H9K7Gee62ZZI6K5M2N200002M;DbZf0=PeYO8G7J4N10O1O2N1N3M2K5L4M2O3J5L6Jo\\\\`23bb_Ma0I7M4M2O1N1O10001O01O01O0O1@PO`WOP1^h0TO`WOl0^h0WOaWOi0[h0h0I700O10CPXO[Nog0`1XXO^Nhg0]1_XO`Nbg0]1k0K4L4L4L4M3N2N3L3O2N1N2N3M2NVWOM\\\\g0N_XO3iN3ki0<N3L5L5K4L3M3N0O1N4M2O0O00M3N21O10001O10O011O001O00000000000000001O00000O11O0001O00000O10000000000O101N2O2N5K4L3M3L4M4L5K2M3MTc65g\\\\I4M2N3M1O1O001N100010N1000100O0001O1O5K1O0001O000000001O1OO1001N10[G\"}, {\"size\": [848, 480], \"counts\": \"h9d1lh000O10000000O10O1000000000O1000O100000000000000O1000000000001OO100000O10001N0100000000000O1000O10O100000000O2O002N3L9H;DUkc0@ZU\\\\Ob0_O=D7I4K3N00000O1000O1001OO10000000O10000000O1000O1000O1000O1000O100000000000O10O10000000000O10000O10O10000000O10O1000O1000000ZORWOJnh05UWOIjh07WWOHjh08VWOHjh07WWOIih07WWOIih06XWOJhh05ZWOJfh06ZWOIfh07[WOIeh05]WOKch04^WOLbh01aWOO_h0NdWO2]h0JfWO5]h0EfWO<Wi00O1M3N2O0O2N2N2O1N2M3N1N3N2N2N2N2O10O1000O11O0O101O1[OnVOJTi0KVWO4di0O2N0O100000O100O001O1O10000000O11N10000000000O01O1O00100O1Lh`d6\"}, {\"size\": [848, 480], \"counts\": \"_Uh56Tj08E:K5I6J6K6J5L4M4G8L5K4J6K5K6I6K5L5J6J5L4L5L3N3M2M4N1N3N1O2N1O2N101N100O2O0O2O000O1000001N100O10000O100O101O00000000000O101O000O11O0000O100000UM][OoM0i0dd0n0i\\\\OoNWc0=_]OAab0;d]OD\\\\b07j]OHVb06l]OJTb04P^OKoa04S^OKna02T^ONla01V^OMka01W^OOia00Y^OOha0OY^O1ga0N[^O1ea0O[^O1ea0N]^O1da0M^^O2ba0M`^O2aa0La^O2`a0N`^O2`a0Mb^O1`a0Nb4N10000O2O001N101O1O1N2O1O2M10nUk3\"}, {\"size\": [848, 480], \"counts\": \"Z;i0gi00000000000O10O1000000000O10O100000O100000O10O100000000O10000000O10O10000000O10000000O0100000000000O0100000O100000000O2O1O1O2M2O4L5JR\\\\a03ji]OLei0`0O2O100000000O0100000000O1000000O10O1000O1000O10O10000000O10O1000000000O0100000O10O100000O10O1000000000O010000000O01000000000O01000000000O10O10000000O01000000000O10O10O1000O100000000000O010000000O010000000000O01000000000O1000O10O10O100000O10000000000O10000O1O2O1O5K8Gh_d6\"}, {\"size\": [848, 480], \"counts\": \"`cP72Qi0^1fNY1E;N2O1O01000O100000O100O10000000000O1gNXYOjNhf0R1`YOiNaf0U1eYOdN^f0[1\\\\1N2N3N1O2N2N3K6K:F?A[o_4\"}, {\"size\": [848, 480], \"counts\": \"fna7b0ji08J5L3L5K4M2N1O2N2O0N2N2O10000O10000000O10O01O1O1O1O1O1O1O1O1O1O1O1O1O10000O10001O0O1010O000100O001O001O1O2M2O1N3N2M2N2L5FeVX3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"RSY55Zj02N2O0PYOo0ab0ROS]O^1hb0dNS]O_1lb0cNQ]O_1ob0aNa\\\\OP2^c0eNj[O^1Wd0dNd[O^1\\\\d0dN`[O]1bd0eNZ[O\\\\1fd0jNS[OW1nd0mNkZOT1We0QO_ZOR1ce0NeZOhN]e0U1lZOcNWe0V1U[O`NQe0Y1c[OmMid0b1eYO`N[h0]1c0G9I5K4L3M5K3L2N4M4KUfZ6\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"\\\\6?Qj0000000010O00001O1O100O0010Ng[h1EcdWN4M2O1O1N101N2M3YOf0F:N2O100001N11O00O100000001O00000000001O0001O00000010O00000O1000001O00000001OO101O000001O1O00010O1O001O1O01O00010O001O0000001O00001O0O10000000001O0O1O1N2M3K5K5J5H;J7Fe^T1e0j`kN>Ac0^O5M10O1001O01O0001O00000010O000001O01O0001O00000010O000001O0000010O00O1000001N100000000000000010O0001mNaWO3`h0FoWO1Qh0JXXO2hg0L\\\\XO2eg0JaXO1bg0MaXO0bg0LQP\\\\13TQdN?C:D;1N1O001O01O01O0001O00000O2O000M3F;M2O1N3M2N2O1N2O_OfWOnNXh0o0oWOoNPh0P1SXOoNlg0o0XXOPOhg0P1YXOoNfg0Q1]XOmNcg0Q1aXOmN`g0P1dXOnN\\\\g0P1gXOPOYg0m0iXOSOZg0g0iXOYO\\\\g0MeWO<R1Fdg04_XOKTi0N20O0_O0aVO1\\\\i08^VOI_i0;_VOF]i0>bVOA]i0b063M2M3O00O1O1J510O2OO2O1N2O001O100N2O1O1O1O1O1N2O1N2O1N2O100O10000000000000000000000001O000O10001OO10O2O0O10001O000O3N2Nh0VOl\\\\<`0fbC4L1O000000000001O00O11N100O100O1000001O0O[G\"}, {\"size\": [848, 480], \"counts\": \"h9d1lh00000O10000000O1000O100000000000000O100000000O100000001O0O20O000001N1000000O10000000000000O010001OO10O10O1000O2O1O2M9H=ASkc0B\\\\U\\\\O?A>B:F6K1O1O00O1000O10000000000000O10O2O00O10000000000O010000000O100000O10000000O10000000000O0100000O10000000O011O00O1000O1000YOSWOJnh05UWOIkh06WWOIih07VWOJjh05WWOJjh06VWOJih06YWOIgh06ZWOJfh05[WOJfh06[WOIeh05\\\\WOLdh03]WOMch00`WO0`h0LdWO4]h0GgWO9Xi0O01O1K5O1N1O2N2N2O1N2N2M2N3N2N2O1O1O0100000000O2O001]OlVOHUi02RWOLji0O1N2O000000O10O01N2O1O1000000000O11O0O100000O0100N2N2O0M4M3O100O0100000000O101O0000000O1000001O001O00001O0O2O0M3L5L4MlZm5\"}, {\"size\": [848, 480], \"counts\": \"h[Q6`0ji08E:F;H7K5K5G:I7K3L4K5K6J5K6_Oa0G9L3N3M3M3N2N2O0O2O1N2O001O1N2O1O010O00001O10O00010O001O0010O00000000000010O00001eLaZOc1_e0WNT[O\\\\1ld0_N`[OZ1`d0cNg[OY1Yd0eNm[OX1Rd0gNS\\\\OU1mc0iNX\\\\OT1ic0iN\\\\\\\\OT1dc0kN_\\\\OS1ac0lNa\\\\OS1`c0jNc\\\\OU1]c0kNd\\\\OT1\\\\c0kNh\\\\OQ1Yc0nNj\\\\OP1Wc0nNk\\\\OQ1Uc0nNn\\\\OP1Sc0nNn\\\\OQ1Sc0oNn\\\\OP1Rc0oNP]OP1Pc0POP]OP1Qc0oNQ]On0Pc0QOS]Om0nb0ROV]Oj0jb0UO[]Og0fb0XO\\\\]Oe0eb0[O^]Ob0bb0\\\\Oc]O`0^b0_Of]O>[b0Af]O>Zb0Cf]O;[b0Ef]O:Zb0Id]O4_b00]]OGlb0:e31N1O101O00001O1O10O1O002OO30I<Ad]d3\"}, {\"size\": [848, 480], \"counts\": \"[;i0gi00O100000O1000000000O10O10000000000O10O10000O01000000O10000000O0100000000000O1000O1000000000O10O1000000000O1000O1000001O2M2O1O1N4M5Jfa`0K]d^O0ci0`0M3N2O10000000O0100000000000O01000O10000O1000O0100000000O10O10000000O1000O1000O100000O10O10000000O100000O100000O100000O1000O100000O10O1000000O01000000000O01000000O010000000O010000000O1000O100000O10O10O100000O10000000O1000O100000O1000O1000O100000O1000O1000000O2OO1000O100000O1000O10000000O01000000000000O0100000O2O0O102Kjio5\"}, {\"size\": [848, 480], \"counts\": \"Pjo6>Vi0P1YNe1hNW1D;N2O2O0O10001O00O01000O100O1O100O011O0O100O100O2O0N4K4I8H9@b0kNb1kMXWO8Si`4\"}, {\"size\": [848, 480], \"counts\": \"^US7:Qj09I7J4K6L2N3L4M3M2N2M4M2N1O1O100O101O00O01000000000O1O1O1O2N1O1N2N2O1O1N2N2O100O10001N100O101O1N2O1O1N3N1N3N1N2N2N2N3M5JZjg3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"dXX54[j03M2O2nYOFia0?o\\\\Om0ib0ZOh\\\\OP1Uc0SOe\\\\OQ1[c0TOo[O]O_Nd1ae0ROj[O^1Vd0eNe[O]1[d0dNc[O\\\\1_d0fN][O[1dd0fNY[O[1gd0kNQ[OV1Qe0nNhZOR1Ze0TO\\\\ZOo0fe00gZO`N]e0\\\\1lZOXN\\\\e0a1n1K5F:F>G9H7I6K5K3M2N3JY[\\\\6\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"TUT29Vj02N1O2O1N2O0M4QOn0M3O1001O0000000000000000001O0O100000001O0000000001O01O00000000000O101O01O00001O01O00000001O010O1O1O001O0010O001O001O001O0001O01O00001O000O100000000N2N2M3L4J6K5H9J7Gi^T1?i`kN=Ed0]O7L1N101O01O0000000000010O0001O000010O000001O01O0001O000000001O0001O01O01O01O00001O00001O00001O01O010O000010O00000010O0eNlWO:Th0_O\\\\XO8dg0EaXO:^g0DfXO:Zg0EiXO9Xg0DlXO9Vg0FlXO8Tg0FPYO8Qg0FSYO6gQV1JPgjN6L1N2M2M3N4K5H7J6O101O01O01O0O2O000M3H8O2N100O1O1O2M2O100N3N1O1O1O2O0O1O1O101O0000000000001O01N2N2Gk0XO=D6J5N3L4M3IVY8LRgG2N1O2N5K10000O100O101M2O100O1O2N0011O00O100O100O10000O0100000O1O1000O0100O10O100OO2\\\\X=@ogB6I6M3L4E;E:01O1O100L4K400100000000000aH\"}, {\"size\": [848, 480], \"counts\": \"h9c1mh00000000000O100000000000000O2OO1O10000O0101O1O0000000O1000000000001N10O11O00O100000O1000001O00O01000O11N3N2M5L7H;Dbed0NaZ[Ob0_O9F5L1O0O2O00000000000O10000000000000O1000O10000000O1000O10000000O10000000O1000O100000000O10O100000O1000000O10O10000000O1ZOQWOKoh04SWOKmh05SWOKmh05TWOJlh05VWOJih06XWOIih07WWOIih06XWOJhh06XWOJhh05YWOJhh05YWOKgh03[WOMdh02^WONah01aWOO_h0KgWO4[i000000O0O2K5N2N2O1N2N1N3N2O1M3M3N2N101O11O000O101O00000_OmVOESi06TWOGoh01XWONei001O1OO11N10O1O1O1O1O1O10000000000000O0101N00100O1O1N2N1L5N200O0100000O0101O00000O101O0000001O000O101O00000O2O00000O2O000000001O0O2O1O0O101O00000O2O00001O0O101O0O1O2N10TYZ5\"}, {\"size\": [848, 480], \"counts\": \"gbh6f0ci09G9D:C>ZOf0]Ob0B?I7H8I6I8L3N3M2N3N1O2N1O101N100011N:F2N10O00000N2O10001N1000000O2O00000O100000000000000000bLlZO`1Te0VNQ\\\\Oo0oc0kN]\\\\On0dc0oNa\\\\Oo0_c0nNd\\\\OR1\\\\c0kNh\\\\OT1Xc0gNo\\\\OW1Qc0fNR]OY1ob0eNS]O[1mb0cNU]O]1kb0bNU]O^1mb0_NU]Oa1lb0]NU]Oc1lb0\\\\NS]Oe1nb0YNS]Of1Rc0VNm\\\\Ok1ke00O101N100002Ld0WOooe3\"}, {\"size\": [848, 480], \"counts\": \"Z;j0fi000O1000000000O10O1000000000O010000000O10O100000000O1000O100000O100000O011O0000O10000000O1000O10000000O10O10001O0O3N1O1N3N5K4K`g?NUX@>N2N2O1O1O100000O1000O100000O10000000O10O100O100000O10O1000000O1000O100000O1000O1000O1000O100000O1000O100000O100000O10000000O10O1000000O010000000O1000O10O10000000O010000000O010000000O100000O0100000O10O100000000O0100000000000O010000000O10O1000000O010000000000O1000000O1000000O10O1000000O010000000000O01000000000O010000000O10O100000O10O1000O10O1000000000O010000000O1000O10000OO3M1O2N2M3O1O1N2O1O1NSeS5\"}, {\"size\": [848, 480], \"counts\": \"`Zm6=ih0_1lNUN^XOh2_f0U1\\\\Od0L4O2O0O100000001N1000000000O1O10000O11O000001N1N2N3L3L6G8D?UOn0TO^1VNmda4\"}, {\"size\": [848, 480], \"counts\": \"[TX7d0ii06K4L4M2N3M3M2N2N3N1N2N3N1N2N2O1N1000001O00O1000000O100O1O1O1O1N2N1O2M3N1O2O100O1O2N2O1O1O1N101N2O1O0O2N2N2N2N6J4KgZe3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"gcV51\\\\j04N1QYO6oL5^e0F[]OY1bb0jNT]O_1jb0dNb\\\\OFXNi1Ue0lNU\\\\OC^Ne1\\\\e0jN`ZOYO_1]2Rd0bNi[O_1Wd0dNe[O\\\\1\\\\d0eNb[O[1_d0iNZ[OZ1gd0hNU[OX1md0mNkZOT1Ve0POdZOQ1]e07bZO`Nae0W1Q[OXNWe0d1T[ObM`e0V2b1L5B>K8I9E8H8J3M4L3Ldj^6\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Tam18Wj03N1N2N2O0O2N2VOi0G9O1O11O000000000000001N10000000001O000O11O01O000001O000000O2O01O00000001O0000000000010O000002N1O0010O01O001O01O00001O001O000000001O001O00000000000O1O1N2M3J6K5J6I8K5Ih^T1>l`kN9Gg0[O5L2N1O20O000000010O00000001O01O0001O0001O0001O0000010O00000010O00001O01O00001O00010O00001O00001O01O01O01O0001O000001O000001OO100N3M2H9A`0\\\\OfPo1I^oPNj0F5O20O10O10O001O0000O1O1G9N20O1L5I7K7I6M:D5L4N0O1O2N2O001N1OPj03l[N0_i08^VOI[i0`0`VOB^i0j0N10010O01O001O00001O001O0000000000000000O100O100O001O010N200O1O01000000O10000O2O1N1H8D>HTRc05lm\\\\O3M100O1O1O1O1O1000O0100O100O1001OUG\"}, {\"size\": [848, 480], \"counts\": \"i9b1nh0O01000000O11O0O10O10000001N100000O10000000O100000000000000O1000000000000O2O00O10000O02O2M4M2M8I;DQ`e0;e_ZO;D6K1O001N101OO10000000000000O10O2OO10000000000000O10O10000000O10O10000000000000O10O1000O100000000O100000O100000O10000O100YOQWOMnh04SWOKmh04UWOJlh06UWOIkh07VWOHjh07WWOIih06XWOJhh06XWOJhh05YWOKgh04ZWOKgh04ZWOLfh02\\\\WONdh00^WO0bh0N`WO1ch0GcWO9Yi01000O01N2L5M1O2O1N2N2N1O3M2M3M2O2N2O010O11O00000O10001]OoVOEQi08SWOFoh02YWOMei001O00001O00O0O2O1O1N2O11O0000000O100000O100O100O010M3L4K6N00100000O100O2O000000000O2O000000001O0O1000001O000O101O000O2O0000000O2O1O00001N1000001N10001N101O000O2O0000Tm`5\"}, {\"size\": [848, 480], \"counts\": \"^]R7>gi0>F8I7K4J5L6G8@a0nNQ1XOh0L5K5L3N3M2N2O2N1O1O2N100O101O0O100010O2N2N00000001N10000O100O101N1000000000000O1000000000000000TLg[Oa1Zd0VNX\\\\O`1hc0[Nd\\\\O^1\\\\c0\\\\Nm\\\\Oa1Sc0\\\\NS]Oa1mb0\\\\NX]Ob1ib0[N[]Oc1eb0\\\\N]]Oc1cb0[N`]Oc1ab0[Nb]Od1_b0YNc]Og1]b0XNd]Oh1\\\\b0VNf]Oi1\\\\b0UNe]Ok1^b0oMe]OQ2]e0O1000O10O01OL2I:G9G:FWbU3\"}, {\"size\": [848, 480], \"counts\": \"Z;i0gi00000O10O10000O100000O0100000O100000000O1000O100000O100000O1000O1000000000O10000000O1000000000001N2O2N0O3M4M5KSg?9cX@2M2O0O2O1000000O10O100000000O1000O1000O10000O1000O100000O010000000O100000000000O10O100000O1000O1000O10O100000O1000O1000O10000000O10O1000000000O10O100000O10O1000000O10O1000O1000O1000000000O01000000000O010000O10O100000O0100000000000O1000O10000000O10O1000O1000000000000O10000000O010000000O0100000000O1000O100000O1000O100000O1000O100000O10O1000O10O10000000O010000O10O10000000O10O100000000000O10O100N2L5HWdX5\"}, {\"size\": [848, 480], \"counts\": \"Rag69Ri0]1fNT1fNX1B?J5O1O101O000O10000000000000O10000M3I7H8L4L4N3M2M3O2M2O3M3M8Aa0YNkYh4\"}, {\"size\": [848, 480], \"counts\": \"QlP85Rj0?D8L5L4L3M2M3L4M2N3M201N2O000000000O1000000000000000O1O1O100N2O1O1N2M3O1O1O1N2O101N10001N101O010O001O001O1N3N1O2N2M3N2M4L5Hk^h2\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"foo43[j03N1O1kUOIo39fa04\\\\]Ol0_b0WOX]OQ1gb0XOg\\\\OR1Xc0POS\\\\O_ObNc1[e0ROn[O`1Rd0bNk[O^1Vd0eNe[O]1[d0eNb[O[1`d0gN[[O[1fd0hNU[OY1kd0lNnZOU1Te0oNeZOS1[e0VOZZOlN?c0\\\\e0V1nZO[N\\\\e0`1nZOoM_e0j1i1J6C=K7I8H5K6K4L3N1N2N2NUob6\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"dhb1:Uj02O1N101N2N2K5C<@`0M3O1000O100000001O0000000000001O0O1001O0001O0000000001O01O000O10001O00000000001O0001O00001O01O01O1O1O1O0010O01O0001O001O0000001O00001O001O0000000000000N2N2M3I6L5K6H9IYYU16bfjN;Eh0XO5N1O2O0010O01O000000001O01O01O01O0001O0001O01OO11O01O0001O0000001O01O01O0000010O00001O00001O00010O00010O00001O01O000000001O0M3K5I7K6H7K4I9HRXW2g0SghM=M2N2O001O01O0O1L4XOUWOJlh0MdWOK^h01fWOM[h0OkWONWh0KRXO1Yi0MXkc0?QT\\\\O9M5M3M2O1N201N0001O0000001O0O10001O0O100000001N1000000O100O1O1L5F9L3N2O3M3MY_71f`H2M3M3N2O1M3N2O1N1O2O1O1O1O1O1N2O0100000O0O2OSOfVOf0[i0XOjVOd0ci0M2O1O00000000000OUG\"}, {\"size\": [848, 480], \"counts\": \"h9a1oh001O0000O1000O010000O1001O00O010O1000000000000O010O100000O101O0O3N2N4eNlVOQ1bi0oN`VOb0hYf0Oo_ZO>C6J6I3N1O0000000O01001O00O1000000000000000000O01000000000O100000O100000000000O1000O010000000000000O01000000O1000000O100000000YORWOKoh04TWOJlh06TWOJlh06TWOJlh05UWOKjh06VWOJjh05XWOIih07WWOIih06XWOJhh05YWOKgh04ZWOLfh02\\\\WOMdh02^WONbh0OaWO1`h0KcWO5\\\\i0000O1N2N1O2O1M3O1N2M3N1O2N2M3N2M3O0O20000O11N10001O0O1@iVOGXi03PWOJPi0OXWO0gi0M1O0O100000O1N2O1N2O1O10O10001O1O000000O100O1O00100O1N2K5K500O1001N100000001O0O1000001O0O1000001O00000O101O0O1000001N101O00001O000O2O000O2O00000O2O000O2O00001N101O001N10a[h5\"}, {\"size\": [848, 480], \"counts\": \"gbl6:mi0:I8H7F9H9G9G8J5F<C<@`0F:L4M4M2M3O1N2N3N1O1O2N1O100O1O2O0O1O100O1O2O0O1O100O100O10001O00000O100O10000O100O100O10000000_LR[O`1nd0UNe[Oc1[d0ZNk[Oc1Ud0[NQ\\\\Oa1oc0]NU\\\\Oa1kc0]NY\\\\Oa1gc0]N^\\\\Oa1ac0]Nc\\\\Oa1]c0]Nh\\\\O`1Xc0^Nk\\\\O`1Wc0^Nk\\\\Ob1Tc0\\\\NP]Ob1Pc0]NQ]Oc1ob0]NQ]Ob1Qc0\\\\NQ]Oc1ob0[NS]Oe1mb0ZNT]Of1lb0YNV]Of1kb0XNV]Og1kb0XNV]Oh1kb0WNT]Oj1lb0UNU]Oj1mb0TNT]Ol1lb0SNU]Om1kb0RNV]On1jb0RNV]Om1lb0QNT]OP2nb0mMR]OS2fe0O010O0A`0SOkiT3\"}, {\"size\": [848, 480], \"counts\": \"Y;i0fi010O100000O1000O100000000O1000000O0100000000000000O10O100000000000000O103M1O1N2O3M4K3M_g?OZX@0oUO3li0;N2N2O10000O1000O100000O10O100000000O100000O1000O100O0100000000000O100000O10O1000O10000000O1000O100000O0100000000O0100000000000O0100000000000O0100000000O01000000000O01000000O1000O1000O100000O1000O1000O10O1000O100000O0100000000O10000000O100000O100000O10000000O100000000O10000000O10O10000000O10O1000000O1000O1000O100000O1000O10O10000000O0100000O100000O100000O01000O010000000O1000O1000O1000000O1000O11N2O2N2M3N3Lfb]5\"}, {\"size\": [848, 480], \"counts\": \"]]^6a0eh0a1aNY1[Oe0A>I8N1O100O10001O0000000000O100O100O100O1N2O1H8F;]Ob0J7K4M3M4M7G>XOR1YNnaP5\"}, {\"size\": [848, 480], \"counts\": \"PiZ8l0^i07K5M2N2O1O2M2O001O100O1O100O10001N100000000O010O01O100O100N2N2O1O1O002O0O100O2N1O2O001O0101N01O1O1O1O1O1O2N1O2N1O1O2N2M4JV\\\\_2\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"ffg43\\\\j02N2kYOJmK6ge02\\\\]OT1`b0nNX]OZ1eb0UOi\\\\Oo0Wc0UOa\\\\Oo0_c0UOT\\\\OU1kc0mNk[O[1Ud0fNg[O]1Zd0dNc[O\\\\1^d0gN][O[1dd0iNU[OX1ld0mNmZOT1Ue0POdZOQ1^e04dZOcN]e0X1nZO]NXe0^1o1K6H8G?F7K8I4J7J5J4L4M3M2McRl6\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"U[V17Wj04N1O1N101N2N1N3C<@`0K6M110001O000000001O000000000000001O000000000O2O0001O000001O0000000000001O000000001O01O00000001O01O1O1O1O1O010O1O01O00001O00001O001O00001O000000000O10000O1N2M4J5J6I8I6I8Hee67XZI4L3N3L3O2N1003MW[f0BmdYOb0Ch0ZO5L4M2O000000000010O0001O0000010O001O01O00001O01O0000001O01O0001O0001O01O0001O01O001O0000001O0010O000010O00001O0001O0001O00010O0000001O0001O0000000000001O00001O0N2L4K6H7K5K6J7GPmU3HYSjL6A?M3001O00000000000O101O0O100000O11O1O1O1O0O1O2N2N0O2O2O00O01N4L2O2M3MPh?KVX@1O1O1O1O1O1O1O1O01O01O1O100000O1000O10000000OQG\"}, {\"size\": [848, 480], \"counts\": \"d9c1mh01O00000000O1000000000000O10O100001N2O4K=Da0ROTVO2\\\\_e05eZ[Of0ZO8I6J3M1O000O10O100000000000000O010001OO1000000000O010000000000000O10O1000000000000O10O100000000000000000O010000000O1000000O100XOSWOMmh02TWOMmh03TWOLkh05VWOJjh06VWOJjh05WWOJjh06WWOIih07WWOIih06XWOJhh06XWOJhh06XWOIih05YWOKgh04ZWOLfh02\\\\WONdh0N`WO2_i00O100000OM4N2M3O1N2O0O2N2N2M3N2M3N2N101O10O10000O2O00000_OkVOGUi05SWOFoh02ZWOLfi0O1O0000O010O1O1N2N2O1O1O11O1O00001O0O10O100O100O1O1O1O1K5K500O10O10000000000O101O00000O101O0000001N1000001O00000O101O00001N10001O001O0O101O000O2O000O101O000O101O0O101O0O2O000O1000aon5\"}, {\"size\": [848, 480], \"counts\": \"Uoj6:Pj08I6J5K5J6I7I7I8H7J7J5L6nN_MkYOh2le0R1N3L4N001O1O010O1000000000001N11O00O1000001O000O100O101N100000001O00000O101O0000000O101O01O000001OkLbZOX1^e0_NV[OV1jd0fN\\\\[OX1dd0eN`[OZ1`d0cNf[OZ1[d0cNi[O[1Wd0bNm[O]1Sd0aNP\\\\O^1Pd0`NT\\\\O^1lc0^NY\\\\Oa1gc0^NZ\\\\Ob1gc0[N\\\\\\\\Oc1fc0[N\\\\\\\\Od1dc0[N]\\\\Od1ec0[N\\\\\\\\Od1ec0ZN]\\\\Oe1cc0ZN_\\\\Od1dc0YN_\\\\Od1Yf0N3L2O1lNoVOf0Vi0QOQWOk0_i0K6IPeY3\"}, {\"size\": [848, 480], \"counts\": \"W;h0hi0000000000O01001OO100000O10000000O100000002M3N1O1O2M6K1N5J[g?5WX@;M3N3N10000000O010000000O10O100000O100000000O0100000O1000O010000000000O0100000000000O10000000O1000O10000000O1000000O0100000000O0100000000O010000000000O010000000O1000O10000O0100000000000O010000000O10O10O100000O0100000O010000000O10000000000O10O100000000000O10O11O0000000O10O11O0000O010000000000O0100000000O0100000000O01000000000O1000O10O1000O1000O10000000O1000O1000O1000O1000O1000O100000O010000000000O1000O1000O100O2O00O1000000000O2OO02L4L`]^5\"}, {\"size\": [848, 480], \"counts\": \"Q_T6S1Xh0X1eNY1[Od0E;M4N10000O101O00000000000000O0100000000001M2O1O1N3N1M4H8B?@e0POc1jMfZ[5\"}, {\"size\": [848, 480], \"counts\": \"ikZ88Qj0:I5L3N3N1N2O2M2N2O1O1O1O2N1O1O1O2N100O1000000O100O0010O1O1O100O1O1O1O2N1O2O001N101N1001O0100O001O001O000O2O2N1O2N1M3M4I6KmY_2\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"fh]43\\\\j02N2QYOQ1Zb0SO^]OT1`b0nNV]OZ1jb0oNi\\\\OV1Vc0kNW\\\\OBZNi1_e0nNl[O`1Td0cNg[O_1Yd0dNc[O\\\\1^d0gN][O[1dd0iNV[OW1ld0lNnZOU1Se0QOeZOQ1\\\\e0TO\\\\ZOm0ee0OmZO`NWe0[1Z[OhMWe0R2g1I8F;I9J:F5J7H6L4M2M2O2L4M_PV7\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"cbk08Wj01O2O0O3N1N1O2M2E<ZOe0M31O0000001O0000000000001O000000000O101O000000001O01O00000001O0000000000001O000001O000001O01O001O10O01O001O1O1O01O001O010O001O0000001O00001O00000O100000000N2N2J6K5J6I8J5Kge6IbZI7I4M2M3N3M21O5K8@oUOOPUg00odYOh0_O`0_Oa0B3O00O1001O001O01O000000010O01O01O0001O0010O0000001O0001O000010O0000010O01O0000010O00001O00001O0001O01O01O00000010O001O0000010O00001O000001O00000000001O00001O00000000000O2O000000000O2O000M4F9I9@VP:DioEn0]Oa0G9L3O10001O00000010O0001O00000010O0000001O01O0000001O0010O0O1O1O1O1O1O2N1O1O100O2N1O10000O101N100O1O1O1O2O0O1O100O2O000000000O2O00000000000O2O00000000001O0O100O2O1WOoVOBL9T\\\\a0Lo]_O3E;N2O2N001O1O1O1O001O1O1O100O1O1O0N35K3M0O1000001O0O3N000000001N10001OO11O0O1000001O0O10000000O100000O10001O0000000O2O0000000O2O000O100O1O2L4M_T<\"}, {\"size\": [848, 480], \"counts\": \"a9d1lh001N10002M3N;D9Fjed0AfZ[Oa0_O;E9H2N00000000000O2O000000O10000001O00O1000O1000O100000000O10O1000000000O10000000O100000O1000000000000O0100000O1000000000O10O10000YORWOLnh04SWOKmh04UWOKkh05VWOJjh06VWOJjh05WWOKih05WWOJih06XWOJhh05YWOKgh04[WOKeh04\\\\WOLdh03]WOMch01_WOObh0N_WO3ah0IcWO7[i0O1000O1N1N3M3O1O1N1O2N2M3O1M3M2O2N2O1O1O0101O0O1000001^OoVOCRi0:PWOFQi03VWOLlh0L[WO3bi0O0O101OO1O1O001N2N2O100001O0000001O000000O010O100N2N2N2M3L4O00100O100001O0O100000001O000O2O0000001O000O2O0000000O2O0000000O2O10O0001N10001N100000001N101O000O101O00000O2OO1001O1N101O0O1000acU6\"}, {\"size\": [848, 480], \"counts\": \"d^d66Wj08J2M3N3M2L4J6K5K5J6H8H8G9J6M3L4L4VO\\\\MbYOh2[f0i0N1N2O1O100O1O10000O10000001O000001O000000001O00000000001O000000001O00000000001O0000001O0001O001O000`MSZO<ne0^O\\\\ZO>de0ZOdYOmNo0f1]e0ZOlZOd0Ue0XOP[Oe0Qe0XOR[Oh0nd0UOV[Oj0jd0TOY[Oj0hd0TO[[Ok0ed0SO][Om0dd0PO_[On0bd0PO`[OP1ad0nN`[OQ1ad0oN`[On0cd0POa[Ok0bd0SOc[Og0`d0WOf[O1od0JbUa3\"}, {\"size\": [848, 480], \"counts\": \"T;i0gi0000O01000001O1O2M2O1O1N3N5JVg?8aX@2O1M3N200O1000O1000000O10O100000O10000000000O10O10O10O100000O10000000O10O1000000000000O1000O1000O100000O10O10000000O100000O1000O100000O100000000000O10O10000000000O010000O10000000O0100000O10O1000000O01000000000O0100000O10O10000000000O010000000000000O100000O1001O00O10O2OO100000O10000000000O10O10000000O010000000O1000O10O1000000000O10O10O10000000O10000000O1000O1000O100000O10O1000O1000O100000O100000O1000O10000000000O10000O10000000000O0100000O10000000000O1000000000000O100001O01N101O001N2N4M2LY_T5\"}, {\"size\": [848, 480], \"counts\": \"baj5=Ti0U1cNY1QOn0ZOe0I7N3N1000001O0O1000000000O10000000000O10000O1O2N1N3L3K7B=@b0^Of0oNlXe5\"}, {\"size\": [848, 480], \"counts\": \"Z`X8d0hi06M1N3N1O2N1O1O1O100O2O0O1O2O0O10000O011N10O011O001N1O10001N1O100O2N2O001O1O001O001O001O101M2O2M6I7FUhj2\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"TeT44U4;ba0G_]OZ1^b0gNY]Ob1fb0_NV]Od1ib0aNb\\\\OKSNf1[e0iNY\\\\Oe1gc0fNj[O^1Vd0dNf[O^1Zd0dNb[O^1_d0dN][O]1cd0hNW[OX1kd0lNnZOU1Se0QOeZOP1]e0o13PNjZO`N[e0\\\\1oZOnMae0k1g1K5E;I9I:H6J4L5K4M2M3M2N2N2NRT_7\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"`Yc08Xj02M2O000O2N2O2L2M3[Oe0F:N3N11N10000000001O0000001N1001O00O10001O0000000010O00000010O000O100000010O0000000001O01O000001O00100O1O001O0010O00001O0010O01O001O0000001O0000001OO1000O101N1N2K5J6K5I7K6K6Gfe60^ZI6K2M4L3O2N2O05J`Ug0JajXO<G=Bc0_O4M2O000001O01O000000010O00001O0001O01O00010O000010O0000010O0001O000001O01O001O00O20O001O00001O01O01O01O0001O01O000001O01O0001O000010O00000000000000001O0000001O00000000000O2O0000000O2O0O1M4I6I9]Oe0[OaU9>miFg0ZOe0I7L3O110O001O001O0000001O01O01O0000001O01O0001O000000010O001O000010O0000001O01O000001O000000000O1I7J7J5N2O1O1O2O00000O101O000000001O000000001O000O100000001O0O10001O000O1O3_O]o9_O`QF4M2L4I7J6M3M300O11N10000000000O1000000000002N2M4M3M6I5Kjm95mQF5010OO010000000000000000000O10O10001O000O100000001N10001O0O2OO100001N1000000O10001O0O10001O001O0O1O2N\\\\`5\"}, {\"size\": [848, 480], \"counts\": \"QPe0:Sj0e0]O<D2O1O1N2O000000O1000000000O100000000000O100000000O100000000000O01000000000000O1000O10000000000O0100000000O1000O1000000000O10000ZOQWOLnh04SWOKmh04TWOKmh04UWOKjh06VWOJjh05XWOJhh06XWOKgh05YWOKgh04ZWOLfh04ZWOLfh03[WOLfh03[WOMeh02\\\\WONdh00^WO0ah0OaWO0`h0NbWO2^h0LdWO4\\\\h0IgWO6Zh0FjWO:Ui0100M2M4N2O0O2N2N2N2N2N2N2M2N3O1O100O1000O2O0000001]OoVOEQi08SWOGnh03XWOLih0O\\\\WOOdi0O0000000000O1N1O2O1O100000000001N100000O10000O100N2N2L3N3N2N200O100001N10001O0O100000001O0O10001O00001O00000O2O00000O2O0000001O00001O0O101O0000001N10001O0O101O00001N100000000O2O001OSg^6\"}, {\"size\": [848, 480], \"counts\": \"VWf6<ni0<B<H7J3WOkNUXOW1hg0PORXOR1mg0j0O1N2O1N3N1O2N2N2N2N2N2O1N1O1O2N1O101N1O1O100O10O0101O000O010O1O1O001O0010O01O001O00001O0000nM_YO5af0@mYO=Sf0^OTZO`0le0[O[ZOc0ee0\\\\O]ZOc0ce0[O`ZOd0`e0ZOcZOe0^e0XOdZOg0]e0WOfZOh0[e0UOgZOj0[e0TOgZOj0\\\\e0TOcZOk0bg0N3L3N4J5L8A^^l3\"}, {\"size\": [848, 480], \"counts\": \"U;d0li0O2O0O101N6JWR>LmmA?A1O0O2O10O0100000O10O0100000000O1000000000O0100000000O01000000000O1000O10000000O01000000000O100000O100000O10000000O010000000000000000O100000000000000O010000O10O0100000000O010O1000O10O10000000O1000000000O100000O1000000000000O10000000O100000O10O1000O1000000000000O010000O11O00O0101O00O10O1000000000O1000O100000O100000O1000O1000O1000O10O10000000O10O1000000000O010000000O0100000000000O01000000000000O010000000O1000O010000000000O10000000000O100000000O100000000O0100000000000000000000001O1N2O1O0O2O3L[S[5\"}, {\"size\": [848, 480], \"counts\": \"bmc5:2Inh0`1ROl0mNS1[Od0B?M2N2000001N1000001O00O1000000O1000000O101N1O1O2M2M4I7D<@a0^Oe0VOllk5\"}, {\"size\": [848, 480], \"counts\": \"hYb7e0gi08K3M3M3M2N1O2O0O101N100O10000O10001N10O11OO01000001O0001O000O2O1O00001O01O01N1N3N2M3N2L4L5L4K6Jjcb3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"dak34Yj05M3N3mXOj0eb0YOQ]OS1kb0POm\\\\OV1Rc0nNW\\\\O@_Ne1Ze0nNS\\\\OB]Nb1_e0QOo[O_1Qd0dNj[O^1Vd0eNf[O\\\\1[d0eNa[O]1_d0fN][O[1dd0hNW[OX1kd0lNnZOV1Se0nNgZOR1[e02eZOfN^e0V1mZO]N[e0]1oZORN]e0i1j1I6E;K6K8H7I6K5K5K2N3M2M6Hebf7\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"]o?4[j03N1N3N1N3M2N2M2I8]Ob0H8O100000O1000001O00000000001O0O10000000001O000O110O000001O0001O00000O110O00000001O01O00000001O010O1O1O1O1O010O001O01O010O1O00001O00001O0000000000000000001N1O1M3K5K5K4K7I8IT`7LQ`H7K2M3O2N1001O:EWUg07^jXO=Dg0ZO4N2N101O01O0001O1O00010O000001O01O01O0001O0000010O00001O00010O00000010O01O000000001O0010O0O11O01O01O01O01O00001O01O000010O0000001O000001O0000000000001O00001O000000001O000000001O000O1O101N1N2C>G9]OWP:D\\\\VE5^i0k0YOf0F9M2O2O0O101O001O0001O01O00001O010O0000001O0001O0001O0010O00000001O01O000001O00010O000010O000O1O1F:L4L5L3O100O1O101O0O1000001O00000O10001O000000000O20O0000000000O2O01O00O2O00000O1J6E<L3M5J__7Lg`H4M1N2L4N2N2M3O1M3N2N101O1O1N2002NK5M3O100000O01c0\\\\O?ARX=NdgB>K41M2O100001O00O10000O2O0000001N10000O2O00000O10000000001O0O101N100000000O2O000O101O00000N`U7\"}, {\"size\": [848, 480], \"counts\": \"jea033=fi0b0E9G3M1O1N10O11O0000000000O100000O10000000O100000000O1000000000O10000000O1000000000O01000000000O1000O1000000000000O010000000O10000[OoVOKQi03QWOMnh03TWOLlh05TWOImh06UWOIkh07UWOIkh06VWOJjh05XWOJhh06XWOJhh05YWOJhh06XWOJhh05YWOKgh04ZWOLfh03[WOMeh02\\\\WOMdh02^WONbh0OaWO1`h0JdWO6[i00O1O1O1N2M3N2N2N2N2M3N2N2M2O2N2O1O1O10O10001O00000_OmVOETi07PWOHPi04TWOLmh0NYWO1ei0N1O000000O100N101ON12O1001O1O00000000000000O010O2N1N1O2M3M3M3O1O1001O000O101O00000O2O0000001O000O101O00001O000O101O00001O000O101O00001O00001O0O101O0000000O2O00001O0O101O001N101N101O00TQb6\"}, {\"size\": [848, 480], \"counts\": \"gkT6=Qj06I5K7J3M3M3L4L3M4L4K5L4L4L4L4K4M4K5L4L3N3M3L4M2N3M3N2N1N2N3N1O2M201N1O2O0O101N10001O00001O000000010OO2O1O2N3L3M2N2M2O1N2N3N1O1O1N3_N[YOSOgf0h0bYOQOaf0m0bYOoNaf0o0aYOoNaf0o0aYOPO`f0o0aYOnNcf0o0_YOoNcf0n0aYOoNaf0n0b1N3N1N200O2N1N3N3L4L3N3M2N2N1N4KeZm3\"}, {\"size\": [848, 480], \"counts\": \"`R`0a0ni02N1N2N110O01000O10O10000000O10O10000000000O0100000O1000O1000O100000000O10O1000000000O01000000000O10O1000000000000O10O1000O10O100000000O10O100000000O0100000000000O10O1000000000000O1000000000000O100000O10000000O10000000000O100000O100O010000000O1000O10O100000O100000000000O010000000000O01000000000000O0100000000O10O1000O1000O100000O10O10000000O100000000000O0100000000000000O10O1000O10O10000000O1000O1000O1000O10O1000O0100000000000000O100000000000000O100000O100000O1000000000000O10001O0O110O1N3N1O1O2M2N1O\\\\h\\\\5\"}, {\"size\": [848, 480], \"counts\": \"nb`5P1fh0m0SOk0UOj0[Of0B=N2O100O1000001O001O0000O100000000O1000000O2N2N1N2N3K5D=Aa0WOn0kNoVo5\"}, {\"size\": [848, 480], \"counts\": \"fd`73Wj0?E5J7K4K6fVOjNQi0\\\\1N1O102N1N2O1O0O10001N1000000O100000001O000000O2N1N21O00O101O0O2O0O2N1O2M3M3M3M4L4I7K6Ja^c3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"_Wh38Vj04N3lYOGja0;R]On0hb0TOQ]OS1mb0POm\\\\OT1Qc0QOi\\\\OR1Vc0ROS\\\\Oa1mc0bNn[O`1Rd0bNj[O`1Wd0aNf[O`1Zd0cNb[O]1_d0fN\\\\[O[1fd0hNT[OZ1md0kNlZOU1Ve0POcZOo0`e03fZOaN_e0Y1lZOUNae0e1j1H8E;H8I8J5L4K5L6J4L3M2O2LXgj7\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"m_=1\\\\j08K1N101O0O2N1O3K4G8YOg0N2O10000001O000000001O000000001N1000000000001O000000010O00000000001O00000000001O01O000000001O01O01O1O1O00100O1O10O00001O010O1O00001O0000001N1000000000000O100N2L5J5K5J6J7I6LfSV1?kkiN;Ff0[O3N1001O000001O00010O00001O01O0001O01O01O000010O000000010O01O0000001O0001O01O00001O01O01O00000000010O000010O00000010O00001O01O01O00000000000001O000000001O0000001O0000000000001O0O10001O1N1L4O2K4C`0TOkU98WjFa0C<@?K5M4N101N101O01O0001O00001O1O01O000001O0001O0001O10O000001O0001O01O0000010O00001O00010O0000O100N3E:K5N2N2N2O1O2O000O10001O000000001O0O100000001O00000000001O0000000000001O000000000O2O0000000000001N10001N100O1B?K4LhY80[fG100O1N200N2O1O1O1N2O1O1O010000M3B^S>KnlA9J4M3O010000O2O000000001N10001O0O1000000O2O00000000001N101N10000O101O001O001N1000000000oZ6\"}, {\"size\": [848, 480], \"counts\": \"gP`0l0ci09H8H3M0000001O0000O02O00O100000000000000O100000O1000000000O1000000000O10000000O100000000O1000O1000O10000000O100000O10000000O10O10000YOTWOJlh06TWOJlh05UWOKkh05UWOKkh04VWOLjh04WWOJjh06VWOJjh05WWOKih05WWOKih04YWOKfh05[WOKfh02\\\\WONdh01]WOOch0O_WO1ah0LbWO3_h0JdWO6\\\\h0IeWO7[h0FhWO:Vi0100N1N3M3N2N2N2N2N2M3N2M3M2O2O001000O101O0000010\\\\OPWOFPi06UWOIlh04WWOKkh0M[WO3bi0O00000N20O100O1O1L4000O2O001O001O0000O1000O010O01O1M3N3K4N1O2O1O10O1000000O2O001O001O0000001N1000001O00001N1000001O00001O0O101O0000001O0O10001N101O000O101O000000000O2O1N10010N1O2OW[e6\"}, {\"size\": [848, 480], \"counts\": \"Rjb6j0`i08A?H7M3M3M4L4M1N3M3N2M3N1O1M3O2M2N3M2N3L3M4M3N1N3M3M2N3N1N3M3M2O1O2N100O1O2O0O10000O2O00000000000000O101O001O1O1O1N2O1O1O1N101N1O1O1N2O002O0N2O1O1N2M3K5N2N2iNgXOVOZg0a0[YOQOgf0j0`YORObf0j0eYOPO^f0o0cYOoN^f0Q1eYOiN`f0T1_1M3M2O2K6N2M2O2M2O2M2M4N4KehX3\"}, {\"size\": [848, 480], \"counts\": \"^]>`0oi02N00100M3O10000O01000000O10000000O010000000000O0100000000O010000000000O10O100000000000O10O10000O10O1000O10O10000000000O100000O100000O10000000O10000000O100000000000O10O100000000000O010000000000O10000000O10O10O100000O10000000O10O100000O100000O1000000000O10O1000000000O1000O1000O0100000000O1000O1000000O010000000000O100000O100000O100000000000O0100000000O1000O1000O10000000O1000O01000000000000O0100000O10O1000000000O010000000000O100000O10O1000000O11OO10000O1000000000000O10O1000000001O001N101O1O2M4M1M`R`5\"}, {\"size\": [848, 480], \"counts\": \"oS^54ai0V1hNo0ROl0SOn0@?K5O1O1O2O000000000000000000000000O1000001N1O1O2N1M4L4K5^Oc0Ab0ROY1fNgkP6\"}, {\"size\": [848, 480], \"counts\": \"W]o7b0li04K5L4M2M4M3M4L3M100O1O1O10001O00000000000000001OO2O00000O1O1O2M2O1M4M2O10001O001O1O1O1O100M4L4K6JleT3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"]bf39Vj03M3PYOh0db0[OQ]OQ1jb0SOm\\\\OT1Rc0QOU\\\\OYOgNi1Te0QOQ\\\\Ob1mc0aNR\\\\O^1nc0dNn[O^1Rd0dNk[O]1Vd0dNf[O^1Zd0eNa[O\\\\1`d0gN[[O[1fd0hNU[OX1md0nNjZOS1Xe0P22QNjZO^N^e0\\\\1mZORN_e0g1l1H8E9J7H:I5K7J4L8G5L5IXQn7\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"\\\\e<5Yj04M2O1O0O2O0N3J6UOk0J5O1O100001O00000O101O00000000001O0O10000000001O0001O01O01O00000001O0O100000001O01O000000000010O0001O1O00100O1O001O10O0010O01O001O001O0000001O0000000O1000000O1N2L4M4H7K5K5I9KeSV1<nkiN?Ac0_O3N2N1001O01O01O0001O01O01O00010O00001O00010O00000010O0000010O000001O01O0001O0000001O1O01O01O000001O0000010O0001O0001O01O000000010O000000000001O000000001O0000001O00000000001O0000000O2O000N3L3J7G8Bb0\\\\O^[8McdGd0SOl0E;J5N2O1O2O1O001O00O2O0O1O100O1N200O2N1O10000O10001O000O101N100O100O2O001N10f0YO4M3L3N2N002N1N2N5HfYP11YfoN4L4J7B=K5O1000O11O00000000O2O00001O0O10000O101O0000000O10001M3J7G8Kc`j0L__UO6M3M300O0100O10001N10001O000000001N1000000O10001O0O011O001N101O0000001O0NdT<\"}, {\"size\": [848, 480], \"counts\": \"Xa=:Tj0a0A;E8H1O1N2O0000000000000O1000O10000000000O100000O10O10000000000000000000O1000O1000000O100000O1000O1000000O10O100000000000O100000O10ZOSWOImh06UWOIkh07UWOIkh06VWOIkh06VWOJjh06WWOIih06XWOJhh06XWOJhh05YWOKgh05YWOKgh04ZWOLfh03[WOLeh04]WOKch04^WOLch02^WONch0KbWO6_h0GcWO9`h0CaWO=Yi0000O0O2M3N2N2N2N2O0O2M3M3M3N1N3N2O1000O10001O000O2O0[OSWOHlh06XWOIih01[WOOgh0I_WO7]i001O000O0O20O1O1M3M3N23M1O00001O000O1000O010O100O001N3K4M3N1O20000000O100000000O2O001O00001O00000O2O001O00000O2O00001O0000001O0O101O00001O0O10001O000O2O000O2O0000000O101O1N2O00hjg6\"}, {\"size\": [848, 480], \"counts\": \"obV7T1Qi0`0I5J4N3L3M4J4N3K5G9I8K4M3K4K6N1O2O1N1O1O2N100O1O10000O2N101O0O101O0000000000000000010O0001O1O1O0010O000000000000000000000000O1000O10O10000SNiYOAWf0JeZOOZe0NlZOOUe0NQ[OOod0MY[OOfd00^[ONbd01`[OMbd0Oc[OO]d00e[ON\\\\d00h[OMZd00i[OOWd00l[OMUd01P\\\\OKQd04Q\\\\OIRd05Q\\\\OHPd06T\\\\OGnc07V\\\\ODlc0;V3N1O2M3N2N3NkSi2\"}, {\"size\": [848, 480], \"counts\": \"_h<>Pj04L200O001N2000O10O100000O1000O100000O100000O10O10000000O0100000000000O010000000O1000O10000000O10O1000O10O1000O1000O10000000000O1000O100000000000O100000000000O10O100000000000000O1000O1000O100000O10O10O1000000000O10O100000O1000O100000O100000O10000000O10000000O10O100000O0100000O010000000000O10O100000000O10O10000000000O10000000O10O100000000O10000000O10O1000000000000O01000000O01000O1000O010000000000O10000O0100000000O10000O011O000O01000000000O1000000000000O1000000000000O0100000000001O001N2O1O1N2O3L3Mol`5\"}, {\"size\": [848, 480], \"counts\": \"dX]5Z1Th0S1POP1QOn0E;O2N1O100000000O10001O00O1000000000000O2N100O1N3N1N2M4I7@a0_Od0ROW1lNg`R6\"}, {\"size\": [848, 480], \"counts\": \"WdR8d0ii06L3L3N3M2N2M3N2N2O2M4M2M3N1N10000O100000000O11OO10000010O0000010O01O0001N10001N2N2M3N2M3N2L3N4I7L5G`dP3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"jge34[j03hYO7ea0MZ]OU1ab0mNc\\\\OGZNc1Qe0kN^\\\\OJWNa1Ze0QOR\\\\Oc1mc0_NP\\\\Ob1Pd0aNl[O`1Td0bNi[O_1Xd0bNe[O^1\\\\d0eN_[O]1ad0gNZ[OY1hd0kNR[OV1od0mNlZOS1Ue0ROdZOo0^e01lZOaNWe0[1R[OVNYe0e1l1I8F=F8J8H;G5J7J5L4K3LZfo7\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"jj;8Wj03N1N2N101M2L5VOj0I6O1000000000000001O000000000O2O0000000O2O00000000010O0001O01O0000000000000O2O01O0000001OO2O01O001O001O10O01O1O1O0010O10O01O001O00001O001O0000001O00000000000O1N2L4K5I8K4J6J7Lee6GdZI7H5L4M2N3N100006J8FdZf0=mdYO`0@c0_O3M201N1001O010O0001O00000100O01O00001O0001O01O0001O01O0001O01O00001O01O000001O001O00001O01O01O000010O0O1010O00001O01O000001O01O01O0000000000000001O0000001O0000001O000000001O000O1000001N1O1N3G9D<^OoU9EYjFL_VOc0oh0g0D=E:O1O2O0O101O1O000001N1O1M3N2N2O1N2N3M2O1N2O1O1O1O101N100O2O0O1O1O100O2N100O100O101O0O10001N2O2M3N2N2N2M3N2N1N3L4Lgdn0OY[QO4J7I6M2O2O010O001O1O001O001O1O001O1O001O0001O1O1O000O2O00000O3N0O2N2LjWb0_Oih]O1D<MM1401O01000000O10001O00001N100000000O10001N1000001O0O011O001O1M3N10b^?\"}, {\"size\": [848, 480], \"counts\": \"gf<g0hi0=D9G3M00001N10000000000000000000000O010000000000O100000000000O1000O100000000000O1000O10000O100000O10O10000000000O010000000000000O100ZORWOJnh05TWOJkh07VWOHjh07WWOIih06XWOIih07WWOIih06XWOJhh06XWOJhh05YWOKgh05YWOKgh04[WOKeh04\\\\WOKeh04\\\\WOLdh03]WOMch00`WO0ah0IeWO7Yi010000O1O0N3N2M3N2N2O1N2N1O2M3M3O1M201O1O1001O000O101^OmVOESi08RWOFoh05VWOJkh00[WOOci01O0000000000O0O11N2O100O100001O0000000O1000O010O1O100O1O0K7K4O1O01000000O1000001N1000001O00001O000O2O00001O00001N1000001O0000001N10001O001O0O10001N10001O000O101O0000000O101N101O1O00hjg6\"}, {\"size\": [848, 480], \"counts\": \"Vl^7b0bi0>EROkVOT1Pi0:K4L4M2N3L3M4L3TOWNnXOl1mf0o0K5K4N2O1O2N1O1O1O2O0O1000000O2O000O10000O101O000000000001O0000100N101O10O000001OO1000000000000O10000000O0100000000000O010000001_MmYOc0Sf0[OSZO`0ne0\\\\OZZO`0fe0^O`ZO>`e0@X[OJid03][OHdd06a[OG_d07f[OF[d07m[OAUd0=Q\\\\O]ORd0`0P3N3M2N3N1N3M5Kak`2\"}, {\"size\": [848, 480], \"counts\": \"mm;b0mi02N1O1O001O10O100000O10O10000000000O010000000O10O1000O10000000O10O10000000000O010000000000O0100000O10O1000O1000O1000O10O100000000O1000O10000000000000O0100000000000O1000000000O1000O100000000O100000O10O1000O10000000O10O100000O1000O10000000O1000O10000000O100000O1000O100000O10O100000O01000000000O01000000000O0100000000O100000O10000000O100000000O100000O100000O100000O100000O10O1000O10O10000O100000O10O1000000000O010000000O1000O0100000000O100000000O1000000000000O1000O1000000000O10O11O001O001O1O1N2O1N3MRbb5\"}, {\"size\": [848, 480], \"counts\": \"cc[5Y1ng0\\\\1fNX1YOf0M4M2O100O1000010N100000000000O1000000O10000N3N1O2N1N3K4L5^Ob0]Oi0oNd1SNjVO:\\\\nT6\"}, {\"size\": [848, 480], \"counts\": \"hWY8>oi07I5M4K3M4M2N2N2N3N1N4L4M1O1N10001N100000O100000O1000000000000001O00000000001O001N1O2M3GTWOkNnh0R1UWOkNnh0S1;K4L8^Ofkj2\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Zmd36[4O^a04_]OR1[b0SO]]OT1`b0nNd\\\\OB^Nf1nd0jNaZOK`11cN`1[e0SOP\\\\O`1Pd0bNl[O`1Td0bNi[O_1Xd0cNd[O^1\\\\d0eN_[O\\\\1cd0gNX[OY1id0kNR[OV1od0mNlZOS1Ve0ROaZOP1`e01kZObNWe0Y1R[O^NSe0\\\\1U2I:D:H8I9J7H5L6J4K5L2N4Kj`P8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"]f71\\\\j09I10001O1N2N1O2J6SOl0M4N1000O101O000000000000001O0000001N100000001O00000000010O000000001O000000000000001O01O000000001O010O1O001O1O100O0010O0010O01O001O00001O0000001O0000000O1000000M3L4L4J6K6H7K6Lee6IbZI6J4M2N3L20100104KZUg01`jXO;G=C`0B2N10001O01O0001O0000010O000010O0000010O01O000001O01O0000010O000000010O001O00001O01O01O00000010O0001O01O00000001O01O0001O01O01O0000000001O01O0000O1000001O0000001O000000001O0000000O2O0O1O2N1M4D=YOZP:LloEd0ZOf0H8K4O101O00001O001O0000001O00000010O01O0000001O010O0000000001N100O2O0O100O100O2O000O100O101N10000O1O1N3L3N2M3O100oN_WO2ch0HfWO4Zh0IlWO3Uh0IRXO3Wi0O\\\\nQ11_QnN4E;D<00O10000000O10000000001O001O0O2O001N100000001N2O1GdVg0EmiXO2M3M3N2000O1000001O00000O10001O00000O101O000O100000001N101N101N10Rd>\"}, {\"size\": [848, 480], \"counts\": \"WW:e0ki0<C8I7I1O001O0000000O10O2OO1000000000000000O10O10000000O100000000000O100000O1000000000O10O100000000O1000O1000O1000000O1000O100000O100ZORWOJnh05TWOJlh06TWOJlh06TWOJlh05VWOJjh06VWOIkh06VWOJjh06VWOJjh05XWOJgh06ZWOJfh05[WOKfh03[WOMeh02\\\\WOMeh02\\\\WONdh0O_WO1ah0LbWO4_h0GeWO9[h0DhWO<Ui01O1O0N3O1N2N2N2N2N2N2M3N1O2M3N2N2O0011O001N1001O01]OPWODPi08TWOHmh02YWOMhh0HbWO8\\\\i0O000000O10000N2N10O110000001O0O110OO1000O10O010O1N2O1O1M3M3M201O1000000001N100000001N10001O0000001N10001O00001N1000001O0000001O0O101O000O2O00001O0O101N11O0001N10000O2O00001O0O2OhTk6\"}, {\"size\": [848, 480], \"counts\": \"cb`7:Qj08C;E;D;F:L5N1N2L4J7M2M3G:H7J6N2J7L3N2N3N100O101N100O100O100O10001N10000O10000001O001O001O1O01O01O1O0000001OO10010O0O1000000000000000000O100O1001O00001O001O1O001O1aMnYO=Sf0^OUZO>me0]OZZO<je0BZZO1Qf0LTZOHWf04nYODXf09nYOYO^f0c0i1M4M2M5L3L3O4Lke\\\\2\"}, {\"size\": [848, 480], \"counts\": \"c^93Zj0=D3M2M20100O10O10000000O10O10000O100000O10O1000000O010000000O100000O100000O100000O10O100000O1000000O010000000O01000000O10O100000O10000000O10O10000000O1000O1000000000000O11O00O01000000000O1000000000O01000O1000O1000000000O010000000O010000000000O10O1000000000O011O0000O10O1000000O010000000O10O1000000O0100000000000O01000000000O10O1000000000000O10O10O10000000000O010000000000O01000O10O100000O1000O1001N1000O1000O10O10000O100000000O10000000O010000000000O10000000000O1000O10O1000000000001O001O2N1N2O3L3M_Qe5\"}, {\"size\": [848, 480], \"counts\": \"aTY5418Wh0IkWOV2bf0b1ZOd0K6N1O2O0O1000001O0001OO1000000000O1000001N100O2M2O1N3L4K5[Og0ZOR1iNd1ZNadV6\"}, {\"size\": [848, 480], \"counts\": \"cW^8c0ji06J5L4L3N1O3M3M3M3N2M2O0O101O0O10001N100000000000O1000000000001O00010N1O2M2O2N1O2K6L3K5K7I6IW[h2\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"\\\\ca33[j03N3mXOQ1ab0POb\\\\OHZNd1od0eNc\\\\O1RNa1Ye0_NoZOEU1_2lc0oMhZOJY1V2oc0RNbZOO[1P2Sd0eNi[O]1Wd0eNe[O]1\\\\d0eN_[O]1bd0fNY[OZ1hd0kNR[OV1od0oNjZOP1Ye0SO_ZOP1ce00aZOjNae0P1mZOdNWe0X1S[OVN[e0a1Q2D<D:K9I4L6J4M3L4K3N5JYPS8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"ZQ69Vj03N1O001N2N2M2^Oc0_O`0O1O1001O0O1001O000001N10000000001O0000001N100001O0001O0001O000001N1000000000001O01O000000000010O01O1O1O1O1O10O01O0010O1O001O001O00001O0000001O000000000000000O2L3K5J6J6K5I8JV`7JQ`H6K4L4M2N2N2012N6HnZf0LPeYO;H?Ba0@5L2O0O20O001O000001O0001O01O01O0001O0001O01O000010O0000010O0001O01O0001O0000001O01O01O1O0000001O01O000010O0000010OO11O00001O01O01O00000000000001O000000001O0000001O00000O10001O00000O10001N1N3J5F;Aa0\\\\OdU91XjFl0ROg0I7L3O01L4L4N2M4N1N2N2O1N200N2O2N1O1O1O1NgWOPOVg0o0iXOSOXg0k0hXOWOWg0h0hXOZOXg0e0iXO[OWg0c0kXO]OUg0b0lXO^OTg0a0nXO_ORg0?PYOAof0=UYOAkf0=XYOBhf0<[YOCef0;_YOCbf0:aYOD`f07eYOIah02N0O1O1O2ON2O[n^4\"}, {\"size\": [848, 480], \"counts\": \"Xm6e0ji0:G7I7I3M0O2O00000000000O10000001N01000000000000000O100000O1000000000O1000000000O10O100000000000O010000000000O10O10000000O1000000O010[ORWOHnh06TWOJlh06TWOImh06UWOIkh06VWOJjh06VWOJjh05WWOKih05WWOKih04YWOJhh06XWOJhh05YWOKgh03[WOMeh02\\\\WONdh01]WOOch0N`WO2bh0FdWO:Yi0000O10O01N2M3N2N2N2O1N1O2M3L4N2N1O2N2O1O11N10001O0O10001\\\\OPWOFPi05WWOKhh01[WOOfh0JaWO5]i000000000O0O20O2N1O1O1O010000O1000000000O100O01000O1O1M3M2N3N200O1O02O0000000O10001O0O101O00001N1000001O00001O000O2O0000001O000O101O0000001O0O101O001O0O101O0O1001OO2O001N2N1000001Ogil6\"}, {\"size\": [848, 480], \"counts\": \"PYk7b0fi0<E8K5D<L4J6D<YOkMkXO\\\\2gf0n0G8L5M3M2O1O2N1O2O0O10001O0O10000O101O0001O00011N001O100O001O1O0001O01O000000000001O00000000000O1000000O10000O1O10O0100O1000000001O000010O00WMXZOi0je0QO_ZOi0de0mNlZOb0_e0YOhZO4ie0G\\\\ZO2je0K[ZOLme0La2K6HQ^Y2\"}, {\"size\": [848, 480], \"counts\": \"`T6a0li03O1O1O001O100000O10O100000O1000O1000O10000000000O0100000O10O10000000O10000000O1000O100000O01000000000O1000000O01000000O10O1000O100000O1000O1000O1000O1000O100000O101O00O100000O100000000000O10O10000000000O1000O1000O010000000O1000O1000O100000O100000O1000000000O100000O10000000O01000000O010000000O01000000O1000O100000O10O1000000000O010000000000O1000O1000O100000000O10O1000000000O010000O010000000O010000000O10000000O10O1000O100000000O1000000000000O10O10000000O100000000000O0100000000000001N2O1O1O1O1N2N3MQag5\"}, {\"size\": [848, 480], \"counts\": \"mcV5P2lf0f1ROm0K4O2N100O1001O01O00000000000O010001O0000000O1O1O2N1O2M2L5I7_Oe0QO\\\\1fNVoY6\"}, {\"size\": [848, 480], \"counts\": \"UZb8b0ii08J5L4M2M3M3M4N3L3M100O1O2O0O2O1O000000001O000000O100000O11O001O0O2O00001O1N1O2M3M3L4K5L4H9K6IV^c2\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"m^]32\\\\j04M3M3PZOHda0:Y]Oo0_b0SOaZODh12fN`1Pe0XOQ\\\\O_OeN^1Ze0UOn[Oa1Pd0aNm[Oa1Sd0bNi[O_1Xd0bNe[O_1[d0dNa[O\\\\1`d0iNZ[OX1gd0kNT[OU1nd0nNmZOS1Se0ROeZOP1]e0Q21nMmZOcNVe0X1R[O`NTe0Z1[[OeM_e0Q2f1F:H8K7J7H5K7J4L4L4LXZV8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"\\\\R15Yj05M1O0O2O001N1O3I5SOn0L4N1000O10001N10000000001O000000001N100000001O0001OO2O01O0000000001O0000000000001O000001O000000010O001O1O1O1O100O1O0010O1O00001O1O00001O00001O00000000000000000O1O1K6K4I7J6I7K6Jge6JaZI7I4L4M2M3O1002O4KZUg01`jXO;Eg0\\\\O7J2O001O01O0001O000010O000001O01O01O0000010O0001O0001O01O01O000010O000001O00000010O0001O001O00010O0000010O00000010O000001O0001O0001O000000000001O000000001O00001O0000000O10001O0000001N101O0N2N4E:\\\\O`P:^ORPFe0SOXOXWO_1bh0:L5N1O101O010O01O0010O0000000O2O0O2O000O10001O00001O0010O000001O0001O0001O0O1010O00000N2L4WOi0M4H8Ecdh2]OV\\\\WM5K5O1N11O00001N1M4LjnY1\"}, {\"size\": [848, 480], \"counts\": \"[c3<Qj0`0C7H9H4L1O000O100000000000000000O10O11O00O100000000000O10000000O1000O100000000000000O0100000000000O10O1000O10000000O010000O10000000000YOSWOKmh04TWOKlh06TWOJlh06UWOIkh07UWOIkh06VWOJjh06VWOJjh05XWOIih07WWOIih06XWOJhh04ZWOLfh03[WOMeh02\\\\WONdh00^WO0bh0LbWO4^h0HfWO7\\\\h0EgWO;Wi0000O1O1N2M3M3M201N2O1M3N2N2N1N3M3O1O100000O2O0000001\\\\OQWOEoh06VWOJkh00[WOOfh0HbWO8\\\\i0O0001O0000O0100O0O101O10O1000000000000000O010O100O1O1N2O1M2N3N2O10O1000000O101O0000001O0O1000001O000O2O0000001O001N1000001O0000001N100000001N10001O0O2O00001O000O2O0O2O010N1O2OghQ7\"}, {\"size\": [848, 480], \"counts\": \"a[o7<Pj07E9F:WOi0K5kN`NiXOP2nf0m0L5K5L3L5M2O1O2N1O2N10000O2O000O1000000O2O0000000001O010O001O002N010O001O0000000000000001N1O1000000O10000000000O1000000O10000000O10000000001O0000000O2O0TMZZOn0fe0kNlZOi0Ue0lNW[OQ1kd0kN\\\\[Oe0Re0VOT[O;Ze0_OoZO3[e0ImZOI^e03c2IQRR2\"}, {\"size\": [848, 480], \"counts\": \"bj24Zj0=D2N1M2O1010000O1000O1000000O0100000O10000000000O010000000O100000O1000O1000O100000O10000000O10O1000O100000O010000000000O01000000O10O100000O1000O1000O100000000O0100000000000000000O10O100000000000O10O10O2OO10000000O10O1000000O01000000000000O100000O1000O100000O10000000O100000O10O10000000O0100000O1000O10O10O10000000000O010000000000O10O1000000000000O100000O10O10000000O010000000O100O01000000O10O10000O010000000000O10O10000000O10000O100000000O10000000O10O10000000000000O0100000000000000O101O2N1O1O2M4L`ek5\"}, {\"size\": [848, 480], \"counts\": \"Q[S5e01^OPh01SXOW2`f0b1XOh0M2O2N1000000O101O01O000000000000000000000O100O2N1N3M3L3J7E?ROX1iNYY]6\"}, {\"size\": [848, 480], \"counts\": \"Y\\\\f8f0ei09I5L3N2M4M2N1O2N3M100O2N101O0O2O1O000O10000O10000000O10000O101O00000O100O2O1O1O0N3M3N2L5J4I9HY\\\\_2\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"]oZ31]j04M103mXOo0`b0TOX]OW1cb0kNT]O]1kb0fNhZODh1k1_c0QOW\\\\OW1ic0lNm[O[1Sd0gNi[O[1Wd0hNc[O[1]d0hN_[OX1cd0jNX[OX1hd0nNQ[OR1Qe0ROhZOo0Ze0UO[ZOQ1ee0NgZOeN\\\\e0U1P[ObNSe0Y1W[OXNSe0a1R2G>D:I7K8G7K4K5K4K7IXdY8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"j7:Uj02O001N101N2E;UOk0N1O1000000001O000000000O2O000000001O0000000O2O0001O000001O0001OO2O0000000000001O0000000001O00000010O01O001O2N100O1O0001O010O001O001O001O0000001O000000000000000O1M4J5M3J6K5J7G\\\\nV17`QiN:Fj0YO5L2N11O00000010O0000010O000010O0001O0000010O00000010O000010O0000010O00001O000001O01O1O00001O0000010O01O01O00010O000000010O0000000000001O000001O00000000000O20O000001O000O1000001O00000O101N1N3L3G:D?YOlU90niFk0\\\\Ob0J7L3N2011N3M101N1O1O1O01O01O01N10001O000O1O2M2O100O2O0N2O2N1O2O0000001O000001O01O00001O0001O0N2VOVXOiNog0R1j0L5E;I_f[4\"}, {\"size\": [848, 480], \"counts\": \"X9>Rj0:F8H8H7I1O0O101O00O10O1000000000000000O10O100000000000O100000000O0100000000000O10000000O10000000O100000O10O100000000O010000000O1000000[OQWOHPi07QWOIoh06RWOJnh05TWOJkh06VWOJjh06VWOJjh06VWOJjh05XWOIih07WWOIih07WWOIih06XWOJhh05YWOKgh04ZWOLfh03[WOMfh0O]WO1dh0J`WO5bh0GaWO9ah0CaWO=Yi00O100O1N2M2O2N2N2N2N1O2M4M1N3N2N2N1010000001O000O2O0\\\\OQWOHnh04XWOJih03YWOMhh0O[WO1ci0O0000000O10O100O1O1N2O0101N1000000000O100O10O10O10OO3L3N2M3N2O00100O0101O0O1000001O0O2O0000001O000O101O00001O000O101O0000001O0O101O00001O0O1000001O000O2O000O2O00001N101N2O0000XXT7\"}, {\"size\": [848, 480], \"counts\": \"San7;Rj06H7G8H8TOk0eN`N_YOh1\\\\f0Y1J5N3N1N3N2N1O1O2O0O2O0O101N10000O10001N1000000001O0001O0001O00100O00001O000000000000000000O2O000000000O100000O100000O100000000000000001O0O10001O00000UM^ZOg0ce0SOeZOk0\\\\e0POlZOj0Ve0QOR[O>]e0[OlZO2de0KaZOMee00`ZOCle08Y2M4KYlR2\"}, {\"size\": [848, 480], \"counts\": \"o:c0li01O0O2O1O1O10O10000O010000000O1000O10O1000000000O10O10000000O0100000000O01000000000O1000O100000O100000O100O10O1000000O1000O100000O10O10000000O010000000O10000000O0100000000000000O100000O10000000O1000O10000000O1000O10O100000000O010000000O10O100000000000O100000O100000O10000000O1000O1000O1000O100000O01000O1000O100000O1000O1000000000O1000O100000000O100000O010000000O10O1000000000O010O100000O10O100000O10O1000000000O0100000O10000000000O100000000O10O010000000000000000000000O01000000000000001N2O2N002M3M4K`Zm5\"}, {\"size\": [848, 480], \"counts\": \"fjP581S1cg0e1hNV1^Oa0M2O100O2O01OO100000001O00O1000000O10001O0O100O2N1O2M3L3K7]OhYO]Lif0k2T1iNd1]Nem^6\"}, {\"size\": [848, 480], \"counts\": \"^\\\\f8i0di07I5L3M3M3N1O2O1N2N1O2N101N100O2O0O101N1000000O1000O10001O00O10O2O0O2N101N2O10OO2N2M3N3J5K7E:Jm[_2\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"m_X36Xj06K6oYO_Oia0j0m\\\\O=lb0GP\\\\OVOoN_1nd0\\\\Oo[O\\\\OiN_1We0VOn[O`1Rd0bNk[O_1Ud0bNi[O_1Wd0dNf[O\\\\1[d0fN`[O\\\\1`d0hNZ[OZ1gd0hNV[OW1kd0nNnZOS1Te0POfZOR1Ze0Q22PNhZOdN[e0V1oZObNUe0W1[[ORNSe0h1Q2D;I7K6J:F6K5K4L3M2N2O2Lk^Z8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"i7=Sj00O2M3]Oc0^Ob0M3O00O1000001N1000000000001O0000001N1001O000001O0O1001O000010O000O101O000000000000001O0001O0000000010O01O1O1O100O2N01O01O01O001O001O00001O00001O00000000000000000O1M3K5J6J6K6H8IiSV19PliN9G>Ca0A2O0000001O010O0000001O000100O000001O001O01O0001O01O0001O01O000001O01O01O0000001O01O01O00001O0001O01O0001O01O00010O0000001O01O0001O00000001O000000000000001O0000001O00000O10001O00000O101O0O1N3I7^Ob0\\\\Ono9EfVEd0mh0i0A`0J5N3O000O2O0010O000000000O1N2M4L3N2O1O1O1O1N2O1O1O1O2N1O1O2N1O1O1O1O1N3N1O1N2O1N2O2N1O100O1O2N1O1O100O1O2O000O1000001N100O1O2O000O2O00000O100O10001N1OgYj3\"}, {\"size\": [848, 480], \"counts\": \"W9^1Ri01O1O1O001O00O100000O1000O100000000000O10000000O100000000000O10O1000000O11O00O1000O10000000O1000O10O100000000O010000000O1000000O100ZORWOJnh05SWOKmh05TWOJlh06TWOJkh07UWOIkh06VWOIkh06VWOJjh06WWOIih07WWOIih06XWOJhh05YWOKgh04ZWOLfh03[WOLfh02\\\\WONdh0N`WO2`h0JdWO6[i0000O100O1N2M3M2O2N2O1N2M3N1O2M3N2N2N2O10O011O001O000O2^OnVODRi08SWOGnh04VWOLkh0N[WO2bi0O00000000000O0001O1O001O1000000000000000O0100O100O00100N2L4K5O100O10O101O0O100000001N10001O00001O0O101O00001O0O10001O0000001O0O101O0000001N10000O2O00001O000O101O0O101O1N101OXbW7\"}, {\"size\": [848, 480], \"counts\": \"YYk7:mi0b0QNWO`YOP1Rf0HVYOe0bf0i1L4M2O1N3L3O2N2N2N1O2O0O100O2O0O10001O0000000O101O01O001O1O010O1O001O0010O00000000000000000000000000000O10000O10O10000000000O1000001N10000O100O2^MnYOd0Rf0YOSZOd0oe0TO[ZOKcf01fYO@df0=j1L4L4K5L5JcR[2\"}, {\"size\": [848, 480], \"counts\": \"o:a0ki04M210O10000000O100000O1000O100000000O10O1000000000O1000O100000O1000O1000O1000000000O0100000O1000000O010000000O0100000000O10O100000O10O10000000O100000O01000000000000000000O10000000O100000O1000000O01000000O1000O1000000000O0100000000O10000000O10O10000000O100000O10000000O10O100000O10O100000O10O100000O0100000000O10O10000000000O01000000000000O10O100000O100000O10O100000O10O10O100000O1000O1000O010000000000O01000000O100000000O1000000O1000O10O100000000000000000000O1000O100000000O1001O1O001N2O1O1N3M2N4LoTn5\"}, {\"size\": [848, 480], \"counts\": \"Z\\\\n48Yh0[2\\\\NY1WOi0L3O2O000O10001O000000000000000000O100000001N1O1O2M2O2M3L3J:SOQ1QOf1mMnVO5RVb6\"}, {\"size\": [848, 480], \"counts\": \"he`8b0hi07L4L5L3M3O1N3M3M2O0O2O1N101O1N2O1O1O0O10010N1000000000O100000001O0O2O1N1O2L4M3M3M3M4L5H7G=@Tme2\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"]PV33\\\\j07J2M3mXO3_M@^e0d0UZO^O_2[1Sc0@d\\\\Oh0Zc0YOT\\\\OROfNh1Ve0XOk[O^1Td0cNj[O^1Vd0eNe[O]1[d0eNa[O]1_d0gN[[OZ1gd0jNS[OW1md0lNoZOT1Se0oNhZOR1Xe0SO_ZOP1ce0OdZOiN^e0Q1oZOeNUe0V1T[O`NRe0V1[2F9I8J6K8I6J6J6J3M2N3M4KXn\\\\8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"h7>Qj02H9SOl0L4O0O10O1000001N1000000000001O0000001N1O11O0001O00000O11O1O01O000000001O000O1001O000001O000001O0000010O1O1O002N10O01O10O0010O0001O001O00001N10001O000000000000O11M2N2K5J6J6K6I7JjSV11UliN<E9Ge0^O6K1O00001O0001O01O00010O00000010O000001O00010O000001O01O0001O0001O01O01O0000001O01O01O00001O0010O000001O01O0001O01O0001O000010O0000000000001O0000000000001O0000001O000000000000001N10001N100N3L4_Ob0XOdP:HaoEk0WOUOXWO]1_h0>L5N1O101O0000001O010O0000001O00010O00001O00001O01O01O00000010O000001O01O0001O00010O00O10000O101N1I7J6M3L4N3N10000O101O0O1N2\\\\Oe0J5N2N3N1N2O1O100O1O2M20000OXkh01gTWO8Hf0[O1O00O1000001O001N101O000O101O0000000O101O00000000001N1000001N100001O01N001O1O1N2N2N3M2M3N[fi1\"}, {\"size\": [848, 480], \"counts\": \"W9b1nh00000000000O0100000000000O1000O100000O10000000000000O010000000000000000O10O1000000000O10O10000000O1000O100000O1000000O100000000YORWOKnh06SWOImh06TWOJlh06UWOIkh07UWOIkh06VWOJjh06VWOJjh05XWOIih07WWOIih06XWOJhh05YWOKgh04ZWOLfh03[WOMeh02\\\\WONdh0O_WO0bh0LbWO4_h0GeWO9[h0DhWO<Vi00O100N2N2L4N1O2N2O1M3N2M3N1O2M3N2O10O1000000O110O0^OQWOBQi0:RWOFnh07UWOIlh01ZWONgh0IaWO6]i0100O0O1000000O000O2O00100001O00000000000O0100O100O0O2O1O1M3L4N20O10O1001O0O1000001O0O10001O00001N1000001O000O101O00001O000O101O0000001N10001O000O101N11O01O0O101O0O10001O1N2Oh\\\\X7\"}, {\"size\": [848, 480], \"counts\": \"XQh78ci0i0VOg0L4dNlNlXOc1jf0X1L3N2M2O101N10001N1000001O000O2O00000010O00001O1O1O010O001O1O000001O00000000000000000O1000000O100O10000000000000000000O2O001O1N2bMPZO9Qf0BUZO=le0^OYZOa0ge0[O]ZOd0ee0WO`ZOh0`e0UOcZOj0^e0SOeZOm0\\\\e0POS[Ob0od0ZOe[O5[d0Ho[O0Td0JP]c2\"}, {\"size\": [848, 480], \"counts\": \"i:g0hi00100000O100000O1000O100000O1000000000O010000000O01000000000000O010000000O1000O100000O1000O1000000O10O10000000O01000000O10O100000O1000O100000O10000000O010000000000000000O1000O1001O00O10O10000000O0100000O1000O1000000O0100000000000O100000O10O10000000O10O100000000000O010000000O010000000O01000000O01000000000O1000O1000000O10O1000000000000O1000O10O1000000000O010000000O10O10O1000O100000O1000O10O100000000O010000O10000000000O1000000O0100000O100000000000000O1000O1000000000000O010001O1O1O001O1N3N4K1OPjo5\"}, {\"size\": [848, 480], \"counts\": \"]`m4o1Tg0_1hNX1L2O2N100000001O0000000000000O1000O100O101O0O101N1N3N1N3L5G;XOQ1hNc1ZNZRc6\"}, {\"size\": [848, 480], \"counts\": \"diV82Vj0c0B6K4M3L2O2N2N101N2N3M2O2M2O0O2O1N2O1O1N2O0000O1000000O100O1O2O0O101O1N101N1N3L4M3N3M4K5FncP3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"m`S37Xj04M3lUOFki0d0K4M1nXO:Xc0G_\\\\Oh0Yc0[Oc\\\\Oh0\\\\c0YO`\\\\Ok0_c0WOo[OY1Qd0iNi[O[1Wd0hNd[OZ1]d0hN^[OZ1bd0iNY[OX1id0kNR[OV1nd0oNlZOQ1Ve0ROaZOR1ae01\\\\ZOnNee0j0nZOhNVe0S1Q[OfNTe0S1[[OVNUe0^1U2G;I7J7I7J4L5K4M2M4Li]_8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"h7>Pj03C?UOi0N100000O1000001N1000000000001O0000001N100000000010O00O1001O01O00000000001N10000001O0001O000001O000000100O1O002N1O10O010O0010O01O0O110O000O2O000000000000000000000M3M3K5I7K6H8I7Kfe6K`ZI6J4L4M2M3O1001O109EbZf0;QeYO7I=Ca0B1O1O00001O0001O01O0000010O000010O0001O000010O000000010O000010O00000010O000001O000010O0001O001O0001O01O0000010O00000010O0001O00000001O00000000000000001O00001O0000000000001O00000O101O000O1O2N1M4^Oe0UOXP:7coEg0XOg0J5O2O0O10001O00001O010O000000001O01O01O001O000000O2N1N2L4L4N3N1N2O1N2O2N100O100N2N3J5K5M3N2O1O2N1N2O1O100O1O101N1O1O100O2O0O10001O0000001N11O00000000000001O01O00001O1O1O002O0O2N2O2M3M6J7I1O1OO2O000000000000000O10001O0000000000O1000O10001O000O100000N21O1N100O2O001O0O2O1N101O2N3L3N2N1N3N2M4KnnQ2\"}, {\"size\": [848, 480], \"counts\": \"W9b1nh00000000000O0100000000000O10O10000000O100000O100000O10000000000000O10O1000000000O10O1000000000000O10O100000O1000000O1000O1000O1ZORWOJnh06SWOImh06TWOJlh06UWOIkh07UWOIkh06VWOJjh06VWOJjh05WWOJjh06WWOIih06XWOJhh05YWOKgh04ZWOLfh02\\\\WONdh01]WONdh0O_WO1ah0KcWO5^h0GeWO9Yi0000O100O1M3L4N1O2N2N2M3N2M2O2N2N2M300O010001N1000001]OPWODPi0:SWOEnh06VWOJkh00[WONdi000100N1000000O1O000O101O100001N20O00000000O010O01O1O1O1O1M3L4M2010000000O101O000O10001O00001N1000001O00001N10001O0000001O0O10001O000O2O00001O000O101O0O110O0O10001N10001O0O3N0Oi\\\\X7\"}, {\"size\": [848, 480], \"counts\": \"fP^7h0bi0<H5K4K6L3M3M2N3N3L3N3M2N3M2O2O13N0ON2O0O3M0000001O0O1N10010O001O001O000000000000000O100O10000O1O001N2O100N2O010O1O1O1O10O100O101O0O10001N100oMeXOWOO[1^g0QO]YOk0ef0nNbYOP1Ph0N2O0O10000O10O10N10100O1O1O1O1O1N3O0O2M3N3J9FZS_2\"}, {\"size\": [848, 480], \"counts\": \"h:h0hi000O1000O100000O1000O10000000O1000O1000O10000000O010000000000O10O100000O100000O1000O1000O100000000O0100000O10O100000000O0100000O100000O1000O10000000O01000000000000000000O01000000000O100000O1000O1000O1000O10000000O010000000000O10O11O00O10O100000O1000O100000000000O0100000O10O10000000O01000O10O1000000000O01000000000O1000O100000000000O01000000O100000O10O1000000000O01000O1000O100000O10O1000O1000000O10O10000O100000000O10O100000O10000O1000000000000O10000000O1000O100001OO010000001O1O1O1O1N2O2M4L`dP6\"}, {\"size\": [848, 480], \"counts\": \"]_m4P3Wf0Z1D<M3N10001O0000000O20O0000O100000O10000O101O0O1O2N1O2N2M3K5E`0ROV1kNXmc6\"}, {\"size\": [848, 480], \"counts\": \"iWf79Sj0;F6K4M2N2N2M4M3M3N1N101N1O2N2O0O2O2N1N2O001O00000000O1O10000O1O101N1O101N1O2N2O1N1O2N3L4M3L5Fe`_3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"mUU35Zj06I7lXOFhc0c0h[Ob0Yc0@_\\\\Om0[c0WO_\\\\Ol0`c0VO\\\\\\\\Om0cc0UOl[OZ1Td0hNg[O[1Yd0hNa[O[1_d0hN\\\\[OZ1dd0jNW[OV1kd0mNP[OT1Pe0QOhZOQ1Ze0Q22nMgZOjN[e0P1R[OfNQe0U1X[O]NRe0\\\\1W2G:E<H8I7J6J5J5L4L6JXX`8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"h7>Pj02H9WOj0I6O0O10O2O0O1000000000001O000O100000001O000000001O00000001O01O01O00O100O2O00000001O0001O0001O00000000100O1O001O1O2OO01O01O1O010N1010O01O0O10001O0000000O10000001OO1N2K5J6I7J7H9JU`7KP`H6K5L2M3N20010O08GnZf0FTeYOd0A8Ie0\\\\O7J2O1O00001O0001O01O0000000010O001O01O000010O00010O000000010O00000010O0000001O00010O0000001O001O01O01O00000010O0001O01O0001O000001O01O0000000001O00000000001O0O10001O0000000000001O0O10000O2O0O1H9Ccj:QOjUEW1XO`0J401O01O1O1O1N2O1O2O0O100O1001O011N4L:F001O010O001O00000010O000001O1O0001O0001O0001O00000000001N1J6I7K5L4O1O2O00000O101N1000001O0N2I7L4N2N3L3M3M3M4M3JfU4O]jK4K5M2M3M3N2N2O1L4N2N101O100001O00000000000O10001O000O011O000O10000000001O0O01001O00000O10000O1000001O0O2O3M1O1O1N3N2N0O1001N001N2O1O1O010000000O11O0O10O11N2O000O10001O000000000O2O0K5MknY1\"}, {\"size\": [848, 480], \"counts\": \"V9b1nh000000000000O10O10000000O1000O100000000O10O1000000000O100001O00O010000000000000O0100000O10000000O0100000000O10000000O11N0100000O1[ORWOHnh07SWOImh06UWOIkh07VWOHjh07WWOIih07WWOIih06XWOJgh07YWOHhh07YWOIgh06[WOIeh06\\\\WOJeh04\\\\WOLdh03]WOMch01_WOOah0McWO3]i0000O1O1O1M2O2N2N2N1O3M2N2M2O2M3N1N3O1O1O10O10001O001O0\\\\OQWOGPi05UWOHlh07VWOHkh03YWOMih0I`WO6]i0001O0000000O001O001N200O10O101O000000000O10O10O01O1O1O1N1N3L4N20000000O10000000001N1000001O00001N10001O0000001O000O2O000000001O0O101O00001O000O101N100000001O001N10001O0O2O1Oi\\\\X7\"}, {\"size\": [848, 480], \"counts\": \"gUo63Qj0?J5I7M2O1O00100000O2O1N:G3L2O1N2O001N100O100O0010O010O0000100O000010O01O001O00001O000O100N3N1O1O2M2M3kN]O`WOOd0g0ig0EkWOe0Th0\\\\OeWOk0[h0e001O0000001O00001O0O11O000000001O0kN\\\\XO^Odg0`0`XO^O`g0`0cXO_O^g0?cXOA]g0>cXOC]g0=cXOC^g0;cXOE]g0;bXOF^g09bXOH_g07aXOI_g06bXOJ_g05`XOKag05^XOLbg04^XOLcg03\\\\XOMfg02ZXONfg02YXOOgg01YXONig01WXOOjg00UXO1kg0OUXO0mg0OSXO0og0NRXO1og0OQXO0Qh0OoWO0Sh0NnWO1Sh0OmWO0Vh0NjWO0Xh00iWONYh00hWON]h0N[Ri2\"}, {\"size\": [848, 480], \"counts\": \"g:h0hi000000O100000O10O010000000000O10O1000O100000O1000000000O100000000O100000O1000O100000O100O010000000O0100000O1000O100O100000O1000O10000000O10O100000000000000O100000000000O10O10000000000O01000000O100000O1000O10O1000000O1000O100000O10000000O1000O10000000O1000O100000O01000O1000O10O1000O100000O1000O1000000000000O1000O100000000000O1000O10O100000000O10O10000000O100000O10O10O100000O10O100000000O10O10O1000000O010000O1000000O1000000O1000O1000O1000000000000000000O10O1000001OO1000O1001O1O1O001N3N1N5KadP6\"}, {\"size\": [848, 480], \"counts\": \"Wam4n0`h0Z1[M^2M3O1N1000001O0O100001OO100000000000O10001O000O2N1O2M2N3L4J6D?SO]1]NmRc6\"}, {\"size\": [848, 480], \"counts\": \"PdQ76Vj08I6K4L3N2M4M2N3M2N2N2N2O2M2N00100O10000O2O00000O2OO11O1O1O000001N101O001O0O2N102M2M2M5L3N3L5K>]OfYS4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"lUU3;Sj09H5L3eXO3jM[Obe0d0^\\\\Ol0[c0WOa\\\\Ol0^c0UO]\\\\OP1bc0ROW\\\\OS1hc0POm[OY1Sd0iNg[O[1Yd0hNb[OZ1_d0iN][OW1cd0lNY[OT1id0QOoZOP1Re0TOhZOn0Ye0R23nMnZOcNTe0X1T[ObNPe0W1a[OPNmd0g1T2G;H8I9G<D;FShb8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"g7>Rj01N2M2J8ROl0N3OO1O10000O1000001O00000000000O2O0000000000001O000000010O0000001O000O1000000001O01O000001O0001O01O001O1O1O100O001O0010O001O1O0010O01O00001N10001O000000O101O00O1N2L4I7J6K6I7IY`7GR`H7J4M2M3N201O0001Na0^O`Zf0=QeYO;E`0@a0B3N0000001O01O000001O0001O01O0001O01O00010O000010O000001O0001O00010O0000000001O010O00001O000010O0001O000010O0001O01O0001O000001O01O0000000001N100001O00000001N100010O0000O10001O0O10001O0O100N3J7@`0XOYP:MZVEMZi0Q1SOl0N1O2N1000001O00001O001O00001O01O000000010O000001O001O01OO11O00100O1O1O100O1O01O01O001O001O0000000K6J5H9K5M3N2O1O3L4M3M3M3M3M3M8H4Lib6;k\\\\I7J6J2cVOVOPi0W1NO1000010N10000000000000000O101O00001O000000000O10001O0O100000000O10000000001N2O1O00001O0O100O10001O00000O2O000000001O000O10001O000O100000O1000O1000O1000O2O000O10001N10001O000O101O00000N2O2K\\\\TY1\"}, {\"size\": [848, 480], \"counts\": \"U9a1oh00000001N1000000000O10O100000000000O1000O10000000O100000000000000O01000O11O00O10000O01000000000O1000000000O1000O1000000000000O10O1000YOUWOIkh06WWOHjh07WWOIih07WWOIih07WWOIih06YWOIgh06ZWOJfh06ZWOJfh05[WOKeh04\\\\WOLdh03]WOMch01_WOOah00`WO0`h0KeWO4]h0HfWO8Yi00O100O1O0N3M3M3O1N2N1O2M3N2N1N4M2O001N20O10001O00001O0^OnVOFSi04TWOJlh04WWOJlh0J_WO5^i001O000000O010O1O1N2O1O10O011O0000001OO0100000O001O100O1N1M4L4O100O1000O10000000001O0O10001O00001O000O2O0000001O00001N1000001O00000O2O00001O0O101O0000001O0O10001N101O001O0O2M\\\\bW7\"}, {\"size\": [848, 480], \"counts\": \"hhd77Uj05L4N1N3N1O2M2O2M3N2N3M2N4M1N3M3[XOeNQf0^1jYOfNSf0]1hYOgNWf0[1cYOiN]f0Y1XYOQOgf0Q1nXOXOSg0h0jXOZOVg0P20000000O101O000O1O2O0[OiXOPNYg0m1mXOmMUg0o1h0K6M3L3N3M2N201N2N1O2O0O2O1N1N3N1O2M3N1O2N2N2N1O2N2N2N2N3M3L3LX]P3\"}, {\"size\": [848, 480], \"counts\": \"e:j0fi00O11N1000000O10O100000O100000000O100000O1000O10000000O10O10000000O1000O100000O1000O100000O10O10000000O01000000O1000O1000O1000000O10O10000000000O1001N01000000000000000O010000000O1000O1000000000O010000000O1000000O0100000O10000000O100000O01000000000O10O1000000O010000O10O10000000O10O10000000O10O100000000000O100000000000000O1000O010000000000O10O100000O1000O1000O10O100000O10O100000000O10O10O10000O10O100000O010000O10000O1000000000O0100000000000000O1001O0000O1000O10001OO100000O11O001O1O0O2O1N3M2O2Mcon5\"}, {\"size\": [848, 480], \"counts\": \"m[n4812ag0HhXO2M_2je0n1H7M2O100O2O000000000000001O0000O1000000000001O0N3N1N3M2N3K5H9SOR1nNjXb6\"}, {\"size\": [848, 480], \"counts\": \"eof69Wj03N2M1N3N1O0O2N2G\\\\OaVOh0[i08O10001O1O2N001O1N4M0N31N0001I8M2O2N00000O1001O0YN_WO_1bh0`N]WOa1ih001N1O10O0M32N2N1N3N2L4L4N2N4K5Am^[4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"mUU34Yj09I6J4M4lXOMaMBae0d0a\\\\Oj0Yc0YOb\\\\Ol0\\\\c0UO]\\\\OQ1cc0QOP\\\\OZ1Pd0gNk[O]1Ud0eNg[O]1Yd0fNc[O[1]d0hN_[OY1ad0lNX[OU1jd0mNR[OT1od0POjZOQ1We0S22SNaZOfNae0Q1R[ObNQe0Z1W[O[NQe0Z1Y2E=H8I8I:D<Egma8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"g7=Rj0101N2O0N3M2YOg0F:O1O1001O0O10000000001O000000001O00000O1000010O000000001O000000001O0O100000000010O0000001O01O01O00001O1O100O1O1O001O01O001O001O001O001O00001O001O0001O00000000O1M3M3K5L4K6H7I8IU`7On_H7K2N3M2N2N30O4M8DjZf0MTeYOe0_O>Bc0A2M101O01O001O0001O0001O0001O01O01O00000010O0001O01O000001O01O01O000000010O000000010O00001O001O01O01O01O01O00001O000010O000001O0001O0000000000001O0000000000001O001O0000000O2O000000001O0O101M3K4F;\\\\Oi0[OPU91YQF>Xi0c0K2N1O2O0N2O2L3L4L5M2N2N2M4L3N2O2O0O1010O00000001O01O0001O000010O001O0010O01O010O0000010O1O1O1O1O001L4H7K6J7K4N2N2O1O2N1O2N2N1O000000O001A?O1000000000000000O2O00O11N1000001O000O100000001O000O1000001O00000O100000000O2O00000O1000000000001O1N1000001N2O00000O101O000O101O0000001O0O10001O000000000O10000000O1000O10000O10000O2O00000O101O001O000000001N100O1N2N[jU1\"}, {\"size\": [848, 480], \"counts\": \"T9o0ai03L4M8H3M001O1N2O00O1000000000000O10000000O0100000000O100000000000000O010000000O100000000000O010000000000O100000O1000O100000000000O10O1WOYWOIgh07YWOIgh07YWOIgh07YWOIgh06ZWOJfh05[WOKeh05[WOJfh06ZWOJfh06ZWOJfh06ZWOJfh05[WOKeh04\\\\WOLdh02^WOMch00`WO0ah0JdWO6[i000O010000N2M3K5O1N2O0O2N2N2N2M3N1N3O1N2O00110O01N10001O001XOTWOJlh03XWOLkh0J]WO5`i0O000O100000O1O001N2O1O100000O101O0000000O0100O10O01O1N2M3N2M201O1O100000O1000001O000000001O0O10001O001N10001O000O10001O00001N10001O0000001N100000001O0O101O000O2O000O3M2N\\\\bW7\"}, {\"size\": [848, 480], \"counts\": \"dee77Xj02N2N2O2N1O1O1N4M2N4L4K101O1O3cWOmNWg0V1cXOnN\\\\g0X1\\\\XOjNdg0R2O00000000[OnWOlNRh0m0YXOoNgg0m0`XOoNbg0P1aXOmN_g0R1eXOkN[g0S1S1M2O2N1O2O1O0O2N2N1O2M3M2N3M3M2M4MRZ8OleG7M1O1N2O1O0O1O2O00O2O2M3M4LTPm2\"}, {\"size\": [848, 480], \"counts\": \"g:g0ii0000O1N20O101O000O1000O100000O10O1000O10000000O10O10000000000O01000000O1000O10O100000O100000000O10O1000O0100000O1000000000000O1000O100000000000O1000O10000000O10O10000000O01000000000O100000O1000000O0100000000O10000O01000000000O100000O100000O010000000O10O1000O10O1000O10000000O10O10000000O100000O100000000000000O10O100000O1000000000O01000000000O01000O1000O10000000O10O10000000O01000000000O1O0100000O10O100000O10O100O100000000000000O10000000O100000O1000000000000O100001O00O100000000000001N101O2M2O1N3MTUn5\"}, {\"size\": [848, 480], \"counts\": \"bPP5R1Yh0oNkWOW2df0b1TOk0L3O101N100000001O0000001N1000O10000O11O01O001M2O1N3N2L4J6G:YOl0YOS1VNSi_6\"}, {\"size\": [848, 480], \"counts\": \"dWf66Uj09G7K4K5K6J4N3N2L3O14M01N1O001O1O1O1O0O200O1N100000001O100O01O0O1001O01N102L3N101O02O00N3DVWOmNmh0n0`0J6K4OO@_VO1`i0LQW\\\\4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"ljV33Zj0:H6I5M4iYO^OWb0e0g\\\\Oa0Sc0AQ\\\\OYOhN]1Ue0[Oo[O^1Pd0dNl[O^1Td0cNj[O^1Vd0cNh[O^1Wd0fNe[O[1[d0hN`[OZ1ad0jNY[OW1gd0lNU[OT1ld0QOmZOP1Ue0TOdZOm0]e0S22jMR[OcNRe0X1V[O^NRe0W1Z2D?G9J9D;F;[OoX`8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"g7;Tj02O000O101O1N1M4A>]Oc0M4O00O100O2O00001O0000000000001O0000000000001O0000001O01O00000001N10000O11O0001O000001O01O000001O001O1O100O1O1O001O01O001O0010O01O1O00001O00001O000O011O00O10O2N1N2M3I7L4H9I7JV`7KP`H5M3L4M2N3N20O1N8ImZf0ETeYOg0_O<Dd0_O3N1O00010O00001O0001O000001O01O01O01O0001O0000010O000010O0001O000010O00000001O01O000001O000010O00010O0001O0010O0001O00000010O00000000001O0001O0000000000O2O0000001O000000001O00001O0O2O1N2O0O2L4E?kNeVONgi:=koE`0H6N3N1O1N3D;N2M4L3N2N3N100O101O0000010O00001O000001O01O0000001O010O0000000010O00000010O0000000000O2K4I7J6L4N2O2O000000001O000000001O00000000000O2O0001OO2O0O10000000001O0O10000000001O000O101O0000000O1000000O2O000000000O2O000000000O10001O001N101O000O101O00001N10000000001O0O10001O001N1000000000000O10O1000O10000O10000000000O2O000000001O0O1O2O0000001O0O1L4NkZS1\"}, {\"size\": [848, 480], \"counts\": \"U9a0mi04M5XVOXO_i0U1H9G2N1O1O1O000000O10000000000000000O010000000O1000000000000O10000000000O10O1000O1000000000000O100000O1000O10000000O1000O10000000000XORWONmh02VWOLjh03YWOKgh04ZWOLfh04[WOJfh06ZWOJfh07YWOIgh07ZWOHfh07[WOIeh07[WOHfh07[WOIeh06\\\\WOJch07]WOIch05_WOKah03aWOM_h00dWOO]h0OeWO1[h0KiWO5Yi00O100N2N2L3O2O1N2N2M3M3M2O2N2N2N2N102OO1000001O0O110ZORWOHnh06UWOIlh04WWOKjh0M^WO2fh0E_WO:]i0O001OO01000O1O0O2O1O100000O10000000000O010000O001O1N2M3N2M3O1O001000000001O0O100000001O00000O2O000000001N101O00001O00001N10001O00001O0O1000001O0O10001O0000001N101O0O3M2NlRU7\"}, {\"size\": [848, 480], \"counts\": \"j\\\\k75Xj05M3M3L5L3jWOZO^f0h0`YOXO_f0j0_YOXOaf0h0^YOXObf0i0]YOXObf0i0\\\\YOXOdf0h0[YOYOef0h0TYO_Okf0a0RYOBnf0?oXODPg0<oXOEPg0=lXOFTg0<fXOHZg0<XXONgg0^101O0O1000O100000000lNZXO]Ogg0;gXO_OYg0?nXO[OSg0d0SYOVOof0h0YYOoNif0Q1[1O2O000O101O001N101N2N2M2O2N2N1O2M3N2M4LeaT3\"}, {\"size\": [848, 480], \"counts\": \"f:h0gi010000O01000000O100000000O100000O10O10000000O01000000000O01000000000O10O1000O1000O10000O1000O10O10000000O10O100000000O0100000000000000000O1000000000O1000O1000O1000O100000O100000O100000000O010000O10000000O100000O0100000000O10000000O1000O10O100000O10O1000O010000000O0100000000000O1000O10000000O100000O10000000O100000000O10000000000O010000000000O0100000O10O1000000000O0100000000O0100000000O10O10O1000O10O100O10O10O10O10001O00O01000000000000O1000000000000000000O100000000000O10O100000000O101O001O1O1O1N2O2M3Mcek5\"}, {\"size\": [848, 480], \"counts\": \"__R5i1eg0T1YNf1L4N1O101O00000O2O00000000000000O10000O1000001N1N3N1N3K5J6C?]Od0kNg1PNVT^6\"}, {\"size\": [848, 480], \"counts\": \"_Yj6<Qj06E;L3J6L5L37IO0O1O1N1O2M3N2M3O001O0000001O1O000000001O001O0010OO2O00000100O002M3N1N3N1N3N2N3K9H9G5J_nX4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"l_X35Xj0<E6K3N2M2mXO>Vc0Dk[OXOnN_1Re0ZOn[OYOnN_1Re0[Om[O^OfN\\\\1\\\\e0WOl[O^1Td0dNi[O]1Wd0eNe[O]1\\\\d0eN`[O[1ad0iNY[OY1gd0kNT[OU1nd0nNlZOS1Ue0VO^ZOn0be0o13jMQ[OdNSe0W1V[O_NQe0W1[2B=J8J:F9F9G9GTi]8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"h75Zj03M4M00000O101N2N2L4B=\\\\Oe0L2101N10001O000000001O0000000000001O0000000O110O000000010O0000000O1000001O00001O0001O000001O01O001O001O100O1O1O1O01O0000100O001O001O00001O00000000000O1000000O2L3N2K5I7I7I8JW`7JQ`H5K4L3N3L300002N4LP[f0BVeYOa0B;Ec0A:G001O1O001O01O0001O0001O01O0001O0001O01O01O000010O000001O01O01O000010O0000000010O0000010O0O1010O010O0010=B1O01O0N3O0O1O1N2O2M2N2O1O1O1001O00000000001O001O1O00001O1O001O1O1O1O1O001N2O1N2O1N2N4B=QOiVO1Sc;j0iUE>[Od0K6O0O1O2O0000001O001O0001O01O000010O000001O000000010O0000001O01O01O00000010O00000001O0001O000O1M3I7K5L5L3O1O101O00000O110O00000000001O00000000001N1000000O101O0000000O10001O0000001O0O100000001O0O100000000O101O0000000O1000001O000O1000001O1N2O000O101O00001N100000001O0O100000001N1000001O0000000O10000O0100000O10000000000O2O000000000O2N10001O001O000O1O1M\\\\`R1\"}, {\"size\": [848, 480], \"counts\": \"kh21Wj0c0D>C6J7I3M1O0O1000000000000000000000O010000000O1000001OO11N10O10000000O100000O10O10000000000O1000O100000O1000000000O10O100000000000000WOSWOOlh00XWONhh02YWOMgh03YWOLhh04ZWOJfh06ZWOJfh06ZWOJfh05[WOJfh06ZWOJfh05[WOKdh06\\\\WOJdh06\\\\WOJdh04^WOLbh02`WOMah01aWOO_h0NdWO2\\\\h0IiWO7Xi0O1000O1N2M3N2M3N1O2M3N2M3N2O1M2O2M4N0011O00000O20O00\\\\OQWOGPi06SWOImh04WWOJlh0M\\\\WO2fh0H_WO7^i0O00000O1000O1O001O1O1O010O1001N1000000000O10O0100N2N2O1N2M3M2O200000000000O10001O0000000O2O0000001O000O101O1O00001O0O101O0000001O000O101O00000O2O00000O2O001O0O2O0O2O2MlRU7\"}, {\"size\": [848, 480], \"counts\": \"fc[72[j06K4L4K5L3M3M4L3N2N2N1N3N3L3N102N1O100101M`0B0O001O0000000000O2N10O01O1O001N2O0O2O000O2O0O1O100O2O0O1O1O1O1O2N1O1O1O1N2N2GRNnWOP2Qh080000001O002M2ROlWO^OTh0DfWO6d05hg0_OnXO?bh00001O000O011OO0100O10O0001O00100O10O01O10O01O0010O10N2O2LUW^2\"}, {\"size\": [848, 480], \"counts\": \"j:e0ji01O1O010000OO2O010000000000O1000O10O100000000O01000000000O10O100000000O01000O1000O1000000O1000000O10O100O1000O10000000000O010000000000000O1000000000O100000O10O100000O1000O100000O1000000O01000000O100000O100000000O01000000000O100000O1000O100000O10O100000O1O10O1000O10O10000000000O1000000000O1000O100000000000000O10O10000000O10000000O01000000000O0100000O0100000000000O010000000O010000000O10O10O100000O010000O010000O01000000000O1000000000000O10000000000000000O1000000000000O100000000000O01000001O001O1N2O1O2M3M3MbPj5\"}, {\"size\": [848, 480], \"counts\": \"P[S5a0Xh0ERXOMJd1if0n1oNo0N3OmM\\\\ZOYOde0>YZOhM=d1[e0a0P[OXOTe0g0nZOSOWe0l0mZOlNXe0T1kZOgNWe0Y1P[O[NUe0d1l100O1O100O1GjWOXNVh0d1=N2O10000000001O1N11O01O101N2Nh0lNZ^\\\\6\"}, {\"size\": [848, 480], \"counts\": \"kdi76Vj08J5J6L3M4K5K4M6K0O2N10O01O100O2OO01000003M5KO100O1O100O20OO1O2M2O2M2N3N1O2L4M3N2N2M4K<]OQc^3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"kTZ34Yj09I6J5K3oXOFhc0<V[OTOTOc1jd0[OP\\\\OYOlNa1Qe0YOR\\\\OXOhNb1Ue0XOo[O]1Qd0eNj[O^1Vd0dNg[O]1Zd0eNa[O\\\\1`d0gN\\\\[OZ1dd0jNW[OV1jd0nNP[OT1Qe0QOeZOR1]e0o12nMiZOgNZe0S1S[ObNQe0X1Z[O\\\\Nnd0X1]2E:J9H<D:F:Bjn\\\\8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"hl13\\\\j04N2L1O013L101N3L2M4D;N2N1N3K5N2O001N2N2O10000000000001O0000000000001O000001O0001O000000000O101O0000010O000000010O0001O001O00100O1O1O1O01O00010O1O001O001O0000001O00000000000O1000000M4M2J6I6J7J8IV`7KQ`H5K4L3M3O100001O3M[Ug0McjXO=Ca0C<D2O2N001O0001O000001O01O01O0001O0001O00010O00000100O1O010O1O100Of0ZO3N0O1O0000O100O2M2L4I8K4M3N3N1O2O0O101N10001O00001O0001O00010O00O11O000000000000001O000000001O0000001O0000000O2O00000O2O0O1L4H:E=ROSP:c0doEb0ZOe0L3N200O2O0000001O00001O01O0001O00010O00001O000001O01O00000010O0001O0000010O0000001O01O000000000O1K6G8K5M3N3O0O100000001O00000000001O00000000001O0O100000001O000O1000001N1000001O0000000O101O0000000O1000001O000O100000000O2O000000000O10000O2O1O001O0O101O00000O101O00001N100000001O000O101O000000000O10O1000O1000O10O2O00000O101O0000000O2O1O000O10001O000O1N2N[kP1\"}, {\"size\": [848, 480], \"counts\": \"d]4;Tj0=C=D6J7I001O000000000O10000000000000O100000O1000O2OO11O000O01000000000O1000000000O0100000000O1000000000O10O100000000000O100000O1000000VOUWOOkh00WWOOih01YWOMgh03ZWOLfh04ZWOKfh06ZWOJfh05[WOKeh05[WOKeh05[WOKeh04\\\\WOLeh03[WOLfh03[WOMeh01]WOOch0N`WO2`h0JdWO6^h0EeWO:Yi000000O1O1O1L3N3N2M3M3N2M201N2M3M3O1O1O01000001O00001O001WOTWOLmh0NZWOOih0H_WO7^i0O000000000O0100O0O2O1O1O10O101O00000000O01000O1O1O1O001N2M3L4N2000O1000000000001N100000001O000O101O00001O0O10001O001O0O101O00001O000O10001O000O101O0000001O1N101N100O1O_XT7\"}, {\"size\": [848, 480], \"counts\": \"Q`j7:oi0;E;F;F9F:K9F9H6I5L3L4M2O1N2N2O1O0O2O000O10001O00000010O1O1O1O00100O2N100O1O1O1O000000001O0O10000000O02O0000000O10O100001O00001[NfXO1[g0FUYO4jf0G^YO7af0FcYO8^f0EfYO:[f0CgYO<Zf0BiYO=Wf0AkYO>Vf0@mYO?Sf0@nYO?Sf0_OoYOa0Rf0^OoYO`0Sf0^OoYOa0Vf0XOlYOe0Sh0I7Jkf`2\"}, {\"size\": [848, 480], \"counts\": \"j:e0ki00O100O1O010O100O001000O10000000O01000000O1000O1000O10000000O10O10000000O10O10O100000O100000000O1000O01000O100000O10000000000O1000000000O1000O1000000000O10O1000000000O10O1000O1000O100000000O10O10000O1000O10000000O1000O100000000O10O10000000O10000000O010O100O1000O1000000O10O10000000O1000000000000O10O100000000000O10O100000O1000000000000O100000O10O01000000000O0100000000O0100000O1000O1000O1000O10O100000O01O1000O10000O011O00O10O1000000000000O10000000000000000000O02O01OO100000O01010O00O0100000O2O010N2O001N3N1N3M2Nc[h5\"}, {\"size\": [848, 480], \"counts\": \"fgU5b0Yi0g0B>kYO]NXc0e1a\\\\OcN\\\\c0`1`\\\\OcN_c0`1[ZOYNc1;Qd0j1l[OXNTd0j1g[OZNXd0g1c[O]N\\\\d0e1][OaNcd0`1Z[OdNdd0]1V[OhNjd0Z1nZOlNRe0W1kZOjNTe0Y1hZOhNXe0Z1eZOgN[e0W30O1000000000001N1N3N1O1N3L4G:]Of0POV1QO\\\\d[6\"}, {\"size\": [848, 480], \"counts\": \"Zda83Uj0;I6K4M3N2M3N3M3M2O1N2O2M101O001N10000001O000000000000000O100O1O2N1O2N1O2N2O2L4J7G9CkXh2\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Wd\\\\3<Sj06J4kXOf0nb0]Oi\\\\Om0Rc0XOh\\\\Ol0Vc0VOV\\\\O\\\\1ic0hNo[O]1Qd0eNk[O]1Vd0cNh[O^1Xd0eNd[O\\\\1\\\\d0gN`[OZ1`d0jNZ[OW1hd0mNQ[OT1Pe0POjZOR1We0R22oMeZOiN^e0R1Q[OaNRe0X1Z[O\\\\Nnd0Z1Z2C>K6I;E:E<B[T\\\\8\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"lV53Yj06L3O1N3M1O2K4L5K4N20O0100O1O1O1K5M3N2N2O1O1O1O1O100000O2O00000001O01O0001O0000O101O000000001O00000001O01O0001O001O00100O1O1O1O01O01O01O001O001O001O01OO2O00001O0000000000000O1O1L4G9K4J8H8KV`7JP`H6K4K5N1O1O1003M9FVUg09_jXO8K>B8G2O1N2O0N2O1N2O2N100000001O01O0001O01O01O01O00010O0000010O010O3M3M4M;D3M1O0000O2N1O1I7M4H7M4N10001N11O01O0010O0001O000001O01O000000001O000000O101O01O01O0O100000001O000000001O000O10001O000O1M4H9B>VOoo9d0ioE=[Oe0K4O1O2N1000001O000010O000001O00010O00001O0001O0001O0000010O001O000001O01O0000001O01O0001O000000O2K4G9J6M3O2N100O10001O00000000001O00000000001O000O10001O0000000O1000001O000O101O00000000001N1000000O10001O000O10000000001O0O10000000000O101O2N0O1000001O0O10001O0000001N10000000001N10001O000O10000000O1000O100000O02O000O1000001O0O10001O001O000O2OO11N100O100M4MZVo0\"}, {\"size\": [848, 480], \"counts\": \"o]47ni0f0D;F2N7H2O1O0000001O0000O010000000000000O1000O10000000O2OO100000O1000000O1000000000O10O10000000000O10O100000000000O10O1000000000O1000000VOTWO0lh0OYWOMgh02[WOLeh05[WOKeh05[WOKeh05[WOKeh04\\\\WOLdh04\\\\WOKeh05[WOKeh04\\\\WOLdh04\\\\WOLdh03]WOMch01_WOOah0NbWO2^h0IgWO6[h0GgWO9Xi0000O1O100L3M4O1N2N2N1N3N2N2M3N2N2N101000O1000010O0O101O1XORWOLoh0HkVOK?;ci0O1O000O10000O10O1N2N2O010O1001O000O100000O10000O010O1N2O1M3L4N10100O100000O101O000000000O20OO101O00000O2O00001O000O2O00001O0O101O000000001O0O10001O0O10001O001N101O0O102Mm]S7\"}, {\"size\": [848, 480], \"counts\": \"V^T8184n0<Sg0a0oWO1ig0^1M2M3N3L2O2N2N1O2O1N1O2O0O101N101O0O101N10000O10000000000O1001O0000001O1O0010O01N101O001O001O000O2O001N1O100O2O0]NfXOO[g0FSYO6of0EWYO8jf0EZYO7jf0E[YO8ff0F]YO6gf0G]YO6df0H`YO3df0JcYOO_f0OS2N3M2M_X^2\"}, {\"size\": [848, 480], \"counts\": \"k:g0ii0O10O1O00100O01O01000O01000O1000000O100000O0100000000O10O10000000O10O10000O10O1000O100000O1000000O01000000O0100000000O1000O100000O1000000000000O1000O10000000000O010000000000O01000000000O0100000000O0100000000O01000000000O0100000000000O10O11OO10O100000O010O100000000O01000000O1000O1000000000O10000000000O0100000000000O100000000O100000O11O0O10O100O100000O01000000O1000O10000000O01000000000O01000O1000000O010O0100000O10O1000000O100000O02O000000000O01000001OO1000000000000000000O1000000000000O10O11O001O001N2O1O1N2O2M2MTag5\"}, {\"size\": [848, 480], \"counts\": \"ZoT5X1Zh0T1[Na1WOh0M3N101O0O10001O00001O00000000O1000000O1000001N2N1N2O2L4J6H;ROV1fNgd[6\"}, {\"size\": [848, 480], \"counts\": \"Sgo8c0ki05K3N2N2N2N3M2N2O1N2N2O1O1N10001N100000000000O10000O101O0O2M2O2N1O2M3M3M5G9Ff_]2\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Zd\\\\34Zj06K4oXOK`c0:T\\\\Om0lb0XOl\\\\OP1Pc0UO`\\\\OV1_c0nNV\\\\O[1ic0hNo[O]1Qd0dNk[O_1Ud0cNi[O]1Wd0eNf[O[1\\\\d0gN_[O[1ad0kNX[OU1jd0nNP[OT1Pe0POjZOQ1Xe0R22nMmZOcNVe0W1U[O_NPe0[1][OUNmd0\\\\1]2J8I7I7J9D;DhY[8\"}]], \"masklet_id\": [0, 1, 2, 3, 4, 5, 6, 7, 8], \"masklet_size_rel\": [0.010841089678796047, 0.038489445267425544, 0.018826646882634232, 0.027841700939497893, 0.01326965652450751, 0.011454841078018608, 0.007101022012578616, 0.004679213636605906, 0.0046306532800489165], \"masklet_size_abs\": [4412.757142857143, 15666.743801652892, 7663.198347107438, 11332.685950413223, 5401.280991735537, 4662.578512396694, 2890.4, 1904.6271186440679, 1884.861111111111], \"masklet_size_bucket\": [\"medium\", \"large\", \"medium\", \"large\", \"medium\", \"medium\", \"medium\", \"medium\", \"medium\"], \"masklet_visibility_changes\": [5, 0, 0, 0, 0, 0, 10, 3, 12], \"masklet_first_appeared_frame\": [0, 0, 0, 0, 0, 0, 0, 0, 0], \"masklet_frame_count\": [121, 121, 121, 121, 121, 121, 121, 121, 121], \"masklet_edited_frame_count\": [0, 0, 0, 0, 0, 0, 0, 0, 0], \"masklet_type\": [\"auto\", \"auto\", \"auto\", \"auto\", \"auto\", \"auto\", \"auto\", \"auto\", \"auto\"], \"masklet_stability_score\": [[1.0, 0.999616265296936, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], [1.0, 0.9938650131225586, 0.9981042742729187, 0.9956175088882446, 0.9958158731460571, 0.99689120054245, 0.9988597631454468, 0.9949495196342468, 1.0], [0.9991806745529175, 0.99737948179245, 0.9967948794364929, 0.9986863732337952, 0.998046875, 0.9988700747489929, 0.9979959726333618, 0.9966273307800293, 0.9919354915618896], [1.0, 0.994762122631073, 0.9955604672431946, 0.9957818388938904, 0.9955385327339172, 1.0, 1.0, 0.9933110475540161, 1.0], [0.9987623691558838, 0.9928610920906067, 0.9951426982879639, 0.999009907245636, 0.996243417263031, 0.9977678656578064, 0.994962215423584, 0.9907235503196716, 0.9834024906158447], [1.0, 0.9951377511024475, 0.9975489974021912, 0.9951046109199524, 0.9961119890213013, 0.9941792488098145, 0.9985652565956116, 0.9959016442298889, 0.993127167224884], [1.0, 0.9969335794448853, 0.9939819574356079, 0.9984447956085205, 0.9983805418014526, 1.0, 0.9985422492027283, 0.9891892075538635, 0.9965753555297852], [1.0, 0.9957919120788574, 0.9959999918937683, 0.9984674453735352, 0.9954853057861328, 1.0, 0.996960461139679, 0.9925373196601868, 0.9927797913551331], [1.0, 0.9951534867286682, 0.9949706792831421, 0.9973881840705872, 0.9966813921928406, 0.9955357313156128, 0.9930555820465088, 1.0, 1.0], [1.0, 0.9937915802001953, 0.9958949089050293, 0.9988558292388916, 0.9927623867988586, 1.0, 1.0, 1.0, 1.0], [1.0, 0.9943327903747559, 0.9965811967849731, 0.9961522221565247, 0.9960886836051941, 1.0, 1.0, 1.0, 1.0], [1.0, 0.9954627752304077, 0.998031497001648, 0.9975639581680298, 0.9943181872367859, 1.0, 0.9972144961357117, 1.0, 0.9902912378311157], [1.0, 0.9971540570259094, 0.9950494766235352, 0.9985601305961609, 0.9914425611495972, 1.0, 0.9973404407501221, 1.0, 0.9938650131225586], [1.0, 0.9958932399749756, 0.9920870661735535, 0.9969356656074524, 0.9976076483726501, 0.9973753094673157, 0.9813084006309509, 1.0, 1.0], [1.0, 0.9959155917167664, 0.9900990128517151, 0.9973094463348389, 0.9959839582443237, 0.9986807107925415, 1.0, 1.0, 0.9816513657569885], [1.0, 0.9936801195144653, 0.9965753555297852, 0.9985315799713135, 0.9941860437393188, 1.0, 1.0, 1.0, 1.0], [1.0, 0.9954128265380859, 0.9958463311195374, 0.998524010181427, 0.9883268475532532, 0.9987244606018066, 1.0, 1.0, 0.9945205450057983], [1.0, 0.9961076974868774, 0.9954338073730469, 0.9957401752471924, 0.9960886836051941, 0.9962825179100037, 0.9893333315849304, 1.0, 1.0], [1.0, 0.9972049593925476, 0.9947506785392761, 0.996216893196106, 0.9957982897758484, 0.9964413046836853, 0.9917355179786682, 1.0, 0.9972752332687378], [1.0, 0.9972101449966431, 0.9973309636116028, 0.9961636662483215, 0.9971791505813599, 0.9988700747489929, 0.99609375, 1.0, 0.9893617033958435], [1.0, 0.9972485303878784, 0.9983319640159607, 0.9926650524139404, 0.9936061501502991, 0.9963325262069702, 0.99622642993927, 1.0, 0.9946091771125793], [1.0, 0.9969437718391418, 0.9961180090904236, 0.9967567324638367, 0.9935815334320068, 1.0, 0.9981273412704468, 1.0, 1.0], [1.0, 0.9972307682037354, 0.9955190420150757, 0.9976451992988586, 0.9975093603134155, 1.0, 0.9982300996780396, 1.0, 0.9973683953285217], [0.9970588088035583, 0.9972153306007385, 0.9941605925559998, 0.9990610480308533, 0.9975429773330688, 1.0, 0.994140625, 1.0, 1.0], [1.0, 0.997514009475708, 0.9947916865348816, 0.9976171851158142, 0.9894366264343262, 1.0, 0.998031497001648, 1.0, 0.9972899556159973], [0.9962962865829468, 0.9962335228919983, 0.9954751133918762, 0.9992406964302063, 0.9953488111495972, 0.9988662004470825, 0.9957447052001953, 1.0, 1.0], [1.0, 0.9940643310546875, 0.9961889982223511, 0.9976562261581421, 0.9963942170143127, 0.9988864064216614, 1.0, 1.0, 0.9973045587539673], [1.0, 0.9971455931663513, 0.9960159659385681, 0.9970717430114746, 0.9951279163360596, 1.0, 0.9974358677864075, 1.0, 0.9949495196342468], [1.0, 0.9974432587623596, 0.9951884746551514, 0.9972621202468872, 0.9938499331474304, 0.997668981552124, 0.9976958632469177, 1.0, 0.9882628917694092], [1.0, 0.9978548288345337, 0.9959016442298889, 0.9967319965362549, 0.9910714030265808, 1.0, 0.9959999918937683, 1.0, 0.9952830076217651], [1.0, 0.9961360096931458, 1.0, 0.9974358677864075, 0.9959514141082764, 0.9976047873497009, 0.9960474371910095, 1.0, 0.9945205450057983], [1.0, 0.9978601932525635, 0.9962499737739563, 0.9966960549354553, 0.9964538812637329, 0.9987684488296509, 1.0, 1.0, 0.9971181750297546], [0.9970674514770508, 0.9958010315895081, 0.9963873028755188, 0.9986613392829895, 0.9967319965362549, 0.9987714886665344, 1.0, 1.0, 0.9943342804908752], [0.9983914494514465, 0.9947826266288757, 0.9960039854049683, 0.9983739852905273, 0.9956647157669067, 0.9988439083099365, 0.9946332573890686, 0.9912087917327881, 0.9953271150588989], [0.9994544386863708, 0.9975704550743103, 0.9928143620491028, 0.9985842108726501, 0.9955673813819885, 1.0, 0.998171865940094, 0.9863013625144958, 0.9878419637680054], [1.0, 0.9957904815673828, 0.9975505471229553, 0.9969199299812317, 0.9923858046531677, 0.997724711894989, 0.9980657696723938, 0.9843505620956421, 0.9973683953285217], [0.9994736909866333, 0.9949864745140076, 0.9924318790435791, 0.993931233882904, 0.9968454241752625, 0.9988358616828918, 1.0, 0.9928951859474182, 0.9916897416114807], [0.9996695518493652, 0.994803249835968, 0.9943647384643555, 0.9954545497894287, 0.9960907101631165, 1.0, 0.9963898658752441, 0.9876161217689514, 0.9972677826881409], [1.0, 0.9948166012763977, 0.9979674816131592, 0.9985337257385254, 0.9964380860328674, 0.9953216314315796, 1.0, 0.993779182434082, 1.0], [0.9995155334472656, 0.9967080950737, 0.9973045587539673, 0.9969631433486938, 0.998251736164093, 1.0, 0.9931192398071289, 0.9980769157409668, 1.0], [1.0, 0.996502161026001, 0.9935576319694519, 0.9985604882240295, 0.9940627813339233, 0.997633159160614, 0.996874988079071, 0.9977728128433228, 0.9974026083946228], [1.0, 0.9976190328598022, 0.9970731735229492, 0.9960451722145081, 0.9924487471580505, 0.9988109469413757, 0.9976525902748108, 0.9919571280479431, 0.9887955188751221], [0.9987499713897705, 0.9959197640419006, 0.9966009259223938, 0.9976038336753845, 0.9952426552772522, 1.0, 0.9912087917327881, 0.9931740760803223, 0.9971510171890259], [1.0, 0.9962962865829468, 0.9960876107215881, 0.9971428513526917, 0.993034839630127, 0.9987995028495789, 0.995708167552948, 0.9897260069847107, 0.9972222447395325], [1.0, 0.9961788058280945, 0.9921568632125854, 0.9978880882263184, 0.9911067485809326, 0.9961439371109009, 0.9980806112289429, 0.9927007555961609, 0.9928571581840515], [1.0, 0.9976726174354553, 0.9965457916259766, 0.999535322189331, 0.9978768825531006, 0.9939903616905212, 1.0, 1.0, 0.9911242723464966], [1.0, 0.9961210489273071, 0.996363639831543, 0.9973730444908142, 0.9934994578361511, 0.9985835552215576, 0.9966216087341309, 0.9956331849098206, 0.9964538812637329], [1.0, 0.9975777268409729, 0.9969696998596191, 0.998586893081665, 0.9934980273246765, 0.9988009333610535, 1.0, 1.0, 0.9882352948188782], [1.0, 0.997977077960968, 0.9945799708366394, 0.9981840252876282, 0.9956756830215454, 0.9963811635971069, 0.9976415038108826, 0.995192289352417, 0.9874607920646667], [1.0, 0.9968979954719543, 0.996303141117096, 0.9972796440124512, 0.9932340979576111, 0.9987804889678955, 0.9977426528930664, 0.9910714030265808, 0.9903225898742676], [1.0, 0.9974736571311951, 0.9982817769050598, 0.9981212019920349, 0.9939613342285156, 0.9942775368690491, 0.9938775300979614, 0.9919028282165527, 1.0], [1.0, 0.997053861618042, 0.9942244291305542, 0.9966068863868713, 0.9906759858131409, 0.9962121248245239, 0.9910714030265808, 0.9963369965553284, 0.9880478382110596], [1.0, 0.9979270100593567, 0.9958711862564087, 0.9976167678833008, 0.9954180717468262, 1.0, 0.9898989796638489, 1.0, 0.9928571581840515], [1.0, 0.9975826144218445, 0.9956896305084229, 0.9959396719932556, 0.9965237379074097, 0.9973992109298706, 0.9948052167892456, 1.0, 0.9883720874786377], [1.0, 0.9969460368156433, 0.9960500597953796, 0.9942362904548645, 0.9921787977218628, 0.9947848916053772, 0.996960461139679, 1.0, 1.0], [1.0, 0.9970079660415649, 0.9940688014030457, 0.9966510534286499, 0.9965428113937378, 0.9974193572998047, 0.9905213117599487, 1.0, 0.9961832165718079], [1.0, 0.9971791505813599, 0.9984962344169617, 0.9981308579444885, 0.9958563446998596, 0.9987179636955261, 1.0, 0.99245285987854, 1.0], [1.0, 0.9953685998916626, 0.9939188957214355, 0.9959150552749634, 0.9949238300323486, 0.9974489808082581, 1.0, 0.9961832165718079, 1.0], [0.9919354915618896, 0.995082676410675, 0.9940593838691711, 0.9983525276184082, 0.9988221526145935, 1.0, 1.0, 1.0, 0.9964285492897034], [1.0, 0.9966777563095093, 0.9964264631271362, 0.9937163591384888, 0.9939706921577454, 0.9974619150161743, 1.0, 1.0, 0.9931972622871399], [1.0, 0.9979966878890991, 0.9964115023612976, 0.9983831644058228, 0.9949281215667725, 0.9987228512763977, 1.0, 1.0, 0.996874988079071], [1.0, 0.9970099925994873, 0.9957575798034668, 0.9986622333526611, 0.9940323829650879, 1.0, 0.9923273921012878, 1.0, 0.9843260049819946], [1.0, 0.9970472455024719, 0.9952352643013, 0.9983999729156494, 0.9964601993560791, 1.0, 1.0, 1.0, 0.996666669845581], [1.0, 0.9954278469085693, 0.9969567656517029, 0.9973711967468262, 0.9947229623794556, 0.9975093603134155, 1.0, 0.9858490824699402, 0.9934853315353394], [1.0, 0.9957571625709534, 0.996964156627655, 0.997826099395752, 0.993854284286499, 0.9975031018257141, 0.9948849081993103, 1.0, 0.9934853315353394], [1.0, 0.997327983379364, 0.9969751834869385, 0.9989429116249084, 0.9903509020805359, 0.9937655925750732, 1.0, 1.0, 1.0], [0.997032642364502, 0.9976174235343933, 0.9962616562843323, 0.9976624846458435, 0.9974115490913391, 1.0, 0.9951573610305786, 1.0, 1.0], [1.0, 0.9960979223251343, 0.996515691280365, 0.9991942048072815, 0.9951267242431641, 0.9987593293190002, 1.0, 1.0, 0.9919678568840027], [1.0, 0.995398759841919, 0.9948630332946777, 0.9996025562286377, 0.9957143068313599, 0.9975579977035522, 0.9938080310821533, 1.0, 0.9939758777618408], [1.0, 0.9958662390708923, 0.9943181872367859, 0.9983708262443542, 0.9986013770103455, 0.9987684488296509, 0.9940652847290039, 1.0, 0.9892473220825195], [1.0, 0.9961792230606079, 0.9965893626213074, 0.9969751834869385, 0.9917355179786682, 1.0, 1.0, 0.9961685538291931, 1.0], [0.9954441785812378, 0.9961240291595459, 0.9960254430770874, 0.9968709349632263, 0.9968944191932678, 0.9975786805152893, 0.9986894130706787, 1.0, 1.0], [1.0, 0.9924554228782654, 0.9962476491928101, 0.9977924823760986, 1.0, 0.9983416199684143, 0.9987908005714417, 0.9961977005004883, 1.0], [1.0, 0.9967213273048401, 0.9988636374473572, 0.9981776475906372, 0.9932885766029358, 0.9982486963272095, 0.9966367483139038, 1.0, 1.0], [1.0, 0.9942622780799866, 0.9952574372291565, 0.998389720916748, 0.9942965507507324, 0.9987775087356567, 0.9987515807151794, 1.0, 0.9970059990882874], [1.0, 0.9958293437957764, 0.9928417801856995, 0.9981646537780762, 0.9959266781806946, 1.0, 0.9973439574241638, 1.0, 1.0], [1.0, 0.9977272748947144, 0.9952830076217651, 0.9968787431716919, 0.9946236610412598, 0.994575023651123, 1.0, 1.0, 1.0], [1.0, 0.995903730392456, 0.9965753555297852, 0.998036801815033, 0.9957746267318726, 1.0, 0.9974457025527954, 1.0, 1.0], [0.9943181872367859, 0.994727611541748, 0.9903978109359741, 0.9971581697463989, 0.9917920827865601, 0.9948119521141052, 0.9985548853874207, 1.0, 1.0], [1.0, 0.9948886632919312, 0.9896238446235657, 0.9971000552177429, 0.9954954981803894, 0.9974842667579651, 0.9982578158378601, 1.0, 1.0], [1.0, 0.9966703653335571, 0.9918200373649597, 0.9934498071670532, 0.9964413046836853, 0.9975247383117676, 0.9960629940032959, 1.0, 0.9867987036705017], [1.0, 0.9974789619445801, 0.9941314458847046, 0.9978601932525635, 0.9986666440963745, 0.9987546801567078, 0.9980236887931824, 1.0, 1.0], [1.0, 0.9955673813819885, 0.9880775213241577, 0.9993565082550049, 0.990755021572113, 1.0, 0.9980506896972656, 1.0, 0.9836065769195557], [1.0, 0.9980109333992004, 0.9949044585227966, 0.9987760186195374, 0.9985954761505127, 0.9950617551803589, 0.9940000176429749, 1.0, 1.0], [1.0, 0.9982847571372986, 0.9959308505058289, 0.9957957863807678, 0.9955489635467529, 1.0, 0.9979296326637268, 1.0, 1.0], [1.0, 0.9979321956634521, 0.9945205450057983, 0.9935988783836365, 0.993842363357544, 0.9974715709686279, 1.0, 1.0, 0.9878787994384766], [1.0, 0.996562123298645, 0.9928635358810425, 0.999281108379364, 0.9957864880561829, 0.9986110925674438, 0.9923273921012878, 1.0, 0.9815950989723206], [1.0, 0.99483323097229, 0.9946523904800415, 0.9989053010940552, 0.9931880235671997, 0.9899497628211975, 1.0, 1.0, 1.0], [1.0, 0.9945824146270752, 0.9921602606773376, 0.9994481205940247, 0.9930459260940552, 0.9868995547294617, 0.9951807260513306, 1.0, 1.0], [1.0, 0.9912686347961426, 0.9967948794364929, 0.9994465708732605, 0.9959568977355957, 0.9943342804908752, 1.0, 1.0, 1.0], [1.0, 0.995903491973877, 0.9985305070877075, 0.9951159954071045, 0.9919447898864746, 0.9941176176071167, 1.0, 1.0, 0.9942196607589722], [1.0, 0.9927038550376892, 0.9941902756690979, 0.996221661567688, 0.9903846383094788, 0.9944030046463013, 0.9972299337387085, 1.0, 0.9970760345458984], [1.0, 0.9942076802253723, 0.9932735562324524, 0.9967408776283264, 0.9954338073730469, 0.998645007610321, 0.9973822236061096, 1.0, 0.9880239367485046], [1.0, 0.9954648613929749, 0.9926650524139404, 0.9978213310241699, 0.99726402759552, 0.997668981552124, 1.0, 1.0, 0.9940652847290039], [1.0, 0.9884058237075806, 0.9942386746406555, 0.9994797110557556, 0.993514895439148, 1.0, 0.9976958632469177, 1.0, 0.9937499761581421], [1.0, 0.9945088624954224, 0.9983831644058228, 0.997171938419342, 0.997187077999115, 0.9931034445762634, 1.0, 1.0, 0.991304337978363], [1.0, 0.9956876039505005, 0.9954338073730469, 0.9957575798034668, 0.9963008761405945, 1.0, 1.0, 1.0, 1.0], [1.0, 0.9945230484008789, 0.9917417168617249, 0.9993265867233276, 0.9978237152099609, 1.0, 0.9976635575294495, 1.0, 0.9824561476707458], [1.0, 0.993697464466095, 0.9922600388526917, 0.9982404708862305, 0.995555579662323, 0.997357964515686, 0.9977578520774841, 1.0, 0.991525411605835], [1.0, 0.9952102303504944, 0.9975000023841858, 0.9983193278312683, 0.9988276958465576, 1.0, 1.0, 1.0, 0.9913793206214905], [1.0, 0.9962284564971924, 0.993766725063324, 0.9980607628822327, 0.9964370727539062, 0.9987373948097229, 0.9974093437194824, 1.0, 0.9941520690917969], [1.0, 0.9964247345924377, 0.996120274066925, 0.9992842078208923, 0.9964953064918518, 1.0, 1.0, 1.0, 1.0], [1.0, 0.9951185584068298, 0.9959677457809448, 0.9958419799804688, 0.9962962865829468, 0.9987421631813049, 0.9942029118537903, 1.0, 1.0], [1.0, 0.992342472076416, 0.9969512224197388, 0.9967585206031799, 0.9925925731658936, 1.0, 0.9974160194396973, 1.0, 0.9972375631332397], [1.0, 0.996192455291748, 0.9949899911880493, 0.9955012798309326, 0.9949937462806702, 0.9987562298774719, 0.9970414042472839, 1.0, 0.9945945739746094], [1.0, 0.9975806474685669, 0.9990079402923584, 0.998678982257843, 0.996277928352356, 0.998763918876648, 0.9976415038108826, 1.0, 0.9944444298744202], [1.0, 0.9975399971008301, 0.9950494766235352, 0.9973941445350647, 0.9963189959526062, 0.9987515807151794, 0.9975185990333557, 1.0, 0.9944751262664795], [1.0, 0.9965556859970093, 0.9960513114929199, 0.9987841844558716, 0.9975874423980713, 1.0, 1.0, 1.0, 0.9971910119056702], [1.0, 0.9980582594871521, 0.9950883984565735, 0.9988465905189514, 0.9951691031455994, 0.9987654089927673, 0.9948586225509644, 1.0, 0.9920634627342224], [1.0, 0.996210515499115, 0.999009907245636, 0.9978586435317993, 0.9987908005714417, 0.9987531304359436, 0.9975961446762085, 1.0, 0.997183084487915], [1.0, 0.9970476627349854, 0.9980217814445496, 0.9972466826438904, 0.9976133704185486, 0.9974937438964844, 1.0, 1.0, 0.9974026083946228], [1.0, 0.9956653714179993, 0.9930209517478943, 0.9987228512763977, 0.9975757598876953, 0.9975489974021912, 1.0, 1.0, 0.9918919205665588], [1.0, 0.9973929524421692, 1.0, 1.0, 0.9951632618904114, 0.9962825179100037, 1.0, 1.0, 0.9972602725028992], [1.0, 0.998106062412262, 0.9969666600227356, 0.9981883764266968, 0.9987804889678955, 0.997521698474884, 0.9973614811897278, 1.0, 0.9972066879272461], [1.0, 0.9982523322105408, 0.9970059990882874, 0.9922928810119629, 0.996363639831543, 0.9975489974021912, 0.997183084487915, 1.0, 1.0], [1.0, 0.9975464344024658, 0.9970119595527649, 0.998171865940094, 0.9964028596878052, 0.9963235259056091, 0.9915493130683899, 1.0, 0.9946236610412598], [1.0, 0.9979459047317505, 0.9960119724273682, 0.9895104765892029, 1.0, 0.9987684488296509, 0.9973404407501221, 1.0, 1.0], [1.0, 0.9963309168815613, 0.9951503276824951, 0.9920634627342224, 0.9952493906021118, 0.9974651336669922, 0.994962215423584, 1.0, 1.0], [1.0, 0.9976580739021301, 0.995039701461792, 0.9982817769050598, 0.9963942170143127, 0.9976190328598022, 0.996874988079071, 1.0, 1.0], [1.0, 0.9972909092903137, 0.995112419128418, 0.9945553541183472, 0.9976415038108826, 0.9985052347183228, 1.0, 1.0, 0.9972066879272461], [1.0, 0.9976076483726501, 0.9980732202529907, 0.9980506896972656, 0.9952210187911987, 0.9962916970252991, 0.99609375, 1.0, 0.9972299337387085]], \"masklet_num\": 9}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sav_dataset/example/sav_000001_manual.json",
    "content": "{\"video_id\": \"sav_000001\", \"video_duration\": 20.125, \"video_frame_count\": 483.0, \"video_height\": 848.0, \"video_width\": 480.0, \"video_resolution\": 407040.0, \"video_environment\": \"Indoor\", \"video_split\": \"train\", \"masklet\": [[{\"size\": [848, 480], \"counts\": \"i\\\\Y4<Qj05K4L4M3M2N3O000010O00001O00010O00000O101O0000000000000O010000000O10O10000O01000O100O010O1O1O1N2O1O0O2O1N20O01O1001N101O1N100O100O10O01O2O00000O1O10O1O11N1O1O100O1O2N1O1O3L4HTXk5\"}, {\"size\": [848, 480], \"counts\": \"Ynl18ni0?E8H8H7I7J6H8K5L3M4J6K5L4M2M4M3L4L4L4M3M3L4M3M3L4M2N3M3M3M4L5J<F?@<D5K4L4M2M3M3M3N2N2M2N3M2N3N1O2N1O2N1O2N1O2N1O101M2O1O1O2N1O1O1000001M2lMYH^Ah7;YHc;8mC`7>aH[;5SD[7?dH[;5SDX7a0eHX;8TDT7b0hHW;7TDR7d0iHT;;TDn6f0hHU;>QDk6g0jHW;=QDi6f0lHX;?nCf6f0oHZ;?mCd6f0PI[;`0lCa6e0RI^;b0hC^6g0RIa;e0`C]6l0PIc;`9ZDbFe;`9XDcFf;_9WDcFi;^9UDbFl;_9QDcFn;_9oCcFP<b9hCbFX<j;010O10O01000O0QEZBV9e=hFfBP9Y=lFPCP9o<iF[CU9d<iF`CV9^<gFhCX9V<fFoCY9o;fFUDY9j;eFYD[9g;cF\\\\D[9f;[FcDf9_;mElDR:j=O00O1001O1O102M2N1OjB\\\\F`9d9\\\\FbFc9^9[FeFc9[9\\\\FhFb9X9^FjF`9V9_FmF_9S9aFnFj0XOc4j9bJoF74m4m8lJPGN>T5a8nJSGHa0X5]8PKSGDc0\\\\5[8oJSGCd0\\\\5Z8QKTGAb0]5\\\\8QKSGAb0]5[8RKTGA`0\\\\5]8SKUGaNXOlNW1[7a8WKQGYN_OVOo0^7\\\\8RKYGQND^Og0_7\\\\8RK]GbMKN;b0aNe5l9XLYIbMZN<gNg5h9ZLXIbMYN:lNh5c9[LYIeMWN6POh5`9]LZIdMVN6SOf5_9^LYIgMUN4UOe5]9_L[IgMSN4XOe5Y9_L]IiMQN3[Oc5X9_L]IkMPN4\\\\O`5X9_L]ImMPN3]O_5W9_L^InMnM5_OW4RORLT:a1_IRNkM4BT4VOPLo9d1_ITNjM4El3YOWLi9c1bIUNgM5Fi3ZOXLk9b1_IXNfM5Ge3\\\\OZLk9a1^I[NdM5I^3@]Li9c1\\\\I]NaM5LY3DYLk9g1WIbN^M5MU3m:oMkGgN\\\\M4NR3n:oMkGkNYM4On2S;kMkGQOTM7Nj2Y;eMjG[OnL60f2c;TMlG0aL61a2Xa0YMg^O62^2Za0[Md^O74Y2[a0aM`^O67S2]a0gM\\\\^O68o1_a0kMY^O7:g1ba0RNS^O7<c1da0VNP^O7>^1ea0[Nm]O7`0X1ga0bNh]O7a0R1la0gNb]O7d0k0oa0PO[]O6f0e0Tb0UOU]O6i0?Wb0[Oo\\\\O6m06[b0Dg\\\\O7o0Kcb0N]\\\\O7cf0I[YO7gf0IWYO8jf0HTYO8mf0IQYO7Pg0JnXO7Rg0ImXO7Wg0FhXO;[g0AeXO?_g0\\\\ObXOd0`g0XObXOi0bh0000O101O000000001O0O10001O000010O0001O00001O0001O00001O010O00001O1O001O1N2O1O001N2O0O2O1N2N3N2M2N5J[R]4\"}, {\"size\": [848, 480], \"counts\": \"\\\\le62]j03M2N1O100O100O100O1O1N2N2O1M3N2N2N2N1N2K4M004M3J6L3M2M3M3O1]NaNXZO]1he0nNnYOQ1Uf0TOcYOo0^f0UOYYOn0hf0XOnXOl0Sg0V12ON2J402O0gZOcL`c0^3a\\\\OfL[c0\\\\3e\\\\OfLYc0Y3i\\\\OgLWc0X3h\\\\OkLWc0T3f\\\\OPMZc0P3b\\\\OTM^c0l2a\\\\OVM]c0Y3S\\\\OiLmc0l3W[O[Lid0f40O2N001O1M4N1O3M2N3M2M6bN\\\\1H8I7L5J9I4E;K5^OaWOlNch0P1b0K5L4L5K6I>_OdYf3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Zeo2b0ji07J5K5M4J4M4M3M3N1N3L4L5K4N2M4L5K4L7I6K3L3N2M2O1N2N1O00001O2O0O2O0O2N100O1O100O10001O0O1O10000O1000000O100000000O100000000000000001O00000O2N2O1N2N2N100N3ZNTYO^N0c03ROnf0g1f1H8J7J8K4M4L7@idV7\"}], [{\"size\": [848, 480], \"counts\": \"jSQ46Sj09K6J5M1O20O001O0010O000001O0000000000000O10000001O000000000O01000000000O10O10O2N010O1O1O1O1O1O1N2N101O100O001O1000000000O10001O000O1000000O1O2O000O100O1O100O010O1O2M2O1L6L3MQaS6\"}, {\"size\": [848, 480], \"counts\": \"\\\\i`2`0ki08F9F:I6I7I7J6J6I8I7I8C>G9F;A=F:C=D=^Ob0F8I7I6L4L4M2N3L3N2M3M4\\\\MoHdAU7Q>YIhAl6n1UH]8U1bEl6i1YH[8Q1hEk6h1[HZ8m0lEl6d1[H\\\\8l0nEl6b1[H^8l0mEm6`1[H_8k0oEn6Z1]He8h0nEn6U1`Hl8d0mEQ7o0`HS9a0jEX7f0]H_9=hEo7LjG[:9fEZ8^OdGj:5eE_:Z:cEdE^:[:dEcE]:]:fE^E\\\\:a:iEZEX:f:i200O100000O1000000000O010lFj@n6V?oHPAn6P?PIUAn6k>oHYAo6h>nH[AP7i>kHZAT7m>aHXA^7m>YHXAf7l>RHXAn7f`0O0O101O000000001O0001O000001O01O01O0010O000100O2NUAVHo:l7mDZHP;f7oD\\\\HP;d7oD_Ho:b7PE_Ho:a7PEaHo:_7QEbHn:_7QEbHn:_7QEbHm:`7REaHm:_7SEbHk:`7TEcHi:^7VEbHj:^7VEaHk:`7SEaHn:^7REbH`MXOd<W8kEbHWMEP5Nm1k7kKgHQMFi3[1l1TNVKT8S2hIf09d1TN`Kl7S2nIc0=Z1PNPLd7R2TJ`0=m0WNbLX7o1XJ?`03fN_Mc6m1[J>b0]OSOXNR6i1^J?b0SOVOdNo5c1_Jc0a0kNWOoNo5[1]Ji0a0eNWOVOP6V1]Jk0a0`NWO^OP6R1VH\\\\Nd0a2T2YNXOGn5l0SHhNb0Z2\\\\2nMWO4U6<gGZOc0U2`6UN_10`GGe0P2]6XNe1D]G6f0h1Y6^N`3L\\\\Fa1U6aN`3N_F\\\\1R6fN_3NcFX1o5iN]3OhFT1l5mN\\\\3OjFR1k5nNZ30nFo0k5mNX35oFk0k5jNZ3;nFh0Xb0XOj]Of0Ub0[Ol]Oc0Ub0\\\\Om]Ob0Sb0_Om]Oa0Sb0_Om]O`0Sb0Al]O?Ub0@k]O`0Ub0@k]Oa0Tb0_Ol]Oa0Ub0^Ok]Ob0Ub0^Ok]Ob0Vb0]Ok]Ob0Vb0]Oj]Oc0Wb0\\\\Oi]Oe0Wb0[Oh]Oe0Yb0ZOh]Oe0Yb0[Of]Of0Yb0ZOf]Of0\\\\b0ZOc]Of0^b0YOb]Oh0^b0XOb]Og0_b0YO`]Og0ab0YO_]Og0ab0XO_]Oh0bb0XO]]Oh0db0XO\\\\]Og0eb0YO[]Og0eb0YOZ]Og0gb0YOX]Og0ib0YOW]Of0jb0YOV]Og0kb0YOU]Of0lb0ZOS]Og0lb0ZOT]Oe0mb0[OR]Oe0ob0[OP]Oe0Qc0[Oo\\\\Od0Rc0\\\\Om\\\\Od0Tc0\\\\Oj\\\\Oe0Wc0ZOi\\\\Of0Yc0YOf\\\\Og0\\\\c0XOb\\\\Oi0`c0VO_\\\\Oj0bc0VO]\\\\Oj0ec0SO\\\\\\\\Om0df0O001O001O010O000010O000O1N2N2O1O1O1O1O1O1O10000O10000000000010O0010O010O010O010O01000O0100O010O001O010O1O00100N2O100O001O1O1O10O01O1O1O2N1O1N2O2O0O3N3H?BdoW3\"}, {\"size\": [848, 480], \"counts\": \"]]c62\\\\j03O0O1O101O00000O100O1O1O1N2M3L5M1N3L4M2O2M2K4M1O1N4N2L3N2N3M2^NbNUZO^1je0mNiYOU1Yf0QO^YOP1ef0UOQYOo0Pg0W11N10O1M2N21OcZOgLfc0Z3W\\\\OlLfc0S3\\\\\\\\OnLbc0Q3^\\\\ORM`c0o2^\\\\OTMac0l2^\\\\OVMac0k2\\\\\\\\OYMbc0j2T[OcLQ1d0kc0\\\\3e[OgLZd0h40000001N101L4M3N2O1N2O1dNgZO^M[e0Y2`[OPMfd0j2d1J7J7J7I7B;F;H7M4L5J7H8J6Ighh3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"XYi3j0^i0b0B9J3N1L5I9I5L4L3N3L3N2K6L3N1N4M1O2N1N2N2O2N1O2O1N1O3M101N2O0O2O0O1O100000000O2OO1000001O000000001N101O1O2N004K3M2O1O4K4M5J4M4J6K9G4M2M2N2N6J4L5K2N4M5I6K6I;^OUVOJfgb6\"}], [{\"size\": [848, 480], \"counts\": \"Sfm3<Rj03M3M3L3N3M2N3M2N3O000010O0000001O001O00000000001O000000O1001O0000O10001O00000O100O100O1O100O100O1000000001O1O001O1O1O1O001N2O00001O001O001O1O001O00000O2O000O101O1O001N100O1O2O1N2N2N3HbiR6\"}, {\"size\": [848, 480], \"counts\": \"mhd2a0fi0:UOl0eMTOeYO\\\\O2]2ke0l1]Oc0I8TOm0[Oh0D>^Og0^O<E7I6J4M3M3L3N2N2N2N200QDeFg6^9TImFd6T9YISGa6o8]IUG_6n8]IWGa6j8kHjGT7X8[HXHd7j7UH\\\\Hj7g7oG^Ha5cMkIS:=_Hb5mMgIg9`0`Hi5nMaIe9b0_Hm5PN]Ic9b0_HQ6QNYId9a0^HU6PNXIe9>]HZ6nMWIl97XHb6mMVIf>j6[AUIe>k6\\\\ASIe>m6\\\\ARId>n6^AoHc>Q7`AlH`>T7cAhH^>X7eAdH\\\\>\\\\7gAaHY>_7iA\\\\HY>e7iAPH`>P8o1YJj]OV3Vb0iLm]OU3Sb0gLS^OW3la0hLW^OW3ha0hLZ^OX3fa0dL^^O\\\\3ba0aLa^O_3_a0_Ld^O`3]a0dKU^OXOa0T5_a0[K^_Od4l`0oJW_OQ5Tc00001O0000000000000000001O0000000000O1001O0000000000000000O11O0000000000000000O10000lNcJU]O]5gb0gJY]OY5fb0iJY]OW5X2eJP=7g@T5W2kJk0Kj78SES5V2oJ?c0d7^OfEP5U2TK6a1g6hNnFc4U2WKMT2\\\\6WN`G_4V2XKMZ2R6SNjG[4V2\\\\KJ[2o5RNPHW4W2]KI`2h5nMXHU4W2^KHi2\\\\5hMdHQ4X2_KHQ3o4cMQIl3W2bKHU3f4aMZIi3V2eKHU3`4bMaId3W2fKHW3X4cMiI`3V2iKHX3P4dMQJ[3U2lKIY3h3eMZJV3T2nKJY3a3hM`JQ3U2oKJ]3W3hMiJl2U2RLJ_3m2hMTKg2T2TLJe3b2eM_Kb2T2WLJj3T2dMmK[2R2\\\\LKn3g1aM\\\\LU2n1aLOo3W1eMkLk1k1eL3R4i0fMXMc1i1iL6S4=gMcM^1f1mL:T4NjMQNU1\\\\1YMd0R4^OhMaNm0X1_Mi0R4QOjMkNf0W1bMn0V4bNg33]H\\\\1U4nMh3:^Hi1Td0101N101N2N1O10mM`XOW1^g0hNfXOV1Zg0jNgXOU1Yg0jNhXOV1Wg0jNkXOU1Ug0kNlXOT1Tg0lNlXOT1Sg0lNoXOS1Qg0mNoXOS1Qg0mNoXOS1Qg0mNnXOT1Qg0mNoXOS1Qg0nNnXOR1Qg0nNPYOQ1Pg0POPYOP1of0PORYOP1lf0QOVYOn0if0ROXYOn0gf0SOXYOm0if0ROXYOn0gf0SOXYOm0hf0TOXYOl0hf0TOWYOl0if0TOXYOk0hf0VOWYOj0jf0UOWYOi0kf0WOTYOh0mf0YORYOg0of0XORYOg0of0YOPYOg0Qg0XOoXOi0Pg0XOoXOh0Rg0XOmXOi0Sg0VOnXOi0Sg0VOnXOi0Rg0WOnXOh0Tg0XOlXOe0Wg0[OhXOe0Xg0[OiXOd0Xg0\\\\OgXOd0Zg0\\\\OfXOd0[g0[OdXOf0]g0YObXOg0_g0XO_XOk0ag0UO]XOl0eg0SO[XOl0fg0UOZXOh0ig0WOXXOg0ig0XOWXOh0jg0XOUXOg0mg0YOSXOf0ng0ZOQXOf0Qh0YOoWOf0Rh0ZOnWOe0Th0ZOkWOf0Vh0YOkWOf0Wh0TOmWOm0Sh0SOjWOo0Wh0QOiWOo0Xh0POgWOP1Zh0POdWOR1\\\\h0nNbWOS1`h0lN^WOV1ch0iN[WOX1gh072M6I4L2N3O0010O10O01O00N2M301O0001OO01000001O001O1O001N2O0O2N2N1000001O0O1001O01O0O1O11O000100O01O100O10O01O100O100O1O100O1O100O100O10000O10001O00000O101N101O0O2O001O0O2O001O001N101O0O1O2M3M6ITPn1\"}, {\"size\": [848, 480], \"counts\": \"S^c65[j01N100O10001N1O100O100O1N2N2M2N3M3K5M1O1N2]MUOb[Ol0_d0YOX[Oj0jd0VOR[Ol0Re0ROgZOS1]e0kN^ZOX1ce0hN[ZOZ1fe0dN[ZO[1de0gN\\\\ZOV1ee0lN\\\\ZOP1ge0POYZOn0je0QOVZOm0le0TOSZOk0oe0UOQZOh0Sf0WOlYOg0Wf0YOiYOd0Zf0[OfYOb0^f0^ObYO`0`f0@_YO>ce0@iYO1d0<ce0HhYOLd0;ee0JgYOKc0:9Aec0<_[OIb08:Gcc0:`[OFc099Jac0>_[O[Oh0=41cc08n\\\\OH^O3cc06l\\\\OM\\\\ONhc05l\\\\O?fNA]d01k\\\\Om1Uc0SNj\\\\On1Vc0RNj\\\\On1Vc0TNg\\\\Om1Yc0TNe\\\\Ol1\\\\c0UNa\\\\Om1^c0WN\\\\\\\\Ok1ec0VNW\\\\Ol1kc0SNT\\\\Ok1oc0UNP\\\\Oj1Sd0UNl[Ok1Vd0SNj[Ok1[d0SNd[Ok1`d0SNa[Ok0QORObe00][Oc0Pf0[OQZOHkN6[g00jYOJPO0Yg03gYONUOIWg06eYO1Rg0JQYO5eh00000000001N2N2Nk\\\\j3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"SSd3>ii0f0C2O2_Oe0F6J5J;G5K4L4K6K5J5M3M2M4M2M2N4M4L2N2N2N2N1N3N1O2N101O0O100O101O00000000000000001OO101O01OO2O0O100O2O001N1O2O1O1M3O5K2M2O0O2N3K6H7G9I7L3N2O1O001O1O2N5K2N1O1O2N2GlWOPNXh0l18M3M3N2N2N3M2N102M3M3M3N2M3M2M5L4L5K3LP^R6\"}], [{\"size\": [848, 480], \"counts\": \"fk_46Wj06I6L3L4M2N3M3M2N3N1000000010O001O000000001O00000000000000000000000000000000O1000000O100000000000010O00O1010O01O1O001O001O00001O00001O1O0000001O00000O101O0O100O101N101N101N2O0O2O1M4L_^a5\"}, {\"size\": [848, 480], \"counts\": \"m[f2a0di0<G9J6H8C<H9mNS1[Oh0C;G:A>E=VOP1[OS1ROe0\\\\O:H6J4nDTG\\\\4o8_KXG[4l8bKWGZ4l8dKWGY4k8fKWGW4l8gKVGV4l8iKUGU4m8iKVGU4k8jKVGT4l8jKVGT4m8hKVGW4k8TKjGi4Z8SKiGk4Y8SKiGj4[8SKhGi4[8UKfGi4^8mJkGQ5X8cJSH[5Q8^JTH`5P8XJVHf5n7SJWHi5o7QJTHk5S8PJPHk5X8oIkGn5Z8mIiGS6X8jIjGV6Y8dIjG\\\\6X8_IkGa6W8ZIkGg6W8UIkGk6X8oHkGQ7W8lHjGT7Z8fHhGZ7_8^HbGb7c8WH_Gi7i8lGZGT8a=000001O00001O00001O0000lNcGU@]8h?gGW@Y8h?iGX@V8g?kGY@U8e?nGZ@f0Bh5S`0dIZ@a0Hi5l?hI\\\\@<Lk5f?lI]@61m5_?QJ^@16m5[?TJ^@N9m5Y?XJY@K`0m5W?\\\\JS@Ek0n5X?aJcA_5h>TJ[Ak5S?dIPA\\\\6ba0000001OO1000000001O00000000O10000000000000000000000000000001O00000000O1fNYIk^Og6Ta0[Ik^Oe6X4WIgJb1o:cNQFd6U4aK[5lMaFb6Y3XIZLh2^9`MnF`6Y3\\\\IWLo2X9VMWG_6Z3]IVLR3U9RM[G_6Y3_IULV3Q9nL`G]6Y3`IVL^3g8fLjG\\\\6Y3aIVLa3`8dLQHZ6X3bIWLd3Z8bLWHX61YIP2:]Mh3U8`L\\\\HU60]IP26_Ml3n7_LcHR6O`Io13aMP4[7kLUIb50aIn12cMS4S7lL\\\\I]50cIl11fMW4j6lLdIY5OeIl10fMY4e6lLjIV5OgIi1OiM\\\\4_6jLPJT5OhIg10jM_4X6iLWJP50iIe11kMc4o5gL`Jm41jIb10nMg4g5eLhJj40mI`1OPNk4^5dLQKe41oI]1NSNo4U5cLZKa40QJ]1LTNU5k4aLdK]4OTJ[1JWNX5c4bLkKX4NWJ[1HYN]5Y4`LULT4L[J[1D[Nc5o3^L_LP4J^J\\\\1A\\\\Ni5e3\\\\LiLl3HbJ]1\\\\O]NP6Z3[LSMh3GdJ_1XO]NV6o2]L]Ma3FhJ`1SO_N[6^2dLmMV3ClJc1oN^N`6o1jL\\\\Nl2@QKe1iN`Ne6_1PMlNa2ZOZKi1_NcNl6n0SM[Od4S1\\\\GeNR7<ZMK[4Q1XGjNn<4lKQ1WGjNn<4lKR1UGjNP=2lKT1TGkNP=0mKT1SGlNQ=NnKU1QGmNQ=NnKU1QGnNQ=KPLV1oFoNQ=JQLX1mFnNT=GPL[1lFnNW=@RLa1gFPOTg0P1lXOPOTg0o0mXOQOTg0n0lXOSOSg0n0lXOROTg0m0mXOSOSg0l0nXOTOQg0l0PYOTOPg0k0PYOVOof0j0RYOVOnf0i0SYOWOmf0h0UYOWOjf0i0WYOWOif0h0XYOWOif0h0XYOXOhf0f0ZYOZOff0e0[YO[Odf0f0]YOYOcf0f0^YOZObf0f0]YO[Obf0e0_YO[Oaf0d0`YO\\\\O`f0d0`YO[Oaf0e0_YO[Oaf0e0`YO[O_f0d0bYO\\\\O^f0d0bYO\\\\O]f0d0dYO\\\\O\\\\f0d0dYO\\\\O\\\\f0c0eYO]O[f0b0fYO^OYf0c0gYO]OYf0b0hYO^OXf0b0iYO]OWf0c0iYO]OWf0c0iYO^OVf0a0kYO_OUf0`0mYO@Qf0a0oYO_OQf0a0oYO_OPf0a0RZO_Ome0a0SZO_Ome0`0TZO@ke0a0VZO^Oje0c0VZO\\\\Oje0d0VZO\\\\Oje0c0XZO\\\\Oge0d0\\\\ZOZOde0e0_ZOZO`e0f0aZOYO^e0g0dZOZOZe0f0hZOXOWe0h0kZOWOUe0i0Y20O01O0010O0100O010O1O100O1O010O1O010O1000O0100O001O10O01O100000O010O010O010O01O00100O010O01O010O01000O10O010O0100O001O010O1O100O00100O10O1001O00O10O10000O01000000O01000O010000O100000O100000O01000001O10O10O00000010O01O000100O01O1O010O1O100O1O010O2N10000O2N1O2N2N2N0O2O2L^dd0\"}, {\"size\": [848, 480], \"counts\": \"Rja62]j02N101N10000O10000O100N2O1O1O1N2L5K4I5N3N1M2O3L4I7K5K5N1M2fNXNnYOh1oe0dNhYO\\\\1Zf0kN]YOV1ef0PORYOR1Pg0R15L4LTO^MRZO_2Pf0bMPZO\\\\2Qf0eMoYOW2Uf0iMlYOT2Uf0nMjYOo1Yf0QNgYOl1\\\\f0TNdYOi1n0RNdc06][Og1m0WNec02^[Of1j0\\\\Nhc0N^[Of1i0^Nhc0L`[Oh1d0]Nlc0K`[OV25QNZd0Ia[Og3_d0ZL`[Of3ad0YL_[Og3ad0ZL^[Oe3cd0[L^[Od3bd0]L][Ob3dd0^L\\\\[Oa3ed0_L[[O`3gd0`LX[O_3id0bLV[O]3ld0bLT[O\\\\3Qe0bLnZO]3Ue0aLlZOZ3Ze0fLdZOm1kf0TNTYOe1Sg0SNaXOM<n1_g0RN`XOl1kg0J;K9M4L5L3M3L4M6J6I7HnPl3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"^co3Q1Yi0`0_O=I3K9F7J7I5L6J5K4L3L5L4L5K3M3N2N2N2M3L4O1M3N2N1O2M202M1O2N1O100O101O0O10001N100000000001N101N101O0O10001N1O1O2N2N2N101N2O1O1O1N2N2N1M5G8L4J6N3L3M3N3N2M4L3L4M2N2O2M2O1QOUXOWOmg0f0UXOXOmg0e0VXOZOkg0d0WXOZOlg0c0^XOSOdg0k0^XOSOdg0l0]XOROfg0k0\\\\XOPOjg0m0n0O2M2N2O1N2O2N2N2M5K2O1N2O1N2O0O]ib5\"}], [{\"size\": [848, 480], \"counts\": \"Sg]55Wj07J4M3L4L4L4M2O2O0000010O0001O00000000000000000000000000000000000000000000O1O100O1O1O1O1010N10010O001O001O001O001O0000001O0000001O0000001N1000001O0O101O0O101O1N2O0O3M3M4JTbh4\"}, {\"size\": [848, 480], \"counts\": \"]lm26Qj0=D:G8H7J7E;F:I8F;F<D;G9G8I8G:F=D:F>A9G=C:F7F9E:C>I6M3L4L4M4L3M3M4M2O2M2O2N2M4M3L4L5J4nDZFW5i9dJ[FY5h9dJ\\\\FY5g9dJ[FZ5g9cJ[F\\\\5h9_J[F`5h9jIlFT6X9fIlFZ6V9`InF_6T9hHfESM[1T:R9]HkGa7Y8WHmGi7U8QHoGm7W8jGnGT8V8fGnGY8V8aGmG^8X8[GkGd8Y8WGhGi8]8QGeGn8b8iFaGV9g8bFYG^9R9SFSGk9i<11N100O1UO^_OgGb`0o7Z@_Gg?[8a@cG_?Z8]1N2M3Gh]OXH[b0g77O1N2O1N3N1O1N2OSO`Hl^O`7o`0kHl^OT7Qa0QIm^On6Ra0UIm^Ok6Ra0WIm^Of6Ta0\\\\Il^Od6Qa0`Io^O_6n`0eIQ_O[6m`0gIS_OY6Pa0eIo^O[6Sa0dIl^O\\\\6Va0cIh^O^6[a0`Ic^O`0M[4ea0SKZ^Oa05Z4fa0QKS^Oc0;[4fa0nJo]Oe0>\\\\4ja0gJk]Oh0?`4eb0QK_]Oo4jb0fJX]OZ5Pd0O0000001O000000000000O1001O00lCZK^2f4^MfKY2[4dMnKV2R4gMVLT2j3jMdLj1\\\\3UNjLf1V3ZNnLb1R3_NPM^1P3eNQMW1o2lNSMo0m2ROVMj0j2WOZMd0f2\\\\O^M`0b2AaM;_2FeM5[2MgMOY22iMKW24mMIS26QNGo19TNDl1<WNAi1`0YN]Og1cKdJP1g3Z3e1eKiJn0e3Z3a1gKPKj0b3S2SL]J[5d2TKk0a3n1SLbJX5d2XKlN_OTOQ4e4QLgJY5a2ZKkNATOl3f4RLhJY5b2[KiNBSOk3f4PLlJY5`2_KfNBUOh3e4PLoJX5_2bKfNBTOe3c4QLUKV5\\\\2dKhNBROe3`4RLYKU5Z2dKlN@POg3j3gKVK>i0R5X2dKoN@nNg3d3hLWL_4U2cKSOAkNg3_3kL]L[4T2dKUOAiNg3Y3nLeLW4Q2fKXO_OgNi3T3oLlLU4n1fK]O[OfNl3l2RMSMS4i1iKDTOcNo3f2VMZMQ4`1mKNlNbNQ4]2\\\\McMm3W1RL6dNcNS4T2`MkMj3f0aLh0QNcNW4i1eMUNe3>eLQ1jMcN[4\\\\1iMbN`39fLU1gMcN_47dJROj3e0j20iL^1bMdNa9N]LBfLl1]McN_9Oa0]1QFdN]9Nc0]1QFeNZ9Of0[1RFfNV90h0Y1SFhNS9Ol0W1QFlNQ9LP1W1PFoNn8IT1W1nEPOm8IX1U1kEROm8G[1U1hEVOk8E_1T1fE]Oe8^Oh1R1dEIlN`NX9e0[2P1aE2S8mNc2j0[E8R8nNo2?oDb0S8mNP3`0oDa0R8mNQ3b0mD`0T8kNP3e0nD?T8fNR3k0kD=od0CS[O;md0EU[O:kd0EW[O9id0HX[O6gd0KZ[O3gd0NY[O1hd0N[[OOfd00a[OH`d08b[OE_d0;c[OC^d0=c[O@^d0`0d[O\\\\O_d0c0c[OZO^d0f0f[OSO]d0n0b201O1O2ROaVOh0di0O1O1O2OO01O010O001O0010O0100O101OO010O01000O01000O010O010O100O10O01O10O0101N100O2O001O0O3N0O2O1N11000O001O1N4L5K2OO01O01O010O002N2N2O3L5K6F^\\\\^2\"}, {\"size\": [848, 480], \"counts\": \"aPa61_j0000\\\\j01cUO3L10O1N3Nn`;:c^D9G8K4N2N2O1O1iWOXOef0g0]YOVOdf0k0a1O1O1O1GoMAbZO<\\\\e0KbZO2_e00`ZO0^e04PYO@o0:Rf08kXOAR19Qf0g0oYOJ`e05bZO0Xe0OiZO4Te0KnZO6Qe0KlZO7Se0JkZO9Se0HlZO9Te0FlZO=Qe0DnZO`0nd0@S[Oa0ld0_OS[Od0jd0\\\\OV[Of0hd0ZOY[Og0ed0ZO[[Of0fd0XOZ[Oh0Qe0mNoZOEmN^Oh01je0g0bZOFgf0;WYOBnf0>QYO]OVg0a0iXOYO_g0i0S120O002L7J3L5J4MhnP4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"gTW4d0di0<H7I7I:H4K6K4L4M3L3M3M3M3N3M2N2M2N2O2N1N5L2N2N10OO2O2O0O1O2N1O1O100O1O10000O100O100O10O0100O00010O010O100O10000O100000O101O0O101O0O2O001O10OO2O2M1O3M2N3L3N2N2O2M2O2O1N2N1O2N1O3N1N4L7K1M1O1O2N2M4M6I2O1N101O1N2O1O2O0O2M2O2N1O1N3N1O1O1O2M2O1O3M3M2N4K;CVom4\"}], [{\"size\": [848, 480], \"counts\": \"Y]n5;Qj05L4M2L5K5L3O2N110O01O000000001O000000000000000001O000O2O1O001N100O100O100O1O100N200O100O1000000000O10001O001O001O000O101O0O10000O10001N101N1O2O1N2N2N2N1O3L5J<AaP\\\\4\"}, {\"size\": [848, 480], \"counts\": \"em\\\\39Rj06K6K4J6J5L5K5K4N2M3L6H9Fc2^M:H5K5K5L4M2M4K4M4K4M4M2M3N3L3L5L4K6K5J6K5K6I6K6J8I8H9H9F8H:F<WBPF[:\\\\:WEkEe:_:QEdEm:d:jD_ES;j:RDjEm;]:iChET<_:cCeE\\\\<X<O1O1O10O01O1N2O1O1O10O01O1O1O010O1O0010O10nNUB^Ei=Y:dBfEZ=Y:kBeEU=X:PCfEo<W:XCeEh<Z:]CbEd<]:_C`Ea<a:e11L4M3O2L3M3N2N2M2N3L4O1M47H:F6K4K5L5J4MZMcE_EY2]M\\\\5[`0UJk_Oh5[`0TIZ_O3?g6^`0bHd_O`01n6Ya0fHl^OZ7Ub00001O01O000kEdHV1\\\\7iNhHT1X7lNkHQ1U7POmHm0S7SOnHl0R7TOPIj0P7WOQIg0o6ZOSIc0m6^OTIa0l6_OVI>j6BZI:f6^N_HdIn0j7c6YNlHjId0i7`6[NPIkId0d7^6_NQIkIf0a7Y6dNRIkIg0^7W6fNTIlIh0Z7U6iNTImIj0V7R6mNUImIk0U7n5nNXImIl0S7k5POZImIl0P7k5SOYInIn0l6i5TO\\\\IPJm0i6g5UO_ISJj0f6h5TNaJWKHc6f5bMWKkKUO`6d5`M^KQLnN\\\\6d5_McKVLiNY6e5ZMiK^LcNT6f5SL\\\\HfM_34_NQ6f5PLkHUM]3l0RNk5g5RLZMVNnLd5i5TL]MWNkLc5h5TL`MXNkLa5e5RLfM\\\\NiL_5`5SLjMZNlL_5[5VLkMSNSMe5U5TLiMTNXMe3TMPL7g0l7U1eM]NWM_3RNlLW7R1bMbNWM\\\\3TNnLT7R1cMcNWMX3UNRMT7P1bMeNWMT3VNWMS7m0aMiNWMm2ZN\\\\MP7l0`MkNWMh2\\\\NbMm6j0aMlNWMb2_NhMi6i0cMmNVM[2cNoMe6h0bMnNYMS2eNWNb6e0bMROYMi1hN_N`6`0cMYO[M[1hNlN]6;cM^OVN4RN3V69dMAd16h08fMBa15l06dMF_14o02eMJ[14S1NdMNX14Y1FcM6T13j8MUG2l8OTG0m80SGNo82QGMo84QGIR97RGAQ9`0`80O100O1O0001O01O3N1N100O100O10000O01O1N3N1M5K7Gbal3\"}, {\"size\": [848, 480], \"counts\": \"V]V75^40Ya05a^ON]a0;W^OJga0<Q^OGoa0:l]OKSb07f]ONZb04^]O3ab0O^\\\\O@WNj0[e0G\\\\\\\\OP1dc0PO[\\\\OQ1ec0POZ\\\\OP1fc0ROV\\\\Oo0jc0TOQ\\\\Oo0oc0TOm[Om0Td0SOj[Om0Wd0SOg[On0[d0SOb[Om0ad0SO[[On0gd0TOT[Om0od0SOoZOZOVOi0ne0<YZOiNO@3`0Pf0X1PZOcN`g0\\\\1aXObNag0\\\\1`XOaNcg0[1aXO_Ngg0\\\\1j0L4M3L4M2M6K6J4J\\\\lZ4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"\\\\kl4=3F02Yi0T1I3J:F7L3N1N3L6K3M3M4M3M1N3N2M3N2N2N2M3OO02N1O2N2O001N3M3N2N3L3N2M2OO1O1O10000000000100O1O001O01O0102M3NO010O001O1O1O001O001N2N2M202N1O2N0O3N2N2N4K3M3L4`Nb1E:H9H;Bog\\\\5\"}], [{\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"hhg3=Pj05L3jXO\\\\O\\\\d0f0`[OCZd0>c[OGYd0<b[OJYd09d[OLXd07c[ONZd04c[O0Zd02b[O4Zd0Nc[O6Yd0Md[O7Yd0Kd[O9Yd0Jb[O;d3[N`;]1i@<d3YNa;]1g@V1n2_MY<]1d@]1n2WM[<_1]@e1U3nL\\\\<`1Y@h1V3lL`<^1S@m1T3mLg<^5RCiJk<Z5oBkJo<X5mBkJQ=X5lBjJR=Y5lBgJR=]5lBdJP=`5oBaJm<d5QC]Jl<g5RCZJl<i5RCXJk<l5RCVJm<l5QCUJm<m5PCVJo<l5nBUJR=m5lBTJS=m5kBVJS=l5jBVJU=l5hBVJW=k5fBXJZ=i5bBZJ]=h5`BYJ`=h5^BYJc=h5ZBZJe=g5YBZJg=h5PB`JP>a5kAcJX<aMeDm7POdJU<jMeDe7QOdJV<oMeDc7lN`J]<SNcDc:[;aEcD^:\\\\;fEaDZ:^;iEaDV:^;nE_DR:a;PF^DP:`;SF^Dm9b;UF]Dk9b;XF[Dh9e;ZFYDg9f;[FXDf9g;]FVDc9k;_FRDb9m;bFoCo8HXEY<m1hCo80SEX<X=lCgBR<W=QDjBn;V=RDjBm;V=TDjBl;U=VDjBi;V=YDiBg;V=\\\\DfBf;Y=h001O1O0O2O1N10lDkBo8S=RGnBn8Q=QGQCo8m<RGTCn8j<RGXCn8f<SG[Cm8c<SG_Cm8`<oFeCP9Z<nFjCR9U<jFPDW9o;dFVD\\\\9j;`FZD`9g;\\\\F\\\\Dd9e;UFaDk9`;PFdDP:^;jEfDV:[;fEhDZ:Z;_EkDa:W;XEnDi:T1TEb6L`HP;j0[Em8f:PG]Eo8c:PG_Eo8b:oFaEo8_:QGbEn8^:QGdEn8]:QGeE[MUO^;W;VGlEf8T:YGoEe8R:ZGQFc8o9]GSFa8n9]GUFa8k9_GVF`8k9_GWF_8j9_GYFi0^NlMNX5[;SL[Fd0aNoMNU5W;VL^Fa0`NSNNS5U;WL`F?_NWNNQ5T;WLeF8]N`NLo4R;XLRHgNWM1Gn4Q;YL^HSNSMf0_Ol4Q;XLkIlNVKj4P;WLmInNVKh4o:VLnIQOWKe4l:TLSJVOTKc4l:mKWJAoJ_4m:hKZJHlJ]4o:YKbJ:aJ[4Tb0dKo]OY4Qb0hKQ^OU4Pb0jKT^OR4la0nKW^Om3la0RLX^Og3ka0YLW^Ob3la0^LW^O[3na0eLT^OT3Pb0lLR^Oo2Rb0PMQ^Oi2Tb0VMP^Ob2Tb0^Mo]OY2Xb0fMk]OQ2[b0oMh]Oh1_b0WNc]O^1fb0cN\\\\]OQ1mb0oNV]Oe0Tc0ZOo\\\\O:Zc0Fj\\\\OHec07Z3000010O0000001O01O0000000000001O01O0001O00001O001O001O001O000000001O0010O01O0000001O0000010O0001O01O0001O0010O01O1O0000001O00001O00001O000000001N101N101N2N2N3M4K[di2\"}, {\"size\": [848, 480], \"counts\": \"Z[g52^j0001N2O1O0O101N1O1O1O1N2O100O100O1L4H8L4M3M3L4K5H7J5K5M4[NZN_ZOh1_e0_NZZOb1fe0dNRZO[1Qf0jNgYOT1_f0W16M3N2K5OO001011O2NWZOTMQd0l2k[OZMTd0f2i[O^MVd0a2j[OaMUd0`2i[ObMUd0b2g[O_MYd0f2a[O[M^d0Y3kZOkLUe0X400000O101N1O101M5K6J6aN]ZOfMje0T1gYOTOdg0j0_XOnNhg0o0\\\\XOkNhg0T1\\\\XOeNig0X1i0O2M3L4LUYOmN`d0o0e2K6I9EbTh4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"fiW5k0\\\\i0i0ZO?@:K5J6J8J5J4L4M3M2N2M3N3MO10N3O1O1O1O1N101O1O1O100O1O1001OO1000000000000001O001O1O1N3M2N4L3N2N2M3M3M2L5L4L4L4ZNkXOKXi0[OQjd5\"}], [{\"size\": [848, 480], \"counts\": \"eck4<oi08K3L3N3M3M2N3M2N3M3O01O01O10O010O010O01O01O010O000000000001O0000000O10000O100000000O10000O100O1000O101O2M2N2O2N4K4M2M202M1O00O1001N10O1000O2N2M2O2N3M5JgSb5\"}, {\"size\": [848, 480], \"counts\": \"]d_3:ni0`0VVO]OTi0S1L3M3M2N2N2K5M2K6L3M4M2M3M5M3L4K3N2oJYMXBj2]=iMXBY2b=SNUBQ2d=]NQBf1l=bNkAc1f;eLn@8^1n1b1\\\\1k;XM[Be1_1[1i;_M`B^1[1\\\\1m;`M_B`1X1T1U<eMYBd1V1k0_<P2SCVNk<U2fBQNX=d7M3M3N2N2OH9O001N1O2M3N2N2M4L4J6M2MmMhDVEU;g:YEQEc:Q;bEkD[:V;kEgDS:Z;QFcDk9`;XF]Dg9c;\\\\F\\\\Db9e;`FZD]9h;eFWDX9k;iFTDU9\\\\3aEj3\\\\1iHo8]3jEh3Y1jHk8[3SFh3S1lHh8Z3[Fh3o0lHe8T3fFo3i0iH_8X3lFn3k0bHY8_3nFo3g;PL[DQ4b;RJWCB[1]6[;kIUD`NTOGj1l7l:jIPGV6m8gI]GU6`8iIeGV6Y8iIkGW6U8dIPH[6Q8`ITH`6o7WIXHh6m7lHZHT7\\\\=ZHa]Oe7_b0[H`]Of7`b0ZH`]Of7eb0O100000002N2N1O0000001N100000001O1O00O100O2O00000002N1OnNgHm^OY7o`0nHn^OR7_2fHR;a0ZBi6c2hHm:f0ZBf6g2gHh:j0YBg6l2bHb:P9ZEXGZ:P9eESGT:R9lEoFn9V9PFnFh9Y9VFkFa9[9^FhFZ9^9fFcFU3ZOBY:XM^FQ3JTOo9iM[Fj2:iNc9[NUFe2f0aN]9hNoE]2Z1WNo8ZOiEX2e1RNi8CdEj1Z2WNY8L_Ed1e2WNS8O\\\\Ei1f2oMV8O[EP2d2iMW8K_E[2`2`Mh8XOVEU3W2WMT<f2SDlLX<P3i5L1N6J=Ca0_O5K5K3M3M3M2M3N1N2O3M2M3N2N1O2M2O000O100O100000O0100O10O1O01000O0100O10O10O1000O0100O10O10O10O01O0O2O10O1000O010O010O1000O010O0100O010000O0100O100O010O01O001O000010O010O00010O10O010O00100O001O010O1O10O0100N110O1O1000000O010000O010O10000O100O010O10000O1000000O100O100O2O0N3N2M4Lohh1\"}, {\"size\": [848, 480], \"counts\": \"Wj\\\\63Yj09J6K4L3L4K4M2N1N4M2N2N2]MeNn[O]1Rd0dNk[O^1Wd0bNd[Oa1\\\\d0bNZ[Of1gd0XNoZOX1gNTO_f03kYOl00kNXf0Z2V1XOe0I5K6KSYOfNld0V1U[OkNnd0P1^2K5K5K6I8EiQW5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"RR_56ni0`0UVO]O2NXi0V1I>_O:J9H2N2M4L5J5[XOWM]g0Q3K5M2M3N1O3N1N3N2M20001O0O1O1O100N2N5L1000O1O10O01O1O00100N2O1N1O2N2O00100O100O3GUYOeLPg0V38M3M4L4M6I6J9Gb0^O<D6J4M3L2O4L3M3M2M2N4KPhR5\"}], [{\"size\": [848, 480], \"counts\": \"eWQ54Wj09I4N2L4N1N3M2N3L4N1O2O01O01O01O000010O000001O00001O01O0001O0000010O00O2O01O00O2O0O2N100000010O02N1O2N2O1N101N1O2N100O1O1O4L2N2O0O1O1O001O00001O1N1O2N3M[_\\\\5\"}, {\"size\": [848, 480], \"counts\": \"gfY3:Sj05L3M2N3M2N3I6B>QHeNeF_1T9lNgFU1T9ROiFo0R9XOkFi0Q9]OkFd0P9DmF=o8KkF7o8U1hEnNm9d1iE_Ni9T2oEnMg9`2RFdMj9b2PFbMn9c2kEaMn9g2kE_Mo9g2kE_Mo9h2lE[Me9V3TFPMd9Y3UFmL`9_3YFgLb9_3ZFdLa9b3\\\\F`L`9g3[F[Lb9j3ZFXLb9P4XFRLc9X4VFjKg9_4QFcKm9h4hEZKU:V5[EmJc:m5^DZJ`;]:L3M3N2O1NQOlDfBS;Y=QEeBn:Z=UEeBi:Z=ZEfBe:V=aEiB]:P=lEQCQ:h<YFWCe9f<`FZC^9c<hF\\\\CV9c<mF]CQ9c<RG[Cm8e<UG[Ci8e<YG[Ce8e<^GZC`8f<bGZC\\\\8f<fGZCX8f<jGZCU8e<nGZCP8f<RHZCm7f<THZCl7d<VH[Ck7d<VH\\\\Cj7b<YH]Cf7b<^H\\\\Cb7b<aH\\\\C`7b<bH]CRN0e67YI[<S2\\\\CmM8d67UIT<\\\\2\\\\CjM;e69QIn;b3mC\\\\36PIm;c3PD\\\\34PIj;d3UD[32PIg;d3ZD\\\\32lHd;f3^D]31iH`;h3cD_30cH_;g3iDf3\\\\<QLPDn3o;iJjB\\\\N\\\\1k6h;dJdE\\\\5[:]JmEc5Q:RJ]Fm5a9PJdFP6Y9oIkFQ6T9mIPGR6n8lIVGT6i8iI[GW6e8eI_G[6c8_IaGa6e8SIaGm6Q>000001O0000001O00001O001O00001O000000001OfNmHV_OT7g`0RIV_On6h`0UIW_Ok6h`0VIX_Oj6h`0WIX_Oh6g`0ZIX_Of6h`0[IW_Oe6i`0\\\\IW_Oc6h`0_IW_Oa6h`0bIV_O^6i`0dIV_O\\\\6i`0fIV_OZ6h`0iIW_OW6g`0lIX_OT6f`0PJX_OP6e`0UJY_Ok5\\\\7QJTHQO^7[1QIb5n6TLeNbNZJZ5h6mLYNRNkJQ5a6^MZNgMTKj4Z6nMXN[M^Kg4o5[N_NPMbKe4h5gN^NgLjKb4h5nNTNdLSL^4Q2RIW1R6:cL^LY4m1XIY1Q62cLhLT4l1[IX1Q6MdLoLP4k1_IV1P6FhLXMj3l1`IU1o5_OnL_Mc3l1cIT1n5XOSMhM\\\\3k1eIV1l5mN^MlMT3o1fIX1g5cNR52\\\\E]1`5VN]58_E\\\\1[5kM_5e0eEU1Ub0fNU^OV1ja0eN`^OV1`a0fNh^OV1Xa0gNm^OW1Sa0eNT_OX1l`0`N^_O^1k`0QN`_Oj1hd0K4M2N3M3M2N3M1O4L3M2N00001O0000000001O0010O0000001O001O001O1O00000000000000000O101O000000000000000000001O01O00001O00000001O001O0000001O00001O00000000000000000O101O0001O000000000010O000000000000001O00000000000000O10001O0000000000000O101OO10O10001O000000000000000000001O000000010O2N10O1O001O1O001O00100O001O1O1O1O1N3N3L4M5JbXo0\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"[fZ5i0`i0a0A:I5I7K5eWOmMQh0]2L3L4L4M3L5K4M3M3L3M3M4M2M3L4N2N2N2N2O1OO2O0001O000000000100O001O1O1O1O2N1O1O2N1O1O1O2N2N1O1O1O1O1O3M2M3N2M2O1N2M4L5I8J9G5L5K7I4K6K6J5K4M3L4L5K6K4KP`P5\"}], [{\"size\": [848, 480], \"counts\": \"]^Y5:Tj04L3M3M3N1L5M3N100O2O001O01O000010O000001O00000000000001O00000000000000001O000010O1O1O100O1O1O1O100O1O100O1O001O10O01O00001O001O0O2O001N2O1N101N4L4KemU5\"}, {\"size\": [848, 480], \"counts\": \"Q[^31^j01O1IOoUO1fi04WVON2Obi0>^VOB]i0e0`VO[O[i0n0O3K6J;FV2hM9H6g@iKS8[4jGjKo7\\\\4nGfKn7^4PHeKk7_4SHdKi7_4VHbKd7e4YH^Ka7h4dGgJQKb0U=m4fGQKdJ8a=k4hGPLS8U4kGmKo7Z4nGhKi7b4TH`Kf7h4UH[Kf7o4SHSKf7X5RHlJi7_5iGhJT8e5]GaJ`8m5nFZJn8R6aFWJ]9P6PF^Jm9n5dEWJ[:Q6\\\\ERJa:W6VElIh:[6PEgIo:d6bDbI[;k:O1N2N2N2N2N2O1O1N2N2O1N3N1N2NPOfEoAV:P>oEoAP:o=TFPBj9P>XFPBe9X=mEbBa06b9T=[GkBe8Q=_GoBa8n<cGQC]8k<gGVCX8g<lGXCT8f<nGZCR8c<QH]Co7`<TH^Cn7`<UH^Cl7`<VH_Ck7^<XHbCh7[<[HeCe7Y<^HfCaMLZ9\\\\<WIiC[M0\\\\9T<]IkCUM4]9o;aIlCPM8^9j;eImCjL=`9c;jIjDV6T;mIlDR6R;PJnDP6Q;YHTD_Oo0X8k:SHfDPOm0l8\\\\:lG\\\\EeN?_9R:hGgGW8W8eGoG[8n7cGWH]8f7`G`H`8^7^GfHb8X7ZGnHf8R7QGWIo8U<01O0000000000000000001O00000000001O0000001O0000gNhFZAX9d>kF\\\\AT9c>nF\\\\AR9c>PG\\\\AP9d>QG[Ao8e>SGYAm8f>UGYAk8g>VGXAj8g>XGYAg8k5iFo1c0THd8l4THd2\\\\O_H_8b4lHa2hNlH\\\\8T4gIb2PNYIY8i3\\\\Jb2_MdIU8i3bJW2`MPJn7i3iJg1cM_Jf7h3nJ]1aMkJc7f3UKQ1^MYK^7e3\\\\Ke0ZMfK[7d3bK;XMPLX7c3gK1VM\\\\LV7`3hKKWMeLS7^3lK_OZMRMj6`3SLPOYM_Mf6`3VLdN\\\\MlMo5FoFh3l5WN_MZNf5ETGg3o5iMaMjN\\\\5BZGj3n5[MfMWOl5\\\\3iLgLgMLg4D]Gi3Z;bLZME^Gg3Y;bLWN^3i1aLYN]3i1`LYM1ZG_3Qe0cLmZO^3Re0dLQ[OX3nd0fLW[OX3hd0fL^[OW3ad0hLc[OV3\\\\d0iLj[OR3Vd0mLP\\\\Oo2oc0oLV\\\\Oo2le0J6J5^NRXO6Rh0BTXO=ng0\\\\OXXOb0mg0SO[XOl0fh0O0O100O101O0O10000O100O10O10O101N100O0100000O1000O11N1O10000O10O01000O010O0100O010O01O10O10O100000O1O1O100O1O01000000O2O1O1O1N10O10O01O010O01000000O100O1O10O001O10000O1O010010OO1O010O1O2O1N1O101N8HhjW2\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"fS]5f0ai0b0B<F8J4J6K5L3L4L5L2M4M3M3L3O3J4O2N1O1O1O1O2N001O1O00001O00001O0000001O0003K3L3O2M2O101N00N2O23L2O1O2N1O1O1O2N2N1O1O2N101O0O2N100O2N1O2O2M2O2M2O1N3M3M6J4L4L4K6J8H5J5J5K8DjSi4\"}], [{\"size\": [848, 480], \"counts\": \"`S`5:Tj04L3M3K5M2M4N1N3N100010O001O010O000000001O000001O00000001O0000010OO20O001O100O1O011N100O1O2N1O100O1O1O001O1O001O001O1O002M102N1N4KRgV5\"}, {\"size\": [848, 480], \"counts\": \"aef32Uj0=H5K4L5L3I8M2N2L6SXO_Oce0l2H5L5K4L5M2L4K6L3I9J5I7L4K6J7WAVJc8o5XGVJb8P6[GQJd8S6XGoIe8V6VGlIf8[6UGhIh8]6_FUISLa0[=`6\\\\FVJa9S6WFPJf9X6QFkIm9\\\\6lEfIR:_6hEdIV:b6bEbI\\\\:c6\\\\EbIc:c6PEfIn:`6eDiIX;^6lCYJS<n5bCXJ\\\\<n5\\\\CVJb<m9N2N101O001N2N2O1N2O1O1O1O1O2N1N2N2O1OoNWD]Ch;b<\\\\D\\\\Cc;b<bD\\\\C];g;_DoC;8U;e;jEZDU:d;PFZDo9e;VFWDj9g;[FWDYNLe:k;YGSDRN7`:e;RH_Dl7`;THcDj7Z;WHjDg7T;YHoDf7o:\\\\HSEb7k:_HWE`7h:`H[E_7c:_HaE`7_:SHoEl7o9RHWFm7e9RH`Fm7^9VGbGj8[8SGkGl8T8SGoGm8m7QGZHm8d7oFcHQ9[7mFiHR9V7jFPIV9Q7dFTI[9m6_FYIa9i6WF]Ii9g6mE_IS:`;N1000000O2O0000001O0O1Dl_O[FV`0b9=O1OkN^F^Aa9`>dF^A\\\\9`>gF_AX9a>kF^AT9b>mF]AS9b>oF^Ao8c>SG[Am8o5\\\\Gn0IRIk8j5fGP1@UIi8l5jGl0^OWIh8n5mGg0\\\\O[Ie8P6YH9TOfIc8S6`HMoNoI]8Y6jH_OkNXJZ8[6QISOiNaJU8_6UIhNjNhJP8b6YI^NlNoJk7e6[ITNoNVKe7j6\\\\IjMRO\\\\Kb7k6^IcMTOaK^7m6_I\\\\MXOeKY7R7cIoLZOmKR7V7jIbLZOVLl6Y7lIZL^OZLf6_7lIRLB^Lb6a7nIjKFbL\\\\6f7oIbKKfLV6j7PJYKU9j4lFlJZ9j2VDSL_2l0^9j2]DZLV2d0b9^2YEcLV1f0g9c2\\\\EeLn0=m9i2]EhLl0NQ:U3ZEmLo0VOS:h3UERMQ?k2SAXMh>b2bAQNg=f1fBYNW=\\\\1XCbNg<U1dCiN[<U1iCkNU<T1nClNP<S1RDmNm;R1VDmNi;R1ZDmNf;Q1]DoNa;o0cDPO];l0gDVOV;i0mDWOR;g0QEYOm:e0WE[Oh:a0]E@a:<fECX:8oEFR:6RFIo93UFLl90WFOj90XFNj9OYFOh9O[FOf9M_F1c9JbF3a9GfF6\\\\9CkF;\\\\9ZOiFd0da0M3N3JiUT4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"fTg58li0h0^O:I6I7I7K5K4L4L4M3M5J5K3N2N2N3M2O1M3N1O001O1O010O1N2O1O101O0O1002O0O100O10O01O10O00000O100004L011M3I7K5L4L4L4L3N3M3M2M4L3L6J5I9I5K5G=DWWm4\"}], [{\"size\": [848, 480], \"counts\": \"RX[54Xj05M3N2M2N3M3M2N3L3M3O2O000010O00001O001O0000001O0001O0001O0000000000O10O101O0000001O1O001O1N2O001O1O1O001O001N2O100N2O1O1N2N3M2N^]\\\\5\"}, {\"size\": [848, 480], \"counts\": \"_Ro3:Qj08kWONce08WYOo0bf0b1L3L5L4L4L4K4K5J7J5M3L5M2J6M4M3\\\\_OiJj;\\\\5PDlJj;W5SDlJi;Z5RDiJj;]5PDgJm;]5[CYKb<k4ZCXKd<m4WCVKg<m4UCUKi<o4TCRKk<Q5RCPKl<U5oBmJP=V5kBlJT=Y5dBlJZ=Y5]BmJa=W5XBnJf=W5QBnJo=U5gASKX>Q5ZAZKf>j4QAZKo>T8N101N2O1O1O1O0O2O1O001O2O0O10WO[AgEd>V:bAhE]>V:fAjEY>P:PBmEP>e9aBXF`=d9eBZF[=d9hB\\\\FW=b9mB]FR=b9RC\\\\Fm<b9YDZFh:c9nDnFm:Q9dDbGY;\\\\8gDhGX;V8gDmGX;R8hDPHW;o7iDSHW;j7iDZHU;e7iD_HV;_7gDhHX;V7dDPIZ;P7dDTIZ;m6bDYI\\\\;f6bD^I];a6aDcI_;[6`DhI`;V6^DnIb;P6[DUJd;j5ZD[Je;d5WDaJi;^5TDgJk;Y5PDlJo;V5mCmJS<T5hCQKW<S5aCQK_<`90000O100000001O00000O1000001NbFSDhK[O\\\\8a<iKlDg2lNgIR<f3^EU2fNSJf;m3hEk1eNWJb;n3lEg1dN[J^;P4oEb1eN^JZ;R4TFZ1fNcJT;T4ZFS1eNiJn:W4`Fk0eNmJi:Y4fFd0eNRKc:[4lF>eNTK_:\\\\4QG;dNXKZ:\\\\4WG7cN[KU:^4[G2eN]KQ:^4^G2dN_Kn9\\\\4bG2a:NaENb:OcEL`:0eEbL[LZ2S>Q1gE_L]LZ2o=U1hE]L]LY2n=W1jE\\\\L\\\\LX2m=Z1lEXL[LZ2l=\\\\1mETL]LZ2j=_1lF]NW9a1lFZNW9e1lFVNY9g1kFSNY9k1kFoMY9P2kFiMY9U2mFbMX9]2oFWMW9f2[7K5K5K5M300O1H8O1N2O1N2N2O100N3L3M5K5L4L4K3O1O1O2M4L3M3M4HfhV4\"}, {\"size\": [848, 480], \"counts\": \"gnX45Uj07H3M50L5NcNFgXO;Wg0MbXO3]g03_XOM`g0<VXOEkg0g0fWO[O[h0\\\\10O1001N1I8O0010O2N1O2N2O1O100O2M2O1N3N2N2N2N3L;C6N2M2O2N2M3N2M2N3M3M5LQfm6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"o^k51Tj0i0]O9H9I:D5M3M2M4N1N2N3M3M3N2M3N1O2N2O0O2N1O1O101N100O010O2N2N01000O0100N3N2M3N101N1N2O2M4L2N2N2O2L3N1O2N3M3M3M3N2M4L4L6K3J8H8F;H[Wl4\"}], [{\"size\": [848, 480], \"counts\": \"Tga42Zj08I4M3M3L4L3M3N3N1O100001O1O001O00001O00001O0000001O0000000000000000O0100000O1000O10O100O010O100O010000O100O2O1N2O1N1O2N2N2M4K^iV6\"}, {\"size\": [848, 480], \"counts\": \"[og3:Rj05L4J5J6K5cLUOS]Om0_?mNc@?Kd0]?WO^@=2=]?[OX@`096^?^Om_Oe0d0N^?@b_Om0n0E]?B[_OR1U1^O^?DU_OT1\\\\1XO^?Io^OT1`1UO_?Ki^OV1f1QO_?Ma^O[1l1kNa?N]^O\\\\1o1hNc?1W^OZ1T2gNd?S3Y@oLe?T3W@PMg?R3V@PMh?S3U@oLj?S3R@PMm?S3n_OPMQ`0T3j_OmLV`0W3d_OlL[`0X3`_OjL_`0[3Z_OhLe`0[3V_OhLi`0\\\\3Q_OgLn`0^3l^OdLSa0]6O1O^Oh^OnGWa0f8a@oF]=R9bBRG[=o8dBRG[=Y8o@PH_1Na=R8RAPHW14e=j7XAQHo09g=f7]APHh0?i=a7`APHb0d0m=[7cAQH;i0Q>V7eAQH6m0T>Q7hARH2o0U>n6kASHNQ1U>m6oARHJR1V>j6SBSHFU1V>g6VBTHCU1W>e6ZBUH]OX1X>b6^BUHXO[1Y>^6cBUHSO_1Y>[6gBRHnNh1Z>U6mBnGjNn1Y>R6RCWJl<i5UCXJi<g5YCYJf<f5YC]Jf<b5ZC`Je<_5ZCdJf<Z5YCiJf<W5WCmJi<S5QCSKn<n4nBVKR=k4hBZKW=j4bBZK^=i4\\\\BZKc=j4VBZKj=j4nAYKS>b8O1000O0100000O1000000000O0100QOmA`ES>a:nA^ER>_:SB_Em=^:YB^Eg=`:^B]Ec=`:dBZE^=c:iBRE]=l:T1N2M@[ERA1Le:l>mK[AhMf>Y2hAWM[>k2lAkLU>W3PB_LS>o1QAULQ1_1T>[2QATLm0P1]>l2k@RLl0>g>`3a@PLl05h>j3a@PLm0Hf>X4b@nKm0]Og>d4`@PLla0n3Y^OPLea0n3`^OQL_a0l3f^OSLXa0k3m^OTLRa0j3R_OVLk`0h3Z_OXLd`0e3a_O[L]`0b3h_O_LT`0`3o_OaLn?_1j]OVO]2[Og?_1o]OQO^2_Ob?_1S^OlNa2GX?]1Z^OfNc2MQ?\\\\1_^OaNf22j>]1b^O[Ni28d>\\\\1g^OUNj2>_>\\\\1l^OlMl2h0W>\\\\1QCdNn<[1TCdNl<\\\\1TCeNk<Z1WCeNi<Z1YCfNf<Y1\\\\CgNd<W1^ChNb<W1`CiN`<U1bCkN]<S1eCmN\\\\<Q1fCoNY<P1hCQOX<m0jCROV<m0kCTOU<i0nCVOS<h0oCXOP<g0QDYOP<e0RDZOo;d0RD\\\\Oo;b0SD]On;a0TD^Om;?UDAl;;WDDk;9XDFi;8YDFj;6ZDHg;6[DHj;1YDOl;G[D6Tc0IYSf4\"}, {\"size\": [848, 480], \"counts\": \"`fX34\\\\j02N1O010O000O101N100000O01O0O2K5G:G8H7N3M2L4M2L4L5[N]NZZOd1fe0jNlYOU1Wf0QO`YOQ1`f0_1010001MNNF:33N1O201N101O1NWZOTMQd0n2i[OXMUd0k2c[O]M[d0g2`[O[M_d0o2V[OQMld0U3jZOnLVe0V40101NO2[O_ZOQL1Kce0b44N3N1N1UNZZOjMJ>Qf0Q1`2K8H9I1O1N2N2N3L4M7I^h[7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"cR`5e0hi06E:WOSOgWOQ1Rh0k0MO10M4N2N2O2N2O0O2N2N2N2O1O1N3O0N2O1O101M2O10000O1O1O01O010O001O1M3M3N3M3L3M4L5L4K6J5L6I5L4K4K7H7J6J8C[S_5\"}], [{\"size\": [848, 480], \"counts\": \"U_`3>mi0:J3N1N3N010O001O001O000000001O000O10000O100O100O1O1O1O1O1O1O1O001O1O10O01O100001N2O1O1O1O001N101O0O2O0O101O0O100O1O2O0O2O1N2N2N3L3N3ISgT7\"}, {\"size\": [848, 480], \"counts\": \"bg\\\\2b1dh0a0SOn0^O?F9E:I8H>B;D7K3L5L3M4L3M3M2N3M3L4L2N200010L3O1O1O1O1N3N2J5N2101M8F9J6I:H8Gb0_O9G8I7H6J<D5K3M2O1N2N2M3N2M2O1O100O1O1O1O10O0100O0100O001J6N2F910L4O1O00110SMY_ORLd`0e3h_OXLW`0d3P@[Lo?a3W@]Li?_3_@^L`?]3l@cLm>Y3YBgJnLk0e`0S4QCmKm<^3iCcLU<Z3oCeLQ<X3TDgLk;V3[DgLe;W3]DjLb;S3aDmL_;Q3dDPMZ;o2hDPMX;o2jDQMU;o2kDQMU;o2kDQMU;o2lDPMT;Q3kDnLV;S3iDkLY;V3fDhL\\\\;Y3dDeL];\\\\3dD`L^;a3bD\\\\L`;j2Y_ObMW5Ab;l2[_OaMY5ZO^;T3\\\\_O`MUf0^2nYOaMQf0^2RZOaMme0^2TZOcMke0]2VZOcMje0\\\\2WZOdMhe0\\\\2XZOdMhe0\\\\2YZOdMge0[2YZOfMfe0Z2[ZOfMde0Z2]ZOeMce0Z2^ZOfMce0Y2]ZOhMbe0X2^ZOhMbe0W2`ZOhM`e0X2aZOgM`e0X2`ZOhM`e0X2aZOgM_e0Y2bZOfM^e0Y2dZOfM]e0Y2cZOfM^e0Z2cZOcM_e0]2bZO_Mae0`2aZO]Mae0c2bZOXMae0g2T1O101O000O2O00000O100O2O00001N10001N100O2O000O2O000O2O1N100O2O10O0000100O0000010O00000001O1O00001O001O00010O00000100O1O1O1O1O1O1O1O2N2N101N002N1O3M3N2M2N4L3N3LZNgXO7Yg0ARYO;of0AWYO=if0_O[YO`0ef0\\\\O_YOd0af0YObYOg0^f0TOiYOj0Zf0nNmYOo0lg0O4L3L2O1O1O001O001O00001O001O000O200O00001O1O1O0000O00010O000000001O010O00000001N3M4K8EdoV3\"}, {\"size\": [848, 480], \"counts\": \"gXl26Vj04N200O2O0N101L3M2N2N3M4L3L4N2I6J7N0`NcNnYO^1oe0QOeYOQ1[f0TO^YOl0bf0a11N10ON2M3O4N2N1O00N2N201PZO]MUd0b2g[OcMXd0_2f[OcMYd0_2d[ObM\\\\d0i2V[O[Mid0V410O00O2O2N001N2N2N4K5K9G3dMgYO=\\\\f0BfYOVO:FTf0R1eYOQOdg0n0_XOgNlg0T1k0M3N2M4L4M2M6J;Ck_k7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"ndY69Sj0?C4L6K4K3N2N3N0O2N2O1N4M1O001O0O2O10O0001O00001O0001O001O00001O0O11O1000O0100000O011O1O0O2N1N3M3K5L3O1O2N2O1N2N019F<D4L2Nf^`4\"}], [{\"size\": [848, 480], \"counts\": \"Qn1>Qj02M4M101M3N1O100N2O100N200N20OO110OOO20O0110N2O1K5M3J6M3O1M3N2M3O1N2O000N3O0O020O1O100000O1O100O1N2O1L4O2M3L3M5L3SOoVO7gi0Nigj:\"}, {\"size\": [848, 480], \"counts\": \"al;2Zj09K3L2[OAVWOa0ih0_OWWOb0hh0^OWWOf0eh0[OWWOk0fh0VOYWOm0ah0WO]WOl0bh0TO^WOn0Ri01N1O1ZOiNRXOW1mg0lNnWOW1Ph0POiWOQ1Wh0oNhWOR1Xh0nNhWOS1Wh0lNjWOU1Vh0hNlWOZ1eh000O01O1O1O1O1O001O2N1N2O1N20O2OBUN\\\\XOd1Yh0O10G^NaWOd1]h0:N1O100ORNcWOi1^h0UNcWOl1ah0O1000N2HSNjWOo1Uh0SNiWOn1]h000O01H8NoMlWOi1]h0001O0N3N12O00M3J5N31O003M0O01001O0O1O0100O01000O1001N1O1N1000002N1O001O001O1O1O1O1O000O10jYO`NkMDYe0k1P\\\\OLjc04d[Ob0Xd0^Oc[Oj0Yd0XOd[OR1Td0nNk[OV1Rd0jNm[OX1Rd0hNm[OZ1Qd0hNn[OY1Qd0gNo[OY1Pd0hNP\\\\OX1nc0jNQ\\\\OW1nc0kNQ\\\\OU1nc0lNR\\\\OS1nc0nNR\\\\OCD_OZd0o0R\\\\OTO<Bbc0[1R\\\\OiNi0HUc0`1Q\\\\OeNP1Hob0d1Q\\\\OaNT1Ikb0g1Q\\\\O]NY1Hgb0l1P\\\\OYN]1Ffb0R2m[OVNc1_Odb0\\\\2i[OTN]f0m1cYOSN\\\\f0n1dYORN\\\\f0m1eYOSNZf0o1eYOQNZf0P2eYOQNZf0o1gYORNVf0P2iYOQNVf0P2jYOPNUf0P2lYOPNTf0P2lYOPNSf0Q2lYOPNSf0R2kYOnMUf0S2jYOnMUf0S2jYOnMVf0Q2jYOPNUf0Q2jYOQNUf0P2jYOPNUf0Q2jYOPNUf0P2lYOPNRf0Q2oYOoMPf0S2mYOoMRf0S2lYOoMRf0X3N2O1O100O1O1N2O100O1O001O101N1O100O1O1O100O1O2N1O101O00001O1O001O01O000010T[OZKmc0e4m[OfKoc0Z4n[OmKnc0S4n[OTLnc0m3P\\\\OULoc0X5O0O100O2OO010O1O010O00010O00010O00001O0O10k]OUJf?j5U@]Jj?a5S@dJl?\\\\5S@dJo?[5P@fJP`0Z5m_OcJbNWOca0T6j_OeJfNTOaa0V6i_OfJ_`0Y5`_OgJa`0Y5__OfJc`0X5]_OhJe`0V5\\\\_OiJf`0V5Y_OkJh`0S5Y_OmJh`0R5W_OnJk`0P5U_OQKm`0m4S_OQKPa0m4P_OTKQa0j4o^OXKPa0g4P_OZKPa0e4P_O\\\\KPa0c4o^O_KQa0`4o^O`KRa0a3c]OYL[15Ta0a3d]OVLY18Ua0b3f]OnKW1=Ya0d3e]OgKS1f0Ya0c3i]O_KP1n0Xa0d3Y_O[Li`0e3U_O\\\\Ll`0e3R_O[LPa0f3l^O[LVa0e3h^OZLZa0h3c^OXL^a0j3^^OWLca0k3Y^OVLha0m3S^OULma0m3P^OSLRb0n3k]OQLXb0P4e]OoK_b0l0m\\\\Ol0a0XNdb0d0U]OS13YNkb07`]O_1B[NQc0CR^OP2iN^Nge0b1TZO^NPf0a1mYO`NVf0k24L7H9H4K4M2N2N2M4M2M3N3L3XNQXOl0Qh0kN[XOo0ig0kN^XOP1dh0L5K5K5K5K8FXWk4\"}, {\"size\": [848, 480], \"counts\": \"`]f25Wj08C;G7K6L3cNXOoXOl0lf0_OeXOi0Xg0Y1L5L3M3J5N00O3M3M4N1O2N2O100003Mb0^O000000N2O2N100N4M2O1N1O2N3M2N?YOWXOjMng0^1n0M2M3N2O1O3M9D7I:Dfl\\\\8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"_jX62Vj0<G7K4K4N4J5K4N2M4L4L4N1M4K5M3M5L2N3N2OO1O2M3M3G:I8J4L5K7J6K2O1N2N201N00001O0O2N0M4M3JkWP5\"}], [{\"size\": [848, 480], \"counts\": \"USl5:Uj02M4M1jNJmWO<Qh0S1M200O1O10004L1O2N001O1O01O1O0021NO1O002N1J:K2lNcWOO`h0ObWOOX[i5\"}, {\"size\": [848, 480], \"counts\": \"Z\\\\W12Xj08J5J5J6M3M2O2M2M3O1O1O10000N01N2L301O2N101O0O101O1000O10000O10O0M3010O11O0000010O100O01000O2O001O10O010O1O2N2O1N101N10O010O10O010O1O010O1O00100O10O01O001YXOoNme0R1mYO[Oke0f0QZO@me0?PZOEoe0=lYOHS`0CVDe0dKLo?LVD9gKOd?iNh_OY1i4OgK3f?gNf_O_1h4HiK5h?fNd_O`1i4HeK5n?g0oCVOoK6Q`0f0oCWOiK7V`0g0nCn0R<UOmCj0Q<ZOmCe0R<BhC?V<DhC<dMiLk<P3]E9cMkLo<P3YE7gMjLo<S3TE7kMgLP=W3mD6QNeLQ=Z3fD5RNhLV=Y3`D3WNgLY=Y3ZBS2<eJY=_3mAT2j0]JX=n9gBSFY=m9gBTFW=m9hBTFW=m9hBTFV=n9jBQFV=P:jBPFU=Q:jBoEU=S:kBlEU=U:kBjEU=W:jBiEU=Y:jBfEV=\\\\:hBcEY=_:fB`E\\\\=`:cBaE\\\\=`:cB`E^=_:bBbE]=_:cB`E^=_:bBbE^=]:cBcE\\\\=^:cBbE]=^:cBcE\\\\=^:dBaE[=`:eB`E[=`:eB`E[=`:fB_EZ=a:fB^EZ=b:gB]EZ=b:fB^E[=`:gB`EY=^:iBbEW=h9YBnEc0;S=g9_CZFa<g9_CXFa<i9]CXFc<h9]CXFd<i9ZCWFf<j9YCVFg<l9XCSFi<m9VCSFj<o9TCRFl<n9SCRFm<P:QCPFP=P:PCoEQ=Q:nBoER=S:lBmEU=S:jBmEW=S:gBoEX=S:fBmE[=S:dBmE]=S:aBnE`=S:]BoEc=Q:ZBQFf=Q:WBPFj=P:UBQFj=P:VBoEk=R:SBnEm=S:RBmEn=U:PBkEQ>Y;O1@RD`BY2Ok6Y=VGeBn1:g6b<^JcC^5\\\\<cJjCX5T<hJSDR5m;mJjD]4V;bKTEU4k:jK[ER4e:nK`Em3_:TLfEg3[:WLjEe3W:ZLmEc3R:^LoE`3R:`LPF]3Q:bLRF[3o9cLVFY3k9eLYFX3h9fL\\\\FQ1oL\\\\Mf<b1_Fl0UMZM]<i1aFi0XMXMY<n1cFf0\\\\MTMR<U2fFb0]MVMl;X2kF=]MXMj;Z2nF5^M]Mf;^2PGM`MbMa;`2RGIcMcM];c2PGGhMbM[;e2oFfMjKl0R2eNV;j2nFcMmKj0W2_NS;S3jFbMnKi0n?d1YDYMQLm0j?f1^ERNg:i1eElM^:7[_Om0Y6eNb:=W_Ol0Y6bNe:a0R_Om0Z6[Nj:7j^O53X1eg0bNXXO64W1dg0SO]XOl0dg0TO\\\\XOl0dg0o01YOXXOcNlg0W1i0K5I9LoWj5\"}, {\"size\": [848, 480], \"counts\": \"Uil12]j0100O2N1O1O2N4K5J3I6M4N2L4J5J6M1L302M2`N]NSZOg1ie0fNlYOZ1Sf0^13O2O1O1N3M2N12M2O11M3O1N3M21O002O8]YOcMbd0X4N1N10000001N3N2M2M3N2N2M4M6Ih0VO>C6[NoXOCWg08f1ZOkVOEYi07mVOEYRo8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"WZk45Yj03N3L2L5M2N3N1O1O2N1O2L3N3M20000N2N2O1O0N02M3O10000O2O0000100O100O2O1N2O2O8G9F\\\\Ra6\"}], [{\"size\": [848, 480], \"counts\": \"jih75bi0`0aVOB]i0`0aVOB\\\\i0j000O1O100000O1O1M3000001O1ON200O1O10000000O1O100O1O2L4N1K7L3NRbh3\"}, {\"size\": [848, 480], \"counts\": \"jcl09Pj0<G7J5L3M4M2M4M2N101N2O1N1O2N1O2N2N1O101N10001N10000O100O1O100O1O10O0100O1SMlM^]OT2ab0ZNQ]Of1ob0\\\\NP]Od1ob0^NP]Oa1Qc0_Nn\\\\Ob1Qc0`Nn\\\\O`1Rc0bNk\\\\O_1Uc0bNj\\\\Oa1Tc0`Ni\\\\Oe1Sc0oMoZOMk1W2Sc0[Nl\\\\Of1Uc0[Nh\\\\Og1Wc0[Nf\\\\Of1Yc0_Nb\\\\Ob1_c0`N]\\\\Oa1gc0]NV\\\\Oe1oc0VNm[Om1_d0RNV[On1kd0VNoZOk1Re0XNgZOk1Ze0VNcZOl1]e0c12N9H3L8H5K4L2O1N2N2N2N10O01O1O2N2N10O0000001O00000O1000000O01000O100O1O10O0100O001O010N10000000001O001O1O100O1O1O100O1O1O2O0O100O1O1N3M3N1O1O2N1O1O1O001N2O00O10O01N1O11N2O2N2N2N2N3M2M3N2N2N3L3N2M^OP[OjKld0Y4W[OeKfd0]4\\\\[OcKad0_4_[OaK_d0`4c[O_K[d0b4f[O^KXd0d4h[O]KTd0e4m[O[KQd0f4P\\\\OZKnc0h4R\\\\OXKlc0i4U\\\\OWKic0j4W\\\\OWKgc0i4[\\\\OXKbc0h4_\\\\OYK`c0d4c\\\\O]K\\\\c0^4h\\\\OdKVc0Z4k\\\\OjKRc0P4T]ORLjb0i3Z]OZLeb0d3[]O_Ldb0a3[]OaLcb0`3U]OiLjb0X3Q]OmLnb0S3P]OPMob0P3o\\\\OSMPc0n2m\\\\OUMRc0k2l\\\\OWMTc0j2j\\\\OXMUc0i2j\\\\OWMWc0i2g\\\\OXMYc0o41N2N2K5^Ob0E;N2O1O0mNY[O_Lgd0_3\\\\[O_Led0_3][O`Led0[3`[OcLad0[3a[OdL`d0Z3b[OeL_d0Y3c[OfL_d0W3c[OhL^d0V3d[OiL]d0U3e[OjL]d0R3f[OnLZd0P3h[OoLZd0m2i[ORMXd0l2k[ORMWd0j2l[OUMUd0h2o[OVMSd0g2P\\\\OUMSd0h2m1K4M3M4M2M3M3L4I8H7J6I7M3O1011N1O101N101N101N101O1O1O1O00002N1O2N001O1O001O2N0010O01OO100O2N2O0O2N3L3N2M3N3L2N5J6K4M1N101O000J6O1O10O2O1O001O004K2O0000000000O2K5N1N2O1O2M2OTbh3\"}, {\"size\": [848, 480], \"counts\": \"faR2:Pj0<G3L5M2L5J5LMO7L4J7VNiNVZO[1ge0YOdYOh0]f0d11M3O1O2M2NO21O010O102L4M2O2N1011O3L<De1\\\\N2N00O101O003L6J4L5J5L5J6K4J6kNbYOmMff0c0Z2O1O1O5K5J6K6I7H_jk8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"h]g22]j0a0_O2N3M2M2O1O2O1N2N1O2O0O1O101N2N101O0O2O001O1N100O10O01000O00100O001O100000O10O10000000001O0001O000001O01O01O010O1O002N3M1O00001N1N3M3L4M3M2M3N3N2Long7\"}], [{\"size\": [848, 480], \"counts\": \"UiV72[j07K5M0O1O1O0O100000000O100O0010000O1O1O100N3O0O001000000000O1000000O100O01000O10000O1O1O101N2N102L3Nf_l3\"}, {\"size\": [848, 480], \"counts\": \"_eR2a0ki06L3M4L3lVOPOdh0T1XWOSOah0P1\\\\WOUO`h0_1N3M3M2N1RXOPN[g0R2aXORN]g0P2]XOUNbg0^2O0O00100O1O100O2Oa0^O3N1O0O2O00000000O10000O100000001O010O01O100O10O02O0O100O002O0O1O100O1O10000O10000001O001O1O2M3O4K10O001N100O1000O100O1O1O001O0O2O`YOaLPf0]3b0O2L3O2N101O100O1O00100O1O001O1O001O00100O1O1O1O1O100O1O00100O2N1O1O100O1O10O010O1O4K3M2O1N100O1O10000O010O010OM3010O100O10000O100O2N2O1O1N10O100O10O10O101O00001M2]OdXOPN_g0o1bXOPN_g0o1bXOoM`g0o1cXOnM_g0k1ZXORN9Obg0l1VXOTNZh0Q22M1NlWORNjg0b1^XOdN`g0Z1^XOhNbg0W1aXOeNbg0Z1_XOcNbg0^1g01O10O10iWO`N\\\\g0b1h01bXO]Nne0d1QZO_Noe0^1c1N10000002MY1hN6J1N20O0000O10000001O00001O0O2O0O2O1N3M3N1N3M4L5K6J7H8I6H:F?_O[X\\\\4\"}, {\"size\": [848, 480], \"counts\": \"ngl11]j02N200O100O1O1N2N2N2O1N2M2M3L4M4N1M4L3H8L4F:ZNeNoYOc1me0lNfYOo0_f0^130O2N3O0O1OI4O302N2N2N200O1N2010O2O4K4YZOlLlc0f3][O`Lbd0g410O000001O1O2N3L5L3L4L3\\\\MRZO:Wf0BPZORO\\\\g0i0gXOnNeg0l0^XOoNig0l0P1M3M4L4L5L5K3J_lf8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"^TW3>oi07K4K3N3N3M2N1O2N2N1O001O2N1O2O0O10000O2N3M3M1O2N2N2N1O1O100O001O010O1O1O100O1O010O011N1O1O1O0000O2N101N3N1N3N4K4M4Jc0^O?B`ic7\"}], [{\"size\": [848, 480], \"counts\": \"^[k7e0\\\\i0e0H4M3M3N00001O0001O001O1N101O0O2N2N3L3L5K5K5I;AY^m3\"}, {\"size\": [848, 480], \"counts\": \"dck26Wj0:UVONhh0P1L3N2O001N101O0O100O0100O1O1O1O101M2O1O010M1O2O0O21N101O2M3N4L9G6I5L3M2O2L3M3M3O1O1WObM]YOa2]f0fM`YO[2\\\\f0kM`YOW2]f0lMaYOV2]f0P1M3N2N2O1N2O1N101N2N2O001N3N4L1N2O1O1O1N101O001O0000001O0000000001O0000001O001O001O1O1O1O00001O00O10000O1000000O1000000O10O10000000O1000000O10000O011N100O100O1000O1WOlZOVLSe0i3oZOWLQe0h3P[OXLPe0g3Q[OYLnd0g3S[OYLmd0e3U[O[Ljd0d3W[O]Lid0`1W[O_O3POfd0]1`[O\\\\OLWOdd0\\\\1e[OVOI^Obd0]1m[OiNEJdc0Nl[O^1U1[N@:]c0On[O[1^2fNda0Oo[OZ1^2fNca0@h[O5<d1Y2hNab0V1`]OkN`b0T1`]OlNab0S1_]OlNcb0R1_]OmNbb0R1^]OnNfb0n0[]OQOhb0l0X]OTOib0k0X]OTOib0k0W]OUOkb0i0U]OWOkb0h0V]OXOjb0g0X]OXOhb0h0X]OWOjb0h0V]OXOib0h0Y]OVOhb0j0X]OUOib0k0X]OTOib0k0X]OROjb0m0W]OROjb0n0W]OQOib0o0\\\\3O100000O0TWOROWh0o0hWOUOVh0i0lWOUOUh0f0PXOYOQh0g0oWOXORh0h0nWOWOTh0h0mWOTOWh0j0h000O10000O1000000O100O10O0100O1OB\\\\OiVO5M`0mh0j0M310O01000000O2O00000O2O001M3N2N3J5L5K6H7JgXn3\"}, {\"size\": [848, 480], \"counts\": \"[UT21^j02O00000O1N3M1O2O1N2N2N1M3I7M3L4O1K6G9H7I7]N[NWZOi1de0dNRZO]1me0lNjYOV1Vf0SOZYOT1ef0Z11N11O1L12M4M5L3O2L3M4O1O0011N103M8G8I`0_Ok0WO0O010O10O1O2N2N3L4L2N3M2M4M4cNQZOPNXf0_1cZOoMbe0U1dYO_N\\\\15We0V1\\\\2K4K4M4L7I7Ccd^8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"bTc44Xj05I5M2O3M4L3M4L3L5M2M5K3N3M3M2O2N2M5K200O1O10O01O1O10O1O100O2L3N5K7I2M3L5L3L5L6G?F2HWif6\"}], [{\"size\": [848, 480], \"counts\": \"R_b85Sj09K7J5K7H7J3N2N2N1O2N10000001N2O1O1N2O2M2O2M2N3M3M3M3M3N4J6I[\\\\Q3\"}, {\"size\": [848, 480], \"counts\": \"U]b2<Qj07J5K4L4QWO^Okg0g0fWO6gg0a1G6K3N2M3M2N1O2N100O100O2O000O101N10001O0O2O001O1O00001O001O001O001O00001O1O010O1O1000O01000O100O2O000O2O1N2O2M4L4Mb0^O0O0100O1O01000O0010O01O01000O000O2G8E;]Od0B=K6I6K5L4M3L4M201N2O1N2O001O1O1O1O1O1O001O1O1O100O001O001O001O100O001OaKS\\\\O\\\\2nc0_Ma\\\\OV2_c0gMk\\\\OR2Uc0kMR]OR2mb0jM\\\\]OQ2db0lMa]OR2_b0lMd]OT2[b0lMg]OS2Xb0lMj]OS2Vb0mMk]OS2Tb0mMl]OS2Tb0mMm]OS2Rb0mMn]OS2Rb0mMn]OS2Rb0mMn]OT2Qb0lMo]O\\\\1SNTNnc0`0o]OZ1WNUNic0a0o]OZ1ZNUNfc0a0P^OZ1[NTNdc0c0Q^OX1\\\\NVNbc0c0Q^OV1_NVN`c0d0P^OV1aNUN`c0e0n]OX1aNTN_c0e0P^OV1cNTN]c0g0n]OV1eNSN]c0g0n]OU1fNUN[c0f0n]OU1iNUNWc0g0P^OS1kNVNUc0f0o]OT1mNVNTc0f0o]OS1oNWNQc0f0P^OS1POWNob0f0P^OS1ROXNlb0f0Q^OS1TOVNkb0g0P^OR1XOWNgb0g0Q^OQ1ZOXNdb0g0Q^OQ1]OXN]b0k0U^Ol0AYNea0_1j^O7CZNYa0g1U_ONDZNVa0h1W_OLF\\\\NSa0g1W_OMF]NSa0d1Y_OMF_NPa0c1[_OMG_NPa0a1Z_O0G_No`0`1Z_O0I`Nn`0]1[_O2HaNn`0Z1\\\\_O3HcNm`0W1\\\\_O6HcNn`0S1\\\\_O8HeNn`0o0\\\\_O:HgNo`0k0Y_O>IfNRa0h0V_O`0IiNTa0c0T_Ob0JkNVa0?o^Oe0NjNaa03b^OQ1OkNba02_^OQ12lN_a02`^OQ12mN^a02`^OP14lN^a03^^OP15lN^a04]^Oo07lN]a02^^OP18mN[a01]^OR1;jN\\\\a0O[^OU1>hNec0X1]\\\\OgNcc0X1j2000001O00010O000010O00000001O0O2N1000001O00001O00010O010O01O01O0010O01O01O01O001O00001O0O2O01OOO2K5N1O2L3O2M3O1O11O01O0O1001N101N2O1N3N1N3N2M3L4M3M3N2L5K7IZ\\\\Q3\"}, {\"size\": [848, 480], \"counts\": \"a]\\\\22]j03N0O101N100001O00O1N2O2M2M3L4K5N1L4E;G7J6N3M2ZN\\\\N`ZOh1]e0aN[ZOa1ce0fNUZO]1je0nNdYOX1^f0W15N1001N02N3O0O2N011N2O2M201002M;G2kYOfLZOLZe0m4OO1F;O03M3NO010O2M3N2O1N3N4\\\\MQZO<Tf0_OQZO=Rf0_OQZO?Qf0^OUZO=le0AXZO<ke0@WZO?le0]O[ZO=he0^OdZO7de0A_ZO=de0_ObZO2^N^OUg0:[[ODid08Y[OFPe00liT8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"iPP4d0fi0:J4M6I6I4L5M2N1O3M4L4L101O0O2O0100N2O001O00010O0O101N10001O0O2O1O0O2N2O1N3Ng0WO7J7H4LojY7\"}], [{\"size\": [848, 480], \"counts\": \"V^Z94Uj09K5L4L5K5L2M2N2O000O2N101N1000000001O1O1N2O1O1N3N2N2M3N2N3M3K7IRhW2\"}, {\"size\": [848, 480], \"counts\": \"lVk1=_h0IgXOd0nf0HjXO<Pg0KkXO8Rg0MiXO7Tg0LhXO7Ug0LhXO8Ug0KgXO8Wg0KfXO8Wg0KfXO7Xg0b1O1N2N101N3M2O2M2O2M2O1N2O1N2O000O01000O0100000O10001O001O100O001O1O001O001O010O010O010O100000000O1000O2O001O1O1N2N3N2M6J4M2M3NO001O00100O0104L2N000001OjLkXOP3Ug0mLnXOS3Yg00O001N001N1O2N1N2O1M3N2N3M1O2N2N101N101N101N2O0O2N1O2N2N1O2O0O2N101M2O101N1O2N100O10001N100O2O001N101O001O001O001O001O001O00001O1OQMS[O<md0]O[[Oc0ed0WOa[Oh0_d0UOe[Ok0Zd0SOi[Ol0Wd0ROl[On0Td0POm[OP1Sd0nNP\\\\OR1oc0lNS\\\\OT1nc0jNT\\\\OV1jc0iNX\\\\OW1hc0hNZ\\\\O<bNUOSe0>\\\\\\\\O=cNSOQe0?^\\\\O=bNTOod0?_\\\\O=cNTOmd0>b\\\\O<bNVOld0?b\\\\O;`NXOmd0=c\\\\O;`NYOld0<e\\\\O:`NYOkd0=e\\\\O9bNZOhd0=f\\\\O9bN[Ogd0<g\\\\O:bNYOgd0=h\\\\O9aN[Ofd0<i\\\\O9bNZOed0>g\\\\O9dNZOdd0=h\\\\O9eNZObd0>h\\\\O9eNYObd0?i\\\\O8eNZOad0>j\\\\O9eNXOad0?k\\\\O8eNYO_d0?l\\\\O8eNYO_d0>m\\\\O9fNWO]d0`0l\\\\O9iNWOZd0?n\\\\O:iNVOYd0`0n\\\\O:kNUOVd0`0Q]O:kNTOTd0b0Q]O:lNSOSd0c0Q]O:nNROPd0c0S]O;oNoNoc0f0S]O:POnNmc0g0T]O;QOjNlc0l0S]O:Sd0En[O;Rd0En[O;Rd0Eo[O:Qd0Fo[O:oc0HR\\\\O8ic0KX\\\\O5bc01^\\\\OO\\\\c06f\\\\OIob0cNW[Og1j1Fnb0hNS[Ob1P2Flb0c0U]O]Ojb0c0V]O]Ojb0c0W]O\\\\Ojb0c0V]O^Oib0b0W]O^Ojb0`0X]O@hb0`0W]O@kb0>V]OBkb0=T]OCmb0<S]ODob0:R]OETc06k\\\\OKhc0AX\\\\O?Td0VOl[Oi0Yd0ROg[Oo0\\\\d0nNd[OR1`d0gNc[OX1jf00100O1O1O1O1O1O1O1O10O0100O010O0010O01O00001O0000000001O000O2O0O2O1O00001O100O00100O0010O010O10O1O10O001O010O001O1O00100O0O2O1O1O001N10O0M3N21M2N2100N2O2O001O0O1000001N0101O1O1O1O2M3N2M3N2M4L5L3L5K_bX2\"}, {\"size\": [848, 480], \"counts\": \"S\\\\a24[j02O001O00000O10000O1O1O1O1N2N2O1O001N2N2F9H8K5K5L3M3J6XN\\\\NbZOh1Ye0dN[ZO`1ce0mNeYO_1[f0W121O10O110O0N4N1N3L4O2O001N1O2001N3ZZOlLlc0]3j[OeLUd0l3X[OWLgd0j4O0001O0O2O1N2N3N2N2N3M5K4K6J2EiYOZL[f0b3<]OZYOWMjf0_1`YOVNGa0\\\\g0Q1\\\\YOkNgf0g0bXOmNl0:ff0e0fYOWO_f0d0SZO[Obe0?`ZOZOie0b0X2I7IUdk7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"a_U31Xj0=F9G6L4K6J5L3M4M1N3N2N1O2N1N3O0O2O1O0O2O001O001N101O100O1O001O00100O010O01O001O1N2O010O1N102M4L9G8H8G5L4L7H6J9F^ih7\"}], [{\"size\": [848, 480], \"counts\": \"hkV86Vj05J6K6L3L5J7J5L2N2N2N101N11O001O1N2O2M3M2O2M3N1N3M3M4L3M4L4Kco\\\\3\"}, {\"size\": [848, 480], \"counts\": \"Z]e1?mi08I6K4M3M3M3M2N3N2M3M3N1N2O2M3M3M2O1N3N1O2N2ROPNXYOQ2bf0XNZYOj1af0\\\\N\\\\YOe1af0_N]YOb1`f0cN]YO_1`f0Z1N2N3L3N2O1N2N2O1N2O2M2O1N2O1O0O2O1N3N1O1N101O1O001N2O001O1O1O1O10O01O1O1O001O00010O0010O00001O00001O1O1O2N1O1O1O2M2aLgZOe1[e0XNiZOe1Ze0WNhZOh1^e0QNcZOn1ce0lM_ZOS2ee0hM\\\\ZOY2fe0cM\\\\ZO\\\\2ce0dM]ZO\\\\2ce0dM^ZO\\\\2be0aM`ZO`2`e0\\\\McZOd2^e0YMdZOg2]e0WMdZOj2\\\\e0UMdZOl2\\\\e0QMfZOP3\\\\f01N2O1O1O1O100O1O1O1N101O001O1O1O001O1N101O00001O01O000001O1O001O001O100O00001O00001O00nMbYO4^f0n1000cMgYOd0Yf0\\\\OhYOd0Wf0\\\\OjYOc0Vf0\\\\OkYOd0Uf0\\\\OlYOd0Sf0ZOnYOg0Rf0YOnYOh0Qf0XOPZOg0Qf0WOoYOk0Pf0SOPZOo0Pf0POQZOQ1oe0nNRZOQ1ne0oNSZOQ1le0nNUZOR1ke0mNVZOS1je0mNVZOT1ie0lNXZOS1he0mNXZOS1ie0lNXZOS1he0nNWZOS1he0mNYZOR1ge0nNYZOS1fe0mN[ZOR1ee0oNZZOR1ee0nN[ZOR1ee0nN\\\\ZOR1de0mN\\\\ZOT1ce0mN\\\\ZOS1de0mN]ZOS1be0nN]ZO8_OWOTf0`0]ZO9BTOQf0c0^ZO9ATOPf0c0_ZO:AROPf0e0^ZO9CROne0e0`ZO8BTOme0d0aZO8CSOle0e0bZO7CTOje0e0cZO7DTOie0d0cZO8ETOge0d0dZO8FSOge0d0dZO8FTOee0d0eZO8GTOce0d0fZO9GROce0e0gZO8GSOae0e0hZO8GSObe0d0hZO8GTO`e0c0jZO:FROae0c0jZO:FSO_e0c0lZO9EUO_e0`0nZO:DUO_e0`0nZO:DVO]e0`0oZO:EUO\\\\e0a0P[O:DUO\\\\e0`0Q[O:ESO[e0c0Q[O9ESO[e0c0P[O:FROZe0d0Q[O9GQOXe0f0Q[O9HoNYe0g0P[O9HoNXe0h0P[O9JkNYe0l0mZO8Sf0HmYO8Sf0GnYO9Sf0FnYO9Rf0GnYO:Qf0FoYO:Rf0EnYO;Rf0EoYO:ne0JQZO6me0LRZO4je01VZOO_e0<aZOEZe0?fZOAZe0?eZOCZe0>dZOC\\\\e0=dZOC\\\\e0>cZOB]e0>cZOB^e0>aZOB`e0>_ZOC`e0=`ZOCae0=_ZOCae0<_ZODbe0;^ZOFbe07`ZOIbe0JjZO6Ve0BQ[O?Pe0[OT[Oe0od0TOV[Ol0od0dN[[O]1lf0O010O1O00010O001O010O00001N101O0000M2K6N100ON2O1101N2O1000000001O1N2O1N3M2N3M3N1N3M3M3M4M3K7Gdo\\\\3\"}, {\"size\": [848, 480], \"counts\": \"^_j22]j01O2N1O10001O00000O101N2N0O200N2N2M2I6M3N003I8I6J6G9I6[N]N\\\\ZOf1be0eNPZO_1Qf0gNfYO]1Yf0^1O1NON1MN4N4O4K4M3O1O2O0O2O01dZOjL^c0X3^\\\\OkL`c0_3U\\\\OeLic0`3P\\\\OcLoc0k3a[OXL^d0l3S[O_Lnd0b40O0O101N2N2O3L3M2N4M3L3M3M5]MRZO;Sf0_OSZOSO9Khe0l0YZOnNb0EYe0X1P\\\\OfNRd0W1o[OfNVd0W1k[OjNXd0P1i[OQO[d0j0f[OVO`d0c0b[OZOed0?n2EmUd7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"aQn2:Rj06K6K3L3M4N2M3L3N3N2N2M2O2N100L5N2O1M3O1N2N1N201N10001N10001O01O000000001O1O1O001O1O001O100N2O1O1O1O2M4L6K2M2N2N3POiVOb0ei0M4L4M3J4M4MT^j7\"}], [{\"size\": [848, 480], \"counts\": \"[^\\\\78Tj06M3N2M3M2L4G8FnNRWOW1gh0hNZWO^1fh0cNWWO^1jh040O100O2N1O1N2O2N1N3N1O2M3M3M5K4K6K5IZWX4\"}, {\"size\": [848, 480], \"counts\": \"_Zk1j0Si0k0\\\\O?H8I6L3M4L4L2O2N2M3N1O2N2N2N1O2N2N1O2O0O2N2O1N1O2N1O2O0O2N1N3B=K6L3M3N3M2O1N2O101N1O100O1O10000O100O10000O2O00000O100000000O1000O1000000000000000001N10000`LR[O^1nd0aNT[O^1ld0aNV[O^1jd0aNX[O]1id0bNW[O^1id0cNW[O]1id0bNW[O^1hd0cNY[O\\\\1ed0fN[[O[1bd0gN][OZ1\\\\d0lNe[OT1Yd0nNg[OS1Xd0mNi[OR1Wd0nNi[OS1Vd0mNi[OT1Wd0kNj[OV1Ud0bMh[O04^2Td0aMm[OL0d2Qd0aMW\\\\O[O0T3ic0`MX]O^2ib0aMX]O_2ib0_MY]Oa2fb0[M^]Oe2cb0XM_]Oi2ab0TMa]Ol2`b0oLd]OQ3^b0hLh]OW3Zb0eLh]O\\\\3ed001O00000001N101O001O000001O00000O101O001O00010O0010O00010O00N2100O0100O001O001O1O0100O10N2N1N3L4O1O1N101O001O1N11O01N2O1O0N2O1O2N2O001O1O100O1O1O100O100O100O001O100O100O010O1N20O01O10O000O0O100O1N201N2O1O1O2OO2O1N1O2N2N1N3M4M2N2O1O1O1O1O1O2N1O2M2O2M3N2M3N1N3N2N3L7H[a[4\"}, {\"size\": [848, 480], \"counts\": \"ncn23\\\\j03M2O0O101O0O100000O10O100O100O2O0O1O1N2K5H7J7J5M4M2L4K5I7G2cN^NTZOf1je0cNnYO`1Qf0fNgYO[1Zf0Z13O10N2L11O4M2N3N101N2O2NcZOmL`c0T3Z\\\\OVMac0k2^\\\\OVMbc0j2^\\\\OVMbc0l2\\\\\\\\OTMcc0T3U\\\\OmLkc0\\\\3l[OeLSd0h3][O[Lcd0i41O001O1O1N2N2N3M2N3M4L6K4J5^MSZO9Rf0AWZOcNbg0Y1l0N3N2L6K4L7I5K;Bma]7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"S^Q37Wj04M2M3N1O2M2O1N2O1O2N1O1O1O1O1O1O1O1O1O1O1O1O100O2N1O1O1O2O0O101O00000O10001O0O1O2O00002O0O000O1000O2O010N2O0O3L4M2N3N2N2M2N1O2GbVO^O^i0`0eVO^O]i0`0eVO^O\\\\i0a0;N3K`Sb7\"}], [{\"size\": [848, 480], \"counts\": \"cmc72[j04M4M2M4M2M4L3N1O1O1O100M3O001O1O001O1O01O0000010O00001O1N2O2N2M3O1N4K7Icnj3\"}, {\"size\": [848, 480], \"counts\": \"X\\\\^2e0di0;D<D:D;E;F:H8H8K4N3M3M2N3N1O1N2N3L3L4N3L3N2O1M4K4M3M3N2M3O1N3N1O1O1O1O1O100O100O1O100O100O01O0100O1O1O1O1O1N2O2M2O1O001O1O1O1O1O1O1O1OeLf[Ob0Yd0^Oj[O`0Ud0@m[O>Sd0Co[O;Pd0FQ\\\\O9nc0hMi[OT19T1mc0fMn[OT17U1ic0gMR\\\\OT16S1hc0hMU\\\\OS14U1fc0hMW\\\\OR15U1cc0hM[\\\\OQ12W1cc0gM]\\\\OQ11X1ac0gM`\\\\Oo00Y1_c0hMc\\\\On0NZ1^c0hMg\\\\Ol0L\\\\1Wc0mMo\\\\Od0K_1ob0TNX]O;Ja1jb0WN_]O5Ge1gb0XNe]O0Di1db0XNk]OLBl1ab0ZNP^OF@Q2_b0YNU^O\\\\OCZ2Xb0ZNi_Og1U`0ZNk_Og1T`0YNl_Og1T`0YNm_Og1S`0XNm_Oh1T`0VNm_Ok1S`0QNP@P2R`0]M_@c2fc000100O0010O10O010O00010O010O0010O010O10O01O0001O01O01O01O010O1O001O1O00100O1O001O100O1O1O001O100O1O001O100O1O1O1O001O1O1O1O1O001O1O010O1O1O1O1O010O1O001O1N200O001O001O1O1O001O0010O0100O01O0N3N2K5K5M2O2O1O001O0100O010O100O100O1O2N1O1O3M3M3M4L3N0O1O1]O]WOXOch0h0^WOWOch0h0_WOVObh0i0aWOSO`h0m0b0O1O2N1O2M3N3M2M6JUik3\"}, {\"size\": [848, 480], \"counts\": \"b]T33]j0001O00000O2O000000O02O0O101N100O1O1N1N3H8C=F9K4L5K5J5M4M2gNkMWZOX2^e0[NWZOd1ke0dNkYO[1Zf0W14N3O10ON2ON0122N110O2N10O3N3aZOjL`c0\\\\3T\\\\OmLic0W3P\\\\OmLoc0\\\\3f[OgLYd0h400001O1O1N2M3N2O2N1N3K7YNh1G6VO[XOaNlg0X1ZXOaNmg0\\\\1f0N1O1N6H7K5K7H7J:EW]Y7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Sjb3:Sj05L4L4L2O1N3M3M3N2N2M2O2N2N1O2M200N3O0O100O010O0100O010O1O0010000O010O2O010O1O10000N2N2N2O1O1N2O1M3M2O2O0O101N1000001O0O101O001M2O2O1M2N3L6Ijlo6\"}], [{\"size\": [848, 480], \"counts\": \"fUl71^j03N2L5M;E0O100O1O100O10O01O1O10O01O00100O010O010O00010O01O2O0O001O1O2M2O3L5KXQa3\"}, {\"size\": [848, 480], \"counts\": \"bfo2=fi0a0F9F9E<D;I7J6J5K6K4M4L3L4K6L3B?I6M3M3M3N2N1O2N2O0O2O1N1O2N1O2O0O100O2N100O10000O100O1O1M3M3M3N2N2O1N2O1O1O1O1O1O1O10O0100O010O01O001000O10O100O100000O101O001NWLj[OZ1Vd0cNo[O\\\\1oc0eNT\\\\OX1kc0hNX\\\\OV1hc0jNY\\\\OV1ec0jN\\\\\\\\OW1bc0jN^\\\\OW1`c0jN`\\\\OV1_c0kNa\\\\OU1^c0lN`\\\\OV1`c0jN_\\\\OX1_c0hNa\\\\OY1^c0hNa\\\\OY1^c0gNb\\\\OZ1]c0gNb\\\\O[1]c0dNd\\\\O\\\\1[c0dNe\\\\O]1Zc0cNf\\\\O^1Zc0aNg\\\\O`1Wc0eL^\\\\OU1;W2Wc0aLb\\\\OV18Y2Uc0aLe\\\\OT16b1BdMbc0Fg\\\\OQ16e1DbM_c0Gi\\\\OP15g1E`M]c0Hk\\\\On04j1F`MZc0Fo\\\\Om02l1GaMXc0ER]Oi01Q2FaMXc0AU]Oi00T2EaMYc0\\\\OX]Oi0LZ2DbMYd0NU\\\\O`2DaMfe0_2[ZOaMde0_2^ZOaM`e0`2`ZO`M`e0_2bZO`M]e0`2dZO`M\\\\e0`2dZO`M[e0`2fZOaMYe0^2iZOaMWe0_2iZOaMVe0_2lZO`MTe0_2mZObMRe0^2nZObMRe0]2P[ObMPe0]2Q[OcMod0[2S[OeMmd0X2V[OhMjd0V2Y[OiMgd0V2Z[OjMfd0U2[[OlMdd0S2][OmMcd0S2][OmMcd0R2_[OmMbd0Q2_[OoMad0P2`[OPNad0n1`[OSN_d0l1b[OTN^d0k1c[OUN^d0j1c[OUN^d0i1c[OWN^d0g1c[OYN]d0g1c[OYN^d0e1c[O\\\\N]d0c1d[O\\\\N]d0b1d[O^N]d0`1d[O`N\\\\d0`1d[O`N]d0^1e[ObN[d0\\\\1f[OdN[d0Z1f[OfN[d0Y1f[OfNZd0Y1g[OhNYd0W1g[OiNZd0V1f[OjN[d0T1f[OmNYd0S1h[OlNYd0S1g[OnNXd0R1h[OoNXd0P1h[OQOXd0n0h[OSOWd0m0j[OSOVd0l0j[OTOWd0k0i[OUOWd0k0i[OVOWd0i0i[OWOXd0h0h[OYOXd0f0h[OZOYd0e0g[O[OYd0d0h[O\\\\OYd0c0g[O]OZd0b0f[O^OZd0a0g[O_OZd0`0g[O_OYd0a0g[O_OZd0`0f[OAXd0`0i[O_OPd0h0P\\\\OYOjc0l0W\\\\OSOhc0n0X\\\\OROfc0o0\\\\\\\\OPOcc0Q1]\\\\OoNbc0R1_\\\\OmN`c0S1a\\\\OnN]c0S1d\\\\OlN[c0T1g\\\\OkNYc0U1h\\\\OjNXc0V1h\\\\OjNXc0V1i\\\\OhNXc0W1j\\\\OhNVc0X1k\\\\OgNUc0W1o\\\\OgNQc0X1Q]OfNPc0Y1R]OfNnb0Y1V]OcNkb0`0XZO6mh0DYWO;ih0@ZWO`0[i0O10O01O010O01O001O10O010O0010O10O01O00100O01O2O0O1O1O2N1O2N2M4G^Qa3\"}, {\"size\": [848, 480], \"counts\": \"WXU32\\\\j0200O2O0O2O1O001N100O10000O100O1O1N2N2L4I6H8K4M3N3K4N3K5I7^NSN^ZOm1`e0lNiYOS1Zf0`1100O2O1N1MN030101O2O0O200000`ZOjLgc0X3X\\\\OiLec0[3g13L8I6J8VZOmK^ONRe0]5K1N1O10N3M3M2M3N2J8[NfZOmM^e0j1lZOQNZe0o0]ZOWNP1;fd0Y1Q\\\\OdNSd0Y1P\\\\OaNTd0]1a2N2M3M5M8G5K8G;EebX7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"YiU48Uj08I5K5M1KWO`VOk0]i07L3N2M4M2N2N1O2M3N2N2N2O2M3N1N2O1N3M2O0O2N7J0O100O0100001O00000001N102N1O2N1O2N1O5J4M3M3M2M4L3HWWOdNQi0T1:J6L8G8H5Iloe6\"}], [{\"size\": [848, 480], \"counts\": \"e_l55[j00O10000O1N2000000O1O1000000M300O001O0010000O2M20000O1O1O2N1000O10001O1O001O0O101O001N2O1M4M3LfXY5\"}, {\"size\": [848, 480], \"counts\": \"VX`3<Pj07J4K6K4M3M2M5K4J6K5M3M3L3jNUNeYOn1Wf0XNcYOl1Yf0YNbYOk1\\\\f0XN_YOl1_f0WN\\\\YOm1bf0R1N2N2O1N2O1O1N2O1N1O101N100O2O0O1O101O0O2O1O1O0O2O001O1N101O0O2O001O1N3N2N3M3M4K2O2N2M2O2N2N3M2L4J6H8J6L4K6K6K3M_Nn\\\\OhKob0X4T]OhKhb0Z4Z]OeKdb0[4c]O`K\\\\b0_4h]O_KVb0b4m]O]KPb0c4S^O\\\\Kla0c4X^O[Kfa0e4^^OYKaa0h4`^OWK_a0i4b^OWK\\\\a0k4e^OSK[a0m4g^ORKWa0n4k^OQKUa0o4m^OoJSa0P5o^OPKPa0P5Q_OoJn`0Q5S_OoJm`0Q5S_OPKl`0P5U_OoJk`0Q5U_OoJk`0Q5U_OoJk`0P5V_OQKi`0n4X_ORKh`0n4Y_OQKg`0o4Y_ORKf`0m4[_OSKe`0m4[_OSKe`0l4\\\\_OUKc`0j4^_OVKb`0i4`_OVKa`0h4`_OXK``0h4a_OXK^`0g4c_OYK]`0f4e_OYK[`0g4e_OYK\\\\`0e4e_O[K[`0e4f_OZKZ`0e4g_OZKZ`0f4f_OZK[`0d4f_O\\\\KZ`0d4g_O[KZ`0Z2d]OXOS2^NY`0W2g]O[OP2^NZ`0U2g]O]OP2]NZ`0Q2j]OBl1\\\\N[`0o1k]OFk1ZN[`0l1m]OLg1WN]`0i1n]O5AgMi19j`0g1n]Oc0X1eMk`0d1o]Oh0W1bMl`0k0a]OVO?`2S1]MPa0g0f^Om1<YMPa0g0e^OQ2bc0iM`\\\\O]1`NbNTe0I_\\\\Oe1`N`NWg0`1kXO_NTg0a1nXO]NRg0c1oXO\\\\NQg0c1RYO\\\\Nmf0d1UYOZNkf0f1WYOYNif0e1[YOVNgf0j1P1O0O2O100O1O001O2M2O1O1N2O2M2N3M3M3N2N1N3M3M3M3L5L5K6HSjc4\"}, {\"size\": [848, 480], \"counts\": \"k]T33\\\\j02N10001N1000001O000O100O1O100O010O1O0N2L5F:D<K4L5K3L5K4M3N2aNUNYZOi1ge0iNgYOV1^f0[13N101M2O1NL5M32N100O10010000fZOiL\\\\c0Y3_\\\\OnL]c0X3\\\\\\\\OlLac0_3T\\\\OcLjc0f3m[O[LSd0U4Y[OoKgd0m40O1O1N3M2M5I6N200dMaZOFae06aZObN7LXe0`1aZOUNS1O^d0h1aZOWN_1DTd0P2_ZO[N^1DXd0k1_ZO\\\\NZ1I[d0g1g2K2N3M3M4L4K9G;E8FbbX7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"QPm49Qj06N3G9WOh0M4N2N2M2O1O2M2O1O101N1O1O1O1O0011O0M2O100000100O010K4M4M200O2N3N1M2O2N2O001O1N2N101O1N2N201N3L4L2N3M2K7M2Ml`P6\"}], [{\"size\": [848, 480], \"counts\": \"Tbg55[j00000001O000N200O100O100N2O1O1OJPVONPj080M23N1O1O1O100O1O1O100O10O100000002N1O0O2O00000O1O2N2Nke`5\"}, {\"size\": [848, 480], \"counts\": \"bbh39Uj04L4K4M4L3M3M4K4K5M3M3L4M4K4ROUNSYOn1gf0[NSYOh1kf0ZNQYOj1mf0XNPYOk1nf0VNoXOo1of0RNnXOQ2Pg0i0N2N2N1O2O1N1O2N2N2N2N2O1N1O2O0O1O2N1O1O1O2N100O2O0O2N1O100O101N3N>B6J4L4L3M3L6K5K3M2N100O1O001O0SORJX]Oo5db0XJX]Oh5fb0\\\\JX]Oo3<XLZb0NV]Oh3h0ULPb0o4S^OPKka0P5W^OoJga0R5\\\\^OlJca0U5]^OkJaa0W5`^OhJ_a0X5c^OhJ[a0Y5e^OgJ[a0Y5e^OgJZa0Z5f^OfJZa0Y5g^OgJYa0Y5g^OgJXa0Z5h^OfJXa0Z5i^OeJWa0[5i^OeJVa0[5k^OfJTa0Z5m^OeJSa0Z5n^OfJRa0Z5n^OfJRa0Z5n^OfJQa0[5o^OeJQa0Z5Q_OdJPa0Z5R_OfJn`0X5U_OgJk`0X5V_OhJj`0X5V_OhJj`0X5V_OhJj`0X5V_OhJj`0Y5U_OgJk`0]5R_ObJn`0_5Q_OaJo`0c1b]Oh1^1eLQa0b1a]Oi1^1eLQa0a1b]Oj1]1eLQa0a1c]Oj1\\\\1dLQa0b1c]Oj1\\\\1dLQa0a1e]Oj1[1cLQa0c1d]Oj1\\\\1bLQa0c1d]Oj1^1_Lo`0f1d]OZ10PMZd0f1g[OV14RMVd0f1g[OW14SMUd0f1h[OT13YMUd0a1i[OU13ZMUd0^1j[OW13YMTd0_1k[OW13WMTd0`1k[OW1nd0fNU[OW1nd0fNU[OX1ld0fNX[OW1kd0eNY[OY1hd0dN^[OW1dd0fNb[OV1_d0gNh[OS1[d0gNi[OX1[d0_Nk[O_1\\\\d0UNk[Oj1]f001O1O010O1O1O1N2O1O1O1O1O2M2N2O1O2M3M2O2M3N2N2M3N2M3M5K5KVYa4\"}, {\"size\": [848, 480], \"counts\": \"`YP32^j02M2O10O00000000O10000O20O000001N1N2L4K5K5L4L3M3N3L3I8I3L3O4N000fNXNQZOj1je0`NnYOc1Pf0eNdYO`1\\\\f0U14M4M3N2NO1N1O3L3O21O00cZOnL_c0S3_\\\\OoLac0Q3^\\\\OPMac0R3^\\\\OoLac0Y3U\\\\OiLjc0e3e[O_LZd0l40O1000000O101O0O2O1O1O2[MfZO0]e0LiZON[e0NiZO\\\\N99Qe0W1kZOoMh0c0ad0Z1[\\\\O^Nic0_1]\\\\O[Ngc0`1b\\\\OWNac0f1j2K6I4K9G9H5J]l[7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"^]Y5a06KSi0l0M2N3M3N2N2N2N2N2N1O2N2O2N<C0001O00001O1O1O0M4O0O2O0O2N1O101O1O0O2N1N4L3L301O1O1O1O1N102L3O1O2N1K6M4N2G:D_\\\\g5\"}], [{\"size\": [848, 480], \"counts\": \"Ugk54Wj06L3N2O1O1O100O100O1O10O1000O1O100O1O1000O100O1000O01000001N1O4L8FXde5\"}, {\"size\": [848, 480], \"counts\": \"]Sf37Rj0;G8K4L3N2M3N3M2N2M3N2M3N2N2N2M3L4K6K4M3M3M3M3L4M3L4ATMTYOP3jf0=M3M2O2N1N3N1O1O2N1O2N1O1O1O1O2M2O100O2M2N3N1O1O1O10000O100000O10TOZKn[Of4kc0gKo[OX4nc0oKo[OQ4oc0RLP\\\\Om3oc0VLo[OS4gc0QLW\\\\O[5\\\\b0hJb]OZ5[b0hJd]OY5Zb0iJe]OX5Yb0mJb]OU5\\\\b0`101N1O2O000O2O00QOn]O`IRb0^6R^OaIla0X6]^OhIba0S6d^OlI\\\\a0n5k^OQJUa0k5P_OUJn`0j5U_OUJk`0i5W_OWJi`0h5X_OYJg`0f5[_OYJe`0f5\\\\_O[Jc`0d5__O[Ja`0d5`_O\\\\J``0d5a_O\\\\J^`0c5c_O]J]`0b5d_O^J\\\\`0b5e_O]J[`0b5f_O]J[`0c5f_O]JY`0c5i_O[JX`0c5j_O\\\\JV`0d5X^OmIY1>_`0d5W^OSJX18a`0d1S^Ol12YLZ17b`0`1X^OP2IYL]17b`0_1\\\\^Of1FaL02]16b`0a1^^Oc1CdL02]16c`0_1b^O`1_OiLO2^15b`0`1f^OY1@mLK5^14b`0`1g^OW1EUMS12b`0b1h^OT1EVMT12_`0c1j^OR1FWMT11^`0d1j^OR1EYM_c0d1l\\\\OR1oc0kNT\\\\OR1Pd0jNS\\\\OS1Pd0kNR\\\\OS1Qd0iNR\\\\OT1Qd0hNS\\\\OV1Pd0fNS\\\\OW1Rd0cNQ\\\\O\\\\1Vd0WNR\\\\Of1^f0N2N1N3N2O0O2M2N3N1N3M2N3M2O1N3N1O2L3O2L4N2L5K5K`[o4\"}, {\"size\": [848, 480], \"counts\": \"Yjm25[j01N100000001O000O10O100000O1I8N1O1O1L4M3N2K4M1N112K6H8M3L3F;LNhNVNRZOh1me0gNhYOX1Yf0PO^YOP1cf0^10O2N0OM3101O2N2O1N2O01O2UZOXMlc0j2l[O^MSd0c2j[OaMUd0a2f[ObMYd0j2P[OcMod0o3O11N10001O0O2N1O1O1O1^NnZOeMTe0Z1hZOSNQg0j1QYOTNRg0h1QYOUNSg0e1RYOXNQg0e1P1M3N3ZN[WO[1Xi0E4L4K5L8EfP`7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"ka]5;Rj08I5K6\\\\VOVOYi0W1I4L2M3N3N1L3O2O0O2N1O1N3N1O1O101N101N2O2M00010O100O01000O01O10O01O1N2N3N2N2M3L4J6EZli5\"}], [{\"size\": [848, 480], \"counts\": \"_jW58Vj04L2N3M3N1O2M2N2O100000000001O001O1O00001O00001O000000O010O10O01O100O1000O1000000O1000000O10000O10000O2O002M4L8EW_f5\"}, {\"size\": [848, 480], \"counts\": \"_eT34Yj07I5K4L3N3L5J5K5L4L4L4L4K6J6K5J6J6K4M4L3M3J6I7L4L3M4L3M3M3M4L3N2M4M2N2N2N3M2N2N2O1O1eNoJW]OQ5ab0cKR]O^4lb0iKo\\\\OW4ob0mKn\\\\OT4Qc0nKm\\\\OS4Rc0PLl\\\\Oo3Tc0SLj\\\\On3Uc0TLj\\\\Ol3Vc0TLi\\\\Om3Vc0ULi\\\\Ok3Vc0WLi\\\\Oi3Vc0YLi\\\\Of3Wc0]Lf\\\\Od3Yc0_Le\\\\Oa3Zc0k100000O10O100000O0100c]OXIRa0h6l^OZITa0e6j^O_IUa0a6h^ObIXa0^6e^OeI[a0[6`^OjI`a0c700000O10000O100O1O1O1O2M2O1O2N1O2N1O2N10001O10O`J_]OQ3bb0lLb]OS3^b0kLe]OS3\\\\b0kLg]OS3[b0jLh]OU3Yb0iLj]OT3Yb0hLk]OU3\\\\b0cLg]O[3ab0\\\\Lb]Oc3ab0XLb]Of3ab0WLa]Og3bb0UL`]Oi3gb0PL\\\\]On3gb0oK\\\\]On3db0QL_]Ol3bb0SLa]OIeNa3ic0gLX^OS3ha0mL^^Om2ca0RMb^Oi2]a0YMc^Of2\\\\a0[Mf^Oc2Ya0_Mg^O_2Ya0bMg^O^2Ya0bMh^O]2Wa0dMj^O[2Wa0eMi^OY2Xa0gMi^OX2Wa0hMj^OW2Ua0kMk^OS2Va0mMk^OR2Ua0nMm^OP2Ta0oMm^OP2Sa0PNo^Om1Ra0RNQ_Ok1Qa0TNP_Ol1o`0SNT_Ok1m`0SNU_On1i`0QNZ_OQ2b`0nMa_OW2Y`0gMj_Oa2k?^MX@h2b?UMb@U3S?hLPAY3n>fLUAY3k>eLWA[3i>cLYA]3h>aLYAg1TLHif04\\\\YOJdf04_YOKbf02bYOL^f02eYOM\\\\f01fYONZf01hYONYf0OkYO0Uf0LoYO3Rf0JRZO4oe0HVZO6ke0F\\\\ZO6fe0G]ZO7de0FaZO6be0EcZO8Qh0GSSU5\"}, {\"size\": [848, 480], \"counts\": \"ajm27Yj000000O100O101N1O1O100O1O100L4J6N2M3M2N3L2K3K7M2M3O3L5M2`N_NPZOb1ke0mNeYOY1Zf0Y16J5O2L3O01N3L3O0O1011O10100O12Ne0QYORMRe0X4N0O1001O0O10000O1N2N2N2I8eNnZORMWe0g2]1YOSYOcMVg0W2g0K3YNfWOS1oh0L3M4L3M5K6I7J:BVea7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Zjc4;Tj03L4L4L4M2N3L4M3M2M3N2M3N2N2M4M1O3L3O0O2N2N3N2L3N2VXOeM\\\\g0\\\\2<2M100O10001O0O100O100O1000O101O001O1O2L3L5M3N2M3M3M3M3Nc0]O5J6J6ZOZVO4`cY6\"}], [{\"size\": [848, 480], \"counts\": \"fQR54[j03K30102L2O1O1O000000001O0O10000O10O0100O100O1O001O010O0O2O1N2M2O1O20OO2O0100O100O2O1N10N2O01O010O00001O001O1O1M3M4M3K]ii5\"}, {\"size\": [848, 480], \"counts\": \"dZo15Yj09Fb0]O?B7H7K4L4M2N2M3L3M4L3N2N2M3L4J6L5L3L4N2M3N2N2N2M4K4N2M4L3N3L3L5K5I7K4L5L3N3L4M2N3M2O2M2O2N2N101cNkIX]OOn0X6ba0`JS^Oa5ja0dJT^O]5ja0eJT^O]5ia0gJT^OZ5ja0kJR^OW5ka0mJR^OU5la0PKo]OR5oa0h1N3N2M3M3N2N2N2L4O0O2O1O0O2O1O001O001O10O0001O0100O10O10003L6KXMV_OmKe`0n3b_OULY`0c3Q@_Lk?[3]@fL`?X3c@iL[?V3g@mLU?Q3n@SMn>j2TA[Mh>a2\\\\AcM`>Z2cAiMZ>Q2lARNQ>e1XB\\\\Ng=_1^BcN`=[1aBgN^=X1cBiN\\\\=T1gBmNW=YNg@?T2X1U=VNm@>o1^1Q=QNUA=l1g1j<hM`A>h1l1e<dMfA=h1P2a<aMiA>g1Q2a<^MjA`0f1R2b<XMkAf0d1Q2c<TMmAk0`1Q2c<PMQBo0\\\\1P2e<oLoAR1\\\\1o1g<lLnAU1[1n1h<kLoAW1Y1n1h<jLoAX1Z1n1g<hLQBY1Y1o1f<gLQBZ1Z1n1f<gLQB[1Y1n1g<cLRB_1X1n1e<aLVB`1V1P2c<\\\\LZBd1T1P2`<]L]Ba1U1Q2^<]L`B`1S1R2]<^LaB_1S1S2[<^LcB]1U1S2W<`LfB\\\\1T1T2T<aLjBX1U1U2o;eLnBS1U1V2n;fLQCP1T1X2j;hLUCn0S1X2h;hLYCm0Q1Y2g;jLYCl0R1X2d;lL\\\\Cj0R1Y2a;mL_Ci0Q1Y2_;nLbCg0Q1Z2\\\\;oLfCe0o0[2Y;QMjCb0o0\\\\2U;SMoC?m0\\\\2T;VMPD=m0\\\\2S;VMRD=m0[2P;XMUD<l0[2n:YMXD<k0Y2l:[M\\\\D:k0X2g:^MbD9j0U2b:bMgD9i0Q2a:eMhD:h0n1`:hMkD9f0l1`:jMlD9g0j1\\\\:mMoD9g0f1[:PNoD;h0b1X:SNRE;h06nKJY>DRE=j0FWL4Q>GQE>R2Jm8HSE>o1Km8EVEa0m1Im8EWEc0k1Hn8CZEe0h1Gn8C[Ef0h1Fn8B\\\\Eh0f1DQ9AZEk0i1_OW=b0kBZOV=f0kBXOV=h0kBWOU=i0kBTOW=m0`BRO]J0Tc0n0[BXOk=h0TBZOk=g0RB\\\\On=d0RB\\\\On=d0QB]Oo=b0RBZOR>f0oAVOS>j0oAQOU>o0f5O00100O101N10O0100O1O00100O01O0010O1O0010O01O000001O00000O10000O1O101O010O0000000010O0001000O010O2N1O1O3M2L6HX_\\\\4\"}, {\"size\": [848, 480], \"counts\": \"Zmd38Qj0>E;iVORO[h0c1N1O2O1K4N3N2M3N2M3N2O2N1O10001O1O1N101O1O0010O000000001N3M3L7I3N2N101Na0@3M3K5L5J7J4K9Fjda7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"dRj37mi0a0H5L6I5L3M3L4N1N3N001N2N2M3N2O0O2O1O1O001O2N0O101OO11O001OO2O0001O1OO200O1O1O2O000010O1O01000O010O01O1O1O2N0O101N101N3N4L2M2O2M2O2M2N3M2O1N2O2N1O1O2N1O2N1O1M3L4N2M4M2M[Q]6\"}], [{\"size\": [848, 480], \"counts\": \"Wd`4:Uj03M3N1O001O1O000O1000000O10000O0100O01O1N101O001N1O1O2N2N10010O010O1O01O1O01000O10O01O10O010O01O100O010O001O1O1N2O2M3L7GX\\\\Z6\"}, {\"size\": [848, 480], \"counts\": \"eY:e0ai0d0A>D9I6J3M2N2M3N2M2O2M2N2O2M2O1O1O2N1M3O2M2O1O1N3N1RNhLc\\\\OZ3Yc0lLc\\\\OU3\\\\c0mLb\\\\OU3]c0kLb\\\\OV3]c0kLa\\\\OX3^c0hLa\\\\OZ3]c0gLb\\\\OZ3^c0fLa\\\\O\\\\3]c0eLa\\\\O]3_c0cL`\\\\O_3^c0bL`\\\\Oa3^c0_Lc\\\\Oa3]c0_Lb\\\\Oc3\\\\c0^Lb\\\\Od3]c0]Lb\\\\Od3^c0\\\\L`\\\\Og3^c0YLb\\\\Oh3^c0XL`\\\\Ok3^c0ULb\\\\Ol3]c0ULb\\\\Ol3]c0TLb\\\\Oo3\\\\c0QLd\\\\OP4[c0PLe\\\\OR4Yc0oKf\\\\OR4Xc0oKh\\\\OS4Wc0mKg\\\\OU4Wc0lKh\\\\OW4Vc0iKj\\\\OX4Uc0iKi\\\\OY4Uc0hKj\\\\O[4Tc0aKP]O`4nb0aKR]Oa4jb0aKW]O_4gb0cKW]O`4hb0_KX]Ob4gb0_KX]Oc4gb0]KW]Oe4hb0[KX]Of4hb0ZKW]Oh4hb0WKX]Oj4hb0RKZ]OQ5eb0mJ\\\\]OT5db0kJ\\\\]OV5cb0kJZ]OY5eb0gJZ]OZ5fb0eJZ]O]5eb0bJZ]O`5fb0_JY]Oc5fb0]JY]Of5fb0XJ[]Oi5eb0VJ\\\\]Ok5cb0TJ]]Om5cb0QJ_]OP6`b0nIa]OS6_b0kIb]OW6^b0gIb]OZ6_b0cIb]O^6_b0`Ia]Ob6_b0]I`]Od6`b0\\\\I_]Oe6P1nIn?S6P@YJ_NWOm`0a6a@eJ]?[5a@iJ\\\\?Y5a@jJ]?W5a@lJa>dNi@a6a0oJ`>iNk@Y6a0RKa>jNl@T66_Kk>cNk@P61eKR?aNh@n5OeKW?_80OO2OO010dJVATOi>k0ZASOf>l0\\\\AROf>m0\\\\AQOd>n0_AoNc>Q1]AkNg>T1[AkNd>U1]AjNd>S1`AkNa>S1bAkN_>T1cAjN^>T1eAiN]>U1eAhN]>V1gAgN[>V1iAgNY>V1kAfNX>X1jAfNX>Y1jAeNW>Z1jAdNW>\\\\1kAaNW>^1jA`NX>`1iA]NY>b1iAZNZ>e1hAXNZ>g1hAVNZ>i1gATN\\\\>k1fAQN]>o1cAmMa>Q2bAkMb>S2_AiMe>V2]AeMg>Z2[AaMj>]2XAaMi>^2YAfMa>[2_AkM\\\\>T2eAoMW>Q2iARNU>m1lAUNQ>j1PBXNo=g1RBZNl=f1TB\\\\Nk=d1UB\\\\Nj=d1VB^Ni=a1XB`Ng=_1YBcNf=]1ZBcNf=\\\\1ZBfNf=Y1ZBhNe=W1[BkNd=U1\\\\BlNc=S1^BnN`=R1`BQO_=n0aBUO\\\\=j0dBXO[=g0fB[OX=d0iB]OV=b0jB_OV=a0jB@U=>lBCU=;lBHS=5mB2R=GPC:X=[OiBg0f=_L__Oc1m2n1_>jMcAV2^>gMcAY2_>cMcA]2b>\\\\MaAc2h>SMYAm2g>RM[Am2f>QM\\\\An2e>PM]Ao2c>PM_Ao2b>PM_Ao2a>QM`An2`>RMbAl2^>TMdAi2]>VMgAg2Y>YMkAc2V>\\\\MPB^2o=cMWBW2i=iM^Bo1c=QNcBi1^=VNgBd1Z=\\\\NaCi0_<WOcCf0^<ZOdCc0]<]OeCa0[<_OgC?Y<AjC;W<EkC9U<FnC8R<HoC6R<JnC6R<JnC5S<JnC5S<KlC6T<JlC6T<JlC5U<KkC5U<KkC4V<LjC3W<MiC3W<LkC2V<NjC2V<NkC0W<0hC0X<0hCOY<1gCNZ<1gCNZ<2eCN\\\\<2bCO_<1aCN`<2`CLb<4^CKc<5]CHf<8]CDe<;]CBd<>g6O1000000000O1000O10000000O1000000000000000000O10000001O00000O0100000000001O1O00000000O0100000000000O1000000O100O10000O010000O1O10O0100000O1000O10O01O2OO010000O100O2O000O2O0O2O0O3L3LjlP4\"}, {\"size\": [848, 480], \"counts\": \"[\\\\l3?ji0:H7L3M2O2M2N3K5K5I7L5L3N2N2O002N1O1N2O1O1O1O2O2M6J:F:Ge0ZO3N4M2OlMoYOdNN0Vf0W1PZO`Nb0H_e0e1SZOXNi0K\\\\e0i1U2L5J5K2N4M2M6J5J7I9FZP[7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"klm28Qj0:F9L2M4M3L3O2L3N3M2O1O1O1N2O1O1N2O1O1O0010O00O110O000001O10L31O000100O01O01O1O101N1O1O101O0O11O00OQOmWODRh0;PXODPh0:VXOCjg0;XXODig0:XXOFig09WXOGig08XXOHig06YXOJhg04XXOLig02XXONhg01YXOOjg0NWXO1kg0LVXO3ng0HTXO7Qh0DPXO;Th0AnWO=Si0N4M3J6L\\\\de7\"}], [{\"size\": [848, 480], \"counts\": \"ZeS24Zj04L3O1N2N2N1O2O0O2N2N1O2O0O2N2N3M2M4N0O2N3M2N3N010O1O01O1O1O1TOPWO6Pi0IQWO7Pi0GSWO7mh0ITWO6mh0GVWO8kh0GWWO7ih0HYWO6ih0HYWO6jh0EYWO;`i0L3NXQW9\"}, {\"size\": [848, 480], \"counts\": \"l:a0j16WOa18WOT`0RO\\\\@7XO_18YOS`0ROZ@:YO[1;XOS`0ROW@>[OW1;ZOR`0ROU@b0\\\\OQ1<]OS`0oNR@l0YOh0b0]OS`0oNP@S1VOa0g0^OS`0nNl_OZ1UO;l0^OR`0mNk_Oa1oN7T1[OS`0mNh_Oo36SMT`0mNe_OQ46RMW`0kNb_OT48PMW`0lN__OV49oLX`0lN]_OU4<PMV`0kN\\\\_OW4=oLW`0kNY_OW4a0nLV`0lNV_OW4e0mLV`0lNS_OW4g0nLQ`0[Ni^O`0<Y4j0lLXa0S3i^OnLUa0R3m^OnLQa0R3Q_OnLl`0R3W_OnLf`0Q3^_OoL]`0P3j_OnLV`0R3k_OnLT`0S3l_OmLg?\\\\Nc^Oj4f1jLg?]N`^Ol4h1gLi?a3W@^Li?d3U@\\\\Ll?d3T@\\\\Lh?i3V@WLi?l3U@TLj?P4T@oKl?S4R@mKn?V4P@hKo?]4n_OcKR`0a4j_O_KU`0f4h_OYKW`0k4f_OUKZ`0n4c_ORK]`0R5__OnJ``0W5\\\\_OiJc`0[5[_OdJe`0_5X_OaJh`0b5U_O^Jj`0f5S_OZJm`0i5P_OWJPa0l5l^OUJTa0m5i^OTJWa0b7000000001O0000100O001O1O1O001O`NbGPA^8m>jGn@U8Q?PHl@o7S?VHi@k7U?[Hg@d7X?aHd@_7[?gH`@Y7_?m1O0000010O01O00\\\\A`EZ=_:fBbEZ=]:eBfEY=Y:iBhEV=W:jBjEV=T:jBoEU=o9lBSFR=l9oBVFP=h9RCXFn<f9SC\\\\Fl<b9UC`Fj<]9XCeFg<W9]CjFb<R9aCoF_<k8fCWGY<a8nCaGQ<U8WDmGi;P8ZDQHe;m7\\\\DUHc;j7^DVHb;i7^DYHa;g7^D[Ha;e7]D^Hb;b7[DbHd;^7YDeHg;[7VDiHi;W7TDlHl;T7QDoHP<P7nCRIR<n6kCUIU<j6jCXIW<_4dBVKR18_<\\\\4gBZKi0Mn<e4]B^Kc0NQ=a4_BaK?MU=_4^BdK<MW=\\\\4aBfK7NY=W4eBkK1N[=m3nBULFM_=g3RC[L]ONc=c3TC_LYOMe=`3VCbLTOMh=_3VCdLQOMk=\\\\3WCfLmNNn=Z3VCiLjNNQ>U3YClLeNOT>Q3ZCPMaNOW>m2\\\\CSM[N2Z>g2_CVMVN3]>i0l@XOb2LRN5b>d0m@XOa2OnM7e><RA]O[20lM8i>4WABV21hM;l>K]AGQ23cM=Q?CaAJl16_M?W?XOgA0e18[Mb0_?lNfA8a1:XMd0Qb0POi@;TMg0Ub0kNh@?oLh0\\\\b0fNf@c0jLj0bb0_Ng@Q3Z?mLg@R3[?jLh@V3`?XLj@g3Qc0N1O1O2N100O1O2N1O1O1N2O2N1O1O1N2O1O2M2O1N2N3N1N3M2O2M2O2M2O2M2N3M3N1N2N2O2N1O2N1N3N1O1O2N1O2N2N2M3N2M4L3N4K6Hf\\\\W7\"}, {\"size\": [848, 480], \"counts\": \"[cU4b0ji03M4M3L4K4K4J6O1L4M4aN\\\\NPZOf1ke0kNgYOW1Xf0QO_YOQ1`f0^12N1N3M3J5O2OL3O2O01N2011O1O2N6J>PZO]LXd0Q5M1O00O10000O1O2M3N2N3M4YNhZOnM]e0m1U[O_MRe0j1kYO\\\\Nig0`1ZXO\\\\Nng0\\\\1k0H4K3N3M3M4L7G9G_ci6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Pad12\\\\j03N2N1M4L4N2L4L4M2N2M4N2N2L4N2M3N2N2N3M2M3N2N1O2N2O0O1O2N2O0O2O0O2O000O2O001N100O100000O10O1000O10000O1O100O2M2O0O3M2N2M4M3L5L4I8Cj0[O^`Q9\"}], [{\"size\": [848, 480], \"counts\": \"R_]18Uj05J5K5K4N3N1O1010O0000001O00000000000O100O10000O1000000O10O10O10O010O1O010O001O001N101N2O0O1010O10O0010O1O10O1O01O01O10O1O1O1O1O1O100O1O2L4G802L3NRiR9\"}, {\"size\": [848, 480], \"counts\": \"^U34Yj05K4M3K4I7C=M3O1O1O001N1]JEQA=f>0TA1g>9RAJh>b0n@Ak>k0n@XOl>P1PAROj>U1TAkNh>\\\\1TAfNd>c1XA`Na>i1YA[Na>l1[AWN`>o1]ARN`>T2[AoM_>Y2]AhM_>`2\\\\AbM`>f2ZA[Ma>S3TAoLj>^3j@dLR?i3b@YL]?R4W@PLg?]7O1O1O2N100O010O1010O01OZOW@fFi?X9]@eFb?Z9a@dF_?Z9f@cF[?[9g@fFW?Z9k@eFU?Y9Q1O2N100O2NeAoFZ;Q9eDVGU;i8kDnG_:R8`ERHl8lNhEP9\\\\1WH\\\\8BmEW8AlG?`0o9DlEQ8BQH>>Q:EjEg9NiFV:CiEg9GnF^:^OiEh9CmFOlM^:b1mEQ<X:RDeEn;[:UDaEm;^:R210O1O1O2N1O101N2O1OO010000000O100O2O0O10000O101O0O1O1O1O100fNbEaB_:V=kEhBV:o<TFoBm9h<^FVCb9d<eFZC]9`<iF_CW9]<oFaCQ9U2ZEV7i1dFn8U2]EP7j1jFi8U2`Ec2FjNU2\\\\Lh8U2_E]25oJGY3T2PMc8Y2aES2S1TN\\\\<GcBP2\\\\1nMU<2_Bm1e1gMQ<:\\\\Bk1l1aMl;d0YBg1T2[Mh;l0WBd1Y2VMf;U1RBa1`2nLe;`1mA_1e2dLg;k1fA^1^b0bNd]O[1^b0cNd]O\\\\1]b0bNe]O\\\\1]b0bNe]O^1Zb0bNg]O]1[b0`Nh]O^1Zb0_Nh]O`1Yb0]Nk]Oa1Wb0\\\\Nk]Od1Xb0mLZ\\\\Ok0`1W2nb0]MV]Ob2^e0N3N1N2N2O2M2N3M2N3M3N4K5iNiWOL\\\\h0ImWO3Xh0FlWO9Wh0BlWO=Uh0_OnWOa0Uh0VOQXOj0kh00001O0000000000O1O10O100O1000000O1000000O1000001O0O1000O010O01001O00O10O100O01000O10000O01000O1O10O0010O00100O100O010O000001O000O2O1N2N1O2N2N2N2La_c6\"}, {\"size\": [848, 480], \"counts\": \"RVf43]j01N101O00001N10000O0O3N1N2O1N2O0O2L4G9L4M2M3N2M2M4J3L40MeNgNgYO[1Yf0mN^YOU1cf0[10000O00O2N1O2O2O01O001O1TZOQMWd0Q3_[O^M[d0c2_[OdM_d0a2Y[OcMgd0S400O0100O10000O101O0O2M6cN^1lNlXOZN`g0a1cXOVNgg0f1e0L3M3M5K4L2O2M3M5J6K6IZTj5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"XTU241<fi0>H8I4J6L4M3M2M4M4L2N3M2N3M2M4M3M3N2M3N1N2M01101N1O1O2O0001O001N20O01O1N3N1N2O1O1O1O1N2N3N1N2O1O2M3N2N3L3N2M3N3M2M5K4L4L6J6K4J7J4K6KSk`8\"}], [{\"size\": [848, 480], \"counts\": \"g]m2>li09K2N4N0010O001O00000000O2O00O1000000000O10000O10O0100O1O010O010O100O001O1O001O1O00100O10O1000000O2O0O100O101N100O1O2O0O2O0O2N2N2M4M3L8HSnf7\"}, {\"size\": [848, 480], \"counts\": \"Y^\\\\1>Ve0EZ_Oo0cK[Odc0b0V@U1V?[Of_O]2\\\\?lMQ@g2i?_Mj_Om2P`0ZMe_OP3V`0XM`_On2[`0]MX_Oj2c`0d3K5I6L5L4K5M2M4K5J5K6K4L4M4J6L3N3M2O1N2N2O2N101N1O10QN[BSGf=i8iBkFW=S9PCiFP=U9UCgFl<X9WCeFj<Y9ZCbFi<]9S21M2001ON30O11O2N2lNfFQA[9b1YGo9C\\\\DV96kHS;VNdDc<U;bChDe<n:aCnDg<h:g1I5K5J;Fi0XO3N1N2N3M2N1O2N1O1O0100O10O10001H]^O`Gda0`8]^O_Gca0a8\\\\^O`Gca0a8]^O_Gca0a8]^O_Gca0g8O10J^^O^Gba0a8`^O^G`a0c8^^O^Gba0i8N101O1O1O1O001[HnGjLR8Q3oHSLR7i3UIRLl6l3YIQLh6l3]IQLc6m3dInK\\\\6o3mIkKR6T4_J]K`5b4fKZJZ4d5[LiIe3U6nMZHR2d7TNXHm1d7WNZHl1b7VN^Hl1\\\\7YNbHi1V7^NjHc1k6hNTIX1d6PO[IR1d5N\\\\J3X58hJIQ5=oJEj1eF0i9UNEd1iF4d9WNEb1iF6b9WNJ]1gF;_9WNNZ1eF>]9XN1V1dFa0[9XN6Q1bFf0X9XN>h0^FP1W9SNa0d0]FX1W9lMn2R2i:O1O100O1O1N3N1N3N2M3M2N3M2ON11O01O010O1N111N1O1N201N1O2N3N2M3M\\\\N[XO`0dg0]OcXO?\\\\g0_OhXOa0Wg0^OkXOa0Ug0^OlXOc0Rg0^OoXOa0Qg0^OQYOa0nf0@RYOa0lf0@TYO`0lf0_OUYOb0jf0^OVYOb0if0^OXYOb0hf0]OYYOc0gf0\\\\O[YOd0df0\\\\O\\\\YOd0df0\\\\O\\\\YOd0df0[O]YOe0cf0[O]YOe0cf0[O]YOe0cf0ZO^YOf0cf0YO]YOg0cf0YO\\\\YOg0ff0XOZYOh0ff0WO[YOi0ef0WO[YOh0gf0WOYYOi0gf0WOXYOi0if0WOWYOi0if0WOWYOh0jf0XOUYOh0lf0XOSYOh0Pg0UOPYOl0Yh00000000001OO1000000000010O0001OO010O1[OUOdWOm0[h0WOaWOk0]h0WO]WOm0dh0TO[WOl0`h0c0M4N2O1O10PNiWOh1Vh0XNnWOf1Qh0[NPXOc1Rh0;4L3N3N1N1O1N1000M3001O1O100O001N2O3MJeNYWOZ1dh0:001O001O1N10O2N11O:E6K4K7I5K3M5K3M202KlkZ4\"}, {\"size\": [848, 480], \"counts\": \"QP\\\\6>ei0>G:L2O1M3J5K5M4K4J6bNZNiYOn1Vf0_NXYOh1hf0P1O^O[YO\\\\Mdf0d2`YOXMbf0f2`YOTMef0l2\\\\YOSMdf0h2d0L3O01O1O2N1O2O3M4M2O2M2O0000O001L4O1000001O0O5L2N201F]XOaMfg0X2`0J4BbWObNch0[1;M3M3L3O101N<B8Hfaa4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"^jW3?]i0m0F1PWOdN^h0P2I7J6L3M4L4L5K2N3M3N1O2O0O2N1N200O10000001O001N10001N1O101N2N1O1O1O2N2O1N3M2N2M3O1N101O1O1O1O1O100O1O100O1O2N2N2N1N3M2N4K5M1N3N1N2O3L3N1O1N2O2N2N2N1N3J6L6IQcR7\"}], [{\"size\": [848, 480], \"counts\": \"_ad36Uj09J3L4M2O1N2N3M200O1001O00010O00001N11O000001O00000001O00001O000000001O0000001O01O001O10O01O1O001O1O1O1O1O00100O001O1O001N101O00001N10001O1N2O1N3M2Njjj6\"}, {\"size\": [848, 480], \"counts\": \"[dS2:Sj03gGd0\\\\E_O]:i0`EXOY:Q1bEROY:U1cEmNX:\\\\1aEgN[:c1lDPOn:Y1lDjNQ;]1iDeNS;b1iD_NS;i1fDZNV;n1cDUNY;R2]DUN^;T2WDSNd;V2oCSNj;X2lCmMQ<Z2gCkMS<^2eCgMV<a2dCaMY<f2^C`M]<h2ZC^Mb<i2oBbMm<f2TBVNh=Z7N3M3N1M4N1O1N2O001O000000N2N3N2N2O100O1N2L3L5L4N2N3N1M3N3M2M4L4M3M3N3L3N1O1OXDhEX7Z:dHPFk51hFQ:o1hE^N:f8Y;THdEeNWOR9X;PGRGDiMW9X;mF^HQ9c7jFbHU9^<O0N2O1O1O2O0O1O1O1O1O100O1O1O100O100O100O1000001N101O000000O10000oN[GW@e8h?^GW@a8h?aGW@_8W7dGmG<`7B\\\\I^8e5VJd0^MfI\\\\8]5fJf0oLlI[8X5SKd0dLRJ[8X5UKb0bLTJZ8X5ZK?^LXJX8Y5`K7\\\\L^JU8Y5fK0YLfJQ8Z5iKI[LlJm7Z5jKC_LSKf7Z5nK]O`LXKc7Z5PLYO`L\\\\Ka7Z5RLTOaLaK]7[5ULmNdLfKX7[5XLiNcLlKU7[5\\\\L`NeLTLP7[5_LXNgL\\\\Lj6\\\\5cLnMjLdLe6]5dLeMnLnL_6f2WG_Oa5a0PMZMX6c2^G^O^59TMfMQ6_2bGA\\\\5M[MQNi5_2dG@^5[OdMfNZ5^2iG^Oa5dNoM]Oi4_2mG[Oic0d0^\\\\OVObc0j0b\\\\ORO_c0l0f\\\\OPO[c0o0h\\\\OnNYc0P1h\\\\OPOYc0n0i\\\\OQO_c0e0d\\\\OZO^c0`0g\\\\O_OZc0:m\\\\OESc04U]OKmb0K[]O4Qc0jNg]OU1je001O000O100O1O10000O1O100O10O0100O01000O10O1000O100O1000000O010O1O10O0100O100O10O0100O010O010O0000100O010O10000O100O100O010O01000O010O000010000O010O011N01O010O010O010O1000OO2O100O10O10O100O100O101O000O01000O010O10000000O10O10O1000000000000O100O100O10000O10001O0O1000001O0O11O0001O00001N101O1N2O0O101N3N2KZhf2\"}, {\"size\": [848, 480], \"counts\": \"^Xi61^j02O0O10000O11O0000O1O100O10O10O1O1M3L3O2L3O1M4M2I6H9K4O1M3J6M31O1ObNnNaYOR1^f0TO]YOh0ef0\\\\OZYO`0hf0AXYO7Pg0IQYO5nf0NRYOOnf03RYOLlf08TYOFhf0?XYO@ef0e0[YOYOi0_OSd0Y1T[OVOi0EQd0V1V[OSOi0IPd0U1W[OQOi0Lnc0R1[[OROf0Mnc0Q1\\\\[OTOc0Noc0o0^[O[O7J[d0j0_[OU1ad0kN^[OV1bd0iN_[OV1bd0jN^[OV1bd0iN_[OW1ad0iN_[OV1bd0iN_[OW1ad0iN`[OU1ad0kN`[OQ1cd0oN^[Om0ed0SO[[Og0kd0XOW[O<Te0DmZO9Ve0FlZOKbe03aZO[OQf0c0RZOTOXf0g0m1L:F5K4L2N1N3N5KiWf3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"oda3R1Yi08F:I6K6L4H6M4L3N3L4M2N2L4N2N2N2O1N2N1O2N1O2M20000O2O0O100000000000O10000O101N100O2O0O2N2O0O2N2M2N3O1N2N1O2N2N2N2VO]XO^NKHlg0e1k0N2N2O1N4M2N1N4M4L3M4L4K5L4K8I1N3NdT4Onhc6\"}], [{\"size\": [848, 480], \"counts\": \"__n33Zj05K5M2N2M2N3O1N2N1N2N2O2N100001O0001O01O0O110O0000010O000001O01O01O00001O00001O01O00100O1O001O2N100N2O1O010O001O1O000O2O001O001N3N2M2N5Hjke6\"}, {\"size\": [848, 480], \"counts\": \"hfV2Q1Yi09H8H6J7J6K5J8H7I8[^OUMZ;Q3`DTMZ;R3aDRMZ;U3aDmL[;[3`DgL[;`3aDaL\\\\;d3aD^LZ;i3aDYLY;P4cDQLX;Z4aDgKZ;c4^D`K];i4WD`Kc;g4SDaKj;d4RD]Kk;h4SDYKj;k4TDVKj;m4TDTKj;o4SDSKj;P5TDQKk;R5QDQKm;Q5PDQKn;R5PDPKo;R5mCQKQ<Q5lCQKS<Q5jCRKT<P5iCRKV<Q5fCRKY<o4dCSK[<o4cCSK[<P5aCSK]<P5_CSK_<P5^CRKa<Q5ZCRKe<Q5WCQKg<S5TCoJl<T5PCnJP=S5lBPKT=R5gBQKX=S5bBPK]=T5^BnJb=V5WBmJh=W5SBkJl=Y8QBfDP>W;e0O2O1N1O2N1OlAeDV=Z;jBlDR=Q;oBREP=l:RCTEm<j:VCVEj<h:YCWEg<g:ZCZEe<f:\\\\CYEd<f:^CZEa<e:aC[E^<d:dC\\\\E[<c:hC\\\\Ec;L[Cg:S1^EX;`0VCT:e1[ER;`;QE_Dk:c;YE[D`:k;gFYDl7h;RH`Dh7a;WHdDd7[;]HgDb7X;]HlDa7S;ZGSEUNN`:n:WG\\\\Ff8d9WGaFh8^9VGfFi8Y9UGlFi8S9UGQGj8n8TGVGl8i8QG\\\\Gm8c8RG`Gn8_8oFeGP9Z8mFkGS9T8hFSHW9k7gFYHX9h7dF\\\\H\\\\9c7bF`H^9P3WFRM90`9l2\\\\FRML9h9d2_FSMB>o9]2eFh1Z9UNPGd1o8ZNYGb1f8ZNbGc1]8[NgGc1Y8\\\\NjGc1T8]NoGa1Q8`NoG_1R8`NoG_1Q8aNPH^1P8cNPH\\\\1P8cMWFYKk1S7m7\\\\MdF^K_1U7m7XMjFcKZ1S7l7UMPGgKW1Q7i7QMWGoKQ1i5oM_Ji9g3ZGQLP1e5PNaJf9g3]GRLo0d5QN`Jc9i3_GSLn0a5SNaJ`9k3`GRLo0_5SNcJ^9l3`GRLQ1]5SNcJ\\\\9j2XF]MY1JP1Z5TNeJ[9c2`FcMR1JQ1X5TNgJY9c2bFcMP1LR1U5TNhJX9c2cFcMQ1LR1S5TNjJW9c2bFdMR1LR1P5UNlJU9c2dFcMR1NQ1l4WNoJR9d2cFdMT1LR1i4WNSKQ9d2aFcMW1MP1d4[NXKm8d2aFcMX1MP1^4^N_Ki8a2cFcMX1NP1Z4`NbKg8a2bFeMX1NP1V4aNfKf8_2bFgMX1MQ1R4bNkKd8^2aFhMY1MR1l3dNoKb8^2`FiMZ1MR1h3fNSL_8[2bFmMX1MR1c3iNVL\\\\8[2cFoMW1LS1_3kNYLZ8[2bFQNV1MT1Z3mN[LX8\\\\2bFRNU1MV1U3a9iNUDVNU1LU1R3c9kNUDVNT1LV1m2f9nNRDYNS1LW1g2l9hNQDdNn0NU1a2R:_NVDROd0OT1Z2Z:]NRDZOa0OU1T2]:aMZB5Q2730V1m1c:bMYB4m1=20V1h1e:fMWB4m1>10X1b1g:nMPB3o1>20Y1[1k:SNZDb0B1Z1S1j=lNm@1Y1m0o=QOi@3Y1e0S>XOe@3Z1=V>@a@3Z16Y>G^@4[1M\\\\>OZ@3_1C]>:U@2Td0Mn[O3Pd0NR\\\\O0nc00S\\\\O0lc0OW\\\\OOic01X\\\\ONhc02Y\\\\ONec03\\\\\\\\OLdc04\\\\\\\\OMcc02_\\\\OMac03_\\\\ON`c02a\\\\OM_c03a\\\\ON]c03d\\\\OM[c03e\\\\ONZc02g\\\\ONXc02i\\\\ONVc01l\\\\OORc02P]OMob03S]OLlb03W]OLhb04X]OMgb03Z]ONdb02\\\\]O0bb00`]OO_b00c]O1[b0Og]O0Xb00i]O0Ub01m]ONRb02P^OMoa03R^OMma03U^OKla04V^OJja06X^OGha0:W4000O10000O10000000000O1000000O01000001O000000000000001O00001O000000000010O100O10O1O1O1O010O1O100O1O1O001N2O1O001N2OPUk3\"}, {\"size\": [848, 480], \"counts\": \"j[R75[j0000O10001O00O10O100000000M3L4M2N2N3M3M2N3L3K5NOO3O1N4N01O2M2O3J5N2NmMFUYOG2`0jf00lXOE97lf0P1VYOlNjf0W1UYOfNlf0\\\\1TYO`Nmf0d1RYOZNnf0i1RYOSNPg0o1f03K4J7L4M3dYOnMWd0T2d[OTNWd0n1Q[OZMNk0Qe0k1Q[OiNnd0Y1P[OhNod0Y1Q[OgNod0Z1P[OfNPe0[1oZOeNPe0]1nZOcNTe0]1kZObNVe0_1hZOaNYe0Z3100O1O2M2\\\\N_ZOoMke0[1WZOlMVg0R2oXOiMUg0U2kXOkMXg0Q2hXOoM_g0k1aXOSNdg0i1e0L5K7I3M3M3M6K5J7ITjY3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Vg\\\\3f0ci0;G8J5K5I7K5L4L4L3M3M3N2M4MbNeXOJYg04mXOJPg07RYOHnf07TYOIjf07WYOIhf07ZYOIdf08\\\\YOHcf09^YOG`f0:`YOG_f08bYOH]f09cYOG\\\\f0:dYOF[f0;eYOEZf0<fYOCZf0>fYOCYf0=gYOCXf0>hYOBXf0>gYOCXf0>hYOAYf0>hYOBWf0?iYOAWf0?iYOAWf0>jYOBUf0?jYOAWf0?iYOAWf0?iYOAWf0>jYOBVf0>jYOAWf0?iYOAXf0>hYOBYf0<hYOCYf0=gYOCZf0<eYOD\\\\f0<dYOC^f0<bYOB`f0=aYOB`f0>`YO@bf0`0^YO^Oef0a0[YO]Ohf0b0XYO\\\\Okf0c0UYOZOnf0e0SYOXOPg0i0PYOSOTg0l0mXOnNXg0R1T1O1O1O1N2O2O1N1N2O2N1N2O5DnUU7\"}], [{\"size\": [848, 480], \"counts\": \"PTg32Yj08I6L3M2N3M3N1N3N1N2O1000000001O0000001O001O0000001O0000000000O10000O10O0100O010O100O1000O01000000O10O010O10001N101O0O01001N101N101N2N2N2N3L4Kehj6\"}, {\"size\": [848, 480], \"counts\": \"^ll1a0ji06K5L4L4K5I7XOg0N3N1O2N101N1O2N1K6M2M4L3L5L4W^OlLR<X3iClLS<^3dCdLZ<d3^C_L_<f3\\\\C\\\\Lb<k3XCVLf<P4SCRLl<S4lBRLQ=V4fBmKY=X4`BlK^=\\\\4YBgKe=a4SBaKk=f4oA[KP>j4lAUKS>Q5hAPKV>S5iAmJV>V5gAkJW>X5hAhJW>Y5hAhJW>Z5fAgJY>[5fAfJY>\\\\5eAeJZ>\\\\5eAeJZ>\\\\5eAeJZ>]5dAdJ[>]5dAdJ[>]5dAdJ[>^5bAdJ]>]5aAdJ_>]5_AeJ`>\\\\5_AdJb>]5ZAfJe>[5ZAfJf>Z5XAgJh>Z5VAhJi>Z5UAgJk>Y5TAfJm>[5RAeJo>\\\\5n@fJR?[5l@eJT?\\\\5j@_J]?b5a@[Jc?f5[@ZJe?h5Y@VJj?k5S@SJQ`0n5m_OQJV`0o5h_OPJZ`0P6d_OQJ4fN]?[7Y@RJ<bN[?[9e@eFZ?Z9j@dFW?Z9k@eFn09o;R9VCcFi0?o;m8REUGm:j8SEXGl:g8SE[Gm:d8SE^Gl:a8SEaG_9AkDn8d1dGZ9KlD`8f1jG[9MkDX8f1PH\\\\9NkDQ8_1\\\\Hc9IkDi7X1kHi9BkDc7Y1oHk9AiD_7Y1UIl9k8oE[GP:e8nE]GR:c8mE_GR:a8mEaGR:^8oEcGQ:\\\\8oEeGP:[8oEgGP:Y8PFhGo9X8oEkGQ:S8oEoGP:Q8nERHR:m7lEVHS:k7kEWHU:g7jE\\\\HV:c7hE`HX:_7gEcHY:\\\\7eEgH[:X7cEkH]:T7aEnH`:Q7_EQIa:o6]ESIb:n6]ESIc:m6\\\\ETId:W3PE[L9`0g:S3UEZL3c0i:k2_E`LEg0l:[2oEnLoNk0R;m1[Fa1f9VNcFi1]9nMmFQ2S9hMUGV2l8fMYGX2i8cM]GZ2d8_MdG_2^8[MiGc2X8iKaD_N]3f5S8gKgD[N\\\\3l5m7gKlDVN]3R6g7gKoDPN`3W6a7hKSElM`3Z5mKRKa;g1kIP3jJWK];h1jIo2kJXK[;i1lIj2lJ]KY;g1nIh2kJ`KX;h1nId2mJdKV;f1PJb2mJgKS;f1RJ_2nJkKQ;d1TJ]2mJoKo:c1WJY2nJRLm:b1YJW2mJWLj:`1^JT2kJZLi:`1^JQ2nJ]Lf:`1_Jn1oJ`Ld:^1cJm1oJ^Lb:c1bJj1_7RNfHj1\\\\7QNkHj1Y7oMoHm1S7oMSIl1Q7nMWIk1n6RNUIj1o6UNSIg1P7VNTIf1P7RNXIj1j?L4L4K5L4L4K5L4L4L5K4K5K6IT`Y6\"}, {\"size\": [848, 480], \"counts\": \"ZWn61^j010002L4K4N1O100O10000O100O1N2O1O1O1M2K6MN3O11O1L4M2M3M3M1N4N2O10OO2gNhNVYO^1hf0S1101O2N101O0000OOM5lYOcMVd0_2g[OfMWd0Z2j[OfMSd0\\\\2n[OdMQd0_2l[OcMRd0b2i[O_MVd0m2][OTMbd0^4O0100O001N2O100O2N1N3M3lNaZOPMde0g2W1N3D<B>K4N6SNiWOX1kh0L2N3M3M4L4L5K:DUT]3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"m^k22[j04M2N3N101N2O0O2O2L3N3M2O1N2N4M1M4L5L4L3M4L3M3M2M2O2N2O0N3O1N3N1N2O0O2O0O1O1000000O1O1000000O1000O1000O10L400O10000O100O1O10000O1O1N2O1N3L3O1O1N2N2O2M2N3M2N2O1M3N3M3L4L6B>C=LnUY7\"}], [{\"size\": [848, 480], \"counts\": \"Ub[31Zj0:H4L4L4M3M2O2O0001O00001O001O00000000001O000000000000000O10000000O10O010000O010O1O001O1O1O0O2O001N2N1O2O1O0010O100O10000O2O1N1O3M3N1M3N2N5JUUW7\"}, {\"size\": [848, 480], \"counts\": \"ZmR21Wj0<K1O1O1N3K4I7K5QK^Om_Oe0f?OR@1j?9o_OIl?b0m_O_On?l0k_OUOR`0U1f_OlNV`0^1b_OdNY`0c1d_O]NY`0h1d_OZNY`0j1d_OWNZ`0m1b_OVNX`0Q2e_OPNW`0U2f_OnMT`0Y2h_OjM_?ZNe^OW4h1aMS?`3j@bLQ?e3j@]LS?g3k@ZLR?k3k@WLR?m3j@ULU?o3f@SLX?R4c@QLZ?V4[@PLd?\\\\70111N1001O001OO1O1O100O10O1O010O2N101NcB[F[8:gEZ9l1bFW8<gER9P2fFU8>hEk8Q2kFS8`0iEc8R2QGS8`0iE^8b1fGb80jEY8b1jGb80jEU8c1nGa81jEP8d1QHa81jEm7e1RHa85gEg7h1VH`86dEd7m1WH^8Q:aGQF^8P:_GRF`8R:[GQFe8R:UGQFj8S:PGPFP9S:jFPFV9S:dFPF]9R:\\\\FRFd9Q:TFTFk9P:kEWFU:Q=10000000000000001O000O100000000O1O1O1000000O1UC`Ef9a:WFcEf9^:YFeEe9[:[FeEd9\\\\:\\\\FeEb9\\\\:^FeEb2B`1k:mKeE0@C8[4c:RLfEJFC:\\\\4[:VLfEFI_Of0^4l9[LhECJcNFAc1c5U9fLjE]OLhNP2g3eM\\\\Lf:g1lEZOJjNV2`3aMfLd:d1oE^N^O[O9<[2V3`MQM`:d1SFRN^OI4:_2o2^MZM^:a1XGPN\\\\N6d2d2_MgM\\\\:\\\\1TGTN]N5h2Y2bMRNW:Y1TGVN[N6k2k1lM\\\\Nm9[1RGXNZN5o2Z1YNkN^9\\\\1PG[NZN4S3Q1\\\\NQOY9]1oF]NYN4V3j0_NTOV9_1mF_NXN4Y3a0dNWOS9c1iFaNWN4_35k:S1`CdNVN4]c0T1_^OgNTN5`c0P1]^OlNSN4fc0g0Z^OUOPN3oc0>S^O_OnM3Wd03n]OJjM4`d0Hh]O4hM4lg0LTXO3mg0MSXO3lg0NTXO2lg0NSXO2ng0OQXO1og0OQXO1og0OQXO1og0OQXO1og0OQXO1Ph0NoWO3Qh0LPXO4Rh0JmWO7Sh0ImWO6Uh0HlWO8Uh0GjWO:Wh0FhWO9Zh0FeWO;^h0^OeWOc0Ti00O10O010000000000O1000000000O10O101O000000000001N10000000001N101N3M5Gm\\\\g5\"}, {\"size\": [848, 480], \"counts\": \"UYd66Zj01N1O10001N00100000000000000O1N3K4N2K5M3N1O2M1M102N2N2O1L4L4L4N010hNeN^YO[1bf0nNRYOU1mf0WOgXOj0Zg0S12O1O100O2N2O00N4M2M3lYO_MWd0f2^[OgM]d0d2P[OhMmd0n3O10O00001O1N2M3O010O1@cZOkK`e0k3lZOoKWe0^3X1I7M3M2O2L4^OcXOeMhg0X2;L5L7TNdWOW1nh0L3M4L5K7I8EURg3\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"mV`3i0`i09H8J5K5L3N3M1N2N4M1O2N2M3O1M2O3N1O2M2O1O1O2L3O1O100O100O1O1O1O100O010O1O0100O2O1N2O2M2N2L4M3M3K6J5I8B>_Oa0J;BUi_7\"}], [{\"size\": [848, 480], \"counts\": \"`[m23[j08I2M3M3M4M1N3N2N1N3O001O00010O00010O001O0001O00000001O000001O0000000000O2O0O100O10000000000010O00002N001O1O002N1O2N1O2N10O01N3N1O1O002M2N102L3Ngec7\"}, {\"size\": [848, 480], \"counts\": \"alc16Wj05J5M3L3H9F9O1O2N1O1O1O1M3K5H8G9hJnMgA]2g=_NhAh1P>cNdAf1U>cNeAa1W>gNaA^1Y>jNaAX1]>nN]AU1`>SOYAo0c>[OUAh0g>APAb0m>IX@j0f?Bc_Ok0Z`0g4L5L3N2M3M2M4M3N1NWOV@QGf?R9_@jFW?_9l@`F^>U:dAiEP>a:TB]Ei=e:n02N2N2N3N2N1000O2O0OTDnD_8P;aGTE]8k:cGYEY8e:iG^EV8]:mGhEo7V:QHnEn7o9RHUFl7j9YG_E^M:Oa0X;f9PGaGo8]8jElHV:R7`EZI^:f6`E^I^:b6`EcId9oKSF3GY:b0hIT:oKYEX:b0mIV:hKXEY:b0SJY:m5fEVJY:j5eEZJT9_K\\\\F0a0MBY:;^JR9RLaF]O0W:4`JX9ZLeF[>X9hAhFX>S9kAmFcNO_?Q9PBPGbNO^?o8QBXGP>g8QBXGP>h8QBWGo=g8UBUGm=j8m1O1N2O011N1O102M1O1O1O1O10001N10O1000O10001O0000hNdG\\\\@\\\\8_?VHT@j7g?^HV@b7f?cHY@]7b?iH]@W7_?oH^@R7[?WIb@j6n>hIo@Y6d>WJTAn5d>S3I7nKaDlHg;o6cDdHd;X7dDaH`;Y7lD[HY;V7\\\\EaHg:j6VFjHn9m6cFhH`9c5]HnIj7P6\\\\6O1YI\\\\\\\\O`6lc0O1O1O0O2gNV\\\\OjKjc0P4]\\\\OoKdc0P4\\\\\\\\OoKec0Q4[\\\\OoKfc0P4Z\\\\OPLfc0Y4Q\\\\OfKPd0P4Z\\\\OPLgc0m3[\\\\OSLec0Y3n[OXL?>cc0Y3P\\\\OXL<?fc0W3o[OZL;?fc0U3Q\\\\O\\\\L9?gc0m2W\\\\OdL2?hc0e2]\\\\OlLK>jc0^2_\\\\OXME;nc0j1k\\\\OnMPO@Hh0cd0Y1o\\\\O`NmN6Yd0T1j\\\\OgNmN5_d0\\\\OT[Oj0n1E_N5Se0Ka\\\\OO\\\\N6og0IRXO6lg0LTXO3lg0NSXO3lg0NTXO2lg0NUXO1kg0OUXO0lg00SXO1ng0NRXO3mg0LSXO5mg0KSXO5ng0ISXO7lg0IUXO6lg0HVXO8ig0HXXO8hg0HXXO8ig0HVXO8jg0GWXO9ig0GWXO9ig0FYXO9gg0FZXO:fg0D\\\\XO;eg0E[XO;dg0HZXO8fg0HZXO8fg0G[XO8fg0GZXO:fg0FZXO:fg0C]XO>bg0A_XO?bg0_O^XOb0bg0^O^XOb0bg0^O]XOb0cg0@\\\\XO`0dg0AZXO`0fg0_O[XOa0eg0_OYXOc0hg0\\\\OXXOd0hg0[OZXOd0fg0\\\\O[XOc0hg0YOXXOh0hh0O10O1O1O1O1O1O100000O100000000O02O0XO^OaWOd0^h0TOlWOi0oh0O000000000O10O2O00O2O00O1001M2O02O0102L5J8Ienh4\"}, {\"size\": [848, 480], \"counts\": \"ckW69Vj01O100000000O10000O1000000O2M4K4N101N100N101OO3E:N11000L4N10bN2\\\\XON`g07`XOG_g0;cXOCZg0`0iXO\\\\One0?`YO8gg0NSXO5ig02oWO3og0X1O001O1N3N1N101K5G9fYOiMXd0Z2e[OkMWd0W2f[OlMYd0V2e[OkMZd0Y2b[OhM^d0[2^[OfMad0^2[[ObMfd0a2T[OaMmd0P41N2M3L4K5N2O2N1VOk0I7K5M3M3WOiXOVN\\\\g0c1kXOWN^g0a1gXOXNbg0a1l0J4L3N1N4L5K6J:Ec_S4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Xf\\\\3k0^i0c0@:G5I8I6L4K4K6L3M2O1O1N2N2O1N2O1N2O1N2O1O1O1O0001E:O2O10O010000OM4O0101O001O0O20O01N2O001O1O1O1O1N2O2N2M2N3L7dNoWOBM^Och0b0oj`7\"}], [{\"size\": [848, 480], \"counts\": \"Vck28Vj04M2N2N2M3N1O2N1N2O1N3M2N2O2O00010O01O0010O000010O0001O01O01O010O1O01O01O0011O1N2N2O0O1O2O1N2O1N2N2N102M2N1N2O001O001O1N1OWan7\"}, {\"size\": [848, 480], \"counts\": \"VXn05Yj05L2N3M2N2N2N1O2O1N2N1O2O1N2N2O1M2O2M3L5L3M3jI[N\\\\Cj1[<aN`C`1[<gNbC\\\\1U<mNiCT1Q<UOjCm0o;N\\\\C3^<6]CK_<;_CF\\\\<?bCBZ<c0dC_OX<e0gC\\\\OU<i0hCXOU<P1fCQOU<V1fClNW<\\\\1cCeNZ<a1bC`N[<f1aC\\\\N[<j1bCVN\\\\<m1aCUN\\\\<P2aCQN\\\\<T2bCmMZ<W2dClMW<X2gC_LRMBT?R4fC_LYM^Om>W4gC[LbMZOd>_4gCXLkMTO[>g4iCULPNQOT>n4iCSLTNnNP>T5hCoK\\\\NkNh=Z5iClKcNgN`=b5lCgKfNfNZ=h5mCbKjNfNV=m5mC^KmNfNR=P6oCZKQOdNn<W6mCVKVOcNj<[6nCRK[OaNd<b6mCnJA^N`<i6lCiJF[N]<Q7iCeJm=_5oAbJP>a5nA`JP>d5mA\\\\JR>g5lAYJR>l5jAUJT>P6hAQJW>R6fAPJW>U6dAmI[>X6aAhI]>^6^AcI`>b6[A`Id>e6XA[Ig>k6SAVIk>X9hCkDR9X;nFkDn8W;QGlDm8T;SGnDk8R;UGoDj8Q;UGREi8n:WGSEh8m:XGUEg8j:XGXEh8f:XG]Eg8b:WGaEh8_:VGdEi8\\\\:TGiEk8V:nFRFQ9m9bFbF^9]9_FgF`9Y9[FnFc9R9SFYGl9g8oE_GQ:`8mEdGR:[8lEhGS:X8kEkGU:U8iEnGV:Q8hERHX:m7fEVHY:j7fEXHZ:f7eE^HZ:a7dEbH\\\\:]7cEeH]:Y7cEjH\\\\:U7bEnH^:Q7`ESI_:l6`EVI`:i6]E\\\\Ic:a6\\\\EcIc:]6[EeIe:[6VEjIj:o:O001QOQA[Fg=OdBa9L[Fa=8bBX9a>jF^AS9d>PG[Ao8d>TGZAl8e>VGZAj8f>XGYAg8f>]GWAc8j>^GTAb8l>_GSAa8m>`GRA`8n>aGQA_8n>dGPA\\\\8P?eGo@[8Q?fGn@Z8Q?hGn@X8Q?jGn@V8Q?lGn@T8P?QHl@P8S?g1N2M3N2N2M3N2oHiDfNZ;d0SFcNo9V1cF]N_9Z1lFbNV9\\\\1mFaNU9]1oF_NS9_1RG\\\\NP9b1WGVNl8e1]GUNe8JXDYLFE9OZ3S4b8MYD[LAD]4n3l71YD[L_OE_4j3l76VDYL\\\\4Z3a7=SDXLa4T3_7e0oCXLe4l2_7l0mCXLf4e2a7S1iCZLi4[2a7[1fC[Lm4Q2a7e1bCYLP5l1a7k1_CYLT5e1`7R2\\\\CZLV5]1b7i0iBeN?UOY5S1e7U1bBbN`0XO\\\\5h0f7`1^B^Na0[O]5>i7i1ZB]N`0\\\\Oa53l7T2TB\\\\N`0\\\\Ok5@j7h2nAYN=_OYd0X2Z[OZN=^OXd0X2\\\\[OZN<]OXd0Y2][OYN;^OXd0X2_[OZN9]OXd0X2a[O[N7\\\\OXd0X2c[O[N6\\\\OWd0W2f[O]N2]OWd0U2i[O]N1]OVd0U2k[O]N0]OUd0S2o[O_NL_OTd0P2R\\\\ObNJ^OSd0o1U\\\\ObNI_OQd0l1Z\\\\OeNE^OQd0j1^\\\\OgNA@Pd0f1c\\\\OiN^O@oc0`1j\\\\OQOWO_Onc0^1n\\\\OROUO_Omc0]1Q]OTORO^Omc0Z1V]OWOmN@lc0V1[]OYOjNAjc0Q1b]O^OcNBjc0i0k]OD\\\\NBic0`0V^OMQNDhc07_^O5jMDfc06b^O5hMFec03f^O7eMEec01i^O;bMDdc0MP_O>[MFag0:_XOFag09_XOHag08^XOIag08_XOGbg09^XOGag0:^XOFcg0:]XOFbg0:_XOFag0:_XOG`g09_XOH`g08aXOI^g07aXOJ_g06aXOJ_g06`XOK_g06aXOJ_g06aXOJ_g06`XOJ`g08_XOGag0;^XOEag0=^XOBcg0?[XOAeg0a0YXO@gg0a0XXO^Ohg0d0VXO\\\\Okg0f0SXOZOmg0g0QXOYOQh0g0mWOYOTh0i0gWOZOYh0_1O1O101O001N0100O10O1O110O0O10O100O1OgWOkMZh0R2fWOnM\\\\h0Q22N3M3M3K5L5J5C=H;CaUm4\"}, {\"size\": [848, 480], \"counts\": \"T]P67Wj03O0O10000O2O010O0O2N1O100N2O1L4M2N1O2M4M1M4I5J5000201O1N1O0N23N2L4N3J5L5L4M3L5KbWOKhf01WYO4if0IXYO8if0EXYO<hf0CVYO`0kf0@SYOa0nf0^OPYOc0fd0XO\\\\\\\\O:nML5i0We0\\\\Oe\\\\Ok1Vc0[Nh\\\\Of1Wc0\\\\Nh\\\\Od1Xc0^Ne\\\\Ob1\\\\c0aN\\\\\\\\Od1cc0_NY\\\\Oc1gc0aNR\\\\Oa1nc0cNh[Ob1Zd0aN_[O`1dd0eNiZOd1\\\\e0`18B?TOk000L6I6@`0L4M20101N2L4ZNbWOT1Ti0I5K7I9G9E`]]4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"dYT3k0^i0>G5I6K6J5L3M4K5M2M3N2M3N2N2M3N1O2N2N101N2NgMnXOV1Qg0hNXYOS1ff0mN^YOP1bf0oN`YOP1_f0QObYOn0]f0SOcYOm0]f0ROeYOm0[f0SOeYOm0Zf0SOgYOm0Xf0TOiYOk0Wf0VOhYOj0Xf0VOiYOi0Vf0XOjYOh0Vf0XOjYOh0Uf0ZOlYOd0Tf0\\\\OmYOc0Sf0]OnYOa0Sf0_OnYO?Sf0BlYO>Tf0BlYO=Uf0ClYO;Uf0EkYO;Uf0FkYO8Vf0IiYO6Yf0IhYO5Yf0KgYO4Zf0MfYO0]f0OcYO0^f00cYOM`f03_YOLbf05]YOIff07ZYOGgf09YYOFif09XYODkf0<TYOBnf0>SYO@Pg0?PYO_ORg0a0oXO[OUg0d0nXOVOZOOXg0k0QZOROSf0m0i1O100O102M3M2M5K5JPc]7\"}], [{\"size\": [848, 480], \"counts\": \"VQX32Zj07K3M3M3L3N3M2N3M3N1O100001O00010O0000001O0001O000000001O01O01O0000001O000100O1O10O01O1O010O1O001O1O100O001O1O2N1O1O1O1O001N2O1N3N2LTo]7\"}, {\"size\": [848, 480], \"counts\": \"Sc^19Sj07I;E;E<E8G9G9Ec0@<E7G7K4K4M3M3L3P^OnK_=V4]BoK^=T4aBnK\\\\=T4cBnKZ=T4dBoKX=T4gBmKW=U4hBmKT=W4jBjKT=X4lBiKQ=Y4nBiKo<Y4PChKn<Z4QChKl<Z4SChKj<[4UCfKh<\\\\4WCeKh<\\\\4VCgKg<[4VCiKh<X4TClKj<V4QCPLm<Q4QCSLk<o3SCTLk<m3SCVLk<k3TCVLk<k3SCXLj<k3SCXLk<i3SCZLk<g3SC\\\\Lj<f3UC\\\\Li<f3VC[Lh<f3WC\\\\Lg<f3VC\\\\Lh<g3UC\\\\Li<f3TC]Lj<e3SC]Lk<e3PCaLn<a3PC`Lo<c3mB`LQ=b3mB_LR=c3lB_LQ=e3lB]LR=f3kB[LS=i3jBYLS=k3jBlJkNROY>T6jBhJTOPOQ>Z6iBfJYOoNl=^6hBbJ@nNf=c6hB_JFkNa=i6fB\\\\JMiN[=n6fBYJ0hNZ=P7dBXJ4hNV=T7bBTJ:gNS=W7aBSJ=eNQ=[7_BPJb0dNn<_7]BmIg0cNk<c7[BjIl0bNh<f7YBiIQ1`NNFW;\\\\:mDmEHMW;W:SEjEE3U;S:ZEfE@:S;Q:`E`E]Ob0R;n9aEcEYOb0S;k9eEfESOb0V;i9eElEnN?[;e9dEdG[:\\\\8\\\\EnGc:Q8SE\\\\Hk:d7oDcHP;]7jDjHU;U7iDoHW;P7dDVI[;l6^DZIb;j:O10001N100000000000001O000O1010O000iFeDZ3Z;^LRE^3m:aL\\\\EX3d:hLfEo2Y:RMfDbJl0Z8^:[MeEW1ROWJY;d4gEo0SO\\\\JT;h4mEf0QObJP;i4RFa0QOdJj:m4XF<POfJe:n4_F;mNfJ`:R5fF5lNhJ[:V5lFNkNlJU:W5TGJiNnJQ:j4iG4XNQKm9j4QH1TNUKg9m4XHJSNXKc9o4^HEQN[K`9R5^HAUN\\\\K[9U5aH\\\\OWN^KV9Y5cHUO[NaKP9]5fHmN^NeKk8X4iEZLn2c3dNiKd8R4YF]La2b3fNnK_8P4`F^L_2]3gNSLY8P4eF`L]2W3iNXLU8n3iFcL[2Q3jN]LR8m3mFfLY2i2mNbLm7m3QGfLY2c2nNhLh7n3TGgLX2[2SOmLb7o3VGhLW2U2d9Q1YDjLT2m1g9Y1YDhLS2g1h9^1YDkLR2]1k9f1WDlLP2W1m9j1WDoLo1n0o9P2VDRMn1e0Q:V2VDTMn16U:e2QDTMUa0j2o^OVMo`0g2V_OYMi`0b2^_O\\\\Mb`0_2d_ObMZ`0X2m_OgMS`0l1]@RNa?l1c@TN]?j1f@UNY?h1l@XNR?h1o@XNP?i1QAVNn>j1SAVNl>k1TAUNk>k1VAVNi>i1YAVNf>k1ZAUNe>k1\\\\AUNd>j1^AUNb>j1^AVNa>k1aATN]>m1dASN[>m1gASNX>l1iAUNV>j1lAWNR>g1QBYNn=e1VBZNi=d1YB]Nf=`1]B_Nd=_1^BaNb=]1_BcNb=[1_BfNa=X1`BiNb=S1aBlN_=R1cBnN]=Q1dBoN\\\\=P1eBoN\\\\=P1eBPO\\\\=m0eBTO\\\\=j0eBVO]=`0kBBV=9kBJU=2mB1o<OSC1k<NWC3g<MZC3f<L\\\\C3c<M_C2`<NcC0\\\\<0fCNZ<3iCIW<7kCEW<;kC^OZ<b0j600O1000O0101O000O100000O101OO1001O000000000O100000O11O00000000000O20N100000O2OO1001O001OO10O2O1O1OO100001OO10O11O0000000O10O1000O1O101O00000O10000000000000O11O0O20O0000O2O00O1001O1O100O1O2N1O1O011NomY3\"}, {\"size\": [848, 480], \"counts\": \"ndX6b0ji06J6I7J6I7H8K6K3L5eNQNmYOS2oe0YNeYOm1Vf0W1OG]YOdLff0U3>C=N2N2N01M2K6O2000012Mb0^Oo0RO1O1N3N1O001O000001N1O1N3gNeZOWM_e0h2V1N2O2TOVYOmMnf0k1R1J5VN`WO]1nh0K3M5L3L6J9F7I`[g4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"gZT3a0ki07I6J6K5L4L2O2M3M3M2N3N2M2N3M2O1O2M2O1O1O1O1O1O1O2N10O01O1O1O1O100O1O00100O010O0100O01O1O01O1O1O1O1O001O2M2O2N1O1O2N3M2M3N2N2N2M4M1O2M3L4N3J4N3K4M4J6K5I7M4KQiW7\"}], [{\"size\": [848, 480], \"counts\": \"ZiY35Rj0<J4L4N2O00010O000000001O0000001O0000000000001N100000001N100O1O2O001GPOnVOR1Ri0nNnVOS1Qi0601O03NO0101N2N2O1N2N102N0O1O100O2N3M1O001O0O2O1O0O101N1O2M3M5GRbZ7\"}, {\"size\": [848, 480], \"counts\": \"dRP2;Qj06J9HP2PN9H3L4L4M2N3L3M3N2M3M2N3M4L2N3M3M3N2L5M2N2L4M4K5L4M4K9G9H6J5K6J5K6K4K4M4K4M4L3M3L5L6J4Y_O[H\\\\>k7UAQIX>V7ZAXI_>c9Io0QO5aBcCb<d<SCcCj<T=M2N2N1O2N1O1O1O1O1O1O100O1O1N2O1O1N201N2N2OO010000O10001N102NRHXDT1h;iN^DT1b;kN`DU1_;kNbDT1^;lNcDT1\\\\;lNeDT1Z;lNgDU1W;lNiDS1W;aMZDUL`0X6V;`MiDlK4a6S;aMoDkK0a5ZObJg;P4REmKN^5[OdJe;o3UEoKL\\\\5ZOgJc;m3ZEPLKh4YOhJ1b0`;l3_ERLIX4IRKAh0Y;l3iEQLGo3;SLQ:m3SFPLBj3?XLj9m3YFQL_Oe3b0]Lc9o3]FnK@b3c0`L]9R4bFkKAe2XOkL]1b0T9W4gFfKEj1n1YNc7X4lFgKf0;U1DW7Z4QGgKP1_OX1>e6Z4XGkKV5Ia3Y4]GPLT5C^3l3QHaLa4B\\\\3n3UH`L^4B\\\\3n3XH_L\\\\4C\\\\3n3ZH]LY4F\\\\3n3\\\\H[LX4F]3o3]HYLV4H\\\\3P4cHRLT4J[3T4lHeKm3O]3\\\\4U;101O0O11O000000000000O100O1O_NgZOmMYe0n1nZOPNRe0o1P[OPNPe0P2P[OPNPe0o1R[OPNnd0P2R[OYMSOc0ke0S2R[OZMTOb0je0S2S[O[MSOb0je0R2T[O[MSOc0ie0R2T[O[MTOb0he0R2U[O[MTOc0ge0R2V[OZMSOd0ge0Q2][OoMdd0P2\\\\[OPNed0n1\\\\[OSNcd0m1][OTNbd0k1`[OTN`d0k1a[OVN_d0h1b[OXN^d0g1c[OZN\\\\d0d1f[O\\\\NZd0c1g[O]NYd0a1i[O_NXd0_1i[ObNVd0\\\\1m[OcNTd0[1n[OdNRd0Z1P\\\\OgNPd0W1Q\\\\OiNPd0U1Q\\\\OkNoc0T1R\\\\OlNoc0R1R\\\\OnNnc0Q1S\\\\OoNnc0o0S\\\\OQOnc0k0U\\\\OVOkc0g0W\\\\OYOjc0c0Y\\\\O^Ogc0?[\\\\OAfc0ZOPZOj0^2Nic0H^\\\\O9dc0]Od\\\\Oc0df010O1O010O100O2O0O2N1O1O0O20O00000000000000001O2N2O1N1O001O002N2N1000O100O100003M1OO1O10O20O001N010O1O2N2N1N3MY^a4\"}, {\"size\": [848, 480], \"counts\": \"Q\\\\P6=ki09L4I6K5I7L4M3L4K5N2M3L4K3NMoWOlMog0S2O7H73NJfM\\\\XO[2cg081ON4N5Je0kXO\\\\LYf0S4I4N2M4M001O00000000000000O2oNkZOeLXe0W3U1POPYOVNVg0c1P1L4K9H5L1N3N5J3L6K7I9Gn^P5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"ia]3?ki0:H5L4L4M4L3M2N3M3N1N3M3N1N3N1N3N1O1N2O2N1O1O1O1O1O1O1O1000O0100O2N010O10O10O010000O00100O001O0N3M3N2N3N1O2N1O101N3N001O001OO14L1O002N001N101O2N2N1N3L6\\\\OWWP7\"}], [{\"size\": [848, 480], \"counts\": \"Wno28Vj04L3M3M3L3N3M2N2O2O000001O100O001O010O1O1O000000001O000000000001O000000000000000O100000000O10000001O000000001N101O001O0O2O0O2N2O1N2M3N3L[]d7\"}, {\"size\": [848, 480], \"counts\": \"ll_2;f15Wf0NcYO8Zf0L`YO9^f0J[YO;cf0IWYO<ff0HSYO=lf0FnXO?Pg0FgXO?Xg0]1O2O1N8Hj0VO4L3M2N1O2N1N3L3S@bKf9a4VFbKh9a4UFbKi9_4VFbKh9`4VFbKh9`4VFbKh9a4UFaKj9`4SFdKk9^4RFdKm9]4oEgKQ:Z4hEmKU:U4gEnKY:T4bEPL]:R4`EQL^:P4aEQL^:Q4jD^JmLd1V>Q4jD^JnLb1W>R4fDaJQM^1W>T4QD\\\\JcM72[1Y>U4mCUKiMg0Y>V4kCVKiMf0[>W4iCUKhMg0^>W4fCXMZ<j2bCXM]<k2`CVM_<m2]CUMc<m2XCVMg<o2QCUMn<o2iBVMX=m2aBVM_=n2ZBUMg=R3mARMS>f701N3M2N1O100O1O10000O010O10000O2QNcCiE]<V:dCjE\\\\<U:fC[D<b0n;S;gCTDh0a0f:[OWEo;a0dDW:_OWEl;e0bDR:FXEg;h0aDP:JWEe;m0[Dl93UEc;g<`DXC`;f<bDYC^;f<eDYC[;d<iDZCX;d<kDZCV;d<oDWCS;g<PEWCP;i<QEWCo:h<SEVCn:\\\\7lCiMb=W2cBcM_=]2dB^M^=d1^BVJ7Q4]=g1`BVJ6m3]=l1_BWJ6h3]=P2_BWJ7d3\\\\=S2`BYJ7^3[=W2`B\\\\J7X3[=Y2bB_J5S3[=Z2dBcJ5k2[=_2dBfJ5c2Z=d2dBjJ5[2Z=i2dBlJ5T2Z=m2eBoJ3m1\\\\=0_A6U1nM2e1^=5bA0R1VN2]1]==nA]Og0kN0S1^=f0UBjNe0_OKi0^=n0QCbM0h0C`0`=U1YE\\\\N]M3_=a1UE]NaME`=n1PE]Ng=d1YB\\\\Nf=d1ZB^Nd=a1^B_Na=a1`B_N_=a1aB`N^=`1cBaN[=_1eBcNY=\\\\1iBeNU=[1lBfNR=Y1PChNn<W1TCjNk<T1VCmNi<R1YCnNf<o0^CQOb<m0_CTO`<k0aCUO_<i0dCWO\\\\<e0hCZOY<c0iC^OW<=nCBU<0XDNVc00OO2N2O1N3N2M3M3M4L5GnfX6\"}, {\"size\": [848, 480], \"counts\": \"mgi5e0ei0;F8H5J5N3L3L4gNdNZYO_1ff0iNoXO[1Pg0Q11N3L4L3O00O0M4QZO^MTd0b2l[O`MQd0a2n[ObMPd0_2P\\\\ObMoc0^2Q\\\\OcMmc0_2R\\\\ObMmc0a2o[OaMPd0U3gZO_MXe0m30O010O1O1O1O1N2O1O2N1O2N3dNoZOPMYe0j2[1POnXOZNYg0`1P1K7I4L3M3N3M3K5K6K6I:E`mW5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"SW`3?fi0<C<L4M4M2N2O2M3M3M2N3N1N3N1N3N1N3N1N2O2N1N3N2M3N2O1N1O2O1N2N2N100O01O001O001000O10O1O1K5K4O2M3K5L4L4N2OKlMoWOU2Wh0M2O1N3M4Ke0\\\\Ocd[7\"}], [{\"size\": [848, 480], \"counts\": \"^Xi24Vj0;H6K3L4M3L4N2N101O001O01O001O0010O10O000010O01O00010O00010O0000000000O2O000000000001O00001O1O1O2N1O002N2N2N1O1N2O1O1O1N2N1O2M5Jk\\\\n7\"}, {\"size\": [848, 480], \"counts\": \"lRj22Zj09I5dGOoE7]9c0VFCa9i0WF]Oc9l0VFWOd9R1SFTOh9V1lEROm9Y1hElNU:\\\\1bEiNU:a1eEcNT:e1bEdNW:e1`EcNc9Y2iE[NR:k1fE\\\\NU:j1gEYNU:l1bE]NW:j1\\\\EbN_:e1TEfNh:a1iDlNS;n1hB@U=o6N2N2O1O1N3N1O1O2N1O1O1O1O100O101N100000000dNYBoEg=k9bBRF^=j9nBmES=P:UCkEk<R:ZClEf<P:_CoEa<n9cCPF^<n9S2O1OcNRFYBn9`=_F[B`9b=fF\\\\BY9b=kF\\\\BV9c=kF]BT9c=mF]BR9f=mFYBS9h=mFVBT9h=oFVBQ9i=RGUBo8k=SGQBo8n=SGQBm8n=UGnAn8Q>h101UNZDkDg;P;hDcD[;Z;nD^DT;^;RE_Do:];XE^Dj:^;`EWDe:f;T2K5cN^1[Nm_O\\\\Hb`0]7\\\\1M4L4L4J6PK\\\\]Om1ib0QNd]OU1lb0iN^]Ob0nb0]OV]O:Qc0ER]O6Pc0JS]O2ob0MU]ONlb01[]OIfb07a]OPNnN;bc0d1f^O\\\\N[a0c1f^O\\\\N[a0c1e^O\\\\N\\\\a0d1d^O\\\\N]a0c1c^O]N]a0c1c^O]N^a0a1c^O_N]a0a1c^O^N_a0a1b^O^N^a0a1b^O_N`a0^1b^OaN`a0Z1d^OeN^a0Y1c^OgN_a0V1c^OiN^a0U1c^OkN_a0n0e^OSO`a0=k^OCZa03k^OL`a0Cg^O=fe000000000O10O10000000O10000000O10000000O1000O010000000O01000O1000000O10O10O10O010O010O010O0100O100O001O2OO010000O100000O2O0000001O00O1001N10O101O0001N10001O1O001O00010N3M3L6JTh_4\"}, {\"size\": [848, 480], \"counts\": \"e]S56Xj04N100O2M3L3O1N010O0O1OO20N2N3M3M3H7L4L4K3N5J7I5L2N1iNXNhYOg1[f0dNYYO[1jf0T11N2J6N200OO1M4lYOUMdd0k2^[OWM_d0i2b[OYM[d0h2f[OXMYd0h2g[OZMVd0g2k[OZMSd0i2i[OYMVd0a401N01O1000000O1O2N1O2N1M3VOWZOjLme0i2T1L4F:]Oc0M4M4L6J5J5ZN[WOY1Si0K6I6K7H9Faa^5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Q\\\\h3f0ei0=D7J7I5L4L5K4L4M2N2M4N3L4L2N4L2N3M2O1N1O1O010O10N1N3J6N20O01000000O2O1O00001O1O1N3N4L2N3M3L4M2N2M5I6J8F;Eo\\\\X7\"}], [{\"size\": [848, 480], \"counts\": \"_QX32Xj09K3M4L3N1N3L3N3M2N2O2O0001O10O00000010O000001O01O00001O00010O001O01O02O1N2N1O100O1O1O1O2N1O1O1O1O1N2O1O1O1N2O2N1N4Jhbd7\"}, {\"size\": [848, 480], \"counts\": \"V]a21Qj0?E;Db0@?_O`0@`0C=D<[Oc0[Oc0B?J6J6G9QAVJQ9n5jFYJo8n5kFVJQ9o5kFTJQ9Q6YFcJd9c5VFaJg9e5SF^Jj9h5PFZJo9k5iEYJV:Q6mDdJQ;S6`CfJ_<f9O1O001M3cCVCR;l<fD`CT;b<jDaCT;`<kDbCS;_<lDcCQ;_<nDbCQ;^<nDdCQ;^<kDfCS;^<bDjC];e=O100O1O01000O2O1N101N100O1000000O2O1O0nNn@eFS?X9SAeFn>W9YAdFi>V9cAaF`>Y9_1M3M2N2N2N2O1O1N20SOmF]@R9c?QG[@o8e?RGZ@m8g?TGX@l8g?UGY@k8f?XGX@g8c?bGZ@\\\\8`?nG]@S8_?TH]@m7`?ZHZ@h7c?\\\\H\\\\@d7b?^H^@b7^?cH`@^7\\\\?m1K5J6J6J6J6WJRDhLV<n1`DhHOl4g;m1SF]MU:W2dFQMg9\\\\2SHSLW8`3aHlKh7S4hHRKd7n4o6O100000000kMT[OeNmd0Y1Z[ObNfd0^1`[O\\\\Nbd0a1a[O]N_d0c1c[O[N^d0d1d[OZN\\\\d0f1f[OXN[d0g1h[OVNXd0j1k[OSNVd0l1l[ORNUd0m1l[ORNTd0n1l[ORNUd0m1k[OSNUd0l1l[OTNUd0k1j[OUNXd0i1i[OWNXd0g1j[OWNYd0e1i[OZNYd0d1h[OYN\\\\d0e1d[OYN`d0e1a[OZNad0c1a[O[Ndd0_1_[O_Ngd0k0k[OTO[d0>n[OBVd04P\\\\OLXd0Gm[O9Ug000O1000O1000000000000000001O0O1000000000O1000O10O10000O10000O010O100O001000O01O010O10O01O00100O100000O10001N0100000O10O100000O1000O0100O1O1O01001O0000O02O000000000000000001O001O1O1N2O1O1O001N1000000O2N101O4Kk]j3\"}, {\"size\": [848, 480], \"counts\": \"PlZ56ni09@c0J210N4L5K5L3M4L3eN]NfYOd1[f0kNSYOX1nf0S11N3O10O01J5L5N3M3O001O0101]YOmMgd0]2kZOjMRe0]2dZOfM\\\\e0g3000000001J5N200O1000000gNRZOoMoe0h1kZOdMXe0a1eYOjNY1AWe0a1gYOhNmg0U1VXOfNlg0X1g0O2O1N3M4L4L3M6J5K7Gb`c5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"fld3?mi08E;G<F7J4L8H3M4K4N2M4L3N2N2N2N2N1O1N3O0O1O2O0O2N100O100O1O011N10O10OmNPYOgNQg0V1TYOgNmf0V1YYOfNhf0Y1\\\\YObNhf0[1[YOaNgf0_1\\\\YO]Nff0b1[YO\\\\Ngf0c1ZYOZNhf0e1S1O1O2N1O2N1O1O1O1O2N2N2N1N3N2N4K3N6H9H5K4InhR7\"}], [{\"size\": [848, 480], \"counts\": \"]We37Uj06L3M3K5M2O2L3N3O00001O01O0010O0000000000010O0000001O0010O010O011O2M2N3N0O2O0O2N2N1O1O1O1O1O1O001O1O1N3N1N2NdfZ7\"}, {\"size\": [848, 480], \"counts\": \"Wob2f0Pg0o2@g0]Oe0[Ob0YAdJa7f5SHbJg7i5oGZJl7n5nGTJo7Q6ZGhIXK:Z=R6[GcJb8a5[GbJc8a5YGaJe8e5UG]Ji8i5QGZJm8Q6gFQJW9\\\\6RFnGoLl1n<g6TEnIk:c6ZDhId;`6mCiIR<]6[CQJe<m9O1N2O2N1O1O2N1N2N3M2N2N3M200000000000001OnNnCfC<WOQ;R=fDeC7_Oo:f<QEjCLFQ;[<YEoCAKU;o:dFoE[9n9lFoES9P:nFPFR9m9PGeDmM6Mg0U;]:oFYFQ9e9hFdFX9[9cFkF]9T=01O0000001O0000001O000000001O00001O00001O001O001OkNYEaBg:\\\\=`E`B`:_=bEaB]:^=eEaB[:_=fE`BZ:_=iE`BV:_=lE`BT:`=nE^BR:a=PF^BP:b=QF]Bo9b=SF]Bm9b=UF]Bk9b=WF]Bi9b=YF]Bg9b=ZF^Bf9_=^F_Bc9d4fEV3l0UH^9\\\\4\\\\Fn2<cHY9Y4cGm1ZOhIT9U4RHc1QOTJP9P4^Hb1j9mMkFjLRL[4[=cNnGd0Z8UORI\\\\OX7c0YIaNS74bACb7DZ7h0WAA[g0OcXOYO0i0]g0NfXO`0Zg0@hXO>Xg0BhXO=Yg0BiXO<Xg0DlXOmNM1Kd0^g0=kXOnN57]g0k0^XOnN56^g0l0]XOnN63_g0n0\\\\XOoN51ag0P1ZXOoN51ag0P1ZXOPO\\\\h0P1cWOQO]h0m0eWOSO[h0g0kWOYOUh0c0PXO[OQh0;W1KUee6\"}, {\"size\": [848, 480], \"counts\": \"eaW5n0Xi0>I4H7K5J5GLnWOXNSh0j18002M1gNUNnYOn1oe0\\\\NhYO^1^f0W13M4K4N3OK3O3O1N30O1NSZOXMWd0g2j[O\\\\MTd0e2j[O]MTd0e2k[O[MUd0h2h[OXMWd0P3c[OmL^d0a3U[OWLSe0P5B3N000000O2M2L5M3M3cNiZO^MZe0_2jZO\\\\MZe0a2T[OPMPe0n2S[OmLRe0n2]1G:Aa0^O=J5N4L3M5K6J6I9DSeg5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"kcj3`0ii0=D;F9H9I4K5L5J5M2L5L4M2N2N2M3N2N2L3O2N]NSYOElf09[YOCef0<^YOC`f0=cYOA\\\\f0?fYO@Yf0`0jYO^OUf0c0mYO[OSf0e0nYOZOQf0g0oYOYOQf0f0PZOZOPf0f0PZOYOQf0g0PZOXOQf0g0oYOYOQf0g0oYOYOQf0f0PZOYOQf0g0oYOYOPf0h0PZOXOPf0h0oYOYOQf0g0oYOXOSf0g0mYOYOSf0g0mYOYOTf0e0mYOYOWf0e0iYOZOYf0e0fYO[O]f0b0dYO\\\\Oaf0a0_YO\\\\Oef0c0[YO[Oif0c0VYO]Omf0`0TYO^OQg0?nXOBTg0<lXOCVg0;kXODYg08hXOHZg06fXOIag00`XOOfg0I]XO7nh0O1O2M3M]UQ7\"}], [{\"size\": [848, 480], \"counts\": \"ZZS4:Sj04L5K3N3N2N1O2N1O11O01O0001O0010O000000001O0001O0001O000010O010O2N101N2N101N2N1O2N1O001O1O001O1N101O1N2O1N4Kgcl6\"}, {\"size\": [848, 480], \"counts\": \"i[a23Yg05jXOK76\\\\1`0Qe0[1eYO^One0n2B>Be0\\\\O:F6J4L3M4M3\\\\AfIm8]6QGfIl8]6PGgIl8_6XF`IjK:k=[6TFZJk9k5oEXJo9j5oEWJo9l5nEVJQ:l5mEUJR:l5lEVJS:Q6eEQJZ:S6aEoI_:S6QE[Jn:j5dDaJZ;b5\\\\DfJc;_5SDgJl;]5lChJS<]5cCiJ\\\\<]5ZChJd<b5oBcJP=e5fB_JX=]901M2O2N1O1O1O1O2N100O100OQOYCWDg<d;cCWD\\\\<g;jCVDV<f;PDXDP<d;VDZDj;`;^D]Dc;\\\\;iD]DX;^;P2L4M2N2N2N3M2OlCoDT86UEj:f2WER8NXEh:g2_Ee8]:\\\\GgEb8U:aGnE^8o9cGTF\\\\8j9eGXFc7_O]EW:Q3\\\\F_7BUEG1Z:\\\\3_FZ7Y:fHjEW7V:`FWH_9b7`FfH`9W7_FmHa9o6_FUIa9i6]F[Ic9f6XF^Ih9c6TFaIk9a6QFaIo9d6eEcI[:Y;000001O000000001O00001O001O0000oNbEPB^:V5fE]22ZHW:P5[FY2BeHS:j4mFU2TOoHo9c4oGd1TNhIm9Y4^Hk1fMlIk9T4gHl1`MoIi9T4iHl1_MoIh9U4lHi1\\\\MRJh9V4nHd1\\\\MUJf9W4PIa1[MXJe9X4SI[1ZM\\\\Jc9Z4UIV1YM`Jb9[4XIP1XMcJa9^4ZIj0VMhJ`9_4\\\\Id0WMkJ^9c4dI3TMWKY9e4SJAe7>bHXOb7g0aHSOc7m0_HjNh7V1YHeNk7[1XH\\\\Nn7d1VHRNP8IiBZO_5;R8ITCIW5UOWJmNS>R2dBJfd05][OIcd06`[OH`d06d[OH\\\\d06l[ODTd08R\\\\OGmc0Ma\\\\O1dc0mN[]OQ1Sf0O2N1O1O2O4K2N1O1O1O001O001O010O1O00001O00001O001O001O000000001O0010O1O0100O0100O0100O00010O0010O010O010O011N1000O000010O01O001O10O01O0000010O00000100O1O1O010O1O1O0010O010O01O1O1O0010O00010O00010O001O0010O0001O100O1O1O1O1O1O1O0000002M5I\\\\^`3\"}, {\"size\": [848, 480], \"counts\": \"UaW52Tj0`0F7G:G9G5J6M0O1fNdNcYO]1[f0lN\\\\YOU1df0[10N3M3N2M3J7N2O1O1N101000`YOhMhd0Z2S[OjMld0`2iZOaMWe0l3001N1N2N2O10000O11O01M2fNZ1K5ZOVXObNng0]1d0M3M3N2N3M2O2N2M4L6J6J8FSZi5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"mTm3810ei0g0G9G7I6K5L3L4K6L3N2M4L2M4M3M2O2N1N3N1O2O0O001O100O1O100N2O0010O100O011N2OO02N1O3K4L4A`XOeMig0W2;M3M2O2M2O1O2N1O2N2N1O2N2N2O2N0O1O2N1O3M3N2M2O0O2N3N2M5K2N2O1N2N1O2N2MfR^6\"}], [{\"size\": [848, 480], \"counts\": \"\\\\Zb4<oi09G6M2O2O001O00010O00000000001O0000000000000O10000O100O10000000000N20O10001O2N1N101O0O101O1N2O1N3M3M3M3L7Gc^^6\"}, {\"size\": [848, 480], \"counts\": \"]d[2<Rj02M200N2N2bWOAjf0`0TYOIff06UYO4gf0KTYO<lf0BSYOb0jf0IgXO=Rg0d1BUMoXOT3kf0;L5M2M6J<D?B;E;E:E5K4M2N3N1N3N2N1Y@dIY;^6kChIkL8T?S6kCdJS<^5jCdJU<_5gCcJY<_5dCcJZ<a5aCaJ^<d5\\\\C^Jc<g5UC]Jj<h5bBiJ]=Z5ZBlJe=X5RBnJn=U5hARKW>Q5aAUK_>n4ZAVKf>n4SAUKl>X800O1O1O100O1N1O2N1N3O1H8M3O1O1MYOmAWEQ>e:WBYEg=b:aB]E[=^:oBbEm<X:]CgE_<Y:eCgEY<W:lCgES<Y:oCgEm;Z:VDeEi;Z:ZDeEf;Y:^DeEb;Y:aDfE_;X:fDeE[;X:iDeEX;Y:lDdEV;Z:`2N3N1O1N3L4L4N2O01XCQGo7Q9eEZIZ:h6^E_Ia:c6VEeIi:]6oDiIP;[6jDiIU;[6aDkI_;c:0000000000000000000VGlDX2T;fMWEQ2i:lM_EP2a:mMfEn1Z:TNhEh1X:YNkEc1U:_NmE]1S:dNoEZ1P:gNTFT1l9lNWFQ1j9oNXFn0h9RO[Fk0e9VO]Fh0b9XO`Ff0a9[O`Fb0a9@_F=a9CbF9_9GeF5\\\\9KeF3[9]LYDk0_2e2X9[LdDk0W2f2U9]LlDh0R2a1_M[Ld;U1UEl0l1[1`McL_;R1\\\\Em0j1W1_MhL[;i0kET1_1S1`MnLX;b0VFY1U1P1bMSMT;?`FX1l0o0dMZMQ;ZOkGV2Cn0eMaMR?Y1_Cj0eMmMo>W1dC=dM[Nj>Bj_OZ1Y4kNkKGZ2`0f><`FAe9;^FBe9<[FBg9=ZFAh9?XF_Oj9`0S81000O10000O1O010O101N1O010O010O01O01O01O1O10O002O0O2N10O01OO1010O1O001O010O0010O101N2O1O0O10O010O0001O0010O100000O10000000001N2O1O1O1N1O2OO010O1N2M5K5Jdg_4\"}, {\"size\": [848, 480], \"counts\": \"Vc`58Wj09F7B<E;A=K4N1O0[OVNcXOn1Tg0j0O4M5eYOYMfd0[3_ZORM\\\\e0Q4O010001O001O001O1O1N3N0O4[NW[O[Mfd0E^ZOT2N\\\\NT1Dod0l1oYO\\\\NV1EQe0i1mYO^Neg0`1g0N3M3N4K2N3N3L6J6I8HeTj5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"i]Q4i0di03L3M=C6L3M4L4L3M3N2M3N2M2O2N2N1O1O2N1O1O100O100O0010O10O0100O10O10001O1O1O10O1O010O1O001O2N2N001O1O2O2M1OO13M2N5K3N4J6K8H8I6H6J8I4Jgad6\"}], [{\"size\": [848, 480], \"counts\": \"^Y^45Wj06I6M3L3N2O2O0000000001O0000000O100000000O100O1000O010O010O10OO20O0100O001O10O002O0O10000O2N1O2O0O2O1N2N3M3Ldea6\"}, {\"size\": [848, 480], \"counts\": \"V^]26Wj05L4L3M2O1M4N1N3L3M4M2N3N2N1N3O1N1O2N2QYO`Nkd0a1nZOkNkd0X1lZOQORe0P1eZOYOZe0i0ZZOCP3cNi>o1d]ONa3WNh>Q4UARLh>Q4VAPLi>Q4UAQLi>R4RARLl>P4f@^LX?e3d@^LZ?e3b@^L\\\\?d3c@]L\\\\?f3`@\\\\L^?l3[@TLd?T4U@mKj?W4Q@jKo?X4o_OhKQ`0Z4n_OeKR`0]4k_OeKT`0]4j_OeKT`0]4i_OdKW`0]4g_OeKX`0]4e_OeKZ`0\\\\4d_OeK]`0\\\\4__OgK``0Z4]_OiKc`0W4[_OkKe`0U4Y_OmKf`0T4X_OnKh`0S4T_OoKm`0Q4P_OQLPa0P4n^ORLRa0o3k^ORLVa0n3h^OTLWa0m3f^OUL[a0l3b^OUL^a0P4Z^OSLga0Z601_NeGl@\\\\8R?iGj@X8S?nGi@T8T?PHi@P8W?RHg@o7X?THf@X7@WHi?c0f@U7AXHi?f0d@o6F[He?h0d@l6G[He?m0a@h6LXHc?S1_@d60XHa?X1[@`65WH`?b9b@^F]?b9e@\\\\F\\\\?b9f@^FY?b9i@]FV?c9l@[FU?c9o@ZFR?e9l0O10WBcFa:[9]EkF`:U9ZESGe:k8kDgGT;X8kDkGU;S8jDQHT;n7mDSHR;m7mDUHS;i7mDYHS;e7nD\\\\HR;b7nD`HR;`7kDcHT;_7hDdHX;\\\\7eDgH[;[7`DhH`;Z7ZDjHf;X7RDmHo;T7lCPIT<R7dCTI[<o6WC\\\\Ij<^OTC[4EbLV=ROYCh7g<XH\\\\Cf7c<[H^Cc7b<]HaC`7^<bHcC]7\\\\<dHdC[7[<gHfCX7X<iHkCT7W<kHjCl0UOd2Q=_LkCk0XOc2o<aLjCk0ZOa2n<bLiCl0\\\\O_2l<bLkCn0\\\\O\\\\2Q=]LfCV1[O[2S=XLfC\\\\1YOY2V=TLfCf0aN]Nf0e4_=jK_CQ1`N]Nd0d4f=`K`C\\\\1WN`Nd0a4h=[KhC_1lMeNf0f3WOYL`>HTD[1_MnNh0`3[O]L]>@bDZ1PMXOj0Z3[OcLoa0a0l]OBo0R3[OhLSb0;e]OJQ1k2\\\\OoLVb03^]O3S1d2]OUM^b0FU]Oa0T1\\\\2^O[Mmb08g]OW2@bMhb07j]OQ2BhMdb07l]Oi1GPN]b06o]Ob1KTNXb09P^O\\\\1NXNTb0<P^OT1Yd0kNj[Om0[d0SOi[Oc0]d0]Oi[O6^d0JT3001O000001O00000001O00001O001O00001O00001O00001O000010O0001O01O00000O100O1O2M3L5Ii]]5\"}, {\"size\": [848, 480], \"counts\": \"efV5>li07H7J7J7I6I4M3M2lNiNPYOZ1of0T1M2001M2N201M3M3N2000L4K5O3bYOgM`d0_2S[OnMid0m300O100000O1O1O1O2N2M3M3L6bN_1H:QO^XObNfg0[1^XO_Nfg0_1\\\\XO\\\\Njg0a1g0J3N4L3N3L4M3M5I6J8G_Tj5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"mbV4=Pj07J4N2I6L5L4M3K4M4L2N2N3M3N2M3L3N2O0O2O1O1O1O1N20000O1O1O100O1O100O01000O1001O0O2O0O2O1N3N1N2O1O3M6I<E9G:E9H9Ei`h6\"}], [{\"size\": [848, 480], \"counts\": \"SR_49Sj06K4L3N3M21O000000010O000000000000000O1000000000O100000O0100O1O10000O001O1O10O10001O0O2O0O2O0O2O0O2N3N1M4M3Khl`6\"}, {\"size\": [848, 480], \"counts\": \"^dP39hi0?I8M1O1O1O2O1L4L4K5J5SLcNd^Ob1Sa0mNb^OX1Ta0UOe^Oo0o`0Aj^Oc0n`0Gk^O<n`00k^O3m`0:k^OIn`0d0j^O^OW?_N`_Og2P1kN[?[3T@hLi?Q7L4N2O1N2O1N101OAk_OdFV`0Z9l_OfFS`0Z9o_OeFP`0[9Q@eFo?Y9S@hFl?W9U@jFj?S9Y@oFd?Q9]@QGa?n8`@RG_?l8d@TGZ?m8g@SGe=ETCW9YORG`=4nBi8DRG[=<mB`8LPGW=f0jBW84nFQ=R1gBn7`>VH^Ag7d>\\\\HZAa7i>`HUA]7n>fHPAW7R?lHk@P7Y?SIb@l6b?m13K6J5J7K5J6M3NcCPG]7Q9dGQHY8b8`EoFhNn0g;X8nD\\\\IR;h6cD_I];j:000000000000000O1000001O000000001O00000O1O2O1O0O2O001O0O2N1O3M3bGeCc2]<WMlCk1E^I`<d4oCS1;WJi;b4oCg0g0fJ\\\\;`4hDnJKW3?[MR;o0\\\\C\\\\N0o2e3nN[NgNg:i0hC^1d3ZNWN_O`:d0iC`1l3eMYN5Z:=cCi1W7iM^54`CP2R7lM`51bCQ2n6lMZ7R2hHkM[7T2gHcMb7Z2^8M2N1O2O123K3J<E2M2O0O1O2N2N5K7H2O001O000O1000O0100O010O1O001O000O100010O0100O10O01O10O001N100O2O00000000000000000000000O1N2M30001O00010O0O00100001O1O1O10O01O2O0O101OO010002M2M3M2LY`W4\"}, {\"size\": [848, 480], \"counts\": \"[m^56Uj07K5M3M4L3M5K4K5L8G:E5Id0\\\\O7K7SYO\\\\Mde0n3J3M4L3M2O100O0001N2O1M3M5TOYZOfLme0c2_1G:YOUXO[NQh0^1d0M2N2O2M3M3M3M4L6K4K6IXTj5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"lVf4f0bi0?E7G:I5K6L1K6M3M3M2N3M2O1N2O1O10O02N00100O100001O000O10O10N2O1N3M2O101O001O101N5L1N10O02N2O3L6J<D8H4I5M4K4N1N3M2M5M1N3NPhT6\"}], [{\"size\": [848, 480], \"counts\": \"]km45Xj06J4M3K4M4N10001O0001O0000000O10000000000O10O100O1O010O1000O10001O000O2O1O001O1N2O1N3M3M2N3M2KklW6\"}, {\"size\": [848, 480], \"counts\": \"SkS39Sj05WOKTWO6ih01RWO0lh0l0N1N2M3L4I7QJ^OkAg0o<k0aBYOk<c1iB`NR=m1cBWNY=T2ZBRNb=V2SBQNj=W2lAnMQ>[2fAhMW>^2dAdMZ>d2^A^M`>m2WASMf>U3SAlLi>_3o@dLc>R4o@SLi>n7K5N2M3N2N2O1OZO^AaE_>]:gAaEX>^:kAaES>^:QBaEm=_:UBaEj=]:ZBbEe=]:]BcEb=[:aBeE^=X:gBhEW=T:oBkEQ=Q:SCoEm<m9XCRFg<k9]CUFc<g9bCXF^<d9fC\\\\FY<a9lC^FT<_9oC`FQ<^9SDaFm;\\\\9VDdFj;Y9XDhFh;U9[DkFe;R9^DnFa;P9cDnF^;o8eDQGZ;l8kDSGU;j8nDTGT;i8RERGo:l8\\\\3MgNVGRAf8P?bGj@[8U?TH_@k7`?[H\\\\@d7c?aH[@`7_?gH^@\\\\7[1hGk;o0hB\\\\7Q1]Hf;<PC_N0m8P1fHf;7XC[7a0PIm;o;I6J6lDgAf9^>RFgAl9`>iEfAU:\\\\?O000O2O000000000O10O1000000O10000O10000000000O10000O10000UOaEeA_:Y>eEeA\\\\:V5\\\\FdK>g3mN]KY:T5gFZKl0b3VNnKY:o4mJXNkJiLX:k4_KdL`JcNLMV:j4kKjKgJZOYO2U:i4^NmJ`G:R:h4[OVKh0g4ZOXKg0g4[OVKg0h4\\\\OUKf0j4]OQKf0n4_:UMfZO>[e0^OkZO?Ue0_OP[O>Qe0^OT[O`0nd0\\\\OX[Oa0jd0VO^[Og0gd0POb[Ol0ad0mNf[OP1ad0dNf[OZ1jf0N4L4L5K3M5J2O1O1O1N101N100O1O100O2O00000O100O1000O02N1N20000O10000000000000000000000000000O1000000000000000000000000000000000O10000000O1000O10000O100O01000O1000000O100000O10O100O100O1O101N2O0O10000O1000O100000001O000000001O001O001O001O1O1N2N6FVcl2\"}, {\"size\": [848, 480], \"counts\": \"Raj5o0`11]e0:UZO2`e0>RZOGie0b2O0000L4O2O0O2M3O10000SOm0@a0M1O2^OiWOiNYh0W1gWOhN[h0W1eWOfN^h0Z1bWOdNah0Z1<M4M3N2N3K7J7HlSj5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"kZi4h0di09H6J9H5K5K5K5K5K4M1N4M2N4K4M2N2N2O0O2O1O1N10001N1O1000000001OO1000O2O0O2N101M2N3J5N3M3N1N3M3I6M5K4E;M4L4M3M3N2M4M2N4K4M2N2M3M7H]Zn5\"}], [{\"size\": [848, 480], \"counts\": \"lTl45Xj05L3N3L2N3M2M4L30001O000001O0000001O000000000000000001N100001O001O101N1O2N1O002N001O1O001N101O1N101N2N3M2NQdT6\"}, {\"size\": [848, 480], \"counts\": \"jSW38Vj03N2K5@@iVOf0nh0b0M3N2O1N2O1N2\\\\IcNSD_1d;lNUDY1d;POVDT1^;ZO]Di0Y;AdDb0U;Ff_O]NX4P2g;W1dCoNT<a1[CgNX<T2TCRN_<^2YChMb<^2XCfMd<b2VC`Mf<k2QCWMm<X3dBjLY=c3[B`Lb=j3SBYLj=S4iAQLT>W8K5I7L4K5M3MTOaBmD]=S;hBkDV=T;nBjDP=V;TChDk<W;YCgDf<Y;^CdDa<[;cCcD]<[;fCcDY<];kCaDT<^;oC^DS<_;a1M2O1N2N2M3N2M2N3M3N2O2N1N3M3L3M4N2M3L3NhCVFP8h9PH\\\\Fn7b9RHaFf7DZDj9o3fFW71hDX9o3kFX7MhDY9j3QG]7FiDZ9m2lGZ8kNhDY9Z1`In9W7hEQIW:T7`EPI`:`;000000000000000000000000000001O0000000000000000001OmNREdBn:Z=VEdBj:\\\\=WEcBi:\\\\=XEdBh:\\\\=YEcBg:]=YEcBg:Y3jES5@dGf:R3aFi4kNTHd:o2\\\\HT3SMlIa:m2kHdLPLm5h0`J^:l2TJh0[L[La9j2jJhLYJm2a1aM\\\\9h2^KjL^I\\\\2o1PNV9g2mKmNTK[No8f2ULaNYKbNd8k2^LRN[KlNY8P3eLcMi6\\\\2f8O1O1O1O1N200O1O1O1M3I7M3kNkWONVh02jWOMWh03jWOLVh03kWOMUh03kWOMUh03kWOMUh03kWOMUh03lWOLTh04mWOKSh03PXOLPh03RXOLng0NYXO1gg0K]XO5cg0I_XO7ag0EdXO:ih000O101O001O00001O0O1N3N101O0000001O0100O2N0001O0010O0001O00000010O1O1O2N01O0001O001O0010O00001O0001O000000000000000000000000001O001O001O001O00002N1O1O1O1O1O1O1O001O000100O001O1O1O2N2N2N2N1O2N002M3K4K6MoUj2\"}, {\"size\": [848, 480], \"counts\": \"QUQ6f0ci0c0cVOhNdh0e2POc0ZXOQMef0a3[YOXLZf0U4H4L3N02]N]ZOUNfe0U1lYOYNe0?ae0V1lYOWNV12od0f1mYOTNY14ld0f1nYORNW18md0c1`[OZNfd0`1\\\\[O^Nkd0]1W2L4M3L4L5K8G8EY^h5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"WQT5b0gi0b0A9H7I6J6K4L4M2M3N3M3M1N3M201N2N2N2O1O0O1O`MiXOi1Vg0UNPYOh1Pg0VNTYOh1kf0XNXYOf1hf0YNZYOf1ff0YN\\\\YOe1df0[N^YOd1bf0[N`YOc1af0]N_YOc1af0\\\\N`YOc1`f0^NaYO`1`f0`N`YO_1bf0`N^YO]1ff0aN[YOY1lf0eNVYOX1of0dNRYOY1Th0L4K6M2N2N2M4N100O1O2O0O1O2N101L6HXmk5\"}], [{\"size\": [848, 480], \"counts\": \"X`j46Xj04M3M2M2O2N2M2O2N1O1N3M2O1O2O0010O00010O0010O010O0010O01O010O1O0010O10O02O3L4M1N2O1N2N3N2M3M2N1O1O1O010N101Nb]U6\"}, {\"size\": [848, 480], \"counts\": \"fga16Yj02M3N1N2O2N100O1000O1001O0O101O0O1000000001O01O0000010O01O0100O010O100010N3NO00010O0001O010O00100O10O010O2N100O1O1O10O01O0001O00001O001OiAGW2:fMIZ26dML\\\\24bMO^21_M2`2NQF@^3c0b6LmEF^3?f6KgEK`3=i6H_E3Y3c0X7ZOZE8[3a0\\\\7WOUE<]3>_7TOPEd0_3:a7QOmDh0a39a7nNkDo0a34d7nNfDb1aM^Nn4U1k8lNaDf2U2aNY9jN]DS3m1WNe9gNYDW3n1UNj9dNTD[3n1UNm9aNRD\\\\3n1VNP:_NnC_3n1VNT:ZNiCe3Q2SNV:YNdCi3R2RNZ:UN`Co3P2oM`:VNYCR4P2lMf:TNTCX4P2fMl:SNZBUO>[5U2`MS;QNWBXO;_5T2[MZ;[4]DiKc;jMVBe5n1dLl;gMVBi5f1dLU<`MWBP6\\\\1eL\\\\<ZMYBU6R1fLe<fLWBX7n0VKXOoMc=CVB\\\\7j0RK@nM`=DVB`7d0oJHlM^=d7dB`J1lMZ=g7aB\\\\J8mMV=j7\\\\BZJb0jMR=i:PCWEo<g:TCXEl<g:WCWEi<h:YCWEg<h:[CWEd<h:_CWEa<g:bCXE]<h:fCVEY<h:lCUEU<h:PDTEQ<j:l1N1O2N101M2O2M2O2NdBeEf:Y:ZElEc:S:]EPFb:o9^ESFa:l9_EVF_:i9aEZF^:c9dE_FZ:_9gEcFX:[9jEgFT:X9mEiFR:V9nEmFP:Q9QFQGo9l8SFUGl9i8SF\\\\Gk9b8QFeGn9Z8PFkGo9S8PFPHo9o7PFTHP:j7oEZHo9d7QF_Ho9_7QFcHo9Z7RFiHm9T7TFnHk9Q7UFRIj9l6VFVIj9h6UF\\\\Ij9e6mEcIS:]6bEoI]:R6[EUJe:m5TEYJk:h5QE[Jo:e5nD_JQ;b5jDbJV;_5gDdJX;\\\\5fDfJZ;[5cDhJ\\\\;Z5`DhJ`;Z5\\\\DhJd;Z5WDjJh;X5SDeINgMo;f8nCcI9dMi;T<[DjCd;T<`DjC`;V<aDiC_;W<cDhC[;Y<fDfCY;Z<lDcCS;]<PE`CY:W=hEhBV:Y5`Ea1=TIP:\\\\4VE\\\\KY1k6A]Io9]4QGS2RO_Ik9`4XGk1nNeIi9_4`Gg1hNhIi9]4iGd1`NmIh9S4[Hg1X9ZNmF_1T9bNQGV1R9jNPGR1Q9oNPGn0Q9SORGh0o8XOVGb0i8AZG9i8HYG3i8MYGNj83VGJk88VGCm8>UG\\\\On8e0UGUOm8R1oFhNT9\\\\1lF\\\\NW9f1kFSNY9n1iFkM[9U2gFfM\\\\9[2eF`M^9a2cFZM_9k2_FPMd9T3ZFgLi9\\\\3VF^Ln9d3SFTLR:m3PFlKT:T4nEfKV:[4mE\\\\KW:\\\\2QAkNk4_N[:c2m@mNgd0Q1\\\\[OnNdd0m0c[OQO]d0h0k[OXOSd0a0V\\\\O^Okc0a0V\\\\O^Ojc0b0W\\\\O]Oic0b0Y\\\\O]Ogc0c0Z\\\\O\\\\Ogc0b0\\\\\\\\O\\\\Oec0b0]\\\\O]Odc0a0^\\\\O^Occ0`0_\\\\O^Obc0a0`\\\\O]Obc0`0a\\\\O_O`c0?b\\\\O^Obc0>b\\\\O_O`c0=e\\\\O^O`c0:i\\\\O@[c04T]O@Uc0<V]OTOSc0j0[3N2O1N3M3M``g4\"}, {\"size\": [848, 480], \"counts\": \"TjR6j0[i0d0B7N5K5L5J7J4L4L1N111N111NZOm0D7K4K4M9G6J7Il]h5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"_WX5b0gi0:J6I6J6K4N3L3L5M3L3NXNeWO^1Wh0cNoWOY1ng0iNUXOU1jg0eN`XOY1]g0gNfXOX1Yg0iNhXOW1Vg0iNlXOV1Rg0lNoXOS1Pg0nNQYOP1of0QORYOn0mf0TOSYOk0lf0VOTYOj0lf0WOSYOi0kf0YOVYOf0jf0ZOWYOd0if0]OXYOb0gf0_OYYO`0hf0AWYO?if0BWYO<jf0EVYO:if0GXYO7hf0JXYO5if0LWYO2jf0NVYO0kf01VYOMkf04TYOJof06QYOHPg09oXOESg0;nXOBTg0>mXO_OUg0b0kXO[OVg0g0kXOTOXg0m0V10O2O0O2O0O11N1002OOOO2N2L4M3K6B?IZib5\"}], [{\"size\": [848, 480], \"counts\": \"TRR56Xj05K3N2M3N2M2O1O2M2N2N3N1O2O01O01O010O00010O010O00010O001O01000O001001N3N1N2N1O101O1N2N3N2M1O2O1N2N1O1O001N100O2O2KW\\\\k5\"}, {\"size\": [848, 480], \"counts\": \"_`k03]j01O0O2O1N1O0010O10O2O00001O00001O001O0000001O000000010O00000001O000001O00O10001N101O01O000000000000O2N10000N2O15L0O00000001O1O01O1N2O001N10000000O11O001O001O1N110O010O00000001OO1O2O00O10O2O0VYOCac0=[\\\\OHec08X\\\\OKgc05W\\\\ONhc03T\\\\O0lc00R\\\\O2oc0MP\\\\O5Qd0Im[O:Sd0Ek[O=Vd0Bh[O`0Yd0_Oe[Od0[d0ZOe[Og0\\\\d0XOd[Oi0\\\\d0UOd[Ol0\\\\d0UOa[OQ1Zd0POd[Ob1]4WNh88iBi2Q3YMT:MiBo2j2\\\\M[:EjBR3e2^M`:AiBS3b2`Me:]OgBV3`2`Mj:XOfB[3Z2aMR;QOdB_3X2cMT;lNdBc3T2dMW;lN`Be3V2`MY;mN_Be3U2`M\\\\;kN]Bh3U2^M_;iN[Bk3S2^Mc;fNYBn3Q2^Mf;dNVBR4Q2\\\\Mi;cNQBV4R2ZMj;dNPBX4o1XMP<cNmAY4l1ZMU<bNjAW4h1^M^<[NfA^4e1[Me<WNcAd4`1ZMm<TN_Af4^1ZMS=QN\\\\Ai4[1ZMY=oMWAl4Z1ZM^=mMQAP5Y1XMf=l3SBWLl=l3PBWLl=m3QBULo=m3mAULS>m3jATLV>o3fARLZ>P4cAQL^>Q4]ARLb>Q4YAXKMhMj>Q:^AjEb>S:cAkE^>R:eAmE]>o9eAQF\\\\>l9gASFW>l9mASFR>k9RBTFm=i9XBVFg=g9^BYFa=d9cB[F[=d9hB\\\\FW=b9lB^FS=a9PC^Fo<b9RC^Fm<a9UC_Fk<_9XC`Fh<^9ZCaFg<]9\\\\CaFe<]9_C`Fa<_9aDeF[:Y9dElFZ:R9gEQGW:m8iEUGW:i8iEZGU:e8jE^GV:`8jEbGW:[8jEgGT:W8nEjGR:T8nEnGR:P8lETHT:j7aEdH^:Z7^ElHa:S7\\\\ERId:l6[EXId:f6\\\\E\\\\Id:a6\\\\EbId:Z6^EiIa:U6]EoIb:o5iDiJW;U5_DXK`;f4^D^Kb;a4\\\\DbKd;^4YDfKe;[4YDgKg;Z4VDhKj;Z4RDiKm;Y4oCiKQ<X4kClKT<V4hClKX<V4dCmK[<U4aCmK_<U4]CnKa<U4[CmKe<P9O00iN]CbDb<[;cCcD]<\\\\;fCcDZ<[;hCdDX<[;jCeDU<f3PDY2NoIR<^3bDZ2_OWJn;_3\\\\E`1jNnJj;b3aE[1gNQKh;c3eEY1dNTKg;V3RFd1YNUKe;Q3ZFg1SNWKc;P3]Fg1RNXKa;m2bFi1oMYK_;l2eFi1nMZK];k2iFh1lM\\\\KZ;k2nFf1jM^KT;n2VG`1iM`Ke:[3eGR1iMbK]:_3mGl0iMdKW:b3SHf0iMeKT:g3UH`0lMeKo9k3XH<k9BZF9h9E^F6b9IeF0]90gFKY96jFEV9=mF^OU9b0nFYOU9e0PGTOT9j0QGPOR9o0QGkNS9T1QGeNS9Z1PG^NV9`1nFYNW9f1lFnM]9R2fFbMd9^2`FUMi9j2o6N2O1O1O1O1O100O1N2M3O1O1O1N3M2M3N2I7N1O3M2O2N1O1I8K5L3O101N4L3L3O3L4L4K7]Od^]4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"lbe52]j02N1O1O1N3M3QWOJag08YXONeg04SXO3lg0OQXO3mg00nWO4Qh0OkWO2Vh0OdWO6[h0P100N200O0010O00100O010O001M20101OO01O1O001O1O1N2O2M2O100O002N1O1O1O1O1O2N1O3M2N3K4E=@naY5\"}], [{\"size\": [848, 480], \"counts\": \"Sea49Tj05L3M3M2M4M2O1O1O20O00001O00001O01O01O001O0000001O00001O0O011O000000O100O10000O010O1O100O01000000000001N1000000O10001O1N101N2O2L7JRVU6\"}, {\"size\": [848, 480], \"counts\": \"Tl\\\\31_j000000O2O0\\\\[O3e>MPAb0[ME^>ITDg0ZMCa>FSDk0ZM_Oc>FRDm0YM^Oe>FoCo0ZM\\\\Og>DnCR1iLLY?ROlCT1gLN]?nNdC\\\\1lLIa?iNaC`1mLIb?gN_Cb1mLIca0oNT_O[1YOEaa0UOQ_OY1]OCf?eN^@e0;U1@Ce?fN\\\\@f0;T1CBe?dN\\\\@g02\\\\1MZOe?cNZ@i0Ka17TOd?bNX@l0@i1d0iNe?bNV@m0ZOm1l0eNd?aNU@n0SOR2U1`Nd?^NT@T1iNT2_1[Nd?]NR@c4:PMe?]NP@b4<RMl`0o2S_ORMm`0m2T_OTMk`0k2U_OWMj`0i2U_OXMj`0i2U_OXMk`0g2V_OZMi`0d2X_O]Mg`0c2Y_O^Mg`0b2Y_O_Me`0b2Z_O_Mf`0b2X_O`Mg`0a2X_O_Mg`0c2W_O^Mh`0d2V_O^Mh`0d2V_O^Mh`0e2U_O\\\\Mj`0f2T_OkLlNfNma0c4T_OdLXOeNba0j4S_OaL^OeNc1KY=Ko@U5e0_LDfN[10b=o4]A[LHcNY15a=n4^AXLJcNU1<a=k4^AVLMcNQ1?`=m4_ARL2`No0b0^=P5^AnK9]N8Y1o=_4[AlK_1LU=[4XAiKa10U=X6hBlIW=T6fBPJX=P6fBTJY=l5dBXJZ=j5bBZJ]=f5_B^J_=c5`B`J_=`5`BbJ_=]5`BfJ^=Z5bBiJ\\\\=W5cBkJ[=U5eBmJZ=S5eBoJZ=P5fBRKY=m4gBVKX=i4gBYKX=f4hB\\\\KW=d4iB]KV=b4kB_KU=`4jBbKU=]4lBdKT=[4kBgKT=X4mBiKS=W4lBjKT=V4kBkKT=W4iBkKW=V4fBlKZ=U4dBkK]=W4^BlKb=V4XBnKh=]800000O100000001N1000001lNjAPE2b0U>Z:VBfEk=X:VBhEk=U:WBkEi=S:ZBkEh=Q:\\\\BmEf=P:]BnEd=o9`BPFa=l9bBSF_=c3WB^1=mJ\\\\=_3oBn0M^KV=`3ZCf0^>ROQBe0R>SOZBe0i=VO`Bc0d=XOdBa0_=[OhB?[=_OjB;Y=ClB7Q=LUCMV<_Mi_OV3V4TOT<P1QDiNQ<W1UDaNn;^1WD[Nk;f1ZDRNi;m1]DhMi;X2\\\\D^Mh;c2_DnLi;R3j5O101N100O2M2M4K5K5K5N2M3O1N2O1O1O101N1O1O1O0010000O101N1O1O2M2N3M2N3N1O2N2N1O2N2N2M3N2N3M2M4K8Ebb`4\"}, {\"size\": [848, 480], \"counts\": \"^ai42[j03O2O000O100O100O1O100O100O1N3M2N2N2O0O2M3J4F:M2N3M3M3M3O1O1N1lNcNWYO\\\\1jf0QOhXOo0[g0o0301O0OO2O0N10102O10100O4M`1`N6J00001N1001O00000O1N3N1jN[ZO`Mge0Y2Q[OSMSe0n1SZO\\\\No0BRe0o1SZO\\\\NYg0c1jXOYNWg0f1^ZOQNWd03kYOb1m1]NYd0NoYO`1i1`Nkd0Z1V[OeNnd0W1Y2L4K8I6J8FWne5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"l\\\\T55Xj03O1N3M2N3N1O2N2N4L3M3N2M5J3O0O2N1O101N2N100O100O00100O100O100O10O11N10O1000O10O010O010O010O1O1O1O1O1N2O1O1N2O1N101O1O2N1N2N2N3L4K6Hida5\"}], [{\"size\": [848, 480], \"counts\": \"dYc4=Pj04M3N101O000010O000001O01O0000000000000000O10000O2O000O100O10O01O2N10O010000001OO10O1000000000001N10001N10002N2M10001N2N2N2O2K_VU6\"}, {\"size\": [848, 480], \"counts\": \"Una3R1Pi0e0cZOWOc`0W1j^OPOVa0n1h\\\\OQM^Oe1hc0c4M4M2N2N2N2O1O1O1O1O1O1O1O100O001O1O001O10O000O2O1O0Ed\\\\OdI\\\\c0[6f\\\\OcIZc0]6h\\\\O]I]c0b691N9G7I9H7H<Dg0h]OfGn`0Q9M1N101O0O2O0O100O100O100O101N1O10000O100O100O100O1O101N1O100O10O010]LX@^Lg?T1b@TMa0Y1m>U1mCcNS<Y1\\\\D\\\\Nc;b1VEhMj:V2`EbM`:\\\\2cEcM]:\\\\2fEaM[:^2jE]MV:c2mEZMT:d2PFZMo9f2TFWMm9h2TFYMk9e2VF\\\\Mj9c2UF_Mk9a2WF]Mh9d2XF[Mi9e2UF]Mk9c2TF_Mk9b2TF^Ml9b2UF\\\\Mk9f2UFXMl9i2TFVMl9j2UFUMk9l2UFRMl9o2UFoLk9R3VFkLj9W3g6001O001OVOPYOTNof0k1SYOVNlf0h1WYOXNhf0h1YYOWNgf0h1[YOWNef0h1^YOVNbf0i1bYOTN^f0k1fYORNYf0n1mYOjMVf0U2S100O100O100O1O100O100O100O10O11O01O1O1O1O1O2N3M2N2N1O1O1O2O0O100O1O1O1N2O2N1N5K4L2N2O2M2O1N101O001N2O1O1O001O1OSNiYOAWf0=PZO_Ooe0`0XZO[Ohe0c0`ZOVO`e0i0eZOTOZe0k0jZOROVe0m0lZOSOTe0k0nZOUOQe0k0Q[OSOod0l0S[OTOmd0j0U[OVOjd0i0X[OVOid0h0Y[OXOgd0f0[[OZOdd0e0_[OZOad0d0a[O\\\\O_d0b0c[O^O]d0`0f[O^O[d0`0g[O@Yd0<l[OCUd09n[OGRd05R\\\\OKPd0NU\\\\O2Tg010O01O010O010O0001O0001O01O01O01O0000001O1N2N4KkTV3\"}, {\"size\": [848, 480], \"counts\": \"ffh45Zj02N101O0000001N100O2O0O2O0O100O2M2N2M2M4N2M2K4G9N1N2O2N1N3N1N2O0mNfNTYOY1mf0T11M3O2O0OO2O010jYO]M`d0d2_[OaM]d0_2d[ObMYd0_2g[OcMWd0_2h[OcMUd0`2j[O`MUd0g2c[O[M\\\\d0]4O10O01000O1O2N2M3N1M4K5WOYZOdLke0P3R1mNjXOdN]g0W1jXO^N`g0\\\\1fXO\\\\Nag0a1i0N2M6K3L3N2M5K7H7IQif5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"mlS69Tj04M3N2M1O3N1O2N1O1O1O100O1O1O2O0O100O2N2N10000O10000O01000O0100001O00001N3N1O1O1O2M3N2M3N1O2N1O100O1N2O0010O000O2N10000O010O1000001N101O1O0O2N3TOcWO^O`h0?j0M5L4L5K7JnUX4\"}], [{\"size\": [848, 480], \"counts\": \"]QV2c0ii08I7I6I6B=^Oa0A`0L3N2L30100O00O101M3L4L4L4N2N2O1N2O2N2M2O1O2N1O2N1N201N10010O001N2N2N2N4L3L6lNW^Q9\"}, {\"size\": [848, 480], \"counts\": \"`Ro07mi0a0H4K5ICiVOMVi04kVOFUi0>lVOASi0a0mVO@oh0d0oVO@kh0T1O0L3110BYWOTOeh0m0[WOTOdh0l0]WOROdh0n0\\\\WOQOeh0o0ZWOSOfh0[1010N2ON1O1001N2F;M3N2O1N2NO101O02N1O2O00001N100O2VO_VOc0ai0[ObVOc0_i0]OaVOd0^i0\\\\OaVOe0_i07YXO@\\\\e0a0_ZOI[e08aZOO[e01bZO4]e0M^ZO9_e03oYO4Pf07ZYO5ef0l10O0O2O000O3L4J6F:L4K3L4K5M3N2O100O1O100O1N2M3N2O1O1O1N22O0O0000O1001O00010O00000O2O0000000000001O1N1000000O2O0000000O1O1O1M3M3M3N2M3N2M4F9K5N2N2O1O1N2N2N2O1O1O10000O10000O10O11O0O1O1N2N2L4M3N2M2N3N2N2O1N2N2O1O1N2O0O2O1N2O1N2N101N2N2N1O200O10O010O01O0100O010O100O10000O11O1O3L4M4L4K3N2N1N2O2N1O1O1O1O1O001O000O101O0O100O10000001O00000O101O00000002a\\\\OPJZb0U7N000001O0O1O2N2N1O2N1O1N2`Mf\\\\OhM]c0V2g\\\\OdM\\\\c0\\\\2e\\\\OaM]c0_2d\\\\O^M_c0a2b\\\\O]M`c0c2`\\\\O[Mac0e2_\\\\OZMcc0f2]\\\\OWMfc0h2Z\\\\OVMhc0k2U\\\\OdL_d0\\\\3_[O_Lid0`3U[O_Lnd0^45L3M4M2N3L5L5J9H6J<D5J5L4L4L5J5L4L5K6I6K5K6I5L4L3M2M3N3M2M4M2M3M2N2O2M2N4M3L6Goik3\"}, {\"size\": [848, 480], \"counts\": \"]a\\\\57Rj08K4L3J7K4N3J5kNQOeXOT1Wg0WO_XOm0^g0[OYXOi0fg0P1O101OOM200O1O2000010O2O4L?A100O0100O2O001O1O1N2O1O1N2N3M4POiXO`N\\\\g0[1jXO_N[g0]1hXO]N_g0^1m0L2N3M4M2L6J8H:Ebne5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P_W71hi0W1[O5M4L3N3L3O1N3M2N3M2O1N1N200000O1O002N2N2M2N3N3M2N3N2J6N5K3M6J:F5K3N3L2O3M2N2MUST4\"}], [{\"size\": [848, 480], \"counts\": \"[VW72Wj08N=B3E;I6K6B=O1O2L4N2N2O0000001O3M1O10O1O1O1O1O4L100O2N8H5K4L6J3J;GZZY4\"}, {\"size\": [848, 480], \"counts\": \"Q`k26Yj03M2N2N101O0O10000O100O100O100O010O010O001O001O1O00001O0001O10O00O2N1O2O001O010O10O0010O010O001O0001O0010O01O1O1O0001O1O10O000010O0100YYOMPc03n\\\\O1Qc0Om\\\\O5ob0Mn\\\\O7Pc0Io\\\\O;mb0GP]O=ob0Co\\\\O`0ob0Ao\\\\Ob0Pc0^On\\\\Oe0Pc0\\\\On\\\\Of0Rc0ZOl\\\\Oi0Rc0YOk\\\\Oi0Uc0YOg\\\\Oj0Yc0[O`\\\\Of0`c0Io[O:T`0gNcAd1dMFd`0oNdAc1_M_Oj`0SOeA`1_M]Oi`0XOfA^1]M\\\\Og`0\\\\OkAY1]M[Of`0@kAV1^MZOe`0DjAT1_MZOe`0DkAT1^MXOe`0HkAQ1_MWOd`0NiAk0bMXOd`02fAg0eMWOc`07eAb0gMYOb`09eA>gMZOb`0<eA;gMZOc`0?eA[2Y>jMfAT2Y>PNiAk1U>YNPB`1o=dNSBW1k=nNSBP1l=TOSBk0l=XORBh0l=[OQBg0m=]OoAe0o=^OmAe0R>^OhAe0X>]OdAf0[>\\\\O^Aj0a>YOYAj0f>YOSAl0m>XOj@n0U?WOd@k0[?U5]@`EW?`:i@dES?[:n@gEP?Y:QAgEn>Y:RAhEl>Y:UAgEj>Y:QAmEn>S:o@QFP?P9VAlFN6j>m8QBUGn=l8PBVGo=k8PBVGo=k8PBVGo=k8PBVGo=k8PBUGP>m8mAUGR>m8lASGT>o8jARGU>o8jARGU>P9iAPGX>P9gAQGX>P9hAoFX>R9gAnFY>S9gAmFX>T9gAlFY>U9fAkFZ>W9eAiFZ>X9eAhFZ>Z9eAgFZ>[9eAdF[>]9dAbF]>_9cA`F]>b9aA]Fa>c9_A[Fb>f9^AXFc>i9\\\\AWFe>i2ZAX30nIf>g2aAY3GoIi>f2dAZ3CoIj>c2iA\\\\3]OPJj>`2oA_3WOPJk>^2RBb3oNRJo>[2UBX4k=hKXBU4h=kKZBS4g=lK[BR4e=oK\\\\Bo3e=PL^Bm3b=RLaBl3_=TLcBj3^=ULdBi3\\\\=VLfBi3[=ULhBi3X=WLiBi3V=XLkBf3X=VLjBi3[=RLgBl3_=fIe@k1o1_4\\\\=eIg@i1o1a4[=fIh@e1o1e4g=XK]Bf4d=XK^Bg4c=VK`Bj4`=TKbBk4_=RKeBl4e=iJ]BV5h=eJYB[5i=bJYB\\\\5h=bJZB]5i=`JXB`5i=]JZBa5g=]J[Bb5h=ZJ[Be5k=RJXBm5Wa0N2N2O2M3PNV[OUNmd0b1c[OUN`d0]1R\\\\O[NSd0X1Y\\\\OdNlc0R1[\\\\OlNhc0P1Z\\\\OoNkc0k0X\\\\OSOlc0i0U\\\\OVOQd0c0R\\\\O[OUd0=m[OCYd01m[ON\\\\d0WO_YO8Y2`0Yg0N1O1O2N1O2N1N3N3K8HkgP4\"}, {\"size\": [848, 480], \"counts\": \"afh45Zj02O00000000001O0O1001O0000O1M3M4M3L3N3M10O11M2J51M5M3N5K3@cok6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"nj]61[j05L4L4N1M4N1O1N3M2O2M102L3O1O1N2N2O1N2N3M2O0O2O0O2O01OO101O0001O0O2O001O001O001N2O1N1O3M2N2M3O2M3N2N2N3M7_OQVO4^ic4\"}], [{\"size\": [848, 480], \"counts\": \"bY`9:Uj02O00000O101N1N2N2O1O1N2O1N20O01O1M30000O10O100000000O10O101O0000O1000000000000O100O100O1O1O101N2N:B]ob1\"}, {\"size\": [848, 480], \"counts\": \"kn_2235li0`0G6L3M3M3N2M2O2M2O1O1O1M3M2O2N2N1O2O0O2N100O101N100O100O100O10O11N100O01000O10O100O100O10000O1O10O01O1O1O1O1N110O11O2N1O1N2N2O1N1O1O2O0O100O1O2O000O2O0O101N10001O0O100O2N100O2O0O101N100O2O0O2N1O2N1O2N1O101O0O2N100O100O100O100O100O001O1O010O000100O001O0O2N100100O010O1O100O100000000O100O001O100O1O010O1O1O00001O0O1O1I7^Ob0G9K6N2N2K5L4M3M3N2J6J6J6M3N2M3N2M3O1N2O1O1O1O10000O100000O100O011N100iNa\\\\O\\\\K`c0`4e\\\\O^K\\\\c0`4f\\\\O_K[c0_4g\\\\O`K[c0^4e\\\\ObK\\\\c0\\\\4e\\\\OdK]c0Z4c\\\\OfK_c0X4b\\\\OgK_c0W4b\\\\OiK_c0V4a\\\\OjK`c0U4`\\\\OlK`c0S4a\\\\OkKac0U4^\\\\OkKdc0S4[\\\\OnKfc0P4[\\\\OPLfc0o3Z\\\\OQLgc0n3X\\\\OSLic0l3W\\\\OTLjc0j3W\\\\OVLjc0i3V\\\\OWLkc0i3T\\\\OVLnc0h3R\\\\OYLoc0f3Q\\\\OYLQd0f3o[OZLRd0d3o[O\\\\LRd0b3n[O_LSd0`3m[O_LUd0`3j[OaLWd0^3h[OcLYd0\\\\3f[OdL[d0\\\\3e[OdL\\\\d0[3d[OdL^d0Z3b[OgL_d0X3a[OgLad0W3_[OjLbd0U3^[OkLcd0S3^[OmLcd0R3][OnLed0m2^[OSMcd0a2h[O_MYd0[2k[OfMVd0f1lZOaMX1i0mc0]1d\\\\OcN]c0P1P]OoNRc0o0n\\\\OQOSc0n0n\\\\OQOTc0n0k\\\\OROVc0m0k\\\\OROWc0m0h\\\\OTOYc0l0f\\\\OSO[c0m0d\\\\OTO]c0l0b\\\\OSO_c0n0_\\\\OSOac0P1\\\\\\\\OoNfc0R1W\\\\OoNic0R1V\\\\OmNlc0T1R\\\\OlNnc0V1o[OjNSd0X1j[OhNWd0Z1e[OgN[d0\\\\1b[OcN`d0_1][OaNdd0`1Y[O`Nid0`1V[O`Nkd0`1S[O`Nnd0a1Q[O^NQe0b1mZO_NTe0a1kZO^NVe0c1iZO]NXe0c1fZO]N\\\\e0d1aZO]Nbe0a1]ZO^Nfe0b1XZO^Nie0e1cYOaM;i0Tf0Q2eYOnM^f0R2`YOnMaf0R2_YOlMdf0R2^YOjMef0U2\\\\YOiMff0V2ZYOiMhf0V2YYOhMjf0V2ZYOdMkf0Y2h0N2N2N2M3N2N3L3N2L5I8UOm0@[`]2\"}, {\"size\": [848, 480], \"counts\": \"Pai43Zj030001O01O00O1O2N1O1O1O1O1O1M4M3K3O2N2N1O1L4J4M201O2M3L4N2N2O1mN]NYYOc1ef0hNoXOZ1Sg0POcXOo0_g0o020O1N1K310002O1M31N2N4MX1hNa0_O2N10000001M3M2O2K4I8UOjYOWMZf0c2m0M4ROdXO`Nag0]1dXO^Nag0^1cXO^Nkg0T1\\\\XOdNig0X1h001N2O3L3M5K5J9G:ERTe5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Zfd4=Qj05L5K5K4M2M2O0O101O0O101N101O001O1O001O0O1000001O0000000000000000000000O10010OUWOcNch0]18000000010O00000001N11O01O001O001O1O0O2O2N2N1O0O10000O101O000O1O100O2N2M3N3M6IZaf5\"}], [{\"size\": [848, 480], \"counts\": \"XgU9>ki09K5K3000O00100O1001OO1O11O0000000000O100000000000O1002N10OO1001O01N1010O10N2O010N2N110O1O1O1N10000N200O2N2MZWj1\"}, {\"size\": [848, 480], \"counts\": \"]iX3`0li07K4L4L3N2M3M3N2N2N2N2N2N2N2N101N2N1O2O0O2mWOeNnf0\\\\1nXOnNlf0S1oXOWOkf0Z2L4M4L2N2N3M2N2N2Na0_O9G5L1N2N3M2O1N2O1N2O0O2O1N2O1N10nMo[OeMPd0X2U\\\\OfMjc0X2`\\\\O`Mac0^2e\\\\O^M[c0_2k\\\\O]MUc0a2P]O]MPc0`2S]O_Mnb0_2S]ObMmb0^2R]ObMob0]2Q]OcMPc0]2o\\\\OdMPc0]2P]ObMQc0]2o\\\\OcMQc0^2n\\\\ObMSc0]2l\\\\OdMUc0\\\\2j\\\\OcMXc0^2g\\\\O`M[c0`2d\\\\O_M_c0`2`\\\\O^Mdc0a2\\\\\\\\O^Mfc0a2Y\\\\O^Mjc0a2V\\\\O^Mlc0a2S\\\\O_MPd0_2P\\\\O_MSd0a2l[O^MVd0a2j[O]MWd0d2j[OYMXd0g2h[OWMYd0j2g[OTMZd0m2i[OmLYd0T3_13N2M3O1N2O1O001O1O001O001O10O01O10O01000O010O100O1O1O1O1O1O001N2O1N3N1N2N2O2M2N2N3M2M3N2N1O2O01O010O001O1O00100O1O100O011N101N2hXOYMdf0k2QYO\\\\Mnf0T3O010O000000000O100O10O010O010O01O100O10mN`YOVN_f0i1fYOTNZf0j1hYOVNWf0k1jYOTNVf0k1lYOTNTf0l1lYOTNTf0k1nYOTNRf0l1nYOTNQf0m1PZORNPf0n1QZOQNPf0m1RZORNne0n1SZORNle0n1UZOQNke0n1WZOQNie0o1XZOPNhe0o1ZZOPNge0o1ZZOPNfe0P2[ZOoMee0P2`ZOhMde0X2Z1O100O1O1O010O000O2O0O1O1O2O0O2O0O101O000O101O000O2N1000001O000O1O10000000010O00001O00UXOjN^f0U1`YOPOF0ae0o0gZOYOXO;ie0>hZOi0Te0]2MG9K5O10000000001O000O100000001N10001O1O00001O001O1J7E\\\\YOcLhf0j2WYOcMPg0W2VYOhMkf0T2XYOlMHCmf0]2_YOTNaf0j1aYOVN_f0f1fYOWN]f0c1iYOTN`f0e1fYOYN^f05RYO=h0[O`cV2\"}, {\"size\": [848, 480], \"counts\": \"\\\\[j43\\\\j01O11O0010M3N1O2N100O1O1O1N3M2O1O1O1O0O2I6E9M3O2O1L3M4N101N2kNeNUYOZ1kf0VOcXOl0_g0Q11O2O1OO0L301010001O2N2O4Mk0lXOfL[e0[4M000001N100N3M3N3M2M3L5aN]ZOkMfe0R2nZOVMZe0g2Y1XO]XO`Neg0]1`XO`Nag0_1k0L8I2M3N3L4L5J6K:Djne5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"kTQ56Uj0KnUO3Rj0:K7I4K5K4M4M101L4M3N2N1O101OO10O2O001O1N2O1O2N3M2N2N2N1O2M2N10000001O00001O1O1O1O1O1O101N2N2O0O3L4M4J]WO`N]h0]1=M4L4L4L5K5J5M6K1O4J5Lc_f5\"}], [{\"size\": [848, 480], \"counts\": \"VQf81^j03N105J1O1O2OO0100O1O0O2O1N3M2N2M101O2N2N1O1N2O0O101O1O1O001O1O0000O100O010O1O2N1O2N2O2M2N2N2N2O1N3N2N3L3N3LRnY2\"}, {\"size\": [848, 480], \"counts\": \"aaa47Qj0`0E6K5K4L4M2M2N3M2O1N3N1M3L3M4N2N1N3N1O101N10QOWXOXOhg0h0\\\\XOUOcg0k0aXORO_g0m0dXOROZg0P1dXOQO[g0Q1dXOoN[g0U1cXOjN\\\\g0Z1aXOfN_g0_1\\\\XOaNcg0V20001N3O1N4M3M3M2N2N2lNnLeZOT3Ue0VMfZOl2Ve0XMhZOj2Te0[MiZOg2Se0]MjZOf2Se0^MjZOc2Se0bMhZOb2Ue0^1N2N1O2N2N101N1O2O0O2O0O2O0O2O001N2O00001N10001O00000001O00001O001N110O010N2O1N3N2M4M2M5`KjZO^3Ze0YLlZOe3Ze0PLmZOn3ke000O100O2O0001O2M3L4L4L4L4L4L3N3M3N2M2N101N2OjNV[OgLhd0Y3\\\\[OeLcd0Y3`[OfL`d0Z3b[OeL]d0Z3f[OdLZd0[3i[OdLVd0Z3m[OeLSd0Y3P\\\\OgLoc0X3R\\\\OhLnc0W3T\\\\OiLkc0U3W\\\\OlLhc0Q3[\\\\OoLfc0n2]\\\\OQMcc0k2a\\\\OUM`c0Q1W[OQO9[O]1c0Sc0m0]^OSOda0k0]^OUOca0k0]^OUOda0k0\\\\^OTOda0l0\\\\^OTOea0l0Z^OTOfa0n0Y^OQOha0o0W^OROha0o0X^OoNja0Q1V^OnNka0S1S^OmNna0S1Q^OnNoa0S1P^OlNQb0V1m]OiNTb0X1j]OhNWb0Y1h]OfNYb0[1f]OdN[b0]1d]ObN]b0_1b]O`N_b0`1a]O_N`b0a1`]O^Nab0c1^]O\\\\Ncb0e1]]OYNdb0g1^]OUNdb0l1P3000001N101O0O2O00001O0010O1O10O01000O100O2N2M2N7I5K3L3M0100O001O01O000O000100000N2O1O2M3N2N2N2O1M3N5KeR^2\"}, {\"size\": [848, 480], \"counts\": \"k`i43[j03O000000000O1O2N1O1O1O1O1O2M2M3N2N1O2M2N3H5I7M3N3N3M2O1N3M1mN[N\\\\YOg1af0cNXYO\\\\1hf0T12L5M20O1J6H610XZOQMTd0n2k[OVMTd0h2m[OYMRd0g2n[OZMRd0g2l[OZMUd0f2h[O\\\\MXd0i2`[OZM`d0[4O0101O00000O1O1O2M3M4J5K5kNV1SOeXO`N^g0\\\\1hXO^N\\\\g0_1m0M:G4K3M3M3M4L3M6I8H_if5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"lQl6;Qj04L4M3N2M3N2N2M4M2M3N2N3L5J4O2M2EXNmWOj1Rh0VNmWOk1Th0TNjWOo1Yh05K2O02N1O101N3M2N2N2N2K5J7H7G`0WO`VOMh^d4\"}], [{\"size\": [848, 480], \"counts\": \"WVX94Zj03N2N3M2ZOGQWO;oh0KjVO7Ui0b00001O001O00000001O1O2M3N2M3M2M4M3M5HTi_2\"}, {\"size\": [848, 480], \"counts\": \"iaR44Xj09I5K7J4L3M3M2O1N2O1O1O001O00001bWOZOPg0g0eXOFXg0k1O0O01O001O010N101O0O2O0O1O100O00O1O001O100O00O2O0101N4M2M4M;E5K4M2M2O0O2O0O2O00000O1O2O000000001N10000O100000000POWLY[Oi3`d0`L][Oa3^d0eLa[O[3\\\\d0iLb[OX3]d0jLa[OW3]d0lL`[OV3_d0mL^[OT3`d0_1O1O1O1O100O100O100O101O0O10000O10000000O1000000000001O001O00001O1O1_Kg[Oi2Zd0UMg[Ok2Zd0TMf[Ok2\\\\d0SMf[Ol2[d0SMe[Om2]d0QMc[On2ad0nL`[OR3cd0gLa[OX3jd0oKe[OQ4]e04K3N5J:F9F5K5L2O1N2O1O001N2O001OoNW[O[Lid0^2V[O[Mf01Sd0X2T]OgMkb0V2Y]OiMgb0V2Z]OkMfb0S2\\\\]OmMcb0S2]]OnMbb0R2_]OnMab0Q2_]OoMbb0P2_]OPN`b0P2`]OPNab0o1`]OQN`b0m1a]OSN`b0<a[O0P2D`b0<Q\\\\O[Oc18\\\\b0=o^OBSa0>m^OATa0?k^OAUa0?l^O@Ta0a0k^O_OVa0`0k^O_OUa0b0j^O^OWa0a0j^O^OWa0a0i^O@Va0a0j^O^OWa0a0i^O_OXa0`0h^O@Xa0a0h^O]OZa0b0f^O^O[a0b0d^O^O]a0b0c^O\\\\O^a0d0b^O\\\\O_a0d0a^OZO`a0g0a^OWO`a0i0`^OVO`a0k0a^OROaa0n0Q400000O0100O1O010O1O100O1O001O0000100O0010O00010O010O1O1O10O01O1O001O001O01O001O1O1O1N6K2L4M4K7FSi_2\"}, {\"size\": [848, 480], \"counts\": \"gVf44[j02N1O100O100000001O0N3N1O101O0O1O1M3J6M3M2N2N1N3M2L2L5N003O1N0O2iNhNXYOZ1ff0POoXOR1Qg0V10N2O1OL5M3N1002O2NUZOUMTd0k2h[O^MTd0b2j[O`MUd0a2i[ObMVd0a2e[OaMZd0[40000000000000O1O1M5I7I7WOi0dNWYO^NZg0]1lXOYN^g0c1k0K5K8I4M2N2L5L4M4K7H;C]^h5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"_nU7;Pj07L3L3N2M2N102M4K4N2K6L3N3N2L4J6N2N12OO10O10O01N102N2N2M3N3M5K5J6K:E[bZ4\"}], [{\"size\": [848, 480], \"counts\": \"fUS91]j05K5QOL[WO6ch01UWO2ih02RWO1mh0j0O001O000001O000000000O1M3M3L4J7H8Ce_f2\"}, {\"size\": [848, 480], \"counts\": \"ghZ4:l2JRd0b0g[ODSd0`0k[OBRd0a0l[OARd0a0m[O@Pd0c0n[O^OQd0d0n[O]Ooc0g0n[O[OPd0g0n[OZORd0h0i[O\\\\OUd0g0`[OC^d0?S[OOmd04hZO5We0McZO8\\\\e0^200O101O00000O10000000O0nNaZOUM^e0g2jZOUMVe0h2P[OVMod0i2U[OTMkd0i2[[OSMgd0k2_12N7I6K8G2O2fN^La[Od3Qd0[LQ[O8k0_3lc0QMS\\\\OQ3gc0TMW\\\\On2gc0TMW\\\\On2gc0SMY\\\\Om2fc0UMY\\\\Ok2ec0WMZ\\\\Oj2ec0WM[\\\\Oi2ec0YMW\\\\Oi2hc0ZMS\\\\Oj2kc0YMo[Ok2Pd0k1O100O10000O1000000O10000000000001O000000001O0O2O1O001O1O1O001O2N2RKf[Ob3[d0\\\\Lg[Oc3Zd0\\\\Lg[Oc3[d0[Le[Oe3^d0WLc[Oi3jd0iKV[OX4ae001O0000001O1N2O2N2N1N101O000O100O10001N10001O000O2O001N1O2O0O2N1O1N2O1N2N2O1N2O1O1M4M110O1101N2N2O1O1OYNQYONmf0OZYOOdf0NbYO1[f0NiYO2Uf0LPZO4me0IXZO>_e0^OiZOi0SOkNdd0:^\\\\Om1ac0TN`\\\\Ok1`c0TNc\\\\Oi1^c0VNe\\\\Oh1[c0XNh\\\\Od1Xc0\\\\Nl\\\\Oa1Tc0_No\\\\O]1Rc0cNR]OY1nb0gNW]OS1jb0mN[]On0db0TO_]Og0bb0YOb]Oa0`b0_Oc]O=]b0Dg]O7Zb0Im]ONUb01d^ORO`a0o0Q400O100O2O0O1O100O1O001O1O010O00100O01O1O3M2O3nVOkNah0h1J2N1O1O1O000O01JcWOXN^h0[1b000000000O2N2L3I:\\\\OgTh2\"}, {\"size\": [848, 480], \"counts\": \"TQg42]j02N101N1O1000001O0M4L3N2O1N2O1N2M2M3L2O3L5N1L4L4H7K4OM4NoN_NZYOa1bf0jNUYOY1hf0VOeXOQ1Zg0Q1010O1N002O20O0O101O2QZOTMYd0l2e[O[MVd0f2g[O^MXd0e2c[O^M[d0U3jZOTMVe0R41M3L41O01O0O2O1N2O0N3iNeZOSMbe0i1mYOfNXg0W1lXO_N]g0_1eXO]Nag0^1eXOYNbg0d1g0M6J3M3N2M4L5J8I8G:DmXi5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"QUY7154bi0i0J`0@5L005K3M2O1N000dWOSNUh0i1;O2N3N4L4L1O4L3N1N2N2N3N1N2N2M2O4K3L5K6IQjY4\"}], [{\"size\": [848, 480], \"counts\": \"mjd74Yj07F7M3M4N1O001O1O001O001O1O1O1O100O0001O2N2N3M2N3M1O2N1O2M3L5KiTn3\"}, {\"size\": [848, 480], \"counts\": \"h_l23Yj07J4M3N1O1O2N1O1O001O0001O001O10O01O1O100O10O0100O10O0100O10O001O0O10001N10000O2O0O1O10000O2O001N100O1N2F:M3M4L3M3mWO]NVg0g1iXO]NRg0f1lXO]NPg0e1PYO\\\\Njf0i1VYOXNdf0n1[YOTN_f0P2aYOQN[f0R2fYOnMXf0S2iYOmMUf0T2lYOlMSf0T2mYOnMQf0R2PZOnMPf0P2QZOQNne0k1WZOUNhe0o1TZORNke0P2SZOQNme0Q2QZOnMoe0V2mYOkMRf0X2kYOiMTf0[2hYOfMXf0\\\\2fYOdMYf0Z3O2QNXLS]Oi3gb0jLk\\\\OV3Tc0oLh\\\\OR3Vc0QMh\\\\OP3Wc0RMh\\\\Om2Xc0UMf\\\\Ol2Xc0WMf\\\\Oj2Yc0WMf\\\\Oj2Zc0VMf\\\\Oi2Zc0XMe\\\\Oi2Zc0YMe\\\\Og2[c0YMd\\\\Oh2[c0ZMd\\\\Oe2]c0\\\\Mb\\\\Od2]c0_M`\\\\Ob2`c0_M^\\\\Ob2bc0`MY\\\\Oc2fc0T20N2N2N200O1N2O1O1O100000001O00001O010O1O001O1O1O1O1O2N2N2M6K7TKmZOm3Ve0nKnZOQ4Te0jKnZOV4fe001O000O1000001O00001O1O0O100000000000001O00000O2O00001O1O001O0O2O00000O2O00001N100O2O1N101N1O2N1O1O1O1N2O0O2N2O1O13nXOjLdf0b3O1O1O1O1O1O100O100O100O0100O1O1O2N2mN`YORNdf0g1eYOSNcf0b1cYO[Nhf0W1]YOgNmf0m0WYOQOof0;`YODaf0:cYOB^f0>eYO]O^f0b0dYOZO_f0e0f110O10O0100O100O10000O10000O10000O10O10O10000O2O00000001O001O0O1O1O1O100O01O01O01O000000001O001O000O101M2MP_a2\"}, {\"size\": [848, 480], \"counts\": \"Tgc41^j01O1O1O2N100000000O1000O01L4K6M2N101O1N2L3H8K5L4L3N3K3O1N0jN]NdYOd1\\\\f0iNVYOW1jf0W1010O101N01M3N11O2O1O1O02N0VZOXMnc0l2m[OXMRd0P3_[OXM_d0]400000010O01N1O3M2N2N2N2N2hNdZOhLUf0m1\\\\YOdNmg0T1ZXO`Nng0\\\\1e0N2N3M3M4L4L4L6K3L8Fdhk5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Vam63]j06J3M3N5J9H4K4L3M3N1N1O3M2N2O2M2O000O100O100O1N22L3L3L3N3M3N3M2O2O002M1O1N3N1N2M3M300O1O1N4M2LdUX4\"}], [{\"size\": [848, 480], \"counts\": \"XUU79Uj05L2N1O2O0O100O1O1O100O1O1O01000O10O0100O010O0100O010O2O0O1O2O0O2O1N2N2N2M4MaQX4\"}, {\"size\": [848, 480], \"counts\": \"n`]25Yj07I4M2O1N2O0000001O00010O00010O001O01O10O01O0100O010O100O10000O101O01O10O000001O0000000000000O1000O10O0100O010O100O001O0O1O1O1O1N2O1N101N2N1N3N2N2N2N2bWOdNeg0_1ZXOdN^g0a1bXOdNWg0_1hXOdNSg0_1mXObNof0a1QYO`Nkf0d1SYO^Njf0d1SYO`Nkf0d2N1O1O2O1N2N101N100O101O001O001O00001O0000000POWLY[Oi3Rd0RMh[On2Ud0WMi[Oj2Ud0XMj[Oh2Td0ZMl[Of2Sd0\\\\Ml[Od2Sd0]Mm[Oc2Rd0^Mn[Ob2Pd0aMn[O`2Rd0`Mm[Oa2Rd0bMj[O`2Ud0cMh[O^2Xd0dMd[O^2[d0l100O100O1000001O000O1001O000000001O0000001O001O001O1O1O1O2N1N3N1_KV[OZ3nd0_LX[O^3ld0]LV[Ob3Qe0VLQ[Oi3Se0RLP[Ol3je001O000O1000O100000O1000001O0000000O1000000O10000010O1O003M2OO01O01O0000000O2O00001O0000001N10000O101N1O1O100O2ZO\\\\YO^Mdf0`2`YO^M`f0_2dYO`M\\\\f0_2eYO`M\\\\f0\\\\2iYOcMWf0Z2lYOfMUf0V2oYOhMRf0T2SZOkMme0o1ZZOoMge0i1cZOUN\\\\e0Y1Y[OcNhd0T1^2_O`02N1N3K5J6\\\\OmN]WOa1`h09N101O10O0O2N1N3M3K4\\\\Od0K6N1N4M2N4K7Gbeb3\"}, {\"size\": [848, 480], \"counts\": \"oQb42[j04N10001O00000O1000O02O0O1O1O1M4L3N2L4N2N1N3K3L4M3M3M3M3M2N3N0iNaN]YOb1df0gNRYOY1of0QOfXOo0^g0o02O00O1M2N30O2ON1011002M5lYOQMjNN^e0Z3Q[OaMmd0R4N100O11O1O0O2M2O2N2M3K5D=RNhYOmNlf0Q1WYO^N[g0^1hXOXNjg0^1g0L4L3N1N2O3L4L4L7I5K5Ijhk5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"XSk6:Vj05K3M5L8G=CJnVOPOPi0[1M7I2N2O1N2N100O1O0000001O01N1N2O2N1N3M2N2KWWObNjh0]16M2O1O1O2N1O1KgVORO[i0l05M3O2J5O1O1N3K7G`Y\\\\4\"}], [{\"size\": [848, 480], \"counts\": \"UVU77Wj03N2N1O1N2O1O1O1M3M3N110N101N1O1O2O00001O01O00001O1O1O2N1O1O2M201N2M3N2M3M5KTQX4\"}, {\"size\": [848, 480], \"counts\": \"`Uj3<`1;Zf0J^YO>^f0FZYOb0cf0AXYOc0ff0@UYOd0jf0_OnXOf0Rg0\\\\100010O001O1O2O0O10OgNPYOROQg0d0XYO]Ogf0>_YOAbf0;aYOF_f06dYOK\\\\f00hYO0Zf0JjYO7a0BZc01Y\\\\O>9G`c0A\\\\\\\\Oi02I[e08cZOI]e08aZOJ^e08_ZOIae08^ZOIae09]ZOGce0:\\\\ZOGce0<ZZODfe0?WZOBhe0a0UZO@je0c0SZO^Ole0R1dYOoN[f0Z1[YOhNdf0c2N3N1O1O2N2M4M2N1N3N1O1O001O001N1010O0001O00001O00001O0jNfKZ[O8:R4Wd0_Lg[Oa3Vd0cLh[O^3Ud0fLi[O[3Vd0fLi[O[3Ud0gLk[OY3Td0iLj[OX3Ud0iLj[OX3Ud0mLf[OU3Xd0b1O1O100O100O1000O10O10000000000000000001O000O2O001O001O1O1O1N2O1XKe[OY3\\\\d0eLf[OZ3\\\\d0cLf[O\\\\3\\\\d0bLe[O]3]d0`Ld[O_3`d0]La[Oc3ld0oKU[OQ4od0iKR[OW4de00000O010O100O010O010O10O0100O0100]MmKh^OS4Va0SLg^Om3Ua0ZLh^Oe3Va0_Lh^Oa3Xa0bLf^O]3Ya0fLe^OZ3[a0iLb^OW3_a0kL_^OT3ba0nL[^OS3ea0oLX^OQ3ia0QMT^Oo2ma0SMQ^Om2Pb0TMm]Om2Sb0VMi]Oj2Yb0XMc]Oi2_b0XM^]Oh2cb0YMY]Oi2kb0VMQ]Ol2Rc0SMi\\\\Oo2ic0bLS\\\\O>n03Rc0_Ok[O<`1Lhb0Z1i]OXNYb0c1l]O[NWb0_1m]O`NUb0Z1Q^OeNQb0U1T^OiNoa0S1S^OlNPb0Q1R^OmNQb0o0R^OPOPb0m0R^OQOQb0l0P^OSORb0k0P^OTORb0h0Q^OVORb0g0P^OWOSb0f0o]OXOTb0e0o]OXOTb0d0o3M3L5L6H\\\\kT4\"}, {\"size\": [848, 480], \"counts\": \"ifc44[j02O1O00001O0O101N10000O0N3L5L4M2M3N2M3N1O1M2M2O1N3N3L3M4K2kNdNXYO]1ef0UOmXOi0Tg0Y10002O0O1O02N2N2N2OO002O000PZO\\\\MVd0g2b[OcMYd0a2X[OmMfd0g2aZO`M^e0i300000O1O1N2M4J5N4K401N3nNU1_O>UOXXOdNng0X1i0L3M3M3L3M4M6K3L5K9F6JZnj5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"cnk61^j02N3N6I5L4L`0^VOlNgh0n1A3L2O2M6K1N2ON2O0010O00M4FlWORNYh0m1501M21O01N2O1N3M2H9J5M4L4K6I9CZmb4\"}], [{\"size\": [848, 480], \"counts\": \"nTU7?ni05L3O1O0O2O0O100O100O10OO2N1N2O2O00000001O1O1O1O1O1O1O1N2O2N1O2N2N1N3M5JTgY4\"}, {\"size\": [848, 480], \"counts\": \"YRZ2;Sj03N3M3N2N2M2O2M2O1O100O100O10000O101O1N101O2O1N2O1N100002N3M1O1N102N10O0O0101O000O1O1O000O100O1O1O100O1O1O002N2O1N001O010O0001O00001O1O1O102M2N2N4L3M1O100O001O0hYOmNSc0R1l\\\\OQOSc0o0l\\\\OTORc0l0n\\\\OUOQc0k0n\\\\OXOPc0i0n\\\\OYOQc0g0m\\\\O\\\\ORc0d0m\\\\O^ORc0b0m\\\\O_OSc0a0m\\\\O@Rc0`0n\\\\O@Sc0?m\\\\OBRc0>iZOVOV1=Pd0>fZO[OW17Rd0`0bZOAX10Ud0`0_ZOFY1KWd0i1e[OWN[d0n1_[OTN`d0n301O1O1O1O001O1O1O0000001N10000000O010O1N2O2N100O1O1OmNWKj[O54f4ic0RLT\\\\On3ic0VLV\\\\Oj3hc0YLW\\\\Oh3fc0[LY\\\\Oe3gc0[LX\\\\Og3fc0[LY\\\\Oe3fc0_LU\\\\Oc3jc0c1N100O2N10000O100O10001O0000001N1000001O000001O00001O001O1O001O1O1O1N2O2N1bJW\\\\OS4kc0jKX\\\\OT4kc0iKU\\\\OW4mc0eKU\\\\OZ4Rd0^KP\\\\Ob4\\\\d0oJg[OP5md000O10O001O10O010000000O10O012N6J3MO010O1N20O2O1ON1O2hL\\\\[Oc0ed0WOf[Od0Zd0YOn[Ob0Qd0\\\\OW\\\\O?ic0_O`\\\\O:`c0DQ]OMnb02n]OTORb0j0Q^OTOPb0k0Q^OUOna0k0S^OSOoa0l0R^OROPb0l0R^OTOma0l0T^OSOma0l0T^OTOla0j0W^OUOha0k0Y^OUOga0j0Z^OUOga0i0[^OWOda0i0^^OUOba0j0a^OTO`a0g0f^OVO[a0d0[4N2O2N11O01O0000O1000001O00000O101O0O2O000O2N100O1O1O2O0O2N0M3H8J51O1O101N101N010O2O2M2O2N1N3M3N1O2M3N2N3N1N4L6Gbbk2\"}, {\"size\": [848, 480], \"counts\": \"efc45Zj01O2N101O0O10000O10000O2N100O100O1N1O2M3M2N3M1N3M2M3M4L4J4H71N02lNZN_YOi1^f0fNUYO\\\\1hf0nNgXO[1Yg0m001ON3K5M2O0002M2N201kYO_M[d0b2^[OiM^d0X2_[OlM`d0U2\\\\[OnMcd0P400001O0O10001O0O1O2N5I9\\\\MRZO@mf09WYOoN`g0P1aXOiNfg0U1]XOfNgg0X1l0L4M2M2N3M5L2M6J7I9EmSj5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"mPP71]j04M4M3M5K3L4M2M2O6J=eVOeNgh0e1M3M4K3N1O1O3L2O1OL3M4K5N2K4O2N2N101N2O001N2O1O1O1O1N201M4L6D<G8FWQY4\"}], [{\"size\": [848, 480], \"counts\": \"cTU78Xj08H4M0O1O1O1O010O0000000O10O01O1O001O0N2O10O01OO1O012M3L5K5M5Iok]4\"}, {\"size\": [848, 480], \"counts\": \"ZTj03Yj06L3M2O1O100O1O1O1O10O00010O00100O00100O10O1000O01000O010000O010O01O010O010O1000O0010O010O10O0010O01O01O001O001O10O01O0001O0010O0001O00100O001O000010O01O001N101O001O010O00010O00100O001O01O01O010O010O10O010O010O01O1O010O10O01O0010O01O01O0010O01O010O0100O1N2N2O1O001O1O001O0O20O1O0001O000lYOYO_b0h0]]O@]NDYb0m0V_OE\\\\NDZb0h0X_OJXNA^b0e0X_O0VN]Oab0c0W_O4UN[Obb0b0W_O8TNVOdb0b0W_O<RNTOeb0a0V_Oa0QNoNib0`0T_Ol0hMgNQc0?V_OP2j`0PNU_OR2i`0oMV_OR2i`0PNU_OQ2j`0RNS_OP2k`0SNS_Om1m`0VNo^Om1n`0VNP_Ok1n`0YNh]ORN?f3ga0[Oo]Of0oa0Ch]O?Ub0Jb]O9]b0m3O2O0O2O0O2N100O1000O01O01gMW^OeKoa0Y4W^O`Kla0_4Y^OZKja0f4Z^OPKa`0GX_OZ5[b0oJc]OP5Yb0XKd]Oh4Xb0^Ke]Oc4Sb0hKj]OX4Tb0lKj]OS4Vb0QLf]OP4Yb0TLc]Ol3]b0T20O100O010O10O10000000000000001O000O2O1N110O001O01O01O00000010O00100O3M2cIc]Od4^b0WKf]Oh4^b0QKe]Oo4^b0iJh]OW5^b0]Jg]Oc5cc01N101O1O3M4L5K3M4Li0XO6I:F7J4K3N1N2N2N001O000000001OO101O000O2O0O2L4I6G:M3fIg]OY4\\\\b0dKo]Ol1<hMfa0<S^Oa1a0nM^a0?V^Oo0n0`Nm`0`0Y^Ok0n0aNk`0b0]^Of0Q1`Nd`0i0c^O>m0cNc`0o0j^O2g0jNc`0S1n^OHnc08V\\\\OAnc0>W\\\\OZOlc0f0P30O0001O001O001O1O01O0010O1O001O001N1O2N2N1O2M2O2O1O1O001O01O001O010O001O0010O100O01000O0100O001O010O01O01O0010O010O000010O010O0010O010O1O00010O0010O010O01O010O0010O01O010O1O010O010O10O010O01O10O01000O0010O10O10000O010O10O10O10O010O0100O010O1O10O0010O01O01O01O0001O000001O0000000000001O00000001O01O000000001O001O001O1O1O1O001O1O1N101O1N1LV=\"}, {\"size\": [848, 480], \"counts\": \"g[e41]j03M2O1O100000010OO5K_j06ZUO3O0O2O0O1O1O1L4N2N2N2M3N2G9F:A?K5M3K5L3LFVOUNiYOh1Zf0bNZYO_1hf0R13I7N2O100OK4L2111O111O01O4M=C1O000000000001O1N5L5J4M2FgXOXM]g0`2jXO^MWg0]2a0M4\\\\Oe0K5M2N1N4L4L5K6J7FU_h5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"WQY73\\\\j04L4M2N1O2N4L3N3L8H9H0O2N4M1N10N101N2O1O0O2O0O2O1O010O00001O1O001O001O1O1O0010O00010O01O1N101N2N1N3M3L4C>LQgg3\"}], [{\"size\": [848, 480], \"counts\": \"hSU77Yj02O2M3N1N1O2N001O0000000000O010O002M7B[jg4\"}, {\"size\": [848, 480], \"counts\": \"gQk3a0ii0;H7J4K4M3M2N2N1N2N2M3L5K4M2M0N0O4M0N4J9nMVN[[Oo1[d0_Na[O`1[d0iN`[OU1^d0SO\\\\[Om0ed0XOW[Oh0id0\\\\OS[Od0md0]21O^[OkKnb0S4R]O[Lbb0c3_]OfLZb0Y3f]OQMQb0m2o]O]Mia0b2W^OeMca0Y2]^ORNYa0o1f^O\\\\NQa0b1o^OlNFhLV`0Z4U@5^?Ic@<Z?Ag@b0W?\\\\Oj@h0T?VOl@n0Q?QOo@S1o>jNRAY1l>eNUA^1i>`NXAc1g>[NZAg1d>XN\\\\Ak1b>UN]An1b>VNWAm1h>XNRAj1k<fJkCe3SOi1o<nJdCm9Y<ZFaCg9^<[F`Cg9]<\\\\FbCd9\\\\<_FbCc9\\\\<^FdCb9[<aFbC`9\\\\<[2N2O1O010O10ZLfCVIY<g6[DiHe;U7bDfH^;Y7lD^HT;_7WEXHj:e7\\\\EXHd:Z7[CnFY2d1]:]7RF]Ho9b7hFfGZ9Y8lF`GV9`8oFVGV9i8Y4O10O010001O0O1O1O2O0O100O1O101N1O1O101N10001O2M201N2N100O2O102eH[^Oe5Xc0b0^O7H7I7Id0\\\\O9H1N2N2O0O2N100O2N102M2N3N2M2N4M1N1O2N1O01000O01O001O1O1O2M1cLZ_OoLh`0j2f_OlL]`0P3o_OcLU`0[3T@QLY`0m3Q@gKT`0V4X@]Kk?b4^@RKg?l4a@fJg?W5k2eLT[On0Qe0POT[Oh0Qe0UOW[Oa0nd0]OX[O:md0CX[O6md0HU[O3od0LR[OORe01P[OJSe07mZOEWe0:iZOC[e0>eZO]O`e0b0aZOXOfe0f0ZZOUOle0j0UZOPOQf0o0RZOfNVf0Y1b110O1O1O10OO10010O0001O0O1O100000001O1N101O2M2N3N2O4K:G6JN2O2M2N2N3M4L3L4M2M4M3L3N2M3NiVOjNVi0W13L3M2O0O2O000101ON2N1N3N1O2N1N3M3N1O4HZ[b2\"}, {\"size\": [848, 480], \"counts\": \"ZWb53Yj05N1N2L4N2N2M3K5M3N2N2O001O1O2N1000001O00000001O100O1O1O100O1O2O2O4K6K1O1N2N3N3M3OT_h5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"jh^73]j04L3N2M4L4L6J7[VOROZi0X1K8H6K3L0003M1O1N2O1O0D=M4M2M3M3N3L4M3M1O3M2N4KeUT4\"}], [{\"size\": [848, 480], \"counts\": \"Yfm65Yj04M2I7M2O2N2O001N102N1O1O1O1O001O0O10000000000O1000O2O1N6IRof4\"}, {\"size\": [848, 480], \"counts\": \"QRf3=ni08K4L5L2N1O2N100O1O000OL5OO2O0iMLTZO5P6UOj7Z1QBCS6YO_7_1ZBZOU6\\\\OY7`1^BVOX6^OW7^1_BUOZ6^OT7`1`BSO\\\\6_OP7a1aBQO`6_Om6b1aBoNQ3_ORO3Y;a1bBmNk2e0]NoNR<c1cBhNk2g1cMPNl<d1cBfNl2S2ZMfMS=f1`BeNQ3V2VMaMW=X3bE^OmL`M_=S3bEo0\\\\:QOcEQ1[:POdES1X:oNfET1X:mNfEW1W:iNhEZ1X:eNfE_1X:aNfEc1X:]NfEf1Z:YNeEj1Z:TNdEP2[:PNcET2[:lMcEW2S8dI^GT4<]2k7QJ`Ga3d0a2j7WJZGX3j0d2j7ZJWGR3m0g2k7[JTGn2o0k2k7ZJTGk2n0n2m7ZJRGh2o0Q3n7[JoFe2P1S3P8\\\\JmFc2n0T3T8^JiFa2m0U3Z8\\\\JgFb2i0U3_8[JgFc2e0T3c8\\\\JeFd2c0R3h8\\\\JcFd2`0R3m8]J^Fg2>P3R9LfF5\\\\9Y87N1M3M4J6C<E<F:K4QNdDeDc;k:Y2G9M3M3N2M4K4N3L3O1O2M2N2M4F9K6L3O1N3N2N2N1O2M3N1N3M3N1N3N2N3YHT_Od5o`0[JQ_Od5Ra0mIR_OiNMX7Ta0gI__OX6d`0VIl_Oi6na0N200O2N2O001O00001O01O2N4L4L4L3N9F=C:F5K2O1N3M3M4l^OQG``0b9N1N2O000O10000O1O1O010O01O1O001O00100O0_Lj_OgLW`0V3T@bLl?\\\\3]@]Ld?a3b@YL_?e3i@TLX?k3m@kJfNM``0U5PAeJY`0Z5m_O\\\\JY`0b5\\\\2M4L4L4oLQ[O;We0Z26J5YMbZO3ce0Z26J5K4L4L5J6K5J5bLQYOR21jNbg0SO^XOa16SOgg0j0_XOkNjg0R1l0M3M3M2O2M2N3M3M2N3L4L8DSPk3\"}, {\"size\": [848, 480], \"counts\": \"]Wb5a0ii08L2O2M2N2N3M2K5J7J5N3N1O1O2N2N2O001O1O00100O02O1O100O01O001UXO]Ngf0e1jXOgNXg0V25K6fNnXO`Nbg0[1l0M2O1N4L6J6J6H8ITjf5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Uo]71_j03M2N7I5J3VVO\\\\Odi0o0]VOZOoh0_1D9I1M2OO101M1O2N4L4L3L4N2M4M3M2N2N2M4M1O0O3M3M3K6KQUT4\"}], [{\"size\": [848, 480], \"counts\": \"nTl66Yj05L3M2N102N1N1O10O00011O1O0000O10001N10O02N1O001O1O1O1O1O1O1N100O2O0O2O000O1000O2O2N2N4K5L6Hj\\\\Z4\"}, {\"size\": [848, 480], \"counts\": \"RjS3=oi07K3M3M3O1N2O1O2N2N2N1O1O2O1N2N2N2N2N2N2N2N2O2N11O1N3N9FN3M2N3K4M4L3M3M3M3L4L3e@bMb6a2YIhM`6[2oHXNl6j1kH`NR7c1aHkN[7W1RGcMnJf1m=j0dFl0W9WO`FT1\\\\9nN]F[1^9hN\\\\F_1`9dNZFd1b9^NYFi1c9XNWFP2f9RNUFT2h9mMUFX2h9iMTF\\\\2j9eMSF`2j9aMQFg2l9YMQFl2m9UMmER3R:mLjEY3T:hLhE\\\\3W:fLcE`3\\\\:fLYE`3e:gLQE]3o:iLgD[3X;jL`D[3_;kLWDY3i;nLkCW3T<QM_CU3a<]5O100WMoBRHR=j7ZCmGg<P8aCkG_<R8fCkG[<S8jCjGU<V8mChGT<V8oChGQ<W8QDhGo;W8TDgGl;Y8VDdGk;\\\\8WDbGh;_8ZD_Gf;a8]D\\\\Ga8H^GR94TGl7Y<WHcCe7b<^HZC`7i<dHSCY7R=jHhBT7]=mH_BQ7e=i24L4M2L5L4M2O1N3M4L3L4M3N2M3M3M3M3N2O2O01O1O2N2O0O1O2N2N100O101O00001N2O002NZF`A\\\\7_>aHeA_7[>^HfAd7Z>XHiAj7V>SHkAo7U>nGlAU8Z>_GiAf8b>aFhAd9_?5L4K4L3M3M3M4L6J8H4K3N2N1O2N2N1O1O1O1O010O011NQL_APLa>m3eAPL[>n3iAPLV>o3nAoKR>n3RBQLn=m3VBQLj=m3ZBQLf=l3_BRLb=k3dBRL[=k3kBRLV=k3nBSLS=WO\\\\AS2g1cNm<YOiAf1^1oNj<YOnA`1^1SOe<]OUBT1[1^O`<^OXBn0^1A[<_O[Bi0b1DT<B]Bb0g1Hn;D_B<j1Nh;EbB4k16e;EdBJo1?_;EgB]OX2j0S;HiBWOY2n0Q;HjBSO[2R1m:IVC]NY2h1c:JUH3m7K\\\\HLf72dHD^7;hH]O[7a0mHWOU7g0mHUOW7j0kHQOX7n0W9N2N101N1O1O2M2O2N2L4M3L5KUSo3\"}, {\"size\": [848, 480], \"counts\": \"]`\\\\5:Qj06I7J5J6I7K4L5gNhNVYO\\\\1df0mNUYOV1jf0UOgXOP1Yg0S10000OOL3M101310O1O1000010j0UO4M1O1O01O001O100O1O101N101O1XN`YO\\\\Ocf0?cYOdN>]OSf0i1dYO[Nfg0_1j0K3M3M4M4J5L7H8H7Iaoe5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"nWX71^j0101O2N3M3M3M2N6J6KW1hN5NO0O0O101N2O1O1N2N2O1N2O2M2O1N2N101N2O1N2N2O0O1O2N1O2N1O2N2L4M2N3L5JVSo3\"}], [{\"size\": [848, 480], \"counts\": \"Ynl67Yj0002N6J001O2N2N1O2N01000O1O1003M1O0O20N10000O2O0001OO100O1O2O0O100O100O001O001O01O00O2O00O10000O101N7Gm^U4\"}, {\"size\": [848, 480], \"counts\": \"TP_2;Pj09J4L4M2O001N2O1N2O1O1O1O1O1N2O1O1O3M2O1N2N1O2O1O2N2N1O1O1O10O114M:E1M3M1O2N1O1O2OO0O101N2O0N3N1N2O1N2O1N1O2N2O0O2N1O1O1O1N2O1PAgNg4Z1XKkNb4X1\\\\KlN`4V1_KlN^4U1bKmN[4U1dKmNZ4S1fKPOW4P1iKROT4P1jKSOS4n0lKUOP4m0oKVOn3k0QLXOl3i0SL[Oi3f0WL\\\\Of3d0ZL_Ob3c0^L_O^3c0bL_OZ3c0fL_OV3c0iL@T3b0iLBT3`0WLQMUHe2c;;gKf0W4[OaKn0]4RO]KV1a4kNZKZ1e4gNVK^1i4dNPKc1n4eNfJ`1Y5nNVJW1h5TOjIP1U6ZO^Ij0a6@PIf0o6DcHa0\\\\7JSH>k7M_G?`8FUGa0j8BmFe0R9^OeFh0[9ZO^Fl0a9WOWFo0i9ROoET1R:oNeEV1\\\\:WOjDUINj7Z;f6jDaA];Y>?N3M3M2N3N1N3N1O1OdMiBbGV=Y8aCVG^<g8jCVGT<l8QDnFm;U9XDeFf;]9^D^F`;d9cDTF_;k9hDRFV;Q:mDiES;Z:]25M2N3M2N3M2N3L3M4K4K6K4K6I7D<F9M4J6I7K5M3L4L4M3M3N2M2N4L3O1N2O1N2N2N2N2N3M101001O3M4M3L4M3N2L3N3L3N2O2O1aDeCc8\\\\<YGgCg8Z<VGhCj8Y<RGiCQ9W<kFjCX9h0lDo9g1ZEf9@`D`0>g:Y1ZER;h:iDZEW;i:dDYE[;k:]DZEc;j:UDZEj;j:nC[ER<i:fC[EY<`<N1O1O2N1O010O10001N11O1O001O001N4M6I4M1N2N2N1QEVCV8k<hG]CQ8c<nGdCl7]<THkCc7V<]HQD[7P<eHXDR7h;nHaDh6a;XInDV6U;jIPER5lMVIW=g1TEd0ZMX1c>TN^D\\\\OcNf1S=lNWEYNXN_2d<WOPH?U8_ORH4U8JVHHo76hHnN`7m0T9L4M4L3N3N2M2O1O101N2N1O2N1O1O1O2N2N2N2M4L4L4LVT\\\\3\"}, {\"size\": [848, 480], \"counts\": \"bZj4:Vj000O1O1O0O110O1O1O_j0MeUO1OO]_21a`M3L3L4G9@`0M3M2010O1O4KZNSORZOe0ce0IfZOI[e0:P[OZOod0g0\\\\2L50O1O2L3H9K4O2O001O0010O010O1000001N10001O1O1O1O2N1O1O001N4N8G9G1O1O3MeTj5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"efm7a0mi0;XWOVOWg0V2L1O10O10O10O2O00000O2O1N2N1O1O1L5L3M3M3M3N2N2O2N1O2O0O2N2N1O2N1O2N1O2N2N2M2N3L5L4JhY[3\"}], [{\"size\": [848, 480], \"counts\": \"ZY^73\\\\j05K4M2N2N1O0O2O1O000O100O2O000000010O01O10O100O2N1O2N100O2N001O100O00001O0O10000000O1000000O3M6J:DYie3\"}, {\"size\": [848, 480], \"counts\": \"jlc27Vj04L4M2O1O2O0O100O1O1O2N2O1O1O1O001O2N2N2N1O2N101N2O1N3M1O0001000001O:E4N4KN2L4M4M1N3N1O2N100O1O100O1O1O1O101N1O10OO2O1O1O1O1O001N101N2N1O2O1aCnM>T2_OTN;m1CXN8i1HZN4h1J[N3f1M\\\\N0f1O[NOf11\\\\NMe13[NLe15\\\\NIe17[NGf1:ZNDh1;ZNCf1>ZN@h1`0XN_Oh1a0YN]Oi1DcMmEe0]:h1CkMlE=`:i1_OTNjE6e:g1\\\\ODc0<WNk0h1VOjMX1U2iNdM_1Z2aN`Mf1_2[N[Ml1d2SNWMS2h2nMSMW2m2iMoL\\\\2o2eMkLa2T3`MfLf2Y3\\\\MlE[MLI`5e5g4\\\\McEUNV5f4V5POZJT1e5TOoIR1o5VOeIo0[6WOZIn0e6YOoHn0P7]O^Hj0a7ZOSHo0l7SOlGT1T8mNdGZ1[8hN]G`1b8`NXGf1g8[NRGl1m8UN]F^IJe8h9nMYFe2h9ZMTFj2m9UMQFn2m9k60O10O100000OiNg_OYHY`0g6d_OdHd0c0h?_6SAaIl>[6ZAdIf=TO^AT7Q1hI\\\\=_O\\\\Ah6Z1hIU=0TAY6j1eIo<d7RC[Hj<i7WCWHf<k7\\\\CSH`<Q8aClGo;f8TDWGh;j8]DUG_;m8P33M2N2N3M3L3L5K5M2M4L4L4L4I7[Oe0L4M2N3L4L4L5K4K5J6H8I7K5M2O2O1N2N2O1O1O2O0001O4L3M5L3L3N2M4M2M2O2N3M4L2O1cFYBm5h=jIbBS6a=hIaBX6h1SGZ9a2oD]6b1VGc9W2lDd6Z1[GR:h1fDP7g0fGn:l0]Dd78hG_;0nCiN?i9[OlG[<]OhDc:Y;ZEhDg:Y;UEiDl:X;QEjDn:Y;nDhDR;Z;kDgDV;\\\\;dDgD\\\\;[;^DhDc;R=001O0100O1O2O0O2O0O2O0O010O10O010O001O001O001PKbDlJ^;Q5iDkJX;Q5nDlJT;n4TEmJn:m4ZEPKg:i4bESK_:g4lESJXNQNn;d7YFjI_NQN];m7cFYIZMiN\\\\=h7kEoHSMoNU=n7o4nJn]Ob1Ub0^NW^OS1ma0nNk^O5Za0JR_OBVa0?S_O_Nea0a1e^OnMba0S2g^O[Mba0d2U300O010O100O1N201N101N101N101O0O3bMTXOT2ng0iMTXOW2Sh0O4M<D<D2N10OO100O2O1N3M3M1O2N1O1O2N2M3M3L5I[m[2\"}, {\"size\": [848, 480], \"counts\": \"oQc52Wj08L4M1L5N2N1M4K5N2N21N101O000O2N1O101N1M5M2O\\\\]W6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"mXg84[j0:hVOe0hf0f1L2N1O1000O10O01O2N1O2M3N2M3M2N2O1N2N2O1O1N2O2M2O2N2N2N9F6J3L4M2O1M4N2K5M4L3M3LV\\\\c2\"}], [{\"size\": [848, 480], \"counts\": \"jPS85[j01N2O0O2O2M2N2N2N1O2N1O1O1N2M3O100O10O100000O100000001O001O0O101O1O1N101O0O100O10000O11O2M5L3M3M4K6J5K6I`bn2\"}, {\"size\": [848, 480], \"counts\": \"YYZ37Xj0:F3N0N3N1O1N2O100O1O1O100O2N10100O001O001O001N2O1O1N101M3O1O2N2O1M2O001N2O1O0O2O1O10OO2N2N2O2M2O2M2O1N100O2N1O1O2N1M3M3O1O1O1N2N2N2O001N2M3O100O1O1Q@fMf7\\\\2QHXNc7h1WHlN[7U1RHN]72`H8Y7GeHc0S7]OlHk0n6QORIc2_5YMaJo2Z5QMcJU3Y5lLdJX3Z5iLcJ\\\\3[5eLbJ^3]5bL^Jd3a5]LZJi3d5WLWJo3h5RLRJT4n5kKlI\\\\4T6cKfId4Z6\\\\KQIjLbLP8[:[KnEoLh1\\\\8Z8eLbFb3^9WM_ET3_:_6O2N100O2N1N200O2O000O100O2O0O1000O01000O01_M\\\\@VJc?e5n@oIR?o5ZAcH`NQ1T?SOeAY7Q1_Ij<MnAd6_1ZI]<<nAZ6i1WIV<_8mC_Gk8HWFLER9^1VGc8<XE\\\\:[2RE[8V<l23O0O200O1O1O100O1O1O1O1O2M3K5L3L5K4M4L4O1001O2N2N2N1O2N1O2M204K4L4L1N3O2M2N3M3M2N3M3M3L4M3M4M2M4L2O2N100O1O11iCcDW9];`FkDa9V;VFQEk9P;nETET:n:[E_Eh:c:iDgEY;_OQD3Gd88VHR<mNTD6Hh:X<kDTD9Hk:Z=SEhBk:Z=SEhBl:X=REjBn:W=PEjBP;V=oDlBP;U=nDkBS;W=iDkBW;X=bDlB^;S>0lJdDTK\\\\;h4jDVKV;g4nDXKR;f4QEYKo:e4TEZKm:c4WE[Ki:c4ZE\\\\Kf:b4]E]Kd:`4`E^K`:`4dE^K\\\\:_4iE`KV:^4nE`KR:^4RF`Kn9^4VF`Kj9]4\\\\FaKd9\\\\4aFaK_9[4hFcKX9W4QGfKo8S4\\\\GiKc8P4jGjKW8o3XHiKg7Q4iHeKV7T4YIeKf6W4dIdK\\\\6W4nIdKR6T1lDPOg5\\\\O]5Y1]FPN^4d0U5U1QGgMo3R1P5U1_GWMi3b1h4W1oN[NQ1d1WOTNj0m1ZOnMf0R2]OkMd0U2]OhMd0X2AbM`0]2E^M>a2JPM=P3c;N5L101N2M2O1N101O1O1O1O1O1O010O10010O001N002N0O101N4M1N2N2N2O1N2N2N3M5J6K4K4L4L3M5I9Ei_j1\"}, {\"size\": [848, 480], \"counts\": \"^Wb5f0fi0?C3L3O1M3L4M2M4L4M2O100010O1O1N200O10001N100O2O1N2O1O1N102N2M6K8G4M1O2N2M3N3L6JmYi5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"YVV97U2Jme0;cYO8Vf0OYYO>ef0h1N01O0O2N2O010O100001O01O0O100O2O1O1N101O1O1O1O1N2O1M4M2M3N2N2M2N5J4M3M2M4M3L3N4K4M4KeTQ2\"}], [{\"size\": [848, 480], \"counts\": \"lZ`8<Tj03M3O0O1O000O2O000O1O2O001O00010O0O001O1O1O100N2O1O1O100O1O1N2O00001O0O100O100O2O0001O2N2M4M3L4M4J7Idlb2\"}, {\"size\": [848, 480], \"counts\": \"U^R44Wj07K6I5L5M1O2O0O2N101N2O001O1O010O1O010O1O001O1O100O2O001N1O101N10000O2N1N3M2M3M3M3M3N1N3M3L4M2M4L4L4L4M3M2N3N2]^OUM];m2dCiLkKj0Z`0_2dCbNT<`1hChNS<Z1gC_Od;b0XD5S;NiD<o:EmDe0m:\\\\OmDk0P;VOlDP1P;ROkDW1o:kNkD`1o:aNhDh2V:ZMcER3V:PM`E]3\\\\:dLYEh3e:YLREQ4k:QLnDX4o:iKmD\\\\4Q;fK\\\\Dn4a;R5M4N1N2N2O1N2O1O1O1O00001O0O100000000O10000000OSN^AmGc>e7oAWHo=f7ZBVHc=j7bBTHY8VOoJh8lLoGR8K^JX8fMkGh7h0^HYNhNh9V1UG`7]1TGR9_1_E[7]=iHaBU7`=mH_BP7c=RI[Bm6f=UIXBj6i=YITBf6m=gI`A_6`>g22N1M2E=N1O1100O10010O0000000000001O0O2O1O002M3N3M3M3M2N3M2N2O0O3M3M2N3N1N2N4M4K4L3N3MaEiBf7U=RHSCP8k<jGZCY8c<dG`C^8_<]GeCf8Y<WGjCj8T<TGnCo8P<nFRDT9m;hFVDZ9i;bFZDa9d;\\\\F^Df9b;TFbDn9];mEgDU:Z;eEiD]:Z;ZEjDi:]=2N5UAiDS>o;K8H4L2O0O1OaKfBiKY=U4kBjKT=S4PCmKP=Q4RCQLk<m3XCULe<i3^CXL`<f3dCZL[<c3iC\\\\LV<a3oC^LQ<]3UDbLj;W3`DgL`;n2lDRMS;b2ZE]Me:]2cEbM]:W2kEhMU:Q2SFnMm9n1YFPNf9l1aFRN_9k1fFRNZ94`CTM]3f2R9_O^I?b6VOnIe0Q6XOXJb0h5_O[J>e5C^J9a5HcJ4]5MeJO\\\\52eJLZ56hJFY5<jJ^OW5c0nJVOS5m0kJQOV5Q1jJlNX5U1fJjN[5X1cJgN_5Z1`JdNa5\\\\1dJ^N]5b1PKPNQ5P2RKkMQ5S2SKiMn4W2TKeMo4Y2VK_Mo4`2TKYMP5f2_9O0O1O2N1O2N1O3L7I7I5L3L3M3L3M3kNdWO1`h0KV1L3MaeR2\"}, {\"size\": [848, 480], \"counts\": \"ePg43[j03N2O00001O0002M1OO5L2N100O1O100M3J7K4M3N2N1N3K5I4H7M12002N1fNbNcYOa1[f0hN\\\\YOY1ef0W110001L3M11O1O1O20O0100ZZOQMnc0P3P\\\\OSMoc0l2Q\\\\OUMnc0n2n[OTMRd0T3d[OoL[d0^3P[OkLod0[40000001O0O1O2N4M3K3N3dMRZO0Rf0LTZOlN2JPf0U1RZOiNe0_O]e0d1SZOgNXg0U1V1K3N2N1N4K5L5K7I7GS_h5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"lQX95Vj09G7H9UNSOjYOR1Tf0nNhYOX1cg06fNhNTYO^1kf0mNaXO]1]g0m0OO10000O2M1O2O1O2N1O1O1N3M2O2M2O1N3M3M3M3M<E4J4L3N3M3L3M4J6K5Lo_S2\"}], [{\"size\": [848, 480], \"counts\": \"^hY87Vj07L2N3O00000001N1O00001OO101O0O2O0O20O0001O000O2O0O2N100O1O2O0O001O1O1O1O001N101N10O1001N01000O13L4M2M4L5I`of2\"}, {\"size\": [848, 480], \"counts\": \"jlY4;Rj05L5K3N3M2O3M3L5L5K5K4L4L4K5L5K5K4L4L4L2N3L3M4L3M3N2MdMUYOW1jf0aN^YO_1af0^NaYOe1^f0VNeYOl1\\\\f0nMeYOV2Xg03M3M2N3L3N2N2N2N1O2O1N1O1O10001O000000O1O1OX^OgL]<V3^CeNn:[1kDQO\\\\LPNQ=m2^F_OkK]N^=T2bFc1bKeKo<g2aDTNH]4g;]MWD\\\\OnNa3j<RMhCZ6X<gIUCk6j<^3O1O100O100O100000000O11OO1000000O100000000O10000nMcBPG^=f8ZCkFg<l8dCPG^<l8hCQGY<m8jCQGW<m8lCRGd8VOoHh9^NPG[8OgHR9oNoFX8=[He8_OlFU8_1]F[NH_9i1eFP8o<RHPCm7P=WHlBi7T=_HdB`7^=h2000000O10O10001N1O2N2M2O2L4M2M4M3N2O100000000000000000000000010O02N3N3L5L3M5K3L4M3M4LhEcBe7T=WHQCl7k<PHZCR8d<kG]CX8a<fG`C]8^<`GdCb8[<[GgCg8Y<UGjCl8U<RGlCP9T<lFoCU9Q<fFRD]9n;nEeDT:k=5K7I4K6K2N2N2M6K1N2N100O1O2O1N2O1N2O1N1O10001N100OUI`BhJ:i4T=JiDLW;]OgE<X:]OTF?l9[O\\\\Fc0d9jNXBfLd4_4S9fNZGW1f8fN`GW1`8iNdGS1\\\\8nNgGn0Y8ROkGj0U8WOnGd0T8\\\\OQH>P8BWH5k7J^HMc73`HHb77`HFf74^HHh73[HIj73ZHHl72^HDg78[HDl76WHGl76YHUNPIi0h>Q1RIlNn6T1UIhNa5\\\\OXCl1\\\\7aN]5NmBa1m7XNW5=fB\\\\1[f0jN^YOX1af0\\\\10O00100O1N2O0O3N1N2M3K5K6K4L4G9A`0E;H8K5L4M2N3L4L5H[UP2\"}, {\"size\": [848, 480], \"counts\": \"SVf45Zj02N2O0O2O1N10001O000O1O1N2N2N2M3N2M2N2NOO3K5N3L5J5H6N10MnNbN[YO`1cf0hNUYOZ1kf0POcXOY1\\\\g0n0O1NOO20O2O2M3O0001O011mYOWM]d0k2Z[OeM^d0\\\\2][OjMad0h2iZO]MWe0n301O0000O1N3N2N2O1N1O4H9\\\\Nd1VOXXOaNng0Y1YXO_Nlg0_1e0M4M2M4L3M2N4K5L6J6I;BPTj5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Ufk84ii0]1PNVO[XOZ1_g0l001O1O2O0O1O100000001O001O10O2N1N3M4L6I7I9F9H5K5K6J3M4L4L5J4L4L>Annc2\"}], [{\"size\": [848, 480], \"counts\": \"XbU87Tj08J4L4L3C>^Oa0N2O100001N10001O0O100O100O100O1O1O1O100O100O100O1N2N3N5J9G9EVZY3\"}, {\"size\": [848, 480], \"counts\": \"`Un3S1Yi09H4M3M3N1O2N001O1O1O1O001O1N2O001O001O010O1O001O1N110O10O01I7O1@bMjXOb2Tg0cMeXO`2Zg0bMeXO_2Zg0bMfXO^2Yg0cMhXO[2Xg0eMkXOY2Sg0iMoXOU2Qg0kMmXOW2Rg0kMlXOV2m1lMdb0O^[OV2k1RNbb0Ib[OV2i1VNbb0Ed[OV2e1[Ncb0]2o[OQOnc0j3O2N1gBUJk5n5UI^K\\\\6_5]HoJ^7^5PHjJn7f5\\\\GdJ`8k5kF^JR9i5cF^JZ9g5\\\\FfJRN`Lk:m8kFiKm8oJbEk8T1_La9e3QFhLm9o9M2O2N1N2N2N2O1O0000001O1N101O0000000001OO10O010O010O001]N]FVBe9b=kFTBW9h=j1O1O1O1N3L3N]NdBWFX=j9nBQFa:H_FV:]OiET:>nEk9:[Ej9X1WEb9e<U2N2N2N1O2O001O1O2N1N3L3I8D;H9J6L3010O002N1O3N3M2M5L4L5J5L3M3M4L4L4L4M3L3M4L3M2N2N2N2O1N2N3N1N2N2N4L6K7I8H`D_DV8[;fGiD_8R;_GPEf8j:YGWEl8e:QG]ET9^:jFdE^9U:`FmEm9f9PF\\\\FS:a9kEaFW:^9fEdF[:\\\\9aEgF_:Z9]EjFc:V9ZElFf:?YCm6n1fHj::]Cn6e1lHo:ObCV7Y1oHW;]OmCe7b0VIZ=k6`BZI`=h6VBaIj=b6mAcIS>c6^AgIa>T901N2O1kEkEm3U:gK]FS4d9gKhFR4Y9dKXGS4j8eKkGm3V8mKYHi3h7SL`Ig2a6WMiIa2X6]MmI^2U6`MPJ\\\\2P6dMSJX2n5iMTJS2n5lMYJm1g5TN]Jf1e5YN`Ja1b5^NbJ]1`5cNcJX1_5gNgJR1[5nNgJn0[5ROhJh0[5WOiJb0[5]OiJXOgHhNd<P2iJnNTI_N_<_2bJjNd6U1aIcNc6\\\\1aI]Nd6a1aIVNe6h1iIcM_6]2l8N2O000O2O1N3M2N2N2N3M2M2O1N3N1N2N3M2N2N2N2N1N2O0O00O2N1001O00000000O1000000O101O0O1O10O1O1O010O01N1O00101O00O02O1O00O1O102O00010O0O2O000O2N101N101O0O2N200O100O2O1N2O1N1O2N3M2N3M4KbVj0\"}, {\"size\": [848, 480], \"counts\": \"k]\\\\5i0ei0b0^O3N2L3N2N3L3M3M6J6L3M4L1O1N2O010000000001O010N2O0O2O1N2N2M6K8G5L3M3M4L3M3M4L6I7J7I4Jacl5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"VQV82Si0^1J6I6I:F7N11NB?L3M4M3L4L2OM40100O1O2N1O2N10001O00010O1O1O1O100O2O00002N2N2N1O2N1O2N2N3N0O1O3L4K3M4J5M5K5K3L4M3L5L3M3N2M3M3L4Ko^b2\"}], [{\"size\": [848, 480], \"counts\": \"ikl6<ni08H7K5M3N1010O0010O0001O0000000O1000000000001O0O10003M5K4L2N1O2N1O2M2O1N3KQUa4\"}, {\"size\": [848, 480], \"counts\": \"h]o24Xj0:H3M5L1O2M2N2N2N2O0O2O1O1O1O1N2O1O1O001O1O1O1O1O1O101N100O2O000O10000O101O000O1000000O100O1O1O100O1O101N1O2YZOXNdb0j1V]O[Nib0X2a\\\\OlM]c0_2V\\\\OeMhc0e2l[O_MS6B\\\\6X3VCZMP61WJZOT;T5[JnKVJYOZ;k4XJ^Mf5e2RJaMm5b2lIbMS6d2eI`MX6e2aI`M]6e2[I_Md6_3[HfLc7_3UHeLk7]3nGiLP8Z3jGkLU8W3fGlLY8V3bGnL^8T3^GnLb8U3XGoLg8Z3nFhLR9g3]F[Lb9o3RFTLm9S4kEoKT:X4cEkK\\\\:Z4[EkKd:Z4SElKl:k901O10000O01O1O010O1O0QOYEVBh:\\\\=]1M3M3L3O2M2N2L3L4I9K5L4L3M3M4K4L4L5K5L4L4N00^NoDfCR;V<[EaCe:\\\\<fE]CY:b<mEZCQ:h<SFTCl9l<j110O1001M2O002M4K4M3L3M4K6L4M2M3M301O02O3L:G7J3L3L6K6Ib0^O9H6ZGYBW4Q>jIYBlNMW7d`0]He_Ob7ea000O001N100O100O10000O1O1O10000O10000001O005K00K[]O`Hdb0f7oN^HS_Oc7k`0dHP_O\\\\7m`0hHR_OY7k`0kHS_OV7j`0mHU_OT7i`0oHU_OR7j`0oHU_OR7P3RH[:n0cBR7i2ZHa:g0cBR7g2[Hd:f0aBR7^2eHh1<e3[8ZJaGi1R1T3f7fJ_Gm1c1l2Q7RK`Gm1k1g2j6TK`Go1U2b2`6ZK^Go1`2[2Y6[KaEUOh1R3k2WNcKU2^:VM^G^2k2cMPLU2j<7YInNW7Q1gIdMg6]2f8000000010O01O001O0001000000000O2N1O1O1O2N3L2O2M4L1O2N2N2N3M2N6J2N2N1N102N3L<D3N001N10000O10000O1O100O100O0010O10000O0100O00100O010O10O0100O001000O01000O1O10O01O100O0010O000O2O1O00100O00001O1O01O10OO2O0O2M20100001OO01001O00000O020O00000O10000001O00001O001N2O1O1N2O3L7Gc^i0\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"dWW7275\\\\i0K`VOZ1hh0<YWOYNZh0T2G9K4NNN5I9\\\\XOUM[g0R3M4M2L5N1O0O2N3N1O1O1N1O2N100001N1M4K4L4J7L3O200O100O011O00000010O01N10001N2N3M3M2M3M3M3L5J5M3L4M3M3N2M3M4M2M2O2M2O1O3M6I3N2M3N1O9FiSX3\"}], [{\"size\": [848, 480], \"counts\": \"Udb53Yj06L3M4L2N3M3M2N3L30001O01O001O001O0000001O000000000001O00000O2O0001O1O1O101N1O2N1O2N1N101O1O2M2N2O1N2O3JXo^5\"}, {\"size\": [848, 480], \"counts\": \"_Tl26Xj04L3M2O1M3M2N3M3N1O2O0O2O0O2N100O2O00001O001O1O010O1O1O0010O0100O1O1O1O1O10O1O10nYOVOc28UK\\\\OV=X1mC:Y3EWKRO`=R1mBY1S4Im8c2mFcMS9]2jFfMU9\\\\2fFhMY9Y2dFjM\\\\9W2`FmM^9T2`FmMa9S2\\\\FPNc9R2ZFPNe9R2XFPNg9R2WFoMh9T2TFmMm9Z2gBdJY2T3o:Z3hDgLX;^3bDdL];_4_CcK`<h4UCXKk<n4nBTKQ=Q5jBPKU=V900O1O1O100O100O100O101NoNWC]Di<`;\\\\C^Dc<a;`C^D`<`;cC_D\\\\<`;gC_DY<`;hC`DW<_;lC`DT<Z;SDdDm;R;_DmDa;l:gDREX;m:lDREQ;o:QEPEm:P;XEmDh:Q;\\\\EmD`:U;cEjD^:T;`2M4L2M4MJWEj@g:Y?YEg@d:[?^Ec@`:b>^ETB5XO\\\\:S>\\\\FXB\\\\OCV:T>iFmAc9U>[1000O2O0O1N11`FSD_4k;bKZDZ4d;hK_DW4[;nKgDP4U;SLmDl3P;VLSEi3j:XLXEf3h:XL]Ef3c:^JZGb5f8VJcGh5_8PJhGP6Z8iIkGV6W8eImG[6U8_IoGa6S8YIRHf6R8RIRHn6b8ZHbGf7d=00000000000000000001O000001O0000001O0000001nN]GU@d8g?dGT@]8i?fGV@Z8i?iGU@W8j?jGU@W8j?iGW@W8h?jGX@W8f?kGY@V8d?mG[@T8b?PH[@R8b?QH\\\\@Q8a?RH]@Q8_?UH[@o7Z7lFb0g:ZOeE;]:DmE1V:NmELW:jKnDW1V1a2R:RLlD\\\\1c1n1e9bLmD^1e1e1c9eLPEe1b1]1c9hLREi1b1T1a9mLTEm1a1l0a9RMSEP2d1a0_9XMVES2j12X9YM`Ea2b1B\\\\9aM^Ej2b1oN_9kMWEU3d1ZNd<d1gCYMS=e2^5N2N2N3M2M7iN^XOTOfg0g0\\\\XOXOhg0d0YXOZOjg0d0VXO\\\\Okg0b0VXO^Omg0?TXO@og0=QXOCQh0:PXOFRh08oWOGSh07mWOIUh05kWOKVh04jWOLXh01iWOOYh0OgWO0]h0LdWO4_h0IaWO7ah0F`WO:ah0E_WO;ah0E_WO;ch0B^WO>Yi02O0000O1000O11O00O100000000O01000000000000000O10000001O0O11O000O10O10O1000000000001N01000000000001N101O00000000000010O0O2O0O1000001O0001O000000000001O00000000001O000010O01O000010O1O101M2N3M3KePm1\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"i`o51Vj0;kUOIbi0l0E:I:D8J6K5L3L6K4L3M4M2M3M3N1N2N3N1O1O1N2O1O0000O2I6O2O00100O100O101O0O10001O001O2N1O1N4M2N1O2N2N2N1O2N3M3M2N2M4M3L4M5J5L2N3L4M2N2M3N1O4L2M3N3L4M2M1O2LT\\\\]4\"}], [{\"size\": [848, 480], \"counts\": \"]ld44Wj09I4L4L4K4O2O00001O01O0000001N10001O00000O10000000O010O100O001O1O10O10O100O001O001O10O010O01O0100O2O000O100O2O0O101N2O2N2N2M101N2N2N3MTZP6\"}, {\"size\": [848, 480], \"counts\": \"ThY38`d03i@5n>3m@0o>5i@1T?3`@9W=ROW@h0]2;X=ROW@f0]2<Z=YOl_O`0c2=^=ZOh_O<e2?_=[Oe_O;e2`0d=ZO__O=f2?i=c1SBaNi=c1SBaNk=a1RBbNl=`1RBaNk=e1QB]Nm=f1PB\\\\Nm=k1nAVNP>P2jAQNU>S2hAnMV>Z2cAgM\\\\>b2[A_Mc>l2SAUMl>S3l@nLS?]3b@cL^?h3W@YLh?m3R@TLm?R4m_OnKS`0X7O100O0010O010000OYOl_OSGU`0k8n_OTGR`0j8P@VGo?i8S@WGm?f8W@YGi?c8[@]Ge?`8^@`Gb?]8a@cG^?\\\\8d@cG]?[8f@dGZ?Z8h@fGW?X8m@gGR?X8QAfGP?Y8QAgGn>X8UAgGj>Y8WAfGh>Z8ZAfGe>Z8]AeG`02g;X8kCfG:8h;Q8PDfG5?i;j7TDdGNj0l;a7dElH\\\\:R7]EWIb:h6REfIc9WNkDS8[1oIc9ZNkDh7a1PJa9^NfDe7a1WJf9V7WFoHg9P7XFTIh9i6XFZIh9d6WF^Ii9a6VFbIi9^6VFdIi9^6SFeIl9\\\\6QFfIo9h6aE[I^:i6\\\\EYId:j6PE`Io:Q;O1O010O1O1O11O1N10O10O0100000000O000010O10O100O10O1lNhDPCW;P=kDoBT;P=oDnBR;P=PEPCP;n<SEQCn:l<TESCn:i<UEWCk:g<XEWCj:e<YE[Ch:a<\\\\E]Cf:c6gDWNg0VKb:b6\\\\EaM6kK`:b5^DfJ\\\\1Z3K]L[:`5cDfJa1Q3FfLX:]2`DO3mMd1g2FnLU:]2bDM1PNf1`2HSMP:_2cDM0PNi1X2JVMP:b2aDMMSNl1P2P<N[BMIUNQ2e1R<6[BJC[NT2[1U<<iBZOQOnNW2P1V<c0VCmN_N@b27V<Y1TCdNWNMl2]OU<n1]DeN]?V1f@jN[?R1i@mNZ?l0j@TO[?b0j@^OTe00001O00000001O01O0000001O00010O001O001O0000001O0000000010O000000001O0001O0001O00100O001O01O01O1O0010O01O00001O00010O1O001O0010O0001O1O100O1O0010O000000001O0O2O0O2O0O2N2M3N2M4LkV`3\"}, {\"size\": [848, 480], \"counts\": \"h[n42Wj08J5M3N1N200O1N2N2N200O10001O0000011O1O00O101N101O1O1O0O1O2N102N2M5L3L101O0O2KRQ^6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"``n4;li0`0D9J5I6K5K8J2M4L2N01O02N2O1O1O1O1O1O2N1O1N2O2N1O1O101N1O1O1O2O0O1O1O2O000O10O1O2O0O2O001N101N101O1N2O2N1N3N1N4Ka0iM\\\\WOc1Ti0C;BjYm5\"}], [{\"size\": [848, 480], \"counts\": \"Rj`48Rj08K4J6M2O20O001O00001O001O00000000000O100O100O10O100O010O10O10O100O010O1O00100O1O001O0010O10O1O0010O001O101N2N2O1N3M3M3M4Ka[Y6\"}, {\"size\": [848, 480], \"counts\": \"\\\\aQ32be0:l^OIo`0>l^OFo`0?m^ODo`0`0l^OEPa0?j^OFSa0>h^OFVa0=e^OGYa0<d^OFYa0?c^OCXa0c0e^O_OWa0g0f^OZOVa0k0g^OWOUa0o0h^OROm?ROS^OX2f1hNS`0VOP^Oc2^1ZN``0VOn]Of2]1UNc`0YOl]Og2]1RNe`0ZOi]Oj2]1oMh`0[Of]Oj2^1nMj`0\\\\Oe]Oh2]1oMl`0W3P_OlLn`0V3P_OkLPa0W3l^OlLRa0V3l^OlLQa0X3l^OiLSa0Y3j^OjLSa0Z3i^OiLUa0[3f^OhLXa0^3b^OcL^a0d3X^O`Lga0U6O1O1O1N2O0O2O1O1N2O1O1O^Oe^OQHZa0l7j^OTHUa0l7m^OSHRa0l7P_OTHPa0j7R_OVHm`0i7V_OVHi`0h7Z_OWHf`0h7\\\\_OWHd`0h7^_OWHc`0f7`_OYH``0f7b_OZH^`0c7d_O]H\\\\`0b7g_O]HY`0`7j_O`HU`0_7m_O`Hd>9UAU79bHP11m:a0eCi6b0cHe0>n:;iCc6e0dH?d0P;:hC]6k0dH4o0W;4hCZ6l0cH0T1[;2hCX6k0aH0Y1Z;1iCY6k0YH3_1X;2gC]6S2cIU:5cC_6o1_I]:e8YE_Ge:f8TE^Gj:f8QE]Gn:g8kD]GT;f8hD\\\\GW;g8dD\\\\G[;g8`D\\\\G`;k8iCeGV<Z;1000000O01000O2O0O100O100000000O2M3N2gDeC^M3^:Y<RHVDl7j;SH[Di7e;UHbDf7_;WH[ElNfNEHT5X<ZL\\\\G]NeLS5o;`L]G\\\\NiLn4k;fL]G[NmLj4g;iL]G]NPMe4e;mL[G^NUMa3kNbLe<_1[G^NYMY3mNgL`<a1\\\\G^N[MR3mNoL]<`1[G_N_Mj2oNUMW<b1[G_NbMa2SO\\\\MR<b1[GaNdMU2WOeMm;d1XGbNiMj1ZOmMg;e1XGcNkM`1]OXN`;d1YGdNlMT1EdNV;c1ZGeNoMd0MSOk:d1YGeNTN35C^:c1\\\\GfN_1FX7`1[GkNa1]OY7d1YGnNm>o0UAQOn>i0UAXOl>d0VA\\\\OR?;o@ET?6n@JW?Ln@4gd01O0001O0001O00001O0000001O001O0010O01O1N101O001O1O10O0001O000100O010O000010O01O10O01N101O0O101N2N1O1O2N2N2N2N2Mbkg4\"}, {\"size\": [848, 480], \"counts\": \"ZdU44[j02N102N00O1000O1O001O1N3M2H8MO2O0100O2N1N3H8H8H7aNROZYOR1df0WORYOm0lf0\\\\1N2M3M4M10M4K4N3M2O1O2O010010O107I;F:E1O01000000O1O2N101N1O1M302N3L3I6aNiXO@[g0;iXO@\\\\g06QYOVOag0d0[1K6I4N4L4K`WOLmk]6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"]SY49ii0e0C6K6K4M3N2N2M3M3M3O1N2O1N2O2M2N2O1O1O100O1N2O100O2N1O1000001N010O01O1O2N10000O1000000O0L5I9K6D>GaQk6\"}], [{\"size\": [848, 480], \"counts\": \"^g`44Vj0<E7I6L4N2O100O0001O0000001O00000000001N10O1000000000O01N200O100O1000O10O1000000001O1O1O001O0O2O00000O101O0O101O1N2N2N101N3L4MkhW6\"}, {\"size\": [848, 480], \"counts\": \"adP37Vj05J5K5C=J6M2M3M3M3M3J6K5L4hKYNc_Ok1T`0aNc_Oe1T`0gNd_O^1U`0lNc_OY1X`0PO]_OW1\\\\`0TOW_OU1]`0ZOV_OP1d`0YOS_Om0f`0^OQ_Og0j`0Am^Oe0m`0Ek^O?h`0iKk^Oo35=h`0m4K6H8J6L3O2NYOi_OYGT`0g8o_OYGo?g8S@YGk?h8W@WGg?h8\\\\@XGb?g8a@ZG[?f8i@YGU?e8o@[GP?c8SA^Gk>_8YAaGe>]8`AcG^>Z8fAeGY>Z8jAfGU>X8oAfGQ>X8RBgGn=X8UBgGj=W8YBgGh=X8[BfGe=X8_BeGc=Y8_BdG`=^8Z2M3N2M3M3M2010QBZHT9g7cFdHY9b7YFhHf9b7eEiH[:g8oC`Gf:dNoDS:0^Gg:XOiDc9HeG[;c<M4M2N2N2L4O1N2O1N2O0O2O10O0100O1000000000O1000O10000001O000000O10cDjEXOF]3`:ZM_FWNOo3b9jMPH_LnNb3XOcLj9[3SH\\\\LVOT3XOSM_9]3SH\\\\L\\\\Oe2\\\\O`MV9_3SH[L_OY2BlMl8`3SH[LCl1HWNc8b3SHZLG]1NgNY8a3RH\\\\LIR14POQ8b3RH\\\\LNh05XOl7d3RH[L3<8Cd7j2TE^Mm2I=G:7X7g2ZE`Mg2L\\\\4Ke3f2[EbMd2M\\\\4Kf3d2]EbMa2O[4Lg3a2`EcM_20Y4Lk3]2_EfM]21X4MP4W2]EjM[22X4KZ4o1VESNX23X4J_4j1TEXNU25X4Fd4i1QE[NS26Z4Ag4j1oD^NQ26_`0[1c]O]Nn18``0X1f]O^Nj1:a`0U1i]O]Nh1?_`0o0VAPOm>;eAEcd01O010O001O010O00100O1O002O0O1O010O1O1O00100O1O010O1O010O1O10O010O100O1O1O001O0O2O001O001N2O1N101N2N3M3M4J[ih4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"XeU4g0ei06J5J4M4L4M3N2M3M3O0O2N2N2M3O1N2O1O1N2O1O100O2N1O1O2N2N101N101O0O101N2OO10O10O1L5O1O1L4L3N3K5K6J8H7H9mNgVONTdm6\"}], [{\"size\": [848, 480], \"counts\": \"\\\\o^49Sj06K4L4M2O2N101O1O01O001O000001O000001O00000000000000O101O00000O2O01O00001O1O1O001O1O1O0010O0001O1O0O2O001O1O001O001O002M1O2O2L_`Y6\"}, {\"size\": [848, 480], \"counts\": \"mkS3:Sj04N1O100O1TJ@gAa0W>BeAb0b=Fk\\\\O2U5e0`=<YBI\\\\=c0`BAY=h0aB[OT=T1eBoNR=]1gBgNn<m1aB[NW=X2UBQNb=\\\\2TBjMg=]2RBhMi=`2PBdMm=`2mAfMP>]2jAhMT>Z2jAiMR>[2kAgMP>^2jAhMm=b2]ATN^>P2YAYNd>k1SA]Nj>i1k@`NR?`6M3O2M2O2M2O1NYO^AdEa>Y:fAdEY>Z:jAfEU>Z:mAeER>Z:RBeEk=Z:\\\\BbEa=V:mBgER=U:TCjEj<U:YCkEg<R:\\\\CnEd<o9`CPF_<o9dCPF[<n9hCRFX<l9jCTFV<k9lCTFT<j9oCTFR<j9QDUFn;j9TDVFl;h9VDXFi;g9ZDXFZN9X<]9UFkFh9S9fE\\\\FfMl0a<g8iEgGW:W8iElGV:R8iERHV:m7eEYH[:f7`EaH^:`7^EdHa:^7[EeHd:_7jCPG5g1n;`7_CWG:]1i:YN]EW=_:SCYEo<e:WCUEk<i:_1M3N2O1N3M2M3N2O1N2M3O1N200O100O2O000O1001O000000O100001eN^FfAb9T>gFiAY9m7gFjL4XKV9Z7UFWHn0i4NdKo8a3UFVMk0AR1h3TOPLj8Y3aFQMi0Mm0^3WOXLc8Z3cFoLj01m0S3ZObL\\\\8Y3fFPMi00Q1g2]OoLT8X3fFRMi0OV1Z2@\\\\Mk7X3hFSMf0O^1j1BlMb7X3iFRMf00_1`1HUN[7X3hFSMf00b1W1K^NU7V3lFTMb00e1Q1LeNQ7U3mFUMa01h1j0KkNP7Q3PGXM>1j1d0LROm6m2SG[M;2n17O]Og6m2SG[M;4T2D2O_6j2RG\\\\M;8[6_O[2e2WGbM4;]6XO[2h2WGdM2;Pa0P2R_O_M1b0m`0n1S_O[M5f0j`0m1WASNj>n1UARNl>l1UASNl>j1VAWNj>f1YAZNf>f1ZA\\\\Ne>b1]A^Nc>a1^A_Nb>[1dAfN\\\\>W1eAkN[>R1gAnNY>P1hASOV>j0lAWOT>e0PB[OQ>?SBBn=9VBFm=L^B6R>oNXBQ1cc010O01O1O010O10001O0O01O01O0100N2O001O1O1N2O2N1N4M1M3N3M3N2M4HVfn4\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"[aU4244gi0c0H4K5L4L4N2L4N2N2N2O2L3N2N3N1O2M2O1O1N3O0N3N1O2N101N3M2O0O2N2O1N2N2N2O1N1000N1013M10N1O1N3N1O2N2N2M3M3M4L4F;C>Ln0ROYng6\"}], [{\"size\": [848, 480], \"counts\": \"nY]48Vj04K3N4L2N3N1O101N1O1001O01O01O001O01O01O000001O000000001O00001N1010O001O1O100O1O100O1O1O001O1O001O001O001O1N2O1O1N3N1O2KYe]6\"}, {\"size\": [848, 480], \"counts\": \"Qn[38Qj0:]Ob0F;Q]OgNX<e1bC`NV<j1cCZNS<U2fCmMS<c2bC^MY<T3VCPM\\\\<a3UClLb<`3VCdLb<f3ZC\\\\L`<l3ZCXL`<o3\\\\CTL^<S4]CQL_<S4TCZLh<k3lB`LQ=d3hBbLU=a3fBdLW=`3cBeL[=]3aBgL^=[3]BiLa=[3hAZMV>k2SAjMk>n6N2O1N2O1O1O1O1O2O0O1O2N1OYO]AcEc>Y:cAfE[>Y:hAfEW>Z:kAeEU>Y:nAeE:Eh<e:QCeE5Kf<Q:gCRF@1h<i9mCUFYO5h<c9UDWFoN:k<\\\\9\\\\DZFaN?R=U9aD^G^;_8fD`GZ;^8fDdGZ;Y8gDjGX;U8gDmGX;R8`DXH`;f7_D]H`;b7_DbH`;\\\\7_DgHa;W7\\\\CPG2m1b<U7QC\\\\G1f1n<i:O101N1ZNRChEP=S:\\\\CcEg<[:]CcEc<Z:cCcE^<Y:gCdEZ<Y:kCeEU<U:SDhEn;U:X2N3M2O101N100O10000O1OoNQFdAm9\\\\>WFaAi9^>YFaAg9^>\\\\F`Ad9_>_F_Aa9_>bF`A]9`>dF`A\\\\9\\\\>iFcAW9Y>nFfAR9V>RGjAm8R>WGPBh8k=]GUBb8f=eGYB[8c=iG\\\\BX8^=oGaBQ8a7kGlK9bLm7a7nGdK=iLe7V6`FXJb1`2`0oL^7c5YGmJl0Y2c0UMX7`5^GRKk0o1f0]MS7T5jG`K`0g1i0`MP7^3oEkMT2@6`1S;T1YF]MgNW1S;[1XF^MiNn0T;c1TF_MoNb0R;n1PFbMQO5T;Y2lEbM\\\\O_OR;n2cEcMV>[2lAfMS>Y2nAhMQ>X2PBiMn=V2SBlMj=S2XBnMg=Q2ZBPNf=n1[BSNd=l1\\\\BUNd=j1]BVNd=h1]BXNd=e1^B[Nc=c1^B\\\\Ne=`1\\\\BaNd=^1]BbNc=\\\\1^BeNb=Y1`BfNb=T1bBmN^=l0iBSOY=g0lBYOU=;UCEm<2[CNg<J_C5e<AbC?b<SOhCl0ob0O1O2N1N2O1N2O1N3N1M6I6I\\\\YZ5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Zo\\\\4;Pj06J5N2N2N3N1N2M3N3M2M4M2O2M2N3M2O2M3N2N2M4M4L2N3M2N2N2N2N2N2N2N2O1M1010O1O0O1010O01O001N2N2N2O1O2M2O2L4M2N3M4KgWOSNUh0h1PXO[Nng0a1b0N4L4G9F`W]6\"}], [{\"size\": [848, 480], \"counts\": \"R\\\\]45Wj07K3M3M3M2O2M2O1O2O0001O01O000001O1O0001O0000001O00001N101N1O2O1O001O0O1001O001O1O1O1O2N1O0O2O1O1N101O1O1N2O2M2N2N3K7Hk]^6\"}, {\"size\": [848, 480], \"counts\": \"Te]3;oi08D;G9I7I6L5K6J5K5J9GP1POb0\\\\O:H6J6I7K5K5o^OkJb<Y5ZClJ`<Y5]CiJ^<\\\\5mBZKn<k4mBYKQ=i4iB\\\\KV=f4YBkKe=X4lAVLR>n3eAYLZ>e4c@aK[?k7O1N101O00O101N11O10O10eA^Eh<b:TCdEi<\\\\:TCiEk<V:TCmEk<Q:SCSFl<l9SCXFl<f9hBhFX=V9eBoF[=n8bBXG_=e8_B_Gb=]8^BfGb=W8]BmGc=o7^BTHc=]7gBgHY=U7gBoHY=l6iBXIV=Q:0000000000gNjCWDW<\\\\;[D^Df;`;^D^Db;`;aD^D`;a;eD[D\\\\;b;iDZDX;e;TElCP;S<g1O2N1O1O2O0O2N2N1O1O2NQO]DSCb;j<eDSCZ;l<iDSCW;k<lDTCS;j<RETCn:h<WEXCg:e<]E[Cc:b<aE]C_:_<eEaC[:[<iEeCV:W<oEiCQ:S<TFlCl9P<YFoCg9n;]FPDd9k;bFTD^9n6eDWMR2hKZ9P7VEfHF\\\\3o1kLW9R7lEiKR1SMS9U7nEaKo<_4UCYKo<h4TCoJQ=l3bA_Ja1]1Q=b3RBPKQ1V1P=c3XBVKl0n0P=X3m@aK\\\\18m0e0n<Z3nBQL8:P=]3QCYL5Oo<]3WCdLR`0S2U]OWNQ3Gh?o1^ARN`>m1bATN\\\\>k1fAUNY>j1hAXNW>f1kAZNT>f1mAZNR>e1oA]NP>a1RB_Nn=^1UBcNi=Z1[BgNc=V1aBkN]=R1fBoNZ=n0iBSOV=j0mBWOS=d0QC\\\\OP=>UCCk<Jl]OUO`5Q1n<UOhCk0ob000O001O001O00001O0O2O1O1O1O1N3N1N3M3M3L8FlQV5\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"aPg42Qj0b0G6K4K4M3M3N3M2O2M2N3N1N2N3M3N2M2O2N1N2O1O2N1O2N1O101N3N0OO2O0000001O001O001O1O001O1O0O2N3M2O1N2N3M4H7N2M4I7G9I7IZ`V6\"}], [{\"size\": [848, 480], \"counts\": \"RUZ45Xj05L3M3M2M3N3M200010O001O00001O01O0001O000000001O000000O100O100O100O1000000O1000000O1000O1000000O10001N101O1N2O1N1N4N2L6K2LTP`6\"}, {\"size\": [848, 480], \"counts\": \"eX`39Qj07K5J6K4N2M3M4K4K6L4L4K5M3U\\\\OVNk>n1SAUNi>n1UASNi>P2SASNW>Cm]Ob2Y3ZNc>Ef]O_2Y3QNn>P3f@RMW?Z3^@gL`?a3Y@aLf?b3V@`Lh?d3T@^Lk?d3Q@_Ln?c3o_O_LP`0c3l_O`LS`0a3i_OcLV`0_3g_OcLX`0^3d_OeL\\\\`0\\\\3`_OhL^`0[3]_OiL``0Z3[_OkLc`0X3X_OlL?jMe>]5f@mLe0gMb>d5^@jLo0cMb>e8\\\\A_G`>d8]A_Ga>c8WAfGf>[8QAoGn>R8m@SHQ?o7l@THS?m7j@VHU?k7g@YHX?`9N2O1O1N2O`Mo@cIo>W6[AgIc>X6`AhI]>Y6cAiI[>X6`AnI_>S6\\\\ASJb>n8N2N2J6RO`DgBe;W=k0N2N2L4M3O1IeBYC[=g<fBWC[=i<fBUC[=k<50000O1000000O0100POYCWDg<e;^CZDa<d;dCYD]<d;gC[DY<b;lC[DU<b;PD\\\\DP<a;SD^Dn;^;VDbDj;Z;ZDfDf;V;aDeDa;V;fDfD[;U;S2I7J6eGe@\\\\5`?bJe@Y1FeLg0S2T?Nd@U1`1RNQ>h0c@4^OYNX2<l=W1a@GGcNV21g=e1_@WO2ROmb0g1U]OmN6\\\\Odb0g1Z]OZNa0OUb0g1[]OWNc01Rb0h1\\\\]OVNb02Rb0h1\\\\]OVNc01Qb0h1^]OWN`01Rb0h1_]OUNa02Pb0i1_]OSNd03ma0i1a]OlMi0<ea0h1c]OiMk0>ba0h1d]OiMk0?aa0g1i]OeMh0c0_a0h1R@XNo?f1R@[Nn?c1T@\\\\Nm?a1U@_Nm?]1U@cNP`0V1S@iNn?S1U@mNl?P1V@QOk?l0W@SOk?j0V@VOl?f0V@[Om?@j[O`0b40We0O01O01O00010O000001O010O00001O010O1O001O1O00100O001O001O001O010O1O001O010O0010O001O000O2O0O2O0O2O1N2M3N2N3M4JbdZ4\"}, {\"size\": [848, 480], \"counts\": \"`cc44Xj07J7H7Kj0UO5K4@UNRXOX2gg0=K6I4L3N1O1O10O02O4L2N010O1O01O001O1O1N2O1N2O1M3K5M5K9E8H<E9BUWOiNPi0R1:L4N25J00UOiVO9ji0FQic6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Ucn4b0ei0<F7L4L4L4M3N2N2M3N2N2N3M2O1O2N1N2O101N1O2N100O1O2N1O100O100O1O10N2N201N2O1N3H7E>ChU\\\\6\"}], [{\"size\": [848, 480], \"counts\": \"c^X49Tj04L5K3N3M2O2O000010O00000010O01O00001O000000001O00O101O0O1O100O10000O100000O0100000000001O00001N1000001N2N2O1N2N2M4KUVd6\"}, {\"size\": [848, 480], \"counts\": \"odh3m0`i05K3L4L4K5J6K5J6G9H8K5K5J6RMWMl]OR3ia0aMi]Oe2Sb0eMa]Oa2Zb0jMZ]O\\\\2ab0PNT]OT2hb0[Nc\\\\On1Yc0g2i]ORIi`0Q7S_OUIg`0o6U_OVIe`0o6W_OVId`0m6[_OUIb`0m6V_O\\\\If`0h6T_O^Ih`0f6T_O^Ig`0g6W_O\\\\Ib`0\\\\8L4MiMj_OZJQ`0f5V@XJe?j5_@UJ\\\\?m5e@UJV?n5k@SJo>o5SASJg>P6WAUJe>l5XAZJe>g5UAaJh>_5XAeJe>\\\\5VAjJh>`8N2O1N2O2M2O1O1O1O100O100001OO100O2M2N2J6M3UOIhBlDV=Q;SCkDk<S;[CkDd<S;_CmD`<P;eCoDZ<o:jCoDU<n:PDREo;j:VDUEj;h:[DWEe;d:`D\\\\E^;a:gD^EY;^:mD`ER;[:VEcEi:Z:^EbEa:[:hE_EZ:\\\\:o2M3M4L3L5I6_Ob0YOf0VOk0F:L3M4K5K4H9\\\\Od0O1O1000000mNm[OiKRd0P4W\\\\OoKic0l3]\\\\OSLcc0d3g\\\\O[LYc0X3T]OhLmb0l2_]OSMbb0b2h]O^MXb0a2i]O_MWb0`2j]O`MWb0_2i]OaMWb0_2i]OaMXb0]2j]ObMVb0]2k]OcMVb0\\\\2j]OdMVb0[2k]OeMVb0Y2k]OgMWb0V2k]OiMUb0W2k]OiMVb0U2k]OkMUb0S2m]OmMTb0m1R^ORNoa0j1T^OVNma0g1U^OYNla0e1U^O\\\\Nma0_1U^OaNna0Y1U^OgNoa0m0Y^OSOoa0Kk^O5ie0O00000000000000001O00000000000001O001O000000001O01OO10001O0000001O000000001O01O01O00001O00001O1O001O010O0001O001O000O2N2N3M4KXkf3\"}, {\"size\": [848, 480], \"counts\": \"i`Q48Uj04K6H7I8J5M1O2M3L4L4K5M3K4M4M2M4J5K4I7J5N02N]Nc1EaKjZO_4Ye0fK_ZOY4fe035M3N3M2N3O1M3N2O100N2O1O1O1O100O100001ON2O1O2N1N3I8K3VOj0N1O4M2N8H:E;F5K4L3M4K;E8Fbcd6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Qi[5`0ki09H5L2K6K4M4M3N2M3M3N2N2N2O1O1O1O1N2O1N20001N100O101O0O100001O002O0N2M3M4K5E:H9J8G6FnTn5\"}], [{\"size\": [848, 480], \"counts\": \"VRP42[j06K5L3M3N1N3M2N2O1M2O2O1O1O1O1O1O1O1O1O1O1000000O10000000O01000O1O1O002QOVWO4hi0Klm]7\"}, {\"size\": [848, 480], \"counts\": \"RP]35Zj03M2N1N3N2N1N2N3H7K6K4M3M4K4M4L3L5K5K5M2M4K5G9F:J7K5M4J5K5iH[L\\\\Gh2^IiMT?AQDOCg2[MjMo>BlC=ZOZ2oMgMh>EdC]1fN[1POcMe>F^Cg1cNU1\\\\O^Ma>GXCQ2`NP1IYM^>GmB_2bNe06UMY>HeBo6SOZIW>H[BV7@SIS>HWBZ7HnHo=JSB\\\\7OkHm=JnA_73kHm=HlA]78nHj=HhA\\\\7=PIh=HeAZ7c0QIg=HaAV7h0VIf=P8YBTHe=k7[BXHd=f7]B\\\\Hb=jNhAo7g0YI`=hNiAl7i0_I\\\\=W7eBkH[=S7fBoHY=n6iBSIW=j6jBXIU=f6mB\\\\IR=b6oB_IQ=_6oBbIR=\\\\6nBeIS=Y6nBoHk=P7TBjHS>U7nAjHS>U7mAlHS>S7mAnHS>Q7mAPIS>o6mASIR>m6mATIT>j6lAWIT>h6lAZIS>e6lA_IR>_6oAcIQ>Z6oAiIP>V6PBkIP>V6nAlIR>T6TA[HKf1o>U901O0100O100O1O1N101O1O1N2O101N0O101N1O2O0O1O1O01O1N11O1O1O1O_Oa0H9M200000O1O2O001N2N2N2N3nKk@gLV?Q2XAaJ5Q3f>o1bAoJ3g2]>Q2hAVK9\\\\2Q>[2gA[Kc0n1g=e2eAaKo0]1^=o2dAfKW1n0X=Z3cAhKh17j<P4^AiK^b0X4a]OhK_b0Y4]]OiKeb0W4W]OlKib0U4U]OlKlb0S4S]OnKnb0S4o\\\\OlKTc0T4i\\\\OmKYc0[4[\\\\OfKhc0_52N2N2N3M2O2N2mLj[OH\\\\d04f[OH\\\\d08d[OF_d09a[OF`d0:`[OEbd09^[OHbd06`[OJad05_[OJbd06^[OJcd05\\\\[OLdd03][OMdd02\\\\[ONed00\\\\[O0ed0N\\\\[O3dd0I_[OoNGGjd0U1b[OTOJAfd0n0kZO`Ni0P1J^Odd0l0o[OF^OZOgd0m0m[OH_OZOdd0k0o[OK^OZOdd0g0P\\\\ON_OYOcd0e0P\\\\O2_OWOcd0c0P\\\\O5_OWOcd0`0P\\\\O8@VObd0;S\\\\O>^OUObd03W\\\\Og0XOYOgf0f0^YOWOaf0h0bYOWO]f0h0fYOUO[f0j0gYOTOZf0j0g1O1O1O1O10O0\\\\XOZO`e0f0U2O10O0100O0100O1O100O010O10O10O01O1000O01000O1O1O1O1N1100000000O10O100000000O2O00O100000O01O1O1001O00000000O100O1O1000000O101N101N1O3M2N2O3Jln`2\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"]\\\\k5e0fi0;G7G7J6L4K4J7K5L3M2N3N1N2N2OgNbXOB]g0=fXOAZg0?hXO_OXg0a0iXO^OWg0c0jXOZOWg0f0kXOXOVg0g0kXOXOUg0h0mXOVOSg0j0nXOUORg0l0oXOROQg0o0UYOkNkf0U1WYOgNjf0Y1XYOdNjf0[1W1O0O100O10001N101N2O1O1N2O2M3M5J6IgQ\\\\5\"}], [{\"size\": [848, 480], \"counts\": \"n[i35Wj07K4M5K4L5fVOCYh0^1K3N2N1O0O2O000O10O1O1N2M3K5J6L4N2O1N2N2M3N2N3L4M3M4L4L8HcTg7\"}, {\"size\": [848, 480], \"counts\": \"lVm25><hh0m0K4M2M4L2O2M3N1N2O0O100O100O001OO101L3N2N2O1N2M3K5M3N3M200O1O101O01O3M4L3M4L3MQ1PO4J3N3M2N1O1O1O1O00O101M2N2M3L4N3N10000NeK\\\\Mo@b2S?eMf@Y2\\\\?kM_@S2d?oMZ@o1g?XNR@h1o?^Nk_Oa1U`0eNf_O[1X`0iNf_OX1X`0oNf\\\\OgNL0^2Z2o`0Ne^O3Za03`^ON[a0=^^ODZa0e0d^O\\\\OPa0S1l^OnNj`0^1T_OaNg`0g1V_OZN^`0T2`_OlMY`0]2d_OdMT`0h2h_OXMm?V3o_OkLi?a3R@`Lh?k3R@VLj?V4h_OPLU`0W7N2O0O2O100O1O1O001O001O1O00100OdNQ@XHP`0g7R@XHn?h7R@WHn?i7S@WHm?h7T@XHl?g7U@XHl?g7T@ZHl?f7T@ZHl?f7T@YHm?f7T@ZHk?g7T@ZHk?e7U@\\\\Hk?d7R@_Hm?b7S@_Hl?_7W@`Hi?`7X@`Hh?`7W@`Hj?_7W@`Hj?_7T@dHl?[7T@fHl?n80001O0_OeEn@[:o>e0L3J6O2O0O101O0000000100O1O10O0100O001O001O0001O10O1O0O2iInAOR>LbBE_=9lB]OU=a0VCUOk<i0YCTOi<h0]CcK\\\\MV3X?T1QDdNQ<V1^D_Nc;^1eD\\\\N\\\\;b1mDVNU;h1PERNS;l1REoMo:P2UElMm:S2XEgMj:W2]EbMe:]2bE[M_:e2iERMX:n2nEiLV:V3SF\\\\LR:e3\\\\601O001O1O1lMdYO2\\\\f0LhYO2Zf0JhYO5Zf0HiYO7Xf0FjYO9Xf0DjYO<Wf0^OnYOa0Uf0ZOnYOe0Vf0UOmYOk0Wf0mNmYOR1ig0O1O20O010^WOhNJ:Vg0T1gXO_OOmNTg0o2kXOSMTg0l2lXOTMVg0j2jXOXMTg0g2;O1A]XOQNcg0o1\\\\XORNeg0\\\\201O00@\\\\XOTNdg0j1_XOUNag0h1cXOVN^g0f1kXOWNSg0g1PYOXNPg0P1]XO\\\\Oh0Akf0Q1f1O1O10O01N2O0O10100O0010O000000010O000100O0010O0001O0O10001N011O01O0001O0O101O1O1O001O001O0000000O1010O010O01O010O0001O00000001O00001O01O01O010O010O10O001M3O1O1000O01000O010O101O000O100O1O2N1O4M2K7JPm_1\"}, {\"size\": [848, 480], \"counts\": \"^nX4=li0;H7ZOg0H6J6I7I5ISNWXO`1eg0dNbXOV1me0ZNoZOe0YOn0de0mN^ZO=0d0ae0[OPZO4i0QO]f0Q2Q100O2N1O2O1K5H8D<F:I<]OSo_7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"iXU6m0`i07J6I8H6K4L5L3L4N1M3N2N2N2N2N2O1N100O1O2O0O010O1O1OO2N2N2N2O1N3N2L3N3L4M2O3L3N101N2O00001O1O000010O0001O000O100O2N1O2O0O1O2M2N3O0TOPWO6Ti0FSWO4oh0JTWO2gi0N2M2O2Nib\\\\4\"}], [{\"size\": [848, 480], \"counts\": \"mXe37Xj01M4M2M3N2N2O1O0O2N10000O2O0O00100N2O100O1M3N2M3O1N3O0000001O01O001O100O1O1O2N1O101N101N101N2O001N2O001N1M4K4O3L3MdWX7\"}, {\"size\": [848, 480], \"counts\": \"end2=oi09I3M3M2O2N1N2O0O2O1N10001O0000000O01001O0O2O00O10000O10001N200O001O1O10O01O1000O0bWOTOZg0k0bXO[O]g0d0`XO@`g0?`XOC_g0=`XOD`g0;_XOFbg0:]XOGcg09\\\\XOHdg08[XOIeg07YXOJgg07WXOJjg05VXOLjg04UXOKmg05RXOKng06PXOKQh05nWOKSh06jWOKVh0W11O1O1O1O1O001O1O100O100O010O1O001O1O01000O00100O1O010OkL`N\\\\]O`1bb0cN]]O\\\\1ab0iN]]OW1ab0mN]]OS1ab0QO]]OP1`b0SO^]On0ab0TO^]Ol0`b0WO_]Oj0^b0XOT\\\\OYON_1lc0\\\\O`[OM`0h0lc0AU[O4n0<jc0S1T\\\\OnNkb0ROX\\\\OT2l0jNcb0^2\\\\]OcMaa0_Nc]Of4k0kL[a0h3c^OYLYa0m3e^OSLXa0R4f^OoKWa0U4g^OkKWa0Z4e^OgKZa0^4b^ObK]a0c4\\\\^O`Kca0g6O1O101N100N200000000O1000000O100000001O0001O0000O10000O100000jNf^OVIYa0i6i^OWIVa0h6m^OWIRa0h6P_OXIo?CR@R72\\\\Ig?f7\\\\@ZHa?h7`@XH]?k7c@UHZ?o7e@QHZ?R8d@nGZ?V8c@kG]?d9O1O1O1O1O100O10000O1000000000O01001O0000000O10000O101]J`ASOa>e0VBlNj=Q1_BiNa=V1dBeN^=X1kBaNU=]1SC\\\\Nn<a1YC[Nh<a1_CZNc<a1eC[N[<^1QD\\\\NQ<_1WD\\\\Nk;a1[DZNg;d1^DXNb;h1aDTNa;0T@C`48^;1U@Gb43Z;1Y@Kb4NX;1Z@1d4GT;4[@4g4AQ;5]@:j4XOk:;]@=o4mNj:b0Y@a0Rf0ZORZOf0Pf0TOTZOl0Tf0bNWZO\\\\1_g00000O101N0010O01N2O1O1N3N101N5K2O1N101O00O1001O0O0101N10000N2N2M3O1RWOROjg05lWOj06[Odg00UXOe08VOfg06RXOb0ch0f001O1N2O101N1O101QXORNYg0R2cXOoM]g0R2aXOoM^g0Y286J2N2N2N1O1O001O1O1O[O`XO\\\\N_g0d1bXO\\\\N]g0c1eXO]NZg0b1iXO]NVg0`1oXO_Nof0`1UYO^Nkf0Z1^YOfNaf0X1bYOgN^f0X1eYOgNZf0X1iYOgNWf0W1lYOgNTf0X1oYOgNPf0Y1RZOeNoe0Y1UZOdNke0\\\\1e1O1O1K5F:O001N2N1O2O1O1O1O10gVO\\\\Ofh0c0[WO^Odh0a0]WO@bh0`0^WO_Och0`0^WO_Och0a0]WO^Odh0a0]WO_Och0a0]WO_Och0`0\\\\WOCch0=[WOGch08]WOIdh05^WOHeh07[WOFjh06bnm1\"}, {\"size\": [848, 480], \"counts\": \"dQj31^j03OMRZ30PfL000N3M3N4L3M4J3M3M3M4L3L3G:L3NL04N5H7L4`N^NnYOe1Pf0^10J7L4M2O100N010N20100O3N10O102N=D;VYOXLVf0V4J6lYOjKde0b4OO2O0N3oNQ[O]LRe0Y3W1nNUYOhMcg0P2c0J6M2N5K5L5K5K6J4L3N2M5L4Jnbi6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"\\\\Xd6>ki0b0B6J7H6K7K2N2L5L3N3M2M4M2N1O2N3M1O2O0O2OO2N1N2O2M2O1N2N3K5L3L5L3M4L4N2O1N2O0O10000000O100O10O100000O1O01O101N1O1N2O1M3O1O2N2N2N3L3J6DgnP4\"}], [{\"size\": [848, 480], \"counts\": \"Uaa49Uj0200M3L4L40L43K2M3O100O1L30100L40N200000M2O2M3I6M4M3N0O3O1O1O100O10000O1001O0000001O1O1O0O2N2M3BUWOUOmh0c0TWOTO17mh0a0\\\\WO]Ofh0a0f0N2L3N4M3Mhi\\\\6\"}, {\"size\": [848, 480], \"counts\": \"TVa36Uj05O10O2K4M13M3M4M1M3N2O1O1N2O1O00000000100O1N2O1000O010000000000001O00000000O101O0O1001O00O1000000000000001O01O01O01O001O0010MSKSO[@l0a?AW@>j?GQ@7P`04f_OK[`06d_OI\\\\`09c_OE_`0<`_OCa`0=o\\\\OWOc0<^b0>h\\\\OA2BlNa0Yd0?c\\\\OECn0kc0JQ\\\\O^OHR1Vd0i3O1N2O1O2N1O2N2N2N2O0O3M2O1f\\\\OfI\\\\b0[6`]OiI^b0Z6_]OgIab0Z6\\\\]OiIcb0X6Z]OjIfb0W6W]OkIhb0P7O00000O1000000000100O0000nNX]O\\\\Jib0^5^]OaJab0Y5f]OfJZb0V5j]OjJVb0U5k]OmJSb0R5n]OnJRb0T5l]OmJSb0U5k]OkJUb0V5j]OjJVb0Y5g]OgJVa0]OP_On5IeJTa0Fm^Og5NcJSa0Mg^Od54_JSa0i6l^OVIRa0n6k^OTISa0n6k^OSITa0V8MQOm^OfHPa0\\\\7P_OeHn`0_8O1O2O0O2O0O2O0010OO2O000000000000001O0000O10001oJT@\\\\Ol?>l@POT?l0WAmNj>o0_AkNa>R1eAkN[>S1jAjNW>S1oAiNQ>U1UBgNk=V1\\\\BeNf=X1_BeNb=X1bBfN^=W1hBfNY=X1jBfNV=^OW_O1f3>T=]O[_O3d3=Q=^O^_O4d3;o<^O`_O7c37o<^Oa_O;c34n<YOg_Ob0^31o<SOl_Oi0[3Mm<ROP@o0V3Jo<lNU@W1P3Hh>6\\\\ADg><^A[Oe>e0_AQOh>n0^5O1N2O0O101N1O2O1N2O1O1N101O000000100O010O001O001O0010O01O00O2M2L4K6J5J6lNT1M3M4L3L4N2O1O2O0000000000O1O2N1N2QNPYO;Sg0BYYOWOVO4Uh0a0a1K6IYhj2\"}, {\"size\": [848, 480], \"counts\": \"dQj31^j03N01N10N4M2N10000O100O1O2M2O1O1O0O2N1I7F:M101L5K6I6K6`N[NnYOk1le0eN\\\\YOh1cf0n04L5M02O1ON011N4M3O1N3N10O01007hYOPMcd0b3`ZOoL[e0T4OO1000010M5L2N2O1N2O1O1N4cNaZObMde0o1i1J5J4A>I7N3M3L5L6I8H9FSSg6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"W[n65Uj0?D7G8I7K4L5L3K5M1N2N3N1O2M3N1O2O0OO2N1O2N2N2N2N2M3N2O1N2N200O2O1O010O2O2M2N3N0O1O1O2N1O1N2O1N1O2N101N1O2O1M3N1O1N3L6GW_m3\"}], [{\"size\": [848, 480], \"counts\": \"l\\\\l44Zj03N2N2M2O1O2M3N1O1O1N3N1M3O1O1N2N2N2M2L5I7K5N101O00010O01O100O001N3M2M3N2N2O1O2N1O1O102D;K5O0O2N2N3N5G_RV6\"}, {\"size\": [848, 480], \"counts\": \"bZ\\\\37Uj06L3M2O2M2N2O1O1O1O10000O010O2N010O1O1O1O1O0000100O001O010O1O10O010O01000O001O100O10O10O10000O010O1O1000O10O10O10O1000mLROd\\\\Om0Yc0[Oc\\\\Oe0[c0^Od\\\\Ob0eNUOPc0<Z^O>dNZOPc09[^O>dNZOPc09\\\\^O=cN\\\\Oob08^^O<bN]Oob08^^O<bN]Onb09`^O:aN_Omb08b^O9`NAlb07d^O8_NBkb08f^O6^NCkb08f^O6^NCjb08i^O4]NEib08i^O4\\\\NFjb07i^O4\\\\NFjb07j^O3[NGjb07i^O4\\\\NFjb07e]OWO\\\\Om04Fib07_]OH[O<;Fjb07]]ONYO6<Imb04[]O3XO3N6^c0D[]O:RON45^c0DY]Oj1ZOaN]c0EX]Ok1]O^N[c0HV]Ol1BXNWc0MU]On1FSNTc00T]Oo15cMgb0>S]OP28`Meb0a0Q]OQ2:^Mcb0c0Q]OP2=^M`b0c0P]OQ2`0]M^b0e0n\\\\OQ2?^Mbb0d0k\\\\OQ2c0YMbb0b4_]O]K`b0d4a]OZK_b0g4b]ORKWO_OWc0`5a]ORKbb0o4^]OQKbb0P5\\\\]OQKdb0P5[]OnJ\\\\OBRc0`5b]OnJ]OCPc0_5a]OQK_O[OSc0e5\\\\]OSKib0m4U]OUKjb0k4U]OWKkb0i4m\\\\O_KRc0a4l\\\\OdKRc0\\\\4l\\\\OgKRc0Y4P]OfKPc0Y4R]OgKmb0Y4T]OfKkb0[4U]OeKkb0[4U]OeKkb0[4U]OeKjb0\\\\4V]OdKjb0\\\\4V]OeKib0[4W]OeKib0[4X]OdKhb0]4W]OcKib0^4V]ObKjb0_4V]O`Kjb0`4U]OaKkb0`4T]O`Kkb0b4T]O^Klb0e4P]O\\\\Kob0S6mNfHP_OZ7j`0PIQ_OQ7l`0UIQ_Ok6m`0ZIP_Of6n`0^IP_Ob6o`0aIo^O_6Pa0dIn^O\\\\6Pa0hIm^OY6Ra0jIk^OW6Ta0kIj^OV6Va0a10100O100O100O10O1000O10000000O1000000O10000XLa_O^M``0`2e_O]M\\\\`0]Oe^Om0Q1EZ`0ZOl^Om0m0FX`0[OP_Ol0i0HW`0\\\\OS_Oi0h0IU`0]OV_Oh0g0IT`0]OW_Oi0g0HR`0^OX_Ok0h0CR`0AW_Ok0i0BP`0BY_Ol0h0@P`0BZ_Om0i0^Om?D]_Om0g0\\\\On?E\\\\_OP1g0YOm?F^_OQ1h0UOk?H__OS1j0oNi?K`_OW1i0iNi?Ma_OZ1h0eNi?Mc_O]1h0aNg?Nf_O`1e0^Nh?Li_Oe1c0YNf?Lo_Oh1>WNh?JP@n1:SNeb0g1Y3I8H7H5L2M3N2M1O1N10O010001N10001N010O2O000O1O1O10O01O01O1O100O100O1N2N101O1O02N2M3O001O001O10O0100O00100O1O1O1O010O2O001O1N3M3M3L^nc2\"}, {\"size\": [848, 480], \"counts\": \"d\\\\h31]j03M201O000000000000000O100N2K4K6N2N2O1N2N1M3K31001L5I6J7I6`N^NmYOg1le0mNYYO`1hf0m05N3O1O010NN4OO1O102N3N101O01O6mYOPM\\\\d0\\\\3mZOSMod0W4001O0O101N2M3N2N2O001N2hNRZOlMPf0i1gZOeM_e0_1kYO`Nlg0Z1VXOcNRh0U1g0M3M2N4L4L4L5K7H7JUSg6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"jhV74mi0f0E;F6J5K4L5J4N3M3N2N100O1N1ON31O0001N1O2N2O1O1O2O001N2O1N3N2M4M3M6I5L;D9G5K4L\\\\U4MS^l3\"}], [{\"size\": [848, 480], \"counts\": \"]ld47Vj04M2O2L3N3N1N2O1N3N1O2M2O1N2O0O2N2F:J6L3O2O1O000010O001O1O1O0O2N2O1N2N2O1O101O0L4O1O1N3M202_OgVOGZi07gVOIYi07hVOG^i02eVOL^i0OS^^6\"}, {\"size\": [848, 480], \"counts\": \"Uko23Xj09H6M2M2N3L3O2M2O1O1N2O1O001O1O1O1O001O1O00O100010O010O001O010O0001O0010OO2N2O1N101O1O01O10O01O10O0010O0010O1000O0100O0100O10O100000O100_XORO`e0m0^ZOWO`e0i0_ZOZO`e0f0^ZO]O`e0c0_ZO_O[`0FnBj0fLCZ`0EnBi0gLCZ`0FnBg0gLDY`0GoBe0hLEY`0FoBe0fLHY`0DQCc0eLKY`0CQCc0dLL[`0APCc0cLO\\\\`0_OQCb0`L2_`0\\\\OPCb0^L6a`0YOQC`0ZL<e`0TOPCa0VL`0i`0oNQCb0oKf0o`0hNSCb0lKg0Ra0gNQCc0mKf0Qa0gNSCb0mKf0Qa0hNQCb0oKe0Pa0jNQCa0oKd0Qa0kNoBb0PLc0Qa0kNoBa0QLc0Pa0nNmB`0SLa0Pa0ROkB=TLb0Pa0SOkB;ULa0Pa0UOjB:VLa0Qa0VOhB9WLa0Qa0WOfB9YL`0Pa0YOfB6[L`0Pa0ZOdB7\\\\L?o`0\\\\OdB4^L`0n`0\\\\OdB4^L`0n`0]ObB3aL`0l`0@`B1dL?l`0C[@lNLU1nN;k`0IT_OLk04XO6h`0n1V_OdN0@j`0S2d^OgNc0VOh`0i4X_OXKh`0g4Y_OYKf`0g4[_OYKe`0g4[_OXKe`0h4[_OYKe`0g4[_OYKd`0h4\\\\_OWKe`0i4Z_OWKf`0i4[_OVKe`0k4Z_OUKf`0k4[_OTKf`0l4Y_OTKg`0m4Y_ORKg`0n4Z_OPKg`0Q5Y_OmJg`0T5Z_OiJh`0V5Z_OiJe`0X5]_OgJb`0Y5^_OhJa`0W5a_OhJ^`0Y5c_OgJ\\\\`0Y5e_OgJZ`0X5h_OhJW`0X5j_OgJV`0Y5k_OgJT`0Y5m_OgJR`0X5P@hJo?X5R@hJn?X5Q@hJo?X5R@hJn?X5R@hJn?X5Q@hJo?Y5Q@gJo?Z5P@eJ[?ZO__OQ6U1fJW?@b_Ol5U1dJW?[6g@dIY?a6b@`I]?h6[@YIc?m6X@TIg?P7T@QIm?S7l_OPIS`0f801O0O2O1O10O10O10O1000O010000O10O0100O10O01O10O01O1O00100XHg_OX5Z`0eJl_OX5T`0gJo_OV5S`0hJo_OW5Q`0hJR@U5P`0jJP@V5Q`0iJP@U5Q`0kJP@T5Q`0jJP@V5Q`0hJP@W5R`0fJQ@P1e0O\\\\?oNP@n0o0LR?SOQ@n0U1Il>UOR@P1X1Fh>XOR@n0^1Db>\\\\OQ@n0e1_O\\\\>@Q@o0m1VOW>BT@S1_2_Nf=5Q@W1gd0_N`[O]1kf0O2N2O1N2O1O2M2O2N1O1O1O2N1O2N1O101N1O1O1O1O100O1000O010O1O001O1M2N3L4J6L3K6E:[Oe0J7K4M3N1O2N2O0000O1N3K5K5H8E;B>G9G9J7K4M4M3M3L5J7Eh^b2\"}, {\"size\": [848, 480], \"counts\": \"dQj31[j04001O1ON2O2O0000000O001M3M3N2M201N2M2K6J5M201L4K5K6I6J5]NjNeYO^1[f0V14J70O20O0N01O0N23N2N3M2O1001O2N8hYOUM]d0S3V[OSMid0[4O0000O2N3M2N2O1N2O2N2M2cNVZOPNme0o0QZO`Nbg0_1`XO^Ndg0`1\\\\XO^Njg0]1WXO`NQh0Z1QXO`NYh0Z1a0M3N3L5J6K6J7HhXf6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"km^7<ki0`0D9G9I4K5M4L4K4M3M4M1N2O2N101O1O0000O1N2N2O2L3M4K5K4N3O1N2O1O1N3N1O2N1O1O1O1O2N2N1O1O1O1O1N3N1O1O1N2N2L4K5K7I]V`3\"}], [{\"size\": [848, 480], \"counts\": \"oag55Yj04M3L4N2M2N2N2N3N1N2N2O2M3N7H3N3L4L3N2M3L3N2O1O0100O1O2N1eNdWO?^h0^OhWO>Yh0_OVXO4mg0HYXO1lg0Jdji5\"}, {\"size\": [848, 480], \"counts\": \"b]i33Wj0<G7J4L3M4L3N3L3N2M2O1O2N0010O00000O2N100O2N1O1O2N2O0O2O0O100N10101O01OO100000001O0100O010O001O01O001O010O01O010O001O001O00100O010O1O01O01O01O0001O001VM]Of[Od0GoNVb0P1i]O11ROga0m1e]OPOc0XOPa0a2X^OXNg0ZO^`0R3g^OdMk0\\\\OW`0X3k^O]Mn0]OQ`0[3P_OWMo0@l?^3S_OSMP1Ah?`3W_OoLP1Ed?`3[_OkLP1G^?e3`_OdLS1IW?h3d_O`LT1KP?m3i_OXLW1Nf>U4P@mKZ11_>]4n_OcKc14X>l5gAXJT>i5lA[Jn=h5RB[Ji=f5WB]Jf=d5YB_Jd=a5\\\\BaJb=`5\\\\BcJb=]5^BeJ`=[5`BgJ^=Z5aBhJ]=X5cBiJ\\\\=W5cBkJ\\\\=V5cBkJ\\\\=U5eBkJ[=U5dBbInNF]>h6eBbISOAY>m6dB`I[O[OS>T7cB`I@SOP>^7_B`Ig>`6ZA_Ig>a6XA_Ih>a6XA`Ih>_6XAaIi>_6VAbIi>^6WAbIj>^6UAcIk>\\\\6UAeIk>Z6TAhIl>W6TAiIm>U6TAlIl>S6TAnIl>P6VAPJi>o5XARJg>m5[ASJd>j5`AVJ_>k5`AVJ`>j5_AWJ`>k5]AWJc>k5ZAVJY=nNVBm6?UJW=\\\\OPBb6f0SJX=AmA_6h0QJY=EkA\\\\6j0PJY=KfAY6n0lI[=j7bBXH]=k7`BVH_=m7^BSHa=P8]BPHc=S8ZBnGf=S8WBnGi=T8UBlGk=Y8oAhGQ>\\\\:0O001O001O1N2O1O001O1O100O1N2O1SJQBWOQ>e0XBUOi=j0]BoNe=P1bBhN`=W1eBeN\\\\=Y1iBbNX=]1lB_NU=_1PC]NQ=`1UC[Nm<d1VCYNk<f1XCVNk<g1ZCTNh<k1\\\\CQNe<n1_CmMd<R2^CkMc<T2aChMa<W2bCeM_<[2cCbM_<I`@1V31[<Jg@1Q31Z<Ki@2P3OY<Lk@3o2MX<Kn@7m2IX<KPA;k2FX<JPA`0k2BY<ESAh0g2_OY<DSAm0h2ZOY<EQAo0j2WOY<FPAR1j2UOY<_OUA[1e2QO`<TOUAi1_2nNi>m0]AjNi>S1]5L11O0101N2O1O1O1O1O00000O10010O0O00000010O0001O001O000oNgVOk0Yi0TOhVOl0Xi0SOiVOl0Yi0ROiVOm0]i0O1O1O100O100O10O01O100O1O001O01O001O00010O001O00010O0001O00010O01O01O1O0010O01OO1O11O01O01O00001O01O001O001O01O00010O0001O010O01N1100O01O0100O100O0010O010O00100O100O1O0001OO2O000O2O1N2N2O1O0000001N2N2N2NiV7\"}, {\"size\": [848, 480], \"counts\": \"Tlj31\\\\j04N1O2O000O100000000O1N1L5L4N2N2N1O2I6I7O1M3J5K7H7K5]NcNoYOb1ge0e12I8K4NM4010N3N2L4N2N3M2N3O0101O3M7I4L6K?@2N6PZObKce0f40O2N2N1O2iNQZOiMPf0R2UZOmMle0Q1QZOgN85je0Q1PZOaNfg0Z1]XOcNkg0W1VXOeNRh0V1f0N1N2N2M6K4L7I6I8HVSg6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"oiY7c0hi09J4J6K5L6J5K4L4M3M1O003L5L2M3N2O1N1O1O2O0O100O2N000000O3N1N2O2M3M2M3O101O1N2O2N001O0010000N2O100N2O1N3N3M2M3N2N2N1O1O1O1N2N3L4M2N3L3O1N3L5L3L4L5Lc\\\\V3\"}], [{\"size\": [848, 480], \"counts\": \"Xkg67Wj03M3M3M3N2M2N3M2N2O2N1O11O001O01O01O001O001O01O01O0000100O1O0VO_VOe0gi0O01O00001O00010O0001O1O1O1O1O1O3M1O1O1O1O001N2O0O101NmhT4\"}, {\"size\": [848, 480], \"counts\": \"jSV55Yj03M3N2N2N1N3L4L3M4M3L4L3N3M3M2QKfNe@^1T?jNh@X1S?nNj@U1m>TOQAm0h>[OUAh0e>]OYAe0a>C\\\\A>_>H^A;Z>3^ANZ>a0]AA^>k0ZAWO_>T1ZAmN`>`1XAbNa>i1YAYNa>P2[ARNa>T2ZAnMc>X2XAoLUNgNb`0_4TAiL_NeN\\\\`0e4RAgLdNbNY`0j4PAdLkN`NR`0P5QA^LRO]Nn?W5n@]Lo?f3n_OZLR`0i3l_OWLR`0m3k_OTLT`0P4g_ORLX`0Q4e_OoK[`0T4a_OnK]`0V4^_OmKb`0U4[_OkKe`0X4X_OiKh`0Y4U_OhKj`0\\\\4S_OdKm`0^4Q_OaKPa0a4o^O^KQa0d4m^O\\\\KSa0g4j^OXKWa0k4e^OUK]a0m61N2O2O0O1000YA[Ge;d8WDeGd;[8[DhGc;W8]DlGb;S8\\\\DQHb;n7^DUHa;j7^DXHa;h7_DZH`;d7`D^H_;b7`D`H`;_7^DdHa;[7_DhH`;W7UDUIj;j6UDYIk;e6UD]Ik;b6TD`Il;^6TDdIk;\\\\6SDgIm;X6RDkIl;U6RDnIm;R6RDPJl;R6RDPJn;o5QDSJo;l5oCWJP<j5lC[JS<e5jC^JV<b5hC`JX<b5cCaJ\\\\<c5^CaJa<l5nBXJQ=j5lBXJS=k5hBaI_OWNh=Z8eBaIDUN^<KXD`8C_IJWNU<6WDU8E`I2TNo;=WDe:LnDl;a0TD`:3nDg;f0TD[:6PEd;j0QDU:=QE`;d<`D\\\\C_;e<aD\\\\C];e<cD[C[;f<fDZCY;g<hDYCU;h<nDVCQ;j<RETCm:l<UESCj:g5nD;:mIg:d5ZE82QJe:e5hELE^Jc:c5kENC`Ja:`5oENBaJ_:^5TFN_ObJ]:^5ZFLZOfJ\\\\:\\\\5_FIXOiJZ:\\\\5bFFXOmJV:\\\\5eFBXOQKT:\\\\5hF]OWOWKQ:\\\\5jFWOZO\\\\Kl9]5lFPOX;R1iDfN\\\\;]1fDZN^;i1bDRN`;o1bDkMa;W2^DfMd;\\\\2\\\\D_Mg;b2[DXMh;i2ZDRMh;o2[DjLh;V3\\\\DcLh;]3YD^Lj;b3ZDVLj;k3XDoKk;Q4YDiKj;V4ZDdKh;\\\\4[D_Kh;T1g@f0d3oMh;X1j@f0b3jMi;]1i@g0b3dMj;c1f@h0f3[Mi;l1b@h0Td0UOn[Oj0Rd0UOP\\\\Oj0Qd0UOR\\\\Oh0oc0ROY\\\\Ok0gc0QO_\\\\Om0bc0POc\\\\Om0^c0POf\\\\On0[c0oNi\\\\O1aNWOgd0f0l\\\\OO_NZOfd0e0n\\\\OO\\\\N\\\\Ohd0b0n\\\\O1ZN]Ojd0<T]O3SN@kd06[]O6kMDld00`]O7fMHmd0Ie]O<_MJ[h03eWOM^h00cWOO_h0NbWO3_h0KbWO4_h0K`WO6bh0H^WO8eh0C]WO=[i001O00010O001OO1001O0000001O001O00001O001O001O001O00001O0000001O01O00000000000000000000001O000000001O00001O00001O0O100000001O0000001O00000O2O1O000010O0001O010O01O0O2O1O2M3M4GTbh0\"}, {\"size\": [848, 480], \"counts\": \"`Po31^j010000O2M2O1O2N2M2M4M2M2M4J5H8N1M3K6L4H8K4_N^NRZOe1ke0hNdYO^1]f0kNXYOS1mf0T130O1L3O1011L3N3N3M2N3O010002N=kXOaM_e0j3N001O0001N2N2N3M2O1O3L3N1@a0iN[1ROWXOdNSh0V1PXOcNXh0Y1a0N3M2N5K5J7I6K7FYSg6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"mQ]7g0di0:H6K5J5M4L2L4N3L3N3L3M3N2N2N1O1O1O1O1O0010O00001O010N1104L0O10O1O11O00N2O101N101N101N2O000O2O001O1N3O1N1O1O2N2N1O1O2O1N3M2N2N2N2N1O1O4L4L4K4M3L3N4L3L5K5IWjo2\"}], [{\"size\": [848, 480], \"counts\": \"_jQ7>ni06K4L3N3N1O20O001O001O001O00000O10000000001O0O100000O1O100O10000O10000O10O10001O000O2O001O000O2O1O00001N101O0O1O1O1O10000O2N2Ngef3\"}, {\"size\": [848, 480], \"counts\": \"joh5<ji0<H7I7K4L4H9J5L5J7H9[^OdMk:Q3aDUMX;b3SDbLg;h3oC]Lm;n3iCVLR<Q4hCRLS<U4^CYL\\\\<m3^CXL]<n3]CWL^<o3^CTL_<P4^CQL_<T4\\\\CPLa<T4ZCoKe<U4UCoKi<T4QCPLm<U4nBnKP=V4jBmKU=W4fBlKY=W4aBlK_=W4jA]LV>f3gA[LX>i3cAXL]>n3\\\\ASLe>l7O01O001000O10O11O[Om@mER?Q:QAoEo>o9SAQFm>m9UASFk>k9WAVFh>f9\\\\AZFd>c9_A^F=Dj<j9nBbF2Mm<\\\\9WCfFF7o<o8`CjF]O=Q=f8eCmFUOc0U=]8kCoFhNk0\\\\=T8PD`HP<^7RDbHn;Z7UDhHj;T7ZDlHf;Q7[DQIe;m6ZDVIf;h6ZDZIe;h6WDZIj;h6QD[Io;g6kC]IU<f6cC_I]<c6YCdIh<^6TCdIl<_6nBdIR=^6gBfIn;]McD[<X;PDbDP<[;WD`Di;_;[D_De;_;`D]Da;b;eDWD];h;f1O1O0O2O1O100O1O10000O100000O1kGgD2LQJ];m5kDLKVJZ;n5oDGIZJW;P6TE@H_JT;Q6XEZOFfJR;o5\\\\EUODlJo:Q6_EoNCoJo:S6`EhNETKk:T6dE_NF]Kf:i4aDiKV1b3OkKZ:h4gDhKS1Y34WLR:g4kDfKS1U34]Ln9g4oDeKT1n22fLk9f4QEeKW1f21nLh9g4QEeKZ1]22VMc9g4SEeK^1T20_M`9h4SEeKa1l10eM^9j4PEeKe1f11hM\\\\9m4oDdKh1Y18SNS9P5nDdKk1P1\\\\<\\\\3lAaKm1k0[<a3kAdKo1a0Z<j3iAdKT25Y<V4eAeK^b0Y4d]OfK]b0X4d]OiK[b0b1d\\\\O4S1YNYb0a1h\\\\O3Q1\\\\NWb0_1k\\\\O1Q1_NUb0]1m\\\\O0R1cNQb0Z1P]O0R1eNoa0W1T]O1n0iNna0S1W]O1n0kNma0P1Y]O0n0POja0l0\\\\]O0m0SOha0i0a]ONk0XOea0g0h]OGh0B`a0e0m]O]Ok0OYa0>U^OTOl0?Qa05ZAKQ?]O\\\\Ac0Yd0O010O010O01O010000O10000O1000O010O100O100O010O1O1O1O010O1O100O100O01O01O000001O00001N2O002N1O1O1N1O2N3M3JoRl1\"}, {\"size\": [848, 480], \"counts\": \"Pko31^j0100O1O1O1N2O0O3M3L3N2M3I7F9N2L3K7J5I7K5^N^NRZOf1ke0eNfYO_1]f0iNWYOT1Pg0S12000O1ON30ON2O102N2N2O200O05bYOXMkd0`4G1O0O20O00001N1O2N2N2O1O1O1bN_ZObMme0T2[1WObXO]Nag0BcXOc11bNcg0IbXO_1dh0L2N3M5K4K8H6J9EXSg6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"TWa7g0hi05In0PO7L3M002N2O0O101N2O1O100N201N1O100O1O101N1000000O101OO1O10O10O1O10000O2O0O2N101O1N101N1O1O2N1N4J5M4M3L4L4K5K7J:Dc][3\"}], [{\"size\": [848, 480], \"counts\": \"gbS77Uj07J3M4L4N1001O001O0001O0000O1000000000O100O10O01O1O1O001O1O100O100O010O100O1000O100O10001N101O0O100O1O2O000O1O100O1O2N1O1O1N2N3O00001N2N\\\\i`3\"}, {\"size\": [848, 480], \"counts\": \"i[Q6?ji0:E:F9I7K5H9Hg0ZO?[]OWMl<f3mAgLo=a3fAgLU>_3eAfLU>a3eAcLW>b3eAaLV>e3cAaLW>f3cA_Lh=W4QBoKl=T4oAQLo=R4jATLT>n3aA]L]>f3\\\\A`Lc>b3XAaLh>b3o@eLP?_3]@QMc?n6O010O100000O100O1O100O10001O0O1OjNlESB[9XOmF`>3RBl8CPG:B28R<`0mCa8JSG00L4X<<PDZ8OUIn;fNPDQ87XIg;mNnCh7?ZIb;SOkC^7i0^I[;YOeCY7S1^IW;Z8aDmG];U8\\\\DRHc;Q8PDZHn;U;N2O1O1O1O10O0100O1000000O01001N11N10000O10001O00O1000O100O101O000gNUDlCl;g;cDVD];d;kD[DT;b;PE]DS;n5VDZNl0gKo:j5eDPN?VLn:g5eEoL@ZMm:d5SF_LTOlMo:`5YFTLlN\\\\Nm:^5`F\\\\KTOUO^:W1]CVN1h3`3^L\\\\O<h9U1hCn1_6lLi5R1oCo1Y6nLi5o0TDP2T6PMi5m0XD9TOHl6POj5k0ZD8B@Z6[Ol5e0bD;_O@U6\\\\OP6HoB?k1e0UOFW6UOk8j0RA0bf0]OkYOa0Sh0O001O001O00001O00001O0001O000001O0000000O11O01O0000000O1000000000000000001O000000000000O1000O100000000000000000000000000001O0O100000001O0O1000001O0000001O0000000000000000000000000000001O01O0O100O2O0O2N1O1O2M3M3M4Llal0\"}, {\"size\": [848, 480], \"counts\": \"okj33]j000000O2M200O10000O1O1N2N3M1O2O1M3M2K4J6N3L2M5K4J5M4^NgNlYO[1Pf0SO_YOT1af0TOUYOl0mf0Y120N101O1O01N3N2N2N3L31000005kYORM^d0W3mZOZMnd0U4O1O000001N1N3N2N3M2O1O2M4dMPZOgN`0Jde0[1PZO`Ncg0^1`XO[Nng0[1i0J3M2O2M5J5L7H6I:DYSg6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"^V]76Sj0`0D8H7J5K5K5K6K4L3M6J4L4L1O0O201N2O1N2O1ON1L51N0100N2O1O2N1O100O101O3M0O2O2N3L4M2N1N3N1K6F:L3M4M3L4L7FeWe3\"}], [{\"size\": [848, 480], \"counts\": \"ZSQ74Xj08H5L4N1O2O001O0001O000000000001O0000O10O10000O100O100O010O100O1000000O100O1O0100000000O101O001N10001N1000O0100O1O1O1O1O1O101N2N102L3NUSd3\"}, {\"size\": [848, 480], \"counts\": \"gQT656Oei0d0H7J5K4L4K6I6I7I7I7J6G9J6J6L3K6L4L4L3L5L4L3N3B>fNQLg[O[4Rd0T1K6E:D=\\\\Oc0[Oe0E;J7K5J5I7`@kFc=X9cAfGX>\\\\8`AmG^>Y7ZAkGMW1g>f6jAoIT>S6fARJY>g5\\\\AhG1k2b>j8ZNaD[D`;`;hD[DY;a;mD\\\\DT;a;REZDP;d;TEYDm:f;VEWDk:g;YEVDh:i;\\\\ESDe:l;^EQDc:n;`EoCa:P<cEkC_:T<o10000O10000O01000O1000000000000000000000oNkCfCV<Q;mCSDP1k0S;R:UFmEk9k9_FSFa9i9cFWF^9e9fFZFZ9b9kF]FU9[9TGdFl8S9]GmFc8l8dGTG]8d8jG\\\\GV8]8QHcGP8U8WHjGj7P8\\\\HoGf7f1fCf3j4bJa7d1lCa3i4jJ]7c1lC\\\\3m4PKY7c1kCV3T5SKS7f1kCn2\\\\5XKk6j1jCh2`b0WMa]Of2cb0XM_]Of2bb0YM`]Oe2bb0XMa]Oe2bb0XM`]Of2eb0TM_]Of2jb0RM[]Om0kd0iNZ[OT1ld0ZNb[Oe1ff0N2O1O2N1O2N002O0O1O010O2O0O2N1O1O2N1O1O1N2N2M3N2N101O2N10001O1OO10O01O1O001N110O00001O0000000O10O1O010O001O001O001N10O10O011O0O1001O01O00001O0O1N1100O000O1000101O00000O0100O010O11N1O1M2K411000O1001O0010O0001N110OO100N201O1N2O1N2O001N3N1N3O1N2N3L5JXn<\"}, {\"size\": [848, 480], \"counts\": \"Pbg31]j05L100O101O000O100O100O100O1M2E<L3N2N3N1O1N2L2M3N2L6K5^NaNQZOa1ke0lNiYOX1Vf0nNbYOT1]f0UOSYOS1lf0V13K4M3M110010000O1N3O11O012M6K;E]1dN1N000000O100O2N2N2N3F9C=QOo0J9TO`XO]Njg0Z1P1F3M3M5K4L5J8G8Iibi6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"lRQ8f0ei0g0UOc0B7J4K4M4M2O1N3N001O10O10O10O10O010O01O2M2O2M3N2K4K5N3O0O2O1O2N1O100O1O1O2O1N1O2OO02N100O2N1O1N2N2N2L4N2N3M2N2L6J4I7Lcli2\"}], [{\"size\": [848, 480], \"counts\": \"fdR7:Rj06L3N2M3M3O1O0O101N101O1N10001O010O010000O100O01000000O100O1O10O01O1O1O1O1N2O1O001O010f0YO3N1N3N1N1O1O2MYho3\"}, {\"size\": [848, 480], \"counts\": \"UX\\\\67Wj05K3M3M2N3M2K6F9D<L5L3N2M4M3M3M3L3M4M2N3L3N3M2M3N2\\\\LSMb_OP3T`0_Me_Od2n?kMm_OV2o?SNk_Oo1Q`0\\\\Ng_Oe1kMgLia0Q2R@Z1mMoLja0S2Q@3YNPNKMda0X2R@JnN`MB?Xa0^2f_OUMoNa2o0mMo?k2h_OI<\\\\MX>DXAQ4ITOg0YMj=k8WBVGd=m8\\\\BTGa=n8_BTG^=l8cBVGZ=j8fBYGW=T8[CPHb<n7_CUH`<j7_CYH`<f7_C]H`<c7\\\\CcHb<\\\\7oBVIP=i6hBaIV=_6bBkI\\\\=T6aBRJ^=m5]BZJ`=g5\\\\B_Jb=c5XBdJe=U9^O`CoBd<d<YCXC[=f<9N2N2N2N2N2L3E<J5M4L3N3M3N2M3N1NgNmDWB;?f:Z=gEdBW:\\\\=lEbBS:^=PF`BP:^=TF_Bl9a=XFZBj9d=b1M3M3L4N2N2M2M4L4M3M3M3M3L4N2N2M3N2N2N2L4N3K4L4M3M3N2M4oKdAiK_>f3jB]K[=\\\\4_CmJf<m4nC`JV<S5k4UOj0L5K4K6N2`MYZO4ie0H^ZO4de0H`ZO6ae0HaZO7ae0DcZO;`e0_OeZO?]e0\\\\OgZOc0Ze0XOjZOh0Ye0ROlZOl0We0dNX[OY1Qg0O1O2M2O2M3M1O1O2M2O2N1O2O1N2O0010O2N10N2O1O001O010O010000O001O00000O100010O000000001O0O1O10O000010O1O00100O1N101O00000O101O00001O0001O1O001O00001O00O1O101O00010O000000000O20000O000O01O1000010OO101OO2M2010O00001O1OkI\"}, {\"size\": [848, 480], \"counts\": \"`S`31^j05K1O1000000O2N1O1O100O1N110N2N2N2O1N1N3M2N3K5L2M3K4N3K5L4]NcNoYOc1ne0eNlYO\\\\1Tf0jNdYOW1]f0SOUYOl0of0W1O2O3O0010O2N1O2N3L4O1N1101O4Le0gYOVLbd0n4N1O01O0O1O1O2N3M3N2M4cMQZO2Qf0KSZObNk0FYe0f1mYO^Neg0a1\\\\XO[Nng0^1g0J4L2N3N3L3M7H7I6I[\\\\o6\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"cQ_8>gi0i0^O7I;D9I5L5J5K4N3M1N2O2M2O100O1O10000O10O100O101M2O1O2N1O1M3L5G8N2L4O2O001O1O01000N2O1O3L3N1N2O2N1N101N2N1N2O1N3N1O2N2O1N2O0O2M2N3M3L4L4K5Khkh0OcSa0\"}], [{\"size\": [848, 480], \"counts\": \"nXb71[j05L5M2L5L4M2O1N2O1O1N2N3M101O0O2O1O1O0O2O0O2O1O1O10O01000000O11O2N1O1N3M2O4K4L7I7I5K3M3Ldme3\"}, {\"size\": [848, 480], \"counts\": \"gbl6:Pj07I7I7J6E=D?A<B`0B=^Oc0_O?@b0G:G6K3M3M2N2O1V^O_Jd>b5XAdJd>^5ZAfJc>\\\\5[AfJc>[5\\\\AgJb>Y5_AhJ`>W5`AkJ^>V5`AmJ^>T5aAoJ\\\\>R5bAQK]>n4cATK[>m4cAVK\\\\>j4aA[K\\\\>f4aA^K^>b4^AcK`>^4]AfKa>[4^AgKa>Z4\\\\AjKa>X4]AjKb>W4[AlKc>V4[AkKe>V4YAkKg>U4XAmKf>U4XAlKh>T4WAmKi>T4UAmKj>T4UAmKk>T4SAmKl>T4RAoKm>R4QAoKn>S4o@oKQ?Q4n@PLQ?R4l@QLR?P4l@RLS?P4j@SLR?Q4k@RLm>U4QAmK[>h4bA[KU>m4iAVKQ>P5kATKP>Q5mARKo=R5nAQKn=S5mARKP>i8N3K4L4OkNdBVE[=j:jBREV=m:SCkDm<T;\\\\CcDd<];X1O1O2O001OO010000O10O010001N100O010O1O101SKUARNl>Q1VBiNk=P1_BlNb=l0hBQOZ=j0kBTOV=k0lBSOU=k0oBROS=l0oBROR=l0RCQOo<m0TCQOn<n0TCnNn<Q1UClNm<S1WChNk<X1WCdNk<[1WCbNk<]1WC`Nl<^1UC`Nm<`1SC^No<a1RC]NP=b1QC\\\\NQ=c1PCZNS=f1mBXNU=h1jBWNY=h1eBYN]=QOa_Oo0Q3O`=mNe_OS1k2Nc=iNg_OY1f2Li=YNo_Oj1Z2JZ?7f@G\\\\?8e@F_?8a@Eo?NR@OQ`00o_ONS`04k_OJW`06i_OG[`07f_OG]`07d_OG^`09c_OC_`0>`_OAb`0>__O_Od`0`0]_O^Oe`0a0\\\\_O\\\\Of`0c0\\\\_OZOg`0e0Z_OXOj`0e0X_OYOj`0e0X_OXOk`0f0X_OVOk`0g0Y_OUOi`0j0Z_OQOj`0m0Y_OoNi`0o0^4N3K5L3O001O001O2N100O01005J01O1O01O000001O01O01O000001O00001O000001O01O000000001N1001O00O100O100000000000001O000000001O001O001O0000000000000000]H\"}, {\"size\": [848, 480], \"counts\": \"`_Y35Zj0101O00000000000000000000000O1D<G314N3L3M4M3L3J7F9L2`N^NSZOd1ke0fNkYO]1Uf0hNcYOZ1_f0mNSYOX1nf0S1O0NO112O2O2N2N102N1OXZOSMQd0m2m[OVMQd0k2l[OXMTd0h2i[O\\\\MVd0g2e[O\\\\MZd0m2Y[OXMfd0Y401O00O2O002N1O2L6K2M4J5aNXZOYMef0a2i0XOVXOeNog0V1SXOhNRh0T1nWOlNUh0P1mWOkNZh0P1g0L4L5K5J6J6Kg_X7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"YQZ8=ni09G;G6J5L5K4L6J4M2M3N2N3L2O2N2N2N1O2N1O101N1O1O010O010O10O011N100O100O2N1O1O2M3M2O2M2N3N2N2M4L3N101N10001O0O2O1O1O001O100O002N3M4L1O1O1O1O1O001O1O001O00005J3M2N2M3M2N2O2N1O3L3MShi1\"}], [{\"size\": [848, 480], \"counts\": \"lcS85Xj04O2N2N2N101N01000O1O100O1O1O1O1O1O001O2N1O1N200O2N1O100O100O1000O105J2N2N1XObVO=ii0O2M101FlUO5iQW3\"}, {\"size\": [848, 480], \"counts\": \"Toj6<Pj05J5K6J5L4J7J5D<I8I6J6K5kNiMiYO`2Rf0R1M4L5K4M3N2M3N1O2M2O2N2N1O0O2O1O1O1O1N2O001O1O1O1N2O1N2O1O1N201N1O1O1O3\\\\[O_JSd0Q6N1O2M2O1O1O1N3M2\\\\Oc0M4L4L4M3M2N3N2N2N2N3L3N2N2N2N2N2O2N1N2O1O1O001N101NQOc^OmH]a0o6j^OoHUa0P7n^OnHQa0S7P_OlHPa0S7R_OlHn`0T7T_OiHl`0X7V_OeHk`0Z7W_O]H^OI^a0j7T1O000000001O0O10001N101N1fJZ]Oj2fb0TM]]Oj2eb0UM\\\\]Oi2fb0UM[]Ok2fb0SM[]OSNK\\\\4lb0^M\\\\]ORN7S4_b0dM^^OV2ca0eMe^OV2]a0eMi^OYOSNT2Tc0`Nm^OZ2Ua0_MR_O_2Pa0]MT_Oa2m`0\\\\MW_OC^M\\\\2]c0mMZ_OEZM]2]c0dMe_OLnL_2Vg0]MkXOb2Zg0YMhXOe2cg0N2O2M2N2N3N2N2gNjWO4Yh0IgWO9Yh0EgWO=Yh0R1L2M1O2M2\\\\XOdMPg0`2iXOcMXg0j20O10001N1gNbXO@_g0=eXO@]g0=fXOB[g0<hXOAYg0>iXO@Yg0>iXO@Wg0`0kXO^OVg0a0mXO\\\\OTg0c0oXOYOTg0e0PYOVORg0j0PYOROTg0k0oXOQOTg0m0oXOmNVg0P1V1O1O1O1N2O2N1N201N2N3K5M4JQmT1\"}, {\"size\": [848, 480], \"counts\": \"TRm21[j05O00000O101O00001N100O100O10O01O1N2K5M2K6M2I6G9K4N3L4N3_N\\\\NUZOf1ee0fNSZOZ1ke0QOhYOS1Xf0^13N2O2N1M40O1001N1O3M2O10010O04lYOZMXd0b4M1O000010O0O101N2N2N3M3L4cMSZOOSf0NnYOJ\\\\f03fYOjNag0P1bXOfNmg0Q1n0K4L4L3M4L5K6I6JXXc7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"gb\\\\8d0ei0<G6J6I7L4K4L4L4N2N2M3M3O1N2N2N3N1O3M2N2OO1N1O1O1N2O2O0O2O001O1O1O1O2N101N002N1O2N2N3M4M1N2N2N3M5J3M;E:G3L2O2M3M2O5JfP`2\"}], [{\"size\": [848, 480], \"counts\": \"b\\\\b:6Xj04N1O00000000000O10000O1O1O1N2N101N2O1N101N200O00100O1O11OO010001N010O2O000O0100000O1O1O2O0O1O1O3N3K3NoQ`0\"}, {\"size\": [848, 480], \"counts\": \"om\\\\66Wj04N2N2N2O0O2O0O2O1mWOBQf0`0jYOGSf0:kYOHTf09jYOITf08kYOJTf07hYOMVf04gYO0Wf01eYO4Yf0NaYO8]f0I_YO<_f0F[YO`0df0@WYOe0hf0]ORYOi0lf0_1O2L6K5JY1hN4L2N2M2O2NO1@Q[OZKVe0U4lZOlKbe0U4]ZOjKce0W4\\\\ZOjKde0a40O100O1O11O1O1O000000001O001O0000002N1O1O1O1OO10001N10O100001O0000O0[Of0L4O1N2N1O2O1O1O1O1O10O01O10O10O10O010O10O1000O011N1O1O2O0O2N101N2N101N1O100O101N2SLT[OS2md0kMZ[OP2gd0lMa[On1`d0PNf[Ok1\\\\d0RNP\\\\Od1Rd0WNU\\\\Of1lc0VNW\\\\Oi1kc0SNZ\\\\Ol1fc0nM`\\\\OT2_c0fMe\\\\O]2[c0\\\\Mi\\\\Of2`e001N101N2O0O2N1N2O2M1O2N1M3L4_Oa0O1O1O110O01O1O1O2N2O2M2N3M3N1N3N1N2N1O2O1N2N6J1O1O2N00001O01O000O110O00001O0O2O001N101O001O0O2mMYYO;gf0E[YO9ef0G[YO9ff0F[YO8ff0HZYO8ff0HZYO8ff0HZYO7hf0HXYO8hf0HXYO7if0IWYO7if0JVYO6kf0IUYO6lf0JTYO6lf0KSYO5mf0KSYO5mf0KSYO5nf0KPYO5Qg0LnXO4Sg0LlXO4Tg0LlXO3Ug0NiXO3Wg0MiXO2Xg0OgXO1Zg0NfXO0\\\\g01dXOL^g04_1001O010O000010O000001O0001O01O1O101N2N1O1`A\"}, {\"size\": [848, 480], \"counts\": \"_d`24[j02O1O001O0O10000O1000000O1O1M3L4N2O1O1O1N1M4J5M3N1M4K5K5M3J4G5PO[N^YOe1af0kNPYOW1Pg0T100000ON2M32L4M3O00O11N110000oYO^MUd0c2g[OdMVd0]2h[OdMXd0P3P[OTMod0W40000010O001O001N3M2L8]MUZO0Wf0JkYOlNcg0n0_XOjNlg0P1VXOlNQh0P1RXOkNSh0R1g0N3M4K5L5K6J5K7ITVm7\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"hWZ8<Rj03G;F9K6K3L5J6L3M2N3M3M3N1O2O1N1O1O3M2N100O01O2M3O1O1N2N2O1O1JfWOTN\\\\h0e1kWOYNVh0d1<O2J8M2M3M4L3N3L6K6J3M3L4JkZl2\"}], [{\"size\": [848, 480], \"counts\": \"Rel;:Uj02M4N0N3O5J6J3N000O10O10000O01O01000O01Oj^O\"}, {\"size\": [848, 480], \"counts\": \"Ub_61Yj0:K3L4M2O1N3M2RXOIae0:PYOL34hf0`2N2M3M3M3L3N3M2N3M2O2OO01O1O10O01O001O0000001O00001O00000O2N1N3[Od0L5N1N2N2O100O1O2O000O1O10000O10000O10001OO10O10000000O100O101O0O100O101O0O2N1O2TLR[OT2nd0iMV[OU2ld0hMV[OW2ld0fMW[OY2jd0dMY[OZ2id0cMZ[O[2hd0`M][O_2dd0]M_[Ob2ed0XM^[Oh2ed0RM^[On2Rf0O010O1O010O010O10O010O01O10O01O010O1O1kMlXOm0Ug0ROnXOl0Qg0UOQYOh0Pg0WOSYOf0mf0ZOTYOe0mf0[OSYOe0lf0[OUYOd0lf0[OVYOd0if0]OXYOa0if0^OXYOa0hf0@YYO>hf0BYYO<gf0DZYO;gf0EYYO;ff0E[YO:ff0EZYO;ff0FZYO9gf0FZYO9ff0G[YO9ef0G[YO8ef0H[YO9ef0G[YO8ef0H\\\\YO8cf0I]YO7bf0I_YO6af0J`YO5_f0LbYO4]f0McYO2]f0NdYO2he0a0YZO_Oee0c0ZZO]Ofe0d0ZZO\\\\Ode0e0]ZOZOce0f0^ZOZObe0f0^ZOYOce0f0^ZOZOae0f0`ZOZOae0d0`ZO[Oae0d0`ZO\\\\O`e0d0`ZO\\\\Obe0a0^ZO@fe0;[ZODje08VZOHje07WZOHke07UZOIle05UZOJne04RZOLbf0_O_YOa0gf0WO[YOh0Vh01000O10O0100O010O01000000O0N3O001O001O010O010O001O01O010O10O10O1000O01O100O1O010O10O10O001O1O001O1O100O10O000O101O01O01O010O0O101O01O10O01O1Oi^O\"}, {\"size\": [848, 480], \"counts\": \"\\\\o^22\\\\j05L1O1O1000000O1N3N1O1O1N2O1M3I7K4L4L3J8J5K5J50OfNXNoYOe1oe0jNcYOZ1^f0nNnXO^1Rg0o00001OOON002O021O101N3N2N110002]ZOlLfc0Y3U\\\\OgLlc0g3e[OYL\\\\d0l3^[OTLbd0n40O1000O01N2N2O2M4L4E>cMgYOgNmg0T1UXOhNQh0T1RXOgNSh0V1RXOcNSh0Z1d0N1M4M3L8G7K4M2N3KhoR8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Udo7b0ii07I7K5J6L3M3M2K6M3N1N2O2M21O2N010O0100O01O000O2O1O0O2O001M4M2O2M3N2N3M3L6L3K3M2N2N1N3M2DdcX3\"}], [{\"size\": [848, 480], \"counts\": \"hW`;2]j03M3L4M5K5K5K100O1O1N1N3O00001O00O11O00O110O1O1O1O010O2N1O3L3N2N3L5K5Jg^O\"}, {\"size\": [848, 480], \"counts\": \"fQj57Vj05M2N1O2N1O1O1O1O1O100O100bWO_Olf0b0PYOGkf09PYO0kf02RYO2lf0NQYO7mf0IQYO:mf0GPYO=of0CnXO`0Qg0BkXOb0Tg0^OjXOe0Tg0\\\\OiXOh0Ug0YOfXOm0Yg0V1N101N1O2N2N1O2N2N2N2N2N2M3N1O2O0O2O0O2O0O2N101O001O001O00001O1O001O0001O00000000SOSLV[On3fd0ZLV[Of3gd0cLP[O`3nd0R1O1N2O1O010O0010O0100O10O100O010000000O1O100O1O100O100aLP[O]1Qe0^NW[O_1id0`NZ[O]1hd0aNZ[O^1fd0bN[[O\\\\1fd0cN\\\\[O\\\\1dd0dN][OZ1ed0dN\\\\[O[1ed0eN[[O[1ed0dN\\\\[O[1fd0dNY[O]1gd0bNZ[O]1hd0`NY[Oa1hd0\\\\NZ[Oc1gd0[N[[Oe1fd0WN\\\\[Oi1gd0SN[[Ol1gd0PN[[OP2hd0jM\\\\[OV2gd0cM][O]2gd0YM_[Og2Uf00O101O000O10001N1O2O0O2O0O1000PNjXOf0Ug0ZOmXOe0Sg0ZOnXOf0Qg0[OnXOf0Rg0ZOmXOg0Sg0WOlXOl0Sg0TOPYOk0of0TORYOl0mf0TOUYOk0kf0SOWYOm0hf0SOYYOm0ff0TOZYOl0ff0SO[YOm0df0SO\\\\YO9ITOjf0c0^YO8IVOhf0b0_YO7KVOdf0d0bYO5KWOne0FWZOn015JWOie0]1]ZO[OKYOee0]1aZOYOLYObe0_1bZOXOLYObe0^1dZOWOK[O`e0^1fZOWOKZO_e0^1gZOWOK[O^e0^1hZOVOI]O`e0[1hZOXOH]Obe0X1gZOZOI]Obe0V1fZO]OH^Oce0R1fZO_OH_Oce0P1gZO@G_Oce0o0gZOBF_Oce0n0hZOCE_Ode0m0gZOCG_Ode0l0eZOEG@fe0g0dZOIF@ie0d0aZOLF@Rf0:YZO6F_OUf07UZO:F_OWf04TZO<FAVf02TZO=FAWf00TZO>FCWf0LSZOb0FBXf0JSZOd0EC\\\\f0BQZOj0DDbg0<^XOE`g0;aXOE_g0;aXOE_g0;aXOE^g0;cXOE]g0;cXOE]g0;cXOF[g0:fXOFZg0:fXOFZg0:eXOG[g09eXOHYg09gXOGYg08hXOHWg09iXOGWg08jXOHVg08jXOHUg08lXOHSg09mXOGSg08nXOHQg09oXOHPg08PYOHof09QYOGof08RYOHmf09TYOFlf09UYOGjf0:VYOFjf09XYOFgf0;YYOEgf0:ZYOFef0;\\\\YODdf0;]YOEcf0;]YOEcf0:_YOE`f0<aYOB`f0=bYOA^f0?dYO_O]f0a0eYO\\\\O[f0d0i1O010O010O001O01O000O1010O0000O101N1O2O00001O001O0O1001N101O1O1O100O2N1O2N2N2M3M5K3Ni^O\"}, {\"size\": [848, 480], \"counts\": \"kUY22]j02N2O1N100O1O1O1O1O1O1O2N1O1M3N2L4M3M3L4M2L5J4I4K511O2dNYNPZOh1le0cNlYO]1Tf0kNbYOW1_f0UOSYOm0mf0Y1000O01OO20010N3N2N\\\\ZOQMmc0m2R\\\\OXMlc0g2R\\\\O\\\\Mnc0d2Q\\\\O]Mnc0d2P\\\\O^MPd0e2l[O\\\\MTd0Q3Z[OUMed0[40000000O2O0O2O3L5J4K6G8K5jMdYOnN>^OZf0d1[YOhNeg0T1`XOaNmg0X1h0N3K3N3M3M5K6J;DknW8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"kPi7<oi09J3M4K4M2M4M2O0O3N1N2N2O2N1O001O1O1N2O2N2N3L3N2N1O100N201O001O0O0100N2N2O102M2N6J5jN]WO7dh0CgWO6Zh0IoWONWh0LkWO0Yh0Odc]3\"}], [{\"size\": [848, 480], \"counts\": \"hUh:6Zj02N1O0O1O2O00000O1N1O2N2N2N1N3N1N3O0010O010O10O0100O100O100O10O10O10O01O010O100O100O1O1O2N2M4L6I_h<\"}, {\"size\": [848, 480], \"counts\": \"Q]l59Tj07K4K4M2N2O1N101N100O1O2N101N1O^OlVOJTi05oVOIPi07RWOHnh07TWOGlh0:VWOCkh0>VWO_Ojh0b0b0000O101O0gWO0Qf02cYO?Wf0A]YOQ1\\\\f0QO_YO_1Uf0bNhYOf1Rf0ZNlYOi1Rf0YNkYOk1Sf0UNkYOn1Tf0SNjYOm1Vf0UNfYOm1Zf0S12J5001O100O2O0O1O100O2O1N101N101O0O1O100O1000001N1001O0001O00000O101OO10000000001O0000lNoKi[OQ4Sd0VLi[Ok3Td0[Lh[Of3Vd0`Le[Oa3Zd0cLa[O_3]d0[1O1O001O1O100O1O10O010O100O10000O010O2O0O100O2O0O1O1O1O1O2O0O1O2N1O1ZLS[Oh1od0VNR[Oi1Pe0TNS[Ok1md0TNT[Ok1nd0RNU[Ol1nd0oMV[Oo1ld0lM\\\\[Oo1fd0mM^[OQ2dd0kM`[OT2bd0hM`[OW2bd0cMd[O\\\\2`d0YMg[Of2Sf0N2O1N3M2N2O2M2N4L5J7J3L6K4L3M2N2N1O1O1O010O010O01O10000O101O0O3N1O1N2O2N1O100O101O000O10O02O0O10000000010O1O2N2O0O0001N1O2N1O2N1O2N3M2N1N2O000O100O00100O10O0100O0010O00100O10O10OVOoVO6Ri0JoVO5Qi0KoVO4Ri0KPWO4Pi0LPWO3Pi0NPWO2Pi0MQWO2Pi0NPWO1Qi0OoVO0Ri0OoVO1Qi0OoVO0Ri0OoVO1Qi0OoVO0Ri0OoVO0Ri0OPWOOQi01oVOMSi03e000O10000000O11O000O101N2N3M2NTA\"}, {\"size\": [848, 480], \"counts\": \"WfV26Yj02N100O1001N0100O1O2M3H7M3O1N2N2O1O1O00O1N02L4K4M4F9H7cNVNUZOl1ge0cNmYO_1Rf0hNeYOZ1\\\\f0kN\\\\YOX1cf0X12NO1OO301N3O001N3O0O1OYZOSMnc0n2n[OYMoc0g2o[O\\\\Moc0e2o[O^MPd0d2m[O]MSd0T3Z[OoLed0^40000001O0O2N2N3M4K6J7F7XNQZOgNTf0U1`ZOVNee0Z1]YOaNVh0\\\\1`0N4M5L3L4L5K4L6J7I6H^iX8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"kab8e0gi06K5J6K4M3N1N2L5L4M2N2N2O1O1N1O2O2M2O1O10001O0001O001O1O100NUXOkM]g0U2`0O2M3_OaWOkNch0Q1eWOgN_h0T1c0L7J3L3N3M2M3N2M7EZkd2\"}], [{\"size\": [848, 480], \"counts\": \"nek86Yj03L4M2O1N1O2O1N2O2M1O2N3M2O2M2N2O100000O010O100O1O2SOnVO8li0H2Okhi2\"}, {\"size\": [848, 480], \"counts\": \"kcf55Yj03M2N2N101N10O1000O10000010O00O2M2M4K4L5K4M3N2N3M2M3O0ON3L4O2N1O3M101O000O2O1O1O1O1O1O1O00100O100O0100N2O101O1O1N2O2PWO0]g0e1K4L4L4M2N2N2N1O2N3M2WZOlLRd0W3i[OQMRd0Q3j[OTM]OWOK4Ud0b3_\\\\OTMMUOfc0i3Y\\\\OSM^d0o2`[OQMad0P3\\\\[ORMdd0o2Z[ORMfd0o2V[OTMid0n2U[OSMkd0Z4O0O4M0O10O010O001N1O2M3LeNVKX]Od4kb0cKQ]OY4Qc0lKl\\\\OQ4Uc0SLi\\\\Oj3Yc0XLe\\\\Og3[c0]Lc\\\\Oa3^c0aLa\\\\O^3^c0eL`\\\\O[3`c0hL]\\\\OX3cc0jLZ\\\\OX3fc0jLV\\\\OX3ic0h100O101O0O100O1000001O0000000O11O0O1000h\\\\O_Iab0a6^]OdI^b0\\\\6`]OhI^b0X6a]OjI^b0V6a]OlI_b0S6`]OoI_b0Q6`]OQJ_b0n5a]OTJ_b0k5a]OVJ^b0j5a]OXJ^b0h5a]OYJ`b0f5_]O\\\\J`b0P1Z]Oc26`L_b0i0_]Of21dL_b0c0c]Oh2MgL`b0?e]Oi2JjLab0:g]Ok2HmLab04j]OP3@QMfb0Jo]Oe4Pb0WKS^Oi4oa0QKU^OP5ma0cJ^^O]5Zc000010O00O2ROo[O[KRd0b4R\\\\O[KPd0b4P101O1N2WM]ZOc0de0\\\\O^ZOa0de0]O]ZOb0fe0\\\\OZZOc0he0\\\\OXZOd0je0ZOVZOe0me0YORZOg0Pf0XOPZOh0Sf0UOmYOj0Qg0XNoXOi1Vg0RNjXOn1Yg0oMgXOR2\\\\g0iMeXOW2jg01O1O1O2N1N2O1O001O1N2OSO_XOmN^g0S1dXOoNYg0P1hXOQOWg0n0kXOSOSg0l0nXOUOPg0j0RYOWOmf0h0UYOXOjf0g0WYOZOhf0e0ZYOZOff0e0\\\\YO[Ocf0d0_YO[O`f0e0bYO[O]f0d0dYO\\\\O\\\\f0c0gYO[OYf0d0iYO[OWf0d0kYO[OUf0d0nYOZORf0e0PZOZOPf0e0SZOXOoe0f0VZOTOle0j0n1O1N2O2M2O2N1O2N2M3N2N2Me[W1\"}, {\"size\": [848, 480], \"counts\": \"gaR22[j06L100O10000O10001O000O100O2O0O1N3N1M3M3N1M4L4M1M2N3M3J6J7L4L4_N_NoYOa1Qf0kNbYOS1df0Z12100O00N00O2002M4N1O2N1010O011QZOZMRd0l2c[O[MZd0n2Z[OWMed0T3lZOPMUe0T410001O0O3N2I7K5L5M2N4J5eMeYOmNkg0P1XXOkNmg0Q1XXOiNmg0T1j0N2M3M4L3M5K5K5JSY[8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"nfo85Vj0;F6K3M3N2N2N2N2O1N2N2O2M2O2M3N1O1O2N101M3N1O11O00001O1N3N2N1O2N2N3M4POPWO8hi0L4L1O3M4KVj[2\"}], [{\"size\": [848, 480], \"counts\": \"PaQ97Sj08I7L3N2O1O1O2N0100O100O01O001O001O01O010O1O1O3M3M2M2O1N2N2N4K4LWd`2\"}, {\"size\": [848, 480], \"counts\": \"Xfl6;Qj04M3N2N2N1mNS1M3OO0001K6L5K4M3M3N2M2N^OgXOSNXg0j1h0O010NnWO`NT3L\\\\`0b2\\\\_OfM``0_2X_OgMe`0\\\\2b^O^NZa0e1^^ObNaa0`1Z^OdNea0^1W^OeNha0^1R^OfNma0`1j]OcNVb0a1c]OcN]b0`1\\\\]OcNdb0a1V]ObNjb0`1Q]ObNob0a1k\\\\OcNUc0[4000001OO2N1M4C<N3M2M4L4M2N3M3L3K6MeNmJ_]OP5`b0WK]]Og4cb0_KY]O_4hb0dKU]O[4kb0iKS]OT4ob0oKo\\\\Oo3Rc0SLl\\\\Ol3Uc0WLh\\\\Oi3Wc0[Lf\\\\Oe3[c0\\\\Lc\\\\Od3]c0_La\\\\Oa3^c0bL^\\\\O`3ac0h100O10000O10000O2O00000O10001O000000000Q_OoH_>Q7l@gIQ?X6h@SJU?m5e@ZJZ?f5c@^J\\\\?b5b@aJ]?^5b@eJ]?[5a@gJ`?X5^@kJb?T5]@nJc?Q5Z@SKe?La_OP3g0WMi?Fc_OR3b0ZMl?Ad_OU3=^Mn?ZOh_OX36bMS`0SOi_O[31fMW`0jNk_O`3JjM^`0^Nm_Oh3CmMb`0jMZ@Y4ROnMi`0]M\\\\@e4jNoM^b0R5O01O0O1nNc]OQJ^b0k5k]OoIUb0n5o]OPJSb0m5P^ORJPb0l5T^OPJoa0n5T^OnIoa0P6T^OlIoa0Q6Y1O2M2N3M4L4]La[Oo0bd0nNc[Om0ad0POc[Ok0`d0TOd[Of0`d0WOe[Ob0_d0]Oe[O>^d0_Og[O;]d0Cf[O8]d0Gf[O4^d0Jf[O0_d0Le[ONbd0N_[O0hd0I[[O5jd0EY[O9md0@U[Oa0md0ZOV[Of0Zg01O2O00O2N2N2N0O2N1O2N1N3N1M4L4IhWa1\"}, {\"size\": [848, 480], \"counts\": \"V\\\\S27Yj00O10000O1O100O101O0O1O1O1N2N2M3M3M2O2O1M3K4I6M1M4L5J5cN[NRZOg1he0gNmYO\\\\1oe0nNeYOW1Wf0^14K5O11N10N1O2O1O101N3O0O2O0012N8fYOSMad0U3P[OTMnd0X4O000001N101M3M3M4M4K5K4hMjYO0[f0KjYORO[g0g0jXOoNbg0k0bXOlNgg0Q1\\\\XOdNng0Y1f0O3L4L3M5J6K6IQn\\\\8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"hS\\\\9<oi09I6K5J6K5K8G3N3N0O2N2N2N2M3O1N2O1O1O11O0O10100O2M2N3N1N2O2N1N3N2N2N2M4M3L5L7H8I:Bmbn1\"}], [{\"size\": [848, 480], \"counts\": \"lTj85Tj0<H5N1O1O0001O000000000000000O10O10O01N1O2N100100O100O100O2N1O2O0O2N2N2O1N2M5K^Wb2\"}, {\"size\": [848, 480], \"counts\": \"dcQ77Wj04M4L:F3M3M2M2N3^\\\\OYOX=h0eB]OW=e0cBB[=?_BH^=9[B0c=1WB6f=KUB;j=FQB`0l=AoAf0n=[OoAi0P>VOl^OQO[1n1f?ROi^O[OS1m1S`0hNb^OIR1c1Z`0eN]^O3S1[1_`0eNQ^Ob0W1j0g`0W1l^OoNTa0Z1]^OlNba0P51L4N3O001O0O1N2I8H7N3N2O1N2N1N3M2N3M2L5K4L4L4K5L5L4M2N3MkNYJf]Od5Vb0RK\\\\]Ol4cb0ZKZ]Oe4eb0^KY]Oc4eb0`KZ]O_4fb0dKW]O]4hb0eKW]O\\\\4gb0gKW]OZ4gb0kKQ]Of4ab0i1K5K3M3N2M3N3X@_G[=i8dAWHT>_8SAgGk>^8l@gGS?l9O0000000000000000O100O2O000O101N101N1hFe@[7\\\\?aHi@\\\\7Y?aHi@_7W?_Hm@`6ClHb?`0PAn54_Io>>RAk56fIi>;UAj56jIg>7YAi55nIf>1ZAl56QJh>C\\\\AS5mN\\\\KT1L\\\\`0[3Q@aLH3X`0T3[@bLA8U`0k2hBSMY=e2PCYMR=[2[CbMf<T2gChM[<V2P6N2O2N10100O0100O100O02O001N101N2O1N1100O01O2M2O1N2N2O1N2N1O2O1N2N2N2M3M4L3M5L3M1N100O1O2O0O0010O001O10O00010O10O010O00100O01000O1000O10O1000O100O101N101M3M6JhU`0\"}, {\"size\": [848, 480], \"counts\": \"kWo11[j05N100N2O2N1000000O1000000O100O2N1O1L4J6L4L4N1N2L4L3K5I5M3aNZNWZOh1ge0aNPZOb1ne0iNeYOY1[f0nN_YOT1^f0_101MO102M3N2O2N3L3N20O1VZOVMPd0i2P\\\\OXMPd0g2o[O[MPd0f2P\\\\O[Moc0h2n[OXMRd0n2g[OTMXd0U3\\\\[OnLdd0_41N1O1O1O2N1O2N2O1M3M5L5dNRZOkMVf0l1bZO\\\\Mde0W2a1I>]O>J5L5L4K5L7I6I8Fmb^8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"ana98Qj0<G6J7I5M3M2M4K4N2M3N1N200N2O201000000O1000000000O1O2OO01O2N101N3L3N1O2M3N2M4L3M3L3N3M3L4N2M3L4M2O2MfZ3KTjY1\"}], [{\"size\": [848, 480], \"counts\": \"Zcl87Sj08J5M2O2O01O001O01O0001O000O10O10000O00100O010O10000O010001N101N2O1N3M3M4Km]a2\"}, {\"size\": [848, 480], \"counts\": \"_gP72Xj07K5M3N1O1N2N2O1O0c\\\\O^OmI?Tb04gCc0V<]OgCh0W<YOeCl0Y<TO`CT1^<mN^CY1`<gN^C\\\\1a<dN[Ca1c<`NZCd1e<]NXCf1g<[NWCf1i<[NUCg1j<ZNTCg1k<\\\\NQCg1m<\\\\NoBf1P=]NkBg1T=\\\\NeBh1Z=\\\\NaAf2^>]MZAi2f>XMUAl2j>VMQAm2o>UMl@o2S?RMf@T3Z?mLQ@_NcNf4`a0lL]_Oj3j`0WLS_Oi3n`0YLo^Oh3Ta0XLg^Oj3[a0VL`^On3aa0TL[^Ol3ga0YLl]Oo3Tb0U21N3N2N1M4L4K5I9H;G5K4M3N2N2N1O2N2N2N2MnNjIP^OT6fa0bJP^O[5Pb0jJm]OU5Rb0PKl]Om4Ub0XKg]Of4Zb0^Kc]O`4_b0cK^]O[4db0jKV]OV4lb0f1010O01O2Z^OiIP?X6c@\\\\JU?f5a@gJETNOL^>[7cAZLY>P8O1O0000001N1000000000000000000000O100000001O2M3gEbA\\\\8_>aGeA]8\\\\>aGgA\\\\8[>\\\\GmAc8T>WGRBh8o=RGXBl8j=mF[BR9k=^F`BU6oN`K0gNY`0b5T@ZKJROS`0^5_@UKE[Ol?Z5WA]JZO7a?U5oBdJT=U5Y4jNU1QOo0E;I6N3O0O2M2J7K401O0O101O0001O01O001O010O2N2N10O01O0O101O5J9H2M3N1O1N2O1O1O2N100O2O0O100000O001N1fND_XO=^g0H^XO:_g0OWXO5hg03kWO2Uh0U1N2F92O0O1O1O1N2L5J6I6I8A`0G8K8IZ^d0\"}, {\"size\": [848, 480], \"counts\": \"jbm12\\\\j03N2O0O2O1N1N2O100O100O1N2O1N1N3M3N1O2N2L3J6M0O103H8L4L2]NdNRZO`1me0gNhYO\\\\1Yf0jN^YOW1df0nNVYOT1jf0V11001M4N00N2O2N3O1O2N1010aZOkLcc0U3W\\\\OSMgc0m2o[O^MPd0d2l[O^MTd0m2][OXMbd0R3iZOYMXe0o30000001N2N2N2O1N2N4L6J6RNo1XOQXOaNTh0X1VXO^NPh0^1c0N4L3M4L4K6K7H7Inla8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"moj96Rj0e0A3J6J8I6I7J6K4M2O0ON4M3N2O1001OO2O001O100O1O100O100O1O2N1O1N2N2O2N2M4M1N4L3N1N2O1O1O2O0O1O101N1O1O0O3CkcV1\"}], [{\"size\": [848, 480], \"counts\": \"\\\\_V9>mi05L5N2O01O00010O000O101O000O1000000O101O2N1O2M2O1O1O1O1O0O1O2N``\\\\2\"}, {\"size\": [848, 480], \"counts\": \"]Po62\\\\j03M3L4M2O2N1N2O1N1O2L4L301O0O101P^O^OP:d0nD?o:CkDd0R;_OhDf0V;]OeDg0Z;ZObDj0];WO_Dm0_;UO]DP1a;RO[DQ1d;POXDS1i;mNTDV1k;kNRDW1o;iNmCZ1S<gNkCZ1U<gNhC[1Y<eNeC\\\\1[<eNbC]1^<cN_Ca1`<`NWBdNmLF>[3]`0[NmAU3R>lLhAY3Y>fLdA^3[>cLaA`3`>`LQA[3[NTKd`0a1c@e3T`0[Lg_Og3[`0[L[_Ok3h`0]L\\\\^OT4ga0W24M2N3M3L4M2M4K5L3N3M2N3N1O2M2O2M2O2M2O2N1O1ObNVJP^OVOJe6Vb0]1OO2O100O2M3N2N2O20O010O10000O1a^OeHBEZ?g7j@UJj>m5n@]Jj0kMa<l7VBgJn0hMi<c:[BVFd=\\\\;O1O0O1O1O10000001O00000O0100000O1000001N101SEdBd8]=VGkBg8V=UGmBS8]OoFh=i0nBW8]OnFg=d0RC]8YOmFl=4VCl8TOlFf?Q9^@nFb?P9a@nF`?n8e@oF]?i6k_OQKn0TNX?d6Z@jJPa0Q5[_O[JSa0a5P2J7J5lNe[OeKid0o3R100100O6J2O00N2O0O2M3G8L5I6K6L3L6J5K5L5I6J6I8H8J5M3M3L5K5M3M3M3O1N2N200O001O001N100O1O1O1O0O1000O1O0010O01O1M7H<GM3OLL512N4K4M300O101O000O1O2O1N2N2O2N2M3N2O1M6IYS3\"}, {\"size\": [848, 480], \"counts\": \"Xhl16Yj02O000O2O000O1O1O1O1O1O1O1M3M3L3M4N2M2M4L3I7G8K3]N[N^ZOf1ae0dNVZO^1ge0jNRZOX1ie0QOPZOR1Pf0ROhYOo0Zf0b11O1O010N1L6O1N2N2L4O1O101O12UZOQMPd0S3g[OWMVd0Q3\\\\[OUMcd0]400O0000000001N3N6H<C4aMmYO=Uf0AoYO9Vf0EmYO7Vf0GnYOmN9Mme0T1\\\\2K4M2M3N1O2M4K7J7HRWe8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"_aQ:94Iei0j0E7J9F:G7J6J6K4L300O01O2M3N1O2N2L4M2O2O1O1O1O2O01ON2O1O1O1O2O03NM3L3N3M3N2M3O1O00000N3N1M4K5L3M4M3L3M]lP1\"}], [{\"size\": [848, 480], \"counts\": \"icZ9b0ii06N2O0010O001O000000000O100O100O010O10001N3N1O1O1N2O1O2N0O2N2MR\\\\X2\"}, {\"size\": [848, 480], \"counts\": \"cfk64Zj04L3N2O0O2N2N1O1N1N3O1O0O2N1N3N1O1O1O100O100O101W^OQOP:o0fD\\\\O]JMi`0h0fDEUJJSa0a0dDi0Y;XOdDm0Z;SObDR1];mN`DX1^;hN`D\\\\1_;dN^Da1`;`N]Dc1b;^N[Dd1e;]NXDf1f;\\\\NWDg1h;[NTDg1k;\\\\NbBRO_Md2o?[NWBGXMS2b`0XNoA_3R>bLiAa3Y>_LcAc3_>^Lc@kN^No4Pa0WL]@_4e?bKS@c4o?_Ki_Od4Z`0f22L5K5L4L4L4K4K6K5L3K5L4M4L3N3M3M3M3N2M2N3N2N1O`NYJ[^Oe5ca0aJ[^O\\\\5ea0iJX^OV5ha0mJX^On4ja0UKU^Og4na0[KR^Oa4Pb0bKl]O]4Vb0l11O2O010010O1O100O101Z^OeHU`0\\\\7]_OZIY`0\\\\9SO4L3N2M2Ne0SAeD[=Z<N1O001O0000000001N10001O0O10001]EZBY8g=`G`B`8`=[GeBe8[=XGhBh8Z=TGhBl8[=nFhBQ9\\\\=jFfBV9b=WFjBh9o>VOR@QGo?m8V@PGj?o8Y@oFh?n8[@PGf?o8[@PGf?f6f_OZKf0nMe?_6T@ZKm`0^4`_OXKd`0f2P_OoLk0L\\\\`0S3X_O\\\\Lbc0c3f1cNlYO^NUf0o2O002N4L2NJ7N2L4M4L3M4L3L4M4L4J8J6I6H8H8H7K5N1O1O2N1O2N1O1O2M2O4K2O2N1N3M2O1N101O0O1000O01000O01O1O00000000F;1N1O010O1N2O002N1O1N11000N2O00100O1000O100000000001O0000bH\"}, {\"size\": [848, 480], \"counts\": \"[Tf11]j04M1O2N100O1O1O101O0O10000O001M3N2O001N2N2M3M2N3N1M3J6I8F9UN^N`ZOk1\\\\e0cNRZOb1oe0kN\\\\YOY1if0S14N10O01NO3NO2N3N4M2N2O2O000OYZOUMlc0k2n[O^MPd0c2l[OaMSd0`2g[OeMYd0b2\\\\[ObMdd0l2fZO\\\\MZe0m3001N10001N2O1N2O3L4K5L6^MlYOPO>Ole0l0jYOnNf0Jie0R1Z2M4M4L3M4K5L5L5J6H_fg8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"clo9?li0;D9J5H7L5J7H6L4L4L30O1N21O10N2N110O11O00O101N2O1N2M5K4K4L4K4N3L3N2N3M3N1N3N1O1O2M2O3L3M3N3LbeV1\"}], [{\"size\": [848, 480], \"counts\": \"o`V9>oi06K4N00100O01O01O0000000000O1000O00100O0010OO1100O1O1O2N1O1N3N2M2O4M1OSUY2\"}, {\"size\": [848, 480], \"counts\": \"cXn6:Pj08I5M3K5M3O1N101O001O01O01OO100O101OO10Oi\\\\OD]<<UC5h<JSC=l<CQCb0l<^OQCg0n<YOnBl0P=UOkBQ1T=nNhBX1V=iNgB[1X=fNdB^1[=bNdB`1[=aNcBa1]=^NbBd1]=]NUA@bMU2Xa0\\\\NPAK_Mk1aa0[Nh@8^M^1ja0]N]_O_4d`0dKT_O^4o`0jKb^O\\\\4`a0W22O2N2N1N3K5M3M3L4M3L3N2M4L3M4J6K5L4M2N3N2M3NhN\\\\Jh]Oa5Vb0gJg]OW5Vb0PKh]On4Wb0VKh]Oh4Xb0\\\\Ke]Oc4[b0cK]]O_4cb0e12M3N2O2O0010O10000O1000001f]OjHXa0Y7W^O[Ica0l7M3o_O`Gk=h8^@PIZ?V9M6J2N2N10O010O01O01O001O1O1N3TFZAj7f>RH_Am7b>oGaAQ8a>lG`AS8c>iG_AW8d>bG`A]8Z`00000O1O1O2N1O1N2mIV_O_2l`0QM]@a1TNaLba0j1f@fNRNV1LWN^a0k1PAUNXN\\\\1_OaN[a0m1aBVOZLjNVa0Q2eBkNZ>U1lA`NY>`1[53O1N1000O1N01001N3N3L3M2N3M2N3M3M5K5J4M2N2N4K5L1O1N101O0O2O000O10000000O010000O10OO2O00010O01O1O10O01O1O01000O01000O01O001000O10O1000000O1O101N4Fbm<\"}, {\"size\": [848, 480], \"counts\": \"kYe12\\\\j03M3O00000O101N1O100O100O100N2K4L5N2M3O001N2M1H7N2O2PNhNeZO]1Ue0QO]ZOV1_e0SOXZOP1de0YOTZOj0le0BbYOd0^f0d12J5N31OO1O2O1N2L5L3O2N2O010O02O4cYOcM^d0l2jZO_MUe0o3O0001N101N3L5K6J5L4M3M4aMdYOa0`f0ZOiYOUO33Xf0c0mYOlNeg0S1m0N2O3L3M3M4L5J8H6JnUj8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Vfg9?ji0;H6J7J5J6L2M4K3N2O2O2O1O1O4M03L001O1N1M4M202M3N3M4L3L3N3N1N4K5L2M4M2M4M2M3N2L\\\\ed1\"}], [{\"size\": [848, 480], \"counts\": \"\\\\RT9c0ii06N00100O01O001O000000001O00000O010O01N1100O010O1O100O2M2O3M3M3KUS^2\"}, {\"size\": [848, 480], \"counts\": \"RYS7>Pj06I4M3L4E:L5M3M1O2O1O010O001W\\\\OjNW>V1eAPOY>o0dAWOZ>i0aA^O\\\\>c0_AC_>?_AC^>`0^ADa>=\\\\AFb><[AGd>9YAKf>6WAMi>3RA2m>NP^OjN_1]1b`0Ib]O[Od1o0j`0\\\\1Q_OgNo`0]1j^OeNWa0^1a^OeN`a0c1h]ORLC`2gb0m42O1N2O1N2L4L3N3N2M2N3NcNgIf^OV6[a0QJa^Ol5`a0YJ\\\\^Oe5ea0^JZ^O_5ha0cJV^OZ5ma0hJR^OU5Pb0mJn]OP5Tb0SKj]Oi4Zb0YKd]Oe4_b0\\\\K`]Oa4bb0cKZ]O\\\\4hb0c12O2N1N2O2M3N1010O010000000O10001O1O3M6K5J4L3N3f^O[Ib>h6m@gIQ?]6c@kI]?e80O1SGX@P7h?iHb@T7`?gHc@Z7]?cHe@]7]?_He@a7_?XHe@g7b?jGf@V8k`0O0O2O001N2O1N101N1O2N1TJi]O^3Xb0`L_^Oj2ca0UMa^Of2`a0YMg^Oa2Za0_Mm^OX2Ua0gMo^OT2Ra0mMT_Ok1n`0UNn_Om0T`0SOQ@0cMUN_b0k1T@VNmMJXc0Q2X41O1O01O1O4L:E9G5L3K3N3M2N3M4L3M0O2O00000O10000O1000000O10000O100O001O010O10O010O010O010O1O0010O010O010000O001000000O010000O1000000000001N2O0O3Keja0\"}, {\"size\": [848, 480], \"counts\": \"kYe12[j04N2O0O100O1O1O1O100O1O100O2L2L5L3N3M3N1N3L3J5L3L5QNhNaZO_1]e0iNXZO]1ge0iNRZOX1le0QOhYOS1Uf0e1M2N12L4M4M3N101N3M2M3N3O1O1O1011N8Hc1]N2N01O00000O3M4L9F8I2N2O1aMlYO?Yf0[OkYOc0Xf0YOmYOPOh0K_e0S1`2M3N2N2M3M5K5J5K8G^Pk8\"}, {\"size\": [848, 480], \"counts\": \"P`]<\"}, {\"size\": [848, 480], \"counts\": \"Uj]9`0ii09J7K2N4J5L4M2M4L3N2N2L3N300O2O010O0010O010O1N2O2M3N5J9\\\\NQWOW1^i0E4M3L4L3N3L4L4KnPQ2\"}], [{\"size\": [848, 480], \"counts\": \"eSX93Yj06L4K3N2M4N1O20O01O010O00010O1O100001N5L1N100O1O2OO02N1O1O0O2O1N2NRWY2\"}, {\"size\": [848, 480], \"counts\": \"oik6;Sj03M2O2N1O2M2N2L3N3N2N2N2O1N2M3K5M3M3M3M3K5N5K6K3M4L4MUNZXOn0cg0POaXOQ1]g0lNeXOW1Yg0eNkXO]1Rg0aNQYOa1kf0^NWYOe1\\\\f0eNdYO^1Xf0dNhYO^1Tf0cNmYO`1oe0aNQZOa1ke0cNRZO`1ke0cNRZOa1je0gNjYOg1le0c1K3M3N1N3N2M2N2O1N2N101N101l[OhJnb0X5n\\\\OnJPc0S5j\\\\ORKUc0Q5b\\\\OVK^c0m4[\\\\OXKdc0j5000000000000001O0O101N1O2M3M3VKQ\\\\On2Sd0oLQ\\\\Om2Sd0oLQ\\\\Ol2Sd0QMQ\\\\Oh2Vd0TMl[Oh2[d0TMg[Oh2_d0RMd[Ok2Rf0M3N3M2N3N2O0O1O2O0O10001N10fYOVMnd0i2P[O\\\\Mod0b2oZObMPe0^2lZOgMSe0Y2jZOjMVe0U2fZOQNZe0n1aZOWN_e0i1ZZO^Nfe0b1WZObNie0R31O1O010O00010O0010O0100ZOQZOjLoe0Q3WZOnLhe0P3[ZOPMee0n2]ZOQMde0m2^ZORMbe0m2`ZORMae0k2bZOTM_e0j2cZOUM^e0i2dZOVM]e0g2eZOYM\\\\e0d2hZOYM[e0c2jZOXMYe0e2[1M3M2N3M2O2M2N3M2M4K4L5K4L5I6BlVO\\\\OYi0c0iVOWO[i0i07O001N1000000001N100O0O2N2O01OO1000000O100O001N200000O01O1O000N2O10010O001O001O01N2M2N3100O00100O1O0010J5N2O2M2010O02O001N9G_T7\"}, {\"size\": [848, 480], \"counts\": \"iYe14Zj03N2O0O2N1O1O00100O1O100O1O1N2J6K4O2M3N1M4J5K4H7SNeNeZO^1[e0jN[ZOY1ee0nNQZOV1ne0ROhYOo0Wf0d1M20O102O1O1N3N110M4M2N3M2O3O0O11O3N;fYOgLed0f4M0O00O2O001O1M3L4iKWZOc3ne0XLUZOd3Rf0XLoYOd3Wf0XLkYOb20WNbf0i0XYOjNW1Jbe0[1YYOgN]h0T1iWOfN[h0X1a0L3N3N3K5L6J6I7ERkk8\"}, {\"size\": [848, 480], \"counts\": \"lT[98Vj04L3N2O000O000K0O5M4N2O101lWOYO]f0j0bYOXO[f0i0dYOYOZf0h0fYOXOYf0i0gYOWOXf0i0hYOYOVf0g0hYO^OVf0b0gYOBWf0`0gYOBWf0`0gYOAbe0HaYOl0g0]Ofe0JaYOT1;VOSf0H`YOZ10TO_f0D`YO_2_f0k0N1OO11O3M2N2N3M2N2N2O1OQLUZOY3je0aL\\\\ZO`3de0ZLaZOf3Uf0001N1O2O1O0O10_NeYOmNYf0e0^ZOSObe0i0eZOSO\\\\e0k0hZOSOWe0l0mZOPOUe0o0oZOlNSe0LiYO8Y1GQe0M[ZOFn0OPe0:U3000010O10hVOEZh0:dWOK[h05`WOO_h0<SWOGoh0l01O1N2L5F=G:EolU1\"}, {\"size\": [848, 480], \"counts\": \"gUW9h0]i0>G7M3K400O2O01O00000O101N101O001N101O001O010O10O01O1O1O1O1O1O001O1O1O1O1O1O1O001O1O001O001N101O0O2O0O2O001O1N101H8M4KRdd1\"}], [{\"size\": [848, 480], \"counts\": \"fb`:7Wj020000000N^ng1\"}, {\"size\": [848, 480], \"counts\": \"hW`67Wj06J6K3M3L4H7VNSOeYOW1Zf0nNZYO[1df0lNmXO_1Qg0Q1N2O0N3N3M2O1O10hM[YOd0df0YOcYOe0]f0fNRYOMn0W1ig04N3L2O2M3N1O2N1O2N1O2O1N1O2O0O2N2O1N101O0O101O001O000O2O001O00001O010O00010O0010O001O100O2N1O3N5J:F2N01O0000001O0O100O10000O2N1O1O100O1O100O1N200O1O100O1O10000O100000O10000O100O101N1O2O0O2N2N2N1O1N101N1O1001O010000O10O10000O010O1000O100O1O2N1N2N2N3M2O1O2M2O2O0O2O2M2O2M0010O0O100N2O1O1N0N2O20O2OD=M2O00O3N1N3M2M3O20O2N01H8M3N2O1O3M2N3M4K6L6FcZn0\"}, {\"size\": [848, 480], \"counts\": \"VTf15Zj02N2O0O101O0O1O2O0O100O1O1N2L4K5N2M2O2O1L4H7G7K5L4ZNaN[ZOc1ce0hNRZOZ1ke0SOfYOQ1Yf0c1M0012N1O3N0O2O3M2N3L3N3N2N2O1012M6nYOoLZd0f4M1O000001N102M9E<C6K4M3O2N1eN[YOiNhf0g0lZOQNVe0]1X2M3N2O3L4L4L5K5J8G_Pk8\"}, {\"size\": [848, 480], \"counts\": \"jSZ81^j04K3hL2h[O2Qd08e[O0Vd05f[ONXd04g[OMWd05f[ONYd03d[OOZd04c[OO[d02b[O1^d01^[O1ad01[[O2fd0OR[O7nd02cZO3^e05oYO5Rf0P24N3M200O1O1NE;002O2O001000O1O2O000010O00002N3Mb0^O1O1O1O1O001N1lNjXOnNWg0OnYONRf0OVZOMie02YZOMhe02XZONhe01ZZONge01YZOOhe00XZO0he00XZO0ie0OWZO1je0NWZO1je0OUZO1ke0OUZO1le0OTZO1le02QZOMPf07_XO]OS1;_f0b0`YO^Oaf0b0^YO^Ocf0a0^YO^Ocf0a0]YO@bf0`0^YO@df0>^YOAbf0<aYOD`f01jYOO[h0101O2N1N2N0001N1L5L6H\\\\`o1\"}, {\"size\": [848, 480], \"counts\": \"P`g86Pj0c0D4N2N1O1O100O10O00100O01000N3O0O10000O2O00000O01000000O1000O010000O1000O010000O0100000O10O10O10000000O001N2O1N3M2N2N2N3N2N2N3LWVP2\"}], [{\"size\": [848, 480], \"counts\": \"adV:2Wj07_Oa0M4K4O2M20000000001O0010K4M3N2N3L5L3K7K[ed1\"}, {\"size\": [848, 480], \"counts\": \"dbc6;Qj05N2M4WXO8ed0KnZOb0od0DiZOa0Ue0EcZO>]e0ORZO5me07_YO1gf0j15K2M2O2M2O6J4L4K5L3N1N2O1N101N6K4LO00O01O100O1O0O2O001N1O2M3L3N2N3N1O1O100O1N2O2N100N101O100O1N2O1O1O1O1N2O1N2N2N2O1N2N2N2N101N1N2O010O2N1O2N101N100O1O101N100O1O1O2N100O1O2O0O10O0100O1O1000O100O11O0000000010OO1000O0J7F:NDSLZZOl3ee0[LWZOc3je0`02O1N2QLQZO[3Qf0WLPZO9O]3Tf0<6G:I7L4M3oLnXO_2Ug0]MoXOa2bg0M3L3M2N2N3M2O1OFkM]XOR2eg0PNZXOn1gg0UNWXOi1fg0^NZXO\\\\1cg0lN\\\\XOQ1fg0POZXOn0hg0ROXXOk0kg0UOUXOi0lg0YOSXOd0Ph0\\\\OPXOb0Rh0]OPXO?Sh0AnWO<`h0VOdWOf0ah0VObWOd0ch0ZO`WO`0dh0_OW1OnYf1\"}, {\"size\": [848, 480], \"counts\": \"VTf14[j02N2O0O101O0O100O10000O101N1L5K4N2M3N2O1M2M3G8N0L6SNaNdZOf1Ye0fNZZO]1ce0ROoYOQ1ne0XOiYOk0Rf0j1L31K6N2O1N3O2M2O2M2N3M201N200O11YZOoLmc0X3cZOfLc0c0hd0]4N00000001O0N4J6K6K7I5M4L8H2ZNWZO_Nme0l0V2M201N3M3M4L4L5K6H8IPVj8\"}, {\"size\": [848, 480], \"counts\": \"kQb74Wj06\\\\NIjXO;mf03hXO4jf0g0aXO_O]g0k1O1N3N101N10O11O1O1N1@XMXYOh2df0d0O2N4M2N3L3N2N2M3N2O1N4M3NnKXZO\\\\3ee0aL^ZOa3ce0WLbZOj3Rf00000O2N2gNgYOWN[f0e1VZOkMme0R2WZOjMme0P2ZZOjMme02VYO_1ih0G:B\\\\Qg3\"}, {\"size\": [848, 480], \"counts\": \"`e]85Yj07G6L2M4M6I4L3OO10O2O001O10O0001O10O00001OO20N11O001NO102N2O000O11OO1O101O2N100O2O0O1O4K3M8BZnh2\"}], [{\"size\": [848, 480], \"counts\": \"WTf9;gi0`0I6L201N3N1O10001O10O000N2M4L3M4K4L5L4K5JcUU2\"}, {\"size\": [848, 480], \"counts\": \"_Wf6>ji0<H6K5L4aMROU[OR1hd0QOT[OS1gd0ROS[OT1kd0nNR[OT1md0mNR[OU1ld0mNR[OU1md0mNoZOV1Qe0T21QLkYOb3bf0O100O100O2O1O>B7gM^XOU1dg0cNcXO\\\\1bg0YNcXOg1Sh01O0001O01O0000000O2O0O1M3N3M2N2M4L3N2N2N3L3M2O2N2N2N2M3N2M3L4L4N2N2ZOf0M3N2N1O2N1O2N2N2M3N2N2N1O2N1O1O2N1O1O100000001O00O1000gNaJb]O^5^b0fJ_]OZ5bb0gJ[]OZ5fb0gJX]OY5ib0gJV]OY5kb0hJR]OY5nb0jJm\\\\OW5Uc0mJb\\\\OW5`c0l00O101O0kKS\\\\Of1oc0WNS\\\\Oi1nc0[23^Km[Oc2Td0VMT\\\\Og2nc0RMT\\\\OP3oc0hLW\\\\OW3lc0eLU\\\\O\\\\3mc0`LR\\\\Og2LjLTd0<P\\\\Of23kLPd0<m[Oc2`0gLhc0c0i[O_2de0]M]ZO`2ke0[MUZOd2Sf0VMlYOi2Vf0XMgYOg2\\\\f0ZM`YOd2cf0aMUYO^2mf0a0011O1O3L3K6L3N3M3L4K5K5I8^Oa0A`0K4K6I7K6KPPV2\"}, {\"size\": [848, 480], \"counts\": \"UTf13Zj04O001N101O0000001N1000000O1O2O0O1O1O1N2L4J5H8L3O1L4K6J5\\\\NYN^ZOi1]e0oNlYOU1Pf0g1DfLdYOU3_f0;20O3000N2N3M2M4M3L4M3O1O1O1OXZORMoc0n2i[O_MSd0b2i[OaMWd0b2b[OcM]d0b2jZOfL5m0Re0R4001O2N2N2M2N4L5K4K5K8H3fMcYOWOeg0g0bXOQObg0m0bXOjNeg0T1n0M2N4L3M5K5J6J<AQah8\"}, {\"size\": [848, 480], \"counts\": \"Zme6>Qj00N0@FkVO=lh0f0L4O2L4K5kNhN^XOm1]g0e010DRMWYOn2ff0[MTYOd2nf0]MQYO`2Qg0aMoXO[2Ug0>2O1O1O100O1O1000001O1\\\\M`XOW2cg0bMaXO^2jg00N7KO2N2N7I2N:E4L4L6K3L4L?A4L4M1O1O2OO1OO10000O11N100O11O00000O20000O1N101M4M3KS^n3\"}, {\"size\": [848, 480], \"counts\": \"cSW85Yj06J5J4L4L6L2N2O1N1O100O100O001O000O1O1O1O2OOO200000000O100001O1O1N2N2N2J9K2N3N3M2M3N2M5L3K\\\\ZP3\"}], [{\"size\": [848, 480], \"counts\": \"Z]n92\\\\j07I6L3K3M2O2M3N3M3M3N0000N103L4L3M3M5K4L\\\\fm1\"}, {\"size\": [848, 480], \"counts\": \"aX`61Wj0;J5M2N2N2001O8H10O010WXO4kd0NlZO;Re0LaZO;^e0KXZO:ge0KPZO9oe0NgYO7Xf0O\\\\YO7cf0OSYO6mf0h1O03N2M2N3M2N2N1N3N2N1N2O3gMZXO`1ig0XNbXOb1Wh0O10O00001O1O1O001O001N101O00001O0N2N2N2M3O2N1N2O1N3N1O1N2N2N2N2M3N2N2M3O1N2N2N2N1N3N2N2O1N2N2N101N2N1N3O00O11O0010O010O1O10O10O100O101N1O1O100O1O2N1O1O1O1O1O1N3N1N101O000000010O0000010N01OO1H9N2M2M5M2O1O2M3M3XO^XOZNig0e1c0N1N2O2L3N4M4L3L5J5L4M2M3N2M4L6JYQl1\"}, {\"size\": [848, 480], \"counts\": \"cch12]j04L101O000000000O1000101N2M100O1O1O1L4J6L3K6M2L5K4M3H7E8]N]N]ZOb1fe0hNnYOZ1Sf0nNdYOT1Uf0XO]YOQ1af0`1N0001L4L4O3M2N2N3O1N2M3MYZOWMmc0i2R\\\\OYMmc0f2S\\\\O[Mmc0f2P\\\\O]Moc0g2l[O[MSd0l2e[OUM[d0U3X[OnLid0\\\\4100N2O1N3M4M4J6I6I7bMfYO;af0BcYOYO7A\\\\f0T1`YOPOhg0m0^XOhNig0W1j0M3M3M4L4L4K5L6J7H_Qf8\"}, {\"size\": [848, 480], \"counts\": \"XnQ6;Rj09H8I4K3fVONSh0\\\\1@eMbXOa2Ug0iMdXOZ2Zg0eMhXOY2Yg0fMhXOZ2Wg0iMfXOY2Yg0a0N0OH9E;A`0A?H;cNVWO:Yk5FfnJ:UN0iXO2Pg05oXOLnf08TXO_O=9_g0:oXOFPg0;oXOERg0:nXOGRg09nXOGRg08nXOIRg06oXOJRg04nXOLSg02oXOMUg0LSYOGkn[5\"}, {\"size\": [848, 480], \"counts\": \"on`82Xj0b0B6K4L3M4M0O2ON2N1100000000O1O2N100O0O2O1O001O000O100O1001O1O1O010O1N2O001N3N1O1O1O101N1O101N3M3Lb0\\\\OnYb2\"}], [{\"size\": [848, 480], \"counts\": \"oXo94Wj041O0001O10O1O0001N101O1N20O1O1N2O1N2Obem1\"}, {\"size\": [848, 480], \"counts\": \"PeQ72Zj07L3N2M4M5J4M1N2O0O2O1N2N2N3M3L4K4K5L5I6L4L3I8\\\\Od0K5K5L4M3N2M3MdMaYOl0^f0POdYOT1[f0_NPZOc1oe0YNTZOi1le0jM_ZOX2be0^MeZOd2bf03M2N3M2N2O0O2O1N2O1O1N2O1O0O2O00001O0001O01O0001O0010O01O1O1O001O001OO1N200O1O1O10O10O1000000O1001O0O10001O001N101N2N2N4M2M4L3M6K9F3NO001N100O10001O00N2O101O010O00001N2O010O1O1N2N2O2N1N200O100O2O0O101N2N2O1N4L5K6I3N1O0O0010O1O0K5N1N2O2O1N11O2O1O1N2N3M2O1O1O001O00011O001O1O1O2N5G^Zi0\"}, {\"size\": [848, 480], \"counts\": \"bmk14[j03M101O0O1O10001N1000000O1O1N3L3N2M4M2M3L4M2B>G7J2aNaNVZO`1je0hNmYO[1Rf0SO_YOo0`f0_1N200O0101N2M3O2N1O2O2M2NXZOmLYd0Q3h[ORMVd0m2k[OSMTd0m2l[OTMUd0l2h[OXMVd0m2c[OVM]d0m2][OWMad0^4O2NN1O2O001N3M5L5I7J2aMhYOb0\\\\f0[OiYO>Zf0AhYO\\\\O2C\\\\f0n0eYOmNkg0P1l0N3M4M1M5L4L4L5K7GTWe8\"}, {\"size\": [848, 480], \"counts\": \"]iU52Sj0<M3VXOE\\\\e0=_ZOH]e0:_ZOL_e05]ZOOae03\\\\ZO0ce0:QZOHoe0`0]YOJff09nXOHYg0g101OJ`XO]M`g0`291K4K6N10011N3M7JO1O101O01O2O2M0010nLSYO]1MWOcg0c0fXOYOZg0d0kXOYOVg0OeXO[O`0d0kf0MiYO1Wf0MmYO2Sf0KRZO2oe0LTZO3ke0MWZO2ie0NXZO2fe0OZZO2ee0M]ZO2ce0M^ZO3be0L`ZO3_e0NbZO0_e0ObZO1^e0NeZOO]e0OdZO0]e00cZOM`e02c2Lddl5\"}, {\"size\": [848, 480], \"counts\": \"ZYR96Qj0=A;B>O2O00001O00000001O0O1000000O100O10000O100O2O0O2O0O101N1O101N100O2N100O100O1O100O1O2N1O1M4N2N1LTPQ2\"}], [{\"size\": [848, 480], \"counts\": \"U^[92Zj07K3M4M1N3N2N2N1O100O1O100O1O1N2O1000]OiVOMWi02kVOMUi03kVOMUi01mVOOSi00nVO0Ri0OoVO0Ri00nVOOTi00lVOOki0000ZQZ2\"}, {\"size\": [848, 480], \"counts\": \"hkc77Uj06L3M3L4N2M3M3M4M6J5J6K5J7J7I9G5K5K4L3M3M3M3N2N8G7J2N2M100O101O0O1O101O0K6C<M3M3M3N1O20AlZO_KVe0b4<0O100O10001O0000001N101O0000000001O0000000000cZOZKPe0f4mZO_KQe0T1lZOn11oLSe0R1nZOo1LRMUe0n0Q[O^2od0`MR[Oc2ld0[MU[Of2nd0TMT[Ol2od0nLT[OR3od0fLW[OY3nd0YL[[Og3fe010000O110O01O2N2N2N3M5J4YOVYObMlf0Y2ZYOcMif0Z2i0M3M2N3M3N1N3N2M2O0O2O0OO11O01O010O10O001O1N2N2M2O2N2O1O1O1O2N1O2N1O1O2N1O2O0O2N10000O100O100O1O100O100O1000000O10000O2N101M3N1O3L5JeSe0\"}, {\"size\": [848, 480], \"counts\": \"Rhl16Yj01000001N10001O000O100O2N1O2M3L3N3K4M3M3N1H9D9L01102_NdNlYOb1Qf0iNcYOZ1]f0[10O3M2N3N0ON201M5N11M3N2O2N2O02\\\\ZOPMfc0R3T\\\\OTMkc0n2o[OVMPd0S3[[OZMed0Y4O0001O001O2M3L5K7G8I6cMhYO;\\\\f0@iYO<Zf0AiYOoN`00ie0P1lYOdNjg0Y1i0M2O2M2N4K6K4M6H9Ec\\\\d8\"}, {\"size\": [848, 480], \"counts\": \"nlf4m0hh0W1An0TO7J1N101N000DeL_YO`3\\\\f056E<O2O1O2N1O2J6J6L4M3K6K7oMhWO`1fh0N2L4J6K5B>N2O2M3N2O2M3M1N2O^Tg6\"}, {\"size\": [848, 480], \"counts\": \"SQ]91Qj0d0F7I6L3K5L3M4M2O1O1O2K5M2O2O02O10kWOXNag0h1WXO^Nmg0Q21O1N2N2N101M3O0O2N1O2M2O2M2O1N2N3M4M5WOoVOHUi01oVOOUi0IoVO6fi001O0O1O0O2O3KRfh1\"}], [{\"size\": [848, 480], \"counts\": \"dS]98Xj02M3M101O1N2O0O101O0O100N2O1O100O10O1000000L4O1Bdf[2\"}, {\"size\": [848, 480], \"counts\": \"W[k71Yj07L4N2M2O1O2N1O2M2N3N3^WO^OQg0n0TXOHeg0i1H6J4L4L3M1O2N100O2N1O1O100O100O2O0O1O100O1O10001O0O100O10000XO_L`ZOb3]e0cLaZO]3]e0gLaZOY3]e0m0O2O1O100O1O10000O2O0O2O00000O2O00O100O1O10000001O10ZLhZOR2Xe0lMmZOR2Se0jMQ[OV2od0hMS[OV2nd0iMS[OT2Qe0jMP[Om1DQM_e0P1nZOo1BRMae0l0oZOY2Se0_MT[OW2]ORMde0;W[O`2cf0O0O102N2M3N4K4L3N1N2O1O2M4M4K4K3N2N100O0100000O101O00000000001N2_OnVOBRi0=PWOBQi0;QWOEPi08SWOGmh08TWOHmh05TWOLnh0OUWO1mh0IWWO7ai0O1000O101O0O100000001O00000001O0000000O100O2N2LQ\\\\h0\"}, {\"size\": [848, 480], \"counts\": \"Rhl16Yj0100O2O0O10000O100000001O0O1O1N3L3M4L3N1N3J5B>K3L5N1M201aN`NoYOa1Qf0]13L4M201M2OO1N2O2O0002O001O11^ZOnLec0R3W\\\\OTMhc0n2T\\\\OUMkc0R3j[OSMTd0Y3Z[OPMdd0]3iZOiLWe0X4001O000O1O2M2N3M4M6J5^N\\\\ZOoMke0l0TZO\\\\Ni0:Ye0S1b2J4K4N2N2M4L4L5K6J6IRbc8\"}, {\"size\": [848, 480], \"counts\": \"Xij3=Qj00J5M5N00011N2N1O2M20ONO1301N3M2YOg0M4GQNPXOP2dg0^NYXOb1fg0aNXXO`1hg0d0O101O002N3M2OcM`XOj1^g0VNbXOl1]g0SNcXOP2]g0c00O;DO3N1O1O4L4M9G05Id1[N5H6E>A>GSoZ7\"}, {\"size\": [848, 480], \"counts\": \"njb9a0ki07I6K4L5M2M4gWOgNUg0\\\\1eXOiNYg0[1cXOgN\\\\g0]1^XOfNbg0_1VXOeNhg0R2O1N2000000001N101O2M4L4M1N3N1O2M3N3L3M5K2M7I8F:H<ZOPVO5hil1\"}]], \"masklet_id\": [0, 1, 2, 3, 4], \"masklet_size_rel\": [0.0035249812, 0.0946159778, 0.011285757, 0.0091357729, 0.0090703819], \"masklet_size_abs\": [1434.8083333333, 38512.4876033058, 4593.7545454545, 3718.625, 3692.0082644628], \"masklet_size_bucket\": [\"medium\", \"large\", \"medium\", \"medium\", \"medium\"], \"masklet_visibility_changes\": [2, 0, 10, 0, 0], \"masklet_first_appeared_frame\": [0.0, 0.0, 0.0, 113.0, 0.0], \"masklet_frame_count\": [121, 121, 121, 121, 121], \"masklet_edited_frame_count\": [41, 11, 22, 4, 115], \"masklet_type\": [\"manual\", \"manual\", \"manual\", \"manual\", \"manual\"], \"masklet_stability_score\": [null, null, null, null, null], \"masklet_num\": 5}"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sav_dataset/requirements.txt",
    "content": "pycocoevalcap\nscikit-image\nopencv-python\ntqdm\npillow\nnumpy\nmatplotlib"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sav_dataset/sav_evaluator.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the sav_dataset directory of this source tree.\n\n# adapted from https://github.com/hkchengrex/vos-benchmark\n# and  https://github.com/davisvideochallenge/davis2017-evaluation\n# with their licenses found in the LICENSE_VOS_BENCHMARK and LICENSE_DAVIS files\n# in the sav_dataset directory.\nfrom argparse import ArgumentParser\n\nfrom utils.sav_benchmark import benchmark\n\n\"\"\"\nThe structure of the {GT_ROOT} can be either of the follow two structures. \n{GT_ROOT} and {PRED_ROOT} should be of the same format\n\n1. SA-V val/test structure\n    {GT_ROOT}  # gt root folder\n        ├── {video_id}\n        │     ├── 000               # all masks associated with obj 000\n        │     │    ├── {frame_id}.png    # mask for object 000 in {frame_id} (binary mask)\n        │     │    └── ...\n        │     ├── 001               # all masks associated with obj 001\n        │     ├── 002               # all masks associated with obj 002\n        │     └── ...\n        ├── {video_id}\n        ├── {video_id}\n        └── ...\n\n2. Similar to DAVIS structure:\n\n    {GT_ROOT}  # gt root folder\n        ├── {video_id}\n        │     ├── {frame_id}.png          # annotation in {frame_id} (may contain multiple objects)\n        │     └── ...\n        ├── {video_id}\n        ├── {video_id}\n        └── ...\n\"\"\"\n\n\nparser = ArgumentParser()\nparser.add_argument(\n    \"--gt_root\",\n    required=True,\n    help=\"Path to the GT folder. For SA-V, it's sav_val/Annotations_6fps or sav_test/Annotations_6fps\",\n)\nparser.add_argument(\n    \"--pred_root\",\n    required=True,\n    help=\"Path to a folder containing folders of masks to be evaluated, with exactly the same structure as gt_root\",\n)\nparser.add_argument(\n    \"-n\", \"--num_processes\", default=16, type=int, help=\"Number of concurrent processes\"\n)\nparser.add_argument(\n    \"-s\",\n    \"--strict\",\n    help=\"Make sure every video in the gt_root folder has a corresponding video in the prediction\",\n    action=\"store_true\",\n)\nparser.add_argument(\n    \"-q\",\n    \"--quiet\",\n    help=\"Quietly run evaluation without printing the information out\",\n    action=\"store_true\",\n)\n\n# https://github.com/davisvideochallenge/davis2017-evaluation/blob/d34fdef71ce3cb24c1a167d860b707e575b3034c/davis2017/evaluation.py#L85\nparser.add_argument(\n    \"--do_not_skip_first_and_last_frame\",\n    help=\"In SA-V val and test, we skip the first and the last annotated frames in evaluation. \"\n    \"Set this to true for evaluation on settings that doesn't skip first and last frames\",\n    action=\"store_true\",\n)\n\n\nif __name__ == \"__main__\":\n    args = parser.parse_args()\n    benchmark(\n        [args.gt_root],\n        [args.pred_root],\n        args.strict,\n        args.num_processes,\n        verbose=not args.quiet,\n        skip_first_and_last=not args.do_not_skip_first_and_last_frame,\n    )\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sav_dataset/sav_visualization_example.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# Copyright (c) Meta Platforms, Inc. and affiliates.\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Segment Anything Video (SA-V) Dataset\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"This notebook presents an example showing how to load and visualize the SA-V annotations.\\n\",\n    \"To run this notebook, you will need to have the following installed:\\n\",\n    \"- jupyter\\n\",\n    \"- matplotlib\\n\",\n    \"- opencv-python\\n\",\n    \"- numpy\\n\",\n    \"- pycocoevalcap\\n\",\n    \"- pandas\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Import libaries\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import json\\n\",\n    \"\\n\",\n    \"import pandas as pd\\n\",\n    \"from utils.sav_utils import SAVDataset\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"## Example video and annotations from SA-V\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"There are 483 frames decoded from example/sav_000001.mp4 (24fps).\\n\",\n      \"Videos are annotated every 4 frames. To align with the annotations, downsample the video to 121 frames.\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"sav_dataset = SAVDataset(sav_dir=\\\"example/\\\")\\n\",\n    \"frames, manual_annot, auto_annot = sav_dataset.get_frames_and_annotations(\\\"sav_000001\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Show the SA-V annotations in frame 0 - auto + manual\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAOUAAAGFCAYAAAACSjT4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9WZCt13XfCf729A1nzOnmnS9mgBgIECQIiRIlUrQkW7JcdtjtcJVddnS5bT90tB86+qH7tZ7qoR86qqPCYXdHdUfYZbnKLlslW1JJokaKM0ECBInpYrjzkHOePMM37aEf9vedzAuA5EW0OloP2IHMvDh58pzv7G+vvdf6r//6LxFCCHw8Ph4fj78wQ/7/+wI+Hh+Pj8e942Oj/Hh8PP6CjY+N8uPx8fgLNj42yo/Hx+Mv2PjYKD8eH4+/YONjo/x4fDz+go2PjfLj8fH4CzY+NsqPx8fjL9jQ9/vE5z75JN57RqMRUkrm8znWWqRWyERy5uI5dJ6zffcATQYOitkhl86OkVhGoxWuXL/NdLpg3Etx1Zz9wwUP5pK//NhZhn7GeH2Fy4Xkrd0Fk/mUoih49LFHOZrNMEnC5uYmQijQBi8kUgh84zBSEUKgKRZU0xlVMaexDcEHvPdUdYUNHuscXgSkUgx6KQtfc1hMyR1M+pbexXNkNz1za6nWU/LVEX7viCTV+ODYWN3g6tuHeL3CFz7zNNXbV/m33/wTFlWJQPJzn/8ivcGYfG2VyjakxiCEIDjP0f4h3/7615hOd+klmk994klyo5hNpzjrkAgEtD8DIQTwAeE9eEtT1RRNBZkiWelxWM7Jkoyjowlm0CMzGamVbGQDerOGUUhw85KzLzzKtatvkdSK5x++RFE17M0atpsFe4spT61dIBw13MFz7e4B1mTokDE1q1Tn/grX9g+59OAd1od7SN9gxZSmV3J6c4Pi1oT51h6ycJigcbXHe5gcTdBKMF5foVYeLz1KCDKXM99fMDuc0ZQ1nkA2SBitrmPDjKYUfPaxn+MoXON2s4U/PeSC2mDv7S2OjhZIQAjBgw89xJUbN7m7u0tRVaTasD4YsLoyYndvj8Oy4dqtW/9fG8ff/NW/zCvf/S5ra2tsbm6SpikhBCaHc65duUPTOJxzEBxSBKQUrK2tMF4dsTIecefuXUyak+UD3nrrMk3T8M6dqz/xfe/bKJVSSCkpy3L5b6UUUimEEJw7e45T58+xv/9t0qSHlgakxQsY5D2cd/R7GbP5jECD9w2IGnSOSzLKqoYaBqNVLuYrPGASEIKHHniQtfEK+zu77O7sMi8rDso507Ikz3OMVJTWs721xXQ2o7Y1TVOjVDRUAOcdyhjyfo+yqSnLgiNb0V8ZonpDbOFQtSE068zcIVJrmnmNNhUDmWLLGinh7vXbDJIU4Q4o926SDA3GKKggBHDOIX7MHAYCzloqb7lz5w6jXkYIAYkA73HW4UNrkAJs4xBIghd4D85qVBPAewQG20iahQKlkDYQbM2kmtDMHdInPJYmfNIWPDNeQS1KLoaa67M5s7tHqNoydA2T/RtUhSOYDKUV7sw6hzsFZbHB/vWE/Nwprl9esMjuMJTb5InCDxq2bt0kcRbZOLRW6DRBAD4EjMno5ynZSh+tBRIwTnB485CDowMWTUXSS9g8tYm1JR6QIidLh0i1QlVdwUlBCCki5DRNQEmFbWrSNMU5jxTRyev1eri6od8fUFUVUh47f//nv/XXuTgeAx74IHEthHhPQrw5eART5/gf/vSrXL5+EyEFUkqstYQQN3gAoyWreYoznuA9KngSLbBNA0VBJQIHdU01X2BtIAQZjfc+x30bZZbFBSSEWP6UUoIU+OAoiwLrHZW3aCWQRiF7Kd6WpMkQ7z39XsqF8xv0U4VmDYTk3GDAcDwkTAdYIbBCI6mZzo4oq4bt7R2KxYJyUeK9xwUQvZxbW1sMBgOGvT44T2ISiqLCArUVpMrgvCUEKIoSnQhUJmmcwnpN0JLTFy5STycUe7sUq56Lv3yBK5f3cFpSZH1OPfYIIyuxvqbf7+GcIwma4Z4ne69A2ZTN9TUOplNAcDCZMFhZA/FhpikQCLQ2KBEQUtK0JyQCvPXUdU3VNIh2kR8WM1ASZTRpL8U2nqYosCIgBzk+1fTW1hG9lCzPMUHEr4VDzmCtWvDo5AZ5nSBqR3X1Jn7WEKaenoM0BJwvEUEhbE2SGvanlp39hzicPsU/+r/9Iv0HB/yzf/odDq5JxPg24wccOhWIRKOkIcgcZySkBoVHBk/St/TGY2Sm0UrSHC6Y3NjlYGefwtaIseHUg6cZjUbs3byLaBRNpUjlKjas0khB5Sw0Bq3HBCcBCUGwtrZGVVV47xFAaDexvNfjaLKPVKqdbXjs1CkeGA4A1xrmvcOHgGstMgSBF4JD61gZDOJrCIEQYmmM3c9USx70iuACLgiEFBhtKK3laF4wrSoWBxNq52jkHDY1dVWzfmrjz9co66qEE5OwXGpCYJQiNJZPP/9prt3aYXdvilAKlaaYoqGXZggBo0EfjwNfg4+LcN7U3C0dWBmNu5xztJiTjlYxOsV6T2M9TiqquqFYzMl8QCcpQik2NjfZubuNMgapFTQWLSQKEV1dASLNKcuS6f4hjbNIKZF5zsSWhLU+o4dXKL+gufW4RH7uMYISaCW5ESw9bzChh7IBYxXrokf/ZqC+WzK5tcezzzzFW1evEYSito4meMJyAYj2C6QUKK3izQekNggtUUgkEDwgFAGLShKSvEcveLzy9AY5w/EQNIgUkoEhHwzIkh629lTWghdQWIyX2GbOnpuzsBXuqMZaCCbgtaFKoFIlwQsIAS/iaWFFwHjoVSnMnqCwj6DOSnq5JEwlbppS9i2hL9DjhJBAEBonICgBRkAQ4AW+hkaBkIrqYMbR9R12b+3SNJa18xucP7uJCR7flPSlRDSB4EGquJ/VdU1pK9KmQqYNzgdAUtUVi8WcvNdHEJBA2dTRqGTAE5YoSZz1EH/3vrUsTvy2M8juN1qq5fOc9RCgl/UwysS7GiD1hrHLCLbBhQVBeJQOOAKagPAO4SERgoDA1RWNa0h76X3Z2n0bpXf2w38RBAS4e+su3//e9+lpw0a/T5bnXL+xR7VY4BuLVILbN28zX8yIHkagNxxw7uIT/LPf+J2lsV84d4bHH32Ir//J96iq+p63Onv2DE8+8SRZmnLqXMHu9hZnzp1nejRDaY3Uikzr1t3wKKOwTUOWp1RNhVKSuraYJOP02jqhduzPJxQTx/yPHft/9g4ieJS3SG8heA6FRqsB0glyr/AqZTERPCA2aQ4bhnmKkgKLIASBwxNEQMQ1jxDRMKWUaK3jRiEBpbDekyaaft5Himi0VdMgU0OSZwQCHs+8mBF8wBYNfl6z2Dliu74LbRQ6m81QQdGXCVioqxpTB+x4hPQ9qBOMnKGQGO9IvMV5TdUu2Lh0AoiAqy2JbsjCgN/977cQ1Rbzu9sM9RZoDzJBoOKVSY+QcZF761FKIrXCOgdOsHdnj8N3biImNY2tWXnsLOcevcjqu3v0DgsKA73SMz04ivNkEnJdU00X6FRjF0eUYh8fdyysbTg6mtAf9OMuFjy1rUmShCADDs/Zixd56+o3uXT6NBt5zvL8OOG93GukYvlIZ+jd770PrK+us7a6Fh+U0ZyVFYjmAYLbA1mgCAjrIm4hAzKAEoIAJFKSGoPSknzYuy9bu2+jFCc+lGkBjIuXHiRJEqyHnd1dvv3HX2dra5ubN24ihOCFFz7NeGWFolhE18+k7M72WFtfp6xrVk8/xP/7X/07VBuXArz93jXefPs9tNHLHa0b7753lbcuv4MQgrXVFX7xCz/F4WRCmmVUZcnO7i6DwYBer0fTNGitCMGT5RmTownWNuR5jtaKvbt3kYkiNRJfNZgrCq0149GYPMkwyrC3t09VloDFB/DUzFjQaMnZSyNGhUeGmhxN4QQ4T0Dc4+KfnD+ldFwkIbpOi9mMdGQiYCYlea/Hzv4+i72KRVVSVzXOuTa2BO8gkSnD/hCd5ARhQTlEJTE6QagcKRSCEmeLaHBC4oNANBnzLGPHW+ZB0OBpgkdEBxoAqSQ6s6yde4sNc4bdH36axXTC6f5VrHkXlYCWBtkuONEtXxE/X/CeEAJJkOxeucV0+4BmUSKN4swnH2b8+CaqtvTuHLBeCAoDpXOwCCy8g1SThjl+7siTnNKBbteG9wFrLU3TLDe74EOML6VESEld1xiTMlsseOzcGXpagY+bTXvBP36NB9AnnuSdx3uPtTZiFO2KFEFAcxaYARC8IIT43OhWxzkNAhIT50sISJI/55MyzTLOnDnLeGWNy2+/y6Io+NOvfpPFYnHP8/Jeznh1DAFeeul7PPfM07zwzCMcHhwgpSIEiZIJ41Gfb33rZQD+/j/6z+kPBwQfKBcFd29vc+nBi0gllpPlvaMsK27dvM31Kzd54/XLHE5LhG0Yjccceo9SCms9UmoSI7HOYq1Fa02SJCwWC4wxNI3F4xmkKanJaKYTTBPoKYVxFjOWDE+tsX/3iM8+/9N85oXPELSkxjObHSHLQ6rL32ejDrxezEiCowqCqqzwjSPYgGjXa+cBSCnQShHdpbhGGmuxTUMtJEezaRsXF+xPjijqinh4CUSIPplA4QElDUbp6E4JhQyWYKNbrLQGoUBKnI+Ic5AZ73rBD/aOeLlpmEtBKi1DJxkss2IeKQVJ5iib26yvf4WNsxMWixm3r36bWX0XoRxCDeINEcdrXNBu2iFQlyV7e3vMrh+QVp5snLH2iQcwD5+ikBWjmaMRHqcUVoJ30R8QeAQOrWs2Vtc5VAsEHrzANY7GWgiSNM1b70wSkBGtVpClhvSE69nO/glDDCeu9uQjx9+7YKPbTIWUGGPQWkdHOLi4qfqAkHNgETfrIAgerA94v7w8vIhhS13X7cb7E3aFdty3UT7w8MO8++51vvxHf7Z87MzZTU5tbvDIEw+z2QaxK6tj+v0ehMB3v/MKf/an3+DTzz6F0YqytnjvaeqazXPnuPPN73LhoQv014YoB0IpkvGQ8XiECMRdEEGQcU82acaT4zEPP/wQly+/y0svv8qvfPFnCEiyXh+HQDmoyoaVlRUODvax1nN0NMO542l3LqCUwlUekShcE6h9gxoOsCrgQ8XmOEUlgYeffJgXfuFnaLRApIb5bMbo4IA3vvYtNiaH+CrFCI9XAess2ICwAekFwdkY5wSP0gKTSMDjgkcZHT+X9+RJyoQpRioSZahqG2M+Qrs7izZRAkEEnPQEBRJFwBFCwAkPMhCkRygoZWDqG5RMmeSaLx/MebUsuIXAh4DGc4bAg1KTew/SgkgIvsIFCOkMpb5HklvIdsCXSAVohxOhnckIvghA+LjT1NMF05t3EVVOb3PEqU9fwo9SGkqcCDQyxtwiCJQLaBfwXhBERPOrZg8pA8orTCXwTTTY4CxJloPQLIqKgMQLjTEpIfHMiwmJC8jQbTKBY9/1pMPaGmGIG+bJXwVAieMHOuN03mODRwQX3eQqINPX8a7GW0kjPI13NNbjkRG4EwEvYjhTVXOkktFS72Pct1H+7u/+Eb1+j8+8+DzPPPsUiTGMRgOElIjWaOLG1J4SQvDss0/x0rdf5rd//4/4+3/rr3Lj5nUw4LQHI1ksCtYvnUWdHmLuzHCdUyRA93tIBM18gTg5cQGSNOWxxx/l7bfeoT9a5fa1d7h08QJKqiX0rLUmyzIWxZytrS2MMSilyLKcsjwkSRKEULjGMRqNKOsaZEAZGWMr6ZFaUNUFXoGXAYTHKVBConxAOIfGotobV1UVzjqaqkGomD4SGrSUSBnQWrK2tsJ0OmW8usLkYC+eoiJmJ521CBFPuHZZxGhPCGQQiLhNE9HE7hQ44W4B1luEEkjvwXlcYnhncsSWcCyUwNUxPquRHNia1UTTk4LooluCd2iTRrATF0+HNqXQbQohOERQEKJxEuLpAIG832flwhmEMJy5dI5qLLDKgo9IZbs04mt3BiLiZwTBYjFnd3cHhj2axlGmZRuPK/b299DakOcB5xxl3dC4mjTJyPOEoqqX83ESyvnwEY023HNyxvXXPdJ5OXVdE7REhgapAk3dbpWCCOQgsAJct3F2fy/au+U9Wpt42t/HuG+jtNbya3/jVzh/7jRA9ONFfENOxE+yDWzzPGd4ccgXfuFn+Z3f+jJepYzyjL4CUcyQ7QW64FCjHO5OCe2uGwJUeMan1lFZQnEwQfiACCKeHUIwHg+x1lI3lslkwmxtFZMY6qImALPFHJ0Y4BjK7mK97jq11kgpSVQ8tXz7WZq6xtUNQggWiwUpkkRIpErw2mKyjMQk4ANaK9Ik4cEzlxA+5XD/AKEUSEEQHlQLojQNBHj88cfZ3t5GIMjSDBFoYw6Bayxa6Y4+cGL2PwykCMvfdOmpCCQJ0jQlD5D2NbdTw7fKA94pCibBEypB4iU61UjABh/d3fYeH04m1OkAeajoZcPoMnuHDw7nAtY20HgkAWVOLJ8Q4iJMFKcevYCXnkrWVBYI0c30eLwLy3ym9x4hVARP2jmobYNzHuE8tm6YTmfRE3COqqra2NrR1DW2aWi8Jc0yhIjA2Ye5qR95tH/q27WitQajotuOA5qTvguIE3drCbjH36ZpRlEUMZ33522UAGmWRMBCCNI0YXVtFaU009mM6XSG946zZ85wenMTAKkE62urcbc5OORiUbN+6jy700MGdclw0GfnvVu4u5Nu+wQEUghc1VAWJcmwR1I32FmB1gqpFSqANtHgTJKgTcLh5AitE0phQWnmRUmepXEnFBKERCqNdR5tEoRUOB9IdQu0BImUCmejy7y/vYezjjvbO1y9cgVtDLKXsqgrVNXEpLEPJBpSI7FZTnlYc+f2bbYP9jBZijYSoYgnnLUsJhOyNMFow/7eHrZuQEqUlCRa4Z3FKNUitycX1XGOLfg259bGdQFQWqFUazzeU9clGs8NYZgflrxloXSgEKQEMhEwQJ7mpNYjZTf9gf2DA0pdsj/bZzxY4dTmmECJEDbm5ZoG2bQbnHAgZXuCgpfgRdxQgvRIETBeRmBLtuvVgw7ggscGhwkKhSBISSk8N7a28Ai0C5TzgqaoMVqjhCTRmixNaeoaJSWDXo/DoqGUnsZ5LIGiqgB4/uEHgOhCHiemPtoQRIOUSrZhiGiBvIAMDhE8EfP1yxMyusRy+YYhBPr9AcP19aWR/6TxkYxSCcl4NEKEwLnzZxiPx3GHd56trS12dnY5c+Y0WZa1zB9BR7DIDqecvXYdLwSnpae4fYdhlrF1awv2F2SDIUmStmiXoyoq6qM5Kk3or69wWJRIEXGtEDyPP/EoX/3Tr/PW2++SaENZ1ugkpfEzTJoyn80IQqJNglQaH6CxjjRAlvciamwtWhtA4OsapXR0c4PggXMXueEgSTMeeeJxlNHUeCZHR2zUlr1BH3kXlPCkRrI3nbOar5ClKY8+9zTD8YjVtTEBj2saiumUt177IW+89hoSGA76hKpGZAlaygjcNA6tdHszTyLex7FRvPntiSCOfxv3s3bXDoHJfMZ353NUSLAATtLXkpVxyupwEHdxC8nhHFXb1sha4wyeqmo4dIeMVyWIiuicCYJ3BC/BBYQKhOAJBJxoAY/W/QvS4xXIFv303UW6ANbTWItvcRlJdM3nruburV3WN0/RU4ZqUWAbS6/XYzQasba6SmoS6rpGIujnPfYXE5LRABcETgpu3rkDwCObp5Zz85ENst0QvQ+RqECI4QsepRW5dXEenMOHBk/A+YALHg/EGZEEBNY5Gh/QScJiPruvt/9IRgmgpKKXp/TyHKVkiyrB5uYa89kEraNbOzk8ZGdvh6KJuUbhajK3IBLEAgOdYqSKa8vDgw88wOraOt575tM5b731Fr5qWBxMkMMhSmmaqkY0FggkaQLAtRs3+OWf/2nmsyl1U9Pv98nzDB88xhiSlq/Y0aROsjOUUhhjjh9zjqAUUioSY2JMWhY4oyAzBBkIdYJODcnKkEZHxFFJydb2DvMw55FHY5rIec/u3h5SgpYC31K16rpGhECeJnHyW9ffKENd12Qtt/g4rnz/gum+HS830Z4G3nucc0gRk+BOGnxI0UIiZU2eSjZPrbA+jMn3cLSgmRxF5FO0nKMTaZw4X/FkjnlqjRQt4ink8lo6qpr3LbIsPQ4Hgfh8qZFGo6QgeIu3rg0jYlojxndQ1w2Nc9EVVzFmdc4hhMBaS7/Xjy5gCFRliVAJ2mhMmuAWHu+jKcD7CQIn/8GPtdLDqubNa9dZXVlhd+suTdPQG/SRSUTOnbM4Zwm+3ZBCzCW7Nh1071sJBsMh7928RdJYHv/kMz/6jU+Mj1glIjiaTplMJjRNgwiwdfcu89kMozRpmiIILOYz8iylmM+pywaASgZqJZHBIK1CHk35q88+iwuet9+5hkkzjDYsZnOsbY5D7rJhsXcQFzXgRLh3UkPgzp073Lp1C6kUZV1RVzX1osDWNULQunYtWBECVctO6oZvJ1dKSZqmpFmG1Jo0z+KZJKILHIQiKAUmQWU5QUhEiG6hCIHQGpJqqV4xj+aom4bGWZI0xSiNDCKeNEFia0tTVhghcda2eS15z+f7kYBFiK6xEhIlj3O9QgjG6ZBLm5e4dP4hHj19kZXRkH6eYrRGK4EmoEVAKbE0SEQLurT3Os4NLa/XIoVESY3WSYspiJYDrTFakxpNYjSJMhhlkEIjiJuclAqjNEbGc8DaePI2zranC1jvkDK6h3VT4Vw8cUySUVV2uVl57wnB42xNnqfMj2JxRCQZcOLq4wIXHzp9H3RrBVA7x3SxQGtNMV/gvSfLUrIsI8tSEq2RNuZGu68ANN61J+SJFwsBqTTOR8Q9fCj98oPjI52UovVFq6qhLCs21jawjcVZh1IKrTRaSibzGevra6SJwtp4UmoPveAIogEc0knWdQoBFvOCuixxvYZr167inY/uW5BoF+KCb+OOeAWeXj/j9NlN9vb22dj8aXZ3dhhlParGogKIpsHoPkUZb1QIMR+GiJC8DxYlY0qhW4bORdZ/0JqyqVBpQuUcMkg00dBUkiCShJXVNfaFwoRAQkB7D7ZBiEDTVEihY6zW7dhCYNIEJRXeNzRlQy/P8bZmd2sruu4hkGiDUYqqscf3lpjz0u9fXO1GokQkfXexQt00eJXwxIUHkVYj3Iw6HCBspDhWZUAHyIQkGEM6bSgVCBWW8yOCgODwLp6FPng8Np4IXuNtPB2Q7bqQMQ2AIIJmIeBaPN26gLMRkbZFgyASFeImC14JHJHqFzz4EFNnDoEPCo/CpAll4+j3M+aLOThLs1hg1nIG6RC/OCaMnxwyvP9gFO0+d69j2/3LnYj7XIgcZSEkwbVosYfExrXi21yk8zGqdAS8iLS9LrS0IdAET2IUqPs7Az/SSSmFQGqNNpq6blBasbqyyvr6BtZakiQhTVPOnD1NmkeS9IMPX8IYzR9ffhc9HEd3rYXSnxCW1BjefvMdDg8OyNKESxcutlxHjRAaIUxE6NpdWUgBUiC1ZDgaMp3NyLJ86XJunj6NEgopQGsVXdITKJpSkbnj2se99wgZ3bZer0eapkilqJqaNEupmhpnHVooZJuUD1qTZlnrLnmMbHOS3iJVXFTgT/CE4ykktY78VyI7xTuHc5GCRvdc65E67pXdydcBKfcsrQ5xbU/lkwgzwNF0xvUbt3n38nuRZWN0TGRXFWVZ4JoGoRTpeEDZN9RGxM/Wnbbt+7polTHW9I6qrCnLmqquI4G+qqjriqZp8NbhbdzY4sYqUEKjZQRzNBLdIuzI1rtoT2cvAi4EnPcIEdBGtQYKAUltLXsH+9TWRjZUsExFRbbaZzwcU9f1j6jE6Izv5LkYju/Nia8QAt+/eZsQAp988kmsbciyjKZpomvdNLFCJ8S40bXlgC4so/w2bI5uf2RTxfMzy/PIzb6P8ZFOyg5dcj6wWCwIIXDm7FlsU3P79jZKKcqy5O7WXUajIb28Ry8fcOniOd68dZvF059DH+y1r+ZQ0216acLBwSFpaijLiqJYxJ1ferwXLUUqLN2lEDx4lqAPsExtDIZDhDZM726jjcEkZvl3QsQKDe8CqnW1vXfx9drFrLWO8DfRvcrySNdzjUVJiZYR7JJSYvKMllRHog3BRVcHAcF5eD/VLgS0jN6EFBIpZKSltXczhHiTG9tgdAf2nMib/QgP1vtj1/sEGo8Qgv39Pc5vnGd1bY21tT63r79HcbiLryyqJ2GUMj61gd1cx+8dsL03wS9owd6WvNC+fjc/HSXSGIMyAmRkrQQplqmB0LrETYjxYSI1qRJIJekrlvdt6SafyBdqpRiPx0CM4bpStvl8TlGU0fh9+ziC6miOmJfYqmprG08uVk6g+u0QnQ2Ge57WjZ3JESEEUmPotwBT9H9Du1ZiBO3bHKQXJwy8m/8Q6X8qbUu2hKDf7y/X1k8aH+mk7HJLznsWRUndNAgZ0bqjwwmEwI0rV9m5cYut6zfpC81pnfJLP/955mXFb+41lCqNpyUBu3OdX33+GebzBS+/9AoeS6IU48QwxrEqG04JxxkN5zLJ+cywolM0koFSPP/MEwAcHM0YjccATI8mBBHdTCklSiu0NkipIESAQslILIDQAhksc2G2y586R5alcZcsSg5299jb3mZxNOVo/4Dd+RHWSJQX9KRGBvBSRPfHB4LvWC/t4g4BLQR5mraFzJFQLZD0gyYJMtamhkCmTZvn5B7fy39ISLJcDCLS+LrNyjnHpYcv8fizjyPzDJFmmMEQqzULETgKnqqXwvoq5tJ5xk8+wqXnnuTs2TNoIZAEZAgtoBGN3hiDNjqGKVqjpIr5RUS7bsUyYy58iCyfxkHjCPb455KCSJtCCWCDQCAZDAaoFoEW7UbTNDF3Gdp5DT6AE8gG/GQBB3NE45Enucbd3L/fxThhkB82uqd7H4HCePpGWDogEDYirE3w1N5iOa60CR2ZogW8jNH4tvbTJMkSa/hJ46OhrwKEkIj22K5dw9HOIavjFdbX1ikWc+xkxumQomaOkSvpe+hffIDz587xuy+/zF/90s/Cmy+3O5Ynk/FEqYuSW9evcsrBSvCQRGaNkhKtBVpDKSRXXUOJINOCxx44A8C7713hgfOnMEpzsLtHP8sYjYYsioIkMfQHfaqyaQ2uQesIdSutEJH5Bp1L6T3D4TC6KkRCwcHuLucvXGQ8GpG4hlDNSFYGNDKQBEFPJWihcFrF12hilUqIJRTLnVh6SEyCVZC0qC3ekzmJFpq5jtzKRJnl33ULWNwLuN67kNqTTLXAkwiCU6c2OHfxNIfFAd45jIL+xjqOmoO9HRj08f0eRy1Dx6eGjbV1Pn/6HN97+XXeuvwOIdhuS7nnvQIhuqo+xp+h9W9991mlIChiPk9KZIicUETA1jWucSipaJylwuOsx7bEh8iMKtE6jbFnC6YIITHKoJXB2YBtPMGBcLHkTLmAlGpZDBILkcTSdTjhuC5Pyw+b0A8DaU+k0LFVTWUbFrXFtrRBT5vCag1eyBjjp2lG6VwLpPH/G6M0wz4MM0TZoISkaRqSNEXquPiK6YxBAxukeB9Q0xopAz0tefKJR/mDP/4KN4XiUREjZCcCjw1zBLC/s898b59HpSJFslCWVDi8NkwJuEYw9RYvHHlq0OrEJiiIUg3W4Z1r0x0S52NFCxTM5wvS1FDXDbPZjMaWnNpcwxhNVcYT3znXurUeby1CREi/l/c4d+YMVgqyukT2DdWFsxymObasW0RT4UQkmTdNg3m/9Zy4207ECgQpxZKeKYRAG0NZFGgl21hXLv/sJ+F23YkcF7Lg/PkLUQbFR6MJAoRWjDY36K8M0UqikoSGgIjMO2bzGT5IHnvsIoeHW9zZ3or5quM3Of6nlCgloK1ZbUspozcVobTIVqLlvniPUIq6sixqG6s6rKXGY63ASYlHYZtINezGyfBDqUiSkCISwE8eeB3y/f7KoqXrf3/A54k/jMwoY0zEMejidRHjRHHsGJy8R93m2HhHnmXMFnO8j4Z6v0b50dzXREE/RWVR+qGualZXVqnqhv3Dgwhzh3ihU+nZVY4tAkcOHnnoUQD+9OrNJT9FB8FD9RyAV197C+nAoJkGyZYTeCkpkFyZB96eC7YLx3qW08sM6iTjPsBkMlmW2FRVTfA+QvDGxNPJWoqioiiqiB4XVZsjaydCyhgjnzkdKy1CYDgcooWILq5oF70PSJFgVjbIkwwpBLk2JC3yaa3Hu3haAct4Y3natKkTFzyIiCY74oI2StMEF923ZawZgQ7fpmTeP04SDAQC2aLgeZ7jnUMJEckJbYxt0px8OCTt9RHGxDQPsSDc+0DT1EglePChB9D6ZHXhcfQlQmurXiB8/KxSqFgr2qKby+qWju9KTB3ROGrrmC0qautxLoZEJk1ZWVul18tJ02R5PCkh2rRPG7uGFnVqP3a3GXnvP+CpdpfdxXlLKw73/v7D4nUhBXmWkbRhkNaafpaTSo1GYnRMAxmlukKt4xi5vT6TZXgvYp5WaKQ0H3KBHxwfySjtrMDvT3FlRbFYsLuzx6IouHL1CouqIAiPFGAl7CvLlrZMFeRaI2WboEdGJj0BY8FzXGOWBBAE5lIzUQlOG4LQNDKjMRqEIQsaFQJaHdcBhhCYH82pqwatdTxlAlRF0SKHEal0NrQV91HzJnjBfFYs745SgsFosCTzj1dWSIRiOptHilSIolsBhe/10DIg8JzBkKjIeSkKh3UC6RUiREPvwBKI/FJq2+Y/JTJIrAQnITcJXgryfp/M5MigokEicULiu535RBzJ8urjSegJ6MSQpQm2rkiUZJBnDLIs5ti0QakEqQwQDckjcUFQlDVH0xlNU7O5ucHaymrrDgfAgfBIGQsOfBMxf9FqJ0jRqigEiegutLswTyywRmA8yCQlyXKMTmNaSngW9YLbe3fIe1kUKvMNwTXR9W1qjJSMBn3AIUSkBqapQWtJ4ywowZkLF7l15w5rwyEXx6P34a3tpYQlDf4D8WYIcgk4SSGiEgKuvQORmJA6z6oTaKMwiSIzGiWPPYTQuvFCxbnWJuWRR59gVjTs7k/uy84+kvuqE4OygcXRlF//1/8zzjn+4T/+e6ysDDBB0kPRR5IFySoJR8qTBhgKyfzwAIBH1tdwt24BktTFPE4Xd2woGT+gEMeCGkIiuoCqXYTKe9BqmQYIIZDnOdPZjCRJIjdSKZIkJc8ziqJmPB5TVxbvoazmS6S0Y4x4HxDC47xDJ4aiaUjTmDS2Nrpb8ZZFPqdVfQ7znKO0ohIeE0ALwWw+p24cdd2ghYyxpfdwgliQZRlKgu6lJElGSFJkLyNJE7zSmOGIzY0Nbt+N6gLdSRO6PMVyEcX/8SeMPoTA+vo6SimO9vdZWVkhzdI2i976fG1RrvOeLE1xrqFYLFgsFjQ2khyklGxsbLB3eBjvgwRtJGmaoJOIdhutgJhSCkK0Sjgx5YWPlMFoqJG8rYMgEQql2zRXgHldUuBwOGxw3Lp9i9FKdo84Vqyn9Vh3nIv0vlWSE5GV5YIn7w3Y2d/n0qlTjFshL+hobx1ueuLEXE5nfKYNgd3JtD0ZDXUxj6mz1sX3dUNiPeO0R6UcdYjCcErK4xxS+0NqjZCCWbGg1prhxiny/uD+7Oy+ntUOZyRHxYJ/9+v/M4t5QVmV/Pf/z3/NP/1H/yWP9Mf0gyQTAelhXRisbNDe0Q+eV159DYDPj0e4O546RHZOuPUen3v8Yb79zhUW+xPMuQ0aKYiETdGecq38ovCRHULCzDkWTUROfQicO3uW6XSKa2ryLGMwGOB9hjSastyOdZwteBPdR0fnCcW4JfqLe3t7WBcZ/WVRoKTk9ddfZ3V1jTRLuL2/jas8zd4uN03GrDfkGgsWueHU6ibzWc3e3i5VU4D2kZoXPKFpsEezyOFcX+P6jWtsnD/LoN9HhoCRklRo+kJResHK2hq37t69Z7d//3g/fbAz/kRrvLW4uiF4h20aQudzBqDdKGzToKTENhXWxoJwZ1tgQsLq6gr7hwfRfZSC1BgSHdNMUkhUkG3818bGIuCQXNy8gCLhxpW73Lm1RX/Q4/nPPUWeafbfeQkjzRJoSbVhIT0mSUhdJHUkiSF4G70SF/PNwcbcn9Yaa11L6WsLs5NkKaT1gTla/jwuLj/2WON2Fw0VCut4+e13SIxhsrNDmrQiXCK60TIEVONJQiRLCB+wzrXklhPv2d40FwJHR0eYAI9+8llWN07dl519NKM8mPG7f/AV9vcO+b/843/I9sE+//zX/y1f+dq3efRLv0gT7DI1NJGBmfL0fNydlgG4Em2FdqAE1GJKPlqhto47ZcETXqBFu7sJjQ0SjyNIjRWWrXLGopEECWV9HKftbG0zb+lRO1vb9BLDZLLPuK1S8d63LuiJuD8cB+Ddwq6rEpQiMZqmrjBK8YPvv8Kbb75Bv99jfzYheIHyHl012ESyWwVCqhmPh/hmypX33iXIgM41WS8leIeRkrAoSJA8+sRjmCQlSIVIkiXSGt36uBB96y7GmKhFVTnOh0kZ85ydpKJrLME5hPcM0wzqClcWNGWFszYaJfGDizYVFNqNShDzalVVt0BFJJ+MxwOUAIJDBo/woLxA+RYR9TJW07dun3eOC+vn+b3f+iq3bt6+Z+289M2X6fV7/JO/9VeZvfsNgvd410o2moQkSciILmkIkUEkhcILgdaKxkacIJZ7nSzBi0CTdZZjwbLOv+iQ1g/S306Gl52BdjlriAX2deVJUnOsGNAS6Quloh5v+wLd5g7iGPiRMpahEUh0LOUr6uq+7OwjGeXW9Vu889a7PPzAJcL2FsOm5sEL5/nmS6/wMz/1PCuDPhteMZCGA9FwJCBrD70ux+alQBKlB72UaKIYBMABMPMSKcEKmKJY+ICNHDKkA51p8JZTgx47WbacmPWVFbYP9hi2UpBSSJrGLt3Tjr3RUax8iBOcyOhmKC3b3ThWTKhEgfdoKSmqGussxWK2fL/aeyqhsCpglcI3DU1RkBjDxQvneOTxxzh17hTnL53n1s0biOARi4qv/+lXeOPNt6jqiksynjLxfgosrasmQovwxR1EdCkPoqtUVVVEIts8XnSxHOVigQqB1X6fg4MJorEoAgRHV3ZEm1OzTROLd0+4cj4Q6ySFJ9QL5odHeNegZMA7TzGbs3N7i5XVMUpqgpScOXsebVKqpsQkGf/r//Kn7Ozu8sTjD/GJxx9m2M9x1vH6W+/y7pWb/Ovf/kP+7kOPcHDjWqyHdQ0hKIqioETw6CMPczTbAWJ6SascIQXW1iRt6WD0ECIVM25KMZ1FaBk9S8g1nDC6Y6Q0pjeOVeyOi62PjddZx97BHuOVEUliSKSgqSwUC0IVGCWGxjWU3uKDa+9jy+yJbh07+3vUtmGYJAglIw3xPsZHMspvfPVbAHzxcz/F/GAfZ2v+2s9/nv/u3/xb/uMffIVf/tLnGQ3WaKTCB7kMYSqg8R4lJTJEgCNmciLzI23pRwVwHU9VWcpg+drV29QELFFKIQ2eRW6YNBW3gHevxjIdKQXr6xvkW7dJklg90glnxd+3+Nhx/iGKIjlHlEqKLu1sFgtqs96A2e6Cr3zlK4zGq5GqdxLsDbRsoO7l4kK5ffsWPhgeefhRVldXqeuG7e1t0iyjnM1wbZw63boT6VknGCih2+dbVFacQJcFtC5SwHlHWUZmS+jmVEpwnmo+5+LZs3hnKYsF3kWCt/+QWNQ5v4xFuw3LeU9RzcmyFTYHQ+rtSdTzbStzivmCophjTIoTfRaLOd966U+YTmesrIzZ29sHYDQa8KWfeWFZdK2Azc99mrppeOOtK9hPf4b5e5fjSR0cPsTYu7FRvaFpGqSIVSM6yxgM+kynh0uB7VgNE5X0tI5qE85asrwPwIVTGyfkwGiR3GNPoZ1w3jct7JUl1lnOnTnDbDZjOp0yX0yjvhKCnodNkWFdYNEEvPCRr9uRJ5YvH6jqiul8RgBG41Fb1HB/eZmPZJSHBxM+/7OfY3bnDqqOE+du3uSXf/7n+P2v/BlvvfE24+EQQUs/gq4Wl/2DCc898gjq5g0aDwSH9QKc5VeeOsOXX32d3/mdP+H2p5/hB6++znQ65/Bg8mPZFwDnzp5lrT9kcjhhNBxh64r5Yk7dNGyc2qS2TVy07QlxvF1GKUAZBKKlDZZlSZpkeOuYHU0p6xqTZASlloBAaNGWjqoVf8aUgLUWIY4Xum0cs+kibg4+ChgKbWKOT4hYSS/i/rr8mCHKHEq6sqb2NrcrKJZXxRRHZ6wQN55eknDp4kWK+SJKa2YZWmqae9IaLAWhIMQNp62Kd3VNMZ9TzGaoLOX8+iqp0hRBEoiyJefOXeBwBq+/+XJ8Lb0Cco29SYXQawS7z2y24KVXXueTn3iUXpbETQC/TEFZ5/DBd1mmltUXT/HDySEXL53lzp3tKKaNY3V1xP7+FkmatIYZq0TyLI883LLBuoBtywT3p1O8CLF6h4hxLdlQLYOoi2lPyoFc3tqlqhvOnznLu6+9gWgpnchW8sOBSOK9sc5hMg0+ehEs70870216UEpJv99HhPDBgoIfMe7bKD/17Cd54MIFtm7f5MrePo+vboCzOGNwzvK3fvVX+O4Pf8jV6zc+9O8vnDvL3/nkJ8nu3KYQmuBKVFCooOm9/gb/5Ff+Mv/id36X3/5PX0YIQT/P+ZnnPoWTkWRwnFKMC1UISZpkXDh3iSuX3+TMeMzDZy9w/c5Nev0+QUo2z5xjZ2cbKeecAMXjYm79DBEErvEooen3BqRJyup4Bedg7fQpnJBU1h1HK9H3Ob6xAWzjkdIQfEtOdlEOUigVPQIX38tLBUkac4PBxdpKcbxAliJUIS4o3zRIk5zQW5LRCF1k1KSJiQvOxwVwemOd8bDPwdYutq5QWY7SSass75aUwi7JbYyh8S1zIAh8bfGV42jnkDpP6fVHnF3Z4GhyGy8FWmkuXXqIf/dbX0YmZ0jXvoQ0K5F47WpAUu7+Dr66zndeeY2r12/z137p82SJPo5pOU6wixCFqoQSoBXGw3x2RK/3AIKIhgvpKIopWZ6Qpkl0EZ0l0hQD1nqcEzgXxboBirJqgadlCNlufsfu7PE25U/8u0t+Rj5zP8tJ0yinKgOk1qMrixIOqRR53qOYT3HOLwucQYAPJMbQ+IASjl6vhxEK8+ctnLXW61FOp4z6fTbGK1wcr3I0OeSwLKgPCq5ffoenL17iL33up5Fa0PjoZzsVVcqYF9R39+kPV5jP9nBVAB9V33xV8/DWu/w3//C/YOtgwi8/tEmiAn53wld3D/jW4SHzoAGBVgnCG7J0xFNPPoseZAxXx0zuXGMsHIPBIOYqgcPJhPX1dfb39+/5LN2pJ3zAtGJbgqigYBtHsSjAew4PJ6SDAZ5jYbA4ZDTKVsGN9mzz/pic7JyLWj3djQ6AlFFkWUb3ua5rfFuweEJBYvk+PnTiwKK94viLqAjYxHcVbfJdKU6f2qSYzbFNjbUNfd0Wh/t2EQNdYe49rSdapT8ZAAf7u3u40yvoRDAaDFoSQARYFlV0e9PhcyTZ5hIcUTrDe0++9kUW2/+O4Ap29g/4T1/+Kr/2lz5Hr58uP1+iNEnLFw4BqiBI0pRxoiiaBbPZtJV2VBijKMoFq6sRDHQ2aihpHeVPjDA4GxsL3YuBHk/9MsTsbkU4+dwPcynFkkzi2qJr2vu9LFwQgsV8jgueoi5pWoQzhJhVEK08i5QxZWOUilzg+xgfoZdIzmw242hywLZv2C2PkCJw5842i3mDDXA0m7K3t8Ols6fpCU3qA/1gMZlm7BSndYpWPZTKCKLA+YIQNIFA35dsHF3ngeDZfWuf2wgan3C9aqi9oqu6qKoSXNTv+c53vo5TAuVr1nsJN69e48KF87i6xjU1rmli0TBdQWsAKdAonJdLTzaeHDLGMKrhcHKE84G6Kjk9GLQ3CEJLvgbRFuDGmx05l8fShh2xXScdI6YzqtiQRrZ52Ei0dq3mywd30R+ZCum+2oS1EII0iTnVYnqECxGqjxqwRMGqcFwcHDrRihDzpsGFWLbVusJFUTEYDtBJq/3T/oW1jqqu2pk8li1ZbnNCoJMVhF4nuJt89rlP8p3v/4DX3r7KF1/81PLzGCHp63hfvAPfOOaLOVMnSXPN0dERUkVkN5bfeXr9Piwq5vUCpRR5nseCCHFMVeykVDKTHBviTxjdU3wIXNneAWCY50giJ9j5QAjRKGN1TxRY7mvDAsu0msd4sUV4g/eRnSUlvgkYozBat5TJP2ejXCwqdnf3mc9neF8zLWaMR0OG6+v0hnDnzhZ11XCws89pnfLC+QfYsIG1wpJ6WGmg0JpZXaMTjVuEE+6UYFYE3tyq2CbFCkWJwwVLA3iZEVxNWZQsFgXe+vakiTm1hy9eQAXFrZs3GWUZWIurKvI0ZW97FyUlRqljBpQSBB9PMakiGIGLFL26aXAeEJLaWZRQCGVwIcpdtCbc8jHbZLnUUYirVev2wWFdgw5mmSLqHKcYE8XF3LTE9ZN8zWPxZsm9fJQPN9HQXkc/y3HWUtQVZVNzMJtx6mLS8lHvNcrjUqSAajmlwp+o/QySNEkweHxocBICkvFohZdeeRWEJskvLilvoeV2dluPyh/BVzcxWtPLc969dpMvvvippQUopUhVNMp5iHxm7zxNCCgPBwcHKJXgnCVJNEprmtoyHI2YL0qEVDSNjRhAli3xk7o9if7ypz6JER357f6GD4EfvHcNIQSzowOMlqRZpMUJ0TZOChJR1xgjlnnt0BFgCd1/0BLxjdb0hkPKRYFOS4Js7uta7tso797dYTZbIIAsyfns88/y2KOP0DSO967e4uatLVwA6RTXbuyxqXqUa6tcT0F5y5m+xjhH7uIOpAhI4UB6RFBYL9lFMU0NHosNKsooOI+3jsVswWQyaV1LlkwfITxSORyW4C1HBwekRiO8w5YVk6MjlJTkWcbRdEZXRe+8o7YWpU2U68eS+ZyyaqJinjJUhcM2FilU1CxtgZ1YuRCNS0iQ0rfiXAGCxznb8mWhC27Ekq8Z2kXU5cXEPe3bulXUVUd82DhJKAjEyvfxYEhd1VRNTWktMkkYr63RuKYFko6JBtEoo9vposT3iVSDIAQZ+4LYisY3keSB5MIDD/Pata+ieo8hZbq8gk4qMpbHBfLBU9jpd3nrvaskxrB/OOXuzsHxSXGyeBuWCrBBxJKzuq4xOlYJBSJSfOfOFg898ii2zTc779sN7zg8sDZu8kapNjY/nqj7NU6INqYkZFnablQBbQPSBoySaNmmNwLLqpwuk9Cl3UySIJ1jMV/w2g9/iDcp9U94327ct1EeHhy2p0NAqZSjyZRXXvk+i0XF9u4hzkdOpBUwlYFvTe+yvZmRJ30SJ1kkKaqY87gTrKQZ05Yl4UUXK2kCGYKkrUfzS63MYlHE3pNtbw18K/PXGkRZFQyzhP6gBwSyJMGHWAKUtZSx+Wze7pz3xn3OOxrboHWCVh4hLM4FTKKiZEU7yV2lAkRNmuPcZ9u7s3VfOxJCJ8wVTyiBFC3AoToj7Fy+doI79K51kbuKiNDW8R2P9jxaVi7EDWptdZW6rmms5Wg6BaEQUi5pYssFxwmECpZIdDdsY1EyGmlVlVF6Q0aEWaiIMCf9VZSMsovRyI+vz3mHMRnJ6LPsHfzJ8n2sd5zdPMUb71xjpypJ203Jtm50BwR198YkhjzPkB25w3nqqutP6ZZ0O6VUa6AngKSTsxX4cKL6vdN+D/gjEkXQEufs0uiFYNm0ttvcrO8EtELrhUV2UWOb6HVVFfl4wIVHH6O/vkH95922IELDEbw5ms743quvErxDyshjpFuUsqE3znjy6UtIaSiFp0k0ewSy3OBriapNrOAXMhpkEBhfYcQChIlkg7ahS13HJLdtGoyJ7tBiXra7c3R9O6L5gw88RFNVSxGlPMup6yaCGieD7BOLKEkSivkichXD8aJQSiFDZMroLMrqd0YJtLWXxwupa6QbAkupESllK4vRKRBE1PieHKRoRVeXp0g8MYLsJB9PuLbLZx2flRKJloIsz9nfn1MWNVVVM1pZizq3HQOme4UAJxqdnFjAMc60riLFU5eOw6OC2WyOFhKdpbz5znsAZMOnWgpcVJbTJ1UhQqwT7Q0/QX34Z4Rgl9d+6dxptFJ84+3LfMEkUVitBctUO7/nz5+m10+oSo9JSgajIcPhEOvjHDdNQ9N4us2x3+9TldWPPgrfbwfhuPi8o9d192a5JnQS01gn/7adfOcd83pOIFBJIvnhxPsIIVEmoXGeyjpOraxy+ux5zHBIfZ95yvuuElFItPTtwlU4IXFKY4Vo6WFxtzt1eo0HHjjLUKasyYTUB7z07GrLRAms0wQnYrUCUZBKB0nuAomPcvwiRIJ4pHJ2izUgJGS9lMGwR5YlrXxHQl05ikXF9Ws3uHrlOk3TcOP6DQ7297l7+w5N1aKcJ9A4L2BWFrHMKctiFYCM2jBKxcBdtAYmwr13Z8k1DdG9jt2ezNLl/KBeTFj+FNCeqjKSsmVXcShagwwE6QnC49uvkzWNHolDxljGgwyBYdajrGvK2jJbFIQgSLNerOpvS6viZ/dI0TbTCZFcHxvrxOY6AoeQDQ89eBEtetzZLykrhwwWg21BHmIpEmG5NUhxnA/sUEutM1T+8PEMhIjkPv7wA1y+cYP+o49TB2h8RDV125Tpxc8/wed+9qcoqprpfMG0mDOvFjShYVbM8N6TmIxePqTfj0h7rMRhmbPtuKgn622XVeKB5XzHxkmiVd4/vsdN1WCkjsyqTiEieAgR5yiDpQyOKvhYpN3m5D1QuQaZpix8oAqS/soKKA1S4+7T3O6/vbqGM+c2ODycM1s0BBHRpE68PS6qQNIzrK6vQdm09Ya+25OwUkW/2nmUZwmJC6Jor6JLpId73MylVk3rQooT/1ZStjV57U5qG1bS0fKkMsZE2cg0QbZCRl35TlmWCAF5llGUi/hZQlhyHbv8lGx7pRy7vccc1JNbdHdNXcu27sR2QbT5xPhh8zyPPNXl57n3dQIsNWBE99mPz7rlDu9DQAbF2TOnaZqKebmgaGqElAxXV1r1cofqWjK0RZrxfsRTTbSSjpH9Ay88/xzPP/Y45cERR2WJbZebPKnS3mXkhFgi2/G0EEtRNCEEUo+P/yYEhJD8/IvPc+vOFv/qpW/yv3nkcY7efrstWI7hxG/+xu8TvMK7JKYbyhJtNI1tqJsSRFSNOJodEbAMBr029dAmj9r60Z90Jgk6fKZj44iTdzJ6O1K23F8RjRKHxy3lIm0QMcY98Rl9u6Br7whK0h+PYnowOPL+6CdcVRz3fVImSeCxR8+xsZ4jVQQx7qnyFrF8R6Upwah4CkZ2FgiBFBKnBHNXk0jFUCX3UKFkCKjgY6ciKVqJhQjK3INvn7CFbqcWISZrjW6/TIK1jo5fnKYpeZ4vRZ90W8TcUctUK4ffnWKiBRyWkpPt8+IJebxRCDrd066aQLCxsUGWZciWoxqV0CqKsqBYLJjPF4xXVrh48eIJg/yQ0SW7P8BoWpplnDel2NjYYFEW7M+OaATILOHUmU0CsdeJEO380up2hzhnIriowyMCjbMM+wNOjda4c/0224eH1FrjW5f89LnzTGdzpF5DyBYAOblphg9WaQiRHF91iOGIkoK/8vOfY1oseFdCbzxuwRwXsQTbAx9LtyCW5B3ryyqC921zJrEU0w4Bzp87zw/evEw/TfnM+bPx/X/0cv7AjN5z3USZzs7NXR644d5nHYtVt8uJiMYjIuNHqthnxjmHljHGvJ9x/01jXaCvAqMs1jzijj+QF50bFNoGLRGtCxGaBCVbNTiNywR26knbHarzKlTw5I1Fh0AZIp1tqRYmwjIO60p0JCyRsajNGUGfXh6R16qKkoBCiLYMK3ZvcvUxSNAVH9dNbAEf9YAikV1Iia4sTRkFwvwyD3kcV3bBfVz4AWM0586d5c6dO7z77juI61G9W4SoMB7V6yy+aVhdWYm6qULGnV6c9DhYfsXPGAW27nWDJUoKxuMR4/GY6zduRNaTlOgkaVuv2dZYBCI4dLtxOu+WAFZXQVFUNb6o2N3aIVQN3kiqxsVKDQTD8RqHkx+ge4+ipL6nhrOr3CBEBX3aGDobPkE1+drxGmpjz9Oba7zwzCf48kvf4b/84pcQLx1SLtHM2ABWq4hSq1afR0m9jK+7UCEWXcet3ZiEoixJlCLRx2fNj0VdQ/wWV+/JZwqss+Qia2kh0UU3SqOaZllDKdpNOiovtCYRQEuFbyoSbVAtkSVS/v6c3Vca0Lbh1MqAd/QhhbMntiK/dIomBxPChQsEFE4IkBFfztOclcGQlSSQzqaw6D5+HApPUldoH9q2b3H36YrYO7e1i/U6OForiTKKICVZolGlRfkGRez3oFVssS6Ahx56iHeuvMd8Po8T52IViRKCpq6XJ4j3keHTtwHhPEhxQoFctGmDsFyYSsvIy9SSw8MDrG1YP3WKM5cusrK6wspoBD62lTvY2+VrX/0z3rtyhdhlykYXidjYaKmmxtLJ4PiRe0cg8MgjD6OUXOY+QVIsSiaTQx64eJ7bt28zPTxcVrBkWYqSbcqjjYVcgKooSRxM9qcAVApK6whCMV5ZZ/tggpAZw1OfjywhF0uppIgnRteFbZmhCIHEDJHpeXx1a3nNUsRa/uc+8ThXb93lP3zz6/ztF36K7de+v0wVETx1XSGVbInnAdXGjs475vM5SZJQtT1QIngj75mZ5an2Y4/LDpo9VqSLD0fkvCubkEQywEBqhPMIE0BImkYCZbsu23UqRfSUFsXSY4qCUgFf31+e8r7dV+8D06MjRsMBSdvx6h6Psv3wRVEwn82Pd34RWwGsjMeoxDCrS2Ri0Fl6z3yZ4ElsTeYtqXdsZBk9pRHSIKRGIpc75TIJTiBLe6yffgzdv0Cer9MfrWHyAY8/9Swra9GVDMRdumu3ADFOlEK0OTGzNDIpFSZJyINkwycMrVpqvcYY8N784bGmbDw9bt26xWQyoT/os7G+Ht+/RWe9i+ViwR+DRV17tGNMQtzzfyfe6ESuM44sy1hdXeXOnTsUZblECLU2jIYDjDH0+z1WV1dIEsN8dsRiNqWXJZw/d5qzZ8+w0u+hG4dpPCOTkilDYlIWZUlVN3jnOX3xEt95+fucf+Lv8OJP/zJra2sRZOukJtuU0DLWb8EepTTZ4DEA9g4n8d51YIyRvPDJTzAvCq4XC3TMu6CEWG4cHUuqwweOK0TcshrIGEPwIZ7Q98zh/Y3umZOqZlFWbKytxw0q6ZQL4k5jkGRekgfJQKesrq4u6XdxhOV6MF1HOGOW3kHc/P+cFdIbLDu7B6RK00s0KhxfSPSzYoFuUzn2d/ciYCM9OtGkJqGsKmaLOS5REbmqbXRVQueMgfGBNAge2FznV774s2yMBiTKtOrkXbFXVzYV69isVxwVKTsTSRMGlGZMYVaozAqNzEDqiKzJqLSyMlqll/c7ohmubXHuWrCgriqkD+QNjFVKT+X3pCV8K6/5/rKnblgXZSqnsxnOB6wNlGXFYlG2UL4Coe5VaBcfND4pDUplCJEiRYrovqQhSI2XEdG7c+s2B7v7TGclTVAEkcSNMDG4piBPDXlqePDCeZ56/FGe/sRjXDx/ll6a0JQFMngS4ekninE/p58ZhsN8Gc8/9alP8+3vvczqmRf5zIt/g8SkrK2tMxqNMWmLgLdyHNbZiB+04l1CSHqjxxBC8fbV68s4XLQI6NrqCoNezpvXrnD67NnYFlB3OeB2gQpBP8tYHY+X7nJsKiWXsaU7IZq1nMkfaZf31ljG/w/cmUyZzGZsnjrF0eQQ1amZi5hPN0GgfCBYh6sbDg8nzBfztmFyaGsOjlHYxgWQiiDimjg8PMR+qIL7B8d9u6+VinmrTAvW+4a9PcEiOAIShCIEuSzGtVWkTlnhENqAdQil6Y0G6HN9XLWgP50xPdyPSGjrgkgXkFXDhaHmiy9e5N2bp7n90gHCe5yP5GzlPWDxvsE5S9U0HBYNaT7AGsu8GoLImAaNFh6tLEEprK+omgblDePxGoWwpCrl8OiAYS/HtBIU5dGUh4enWZ975KiH2DxNUL5tPiMjF5LWVQkggoM2ndCpwQQhsG0/FO9CvMEyCswqnSFUQmP9cgftjDK2ZYjV9spkZPkKrnYRKQwxxpICpIwIsRWBejpnEDRa96mDQwdD09Qo6RgNU6RoSIXBFzV5L8M5y+7d2yyKInJIs5RUC1RPMxom9PIBZQj4O44s73P56jUWi5InP/e3cW0D6UF/QL26hlSK2SzSLmmT6lVdY9pGP945st4aOjvFjVtb7B8dcXp1rU1zRZbVmVMbvHPtBp975hnM3Vv0+j0msykI2tK6yI3VQoKLMbJzkTM8GAwBGdvBh5PocFs2+GNX9HF8Hk66rkIgVDztPd2pH6ktynuk0TRts+IACBUrflwIUcFGKhohGK6t0UjJ9Zs32d7fY/vuDg8+9Ph92dp9G6WXUFWWtZUVzp8tePfGfmyaeTK53QIHZVGACDgZBYeMNqxuxK7MkReoI5jSwtBegPaCzEIqNK/fnvCNHYt+9jOEWzv4u45m0cS8nhKgK1xlcTikdAgsUhvKxlI1HqlE2yErQYqouF3WR+wczkhE4MlT5xjqQJKpKPnRdoHJUDy2sskZm+GC41Z/jfcWC86ksVOV78qc7rm10ZUWbdzbZjDiSehbkKp1ez2A1EtKXgeydCjskjXUPj/2UmlPFgEdzyD2wBU0wXFnOqef9SiFwXX5Ohv7SeaZRoke1iicUkz2D5jP5zFlMujRy3PqsoLgSFJD4yu++9pligBFI+n3R9zdugUCTDLEt+5lkiSMx2OUiTIXu7s70evoCO8htFIlAhrL2tmfZeu9f8+b71xh4zMrMVaTkuADTzz0AO9cu8FhVd3L1gmgW8Mui4Jinh57J8QwafP0xUjQ8D6uC2Lbg+MUzQfX8YchrQj42htvA3Dh9DluXHnzGMBsMQzpAt7aNl8usC1veZlKaQ1bSYkPgXmxQOZ98n6PQV0yeGTIc5/61H3Z2v2jryKilFt3t1hbX6ffy1nMYtW4QLSLzIG3TA4OWczmyLGO6tVCEIxCGAU25klcq+fTJW+VE2R1oC4tW1mPr28ZBp94jAc/tc3WH3yZfkd78gKrNVme40Ng3MsQWlF5gQiGC+uKJkioPMNUk+W9SG3bF1ReElLBWr/PI8OM0i/wyZhpUVH7htQLHu2twGHDweo6bzcJN44OWR/mGJ0sT6t7shTHG+xxzBeOY8b3S7VKKWL1Bixd3xibnMzLdvWaEdNevqwHH45jSyEE132NLD3YHCHBBxfRxLYNH8B4PKbRC3zTcHCwT5pnDMejtlXfAuGjxu1+ueBuOcVqQ1A5F05vsnjjLfL+RUySxyJuFe93kiRkPsf7PZTSETBq29t16Q8po2Zur38eKRMuv3edF5/7JFkncOxhbTxCa83d3V3Onj7Nne1tThTPRoWIk9zddvKD9ywWc4wZEYJjtL5C3TT86meep9+6nh8G9iwN9sQDEtg7OmrfL3YKc8QaXoVHxH5NcY23Kojd2u1ogN2GJKWkqS3z+ZxL5y4wGPQZjIb0egOSJOV+xn0b5aMPP4gsp1zf3WI4dqyu9Dg6nGNNFPPtNFN8iEH39O4ua2jOnD5LOuhxsDflaDpn3jTsFhXPPfsM+Q8aqq07yP4YOd4kN4ZLF09TW4/91u8x+a5kaGsGm6cIa2us5gm9coF3isOdbebFHJ2nTNKCG9JGut2iYNTPOFJQVBW1K8kyCdLhQsa8nPP29es8NeqjmhmV8miVEaRh6C1iOmOeD7maZGwdlphWNqQDGkKIyfZjgeVjWp5Sis5vOs5l3jtimVUUGz6ZVuiet1x4oSsXk7gOchAxdu+aAtFWuzjrSXUk/DvRELzEFjXeO8qyoClL5geH7GxvcXd/m83N0xwc7sf7VVtSrVFpRrGwzHsPUXiFspJgVpjNZqyeex5tUqazOXgX6wONpm4aFotFBFsIeCVjP49AS8qPXpFSfUy2QVHeZffgkLOnNmJ6COj3c4xWvHPtGuc/+QxNfYzqdr0fnbMniojjnFrXcDQ9ZDDI8cEte4z2kkgS6UgpwNIb6VIg7Z24hy7QjSBiKkh01McADhUVQtsj0TkPsg1JOmX2jtQiY0pNyZg/1trQHw4wOr3Hxf5x476N8tuvvMnG2io/96mfYf/WVZpyhg5RyLc7GYQQmCTDpApqy9r5S/w3//J/iu3knL+n57sSghcfeYgHzz/IjcMJ3/rudwDw3wg/sotxd6MAPvvEE3zhoUeYbu9ytL2FPb1J7QXBjNg9nFDKDNvUrKiMuinI8hzkAh8UNyczxouKB4wnUy66u6pmYGI6ZqoFN45mlDaQSLeE/Dv3dXkqEt3MIANZlpOmKTCjSyw3TRObhrpjJBFYSnkAxzlTuteEDn+TysS0Tfe4iGBaJ22hTVSAz9tmO0ZJyGp6NiCzHlopksRgq5rVtTHSN0x2dqJYWXCARCUGoxMwCZaESq1RBIn0ltodkyK6/ObsaIrWmixLODg8YLEoIg82RBV5ow1aKaq6agG5mMcbbjzH7vXbHBxNOXNqvQU9IjcodoX2VDY2ppU6oppaxXrQuok558Y2rQZvPGWVNMQU1QlUF2gVqz9ARhf3HJOhPfHadMZy41MU3iNqgWrLTGopWbRMIUSgdBXTqmJhG2ofGVtBamgR6MVigQ+B0WjYtneIJYHqR1T9vH/ct1Fa59idzPi//pvf4v/wN/8a+Z0DClnhANVB1h6slRzQMHrkEv/yD/+YoqpJBiMeeuoFkqzfAv6Bye4dXrr8fb7xznvoJCHpjUBAf/UUpx96cumjE2h5sIHF0QE7V14jAN++/DbfeP11zq6v8wsvfI4876GrBRceuMSVK5dxDZRlhRqlIDSJThGyxBEoSLnbODa1Yt1ZrJ9jnAGVUYxXuVI49m2NkglORH2e427QJ4aATjOnc219CEgR3aCmaTBtb5KTO3RMfLf5sW6n7b6kRGBIE8l4NEYuCmxrlEFIvNSItpWfMXqZLlDKgEhwZkGzqPHKYIzBWkswmuAd6ybnIZthq0DRC2gdm+bkWY80ywnM6WIk693yirvigI7YYK1lUTimR1OscwQbe5UardFakZgknpxtZ+a44bSCZm2b+Q6I0Urx5GMP8b0fvMH41Cm2bt+OJx2RjaSUigLQWkdDkVFkW6mEQX+VEBIE6T2bXmdiH3BVu//vXOD2sSYIGhe9HUyGUzlNMAgbqLynCZ5ZcEhfR4/QW7K2/6b3sdQN2Rp3iHiCVoo0SWnaRi2Dfo+ytPdlax9JOOuZX/rbvP2N3+dfffmP+Ruf+wxv3n4ZJQIKz/qwz+7kCB8k3kqcSbhy5w4rZy7xi3/zvyI1etlzwbSTtvP85zicHDDsj9gcr0RGhIp81dBS7bqZ6zirzRd+kSAkW3u7vPnSn3Fw5xr/5vd+i7XVNVJj+OrLkp//qc9xbjCgGvQY93IS2ae/yHnowoxF8CihSKqS29u3GBhPLhWZzvH9dW4kK7y9s0UpBFJ4vDD4tmntcfx47E6Klkxgrb1nAXS51E5/tIvvIvNIohDIoKhKS127WNpFPJG8q7BOkSc5jQ3Y0PJNhMAiaYKjqUtsE9USomSFQoUEZwrMoqYuVpcGb4xG1Za+9TyUZExVwnUiyyQ1miyNxAstBAjf1jd20olQlQUHu9toAVqADR7vRNsrMoIyzkZR4szE2Lvj/vbyDBFgvPoJdq7/J15/6x2eevShZd4XIaL4cgiMRyM++9yzXLt1k+u372KSlMxIMpOSKIVzgcFwyNraacrS4YWkbBwqHeBdBNRGWdZ5nccjnCBh3PO7uB7vzhe8ffMGpzdP8/Z7NymbALahcWHZdDiISNYOIsb2a15gvER7UG3rhxjQCPCePO+R6Fgb3HgLdUW4P5v8aEY5Go1Zu/QIN175Oslw2JLNaxIpeWB9yKI4ZFZ7tIvIILQqa0a1rJXI+1EhcmHPrW1wdmWNt2/f5E++8Yfk/REvfOqnkUgcbTFwS0KInSoEmpgPeuDsaS7+tb/FtCh45/Uf8O5LX+FgckgA/sf/+BvLWE12MRwtVN7ekV6e8eLTz+DHQ854S2489alLvHsUeCBLabzn+q0DvA8UKlC3ujeRtCa7+xtlMpzHt/1JjDEMhyNs02DrEujhXIyBRHv6GxNP7mAdk4MjikUVXfYoGEqwnroJBJ/iEdQ27tCxZTkEFznCnZ5J62TSCInPKjInsNWCGzevsba2htECEywrdcVq49nam3HQG9OYuEG65ghvEvq9HB/m2NBAqKmrGmMSfDMllBOCNDQ2qtsLGWsrlxGJi7nCzgvofmebGLO2tzKqm7v23mjVVue07QnKkuHWAaYoaEKgrhvSxYJxL2FRNSiVUtcWH+YIkwKS2gaylTVeee37SCH4/IMPtiSdE54JrQzR8pG4EoUUeBeog4tcValawkR83BMILUocUzRxzgWSufYMnMf4piVtSJyIrqy1llzKVlJV0oiYW9fln3NMCSCV5OJjz3Djla/zg3evoQV0ZUV9Baf6fRZFdHOK6ZTTqyvMihm1behnWUuHin8SvTfBW7du8LXf/h9oqhIBzKcTfu4Lf4UkMXzQ+bh3YiWCcd7j05/5KZ54+nkaF+PaWzeuMD3YjXmzYs7WW6+coKHFMascv/+Nb7wPSj1+x+FgwJOPPc7Dlx5iJhuCD0u5fk6wi4SPaGOe57FVQoBer8/h5JCrV69g7kalcGNM7ITlPUWx4MEHH+Rwb5+1tTVW19ZpbCsu3KqhTyZzbt7YISBomppjWOk4pyblCWEuYkVL8A6NRgTPeDxuO2d5jIDce9JgyWwgc6GVfAzgBIeHhywKS17O6NuAdh53/Q6roxE7+29jyzlpb0xmFOWiBOUxJoqZCUHbs2VOVyWTpBl5FjceJSSJ1uTDJ5jNLrM/OWJjbSXO/YnaUucszXyGqyuCEKRpximTsOoF133AhkDtAqWtSVJJkufY4NoStbgOJbSElPetl9B9a1UWRAR5g4DtaeR8njl7kSs3D5bxZaAlBLSeseseFYJgBUiFFDYqD4aoDSt9rMFNktjpTRmJUAojDNX88Eeu55PjozWNRTAer5H2htzZ3uXBixf5we1rODz10YLnLj7M9s7bNAJuXbvKQ2cu8M033uJgesQgzU4E1bG//dvXr/K1//XX+bUXPsmzFzcpA/zz3/pj/lQEPv+Fv0LaGuZykjoGzbKDahfIR0lKiAXE4yefiSkJF2vhqp/5UnTI2hxY3Eg9t2/dYHZ4wN3L319+vu6Hs5bvvPw9vvfq9/mv/t7fZXt2hJeqFZOOblfsHKyQ0rXMFk1d1/R6fQSxv2Ga5zRNE4V953PqugbnGWc5eZ6R5xn9fg/bKsqJAKFlAkVQQ8XcGC3I1LrLneaO6Iqv2w1PhkCeply6cJF+7peVGcYHEhcw3pPZQK+JJ57XikEyQqaGiT/EpA1aewQNSWqWeYUgwrJvhw2eRWVZ39hYnoZKCbLUgD8u+AYi/dA5RJAM155hMXmDG3fusr620io/wJ3tHbTWjNKUySBhWkWwL5Zg+RgvI6gJlF5QLgKqqhiLmrKqSNL+0grlj97Hl/e4Q7gDAhfgu+9dBWBldZP6yvYJwO0kMi5abOjEG4SAbWz0ZpSgUbGUEKlI0hQfPFpoggPjLYvp7L6s7CMZZVVVDPI+/Y2zXLnxNi88/Qm4dSXuVLXl0ZUBP+xJ3isllTM8tLYGQLGYt6mnpddNbR3f/uPfgKbixdM9br75PYwQ/B//sy/xX/+Pv803dMLPffGXkG11ROjI2rIL4VnSmjpFANkl9FoZmhjDKnIdwRonXRvnxb954tFPAOA/89Pd0bvM/zWN48q77/CDL/97vvbNb/GpFz/LdL5geU6FDjlsS4RDW6lQlFTVFnmec+nSJc5fuhg7ftU1VVVRliV3bt7gtZe/R1UsGK30WWO1TaO0+UcJQsaTQbWXpb1AeSh0ayDtPRFtkLQENlpCfzlfIEYpqdEQHEFC4j0yeAI12sUTJpUSnWiyNGE47BNWehzZiuAq6uKQZ576BH/0la8zObrFsLcCOAZZRllNSZOUsqoIwWNt3FS6LIHWUc080QllM8fahsHwHFvArTtbPP/0kxGVrGtu391BK4XPDHupxvVyxKwga0nujQK8xAWF9YKgDQ2OxnpMHTBJB5yBEFEdMO7+9yakOqdo6XE7h71H8NqD0jhZ0/hY+BwcxI6UIs5jiK34lACJR2mFFyEi0lITjCYf9sEoDo+OQAoqV2MnU9g+ui87+2gNftpe7puPPsPB9cvMyhrRNITE0FhHub/D6Z7kauGZlYKnN9f4DeCdH36PB85fWr6OFIIbu1tUswlffO4Z9u/epXExF+RuX+WTDz/AG699h+3nXmBzdZVul/LtqSiAsmnY2dnhvR9+l81LjzBe2+T0qU2SNlfYIW8naaVKdgrnx6MrlG6RluUN0qnhE089x9VXvskbly/zhV/6ZaaziiDcMhfZEQQa62isbbtBteVgdc10NqOqKiaTCYPBgDzPsTa2U1gU0U2ztmoXUqfiLvAorDJIk+FEpNM5FWmITnTyIqADqM5xaD+vD1DO59y9eYvNtYsEKQCL8xbjHFp4EA3C1ljrIoooHATL0dGUwnoKD0pqpq7h4c1NlBRMJ5dxm08RrEeZqHbXtCrsdVUDHmsbjFQ0dU2eZzEOdpEsEohsIICyqqPspRfsHBxS1w2f/tRz3J3OqI1hUTdYbyERCC1pvKRSsRq0oaESAYTESkOhXZsrX97Q5T380eMYeDOmI4UIUluz3tS41KKVQhMoXUPja6yP609Ih5Qe5Rx5osmNiE18IoLHnlugEsPNO7e5urUde5wowUAILiT9+7Kzj+i+xt2mP15HKsPu7j5nxqvszKbMbMNkesTDa6tcPthn3ym29/YY9XKO9rfZOjzCtIib1pr9wwOctZxeWWF6cJXSg7SB3d0d/saLL/Daleu88b1vsPGlXz0ZdgCwaGq+/ru/GWNF4Mar30QIwfjcgzzy6Z/h/IUHGff6y787GWO0+d9jJJXjn8cK2cSmPycAHSFOPu/Dx7FL2eYpW1kQ59yyRYEQsfehUgovBc7ZpUsuWoUC4QUPnlpjcf4WK8MV8qyP60Cvtmxs584Bi3nBfFbQtCVBrTOCs47p0RECqMoKY6A4mEBRkXlJ4sFYjygb6tmCOlFI75lMJigPFE1sxNTLKaVgOBpxdPQ6Zf2rJFKhDSgVY6xYaKyjIrwGETxZnpPlGYNezq1r17HWMuin2DY42zs4ZDYvGPZ73LhzF+89a+trHMymqMRQOEsjPAvpmOZDJnVgoQP9UNELFbkSCK3x0iKp6fuG2QlXM7zP/bx3/QacjWQQqQx7ZcN3L19m1OvzSLVgZdhjnlX4Jn6WPV+wXS5opKR2Dqlix+3MGIT3WFoSfgdMes98sWD91GkuPvoJVkdrBKVobMHbL73yI1bOveMjGWWrdMl4tEIyHPPq2+/way9+ht3vfZej0LC/WHB+NWU1VewuPG9dfo+Hzp7l1feucjifsTIY4a3F1w1XX/0mAM+sDbi2H5BS4bAsrKW5+R7PPvwgr77+XXaee5Ezp063JUGCRVXx9d/7Tao77/Lis0/z5PnT7EznbO0d8sbV63z3P/1r3j5zkV/463+f8aC/lBmMrl2bL7zHQls3twOhRHwktlhTx3tuCC0mfIwKd/Fcx+bpFO266o8uoe19l49sleq0ibo2IlaoL+l7Iia8N/qa77/xCi//4NUfeS/GwxFKa5587Cn6/UF0zbxAGsE7330rJuyHY6aLOYuDPdy122RhFFuDB42xsTdk3TQxftWe4Dy9RDOdWvqjEWmeM6kqPvNTn+UPf+8P2Nt/j+GZp2JFjRA0ZSxx8nSEfYEUGkKUWtGtGqAgkGYpviyW1x+ARV3z2lvvcPHiBa5du8ZgPCLLkihirFO8kNT9HgduhveO3C8YiYYHkxwrHPtuyoVUcTrV3BKdLEmno9uJlR2PaDOxPE8oGRF1F5hXNcMsIysX5MJRe8u0qSnriKZqoQlBoE2CMrGoXckVpPcgLE4GFh6E1JSuoi6nnDt3kdWVFQa9AcIkHJWGs49/8r7s7CMZ5dHBLlJITK/H2sPPcPt7f8J4ZUSuEqZN4NbRIZdO9Xlgc8Q7Vw+4fTTjP//pn+KHV65y9Y3v8sxnfyHSxrzF21YVwFlkqzvqBDQIprt7/P0nn+L/UZb80b/555x/+gWe+szPMhqNeP3V77H91vf5B7/2S7zy8jf5k1vvgHesJjn/4Be/yKwp+Nqrb/Inv/mv+OJf/3usDAbHhqnkMWG6lRmJhuVbI4u3rsVx7qVFhYAUFtfl1+h4sHIpmBVVveWyLCtqzxzzWONiFDF+8rHfSF1GNdBu/QQBvdUxP3zzTUanznHpyec52L17YjHHUqH9a5dpjiZ8/TtfW6Z/IFbE/90v/SrrpuFgcsS0LJje3uWZiUXLGcpLMpGim0hla4Jl7/Ag9qJUAmECyakRJAkkCUdVyUOr60CgrvZprEdagdEaGRqmkwMWdYXWmqbVXdVSYWQkEwwHPcajAf085045AWB9bZWs3+OVH7xOVdV86rnn+fbXvsFo/RSnTp/hxuUraGLurxCgBzmzoxl1YgiDPreUahlHJadCwRoR4IrzJ5CtEFb0cDqiQvx9nPtA01i01hgXlqfrVr7OzVGPWd0wkSUhEZi+IQwc3jYkWdLKhkKtMmp9wnyCR7uSxe5dvEwYjsatyBJ4YXFCsXW8J/3Y8ZGM8vIf/XsA0tEqwVl6Wcq5TLA56HH7YM72bMGisawPh+RGsnCG6fV3+OwTj/GtN77L92ZHnP7E81SzKcX+Fs8/+jD27u0YIAfZKodJVoNicflN/k/PPM7/XWtef/Wb3Hrtu6SjFcqDHf7BX/4S02tvUliHULGRynZR8Idf/RPWisBf/Utf4F/83h/w2svf5Gd+9ktIpd6X+jgOxKSMUhsxjSqO3dRjgLd9HigZCPL4hIQIapwsveqKnU8W5HaPHQ+xbOtmu9Kt5U4fmC4WlHXNI489w889/yKBSI6OlRgOFxyz4gtY79ne3WZyuBdRWQQ333yF/+Vrf8h/97//37Jtp8wmUxYHU06PxgyaQCjq6AG4qMQnU4kPgnmxwOJwqQFpMP0+WiXMtw/oj6Pgk7eHVLZBNgEjNanR+Lqhn+d4Aknaj2JlSpFpjQyOlUGPlTxHANPDmB66dOEse/uHvPHW23z+i1/k+pXrhCDor62i8xylNbJp8B6mszmj0QgXQATD3OT4PEO7gC1niKBJOG4gdLIlXYfMnxzeRSJGbMkelhxcj+Buf4WDOiFkinxFU1u3pDQmPrbms7aJYYmtUa4BIj9XeItyFQvrEDqlNxhGjmyreeN94ODgzxl9/cQjDy0BlN3DQ9I84+/93M+z8+5rnBrn7M7mLErJ1b05F85tkKuavSB59851/t5Tn8F5z3feeovDa2/FG7N5ir/z+AOovW1MPmSGIFM1WaN4KutzURWYvVv8t4+c4fsvfJL/10uvcnN3n//iS59ndOcd7u7tsq5zvFcsvGQWaqyDPZ3yta9/g0899gjffekrPPDYMzxw5mx3m7rkUywDE8eySF3LPtHd2C79wvFNFm1e8F4DO+7BoaSKJ0bTHLuwHbe1BRO6zaEzSuc+SPNYat9Yhy/q5QUYo0mVAQzDYUYQgXMrY0J4FIhVnX88nfDu97/OQW2ZHh5wcHebVWXIUaSJougBdQ3eRiqgbXChIfOaUeF5cH2EX9uIcXEQjE4nHLY9Nsannsb6QFM3KGVimsuDk5Kg4+JsGktdlTRKsJKljHsZ0jfc2d/l9q0/YHU85Oz5M3z5j/+MlbV1+uMRW5evI40h5AmTuqCyDRqBCqJt5hPJB056nPIEFckocyGY6sC+my/FUmRY4nDHYB/H+6uMCt40NsrZuHYDzfoDtoPmKMSWdU1lKW3U4+mKs711UZCtdY0b1yrc+YB3DdrXNMEz7OWkWcaiWLSEkbZ5lP1zptk9cWFjmQdbfe5xXFPz1rV3CSqBfqA/SjjykqkPzJuKXl+wv5iyqDw7N6/ztzdP82tP/wrfvLmN855f2Rzx6e1tQm/ID12Dk4KgBBtVwwNOsOEkZV1SLW4xuHWVf3JmBfX0p5jfuMEkOE71BgSvsVZgQkAhKZqaWlTsO8mXLl7g229c5url17h06jRCySjHIMUx91KK4/z1MqYULaASk/ndKRiFFSK6cS+XNe6zEBAyRHJ7e+J3anQnq0E60GjZJuBDOjGdjGNpF0Fo48+OuBAlHCVateJkCPSJTUaZiMb08z7aLZjPFuwM+3z7gUs8PZ/R291lOBhw5A5RQrAqUj61fp5f39rij37/q8tr+Ss//TkOWwEybQwyy5jNJgQpGWlNrjVX7mxR+E7h0JNIwepgQG80AAG39yf88LVfZ5Au+KUv/SxXb21RlRUvfunnuXtnm7yXU2AJqYoGbWs0EqVjBdLe/j5NcOjMIJUAW2BdFLeqakd/uIrnsDVA8cHJDMfz6UXAeYtoxbW+ee0dGmt57tkXefXGFl54dIhF+3VotXt8lOPEnwh9Qlg28j3Oe8aVMBgPUboV3Ra0Bk0rU/mTx/03+KlrumLcxd07EDyik2rEsbY5JutpFouGO0dHpLlBHhUsnOJ6OWdw+wZy5wpPO8+K17woSh72glvFjGyYR1GhUCOFJzQ1BwGmjWPPVmwbSTicMto7QhhNrmAlVRwFSVEJMqej9IbzFMEiPPQWNSv9PttX3mL/6RfIjMboiBQaEzt9Idp+Uq1ae3cwdqh6p5YXHxPLSnS6mwR0DUxjOweJMRopIxWrLMpjwsP7VsqP6hPSvdfJ53bp13sa1gqPry3N8qKBFs0F4gkoJY13WFsznc357c1z/Ne/8R/5uccf459eukhqEoKMNa4Jgi9Pj/jNb3wdnbRt6wn8uz/6wxhPmz7DtSewzlFMDghVhVaaQW/A2uoaO0cTAh7pLadWxzx0ahPvG27v7fH66/+SfrLPr/ziz4HW/OAHb3L63Dlm1jOvSmZ2zkJZSuUYqihCJmzAZAm1s/FUkwJlIsn+7vYOJsvxUlA6SYlZBuVLobXu1rVT6X0UVpZE9NQFWNiGa3t7aKXI8hWCn+KkRvi2HFHEQnrfNUMU0fiEaHVwlyLZ0UB92+Y+yZKlCmOHqjv7wTK+HzXu2ygnk0msTNCaRKsYC9FtRJ71jXVWV1aZ7R3iPPTRXFo9jXSOW4lGyUAvCFKvEXVNryg5tEdM8pzMC5KmpJhNOQyeHTGm7yWTBo68ZEcInBmQENjwJWtSsmESXGPZ9o7CBZyXOBs4LzUPSs+jd29zfm2N12/cZFGV5MmIso4NcKLKdhR9MsbgCUjF8gTqTkvVnqpAKxClCR0wQHezW3rXiS5ZnTHbH+GaShlPnU4v9mTdpXj/9+W3962y9hmiPeVD63KfHNZFkS5nHdmZs/yLb32HAHzl8tv87559Fm2aSOuzkG+e49f/5X+gPz7Fr/xn/xgtNZWt+Z3f+GeU8wkCyeGiZno0ARuQQlA0FlVW9LME53sYrUiVYHU8oLYLJpOaN978D7j6Bl/6hS8x7PW4tb1LURR88uFLnDu9ykamWYxH7JUTLqyMqbcnGKXQqSYb9hmZBOsc+22ZWChLvLXIEEhMwkKW1PLezTPiA/Fb6BrxCoFEYhEsbGDhAt+6foc/fPlVPv9Tn+cH726BPN78BAEZPNK7qLARX63b+469qxDaqCggnEPiYwy8lHmJX3VdHwe8P2Hct1GmWcbKeIWjownTWUUvy6KWaYDN05s89tgjvP7a61jR0bUFTz3xFKPhgPd277B3sE9lBSQKqyQvFwXnmVNISW/eMGhqZlXDYVNzLSge1iPKKqVoJDMV2M8M0pW8sD7mQRnYkppFNWNuK+ZVA9axrgN/Z22Dp3sanyW8O36A12/c4NrVt0kefYbUKCDETlNNoKxqhIht4tMkqrMpHVsJIKM8fze8czhr8Z2dCXFPf5KOhNBpkmZp3nJT7x0dNS5N0lh/+aHb5493c44X3b2PnSzsjTnTtk+l0ghjOFocw38/nM+5lGUkIbZ9l0gWVcVwoOinGVoqXPDL9/Gix87+PjI6GCyqeuku572c1dGQ+dEUvOToaMqirNna3aYu3mB9dcTG6ioATRVj5Fe++RLf+8Z3Yh9PpRgMB1x++S1GwyGPP/oEaIVuG8c672m8Z38y4Wg2p5fnGBSy8RgPvqx47olP8Adf+xpfvXKdzzxwESFgI0sxQiJDwCEoEdxclPzwzjavXrvGd994i6cefwKVn6Y8Olq6SEG23ogT4GULonlaZjJdF+ngmxP566i8kSYJ/V6Ppq6RIvYt9UBVFVT1/Mfe127ct1Gurp1iMZ9Tlg3FoqAsG/IsQynFbFHw8qs/4HDvMLo6Pu7g12/dZTwcoBBkVkPwNKqiSCTvmAF+NzCae6SfMVaSiQscenjZznm3MMzcGo3vs289e4cOqRc02ZxSl5wqM55VKe8IuN1Yej7wqVHGwxxhC8WhG5ILydMPP8pr3/w9tq68wSd++pdYHY7JjIl9HXV3QkmcF3jn8JVdpksQseMyxIR8sD7C7XKJF7Uiu1FRrUuNZFmk2M0XJbu7u0sl7069YDE9YjQaMuhl7O7torU+rmI4aXGd+yzaXhfhR7lAbYrmBFtJCNnqwXqSNEGae2/1uUGOVDDUCRaDOalb0l7Drd2bVIuYxpD9p5FBxXgsxHk5mhfRfRceo2M8OK8cQSfsVxVlE4WupBBooaiE57W33gFiXeXpR59BZ32aqmD3vdchBCaTKVevXT/xOQSJMbzw2Rd44ZOfpgge4T1UDXVTgZSs9gdsFA1vnznDf/t7X27bTgieeuQhxlmGEYImwKKxvHblPaoqhmLPP/00o82nubYzaVsRSAJRMCt4H8kcLTbQtW0QxDpR5yusK0m0bvPTDi8858+d48K5c5RlgTYGkJFc39dsnlu5L1u7b6N89QevxrjKRaK3t47Tp0+T5xl3tnepqwIjdWTBWM+g18c7y/xohlQCQ0wlZDJhJTNMa8vl4LkUBOtFydBozjewcLBXzrnsFUWTo2uo/j/c/XmwZcmd34d9MvNsd397vdqXrq7qHd1Ad2MHMcBsGAw5pCxSlETKFGXJYVm2HLbC+oO2wnaEQ3bY/0h2hB2Wg5LFMTk0qRFHHGI4IAYzAAZLo4HuRu9dXfv29vfufs+Wmf4jzzn33veqGtUgGaaZHV3vvbucJU/+8rd/vzImN5LNPObWKGOxkdPAcLxW46QIeDvrcTmI+KKqE1hDLhQ7ieWNW3d4/pknefbiOb7xgx/yyj/4f7Jy/ik+9fmvUQ/9cinjTE0zg13qisC11dNIaAFPr0SRuikWb+kbVsjtUhKGAb7vMxjswMYGrVaLKIpIksRFXNMEkySuP9E7+gjKLhBjDEmaOr4PqVBlIOchzklpLAFF36ZLvTRqEWlzgXwmatySglQKfOlhbU4wo9Wlcqb4wd7mNEYiA2aMRHcdUpEbiNMUrE+73abfH3MwHJMXzdclLbBDTZj64s2lNT73pd+gFvhoYxl94VewFjKdcevmVRc8EYJ4MmH7/df44Q9/xPe//4MH3rfneTz92GP0RiOMtVVr2JtXrs7PjxB0Oh0+9YnnObm4wGoQ8r27A3e/2rrG7qJQXQgHAm1NAZZFDsJt2Ebk+IFAaImU4AmJ8nwSrRy0aMHkHdXqxdPUeIHl1NnVBz+4w/fzSJ8CRpO4nF6EdQ9lNJ44BmNjUcrVEFpt8YSiETUwecpCs4FSDv2rEdUQViOymH7eZ7sWUotzVrUhsoZVJTH4ENUZxpbMxuQCEjEhlz77WG5OUp5qeDSVpZH2OS0jljLJZxcWOWUnjEVOLhUjBLEvyUyXF04t8vy/+Rv83vfe5L3bt/nuf/c3OfnUS6yfPM/ywgKecPTtrsAcmFl+UwEocokuxl2kOme9y8JvkZLBYMD1a9dRfsAnPvEJOp0Oq6urZFlGkiRMhgPefu3HXL/6IUHouCaQZVekqAiGPM8jDAPXNaJzUmMLJDhVXeMUJLrwZQttGYQhYRJUbVVX45RkJiSvtWY8SrBKY7PcgSFX96GQSrB16/3iBYnXfJKyf7OMXqeZRmcZUehwgiSKRrPJMEkRaTqtOxZF3aiYRkdbK8ep+8568oRlfaHtzGwE51bXipSF4ziZfPLTbGxvcffmFbobUy1autHWat768MOjyBCHhu/7fOrFl2g3GmS7u4TrbZaXfJpC4I9H3NvZxlhNEAb4nkKhkcK12g2HA9qtBqdPnUIIRyo1mUwwOgMjiPyQrTsjBv1egchXpMCEQduca9c/IGjVP1rIivHIQmnLEjLKHblAOrVu1qUsYN6lIPADEu0Kt0dJQjyZoKQkz40r3DWa2ELsCbaV5QnrY6Wi5xsSLTkRNOmGAenBhM3dCXmmwSpiD25mhkQ7jZTlOStC8nzY4PRig9gYcm0RRoAN6dQyVmsZe3d32N/e5WJ/xNe++lX+sz/+Y6796JvcUB4rF5/hqZe+zHKt5e6vCpaUAFbFn8KlRWyxKMu85uyQUuJJhbAwHA6IGk2kkGRZRrfbraKqjsLPZzJxPp6Djygo3crzAlIJGvW6W9SmJBkq8mLWFC1eWfEQiiBTccGJzhgMuxw/c4J6DuPdeR7h/TTl2LEO3YP72ETj5dMFrbVlf9hncLBd3FgTK4NKCsotywLaWsaTmDwvfHI/oNFqEPc146Q0w13hQ5pM2O/1qvmUTNMI6SRBkhZmt6IW+I5aQbl7O95p8dyFC2TGUbFrbdBl/tBatrsHCCzXrrzFpMCNHQ969O7fquYlTVP+6Fv/BCXlTOO7+//UqTN8/vJTiKgGviLHcPdgD5AMPjhADsfEkwEHnqXeXmCUOKxbtEYaS64zktjlJf0wZJKkzkUSjo4wThM2bu38fEHj4+C+FlUsU75RS6YNnh8gZYAUtiCCdWZqbgWgGKY5oLBCMsoSJsKVp2klmQhJpgIGqsZuTXFVpXRzyWQ8xgaKlU6DRj9jX8ckNUUuI0b9Md1JzLEoIJGShp7wdMtQo48kw0dhtCCVHitPPsdmX6N3Yrz1Z4nrY+7kHv/eb/waozDglZ+9xU/ffotX97b49K/86yw0mjOa8nC+y7FOl6VkhwXSFgKsCsIZIRzQ1mAwIAgDSmZnoKDo8wpwZ5dU9oOw8B3tNN3iTktZb+t5zuepgrHC+T5aT0PzshD8PE1YXFsmFYLB7Q18vzl3vd+9t8Gv1yWpNqy3FwhmyRyFZGP7HmnsAhOOTj3C6Kwonmfqc7uWVUySEfgZue7RaLZYXlpkfG+/ug+L4WD/gHHsmKceu/x8VfCvrUFkutLCOZBhEUq40sWitlh5HpHyHMZrlcJyaaDOeg1rNRdXV6qNIzOGfhxjrGEUx1y/fhUDxJMRm1fegJk998btm1y9eqXaOAPf56mnngQk59shJy5+iizXjPOM7nhCIAO6wx5SWZQUpGlCksY0G02noKRyJZbIYi1Y5xY9wnhkoazXG2idk2e5oyyzuDIt5eH7jgFKCVVA/6doXOhfSw/hO60aW4NUssAJtVitSWuKjSDCNhVbwz0OLMRKoyZjFqzg6aU6vt9gW0mG1rC0KoiHmyQSMqHxTMKql2FijVVewW0o0VYzCBfYbNRJsgF4DRLrc2V3j/PtDifPLvL841/k1379i/y9v/cNXvnm7/Dyr/5rLDWblCVvU7JVN4yxrlVq5jUHr2krDTqbGtFak6RJVUBQMkSBM6UQMzCTYhrIUaY8tiW1xoXfS87M8sRl1E9Khx5ekL+ePH2Wa2//iBs37tMKYjbHPZ6bBHgn2nPP01cKg2JiPfrbe9iGo4/zwhoguHP97eqzqvU8wjgYR8EUn9YU122Fw5kdjsfUQh8pFc1Wm1a9wf7M5d68PSX6iWo1V7Joy5imnUkBFWauFRjtgmhZZigwyJ12tU5LG2OxGGfqBz6R77nEPeALQaNew9ocYds8vrrq6l6tZfiZLxZ0iwJtLL3RhPv3b3P7vVddvtEY3njzrQrR4A1eB6BRr7O2vMITj18mWDmL9RQoxbWbt9jThk6zXcQWVHkXBY7SdFP+eeORhXJ5ddH5kaMhk9GEdJJgjKHWrLPQaROPY4SQDHoDdO4hgwjjKVcz6kk85WNUgApqBGEEnsSGkn0y/OGATjzG80JsOmYcT1CAMJZtFVMP6sRGsJ6nnA0zFtptV81jXErGAP0UV1guczA+kfHpfvguG17dRQivxeR5RrBc59Tl54jtmBGSkT/hz/2rv8zv/Z0/5JVv/g6f/fW/zGKjPl0kM6NExD6cK7RWFe8phPAoaeumxQiC+QICgVIBSBfu1wXcoss5TmtScm1cLlC66hBPKQLfn24KpdViXAURJuf4sXUAXnnvQ/6NF57ERj7ng5C/c/0uQkhe+uXf4u0ffpu3bt3h5YsX2Ohp2jrgT3Z2ATj/5Msu4JJMimsPEDJ01fMzhHG2zM0BCImRLjBjLMTjGJu5LpTyQvNcs7HtRLSxuMJCoz3jAhRmngBZoqUVrntFl4jb9Ewxr8a61FbZPB+nMVmckPoK5TkT2FPeDK8JCA8w4EvBYljwpRh3nHZY5+TCEs8/+RzGGjIDW/vb6IJ+4sZ7PyFNYtLJkJt3bnPzzu1qLpSU/Plf/zr3r96k0WqRaY3wVNGUb5F5zMX1dTL1zzhPefveTaIootVscezEGmmc0j3o8u4H77kQucUl1m3IybOfYv3yF8lqPjUsnifwgwDCgFwJ4jQlzVISoUFMWOUeWe8uIRGhcEBcWZqSe5ItL+FUEPLkyHBBW3JfoowgE5AJ98ByAyPrwuMBFolHh5wX9C7HlIfQMU2TowMJn/gsI9uj3++xWF8h9Brctz2+9Lnn+S///jd457Xv8pnP/TJKuFzfrElYRHdwwicL86TUUa7MTvmhwwBFV2ZoVVJX1r8KAcoH4ZGZlFS7BV+sz2pk2tAbT/ALy8LzJFHgIDpkUYXk9LL7khJzYsO1/Ywf3+uzdszw+s07SCk5e/I0V2p1bm1v0tNt3u+lrOh9gppD45NScTAZsXvHBXlscAyrWq5pbSZTMw0qFaJZkBbVA4/I81196bgLwNLCIlrn7PcczV4YNajPYN+W7L5ipoLKZYIqho9pDqqYo7ILpBpSobGkxuDljqMlF6ZgCzeVyV+yYpVRc+m5jpYCapag2Gws0K6dqtyJx0+dcBo7z+mPx2xtb7C3fRdrDPc/eIM//v53eOzMJUxYY5JllbIQJudZM+GXn3mCP3z3rUeStUenLTCQjhP2xglddUCn02FpZQkQDPoD4jghS1KGecaBsJxdWgatGY/6TPpDJqMhOo8RpORZitYpUZIQyIy8EbLcXkD1UhKdkoUhA5OgmWCE5kTucamfsthqshF4XFEg8VDWZ9H6SDPGZgLPCLS2eMLSkJbj8YCzfh1PZEQtRX2pwXAJvnF/m/ev3qLR2uTUqVMstEJuvfcz/sNf/Sr/l2/9Md/a3XDmhzUM97f59NNP0uv2nPlpHU24e8qyTA6gpIdV4HuB05QFwnlSsPdWJmxhwni+B0oWsluGc4u5Ln5KqfBDBzhm8pwkzYjT1JX0CdeR4hUtUrKoszRSIpVHmhu64TqT1gLD4z53v/8Gx85dZrnR4PJzn+bH3/49tuIB62snGPXSSuAMsN/bmdPsThkVfu5M9LV0ykpREkIQZynNep3I89ndehshBBfPnWUel3XmyIULPWuZCOwDOzwq8LDpP0ePWGhRqmsU1XnK55AWRe7WWvLJxLkrsmQ7m0JfCimrnKeUikB5NMKIhUaTUyur6CeeJslyfu/+TQ72t6mdC9FBhDGOWdwYjRhlLC+u8Df+q/+SvX/WGD2+9stpxBrLwV6X3kGfer1Gq1mn2QwY9HroQcJ46xpv/eE/wGKIRIxSjhi1rjPqeY4QEIqc1XzCcifiROcEBzub5JMUH0FgQWcTlJeT5TF73ZiktsLd9WXeX4kY7cZkqaVLwlIk8IWkMdYsWslaOnBNtzahncW0dEC8IDh5fp0BY6L33mBxR1MbGwZ7A25s7LG82MD2+sRbr/I3vv5V/vf/6FvERTf/k6dP8tdeeoZvjRIECimnqGklZGW13gyuTlI4/WmtIE5SrFWVkJYmmaf8ItBR2GnF4gl8n6s3byGEYHX9dCWwUkkQcs6fTfOcxGQo4YIJUggiGbFw/Cwf3L3Br/7Gaa6k+0wYkmpNq72ML+pcPP8Ur4ff5B/+8R/yr37trzJK6myMdxBCEgQR2/evV0Ipao8zF/gqTOypQNjKFxYCEqPZPtjHV5rJ4C0WOx3W149h8vnob9nk7Yq2TXEYU8WwjsTaivOWBeB2Gg9zP6uG1OlGUV6qYPZ6i0dVuQ3uO1aXkWBdbULusRQpqrIJQMgib+wYp0M/qCyV82fO8t7uLvfv3q1IdJek4r/66fVHFkj4OJrSll3kFABTrpBg0BswGgxYbNU5u7gEjZSkf8DFxn1anqAlNSE5nnHEsIoMP3C5qSxLCRlxYqhJ/QbX/AbX9wboXONbwROqw+X2CfL+PvFaA/vCk9wcCU7sX+ezdsJGOiHJPQ40bNU8bgUedbNAK5c0MgjliP3AY1MKtq9vsB4kJF5GuxaxnoVsj3Ky3gF729sEgz6D3OPEez/k7//1L9JeCPE8Sc2M+XD7LqE6gzEKa8cO+oEpm5ZwMkduDEZoPOnMoARIrZtmUTTmOTZiVwQvrABpMcKQFySprc4K3/rHf0LQaLO6sOBMu9L5Kk2iooBAFWS3ZUuY1hZjMhf91oaxDGg3Ar79s58hhOD05U8wkhIRhFx44UtcffVbnJJ7HDvb5n/+d36f5upJTq6dYmdrpqLGXy0XQKUSrRKoHNphQJyljHPtwv/F0k+tJem9ATbhk594Cd8PSPMZFuOqvrjQusbOl4UeduZLP14w06kx856Y/b444vVPXy2GdX2Vs68dOb2gEnxTQHE6hZS5o1XR52m8QGtDliV0lhdYXVshikIue5b//Cd/cviGPnJ8jCbnmcsuQDNFAZvh+ZI2IeFWDz9UrLRDFkyPTmKoZTFBluLnFiVSllZCzpzvkIkx79+XrI19LhvnJ+YK3s5HjM2Ey36HTwZL1JoB+tgK14fbXNu4xQddH9E74KTNWRlskusG3Vxx24ddAu7XIg58RRpqvEwiPYuhxsnaIueiHNYUNk7YnMTs2Zw0S9E6puF75MIyNANq/fdo2xTPEyB9hD1JAGRFC4KwBiMKX7LIXRptEFrjGYsnBYkwWCUZk3GQpzSFpK5cQMgYQyYNKIsgo6UTnlxe5buvvsZbr/yU/V6PS1/4Gs0wqGjWcWugykZiy2XCVKspgSckjz3zMnt3r/L2T/6Ypy88zm/f/JDm6imUUuz2uwBcuvwc2hr+t3/372KNob12kq/8ub+GpxSb1382XZ6HwvjWAtrg50Mm/R9gwifBW59epZBYM8GMXmdpocPpUyeLI00FoNJbxmKKPkObuQYHJVRRjSRnb9htZtbhAs1qyenSFIUHYGcmrPpnfv3OfG9OeMXsp1zFq52ZX/cMnMhbS1Fu6BASlZTc3d5h/fg6qlUnrEUgIAh94sKFedTxsZAHKguB6SQLXFlWo9GgLiXD3j4y84k9RS1QSKGx0oIPYavBwmPHiVcCEl9w7PwiT9+GztubKJMQNg02H/DEUPPF+jL5sTbvvHAck8b03zdcvX5AJiR9K/lQp6w3WozzgL1hTF8bRhONykD5Idoz9IVC2ghtQn6Ua653DTLuY2oR555+nmOyxu7+gdtZD/Z41svwkvvc3ky4sTnC8yGs1dmrWyZhThZKPOsjMo2MM5TOaOiikyDX2DRn4kFeF3Q9j/XVE+zFfbK0Tyx8jJaOcsIaZD7hxYtn2du8wadXj/F/+52/x3a3h5CSC5/+Ks9eegqLOoySeGTMBUIK0+7M+mk2X/gyP/jxn/D9V75D1F7k+S9+DV8pEA6VMMszzl18ikxruvdv8uKX/iy+5zBmknFhanltZLhebQBlIEalPbLuf0eWbiOGV9CLfwEZHiuUmcDk+2AmrK2erBqUD6suIRxhjvAUYRQgjcVk2kU7jStrzPOsMldBkosyHOb8+Qeo1NkFOhXcnzOH5UcOi639qHeLY25295j09nn20uNc29rg5QunEdJDFcDgw+GYQVEN96jj0St6Dv9tJUJYB0Ssc7qTHlFDIZOMwFry3GNickw7wF9s0myGdFYXMWdOsRPU2Bj2CH2PpbRHTWlQOUPfcrmzxEuELCiPt/Oc+F4XYy0BbU4aj36gibXgh9LSlg2M59EzI3Z1Rub7KOOwUpdrCywu1BwMoTaommI7axLUYvJsRDLWTOJ9+oMR+90DdvsbnPnsZdbUKe7e2mR3v0+cZng+JOsHjB87y+r50yyEDYb3NxncucdCX3O62yPSEzwjHI2asgS+ZM+vc+7EOX7/9R/z3uinhGGdQLmSOl9Y/N4BL5w+zbHOcV67vclOt8cnfunPs7CwzPriEl5VAu1mX1jBNG16SOtUO75bjZ4SvPiJT+F5Ap3lXLz8HM2oVgRjpOPE8DykVDz7zItkT30SS04/HrCzv4vOkuroLkBTqiaDNQn64PdYbmR88dNf4He/96eI9D4iXHdBr6pdaX7tmEN/w2ww1ZEiSV/h+6oQQr8KIOkCwtMag87yGboEWbkQiGlRhSxOUpL4ztUL28Mr+eGjbAObLeyanXdw8CzGaISUaAx1PyB10SZ83+Ot995EABeeepFr7/7kkc77yEKpSwwUIQrz1QNhqIWWJaWIMBwPPRbX2xwc9NG5wGhFOtEM6wkr9ZR64xiy0WF3o8tgbOjuj2AwIGhnrOWKtdaKo8b7ybu8v9dl2Ld493oc1Dx6oSSXiiiF/qDPzsoKrK2Rmpy9bpder0er3WIwGTk+w2ZAMp5g9Ij9/QO0tYyylEmakCYxEusqYQrQXRPGvLl/ny8uLCKEJJGSkaqRiya9egOVpdzZ2kItHWOhVqMvM9L+LnF+QDvQGC8k8wO0ksR9xe17e+ym71DzQ85evsjK8dMstJcwBlSakO1u8+5rr9C/f4dsYQUQrK2us9xqo7Xhw/u3ufXhmwRBxONPvcBKZ8mBQhWLoaxmmTPPRImtagmUx8vPvAS4mt7UmELbuW+owjyTQuJ5qghMSO6OhgVWK6jGJ0AohHVJH4TGDl5Hmn3+41/9c+zPrFRZBkHKlM/M6rXCpR4WWo0iLWKLxmF3rdIIcjuj+6rEZIn+J5FeQCAkVjjfTWuDLkoDs1yT5prcGlJtUJkz4z3Pn+YKZXU5h7aMeV9z+udRj3NeMKexXQBrBa1aDeX7eMYgrMRDceXmDUCwtLzGtaNi9cDxyEJZIs5NL8ntin4gOa4UgRScavishx6bgeXWfk6iQ1peRJoK9nYtURv6yT1ee+8mqtECBVuTAaLmcaq9yN3jx8iCFj9dDLi5M0IbyyTJSUeQKVslj9Pc8O7WFuHVq0VlUV5xWhrhqM7tzdtFadN0kh1MvkYJgaccDXZZXK+soJ0I/KFmf2+MiQWZDMnCGrreQUmL6G1y486HrHRH+Damb0YMF9uMTp1ikqTsD8fEWrJRz9jUO+jNe5w4fZq1xUWEtYRhRKPZYntzk2yxw/XJmGE84i8//jLv3b7Dz179DlZr4mGP4cF25ctsfPgWtcUVBILVM48zGXYZ7B+towxrTc5cfo7TJ05T96bd+AInNMbO+EfT/IOLFhcRY6NnAjKyPr80dQaj1wkDj6X9e2xEC+4QQqCU41g5EussTF/le5w6tsp+b4AFMpujjdtkHHGTc+iUmBeZ+cWfg7V4EscVWXCZgO84InFVVFmao40Ga7DGkKYOEFoW0WtVtNiVAZs5pAdrj5x1Gt19uJY1FlpLHRKTFX24jtulSsU89JtHxyMLZcuPaLc7jCdjeqORs/WNJU9TOmFGiKCtYUl5+CsNttDsJwHi5FlqSwsMJhkb2jDaGJHGPgfdAxbXFlg9fpZ0P2bjYMQ79hpD74Br/phB3QepGKQxuXUFlkIbZG5JhcLKkHFqsLl2zcbV5jq72igifS6MbaRGkmNxpVayKAIQUuJnAn8nIe3DeJzT1ZLG5cdonj3O/qTHqpiwJBLawZgzSwa/6ZPKRb6fNpn4Ecrz0P0hw9SSkJGqjFyAVQqhLWSaXveAwXCIMZZEC0TQIrYB7Tjm/LFVrt94D4BmFPJXfukzfOqx0wyV4h/+8Ge8+uZ7GGvp79x74PMBGAB7tz/gzrnLfPZLv0HDL+m8ZxEK7Lyfat2cCeso9+6UJpZQiPDEXIrBZD2wGZ9/4kls3icIj02nWqqqoMEqdahN24IVPHbqJG9euV58IXCA19KZ2ybNyiaUB0ROp68LKyq9JeY+U6DUKYhqDlxMSbfxGmMd6FXZqF503eg8B4TrTpnJTc7GTo4K5sw9YUlT5y/WG3X8dpMcQ6RkkV4KSbMUPwjw/OChz+3weGSh/NceD3j6sUUGic8bWxnXDjLubk0wsSSs11lrZrRCAYHEkzlLtZA7wSLJYxcImk0CIVDJgOG1O/QGA+xkny+fa/D0EtR3R9QmGYEd8ZqJIXEIa0oIlHT0aaXhkUvhWLssSOMQ1yxFPqoo1aoEsnpixYQXlpU1uvIXQLo6Sg03x0PCliRfa7J+6UnM2bOMtu/yK40M+juk3X1EkjLIU2o9yfGT6zztj4iyHqdVjfFqwg7wiie4e9VRoGkhEcJzZWHaoWkLHMhVO6yxoyVXf/Iz/g+/+kX+SX/Il091qJExOrhLd7OLlfBbn1rlL3/5L5MejJgMco7XUs60cxcgkdLRqWeWRNb5xrU9/sGP3uAHf/KP+PyXv07dD6pzThPqbhhjEKpk0JRM8pRsMiqWokT67aIipliC8R2szbm2ucXGxReIkzL3KAogZqd9bOY4Mxba7UKgnA1bb7v628HeFtd2dllsdRy7mtH4nkejXiewGT6u/tfq3PWxVrkJWznRjnel8CXd3TALhS8oGpURKAHKl/i+AmZoEY1LI1nr6lOzPHcIgkXXjWUGS0kWLXPCmf3lKW9ceR2ATqND5vmY3EAAFkUtCLh+7x7HzjzO6vLyo4raowvlZy7WOLnQJVeaZ84tEOPx6oeG7/30Ls0o5gsvPUbHsyTjmFjnpNToN1e5VmtigjopAmsk44UMsXyXLx+r8+mLDSJ2kOEAb3PE44lAyBrj8Zg/zRwzlyoWcG5BSxcwMEUKwjXCzpgGAtdiVubBmImWV+F1W4S+nUCXCEuxJ7meZrRaLS49eYm0vcz712+xMhrQTfZI0hhBSCQgVZpJLmF/wumaZLXh0ZITCDVrZLwz2CPIEoypY63CFJAQCossaKGktERKIaTHQCoGt+/w5XSblvBQbZ8YQS0LCKVF37uFDoYcpJDu9mkc19RVgpwItBGMx5bxWDOa5HzaKL70m5/hP/rGj/mj3/9/8/Rnf5VTaydmPLgpi1kJKo0xxFnG1fffJB50q8mU0sP1qxmMjjFDtwCvb27zv/sHf8Riq+g8yXddsbpQSGHRI1dOdub0KaDsLBLoQoDyZMIoniBVgB6OKXF0g+GEUEIgJY0gJPIVvieLSioDOncasahXNSWKoMuvuI1alEX/pZ57sOEohEAqZ3YLIajV/elxjcYaSDODNi72kGtDZjRl4wDCEf2aokRQG+3MVe2QFqwFqbVzkQpL4VHHIwvlWjukJkdkIqemc6JJxkrq8dRiwHIjI7IDGkJSE2A9SX2twYHK+VDnYJ1x4Q9Tkls7JHnCu91dnjk4IPQkaaqwaUbYTzkfeMRhwE9UzjDLqrYdnU9RAKpyq0PXWLUVzUz89E2nDZylK4pNVeCS866KY2R8Nk2deuazRJ2m7jDodbnRXMG/dB4jFwh694gmd2kOhjAasWoluUwY1gy1IOTe7U0GvQyrg2IXF9X/okgZOLPNFUp7ymNjscaH55e4PBwTdDKCusHTPvXUMo5z4iwji3dYCyLMKcnigkJg0Xh044ybu/uMU0uOQlpN88ar/J//4uf4j/7+D/jpN/8/vFlvEUQN1i8+W0ZSqnkSwP7WHXr3bpCOpqxQIjoDIph2gmRdMK521QsitM7ZOui6D8c3HCmqDKpyPzf/03Nw6HlJpfCDoMBpVRhrmWSaiTUYkyFFghSuXc3zFL7yCD2BLyWh9PCU04AeFmmt6800uhDQo7mQ2Wuw4NI7M2ZqydXpUAkBJfA8R8FXWQrWWRd5lpPmgiRLqzPVajUOJjGelSTDCQNtaSw3qxOUCO6PMh5ZKJuyhq812ubsZXD1xg437w2JTJ2aDoi7KbZTI1IeRueMszFhakj0EOW1sDqht3ePuHeHJ+stVpuG8XCfkfU52FcMbYjvh5zIFANP4vmFn4GYg3+EGXPqQcIpqArIy13s8PdK56XawUozKFeYieLKmzd59tk2X/7cn+FHr/wJW2kP21zi9rbGbuW8tLLGxeNtage7bMX7jOMxy36NQXfC/YMRYf04VsX4JiNJHCK5Fa6bBKSLzAmB5wV4wmffh/ttw+ONJuguaI1Phh9qIhWyT85qU7Jc9zAtgR73sdonMx7dZELPQqx8BAJpFJkVTD78Kf/r33ia79zO+bvfeYWkv09/6/aRjQzc5rWysMCLn/gcge/xe9/5LvhrziIRRbtacqOcXtYef45GZ5kPf/AH1TGkKHofpQWTEgQBSnlO/ktncfacVQuoBRw1u1IShEIWfm9uDaMkxcap61EUAozBs84P9T2o+x7NKKCtPHzlO7ekjEGUFoEpzN+Zi7DFuQVqPhhTclwUr9hCUKvaXAWB8qgToo0DGAMIajV2N29hFpZYW1rl+OoSi3VnGdSabdeM/ojj0fOU6RgrIdGCnS3L/nbNVWRYS3ekubVj6eYxnqfp1BrEeYYYjkBvkfprCDNicnODtcGAz6wpLhzLCOrLpFkDIwy3Nix7Q8kNrRlmqWvtsg5W3hR5qbLTwqGemCOasYokymnP33zLlCwehIuMVXAeVmClQlpJy6+R5znp/ogP3nqX3maPQI25+a1XobZAPR5TN2NG3oAMDVayFobUWz42FLy4dpaTgw7f/uAGoxFMRgmm8n0ELtboWhL8oIYnfWqx4dQog2yI8DTSd/lf5UlCP6euoN2BIMxIkpxhbkjQTPIxB9mIBIHSCmlztGhwR7ZJF9aoB8tcen6J//STnyYZpFzb2kYbjbUCIz2MF4L0WD92EZuF9Ptj3rn2Tbcw2s8UAgYm72NGrxdTKDl1+RMkk0nV/eK8Ard5ZvEuNt1iZf0Y9XodcH7+YdDprVsf0F74LGW3h3sqRS1x4Tcq60xZpXyEdFisaaaZaO18t9ygYo0/yWl5PgpNKCH0XNdHFAREvo+vJNJoMA4/1gqnXd1mMQsDKqqglhtmftMX09cB9sZDDjZvc/LYGu/eusnC0hLnH3uMpl9DK4/vv+5ArS9fevqBWEwPG4/8yW++fpMzxyO08bm7YxlkGamE3Ob0dMawL2BgyZMx640BT507xapnODfe4vZWSL7gMZqMiKQh1BlB0GLQy7i/uUsqQpq2Q5pbJhK6vk8yHDmsE+uYcjXT/JexRSdAGc6ei2iXDFeHxxTT1aWuxAzrr8AKQxZnvP2zt/CUz/UPrruAgjGIZEjg+/z5X/o0t7YPOPB8hmtnUKMhtaRHXw/J+gMmJsNY2EsnpGoMRFAkmB0Y1cywZcRS0c4yGt19BvaAG4xZrYV0mnXqSiKERtVd98U4zTG5h7YBQvoMcsFuDkPpo1QEnscoWmCLJoNkiSg+QZcmpJpslGPEAkYU0MLCR+oa0iiubViENDTqC+zuuVSLkFFFJZiN3sEaF2VsHz/P6uIKaTMnqDdJRs6kFYKiUPuo71RtjDMbZDrszXSbFBhDxcTMbsBzWLyA5zuUe4epKxx8pIF+rhHGoExO6CkCT6HiGE8kBFLgS0GgBJ4nCXzXrqVwwNrFHoCY8bhtIZ0PS4RYLKnOyJMJQbDMYDDk9NlzLi2DRNqSZQS80MP/5xF9vTpK2L9lCFAII1hu1VGNJgQe/WxEt5/Q3c9p+BHHj51iOExJdM4z9FmedHk70MhI4I8tHV+RJT53rqUc9H2GOiazIUq4bnQtDUEQEYYuSZzZon9QuRRGmuf4IiBN04qfYdZ/nIJJHV4gJSKtm+lpA63ASAsUjn1RdAw4lAXjUTMJK5MbmIur7J5/im/dH7NUX2aNO4y0ZWkoSBPBeDxmLxtiVQ0pBHmeMx6PaXY60wdqrVtAwiKsxiehKUZ0agFJlrM5GRGHgiUVgo2QtglEjGPBjayOiJqgauyHAXdXFCNdw8tqCFlnGAVo6dO2rp8/SSV5mpMa7fZ9UQa6NFYkGCCzruXtXEOxs7uJCI6DdC1I6Bw7uVrNmzWa4SSm39snT6c1nWWw5uiczyzsB7z3wBzI7BObYTkrHTuLmcs/e1I5nF1rQGdgLWlesnZPAZQVlsCThL5PoHx8KfGkJfA8fOU5dmZroUC9t8JCZW3Nmr7zzrKxlnqzSbPRAiMxeHhmuukbiSs1fcTxyEL5q49fYGJyhsMR7brPhbPHQcJgPCTGMpys8B7brJ9YJU4nxGnmeBXMmNOja2SNdfyFiAUZ0Fhrspcp/sn9BGV8Wl6bsFbH+gqUpJ4Kmo2IRnOBXBv6wxG5tfh+UPTs5eQmx5H0lHAblQsPBS7K/AKxWDMTi5vzIySuOG8mpVLVgFmQrvOhXzvBZGmd/UzRV5KBFdwJFtmYwBP4LHtDApsSyoBWTbDVc7Wcw+GQZqcz1eJGk6VjojDniy9dZuuDN4gbx5lYza4MSBpNrKghJm1SW8eIGggfoxUjanh5hIePlj6jUJJYi4kEFkUuHNdF7pJ6GCyJsOhQkBpDVjYUl/ByUNSYalIxZNDvIevrSHx3nPgWJtvkqQsX2NjZobt5i+/9zn9OxakxOywIGSJUjSRN0HmO8oNC48z1aVBbWH6oQIrq31kNWwTLOOQfCqffpNYo4XhOhQCULGS44PmwllTnxKlGZholMpQUBNIVknieJBCSQLoWuMBXeMrBeqoi4mpL6BZbBoXKHKal2ejg+6HDjhUlwpqhQhr8qJ3n0HhkoUyCmHA85tzpBWrtEOmNyfOcmp8QmBzpp1w4FpLFB2SpxViBEZbc5ERZzqmDAe2oxpmzHTqtGndu7JDg05sk3Cch7x3ghT5BECD8kDhVTDLNeDx26RALljHWWsePoafsR+VOaovIW2m+znb8V/7CQzYsIcrQUbEhz8QmtBJoqbgTdehrn/Eow/cDjK+QjRr7psn2pMvSaJNjWY9GmNA4kKyadVIs3W6v0JSCJEkweUo6HrJ37ybPXTjDqHGCV5MnidpLDGoNun6LzEq0cIQ2qliS0pco46Es+FagVEQGTHRCSu56BAvBV8or8JISUm3IpCYlw3puswo95RagtshJhk0nmN6em4vwdBHut5j4KmB59/r1aq6sdX2In3jsMd6+cQNT5PMsFi9ogb/K3v5tRuMxQWeKGjc7lk8+5lJX9uh77hxHXxWHfpbHtYXmN6W5OxOBFcIhMoAA5R8KGFpio7E6h9TBdyopCXwPlQmUdKBYUkpC5RFKDyEUSoI0mr0DB29yev0EttZw9eC4Nbe00ODHb79Nc2GZU2urbO/3HrzwHjAeWShvXXyG4/0DPCYYPWE4HhOGIQpJYCP2wjZ3tcEkQyJh8XERtjwI8EREbTLmWN2wEnW4eq/Hne0J2g8YSk1eoLQJNKRjTDJBW0WSaNLMRWCNcIaIEGClKPJiokIdnx2zfuX0PUFZOTr7uep3Dgkl0wdukAwRXLc+gWpBLl0PIAapLUnks4lHkEfEzTW82hivsUE9r5GNJ2xs3Kc/GtJqtWm32yghaDQW8U95fPeNn9IzC+TROfzaOrkx5AWRrYdGCYlys+mUtnW0a4GUKJMwMRkTG5PozAVwBKRJShQENIMGiUhYaEcca0jS7ibWGJTJuPfBz7h78yoWy9PPv8zmQcz1yRYAKjoDgM66mNE7ALSbHmvLIVgYTTQbOzFX798vfPupRtN6uvMJio3xARwapQYpTJXi8zPIAuURHhDMO/yH+07Z5CaK/6boCLPpkPJMLk+pEMKfefIFALZLhGNt7kxlHAi3L116zkMQKo9bt65hgVazTRJGLvWBQJocj5zhaESn3iJ4RMCscjyyUP64ts6p5hL90S4nunu04gyNRx7V6TU73Gyss39uFXFwj3jnKq29faLhhFwYuiRkOiHrx9ze2uXqVsxBFtANQ0wgK8ZbxxvpKFwNHsZR7xTha7cLuWDpNNxtzBSVZjr1s9M/+878YyodfLd65DTAUD5YIcAIlAjIPY87W2MuHe8QeiEgUCgC0cQ3HtZMuB+MuCcEXjZid/JDut0tZBRx8vhJHrv0OO12i1qt5oRLW7Y27vPGaz8htQOSbA8lWngkGDoOcAyDqsoBlQsuSEWMcZoSQSqg1qhzsq7Ic+02LZ1hNz7Abk3Is5S3/vB7vNLdK8rK3JBVkzF85w9/j1/91a9zfzLdyKy1mOwAbIIQ8K/82gleemoZKyDNNX/60x1+9w83iqNpdDZBSh9bzTKFaYlLB8GcAVvwnRWRWQpTupRSU7SJTbVoJb925uessNviWJapC1Kc1c6thQIlwd1oFQ+ncHdsBXQNVvhu1ViHs5tojbAak2uETR22MZAXzNU2z0m1JbETDhhPr6s4y6OORxbKjevbiJPrDBYeY1su8mziEKTvLjzG3bWnGEaSsReiVs9w7NxZ1u69iXn/Q5L+CD9QZNZjP5dMbIjstIkHE5qBR55YUqg0n9vtXWeDVRKrJVYXkiNKzsfp7msKISojZU6YzHRpiHJuFBUsR3F8hK2alYV0mDlCCIRSqIKVS6qQyUKbelgjbKzh6Q6LrWUEkjyx6FySa4kxdbTokIQ5eOuY6Ca9wfswCTh+7gJK+eS5JssyV3VirMPr0QpMiM1DfNlE25CgKOXyZECr3ijycDHWOL9JCMV4MkaajA/f+A77u1u8+v48KFPV+CygFnm88HSLE8eiaqE8ebHNQjvknStdfvu/vc0PfvBd14LkLeFFK1gsJnPmmedJnrzQBumWV+hLTh6bQfu2KTq+j/KbzPoIFqriA4SgPxhUX/nwT/8RXq0BQOfsk3RWTtJsth1MSCU+ZbrFPSsnru7VKXBICdvBzPfK8eCgUyWQM0XmZXO0nPmOtdNvSKnwpA/WkitNnOd071yhWa+jjMe9O7e5B9RqddoLbU4trFfPQWvQD0oIPGQ8slB2uyPy7B6nzhwjaC7y1nrKynDERuzR297BW2jQqXks6Iwz4w0u2gM41mEjCOlnhtZSiOmsMG4sonopw6t3ibtjTJrRnWRofBxDUeEbWjf1VrgoWKFIcbwOpiDsLISt6E5wiwCkiEAItABdPAVhfYStIWWA8BTCV1jPMS97QYgKQqTyEEqR+QIdecjAJ1ABDRHiS5+w1qDfh2wyxPd8Aj90AQDXD4+xxjFV6bLVzUUJlVLFWp0x8wp6Naxj+BIypdMJCK2kaQ5Aa6zVvPndv013b4eNuzcf+mxqNcWJ9aj62/MkX/rMKqHviqsfP9siCj28Ml0xs1YXO65ofTBw1Tyy/QxCeFhrMGNXIP+JJ1o0ak5rlGOuilbWULXT2AKDtRwuum0rjXnt9hRmZLJ7v/p9cOdD7vsh4cIay5deIGq2aS+sOtO9wE8tgzazkdAqVPBR1TKztuvsi4W0V2/bwtSufNFio6+0PJUV4FwmyCYjarWI0WhEp91maXGJzuISYS1gdaEGgAoixuOULNMPv8ZD49ExeogYTVJu37rPaGWRrBlgbJeF7lVWxoro2CL+yjFW44yF/j3ibMwoFzQXGzBK2DsYko4SRNijI+qsRYoPR12Ory8RDAT9MUyyzBGy6tIzcH18DoXDYdkIQJagwOUnhIcVAi088iDCrzVdCZt03e2e7yO9Oka1QAUV6BFFXs0KiZUeVjntGHhOIMMwJPQDFBIlPGq1kEAptNFkWc4oGReLwgE/ycK0rhERhFGVbnFo2fOFDA64WRGEASQpizXN+L1v8sMffJvRoD/VdECt7vHcU4szT8MtpnrN4/MvrdBuBix0osJaKCpQChS2Mu0zKywz1j1zq1UE+O1PFbTwOcJmWODF55YcYgKiWpij8WHuzQIlwVa6qOhlLMzCQwGd86fqtJoeWaa5cnOMzhImO3e4u3PH5W/9kPqx07RPPs7yiQtEUc3lNcwhKZsxZ2c3Gzvzy0fFPUsDl2pFTSOq5c8j7pGdN8XH4zHrx447drMixnHl6ocAXHrmRSIv5HCg+qPGx+in9MlkxjDOCe/dpRnGLOsuC8Kw0l6h2/C4g2IjN3T1EhOxhpQ+C3aXE6ZLLU8JrMYm24QqoB9LxGiPCwttPn26RRZrBonmXt9yZ3fCQVLnQI/JEOTCVaBYKdFSoX0fGQT4YYQJWoiwjfI8Z9f7CuE5oasseWsx1scQYgo/wbWaGKQSeMpjodWiUa8T+iFhUCNUAWiXmLZCOqo6a0izHGFL8GSB9ITjIaTIhYkAP9EEno+VzmFyYFkaY4oqJRcBQXlOKI9FPhuvfZtbN2/QaHj8mc+tFmF6wUsvLFOPPJqNoGpQPrzIpibe1Bhza2cavjqyMK0zBX/y1n71kmp/EmTTcXWk+9hsi2ZdceZkwwm5nZqk3/vJ3swFVNh+zmopE/2ejxKSvEwhzJz+X/+tU6wt1TDW0B+kHPRT3ninx0/f7pGkliwZM7j9AYM7V7gvJI1TjxO0Flk89zRRvVU0GBQgWeVmVM3GIQk9Mlu28EFnez/LmqKZOZ2drPK3Qj3HyQSsZX111UVbF5cYj8duQxOCLI8LrSoq9vBHHY+eElFuElppziUv4xmpqWsPnRm2s5z7I81rccbOKCfNI0gNxuY0hMd6LFje7XOuXqdRa3KQWrb6E0a02M2XqTXOQjPDMxNWlzzEsiZOzjEaxag4RhiDJxXSC7CeT+57WKncjioVVqgCo7OgW8OAmLJXFdEGlHAOuZSyYuOVUhIoRbtVpx6F5Knj38xFhix2fVFIg1KKWi0g8qLi4Rgiz1K3fYzRHNy/xtW3X0dJweUnX+Q9ItA5cRyTpRlBUJD4FEEWoRTKU/jCsLmzS+BL/uP/8dMsL0bunIVgVapAzC+WKs5RKY3Du3r5QY4EMcvvbe+59ishQ2T9hQrlzYzfBeD86TrN+jSVMMsnUw7Z/BRC+RXtXSkS9SAiVBKdu4S+niERKjcxISSLnYiFdsi5k02+/uVjjOOcKzdH3Lo74d2rAw76OcPbDhx6/50fESwdo37ycaKV4/hhg2ZrgTSP8aUrJBDCozRyndAVcXcxu4FN/c/56OxRgZ71cctr39u8idE5j508zYe3tl3ThNZurgXozHFgKs/DGl3RHzzKeGShXF1Zgiyi09vkCTOhedAj0WBUTpr3WehPeKHe5Z004oapo/yAFDiQbWzQpo9mMEo5+9gn6LUWUVJwkQYj6rxmJQQBkwQGxjAMLeMoJOm4agipNQYck4TAkYaWydzCbyuQZFxOShQUcVIeWsRFGkVIPCPwrEQKRSCB1NCqS1aXItL9O4Atm/EdWo6x2Mxy/9oHvPH2a5SSoPOM7sH+Eb/mYHeTE+vL3NvYLOpN52txp8zPAUYnxWtQr/lFeVsRzPoIdwmYCuzPGWJ25RVjNMnYOyjOXb+E9JtuIzA5JNdRSvDLXzhWUIlPl+o4ztjdd8Ls184gOp+irCvWJq8CPVmaQL2G8gLGwyE3b98BYG05pN2cLzsr881RFBBFPp95vsbLn4A4zbmzMeGHr+2z3025dW9Cur9Jur/pvuf5qLBeXVt9+RjLp59g5cRZEIIoCIs1UQaQ7FTDzurGqr/2o4zdqV4thzGGMIwK/Fr32mKrxf/rez/AD+tcOHH6ox7LA8ejd4kAcaYJsyELNQ2Zqz30dEZufRqjmIX+BnnjGHu1iH4UIG2EHzVZqB+j3rrMwWTIQWsdGyyQW4PBwxKhrSHLcjIrGEUJMTk6BzJT4MO4rV7KEsHaoZej3MK1ZXE6EIig6BIRGCkqJAKLoR5Kzi64CJpvBNFwg/72zcIP07z33Z/w7bs33c7+kCGlmKsWq9c8PvfSMhLB5YstTp2sc+feiL/5d25y9vRpNrfl3C5ZsW9Z5/dJX6HN0YVQRgMPL4MHpPw+xii0bQHCdW9rQreXIVQN1fwUZXbPZF1stsuliy3OnmzhviQqbTkcabp9N0dWLqKEX5mR1qQIGxOGAcKTBM0mOjWocVJBtiy0PcKg3EYPX+H0mSEsUc3j8fMtLp5rYjTsd2Nef6fHu1cH3NmIsSYnH/Wq7/dGPXp3PuSmVCAkC+eeIGwtceLck7QarSLYVe4w85ueqP6Z+Xsuolt61dNLtwhU6JNrB54FruY1SV13kCoQBD9S1g+NRxbKyf379EcjLsgcEShGqsXYazAWdXpikTQMyfDZDZvE7QUmUZtaVicQNQZ5xJ6fISKwqqjQx02atVnBPCUIPEXgNUmkJs0hyXJyo8mtZpIl5DpHVbctC9/MBX0QgkApIt/h7VxYkEiTVakT3d/k2k+/w/fefu1oeVgxajWPS481efLxznQHtSDE9PPnTzdZW6lVfyspqdeLaSwetDFOI+7u7gCCNJsXcltiBwmLCjxyLTh56iRXr35Avx/TjBrVc7TVcXnQGp4bD332AqalaQKEJdeWP/i2yzOq1gsE9eNgLHmeYyYfIoTlpeeW8JRHabjZwjTb3p/BMW0+U5i0FiksQg8g22H5+Dorx465NMdkApOpZvz8i8suSGenFzjd6GyVo5y9Z4FrSl5brvPrX6rz1c8dI001g1HGe9cGXL094ubdCVhX3FCCf+1ffROAjTe+Q2P1FMoPq3k4PFeLJ8+zsHIcIQTLiysOArPckLD0hgNGkyH3P/wZg83bREFAkmX49RqZyd38SIuy0wc2BS959PHoaHZ2GdU+w1atwXeVRDcDJl5ILHwGtokuDMhM5kwE2DQgtT6x0ZBNEAgCERD6UQEZ76D4rTUkcUaa5mjt/I48N+RGoIuFZKTF2LwI2kyJcJYaocNOwnIinDC8/SbX3/w+wsK3Nu8682lm+J7k1Ilatfe98Owy66uRW8zCcO50k2bDR3lyGjYopOKhGqpyUiiOKuZ3XyHIC6EsabeFEPjKgSsdP3mCYa9LPfJ5//33uX5ryMm1xtzhq0csKsvw0Pl/Xnxx+psxLlL83tU+V2+NEP4SrdXPk2qKLvkMM3mLTtPn6UtL80tXQJYZ/uBPCtNR+tSbxwgiR5OYpRnCOLPWpTMi9rs9GgJ2t7ew1lKvKc6cqD80pPJRY/aTvicJPEmz7nN8tc6XPj3dDG/cHZKlht2DlH/4R1tkuWV9eZmD7hajNH3o8Xv3Cjp2IQhbi3O0hgDZeECeTjFcT62vEzZbBGHDNUYUu2iWZ9N5/wUsm0cP9Bz7NImnuK1CbmkBothFCjMRLJ5JUQZqWiCUB55ERX5BrS1RVjIeJ+S5IU0T8jzB2NwFAIw7lrVlQYDLWZ5ajvClpW1GTPbvOYKdohj6g2//Cb19R+H23mSMMUXHCIJLF9vUo0Y1KxfPt7h8scPaUlTNUxnsORxAqRjvmMYMqyV0SAhKLc3Mp8pCZSklFy8+xsEkdwXaJmM4HLju9TTjYH+P7v4eZ06eYL6v75/9MNby2tt7vP5Ojzw3vPvhAFSH1ul/G+m3UCLDmgnJwR9B3uff/kuXadQCqlaH4sf717rc3XDVKqrxNH6w5H4Xkjwdovdd4/NBt8uf/JN/zJtXPsACWZYhBPzGl9dYaH10G1OpncTMhudMxqkxX75VzrxXPUy4cKpJt59yeyMmDFxK7CuffQnfD1GeRxA61i1jLL/9u7/HcDSavwBrSfr7PHDMrJW7m5ts7u6ysLDIp178NO3FFe7dv4tnHA9mvdPBQ6B0SfH3aOORhTL2my5f6EphENZV0ysl0cJV4mup0EWBfJYmZBOD7omqSFrnLgollMNaqRWUB36gWGtHtH1HrGpyTWBT7r31Hd7/1g8Y9rvA4YZlCANVYfB++pNLPP3kAmdOONOv1QgK6Huq0GM5mbMRNlO8biqBKgMAVJ9xgjcVuDkBntvo5z1AIQRhGDLa6XHt6jXCyCcIfMIgpF6rcerUSZSAN998kycvX5w9Kke22CIULx6kLX/O0Aa++8oWf/8b9103jfDwm88QHPsak+AYsRnhW0O89x3M6G0W2wEn1hpz7VEIyDPNH/zxBtaCV3+cYO03GOUSKzRysku89TvYzPVjDsdjXnnzzeoaAl/yZ3/lOJ9/cXU6f9VjmL+hKsc6swG6mZ1Gl0tG+W4vYRJr4kTzg5/uYy1s7Mbc24yreWo2Ij64c5/X3zxKRTfbe6t8ifRKS2d6rsaxiLWLbdI0Y+VSE6+myLWl++GE8W7Kzvv7/OEf/j6e8vgr/9ZfJzSGJE157MJTBJ4q8BMf/aE9Or26u87C1HNIYWmu0bHz+XJjyLUmM4YcXIqiILHxpKQZ+Vgb0Iwka3IfZQ2ju+9w94p7cO/v77C/s3nkvEuLIasrAZ94epG1lagQGueTXX6sQxAosIIwKOAi5uzMw5yP4sh74pDglRE5YWcFzE6FtRRKUX3r6HQXq9lYw+bmJkIoLj5+kU6nRafTplGvk6UZeZbS3d+vekKPHObwse0DM44fOSyCqze6/G4hkF7zWTonfoPG8gXuD1PSTBAZ10xu8y4Aly40qUc+JcpDcSByDQe9FITEX/oSwq+xLENGekR/+x9WAlmvKZqN6dJ64kKLP/OZVZYXwwJUylYb5QOtcaZ4RuXJjXV8nZu7Md1eyp++usekKIyPk49WQ8PRiJ+9+zaN1bC6F4tFBZIzLy+7whRraR2rIWuOXZvCuhNSUGvUqdUjLIIoioiiiCDw8T/vY7Rhe3OXvWt9PvyTO/z2f/03aTVbhQ9uSG3uKtU+RoTukYVyOJxSeTkIlMoDx+LwVNY7IZ40LHsjdH8HhANxngz2efub38Ri2clz3uwdNQ1WVyKefLxdHFPQbnp8/qVjnDzRxPNEkVN0b1cwrzNBtOkD/qhFK+Z+F2Je01WLoCitquIixWulrTujC6fvFw96vm9Q0O12IWxRi2rOf04SPOWhCvPsUSm3f+Fh4cc/2yc3FpDItV8h9Tok+zvkuUNga8uc0Ay5n+3g+5KvfG6d2bpTW0yE8gSf/tQK3/7TLca73yMcb7G29hz9dI9+vg3AYtvn3/+rF1lZCpmZzhni3cK8L4RTPEDtGwtxPE2tWAR//MNtXnljn9E4J8t//gIPaorFcy2wcOzpBZbOtagtOCCwOElI08StH+UKOrzAp9lsM5rE+L6P7/vU6nXCMKBWrzGZTFCeolavFYZMUSrheSytL9NYbLFwqsM3/pPvctA9AByynh/4jpg28D/6gmfGIwtlViR+lXCAt+eWA6SAIOtycPPNwsf7PsP+AUY7foVyOARt93ur6fOlz6whgacut1lfrRWvB9SigFkjsyg/ZK5EjClcw2y7zvR7D9s1Zz9D1ZQwfcUWPZWiOsdUIEuzdjauMm8MHz2XE3Lf9xGeJE9iTO7af9KCgFQUNAPTsNKjjkfddd1F/4VfO827V/p0Bxnpjf+Mw6GO3eIurDX81tdOcXy1UWllO71NlBJ8/SunwFq+/f0rpPGHvHHwB1B8t9P2+ff/rYscW63zc+vKyrq7grZvv5vw2ttdhqOM4Vjz1ge96V1YyI2dM9uVJwhbASefX+axzx7HWsvVH27QOhaxcr7taBF8Bw2pjUVLzXAyYWl5icxoBw1SllWGIbVanSTLWFpZpVavO4tIyqpRIkIwGo2o1YuqLOueb0lrOEmSI/ogGQ/xAuUE/2M4lY8slC8sJ5hkwPXX/pg8TfjOB2/NCR5Aq+HTqMGzTy+zvlKj1CuLHZ/Hz3cK4RREoctrWXHY0n7QXzOYKcVwVqooEOJKbTeN5j14gQsqWP1KIKfm6eHviiPfnRHqMk9RCmdZHG+rTbS60GazhR8EiCwj8CKUBh2nDM0YP1BILIGSVbG4qNS/rO5/2nJW/PtQmZx9Y+qL1es+f+W/d5b/4m9fJ0kfXBhtgeee6PDy8yvz9wpV4ArAU4Kvf/UUSsJ3frRDkrp2sRefW+TXv7zO8qKrdpqdSWMte92Y/tBFoYW19IcpP3jNaZQktdy8M3yorxy2fGpKcOypJTqnGkgFp55dQVuNlRqTZ+S55eTnFhxxbiui3x9i8qJYxPfxfA/f9zEWmu02S0tLBGFYFJO4XTdNcyaT2KHdG42xumCFFiAkaZaTZRptSmYwg9Y5eZYy7I3Y+pkLOv7mL32V4d4m3337VX57dxOpFOlk/LCHdmQ8slB+4//+N6Zf8gSnT7jd5OL5FhfPtxFCcP5MB78A0FVF+5GoOuceLC5HXzn6ZB7oJJc+h2AqDR81ZrXe3NmPGr2PprXcwyorPrPMgSG/f+WAu5vuAezv7/HZz3yObrfLO2//lPFkBAhqtRqf/8IXsTpgdXWZy5cuTVmFj55l7me1D8DRiM9sVcPMW1LAkxeX+F/8ewHdQQoW3v2wx6277jrbTZ/PfnKJx860CQNv7jDuNFNXBZxgfu0rp3n5hRV292OUEjx2tu3oB4q0hMalT27cGfDOBz1e/dnBR/p+QcOnXbSDlZe+/uQSS+faLJxsFAzLmiRNAEsucgbDQRVFdQrLkfoYJPVmk05ngSAM8IIA5SkHgYngoHtArdGsupFM8SyV5xFnKbXcCaND33dmdpZpJuOcPO07+BQDyWjCzpVdsknK3R9sMdmNOXX6LM+99Ksco4UJ/2u+++qPHnrPDxvCfmTfy3S0Wi2++OlVvvDpdXxPsrpUdxpLlnQAs0+yWOj2oaEQ9ynxoL39QWIy86lpEebc31WNqDj6lenn57rl5s8mpmedE4Diu7NIeLNHyLXlx69t8ea7Xd7+oEeamQfu+EcXevm6IAgC8jxHa82f/ZXj/MZXTs/1+lU60s6bueWimj3B/IZz9G7L75XYNQ7usuyQmH7PVhHI2ednp3R8MzdkrWUwTNHW0u+nvP1BjzjRvPrGAXFS0gBQuAHT7zVXa6w/tcTjXzxD2AyotUPSNHOAaFlOkqSOlEkbTEE5Z60lCAM67Taj0ZggDAiCgCiK8IMA3/fR2iKEpNVqYazrwKwaooVkNBohhCKMQoyeukDGwt7uLu1Ohyw3TIYJ8TDm3ht3Ge9POLjWZbg5o/EM6KIlq91Z5JnnX+KJF7/K27stRLjCE6cW8dMN6jZnRQ9o6jH/7n/yH/Dzxscijf3y545zYq05E12Bqjq/FI65wMnR32bHR4eJD2u/Q589tPIrrfmRp5z6jEePKY78Xcl44T9MF6OriLm3MeAf/dF93ninizEW6QlWnm5SW/QxuWX7rQF+XbH8ZJ2Vy+2iRM/tvDsfDLC5YzLeeXuIowgX/OM/3mShHfD4Y21WFqOqDtb5vIdvanYX4gH3P7O9FNHkspqodAHKqZx+3All5c+XsCo4Ic5yw85eTNkkPBjl/ODVXd6/2ictFujhTUkFilOfXOHkc6usX1p2fZfG9clqaUnTjHgSszfI0NrVMq+srDKaTEjSFCklfhBQq0WoogfWaM3K2irLyyuUsDBQ4ApZGA5HSOWRZQlCFgrAGlccLiyTOAapMMbdU55nZEnO1vV9dmWfO6/cZf/DLpPdcXU/YVQn9KeFHUtrJ7jw7GeRQUS/fob7iUearGM7S2jr8caOwbACaHzTQZmcf5efPz6WUMoCXKp4lMXjPmSUFjfwSNQJh9bUkfce/Mc/xTgsjPNm2dwmMqNxD5vdo3HO3/r7V/nZu12y3BJ2PE682KJzJqK2FFXdKadeXgBhK8zXSgiE5cQnm4U7ajnxonvQ+1cn3P5Oj7/139wiCiUvPb/EVz9/jLWVGkpWzJQPvrXKhXuYQ2Dn3i414eyLlc1hIc9d5navO2FnL0YAN+6MePO9A7a24/ntSwgaazVCNb8rnH15jcZKjc7xJrWlgDRL6Y27ZHmO7/skSUKWaYQqGLukRHoKqRSTJKbWrLNybJV6re7woDzlUNdxm1m/38cPg8rHm+p0wSROiBJXb+v6hlyPaJblTIYxw96EG7fvoo1BG83Gq5vEuzHjnUmVWegsrbJw5iRPvfzryLDByF9ic6Jd9ZqQpDn8cJAgbchCY4XO+iIDI/C0RRTFIFpqtDAkSoH3aJH2jyWUh8fDQiruvf8/GR/zQkfjjP/ib1/h7fd7RIseZ15qs3K5jgpUpUXLnVX608BQBS5MYT4KW5mM0ndlfKtPNFg8W+Od/2aH8XbG917Z5cev7/MrX1zja185hafKsq8ZkZi7/o93M9XWZF3HyDtXDhgMM0YjzSuv72GBJDEPDQ55kceFz5/gwmdPsnhyAaEEaZI6rZNmZHlKkiQM8j6D7cIYLhoLFjqLKOmR+jm1eoMoimg0GnjKc1wrSjEej2m3O25TK4onirgaQkqSLGWSJCipXCUYAqsNxjq3Is1y0lyTakuW5eze2uL6H15j/3ofmxvyyXx+OAgjLj/7GWQQsv7sV9g1C9w/yPjhMMcOHMKE8z+LZycVtXCRlaVVGvUmIneRWWMsupxdLar014MwcR84rx/nIVZeii3JWMu9df5kc5vwQ482XaDV50qN9Qhxm38ew87+9gBV7wTyQ9650uPcn1ng+CfaSF8+4FrtoR+2sMaL9i3XTjFja4BjLXb5tWf/0hq7V8bc/dGAZJDzj769yb2tmL/0m2dZXIhmziPmbcXS5izemvkU1joEwCTV9PoJo3HGj17bRwhBnBhef+cAref9YakkQglax+qceHa1uqHOyRYnnlwFJQibAWmacNDbZzyZkGeuwaBWi6hFNfqDAUJIl37w/cL381BSEdUl546fIAzCarrcGQzK80jSFM/3sLiaaGdOO9gVay1ISZJlSGkxRjjg7jQjTXJ27x7Q2x7Rvddj671dskHK3nt7SKFQnsex9TOcf+JTZNKtxPDUswyNx5XdhNxIrm4JpBlR+ZvSYoRAGIeCp4IQP4hoNZuEYUDZzH4EsR+BkepQgPGjx8fTlHZa9T4Xe/mIaoWfV14k5+9g/tBi5pePW1v2CKPaV8QDXp9b3YI41fw//vYVrtwZcfnPrbJ6sXEkhHXkEsv7KQrrrZ1SnFc0JsymD9xnpSc49lST5cfrHNyckPQ1P/thj82dD/gP/vuXWFyoUVUQFpc4BVUsGI0zQ6YNt+46sKorNwZcvTFkMMrY2Ip50PAjj8ZajYtfPIVUgsVTHZZOLiCVwgsUSZIwHo/JsoyxHhOPY/KuPtJ1owq69jzPWFxcpN1eoNFs4vvBtJUJ2Nvfc5AoUYTOXTGa1gaE8/WsEOzuH9But6cBH6givHGao80EnUOeWrq3DxhsDrj36n26t3pzLXN+EPLUp77Msed+je3YY5Jb3ugnhSkqsHctCIMVjiRI4oS+ggUREiMgDAOa9RaNehMpJZ5SlNg+Qjh/1orpqhbYOUbnRxn/VOZrNT7KN/yXYBhr+enPdnj3wwHnv7zAysW6Y/SyVPCJ8IB5rzYZU5k8ZU5zNpDkgDRnvlYIq/Jh9VIdgaS+HHDl93f5T/+v7/Jbv3aCz7+0XsFEOuE2ZJmhP0x590qPP311l8Eod2VxHzGkJ1k626ZzvMEzX7/I4rE2KEGWOrCn8WTEJI7Jssx1uWhXv7yyugLS0TQo5RNFIWEUEgblT584TgiCgGazXRrqU2UuoNFoMYlj6s0maZ4700+XiOagtSBJNeM4J8scg9lkFGONYLjdp3e3y/bPdhnvTbC5YXzgAlBBGPHEU59ECMWZSy+g1h9jkFp+cnWXN9/ZJGy0CMKw2utlEVkvoBBmnkMZCLMIKVGex8LCAq1Gi0CFLo1VaMfSirRVN8MvLhD/bITyX5DxUVp5to7yAV8sP/TAt977cJ/f/t2brH+iwfHn207jFSb2o6RIS414+INi9v3SfrfTu7AW1xUjDUsXalz6zRWu/P4uv/N7d7hxZ0Sz7s2la67fGnLzzqiKgj5oKF9y8vlVHvvsKTrrTSyWxnKNOE1Ikph7m/fR2jFdG23JC2Zj59K5oJUfhSRJSpKlnD5zhmaz6TRGGdASjoE7iCL29g5YP3GSJM1JE5c2KYXOWOj2h3hBgC7YurUGrS251uzvHZCOM7ZHe2y8uYmODfd/4griba7ReUGfh6DRbPOlr3yNE2eepLF0kRsbCaMcbsQpO/dytDWYsIPMRwy7Q6QY4/s+YbNBUC9Q3A+ll2xBc2cBFQQ0221qUQ0p1EwheymAJVXBkajhxx7/Ugkl8FAJOVLKLR7w2gNyKoNhyu/+wV2MgBMvtl3xsinN0aN271xUshKyh2wE4ujfZf3S7MvWuvqepfN1Lv3ZFa78w11+MAtc9ZAhlSSoKywQNQPOfe4EZz91nMZSjSxzQZjhaMTOnZ1ikRUaw0IURVgh8MOAqFajUW8QRmHBO+mipbu7u0ipaDQaRbmZu2trHYy2Uh5aa7q9vhNCQ8HA7MxUbQy5tgxHCWmcM+qPGe6OEAjuvnqXvSv7DDfLtiqLUopmewEsPPXcy5w4fZml9adJcp8DLbi+NeJOLyPt7ZGYnLwI/mgtXWWOVNSbdZrtGtYYJpOEOJ6QZTlRFOEV0V1njroyO+m5SqCo0cALI5QULopuZvIOBZJDheRv/+kMx48nlI8YPfoXdtiZX6aB0QdMoHvFWNfydOf+mPUXmgRtr+j1LL976NuHZG+2w+LoB+YluNKUD3SfXWJbCMvShQaXf1Pw3j/Ynr4roLXecG1HxTj+1DInnl1h6XSbNMsYTSbk2nAwOWC4NaBWq9Pt9hz+rHAax/MDZ34GIVJKJnHM2fPnCALXrS8ogj/CLcjFpSW2t3dYWV11C9IWfnOBoSSEm8NJnKKUR55rJpOEJMnJtWGw12Xv6h73vr+B0ZZslDE5mFT3sLy6zurjZzl++iLnnvgM0o84yFtobZnEmpujlKvXByTaMEESW0siIEdiCKhQySur1CCFj+9JBJYgdAXreZ6T5znxJMZTisAPEMqn0WhRbxV5eaUccQ+i0obzRZmlGyOrQpRfdPzLpyl/4XFUNLU2vPF2F4D1F1wHy5TivRhHSt1mfn+gMD78/NMA18yOUfwsiVeN0bTORDTXQ4abDlnhxPOrfP6vP4fBuJSEzgsfMGN7b7swB43DuLWO2lwoSbPdxvc9avWIRqtBFNVcSqLQmNs7O+RZTrvdKSKLrnHbaE2aZi7XmCZM4kmxWZW+oAEDudZMYo3ZHXD/3Q369/sM7o/Y/WAfQWGmxnmlnY+fOseTT14EBI+/+GuM5SL3uwkTa3mj6wo2snxc5BYpfhb0BypHS0EuHXKdZ0QRULNY4SBBka6hQhb5YSEk4MDLfD8Aax0lgXDtW3Ecg5JEtRpCuKi5LR3imbUgymLqahM+FPr+mOOfnVB+3M3hIy/2aIR3/t1fZCf6qAjxkRIIALZ3x9zdGNM4FhC1fUrMzyMakhl/ZGY86Jh2RlDnmoitdf5heWQ7veaZX93akoKgOQ0NyYZhY2ezqJSxLCx0MNZVyoAr46v7AZ7vU6/XiaIaaZJQW66zuLhQ1FuLuZ1fSEmns8Du/h6Ly8tkmYMyqUr0CsBmayzjSYIxhizLyLXBaMNge4jRhrs/uc/eB10XDbUWrxQA4OyFx7n0whcQJ54myyT9CWwPDEYLvn8vJ9e9GYtGOlPUgjFFTaqQWOVCZULp4j4kygqkKqPaElNoTGsNBeVksQVKrJjxGz1FWHdtW1GtgbYwjids7eyRZxlRGNJqOT4YJRxviiwpF0sBnXGJStejfMSPOj52nvLw+Pni8ZCr+TkR27m3Zs28X0ggi+9OV3t1/rI8r5zS2fHD1/awFoKWQkhRBSiO+H12BhVh5vIEVCVt7nPFHZSJ8OJ8sx32sirkpxKA6iE7ueVwZlRbQ5bnrk/T87AIPC+gc2yRWr1Gu9XG87wCG9eF8JMk5aB7QLPddlUv1pCleSF4GptrXJ3omH5/4ICkzfSa8jxlNB4wGsRcuXUNnVpufe+O432xcHCr5yjQgc7CEl//i/8O9aWTyOY622mdXCgGuebNQYq+a8jz1PmZGCfwR+bTBYIcCU9BW1dOrBAgvSrgdThgI6tnxKH0cymwAqkkXhghwxAR+BgvQApJM6pRb3XIxhOSwYCdjU0sgtD3abdbNBpN/CCoRFHY+ZVU4vx/nPEvvvn6T2eeHz3YI85Pkua8W/T0rT/fouzf1ObQBc0KJKUpQxVxLQXJbaZmzuSZQuNT9WtS+Gtlb6cTzuI7EoRQ7kGn0xxc4AesnzhOo9agFtbwfI9ut8epU6emkJbF+Yy16FwjlCTPNd1uH4vrQrXGFJT2phA8Ta5hMskxRri/85x0kpBMEm79+CZ3v7tB3HWdG+XwPJ/LT7+EUh7PfPZrmNoxbu1rBmNFMpJM0phxlpKX+LzWlc3ZgkG5rH4pzcJy05ptlFZCzv1dNjc8Un9FuQkLF2FVyicIQoIwwvcDR7w0+3GlCFoNgmadjlnDphm93S32t+6zmSQ02wu0lldptTtVeuQR+zweOD6WUB4+jZ0LM/1iQaCPo/n+abSkG6WZePi47p/hKCVJHMr1m+/sc39rgvQEftXYaudSFu7L89c0J6DFv4eJaQ5/7sj3ZxRAtTABrGDUy7jzSp/enSlSX71R59TJ0yjp6OeV5zGaTBjHMZ1Oh3qtxngSM4kT8ixHG2fa5cYSpxlCOnRvYwyZdtpS55p+t0d/d4SNd9j82RZJP0UKycabm4z3xpjcsnb8FC9/5rMEUYuV859HSI/EwNUDw0RrfrCbofOE3EAqHJ6TRpALDyMc8oAsc31CFbR/hSlfsCojSqpyyzQvWARcxKG5K+b8cEyyYlS2ZmpgCgVeiAhC8HxUGIFQmCqQUzyzMkUiIAsEnh+wWj+PMoYs1+zu7nL37l08b5PV5WU6nQ6eN0vqJHlARuyh42NX9MzfPD/XDP05B/z5HyksxblI5sPOd/iz1cti/kPWRQW1cYbFvY0h/+S7m1y9OaQ/mMdoDZse0YJfmT/uCLPa0c4fe+ZclhnT9OfcamWtWVMtAmeqFqhBFjY/GHLlmwegJQ3vLMP8FgC+57O4tIS1OFDrPCeMahx0u0il6A+GrsC8OIfD2XX1oaORC9IkSerSBIMJk27CaGfElW9cda1Ks/YzglZngZW107z4a3+Vg/oT3O5maOD1zYxcJ66qxRosU2R4BBhi9zSsKMz00sRXjnmsFKYZq8GUmkdQAHPPzNnMH6b0FewDUPCq1jFXveMirBEqqGH9AAr6C6RXAXJNhX7+wUkjMFKSSIkMPDwlWa7XWT6+xv7GPW5c+4B6s8HS8jLNZgvPC/EKU/hRx/8PzVf78QX658nwUcuSNNWMxhnXbzuMoVJIbt4e8v61AdbC7l5SwZ086KB2rkLAVv/b8iQPvAgxF5D7qNucltqVuc8pUBdY8sTw3j/e5+BmQp3TrDdfxvMCrnTvYnGd8L1e38FeFP5YpjXD0Yio0XBRWy3Q2hKPJ8TjmO0PtsiSjDCM2Plgl92rrg42GaTEfaeFF5fXuPjERRCCT37lLyD8OtpYDuQ6OzH8cH9C0ndlfFY4zaspiQkLLS/l7I0iBKiCMF7AnDZ0E3XoORRTb8ABcYsZzspiVstlNPNSNZwX4AJgUrq61SCKCIIGKogwQhWI7KICmy6/N1sCKYStNgysi4JneU5/MmY46INOyPsHYHIGgx6j8ZBaFNFotWk0mjTqDYLgo6E1y/Evvk85Ox6wsi2uFnI4Siv5+PBGj+3dhDQ1vPL6PmlqiJNH5AcU1bxPz1GE0WZ9wNlfHmSJztKrueucN1/n+z9LFe9+GuPKuoQAq+Gdb+zSvZGyFnyO9cazeJ6PUIJQLRLrXXSWM55MMHZaF5rlhkmccvudO9x97X41efd/6szQLM6rFiUhZXVpZx67zLFPnmflxOPItRe529WkQvCDfkaaZ6Q6J7ZjR75tdeEDCsepBHhlwIrSN5zxs3G/K2ZMcjE/L3PYPpUQUAn69KPzVsmMlTk3bHFOz3d5WM8PUF6A8iKE8JwynCmVxBaQMRYExjFqK4VSljSPmUzGDPoD8kyDhTh1kWdhNTZ1pD5B6JPnDuuXYY84HtLr+QTho4Fn/UJCORfhqiboUYzRRweImjtWod0sFF0CkOeand0JaW75J9/d4K33enPphl/Ez+6caPDcb11k4XiTb/6ffkwyyKpoI2Z69TPuzQPGzO79ERdRWUbiEJqBdbu6FQZjJdtXxnRvFQJZfxZHsy6qxQNw5/Vtdr7eRfqKZBLT2+zTv9Vj881ddt/rUhWMC0G93mChvcanf/PXK4yjxvmXGIkO2mh24pyb3ZhrRmK3M9ACIyATEmM9NJJcKKw0KFsEnszsvZZ8GqbA5BVz0uIEdErye2TVHJEs975hKphuu5tuau61Q+ZhKcxS4AcuzaEKUmAhfLcRCYuSjg7BnUohhY+SHnmSkGcpmZ7Qn4zIs8zh8aBJ4gSbO81pPYuQjmULEyNsimdcmaGVgNGYzJDonNR8dB1yOX7hip5y97PVDMxMxtywD/y1+nBl7ZUmYWmMOBDnvDArd/Ym7B0k/ODVXQbDnDjRbGxNDh/wkUfY8gmbPmc/c5yg5TrZFy+0CRsek3TE2vMd7nxvF7DTKh5rqwS8054/Z4uZW2DztvpUII/WhVQ9ebHh5nd7+LbDSvgEYqov5jD7Rttj/vj/+H28QKFjTW9jCNYShhFf+KWvcfGZz5JogUYS18+zOzG818/JtSY3MLxtyc0Yi6Obz1EFOLXGsWY7uEQEIAVeUWAvbHH9coqeW5rdUszsWkcEbYYO4AGBMvHgt+YVo5hfasLOCGXBuCalxPO8qmvFUQ8GgA84EDfPl1jhWNUwOfG4R55mZHGMzlO0yVw+1kqkFUgFYeCjrUaTY2WMR04e72P37pFv7SFbbWrtRUzYRhFhlUILhZEP36Rnx78Y5mvxICdxxn4v4YNrLkzfH+T86LU9BDCe6Ic22wIsn29TW4y49EtnUGWHd3Fci9M+2mh07rrPg46HiiTGuDA/VqJFiu/XkVKyfKnB3T/dI58Y0mGOrBc+0CFBfNg0V6bWA+W2TJUcDkAVwi9cf+D9N0dkI8nJ8NN40p/9+tw4fuIM9+866vJ2Z4kXXvwijz/9MvWTT3FlT/GTMQyynNjA5GBIqk1l1pXBkbKe2hRWSQmaLGaus8IpKipwSu1YQnFUn7MFfeBM1HL2kq2ZmZZDAjuHmnt4r7fTfdAxz039dzETSBFKIQv4SM/zQFG0WXl4MsCTDso0TROyrMdkMnbERjp1+dnClxTCCSECtHUepi/A2gwTJlg9Rk12saMuq3nCajMjTjM2Dz5k1FWoxim89hp+vYWpB+SPaCf+wkJ5OEH7wM+4D1L+sNZw0E0wxrK5PeHdD3uUjaFCCq7eGLKxNTmaC6Q8lcCve5z+1BrScw/h2JPLrJxZoL3SxPOcj5DnOWmaOtKZzJWcZVmGSTPywu7PRUZeWBNlUMICuc7xlGLpTIeVJzrsvNdl980Jxz/XQheQmnOG+wMdyqlHORv3mc5d6bcWhljhxFYybGG4m3HvlRFNdZHF4Awzuqg4cuGXCcGv/5v/K8aiTR5KYg3Xtsf8cJKS3YSxEeQCcgyZ1aRWVJrPE16BO1uARxUyWlIJUtC0zwrlbFSl9Opmk/a2DKzMaq5ZQWNWmB4yjgjqzHmK16SY70MVzJ9PKUUQBK5oQjm/1+Q5k/EQnSVYrdE6R+AqgaQtCxOY3mPRjC7QjsEtS5BpgojHRGaLhRCWa4LOco3Owiqel6LkaYa7KRvbXW7c32J7+22MjVCtOuYRpe2fi6Y0RV2iMYa7GwOy3PLqa7ts76Vcvz2cops9ZPg1j6Duzfzt89gXT9I53mT90iphPawWhjHOxh8MBwXydUqaZY6otYi4LS0vu4qVcQbKNaAqpfB9H4QgCkN8zyFZh0FAPIl56umnWfsfHuf3/jffYffdEZ3HagSrM17NR91CIXVzivKIk1ya6mYmxuc+pDPL1W/0ULbOifCzlRYQxUEtCmtVdchrXshPNsdkqYuyumBP0a1h02JBu5KwSAqsJwoB1G4xW1lVCZU+X7X4S+krr7yqcnD3OdegLUrITcFhS202xPVRbDcP2uJLH7LMT063pelRpXUbuxQO5yeKQqRSJOmYLE/QNkdnGTaLURikACUUwnpgXOTV9ckUjc3GIk2KnOzhjbfxs11aUcbSQpv1cx1Orp5isRmy1GnRajbACHqDmH5vwqiRcmr9GM88eZ5Bf8j2zi6bO1vcvnfvofc9O35hoZw1vSyOS/Kgm3Dj9oDhOOdPX91Ba8t+N/25QiiVZPlchye/fJbVM4uECx6tlZYL8Rcd557v2oDiOKbXnVTabzyeoAsuwtK0mVLGWRASrTXK8/DDgEa9Qa1ep9VsEkVRoQlkQUbrFsX21jZBGHHs7BpP/doFfvp33+X+93uc/62leTeYB1ioR/zIo8pSzP4x8xmB29Du/HBINvQ4Hf0KoapR8pshRNGpINFiWnUyiA3jiXa2py31inLph+I8SkmUKlHfHPCTEBL3l0VWwSA5J2iz3utcOeHcnYvpa6VWVbN+44xZKiyy4t1+NB+rvKO5yWferK5K7nBFEONJXrgmGY7dxiAtSKEQVhZuiETjEAOk1ag8R+oMMdnHxj2awZDVlmR9VbK+usbiYo1Wq87iQoNWpGjWfcBi85RA1jjVWcWc9BjGOdu7e/QHQ+LlFhdOHydOLrO7t/tI9/vxKnoKBWGMpT9IeevKPnv7zhx898MeG5sxaf5wv8+veXzu33mWzvFmscu6Z+h7HicuHCOMfISAXLtF1ut3mcRxYftnpGmC1hopHaanVKoqCbPWIpREKY8gCgmDAM/zCULX/5fEMU8+8SSe5xfRtqkPV1Kul8/V9316vR6tZotnfvlx3vnHVxltJYzup9RPPlpYe7qQDgUkqg3j0OtAHlvuvzJk9x3DqehrdPxjRZJ9WnJmAS0hsxnGZjTai4wnCt+oufjJnMkpQEhQVWd9qW0EkgL6YvZqH9TlYAHK5m4nfEe3H1HAaLqgyFQoZ34XZmouz42HuCzVT1HRIJaxApjCZRqbF2V6uoCnceeQSiBwjdouRypdKtQYTJYS5bvo0QEqOSCUGYvNgOW24vTFDsudZRZbActLLer1kCgK8QPpYCqNxtPWbXQekI9R1hB4EV5LUW8uonWHOMnY3e9xcJAS1aIH3uPh8bGE8rf/2xt0Wj5Zbnn3Sg+t5ydS+ZKgcXTRNlZqnH15nUtfOMviWgdZRjCNrjq40zxjuD+k1+szHI2ZxBlZVvBNlgsLnCknXHF4FIYEQUhYcwBGzWYLL/CpNxwXRloQhFpj2NjYJKrVCcOIyWQylz3EFkZkselI5dPtDajVmzSXOlz66nne/N0P2HxlwPk/vzTNhxdreVYTClvis9rCxBKYHNKBrkrtvJpE1Qq/00Lcz+ndSNl8Y4wZB5yOfp1OsOYEphKy2RmVxOk2mTng0hNf5W43I/BC9JxbNa0VLXOec2FNYUAYrJUYplrX2iMnq27OIrByWhlUXtu8ZS5nNLp7U85uUVUGfhY13878P7OhFN+f+pPW8WU6hilKsKoyR+oS/BKkg+korSUrLIocT2tkFpOOupjJAE/HrNUHrC2EnFhusLZUY2WlRaNeo1WvE3oeURAUaIPGcb4YixA+Vnh4SISxYDQ6zzBWI2yGNZ5rDxOGegRnTtY4dcwnydtH5/UB42MJ5bWbw7m/hXDNtedfPsnSmTb15YjVM8vTZtfy4UmBF3gYoxmOxg7/Jc8Zj8cOIkI7HNBms8nBwQF57gD6ijgIUsiC1zFwpJ+BQ0UbjUacPX++6HcTFed8lmsErjC63M89L6DbG9JsMh9IKvMbwgmvw2NRpLklzlyAIChITuODjHxkXNcIZf+greaiXEklMrzJNXd+MGJwNyPpTy0Iry6r1itrID7QWG3xRYdT0S+xEK5Ny9DKlVktXrAFvbw7r6QZKoZllGbu+ZTaEhd4qW5bgJXu1sWMwFTm56x6nMWbdfwt5XEe1v1gpwa302KVXi5vo+xlLL9Qar1CMMXsEew0VywKtHOrEUYXxEjORSlExmlOK1AWvFyTT3qYdAMZD6nbnLrMWOsEnD4RcGK5w1J7kWazTrvdpF4LqdeCYr6cXy6KCiMpi9eKeIKQgqwopNfaAC6iK4tzT012Z+V40hW8P8r4mHlK19H+zG88hvIdd9+5J0+jQh9jHT+lKRZ2rnPSNCNLUpI0JY5jsixF5444BUTRGeAWgh9G1BpNkjRjMBxSi2q02206nQ6NpgMrVtKZq6V/Zba38QPXJ6iNLchGyydfmNrW9f4p32cwGKI8vzIFKSH7bcF3UuQHs1wwSXN6gwnjgwF3XtsAwGSWvTfHnPhca25aKve1MKuEBJtabn93yP6VBF80aaqVyszOxgPG44PiSiWROE7Lu8RSeJ7AC5BCHMZwqu6rSklUAifxPYlnVfXa0WL3ohj7oUJUvPcRkfQ5D7qS2Xkfj+knyqSCe1tQCZlDinOJ+yojU22SRaOTKGPLxb3YEl6yEBDhNnpZNQhYDAabJ3h6RD6ZkI6HRNkeHTXhVK3P+qkOx1fbdBab1OoRC82QdqNO3Q8IA78gGLYYk1dr2G1IprqPkjYBnO9f3fPMxmytfSAvjJXyUArs4eNjCeVX/sNP8dinziKVS8YqpYjjmGScgxAMBgNG4xFJkXZQSha9eGZqgsy6K1LiSYWQkiiKGA6HNFstjp84SRhFLvGr1ExRs0AKRfnoa1GNwXBEVGtgTY6uwvGF71NEgAG8IGA47mPAtS5ZRVk6l+U5SZZhrSFPMrr3Drj23WtIK9h+e5d8nPNv/NX/Ee+8/VPeefcnrH6igapTuqWFjwXGFuamEdz6zoDeh4IL9X+Fhr+EEj5ZmrpueTS5dfWlAkEoXce/KnodJXaOrmDWQ5VCFn4g1UJwvqFyJtMDfDN3jeIjhFLy4LemZmZ1sumXppoPmOLUTPVrhYNafE5JiRISTzrT0y1+7UCtrHZL35bx2+nWKpzydP5iUbAvcL6ptYZk1EeO7mPHe0T0Od5scHxtkZWlDovtZY53arRaAfWmT7MeEQUKpVwlkjUGdI7RpXBTpYEccZCpbr0Uysq/nzO4bJUWeuBMlpvpI4yPJZSLJzpkOicdTzDaECcJvV6fTLtyNGNdsywIOgsdwjCiXjeMRkOnwj0HshTVIoIgJAojB0ev3CQNBwNyrVlcWiTPtfNNiqfvbnh+ErwgYO+gS6u9UAktlIUCrmjYmcGuCThOU8aTBGshy1N0ZsmSjHQUc/NPr3Nw9YBslDHYcEXWQkrOnb/EX/1r/zMuPP4ZPvXZq/wv/6d/mf23Y1Y+XSuWTLEMp8w39G7F7H8Ys+y/yHL9JOC6N8rrD2SAjzOJK+1RYIVKZ41V78E08F/qHoclWoZWDMJY14XPQ4JsRcT2AW/wIGmcX1ZFpPTQx2ZtEktpBs/gnVqHfFfyp6iqQ9+ATdE6c+Q61iKMQRmNsBaFm8pcgpEuMiwsSFN8L40RSYYdHSBGu0Rpj1N1wbFVw+rpNstLZ2g1a7QaDVrtOo1GQC1QRIGPVAaFQRgwmYO0FIZq0zcugYtAukbromF77r6FnAFOK7VmKbii+nmk4Xrm/Z83PpZQbm5t0U16pGlOnuWO1EYWCdfiEQlRdOkbx5hbq9dYWOxQq9Wp1SJHoloFbmTBu+FuoNZosLW1VZg8UxN02jZlq99zrYufbnMoi6pdiZrDiclzZ1Kn45jNdzYYdEfshPsuEqc8pPK4/+od+ne6JAOnuZZX1/nCV77EF37lLxKGNRZWzrPc7FBrRSTNy5y78Dg33vqAxRcayPDoQzPacv/VIZKIlfApEJAmKWlhupcLdVajlUFTZ7KWVTTl3ZcVNKIy9ySGUXoLgAtPfoo3sxw8CVZXG1g5pmviAeZp4VPaOf9uXtdWfl55jNnfhCn8Z0DIqkrJkxJPuTI2C2AcsU6eZRidkesUga56RazWbsNRkhxXa2uEQZBBluKNY7Jen1TvIM2Qpp+y0sw5e9bn3Moiy4067XqTehTi+Qrf96g3IsLIx5cCJQySxCEhaOOE3zrD1BSMY4ZiI9euy8Y6VOU5AZOypCWYWmDTabNHhFLOmKzz6aSPHh9LKI0xBT3Z9IKEdBTS9Uaj4IIPCmbcGsPRCClhZWUFY/ShwMP0IZcXLJVHkmZ0e32iWt2R0hYfLjWxLXoBS9vdoaUlWGMZ7A3JjERrZ0oO7vXY+tk9tl/fxKT6AZPiWnnOPvYkv/w/+R/QWTtJc2GVPOoQa8sky3jrzhbD8QbdOGVn3OXMJ7/CtSvvMbiT0nnsUCuOhcGdhMlezqJ6jlDVXZ51xuwpq5fmqlHsYXkphLGYomlAVDhBEIZx5srqms0O8iDDPGQXnte2R9Xd1AQtzUwxK8kFo/z898rrLfsig8DH9zwXgdQaJUFajU6zCrzZaI3RBicCzlSt2qRkCX+iEblG5AkiH2D699DdO9SV5Vg94MSZFqfWF1luKpqRRyP08JXCE5JGrUEYBkV7FviBwlPOqrBGkGsBRX6yrKiiOGeZ164Ersz9Weae22HN6KbrqMlarue5Z/6IWhI+bqBHSoIodMGJWo1arUatXqfRaDiENOkioBIBUqB8n729HcIoYjweF8GQwgy1UPJbWOPs+SzXKD9gNE6QXjgzUbqoTnE7WZ5rtLbs3tnm/lsbdK++TTrM6N3scXjheZ5HZ3GNl3/pL+HXGlgMUsiCJl6yfv4lUrXMDinbE83kYMTOcJvtwYjxJCbJYRgLvGabVNYJVj5Nrfm32PlJl9bZJaSqwiRYbdn88RBpAxaCJzHGkBdJeSUVVs7spjPXWAY0Zwyd6c+CuLT0x4UQaJuT2QHtdgcN5FIWTb5yztiFkh5dAGrupPM6b6pF53f8Av1Nlp+ayW9KgV8R7wA6R2qNzR14ljAGS+Yir9ZCES0t22NM8TyVyfDyBJuMMHGf5ugenk1pRILjSyGnL59kaaFGp13D9yDyFYGQBL5yjOAqQEmJr0B5haWBxSNHaAowsbJZzG0k2AIWRdiCOs/OW2SH3KSPEq55RDuOvFd6VaIITj3K+FhC6fshFy9dKjBfXEWIUjMquviccaEqRAFrv7+/h/KmaHBuiGrXctgxpoig+kySDD/JMFaQZ5ZkHLN/Z4fRjmtK3rvWpXv9gPHOBJ26XGajtcCFJ56vuuotlsee+RxrF15iL11gPxGIIMRKzwVlgEkS8+qVEUnep4slzYtCBFmEN0SERKICgc00SsDdrse5p1/m/Z/8EWk/J1osSt6tZXg3Jd7PaasX8GXN7ajF7ZZF8rNAWIceL8ZS5RYpLeOi831WYFM9Ic43ObFyiY1uTqZ8jLSo2SR9JWxlIEfOievsH7NZkHLnL1HOS6GUQqJwXqPVBqs1WRqT5ZnbbI3L4blDlvdY1JwiwXpgDdJkyGyEjvvIbAyjPfy8x0rNsNbyOX8mYGlphXarSS3yUNJFaX3Pd4EiJfF8t8CFEniexfclvpquRVPQCZSBGmv13H25oJwpTFTXGD7FVio890LYHtXkPPy5B7kQhyzeh46PJZRKKer1OtJtSdXJtTaFj1cEp0u73ILyQwajmEbdadIy4mmsdT2KRbe8taBzQ54YJuOYUTclHWfcf/0eGz++T9KLMdkUKl4IwdMvfoknX/w1gs5ZUqO4uZ+RexIZBlgLu1aylUq0NsRCM54MSYwhzTMSo8lM7qJtQrrSKyGwZWc7s21JsljfllFqWDr9NPaVbzG8nRDUQwSGwa2MrR+PETak412mXPXlzitUGaaZLlxgXlAKwSyLDqqrEG6TcbEUic4dZMnSyjqJWABZr4rIZzXgfHUoM0ecns9WF2mKRa+KLjrrGnxl8aiNQ7jLc02eZpQgV+VxhS2CVIALLCmsNngidq5GnGLGXfLhDrW8y4KYcGbB5/TFFusrp2nXfHxfEtQ9lOeIc6zJXdJeSpTnBM/zFcpzwuV7Pr4f4HkKT059PqzFFNi3eZ473ssZsh53yx8tbKVQSTkfIJuLKH/EOIwX9M/Np/T8gOFoTL3RcEXPOMHTpRC6q5mxqUFJn/EoIQhqxW6l0VqT5QadaYZ7feJRQvdWl70PD5BSMtoecXCjV503iuq89IXfYmHtFMZA6+RzxN4KW0N4J7OIA4nFI1WCsbXEI0dVboUmzV3PpdZOE+YUQigUUoRVkh6mflvRyVQtYiVN1aEuhCRqXkAIwfaPR+y8OioeAkgbcsz/NQJVQ9gSjnLaBjRnFh2a2+rvwpqYtSncgy3gEIVkb/wWQgie/OQv88akjZZ1XDlDWh1pXhgLi0RMBah8XWBRwpn5QeDjK4XO8oLMJ8MUkJMmd0IpjZ0pNjeudhQnkIqiFE7nkKbkcZd8tIFI92ipCcfrlrPnmqyvdFheOEUt8gh8QOaUml0Kg8BgdO5oBKTnzFPfx/egVgvwfFWYgwWsZLHRlD5huVmUabvZ3OFs4GVu/j8ilXH4M2Uec9Z0fZCgutfK9uwHm7gPGh9LKIMgZG/vAOW7JlFnpdoqEOOUX7FTWVOEvAVJHLsu7jRjNEjYvraLzuDOn95icKdHOpzvyG62F1g/eZ7l9bNceunXmdTPsz0y3M0MRvmkY59EF5FXmzsBL86vrcOsKY352WIDq1wdjCxygaJ06AVFHYF7vGVPhhtF70CRq5BC0Y0uIIQEY1A0EUia8jI1eYK6tzBXA2ONmdnBK930c4ZrIJ4NnBpcZDvVOb3kPZqtDruLlxiL0NG5GbfZWDufFlGiMCaLqhlPuTS+wmkWJUAIg7AGHSckWYYpNLHE0sxHuDioV6Q+TLFpSYy2yKwQoizDJCO8eA873GVVDGjUNatrHisrESfXz9Jp1vEECFOev1Cq0glOWdsqcDlNT0p8X+EHPlEY4EuB5xWF9WI6y9Zol6OmyCsWpqkQ4HkSrZ1QPswkPQxXMvckHiC8s0JpClhOay2e51UR1+n/stok1CHoyoeNj9klIplMEtK0zCGC0boCazLWpULSSUKWpeSZYeOnd0jjnHvBDt2bXXbf3SHpT3FCz136BM32Ihee/TyNtYtIKci8Re6OQlJteTfRxH1DjCWzmiyxpDYjFw4cKi0LFbyCJ9AeCmpU3RR2TtsJ5juIyhIthMBKUUUzJQYPU1DLu+KAuucWfqiOcabxdSTSRYWLIglKv3Emgnc4hH64cWY2/FM90OraJAIPhMco3SI3Y5596et0RZuw6ZHmijhLMHnpiJaLaxqWF0XTr5LSaT+dY3Jn3pk8oyy6wJpCUN3Zx17gmvIpOu+NRaIx2YRsvIcdHRCmXUIzoh0JjrV9zlxe4P9L25/HS5ac9Z3wNyLOycy739q33rvVai2tbqklBJJAQgKEBcgGY+EN8BjswcbgsTEMHmM89sA7Hhts3rEBmx1h9s0Is4hFgBaQWntLrVbvi7q6u7r2qrtk5jkRMX888cSJc+6t1i1Zivpk3Xsz82wR8Wy/Zzu4tp+VJVhedownFZWpUnpilLrKQa5nlKkTscbg9D4rJ/ZjZZLEFBcLBVikdXS1K1iWXlEItVQh8zoXmhyQGWYvgL/4Xhfd0z9ev+tSIM1uBC9rrkxdqiDsZVwVUfrgab10K9KGLU3jmQfH1oUNphtTnv7ApzjziVNspm5JoQ3Z0rWuYv3AEV75mi/BjSccvPW1nGsmXJ5FnsJhNiuaxrM5nXHOzPHR0AbPLAQaJZS020MQiF0Xs6wLutswCfSw1kqCb0IQdbl8cpDnELb0gZZ4NAhgsMCc5r7fJQTP+uKLmIwmojqlqgZ6T0ocEbGdtb2cQq071EtIemWh5hojIA0OjCPiuDh7DGPhuttfwyfDCGs9owqIFfPgiQq+WSeIuDFSWQFPO5/RhICfzzHBd4wjaC3VIu5HbbOU6EtzGTPbgI1zxOkFqvkm+6qLHFmfcNNNaxxY28/6vkUWJyMmkzGmtllSWVMRfST4lM1hJJ9RjFBtHGSoqkoAG4V7iTjrqJzrKiFk+2wotUxBLGQ0VWdYmVNJPLvZmMo8S+LdjSiHRNw7T9qLYudLVXoNkNnLuCqiPPmxp7HrNZeemmKd46n3P8nWmS0wjsufusTsknQIXlpZY3X1EOOFJV7y2rdQVWNsgKUDt3Ax7OPJaWTu4JHNSNPOmbct83ZOSA7oWdPgqTvE0Cj0kYpnRQgtxGjErrCWaBVtvIJ6qHq/MZgUzmZiZ4s4IwHRne0n0tBGkQw2zLluObL67Ad599vfykJ1PfsXbqGyHRGbEGlDzA7pDtJJizvwAerQZyyBGtG+E1EaA8ZyefokZ7f+gle+7o08ZG9gliSOA8bWYauK1iuwAU2Tmr0Gn9T6NtmUAYuniiK9gpVA8xgiNQHnW8x8G2ab0GwS5peZb59n0W5wdC1wzbE1Thw6yKGVa1ie1KklgqChprKM9G9SUHfK1LIJrLLO4WqN9gGTKqXb5OjPfNGIqioCMrn4i0aupRqpRFqirOp+K0EbBW5U5SwlYUmAQ3txN+IsibzUbkyQv6218qyJKD8nNuXHfvmTV/zs6LW3sHL9IV70mrfgl2/gTOOYB8MjU0uIEsHfXmqZNlNx0FrDtDYEawjB0SZ1BsDYKtl6iWsp/07qT0yohQIoJrUoE2743Aa7c66nKupn1ojbwlmJMIk+YI2hAlyEG1YNJ3/vP/LR++9lYXQL167/JRaswdJm4pGgY1GNUy+oDB4FSJSWLrqjuagCHWREJibpHo2hCTNObfw+h44d48Dn/03unS0S5g2j1GjHh0jTNjTBy+Z2htbPE1AT8TYSjPgKo7HEYKliEBdHjMR2Rj27DNMLtBvnGG2cZ9nO2L/UcuLoMocPr3Bw/wFWllJlOOMYuQkugS3QrR9eIpsMyWZMwJm1UjvH2ZTMlRWHkGruSK5H5ciSRYhNkX0yURrTxaIKYZRgihB7FzfdEXLTdMW2ryQ1y/3Sc6UUYzf/pTFiK5vkQlLCrGuxNYcmzJXGnony1V/6tUQQ4kl2wM13fhnUy0TnuMQ6F7Y8D7UNmxtzLrdzZh58GNGGRFAxdMZUNBBq2hTtQSgjJ9UcS5NJf9KGIUyuCJDfS29Ao/YHhURSThsNY+sYVwuMnGPsIrfsD3z4F/4lJx98gn2LX8E4XkfcnjNaGkHigMEEiJXYNyFkpTdro6ajQ1Vv9EONnzXGdEHtWhPASNmPc5vvJ7gLfP7X/hs+cXnELARC29JGn1POfBS72YeIbwOQArhJPatS1ymHw7QBM7uI37pA1WzhLz7LeH6G/YuG44dWuP62/Rw5sMzSxLC8XFGPI9gR0SyI1hIVoVZpMVifZG8pw+tgq6QOGw1FEy3AJCVHW9V1qHhnJwYisVXQpus5ItexnSSMco1OEu5ETMsxDIfTn73AgLRcpdTM/tz0nEqULley6MLthi6Z5xp7JsoLh76ObT/HLIxZnCziKsd9rWF75rnYTJmFLZq2xQdDayxzMxGfX/RZZUtaWCcs2oY2FfO11tDLmdZFMSZzne6jPtcqJzV9A90kCq723jcmZyyYdHxtwFWGurIsVRXrtmJkDdeuznj/z/9znnzgadYnb4G2IviZ9DQk5RdaQSOxJP+aRLTkZ0iXDshi+6BIrErDvh0bcGmiHODYas5wfvoXvPQLXssnmjU2Z5vgZxI+ZpO9lc4WM5EEVG+sQ2ChbTDtnNnWJrOt84TZeWp/hrV6xvOXRxx/wSpHD97C+toKK8sTxhMYj0aYOMY4Q2DKdNamELskIRJzMabvz5PPgtQ8TcQkUjNtVkrpAlpeVGvsKLENpZUOJUoBgiqck1e+hxhpG5+R0VJAlecsrzEk2PL5dGTvcX6O/j7VvWQx+V6UKHfbt1caeybKy+trxBBpQ8tFWja3N2l96smRbgrjCGVOEaTNVQAf2QhXVSRlqtvO2W1InFIloooZPeWAAMuNr1kl+mWdMCCXS1RObq1LIVpClKPa4FzAOVgfOa5bt7zrp76LR+97mMNr38j2ZoPxjYR4TUZQWawRgz6Ko44YLYY6xbsWtxlFWgQiwaT8QKwQdVrQmCRkQNTgaCyz5ixPb/4mt7/885m88Et5ZroB0QNjrHFE4wk4iS1OtmIIDTHOie0U22wQtzfh0hZ1c5H97jIHVyw33XyQoweuZ9/6KqPKMB5LzLJzjmjBVjaZESah6mMMnkib08ecSQCGdQQj4FvrfY6BLdHQygmaaqsqSUVZV6v2OH0ijUZyYTFgnE1qfcwoprXCyCU4XKpMhOR+ctb00vZ2A2VKJjKMZSVqqZpOd4u6h02qBFg5TOmWKY639APSVXWt689yhfRnLl7QvUVIaTVZIcm5Rp2EEvQJ1FbSm++eHjR73qbiufmjgZ4ujHR3LjPkPsbGXT/TDdAjSgyuqsgYpzEQWw4sWc7+0Q/w5x96N5fOn6F2a5h2xsg6ooOFUcVoVAlimKJeJEROpL63KVje90EEggYh2CQhHdFEfGiLebPEOGOjeZQmnONy8wle/LKXs/Dir+LkfAk/WmUWa0JIjv8YMe2MON3GbV2inZ/Hh7PE7fPU803WRoZ9yyOOXb/CDdce5ND6MZaqmuXREmMnGTvBSnt1V6UMeyIhNvh5k1BNCWubVDXGqtroIH3mQ4MvOnaFVioD6BooiNOpcylJuSBCk1RcRa5jIkhrJHBA3Qk9hDW3FoxZPfTe49uQpZYcZ3eor7slIpdAUAKGi7zVvqZWSlnVBmwqhVIKFP3+5wToaQo0t29B9P8oA72IicPIB7KQdNLLZt27H8pk+v+lgwefl1c05e+DFJr8UcfBlCsPS26EEHnpgU3u+dUf5MEP383i4n6uu/YVnDz5Yc5u/gEHF78cax2TcSWObGeprBHOrGqddbRGNkVb2DL5xqNcMJqKaXuRM7N3M/WfGsy2II3WWm6/6/NZvP2reKRdoB0tMWkd49DSNpsw38RsncdunSFunGNp+yzOTDl6dJmjNx3gmsPHObK2yMrShHqhxo4sjfGYYImxoiH1KzGR1oANiZgiKVBTulNV6gM2LREBjiTrI0rbPO9FA1CwLmEOw2gYlZpZiyk0H9XeLeQiysMk976zPhRAzxDUlolWIlV1eId62mPawiw1XNEmG9fkz/qEWBJc633SvOyOc+t979UdAldBlKEoaRiL/5MMKr4pk27Sbtdeg/lmi7Slsgy/fN4n9lwyspC2mcZLnbU8gWr+StS971mILvme02fGg43sW4Trmof5ne//TkJrec2X/zP2X3MdhxvH237t/+HU5Udo2tMs1UdwSUpYxOdpUuPTyoDUdEkB0T7kvH2j10w22Ky9wNPbb8OOGvatH+jZvsura7zwjlcxWtzH4xuWpzYD3tbMp1NWZ08wv3wWv3mWqr3Igtnm8FLFNTeuc93RGzl68CCLS8uYeoStLAuVZHMYLNHADE9wHgmBSkHZJgXxW92QNiHRFXWlVf5CziOUauI+/a7Fz9TXKWssaSu6clHmBM3ISPaycbjKUdcuBQg4SCl+KvmkqLbPkTqdxBssr+bmGivId1QTSUPuBkSoQqHYbyTpmNHTtCa7oay6x4wxjKpRTnzu04H81MB48Rd/+nEVRFlwPUATQMWwHUg6vfHkwyuLZQ8lafkcsXzbmE5jLW3ErFJ03Lbgf5iU4aG3G1HVQ6RDxCUT1wABaz0HVy2LH/k5/sd//xmOXPNynv/KN3PwphuobMvSU5vctvpizm2e5NL8/SzXfwnfRoILBCv2lzCKZPeoTbQjkDnZHgZm7QYnt36L6265nlu+6G/y6GYkmDGjsMnYe2wbefDcBu2phlhBcKcw24/BhfM01RkOL9Vce2iJY0cOcOToftbWVllaWmJUuwLx1Gp2Cbk0UhXChpTTaHTTFv6+kOwfpLmQj4G2bUSjSBXx1IYLIaZsjK6qnElZHM7JnuhySQNES/BQuRGuclSVZTRK8bZ1lSWfQVRLtRH1Jch4ZyOKvdchnN0OSASrJlMEYSh921Jsv5JpiJ/VWZvLgahk7xFi2oQxHRsxkvc73Nv0GYCG4e1l7Jkoh2CusV2IUXZGFQ+cvz9Uo0uxbjoUcoe2XdRh3XEjUR3qgwuYUl3uS1BpAJMKZUFSNy0Hl2uWPvyTfOB3foXrb3k9L/jir2OyvoCpvUx+bLje7Wd+6LV84PSf8ezmH3Pt0pfRuhrvTAI5SDaxMiOb67XuuHcTmYWLtHGDfdfexHsv1TAy1Dgm3uGmm4xmm8xnF9je3KCab7BaNZzYZ7jmJQc5fvg2jh1YY//KiPHCIna8ILGjIWRnvEa+pKQcqQtkOhvKZOYlIJVvxH8XihQmta8css5VJf5IJZCcgKCP1vPbCQCmLoIQWqwzLEzGLC4uMlmQ+ktKiNOpFNSOMWJC31FfuhWccR2xlNpTsafKY7r3uiidTJgkgaJt7AtgBjofqLX99MTyefOiDs2T4r6eyxd6pbFnoqzG4/y7+IS6TRdtnyuI76pr8FLmCJZqL6ZPkD1+F/uqrQ5JD7K7fJKOMyGfW95K6nMwEjKGz7Wg9i06Fj/8U3zg936FO17zTZx48UupF2spriuGFTEG1tyIWxaO446+nrtP/Qmf2no7t9ovI1YVHi8Z+A6k1KFKxU6yi0LQgRiX5g8CcPQFX8jDp8a0Gxu0m5tsbV1gtH2eOj7M8cUJ177oBOv7DnLowBpra2s4s8S49kxGlrEJKZpJ3Cctmh2R1iRE2hScbqwwD+g2x5UCtHezvaCPUGa/ZIzEokelMARBnY2zjOqaul7AWsN4XFPVXbPY+Xye7NFG4lTTvrCFWjX07/VD4HQf9qVliXh291pG/sRCi6NHjOVLpVrplxyO4XuZWaR9ntVsuvvZy9gzUdbjhSt/mO4jLzIpbCuWJKe/FmrwkPvkXzSJbyfpqT14JZ6jmR5dHatU/1srBMSIsXBwybH+sZ/gw7/3y7zkVf8rx150J/WCxaZU0RgFk/XWMlpfYmXquK0+wejI63nPM+/g4xd/gefN38jB5RPCIiIiiElE6cmgDrFboGgiTbgEwPTSOcyjj7Hun+LY6pxjRw9x4tgxDh14Hasrq1LewgXa2BCjxZmQcghrLBJ0YTSsLpVKQW0ng7Q+jkj5xRB7RFiqhVk9TGum4E1VVZCuV0rRkKKICJ09aa3kOk7GUhJmPEpqdHJdRDyz7W1hBqUPN4NtQ+k2WNcQckmZbl913wshdJqbHlOonvp379zF9hwS5TCgYBiYXp5fj8/3bpQY9QJWt8Gext7V1yv1bI8FZwjlQ6fQOCkVveuhO9S74pMdTUDTEHvxSsfJsTtAHkPyEHqMiyyPKo7c//Pc/ds/zZ2v/odcc/srqBYNdgREcXirxeGrirgywY6gaituWLweO3oj7/zU73Pv1q9yxL+UF6y/lio1mFEU0msxKJ2m9H/5zAcWLvGGO1c5ceAYB1ZHLC1MGNUT6nqMtVXSNloqk3opmjq1Jpd5t8bJnPtUwrNwOwTCjvjOIYo5LACl7yu44tuW1jZUqRmSIoia/VBZw3hS5+5Wo9EY52xCSNXNk4qrpSriuj9yBFaxciUR7SCEQlruiuoOPlPEcxh6WUrLykpjo+G8DKXuZzIyERryL3s91VXYlLucMQEcom4aeq2xUe21II7BMEPC630vDplhMeHdA+6wdfW9ZF9mJDZKwHnlLC9fepZ3/t5/49i1n8exF9zBaGIwlSNV/WRuDA4JUm/GFeN9y4SpwwTPqI3cvLbCvvWDvPfRP+PkpQ+yfe4sNy6/mgMLJwS18zE1k0lcukCsjIG10QvZnj7DWpzx4hffSF1bcZDblNTrRsQothikig2my5AYMrMsAUv1zkR89LtudEUzhyCJzrESX5aarfgf1U0xGo2oK3ENuaoLbwvB0zRziBGXlza1iy+IUf2HYlfuLoVKtbG7zyuz8RgkIMPZ1E1tgCCqau9cd7+SAOORprB9Vf5Kc7Sban+loWu/RwGZx1UQ5S5+lqTmYUyOTNlxnAlXmMq+K0UIqVBHEmIqS5GMdV2YoWpb0naBmkkWe0pRMp4qzDm+5Pj4W/81fh646RVfSbW4AE7KgGg0kEym3NV0bBkvjaQqvQ9YLz8PTSZ86cpf5pFTD/Duh36fj5z/efZt3sQ1iy9nX32MmhHROCnQBCTIAzAs2+sY23382q/9Bq/4v/81VS2NYqRMpjC4rBqZzo8rkU0aP6L5hF3zgJLjS6DUTjeA+v70b3H2txI9k9w147om1pW4dFLXM5DOXXVdSfRPXUFs8W1DO1CBhSgUlElhlKnPRxej3M+w0Psv+bjimxp8IOiwSTaxBDFIZokEgVRVnaJ8fN4nRtfTVFmtNxGppBDUJo66nRMeouQve1oSlUsbMe/Ynbt6YJPH7CLcWfXuSuMz8lP270Jtw50Yquzror6aKQ5CwrdMmviIukASx9LcQkXHchXvQvKoLWtJVfQk1Yo02XWYUYU5RE8MLSPbcv35h/jjB+/lhhd+OUtHj2NqR3QGUka9ko/aBbOFmu19C1RTh5u1EkvtI65qWaocty3dwdLSGvc88T5Onn+E8xceYmRXObHw+Vy3dDvOVCkWMp3TGCwN+0Z3cer8H/GRez7Byz/vRZmIFGrHaBmRLhJECnFJvqb67ToXAPk7eZO5/nroxlDCgE7CaPSVSkrnXFZDm6ZJBO0wJjCfT2nnEsFkbZFRHyPWOqrU/cwYg/ctzkqZD70H+epOySiI9c7KcZ1q6XNTKUVFxf2Sij0jUTW2kPQ7bL6QWFrh7xTQqNynEoIpzN2I1yeqIpiIa3cZtHNk7Tt+9v2UV7qDDAzv+nnfII+mlJmdDMz2Z7a6YyoL0Pl/DF0XKVKGfyTVi/FgYxCVMzSEdgbBMwpzaj9L5SJabj1seed//NcsrR7jps97E6NxRT0SR2Ps3VcxrGNjZSISom6hkaiXunZU84roK47d8DyOXnczp848yb0P380z5x/lkc0/5GzzENctvIqV+jBTv00TGkaVdJxebK5h5PbxC7/wS9z1ed+P9w3GKUwvVclDYStl289ICZaQCFK1/G6Z0uajU/2eC001VponxdiFsSnyKJvIYkydNnDAezBGgiJSM+2e9NMIrR0qXyG1lMjKsLbO552yZQpVvPyZVU/9fnLb5IAU04W0+SL+9kpAzZWkV4ziJirD4/L3je7cnWaE3lfbppS+2N37Zz11iytBupGUnb7bh0Z8GMWHahGZYiJzeQdS6zsrhbD0G9YiaUcGIGCcqB4mRKyP2FbyH2NsaOM2oZkRYyAwp2GOjZGlhYpw/3toZjNecNcbWVxbYTSp0Vgqwas6NQa9a2MI9YhgHE1VQdNgW0/dBKpRwIYKfKByluP7XsSh625h4+xZHnzoA9z3xHv52MWfZ7k6wVb7DIGWRXeCZXcjY3uC9dFLOX3xT/nA+z/KXXe9QCqvFZEk+WZi0tBNN3PWCrSqQGtpN8Yo9mQXT1Qs14BA67qmMhIo3SbbsbQ9Nb605wPMK9dJXX2ZpDXF6JPt6FJdoH4x7Bw8vsumL5lJ9lGmcLu2bXu2Xggh76jyGXfzK5YA19BFMXS9qKq/F5WzvJaeX/uoam/O3e7pSmPPROmfgyizD26XkaNK9AHS/91PsZuE99TZrhSoJWBsK4kmXrrsOik/TOu3pFFP02LmXU5hNAEfpS+FVAAYYbC8YPESf/bf38rRa17GsTu+gGrsUixBss/YIdd7d4yzNIC3EWqLG0eqEHAh4tIi2hCxtWHZHuLOlTdw9NCNfPzBd/PMhcdYGi8To2G7eZYtfxKDY2KPs2/hJfzkj72Vfd/1bdx04zFigv2z1MkzlaY72z+FzVTOd9pc6hO9EncuN7Vnp0QeShHdUEp8cmce6MLHyiCDfIwB7WhWuhq0fUXJTDLBF+8NRxmYnl9JKurzqBQuzxtCyJKvqqoeIq0Er+ftgKudKndHWLFH3GUBrZ5tH3nO59lt7Jkojd39qwqq7M4EOinZ/9wUrg0DsZLe8zEBAsxxTCHOIbQY7wnzGX4+FRQtBGLbpirckbYACGJqpZapK3r2L8Mjf/DTGBw33fll1GMnAQJGCySmg+kIsictMURr0z1XIr0jECMtgVa/FSKmlnQwV1mO33Arxw5ew+mnP8UiE9rpnDMbZzm19TTPbD7Ope0nCbMpIcK//3f/kR/+4R/A4cUGNUV1oGT36XyWFvxuqqsx2m6uHzgtAInvSYQQUvU/dhJizpgoHPEuuUcqazEE2na+g5CFGItEZpOqDgwc/Sq59BoinWp5vl0kSykx5/M5s9lMWiviBe1O51AmoceX7pwr2bTl3zpHu/kstYSl921mBErAuwFXurOuxrWyd6K84kl3+l9KEPi5KgGkJU+bvIHoIbTY2BLmF2jn24QwhxiwvqWKyfcXLbEfUJtBH+gCBwQQmXP9+Y/y3ns/zPPv/Kvsu+Z6RrVUKEjwEpHOth08tKCdJpGCLcGmtAkxyZWCeocAuZeJj5jJmMNHryVc3qZlyiFjWV1c49r9N3N681nuO/UXtH6KifBv/+0P8a++55/h5zNFH+RchT2lc623cSUnQRkNU6pt+pn6I2MMqdRmp4r2bLZUP2feNNIZu7AHnZFGPlllblvappECWOOqU011Tgq1tJRMJTGP625LlkzGJDzCe2EkRDGEIlECC0CqV9idGf6lHdpjHOncWdUsvltmdZQEqSlfpZ26W7TO0Kb+nKivu7pEYOc+JmTYBmvF3tQFDqRyIBEbPC7MoW0IjSeEKb6d4ptGAo+jqEYa8U9UzVYJwaVMD5NqzYKJLSZsY9sNfHOeenaB5+2vuOd3f5HJwj5OvPAVVJMKU9mil2IxeQVpZlU2E7sSgjhyYnJJQMgFik0UO9cFcqu6mOxVKosbV4xiTZwHgokcXDzEi4++mvtO/QXbzQaPPPIYv/t77+BLv/DzBBEd1z1EsDfPxiSJOoDglQh9F8UjnD1k+1A3Ypvqu7pENxp9U/rynF7bBXCO8WQi1eYSHGmIxBSQ7Yw0TKqqSgglRrAW4ww+b97YkyTibinKalitMpj8qmrThpgrt+t13Mgwm8+Y+zZVwOubSrqeTTMnAqNRnZlpBp4wWFewNiMJ2REpqaKqb6meCuGDBJikTBvhkDsBLugC1j/bRBmuRJTpQeRHVBgid2syFkxlqIyh8i2hmdHMZoRmSmw3oZkSQpNKD4KNKcrD9+Tk8wAA2jZJREFURNBCEqZKAeU+3YvYjhZkQ/gpVbtFuHyWcOlZ7Owsi5zm0JLnmoWD3Ltxidvv+hpWjqxTjaXRTkjsI0/gFWxiSMTYzXuKAkkt1ULA+Ujto5QAaQN23sCsSUHWUmE8SnEcKWHhHBWB6CIHlw9y18Lr+cRT7+Pc5il+7Td+i4Pr67zsBbcQaynx2HF6uRtFMdUGg77E8d7ThjYDPaqmwjD6Jd1PoaKZ9LBG1zNJqLqqxJdqIjG2woSSPa5pUVkaIa3vZvN5rryuLQ/LewDSOa2E5o1HKYhe5jcUIJON5I7PMdlp1kLlLK1JBEcH0gBSlsWYVGaky+ZIC45JtWlykEeaRx9Sjmj6ukrYMgpKTS9DVze2BMCyVhDUp2p60ve5xlXYlM8VUNv1lHDRSL0bDNE3mHYGsxbfzJjNtgnTLWKbAkNTZW6Mkoc8pCkWzqidCBg8LjQwnxJmG1TNJmHrAnZ6ngV/kVXrObIy4drr17n+4EvYd+Mx/t33/zuWlg5w851fgB3XUjWhUzjLJ8y/9cDuWHyq7ocYqJtI7T2VD7jG45oWHyNNaPGzBuYtwYtj3qR0qTzplWNkIVopqbE4WuR1h97MqfNPcfeDf8Qv/OpvcNf/9b15Xq3p1OZcH2cXoiw5eoghNfNVu74f2aNRNc453IBQVEKZVKqlc1dolJFUMLeFadIDM9LbCubIJu4Hiss8VD1XCgjh7Chyld0KwvRL21KfQ7Nc9P5LqVSq8SX4U9qAeqxG8sQgfU5L00HP3ds1OjdWe1cm0DHNtzVdvdfPft1X5SY9Y1YXINle0UM7xcQZ82aGn81gvk0MrfgWTcRkmWsI0QI1NgTJao+Sn5eLNPoW6UHfEMMM327iL51j6fwzrMQt9ldzjq4tcOyGda49cQMLS2NW1paoRo4Faj764ANcunCRu77gr1GtrdIYUuSOTm6hTvR+NfqYqbV36UUNmOCpmkDVeMZzj5m32HlL62e0oeXsU08ym25IdbngObx2nBGWipTqayw2NazxNuRq4NceuYFT55/PQ8/cw4+/9Rf43/7RNzEN87zJyzsWjh5Sx+ou+TjHu0p5wIII+n6/7MKAno7Qc0+kT6xLwQ9IHmSMkdj6zlfas2EE9CuzUjQgoKuv06+PU4JQZsAuYwbxum7QQxeKSqGS+EqgplM5uydVMGgYSleCPETbFdEezE++t/LejeybEAsNhZgl+17HVSU5OyttZIhB1LY4hdkc2zSEeZPScLaZsp3LxseUy6RoItFkJVQWcE6kJpoKH4DQEMOUxc2L2O2LcPE8XD7NKG6xujriwPoCx19kuO7EzexfX2dhMmFUS0C0CYbaOkaupl5e5je+7/tZWTnEdS96JcFZfBJ3eW0UNCknupAaqjLZCFWEsYe6FWK085bYtmxtXOLpTz3ExQvP8sjJjzBvZmzNLqW6OzIWx6uMqwU+78YvYX28nu0Z5yopSjxKIXghcGTtBA89cw8f+PBHqEZjXOpGHUIArQivXLkVrpy5eyFdjDWpa7QmJ/ve51lKAWYXX6S1lrqSygOd6hwlDhfpbaJd0KwtEUoliM5lIOAcKdZUkqTlOHUnSAkSbW9XjgzIRLKbZ4gS67nK94f+yPL93eZrN+lZBiQMXTc9t0dxD8MhrQI799Nexp6JcjFeSkV2PbGZ025vEpttTAw0OX5QAo9tQvMiKhkkl1HcvA4XRc0lbFPFwCg0NLMNms0zVNNzsHWG8ewS+xctJ/atcuSmgxzcv8r+A8uMx47FxYrxWCqjV1WNtnQ3xok8qipOnzvHmWef5ebnfQHV2gozqwqkcHbBjGJGdWKhiuUSHhFclOJUkzayNA3YpqWZbnHh9ClOP/sp/uKetzFrt5P9Iud48cEFVupRBpI+fmaTC1uXeNcDb+PVt3wl64v7xTZ1DjMZ4UYOosfP56yvHGRcTWj8jKdPnWH1wBKBSJNKcJjguxDhGHMN2wyUqBQxsbfBnaMnEaBzMdiEYKqUULdH7Soq1yHoWmAaDJVzhFgV5yqCxo004snzmXyE8/kc5p3vdDKZiHsllYcUAKasLlBA2UFq/6gU0tHziRbvqaqowRBDxFWmbydApp8nLIjRaNSLPCrPNzzHsB6TzEMlhakHqvtzjT0Tpb14VlJ62hYImDinCi2YQHQS1SNL4shRDPKESTJFjPHY6HHzFjeb4+ZPMLtwGjvbYhI2OLLgOb4+4Zob1zi0doKDB5dZWhpT2yqVKEwS102wru7KVKRSjcEYvDWYyYi3/tBPMRotcOudr6e1Bm8GtiId5y0XJn2ADVD7VDN17hnPW6rthjOnTvKuD/wmT599BIBJZfjia5c5sVjxhuNrWAKLY6nFar2ASWfaOZeD5yfuOc27HvxtDiwd5/YTr2R1fb+ohZUjJLtxtLyMM45ZjDzxqZPctnojjW9lQ4fUIVkjTmxZhLpPcLGMpDICpqg0K9vCGZDiwbWDegQm2YspprR2aaaiaBg+AUbGSBC4ZqaUtpWCMEP/XakKGmNyyY+FhYVOotHZeD1pqIy+eK+UXPq3rqMST/m90j7cUVaSjhF0r84/qdJVX2VQfelqArI2oe+p+j6U7lcaeybK6cblvJjWmdTVN4pojpY6RlwM+GhpY000norAqG0xzZxqPiVOTzPffAazNaMOnsOT0xxZXeC6mw9w+NBx1vctsbAwxhlDXU2oRhZXG+HY2BzUHFMbhKT8iKqEwaU6PGfOnOOeD32YG29+JZNrrsEbwUyHWn1GVdWlkjZx1YpkHLWeumlZ3GppNjf44L3v4aMPvRPvtzi+UvHSw4t84/OOMjFiR8wINAY2rNSEcVi8Nxhbse5qvvUlR/nhjz7NJ84+wMbsHLdf92quWXyeEI1LKuK8ypzDB0+YJd9gI82DaiuInsbn55hgYzIYpOipaisChMdem7ns+kACNpzpfJTWJYQ3ShVaPQ/pMipFpDbtbhu6A56GQEn5PWUoKqHrWnqQlKpmXiu1LZ9jlG6LIaGUY6im6/d6YBVANDkYX5mZHrObn7V8xnzveyTEcuzdTxnmKf4SbJQQK0NLxBKiw0WDDQ2BgA1z7PZFxrPLVJfPYDfOsdRss2A3OHp4gcPXHeTokePsX7uWpYVxbtEm5SNqmSBbYWz30D56SYEyYLSYsencA4C0HKhH/MJP/hTOjbj+Za9jOnY4Uu5cxqn6agsxxZCmhV9oIyvTQNXMMdMZD3/yo3z4/j/l9OWnuHXfiH/4shu5cWlCnEuN0UsmsmUNjbV4kxzaxoCxtFE4bOWhioa/96LDvO/ZS/zaA2f4iwd/h5fGN/C82+4C61KjIi3nJIQemzkG6RIWTCqIpZIxWT0xdLaeSkiTQBilV7HZ5HfdgNrTw5KI1kidH5d8hRZy7Vqjcz+w0Uoi0/fFZuyHqJW9G6Hr8wFdoaz53DKe1LtG/mT7n51EW7qCVP2uqmpH9FJJoKW0LNFcRXHVFi4JMVfVgx6w1J+DLm7YWps8B3tvWQBX4xKB5LY3kNwY4qubM243MH4GW+cx2+cZTy+yOttk1TYc3z/m2LUTjh48xPLy9UwWJozHE8bjMfVoDMRUZdvm2pnGmFzivyxb0dlOpapWwqaGU+fP8rGPfITrrn85y8evoTUmtSxXAuwO6whU/GLjNjJpDSszWJh62J5y7yfex599/LcwtHzz7Yd40/F9LITA5uYWU2CjsswRtRmjRbl0MxmaKObQPEZsCIxD5FWHV1gYWd768fPc8+i7OHbjCxkvrGGIzJ3Nj2SNIaRqeZWriFYAlMyRVUrq+nTGphCXsVLJsSdiEsEYS4hewuU0gRqt3B7VFyXEaHe324ZAR0moalsOs0BKNLRUo+Xvlum2xzoNuau6CKNIBrqAjDYPY11VSvVQ1HIfp/PqNbUF+3w+z/fUPVvnk9Tz6jWz8DCmx2xiAqSyao1Je+1zENGTXQIxSOQMDe10g/n5Z9l34SHGcc6BMRxYGXHihhWOHz7A+voKztYsLIyoR5HxaJQy6yvxYbm642YD9aQkwiGcXT5bd1/gasdbf/pniCHyvJd+MaGuhE8ZtR9LG8Wo1oqJkZGPLM48q9PAZBbwG5t84v73865P/javv26Bv3bzAU7UI3zTcjF4LlWBLZeiiZJOl2RLuk6yi1JImORSBuZG2gvcfmjC625Y5h2PbnLyqYe4bp9Iy5kr+IYRBDU5V7OUSy69Xq8L/a5GzVhDbu8XCwIKMaBdnV1Vp3A5nWd9petEUVHROqp5XXauU1RtI5X0d64f2lb6UHWUgd9Oo2h8w2w+o21bxuMxCwsLsldi31YcEqVKx/KeSoIqr6XHlh24enZ2oa6WaGtpR5YqcpaKypRsiYLvibx6Y89EucaMZuMCZvs8ZvMxFubPcLB2HD2wyv5rFzh8+DhrK0uMxxXjcc1kLClBNSPqepQqqpEy0MFg8W1IDtp0EdMFWw/Vo250AIYCFbUP+FRT5+GHHmJ1/TjmyGFaAxrK3bMf1eEu4pMqRJannpWNOaPLmzz25MN86MF38fSFx/jqW5b5xpv3gw9sNHMu2cBWnTpAkQIKY3KsR6SWkTwAMSbObkSdjCbiraibfj7nNdcu8cePbPDIo+/nuue9BL8wYWp3cnbRHNJzZ8BKIlVIRGIHzXGkc1UGl8FIxXbJwhBwp9aMjxw1RCodmlTbGFPgQ1KnSZ29org1droEXE48LkuK6M/SFaF+0jK7wxoLKbla+25oXqKN4JuOCMtKB9C5QEomoPdXqqZKfCXoVKrSqrqqGl4S9fBZ9Pp63RzpE2J2XVljswtor2PPRLn84DuY2MA16xMOX7fGwUPXsLw+YW19EWdaRrXN1a7rWrrxOmpqJhBMKsrriWjjm5gAtU7l6v6/cgSFbLMugsggXZiDNfzRH7yDSxcvctfr/gpmcREfTco0lzIcMRO0EJQ3hjpGJnPP4mYDZy/yh+//Te5/9mMQPX/1phW+/vo1NpoZWzGyaSxNNASfbCvTuc6j/stVjskEKQ8sgRP6OCFEFl3gxvURn7p8nounTzE+doKyw4WaCxLFkphTyvbPRKizkgjRGCFWaSkXIWrpSQmpE2RVCKLKdXu7zmfGyPcUcdXyjHrPGQPpmRNlVM7u6WLZPZDcI/qdIZFibLYHNb/Tey8NeedNlnhDyafnGqrL+vvQHzl8vyRQfV8Zw9CFMgSShnZlpGMYxppew5+9jD0T5ZtefYLDa0usjWFSLzCaLFHXBmwkjitM1rGTzRIDvol4HzEhoZ+aUpXIQ7tgRYXz6BPgEP5O79KzI2MkWoMZj/mt3/hN1laPcuC22+UYQNMHNB+kOzRS+cjKHFYvN7hT5/nTD/wmD5+5h1cenvDXrl/h+FLFGT9lFmFqHHNrU6HlmKW6XKeskyM2twZNGLTdekDrShgl2tazUkPrZ0w3LjHxJ3KQvTFG/HdpYcFKOX0bO/XS9Ou5SvnMhL6mjsiEPBNZxVPQxdqu1L/J898FsRMCMQWMS/qYySpvSZTlph2CMEN3Q5mRsXMzCwMbZrOEEIitz1JuKBG999S1VEfQZyuLcg3HkNGXCdfW2i4/1FY7mEf53PpcpW0pFzB5n6nE3S175Upjz0R5y/OvY3VxTEVLVdVU0bKQ2pQ3VmoGxBi7zATAhAgpdEpU1k5SyROJ/NjN/hUjOQ5JkD7hCmEEa3niyae5fOkSN7/oLsx4Ivs/q3tJlhmwIRJNpAqw1ATWtwLnHn6AP/vAr7I9P82/uusQty+NmAXP2ejZNmIret18hlzLJxVMUG2VSEIec1HkAgTJclqfXTbVpErqV/JD6hHOOV582/MIYRuDtF0zqRWUqqg5o0Jt2izZ1CaQ71srBF5WB7C2k4xZnU+8MQewJ6ZJBFdVWFtl5Bf6zvLhhisJtCTcHW4HOtBGABuTy6CU31Xb3Wvt1yS1nXOMKpdR2RJxNXaXIMDBdfUapU2agSprEkSws0ynPo8SW49RWVH4g0YvFZ2k9zL2TJQn1pexzuLcAsRAaD2tReymCMG3OT1IdHGwKh2LLWl0s6RhdyFI9IhYgD+x3OBJXqZ978YTfvbHf5rReJHjd36hSEUfCqIX6eOJuCDEPmkjK9seTl/gnR/8NbZmp/mXd+znBYsV59sZl0xg21ZE49JzpA2s5UNQKd/drwYyxxhz2wLJquiO6VLGxL575fEJdz894/GTH2P/LS9KZTHl3HVlaUOCT01HIFrfVVvJGZMyHTKBkGwaqKqa8Xg8IAYl2MLijl09V+2SrCqublbvfVYrS7V1N4K8UtZ+6ZcsCbrb+P2AgEwMAM7gfWqxmCrMmSr1uaRQSYnM2yZrExi341p6PX22Unpn0IqdDGQ3BFW1DrVZXWUKIiW7RD7r6mtEG7t44egxENuyfXVx44ir3lgj1czzAmiYVscJd2MePQ65m/qhnDcaorE89tjTPPLgQ9x822uZ7D+YOW1MTMokEWCNRP6PfWR1Fli+POf+Bz7C2Y1neNO1S9y2VHMmNFwynlkl16hxxKS2GpOkozj2MDEm3+cuBY8z4JK6QKV+kuRFFjFr8+ZrsW1g+9wzzJttcWlUFaG1RdlY9SFqw1UycWpBlS6zw2GtZt13m0GlQOlqMsahGfXGQF1LulVVSSU+7z1NIxknilruBpKUo+8m6MeLDntDlvMHXVC4VFbvgr3Vji9VYYwh+JCr5+VnTNeTqgqmXxM3dqBTCCGH0pXM4Ep7Ukf5DPpsSpQhFgwrSGzv58SmbOcdfByDJCFnDUkBB2M6pS3GVOg2EaxRrDJJzPyAQ7RRCTz2IO/h5EiAgcONxrz1J34KaxzX3P4qgjEosBGTOO2q6Ml5R61nst3yxAMf5U8f+B32jx1fenyRk6Zlw0bpMmykoUzeBMXddqlUnUTPL30IOnXFyEEY31VFIH9XJzVCCPjpFt63WFtnyezoJGOncsYcZiduDYMzFTnQ34L6NDspke44xoKJiv0oNlWV3RkQaZsm5QN2SGPp5pjNZoxGox3qaXnN0uFeMoJyLUuGpqqs3JnJEquLvHFCrFHsa1HJK6nXpM+ZVHK1SbNKa6D1PmtdzrkMJqldWV5nyGzKZysrEAwJdGtrO5sYVe738jlI3YrFxBGVuGA30jJpw2XwQWa4+JIhBN27HQGpfaMSVLsIx27/pMMVxXRs+JYnP/Uk+w5ch1lfK6Sk2qMa9yKHj5vAgY0Zz9z3UX7/nl9nyTV814vW8JPAVkTUVa36bSxpd+dwsk5ZMimJOKliilYWzxHpUr5UyqLfDZHg4OFLsgEPL53oaQ2ra6tE6zEmJECnkhhVa9ItmRQup0i35MEXcGxWeTtNpSNO3WAlSGETSCSE1PmP1QAxsQNwdDO2bdtz3O9GZKWkHIbe7QYSZcJIzyvdwYTAZD6T68daDC6nsNnkFPQ+SDSYsXgvc02y9XRPyTM7qtQ+sGka8G2WuI6IoV+DZ2gP67OWKn2MgapyWaNoraeyYs/X7rPcCk9MKZNtuR1Cfij2Y+dzNEnFI9InmmIhutP00ayMBHYnlppMyWb6nd94G9PplNtf/cXE0Vg2USxs0iRhsAYXIgtTjz99jj+5538wsXP+2R0rLE0Ml2ME47CuwtYOZ0yyBXY+rD6/OrTVduhs4J0qUN60+mkImMry6AXRQFbH+4kE5tMNAF7/+tdKS3cnLMBZydLPyKuVNgc5eTiSEsYT83A2270lYRhjc0RUqVKpaqoVCkptpiTq0jbbDfApN+3wvdIUKYlWv6M/Vfp2amxnj6m0Le1c3VvZ7ibtsyAlSZRpWvlCZpKKtMYoqK1KzJze5SrqoqO0Xr/MxSwZkM6f1TaRzkmfl8ZjtpuuD8ynGXtPck6jt7GuMIYWhi7OUBV9LoIc6vCZQ+srQlWN+ODdH2Bhssrk6LX4mKR07G8erPT3qGNkeavl2ccf5vL8Ip9/uGZ5sULIQGwWm313GWbt7i8tau/ZQsGJn2tOYswcFyMIo3D6fHJCjJw6eS8AtXMs1SPpnGXERACNX+2IKVdpizEjhboJKeaz7Eg1RBCVODQgoEyILtcoFG3ThzVRe2pisZ5DlU0JdChxdCixlcS62wvYcb1ss5nueGutlBwtgKChVFcpqO4aPbbxc0LhLy1t2SGjUVVYSozEHMpXAZuPPEn77EU2awvfcOU9kufg038lPXBZla5QX6FE9NKM5K+lqJYrSsX+7ybbTDqBCcW1WkRJkJuIwXjL5e2Gp06e5NDRWxmtrDIvbbsg37fWEryogKPpFPPMOd776J+xNrJ8xY2LTKMnGgdKkKkVuUkGX1nGIyOeFBIkM5pdEKvnGMFKsyGdhGBTCcv0+f59a1S1TVWtTL6XDq1Oqh5k6N4Tu3+RXFRLVdOhChlCzE8YEypdgiCdNC38iLDrptb5KKVhL4RuQDy7SVzoAJSSOHOkTHG8HqtT4eoKNRkwQwLujCwF5kRbiRKFFbVAV8hB+DYiNn4ImOQj7WkOofO36rxWlWS5GCtgWQgRtzUjPHWO6sI23nyWk5w7PCIRZE9FKQhRXz2VZ2fJeH2Y/t96Br0WxCIihbQtQpR40Hs++QkADl73Ivkk94kA7TOfVWhgZXObi089wdnps9xxoIaJoQnSIcq4lENoEpCi9mw6VtDOTgVVggw9o3dvI5pIdGBrx8yLk9qOxr2K5m/6sldj3VziViGBZORXBlLaedcCzwLRZmnW1zb6wA76DKRnDZ0jXmuaarKz2mqCJO8McdsN5FG1cMgIykTs3UptDM87lOjlz2wvp31hrCCx0C+xqaCN2nw+CMrcxjbFVuj9RNrUUdpBSiqPOCe2eowp3rb1hLbpBWHUtbieqrrCVsJIm7bB2VZKx4TOdPt0Y+9ATxwQS88+KInSZKIsnveKo3S6DtNrdpewkRBbzGjMu979Lup6wuqxG2lDoDWkMoSdlE5rhMOyvNnyrmfuAeCuI47oPWAxCcGzKQOeqBjmQLKr34u4q7q2pwfuTsafPHyJh882vPiGL2Hf6mG2eqpfkY6V3x+eWzi8TV2vy3jTcgOXAMrwfmOMRD/MximqEhRoK/SzM4aqYLmWqt7qug4TnHf7Wa530zQ9x3wJtgyfrUQ/O9u5Y0hdz8xdKpjTSX5VOTX5OsRIDC0hFm0TvCe0LTFpE0qQk8kk+3WDSS4xa3OSgHUWu8cY2Ku2KfXBywVUFSHKH0RV8FS3V26ntk6H/hAUWk7nDsH3lMZuApO0jQYXI60xfOwjH2F9/RrqA0ekHVuM2IzYxmx8+hjwwbNx4TyPX36MpdpwdK2SAlaukopjtup8kUlCdyP5XI3eY6fi9aSkfuE5CFM3yoVZ4E8f2WRt+TqOHr4JTIUPgRg1lCxm+1Pnp8u01EJWuwM2OvdRjW8jjLPMhMhzG3QNQYtjKQrrXJXnvQxxU9XX2o5hlEgqdP7L0n7VfaP3Wwadl6N0oZR7QEf5925I7/BeSgS1fP48XwURZzXUmF4hstKmFCbRtV0omaE0X/LEIt1NtCyLtZ9DSakX64AbXWQSwQnnFm00WUop8idbJomgiysAIuJjPll37XJCo3G8/8MfAuDYTXcRnZPaQZqVr8fEiIsGHyJuHvBnLzGPcw7VJLXQYYwD61JokSCWgZ2EZlKb9hIUCcnuJP9QEGyoMu6cy5MbLT7A+sphvDPE2nH50mk2Ns9wyy03Maot3qdY12RWWhLKqihjYmwk4jIkO9IAypUNfSKlkwwhhJxpovcln7mUeNxkpFO1Ie+19GJ/T5R2nxJFP3zO9oiyVGGvNEe7EVOZJaJ/l8fsHDtdMeX31ebV80MXlK7B8xqFpJrDaGFEZbt760lfNXj0/pNPW57nsxw8oIZ3ekxi6ER6p/ooAcYUl9mpPmXNlN0msTzPcOj3sj1SOZ586imssYxX9qdS9olbxs7miklKAOAjD599GB89Lz00wmGllruxyblbhIyVaiT0JjYGLe043Ewd1F4e2/tG2ow+BC7NZPEm41WihdbaVOktcOzoYYjKmckuDPHK7Yws0XuOxTVUMynncBi1kjdrL7qnIxb1v3nvs/1UbvBhy7vd1rVUO4f3XKqmQyRU1d/djislos5red2+RNxpj5bMo1SBhxJWe5Do86tkr6yVuG5i79lilMr0pgKfTbHSJNkxVbuOPRPlwsKk+yNGfNt0kR50TlTt+mtNyqjQzrrp4dLhSXUNuYNwIqUcwzjwRnSTZQx2POFP//APqcdLLBy/Hh+k43CMWrcnqcoGJAMiYHxINmSSOukeJErG5To3GfxIX9SNp88Y8rXobXq9bL7XXTSLToXzfOjpGcYa9u87TkzlL2eb59Npkn0GONtVWkjx6L1NMLTHdpszfaLShsphZqlbs35eRuCUduL29rZUnivqtpZ9YobXH9p1Q3uwtDHL612pfuvQTi7t0fL30nbsCop1knCobpfMoTy3HlvmfGbJ2EpwRR9IK9K4kNjr1g+7mO2NKvdMlBo+GUHKSFZywyEETLBgraiRynWhi+tMG94Yk4kwpugTk9RMVcn0GaOxUsm84ET68+lPPcN0OuO6m++C0VgScaOgoRiXI2lcVqEjJsSslkZIsamg7ctLKSnsQSWfHJHt2qQRdA4CHZ0av5vaqlIshDaHg8nkJHZkI+fOSIU8iYkFML2A/cy6SnVph+okxxlDVqXKzVdKGgEzQgHMdS4V7fEBRopFI6FiJvX5MMb0orxKdba8nm7m3YhQfy+/p6VAYkj4RBQVOyQma42GE8rQ+emiefqFs0B8u+X+GTKM8p6HRK6AlzIyWRbdPB1x9yW+z31PxCkgkW3ztgtVfa6xdz9lqQ4rVhNi9iF2enPHsYy2RjcRZxOkHzTuMqaSEabHKY3J0bGoPdDjjMCzp54lRhgv75PyFiG9iJgUyVLaW0KUhaVoQMVOGQrRgUPpITH5907V62In+4RZEmRnyBnonscIgHSpCWzMYW3pKNVoQiAym25x6fKp7mxGba+OCG3sTMV8v/n73UbR29b10HtTlVRHtoeybzNmtcvSqbx1XWPH4x2Is0vYQffc7Ep45VDpM7QFFVixpNbu6b5CjLmhkO4N64oGr55EwDttTL1fjQgaqrvl7yUyXWo1mqvZxc+q9tD5YMtnUubm9Hw2EAxAYH4F+3k4rsKmLCIzoiH4KM5q359cVc+Ue5YP36GEIdFKZ1gPuVSk08d7ROkq3vZbv401sH7trUTvk49Nek0GE6QqnHJLKxzOh0BQRCx2/sbhvfckToSASOGey0AOuAKMc4VhyBrBtjfMfWB/tURwjmigbedMZxcBOHPmHOcvt+xbHUPUFvN52++Y02JZdpeGCawZOvlLlbJkfv2uzP1onT5Y06nCEsTeBSsM1dVy/fsgIf17avv3r/tDz6FuCEVsNTNDg/NVbVU1XNIJW0KwPQLSsRuh6lCbeggu2Sh2ZXl8+RyucsW9x5zXWdWf5djXsiiRaJ4d5B3andxpiLLt4OoDtaocWk+0wqRmrREXDNGCqcdcvnyZpeVDMBoLEhiEwCNipzo9b9L/Y+ulVKJyRcixvAZSFy0GKiDZfVNukuG9frqRvx3FfpWN0dkvwYCtKkhtDmo34ZOffJi/+te/lTtufyHf9i1fz803HpFiTL4VyZfC89IsZjINMaayKx14ofddNlLtbNuQCVA3tMaAls85lHq6F9qmSQEFO7+jzX3KvVDmX2pBrtJF0rZtr7OWtPDzO/yvin6LtpWYR6T33Dndy0DbepwjP1/JIJRZDQMZ9LljjLniXVazI9iFsSDX6ks2CQcx8p5RF6GTsqHQ9Vf5dGPvNmUPaWXH5hxy2h2hUMXvnVq2k5NmNcwYbJB2Bw5DZZBq45ubXDx/gaMnXgTjhUSQyd+GqAsxdAawRF94mthKUSuS20BuCM0hjMWi6sgTG3cnyCy9BlJ3OPQwkSKOadq/db0gtriBU09+nBjh5n1vZHmywuPn7+bejz/E3/9H/wcHD+7nBbc9j69605fwsjtvwRlJnTMKaKXr+OB7Pj+VKqXdpsSjmfa6UUvXQ3lMt7kLiZzmoqpruUayL5XlKX1WlUvB2XLd0WiU8jI7H3dXjhOsraQ4l9f7TlE2bd9vGULp19T2ezHZnXrvav50qXzlcwxjrEubsiyupc+r187EO51iTVEGU21ha/CIhibJ/pFQJQ1ijwx9z0SpUQ5CANIdS5znfQMa+sWHymTSnWNnWkyWnnmbi9/NRQEZ3vuu9wKwsHJAPo468YoQUVIBIcUttsFTL6xiMFycSzmQYCBmrmpTvKxUbytVWGI/nC4b+1c1xH41zvLnn5oCcPDgLVA5mtmMZ099AmdGHBzfyMp4wvHrrme73eTBs3dz8vSHeOezd/Nn73ovVeV4wxe/hhuvv5av+LLXsDipscxFKzD0nNy9qxcmgK6V1rUxpqsErhtQN22XktRXXfUcGcgJypQ7NbNUl0H20FAK6+9t26INh1QAqPqo31MpN3yeUh3X+1IbuQRhhh2/9J6yfaro+sAHunPuYNY0aL/LHGJXVVIVPwaktnykcoZqYcw8Bj7r6GvbtMLhktpA5j47w7eGkzVEtNK3EE4WcmZ8KTUra3FRknWjTW0SqorHH3scgPVrb0uQil63JCJK00vug8jCoeNUT9Z88NmGL7t2AZzEN7ZNg6tqQSJTDZ+eVCwIsvfengkz6sTQApfngbpawC0s4p3l4rNP0voZ6+PboYXZbIYPhlE94Y5jr+eFR76IuZ/y9KUHePz8B/iDP3w3PjT8yI+9ldXVFV76khfxypffwcvuuI1D+5bwfioItIJvCUEtfX8lMDEklDKsTTex5k3uBojIMYIzlPapHqN25rA5zpAZhyARTJFI07Q0TVvy1x3EMdReus/7e60snKzXLZOVh5pEOUdD8EhHCPP8vjKb0Wgkvs2RExUXqRSxMFlgtsedAlcTkK6oY1QssSMC1aU7Md8hpbmBbw+iL1XY0iclpxQY2lJbCNZgnJT8j1WdCaFrMxsxBLQVVSSBM4rcItlPAWBhgePrt/HEuXt46ELL8/bVRALBt2IbJfdAT9pCT0XsAJf+KPlA+Xk3E6Jeu7piYeRoN2c0wVMZy8LCGtY6Zu1Zpu2UgKOmIhqR4CNXszCecODoF/D8Iy/n7MZppu0lHj37Aabzi7zzPe/lz94tGsSJ40f5v/7Ft3P9iVUI4vc1zlKN6mz/BB+Yt03WdELsNqkQs0llNDrCUylVEqT+Lj8lFLFpUp1WLTqb1ssHn1LVYgJf0p6BpOYpOAezqUovl9a3wvs50CGpeg9amzXtNiE+pF9KqZLq9/V+h5JWJXU5roTWqhkyjNCZzxtihIlLSfzWEIPUSQLDXuu/7t0lkkolCvhRLAyiN4NUGtMyIXLzQjTWBKT2qhBsFwfYuQ7yxo1JfXFOOj45QzSyuUK9wEMPPMTSyiGqfYfkHtL1Y4y5V0hM6kNUBhLk6t4aDh97AU9duJ/ff2KbW9bE9xZ8g7e2cFtcefJ2Elz3R6R4pB3fS2ysMilmNEgFQCxhvi0L7SC4QDBOfFrG4IyhSqBIBCpjObJ4GOuOcsvB22hD4NzGac5vP8vTl+7n3Okn+Lbv+j5++Af/FTcdWxPGZxVwSc+gTDDfnFZ6FwKxplPfVcKUgMhuqKliASYl+MakSahf0/tOqllXJULogtVBKgYEr3tL3CA+IagGm4lQtCtJNNW9JpJN7pMY077oh9j1mUgnWYcqcWlbD0dnolU7zqH2ZttIRQprLZW3iXhNfrZPN/ZcVL0QeMU75U/VG8k3S1KhBFTQmqMu1YGRWjBVJWXu67pKunlNVafvOdelUllD23rOnTmLqyaY1LZNOXEni1TiZhaSpdvUgVlZYXXhME9veU7PxLcZNPIixpypvssj7ZyQPY5oxH716ZXV3vRzNr1ECJ7N5iT3nf81zs4fxVRWWqS3bZpHAZNckAa2zkdsGxlHy/Hlo7zo8Et4wy1v4ctv/QccGt3Jt/7Tf83JM9upP6LPiOTQ9tK1Kl0+qt6JM79DZ8vMkXLDDt0XpdpXuhVKNVALMut31LZTLSpPs+mCxEsAUW1FvZ7Ws9VmUVdci+Kaw14mwxFClxGz2zXLwAG9tjGWEPpz7dUjEXfDVXaOq+h0kDihkdAzUT06pBTTBxeslYrpVS1ENh6P82s0GuVXXdfUdUVV2VTuIqm3SQLq6S3wxONPFbMbc8iZNTarZkMW0WmikdZA4yzXXfMKajfhdx6bEqI4ypUgr+T6KFzsO967mlHa+hYgtDzzjOSFrq6usn6g5sFzv8t9Z3+P7XAZa42Ea8WYqxzEIIzEN5523jKfzZlN50y3tqGJ3Lzv5bRzy/f/wH9hNFrsmA47tYChz7BOnc8y8e2i8pXIZc65LN5TIiqrE8TY+Q9nsxnT6TSDhxqgMBrVjMeTYl/UjEajfFyull4ATHagppr0TNo5Wl+6GfLcaYhosv0q6wr7VUGtvs+0fH6NhS1DD1XQ9OxXIi0SOeWfQwMrx57V1+zCNn2TSyYihWQ5Lb5EXjAdanekD9NW7nOOGFWmpUgbo5eUaJb33v0BAA4cf76oRcXh8tXu+ADShcpEIkEWJ0g7uWp1Hwf3PY8Hz3yMBy+1vHD/JEXKpA1k0gMaOiS2NDHL+yv/vtJIarxWTdBhiTCfM5tvYozhH3/7P+CLPv8O3vXu9/NjP/3zfPSZX+SFh/4yx1evpw0yyw6Tk7n1TCHZRD4FS9RUXLv2cu795J9xz/2f4oZjSzL/AwJRAKa0uVRiZEAndLVsS3tSv6NrrM1ySvW2/FwJaohwDlFRa0Qi9tD+2FXU03seBjcE7xm5GjNrmF+8TLs9k0JfRvaCrSup/VNbTGWlPKpJvmslwtYTnCNkIo75maBfja70NOT1zAyiI+wmRkJtpaN5/CxH9PQRKIOhiAkMDTH6HhctOdiVpI+0MQiD93Snl4CRhoCJnTJZO0hHER3xiC1RSMhS3zYm9X90tFXkwKHbePb8/bz9sW1u3T9JnbkoznkV+ukehnLs2bzl4nbLqF5iNFpg88IptmcXscbyilfcTowtr3/VS3jNK17CN33793DPyV/hiUvXs1jv47p9L2PkRqyO16mcY9Y2jOsJwTfMW+HG7UzUrZvXX8b56WP82//4X/mRf/9/YO0stxdU6aiENxqNehKttPNs7KRreUx5Hn2VKuB8Pu/ZotPpNJ/DGMd4PO5Jvc7e7DJZSiZQ13XuZpX7jpDanfuAC4a69dgLW5y/7yG2z10UogTa6BlNJkwWJtj9K9h9y1R1jasqUtcpeW4C0YnKbpAFc0XbvCFg1IE+w5qxhVkQI9VkjHWW2fyzHPtapm4JWNNxKqlArTfSOZ1LghzC3zK6hNx85oykmS7SxoCtJ/zxH/0x49Eyy0ev792bEqIZvFecVAg01TMlOKqlFa4/+koeferdvPvkNl90/UqKodxx9FUPVWm1pUE5RqOKtYWKMxubzKabCZmCm266AWJL6wOOwEJt+cn/9H289Vf+B7/527/PyUuPcfLShwFYHh+hsmMav0Xtlrhm/WUcWDzBYr1InEZCE6jtiC+8+et5xwM/zrd99//Df/r3340xsy6JoNhYpTqoEq2cO2JHkCUhDW1TdYGUgNB0Os3f3c2/2amK6Vx0fsnSfqwqRyT09pSeI0Sws4bLJ8/gnz5HeOY8o+159gw4Imw0zMwG8dQ5ARFHNdSOduSwkxG2ctjVRczKghDvZEyspGJgjCSzyub9aYp9omVSRLiqMEmos/dMsj38OYjoyetEGYgsKoeqAD62xOg7bhs6u6ugt07NVX04v5/q5HiLkzwRWgOtMVy6eIlqtIRJeW1JL5RMiyj5hp20A6s9KI2BVGVMkPOId47lA9ezePY+/uyJc9xxbJHlWssydrf06awAM/y/p+YOvrcDG4tcviB28vNvvYXYTiXkzgCVZXls+bZv/hr+7td/Nc+eOcev/ubbefb0We775IOcv3CWw4cO8NTTj3Nh+3FqO2FxdIA7j341VT2iaVuqecXK6CifuP8jnD67weHD412ryw3RR5UAgtAm9T3VX83ahzEJS08IqHV4H2hbz3w2I9JJ3KqqBHHPKmendpqUoqaWSxnupmpqdrkYBzFFEHmwUZr8VrFiev4SF594hvbUBap58rtG3Z+2W9RZIPqWwEzsPSPotAHCpMYuT9iuKhZXlqlWFvFLE8zSBLswwY1TFy5nJN1OWx365KAzklBvnYVoqSLMfUMzsvj1RcKFz7L6WqoTOkpHceZ4yUDWlyl9M4KoJDvU5E2srhXdrBZxBRhjwIszf3veEImMF9Zzyoo22IHOphTTMCrtAckeTpkGkgVtwVnCaMTRwy/h4SfewXs+tckbb1krwsUoqplfYU56/w+ka9xBkvk73TcjGxvPyDNbw/LSGGusVJU0ErLVxpZRHThxdIlv/5a/KlkRjGjbwHjsmM0973nvR/nDd7yTuz/wET5w8hd5+bV/i5EdY4zlmtXbOXnpI/zJu+7mb77li3voZqmWXmn42LkH1M2BMSnlS1Kq1FbU4PAyiFsqvKV+KNbm9uz6zDFKjLKxNgMxOt/DYAGyWWywPhAub9Ne3GI+bbj0zGmas5exs5YUB5r2gkkdrlVKW0KqHC8odiC0SYvzHrY38TGybS9CXRFHFc3EMVlbZrK0SFXVmFGFn1QwqhhPJrTOSoBLJWmD9eJYnsdHrHO0k4qVm09QPX32ivNcjs+wcFa3mKV6KvPWvWeTs7g8dgin6/kigiqatOAS3pmgfDzv/+BH8a1n//HbMFXdIWXDGy2MyqzWGvlNAt2TX7NyhNAyWTlI5RZ44NycN/hApafYRYP9tIDOVQ71XwEsLC4wHo+JQcobhhCkbUD274JwNSsV0saGEOaMKnjDF76EL3n1HWxver72m/4xHzr5K7z25m/GWsvSaA1rLB//xAMY84Zs+0e1v4u1K+NfS1BF/4Y+QYuv0e9oxlramCXYA/2yISXR2ZIoizHMNskjRvy84fIzp9l8+gz1dsOo8YRI56Q3KiC7NcuorbGqA/QALhPA+oj3LbYFMw+Mpgaz0dJwniaZQo0FM6poFhYIkwomIyaLC9i6wq4uYEYVoa6oF2pmBOoj+1heWdzTvviMa/QoIlc+rMyv2G0hBImq6NGf5vdd4Roh4vFASnINnjYEGgLZxRNjjyyG8ihXs1N9sVBjTFZjJXHWOodZXObggVt55tmPcv+5KbcfWOifNx1/ta6PXZ9vcI6yGNdf/eovZzabiQrufU4Gt5bco9LairIKSQZnTMQSWV2q+S//4fv55m//bu579t288PBrWBmvszo+zgc/fA9bs0hdpdL/RU0f47pOx+W5h1EvJQFLTGo/7UttTpWQQ1cC9IthhdBVOpe1EaBH/9bv7GYHz2NgvLrE6sH9zM5exJ7fxhhDg0nmik5yCpYPVvIa9V4SONgDb2KKTzaWalTRps1kPJjQynwljavyAWgw1Vxiji1cipF5bHFLY9zShNXD+1m+8QRmqaZaHBEWxnvaJ3v2Uw45pf4uDmYj7b+cxVXaXlt0S9N7Dc+pVdsgeohtlCY4QdrWNSbS2oipR/zFX7wf6yrWjl2fVVWDEbuR7iVt67rHyknMw2rnSROLFvYffj6VG/OORzaYpxZ6Ruk5ahRTcWy56FczhnRdlBWonIAs87ahUWmj6lo04CE0LYQWEz0meioLlZVoq0DEm8gNx9f5sf///49ntt7PPU/9KY0PLNb7mc5mbFyeZsZl9YXJ7Rd2G70g7xh7QJBKpJLghipx6YAvU6RKDSuftxUHu35Xr6U/y0ZDgcjMRJrVCfHoGuHAMnFlghlVuLoGVxFdamVoOh+qzGshUAp1Prc4sIZgKUCQJMFDJHpxEYW0pay1VBgmwTBpI8utZXK5pT61QXzwWdrHnmViapyrWKoX9rRNrqLyQPdgYHp7XJOKZQjxta3aGv1QpnIIMNCm83ewirUJpiY9uKn45Cc+iTGGyfJaksX6ecy2pF7Bxlx4n4yUKZXlI0FpzY4XWVo4xJnNJzk/bzlcjfr0s9M83O2PTzuGknJ78xyXNp6Vz2LMTMAktCmrl8TOdi44e88PrAHhRK4/sZ83f8WX8ku/+lscXryZm/e/ilOb9/FjP/nLfM93fiMxtlILKRYlQYwEDpTuEOjUxzL6pQOEyFKx9E0OCbwk7FIVLXN0c/fk6HqfATmQXe+ldhU2REwr2ti+w4dgfR/MGuLmjLgxJWxu08wafNvCdC7Xt5bW+1z0zGAycpqfDdFgMAOYz6hV1OPOPbdIJm6T0GoM2xcvsxIM8xhh9FlOcu6KECVomLIvhU9l3/tRD5JxsTOsS0fJWeVH7EkmlYgVVa4unZoK5MrhOlGZ1BJ15jnVkh+DOe4Na1lZvYaLG0/y0LkZB5dGVy8IFQTZ/UMyzJOACgDfNjTtdvH8u5yTnfbdcB5F9RIiCUhs6N9+y1fxW//j7Tx8/j284sRXU9sl/uRdf8H3/NP/JXVCU3VA1cKd0Svp7BJ7amyhPejfHSEaY3I5xjLrpFR/FYnVZ6mqate6qsSOEMvvqL06i7NU1Q+ooF2s8GsjiJFFHJNgqXxktj2DpsWe26DdmuJnc+aXtgjTmbTE8yHblCXy/NzLPDTZ+iqw1A4G6ySabTpv8dM5cbxAszePyNVLSrk4qJgxprPxcs5hehm6WNJukcqHK1XaAkgKEZxA3hbLyafOcuH8BerxMjHl3Jn+pTLapsRqiV1YkxFVOrILXSYVdnHlCMZYHjnf8PJrIvVgcbIkjp103jGUMHehsHxMn9EWh2q+XSyu00UAmQQwZC6eXBQ5G8bE/OyYyMIEvupNX8qv/sbv8PTFR/NTtI2ntiREkoSkyjo1jcafpkThIDMZku+tqjQUzTKfiUppnWVUO7TNQ+VqDDbFekZVTiQb3zhZmaRmta0kL0igtmRUUBR4VmJVRqHSupk3ub6tdQ4qcVEYa/C2YitGalcRV0ZSlfzQCrZpifOG1anHbkxpp3O2L10mnN9iur1N2zQQIi6CDZHaWIkAI9LYlG3jpYO5cZa2KKFqMqosc2esgPw+isrbbE+JqxOmvl90+krjqlwi3QaKaOAdKMASc8cr33oJ/PVajrFTbXdG9ey8hsDkMjnGGOZpYQ4evRW3sJQkaMxulCwxkzoaRWTIxo5dSFpZzS7jQOn3ammV0WiZxy5uMGs99ajaScFxQFwF1J7lyhVsM5IKanZ8rFJKApd7xahiRPtjmgK1zvncsW+neyNqaAiBaDxf/5av4Dfe9rs8dOFPafwm115zBJuKYpPAuJgy5NsgxZeBnrSLoUj2DXW+lhZqjvOIbzv0Vm5X7PrO1xlx2oQ1dvfuQxFUQupTEkNet1Jql4huRLJHQkzMMxrqqsLaIgla19ca2gqoKtoqYpbH2P0LjKua0XaDuTRjtrHF1uYmzXSG39gmbEzxPuBmHjQIJvHClkhlu2wY0QpNZ8IlZhEMaLADqS3EbEet4N3HZ9i2QAsvy1AIv4y+L90lxZG7nm8nwScAKEpuZFPsZAMplcnkZOTOyU2qHEZ/cVQXzu/0pWYEbF2zsnyCM2fv4+TFOc8/9BxTk2hR6LIv+joy7R8QB8cOnxsjMLyxqWp78flQrVL1r5Qo6iMm2ebGGlaXLN/7z/4R/+bf/2esg2/7u38L2jmhkpbvEfCtp40x509Cv1hyCJ29p8Q57KJVIq5qupSxqYrqltXSh8+j6qO6xco6O8Pk6Oy6iXGHvaroaG8k+9xVjnmMzGgY1Y7J4iJubREb1lloPW57ip/OMNOWsLGN2ZzB9pywuYWfzmnnDcE7TDViBNS2wlrJPU16YFpik7lvjJHgPfNmzix8liVlOYGCjDWd/RjLHhM7Y1mvhOzp5+VP3Vzit4RoLG1Rc1ZtAIlDUK5k0IzNAVDaHXcl3mDMTum2i0rdP19agj2Wd+gdW1yrPFziObXKXz8xt8yG8OoY101aIJmyAVKBaSNo+Ote+UKq7/7HhBi543nH8QailyoSxopqWkqs8lylhDLG5PjVyWTSI6oyJlalub6XQ+EGLo2yDUAfROpQW73+biCTpmuVS6bPrTViY3ovxoTWG8diVTEJI4LV0D2R2NEZqBfYosWNLIv7l6mNxfnIynaDm7b4rSnbm1swbwkXtrAh3advk4uwi9cmuVYChlmItPPdqurvPvaeJVIUEYoFbA1d5Ey54Uqnc0esnV+u/KwcMRmJkWSPWMP73n13/jzzImOxUd35mmxNR7koUKQxicq50vExZiBJg1TX1q/jzNn7+OTpObceWMrHGuhJvyIeqXjzasIKki6UJuPw4UOsrS7h28upHKbHGkvlKoyTQtfYlC4XpGRGm4jTWYuPMZkLScIZ8cFiLcYZ7rr9etp5Q2MDJrTMUu5irmKXHrDsw6JocPnkpYQr42DLNR4Sa5l/WUq6+VwQUUWQh5K/JEo9j0rDYW6lBlqAwRt6FetkpELSEaKzYFOgvU9up2TtWGMYj0eyV6saa6Ssh1mcYKxlUte4+Zx21jC6OGe6MWW6vc3YR+aXNmkubAh4FCUriWAI+1eYry+I/zXsbYdcFVEOwZosFXsanOlxtPL3rDpeiRgHQ6Si5ZP3fjKf2yZ0TgGmji+RQ1vLeyrtGhMHN5uZhMXEyHhhBYCnLje5Eavpqb7KcXdOrtmFKOVy/ee6tDnjyfMzlpcPsXr4GrgfTp8+w+bmjMWFhK5aCklQ2NlxZ2ZGk4LAXXqflEnThoipDVgwI4exUWrJTGc080bmK0mcejzKNWNLZivP1UcZY4zMZlJxRpHUssNWmZKl99p3p5H7dqgPsqwJpJIf6GsARaBBqRpnlbUF3zTSZ3Q0yuBL27a57qpx8l5MYXUkpq77p0ox1SEERlXdtacAvIXoIE5q6skYP4lUhyKTeUttLaPtGZtnzgvKO08lKYksHj2IGY3BwKga7dg3u43POKKn+6BnJu36vW5BOvXs0w3Z/FFxkHyeHI51xVOodh8LoEeZQMk9+r8aa6lGC4xHK2zMN5k3noXaCSJYXCwjz8ZknEf8Xbs9Q7IvCosjxEjrAyNbMRpJfxYBPYos+IIAZGP251HKNKrtnYigrncwIrXlSltf3hNNo9e3o/he3z0wQKFj38YspWfbtplwVD0d2nx6Dj1ej8mfFwxPmcaQCQ4rrBtjukRr21VMEHVaDfiubk/5TMX26vYXQsBBW10YqRgRskoMTRUxrmLuRCq68QQ72oedtxImGpO/3hn89hS3SyW9K42rqNHT0ztT0LjEklzB9Epf3Z1In/O9JNHkGQzHjh3lEx//hKguTgJ9OzuxI7aMdsVOdVXEU/swysUQosqbIEnd8ZjlpaOcPf8gz16ecfP+RWkAmp8j2Z8mXdxopjuJTvvPVRSqTDYPTGrLQu1o/Yy2nQ+euZuzLgpGizT11cJyg7dtK4WR0+cawRIKp3sbfNpgndQzSSX2yRYqpWTGAgxYJ9dypCR2k+x9DCHKyxhS4LnNj9IG6YmiZTCkcFa6R9v1p+yprvIAqF/UOicqfIQYPZWzWfO3llxv1bmRMHKVimkTGGOSep8kZUxph/KQqR5RakKV7EBrDUSb+82oSRCS20cimQzRh2TGpFpCQBhVqBvJGiRJvPHEeVfc7dONq26vrhtBDWtiufV2jp3oayl1+vZKeR2Tchsjka/8qi/nj//wHan4bQoqjxGbYrUDBhsj3nc2Z+++VYIU183VrJMao5R85OiLuXDxMf7okU1u3jfBeynj4KwVdwL0Im6UQOUMZnDNTkJaK23sTl+cc3nasr4+YTzpwq56s5QIrWkamqbFuSqrs0OJ0yuRqMCbjTjTtdYLQcLwghF/ntqlBU/Kaqqet1OVfXb0Q8qZdAbfRtoEdGDUP9q1tY3Jzo02VQmMMUuzcv3Ldgo6WXU9yhpBjxm1AVc5JPnY9sqWKPPR3jSqnmMgBF0XDcQv1HHbqd6aOylzBjGahIaneUoZLHK/8lzZKIsRaifGaRCfpnbiNlg8kfa5pFcxPiOXiE5omaT6XN97LmlZ/ix9it1iGMaVTPz00hlGbUusR8RIIsqIb1shHGxSA1PIWs/p0Y3+NUoyjlSjMc7WPHxhiw8+tcEHn5lxaeZ5/fULvODAGFeUO9GiXlFt05L4SyluwAd44Nyc/3bvBgCXLz/LR9/zq/mefuu3/5i//rWvFbdIckNoiY+29eLnG0WquvPFhULVJD9JItboib5rIRFt5zIIKu1NN0dXgqmGmR5ZtUWIJKPCg+ZBJfMok5KdOtmLcymxlntJCTbvkRiJps7MSW1Mvb9hEepSFdVmRcOtoNqCquGlbZzEbNHdu1PtSybSYRZyaldV2JC0LyMuHmst7XTGfHu66xwPx1UHD1yJwJ7LluzAnsGsFOfb6XNLnwPHj61zw8038sSjj9Ncvkh18JBUEUkZFOCoIsTWY43BSyvj4lpF8rMpfqpOiUEvuHX5DPN2i8os88v3bVCZZQB+6b4N1sdbmSiPLVpedKhzpu86EiAF8PilwHufnjO2B1kaLRBtYGPjaWq3hDMVv/prv83Rwwd5xcuej9/ezHYlCQWNVaSdt0RfpFPROe2tsfjQJhs/bfrk6vDJLjVlg5tCGpZoZ7mpS7SzBIEUmTWQbTd9lfVsynOo5GtixFlxuPeJoCPEMvi8rIruTFcpr9wvXfx032bL7qQYcymUqKh10TSoFDB67yARPaTu4H3QKQK7N0cSNFsEhAF8RLS685uEk6efe7+k8RlJynJSSnT100vE7vNyI+jo5fIhhrWJEGab/L1v+Qb+xXf9az74p7/Ky9/4txkvr2X10dCBFT5A22RZOMQpkjFiiD6FrSXdJFogRM6ceQCA48tfxnR+itXRrUDFuenHuTD7CDHVuj677fn42b05g+U2aw6M7+KG9VexsLiIHdVst5dYnKxg8bz/oZ/hB//jf2H//n1873d+K0f2LRP8jJiCAUKM8nAuYKoq25miTqeMmWB7jn+R5hWYgMcnNdpmgo0xVXZr22xfycYqa9J00q5cL2k41HXQjrFfCV+P0Up00LnVSjV8WDZmPB4nVbJrNRej+F7ralAprrif0u3S1x4MJHeRLYhI95kUSu7cPVkV9jHbxyGzOe0Et3Of6z0bEzMA6JPZQAyY2Zzq3Mbe9krcCxQKvO+db8sX1xvbDUKHvupScpIyEqi0h3YbinTpdbyrufvDD/GffuD/ZWnxIHfe9SZOvOAOiQGNgXnwtD4ybzzb04aZb2i9OMZ96icibpEoGebeY0LAan/LZJNtPPUwDz/yDvaN7+S6pdcRBT4ixMBsviVBE0TasMW2/1S+x10nt/h9uTrOkbXrqOuRlNR0laS6OYdzhjY0nDz/CR49+06mzTkOHNzPN3zd1/CKl9xK22zR+jarWFre0FVWVNBikw3rmTrnEuoYZXMmJ3dMlSEiMJ/NCDFQWctoNMp+QIyhJdAEcXyXUsV7z2yeimtZm0A003OdqbukZLbGQO065LdLA+vU0bIae5aSzuFMv2tWGdhQ7jt9L6d+NYHZbMZkMsE5l9Fr5xx1sutVJdZjm7knGpcbFwtthZ7EHNYYyq6f3t6O0LS4py9w6aMP87d/+eevRGJ5XHWNniFxDYME9PfyZwe1y00OJe0wikRajFmyuwGDDfCqu17C+Lu+gx/8d/+Bv3jXL/Bq4NoX3oG3ltoajBWddt765KgtpLNJEsWkhbYmReRI7R799mi8jDGWmb+QMi46dXBcLVDZUZIyiyxWBwomo//ly+V0NAPUlUUjPG2MOB9w0WB8SzBS0+vGtRdzYvX53HfqTzlz4X7+ww//OEcOH+Lggf185Zd/MetrK8kuc1xzZB/Ot8KUQsjgTYyR6AW5qSqLocJEgwuRtgmcvjRjY3MLIjxz+hy/+8fvBOBNb/hCjhzcT1V51leXObTsaNoprZG6pdnnE1PQdfG8EhzeSdXStizVOpNscMVny0igsnfksPylAov0ztO3HUv/aDmyLVsUidbvjJI/c6gFdCZU6OKli7DSIRPoFRorPgdSQXHLeGmJrc9Ff0q9ae/bQm3pP0gpeEui7GwWCoJ0SIPZQRPRkDLi0yILOGAwseVVd72Yyff+H/zXH/1x/vzdv8CrCVz7wjvBCSGbCsZ1zTwE2tAkZ3rqBhwCGec2VlRWX4ZGwWjfIVaXjnFp4wkuz8+yWO8vVERxCwQjx0Ri16g1uQk0TaxrpWGT/WSxVuq2Sks0XeTk7/Si7lTGcPvh19HE1/DUxQd49Pyfc+rZ+7n3vvt77pW1tdWdRbDoy2wz+CACly5dTlXX+5L83vseyMfWdcWB9XW+4S1/hVe+9PlUzIQwIc1nwAKV0YAFyVexth8Tq8SivSplT3RNX5XASmLRZxo2ihX12qK1c63pq8qlcFAClf3mcLXFuAqb7NV6NJbUqqqi8YEQTQ6q1xESUcYkRBR11fOWZSWH92GNwQYt8OVF6xtVUO0td2vP6utH3vf2QlWNhLCzy+1uqixcOS62fMiSuNXgL9WlrO9bR2Mdcyq+89v/OaeeepYvfM3XceLFd+CtwwfDdhO4OJ2xNZ3SzOeCaILU/UmSXnJrgmQBeI+JWjArwqVL3PuxX8fGZa5beQvOVqmYc+zcJzF2qqvefyH9pYeGFg621M4yritG1lElu86mbAOLLSgkdpLbGmahYdpOObXxENvNxTx3p7fup/Fbe1rkPAwcXryNyi5AjKyMDnJ05Sasczx96WE2m7MSAtdu8czGJwhxjnWWb/jrX8Ob3vgF+HYLfMzMpmmTimaST9JVhU+38z+ORqOeHWgQGw+6NgdKhKPRqJtDY3p7pjKdPVlVjhDLKLPu+4rEShNacXvotZqm6aG286bfh1OHBMGbnl2rARFKlGVXMW0QVFUVli74PjYtPnqW5nD+A/fxlh/9L59+mfZKlB94z+8UE9QnSp3sEmTQUUrQoYqgk7njpswgLcb0ibK1ltZaoOLXf/m3+M1ffRuvftVf49rbbidWE6YBLs4aNra2mM6mNG0DEWwUQsl5nz4Q25bYtpikWouqHLjw5AM8/sR7GJkjHFx6PSOziI22zNZK8bNl+J5u2MRMjJFSKdbhHNTOMbYWTREXgd2pdZ2sS+cyKtXlep32EJk181QErHBmDOYyu0hkwgkhMq5GOKOdoCVGVoAdl2zdmhA9G9sbPHruPh469x622vNcc+IwP/BvvoPYbuYuXY02c42Su2qskwLHkKXeUEUVydrVdtV1nUwmeO8Zj8c9qaf7IcaISdqZ9qZpfZOJqQzrU2KRCCaPdTUR0fa0SHTep0YaBQ1VUEF0O7BJ93gZq1vG/moCt7PiB86RUd4za+Ys2pqL9z7C1/3b/7Bjvw/HntXX2WxW2JUhqZ19AtMxhIp1XMnuLGFz5WAo7iU6JrrFDIYKsgr4N//Gm1lZWeZnfuK/ce1jH+NVb/g6RpMlJrVjXjlmTVrQwsWiGxIrra+9MVn1DDLjrBy7mWvbwKdOvoenLv8yI3uIxeoWiLBQHad2yzhT4RJBioqTyhlmJDPZPMmejT6lSIlhJaB58ImYTEdUJiTl2AgjKOy1dIdMbJ3mr5j3T7eIUjOsU61JBcJDYhI+EmOLiZEFM+bWfS/mpv0v5qmNT3HPM7/Dd37vD/JP/8Hf4djBBdm0SfM3RKoEDI3rOj13IhLTlaG0ykCSSj90mQyD1lWTcs5Jjq7p9kGI4uz3rUe92zpPYjJIFFBLCpSgr9qqQHHVuAcaqZARwtZY2y7HtdyvZSWI7IHQvV0ySGvxFlj5LNfoKZFSBWx07EZoQ6LcLf9v+IA9/TwLCO1lKMmtFgGZbLQp0r/lzV/1WgKRn/mxn2Xrty9y5+d9JevX38psVLM1TxEfGrKmNhwkzTPmR8k2sDFEa1k6dD0318s89fTdbM1OMp09Kbc2d1R2H2uju1iwh3CmorYLGBOxMdk+RgAigqC6WAgm0iafqbVk14OcVKVsNnlT2X05ZyEwe6P3Xux+Gao/2UJXkEKPTUwlxiD8IUpYnPctTdsSneXE6vUcWv37/Pmjv8w/+Z5/y9e8+Y285atex3x6WTa8keaoMbE1g5Fu30ayWmJM0T1J0tjE3BcWFnpqo6qVQz9kCKkNoxFWNfctI1MnxpdsT8TetAaqUWr7XgHGMWva3h4u91o/+2mYwtakfSuV0vV7JTHq9/WeM4KrK2EtwUMbI6OVlV1WcOfYM1FqcHOnUnYcogz1Go4SRVN7YTf7shwm75ZY7LoErmSpJwARWJjO+aqveC3WWH7qx36aP/vDn+J1b/gmJieux1nLeDymmTf40AqHlZvIGyXSL+8RUzxnxFIt7uO6619LO9vk8uWTEGFj+xTbs/Ocmb4dAGsmjO0xFqtrWaiO4KJlcXRAIjsScmgDYAQ88Ih0MtZgTZfSprGbxoKLksUvRcBCVofNUGUt57qbwb4IJZFpcXzIT5zkTCLGkOzuxvtUVa/FBE9VV7zy2r/KJ079Ob/+W3/AJx94mH/+j7+RGKY50NumOhjSLFUyWLz3YGwOXJCY187GK4t19fzUsXM7lNiD7kFB6e0uqm5fesXQFf7SV1/C9dXk3RKw5b52Sko9Zjf3nxSXjl2pkGhYWN5b3dc925R//Lu/AKiTVm0gspFbTmJ5o6XfSsGbKwE/3UjopOkb8fmm89eyw0RKS9YT3vYH7+LHfuwnGdWLvPKLvp7p/oP4ID4m37SENojKWCSoEkIGcWK6XvCeuD0nNp29mVaQGFpCM+PC+Ye5vPkMIbbMmsvltFLb9czFF9xh1kbPY2V0jCqYFBRtksukk1wkVddacks18apE1XiTdDU5CKA4GNCg+9ijydLOhS4ZWMlyaDpoNknTtvgEVlmXpIWBZzZP8vFTb+OWWw7zL7/j72JjI2ytyOiIMeacSWMd9Xic/KvaIi/k8Lo+FtGPMFLUX/eOqp3WGMb1KO+h3JBo4KJrmkZidFOZkaZtsEYCxmOIBPpBL2qzzmazfA4Boro0Om1/VwJEw2oN1kqLBZK9Hb1nwRve+A3/8Ap7vht7lpT1eNRxlaKVOXQhVYpOlaMkwvK9rIPvKl3T97KdVajCEWzuYmHSvQgkT+N585e9mrteejvf9d3/ive9863c+tKvpjp6QlQsSFkLqRy/tlPvdOV0P3KdaJCImpBs3CTBo7XYesT+hTvYH+6A4Glml5hOz7Gx+QzRRDY3TuFToaS5P8PF+X3Udj8HR5/Hen2ztGWIvUtn+9OlOEtjJStCbbFgUqv4BHpkjSV2sbeRPnPRmUz6dFq3qHpHft+YtJGROry+CC4Iqa6PNxKcv298hGtXX8m9972dj9/3KV7+gmvEBeXVvhOJZSuXkFcLxuZepLInuowLvU/nKlqfQuEQN5JP/ThNYkQRh7FikrQp6ga9R0TLialduzypS/ckCd9GmXF0kuFEpz1oVJIi5sG3yU8pNr7apYbOT1/XlXxipXqjdJ0W0Mu3akdLmlezw6jYfew9dasXp9ghjWIudaUglNjKMRTx+t6VgCLoOJ+qy9kQDLqlyASrBpc0mdni6IGa/+Ub/wb/4Yd+hEfv/QNuXn8LbrwgWeTG0JoUGVtcNpY/u//k/wTiZFvNdO8bC6aqmEyOsHjgOAeqlxCdIzRTSG6WdvMi5888zOmzD/DM9O3E8JWsjq4XYrSmIEqRhrURQKc2UnFgq73MynhdJKRRLSWm+5H5MKl8QLbhos67pHKVQz5TCu0I19iAiy7ZlF0eZ1TVFimwFRs4uvR8Tm/cz0/8t1/lZf/3vyD6y/gYUoEpQ20NVVVLyzlXEaPajC7tEZ3/znetXZBDtBlh9d7ThIa2DVLgm9RBWdHPNBVtCjUUj10H+kTjiPiEo6WCXkZxkeLZjc33JfMmKWLOCHNwtlN1Ve2HJJmNSfcjPk9Btx3BNKhpgiFV///046oC0ksHcGnBSH5d6Kmqu40duXrF2A0s6n6a3P5A6NAUkweysLrxZJt+wSvvoK5rLl9+lqc/9h6ueclrwVT5rg0I9w2WaOR5ulvqawLleypB02MXc4DE1DqHqSuqySoYsQkny+usHrgWPmk4deZe5nGTJhEN0ZRbA6duleiJpuH+s7/N5vxpDi6+kEPLz0dD6y2WwysnJKc1hFxyEwUcknqGMTgTO+Qzqbn9kT6JKbolgyu9BRLyT+pZZRz7xrfw6Kk/4n0f/QQvf9F1OFcJsmsM49SBWcPmdG41nE7dFspcMhAYOxVSErFVogqTUNW9BGTUL6m8VG1FQOzOAlTsRQkVQI2O0qZUfzlpr5hYoMTl7BkxM2IUs8MZyakcqsW7uf92G1dVeaBDmfRmMsaUoeASwSpDnnZDXK8UkN4/t+p3Wo2n4PJ0XxG1OiSuDpOx45Zbbua++z7J6ac/ztLyUfZd+/xcZAtIRZ1J3Xxz0cr0ROm8KowppPzg8kIEQtRaljWmY0KUvM92ts3W9lmcWaZ2x2nVEjaqGJGfLZjIrNnkqa3fI1aXue0FN/GJ+z7CM5sfLh7ZMDqzhHL5Y8t3MqnWOL72PEYj8fkp0BKClK7sWqXnJ+yDPSEhpz3IqG/Lm/SMMQSW3CGscdz9oY/x+XfeQjQBT8xOdKPRLc5hMDmbYwiU9FB457IfVD8fjUZ4H1LMqtyLVt/3vk0+wrpwXWgmx3AvqX+xi6ZS8LFputQvfVVVnTTE5GsN5H0d1PQwFmscPsSEFUjtWwDvurKaQXxuexp7Jsrt7e0c0Atd3CJQqEw7w+52Q9T0+GGVMv1dAIcuLapf0jIkOhXbNu8vY1KbOCE0H9rcLMbF/Tz24B+xcf4pDl1/B9XKvm7bxYiSo2jBSTd1VlqexRQBFHvkmoZaZYlRhZjaqiU/o4HoA/OtbR5/6I/Z2tpg//gvY+1aqvgeQP2QJj8dwQSenP4eo6UpP/Rvv4/aRDamnj+/+4P5yt573v5Hf8Lm5haByOMX30mM8NiFdQ4s3sqJtZewNFqjTlkaIaQ0osI26iYYcofbNB8mqWQlgarqpj7IxXoFsHzsvvtxVU2gxdoUjZVwhno0ygW5Sge/7p0MigDWVBgTGI9HQOe3lO8GmqYlRmhbKVytycjGuHRPLgMtbdtF34CqniTwTWxMGfrTADZ9Ls2UDCFpMg6JWu40PWu1IJgwHG2OJgpTp72o5A5RbeVPP66qvXofYWVXIiyJS90oV3KVlEORP32VNqiEV+r50/GDNsmZ2CETin55bfzlbLX3curZD3Lu7P1ce8MXsXTkRmmpp3IqrZpJks5aJ4AOhibMiEEAgSIuWeaALGcE1W3E2LeACdBub/Lk4+9ia/sy++s341jPgIyPiD1oEryfGEoTN2jCeV555ytZWh1DgANLljf/pdfq02Ji5G/85S/Fz2a0bcujT53h5KnT/NKvv42TZ97HyUvvY3F0hPXJDVy79jIWqmVpEuR9ZqI6P8qQQILF1baF2CujonPVobidJuRchanEBi7jpIW4DcH32yHUdd3Lg1RpOapHqZ1dx8zLaDEl6uEe0nsq46xLc6nU3kpJrdUNdnsFn3qX1HWx7ztJqW6gGLW6gtzL0EVYItt7GVeRTymhdaJji43StlIOMfo+B1CouFyE8uZ0Icrfy8kYTq7Ye4q+hqQK7EwXk7tM9NUG9u1bTzdkWBq/CmcOs92+j0cf/kMWTu7n+C2vo1pcw1ZVwicTRy8n0TlaI1wypACE3LHLdCqv8R6NJLFWkOgw3eapp9/L1vYG+6uvojLrioN2arKCMjEQE3A051kCnpe/4mVEq1zbynfaNqlNhugbDC21Ddx67X6ef/0hvuy1n8ejJ5/l19/2du75+Cc4ee59nNq4h8X6EEcWb2fi1lmq1iFCZatkw4WsbkdjOmmYmITak1HnWe3W1Ap9fW2VuqqItZHmqSmcLuMBxhBC5zZzrkLrWlqjLcwTRmqdVDQwUrQsBvHTSsB4MjOC9j61eW8IyCU5B75NBdqQQ8QGbXPIprUVVrOF0jOom0Yb2eq+zGlsdGBU11dUJbDJC6p7v2QIw73/6cZVEKWlCRsY71N4mZMZaLtaJGWcoz6U3mj5e0eAQ/sCMsiSVNack5bO3+mrfWLXHhuGkGqgtvzlN7+Rd7/7L5i297FgX82ougVnr2Ha3s329F4eufe/Mx6vsbRyAleNWTlwA25hGWddWjyXFzak86Icv7s6ChL5dsp0+wzz+UXm84tsbj+LiWPW6zdjzZrK08Q4OvvOqG8kRjyBy+1DOOe4/fZbRXWW0CVi9PjYCOBgDcEaTFV1qrUztGHKiSPL/KNv/ho8b+GpZ87x0z/3a3zs3vu4dP4JIQJqKrvEvsnzWK6PsjY6wtgtEGMQFddaorFJ64hdr08DWIerHI1vefDsnwAt/+Dv/C0hJmWu2GR7mlQpweBskp7GYGydGmrXSXXVPWMJKbFL/d/Sk0TWXdTpVP8Wg7HStj2GSNuKhE9LhKCsakc7BLWtALl/HwSjqLOKK8xCGGore9OKyqAxxtZYnB0RoxKpVLkwiZ1HpLW6lxtI9JD2h55vD2PPRDmNLXW7TWgq6sowriTQOtrUqi0RVlkkt3STdKlbHedQ4ipR3Z0E2g/ZMz2CUCKX7+aghhgTN9VJSLZrNNhQs2C/gAX7EjbaP2E6fYbp9GMAnH76gywvH+PAkZfA/mNU9Sht+BSG1jZSIa6ZSlWAGLh0+XHJViCwNX2WEBNMj8OxzJp9IyauZNtMPaw9ky6CFX8NIUS256exzrCwUOObbcBJlEwU4pRNafE5uySBM9ET27TxAWg4fnSF7/rfvoHGGz7woft45LEneM+f3433M57efJ9sAjtmdXQDR5fuYG1yiNF4IgzCB0JSzfKwkVObj/H4hfew5Z/lO77tW7jjtpuoJzVN9B18FEm+xJZoSG6RmIlF9ob4HAWcE9FmDdKuLkmbMjTOaSamkUrxil5jRA3Ney3GRIwG7cVCApHIKmxSRSFnm3RaDpkoIx0K7VyNNTU+BYB0ar28QuxSBE1iSPp5sak/7dgzUT52vuW2tQnj6AhOuIzWWTGUkQ9dMin0AZ2hzVnaoyUAMIzg0e/kB4z9vMxsPygAVE6EXG2AIhoMy6xUf4kQt/DxFJg5U38vGxvPcnnzD1g5dYz9+5/HytpxrPfMz59kun2eS5snmfstQpj3rhAxVKyyYJ6HYw1n1rGsipMjRILp2sdJIE8JMHTP4oxjffQyTs/ewUc/+gAvvO0EgVaAEzr7S9Wk3vyoSp8+1zzGGCOjkeXzXnYzd7z4Or76K7+QEC0nnz7Ho489yTvf9V6eePIBzk3vZ+xWqN0yEFkdXcva+BpZx+h5ZvMemrDBdnOGa685wb/+1u/heTcfxy6OaGPIMa1lPKuua9lnJNDZkCoh1aWGD8zm8x4z71D/2NtX6hopbcihGZTXfPBe/t3k/4q5VHXTIG7IATHFDEGkciddWZgQYgEwfWZjz0T56PlVbl01LIxnTF1IrcEVIQuZKHWCynL1ZfhW9+Bqd3YLpypLCYfrd/Wnyb/vvEfth1k6geU8oDaAOolFH6owrFCxDCayXD2fEM6xHT7E5Y3HuLxxkspJS+zWz4pJO0DFEoaKiX0hUCEY3T7AdawzL6aCJSInA4kwy80QVVU0LLqbqcwH+Kmf+nl+8N//SyLizO9yPultQp0riY7p56mWG7qu65zbGEJg4YaD3HB8H69/5Z1szlre+d4P8f4PfoTHHn8CgM35Mzy18X7KO11dXeHvfOM38MbXvYpZsyXML4FU+rjBi30sG7SS4sQmSRYjLFGd++K66Pyf02YqichVldPASjecSkJVERVDIEtGk9Ph0GeHLGHTVHdgIBJtJBCW2NjGBIyBqurMpBghBJGw1lQp0V3nN9WoTSlwxqj2E9J+00CFz7JN+eTDD/PYtV/IAqcgJvtKK4uFLgFUuWTJpYdR+SWXLKXkUHKWG6oDeoa2Z/9cGYfeZRiVmArMxhSIbkxW0azZz5J7A4tcYB7uZ+YfAWDJ3orjELU5gokTMI6YsuAzaAO91gkd4zBDXkzMbgGTF1EfyzBhX/1yTp36Yz728Yd5yYtuFDjeewHmB+iiql26uUsbvnSyG9M1xjHGMB6P8a24cUaTljd98St485e+ihgkzOzspU0++NF703dHvPqVd7K+ssxkZKmrMcEu52BrY0xuhWiNxWNyYWQtThW8F8DGKoJq8K1HXRrBGHyAEA2Nj9hKpKrGEAsxyjXa5H5yzqU2564IKigi0IziyMkeTeshv9uk1hqxCqwTX6cxRCqM9YSoBa2Teu1EJY42gUvW4ExFRVe7KKRq9xJsr9FVu0jcK4w9E+Xbf+r7eei9d/K//+//hKMLLW3acGUyK3QXLkvY6yYpnccqXUuVQ7+ro1TVOvVVexju5vPpwgDFjklhVaifUbFP+a7aPrJk+r7+PMCCfRWL9vMS2VVZddbDBHTrIkl2G90y9L+gz64+uv5nlgV7EyP7QX7uv/0yP/jvv5d2vknwLVViQArlqxonQePdOZQoc/JtyshwhYqp37OjitFE7MjoWypjGdU166sL3HDiC4kGJgsLxCiB4aPRCGsrmsZ3haiswbphmcZu7ftqpqrfQfqQWgW7+tqR7pdSbd1tVFdIrC6Bxz6WoT8N2Drbpsa4RNxVsjMbQkjFq6NmKSmYZVAU3GCoq5rJZMJsNsu9VkRKtlIlIQQ0P/PTjb3J0zQe/sRH+Off8Z1sbtvE9aTwsTU2VwPTjTLsU6kZA90wPci5BIiGo2cPJEFY2lVSSVyqibdtk8r4txzcv8Ta2hpb7X3EOLsS3RTkaHbINCHGnfVdS/K+2pElaxQ3U8l4Qgip69aItfqlPPXU03z0ow/QzJvsfC43eneerhKbbkLnHOPxmIWFBZaXl3NW/24bVB39k8kCk4UJ48mEhcVFlpeXWVxaYmlpiYWFhdxqQFFxzRBSAtIhSKY44tX+ihG8D8znDW3rCV6AH230Y+hjIWWlu542RD8crjSVtNLf0HQqTaLSb9j7POFGWCMAFBVQE6kkhtY4cYMVi69IfOM90/mMeQKcSn97WX5kL+OqiNIdexPnz2/yvd/376gri4/QhpYYCoTMdWqEEk3XF6PvQNZy/ENfThmfqO/nCcjHd1kG3ovNFYIEGsSYoie8+KYktTj0iGgn8aVJ3iHRBu8aVVlNPotEwCTV2cRUfaD/Xk+nVZs2IQZCmCEFfSdXUIQFdyMjt8bP/twvMpos0oaGxrf4GBLEbiXe1ugdikpmXQVpM4xGI8bjsXSUSptOWzYYaxhNakbjWsqWOEs9rnHjEdVkhB1V1GMpMpXRTtSH7JMbCqpRJeqiMaIumkrS5aJs7NYbvDe0HpoWmlZKgWLTZpeQBanzY21m0qVp473PU1lZK2GDmJQkJCqiXD+pl0aRVwlosK5KfmBX/BR11DpDPaowlQSMYJ30RQ0kQrQYW2NcRTRR9ryR3CQfpaburJmyOd2S4PnoU7v7SFVLCdHxeFR4A557XFUx5nj483Ex8OBDb+eTjzzLbccPY0JLqEep5zu5gJAxJgcKl/bNFc9d2JelbbnDZszIK5koOwQT9RoCYHpR+Ve2NXfey+Dv4vcSn8lIMMMvdOcY2pKdQWuyEamET3JtBJCKfnbMen0XTz/9J3zs3od53s0HkKLdHXIYY6feuQRyOOeKwspJolqT7c0YY8qPTI7xFIjuqlQVIEqXKVxKkrOWNoEvJBBP/Ide2iFYI/ZfBB+FOYQUJ+q9uCsUawi96JckRUnBCE1n3pRqZ5ZyaRatsbmL95DXlXZ8TABExBBdis92trN8QpSKhskMIZJbo7dI7w9rLCEBOQYpb+Kjl2JnaO6k1Mc1IeKypgI+eKqidOawDtCVxlVJSkOFueYrMG6Z//wTP0esDfN2RhvazEU7Yzf07Bbo3CMdcXbbvZSCpTq2mz2hE18SeVZnQ5dhHgrq2quRvXNEMsSXVJW9k3d/9KXzQCLTPYMikcFHxvF6Rm6Vn/6ZX2R19QDj8ZhRetWjEXVdMx6PmUwmTCYTxuOxqG/JtlJwTR3xZbFmPbaqK8bjcdcSYBe1tMQMSlVRNJGYu0J3aywazLxppCNVemE0btTR+g7cy9pU4asWO9l16p+zqdCXalO2INp+9Jjea5r43nua+qVAVEzPp1FLkaJ2bT42YQeKMKdsmta3tIPvlnOkf1+Ni+Tq1NcYGC8doz7wah564AHuefwUW7WlKQLLh76gocq6m5ujRBOHrx7Ik38f9rUozpU2YNu2zGdbvPaLXgO0+HCaXGs17lRTy7GTfmNHiSH2XyWVFq/dbM6d19R3OjJXyReSxAzBsVK9kDNnzvDo46cZjxcYjUaMRqNsK66srLC6usri0iL1aFQwwVgwyKTeR7Hjul4fllE9yhtf2xnEIO0MSlsVOgar3xdAJ5kSHogW7yNtG5jOZ113M5uyc7LKbfDB0wZp06dqtU3dq6ORbtURqbnjNMjd2YSoOhESxmGN3sPONR36N/UZSmQ/r8Zgn+3cd/39Wh6TzTBjqOoKV1fYyqUopHTcruDkznFVRGmxBGex1/8V7ORafvRHf4ZJtQKx38hUF0tRsaZpeihh+XBDAlRO2xZpR6VEDKEDkIYTqmqRnmc+3+blr3gxmMg8PpaJba+TIyemR2T/M688en/E3u8a1ib57WLTjOK1xGj4H7/zh9IVLCGpKiEXFhZE0tU1tnJEa2haT9N6tqdzyeY3FlvVVPWYycIidSXdxQxin6m9FpLtpu6nvPYDgEg2tEFC5CRzQxIHxK3hQ0yVAcQmEzvXZTuv9YFIqiyAxdgqvfR3ySwNMea/pS2dy59pGZhyD5Rjt3vW34eENvxZ4hr6frlX9TyulORJ+lqXIoGiVCITuzPSPof51rvvPX0rDXkoS1g+SnXN1/D4Y4/z6//9jxmNxr2JGXKa4QPo5AwR2hIUGqqx3WunlOyuUxp7EoWyb93xvOffymb7cWLcSN/aDWUlf7bzve7nZ0KAu6vOQ/G681P5aTBxhUV3I+997/vZnopNN0qqq7o5lFBL/3DbtmxvbzOdTgleomqWlpaYTCb5e2r7DyWAs6Wa2O+oXAJ43nuaeUPbeLyP+FbUughgTQalAlKCRcCRiKsrQTmdlA2xlcsSMiTGZJyANIEotTD1M10pAzUwjmVIZUeA5ass+LzbGBLfldTNEvVXZLXUGmzym4qm0+lGnzP1VX07Nnjs0Vcx2vdKfv7nf4knnjpPjJH5fEYMXlSgoE1k+pLQWtvbEKriXklt3U1yiioWdhB+d6PJoY2jmc/4hm/8BuoxTMM9VC5ipbVzig4qp+45nv1qJqo46ErE3z9z+lZSf2TDmSwpAoYFbsG38M53vpel5VVJ6rXSpDS0Ad8k4kg2oBJr1jJMV7gsM60gicPaoFaO1QgVl9DxKhWNUqlmusZJITKbNdk2jEHb7nWmyhDc079LN1jJsMuRVeoYc3fqPE0OrAtUJrIQdB6743K79YH7YxiUUt6X/j2srKfPomPoSnHO7Ti/TrpJKPen87WW46qIsvWyEFGUf0Y3fz2xOsj3/pt/B1jm88tEP0vV4iImtZiWbI8W7xvatiEEn+qt0Hvg3XT6EhwKPqWKxbDjO1n9RRy8PhiCt9jgGLuG7/yu72BuP84svo/azXBGyuebKC8SCqh+AwN9T0YGAdQlkiJCMB0xDV/5ONV/TXdCJb5EBBo4LS3KHTFaTDUiVjXROGqOc2TxdfzXH/tp3v3n90gESrCYFkwTCXPPfDZnPp8TozSXres6q7aVrSBAO2+Zz8WnG1JxrBQwhrGiYgYSkhoMnVsDWm+YNZGmhTZYib4huUGsTRIi+V3puzOAnpuj9N/ttvHH43EOCTTFvMUoc+mcAEzeGWajFG8tq4GzlqrqWsE7wMbkeEnrrfE94o7SKJyA9w0xZeRIgkSX6FBVEunknKGyUndYE8hsRJh80e3ZmETAiaGoj/fTjasiSi1Pn7YzfmEf9bGv4PTpM/z2H70PKkeMTbbB9KdztkD/2h5RDfsTXpEgE9o1/E7v+4paRmEewRtiC7bZYmy3+Sff+e1s81FOz3+Z1t5HXc2pbBcoF0tIfQdYU3K54pPPENUtkPvitFaI0lWExPjcaEQwUsWtbk9Qm1V++Ed+gqa1hCZCC7GJhMZnzcRaqXW7tLQkzv/FJZx1tE3LfDZnNp0xnzd0IWBd8SfxN5lkH8I8ROZeWqnPfcyvNoq9q75RqeimUT2hs8VNF1qpWtIwj1amsSNUlW6lqaPf6abKSHFrB3OXKtBpFQCUwQub1RDEvMB5oSOaHlhGmJWAoi6x1gaSIlpOtBS6fZ4XNTGkXoRboULvZVwdUep1EzLYGEc88TqqtZfxCz//y5yfTmi83l8KCk8PMx6Ps8owJDadxCuBP1ci2iEBa/9A7700Q/UhRY54Qphj3Sbf/h3fwsEji5yb/SmnZ79CYz7JqO5KOWb3R57lvpBTazRvj+fQfHezGvtf7ySlSX4yjCHUjuAkPcm6GjdaIJqaxjsO1q/lzJlz/Ox/+zVa7+XVtDmWVmuSatC3RFp1WTrqL9M5081SAnDy6mz+pmloCzeXT7Y9dGgxKDJrsisq0o97Vru3VGtLda9UaYfgS57TOJzNrN9Qdqj2hbtF42LB9PZYDBJQkiX1AJNQVd+YlEup9+cSw9AJoM8wdtsJV+OSuyqiVMdqMIZgwGNo62XiNX+Fzc0tfvonfhFbL+GxRNMS3SwndpbEo/aLTkYZolXe/FA1LRHBKxJmlpohSWeR0DEEXPAsjFq+/dv/Hn/v738zh46ucG7+Lp6d/RIzPoBz56mqKZXT/MZiA0QYQj65gl6P++a7v/I86iHIlrLOCTqZTiGB0TXRR0IbqesxthoTQkU7X2LVvZjf+u3f5bGnzzD3LfPooa4EwKlEEim3VnCstKFKZHG4WTQksrPlO9/mfD7vpeGVa9OtSejZf8MQSq1QrtKwTPdTu7Kf6W8yk+2IB8EECBA94HEmpko6JHcV+SXRP1YLIHWfpQ1to8GkHEmHxURDZSoq4wTfjXJ8ZRyVcdS2lqCATqfugYfd7wm9DXsh3G5cXURPmpESvIgR4v6bcGsv5QN3v59T5/8mh9Y80cyxborxNRI20QUW7GY7lqDNbuBP5pgdTtHjopkoi79lM6X8vmiokAaeYbbFiSPr/IO//3d46uln+e9v+x1OnbqbGO/GYFmsbgQctT3AyFzXTZZdh1gJyuiD+KCGQNOeCDOVEQmAk/m0zhK9gGOTaAmVZR4ivgk4W+HqETQNwS+yEO7EGMt3fNf38kM/8H0cXF9MyGXayAiiaunnqJY+xhJp3BmcETMKblyVfJtmxzE652WLOVHXoqT2ha6kRpmMULaTc871Pit/6rq3bQtWiE6b1QbfEnyDNY7gDc7WkKpVGKTkow9JYzK619qsjZDsSpOQUiFwvbZPyQySASVan5wXA5UVyelNSj2LiUHHiImpjApdgTJ91s8JUQpBFNzAiK4e7BLmmq+m/cQ9/OTP/CLf/U//ugAAzSEsLXXVpXRpdsNQwg3BHl2c4d+qC+px5UYSgKEPW7epXotzDsldl41ZO4hxzomDy3zr3/9Gzl7a4u73f5DHHnucZ089VkjvP8/XGLtDVHaFfePXE7YN0v8ribwd8/0ckjLKksUEDJgQpehUKiXReM9oNMb4QGhFWrnawajGzEV9HIcXEH3DP/nO7+FH//MPUE0CuRVDktqRPhEMW5qXAd8yv1ptPHYNkWzszaeeq2z6WpoiipTKpu031PHeXzFYvCT03QJQSEWU9X6tQUL8iMTQplSTBNop6mlSVFIzz3tD2zUYWskzt1ZKaxqf/KBgaLFW2tIHm6S/7eADYx2OCpeqsIt600n2TBuRfN2rUV+vjiiLIfarZGeHEPH7XoA9/rV86O5f4cMfejUvfdl+bHBEOjVVuWq/70LfViztDf37SmrWrhI33VxJtFlSOE3ETeCOgVHtaOKclRXH697w+cTwecRY0/rA5sYWd7/3boTiIp+875Nsbp7Gxw0Ojt/EfC4lCBWx7SZnj3NIss+Dx1Lh6hpPS+M9NgZcXdG2nta3UDlsXWFiBa0nRsckPJ9LWw/wwz/6k/yf3/NPCHEu+0PVx8y0pOJBOVfDoH+Z0041zbGqA5eGfl/Lb5TuLZ1zTVEKIeTsoaFEHGZMDNe6B5RQMGRESlZ1V0VOnq3FGJ9aESShEX0GXvK9VU7WKrb6LYgeI5hz6jnappq8UmArRjFlTEpSF5eaSyp0lHk2RpBdYwWfL8DOXGZrqFVdYXwGRCkbP0SwJlJpOXdr4MSXwPkP8V9+4mf5iR/6PxlziamVng/GkDINhKkFPYmJWCfJriVoUC5IOTK3MtCrHZMhKLPDvutgdXVPpMJLIOqIKJDp5BJ8HSvDymSJv/LmL0luFs9f/7qvJgT4ubf+Ig/d/zscqP8S83mFFFIyxX3scWgflCiV2FxdU0VLbNqcj2prJ+FuPm1kV4maFiDGivX6FXzwQ+/jkw9+iuc/70QxP6bLwM9V33QuXLIz5b5Fg2kLlVL6aBhjUx/IDgQqS31EJHKocpWEx6GuCw1kd+IhMFLPydJlaVhXMW9aakwOZG9an1xoHeNQkNBZQ2iFeHwzFfS3tw8i3ovNW4cUixuarMUkfwFGV9um5zBW6tUmF5k1EWsaUuOBNJn6Q5BUcaXMs2vF2EiMXogai/GOEcn/aoUZ2RDZUUT8CuOqgJ5ydJIOKiPcw4zXsNd9LWfPnuVHfvY3iHGOVC1vCaFF2tdJkSnx/wjU3Ceu7ty6uaCsAzpE4CDrtLsQROnn6rCaRAwkDmjECV0RqUxkUhmWasvSSF4rE8vKUo2zUyajlm/9h3+Xm59/mLPN7zOaBKl4ljHAPYhJQ7FAkRg8vm2kMriTIlkad+oqh7FIwa4Ys8sENyLaERU3Erzhh/7fH5EUo6IWqyn+jrHLqNkppfpAnLUmZYz0KxD25zUlkMdU9IquNEdm2qlQlTG2a1tnZI5CjDnyR4+TBkH9PdDLdbQBjCfGuRAcHkyQbJXQEsKc4Oe07YymndLMt2mabWKcEeMc7+fE2Ip9aDzGBJwJ1BVMRo5xbbHGJx92C6HBhCaVKEuv2GJjA3EOZo6xDc62mDjDGvnd4XEEameoHVQ2Yo3Hms9BlshwiE9Q/Thpwg+8ELv8Qt7xJ3/KaS9l9YmxE1xR/YKykGoMlzp4aZ8oUSmCqgv2aYfpUpdUzy+HEnZPMqeXpj05K24S5yy1q6gri3Oetr3At/+jb+KWFxzm7Ox3GY1arkpClheM4mDyfk7bzDEmEOukSrQei9jDQTtxmVT42GiWxIRDk9fy5JMn+Yv3fgSF79MUFNPR1WOFLrBc06o0jE4/l1bhrksTS6OLwOnHnJbrVrpAdht9F8qA8RZrHge/K+NNdJ2fLyR0WPy0ou4LeixJ7771SdtoBeBJTZWkJSC5zm9VOZnv1F8za1zpZWIkegmEwcyIZgp2hnVzQtwisoWxM7AzIttYO8OYGa5qcFWDdcNE/93H/xRRgmbKkzgh4Gqq674WH8f8+M/+JpVbxcSIp6tzIvo1ELpaqvLggeiluHNoPYTQ18djzHZPuZi7Plh2PusjdkRYbqJuqG1oIaY4jfRTykRUdCXtoW0v879+y9/hptsOcWb+NiIb6kdXg/sKM9b/aSCVdfWEdi72TZXQw6bFh0DlBDUW6RkT0WlkkWPEddRmH//1x34amCQ/nzR8jbElRqkQofOlYYs6h0MEtrQ5je1Ly6GNX/oUy+OHdmNpK5aNW0si3m1dFSgC2QMmBgn4jl60MwLRNxDazh3iA9mjlfqOalaPxfQjcfTvSHKpmEGAfkjRaUgtqrZN+zJio0hPZwImtlmamjjH0mBpMMjvzrRU9nMuKZMfBomC1x70xjjMgduoD72ed//Jn/CRjz2KbVqaxhCbSGy99FaMkXY2xc9nYpCHFlJkfYgtITR436SN5bHO5N9V3dXF7F4d9F8VjmpjkmwOfaLs1GSz46X7LEYIvqsn05ntgRC2+PI3fRlzf5bGPNxxXaOVvz89DK5YoAWp4OClLEY9GoGJNM2cGFLTmGhSwDc5JE4yLRxHFt/AubOX+YVf/k3JkI9BQDZEzQuhiIwK/do1IYSuGesu2RH6DGXNJXWT5BzMAqgrf/ae1XQdlYcgnwTZ1zvAuyzZI6kBkVQeyMwmeKL3NMm3KgdnCCdJuP6uRZ8tdkaHCou8s5Ng1jYPxJhK4LRZaopbJX0/r3sSHMaL2RYbUbWNJ8TmOfeCjs+cKEv1IQZ81IRmJz7BY1+Grdb48Z/5OaIdU7VgvPjipKOyzyUdQoq6UTXBpokLabJ7EjPNekmMZdRIzrjPhaLUwa9I5y4ZJtnY7AgyJlBNbTHNR+yYERhruPb6E1R1hTdnGbZSEBClT5xXIlH1c/mmhXkrkVC1IJdN22SfnvchNSO1OY8wBAPtOuujF/GLv/QrPPXUmQThK/jVL81SEsZw/oY1S9U0UQaXQZ/CIV4ipC7ZkaUE3A1dLxH4GGNaq35Y3ZAxWJK0NKn6RPDEIOlRs+kM34hvNuZoncTwjOlKhySJZxLhhuQbFsLriFHXKvrQe6nUJLFSfTnjcLaSNQna3CcSWiFqE0Xz2cv4n1JfM8iZNrB0sYUqWszCCdyxN/PEp57kzz7yIO14C+/mZJW3QPFKDl4uiH6mo1z8cpF1M1hXOJPS97S8oZ6zLyE7YELt3uRU2WHbDoeQpmGyKFE0U/8kxHAFzVWJ0xU1STPm0R2gnHku+acmBTPrfFV1BdbShqSZOIk99VFq3iybO3Es88//xfdh7ASiRZHdGPsV7MrNX+a5diqnyRzE7qrChh02qzIOlRwlEQ9dWPI3nfRvI77xiagEhRUi1EYGGjavpUBNxhh611ZkuMdYuvsoC62VtaN2zToamDr5M2MyU/r/2nv3qMuyok7wF3vvc+79Hpn1fhdVFEVBIdClgLwUFRRtUVHsnrZ76Rqn22F6Rqdnelb3ml5r1qye6TWuNdNPx0dj69ioKDQvAVFRRFQEBBUQgQZ5FAUNFFRRr6zM/O495+y9Y/6IHfvEOfd+mV9mVdpo58518rvf/e49zx07In4R8Qu7f3sfdVg/e04udth4hD7ldIgpyxicQ/YEd9OL4PZuw0/8+M/g9MFxSRvLY+JvzMLxwiRo3JCSVKTzmF6lFzYVpE2zqJoP5cFRScNqg8OiDVKOt0VP1QoWSIxL9Mr4L2nFgK7KzABLea130uF3uj9giwyX80Q1bT2JqQ+LlsrFIqWIPAzwKDT4KNkpAELTQsqnGNIfo0Umj4EduhiwQ7fiS/fcgzvv/CLADYAGzB4pMpjL6m60t3RDLt4VeQm5FbvEkQdBKvu5CA9BuH04C/9OFJgVcB4JqMXUWj6XktCa5FSYCUqwgeDACeAIUCTELsJnAsUI6nu0yAg5wqUeFNcIHEEs90RwBy4aSMzIea3uFExy0nLABSgbQ0oJXddNEh9USPXvQpA1nQ8ZGSlHpByRcwKpuQqNl3JdrCpAqfP9L04oefIqM0t6oQMo7KC97UeQksc//+c/jkW7rBedS8BVYH5CX9gJNCdWEUG78miywvy96eviJ1ApsHKMRRvQNgH+EB9PwKqEmHskHsBIwrSOhAwpOUupL6ldScyc2qOiaBA0RRiN/bMxin4tmj1oiwfvATdqS+lbEoGUJd3LucIHU7JOXCgldEDTLuDDAkweCQ4tbgPB47WvfzOcW4KzQ06q1+1Pe/1iLjhyJcdUPsWs99wXzTB+X33SnKdhjczqnFG1opSVnlnyQMVEVtegxFyj5KAKaNPDsQAjjUtA7oDcA2kAMFaglJCzgGVuii/M/eH5+zrH+r6vCPS86F5CNhrbFndFGfxsz1T11+Uax2R9nVvMY7Oio4xHWVPqoPq7278BOzd9Pz595514yzs+CPXH5CGOsShtSDtm32zywFowx5okVtBkH0qOND6Qpm3QtM1WE0dAION3JVkFayZIKe+JacxOKjvAZ+78HLquw667HWBfysumJEwVcZ2r0Hodoj21FYT4iSWThyAxQzfy5/hSh5iyHEdrJ4kcHI5h6W7Ae977Xpxe9eI/EU0Kf0GjSTqn+LSm2AiCybBFyMLrOjaV1Xsnm9jLurDqMXTCVw1Ngm7meu8lnp1ZFkEizRwXTSSIcpZQlZZj2fnHox+7ze2ZzyUdVkse6q7M8As77PfmfTTVj1eT+SjjkQkl1f/MG2QyzhjJZ/B1zwG1N+DVr3kj0BzHAEIkV4CUaTNO/dk0hSypOGnjKjgCCnOQQX7C0n2CBLaDI0Jr6DPmMLwdFhSx5rYFKJRC/3P/6fNgBhwfN74pV7Bh4sdiiiqy2IrVnBy7AyudRyEpJpS+GoSUpHdjKM1Vh5RBLqBdClEywYEzYYjCsjYHcoioaGNUzakWiz0HZhQayjFXVoVShNxXK2F+3+z9stX5c2R1PJ+MnDuktEbOA3IS87BWE2VZjOVZpGIFoT5v2adqLtlyVp+XiyZTbTY+E7vob0v3nEx1oq3vW+xj6ntyPZ41iY8yHrmmrIKp2rEgJ6TvOqC9BOGGl+DkyZP41be9B4NrMRCQMFJDWFoF2U9JjN4QHDpcoAqWrWCLCrCeIhFVHpu5Ft429CZb06bve3Rdh6HvsVr1ePObfg0NXYbG3QgFI+ykVDtNBVXNIinELtQmnIv2kmoRJVmWhAEpCnfegbwv4TaG84UoOQhTgXcBTdNOr4tHEjNduWtdYQnvKHrILERYYmqK6amFvHNTsAoUNgG3StlSmN8V0KtgnJu2omgXDcgxYlpjiCtkjki5R84RQ+ylGDsWc541jMHmXovwyeRX8zMV4RXTsu87DENfmC9GjWivaf7c1RWyYx7KsZ/X38VMHTAMPdbrg0khxjYNvG2cd0L6fOilKQjPXNdhEDzaa54NfvD9eOMb3oSv/bpn4ZLlGkhj9YFc2PQCgXLTZgDPIQpu1NllhRwjHQIGgCQIr7QMvY1tHTLsuVg+2xAafPAjd+HhE6dwqX8BwN58B1UzwgS/7QdK7QAYDEpU/BXt6iQnrl2y4zCgDQu0y1bipSDAl+p3znDFh/E+IDQNaMBkPqlAWvBj4x7jMHR6GqLQ+6BWjE5SW+0xfj9Pespom3Kd9AxF1xkxdoCX3Nac+oK4eiAzUhwKQKXOQKn6r4CKCKW2pFOakxDChG9Hn13bthMzc9sz37TAtsdd7eetqZpzLoIo88F2kzvbeMSa0goj6mveEC6EJZobX4yuS3j5z/48dtslQsnKt6sgWBp+Tr4/uXEmZQ+Trx0Cr9jzUPCHalu4bTdqPjntuWTOiCmjjx6vec0bsOtvRetuNHfC3A3ejIvWvxbBFcr9YuKUeK2CX955eJKME0Asina5RGhbuCbAlXZxLgRkiLnZNGFyLuOkG+OvrnSqlmwnQUmptDPPqSwWTPJaBYi5xmlzRvFV3URorb/FLMTY1oxVVoQx9RGVpzezkG7J/ZXidCr+ZMoCvul+9brmpuYc6dRjq5ZSwEX/ZrOalJVOz2/bnLDDVjJZLTkleJPwi/bRuSB0IHUY+5BNPGuc+pLuLRA5oDlL7vjNCJc9Ex/98Idx/z09YneA3C+AuA9EAuUsye0s9O8aLNbJLTdj7GvJVRXqgTXPTTcYP0PMWuekN6R3hLbV5IKpr3PYEGY5gJoWb/71t4Gzw567A0SNBI1J9bNCg3J6ufo7IoAoG7Exb3MGiu8jkH8CQQUCEoRO4huHEOB8A6IAR6HC/UNho6u3gyAhJqAUJjkMCdIjA770ypCeMJkJQ2ZkcoLmwtW/kw9S7AxpO0CuQUwEJo/gW3jfAuTgg5AQq0+/WDTizzuqhdXzJIUYK38MUowSdqFGSNpY2yvIR9TX1lIwFW4r6Jrfa4VRLYW532hNWDXzLZjlnISIxiyuUTiHlCuBQT9ExMyISbOtNKlD2gDa7KmjjHMXyvmOafpTp2SZgjIxnLAwsA9Y3PJ9oHA1/s1P/yLCzj4YDwN0CkQDwGO2yjyzY8rbMlY8jAcfX2/EIwkAZUh1QKkidwyv9ZUzLXuYlgRKCmVu8L73fQC7/lZ4XCpxN5rti8Q41W2KxU7tCjDXxQc5F1BCEGCN/Kd+wFAoPKnm1wqoA4gfGmNCKv6pPCoq3KvKQugKi50IYc5AzvL3ypLBkqes8WPGiHqLr+ngfQsuTThcMbk1NKLAnAqiRcG3mcwaGhPkWQAmch6lUrGQ/BUXxmAJNh1QTed5EN8KwtwPnCOpVgNvC63M54MItABvfQmpDFFylSuQRkcny7LjnIVyBFZHu5E3/iivmYAERiKU2KUD9q5Dc+P34q5PfwZvf+cnEFoHpgPoRK03wvgvelPqrmc+0BnP1/gENNvPeCm8iZRO9q0xN0Lwu/jNt7wdYIc9ugPaiNRYiSVOSnWCgjYn5cbxddMnyoDUTaaSGzwgDR1Wq9OVRhKQ3NjVaiUThUvH5/IgqPT5yFn80iFGDFEoJiU+F9H1XfWBGNLSbYiDCFZwFZmt4SjnanmZPXcFWfReqAkoiDDVJHRr9hEJmEUAgh9Nx0nesHoCQG25CGBD8KzmVNfEvjcXwsM4gXSubMvM0WNp4yoFcNRctaTW2ypvLhzQwwpPTN/bejgCEpe4JAnWxwTQDc+Hf+BP8Au/9Go862k/iuPuJBK3IJeldlBXT0gYQ0rERGNwUZDKmFYFjUb9yEbAbSglqx8HhtQLyIRLKSExVYR2gu5y8USlahfEAR/4wJ9i198qYRAW9chcdHQxGWvBrzqQ5ajbS8gmbxRBKLeQIKYuSGoGe0afMtodRtMukDljvV7BZY+cpJBXD5Ezo+9701JAJk839BOfLDPD5xElRaaSO6sXUM7JAcgkzOXsQA6lakLqakFshEXuR83XLSikBTwkzgnphswOYA8vPosIwHgDa3xS75k1hZm5mq3iuzoQjQCPCpk1oZVdUUEf9fvmvqpdnIUhb5A4LLniLwpVp3NKa+PkrHOWLmVlloopfDShPDdNyTCruNnmo1qTIpDqsyQWjQlyCDd8N+B28AuvfjP2F/sFXRtXMXFDuZTbSJWAluEI5F624ueJv6eaxpzKRMAK3UMxEzVRWPe7XUvKBMwZcOTxqU9+GsMwoMmPAbObABQif9Z8Vu+aMS5j9ue4TT7DqoWKzw4AyKCcQGmA69fgkw8jr04jxw6OIxAHgFN58FxrMLWzcNf36IYeQ4rohwFd3yNlMb36OGDdrTHEYdS4OZWtaICCFpM3VTfFeZSaWm0xR/A+lMoarqbtpM3BoLm9ZSEsyR4ODo1vCqPceJvE9xwm4SmrrTQhQZ+3TSqxmhJA7dmpWtkmxtuMHqs1dVLLIieWxnrdYbXqCmMDqu/pag+U4q8XQOyCCeXMOp14cts+JL5VeXDld21U5S97Inau+y780R//Md75sXull8TMjp+caK1OyNuOunWoKaHIoWbEaHvvqm2rlbkJ/8svYovv7V+Kt/zmW9HQ5Whxg2gem56VEpTgWPe/mddzttOflqHJfRzvNDELU0GK6NYHSKkDISLFHswZKZ/CKn0ej3/8rWg9CmdrxFBatslCJnnHMSfp01Esj8yMWARRf5cKoFwa14g5G0vD2FRMXm3CCghiqwusZvfMzbcRdIGYw8EXIuUpmmrbXqi2tXmq1lSU57jJuGczltRctXFqCW+F+tqm3M2R3drNre8lOcMguTbZ3yZMHFUQ7TgPTSkvtwrk1u+M/qEOAgDn4G9+EZq9J+Gnf+7lGHw73S+PWRd2NZSi29H53naONiQzCuYWBmzW0iXD4Tk5dfmMK/vth4gHH3wQno+BEDZAr9FIHfc/u2pg9PjM+1T/SQ/GKdPbxIxirvcn5yhMbiUFjUvGCyOiCQHD0NciXU65CPT8vnAtZLagiE0bUwR49CNL+xoT450vqPrMLL+vNQk1PukIgrS7MRlBRy4JAdZntVptfh16DGt+zv3Ijee75Xf9vmYUaexxTmKtn1WhtMfT8MqZjnfYOL+QyMx8PYpwVteKqYAjBAp7WNzwYpw6fRqv+JXfhncLHLSMTIxM4n/aduIxjxwupJNTnKUSPlHQBkiRJ3mVOU8FVTdZPZ1oyhKmoDz2GJGzZTgmfOBPPwSAJM/VUG7QuJLMbpC9+LFCA+THn05fS8sCV/4m+bt2oo8+tABJxhRHqTGEZruUww5yLS5rkTCDcgJSqrFgHbU7szERbVlTjEKloZxLcehAxPAkTQs0nz7nbIAo1MlqS5iU6S04h0CM2B0gxh4xx5IJVIS6JMeLFtIECAhA1fVVaLquQ8wJfRzQDX3t7qVYhvYksQt8Ni4H1wdZjSL0aurHAf0gbe2lk4R01bLYg92vrJvyrDWUkku21Lq7QHQgR9aQ88EwJiwXBjMCXfFUtMe+Cu/8g3egR8IirUAUS86qTLGYEkAk+Z/24GalHPMMuZpMU0HMW18757BYLtEEbzS04WeB/L53bA+/+VtvResuw8JdB23Is/VCdaWqylArK6SDsbSZEwY45z2o/JSGqb4mpltfKCutBXQh0NrC8TylWuphAMAzn/F09EMn1R00PTerEepznSHEc43X9x1iKiwGHCvwZuO8+lmb46ngy8TaKaiqFBYnDN1auHSytGDo+676n3OgRdsR2JpIfb1hds6EZyM8wkUb2wIC9S3NgpR51MRN29TieRvftBZATgnDECUZROcgMMZkzzIenYyeI5rNDCASkAgQbjtC7/cQrv9uDEPGK17/djQegJMK8rmJAMyAG4ymhvod845cczN2spUb7Z2rbcmtqcgs7Af9MOCzX/gSVqsOx8NTQKSFvKgr7NwnHc9vfrPG19Z3tD7ktv3Mr3uUs6m51uNuAMCTv+p2IYqqnx0FkosZK0nxIzC2DXm05r6t8piEmoiqRty8/ilgQsWsUI2aUsbQ97UTWN/3WK/X0ruErVlq+sTk8XmLFk9VO+s51w5fs3mybe7YzQr2dEEYQ3PV5TFCWUvZynxRgG00/y9g8kA1n9hsKOYRcLiAqmkA1EB1BEnFyBV3wO8/Gb//e+/AyXQloovIlOvEHWv3pr4DMF/h2QjBTAJ4y0PIY02c815axhmnX0IlQIcWP/vyV+DS9g7s+ScCBcgQSo5ZssJoy9YxAS+weR72c/Y69ad98Nv2Mw430qGQ8W1RNCsVPJwFLKKs2UXT/dgJqMfXfGE1+ScLRBVmyb9lnmpci4iqiZczYRgyYmREsaiRkoBHmoljtS6zWEwqiErPwiXklhKrJwNmGs8DZFqcy1xQ7WXBIzGTs2kRaI+BalLrdVmf3yYuMBipVPd0XVdRYuuHnm2cO/pqBFG3MQmpjLNoTgaQSpZPJsYQFnC3/X2w28P/9aM/iV1/dbm5m22u5yu5vibaPCPWdKJi008EwTSI4dJPExjBAPWjlvuX4fVveDMcX4pd99fQ9Xli2oyg0ggMbdy3ggL6QoW/rSZvG+iwYXrRZi3q6NMTwBGnhk/i0ksvxbXXXAZnAvzEgC9C6R0K3aLcB5j9zRc/G0qYhxum5yxgkIX+rRYFRNi7dS8uRmQMgxBRkws1ng0t0SqbLSDWZPxU/DatanHkaz6vPZ/a6q+QQscs3xcXR1L81useXTdUgRQTU7KdUvFpdV+A5vq6CWik98gqDyIaK4qK5jxb8YOO8zZfbYapba56plFNvjKMjgDvXo32pv8Gd999N37jdz8C59r6ASuY9sLmJl3dm1n57eu5b7FN0LVd22IhLeMfeOBh3HXXZ7CkxyBzW8utRsEs0UWdoGTR1VL/iWLmBF+Lt+fnMLlPNHIOzc95cygARCDKSLzCVVdeAU9A0yj8T6VJL1fGPcJYrb9tMbEaYZ43apFW/dz22J68Vn9P/MQMQOK+uVCaUOlzKW5BMW9LCwBd7CaL8ATOKoLpfCm8loR8665MzdJpKZ76pOv1epKdo9dkn5VN9Zxf47b3NP92tVpNOpadbZyXUNpJZ8Vx8htvbtsVSREechiuey7c8ha84Y1vBNNORcWcc9VkdjPYfJs5uG3buIYNoRgnYds0aJsGl112Jd7yW78DRy123JMgK6U1fc1FVSSOKuGVK23Ka3C8lI6RE4Gbt4Gbtxy3ZvG2a5jfxy59BpkHvOR7XiwJ902LpglYtA2aEBCcR9u0aJsGy3aBRZD3fQFeUCb83CJi5kng3wbYrY+5zR/VAL2acSoUodEi6VzSAYHScacsBFzbks9N/PnktyhojWfzNBnAsiJYXMFqcztfVACteXpU81Mf29zyuCClWwxUyFj9PdAod/NIwJn2Yz/OxLLfsADd8oNYdQ6veM2vY7dtCyDElSJQb0sGagF0NpsK6Yi+AnYBsT5ZhvSwyJyhOf8EqVRpnMdi5zj+/M8/gYauhKN9uclqHpNQdHHJ4HGEGmsbFych8/KuEW2gW9EORFTrKDU2Odfk85/jP/GXxPQQWvyE+0FEuOnG66Tgmbz0bXSMQA47iwWWbYvdxQKXHNvHzmKB1nm03kvFSkzwzAhwQEpI/YCcSohpyBi6Ad26R7fuS9u+QijGCWBloBPCZG3rp/ShlcUBjMwR5DJcUO/CAc7XChVybdWQfdehX3eyn9LyApThgzRs8sGhWTQTYbQLgy2lUiQ15lQzwABMNJhqSashrdl+mHBZi0EreYioMl1omt9RxnmbrwLalNS2+QLCoxActtWSr/JdydBi5CueBH/F8/D7v/8OfPqeA2RlCHO0NfcRjiqAVP4IwJoSmwKp+6ivy/+jGVcaEflQd6k+TK1LKlpRNJ4rFP/6IMfjhSDJ0eRCiSK6iQExuW0o93SL+T3RGObS6q1Gwqn4KQTvceUV+6M2SxFIEaCSlUNUAvYMYikPQ8oIhXeWk+SYchy5TnPK1fQUlvBUz1izmuRcEwoXPgAgllpCBU7UIskcwUggV5jiCICXrK+cCUIyLVqUjVbT8jc170Eo4aOpG6B4wDzWajVXNr60Rfb155G1IlBBnZqlVBLnNXtI63YvDPqq6ClMic857WA67HcrMusccP23gfwefv6XXofdJggdvDPmiTGXRhDEnKYxZabbZi7k5jltN3d1AowttmXzzm+54aLS1T+V+scyeWAFbLQZ5D1jEmO2cNhz2nrTRctfetmlyDFitTqNmPpSoxjLBJdj5JxK2GGA8teQzOwaJqmLQp6ioOpj6j0ewySS8F4FoeTdakaP1V7zzBx774dhqILIzDVmyyUp32bO6Dlqt2lgZBeY037Y+2j9zbkvPNeCc/PZAlzWhK/nSyNYSEVj6uujjnMzX1nXctGQuvFMONUn2Zw8m47m9LvFyT9+A8L1L8Gn77wLH/rYPVJBQA4IHqQcNkVI5FsTidxY8bYJ4eEAkUxvLqbl5KrIJgCozzhe2XiP5B0fGKeGDyHmhwo4wdUEPdTO5+l+NhcIa22MAtzn+zDkU3je1z0Hq4OTGIY1pCZTzHjJ0e2QUo8Ye6TcV7OTMYB5kCodysgsqXsxjpw2Klxz31HP0ZqLzFIqFkuDHU3GkBYA4o9no3W5xkuV0U4o/1Ma4ANV7cslndCZvA0q5rue0zD06Pu+AitWMK22PMxHP+z6JgoAmwJp55DObS1utxlORxmPCsXktsNVq4pn76kbtIETjW9kCsCN3wZa3Iif/tlfRGouQSJJOuCSGwqiYuah0tJPjn+IQNqbPfXf9FrEtM5M0HABgNLnI9XY5rjizpISampfxOnhA3iwfwe+dPpX0Mf7ix2snu8R7uvcp5xt4NH0TvQAAOD2Jz4enCOkWW/hiEkZOQ6IwwpxWCPGDkrIxVyS2fMAT0K/ofSaMUas16sNjWJT8lRbqgZTLcWFnDiXxq05ZXTrDihgUr2XOVfBJAakh6icQ8pjip4ySKhFMR/ad0YIsqJ5PnlDOOeab1t4ai5EVjtq4oPNKposWGUBETdoDAkdVTAfFaF8dIeYomm5g3Dj92C1ivj1330/mnZZpdoZLlHg3H2AjSPSVAC0OgI54qbH3IjEDyOlNXKaxijVTMvG91EtmOlLOBHfh8svvxyRT+D+1VvBHMFTsTq3Ub9Skbb6h1X6DADgumuuqOzdQiIt1SGq9WIU81A1EpHSbEhnLmWC00ZKjNHEtFSTc0FUEjJmrpphnKTTsNP03s8D6wX2hQqhtDYHGE0ToIzkYi6Pi4UVkLkvadFia04DmyRidQ4Y7TeaplSrRDQGqfufg3N1ETMa/YIL5XxaTQ3RjTX9CPubftcR4G74OvjLno03ve51eOBEXxEtAhCcRzANYapW3HL0o9yLiW8A6Tp94sRDuOLKK5BwCkxd3eMcAx01lqZdMU7zB7C/v4dvf/FLcPU114lg5/UZjl82bAd3qllUVGSBkgr4tcaQH8Djb70VfbcuPlZGinmscogJMSUMMSNBOyfHwmhemr8WipUa6ijAEDLXZkwK/jjQRPvYXFXrUzFz9UvH6xh/jkI53guhV5FwkgAn4jKE0MJ2oZYAP0NBOCk29jXsYZ+pDY3Y+7pNWOZmrn5P45l2X3r+9rsW79CxTfgPG+colBbuG1FUnvx+buLIZbcb77NDJo/mth8ENVfh//zRH0ezuKLGKh2k5Ecbm2tcjydpDePG0Carh/mSIyqXkTHkjHXPtZHLctmiaX3xZ8pqTjUII3ehdKfO7h4MuA/P/+YXgJBw7z1fhKMdOFqew73ePgioHZ30mDHfh8QrPO1pX4MTJx/Guo9YrQccHHR4+OQpPHTyFB48eQoPrzo8vFrh9LpDzEBkxrofkDNKewPAuyD3K5O0TScgEODBCI7EDO47ICfpnzlLydPJmDMk6Z4CsiGf0mSLmFOp/mFhjCwbF8qRxXIPzjUIzRKggJQdMgKadhcpe+REQjrdRwAOKQMpE0BBk7OgQNKIjG4CZ9bKEpaGkYBbrYH1er2R+F6fxyxmqia9/uScS3GFav+zj/Mucp6P8zTI6nfnv2UuBsxyD+2tfxcnHz6NV77mN3CJ24PwgI/Ui5MT3HBYaQR/DjFzuWifKpycse57HHRrfM3TvkZ8KHwZu8slFosWPnj4igZrrJHBdBI9PoGH0u/hW771hVjueEjfzW1jw6k+8t1SYUQBelb5kwgh4AlPeALW3YDTByucPHkKJ0+dxumDFU4dHOBgvcbBusOqH3BqtcJBt0Y3DOhSxHrdlcnIAFElYc45lz6fHkSM4Kn4nxF91yHnNPGnbL1hBXWMKah8rKCRQ7ea+1VoqLDjBSR2iOwwZMJ6kEXy5Okep1cRXRQhTCwsfVqUrSp34mLkkXJSnvf0vPTzc7NX6SHnLQ0O8zfta923D5JT7Qq59lHGOXH0yC07f+E711FNuiufCn/JX8Pv/M7v4Htf+HwsW/1E0Y6EaqOe6fzICuhWVBMAJMdytVqj64C+T3jht34b3vqbb8Wly/vhcQxL/1hEZHi3RM5rJF7hdPwzrPKdYES88FtfiJ29Fg8//BAuOd7MjiN30a4NMpe4Lg5nHea7Oa+xSnfhmuuuQhw6xCFiiA4cezgQgpP+JtkRcoHrdQLWglyIG9C2LeAcnG8moSTl1Zn6T4I+JxMeyTmPIFDhj1WQJoSmTuwQfBWKsUVDhCcPR0vhnyVGFyNAhHUkdOsIPiWIqveiNYN3WPgG0vNH853H4yp5lZrmakpbrW795WldJNcsJL2mufBZP9KGiqwPat8/qvl6zsRZG4kC2JxG5w+5zPbLwlcKt4C/6W9h+Nin8bJf+g/4X37k74BXp8AcQAUiz/XI8wmvZzcmrYvJglGQTdxLenEkrNcR63XC6dMrXH/99XjsLTfjrrveV/YkE2Dpb8Q63Q1GhPcOX/Xk23H77bej607h4ORDyNo6r3yLzUo+uV+zB7bpS24fREDKB2Ak3HLL4zAUQiwfmkp1COfhNIYYkyCfpea0EljxgKZpEFNGkxhtyzW+ahFXO/n0b5nzZOLaapAxTJJqQ9gYI1worfVUcJPQiLBjBNei6zv40OCg7wpI5dB3Do6lisRnh3XvsFw0aDjIwpwbZA5A1YLKDSz+pxBNAxmp1mUqfYucL2Ncq2ny026EMUZuKUXmgmuFVu/XUcd5ty2ovuCWOWMF9zABpUP/Pu5UynhJ0vAufTzCVS/EBz/4WvzJR56Lr771KgABzg1AcFKGBEAo18rLmanhDMqqzpmsnjSedBbIPg4ZfRfBOeNLX/ocnvvcZ+Nrn/kMdF2P973vfRj6AQ899EVcefmluObaa/DVX/PVuP++e3H/fXfDaUdnIqzXHQBg1z0FI5cdY7usTVfysw1mRs+fARHwtKc/A/2wwvG9BYgcfGhBKNxGBPjkSzcxwHsnYQgHEDlkZGEl4ITc9QU8meZ/TpMH1MUY4386UdfrNXJmxCFVQY4xIQThwjl9cAAmqgF/OYamtjF6knCDjw4Hq4ycHRw1Ar5xLz1WyGFIAT4FUAQaEDJagLU9OwMcAfQYEYgRmEopIzmJ3zoVrpI/KhErqhvRyDs09l+ZJq5YUMnOOxvzPJc45XkJ5WHgzKM+SMwSLlEfd+03gu57O177mjfg6f/sf0XqHgZ4bBDEzBOhBDATysI1QyWP1hXUNQnil6Ish0QCfAiiGJFjxOc//xlhwk6M2554O5wPuPaaq/DAA/dgGDp89rOfLIBI6V8JAsijW6/LpSxmF2c1o/yu4YOjDuaIg/QxLBYL7O4fw3DQ1eqW0LjRxQZKTeEUcRSBA7SsTYe2bNM6TtUC+l3nqNaashvjcF3XYb1ei+AmWwYnYRLvPeIwgOGqn6dWiiYBZCT0McJzEJ8xAU1wyNkhoy3xaMKQArgHBk7YYcBTkLnCDOeWoBzFnycGCtFzLuVYcyGyWTx2gbEL0hSL2Azr2JpKfU8tg7n/erZxXkJpLL/tY+NvRjvpO4doCgC1p/x04jKwuAp01bfh3i/8B3zwI5/CUx5/TcmqUR5R9SunmRi6NzFPSFBSKGu49C7JKGxqSOMEyVl8tGFATgnE8r3VwWn4EPDZz56EY2lVF4hEKLWtHTmw95I2WK5EIPsRsRvvgfVzRjR52+pK+kUCCD0YPa659nrE2JuuW2J+gtPEv9H4ok6Y8d4UTVHuJbOEGg4OVlgs2hqK0kmqoI7WNWp8cLValYY+DcDjhASktjCEIJNeaxMzwJBu1aLgVFhLiIRJ0MviwzJIkte5gDxdRIyixUJJLw/OwxVSM6IGmkBR59DsZ4yxavS5RrMmqEVp5x6IFUqrLW0Mdh4iOdM49zjlI4FZz7pvAvE01GKoaTB4B77+m+H3bscvveq1YH8ZkFtwlpbd3oWai2pXPyIqqXljpQZRQPCtbGUyK3TtPWF/bxfBE8DCUO4JpeIiI7iIhc9YEGPhHFoiLIPHTtNg0QS03iEEiaNK/WABpFiJlXgmkKPPYsdGoL3eGYCYEfmLSNzhmc96FrqDk2i9hwPVcizHVMi1ZEEY6w2l3bj3DQihxAOF35Z5bIUXI2OICUMhH4ZziDlh3XfCIZsThhTR9T1W6xX6OAiymqXmZkgZKTMyCN2Q0PURmT36PsvxKIApwGvYg0XoYgFu2LRsZxrrJhlAZom7xpzR9wl9TBiSYBAJkibpgiS5236kdl5YtNWao7Z+d/4cdJHZNuZhFz3uvED8bOO8fcpHz3oVrcQsE00vic3/diHgxXG4G16MBz75r/DaN74Z3//ib0HOfbkBDgr52JtjgRzt9qvvC1gBjGmujBAcrrj8UqQU4R1wcHAgvpKnutq3ixaOMXbEcg5EufgiGRmEy6+6Fq9701vQ0CVo6HoBrnIuZFPmDpAisGcQTIPMiqUy4DR/GDs7O3jc427B0B2gbUM5F4+xD8kITgjYYoPYNu4sQysdhEiZsO46hDQ2r1UwKSVhHCTvK4mzXoxyH+XyHDxLAcOQMwgeYKkGIQplNRJzlzmDHSHGjBTGxaqGO8r+cs5CdJwSyDkMMQENwTOjkQ/Js3UOnIpVYbTVPKY6f71NIK12FdqPMV1SP6Na1465tj3KeNT6Uz6Sodpj8p55rYZsScHGcMWT0dz3HLzzXe/EC1/4TbjqmLQjl+wWmsSqAExuir3x9f3J4ic+U9M2uOqqq7Czs4MTJ05gtVoBYInhle9SSa4eqSuiAAzMyHCITDhx4gQu8c8BqK2CxcVvVd0H6ESQ0MjZLRFG5AfR5XvwrDuejVOnTuHY3qIsTGIS5ix8ryOqvC3LhIowjJ8T83aE8Ye+N/4SISVtO+AQGdK0FlNSYz2WPNsiFIraejEtNXyivmUszXGYIIx2rq8PZR77yzkhkXLByuN2ySEWzezKMR05RN5+P+19sBpuHt6wx9fXm+7H9G92fs2Vw1HGX7xQGveSt+nb8nfVXKJB9Y8keKxv4W76XvQf/hB+8t/+LP7FP/uf0R88AMoembR9mTSXsRn6elOsGaGmpJol6rMF5+AXLdpwCXaXiyKUUwEvjqJkevRSfaHJ3O1iD+/6kw+B4LBwjxOTEBnE2/wL8XNVMMfzmj5QvQ+MDHangMx43K23oGmBppWwRBCIWbSjpap0No6HyX4V/FJTTqhDBPBJnGtiQQhenhrl0u7dTYRrBDdSdeKtqc5cSrEgIYo5cjkMQ7ml8jqEZgKSqPkPoKTuMVzxa1PMSI4QfUQgB3ZS48pm7tRzMPd+mybcUBDGlx6FbfKR0eqaAUU2w+crUygP0wAKbpi/E2hispU3gRImyXvXwV31Qnz+82/Chz7+eTz5luMYuh7wADm5LA0gawfhua859QEIBFe7I2sRtncBTdjDznIxPR0qp5NZyHr7DkPsS7J3wu6xK3HXXZ9FQ1ci+EskTaw0KnIsk2XqYkwf2NyMqh8phF8r/jhCCLjtCbfiYHUCIYz1opkzmqZBTiOKym4M2E8shaIB59rAFTYEgiYPSF6panVbLqf3lVnyXlMeSt6smnJcta8WgmsqnCYmDMOAOAzIpeVeSgzvUbW37kfIwKh04GoKhiD8RAyACpm1JtPzGJ0647CLgxW+euuNv6nosn5vm2DbfVrz+Cjjggrl2WIzo//IE4G0f5xgsCzaNVPA4Bjusd8Fd+KD+Nc/9lP4dy/7cXD/ZeSUEMrOVACHYag3xAbE7apHgJSE1aNOb2DwbnLT7UNrFw1yXkILhvu+R88OJ0+dxL5/DJpmBxyT0GQU33F8Plo5rxdtzdltdheQcRLr+Hk845lPx5B7NI0v5MD29vEk4A/n0JdQhwb7yy+g4p+JNkC9dw01gBsTA+RvRpOY4ykiq+Ep20KDWWKj6tODHVIas18qkXLO1rk33y/0mDSyyDnn0BQAJQQP7xg+ENp2CSqNd7vYS7F1L31WVKPr+c6PMd+UwkNN8wnVZ54WWm+e7zRhP+dcaTrPNs4RfeVxY7sd8tHDv122EpfjbV8pn5ibCUxwWbbc7AC3vRQxOvzLf/2T8MvLBGUsRbB98YfsVvdjNIW8gQlyO9+0OUwIkgsagm7SxWmxWGBnd4nd3R3sHzuOD//HjwEAjjdPgncOoX6/mfkkOslNbSZvz7Esp4k1PgVGxvO+4XkgTthZtvBKi1EEGjydxJnHDB5b9ubcFLYPQTXP6DfYBWjCssDbARTvvHnfVU1MRIilzEs3oV/s67VZWszJdReNbvtKag9KoVxZFKKwBgpU5SyJC33Xi2bjkaVCcwSsia/H0Z6VNk7rC3N9fd+NgI4Nqeh1b+PluWCactRcczvOjJmWGzXdHL7Z/M74K5k/0Ph7mSzFWEE+dhP85V+Pj3/8d/HlL38ZVx9n5KEDnEPTBqk6gPSlgPMFbCz8nBAtWXmGSBcCrkrLEmGNvhmP11fTlwggRkqEhWvxuc9/oby9VxKlRdtmMggixioUuVKzQG0BCAgMcI+D9ElcddVVuOz4EowBrZNQjYevAg6g1FWqOVZY3Us/lpqlQ6MZLeafAChRaWFZQBqCvO9CQC2RyozgPOIQ6+/desByZxdDF8FMJc/V1TS3dexBvhEGdFBNQCAfwJknDWPVH6tbkFYP0M/4khBRgCStv1Trh5nBIFBoEXOUFnsFrMrFO3KlmEC6Y2eExkHkTVBgnW9aAEBOOIZi7LGzs1N6rDCQs/DqlgW1MrSXZ7deH162Nx+PWpXIYUOUAVeBtJpS9jlOezP9J0dlmLfJ7oUACqDrvhWMBX7mF16Nxd4+nIfEGGUpr8RM9ipyEYxk/UpiYUdrPULrBPBwGa6YRqHxCIEQgkMIwuOqBEkhyOe9B9qdPXzxi19CwHHk1EomkCkJ4lHyJn7ethS76suUBWHAFxD5FL7jRX8d3eokFoHQOEJwbuqjsrYZKFtlTRgXHpm8MvGEKSCDS68QhlByMCfEoRdPvroFo1ZRv11/1wVNwSOqzVX7Ses4ZpRWgeWZGKvFdlbe2ORAamNNjr+9PGvUvMoHUBkZnQOFkb9Jr8HOXjXZQYL6VnAq5zodNVVwzoBnTdfNfR8+zp/31UqW1XI8ip28tJrAjjP7m5sHPOw9Qtp/DPyNP4BPf+pTeNsf/BnapkFofAmRMLTKc15+M8n8N5ZsNVuCRxMaY86MyezFCiqvqfhmYt4cHHS499570dB1yMmZqv8yIWeVCnLbtpiqBnAQbZWx4k/Be4c77ngydneX2NvfQ9M2kyYzwDhZLbqsfmOMaXZc8fXmJhigplkuJlyYmLp20tlMIUCIoJlHRoAaauC8cc01bENjbw47bJaMZgnZhj4xRmkLP0gZmiRslFnI0/3Y+6wm5jb3Ru+/HtdqbhvusPfLpgvqsPd9fl2HjXMTSh5lYarTRv+ymg1spXb8jgrzyOG6+TlM3j9EeE2xNbsAvua5oMUNeO3r3wxeXoKMHhQAp63tcsaEbW32gHRfRGMxdEUgTbs6kdyy1ZVvPFciwh/84R8BAJZ0a2FUNxprhshtXutUS44MfkDmDl2+BzfddBOWC4+d3SV2dnbQNm3p3KzxRlSNJRO6CB0YKQs/K6cEgrQviMMg+ApL5UTwpTiXAO8IwfvqF+t+BYEcNeSczDjFaQesmmdK03DUPIasE99+ZluitzT1GRCjCONq3eP0qsfpVYdTqw5dTEhMklGUlbZTnrMrLQdDCHClL4wKqJ7LVvTbzhYjmPZaQtPInOQRNa5g2xHHuTMPoCRzqw0wFt9X4GILojMKI7YLNtH8DUw/PDN6q0BCzsWFXbjH/l0crD1++uVvhG8aBJ/hKcFThndlgoVQtdZ4WcWINgI5gcXJlYr40sKuMNpJah4mvqi2N6+nrHq6rlvTBUE1mW0kI6c0o8kEIeFBJD7AHXc8GUM8QNMEaB/LlKRMrCKacQCR0TKFCS5nMUlzishxKK3mE3KMQBbHzxMVrgYGOCN4Kr06AQePFHN5/mNTWWtGxiSxWp79Hdhs3Kq+l17zPHF7IrSwxcsjkDOkjK4fsOp6rLoBpw5WOL3qETNjSBnrPqIfErL2Himhr+ACNNvJakprZlptXsEumkzMybmqWWvDK/r9s0UjdDwin3KUFwVHRqBiHGfReI94UJVRuux2uOu+E+98x7vwB+/5LGid0DivqcxoQrNx8+cP4Gwro66qE1SumrRU0tvMdxxN7pu1JM5kws7NJBDgvIQ0rr76KjRtwM7OEkSEYYgYDHGVWgSYHHd6DDX7dNiFwlZF6MQSzp/RyhiGHgSjIcu+vfeFZ3Y8rgrb3ORTrWiFUo87Ry/lHowayGrPzNIOb4ip+O8ZMWfExIWXaNC7UD4/oqNWi+mztPNjbt5KjFWsCKsN9bxjKcyem/kXTFPy7HXRD1s+N/7b3MMZzNXzkF+yr8iBb3ghwrGn4ude/io82O0BpPSTY9trZaw+TAA3BWZqUk60fRFS1bKLxTH80fvej0B7aMPVG+ba/Djbhl2VxzS+hJPDh0CO8IynPQWLpkEbGjhIBUbK0+C3dx7kXO25aY9pA+XWB9XrsVyvGrbohx5dLxQg+vmJkM3unT2eTbuz12iF0b4PTAXE+nb2mdR9MkxoY6xyUetD/bmxxd3Y2McK5Txrx56b9XutNtd99b2EdaS4nCf7PZspvPH8j/SpOkTQcv0/YyqCXN87u3TNtQWMIM++x3OBLf6bviJIO3Y4OLdEc+13oB8ifvHVbwbQIIABasQEJZqshsBZUOXi/2ryuavfmGW1kIQdMhrce++XAQQQLYBC2KxgU6Wv3vKA5pNQj4+cQTiBLn0Jz37mM6Wxbum82x104AEICKU5ihShBRNkt4Kn5WjTmsIs/KyFDIyREFNfqjASMkk/l8xcOk+7UoUxNT3tcThPfXbrp6nJTDkh9l1J61N013aFGflec44gbPb9qM/RObC0FJOMr1w6hfsG5APgqLZdrwtOjOVIDlkXdR4BJw0bqSCPC5FwSK37AV0/oI8RiYEhJuGW2uJDXjDzVU0UKzrz37Z+64x+4mTvdY9nPgsDEhWYnomqYOLyJ8Efewre9yd/ggdX0uNja54tgLkPszHmX5v5xfaDnBn3PXgCOWcs3c0g+OqzaNC6OpiHjCqU5gAExun8EWQe8De/97tBKSMP0r+iW2vfQypF3LwhhFY75JwRS4dnizzXez/RnFwTycV/poJvUXltT3KqCbJ5rc+zAjvlHogpmCoLulb45Dyah8pKIEkVU+0+meRUH4/8UsrznJMEeDiHIY3Xr7gCM4t2swvsTKAqeGX4Yxml9KsCSKjvWRN9vp+jjPPSlFZmLpSneC5D+5CIYHp0fh+4/nuQssPPv+qNyIvjaJHgMM1HtGaKvY450EM42s0lIvzpBz8MMNDSzaUGkDaE7LDvTswnE1+TLBtZpZumqeEAbd89mtijz8WsrQpGhrn62S2nrwiq1Qje+RGY4bF6Qoq4R/POTsBR8DZLoORvcre1BZ764vIhTPcxuy/T6zDmrJ2TchvGcEcxZ1FCQZkxAkT9UEzdIlzly0TCjic8Rkq8lSf3R7e5aW3JoPX8z3Wce0iEzS+qf/gMm5zx5nYWceb5Ps5+amLwULHsLrsdtP9k/PF73ouHTjIctJMTTwL5gPo9qK+twIpAidmZecpoNteYoWnx9rf/PoCAhq6Wu1Na3anPWWbh5NwtgLSJ/CXAncDJ/k684AXfhL3dEfgQPhzr24l2G1f0cQLaRHTQFp+QNuH90RdTa8KECszn5j4kSJbvarLxqH1yFh5UhjCfp9JR2qG0n3DT85jve5ufD4Zce9GumubnSnF0yg7MXvhiOYC5BXOLlD1i9ugjY0gS60wsmV4xyc8hZTFNS6dnBZPq2lZ92Dy20XC+xILVKNJO0EcT0PNjSJ/5eGeMZpxFqA7/7ubkr9s2wSfVmAwgSoHrtd8OUMAvvPL18L5FikKsqxpGLqVkhpgHPolj1hVUJn3KcZwoBAmnWFCg3HfvffEzXek/Oa7c1vyzebUTxBUMztKWbp0/g5hPo2kbOBfqOS53dmXfTio5lrv72N3bw3JnB94HEco0tq6r52m08HSiT62A6cJENXyRC+xvBVs/z8wV3KrAiMm7VaCIeYyDcoqlu7TEELch4mzOzSZKVC0KjYHyWFhAQGYqXD8eQIOcGzAvZMMCMXsk9oiJMcQsYZSiUbU+M2VGTBl9TPJzEB8ys6R/JgZiZvm9hM/0PTaEXEekff0LKt06k2Ceu3Y/86CyPBGASx8Pv/8U/PH73ocvfN9LsNtMA9ojMjgys+kkrCACjcarAlIjcYA6iQXCySNfnQidwkJGwzibPaNlTzRBacsOQQQ0C8aDB58FEeGtv/U2fPQjH8X3vPg7QAR87M8/gb3dXdxww/VYr9d405t/HqmEZL7mq5+Kpz/tDly615QFyPg4NAomMJr0tvyqCqq+nzPIzBYiN51lPAM31M9iRSKtzyZAjLh6rr6XUhbAhqfZQqMlMw1X2HOWjCcA+txqqAIC/DBJj9AiOBkEHxbIqQGXcrOUgCS14WAQyHmsu74mINjzsQtZMm6CHTFGUAiIg1B4zsNUh40LLpRnlbmt/hnVqW4+ONnhmfdbNEFYwl33XRg++SG88tW/gv/uB78HOXcgnpY5EYQ4MIPNJDIAx+w0J++jTLzMGFKPxz3uFrz//X+GzGt42qkAk1qttfls0cA195dHq1YmoeThHgwfwen4n/D4l34jrnjidfjEL7wTP/mynxGBbgq1RkwgRzh++7U4+OwDyDnj99/9h/i9d7wL/+CHX4orjrcYE7XFytHW5boAWSRTX6ecquYaP+PHmzZ7OjZcQI6R0gBX2jxI0rfcxEkg3ghZ5gTMYpCaopZSAvkwiS2qBs5ZuiejJMU7cshIoqHYIWcqKYIsmgyi4ZxfAPBwFABui2kbiwZ0QM6VfjQlANQgsy+aV9r2hZKgPyZ/EMbeJlnaKTAQGejjBRRK+zzO5vKdSXgOR1nPYH+f1TQ3po9z6C+/Df7q78QHPvAW3Pn1X4/HXL+AwxIlfmC+VUqfSq8LyrK6Ux6lpa6MnCXjpQAa2qWq7zo89zlfi/e9/wNYDZ/DXnvJ9HzUzKtvFDST1TyGACROqhIyP4B7D96JK55zK576A8/Dzn7A477hRnzkDR9C6oDLbrsOw0GHhz//AHzj8ZivfxL6dY+YIh769D342D9/C17z+jfhH//Dl+LUww/U42bOcBhpPOam61idASBHWbBKRg+RaICmaSSsAaDxIsC+0aqNJH1HVDuTtH9nlwptUKp+uhoIjIycJNsIANIwwAXRYN63EH3Ho5CTA7G4Ac57OGV0kCtA8VqRsoPzInDLnR1ZXCIhoQVBCM6YCL7ZAROBKSFmAlOQ/OlGOJrIN0ic4Nhh3Zk6SRbhjBHoB3VxRs3ZDx26TipjVqv+TBO3jnMUStVWdIiGO2RsQ6DO5fvbTqPuc/t+CAQmjxx2wTe8COHEB/Hvf/mV+NF/9o/h1wPWw+liNqrDXr5zaPDEnroFIEQoM0cQWaehZHu4Ouvqd9VnVg2cixmNok0JDNAK93Vvx87jL8dT/+FfR2gdmDIuv+kYnvoDz0b3gJ4vkL+Wq8ZkAjwHXP2Um/HAX38KvvC69+O++x/GTjP6eIcF87WYV80x74OcpxPLIucMFxoMQ9SLEV+u8sKqOVnKxaoAATkP8N4hcq7vyefU5LUmoSDBLpRyLGjaXi4lWqh+ZLlh9dpkTyW2CWGzIzhkeGT4YrpGJHh4knsfi38Ys0PmgJik3CyjAEZBNeyAmD0iO1AUwCqxdDcjV5oMJVmUanfsMg/7QTKMjjLOD+j5Sh8F9AFE6PLuVcCN34d7770fr3ztb6BdENgPspoeYXHYFgLZSGgvCNz8MzmlQo+/CadzTijVtzKROEsLQAecGN6LwT+IW/7uN+KSqy8vh2AgZMAD2Xlwob7wTjalIlHwTYP7QyE91vNVk8/eMDU9dXLLSi85porEKsBjBUjf06D6GIbgKsh6D0PwNZZqM2SsD6m3dJ6EXq8fMwEcIc7RZ+b632RoBk9Fb5lLOp4ITE6EnBukGJBzA/ASObUAL8F5Ac6L8l6DGAkxktCbuhZAA1CDmAjDwBgGYOiBlAg5i8Zu2t0zzLJx/NUUSigwynCU4YiRrngK3LGvwjvf8Qc41TdofRDe0pzLOjwdZ0Ilt30mM2MYEp5w2+Pgvccq/zmIBukAnUunYoEcAA2UE+A8IXiH4KWvZcKXcd/6LTiFT+LmH34Brn3q48pk82CKSHlARqraVVPLhEsnV5Bim41v8zenoYYR5LI+nKCeUm8pFJqirWQBiCi5BCBAiMZIGgqp4M1T1RR1jnGooZbKjJBGbpz6HRY2CAKZfQIAF9YQrigu1HQtIJ/6jYDwAaXMEsoAAHLITFj3A4aYMRTkdUgyFwZOgrgy0JeE9iExIhMyHEK7BHwDuAB2AS608M0C5BuExQ4Wu3toyk8XWkQmwAW0O/8FCmWNkpg5mcslxrBEfOx/C8YOfvRf/Bia5T4SGBEZkXMVSwvHW62mw04cwAomsFjs4Lff9g6klNDne/BQfAsG/hTApwHqAESMaWQJQA9HERkP4CB9GPd0r8WXVr+Clfs8Hvsj34xbXvB0+OBRs21JfbBcTFwxCQgSK4sxYQwokTlnA45kDdobAcCU8lG0WjDaLiE0Xo1leC+J944Ii7YBwAglBOSI4EnKvCxHkGrGpjDUzYPqmafn5b0HZ0ZwUl7lyZVKFYa2qBei6SJ6xc+nslhlFBS1ADsa1khZBDYzcLAe0A0R/ZDRJ0aXEvo0ICHjoF9j1ffohojIjCELby07BxcahGYB51uQa+B8i6bdgfMtdnb2sbNzDM639e8hLOHDAkRH4+g5d6DnTNiMHY92qOMcx8QzLPSNbu96+Mufj7vv/g18+K4HcPM17SReWWOEEy0yaktrcm09Ji3xW7/9O2iv3Ec4toODz3wRXb4bhAaUHBbuZjR0STm/HqfTx4s/NICRQJ5w7Nm34Ma/8Uxce/vj0IRQACURurZtAebSPcuDuJBPs3ZS1nQxwYUn2PVM41cBJYLzYwMfKxRWUPVvox8oJmcIAVQ0WhYHWTSnDyBv6lLL8ZRDR9+3YQJXmg3ZRO5JJUeeMRyY52bPXXOLt1k7k1S5Yr5ySgI6DQngASBG30dwJjgXhPGdBwwxointGgKFoo0dMjtk9oLUEsE3LRhrZHaICWgXO+LT8tF04HmGREyAefKrgUaLw17jBv+ZhFTPTyDzCNz8XwGnPoqf/omX4V/9y/8d6E9Jxy5zjjbTRUct0rWJ7AXvEi6aBX7ljW/DEAc8+Z/8DezfeDUe/uL9+PI7P4oT770T6cQK6+5TWKnf6Qh+V1bOvSfcgMue8Vhc+czbsHfFpWgXi8JmDvHDvED8rnEAs4RA1MhhlqyVScI0Y+g63P+eO7FcLnDt1Zfi5EP3jX0mU67aUyby2MatbRfo+w7L5bKWcCn441wBThTAMPdHU+tUUGOJxSqDW9ME9P1QqCFL2zyi6aJYCLtqR+zSeyXGqaCKtZorrw5KOIVcAy2UYCTkTAXNnTIRzuOggjYDkRUBLgBclu9aAAwQ7MAp1613JUFBzM6BGc5LIkHwLcgxQrMUXqBtfSS3jHMSSuup1DjihuacxhbPjmWe4WCP5Is8DT3IIw2IrQOufzFWn/4J/Ppb/gAv/tZn1oD7Ni24DYwYBVMinJkJ8Dt49x/+EY4/9UZc9thrAedx2c3X4pKbrsHwkmcjDhGn/tO9WN9zAo4IzbEdXH3HLcKOt1wgLBqprEABlimVTCCHTIzoBrQ7GYgB3O2AsivpakUbZDXtAGkektDffwqtk6JkMFUqDiIxBytdIkkyPZErQe44oeJs2xY55VIkTEVYhABZhFpuuFBR5rIQi9ZeLBr0/VDqIkVgPDE4DfBemgPJBB/AHhVJdSXMAnJgRICEvIuK/xu7oZxXRGgarJGQKWHIPTxZ1Lb4nKUCxoJU5KRtEGcleSZw6ZOZEku6ZhQyb1t/6b1HYhZTmAAgI7HW2RJiZoCCkIFRlCgAZzCORgdyjprS+Ck1PLLlY7xpPp3roEekXs3SwbP3CcBVd4DuvgW/87a34zu+6xvg+CHk5AGEiRDqmGvMDU3KwEf//E70fY/HfMMTRZDKfjwRaHeJJmcsv+qxoCcDbdtgsWjRNEK6BQI4Z/RDL6x7JWSgPzMnNDsOvs3oTmakLqPBmBkEsATe1S+GdKRCZlx22aUAQdLuoDw6gpBaHtIQdoWV3Acsl0t479G2bdWuRA5coP8Yh4K0ThMQfPD1fuiQlLjBZO9oeznx/YZhQABqPaJzvsRRg9FyEcyuhpzERE0SkogDGvL1d9GcukmM1J7U1KQV1yAilTCREEHLMdNkIbaado4Myz2wiLSGkUwZnmaPHGGcP+/r5PdRDDTAjMm7rHbeuF3IwTwuGnYU3xJhAbr172OIHj/+46/AzuIykFnFtiGt+r7NixV0EmiXO3jXu98Dv9vi0ifdILJvSYUVp6Hi92CKhFYhz6r5zB1mMc2WOxnkEk4/zMW0ypLXmlJhF4/1WMzAF37/o8gHA/723/pedOuV4a0NtUvzNg5V7z2WyyUA1N+dE+JjhrUkVDOKoMc47eE4Lxy2VohlExgnNZXYnibWA1pXKV2ZZa5p0r3OcQ3dAIxh6OG9hnum81QXMEnxS+M+t8qJCbfMxraUum3gn80btvPmKOMRpNmNhqmaLzWfks3N2C4eF2RoDI3UkTUHlp6URYMzIR+/DnTZ1+FTH/9d3HnPGtcedwh5QE8BjjUJfTo2Ml9YfAryLf7szz6EvSdei/1rL6t+9NSdHlftzDAPierk0ppBIi4gjvhVSMLV2keP9WkGcuF0LT5QykPlxRlOd7j7HR/FF17zPrz0h34QV1y6h5wjAgGaIdeEtqSFsYBHQO0m1jQNQhOwXq9Fuxaz1pXQRE651KdmKB0IUVNMZ4Z3BO8dlsslVt26Cr3uGwB88HDDANGaAJARgsRZNXObcyw/EwgMLoRfwtMqTYAIGY6Ee4iQpU0Dp8LBA6AgsqASX+UBzAEoGtgRlZ6y9QltPO9t2U5WIC1YZT8/SeYHaoPco4xz5ughEmb5Cn+XrJi6lQ+OC+rRRFJDGXU7lxObneOovVkeHLK00QbDEVeWAL75xUBzPX7m3/1/aJe72Imnit+lp374WaiWBBHe/6f/EczANd/2lEIQbNbpCWAkZ5diRNf16Puh0G3EWuqja0lmRk4ZaegwrDqsHkp46IuE7nTG0Ak1xzD0GIYeXTdgfbDC6qFT+MiPvQWfffm78fd+4Ptxy2OugyOHtm3RtA2apkHbtmgXwiRuOYZGpJWRE8O7ADCVHpaC/nrnEftBkr7F4JPnD2mIJL+PJqrGILUCZrlcQljOCc5rpzSpEgmOoOEiggijcwBzKqCPxEVzipVzSYRSwiGaiEFFqJX8S/uLggdwHkCQFoHEDE9yTEfzitnxGStLwbZkBmBKBLaRUGLn5REFEjgfhnSC6SJfTr70kmMWgdLWcqS2lGDg53qo8x6yKpoQOlktKipMMn0uh7vxb+HLd70Mv/bWd+PvfOMTEFIPRjuuCkae5mVKkkTNOCgduVzjxXzEuBaN8U9MVhopUs5Vk9gAfoEXkXJCTgxOCQ9/UYAL2Yn8zCni1H0nsLr3BD7x/74N6dQaVx6/HH/vH/wwrr3qUoBzMUsdcurhnKzsIQRZnIrgaNKA975W5Ks/qdesJFsantDP15IzpzQrHrGkmNmwyjAMpuSqINfIaFrRys4HUCrPSCQNvoRRmDNCEIb39XpVW0aomarmqwpMSrEAVhnTBzm+1oQDvZ5hGLZkOk2Lm3WcyXTVv+s9tZ+zLQzONM4NfSUpMXKQFmR6KoL76YWScObkMSBfznS+s7MebztUtN3UOOSMoSh0lQkFKEk0Wrr62XAP/gl+7Vd/Dd/0rH+KZViBScwbaRWp0lWOO3sIKaXaekD9wXEhIEgmjhx0cslKY2KEvF539VszOJbQQObxO0joT61w9+9+BJ/75feCU8b+/h6uuOZ6/KN/+CNYr06Bc5LJW/qepD7Dh/HctbuwpXi0Y54wIULVTPzD2swnZ7TtEkNKaJq2NumZt8hTAY0FtVVNDUzNwHmsVM3f4MPGudoqEf1bSkmQ2XK8VDhuy90t9zEXZZIBjN3ElIrErqBzfh2b4ldjqLp34yNbahDLoni2cU5C6crpE1wh70WZfEVTQrWEtJKr3Xe37IvOW3uOXtr2MaJd9ria6yLQehG2TGBHyNd/J/Dwh/Fzr34T/tFL/zZW3QNw3Oinql88HrWswJphYk8NEgN0EPJmKe8cfVSrMNm8qu8wTBPawowGBsOBY0J3sMI97/o4vvjmDyI/uMYtN9+MJz7hNrzwBd8Ah4x+fUqS7AkgJBB7IGEikJIWmCd1k1oorZ/p+x4hBPR9X1sJEo08rdpHQz8vYYJxMc45CwqtCQZGmDXkovtW7a0aWnNU9TtN06DrOiBkLHdaOK8mfizlYAzngZykhC0OEZwHgCMcSd8S8pKAjhwRnFStoHDwuqBoqxQVKIGXxExzQZlTiVtOO4HrOVrBtfdF76+Nc55tnFecclLji3HSahvsZDTMEYutH5WxXVQna6T5XScpgy+5BeG678HHPvQK/OEHn4anPfVKYFDTR67a7kXQzySgQzGDABTTKcN5KjG1cqTis1StCL0/AvTY0AYYJYAtZv/q5AH6kyvc/8d34uAz9+HEBz+HeGqN66+9Dt//P/0Qrr7yeAGK1hhj04yxYiVJWZXJzHHkaytwNU1Vo6iJpeVbOefaSlAFbBiUR1XG2MxGtJRv5DP7O8cqoDVqISlmXiwWE+tAgSD92XXdBoIJ2KwqTDVh2ZdoTMvUh/ps5GcuCK+29suTTRscyd99fUZlGYA0z2029muHmvb6t2EYsFgsLiT6aqY+j5Z6KjZ90pX9fJGasw2eCd8U4tSPbDvbzVEdfAe++hvh7nkrXve6N+DpT/vfQMODWzU8FwCmPmTn8LXPuAO//MrX4oE/vBNXP+s2qF9UC5jtedY7pto2CZo6DDh59wPIQ8QX3/YRpHUEp4yH3vcZpFUveaAh4Korr8Tf+aG/icfdcgMOTp+Co1TiYaPrrqCMTKJpwkMuJf8Tzh6gknGp1rJm2JgmN+bEWmEIIRSCYoeUIjxkYvaFIFob9w7DgLZdTExWK5gqjLoY2HZ0eh6aKqdCrp9VE1cXHwVohPd2usioqdw0zYSQWv+eCuudftZaE6O7YQV9+rfNUE8+spYEzlEoq0asQYcSLIWEB8YuSsDUUHuUhtndPNDCKph2NaD5p8RsZgOBcxHMvLuH9pYfwslP/D/4+Vf8Kv6H7/tmdLFDUrAKo9+I8pCHIQLOo2ki/scf/vt42c/9e3zip96GK5//RFz+hBvQtAs45+GbgBxjyVmVA5/68kNYffkEVl94EPe/507kVY9Tn/7y5Bqdc7jmmqtx/e3X4Vte8E24/rprsbfbYOhXACfs7bSIKQryCAFZcsk91fQ5KiVdMSa0iwVS6mt+qa7oAMb0uJosME2B00Y/GkZRrarfO336AIvFEuxEU+Wccfr06fpZBXt2dnYmfq3uW7UogMlPu6hY31R/2rixvW9TtHQEX+ZmpQVg9Fr02Nbf19dTFvW0sS+bWKLCqgvEmdB8O85NKFlibFSACy7mqtQ8cA1cWxPx0RZMMSY3/cqZbz6e8ORDNL4/EUzJloxXPhH+xEvwp+9/Ez7+3Gfgpuv2kCkXZoBN2JwZoMwY+h5PuPU6/PBLfwg/9W9/Bve/61NoL98DecLi2ktw1XNvw8lPfgknPvyFehrDyQ7poKv72t/fxzO/9hnY293Fd7zohZKM7h2O7UreZEwDHBGCy2h3FoI4ckaMHkPfISapsnDFvMzMIO9lIS15rjFlsJJaFS2gmiLGWCek+nSqOfu+rwkFAKqWXCwWxZSVhSCnhMZ7DEVgT68OKjeNJTcmEsFp2xbr9RohBHRdNwk3WHMVGAV4m1BNOIUwTbaXhYXq9dnFZGRYGBPnFVFWIbIaW/YtlJNCizJsnNMosKMGHYZhkrZ4tnGOmnIsCtbVp1TcYZ7jeqGs1wszJMTDPoBu+Cbk+9+Ol7/yNfin/8c/Aa2+ACAcbgZz0bRxwBOf8Bj82I/93/i933sn3vGOd+Pkgw/j9P0HOPnhz0MaAo2L1dPu+Gt47C034/YnPh6Pf/zNUpU/rEFguFHtC2BBAkYQAYEkL1TO2CEEQhuAYZD8yxgLGmiAEp0oqj2CD+iGdQ2B2FibrvZWC45t7jCZhDpGU3D0XXM5pgr4er02gjPttWHNWZ24alpazWg1kAJFIQSsVqut4YYqBOZ0rS8NjCGP+XXN6T713oi/Pm0EtO2n3u95ds9RxvkLZfld/j1KAnmmL54PUHvEQQDaJBBWXl4Od9W34L67X48Pf/RO3PHYXeFuqedWwh42hAEGmBD7DvAez3/+s/AdL/pmOJYcz49+7BO49Zabsb+zLJSQhJx7DGkQVDSvkTPgiOFZrQudUAznaXKu4JJM7ZxkH1ED7xiJPdZ19R5v5zwFLJU4op2ItkRKJ70KlGbitG2LruvrhLUAkXcBas7lnAFfWOkK0fEcqcwpwRdBUk1k/TtruloBsvuwWml+DdZn9K6Z7MNqLNWG8wVsDjDZz2uqniwm2yftHKG15vnZxjll9GRIV+Ta7YEUj330Bx2yPdJRJ+rkWITkHZJ3YOeBG78N/tgT8dpXvgq7O1ehbdpDYkxjQF/S+BguZwRmxNUpxPVJ8HAaT3r89Wj9gL4/iW79MNarE+jXB0CKUF5D4gxfrOpqoqs5RlQ3bfMNjH4jyANOgvg7yxaLRYNF0whNyCzjxDavtSihlmotFos6KVX7aEhkUqzcNIAjuCagi4P4ko5qyVbsOngCUhyECycOaEPA+uCg9L9MJeNmFBa5JkFGvZdKj7YNSGkwiKmgGinFmqIHGFb4bQUDGIXDAlDbhoZv9Jzs/Rv3Kb1NnJNzksVINiX+0mMCIzp91DjlOTMPmDW8/j4ZVCZW3WjrhtmqcTbhG6kvyM7ccx4CtBjNU1+X5C0i8GIPzbUvxomHTuCVv/rbCO3yLP6AaCZHgCdtF8OQSoWEaeVCgpYUSY/IVHI+7QRC8btk0/pCfaayUo+mkQUkiAhtSamzftjcXLMF2+pbLZfLKnCWFkSOOQpqDYmY7/ZDPwGKbA3i6E+JlvHGrLUopqTg+aqNLNo6T2ZQci4N9vNMuKsVYKyauaBu056T8IpJqrf3V4Q/ImdhktAaUGAz8cAmQkx6op5h/JWiAznSoO15jkAR/JIiQZd/NRZXvADvfOe78eUTAkKA9VPYXJ02xmb1u91UCCfvjSdSH+a8mkQuYZwcNgtG+WqoLFqLxaIG5y16yHlctUMINWZoNeIcTQQkoaD6iUA9vt1nDZfkjHbRIjRNbcencUhr9uply3X6mokzB0as9rP+sU0FVE2oGjOlJP43jYvYPExhrYZ5KEPvzzx0Y5+FgkPzz9jPArhw5qudhRsT6S/BOLpidcihRbjhuzHEFv/23/08dvYugR8YlCRLp/a+mAgp1+NYz3BzEzuVLQpsLQk9XyOYACYTSn0w1UquVGfEOMA7gjLjLReS+9oED0dA8CMRtU6mxWJRf9dnatPw9Dha82jT2lTAMudaFtYuWoRWYpdNK/Wi43k69H2HpgnoujW8dxj6Xlq3Fx5ZLucO5hrrDX7sDyLJVMILlFOePFeL3uoiIF8RM9d7V2OxNg6p56cCrffflmlZwWuaBovFovY6tc9KQVB7Ttv808Nn33mMv1TCaG3pjT8dLqaZGOnYlQjXfDs+97kv4EOf/LykZkXAZVZ9WhLzJRbEucSMVBHySE5hNy6azAUvxFhuBBfUhNPax5pAPjOlVCMNw1C0z1CzjASEKIF8R2iDx7H9PSwXLZaLFrs7O2jbFru7u3VS6kquwrhYLOqE1E5SOkkV5NGwATNj0S6qRnTeY7HTIuYIFxz62ANEWK/X9ZEAjBgHOALi0CN4hzgMYvZnLbVSvh8pG2t8EIDIla5fXEI75CZKwgqAmsLSAMj0GcFYL2qHrQix8VDrT29DZec5vvZ7dU4dMaPnr7z5SjDmxhlMVx0MSEK9YyRH8Dd9K/zOrfjpl/0scOwSeBJ/inhT887NU9Ydzj+Xx5XXCp1MkrH42NYi6opsV3mdUPqTOWOxaM1kGLVeCAHHjh3D/v4+jl9yHMvlEnt7e1VLaChDkVYiql2cVQgB1GoKjSuq+arnoNqpXSzA5dzW6zVgfMO+7+t3Ndd1DLCbZ2eESxeAMbtIJn7XdfXe6/lZzTQ/R85jDale98i9kyZCarWf3tN5W3ZrLViT37kxtCSYwwXWlP85xhn9s8OGMQe34UL2+2JW0uQ1EyGHXTSP/++Rkse/+alXYOfYPgAJRWiDm63nBUOBmM3GomWtvzj3G1Uwrd+nZqaN6elP51z1HfU9DWsI8NNWdgH9XSfYYikabn9/vx5LNaKyE0gZ1zARAnscIqpMC+pzNj6ACzmWdx6hCTXtTQUXGIu7VTBE29tEg5G4a/7sLKIKFHfCjYn11k+cp+pZDTYBIDG1oFTA5r9b4CZnW93CaNtQqF4IzBECcDHAR0u1+0sjlOczjupDTv09EV8xTAMYAbz3GITLvx6fuvNO3PVQBMHD54REQoxcyZVhW+ht7BhgwHEJb0AKhBeNtAZwpaA35whNU7O+jDXNgDFMoUKkmqP2+QBXc1K+I+fXNJIT27QeoIzjx/fRtB67e8tagREah5QHLHda+EDwwZXcVpRQhAj03t7eiJbSuLAgMyg7cAQce3jnC4vdSAOimkcTz0c02cO5UBjsPLqum+Stqgms90I0EIAs7oO1YFQQrcazGksXOPs3PT+gMDWQFBiExkFbzzMyUhpE4FgKtb0D2sZjuWgQPBAcsLNoQcgITnz5JlygkMhfinEGP/KwYWXH7AgMh+w9/PXfDtASr3rVa9HsXAKXHVwm05wn1z1pCpfsYbo55xCKJtTfm2bsOWlheitoFmkFRlDGrvpTvzRAsohcFSJrTi0WDRTOD0H8z52dBZwDdneX8J6ws7MogEkQsmXnsLu7W/l8cgnQC2CFSfUI54xW/8ajf7ZarTZKxFS72RzYruuqNponz9dj1Guf5p7q/VFhnmhCwsa+5iGQzf1vDl8qgWKU4vEQHEJw8F6ZFVAbNTWtR9M47B+7AAzpf4ngnUdljP4lEC+5Bc0V34g7P/lJfP7+0wi8j924gOexBMyutNsSpa2vaAVFv6OClgqpkzXtLImwTmLLx8rMVVhCaNAU5vLlclmEsanmoPqq1kyNcagorPqgIQTs7CzRNAHHjh9D04qZ6xxhuVwg1u9GBC8MAlYogKI1y8JiBeHkyZP1uoFRoNW/tH7nPPSj/q4uMtanVRPf+nj6PYteWy1q/UMd9vM2BKPnzOVZeO8rzYqei9CeuKIXCItFi+VyURIizj7OPXngKx15na+m2KYBsfGZw75T/0YO/tYfgF9cj3/1Y/8a+fhlSK4DSD1R9RFH7VT3Z8xQ9f/0AeacpdNy6fYLBvpunJCKfNpyJTvh1CS0oI/3DotWKE00tOAIaJtQCai69RqLtgHnhLZtSn8QMcVyimibAO8cLrv0EgTvceUVl2N3Z4n9/V0QGE2QfODFYlF9aBUgTaNzAPquA7HwErWhqZNZHtVYo6kTXKpvBmHoKwivNTl1IWmaZpKZo4ZRSkXjphHBFU5cktCLEw0PHq0XaZDkyzUJkh68l9YLTvYVfCikYSTXkKSniieHncUSTQhofBByNk7wDuCUsGgC2iYIJ5Cbzs3DxrkJZZmhc8f4K2aQZvpsN11V8823bfl80qtQ9lfCv4jNDsL134mDgxV+873vwXqRkAm1xTkAeO+qllGNOPdl5FTHoHLWRqcpIw6iERVQUfNuDrnbomSNyamPOQwDOGc0wZcW7ST0IN5j6Hs0ISDFoabu5RghjHG5xAszdpbLEtuUfiFNCDXO2YSAneUSu8udGuyfxAWJMPQDwIy+6+BASEOUrmBDrIuJalmrjRQ9tbmw0/CGMwDLaOK3bQPl6smF/iMOEd4J4ppiBGcuwkpVUJ1y4IaA4APapoEjh0W7KM2FRsEloH7fO4fgPNqmEeElVwm4JPtP73sU7t8S6jnK+CvoU45o6yPczWyI3vTXPg+Ly5+NN7z+dTgxXAouAuf9ZmbHJCFgZibNM0csjG8nqx3zYLeaolZjWsEcfc1pRou+r0kBWhm/Xq+rCathg8WirWtc2zZo2wb7x/ZqokBKCbu7uwg+YHd3t2qxlJIUg2fxt4dBmPvITQuNd3d3J9QjuujUipYS/rGBfRv/0+JptSxG6hKa7EtDF9YsnTzusjBoUoAFgSzQpNqceTTzNzOghEJEUduUBLw7qg47b6E8a5bZWXfAZ94eya7NuW2YoWc48ennau5NGUXU/Q6WN70YKQOvetUbsFjsVTZspdjUUIgDhOqQplk6CkwAmNT3AQKQ5EKXMafpsJPZgiIqSGrSjcdRLUM1I8cKgZqOzrnqE1kNP4ZoxFyWcxqwv78LRsLOzgLICcf2dhE8ofFUkMYpk9tkwfEeHtKZyzEQyIFLUn4ytCM2k0hjojbTZi5c1py3oRIlZ65AGqyfOX3+RFRDNs7J+XmQdPVmeZZIGYGk7d+iaasJK8993MBCYUnM4JQRhwHNEdnszjnNbsNkpU3r7+h72/7vXMamCW2T2TaS2w4/F/NR27cePLIX1L0cexyay5+Dj/7Hj+ChhxmgXMy7CJczXEqgGEE5wXGGY+Ey3Vm2cE4mg50otqC2LZopODcR7DYEeOODaUWHAjwqoApyyDEihHMmYtE0QM5ovEcahvrTE2GIfaX8JyelYoxUSJ577O4tAcpYLlvZ16IBUcYlx/exbAOWbUDsVwieAR7gSy8T5aUZhli1ifceKLFbThnBOeQYgZyQh6HGcG3qHzDGT3URsUniNgapmlGRUAkvSUWJK8n9oFxCHFxIuErLg/Izpl7qWC2XbE6gnOEFj8ei8cInm+Q552EAcUaOPULhsiVm5Cj7ccxwfAHM1+3BehN+0BXokO0cjnTWT2z4tPr6PJTshjac/dVq0AGENTya2/4e3M4T8S9/4mXIzZXlfCA9FLM8rBR7pDQU4ZD7p2alNWP7vq8pc+rfzE0vZkZbtKeWWdkyI2AsNtZKdxXcWJBNm66nyQSSxRMmWkmzgnZ3dytfa4wDmtYLaxxHNG1AjD1Q+lUSSXhgsWjgPWFvb9eAU2mCYMaYJr4heMzU8W4Mg+h5ykfG2OI8fU3/rp8JYURWVeMruKZk0Fp+pfFb7wnalh2lqzYgzzIQ6gIbHCEQoWn8uOhxFGY9yqXMrDDrkZ63mPAXJKOHi1o+V212rkMOc+7HqNPzAp2eZPkAzBGp3cfisd+HL993Ar/4y6+HdwvANRU4Kreq8Bbxhhlai4PnJT00Ljia8lar/zGmsakW0kJeNWtt+ZRO1FDMsWEY0HXdBqtA27RYrVYTgba5rfOk7JQSgh8zdDSmqGlzulCorweMqKksNGOox5I0T+71TAFYZgHrW1eWvoKmjqCNgDD2ddu0WDStADckCHETAhZNK6alQWSZR64jGw5RU38edtF0RBtntsNmLZ1tnFc9pfz8zxca2aZ1LxwOPNX18krib7jsSVhe+yL88Xvfgw9/+m4wemQCIhgcHNgD7Fg4WJ20orMNZsQdQBVMQVLHia8ZM7riD8Mw5pYak1VjfDopvPdV+67XaywMF47+VIFKKcEHbzRinPy0pVY271WqPMaUO10kapqbG4uhbdobAKCAJDqxbSxW/M4pH48FbfT9mpZXEtSDc1g2LQI5DOsOgRwCeQTyWDYtPBxaHxCcRyg+oGNC4zy61UoyrRh14yS+vS4s1Vopi45d/Gzu7hxQs0J6QTQl9OTO6UuP7qDZ/yokuqpduKPq5pARIG3zAtprvx5gj19+5esAv0RixqpU4pMXzeqCA4NL5o4IphASewxDj+VyUSew9Q2VnNg+YH24GlxXxFIniAq3rX1MJT1td3d3AoIQyUJhuXDmhc5KbtU0DQ4ODozZKVk3bdui73vs7OwUAWOsVivkEmMVs5UnkxXAxIQHRsALJGElfZaqXS2qOuHUIQlrBOeBxEWoCJSBQITWBzROwCUk6SnjQWhcgLiRDA9XvsdjG8ss4MxoEoeaFNA0ErNUi0PjpQqm2UJpYFwsjyqU50bGfOousLQ+Oj/NxNNfDu/HNfPtDj3Y+AcGil95pgsnQ1h85v3pTnnjb2UScYGS+DT88jrcd9+XcO/JHezzadF4GE0r76U8y5pputqquUg0Vj+kNBIS7+7uTpBHuzpbk3i9XmNvbw8HBwc4fvx4FaC5MACoWUDr9boGxY8dO4ZTp05hd3e3mqPDMGB/fx+nTp2qE2+xWODg4ADANGFhzDBSf9DWJEa01Nb7ofFIa4JW04/lOaqloLSUmiNrM5jskxljj8CiFVQ0DlxNWk0i8K5Fn6V+U1FxAgorvYBPycRObQVPrabhjJRTfXY2xqrPSBfXMdF+0w8+bJxb24K7fxG4+1y+MR2Pth77i9LYRw3/vOmNb8Z//b3Pw3K5wGq1QrvYrPrXh6WrrCaNW43EOU5MtrZtcXBwMBHCYRiwXC6rAFntpxrOhlDaVvzG5XJZBbrrutKyboVLdi6pqOepU6ewv7+Phx9+uFJLWuJiG5axYIruE8DEf9JQjWpfu0hYq4CIMMSIdrmY8M/az6mZqyEjPR9tkWCv34ZL1DdWwVDzXr8PoJBFt3WB0ea5+pyqdREFpbb3Xc/RlnHpYmqv4SiD+Cs+b+7iuDj+yxp/BTN6Lo6L4y/3uCiUF8fF8RU2LgrlxXFxfIWNi0J5cVwcX2HjolBeHBfHV9i4KJQXx8XxFTYuCuXFcXF8hY2LQnlxXBxfYeOiUF4cF8dX2Pj/AaXAyWmxJOHjAAAAAElFTkSuQmCC\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"sav_dataset.visualize_annotation(\\n\",\n    \"    frames, manual_annot, auto_annot, \\n\",\n    \"    annotated_frame_id=0,\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Show the SA-V annotations in another frame - auto + manual\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAOUAAAGFCAYAAAACSjT4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9WY9taZrfh/3eaQ17iL1jPPOQY2WN3V3Vc7PZMilalCFSMG0IhnnhC1/4AxiGP4D9DWzAgGBfCbAsyQJtQ2TTFAdLFMmmmsXuqq4p5zx5xjgx7XEN7+iLd+04J5vNdjWRhPsiVyIyq86J2LH3Wu8z/Z//839ESinx1fXV9dX15+aS//9+A19dX11fXV+8vjLKr66vrj9n11dG+dX11fXn7PrKKL+6vrr+nF1fGeVX11fXn7PrK6P86vrq+nN2fWWUX11fXX/Orq+M8qvrq+vP2aV/3m+8d/s+QghSSCipiSFhvSM6S11W/MIvfI/J8Q2CgXJUIoGUEljLhz/9ET/76Y/QQqKkQBtN8JEkJFIaxO6XDDQGmSDFSAielBJSSqSUr75FAEL8K+8REoKEePVSJARCiPwzSb36zpQQQiClRCmDFDJ/33BJJUFCSh4lNFLmv1dKIYRAICFJiILgAyEEEhEhBFqWFLqiNAVKK6SQpCSIMeB9QAiFEBqjKoyp0NogpUIkTURDAusb1s1TQlyDTDjv6L3Dx0AgkUgIAUIkUgpAYHcjhRBIJErk95pkuv670hiqsgQUKaZ8j4kopZBKkQRfuA+7+0QCJQtIAqIkpYALW6xtCT4gdMV/8D/5m3zre3+J//Q/+3t8/w++z7vv3uF/+j/+n/Nf/Kf/Lz54/wMePrjFr3zvDd59e5/f/dv/OVcXF8QYWa/XbLdbvE+QBDFKiqJiNp9TlAZEz9XVJSnAzaObjEYTvHdcXS3Ytg2j6YSqqlBao4SA4Ik+EimwUeLFIW8+/A95841f44c/+zs8Pf1HIBak1IESyJSQw30jAS4wEopxUTIuCrTWFKUiEUHAy/PntK7B+RZrLTEkRFToFBExIlXP/mzCbFJjVMnNk9vMZjMA/nf/5//y/6et/dxG+erYJ2KMpAQxRmJKryzgz3KJ4VARX/szEAlyAP83JxqlxLXhZgPK/00pHzYhBFLJa0MTw+EthgewM+JEJCafD2JiMGCVvweJQCFRpBBxzuGcJcaIGj5Xb1tiFxBCIoXKnyiBlAalBEkFEAGEvP78+c0nYughSYQoEARIAUF2IjFFSNn5iJQgJdKf5KO+cFOA175HCBBSIoTBB0sIId8vld+LlJIU87ORCaSQ+cALBVIRQkKh0MaAEMQkkbJgcdXz2afn7E0P+M2/8B3q8Yrf/p13uHNXsT+b8/L0MV97+4i6GCHmAakUR0dHWGtpmp71akvb9FjruTg7QxuFKcFZB0mwXC1xztJ1HdvtliQEvu8JSgEJFwLedkTnEWqMixWmGHHr+D5XF8+5OH2E8B1CBkAgID+vlD9rigliwDlHay2mrigmE2SURAIhOubjGtN6Yglmb0JpKoqiRkvJwWzO/kHJfG/KqCqpyxHT6Rxr+5/7/P6ZjXL3gGOM2Thj/JOD1p92id35CF+IeK8iZj6Y119/1tcHEhIpJKbQaKUQSZDCq0i5i5JCSqSSGGOuo8XwEUFEQhSk8CpiiNcMXab8UIXMP59SxFpHApTOBuy9x1mHvY76AgXEwelEAiVFzgREjvPReXrb5k8hCoQIiGSRSBIJhSAgskH+SZ89JdJ1NBXZ0e0cXto5Q5GNEhDC4LzLz1IKGFxOIhFTunZqpMGYgSQESiqSLggJUsgG++TZU7q+oygLDg+OUKLnnbePefPhAdut5Z+cfkrXbBFJIGIkpUiIAYDRqEKg0apju23Yrte4vs8RlOwkzy7PMErm350SKSZ82+GaFlkYOtvifY93liQMMc75zrd+i9m05qOP/yF991MQV8iQ74s0gkImFDnQCCGoJmPGumBalxztzdnfn3F4eEBdlZSFpq4U2iTm8ymT8RhjCpQygKQoC4TsUVISY6TdtlxdXvH89AnT6eTnOrv/RkYZUySEQIzZW+9Suj/xEpKiqhBCDoclGwsqEVMkkj3W9bcP6VMS6Y9F0/xgxGv//te8u/zXEqSWaC3QSiBRoIrXfo+4NkwpX6WiCXK0SAkhFJJIFPH686WUCCGglWKXJ+fXAkikweMqrTHGYAoDEmLfQ0pIBUpFINL5DaELgwFLhBxeMiZEFEhVobRBoNDS4KPPzkCIfIAQX8gn0h+Lhtef9U98Lq+yBqM1Aq4jsBQxp9xCkP7Y88l+IBtTTLvPm4YMQHN6djU4a4MxIyBitMZIgXc9MQrWyyXLxSXLy5f4GLDO4mMAoZCiIkRBDAElJcE6YookEqSI9z3BpexoB+foW4dtG1RRokuVH7+Eqs5p8NtvneD9E+r6Oe+8VTIZ3eVgcofD/WOMgkmp2Ks0dV1T1TX1eMS4qim0pFAG7x1KClLw9F1DdA3Rd4Rmy6bZYH1gvW1ISSKUQgiPVIrClOyNS+hX+MsnkOZ/yrl9df2bRUqGbEiAlApjzL/eKKWgKEoEcnjAORVCJuJ14ZdIu0Off2Soz3bRKUfM18+c+BOPWnrt3zktTMRcZQ5GuLteN0iBgCRJUVy/rhACYmRneWKIlClBChFEHNLOVxF9d0ATOeIICdZZXOjQRa5HlVIoqYgx+wFZ5PosiZhvaMrOCKEJ3uJDQAkIMV0bohBiqIFfferh2OaacFdb5/wWiPkvGKLmEDGvi2+RUEO6GoIjBgEp5nsRE0JEJBFiwHuf62MCIVlCdMSQf3dVlmy3C7wPKKlJwRB8RJUVkYSzlsuLDeubK16+fM7l6Yv8kXO1ho8RXZRIadBSIEVCS5s/W8rPoNSSoiwpyzLXetpQ6oKbN25wdHjE8fEx48mY+cGMotKU5ZybN7+DC4a/9BenkF4wKjS1PiT4RJEE2JZ+s8Q7h4+R9uKSq5TQRtE0Ldttk7Ogvmc8rlHJUlWK7fqSy8UCWRSMpnscHBxS1qN81gCtJUa0jFTL3tGUwvx8uOrPbZSvD5PkQ5EPtZH5sMEOKPnX1IJDypRSGl4rJ0jEXU2ZBlAm/7/steMQGV5FpfyT1z/yx36HGF43/x6SJCU5nMnBsHgV8dIuibw+yJKUIinKDKAMxiZSTvO00iilcC4QfAQVkcNnjkMqlo0zkFL2/tY3xNRjTEFZDLVkguQjKiW0EIDJNXqKiKQw2iCFIQawzmGdpbN9jqRSoIe0O5IdQ0qCEEV2FDvzFEBOcof6c3hmJDLuk4bMIF6nuRlgy7+DEAcnKAjB4V3A6BJnHSlJoog43xGiIwmJMCUIaJoN3luabceL5wvefesYpUqc7WiHmjHFQAoWmQKVMpiiQBUGrTV1XTKZjLh18wajqqYqS4qioNAF8/mccT1iVI6o6zoHA7LTL7Qixlw+SCEzcEMghUjz5A/ZOouPPYWJdEDyT0ghEa0neU+KEWcdIQVSgsl4TNv3fOvbv8Bs/4Af/tEP+eD5B6zWGz795APeeesBL1485snTZ7z93nuobc/7nz4GoYjBI1PiV3/xW8yPFWO3YKQuwbqfy9b+zEYpYKglIgQoCkVRViBKUlII6RAiR6e4M7ZceBFTrr+QBiEVKjl24XLAUiAFlFSUyiDSDljKhpxEyB7zX/su5fAlXhlgghQzAilEvE6jSSkbLPI6Jc6vPRjrYK27FAkSQmSkVghN33eEEBBSXsfnnd+SMiOtzvaE0GIKSVFIlHrldKRgAE5eOSqBoKoqJvUUJTWg8ut4y7bdgkhICcFbXLD0tiNJQRwMOkfKwZGIHB1TGurfjBejEDnI80VHm0RCCoUpNdPJeKiHLTGBUpKyrOk6z9nZBTEGUgw5oxGSJBW6KIbaSmKtpWssjz57xrtv3sb7hLWR7bqjb3ukSPxHf+NvoHrHtB6xN92jLEuUBCUSSkZGkxGFNsQY8b0lpEjMeBeEROodzWKJ94GmbQnBM5lOqeqalECmyOXZKcF77r71kOXlC9bbLTePTxjv7eFcT0wJoxVBKtrG0tiGp0+fIQUcHh3xxttv8//++3+Pq6tljuQpoAvDB5894vHpc7yzrLcblv5n2BBYbTcUZYkSmllV81d+/VeZxoZqe8Zo8wgZ7M9laz+3UUY3wOZDdDRouugoCsVsb0ZhpvlDFnpIU4fDKlI+gTIDKEoXIBRG6mwQOv+VkBk8SiGgo0YJiVEGIRPOe3rn8N4TkifGHBH+1WopAuqLSGPKtSsxkoxHCHldiUk51MJCQFI5ghHY1aViMHB4HeTJh7QoDN45QvQIIQbHMdRXQgxAmENJSWkUWg1peMpePA6GIxADmJIRz9IYpJaIAcjQRqLKAj2SxBjAJrzX+KAhQu+y95UJknhVoV9npvmOoASAIISA7TuIQ3ZDdnwpBpAJYzRr75hMJlR1lZ+31iitqUxBZQwpCVxw+NgjlWQ0mVJPD6jKkuPjIxAeVQg+/vhD/uJf+A4SDULw9PkTlIKqHPGNd+5xYEq6zZZu24AHKROSQG+3rDab3F7SBiFgtj/nfH3F08cvSB729/c5e3lKWZRYZ3n/w/f5xi98h7eO36W3PcE6ZFnye3/wfS7dFj0d0cXE47NzPn78hPPTM6KPaCFJShETeO/ZbLf4YHlnPGK6XvPjD9/n8ePH7O3NmB8eMNufM9nfp2u2rJqWoprw9OUlUms65yiTZDSaUO8dMZ3sU3UNo0XPuA3IAdD60oxyZ19FktRJIaXC+w0qJcajGm0Ezjt0VBkAGFoSRgq01iilCRGk0AhU7usogVICpaCUkpg8QQzwOwoRcnarlEYLRY+jDxKPI/wJNpkRQvHan+8QxmzEMSaUEEiZiDF/k1IDsBQhpNwbFSqbI2JX7ezAnAQi5ggjcl0ZUxh6kPn3SSEQKeBDQilQMqGVIESPkrmVIkVAEvDWEXa1nVQUQqNjBO+zs5IQvafrG7bbdc4DokApybgqkYUAH3AxEVIiiYhmuAc7oxQgB0BOqlz/KyHRQqNURn21kmitkEpQFoa6LqmKAmUMk/GEUV0hBGhdIJVBakXvLM53CCXZdpaoR5SloR4VmCK3fZ6/eMHHnz7la+++xenLc37ykw+pihqs4KOffsREJE7254yrGqkkznu883gf+eD9D+is5dd+49d5eX7O0vW8ODvnfLlAiQJXGB6dnVKVBQl4uVmx+MEf8PHZGQAH+/uc3DjiPHiax0+YzGYIDA/feJPN9ozz1hFcQAaICLQp6axl21gWqyWzW5b20RM+v7xkmxKx7/CrNUd37mDqEZtti5Al3kPfRYpKIWNFIcZ0a0d1p0aScJfnuLNzun5FCo7Zl2mUWmkKoRgJw56s0ErSsyFYTyLQNBes+p46jNGlRhmF0gqtFVopjg6PuLq4QEuJRKClQgswQmCEYKQERVnTbJuc5iZIKeQ+6K6elIKYdEZ/d2jna+8xDcazy8qyAWiUdDmBCwVEmY0tgUCjZIXWmpQMIQZ6tkT8kAaGnAKKIbalHMljDMTg839jyCBMFLmvFz1JCIJPGZVODBEyIpVGxJgDerAQHaRISKB0CTEQ+g6RIhqD0pIYOoRrKJOjkJqqVpRFgSny8xiXU5CKsqwwJiGHFLia1JR1hTYGJTXbpsUnQQiJwhSIlFBCoZVGG4VE4FxPCh5SQmuJFIK+t6yuFjC0S3pncTGgjca6HmU0G+uxoubr3xPcvXubw6N9rq62SAUJRRQFP/rpR1xcrSh9g0KzvFxxvrlgXLxL02xZrVf44On7lkJrLq5WPHlxyptf/yafv3jB2fsXuBBJUqFMyfT4kEXf0a+vkEJQ7s1wKfHhp58yGo0oJ2MoSvR4QuMi509ekpCc3HnI45eXfPDZE4gCGXIdbYpycGzQ9BE92WfjLVsvsEIjPNjlloOjW/zoR+/z/PkZAjIZRBb0XcYkVlcdRheMyhExOPrNAnH2EhGXkMKXa5SlKaml5qjeY08VkCJrO+KsveKjj9+nrPdZ9Zbp0TGT2QRTapQWVALa9Zr9/X32ZzNePHsGMYP5WmejrJSiEIlbB/ucOocNudhOQiKUQGhB01siAiMlPmr8tUGm66a8uE7WdlassuEJhdEVRt9CS4NSOQVTSqMLEDIgpaZ3DSE6Aj7XaK9lySmBi5EgBsZQiqQQicEPiOQAmqZ43esUKae7IubaZVSUHB+dcPbilNV2hYgBjaTQGegR3kLyVAhuHMy5efsIYSCmxHw8ZX+yh5SJ+XzCyY0jirLIkL3L5IWtd7RNTwg5PfbJs+kaQoLWRk7PL/js8WMuLi4IPlAUhtl0j8ODQzbNltMXzyDGHJEVA4glMLpAK4UPLjfvo+fk1g3OL18SE1xtOsrZDYqi5O7xbe7du83V4mfEKDh9ecbDN9/g+ekptu853BsxHk949qLFNg3rvuXzx5+xWC4wxkCMGKVpnGUymxOForWWpuuwwaPKiqooKeqKKBM+xYwfJJUx55Bom466qrg8v6BrO2yI9D5hTAVCs9q0tDZQmSKXCgz9ahJSa24ezLlz9z4ffvgB6JJSakRIGFNgyjEvXl6y2jRopTCmoNC5RylS7p8WRcG9u/fQpgSl2TZratGh5L8GBP03N0rNuB7z4OFDRkHw8vQFRVGgrOSXfvG7vPuNX+L7f/RjVD1ClQpdKGJyhGZLs15zdXnJrZMbjEYj2m1DDB58ZnSIEBEhcv7iOSJECqGIiIwLRjJzBEEUiaQM5XjCumvZthmqZtfETztII1upSCIjp0kzKm9yMPkO0YUckaLH+Z7oLVH0Ge6PDiMEWkn8gMKRFIXO1DQtFISAbTu6rqEgUcSEDTHjuEKgtMSUhrIqqArNqK6YTseUZclkMmV/vs/X7t6lVDpHvrJCqZKyGqGQmCSQPjKfTpiOS6KJeCEyrdEGau+wYUvz4gWXtsfFxPPTM9rNlsumw1qP0SXjyZh3v/E1lueXnF5cMZ7t89HHH/P0+XOc95nBIwWzvQ3VeIz1llWzwXY9RgmMUQgpMKaA3rLdbPDB0dsOXRbcLgrOLi/ouh6fNIfTI4K3SBH57ne/wwcffkTf9Tz6/FMOjmYslpdA5O7d25SV4enLFxC2xFLz6YvnLJYLqsLke11VSKGRxqDKgsVmy7bLoBadpaozDTKliPcW5zxESQBCSNi2IcbI5eUlZ2dn+JTT6XoMWilSjGilkEpSqIL5fB8p4Wq95ODkiNF0Qj2uWG1W+OiZViNi76jrMcaUdL0lpIQWueceQ+5LCiICTwqCqipwQeCtIAbNfl2i9ZfcEtFaIpXAy0h9cMBRpTjzG/wiEQMcH51w986ajbPoQlDUBikFaTxlXNZcnV3y2aPPSDFD8olIigEhQRPRmU+ASrkkigICEh8jwTqMHPpySeJioKxKet/hQ8y9tLTDe4diWiSEzNGSpJBoSiNZbZZsNxeE0BBxJK8GVFVR1AJVGnxq0VqBlChpODk4ZlKPKItyaCprUkpUSlIJhdGKoq4QRqHrCj0qKAqFJmG0RA791uAjySeS95RCIWygby1904LNQNp2u0Fpg4qOJx++RGq48i0vN1vENqD6Dqd6DJE31YzbkxM2FxvOXj7hw7QmCtgrR0wmE7y3vFxccbltadwnrJqGrusIKeEJEAVN17LtGuTQGrHeEoVEJIEWmqZrsdYRvM896bJGGklvLV3XEyP4ECmMQSuJIPDwwU3efvseP/jhj3j64jHP/+5TvO0ZjRRvvvMGEbhcLYhuw8Y7zjcrFusl3vYYpZjt7QOSg8MjMJrzxRVt3xKJ9DaQkCyWV5xfnOF8T9f2BJ9wAUIEpQS6NLz49Dnb7RqhNCl1aClp1ku2qwWFlpAc48mUW7cO6fsWWQRmswpUZDQRPH/2Kcm3+D5SoLh5OOfi9DmTUnM8vUlZFJTGoAuDUhItBKUxFGXF3RsHGFNyHis+u4Tu+JAaw/GXaZRJJhrf8unpY7xw7I3GHNw44oPPP+Xq8ooPP/yA9XpLUgZZGkRMmXkiFGVRI6Vi0zQUpqBQGlL2KylkZFTqXN9k/qXBhphTTKFApMyqkYKYIj5YRJKUKiCiH3rhuUk+ZFxIIdAKlBRIAcZ0jEYb2u0CYxZMJ2AM1EwYlVOMFsQK9g4LDo4qpns1RhU4B4UuUYVCDhQ0BkDIdz3R94iYH0ZMifXqiuaqz0BO39Ftt3jvODiYs1qsCX3g9tEJd05u0FwuOD89Zz4/pNQF9XjCg9t3GR8eUqmSH19t8K5HlWNu1XtUqwsebZdIlSjLgqOzwM31BXUILE+3NIdbujI3/Iuy4PTFC55cnLN2EZcEfcyUtpA8SYIQkhg9tu8ojCb3WwNCanSZUU9vQ24FlAbvAnVdo7XCWk/wEYnMNVQ9HggTgfG05K/++38ZHz2ffPKIbdNQGsU7777N7bu3WJ4+Ytt2CAKd96ybhqbrgJjBwq4lCclRqUkSzi/OSSLiYyAliXOWzWbNdrtBKggx4HygsxnMG41H7M9mbNZrzBBRQ0jUWtIvLii9oxqXSCk43KvBbhgpuPfmXUxVUo5q3rx5xF/+je/imo6Rrjk5PObth29y4+ZNfvvbX8doDVIwmYypqhJEwiiJiJHOWgiWUVVx8OY3Ob/a8qJrMErxa1+mUU7mI1arFVu7YeM7DCMoChKCzrW0/SYzQ7RAI9ABVFJ0JPqQ6GNCKHNN5k4pQEhIrSBGgo8YyTVPM4ZcLUqV02CtEjFEtBDUwuElVLUmjUuMqRiPxhitKXVJWRYoLanKgrIo0KLg8PA20/E+Ih3juy1aRka6wC6hKMaIStBKhzAFbdfQrrZcbS+wDqK64vjmDYK9wbPHLW2zwcVTTNkhU2J/vo8ik9y9TGz6nJ5PqoLeOi4uzlhvt7jWoqPg7tENtNL89Gc/5a//9f+Qr739Hskl1lcLjt54SHU0Z3G5ov+X/5L1Zsti1VPuT2mMwyq4+6jna0vPVDg2R4pVCdvoCeQJlELnltJysaDfNERhsAkC6ZqyNgC+aCkGQnbOYKIPBOvwhaYYGvdaG4L3uOiYz2Zstw3BerRXCGlQokCrmsfPzim3kfFsxnRvym/95m+wN53x5MlT3nh4j1/99jfYm1Q8/XDJxdk5e3sF0Xtsm/uXpjR4Z9kM0W2zWbJeX9E2K4qqJMWI9YHpuCYGx9HRASfHR6SYaZRKFfTOURYF777xkPKv/GWWV0vGw8TO/Vt3OD48ZP3bfxEk6MJAqdFSUBUGbTQ+OISUTKYT7v+P/n2SjyQXkFHQrDe0L54wwePbHucDT589HoJFdsIxenrXM53P+YVf+h76+IR07226rseqLzl9/Y2/+Gt89NHHtE1DOTH0qaFPDVE6unbDzZNDHr84J0o/TCCYHFQQhPSKOSOVpJAaLaBIgnFZMFYSGTxGa7TJ7ZO96QhlDKrUJNkzno6piv2MKNYNstBIXRJlgRAGpTMY450HEkrLTJtyNrNkpGN5+YzkHHWpKOuSYC1vvfUGfXSs7Jpt23D60vLpp8+5f/+Iqh7z8vwSF8+xSFxzyOMPTmjXM5r0E2bHZ0wm+yijuTy/YLFecXRyiAuetmnYn+9x7+4Dnpy+oF2uSDZQ64pV07LpO5rgMdMxnzx9jO0sL5+/YPzyMbqq6HvLcn3J+eKSR2cvEJXi9o0TFlXkqlzzbKYoTcHBvT2sUXzYQFtK6qLAjKrsHLoWnzwhCRKK4PJ4WU7tM8FCIxF+YE7JjDILEjLltlRRFrRtR/CeSpdUpkSMyFxVKUlSo3UJlPyDf/hPqOf7zA4O2Z/tM64n/Or3fpnf/s3foioUJR6TLKOy5HBvj9lexcRUPLh9F3fiMFoxn03YG4+o6po3HtzjnYd3+F/9L/4m48kYHyIxCObzA/YP9una32Y8qvN5koYUE855QvDM9ibsv/UWfdujbcI5R+haVs+eopTAec9is8ErsL3F9xbXO0RKROeoygKpZE61r65wznN0dMT+bI/Li0suzi4ISI5u3sAYRYiZDimkoChGNC7x2Ytzzq8WPLlc4ny4ZpN9aUb53tfe4e7tW3jvWSyv+Pzzx4RlRirbdsvB3pTlas3autdGugavLGVu0jpH0pJv/sLXOZnP0N5RC6iFpFSKlAJKwWQ0plQTooh4ejw9IRk0+wQsvXS0MdGuWrbrSyKBg5N9lNDYvqfZbhASJpNxfh9B4m1Ey4JN23FxvuT4+IBvvPU2R8d73H/vDagMl2vH3/7df8zTZwtW6zX337zJdHqDP/rxkidPEnY1o1n8Muur5/haUbsGo07wvcfbTGoQCUJvkQmabcu2abl39wFPn3yOjx4fA5uuw8ZIr+A/+b//58ymc3bc4MXmir7rKJXhYHzARdfQ+A5zYTn1nltvPmBT1Xx8eU5ZlZyNe5RULPcLJhFOTo5p1w0iRdrk8SQ0gtl8zvn5kr7vkUqhtUSkRJEUKgmMUNe4tZYao8yAWhucdKiizCNoSTAejfHBM93bI4kCqacYM2Jzfsl4XvHTH39EsI5RPeLgcJ+HD+9z42jOSCYOKsU3332XX/hf/28Yl5rpdMxv/uL3SMEjU8T3Ta7BJTjXMk6R+uQkty10lQGvzrP57Cnb7ZYFEaMNRK7Hz5zPdDkpZWaM2Ui7bdBasz+fQcpzpJ212BjwIeQ03XpESMgYSJ1nbz4jhoBMmqbd8vzsjG3fcnV1he0sLiSWn3cEPNb2pBTZdi2dCxzevkexf8K/+IM/4uLskqZp+Xl1z39uo5zWY2ptcNaiBGxWLcEqpCxZLJY0V0sqbVhZB1ISdkyaoXGRG/SBvttijGQyLtFBo5wj+UDve4yUFEIzqQomoxJkZLXa4MKS1kpcuMGHnzoQ30COr0A9ZrG8YrHe0ie4urxARI/rO0L0HB0f0lnL3uSAl88vuXVyh8XVFc1mgXMdv/XLv4rUFVJUOAK9tRS6QKM4f3rKP1uc8qu/8Zc4OjziZx88AR4xuiGx6hGjynPj+D4yCvpNS/IJJSRKyIw2JOi7nk8/+Zivv/d1bt64wYunz0mAi57Hz58hS0PjLf3qihgTITl625CIOAKxXXHVtmyjxWDx3Rb14pTDk2O8iJyePWPfzpiOJxTjkqmZ4Ltcb01v3WI8maJ0T11MuXnvITcOLR9//IjeWqL3SC0p9RiFYlTXHB8eMRrVjOoR0+ksT7kYk7mzAzlCSEk9qSmKgnfuvYGNksYaGjHBf75kb3LIv/MXv8Hy4oLNZs3z58/54R/+gNoIxkZw73DGN+7doE49jYDnrqdttuAt0XYYAc71KCOxfUPyduDlSqIXFKZktn+AVJqmbWj6LlPbjEZrjXWW3jl624PKFMZCFVjraNdLni0uMn9aSmxwWJu/nAsIqdhuNkghOJjNufr4I2JIjCcTumh59NPHrLYrRuMxD+4+YNM0/PT9n4FM7M2nbJstTdcxncz49bv30WXFerNls9ny/Plzuq77co3y/OkZ3nY42+Mi1HrKwazkxsk9Ll48JrjAqBoRmwa0IcXcX9sx/Hc0NGctpy+eU4nE8f4eq+WCbr2B4CilYj6f8rVf/Abf+sXvUFUa12w5e/5DfvKDFc8+/y6f/2jBZn2b6e0POHjrgjaNWGw3nASF7yPBeUQSlPUYrWu2VxvGtWC13jCbtrRdT993LJZL/uk//z2+8943+dH77/N0e8povI9ij/moxK0Vy8slP/rB7/Prv/2LfPzox6zX/5R6/hPGasXbD94i9J6Lly/Rw1RLoTWF1tRVxaZpcv/Sez599AlvvvkGy9WadtPQ2552uyUBdV1jrac0BqVLaqNQQjKbzkEYzKijDzPq2nA4mVEXNYUp+Ma3v8HFesXJzRsc7e8z0gX4SNd2xJBQxrDarNmsG9rW8uJsAQcF88lNzi+vWCyuKEtNPSox0uD6wLgeM6pHmU4pFIRE228JIeCdJ4ZARMBZghCRPtHYSOMLisOHXF2seP8nH7NYbmg2Kw4PD7h9+w778ylEy8WzR/zkZ++j+hUjHJXIkyerxQIRPTLm1HOz3TCaTCB5BBB8ILpIVdQEIfCfP8XHmAejuw7nHa3th0HzPOoljaIaVZiyxGhD5x3W9nnuVZB5sqMRpTacvTzn/PKCcjQixcTe3h6TvRGr1ZJt19A+XWCTpw0OqzU2RtLikovLS55tVoxGNb7t2DYNPkTcZksxyiylly9P+eTjT3DeEUP8043sz2qUpz/7DNc3iFIzms1JfcwNVWUAWC2W3HvrHdTVFZGhfSH8MOmRkDIBniQivetZbjecHB5grcV6h7cdvYARY+Y3T5Cjmj54VDHG+xGda+jchtHEYv1jhHmCs1eUpudwXxF8h+v73HIRAttFiAYZDUSB63q87ahHBlNMMUay6VteXpzz+ZNnPGvOmc/X3Di6xXjqkWqKe7ZmeXXKdrnmd37jN/mH//C/ZVQE9uqae7dv4JuAbzeEYNFFRT0ec/v2LWKKNF1D07dIrZhOJhyfHPPGgzdYL1aMTElZmsy+KWvKqs5NaKOIwZFCHo8KSLyEICNKCWpRIEKOyFFLjk9OkEpQCYXdtiwXC9bLFW3b43yksw7bWfq+Z+sTdb3PfH+f2fyIy4tLurbBGEEILc8ePwUVBvqgwCiDlDIfphjyJFDK2WAiEX1AukjnBbLapxKa8WiC1oa9yZzjwyPKQvP8xVNWiwsO51Nm833Wly/46LNPSd0VwvY0qxXNdktRGqaTMWVV8cmnn9JbR1VXaF0QQsyEdSFo+hYEWeUhhMyD3pGnSUiZmWSlLKnrEeODfeaHByw2a5aLBc22yb3V0iP8mqP9A9be82K5Ia0aDg726TZr2k8+IYXI2fkZ203DN771LTbPn2K9Z7Fe8uTZKZAZS01rsTZQlhVFpRiNxxwcHXG1WmCjZ7w3pu96fPBfrlEK57DbFiMqdIzErkMJRXIWk6AoCr71zW/y4ekp2yF1TsRhvCihVGbZSCEIMWZdGqVwKRFlIkiIIWvYfPr+R/zX/9Xv4r1DaE3TJ1R9RBj/9+g7jxntdZjpJTZ6SjdiVhbI6LC2HcjYgm7dsz/fRyuNFAJTSC4uXhKiQxvB5OQQpRVN8HTBEVMipMBoWoGYMptPuXHrJlVdsTfa42B+wNFfO2S8Z/ChoTR7GAzvvHMX5/sdxT0TzGPE+TwHGEUgpCwJImJkfzpDhURwlqZpebk5JYmsjROjBwI+ZLWCznr6FIgyt3qUFwgPRsjcx01ZX2c3xe+sxfbZoJXOrKUUc00vqhFgWNoNAs1m07BaLTKwMhvhrCWkniR3DKndhEwmqwtgR3BKKY+UBRexTjAr5uwfHPJrv3ybxbbj4uUFxiiqUZG5s4cHqBR5/6c/oN9scNtzSmU5mk/xtmOxWhAby2mzpTQFbUh4BNaDIeXPIiS3b9+k6hsWl+dIkSAq3nz4JnU9Zr1ec3r2ks72BCkIQvDo2XP6R58z3Zuy3KwhQVlWjMYjlDYslgtOn5/hfcjqBkpwfrmgrgo22y2r5QqSQKmCR4+fsVotM2HBBaJP1KNRPm0xDc61QkjJfH7AbL7Par2h7x3b1mFMSVnUX65RetcjiJhhmr/r15TjPaQEoxTPnr7I8htljlqJMIwP5VGm6d6EFyllkaKQqHSJViUxSpyHGCUkCCiuLpY8ffwUHz0nt2/z4vIl01nPfD5jPF8gdY8pC1yUzKqS0XjCdH/ObK9GyYKiqDCmYL4/Q0pFPar5xtffoSjMMEdsM9nAZ5L87Xt3OexvIqVCWkltxnTdBiGga1uuLi/59OOPST4RsIRoSVERfZb46PoOhmkPpTLqLGImrVvvQMFoNKYqanznM+A1jGtZm8n11rssXaIVIeT6NilNFHlyJYSA6ywyKcbjEUoJts02S2nsCOcJ+t7SdRatDePJHuvNhslkws2DfazveHF6jjIlo6rOJGkKEgbnWpIIGG3wPlKPRvjgMUrStx0+eEKM+BiR2uDJTKbltkWMN1xendPEEXv7J1SjCiGh61uabUvftIjg6VuXaWjTCYVxPHjnLfaPj5gc7vPs+Quuzi+wriGP+yliTPjr8TjBtml46+0H1KOKZrtlNBqxWW2v69/pdEragA+O6XRK27aMxmOkUYi1QEpF9InlxQq8wNqe1WYzDEuITD4JkVhotpuW4ALG5IxhsVgMZydzmqPWmaCxDNR1SV1VtF3H/PCQvnMIaVgsz7m4WrFYbNCm4N133v1yjXJxdc7+wRwpI1oliD2jUjGpDAf3H5IS/LPf+z2urq5IY00gokWePFClZD7bYzIZ0axWTEYjDvf3GY9GHB8fE9weKeaWyPHREfvHJ3z7l76LkInDk0O+ZnPvqCgL9C98g/WiY7PtccES6XM/c4cUWo91nuA7Ls5bEIKuz+lcijGjZCEwrkZoWXL79h200TntkZrnz57y8Scf0XQNNnikjFRFQWUKos+EBinlQEaPIGX+eZFH1WIe5kPJLEuRBBSVYXtxhRJrvHUICb3t0aYYxrxyzS2CYLNeUxQaZUpC7AZiRE5f26YBIRGlZlyM2HQdm+2W4D1lWSKEoGm22N5SmpLRbIYNjsvNFfGl4OEb74IRXC3Pme0/4OjGnKJWCB2xoUdpQVGOcW7LZFTSdIHZbMZ58NjOE2UmtN+4eYPLqxWJFtNHjFYcH+7xg5894ZNHT3AxcHC8jykMs9keJwfHLC8uODm6QfSa1dWatmk5Oz+nbRqePHmC9wGtJMmHPKSsBYicPosYMFKwuDjn8wLq0YjHz55T1zWH8wMWq1WmfCqJMblOlhK0UbRth6GkqmqcdfS9wxQly9WW3vYonRliUmf9I+89t+/c4fLygufrZyAk1ahkMqm5urrEB4+SOYXvrWU8nmB7y8XVIjvmiyvu3L2NMQXWe6Z7+ywuG5o2A0BfqlHO5xOmswlJKg72j5BmRFKGvb057XZNHx3/4o/+gFW09AakUWip8S4gXMA1G46Oj7D1iP2DOZPJGO8ds/0ZhED0jhQDm+2G9z9eDoJKnscvng8gQ6IwBpTAO8Fqu8F6CzIDSBn5VNeHPIRAVZfDZEOWefADYCERtJ3D2Yipa1aLK7rWMp3sURQlXe9IyGvja9uGdttdiyRotbttAhRI73K7QMpX4NYwiimlpAgB21uqosJFRz2u2XaZrymVQpssESJiQBYKUWiQ4IcBcCETRV2y2i4pTMW2bxnvTTIpX0liUjQuw/K96/Iws4Ao8/tz1rG4vES9FXnw4BZ/+C9P+fCDH/PG/fuMak1MjkRAqizDIZJHySxbudmucxGSAs57WmtJKXLr9m0WV0tghSBxdXnKe+/eY3p4mxfnF7w4O+Xi8oxnTz7jcTXl5tExh4cH9K3l0w/PWV4+5fnjz3LLAYEYnJg2htlkD6M055cXKCGx1uPckjfefMjzF6eYQlNWJS56JrMJjx89pW07xqMRzjmkFSiZM4XNpuXGwSFKabq+p+89PsDDh2/w6PNPabsti9XiekQvCfj0s0fUVUk1GhFjoihKQow4nwcVlJKMJiOm0ylnZ2dopXjvva9zdnZB0zZUVU1KiYvLBYvVhpgExpSMJ9Mv1yhn83meOytqLq9aWhdxdCQl+OzpMxatZzSfM71xQF0bdKUplMbbQL9pWLYNQUjeePMNHn/+iG61Qcs8ypTT3IgUCaMzj1BphdI5JQw2oBAUWuOcIyWFT5kuhsyzj73tQEikVJRliXee8/UaZXROdX0YaFqgpcoHrLeZmO4sicBqu+ZkNGLH1VNSM5tN6PsW21qCdShphlorEyMyX9QjhWRU16RBic4NUh1SSprU4K2nKxyBSBM8LmbJEF1oNAmdIoWQ6DLLXGZ7zP3eotDU45p0MWjUyTwFEoYvGwJN0xJTQBfZMfmUaNoO3zumxjAuSm5Mc992fe8EZ3uO5jV37t/k6XrF17/5dVaXl/i+JzqLVlnMC/IhjDGitMJtLcvVgiQVs/kc7wU+KT784Md88uQfcPvB24xnc27cvsXd22+i0LTrjsuzcz766YecHNe0mzXRB27evsN6taRtGoJzaK2ZjEaMqoqqrDCmZLNtcr+33fDos89RtcJ6y9HJCW3b8clnj5iO9vABtCnwIbDZbBmNJihp+N73foXLywuWyyWj8ZimtbRtz9OnTxiNRxSlRsiEUIKzswtu3rzJ3nTOarm8LgUuL69wLrK3t4fSiaKQw+hezJmeD2w3WwptOLn/Bnfv3EfrghcvXnC1WOBd4PBgn+Pjky/XKB89fg5S4+SElJYEIJnEy8sVbZfoX17wzvERs70J5azGC4GRGpESvh4hrOXDZ49plpcI56hNgZElXdtmaQwpgKxgZkyOFFK+GnBWSHrVD4JRaRhNCogAUiicc1kfJVq890gpCSHmmb6YmT4u+jz5b9Rw4PIQczWqWK02hOAQchhUFpqUIlpqojIElYdv60mBQpJCRGqJ0oIwAFuF1PRdQ980BJUYTSZM9qZ02zYrxEpDIrDteoKA2HuUtUiZxZNLpTBAhyUlBt2dnFZtNi1amdxj04q262jahsViRQxgisw/lQq01uyNZ8xGU/aQfO3BQz5pV/zv/6//SW6wv3allOidwyjFgzt3+B9897soIjolRmVJNR4TkqIaTZjO9uj6nno0wlrPfH7AdLLP1WqDT5f03Ybt9hIbG6Tp6bYVs+mMt+6/wbv3D3j+tCC4hu9+51uI1PPrv/orPH76OT97/2d88vEn3Ll5i1FZsVosCE5xcnTMe+8ekZLkk08/5vNnj2jaPK3Sth3TyR6TyZREBnDu3r1LXdd89NFHPH32DOs93jvOLs8RSIp6TFmNmM0Oefz0c7QW7O1NkVLhnM0BQSguzi84Pz8fhNt0lheRWUZGSU2z3TKdjNmbzpBK8+TxUxYXGwpTcblYc+/ePVKIdE2LkhJdl/zSd38FqQt+nuvnNspn6wZSAXGKlJ6kHC5atls7pIwBmWXRr2WK07UQkyINtV1rW4okqKsx0/GcD16+j9ICqXXWZxFA15GSJ+HzwG5R5XnJlKjKEuscbd9n9XGZZ9hEytqdQkiC8yQpUEIiYkJ40CkPHDu/g/0z00Ukyd37b/CTn/w0ywimLPnofEBrSfAerQwhNBnIUrm+1GSlBKEy0up8wLXQbSwySY7258wPj9CFYuEjstYIVbNqW/quRcT8oI8PjyiKghQiwfYEb+l7mxv8ERAJbz19axEiz2lufcf5yys26w3BRe7cucfh0RFN21CPK8aTEZWpkS4xHc/4l2fP+Pu//88Z1xVS50e+kwupjOY3v/0r/PizRzx+/pz/+G/9LX7rl36RfSTKB1JM9N4O2YbHFAUxRqSUXF5cIKTJfE/bMN2rESowPxxxcDSmNhLbnPPDHzxheXHJ6fNn3L99k/3ZhO2m5x/8g7+P0pJxPeLNhw+4f/cuzx4/ZT7d48bxTRCaYD3HJzcZ1RV3792mqA3f/8Pvs1wsaTYty8UKkGhpuLw8Rxs90DUVy+UVLvYUZUnfBz748BOE1BSmRMqEjZ7nz19QjSr6vsdax9Onz/LAOhmEMxpUYfDe0zY9Wmd1+/OLK549OwNUfi5J4oJDisStW3exzlMWFbdv32W+d8R7732Tjz/5+Ms1yj4VyFgigkbFSEoue+iokSnQJ4/1DpHHdrMy27VhZlgZFH2fU85f+83f4OXpBZuu5d6D+/yL//73uXHjhKo0BN/jXcfZ+Quc91SVuF5jEGVJYDCsQdfOe4ccRnbigNbFRBZYEoEuWXzw+BhJSFStB+lGjXd5sqCux2w3zbV4VlXklQOFVphCU1cjqnJMZUo0AoOh7SzWdzjf46zFe0EY5XTojbtvIpVgvV5QywrvI9tNi3ceFWRe2aAllRxhksmtIlPgpUcKi5EO5z07WFXIrLW72WzYbDdksT9NWVS0257H26coI1gsEkJrlDToCN988w3+0ff/Bd96+JD/7V//a9cjcFlBMxJTpJSKzfd+kafrLX/vD3/A7/34p8R33+V+YXj8ycf0UpKEGlQL05DCG4LPTs6GyKa3HB7vc9VsSOKAxfICVyhi3/Ho449YnJ1xvH9AoRMyRSpTIGJuvxTK0AlF2/a0bc+0mjCfHeADfP75UzarjqQSVVXw1sN3eHl6zvFhz2J5yXq9wjo/gHkeFxxWZiZPFJHuqgehUarGeQjB0vc+B4JhnUO3WOXRvaKma3uqqqIeVTljA7rW0ndrtDbEKAhJYn0c2kNZxSIEn2dkq5IbJ7doNh3Pnr6k6yy/9r3f5IMPfnYtOv2lGaWy99FuhrBzTChQ4pIYCjY+ceUvieKK3jriMO1PcplEwIAe6irvqkiJmCQ//vFPmc3mSK3RpuDmrVtMpxOc65gdHKEElEU9GHXEuh5TD5ExJsZFTT2IPLdtS3SB+XSPq/MrbOuyWHSIaGXQUiGTwCCQWuHaHktPNa5J3nN1cc64GrFZLAl9jyJlVT2yyJVWilXTsF31eRokSQpdkOIIY/aR2oDYggyU1Qyl4PzcEkKPLiSz2V1OT1/irSX53EeNEiSaxeUGLYpByySQ8EQRs2JcSIPqQRj6mhu22wYXIpPRdOjJSkLIEw8xBnrbY0MLSVIIyU9Pn2K949/77neZKj3MpMZBKVDAMOEwQnB/POI/+uXvUVcVf/uf/h5v/pV/F/v8KdYUuTVjHSFEjAlonfAuSzo6n1iut8iu5/jebfamUzq3putb3GbN4uIMLQW3bhwxGlUoKUEZopGDRhB5hjJKRvWU2Wyfohzhm57Z7BApck3ddGu8TwgU4zoDhbdv3UIZwwcffsDpy5cIJZFSZ3EvH8gAeXajOzGzTIDI1M+iNIzHE2LwTKcTFmlJVVVA4vj4GKMNFxcL2jYDXMvVGpccwfmcSUWPVNnARXQcTY44muzxyceXFEHx9a9/m9Pnn3N1cc7x4dGXa5Sie4hq71Ks7lO0e5gY8SIxNgfI/nMwKwpZZo2ApLPildzp5WTxYKl0BipS4vTlGYUpcdby6LPPsdZzdnGFEJFt02TWissCKjE6nLe0kNXNkkBKwWrVvQJdfGKx2NBuHEIIXEjElL0aUmdtPZGwdujpkahQYB3LZs3Nm3d50mV9HDkszem2PVfbhpu3b7O4XGB7UDGnyuPxhN6BtRUH+3epy2OU3hLkZ9i4Rfa5xh2Zij6VOEYEoQl0QECIrCTQNCtSzECKEDGzoIbImOIgvmXAuW5YgpMzjePjfZaLFbb3tH3HRE1zq8VHehcyX3VIwwG0kIh4rV13LUXJa3tJpBBo4JfffpO/809/jx9++hlHAzjiB9AJRO7XBo/t/cDIiljnqKqS/fmc8XjMyWROtC3PH/WM6hG3j08QUdBuG6woMnE/pEHkUCEQrJZNHlb2kZgULggSkuV6y2iSgZt26xBJYzvLZrnlYH5AWVTU5ZQYzhEIqukkt+I6hxQ1MVXM9g54efYc63sQUOrczy7qGmMUXbNhs+nQqqAoStpuy+PHT5jNZiwWK7y3tM5jfSAQMg4QBUorpuOK9cU5YxJfm7/Fke24aLZ8czbnbl3zt/+b3+W73/wmM/klM3p6/xQft0TTEsUYjwBtQK5xnSMgsNYjk4RA7rtdS+MzACsMkTJk9W9neXD/Ab/9O/8O/9n/7b9AKkXXNWzbBmKupVIIiEH2UTCkzT5ctyB2MokyRaL3qEHY2MedJKSmi4qU4vW4UgmMjGBiFEUKLBZXmJObHE5GGBI68xgYlSNkiBRKo5MaBq/VoPMzJTrJ1l2wfLYhxERIPVrnPSJSBoTyiOUFZVGipKYbpvXLskDIQV2+2IlAD0Jh0tO7DrXb2JMS280uCpdIJxFKoswgHE2ksy17ci8rCniBdfmeV0pdK9vtpFHy6Nauokw7Rczhe/J0xmhYufDi/Jz942PW254oXq2miMGhhLrenyFEIqSYx+7EMB/rBhAuKSpTEWwELfC9JyIoy4qqlDlyOQ/k+l0IQW8tn37+mO26ZTzeG3rDBmNqzs4uCB4KXUFUGFWiKLBdIAWJUprJeI+2a5lNp7z15nfwvmK5XhBFR2dLnAu4FIjaUO7t4fqWbW8RMRK8Z73dQgqZyOFz2SBEfq6FEvQu74Qpq5L5bMqsKpivF/yNX/wOv/bwPg+uPuZwtOXb37vDcrXizd/4Fvvz/ev7/KUZJdXHbERPW/8BVTnGGEOha0rjsOsF3keWm1UGP0SeDhEMqJXMm6qqsmAJKDmIEStBUWp+5bd+nb//X/8j7ty5y5OnT3j2PAs4EXIfMkRL9BmRjEHSNgnvAtoIjJa0fZ/Vv4Wk1CpLPqbM4LBhqHFjwJQWFcDIikoY9qziqAfbOOKLF9wbjei7jqK3eCGoyxF7R0cYXVBLQ1IKJccYM8Y7Q0qa0UgiDDT2gqZdgdLocpShLqkRJLwPuJgjixCDwFNMJDnIVw5IcxJZjUGhMmLc9fQ+S4Tdf3Af7y3bZptZQuTFRErn6Yh6PGbbdiQhsWEnpWlem+HL+1J22rOvL4HYCZDtis2xMXzjjYf84MOPOPmVX+fZ4icEn/t0DMLYSIkUACLr0whBMRAYUoLgAjjPqBxz5+Z9CqmYTyeIKFCiwCidtX5TJmGEkAj9JdZ2OJv48Y/+iJAEv/1bv8O4nmC04fvf/z5N33H/3l325/u0XZOd3ban23SopBiXY44Pjnj+8pS9yT57kyOaTrBpt4xHU8bjTBRHK5I2mCpLQR4eHHL24hlXV7nXKAZFv663BO+zZpHOqHtRmkHxT7NYLOmd5ZfHU35rb8pb61NmTy64USaoNXJqEPIA73YC31+iURZjaFOebfRF3kco9JbpwR66VMiYp/FizDOUOYoN6WvMkpKFKTNxUgiqQlMVhsX5Of/gd/8uF5dnFGWBdS7zEIUkoNBCDgY1GiQcZd7Dgc1tgNGIJFtsCFTliELoYUuTRIgRkgkxKLQQyOgGLVkDvOS9e4YHo8jXb8wIRQ1VzWcvTzm72hCFwDYBmyAJjW0D1teUdYlNFT6OqEZzRpNDmq5HqSMKvUBJgSnK3HqRjpQc1q6zbEiprumHUYZhA54gRk8clAOiSER8VvCOgUJpjKmZTQ9ZrReURUIIN0RrnTMQmXuTcpBTiYlrIePdScis3EEdfqgrX0XM3ZV3ihDDdW/S6IrCTEAEtA5Ays8hZKlMKSVhEK8uyiIr+SUxiJkptpue7bKl1gXt8gqFRlIi0MQ4KEwkaNuO5dUVTbsEGbAh7+H86MNP2JvOuXXzBpeXa1zwvHh+nilt+1O0Vpy9vCCGRGkqBJLeOkAQvGS5sEg1hqiZ1se03QLve7QQKK1J1pGU5PDwkLLQHB7u0263xJBV/S7Pz+lps1JGzPfs+PiI05dntJ0lWMvJZEJlLePtBtGds3y6QU0Uo/0pwhQgJNFmJPtLNcokAkVZEGNCqozgRRHRWlJoyTblh1WWFSEMXjdlkePsUAVVVWeh5QRFCEylZI3nzu1b6KLg2YsXtE3P8ckNjCn54Gcf4wX0fWD/4ARSyHo5aowPARdclr8YBxKgpEFFDSGzXEgjgquQA7opkkdEQRETVbGG/iV16Jn2Ad8IVosNZrlg0uU0vG+3BMBLhVA1vfMwUnmbVJzw2//ur/DdX/kl/s7/84e8/8FP6X2X5e2Dzkt8hmxBq2rgi8g8oa4E6EgSjpAcCJezgZgISeU6OJlBz8hgVEFZTAlhSVVOQPTooiYIhVKay5cvmc73s5h02kVfwe17t/jnP/qn7E+mvHd8ZzCUXUkx7DQZ9HN3mc0ft1Pbe7YbS0jgfJefcWFypqMlSSTatsPHSFnWiOsWAcQgeP7slPX5kmk5RoRhxV40SFEgRTG4CzmclRolYm4/JUgicnm5pCwmGFMiyHq6XdMz2xsjUsJoTddZYhBU1ZQkPSEknE8IWeBakSVqQs3+dMalk8jCMz8ecePWTX760YdcXF2yWS4Its+rGmLmABupslK8L1iuLgnOEZDXvFjnPJLI8uKc6Y1jZnVF5QuslTQvt2wvGoqqpqjqYe/nl6w84FyTdytqk/uRMm91UjJQlYZRVdFby2q7oRYTpMq81wzs7ESPBIWpKL0lXCwRkyum0xkP334LWRmqqkZXI27dvc/Dh2/ws59+gpSKpnVcXC3y5qeUODi4xbZrOX35MhuBgzDsMCSCEsN6BV1idEb7JAHSGoKkQLO9PONtUaNmY0Yu4OmxSaCaHu0iOiaSFDghSCqvOvAxgyFKFxwf3uSv/c/+ArfuzPj88QU/+/j7rNsXSBUYjaZIVUAqycygvF+CZEnBU+gaVQgCHdavcCkvnPUetB5h9IjCSIyJONdTlhOUmtI2MJ4YqsIgZQmYzBrSmr3ZlG3T5Zm9QW/HGMW62XI4nVIrQ1bLyqp/w9bJa+DtutwQkuvFQMC4nnA8P6EPjqvlJdIkTo6OKIwipAzKLTbbvF1L6WE9Yi4fUlRoVTIeT/nW179BVRTDkttMNk/DjK1AUJUjzk/Pef78BVdXLbbLotZFWTCdTrF9Xs9QFob3vvYuJE+hEiJKCBKBJsWcYo5Ge/Sn54wn+1RlyWbrSaIipRFHx/d579t3+ff+g+9hyhH/h//Tf0xvW5YXF1y+fIl1HSEFlNIYlRcCZ1aTzrI2LrK8XOXtzUNv3BB4885NJlWJaUymoEZBZ3v6TU/0Mi8x0j+fuf38NaXYlRy7FXVpFwyZzWfcuHOfxarh8ZMn3H/jTUxZkodEIinlcaQUIsfzA+TyipksqJ4tEW/u0QpHb+A7b73HZt0SY2IyGeNcT11X+Ojw3rI3qTMP1a5xwbLaXmJDGFIgsdu3hRSglWBiakxRZbpe8PhuqHWVoCnWuBSpvEElT0pZDiMO6bUYpu2VAE8ixLxZy3qHSYLxeJ4PAQXB1vh+TN/rLNkvakSqIKlhYj8gYh7xkQRkrJCxBykRqadrEn0rEBTMZzeRjFHCo03H2kaUqFB6DJjcmywLUlRDdEns7+8PrZN0PTFCShildnGR3So8EF9YO3h9DbiPFHnTyrbtcqQWNZUZI2SXVQeNoKwNGo1OiVZYYpR5aexQb+b17lli9MG9N3nx+DFFWQzAVECbmKVHRL43WWo0cnBcMNm/xycfOz77fMH+/JAH9+/RbFfsz6d5bWEKTCZjTp+/RJsKqSSTyYT9eeD8csG4zKydmARlNWbbJy42PZM9TaeXvPXGA/6Hf+2v8ku/+jZPnj5mMhnnej5k8osAiIFEpipCrvcPDo5JKfLs2YvszoRCS0GZBDMJJ2WN7LPgsq7LzBqzmrbr8NYiEHmn6ZdplGVpsmx8SiCyoriQKUPPumTbtpSjitV2zbMXLxBCD1uBAyk5gm1pN2t+6b2vs/78EXMLYy/Y9pYuOHRdYuqSPVPSbFqKKks21nVFcD57filxQiBTQMs8fxiDH3iiGSSRw0KhJFTmxeo8qyiUImW1SpIRWQEtCYTPbYEoY26hiEiQMX/vLtsY5gq9txg8IVouzlf8f/7uh9y5f8If/sGnrLdbrOuRZlgcRAHJDF2HvPCIlJDCg1TY4Oi7LZeLc2zvMeaAg/0TZtUxoQElenAO6QRmVDCqMthRmJLpdJ9tv87qAMlTGEMK8XrfiRSJGBzjavTaE1TD16tdldfZVHq1ql2Qn8n7jx5xcnDM5aM1IhbA8MwJQ+bj6fuetm0hJWZ7e9fjaCkmpEr0fcMnn37A5vKSvl0gyAi5MfpapCslR3YDkkJXNF1PXY+Z7U8YT0p86Oi7NvdWRcJHz2qzZr1umB/uoU3BdDzh0WfPYOA1X5ydEoPjk08fsT/9JocHb1NNBLpomR/dop5MrqmRSgqi90O/UVIWBpMGqVORcwpSYrPeAnD3zj26tqdtsg5SmRTjKDgZjZB2iSSQBKhCUpsKU2iatsui4eFLXoVnTIELHbtlrlIJpMor2KazPX78/vtMZnOE1kxnI+rhEAkJ0XdsVwu6i5e8ePmSMuSarSo0l12bHyJkWcbJjL63VJMKU6jsvVJECYFRikKpDEQIhl2Lr1bQJRFzFBjW0wmpkELnVDtBkoEQI0pKhAJ8wISEEgkpcsomk0eJ3SyoApHR3LzMy6MNuNiwas757/7xDyjLmuV6zcY+zy2jVGY7RiHJpIAkhvESaQmpw9mGTfuSptkQPYzL2+zP7jApK1TfYWKHZEukw0Sf2zQie/PkU2bx9A1aGazrKU3BThleqpyiBuvITNqd3clhOv+Ldc3r0VKIYZng9Xo/CEESoiRElWdeo8eHQGkkwqVrAMQoRdc0NM2aotQUtaAqDTePD+gqw6jOkdIoRYq5LcaQReVWi8wprRb0rsOlntt3bqBSwdHsCGMMt+7cZr1d0vuO0axmbz4BHEWluXXnGO8Se4d7UASkBiVrCp1IacO26dChpesPeP7iKSc3a9arDcF5gnP46LHBIRJolTdwF0WBMTklXy3zuNm3v/UWH378MYHsjPYnI3Tr2atL/MUWdN5/E0UCJTGFZk+PsxD3ly2cpXXWcExxGFwWcljgIplOJ3Rti0+Bm3fvMt+fMh3PcnGuIPqeSaXpF5d8+JMfs6/g9vwQXRt61yNTojS5baG1RKk8XBxxmRWjhuHoBFWh6XpHMRkjpSLXP68OWNoxVRCvepliSE1EyBMBMhu4kRo5/IN4tWfy1SbkIaqIiCSRhEMYjw1bOrVg1ZZoa9i2C3y6woUGQZGHpYXc8YGGusmD7llsPmXdnuH7kkLvcTS/y159i1JNUW6DjktkOEPKLDOibIuKM7xtcH1HmyKu6/OGQSmHLVWO+XyfGGLOCFJOr6L/gsn9KU/3FbqT2/Wv7mcQkogkJkmMEuEhOIcsDXVV4EY1i+WKrm3ZlwckIovlFc16ye3ZPgfTMcFI7t+/Q4x+6FPDbt3ggAISQm65LNdrfvbBhxRVntDZnxxxtH+HH/74Jzx79oxypDk8mXF29pKihqbpqUaaB2/cym9aQuc7xuNbKFXSNAueXz6m9S26Ezx+Evi9f9by/MVHPH/2jGfPnl/T9Lqug5gYVWMmRcVkPKIs895NmRTrxYqzFy/Zbps8p6nh5PiQ8dMGTWb2OBeuR/cy5pI3CwihvnyjzBo7eWmrVnqQ9Rc4RzY+aWgbS2UqtNAEZ7MRKwHBo6RibzojKUUbLC54tBDEYFleXWAKTdu3nBhN37UURkH0eT8FETG0ErTM0hdK7Ngpu6PE0H/La+nErkga2DO7976DGIUocHLMVu1RJMdGl7TREYTOrzds7MkGGpAiZioVDkRHkiuC1KQo6f0K55fE2JLiZODcRpIIuTeYINGyWj9ivX5MxDIuvsnR7C1GxTEi1ggv0KJFxQaVrpCsCcESe0t0M1Jss7pbdPR9g08uy4cIaLsmc4NjzDs8Q0CJklTl+c7f+PovUMicuqaB2fRqz/rrV8YJ5Gv2K3SB1AERusER6LzOMGXlvlFVU+qCEByz/TkHN04Yj2uaxYLFxUv81RWuaejmY+rJiEQW7M57QXcRPNdbRms62+FcZvZILYbZyYLtdsu2bahmM2SRWDVnSHOXiENrgxF53WBKCZkChSlARMZjeLA3ATMHBFp7njz9jGfPH/H555+zWa7ZbLa0TUvwWfeHukLJhJJglERLyXw84VQqLk5fUkhJKRVGJJqzCx6agtRuCNEPabEYhtbTkAnkFPhL71NebxsWYpBI0KShoBemQKCIITCpZ8gkyNzbTM0S0Q+bp0ye4hB5wlsTmY5qVtsVjW3Ztls2mxXr1YLLi3OEiDjbkKInpYAmoYyiEdlI1IBfZPhG5gUkKeXfKROJAMJntDHmWggp8DGyFIk/dJbYtxQyy0QqMoUrgxYZEMmIZCTGrKy2vFrgZEHpLVJ56mqCTxtIDdAh8YiQp1CSCIiU4X4hAloWyHjM3uiQk/33kHEf4WtIioRFEFHJIlkjaEnBQuwRaUtpPDdvHrJcrRE6EIeVCUSLkZkNJFLAuz7rgoTEpt2QUuJwMhvi5LAQl53056uv3T8i5cM4mCSICnCk5AnJURfloKeaE+ZKGqqiYLlpct+PPBs7HY9YXV7y6NNPEMGzPx/zcO/NIZMZiAsJksh67RJxPa4XokMoiS4kLvRILeldByJiCgUi5oxHQyRzWaXU+bw4RwyBojbEkPEFtELooYcbfSakK03wntV6hbXdUPdnAFPKhNYCY/LuVJUiRgiO6gkyDEr9SaKcpVxtuHM4YzScjyTzGRSC681tScRBbvVLN8pXy1OVGrZcDXC8FHmYWaM4mB+SYqaCpewKYRjmqnRWJ/OuwfsekSJGKo4O95kf7NFcNRwcHvB7/90/YfPgAQKPd30+EM7SbtZZDzYEjMobhuns4IHy73n1XkMe/4qBQbp6dw6ICbZK85MQWYTAfHqAvVgysR0PR4rcNn5FEZS56YbznsurBV4a1Kah7XpOjm8QUz8AFgGRsqxkJKCkIS+ZBZFKSnmHOwdvYeQc6SUpFAjxin6YiMgUEMkiRDaElDzgeHn6mLOXT6lHUwR+kArJigHGSHrbICSkmEW2jNKvsXkAkZUEkgh/zCBf/1+vco9Xz93k5ylAyEg9LjCFyWYU84oKIVTe4blDF8WwA9tapPOE0JHCLrIPvdKU8qrD4dnt2jLe92gtmYwnHJ8cMqnmTGdjrO2BgBKBvtlSSE10geAdiIy4p5SG1pInRUdKEilUnkZxfmgCCWQCkTyFlIwqw3ppiTGDMFrmfapayWz4AzttWpTcuP8G7ctzfGexlcKIkgMCD8ZjqphXagipUKSBJxyJMhFFJrz8vKHyz2SUWklciMQ03CBV0bZXTPduD80IKEw5EAzycCgpgx4iJmpZU4qKJiRkACESKjomA7vHqZ6y0Kwur/i7/9XfJrQ9emzQCXzbse57hJ2QkkYlTaErBP3wkCUpKRAOKeKrejAVmfMZIwg3wPWKsTeYUNFS49fDSJfWWELeIk3MuzXI71PkJ0kQWbLfux57dY6SgvneNO/iiBLvMn9S4HOUFmkgLih0rPPhTY7gsmREkjY7jABxQHnFMIiaF7smJJG+y2u/o/DY0NPZPj/stDuMnpx2Z3U7LXcHfudewmtff7rX3jmKXRqWYsotrR1TS4jMrAqJUhf4ENFlhVRmqEhF3irWO8oIQRome1NQ+bfraz4u144yk+Qj22aLs5bJ8YjSFCgh2axXWciMhLOWs5cvSCliewtR0Lke29s8LijyTtAQw5ChS3TMift13Rwhup6xkWy0IIa8CjHvFpUYBUoMCotaoYVmj5JvTQ959myBSIFGZVCtcluOK02RIkbIAYCM1w6AnaLjrsT6Oa4/23p1kWutvu8pSgE+Ik1BWZZoremtZb3eUI3G7ChdIqnMXxWJAhhrQ4vIcvHeY5JG9pa6NDxbXRG9o1QK23Qk65CjQN75N4AmwSOkIviQo0FiOMS73ZS7RzykaInrlEmIXCEiJDEJJvM97t18gEqaikg6/ZywfI6SYpiD3q3Yyw86EnOGvNvsHCMhWFLMiFu6jrDpmnifj5/ccXsgaRIyU65SIAxsVxll1hsioOIAVMX8fm1w9NsVkYhPnqZvs1ZOFAiZl+94J4ghlw3RB9BfPAI5du2+shfPQepVjMz/+SIgFHxW0gs2kAYKZRruad4EH7G9Q1Z5dWAkEUPASIVtW2RKmLJkOp6CyKsS8vsRQxI79Lx3kypRIqLENp7PP/kcQkFV7rNYrEkJ5nsTZtMRm80GKSRaZbG0EDKBfDqdZu7qNcmeYVXiayVY/mAUWlLorEpIihDygLuSu35i7r0KGSkAVhvGbW6LaeEJLlB6y1iIvMI+pKFsGe7mjtV2/fXz2dnPbZQx5cOcUkaYfOjxqSMkxbbNdyDGSNd3jKazzE9NIFNCxDQsVQVlFFEkXPCEFBEx8tlnn7BaLdis12xWy+yxyMTIFAeCu8jMfCnzfKN3bmDq5GWy125o6C/B62BPepV+D/8OIbLcrqkWF+xVUzarNcVqyZ5Sw3aqdP16MuWjnGcydgbPsJBWEEMelM5Ra2DJsIP8MydYpNwXfZXS50VEIolrFDIfoIxuxwGllEpxdn5Og0IWJXG74Xy1JCU5LDstEFqRQlbD0+hch6n83nYGQCqGGjldv78vJLDXWQ3XP5f/Kg2DAIPjE7vomb/PO4/te2RZwq6HGSydD7iuhRjzduW2I1aKKECFNCDEOweWMxUhJYSUt9p7kFEznRxQ1Qc4l6PPdDpFqoQpTNZWipG6yrO6o3qEKQxt32eq304pMMXrjOIaAc1/QPTu+p6nYc50ENDIdL0UcvkSJLH1zIxGep/LMwUFWeZUpUD0EUfOxlA5o9hpKv1Zrj8Do8cMwEmit4FNs6btLT5BfL7AWotSktV6ydGNExKeJBJRCBQRlRIBDzqbik8JiUT5rGWzN5+xvlpwdnqKdxbISgMpZrUzmbJ+rBASY8wrArKQiOutXq9VUbtzNjwMXvtzUnYgbdsilGQ6n9G2LcF7UvHKcPO/07Whi13tM3j23TqG4OMQ+cg9uLgTAovDe8sT+xnUiMOhTzmPGpS9d7zTfHBe7WCJkCX6Q0BLRZKSpmnQZT1MZwxZeozEEClMXgenlH6tUBSIVJKHqIffIV6rH/+YB//C7RL5vscB8TYy3+9ruCZFtBJ5f2iMpOCzWJq1tE3WPZJC5/lLawddpTgY9fChRc7CQhJst1uqsuTBg/sZVFQFdtAx2pvvE2LCd3mpkZJy+DuJ8IHClAip6fs8jC2lJCS5W+3yqn6PWWDaJ0u7bUkhDWOluV8qZZYcvXZUEUqhqYTAaE1MAiczkGMIlCJmXrUcWoeDQQIgBYLwb6dPmT2ZQRpJ22/pbKDrHFGIDHSInI8v1pd0/YakaqRWyJw7IgfNHaFzahgQtD6BlmybjrIaE1pHu2mxvUUlMRxScr9v8NZyIDw7EspkMCPF9NoRzgaBSF/oWSYGrGeg4Fkis+mMG0dHTOua8f4Bzeqc2C8HxYE8exiHyiBHGzXca3F9uHcel6EOjNHnxnjKQNNwDBBIYtLZycQdu0YONW5AJEMUnpgcu5ovpd3CbkEgUSqVBcYS11qxhTH0jc0MG2sRSqCMZP9ozg8//gFGG757711IOt8XmUW102tP9ovPmS+0NHfc5RA8IkXEsLjV49EoYvQczic0RaboCXaLfsFHl5FSkajqAl0W2BjQUaBk5idLJa+dp48QeM7VZsnxzWP6bV6317c94FGqQErBZttwcHCQNW6tpdCGiCfGhO17IG/gstYSkgCprjO3lBIhRNKwb7PvMiCU77VCKI0qCpQxoAxSKHSUTIsKve2GpybRCFx0lCpSFwqdXFbjN4og4uCw8+rBkEJ2yH9aq/jfxChVUWZ1uhCJSYI2TOYeHxzWK7bdmhAd682CzXaF0KBSkdPOmNDBAz5L6KNwWuOKcuhiZCMYV2PeePgWP/qXf4RrGpSqULJAiDz5IaSEmEWSuhBQUiPEMCB8rduZh6J3US3xqgEgpcjpqMpEeuk61s+e4sQpyllMtIMBqeE1smFldo6GwTnkdCS/dt7TKIbWTCISiOLVUHZ+H2GIhAPcIMQAwuS0VwxaMYkWUkcSWXoiAA6wKSKkxpgKZH5lmYZ6J+a+se19PmxSUNYVVVXxybMzpBBMjQK2INr8DNilscO1S/8Fr9Lp4YqDo0spkMWKHdKo7HCiJ7g+745MPVdXVxS2IlYl2A7nPUIphJJ4H7BNh48BlXK2o7RGxjgsfxK4EFgslnR9z7ZrqIopTdvx/PkZnW2orMAYTbNt2J/P8wynVtc9WgBneyajOj+fBC7EvJ9TyEyoGBYUpxTpvcXHgS4hVJaPrEtMYbIekZKZlyUVtZCEtkWHkCdkRCJGz6Q2AzE+AzopDsaXciqfN2cPs5RftlHqskSWUCCo96YZ5pf5jTRbx+Xikr3ZHs5HrhaXtK7FFGWOESlRpIh0jvF0xmz/iLZvWNclSSZWTY/3oIqKk1u3Obx5k7OnT7Omz5D2hRhyeuQ9RkvstkFXI4TYwfzZq2YW/PAAkmAnbLTLZ5VUmIEJdBR7HtgVhc09Ju86qpTww17NmCJKeMKAqMGOzP0qXd1FGjkYHSINs4waicnjZCjktXZRnmpIYfeTubmsBaiUWyqZ/RB3lAmiUCidmULZrHP8VUiiz32zrHwQabuOyXQPJYtXaaiwIDdARMQq0/6EvTbMV9HxXz01SSRi8oTggIT1gVrKvJouOtp2w8vVJZPbx9y6eZMgE6Hbcn5+jvMJYwy6rEgIepv3c8qY6Np+IP/v6jzJpulYLJYoafj80WO+9va3iSHx8vyUGDyjesRsOueR9VRFRaEMxVhzcXlFiLmk6Jpm2MnCADwpQhKESF5/MCQ1Wmcdn6bN43aIQTi7yJM3aUBxRQSdItJ7Yt/lszbUiEJE9kYVYkBYlcjnIZcwYaiV83kQ/zZaIlGq69cUiPywMl42TMIbSjOBZHny+XPqyYSyrknJ07VbhHNIH5iWY47v3uPsyWd8PtOYQvHs9/8FrdYc377Ff/tP/jFSgzCCKFxWiIthqJk0vbdMTd4tODESIUPu6YkEQiFiCUhSFDllEwOLhTw6RsqJo/ctN4Tnd6oD6kLSKM3SwouLKzY4gvAI4UB4pDDXtR/XB3lIal9vBYq80kDqHI2lEDndGQCcGBwxZmKCFDn1lsO4hNxF1UDW7EnDNObAKjJqx219NSgtVRpkM10GJmKk7x2z/czbfGVYOcqJWOXaUrYg+yG7+FfbIz95+oyUEr/yzV/n7PGWJBwRSxK5L1oWGS12DoSGtm0pux4lBHuzGeX+nKX3XH7yCUlKxtMpt27eoovZuTKAbiHkO+m8xTmPUIZxPUUIzWQ8Z39+iOslNliQgv3Dfd58801+/OM/YDwe5e3SZZmj0jBKFZzPS2NjxKcIwoBQhDCsYxT5PsUU2fYdnc2pv4seLfIwgZQi83lTohJQJ4mKASccSsWsGJESOgr2RjXJu+y4ZKYOxrjDGzJaH0XWIP7y0Vfk9XG8hsWJ+ZeFQPKei/MzTFFy6+YNHr75NgdHh9SjkvVyQegtq/NLfvyDP0JKxTol1lqjjQDvCDGBh2dnLzBhACPiMDI1aIGHlAdLk0j45BCFGDhhcqj+dmlg7lftVgcA160TMUTOQETEjknsqKNHm5KoIxfCIaOHgR6VDWPXKcifPS/dEflXvzYGlQCURBqB1DltJ2YtWiEEUQA+AFkdQJJrLynSLibmfuCQunoysTlTHONA4h6EBmQEuZv4yAE4DuTuy4sF79x8ZZQZSxl6oMKSyGvExQ6653UwTPBisSClxLSaceq3Gb0UAanyjGaKYphKyc8hiUhZlezYPETomhbXZ16zVILeWbwUCJX7xEoqjFAkIsYbYoTRZM5q03G1WHD71h1m8znj0Qz7D7us8CciulAcHB7kszjsCzk8OmC12CCA8XiKKYqcNsb8nEIirz7wjkjCesvVYsVmsyEOEy8pxQHgERQmL7HSElRKVFpgokeJvNMlbzxLFEoyropr/MD5/Doie9oBTBN4H/Hh1b3+Eo1yOPDXgF0cJPvyrGQIge12izYFh0cnVGVFCB5nBeNRjVeGMHWElHj09Cm6VLQRiiSRHpCZkmekgGFCPXOWcx24o7zllEcOkLokpWFy/bVrZ5yDHQ0gDRmU0SLHh0IRcSQZcGTldNKujsx1YM4GXkdxYUeovgYNro13QCMV2SBVQomIlAotQMSED4P3RGSyALmPq0QGiZJwtK5BhI4oEh0qL9VJkegtShXoQmdvPFC3tMg1m4xpeL8Rb/u8xuGP3ROZNCmVeQ/lF6ptcW2Y8QuRP/9cjB7vLfPDMdO9cX6vKTfoffQkmahGoyy6HRPaZLJIDCHvO0Fk1buh9bNzuHEAfLTKEyLL9ZbnT5/jQ2Sz3nJ5dYUxFb1vCThC7Lm8Ouf23Tt51WAI9MqyP9vHdWEgfdv8voVEyl0LSlDVhkpURBLr7YZNs8n3f1BgYFdyDFS8FMFbj4sZOc/ZCtf9VAUUCiZVQa0jJuXvy2leLjNCiEQ3fNYkCF92+rojDux6S0Budoec2SmV09uYUiYGEwgxYF3KtKOYx6pMVeAWkeQ1286hCvOFKJTyHc1q5cPvyeBQJr/FFNls1njvWW+a64U6w8kb3uPQbxtGghIxr6YbUooEFMZQeo8OOQeI1/Vhuj6QO0N7HWTNv2QAbIbXy8Ll+eeud6EogVbk953ydukMDqSMBApF5rwC5PUHMgV87Im2A6lyLVtXjApDSipr7pBXMOw0R5UctoCJfO9C2k15pOuvfCfD0EOV1+YYX4N7rt1KesU82fUzY/L4YBEyOwSGdlBK+RlHKZFFNZQz2ar7tmNUj4i2YzwZU5QlVVmAFIQQSD7fT4HAh4AdJDQ363WObL1ls1pSlxV9n1dbCClZbTfszfY4O3tJ17akCJPRlGJQbu/7Hhc81np8GOpvJdGFGbAJT9u2AyMqV4Np8LhikEsJzmO9x4isUqGEQgk1TEp5hiyVQglGpUaLHpVTn2F0MDu6LGMUcmQV0H7ZYsy73lm6ns5IA8QehxVkZvg+socY+nVxiHYp5eWluiivBZOcC9ezj685bIQUWcCJPCIWI5jBKfjgefriGVfWc77e4L27BoOGmJhTwyQILmE7T6khpIgLnpQGmN5ZCB4Z80hYkrlxvDNmMbRkXp9AFH/sK732FUUAGdEmG6RSOx5PXv5jpIYkuPXmlBDgxWdb+q3LD1DnZTpaCKrKgKgISGwSONuzCZ579x4yGc95fn6WRZ2EILieaBjS0sztVSKv9Pti9jAYnnR5ryY79SAxIIXDoWSolYeUPMMX2cEivwjpxwHZDnFI8ZUkV66R5AO2b6nKAps8o8l4+CEIKQyiVCpPFwkB3pO6vPC263pG4zGzyRQtZG5xDEuGy3LE1dWS6f07hJCwLlCaxGq9pqgK2qbD+h6ZMriTfWgm2IthGW6MEWMKbt26w+n5GWHgCgsyKaXQmrqqKbSiVJpxkkydQbZDH3YXj4gUSqBlIgWHd3lJMFIgZBbbzvdm59rkvx2j3PlUds8RAUniPWT9X0UMghQz0JLBlh2HJH/ysiphgJPDQFAeEjrUgMbBEHljrldD8KjEEH0To/GUZdyw2m6JYnewdlSmDMiEKOh6R3CBTiUkjijzVLj3loqcIu6IwyHlVkH2BRHkANwwRF4xpC1px+4Zsof8rgjCk2Tk4GjObH9C12RyOWQx5TtvzPhH3/+7fPKTj+ltx/3bb/Dd934LlnOahUUYjRaJkSkglrgk6GLKzbuYePr0KbNZSxxmRKXQBB+Iyg/vM5uhFiKPtcV47UwkQ00d8uoIlXYTo0MtmXaOk1fehp3rdaTUI6WgLsbXBq8k+PQqM5FSIoSk7zt0DLi2wfU9xITWWbUixh4fMm1PpqxB5EMixEjw0PeOlCKFMRidl0Ntlku89dSmRqusVo6Awuy2kyU22w2T0RjrLXEAa8oiEwB2iukoiY/ZHZnKUE9nXCyWOUBEECjKsspatsMmbCUVhdRUUSNdm/m+ccjkgLrQiOCJIaBELn9IOZsLnkHILAeJmBI+/HyTIj9/TbmT0CenEZlqldXq8iIaOSBP+RfHga+UrtOD/Dp1XSGHxTkZ1BjSRYaB0JRIwTKZjHJNEgKETNVyUhBiQpUG1WWQ4PpN7eoiMnSfhCQMKKeCIZIOdWAIeCLD9s9cf8Y4UAYGHHyXEQuRdVlFbu28InnvWjWOuw9uc+PePt57fvr+D/jgOfzmL/828+kh2pdc9af8X/7W/5GmbbhxdMTBbMqjp5/w6eOP+PZ7v8Svfesvs/ysRflXglYk0AjqoqSXEhfBB480Zb5PUqJ1Rlm9z7qpIg0JZILxqCDEyKSu8/LeVCLijCQyqT1PV+bOqriWhBTwhQgb8zKn5JBSUZUjlCwRKWBKhet7UsobrxBZLTxGlyd7fEbMhZTU4zH1aEwaBslzIJY4F8EG8JEYMkIphLoWqxZCQggc7R8QyTtH1n1Ps1nnle1GkUTEOU/Td/TO5XTatvgwLO0dajyhNEnkpT1S543cTbPNwSZGshRsvgN97wkp4ZRCo4mhQrqQ10JEjxYBlRyVVqRgcwlzfYrzs9txpnfAYADsl22UWUx0eOIDqph2BBqRUHogVMeQDUP4gbZkiCJDyEnm9XFZhDd7GDF8oDyInGcPo4vMDg5BiDzelfJgcxAJH0MmPBfmWrz4tW4bCJsdgkh4PEqURKG5zk2HNsNrfgKBQqZhPAk1DPHuBrhy8zm3NtLAgxXXCeA77zzkBz/9/SwgjRhaJ/D/+N3/cmAPaXzwvPngPr/1S99lWo9QSrHabvn06VN+/49+yKeff8jf/Kv/Sy5/sEC5vLk4JEhJZlHjFJmM9vCDbIpIZAMQApQmxZ7oA97bgQYomRxXbNr/L21/GmxZdt13Yr89nHPu+ObMl3NVZc0DqlAACyiCIERSHJukWhJFSU1JHVa43SE7rAiHwg77g786HO0PDneEu6Ojox0tt1oSNbHFeQBIgCBAECgUap5zqKycX+ab73TO2YM/rH3OvS+rQFTJ0AGy3nzvGfbaa63/+q//GvFjj3+eJb0MvgA1IepJ2tHDQgzewMvCjto7HGG0pig6ZBmYmQwWiFERfUxbl8iUWWM5vr7B4egQu9elYxS6muFnJSoEsm7OYDhgsDyUPFqJKFlIgtkhyamORxPKuibvFDz08MOsb2yQmZz3L18R8nmuGQ57bN0u0UipTacSlMkMWZYxmc7wQZhlztXiJJxLaITGeUftHSYrqJyXPkpkfkskddgoGYVYV45IzSxqXIyiBeVk0lxQHqoJ3WwF5R2tikLjIOKcbk8LDsqo+B+qUYrHSKHmQnEuQqJLzeUOQlLYlbwjNXwqmYLkcHgk1HO+FqJ726tJanbN6PWXII3Q00pKHlFJ54mvHXlK3JvukAZ8UEZAHWHYeGL0wpoxmiP9hfccGpUMMWKRMLAxdhtBejsCTaCoY2R9fZUb2x9w49YWavCjaLOM6TyA0ho3fZ/o9qnH34YY+fyzz3D25HHGIyniL/e7PP3Iw5w+sclvf+Ur/OF3fpPnlh5gVI4xODwwC1A6ESY+e/9xbt7eoq5KQnBoleptLTgW5HoVmEzoa6RnE6PF6zFKldKloZzkP22Ekf4pmDrPd997Tzi0oyl5Dko1iyl1vsRINFbKC96zv7PN/U8+SW/Qx3jPbO9ARhHEiLEWHyVVUTq2YXKIEn014KAyHucrur0OT33qKR584EGIirffeZcQI0v9AYrIcDig2+lQTWfS3WFkGpgLgt4vr67QH/SAkOQyRaEfNLWrKGuh3u0eHIDyCXFPqYnRFEVGJy9kVmnl6ASFcR5XSz+oC44QK4yrJXxttIZI/ioZxaJioE9ZSOV+2J6yfW6LC7vJJ2TgThsaOic3GmmR0lGJ0aROgMZDBedRGGhaZVJ7S4xRdFHaFho5AaUNOgacC4TMtjlRbGQVU1lggeUgtCpSfqibOsn3ubwgIapW4hW9mpcFhPgtoYhCWpAeeew8X/3zL6OKRymWnpfXSTttNngMRWQax7jxS9JJoYPMGjFGSNMusNTv8/lnP81XvvFNnv7ieeoPnAAsCUmVtDImForhcDSWwT/apOG2DSgTEwk7ozdcWtAYDQQ9gaBQvouJlsiEqOtGqIGmhDSnmTc3xRF0jaMSmU/v8EnepK4dVe2YliWT6Mk6Gb1en76VmZJbQcLPTqcQac5qKjTJpgSR8IgQ5LzrWhqN9w92uXjpIrNZydJgGRcDprCsHV8n6xSMJlOWV4ZMZ1PZcJSiqmsyK4CNzYzUGG0ueS4aZYQ2F2IndSdJ2qGiwyiwWmOtIc+tlMJ8jUHYWTlgEtmAIPNTvfdYFelkFqKQMJxPhknzPCA09MsQcZ6EBv/g4+MbpW4S/0ZmspFOUDSPU2kJg6o6sfSVSXIIAsDE1CeoU92RGLGN8hySt4Gw5fb2D+SGqgT6OGH9GyT3IO30Db81RiD65HSb+tMiPtqUOb7foeY9ffAhDmhCQ5AlrMmsZjQ9kO6J7hMLxfeUpjadJVpQaWs1/V6X3BicD0wmEmpFNR9+VIcam0ArlAiI6RiwZByMDhkuLbG9dwAoOkVBd9CXnChGvPM4F8gzi8FAI5EfQbsuqjomjB6zD2aSnmOYG+E82WvvkXczynrGtJ4xq2fsH+6j9RLKZEL4rmuquqYYdLFWanN17RLYITq3WV7ggmdWzcA0m0ijii6N0iHCtJzJzFBr0VbjQk3pKg7Gh2AU3X6PytW44Cl6XSazMUWnkFKHD1hjqas6AYMSwgohQGGQkQFCf5RNxdVCzG8AsUaTNXghHRgdsSrQMRmF1mRaSbtW6vAZdHOKTEMtvNsYU69tg9enDS8xh3FB/fA9pWl4qIkRE8IchkylRbQxdLIshZhyg4zRaKXxyWOGWvrTfIyyGFUqRSjZWbWSBmCTJj+pKHoqIUlAGqAO84ubG6S8SCQtahZ65xTzr5Xi+x2LBtvgkzHlp1p2AAnHtRjS3Z078rt2KIs7CrFa2nWaHWAOnFirIWTUbpoemiC/Ta+nVlAYAyHDJ3BgqdNBK8V0MuH45iaoa5BArNxmVHV1JHoJBKajkYR2pBy53sDUq0S7h8u28WbShuYqQa7zemVzLyLXt67x/tVrzGZCr9vb28HNpuTaYrXBOxE2W+qtS0ksCsAWQyJdBCl7zWYlCo8MPJaGhMYoI4JoHo5nFL0+JwdDhstLVN6xd+sml65c4ub2bU6MTtIbdAiI0UWg8o566tMwIyPtg1ODsVnKX0Mr6aGVEllUa1HaUJZVu6FDpNst6HW7dLtdCqVQBDpEVlXBEOiUlUhPukAdS5Z6Gp2eXYgNaV/qkTE124t+unjMQBT1i49xfDLlAWgX9dwTSd6SZYIELi8vo7XmYH9fcgqj08YhiKsG7jt7lt3du7TSF6QSS+o3jCj6vYEsNh8lN1gAWaPz0iGxCN/HhZNcsLu4uNKOXsmRT1UIAoAgD1Gp1LQVBPjRKiPGGq8insCg18V7Bw14QZDzFwxMCvpA1nuU+vAv+M4rr/HMI+dlmG0aT64SJ9UYoeHV3jEsZNydj5Ha1/hqRukDTmuqWUme5VS1Tw3lFZ1OjgtSC7VWiPbelUkIKl283SPauwQ7Ai25OaqJCRbC/aYJGzHKaTnF+RofvTBdvGc0OkTHSCfLMUZ4ot1up73egBDjnZJw8s7dbQ6+9zLkRkC+zBDS9prZjCzvoHXG6HDC7t4eKNjd22Nj4xg+eMqywvma2WTMwcEBvX4fpRXaZsxKaSju5R1igNlshg+R0gXyoiNavVq36UeeZWS5kAEODw5EyycRYoqiYDAYsLK0RKEVVkWGPrAyC3QmM3Ijw4pRQovsW9HimafkAu4YpBQSIvQGPVQMHE5EfrXmh12n/IjATyXPZKyhyHPyPGcwGAgzYyRKasZaXF1TljO888zGhygSUBMTV1A1OWV6FxW5vXUrNQuLZwpBZgQK8Ju6NFr4sDEy1aKK4nnVHHSdnzRohfFWkD9lyWLdei0JycEECblD8pkNnhYSF/ehh8/xjRe+CtlJrB3wod2hbbwWTzmZTKl8jU7IaTuvk8iJjXWKPOdbr73Krz38FJNrNzBETHSCqvqaqHLu3NmS0odWaKOZzmYcP7HJbGuGUoJAVs4JAb1RT1OBmO/IfUPYU4v3Ri/cndhEGkhuNBgOGQ4nhL0RCkUnz+hkFpMQ1Dp4olbYTiGj5VKFyWaWvBAu7LSaMts/IBhFHR2lqyUPLKUuHLWi1xvQ6w2YzmZ473nt9ddZWV5hOFiiqmZ0TM50OmE8FsNpwuTpdIbNMjLlyG2B9xArx6yawLjEq9COGdRaGpQV0nN5d2tL1lGM0haXdzDWiiJfQv1tjNjaE2qRfPFe2rCcd+Smh07N7DJXp4mOFMoY6ghbO9s4awlZQRlmqQb+g49P4CmTZEIbwsZ2/Vll6OQ5Rin2d/eJMXDs2HGWV1fpdLssLy9TlTNmkyk3rl7hxe9+G1dPOXX61DzkPGIzirtbW7jgyBQ0jaI6LRdBPyI6amJc3H1k1xcvp0mVqgQGCa1MaQXaYHwmw2uLDDOrEaU0AXlEk2fuPSASlScQQEmjcdGVcd06OyZiUjGmn6dkP6WkRvcxxRl29m5zZ2eXE+tr5CbD2BJavyRH7QSaJ3qijgQTcUYWQ8Sze7BLFUR9QGnDaHSISe1IIOUB5x2dPEk9pnsizC951CGGpPymRFCsjVDkbN7dvkNZlXz+05+hOixlQI4aC+KspO8wImlAwMsooCxLSnYRa2T+ZojS3bN+/BibZ06DNXiEvuYDvPH6m2R5zgMPnCdE2N7eZd+NqOuaD65+wHBpyHDY58zpk4wnI6aTEeWgS8/3AMP29jaj0SG9bg/fH2JNxsHBCG0M0qxsUFahbcI8lGwW9WzGwf4+o+kUH9LABCXcKx9hUlUYpNDfLR1u5ogu8bxjlN5WoJ8X6BDapgRlTJJzafJIiNqgTM6scozGo/lG+QOOT6T72nxsC/7phKw2onDuPIcHI7K8g7RoyIzD8WQkf5sMwoeAj5GqrlNTcqpVagFRlBKeqEljEYIX3Vaj5o5IkFvmvNVGakPN2TjC24wElaf4WBTOdDSY5CMS/QCUhB6iPCcgQfP9JqiOqS4WNWzvbgFgug+JEWrQQfSCVEKe5VAUK88zuf1v+fMXX+Nv/uxPYIyh2+0xHk+p/aLko5xzjI46iIBkTcTrpuNASjsmjR8oy5rJeCr3OgoA5pyD4kgLswQQjfiyEgM/8sOFY28ywfnAoNvj9p1Dopd4XCXCgg8elAyKDd6QdbvtM7VRE71nfHhIVU6lu9979kYHKCvRkDWWyWSGqz2Z1WiM8KWd5GTDpSUefvhBTp48QTmbCUCkIuvra0xGE5YHKwQnhfxut8PNWzfonn+Yuzt3uXrzumyiWmh2cp4kil0DRDaNFKlBXUFUgf2DPep6hrVG1rMLTOrA8cEq3kVcSLXG4MmIdPIMFctWkY/FZ56IA1lWUKLxrsZXqSD7MY5PlFMeNcgmGROkMCrNbDqjLmtcHRmNxqysrxMRvmry7Ng8w2QZzpeCoiZPKItfpzkWaVaJarpCEPSsQUQDlFWZoPw5NKHahSfkd5FzVIlJIsF/TMxyk9giKgR0ClktGqtkspNwX5PSGkJ8UDqSZZqNk8e4fec26C7arsr5h/nDaNb6PAYQBHY0mbX3qum8r0ODgKa/iwk8CIE6VuneaYbDISFqJqVHmQxrZWhsXXu0koU9m5UopcUjpEbfYa8rRqhEQyB127ZAj+j1NHDHHJ6WMkZNWdeEKCPnrbUpj0+81xjJiw537t6lzix5p6ATArObN6irCh2lYXx/dCgGEMVDe9dwo+HOnR2c97ha2s589PSHQw5HEwiBu9s7dLsFmyeG7O2NKDoF4/GI5aUlxpMRq6vLrK4scXBwyKnTp5OSg8VFCXHLcoq1hlldCnmgCiI7EnwKX0UhYjQZMZlI+1f0gY4P5LYgdlfwMWCidETF4MlUFKX+mEgxMRJdo3YBaN2GswoR79JCC/vhG2WrErcA8qCkv0y6Q0i1yppZOZOTSNBsTMZirMIYQd/q2kuZxDSv3dC/F9DEZEAtR0IJYuu8lwG02iRUKxldakZucTWVvr/AQmneIYQGzp5vNKIg0JxBFAVYncIgFRn0uzz0yP387h+8hh58HpulVqYjQXhsU12lIMtXUXaJm1t3OJxMscZxOBoREMSaNH6AKKGUKMaFBAp5bGY5c/o02uS8/vZFQqgZDodMpzP5e6UhcTJzm7N5/Bjfe+t1FPDjjz5C00cjZ9g2o6XndxQraL5yITCZlVRN/U1rKSdo1W7O3jtmzlN0pRY5mUyYjsfoyURKXTGwtLJMzJM39CIgVZbCee72ujKBy2icr9EalodLTMdjyrKiyAt86j8djcaiPkGUEeyu4vDwEKs1mc0JAQaDAVpbesMhxmappbBGKan1Ou+ZTqfs7u9x8/YtXJROFxMVRlsybZNebiSra/o2k0qBq1usA+/JjZRINCIDGlKt3Mdm40mBIlImqmoZrfeXIf+Lxydi9Nz7dZNXtsVg3chlxKSCplswqDUqrVBKGmUbhS9DQlejklawxt8oUSKziVIm2K2Z1wBNQkiVT8hhg/+ltadNAmsac08Mj6AEzve+YQySYmHJA0kEguRJVMojMwOPPPUY333pBVR2gu7KZzFaJymKBultrhYaSUalM7TucTi6xa072wy6XWiCdqVbkoSCNGzXyM5ci3/3ZcXFd94jGIsPInFxZ/suO7vbLC0PqasKpTWdoivj+oxpOchHJiJ+aE3ED33Wbi5K+gsbaQ1jE8E7AbdyXyQFeeSB+1k+flxSjNmM3cpzsLuL84per0vILQ2rl6jY3tmjdBVFt8NgeYBzFWU9xWaazWPH8M6zPFzicHQISJNwXYuCuQzLgdHhoYyw0xYC7O3s4gOCylYV2mY0ItoxikpGi4o3/Oxmq1aK3Fj63R4dm2GAoq5Z1QU6Cj/YJeZZDJ4skwZo+Vsj8qFJ0IwgonB12gp90h4K6p6U4i85/oP6KedAT/NPfI8MbYk0HFYZs93kVvJQ6krYDyGxVIIPIlIUkypdbLycwWYdadQ3ObWdMNMCZ/sQiHiUFTkQHcW4VFsvshKlKS31KmSkHUpAEh8j3kvnSgwKjxaKGonAEEkobpCNJolJK6s4rEbcvHWTwam/y7Hjp/Hesbe7K745LLS0pXvWhDHZ8Fn89u/zzqUrPPvEY4ltIg960VaM1lijRZw5isCvjslzpuZVCfFloI3zwraRAcyBqiqP1sNShD/nQqj5D2i3jwXfKV83ejXOO2Lq+Fda5n8Kd1U8bmYsvSS+XXRycm04SLVKa6VLQ3rjFtYOkqNmnYyikxMmjrou6XQyrFV45+kUBYcH+3R7hZQyTIZGarOlkbk1eSaIf6eTSQlIWbyvGU+cMGyiKDoQYyvQ5qPicDKSzpDE+TVRk5tMhhUZiwUGNmPddumExMdG0OroHUv9AZkx2GggRrQSvR+FBCy197jgqREp1ZkX1ccfuqdsvWEDSLTo6/whLnrTuqqJLhIz2mRYzFKLEYprJHhPDBaTVOl0BJnsq+kvrUI2JWIoNjIOa49OsiReCRSNc5IXpg2i0SSVOqaglBiVKF4ZJP6uU5YYIllMUpIxtuhYe/8UkuvGgI+Bcw8/xNdeehHbOc1Tz/w0/f6A0XiEq2uqssTVQpZvGqa1kb7QCOS9c5QHa1y6epUnHjpPt9ttw+gFMpB4ywQoCZnCJp1YjVJWQvbMoJWIUkkJV56LMtKv6GnAI6ELKmLKreW8ju7X8zwyAofTKQD9bk9C1cR5JkZUUmiLUXJ8QqBTdOnkHZmhoS09aV7FYMgyLXloJpxlouSRIqmaZCu1xFB1XdHv9XF1JcaXGQaDHk898SS3b9wUL6zFKEkMHmWV3Eet6fa6VD6knkZNJ9V+VYiJfVTJz0OTP6f7A2i01EyznNwaMqXoo1iKBcXYY7AiIm0jRSdnqddJvbIS6YAR/ENLDVtUBqSc5tJ2HxqGzMc4Pr5Rtptvyidj8zDnHjTLMsoysTVCxDtH06atjYYQ0rw/g1KCqtJ0PoQFRJdA6WqqGAmmIOic2O8wPhyJXIWKeCWJum/6HxuB46YZW0d8TGG3UikXzRLg5JnYAo+V99Y+PSZFVFLnU2kmpoQ4GhMVnW6P8WTMcONhllc3CN5RFAUrK6vs7e2jVEVdVamdLS0AI+FRYQaE1c+wtfUVLl29xhMPn0d4QvPZHuKgndBCgkaR0fSIagpU0lktjITw/X6/7VltNF+jCtS+bA1PR09UNUQZ8UcDeS08wybB8BG++fob8iwbu06P2dU13kgfpVbgBS1h2O9JM4IWFYXZaMrscIIKEaOtTJtWKZNNj6iqaxEytknYOQbO338/23e3Cc6R5x06ecFrly+zvXOXleVl+oMB3SLDWml8KIpCaHl5Rukd0cocTaLMvCkK8aJZqgc755jWNdPaMSqnRJXIJ8GgokaTYUyOMqZFNopoRMlOWZSJGDzd3NDPDSoht013jXB6G7FrWsHt2rlW7eKHHr6GhZDoCM8zGaSwO6SDPgaYzqbMplO6phB1gSh1TmuztvUHJ4pgWZCdUxBTyUdrH6mDooyKKkClc6ZZN4VwoY0wAVC69RZy6ckw1bybPrYhaZrEpGAWPcHXaOOJSiev1XiWRBmIqciuFLVoCDJYfUzU11IYtry8itaW3d1dqqpqK4Q+SL3LGOl06S0/xmT767x14RKPPHi/cICZh5CQuJdp3JrWTU3QoE2GS2rsAgI5kadAeCRlLQs0K6RAfnRPlmSn6e+DxjTnS0XRpCjpTxIRwLtI8IJkhiIjTz2vaCHvW2PT38rGqkOEOuBcTT8byKYY5+hyVCTEWGGMTaF2ZOv2LY5vbLK5eRKrc/p9UStQStHpyDCkbrcHRPIiZzgccjgZkxU5LoaWvN/sIg2s16zbhnU2qx0NX7hZu0qJREk5KwkWahfombk0ZqDJS2syG8lMFI+eVA1QihAUXklE5UNs9V9d7Vrv/DFt8pOhr81xhGKH6LApBcZIYp/nHYKvmUwOiaoi6+SSX0RhgnSyQgroSgr8KtWzXARlZNepiIQso/KOaYjEIiNmItMYYxsUSIi6GFqruUJCTIBNAqvbnMkoLawLXaPT2DMfaMsfQv8LLfPFaI3VlitbtwFYWn9cCvpR8pUss/R6PSaTCfsHsZUYVKkWq53CWsPa+jHciR9j68bXuHZzi3OnTnFEcg+oA5QhUgVR7NYarLYURYdyOkVoeUI4z/OMPCtwdYlzkl/aVGppn1Xz6q2+KguGeQSHPXpoTSPHqBLbqUlADPKctFIp8rF4FTBooqtQ0eGjxxZZCjNju1gVUNc13W6XTqegrism4xGjgwMee+RxnnnmGYyREfW1Fxri+QfPpzUnddiTJzd5/kd/lBdeepFbt27hnE/j72R2NipNWUubQYM+a20k2mhaICMoDFobvPdMxmOMgY4HtMOpLmXw2BjRUWrgVkc0XnJ3IpnVGC20uqBbmLGNJus6JHzl6Ob7lx0fH+hZoAgtAgYCOEgNpygKTOpvm04nXLv6AQGHyTMGg6HsXjEy6A/QG5HJ4SHNPA5hRShBWX2g0pbQsehMkXlNjSbvWlRd4r0IFUWERRFbrxbTaQmc2tQtRX9VYbIe0UjvZx41+Si1UsUC9Fx2sUkqVSIhCBTbYsLEGClnNc6XaN1wc+U+aG2EmZPafJr8snae8WjCsVM/xs71r/HKG29z9uRJWTQL4jdjpdnXhjIoZkqDDfTyPKXg88GmIXhGo4pub0CMXkZBVBWdfo4tslTfFS9vokTErfk1+5eaf6vJRhYcZfJyXmQXiwJjM0BEzfKEGFe+xhMoq1oaD6YT6nqGUtAb9sk7ObVKnSNeVA7KqqLX69HtdJhNp4zHE2azksuXLgEiPD0YLHE4GqGV4d0L7+G949y5M9hM896Fa1z+4Ap1cGR5LoseklQnYoxNJqNUSx9UykgLWwAbdTtAyWQZWZ4Lf9taBiHQc0rmjCppnoh4TPRkJklPqkgMTnSJlUsbgYh0xfSeIZBKOkmxQn3k9veh4xOgr4ufL1p8atHJDMYoRocTjM7oFB0ef+xxTK7wSrGzu8skcWLHo31Wh0uUs6kw6DObwnIBODI0pZK6j80zVJB5DlnmKV1G7Y3IPbQlGSEWaBIrJyR+aFvEldKA1wUYaZzOsfTiFIWMDTdKpdmCqg1pJI8XXzNYX+dgZwebDcjzIZPJmLIcozTCOa1qDg4OWqdn0lju4EO7U0+nUzaObZD3TrO1fZvRZEKv0zsSbG4H2KqhjvJPpmUHfDkFX6OSfEVVV1QuUf+01Nt0dORZl1P33cdLb77LI2dOc6LfTTIh81ih9Z+LaQgwT1Dk0CkistZSdApRf1Mk1lqkP+gzmoy4evUDbt29w1JWsFx5ynKGMopev4PSMtNSB8nNQy36qJ1+X3pCURijGQwGrK+vE6M0J0+mE5qxdYNBn9HkkKzImFYzfPRUM1EROLG8IhPTilwQ9ZB6NKJMC1fGCMinRY60DVt10xbYyKp0yIucwlp6IdCvkXEITiRHdXDYWFL0M6ySfBhvWuwgxkBM4mLDlRXKgzEhpKpAk1z9sMNXtVjxWnjxxQlRTWzu60CRF+R5Tnepw9LqCpsnT1CXM2bjCS+//CJ3t+9Q+QpvFN4ISCBthIIyjg8PuHVzB68sQdm064FXARfEW+oo6m06hYBaiUKPIrSGpVMiroEqlu17ZVEz9jPoRrRyopbA0Q1HASpoCqWxK+tceuVlit4Zut1VylJCxhA8znlGoxGTqTTegrBfjNYYE3G1TBtWSkbH2WKVyeQa09mMTtFptVYjsOsid6JKA2kClhrtRYAElTRmVZD2NZ0iGBXx0RGDo/Yymryqazp5Tp7IFjThU4zzcHShOhIRwoAPnk6eSzhIgr/a5vDYevXaeUZlSTZYQRvDUn/I6dU1/NYdtl1FJxdJRq01RgtF0SWmkneOfq/Xag0Za1ldXeWB8+fZ2dlDa8V0OmsZPsaKhqu1hqoqZeSAc1itKbKcidYURUHlmoG9KR9O/bUm5ZllPeVwPJoP3IkCCCojzdHKKIzV5A46RPCiNKCCR1OTx5quLaSODYKOG9WOLYxK4yKMDse4NNczhCZq+5hsdD5RTqk/lHzE9qMmRpF6dN4TI9TBSYE4FjgvimaurDFGuhn2RocYpZjWjqzTIyRvJdGixs8qwrQUiF/Vbfc9yqGpyUItyG2QepFCi8SI0EDnwXWUHRqlcMpQG01TR53UI/Ad8lwSdO1lerNB5EBcc6GpvALgveNgdwdjk6FEqQ1WZSUzPbzHGo3RMv5dtSBXwGqNc46l9eeY7L7G2xcu8qOf/UzKhyJLSyuMKscsRQAqemKomEUpBygrE62MMdTBpbDME2Ka7oSmrHxS6F7MVOcwmHx1FAhqALEr27ts7e7x7BNPcPXKNZoJVU1hfB7aasromFYVx48dZ3VjndXVddaLDre37gohxGryzKYGAGHJWCOSkd55Op0e1tpWke7gcMTZc+cYTUucC8zqCq0tg/6APO9i7UyU5ppp3A2wmNQFMis1ypjeKzLnKiutqWvH/v4+VVUd3XgVZJml0yuku0WLQXarSDOXuikHqeBl8hm0mENjCFqJyLc4JomMau9bp7WgTvwDj0/kKT8E6cZIDCp1IDgUlhAEfXWOJD1pGE9cQmUVCktmipY8EKOo4qReYkzj7p3H1h4dFKWObdFfh4QkpjAuAjVJkS1ECDa1yIhHaXb7CMJfRdBJ1AwXJkS6WA0xKrRX6BCwNIS8KKWdpkOElK64Kslo1tRVhQvS4RGaXCbVDq2xVFXZIrkiyFTOGSWJCXR76y5lVfHQ+Ud4+7WLECUMF+X0GqUDxmZULqBUhrWWzIseT/BCso8BJqpD5gq0L9IzS9BMImc3WO/icxRYy6d5J0kdXhmmTlHXYpRKG+rakWlREI9aMalqIor+YJA2Wiuq6K6WUFprjDVSt0suXZtIWc5wzouwtBKK4PLyKmVRcjAds3ZsnZs3twgxsLaxxmOPP4J3jr2DXbIsp3Y1q+sbbG3dFv6vlu4UoxRWCwoaYjJIJS1uxlpG4wmz2ZQmcw7pWrNcs7TUpd+Tmm9GoO+hb6BnrBTNjEKFwEB16BcdrHJpfqWg9EYJCSWCdIk0wtghjaFIT+PjwTz/gdxXWZwLMG+Q3dNaCTPFnUcqL8wKXEWuBG1VaSS2CuJBfFL4askIEXSoObexzKlBn52tA0ZBcWtvTK0SKKLE8xzJgRauWBa9MHIEg5EBoDpGlJeulGg8PoovFHRWIgFFQ8lrXIP4lXnLsJQrrNZkxjD1HpqG3cy3ujnSCiRoirVZG1LHGMiLVZTusLe/3zJj5LUDhBodPR1ryIyAYKeOHWdldY13P7jGwaSUPKvXlZFsQQx+aWmZMJ1hbD4PxY/4x3STGj7gAubTmGvjP4OCCkXlFUoXuBgpfVNCkPxpXNWgDZ1eT3IuldDr6NHpuVauhiBha1SioO98bDtOYoRZWXI4GaO15tLly5w6fRZtDKPxIVU9wxrL+soqV96/hFKiDXtsc5OdnR3yPMdmNqUMIWn4xiOiVTphCzYziErAAsKuoFt06BSdpKULWYh0laavFR0VRalfyTDEpTynZwxWCXkhRFkLizXYZKcEmPOqY5Nm/LDR14UyyD0/SB801hQ01uGjdIcIkWD+GgqD1Tk6yqg6V6cfJk6lJrK53OeDyT4vXX4Fayzdostfef4ZtLFMD0ru7Nzh/asf4JPcQkyjyxrwIkKaWpVIBWpubE1yGhJVLCpPHUR6IyiN0VlrlJI+GXQwtCPHo7y2IpJbQ7fTYVp5lpYHFJ2ukMmT4HCMsqOa1FEQgii8dYollOmwtb2Lq127oegYyVzJwCjWh6LIdugUalKhO7UMKq1qQl3TLfptL6XWMBwOyIdL6RwXk34SCn0POJcQQUkXZChEs5h9iEyqgKshKpHgqIPU/BwwIzJyNbqTYTOLw2O0oaMNxnuyhEBUriZUUCMS/kTFZDpFGUNURmZHEtnZ26Oua5ZWVvjMZ3+Eg/0DRqN9JpMxxmhWV5ZoRiRELePr+v2BbOohCClf+zYiavGEBuhTkZXlIUbDzVu3hNQSgwBYRZGiCIWJgY5XdKMYpFWiKAERS6BnE5kgzjELFUElFYymK6jpp5SSjjp66z/G8R/UTwn3IrARrQxZlmOzjKoWuMUl+Q+tdOt1BFK3KGVReBldgIaUfGsdGS71+OpvfENusDYQ97l66zqAQNb9Ps89+zgrg2XKUUkZ4WA84eKlazQaLi6NEkdZQCQwQnMKMUIanaaiQpeeiCYjx6ITX9NigixQHZobL57GJ56lUpDnGZPKYazFpsReaUVuMrwDYhDAR8NsKh3szSSuiIA54/EYgKVej6GObHQyVnPNpCoZ1RVZ8FjnoKxQPmC8pxcVeZazU86YeYcuumRZIUJUDTsKaPpB4ahhtpUfFCQg7YULlwHY3DzL5SvvoJ0meunEl9Yrj0bOf1o5up2MNnRUoF0NVUWmJN+u6op6GqhixFUi9Tk6PIQoTJeD0SHj6RTnPbVz1LVne3ubzePHqKoKgufO1i3uP3uGU6dOyTiM6Nm6u83K0hKT0SGTyYzJtJRWLBIw1SL5KvkMjzGWXr8jrJs0ZctYI/XzZGAGTRGTrGQIImKmZb3kQD+3qCCzVZSVlEAmUUcadfRmOwxBxmSQ1n9QR5v5/7LjE/dT3nu0Mxm1JN8CbMQk3T5fHPO8Roq4VqedMtQp3JpzV03q8t588El+8q/+DaZ1zXsX38S7muvvvMzhZMSffOfb6RHIsba8zNn7TtLv9Tizsk5V19RRUfnIhfc+YOok5PJRC48xRgbDJeJgyGhjhVu9IbUp+K3r17i2v9em5Y+dPMWjFJSzGcc3Nrh9d4eD8W26nbOoEDBpDghRZqp43zBnaGIW8dxJ3j4mEGi49ln2b3+Fi1ev8u6l98XDTmd0DHQNFCpw6EqUCQyWl1oZj9xq+tbSS7s0RErvOdzdQ9kpg+EylZeOiodPnpLIoY1i267S9HkKtZME6M2dHQCmtad0gcwL+txyZlNPZohRCCNGiP/GGsn1q4pYVWgNLnp87YVpEwKuclJeqGVwjq8rDmZjZrOpgFpKjOPqlWucf+C88IgDXLlyhRPHN1ldXWdr+w515SnrGSc2T+Aqz3gyYTorE9oaaZIPpeYfjREB8IZvCxKGF7nFGGlysNqQKZmsldURFUTnVQWPwmEJdI1Oa1PyUbTBGJtCcRlfQYz4qKl9EC2lSBIj1/8xjHKOtbaxceOZlUFrYZpYuyDV513bbL1Y17c6zewIaaYkwiPUCSCRgit0+8sMo6KfFaw9/hmUhupTzzELjg9uXGVv+zY3L70FwKSa8so7b3/orIss49jaGk8+dJ76zi53DkpOP/wg5Ip33n2df3zrFvuXLnL34PAjr/ov3nmHzFpWh0ts7aZFe/AO1dJxjBayRGYsoZa+Pz2/KWir0QmAiL5idOjJraCnNhsQY2T/cEQIQcYP2IwwGFB3NGWmqa1ijMMPC8azmkorbC4MmsbTxfQ8QlTgArPxtM3TM6uTESY/qZJZLswSabWEFjZcj+jvqKiT3AXz9ACJl5UxqblaJXpzxFeOaibAloy4M5SzGSoErBeubOYDylqiF7XD4CXF0BiiVxzuj9ne3pMxDQDacOvOFpubmzgn80l9CExnJevHN7l8+bLMsREfSdOVExJo2CgiKCXj+EKr7UQq2TSEkVQeUbIeQxQ9HvDoIKMbchOFvVPLum6UDJr+11buNMnXNMroklZ+PNEs+ERizAsQMKkNJ0kkNGJTWSbj38Dh64iKDudLTFBYq1IOUGOMMO6Vhxh8O504KjA24xsvvwzA+fOfwlc+TcOVdzYqMtCKJ0/fD2cewD/zPJHI1NXcPdijrEouv/m9BKBAXc64fu0SN7bu8Df+ypc43+vzL778RynETiGcVaw90hGK30cc0y3HnZ0dWdQRZjt/ytXpe5x68O8xNGvoBLk3ugMx7dDaiAqAVeDKGlc7VLcz7+AH3nrvEjFGnnjqaS5ub2OGQw6NJxiYWMs0y9gzirpjOFTCrqkVjHxNoTKIkAcoaolOcgOdpDX75tVrqE89RWtP9yQ3kdgOnwlN2xkyw8SiBbhp5FWYy0YCZFkHpSy7O/vkmabSkXw8YlrNIASRAp1NwdVon1IAH8i8p9fvkSEeOtZB9JYCaC8P+uaNW9R1QOmMqDV37t5luDRMNLsaFwLXrl+n3x+gjMbHRrV/Pl9TyFweHxTeS/1xNitT21+KGBpASEnXkU8fQ6gJ3lP5moAjCw6iIzOgUzsfURFTpKeNWqT3yhrwadq2Vsy7Nz/e8Qlodh9h6WmHCdElmlYFqqbbE9qSMgEfxpRVSQyZwMvBoawD7YhRBvioZrZH2smbnd7Q6GU2TBt5vxgjMQkyC9dRMVCKpdUNbG55+r77cSGCVzgPW9MJr7/0DX7ja18Tj2EU+ZLh5HN9Vh/oYBTkHd16hLlXSD1ydZDNIcCdt8bcemlCPb3G9ff+GSce+s/JiyWiCngvObBSUojWxogKGkLGP7G5yfLSULRu0jU25ZGzDz/Ci2++Q5HnTHUAE5jajNJadquSTrdHpWRT8rmhNobaVcQQ6ERY6vcp60AwkabCev748aOgj5p/ImAYLWIYzBzoWfaR1egIRhOSekREyPA+SpiojKJ2Ne++965QDesp/bpkBU+uFbnWqNmULKR2u6DR3tNVio5X9KtI5jVlCVmlyPIc66WcNhpNmU1LbCbPfG9/l8g5stzCJIAXdfbJwT7VdIL2XjpkIMGgKYgNSryxMdSVYzye4luCuqRaXpOMEZyWzqDOzBPLmjLJqJgQ0SqSa02mNcraNCUaQvSCT0gYIkeUSNFoIyW+KE3WP/QukY+GkBooP/E+jUUpxdr6Cp1Owd3tm5RuSpZ3pISgZbzZdDRiZX0dbadkRS5hgGe+UJjfWI1qF4tEhotyH4s4tKinRZca9rRIg2irqcspN976DhGwueLBX16jd7KLNrIqdZQxL01nfPP+7bsYsB0hD5z6bJ+NJwq23yq59hc3uXnhn7H+wK/R7Qwlj2kmSzUgg5eJTkWvS6fIUEgHzcHdF47cSa8iTkVMbqmMAhWYmoxp0NTKMugMULYD0TN1geHyCuPxmDrKxrScNEZLHFeufwDAj9x3H6p5TAsI7OLiUEZhlW1rpgAnuzmPDjJqpamUiF87DJVVHM5qpgGqqmR97QSPPvkog0GHro6Mr33A3VffYKWfCRndKdAZaItTmlnw9IshuelQhFyIHd5gVEaRd4lRY01OPZkImFYHMiUSllanDT3UhFkpJArnqUcjjHMolzJlLb2zpqHRKQmv67pOBI80W6apY1pDNLL5yyS5gKtEMyhoh1KBSI01QijR0UgEkZ6vD4oQBZVuKJ+NVIpRChtFB/bjwzyfxCjjEWGJdFGRkASFadg4GmbTCc5V9JeGHD9+jMFwhU5WsLO9y3h0yKx22E6PJd0VBEtrgvfo1EXSXECzDUjk1Xy1WIqNCyGj/MeHCN6nMEaxOx3z7T/+t9LqlCse/qVVemd66fWC/L9RKG+R5cV3ii0Hs8kYso7m1Ke75APDpa/cYPvq77Fx7pchaqbTCp/O3ChNbhRry0M6nR6EQFnXXL/5Hq7aZmnQ52A0Zv3YMfamY7KOpeh1pI+zrommoHQwqyI26+GDAgxliJRBobIOvgx4E5lYjUm5jW6sK6GQ9zZyNWBAW1MLnspHZnVFJ88ZAsczSyXBBs5YSqUYh4h3kbosqX3g2MY6RZbTyTrkBlw+YNhfZ8lrMqVQ0RJNhssyKQ0NLcU6suCBEBW57dGtZ3z62Wc5ffoU+6NDLn3z67K5Lw/4iS/8KHf27lJ0C/pVhwfPfYpyNGNne4elPMNMZxIKh4bdK3VKQdA1OoD3UfR4XNO/K00EimS0SgkRJThC5VAxoHUTRsjMkV7RQyV1Rh1ZILlbIhL1NS2CMTVokLykSnXK/whAzwKcfoSmpBFFcZ0QNMPOzjaByAPDAUtLy/R6S/SKPoP+ClU5Y2dnm5dfeZmd7X3OnNpMZHKZZLxo+qI4JrQxgVCapBkWGfdSWpBzTBU4+d0Qee2VbzLavonJFI/+4iqdMx0goHyQMszC+7Udh1G1r3u08DO/F1HB+kM5Wi1z4ctvcvfSDsunfxVfS4E8xojudiiKHkUho7/rquLuzi12rv5Ljq31+cLnPsNv/v4f0+/3uXuwT9btoLNCCA5Bpv+avMtgeR10ho9SU7R5QZnmdFRqBrlhlOcQPOBohrarKLl4PJJPNtFFs/PI3bo7nXDh+g3OnzrNlau32S361IgXqEOgCp5aK2y3h40B/IzhsJemfymcyZl1VhhtnqVWlrwOeGXwWqPyHLRBW0MwkZKANwaXgKKe0YzXT7BVDMhsj7i8Snf/DudrRXbpFvt+l8F9m4TphOtvvYXVFqfgYD+wpCOmTkX8CIEgLVRB47URj2sswUeMCxRRkSlpbyuUJlQVlVJkKmKCwzrIFWRa1AKsUnQDLHcLVBRurY+eqL1ERpHURhjbTEFIBcyBH6MXtCB+8PEf1E/ZNIeCGKUUn6VWabRNg3ykLqeixlWeUjkZma4sNisoy5LpdEZdSVNvc4FHyEgq3eTai1E2xOjkkY9eZPIILSIJt0e73LjwKhFYe7BgcMLK7Utk7xZ5hFS+WOw0TNeKmotiMV/aQYmBbDzUgQgXvnKLg1u/w7HTfxui7NK9YZ9+r0sMnv3DQ+7cucbBna+SWcePP/8cNhdAJsRIgSHr5VROhv7oVFe1nS7D9bWW7IAWwkTpZFyeRIiWuhlvHhS9BY/foJJHzz6Vt1pIHKoUdmWdLtfyJXZioFaCxBIi2tepPBCJvsbPDsk7mTwTY3Cmx6iIXOsHZkYmgnkvxP9cG4KrqKczNJGZ8gQt8pMChmou7l/Be0ecTjHTinPLazzXXcEfjLk7u4M5MeCsydnod6hiZDuX7oxjw2Xi4ZRpKCmDl/wwRmofqIPHBRGoVs7Tqyt5lqmDp/CBOJuhvJDYdXD0TIeuUhRGgzZkKjBQlmGRY5M8qVD0kHxT6SRpIqGHML5iOzBXKyW6vdFKFPcxjk/AfT36gu105kY/psm/tHTDhxCEGJB+LmPX0yLXuqUghVTXUzHpy+j5++RFTq/fE+qel9HqwTtpmF0cK5ZCYJrTSedy4/YHOCcyGcc/28NZWn4qKaxonUaixB29zI++ifNAQT459nCBr4Zc+tr7jPZe4uTpHycqRZZZJtMp4/GIvZ3LzO78LxBnfOrpJ1lZXmEyEz0cX1WsGMXIVeRJzClDZlfIYCGfNsJAlhVkRd4Wpo0xYDSlq4SsoWMLZsCRgCIpoav2sanmySrNN955D4AnHn+Wb767TWmKBGYEIjIyLjcGGz3eWKI2FL2eaM9YS600d6c1Nw5Lqkzy0egiWVRkEep6hq8rrIooa8Ea6axAZo/61BhunWKgLUu6Q9fArWpKzKxMdC7hXBUZa9HDAc9pW5B1LQe9Dk7NvdL26JAqhNQwHihjZFDkTFSQ4bsm6eqEiHZyfVlwDLWiby0mCuE/U4oiibHo6IRGmNQx0NIw3yprpC2w9mWr+RSTKobWhoPR+CPX073HJ/CU819tc620LptmYqUgyy2N7mwjshQSzDcfCCRexsSYRpIJWBEQwKPZvYOKyPhKhc2yZEuZvF4ipHvf/PMiY2iaBDxw5e3vAdBd1qjVxOiJQl5vHEVzQZKTfpQR3vO9ZLhthptaso490uX698Yc3vkjvHfk3SfpDgZMq4rRwVXc7m/RzSPPPvUsjz3yiJRRZiUAt27d4tzJTR7c2CAqLYXxsuK13R0GmWVQllTO0dOafpHLuDsrOWuVNGCm04pyNqXfs+2uIcanFvCwha5KBaTwsYyRrb19rDF4lVM6KPEC3kV5jh5ZiEFFUYiwOTYvqJ2TIblEJmWFqyuIChMguKRciISCESWtdVGJXqr0W8jUagVKmSR+qClINcLCstZdwVSOrA7YCqKOWAOd4Fnxiq6GzEAZIzF4qhCwxpD3ehS2Q1YU+BgYlTMmdc24rJhVFU6DMzJvUiMN6kMQ+UhjCDqgoifHYoAYaqJAOjJNTqcpcUoL0quSIn+QiC+GSLDSMGCjpgxHcZkfbGk/4Igf6gcTI5SBrQGlRD26oTgppRKAkkbhhdBOz7I6o8hyDJ5QT7HRQZDw09mFZluj09CYQCB5MS3FeIWZg09BSgtVCLjoIXiuH+ww3d8GYPXhglzk1mVhJosUp/kxQopFSmEL+kpemXpHsIXm7HMDLvzxPpOdPyGugc4/zejwOm73N1Gx5NNPPctTjz2ectfApfcFJY0x8u3vvXzPWyqefexRNtfWeXzjOD54uqMJ127dIsxGzLyj2x8QlWdWVsyqGmMUJnhOnTjJa7zF5f19njh+TAL7xAIQZT7p6XExUvnAxd0DXnrvAo89+CgXLm2lpoI0JbqRNknSkjEK26fTG2CygtL51J0f8InbS/AEF2W8gPOotIBDE4hEiK6JUFLpKW3kSit0kFrsfgbT2tHRGb3ag4rsGM9d7XE6wziHUxGnoWMk5NQ6IxJxtYWoicFRHUyI3rMUYagV5Dmq1ydYabCWck/F3vYOqpyh8p4InkXpsLHGSFcSUcYgapOuKc1NIYmlxJBIByI23UaXweOj59LH5A98sn7Ke45mcSsFKgSik9qQRmZOBB9BJUHkNM9SR9Aqw5ocoia4SCNzpFsCsByTcsZ4NsHaDJtEioU9kc5G4p80WUmTo8mUheiZbVV4JwSB9Uc7rTeMaVWkyLV1jn8ZZB3a36HlizZtUKYpNSjYfKzH7vsl2xdmzPa/STF4mDB9D8KMp598nE8/8XiL0KkgnfEAeW/Io5//mTTlWrFz8332bn3AK+9exPuaP3/lFQBWhkPWVpapJlOee/Zput0ud25vc1CW7IxGTGYTVPT0ex0Avv7mm3z6/vtE3c1KG1KGTL8ahcikqql85PdeeQUfAo88+Cm++cYNapXhSbS1BBJpJPSXaDVjc3OdtELbGlwMNUp5ea5RGF0aUt4lNzsQEZqXT+WjmKZipTw/VLIhLA25XniuXdth0D9GP2q8EkphLGSKtw5AXYsos4faKHyURvIMQ6YtIUgnTWEsnSwTNQiUDKAtpebpowA13ldMpzNmdZ0muzm0KzmxOkzRnQYVBXhM0qEihSMOKKQIzSWWElo4wCpKHr2r2g7dv/T4xIT0xa9jCGKMkvRJ60tqPm2oFc55rA7yABKYoALkJic6eTYxNdIqpel1O8zKGSbLiRFGsxlalYnCJzMwM21EXr6Z+BOazUE8sVeai2+/OLck3ZzvXK3tSPj6Edd35EgLU+w5EKNKk5rauIuIDIUdnszZvjAj+hnV9CbGDgnA6vISRjfdEoG6rHnvsnjKvNPniQceE+1bpYkPPg5acWd/h7IuufHBRfZvX2M22uPyVSHmX7ryAUZrBv0+Cnjg3DnOn7sPlMLXnpXhkLc/uMo/+af/X86dPMF9p05ileb+jWOsDwd86733RKzMB1597z1+/PM/xnsf3MFpnW5nmrdJ0vOV2B9FkPECK0uEKPq8SViREGu0EmaTUQGsRwWFMQGdSSEf71GI15PWugTtJfVxQkntZrBxmoujW1ypxjzePc0wRqihEy0zRLw7i6IaUCnNVDmqmETcbAevjDyn6CTNiRW1q9J60FijyJXBWi0Sopnh5LBPRP5uWpZMxofU0wM6nUyikCRf0na/NdGWZFML/1IFQEkXclAel0Vm+Q95PuURBZfkYmJwEFx7Q2UIjIymjl6Y+NPpmNzkgrxGUggZZTqz1XgLXtdYJUJTx1bXeO/y+ww3z7G6stx6MEEca2Z1jfOBvcMD8izHGM3u7h1OnTzD+nCZDHAkzVlg+XRG1hXv2tRTGm/ZWlxsEMq/LJRtE09BhaOM22tUy1Qrdjw/ZgcvsXLyl9jZ/1Nef/tdnnjoQZqIoyxn1Knv8dQjn06j5ZP4V5D62cmlNZRRPHzqLEpbxqWMG/fA5YtvMtnb5vaFV4nB88pbb/PSG2/IFal5m914MuWti5d56+Ll9mcNV7P5+kvPf5FCDxnN9kHnosquJFwLKqCiFq2dGImVZzI+ZPvuHc6cPi73QgnxvKxHODcmGtFn1UqYV9pClkWskcKAMZBlAoBMplPW11YhBqrpDK06BOep+x1meonVxx+n7BdMy4qpiqx66M00FJoqz9k2hiozHBrPyIv+z2w8oRpN2BwMWcl72MzRjYFhVRPqUrydS3NRtKWvZKzfzAeiB+8VNQoyy6odciy3dGNo4jkBv7yQAiTUb+JyJTKgCVGWpiJJ6XKj+ezxzY9laR/bKOvJvsC+KWfMjCXTGm0lr7TKk2eK/YOA1jW9rsbVE7ybESjJEj/QR4jeUxhNR0E3Bga+pNCOrNfDT8fEGFk+ca4tUzTh5sF0xqULb7F1+W3G27eOeLes02V47BQPPfkjzMopezfelwssElsjAuijeWT75w0S8hEXfo+tRhYRTfG+4ok/7H0honUP23uY3f2LbO/tsra8igJubW21VLtefyg13vQGKsZEcA/EKuBTi1BhDJv9ATbLuP9zX8IDh1/6BWrvubO7zZ3b1wHFeO8Od99/Czcb46ryyOUsTk6779w5Pv3ok6wVPS5evEYnBKoYhDodJfJBGzwREyHUFeV4H1+VdDu51GINSRojsDTMKIYbDJaWmJUVe7t7HOyN6PcLTp08TpFbrBHPOJpMCAFu3z5gY73D1q3bWBPo9TqE2OXATdCDLnaQMXYztA+8vwzTnlDj9voZk25ByDt420W5yN3tHcowwecKX1huDzdY6nXw0zEr3nPfbMbpyZi+9zgVmRqFyzVrLtDHg/Z4BTU5B2Tc7ig2S8cDMaKSgFYDCIaYQlQWKsAJzZ2Pr9BJiiYji4qTtvN9rOvo8bGN8r03XsVo0dfp97vc98B9LC0NKXKL1iGxVTyHh3exKvLgw+fZH4042L2D1VCWBd57Mp2hnAgwP7p5En14l8dNTr26wgsXL/CtP3yd3spxHnz803JBBMZVxfXrH/DOt75MPf1oWLmeTdm5epHvXL14dBEu/Ffqkqq1HLnBjdV9Hy+54FWPVELa2ntseyi9ixxcnxtBqPcoywnF0nOMb73Ly6+/zU9+4XliCNy4LfMtbZazsXFCBMPaOKgBokI7hsEHha/F+1ezGdqkFjQl8yrPrm9ybuMU1ghKXX3h57l7sM3ocI/333qR/VsfMBvtH7m0rdu3+c50CjHy/Kc+zZlenyzrsX0w5u7hiJt7u6hCYYoCqw13bh9SzQ4xMdAr8hZdJ6kqHDu2gjOKqDUmc0RfMB0fsH3nOoc7tzh//jydoiBGGVNgrSXPIrPZAVV9yPn772dnbxsQDWCCxqmI1YbDbsHlQZebyhKcZ2Y0VZYTsg5GdSm8xq9Ytre2KKOiv77J7PQ57sYatzRjrdAc3r1JuQNny5pSa651M3Yyx4OHJQ/NZnT8lGgK9gdDPlg5zgf9QNy+i94dkZU1dWyYYvO1IuhCopwH8LVrKuY0JPQqanTeY9DrffQau+f4+DnlxOGVI6iSjtJ0rWZt2EEreSA+KjpFxrDbxSpNcNJPd3iwTwQ6va4ouamMWEEMgQfP3s/261vcUpF/+m//DRFFd3mdz//M32Wl26fyjjdee4Hrb34HN5vxcSbhfu7h89za2+eDO9vpxJN3oEFeG+97NIy9J/JcrKsn8HWRrDanOMzpBpHdKzP2Pqho3Ws4RIUSlYYcSfkiQnDcvHtXXslmDPvDD7/n/FVohsew8HXdqIKHWsKlpo9QWzJrsUZzZvUY2cYmT97/MAeTMYfTCbt7d7l++S0iMBsfcPvaJQD+/df+WOqESbf31PHjPPXQw2weO4arHfsHB4zfuUXlS2osuc3wPol0JcTVlSUzPD7l8NYieIIvKV3k/csXyLRhaXmY6qrSIXRjdsjGsQ26wwK/59qylgoBbRQYjdeWSW4ZR0PMIraK2KlC1ZE8i8RM460hWkNneZXBykmmuscsBJaPn8ZnjtcPdjhcHbBb1jid8UG3YF8HnCpRxrAyyQnZMtePP8S765vs6G0erkrynVHShkp1gGbO5EJZWwEkpb7FtRKVYqwUW67ETo5uit/v+NhGmTcMnhjQoaJjYdgv8MERgiPXOUEZVtfXUFrz7rsX0FmPzzz3BMeOn2BtY4Nev0dwgf27+1x59wKvvPM2p5YLvvXO25iiw2d/5u+wtrJGJysovePF7/wJt9968UM+TCtNpjpoZTjX+xRWSQf8xdGLHExnzKq6/d1qJKhwME0+Ge4JMZu72kotM5+TsvDjxU9ayDamB6MY71S89wf72LDCWvY0t+s/lRtss/YRSbqYvLJafO10b9saaPM7KhmkILwSOqdSTGwwLtXmyTGlBr6WPKacKTKryayhbwuW1wbct3GcZx58jABUPjKeTfERrt14n8P9HXa3rrJ/8wpX79zl8rVr7Tlurq/zM1/4PG+8+Brv7ezT73XxzlHkmZRKKsdsf8TBdIzqGGwvxyhFN4OJlTsQ6gk+KzDWcLi7T57nRGVAazyOUTmWJkgjTfMiQZmeCZo8ZEJOsZDlMv7CVQHna1zpcd7JPEylhUFmFEsrG6wf3+TarcvsZT1CHtkdivDZhAKC5dJal/HJTzFQPfLOKm55k63b16l2L7NZQadqBjclGbCoZLNomiOiaoEf6RGmFX8MaO4WGe91NSZU38+8jhwf2yg7/TwJ6np0mHHt8nv0Opr+8pIM71EKpQ3dwQBTdJjtj8i0yGzUIXIwmmDzDlVVo4sOZBk7o0MeO3WcP3/rbfprm5xYP4bRhpl3vPSdrzL94C1+9rnP8IcvfI+uWeHBpc/RNX1yk3OqfxINdG2OjpGt0S4XRy/x9rUbR857tOWIo4gaQh0FtLjXJpt5F21/XWz2ujg3VEXSS10MdkVywpWRy189xPpVzhQ/R4hz6HsymxGDMHeKTp6YNEfPQDc1uvRFO8ouJtBm4Txbma223jo3yiPbdpT8xjlhQWml0GUKrZTMm7Ras5J1QSuOPfwpohJdncp7RtMJN29f586Ny+zevsL+bMq/+sof8b/95b/O+7/1e+g04QscNhhsqPnMmRMisJ285d7kgKo6pAxjlM1xRtMb5hgj0pkqyDiI7rCPzTMOp2NMtwC0ADblTEpOKoiETKHIO5Zuv0en06Ga1YxH+6gIpUuEcC3qfONZSTWZ8fCxDcbTQyKBjdUNoivYLfeFcBItxuZkg2McbDzKbuhQ1yWT8W1u777K6cMdVoKjcI6YxmRIWaeJZJrNNT2DEEWOE6S+rqCOGYd5n7uDbN4U/AOOj22UJ05v0rGWUJW4eoxzM27fvsmZIqfT79KsjP5gQKffw2Zz6fyYUKmD8RStZG4D2rbiy80RVQQdef/SBW6+/SL/+Jd+ngt37qCAHzn2S5xbPtN6ksZAQoiUdcUL21+liqMjIWYTWt5+vWTz8x1BCvmoUFXOs/1ZYyAoyfGan6jFwFVKOAfXK65/a0x1Z8iZ4ufITZ/Kj9HkBCoqNyZOpM742EMPHQmC2/df+LwhX8xV7o561cbgBNlbAKgSgDVPeeRi242GuYMXY3aiGxMaemTStNGajtL0+kscf3CZ8OATuBC5dPMK3/qt/4FXPrjM+vIAo0EZQRgpx9y/usx//8//BeM0Sq9bFOR5xheefZri9Fn6gz4YxUEIXN/ZxvUlN9Qx0tFGMM0IKu9Q5AUH+/vcurtNPR2jvOP48U3sapfoArGsmE5Ldu5uoxwcW9+g9FOijuhMFAZMBl0NZb3PZOzJOxkrK+tYlhgddNjeuZvG8kVKP+bq1juMZpG6rglhl7q+RTbZZylobBTBLgHIVbtm20pR+n4kNYRHIDU362ipiz4Hy/2UOv3g42Mb5dlzZ9Eh4KdTdrc9QRkGvX7rSWKMRCMzJ/KiaMcGNB7FR1qxWtBpoKjIMJokERhVYPtwxDvf+j0+89B5vnD6OP/zn36Dnl3neO84iyllEy7EEHht503uVJf4tZ/8Al9++XW29g458/QXuPrKNwC4+07Jxo8UxEw8S5NKtj6oCc2JbauTSgapVGqwjho3jozv1Lg6Mr4l5IiD9yuMX+FM8fMUpg8octMnV2vM4i3C/u8BnuXlJZZXVuZWv3ikBDLI8AlikHCJ1FYkoXUTxEpms4AHHXmZ5htCcjjK2o/t0yBRwcLcpqMQqds3SQvNaKk721aM2nP2zBlu3rpFvjTE7AeGbkqtPZPplKVjpzj1wGNs37jC3tZ1/uDP/kIAK+YbxGMPPcAja2tsHtsgG/RwnQ63qwk73lED5IopnrWlVbqdJXa37jCIHWbWYoNCjxyxrghTR6gdk2yE7WdMfUlZBTqdgmFvgA+G/cNbqLzH0vAYWZGhHNi8YDBYIoZA7RzlbJ+D8U3qGIlaYTLN2vo6nxouc/rSdQmptZbZMOkGNgba7IgxKlyQZgJnZd1br5hkOZP+kGLtOJPwgzER+ARG6RwU2mAxFM4wzDusmZ5E1d6ltZBhjKbQGcrLNCqJsQMaaZXSMc0LsTk2y7ly6Qqfe/wRvvP2e+xP9rjw2qvEuuZvff4z/Pob77J/OOULx/9Tcp0dQU2bBTmuSi6NX2BlacDnN1f5E23QNuP42fPcevd71NMJwUVGN2o65wxNfvKhpHGBkC5eODXBoij3PFe+esDk7lFGhkKzpJ9kvfgUeTLIeQUlGV4QtPjc6fNoY4mp2/KId0QWrIxWFxEu50SSotl42pWQFoJ8P+WYqFaqJE08SihzevV26tPR0LkBuhQNqaI5syY0FvI2RKq6SuvAcfv2XTafeIbh+jq93HJCVbz85psA/Mwv/Crnjx9j6h0z57h49QMmkxHTyYRLbwih470PblK/d+nI9T947iydbofPfOoJennO7vISh0uBSZHBsmVMJMsDHkfwGuUCwWq0zTl0E/yuY1RO6A2HrK2tUXRypmWNqit89NShh/EdMoSRk2UdnK+YHh5QVhWdjiUjjZHPClYLy8rBLj0c0Yj8KEqnIVBJ/zadvPSGRmmYCJGowUShgs6KnGplmbEu2C6nP8jMgE9glK+8+g7PPPYQhVdQRyIOXQeiq5OsYSB6i84ycpuRWeELmhiwRLLoyaLDJAJkhiirH04DZ4oc7z1vfvvr7F27wj/+T36GqBW/+63vcLb3GY73N+c1onZBScng8uG7TMM+J4cn+K//7EVu7exy6unnOX7iJFl3QD2dCDPofUfnjOZDFpFWZ1QitqRT+KgQQKncdbz3uweESU5XbdLVZ9AYCr2GVoaeXZfBqEeW2IePE8c32jeO93SjLHo8kdo30jqUgKkQA7WrZXaJb3oHG4BBVMabtz4yO1TNG7caBzj/YbNrfwT7t42YFyQs0ut6HyhdZLiyirUFRZaxYnNub2+TFR0GmQVX0zOaXpGz9vDDoKT5vH7ueTRwZ/+Anf09tnfvcuXCG0QUH2zdoJpNeD11qwAMez16/R5nz5zi0ccfhSLjQDtmWnNjf4brFoymU0azKW53D681m+fvZzDsy1VXNTp4Yg2z/X3sQIxm584u4/EhlStxdclkMmFtdV0G0TqPwxGo6FVTOk50eYNulP+Ew601OBpZyyRbo+bYg4kyQa6ymtuTMVsKKvXRa+Pe42Mb5fbODju7e5wYDNjcPMH0cJeDgz2yzoC80xf+YxSGT6eTy8MOAa0UuZU2GT0/fYIVIrFSmvuOraKV4u7lCzxx32mODbv83/7Nb7Fs7uOZ419Mqmm0XILGID84uMI7B18jErl0/SZKG9YfeoonPvdF2rgsHXuXataezjFLKdy4p6gxz8VovUq553nvd/aJ0w4n85+la9ZS4aHxbnr+y2kRN0n/vUfzjqr535E8UUL6FpltQtAov6+1Js8zsiyjUUjzTjRzayfiTb41RnktpXRCmpMsyoescuGCjyBEi1+Twub5vQwRbHdA1ukRlUVh6Pa7XLx+g+PnHmFVGerJjJZhrlWSzlBk2qCt5vTGGqePrRHj/fjPfhbl4e7hiLKuuXrjKrdvXgUUe9u32N66zt3tXb770qvS4G0tmTV88fnPoqylJrJ+9izu+Al2yxkm11gdmMRA7UZUsSarDf7Q45XicDLjztYtOrbgzPGTHJYTYrhDXTly3SUPGXrQ4cSS5cx0TFcrwKIy0pBeWu3X6JOGTRSGVFCRoJs+nIiJOVMFUw3eOT5K5uqjjo9tlHuH23zrxe9w//oG5zbW6RYGXXk2+6sCAMZAUI4YaowVoMIoi3M1RI1XTfe1FPC1EfK5dZ6n/D7/73/0n/Ldy1s8e26T/8s/+31i1eGJ4z+F0hYHiSMpC9a5itKXvLH/NbJC4UvRIP2RX/mHrK6s4Lznpa9/mfJgpz1/7yLbL1dsfrEgGuleaQPNKB0BMj9TyZzMGt777T3UdMiZzi+Rm26TaQJzwa7WulL54vsdMdIygbQyPPXQeb750quCkmpNTGPAI1E4pTF8OPVsvHhUMrczywhREUKUaWchyE7vPc5V0lljrLREmbk3VR+2zuYsaX8phfCNm10sh5tOB6dEVLuZvxmi0PBUSJRDIKZpX1E15fVkpEq6QlSCnSOajX4foxVn11eJTz8NSjGtPeOyYn885v33L1KWM95/80VC8PzR1771obr14w8+wLGNdX70C8/hMs0Omst7MnDIKbh15wMOplMyq9lYWWG5m6P6BZ1Bj3JaYsqM5f4G5sSAFbfPycqjMuk8UZnk187V1E5KTlplxCiN3wpFmnuHTbfRG9jtW7Z7BhUNufp45vbxx6sbRRk9N/bu4nzFoJsRjeP4E2fxzuGCR1kDSvRPVZQlPJnMZOhmkJg7JaHCrQwVNZ6dvV2+VGlOPHk//9WX3yJUXZ47/ius9FZbvRvh6DnquuTV7T9ju7rM2lrGL//YF/iffv8bxLxDr59z9+4dLnzn6+xfvfghh7V7uWb16ZxsTc5hjmk0w7hV0h7S3Hl3gptGjtnPUJheO5K9IRLM3evcU0ppRUkf6EeFySSDUJq8kCE8rpxw8f0LPHL/Y1K3i17Ow1gpnjfX3nrQxX/CxdRGkVnbAlQxpoFDYT6qPSQR4ga6lRqgERAptheTQLAmZCDlp/Mjxkje7eG9jBaPUZoSFq+wGeIqxhkWbDuCj20ZOCrHYsgQlJb1kbRxu0bR6XU41u/x8OZxIoHpj34BFwKXblzH1TWeyLuvfY/ZeMzFa7d56+Jlvv7t7wLSs3v6+HGy3HLm5Al+4dmnGLmaXV8Shz32/AgbZQhRx1pUJyPkGqdrlKmxweGDS/m9gFUxBBFvNhk+OJLWAATQMQ0nRtTrSmUxKyssnzhOnEHH59/fwBaOj8/o0TmRSKng5uQQNa7odUQ1LtSO0XgGuqbTtxRZQZblKGUpy5moUutICKk9y3tscDyweRw9KLg9rbgxuJ//5o/e5LW3bvPUqf+MpWyY1qDwDF0I+Lri9Z0/Zat8g5PH1vhHP/8l/l+/+WVmVU23P+SVP/4D9q5ebgfcfOgafOTyb49ZezSnGGqWzmcy+MksLD6tcLPA1ksTMrXMUnY/ShsRWmrQNjWHcloJkjg38cVFfuRIfx5UpNPttsTx0XjM3YMDjJHHmVtDryjIjEgaWqOTWLEUsFGi2jDvB5dNDwQl1EpT2NR8q7T0m3pRB3feU9e1SGT4JlqQCWEqjZVD3ZNnLlxOiNDvDlBRY1Do6LGh8cJzhLgxQvWhcD7OhfXiHHaSvxFR7ui8tBI3xds0fdsYTdcYlDV85vx5aZ9S8COPPo4PcHv/kMPJmLdee5GqnBJj5PaV96irGZev3eDr33kRrRT9bhdjND/7V77AarfDsftOUhrF1Gdc2NtlUnpUdYCb7TGOU3Q9w89qiAGrNF5ZnNZkeZYaLDQxeEzUmKjTXm2ZmoxZt4u3Gh9KygVSy192fHyjNJoQIzMVWtXvwhqcC2mc+hRMxDMhz6TFqtsbMhofsrW1hdcyozIED2VNnByw3u9w5vwprlUT/nf//e8Rqy5Pn/y7DLsreCc7cAgyOzIEz83x+9wqX+fv/PSP8SuPrPGvXr3C9sEIgOnuDtPdebiKUnR7S5y+/xmi0extXWP71kVCHbn7ukyuuv4XUzp9TW8zS5mueLJyz+OncDr7Kay2kkcmvZVFFDPCgp7nYgVUs5I9ya1ykcjQ5JLyLieOH8MYk6YNW1xUlGmc3qR27E9nWKWxWtHJM/rdjsjsq0xewzu8D2kmSlJfi9JGp6NJnkr+o5SIYVubkUdD7DTj2qXEEbyEvbVrBKpVO/cRxOM03lNrmXxMkmPU0fHy5asAPPLIs+hFj3vPoRb+24BJ8zJNAqQarmGMzXgO6ehXtdD3mmgmNRnr5PGNMZxbWYGVFZ44dQoQYeadwzHe1RyOx7x74W1qV3Pl7ZeZVZ5/87tfFlJ98ta9TsHnnvkUQ614+NwJlscHuOmhdHqk+ymbImgsRmd0e0PGVcWkcm16I3pThph32O9YpjGwd3CAmXzUXfnw8bGNsgUSIqgQicYwrSK37xxyYnOD5ZXjEHMZfV6NWB4uEY2lLB3T6YRuv0+R5+Q2w/YjvY0VNnpd/uCbX+f9a9cZZCd5cvOvMSxWUC7igiIGTQgyl6L2Nbdm7wDw3IOnGd16h6fvO8ObV0+zubrCiY1Vfv0rUpfs9ZZ5+Mkvcf/Tz5OtrlLlluruXd7+rX/Jtdtv42KdwjSYjQKzUfmh613habq+j/HSbd+osZGKyOKlEn0slSearoGgwKqj5GO18FnTKN3eW1cnbVuLsCslVK1DIDrPqPZsT6bk1pBbS5Fl5JnFKtEgzbTBKCGvqyDzPkyCaFBzecx2y2gcmxFDbcApH6TlTVQEhVztvfQMXnn3JQDu39jkbjQt60jVjlt37gDQ7/QWrnXOCr73Dtx7X+aR/hzgkv1kXq5RAEkzSAGx8gSEAAFNnmqkHUvaLdFKsQJEbVgdDDj76ecIBMaf+qyEwLdvUlUl165cYLR/Fx8CX/32d4kx8mffNpz4hZ/gF4c38JMR8fAAgyDyKiqszplVJXXwBG1l+FDw0tSN1LUnRcHN2nHrxjb1QUW3+iGjr25BgUmnncKR8e7lLXrD4xjdIUYrmp5OMZuW1MwYDJa579x9dPo98k5Brg0bK0u8+MK3+N0v/z6uMjyx9qscH96H0RZCTOCFwgVF5SquHbzE1ux7uDDmkQceoJ4prh0OKCa7/G9+7BluZT3+/Z9/D5Ri/cR5PvfL/wUrg1UiUAOh9pjegKd/8R9w/wfvQ3RMDu4y29/h+s132Dm81SRT7RIaqXfItMa4HkU8TsEKyvaxWUdugOj9p2G3afEkiQKd8rbFYzHgFb86v59b77zIyXOPHsE8kzaGhLvIBLOyDJiqhlhJ/VcrjDH08oxekdEvLHmmMaRpYYgXbXLRxag6ElpgSiVJDqM1Js/SspDc0HtPVXtcLTW2TrfL3et32HeeTBuOx6ptQYNmFodYlY7NdaZooiVpHL3XrUnGtNsx1/5dvIMNGt38iaT3cxZTVC5pAUkdNyzksiFFXZFIFwHlnt48hVeRzz74MCa3eA8fbN/Fe8/3Xvgz/k+/91X+q6UBzz1wjp955lNo4GfXenTGY+ztLbqHh4z2DjgY7VFWFS4GhBKoyOqIefB+wmYXfWeE6Vum7odcpwwha8O7qEEpQxUt46pgdyQhVXCO6J0QnSdTytoxHKwKFB4ix5eXefmlb/M/ff1PCT6yVjzBg5s/QTfvt8VvIVlDFaSr4uLOl9mrXyfLcn7ssz/GI2ce5FsXbxPDGivH1nn9rVd5+eWXQGme/sLf4tRzP0beG1IGiCFSR8+0rinrGtPP0U89Rt7r0tfSPvbAaEq1tYWOgWsXXmNv5wa3rsuEr23/ampmVjBR5OUaS8V5NoafwpiCTtYXUCMGoldEn3K7ZmzewtGQzAXkCCyOvI3BSY2r+a126E7jRxDigY6pK0NyxCo4fO0YlzX5RNG1ltxq8ahGU1hDYYz0vSZSQUt2b+LX2HiiBFikhR4bAoJSFJ1cSA3ApK5QWnPy+DGWBwM2/Ix33tuVTqFQ43zVki4isnmJQF/DLkqZeHt7mt7De3zpQnjbmLJSzT1Jv9Dc2Ui6f+l11AJnufnQYlealuKRbkNhLdbmYEmhL5zZ+Jv89h/+O+7cuMbvvvIWv/XS6yjApglzX3rkQR5ZWyWuLfO5B/qcnOxLdUHDzOb87m7FH333FZ789JN8tujy0PPP/vDV7JRdE7esFDEzqCyXWQnd40zqInUoOLxzVEGByhIYoTBKcXx1ld/7nd/g3XcvMMzv58zaj7HRPSkSGF52MCngK+qoKJ3n0s4fMFXv8jf/+q/hq4w7d/d48d2bxCxiisidu5d56aXvobThs1/429z/xb8q7TshdVKYSHCiEODjfAZ9LEtUXhCNgaUe2eB+AoEzD5zjdAg8trePdo6ti28xG+2zffsye3ev4f2YO5PvcGfyHazusz54lmNLn6Zje0mnNYlNxe+nxTJngfgjNMi572j+N1+iyfsqlTraJWfRyoiCmhOlBWIkukDpPbqsyKwYY6Yh12KoRWbJrSFL06JYCGnnC3eOvCpI4lm+/fZBOWN5ZYVB1sFooaO98Dtv019e575jx1AanHeyMTVZllIoHRtEjXlGfvTqF786GtIuMJbaP5qXXuQtmkggLr7MkYtTTbC8ILYtYK+VdbhwVqu9Ln/rl/82M1+zezjm6vWrKAWX33uT8cEuX3vvCl+u3wXgv/2IJ62Aotvnj77yDSnd/M4fAvDf/N//nx/x20ePj22U6ycewigRrxJ6k6YAltePMXKKqpb6YzcbUqsKpyxBuUQ9Eu3Qt995m/XeMzy2+cuykybpQpV0YQIiQVgFmLqa/eotlpb77I00d7buUNZO6p8+8ND99/EHv/nPADh37tM8+sWfpzZzGQxRl6FF/0yqQ4q2iyaLGpNmL0aiqOklyppeWUOFyPG1dQDO1jWmdFS7e2x/8A7vv/sXlNNDbh98g+3x91jrfZqTSz9CrjtzSty94Zfinu8vrJrkmVouZdsZ0sQmC8FeMsw2/FVG4kQAozBGJXK3aJ6WTsAYq8EqTSczdHNhXGU2aR21p5HC3Qa0Si+7WPDQWcby8hrKGMnhrGI0mbDUW2Iw7GLNXPaFGHG1zKX0IRJDLWFtApEa5pRcxxy5bS7z3nvYEhka41KqnUYtvOpm15r/hSjx3XvvEcNUUVBnpSWPbf4uGXY3s3Qzy2q3y/njxwB4/lPPQIDbB/vs7u0SY+Tm7RvcuvZ++/pFt8+jjz/Duc3jXN/ZpnaOd15/mZvvv8vHOT62UXbXTpPnhRSsjUZlmg4Kj6GqHLNQM60OqXb3qQ+3CYiKXSOy++L3ZKDN5uAzgMgbqtR7FlWafhTk+9O6ZHf8FuBZWz8usxm9yOdHHyms5fbV93B1jbUFj33hl/DGSniWhHJVyiuaGqQ1GVprjDUib6kMGpMADif1s2YRKkXQKk2gjpAbyCKdfp/TpzY58+znKKdjbr7+Pd5/8xtsHf45s+oGT2z8KjGKRkuMH76HDdOj+dgcaw88STPZec5DXfi7Zj21fLwwz6daEWCVwkRZlKYJF4NJU58idYzUpWNSecl7rElsK0WeWTKrRTWwwVCbMtGCVZq8IO908QFU1GQL5+obxp9iLs+Y59jUABoDuNql8own+ii5sWqmLi+wnZr9ifkGFVtjXNyg1NH7+X2xlPkP2o1YycBbKS/H5g2PbAVxXr8BRJBaGTi3vsq5tRViDDx1/zn85z5Hk57QOABg6fRJIjDoDfidH7ZRHrv/UbQyxBioteh8aleDE30WqyuMcig3AiUTDpUSGExrg0tgQAzCn2x25UgkapG7cCGyfXCRrfHXcGxz3wMP8sBDz3P1+pbshhFUptk81eOrX/4yxlie/7n/kqUHH8ER72HUyMPVFgqlyGIhi0VrMmvbke9NT2JMyWwTDgmY1QR4gvmFJO6VGUtWwjH61L1TjMY7TKstjPfEaKijp/S7R+7fexcvc+b0mRZ+n05nrVcf3b4Kjz5L2xnLPIhrFshcW6fJmxrPkIAcJWPkom6UaNMS1lLjbEcJRvl7jyjYT51otbZGmqWpxsZIfdRoyuCYTQ5l3F5VMbAZOGFkZWnAL0pQ51aKdzEcVkmG1CiyLEdHlQbqpCnPtSN4h3Mu6Qg316dS7bRhSzVlk7mZLHrae/3rfDU04W97N+VrjaC1HN0q22RiQRic9i+bfLyp5ybVuiQ5H5OBN2R/mnatD+kmf//jYxvl/qwUN4+CTJNlGpvlGBw6iEZPlnY+rRUzJXp7gnrNXUdIquYNIhgA5wOlm7Ezeos7068xWOrx48//Mje2Kt65dJU8Ey8XlWJlZcj3XvhTQgjc/+CPcPpTzzXqh0duaRPF2CSx3/xUdmSp44VE9g4xtAu+hVaimISKoEOgSo+tM3Nkl67z9W/8S26Or7b3JzDl7b2vcbL/OZTpcOjmxGqA0XhME3apqLmztd2iluVol8p5rNWNDzwauMXm8qLsag3gERdywnuXYlq5MfoUjIon1u1C1xhr5RklLvG0FlBMgyCxRn53UpaM7tzg/jNn+ODGdY6dfUjqg0G6mtozSIym1qGl78VFjiHC7FIGCbcxmMLSgk4hyogK51qmWEzdFzr9z6Rp4fL6i898YRu9l4l0zz2ds4rmr9EWcdow9sOExMaAk3ttI72W6UVq/1O0Gwl8lGry9z8+tlEuFYciBW8s1lp63R5D08H6SKwdrtTMOn3qyRKXD65jCdQxUFczZrMZjz7yBN954dvsTN4i030AXKjZmb6Dj4796g1cOOD5L3wJla/w6rvX8VFh08Rgqw294ZDC7LG3u01eDPjsz/19bJ5THQEtYloQap6bxSbyi8ndOhHFjxBiU5cLrQeSxCetryChX3Q1K7slBy98mz+48Lt0bcUXjuUs9QKby5aoMn799e9xuHuZM0t/g0H2MLPyxj13MVH57tmAZwfbvPHlf8Hwvsfprp2gv3KMPC/aHsb2SHGdrN/mahdzsQZbnC8/BRKRqIVQMPWJpluFUQpSAV5+LJKhLsgwm8PJLKWJkSzPmJUTYqkY1yV79Np30nFOOFDpfOW8AjJcOM1GuSdEXAwPmhY2kxtQnRQhKIJzuFqMta5r2ZsSJbIhO7Q76kLEGRsPqRCebWw2ijm3uDFJjhh4U+ddOL8jJz5HkOfX2mDYYeHmNy/7EfnM9zk+tlG+8Rv/9Uf/oFld6T07RcFf/alf4M++cQOlhII+nc4wepWlpSXuHLzA3dl32z+KaWdZXl7hMz/yC1x4/zYHh3eIZChbEJXkKhi4/8wKf/Dv/i1Exef+6j+ks7EhDBZkEm/zJNrcJC3CQMA5J3kMURafkq4M711Sw47zRZsehI6gg+iymHcu8eaLX+O93TdYKwL/5ZND+j1NnUU6WmO1oWs1/+PLu1w9+A365sEjt2ltdVU8dEwSV4uhdoyUe1uUe1ut4XU372Nw+iGWNs9hTEan25eQu9lsFvLWVuMnqmSWDVAzX+wfatBqvKyar8zmFiqVhK7TFOcsS9oy6XffvXiBQWfISreHKZba1wtOBtokbUqaDrUmh1PJMBfHmM3DT3mNRbkUCTFlE9Paih4Q4oFijELHq0WJ3SeGUfNS89EZ8pouUQylmymmdaApdNHaWvPs28afIwa5eJ7z1avS+TbXKBUxeY+bBweiu/vmK4z29/i4xyeoU3qWhxl5/uEhJW1oBYTg+Mof/x4//uM/xa2bdyjLkv29Pd4cHfKLv/DX+Po3vopLUonD4ZAnHnuSANzdOeTl195hVjlikJF6NolEeRt4+pFT/Okf/DpExYNP/RTHn/kMPqbO+aYo3SIEzU2W0LmqZSJVi1cYqaKF1AbVCBPHxoulfFdHMKMxt1/8Nq+/8vuUfsJ/cqrLj9/XJ+aaSnlC7Rj7ElCc7Rv+/lMD/sdX99irXzxyj+4/d5+0/niZRNaErjIc1TKeemblPKyf3rrM9NZl7gA6yxnc9yTLZx9jee1EopfZhZ39SCZ0NNeaB+T3PjH5zbigTQQ0DdGkexHb+woxRDKdsXHiFMPhCoPM0O2mcX4hMh5PqbIMldT0dKrp6eTFYuvXRX29yRJVWj+xmVciOibzs1RaDLqJhlJYqK0mLzSQS3kkRHxdC1faOVydCOMR6iCDiIo8x9gMbYV4odVC2Npuy417m3vIxdjDpXmdSsH7t7coy6oJXLmzdYsbl94BIgfbW7j6w2yxH3R8ovmU/+gfPMLJzcE9z1i+8E52otms5v/x377Fn3/rT/nc577E1q3bzGYTuv0ely5d4bEHH8eajLp2zKYTXn/ldZwP1OhEJA+po2Qme76BMyeP8e2v/gbT0ZhHnvwpnvrFv4fNckHvSOGlbqpQiobRIWyUirqWRlWldesYQPKoefvPPB9SSqoMg0nNG3/0m7z5/p/z4MDyN84tc2IjYxwDrpIujOAdxNQZozznBhkPLFsu7d2jUqCk1cpFGXzz5ruSc/a6mv/jf/EIk6lj/6CicoFvvLjD3kHNtVszQESQDy68xMHFl7nZHZAN1xicfRyIdNdOkfeGZMayUMxIc1nuNUbS4lcf+t7it8QQ5RMVYeeOhOEPnD3HOHbodVfQ2pIFZHYL0OkNsJlENnXtqErxjIJ4WzHOFJ4aoxdkTubvKuHiAtTbRottp2nygvL7PuUbzXNXVmGMTMjKYj4XIKMJYVV6zYW4Nf1tsyksBjCTumZWe0BTes87ly4QfWT7zm22PpDnV44PZTDtPYdWiscfeZKV9RM89MxPMspyav0Rz+Mjjk9klFkBJpuHHvMLBp3JblZb2RXruubW7dtcv3Gdp596mpOnTtDpZhilyHTBeDTh+q3rjGYlzgdsp0On24Wyogw1wde4oDlx8gTVwRX2d3d49Imf4ulf+vuoQpT1ZBJBs9PS5i0hpJ3SOSlkk3IPLZA/TZ4RZJweDaiTFool0pnVjF58mfeufheI/KNHBtiBYtdNqSuPVjblNCblKHIKznt+4mz+IaMUUTAFWrM/OmjZHZ95coVux9DvWjZWCyKRR88v41xge2/Gd1/bYzrzvHVxxO5BjZsc4iaHTG9fAUBpgx2u0t28n/6J+zl24hxFZtvNqUmq9T0GcPSz1l+1HqwNZ1GMklF2bI7KlzFB+J8mBl774H0AHnjiMzKXw1gypYhOADTvHVVV05Q6lBKwzRh5FkrR5oXycxmPJ28tO8PigNs2l27zf9UaroSRqT6t5oBNs8Ec2YBT32cdIlsH+4QYRGf4rddSFKPYvnWNw+1b7b3yzhEBm4jwSil+7gs/Tb+3hEPjgNPnnkQtP8DIwNtjxZVx5NVDGFlLZeCff1/rmh+fyChDIBGU50ha015FFCBg8ZiVJbOqRBeW0siDyPKMOmrM8pDedBmvFWXtMYnOFYg4J0NEN08dQ9dbvPnaSwyXNnnqJ/46FJmUZVxoW7SaB+WjTAb2XmphTS1KJ46o1KQUjfZrO/gW6VuMGtBgpiXb3/gmf/H671CHkp+5r0M9CIxdTQiKXn+AtZkguagWvXTeUdUVa0XNMFccVvP78c67F3j0sSfp2oy33r4t3SFK8cTDQyIxEf7niZa1ms2NHr/4Ez0UkVnpee3CAa++vc+V61NqF5nOZPxgvX+Xev8uB+9+l531EwxPP8TyiQcYLq1IA4DWbaSrIBXcF5+VWljkR78/z63kJzKZukaFwMraMr/xtd/GFl3uP31f2pRkwI8mbYI6J1PySiH41OMZqOsaraUcY42R0F6Jt1RaukBMCn9l2FBoQ0th8sizk/qsAhWIhBT+pvNtr1Hhoqyp7fGM7b09iIrtO3e4/N7rbN/8YJ5/L9yBpV6fjaUV+XywxF//4i+idcHJ1XOg1znUhp2DwKiOTKOhUnCzVhzeUdwOjlvBMTYGpzVETeb/I3hKYA4wNBefFmRjoNYoHnpgyOtvH3Lq1Alu3LoFaXSYjwGvIsoYdNSQW4K1+LpKw2LFcAFWVpYp9CFvv/YyS0ub/OTf+ieY9dXUVe8JdYOYzonWTftVWNhZGzTPWjkHFh6aKA40NyLiTKCYlFz4rX/NW1e/w48fK3j21BInlxWlr9FB08s7ZL1+2uVVm29JqcdRdAqyvORYt+awmnvL0XiEjdIYfOGiiEbdd7rL+bM9GXswd/dzwKm552g6heZHnlznmcdXiTEynniu354wGju+9b1tDsee3YOacvsW5fYt7r76DWxviC26bDz2HKfOPUqeNqUFmkJzJ2je/ehH0S1yrm5LUsK3kPYlbGRnfw+0obC2Df/lb2NL0G9CY60Vmc3JE9gSfMAHj3OO2s1agEWbxhN5jNbzZ6cSrUEpwDOfTC1hr0mlt3Elw6W8gvc+uE5VlVy58C4H21uUswnVZM5B7RYFTz/0CFFrBv1lfua5nyXTOToa1vJN4iwHa3DRMB4pYtTs7njGGsYGyijN/7Pg8MoSlWwmXZvTVx5pw46isP5RjJKPOD6ZUbZecaE42tz1ZBjGwpkTXV55Yw+TBpXWdb2AsjW7ryLLc4w17cuqFGZGBQ8/fB/f+trvMhge46/+yj8hO3USx0LpQ6n56YSGO7uAoGndMnikrtV0cURS3IsiYiMEowkmUtQ17/3Wv+Ltqy/wV451+c8e7nO75/Ezh8ZSFAV5twcmWwQtmYdQQvzu5AXPnii4tD83yt3dPf67/8//AJDU0zR/7WdOYO3cIJp71D66hQSnkTa0zaY1tKwOO4DiuU9tMJlW/O6f3qSsAu9eHjOZ+jbUvfYXv8f+9Yt0V47RXz3O8sYJukVHGgWa5wdMqlmbHzUhXzmbsXvpNQa9Hlc+uMq51Q2s1ZgYGR8c8MVPf5o/fuG7vPDyd3j6yWdZ7fWO1PnkelKLWyqxtNmugjzPIMtwtbTTxUQmEGK7xhpLFSsOyxKjIlZrrNU4PG++8zoh+BSoCc86usDld17FVaV47kpIGg1p45HzD3L29H14DPedf5LuygPc2DPUsUCT8+rYsKIzlqvIoVJkGowNKYM1guRHLaPnYyDGNDRKmAh4ZagxOKvwTY6qAugP4d/f9/j/y1M2W5s68vP5NxSStwXn8c6TymACSQcZhydlBzEO0XiJPHD/fXxwWca6PfO5v0731GnKIGRycY6xpWZFICaKWlMEVlrGnOnkJRfbfZIrlU9CaEnkvXHF27/961y4/iI/caLL33l0yEEecVOHD5B3euiiIGqbBIwbwoFub4xsQYLsPrhakJsJlQz6wBpLWVXEGBkOLP/wb9/HA6d7Hwr5QbetVM29bQy/Tfbiwn1XYLViaSnj137pLMTAtZtjXnzzgLcvjbmxVUKMHH7wNocfvN0aSm/jNNlguXllIjC6cRlffUR7UYzc/9CD7B+OKcsZSlm0NajDEX/t8Sd54713eeeFP+HSa9/muZ/+m/T7fTKbcXJ1DVCYRWpg85Ip/PRejFRboQNiNFkmm6hzcFjWfPXP/5ib737vI8/rQ3dPKfq9PjazaGP4yZ/+RVR3hY2zz3DAkFt1wY2pooiafRcw25JP2xDoxcBaZsi1hkKIL44kEh2lWSKgUrN1um/RJ+FskYTzRKYE9kNkHAOljrgjjXo/+PhERtlogQJpUcipNbMU7n1n2SQkztdtHVBJn5uWMdU6gPGRDIXywm1dX+ny+ncvcv9Dn+f081+iRlDSRsqyQQxUUktr3ks+OcqhbD1aTJN/hcIhoY8OBBUYlJ63f+tf8e717/J/fWad9RXFQR6pay/FeJOhtWjglHUtUHt6EEpr6ZbRBqtSCUApNvod+la1RvnFL3yR73z3O9T1lP/D//ohVpaL1oMshoutWsDRq6JBXhK23N5h8fdyj8sq8P61EbfuzLh4dcrB6CO6VdImMLlzDe5c+/DPv8/x+jvv8KUv/RV6RY4msjrs0HOar7z3Lsu9Pte3d6hmY775O9IkYK3l2Z/5VZ565AlUCNigFsA02RTvBYGFKxES68gQjOYb3/wTbr37Pc6cOivtVen8+8NlvviTf4OgM0oXqSNUMRIxjLP7qJyhMAU390pmKvD2diBERWVygpWNtZMSHqUCWgcsQYbcKrDKYJRMoxQf1KgXiwd0BFxAJl6r9H0MDkVNpIqREqij/M6HjOMvOT65UXJ0qTSximIxsW5/CDHga5e8WlpOWtNw44zV+FhTK49VgScfe4QXXvwzjm8+yGd/7u+BVnjnk2MWHm1olrPSrfEtvCPtCbV1ywaIatZDapDSkbVJZPqtl3j3+kv82PEOxwYwNVCHgPMebawgrSjqStgksruDybJWgMqY9BAVuAhfvrTPfmXQFASmuKYwrqDo2nk+9xFUrjYGXwhom5kiESjrwNsX9zkcO8YTT4iRw7HjjbcPOZzUR1KX5bM9Nh9fZvn+PsEHxndnbL2+326iLZ9WKTY/PSTvWXq9HmVVYa3IWgYfef033ufrX/9TVldWUUqxt7/Xjof/qMM5x/e+/G8I6ld5+pHH2/HkWqnUFN40RKfboMFoJSp3ovvPxRtbXH/rBT73mecZPP1rTLINLDlKKSaZ5k+igSj5Z69bsLw0xNoctz9m6/ZtooV+pyueejaV9aYjyjtUQETZtMhvWiXGYJXGKIsOoBMxJcSmuqrxUeGJMphYKeqocQqc0jg0ddRUOlKBfD/93Ycf8vc/PmH4eq8rVG3Y1uze9+ztBGA6mxJ8ANc42pA4pRWZCWRWU+F58rHzvPydbzEbV/zs/+p/j15ZowphoU1pDoUcXbTp3RahwhYul1C5Gc2hAiKboR1974hvvscfvvKvOTuI/MoDXaZW45QU95uNAIRE34xBK2wh3RTGSoG8ndoLo7Lijy7e5auXJwyzp1nJn+LG5Df55je/Tki84P/l965xbK3g2aeWudckGyZSkZsEskRsplgeFijgYFTy3/3PF7m5NT1SFkBB3jecfm6V3mbO8EyBQjFY7ZJ3CvZHY5S2rB5fYv3JZXwIaKOx1tLvDyhyuSabZ6AUznmGw2UOt/b4zq+/ymR7Roywu7MHSrPRf5KVbI1z/QfIlKWTdZjWI97de5nr43eowhjvHK/+8b/n3NmznFxZTlo/Eiq2ekcqgULRS8+lJAYQHdvbd/Cuprd8jFdu7KHX+nSLnLzICNomKRBQ3nNYzvAjzcbmgGwjJ04OqWPEaUMsK5TPiXWF8l7I46LZj26I7kpSD2My2TzaHlJZZ8IEInlJpASiwGvRvPcq/Y6GWkOlQpJU1XwoJPgBxyfOKY8cDez5IdwuHQopmCdBprr0zCYVQdW42ZTR3hYb6yusLK8Rlebtl15ke2eP53/6Pydb32AWAh4/L10s8J+0Uve820ddeDLIKF0erYI1MChh+dJt/viF36FrKv7OQ13GXUU0TduSvGbTUiUFdk2WWWySQGwAJ9l9PBe3D/jnr+1wd6JYyp7g9OBLGGXJ9K+wNf0Wh+E9Qoi8+OoeAH/wtdvf99b2uoYQIrMy0Ck0953ug4ps3a3Y3Z+PVDv5uRX6xzosHeuhhwGTa4zRGCsGZ61FG8tweYnh0hJFXoi0ZHp02lqyrEgzF2NL/i73D7n59i2+9U9f4vDGjJXOw2x0HmSzf57lwQpL3R59bSlo0G6PD6ucHBxnd/I8f3H7j7g1u0BdTrl54xpn1zfkfkbQyssyb2+0hDAxfSSKPtGF178n0dHyg9y4cgc183R7q3QHA7qDAb3+AG20zOl0kf3DGePqGsYagjYEBdMoeZ4tDEHZ1Hyd5CwToysq6QByETFkAi6S2q9SwzzSBeOJ1Cg8Cqc0XkkE5pXCA7UCrxU+NU3LxqM/LvAKfGKjVPd8Lu8UUS3wo4AH7xtIiLO3xyOPPML+/iF7O/scTqdULslN1jPG4x2Ci5w6+yDWeF57+Saf+8l/wLHnnqcMcsPahb/gBeccjqNHczbtFpFCs7YpJzRIYCDfH/Mn3/jXXJu8z//5qQHdZYtPBtlQ7UzTFZPOoUFzG71UmGvJ/Nn72/zGW3tkepUnNn6eE8OHIDUQK7XMifIEV3df4870JQB8mGBUlzJsE/iw9OBkOmeJzMrAO5cOP/KJ3H1jxF4xpXzE8djPn2NlbZkstxgjm0fwER8CSml6va6Uk9L479xm1N6hFCkyiEwOplz8xmXe/eMrTHdKuuY0z575WU6vnWJJF1g0yqTaYtQybs97qqqmnE2pqgoVFEN9jFtcAOD2tcv4J56WskoURTjVkh4XN/TYTlOrXWRyuEen6HDnMFJXgbA3ojyo2DN30XlGp99nsLpKr5M8fWaoa4/zQdIqrfHR4whYHVFWz5uvlTzjrEXTpDuFIELdURnBBwDQeBWpEc0nB9RRUWslZT4kVK2VptZQm9B2x6gFMPTjGuZ/gKe81zDnJY7mW+trXZSCq1ev8MQTn+H21ja7+wesrq2ztr6GzjTTyYT90SEHkylrG+v8/r/7l5y871Mc//RniMhu1XTMzntakzkucFybo/Fm955pTHktUWEj1LpmqRwzfeVF3j+8zOeOFeglQxWNTGRqJUx1GxpKGioPa47kJoOMkT+7tM1vvH3IWueZ/x9v/x3uTXLd94GfU9Xdv3TTmyfPYAaYQRpkgCAIgCAIglkSSVOBkihKlGzJNm3tYwVbK1OWtNLKQdbjXe/6sUVLFC3LlElJDKIkUgxgQiCJHGeAweR5c7jpF7q76uwfp6q7f/feAd7Rku553rn3/kKHqjp10vd8D49e+BZm440OoWLurFK6MZujN6L6ekJUVu2SshhxsLxFiM1gaLONLvkyqCpXD7/AItzskEOIsrt6gvqgoT4IPPvh67SHcOb+7RTRtbG49dwB23fOiDFQFkUSyDSayf3IAxij8tRHLrPYq3EqnBq/ikfv+G7u2tmmcIFCAh61UYhGbrZatiyXK5qmoV61hDYSCTy3+Fw3D9efe4oYIg5n/gMWSe+eU/vNzchb4JlLVzi8eY03v+4tfOzpA9RPoDU9hQ+EZc3h3iHza3uMtraoqjHlaEw5m+BHFdVkTDUe4wqHStEhuzRm9JXdT+Y3DxppVKnbmojHeaFwZc92jrFiNAJNFlBRmpBNWaH2jpUzoRVyp7FjS/WrHv//ma9A1j3rF84LF567+AJRlLvvvZvxaMqprVOUo5LlpEHdiPP3zPj5//NHKasZr3zXH0DGU4iptx8mHIN4x4lC2S3CTnnnlWv3YsEgi/7N2siZKwf8yyc+SNTAe+6a4sUbXE/7dAvJhzAjwExglZbQAt5TJKLgK7tz/sVjt9goHuTR89/OuCwt1ZIJm8Uwn4UX1Bl423vPpmwAsD3b6AQvE2atPUZ64e7T96TdNj2398zrebIDhFvzi3zmM/+UFz51bW12nBQ8/4mrtzmXwshv8fLtb+DC7BWcmp1mXGwhFAb2EFvMEZcA6DXz+YrFcmn5whComxUX68dY6QGvvOduoipfvnKNz3zxC7zuoVekgI+hcwbIVHLtakxWV2yT2+JHLBmDZlRSRGPnjKKhZtnuUpcH+KKEsiAWjnI6ZTSbMZqOKMuCUVVQ4I1VIvmPvVtkgSUpSko8jQqLomAhBUUkMTdY0+FaoPHYT4UWIURHcKYlW4/lLJOlpWlzHuyzX/X4dwj0aPdbnsijYZ5h9mi5nFs7NWfmgQYgOkZ+xD133c0nP/EbLOcL3vUdP8S5u+6jiULMfhxJKNeuP9xg098au9e1W8lZy/T31XhhaxmYP/E0V5ZXePlWwWgCuIyX9F2HEU1seMZGHhMCBUJbMypL8Ma5+mOfvEaIjgd23pf6HTbWoSkBJ0j51Gx4gwHlvRuY330cK+3bvTYczqQkX9oq8ZWymnbv71QPMnXfz/7yao/5BDZHZ9lbXh1AI/tL9r6zbWgOx52bL2NaTXGFZ1SUlG5JIZIQNTY3IQT2D1bs7jU0DSzbwGF7jYurj3IQnqXWXV5x34P84Fvfw/33bvLX/vk/50P/6sf51M5Zzt19P29+41s5u7HBpCyMRTNvYOkWY4TPfdryknfd8yjxc4EiOERiGj8d1EQ6tGmIwRO9R1YeLTyxXrE62EfKAvGO8WjMuJpSliOqyYTxdMxoXKJtS2xbGgoj1iwcIp5WhAM1pJdEA8tEUqBHggV5UNsgYsqTuyTwYtyvThSX1unRCMhXOn4XNCWDQKj2k9y9p4Rg5TTGQCBogK2tTT7y0V/it379Azz06m/gzCtfQyh8pxqO+YudoKX0QNZe2gvq8Lo94ijrElvq03nLv33sAyzDkm+7f4Qvj4LN7MtDkESIqV2ApnhuMgVF4LBNV46G1AnBUD3OG1AdZ3w5ufkqIrjUDcsPYmQZp3s8WKb9nWWDoLOg7Tua/KMLm3dyYfOOY9Nzx+adSDcCrI3b2onzJQU8pt2zwS4I0XnqENg9mHPz5gF1cFyaf4krqw9T600iDTs7Z3jf1/0x4tYb+el5wx1XAn/o9/8QTz71Mf63f/lP2bv6Ak997mMUZcX9r3w9W9uneNXLX8Hp2YRSXHc3q9TLsWkaqlDjtEhorwLFEcVqaFWc8UFFhwZvZV6tQ5saCm+sEyIc+jlLvw++wpUlflwxm06YzcZMJzN8NcYXpTXxqSNLlChKqdFALd06U6JmIL3YBuHErHIx5SOqqdWFFXWHGH/vAj3a7ePr00kO9Axe6d7XiCs8VTXCtZIo9oXDw6v82i//Wy7c/Spe9y3fB0VptBxZwgemY38uXfvZ38NAJAcQwF6wTJhGMdJeusql+UXunDhOzwpjPNe0ZNWoKhRNpNDaLWI0X9cY2jRGvHPcOXXcWAT2V7t4CkuVCB2qSFI1hJPQp0/S5pXb6uV7z2xsHQvf8D3oBCv78D2VhR3SBcYG83LSPGrGK/djsy6UgnqlSRuLZbEiddtw8eY1buzeYNHUXK0/yV77GEVZ8MjLH+Y1b3gve/ECF/cr5vEcnJ1ysYh8rKnZeeAc/95f/gZO1df4yL/5pzz+5cf50sc+SFTlox8QLtz/MKPJlHsfeAWnz5xlOZ8jIpTtPhuLa8RQ2e7jCrTI/yoCJZGSIJ6IJzpHjEJsPdp6cKnqxHmC1FDUBF/QLDz1/j63vFBVY0bjCZuzDTYmE+46fY7RbMZ8scCFlkoVDxBaS6dhOOuIg8Isqt5dCZAwu96ltoVKQv3c3vHvrCn7/buPjNrk5kY4aSyCQ1Y1VROREAjtgs0LZ/l//9d/l42Ns7z+vX8UX40STw49cxv9jt4V2X6F7aYXWLu745oStpc1j33q11jGJd9w7xg/LiGFLuy72VTN104nlC7Y2kH0QrBOS9/xQMFjN1ueW/w8Pvx+RkVF4U0YvbO8n4ihQSSmVEBnYttPHWwEoOusBIPDiRhLXRpbUlULwjGKkQw2MHrPXGnZk2rloTTlnL9pIu/wON+yrBtK7xGUOrZ84drHeO7gIzRqgO7CF3zL+76d2bmXc2OuPLG3zWp8Gj21SSwnBKlog6JScDU23FoWjPVu7nrPX+CV39Sw1b5As3uZD/zqv+Ti80+yrFc89bkeTvf6hx5ie/8aZw+f43DlCThaX1CXJa04Sj9GXAV+gpZjgh8TXGkmNg6NvbAiBXhvtrFroLW0Cd6xXAXaumE1X3LDeS5fuc5kNGE2nbExrtgYjdiajqnKkoJIbFpCjAQVVJylUFCCGCTPe0fphZArXFzAvQRt+dKxr8Pfc/KWvlodMca4/LqFle1zPka2Nqf865/5Cbyb8XXf/efZue+hVILV1yT22kM7/+nF70d7AaIXzC4dkk+qSnnzgCdufImxF+7bScKYTu2cUSviTThDqrU0bdlT/BsayYIQQRUvyrQQ9lb7XKs/x0ZzNyM/pSxGFGVhO2os1ot6O3PIhDLGoaZnTSjXBY0BTM1235BREQhmdA7qSwemQjaPVZUm1v0mloJajdbsNc/R6WSRdM/QxgOu15+jiQfcddcdbG7cy3g84dWPvofHb2zwVL2FTKfgNgiuovUFmtIFtpcJEU/LmAXwxabkS41Qcopi8gh3f8c7ePdsn41ml5vPfobHH/8Uk6rg+77m6/nspx/jnETC/AaNK3C+JNTgXUXhR2bO+jHBl7hyjCtGqCtRKYh+THBjAp7oRmbeemfCWHjr3anWcTxoS3Q1zpc0dcPh4YJbewcUhacalcymYzY3pmxORmxOpkynUyN5ChCahqZtaWKg1dwKMVs8LsUX1rG/X+l4yUK5Zm51E0hacBko7gafT8lXVdzGlA986Jf4zCc/wdd+w59i574HU0DDolVdqzn6i0QiOXoKR8zZZAYOd/7+7rRPH2Acs5c+/ymuLK/wjXdXbIxd15hH8lXE6i5FHE5zG/OEu41ZiwZECtswVPGqfP8r4R9+vuZW89vsxo8i6pmGB6mabc6OXsGk3EisBxmvkx8uprxdus8O4tKbOiJZsNKTdTyv1i9k0c7T2RzzcJ1lvLI+Q3mz7GYvchAeI2gPQMivG1blhDkXoaoqvvcP/BHmKtzaD8Ryi0/Pt2h2zhPGGyAjLCzS69tsWuduWSaczkxOcdRiLcivqvD4wSnGccnWqTvZePu7GbdLfubaAboz49Qb7qN6/glG9Yr61nX29m9wuNindQtW3tF4M2W1LomuNKF0JbGYEN2U4CqinxDLEYGShoLQeoiF3ZzzSDHCuwr1EFxExdPUjWGb64q9+ZzLuzfxpadK8MPZdMbGdJPZbEoxm1JhxQGr2HKwWhp6SECct3OeOLrHj5cklJ1wSPZvrFxFuhbaUBaeejDfTmBSjrn73vt4fu8Sn/vMpzl19n7OvuHNRMLAdMre1ABwbWtlzW/qAjxoL7+DOEj/SxLw9GLZRHZvXiWi7Iyd+QOtQExGnQsdRWcuhnYDzlHnXBJM159XTUjOTBx/8lXCl261fHE3cPGw4bD9AgdBuDX/FHeX38q0OJXoLV0KVJmsZWQJMfaaTBc0epAu03Kr/Txb/iGauGQen+meUwms9AWGyYWvOocizDa2cG7YwFQ4e+4OHnn1WwDt2qEbW4NnY+M0jWzzwv4+jQM2K4KbEkaniH5i7R80CzadD5KnoWvtnoYtSiSmzSK7JxFYyIjae66LtfZzheA3PeMzh0zuejXV/AbTw+ts7l+n3r1JfbDP4d4ut/b3WC4OCALizd+MriRokTR3iRYzKKc01RhXjgi+Ql1BdAX4CmJILZiTbhe1yK4WtHWDFN5wBW1g4RqcL9ibN4jsU5QF4/GIsiqYbczYPrXD1sYWU1GWjWnQum1+b4SybhQVq1O8enXJtZtGPbhYNPzqhy7hHfyR736QjUlPrjXb2ORwvuLG4iY/87//Y7Z37uad/95/QjWdrZUtddFHzf5QcjDlSBCnF9kjQmhHlxzpAjy2b2+slGupYqNRCNHhWjrWAHVCcMnclZTSyL6yWFTYiaDqO9PYLmjIm1NT5S1jeOM5a75zeQm3aviZJxdcaz7Gufh1nZAHFqz0pt2iuA6g3eg+B/EJWj0kslwb+8P45eOTV5Tccef9+BRhvP9Vb2F8+s5ktQyMJbVghHMO5yuuLMdWvZIqIbwYyPrzhzXOOcblmLIoQAtcHNMurHcJU486a0EfEFZlRXAK2ZoZ5GK0C9rZkYvJzcIIOI2do+4GG7OKlRtEB43zRPUcVNvIZJNq8xxlqBmFBZN6yXSxz6mDm5y6dYV44yLLW1eo53sc1ofsN4EGZ/08i22DDoYWqfcZO4cWY2IxQssxWo5pY0UIKyROkbJC3Mi0rohFeYONIcE20iiR6Mz8l8KxWi3x3rG7e4srly9TTkZMNjepJhNGkzHTyWYfa/kqx0sSyv/pHz2emAGMnqJtB9KQBOp//F8/z6Ov3OrC9ZPtHc7eO+XH/+GPsLV9F+/63v+U8dlzNGoRqz7goL1A5rRISuoyEMSvfPRY1yzjkjCIcbHkqVtP4AUe3PEpxZFYxUnRsYARW2mkSBUg2Q80C8F3oXFIWjsHVFLOzIvgHdw9Ve6cCY/dcnz+xrPsxRdYxC/T6BU0IShPOkSEu+57gO0z5wEYT2acvf/VHFx7hvFsB9l+iJi0XIvw5ZsNOAv9fz4oqz3zd130iLouquywqHeuPUUEX5SMyxHeOUtZTQJN27K3UopQMB1PrLYxmtZyhc1TSBok+IIosRtrR6bqIGnCfmnY7BydLu3eH+jWwTeS3Cahr/0mq8Kzj+KnSrW5YnLqkNGFfTaXe8wWu5w+vIkeXGP31iX2d69xuL/Pfr1gEWrUFcZkIAUqI6LzBF8Sy4qyGlGWU/xkCxdnNG5EKyOCHyO+tDpay4MkGs0SdWLdpoPQthbYgUQ0vXDs7u/hygpfFcktEuDur7qKX5JQrkLsFuXpV25R7ZSgSjH1nH54k8sfu8nFD9/gg79zo5uFnVPbfPrjv4X3Fe/67h9ifPpsAjDHtfyNJGpDN4zeppNkpukeDDAM7Ax22RzJHMx+UGumGhYLrq+uIsBWaTQXFhtJuzWZBS8aR1AIidfHKkEk8fEMV1i+T+sTmbtiSddPQnA8ehY+e6Plpv4qVVlSesd9DzzM2XsfMlNYcnBGmJ26g3l1gUsreGrffAAR4Yu7DqpzaFOi16eQTWhqkBaXfKAYR7SptQQ+doLhxFNiiBYw8mXvnRUCVyM7nYBopIhK0zTsHh5y7cZNZqMJm9MpJY6RFBTiUBxxWLKXfdxhC/rj3sWxn2kr7gJTFsOyBHxX59Yl3mNqmwGRwsqiCs/SV0i1xdXZPfjYMG5WbNQLps0up5bXOHN4leL6kzS7Vzi4fo0b88CBjkwLO08RKpogaF0gUiGHU/x4E1dtUBYT2mpKKEaEoiBKgbiKViqCNOBG4BzqHXhnVoQzC0+DEJoIPlhw8CVUirwkoXztH32ArTtniDhGkxG1Gk/ObDxme3uLN75tg+e+9hJtHfjEz3ye3Yu3+J0P/xoHewd87Tf+ABsXLnQERm1KyueYhks+jGY7Z4D9HGrAIXpnII5dBLbLS6Y3IxFpW3S1GghrApc7A5criQEvUeSjKUeZyLkkETt5Z7td3lTyjdgGqmnp9HcW1fHxqy0CnD5/By//9j/JzVXgsIanVjPwJWiwgEAQOBTcoXUIq/xkMAz9cg4aacV1mslRWOI6aagyWiezNq8DMXRJ6UsKZ3wz3hnG15cjxPuBUFpyaDSaUM02WS4WHO7ucXDlGl4c506dZmtrw0L/OMouamwbp5njadyPrsHOIjpqWqdgYQ7OwaAD1lrseSDkiehMrfpHnCfiaHzFqtjgYCxU7V0UmyvcuRXbd+2yvbzOHXtXuOfW8zR7l1juXeNwf4+ry4aDJtA6wFUQ5oR6n+DGFH5MWc2grJByDNWYWE5Z+g0WrqKR2sAJhUfLwgoQCoePJBeoILQJddTZA1/9eElCeer8KXYubBEVJuMJGzvbIDAuCopUxPzar38EjfDMJ1/gxjN77N68ydu//o9z39e828pcQlrwmlA2R4I4MXUo7oIF6bMx9tjQbrpk/TOQBNtOhmIMc7Ja8cKtiyzDildslUxGFbHwVqAsPqU3THhDmxjT1ZZI6Mi5BC0LglohbC4xyouIrLmVtDMIbXQ8uRupxhMe/K7/iE9e9YhTWhyxKi2AhIJ3KZ8mOFXKABJPMNhFidISZWUCGR1Ox+bLCeYO+MQSHpUqbXROPKPxhKKcgC/xAl4Udc6a8uRQ0boMMJmWTKc7FKLQrLh1/QYvfOnLlOMRO6fPMpvM8M4lkzhhV4XOpO8marBJHs1urYEk1nfa/NXBpyxAZ5tf/kSmAbO/1aWi40KIFKhOuTneZrxxnsnOvZR3vYqyWbK1PGD78DqnDy6xvPE8qxuX2D9YsLua07AguAKkRJYVrhjjijGBkraYIOMtitkmzE4hkym1czShplk1UBu0DilQV1L4EvWGQvo9CfScOXeW83efY7WqOTw8ZDqZ0KZAR0AR8YSg1HXDYs+YobdO3cldb34njTgC1tMiptHOubtOiJI2HJAwdGVGHfcn9CogT0UnnFlOTchCbKibFX615HDvOq02XJiMGFcFdYchNYaBqIbNzcEnq/JwqAotwkoqPvTkHr/17AGvODvmzMTzuvMTRqLMCqGg90/teSJP7Autwhve/Z08fmOK0wKJihcDrHsVfDQzqnXOML9RcRoHemF4aAoupE1CbJFms1oF6/asUIhQ+YJRVeF8iSsnSFFazxAsOdGBJqQnrFjby53t8MvYoLFmsjll1Sy4fvUKBwf7bG5us7m1wXQ2tj6Pa/d8NCR+9FGSeTo0Ve0JyQ+TfXkjafbpVOZfdhjlHMUdamAFxHV51iiwoGBeblD7ktaVjNqajfaAc/V1dpo9duY3uHPvOvHGNZY3rrC4eY395YL9Zk7TeLQc4X2JjyNcvEnRjqDd5nWvfDt7deCLX36OVRNZqYJajlSK1Ji4MMG83eMlCeVoPGJjY4aIcOPm9Y6ZTNMgGhFy4OkvPM8Ln75GUYx403u+j3Jji5bMOmaDmFMrNohpOYh22jIbM2vCmA5bhD3oTCRPZyJolkiMLfVqSdvUaNOYxktTGgUzndtACMF8W1IpHZIqUxzqChDPxy4e8gtPXEcVRpMpX7wV+dyVA3796QMA7t0qec+9Eybes12aJl0E+DfPrLj7odeyuP/9LK7XCWIHaMTII3IqySgpBMt7FoQU5Dq6yB1R/SCIxQAaK9b3L7ULKJ1nXFaUZYmII7rUqVibPigTE4Gxt3B9iGauxzaQQQ2rpqFuloTVAt+saFcLCh9oV4dcrxfc2i2YzqZsbW8znW5SVBXOZ++1N+eHmtOQW4MNVvKTKj2gY+BvDrRMFt28Dvo1ld/UZI4b96zLpqMY3K0UZ5ttMeGgHHM4PUUVA6Odms1zB2zfu8ekPmS2XHDHwUXCredZ3rrMwf5NDg73WdQ3WTSeZRjTtDd55rcPjI5kb85IxqyKMcFNiMWMUI5oi5ImpWjibbbDe0lC2dQr6sWC0DbEmAl1CwvEqEUgLz91iV/+ex9CFV72irdz4ZFHCdqu+3zDgEmybTRp0Ww2KnSUkGtWlUBuyZd3UrqfStRAG1qWywX1cmF9D+uaNiFUljFS1yua0BISXApJ9JPi8a7EeQ/i2W/hJx+7wcUF3P3wo7z8Hd9KPbuTQiLVap/nPvqLvPDlL/DszWv8b5+1aOrWyDF2wiIoZx54DTvv/c/4wvXWktlKMjUjXqVbqqKpmFattVyhR6K8gwE41smlCzZ5itHYwNbOUybWAUgBMGKiY2yJ6iwyq6AaWYVDq/FsGpq6RkODhmhVMYjhgOOKUB+giz18C04rGlcQNHKw23Kwv081HjGdbrC5sclkMrUNwTk0cbbaveSoehamMIyddVpufRvOCKi+DGpdaDW7pulfQpSlRkOZpcI5oRBFnAl/FEfjhFo8h1qyP55wJZ5BVCli4M7lfWw0u5xZ3uCexXVGi1uEvWscXL/K7s2b7B7ucvjUTYLzbJUVbTGldBW1lGgxJZRjQjlGRzPasqJxx/vwnHS8JKFsm8hi2dJGRaRgtWpwLplSKiznCz76k59muVfz4Cu+jjd86x8lFq6rEOkEMh8DTXkUGmeuWTYl7WPG65LRPSlk4LBmr1FpQ8tiuWCxXLI8PKRZLUEDPkTLcfkpH792yHcfVHjfUie4nHe2O3sRCvE4LbheR/7x529yvXa88wf+Cp+cb/HbiwjzxN2jG0xe/t088tYRo6uf5pnPfIhnH/8U+7Wyh3Lvy1/Dmff+xzx2M1J4Ky4eCloO9ecjt5lwWEolT98wePKVDnGeqirxZUlZGPOAIIQYCLGlDQ1tvaJpamIAjZkOI7KSAwNNRysCNg9ALAiFRa9FG6Q5JBxcRect48lpqqoiuIIghZneGjisG1b7B5RVxXQ2ZTydUY2nlFVlzAPpeToUU35OoTOqswY0ATuqCo8Z2ekd7SyGDlmGWoJUzOAVAZ8CYHltFWiK8Frk32dQqCu4tHE3InfybLtkVh+y0S7ZCnvsrK7ymmtXmO7eIuzd4MbBda4ud7mxf41ri8g+jnY0I4ymaDHFrTaIxZja3Z64vbSUSBNZrCJ13bK3t6SqWgtctLBcrPjkP/kdXvjoFaazUzz6Dd+Dm0wIkhq7nCBsuTi5S+DrAASetGkXdxRr3tJNSvpcDErbNIS6ZVWvODg8YD6fs5rPQSNCxKsVFl/YeZhnr3+c37kO7zk35axEcMkr84JIxaE6PnJtyY9/6RZthFe981v5+PICyxBwWZ2pEkXYj8pnbwQ8r+HU17yBN32jMJEGh/LCsuLxG2otE5Lp6MhdwlyCpQ/A5enwGE9q9qC+mlD2loKjcAE0oMFRN9Zop6lr2pAq/VPbABUPWqQAVcR7S+aboLr0iC2EFWiDo6Gp95HVTU5N4HD/JvWtW0QpGG+dwo03CH5EjGPUOTQK7Qr225aD/QN8WTKZTpjNZlTjCUVZGmgiB2o6odOeAT0F0zRZQD3g3jZlFcnMHp2oakycOE5SMXWOAichHWx8ln7LoIZkdXWtBIU8FNFB7UtW5QY3UbzUVPEBntto2V7U7CxucLp+llcsLjFe7nLr2hWu3bzB5cM9rq/2WK0q4nJK6yoaP7otORP9SmjvwbG5ucm7/8LXEgK0S5tk5zwbd2wyu2OL3/kHH+b5D19kNJrxru/5i5x+8KEU2cvjnYXPBmlYD6n5vdySTm3Qh6XBhc9NTc3nDIngeblaslosqFc17XLFarWiXq3Q0OLUSm6cCGOEjUXD44/9Itf3n+ZUCd9z5wb3jgpUjLMlKPzrq3M+eXOFlCPe8T1/jsuTN/LkwcooELGuYIISxWgFUXAx6TXpvSdRB2oNgLwYq4FEQ6+0LgeEjg+9w9IaLo2TubknS6V0lkPyqF1r/nSwtFNotUvxOBSvkUC0FII4YlviQsS7A3xoIZjgEmtcXFKxYlJ6zpyaMBoJkwomLiLzFft7c559/iLPXbnB4QqYbDPaPo+b7hj0zo2tWkMElcI0eWEkzsWooBqPmUw3qEbjVGmRkYYCkoRWSDm+FMpJ1ozz3vCkyWUKMdIGTeB824Bd4VM4yPLAXgpy3AJyEbJQDIJqxkmcDOIs0AlMrmnmpWuVAFGEqmkYrRZMl4fsrFacXu1y/8GTTA+vors3aPb2uHZwkydWt7hG5ENPn0AqfXReX4pQlrOKsGqJbW92jbcnbN+3xeXPXoGoPPyab+LR3//9XcPRDI0zn3OQvsiQuWMCme/M6pLyaXKPEVJzmLquqZcr04rLJU1dE5oWbQMaYgpixI69rHSOEs/UOw6vfJknvvybzFe3TgwOlqMx7/jTP8xHb5zFtWPawnhlnLap0YxBrKJY4MVpb2xq8pEd1n5c1OGzSaUKuC6Htx68sMMp+BiQLjClfWTyyFSt/S0mlIiisbVmR0GsUslFfGwpsPv3YNX6K6XSmpEsmbFg6gM7szGnNidsTj33nT/N6Z0dzp7ewY0LYhHZPdhl/+otDnYP2Nufc7hoeOrZK3zp6ctc3l2yZMxo6wLFxjkr3yoSHWTKqnbk795TjseJBWCDYjxJ2r7E4c3vdYa9JfHBehEKn9rCO0shWXAqEiK0XeFA8j/zNTG+YHstJv2cNzUF6TVx/qlYUbfV2yb0mVgQKQcLozpQby1HgyKtx8earXCZreYGZ5a3uOfwOuf3rzE+uInMF/zQr/3oV5W12xbKM2fPIwJv//pvY2PrlMGVypJnnnyMj37ol9EYKasJ3/RH/jqTe+4mSuw03dBnzI1cjwplJ43JhZBMmuV67RNjpFmtWC6XtHXNcr5kMZ+b+ZqZyNTaIHhxVCnYUXiPFB6ZjZmMRoydo7l5i4tf+jj7ty4R2pYrVx8jhpY7Xv5qHvr2f59PXd/BNY6V86iz4tYogSix2yUdak17UhS/iyKK4UMl+tRynOTjQI4kDkMdGQqXJgQXQsLU9qDu4TjmzW1dMCNIQCSicUVHshuUQmuKuCCu9vDaMPKBsYOZD9x9ZsIdpza4sD3h9NaE7dmEna0po1IoFZyUVi5VONrSYGUuKPWq5nB/wY2be1y/vs/+YcON/RVPPnedJ5+7wZVbLatihtvYoto4BdUEdRVtymtGDAETnS3+YjxjOtlgMh4zLicGbHAe50vrOekdlqf3pim9CXpufRg0dV0LpjlDm+F/KY8pPgV6k+WQUl5O+mTKsCbVJTM5s0VoSmPlsiyjIzF6yzbWBorRiVWg0OBYUsUVo2bO1nLFhf0Fp5c1P/IPv+erytpt+5R/+L/650RRbs6XtH7K4Uq4dvMGW+94G1uPf5rda1d44OF3MbvjLuPh1Liu/TrPXQfyJwOBzA69rFlrGiNNaIhtMNN0uaRe1b1m1D6NLN5TpNxcVZXGyzIaIc7RitKUDnWwjEo8s8W57Xdz5nDFc5/6TfTK57nw4CNU3/VX+M0ryiyYpo5i3mAWpEii+RABAoG2S9ibdvfJQrKSII2SWCIkxyEGRnmiQmRQM6qp+3AXtBg0NcLM2jjEtKoiGlEaNDQ4aQnLXVjtUcUlExfYqVq2x5Gds8KZ0xUX7jjNbFqxNR5zfmeHcZHMOSdGASKNIZQUVCJBrKSrqFNtbMq+TE6NOL1znnvuPM3e3pxbtw54+b2n2T0MXLmx5EvPXOHLL1zl2gvPUbsx4+3zlNNNKEYEP6JVT6ZzrFdKW9fM90uKcsR4ssFkOmM0nqR4guBRcvdKSRUskkEmsc9z51Z/KWRllkoHUjHJE7GiEK/Zixwgb0VsPJBeUHNrji6F0/cOaVFaiQStGZNQalrSuIrD0Rb7Y7i4FSlOaC570nHbQvnT9J/1IwAA+FBJREFUH3siPxJNqoWbTOHVtz7B/o1r7Jy+j1e957uIHiKWljDtpX1LtPTA5MS8GK2hJQhjNyC5PBTs/bZuWC1XzA8OCU1jxcetnVvEUZQOPx7jvWc8GjEajy0d4Kz6QRXEO0qAoGjTIPOaem9Osz/n6rOfQGPg1d/8x/nVS5FCC4OyeRO8HGmxoILdX1fASmELwAFSEMWKZjVY4CA6h0tjEDFggAl3gXQjKgNfOyQjOGeAzXQuVI25oLW+HKoRaVfI6hBdHtKEGxSuZXPq2J7AhbMF5zfH3Hdum/ObytakYGM2oSphMh3jXYVER4sgrklLMnEfpR4ZZqYFM+9IZlwei87fEqpKOH9uxh3ntpgvavb2V9x9fsHL791gd3E/V27NeeK5qzz+1Atcf6EhFBuMts4y2thBxao1ghhHawzKKih1G1muakbjJZPxlNl0DCVIKXgtbYw8lm5Jm1bUHplUON9tdKKKk2zO2P+9BgrA46zmUcl9kywEl39PQt6Hk7CKojRLXsBR4MUA6zGm91JMxEseKweDOuOvdNy2UO76afpNUWmIsuTNd0/47b/9I3hf8eg7v5dya4NA20VTY8KSxpDIhLqcmnV9toeIhLZGY+hQNC73oldomhVNXbNaLgmt5RUtYS4maEVJVZWMRuNElOwsSiv0rAFi19emReuG+nDJYveAuKpZ3brGYnGdycYmNyd3Ivse1YSUSTk1EWMecAlUIOKTxkt+q0QLQjlPEEn+YG2BnuBQCUQXTDGqPVc24YdF4aoBtEkpCEVokbhEmzmhnkOooV4SVktG0rJVwNlZybnzI86cPsW5nTHndsZsTQtm44KqLJiORxQuVb1nlwEhRoeq72CEvXUivZ+Pomp9IjPHXleiLXSblVEwGgZ1UjmmZ6acOz1ltWo5WLTc2Fvw4F3bvOU1D3Dx2iFPPX+VL79wnVtXrsHY2sUX4w2CH9NqQZARaCAQWYSG5fyQw72CqlSm49K0ZzXBjSaU1RjnCkQdhTeeJxLjQcbTiqTXpPc0CzRp3khJaiachM6lZ+rdi06eUbB+ItmSSWNnXblSr5SkQV36TA9hvC1P8faFMnTcMIq4COWKM/uX0Bi45+G3cf7VrydqoEOnCt2DdoUD2Q8KMeV33RqowMxd478RIbVJr2lTW+sOpCxQVhWF94xGI0Yj4/bMKJ+o2qNTNFpovGk43NtndbigXdRIG5GoBmxAueeVr+WLNyOFpPYGMSatnfwR7/DOkuGQzSNjNIihIdYNjdbWYUlqhIBT0FDY5pRQm5Jak2dsr2DABVHFaYvEBdrMkfYQiUtY7ePrfSay4tTGiAt3zTi7s82ZjSmnpiNOzwo2Zo5JVVKVnqqEsjBzD9cXZMcAucbRtHgLBOvtGa2oeMinq5Ca8r7IUjIUPmAmNEATWqLSEYSNK89kPOb09pj5qmX3YMXdZ2Y8fN8Zbh5GLt7c58vPX+bpS89x7UqNr7aY7pzHjbcJVBawYkR0FaENNG3NfgOLeoEvJ0gxohqNGY+mFOUkGbdA7AUso77soczDdGncnaZ4pGqaz3WfcniodnvQ8NUuCCfal60ZN659ISOXbk8c7bhtoSx8oooQLIStFdeefRqAcw+8hoC1lcsf8s6DF5yY062SfMwOICAgxoFja8E0SM8mt0JVCaFNFI/JVK08hfeMKxPGqirNtJKedpJM3REtqhtCS31wyOHuPqFuoNUUGRVuXXkMgPu+9tu4tF9SFYmpTLOwuJTPymllS3Vo0xJDa/SZcUmMNTGDAZIj0oq3hkLRtKFDKRBciKA1Ehok1IR2QWzn0OxDs8+0bNiaFZzeLjm/NeHc9mnObZVsjh0bJdbkpiipUsfgovQmf6J2e6oJIJC3yAyqj0lLan4JJHZa0ntPJg8zbiGxc5yQKM1FAy7lC7MWjtm3k0h0LRJrVD3jUhifGnH21BarIOzPGx443OTRl1/g+u6cS9cP+PLz13jmuYvM968iky1kvI0fbxOLmQV8kjfRrGrqJiKypJnPWZWHOD+hHE+6KK7gkgUSk5/p+k22mycTyuws5afMAhuPCZQM/p/5h4bUN7mCSdY+f/u8EHbcvlC64YVK7t6uePpXfweAZz77YcZnLrB15x34kRXgigiFK0DBe8OixowzDQmlmmI/2RLSpOJjCF1dZBsMoicilFXJZDxmVI2oyrKrcbTdvk+ttKE1gYqK1oFmsWS1v0CXDdrGlLsTdHnA/t4LbJw6zS1/Pt1MKgsSg/0RbKMIlr5LExytKxPByr2SGWvNa3ziJ03NUDVSxBbX1Gg9x7cNGpbEeoVvDxi7FbNRYGtWcue925w/dRdbGwWTkWdcwKR0TEYlYwdVqYy8UvoSkRJxUDiHdym/pn20NiZT2eJBZr6BEi0gaytFk+8qiQoxYZkN9mj+0cCKWz868H3fviGnIgIW6COS6lSt6saJgA+MvWe0VXF2e4s2CvPVNnuHNa97xZ1cub7g4s19nnjuKk89/xQHVzwyPs3Gzp340aYxBWBd0aIYUim0NVGXcHiQEE0lo9GI8XRqHb3F43xCS6W4QCa1FlyfDknrO/uRrgu4pUEdaMuBh9l9U4/868X8JC37FWTtdj9YJRwlChqVM2XBZ555EoBLz36MK//HJ3ngka/nNd/yvRTTsW1BasEcl1IEFN4A4G2bNGJKEKihXiTkULVdI4RAicMXo9TpylEUJUXCEIaEVNEkjFkrhsZylRoi9XzBcm+fej4fCKQtwusvfJS6vsVbvutP89lrNSspjM8V1503hpTrzD041EEi0FJijl51BYSqSmyXFO2cUTunbPdhtYfUB4xo2Bh7drZH7Nw94s4zm+xMzzIuPNNRwXjkKVxB4SPjsjAmQFfgRQw6Vyilt5ybYGgqSdoRdR3CJd9mMmvsPruCAMu3IRn0n6Ld2m+Sa7xJg8LIoUlo3MPaLcw+qJJM3+yFdr5pupZGXOHABQTHqPRMRxVndqbc2Yy558yEg+U2b3nlPewdtjz7wg2eeuEGT196ioPDGW25QbsxRssJUk7s+rFNQRqlrVvaeslicYg/3KcsSyajmbk5ZWlF67049htT1pcKmYk9Pw90b/UjoK7TpP1gCYNtqgMgHKst/SrH7WtK6T/qisg0JfOdjJmUb2LZfJanPv/rLA8OeNnb3sfpB1+GKytC4lF1eQF7401xMU+y9GaF9vtLCEpMvqSZVUrbtsQ2UIv5QjFqagkgVnaVBF6bhnZZUy9rlodzmvmC0DRpR7QR2r30aW7d/CL3v/oNXD31ehY3KmoBoUlFvJCdXVHFx5x3dWkXDYgGJAZiW8NyQajnqK5wzSFjWXG6ajk7c5y5MOKOM3dxemPCbFxRVlCWQulySsOWhKOldJ6yqqhGVoDtnKMsPIXzOBdTU1WAVNOZF4BaMMaIk4c4Y4EU7Mo1oI78fANTLovXIG0tqTysp6PU9J2kJ0wyB1oh+26xE0hSsK2/T4tMe4mI93hnXZRFPNvTip3pFHUVTavs7c956EJF/bq72FvCZ5+6zBeeucKzu5e5disQiy0m22egGCO+QnWESknAouAaFbdqWM5XOOeoqpLtjRnT0YhxOerQUDmmLta4oFsjmnPM2g2WiW8UgusF18bG/Ng8rpnE2rak26+lhJeiKatxGnrFE5gUSdnLhO3RO9go3syi+QIXn/1lrlz8JBfufRMPv/v3MTp31lIBQsfmBoDLJoRLfoslfs3UMr8ktMZssEoFzna9PPlqfoOmHTsEYl0T6hWrgznLgwOaVUNTNzhNln8S/vrwJjeufRZQHviGP8KHrgWCiwg11r62oE1Euj5CJVBGE8CmtjImaWtcs6CKC0ZSM3WBrbHj/KkpF85sc+HUmNkIJpUwrrzB/fJ0qyK+X8qqisdTlQWjqqSoKnyZCpS94J1YKzeB5PGack6aL2rip1XzFw38Drkm0RxbSf6jdr5UtnoyAXWeX9LCQlOJW2485CBDIAxq2PtYuXzPDZ4p+7HJIu4qedLeTJGeTQRjr5MArsF706Cz8ZRwZsxq1bBYrbjnwhne9aaz3DoUHn/qEh/73Jf58qVnudWUjLfOM9q6QCxmICW40n7iiOrQICybBXG5z6IaMx2NmI7NDaoSUEFU8KmfjFUOSS+QnQ+ZtKF1H07v5Ty2EDUJYwryRLK1IENr9isety2U44mlREQV167Y8ktQpZAdxAklFc6/Gucq9usP8fyTH2b/2jO84t1/kJ0HXw6lTwwaGRzdoUQNkdM0lhbJF4x9tk4Sg17umAwZ6QMSlFgbmGC1mDPf36c5nNOujHDYom0p8JSapV6/9DFCWLJ5+hzXOE3LPpF5NspSfbtDwpJquaBazqnme5Q0eNdSSeDsbMSd21PuOX+e7Y2ScSWMCmE0chSFwxNBg+XHFMvvibPkt4iBpnOvDhEK5ym9pyodUgjO2zQ7l353xvKGJp9bFcS6EccM0oiStLsJWY4GMgzoJDMvG1qaIj7DQijye8l8j4n+ElJktecPsRcTtjdrErtM0izS91Cxjyq+8JTeeoMYJ1MqSFZSjrclZp9cYDpxTMYVW63nsLbN746d+3njK+/h4o1DvvjMNT71hae4eOk6oZwh1YxquoOf7BAZo1IYCB8FdTT1nP16wf6+gQQmvmI6mlCNZmxsbjGpjHuq1mwZJJc8Y5YFcr2rlRsmH1yS9Tek2Px3OF5ClUjScBqJEeZPfYwYA+PRq8w691DgmU0eZlS9jGX9JfYPPsjH//X/yLm7HuXV7/9DVFubKFZiFVtLfWQfT0PodtOOqKrL4bnuPSEHL5TYNqzmC1YHc1aLJYv5IW29hKbBReNvdb6g8j7Rfgirgz0Wh1eYbu3w+j/61/jE5QXj0KJxhTQL3GpFszik0JYtH5jFJadmFVun4K5z21w4t8PW1ojZuGRSFUzLAomt+bLBEu2WbE/RPjV6k1T/QClWKibJNM19R7wIhTOBFJcT9j1+T/NePIDXRQ3Jj0xuwECoOuJnyRHUxMSetG0+enNVjr0m9Gz3KkkjpzSJ0VrSg+IRCt/zGFl7NegIrhOIObvgknzZbk7T7mEF7iGB7FOaxtk9F17YGBeMKiEEmFWwM5ny8rteznve9AquXp/z+LNX+MwTz/DUpUssdEK1czej6TahnFHLiFo8UUoEn6wfw1IfrFqcm1Pt3WRjOuHU9hbjYmyBIk3Uoul5yHGMbK0zNGRl8NdLdCbTcdtCGcPgDpCuYYmmWknvSQ+gFH7EbPQqRv4CN5Y/z+XnPs7qp27xsje9n3OveCXeiWnFvBMpMFygSSvmnbeHoGWsrLWcq5dL6sMFzXJF06xQFJ/wrpOioiwLw0mqmcLtskbrBSGuuOOBR/nsU88Tdg8oF3uMtGGDhp2xY2djzLk7znD+9DaTIjLbGFFNCmZjT1lqKvdyeEkoIWddf733tmhdXnxWrtXZBCKUYpFs512/MFN5l6Qc6RB16JwBDUw0c9rH5iCzNNi56aKGthlISltoQjUlYe56i9Dd04sektr4JWhZwEq/zBweEFaL3X+ZKnns+r47vz1XXtCuc1vSRUgGgG08oqgLXQBJAIJ1fME7ipR7LZwwKh1b6gjqCKHg3HSDB+7c4J1vejlXby347BPP89kvX+b5a1+idTNkeo5q4wxazIiMIdWBNq5Im2nDqq1Z7C3YPdhnXI2ZlmM2JjPGozFSWrs865jmiEe0YdeQN0ODNG+C2Ve4PSG9ffBAP1OdGoe0Yyc0To6cekCdx1dnOef/EIv6KXZv/jyf+uUf4dSnX84r3vZtbN59H94cLXJxc1+KlBZCiqpGNcpHC+bEROFhEVbvHeXGDMeGaY7QUChUOELbpmqSJaE2Aq3nnvkNJtMpj7z2Nbxw6RNMJgX3P3AnF07fwc50zMakYjQucGWJKwtwfSTRu4hI1gD05mCq4hexapYcfnHOcJfZnSiAwmVSZLf2rFkjxTTVqqlfSZvG1pnwum6cXBLuXjBddJ3J33s/qTi8Qw0x0K4nHznnm7+fhdI7Z8BwsfZ+JCH03kidcxF6PsdwCWatbTdBv+HSY6Ehr2fpNn9INY/OwB7irBWAfcUstDJdazoq2ApCHeD0bML9d7yC93zNw1y6ucvnvvQcn/vSJV649AIrmVJMz1LOzqIyI7oxIfWWjBJp1FO3Lfv1Hj4eULhbjMcVs+mU2Xhq+dCyNL8TCMGqVLwGMgtHSIvEeokk2/c2DdrbFspu4JKvcvRNS0u4Ixrb4d2IyfghnPsuDurf5Prlx9n/+ee4+2Vv557XfS2zM+es5Cbv5tpHFGMCAITQ0tRGQZI7U5EWjS8KymQ2WU7TE5Y1+weHtKm2Mqb6xPnVLzJf3eTP/kd/jvNnJ5SvOkfhPdPRmHExonQeJFUxOCu+jSIpvaD0KMvczsDoHAliQaoBA10uUiZBHlM6G/G2uMX3C1ec68RI0qQmQgUEq1v1Pi/2jCiyXcGlhd6zNGTLop8I8+myZWOIoiHL+3EBTWkUETwuKTPb9b13JoRprHIbBtcl5nOKZXC2NWE0E8ClIJApkkR8lTabNTM8vS/Zj8uwNoDEioCm4BeOqvCUhWdcQt0GFnXLxlnPPTv38+43PMS13RVffOoyn/j801x87mmi36Kc3Uk13UKqEdF71E9onNKgNA5WMXKwPOTa8pCSglE5YjyasbGzxebGBpNyTFF66nbOsmlYta2VcmlqgKyO6Lqn+arH7Zuv2UxCKVKFYD4scpoGuRuwrtcWTmHsLjAafSercJn95oM8+dgv8vyTH+HBV30j97zhHUjprbokBTE0RxRz96tu0WtvEWAaIKrSLJfUqxX1asny4IC4WFGm4EHhBJaHvHDlkzzyykd41asexjV7ndZx4iicR3INgsuES+bLGnbRwAEae8YEq9WMaJsrFLIGlQQV6bVhR7voxBjnxM6ZtyCr+bPgiZcC74q1RkkxGutev9YzPHEQLe3M5H7ecthfXE+96TkiiAO/ct2adQO/MQuxpmJzQfDk6ovBaujONbhAdx82BoN57O4zPZNAjhrJ8L1M0gwJlJCulXcAqUGEGD2iHo9n7ITxuGCzgtAqdVQuTCY8dOYB3vWa+7l0/ZDHn3yeLz5ziYvXnuSggen2edz0NL7cQNyYVkA8qbu40AaDVdbzffaXcy47YVyVbG1OOHVmytnTW4wnE5bLhus391i0IaXYojGr38Zx+3nKBB4QFGmUDlHXwebisKDCAhxZt3TV3Z6xuxNffTuL9gvMm0/w2Kd+lv0bF7n/Td/I6NSOmabJPA25En6gQV2OFCjJJNNkQrTmYy4XCYRgA+Cx8pzVYo+2XfHwI49As6CU7tZBhKCOmHZ71Yz5zMWvimpLTICGEPsAldOIhkTRmJBH3ns0USJaKi8Jd/JDvBPE01UuCAZoL3wOcNGdr8vPJjM+laPk2+6WrvnjeRGva0+SX9hBGiERhaXPRjOBh5uABaGKpGGzAGln1vYSBl2oo7tuuo/uvV7DW9JaUrH4EZa7NJuWPshpnRR3SCkKxSXQQhZsi8STNihN0W5bd4ldQByu8MYJi7JqAptl4PR0xkP3Psi76oe4fGPBE09e4YtfvsyzVy4xD2Pc5l0U0y0YW2uDIAUhrbmgqXBLI4vFPjfnNS9cC2xtbHBm5xz33ns3r3z5XVB4bu4fcuXaHsv65K5mR4+XYL72pk6omzVTbTg3svb5VJ2RYR5pxysYs1G8gUn5Kg6aj/Pcs7/FzetP8rLXvI+dl7+KQGYrj4S2NXA4WQPlfn+k2kJzusuiwG9uoNMp9XxBW69SQl6gabi094x9RzJznHarR2OkdckUytRNYjAz702DKa3dUxdsSkn4aGiZrCatAiaD2TOEy/4uCmcMCKXl6VwCZGRtEzVYP5O27a4zHPvcrStrHgto9oUCXRrfrft1Cuv0KiJIMfg98+0eKy2ywEw2Mzv/cvB2cqo7Lbz21pEVstYtTdYFMgtYsoHzIsp3bymlSEptDM5JVhBJTLvvJMhgKgDIHrL3MB0J06ogqGMVG2a1cmZjxqvveZjV217Jsxf3+PxTl/nUE1d55vJTtNUEJttWzTKaEqQiaoFKCQKxiAaICnB4sKSZX+ba5euMJ2NOn9vh7nvP86bXXKA+uX3MseO2hXL/8EYai0i7v6TtQL05kjbYeaHLO52Urck5Lc+YjeJteN1mPv8wn//oT3LPjXdz5pE34CZjYjDSq877yeZa2jmjKhIsMOIg4RyF2eYGXjZx3tIB7XzJqt5Ltyuo87RG35bOlZjZB76TiAHPY0x9LEkVMEIHbxNN7GhHOnE5LxSlo/D2rywtIlwW2TeMhnBKhyX8Q0dlkV2FfL9DQXCi3RhYzWwPSMg9NjWmZr2D75q/SjdHOWoqaubZ8FrDzUBDb2Aj62avHBG9/B17j3U7uvsASSu6/oVBwKIT/6QlpWsPIQNmfZuzrtTKSSfwlkZJ84ymGkuLTEoSbEm9+bwTpkXBeFQQAoQ2UruazftLHn7gQd77NY/w1MUbFiR64jmuXnyOuRvD5BR+vIMbbaLFCJcY0C2HWxDwaID6YMHe/JCnn32B8XTMXRfOw7e+4fiYHDluWyjr3Jw0QdlkNk0TXmMMjW6wyWUzMA1eFxpO05X9TrUi06l/hIrzHMaP8fQTv8Tl5z7KQ49+O1v3vozoE72DZqxmFysAlDbfT0wgAe8oExt1iCZc1XjULc7FYm50/SHZr9EinSGZ4M7nBWt+c1QzJwMBTWZgZzql5yic6xa5c84oSMqSQgRfeHyRo8khAcVjQsr0i3FgbxzTWGsR6fyN4Xd1+O3jh2CgBUvV2Fx03S0SN6pdBzgiaC9+3tsLWqzfb0J0daZsMoxz4bRLJnrezDUXGGMWVyIGzv/lI4Te8FURRINtyEO1K31cOrteUcCK1EsKHN5DMbb8eQiR0WzJ9kPbPHL/Gb7pnY9y8doen/3is3z6i8/z/PNPs4glxdYFRlvnoZxCUREKe57oC0LaylHlYDHn5lNPAW/4qmN1+ymRZpVHFzxc33wQEcei/SQb1aMIbn2HzZ/lhGkWeviS2oB72WJD3oHXCYvVZ3n84/+MO6++lTsefhOzU6dZtjWtpvYCyc9DoW0CsWkscprychkoLZimXM3n1M0SEH7p3/4ib3jD67n/njO0i0Pz9VRp20AIDUhKWbgcZSzwhevSPSlTg3gLDhWqjMqSqhrhvOvMWJcCEEKAkAM9afFoDwLIA9SblkdHXgbCkoJB0Gm09cjpMCUxeFVAJEdMk5bvPpAN0zxdsXtGMnpTNU/Y2sbQA9KP3PHAVD72egqYaAbwDzSlgRt6SOVguZiAOTqA/BBxC9kSSPMviX4l+dlmKA83gnzXfYMpyY6pRIoSRmOPuII2wHK5YloopydTXnHna/j6Nz7MC1dv8fknLvKFp6/ywguXmceCYmOH4tQ5mG4DM3K3rSieoEL7u52n9CFjHgGiNX3BDA7bvXoWMeDIYmFtANFcNUCP6IkRjcKIN1LyKhbhgzzz9K9z6YWPcde9b+GOh99MMZ3QZLqM9B00Mh6PKZwzh14En03nEKlXS5746L/lcHGTLf822vgM/83f+W95+OGX84M/8H2MvELm+xRne1vSYiLGoEZMJqlLRFyF9RssxGoks4DF5As656y3SrIULPBDMtvyuPUBHUsj6LGRWmd/z4t6/e81c3JNonNQR7vIqd3bEcESyK0Gh79nH89lkGzekbopTJ85oqV7c3m4GUsXmVZNudhE+twFh7qNYbDRJBNWIfHEZkO6F8jj2dDjlkW2TiDnbNO3VRBCgsolKGEqeo8tlhvFMRrBaFSiAqFtmVaRM5szXnn/I8yXD3P1+pwnnrvCpx5/mseef5pDP2V0+h5Gm2dhNCOWU2ufd5vWxW2z2d39/T+SBipAvc8j25GP/tO/jegm5yZ/HHSwQLLtmi+S57UzbrOPmKBfWYOkezY854pl/ALL+Akic6bTC9z/inczu+9lxoimibRQDAHkRTp2a20Dq+WSxeEh+5ee4tknf4lSH2AiX0OhEMtn2Gt/h2oMf/Wv/GU2JiVtu0K1QclkXMFMUVdQeGsFUBSuW6Qu1elVReJ1Tc/mfKLJT8B6K79K2M9kqR0d8ExWfWxysn/u+p6dAgOWgDzMtuIz71F+o9OF4pJQyDHB7t8fXn8oGIPfj/ib+b1jdz70VtJNdwEp+jyqkDGx6VnEfPdc+9nt3FnEk5/PUCjTc9tL6fkswmfjHSUF8O07PsEbO+sjj4VkILkF+wRQabuxVcp0UkeM9tkYYLWK1K1QB8+igacu3eRjn3+Szz95kSu7DbWbUe1coNg6j5YTnv/R7z82z0eP289TPv8JGwhtcWGXnZ17OulyqZ6o49zUdQBSb/24buByyZXRcaZFlfCRpgUrKn0L0/gqFs0XWCw+wRc+9S84f+V13PHIWym3dnBF0QU5cpFz0zSsFivauiYuFty4/Ck0RjZmX0OhW8TVCte8jLPlvazC5/jrf/Nv883v/ya+9f3vZrXaRzO+UxSRNi32qjOF2+S/GDQu4p1B+3ICPZu50D9PnvQ1F2coFKzn7F5snzSzMAenGPi36TrOaBtJQ7q2oMnImYyn7c+5Zi6uvZ4N7sFErn9o7fVhkGf4UTN/83UzBMMl7qT8DbvX/O4QSJIDCXaffWArKVIbC3WdtZFZFKM4+u7A+QqxE+Csn1Vd/yjYBmLJBU8uwILW7l0NBuLVUxRC5UsUR9NGVk3LznibV937Jg6Wkeeu7PHJx57iU489xeUrX2JFCfwuCuUb71DOnj3L5saEs6cnnNoes//UO/jIBz9M0JtUxTlAiLFN9n1KHaRH7aq7xZq0WjW4Ee72W7r9sOhjMg1lhnNvYBxexkH9QS5f/DhXLn+S7e17raEnUI03OHf3q1G1wudmccCNy19gfnidw8MrzMqvxbtTlFIgUtA2NW1b4+NrmVaOf/kv/xUXL17k+/7wd1FVnlV90N1PLzu9ryaSKjwk4z4TuDzvvOmDnRIQM2ORAZnhIJYzrPMcmqTrZmvScIMGOd3nsYWU0zDr37fF3AvJugmVc6tHzeDh3y/2+9HXup/QBWi6NEi3WZn2U8niqXQbheoAdpn8yKFw5wEduEndriGpMiaPcCTlQkFIYJAjFoJ2t5M0vi3Q3vrI26UOy+YkYbajbQTYBl5Uwqj0tG2gbmompbI1mfHwfW/kW9/5Bp6+eIMvPPncsbE76bhtofyO97zR2nE7Eigbzp47i9IQ48Ko4p0nBKGr2teEgkET+kU6vyLE0C/6PPD5jzQohuQxH88xY7t6H8v2SxyGj3Pr5nPY7mXH809/5Ng9OxmxOXonO9vvQJuIthHnHaXYvTa14MPrOF/cx8c++gv8zkf/S972ljfxp/7EH2S+uIFRDSYGAFG8dymc3vcI8d53k567O9mzpMdIMDtrjZFNNpLRkFBSmcd1cGhitOuWZ16IYiftZWNdSI4HWOxi/TBn07fXTkcFbShkXVnYEcHLv6tqYoBYP0cuSevlR7sNwJ6Zrqgh71wimvLffeF1PqsFyk17+oFgZVqPbDN38tSto2wa91cannnNRklr9ShGN1+f7H9kPFHq2NYbK0pVClXpmERoWmjahs3ScW7jLI++/By3c9y2UF44O6NNnY4t0CsUfkDXryDOaOdl8NrQxLFcXDZv89hpx3KdK05yACfn7zSVAZVFycg9TKEvo403URYARFmx0s91Hqt3O4zLRyiLs/jyFE1tVR0uQfJEBFdUeITQ1Ph4hvPybRzKZ/nt3/k0ly5f5T//Cz9ECCs8ESfRyICTUIpYOZb5gtlETUMxmOOc4He5dV9eGAlq17Vs0+PRSkn8sSH0gIX8fMOgSOdfySAoc+zo56Az+bqXjwtbPtai6Ue14ZH31vOXSYF10Z3hwAQsIRM6Iejel5xjDMc0u4jFDRgIVzdmR2k5BvcXRRG8aTbEgOKu/+5a8unofobQ97VZM3htzu0KA/OeDizjHIwrz6gQ2mgBovFJU3PCcfvRV3HgCySV/qi4Ljwfoy0eL5aj86536vMi0tDSYnC1HHQAQ680bUNoU/FzWjDajz8ivqOZt52qwHEWhM6Hm8jDdL6VeAyOZX0eyrJiMplQiAdV6tWSplnZJlIU0LYUrWNH386Gfy1Xn/8Qf/4v/lV+33d8O9/yvnej8QBxEXGK99LB+6RbSLmBWy+ZGaCdynj7FInLQtn7MQzMV7pnlg743zRNXwmylsPshdI5l6ByvRaUIwLR+boD9oAsPEcF6ySBHL5+9F7XDh1qxWS2J61pgb3UkmGYIui0UkJVab7ffp3BMFc7eMa1kwz/n+Yo7ULdxpZt5/UzsaZD1p+w/9mtwf5zmoDykNkY+iJyUiDSjZTx+hbwosdtR1//1c/9lBFehQYl0KoyX3n+4//gP2DiXslm8Y3gMpeM68zUPOkxtklThjRpg/cHQ5C1i92cvW8RTNPKOaATM8wvCWa39TuXPusQX1COR4zGU+qmpg2R6XTCZDyiqVccHOzT1EukbfGxwWnqxaE115sPsIzPMRqV/I2/9p9z57kJQkhCmaYwVc4X4g3Pag/QF2gnZjvLe5K0LGRm8aFUDpdWrpRQNSKwtg0dZQoDjcvauBk3raQ6x7XFqtncNROxe08MONH7nDoQ0LSI5bggnvT3EIWU5ynPp8UBXXdOTSDpoTlr5xHoUmt22NhZG0T77CA1p0eFsh8fs67yOBRpb8rRWemslEH74cEWR4oEZ5MiDuanMO5eyQw8VgPbA/noNLemsYdcTwpve+f38tWO2wcPxMZQNUJKuAqjcWnv6T5grQRWyRRbM6SSs2+5IJO07JSv8fbkQaPzBMhRy4Gllb7Xnbw3aaTXVlEhtoEwX9EGg9Y1TWAxv8mocsw2Ntg5c55mtWK+t0u92E9mZsTjOTf6Zppwmf34cX74b/w3/MX/25/jTa990JgNkho3FvOAk3bguaWocmJS7yB5aXENN931o3Os6REr9mzOC+oEjS4B0/OCT6MhJAFjLQiUhcAGvK/n6wXI8stZGO07R7TmSXt2EmKlF4r14JB05k5vYafXJKGKsnWgcMz8PRLgKorEYK5y5H26zcQ2tvVzqA6QSmkBdakQcuRXGdY6Dt5O1Sx5TjCAu6YZioM8cJqnTKnSw8K7VdyPxW0cLwFm1wx8GFsyRSFMZzPahTWEES/oICckRyZXBpnmbGatoT/yIOngHEkwh3R+PXyq15b58TNeU53VWoYIy2WNr8b42SmcU5rFIbu7cw4OalzhmUxmRkfVrlLr+JZKPJW7k/NygaV/jL/1//x7XLjjPP/+n/xjvOnRVxObGicNUFPQYPUL6WYSgRQ5n5jC+XFgxsJwUQ0OgbU5dTnvKcQEsu6KAQYaUdNYZW2qg0XQkZElzdS3i4O+3GddQ/W30AtrN/6D6OhabloMSWM1qcmViP1ZDAZnPp4Qu4Y8Q8jg0cS/c67TxENwyhC/S3rufp9LW+TAIlg36webUMz6bqCxu42zD4ppJibOvEdpnrMgdlqaHLQbmNzHRvUrH7dfJUKgFxP7LbQ1j7zyVXz8ox8lxj2c306Caeq0E+FudZCstnXDXY9OfK/8OnOgX6g9piPNewe0zlQXIQoQGE+mlKMpTassVytCs6Da2aHc2CQcLqjnh6yWc9pmxdbmjNgULOcHqCp1aA3+p5EyPsjZSrh+9RP8zb/z33PhwgX+7A/+AG9/06tolzcQrcldnlSyyWe+kT1X1grJ/BLbhLuI3tpgSKK6l8Hz9m8fM02PzlO3gOlNfLDrdoLaQ9k6k5peaIcQvhDj2nv9ehgaz2kyUFQsKm33bbZDDt6pKNEpPo/VEc02fL4ejdP7n8civDn6LZLMzWT2y4sJQl5nQN5Q4gnmeOddSGryNHxPB0X+g40qDkZFsil+bJRu67htoWyTjd5LGqhENjY20wuZMKRPe6CsBca6pdbbtelzJ934QPUPD9WUr0qDmS2zzqzrNW+oG6pC2d7YZnMG+4fXWN24gk6mlNWIcmtCOGxpm5rdvT1bLOKIzhOSUCqCBkfFyzjv7mHpnuPalU/w1/7W3+Geu+/mB3/gj/B1b3wI2sNOd2cYV9D1AehMI1JUsHe66Xci7Vno8jY40HIZxndcq/VaJyZO3N58zR+xHd/8KsvL5RZ4GdUzFGob3PWUyHAu7ebyXMTu/g38Yb5/BpJnE86CYutBnpM2mmyV9bWtx4+14JeD2Pn1/V2mbXCt1LAzV5WBWhxYAHmTT8n13Cu19xUVYuocraRu0rZ5dCU3J4zZ7R63Hej5P//5P0zfoFPlUR2Hc8df/E9/iDEPs1W+G1VnRGYxc5EeYU5bHzU4umN2F+m+tXYfuYK/W7QKuZbQWOIcksk4xCN+jC8mVNNN3Khg2TTUywUaW8rCpwlrWS0PQSNlYVQdbdvAaoUj4tHkP2ItAqhZ6NMcxk9Rx1u84+1v5T/5s3+C89sjNKxANNGbxG4DsdsRijIHLCwPmVNEZqVnjKjr/MbhMTQ7T8oXDn/PgTR7zdaT/W1aTAycgiNz8vpOiGNnVuYa0xdZIj0zdGeaenGIJtC5Sg8iSD6GOAWneJwFsAasd8cjqes7+no4rP+Oc4J2mN5hIMwOx9E8cFKFWSiHl0lrtDNq3OCcOti8ohJyG8fBmIGkU+qJuua93/EnTx7L4d3drlD+i5/9scGdQ4yGfA8647HPfp7/4e/+t8z8qxjLoxBniLq1m7UcYYbfHR2g4aFH5uL4Dt259GsaJkfqfKd9je/AFrqrpkw2tgx6pdCszH90mH8bCcRQoxqsPULpiW1NrGtr1Z4ikUgvnE4aVvo0u+ET4A/5jm/9Zv7DP/2HcWGOaot2JFhJYCTzuHpbz8O+nfn5dNADck3w0mgcCYoMP7f+en9W87MTLWL2gkSIYtxFQ4EwMzFrysiwJdyx44hQ4kzzZqFEctAvfU4BZ3WpokIIhjM+2STvr9ulhzLj32AMXEpPxUwh0p0mb+99N9ETHyEeT1PkqKu6wfhDMltTgyTFWlocHffsImTBPnK89zt/F4Xy537un6QbsAkL0aU+8xXKjC899jn+7n/zt2jbhpE7j2OTDf8oXneAKm0oR0VsuBzzw2eh1OOfz7uYyhCXfMTQle6f+WaJ8tEVkGB2VTnBFSWr5YoYGnAOXzrEQbtaom1DOSopqoK2adCmMV7aTFwsGdFjej6EfebyGebxy2xtT/mB7//DfPv73oHqHDLDuKZ7ITMZ5DxnBtVbuiLGmHvvmGbsTMn+GU+KVB79e11TKrENaZnncyT/96tMv3T3edwcEzcw1dJCtr4xLuWxDSeKihkDqqgLZF87DjobH68X7TV0Bp3nFul5bBhcPaYRPToOIon86ysI5Vr2KFsaBLo2dl2AKYH4lM78HroV9kIv5Nql6vrjvd/5Ayfex9o93bZQ/sz/DtBpPqNnt6ruqGMCwsHeHj/x4z/O5z/3OW7duglA6TbwMmWjeB0u3E2MPt8xPefbcbMlV4+8iBWb5bb/5trD5yBJr6H6QS0QV1CNphRlSd20tLHtCoAzmgiN+NJACwRDMsW8sxN7Qep0T4u6PW6F32AVr3H2zGl+6D/8Qd79ta+DsEzgiNABD0KwFFNU6VkJhCSUmcUv0Dbtiaa8ae1svmXzLPuEZs7n2EP2gfpxs0VMMlfzzy7i3eXz3FrU8ujwZihdvxHk2ZTu3kAgijXrVkW7HhwpBiCD62UTFwGNa/cDlqvMFz9qyufnOXrkFNvaM6Qx6bR4/oQkFghtzaxWcoAgfS8JZf7wiQG3bA4nxbG2SOEbv/NPnfCdI2e4XaH86Z/8UZJV2EXSkmubNCagLvWHKKmXNb/6a7/JRz7yWzzz9NPEqBRui5m8nlLvBwpU8yAPdshOKPtKkzVNeFLt02A8+l+Gpm1ekPlaPgnmmKIaE4HlamnNU71199IkHKKRUhyqwdorhBayyYXVW4oq1hYgIrQEd4kD/RQNN9jZ3uaPfd/38p3vfycalgnoEFBtiRpps1rM/EAD7Kdpys5AAHLdbIqQYj5Ph/JR7XhxYzKful18MGbm0Q60QOR4ekJAcmQzz9IgMiqSmq4OWBeOAQg0RVkHLfWGPTgUOlKvYdQXetPefOx0S0eCKL12Oh6ZHa6FnEc8auabb9j78dmPtia/mgqlM6n04HwiiZXwZO2b2zqYbMYjQvmDJ35n7dZvVyj/2Y//SP8gJFRNcmijkiJtklIUOUztKcoNFMfnPvsZ/vGP/SOuXbvGxN3PRN6AxLOortv0WXyGO6EcDeG+iCly/NBuAfTnJpkYhhIvRhPK8ZQ2BDPxNLdK7xE1XpXC26S1TZNMwRTZE8iID8vDBrxEnFdqfY6b4UMoNe9659fyw3/pPyS2C4QA0iSAtXHGtm1DCHVayENjvA80OCdUVdXn7tRA/0MTKsZcdM7aTp6FMNsLHeW+KoRe8xw1jWPaA+1ZByTSQGZjz4LZDe+awNh453ygDvKipMU9rBftwgSdC3N703y0sW1vCucEWj5fHqPE+ROzj9q/P1x3zgh6u7nIFkr2b08KiWQf9vdcKH/ix/9+v8PAgDOnB5STFpTdh4ArcTJGXEFQA+l+9rOf4+//L3+f1bJm07+VikdAy7VBHUYQ+ztdf/AXV5fDY11T9idMPmcq4fDlhHI0aEYaowUtnDcBaU1YimQ+xaho6o0pGjofEzT9TYpaBlRrai6zH3+bt3zNI/yXf/nP4uLCAkGxh5vFGAihXavKyGZbbh0wzMsxGPvhQhqmCdwgMJK5b+zxBws2Kelhgr67tvS+e7Yx1gSIbMXlzmnaXTuboya+JpQk/tMuf0uvzaW7rwR8O2FZnrRUu0qUE4Ry/fOafNEwiJQmYVY6H1zpLRV7zHVNns+NH4AT1m7y/0Kh/Mkf/wedoKjRSHWZSeNENT/MOiiTrHVP4U0owfI5koh8f/Kf/zS//Mu/goaCSu5gyushboIWZkrl/Vlyh3p6AVOyx5SfYm1Q6D47rI0bmsEDVIYI4kqq8QxxJepI5WK2EgtfWLVG2xBipKxGyYfDSMSa2vxKJ5Cq5s3PtPGwXGQg6C2u66/wte94NT/8l36QZrVPjC0DTNY60iY/xkkLonszLewkSDFYqZtB04qupUAnlDlyGQfaIy3o7Jcdi+6macipAkG6FgiD+gjzxaOubR5djWkqNbMEf0wlff0GYJuA77oud5DAI7xAGa20Nj7d37L2KqwL8XDTynlY+zcwZTvhjh1N53AO1n7/PRTK2wYPiNpu2Cty4z213TIB0GO/09hUgIuBAjNTcLZYnXP8iT/yB3nvN7yP/+Xv/888/fRTLMMzFhCSN+D1HkQLNAWCumfq7c/uNZX1RZxiBQODtfdZlXVUSp4ZjS31ak5RTfBuZOBnTBDbUCMilOUIFyOhbgkiuLLAFR4npYH0u96aMTHFJatBc0Bhgy15Hb/+m7/JL3zgjbzn7a8gBgsmDCFlJw/+4JbTptSlBgYfy9xCURVtm9S3MnYL13Jt2lsMnf+2fhnnrBBd0wK2bmKgqd9GXnRrd5u4ltb8TsS6i0lh5GRk66LPg4bYoiq2LrSAIQBgYJaL5HHqcaonDlD3XOsBqGNChUW7TXv246FKaowka5v98By/18dL8Cl/tDNRbLcLg9xQ2nlSK3KitUn3zujjXU7qJw2DCPgSkSmjyYy6XvB//rOf5Nd+/de5fuM6pdtmg0eRcB50k54jNIubdn8eTbIMP9Vryv57eVwH8m3viwV/XFFRliMMxWH0lsYJK6k8KmkktVTLaFQiqFXQtA0xNIhGwwJnAQKEiLiaG/HfsHVa+LG//3eg3h2Y1Ol2TghYrFnxR5TY8Pmbpum+fzTF4FOK4ujiskBPgi4OMLVGhB1oQtvRYapYPtD51F/S9f6WlacNoW8+bdb2L5JN6OSPx9hVDnUoI/E41+uJPsDTC6S1lsiO55GJ1zzna1v52rMe1YzZXTmW0ui09GDsu9SMpIjb+nv5Hv4v05Sttmlp5wHpPYaOjNl5chvvXBEuZoHiiyxYfSGr8zUSlWnl+ME/+of5U9/3fXzs05/hR370H/Lsc7+BcyUT9yBl+0okbiBS2IIZLMTjQy/d/zOKpDNyzPZe+16nUTWisSE01rTU+4Iik2IVjrpukGhh+bIqCDFYLWhdd7QmviiTNgpoaPv7EcuTChVjdz/Xr3+C5y/e4v47RxB6AuaTduNuvAePtxaUoF8Q4gywkU3/mAVNlSgRCTlgNMzbZfRPukb6fNsG2iZ00WYjXIgUGqmKgspjQRvnKF3B6vCAw71dyqLg1PlzuNGIuoQgiqZOZTmK089QzhHqYBNJ7oUOhSJFSAczNpxnGFpMyew9Ej/ohq/TvBkOKt35TZYH2rHDXKeEUyd31q6iW0vSJUrsXGvb5fBebu+4/dKtEAcYwmSSORmAOtLt58GErlRJMvW/5pA+WGPlBu9jaq4TQB1vefXLecvf+6/56Gc+zy/+yq/wG7/xQRbuCablg5ThTpzeCVoOpvaoKjn654uZHLr2IzmqQGq519bE1uOLEleNKEpvPS6bFSFRf+QATNu0pvwLjy8KnCtoa0FDTBtTugcHk/gw+3yC/+Mnfob//D/9w4Ox6wXyuF95/N6HwQr7jF0nDq2ZAWLIvmXlSrnfZT650C/WSG6mFDs4nEShAuSg5tZzF9EoBDyL1QpXFEyKEbtXrlDPDymrkubUFnp2h52HH0Ano9RPJZmFdrEkGDkQFdf8xpgSrH2gKpveeaykm+hu6bsjC797aB3+ODa2LgHO44Bgq5uv40srab++5jePrAxGORJO0ha3fdx+J+fUL1FzA9NU4GsFxT14zmCxfUbQOau8LkufmtBkU0U77huRmBLRZj20zYJHX3kvj77mT/Jn/tQf4x//k5/gAx/4dQ7axxn5M1TcRdE+DDoGcgeoPCT9IUf+/srPN9hp049A6r0ZWsS7xL7gkp8VQRzlaIQvCuq6JrQRvKMsR3hXsVqtLImbTC1xQiFTfJhy8eJlCl8R4iIFQfI9rOuDE02kwe/DYEn2+bvgSfdoPY/OCcwZgyGw7znnE0Y3bb4KZRtZ3roOz94k1GZyurRol1EZhZZKA7KKrOZXuXnzOqOz28zuvpAoWFwS9N4nXPcV7WF7zTmg1RwIZF99ccTWOSFAdjuHgJFoJwskd+C2wNYRlj8V4591Rur2FUby3+le8vES6ECyMGUb36rpfUJ8KGLdm9Tyl33+ShGnuMRb0vGgDgczpVfobH5DzcTQMBvBD/0H38ef+v4/yMc++QV+9Mf+CZcvfxrvHqd0Z5jE1+DDBZyUyfKSgWp5sYEbapiBLAwnNkWuFEHbGiM6t3C9T5QnQSG0gaIaUY7GKTCkhGXDqBwx3ZgQ6xXNakEuP/NuRinbfOGxL7KoI6V02JsBeF3W7yXftVp/SOiDQpnH6GhToKFPmdMkfX/P/ggh0DQNbdvivWc0StFlhyFoxLRcKZ5VE6haKFqb8egwtqZocL3cXLeKQtUqOl/igTarnJifNYG21VybvlFR9iuH8zQwJ4dBKgY/j8rp8BjszMcEtzuxNYlCelNX0ga8fjjIUeL0rF3ke5jKonexToyaf5XjtoWyHNDl51bg9rd2kbaYQjJRehPV3Dpz6vNOqF0VfB94MW0b0qTlBjjmi8SwYGPieffXPsrXv/P/xQtXbvC//oN/xIc//BFWepFReYEt92ZccxqN5cCdOElXHl/sGbWy/uJRnYsJqRiwPlOUiEBT1xRVyXgyBYTlckXdBkajMWU5Ag20oTHfbkD3qDGm/hm2kQ19lKFVvXaffQVu2viyphSGFTlHF0EPODg57eIKj/OFmesutU5Pi1KCRUwTh1snfKZZBvMoZp46FQqEw91dNtsWzUXPqoN8JYnAIf+X78noRY8eneXa76CD+2dtrtef/SsJQ/Jr+yt0H5fMRbx2LgOcuIGmXLNUBnb2i7tNX/24faEsjrQDH9ysaUFjjg5D5oGsVoHU7ggDZ4dknmh3LpeDEk6tWY/EbqK8pPSLNsT2gAtnpvzw//3P07bw87/wq/zoj/1vXD381zgpmVQPUcWH0LgFjDpX8fgQnTBoJ45jMj3TTpqtBdRItCYbGzhXsFyuaJqWyXTK9nhMs2qo69oGuKvHA/Bs+Feyai/y2x9/jLe/6b4+45rWlRXrS7cSj5qh3cdliEbJf/evQ37P7jkDD3o4nLPA1aiy351L/Ubs+nFAeWGBsECrAdcR8CdgffpM5k21wJZQNw0xKMHF1IQ3L/S0NgaEWOs5yKE2HAZsTnJO1oX0uEZ6MRWapkSzVuvPl628o1Ue3XruzKt1i6RzEY7e6e+Z+ep7hEhnxqYLZkY56+fougStQe2y4KU+Fi5PinaBkt5oIJOlm/2uiew4mY3m/5tGbWpr2PNN73sH7/vGd/Fvf+lX+amf/lkuXXqMg/g5SmdVKtJeQOJ2Nwk9z8uRB9T1gcxHXkAidORH+X41tNTLBePpJtV4xGpVs1jMmUzGOIkEDSzrGuNIMe1qebtNAL789HO89Y3305vyw/s5Yral4yjiZxhNhFxFod3PoTWimrsw5yNrpIRgSdHQwZWtmZJGCIF2ueqYAHrxyblr7cjIDdkoNK0xykdVtMueRDK5l2bLKWYAQS8U3aQMx2PtzywUdIJw0nilWeRFjyxUmjffHva3Bo5IPjvOQYgJmbR+eOcghjWarX+X47aFshpV64M1fHCXbj9xXIjQtSWwMjjHUXxk3o1JEIQ0j+kNvzZQSuobjy2CRH/d3QqqvP8b3sa3vf9dXLl+wAd+9Tf5zQ9+iC996YM4Kbhj69vQ1XlWq2Zglh4xceRoCW3/3nDDIAUANP1X64pWoSxHlKVnuVgxP9ijEAdB0aYBDbYZkbQIBYJj/2CO4hFaW/h51x4+W7db9L7L0HfMY3o0L5mPIWxuKJykYIqdLwMRkmmdtIEmTesjLBdLdvf38Az4pFJgJN2dvRDs+64FaRQfIbiEM0VxODqimNSTwwHH1FK+jzX7PY+Hdpask5MshGOjMJjANKP5XIPL5oxCtgDW5S7tViEkSyb238lDhrWuH35VB9jr2z1uP/pKv2jWHe40ycOHywuQVF/n3FrtXWe+GOYH1Wh9/MQSr7nkJZ8jdosGM3+Tr9m5GOm9OszZmXq+69vewXf/vm/gC196gf/5f/kHPPXkv+L+nX+Puh4diZ8MvYmjRsf6+7mltyD9NSXazhgaGjdHy8pohmOkDsHyxsmH0mjcMapC5c/g2xk//wu/wp/+ge+CZi9pAk1rrtcKeQw6geQ41vVFYXj0C3U9Wpt5dzLRc/+slvdO50rT6tMctjH0PuTAt+1Hq3/NqULbIjHgnQWMovSCL51TKQN2Prcuh7IecxgesTPPrX4TXX/29XHQI6/3/uNQGx5tdNyTYKX51kFQLnfvTgKuOtxcOgxVMtl5Scftw+wGtIQM/BjAKB60361t18jCmHbdwaKRxIXjME4KTQMxeMZuBwZjXLAekm1iL1hvIHT0PkMIxOWSO+/Y4c/+uT/DX/5Lf4Xd5RMIr1r/8DGlefLoHYWzrW+8EQ0NEWhDYw1p1UyyjPu0zTISJbdet++H0JofHbOgQGah6yhvpB8D47pZD9R0ApfTC12wYT14lV2KkNpA9A/fo26cG4x6mgwRSzoV4q2xqoLXlExfu8bxsYurGq0b3LikTfOGyjrxlPYuhT3LEDh/1Jxdn5Phsw2PkzapkyB3ptF63zAPXQd7HKzB3n+35+gCZonRTgZr/MVsrts9blsoV/Vi7QZ7/KANqhtmU1OsO/Od9uFuSXZ7Etr8B+Y/ajbXkgmbJ0clYszqFuiIA67SY2Yx/XfQhtlsjIhQN4dUGlH1x5XiS7AuMvbUBqIbENMCMZr0yJBoUPO3sMLdFBzRCo1z2lbRJoBadNZJgXiHS0DyzlKUrLHlpPXfjbsi5FRO1kBDrRpCrkYJaRH2BM4GYndd2iUHtFDBR4eP4KPio2S2xTWB0fVbQZtIu6wpt6eDYBXZfBho1jznpvm6Cs5knRwF6g8Djl/JZIe+YuXF0VL9d9ZqO9fuj27dRhVisF0zs2mQ16EYsH5w1vxULzJhJx+33wpvsBv1fky623zfWeAGJkLvOLvB60ou0ckM0rbTJA+jwx/2C2ot9Nydo3+92wklgre8mWjk859/nBgjhZyhq90c+ES9OlJe4tgNvj/YUdfe12RqJxMnCYoTx8w9wq3wQT75qcd47SvO9IwHHpyUHfVj3qgGm/v6YqEXjIyEsf8nz22wQPM4Gdu4G+A+zaRsmgbvHVVVUlUlOeeW9LOV3wEn0Nqka+Y5SIITIouDQ6rzp3oh7kzl4eZy3BR+sWMtAzDYkG8Twn38fKQxleNCeHQ9dFZM52nEhA1JKzKDYQabzFF74naO2xbKowGF9cFZfz1/3v62FuXdwpXeVMsCObTiuwJk+wCmRfsmN5gSZoj4WDs60xkK5/jlX/5VhIJCLxDWKgzSwjjiu73Y0WlIWf9kesnueLBJrSNn0nOkxR0HPlzTtv1nktmrEsx7TW64PWYWTP+iOFkYaMUcJBsIpZ2rX9De+9RWPhBCTCZuquQQpSiKZMgkCF7QlD3uEVvZj8k44267VKCJxFVrqCYPODFC6iPjfXRzP6k28uj6ss3Fr33mJMFc0+Sqxz830PY5FtJtcoMKm+xi5U5hZhnm9hJZYXRW/9oaeanG7EtIiawPwJr/KMeFNjPLDcHPPXonD0ou8s27tWL5TN+dywbAdXWBIgL+SMIWTpgQIbTKxRcuAYJGv/72S9q8+tzTYCkN/N+kAtbMb9blP/+tNrFed3A4Hvvik7zl0XsIjQVRrNQrAci7GEEfOQVZ0w7d89sLx8aj94WGD9wv7KI4ToehqqxWNTFGfO6kFiOhaZEmd9DOvtTg0SBRgNpYeFXa+cJIx3y+Zr9h5Ygpa3eWC6u1+3z3zosGcl78taPHmlU1uKZtrIOxUtAw+GK34fRWWl7jw/G2P/4v8im9rDu93e6WhTMhze1lAedwrkQY+orDf5B7i2STNK1Z0GhdiZGEnBFKVyBeUi+N0CVqjzr5+VAR6rrtLdXMhTMwS7KZYYsp7/y9HwiGixyNJ9SrFU0Tkmb0vZx1KsMNJizr/fUtU6CjqizcDhocv/YbH+aPf+83ok2d+v7YogyYL1cAPgmNdxY0imLMDyFfO/TPEWMfjMjBh6MbmHm8/XwV3SoY5jSzBjU+3aIO1MsaaSNRfArgaWeydtaOGL7WqdFNhlUNbYCq6MbcpiFbS0fM2H4nsnNqvieHqdt8fy8+9y/ma+b31uaD1BctUY/GkOhUutvoxzYvkM6qS8/bX9N8Tonr5WMn3+WLH7efpyzLtb+7nSHxmDLQlFmVtyEmQHa+PzOL8hGxhLGpfQMu+dzwJwmjOEsjiHfgDKDQtuuNSk8yW2wfKGiblkI2QLuS7Bd9xrVhTMGIsiw5dXrEweGC3RsRTQn6XGzb+wu9wOdcYz5fXgdrsUpxFLLBalWjlIAzoXRCcMnyCIpvlCJE5ge7LA/mtKua2LaUVUUxGePHFaNqRFGURCcE51hl3p5Bv8rc+9PuQxLfraUgXOHTvPTLJ0Zb2DEIIShhsSSsAgSxdm+aKFByflfM88yRVY3goqCtNevtepsMnDJJWlUGCzzbJNJ7FifO2e34kCdp1nVhTeHGJJAh03l2wSbtBPHY9fMGQv7Y2pMMYhwn3v5XPG5bKIt+O+3C6/2D9Ucu3QrBSqByBFGErsxLJOUvRRLgIJupPpXS9DVpMSQai6EJPDhebHJUlctXdjk4OGCnfBMuJh6gvBAGfl33HdYFB8CXLU9c/XGasM9M3odwimxOdgZAf9FuHz0O0eqF3j5TMpb72N//FC9c3uWuUwUSTbOLQqEOFyPlsqG+dcDlp55m9/I1XBMoGqVyBWHkWRXCdHPG9qlTjDZmrApHmHjKUUU5GlkbeEgpLatycElXeht02/w8qMqxudU0lqGNFK6w1H+UnrDLZYB8P5yqavLtMYFMhTIkc1XjIKUmQ92Tcai9TTz8+3bm/iThe7H0SL7G0W7VFo8cmFQnHr20yeB+fzeOlwAeSNcdDEQOBzca14IPQz8mDiKpxsad0D6p32BOrWRUiWFnE4eL2Xv2HrbT5rD+iRPC+rjkjcQ5RzUaJfNzYM7F49/vjVqDFt6sf51FewmAVp6n0lPr5hVY5YUwWGhyBDi0JpH2S/ZRFBS/tgiKVqwMat6w++TzzJ+6SHVzn7N1i1eHRIe6SL2IeA9xd8X1F26A94SiQAuhnFSMZlNG0wmj6QgKj9+YUc1mFIWnKMxyCDESJUPKhoihPBb2bOW4opqNKdrWAjhqG6YSEnrLUYiY6xEN2BOjEhKRdTdfA3/ShuqExa9HtWRvIn81tfNim/RQIPucZbZqXuRcx7Sk9D9f9Db0yGePauevftx+160TUhNgQtJqLyg5KiZZJXbMYHlwhUykFDTa2+rWzilY1Uwe34h2OaGObU6T7zIwHDJesc9R2WAUhWfsRrTt3O4x+yokN1NOnhfvhVb3u7+jrFjPX9kiNM3bozgGDsjAZ8omUfqIsPa8LgtyjNR7Sw4u36C5vsf84jXkYEkRlCJf3SVTX62fhY9YlXwbKJc2LmG3oS0WhAIOC6H1go7GFNMJs/GY7dmUYlQg4xKdVcRxiRSuK0aWVJpWqOKCUo1HbJ07y3x+BUGJjRI0EFUppUzPpB1zgd2EUi/mhLZGdWSa2BYNfXNbevt+OB9dQOYl2n63cfTnTm7Gkeh0NymcLJJHf18/+ckvvxTBfMl5yk4Dxp7GIgyYyYY4VxOS9Zsafj/EJj2D70yXDDCI2UVLCy/qUbN58MD0Ed8+imt+W/7pnEs1h/23vuqE+yWr1ZXuzyVfYiJvNL/SHqY7x7FF1CmAZJ4n37mfG80f6IVZLDHt2kB764D55Rv4NlooQtTM/wGgXjTiYu/7OLGgkI+gIVqSu7H2cwDiI3GvppY9rhNptaV2kXZS4mYjqumEYlxRjEZU4zHjiZWeOe9wpefU/Xfhi4r5zT1YLtBmhTY14nwCPtrExdgaVYoGlqxYHh7itqeE9ByZL6g/8tgZL9K/a87xxY61DX9gyb3Y/A/31JNSZZ0C7Sbzd/d+X7L5Cic8ZLrxTCs4NF/z0stC3LatadPCIy6DesGIb12nwZLvnaKtmGCuETT3O9wwzO0SSZMqtCkHGEJg1dadQHbCceLEaPcvcAuAr3vnu/nIhz9IbNc/lY/1bMhx82U9BDA8Bp+JxgOrqviiYGNzC91YUB8sTPk0KT/WXQcjKNMIQRM/U277neYkIU8kEZnF2BLbQBuVQi2Y5UTxq5Z2b8HS71pdp3O4osCXJbMzpzj7wN0wm6CnpkzGd1MtzlM1DT60tPND2kXN/u4uoW5ZLOfWLCkKQYXoHau2pQohdaqQnr2dHGM4qoN681LkxYUHTtZAR3ORR9frkLsWZe29PKH9RnnydbPrduJ7+ebz47zE4/axrxYJAGyCnc+sYhGPo+uHGDV1U0oQKTCqwqEAgQGWPWlWIuISy3qalJCuZX6pWr/DQbObo/m3zLEiuNSGHH7rtz4JQMXdLJfL/MV+nAYDtvaagvOeZXwGgG/+lm+hKDy/9oFfJ+oeTs/kcM7gO4MA0sBPGsQT13zW4cUzc0ARAy4o0TvKO89w/sIZQt2wnC8I8yXtcklY1dTzBW1TG4PeqkZWLb7FzNtoPDvaAfvTZoXiotq4J1Y554XKOaJ6RjEFYLpxaFFtqecNq9NbuFMTCI4aYTqdIgeHLPZu0WoLBWyeP4t3nkYircf8Dwc68sj2jFqDpXPwqEYIreWfJfHTpV0td4DOR3dH2gtMP1V9TnQ9QLcu2CZ4+bORKIEulSceN0j35RwlKQ/bX7e7IfKuePSKQ2FUNNHiJEzUS8iL3D6iRzKPydD3i7QdljKnNoZwONZM234nSvZpSn9IsgeMeTxfMXfw7f9F+hKdk44YkoAGYbWKfPITnwaEUI+IicRqaJoMj279KimyGFmE5zh79ix33XkHD73sZfzqB36FyB6ip/uF0/mLduSJP2rSZBpFm+91wQyhpQmrJMAFoXAsK8O/OjfBsc2IyCQqsYnQNGjbom1NvTen2ZvT7B7SHCyoD1fEpoHESi5RKTCBdUoqoaKjSHTiwDnUubXGqg4hiFIrzLUlVDBbKr5uuPzUsyxv3aJZHFqXsqiMqhHVeALbU2Z3nWV0Zgs3Ka01fIhIKs7WCK3Ejr0A3KDYOa2hDGVS7eelX/b9mA6CNG5t1ffxC4sESxfUya3mEUu3OZFE7DaE68lgc02nGpy+dzzWX+t+qgFEoiRq0lQN9dVQY/l4CZpyEFHNZqSGASdqNlH7apIYIpG+PCgDDpwTAuCCR1K0DifEkARLFaTtBsm0pWmbYYR37f7ygGPt1dsgPPPss8zK+yiY0UozUGwvZpP0zyp+Thv2eeObvokYWr7uHe/gH/zDf8CKLzKV+9NOOthkpJ/MpOOPrKNshqlVhQw0dibiUlHURXtPpCM/FlGCRbVQL7hxiVAgcUSxOaG6cAofBOqaMF9R7x0y35tTz5e08xpd1sSmhSbhcFN+0aeia8QRkY4VPPv2gqN2CfcalbioufGFp5k/d5XYNihtqq1U2npBmNfo/gGxjUjpodqkdEIVIuNg0e42tXMQ53ClUCTq0cj6mGRCb1IQLcNLugxidnM6aeh8kv797Kfm1gR59pNOMJZIW8OZAgUSIVgGBZyI8z0aj0jKgL4hn2Yi7C7qe/KSO+m4faEk4SKjURD2bNyxW5C6tgBtM7YC5aMwr1SKJGZOOS9oa7kwwxsEyFyhDDWwDW5PaymdbygqoM5IotVxOG9ZrVZMx9t4tULi23XHi6Ik+CsQlDe+4Y00zZJqMubBBx/kqS9fRHWBYza4B+mIplVzzWOu0hhGn/OGkPba9KuZVuvghrUp1978tSGQNO5AVUIFVoI1wrPJRnuG2SoQlg3tsqY9WNDsHtDuz4l1Q1g1xBT06t0Km8YMqMnBs1kNo9rhDwPNjQMOr91C6pYy1UPGZJaaJxJgFVk+e5VrLnJ+8xUUhUd3D7nx/EXiyszGWhtG0xnlbMJ0Y4YvPdPZlFgJ0QktwayV7BuK627QsKa92Tp0DJIpZ+md5KsaJjk/UUIfp/RTUOz+AdeGLiCYc+iWW++pLod+aKeFB3pTE647pt9Zs+r09tffbX6uS0Vk0HJIDW7sZgawu4R0MV7gXP+Xi3HtXFmjZl5YjdLlH+smTQhhLTRuSeekKeM6I54JZTB/Vq2l+k/885/GS8Vd229n/9btPmUWhsg8PMNoNOK+++8j6oLFquGd73wHX/7yPybIdZxMUnQ3b0gDX2fNpM3InxzZyBPVm/PSNbW1PpkO1yXl7XxJ8LGNLhfTmsybZaFgpF5AXSjRQxwLMZTIqQnTO04zCQJNZFU31O2KZr5kfmufOF8i8xVt3RBra6XgJfnDowJXCNWiJeIoxmNWN60ZrtNoOPMIxQA2pwTaW4f4VcT5kmZRc/jcNfx+nXLVyry4Siwch0WJAOXmFLc1ZXL6FG5jgq8q/KhCnTd4petkAUfq3Jx8yYyXzeiZ7CLY7ahhpXNrxZwKS0OXe4fYMkpIsZy3lTTeKZvgfS5DHB7afVdVjxMoDNy2202LvKSUSDZd+yYp2aCnu+i6aZmjfrkrVUy+ZzIzYi4wMoFv25amyYXMfaizi5YN2uatU80rEgMxKG0UaoWP/NZvc3r8KAUbxLC77gJ+hUMBcTV1vMojD72cwnuredTAe7/xXfzUT/0My71PUsmd3YNbI9l+0STHqHvtqLms0DHI53Fz2b9OLA0iviuBcs511ohL7POoX1toFpPQ7vzkIEZCbDROIHrcRIgyBY0UMbK5rOFwCQdLVnsHLPYOWS1XrNqAc45Td58jbE/Z14aqcvhTM+obt4jLlgLFq+C8dIXcrWAlTN5BG5AY0bqlaGAUPMSE2VWgVZzWSIjUu0tqd4PrxXP42YTRdEI1mzHe2aYYTyjGpZW1VRWuLPGFM8EURVyuvFHUr/MMZc4nR2bXlLQxajK9xcDEtqrS+Im5XYk600Xrth1jLrBwIGU398OJlaHpm4q0bZ362071vKSUyFHgwOCNfhAGu4E50pZ7MkHOFSEgqrSxJcR6zVdt2jZ1vFpnbXPO6ixN6G3gO8GMRssR2kgbC378Z34aoeBU9QZu3tqlbptEbXjUFzj2hIhAcFeIoebrvu7rqJcLfGkt72Jb8we+6w/wY//oxwh6mULuzvJwxPPvd8/+IY68LTAp7mQ/fJLHv/QUd7zlQfPxfIHzhTXFGVgKRj+BmYwMfaReUw6FvHsekpZRIUgimBZoxQrLxVUwKpCNCeXZLdyipqprQtvgxdFMS/ZdxIswceBPz9gM51lcuc7y4BAXI7VCERNb3mjEaHuKnJ0Rc8Aeh8qwa3dAgqLOUjlFruyKUAZF2yVyUNOUhywvXScWhaXQCodWFeV4RDU13K+flIxmU8R7itGIWAp46Zj1nPalYr2XSv9bkthjc6VZiSSsk/R5eJECcW3+YD+tyZztjMZ8oQiBYcnJVz5eUqCnT9APVPZwNQ6fS5IVn9A6RKPCV8Nf0QZrHtO2oWsggwyKSAlrat9QPBlgOayllM6MrINSR88nP/1ZKrdDaEfGXB4V7Wgepb/nZP7kATTzUNmPn2Jzc5M3v/a1SKwh1qi0NHXkne98Cx/4lQ9w6dmPs6mn6WkspY/3cJIH0adEsu9WcSfT8g5+/Cf/Be9759+Eds+eLQVfEAZ9GhNtSrYSc2SyWwiStGN6sNwjA0s3ha4dgL0VMc6cHAuhcAQPrRRoBdo6QoysfKBVRXEsneLGwuju01RnZ4S9Bc1yhQYr8RqNx4w3NilnE7RyuLJMAZ0KxNNo25maEYtFRC80jrSxZMYGZ12U24gPEVatmaVOieIJTpiLBYdaIn48ppxOqWZTJjtbjDY3GG3McFUBhbP2i2KxCkWtkiNJTI5GZ3B9GtQUv/BE2xnJlCldP0tyEKev/c3vddxCeT3303Rbx0uqpxwK5lFzNh/9jiPd3xqU2GrXnNTM1Jo6tLQD0Hp/ku7ra4fgGZIOZ7CCLT4H3vMz/+oXqVcNLz/9+2jrEpW29zEkUehq749018MEKbpLLMNV/tB3fh8sDijGjqA1UWvqdsF8/yZ/+s/8cf7aD/9tVvIFRvooiOta3vX32v8f4ch7yXNtla3iDVy68W/4pd/4KN/6ztcRNRpuNFdMJP8zpgi2hfftznuOqxyRjImPd333DjEkjpxk5XQLJcEDo0vPDloJmho1haiGZ61bpKmJoTG8a1lQjks2trYpfIFLFCK+LInirGBabWE6V1CMxsRqRHCtEZDlKKfSAQkg06iZQLooSDT/0UAOyQYlkDJ/SSgVVnPi7pIlN1h6D0VBNZvhpxPcuGLz7ClGmxv4UUU5HdGK0X43aOqz2u/Kku5H1CCHuV5yrWi995q6P7R/gaEGNd91qDa/+vGSmQfyRHeM2wMf8yjaPqcy7D3tKfJDTd02tNFazR0/ZPCA6RXJwui6t4Zdi3N+6ZlnnwOg9BOCYDu1p/NH18U/BVzSr84JhzyG9543vvbVeCdoDITY0GpNSIJ37vwWDz/8MF96/AuM5BWITr+CE78uJCYQJhVBQerTjP05/vGP/zN+/ze9i3q5R5BcCJ4WsGbXAcDRaMnh4YLtzRG0B8kqyYu7tyAyZZCq0IYjcQB609gl9yHEFJBTBe8o8JQKumi4+vTzxPmSGFpwjmJasXtqh9F4zGxzk+nWhgVURBF1FDKgMxlVVOdOUatH6xV1HdEQ8EhnCXQFxiQ/sdMsdh6zQlIqPj2sk1xhmcnXHDEoumqJ810a3UWBVfUcVCU6KvFbU0anN9m6cIZia4YWaWvuWOhsu1PB8ujaj1WeP9OKeTVJasSQNznzJZMOSKm8PC2/yz7l0SDOSVCm/LPPZdIthiyQdV3ThoYmGuqno5VZ87myHThc0A7pomQ9fnFY1dCzC/SlXiKuE7q8sfVg5O7jOCcU1ZLF6jne+tY3UnqDoYUE88t1lGVZcHC4zw/+mT/BD//Vv8GqfpyxvH4QLKA/6fCRuu1VBq8BlEx4FTf2fpVf+PWP8u63vRqRGiex94GcR2XMl596no9+9NP861/4JQ4P5zxw/338P/7qf4I0cysG99m8NfPV+owobRsJwX6P2T/o5pV+c03vZVPYOUehAq0iN+f4eU0ZraNU3Fuwf+uQA+e55T2jyZhqOqWcTJjONqgmY/ykJIxLXOXZvP887ZltQt0w373FfPcW2rRd/jREgwP6vI4ASSvaZ4ER6XhVs3+dxzqnP1yah6Bp3lRxi5Zi0RAFmmu32H1KuTb1TO85z5nXPIQbTdBBPXCOFA2FbTir61Vd2s1u50LGVI8bLVXWEeX+bpuva0idQbDnGKAgvWZV68HyjkkgcyOZEFuCWuemLjt79IaP8IraOCm5SFr1+EYgKSJm47puQuQj7959zsl2tar07Oun8YXwvd/z3QgNvXCX3R4KRvVdjpT3f/P7+Zmf/llKuQfPuaMPwFAwO/jW4PWYfKiS83gZ8fO/9Cu89+veRB0DzhcgJZev7vJrv/Hb/NRP/Rzz+QJxjp3X3cNsa8yzv/0k/8Vf/+/57/6r/4y2mScDIwmWREJUQog0beh+Pxqos3GI3S0PA/7BwcoJVSV4lMYLq8IxCcpEHWWTgPkxwHwBtxra4pC9ahf1AuOC6twmm3eehlGJViNKN+XUXVvsLC+gy5p6/5DV4YJ6Mac+XNKurHuZi6l5lAqFZvqRXKY59KeTO5CLyjX54onAStJ45Ai5EyiCooeBxcXLXB45zr3iIfxo3LMrpvWTTdKsAGyz0k5fHI135rVl8mCBHacOpyfn6l/seMkpka8kkEMzNoRA21ppT9NYIr9tW8sDkf0b0ARFOr5QOPaamakZ55rMns6MVlKTqO51JAzEsscqdskIAcRRVQWuWrB/+Bhv+5o3szEbQ912QQBr896zWDnnCES++dvexy/94i+xWHySTd7LMOydNaPttKQ+pulVUTIiOwIFE06PXs/nvvBRfu23P0U1KvjFX/l1Pvzh37HF4IStV97BXV/zZs4+ej+nHjhH3dR85L/4CZ7/8kVC0iQx5G7JaWGgNHVDCC2tHk9lHQVn5/8rCfkmjlg4irKkxIMYVLFUpRBw1qfbnlYFDcnbCwF1SlPX7K/muLFnfH6HmPKNReEpR1PcxpjxzgaTGExjrhrCqkYXNe1yhTaR0ARi3RDrltA0SNtSRHCD8j3RiKjrSqRNyw0glWK5X1VQpxSlp5gWlOe2aKqKGEJqqOjzjo6ltELnNskgz9KtoySFR20kTTGEnmd3zQn9qsdL0pS5ZnLNZzziU2YN2abURoxKXdedlsxh4yh54UoPRNf1Bx4+gz1/HOxGvQmtaSfU3FIP+2zy3buRHFKR5Fo+7zwbGxOuLT7CbDbmD37v99K01pgnI3NsoBMMTByF9wmqFvmWb/1W/tlP/jM2ipvQniKV8Hea9eg0nOR5igh377yV+c2n+Tv/3f9gEzOtmD14lvNvfRnn3/4Qd77+AcqyJKwiB/uHIMKd3/xavvT//RV+59OP88ZH7k5CnyB70egtmtbao3dzpEeFUikK3423kqk4pAuOiatwvsIRcCno4hQ0OpwrDJklAm5QuWODZqbzKqW9Es2LitA6tTEsPSIFMKKIUETFR7WWD62hhSQq2gTqxZJ6/4Bm/5C4XBGb1jaAxiplXKqK8eJToCZv/NDkeyoEmVSMz22z87K7iVtTmqpIm7jQxR5Uj4UDhnO4Zn0d8Ttl4D71r99ekAdeiqZMWL4uAKFWta7RFsC6hmw7PGedhHGoaUUSRlQGzWEMd9fplxxVHB72XT0mkDmQ5AZAcAtZJ9lJr+T3suXqgMlkRB2f5cbi0/zAD3w/aIOGlmi5G4NiIV3O0EXBq+DxSGh4//vfy8/+7M8wD59kJu+mbxhH2jn6O+qhVzm1k8whD3v1Myzq67jS89o//8088J6HuOvVFwit43A/0DZKaANGRR1RB25sub+9/QOa0JLxvyGNRxP6TdICbjnwk+bApcXTWq2mF0loFpdgZp7Sl/hCkLKiWEU0tgRRmqRRguZSsbSjSq6WcbhgTW+0EQOZO2/jk8Zfcq/SRJIW0zoLaeisE7YxQBTiqHSbcnWGIig+WLAo1DVxWbN/cw9dNQbla1qoW9pljcsuUkIRSFUwO3eKnfvuxJ3eYlW6PoIvQMoHZ08jby7dfPa22AnCljfwBOl0pkF0sPZu53gJQhmyDWYD1xH5KhoYqOqh1myp66ZnC2Dgyw1uVDPFBz2WKueFshOfteYa8dYRk3oIhndiEKnCO0IbUlVC745nv7MqPM8e/A7OCa9/9BFiu6Jua7Rd0bYNjQLOIaWnKEq82sISKY3lTVa8/33fyM/93M8zcTeQeI71vXTdnO0IYgfR2sCKp2/9ApP7d3jr3/geLrzyHqanQEappM1ZlM8q9xWV2G2SgjHuWWTYpC7GSBMCbRuTD29Bt+xTQqJkSa3uQkyEV973piu2mAspDTLpC5wv8dGKpgOS4G7DVWLrw1qyW2iucNDWAXFlOn8GlpvAivMdk4KIdBUiGhUpkgJwzjSdgrqCiKQyc0V0iguBU3edxgdLqXhV4qpmdTAnLFaE1Yp2taIOAT8Zs3nnedypLepRQRDprCGOCI/okQ32mLbri6V7VysJf9K6qj3o43aP2xbKprUqi6MwuxjpQOpZI3ZCOfA1TzzUGddLhMxmR/a7Elb2aNS3xxIOTMu88wtMJhNAcIVjPK7SYLgUWbQqErD8U1F6ojtk0V7izW9+A6vlHqEN1MsFsa3tXsQhZQG5I1Vajt4pMirRGHjzm97Av/y5f81Kn2fCuX5aB/Owjn/Mk2YLdK6PE+KKl/2x97N9/znq0BIXDTIqwPkOoRKlXzYhBi7/4mOICG9986PE1b6ZayHQpn9N22vKEHq3Yzim/WvJ55WjZncCZzif2hhmgei3nqPZoNRmtItSahusgD0hsbz0rIY2O/01c4zduT4f3Y+dnUMVy08mNwbncFGRctDGYuZhZ8woKgUOF9RoOZ0VXtellauxJmu3r82OPHH3W9askAsU7NWXcubbF8pmZQIWcm5xYH+HdS3Zaa4Y14Rp/bCJiJm3RfLN9ybeUQoR6BeAaga5S/d3Gw75lvd/I/+f/+nvc+vwce4+/XbKoqJuUr1naMldk4qiYDwe8+S1n8UX8K3f8j4O9vaSHxWYbFaMRiN8OaJtlVUdiNqgGiz1oh4vtnjOnN4BYKXPMpE3JF/2hJ1RBj9z7xG34DB8nukDZzn/xpdR1w2FAC20MVIUAj63Cxw6yUKztwABXzhCbVGjXP5mfuXQ31+3MNbIsz0Jc2t+VQZ3h+xXpfciObgBXY1aH//o0ge5zBqFEAbNVFMENVdg2LzlzS77Gb7bLI7mfl26bMzroRvnRCOCdM2VNJvSpSeWJRmJHDVXNnkzuvUrm5YnRU3Xv5NzlvmzafPsXluPjfz/2vvXWNu2LT0M+lrvfYz5WGvvc/Y596ZuuVx+YbuCjR1XjMu2FKscxwQcISER2QEUAjggywIEQmARkEEKEj+QQOIfDwl+8ogAIUJ4CJEIE9lBOAEntkNUIthOuR6ue87Ze681H2P03hs/vtZ672Outc9Z+9S9Uv0442rdvc5aa845Hr311trXvva1lxwvNkoHafq0WuuQsPN77uSf25G3V+c77diKw1xDVJ416OfKMi2/hDQFu6orQgyYpwkh8GdaC6qNQOAiu+LL89/AT/3mn4QoZUp2uxn7O2B/AOZdRF4LSgnI64J1PWOeE+KOoVdKETFE7HeC3/t7fw/+5l//BZT6HkFeYxvqWAirnkk68TljlX8LRc/46T/zDyPudyi5QlJFrIKyViLKoe+0XGwB7375Kyy/+oB/4B/4fShlBcT4paFAKz+lGYuDWrGreaeUME0T0jyRUB7Dk2clEhAkIAQiwKUUltxaeNuv7fbBOmhUFFgvV2DNkP0Eb3MLsn2m7oXHtTM+7wCfXhZamaPnNIB342zXi/WkAkYEsNyy2mwbCCSUZuCbK1Dg661JmxEyfPVT8tEG3nbmOMePI3xdVwA9j/NhnSbLtnmgXqaIMWLNXXryw3WanoONYd74kDriyxtyC+0TYPBeOXrUEAJq8NHs1obTNGYFv/L234Ci4B/7U38KpVQLODIXYgzspYscmXA5n3E6v8frT47YH3aYUoKbWEoJ/8Sf/sfx3/jr/y1cwr+Jg/6hbQ7hYWfbPgFIhcSvcNK/ie//yd+Ln/wjfz+VAoSd+nUNKItC9smakZlDZqMmvv03fwnlvOCP/UN/FEterQeQaCixE21MHV5vwDzP7X7FGDHPM41yCibIvCVkAIGbYwgdWW0AnBuE9GvaHN2TeRNBMPQ1xS024Afnn2yBvP5u2sJb94/9FgtcPHs8lc5NjegdRs4QskgBhkU8sRn9epscPOUT1Y1xs/oWEfG3rlN6LiFisoQ3ud/trvfSwml/TX/t9j36DWD46tO7tvKSI5jjDwK+wFDw9979Dfzdt/8i/sSf+Efw/e99juX0JYIUIAimnCDXQAJzTVhXGsNuN+P+/h6v7u8xzzPzFxXMMeK3/vRP4fPPP8f7L38JQar1fvJMWn2S/2WAxVd4W/7PeP2HfxN+/3/+H0NIEbWwNioVqJmzUGquSGmGhIqSK06PZ7z7lS/wK//bv4a//2d+N/7AH/g9uJzfE4S31q8YoyHlRFtjDEhpwvF4pLezv5nmGWlKrOJYPa4qy0QAICpIWcyLjSPl2qV022xRgBfx2wJBFqK5MUZrUO/v4c/La8LN5odnTrTe0h1U/6B+3DqijQeFtcApo4kx5FaWroJE8263nvbrDq/Pdo/Zv/cLsHXc9rCXecuX1ylLv1aoGLxvw0cbeAEbM9AKJ84ytmlSuvEgAiAos7wAaQujN5LqjSH6xjBq4BgqWRVFBce7O4QQsJbHFlpIP22oFvztX/u/4lcf/gr++B//4/i5f/Bn8e7tryEgA5IhU8SyVqgE5BKhtQAVePPpa9wd97h/dcfFBWGTrxZKPWrGn/tP/9P47/x3/3uIu19EXH8rLlcTXhRPMhSQK3L8RVzxbyO8jvjt/+Qfw7TfmZq85ckFKKsgLxFS2WlxuTzi/FiwXq74xX/uX0X+1Qf85/4r/1Xo5QE7NItAFR+ulFjaDxS9nucZ8zw3LznKgHpepxYaejmKw2IDYhDygE0BwMEqHSfgDFGL+yC/+wkUEU1OORNprVCMINg4Dw+VDYVn61/sxtXG+9mTbz83ZH0w9KravCo0IyA23pxW3TbJOzGk1XDHXHNrSLfEmVuj9D7afv3Bcw689Hh5P6WFIh7BUPnMYuZhJ2B+2IQXaIhDvxov1U/YdVa4i/GBd4MEts3M23+7UUKtcW84h/ZJ4rs3b8xleY9fefgr+Onf/FP4g//g78fbr34NVReUckGICkkT4jJBkTBjh2makVLCq/sD9vtdnz6mMH2hzDYjCfjZ3/s78Yd/7ufwl//y/w2/9dWfwWU9tXM9yy+g4j0W/DvQWpHe3OFn/uv/IXzyW3+y5V9exyxFgWvBqVQsjxWn8yNODye8/7e/wK/+7/4NvP1//C38N/9rfwGfHSNKLmgq8pFyGiwvSaNchhCYP6aEGONmghqgTUi6Tcyy64uVGq0p+JgDXuc2leiPi+ElrFPFPhtAUjHGDJFZKgWFBlxxeJHf1zCEvMA4jNg3XwzRWlfmd6mQTmiJ0ZTnK+9vsEiJmxB/1zqfHKFv6+vrjWj8nDG9hV2bBe72i4+QssO30n2Vzb/8TN+l3Gui7abftD+M3n0kBADbkHnzGtvJg9X8/CFCFQ8PJ5RSMMV7M/C+aQgU5+uvAlD8wX/vH8TD+7coeQEkQ6UgTQmHww6H44zdPGGeD0hxjygT5ol55JPcsJ2fIC9X/Pn/zJ/FX/lX/hX87ff/a1S9QocHIlNE+t49Pv35n8FnP/vb8Olv+wGh/8rQ1MnkWiq0KPIpY1muOL99xA//8v8Xv/Q/+6tICPhn/+JfwL/rp79PIeTopSTh+HZDViWQ++rPwg1yRF39+bkR0Whu7rU9Q0HglGl0BHvQW3jOp7SNPNjC92lhvmz9PDzNUAt5BUb/a1pM/rexeeeROKJt4W/R1FK6Jw9CpD+0MLPan0Ww3PX8Wttc0TPOYQv22Ger3Jz3y70k8FFGuQVdtsjnzV96CCU9F/nY4zY82AJA/ZxEgnVotASu/6vuLemRl/URv/TuL+Gnfuqn8Ht+5nfhhz/8Zex2CfN+h/v7z3A87vHpm09wOMyWT3Lvj5W8ypqpGxRcm0cHB62MHEpd8cnr1/jiyy8x/cRrxDcHSIr45Od/F6ZPDrj7qc+RLJQspaDkDFQxrdxq78NFki8Lvvib/w7+1v/gLyF/dcbP/7F/CH/2P/kfxd0E1LxSW7UR+vu9rrWyljiMaRvFn26fx9MaMD1LDYGzXawoD3FPw5AzCD4wj8XvBzDWGv2RuMByO48h7w8Sh3McCSH9EfONyfVVe/ad1jYknNoZTNEAPz9a7Xx8+xfkki/LN5mQeUq3PfFvPj7CKL/ujfsN8QcG2MP+eHvs73oDGvU8iOdB1Cu0G19rxfc+/xz7/R5fnv4/+M3rH0EME4IA1/UR/9av/HO41F/Gn/4P/3m8e/tDfPrJa/zED76H+1d7hMDZIfQmAsogRgQIQmVNUdUQWrHQpVgXu4WfVYHH6yP+yB/5OfwL/4f/E773p38Wd7/7N1mubeqfkaE2xccyrtc6DGC1HXjN+Dv/l38db/+1v4P3//rfxU/+xE/gz/3F/yJ+38/8dtSyIgqQpgkqirqylFNcmhOj93l6H0ejLKV80EDH59mmp6mlGxapiPpgILRlwUdTW3jJ4Ml5tPSarj3Uzsne0z2kH2obXa97d+/e8AJLl1rediOe3NIsrZAgrba9iXaeOZ4r79160i2pZbimYPefnCd/xw9/2M3xrcYWfP2D3JYrxr/xh6r9hzeJyVNDHH/eZ9xb+FQVJYtJXVTUUvD2ix/iH/33/Un88//8v4C//ff+Zbze/xYoKn7xq7+Ec/1F/Nn/xD+F+/2E6ZPv4Xjc43g42iLrWyaFsgTTlBBFICajSd6mopaCvGaUUtFlN4RyFTU3YwjRyOt2rc584rnzfKGuzMb3Pf2dH+Ltv/q38Hf/N/8aDvsD/qn/2H8E/8H/wD8MLSvKuhAUgVhJikipgq1aVR20eRqG+WJ8Ugt0kODZZ0zkdQxpx42/qQZot4XRZz15/m7M9t+N/KGAaQw0b+31vqaYOKQJfiYsvXE9lJqbd8Zwjj3N2hb5mzHdsM0+VAcfR0GO13S7Xjf32NfGy2yxHd/KKMeTGI+OpvVEPEjX9XF0qqFn6vCLtJwSGNTrhs/qP3MPqTefbSHfWvG7f8dvx+/7ff8e/L//2r+EX3xnF5oS/lP/8X8Sf98nr3B32OF4f8T+uEeaAmpdoWLk88JapwiQkUkNKwVa1iGPMV0h6+rnQZ7jeFqducKIwQnY0RXXKkGashbkxwv+f/+Tv4T3f+0XsYsT/uI/81/G7/odvw1RKq7nRyK+7R5SHZANv3zwtbg059Py05h/jfdyU964ea7cQI20rka6GA1u+Agnfrix+R+JuUC5+UK9OT90U3uCatof3K7rtmnYdQSJUGEufnst7Vxwmw/as9GtJ7wdtRhCaKWkTW18+BxPHXq9ns+m/jgZPX7b+skMO5D9hCWH7a4aQ4KmgCCdwA6fCwKD2dHBBicl9M9xYkL3smOeGZON1atALuyve/vFr+Hn/+gfxm/6yR/gdDohpYif+4N/AFEzDvuEw37CLgVEsOWndTjAd2c+sIwMVwDCZoH45tJDRrUIoeSC73//ewCAcrraMFWT3RAxwwSACi0Zy/sFv/i/+Kv48v/5txCy4h/5+Z/Hn/r3/wm8uZ9Qro/QSGSyAo0FQ8NjNwV1yCqyoi0AVbQhR8zTpHfLuGy/SjNySbEZ6GikEYAEpXzLcsGEbE+AkYNLNLKHsxqow3Hl1dq5VMhTDSlQnkUiVKyUZkLIfk38prdONaOx+/5kRboIeOUIeKgYEO+horRgjNc2GKT35FbPNLtDkRErgPfvUnishe6N/BCG89luAgptNfyPMcxvBfR88MfuAQfDDSKYY0KNnR8bvMWrurL2AE1LX+gNbq5lE0K5Vw0hIoSIGBUxCWLMOJ9WABOu50f89N/3Geb5J3DYJ8R6xv2rOxz2O0xzgATqxIqDcLJt1NZa2/Xceu52Hto74FUp4lRqxe/7PT+Dzz57gy/+938dn/3sb4Gk2Be8UHbj+svv8PD/+kX8yv/xryMtwO/8Lb8Ff+G/9OchuqKWQonHmGxx0ICce2pmwc+sFSWvzKthNVutjR8agiCG2FBUt9pu3gyz2xwR93IqSAq2R9WMnBdMjmS3Z60d+bb3D8FkHSUiiKDYthZihJqXLlZnZk06DvnqUJK5XWY3999DWbFNPMBBqKdRQo94O7sMGGqLfekC2jm6/kIXIA+hM9eeO7eRi90AyQBI7d0kLzm+dfj6oeM2tq6DHKQv+Jxt4hIzfoY9weqUqJuc1Psym7yCkaNTSkhpMrUxPozjAXh1DxBL989lY66IIqaAmDj1Kech77VEyVvS2CPK3wURpGl61igBNG+jKjbMCCh6wT/xZ/5x/I/+x/9T/O3/4f8db37+d7bdWyD48l/6BTz8jb8LVOB3/c7fgf/Cf/bPIknB+f0XbaZFC8usyF2HxeDhL/V3sqnHWRRR1fi9DrZF5l0DDY1Iy1Cq4YXCTN1+GKjsxRcw/I7JBjBVu1fkpEbvkeSDRBUadJSAogIJM1QjWxVHUEHNu7VT2yAO33i0lKjlpc88Hwd1ZPu62/f5wCcw6rB1u3EeI6H/5muj5jD87cuQ2x+xUT6b9Hb5dMRI40kpGpNfeqM0zxotzNdCFKvQGzb7EbZlEfThGDOx8gvAMXjFcs6qlGLg7EuGL9WGTN46eFXr2Pf6le+gweUj20Vy6Sh3+qo8/6JAZjSMEBN+9+/4Tfjzf+6fxv/8f/m/wt/67/+Lm/s0zzP+6B/6Q/hH/+TP4/tv7rCe31q/oLTdeHyQ/UHz9bXaHJBqQ5SUebBKZzzJzSIUEaRhwtloAKJ9crYqSR+iFUUDQgVEApAmYFKoVCAbhQ8FKuQXIwASIwkMtaJmauuUKEj7O+QSiJ4W7SkAPDRE+9mH0M1xXY3X5UeBpzdPDU5MoX9Ecj26GbYdf0FbHwqBz8wZU6aejz81yOeMEWAzwAdbGG+Ojx6v7sfmZvEHT38uHXTwpN+/r+IPoA6UK2VHvRg3D0DngvT3HZNtDwvbYgvFxiFUqGbUuiCESuRU+V7PblhmuAgB0fm04IJs3mqY20EPTpWCNS/sYayKOO0QZActit/xmz/Df/uf/WfwL/+Vv2oPm57v5/7g78d6fkQpK86nBzYRW3jjbVW+CFJKrQjueUytpakI1OKTnoj+8veKlEJbfGM+K26QN0Kmbsxurv5ZIQjClLB7dYcQM/SyAqFQxzdG1BCohB4FGoA4T9hNE2IW1FIxH/eYf/A9FFM5GOuO22nOz3uwW0O4/d3tf48L3z1cUDT0tIM7PT1pyLGvQfvMcrPWbs9xPLfxekbp09u/fcnx6/aUgl53ei73eu7G9Ti+wkW0INYNH3sXOt8/ostnPL35bpDtYZcKH9FH8eCVpQiJzcDHZ9+Gt4TYOaEGVow3stgczi51UpDzglyuuF4vzHlDRFxXrMsV0zQhxgnvv/i7+Nl/909BbWpZrRUPX/0KQ0o8BwJsF9u4yLzx142yFE4qcyDJUUS+xhRRRTCFgCiwWigwiKryMzx+NDGvIIxvKlEizHcH/OC3/zTy2xPe/9pXOL97hE7AvDvi/vPPkI4z3l1OOC9XvHr9Cm9ef4JZImouKEFRXu3wwPCiqR3An+htTndzjKjxS9aV/7wpY9RKBfeB7zvWutmk0D1fQ2ArUwLfu0bvOBrq+Jmjuob/fGyXe+nxUQrpzx7mAb8uzKgg2uVNt6OUyBN3Lz1Mg8HVz8HQfmyMXNWAidoYOUR5a8tXvYThnRIxRstPU2e9mOivv3fOGcuy4HK5NBEwGumKUjNUC1wHZpGKEDJSWjFNM5Y1ISWG197LCSPdc2aISSI23/zMLW73dxRYHtTphYVxVP4d729CizfEYENPvdoCYT5W1JBa+18dwA6JEXKYMP3EhN1nbxA+/xSXX/wlRIk4vvoE+1evEA8T7pYrdrVinneQ3R6AQGqBakaZBAqOj/eNIQ5poID0vlZ0Hxb1cx7wuTVQiouBa9OJ8iNfl/Z8vY/UKbW1lbaGNWTRUOdo9+cwrtnb12xLIkPv8Qs9pB/fSiH9ya4l0i6A/33zYqVhFPDmZ/MYAUMMHsR1DdEfV8WoC9uh7u4d1VDAfjO9yZRvJRJaJzqNs28AaYpIKdBohq4JVAImOVMac8lrM8hR8qSUYhhItCJ7bywuBYBkxgLKkLifu4XtVU13Wtrm5jzRcVf3DYSfy/f2O0HxvMA6nQWf9Kjira7MQYPdC/X7ZvmnCBSxzdsQAQnzkfl6jCxplYkq65gDPns9QzRARbAIWT0lJRpPmvAYCqY4kfFThZ0rNEcaYOXkLVvaiJFjMMS4vw6ICbQBblwVta0yH93QSlFFbTPa6kSNS3E0GAVru7nWviG6B7cKwNiO1t9EuT6kh6rbdOqpR/8YLwn8KDwlgDoolD05HNSzfIbsGMLXYvG9CLocResgf/5C3AhlQOuqe0R1z/j0JETQdkrfLd1T0ivEvgMKH/DpdMLpdMKSV1yXZUNLU/CcvUPEFzTLFnxgjT8r0RaUGHJ6myPbOYLliXme23kBW0/Z43V+joe/fWitTYay9y8KhKrIJSNUekGGZmQXqQRAYkOYG+pr7WlNqsVyrDIL0uEeBRzSpCY1oiZFotGiAc9fA8PjBpbRJTO/NCBFYmgiYLANI5ghb2N7e63CpoTTKOmRpOkR9SiCXOVdmjDPc+uUqcas8ogg+FBa4OnGzlyqe0nQCY2u4zb09RTi1nu+9HixUT5HM2r3WIl+Pft7wN0a43dEQ/q0D8URoAM7HjZ4niT8nWyT5ZeEBSKkR7nnad321jExvlebmGTH5XLBu3fvqFerdRMOjchasPF8TMnE2tCk/azvvtLYTXxIEX2k9/acbx+iewJHKjc7/iZ6uH2t8LkUtcK3zQG96Z6ACLJmqiwEcn+tJ9gWOFClUtCZ2TG1ZMuQ10djNIn/hYd+CrXJzE7CINJq60P7l690tWdS27XZNalywLByFEPV0pUQ1Q2hWjhuIlqCTRQ0oq+uhCCQllq5UbaT+4C32WwVgzGOPxvX3ccc3yp8fXJyjhMMu007Mfs7EZK9vYDsoRh/5znMEMNLRGdNdI9xC4Lc5ptj3B9CpBq3ecUxFBwHFKktFAcUSqaXPJ/P/JwxetksfCcw2AOXThcUEXJaA5rnctnMIAnAiPAORlSA63WFILf3CSGQkmcb2IcR7u33PCdrsaqAqNr4ApLnRYDUEk9tf8+6r0AlWgWDhllsFskUPLKARQK0JkbhBrTUau1S2sJlgECPYZNtjXAUYoVU5re8E720I7B+Wf8ci4yYSnjJwhckp0s7YOVeK+fcPCPGe2R2Z8GKbRCDYQJwzNojlL7ynxphy/OBzUbwMcdHDfi5PZrRyfZn42vUTq79rX1fSjW6meUQz3mM4Ftq3xDGMNVf89Tr8RxCFMzz1Drub0MK/5wQwjAdrOJ6vuJ6vTaigujTvMG9nUhiqDf83I1fAzvsPUdqntKQUc6hHAwKsLrnNmwVrSa7+ETcsYXlvpg2ngVeJzaoH3adTUleoJJsc3ASBr9qFYRKo6rGQqq1cJaHbWKwflUuWgPWWhhPb9TOy86tWlTC9V0t/DQh6XZdNHCtrpvkw3q4XkqpuOWn+nU/h3046FLQ100MwVhAgt5Y73dqsxJbLuyfUptSw63u8NZBjGvVgaaXHL+uksjtLvCcYQHdpHqSroix54LuKYdXclPcbGM8YoztJo8Q9Bbu9kVNw/SbMb7mSXnG3vNyueD0eELOmTcyRtLCpHc19M+LiCE9+ewQAlu0muexc3Ev5yRlCS1EvA3Nx5qXRxbi9dvhvjN96wZdqzQxZT4fGqYtE8sk7LlYa5oza/xLK42qBOXUtBDNO1kOByKlYewZVCBIYTQwrj0DRniyJgPphlcrz0mtR6S9joZQClC0AFptrXhYyxDZl8xYUx7roE+Qee2bstcvVYCYEoWhN15S26Id4rf28w2YdJNSPVeuGWU9v+n4kTB6xB7MuJiAEaDo/+0nSmjfL+rWoOUZQ+2HKovq487Uc7Uwvg1ahqqKLnbEnzeAolZcLlcsy9JKHmOY63KXTcmvGV9s9U0Pz8dzUQnNKGOQQSYjECQxxJn59QDmbDyA78o0Fm21hCF0guvCGngCA38AwOqCAi/1EKkFbFQeYJKeNHiGikRNdVWsuaKGYPQ9esgAJeFB+J6o9MLQiWdRjcMq7DCBC22D3sWHyrI0ZDVRgPNDUM0BK9aFMHO1HDhXbZuLUw0FXtf2cLILWpUy0gZ57X3NGOVC0KiVzSidohgEsZfIb1dhe69bzuutx7x1AN90vJzRc3NmfXfiV7SHAOllgbHb3c6uJc/VRmVrpFQjjXqkhz1/Ac+Fqf2GBDAMM8NTBZrYEhdqbTcIqEVwXRasy4rsY/qKyVWM3g+BCnXBw0A0o5wSSQIhdu0KV1zQQG/JRa9wurUaqlmHzUgsNw0KaCnD3Q7NqFTRKKsjkOB1VQ+T3SAFzAMFlJyEbRIx8R6VUjk3BBMQEiCxQf2lMMe7LtShLXmouSlpfjFaEzgXBI00eClm8DaKNmyHagE9/DUztM2xoNaV4XKuqLkghmTRjaA4/9k3bCFyqoOBqOW5ChOTVg+jFVGTrUuryIp57aIoDk0NOEgyXjXDel/eFhk8sz57CtLDcH8mz7uX54+PyCnDzX/3jxmxJdcI9b/ZkHEH0aOumhagzUuUwSg/fNzuOB3wsdqVPXMdPYoGhmSKDhSsBeczvSMqa1ylWN2q9T7GzTV0MwdCSBa+mhhVsF07cLFU6eGsI4OArcdIj+iPLVKmvCtJbHpG3QP0mmvLflQQowdYrtdjYTYCN0sAqEBIkddnzjiKgoXOiFJpkMFiyJL5fNbC4To5s1c0xa70UNZiHt6edZKBANDLZAKl7pDde2iAFkHRbH2sFahAXUnGqMgomRtTSjLUG7nAq1SUwuU0JebZ1XYiR21pIAYWuQd0j9YiOrGooINcwT/Ho5bNIc0oQ9gSG0YPqb5W1CGtXn9+yfGtSiK3XmpDr/PkCT189Z1Ogm5eP+Y3/PstV3BzO4YL2v7KPG/1xF/bTbFXtvcruRiUX1DWisv5inXJ5gWKvUeldqoZZEoJKXah4tEoRSKCJAQzzCYHIGjhUsurg3VrwK5bHPntOUs/e15jGw9hIWew93ZPAMCkSNwbl/ZaX0BeElIrkqMRLgCYlGMFNWYTTFYEQM7V6GdGfLdyTC0KEZL+fdyhKPsZJYmJXbk3AfjuFVLJRe61FiAXjmZo4/kKPXuxz+Pt7B1CU0r9XlnYzPMxv/VMeHj78y0GAmxFrr4+vLzFTxzf8P/uYaq/obTn/THHR5dEbpNZEfbKtd/zh2039nwIgOm62o62OeHRMPtnPD24e42/YijJPKQxd4bkvv2dWg67Fqw5I68cgtPHpwMazMjE+J8xQGLAfNjbhrF9f+6rE2CMHojlRr4obfHxnvg3ulHQFpeHxBDWKQArGamIMUgqv2/3jd8rrPwAosT8nfUwBg58jTGirJmTrGyQ7rgpVkNlS+2E8VwoyVgFrOFZcV5FsNa1bSi1mqSJTV2GePhnpHpkCCqChe8iyigBAblU5NrZRVSyF5TKzSzFaFHASH0DhZmb4kKfjQnZOov+dfvft2UKe01Lyfoau0X6x3U1pmYbAAnSBR5trfMzn1nSzxzfyijHQ0SYO3l/2ea3FpwNJ85//XfdCP37Dx3tPWAGrd1bcLGyZ/BDaLAIMJmkRrGxUGmeEKfUSyWRUHkUz+N43fM8N4RzuACwdJCYGylBE44Y8HPdNt2Ocojkx4yiSvzbXBjKodrCM4OtAnRCubTPYegmUFucDeySgKoBxdlUcWLblRX8y7oipmgIJ1lZo5RGrd5Mbf+vglIVIXKujID5KSdXkTYHCxGhRIBLe0YKqVQnCEEhVnKtKsglm6GRUllFkNKEFAOHG2lmiGy9t57+tLVTTeNI+oZyW5oSy2dGcnirUQ9kdMByVOXGxg24d+18KPy8tQ1V2YyMsDvwDX64Hy83Sg9f1UIs/0BfBMAzOxA2P79FWH1R3l7riGQBTzeC0SDHvwshbJg3Lay2iCmECSlEgipTVzNodc1Aoatoi12wDc9brdVfVwVVZ/YUqotP9/Mpur0f4qwR6+kM2onWasV5rUKDdMaCL8B2PtZWVCvbs3rihgKT9WzghECz5VjRwKKQoEr5EK1AruS0tnCYMR3DV2GSxbCZ7wcRoxLyQ7lvkG9bK0kJcBKGgX+1cNNQVSpL1AIgA4F82xAsKpGAKbIMNaUE1JUzbAaPR8Bl8FB2XwxSGFIjaQh9xNMuEH9tTwXsPpuYtXONeznq62NQ/z3V850c87L+ydvj5UBPGOCcm11gPKlnX/tMyODAzIdfhGatLUdsYM4Yvz/vHUd0kugf31RFsIs2WHS8BrGukUAaoLS4s5MfABBd8M9HQK3Bxvk5ZxIGMACCaNiWbz7BjCog12wzGyu0Whht8nBaYSgwjyiG34kwBI3RQl0noYO5UeyL1sP1XJi8SWQ46Oe22hiJbIbZ8ynGIqUyt0ZWaAz2M240VVz4y6IWGeREEFBt0hQlSwRZKVvCtjqYCBUQIzDNpPXFlBDEqG8A8roCNZsx+3rgRgir1/q1V0g7fbay8dzmOXar/cDR7CYwWiHoE03P1kBIeHQGY3z6RtjD2PFfatdGhLCtmb70+HUxesYP/NCHbjs5xhNkd8Lzn4XBKG1LRy9nuCy81mrR2NM7Pxby+8lUiHFVg3t8vzYxypwZQCsyNM/H3JOdr94VIwg2ooK4gw9pZejqVLpan7YiCRKSRMRAxsxaVxQU8zSl9/H59fgZWb+nooMvqgoJilRZ32VoyOuTwA1AVJCdkla1sVuquhfcRg18ZMbAsc9xdYVcKK2CEDotjjunnbQPA1YDchgFZENga1EkiXx2Kze/IK7mU+iZK72qKhXM4dIxgeugmEdWyNDzGND7S3ie8OfnditgfVh9z/frjRa6io1JlHbPpa2BsbSh7bX8x1sOWSTi3jJgCh9xfLRRfozFeyj0nNFq/6Mnr3OTHRFUR7XUPZGVDHQYmbDNJcYkn+/RizedfNZ3PfTeRhN+AuAKjgzFlDu/qHNDPezlE2bKRuBizb7jGnm6mi9ti7w/5KAEaVgJ8VrcwOG1uM29JUmlHQUGAJihRQnGwbUGcrWJ2kBHOfkJKGVBkKl5z2aEQwgYQtgsKs97JURoMBkOhYlVF7uPEajC+m8pRJrVP18Mjw2opSPC0IoAvkeyMFZbnVBNjpOMnZwLlQ5qJ9arDMRzaxTTofzjG32LCYZvOunEjdo5ylxH/JvbdV/g5IPeq+jP1BlUgg7wvfz4KKP8kEF+HfNmuPqPOLb0qP4Z5jFLj9cVXhzf6m6GMO5w6DfKPKViuJd2mp5/bq7JPDYRNW1/ow1Nq6jZOidKJcyfgbxWVF1Riw/cHUsRPVflNcLGn7OJOdjq6eFQby3qb3DzvSGSVQRSmfeVah0TZnTbpjYqvEvspZexBY7nyL8b5UnG58Ic0nPiaobDe4MiWJbMgr/vhdXCdwDqpHgtgGRoBQKog+sE+uATiixakupdLhmxmDGjo7IhiHFMncVEo2SHTL9hfbMO2+/h+bh75Vv9YWzXJL7ucCf2cY4M+HWEr19npDwZbcZRm9z8y06u/1lfBDHGJohb8mCQ0o3vQ1KQY+jhoJR7ALVFuzHC7avhu19QoKC2XKka9axWRVbFuhasa0UtgjVXlLpyAKw3RA/3pWvGbKMI8fxx/G8Hq8Qaqa3JcQTQVDq6qxz+wZKPe2egyX7wdRW1EGvxjh3P0T2fDQEM92O0PkzmgW68dQBOmgKgCCrsHljdMbUUgtcWTfcoqBrZXlC0sBvHykCaayv7MiyopOiCPZPRO7hhzkjAzahmaxAY71+1PM+DW09XaLyNfOFhlXTD7Wvi5c7ldvPSj4xhP8ooN6yF8UOfADjfbLTf/Hk0oLGxeJom5FzJF3XApeOPm7DLz6Gfuw239UV5c21PznkI89ww+WNv+WLOogrkUrHmimVVLEuxcNXCbFPI864G/1rXddPX6df5nFEC9ALu0f0aRdCQQi0VOS8gGFQRU8KSM5BCk7swk7R3D6hajKQvm/xUXbYEERl1MHiglGhobSfbkzuaWXoAr3stQBUS1xUkd1DuxcwiBFNMsqZkqQA4VUsltZyuATGqQFkBodBaMZyCaQuM1E7UE9ZYDiGjiXVnpzkqaPkBIVRMs5PqAxCdzA9uLC0MHZONrz9434aSi1pd+hvQ2/H4Vv2UT3aCDxjmtz16+Ekj8fCJ3lKxqQt9YHMY80o7KwtR+L3/Mxo0gM1DGM4IrDk6kFOMdcLXrUvBdWUIuho5wfNfqBq6mrf3qgBrXk39gIp105Ta9Y/XoaUaUuvppD94sbYn63hAbzzWws2C9VXWGLUtYEWSYChvgYt4tZvS3r+asSbLSxVaVuRKmRPfRIrNRAlwb85maO8lZTMxS00Aa8ECGpELwWYtzDNFUDUhKBDF8lQ7L2ZDfdNseRsInmrwdUMyhDo+BFgW680JfIsY0WqmQdBG722e/ZP/+Oa17QbpKVYdz/sFx4+GPKB9Z9j+zfN/C3DX0Wf+BgPatc0RQzPQWJVawdXJ5s9/DnMJ9ywOyLRPaTufF4udtTM+CZem9LxvWRaGo8YeKgosueJyWVFqJUulVHg5xDS7+L0DVbbLc5H3eimZOdylW+O3UOQZIUI0m9fK6AyRFRTgAcnctogpWlWgSpV1eL5XmZ9qiFArOTjn1nA5iI0TEMD6TDNLNiJAzSh1pQe0MLrxep1QDwpG+8DXACKk/O8tQVtswwsytRMQjXDSYe99C5Awwxn5gu06D+6hquMFNk4BtQFl1dZGcHIFSPUrymbvFr1610xD2d0c210BQaHawSI8z9jpaPaPwSj9uM3Z/EPHnKn/DuhQMU/N0TD+13OH8z39733ndtAD3IHBm7sWrxDau1VP0r1Wx63PON6t15DeryUe9qCGsLgZioUylXliLqaUh2DUs4o1Zyx5xZr93KMZs3tGmGH772u7LmkGI5yqFQDSBhXrmk05HljrwntTGas5gMDmYqocxATk6woIEKMi1IJg6CuU7WGAGG0uoJaCiGLnasgzhChoVUgyJo+K5dGKGgCNCpUMr6n20JiLHfAbbWNlRXtJB2iLWY3sUKtAwkwOrdAOo/Ab75FkQ/kYTlaIlGGhKTazLI07y7Yx6XknAon3RkUstRrjxzdoASLz6DDo/wJEtdnyhXYW/i9r5x146uKpxhZT4Fmrfeb4VmLMt8DEUw+Jze+3hjnkfjd/1xYw0EjI3UC8Z8kZ+jBlfUHVsU/OYHHPZdQ7C9SMxGUksXl/z1FqqQghNj5sLTDDD1ZnY7mkSoSuRFnzCmgJbEsy444yTBobclK/VvcEzZMDdq4FVVaEKFCs9FyC1iNJnVISoWupqCUji3F4YgR0Id1PwOK1ZhsDDxqK0sOICqIWBFHUbM/C8z2LekRnu0/RPIXaYmfMV2yDVQNOXI1QPNdvubqtg02+bhFRoNJBDJEta4FlIQlkASFYKagFOR5qd+MI9vkO4jlg1ffyRKqhfd6mpVDt3imgtWLNtjEJ89kYzWOagbac1Dty4BukRzf8uxA8KjKC3Q3J5euOFxvlt6UMAU+9q/2QIcfwu4YkamfqOPHYH4kIG09FLJ+XAEE/txBcP9aMyju+Kyivr8ypgsSWzzhC1ryBFbwZPfWBOdVYNzFGGmbNDW1t5yi2+xq9pgVsAtvt3YNsPXKrA9eKGqyDXypCQwYVyMpiv3rYzjKE6/CE6OE34FGGAw9eZ/NCOsOtAq2skTIcNONy9TkLp117iMLGDLk1CoCEIs4XFgNTbDP126FofFJ1xTp4lt7XghpwxWfFjdH/rq2NgbYoNxvdGCQyQLM77DEpbNHEYLAyfx8qva+0WSvSNmSLg5+u3fZ50gzSN+AYpHF1uZ5tZckQzX3D8etSHhjBnpeSC8ZF6HWg23zUv4oxQFoFHzCyN3c5zy5imJrxaaOnmTm03RPgRq8mjGwbuz+AGLjoLHxaVvJTU0pABOrqxeJooV5Evl44zbmOC561OJXeARPkZnf28E3LBhDw0g3cU9n5eQGaotaGRpsbF0GTCqkFNCgwp5TmMahEF8SkHCXQ25oYl8qwyA1cqaiI1r8phieQ5xKBsvBnEkmPgyDUDqQA2EwJc/DEZVUgtQ0F4jySaqasiAiIYUYSNx4fc6dN/cDH0IvERsoA0Poi3RA9G7zFJzrKzXKII7eA1V6tra5I7BvFxrFIN0owZGNaRA/qUQW1n+oQgj9v4LfHt54l8m2OASzt4ZK4UsDA2LFckN9LMyg+RS7ieZ4slCWwzr7BiKorP6t9ijexwgwmWHc9d08d/toL4THwJoYQsVrPYDt365bQaswSda2hXpd1ooKYdIcr3rlcvg/LLaWH7bwdAi3uMQtSFFMOUNOzUYhUCxcVVTNijFjLyvx6XeENzhtmhFgYKxEo2VrtgCkRgcxrRtUACOl9jAwqgq5ABSZJKJX0t6CsKSYUnovAaIG1RbB+T90YPeRnr+ogMmZk72C0vKBMAeY0IYaAWlYEBMyJmrR+v0strd+ybeieBoh7SI+igOYlm8FaxCXBBu8yRGYqxEggBSNtBCBBWgDffLzUr80RN8QPfJz9fISnDB/4uQfuz32o3Px70ykyvOQ2Z/X8UjdJuP+BIJcC8RmIpWKapqd5b8tp+g16Uoy3DgDPPWksbHZm2UOwZH5WLdwgSqZ2qnG9LX8KJlMBdjzY+QqIQjLkNSTZwALVssnJ3VPWzDyQC7kgSESxcLIiN0CjaobUiFpX29wsOmA8a/fBvAoKAgQF1L2JwoUVQAZyy31VwZl15AkHVaQQqSwXAkJUZFFMQZnbBw8aSw+Rx6duoBRPj9fCX3CDCYFeqvh6aCmJWMFfEAKNMiV7nqWrEWwaEpKV0QyVZ+BCqt7Gg7pKIYRKhaWgqAMzPBFXz9Pb8FVhpmDJuTkUj3e5tMQ8ubczWn32hWWRjwpf+45++5ttfN9zJd38fDRI/+2myDp83Rp5/y+GnmUtbO+Btg5wX5ge9jUmz80O6bv3eCEighQTCmr7/FIVIgmlOuQdkFca67qa4LAT3z1t8bYvpaRGjAle3giBxWzmw84rVYTSqXUKcNSfkMXSXLQCtDSf32zhrxowoqEBHv6seH9hIaggREF09YMAC/U5Js47LVQGj28OgbU/bdTFECw1E4VKgYZiGfnQFdFCSvPwahKbgo5KGqDSzxnee9BBkuEZeVkuIaJKalFSCMz5Q2sFpEellEtqa/A2fPX75EhpXx/BdxReg6Gn4n+jjsI2ZkMLTFo429ahpTPAVuXva46PYPToEBfLze/6jRTbBeGo1HBxfjBkkTZHUpWLtPNZDWKWIbj0jby9V7BcrgMaPZ93TZTQPKYKO0PgPEhlU68Y7C4Qa5Y2GXyXyqgGVIAKdGvJqJX5kQo9R4wBIQbKIcJCI0QEyQhhaoX3EAAtBdHuUYrc1SUJJ4TVihhszJ1mSoBEab2a7DqY4UieYDVPnwBNcJvkZdrmIIFk+kpwKwRQHU4FQRLLLhra63i7HGSJAHJ7Rv15C7RSUd1DaQS1kNpyKLiSAL8TEaRg4JVU40llUCU+oCjDfXGFduEzlsgoIQzLiCqBPvuEU7wDsgF1FZzNZ5tJiAgDYdy7aIDeSVPEfKRYNBWEc0ljGO6nvV5p9GyYqMPmgbZWRxDKzUWwdUpfd3wU+jpS7cadxgENke3DQ/t5z5vGxlFVLu51XeHF8DEvsMCwvVd/bzGV8fEcLHRrSb4juVaP9FzWdkLPu7yYrEAnBFQaAEEUMx4R5JWeqqiiWr4BCBBN51W3+WFsmjL8+BjIoiHLhr0SCitLIKPqiiCKNEXU0jvgW/hu1y5WuKYxamPKeG1WDfiBRQVBol0Tr7VoMePr8hV+/1T1pj43PEr//JYOmIKCr8FAgoWfT9XcNkRVNb3nwjKH0CtOKQJSEYvjCwGeKuno0eD5qQ5nFFkDDXxNNEMJtg6Zw4eGHPB9KvpigIk89P9WAcMAhgKMKDySMDJ9sJ5OQbV7jXa/mvkHRh3+g3BzP7/u+FaE9FGW3bmXt3/DO+AhVDfITs1iyOFq16PBD5/ajJXv339+e17t4YnT0OwOixWtN0rk3kzr1UI/T5uR0fIUsZwuIESBhAwJBShDHGLaPKyu+LkYpc2kJWOC5WQCJIH1XaFNgtYVEI6N4yj0rgvjNdnhjrT/j3atoqZZZx5FLd1h+cg8vpZm5Hw/i/FvDkYW/X42qc3IJnCJAaEExEjwo2HggcV1WM4sIpDq4R8RXbMdhAgPGJGiXWu0OaQSiSKjf34POfs5EkEODUTT8fz5nb0mtLC24RSD4oUrwrfN1KiZfN6KEC3QHvLBcYv0Z9I3MWsO2GZHfWN6wfFROWXOeWN4I1n8uZKISG95Yh9cxjRN7Xcll9b5MQod+8JoSdYQCnQ5yv7ARo5rfyRMUHrjKw9X1lNwp/a5iGpgz0aeEOheUIjwlqqQ3A0c9uWep5U8PAgX5Y4aqMrGszFDtDyM4lMVUBOhUoUgNh6rn3d7+AKGoyFCSzbpCsWoUeT3xjfMYj2g7j3ctbkyA4bn+NzEr15GYGrgxu7PJQZXFKwI2ntA/VCjdwdB4zAjCEN5Mx4SPmKLZG5zSkZLan9vG4ADaMYguq370h0628d2K+0GI0KCgFooy/F/NnbCIgrF7cZo9D1/g2HdGVSIkaLXzuOZTfC546NKIm3SlBnR+LtbL9n+WwAUnz5cUEpoQz2pQSrIOW90cPieT89h/Izn6k58XdtO7T16RlC1q7H7PIhi2xpzh/7+bpTBBZWNEkbpSaAWMe/gxnkDf6tpBSkLxyEoyrpYqKdQZEBYVqiaAQ8DVeEKcV6rDYNeDMs1APVeJ5OCDBCl0hzsOcVEvm40CRApWyNzQI3Sl/QQvFXdkDcb7OAPAoyxZCAR10Tv6PC9yo8AQIMaQBTMoKMBPcFawBjWu4cb5Rv9KY74RCt9GGEiREPPh3UK9O4WpxW0UQkD6tKEziwPjalrOxEP8HOhkVYoQqgNFOsXayvIFeN9v+tXgJccHxW+uhdz7/ZNJPXxhH1R5ZybuFXO9Unoy5u6dfW3hgfITVjjv9uSBzifsCuRBShi9Pc2YMc29GbAngMND1hVMc8TykpdnWC7K/+Wn+bDewDQw7krRmmMmVrW1glWa0at2T7flO3EQS96FR+E048BYge1YGPggJ4QIhXcW/hliHQM2IwNG+41v/frH2lx3XC3M1Kk0dRGQanbZ/Xc2onWtcONjUCMqgNy9tyFwMyqsnmvtolIB/9GB6HKmi7JQD6zg9FWyQSGOA6Q4w7G9UO1hH7ObV6pWpKgPcmp1sOpDcB66ozI6+WXA1x45p583fHRygMiXSVszBHHiVZutH70kod34fcQ47lxdqXoZsGLWM4CQ1RrRzmfRbRuQo5q7Rp8IPYz9boUiQK1tpSwhcheGlHVpvxOLVIvlRAKbzmO3yPAdmIvaZi2aV2pHRWYT2qprYRSai/6iykNjEh333yihdMBMU2Y1ELbECGSSbe7iTo8OuC16ebf8b5TSmN7b90A21yVsB0l+Nwx/q6F0GriylAKgZmHDkFci6wxvLpqRDegUrlpiW435GCRg9gw3mg1RD4zNCX6IEBI3hRQNykPt2sHwm67lzzdsJ9ZX2ZLrTadJNw03GMPbvKjjo9ucvYb3orulqOV0g0yxj58Z825SV30GiSPFssPu3QIAdlKJnaljKrc2wVBitNNeNNJwQQ6zDCCP1R/yLAdur8nvRaHx3iHK6MkQUwTtFbsj3tuNHFiZ3ugXkwuQ7+TP5hxg1ES60tlz2O1/FGavpBNdxaOApjnmQNdFVBQFoDRbkAKE0JMVkKI7N6PEUG5yKluQFL0WPt1FfMQUjPyXt/zrhgztEiqHrW0uEEEA3dSmCjCVTILlaEDOU8jGTTaIoJAojCCMeHp6OweITAVAYSJ+rm11f4CgSGIjYEg0sp6a7TyEd+HxZeAajMz6c1MfT4AEpWlMgPuHGNI0bhXRnf0fF19vIY9T6+5egAfkMDIxhKjgWAQwVKNikVLNUBsBs1L+eMfBfSMu+3IVfWxcf5zKgS4/uoWmGEI4cX+kUDdd9gUArJzNCHcnQToxeu+UzbgxjyxG9Q2RHPEsRd7/XAD9ZAVWlt7lwKNyKSgkXPseB7ex0EHf78OudNJWnsTrE4J5QItVG8LVUw9LZAPGoR80CrN4zN/jI32BVEEZQjMcNzCUPGF1ze/EUDr9zm2fLKCzJ0UE0IMyLEY5xT8MtU6cXSkdpClxb43a8TzPZ67RVn2fu5BtLITJIAUwCiTTQMXq9ESUWXzcezEeO2OIcSAdaVnLwCkuI/zZ6CYAjDvZgAJJa+WI7LclWJgc0MNmwiuDqW90dkZHOBP3a4f22NIsdy7spy+dUhfd3xr7usYnjDJZyw/TdOGoTP+7bIsbeb8CGM/l8skCcPPzQjtxoybwtNjm4e5dxhzp3YNH7hGljN80pJgXbPlvk4scH6o9k4XywWhAynbvnOwpdaIEIwnGwbNs2ETETBELkq6ng/k6eoLoXVdON/WN6bxXm7uyPCzMU9umrhDu5v/226iWI5rRj1iAB4jPHe0PD50A5bgxXhS8hpDRjhnhJVb8zSmfKfCsotHPeNzcuwhhNCIA7wvrj7PEDbFiBQBSQFSI8syEpAC0WAxkv84iNY/v19lvx8NsyHj/pn7TSE1mGf3u/TS1PJbSUyOsDv/25nw2oyq5ZfrCoUil2z5k3kVS6YxGKS/7zgj3j+3edfmObuH8L/r3RrbnKYZPwYAStXoZ25EPRTu//Izqu2upRg7JSagcHRAqaWpe7vsZbTQT4yKBs8z7G2j2OwR1baQ/JqDBMSJxpLShBD5+xQjQ0dlIByE4WFIAm8Cpjp3HcCObhy3MxQ9ull1peFEAy6itK4QGhVjBgkDawr0RrcbwCjvL8baoVGqhbEBZA8yZA6B15DihIzeaN7yRAmIcYIPvm0cPOHC58CozpHWaugo22UAKIoqlqVCZob+KUXEFBGjk9ErUNe2MXrZT9xp1L560J6ibDbfTbSgaL/nzSLN7sPb19Pjo7mvt/lkl9Ho5IC+S5J5UmoxQ7Lpx2IzBzVsDBjY7uq36NvoSQHrQhj+3vVZtPYdNMZoDcKKmrchN4ILc3W17X5v+430rhCGoY6+AjEmVJs+pSZ/yI0jIohyDLlx+3i9NoEK3UsA3KE9/G/3KLGXUjx/SsypmJ/6ZlNbaC8iSJJIUhdgSjPVIDxqdbEaeOmm9M+K3YDZbtTv9e09Hu/Q7drYfC83EYB/r56H8dprBeKUSIUTGi4sx4aCavDZPZWXp8wOlPm1KqmD1cZBeAQBwzq8iyVNE6aZQ4PIA5YG8KhhDTFKMz2f1SnQ1lPKdjhDZ80wx9hLKyj2bHNSexj78uOjjdJdfC8wj2FsV58b53qMQMBohB4e3hric4uAwlKTIY28AbBcjjeRxhBjwlr4uU5UYJ7Sz11VkdeMtNuhFNZIm2pSy4PMUMe8yQrcMXCOowMOyyKt9to2kBCMZ9pjHYZ8RGUlwKZgmRaq5dci9BiSJgBKMCNw82ON0rRhBK2pmS81bykJ0IKUpk2fpw7GFULAlGbEkEgLcu6whflOUQTQiOSirnmD9vMW0Q2bZlsLcP5rIIGJq7xtqPBcuy1Y7zrxsg7zcR9CCyWvluCgglIgjC5qURqld894VQCe6libXKgIJnspIQJiNEjZorkiYqoO2ppuaeJ93aJ6cvKcnXgPJgB8pEXio3LK3rQwFl5dM9QvyPVZ2yHO/OCu4WGohxy3UL1/L40vBlMYAHIxjuwYy/uubntW0Ipp6h5MhL6JolY+IZm3eFlXXotdU1VSxMYcwhN6UVPejomweavV2c4pNozG7gmCcEAtHOH0wCfYoqOhBgN2QrK+z5YHJayLecWBoL2Wnj74EBpGLRYqIsJHjXv3Phf8UCwXA46srYkeppEN29/wE8W0fdDJ/B846L3781CwhKG+gOAbADWAHLyuheR+UWeMeSO2P1cvt8Fqz2JgEVp/rStDfOi86MUqFQcX1r/S5FFG6CSKIdQXABrUQlVtK4dMMGtV0x59AXyuAgcwh9f8OMJXKn+7zAXnCqYYsWaWL1JKzRhLJZ+1NmiTO6ZAsF4X7PY75DXbbmjDSWuxG1PZ4KqWSbvxev5q4YogthCoI7EFeVnNUGxhmgfUlkPGXrZxYwm+wE2GA13YyijIFhJpExKG1ewAhrK+O1bNFlEA0NLwAKKOZhhSbAcuCCkgCcsRJhRk5Qn+ne9/qvSOMfq5cAGVUhEktQ4V98i19qnYLImweF9KHXK2W3ICWsuR0a25KP19tG5Q9gAgpcjwXcBRAlkhSYwL0bdASLQ81NOA2uVCBbYG2K4mgQAaFVW6VhO0otgw21Ir6vVi80XLZlP3w5IcOhQT+aorUCuH5EoF0sTeUg0JebU1KNYtksb1Oxh3qciA9W2aJx1y7dGFCmAVE4/Evvl4sVGua26G5++95oxoaGquXTWNatp9B4lmCJ5IT2VqBjzu9j63gQTl8RoIZnAxWV3KAEeLYDclms1N8ri/VsvmFNXDFLWMQoyArMLwyAgFLp4Ee/84sohMKDQEwTTxwex2O1wXXyDWlW/SG6YNaZ/Jz1nXxcoNAIQ/EwGiN/NaXtSuq4WLzqYSiBSrXVrJRcX+7d6R99eQwDGk9aj8ZrGIb3QqjYLm6CTfA3aPnSPKUGbzPoPXAUivkyb4nOk5mvf0SI986DhxXF9s+EGvjVfL7WmIvff1ueuw0+AmWem1azVx6iq4oGCqBSmR78rnZawly/5h+WmEdxMpKgqiqjVm8zoasNiMz5NioJXiXugsv1WTsy/kGCPWdW033m9KexAxNl4rc68F0zQ9YfyMNceeU24BoH5VYpKArK9BgDRF9gUKoBumiaAVdqXnTirmBRgFNS/iqFsQQc5jHfW5h86/Z4nHCM+yA4Qc35oXJNtk1DpCxJIoy7QQkdh3aaWJECe4riklLgQuemzzpYa80NBa47km5zEM9/T22XW2Eet9/ncjZe5ZYKZW8+RAqKY7oz1SsLuBoMG+xEgAHUdgqQXQWoh+Wrkhxsk2t4gaE7QUOMUn2HkKrPfRgUb4NLDOFGvP+7l1C+e8wkJOosOlKrBmjmMIwTY2ozA6nGCsrCDB1Bqo4ldrQdC+WfT77SfDbh+rm+DFFomPMMppmrCuq+WE3AX8JvU88fmvxif03Va2gzndwC+XC3a7HQ3ZQhreyG7s3kkuEoz9ryglA40KNezYls905NaQVH9Qg7dQ1c4iap+p7aE3NNnfq+V5lLRIydgvMqFqwHqprWUIYTBKmAGrIiYKEKeYhge7zbFbTVeZq4z30u97DJF9vRbGjUbGi0Ffr+Lh1ujZegpwm+P7ovNn5cV/94TmV1sPZt9sFQqWi2r1eR0KjQH7eWb64akBGFKmaNKeEkC9pWCRBqwn0qIK847Vc0sMHMlnDjcHVTUlQ4J+EIEmRi8lVKRIZfXovFrxj1IQ5ZXGLoqFjWu8370c5x5yzM8/9vioJmdHVJ1F7+wdAFjXdYO4+mv2+/3mv29LH+Oic3SV/XsOhmBjxAR6GLpV83wd5d2e13JdMc87LMsCePItglGmnwsxtLzLQ92A3mHQPNTgzT3vZQlCESINLYGTizEH297premZrNaqkRo8O+MJpwk156a050CNq6ABHDleCxdASonPIfa0QMQjqZFQgOaFHQlsdUOnoblh3Yawg5GOJS4/uIkxLw9hYt0vRmolAbzWWpCmCRlUKQgGYJFEn6xkxo3xsqwkFySBhAQJEyAJQEIfvkrDhCqkKkQqqjAU/fDhEIvlrsOmVwqpjxzjTiDTJyt6m7evD9h5up25CBpD6AgJXRJV1a1Z2mb4smySx8uBHkMyp2nCmpfWc9YGzNxA4r7T5pyx3+/b4qm191X6a92Y3RunlDDPCeu6bN6rhYoim5vrO7nnpP4zN1jyaZnLKayDAg6++C0T2xFls1GEQKkKtdwhRp/3QfK2Mza83CESUISGR4RQID64ZgAjpCqH4kiH4VtuZrVQsjH5/ykmLOVqdcW4QRr5troxoPY5A+/X7w/P35DMEC2YDpvXurf1z/FhRJ1ZNJm0p0JSYu3PUwDzKixjHQBdEENCSmLSHRECK6kZBZK3NSElQMPcDFLRezv7ROwBpBLg65e8DH8vgwi3h8AFWqjYp34v1SMAtBBdVaBBuxyl+JBZbXBgZ7LVtvFre9OXG+aLjfJwOODh4QGqiuPdEe/evcU8z917Drv2yOzxXNIfcANkBuBEK5P6WooNf6H6t7Ncaq3Y7XbDji2crSi9tuTvywlQwFqzeZoxhJMGqojXygRkm9x4cDcUewRUgcPAWoFao3F/bYVAIonfrMsFAyxGlon9ZWVPphuYe78ABST66bYFwaZnULlA3Yt6jp8BsZwwwLrmgUYsCDTILf+V9VJX2uv3xSOO2J6XkxvWtWCed3ZOiintDJGnmoAIDKyyEkMF9vs9LpcrwZTEcyqrK/UxN86FImhFWWpCSNxAbfNlOQropP6Ojvc+1H5tt4erHjb7dYzJwt5SCAFO0a18jPcBj9ctaDZjNSDM93MAITAsrujeW+sYyr4snH2xUZ4vJ8y7hJwLcl5xOBxwPp8xz/OTOSK3+cn1em2LnFOmKFG/mxL5sDHyoS8rYoq96RQj5Y5XHwNzFJWOtrpnK6WiZC6qUhTT5HkL38wjudYp4Mpztrv3nE4BkKeqCqTA3sWm56qExU0rysyWjWDihpACycuVGwC7sYptKGYkdmprXgcS/7DoRJESN5w0AakIaEjBhJIrYmA+F0PEdVlaSOXe0cXOJEWElBimqXJWBjJSDJim2K5fbOVqFZSaEKBItWKeZ8SYMM9zM1amGURBmXpkpORykBExREzzhJCsrhe5GdeFZHgnblByBcawUlRdEdPOOLeVCHUSxJpQc4YuKyjSpUwDAlpKs4lGfNNG6OUZC+MZXEbznLZB1whoghM0/Hm2VwggBhAKtNmYC661kFUjHFS0RWDlkx+xUc7zZCFmaiGhG8UIAnj+50boXtRzMWfVTDFiWa7YzROWZcVlXTDPE4v3QTYXoOp8SYMPrJ53uxm4KPKW92mgh73R0GDfrNSfywjkAGihqocyLVcwry5BqUBgZHWSBlgymmKAaGCdjz0MyJYTqp2PNyQnmaz2KYDR9ap5sRbazwmKnYX8gSGxSCMiqAIlC5BS2/wAA6hiREpT20Cl0vNVqPWHxvYav18cxmWhdAg25FbbplqcyGGbSErAsirS5BtytY6WFRKyDRNi61fVjKoTSqlIybjTEEi0srsNms2VHhgQqwsLaqioNRhvmrPsghsUnvZ40tOaQaJvudp+CxAeZwRSi7bUIYgbJvNwUR32+P69x8SOhayF2kvihqpm9C/EfT6qJOLG5eFiD/H6rjSGqbvdruWQY6OsL/yYkoEwnu/wM5aSudAHwGIMiX1uorfb+BfAHHeed01Nu+dqtkAtXCXIENrciNbaap7XJy17WKlQyyFAIwDDZPdI1US3oF4TDEjREDqTwnSOKYWbLVyPkbW5FKAhoFSGchrYVePGlczYluUK2A4eDdl0zzjPM4GmAS31Y5oi5jlx9HtmFOEN2uOmGqNYSOrlIO/oKUbOsmK+kcEZslJCI2lXo4ChzNWErS3BpqB0zdCwouoKRUSpK4JR3mKMRF/DSOJwJhZ7R6c0IxrrZ5pmrEs29b9t1tYit2rAFNqeCtfZ5eE5K5Cz0USFg2xDlCeGju3LhvXPH4bAkoqXQ2pVy0d/xP2UbbR5KZjnuS2YnHPzMi3EtJ+7MXJacC99jIbWQZqwqV86Awdg3uEjvWOcAHBxjvmsbwT7/R6nE8NqdkKYUJehmZxmxdxFLSClJnG/+T4igPKBFo5Fy7MKrGPCyxtg7li5cKohepIGRW+xXk0Ya0UNtXOPWat1S0Tk5Yo0JSAO81HapoOW/4mpsLN9yZhFE8NaN7BulGrylrXJb3h+NaK1GzzAcicFF1QVNXV1/pSyKAGqPvY+EsgJs22aGbWwHatkhu0wYn+tFbks3MhKtmllimCgEURITNeVotRWDoII1Buyvd8yREAjiofdtwakipo55qAnRdyEeZ2GuFrRulbmhRKNKFC7p3Q7luZv0Z5vW7OWLkTDI1TV9HGB+jKb/HaTnB0p7YuGcx4ALspSu6GMBAL/fppYAlgvFxwOuw18v64rwpQM1eLBkNfvsW7Owd+TSGnCuq7Y7/dY1xWl1A0pvsHT4g/HKGUxoOS+CUQyySkYvbK1SVJk3hINAWxxML0JuxACcgn0NI7YwhN9PqRqg3cATsyqOSMGoOaMeZ7h7cE9KuhG432TdGIC5102jqgSYHI0vNcrOR9SLYcLlou1im0L/91bBnoMP3/nvFaCRqVUhMT6ISpQaqGWrOggoF1QNCNAsOYr5nlHvmshyYPgisnBGC5ea0XQCpWI4nlmaxoPbQ0QxOJ9iNGYUHZ/nzuyWjQ2rJ8e2XVChR+lsJapYRgLb+vGy2Oq3TC3lQe64ogeobVQWZ4/v9vjI/opA5brgpQmXK9XpIkeC0pDHHNJSB9o4zVDvxleCplSwgpsvOk8z91bKRN5ho82AxuwcKhzbed57kAS0LpBRlS2bShqRAC/kdHqnyHBe3F9zHm1vCvnjCiJoImFoKWuiJb3+pAasfphq4o1ZtF2e2w1T6XnKEMpCFanVLsG3NwfMQRR266PIcy0kgS6Z+0LcLt4/Hf+vgRcpHn/dV3ttWbsFZT0qOYh+SBQk0JDRcGKXK4IMaLoYmHrFaVmhKoo9UrwxLEBZU8pxKCzCsSZSuiqBMVqzS3c7GuwF+shQBa1jbCYOPczi14V2jSCukfr3q0j+JuXVW4w6puFI7MDiNkJAze2Yv+2jqYfV0mkFtbocmaoUkvdPOR2ouqTqDp5eeRgjjnpPM9walNKqRlXrT4SIFrn/W0Ddffcrq5OGldH2Zx0zhvvN48hdowJtRTYZA84JUqCQCowTQmXSxkMyxa4mhEouKAkIGhCKb1uyxIJC+PVAQTpjcghClAzH1GIzDpSgmZOV45xNu6woIKCUSQAmJf0Bz/k8m2chBW5S+0AmDRsStGJ+vxdihGrslN/mmbTUjIq2w1gNh58HgWowBQEJTL/QwXWTA9Xa2lhuVarB3r7l4uMeSYvQEgJxdpGBEoJ3NB1mEaCRAzeFhURw4QYlRTFG6P0ayl5BdAZOO33Q4Qm9ua+qZbCMp1xDtDHrQfmvDBsoRn4iK0YvlNrkx21O/e1NubHywnpeWmhXl5dFV1avuiF+v1+BxiNqY8j2KKlvtjTPKHkDITYCOyt+CwCQUIu2dS5w6YlzIkMwCALKBElCq7LFWEyUComrLmgioGtBUjzHporSmVjhhhgM+8OWORKyC8QcEjzzrr8mQcuy9pqsvO0o1FLhISA67rCxxHU6huIRQyGvHpfooBMGC4CCjExIJjBwT0ZLJ4DEmbbPFgCYQg41ladKO+81LGQ3Q2w5mytWOYJFHC5SuZjaDNBfTPiKIEu78LnCQAKLYowR+znHUKMuF4WrCtb57Kdo48RzJXpQa3KfDFSqWHVyqZgK9uwPhlah5FWa3kTQdOjCDZHxgSmJ5kQQmxblgowzTtcrxdGcEuwCATt2pQ7u23M9rMBimeErJASEFOCSoTPlZ1T5MiGZozeGxwstlADxCqq0Ij9M36kRhmC9PwsuJgxk1hknuA8z7guV0xT2jBCRiKBL2gnszvXVcAui8vlgsNxh9X+hr/zrcd3/9Cg+VEFIQRK58dEDmUVoKgCQZBrwaQBkiIu1zPEQjdIggQOP11NhQDoRHM+bM7fKFr5NzGiFOdzwgjuNoPEoHOBompk2IZgnFtBaJ6IYA3nXAqqJoJIgsGDmNCyTFasJgpMIOWZkAs2cr0SndaWL+rgY9HC4Mr+svZsRtaVf++Kg7e9ij5cyQkSDJulXVsjHORsIEfFsmRUBCQBF3rOUFeDMKCmttB7uA+wj2oEAVL4Ypig1Uo2sS9lFW8ps1LPFBrAxsvo67EgmGrBdvw5p3CR0he0IDXqHJH2XeKgIsBDWRBR1wLYWAbyd41jjZcZJPCR3FcvcDsgM00T8ppZIBb+bDfvEGLnqlLisHvBTfhkZQcPzzyMjUGAyIV4OOyZw6bUFqOIbGYz+OsUrDOlacLpdMLxeIfLZcE09YK3yyKiglSxaW43tpSCyTaN1qYG6bsr0HIMEYaJnH9BcKeqoA+pceDBGqFhEhfmfUQqwyoB+gh5Pvcqamrn7FyoLf8TwMepWzjbwjsP26ulDzpuVl014HaT9Gfhv2vtUUNO2kNI2P2WFuoyJ7Ui/wB8bDwSX4VaKkKaEIwt5CoM8FxZ2UvpJScJgFh9L4RoXTasyzLSCKhaMMdpA9SMrCwo+bZVKN0pvgnZ397m3/ZTApbiRthpmzGSFLFq4fSwwGdUCoBQUUsmUBu8r5L3otrm+JLjo9DX0dM1pNRJ3FqRUrQpux2S98V+O59CVZGmHa7XK4Ggwh7MEBMeHk+4e/0axfLOUnIz4pwrFuvtHDm09OKCpRSkeUJMAaVkzDNBmxjdeDJKrbh/9Zrho4jlykSMU0q4XC6tLugPqR9iHtRCM+GOeM2rAUE+Ro7/L+Y5XWNWVZGsuMnO0NDvCZw3CQBsCmYq0KcWZy22aMa80UAw83AjF5lexHOgEaTolMeqnvepeRTLn+25wuqFpWQkEzRWLSi1ImkavGgPbRvsqP1uwGQ0IwJ05b0qiDbVilEGI1lFVZINvHXNa8SKXqtOwYw7dWSd9xKAsgxUc6Z0p4ff/iztOm/ZZ1ybBVUqSvGSkxWHHCCTaqQQkzBRKkQUYYohXqsWYbTmN/MG9PvQ8RHoqzX6RnIgaSQT1nVp5REuil6C8P7J8YLHMMi1UkoliFRqwW63owKZeeLT6bQJU9trjRnkRPm+aYSeS5RMKN5u/uVywbzbYzKU16H5GNHoY26Y/qCYC7jRiMdZAGgQxVQA6M0ivIBNQKNVJw3NnbCuBXG2RmoEKilYAWycQxlEKJRVuhpANQAmDlO5xnPxZ+AAG8B8OyaGe85JZc2XdMlk1LutMZJk4ZOvb3Mhekg0QKMUD+P670nCR/NyLKs48R1orVBgylFqBWK0iHHMX7s3ooECag3OJE+U9rMNEFh533NZ2+YGVTgDCdgaZAf1eIQQDJwapVQUQMGaC5sOZPidsr1MpFPzRAQ10CiDyAcKNk+Pj+inZNeGakBKEdfrFUC0mlZ+YnheEllX8mQ9Hx1JBECf3DWlGcu6tN+7h/Um6nE34+6F9nn+Pu4VHk4P2O8PuF4XTOZpAcF+v0cuFSlMOJ/PuL+fkRLPY/TkI0XN86lSx1YnwLdmIoY9H+n/Aq3BVUDgyGpVtaihsiwfZQVEEhQrCPdRrYCQQeZodc46ACqZJr4h+X0eEfAREed1WE9itFCxAUMUGhttbiR4xBhJb3OEo4XkavkjsK4FtYrlkaQmMhAIbFgWQQjJ6oEEB3OtmKJ5R2NX8Rrp3XKh0bKR28NtaQYy9ouOqLwfHlb3nxN+8Ubx9vwEm3XlR7XdpEctaIbLNexA3HZjjBYZ6WDwVYAiQBRBVzr++uMjcko1doxgWTIOhyPO53Oj0qlis0iWZaHXyxXrwuGh1TyiajWUb20LwA37dDrBW624QCYalQK+y65rbiWVW25tHUbrTdNkhHfmh4fDAfnxzGbtYOFt2rVkKcYIVCe3d6TXd18+nN4FUZz5owoY9c/HuAmMV2BhnIigZMLsORcQvLa+UPPwlEx0YEZZZrBcxHm9lDXpZadN3VEcbJHWyunkflfr69GkzwmJLVfyOSEt9I3JgBffZIa8t3o4WNBwOCUI5z2g5nNRVSyisNa2qtBE8EwkmIyk12kjAJazQpgh4s3wBJ2CdC5u5z7b5zVWTn92tZqsiCiieS3xe1VqM7YxghOQZ5vz2jYEPif0DaJW5vctVxTU1mSgDTFWAUrghJYfuVEuy9q8oIiY/AY7M7z04Yiq131qUaQ02+/JvD8eDliWK2JMuC7ntgCu1yuc+pSzUUdEbQBpRNGKy/kK14XxUswoR1IrX3fYH5EN2WUuJ4BU5Lxit5tIq4oRWiuW64lAkHgHSvfKzRhDBCwvzYUs6dUYKcnqkWlKpo4H80ZxUDLooSXDnNqK6CpGXIYag0WxlkwVOK1c9Erp+1JWqHLcAZSCT2TqEGRyDYtcSyt8w+hxUcaFN7SbETZEUUp+kF/DHIhlMMuxqtUmUa0GaTNPQkVAQMkZqtS7WRZSDjkq0IzQNHlDCIjqm45Ah7YyrhuKU4bEjDJAEMPEzUq3XGvPoUupSJIMLa1A6a1yHlIqshXyC8fmSeUMk8CoxFXw15U4hUuNuAr7iM5qZeudFg5uclvTyOt1grqKsvFBxYYZv+z4qCbneINMjuQAQt7LQFqPRgrvYlO73b6htufzGTHFlhu6l6P3s5i/sf6FbV0WVnquer1ee0nFQxmQNeRhSkoJ1+XadtCUJsst0Bal81ArtrUk/9ZSLeONSvNaZPVUAydcXMlQU18SYvU5057xvMgwftsEsAFual6hUcwD+axKo4TxjRlI2ubnoTtHy7GDgiPOO7rq11KfFLS3KOnoMfy59Pf30JxdEClEQzMrSllRa4ZIAgnk0TwzF6TEyI3GyNrcsKR1+lO9wcNW1lXbIaY9i7g5V0eZay2o4mp9xrO2Ee40yIparxYVeAeTl108/LfNPlt+Kd4b2iOR9tkNzEKjZvr36or7XkEZIuOX+ckPkQWfOXLO2O127SGNJ+u/H8cNAOo1eKzrFaUsqHXFsl4QomCah5kigyG4gfUZlrkhisuybHKAsbthXDBB2VxLz2kLMfZkvX2edAArpdRyht59Ujf1PaATH/je0oyqZFNRkN4Zoi03Ma9YPbQ0NBZoRXw39BHAIZ1uzAENoYU+u1j88zAu2uodHx31HlMo3wxHb+Bft7XJ9mS1Axliu0QZ38NSD7935D0nTtaKCZoiNCUKTosr7Ad0IkMw4+z0yKalas/Fod1gfarsOMlAyJBQAOGXhAKOr2dbHUKBROIAIVSu0eAGiC2Ku81AW1rigfk3H92An5ZdPny82ChDCLhcLhhbsMaDlLktvEwPmnF3f4SCfXT7/Yzr9Qx/+VgbY3c7PaJr64wTvHw40Jjgl2KIbSu7BFOkC6xFmmzDlCYcDgdcr1cbWmrjsUH+ac5r2wDGckGrTtpCiFbwJ8+UuUkpHpp2YGhEQ73G2R6VAqiCWo22pQFq0oeuzN2HzQicZhhCaOPffABRB3QEXuznuMDEDUIpb1ktp8OwrNiSxXUzhmfjM7ktqt8ePdS3DbZ2jqmYh3OpFhESO0JKiCm1jbCtmyAmckwPJ0KD8TSGnr8wpQGL9xzSU1Elo9ga01CgkkF11gpjyHlgTq3Y6nmvoeT+eWKhrRsqKIAWhMP2jCbSjXW4Vs8vFduNraHJLzO1l4ev+30v4ndVu14LG3MU79Jw1s2ysBZ5m1CP0LeTe5tspW7HIIxeeL/b4d3793j16pWhwE50p7Lbes0QDSQ9VyBKghYg64q7wxFrzgR/qhPdAy6XE1wGf0TaurYODTNKtAVB2ZIuoamAejdLjzHbnEK1OA0OnFiuooCod2RkKEyisuRNelCKdU2IT5ji5/QWvQF5tc2iRQgV6FzWCpiW0Cgp8lz0M24s4zEiu/7fMKSap2XGLwR6Uuxj7pz8n9LEcNbI7lUNBKw9vBQPIaEMRwtxAecYA56Pewscc95NWQLsiglWEonB0VMLoQ28ESX32ZvQQ4iYUsSyrgiBvyulWuqjpkERNzgL1w1TGj9GUv02kvzw8XI5kPMZd3d3OJ1OzTMBfYfw8ocbbdOcaQarraNjnme8e/cOh8Ndq0MCaIjtsmRIYGeJG38jCtSK1cS4/HN8QfmF50wAYL/f47ou2O/37T0oAJVMWVuJMBYK/IawbQzmItYWjo2I53iT2654k0QIeijp4VZTUCh8WqWwMXqKVhfzepoCroLnejbwTg7LpQIlxFuo2MJeO59RIaKd0w38zx38BvgBnlzr7WvGJgN6XZZWtBq5ICS4HGhMO4bIVQEkA/Q4K0UiR9WVKogym8CxQDSxDxMT/9vvoQErFO0CILX9jpuFe9juwVzGxw+XlIkhIGdDuwNaWxllSMjMCsX6T8XKHapQnRBKaSGtr/E2yNhLZASDUZTVZ2ewfdPxUXIgblDuBW/DSG/AHVumzudz0/PZ7Qy0WUsDe3a7XfPAeR3HwokRj+vG8GIIyLVT+MbQik3MAQdjCtVa2VaWgGJ0Pwo1dYIDQQEX6FrBZl2ygOihBnhbe/eEL0YRsZyHR4fIzQClh8E9t1S4u/P/VeHYNrY0KYkD6Clit43+mSFaGcCRBW949K6RFnrfIA4OUjTX1o+RtfUcacD/FfOC3UMzdQgSUTUjpr3JTQpC2EHKCp+zoXDvb80GKWLShBQTnMzPXJehZa0FqtuOEQzrzCngMFV71Wq3IvgtaPnhWD6ikzUPKsJWM4kGxilSEJQoLZeEihEhrJFdBDJEiVynDnbZ04oB13WBYhw49fXHRw+NvVwumOcZ0zThYmFpCqbaFtgSReSpIq+lTXcKIeD9+wccDgdDaan58vBw4k6JHgIAilIL9vtD4846qDPPM1DEVNIuADr5eVkWXC4Vh0NALmxODiLsRFEa7WVZAIkoFvjkkrHbJRSbI1Frwbp63spifnR+a1WqlKlAq2A5X6HFwicFFKUtAlVFgQ0PxRjG8vpkyHFEBEutJgw+lAuMVO4hG+pKtqjQENlk7HkMxcC4GVSLCLzQD9TsenyApN5QgIYmdw+5rQFuCeudzGGdPMLwX5zwEFhv5aUakhYUCMBspQaBkBtaSc2MkeoPEtzrVUhIVCOIgrKsELHatimbawYO+2N7ViKK4qG5b0aVP2dEURAGLnYw5tAUBFo4C2WKAJR6QyT/28/snopmi6hMn9bU7cdoMYQJqMq0ysLZEih9E1+Iv74Y6Ikx4Hx+hGrBul6xrlccD3usyxXklnZql8BDBMVut8fDwyNimFCy4vHxgphm5KKY0oT9bt86A8Ycar/fY1mWjdcdPbIvPIAgk/NVeZ4nIqK1dz0AwH5/QAjBxm0rQQfPT2xHFlHkvKCUFdfrGdxyHcjRgdtrBHegjVHwGYlVV4pD1UzI3ogFtXlGmMHSRmsAslZkCZYdmWy+amvDcpTYGpl6WNlxmxa60Q1XRBO07vL+7jXVnEQPrW/R1ufyyNu/oZCYtX2JQGJoni+0/tLe0TNNE38ePeezcwzUDOJzcI2jAgmV+ZzwetqkZnVV/DF98tSD76vwkkjXDXLk3AGyWgtM6xNas9VFK1IANYBQ7LMzoPzSskLLCoE21QNq3lpZJwhSlAYYBXapDUDVNx8vNkrPKSknSHparRzE6c3PHdhZoKqY5521Zx1BRsaEaZpxva64XhaQfFBwMLHmWrUprpFBlFo46zfUd3DXkhWR9nnZtFgcrb1eCAK1Xb8WxCA47HfGbwV2ux1SitzFVTe7HkPkFbWs3HxMe6bUjKoFFdmAoGIhFofHkjNZNyjcCIu3MHBA6iB9grGLDjcQzISxPAJ9Js1rMP0tQ8WR0RH/9UX55D2ee+PNJ9z+xE+IDen+/GOIiHFCSskkWxJSYlqQYvcuHWwalAMV8OG/js6GQEMfz9FJK7WS5oeaEDAjYAfoBEEyeU8L9cVryO5F+yh2z9NVOZS31mKYgyPPXqYJ7f5yqBJDdv9960sFTATbO6Sf8oe/7nixUe52HD+w3x2x3x0Y9yPgMB9RSsXrV69wvlygAGKiwC7Q62ywsHS5XpFixN3xCBFY2LnieLwDQJRwmibs97sGVDhR4HA4IJfcABuvaXpuuq5LC9lCEKSJMb6jnqV2yRHWFIHdnFBLth2vKyK4oQMMcfm5S2PVOCna/B3QxIGd2K0tjPVc1Hf6W+OE0Gu1vNViUz5c57UGo6CNZaeOXncfvM37ah1mN3rIrKPBkpjgRtfyRfHGZ//icgmBnNQYYlucIQb7b/tdTEZmTwiS+Duxr5CQph1inNrfA0MIXQFYx0p/nw70uF6uakEpK9yDogqS7BAxI+iEhJkToCtH5UWBtwAgqMKnO+sQ9Xj5omgxX9sVz32t+ibjVMsxVOHeKlQmiBHBmrYlOMXxRxy++s7w+tVrfPHFV7g73gMwjus04d3br9j7uFyRC2dTFq3IdYVKIV9TgP1xj5wpk5hNLIq0Jm07pkgnsjuo5PXK/W6PFOOw2LsGEA11xc7C03lOkAAKGqMaxB5N2pEhR85XBFGsy4XdFOYlHU27XM4AgGW5bmqYrVDvt7r9Hw1UoW2n7eHuDV2rGWY3KucySbSx8NINQ5qCm+cx/nQIivj5+XuTgmbTq1FNIrK2XsvuGT3UG/ozLVdUBzwrP4eGRGQ1xgkpzkaDiwhmhCEkcI5pQAwTm7WE4xECOJF6JNKXUuz8q9V8FeuyQks1BNbV8wVTikgxNE0lNmEXVC1dGZ6niqqZbX9D1LCNBrYF/a0366BcR1mjXVvYfPFlbpxeZvJNjeWUj6HZvdgop4nJ//lywfe+/zmWZTXD5MlSSBkt91HLv9I8oYoiJMs1gnch9JKK35C7u7tGnXMOrfdLAtTjiSk17+G5gpdopokhk4c9u90O8zxjv99jnibs5glaMpbrhZOWSsa6LhaOVlyvlxb6qmqjDV6v15bj+u/6lxncMCukeaDBCJ+ErqOnNDSSoE9fIO7pGuvJAFW/7r6++D4jaWEsi4wQ64iY93NBu5/9nAxdbV5yaHOyf+NgmG6o/JrYQB5ZfnKiuz8b1iojUpxYR5QItuu7ykH/IuWSP29N8Ck2QsJIhRvxh1KyBUjcUZ4PH58P19U22O4DQ/fY4qWW7dodP78/B92sia9PD/rxYqM8nR5xPB4ggbQ59i1ebXyZYM0Vy1pavUokIts8EBoow6dSKrVtFBsmjgtnkXVzwTzvcD6fW/0TsAnH0heHq8DN89TroiItzHAvKvazWgiZl1KQbQf1idO5ZP5++DwijhXX68IKTbTdtxqQo3ljAKOKHh/rsBAUbceFbndkVULyqMXCfQMhzG+G2Fuz6D0jFGz78r5MWCTDR8pFrhqYb8F/3vsZu2H7+YZNjuSlIf4sNs/noa63ffkXIynPtdg4Hoe2OB8QxK9t+OfexjcHz9FryU2PyHtMo32lwCG0MYjJnxVwlscVEsiHpbaSckIXLMOo2nSKSOx/Spbw8N7vz3jwdb0uPBo7vbZ3QA3pygdU7z50vNgo2SzsO2rC9bri8fGMEGY8Pp6Rs+JyXnA6XTClHa7XFSnOgIqhqMJ5F9cr9Vk8+bYbM80zJCTkQiU3R/KIuJLpMs8Jl+sJKQpKXiComKeIeUo4HvfY72Yc9geUNSNIwMPDAxlCJZsMf8SSudjVZ1tIxZpXwt9zggTFmq/w7ndAMc1TEw4rJdtuaKFhXYGaIbaItnXTvkNy6CgXUIBClF0KosxxolHJgrBY09uPLBwOsE6QBMgMiQdo2AFhRkVEBWdjQidAKVBca0CQiWUc36nFIaFo5R2OQBCblULKH71kCNFywokSjhqhJSDFA6a0hw8BgmqLkoJNIYNJmtRWTkBHlGv/Yt5tdUcRBK2oeYXoAugK0WJ5YLXXkh65txEXcwxIEURKkaF1RYDH22rIOE9pHNPI5xM24f4ttZAboT0DB+qgNpSro8cAUVZfF7VmGrYbd3iZh/TjxUYJ7coD7969s9Ay4f37B4SQsCzZUqyAZcncVavidDoRUV0LqiGt67K0Xkj3luuaTWSJbUSdJC44HA8NqOgMf178fj+jlBW7OeHu7oA0mSHnjLvj0bpRbIQe0EjtbvBO64vmIdvDse4DVe6yNMZsN5woaykLcx97iD4azQEoL1iP/2L8ThyrYykmeDnAASOpLT8FWD7REFAlUuFdIqpEFBVwwOpkBjqhaIJiAmSHigRF8u2AQFIQtlPZfQgG7HR2T2+1olecIBaapjQjxD4RjffImS+Agy+lrMhlNQSbXq/YOAnPfz3vrdWKRMI+WwJpGUCGCLVvXF3dQR/fXP2LsjHeTuWGZK3Nsm2k4Ga5TUXaUm//vU1TOk/2qQfdeEbt5ZtWufpxhK/VcrbHx0d87/Pv4Xq9NibOcr0iJSep1zYuDdo7OcZdSpXKdVoL+yjthO/vXyGX3Hm202TF/bkxiEQEp9PFpDW4+C+Xy+C9MuZd6vmL9U2ONDmIYLkuTduHm+F2p/Sulyb8ZQ9tNsDJZ2dG06ZlLrQFcjpI/twxoHYV2Iztw/ZF7YFKJ6fXqq3JenyvrpPbAOD2doohcpZe8Hcv6pA/P9MWXgzW3REQp8TpXVN60uY2Hm1sQb6i5gUlX7GsV1yXC3JZbIMrZqS5bX64eb/x/V1y0iUr3cORtijwwb+tfixDV00rMdVmJE6hvA1BR2UDf+w9x+1I9LMo+vC8YPfbo4SPOV5OHjBa3H6/x/lyRq0Vn332Ga7LpU129hF51+sFx+PBXDkXzuGwaznFbrfDcrkgThHX9YoQ2ORcykrGDggseUmF/XyCy+VsYbTLLpL/6G1a0SZQudo3pS7NcGpGXhcc9jvkZYGWgvW6oKycj1EyuYxjfgEMRO1C0vh6vRrBWWxGBR8YZS/Z7FsNTXRk9dZLdosb0FrN0JoxIqGbDopWHwubwUa+SOFGWE2Ma7MQrMSiir72B68tEdSu5ZeXKhxdBLAB0HzRqtfgANzuPO65anWjK8iZ6unFar2lZnrHwSBvnck2zxPr0eVoAc+P2zUOno1GpSjKklYpKzeBws6RTrDYCrp1j+ZlDm6WJStqwcYob8n67l1bq5295wd25Q8eH9VP2SQhJeDVq1f44Q9/Da9e3ZFKVDL2h72pDHAmpQTFfr9DCqwRTZN3gFQgCnIp2O13yDXjcNy3m1ZKQYoBy/WCaU4mhAUDQNjlD4nYH45kkgRvVwoWklROsYJinidfrRAoHh/edyOpoDSjrYt5mqClYjJ2kpdjCCAFNikX8mmrhWEuKUE0kvMOxXMnoBWtt1+w/JFfMShzUxS4tGLvxJeNgW4X3VieMU+dbUZH8RKMeVIVkPsuG5STqo00Wnhfo3tRhzQsInCjbBsX4BPknuwBI/Ls11Csdu1eUpXKb86kkbHuqv370sjsXTDtFtWmUQDeUaOqrTTnkc9Tr/ZUO3e8136BWrkJsFzj19ZLTn70TW8oK/WY/sXHi43y7u6ueUpV4Hq9IKVgMXvBNEcsS29gvl5P2O0mlHxBihUiBetywX43tTAiGqoYQ8TO1OR2O0ddXViLeeO6XpCSoJQFEsBcpWYUrTgcDrhcL4AtmGW5tt7LZVmwLleIAg8PD/Q0RtEqmXmKFiq7jfM7+k3edkv0li6XLsntgY/oq0vWt6Vd1SmgCCo+xAnWUUltINn23G1rhk9/xoWJZhFeNuF5E8yhhIajp4MmrVkSX+LE8vBkM/D63Igq357Tc8e2RrtFNxuLpkHS9jWQH8bP2V7XNpKhd7wJdR288QscnuUtEDd+zu0GWLVvfq3eW/3z6pNr0/FhtGv5cJj7oePFRvn48Ij9fo/37x+aHCOZLkQl12XFlOa2uF+9eo3L5TrIT7Lr4nw5oxYgxRmXyxXztMf1wjByntiB8urVK9YIgxeiA+bdHq7bupsTYlBMk2A3J5wvZ8y7GcuyolYghKl5CMqScIc7Ho8k1E+z6c3uUAoVvVGdpmc32rr+oYoowyyTSt2YFCKL2wNgMXozPmk3tAqRCkjp/w5hrRttQmBHp479il2j9fah9s/xToZgANuWwuYd/SO1bQzZnjPE/uViWoJeEO/55y2A4aDPuFHocD3but1zigPPAyJMLbxM5CinkyOcnDGS6MlphWkc3R6jEX1og2HovZDLXBcoMkq1unYD/XrpyoElRjxOoaTT8q+XHB+h+xoZx1sX++VywavXd5YLKva7Hd4/vMcPfuInTZEuYjcTItdVkCJLJ9O0x3LNqFU5NHZdcby7w5Jt8lMlopZiwjTNePf+Hd68+QTn8wUxsjZZcsbd3R7LuiBNCdlzK1PcC4mh5Ol0wf5wxO4gyGuGoNLrLgtSoAnMaQcFcF0XCnoZUksGkIl3BUGt1ptoYSkMWZMExCki6wpAkTWzWwYFqOxbYN7Su1lU2cfJxeCLmKG3QFj6UAd3wPmNql2ZbvNcOjILUTYMS4VEAMZi4pr0trNu7C3sHkbnQUKrg6p9voDX76GkX48nS35NjFJ6EwFJMeSZhpRYFglDB0kTwrIopBZ4+7BW8lB7uKxg3dVD0WLAC8wopUUPHiaza6dufK8Ytu3RQh9px0282y8NLRe7Hs0AYtfKtcM3AGk5e6c79s/BR4WwH5VTOr/xcjnj/p4NyiIBk53kbrfD6XTCshTs93fIWbEuFfv9HYCI16/eADVgv79HrUCUiXnXwKOELY7zecGyZKQ44XK+mtxIaB5XK6UDd7veOH2+XKAaME87rCtD0MfHE3LOuF7PyPnKfNPg/JwLBDZ8J3qXeWhjAmCG8Bxn0T3CbrdDsqnIuXLYaC4rEK0DPbDeGRIw7QKmXSDtsK6mNs73GYv5OngZDEiff+/HrffhD7kcHHnkmr8FI7YQ/W3uCsD4mrZIwjbHey6sfhLmtYuARanuzVvhpf3aWULwUBn9ulw0mu/HMsuyXNAQ3uqfV7Zf8H9rB8HUqY80uH7XxhDUoxLWHiU0kAAuwsUva8xTB61WlLra59bhq3v3H3mXyOvXr3E+nxsQU02ThSLNue1SDw8PmOcJv/qrv4rD4dBqkA7RpYm0t5wpZrSsF6SJGqqn8yNUtRmZKxHEFFsNcZ53eHxkKD3vdsjriiklfPXlV3jz6acoteByvQx542IgT0GpGfNusrrmjABgN004n0/QzJmZ3HyCha9o/YqANtVz2GKndxEsxgDyRdQ8mgNBYJAGpaqdqG+cyglVm8G22x1VRJoCoI+8c08Uh1phe70vswbGfHMec1sSUNWN9xvzptZY/EzYOtL8ns+3QGQJ2SRQGE0EVETp93nkxarqJscfQRsHWry0NYI/GML2EfGmcdrG90yOOp4rwTuqJwRTdG/Ilt3d22vvXv1pDvkjzyn94p3OxoWScD6fcHd3xMMjc83j8Yh1XXA47Ez3xg7hSHStBZfL2bpAFtzd7XA6vYMqaVG59DIKF+3EcDN1pYHPPvsMp9MZtbCRep7m1syc2AyHtdATxSliWa9AlM42AUswtRScTydrQ+ODJ8eROi7caLjzsTLg4aDvttV28Q75hyBY1wXzlNqDVSUP2PNPV04rhYJdMXbwKLXQEG3hdeWFrcaRj1e49Z7jInkKzoxwP8Cc1UO3HsKpeg1wC5KM6vHjV+M73yCS4+vtv+xn1kVkXijETi/0HtdR+8nfd1SccAN17+zIK+9Rz59t+bWUwHPvWsmnXtcumtbJDL1ZwCOZjQF/0L6eAlXj/XrJ8WKjfHh4wKeffmpy/3cN1hYBSuVcStVqqnC8yMvlAgmC0+kR0cK5NAkgVAinuDFHCqSYOGJsZq/jfj/j/tURD49vcbyjx72/v29SFS4Zcj5TfSDZ0NFSS+sw8ZHf++OuIbatDxMkROQ1cyBL4DiGxUb5kTwQrK7Vd3Hx3I38QIQo5vU9xAF2+9koeoNKnA4aLUbRolflefn8Tb+ucQG0QvgQQvb8FJvFe3vcGq3/DEDjnqoylCf5W26+0M5jDHP5+qdTo90w/XuglzH4MwweyiOO0iIH/stNebebGwndvaF7Tjei26luTkjvnyVWYpKGD7Tqj3RFBT/Hbpjbrht/b7+usd1tvFbf0H49x0coDxA4ubu7b8RvEWme07V7gvUk7ve71k1+PB5wPp84AUuzIVkcBjTPc6O63d3d4XK94Hjc43I9AyjY7SYrvyS7MR1QcEbR5XJpzCFVnmsxJDUEDpElYuHzGCsu5zNmA41EaaCMHrmIXeS5IXm+gGzBqIWyOa9I1JFoRuZ/Nyp/e8jnZPdlXeCqZ7e76O1idyMcuyD8nvmzuTXKMT+8VRFwAsLoRW/R3edCreegfT/X288f66i3dLoylkTgZSf7mfTP9usaUW2//m03xrYO6ffa18TTa9Lh62n46c98O4+k31d+gyc/63/bIJ4Xh6zj8RFADxt8S824LswDmftxlgi7NebWQrUs16ZNWiswTbvGOyUYqLi/f4W3X71HShPu7u5xOV+w3+1RimJdCubpgOs1w3VV/ca7CoJ7lr6jMWfL186TXNcVooKSgSROzaPlrOuCeTcZ+SA41ZRNtqUAxiRiODvQ58wovNved35vOUspkRQPsn6mmIBaoblgjglaCg77Q1/M0r1dHQzxdqGHwFJMWTNHFihlV+KNp/SNoHvQLbgzGrkvyPF4LhwGuqGNP3cPMi5M/1v3ZKNXK7W2AUdul1oq8prb5C//jFFO5FYL53ZzGEGm21CzCWPfXNttHnlLTBi9I4B2HiE4qeL599n8zEposDr1S44XG+XhuEeaAq7XswE1Gff393j//r0hZEsTeGoPXSgNspupLhdCRF4LtFZMVut8/foTpDQh54LD4QjvhXv9+jW++uot9vsjlqUT13POePXqlXlHktPnOWGebRBQVWq7LisO+x0e3z8QtKkVEI7KlhixuztAJ4FECgQfdgesa8Z+t8P58QFTirhezthPk01R4w0P0hdJigFRgDklTDEhQDAZ9O/i1PM0mRfuiKIYMH/YzYgCTClCkrC0UtgW1upaUlurGGrBLs6YZMIcZwholAKBmE5u7zNkE3e0XNoNZ/Rq4zl9nZe8zddGD3773+OGML7GjbMWbU3TaiJFpShKrkZN5L1zb+gKEH7+t8wmXgdLQ7ks4PRrtSljAHV0SZETUPDatYVKVkCIpoaIJvPStHc18/daOFIhmP6sCFFZdC8LoHnxoCBZxJhVqArNBSg/co2eB4hQLOhyOQ36OQH7vauZJ6zL2h54KRm7ecbj6RHTtGvTt+bdhMvlbLtTxrpesd/vCAAddljzAoaLASVTvxWAUfgUDw8PADrZPaWEd+/eWiN2xsP7B+znPU6PF7y6e41afO4kpzbP84zJuZxTQi7kUwZEXM9XCATX8wn7/bzpuvFOlZ7jAQLtatoiVtPrXn3Mv0ZPE0PA9XKhYZneUYih6QB1uQsdvE+XuBTGyE10eTQI5xiP3/sz8XMZDW78nf+sbUJD6H3rBZ7zkKM3Hj2LGy9BlYJlyS0f3Ia328XuIeTooZ/7LAm9C2SMDngd/V8KKt+G4mMniNrve2QkNyUhCV8P2qivFWXrmBuk1h+xUQLSxpTTSHiix+Md1jXbSDzdnLAzShjSkhS+21F5breb7UGxjnNdzri7P6KUBbvdBKBAgiJGsEVqXW3kwQXTFHE+P6KUjOv1isfHR5MOYZi0LFdcrhdME2UKY0qYZnaczPOM6/mEFALWZW2j86h0QK+S1wV3hwNKXlFMqrLldMNuJwLjsbLc4ZvEsiymY7timk102BZ1F5de7bVoGkFqyOxtGOQ1U7WyTK0uBIxWrHfnNhqCGx+bkMOTDcJz3NG4Nk/8mbKH/zvmbc/mXPZ3o5K+f5Z7Tf/yvx2L/yPIMr7vc2F6G7H3DOrr/z6fNz71dqpe/P/wfejpAIZ/veSzfX9v5wPw4mbnFxvl8XiHt2/f4dX9JzifF+x2ByzXjGVxHc0uvOz5pQMvux1ri3d3d0031j2JJ/MuVEvie8TlesInn9zhfHnA4bCDM2qOxyNqrU2zh+8DvH9P75lLBoIiJODx/ICQAlbNWOuC0/mMy5klkPfv39HYDHhIQUAxX8V+P+Ph4R1mQ3S5AHt40h+4F5vZGTLu1CVnSBKs+Up2jzjSyPcSM8ycV6zXKy6Pj0AtyNcrUggm6jVBa2F4K6byZgTaCpc/iShm1A6ajRQ4AE0QzLtm2sMfgKO23G4M7LbE4n9zG+6OHvc2jPVn2w2453Aj8sncsxury6+MuZ6ft0cBfaPZypz4+41efcwdb2fGjNfiEdF4jMCZP8dgXUkiPYQGboW5n96vbzpebJTv3r3Hmzef4Xy+4LA/4ny6oFYgmCwEvd8Ojw+P7JUcQrdaFIfDocfcthgOhwPevXuH168/weVyaTeSI+sSTqdHHA57hChNonDccc/nizGMCDidTidMid4xlwwVxVpWxIkDStMUzbtc2FGiFXldIFpIpodyvJuiXZMDRk7K1gE0aTde0fJaV9MrNSNEYMlXFGX91I1nbCG6XE7N4zWhYAHlLlSxmyagVkymvmf+ElULclmQUjA5lDjcoy3gwu+5iOZ5GhgyWy/xHLjkz3Fb1tBnv27DWffOI1AzztNwA+k1wg7OkYV1bdcwGtxo9PxZr8k6yDMKRyu2m8r4u1t0tv1MsWEWjV9jxDFep4N2twDYc/f1644XG6VIwPl0wrLwhr1//74Z2t5AGFWTzrCCrBvQ3d09XMez5IIYElIiIf3Nmzd49+4tdrvJeIXUhm3DZ4PgemUt8nw+N7S1FJ+2Rd7h+XwFZ1fwIaZ5goKe+Hy5UKE6CGqhIsHj4wOW5YIocMQBOS94PD1gmmcsS8HxeI9cSMW73enaCPLE6ctVM5b11MawkcTc629XU5Pv3mcotjfDD20hjgtw9EKOBjsRwh98zhkVtcmW3OZ/bhCOgI+hnnswP5/bnM1DSr+349+Oi/oW9BkNcnw/fvX/dlK5e9BmTM8Ywpjr9nsS4TrBH/L6o8fsBIevYfSYgY3HS73d6FW/zfERRil4eHxASgFrXvD69SuczyfUUrDa8B2ibT3EAIDD4UBgRjmhebfbW6OqYjcfcL1kHA73UBVcLhTOenw845NP3iDnihQT8lqa3Mj794+oFbhcFpRSEUJCLcDd8RWWJWNdMo77O5zen3Dc3yEvGff7I9YLSzSzlVx28x5BqDUUQmrvNaUdTo9X7OYDLucV+x1LL7Ohqt5F7sT4IJxqHYXCTuuSjWBO8Si1aCLYrXaFPFVOnioFmOc9OBQWmOcD2Lwr6Lqi/X722iML2L3jXpun9b+7zbGAp/D/+DM3oue85W0YCPSw8naxfihsGwEYDHmbl7N8M3nuvJ9b5Ntw9mlr2Rh+902kI8gu3E0haNm8FsO5P3c/RoPebCD1+U3kY0LYjzLK4/EIdb5mWY2IXfH4+IjXrz+FWt1sDCPc44UQcL1csdtRJWCe9jidTnj9ySe4XhfEMGFKMy7nBfvdEdfrgnneoxRQH0ZotD4KAQg4Hu5xuSz45JNPcbYaZ0w7XC4LUpxxfrxA18rReFWAoihFkaYJay6AcCbJcl2xm3eo1sxKqZGCGDkXYk4RSYRetRZAC87nR/Jzrxm7+QBBhGhAEtY7k0TUVSk8JQnrdUWUBFRBMKGqWpj8Pz46HdGU5iRy0I8GiLK1aU4789iccOULyf8VCU2yUZUd+i7POS6ScWFdLhfs9/tm2F3Nri+oMXT0w70NqYnVwDAgGBWRbCWmIevKsRYePjtJgDkgf05FAgJ0XdtmS+NzZs+WuL8FaAA0jrSHqFqZu7vSQR0I4oqKWmCAH2unrl2rCnjniX/emBL4JgoEQ8Vh66fiuU3sx2KUrqnKUXVLY7zEGHF/f4+vvvqKNy/2t/RY20GZ+/t7PDw84P7+HpfLhY3TpwtSTFjWBXf390R41WlaBacTCe7LknE83hmkHbHfHZFzxfFwxPv3D/TApWLNBbsdF9phd8AUJ449hyCFCYf9Hc7nBce7V7heMq6XFbvdHqUCMSXc3d1BTKyrd64Yymnho/fM1ZIBBEgVlLUgSkRt0iCJBmL1MVICz22jgrLksyw01vPjBUEi8lJsEG2xgau9UN0IBgagAazxURIyNI6mh7N+bPLf4b89twd6wZ30st5gML7HLbLqUdFYMhlLHO6VluVq7CNtn5cs7C82jet24T7n6dzYRoSZYE7PDd0IGj+29Vl2po0zCDt62qVSxvuDbzAi/0zPhcfc2t/nY0Ee4COM0pGw6/WK+/v7Fpc7L3GEvkUEDw8POB6PANDCqlJKm6YcImlvx7sZISqu10fECFwXcmuv1wuconc6nWw2JjV6RIDz+cSdVyuOxz2uyxnTFLGbJyxX6tK60sD1ckVeCSQ8Pj5gniNqXXG8O5B0UAsO9zOQCkpYULCgYEXyNitUzPOEJvZUufOKFelLycjrinliK9rd8UigQDioKK/kAR8OB7x9+xYAcHp4RL4ueHV/j3W54vWre5wfTzjsj7hezzTGAIQYUGo21o88edCei65r75wAtgY4AjCj13PdXBpSaTmwamfv3BqJf+8hI/M7gTcZK55TqjMFiHXdhLx+LSOi/aEF7J/vihJjT+M4lt7fwymI4/34uq8WWg9ADUSeO5V2jJtQM8qv6cv5kXtKdmmsBrDMeHx8wN3dEafTI8js50U5RH+8O+Dx8YGk87w2TuhiHR+OUl6vF6gW3N/f4fHxEdOU8PbtV7i/Z7eJaq//hcAx6VUL3nz2KR4e3+Pu7oDrcsF+P2NZLkRTI4a5IrCHOWFdF+wPM94/vDVNoBXTHFHAdq/dfkZMAXGKSFMwhHNFSoLH0wNC5PjvFANZOgCyaRIFAcq64rDfs/YpAWmKWJcVApaFvvzySxyPR7x7+xZv3rzhw1fguN+bHAiFrhUVKny4yeq7lAji8KAgxAX9njj/+Hw+b6Zs07hsQvJgXGPOx9ICv/ye+YCdcsNAGWufLkgWAvsufWRAXomaLktXC1TVZpR+jL8bwZuqpZHFnUTua0fsc7R16zxFhm891m3JYzzGKC74JhjQ+M0inrs/Nfrb9++hPjb5qH/OjwV9BdRasvZ4a3ND1pUsnp4jUPo/mPdIU+R0KlM2S1My4rqHR9takiOLu93cHiABpDhQtphMk0zAc3GYP6WINCduBonNxmqiymJqwV9++RV2O7aVzTvmqsFqkF6WCUEaqcD7R0fidSkF80SB5mgSJZ5jXU6PECXB+no9c4YK+tyUWit2+z2++uqrtos72aDkPHi02pp5Q5DW4uXCW9XYUl6MZ859wfV6tTy+q9HVuuXS3jJ0vDPG140vLp/RMi7A0TC54Lg2urfwkK4DKu4hReRJ7XFD+jbA0zd478QRAWDPsXGRBxXz0es+ZywfAp7cpfVmB39N75vtbJ/nCQcjK6n9rt2b3vL1IYLGc8eLjfJyOePVq3v4XMFpSqiVdbdlWVpR38MLHw7rO6CIK6z12Rjv3r3F/f09zudzW1QeivkuTC2daXhvNlh7QXq326HUzK4LUZwX9mper2QI5bLi7tUdis3QpI5QwTTNnHGfAnZ7khNqWXE+PWCeJiOsr43FNC4AintxLDw5vYIQxUCGitPje/5trViuF2gtmNOEmgsO844e9XDYhE6+OL2ZOZpX9k6YEU1lCYDn4yqDIlRB8J+No9/H7z3fHEsT/vv9ft/yXoBA0OjNvJwC9F5LX3iNCFC3fZUOvPi59Ty238+24eHrJ1ONG8n4Z7cliK/zjpu8Wjj8KU0cXDv+7raeelui+iB4Q4Rok1eO7/GS48VG+erVa5PWKEhptjCW5Y3Xr1/jhz/8YVML8HFzqtoG48QYsRphfV1XBAl48+YzvH//Hnd393j79h3med+QSBdpnqYZqsD5fMU871tOez6fKAWyLIABTFw0AKA4ujr6sCB9SNE87/Hu3QNqVVwtrDoc9vY3M2pRiEYIElxHhufNYv3Dw3u8en2PXK5IU0BMgcwgVGgAwpwgoqg5I6giL1cEAfa7mdHGbrdZOKOygKOR63pFzSuglLPkGHBH+ra5kIf5gFoUcHlS7/Tvu2FbTAhpqDNHEh4GUKY0Ix7RTd5PK9jHaAN6uica8yz/OTCOH/dRFrynzSjJjtgYdQ8LnwOD0GidY2fIWLQfj9scFoDhAs54mtr7jLREP27PYfSO43X692PD921t+OuOj2hyPmGe9w0GBiIulwVAwMPDCff3r1oe4t3hjtS+evXK6FYJuSzWBUHQxRXlRCKmNEOrKaVnGs/DwyNiTEiRcw5fvXrNeSUTGT+n0yPO5zOuF+Yxy3LF4bDH4+N7HI97uOqYt5y9/uQVFQ9eHRECEEVx3M/I64rj8ciwK1eUpWC9rAgq0Fxxf9hzCE+pmGLA+fEBofIhLyUjzSw/pDhhXTiioWaOadjNM6CKslKG5Gr9n+4BU6LieLAukf1ujxgipkSRsZwzHh4eIWCuXMpq5QhGLf4v04czSiHB43Q6NW8FoHlILrqIZVktbOvkdwd7fLgS1efdAVSsK0WzU4rM7Qza6GFdsU4KtTyYEiwxCabZVBWs8yVEQakZMQmaho1syx3+72igtdqUM1RMU4SEp9zWPkzIpUq7Qdy2dnn05sY9Tnp7bqO57ZZ5EhIrFQxhihQYv36URgnA+iQX6qxeLtjvuyKA1xBfvXqFx8fHlmeN5GffvY/HveWnR5zPF5TCet7lsiKlGb/2a7+GECK+/PJLTNOEy+WKGBMoB1kxT3MDEpIZ7PFwwG6acdwd8Pj+EYfdEZfzdSghVKQYjLy+p+K53fSHhwfkUvDu3TvEwPphkAQBR7156CxQpCkgZ8p9qFYcDvt2rTxXhnwSyEWFwuqw5GouNo7BJ4ypsm5aar9XMU7IK2XyRSJUI9a14ny+2uIsBCSs5uZ1Qt/ZyS3uNDJnVz0+nlBrtSiEntLvDz+7tH93uxk5L3Y+cQh72SLl4weui9cht2GjNqCkNsDNQSH/XqQDPi6XAmyL9dva4Lbn8bax+Zbmdxta3oagAFrlYAyBx9AV2KKsY4TyfI6qtq7sM7HtQ33J8fJ+ysOhEc7fvXvXvKCqthzGcywf2jrmQX5hPo/EUa9p4t+ueWV5oS6tX3OeZ6RkZOYUcV0uuLu/w+n82Opw67oixQmqgsPxDoCNx1FgzWTXpBgxTQmX8wWv7o54eP+uQepsOZuxXhcc9gfklVo4825nN57I7eWyIKUZIrH1doZABTxRqqtfLxdj9SzkzFohOQ2Lep5nzPPEbpXrtRmiLw4HWTzPPp9pQEGCRQILci4Ds2db7vD5KTsLkf0915XtacuSzegLRzWI4Hpd2jn4OapWk2U54HA4gDNIZ1yXFT7Y9fGRUcrpdMLlctmgoL5oR/lKpgesd7v39s36duHe1lb9e1dc8M1mLLuM6O74PuNrHPO4NaqRpHBbj30+dO7G36+7Az2ODj/JOV9wvNgoRxd/PnOWyOPjYyMCfPLJJxxzZyWQ+/s7rOt1U4Ny3qoP5wmB/70sC968+QTv3n+J+/ujCWv1Ia0U6rpCNWNZzihlwd3dEctyxQ9+8BO4XM7Y7WacTydIYPf+UjKmeYfT+cJFVyp2hz0eT49tUbx/T9WDZVnx6u41Lo8XaK64LlecTKU954IYdkhxhyAT8lqR14oUd+yQKRWH3QHX84XKdQrcH+9wPV9aS5dvTk7U10qFhJQS1pyb9+gLKBsFT6EVWJeMqiw3AOz6uFwuA1pMJpDPR/SyRic6aJNNcdBsnmcbEIRmwCP31qOclCK1lkRMlZBzV2rhAj+fz7her23xjd5m9GS3wlRU2tc2O+bWO3pY7//tXso3Mt+Ub8cRPFeX9esdSRP+7+3nPsdg8ve59cJjftrOQZ92E7nBv9RbflT4ejwesSwLPv/88wa4eGH//fv3rRk5hID3D+8bAT3YzPspTfBugBgpTem718PDe7x58ym++OKLVmbxfGddrzbwp9r37Kfc72d8+dUPcTzu+d+HGSoFBStiEmilmsHlugISsOQMtakV5+sV026Hy3LBvJ9xXa+YdjMVBK2F63J5wH7PReM7+fW64LA/ouSC3TxjnnbtXjiFcFkWcnaHTgdfHI5gihlqTJEaq8Nn+OtyXnFdLggByOuC/WFveWNfmJ2rylIORb/WZoz+5QavqpgMqBtV9Lxc44QCR8EvlzMoxOxCzhW5rHj3/m37ew8r/dy9rcq9tofPl8ulrSVvMwOw8V6+fjoS3csm7g3HvM6/Hw3GF7+fy9hR0ubhDJuHG04vuz2VyBxf478fZTj9mQJoadGHQKBvOj5KjNnLE5fLBff39x3FMqXpu7t7+90rxJjw+vVr9ipGzwsnLNcVh8Mdci7t4fjh4YeLczmCend3h8dHMoSu1wuqZty/OiBNwOEw43J9RJgEua5YljMO+wnr9YQ3bz7F9XLF61evIYg47u8RJKJWgUJwuV5wd39vPZik2anwPX/4xa9gmkNjGpVCgCVFTv/ivETF27dvkVLCV199RQMJgsPhQLh9nhBShESis96ZzM4Sy28gzYM5Q8pLTKWsuLvbG6OHKg00PE5ASynh8fFxgxaOqcSYK+V8hc/BXPMVMUlX9tvkldsmbho7ABM6EyMNsHHgcVOKua1FAl3Bz0PUjrqubYOKMbYOmjFH/FBddQRtxjxvVHvwv3XdKHcYbnSjEY/0xTHkv81Lb0Gh0XjH9q3bhusfm6f0UocvhtFFn05nvLp/jV/55V/FT//m34qvvnqL4/EOX331jrzS0uuOqsBhT+qc52a73a7t/vv9wQS5uPC87DJNM3KuEImt4Xq/u8NyzZAwcXr0ZQVKgK6C/XyH0+kCCQHrarLyVgLxmuF+v8fjwwMfalagAFOgpMlnn70x3qRiXTPO54UzOjRgv9tBQSh9SgmX8xUBAdWU8a7rijo8tKoVIdI4IWjatiIc03B/OCJfFwQFas6YzDB3uxnLcgXHhi9QzTaG/tLqwN6O5ZKe1LexKrx5txCAlASKDEhG1StUV8TgCwZNObyVMeBsH7HQ1ZQKSwXHdDAd8U3BPayjvb4oR/TXw+DHx8fmVcfWLjeG0QMCaPjD6H08fB1pe6OB+Pv56x3/8Pr2aCy3xv5cLvihDWIEiEIIjkVvDPG2jvpNx4v/8s2bN1jXFd///vfx5ZdfUC6ysmVrnmc8PLzH8XjEL/3yL3Eq87XvmixvzPjqq68wzzN+4Rd+AZ9//hnevn2L3bzH+3ePuDveI8aE0+lsnoA767t3bwGhZ1NV7HYHGxzEMQUpTZinGaUo7u5eYZr3SPMB6nMqVFtIBwDH44G7+7SDVLZHJSTUwvrfw/uTiXUt2FkXiFrHwPW6AIjIK7sJnCnjYexu3iOEZP2jgsP9AWtd2dc5R1yWC6pUPD68Ry0Z63KBVs6lLOvSBbvO9JzX6xXzLuG6nLE/zKhKafw0OUK6QzSQywfOLisH0IhUhATEWbCWKyBs7vY6YZomQCtpa0reK0yWX4K2/w4mTlaVukHzPNmYQTKNdrvJ3nfF8biHi3bdSli6N7wtJbjh3BrnWOfzMPGWTud/7wCYh/Rj6OmGEWM04LBTDv09OQ+n0/58Qxj7Ov3vxxzRv0YertFnNzmtf84tqvvrNkqCOBGn0wmffPIJAAw3vkvoi5BEnstieUppIse73Q5rNn3XM0si62qI5G6Ht2/f4fXr13h4eGzE9RgTUpqw2+3ZpiSCNO2w5gpFQJp3yIV9mst1xTyxjWqad1iuGbMp6XEBR7ZpWbgVA0O8y/UKICCviuPxFU4PF+zSAY/vz+wXvWasVxIeuNsr1vVqedME5/5mu/HMI6WVbVwYS4TqdilGm4wdjYzwDvMu4XDcNVLE+/fvUEppBAjySQl25bxshKNXC0N9rMS6rkhTgpdMXMN0vz/Cp2gBFTEJ8rq2xmiWPNyIQlMo8JBVRLDmdUDOUzM2X9giHbDyhoAxHxwX8O3AVjfSEbVf17V5WEYJ1y5VaiGr//0t0uvh+Da03CKrwNiKth3fN4I+z73Oz3uk6ZVaAGw96S0o9E3Hi42SXmqHh4cHvHr1Cg8PD5zkfL1g3s3WsqW4u7vHsqzY7w9NneB0fsS8m7jwDGJ/eHhAtV0qhICvvvwK9/f3Nlyn5zgElSiWtWRybZdlxfe/9/0GpgQW7TjRWStSsl1ZC9XKK7mq79+9w6tXr/Du3bumJbSbCfdP04TdbsbpdMK6Ui5TBAb0KA6HPWot2B9mLPmCEClhKMIBtVULYuTAIdWK/W5GLQWvX7/CulxRcsb5dMJsXttZJLVW3N3dcZdG62TEYb/H48M7xCB4+9VXmFLEuiwQrdhNCaIVKQAoK6YYsZsm7Hc7EvLB2ZsCQV65uN1DuD6SL3iOWeizUHwxAgzHPO8cF7rXZGutG+mX0+kEH2khskU3x/fwBTzOBPH/9lBZtZPYPUR2o3W0+LZsMtbEx88d/9YPrwQ0Yxo4uCyTTZv38XN3VNmPW4/4HOr6sWWRj6pTPjw84PPPP2/GRq4qgYe3b7/E3f0d3r19i9evXuOLL77Ap59+2oy4Vk4YVq04nU7slnj/Hp+++QRffvUF7u6PuCxXlFow73ZYc8abz97gcr0gBsHp8RGv7wkATVY3vFzY2Ayrz5WSWwO2tz+tyxWH/R55WXE83uF6uVAO5OEBMYS2iFUV5/MJx+OeYxYSuzNiDEgp2MYwtQey3/cuk5yX1tq1XC+YU8L1fEYU4PH9O9SSkaIgBuDh4R1CAtIUBq6vjZVXSnZOU4Ko4tXdPS6nE+6PB4gq9qYB9PDwHtNMhHq3Z9eLQJGXpQn/igqW64rkfZ1DCOZhnjcHjF04XgrxfPW2tOH5EcPBnRES2JHiLCFvDnbk1b2pI66j0fsi9vzylormhuqbt7+vG4SHt6MRufcaDX08PJy9bXPzf8drHg2WFM253aMRsW2f20YcPuW73p7Hh44XG+Xj42PzlA5111pxPB7x+PiIN2/eNANcfbb9AFUvy4LdftcMe11XfO/zz/H3/t6vsua4LhRoVqUsyPGAh8dHlFpwOlGD9e3bLzFNCcc7Egg++/wNzpdTa+MKJs/oYwzWhZS1s40oyCsVBpbrgk9ef8JFYQN9rtcLOaxlweG4Q9EMFdb8nDRxuVzatQOO5BXMOxqkCNX0rld+/sPjI169etUoa3yIDBl9zqF7In+AKSUsK8PtEELzoiEESGDXR0rR5CgjzucTDgdygmmoXEhu8ECH8r3Fyz3NahKYXr5wDzEuZF9s4+t6PieY5x1yJuFiWVYT1s6t3OXvN94zB/dGds5ocO4tx8U+MsRuNxjPB91THg6HRtQfJSz939F7juT853o9PSQea7H+nHxTUXMK32R0L/WYLzbKzz//HI+Pj60bxHcZp4uNqN26rvjBD36AL774ovURHg4HfPnll5jn2WZYLjidT23BrmvGvJvxcHrEJ59+ii+//BL39/fQqvj+979v9L49p0fnbGEyPdTj44MViKdGZHj71Vd48+ZTvH/3Dm8++QTv37/H0R5Wg6aVHs9Ry1LYV+djBKY04Xy+4HgkHW6/3zcWjD+4nTF/OjiR2+Z1PBzx7t07HI9HfPnll2339sXpXuS2r9ARSl+o9Mq9cZidK6VtkPS0Ex4fT0SU7bXn87l5JzdMyn9w8aQ0NXKDe05fcL6gRyN0IxmFtoDu8fz6vCFh/Fv3Kv7lRuGhqpfclmVpJSKv8fo98s1mPEYDGcPgEQgCsAFt/HMdiR03htGA/L/HMPS2HjuGuM3oBBYVbnPPH7lROntEtfcy0oPt8eWXXzbwxGHnd+/e4dNPPzWUcLIBP7ORqx+a5/npn/5pnM9nfPLJJ3j3jgju+4eHJjeSDCTxMgDJCvTOTVEuRnzyyWucTqcGRh2PR1wv19anOE0TFPTYTnbY7Xb46quvKEtyPrdr8JucrS64rqyZ7nY76hQND+xiKufj6x4eqHG7LL0U4CGh/53XIv1zu6iyohbbxQfEzkNzgLW3xQj0HtZR+Is7/+FwsHMPrfwwhqbuAYiwysaQ/PzcY7kxjTmTL0wAzYB9ofoG4jRCX/gepneBNW7qHkb6gh/zXfdensNuCfWh5bSjwqFvIq15OfR+Rv8Mz4cBGGA12T0uFn2c2zn7PXGQyr3+7abkBxH//v1LQ9bxEP3YLPS747vju+PHenx7ccrvju+O744fy/GdUX53fHf8Bju+M8rvju+O32DHd0b53fHd8Rvs+M4ovzu+O36DHd8Z5XfHd8dvsOM7o/zu+O74DXZ8Z5TfHd8dv8GO74zyu+O74zfY8f8HGomHBNi5TOsAAAAASUVORK5CYII=\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"sav_dataset.visualize_annotation(\\n\",\n    \"    frames, manual_annot, auto_annot, \\n\",\n    \"    annotated_frame_id=30,\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Show the SA-V annotations in frame 0 - manual only\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAOUAAAGFCAYAAAACSjT4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9WZCt2XXfif328E1nzPnO91bdmmcUUAQIEiQgiLOolkK0Qt1Si+GWKYXDYT04/GC/9lM/+MFhu0Mh2W7b0WpR3VKraUokBRIkQYKYgUIBVah5uPOQc57xG/bkh/2dk3kLBeJWGA7zoXZUZt46efKc8+1vr73X+q//+i8RQgh8ND4aH42/MkP+//sDfDQ+Gh+Ne8dHRvnR+Gj8FRsfGeVH46PxV2x8ZJQfjY/GX7HxkVF+ND4af8XGR0b50fho/BUbHxnlR+Oj8VdsfGSUH42Pxl+xoe/3ic898wTeewaDAVJKZrMZ1lqkVshUcvrCWXRRsHP3EE0ODsrpERfPDJFYBoMVrly/zWQyZ9jJcPWMg6M5DxSSX37kDH0/Zbi+wlul5M29OaPZhLIsefiRhxlPpyRpytbWFkIo0AleSKQQeONIpCKEgCnn1JMpdTnDWEPwAe89dVNjg8c6hxcBqRS9TsbcNxyVEwoHo66lc+Es+U3PzFrq9YxidYDfH5NmGh8cG6sbXH37CK9X+OwnnqJ++yr/5ht/xryuEEh+7jOfo9MbUqytUltDliQIIQjOMz444ltf+yqTyR6dVPOxx5+gSBTTyQRnHRKBgPZnIIQAPiC8B28xdUNpasgV6UqHo2pGnuaMxyOSXoc8ycmsZCPv0ZkaBiHFzSrOvPAw166+Sdoonr98kbI27E8NO2bO/nzCk2vnCWPDHTzX7h5ikxwdcibJKvXZX+HawREXH7jDen8f6Q1WTDCdilNbG5S3Rsy295GlIwka13i8h9F4hFaC4foKjfJ46VFCkLuC2cGc6dEUUzV4AnkvZbC6jg1TTCX4qUd+jnG4xm2zjT/V57zaYP/tbcbjORIQQvDAgw9y5cZN7u7tUdY1mU5Y7/VYXRmwt7/PUWW4duvW/9fG8Xd+7Zf53osvsra2xtbWFlmWEUJgdDTj2pU7GONwzkFwSBGQUrC2tsJwdcDKcMCdu3dJsoK86PHmm29hjOGdO1d/7Pvet1EqpZBSUlXV8t9KKaRSCCE4e+Ysm+fOcnDwLbK0g5YJSIsX0Cs6OO/odnKmsykBg/cGRAO6wKU5Vd1AA73BKheKFS4lKQjBg5ceYG24wsHuHnu7e8yqmsNqxqSqKIqCRCoq69nZ3mYyndLYBmMalIqGCuC8QyUJRbdDZRqqqmRsa7orfVSnjy0dqkkIZp2pO0JqjZk16KSmJzNs1SAl3L1+m16aIdwh1f5N0n5CkiioIQRwziH+kjkMBJy11N5y584dBp2cEAISAd7jrMOH1iAFWOMQSIIXeA/OapQJ4D2CBGskZq5AKaQNBNswqkeYmUP6lEeylGdsydPDFdS84kJouD6dMb07RjWWvjOMDm5Ql46Q5CitcKfXOdotqcoNDq6nFGc3uf7WnHl+h77coUgVvmfYvnWT1FmkcWit0FmKAHwIJElOt8jIV7poLZBA4gRHN484HB8yNzVpJ2VrcwtrKzwgRUGe9ZFqhbq+gpOCEDJEKDAmoKTCmoYsy3DOI0V08jqdDq4xdLs96rpGymPn73/3G3+LC8Mh4IEfJq6FEO9JiDcHj2DiHP/dn3+Ft67fREiBlBJrLSHEDR4g0ZLVIsMlnuA9KnhSLbDGQFlSi8Bh01DP5lgbCEFG473Pcd9GmedxAQkhlj+llCAFPjiqssR6R+0tWglkopCdDG8rsrSP955uJ+P8uQ26mUKzBkJyttejP+wTJj2sEFihkTRMpmOq2rCzs0s5n1PNK7z3uACiU3Bre5ter0e/0wXnSZOUsqyxQGMFmUpw3hIClGWFTgUqlxinsF4TtOTU+Qs0kxHl/h7lqufCL53nylv7OC0p8y6bjzzEwEqsb+h2OzjnSIOmv+/J3ytRNmNrfY3DyQQQHI5G9FbWQHyQaQoEAq0TlAgIKTHtCYkAbz1N01Abg2gX+VE5BSVRiSbrZFjjMWWJFQHZK/CZprO2juhk5EVBEkT8mjvkFNbqOQ+PblA0KaJx1Fdv4qeGMPF0HGQh4HyFCAphG9Is4WBi2T14kKPJk/zW//EX6D7Q45/9029zeE0ihrcZXnLoTCBSjZIJQRa4REKWoPDI4Em7ls5wiMw1WknM0ZzRjT0Odw8obYMYJmw+cIrBYMD+zbsIozC1IpOr2LCKkYLaWTAJWg8JTgISgmBtbY26rvHeI4DQbmJFp8N4dIBUqp1teGRzk0v9HuBaw7x3+BBwrUWGIPBCcGQdK71efA0hEEIsjXHxM9OSB7wiuIALAiEFiU6orGU8K5nUNfPDEY1zGDmDLU1TN6xvbvxkjbKpKzgxCculJgSJUgRj+fjzH+farV329icIpVBZRlIaOlmOEDDodfE48A34uAhnpuFu5cDKaNzVjPF8RjZYJdEZ1nuM9TipqBtDOZ+R+4BOM4RSbGxtsXt3B5UkSK3AWLSQKER0dQWIrKCqKiYHRxhnkVIii4KRrQhrXQaXV6g+q7n1qER++hGCEmgluREsHZ+QhA7KBhKrWBcdujcDzd2K0a19nn36Sd68eo0gFI11mOAJywUg2i+QUqC0ijcfkDpBaIlCIoHgAaEIWFSakhYdOsHjlafTK+gP+6BBZJD2EopejzztYBtPbS14AaUl8RJrZuy7GXNb48YN1kJIAl4n1CnUqiJ4ASHgRTwtrAgkHjp1BtPHKO1DqDOSTiEJE4mbZFRdS+gK9DAlpBCExgkISkAiIAjwAt+AUSCkoj6cMr6+y96tPYyxrJ3b4NyZLZLg8aaiKyXCBIIHqeJ+1jQNla3JTI3MDM4HQFI3NfP5jKLTRRCQQGWaaFQy4AlLlCTOeoi/e99aFid+uzDIxW+0VMvnOeshQCfvkKgk3tUAmU8YupxgDS7MCcKjdMAR0ASEdwgPqRAEBK6pMc6QdbL7srX7Nkrv7Af/IggIcPfWXb7/3e/T0Qkb3S55UXD9xj71fI43FqkEt2/eZjafEj2MQKff4+yFx/hnv/MHS2M/f/Y0jz78IF/7s+9S1809b3XmzGmeeOwJ8ixj82zJ3s42p8+eYzKeorRGakWudetueFSisMaQFxm1qVFK0jSWJM05tbZOaBwHsxHlyDH7kuPgL95BBI/yFuktBM+R0GjVQzpB4RVeZcxHgktiC3Nk6BcZSgosghAEDk8QARHXPEJEw5RSorWOG4UElMJ6T5ZqukUXKaLR1sYgs4S0yAkEPJ5ZOSX4gC0NftYw3x2z09yFNgqdTqeooOjKFCw0dUPSBOxwgPQdaFISOUUhSbwj9RbnNXW7YOPSCSACrrGk2pCHHl/4b7YR9Tazuzv09TZoDzJFoOInkx4h4yL31qOURGqFdQ6cYP/OPkfv3ESMGoxtWHnkDGcfvsDqu/t0jkrKBDqVZ3I4jvOUpBS6oZ7M0ZnGzsdU4gAfdyysNYzHI7q9btzFgqexDWmaEmTA4Tlz4QJvXv0GF0+dYqMoWJ4fJ7yXe41ULB9ZGPri994H1lfXWVtdiw/KaM7KCoS5RHD7IEsUAWFdxC1kQAZQQhCAVEqyJEFpSdHv3Jet3bdRihMXlbQAxoWLD5CmKdbD7t4e3/rS19je3uHmjZsIIXjhhY8zXFmhLOfR9Usy9qb7rK2vUzUNq6ce5P/5L/8tqo1LAd5+7xpvvP0eOtHLHW0x3n3vKm++9Q5CCNZWV/iFz36Ko9GILM+pq4rdvT16vR6dTgdjDForQvDkRc5oPMJaQ1EUaK3Yv3sXmSqyROJrQ3JFobVmOBhSpDmJStjfP6CuKsDiA3gapswxWnLm4oBB6ZGhoUBTOgHOExD3uPgn508pHRdJiK7TfDolGyQRMJOSotNh9+CA+X7NvK5o6gbnXBtbgneQyox+t49OC4KwoByiliQ6RagCKRSCCmfLaHBC4oNAmJxZnrPrLbMgMHhM8IjoQAMglUTnlrWzb7KRnGbvBx9nPhlxqnsVm7yLSkHLBNkuOLFYviJeX/CeEAJpkOxducVk5xAzr5CJ4vQzlxk+uoVqLJ07h6yXgjKByjmYB+beQabJwgw/cxRpQeVAt2vD+4C1FmPMcrMLPsT4UkqElDRNQ5JkTOdzHjl7mo5W4ONm037gv3yNB9AnnuSdx3uPtTZiFO2KFEGAOQNMAQheEEJ8bnSr45wGAWkS50sISNOf8EmZ5TmnT59huLLGW2+/y7ws+fOvfIP5fH7P84pOwXB1CAG+853v8tzTT/HC0w9xdHiIlIoQJEqmDAddvvnNlwD4h7/1n9Lt9wg+UM1L7t7e4eIDF5BKLCfLe0dV1dy6eZvrV27y+mtvcTSpENYwGA458h6lFNZ6pNSkicQ6i7UWrTVpmjKfz0mSBGMsHk8vy8iSHDMZkZhARykSZ0mGkv7mGgd3x/zU8z/NJ174BEFLGjzT6RhZHVG/9X02msBr5ZQ0OOogqKsabxzBBkS7XhcegJQCrRTRXYprxFiLNYZGSMbTSRsXlxyMxpRNTTy8BCJEn0yg8ICSCYnS0Z0SChkswUa3WGkNQoGUOB8R5yBz3vWCV/bHvGQMMynIpKXvJL1lVswjpSDNHZW5zfr6l9k4M2I+n3L76reYNncRyiFUL94QcbzGBe2mHQJNVbG/v8/0+iFZ7cmHOWuPXyK5vEkpawZThxEepxRWgnfRHxB4BA6tGzZW1zlScwQevMAZh7EWgiTLitY7kwRkRKsV5FlCdsL1bGf/hCGGE5/25CPH3xfBxmIzFVKSJAla6+gIBxc3VR8QcgbM42YdBMGD9QHvlx8PL2LY0jRNu/H+mF2hHfdtlJcuX+bdd6/zxT/9i+Vjp89ssbm1wUOPXWarDWJXVod0ux0IgRe//T3+4s+/zseffZJEK6rG4r3HNA1bZ89y5xsvcv7B83TX+igHQinSYZ/hcIAIxF0QQZBxT06ynCeGQy5ffpC33nqX77z0Mr/6uZ8hIMk7XRwC5aCuDCsrKxweHmCtZzye4tzxtDsXUErhao9IFc4EGm9Q/R5WBXyo2RpmqDRw+YnLvPDXfgajBSJLmE2nDA4Pef2r32RjdISvMxLh8SpgnQUbEDYgvSA4G+Oc4FFakKQS8LjgUYmO1+U9RZoxYkIiFalKqBsbYz5CuzuLNlECQQSc9AQFEkXAEULACQ8yEKRHKKhkYOINSmaMCs0XD2e8XJXcQuBDQOM5TeABqSm8B2lBpARf4wKEbIpS3yUtLOS74CukArTDidDOZARfBCB83GmayZzJzbuIuqCzNWDz4xfxgwxDhRMBI2PMLYJAuYB2Ae8FQUQ0vzb7SBlQXpHUAm+iwQZnSfMChGZe1gQkXmiSJCOknlk5InUBGRabTODYdz3psLZGGOKGefJXAVDi+IGFcTrvscEjgotuch2Q2Wt41+CtxAiP8Q5jPR4ZgTsR8CKGM3U9QyoZLfU+xn0b5Re+8Kd0uh0+8cnnefrZJ0mThMGgh5AS0RpN3JjaU0IInn32Sb7zrZf4/T/6U/7hb/wNbty8Dgk47SGRzOcl6xfPoE71Se5McQunSIDudpAIzGyOODlxAdIs45FHH+btN9+hO1jl9rV3uHjhPEqqJfSstSbPc+bljO3tbZIkQSlFnhdU1RFpmiKEwhnHYDCgahqQAZXIGFtJj9SCuinxCrwMIDxOgRIS5QPCOTQW1d64uq5x1mFqg1AxfSQ0aCmRMqC1ZG1thclkwnB1hdHhfjxFRcxOOmsRIp5w7bKI0Z4QyCAQcZsmoomLU+CEuwVYbxFKIL0H53FpwjujMdvCMVcC18T4rEFyaBtWU01HCqKLbgneoZMsgp24eDq0KYXFphCCQwQFIRonIZ4OECi6XVbOn0aIhNMXz1IPBVZZ8BGpbJdGfO2FgYh4jSCYz2fs7e1Cv4Mxjiqr2nhcsX+wj9YJRRFwzlE1BuMasjSnKFLKulnOx0ko54NHNNpwz8kZ19/ikYWX0zQNQUtkMEgVME27VQoikIPACnCLjXPx96K9W96jdRJP+/sY922U1lp+/W//KufOngKIfryIb8iJ+Em2gW1RFPQv9PnsX/tZ/uD3vohXGYMip6tAlFNk+wFdcKhBAXcnhHbXDQFqPMPNdVSeUh6OED4ggohnhxAMh32stTTGMhqNmK6tkqQJTdkQgOl8hk4T4BjKXsR6i8+ptUZKSariqeXbazFNg2sMQgjm8zkZklRIpErx2pLkOWmSgg9orcjSlAdOX0T4jKODQ4RSIAVBeFAtiGIMBHj00UfZ2dlBIMizHBFoYw6BMxat9II+cGL2PwikCMvfLNJTEUgSZFlGESDram5nCd+sDnmnLBkFT6gFqZfoTCMBG3x0d9t7fDQa0WQ95JGik/ejy+wdPjicC1hrwHgkAZWcWD4hxEWYKjYfPo+Xnlo21BYI0c30eLwLy3ym9x4hVARP2jlorME5j3Ae2xgmk2n0BJyjrus2tnaYpsEag/GWLM8RIgJnH+SmfujR/qlv14rWGhIV3XYcYE76LiBO3K0l4B5/m2U5ZVnGdN5P2igBsjyNgIUQZFnK6toqSmkm0ymTyRTvHWdOn+bU1hYAUgnW11bjbnN4xIWyYX3zHHuTI3pNRb/XZfe9W7i7o8X2CQikELjaUJUVab9D2hjstERrhdQKFUAn0eCSNEUnKUejMVqnVMKC0szKiiLP4k4oJAiJVBrrPDpJEVLhfCDTLdASJFIqnI0u88HOPs467uzscvXKFXSSIDsZ86ZG1SYmjX0g1ZAlEpsXVEcNd27fZudwnyTP0IlEKOIJZy3z0Yg8S0l0wsH+PrYxICVKSlKt8M6SKNUitycX1XGOLfg259bGdQFQWqFUazze0zQVGs8NkTA7qnjTQuVAIcgI5CKQAEVWkFmPlIvpDxwcHlLpioPpAcPeCptbQwIVQtiYlzMGadoNTjiQsj1BwUvwIm4oQXqkCCReRmBLtuvVgw7ggscGRxIUCkGQkkp4bmxv4xFoF6hmJaZsSLRGCUmqNXmWYZoGJSW9Toej0lBJj3EeS6CsawCev3wJiC7kcWLqww1BNEipZBuGiBbIC8jgEMETMV+/PCGjSyyXbxhCoNvt0V9fXxr5jxsfyiiVkAwHA0QInD13muFwGHd459ne3mZ3d4/Tp0+R53nL/BEsCBb50YQz167jheCU9JS379DPc7ZvbcPBnLzXJ02zFu1y1GVNM56hspTu+gpHZYUUEdcKwfPoYw/zlT//Gm++/S6pTqiqBp1mGD8lyTJm0ylBSHSSIpXGBzDWkQXIi05Eja1F6wQQ+KZBKR3d3CC4dPYCNxykWc5Djz2KSjQNntF4zEZj2e91kXdBCU+WSPYnM1aLFfIs4+HnnqI/HLC6NiTgccZQTia8+eoPeP3VV5FAv9cl1A0iT9FSRuDGOLTS7c08iXgfx0bx5rcngjj+bdzP2l07BEazKS/OZqiQYgGcpKslK8OM1X4v7uIW0qMZqrGtkbXGGTx1bThyRwxXJYia6JwJgncEL8EFhAqE4AkEnGgBj9b9C9LjFcgW/fSLD+kCWI+xFt/iMpLoms9cw91be6xvbdJRCfW8xBpLp9NhMBiwtrpKlqQ0TYNE0C06HMxHpIMeLgicFNy8cweAh7Y2l3PzoQ2y3RC9D5GoQIjhCx6lFYV1cR6cwweDJ+B8wAWPB+KMSAIC6xzGB3SaMp9N7+vtP5RRAiip6BQZnaJAKdmiSrC1tcZsOkLr6NaOjo7Y3d+lNDHXKFxD7uZEgligpzMSqeLa8vDApUusrq3jvWc2mfHmm2/ia8P8cITs91FKY+oGYSwQSLMUgGs3bvBLP//TzKYTGtPQ7XYpihwfPEmSkLZ8xQVN6iQ7QylFkiTHjzlHUAopFWmSxJi0KnGJgjwhyEBoUnSWkK70MToijkpKtnd2mYUZDz0c00TOe/b295EStBT4lqrVNA0iBIosjZPfuv6JSmiahrzlFh/Hle9fMItvx8tNtKeB9x7nHFLEJLiTCT5kaCGRsqHIJFubK6z3Y/I9jOeY0Tgin6LlHJ1I48T5iidzzFNrpGgRTyGXn2VBVfO+RZalx+EgEJ8vNTLRKCkI3uKta8OImNaI8R00jcE4F11xFWNW5xxCCKy1dDvd6AKGQF1VCJWiE02Spbi5x/toCvB+gsDJf/CXWulR3fDGteusrqywt30XYwydXheZRuTcOYtzluDbDSnEXLJr00H3vpWg1+/z3s1bpMby6DNP/+g3PjE+ZJWIYDyZMBqNMMYgAmzfvctsOiVRmizLEATmsylFnlHOZjSVAaCWgUZJZEiQViHHE/7Gs8/iguftd66RZDmJTphPZ1hrjkPuyjDfP4yLGnAi3DupIXDnzh1u3bqFVIqqqWnqhmZeYpsGIWhduxasCIG6ZScthm8nV0pJlmVkeY7UmqzI45kkogschCIoBUmKyguCkIgQ3UIRAqE1JNVSvWIezdEYg3GWNMtIlEYGEU+aILGNxVQ1iZA4a9u8lrzn+n4kYBGia6yERMnjXK8QgmHW5+LWRS6ee5CHT11gZdCnW2QkWqOVQBPQIqCUWBokogVd2nsd54aW12uRQqKkRuu0xRREy4HWJFqTJZo00aQqIVEJUmgEcZOTUpEoTSLjOWBtPHmNs+3pAtY7pIzuYWNqnIsnTpLm1LVdblbee0LwONtQFBmzcSyOiCQDTnz6uMDFB07fD7u1AmicYzKfo7WmnM3x3pPnGXmek+cZqdZIG3Oji68AGO/aE/LEi4WAVBrnI+IePpB++cPjQ52UovVF69pQVTUbaxtYY3HWoZRCK42WktFsyvr6GlmqsDaelNpDJziCMIBDOsm6ziDAfFbSVBWuY7h27Sre+ei+BYl2IS74Nu6In8DT6eacOrPF/v4BG1s/zd7uLoO8Q20sKoAwhkR3Kat4o0KI+TBEhOR9sCgZUwqLZehcZP0HralMjcpSaueQQaKJhqbSFJGmrKyucSAUSQikBLT3YA1CBIypkULHWG2xYwtBkqUoqfDeYCpDpyjwtmFvezu67iGQ6oREKWpjj+8tMeel37+42o1EiUj6XsQKjTF4lfLY+QeQViPclCYcImykONZVQAfIhSQkCdnEUCkQKiznRwQBweFdPAt98HhsPBG8xtt4OiDbdSFjGgBBBM1CwLV4unUBZyMibUuDIBIV4iYLXgkckeoXPPgQU2cOgQ8KjyLJUirj6HZzZvMZOIuZz0nWCnpZHz8/JoyfHDK8/2AU7T53r2O7+Jc7Efe5EDnKQkiCa9FiD6mNa8W3uUjnY1TpCHgRaXuL0NKGgAmeNFGg7u8M/FAnpRQCqTU60TSNQWnF6soq6+sbWGtJ05Qsyzh95hRZEUnSD1y+SJJovvTWu+j+MLprLZT+mLBkScLbb7zD0eEheZZy8fyFluuoEUIjRBIRunZXFlKAFEgt6Q/6TKZT8rxYupxbp06hhEIK0FpFl/QEiqZUZO649nHvPUJGt63T6ZBlGVIpatOQ5Rm1aXDWoYVCtkn5oDVZnrfukieRbU7SW6SKiwr8CZ5wPIWk1pH/SmSneOdwLlLQWDzXeqSOe+Xi5FsAKfcsrQXi2p7KJxFmgPFkyvUbt3n3rfciyybRMZFd11RViTMGoRTZsEfVTWgSEa9tcdq27+uiVcZY0zvqqqGqGuqmiQT6uqZpaowxeOvwNm5scWMVKKHRMoI5GoluEXZk6120p7MXARcCznuECOhEtQYKAUljLfuHBzTWRjZUsExETb7aZdgf0jTNj6jEWBjfyXMxHN+bE18hBL5/8zYhBJ554gmsNeR5jjEmutbGxAqdEONG15YDurCM8tuwObr9kU0Vz8+8KCI3+z7GhzopF+iS84H5fE4IgdNnzmBNw+3bOyilqKqKu9t3GQz6dIoOnaLHxQtneePWbeZPfRp9uN++mkNNduhkKYeHR2RZQlXVlOU87vzS471oKVJh6S6F4MGzBH2AZWqj1+8jdMLk7g46SUjSZPl3QsQKDe8CqnW1vXfx9drFrLWO8DfRvcqLSNdzxqKkRMsIdkkpSYqcllRHqhOCi64OAoLz8H6qXQhoGb0JKSRSyEhLa+9mCPEmG2tI9ALsOZE3+xEerPfHrvcJNB4hBAcH+5zbOMfq2hpra11uX3+P8mgPX1tUR8IgY7i5gd1ax+8fsrM/ws9pwd6WvNC+/mJ+FpTIJElQiQAZWStBimVqILQusQkxPkylJlMCqSRdxfK+Ld3kE/lCrRTD4RCIMdyilG02m1GWVTR+3z6OoB7PELMKW9dtbePJxcoJVL8dYmGD4Z6nLcbuaEwIgSxJ6LYAU/R/Q7tWYgTt2xykFycMfDH/IdL/VNaWbAlBt9tdrq0fNz7USbnILTnvmZcVjTEIGdG68dEIQuDGlavs3rjF9vWbdIXmlM74xZ//DLOq5nf3DZXK4mlJwO5e59eef5rZbM5L3/keHkuqFMM0YYhjVRo2heO0hrO55FyesKIzNJKeUjz/9GMAHI6nDIZDACbjEUFEN1NKidIKrROkVBAiQKFkJBZAaIEMlrkwu8ifOkeeZ3GXLCsO9/bZ39lhPp4wPjhkbzbGJhLlBR2pkQG8FNH98YHgF6yXdnGHgBaCIsvaQuZIqBZIukGTBhlrU0Mg10mb5+Qe38t/QEiyXAwi0vgWm5VzjouXL/Los48iixyR5SS9PlZr5iIwDp66k8H6KsnFcwyfeIiLzz3BmTOn0UIgCcgQWkAjGn2SJOhExzBFa5RUMb+IaNetWGbMhQ+R5WMcGEewxz+XFETaFEoAGwQCSa/XQ7UItGg3GmNi7jK08xp8ACeQBvxoDoczhPHIk1zjxdy/38U4YZAfNBZP9z4ChfH0jbB0QCBsRFhN8DTeYjmutAkLMkULeCWJxre1n0maLrGGHzc+HPoqQAiJaI/txhnGu0esDldYX1unnM+woymnQoaaOgauouuhe+ES586e5QsvvcTf+PzPwhsvtTuWJ5fxRGnKilvXr7LpYCV4SCOzRkmJ1gKtoRKSq85QIci14JFLpwF4970rXDq3SaI0h3v7dPOcwaDPvCxJ04Rur0tdmdbgDFpHqFtphYjMN1i4lN7T7/ejq0IkFBzu7XHu/AWGgwGpM4R6SrrSw8hAGgQdlaKFwmkVX8PEKpUQSyiWO7H0kCYpVkHaorZ4T+4kWmhmOnIrU5Us/26xgMW9gOu9C6k9yVQLPIkg2Nzc4OyFUxyVh3jnSBR0N9ZxNBzu70Kvi+92GLcMHZ8lbKyt85lTZ/nuS6/x5lvvEIJdbCn3vFcgRFfVx/gztP6tX1yrFARFzOdJiQyRE4oI2KbBGYeSCuMsNR5nPbYlPkRmVIXWWYw9WzBFCEmiErRKcDZgjSc4EC6WnCkXkFIti0FiIZJYug4nHNflaflBE/pBIO2JFDq2bqitYd5YbEsb9LQprNbghYwxfpblVM61QBr/vzHKpN+Ffo6oDEpIjDGkWYbUcfGVkyk9AxtkeB9QkwYpAx0teeKxh/njL32Zm0LxsIgRshOBR/oFAjjYPWC2f8DDUpEhmStLJhxeJ0wIOCOYeIsXjiJL0OrEJiiIUg3W4Z1r0x0S52NFC5TMZnOyLKFpDNPpFGMrNrfWSBJNXcUT3znXurUeby1CREi/U3Q4e/o0VgrypkJ2E+rzZzjKCmzVtIimwolIMjfGkLzfek7cbSdiBYKUYknPFEKgk4SqLNFKtrGuXP7Zj8PtFidyXMiCc+fORxkUH40mCBBaMdjaoLvSRyuJSlMMARGZd0xnU3yQPPLIBY6Otrmzsx3zVcdvcvxPKVFKQFuz2pZSRm8qQmmRrUTLffEeoRRNbZk3NlZ1WEuDx1qBkxKPwppINVyMk+GHUpEkIUUkgJ888BbI9/sri5au//0Bnyf+MDKjkiSJOAaLeF3EOFEcOwYn79FiczTeUeQ50/kM76Oh3q9Rfjj3NVXQzVB5lH5o6obVlVXqxnBwdBhh7hA/6ER69pRjm8DYwUMPPgzAn1+9ueSn6CB4sJkB8PKrbyIdJGgmQbLtBF5KSiRXZoG3Z4Kd0rGeF3TyBHWScR9gNBotS2zquiF4HyH4JImnk7WUZU1Z1hE9Lus2R9ZOhJQxRj59KlZahEC/30cLEV1c0S56H5AiJVnZoEhzpBAUOiFtkU9rPd7F0wpYxhvL06ZNnbjgQUQ02REXdKI0Jrjovi1jzQh0+DYl8/5xkmAgEMgWBS+KAu8cSohITmhj7CQrKPp9sk4XkSQxzUMsCPc+YEyDVIIHHryE1ierC4+jLxFaW/UC4eO1SqFirWiLbi6rWxZ8V2LqCONorGM6r2msx7kYEiVZxsraKp1OQZaly+NJCdGmfdrYNbSoU3vZi83Ie/9DnuriYy/ivKUVh3t//0HxupCCIs9J2zBIa003L8ikRiNJdEwDJUotCrWOY+T28yV5jvci5mmFRsrkAz7gD48PZZR2WuIPJriqppzP2dvdZ16WXLl6hXldEoRHCrASDpRlW1smCgqtkbJN0CMjk55AYsFzXGOWBhAEZlIzUilOJwShMTLHJBpEQh40KgS0Oq4DDCEwG89oaoPWOp4yAeqybJHDiFQ6G9qK+6h5E7xgNi2Xd0cpQW/QW5L5hysrpEIxmc4iRSpE0a2Awnc6aBkQeE6TkKrIeSlLh3UC6RUiRENfgCUQ+aU0ts1/SmSQWAlOQpGkeCkoul3ypEAGFQ0SiRMSv9iZT8SRLD99PAk9AZ0m5FmKbWpSJekVOb08jzk2naBUilQJEA3JI3FBUFYN48kUYxq2tjZYW1lt3eEAOBAeKWPBgTcR8xetdoIUrYpCkIjFB118ME8ssEaQeJBpRpoXJDqLaSnhmTdzbu/foejkUajMG4Iz0fU1DYmUDHpdwCFEpAZmWYLWEuMsKMHp8xe4decOa/0+F4aD9+Gt7UcJSxr8D8WbIcgl4CSFiEoIuPYORGJC5jyrTqATRZIq8kSj5LGHEFo3Xqg41zrJeOjhx5iWhr2D0X3Z2YdyX3WaoGxgPp7w2//qf8Q5xz/6x/+AlZUeSZB0UHSR5EGySspYebIAfSGZHR0C8ND6Gu7WLUCSuZjHWcQdG0rGCxTiWFBDSMQioGoXofIetFqmAUIIFEXBZDolTdPIjVSKNM0oipyybBgOhzS1xXuo6tkSKV0wRrwPCOFx3qHThNIYsiwmja2N7la8ZZHPaVWXo6JgnNXUwpME0EIwnc1ojKNpDFrIGFt6DyeIBXmeoyToTkaa5oQ0Q3Zy0izFK03SH7C1scHtu1FdYHHShEWeYrmI4v/4E0YfQmB9fR2lFOODA1ZWVsjyrM2itz5fW5TrvCfPMpwzlPM58/kcYyPJQUrJxsYG+0dH8T5I0Ikky1J0GtHuRCsgppSCEK0STkx54SNlMBpqJG/rIEiFQuk2zRVg1lSUOBwOGxy3bt9isJLfI44V62k91h3nIr1vleREZGW54Ck6PXYPDri4ucmwFfKCBe1tgZueODGX0xmfaUNgbzRpT8aEppzF1Fnr4vvGkFrPMOtQK0cTojCckvI4h9T+kFojpGBazmm0pr+xSdHt3Z+d3dez2uESybic829/+39kPiup6or/5v/2r/inv/Wf81B3SDdIchGQHtZFgpUG7R3d4Pney68C8JnhAHfH04TIzgm33uPTj17mW+9cYX4wIjm7gZGCSNgU7SnXyi8KH9khpEydY24icupD4OyZM0wmE5xpKPKcXq+H9zky0VTVTqzjbMGb6D46Fp5QjFuiv7i/v491kdFflSVKSl577TVWV9fI8pTbBzu42mP297iZ5Ew7fa4xZ14kbK5uMZs27O/vUZsStI/UvOAJxmDH08jhXF/j+o1rbJw7Q6/bRYZAIiWZ0HSFovKClbU1bt29e89u//7xfvrgwvhTrfHW4hpD8A5rDGHhcwag3SisMSgpsabG2lgQ7mwLTEhYXV3h4Ogwuo9SkCUJqY5pJikkKsg2/mtjYxFwSC5snUeRcuPKXe7c2qbb6/D8p5+kyDUH73yHRCZLoCXTCXPpSdKUzEVSR5omBG+jV+JivjnYmPvTWmOtayl9bWF2mi6FtH5ojpY/j4vLjz3WuN1FQ4XSOl56+x3SJGG0u0uWtiJcIrrRMgSU8aQhkiWED1jnWnLLifdsb5oLgfF4TBLg4WeeZXVj877s7MMZ5eGUL/zxlznYP+J//4//ETuHB/zz3/43fPmr3+Lhz/8CJthlamgkA1Pl6fi4Oy0DcCXaCu1ABaj5hGKwQmMdd6qSx7xAi3Z3ExobJB5HkBorLNvVlLmRBAlVcxyn7W7vMGvpUbvbO3TShNHogGFbpeK9b13QE3F/OA7AFwu7qStQijTRmKYmUYpXvv893njjdbrdDgfTEcELlPfo2mBTyV4dCJlmOOzjzYQr771LkAFdaPJORvCORErCvCRF8vBjj5CkGUEqRJoukdbo1seF6Ft3McZELarKcT5MypjnXEgqOmMJziG8p5/l0NS4qsRUNc7aaJTECxdtKii0G5Ug5tXqummBikg+GQ57KAEEhwwe4UF5gfItIuplrKZv3T7vHOfXz/GHv/cVbt28fc/a+c43XqLT7fBPfuNvMH336wTv8a6VbExS0jQlJ7qkIUQGkRQKLwRaK4yNOEEs9zpZgheBJussx4JlC/9igbT+MP3tZHi5MNBFzhpigX1Te9IsOVYMaIn0pVJRj7d9gcXmDuIY+JEylqERSHUs5Sub+r7s7EMZ5fb1W7zz5rtcvnSRsLNN3zQ8cP4c3/jO9/iZTz3PSq/Lhlf0ZMKhMIwF5O2ht8ixeSmQROlBLyWaKAYBcAhMvURKsAImKOY+YCOHDOlA5xq8ZbPXYTfPlxOzvrLCzuE+/VYKUgqJMXbpni7YGwuKlQ9xglMZ3QylZbsbx4oJlSrwHi0lZd1gnaWcT5fv13hPLRRWBaxSeGMwZUmaJFw4f5aHHn2EzbObnLt4jls3byCCR8xrvvbnX+b1N96kbmouynjKxPspsLSumggtwhd3ELFIeRBdpbquIxLZ5vGii+Wo5nNUCKx2uxwejhDGoggQHIuyI9qcmjUmFu+ecOV8INZJCk9o5syOxnhnUDLgnaeczti9vc3K6hApFEFKlJIgY7zbHwz5j7/75+zu7vHYow/y+KOX6XcLnHW89ua7vHvlJv/q9/+Ev//gQxzeuBbrYZ0hBEVZllQIHn7oMuPpLhDTS1oVCCmwtiFtSwejhxCpmHFTiuksQsvoWUKu4YTRHSOlMb1xrGJ3XGx9bLzOOvYP9xmuDEjThFQKTG2hnBPqwCBNMM5QeYsPrr2PLbMnunXsHuzTWEM/TRFKRhrifYwPZZRf/8o3Afjcpz/F7PAAZxv+5s9/hv/6X/8b/v0ff5lf+vxnGPTWMFLhg1yGMDVgvEdJiQwR4IiZnMj8yFr6UQlcx1PXlipYvnr1Ng0BS5RSyIJnXiSMTM0t4N2rsUxHSsH6+gbF9m3SNFaPLISz4u9bfOw4/xBFkZwjSiVFl3Y6jQW1eafHdG/Ol7/8ZQbD1UjVOwn2Blo20OLl4kK5ffsWPiQ8dPlhVldXaRrDzs4OWZ5TTae4Nk6dbN+J9KwTDJSw2OdbVFacQJcFtC5SwHlHVUVmS1jMqZTgPPVsxoUzZ/DOUpVzvIsEb/8BsahzfhmLLjYs5z1lPSPPV9jq9Wl2RlHPt63MKWdzynLG7s4OQigSHVMGtWlQWnHx4gNsb+/S63X4/M+8sCy6VsDWpz9OYwyvv3kF+/FPMHvvrXhSB4cPMfY2Nqo3GGOQIlaN6Dyn1+symRwtBbZjNUxU0tM6qk04a8mLLgDnNzdOyIHRIrnHnkI74bxvWtivKqyznD19mul0ymQyYTafRH0lBB0PWyLHusDcBLzwka+7IE8sXz5QNzWT2ZQADIaDtqjh/vIyH8oojw5HfOZnP830zh1UEyfO3bzJL/38z/FHX/4L3nz9bYb9PoKWfgSLWlwODkc899BDqJs3MB4IDusFOMuvPnmaL778Gn/wB3/G7Y8/zSsvv8ZkMuPocPSXsi8Azp45w1q3z+hoxKA/wDY1s/mMxhg2NrdorImLtj0hjrfLKAUog0C0tMGqqsjSHG8d0/GEqmlI0pyg1BIQCC3asqBqxZ8xJWCtRYjjhW6NYzqZx83BRwFDoZOY4xMiVtKLuL8uLzNEmUPJoqypvc3tCorlVTHFsTBWiBtPJ025eOEC5WwepTXzHC015p60BktBKAhxw2mr4l3TUM5mlNMpKs84t75KpjRlkASibEme5Sglo1G2qobeOhSSejLl2aee4OVXX+c733uNZx5/mE6exk0Av0xBWefwwS+yTC2rL57iR6MjLlw8w507O1FMG8fq6oCDg23SLG0NM1aJFHkRebiVwbqAbcsEDyYTvAixeoeIcS3ZUC2DaBHTnpQDeWt7j7oxnDt9hndffR3RUjqRreSHA5HGe2OdI8k1+OhFsLw/7Uy36UEpJd1uFxHCDxcU/Ihx30b5sWef4dL582zfvsmV/QMeXd0AZ3FJgnOW3/i1X+XFH/yAq9dvfODfnz97hr/3zDPkd25TCk1wFSooVNB0Xnudf/Krv8y/+IMv8Pv/4YsIIegWBT/z3MdwMpIMjlOKcaEKIcnSnPNnL3LlrTc4PRxy+cx5rt+5SafbJUjJ1umz7O7uIOWME6B4XMytnyGCwBmPEppup0eWZqwOV3AO1k5t4oSktu44Wom+z/GNDWCNR8qE4FtysotykEKp6BG4+F5eKkizmBsMLtZWiuMFshShCnFBeWOQSXpCb0lGI3SRUZOlSVxwPi6AUxvrDPtdDrf3sE2NyguUTltlebekFC6S3EmSYHzLHAgC31h87RjvHtEUGZ3ugDMrG4xHt/FSoJVm0O2jEx11aJ2laZrIUjWWvbt3ePTRx5FPP8W3v/cKV6/f5m/+4mfIU30c03KcYBchClUJJUArEg+z6ZhO5xKCiIYL6SjLCXmRkmVpdBGdJdIUA9Z6nBM4F8W6AcqqboGnZQjZbn7H7uzxNuVP/HuR/Ix85m5ekGVx45EBMuvRtUUJh1SKouhQziY455cFziDAB9IkwfiAEo5Op0MiFMlPWjhrrdOhmkwYdLtsDFe4MFxlPDriqCppDkuuv/UOT124yF//9E8jtcD46Gc7FVXKmJU0dw/o9leYTfdxdQAfVd983XB5+13+q3/0n7F9OOKXHtwiVQG/N+Ire4d88+iIWdCAQKsU4RPybMCTTzyL7uX0V4eM7lxjKBy9Xi/mKoGj0Yj19XUODg7uuZbFqSd8IGnFtgRRQcEaRzkvwXuOjkZkvR6eY2GwOGQ0ylbBjfZs8/6YnOyci1o9ixsdACmjyLKM7nPTNPi2YPGEgsTyfXxYiAOL9hPHX0RFQBPfVbTJd6U4tblFOZ1hTYO1hq5ui8N9u4iBRWHuPa0nWqU/GQAHB3v7uFMr6FQw6PVaEoBvjUmhgsJYgzMGWsVB2YpL3755g0tnz/Oxv/u3+KOvfov/8MWv8Ot//dN0utny+lKlSVu+cAhQB0GaZQxTRWnmTKeTVtpRkSSKspqzuhrBQGejhpLWUf4kEQnOxsZC92Kgx1O/DDEXtyKcfO4HuZRiSSZxbdE17f1eFi4IwXw2wwVP2VSYFuEMIWYVRCvPImX0KBKlIhf4PsaH6CVSMJ1OGY8O2fGGvWqMFIE7d3aYzww2wHg6YX9/l4tnTtERmswHusGS5JqhU5zSGVp1UConiBLnS0LQBAJdX7Exvs6l4Nl784DbCIxPuV4bGq9YVF3UdQUu6vd8+9tfwymB8g3rnZSbV69x/vw5XNPgTIMzJhYNsyhoDSAFGoXzcunJxpNDxhhGGY5GY5wPNHXFqV6vvUEQWvI1iLYAN97syLk8ljZcENt1umDELIwqNqSRbR42Eq1dq/nyw7voj0yFLL7ahLUQgiyNOdVyMsaFCNVHDViiYFU4Lg4OC9GKEPOmwYVYttW6wmVZ0+v30Gmr/dP+hTGWqqrodbptnHmclqFNLVlr2bl9m/neLr/wqRf4f/3Of+DVt6/yuU9+bHk9iZB0dbwv3oE3jtl8xsRJskIzHo+RKiK7sfzO0+l2YV4za+YopSiKIhZEiGOq4kJKJU/SY0P8MWPxFB8CV3Z2AegXBZLICXY+EEI0yljdEwWWuzphjmVSz2K82CK8wfvIzpISbwJJoki0bimTP2GjnM9r9vYOmM2meN8wKacMB3366+t0+nDnzjZNbTjcPeCUznjh3CU2bGCttGQeVgyUWjNtGnSqcfNwwp0STMvAG9s1O2RYoahwuGAxgJc5wTVUZcV8XuKtb0+amFO7fOE8Kihu3bzJIM/BWlxdU2QZ+zt7KClJlDpmQClB8PEUkyqCEbhI0WuMwXlASBpnUUIhVIILUe6iNeGWj9kmy6WOQlytWrcPDusMOiTLFNHCcYoxUdytTUtcP8nXPBZvltzLR/lgEw3t5+jmBc5ayqamMg2H0ymbF9KWj3qvUR6XIgVUyykV/kTtZ5BkaUqCxweDkxCQ2KZhPpvTzTtLBBsp8a3Cu2xzltY5vNOIuqRTFLx77Saf++THlhaglCJT0ShnIfKZvfOYEFAeDg8PUSrFOUuaapTWmMbSHwyYzSuEVMsNIirZxddt2pPolz/2DIlYkN/ub/gQeOW9awghmI4PSbQkyyMtToi2cVKQiKYhScQyrx0WBFjC4j9oifiJ1nT6fap5ic4qgjT39Vnu2yjv3t1lOp0jgDwt+Knnn+WRhx/CGMd7V29x89Y2LoB0ims39tlSHaq1Va5noLzldFeTOEfh4g6kCEjhQHpEUFgv2UMxyRI8FhtUlFFwHm8d8+mc0WjUupbHTB8hPFI5HJbgLePDQ7JEI7zDVjWj8RglJUWeM55MWVTRO+9orEXpJMr1Y8l9QVWbqJinEurSYY1FChU1S1tgJ1YuROMSEqT0rThXgOBxzrZ8WVgEN2LJ1wztIlrkxcQy10h8GDiujvigcZJQEIiV78Nen6ZuqE1DZS0yTRmurWGcaYGkY6JBNMrozroo8X0i1SAIIaY6pK0x3kSSBxKFopPlS42d1rQxNoo+64XeURBY67h77QpPPvIQL77yKnd3D49PipPF27BUgA0ilpw1TUOiY5VQICLFd+5s8+BDD2PbfLPzvt3wjsMDa+MmnyjVxubHE3W/xgnRxpSEPM/ajSqgbUDaQKIkWrbpjcCyKmeRSVik3ZI0RTrHfDbn1R/8AJ9kND/mfRfjvo3y6PCoPR0CSmWMRxO+973vM5/X7Owd4XzkRFoBExn45uQuO1s5RdoldZJ5mqHKGY86wUqWM2lZEl4sYiVNIEeQtvVofqmVWc7L2Huy7a2Bb2X+WoOo6pJ+ntLtdYBAnqb4EEuA8pYyNpvO2p3z3rjPeYexBq1TtPIIYXEukKQqSla0k7yoVICoSXOc+2x7d7bu64KEsBDmiieUQIoW4FALI2wj2yUqGB8SrYu8qIgIbR3f8Whd4WXlQtyg1lZXaZoGYy3jyQSEQki5pIktFxwnECpYItGLYY1FyWikdV1F6Q0ZEeZEJ3Q6nQjQyMgGtdYsXfcAmKYhKzqxasQ5UPH0t95xZmuT19+5xm5dkbWbkm3d6AUQtLg3SZpQFDlyQe5wnqZe9Kd0S7qdUqo10BNA0snZCnwwUf3eab8H/BGpImiJc3Zp9EKwbFq72NysXwhohdYLi+wiY030uuqaYtjj/MOP0F3foPlJty2I0HAEb8aTKd99+WWCd0gZeYwsFqU0dIY5Tzx1ESkTKuExqWafQF4k+EaimiRW8AsZDTIIEl+TiDmIJJIN2oYuTROT3NYYkkTTKQrms6pldkTXd0E0f+DSg5i6XoooFXlB05gIapwMsk/ki9I0pZzNI1cxHC8KpRQyRKaMzqOs/sIogbb28nghLRrphsBSakRK2cpiLBQIImp8Tw5StKKry1MknhhBLiQfT7i2y2cdn5USiZaCvCg4OJhRlQ113TBYWYs6twsGzOIVApxodHJiAcc407qaDE9TOY7GJdPpDC0kNsRyOKViYXOQ4BsHzpMnSdQeahX7tNZITvJr4ttePHsKrRRff/stPpukUVitBctUO7/nzp2i002pK0+SVvQGffr9PtbHOTbGYIxnsTl2u13qqv7RR+H77SAcF58v6HWLe7NcEzqNaayTf9tOvvOOWTMjEKglkfxw4n2EkKgkxThPbR2bK6ucOnOOpN+nuc885X1XiSgkWvp24SqckDilsUK09LC4222eWuPSpTP0ZcaaTMl8wEvPnraMlMA6TXAiVisQBal0kBQukPooxy9CJIhHKudisQaEhLyT0et3yPO0le9IaWpHOa+5fu0GV69cxxjDjes3ODw44O7tO5i6RTlPoHFewLQqY5lTnscqABm1YZSKgbtoDUyEe+/Okmsaonsduz0lS5fzh/ViwvKngPZUjbm+WF3fAkgizmGQniA8vv06WdPokThkjGU8yBDo5x2qpqFqLNN5SQiCLO/Eqv62tCpeu0eKtplOiOT62FgnNtcROIQ0PPjABbTocOegoqodMliUb1qPJrq/SgQUsaQqUbGriZZtr9Lg4nWIE1ceIpL76OVLvHXjBt2HH6UJYHxENXXblOmTn3mMT//spyjrhslszqScMavnmGCYllO896RJTqfo0+1GpD1W4hznbBdc1JP1tssq8cByvmPjJNEq7x/fY1MbEqkjs2qhEBE8hIhzVMFSBUcdfCzSbnPyHqidQWYZcx+og6S7sgJKg9S4+zS3+2+vruH02Q2OjmZM54YgIpq0EG+PiyqQdhJW19egMm29oV/sSVipol/tPMqzhMQFUbRXsUikh3vczKVWTetCihP/VlK2NXntTmoNK9lgeVIlSRJlI7MU2QoZLcp3qqpCCCjynLKax2sJYcl1XOSnZNsr5djtPeagntyiF59p0bJtcWK7INp8YrzYoigiT3V5Pfe+ToClBoxYXPvxWbfc4X0IyKA4c/oUxtTMqjmlaRBS0l9dadXLHWrRkqEt0oz3I+b5RCvpGNk/8MLzz/H8I49SHY4ZVxW2XW5S+DanunAdWyU9WoFswhL8Wp5CJ06g6C1Ifv6Tz3Przjb/8jvf4H/20KOM3367LViO4cTv/s4fEbzCuzSmG6oKnWiMNTSmAhFVI8bTMQFLr9dpUw9t8qitH/1xZ5Jggc8s2Dji5J2M3o6ULfdXRKPE4XFLuUgbRIxxF/ctRO0gBDTeEZSkOxzE9GBwFN3BjzMz4EOclGkaeOThs2ysF0gVQYx7qrxFLN9RWUZIVDwFIzsLhEAKiVOCmWtIpaKv0nuoUDIEVPCxU5EUrcRCi/CdxLdP2MLilosQk7WJbr+SFGsdC35xlmUURbEUfdJtEfOCWqZaOfzFKSZawGEpOdk+L56QxxuFYKF7uqgmEGxsbJDnObLlqEYltJqyKinnc2azOcOVFS5cuHDCID9gLJLdP8RoWpplnDel2NjYYF6VHEzHGAEyT9k8vUUg9joRop1fWt3uEOdMBBd1eETAOEu/22NzsMad67fZOTqi0RrfuuQnAanjqpQQtW1bxYflbWpj7ZOfPYQYjigp+JWf/zSTcs67EjrDYQvmuIgl2A74WLoFsSTvWF9WEbxvmzOJpZh2CHDu7DleeeMtulnGJ86diVP4Y9b0yRm9Z+qJMp0LN3d54IZ7n3UsVr285EhFEBGBlir2mXHOoWWMMe9n3H/TWBfoqsAgjzWPuOML8mLhBoW2QUtE60KEJkHJVg1O43KBnXiydodaeBUqeApj0SFQhUhnW6qFibCMwxYlOpLFTV9oc0bQp1NE5LWuoySgEKItw4rdm1xzDBIsio8bE1vARz2gSGQXUqJri6miQJhf5iGP48pFcB8XfiBJNGfPnuHOnTu8++47iOtRvVuEqDAe1ess3hhWV1aibqqQcacXJz0Oll/xGqPA1r1usERJwXA4YDgccv3Gjch6khKdpm3rtdiNOrpqDt1unM67JYC1QFHLusGXNXvbu4Ta4BNJbVys1CCSBpIkIfKG3fKLEHBtSoQAWZpCCG17iXs3FdFKe5zaWuOFpx/ni9/5Nv/55z6P+M4R1RLNjA1gtYootWr1eZTUy/h6ESrEouu4tSdJSllVpEqR6uOz5i9FXUP8FlfvyWcKrLMUIm9pIbHoOVEaZcyyhlK0m3RUXmhNIoCWCm9qUp2gWiJLpPz9hN1XDGhr2Fzp8Y4+onT2xFbkl07R6HBEOH+egMIJATLiy0VWsNLrs5IGsukE5ovLj0PhSZsa7UPb9i3uPosi9oXbuoj1aA1aK4lKYsVCnmpUZVHeoIj9HrSKLdYF8OCDD/LOlfeYzWZx4lysIlFCYJpmeYJ4Hxk+XRsQzoMUJxTIRZs2CEtCt9Iy8jK15OjoEGsN65ubnL54gZXVFVYGA/Cxrdzh/h5f/cpf8N6VK8QuUza6SMTGRks1NZZOBseP3DsCgYceuoxScpn7BEk5rxiNjrh04Ry3b99mcnS0rGDJ8wzVVnfINhZyAeqyInUwOpgAUCuorGspgQKhJFlesLGxwejwkOl4grd2Ob9Jkiw7ZwHL8EG8D3GUItbyP/f4o1y9dZf/6Rtf4+++8Cl2Xv3+MlVE8DRNjVSyJZ4HVBs7Ou+YzWakaUrd9kCJ4I28Z2aWp9pfelwuoNljRbr4cETOF2UTkkgG6EmNcB6RBBASYyRQteuyXadSRE9pXi49pigoFfDN/eUp79t99T4wGY8Z9HukbcerezzK9uLLsmQ2nR3v/CK2AlgZDlFpwrSpkGmCzrN75isJntQ25N6SecdGntNRGiEThNRI5PKGL5PgBPKsw/qpR9Dd8xTFOt3BGknR49Enn2VlLbqSgbhLL9otQIwTpRBtTixZGpmUiiRNKYJkw6f0rVpqvcaY6d784bGmbJQhuXXrFqPRiG6vy8b6enz/Fp31LpaLBX8MFi3aox1jEuKe/zvxRidynXHkec7q6ip37tyhrKolQqh1wqDfI0kSut0Oq6srpGnCbDpmPp3QyVPOnT3FmTOnWel20MaRGM8gychVQppkzKuKujFL9ftnnnmW3/qt3+I3f/M3efzxxymKgjzPlzo2y9BAqWXlhpSShy6eB2D/aBTv3QKMSSQvPPM4s7LkejlHx7wLSojlxrFMtbQGflwh4pbVQEmSEHxAneji/JcEBT80Fs8c1Q3zqmZjbT1uUOlCuUCAECRIci8pgqSnM1ZXV5feQRxhuR6SRUe4JFl6B3Hz/wmflAbL7t4hm1tbdFKNCiybvEY/K5I3Te042NvnzLkOQXp0qhFJSlXXMXZIFVVwsdNTkIjgls5Z4gNZEFzaWuf5557hD7/yNWZHDiMMTggWGFksm4pK2dYrxmUGc0lvrUeTWLzKqJMMJQNIE/9KRqWVlcEq09mUeTWLKtdti3PZsjCaskQpTeFhqDJmqmAmjkGAmHc8dn3j/Th2fayzCAST6TQm5m0guDo6nz46Moi4aBfF1SfTHgvjkzKJdEQflhuSAJCtsrtUIDV3bt1mPp4wmVYYVJuikmRpgjMlRZYgXcLK+XMEt0WnU7RxWhQbk8GTCk83VQw7Bd4FyFLuzo7wIbYN/NQzH+N/+U/+CavDLns7d3j8sSeZTubsbN+Jxqc18/kcbwy9NEGnGYmKm9eZ1SFpkvD21es8fvmBiDy34NXa6gq9TsEb167wxJkzXN2+jdKLHHAbKAhBN8/p9npMJvEUt9aS5ukytnQnRLOWM3kiy3TvuLfGcvH/d0YTRtMpT52/wHh0RN6qDiCi65kEgfKxEMCFwOxoxGw+i1IoPrQ1B8corHGRVx1EXBNHR0cMBuv3ZWv3bZS1inmrXAvWuwn7+4J5cAQkCEUIclmMa+tInbLCIXQC1iGUpjPooc92cfWc7mTK5OggIqGtCyJdQNaG833N5z55gXdvnuL2dw4R3uN8JGcr7wGL9wbnLLUxHJWGrOhhE8us7oPImQSNFh6tLEEprK+pjUH5hOFwjVJYMpVxND6k3ylIWgmKajzhcv8U6zOPHHQQW6cIyrfNZ2TkQtK6KgFEcNCmExZqMEEIbNsPxbuA0qrt8+FROkeoFGP9cgddGGV092K1vUpy8mIF10QAJaKXMRqQMiLEVgSayYxe0GjdpQkOHRKMaVDSMehnSGHIRIIvG4pOjnOWvbu3mZdl5JDmGZkWqI5m0E/pFD2qEPB3HCEI0iTjF3/xl1EqYXdnH7zg7NnzPPLIhCRLuXn7FqZp8DKmsUaTCd2OY9AraOqKndtX+ZlP/RR//tWvczAec2p1rU1zRZbV6c0N3rl2g08//TTJ3Vt0uh1G0wkI2tK6yI3VQoKLMbJzkTPc6/UBGdvBn1ANWFSD/OXn5XF8Hk66rkIglEBIiSf+DCFSW5T3yERj2mbFARBtCsiFEBVspMIIQX9tDSMl12/eZOdgn527uzzw4KP3ZWv3bZReQl1b1lZWOHem5N0bB7Fp5snkdgscVGUJIuBkFBxKdMLqRuzKHHmBOoIpi8yXAO0FuYVMaF67PeLruxb97CcIt3bxdx1mbmJeTwnQNa62OBxSOgQWqRMqY6mNRyrRdshKkSIqblfNmN2jKakIPLF5lr4OpLmKkh9tF5gcxSMrW5y2OS44bnXXeG8+53QWO1X5RZnTPbc2utKijXsX9FHnXEQnRVi6vR5A6iUlbwGyLE7BJWuofX7spdICYgIWPIPYA1dgguPOZEY371CJBLfI19nYT7LINUp0sInCKcXo4JDZbBZTJr0OnaKgqWoIjjRLML7mxVffogxQGolXGb1ej263y+HhIamGVAp6vR6XL18m7+WgJa+88gouLEC+BQhkUEqwu7fDL/363+HLX/06b7xzhY1PrMRYTUqCDzz24CXeuXaDo7q+l60TQCca7xxVWVLOsuOibGKYtHXqQiRoeB/XBbHtwfKQ/ACr/CCkFQFfff1tAM6fOsuNK28cA5gthiFdwFvb5ssFtuUtL1MprWErKfEhMCvnyKJL0e3Qayp6D/V57mMfuy9bu3/0VUSUcvvuNmvr63Q7BfNprBoXiHaROfCW0eER8+kMOdRRvVoIQqIQiQIb8ySu1fNZJG+VE+RNoKks23mHr20n9B5/hAc+tsP2H3+R7oL25AVWa/KiwIfAsJMjtKL2AhESzq8rTJBQe/qZJi86kdp2IKi9JGSCtW6Xh/o5lZ/j0yGTsqbxhswLHu6swJHhcHWdt03KjfER6/2CRKfL0+qeLMXxBnsc84XjmPH9Uq1Sili9QYustvESJ3Kyy65NIWLay5f14MNxbCmE4LpvkJUHWyAk+OAimti24QMYDocYHd3Lw8MDsiKnPxy0rfrmCB81bg+qOXerCVYnBFUgRCDNO0iV0FiDNQ6Rx1Z9vcGAVVNhbWxvHohVNbJNFZRlidaRhjc/2mU4HPDWe9f55HPPkC8Ejj2sDQdorbm7t8eZU6e4s7PDieLZqBBxkrvbTn7wnvl8RpIMCMExWF+hMYZf+8TzdFvFiQ8Ce37IqxURWNkfj9v3i0GZI9bwKjwi9muKa7xVQVys3QUN0LU4h5QS01hmsxkXz56n1+vSG/TpdHqkacb9jPs2yocvP4CsJlzf26Y/dKyudBgfzbBJFPNdaKb4EIPuyd091tCcPnWGrNfhcH/CeDJjZgx7Zc1zzz5N8Yqh3r6D7A6Rwy2KJOHihVM01mO/+YeMXpT0bUNva5OwtsZqkdKp5ninONrdYVbO0EXGKCu5IW2k281LBt2csYKyrmlcRZ5LkA4XcmbVjLevX+fJQRdlptTKo1VOkAl9bxGTKbOiz9U0Z/uoImllQxZAQwgx2X4ssHxMy1NKsfCbjnOZ945YZhXFhk9KQy6et1x4YVEuJnELyEHE2H3RFIi22sVZT6Yj4d8JQ/ASWzZ476iqElNVzA6P2N3Z5u7BDltbpzg8Ooj3q7FkWqOynHJumXUepPQKZSUpgt7KaXSaU5Vj9nbuEqyh1+nQ6XaYzEru7uzS7fbwwdOkaWxQG6BuSoxxJInm9rWrfP7nf5bf+b0vsHd4xJnNjRiTA91uQaIV71y7xrlnnsY0USBLtrnJQOyNeVxEHOfUOsN4ckSvV+CDW/YY7aSRJLKISYGlN7JIgbR3AvFD52ac79osQoqYpnEo/GLOiXW3yDYkWSizL0gtMqbUlIz5Y60Tuv0eic7ucbH/snHfRvmt773BxtoqP/exn+Hg1lVMNUWHKOS7OBmEECRpTpIpaCxr5y7yX/23/0NsJ+f8PT3flRB88qEHeeDcA9w4GvHNF78NgP96+JFdjBc3CuCnHnuMzz74EJOdPcY729hTWzReEJIBe0cjKpljTcOKymlMSV4UIOf4oLg5mjKc11xKPLly0d1VDb0kpmMmWnBjPKWygVS6FpWVS/d1eSoS3cwgA3lekGUZMGWRWDbGxKah7hhJBJZSHsBxzpTFa8ICFJcqiWmbxeMiqt0tpC10EhXgi7bZTqIk5A0dG5B5B60UaZpg64bVtSHSG0a7u1GsLDhAotKERKeQpFhSarVGGSTSWxpv6A23UEmOryY0xnDz+nU6ecHK6oB33n2bnZ1d0izFOQNS0u90yZKU0URgTI33nulkzJlHHsR7z+F4wunNdayLlEpPROgJntrGxrRSR1RTq1gP2piYczbWtBq88ZRVMiGmqE6gukCrWP1DZHRxzzEZ2hOvTWcsNz5F6T2iEai2zKSRknnLFEIEKlczqWvm1tD4yNgKUoOIXuN8PseHwGDQb9s7xJJA9SOqft4/7tsorXPsjab8H/717/G//jt/k+LOIaWscYBaQNYerJUcYhg8dJH/9k++RFk3pL0BDz75AmnebbHawGjvDt956/t8/Z330GlK2hmAgO7qJqcefGLpoxNoebCB+fiQ3SuvEoBvvfU2X3/tNc6sr/PXXvg0RdFB13POX7rIlStv4QxUVY0aZCA0qc4QssIRKMm4axxbWrHuLNbPSFwCKqccrnKldBzYBiVTnIj6PMfdoE8MEfdbIeTStfUhIEV0g4wxJG1vkpM7dEx8t/mxxU67+JISQUKWSoaDIXJeYhe5PyHxUiPaVn5JopfpAqUSECkumWPmDV4lJEmCtZaQaIJ3rCcFD9ocWwfKTkDr2DSnyDtkeUFgxiJGst4hCaxvbjCdzSjLchnzllWF2Wu4fv06dR01kfIio1PEjWnQ7RGEx9om5lC9R7cNU01LWl8AMVopnnjkQb77yusMNzfZvn07nnRENpJSKgpAax0NRUaRbaVSet1VQkgRZPdsegsT+yAANh6W4fjfgAkC46K3Q5LjVIEJCcIGau8xwTMNDumb6BF6S9723/Q+lrohW+MOEU/QSpGlGaZt1NLrdqgqe1+29qGEs57+xb/L21//I/7lF7/E3/70J3jj9kstMdmz3u+yNxrjg8RbiUtSrty5w8rpi/zC3/kvyBK97LmQtJO2+/ynORod0u8O2BquREaEinzV0FLtFjO34Kyaz/4CQUi29/d44zt/weGda/zrP/w91lbXyJKEr7wk+flPfZqzvR51r8OwU5DKLt15wYPnp8yDRwlFWlfc3rlFL/EUUpHrAt9d50a6wtu721RCIIXHiwTfNq09jh+P3UnRkgmstfcsgEUudaE/uojvIvOo5YwGRV1ZmsbF0i4i48a7GusURVpgbMCGlm8iBBaJCQ7TVFgT1RJiTlChQopLSpJ5Q1OuLg0+STSqsXSt58E0Z6JSrhOh/izR5FkkXmghQPi2vtHivOXrX/8qo/1rrHQUuYRcQWUsxghmsxnGxBRNXdVI71nv9ghh0U+yZHN9DRngdC9BKcVrb77Dkw8/uMz7IkQUXw6B4WDATz33LNdu3eT67bskaUaeSPIkI1UK5wK9fp+1tVNUlcMLSWUcKuvhXQTUBnm+8DqPRzhBwrjnd3E93p3NefvmDU5tneLt925SmQDWYFxYNh0OIpK1g4ix/ZoXJF6iPai29UMMaAR4T1F0SHWsDTbeQlMT7s8mP5xRDgZD1i4+xI3vfY2032/J5g2plFxa7zMvj5g2Hu0iMgitylqiWtZK5P2oELmwZ9c2OLOyxtu3b/JnX/8Tiu6AFz7200gkjrYYuM0Rxk4VAk3MB106c4oLf/M3mJQl77z2Cu9+58scjo4IwH//739nGavJRQxHC5W3d6RT5Hzyqafxwz6nvaVIPM3mRd4dBy7lGcZ7rt86xPtAqQJNq3sTSWvH9YMesM7j2/4kSZLQ7w+wxmCbCujgXIyBRHv6J0k8uYN1jA7HlPM6uuxRMJRgPY0JBJ/hETQ27tCxZTkEFznCizKMFtbACInPa3InsPWcGzevsba2RqIFSbCsNDWrxrO9P+WwM8QkcYN0ZoxPUrqdAh9m2GAgNJi6YbwzQ53PSJzFkzKrGqZOIJKMsqxwLnKAXW1xUqCTlCAE83kV525WslrkhLpsyfou5kIBqVVbnRPnU1QV/e1DkrLEhEDTGLL5nGEnZV4blMpoGosPM0SSAZLGBvKVNb736veRQvCZBx5oSTonPBNaGaLlI3ElCinwLtAEF7mqMopveRcf9wRCixLHFE2cc4Fkpj0950m8aUkbEieiK2utpZCylVSVGBFz67r6CceUAFJJLjzyNDe+9zVeefcaWsCirKirYLPbZV7GVEc5mXBqdYVpOaWxhm6et3So+CfRexO8eesGX/39/w5TVwhgNhnxc5/9FdI04Udkf5cTKxEMiw4f/8SneOyp5zEuxrW3blxhcrgXd/Byxvab3ztBQ4tjWjv+6Otffx+UevyO/V6PJx55lMsXH2QqTUziLyUvjtlFwkfKXVEUsVVCgE6ny9HoiKtXr5DcjUrhSZLETljeU5ZzHnjgAY72D1hbW2N1bR1jW3HhVg19NJpx88YuAYExDcew0nFOTcoTwlzEipbgHRqNCJ7hcNh2zvIkAgrvyYIlt4HchVbyMYATHB0dMS8tRTWlawPaxYK81BkYHZFtdJDSobs5hzv74C3dTgEIlBRsrq+yt3c3urdlyXBlhbXVVXxVk6qE0fZtfu5Tn+DL3/gOB6MxG2srce5P0PCcs5jZFNfUBCHIspzNJGXVC677gA2BxgUq25BmkrQosMG1JWpxHUoi6vpDqY+w+NaqLIgI8gYBO5PI+Tx95gJXbh4u48uYjw5LNUG3eFQIghUgFVLYqDwYojas9LEGN01jpzeVSIRSJCKhnh39yPV8cny4prEIhsM1sk6fOzt7PHDhAq/cvobD04znPHfhMju7b2ME3Lp2lQdPn+cbr7/J4WRML8tPBNWxv/3b16/y1f/42/z6C8/w7IUtqgD//Pe+xJ+LwGc++ytkrWEuJ2lBcF52UF0E8lGSEiLXcvjE0zEl4WItXP0zn48OWZsDixup5/atG0yPDrn71veX17f44azl2y99l+++/H3+i3/w99mZjvFStWLS0e2KnYNVXKxaoxNN0zR0Ol0Esb9hVhQYY6Kw72xG0zTgPMO8oChyiiKn2+1gW0U5EYjyjTa0oIaKuTFakKl1lxeaO2JRfN1ueDIEiizj4vkLdAu/rMxIfCB1gcR7chvomNjPxWtFLx0gs4SRPyLJDFp7BIZEQUZD00zxoiDVktVBj9pbtkdznn76aZyHcj4nSyUrKz0wjjzL0GmCIFDkOaZpqMqaTz//FF/66je5cecu62srrfID3NnZRWvNIMsY9VImdQT7YgmWj/EygoZA5QXVPKDqmqFoqOqaNOsurVD+6H18eY8XCHdA4AK8+N5VAFZWt2iu7JwA3E4i46LFhk68QQhYY6M3owRGxVJCpCLNssiIEprgIPGW+WR6X1b2oYyyrmt6RZfuxhmu3HibF556HG5diTtVY3l4pccPOpL3KkntEh5cWwOgnM/a1NPS66axjm996XfA1HzyVIebb3yXRAj+N//J5/kv//vf5+s65ec+94vItjoiLMjachHCs6Q1LRQB5CKh18rQxBhWUegI1jjp2jgv/s1jDz8OgP/ETy+O3mX+zxjHlXff4ZUv/ju++o1v8rFP/hST2ZzlORUWyGFbIhzaSoWyoq63KYqCixcvcu7ihdjxq2mo65qqqrhz8wavvvRd6nLOYKXLGqttGqXNP0oQMp4Mqv1Y2guUh1LH6z6uWQkLILHNZUYEuZrNEYOMLNEQHEFC6j0yeAIN2sUTJpMSnWryLKXf7xJWOoxtTXA1SW1IlUc2JZshkAYPwXB2bYWD0YzBYMDh0RjnHGUZhaWVVjgLnSLDW8ew2+dge5uqnHOpH/N0t+5s8/xTT0RUsmm4fXcXrRQ+T9jPNK5TIKYleVv9YxTgJS4orBcEnWBwGOtJmkCSLoAzECKqA8bd/96E1JIV2f6/cw57j+C1B6VxssH4SOoMDmJHShHnMcRWfEqAxKO0wouotpBLTUg0Rb8LieJoPAYpqF2DHU1gZ3xfdvbhGvy0vdy3Hn6aw+tvMa0ahDGENMFYR3Wwy6mO5GrpmVaCp7bW+B3gnR98l0vnLi5fRwrBjb1t6umIzz33NAd372JczAW521d55vIlXn/12+w89wJbq6ssdinfnooCqIxhd3eX937wIlsXH2K4tsWpzS3SNle4QN5O0kqVXCicH49FoXSLtCxvkM4SHn/yOa5+7xu8/tZbfPYXf4nJtCYIt8xFLggCxjqMtW03qLYcrGmYTKfUdc1oNKLX61EUBdbGdgrzMrpp1tbtQpJLiN6jsCpBJjlORDqdU5GG6MRCXgR0ALVwHNrr9QGq2Yy7N2+xtXaBIAW0oE3iHFp4EAZhG6x1EUUUDoJlPJ5QWk/pQUmN04GQaUJ/SOU0PSVxdUPe1az0esxmc9bW1hiPRhAcVTmjk2bMphM2NtYI1tBUJSE4fLBkMrC2MqSqmyh76QW7h0c0jeHjH3uOu5MpTZIwbwzWW0gFQkuMl9QqVoMaDLUIICRWJpTatbny5Q1d3sMfPY6BtyRZkEIEmW1YNw0ui9UvmkDlDMY3WB/Xn5AOKT3KOYpUUyQiNvGJCB77bo5KE27euc3V7Z3Y40QJekJwPu3el519SPc17jbd4TpSJeztHXB6uMrudMLUGkaTMZfXVnnr8IADp9jZ32fQKRgf7LB9NCZpETetNQdHhzhrObWywuTwKpUHaQN7e7v87U++wKtXrvP6d7/Oxud/jfdV/zA3DV/7wu/GWBG48fI3EEIwPPsAD338Zzh3/gGGne7y707GGG3+9xhJ5fjnsUI2senPCUBHiJPP++Bx7FK2ecpWFsQ5t2xRIETsfaiUwkuBc3bpkotWoUB4wQOba8zP3WKlv0KRd3EL0KstG9u9c8h8VjKblpi2JGiRG3fWMRmPEUBd1SQJlIcjKGtyL0k9JNYjKkMzndOkCuk9o9EI5YHSxEZMnYLuxjqqV3DQWPo6wdSOohtIM6hCIMtSut0utimj4JZ1rG9ssL6+ytlTm/zFF/+Uej7j7Nkhfj7i8qULfOf7P2A6K+l3O9y4cxfvPWvraxxOJ6g0oXQWIzxz6ZgUfUZNYK4D3VDTCTWFEgit8dIiaeh6w/SEqxne537eu35jUbaUEqkS9ivDi2+9xaDT5aF6zkq/wyyv8QZE8Oz7kp1qjpGSxjmkih238yRBeI/FxlBmAUx6z2w+Z33zFBcefpzVwRpBKYwtefs73/vRhnVifCijbJUuGQ5WSPtDXn77HX79k59g77svMg6Gg/mcc6sZq5lib+558633ePDMGV5+7ypHsykrvQHeWnxjuPryNwB4eq3HtYOAlAqHZW4t5uZ7PHv5AV5+7UV2n/skpzdPxQUtBfO65mt/+LvUd97lk88+xRPnTrE7mbG9f8TrV6/z4n/4V7x9+gJ/7W/9Q4a97lJmMLp2bb7wHgtt3dwFCCXiI7HFmjrec0NoMeFjVHgRzy3YPAtFu0WJ0SKh7f0iH9kq1ekE2eb8bAu5RzA1Jrw3uprvv/49Xnrl5R95L4b9AUprnnjkSbrdXnTNvEAmgndefBMRBP3+kMl8xvxwH3ftNnkYxNbgQZPY2BuyMSbGr9oTnKeTaiYTS3cwICsKkm6PuTUkjWWGoVeIVrRaMts/YjDo44KhMjVay1jWFwIHh4cUaWzlIERgdWUFrVKWriIwbxpeffMdLlw4z7Vr1+gNB+R5GkWMdYYXkqbb4dBN8d5R+DkDYXggLbDCceAmnM8UpzLNrZY/HFjo6C7Eyo5HtJlYnieUjIi6C8zqhn6ek1dzCuFovGViGqomoqlaaEKIyLJKYlG7kitI70FYnAzMPQipqVxNU004e/YCqysr9Do9RJIyrhLOPPrMfdnZhzLK8eEeUkiSToe1y09z+7t/xnBlQKFSJiZwa3zExc0ul7YGvHP1kNvjKf/pT3+KH1y5ytXXX+Tpn/prkTbmLd62qgDOIlvdUSfAIJjs7fMPn3iS/2tV8af/+p9z7qkXePITP8tgMOC1l7/Lzpvf5zd//Rf53kvf4M9uvQPesZoW/OYvfI6pKfnqy2/wZ7/7L/nc3/oHrPR6x4ap2s7KIcobxvixbRgrWt1OFowd7qVFhYAUFrfIr7HgwcqlYJZsy5UWEiJRe+aYxxoXY6w59D72G2mqqAa6WD9BQGd1yA/eeIPB5lkuPvE8h3t3jz8GsZj84NpbmPGIr337q8clZMSK+L//+V9jPTEcjsZMqpLJ7T2eHlm0nKK8JBcZ2kQqmwmW/aPD2ItSCUQSSDcHkKaQpkyaGmkdK2kPL1KqqiQpDZ2igw57XL/yNrvjEXmRYyuDCJDphF4ayQTnz2zy4KVznNncxKU93rlylfW1VfJuh++98hp13fCx557nW1/9OoP1TTZPnebGW1fQxNxfKUD3CqbjKU2aEHpdbikVGUeuYjOUrBEBrjh/AtkKYUUPZ0FUiL+Pcx8wxqK1JnFhebpuF+vcHHSYNoaRrAipIOkmhJ7DW0Oap61sKDQqp9EnzCd4tKuY793Fy5T+YNiKLIEXFicU2+X92dmHMsq3/vTfAZANVgnO0skzzuaCrV6H24czdqZz5say3u9TJJK5S5hcf4efeuwRvvn6i3x3OubU489TTyeUB9s8//Bl7N3bMUAOslUOk6wGxfytN/jfPv0o/2etee3lb3Dr1RfJBitUh7v85i9/nsm1NyitQ6jYSGWnLPmTr/wZa2Xgb/z1z/Iv/vCPefWlb/AzP/t5pFLvS30cB2JSxmpO0VrE0k09Bnjb54GSgSCPT0iI1MeTpVeLYueTBbmLx46HWLZ1s4vSreVOH5jM51RNw0OPPM3PPf9JApEc7YmV9y44puVnsd6zs7fD6GifRbXpzTe+x//7q3/Cf/2/+p+zYydMRxPmhxNODYb0TCCUTfQAXFTik5nEB8GsnGNxuCwBmZB0u2iVMts5ZKXoc/bcA2x4OHzvB6jE0k1zVjsFbjLj1MY6TgQGwyE6SehmGatFTuIaHjl/ioc2N5ABXtmfcDSe8PyzT7J/cMTrb77NZz73Oa5fuU4Igu7aKrooUFojjcF7mEwjoOQCiJAwSwp8kaNdwFZTRNCkHDcQOtmSboHMnxzeRSJGbMkelhxcj+Bud4XDJiXkimJF01i3pDSmPrbms9bEsMQ2KGeAyM8V3qJczdw6hM7o9PqRI9tq3ngfODz8CaOvjz/04BJA2Ts6Iity/sHP/Ty7777K5rBgbzpjXkmu7s84f3aDQjXsB8m7d67zD578BM57vv3mmxxdexOAi1ub/L1HL6H2d0iKPlMEuWrIjeLJvMsFVZLs3+L/9NBpvv/CM/w/vvMyN/cO+M8+/xkGd97h7v4e67rAe8XcS6ahwTrY1xlf/drX+dgjD/Hid77MpUee5tLpM4vbtEg+xTIwcSyLtGjZJxY3dpF+WZoRMT2BeJ+BHffgUFKhtY69I09UigBLMGGxOSyM0rkfpnksXs9bhy+b5QdIEk2mEiCh388JInB2ZUgIDwOxqvNLkxHvfv9rHDaWydEhh3d3WFUJBYosVZQdoGnA20gFtAYXDLnXDErPA+sD/NpGjIuDYHAqpcgLpJSsndri+psvkkxq0qzD2ZU1vIVKK0KeYAPMZnPGR/vMMslDa6s8sLWKsjO2Dfzf//2XWR32OXPuNF/80l+wsrZOdzhg+63ryCQhFCmjpqS2Bo1ABdE289EIwEmPU56gIhllJgQTHThws6VYigxLHO4Y7ON4f5VRwRtjo5yNazfQvNtjJ2jGIbasM7WlslGPZyGS5q2Lgmyta2xcq3DnA94ZtG8wwdPvFGR5zryct4SRtnmU/QnT7B47v7HMg60+9yjONLx57V2CSqEb6A5Sxl4y8YGZqel0BQfzCfPas3vzOn936xS//tSv8o2bOzjv+dWtAR/f2SF0+vzAGZwUBCXYqA2XnGDDSaqmop7fonfrKv/k9ArqqY8xu3GDUXBsdnoEr7FWkISAQlKahkbUHDjJ5y+c51uvv8XVt17l4uYphJJRjkGKY+6lFMf562VMKVpAJSbzl5ozElAK3IJEfjIwbaUbZYjk9vbEX6jRnawGWYBGyzYBH9CJ6WQcS7sIQht/LogLQgiklpFT2vYd0Sc2GZUkoBTdoot2c2bTObv9Lt+6dJGnZlM6e3v0ez3G7gglBKsi42Pr5/jt7W3+9I++svwsv/LTn+bpS6v0Ll6i3+2Sbqxx+/YVfJpwsdNhrcj5j994kT1TgxaoYOgnikfPnmPz0jmChDtNj//LF/6c3YNDfumv/yxXb21TVzWf/PzPc/fODkWnoMQSMkVTVxjboJEoHSuQ9g8OMMGh8wSpBNgS66K4Vd04uv1VPEetAYofnsxwPJ9eBJy3iFZc6xvX3sFYy3PPfpKXb2zjhUeHWLTfhFa7x0c5TvyJ0CeEZSPf47xnXAm9YR+lW30iQWvQtDKVP37cf4OfpmFRjDu/eweCRyykGnGsbQ3JO5r53HBnPCYrEuS4ZO4U16sZvds3kLtXeMp5Vrzmk6LishfcKqfk/SKKCoUGKTzBNBwGmBjHvq3ZSSThaMJgf4xINIWClUwxDpKyFuRO43zAOk8ZLMJDZ96w0u2yc+VNDp56gTzRJFqRJDoSuQkg2n5SrVr74mBcoOoLtbz4mFhWorO4ScCigWls5yBJEo2UkYpVldUx4eF9K+VH9QlZvNfJ5y7Sr/c0rBUe31jM8kMDLZoLxBNQSox3WNswmc74/a2z/Je/8+/5uUcf4Z9evECWpAQZa1xTBF+cjPndr38NnbZt6wn82z/9E/Qv/DJ/8+Of4s54jB6usXvlbfzhiDwtOLd5liceeZyXb1zFhQZtA889eplfeeZjODPjbqX553/yZa7eusmv/sLPgda88sobnDp7lqn1zOqKqZ0xV5ZKOfoqipAJG0jylMbZeKpJgUoiyf7uzi5JXuCloHKSimQZlC+F1ha3rp1K76OwsiSipy7A3Bqu7e+jlSIvVgh+gpMa4dtyRBEL6f2iGaKIxieER+I5FsmOBurbNvdpni5VGBeourM/XMb3o8Z9G+VoNIqVCVqTahVjIRYbkWd9Y53VlVWm+0c4D100F1dPIZ3jVqpRMtAJgsxrRNPQKSuO7JhRUZB7QWoqyumEo+DZFUO6XjIyMPaSXSFwSY+UwIavWJOSjSTFGcuOd5Qu4LzE2cA5qXlAeh6+e5tza2u8duMm87qiSAdUTWyAE1W2dQz0kwRPQCqWJ9DitFTtqQqgtUYpTVgAAyxudkvvOtEla2HM9ke4plIKdJIs9WJP1l2K939ffnvfKmufIdpTPrQu98lhnV3qsuanz/AvvvltAvDlt97mf/Hss+jERFqfhWLrLL/93/5PdIeb/Op/8o/RUlPbhj/4nX/Gv/3SH/Mrv/F3efH1N3nztTcIlSdVkv1pSa5HnF4fUNlN+p2MQSp47PJ5puUut+/U/MF7d3j5zTf427/8efqdDrd29ijLkmcuX+TsqVU2cs18OGC/GnF+ZUizMyJRCp1p8n6XQZJinePg6JD5vCRUVezyFQJpkjKXFY28d/OM+ED8FhaNeIVAIrEI5jYwd4FvXr/Dn7z0Mp/51Gd45d1tkMebnyAgg0d6FxU24qst9r5j7yqENioKCOeQ+BgDL2Ve4lfTNMcB748Z922UWZ6zMlxhPB4xmdZ08jxqmQbYOrXFI488xGuvvoYVC7q24MnHnmTQ7/He3h32Dw+orYBUYZXkpbLkHDNKKenMDD3TMK0NR6bhWlBc1gOqOqM0kqkKHOQJ0lW8sD7kARnYlpp5PWVma2a1AetY14G/t7bBUx2Nz1PeHV7itRs3uHb1bdKHnyZLFBCioJUJVHWDELFNfJZqtNIoHVsJIEHK4+nxzuGsxS/sTIh7+pMsSAgLTdI8K1pu6r1jQY3L0izWX37g9vmXuznHi+7ex04W9sacadunUmlEkjCeH8N/P5jNuJjnpCG2fZdI5nVNv6foZjlaKlyIshyr/QH/7gtf4LWrNxBVjXKB7aMJmYhlAuunNnj0gfNsX7sFVnH16g12D8fM5CpffelFVlcGbKyuAmDqGCN/7xvf4btf/3bs46kUvX6Pt156k0G/z6MPPwZaodvGsc57jPccjEaMpzM6RUGCQhpP4sFXNc899jh//NWv8pUr1/nEpQsIARt5RiIkMgQcggrBzXnFD+7s8PK1a7z4+ps8+ehjqOIU1Xi8dJGCbL0RJ8DLFkTztMxkFl2kgzcn8tdReSNLU7qdDqZpkCL2LfVAXZfUzewvva+Lcd9Gubq2yXw2o6oM5bykqgxFnqOUYjoveenlVzjaP4qpAx938Ou37jLs91AIcqsheIyqKVPJO0kPvxcYzDzSTxkqycgFjjy8ZGe8WyZM3RrGdzmwnv0jh9RzTD6j0hWbVc6zKuMdAbeNpeMDHxvkXGaMLRVHrk8hJE9dfphXv/GHbF95ncd/+hdZ7Q/JkyT2ddSLE0rifCsyXNtlugQROy5DTMgH6yPcLpd4USuyGxXVFqmRPI8Uu9m8Ym9vb6nkvVAvmE/GDAZ9ep2cvf09tNbHVQwnLW7hPotWxy/8KBeoTdGcYCsJIVs9WE+a/X+4+/Mgy7L7vhP7nHPu9vbcKytrX7qqF3SjG+gFO0GAC0BSImeRhjOWZhQazzgclj1eJjwRVnjC/sMxdtj/zNgRXuTQyCNaoiyKQ44okABBYiPQABrofa19zz3z7e9u5xz/ce6972VWVaMaksKyTkdXZr5337v3nnt+57d/vwHSP/io15o1pIKWF5Dj48/ilhTXcHfnDsm4x4vPfoErV28htCHVFqEVWZJxM9nBmBztaephwGB/j41+gq61eW9/n2On6q6tTAg8oUiE4Z0PrgCur/LI+Y/hRQ2yZMLOtXfBWnq9ATdu3pq5D0Hg+zz/wvM8//QnmFiDMAaSjDRLQErmG02WJhmXV1f5L7/+pwXthODJc2foRBG+EGQWxlnOO9evkSTOFXvuqadorzzFze1eQUXgmMQMrsBdWIEsYgOyIk93uMDaJOQ6JvC8Ij+tMcJwbG2N42trxPEEz/cB6YrrGx4ra3OPJGuPLJRvvvWm86u0K/Q2uebIkSPUahHrWzukyQRfeq4KJjc06w2Mzhn1h0gl8HGphEgGzEU+gzTnkjWctILFSUzL9ziWwVjDbjziklFMshpeComMyY1kI4+5OcqYb+Q0MByt1TgmAt7OelwMIj6v6gTWkAvFdmJ5/eZtnv3YEzx9/jRf+8HL/OgP/p8snXmST372q9RDv1zKOFPTFCxgLjKLsGirp5HQAp5eiSJ1UyzeWSh/gfs7DAN832cw2Ib1dVqtFlEUkSSJi7imCSZJ8IQziw+PsgvEGEOSpo7vQzq2qwpB/QGjNJaAom/TpV4atYi0OUc+EzVuSUEqBb70sDYnmNHqUjlTfH93AwucWF3j6vAO2iQYC1IorDAILyTOYa/fxzbqnDh9its3tri0vkmiNZ7nT69MuG6V0sRuLqzwmS/8GrXARxvL6HO/jLWQ6YybN6644IkQxJMJW++/yssv/5Dvf/8HD7xvz/N46tw5eqMRxtqqNezNS1cOzo8QdDodPvnxZzk2P8dyEPK9OwN3v9rR9dmiUF0IBwJtTQGWRQ7CbdhG5PiBQGiJlOAJifJ8Eq0ctGjB5B3V6sXT1HiB5fip5Qc/uMP380hHAaNJXE4vwrrFMRpPHIOxsSjlagittnhC0YgamDxlrtlAKYf+1YhqCKsRWUw/77NVC6nFOcvaEFnDspIYfIjqDGNLZmNyAYmYkEufPSw3JilPNjyaytJI+5yQEQuZ5NNz8xy3E8YiJ5eKEYLYl2Smy3PH53n2v/dr/OH33uS9W7f47n/3dzn25AusHjvD4twcnnD07a7AHKb+GzMCUOQSXYy7SHXOepeF3yIlg8GAa1evofyAj3/843Q6HZaXl8myjCRJmAwHvP3qj7l25XIBpaEd5gsuUlcSDHmeRxgGrmtE56TGFkhwqrrGKUh04csW2jIIQ8IkQAio1SKuxCnJTEhea814lGCVxma5A0Ou7kMhlWDz5vsAWCPIjQAjCiBpF08YjFLS8Zj5jk86yQlsxOqxNe70B8h+30VKi6kzoog6FxPaWjpK3XfWkycsq3NtZ2YjOL28UqQsHMfJ5BMvsb61yZ0bl+iuT7Vo6UZbq3nr8uX7kSEODd/3+eTzL9BuNMh2dghX2ywu+DSFwB+PuLu9hbGaIAzwPYVCI4VrtRsOB7RbDU4cP44QjlRqMplgdAZGEPkhm7dHDPq9ApGvSIEJg7Y5V699QNCq/ywxc8/9kY4CxwvCbA6oQDq1btalLGDepSDwAxLtCrdHSUI8maCkJM+NK9w1mthC7Am2lOVx62OloucbEi1ZC5p0w4B0f8LGzoQ802AVsQc3MkOinUbK8pwlIXk2bHBivkFsDLm2CCPAhnRqGcu1jN072+xt7XC+P+KrX/4y/+W3vsXVH36D68pj6fzHePKFL7JYa7n7q4IlJYBV8adwaRG3CGyV15wdUko8qRAWhsMBUaOJFJIsy+h2u1VU1VH4+Uwmzsdz8BEFpVt5XkAqQaNed4valCRDRV7MmqLFKyseQhFkKi440RmDYZejJ9eo5zDeOcgjvJemHDnSobt/D5tovHy6oLW27A37DPa3ePzEKa7sbqGLe7ZF+aDTe5Y412xuj4jHIbWgRtBocfT4Kns3E6dlikVjsKTJhL1er5pPyTSNkE4SJGlhditqge+oFZS7t6OdFs+cPUtmHBW71sZdEw5Jcau7j8By9dJbTArc2PGgR+/ezWpe0jTlz775pygpZxrf3f/Hj5/ksxefREQ18BU5hjv7u4Bk8ME+cjgmngzY9yz19hyjJHW7jNZIY8l1RhK7vKQfhkyS1LlIwtERxmnC+s3tR5K1R8d9LapYpnyjlkw7BG0pA6SwBRGsM1NzKwDFMM0BhRWSUZYwEa48TSvJREgyFTBQNXZqiisqpZtLJuMxNlAsdRo0+hl7OiapKXIZMeqP6U5ijkQBiZQ09ISnWoYafSQZPgqjBan0WHriGTb6Gr0d460+TVwfczv3+I9/7VcZhQE/euMtfvr2W7yyu8lLv/zvMtdozmjKw/kuxzqdFRTehwWyYnUuCGeEcEBbg8GAIAwqZmegoOjzCnBnl1T2g7DwHe003eJOS1lv63nO55lmxZ3vo/U0NC8Lwc/ThPmVRVIhGNxax/ebB673u3fX+UpdkmrDanuOYJbMUUjWt+6SxiOevfBZ3t/tgVHkOqu68K0Eq6TDR9aWvf6YVmvIOLnO6vHjPPX4BbaL5mG38A37e/uMY8c8de7is1XBv7YGkblN3FoHapxhEUq40sWitlh5HpHyHMZrlcJyaaDOag1rNeeXl1wQBsiMoR/HGGsYxTHXrl3BAPFkxMal12Fmz71+6wZXrlyqNs7A93nyyScAyZl2yNr5T5LlmnGe0R1PCGRAd9hDKouSgjRNSNKYZqPpFJR0HCwWWawF69yiRxiPLJT1egOtc/Isd5RlFlempTx83zFAKeHYjNMkReNC/1p6CN9p1dgapHIMvBaL1Zq0plgPImxTsTncZd9CrDRqMmbOCp5aqOP7DbaUZGgNC8uCeLhBIiETGs8kLHsZJtZY5RXchhJtNYNwjo1GnSQbgNcgsT6XdnY50+5w7NQ8zz72eX71K5/nH//jr/Gjb/wuL/7Kv8NCs0lZ8jYlW3XDGOtapWZec/CaUwar2dSI1pokTaoCgpIhCpgyWJWFBWIayFGm/G5Lao0Lv5ecmeWJS8tQSoceXpC/Hjtxiqtv/5Dr1+/RCmI2xj2emQR4a+0Dz9NXCoNiYj36W7vYhqOP80KHJnD72tsALHbmye7tInNNalIETlM6enHjIDWEJNOae5tbLHYa+EHAsWOnqdWn5xTAjVt3q7+jWs2VLNoypmlnUkCFmWsFRrsgWpYZCgxyp10taOvK1yzGmfqBT+R7LnEP+ELQqNewNkfYNo8tL7u6V2sZfurzBd2iQBtLbzTh3r1b3HrvFZdvNIbX33yrQjR4ndcAaNTrrCwu8fhjFwmWTmE9BUpx9cZNdrWh02wXsQVV3kWBozTdlH/WeGShXFyed37kaMhkNCGdOPjAWrPOXKdNPI4RQjLoDdC5hwwijKdczagn8ZSPUQEqqBGEDlnbhpI9MvzhgE48xvNCbDpmHE9QgDCWLRVTD+rERrCap5wKM+babVfNY1xKxgD9FFdYLnMwPpHx6V5+l3Wv7hL8V2PyPCNYrHP84jPEdswIycif8Jf/7V/iD//h1/nRN36XT3/lt5lv1KeLZGaUiNiHc4XWquI9hRAeJW3dtBhBcLCAQKBUANKF+3UBt+hyjtOalFwbJlnutK90heyB7083hdJqMa6CCJNz9MgqAD967zL/3nNPYCOfM0HIP7x2ByEkL/zSb/L2y3/OWzdv8+L5s6z3NG0d8O3tHQDOPPGiC7gkE0LfZ6hzsizHagslgLZ1aSVtjasalh4WQyokuYH9rX3MSHP22eeqC81zzfrWHgCN+SXmGu0ZF6Aw8wTIEi2tcN0rukTcpmeKeTXFNZTN83Eak8UJqa9QnjOBPeUhi59CgPAAA74UzIe1YrN039MO6xybW+DZJ57BWENmYHNvC13QT1x/7yekSUw6GXLj9i1u3L5VaVklJb/1lV/n3pUbNFotMq0Rniqa8i0yjzm/ukqm/gXnKW/dvUEURbSaLY6srZDGKd39Lu9+8J6jQ7fOjBE25NipT7J68fNkNZ8aFs8T+EEAYUCuBHGakmYpidAgJixzl6x3h5CIUDggrixNyT3JppdwPAh5YmQ4qy25L1FGkAnIhHtguYGRdeHxAIvEo0POc3qHI8pD6JimydGBhI9/mpHt0e/3mK8vEXoN7tkeX/jMs/zXv/c13nn1u3zqM7+EEi7XN2sSFtEdnPDJwjwpdZQrs1N+6DBA0ZUZWpXUlfWvQoDyQXhkJiXVjoekWJ/VyLShN57gF5aF50miwAdhHT6qkAVYgvuQEszwLFqu7mX8+G6flSOG127cRkrJqWMnuFSrc3Nrg55u834vZUnvEdScwEmp2J+M2Ln9PmtLy7x18zaJNgXYcSEYhoqXMQesUBgZkGYZR1TEfNR0/Y6FWb0wN4/WOXs9R9ATRg3qM9i3JbuvmKmgcpmgiuFjmoMq5qjsAqmGVGgsqTF4ueNoyYUp2MJNZfKXrFhl1Fx6Cl8qCqhZgqIQwALt2vHKnXjs+JrT2HlOfzxmc2ud3a07WGO498HrfOv73+HcyQuYsMYkyyplIUzO02bCL33scb7+7luPJGuPTltgIB0n7I4TumqfTqfDwtICIBj0B8RxQpakDPOMfWE5tbAIWjMe9Zn0h0xGQ3QeI0jJsxStU6IkIZAZeSNksT2H6qUkOiULQwYmQTPBCM1a7nGhnzLfarIeeFxSIPFQ1mfe+kgzxmYCzwi0tnjC0pCWo/GAU34dT2RELUV9ocFwAb52b4v3r9yk0drg+PHjzLVCbr73Bv/Jr3yZ//M3v8U3d9ad+WENw70tXnrqCXrdnjM/raMJd0+5SKHgOvWtAt8LnKYsEM6Tgr23MmELE8bzPVCykN0ynFvMdfFTSoUfOsAxk+ckaUacpq6kT7iOFE8qfM+V9iHASIlUHmlu6IarTFpzDI/63Pn+6xw5fZHFRoOLz7zEj//8D9mMB6yurDHqpZVWN8BebxtrLRdPn+PeYFKRzM7ehymqWZz57TYmKyV7owFry0dYbLa4unEPIQTnT5/iIC5rOYpqGMsBy0RgH9jhUYGHTf+5/xsLLVr6lZU0zmjbtChyt9aSTybOXZEl29kU+lJIWeU8pVQEyqMRRsw1mhxfWkY//hRJlvOH926wv7dF7XSIDiKMcczixmjEKGNxfom//ff+a3b/RWP0+NovpxFrLPu7XXr7fer1Gq1mnWYzYNDroQcJ482rvPX1P8BiiESMUo4Yta4z6nmOEBCKnOV8wmInYq2zxv72BvkkxUcQWNDZBOXlZHnMbjcmqS1xZ3WR95ciRjsxWWrpkrAQCXwhaYw181aykg4wGHKb0M5iWjognhMcO7PKgDHRe68zv62pjQ2D3QHX13dZnG9ge33izVf427/+Zf53/+ybxEU3/xMnjvE3XvgY3xwlCBRSTlHTSsjKar0ZXJ2kcPrTWkGcpFirKiEtTTJP+UWgo7DTisUT+D5XbtxECMHy6olKYKWSIOQBfzbNcxKToYQLJkghiGTE3NFTfHDnOr/yaye4lO4xYUiqNa32Ir6oc/7Mk7wWfoN/+q2v829/9a8zSuqsj7cRQhIEEVv3rmGt5cSxNa6+8TYz2c8iLeR8QIr7pMI9gl6a8Nrl93nu45/gWz9+mflOh9XVI5j8YPS3bPJ2RdumEE5TxbDui7UVpn1ZAG6n8TD3s2pItZUMFh9BTL+1GqZyG9xnrC4jwboy0d1jKVJUZROAkEXe2DFOh35QWSpnTp7ivZ0d7t25Uwg3LEjF3/vptUcWSPgomtLKaY2mdBdrtGHQGzAaDJhv1Tk1vwCNlKS/z/nGPVqeoCU1ITmeccSwigw/cLmpLEsJGbE21KR+g6t+g2u7A3Su8a3gcdXhYnuNvL9HvNLAPvcEN0aCtb1rfNpOWE8nJLnHvobNmsfNwKNu5mjlkkYGoRyxF3hsSMHWtXVWg4TEy2jXIlazkK1RTtbbZ3dri2DQZ5B7rL33Mr/3Nz9Pey7E8yQ1M+by1h1CdRJjFNaOHfQDUzYt4WSO3BiM0HjSmUEJkFo3zaJozHNsxK4IXlgB0mKEIS9IUludJb75J98maLRZnptzpl3pfJUmUVFAoAqy27IlTGuLMZmLfmvDWAa0GwF//sYbCCE4cfHjjKREBCFnn/sCV175JsflLkdOtfmf/8M/orl8jGMrx9nevIUAsgJrtrQchXG/aF8Ras3pdpu9UZ/NeIwVLriihWQiFftWMxqP+dQXPofvB6T5DItxVV/s5sOaGeZluD+0XfrxgplOjZn3xOznxX1e//TVYljXVzn72n2nF1SCbwooTqeQMvdtxS5kzDReoLUhyxI6i3MsrywRRSEXPct/9ZNvP1CmHjY+QpPzzGUXoJmigM3wfEmbkHCzhx8qltohc6ZHJzHUspggS/FzixIpC0shJ890yMSY9+9JVsY+F43zE3MFb+cjxmbCRb/DJ4IFas0AfWSJa8Mtrq7f5IOuj+jtc8zmLA02yHWDbq645cMOAfdqEfu+Ig01XiaRnsVQ41htntNRDisKGydsTGJ2bU6apWgd0/A9cmEZmgG1/nu0bYrnCZA+wh4jALKiBUFYgxGFL1nkLo02CK3xjMWTgkQYrJKMydjPU5pCUlcuIGSMIZMGlEWQ0dIJTywu891XXuWtH/2UvV6PC5/7Ks0wqGjWoUy+F8/CTnOSFUmQEnhCcu5jL7J75wpv/+RbPHX2MX7nxmWay8dRSrHT7wJw4eIzaGv43/6jf4Q1hvbKMb70l/8GnlJsXHuDKAxdMG/mPCDQBjAZy9bw2cdO8e233mGzlFghQCjOnH+MH7/yCvNzHU4cP1Z8cioAld4yFlP0GdrMFSQooYpqJDl7w24zsw57dVZLTpemKDyAmTzHARP4AUEWe0h4xexRruLVzsyvewZO5K110XmHoG5QUnJna5vVo6uoVp2wFoGAIPSJCxfmUcdHQh6oLASmkyxwZVmNRoO6lAx7e8jMJ/YUtUAhhcZKCz6ErQZz544SLwUkvuDImXmeugWdtzdQJiFsGmw+4PGh5vP1RfIjbd557igmjem/b7hybZ9MSPpWclmnrDZajPOA3WFMXxtGE43KQPkh2jP0hULaCG1CfphrrnUNMu5jahGnn3qWI7LGzt6+21n3d3nay/CSe9zaSLi+McLzIazV2a1bJmFOFko86yMyjYwzlM5o6KKTINfYNGfiQV4XdD2P1eU1duM+WdonFj5GS0c5YQ0yn/D8+VPsblznpeUj/F9/9x+z1e0hpOTsS1/m6QtPYlGHURLvGwcCIYVpd3L1BBvPfZEf/PjbfP9H3yFqz/Ps57+KrxQIh0qY5Rmnzz9JpjXdezd4/gt/Cd9zGDPJeIgvBIPEAo58x/UQuihxI53wqaU5TpJDCjkBkqwQJkW73WEwHPD4hfNVg/Jh1SWEI8wRniKMAqSxmEy7aKdxZY15nlXmKkhyUYbDnD//AJU6u0Cngvsz5rA85LDY2g97t/jOje4uk94eT194jKub67x49gRCeqgCGHw4HDMoquEedTx6Rc/hv61ECOuAiHVOd9IjaihkkhFYS557TEyOaQf4802azZDO8jzm5HG2gxrrwx6h77GQ9qgpDSpn6FsudhZ4gZA55fF2nhPf7WKsJaDNMePRDzSxFrwsLW3ZwHgePTNiR2dkvo8yDit1sTbH/FzNwRBqg6optrImQS0mz0YkY80k3qM/GLHX3Wenv87JT19kRR3nzs0Ndvb6xGmG50Oyus/43CmWz5xgLmwwvLfB4PZd5vqaE90ekZ7gGeFo1JQl8CW7fp3Ta6f5o9d+zHujnxKGdQLlSup8YfF7+zx34gRHOkd59dYG290eH//F32JubpHV+QW8qgTazb6wgmna9JDWqXZ8txo9JXj+45/E8wQ6yzl/8RmaUc29K6TjxPA8pFQ8/bHnyZ78BJacfjxge28HnSW89PGPs73Xc+ewrgNCkCNtzlrD4/PnTuJ5PqHnuU1KyCJpLguEhoNrxxz6G2aDqY4USfoK31eFEPqUoRxdQHhaY9BZ7jSrhWnDt/O3S9mRxUmmNO1TjXtQxX74KNvAZgu7ZucdHDyLMRohJRpD3Q9IXbQJ3/d46703EcDZJ5/n6rs/eaTzPrJQ6hIDRYjCfPVAGGqhZUEpIgxHQ4/51Tb7+310LjBakU40w3rCUj2l3jiCbHTYWe8yGBu6eyMYDAjaGSu5YqW15KjxfvIu7+92GfYt3t0e+zWPXijJpSJKoT/os720BCsrpCZnt9ul1+vRarcYTEaOz7AZkIwnGD1ib2/f8dRnKZM0KchNrauEKUB3TRjz5t49Pj83jxCSREpGqkYumvTqDVSWcntzE7VwhLlajb7MSPs7xPk+7UBjvJDMD9BKEvcVt+7uspO+Q80POXXxPEtHTzDXXsAYUGlCtrPFu6/+iP6922RzS4BgZXmVxVYbrQ2X793i5uU3CYKIx558jqXOggOFKhZDWc1ywDwTFiWKgJHyePFjLwCupjc1jvq9dE9VYZ5JIfG8QpiE5M5oiNE5y3PzvH9rBxBF34RGKYOKh1xodsi37jJqtlECFBZfKZT0ptHLmdVrhUs9zLUaRVrEFo3D7lqlEeR2RvdVickS/U8ivYBASKxwvpvWBl2UBma5Js01uTWk2qAyZ8Z7nj/NFcqpMB1UnAd9zemf93ucBwVzGtsFsFbQqtVQvo9nDMJKPBSXblwHBAuLK1z9MAGbGY8slCXi3PSSnLPuB5KjShFIwfGGz2rosRFYbu7lJDqk5UWkqWB3xxK1oZ/c5dX3bqAaLVCwORkgah7H2/PcOXqELGjx0/mAG9sjtLFMkpx0BJmyVfI4zQ3vbm4SXrlSVBblFaelEY7q3N64VZQ2TSfZweRrlBB4ShZh/eLBW0E7EfhDzd7uGBMLMhmShTV0veMwTXsbXL99maXuCN/G9M2I4Xyb0fHjTJKUveGYWEvW6xkbehu9cZe1EydYmZ9HWEsYRjSaLbY2NsjmO1ybjBnGI377sRd579Zt3njlO1itiYc9hvtblS+zfvktavNLCATLJx9jMuwy2Lu/jjKsNTl58RlOrJ2g7k278QUu2mnsjH90IKA6jaQanTmhDTwyneMWpxMem2csmJzT9ZBR3Gdr0CNJRdEsDoKCDv5gyRMWi/I9jh9ZZq83wAKZzdHGbTKOuMk5dEocFJmDiz8Ha/EkjivS94p3fMcRiauiytIcbbQzu40hTR17uCyi16posSsDNgev19531ml09+Fa1lhoLXRITFb04Tpul5m06yOPRxbKlh/RbncYT8b0RiNn6xtLnqZ0wowQQVvDgvLwlxpsotlLAsSxU9QW5hhMMta1YbQ+Io199rv7zK/MsXz0FOlezPr+iHfsVYbePlf9MYO6D1IxSGNyW4TdtUHmllQorAwZpwaba9dsXG2us6uNaQhfCozUSHIsrtRKFkUAQkr8TOBvJ6R9GI9zulrSuHiO5qmj7E16LIsJCyKhHYw5uWDwmz6pnOf7aZOJH6E8D90fMkwtCRmpysgFWKUQ2kKm6XX3GQyHGGNJtEAELWIb0I5jzhxZ5tr19wBoRiF/7Rc/xSfPnWCoFP/05Td45c33MNbS3777wOcDMAB2b33A7dMX+fQXfo2GX9J5zyIU2IN+qnVzJqyj3Lv97k8QQtCs19EmRxqXVTdW4BvDufYcR6VEhIJ2vUU4TJHa4PkKTzoIxsAPDl2ZBSs4d/wYb166VjybwAFeS2dumzQrScQeEDmdvi6sqPSWOHBMgVKnIKo5cDElZVESaB3oVdmoXnTd6NxtOkp5B3KTs7GT+wVz5p6wpKnzF+uNOn67SY4hUrJIL4WkWYofBHj3zcnDxyML5b/zWMBT5+YZJD6vb2Zc3c+4sznBxJKwXmelmdEKBQQST+Ys1EJuB/Mk584SNJsEQqCSAcOrt+kNBtjJHl883eCpBajvjKhNMgI74lUTQ+IQ1pQQKAl5rstHQi6FC/RZkMYhrlUh+6JUqxLI6okVE+5+FADBpXkiXR2lhhvjIWFLkq80Wb3wBObUKUZbd/jlRgb9bdLuHiJJGeQptZ7k6LFVnvJHRFmPE6rGeDlhG/iRJ7hzxVGgaSERwnNlYdqhaQscyFU7rLGtJVd+8gb/+1/5PH/aH/LF4x1qZIz279Dd6GIl/OYnl/ntL/426f6IySDnaC3lZDt3ARIpHZ16Zklkna9d3eUPfvg6P/j2P+OzX/x16n5QnXOaUHfDGINQJYOmZJKnZJMRC50Ow7HBqgClMxf2B3wLa7Um4txjbJMT3rjhVISQKM9z5qsQZEX6Y67dLgTK2bD1tquFHexucnV7h/lWx7GrGY3veTTqdQKb4ePqf63OXR9rlZsoU0MO5oPSl3R3wywUvqBoVEY4E9uX+L4CZmgRjUsjWevqU7M8dwiCRdeNZQZLSRYtc8KZ/eUpr196DYBOo0Pm+ZjcQAAWRS0IuHb3LkdOPsby4uKjitqjC+Wnztc4NtclV5qPnZ4jxuOVy4bv/fQOzSjmcy+co+NZknFMrHNSavSby1ytNTFBnRSBNZLxXIZYvMMXj9R56XyDiG1kOMDbGPFYIhCyxng85i8yx8yligWcW9DSBQxMkYJwjbAzpoHAtZjNmFBVtLwKr9si9O0EukRYij3JtTSj1Wpx4YkLpO1F3r92k6XRgG6yS5LGCEIiAanSTHIJexNO1CTLDY+WnECoWSHjncEuQZZgTB1rFaaAhFBYZEELJaUlUgohPQZSMbh1my+mW7SEh2r7xAhqWUAoLfruTXQwZD+FdKdP46imrhLkRKCNYDy2jMea0STnJaP4wm98iv/0az/mz/7o/81Tn/4Vjq+szXhwUxazElQaY4izjCvvv0k86PKFT3+Km3e6+H6NPLMu6motNTxOPvNx/ldf+2MGk5j/7C9/hWb/FoxGaFyALQgC3v/gXQBOnjjuxKN4CLoQoDyZMIonSBWgh2NKHN1gOCGUEEhJIwiJfIXvyaKSyoDOnUYs6lVNiSLo8ituoxZl0X+p5x5sOAohkEqglDt3re5Pv9dorIE0M67GVxtybciMpmwcQDiiX1OUCGqjnbmqHci1tSC1di5SYSk86nhkoVxph9TkiEzk1HRONMlYSj2enA9YbGREdkBDSGoCrCeprzTYVzmXdQ7WGRf+MCW5uU2SJ7zb3eFj+/uEniRNFTbNCPspZwKPOAz4icoZZlnVtqPzmVKvMn906BrtNAxZTfz0TacNnKUrik1V4JLzropjZHw2TJ165rNAnabuMOh1ud5cwr9wBiPnCHp3iSZ3aA6GMBqxbCW5TBjWDLUg5O6tDQa9DKuDYhcX1f9lk68z21yhtKc81udrXD6zwMXhmKCTEdQNnvapp5ZxnBNnGVm8zUoQYY5L5ucUAovGoxtn3NjZY5xachTSaprXX+H/9Fc+w3/6ez/gp9/4//BmvUUQNVg9//Q0d1dFPmFv8za9u9dJR32eOHWC58+c449e38AYRVaY/l4Kj586wT977316iYt+/t3vvsxvPP8Zfvru+1URg+/7iKQU+uk5OPS8pFL4QVDgtCqMtUwyzcQajMmQIkEK167meQpfeYSewJeSUHp4ymlAD4u01vVmGl0I6P25kNlrsLiIcvmihYqr06ESAkoUyAmiir66QgJDnuWkuSDJ0upMtVqN/UmMZyXJcMJAWxqLzeoEJYL7o4xHFsqmrOFrjbY5uxlcub7NjbtDIlOnpgPibort1IiUh9E542xMmBoSPUR5LaxO6O3eJe7d5ol6i+WmYTzcY2R99vcUQxvi+yFrmWLgSTy/8DMQB+AfYRqifqBwCqoC8nIXO/y50nmpdrDSDMoVZqK49OYNnn66zRc/8wv88EffZjPtYZsL3NrS2M2cF5ZWOH+0TW1/h814j3E8ZtGvMehOuLc/IqwfxaoY32QkiUMkt8J1k4B0kTkh8LwAT/js+XCvbXis0QTdBa3xyfBDTaRC9shZbkoW6x6mJdDjPlb7ZMajm0zoWYiVj0AgjSKzgsnln/K//rWn+M6tnH/0nR+R9Pfob966byMDt3ktzc3x/LOf5fkjS7x3457jHM1icmEJhaWpYO30KX7vn/weq0++QKOzyOUf/DGxLwvKOkkQBCwsLLC9c5cgCFDKc/JfOouz56xaQC2gEdZBdCIUsvB7c2sYJSk2Tl26RQgwBs86P9T3oO57NKOAtvLwle/ckjIGUVoEpjB/Zy7CFucWqIPBmJLjonjFFoJa1eYqCJRHnRBtHMAYQFCrsbNxEzO3wMrCMkeXF5ivO8ug1my7ZvRHHI+ep0zHWAmJFmxvWva2aq4iw1q6I83NbUs3j/E8TafWIM4zxHAEepPUX0GYEZMb66wMBnxqRXH2SEZQXyTNGhhhuLlu2R1KrmvNMEtda5d1sPKmyEuVnRYO9cTcpxmrSKK002MP7FCyeBAuMlbBeViBlQppJS2/Rp7npHsjPnjrXXobPQI15sY3X4HaHPV4TN2MGXkDMjRYyUoYUm/52FDw/Mopjg06/PkH1xmNYDJKMJXvI3CxRhc88YManvSpxYbjowyyIcLTSN/lf5UnCf2cuoJ2B4IwI0lyhrkhQTPJx+xnIxIESiukzdGiwW3ZJp1boR4scuHZBf6LT7xEMki5urlVFJcLjPQwXgjSY/XIeWwWsrPT5+2sx7q+jFU9PN9AapE25excwGuXP8AKwfGLHyeZOLr0re0t5hAMrMMDWlha4OY3b7K2eoR6vQ44P/8w6PTmzQ9oz32astvDFikaa8tAp+tdDaREKR8hHRZrmmkmWjvfLTeoWONPHCOYQhNKCD3X9REFAZHv4yuJNBqMw4+1wmlXt1nMwoCKwqIqhzm46Yvp6wC74yH7G7c4dmSFd2/eYG5hgTPnztH0a2jl8f3XHKj1xQtPPRCL6WHjkY/8xms3OHk0QhufO9uWQZaRSshtTk9nDPsCBpY8GbPaGPDk6eMse4bT401ubYbkcx6jyYhIGkKdEQQtBr2Mexs7pCKkaTukuWUioev7JMORwzqxeZElE5U9ZGzRCVCGsw9EtEuGq8NjiunqUldihvVXYIUhizPefuMtPOVz7YNrLqBgDCIZEvg+v/WLL3Fza599z2e4chI1GlJLevT1kKw/YGIyjIXddEKqxkAEuASzA6OaGRaEVEihaGcZje4eA7vPdcYs10I6zTp1JRFCo+qCOEsZpzkm99A2QEifQS7YyWEofZSKwPMYRXNs0mSQLBDFa3RpQqrJRjlGzGFEAS0sfKSuIY3i6rpFSIPnz2GVJhcCY3WFuO4JOH3hcf7vX/sT2kfPsDy/RNrMCepNvv/Wm3z22RcYbu5U7GOHR7UxzmyQ6bBHiVRfmvaVczKzAR/A4gU836Hc50W6RlqLNtDPNcIYlMkJPUXgKVQc44mEQAp8KQiUKJjBXLuWwgFrF3sAYsbjtoV0PiwRYrGkOiNPJgTBIoPBkBOnTru0DBJpS5YR8EIP/19G9PXKKGHvpiFAIYxgsVVHNZoQePSzEd1+Qncvp+FHHD1ynOEwJdE5H6PP4qTL24FGRgJ/bOn4iizxuX01Zb/vM9QxmQ1RwnWja2kIgogwdEnizBb9g8qlMNI8xxcBaZpW/Ayz/uMUTOqwc10i0rqZnjbQCoy0QOHYF0XHgENZMB41k7A0uY45v8zOmSf55r0xC/VFVrjNSFsWhoI0EYzHY3azIVbVkEKQ5znj8ZhmpzN9oNa6BSQswmp8EppiRKcWkGQ5G5MRcShYUCHYCGmbQMQ4FlzP6oioCarGXhhwZ0kx0jW8rIaQdYZRgJY+bev6+ZNUkqc5qdFu3xdloEtjRYIBMuta3oQGFXdJk4kDD85zpJWEKDzpkeU5kdEMJzH93h55mvCxc2cZDEZIWdABPgD5vVrY9z0PHpwDmX1iMyxnpWNnMQfyz55UDmfXGtAZWEual6zdUwBlhSXwJKHvEygfX0o8aQk8D195jp3ZWsqyQitslUY6aPoedJaNtdSbTZqNFhiJwcMz003fSFyp6SOORxbKX3nsLBOTMxyOaNd9zp46ChIG4yExluFkiffYYnVtmTidEKeZ41UwY06MrpI1VvHnIuZkQGOlyW6m+NN7Ccr4tLw2Ya2O9RUoST0VNBsRjeYcuTb0hyNya/H9ACEEcZaTmxxH0lPCbVQuPBS4KAeF0mLNTCzugB8hi9jhTEqlqgGzICG1ln5tjcnCKnuZoq8kAyu4HcyzPoHH8Vn0hgQ2JZQBrZpgs+dqOYfDIc1OZ6rFjSZLx0RhzudfuMjmB68TN44ysZodGZA0mlhRQ0zapLaOETUQPkYrRtTw8ggPHy19RqEksRYTCSyKXDiui9wl9TBYEmHRoSA1hqxsKC7h5aCoMdVYm6FGe5g4RhSZCIklEI7eb67Vortxk+/97n9VdAxZnj//GD989xoycGiGWeYi2EmaoPMc5QeFxjnQp0FtbvGhAimqf2c1bBEs45B/KJx+k1qjhOM5FQJQspDhgufDWlKdE6camWmUyFBSEEhXSOJ5kkBIAula4AJf4SkH66mKiKstoVtsGRQqc5iWZqOD74cOO1aUCGuGCmnww3aeQ+ORhTIJYsLxmNMn5qi1Q6Q3Js9zan5CYHKkn3L2SEgW75OlFmMFRlhykxNlOcf3B7SjGidPdei0aty+vk2CT2+ScI+EvLePF/oEQYDwQ+JUMck04/HYpUMsWMbuwRuXCC7Zj8qd1BaRt9J8ne34r/yFh2xYQpSho2JDnolNaCXQUnE76tDXPuNRhu8HGF8hGzX2TJOtSZeF0QZHsh6NMKGxL1k2q6RYut1eoSkFSZJg8pR0PGT37g2eOXuSUWONV5IniNoLDGoNun6LzEq0cIQ2qliS0pco46Es+FagVEQGTHRCSu56BAvBV8or8JISUm3IpCYlw3puswo95RagtshJhk0nqHiIGfeQ1uJJ6eqbZcaZp57g7/zpN5jEcbEIXR/ib33mM3ibe9gCnc9ay90791g7eowPLr3PaDwm6ExR42bH4rFzLnVl73/PneP+V8Whn+X32kLzm9LcnYnACuEQGUCA8g8FDC2x0VidO98Zh3If+B4qEyjpQLGklITKI5QeQiiUBGk0u/sO3uTE6hq21nDzhVtzC3MNfvz22zTnFjm+ssxWUUf8KOORhfLm+Y9xtL+PxwSjJwzHY8IwRCEJbMRu2OaONphkSCQsPi7ClgcBnoioTcYcqRuWog5X7va4vTVB+wFDqckLlDaBhnSMSSZoq0gSTZq5CKwRzhARAqwUmGIXKlHHZ8esXzl9T1BWjs4eV/3OIaFk+sANkiGCa9YnUC3IpesBxCC1JYl8NvAI8oi4uYJXG+M11qnnNbLxhPX1e/RHQ1qtNu12GyUEjcY8/nGP777+U3pmjjw6jV9bJTeGvCCy9dAoIVFuNp3Sto52LZASZRImJmNiYxKduQCOgDRJiYKAZtAgEQlz7YgjDUna3cAagzIZdz94gzs3rmCxPPXsi6zvTZj092l4PtrkxS4PR48t8/r77+B7OcdONcDCaKJZ3475yfXrfOHp50j3BwTWYLR7XiVEpqAs6HiAgImyyqg8svTpZjfOMic4+0Hu+8N9pmxyE8V/VWPbgXRIeSaXp1QI4c88+QIA2yXCsTZ3pjIOhNsvTHQPQag8bt68igVazTZJGLnUBwJpcjxyhqMRnXqL4BEBs8rxyEL549oqx5sL9Ec7rHV3acUZGo88qtNrdrjRWGXv9DJi/y7x9hVau3tEwwm5MHRJyHRC1o+5tbnDlc2Y/SygG4aYQFaMt4430lG4GjyMo94pwtduF3LB0mm425gpKs106menf/adg4+pdPDd6pHTAEP5YIUAI1AiIPc8bm+OuXC0Q+iFgEChCEQT33hYM+FeMOKuEHjZiJ3Jy3S7m8go4tjRY5y78BjtdotareaES1s21+/x+qs/IbUDkmwXJVp4JBg6DnAMg6rKAZULLkhFjHGaEkEqoNaoc6yuyHPtNi2dYdc/wG5OyLOUt77+PX7U3S3KytyQVZMxfOfrf8iv/upvcGOYFxUuzkyTEvzI5+q1a/wH/+YJXnhyESsgzTV/8dNtfv/r69w8ddrh4WR5UdhhqRiwRVltJSpxKUfBd1ZEZilM6VJKTYHXM9WilfzamZ+zwm6L77JMXZDirPbAWigoD3EPv4yHU7g7tgK6Bit8t2qsw9lNtEZYjck1wqYO2xjIpQsc2Twn1ZbETthnPL2u4iyPOh5ZKNevbSGOrTKYO8eWnOfpxCFI35k7x52VJxlGkrEXopZPcuT0KVbuvol5/zJJf4QfKDLrsZdLJjZEdtrEgwnNwCNPLClUms/t9q6zwSqJ1dIhqRUT5/rrpruvKYSojJQ5YTKVAJbrwKKoYDmK70fYqllZSIeZI4RAKIUqWLmkCpnMtamHNcLGCp7uMN9aRCDJE4vOJbmWGFNHiw5JmIO3iolu0Bu8D5OAo6fPopRPnmuyLHNVJ8Y6vB6twITYPMSXTbQNCYpSLk8GtOqNIg8XY43zm4RQjCdjpMm4/Pp32NvZ5JX3D4IyVY3PAmqRx3NPtVg7ElUL5YnzbebaIe9c6vI7/+0tet1dPOEsEFtQBLbaTV59/TU8T/DE2TZIt7xCX3LsiEP71sZihcRoiyGvNs7iNEWU3Pmv/cGgur7Lf/HP8GoNADqnnqCzdIxms+1gQirxsVVQDlHCdbhXp8AhJWwHM58rx/1+3AGBnCkyL5uj5cxnrJ1+QkqFJ32wllxp4jyne/sSzXodZTzu3r7FXaBWq9Oea3N8brV6DlqDflBC4CHjkYWy2x2RZ3c5fvIIQXOet1ZTloYj1mOP3tY23lyDTs1jTmecHK9z3u7DkQ7rQUg/M7QWQkxniXFjHtVLGV65Q9wdY9KM7iRD4+MYigrf0Lqpt8JFwQpFiuN1MAVhZyFsRdOPWwQgRQRCoAXo4ikI6yNsDSkDhKcQvsJ6jnnZC0JUECKVh1CKzBfoyEMGPoEKaIgQX/qEtQb9PmSTIb7nE/hhEQ10zb/GGsdUpctWN2cCKqUKf3YauNAFvRrWMXwJmdLpBIRW0jT7oDXWat787j+gu7vN+p0bD302tZpibTWq/vY8yRc+tUzou+Lqx061iEIPTx6MGgLMd1zRusOfEQV/isFazdG1FX762st84qkWjZrTGuU4UEVbaEJTaI5Ku1mKyhn3/tVbU8qByc696vfB7cvc80PCuRUWLzxH1GzTnlt2pnuBn1oGbWYjoVWo4MOqZWZt19kXC2mv3raFqV35osVGX2l5d88WCpcJssmIWi1iNBrRabdZmF+gM79AWAtYnqsBoIKI8Tgly/TDr/HQeHSMHiJGk5RbN+8xWponawYY22Wue4WlsSI6Mo+/dITlOGOuf5c4GzPKBc35BowSdveHpKMEEfboiDorkeLyqMvR1QWCgaA/hkmWOUJWXXoGDrzRoXA4LBsByCLUXe6YRnhYIdDCIw8i/FrTlbBJ193u+T7Sq2NUC1RQgR4hXcmbFRIrPaxy2jHwnECGYUjoBygkSnjUaiGBUmijybKcUTIuFoUDfpKFaV0jIgijKt3i0LIPFjI481ARhAEkKfM1zfi9b/DyD/6c0aA/1XRAre7xzJPzM0/DLaZ6zeOzLyzRbgbMdaLCWigqUAoUtjLtY2fbjKfWPbOrVUqJ0Sl5miOEYH9/D2MMzz+z4BATENXCHI2dKdxsNNnaGxcpBKCgrYdiEy1SGlU1VTHOHK/TanpkmebSjTE6S5hs3+bO9m2Xv/VD6kdO0D72GItrZ4mimstrmENSNmPOzm42duaXD4t7lgYu1YqaRlTLn/e5R/agKT4ej1k9ctSxmxUxjktXLgNw4WPPE3kh9l+GppTGJ5MZwzgnvHuHZhizqLvMCcNSe4luw+M2ivXc0NULTMQKUvrM2R3WTJdanhJYjU22CFVAP5aI0S5n59q8dKJFFmsGieZu33J7Z8J+Umdfj8kQLpktPayUaKnQvo8MAvwwwgQtRNhGeZ6z632F8JzQVZa8tRjrYwgxhZ/gWk0MUgk85THXatGo1wn9kDCoEaoAtEtMWyEdVZ01pFmOsCV4skB6wvEQUuTCRICfaALPx0rnMDmwLI0xRZWSi4CgPCeURyKf9Vf/nJs3rtNoePzCZ5aLML3ghecWqUcezUZQNSgfXmRTE29qjLm1Mw1f3bcwrTMFf/KWiyCeOXWed959nzTJyLOM5ZVlrl27QrOuOHms4YTcTk3S7/1kF3DI+aUZaQRovIp3xvN8lJDkZQph5vT/7m8eZ2WhhrGG/iBlv5/y+js9fvp2jyS1ZMmYwa0PGNy+xD0haRx/jKA1z/zpp4jqraLBoESyP+w5HpLQ+2bLFj7oLM5dWVM0M6ezk1X+VqjnOJmAtawuL7to6/wC4/HYwW8KQZbHhVYVFXv4o45HT4koNwmtNOeCl/ExqalrD50ZtrKceyPNq3HG9ignzSNIDcbmNITHaixY3Olzul6nUWuyn1o2+xNGtNjJF6k1TkEzwzMTlhc8xKImTk4zGsWoOEYYgycV0guwnk/ue1ip3I4qFVaoAqOzoFvDgTiV7FVFtAElnEMupazYeKWUBErRbtWpRyF56vg3c5EhbaFtCmlQSlGrBUReVDwcQ+RZ6raPMZr9e1e58vZrKCm4+MTzvEcEOieOY7I0IwgKEp8iyCKUQnkKXxg2tncIfMl/9j96isX5yJ2zEKxKFYiDi6WKc1RK4/CuXh7IfUHM8nNbuw76UXoe3f0uWZahkBxbW+XVN17m6YstmvVpKmGWTwYgtE5IpRDk1c7gDqgHEaGS6Nwl9PUMiVC5iQkhme9EzLVDTh9r8utfPMI4zrl0Y8TNOxPevTJgv58zvOUYwPbe+SHBwhHqxx4jWjqKHzZotuZI8xhfukICITxKI9cJXRF3F7Mb2NT/PBidvV+gZ33c8tp3N25gdM65Yye4fHPLNU1o7W5fgM4cB6byPKzRFf3Bo4xHFsrlpQXIIjq9DR43E5r7PRINRuWkeZ+5/oTn6l3eSSOumzrKD0iBfdnGBm36aAajlFPnPk6vNY+SgvM0GFHnVSshCJgkMDCGYWgZRyFJx1VDSK0x4JgkBI40tEzmFn6bLCZVFVunlFNtWU1umUYREs8IPCuRQhFIIDW06pLlhYh07zZgK1hTiXGVPZnl3tUPeP3tVyklQecZ3f29+/ya/Z0N1lYXubu+UYEZz5qwU+bnAKOT4jWo1/yCNqQIZn2IuwRMBfZnDDG78ooxmmTs7iccPXqUjfVNLOApjygI2di+h1KCX/rckYJKfLpUx3HGzl7K2WPHORNE/NgYjBe6lEg+wS/IULI0gXoN5QWMh0Nu3LoNwMpiSLt5sOyszDdHUUAU+Xzq2RovfhziNOf2+oSXX91jr5ty8+6EdG+DdG/Dfc7zUWG9urb64hEWTzzO0topEIIoCIs1MUVQqDTsrG4Us1BwD53F++baGEMYRgV+rXttvtXi//W9H+CHdc6unfiZz+bwePQuESDONGE2ZK6mIXO1h57OyK1PYxQz118nbxxhtxbRjwKkjfCjJnP1I9RbF9mfDNlvrWKDOXJrMHhYIrQ1ZFlOZgWjKCEmR+dAZpwgFbuvlCWCtUMvR7mFa8vidCAQQdElIjBSVEgEFkM9lJyacxE03wii4Tr9rRuFH6Z577s/4c/v3HA7+0OGlOJAtVi95vGZFxaRCC6eb3H8WJ3bd0f83X94g1MnTrCxJQ/skhX7lnV+n/QV2ty/EMpo4OFl8ICU30cYhbYtQLjubk7o9jKeeeYid+7crQCmz547xTe+9cdcONPi1LEW7kOi0pbDkabbzzi+WuOVS+8iAAUoa2m0G+zv7BKGAcKTBM0mOjWocVJBtsy1PcKg3EYPX+H0mSEsUc3jsTMtzp9uYjTsdWNee6fHu1cG3F6PsSYnH/Wqz/dGPXq3L3NDKhCSudOPE7YWWDv9BK1Gqwh2lTvMwU1PVP/M/H0golt61dNLtwhU6JNrB54FrgoqSV13kCoQBD9U1g+NRxbKyb179EcjzsocEShGqsXYazAWdXpinjQMyfDZCZvE7TkmUZtaVicQNQZ5xK6fISKwqqjQx02atVkBfS8IPEXgNUmkJs0hyXJyo8mtZpIl5DpHVbctC9/MBX0QgkApIt/h7Zydk0iTVakT3d/g6k+/w/fefnWaRzs0ajWPC+eaPPFYZ7qDWhBievyZE01WlmrV30pK6vViGosHbYzTiDs724AgzQ4KuS2xg4RFBR65Fhw7fowrVz6g349pRo3qOdrqe/mZCvGhz17AtDRNgLDk2vLHf75OrVZj7egxtrf2CQIfYSw7+5tgDV/5haN4yqM03Gxhmm3tOc2+evIUN2/dRkkfaTSesJw8tsK7b7zM2tFVlo4ccWmOyQQmU8342ecXXZDOTi9wutHZKkc5e88C15S8sljnK1+o8+XPHCFNNYNRxntXB1y5NeLGnQlYV9xgtAtE7V15E4D1179DY/k4yg+reTg8V/PHzjC3dBQhBIvzSw4Cs9yQsPSGA0aTIfcuv8Fg4xZREJBkGX69RmZyNz/Souz0gU3BSx59PDqanV1EtU+yWWvwXSXRzYCJFxILn4Ftoot9NpM5EwE2DUitT2w0ZBMEgkAEhH5UQMY7KH5rDUmckaYuca1zQ54bciPQxUIy0mJsXgRtpkQ4C43QYSdhWQsnDG+9ybU3v4+w8M2NO858mhm+Jzm+Vqv2vueeXmR1OXKLWRhOn2jSbPgoT07DBoVUPFRDVU4KxbeKg7uvEOSFUJa020IIfOXAlY4eW2PY61KPfN5//32u3RxybKVx4OurRzx11w6d/2fFF6e/GeMixe9d6XP11ohf/qWvsL/fL/JpmiefuMjX/+yPuXC2xalj7YNLV0CWGf742xs0m01OnjhHlnqOZTqeMBqOKFBei3RGxF63R0PAztYm1lrqNcXJtfpDQyofNmaP9D1J4EmadZ+jy3W+8NJ0M7x+Z0iWGnb2U/7pn22S5ZbVxUX2u5uM0vSh39+7W9CxC0HYmj9AawiQjQfk6RTD9fjqKmGzRRA2XGNEsYs6OJTppv5Rx6MHeo68ROIpbqmQm1qAKHaRwkwEi2dSlIGaFgjlgSdRkV9Qa0uUlYzHCXluSNOEPE8wNncBAOO+y9qyIMDlLI8vRvjS0jYjJnt3HcFOUTXywZ9/m96eo3B7bzLGFMzBAsGF823qURkZhPNnWlw832FlIarmqQz2HA6gVIx3TGOG1RI6JASllmbmqDIlIKXk/Plz7E9yV6BtMobDgeteTzP293bp7u1y8tgaB/v6/sUPYy2vvr3La+/0yHPDu5cHrKysUgtX2Nq+TVCLiAKfrb1NkjThq188g++pqb1c/Hj/apc762O+9Atf5tqVDfLcwa+Eno+0knRrn2eeeppr16/y7T/9E9689AEWyDIH1vxrX1xhrvXhbUyldhIzG54zGafGfPlWOfNe9TDh7PEm3X7KrfWYMHApsS99+gV8P0R5HkHoWLeMsfzO7/8hw9Ho4AVYS9Lfe9jFVee8s7HBxs4Oc3PzfPL5l2jPL3H33h0843gw650OHgKlS4q/RxuPLJSx33T5QlcKg7Cuml4piRauEl9LhS4K5LM0IZsYdE9URdI6d1EooRzWSq2gPPADxUo7ou07YlWTawKbcvet7/D+N3/AsN8FDjcsQxioCoP3pU8s8NQTc5xcc6ZfqxEU0PdUocdyMmcjbKZ43VQCVQYAqI6ZktlQ9WOW4yD0ykEPUAhBGIaMtntcvXKVMPIJAp8wCKnXahw/fgwl4M033+SJi+dnv5X7ttgiFC8epC1/xtAGvvujTX7va/cqwOSXXvos82c/wY+v7OBllrrNOba6yhuv/Zj5dsDqcmPmG9wk5Znmj7+1ju8HnDlylpc/uMxENzDK0Ih7BHkKXgewDMdjfvTmm9U3BL7kL/3yUT77/PJ0/qrHcPCGqhzrzAboZnYaXS4Z5bu9hEmsiRPND366h7WwvhNzdyOu5qnZiPjg9j1ee/N+KrrZ3lvlS6RXWjrTczWORKycb5OmGUsXmng1Ra4t3csTxjsp2+/v8fWv/xGe8vhr//7fJDSGJE05d/ZJAk8V+ImP/tAenV7dXWdh6jmksDTX6Nj5fLkx5FqTGUMOLkVRkNh4UtKMfKwNaEaSFbmHsobRnXe4c8k9uPf3ttnb3rjvvAvzIctLAR9/ap6VpagQGueTXTzXIQgUWEEYFHARB+zMw5yP4r73xCHBKyNyws4KmJ0KaymUovrU/dNdaEpjDRsbGwihOP/YeTqdFp1Om0a9TpZm5FlKd2+v6gm972sOf7d9YMbxQ4dFcOV6l9//2j0+/tTHefoTX6bVaDFIJH96+S593WE+T8hMQqPdZmd3h5eeXaAe+ZQoD8UXkWvY76VI6bM+iTGe4smozWaeg1J0VhfZHOxy5dp7rCyF1TU8frbFL3xqmcX5sACVstVG+UBrnCmeUXlyYx1f58ZOTLeX8hev7DIpCuPj5MPV0HA04o1336axHFb3YrGoQHLyxUVXmGItrSM1ZM2xa1NYd0IKao06tXqERRBFEVEUEQQ+/md9jDZsbeywe7XP5W/f5nf+m79Lq9kqfHBDanNXqfYRInSPLJTD4ZTKy0GgVB44FoenstoJ8aRh0Ruh+9sgHIjzZLDH29/4BhbLdp7zZu9+02B5KeKJx9rFdwraTY/PvnCEY2tNPE8UOUX3dgXzOhNEmz7gD1u04sDvQhzUdNUiKEqrqrhI8Vpp687owun7xYM+2Dco6Ha7ELaoRTXnPycJnvJQhXn2qJTbP/ew8OM39siN5flPfpmX78bUGZHHGckkJswlTwWai/NH+d6V9/F9yZc+s8ps3aktJkJ5gpc+ucS3f7BNmo84mvX5tVbESOZsPPY4f/L6q9y7e4X/2d+8wNJCyMx0zhDvFuZ9IZziAWrfWIjjvDIJLIJvvbzFj17fYzTOyfKfvcCDmmL+dAssHHlqjoXTLWpzAcZa4iQhTRO3fpQr6PACn2azzWgS4/s+vu9Tq9cJw4BavcZkMkF5ilq9VhgybsOSnsfC6iKN+RZzxzt87T//LvvdfcAh6/mB74hpA/+RH9kjC2VWJH6VcIC3pxcDpIAg67J/483Cx/s+w/4+Rjt+hXIIISjXXqvp84VPrSCBJy+2WV2uFa8H1KKAWSOzKD/kQIkYU7iG2Xad6ecetmvOHkPVlDB9xRY9laI6x1QgS7N2Nq5y0Bi+/1xOyH3fR3iSPIkxuWv/SQsCUlHQDEzDSo86HnXXdRf9b/zqCd691OcP/ujvc+HxpwDD0eU15nKHfHBcWt68fZ3X33qDf+srxzi63Ki0sp3eJkoJfv1Lx8Fa/vxP/oDHzp3nv6t7CCzf/cPfx/My/ta/f54jy3V+Zl1ZWXdX0PbtdRNefbvLcJQxHGve+qA3vQsLubEHzHblCcJWwLFnFzn36aNYa7ny8jqtIxFLZ9qOFsF30JDaWLTUDCcTFhYXyIx20CBlWWUYUqvVSbKMhaVlavW6s4ikrBolIgSj0YhavajKsu75lrSGkyS5Tx8k4yFeoJzgfwSn8pGF8rnFBJMMuPbqt8jThO988NYBwQNoNXwaNXj6qUVWl2qUemW+4/PYmU4hnIIodNTaVhy2tB/01wxmSjGclSoKhLhS202jeQ9e4IKSrWIqkFPz9PBnxX2fnRHqMk9RCmdZHG+rTbS60Gaz5fRnlhF4EUqDjlOGZowfKNfZr2RVLC4q9S+r+5+2nBX/PlQmZ9+Y+mL1us9f+7dO8Xf+wTW+/xffetiHeebxDi8+u3TwXqEKXAF4SvDrXz6OkvCdH17h/cuXEAI++fQ8X/niKRbnXbXT7Ewaa9ntxvSHLgotrKU/TPnBq06jJKnlxu3hQ33lsOVTU4IjTy7QOd5AKjj+9JIrnpcak2fkueXYZ+YccW4rot8fYvKiWMT38XwP3/cxFprtNgsLCwRhWBXiIwRpmjOZxA7t3miM1QUrtAAhSbOcLNNoUzKDGbTOybOUYW/E5hsu6Pgbv/hlhrsbfPftV/idnQ2kUqST8UPn/fB4ZKH82v/tb08/5AlOrLnd5PyZFufPtBFCcOZkB78A0FVF+5GoOuceLC73v3L/k3mgk1z6HIKpNHzYmNV6B85+v9H7aFrLPSxb/JdlDgz5/Uv73NlwD+Do6lEajRZKSd55+6eMJyNAUKvV+OznPo/VAcvLi1y8cGHKKnz/WQ78rPYBuD/iM1vVMPOWFPDE+QX+F/9xQHeQgoV3L/e4ecddZ7vp8+lPLHDuZJsw8A58jTvN1FUBJ5hf/dIJXnxuiZ29GKUE5061Hf1AkZbQuPTJ9dsD3vmgxytv7H+o7xc0fNpFO1h56atPLLBwus3csUbBsKxJ0gSw5CJnMBxUUVSnsBypj0FSbzbpdOYIwgAvCFCeQiqHW7Tf3afWaFbdSKZ4lsrziLOUWu6E0aHvOzM7yzSTcU6e9h18ioFkNGH70g7ZJOXODzaZ7MQcP3GKZ174FY7QwoT/Dd995YcPveeHDWE/tO9lOlqtFp9/aZnPvbSK70mWF+pOY8mSDmD2SRYL3T40FOKOEg/a2x8kJjNHTYswD/xd1YiK+z8yPf5At9zBs4npWQ8IQPHZWSS82W/IteXHr27y5rtd3v6gR5qZ6hJ930cKSZImD1jo5VcLgiAgz3O01vylXz7Kr33pxIFev0pH2oNmbrmoZufj4IZz/92WnyuxaxzcZdkhMf2crSKQs8/PTun4Zm7IWstgmKKtpd9PefuDHnGieeX1feKkpAGgcAOmn2su11h9coHHPn+SsBlQa4ekaeYA0bKcJEkdKZM2mIJyzlpLEAZ02m1GozFBGBAEAVEU4QcBvu87EDAhabVarj8UO22IFpLRaIQQijAKMXrqAhkLuzs7tDsdstwwGSbEw5i7r99hvDdh/2qX4caMxjOgi5asdmeejz37Ao8//2Xe3mkhwiUePz6Pn65TtzlLekBTj/mP/vO/xc8aH4k09oufOcraSnMmugJVdX4pHAcCJ/f/Njs+PEx8WPsdOvbQXlJpzQ895dRnvP87xX1/VzJe+A/TxegqYu6uD/hnf3aP19/pYoxFeoKlp5rU5n1Mbtl6a4BXFxx5Yo6li+2iRM/tvNsfDLC5YzLefnuIowgX/Mm3NphrBzx2rs3SfFTVwTqf9/BNze5CPOD+Z7aXIppcVhOVLkA5ldPDnVBW/nwJq4IT4iw3bO/GlE3Cg1HOD17Z4f0rfdJigR7e5lWgOP6JJY49s8zqhUWsKeqWhUVLS5pmxJOY3UGG1q6WeWlpmdFkQpKmSCnxg4BaLUIVPbBGa5ZWlllcXKKEhQEKDQfD4QipPLIsQchCAVjjisOFdXhDUmGMu6c8z8iSnM1re+zIPrd/dIe9y10mO+PqfsKoTuhPU0ULK2ucffrTyCCiXz/JvcQjTVaxnQW09Xh922BYAjS+6aBMzn/Ezx4fSShlAS5VPMricR8ySosbeCTqhENr6r73HvzHP8c4LIwHzbIDm8iMxj1sdo/GOX//967wxrtdstwSdjzWnm/RORlRW4iq7pTjL86BsBXmayUEwrL2iWbhjlrWnncPeu/KhFvf6fH3/8lNolDywrMLfPmzR1hZqqFkxUz54FurXLiHOQT2wNulJpx9sbI5LOS5y9zudids78YI4PrtEW++t8/mVnxw+xKCxkqNUB3cFU69uEJjqUbnaJPaQkCapfTGXbI8x/d9kiQhyzRCqYJ0ViI9hVSKSRJTa9ZZOrJMvVZ3eFCecqjruM2s3+/jh0Hl4011umASJ0SJq7d1fUMGY3KyLGcyjBn2Jly/dQdtDNpo1l/ZIN6JGW9PqsxCZ2GZuZPHePLFryDDBiN/gY2JdtVrQpLm8PIgQdqQucYSndV5BkbgaYsoikG01GhhSJQC79Ei7R9JKA+Ph4VU3Hv/fzI+4oWOxhl/5x9c4u33e0TzHidfaLN0sY4KVKVFy51V+tPAUAUuTGE+iinwr/RdGd/y4w3mT9V4559sM97K+N6Pdvjxa3v88udX+OqXjuOpsuxrRiQOXP9Hu5lqa7KuY+SdS/sMhhmjkeZHr+1igSQxJOmD/V0v8jj72TXOfvoY88fmEEqQJqnTOmlGlqckScIg7zPYKozhorFgrjOPkh6pn1OrN4iiiEajgac8x7WiFOPxmHa74za1oniiiKshpCTJUiZJgpLKVYIhsNpgrHMr0iwnzTWptmRZzs7NTa59/Sp71/rY3JBPDuaHgzDi4tOfQgYhq09/iR0zx739jJeHOXbgECac/1k8O6mohfMsLSzTqDcRuYvMGmPR5exqUaW/7rd0Hjw+klBWXootyVjLvfXgyQ5swg/9tukCrY4rNdYjxG3+ZQw7+9sDVL0TyMu8c6nH6V+Y4+jH20hfPuBa7aEftrDGi/YtYcFWNUTFnLqfQU3x9F9dYefSmDs/HJAMcv7Zn29wdzPmr/7GKebnopnziIO2YmlzFm/NHIW1Dn8nSTW9fsJonPHDV/cQQhAnhtfe2Udrc+DrpJIIJWgdqbP29HJ1Q51jLdaeWAYlCJsBaZqw39tjPJmQZ67BoFaLqEU1+oMBQkiXfvD9wvfzUFIR1SWnj64RBmE1Xe4MBuV5JGmK53tYXE20M6cd7Iq1FqQkyTKktBgjHHB3mpEmOTt39ultjeje7bH53g7ZIGX3vV2kUCjP48jqSc48/kky6VZiePxphsbj0k5CbiRXNgXSjKj8TWkxQiCMQ8FTQYgfRLSaTcIwoGxmvw+xH4GR6lCA8cPHR9OUdlr1fiD28iHVCj+rvEgevIODXy1mfvmotWWPMKp9RTzg9QOrWxCnmv/HP7jEpdsjLv7lZZbPN+4LYd13ieX9FIX11k4pzisaE2bTB+5Y6QmOPNlk8bE6+zcmJH3NGy/32Nj+gL/1H1xgfq5GVUFYXOIUVLFgNM4MmTbcvOPAqi5dH3Dl+pDBKGN9M+ZBw488Gis1zn/+OFIJ5o93WDg2h1QKL1AkScJ4PCbLMsZ6TDyOybv6vq4bVdC153nG/Pw87fYcjWYT3w+mrUzA7t6ug0SJInTuitG0NiCcr2eFYGdvn3a7PQ34QBXhjdMcbSboHPLU0r21z2BjwN1X7tG92TvQMucHIU9+8osceeZX2Yo9Jrnl9X5SmKICe8eCMFjhSIIkTugrWBAhMQLCMKBZb9GoN5FS4ikHf+IwiJ0/a8V0VQvsAUbnRxn/XOZrNT7MN/zXYBhr+ekb27x7ecCZL86xdL7uGL0sFXwiPGDeq03GVCZPmdOcDSQ5IM2ZjxXCqnxYvlBHIKkvBlz6ox3+i//Lu/zmr67x2RdWK5hIJ9yGLDP0hynvXurxF6/sMBjl7Pce3hUBID3Jwqk2naMNPvbr55k/0gYlyFIH9jSejJjEMVmWuS4X7eqXl5aXQDqaBqV8oigkjELCoPzpE8cJQRDQbLZLQ32qzAU0Gi0mcUy92STNc2f66RLRHLQWJKlmHOdkmWMwm4xirBEMt/r07nTZemOH8e4EmxvG+y4AFYQRjz/5CYRQnLzwHGr1HIPU8pMrO7z5zgZho0UQhtVeL4vIegGFMPMcykCYRUhHjDs3N0er0SJQoUtjFdqxtCJt1c3w8wvEvxih/FdkfJhWnq2jfMAHy4Me+NZ7l/f4nd+/werHGxx9tu00XmFiP0qKtNSIhw8Us++X9rud3oW1uK4YaVg4W+PCbyxx6Y92+N0/vM312yOade9AuubazSE3bo+qKOiDhvIlx55d5tynj9NZbWKxNBZrxGlCksTc3biH1o7p2mhLXjAbO5fOBa38KCRJUpIs5cTJkzSbTacxyoCWcAzcQRSxu7vP6toxkjQnTVzapBQ6Y6HbH+IFAbpg69YatLbkWrO3u086ztga7bL+5gY6Ntz7ybqb81yj84I+D0Gj2eYLX/oqayefoLFwnuvrCaMcrscp23dztDWYsIPMRwy7Q6QY4/s+YbNBUC9Q3A+ll2xBc2cBFQQ0221qUQ0p1EwheymAJVXBfVHDjzz+tRJK4KEScl8pt3jAaw/IqQyGKb//x3cwAtaeb7viZVOao/fbvQeikpWQPWQjEPf/XdYvzb5sravvWThT58JfWuLSP93hBwVw1YcNqSRBXWGBqBlw+jNrnPrkURoLNbLMBWGGoxHbt7eLRVZoDAtRFGGFwA8DolqNRr1BGIUF76SLlu7s7CClotFoFOVm7q6tdTDaSnloren2+k4IDQUDszNTtTHk2jIcJaRxzqg/ZrgzQiC488oddi/tMdwo26osSima7Tmw8OQzL7J24iILq0+R5D77WnBtc8TtXkba2yUxOXkR/NFausocqag36zTbNawxTCYJcTwhy3KiKMIrorvOHHVldtJzlUBRo4EXRigpXBTdzOQdCiSHCsnf/vMZjh9NKB8xevSv7LAzv0wDow+YQPeKsa7l6fa9MavPNQnaXtHrWX720KcPyd5sh8X9BxyU4EpTPtB9doltISwLZxtc/A3Be3+wNX1XQGu14dqOinH0yUXWnl5i4USbNMsYTSbk2rA/2We4OaBWq9Pt9hz+rHAax/MDZ34GIVJKJnHMqTOnCQLXrS8ogj/CLcj5hQW2trZZWl52C9IWfnOBoSSEm8NJnKKUR55rJpOEJMnJtWGw22X3yi53v7+O0ZZslDHZn1T3sLi8yvJjpzh64jynH/8U0o/Yz1tobZnEmhujlCvXBiTaMEESW0siIEdiCKhQySur1CCFj+9JBJYgdAXreZ6T5znxJMZTisAPEMqn0WhRbxV5eaUKlD5RacODRZmlGyOrQpSfd/zrpyl/7nG/aGpteP3tLgCrz7kOlinFezHuK3Wb+f2Bwvjw808DXDM7RvGzJF41RtM6GdFcDRluOGSFtWeX+ezffAaDcSkJnRc+YMbW7lZhDhqHcWsdtblQkma7je971OoRjVaDKKq5lEShMbe2t8mznHa7U0QWS2xYTZpmLteYJkziSbFZlb6gAQO51kxijdkZcO/ddfr3+gzujdj5YA9BYabGeaWdjx4/zRNPnAcEjz3/q4zlPPe6CRNreb3rCjayfFzkFil+FvQHKkdLQS4dcp1nCvIgYbHCQYIiXUOFLPLDQkjAgZf5fgDWOkoC4dq34jgGJYlqNYRwUXNbOsQza0GUxdTVJnwo9P0Rx784ofyom8OHXuz9Ed6D7/48O9GHRYjvK4EAYGtnzJ31MY0jAVHbp8T8vE9DMuOPzIwHfaedEdSp4VEm36YBA3e5MxvAjIBKKQia09CQbBjWtzeKShnL3FwHY12lDLgyvrof4Pk+9XqdKKqRJgm1xTrz83NFvbU4sPMLKel05tjZ22V+cZEsc1AmVYmeccl4ayzjSYIxhizLyLXBaMNga4jRhjs/ucfuB10XDbUWrxQA4NTZx7jw3OcQa0+RZZL+BLYGBqMF37+bk+vejEUjnSlqwZiiJlVIrHKhMqF0cR8SZQVSlVFtiSk0prWGgnKy2AIlVsz4jZ4irLu2rajWQFsYxxM2t3fJs4woDGm1HB+MEj4Wx5sqZjrPp/izU9ejfMSPOj5ynvLw+Nni8ZCr+RkR2wNvzZp5P5dAFp+drvbq/GV5Xjmls+PlV3exFoKWQkhRBSju8/vsDCrCzOUJqEra3HHFHZSJ8OJ8sx32sirkpxKA6iE7ueVwZlRbQ5bnrk/T87AIPC+gc2SeWr1Gu9XG87wCG9eF8JMkZb+7T7PddlUv1pCleSF4GptrXJ3omH5/4ICkzfSa8jxlNB4wGsRcunkVnVpufu+2432xsH+z5yjQgc7cAr/+V/5D6gvHkM1VttI6uVAMcs2bgxR9x5DnqfMzMU7g75tPFwhyJDwFbV05sUKA9KqA1+GAjayeEYfSz6XACqSSeGGEDENE4GO8ACkkzahGvdUhG09IBgO21zewCELfp91u0Wg08YOgEkVhD66kEuf/o4x/9c3Xfz7z/P4ve8T5SdKcd4uevtVnW5T9m9ocuqBZgaQ0ZagirqUguc3UHDB5ptD4VP2aiJLxywmuE87iMxKEUO5Bp9McXOAHrK4dpVFrUAtreL5Ht9vj+PHjU0jL4nzGWnSuEUqS55put4/FdaFaYwpKe1MInibXMJnkGCPc33lOOklIJgk3f3yDO99dJ+66zo1yeJ7PxadeQCmPj336q5jaEW7uaQZjRTKSTNKYcZaSl/i81pXN2YJBuax+Kc3CctOabZRWQh74u2xueKT+inITFi7CqpRPEIQEYYTvB454afZwpQhaDYJmnY5ZwaYZvZ1N9jbvsZEkNNtztBaXabU7VXrkEfs8Hjg+klAePo09EGb6+YJAH0Xz/fNoSTdKM/Hw97p/hqOUJHEo12++s8e9zQnSE/hVY6s9kLJwHz54TQcEtPj3MDHN4ePu+/yMAqgWJoAVjHoZt3/UZ7xhOXH8OLfv3KHeqHP82AmUdPTzyvMYTSaM45hOp0O9VmM8iZnECXmWo40z7XJjidMMIR26tzGGTDttqXNNv9ujvzPCxttsvLFJ0k+RQrL+5gbj3TEmt6wcPc6Ln/o0QdRi6cxnEdIjMXBl3zDRmh/sZOg8ITeQCofnpBHkwsMIhzwgy1yfUAXtX2HKF6zKiJKq3DLNCxYBF3Fo7oo5PxyTrBiVrZkamEKBFyKCEDwfFUYgFKYK5BTPrEyRCMgCgecHLNfPoIwhyzU7OzvcuXMHz9tgeXGRTqeD582SOkkekBF76PjIFT0Hb56faYb+jC/82YcUluKBSObDznf42OplcfAg66KC2jjD4u76kD/97gZXbgzpDw5itIZNj2jOr8wf9w2z2tEe/O6Zc1lmTNOfcauVtWZNtQicqVqgBlnY+GDIpW/s40uP3/43fwupFH/vH/wuvuczv7CAtThQ6zwnjGrsd7tIpegPhq7AvDiHw9l19aGjkQvSJEnq0gSDCZNuwmh7xKWvXXGtSrP2M4JWZ46llRM8/6t/nf3649zqZmjgtY2MXCeuqsUaHGW7rTYaQ+yehhWFmV6a+Moxj5XCNGM1mFLzCApg7pk5m/nDlL6CfQAKXtU65qp3XIQ1QgU1rB9AQX+B9CpArqnQH3xw0giMlCRSIgMPT0kW63UWj66wt36X61c/oN5ssLC4SLPZwvNCvMIUftTx/0Pz1X50gf5ZMny/ZUmaakbjjGu3HMZQKSQ3bg15/+oAa2FnN6ngTh70pfZAhYCt/rflSR54EeJAQO7DbnNaalfmPqdAXWDJE8N7f7JH/3bK048/wSefeoLtOzdYPXsOcJtLr9d3sBeFP5ZpzXA0Imo0XNRWC7S2xOMJ8Thm64NNsiQjDCO2P9hh54qrg00GKXHfRXXnF1c4//h5EIJPfOnfQPh1tLHsy1W2Y3h5b0LSd2V8VjjNqymJCQstL+XsjSIEqIIwXsABbegm6tBzKKbe4FDYETOclcWslsto5qVqOC/ABcCkdHWrQRQRBA1UEGGEKhDZRQU2XX5utgRSCFttGFgXBc/ynP5kzHDQB52Q9/fB5AwGPUbjIbUootFq02g0adQbBMGHQ2uW4199n3J2PGBlW1wt5HCUVvJx+XqPrZ2ENDX86LU90tQQJ4/IDyiqeZ+eowijzfqAs788yBKdpVdz13nQfD3Y/1mqePfTGFfWJQRYDe98bYfezYzf/JVfZrS1zs1L7xPWpvi1OssZTyYYO60LzXLDJE659c5t7rx6r5q8ez91ZmgW51WLkpCyurST5y5y5BNnWFp7DLnyPHe6mlQIftDPSPOMVOfEduzItwsuS8d47c5QgjFLSt9wxs/G/a6YMcnFwXk5gO1TCQGVoE8PPWiVzFiZB4Ytzun5Lg/r+QHKC1BehBCeU4YzpZLYAjLGgsA4Rm2lUMqS5jGTyZhBf0CeabAQpy7yLKzGpo7UJwh98txh/TLsEcdDej2fIHw08KyfSygPRLiqCXoUY/TRAaIOfFeh3SwUXQKQ55rtnQlpbvnT767z1nu9A+mGn8fP7qw1eOY3zzN3tMk3/o8/JhlkVbQRM736GffmAWNm9/6Qi6gsI3EIzcC6Xd0Kg7GSrUtjujdTfvOXf5ne7VtkJscLAoxx7MnNZpPbr22x/etdpK9IJjG9jT79mz023txh570us3Tn9XqDufYKL/3GVyqMo8aZFxiJDtpotuOcG92Yq0ZitzLQAiMgExJjPTSSXCisNChbBJ7M7L2WfBqmwOQVB6TFCeiU5Pe+VXOfZLn3DVPBdNvddFNzrx0yD0thlgI/cGkOVZACC+G7jUhYlHR0CO5UCil8lPTIk4Q8S8n0hP5kRJ5lDo8HTRIn2NxpTutZhHQsW5gYYVM848oMrQSMxmSGROek5sPrkMvxc1f0VMSg1QzMTMaBYR/4a3VwZe2VJmFpjDgQ57wwK7d3J+zuJ/zglR0Gw5w40axvTg5/4SOPsOUTNn1OfeooQct1ss+fbRM2PCbpiJVnO9z+3g5gp1U81lYJeKc9f8YWc2CBHbTVpwJ5f11I1ZMXG258t8fRlRXMoEeaJgjlUh45gu29Ic8+9zzf/4vv8K3/w/fxAoWONb31IVhLGEZ87he/yvmPfZpECzSSuH6GnYnhvX5OrjW5geEtS27GWBzHZI4qwKk1jjXbwSUiACnwigJ7YYvrl1P03NLslmJm17pP0GboAB4QKBMPfuugYjwY40HYGaEsGNeklHieV3WtOOrBAPABB+Lm+RIrHKsaJice98jTjCyO0XmKNpnLx1qJtAKpIAx8tNVocqyM8cjJ4z3s7l3yzV1kq02tPY8J2ygirFJooTDy0TTFvxrma/EgJ3HGXi/hg6suTN8f5Pzw1V0EMJ7ohzbbAiyeaVObj7jwiydRZYd38b0Wp3200ejcdZ8HHQ8VSYxxYX6sRIsU368jpWTxQoM7f7FLPjGkwxxZL3ygQ4L4sGmuTK0Hym2ZKjkcgCqEX7j+wHtvjiBVfOGF57n17jsV5EUZ1RtOMh5/5vNEtTm++Y0/AKDdWeC55z/PY0+9SP3Yk1zaVfxkDIMsJzYw2R+SalOZdWVwpKynNoVVUoImi5nrrHCKigqcUjuW11UdZwv6wJmo5ew8WTMzLYcE9gBq7uG93k73Qcc8N/XfxUwgRSiFLOAjPc8DRdFm5eHJAE86KNM0TciyHpPJmDzPMTp1+dnClxTCCSECtHUepi/A2gwTJlg9Rk12sKMuy3nCcjMjTjM29i8z6ipU4zheewW/3sLUA/JHtBN/bqE8nKB94DHuQMof1hr2uwnGWDa2Jrx7uUfZGCqk4Mr1Ieubk/tzgZSnEvh1jxOfXEF67iEceWKRpZNztJeaeJ7zEfI8J01TtHYCmGUZWZZh0oy8sPtzkZEX1kQZlLBArnM8pVg42WHp8Q7b73XZeXPC0c+00AWk5gHD/YEO5dSjnI37TOeu9FsLQ6xwYisZtjDcybj7oxEvPPtx7l76oPKgJM4uMki0CLixOaJ18S/z28/9NnkoiTVc3Rrz8iQluwFjI8gF5Bgyq0mtqDSfJ7wCd7YAjypktKQSpKBpnxXK2ahKeU2zSXtbBlZmNdesoDErTA8Z9wnqzHmK16Q42IcqOHg+pRRBELiiCeX8XpPnTMZDdJZgtUbrHIGrBJK2LExgeo9FM7pAOwa3LEGmCSIeE5lN5kJYrAk6izU6c8t4XoqSJxjupKxvdbl+b5OtrbcxNkK16phHlLZ/KZrSFHWJxhjurA/Icssrr+6wtZty7dZwim72kOHXPIK6N/O3z7nPH6NztMnqhWXCelgtDGOcjT8YDgrk65Q0yxxRaxFxW1hcdBUr4wyUa0BVSuH7PghBFIb4nkOyDoOAeBLz5FNPsfI/OMof/m++w867IzrnagTLM17Nh91CIXUHFOV9TnJpqpuZGJ87SGeWK1/rMdfpsBwF7O7FRU2qAiux+BjbYEKdbVmjm2oGozFZ6qKsLthTdGvYtFjQriQskgLriUIAtVvMVlZVQqXPVy3+UvrKK6+qHNx9HmjQFiXkZplXnJmS2Xv/EGDiB23xpQ9Z5idLwZ4Vbmndxi6Fw/mJohCpFEk6JssTtM3RWYbNYhQGKUAJhbAeGBd5dX0yRWOzsUiTIie7eOMt/GyHVpSxMNdm9XSHY8vHmW+GLHRatJoNMILeIKbfmzBqpBxfPcLHnjjDoD9ka3uHje1Nbt29+9D7nh0/t1DOml4WxyW53024fmvAcJzzF69so7Vlr5v+TCGUSrJ4usMTXzzF8sl5wjmP1lLLhfiLjnPPd21AcRzT604q7TceT9AFF2Fp2kwp4ywIidYa5Xn4YUCj3qBWr9NqNomiqNAEsiCjdYtia3OLIIw4cmqFJ3/1LD/9R+9y7/s9zvzmwkE3mAdYqPf5kfcrSzH7x8wxAreh3X55iKdDvvKFT3PjnbcdrZwQIGQRwvfJhE9CQC9V7I80qcbZnrbUK8qlH4rzKCVRqkR9c8BPQkjcXxZZBYPkAUGbRZw/UE544M7F9LVSq6pZv3HGLBXWaftD0egPG+UdHZh8DprVVckdrghiPMkL1yTDsdsYpAUpFMLKwg2RaBxigLQaledInSEme9i4RzMYstySrC5LVpdXmJ+v0WrVmZ9r0IoUzboPWGyeEsgaxzvLmGMewzhna2eX/mBIvNji7ImjxMlFdnZ3Hul+P1pFT6EgjLH0BylvXdpjd8+Zg+9e7rG+EZPmD/f7/JrHZ/7Dp+kcbRa7rHuGvuexdvYIYeQjBOTaMJ5oev0ukzgubP+MNE3QWiOlw/SUSlUlYdZahJIo5RFEIWEQ4Hk+Qej6/5I45onHn8Dz/CLaNvXhSsr18rn6vk+v16PVbPGxX3qMd/7kCqPNhNG9lPqxRwtrTxfSoYBEtWEceh3IY8u9Hw0ZXRP8+pd/getvv42STiBLrsRcCjIlyJQk8UISE2AShS/DA/GTAyank2dU1VlfahuBpIC+mL3aB3U5WICyudsJ3/3bjyhgNF1QZCqUM78LMzWXD4yHuCzVT1HRIJaxApjCZRqbF2V6uoCnceeQSiBwjdouRypdKtQYTJYS5Tvo0T4q2SeUGfPNgMW24sT5DoudReZbAYsLLer1kCgK8QPpYCqNxtPWbXQekI9R1hB4EV5LUW/Oo3WHOMnY2euxv58S1aIH3uPh8ZGE8nf+2+t0Wj5Zbnn3Ug+tD06k8iVB4/5F21iqcerFVS587hTzKx1kGcE0uurgTvOM4d6QXq/PcDRmEmdkWcE3WS4scA69cMXhURgSBCFhzQEYNZstvMCn3nBcGGlBEGqNYX19g6hWJwwjJpPJgewhtjAii01HKp9ub0Ct3qS50OHCl8/w5u9/wMaPBpz5rYVpPrxYy7OaUNgSn9UWJpbA5JAOdFVq59Ukqlb4nRbifk7vesrG62MiUeM3vvR5brz7Jr6UeKIsQWNG8SiMCEDV8VRETUmMkugDbtW0VrTMeR4IawoDwmCtxDCt9bR25rjZIYo7ktPKIDlVhDPHFZg3YhqUkrNbVHUjs6j5dub/mQ2l+PzUn7QgnZ9X/l+mq0oTXQgJ0sF0lNaSFRZFjqc1MotJR13MZICnY1bqA1bmQtYWG6ws1FhaatGo12jV64SeRxQEBdqgcZwvxiKEjxUeHhJhLBiNzjOM1QibYY3n2sOEoR7ByWM1jh/xSfL2/fP6gPGRhPLqjeGBv4VwzbVnXjzGwsk29cWI5ZOL02bX8uFJgRd4GKMZjsYO/yXPGY/HDiJCOxzQZrPJ/v4+ee4A+oo4CFLIgtcxcKSfgUNFG41GnDpzpuh3ExXnfJZrBK4wutzPPS+g2xvSbHIwkFTmN4QTXofHokhzS5y5AEFQkJzG+xn5yLiuEcr+QVvNRbmSSmR4k2tu/2DE4E5G0p9aEF5dVq1X1kC8r7HacmRlmV948Xluv/cWoSihCS1CGLCysi6s8LFEGFHH92t4oWI0WxVTPR9RXZu1ckZ6hPNNLVU1SzEZcPjvsu2pDF2VwR54aPeDZWoCu7qCqXZ2N1D2MpYfKLVeIZhi9hvsNFcsCrRzqxFGF8RIzkUpRMZpTitQFrxck096mHQdGQ+p25y6zFjpBJxYC1hb7LDQnqfZrNNuN6nXQuq1oJgv55eLosJIyuK1Ip4gpCArCum1NoCL6Mri3FOT3fnCnnQF748yPmKe0nW0f+zXzqF8x913+okTqNDHWMdPaYqFneucNM3IkpQkTYnjmCxL0bkjTgFRdAa4heCHEbVGkyTNGAyH1KIa7XabTqdDo+nAipV05qoonrbZ2sIPXJ+gNrYgGy2ffGFqW9f7p3yfwWCI8nymTakFZL8t+E6K/GCWCyZpTm8wYbw/4Par6wCYzLL75pi1z7QOTEvlvhZmlZBgU8ut7w7Zu5ywtLDI40+tFi1Jhv1uj3sbjotTKcWFM+e4ePY0yX6X2++9iy8EnqQCdS4frDMPJa5W1EN5DiVAexIPVQnl/cXuRTH2Q4WoeO9DIukHPOhKZg/6eEyPKJMK7m1BJWQOKc4l7quMTLVJFo1ORSmdKO/FlvCShYAINzeyahCwGAw2T/D0iHwyIR0PibJdOmrC8Vqf1eMdji636cw3qdUj5poh7Uaduh8QBn5BMGwxJq/WsNuQTHUfJW0CON+/uueZjbmkqb9vjqU8lAJ7+PhIQvml/+STnPvkKaRyyVilFHEck4xzEILBYMBoPCIp0g5KyaIXz0xNkFl3RUo8qRBSEkURw+GQZqvF0bVjhFHkEr9KzRQ1C6RQlI++FtUYDEdEtQbW5OgqHF/4PkUEGMALAobjPgZc65JVlKVzWZ6TZBnWGvIko3t3n6vfvYq0gq23d8jHOf/eX/8f8s7bP+Wdd3/C8scbqDqlW1r4WGCs49HECG5+Z0C27vM3fuurTPpd7t26xXAwJM1Szh9Z5ZOPnXVax1jWb95g/d13CDyfwJN4wlWESDHFfnG4sBJPKLwi5WIUGOmWjUQ5k+kBvpm7RvEhQil58FtTM9P9OXNQGZSdEdCqfYppD2O1EAWFfyzxpDM93eLXDtTKarf0bRm/nW6twilP5y8WBfsC55taa0hGfeToHna8S0Sfo80GR1fmWVroMN9e5GinRqsVUG/6NOsRUaBQylUiWWNA5xhdCjdVGsgRB5nq1kuhLDfIg6WYtkoLPXAmy/zuI4yPJJTzax0ynZOOJxhtiJOEXq9Ppl05mrFOE4CgM9chDCPqdcNoNHQq3HMgS1EtIghCojBycPTKTdJwMCDXmvmFefJcO9+kePruhg9OghcE7O53abXnKqGFslDAFQ07M9g1AcdpyniSYC1keYrOLFmSkY5ibvzFNfav7JONMgbrrshaSMnpMxf463/jf8rZxz7FJz99hf/l/+S32Xs7ZumlWrFkimU4Zb6hdzNm73LMV37xi2xcv4opYBm1dkSog71densO+EoAnpD4nueE0VJhupaat1yiJR6pZw3S5kibYmxCbgKslDiuqwetiCLiev8bPEgaDy6rIlJ66LBZm8RSmsEzeKfWId+V/Cmq6tA3YFO0zhy5jrUIY1BGI6xF4aYyl27DkYVQSlN8Lo0RSYYd7SNGO0Rpj+N1wZFlw/KJNosLJ2k1a7QaDVrtOo1GQC1QRIGPVAaFQRgwmYO0FIZq0zcugYtAOqumaNg+cN9CzgCnlVqzFFxR/byv4Xrm/Z81PpJQbmxu0k16pGlOnuWO1EYWCdfiEQlRdOkbx5hbq9eYm+9Qq9Wp1SJHoloFbmRhorkbqDUabG5uFibP1ASdtk3Z6vdc6+Kn2xzKompXouZwYvLcmdTpOGbjnXUG3RHb4Z6LxCkPqTzuvXKb/u0uycB1Riwur/K5L32Bz/3yXyEMa8wtnWGx2aHWikiaFzl99jGuv/UB8881kOH9D81oy71XhjQbDdq+omdzBsM+w+GQOI6LhLakaoDGdT8oUeLHFD2GQFmCMG32FUhpUcKgRIq0E3I9IhE1J3hWVxtYOaZr4gHmaeFT2gP+3UFdW/l55XfM/iZM4T8DQlZVSp6UeMqVsVkA44h18izD6Ixcpwh01StitXbGrpLkuFpbIwyCDLIUbxyT9fqkehtphjT9lKVmzqlTPqeX5lls1GnXm9SjEM9X+L5HvRERRj6+FChhkCQOCUEbJ/zWWRimYBwzFBu5dl021qEqHxAwKUtagqkFNp02e59QyhmT9WA66cPHRxJKY0xBTza9ICEdhXS90Si44IOCGbfGcDRCSlhaWsIYfSjwMH3I5QVL5ZGkGd1en6hWd6S0xcGlJrZFL2Bpuzu0tARrLIPdIZmRaO1MycHdHptv3GXrtQ1Mqh8wKa6V59S5J/il//F/n87KMZpzy+RRh1hbJlnGW7c3GY7X6cYp2+MuJz/xJa5eeo/B7ZTOuUOtOBYGtxPi3Zxf/PxnWL91E09YV01kjCOwkbIi/ClnQFpxSF4KYSwmyzKzMJRGqgyUwWOMMUMGdDAP2YWLGa9SFoffnJqgpZkpZiW5YJQ/FEAq/eeiLzIIfHzPcxFIrZ3pbTU6zSrwZqM1RpsiQOZM1apNSpbwJxqRa0SeIPIBpn8X3b1NXVmO1APWTrY4vjrPYlPRjDwaoYevFJ6QNGoNwjAo2rPADxSecka7NYJcu+CWsAchIF0KhWpNVVAkpQFUVpzNaL1ZgXyQyVqu59nPPqqWhI8a6JGSIAoROISvWq1GrV6n0Wg4hDRZdIsjQAqU77O7u00YRYzH4yIYUpihFkp+C2ucPZ/lGuUHjMYJ0gtnJkoX1SluJ8tzjdaWndtb3Htrne6Vt0mHGb0bPQ4vPM/z6Myv8OIv/lX8WgOLQQpZ0MRLVs+8QKoW2SZla6KZ7I/YHm6xNRgxnsQkOQxjgddsk8o6wdJL1Jp/n+2fdGmdWkCqKkyC1ZaNHw+JohoBlt54jFc0yfq+X/nIVXgfqgBRYRBVvp9FYq2s/lbSBZBkibOjAhQWQUouZdHkK6ffW5imFXQl6sDUHNR5Uy16cMcvtHdpTk/jia77oiLeAXSO1BqbO/AsYQyWzEVerUsbyMrMt4WrY1Emw8sTbDLCxH2ao7t4NqURCY4uhJy4eIyFuRqddg3fg8hXBEIS+MoxgqsAJSW+AuVRBIksHjlCU4CJlc1ibiPBFrAowhbUefagRXbITfow4TqIaMd975VelRCzgbsPHx9JKH0/5PyFCwXmi6sIUWpGRRfHGReqQhSw9nt7uyhvigbnhqh2LYcdY4oIqs8kyfCTDGMFeWZJxjF7t7cZbbum5N2rXbrX9hlvT9Cpy2U2WnOcffzZqqveYjn3sc+wcvYFdtM59hKBCEKs9FxQBpgkMa9cGpHkfbpY0rwoRJBFeENESCQqENhMowTc6XqcfupF3v/Jn5H2c6L5ouTdWoZ3UuK9nC987iVuXL9CoPPqdsMwrB5UtUAo/3HmU25dchsoeCRt9X7ZpGGFRKoAoUIQAVqEZNLHSIuaTdJXwlYGcuQBcZ39YzYLUu78Jcp5KZRSSBTOa7TaYLUmS2OyPHMbi3E5PPeVZUipqDlFgvXAGqTJkNkIHfeR2RhGu/h5j6WaYaXlc+ZkwMLCEu1Wk1rkoaSL0vqe7wJFSuL5boELJfA8i+9LfDVdi6agEygDNdbqA/flgnKmMFFdY/gUW6mIGhfC9qgm5+HjHuRCHLJ4Hzo+klAqpajX60i3JVUn19oUPl4RnC7tcgvKDxmMYhp1p0nLiKex1vUoFt3y1oLODXlimIxjRt2UdJxx77W7rP/4HkkvxmRTqHghBE89/wWeeP5XCTqnSI3ixl5G7klkGGAt7FjJZirR2hALzXgyJDGGNM9IjCYzuYu2CelKr4TAlp3tzLYlyWJ9W0ap4cjjn+P9H/8Zw1sJQT1EYBjczNj88Zh6vY7IU0yeAqKCxgjDkBJP1O3YxUOv7sgtFAzuGgqSGNeCVGhRASgP4YUov07mtcnkPP9f2v40WJYku+/EfsfdIzLz7m9f6r3au3rvanQ30AQaQDdAAARBECQhbiYO58Pww4zpg6SxEUTRaBqKo6HGRBNHYzKaKJk4IAmSoDAU9yFBEgtBorF0o9eqruqllu7a337fu1tmRoS768Nxj/DIe1/1K7ARZVkvby6REe5+/JzzP/9zDmatJ5GXGnDMDqW4r95xSOGcCIS06G3Kooua4GvSVAetcNd1nq5pyUWu8nklalw/+5dgiT7gZKGuxqIhHN2lO7jJrLvLjsx5eKfi6pObXDx7la1ZRVUZ6jWHddo4J4ZOg/bGYJ0Knqss1qlwVa6iqmqcszgz+HzESEi1b7uu692GUnC+nbBloeozc4rvPYgpulov6PfMp3RVzcHhEWvr60p6TmCFz0KoV1PY1GBNxdHhkrqepd3K472n7QK+9Rzc3mNxuOTuK3e5/cIuxhgObxyy+817/e9Op2t89/f/EXbOXyEE2HzoQyzcWa4fwHNtRHYNEUdjhaMYWRxqq/IonqbTnEvvVRN2JCEUi5FJXysG8j4jOZOpX8TWhD5DXcTwdf8+vv8P/hl+41//fW7+zmGaBNhYX+cHPv4xvv6VL1ORS1LGEUgABVpZmknp3xBi0c8wJu62EHAgjmgmUE2Reo2u2mHpTuHNGkpnaPozjYUxWSQyCFB+XYhYUTO/risqa/Ftl5r5tIRUcjJ0KpQmxIJsHpQ7igqkJVHhfAdNQ7e4S3f4FtLcZtPOubQWeeTRDS6e3ebMzhVmU0ddAaYja3YjASEQfKdtBIxT87SqqBzMZjWusskcTGUl00aTfcK8WeSwXRk7LIGX8ni7UMbqZ3IcszRdTxJUfS2nZ59s4p50vCOhrOsJt2/vYitNElUrNfZAjCq/tFPFkCBvYblYaBZ303K4v+TGS7fwLbz26VfYf+0ezcE4I3tja4eLDz3GmYuP8NR3/zjztce4cRh4vQ0EW9EcVSx9Ql5jpwKeft9Hr30tkjFfkg2iVVTTpNCCZIdeSDwCnd40hOlqUu6AiSAGI5a5r3iDJ/jBH/pRnnvmi4jAB9/3XiqJfO2ZL1KZbNKC7zptB74ykW+3a/ZASjK1MEKHxcqEIBMwjuXaJrvblzliU9u5Bd1sYhyHRWwCijJrxlkN41t0o7ACIgGJAb9YsmxbQqfFwwyRje4QxUFd2kxC2rS08oFpkxC1LWF5iFvcJh7c4pzss77mOXfecfbslIcuPsL2xhpOQEL+/aRUjQpO5rYKGtN0xlBVlqqumE5qKiM4l4j1MjCNYvAaoybFFZNpKgLOGbxXobzf2K+WKymPk4S3nMuQynLGGHHO9Yjr8DD9JmFXSlfe73iHWSKG+XxJ0+QYIgTv+2JNIWoopJkvaduGrg289fnXaBYdb9Q3ufutu9x6/ibLvaFO6KNPPc3G1ike/+AnWD//JMYIrTvF64cTGh95fulZ7AUWRNroaZeRJrZ0osWhmkxUcKlPYFwBNSQPRBxpO2GcQZQpWogQjfRopiHgCKm1vJIDbAQf4c69Pd519SIEz7WXv07bLJgY5UlmTnSGz9t2XCXPhxVEc3AwiUZZL4IhimpJw5TOzDBujWjX6CY7mI3TTKhpOsuiXRK62KvIMQNIkJT0a41R7ec7QqfmXehaMumCGJKg6rUcuVqT8kmZ9yFi8IR2Tnt0m3i4y6S5yyQcsjUVLmxVPPzuHc5un2ZzHTY2LJOpw4lL6YlR6yoH/T3JmzoRI4LN1+ms+o9OksbUEAsFWJTr6OauYP2mF1VQSxOyn+fCkgN6C2ZE4C8+N7B7xt/Pn7WJSHOSwCtKmzd1rYLwIMc7EkofPJ3XbkW5YUvbeppgObp7wOJgwVufe41bz1/nMHVLCl3oPV1jHTtnLvDx7/8R7GTK2ac+yZ12yv4y8iYWOXS0redwseSONPgodMGzDIE2C0oGRoJC7Hkyy7qgJx2SQA9jjCb4JgQxT5cvSAr0vzOUeBQUMDDdAjM3uGafOi4I7QIBNtanLE3ENxoUj8VCyUnXJiGvJKHuDWRR0IuUuBs8Kbsqm601mAli13CTHcJkmzDdIdopJnpqB0RHEzwxg2/G9r/XdR3g6ZolbQj4pkGCHwCfkGupFryf7JulRF/afWR5AAd3iIu7uOaQU+4eF3amPP74Nme2T7Nzao21ac10OkEq02sqI47oI8GnbA7RfEZ1QpP5awXnnAI2Ge4lYo3FWTtUQuj9s1WtJYWw0KOpefbz5lQKz0k+Zg53lMJ7klCuCvHoPGktqp+vaHkmyDzI8Y6E8o1n38LsVOy9ucBYy5u/8zpHt45ALPuv7bHc0w7B65vbbG2dYzJb50Of/JM4N8EEWD/zJPfCKV5fRBoLLx9G2q6h6TqariGkAPSybfFUA2KYY3XJZI4RQqchFWO0HH80GW28j1mY7X4RJJXulzj4IlYU7eyz6xM7xkTVDCY0xGZOPNpDFnPM4hq1ROoqTbapMJ1n3nnwBo9uGGpCp9KPZvAjY59TCESTeLu5DEfqspV7XYglmhrsjOC2iNPTLKt12qRxLDAxFuMcnc/ABrRtavYafDLru+RTBgweF1V7BaNE8xgiFQHrO6SZw/IQ2kNCs08z32XNHHBxO3Dl0jYPnTvLuc0rbEyr1BJB0VBxhjr/TSJ1p0wtgwqVsRZbZbZP8p2N/m2lrIKnpqoqyBTiLxq5lmZkFtISZc3htxK0ycBNNjlLTXiSe1HGKFeFsxTy3lwFTcBJOIKxFpuE8vfEp3z2F7523/cuXn2SzUfO8f7v/5P4jUe51VqaILy8MIQUb+v2OhbtQk06IywqIRghBEuXzBkAMS75emnXyvt3Mn9iQi2EwW4fdsO3d9ittT2AU75nRBu8WKMMk+gDRgSHmqu0DeHwDv7oBpP2Jltyi5m1VGmiO4FYVTSLVit/i/pfYtRU9gJDcRqhL6XYhyoERHmv+Tmi7deCtQRXE+sN/OwsbF5mz24QmpY6NdrxIdJ2LW3wurit0PkmATURbyJBNFYYxRCDUbpegv9jt6Ra7sPiLt3BHeqDXTbMktPrHQ9d3OD8+U3Onj7D5nqqDCeW2k6xCWyBYf7wymxS9FhvxwDGaO0cm8YkC19MlQAk5Xo4S69ZVNgysk8vlCIDF1UFowRTVNgH3vQgyKUbcT+tWa6XUSilOE6KX4qorywphJQFs6rU11xlAd3veGCh/MSP/nEiqPAkP+CJD/8YVBtEa9ljh7tHnhe7lsODhv2uYenBh5ouJIGKYahWHQVCRZfYHoSSOZnMjwK4LwdtlcKU7Xrdjb497CzZ/yDjQUO8VKIwMZaJm1Fby8RG1lzD7rW32D98k+WtN7j51stM60OuXtpAJhPECJ3tkABt0/W7cPY5ImjsM99eRqqTcAaAoNrNk2IQ4pKGrIi2Irgp1BMONy+A22S5CISuo4u+TznzUf1mHyK+C0AicJN6ViVf12KRLiDLe/iju7j2CH/vBpPmFqfXhMvnNnnkPae5cGaD9amwseGoJhFMTZSZWi0xI9RZW6zMT7r3vOENwZlkDkumoukGJMnIya3qBlR88BMDkdhl0GboOaK/YwZNGPU3Bk14HDEtj1U6XP53RAxIgGCpNcs5LoXS9pUsBrrdakjm7Y4HFsq75/4Uc98gswlr0zWss3y1E+ZLz712wTIc0XYdPgidGBqZarwt+t7Pk6wA8vR0LV0q5muMMMqZzpMi0u86w1vjXasc1PQJytCArL4u0mcsSPp+JWCdUDnDunPsGEdthEoWTMMR129+i2vf+ALd3dvUy302L22yLgZvDWLVR6WCbjLBd1o1DxkSjaOo39pF7T8RUzu3gHJPxRhCQoADFUgFpkZkhph1gpli3Tpz44nzQ/BLpY+Z5G+lbSz2QhLIdmMVArOuRbqG5dEhy6NdwnKXyt9iu1ry7o2ay+/d4uLZJ9nZ3mRzY8pkCpO6RuIEsUJgwWLZJWQ4aYjkO4mM43n6XtCap0mYVGumxUqpXSCXF801drKwrWqrfGShVCDIYa0+hmp/ka71PTJaKqhVfur9uKnl/eWjr0jU38d4nea1ZJD+WrJQnrRu73c8sFDu72wTQ6QLHffoOJwf0vnUkyNdFGIJeW7yBYihT+mHojtSNkVMj3jmYLeQdsqsETOkn0+5IoAyPCVnlfQgSnEtuVxi3smNsYmipUJZV4K1AWthp7Zc3TGsLfe4vd8wv/UWi71byPKA7fUJp05tEScVlQlU1uBFwxJhqgBK07aJPpjuO4InIMErN9cIAUsQAyZ1xZII4og4xFREO8XZKc6t4+sN/GwNwiKFNyYYsUTxep7ge18xhJYYG2K3wLQHKsR7R1TtPU7bfc5uGh5/4iwXzzzCqZ0taidMJspZttYSDRhnkhshCVWfILqtaHEqBCsJwDCWIAq+dd73HNgSDXVW0VTjXNKKOq8mgWqDoOpERdFcWATEGgWGYuxRTGN0I1d0W6tMZH6xNTJK2zsJlCk3kVUuKzGXqhlst5jXsKRKgM6SE7UjwzyLaImV0prLpmtVfYcrpF+7dzddQMrhKxLZ+ywDGTSUok/oXRRm6HD3GexImm51py0fEe5X+Hh19xETT3wvL4CRUCJY55B0JVYEYseZdcPtX/6/8Ztf+DQH93Z5+PF38b4P/CB3XrXEAKe3p2xurlFPDVMbqSvBh5hKNlom1YRl09A2Q8Js8IHGd3ijxHuCJZoJ0dZp/LIf6hCpEDfFVGt0ZgZrZ/HbF4nr5/F2i2WsCCEF/mNEuiVxMcce7dE1u/hwmzjfpWoO2a6FUxs1lx7Z5NGrZzm3c4l1V7FRrzOxmrETjLZXt46ePRRii2/ahGoqrW3qKsRks9FCes+HFl907AqdVgbIc5BBnMGcS0nKhRBKMnEjMbk6sReAzBuGEoBRdyibztk89N7ju9BrLf2eOWa+npSIXAJBCRhm0DFjS63UstkaMKkUSqlQ8ud/T4CetkBzxx7E+I+S6KUhpZjf0Ilk0F6mt73HVCYZ/y99eeX98helfL6SQtO/NexgeVfuOz+JXmwIke86c8gz//Cv8cIXP8va2mmuPPQRXnv5i6zP1rh4ZovFvSVntmasVcKsdkwrJUeHAMZ2GFezdK1qgCC0nYZI+kmMgDEEOyOaGVRrWDdJYygKDBkDpgIzwU82iacvcrRxlq5aZ9pZJqGjaw+hOUSOdjFHt4gHd1if38bKgosXN7j4+BmunL/Mhe01NtenVLMKUxta8UgwxOhoSf1KJNIJmJCEKZKImtqdyuUYsHREurTJeILXcI/3ijWHDNYlzGGVDZO1Zm/FFJZPUpgY6Isorya5j4P1oQB6eg+pWCGxF9JsDh8zT0ebtmrGTFc0yceV/r2xIJYC13mfLC9z7Nz5uh80HALvQCiDFMWViv8nHVR8Ugdd0mrPvQb7iy3aeEtZfo20+5VnknzGQdv2Ml7arOUJsuWfhXr0OQPRpthzek88mMipNXi4fYl/+Vd+htAZvv/H/3ecvvIw51vLP////V/56nNf4vf/oT/GC1/ZpzYTJBgcTqtuW0c0WlDJSIfBQgg0y4628LtUKDV0YM0a4s7TTbfoqokWYorK9QwmpRiJQaYb+GqGbyuaxYKt5as0+7fxh7dx3T1mMuf8uuPKYzs8fPExLp49y9r6BlLVGGeYOc3m0PAKLPEE6zVQmknZkkj8fVjGJCTaUblc5S/0RAitJu7T81z8LMc6dY4V1cozF1EnJ2dkKLKMWKyzVJVNBAELKcUvaz4tqu17ps6g8VamN+fmikFLu2QXKVPuVoQwK4VykSft2KOnadWchLLmNSYi1K7uE5/HcqD/ZmK8xou//fEOhLLY9YCcAKqO7YqmyxeeShqWxbJXNWl5H7F8WWSwWEsfsTcpht222P9Irl0vtJFseqh2iNjk4goQMMZzdsuw9qW/y//8T/82F658jHd//Kc4+/ijONOx/uYh79n6AHcO3+DNb73I5fOXaO4d0E49bRWZOBCnG5MzEK0QXcDbathy0gIJCR01xtDOtmD9YRbrZ2kmFUGmTMIBE99ReSEsW7q2JbYQbl5H5t+Cu7u07hbn1yuunlvn0oUzXLh4mu3tLdbX16krWyCeGWRKyKVoVQgTUk6j5EVbxPtC8n/Q5kI+BrpOtX6uiJd9uBBiysYYqspJyuKwVteE916LYkct/BU8OFtjncU5Q10nvm3les0nqGmZfcT8UGR88BHV3xsQzmEF5IT4rKlAN5Sxb6m+X7lp5M3S9OVAsmYfCWJahDF9NyKa97u6thlvAJmG9yDHAwvlKpgrZqAY9cGo4ob7z6+a0aVaT85zPOFjGSY/8UJiDhus/ICU5vJYg2oDmFQoC1IoxHB2o2L9i/8jn/uX/xOPPPnDvPeH/hTTnRlSeR382PKIPU1z7pN87vl/z0ee/jBndnZYzO+yrITaau1P5xwZllftaUeTpLt7SLuKcG97B7bO0szOQC1UWEwbCUd7RH9Is7zL/PAA1xyw5VoeOiVc+dBZLp9/D5fObHN6s2YyW8NMZsodDaEPxmfmS0rKwYeAF18MU968lHXi2yERuzTPjDEK8Vub7k8GHznGsV4Yxe2MVlAQDRGE0GGsMJtOWFtbYzrT+ktZEBcLLagdY0TCOFBfhhWs2EFYSuupWFPld4bXBpZOL5gkhZLb2BfADAwxUGPG6Ynl/fYLMj9Pe2B5XW8XC73f8cBC6VI+oP5YctzzbmTGu4LGroYGL31v+hHErEJVCuRov4tj0zYfmh5kTngnfU9Cf259KZnPQZQyhu9rQZ1as6x98Wf53C/+Tzz9/X+Ohz7wXVRrlRbXVceKGAPbtubJ2WXshR/ms1/+d3zk6Q/x1NZpaI5opMFEIdRaYqSLymsNyTzIe8Q41iqsr58j1Nt0cUJ3cEB3eMjR0V3q+S5VfInLa1Ouvv8hdk6d5dyZbba3t7GyzqTyTGvDREJiM2lua0fOjkhzEiJdIqeLETUNGRbH/QjaJ/leMEYo+7hkjMSiR6VuCFqmRayhriqqaoYxwmRS4aqhWWzTNMkfbZWnmtaFKcyq1fjemAIHQ2X7sa9XgixZKFdji2rFMRLG8pG1WhmXXD1WX+s3i7TOezOb4Xoe5Hhgoawms/u/ma6jn2QSbSuWIpefFtpjdffpn+QkvuOil/3B++05OdNjqGOV6n/nCgFRE4bPrlt2nv2bfPEXf4EPfd9/zqX3f5hqZjApVTRGxWS9MdQ762wuLO+pHqK+8MP8xpd+lWsXzvLHv+cHmd++QTdvwIOpBI8G70Oru74kldWnt0kEDM29lnDwEnJ0yI5/k0tbDZcunuOhS5c4d+ZTbG1uaXkLG+hiS4wGKyHlEFYYlHQhmVaXSqWQfSdBi/9EtPxiiCMhLM3C3jxMc5bBG+ccpN8rtWhILCLC4E8ao7mO04mWhJnUyYxOoYuIZzmf62YQckU6+n+Pa7eVeQ2hLykzrKvhcyGEwXLL3ylMz/z36NzF8lwVylVCwSoxvTx//n5/7ZKFMf9AAtQeTFG+A/P1fj3bY7EzhLE2iGQb6n567eTX9bsn/576i/f7nn73GMgjkEojITayUTsufP3v89l/8bf48Cf+V1z54Hfj1gRTA1ED3tnj8M4RN6eYGlzneHTtEUz9B/gPr/1r/vov/iP+0Pd/ikfMhHbRELyni5GuU5/IkLms9LmVRgwhCFP/Eqe3z/PYU+d56MwlzmzVrM+m1NWUqppgjEvWRqdV7qzgpEqtyXXcjVgdc58Sp4uwQyAc43euopirBaDy6xlc8V1HZ1pcaoaUEcSc/eCMMJlWfXerup5grUkIaUcGDYwRTa/q2n599AysYuZKITomCIW2PBHVXXkvI56r1MtSWzqjjY1Wx2VV6/5ujl4Ihf7Jg57qHfiUJ5wxQiZbxSiMWmOTrdcRRDZ+f1XwRp+Lq5thMeDDDR7zdfNryb/skdiohHNnDR9bv8F/+MW/x6Wr38Ol9z5NPRXEWVLVTxoRLEpSbyeOyakNwsIiwVN3kSe2Nzm1c5bf/ua/55/8u1/i409/mB/50HexeOs2ca4VEmwXcWITipe1fgYoOj5y6RTv+9C7OXtqk6pSVpCSGRzW1sSovhikig2ZTxt7XskwUlkDluadRHz0Jy70jGaugiR5jLPw9Vqz0/hjDlPUdU3lLNOJVgnIZmYInrZtIEaG2mCpXXwhjDl+qH7lyVqoNBuH67z/Nh6DFmy2JnVTW0EQs2lv7XC9mgDj0aawY1P+fmN0kml/vyOj7Q+oIPvjHQjlCXGWZOYhaq6etBVECfcZynEoRQWpMEcSYjqgY9lHHSaoP0rZLlAzzWJPKUricaHh8rrlKz/3l/FN4PHv/knc2gyssmkyG6iPJxJZTAyT9Vqr0vuAUfuUc9MpP7r5R3j5+jf49DP/ms8++2W+98Mf5VMf+Aj27iE3X3+TkHpCLtG8TJPK688Pj9jf3cc3GgucztawVlKZTN3getNIhjiuMpsyfyTnEw7NA8odX4lSx8MAOfaX/9Zgf6fsmRS6mVQVsXJa1iV1PQPt3FVVTtk/lYPY4buWbsUEVqHIoEyiUaYSJwNHeZxhka+/3MczvpnJB4oOS/KJlcSgmSVKAnGuSiwf368TyfMprjfrJaKVFEL2iWNezgkPyeKva1oTlUsfsV+xx1f1ik8e+xDh8ap39zt+V3HK8VVk3/A4hqrruqivJsWXUPqWpIGP5BBI2rESKkZGx/oq3oU5nH1ZQ6qip6lWpMGuwhIXGoieGDpq0/HI7ov8ygvP8ej7fpz1i5eRyhKtQMqoB0UMs1+wnFXMT81wC4tddsql9hHrOtad5T3rT7O+vs0zr36G3/zi5/mNz3+WC+fO89Of/FHO7c3x166xwNBVFjGe4Axdd8T1azc52D/kzPnTCpRlGD7bJEnLiwxMkBBSUx6GDPshBED/mX6R2fF85IWRBQMGDZPZV1lTWmt7M7Rt2yTQFpFA0yzoGjASMKbIqI8RYywudT8TEbzvsEbLfORr0I8e14xK5jheOW4wLX3fVCqjohp+ScWeUffAFJr+mM+XqI8xDPFOBY3KdaoUTN3cRaM+MRuCSbhO1kHHj976jt/5OOX9rqAHhk98f+yQRyl15qADe/+z97pjKgswxH+EgdxNKj4VSfViPJgY1OQMLaFbQvDUoaHyy1QuouOp84b/8H//y6xvXeLx7/kJ6omjqpWbG0fXVRzGcrA5VQ1RddAq66WqLK5xRO+49Oi7uPjwE1y/9TrPvfRZru1+k7/xj36e3/fhj/IDH3ya6tXXqXc2aWLgxu2b3Ds6ZH9vn9dff4NT53eYrjlmkwqxGaZX2l0ofKXe9xMtwRKSQGYrf5imtPgYTL+3Q1PFaPOkGAcaW0YedREZRCpySMd7ENHMltRMe6T9MkPrmMlXaK0sZCWtbYh56zWXSGv5b2965s+nsE1PSJGB0uYL/u39gJr7aa8YNUxU0uP6z0teucfdiHxdXdelex2u/TueusX9IN1Iyk4/6U3RGEbxZvaIpBjIvrwDqfWd0UJY+RPGoGlHAhAQq6aHhIjxEdNp/mOMLV2cE9olMQYCDS0NJkbWZ47w9d+gXS5570f/AGvbm9TTisylUrxqMGPIVy1CqGqCWFrnoG0xnadqA64OmODAB5w1XD71fs49/CQHt2/zwouf4wvP/ja//aXP84Gn3sMLn32ZZdPwniffxVPvfg9djLx5/RoX7lxk89QalVMycckk6S8mJgtdhpEzRqHVDLSWfmOM6k8Gji+CVQGtqgonSpTuku9Y+p6ZXzqKAfYzN2jd/JBkNcXok+9oU12gcTHsnjx+wqIvN5M+Rpnodl3XjXw9rQ44dmdKDVm+VgJcqyGK1dBLNvUfxOQsfyufP/dRzb05T7qm+x0PLJT+bYQyUvLkx0fPKsk3kP4//Kt+k+49Ve9XKtQSENNpoonXLrsWD3R0/kgb9bQd0gw5hVECPmpfCi1JXyMY3ru2x7//pz/HxSsf4dLT34ub2MQlSP4Zx/T66IqxhhbwJkJlsJOICwEbIjZNogkRUwkb5hwf3vz9XDz3GF954dN89YUXmVXruGqNb7z4Tb76wjdwzvG+97+fo6Mj7t69x9Q5cFF3/RKW70cqDXfv/xQ+UzneaXFlYvf9dudyUXuOa+RVLZIXVBY+vTIPDPSxkmTQf0cU+aYQsLwZlGZqD+gwfm31KInp/SNpxXw/WQuX5811kvI1loh0Fvh83gG4Om5yD4IVR8JdFtAa+faRt72fk44HFkoxJ380gyonbwKDlhy/L0VoQyA67T0fEyBAg2UBsYHQId4TmiW+WSiKFgKx61IV7khXAAQxtVLrpSt6Tm/Ay//2byFYHv/wj1FNrBIEJBdITF9mEMiRtkSIxqRrdqq9IxAjHYEufypEpNJ0MOsMlx99iktnr3DzrddYY0q3aLh1cJvrR29x7fAVnn3mGULouHDuRzg8PMCsb2BdlUIpRXWgSDrVxwAA3qFJREFU5Pfl8Sw9+JNMV5Hcbm5MnFaAxI80Qgip+h/HBbHPmCgC8TaFR5wxCIGua44JsgpjkcgsqerASqA/a678G6qdKr2/EzRLqTGbpmG5XGprRby2Tk/nyJtE/n4ZzrmfT1v+XSapr8YscwlL77t+I8gCfBJwlVfWOwmtPLhQ3vekx+MvJQj8dpUA0pSnRd5C9BA6TOwIzV26Zk4IDcSA8R0upkYwUUv6Fz/Ygz4wEAcUEGl4ZPfL/PZzX+TdH/5fcOrKI9SVVihI8BKRwbdduWlFOyWJginBprQIkRRKIUeHAL2WqY/IdML5i1cJ+3M6FpwTw9baNldPP8HNwxt87au/xa9U/57/5M/8cW1AKprVkNAHPVfhT+WxzpdxvyBByYYpzbb8Xo5HxhhSqc3BFB35bKl+TtO22hm78AetaCOf3mTuOrq21QJYk6FFQz8mhVlaaqZSmCfVsCTLTUYSHuG9biREdYQiUYkFoNUrzPEM/9IPHW0c6dy9qVl8tszqKAUyp3yVfupJbJ1Vn/r3xHw9MSQCx9ex5tLry8aov5knOJDKgURM8NjQQNcSWk8IC3y3wLetEo+jmkaZ8U/Mlm0WBJsyPSTVmgWJHRLmmO4A3+5SLe/yrtOOZ/7VP2A6O8VD7/tu3NQhzhS9FIvBK0SzN2V7Yc+CIKnkVeKyEvoCxRLVz7UhocD5+wI4g5046lgRm0CQyNm1c7z/4id4/tnf4i/+H/8v/NRP/kF+8Ps+SvBLZe1MqhEiOBpnkYKcUPjsWQj9wOLRnT30/mFeiF2q72qT3GT2TRnLs/m3bQBrmUynWm0uwZFCJCZCthVtmOScU0GJEYxBrOD7xRtHmkTDLUVZDZOrDKa4avZpQ+wrt+ffsbWwbJY0vksV8MauUp7Ptm2IQF1X/WbaA08IxhZbm2hCdkRLqmTTtzRPVfBBCSYp00Z3yOMAFwyE9e+0UIb7CWW6Ef0nZhii79YkBsQJTgTnO0K7pF0uCe2C2B1CuyCENpUeBBMTyyMVTo0IiEuEcp+uRX1HA7og/ALXHRH2bxP2bmCWt1njJufWPVdmZ3nuYI8PfvSn2bywg5tYoonaBu0EgTzx9vQDedwTCyS1VAsB6yOVj0gI0AVM08KyTSRrrTAetTiOlrCwFkcg2sjZjbN8dPbDPP/mZ/iFf/iPOTw45Cc/9QnAa6xQYrHT69VkFDP7YDDWON57utD1QE82U2GV/ZKupzDRJN2s5PlMGqpyTmOpEomx000o+eM5LarXRmjru2XT9JXXc8vD8hqAdE6j1LxJnUj0Or6hAJlMpO/4HJOfZgw4q0XL6roq7iuNSQaEUkJ1Fo404UiqTZOTkvM4+pByRNPHs4YtWVDZ9RKGurElANZbBSHHVGWkfd/ueAc+5dsRaoeeEjaK1rtBiL5FuiUsO3y7ZLmcExZHxM6nUdFiTkgWD71JKSZOsp8ICB4bWmgWhOUBrj0kHN3FLHaZ+XtsGc+FzSlXH9nhkbMf4tRjl/irf+Wvsr5+hic+/L2YSZU6H8cTcMlSQIu/YvFuDj/EQNVGKu9xPmBbj207fIy0ocMvW2g6gtfAvKR0qX7QnaU2EI2W1Fir1/jUuZ/i+u6b/Jtf+mUE+BM/8SPkumtGBrO5r49zglCWO3qIITXzzX79mNmTWTXWWuyKoGQNJalUyxCuyCwjrWBuCtdkBGaklzOYo4t4TBTXcXCjUAqo4BwrctWHFXTTL33LfB85yyVff6mVSjO+BH9KHzB/NzN5YtA+p6XrkM89WjV5bEzuXZlAxzTeRoZ6r9/5uq95Nxk5s3kCku8VPXQLJC5p2iV+uYRmTgydxhZFS0Xl+gOaSVFhQtCs9qj5eSbtqMF3aA/6lhiW+O4Qv3eH9d1rbMYjTruGi9szLj26w9WHHmW2PmFzex1XW2ZUfPmFb7B39x4f/d4/gdveohUScycPbmFOjJ5Kvs3U2ruMomqdHdcGXOuZNB5pOkzTQWLwsNQeHF0IRN/1NoaQUn3FYFLDGm9CXw386oVHub77bv7Fv/rXfPL3fZyLD52hM8MiL69Yd/SQOlYPycc931XLAxZCMI779SEMGNkIo/BEesfYVHUOzYOMMRI7P8RKRz6Mgn5lVkomBAz1dcb1cUoQSla2y9iDeEM36NUQStZCpfCVQM1gcg53msGgVSpdCfIQTQ/mrI5Pf23ltUvmORcWCrHX7A96vKMkZ2u0jQwxqNkWF7BsMG1LaNqUhjNnwbwvG68VDuPAAY3SG6E6gQ2RiigOH4DQEsOCtcN7mPk9uLcL+zep4xFbWzVndmZcfr/w8ENPcHpnh9l0Sl0pIVqCUBlLbSuqjQ3+8X/7V9jcPMfD7/84wRqtvUrBgMmgSTnQhdbIJpOJ4CJMPFSdCqNpOvCe6D2haQmLhtB5bKe1bUKTCNkCjQHrQTrN8M/+jLVOixLXVhdjCFzYfogXrz3Db3/+i/zxR36caCJdzrzPFeHzrtzltu3HtYsYSe3Nc3KyH73faylATohFGqMt3ytXms4xFY1Gzf92yOofEMosEEPIQME5EtdUk6T1ezmcoCVIcnu78ugBmUgf5llFifO5ytdX45Hl6yeN10nasyQkrIZuRmGP4hpWD20VOISfHuR4YKFci3upyK4ntg3d/JDYzpGo2qE3L2JUkCPqPquaQXMZNcxrsVHNXMIcFwN1aGmXB7SHt3CLO3B0i8lyj9NrhodObXHh8bOcPb3F6TMbTCaWtTXHZKKV0Z2ryC3dRSwGB85x884dbt24wRPv+l7c9iZLkw1I3dkVM4o9qhMLUywPnUSwUYtTTbvI+iJg2o7YNbBsiE1HbNRUZd5St57YtCybJaFVHzkmM7UzuVxFOjdoW4Fpja0tRI9vGnY2zzJxU774zDP86T/9Uyy7JYFIm0pwSPADRTjGvoZtD5RkLSJxtMCtZaQRYAgxmIRgZi2Rwx6VdTg7IOgxbaQgOGsJ0RXnKkjjoo14+vFMMcKmaaAZYqfT6VTDK6k8pAIwZXWBAsoOWvsna6F8jGKixWvZVMxkiFXEVYfvOECW309YEHVdj5hH5flWzzFiDSW/3zmnhalXTPe3Ox5YKM2925rS06mZJrHBhQ4kEK2yenRKLD2LQe8waaaIiMdEj2067LLBNq+yvHsTszxiGg64MPNc3ply5bFtzm0/xNmzG6yvT6iMSyUKk8a1U4ythjIVuRGOCN4IMq35uf/hZ6nrGU99+IfpjOCFEwytwTQcDXBUll/lU83UxjNpOqp5R2yTJpwvictWH02Ln895a+8me80eL+x9owcl1qotLm08ymSyzvraFq4aiNFWklnoUqlJgXpjAyuWV157nc4Hural9dqLhJA6JGfGiSmLUI8FLpZMKlEwJWuzsi2cgBYPrixUtV6X0RbwBqGyaaSiWhg+AUYiSgLPmSmlb5VBmNX4XWkKikhf8mM2mw0ajcHHG2nDvNEXr5WaK/+d5zELT/m50j88VlaSYSMYHkN8MmvX/ChJ9WWoCeitifxaNt9Xtfv9jgcWysXBfj+Zxkrq6htVNUdDFSM2Bnw0dLEiiscRqLsOaRtcsyAubtIcXkOOllTBc356kwtbMx5+4gznz11m59Q6s9kEK0LlprjaYCvRHRvTk5pz2/Fk/KiphGBTHZ5bt+7wzBe+yGNPfJzplSt4Ucx01arvUdUcUkmL2HWqGevOU7Uda0cd0qoAdm1Ht1zSHc6Z7x9w7ea3uLe8yzf3XmC/vXtsJwd46d5XmNg1Htt5mqunn2I6nWCcIDFlR4ogNpmIjeu1d9M0hGWKDbYdwQcqo4he5uf3nGDJWli/rPcW+41IJI7azPWhD5SwYWWIURqbEN6o2S35PKSfyVpExPSc5/FiHoCnVaCk/FzeULKGrirtQVKamv1cZd/ybY4ybLEqKOWxaqbnz43AKoAoPRk/b2b5OyfFWct77K/9AQWxPB48ThmaxL8EE5ViJXREDCFabBRMaAkETGgw83tMlvu4/VuYgzust3Nm5oCL52ecf/gsFy9c5vT2VdZnk75Fm5aPqHSAjEPMcNM+ejx5MSjDJcoQHgC05UBV8/P/489ibc0jH/kUi4nFknLnepxqbLYQE4c0Tfysi2wuAq5tMMsGc9hA0xIWLXGxpD2c84VXP8M37jxL4xfJz7M89dT7OH3mHBcvP0bEgLc0yzkvvfxldm/f4Ou3PsO1g2/ywYufZHN7E+M9NiSGjjGpUZEhkxna0BLbBkErsAdJBbGyZkxeTwyDr5c1pCQQJsur+mz6PC/A3NPDkIRWtM6PTbFCAxrvzECXDCj8yPdaAV/UZxxT1MrejTD0+YChUFbTGCbT6kTmz2D2HxfaMhSUzW/n3DH2UimgpbYs0dyM4mZfuBTEvqoejICl8RgMvGFjTIocPHjLAngnIRFIYXuBFMbQWF3DpDtA/BKOdpH5LpPFPbaWh2yZlsunJ1y6OuXi2XNsbDzCdDZlMpkymUyo6gkQU5Vt09fOFFEMroT5x0hbaaqVsKlwffc2z37pSzz8yMfYuHyFTnIHqyyAw9cGAdW42KSLTDthcwmzhUfmS+J8Tne4UCBn3nBn9yafees3eXPxKmvTNT7+9KfYPHWW4HZ47dptbh4ueetrb0EUQuM4PJzT+TNcPP84731v5NO/+T/zpTd/lQ/ZT7FdnSK2LS5WYCuESGNNr5Eqa2g1iaUoY1nsyFlL5vkZnE0VLjFayXGkYpLAiCFEr3S5nEBNyKORVGLSsuZkv20V6CgFNfuWq1kgJRpamtH6d8di7jE2U+7cwDCK9EAX0KPNq1zXrKVGKGq5jkV6fq4xpm/B3jRNf03DvQ0xyXze/Ju98hAZbTYxAVK9aY2ktfZ7wOgRsrkXlDlDS7c4oNm9wam7LzKJDWcmcGaz5qFHN7l8/gw7O5tYUzGb1VR1ZFLXKbPeaQzLVsNutmKelEK4CmeX9zZcF9jK8nN/628TQ+Rd3/VDhMrpPiXZfyx9FMlWKxIjtY+sLT1bi8B0GeBoSTw6IB4uaOdz2vmS3b1dfu3NX+Yo7vMn/uAf5/rRktev7/L63WuI3EHEElNTHYmGrm3wXUMMgTfeusatG8L3f89P8aXn/h1ffv3X+K7pj7JVWUJXY2QCxrK0w76hXapMKkk/aLkU0hv1uhAZ0FbQ6vS5vV8sBCjEQO7qbF2V6HJ5nPMj/U5UE5VcR7Wfl+PzFLO1kUr6WzumtpUxVPr7G4jfNrNovAJlXdcxmUyYzWa6VuLYV1wVyqwdy2sqBar8rfzdsgPXyM8uzNUSbS39yNJE7rVi3pRMiYI/oIAVxwML5TZL2oO7yHwXOfwWs+YaZyvLxTNbnL464/z5y2xvrjOZOCaTiulEU4IqaqqqThXVSBnoIBh8F1KANv2IDGTrVfNoOAYAIwMVlQ/4VFPnpRdfZGvnMnLhPJ1ApnKP/McccFf1iQuRjYVn86Bhbd4QFkvaowX+6Ah/OKc5nPPcnRd4ZvcLPPTQRX74Yz/OF77+LRofCeKQWGOjqOyI0yTroMyQgAcJiHgWXccXn3+RD37wu/n0p/8tb9x8kenkg6wtO4wPtNayyGZo+n+/S+f77gErZaqQhMSsNMdJedNDHFKgi+l7ouBOlTM+etYQqXRoMm1jTMQHvaZA6uwVNaxxPCRg+8TjsqRI/rcMReQ4aZndYcRASq7OfTdyXqKJ4NuiDUQYKIMwhEDKTSBfX2maZuErQafSlM6mazbDS6FevZf8+/l3e6ZPiH3oSmsyvTO/8oGFcuOFX2VqAld2ppx/eJuz566wsTNle2cNKx11Zfpq11Wl3XgtFRVTCJKK8vqkSXTBxVhCyrH4//0ZFLrMBgaRoN2sghF++d/+Knv37vHRT/1RZG0NHyVlmmt9liFBSw1xL0IVI9PGs3bYUu/N8Qf7tMsF7eGC7mDOrYM7PHP3a7x++CKXL1/hsSc+xue+9LI2SDXaPxKJfWEsj0GCJwZt6KO1bSNERZ6DD+zveTY3t3jjzvNc3nmM6eYa0nS0kmO4eoSYaYsyhBxStn8vhHlUkiCKqLBqS7kIMZeeVEqdIqsqEK6v2zt0PhPRz2XENZdnBMhtzPO8rIZiyjSm1aMPD6TwSP7MqpAipvcHc36n9x4Jka5pe423qvnyuVbN5fx8NR65+nopoPn1vDGshlBWgaRVvzIybBhiZNTw50GOBxbKn/jEQ5zfXmd7AtNqRj1dp6oETCROHNLb2MlniQHfRryPSEjoZ06pSuKRu2DFDOcxFsBV+Du9ysiPjJFoBJlM+Gf/+J+wvXWRM+/5oH4HyOkDOR9k+GrE+chmA1v7LWu7c7izR3e4RzdfsHd4wNf3X+Eru58jSOD3f+rHuX5oee6161TO9hpfOz1rh+QQRYsJ+47QRS0bQpcmqUvMJs8rL73G0x/6KJ/+rV/jrTvfZPP0aWTZIq7qSfb5Vk2aWDBaTt/EwbyUcT1XLZ+Z0NfUEZnQj0Rv4mXQxfSx0yHwP4Q/UopcIoxr+pj0Jm8plOWiXQVhVsMNZUbG8cWsG9hqNksIgdj5XsutakTvPVWl1RHyvZVFuVaP1Y2+TLg2xgz5ocYd2zzK+873VfqW+gPSr7OscU/KXrnf8cBC+eS7H2ZrbYKjw7kKFw2z1Ka8NVozIMY4ZCYAEiIk6pSarIOm0jtS8P4k/1ed5LgqgowFV83dYAyvvv4W+3t7PPH+jyKTqdZV6c29BFMJmBCJEnEB1tvAzlFgsjeHe3s0e3vMD/Z49d51Prv7GQ79HlevPMyH3vdRvvrCWxxEoxkmBrwk5Dckmnzy1zofiV5TzNThV8qb/qfP2+BxkzVE4KjZw3cdk9arEJCHRjAx90HUtmuSWkFlE7XPqBA1Y6XXbNkn0M8bIzjrRtUBjBk0Y2/Op72xJ7CnTZMI1jmMcT3yC+Ng+eqCKwW0FNxjYQcG0EYBG+nLoJSfDQl88rn2a9La1lpqZ3tUtkRcxZxAAlz53fwbpU/aA1VGVL+smMOlUGZhG21URg3+kNlLRSfpBzkeWCgf2tnAWIO1M4iB0Hk6A5oOBMF3fXqQ2uJgsnYk8yjzwin8kPsAUpnuNii2AuVLj7y528mUv/P/+VvUkzUuf/gHVCv6UAi9ah9PTCEIjUNuzj2Tu3Pk9j3CnXsc3bvDb976Ei8ffoPpbMonPvbDXNtt+cxXvqkawqlgBJPNRYFUec7HkJrFqt/kCsjcB+WhhhjxAYLA6zf3cFXFrcNX6NqPY5ukmWS4Z2sNMcOnMghIru+aW8mJJI3aCwjJpwHnKiaTyYowZIEtPO441HPNXZKziZsXq/e+NytLs/Ukgbxf1n4ZlywFelj4Y0JALwwAVvA+tVhMFebEpT6XFCYpkaZre2sCscd+K/9evrdSe/egFcc3kJMQ1Gx1ZJ/VOimElD4k8h03XyO5sUva0WMgdmX76uLC0VC9GNFq5v0EZJrWsBOetHmMdsiTzI+886bOVN/61lu8/MKLPPGeTzI9fbbfaWPapCSpACPK/J/4yNYysLHf4HYP6W7u8dqdN/jN25/ldnedD7z/A7jtMzz78jXW4wRb1drH0piioapB0m4dukDnuxHjI4jm6VlnUwpSwERDtFmjphgbWl+IpsV0gfmdazTtnE/+8CcREugwOI4phpgbrg6bQy6oMmR2WIzJWffDYshaoAw1iVhyRr0IVJWmWznnMClW17aacZJRy5NAkvIYhwnGfNHV3pClJoKBFK6V1Qeyt5ghayWbwogQfOir5/X3mH5PqyrIuCZuHECnEEJPpSs3g/utyXyU95DvLQtliMWGFZTb+3viU3bNAB/HoEnIvYWUAQeRAe2LMRW6TQIrKVsga8z+BseDoOaTfqaEvFcHRwkGFltP+Lm/+bMYsVz54PcRRHpgIyZ1OlTR0/PWnWe28NQHc9pbd3jzxmv80u1fpbNLfuiHf4KXvvEqu7deo55s6OIuMuiNFHVLCSkTfqU71AowoD6OHcwlYJJ8QWOcWhGttsX2iyO87zh9+hQhapu+XLfHSGlyxp5mp2ENwYqjJ/obyDHNWGxS2WccNlH1H9Wncn04A6J2/QpjpLEMcyyXS+q6Pmaelr9ZBtzLMSrnsjQNsymrVya9xhqYN1aFNap/rSa503pN+T6TSZ590t6kFei8760ua20PJmW/svyd1c2mvLeyAsGqgB4dzXsXw/X9Xn4PUrdiMXDELFyDSJWiJXFIj+rpUSPjXggh4xmDAGX/JmvQ3EU4DusnfT1lW2A58B2vv/Y6p848jOxsF1oy+6MD2z8CkzZw9rBh4+4B7Y2b3Ll7h1/d/Q1au+QHfvDH+MwzLyBWqOoZzlQgDsQQJJtJBouCCV3oKHsmltkOEAlRC0FLQjSNAe81xe38mXW+/tWW89tPInVNKLiaaRCJxqtgiWh8NzdWSuazzQJptMyiKYGswuQdLJVBOMvY3fBcr1sFaYgfZwdE4gDg5MXYdd0ocH+SkJWacpV6dxJI1AtGul/tDqYCpno+hX6Sv51T2EwKCnoflA0mRsc7N7E10q8pvWeLS+0D27YF3/Ua1yo+349N6X+Wm0oW+qGkZMA521sUnfE4o/58Zb/DrfAUOJXelzum5FfVfhxijopDRPVbTrDtx6cZo1k9EjicWGsyJZ/pX/7jf85iseCDn/ghYj3RRRQLnzT7fkawIaqG3F/Q3thl79Ydfnv3We52t/mhH/oxfueL30AmU+q1CZU12OiIfbOh4cit2SUeJyoXrUYpRymje13XUVWOZnEIEabTbcRaQqcwULM4AOCRqw9RG4MYPac1mqXfI69G2xz0ycORlDCeAAibGhsVQqKLyvSMqNKkyqZprlBQWjOlUJe+2UmAz2r4oXytdEVKoc2fyf9m7TuYsYM/lse59HPz2ur9btI6C6EPVUWizk2yVPK9Z4DJOddrzD69yzqqoqN0/v0yF7PcgPL4mdwm0lrt89J6ZN4OfWC+zfHgSc7pyObXffAZYIyPwjA5q6bo2wnkqg3f79D5EcG5ms9/9nPMpltML17Fx6SlV0AEjEF8pIqRjaOO6tYB81t7vLm/xysHL3LmzFneur4H1lBNprjapfboFoIUymeVyDCAH6EIsp84Jmni27Zlc3uDr7/wFYwYtrYfSvE5jXVef+M5AD7+0adZl6V2zhJ1ESDzVwdh6qu0xdgjhXkRUoxn2ZFqFUHMwpEJAWVC9BitTBpHjtdEHZmJxXitmmxZQFc1Tj6ysJXCetIjj335e73PJsP3jTFacrQAgla1etaCOVyTv9v61LQpmbilL7u60eQNV1LcOlP5HHD48ut0N+5xWBn4T++7RIYx+PYfSTdcVqUrzFcoEb00Iv3HVMvdXyuOn0vvM+UBTCiuyUWUFLmJCOIN+/OWN994g3MXn6Le3KIpficG/bwxhuADRoR6sWD97hJ/94C35gd8Yf9ZovF88Onv4YvPvkA9mak5k4pyKWiiix1RFowzNpXXh+gVhQ4+V1d7+yNP6hOPXeY3/v0X2JxeZra+iTGWYEL+GQCmlcGJSVWtEkRPLNDqZOpBD937hHKrlUBfVCubpqsmZAixt35iQqVLEGTQpkUcEU5c1Hm+S204otCtCM9JGhcGAKUUzp4pU3w/fzcPha0c9LHoVQEenKyYrDb1nCK6z8QBjENJ+CYCIeBDQFKMdGQ5hCHemsfVOc1yEaNgWQgRe7QkvHkHd3eOl+9wknO+rZgFcmSiFIKYHyOT53jJ+Hwz47/zGfJvQSwYKaRlEaLyQZ/52vMAnH34/fpO3ycCcp/50pDcPJwzvX3A7r17vHj0BreXb/CR7/44X33hm5i6wtYVlVOTkChpwnLlSPXhrEm1anzAp45UhG8vkPmw1rI42iWGwKnNh5XYLIJ3ZlTRvHIqDFFyrC3nqybjOI2n75qhBZ4BzapezVwox3VwB7LfTWI+ZW2Xa5rmZOfsqxkxRI5T3E4CebJZuLoRlInYJ5XaWD3vScDZqlmcA25idF5gXGIzgzbZ5/NBUeYudolbka8n0qWO0hZSUnnEWvXVY0x8284TunZEwqgqDT25ymGcbqRt12JNp6VjwuC6fbvjwYGeuCIsI/+gFErphbK43/seZdC1pEnl3zyuYSMhdkg94dc//etU1ZStS4/RhUAnpDKEg5ZOc4TFsHHY0e4d8MLhNb5693d49PEn+NZrNwgY6tkm1WSSyiMKPpty6aezyeacJcYhk/4kNPHt71e4eeMtANbWdtTviCqs40kLQzpW//rquXWHN6nrdck3LRdwCaCsbo4xRqJfzcYpqhIUaCuMszNWTcFyLrN5m+d1NcH5pH/L+W7bdhSYL8GW1Xsr0c/Bdx7mYuiZeUIF82LessmZ5zXESAwdIRZtE7xXUC5ZE1kgp9NpH9cNokQVMaZPEjDWYB6QA/uOfcp84+UEZhMh6h/EbMFn2z7vdtnXGdAfNf0Y9vEQfG9SjScqLf4o2BjpRHj2S19iZ+cK1ZkL2o4tRkyP2Mbe+fQx4IMnHC25eXCXL+9/ibX1GafOX+Gtr7/MxvomdT3DujqZafTlDfO9DRkY9E1hc+yODN2Xi+w+wjn2n5LrbyAmFDFGz2RS94yQfJ4IiXKvA5tLNp4E2OSxj9n5Ft04y0yIfmxDnsOMGtsehbXW9eNeUtyy6WvMsGGUSCoM8cvSf83rJl9vSTovjzKEUq6Bcv2t4hTlmly9lhJBXZ2DVSHuzVCRUSGy0qfUTWJou1Buhtp8yWsnNTIGIwlJ/j3UlPnHBi2RJ5kkcNngQ21JBBLzp/dMkkAXvwCoio/9yYbfLgc0iuV3vvgFAC49/lGitVo7KGfl5+/EiI2q9WwTqHaPePbgVe41t/jYR3+AZ772TZyrEVtrERssEfAxJ1Enfw1BrFXiuw90nadtc1u2PKEUz9OiiOMgeb7+fK9aA9bQhoCfVOzv3eTg8BYf/56PYsTjQ+K6Jhk3JJRVCsHXHSj5hMmPFCDvyhkpl2FIS38wZ5rkMdP3bEo8bnukM1tD3ufSi+M1Ufp9WSjG9DkzEsrShD3pyNeyKkzDpjBkZpTfOX4cD8WsrqvVlgbZxA5h6D+SzXljDPWsxpnh2kbaNztL+fpTmRe9n+8weSA73uk2iWFQ6YPpkwUwJl7mYPp0q3G4lUEsz7N65M/1/oizvP7mmxgxTDZPpwB+2i3j4HPFpCUA8JHl/IjXF69roSa3xqKNrE8qpJoipkaMHU1evxOaYZKCH7RkHo38b15EvcZcuQ8R4cnHH+aZL/wy02qLza1TGCLeQGdMqvQWUh/IfE76EEZiwR4DRmIWzOKas2VSjuEqa6VfrCcQH0pKnfe+95/KBb7a8u6keS3NztVrLk3TVSQ0m78nfa/UiHlcy98da8Tj/mi5eZQm8KqGzT1I8v1nze4Smwvi6N5i1E1bHPjeFSvR6GNDdeLxwEI5m02HP2LEd+3A9GAIouauv0aUitZ31k03l76eTNfQdxBOotRzGOPKDfSDJYKZTPm1X/olqsk6s8uP4JOwxJjr9iRTWUAzIALiAweLOdeXbzFbX+ObL79BDCG1466PJbDm37RFY5qu6/Bt16cenWQ9nCQQ+T1jDHVlOTo8ZGN6jrqeqmXgLF5gebgLwMc+8rSexxisGSotJD76aBGs+mMnjVlGTcv76uOrqVtzfr9k4JR+4nw+18pzRd3Wsk/M6u+v+nWr/mDpY5a/d7/6rat+cukqlM9L33EoKDZowlVzu9wcynPn75Y5n71m7JRcsYoh9Jseyr3u/GoXsweTygcWykyfjKBlJJ1ecAgBCQaMUTMy77rQl6oIydQSkV4IY2KfSDIzs0mW7zGK0ayKYifK/7712jUWiyUPP/FRqCeaiBujgk+iGezqHWUTOiIr5QmjRDDK+zTG9eGDGAq/TTLNSyHw6LWdePBdhrNWYrKxeKD3XLwj1tB1y/7TgmpHAaKJ3Ln1MgDf/dEPFLzW8dlLK+DYowhLidCbUuXiKzWNghmhAOaGkEru8QHK37UoVUxSnw8RGbG8SnO2/L28mE8Swvy8/FwuBRJDwieimtghbbJGMp1Qjzw+A5tnXDgLNLZbrp/VDaO85lUhz4BX3sgkzWteqGNGVNb4vu97kgkzEpUk/yDHg8cpS3M4YzUh9jHEwW4edizJrdElYk2C9EPmXcZEPZPRTpmBlhwAKCcXdFHeuH6DGGGycUoFLaQHEUlMltLfUqEMhHKBVyAmmWAp6JHjjT07IZcMSaX0u7bFdy0x+F4ow8jEKrS+qFctJDaqZGJ54UOlEE4gslwcsbd/nfPnznLh3CZCkyZ5EEITB1cRxmbiCFwSekHLZjAMJmn/81mo+thm7M0uw2DyarOhyTGCgE3YwXDvnCh45ZG1z6ovmC0Rg+2R6JjGNzcUymvD2KLBqycJ8HEfM19vZgStmrvl8xKZLkGfnKs58Gez9TDEYMt7ypubzeczed0Fmvv4z6vHO/ApC2ZGFIKPGqz248HVXSr7DMNXSuRK04Po1Xn2TctdKjLY4yOhtI5//s/+BUZg5+pTRO9TjE17TQYJms2Rd0ujO5wPAVdPODd9iJvzN/jAo1e4dftuz/TIftVqMDybc13Xqtm6AquvXt/JhwqpjwGCasrz208gMdIa1QBd17BY3uPChasQGrrQDtn4ZOM+PxuPaTEtJ2vDBNasBvlLk7Lc/MZdmcdsnTFYM5jCSmIfyAqr5mo5/yVgU66dEAKhG19/Xh/5HDkMkRHbnJmRyfnZbM3zpumEHSGYkQDl4yRBzUf2qVfBJRPVryy/X96Hdba49tjndbrqO8x9LYsSqeU5QN6hO747raJsx3b1FbOqPHI9UYekZq0RG4RoQKoJ+/v7rG+cg3qiSGBQAY8JHbW9Kar2f+y0DEdwjomZ6CICTNDwiiX2ZIPVhRJjJPqOkzJWEOnTwu53JLElhsikrtjfv4eIMKs2dBFawTgHqXHOxvo6+7d2qZJ7YOsKN51oAa38U2Zg2A50+5yvOQhPWROnbKSaxz3v9KUflzmg5X2uar28Frq2TYSC45/JzX3KtVD67bkgVxki6bpu1FlLW/j5Y/FX3VCytZU2j8jovvt0L9EQlrX091duEHmzWiUy5PuOMfYV73ozO4KZTRS5zrFkSTiI6GuSQ4RWy4bC0F/l2x0P7lOOkNbj8PPqTnuMClU8z4OVE1qH12Qww0QwQdsdWAQnEBBuHR5yb/cuFx96P0xmSSBTvA01F2IYHGBlX3ja2BHFcml6mVcOX+Dg3i6Vc4TgMQI+DkHufPR+U2K49DHX/D7013oiCtnft372oUvn+cJv/SKVnbG9dUHbmhtLFLj++ldADH/4hz/FS198ljNnT7G1s4Ndn2KalslMS/xHCxJDovpJj7qCVi8vY35Zq5R+WxaenGmfF2oZeii/MyzuQiOnuXZVpb+RxikZgmT5dM4mcrb+bl3XKbY7xLiztRSjprGF5M/qNSSWTTeOW+bOX6TfU7M21UmSfO3Z/RlS+cr7WOVYlz5lWVwr32/+7V54FwuMFGUwsy9sBI9aaJrsHwkuWRArMnO/44GFsmSvRDXk0yIdO9AwLj5UZlEcP46nxfTas1j6UcAmV+3ObUUoZ5tn9O2YBz4jRAzIZ4yExFvsgmc+cezMzlKZCa9/62UunX2E23cOaJcLxFZDkabC7Ioxgh+CyP1VyUBweKAjRjY3ZnRdy+b0NFJXdAI4S7tccuP688ymE+KdXd46vMHBndts7WyzvrPDbHuL9c1NpuszbK3aM4dpeo8uZjO4OyZE+f1VXyrXtREZKoHnBVgizqVFswq89UBOyJvyYGaW5nJeQ6taOD/vuo7ccCgrgGw+5s9lLbd6P6U5PszNGGjKWnHV3NRu1kMopTTry+sfjx0s25bc77Kn2DmHxaibglp4zgpuNqGJge84+tq1ne5wyWyg332O07dWB2sV0UqfQney0GfGl1rTGYONmqwbTWqT4By/9K/+LQA7V9+TIJVeHw3/ZJgyvxO1xsvRzLKzvs7l9Sd55c5zvP+DH+P69V3mR0dMZusjs2c0IWGcjdBf69v6kaNPM51OuHXtm8QID53/INE5orMEa7h343U6v+QTH/8kr33rm0yrlkVjOVos2Dg4Yn33HoutLTa2NqG21LMp09lUe3kkUEdEqCa1otCim1oGiSQhqGXsrwQmVgWlpLUNLKZuxCfN8zRoHsUZSv80fyf7mavNcVY34xCUwRSJtG1H23bl/npMOFZdn+H98VorCyfn3y2TlVctiXKMVsGjfITQ9K/nzaaua41t1lZNXLRSxGw6Y3nsDPc/HpyQHjIymbHRQQiyLT2o+QEp7Rv4jiD60oQtY1J6SoWhDZWBYASx4KIQXdULwtBmNiIEcisqRTNDb9NHNPspAI0VjmrL1c0nuTF/na8+9wWeeuQpXrt+G2vVlA3pHrNvQ762AmYpu5KMRFWGPSF/Nl/lhXOn+eoz/w5nJqxtnae1Rn1JMcxm2xhjuXHtGhfObLJ7sE8Tp0RbYU0FPtAtGhb7B0iljXXW19dZW19Xs8kYrHP4uqKeTmgNTNdmkBaGWIOrq97/CT7QdG1v6YQ4LNJIMuFWEPGspUqBHFkTCGKEtk11WnPR2TRfPviUlBwT+JLWDCQzL4NzsFxk7WXT/Dq8b4ABSc3XkGuz5pkxyd+2RRxyVSGUrlb+O2vq8rgfWqubTEpcKI6maYkRpjYl8RshBq2TBMKD1n998JCItr/UxVlODGo3g1Yay2VC9OJVaIxoAm/OgRp4gJIdMzK+GGMyX6zVjk9WiKKkglDNePEbL7K+eQ536pxeQ/r9bL5lgIC+f0OKUQLewHximK1v8fj20zx/+9NcufIwBk/TLAiiNXh6szzdexmNjBSbSz9T9B/uK0SWeBBw9tQa86NDzm4/BbMZnbNY4zAYQjMnxsi5c2cwk46ugb3FEVhDbR1T64jS4WWJLCNdDITDI/zsQGu4GoObTMAYQmVpa8Plhx9mUk8GP8f73tfrN8F8caRiz6ICYmRI08oapgRETkJNMxYgKcE3WxI5run9oNWMdUkQxn6894Hg89rSMIhPCKpgeiFU60oTTfNaU82m16l+//EMlfEmMmjWVZO49K1Xj8FFc8fOka2srg3oBmJw3iThlf7evt3xjlO3YBWazyuw1BGlKUraVYQYBxh52L30HKO/RREr59G+lkpjoes8d27dZuvUVSS1bVN1S4oHxuRSamy0YCISgIUFKoObWE5tnmdj/zRfee7LfPSjn+SrL79JNFWqAJ4W5n3GMPbX+WBjF0W1d4xRqXySUrLS95eLPWIMvOtdj/PQWmTvzm3u3r7F4mjO0dERp9bWtTZQBOd1wdnGI3HZF5Pq5ktCNDQSCBsTurML1mdriDEs24YgWkWv1B6lr1gu1IzKQuLbrvioJeiR/y6TqcuQRD5nfuSFnsn8AxPMp3VSrq3hep1zGHucbJDXU4kex1TO5MS5CMoiWwX0ThLA0r8sgaHyuvK9l+0IQ+HuhKD/ux/H96TjHWSJyKDY+tA5o4VZTpwxJuX5pXoqjE2f4bODT9gvjPR/GYBYpc+VjnLylURU83oTR8houU3oaSOdQGuFpjaYesqVnQ/w9ZufZrm4x9b6OncO53Qx7/qmZyTpz53sM6/e90nHbDrh5Re+AsD2qcdASL0+gNBx7drziAg/9iM/CId32b1+jds3rnPrxg2W9/ZYNg21q/CCEjZCILQB3/g+FBCINL7jqG0wG1POnD7L2VOnMZVjvlgQDArPr+w0pWbI4E8psDmxoTT5Sg7tampX/mz2X0sEcyhU1bJcLkcgTL+wGWeX5IdWiYv9eUpBGm00+gJF3W9ykXpgyBsVn0gSyil2xtJ63/vhAzo8NnVLBg+M/eL008RYIMWkur8xFODl2x8PLJQp6Wfwm+IwqZJLR9pcfIl+1ywnqpdgyR7p2IGOcdC6kncASSZwhK88/w0Azlx+twp88XX96PB9ZdHojESCTlLQdnJLZzATw+bmRc4ePc6Xvvw5fuj3/xF++0vf6M02XeZjfmR5L6W2XwUgVg8Rw+LoEAAjTjcZUV/XNw3L5pDt7S02tjao1is2N2acOXua9Y11rr/2GrQtc7+k8TCJRtu6x4Gt473naDGnaTvl0R4dcPqt6zz+6GMwSaMSh5WZF/bqfaxqn6irayiwvbIJZUECeoJ+ad6W72dkexXhXEVFjWiIYYT2x6GiXr7mVXJD8J7aVsiypbm3TzdfatEI0bVgKqe1f6pUULuLBAnaXzPmeLsnWEvGMvN45Y2lXM9lpCEfwwY1CHMbI6Ey2tH8hKyhk44HFsoxAiUIBScwtMToRztnuYOu2vTDjUVYKZHQL+5YAkb63We/8jyIMN0+27+XHNc+ZjcypksTUyTVbbV0TlkXrq64cuaD7C9v8Jnf+mXe8/Qn+co3XtYFY8wDm6cPdORNLF2XEUGC5/DudebLe3zqUz+K7xZU1rK2vs76dEJdO6azmsX+AV3XEruA8YHQDZUBABaHh+zPD2hDy/zeHl3bceHmbZrDowR6pdgjY78pC15d18fM17wQTRwsgvI75XnyozQBm6YZ+aKLxaI/h4hlMpmMYqCDvzlo4XITqKqq72ZVMp26riP6gA1C1XnM3SN2v/oi8zv3+kouXfTUU0WszelNzKkNXFVhnSN1nUrWRiBa7bUiScXaom3eKmA0gD6rNWOHzTrE2JM/ls13mPtapm4pWDPsVFqBOl/IEHQuBXIV/tZjSMjtz9w7a1oyMSZ011RTfuWXf4VJvcHGxUdG15YFUVZeK06qAprqmRIswXpCZbCzKVfPfIyXrv8ai/032dne5O69/QcdlhOPfjHFvOGe4JwKqS2dfkgBgoaOCkugtpatUzvUswlNs2SxmNMuG8RHupQ6VlUVR0dH2PkG9fYmB3fuEq7fxPsD9vb3eeGFl1g7d4rNs6cxs7oHYU6KNeaFlzVaOXbEQSBLQSrNXhjCJiUgtFgs+s+u/mYp4P25GOKSpXnqnFXrpVhT+Rwhglm27L9xC//WHcK1Xep500cGLBEOWpZyQLx+R0HEuoLK0tUWM60xzmK21pDNmQrvdEJ0WjEwRg35DKlqOXEiWQypTIrOdVYm+p73nmnfZ/P3gNEzrKeSiKwmRzYBfOyI0Q+7bWbaUIAjwmDmZnu4f119OfEGmyzyTqATYe/eHq5eR1JeW4HwIFF9g375RzCZUJ58xN7RMBFvDVjtFLa+eZad/Uf46le+xCd+5I/y2S99XYM+D6Aps9ksJL+3TLJOn1kulzz1+Ht4441XmR/dZsNc1o0iBPbvvgnAp37we7EStZ25AM4wmcyYbawBkbZr8K3HNwHvtdW6iLBYLmjblna+4PD2Pap6xhuvvcb+0YKXX/wmlzvP2myDajYlmJOry62a4SMAiITEpvqrvfUhkrD0hIAai08J4M1ySWTQuM45Rdx7k3MwO8WYwaqJ45SubKb2IRexkNhMWqdam/y66Fjs7nHv1Wt01+/imhR3jXl9mn5zYakMrcCSkHCGmHt/TCvMxpS5c6xtbuA21/DrU2R9iplNsZPUhcsK0ZqUDB/Bh96X9SEmSqTBRWh8S1sb/M4a4e532HxddebzJK4+Qsw80lQtrYzNKFqT/NCcVpXOXcQgDILNi8VrMHzetEQik9lOn7KiLQnS9ZEWiF5Ylj0g+cMp00CzoFUgOyuYYJC6YmvjIe4cvszR3i2qutLAdQa27oPCjgUyTXr+cBwCKW3bsbaxDcDR/NagARAODq4B8MRjV9hY18Vr83gnylaMStuSymEMmJiqkhthJlsQoTmasz7b1Ca5Vc29m7cxxuHnDcuDObOz2yOEMM8f3D+jAxKJnsLHTMhbBi4ykhlC6MnhJU9YK7ylfijG9O3Z9ZwDR1mMcnu1cPKwvka+eu8Wi5rx+3O6e0c0i5a9azdpb+9jlh2JB5qmQ1KH66ylDSFVjncRrA+ELllx3sP8EB8jc3MPKkesHe3UMt3eYLq+hnMVUjv81EHtmEyndNYowcVp2mC1NtH78RFjLd3UsfnEQ7i3bt93nMvjd1k4a5jM0jzVcRteMylYXH63TKEpzxfRgL2kCZcAMUHlHs/vfP7L+M5z+vJ7EFcNaNrqhRZOZW/Wij5TonuKazpLCB0+ChbL+sYF5IbhG89/mTOXP8T13TvHzv3tAJ13ckRiQnf1fFXlmEwmxKDlDUPQVLEhvgtgFBW240wLI4aqrjl1+jSVq5hMplyvJoTFgrZpWC4Wan5SVnWLPQC0ynnt56QwIVdBnvy+lkYZN2MtfcwS7IFx2ZBVVLMXyuJYzTYZBjDim5b9azc5fOsW1bylbj0hMgTpJSvIYc56xFdMtgHGSG4A4yPed5gOpAnUC0EOOlp2aZMr1BqQ2tHOZoSpg2nNdG2GqRxma4bUjlA5qlnFkkB14RQbm2sPtDZ+1zV6MiJX3qyOr/ptIQRlVYzkLyOG9/mNEPF4ICW5Bk8XAi0hs/p6LTiccTgEhmp22eYvzJgc6kA0cdZYqxMYGbK4gSFZakAtT/QL/yOOzLTJ4+FjYLlcqgme4H9IvSiTVjTGUYbfenBGYl9J7dRkglhD2zVce+U1Do+OWC6XWh2uBUn8Uilq+ogdOh2X5y6FZtX3U07qOM6Zfc6sIUuAr0RK8/lCGCqd69wo0JP/zp85yQ9uYmCytc7W2dMsb9/D7M4REVokuSvpRpKbIMFoXmO+lgQOjsCbmMNsBlc7urSYxIOErgfMiBHnA9AirlHOsYG9GGlih12fYNenbJ0/zcZjDyHrFW6tJswmD7Q23pFQDv5Gvt+clJwlRoP2+MzyefvITIaOewFI9ngUbVsXJNKZiFQ1v/Vbv4Oxju1Lj/SYLNAjbPkwaGbJQItL2qgPt9B/T9LL0aiA9IcdeKMhxBTnOh6reieHrIyEyPCbIpIqcac7ydUPRJJ5LuAh+CL9CsH1l6wYq09rcWNnm4tXrnD75m3md+5xeHBIM1+wtlb3925idg2ldztOOkpiQAihJ6jre2PtWaa2DRkdYSCbi/Q+5mqFgK7rEqafU9SOVyIv45qByFIgbE2JF7cJXcC0HjlcYL3pi5+pO6ycWpFB8/ZlY2SYmxA1ixcjGtct5ixXpMgZJyGNdW5D74IykupoiPsdHBwQ73V0UjH9wMNY65hV32GgZ8xoGIMgOak4XT4i0HXZ1xhTmcpDgYEunX8QGmMSTE0OHzi+9vzXEBGmG9tJF+f3Y+9L5l8wvaBmgIAkgbH4pr6df8NOZ2xvXGXv6DWuXj3Pm7fvjHyb/l5H9/Hggnlvv2E2W2Pv4A1Cu6Ry67TzQ/YObvDY44+xuTEhhqUKv9pUg3lJHHznYmcfxYEzITyBMtPNDTZP7TDf3WN/b4/Du/dY31pP/NPsAxclQUSJ26vpa3kRl+Uphw2aXiuWsclVq6JEaUtTtMzR7bsnRzt6D+iJ7PlaKuswISKdWmOnzp+DnVOwbImHS+LBgnA4p122Wix70ejvG0PnvdJBUWHMyGl/b6B5kjLexDNkEEevFSSLkvCehN8gzO/tsxmEJkaov8NJziVIMJTQyGaN7+ukllB1DJEo45Sa8ih31pi2texfZp9QEFwq/Qj0DIxcOTwPVC9qSTr7MZWCiHAfCzQC0Rqsm+niS81U34kufHt/M7K3f4h1juXyqAc2ou9ouzlr62ta92f16/3YjP271d+RpPJFlEECagaePnuG/bduslzMuXfrDqfPnGJibZ+Eq1KVzcLBPB3HlEW5p2L6fU37WOaGwMOGncsxllknpfmbtWS+l1JjjlLO4iCI5Weyv7qMy1TVD3DQrTn8dg0xsoZlGgzOR5bzJbQd5s4B3dECv2xo9o4Ii6W2xPOh9ylLS/DbzXM57uV3FHzTcTLW4qqKRdPhFw1xMqN9MEX5zjWl/jhkNSNF5+GcYZEfQhy6HvWTVN5c6WMWQFKIYBXy1moxqcxfNSNmn2j8Uz3aloXVEPGDnY0ye04GhpSEHtncvMyt3a+yt3uDqq7omiGZ9qSA9uqx+pniHUqShBgtNNaPJ6Bsj1RnKA+vSO8ASAIY+l08hSj6bBiJ/b0jkWAiG9ubTDfXOTjc42Bvn8XBHDudUtVVQiRJSKrOU9s26R5SonDQkQwp9qbV4QEMzVLjmcZqhT5SEWxnKwRT0OLSoJsU0sCQY9pdp8kLIdXPTXkExUY97lGatXXbtH19W2MtOA1RiBG8cRzFSGUdcbPWquTnNjFtR2xathYec7CgWzTM9/YJu0cs5nO6toUQsRFMiFRilAGGlmwxCJJ6x4g1dEUJVelRZR07MQry+xghRNr5grg1ZeHHRafvd7yjkEi/xGKkLAClQhL7jle+80r89aGvaZO+eWzBlmt7BCoEHRwR4VuvXePe3XtcfvSj2Nl60qCxD6P0GrM3RyWv76R59RqzFum1oAzPo0TqtS0Arr/5Gq46S9eMx6AUSF28+e6PA2GrRxxxAk1f0iN/P4QOxI+LUcWYgClJ5TqHUFD+zXL8vKgZGkIAC/VazalzO9y7extnLHhdJNkqCSGo2RsiXdDiy8BI28VQ5JaGqv+tXKg5NhHfDeitXq5mRgyxzojNTVgLl8CHwSRNVJFEqBiAoBJg6hlFaPZIiJEqWQmVcxhTJEHn+TVC5wDn6FxENiaY0zMmrqKet8jekuXBEUeHh7SLJf5gTjhY4H3ALn1PaQxpL+yIODNkw6hVKIMLlzaLIJDJDqS2EMv7kORXj99l24Ky6Q49hF8y/stwSfHNE893XOBVc4WoEEbDcB4B7UaFxp/GQW76inWjycm2cP/KWGsmFy6hoWp2V1XFghWpLK6x9z/i4GWUZtDKN1IxJaWY5fbwpaZEFIYXYynrlOZ/V8eo9N3KGDHJNxcj1JOas+fO0i6WmnSbQgEhKCkjAr7zdDH2+ZMwLpYcwuDvZeFc7aJVIq7ZdSm5qRnVLaulr95PP6ZhKMnRp0KtJEf3oZsCKMpjlNHR0ZH8c+ssTYwsaakry3RtDbu9hgk7zDqPnS/wiyWy6AgHc+RwCfNG0+QWDV3TErxFXE0NVMZhjOaeDqsz2ToyzE3wnqZtWIbvsKYsB1ARtXbwH+PgH64Gok8258bvl//mxaVxS4hi6Iqas9kHyFkjuisJOWMzgzeja2ZlnsrnIn1b7nq6yfrsPDevvcnHf+S7+fyXvn7fMRj7wiebs+Vx6fwOz33ukNObT1JNZxqGyEVLE8gCPpnj48TcjDiKpOTj0iWQlc7JXuOfRjSYvX5qm8vG0CyX1GtreIHotYqEGDVNS41VnqvUUCLS81en0+nofktObJk9UfKgV0MaZRuAMYg0oLb5908CmXKNoX4aob/vXCM2ptdiJIU6LGvOMQ01wWTqnmrsaAWqGUd02NqwdnqDSgzWRzbnLXbR4Y8WzA+PoOkId48wIV2n71KIcOBrk0IrAWEZIl0TeoDp2x0PniVSpODEOC7FWKb35KMMOg/CmmOZjN4rj5icxEjiva6IWL8XicEkDSnkZGsoVeBg5rIiRLFv+y55V4vq600nWxwcXaPKJUryeYoLPwkQ+LYgQbpX5QwbxBqCHSbQWUcINpXD9BgxOOs0bJJ8UERSwWmhS8JpjdEc0DC4ClE0BosxGsxem+CcMpgkdCxTXZq+ip0OxKgPS8z+YAF3lRqu5MGWc7wqrPk3Ss1ujKFp1Arp8zZXNH8plPk8eYz7YlXFBtC1LaSwUFmxTo9USDoqoIdJRHsftN1h8naMCJNJrWvVVRjRsh6yNtW1UVXYpqFbttT3GhYHCxbzORMfafYOae8eKHgUNSuJIITTmzQ7M42/hrffuPPxjoRyFazptWIhNyXsvfq8Nx3vJ4wrR/9KqTUSOpcBpmFZM+TQFV8u/RqJKxfbbxIaaxIjnNp+nFu73+DGay8lqlTozZ/+GnqaHP17J8Uu829ba1guNHVrMtlWKN5ZTFlLtzyvodAEMjpX1mb50SYSuE2vkyqLdyEilSgJqHaISbVkFkvapu03Gmst1aTua8aWm20e+hJljDGyXGrFmYyklh22VpOCS42Zxyf37ciUvLImUNb8wEhrl0SD0jTu56MD37aINZi67sGXruv6uquSSqfERKsjbep5Ll3iVIcQqF2VNjkdB28gWojTimo6wU8j7lxk2nRUxlDPlxze2lWUt0klKYmsXTyL1BMQqF29usRPPH7XjJ7hjQI4uc/nhgnJRZjfHhSBbG7ExD9dmYB43G0YXRCqIQegJ28C5e4xfirGjPp0AFS5Urcv/ZZ0btHAvhGlueV+H+NL0QU2m9W8+HVtm76xdgFJu/lgfqk/2d9jIQC6MMfjOLTgK4LhVXVsI8q+XOnr62tqaYz6dhSfG4cHjm80pY9ZbkZd1/X3lM3TVZ8vnyN/P3+nf3/FIikFMB+rFdZFZCiOZXI/yJwvOrgItr/W4jcYVsVow7VGcY2ER/gevFG3vXURsY7Gqla0kymmPoVpOqWJxhSvt4KfL7AnVNK73/EOavSM7M5EGk/dh99Gxu4npG/7WtJomtIo2DgIpbNK9B38xEHYerQrDqZrynPu+zDqiVCh6hfBENaZrG9R2Rk3r73Bk49/mG+9+gbeaJqVIL3gSirGowKUS20Og55/30jEEbWfClptwEoi3JvBRC7HsAwFaB/I8cJc5Y92XaeFkdP7JqUYhSLo3gWfFtig9XIpEZ98oVJL9liAgElmtiUlsUvy9xFC1IcIiXhu+lvpgrbxyz1cMnEB1LLIXaxGpqveADkuaqxVEz5CjB6XqIkiyaq3uQxJrfOTtWJaBCKSzPukKWNKO9SbTPWIUhOq5AcaIxBNX28puwQhhX2UySREH5LCSLWEgFA7chjJCJok3npiMxR3+3bH765GTxx4k8ShyNJJx3H0dfi7XGgjkxA0uyRpSZs2RS1+m0jlMWISVzsgmBjxfvA5R9edNUjxu30162TGgGplN53ibM3tWzd5+kMzrlmhIdL6CMHrOYKk3vYpfBFFG4WGwRSSSF9szIQhqaxZ3uXozlvEMAc3XG2ufJbHrOu0u1fbdljrenN2VeOMSiRm4M1ErAyt9UIICoSJxvOyX1rsSb2Zms87mMq+D/RDypm0gu8iXQI6kBwfHdraxuTnRmPIObZZm5XzX7ZTyINXVXVvEYw2oy5gnUWTj03fqi4LtWrulLuZ15dA6OclE/ELc9wMpnfOndQxgxgloeFpnBJPWq9X76t3ymKEyqpzGjSmmTtxCwZPpHs77VUcv6uQSB7QMkn17T73dtqy/DebUVK8DsKFc6eYrs1Y7N2i7jpiVRMjSSgjvuvwMWoh3ODhGEi04r+OfqMU40hol/jQcv7cBZaLBROb4mfeD0nJ6IT1was8weX5I+j2HFguAo8+8hhvvPE6L7z5H+BNsLZitrYDwGwyoW1afNDYn6QwRNd1+KA5itZYYh1x1RCLC4WpSX8nSVijJ/qhhUQ0Q8ggxN6U6MdolZubj9VMj960RYWkR4VXmgeVm0eZlGxzkL04VxbWci1lge3XSIxEqfrNKfuY+fpWi1CXpqihUA6r+IcZ6tuWvnFSs4mho6jwSR29BsxCT22dw4RkfYmGeIwxdIslzXxx4hivHu+YPHA/AXs7X3IAe1ZGpTjf8Zhbeh+YThwPXX2IV156hXb/Hu7sOSXIpAwKsLgIsfMYEby2Mi5+q0h+luJfVff6JP3g0f4tmu6Idz313Rzs7rI2cbguIj7SeM3pJGZLpN8n6al8/Y2BUtgCXRuZ3634sR/6FK++8QamqmhD4IWvfZ3LVx/iv/jP/yy7d+5BSnuzgaGCXEJBo4t0TUf0RToVQ9DeiMGHLvn4adHnIlHJL5WywU2hDUu0s1zUJdpZgkAZmRXofbf8KOvZlOfImq+NEWs04D4WgkEQs4DHOK6KbmVoPFSul4E/PfbZsmCaGPtSKDGj1kXToFLB5GsHZfSQuoOPQacInNwcSdFsVRCC8jUkRszuIeGNm8dk5KTjd6Upy0Ep0dVvrxGH98uFkI9RLh9JEUUIzRF/+a/8ef73/+X/ic//2j/kY3/gP2GysZ38AjUP8nd8gK7tdeEqTpGcESH6RFtLmi4aIERu3dLiXA9fucrLu1/DmYh1ArXDhq4HStRczJtJ7P3CYVyUzmAAkcDB7i12JsJ7L55h49QW2xcu8mf+5B9jOrG8+a0X2ZpVrM2mOLE03lNZS1XXKZaZiAE+gA2Ic72fqVpZw0ImmFHgX0EjBxLw+AElJvvY2hDJd13hH6vADADOoO3K+RKjAFjuoB3juKpb/k4uNwlDWK00w1fLxkwmk2RKDq3mNJQkVM5QAkvl9ZRhl7H1IJDCRaYQorzOtFDygJ73prCPvX8c+m0ulZM5wQzN1yySEwq0m3Mg6ua8bHB3Do5976TjP8p8zf+eZIqu+ifDYxC8sjbo6hGSq6ckggjtnP/mv/8/85f+q7/Er/+z/zcf/uhP8NB7n1YOaAw90SBEofORLpdoKI6M5PYAT9be+bqN4czZJ7m79ypvXXsDGzuiBCY2YCYGGw3LrDH8wIrJQplwXoha29tKIIduqhgwviO2LeFwztGbb3Lt9i3qumIyqfDTmvl0ytpsRlU54mRCaNHKa0bPn00s74L6U06Le2XkNo9pGWy3uVizpMXZeZ2DMMQ22+USRHDWUte1xgETa6ojJNN6qM1T5k3mxZiLI69uzuVzY3K50dWsI0YpXSdVYzfWouDfuDHPKimhfD/XG+o6zVWdTqdYa/suWtZaTMFS6uPuxihVlFxJY2yuloqolIf+ddI6jwFnBCqHXZvRyuqKPPl4xzV6smBl4VolCZQTUULfOomJcL0y4KssEm0xZnqgRzNDLC4E/upf++/4P/zMX+S3fv3n+QRw9X1P442hMoIYtWmbzqdAbaGdJWkUSYNpEoKK1u7Jn64nG4gYbt2+zal6xnJ+RMBjCEwri4k1vusINoMoAwsnJHAKNFHaWZt2zogzYCViCbjgmSw7JsFglp7ucM6BFZq6YjGbUs9qJmtruogmjpitMhlKMmqrc834UPJ4Alyi+r+I8kGpKhCDjYGuaVgul+qLhry5+CE+6Bx26nHTKRhPEE3e7VIXqTSpiJihUzGJNVNo1dK3LM06XbiaLJDXRdZMZe/I1fKXGVhkRejy+ikZQydVtSjPW36mTvHMVStgcKHCsO0WtNJV5bNaaLkUVmctRgyT9XWOfi/6U+aL9r4rzJbxjZy0S5Y3rQoqC6RNi3qliWj2qdIk24RyVhKJtPz3/4+/yj//57/IL/ydn+cTBK6+78MaazAGcTCpKpoQ6EKbgumpG3AI9Dh3alGAL6lRUJ86x9b6JZ5//jn+6E/9NC889zVtxxcFEy2VRLQoWSBIwNsimM+A7FmjrdGt1TDOdFLhrKFGcCEg0qnbKxbjgaDtt7vlnMWhoZpUTKYz6tkEUztsZrFELSLWWi2RaYrN0iRztjfpqorAPN27ZzFf0DRLzXTIlSPiEJM0kwkBrUQfnSUYo9kXlZbm1LmJIAEDOMmEBb1zY8ac2CwsucCzXufQ9DULWCksefNfbRSr5rVJaP/xqu2lcsgCquvNYiuDWIdJmriqJ5pa5RytD4QoPak+HyEJZUxKJKOu+bx5M1k12XPhNxNygS/d3GLtwD1Y7tY7Ml9XkadS2EqWyepxP15sCEP7tZiAk15g83+SY1YK9UcTCGHOH/7pH8NY4R/8rX/A98fIQx94GoxVInZV4XzAdD7lsuhmkH0w9dPSbi89LKLC6hyPPPmDPPfsP+K3PvubPP74e7hx/U0MHpsg8SiSyodoDNWYMCCcZDPTYIg4Z5lMKtYmFXXlqK3RQQ+pIh1aerCf1k79vGY5x8+PmB9UUBmsq6isxYrptUZVOSqXFnz2jwcMFueqgQoXAvP5kYIiPugj6rVOJlqX1PpIFEtnWrwIwRioK2RtAqnXJJAq6Zl+jmIIiT+qv5wXaRa6EqzRNTDUiF0Vxhy7LM3TnoonRtdJjGpJFeuy/Hy5MQhCFIOGUA3R+56yqEW/dO15v0IRTGuy/P0sjPne7of4GorYq0+c19phZt9hRk8OZqdhOCaEpbO+qi0H1GpsIuQbKY/VneckM1yI0LX84T/6ozgx/N2f/ft8gsjV93wQ66YEa5m4ijYtLq1OnUxhgdCTH1Gzr78rJUWYjU0evvp9vPrab7C+tcXD73kXb776Kkd3DxJYq7EyEyIugomZaWRQy9vgrMUaoaosk7qiqnIbB13URqI2F40RbLnjBsCDqBkqTduHM1oRbC5kIfTxyzxGpVCKDGMbIylToYUQyCnqBsFOJhr/q2rt8GUaLWDctnQEZDql9uvainA6UeAjBowZhCEUc2pTGCML2kkmKiFiirZ8oMJYktTz+UYmbIj9eYwxvem9umbyWBhjaL3XgmHFWsv0vhijziXH292pSTom0q+u0VUusLW2b6CbD2OEtg34uiJuf4cLZy2Xy2LHyL7UWMDKi76fOXuS31k67hlFI+NeamPSLzYEhyZA0wR+6id/CCHyt//m3+Pqt57l+37/n6KerjOtLI2zLNs0oUWIRdJ5MNpIyIsG7gWtZYoxbF56gitd4KWv/QZvvvYal69c4V3ve3e6P8O1Gze4e/MW+IhDNQcIUTRgrnSvqOarqEYNrbagE2PAQUUGqZSALknTIh6RAGIwUbAhWw1goif7yYFuSOTm+Aa3+loWWScWKyqYdQDnhcqAaTwxLAkhsFwsWLQNrE2Zdh0T75ltga20J6YPPpnfukk6q2UkJ1WVNoTEKuo1kk8uCXpfZhwuWQ1LlH6itVaBFxnWQYga7M+ATAaZ9F/T0zE7Bu5yadpmJWPdpNewpZJR8zpzbYcc13K9ltq+B4Dy2i7nwhi8ATZnx+bnpOMdEdIHrVjGAO8fayyF8KT8v9UbHO14fTQj9zI0SZMpyGSiSUz/jp/6w58kEPk7f/PnOPoX9/jw9/wkO488xbKuOGoS4yNT1pCB7ZRDGHF8H0GEaAzr5x7hiWqDN9/6LC9+/eu88LWv6aA5x7mLF/ngRz6Cny/xzZI3XnsN8R1VNFij/UJCDMQuIilxtw2RRYx4BeToqpQJIgGEVLAYjIkYm9LTOl35Nsdki0oPrGyG/d/xOG1CwyNpwQpJU5KyGbQVQrcUJKgALRcLDhZzfLtg4RvWY4fEiK1rve7pJJ+496Fj2tbUpFWwKWbrKYFR2opcN/fZbDYqvpzJACUQ2FtYxFRZQRsZ1VKl+8m1B9XfNAKuTm3fHSCWZduN1nC51sbZT6spbG1at1opPX+uFMZSU5duXO9EGEPw0MVIvbnJgxwSV9XcfY5f+Vc/P0yuyRQtvZCyZEN55IvM2m/VGb/vRQn0wf/CNDtGTk7oaRSDrytu7y358//bv8jh3pxP/f4/x+ShR7hxcEDnvcL6rQbXNRdT42yxa9VMDHFY1KLV5eJ8CU0H3YJuecj+/hsQ4WB+nflyFx+U8L2xucnDjz7K1asPsz6Z4ozh9s0bLPf3qaOWI+y6JZhAFSIV4IxgnUkk6cTzNEpst06oaouzTn1WlAnjjGCNkqzLjmDleEMSxBgLRlPy0Y2CJZWxuNS8qKpcTz7Qbs8Vvus4PDrkYD6nsRE7qZnNZqytrVNPp5itNWZbmxhnqaYTnZfURLXM+OhbIIhBErCiyLEu8Mlk0n82C0xJDjhJAPLrzmhJzZNYROX327alDUOoqOu6vkCYIqzjQl9ZyHJXsOwTZwoeMGIg5c+Xwp3XPAk1XrQNLgqTJvDj/9n/+r7rPh/vOE453Pjx1+Hk+FOpLcvd5f6COYQxyt/sydL9xwTdnyN1F7lQV/y//p//A3/n7/0Cv/yvf5aP/+CfJZw+q26bNRAMoVNzkcDJG0l5fhTqFzfBuZpTazsQIzvhKUK75O7uS+wfXqNddDz/7LM8/+yz/fVeuHixp4k9cvVhHrv6Hu7ceIvd11/HeXDWYL2oliTD+RFrwDmYdFBXBisRCR5jtKSks0LlLK5yg2BKBjQS+yeX0+/vIhECBHLfzmCULN6FDonqD7kouOhpfMth13LUNjRtwHpP13nmiyXiHNVijS3fMV2bsVk56lQcO3M987iW8VIN4TiqyiUkf9isSz8xg30Z3c9V1DWk4QYFAEl7lessKwpGDy0qZnDW9H+DnMQB6Df/4+loRZkWBsuvtPaGtZRCbSlBwtmK6D3ivsMhkWpSp5uMlK3MYaBUlZ2gyps8hoiVNvgJirpXWKTwBYUpHJXonfHZZH8pTB48UxP4L/6zP40V4d/84s/x1Hf9MdzFh3SwIWUtpHL8uTboYCun68koa0JqQ/JxRe86GoOpak7PnuZ0eBqCp13usVjc4eDwGlEiN69fV9ob8Pprr/GbIly+coXv+cj38OpXX4J2gfH0nY4RkjaE2nc0zQJrG6YTR5UEqjNCFYUuRqyPOJeBpRwuGANuPRAhOSYrEIVgUrWBtHgE8F6J2zEa2i7StIG2i3giMXiCb2DZ0kSPnR/hfWRja4v1eo16uqEhKO/7zUDEYJySEUQMiBLIq8Td1d/SjIu8gVvr6HyiwiFYaxTVDTEVozZEVCsbY+gS6waSqwDEmEuK6JxFbLomg1hB+s3YaoYTQ+w6s5Iyeh58l+KUgVzCTGOmQ5y+qpy+Y7SMjHadjtpbpct+tKZ5tSftAiccD566NeIp6kOSABmGUhAlopaPUnOWqOv9gCJgtMvmdKE0+vTFn6UIZQiaOkQkti1/7j/9aT796d/km8/9W57Y+ZPYyUyzyEXoJBnHxc+OfLDhf/p/EXIxZ/17eF0MiHNMpxdYO3OZM+5DRGsJ7QJSFkF3eI/dWy/x1hvf4J+98U/4w3/wp/nql59HCCn1SE9qDNQCaybS0rE+mzCZreOspnoZk8xeq1cWYyCQEEjNlSEUvFExJgl6znTImkzzA/UGTa9JTNdR+0DntTpBRlWDVyFuJXDUNoTDQ0KItMuW09unUipdxMfQd4uujOBcpS3nrCNGCjMwx6v1PvR5rqLnCVlzOzVP29DSdQFrBVCBlMQqSvskXaIahkC6H92Eolgimj7UF/SSjIvkQdD7z9c1hOFSmp016jPHLJTD+jBmKGzmU8xTw1aWIG06t/6UZ0wyuN/xjgjpg2CNgR7NrwsjU/Wk41iuXnGcBBYN/0rf/kDlUIrBA53YHLdKvlSY8zN/4Wf4Cz/zF3jr2d/gyoc+CeIG4APVUiaYVGkuFkI6tgTK17IGTbddjAHKqbUWqRxuuqXgTYTpxg5bZ67C14Trt55j0bUcet1ENK1L0mcNnaSQhe84e+E8F688rMBPArkMPglgRKKH6GnbhsV8kUw+XZid9/i2QcRQO9cjrnqhhXkbhxq+1qVOy76jTZnzw/zkwmgdnQ/cu3eP5XLJhQsX2Nrewq5NsdYlE1mY1HVvkqq5OqwB51xPHsgbfA8EpoWv1pf62KpRFfDLvNzSBcrxwryXZhMWUBS8MDNHIZbClcpHGebI/iRprUgsUOJy6hN4lt0kK5pTuRp5OAkdP+n4j25bkN7toeDS+S0pTychrvcjpI/PnU3LXI1H/aLRIdms1onTHNTAY49e4of+0E/ya//qF1nfuMipq+/ui2wBqagzqZuvZHFOd0S29nrLtdfyx0DP2Aebc1nWmL4TouZ9dss5R/PbbJ86zWGAuRiqUdYDqfBToBX1e9dOrXP2oXPpvgMmhkIgI8SO6BXAWiwWNMuWLmh1geVyydH8iGbZ0DUdtROcFFRJXf29KxAA41sdkxh6HzGzqtJwIEG1R+w8+3t73Lp1i53Tp9lanynwQhxyPzO7xVoE6bM5yg2+FBBJnw1xTC6o6xrvQ6q4oNeSq+973yW+bFWELnImx+payrWF8jrTc4N2RlsN0ThXJQsxxVoD/bpOec5JIC0+xJRArbVvAbwdymoGjbk90PHAQjmfz3tCLwy8RWCAvXvzdiyg5d992CEcr1KWnysAMNQYHZe0DOTYWC6wnCLDBK+iq+aJ0PkF09kOH/2+T/KF3/xlDnbf5NwjT+M2Tw07XUwE4mRGSbZNrdGWZzGTi0fimo6c5Z42qhBTWzUVnCgQfaA5mvPKi7+CqRve9z0/yOe//DVc1O9WIS1ao4LhBWRSs75xmoeffJizl89gyJnyIMl3khgxvmN5uE+zXDLd3OTw6AiAZrlksVxSLWYcHR2xmC/pukgTYh8GGcH2MWXFq0rCoOlVVpz6aHnko2pxZ21f57RbNsm0VoTVmMTgSZtNVdd9Qa4S6MtrJ1dWAFLr+cBkUqPmfFkhL2h7wghdF8jUTGXgpWJkYnuQqOv8qLdlBn00hKI+ph49sRgw6X1tpiSEBCZatC7tYOkZkwuC6YaTm6OpwZQ0efL0RFKFvbeJOJTHO2qvXsLU2Q84KfaYLzzXiDkZzBm/VoZNShNCB5mCa5u+n9skr5wvG9aaUtkiHbx8I/DhT3yKz//6L3Pn9te5+ugPsn7hMW2pl3zjPGsJF1HfxxgMQhuWxKCAQMFL1jEg2wkCwUOrzr5BtUo3P+T1V34dN2t4z9Of4Iufew5jVN+1ScPaFAqwxtBJZLq+xdUrpzl7+QKz7U2c0arjZRq1xIj1HbPZlC5VNt9KpReaZcPR0RF7+/tUB/vUBwvaecPiaEmzVO5r8L7faCKenM1iiakBmTZo9V0a93SfViS1kRPEVb156pxDJjX05uqwDsSIZtUU66OqqlEeZNaWdVWndnZjplhZO6h8b5iLAfldpXWWZupqdCBXNzjpkRvzVlU1As6yppQ0FjHm6gp6LWU1iPz7ZUjw2x3vICQSCcEnG1vJz12n5RCjH+8AGQ4vJ6G8uDwR5fNyMFYHlxH6GpIpMP7NXohJG35CDdemU/b3DnlBZnz8D/wxvvnsZ/nmS7/E7I3TXH7yU7i1bYxzJFhAr6ccRGvpRHfJkAgIQ8euweQV7xnidIpEh8WcN9/6bexkyXs/9Am++IXncUbrxKRNNG02el5vDKYSzl24wKOPX2V9awtb1whOhTIGYtcls0k0y306oa6rBHSptmralrX5nLWtDQ72Nzm4d8Dh3iFVfcT88Ij50SG0KXwStGmq+nXJbJOkAcQgJvSNg0KMSaub/rmtKmxVUVU1pppo89REr+vxABFCGAoqW+vIYQkjuYV5Tk+zWtFALAkgJxASYTy5GSH3PjX92gBlZYUAvksF2tCvqA/akVukG+MwOVsotXMfwjSD1ZY3nHHVBcMQHskaOCN/w9ovN4TVtf/tjncglIY2HCDeY8Vpd6QQoAuj+NQqVSpfaPm8jHWO/QvoQZZksurNDSbvYK+OhT332BBSGlNURsZsWiEe9m4f8Olbtzl79mGe/t7H+eoXPsvLz/1TJpNt1jcfwroJm2cexc42sH0g3PYTG/J5844//DoZJPLdgsX8Fk1zj6a5x+H8Bpvbmzz1we/ld77wFWwBEISYGiCFiEggWksMkQ5YW5tx9txpqloXSqIuEaPHx1YBByMEIxr7yhufFRUKUzFxgplW1Gsz3HSCm06o1qfYgwpzWNG1Wmyra1pkqa3RlUuqpUecrWjRdoQ+sXUQzTyppzPqqqaaTtk5c47p2gZVPSPkzTWR/TVLQoXdmqQ9RRBTpYbaVTJd85pRKCvjE5l8kFsZaCt2RTsjghjtfB1DpOvUyklTlFBW01emUNTWARbrkg+IUPUmrm4WuqFqsyVJ1KcoOWHcYE1NjFlItcqFkDdZbeXoU1lSlYe0PvL5HuB4YKFcxI6qmxNaR+WEiROtG2NSqzbJsabjhOIydlbuHFm4SlT3uICOKXsyEogs5PrZzDQixuTHBGWPiEFCwAXhxus3uPmm8MEP/yDN7mu88co3uX1Tg/433/o8GxuXOHPhQ3D6Eq6q04JP2qxrtUJcuyD4JTEG9vZf0aJZBI4WNwhRYXpXVZw6e5qrTz7NZ37ny0P81oCE1XBQ0ijW4rvItetv4cOjODtFG/+oz6mWQqKvYfAYsrOpwI0ndnnhG9xkgptMwBrWtjY4PDxiur/G0ZE2tFkuG9pFA0uvJfm7DhMDlVXTdbFYaPgo8+atZba5wZnTZ9jc3mG2scmFSxdZ3z5FNZ3SxlRYLPnlGkvUNvUaFom9sOja0JijgnOq2owk5Dhpm5IaZ3MmpmileEkAHaJmaL/WYtElO/ViIYFI9CZsMkVB5y+tVRVKeqEcEtm1rpKRCh8Uie1dqfQIcUgRlLQh5feLRf1tjwcWym/tdrxne8okWoLVXSbXWREG9n6ZTApjQGfV5ywXZgkAlNozH/1n9Y/ep83vac7dYIImLw/nlK7WJRaIOuWB555/iZ3tDR790PdzZmuCGHj5+We4deM633r537J5/RKnT7+Lze3LGO9pdt9gMd9l7/ANGn9ECOM+I2IMp8+e5bEn34ubzGjawLdeeYPf+dwzqJmTgC9jsIaVzWmgd2ENt2/f5q23rnHx4oYmMdP1HZhLJslqMnFv0qf3cx7jbG0NYwz1ZMJkOunboS+XS9pFS1x4fCGUzghd23J4eMiibfoSkVVdc/bMGc6eO0c9W8fMpqydOYXdmNHF0HNaSz5rnteyz0hg8CGzhswhNXxg2TTHaGwlSpvHK4dGSh9y1Q3q52fltf659P8rxjKbmxobPhbKiD0EkcqdDD1CQogFwPS7Ox5YKL+5u8VTW8JssmRhQ0pDyghZ6IUyD1BZrj4/VhdRSY3K3xviV4WfWApv//z4NeZ+mFl7msQiMb1pqyZpSOGP23sH3Lq7BzEgJrKxsc4HvveHObz9Ji9+9SvsH7yBs0q87vyy/52Llx5iY3MLV1XsnL2SENrIiy+9xue+9HIqoU/Kxle/RyH6FMeN2seirBNLtiaMYX9vwQvfeIVHH73I1uYMO62UKRJLxHTcJkDHMJtwYbSI8/OqqtjZ2enHu21b2kVLO2/pWm2wGppG9VEIrG1v0iRieQY8tre32dnZoZ6t0QJiU3uEHCRHyQYxXY+1TmvmStIsouZeDu7ruOSyG5FFu9BEZOf6NLAyDJc1YTYRM4ZArxmlr0CXr7t3dkrcgbRBo2wjhblcQksDIuDc4CbFCCGohjXiCDJU0Ri4y5J8cf28MUrPG4gK32Gf8vWXXuJbV3+AGdfVXwsBcowtEX5zkaQ8gXkxrLLyy12y1JKrmrNcUAPQs+p7js/V49CoZTObzcgAgQ6eQt0hdgnCFhBL9B379w74rc89y3Q646M/8AdhuceLX30WEeHJpz7GbGOLvYMFb755nRdf2yVEoX3hVjIdU+ZFzJPdX4ZOf4kUo7mSzo7vUaLmDLZLwyvfvMYbr99i492P6GZDBO8VmF9BF7PZlRd36cOXQXaRoTGOiDCZaPn9sBHo2o62aQhtgwRNxYoiLJslYi31RGuxbm5ssr6xTuUm6kOazAiSvhWiEaU45MLIuThV8F4BG5MRVMF3nhzSCCL4gI6rjxinWjVnggxJyZEuhZ+stdqnMoUo9D4LBprkyn/JH03zEXOejAjGinoFxmqsU4SIQ4wnxFzQOs2xVZM4mgQupdCRY6hdFFIjHyW+x6R4TtC49zkeWCj/zc/+FV787Q/z5//8f8nFWUeXFlmZzArDD5cl7PMiKYPHWbuuJqmWar801QbzNfcwPCnmM9AAo+giKBn99H2gGXFBIWLisIt184bPfFaF8dGr70Oi5/NfeWUkCOqxqjYMK0KYh16K5yUwRRLKLg6Z9sMhBC/cu3fEM888z9UrF6gri5FI8B0uCXCG8kdZOAXtOAtlLkRlre2LF+fX8+dM7ainUzV7fYcTQ51brafW69PZjBi15GNd1xjjaFvfF6KKRjB2tUzjMPdjMzOb31rwTE3Ewa3J38vrpTRbTzryOltNrC6Bx1V3IWtqTNX7piI2CbdLfmZLCKYHDtUNyWCW9Ci4IFSuYjqdslwu+14rqiU7nMvX9B0mpAO89PyX+Av/1c/w1//af8fGtMUjmFpRKedcv1BKUkB+5AEejiHsUAaVV4sQlQOZNWX/nBMyPWQQmg7BGZNaNh7PCBmuhMReGRcBizHyyqtvYOR4ZbyxwL2zo7z2tm37uJ6I0EY1fY2JvPrK63zrm6/ygQ+8G6FTs7IoKrWaLoQMVdlKrVgnytvqeGXTLs+RqypMrHBGF1m+UU/scx/zkVHxnMGvwfqh3EUGdrKLkh/eB9oU/1OBzOlX2e8cxilbXdknLRlfZSy7LLRVbuT5c6XlkL+jfw9rTzms9GVHJdqhwzRDgnUU6WmWw1wKrffQLHvAKR8iskIr/PbHg30qD/Sln2B395D/+r/9q1TO4KOm/sRQIGR2MCPypAx9McYB5KGcxTiWs5roWgrl8P0hy8D7oJB+iAkpTOyJ4LGxw8UOq0VARoN1kliV1wfKYgkxahNk0GyAhCCqz4IaRhLBRC0HadSMltzIJD2X5KspsyOHbTxd19CFji50tLGlCy1diOwfdnz9G6+yXGj2RRdaWt/12kvbtCcGk0b5AIOxDtJiqOuayWSiHaXSosstG8QI9bSinlQYq8TralJhJzVuWmNqRzXRIlM92kmOIfsUhgJXOzUXRdK4OC0BFC0RR+cF74XOQ9uRslA8GJcI4+rTdWEoV5kFrdys83A6Y7BihoT1ZCLq7yfzUjLyatTntU7T8Iwt/lVz1Fihqh3ilDCCsdoXNaDXJwYxFWIdUaKuedFYuI9aU3fZLjhcHCl5PvrU7j7iKou12mLPfKdDIgDx/O/DxsALL/4bvvbyDd5z+TwSOkJV981qcj3NrB3LoOnbJTaX/mXpWx7zGeOQYZCFMgtXjOSoIQASPVaESlDz7wERsVWN6gvTU8G6DBgM1zP6fvFvFv2+JKOkN4rnIcU5FQRJ4exW/aBXXrnGG29c58l3ndcGMsIoj1LHIZVRTCBHrhXTo50h+XHFpmasBtG1WnoqfOxSVYCYskhsYsYaQ5fAFxKIp/FDr/WDjKj/F0nlSUyiv2l4IaO9IpKSijP7JQXfEzod2qLzWGF29loujasR03fxHoCv4ZEHJyYAIiJEm1hJ1gyeT4ha0VD0GlAMTktror0/jBiC5Hq1Wt7ER48pADxjtD6uBGU8ZaDRB5/KjMqoKPW3O96RphQccuUPIXaDv/43/y6xEppuqYmyhVlQxpjyazCERwbhHBZ7qQWzObYa2xw+S3++1e/74Pss8xADzlnqukoL+XcDU8dBiOJANxtFS2PxuN8xcvTHH86IYr5vHzyd9zRNy82bt/n6179B5z3T6ZTJZEKdHlVdU1UVk8mE6XTav19VSqQus+JzIL4s1py/6yrHZDIZyPEjs3TcWr20ZjQVSz+fu0IPc6wWTNO22pEqPZDMG7V0fjCle2uqiFWrn2yHniFW/x6sqcL0ZGzh5GvNY1++llO/MhAV0/3lWY0UtWv776ZgW0aYg1pQne/oVj5bjlH++52ESN6RprQxMFm/BGc+wYvf+Dc888p1Hn1kk9p7XHUcXSpR1ZNMUdV4Y0HM791Pc6pmGgttPvQcuoMDYAxV7VhbF+yBmrP5HG83SP1v9h8pt+BBMzN6Nj5yDZzyGG8wChXl8pbJgFe/i6xFhbDseOmbb3D9xl0ef/wqtXNQEKPzArDWIglEycycEIZYZkCtCg2sm6LXh6GubD/+maNKjKr14vA7OqR6V865fBU9uUB7K6W8QrTubg5NZE1tc85rgJC6mMVkjoO6NJIqBHQ+t2+oCH5ICsiIqlrh2h07Z/mfPJdhtI5KLVzOyaqFNlp3xbpYjZ3qdQ/kd1dpOCcK9BTtGPt477c73pGmNBiCNZhH/ihmepW/8Tf+NlO3CXHcyDQvkoyKtW07QgnzjWbBWg0Alzt7fi8fIQxsj1WBzGbRcJ4WVy95zwcusb5p+l6GA+j0ALtX2jpl9NDwhckPuM8j9o9SeEvBHOemxtSyDjyitVet47W3bvDl575B40GSv1VqyNlsppquqjDOEo3Qdp6288wXjWbzi8G4CldNmM7WqNwEm4juNlU8l6iIdd8jpRie1TxDXZAae4tRMzc0cUBSWdmYKgPYVHfVoaU51c/rfCCSKgtgEOPSIz+3RFSQ899aB8j27wkmmZHDGhit1xOuOT8/SejKf0tcowTmyvVYgmm99jYpxILiBUj2OyPd27hvo+t+oE+lQ2/KEDYu4q78NK986xX+0T/9Fep6MhqY1Z1m9Qby4PRmZggjYSy166rghjDWkuPfGYcmQvR4v+TJJx/lypVLWHN8gk6+x5VBSr7LqtBlf/EkgSzPdzLqFscPGZ6rDtW80BAN83nHl7/8PLdu3aWqFEmtk+mawxxZUMv4cNd1zOdzFosFwSuCub6+znQ67T+XN6k81v3Ob0ozcVy0rATwfCpK1rUe7yO+U7MuAhjpQamAlmBRcCRiKwdGtB16ajUv1qQQU+KKWgVpApFEgyrSsxVkq4BJLDo2F/NbPvIY3e9YFb77WVK9m5R85Jwh04OcKW6aO83E4nsPevwuhFJr4ZiL30d96uP8/b///+XVN3eJMdI0S2LwiWgdhn4VhRAZY0YLIpu4J2nN+2lORVqPF34eLjQFtLFYY9laX+Ndjz/M+XM7zCYGZ7QYlST0M8ZMdJfiMTrhyivD5+4r3Dpg932/PHOuNk6P6mrAPIilixGPcP36LV584WXapmO2tq5JvUablIYu4NskHMkKyMLaWxkydLvqN60UkskNavW7mWRhEzquD3qtJnSpPIgPkeWy7X3DGHLbvcHcWwX38t9ZSEqhH9rN65EXe0wm96DpVOkaG3ASmYV+xPvv9e3W5XjobdX0zNeV/x6XUx27XXA8zdBae+z8/ewmlPskbOR+xzsSys7rRETFkqmf+LNEd5b/+r/5q4ChafaJfqnORdB6p1omIRBCh/ctXdcSgk/1Vhjd8Ek2fQkOBZ9SxWI49pne/E0BXh+E4A0mWOqw5PFLW3zs6Ud5/JEdttcttfHY0GJDg/HacyQGgWiQVFPWxDRAgqJ9UBikmnkgmBN35gzJ5h1TVaokpA9FBSUBDuIQcWCsFgc2E0KocLNNwmSNzjiapfCVL32d69du07VBGSjBIB1IGwmNp1k2NI3mVrpKF2Y2bZ1xEKBrOppGO0Sr1ZF6N6JZF4gGj0IEH4QhrAGdF5ZtpO2gC0bZN6QwiDFJQ6SUPcbhDGAU5shapswqKhftZDJJRbfyeDKsEdEeLZGIt8KyTnxrnSqtS+SGVvAWkpuha1Ji6Pk9WlQ8s3DU5YkpI0d90SHRwTktqGVtin/HTEdJTK4YKbs9iyQBllzOc5UocvLxjoCe0Gsm1Rx+dorq0h/i5it/m3/xy5/hRz/1HmJsESpy2EJE65Y0zUDgLv3KHog4wRw9Zr7m9+/jCyqKllFYxbdjBNvNmZmOx65u0rSnmDrD7p0Ddnd3OZwf0bQhASEy6Mk47L3ZXNKbEjQVKKG5chxJ7o+xIzkMCEW4JFdWBzAWqSdELN3hksrWTNYmzO+02Njy4guv8Ju/+RmM+W4uX7zEzNWIh+hjylSJhBSEn9Q1Uk/6UhneK5WuRLRLkrgKkaZBabv4hIoWpeX7+Y8RKxDF9ret16+4Q9d6JA4NerKpt8r+WhXIfE2lT7da17V/bgQvkc5CtOpd2lwFgLzBpxIyfYZNvtj8PG/qmWFmTrDAUizaFD4p9L5sXiv9IKT1GcLQ4j0TEt7OfC6Pd6Qp+6x+dHdtxRIf+hRu+yP8/N//BXYXU1qfry9l8adCR5PJZIRerYI49/Mhy9dX/dVVbRkL3zQkQkGXsuxjbJnUHY89cor3vfcy73riEk88fpWHLp3n1PYG00mtaTcxgy/DaOvg0g9yMlyLj9zP/7g/kkc68+CvpZqkxtCu13SVZdl1uMkak83TBLvGvaOO3/rtz/LZz/wON27cpGkaOu/p2o6YgLRcXzWTvpUJMzB/crysRBFX0+30Mfj8bdvSFWEun3z78h4hb7ZFbxHGvOfs95ZmbWnulSbtyeM1CNsw+HHQkHboUO2LcEvmxYKM1lhMgtNvDCuYRDb1RaRHrNVvNGmM6QX97U3TBzdd4Z2SB0QDq72WQKDaQK78UQ6f+0v8rb/5D/jz/5s/iw+CkQaMR2R6bHGu2uslBW81BHKMCZR+9qTJGv1GX8pCEscy4Ezk9PqMzWqTqanYmtWc2Zqwuzfnzt0ld/fnLOYL2nZJ1yX/KGVeUHBl+/Y4ZuDwltefJ+L+wqrXZQxELK6aaIu7piF2YN0EO410i4Z2HllbP8Vi0dHe63jtzWv89ueeYevUGWbfNWNzOiNE5fhOJw4ffTKRY18bJ4SBfwoDKnmSnxOCdnbuaXIMn8sab7VQcTlvMYbC/xvSmEoubkl9WxXI/Jk8Tr22zOYhWTtpETEdYiWJSMr+ySZkHn5rszmuNXcQMnEZQmr6FNLGgcZbbZHtQVTNmAuPGaOlO1ufoJyYi7plTTo8V1/7QQR3ON6ZUKYRKWGPGCGefhy7/V187rO/w/Xd/yXntj1RGoxdIL4idz3NxIKTfMdSm5wE/vQLf8ApRsLQa8vib93pE4cyCg6b0rkcVy+d4czWGvfuTbi7d8SF84bDRcfRfMHBwSFH8yVHR3OaZaMmMag5HAzLZcdyoZzVthub0+PN4n6CqeaihgwiFoOtK3zTEbvAqVDRzir2mz2WRw2TakK9vkk8OqJdnuKb37rNr/36bzCd1HzkQx/CWZOQy7SQUUTVMM5RLWOMJdK4ulgychtCQKzTsESxWebv5DHPpPQeSBItniyBnmRQJiOUgmqtHb1X/pvnves6MBGL9Myo4DuCbzFiCV6rLZCqVQjKd/YhWUyS11qXNnX5/7f3p8G2ZdldH/qbzVpr79Pc/mZlU43KUqEGMAY/GwHi0RhBgFHRBDZ22GEbN2E7/MHh9+G9F44XNg7z4dmAeQJbopHVUkIqySohGocNEkiFLaGOQiUkS6oGSVWprGwqM29z9t5rzeZ9GHPMNdc6++ZtslIuyTlvrHv22Wfv1c4xxxj/McZ/QPErjdFocapaESKuhM+0QkfI0CQ/1hfy62hK6VmpQCJnTBbQLjOTN68XoIeNx2tbYNRYUNRQVsNkTzHv/COEn/oJ/sdv/Gv8v/8f/5oAANNtLIHOzyVdmrS+1pxrsEcfziUtVOZ5u0rr98TfnF9ra+2cCyMCrvoCnYPN+YbzjefalTPuHCbuXhzYH3r2hxOmmJhCZBwDYVLzGcIEL774Cp/+1PPIHE+zg7gYb6wpU2Fjm0LCxMSw9Zi+Y3+YuLc/cH71Ku4wMl2M7HcT/ekA5yc4DozTxE//7McYBsezzz7Ne971LoKQ2cwLWLkXrRCoaaiaqPXn5f6WzKuc54ZINi/up+6rbfrauiKKlMqkXTbUiU3VznprBX3hO6qpW0iU9XytofQDzeQUSqmJgDgV9TQlK6kQi2WozYgNQbiErbBSGBNLHBQMAWuFyCzZov1thQOkxAttQV/8U10Qdf9lrubmOTzqeOxeIvPN0hicrBbx+pdin/1j/PgPf5B/9OO/jd/4m25gkyMTFits69Mc8xVbf0N/f5CZdVTjlpNrhbZqCqeFuCU53EDfOc79lv5sw/m1E8Zx5GJXAu6U3MykiwhMU+aZd1wjjHd5+eXPFivAVmtggRA99B4KQDOFkY4ThtNTRi64P+3p4ynD6ZawG9ntL0jbDd3JFhv3sD8QwwU/87Of5Id++Ed55pln2Q5dPUdNP6MuWhYtjVqv3O2i1/qebYVGO/TzWg3Rhrf0nmuJUkpzdcdaI65jt+tn3ZrF9Wfx31MM+G5mkZNrCxgTSyuCojRyrMBLPTfvxGzNQT8FWQiuLUkSQwiSlmCEYCtnsWhM4ci1JkN2xYTOcp+NEWTXCOug0WmQm5h2Pr5Ir8cTCGUJbmdJ8vZK524NPPd74NUf5y9+3Tfxdf+/P8nAHfZWej4YQ6k0kEUt6U6MtH2LQUt8jvlnNO/NP/MibUkhKKPow2I/alZlsVEKLoeYI4ifuOk8bAbCqRg08j1bwixR5ni2hAl6Ej/0Qz/GC5+9Q5SmI+VgbYbOg+8hWjVCJMWJFBL96Rnb5En3LoRnd7ulPxk47HeEw0jfeeg3EE9JBu5MB37ghz/Kb/xN/wK//ku/mBgPzf0xcwV+ZX3Te+EQlgJBkcWCCY1JKX00jCmsdSu0vFo1SOaQdx7r5C7KTdVEdifunRE+J8tcpWGdZ5xC6dEpiexTiCWENi8cChI6a6QtPIk47QkKL9R5kIlxFG2cSi5umqoVI1WvEaNP25brMJZEKOV50szXGiGldrU9hv4QBF5CKWMNrRibyTmKUGMx0dGXUJmzshjZlLlEIv6A8Vjo62JaVU0H3sjqYYar2Hf/MV555RW+5pu+i5xHhLU8kFJA6DCEZEriPwI1L4Vr3rdOLmh5QNcIHMym4uWLbuNc6hPLq+KkG/EXvMl4Mt5kNt5w2llOe8vZ4LiydVw567l+dcOtGyfcunHCl7zvC/gN/+yX8fTTt0taVZvn85BhQHpSFqEMI+P+QqoK+h7befa7HSFMDNse62Ha72Wl7wfMcILpr5D9GS++ep9/+KP/iHu7XVn02lo+W3/Pea6ouayl2ucpDGxSMTIL43qBrH05ciG9YqbmqIt2IaoyRpvoqg0oCK1m/uj3pEHQcg7U1EwD2SYwkZxHETgimCThoBRIaSTFkRAOTGHPNO6Yph05H8h5JMaRnIP4h6UxrzOJzsOmdwydxZqIMwlDgDRh0lQoysqWAzZPkEcwI8ZOOBsw+YA18toRcSQ6Z+gceJuxJmLNW1Alsh6S4EzRfuWG3/wy7NmX8X1/7+/zUjylGNuz4sqqIeRBqjPc2uCtf6JCFWOsDNNr5PXoMHOyttr57VDBXmjmsmnZk7NCUeicpXOezluci/RD5OlnrvBrvvg9fOmX/Rpu3b75ZDdQLp6cA/vDXXYXr2NcIJ14mCL54oAz0pcjhFB7Jvb9IJrJejKWn/4/foZPP/88IZR4oCZsN5esvmVr0sNcVqVpdPp3771ot5Uwzhk4y5zT9rm1IZBjYxlCWS28zTPPq9e68Ba5rtdXmxolKUgIMZTwTSCEiRii8A/FIABP6ZgtbSKoPL/eS/N6Z01hG8iLzeRMjpIIgzmQzR7sAetGUr4gc4GxB7AHMjusPWDMAecnnJ+wblzfiqPjTQklaKkRZSUEXId/9x8j5oG/8k0fwrsrmCwt1ZTnROxr5oJfrQDIiRyF3DmFCCkt7fGcq9/TPsyjF1ZQv7bxjwrhGs4ve6Msx9SmN+Wn0ER4Zkp76PrMc++6zRd90bv4gvc+izEj1pei2Sbl6vIda89Gjuoy5HFk3N2FOGJPOjprmC52TOPIZtjgrWO/2xOmhPc94EjZkXLHZ158nX/8kZ/m3t0DOWqcLyIEyIFcWrLr+Wjaot7DNQLb+pzGLrXl2sdvY4rt99d+Y+sralgEWAjxseeqQBFQCgGSWCY5inVGIscJUpDJLLGPkmFTfhd1DqWT9yITR3/PNT9rlaCfSnYawkUVQpmXGZtFezqTMDlUbWryiGXCMmGQ184EvH3LNaVM4kxpgZYLj6dxmJtfQnf7d/MP/t7f4yMf/SR2CkyTIU+ZHKRrss2ZcNgTx4M45ClAyaxPOZDSRIxTmVgR60x9reauPsx5m6F/3wSqjSm6OS2FcjaTzaVN51nOkOLMJzObqInt1vHMczd45tkbDFuHc7mkYUneqHLjXAo5MAunsgY5IE8HwuECkzOn52ckk7h3/x4pZk42p5Ash8PEFHJJx+tJdOz2iY9+9GP89E99nIuLQzEHk4BsiJmX0oyQ6kRvBUVDIMeqI/T8W84lDZOsOy+3QrsWVrV42uQF/Z4k2XeXwLuq2TOCkiLMA3WxSZEco5B+6SKbK4RTNNxy1qLXlufEgxafq0ojixZWrSnEX6FqTQmrlM8bUzRvURwmituWJzG1TSQVqpeHjScXytZ8yEmC1kj2hMkG/8zvxfqr/JVv/BayHfABTLTkmIhTIIVYKR0WvS1y4RwrN2Eax6XGLHe9FcY2a6RW3FeiqHKJWWCgoxUm1dmcBTIXUE19MaUbmRcjMNZwdrbl9lPXuHbtrMDmy0VCE61r/WJz/xQXkdXZ1WZA3LvA9o7ubEsorc59KdU6HIRE2bsO53qkySv84qd+iR/70X/MJz/xCxwOh3IuCn4tqVlawVjfvzVnqbomusBV0KcJiLcIqSt+ZKsBj6HrLQKfcy7Paq4gkimwXBgsRVuaUoubonTlNpnD/kCcJDaba7aO/LNGFj4VtKytJyg9TkoBBXkWRn1EOabFplqTAg7q5ozDWS+1nUmb+2RSEKE2GeK05qk6Pt6U+VpBzjKBpYst+Gwx2+dwz7yfX/jFT/H9H/k5wnBBdCPV5G1QvHYFbx+I/k1H+/Dbh6yTwbommFQ+p/SGus+lhpyBCfV7NRFg7duuh8iUpLGdn11BW30bsziFeh6aYqZJ2O0Col8wGabDgXR3xxQmXCfCHCbxJ7cnJ1jnOYzC4dP3GzCeMSRev3/BT/3Mx/iHP/KPeOnFz5JKcr10NpbrbJkg2snf1rnOJqciqctc5VnQ0iWftRZbMwtra6a2WlDjvmQj5V4hE6dYhEpQWBFCbWSgafNFcxpTMYbFsRUZXiws83lo2qBWxRxL6WwmzEJj178ZUxeldv/tfdTR+tmXyeOOjzfpUy6HmLKZyVqSM9h3/wHs6fv481/9l7h/cUUSp9NczByScLxkI2jcFCPZGGJu0qvg0g07ZhZV86E8OFPSsHpvGXov5XhHkNFawYLEuESvzP+iVgzoqpwzZE2AloqBKUyk6MjJloVqXm6zpudhi+b0dL6j9730MayEU0UGpsi43xHuXdCnzKbzZDKHcSRmGE7PCTh2YwTT47szJjdwkTwv3Zv48Y9+jJ/6yU8y7jLkDujI2dWUQ1POow3oV+/KOAm5FbvEGofBSbOdIjxCaO3JSfh3gsCsYB0RajG1ls/FmEkxS+FQlClXW8tFyAFMMIRDwCWDCQEzjvQkfArYOGLCHp8DJk/SLD1GcmnDrmbkulZ3CSZZaTlgPcrGoAzxbeKDCqn+XQiylvMhkYgpEFMgJelWphUmapnoYlUBSp3vv3xCmRevUpbK+WTB+C39+/4TYnT8N//NVzP0m3rRqQRcc5aUrLGwE2jBrSKC7cqjyQrr95avi59Q4oDWZobe03ce9wDwRcCqSEgjMU8IpWAiE0lIyVmMY0ntKnmYZtbKgmAqVhVBpufCL219V2cdQz+wGTb0w0Y6axWk0mSIaSLsLmCaGPoe33eEHNmNB1w/4PoNhykRkuHs/BrDyVWiHThkxy+9fId/8k8+xp3XdpA9OVlSVL3e/myvX8wFa2yhA5FP5az33BXNMH9ffVJNQdSwRsrqnJlqRWnr8pwlD1RMZHUNxFfPwWCzKaDNiM0CjHQ2QjpAGiFO1Ayquu+y5NklvrD2h9fv6xwbx7Ei0OuiewnZaGxb3BVl8Gt7pqq/Ltc4J+vr3Mp5blb0KONzrCl1mPq7PXuO7bv/DT7x8Y/zt7//I6g/Jg9xjkVpQ9o5+8ZdMgVaMKc1SVpBk30oOdL8QLq+o+u7oyaOgECN3xVlFayZIIUQKsQ5O6nsgHv37vPiZ15kv9sL1eWKrqTV8GvzvJpdfvY79fpDmNgf9mCgH3p810nFS8oMwxbnvJBS5cz25IST01Os88QY+bmf+xif+cyLZZGYy7Q0xQ0zm6Rris/WFJsXEhltEbJ0qLILc3+e2GIv68Kqx9D7UjW0EXQz1Xsv8eyUZRE0plBxCo8fgignCVUVRvjF/MuzH3vM7VnPJR2tlnygu7LCL9rRfm/dR1P9eDWZH2W8OaE09b/mjZasNhNdIj/zWzD9c3zbt38IuitMGIKxBUhZNuPUn13X4WqCc7sKzj7aGmSQn7R0nxiB7bDG0Df0GWsYvh0tKNKa2y1AkbIQEL/00su8+OJL7A/3RbM2D2Kx6q72E0JhQTNUxrauF+FzhWd1t9+zO+ywzjBsNmAch8OE9wMnp+eEDBfjiPUbrl67yenJGcYYXnrpJV544YWjQI4xGg+mak61WEQYNaRCoaGcc2VVKEXIXdEY+dJ9a6+zrc5fI6vz+SRSOhDjnpQmUhTzUP0+adirtY5zg1t93rJP1VyypaQ+byFTq9psXizbRf9Yuudiqhtz9P12wV36nrkerzWJH2W8eU1ZBVO1Y64BOHnXQn8V/9wf4e7du/z1v/ODTLZnMhCZqSFaWgXZT0mMviQ45sECVbBsxU5UgPUUjTGVx+Y4b85y6E1uTZtxHKVb1Tjy0ksv8+lPP8+nPvW89CYpZqsI3VQJw9r9hBCqwI5h4jBNxBShZNH43uP6DuOkjdx+vyPGUAS2Z4qZEBPdsOX06lXcRkIjfXfC6dk53nfVQtCJ1yYG1LrCEt5R9DBnIcISU7MUh9u59QDMC18VKC4DbpWypTAHKqBXwTi7bEXRDx3GZkLcM4UdKQdiGkkpMIWRcZQUxFRCEWRNPhHgRwEnmfxqpcQivGJajuOBaRoL88WsEdtrWj93dYXasQ7ltJ/X3+XZTkzTyH5/sSjEOKaBj40nTkhfD700BeEFVKheFP07vpz86o/xoe/6bv6F3/abubrZQ5yrD7KinysETFbSJcDzAAW3DDeoYaVBp5zAaOmWILJjG9t6wGjPZc1n+9JLL/GpT32az3721eXVq6+VlxqmHTJxiomThAhZWqwLoVTGMk4jeZrY379Pt73C2Y1zDocgGZxDT99tIE24IOlpw7Dh9PSEFO+y2WwW97CdSOuAfytsl9HpZYhC74NaMTpJ22qP+ftp0VNG25TrpM+oSZ8J4QBOcltTLJ2/cJAyMUwFoFLHR1kNqD9zlgweubdy/733C74dfXZ93y/MzGPP/LIFdjzu2n6+NVVTSkUQZfq+ZW0Ljo1WGKmv8yXhwm/o3vl+DofI1//lb+Ck3+BLVn67CpKl4efi+4sb16Tssfjaal1rP5/rawF/RGNKo5rLt2A9ORd+YU6EmLh3f8cLv/Qizz//IuMhXPq+/lTNuNyHAB4a+0pBOl4d9qKBc0x4Zxm6jt44fBJTs98MnN+4xvbqFfzpKX67Ydhu6TdbIoau7zk5Oan8PHLrqqFX71NtnW60wkWS1HNi7p+RjbxWASoLDRSe15SrVtXR+ls5CzF2a8auQ0IGCc6HECTWnVK5v4EYQwl/RGIS8K29t+uwGCw1WasRVUu1z6NFQ9Xnbpnpjs2JdrSVTK2WXBK8SfhFqXAelQ7kyTSlaVdPQTobq7UYF6KpBB0rK/SV9+Cv/4v81Ef/d175zMhZdwHpOtZ2YHYYE/FmDjyr79auxql0aFYEbz4ikG3VkuUNZl5V9UeLFrcG03fEGMR85OEs1mJOS0XDK69d8PO/+AqffWWPs1uyM4QcCuHu0jSSFTxfetiixMUHlzJAYYozLs1AV6nCGXcHun5ic77BdZ5oPC4nfI74QcIN9y9eojdS8DxsN6VviCkwiVRupEgJvzhiiuWeikaMKjy+I46j/O6FldxgSsaawdiOEA04i3e9JGgYIbNKZSKYDH3fFQ1haglXa8rGEAlxzsKJIRABYzqpLLLSXkH7DEiX5bmwWkISppaF6ftT4SJSYVRLYe03tgLeuk8KyFjrCCFWk1/mu3xnisK+n4BxChUslLbxErNOaW4D+CCtfGw8vqZc79gsf6qBUSx+tKopGcjOM7z3j2P8U/x3X/tN+O0ZmTtg7mHMBDkRQ1zQCeoFLXlb5oqH+eDz60vxSAOYhFQHlCpym3FaX7nSsg/SkiAplPtD4IXPvMYLL95hmizW9BXtzVkgdGM180SOl7NWyYjQGrQyvSRhS/YFxECcDkzjjjDuoaSSHe7d4/6d14jhgPMG4z3GdhLuyB7bdVwcDoxJuj5vTraloavEfYWF0JYJSymyFhqMmEsYC1l4IrnGj2VhbX1NWzOJYG5VrqERBeZUEFsU/JjJrKExaUIsAJOxrtyhAtqpC9NgCW06YJtr3AbxW0FY+4FrJLUV0GOhlfV8EE0pVDNjCalMIRTKET3dRyfLasdjC+UMrM52Y770R3mdjVDwR0OJXVo4fYbunX+UT37in/K9H/5ZfG/J5gIVi3ojGv9Fb0rd9coHesPzbeH+1X7mS8k1JHJcGDXmZkjR8dprB1544S53Xj+gyQEzMsxicrSglPpP7XGBSviVivlWEcIUSdMBm0Zs2HG49zqvvPQZ7t69UwLWmfv37vLKKy9Xc+xwGIU9fbMpJWXFnJsmphCYglBMSnwucCjt21ISKpUpRqYwiWB5W5HZGo6yRXPa5TNQkEXu9Rxy6boOg6lJ6K3ZZ4yR3iGAd7PpaJvkhmoEQW25CFwSvDacpK5J+95aCDVUo6Go9nm04TYdKtQSrgp1nxrjbGPsarquK2/eOqAnizmaV+8dPZyBmEtc0gjWlw2Y534X7rM/wjd+y7fxm3/Tn+KKvUvMPcYmjG1WT0xpXlr6MOTiTxqt4WMWNDPrx8yxVU8LBhSKshU9jDFKobJZfme+toJWGst+P/HiC6/wwvMvM42J3DmySTVBW01sY4wktZSmtDJ5E7MZ1K7QuoFeYE5GOmzZTA4B44XjdbqTmMaR85uJkyvX8Hni1VdfoZsGwjhiGelOugJyJElEqC0FZPIcpnHhk6WccWlGSUmm5vHWczNG6riTEebybDGWUjUhdbWYtkek2CzCNDGnVbaAh8Q5kW7I2UJ2OMmtEwFoXBONT+o9axHfnHMtSxPf1WLMDPDoc2n7gCq7ooI+6vetfdV2cRaGvEnisMYWf3FCaVPEPLdy1ilJl7IyS611i6SCNxqPJ5RZJ81DRgODSuqdvpa/WWPxz/0h4p1/wjd+2/fwn/+Jr+LOXkzLzHyDKTfElmPrRaWctSZ8nkhZQiFCuDufw1LAUq0YkCoK5vIeLi8s8j2ZgPLADffvXfALv/ApXnrpZTH9osTRdAc5SSqb7HzWevW+1JIFXT3n4m0Q8ERz7nIuxdMGyAEbohTdjgfixUR4ak847OjCnrwL5DQRc2S7PYOcCwXlWITS6GVi4qwtQghCHJUEJe18J9o6qeknK73zwpJu3Fx1owFhqaktnLHWSGLDYSJGqZpptaiGlqppZxAa0mwhWjpnSwLBPOdk4Qw42yFVQhr2mhMFFhaRMcDMNdvOgRbQWSL/yxhrK/T68FKS2HSMsRZx67FTCTGJ8JVsICOs8pLW2LDVP2Q8llCaB7zOD/hQfXCIIFkKAwjgrn8x22e+in/4wx/kw1/+m/mN73sHmQer+Qq3pyRZAQ/AWtvR3uCcK14gr2k1ajntlR87C7PY4jlbXn/9Dr/0wvNMYSQmy1gYxqt53KJyxMW11P012NTlu1i0rfrVRhjI1Q4wSVr8jfmC1179DNkmrBmZ9plkJhKJ8/Nz0UrTxBSn0mJA45BN5YahsrcrE0BIEVfMT9Ocl68+nyGUhrGxmLwYyZPNKZJixnRzXm2M7pL5phPZWifmsHe47EhxrL4YUErtZGFTbQuatpZr23KYWzK0wM66rlXNSY1T6wLR9z3jOC7i0W18FeYa1AogGYvLM+jUzlMdzjmm8dGyeNrxeD5lY2W10Mobf2f2D3UYAGtx7/kDdKdfytd+3dczldbcdb+qJctNrchdI5BHbfTMIiQzC2ZaCWku2rVMjiNXo5+ZNXXilVc+y+uv3UFRiPbBtceTBaQ9PxHsWu5TmNGNmcMT1s5NerSBTzvZcs6l2xeYlAhhT4w7MiMxHaSyPkWunp/jjJVJVMqNcpTwU1tTWjXCKl1xnTYmx6fxI0szhmblXwMj+szUz9L708Y2IWMNuAIMqTuhI5WEgNZnXWu19jraZ5Dz7E60Qnnp+R75Xb+vGUUae1yTWOtn1Ydsj6fa+I2O96DxZHHKvNweRThz/Z7y2RiMP2V47v3cu3+fb/6f/lecHbjoM8lkkhH/s20nHtLM4SKsY1CcpVLmo6ANxJAXeZUpLQVVN3H2rWjL0mfCpDS/pvSgSJnpMHJx/4CxPcb5YnpRUvkyFN6dzBwW0YvX6gpjPNb2pV13h3WdvLYd1vc4P2C9xzmDczJZ6yQutXyV3CkFbBE2Y1Ktgr929QxnIU8RkxI2aZFwxqQIMdZYsI7anbnJYGpTBEMQKg3lXArTAWOkfYEtwiWPI9V+JkCdrLofY0xlevPW4k0mHC5qi3nJBCpCXZLjRUNqAgQCUB3GKjSHw4GQNENqrN29FMvQniTtAl9BNZ2bxVzS9vPjNDLFwBgmxkna2ksLHVfbEKwBJD0/rcbRgvhUsqX2h7eIDuSRNeR6ZA2TqKkkIJC5+evpz7+MD//A9zMSGeIOY0KZ6OK7SI6oEb9mYTevNFPJ0NeuXEtBTEdfW2sZNhs67xoN3fCzlFhnShP37t7n3r0d2ownL3rYN06QrlTVHRHTz/uerhvoup6u2+D7LX7Y4HrZun6L67o5u6dJS6sk1uo721SoJySlDCMhnpPTgWvXz7EmE+Ik2tqwOLdWI9Tn2qz87U+dbON4IMTCYqDx2JxLEfnys22Op5qRC2unoKpSWByZDnvh0knSgmEcDzUIvwZatB1BWxOpr9fF22vg7lJ4JBdtnEWEM9R7HS8h4nIOXd/V4nkVyJZ9ISVpRDVNgVgKCMSVgRB+mXJfZSI/2mczEAxEAxK1M4zuFP/sH2KaEt/8nd9L5wArFeRrEwFWwA1Lk1Ee2IN7jrQrvzrjIF2atC15ayrmLOwHu/2e1+/e5fkXXuDuvfvVf7Rqdq3MpMU1N5O7nrsxtceKtTM0bwoaud5PDbHoPup9z4twirWWq1evcvPGDVnQ9J7Vu9/cj6T9V/LskhxBHltzv63yWAMrbdH6g65//qmCPhKjoMnaCWwcR/b7vfQuya1Z2vSJSfPzFi0eq3bWc64dvlbz5NjcabdWsJcLwrKVgmRFLZMOdL6M08ThcKj1mq2v+yjjiTXlorMxxTyCBwuomgZQA9UBIxUjN38D7uzX8vf/3vdzN94i2EAyqa50c+3e0neA9QpfQib1TNuDH3kIaa6Js85Jy7jiB1SHP8Od3YEXX7vPL/zSy9y9t8MgHZ68daXnxHys9aKh59ZW4M8+5+Vq/NZ8VGDBey/n1vni/815o0pjIcrZc35+ztVr50iEuM1aKYhliWznJKat0hK0WrOdgHrumranJv/6muWzlB4kS42rz1CvP2dJWpimRAiZEEveRBTwSDNxWq2bs1hMKohKz5JLyE0yfZTCxczngamLnZySqdpLwSM9pxhT0yKwPQbVpNbrapMU2sSFTJZMJTWrS0yz9UMfNh5LKFXoVBB1m5OQyniI5sxALFk+yWQmP2Df9x+S7Sn/9Z/6C5y4p8rNvdzmer2S62tdgdszyppOVGz6xepXG8QURoECyigYUIPxIfHavT3/9NMv8vOffpHX7l5wmCamUILG+QE9T9r7ZiQeVsEbNXdYLhT1/jTXtXjwzokwMqcfksvVGou1HdeuXuPq1TMwEsLR/ZkMrgilsxS6RbkPrM6jvY42lNAKVztBdXbkzCIe12pREGE/7KU3SwyZaUpI2p6v8WzMjLKLFTDXpsYoJNmx+G1a1WKNq/m87fmoQCkpdEjyfXFxJLyx348cDlMVSDExJcQRi0+r+wLN9bUL0EjvUas8jDFzRVHRnI8aEnli89U2W6Vof8gwLKIOjexm8slT9O/+d3j++ef5W9/3k1jb1w+0gtle2DGtBCwmeft67VscE3Tl0hkGaRm/u7jg+Rde5FO/9CK7MTCGII5/ReYi68Vhvamm0UaoXddVDbu+Jr3eNivl6HXm5QtJtNhw8+ZNTk62dN7RdVrYLKCRop1WzW/bIKarxaTVCOu80UVYpXzumCDra/X3xE9MgOTbSvK7MCAqHYka56m0AFCtu1iENeatV27UDfBIy4TGv2tQZDFLl6V46pPu9/tFdo5eU+uWtKme62s89p6GT3a7XQ25PMp4ooR00/wvIy/eyfNbi1GR0yPvZmOZnvmt2Bf+Nt/1oQ/xu7/iT5KRZkA6iZSBbKFV4OiEms3ZpRaq12BMfeAzlCwCJFlEMik+8/JneOGFF7l3bwfGEkMqHZ8j2FzROj1P26BwemqSTdLhfI8kdmc6I+bjeqKvmREW5rrus7mJFUsiMXSGWzeusd0MmNhmRsmqn2IC58FYnBXNlwyFI0n2rBkp1SIqMUytqGgnrJaetYvmfG/nIgItkWuBIN85prF0S7ZzxhRZS8AyvrOkkKvpqPfhmLvQujn6ORW8NiZpWHZ0a7V5W+up31mn6j3SMMt5qPfhLWkam5khY/X3irvWhDwebT/tx7Mpk9sPmPf+2+wOlm/+9r/JSd8XQChXikC9LQlqAXRqNjUJZ/QVWmO7Ptzy+ZgL3QeaKJ7wxtBZR9cNvPr6Ba+9vmcKhhAzCUfGkU1Jms6Ft9UK16w1QuYrnTM8znqG/gTrBjA92chP64RZwXmH7zp8oSuxKyRvAUKkSDKpafUuSePGZLwNXD2J3LrSEcYDXddjjcOZjLMZbyzbYWDT95wMA1fPz9gOA7119M5Jt6oQcTnjsRAjcZxIsYSYpsR0mDjsRw57KS9TMrGcI2RloBPC5FyoG5U+tLI4kEk5YGzCevUuLFhHMrby2eqCOR4OjPuD7Ke0vMAknJeGTc5bumEuWl+7N5cYILIQtklW2BLEgXnRaTVka7a3+MBiTjcWgzVzl2xlutA0v0cZT2y+CmgjF5bXC0ieheBBW8YswgYJwGTSzS/F3fzt/P2///184jMXJGUIs+Zo7iPWVACp/BFoTYnLAqn7qK/L/7MZJ9Xsrut5+bOvcrEbSdmSssG4DuN7jHe4wnszDL0QXDlXWgbMx9tuTzg/v4LzA9l4knFEioYqMHxdWWGuK2wE8pK/qgthcZkxGWsSV848pxtDCLsZwIgBYgAjGkmp+p3JmBzFEIwJX/or5ig5pjnMXKcppmp6Ckt4rHcupcLZC0ifmCI4QCi1hAqcqFWSciATMbYwxRnA2driHuPK4poW6LKW4alFIXFiyWtem9IPomOp97PxpVtkX38+slaECuqohWRK4rzyImnd7luDvip6SlPi81g7WI72uxWZtRae/X0Yd8o3fMt3cNJ5oYO3M+hB49PMYYbmNFcAybxdzoW8fE6NuZuh67yU4xiJk86ATU8/yOu2cLd+0cAw9JydnbHdbgU5NVwSshZlrIK00pCtOX7pxpXnYozh6pVTht4RQ2C3u0+Io9QohlAmuMZcYwk7TCh/jZGTq2GSagamJQqqPqbe4zlMIgnvVRByqujjWnutM3Paez9NUxXEnHMRusIzyxx6aU1VzUeFmV1gTftRj7Fa6Na+8FoLrt2f1kyfE1Oa8zUzWGiKxtTXjzoez3xVP61oSN3ySjhraOSSxOZL2/K7xcm/8hz+2T/CJz7+SX7ipz8jFQTGgncYJ+VDukrKtxYSeWnFOyaEDwaISrWjEfPovV/wTgy+7qMKZN/h3ZJnNOcW8MhsTzo2W48v9JYZ4ZjVpOqjxz+SeTT/vaCO1dqY/+6c5fTsrPpH07QnJZ2YhXI/HohxJISRmMZqdmYmcp6kSsekwjckPENtlf4x1FvPuzUXc5ZSsVAa7GgyhrQAKLHVRuvmGi9VRjuh/I9xwnlTtW8ujHZ2Zvcs5zDfq2kaGcexAiutYK7dgWPjQde3UABcFsj2Gerc1jK8NsPpUcbnhGLy2OGqZZpX75lyQ9tt8Q1DMh7e+fswwzv52r/8TcTuKtFI0kF2tjKhpyIISku/OP4DBLK92UskVq9FJn3KBlLi1q1r0h68mGIz7f8ynihbw7ydA9ttz3bb4b0r6WMy2XL1fh9yX9faknY5M6Vnjezr7OyUW7duFk0XkGa9hSMmJlKYCNOOMO0J4SDVLVlS5mIYyWnCGaHfUHrNEIS4a61R2pS8BYhiZp6aXMiJU2ncmmLisD9AFvRUe3TklKpgSnVPJpdziGlO0dPicLkXl0ML2ndGCLJm7TwnHMzCs9Z86wX6mNC22lETH9qsosWCVRYQcYPmkNCjCubnlPf1czPEFI2bLf6df5jdLvA3v+/H6PpNlWrbcInC4/sAl45o5huWcy5pgGLmdd7RF87VqWSdiAaZGmHUpOWZknK72XDz5jXOzk7wzksrthQbgbwMrcu4HMpZ/smgcdh6/cCVK1e4cn5GjFNl7xYSaaGynM9XzEPVSMZQ8muViU8XD0FGM7OJ2VJNrgVREdacc9UM8yRdhp2W934dWC+wLyqE0tocMl3nUUZyMZfnxaIVkLUvOScI5IU5DQ/uGtZqv9k0lXpQ1cTqR7bZTGvTtqLkxrz1Qrm2TpeG6NpMfZT9Lb9rDdjnfhvu+pfz3d/xHXz29bEiWgbw1i3Mx6oVjxz9Ue7FwjdAuk4fxokwJW7dvCnFtzpRqtGuJtU84brOM2w6rl8758aNa2w3m9r3oq2qOHb8qg2P+JPVLCoXJMkAlt4LuidFu5ZxDMXHSsSQ5gUjREKMTCER0c7JoTCal+avhWJF74UCQ6RcmzEp+GOb0AJQhSHnvPCp1CRfa6nWj1OfVIdBK2eEh8mU5ADve9ou1BLgL1k9WQL81rqa9dM+0zbZvhXKY8KyNnP1exrPbPel599+t8U7dBwT/geNxxTKJh7SoKh58fvjiWOLPi7ez5ZkHN37/m1Md5s/+ae+mm64KVUSSA6+M9JCThRoKf1ZpDXMWy7lUg/2JWdULpGYUmI/Zi52iefe+RTPPnOL87MBaZNRWp0ZbVFQqklMpvOWm9fPuH37nLOtpXcJm6XK5ElQsfWDlL6IEnawOeEt9N5ydnpCmBKHKbAfA7v9xMXFgTt37/Ha3Xu8evced3YH7ux23N8fCAlCzuzHiZQo7Q0QikssORlpm27AG3BkvDViBo8HSJE4hYVp1i5OKYG1Hms8qRQAo1k2SMWPVP9kYYwsWy6UI8PmFGs7fCdNjGKyJDxdf0JMjhSFnWEaA2CJCWIyYHwtkFYgaUZGW/98FkqdE+qerBMO9vv9pcR3HccSBhQMs9aKWT43y3ykZ/7ERc7r8WZRWLP4jdoh2mxO6b/wT3D3//izfODb/xb/3vt/J7t0IYSDWYkH2xM0l0+mgrPm6MoovzYrI5n9GBhHw/3dnmHT8dTtGzhnuHPvPhcXh5IwXfyjLPmnzlpOtxve+c53cO3qKc4ETJogptXDqyfbnMMDkNVLdyqz+HqGzWbDlSvn5AyHMXD/YodFtBmpsPBZQ5cFRQ4Z+j5KiMkYQtB8VisLnXXSNyUlvHPiE8eId0a6SXvPOGVpThTmid3WG5JFa1WtW8i1UsoYxxxWKSEv/Q4YnOvBCIsC2TKlUjBtM6HwCW03HpIUgIOtRdqqctvkADVbq6A0i7CONiyi31VWu/bzDwLojpmvAM47BjNgrSGEt0AoVXjejAA+1vFy2W79etzVf5a/+3f/Ln/0K38Xm14/UbSjodqob3R+RmIHFf5f/7UclRgTu92ewwHu3bsgRTg/OyOT6fqBrrvP/YuL8nnxvby1bIcN166cc/X8BO8ghon9fsd+r5yp8wO0TdlXO3ke6e42IdicM2enp1y5cgXIhCkwBUsOo6QvWCcT1kpsVKlWNIPFGIMv6HLf92At1nWLUJLy6iz9JyG4ik14JKU0g0CFP1ZBGu+7Otm9n4VV60VDCDjjsGYj/LMmcwgBjGEfDId9IN8bS5aNaE3vLIPrkJ4/mu88H1czctQ0P4Zut/7ysi4y12Ryvaa1pm0FsQ0VtT5o+/6jmq+PnWZ3KVGAo4rpczJyFr5S7IB797/K9NOf4Gu+5a/xn/0n/zp5d4+cPaZA5HORkln4J/ONmJPWZWVnFuQm7mWw5BTZ7wP7fWSaxsK7Ezjd9jhrJOvHyZWbEkPdDAOnm4Gz0y0e6VY9lWyWQ4wcplFisPby3VmwvMEiTvdGD9IYKQE7OT1lGAa0wY3zXaU6xDqsxhCDppnJwlMJrPJE13XSDiFm+j5X1oMWcW0nn/4t6THLxG2rQWYtFWtD2BAC1pfWeiq4UYifs81423MYDzjfcTEeCkhlGQ8WW7hpXbLsR8tm6Oiyl4U5daTsoWq1WBZ18T+FaBoSipxL3WPlfUqZea02i5/tZhprS69Vhb8V3FZo9X496njitgXVFzwyZ1rBfZCAmgf+fd5pxpSYYSZf+yL87a/kIx/5ID/yk7+Vf+4LbwMeayfwVsqQAElxKS9Xk9o2KKvIr66eZj7pJCZpmBLjIdRCXNJIChM5Rs5PN2w3PcZIWp51ht57OmexBEjCHocR1jTrD4RU8lDL4Y8xm+U8x/LWwMhRXzhlttstN2/eLEkVkc1GAB/Jsy2cMQZcdKWbmMQ0Y4jCXW0siSSsBDmSDmMBT2auXQ17gC4g6mLM8T+dqPv9npQyYYpVkEOIeB/x3nP/4oJsTA34yzE0tS0zGgk3uGC52CVSsljTCfiWR7CGZCxT9LjoMQE6DIkesrZnz5ADMDIjELNZGmMiWonfWhUu5WGS/M26GSMLhizWlP0tE1daUKmdd23M81G1JDyhUD4InPmcDyNmSS6BBPv078C8/L188Nu/i3/+v/p/Eg/CldMWmbZCCayEsnDNFOGQzLJMioL4xSDLoTECfAiiGEghkEp/SnLC2o6+E0TQmoAowIQzCZtL/0oMmFJxsjFk7iDLzDIg3b4WoCk/GlyMCMXZ2RnXrl6VNERna3WL72yNCwOlpnCJOIrAgZa16ZgZwm1lQFChVNNba02zneNwh8OB/X4vghvbMjgJk0hX6omMrQkJaqVoEkAiMoaAy55YGtN23pKSJdGXeLRhip48wpQj2wzOeJkrOWPtBpMCpEDhTyk+LZeQWb3Oek+bBaZdkJaL4uWwTltTqe+pZbD2Xx82nrhK5A3nzaW/NdpJ3zn6/TJpjqjhnDMMtzG3fx8vfvqv8ZGf/Bi/7oveUdjUlUdU/crLE18nqNTgiajH4l9YY0i4kiMT5wmSkvho00SKEZOFkwYDzluMSbW422EEpSxEwtZYsnME09P3AkTkxcNdCuU6Vatdjdth9eYZ8M5y4/pVNkOHIUsSeiEW67oOcqT1bzS+qBNmvjdKayn3MmcJNVxc7BiGfkHepZOvCmU2NT642+1KQ58O8jwhQWoLa+sCrU1MkMmS7ZRBqTxDKCGSLKEk9WElAV/oO2MyxEMgBNFivqSXe+uw+IIddGgCRZ1Dq58hhKrR1xqtvf8tSrs2WlqhbLVlG4M99iwfNB4/TvmosY4nGdlg8jLUkhrFMTlLfvZfwp1+Cd/yrR8ku+uQenKSlt3Oelzpr9iufuJ7WTCubsZ4vOtl67TtgEDXzhnOTk/wzkAWHhxnKBUXCW8Dg0sMJjNYS28MG+/Ydh1D5+mdxXu3qJlUUGHtK7aTYW3iXBZIU++MzZHT3nHjygmdzXQ20TupTem8F4a4bIRUqwAdc72htBt3rkNSCB05S9lUznMrvBDEL54K+TDWElJkPx44TCNTikwxcBhHdvsdY5jASIw3If02YsokDIcpchgDKTvGMcnxjCcbj9OwRxahCwW4yU3LdqmGkbrJDKQscdeQEuMYGUNkioJBREqapJck97YmtZ0XbZJBa44eK0WrUzQvYwXtWKOzetx1gfjDxhP7lJ8761W0Us4IBWJ5Nzf/twtBHq5gn3s/n/25P8MHP/Q9/Bvv/z2kNFZIfyY5nm9OC+QoGKLvC1jR4i8Z7y03b1xDCIDh4uJCfCU3N6rphx6bhQYFKK3bE9qtJ5UF5TAeuHfvfgUgQghNR6z5/NrzMUVnt3+jhG2kfC2TU+DK2TWunZ3Sd5bN0NP3vpyLNL8pqqiCEwK2tEHsNu4sQyaWaEpjDPvDAV9S54yBqbCrxyiMg8Y5ptD0XjSmch+l8hxclrDMlBIGB1mqQYzxBUERczfnRC6hg+hzBVdquIPZqsimmJXWMoUIncHlTCcfkntpLTmKVdFqq3VMdf36mEC2i6gtecysnpFq3Xaste2jjM9Zf8o3MxQlW7zXvFZDVqfqdPPX0r38W/jwP/gwX/mVv5Pb54aUStythD1gGXvSn+2Nr+8vFj/xmbq+4/bt22y3W15//XV2ux2QpZFq+a4pydUzdUUQgCFnUjHP7n32de7dvTcvNlmQQQmJLJG86ne8gSWSoVBKwo2bNzg53dJ3HX1tHS8mYUpCSTmjyseyTEwRhvlzYt7OMP40jo2/JIzwsuJbQgYrMLTEMbUiArOYxBjxaSXuKaalhk/UtwylOU42CKOdHetDWcf+UopEo1yw8rhttISimW05pjWWkPPR+9neh1bDrcMb7fH19fz+6tmsBHsdBvn8FcrGvczH9G35u2ou0aD6RwlHGNdj3/1HGT/6E/yF/+Ev89/+V/8p48VnMcmRSvoVSHOZNkNfb0prRsgqOZslphzUW4sbenp/lZPNUIRyKeBiR0mQeRql+kKTuVO2THdHLu4HxjFW/whLSQebr133Wds1pMvmbAWnSGQC5+db3vGOm2y3HcPG0vUSlvACMYt2tE1Svm3jeCz2q+CXmnJCHSKAT8za61EYyUE4ZrWNQStcM7gRqxOv91fvtbEGg4Qo1sjlNE3llspr77sFSCIJ9GVfJRHBFr82hkS0huAC3liyFXKz3Mydeg7m8r1fuxOLKdn40rOwLT4yW10roKjN8Pn8FMoHaYBcIxR1GEw12Zo3oYRJ0ukz2Ntfyac+9d38xM98il/73itMhxEcGCuXpQFk7SC89jWXPoBBWerIQrCEkbSzzp+y3QzL0zHldFIWzp7xwBTGkuwd2e0Th8PI7n7GuQHvA2FKTRhgSQpWhR3RdGtQQv6YkR4ZiRs3r3L9+hW2Jx2+M3g/14umnOi6jhRnFDU32TULS8HMhM/1cei9chJOkOQBydARoTQVTNP96zU554hpKnmzasrlqn21zaFGhDQxYZomydYprRGkDwlVe+t+1MKQDlxdwRAMxgjQo4zzmkyvBSUPk4d2cWiFr976xt9UdFm/d0yw23225vGjjLdUKB8Wm5n9x7wQyPaPCww2i3ZNxjPZjP2Cr8K+/hH+7J/77/mLX/PV5PElUoz4sjMVwGma6g1pA+LtqmdASsLqUZc30Lsl/0v70PqhI6UNWjA8jiOJPRcXnyHGzMn2hMieqRQVG8PiwbcsaAV2vGT61GFg6Htu37rJyemGfujoPIUcuL19eRHwx1rGEurQYH/5BVP8M1kkqPeuM11p2OOKWVv2nJuHo6dVEFkNT7Vh2Jzl/NSnJ1tinLNfKpFySkeTKyoibWaeG2stXQFQBFTLOG/o+w0mRXKMHMIoxdbjSM6zRtfzXR9jvSmFh5rmGiKy1mLSstD68vkuE/ZTShVLeNh4TPQ1z1tutwd89MHfLlupLMnHvlI+sTYTssEm2VK3hff9B4Rg+dN/9i/gNtcFZSxFsGPxh9qt7qfRFPIGC+R2vSlhsveOrpN8UNmEjWAYBrYnG05OtpyenmGs5d79Hd53tV/k9uSE7Xa7oLFs0b/K+NbQKi6uHUFgb1y/zu1b19n0jqFzbDcl06j4k2pat5M45TmDpy17s3YJ23uvmmf2G9oFaMGwkI8DKC3qLIjp/JlQyrx0E/rFcb6+Iw1m9RxsWSD0WSjbn/cdfT/Qd32xipQHVhIXxsMomi3PLBWaI9Ca+Hoc7VnZxmld6clZ37czoNOGVPS6j/HyvGWactZcazuuGSstN2u6NXxz+Tvzr6b5g5l/L5OlGCuk83fjbnwFP/Mz38dLL73EU1cyaTqAtXS9rx2rUkzSasAABYEU4itmniGjC0HWw6KGmrhI6pvl+fpq+pIBk4nR0DMwBfjMq68zpZ5khY9m6DzOCFDRViOoqq7+1zF/0shdcBhunJ9y89oJJ71h4w29lVCNw5XvyXdjYR6Q70tbBlP6sdQsHQO6Von5l8v5zWuusRZDAai8p5ZIpYy3jjCF+vthP7HZnjAdAjmbkudqa5rbPowY10lCP6YmIBjnySkvGsaqP1Y377GFjc9aaSOfmYEkrb9U6yfnTMZgfE9IQcjMCliVindkrZGu2xYwCd9ZRN5KAnmZb6ZyRQnHUAgj2+229FjJkJLw6hZW98rQXgRxv9/zqOPxyZgfc4gflqtAtppS9jlP+2b6L46aad427V4MGI955veSGfhL3/htDKdnWIfEGGUpr8RM7VWkYi7GViOZLOxovcP3VgAPm7DFNPKdw3vx37y3wkRX+x3a0pRHFpT79w+8fvc+r9+7z72LC/b7XaXGqGZwSoWmI0ozojjz8+ioq3WpHz3dbHn6qds8desaQ2cYvKGzBm8ttn2aWeOiZdNK/zwvPDJ5ZeIJU0Ail14h0sZPqEvCNIonX92CWauo366/64Km4JGpzVXHirJq2CXlPC9vjdXSdla+tMmB1MZaHP94edaseZUPoDIyWovxM3+TXkM7e9VkpyymFZxKqU5HTRVcM+C1puvlfT94PFGR80IuaH5CEb7G9Gxv0mIvb+xvXj7gg94zxLN34d75b/KJj32Mv/MD/5i+6/CdKyGSjFZ5tqaimoutf9T6U845nHd0vmvMmTmZvVhB1T/EaCzQkVPi7t277A8HLnY7Li7us9vt2O12C8LfNRDQbqAmW5k05fjn52c89+wzXLt2VUzls1O6Gg5ZkjrNBb0zYCJVH8vEaXlWy2Jt/bus+KmYcH5h6raTrs0UAiEcy3lmBKihhpxWx54LgPV617G+NktGs4Tahj4hBGkLPwX2+wNC+FxmYV7upxVaNTGPuTd6//W4reZuwx3t/WrTBXW09/0t4X1VlBRWiqvxMavZkFupnb+jwjxzuF7+HIv3HyC8TbF1tp78jt+KGZ7jg9/5PeTNVRIjxoPV1nYpsWBbu+SzFW1t5mLoikAqJb5Rxqay1ZVvPlc1ne7duyvUEdPIoeFzaYWyFcJjVSGtL6sP/Nr1ntvvuMJm49mebNhut/Sd+FYpa7yRqrFkQhehQ7hjrUFS/pD2BWGaBF/Jorm9K8W5Bpw1eOcqr63uVxDIWUOum+LEsOyAVfNMzTIctY4h68RvP3Ms0Vua+kxC0zIFdvuR+7uR+7sD93YHDiESs5GMoqRtHuQ5S85yua/Yupi2eavrxWk91nFI/bzvOpmTeUaNK9j2iOPxmQco8TK1ARrKGTm/fAzRmYWR44JtzPoNlh9eGb1VIJFzsf4E+wV/gou942u//kO4rsO7hDPSs9HZMsG8r2bUfFnFiG4EcgGLG1sq4h3WenmoBRQy2rcBFS4xrO7fv4Cci9+5pKVohbJ9v10oFHDQEipnLX038K733ODsisN50UYSBilJ4Y0ATGHCmEbLFCY4ZdNLMZDChMkZUiQFqW4hRUnRQ/KDyQnvTOnVCRZHDKk8/7mpbGtGhjg3F1pTZqy1hfpees3rxO2F0NKCYzOQM0WhbtkdRnaHiXsXO+7vRkLKTDFJwfoUhbfXWGxt0OTRbKdWU7ZmZqvNK9hlFhNzca5q1rbhFf3+w6IROt6UTznLi4Ij+Yhie4jGe9PDVBk1178E+8wf5MPf/w/4gR/8ecw+0lmnqcx0vrt089cP4GEro66qC1SumrSSWZRTYr/f47wXxnOWx2h7WRwzYdcIYBYHjWvXr/Hudz/HyclA13u22w3GGKYpMDXEVWoRtGNtMqrZp6NdENqqCJ1YwvkzWxnTNGJoNGTZt3Ou8MzOx1VhW5t8qhVbodTjrtFLvQd6/1rtmbK0w5tCZJwCISRCSoSYCy+RtjgvC2fOi3u7RqXb+bE2byXGKlZEqw31vEMpzF6b+W+Zpsyr10U/HPnc/O/yHt7AXH0C+TXtK2PJz30l/vzX83Vf/628ejgFo/STc9trZax+kABe9u/mz+mKbZrfNe/WGOG2CclxsQ/4rse7buGbHPMd1yaQCjsZUhAunBwn3vHULW7dvEXnPEPX0fsOi1RgxEbzGiOUHsba2nOzvbZWS7c+qF5Py/WqYQsxww+kNIMqCyFb3bv2eG3anY61MLbvw1JAjt0/FTD5A01oY65y0bYV6gbMLe7mxj6tUK6zdtpza/3eVpvrvsZRwjpSXJ4X+32YKbwejx2nFJxO/08sRTDX9x4uXesJOu/p0vfyWmCL/6avDNKOHYu1G7qn/2XGKfBN3/Y9QIcng+nEBDWXqwXeEBMr/q8mn9v6jVVWSwk7xOR5/qX73NkZjB2KyQumMuEVYuEjD0g1Q2WDAylzmiaubDzvefYaVzanDL6vnXcPFwfyBB5fmqNIEZpvguyt4Gk52rKmMAk/a2kRn4mEOJYqjEgy0s8l5Sya39lShbE0PdvjrFHk1k9Tk9mkSBgPJa1P0d22K8zM95pSwHC570d9jtZKZ21bMr5S6RTuOozzYE1tu14XnBDKkSxJF/U8A04aNmrdC8UMUob9OHEYJ8YQiBlhmshU3379bN8SoVQTpRWd9W9Hv/WGfuJi73WPb3wWDUhUYPpsTBVMbnwp7vzX8aM/8iO8upP+HkfzbIG1D3NprL+28ovbD+aUub/b8XOf/BS7MaMMek5NZqMAzBHtW7ZlCwQDWZjk3nH7Ou969h1s+oHOOtIk/SsOe+17aEoRd74khK12SCkRopitdZI0CNxSc+aaSC7+syn4limvm7uw0gSpea3PswI7MpGKKRgrC7pW+KQ0m4fKSpBSqmGstYXRPqc6O0p5nrWSAI+1THG+fsUVcs6i3doFdiVQFbxq3Q1K6VcFkKjvtSb6ej+PMp5IU7Yy81Z5io8ztA+JCKbj4M7g2T9MTJZv+NYPkYYr9EQsy3zE1kxpr2MN9Bge7ebmnLl79x4//09/nsM4ksgLf6R+7sh+1n6kQuspRTbbgWeffZorV8+KDzlV6sQ5rJNpUb+cc42Bqkasnz1y+oqgthrBldbv5WSxjYDaxrxrJ+AseJdLoORvcge0BZ764vIhlvtg9uta/0yuozFn2zkpt2EOdxRzlhIKSpkZIBqnYuoW4SpfNkaK0oXHSIm3liCdbmvTuiWD1vN/3PH4IZHc/KL6J7/BJmd8eXuIOOf1Ph5+amLwmGLZXf8SzNmv5Yd/8Id47W7Gop2c8jKbBvV7qK9bgRX0VczytOoBstaYOSfuvP46r732GiEG0ZTeYTvJRNFuw8aYxWWp2do2iQUJVmcmrl8/5ZnnbjIMkPJMeyh8OK1vJ9ptXtHnCdgmomOO+IRH4P3ZF1NrogkVNJ9b+5Ci4OdyMPKsfVISHtSMMJ/H0lHaUtpP2OV5rPd9zM8ny71XS0TT/Gwpjo7JkrMTvtjsybkn556YHCE5xpCZosQ6Y5ZML2l7aKRQO0vB9jSFCibVta36sGluo2FdiQWXeYx2gn40AX0yhvSVj/eG0YyHCNWDv3t58tftmOAb1ZgZCFLg+vTvB+P5xg98J871xCDEuqph5FJKZkjzwBdxzLqCyqSPKcwTxSDhlAYM8CWEMQxDQV89znf4XhgOnO9EQItv5jpPP/RsNpvSdXnWCjEG+t5x66mr3Lp9TjeYmtidUqoF15IQMLchyDnNQhnn1nVV+6jxv/DpL5uEy4XJ1PBFKrB/K9j6+ZxzjUVWYKTJu1WgKOc5DppjKI2BTVm4LiPiuTm3NlGi3i80BprnwgIDKZvC9eOAjpQ6ch5kYyAkR8yOEDNTSBJGKRpV6zNjyoSYGEOUn5P4kKk0W4oZQsryewmf6Xu5IeQ60gLl6Pjl6SXyME36uRymWSmufRHu7Nfxwz/6o3z6blkJm4C2IoM05skamWxPUd5fGLrNJYq5c+XKOSenp+IbOid9T0q8cbPZsNlsaot17V2o7fTWk9EYuHnrBu9+zzu5dv2cYegqighzyVSr8XQs2byXSKL6hTraReiYSWbtnExQr9yspk5egRvqZx3xr2w1W2cNaq1ZtABss4VmP3z+fLsQtlqdCuLpQiH2XMoGYz25CE7C4PxAih05b4jJEyNEKWclYzDWsT+MNQGhPZ/2HGMzr9ohjZ5mUud1mOpB4y0XyjfSoqJJj5i29WWDzLYr5iMeNfsN9pmvIsTEB77tf8LYkiaWLXPOLRowQU7nWMhgOeGrv1B+zzlLW7cYOT8/5/TkpPpdFe0tmkYFceh6+q7UA6IJGRROnYQlcbIdeOdzz/DM00+x2fR0g6U/G9inkZDErMJKE1qscKmGIETSFxd7xjEstFnVavkyWnoM1ZROYfP35H0t+Vre8cxyn8ZmYpwEeTa5JH3LtgjEN0KWsnKxzv7vurlQG1ts/U1nhHjaYOasoWzI2ZKSUKFYJwUKyv9k3QB0WNND7otpa4sGLMRehX5U1raOlF3RvJlpCihLnoZftK+J9jaJCdGaGcbwaEL5xGx27cN41M+ux4NR1jewvx9qmjfaxlrGG+/DPfUH+fEf/9t8/Cu+gnc9O2DZUOIHzbdK6VPpdWEKO4DR/gnM5lPMSTJeCqAxd6mKbLdbrt+4xic+/ZIQSZd1L4NoAqgphkISlgu7Wyz0khHrMt4kzk+33Lh2wulZh7ETZhO59b49Fzawe6EXmD9looVkO4iJe/d37PYijC4ZcAbjXTUeoJRxMdN4rE3XuToDSEGa+ZSMHmOYeYaSpOp1TgTYdVq1EaXvCOrDZqyJZBsLbVCsfnqVHxIpSrYRQJwmrJeCaed60H4tKuTGYrKgwNY5bFbLB6hBO0tMFutE4DbbrVgFwRDpMQjBWTYG123JxpBNJCRDNl7ypzvhaDKuI+aIzZb9oamTLG5GCDBO6uLMmnOcDhwOUhmz241vNHHreIJ6SpZQ+KMMtVXa7c2M4jy/kXQaDNk4oj8hPPcHSO5Z/se/+gH86Q063yE9DJs9mNnXetjZLU1FEcqUA8aIiXf12jkxBA77w9wqr9AwhmkiTcJJapCfMRykR2TZhzOR023H00/d4MrVE7zPGBvILnDylMNf6wgFac7Oka3Fdp6UDbvdgRCEDHqapFOUxviqFuN4MH+dMidGgoJes7BW4Kcxb9Uf0YoJaedO0YyZlCeJR5YyKPV924dawaqqITNzbLcgti3qKy8qwDMj6SW2WV9ZEo6Ekxb3OCIijClnQs7EbAjJkrInREfKHYmObHqs35JNT6YjJE/ItvqfY0iMUyHySjCFzGESdj1J84NsHOMkGUaPMn55fMpf7lFAHzBC2X9yG975x3nxxVf4wAf/Fv1gyG6S1TQ//EYdC4FcSmgvCFwIgfOzM5RkahoPTOOBMI1M09j0tpyIYRLKDtW0KeCsoe86rl27yrVr19gMm0LWZYkE2AbyxhJcT7YDznV0XU/nO0KQ2KWaUXrumSVKuhCscsNUGHVyi1BKjqmaiQrwzAI0gz4aVJ/DELkKsp6H967GUtsMmdY/01u6TkIvR63vtX6vfqn6rbn+txiawVPR25xLOp4ITIqGlDpi8KTUQd6QYg95Q04DOQ3lvY4QDCEYoTe1PdCB6QjRME2ZaYJphBgNKYnG7vqTh841+NUqlCgwmrEmYU0m3vx12PMv48Pf/wPcGzt654W3NKWyDi/HG6GSxz6TcmaaIjFmNtsN51dOcTaR4oEw7UlxxOQJkydghDxhTaLrLMPg2QyezdBxfrbl7OyU27dvc+3qNTwOh8PQkcyBKd4n5AMhCeucJFZ3OCPmkeSllwaB1SqZ/bcWGJqvY46paZnRnNMq9ZZCoSnayllLToGSS4ABIRorfp0K3jpVTZMOQphqqKUyI8SZG6d+JwsbhGkSIzTOactPRXFR07WYP+o3gvABxZQllAFgxG/cjxNTSEwFeZ2izIUpR0FcM4wloX2KmZANCYvvN+A6sJ5sPdb3uG7AuA4/bBlOTunKT+t7QjZgPf32/4JCWUHdxrJN5RKD3xC+4N8ns+VP/bd/jm5zRiQTSIRS1gTHUclWq7QTB5ZglLWOMMln3/ved3Hr5lU6D9ZErI0YislKABNxLrEZLKcnHdeunXD79lWuXjvjmWef5umnn+bWzVv0XaHqz45sJ6wDk0NZbAwki8mOGDP7/QjGCUjBTGRlzbI5zyUKDJaUj6LVfKPtIr5zJUwlbHcpRawxDH0HZLwTYbTG4IyUebUcQaoZu8JQtw6qp7w8L6lLzXgr5VXO2FKpkktsIRdQrIhe8fNNQdQTBUUtwI6GNWJSNBYu9hOHKTBOiTFmDjEyxolI4mLcsxtHDlMg5MyUhLc2W4v1Hb4bsK7H2A7rerp+i3U92+0Z2+051vX1795vcH7AmEfj6Hl8oOeNsJl2vEm38c2ORVqdKSbY6bO4G7+L55//W3z0k5/lPe/oF/FKnRDHAtawTEo+PmxpobfnmaffwXiY6Iee/X5f24/Lp4RHaLsZOD09ZbPZMPQD282GYdhwduUKN2/eZDMMdAhXasqGa1fOICcOhwOOHpM90sjGsN8fOOwnWLSEk1xVvY72ZxVQY7BubuDTCkUrqPo30UziQ2qs1BSNlnJGGiQhXbZdU5dajqccOvp+i/ra0myoTeReVHKkFcNB89zac8+Neb22dtaVOSElcpR8ZDNFyBOYzDgGcjJY64XxPU9MIdCVdg3e+KKNLSlbUnaC1BqD63oye1K2hAj9sBWfNj+aDnxCNrsmwLz4tYFGc3ltlm//cg89P2sM2ADv+Vfg3k/xtX/+a/gzf/r/A+M96djVnOOxuF8VqDaR3WjoRoIqU0zsDyMpJvqu4+mn38HJ2SmH/YH79+/NAoFw6pycbjk/P+dksymUItJKYHtyyjD0WAObzUDXd0wc6E56cghMFwdM7haAjSZESEZMAhNLHNBU8KT2mYwiWPNCNLdx6/uBcTyw2Wwq8KOMbtZKGwDNy10nGpBnQQ2FYUAZ3LrOM45ToYYsbfOMWS6KhbDLGEFZhQsIQlgKqlirqfLqYCSH1tgOLZTIRFIyBc1dMhGu46ACYEHIigDLc5VEB1vZ7ObwTMIq162zJUFBlsMpZ6yTRALveozN+G4jvEDH+kgeGY/dybnG5vT/S5pzEW5faqzHPdib+WKLrGZTjFhP6C08+352n/jz/M2//QO8//f+i8QUi99/PIl4DUbMginCmLIpWSGOwyQpYzEENkNP118jTBPTlbM68Td9x3Y7cHq2ZdgMQpVoDTGEUokBxk5Y5+g3W4KJ7NwF57cDHDak125JGzgXC/JLKViOkKyEIEh0XsIGGanMUCoO6dhsF3m2Ocn7XSfIdEvF2fe9cAhpa7gSLopB/UC54UJFmcpCLEnew9AxjlOpixSBcSaTo6Cx0zSVCT6hrnDOkpUTUwRjyQQwQt5liv8bDlM5r4DvOvZEkolMacSV9hVakSNrSBYBbrSosbJA5qQkz4Zc+mTGmCVdM4yzG2AbbtssMUiRs0TMWnJnCCmD8UIGZgLZOLn3PBodyGNqStO8yuu35lHib48GAD/oSG9GvTZLR169b4DbvwHz/Hv5u3/ne/mXv+r/js2vkaID/EIIdaw15iVNmiUTZAyJKUoMzqDgiIXssHTkJFk75+enXLt2zunpCZvNgHUCfty7d0/q8mzxr0qsMOSJs1uO4Tzw2i9O7O8ETrPGRxOJRIgjWvJkjMM6EYgaXEcqMUSIBCFteUi9PxFWcufZbDY45+j7vmpXYyw5JIy1hQBMtfBcY+i8q/dDh6TETU32jraXE99vmiY81HpEa12Jo/pGywVyLr1a0HCIMATGMNEZV38XzZmqBp2TtZeaspr3xhKIxeqw1erJOS4W4lbTrpFhuQctIi3VNZrnXE76kUOBT877uvh9FgMNMLN4N6udN29v5ch5XjTaUXxL/ID5wv+QKTi++qu/me1wHdOsYseQVn2/TUnTDCNTck8P40HKgAwYZxtzePahXMn0kTS7uSqkpvnlXFuAAyVpes/12xHXHfjMLyRyhBgnxoOwsF/cv8/u4gI1D6wx9H0n+bcNQ4Iy71WKkSMcqs45NpsNQP3dWiE+1tBKuRsNSbNw5ixT6ZaFw60V0rIJzJPalNzduVxLF5mU5koYTbrXOa6hG8hM04hzGu5ZzlMlBhOe2zjv86icNOGW1TiWUncM/Gvzhtt58yjjTTCkz4apmi+1xCk3N+O4eLwlQ2NoRh3Z5sDSk7Jo8GxIV57BXP9tfOxnvo+Pf2bP01csPk2MxmPz8ZrOS5kvWXwKnGUME/txJOZMLj6XdsjSOJ6eUIyJcZzoeyFZMhYOh5EwSdmPcQaT5GpCCDAeSFju7Dpe/aVMnmAfd8QwMU07DuOO/eFALm38rDfCrqC9Mq30ztQMuc73JS0s0/c9QE1u77oO33mhMylcrNqCTvlzpT41oXQgxnQFFc240rx2s9mwO+yr0Ou+AZx32GlCtCZAwntbumbLllMoPyOGTC6EX8LTKk2ADAlrhHvIkGrMVzh4gILIYkp8NU/k7KFoYGtM6Sl7PGnkWEhsHZ9uwar284tk/vIcH7WM67E5eowRZvkKf1tTfi9b+eC8oD6aSGooo26Pc2Krc5y1d5YHR5I22mSsyZUlIL/n/dA9y1/6i3+FfnPCNtwrfpee+oPPQrUkRnhld+OBQ5jEizGa6JXJMcnEhrpo7fcH7rx+lzt3ZLu4v2O/OxBjhjzXRE7TyP7eHe6/9Dovf+zAx/6h59UXJu7fucudu69z/+Ie9+/f4+7du4QUcZ1jsx04PTulHzphDu8GSYDvmwT4QRLiW46hGWnNpJhx1kM2SA9LKU9y1hHGCVKqvTKdFZItb2012dVE1RikFm5vNhuE5dxgnXZKkyoRbw3KOmAQYbQWco4F9JG4aIqBOXs1Say0CC8pis+ZUyX/0v6i5ImcJgzSIlAaAMsxpULl+DNWloJjyQywJAK7lFDSzstHFEh4EoZ0Q9NFvpx86SWXZU7V1nJSgVHM1cc4qTc7NIhcgSnTalE18SCd3MC+81/lpU9+DX/jf/nf+Nd/x6/Bx5FMv7TQdR+Nr6mrYMqZmJM0+QmBTDcvKpnF59txGA+kO4G+79luN7WkyVoLVh784TAyHQ7kceIXfvgOMR2AhLH7snNh6o5R+iJutxuuXrkivDwldigt8iwpjlg7125aMwuOJg0452paoPqTes1KsqXhCf18ZUqwSrPiSmLDMqwyTVNTclWQaxJdL1rZOo+J5RmJpOGKWZ9zwntheN/vd7VlhJqpar6qwMQYCmClZqw+yPm1Jhzo9UzTdCTTaVncrOONTFf9u97T9nNtC4M3Go+HvhrJwLfk2lYcNFVYL9QIZ06aA/LlTNc7e+jxjkNFx02NB5wxikJX47FYtcZYMhCf+nLsqz/C3/jrf4Pf+Zv/CzZ+RzZi3pjcnEPZ0fohxBiJQTtqJbAK6RtsdrhSxa4dlevJ2CU03+43aU+REMgHmKaAn8BYaTlAMREltOLoO/EVz05POdluMdaQU8Q7V1jdHXFMOD8fQ0vFWorHdqwTJkSouoV/2PrDfb9hipGuk0R5mFv71QWsCGgoqG0lCGNpBq5jpWr+eucvnWtlQ2gWzBijILPleLFw3JYHWbRGKsokAXM3MaUiaW21Nb/OsdK2uvfGR26pQdbsE280Hst8teX0LYLemcJBU8pTQQ2LLL6klh7mI9uTgz0P+17Rj6XqXA0d8ToM0TiBqI1DsmQM6dk/CP4qX/dt382wvQ4mlJyYkiWy3DOV2KlkmAjYZ0iT+DfWZDpT2AR8T287nPE46/HW44xflIotAImUSFMgTYE4TcR4kEBCIYI2JuFtZjM4zs9OuH71nJvXr3HrxnXOTrZiGhZLwFDMuRgXAqmLQduYpk1IhxkN1f6emt2j2u7k5GThN4mAzhlBmrwO8wIwT9awKNBuCcMU+W1BEv0sJrHZ9iVkhBQBFMTVOrleazM5BXKaIAesyZV4Wvi5At5K1YolSLqgVSRbiwpEWCVmmqQVRY6kNBHjhLZvaM+xXaiVKU+KAeYMqbeknlInpW3fgDrxlckrZkoDHqVC+uUZx7WnqVtuNqGcLObU1ffinvnD/PRPfJT//SM/i/GwZFVr960aLlYTOScxFVNKwvuSpIekWhPOWun1YWpkEy0dM4WpLUZpOhvDgTjuSeGAyRHjJD/WdxbfGTabjrOzLVfPT7lyfsrZ2ZbT0y3bbU/Xu3K+qYQP5BgxSZFt5ZXBVC6Zlv91zfeqWkhbCarWWo+5mQ01yWCapkrlqdpyLgpOl4q6FQias34uI5jQZlXN56gJBUDRmC1TX3lqFbBJBeGNLNnzij9rFO2NzT3UMr/CqtdMtAchtHr8nHO9f2+EUbTjCdDX9oxmzRfLZI0FuXzLoh5rFFvt0uVpHTvby6M6+Jb81O/AfuZ/4Tu+47v453/Tf46ZXj2qk3PO0ohHH3JZ6a9cucLdiz2v3rvHNO6xncXisNi6kqWoJn3CEtDMXIefJ4CFbhAmNuVutcUfcd7Se0vfzzSU0vZP+kpWX62AMjKJlgkPonGWFSFAZSlQrdWaYXOa3JwT24ZDvPeFoNiKf4tMTE0t1Ma9IqjDwmRtBbPrOg6HQxXkth2dnoeCYCrk+lnVpmryKkAjvLfLRUatgq7rFoTUc2gqNJk+ltaamDGCJRrf/u1yqCc9spaExxRKDW+kGnQoWgMJD8xdlKDx4j53ow1xrPadVTDb1cBcDseYGrIoHy+CmU5O6d/773H3Z/+/fMM3/3X+4z/+L3EIB6nqb0zMXFYF0SABrHTEOj/b8vTTt+BleP3O65AOWGexxhdtKoRRBoQ4ykrHp77v2G6liBfENfClf4dOyHZy9p3wyFK0dYhBkEdMMR/nEIwxItQ5CYN4PwzEONb8UgVrgDk9riYLLFPgtNGPhlE09Uy/d//+BcOwIZe0vpQS9+/fr59VsGe73S78Wt13S0PS/mwXldY31Z9t3FhHC9iIcMzgy9ofbAGY1hJYg3r6esmiHi/tq00sUWHVBeIt0ZQ5S+a9EQREBLIIZSyTVY7bemGfW8FUQ3StA1e++XzCiw+Z+f2FYEq2ZLj1xbjX/wj/6Me+m5/5rf833v3MKckIfD4HNJa7NymXqvzMlbMt1t3idNszHaZSwaHnJ/63tw7XOYZtz3DSS46rm/fsEGoLa8yMYJcTtcbSeTGDc4H+Q3BSrxklC8h6L75MzhjnZCEtea4hSjEuyCKhhFsgfpBOSK07VM05jmNNKACqlhyGofDPyEKQYqRzjqkI7P3dRUFBY9W2ouVEcPpekvW996UO9HJcsPVLW83eCkLrG+t3VHCVo0ivr11MWp+2JncURFmFqNXYsm+hnBRalOnSOc0CO2vQaZoWaYsPG4+pKeeiYF19SsVdA4foZ38lDYGpsvOY534n6ZXv5es/8O38F//l/wuz+zTgH2wG5yI2JuO95fz8lM2mJ06SeVNYmGTyWC1p8vjB0W08c1v02Xed+dElu0eQbFlHvJG8UAXWvDf0HqZJ8i9DKGhgntMFdaKo9vDOc5j2NQTSxtp0tW+14NzmjsUk1DGbgnE2H8sxVcD3+30jOMteG605qxNXTctWM7YayHvPOI5479ntdkd93SoEzenq9bbJAC2Zmo6W6rO9N4LSLsm7jv3U+732jR9lPLlQlt9LXfvqc0843uiLj3Y9TzQM0McCwWxuYG//Hl5+/jv56E99nN/wBSeC4tZzy0XRLqAfCZnEiHWOoe+xvcFmW53uCpIpNG4SFJPWKVRuMi4vzWVMXmhSkd+STG2tZB+ZDmczMTv2dfWeb+c6BSyWOGI7EdsSKZ30KlCaidP3PYfDWCesTvAYoyQbMPcZQakwS+pga9pJpUrEFUFSTdT6d63p2gpQu49WK62vofUZne0W+2g1lmrD9QK2Bpjaz2uqniwmxydtK6DtwvIo47HQ14Qp2SoFlzRzkOBzPcwDtjc72lDhfCxDdJboLNk6eOfvw51/MR/8wLdysr0thcZHY0xSiSCrZ8kYSgmfMx4hv/I2S0s+l7BOSqoyk6SRxYDyGpqccMWqria6mmPFnJVMpFlg1W/EOLASxN9ueoahY+g6nF02KlXfRjNU1NfLOddSrWEY6qRU7aNo6KJYuevAGmznOYRJfElraslWOBxwBmKYpKV8mOi9Z39xUfpfxpJxMwuLXJMgo85JpUff+xqGaBHTGENN0YO8QDxbrVqfcRGOFoA6NlpUuGVGAJp9CgqroRRZjGRT4i89Jszo9FsSp4Qmztj8vhimTKy6maMbq1XjYcInbHPNd59QSsXUbDRPfV1irMaQh1O6p9/P66+9zgf++v+K7zcP8QdEM1kDzmi7GImfYSLLyoWIlhRJj8hYcj7bCUTxu2TT+kJ9prJSz6ZRC0gYI8nomnS+/owKY1uwrb7VZrOpAtfSgsgxZ0FVHlOa747TuACK2hrE2Z8SLeMas7ZFMSUFz1Vt1KKt62QGJdHSYH9eCXe1AhqrZi2ox7RnGxZqk+rb+yvCH0hJEHStAYXLiQdtHHfRE/UNxq8qOpBHGuZ4niPQJEE4zI1/juHm7+bDH/7feOl1ASHI+ikur06XxuXq93ZTIVy8N59IfZgtELE2iXTC6nvKV2PKojUMQ2Vdb9HDnOZVW9ncjTELjbhGE0ESCaqfWM69ats0f885R0yJfujxhXRa96/aWs1evWy5TlczcdbASKv9Wv+4TQVUTagaM8Yo/reZF7F1mKK1GtahDL0/69BN+ywUHFp/pv0s8NaZr+0svDSRfgWMR1esluR7/HN/iCn0/A9/8RvYnl7FTRkTBVGtvS8WQjqDNYo7H9/ETs0tCtxaEnq+jWACiwmlPphqJVtS70KYcNZAlmTtzdDjnKXzDmvAV2Bp9uWGYai/6zNt0/D0OJrl06a1qYClnGpZWD/0+F5il13vBTmu52kZxwNd5zkc9jhnmcZRWrcXHtlczp2cUdJs7+b+IJJMVRI2Ylo81xa91UVAviJmrnNzBlEbh9TzU4HW+9+WabWC13VSGqcJEu2zUhC0Padj/umDZ98TjF9Rwtja0pf+9GAxTSYTz2/h3/H7+cVf/DQ/8XOfwpoIAWzKqk9LYr6AMznlirbmIqRKTtFuuWgy6x3OOwllVODCLGofawL5ypRSjaSpXCFMpBQbEKIE8q2h947zs1M2Q89m6DnZbun7npPC5N76YiqMwzDUCanZPzpJFeTRsEHOmaEfqka0TkI+IQWst4xhBGPY7/f1kUAmhAlrIEwj3lnCNInZn7TUSvl+pGysc14AopJQIcKZKqVla8a3wjlTpDR9RpjrRdvRVoS08dDWnz6Gyq5zfNvv1Tn1AD92PX7Vm6+Gxtx4A9NVR0aA1GQz0Rrcu38vbvuFfO3X/GU4v4oz4k8py/niuyvzNOsO159b9QJRoXMlXLIuTJaE737x+RaE0J85J4ahbybDrPW895yfn3N2dsaVq1fYbDacnp5WLaGhDEVajTG1i7MKIVCrKTSuqOarnoNqp34YyOXc9vs9NL6h5tNq4vi8sMxt2fUcVLh0AZizi2TiHw6Heu/1/FrNtD7HnOYaUr3utjXCsfBQmwnU0oLozzbMMn9nDi0J5vAWa8r/M8Yb+mcPGo05eAwXar8vZqVZvM7GkPwJ3Rf9R8To+O/++29me34GSChC2ygdPS+0MiRjUrNl0bKtv7j2G1UwW79Pzcw2pqc/rbXVd9T3NKwhwE9f2QX0d51gw0Y03NnZWT2WakRNEpcyrmkhBO1xjBE+V31vmiY658mFHMtZh+98TXtTwQWqoKpgiLZvEw1m4q71s2sRVSjuRDHrW9NTrYrZvFwioQsAkqUFpQK2/r0FblJqq1syfe/pOo/3hpwDAnBlyG9BQvqvtPGoPuTS3xPxFcPUk/Hk03fhb3wFH/v4x/nkawGDw6VINBOpwuGFKl+RvAc4lDaX8AZSIDx0HoOgq1KJEJhb2c0atTXNYA5TqBCp5qh9PsjVnJTvyPl1neTEdr0Dk7hy5Yyud5ycbmoFhu8sMU1stj3OG5y3JbeVEooQgT49PZ3RUjMvLKSMSZYckPI16wqL3UwDoprncDgsgBhjHNb6wmDnOBwOi7xVNYH1XogGApK4D60F01abqEC2GksXuPZven5QmBpMwjqD7yS2rMh5jJMIXJZCbWeh7xybocM78Ba2Q48h4a348p1/i0IivyLGG/iRDxqt7DQ7ImNJzuGe/f1gNnzrt36QbnsVmyw2mZKC1/LKLPlY1qEeay2+aEL9vet8nagtTN8KWou0wgzKtKv+0i+VJrWqdXSCqjk1DB0K53sv/ud2O2AtnJxscM6w3Q4FMPE1F/fk5KTy+aQSoBfAijlUgvh6vf4tz/7ZbrdbUGMoolsBo8YsVW20Tp6vx6jXvsw91fujwrzQhIZL+1qHQC7v//JwTpgXQpDice8t3lucU2YFJNfZZLre0XWWs/O3gCH9VxC88zkZs38J4ep76W7+Dj7+cz/Hp165j89nnIQBl3UiLHMgjyVKt75iKyj6HRU0bUHXmnYtibBO4paPNedchcX7jq4wl282myKMXTUH1VdtzdQQporCqg/qvWe73dB1nvMr53S9mLnWGjabgVC/G/BOGARaoYCiNcvC0grC3bt363XDLNDqX7Z+5zr0o/6uLjKtT9uShbXC14ZN1B9vQz6tNbL+fBuC0XPWXprOze0N25pQWQwooFnPZjOUhIiHj8dPHvh8R17XqynHNCCXPvOg79S/GYv7wn8TNzzLn/lzf5Z05TrRHhA6SQD1EWftVPfXmKHq/+kDTClJp+XS7ZcM42GekG3dYzuhdMKoSdiCPs5Zhl4oTTS0YA30na8EVIf9nqHvyCkKZYiVLBtnDSkG+s7jrOX6tat457h18wYn2w1nZycYsnDVIkKgPrQKkKbRWWA8HDBZeHB739XJLI9qrtHUCS7VN1IgrAhva3LqQtJ13SIzRw0jpUapoZIiQAYjoRcrGr5NfXRWerLINQmS7p2TPGUr+/LOF9IwI9cQpaeKM5btsKHzns6V4vUccRZyjAydp++8cALZ5dx80Hg8oSwzdO0Yf94Mo5k+x01X1Xzr7Vg+n/QqlP2V8C+h2+Kf/YNcXOz4n3/oB9kPkWQo/KxyK52zVcuoRlz7MnKqc1A5JfHJUkyESTSiAipq3q0hd0UNdUK3PuY0TeSU6LwjpyTkVIUeZBpHOu+JYaqpeykEhDEulXhhYrvZlNim9AvpvK9xzs57tpsNJ5ttDfYv4oLGMI0T5Mx4OGAxxCmQUyJOoS4mqmVbbaToaZsLuwxv2AZgmU38vu9Qrp5UmAbCFHBWENcYgiT3RxFQFVSrHLje452n7zqssQz9UJoLzYJroH5fCtcdfdeJ8BpbCbgk+0/ve8AZU0M9jzJ+FfqUM9r6JnezGqI33dO/neHGl/Nd3/kdvD5dk7pII4H7dWbHIiFgZSatM0daGL+drO1YB7vVFG01ZiuYs6+5zGjR9zUpYJrEdN3v99WE1bDBMPR1jev7jr7vODs/rYkCMUZOTk7wznNyclK1WIxRirqT+NvTNInJaZeFxicnJ7XaQ03S1ifX8E8b2G/jf1o8rZbFmrWgdSPW2T+Lx10WBk0KaEGgFmhSbZ7zbOZfzoBKSJqgHEN6oaZjeuLoeGKhfGiW2UN3kN94ezO7bs7tkhn6Bie+/FzNvSmjiLrbsnn3+4kJvvVbv4thOK1s2EqxqaEQC7U2ss3SUWACWNT3gQAkKSaGYViko7UZKBpPUy2hgqQm3Xwc1TKmZuS0QqCmo7W2+kSthp9DNGIuyzlNnJ2dkIlstwOkyPnpCd4ZOmcK0rhkclssOM6VmlGLzeCNJZek/NjQjrSZRBoTbTNt1sLVmvNtqETJmSuQRutnLp+/MaaGbKyV83MY6eqd5VkSE95I27+h66sJK8993shCYWmy0IyGaaJ7RDa7x06zu2SymsvW36Pv7fi/xxmXTeg2me1SctuDz6X5aNu3njyzF9S9nP8zdDd+Cz/1T36S1+5kMKmYdwGbEjZGTAiYFLE5YbNwmW43PVb4rxYTpS2o7Ytm8tYuBLv3Htf4YFrRoQCPCqiCHHKMgHDOBIaug5TonCNOU/3pjGEKYyWgMlZKxXLh9glx5OR0Ayax2fSyr6HDmMTVK2dses+m94Rxh3cZ8oQzGZKcn5ikoWoT5xyU2G2OCW8tKQRIkTRNNYbbpv7BHD/VRaRNEm9jkKoZFQmV8JJUlNiS3I9JJcQhfVtqy4PyM8RRiLdaLtkUMSkhjQYTQ+eETzbKc07ThMmJFEZ84bI1OZOC7MfmjM1vgfl6PFjfhB90BXrA9hhHeugnLvm0+voJlOwlbbj6a6tBJwx7HN37/l3s9ov503/+a0jdrXI+SA/FJA8rhpEYS3vzAsWrWdmaseM41pQ59W/WplfOmb5oTy2zWpNPtVw4reCGgmy26XqaTCBZPH6hlTQr6OTkpPK1hjDR9Q7rhEWu6z0hSP8S5yRoHsLIMHQ4Zzg9PWnAqbhAMEOIC9+QPGfqODuHQfQ85SNzbHGdvqZ/1894PyOrqvEVXFMyaC2/0vitcwZtxg6FqR15lt5QF1hvDd4Yus7Ni14OwqxnUikzExYGfeYaMntLMnpyUcuPq80ed8hhHv8YdXq+RacnWT6QcyD2Zwxf8Md56eXX+aa/+p04O4DtKnBUblXhLcqXzNBaHLwu6THzgqMpb7X6nzmNTbWQFvKqWduWT+lE9cUcm6aJw+FwiVWg73p2u91CoNvc1nVSdowR7+YMHY0patqcLhTq68GMmspCM4d6WpLmxb1eKYCWWaD1rVVIFU2dQRsBYdrXfdczdL0AN0YQ4s57hq4X07JBZHOeuY7acIia+uuwy5qxbp3n2mYtPWw8UT2l/Pw/LzRyTOu+dTjwUtfLK4m/cf1L2Tz9B/jhH/pBPvqJ58mMJAOBTPaW7CDbLKzx1kg3qabBjLgDVMEUJHWe+Joxoyv+NE1zbmljsmqMTyeFc65q3/1+z9Bw4ehPFagYI867RiOGxc+21KrNe5UqjznlTheJmuZm52LoNu0NgAKS6MRuY7Hidy75eFrQRt+vaXklQd1by6br8cYy7Q94Y/HG4Y1j0/U4LL3zeOvwxQe02dBZx2G3k0yrTN1yFN9eF5ZqrZRFp1382tzdNaDWCulboinRk3usL31uh1n9r0Kiq9pbd1TdLAmPtM3z9E9/BWTHX/3Ad4DbEHNmVyrxjRPNar0lk0vmjgimEBI7pmlksxnqBG59Q20f0D5gfbgaXFfEUieICndb+xhLelpLoFxNy5wWXDjrQmclt+q6jouLi8bslKybvu8Zx5HtdlsELLPb7SrLu5iteTFZgYUJDzPghZGwkj5L1a4tqrrg1DES1vDWQcxFqAwmgTeG3nk6K+ASUXrKOAyd9YgbmYUINIPNeW5jmQScmU1iX5MCuk5ilmpxaLxUwbS2UBrmxfJRhfLx2hbc+yRZWh89mWbKy18e3I9r5ds98GDzHzIUv/KNLnxuY/Cw/elO86W/lUmUC5SU7+M2z/Dyyy/w4t0tZ/m+aDxm08o5Kc9qzTRdbdVcNGaufogxVbPw5ORkgTy2q3NrEu/3e05PT7m4uODKlStVgNbCADNh8n6/r0Hx8/Nz7t27x8nJSTVHp2ni7Oys9s1Us/ni4gJYJizMGUbqD7Y1iYHe9PV+aDyyNUGr6ZflOaqloLSUmiPbZjC1T2aOPcLQCyoaplxNWk0icLZnTFK/qai4QVDvXMCn2MRO2wqeWk2TEzHF+uzaGKs+I11c50T7y37wg8ZjCaV9/pvg+cf5xnJ8rvXYL5fGftTwz3d/6Hv4t/7ob2ezGdjtdvTD5ap/fVi6ymrSeKuRcgoLk63vey4uLhZCOE0Tm82mClCr/VTDtSGUvhe/cbPZVIE+HA6lZd2Oq9urFfW8d+8eZ2dn3Llzp1JLtsTFbVimBVN0n8DCf9JQjWrfdpForQJjDFMI9JthwT/bfk7NXA0Z6flYt6SVbH1bPZ4KNFDNe/0+UFnddYHRFgr6nKp1EQrhWXPf9RzbMi5dTNtreJRh8ud93tzb4+3xf63xqzCj5+3x9viVPd4WyrfH2+PzbLwtlG+Pt8fn2XhbKN8eb4/Ps/G2UL493h6fZ+NtoXx7vD0+z8bbQvn2eHt8no23hfLt8fb4PBtvC+Xb4+3xeTb+/7un7uXS7bBiAAAAAElFTkSuQmCC\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"sav_dataset.visualize_annotation(\\n\",\n    \"    frames, manual_annot, auto_annot,\\n\",\n    \"    annotated_frame_id=0,\\n\",\n    \"    show_auto=False,\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Show the SA-V annotations in frame 0 - auto only\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/png\": \"iVBORw0KGgoAAAANSUhEUgAAAOUAAAGFCAYAAAACSjT4AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9ybNl2XXmif12d5rbvNabCI/w6CPQkSBBEiRTZFYyqyqrG8jKZJKlmcaa6m/RTAOZaS6rNJlMplJmZV/JTLKSfQIEQCIAROPhvb/+NqfZzdJg73PfCwAknVKYiYPYgRfheO5+37377LX2Wt/61reUiAhfri/Xl+vvzNL//34DX64v15fr8+tLo/xyfbn+jq0vjfLL9eX6O7a+NMov15fr79j60ii/XF+uv2PrS6P8cn25/o6tL43yy/Xl+ju2vjTKL9eX6+/Ysi/7B3/pF79GSom9vT201mw2G0IIaGvQleaV+/ewbcvzp+dYGojQrS9449V9NIG9vQM+fvCY1WrL/qwmDhvOLra81Wr+6/dfZZnW7B8f8GGn+eHJlsvNiq7reO/997har3FVxZ07d1DKgHUkpdFKkXzEaYOI4Lstw2rN0G3wwSNJSCkxjANBEiFGkhK0MSxmNds0ctGtaCNczgOz+/doHiY2ITAc17SHe6TTK6rakiRy6/AWn/zogmQP+Ae/+g2GH33C//Af/2e2Q49C8/d/+3eYLfZpjw4Zgqd2DqUUEhNXZxf84e//HqvVCbPK8stf/RqtM6xXK2KIaBQKyn8FEYEkqJQgBfww0vkBGkN1MOOi39BUDVdXl7jFjMY11EFzq1kwW3v2pCJuel79tff49JMfUo2Gb73zBt3gOV17nvstp9sVXz96HbnyPCHx6dNzgmuw0rByhwz3/hs+PbvgjbeecLw8RSdPUCv8rOfunVt0jy7ZPDtFdxEnljgmUoLLq0usUewfHzCaRNIJoxRNbNmcbVlfrPH9SEJoFhV7h8cEWeN7xbff//tcyac89s9Id5e8bm5x+qNnXF1t0YBSirfefpuPP3vI05MTumGgto7jxYLDgz0+++wzbmnFf9FGvr24jfERZATCz5zpkBIBIYkgohjE8OF2w3NvWN054s/OzxmCcHR0xJ07d6jrGhHh8mLDpx8/wftIjBEkopWgteLo6ID9wz0O9vd48vQprm5p2gU//OGHeO/58ZNPvjijNMagtabv+92vjTFoY1BKce/Ve9x+7R5nZ39IXc2w2oEOJAWLdkZMkfmsYb1ZI3hS8qBGsC2xauiHEUZY7B1yvz3gTVeBUrz95lsc7R9w9uKEkxcnbPqB837Dqu9p2xanDX1IPH/2jNV6zRhGvB8xJhsqQEwR4xztfEbvR/q+4yoMzA+WmNmS0EXM6BB/zDpeoK3Fb0asG1jomtCPaA1PHzxmUdWoeE5/+pBq6XDOwAAiEGNE/TV7KAgxBIYUePLkCXuzBhFBoyAlYojlgAgoCD6i0EhSpAQxWIwXSAmFI3iN3xowBh0ECSOXwyV+E9Gp4v264hdDxy/sH2C2Pfdl5MF6w/rpFWYMLKPn8uwzhi4irsFYQ3zlmIsXHX13i7MHFe292zz4cMu2ecJSP6etDGnhefboIVUMaB+x1mDrCgUkEZxrmLc1zcEcaxUacFFx8fCC86tztn6gmlXcuX2HEHoSoFVLUy/R5oBh+JioFSI1Slq8F4w2BD9S1zUxJrTKQd5sNiOOnvl8wTAMaK2B/y9IaiLl7yliivnCMRqdhBACItnBAzirOWxroktIShhJVFYRvIeuY1DC+TgybLaEIIjobLwvuV7aKJsmHyCl1O6/WmvQiiSRvusIKTKkgDUK7Qx6VpNCT10tSSkxn9W8/tot5rXBcgRKc2+xYLm/RFYLglIEZdGMrNZX9IPn+fMXdNst/bYnpUQUULOWR8+esVgsWM7mEBOVq+i6gQCMQVEbR0wBEei6HlspTKPx0RCSRazm7uv3GVeXdKcndIeJ+//V63z84SnRarpmzu3332UvaEIamc9nxBipxLI8TTQfdZhQc+f4iPPVClCcX16yODgC9fNMU6FQWOswSlBa48sNiYIUEuM4MniPKof8oluD0RhnqWc1wSd81xGUoBctqbbMjo5Rs5qmbXGi8tc2otdwNGx57/Iz2rFCjZHhk4ektUdWiVmEWoSYepQYVBipasfZKvDi7G0uVl/n//B/+i+Zv7Xg//x//CPOP9Wo/cfsvxmxtUJVFqMdolui01A7DAktiWoemO3voxuLNRp/seXysxPOX5zRhRG177j91l329vY4ffgU5Q1+MNT6kCCHeK0YYgDvsHYfiRrQIIqjoyOGYSClhAKkOLF2NuPq8gxtDMSAFoXKvu2vMVHZ/X1BoZTCGoPWgjIOpTRKpZ0xTv+treatZJAoRFEorXDW0YfA1aZjNQxszy8ZY8TrDdyxjMPI8e1bX6xRjkOfP8bkyaejphTOGMQHfuVbv8Knj15wcrpCGYOpa1znmdUNSsHeYk4iQhoh5UN41W35cdfDdktKAW8No9J4AZ8iISZOr64YgkfKoW6SYKsaZQy37tzhxdPnGOfQ1oAPWKUxqBzqKlB1S9/3rM4u8DGgtUa3LZehR47m7L1zQP8PLI8+0Oi/9z5iFNZoPpPALDmczDBBcMFwrGbMHwrj057LR6d88xe+zg8/+RRRhjFEvCSEtDNEyt2ptcJYg4jKN4N1KKsxaDQgCVAGIWCqiqqdMZNEMonZomW5vwQLqoZq4WgXC5pqRhgTQwiQFHQBlzTBbziNG7ZhIF6NhADihGQdQwWD6ZGkQISk8g0elOASzIYa1l+hC+9iXtXMWo2sNHFV088DMlfY/QqpQJQlKhCjwCkQBUmRRvAGlDYM52uuHrzg5NEJ3geOXrvFa6/ewUki+Z651igvSAJtsj8bx5E+DNR+QNeemATQDOPAdruhnc1RCBro/ZiNSwsJAQ0mCrXWkCIi6WeMUhWnKShEyiVZvt9YByrgBcYhgNLMmhnOuPxUBerk2I8NEjxRtohKGCtEBIugUkQlqJRCUMRxwEdPPau/WKNM8Wdj8vzJFAg8ffSU7/zpd/Bdx+binMViybhdMfQdyQe0UTx++JjNdo3W+dO5pub+669xte053WwYui2z/SWiNTHlUAilmR0e0gAxZoeg0OwfHaGV5pV7r7G6WmOsRVtDY20JNxLGGYL3NG3N4AeM0YxjwFUNd4+OkTFytrmku4xs/m3k7N//GCUJkwI6BZDEhbJYs0BHRZsMydRsLxVvqjv4C8+yrTFaEVCIKCIJUYLKZ74cgBxVWGuzo9CAMYSUqCvLvJ2jVTbawXt07ajaBkFIJDbdGklC6DxpM7J9ccXz8SmULHS9XmPEMNcVBBiHETcKYX8PnWYwVji9xqBxKVKlQEyWASkBm6AQUEIcA5X1NLLgf/q/PkMNz9g8fc7SPgObQFcoTH5nOqF0jgFSSBij0dYQYoSoOH1yysWPH6IuR3wYOXj/Ve69d5/Dn5wyu+joHMz6xOr8Ku+Tq2jtyLDaYmtL2F7RqzNS9liE4Lm6umS+mGcvJokxjFRVhWghkkgqb2+tNKRESvlzfT56KUa5M87yXREqIIpiUJoUhVu3jzk6PMp/SOe83wSF8m8i8RR0h0FQIWbcQgtawCiFAJXW1M5hrKZdzr5Yo1Q/NyTL349asdlu+Nf/739KiIIkwfVbCCProafrtjn0czUn61OOjo/px5HOJ/7o+39BEkUMgTAGzOYMLQpIKK1x1mKMIcVAihFjDNY6Usq/vri8pG4ahr7nxckJi8WC2WyG9x5rDSKJpm24vLokBE/btlhrOH36FF0ZaqdJg8d9bLDWsr+3T1s1OOM4PT1j6HsgkAQSI2u2eKt59Y099rqElpEWSxcVxLQLg6YQ/+Y+GWN3qUsSYbteU++5nL9oTTub8eLsjO3pwHboGYeRGGPJLSFFqHTNcr7EVi2iApiIGjTOVijTopVB0RNDlw1OaZIolG/YNA0vUmAjCk/CS0LlABoAbTS2CRzd+yG33CucfO9X2K4uuTv/hOB+gqnAaocuB05Nx1nlzycpISJUojn5+BGr5+f4bY92hld+8R32P7iDGQOzJ+ccd4rOQR8jbIVtilBbatmQNpG2aukj2IJZpJLbee93zk6S5PxSa5TWjONYjKsAZkLJz2VKF//apRPUGDBCtAbvAyklQggZoyhgnBIF/lVgDYAkhUgOc3NYnfdUFFQu75dSUFVf8E1ZN820/z+zEqCNoTYWrTWhG3Ahb551jvl8zmazQWuDiMboCmfAEHHK4ZWAc0AEH6fLF5RCYvFC3peDnnAm0LYt3kdWqw17+/tcpIQxhhASWlsqpwkxEELAWktVVWy3W5xzebNJLOqa2jX41SXOCzNjcDHg9jXL20ecPb3i29/6TX71134VsZqRxHp9he4vGD78DrdG4QfdmkoigyiGfiD5iARBlfM6hfta53wl5zH58/kQCN4zKs3VelXy4o6zyyu6cSBfXgoluuy9IQFGO5yxOZxSBi0BCTksNtaCMqA1MWXEWXTDT5Liz0+v+DPv2WhFrQPLqFnsqmIJrRVVE+n9Y46Pf5dbr16y3a55/Mkfsh6fokxEmQVTsjadBUVx2iKMfc/p6SnrB+fUQ6LZbzj66pu4d27T6YG9dcSrRDSGoCHFHA8oEoqItSO3Do+5MFsUCZIi+ogPAURT122JzjSCzsZnoKkdtTYECWgBi+STOT2I6/vwc89FyvcztiZYpdBG0/mAsQbnHNbmVxOJ2akmQekNsM3OWhSSICQhpd3by7e2VozjWBzv3+AVynppo5Qbr2dU3gwRyaiSgjB6Ah5N9jijD2gSygjdeo1zln7MnsePIzEG0r5j8ctf4eEffR/ON2hjUSi0aLQoxsFjlUaMIqoKKXlESFA1C64uL+n6kcV8QTObE1GYCEPvOTg44Pz8jBASV1drYpxcpSJGwRhDHBKqMkQvjMljlguCEZIM3NmvMZXwztfe4df+4f8KbxWqdmzWa/bOz/mL3/sDbl1ekIYapxLJCCEGCIIKgk4KiSHnOZIwVuEqDSSiJIyziM63S1vVXLLCaUNlHMMYcs5HASDKPwKIEqJOiAGNQYj5OagEWhCdUAZ6LaySx+iay9byL883fLfveIQiiWBJvILwlra0KYEOoCokDUQBqdcY86dUbYDmBaQebQAbiUrKTmbwRQEqZU8zrrasHj5FDS2zO3vc/pU3SHs1np6oBK9zzq1EYaJgo5CSQlRG8wd/itaCSQY3KJLPBisxUDUtKMu2GxA0SVmcq5EqsekuqaLQiUFHcJJBp1SSgGujlF0emSYLKishOCU4qxi9QmsDkJ2bJJTEHCYPgq5/QIojKWi8SvgU8SGR0Bm4U0JSOZ0Zhg3a6GypL7Femjzgvc9fo2ccR3zwxBjLByteJwkSI5IiInG3EX3fsVwsqCoLDqJNSJUIc8Pif/ubpK/eYab1LhwSo6jv3Wb+9uuE2iHaZBRAGxIlHFMGrQ0xCs9fvGB/fx+jzQ56ttbSNA0xRp49e0bf92htaJqWGCPG5Pwu+sje3h7tbAZaME7n3EontFUMY0cykHQ++NFkp2SSoGLEEjDlwQ3DQAwRP+Qaad/3+DAgEtFasFZzdHSAc479wwOUzo5Nq1ydjCGgVL7h8srZXiqAQXHTQNnbfEXdOFQQUkAZhU4JYiJWjh9vrnimRrZGEWNCRDGiOQ+eSyJKCzlED0iKWGcz2El+jtOhFgRRkp9tvjpQpZ4qSRBJtPM5B6+/wsFXbvHKL71D2HeMNiASiAV0Uaq8dvkcoqb8TrHdbjg5eYEfPX4z0m/7ko8bri6v6PuRGPNl0I+eYRwxlaZtK2QYs7GjcFqBxLIrP7tE0uduSsonzPVGQ0hCLOH4OI6MMeDDiI8jfhxRxPI5FBFFUBAnxzm9nipPKyWsdfm2f4n1t8spJd9USgSj1C7WlyS7q9lZy95iwa3jY95+8w0qp0lhpLIVEgNzA6pbYxXM1IwX6xPqt46RP/4MSdnrxpS4wPP2N79BdbzH6Q8/xvi02zgRwVpLXdckSayuLlkfHeIqx9iNCLDebrCVy4e1HPIp1wN2wIvWmsrkW2tyMH4ciaNHKcV2u6VGUymNNhXJBlzTULkKkmCtoa4q3nrlDVSquTg7RxkDWiEqgSkgivcg8MEHH/D8+XMUiqZucv5T9jL6gC3Rws3DcjNpkJ/61RQ6XgNJirquaQXqueVx7fiD/pwfdx2XkpBBUSWNrW2OOiTlcBcIIXBxeclYL9AXhlmzzCFziiSJxCiE4MEnNIJxN46PZONKleH2e6+TdGLQI0MAJEdWiUSKsqtnppRQymTwpOzBGDwxJlRMhNGzWq13EdkwDCW3jvhxJHiPT4G6aVAqA2ei89m0hVAifwUW8tctYzRpIgaQHTzOlFA4Av5m7ALqxtPaAe75d+u6oeu6XM77oo2ybhrGrsdqjdOKg4M9vvKVD6jqls8ePuLho0f4ceTXv/1r/Oqv/AoAldPoOOCfv+Dy00fU3cjx7dc4WV3QhRHOexZ/8Jgf/OgZvmyeUgqnDfFiy8XZOYvXbrO82tA/PqGpKlxTUwm89fY79F1HCiND33FxeYW1Fb0KYCybrqdt6nzDKA1Ko40lxIR1FUobYhJqW4AW0fnmDQmN4uz5KTFEnjx/wScff4x1Dj2r2Y4DZvC5aJyEykLtNKFp6S9Gnjx+zPPzU1xTY51GmezECIHt5SVNXeGs4+z0lDB60BqjNZXNYJYzpiC3Nw/TtbeXVLx/yesEMNZkMCzlyGUceyyJz5Rjc9HzwwB9BIOiRmiU4IC2bqlDQuvp9hLOzs/pbc/Z+oz9xQG37+wj9CgVcl3Oe7QvDk5F0LqE1ZA05VbPYbRWgks6A1u6nNcEViBKIkjEicGgEK3pVeKzZ89IKGwU+k2H78YM9ilNZS1NXePHEaM1i9mMi87T64SPmZ1DChhJGJVBtVjQ2L+Nae6AOrJBaqNLGqIKkCdoiShJFMx3d0OKSA5Tyw8UEebzBcvj41xNeIn10ka5WC7YhsQb9+6hJfL3fuvXeeedt1HKMI6BP/7jP+HP//y7/Mav/xqHh4ecnZ3hak2tDDw/ofqLH7PXb0lKcVcnLobI8+6Kdx5FHj3YIge3We7tE3yg6wbOTy+5+uQx1f6CV772Lh+9OMNqg0UhKXJycgoI0Q8kgb4fsVWNT2tcXbNZrxGlsa5CG0sS8CFSCzTtjKqqCgjkAEUaR4yxOOcwonjz3n0+i1DVDe9+5QOMs4wkLq+uuDUGThdz9FMwKlE7zelqw2F7QFPXvPdL32C5v8fh0T5CInpPt1rxw+9/j7/4/vfRwHIxz+FWU2VHZyzJR6yx5WHeRLxv5ENwnSOp69/NwFjx2iJcbtb8yWaDkSoTzKJmbjUH+zWHy0X24gGqiw1mDMXIinFKYhg8F/GC/UMNaiAHZ3nvJWmIgjJS6oBCVAXwKAil6EQyoEtJIk1vMgqEhA+BlC/ogpQKmzjy9NEJx3duMzOOYdsRfGA2m7G3t8fR4SG1qxjHEY1i3s44215S7S2IkkNIiRFTWFKCEHXGOH7e+qsM1VpL2IykJJmogJB0Th2MNbShpGgxksSTEGISoiQSlDxWIyhCjPgk2Kpiu1m/lK29tFE6a0Epaldx59YBd27doqosXddhreZb3/oqT598TNMYtIaPPvoJf/797/Irv/VNfskqdHdJkzyZICbUUbFaD1x99owKw3/2j/4RH3zlq4QQePLwKf/D/+2fEC62PPvhR9g37lM1DdvzNVrlcon3nuViQUqed99+Cz+OjH5kPp/Ttg1JEs45qsJXnGhSN9kZxmR0bfe9GBGTc9XKOZqmYdt3RGegcYgWZKywtaM6WOJtDumN1jx7/oKNbHj3vbeoqoqYEienp2gNVitSoWqN44gSoa2rvPmldOKMYxxHmsItvs4rf2rJ9K9rjF+pbAgpJWKM6BK+Re1IUmOVRuuRttbcuX3A8TIX3+Vqi7+8ysinKpyjmzlqSqRyM+c6tUUXkE8pvXsvU2aWUgFRdCKS806tNFpbtLMYrZAUSCGWNCKXNaCARKPHx5hDcWOghK1KKUIIzGfzHAKKMPQ9ylRYZ3F1RdyWmiQpI6hKAyFHSrt9K+umNf6cUonWZncmvPfMFnN0lZHzGAMxhl0OLZJryVP++fkfpVgsl3z08BGVD3zwi7/w15nYbr20URIVCs2nDx6yvrrg61/7CseHR/zJH/4x9+/f4/XX73G4v4dGeP70MbeODnjx9Cmf/sUx33znHU6ryMJrqmCRGKlFaE3F49MLmlcPWBwcsJjN+eFf/pBuuyXXahX6ouP5+seorUeU4A1U5VNbZ1mvNjx+/JhxGDDW0o8D4zAybjss2fPn0C5D/iLCMPTU9XXNKJXNNcZQ1zWVsWhrqdsm30kqh8CiQIwBpTFNS1QaJTksVCJIeZDG5CtAJu8ZJaOHdV1uxJBvGjRhDPh+wClNH0Kpa2WUNr/IdCP+HL9eYHyjNKYghZCNdL9ecnB4B2VnzGLibP2cSgectVijUDGTHJJRO4OkAC7X2SqkglTGGNCqwmiLtQaly9/TquS0YEsZQBCU0QWlzSimaIMzGleurRAiyjp8DCSqAlJFtM7h4eiHTBZB46qGYQg7Z5dSQiQRw0jb1myuNgQ0SVLJTzOjC8BM3IHrLZt2aZf+7Rg9TBljSQvKuWmaGl1ZIOEH0CGhtWEqyohk9DXxU7mlCNpYYsqI+8vmty9tlN2mx9iKFAIXV2vOzi74xte+Qb/pGbqR2jW0dUtbOT569oivf/1r7O9VnJ8/QNk3mXvFTAKiPBDRSfOaWvJsExgvBlanF/S3N/zrf/HPM/teBJ0qmiGhU8rIlnOZxiSBKIEgvnhyzTCM7DUzBh/yg/AeZ+d0fQGIpEDjKkPySQJG55LCdAxjzMm9WEvvB0xdMcSIFo0lH3pTVaiq4uDwiDNlcCJUCDYlCB6lBO8HtLI5V5vqYkrh6gqjDSl5fO+ZtS0pjJw8e0ZV1SQRKutwxjD4cP1syYfd/nRKIpIbA1QmfReqFKP3JFPxldffQgeLimtGOUeFTHEcesEKNEojzlGvPL0BZWS3P0oyepliNrIkiUTIN0KypJBvBzQorUHnMgCKDJqJEIkIEKIQg0cZTeg8ikxUEHLOl4wikql+kiBJLp1FFEkMCYOrK3ofmc8bNtsNxIDfbnFHLYt6SdrKjg9rMdmboLBxKjFcRxUZxI67ckjBthGgT4mr6PFhJBagSCmdqwoIJKhCPiupOKGYclYZEZLKHSdTahlE8JKonAHzBZdEplCvahvaWctqtaZpat577z2+8Y1v0HUdy+WS/f09vv3rv8rh0T7Hx8dcdokRRZT0ORhdAbXz7LvArb2aZ08ecbS/z3/+D36HcQwoGrSqMbrFqAprS75nDViDF0+/3WKNoanrXch55+5djDJoBdaaHJIWV2gLO8ham41vQgCLt5/NZtR1jTaGwY/UTc3gR2KIWGXQpSgv1lI3DSkJmoTTpSaZAtrkQwXpBk8430La2sx/JbNTUozEmCloU1mJkNDW7g4Q5bDITznZHeJabuWbCDPA1WrNg88e85MPP8osG2dzIXsY6PuO6D3KGOr9Bf3cMTqVP9sEuJWfG7NV5lwzRYZ+pO9HhnHMBPphYBwHvPekEEkhO7ZUSi9GWazOYI5FY0tdE12ii3I7JyVEyWUIpQTrTDFQEDRjCJyenzGGkNlQElipgeZwzv5yn3Ecd8+0sq4c7Oswf/oHYffcpRQs5cZXUgovkCRS1xVN0+C9z6G197lDR3LeGEs7YJTrSmhOm3PYn9lU+f5s2jZzs19ivTx5IGVeoRJhjInnz58TU+I3fvM32G5W/P7v/Xvquubs7Iw//tM/4o037nP79h0+ebDiajWw1gkbPM3udEW02nKrrnnrN36Bc9tycXHOixcvcNZgbCjgRUIk7trFUlKoqHBiuGVbtuNAVVVorVkslyjrWD19jnUOV7lMwSpwu7WOFAVjSjmlEJanw2ytzfA3Obxq2kzXiz5gtMbqQpzQGtc2FFIdlXVI3GbDUCAxZTbSTaqdSAaqTMnLlM60tPI0RfJD9sHn/B12Bq2m8/Vz1nS4tNY30XiUUpydnfLardc4PDri6GjO4wcf0V2ckIaAmWnYq9m/fYtw55h0es7z00vSlhI5F/JCef1pf0yhvTnnMC5Dm1orRKtdaUBKSOwl54eVttQmM2Xmhh2xbxcmly4NyLS6/f19IOdwUyvbZrOh6/ps/Kl8H8VwtUFtesIw5PqzypFDZkKp7GR+Kp/cGSTX7Krp/Ygi1yS95/jokL29vVIKkXJWcgadSg0yKbnhfMv+S6b/mbq0bCnFfD7fna2/ab20UQYfCAVNkxh5fnrO1WbN0eEeMQQ+/ehjPvjKB/y7/+lf8pPvfZ+TN17jndff4gOp+Ph7j3jWH7I/rvlGPdJI5nJq5VlGxff/7b+jf/V13n7zbfaaineXCy62T8FqWqWpKkWzsFg749FGeHR5xd1W8e03b/MfP36MdY69/X0AVleXiMphptYaYzNXNoQAkkMRo00GcbbrEv5es5MmWl6Mkaaps5fses5PThmIbIlcdR1XmyuC05gRZtqiBZJWxBvFdD3lapTaqlK0dU2HQpEJ1QrNXCxONN7k26OxLtc5p4dcVlLw0752dxhK21EMAY0ixsgb77zBu2+9iyZCUrjFktX6ghAGkNxKx/Ehzhr27xzxxqrj5MNPefDolFQimgxoZKN3zmGdxRqLtTpHyyqTxTNWU95tAqUmYsG0vyrvS4jXFERKCUUglJtssVhgjCXG3N6miNkxxpTfS/kiKrSHdLmF8w3Kp4xBAJVKGNGoHFOjb1ilTIb+Uwa5O+caNingY8A5lw3dmuJkFSpEEuAlMUrMTdLqun6eccgcAThnSaX301XVDmv4m9bLNzkrneFlQAt0w8B62PLgux/xwdvv8LWvfo2T58/Y/uQRv5IOqB+PvNlf8GqEZxdbvsuc3mg+0Bc0cSigAtR+5G6EH7445T/823/JN0fh3TSi9irQkdoY2lZTzxTn2vHP+w1nSnHUGO4uQSSAViz2ljhrOT85Zd407O0t2XYdVeWYL+YMvc+GicfaDHUba7jGVEpImRLL5TKHKmRCwfnJCa+9fp/9vT2q6JFhTXWwwGuhEsXMVFhliNbk1/C5S0VyC8XuwesElasIBqqC2pISTdRYZdnYzK2sjNv9vekAq88Drp9b001mCvCkRHH79i3u3b/LRXdOihFnYH7rmMjI+ekLWMxJ8xlXhaGTaseto2N+++49/vTPfsAPP/wxImFyKZ/7WYLkUDXl/FNKfJumz6oVYrJhaq3RkjmhKCGMI9FHjDb4GBhIxJAIhfiQmVE91tbZcWtdoh2NMw5rHDEIwSckgoq55czEzMSxyjCzGiel1ltCh2nbMtlieiY/u6Few6huQl03/ryCMIwMwbMdA6HQBhMFjysRj9LZOdR1Qx9jAdL44o2yfftVZsuGzcUV+nxDZQybzYblwR62rVBacfLZY17bwi+wRxgT9aNLKhO5SJ7DwwXzURPWJxlOT4qohCoMvK48z2XOk7/4IW+bikNleVp1HOqRsW15hNBvDJ/5nqAHjvfnNLWQHIykHZuFmEiF+mdMbv9yzgEdm82WunaMo2e9XuNDz+07RzhnGXqP0jl5z2FtIoWAUhnSn7Uz7r3yCkErmrFHzx3D669yUbeEfiyIpiGqTDL33uN+2npuuOSoyB5Uq2vkTymsc/RdhzW65LrXPv5vwu2mGzkfZMVrr72eZVBSNhpRoKxh784t5gdLrNGYqsIju8tuvVmTRPP++/e5uHjGk+fPyk34s29CaY0xKrOBioNNqjB1MpR23a1B5vgqYxiHwHYMuasjBEYSISii1iQMwWeq4bRuph/GZJKEVpkAfrMWv0O+tcaaibJ540p+OeATURBTdiZ1XeOcQ+lrkAhUzhPLZ941TzAZfHaOPkXapmG93ZBSNtQv3CjljWNGA9JqnNLoiy1XF1f8vb/36zx79pi//MmP6LseHTXRKR7qwGATXUxsR9iIxnrJpF2Ti7tWFFpgMQzMjdAmzcLWPIiKPx81/2BhOKPinz7dciGOioG///Yxn44G5/tSm4tIEi4vL5k3bSY1DyOSEs7Y0j5T7W5BkUwVM2aqkeWltUZEeOWVu1xerYgiLJdLrFI5xFXl0CdBmwp3cIu2atgoT2sdldYMQAiJFPNtBVznLrsDkvO0KAmURueKHkaBMxZfeLlMUaEASud8Hsig/fW6STBQKLQxWKVp2za3uhW6jnEGVxmcGKq6ykDI9PqFfxtTwocRbTRvvf0mL85e8FMZV/6ZMkWtuXyBVtmBKEBiYcNMwMp1GG5Q4GNuBg8etCKqHI24uuZgvmQTN9R1RSj03pwfCqagurkVa7cZO2eUUjYULRpHbqXK+V2hw+1qiPI5Y/6811NI0jn1MJq2aXBVRSylmspZgu5zmcZqlBKcirl/dPeE1e79uaYhrbe5TqssWruXsrWXNspNHBl//Ayz7vBJCDFxdnLG8xcn/LN/8c95fn7CTEUqYxis8Be251xFFt7wVdfyLHUEp+nHPRIXaAQXwEtLr47AVeyvt6iUeOrmfGwUv9mMRNWyrRo2RnC95TDNeCpbqqrCiKAkEcbA5mqDUxmo8cOIkkyEr9p2h1TGUIAXyZo3khSbdVcScMEYxWJvwcV6BcD+wQGVMqzWm0KRyqJbgiLNZlgtKBKv4KgMxKjoukiICp1M7toQAbkuLIcQYAwkoxGl0aIJOqPlravYyEjbzmhci4+BDMTnMFhPdK4beeTNs6WsIY2CrRxNXTGOA/P5PO9VZVA653laDIqJezrVaRVdP7LtOuqm4c6dWxwdHJZwWIAIKmWpDIHkc7i4s49yu2VkU3JDxNTHmDKf1KFwCXRVU9lcx0WEoBLbccuzfs0r9+5Q1ZZx3SHRo1VF8iNOa2aLORBRKlMD69phrcbHACY3f7Ves+8TqqLwiq/dyYSYXqOtO2gMgCSGmCp8DLlh24AiokvNWCPUMdFGBU6jtNCgGCXuIoSdAzUWbR3W1bz73ldYd56Ts8sv1iidc7hbB8iLFTMRxArf/e53+PFPPqTvVizEckc57uI4TI4P1JIHVWAvwRvach48Y99TxYFoSm9cLCFPHHhHNaimonEKrw250yp7fq0FVKaCKYHaR6StGMZxx5Jp25bVek1VVZkbaQxVVdO2DV03sr+/zzgEUoJ+2OyQ0okxklLu1YwpYitH5z11XdM0DSHkcCsTpzKfM5g5F23LVT0wqIQTsEqx3mwYfWQcS9uZZHElbhALmqbBaLCzmqpqkKpGzxqquiIZi1vucefWLR4/zeoC000jU51iMsRinNdoYv7e8fExxhiuzs44ODigbupCAC0xX2nKjSnR1DUxerrtlu12iw+Z5KC15tatW5xeXDDZnHWauq6wVSbyO2vIzegZ5Yzl4E8Ajy7PCy0Yk8shlTIY6zIRXWAz9nREIpEgkUePH7F30HxOHEtJ/owhXotXpVQI4yqX6mJRJyCB0xoo+keSEdJYst94w0EiU6lpimoyVXAYI9q4HUNKSoifRk8VEvv1jMFERsnCcDkauX42Qi5/Ka1Yd1tGa1neuk07X3yxRnn16Cn1K8fo/YbtoxOSCnTbNfNZwwf7x7wfW+4lx6FO2CB83SzY2jUzP/CaREgQ6oo6WHqVGAWiyl6y6i/5tbTHXtUQXWBrNdLl0EQrTW66EIwFZx2GBU+GAX++Zu0T1Tjyxv37rNdroh9pm4bFYkFKDdpZ+v557uMs4E0OHyNTJJTzlgx3n56eEmJm9Pddh9GaH/zgBxweHlE3FY/PnhOHhD894aFrWM+WfMqWbeu4fXiHzXrk9PSEwXdgc9eCSEK8J1ytM4fz+IgHn33KrddeZTGfo0VwWlMry1wZ+qQ4ODri0dOnfN6Xf379NH1wMv7KWlIIxNEjqTSITzGnkG/ulAjeY7Qm+IEQckN4DAWY0HB4eMDZxXkOH7Widi7XAHUu6RjRJf8rubESIhqdUm6vg8KnVTRNTa0sTiyVdiWEzA0BW51wVUUdM6mjqhySQo5KYq43S8i1P2stIcRC6SuN2VW1Iw4ocseSKtY83ZBJJtS1ILA34tZMNp+SjEyUMFrfqP3mMFqLYHyikox4qiSEGDNKffO5lIcWRbi6usIJvPeL3+Tw1u0v1igXz1bE9YDpB169fYvXbx1zcvqcJ48fIamhliWb0JMkoY3mI9PzuArcDYmohFnM4dNgFcHnEKcHTAqMVHw/Bcy24+vzPRqdDTaaGb04ohpJrqXXPX9y8YTnG0MwsF4ZxGY+5Itnz9l2ORR98ew5s8pxeXnG/tHh9cGVafOv60lTAj4d7HHowRgqZ/HjgDOGP//Of+Iv//IvmM9nnK0vkaQwKWEHT6g0J4MgtWV/f0nyKz7+6CeIFmxraWY1kiJOa2TbUaF57yvv46oa0QZVVTukNWXxHrIPizsjUhRUlet6mNa5zqkLiyf6gMSISoll3cA4EPsO3w/EELJR5jNYQteIFEelyHW1YRgLUJHD6f39BabkiVoSKoFJCpMKIpp0btmTHEOkGFGjJ24D626b80ZyR0pczKju3EJJrtNSwC4A5yqqqqIhh6Qi2TC0MiSlsNbgQ8YJcsh9swUvA00hhowiaw/G5fdLicTShBHnftBsoNeZ/lQLTZLwEgghEgXGwVPV7loxoBDpO2OyHi8wpatqykl3CLTObWgIlc2tfN04fLFGWYVAPBvxfkBaTe0DS2W4xHDit/zpTDGqkW/EitfMgg/thgcmcawVvRYeOji0gh412mfpwaQ1VhJrrflzIr2J7AWLNbDVwkNxPAuRzgiIxY3QHjSI7/mle7fp4z6f/ugjJCWODw54cXHGskhBaqXxPuzC02v2RjbGJHmDK53DDGN18cY5TDaVgZSwWtMNIyHmyGB6EGNKDMoQjBCMIXmP7zoq57j/+j3e/eB9bt+7zWtvvMajh5+hJKG2A7//736Xv/jLHzKMA2/kQl/x6opACdWUFIQvexA1lTzIodIwDBmJLISBHGJF+u0WI8LhfM75+SXKBwwCEpnajig1teBzs/pNZcIkOW8yKiHjls3FFSl6jBZSTHTrDS8eP+PgcB+jLaI1r7z6GtbVDL5HgI8//SHr9ZptuZ01OX9PlyP92vPqNnNHIWvfjNEjYui6jh7Fe+++w9X6BZDLS9a0KK0IYaRqqt2zzGRwdjqvuQ4dcnlCR1Sc+m/VziCnko1AadZWu5s0d7oIq7ClHzxRWZ49e87+wR5V5ai0wg8Bui0yCHuVw0dPnwJJYnmOhdmTi/C8ODtlDJ5lVaGMzjTEL9IoJ2ja2pz7+HGkspbbd+7wohI6o6ltTaSFakFFZKYSjdV4Kp66HpUCR0LptC8HshSOgmhOqhn/No70vSda4Q+erTiz0CuHCZ5FgLfmR5yOz3jx4oQx9cSxYxVGbh3fon3+hKqqAHbCWbv3znUOhlKkUj4Bu4Ps1+vcUNvMFqxPtvzu7/4ue/uHmap3I4YUKajvjXKGiPD48SOSON595z0ODw8ZR8/z58+pm4Z+vSaWPHX17EmmZ8V4Iw8pwpQFlZ1geChQe6kPxhSzooEvPZ2ljkdMDJsN9199lRQDfbclxYwapp+Ti8aYdrno5LBiSnTDhqY54M5iyfj8Muv5+gAI3WZL121wriaqOdvthj/44/+Z1WrNwcE+fd/z27/5bZbmko8fPACdATYD+HFk0/e0g8H6Ut9MCS+RJIXUHbJ6g/cerXLXiG0aFos5q9XFTmA753pZSc/arDYRQyjuLZfD2IkfZ2SYcnOKynlnLq1eF04ECFZx0m8ZROEThNWKzXaV9ZVQzBLcUQ0hClsvJJUyXxfFjUAEEIZxYLVZI8De/l5pani5usxLG2W/HXaMhcvtFcs2ohUM24HteUcoB/N72ws+Sc/44SxyUgmbPvFwI5zNHFSwJwXzkEhICmIkqcj2xSU/Xm34gYmQhHbQnAfDVQODElKseBZ7Pv3kit5oVoNDp5ax1jhtuby8Ym+5RxgHNtsNo/fcun2HMfh8aMsNsYsvJEsBalGoJGy3W/q+p64aUoisr1b044irGsSYHdwtBW0RmXK6XKTWKnt2pa4PevCR9WqbnUPKSqXKulzjUyp30qvsX3cXlmR1B81UsimPuRhWbq/K7JrJWCE7nllV8cb9+3SbbZbWbBqstvjPlTVyjTHXbyU7nNIVH8eRbrOhW68xTc1rx4fUxtKJzhiw0ty79zoXa/jBX/5Zfi17APqI08sBRcO/+De/y//+f/O/5uLklLOLC0KKWeOmSKl0wTJ6jbFqqjIVVl++xS8uL7j/xqs8efI8i2kTOTzc4+zsGVVdFcPMXSJt02Yebu8JUTACujCnRLHrDjHFGFPZp5i4vm1vGMogsPGJ0UPSGiUpvzldJD8iqCo/mxAjrrGQchTB7vmUnS7MJa018/kcJfKzDQX/vxrl2fOzTBVzhhQTR4caYiA5x3Y7sg6BFANrpXDOMAaNRHiK4mSu2assumpZ1I7zkzUSe4wYjFjaUbFoK+7OWuroMUvHvhgQw4XRnJlEV3iHQ7qD0467tqF2S7bDSBw2dOst77z6Og+ePGQ2nyNac+eVe7x48RytN9wExhWlzlb4kdHnTvX5bEFd1RzuHxAjHN29TVSaoVCrrs/1DRFfgeATWjskFXJyzOwyZUyOCGL+WUkbqGpEGURi7q2caoXFYUyGZlAk79GuuqG3pLMRxsyoqatMvE4pH4C7t47ZX845f3ZCGAdM0+bOngJsZUrhdZHbOYdPU0FUkcZAGiJXLy4Y25rZfI9XD25xdfmYpBXWWN54423+yf/4L9HVK9RH/znaHWTidRwBTX/yT/l//Yt/zT/+b/9Lvvsnf8DZ5TljHElaUKIYRNC6LfVHslq8UWANLsFmfcVs9iaKjIYrHem6FU1bUddVDhFjINMUhRASMSpiNKAisxhZ+hx1GDLonInxJS0gKwPF8vCydGhBscUhNKAjlXXMm5a6zvNgtEAdEnYIGBXRxtC2M7rNihjTrsE5J8tC5Rw+CUZFZrMZThncSwpnvbRRvv766ziXUbFb1nF//5Crywsu+g5XNbROaJqaxd4c4zRj9KA0wWqMsbReaKJl3jZs1qfEQSBl1Tct8EaT+NZbr/FabWlrTaodKdb8h9ML/uDiAiMWUFhToZKjqff4+te+iV00PHv6gMsnn7KvIovFAmuz/OLF5SXHx8ecnZ197rNMt55KkqVHYu6qjzERfKTbdpASFxeX1IsFqZQlrkNAnY2yKLgV8mFBBGXHo1XGsPOdAmidRZZ1Dp/HMXe3I3JTQWL3c1K5NSdO6dRilhUBi3KgyuGcM4a7t+/QrTcEPxKCZ26XGGPxqRxiQG7U6XajJ4rSnxYgwtnJKfHuAbZS7C0WWeJSMsCyHXLYWy9/iaq5w0ToN7YhpUR79Dusnv8TvvOjj3nz9dfxY8/F2GONRUIOWWdVDSR0cWyDKKq6Zr8ydH7Ler0q0o4G5wxdv+Xw8IAxRGLIGkrWZvkTpxwx5MFCqgwSMjdyR5jCf7VDY6/lJa9L/vmm0wim1GP17jlqnRu6JV0T861SbDcboiS6sccLUHi8UQmqyLNonUs2zpis+PcS628xS6RlvV5zdXnO8+Q56a/QSnjy5DnbjScI1HWFDyNvvHqXW6ahTsI8BVxl2cdwVxmsmWFMg6iOmDpELIKwNJG9KnHpe063wmMUPlU8GDxjmgjBuUGZ6Om7nj/6o98nGoVJI8ezioeffMrrr79GHEeiH4ne56ZhpoZWAa2wGGLSu0g23xw65zDGc3F5RUzCOPTcXSzKA8oh0PRKuQE3P/lcRJ+84A1ie6W5gfWiyANpdAmlMtE6Fs2Xn/Wif2UpZPoqBWulFHWVa6rd6oooGarPGrBkwSq5bg6WSbRCct1UouS2rRIKd93AYrnAVkX7p/yNECLDOJSdvJYt2bk5pbDVAcoe84d/9h2++d//dyyaR+gYaWczzk9OqRM02mJ0AYEiJB/ZbDesoqZuLVdXV3m4jlal/S4xm89hO7AZtxhjaNuW0fvr/sjyZpxxmAmtfgkbkBvPJ6vPZSX22jlEIjEJItkoc3dPFlieW8eWwGrYlE6UYuSlm8ppTfKCcwZnbaFMfsFGud0OnJycsdmsSWlk1a3Z31uyPD5mtoQnT54xDp7zF2fctTW/9tqb3ArCUReoExx46KxlPY7YyhK3ciOcUqw74S+fDTynJihDTyRKwANJN0gc6bue7bYjhVRumlxTe+f+6xgxPHr4kL2mgRCIw0Bb15w+P8FojTPmmgFlFJLyLaZNJkITswr26D0xAUozxoBRBmUcUShyE9koMx+zFMu1zUJcRa07SSREjxVHcaBMfjnnRPkw+0JcVzfM71q8+abck/BXmaiU9zFvWmIIdONA70fO12tu368KH/XzRnndipSV30zx4rveT9HUVYUjkcQTNQia/b0D/vg/fReUpWrv7yhvUridk+sx7buk4SFdgnnV0GoLRnERE5VrqKzDFmR2I4Gkcv+lF8EkOD8/x5iKGANVZTHW4sfAcm+PzbZH6axe3vd9UbLLe6EEGmOx5dafCEV/pXf7qTXp1CUJOKupm0yLU6oMThKNGkecU7u6tkwEWGRXbqMQ8Z21zJZL+m2HrXtE+5d6Hy9tlE+fvmC93qKApmr59re+yfvvvYv3kY8+ecTDR8+IAjoaPv3slDtmRn90yIM61yJfmVtcjLQxdyUYBK0i6IQSQ0iaEwyr2pEIBDFZRiEmUohs11suLy9LaJlvNqVy3qFNJBKQFLg6P6d2FpUioR+4vLrC6MxjvFqtmYrDMUXGEDDWZbl+Ak1q6QePtgZjHEMXCT6glSHKBMVPnQvZuJQGrVMR5xKQlIWmUywhUT7oasdHK+09TP15aldrJH8buO6O+HnrJqFAyJ3v+4sl4zAy+JE+BHRVsX90hI++AEnXRINslDnsjFni+0apQSGiM80sDPjkiSpT/V5/8x2+/+l/wMzeR+t69w4mqUits65Ou/g6YfUn/Kvf/0P+0S9+hfOnj9n2HWOMuEVduG+Tm6JQCbODiTHn2s7qEm5mpPjJk2e8/e57hFJvjmnSkL1OD5RSODQmUUC8a1zvZQbRjZJY+5BlKjU0Tc3EXbZB0EFwRmN1KW8Uw1cyOer8vEXAVRU6RrabLd//3vdIrmZ8ifcAfwujvDi/KLeDYEzN1eWK//SfvsN2O/D85IKYMicyKFhp4Q9WT3l+p6Gt5lRRs61qTLfhg6g4qBtWhSWR1JQrWTKTMOupTrMZYgh02y7PniyzNUhF5q8YRD90LJuK+WIGCE1VkSS3ADWFMrZZbwpA9vm8L6ZMjra2wpqEUoEYBVeZLFlRNnnqVABdhJyn2meZ3VnC14mEMAlz5RtK5d5KpTBmMsIp5CsbPKF3JUSeOiKyZs5NV1/uo13nQnZQR4eHRSQ7cLVagTIorXc0sWllBPpGxpXj4N3vBx8wOhvpMPRZekNnsESZjDBX88PMeGEy8uv3F1PEuYZq79s8P/2fSfM9fHzIVbelXs4RZxhuqEGEEkZP5Ibp2bjK0bZNnlZmcgg7DtN8yrhj2xhjioHmXTLqWntHTZ/vett+Zk3VIiEb5SZ6VJ1HJcYYdkavFLuhtZNzC2kS0JIShWV2kQ8+R13DQLu/4PX33md+fIvxix5bkKHhXCS9Wq350+9+F0kRrTOPcSIkJ+2Z7Td87RtvoLWjVwlfWU4RmtaRRo0ZXe7gV6XFRhQuDTi1BeUI5FAxhMBYFNmD9zhnmbUt202/I1NnZXFBkuKtN9/GD5kylgpkPo5lBsnNJPvGIaqqim6zzVxFuT4Uxhi0ZKaMbbKs/mSUQOk6uT5IkzKCCDtZCq11kcWYFAhyOeNzNUhVRFdvAA6icif/RFGb1rUpXd+VGo3ViqZtOTvb0Hdj1is6OMo6txMDZnoF4TrZkpvmXgr6caAmMfaRi6uO9XqDVRrb1Pzljz8CoFl+vVDgsrKcLTVsKf1URmtmy68yXvx7/s0f/BG/8fZ9wuqSpIQ+JXqfD3NSMBawzJT9fe21u8zmFUOfcFXPYm/JcrkkpLzHWak/MTnH+XzO0Je5KwiNgOHms+baOosz2qn2Sc4Xp/3xShOUoa6yONjnDLlsfkyRzbhBEAZNJj9MP6c8T+MqfEwMIXL74JC7r76GWy4Zv+g6pUGjdSClLGSUdEQKM99MiihKuH33mHuv7LPUNbWuOI2RwSVOtLBEEaJFokJbh/ElPBNFG4Uq5RYYJZkgnqmc02HNB7uZ5Zsv35q5vDEOkW478ODiM4aup53VPH78mHv3EqurNUdHR/l1po0j06/WfYc1lrZpSNNoAWd2D0wVA8uyEtdPJyXZ5Wcp5nmKzrmdUU56MZ9/oooJR823qs6k7J+S8cgNwwlRiaTSzpinukgqe11kSNFaWDZz+nGkHwPrbYeIom5muas/lltVlb9dhLEmlGq6h3MlLqK05+233sKqGU/OHtEPES0BR6AvNDGtLbqAP/nzXANZE2BkbYNp3+H0/COWv/ltwiefoHTFGDWB3C0yasGnjGpa66gs/Ppvf4Xl7A7/7J/+O1abLbNug66yJtO6W5NSzktBIyqrRPT9gCQwKnKg8hyRdONZKyVFfSCL/mg0BlOodgqdFMFArwxjsozbDjffI6mpq2ZKwxNRAn0ZvzCKyk3a6joUD9GjZ3O2SRhEMz84AGNB21KG+ZvXyxulhVfu3eLiYsN66xGlS8gwdTFkyLmaOQ6Pj6D3tFWDVrmgIEDQJsfVMe3i/nLzo1Ouze3ynxth5k6rpoSQ6savjdbEmA3FGIMPnoN6b3dTOeeo65q6rtBFyGgiJvd9j1LQNg1dv82fRa5HMEz1KV2kOa7D3msO6o06ye49TSPbphs7iir1xPxh27bNPNXd5/n86wjsNGDU9Nmv77oSgpaSiRhefeUu3g9s+i2dH1Faszw8KOrlETONZChUlvw88q2miqRjZv/Ar33rl/jW+x/Qn19x1fdZdZy0a1/K7+Fa12hCtvNtoXaiaEoptN1n3AaGEAlJ0ErlvE3lcQ9pkt8sxfwYI//P/8e/QJIhxSqXG/oe6yw+eEbfg8qqEVfrK4TAYjErpYdcw22MxijJVR74mbD1Jgsrh0bZKMXAKEIo116MEdG6cH9VJhIQScSdXGQQlXPc3WtLmakKY4qI0cz39/ApgkTa+d5L2dpLq9lVlfD+e/e4ddyiTQYxbqKGqNy+Y+oacQaDxobytFTu9ohGsYkjlTYsTXVjMmJmYhhJeVKRVkViIYMyn0sObtjCLneQXKx1tny5ihAipYSWZ2u07U70yVrLBIHGlDBFDn+6xVQBHHaSk+XP5Vzx2lGoAtJMHeVKKW7dukXTNOjCUc1KaANd39Ftt2w2W/YPDrh///4Ng/w5S6mdY/r82pll3jdjuHXrFtu+42x9hVegm4rbr9xByIdfqbK/FN1uyXumJKIlk7R9DCznC27vHfHkwWOeX1wwWksqt//de6+xWm/Q9gilCwBy02lOTcWf+wiZ8hhiboHquo5t3/Hcd2xVPsxTzpuxAkHCDFJu3QKhvdEPa4xBUqKqKiYlAudyx8mUDjlrb2YCf+OaENoJMMs16yzTWRKO3et8vsSibohVl+NEISKozPjRJs+ZiTFidc4xX2a9/ICfKMyNsNfoLF9ZorPs1TPtVyFlQEtG6yRDk2B0UYOzxEYRVol6mklfdsRIovUBK0Ivmc62UwtTssvDphadzNQoOYLW+eDpxKzNyOswZElApVRpw8rTm+J4DRJMSm2jzyPgjda5adbn/kk7BHzfZx3VXR3yOq+ckvt88AXnLPfuvcqTJ0/4yU9+jHqQ1buVZIXxrF4XSN5zeHCQdVOVzp5e3Yw42H3lz5gFtm56JIXGaMX+/h77+/s8+OyzLHWqNbaqyui1UIxFoSQW+pkiprgDsKYiejeMpG7g5NkLZPAkpxl8zJ0aKJb7R1xc/jl29h5G28/1cE6dGwhZFLrk0M3yKwyXv8d3P/wRbdvS90MG3Yh8tr3itfleQWwT/Q7NzANgrckotSn6PEbbXX49pQpTkT87U0OVNFkOPNwQ55pSh5+zSgifgAD0pKKprggx0Kqm0EJyiO6MxXi/66FUxUkryUBeLK9ptSH5gco6TCGymOzCX8rWXh7o8WCD5/bBgh/bC7oYbnzWtAuKLs8vkddfRzBEpTL8bTRt3XKwWHJQCfV6Bdv8N6eXMCSqccAmyXzUEtqmUgaawtYp15vgaGs0xhlEa5rKYvqASR5DnvdgTR6xroC3336bH3/8EZvNJm9cDEWWUOXxZuUGSSkzfOZBcreBVhhtdvmdyDUCJyIYqzMv02ouLs4JwXN8+zavvHGfg8MDDvb2oIwHPD894ff+w7/no48/Jk+ZCjlEQmXDVNOO7oIMrr/z+SUI7777DsboXe0TNN225/Lygjfvv8bjx49ZXVzsOliapsboUvIouVAUGLqeKsLlWVZdGAz0ISLKsH9wzPPzS5RuWN7+7cwSirmVSitV1Od1QYLLexOhckt0/RqPnz7jH377V/jw+9/PKYYoOi2cjz37rsKmCDruSkVIYhwHtNGFeC4Ya0vEEtlsNlRVxVBmoCCCxuCUoS1KaDs5lr/2uszha0IIipwfakAycj61TWgyGWChLSomlBNQGu810LPTk1U5f2+aBr3tdhETNjuqNL5cnfKlw9eUhNXVFXvLBZVzu8+0+0/58F3XsVlvrj2/ygJEB/v7mMqxHnt05bBN/Tn/5SRRhZEmBeoUudU0zIxFaYfSFo3eecpdERyhqWcc330fO3+dtj1mvneEaxd88PVvcnCUQ0kBlNZcXl6WRuecJ2qlSk3M7YxMa4OrKlrR3EoVy2B2Wq85B/x8/fBaUzbfHo8ePcp6QYs5t46P888v6GyKuV1M0nVj8jQe7boyoj73/278oBu1zryapuHw8JAnT57Q9f0uDrPWsbdc4JxjPp9xeHhAVTk26yu26xWzpuK1e3d59dVXOJjPsD7ifGLP1TTGUbmabd8zjJ4UE3fvv8Ef/dl3eO0r/5hf/83/iqOjo0w1M3anBTvN2FSq6PVI1tdtFu/T9T26qndpAUBwmrPQ06msbGdz3QWj1M5xTCypCR+47hCJu26gTP2U/BomtwTeRKz/pnUzV59SlKqqc4g8PYNS/2ySppWsI3V4eLij3900holTPL03pa/TIaNeztxe2ig9gRcn59TGMqssRq7fyDU6aPBD5OzkNAM2OmErS+0q+mFgvd0QK0MvMXs50SWmzx7JJaEWxZt3jvlvf+e3uLW3oDKuqJNPzV5T21TuYwvJcNXVvLjUeFnQu306d8DgDvC6AW0zvqg1Cc3B3iGzdj4RzYhlxHksYME4DOgktB72Tc3MtJ97yKmoYv9029O0QswCXav1mpiEEIS+H9hu+wLlG1Dm8wrt6meNT2uHMQ1K1WhVo6Yv7RBtSTojek8ePeb85IzVuseLQVSVHWHliL6jrR1t7Xjr9df4+gfv8Y2vvs/9115lVlf4vkNLolKJeWXYn7fMG8dy2e7y+a//8q/wh3/6Zxy+8uv86q//91Su5ujomL29fVydlettkeMIMWT8wGQDUUoz23sfpQwfP3xEO2uzUytefFCKlfdZFT2zMjB2qgGXA6oU86bhcH//urYZQhZ5LrllLKJZDoVT16kF/HQemM/s9XMjnwKVIz0f82vN5rOs9VpexxRGjym6tXH0XFxcstlushQKZfztTukAfBTQBlH5TFxcXBSBrb95vXT4Ophct2qs4njuOD1VbCWSRZ1MrveUXCIMmToVVB7iQogoY5ntLbD35sRhy3y1ZnVxlpHQKQSJgh48ry8tv/Pr9/nJw7s8/uNzVEpZ9g8wKWcAKXliDAzec9F56nZBcIHNsATVsBKLVQlrAmIMIQ0M3mOSY3//iE4FalNzcXXOctbiigRFf7XineVdjjcJvTdD3bmLmFSGz+jMhYTr1iCJUMoJu3ZZpQgxF8VTlPyAdQ6rjG1QpsKHtPOgk1FqrVE6d9sb19C0B8QxAw9T25xWuQyitSIoYVxtWIjF2jmjRKw4vB8xOrK3rNHKUytH6kbaWUOMgZOnj9l2XeaQNjW1VZiZZW9ZMWsX9CKkJ5GmnfPhJ5+y3fZ87e/97yiibSzmC8bDI7QxrNeZdkkpqg/jiHOWyllSjDSzI2xzm7/80Y/5r3/rN3nw4U8I3oMyYCrAEZQhhSKONZ9xuV6BumblJB+xKnclZcZU5gwvFktA53HwknAITWntSui/9sbJuXR2BskISRmGYDJl0uTbPjHd+pnaYlJCO4sPgdFnXFqZ3PETRfLIQW3wSrE8OsJrzYOHD3l+dsrzpy946+0PvlijTBqGIXB0cMBrr3b85LOzPDTzZnG7AAd914ESos6CQ846Dm8dY5osMaa1zWBKCR6SApsUTYBaWX7w+JL/5UXAfvNXkUcvSE8jfutzXc8osANxCEQiWkcUAW0dvQ8MPqGNyu1RpkKrrLjdj1e8uFhTKeFrt++xtELVmCz5oTOU22B4/+AOr4SGKJFH8yM+2m55pc6TqtLU5nTz4ZJDaVXy3lLByDdhKiBVCXsTgLY7St4Eskwo7I41VP68UvnWUBnQY+IZ5Bm4Ci+RJ6sN82ZGr1weSJNAhTxPsm0sRs0IzhCN4fLsnM1mk0smixmztmXsB5BIVTt8GviT739IJ9B5zXy+x9Nnj0CBq5akEl5WVZXH2bssc3Fy8iJHHRPhXaRIlSjwgaNXf4vnH/3fEVfYLkrjnGU7CmMINI2jNjXR6mu2juSpailG+q6j29TX0Qk5Tbpz934maKR8Dk2SQhyQG5KcP2WMN3491TCVniKgny5Llbk3AjoKKYRcL9eKUHjLuwC41JiN1iQRNt0W3c5p5zMWY8/i3SW/9Mu//FK29rcYr55RymdPn3F0fMx81rJd565xhSqHLEIKXJ5fsF1v0Ps2q1crhTiDcgZCrpNECVMUjhKFiYpmFMY+8KyZ8fvPHIuvvs9bv/ycZ//qXzKfaE9JEaylaVuSCPuzBmUNQ1Iocbx+bPCiYUgsa0vTzjK17UwxJI3UiqP5nHeXDX3akqp9Vt3AmDx1Urw3O4ALz/nhMT/yFZ9dXXC8bHG22t1Wn6tS7OpeU+2LnNRPejI/pb+rtcrdG7ALfXNucrMuO/VrZkx797Ipq61NP0cpxYM0ovsEoS2HKyJk8sWUv+3v7+PtluQ95+dn1G3Dcn8vj+qLW1TKGrdn/Zan/YpgHWJaXr97h+1f/JB2fh9XtbmJ2+TnXVUVTWpJ6RRjbM7JQtzVenOImTVzZ/PXULriweMnLA8O2FxeoUzR6ZEsCyImlz9WfZ91ScpKMZFucnfL5ktKbLcbnNtDJCKYIv6cz5Sm1MEpxlmKqZ8z1AIeGp17XnN4mY0sknstDQmV5zXlM15UEKezO9EAJ4ektcaPgc1mwxv3XmexmLPYWzKbLaiqmpdZL22UlsDAyIOTZyz3I4cHM64uNgSXdVAnzZQkOelePT3hIGkWxtAMmsX5KXOtaa7WDGcvWOzPWV1q0pBK+45F6ciBrLH1FYd/8M/Q36t4b3POO3Uk7ilGn0iiibFlMI6gwLY1l3XHZzpkut22Y2/ecGXyaIUx9jSNBh2J0rDpN/zowQO+vjfH+DWDSVjTINqxTAG1WrNpl3xSNTy76HFFNmQCGkRysX0iOEw5ysRVnU7BdS3z8yu3WVVQUMspT5r+3O7gydQupokT5KBy7j4NBaJ0u8SQqG0m/EflkaQJ3UhKkb7v8H3P5vyCF8+f8fTsOXfu3OX84iw/rzFQW4upG7ptYDN7my4ZTNCIO2C9XnN471tYV7NabyDF3B/oLKP3bLfbDLYgJKMzu0copPwcFRkzxzW3+PHHn/A7v/YtLi4uEJ8nIA9GoS1s+p7UWby/RnW1LuPyYrjRRJz3NETP1eqCxaItGjkGpxWV0ZiYR+FNhPTEDfT+xnNAZJeGRMmlGlGOwU8pRbbqiClqGflJxZhAl5Rkp3hXSC06l9SMzvVjax3z5QJna6be0y/MKH/rjbeodWDhYTw7x/drrJhM+7oBWLiqwdUGGTy3Be5uO5zvkJPn1BFaH6kl0ccBVSkclkqyeneoLG8qD/0FzfYEyE3HfhTW6wE/BlCGgNDFxMr3XL644vJACK/cYUwKcXucXFzS64bgRw5Mw+g7mrYFvSWJ4eHlmv3twJsu0ZiYw10zsnC5HLOyis+u1vRBqHTcQf5T+Lq7FclhpmihadoyiHbNVFj23uehofEaSQR2Uh7Adc10OijA5O+1cblsM31fZTBtopBZl8cDttZiylBWmpFZEHQzwxpDVTnCMHJ4tI9OnssXL7BIOcgaUzmcrcBVBCoGc0QnGp0CY7wmRUz1zfXVCmstTVNxfnHOdttlHqxkFXlnHdYYhnEogFyu4+3d/hVefPo/YtoZkYT3hZRBuZusZVsEwbTNqKY1uR909Lnm7IMvGrzZ0ox2+W9LvnErbaiUKgBixKQ8sOem0UxrIpELGkmKPlm2KLRxdCmhRoVR2cOOWrNVCqtz50ofB1bDwDZ4xpQZW6ItFAR6u92SRNjbW5bxDrkl0PwVXT8/vV7aKH/79l2seGzouXQVH6sVnc6baibIOkEImnM8vjW8sWw5GnpMKBsjgkWwBFytuPPqURlkmqULlxYOTFEFczbru6DoQ6Q2lmCzXnVvFC7lXkghe1nXd6go3Lr/Pg8fbYgJ+n7A7NWgLJWtUbonInTUPPWRO9ZwHAMhbXDRgWno9g/5uIuchRGjK6LKWcokQ/m5pQrjQ+ldaJskT9tKMU+LcmU2yU2kOhe+syfeaYtOX1qjcNSVZn9vH73N+keQb82kLaqM8nPO7soFxjhQFdFt8duRZBzO5Wlj4iySIseu5e3QEAahmwnW5qE5bTOjblqEzWQihBR373hqDpiIDSEEtl1kdbUixIgEj7G5mddaQ+WqfHMWuX8Bju58kxef/lN+8OGPmS8WXF1e7owkFsR6YunoQuG01pTp2hnlVWOuF1dVjTEVi/khIhWKGqWhsjCp0d8sLN1cArvoZKqt+2RYp4bBgKpmRBPw4lBBGFLCS2ItEZ3GHBGmQFPmb6aUW90mKXaRjCdYY6irGl8GtSzmM/o+vJStvbRRzohoiVgFXina4sWMEgyJ4+Wck8srkmhS0JxfXaLCiLLXpDAhkYdpQ6UdxmcEI/fdKpyG1iq0MznpxyJJWMwUh4dFPlBporEEFAORfhRO0oxPnUZ3G9zmhHtzi7/YQuyJfaSZZSnLCs8oiagNZ0QejyMLl2i1obEtaX7MZ9UBP3rxjF4ptEok5UhqIqkXs1LX4aQqZIIQwu4Q54NcAKAS4k75XWYe5fHfWgxDHxjHuBubJ0qR4kCIhrZq8UEIhQCNUgQ0XiJ+7Ak+qyVkyQqDkYroOtx2ZOwOdwbvnMWMgXlIvF01rEzFAzLLpHaWps7EC6sUqFT6GyfpRBj6jvOT51gFVkGQRIqqzIrMoEwMWZS4cTn3nri/s7YpZA+Dtg2XV1fcfvUVri4vs7rAZDop8PWvfo2D/X0+ffSQB4+f4qqaxmkaV1MZQ4zCYrnk6OgufR9JStP7iHIznCRam3VvJzBoWqqguPkQ3qAuFhDNI6wx9Di8ZF1igsdH2Q0dFpXJ2qJybn+UFC5pbAKjcsSYExoFKdG2Myqbe4N9CjAOyMvZ5N9i6haeaThDpYVlWxWy+UilNW8eL9l2F6zHhI2KIXpUCsxcPpSq1DUNkms+KLS2JFHEiRGkFA6DIk87Fg2iNSIKa2pAlelOCacjjYL9SnFXBr7GY6R2nI0nWFfzlutZ7ydWac3MztjWsPfKgquhYxM9IWpsMEQRFkYxNxv6/fv86HRDV5S3jc63WWeEsejeZNJaKWqT85UQsyJ4Sjk0XS73CN4Txh6YEWPOgVRB6JzLN7eEyOX5Fd12yJS7LBiKhMToBUk1CcUYsodOJdyTmDnCUwdvCTLxSpOagSYqwrDls4efcnR0hLMKJ4GDceDQJ56drjmf7eOd4BCivyK5ivmsJcmGIB5kZBxGnKtIfoX0l4h2+JDV7ZXOvZU70CuWATslCph+L/ics7aupVl+wMXFd7j9rW/x8OEjrHMYhNm8IawD6uyMvT7hug4vwjh66u2W/VnFdvAYUzOOgSQblKsBzRgEbyqqIMxkQIdpuPEUgWiMTN1GUsCe3BqnjMaPIx2JM6PolC3CZ4oUi4CzzgN/cokm77lCs7GJRUy45Mv1q4kqh7IhBFqdqaVaNF7l2rrtv+CcsqlM8TC5w/y4bjP8XKqzcwO353O2XShobA6ErNO71h5SQktCR0qHgWWQxGUMjCI5P9K2zPAtiXZZP02X0qX8IhMUrfI3XzVXhJRYtoFhyALBOvWkGt6+UzFKaZfSCo2hTTUmKEbp8RX8F/uOb9+5y4pA1wnr7cCgTZ7EpPWNtqtyW6aMNrZtm0clCMxmcy4uL/jkk49xTx8D2VjbtiWlRNdteeutt7g4PePo6IjDo2N8KOLCRV/m8nLDw89e5KK2H7mGla4jD61vCHORO1okRSwWJYn9/X2szfVRp6BNiVoCTRCaKEXCUiAqLi4u2HaBtl8zD4KNifjgCYd7e7w4+xGh31DP9mmcod/2YBLOZTEzpSgzWza7Lpmqbmib7HiM0sQQMcbtivZT2UTt+hYT49DhxRLHAVGKum647SoOk+JBEoIIYxT6MFLVmqptCZJTHBWhMlm5nptEm7JDOT3Mu6i1RjQEyePUbdWw3cCIJccJJV2gEAJKKhin7yqFBAXaoFXIyoOStWF1yj24VZUnvRmnUcbglGPYXLyUrb287uvgsx4KYKPwxvKARfWEdRqIJMarLb90/x2ev/hR9gwTYWKSSigQv0xcQ4E+Jp6HkQfjmqvkqVXDXT1j3zTMCxlhOohIniWfm2MTTBopCmQaGgMkpbPmi1xP9s18WaESUD5hJFI5AzrlYnztcMqh9ZajA020WQ5S7TVEfcx/dA2frjf5IQg7Yd3sbAxax8JssYzjyGw2R6Fyy1jb4r1ntVqx2WwYxxFiYr9paduGtm2Yz2elRlb2qTCBMqhhcm2sdC9O4fKkuaOm5uuSR2kR2rrmjdfvM29zucFohUtCFQWXEk0QZj7feMkaFtUeunZcpgtc7bE2ociS/ZPTFSW7uR1BEtshcHzr1u42NEbR1A7SdcM3kOmHMXfsHN/9NquTP+LBs6dYm/dKiYVtJI2B6rBlPatYDbnmabVGkXK+jGJE6JOi3wpmGNhXI/0wgChqUSy0oUqJoP9q+Y98YaQsTYliSLAZhD7qYozxBuB2ExlX5Za9Ye4iBB9yNGMU3pTyijZUdU2ShFUWieBSYLtav5StvbxGz/OTHa3JKoOuZlS1hm0OpWQMvHew4HszzUe9ZkwVY0y5N+5GU+3k50UpLpTwPHieBc/KB+ywZmw88UBhXYNDdi5PFCStUEah0UghJ0i58RS2dBIINpVaopgdjK0RnESMZjfINAeLKou0GiFpjVYRKwpiRGGoGs0t2/KA3Dy8u6dEdlB7QhElz8Toup5heEbbtrzxxhu89sb9PPFrHBmGgb7vefLwM77/Z3/K0G3ZO5hzxGEpo5T6owal880waZfapDAJOlsMZHfIppBsqmVmBLnfbFF7NbWzIBHRUJVIRRixMZKUotYaW1maumK5nCMHM67CgMSBsbvgF77+Vf7N7/4+l1ePWM4OgMiiaeiHFXVV0w8DIokQslOZqgTW5siqshW935SZoJkT2g9DoeIZUgh4hHq2oH7jNU5XK+KsRa07mkJy9wZImiiGkBRiHZ6IDwk3StZzqjWNHdCmQ6kpl/8pokf51tR+N/qRwQtqvs9QmsrRlqhHfMrt3xLBYssEr9xUoFTCKNAkjDUkJRmR1hZxlnY5B2e4uLoCrRjiSLhcwfOrL9YoRVkGnz/soCI+CLfbhs8uL5DK4UOkP3vB3Znmky7RBceHj55w981X8rBQJqPMswq11gza0mPok8bHXAu6wlNt1hy7GjVNiSLnlVFPN1Rp55Fct8t6NA6UQVLIwBHXinP5gQiV1aSkPxcYG6Vym5NR1xKSohBt0LrCmApXhKMQjai4q0VOBAEfIj6EMg2qtIONI6v1mmEYuLy8ZLFY0LYtIeRxCttuTRwHQhhQKuaSicphe8IQjCNiiWjEWKLJNMSoJnkRsALmOoPIOa5Av9nw9OEj7hzdR7QCAjEFXIxYlUB5VBgJIWYUUUWQwNXVii4kugRGW1bR886dOxitWF1+SLzzdSQkjMtqd76osI/DCCRC8Dht8ONI2zY5D46ZLJJTjPwwdCFtD12HNQbjLOsQ2GjL6Bzb0RNSgEqhrMYnzWByN6jHMygBpQna0dnIpqjtZY9mCingr+aZTs9HgMVynwGLDT1744C1c2IdsMZgEfro8WkkpMw8UzqidcLESFtZWqfyEJ+M4HEat5jK8fDJYz559jzPODGKhVK8Xs1fytZe2ijjDeJ0IjP133JLPlQv6KKwDp7L1RXvHB3y4fkZZ9HwFyfn3LYKVzpGUvBorWjnM5p2QUyaLkT6BH0CHQQI1MNADBFX6esLdqK1qCzdkJRl00PnA9YpjvcqnCRMGR6jkKwtWg5tzoan0JMp58/hKyX5n3IJBdroPHavdOZPFLrPZ7qfX9chZalTFlmQGONuRIFSGmtdLrFoRYyh1MxKXx45T51L4jWbGP3ASMJrAWUwqeTrcmNLpsNW/hVDZHV1hQKGfsA56M4voRtokqZK4EJC9Z5xvWWsDDolLi8vMQnoPEkr9Kyl14rl3h5XVz+gH/87Km2wDozJIWJuNLZZEd5mgKVpW5q2YTFrefTpA0IILOY1YUrOyjmKItRVhXKGftOzHnpM5ehiwKvEVkdW7ZLLUdhaYS4DMxlojUJZS9IBzcg8wWz0HLY+j3vQpvCwZfezds8oJYZ+wDpLU89Zec3oez6YW+4tFoi0bJqB5PNnOU0dz/stXmvGGNEmT9xunEOlRKCQ8CkqhSmx2W45vn2X++99lcO9I8QYfOj40R//p5eytZc2Sk854BQEUIQj5biz2OPB5SVX4jnbbnntsOawNpxsE8+6wKjyjxjiiCQY+wHZ9Gh7hatbeqsQnacCRwLbEKh7RT9G9udtrllKVpAxJgsoj6J4Pnj+lx9/ypPzc4ieX7j3Br/+lfc5nrxxQXP1VI5RoGIeHUopNqukyvA5VaQuJwqboXI1zlWI1nmTJJU247L5O37qtfLcpGg3dX9MlLBJ02fKCY11eaCqyh3qO/qeyih1mzperQO//LVXSN3Iuu9Zx5GLYeBqqOnKjTwoRScwpkAUUD5/RhszdXG53Ge13bA9PyV++phG9rBonFhcyLMhR+9z/moTEhOzyrJaBeZ7e9Rty+Uw8Ku/8W3+9T//V5yefcTyla/njhql8H2fZ0MyEfYVOtfA6PseW9QAFULd1KS+uz5PIkjlsIs54zAgoth0A01TZRFjW5OUZpzPOI9rUoq0acue8rxVtQQVOYsrXq8Ne9Yxm1veYEBkREtGZnMYex3IKnL+WzmHriuuNld4WaC1YykBoyyDiowpsPIj/ZjRVKtsrgC4CuNyU7vRB+iUQAWiFrYJlLb0cWDsV9y7d5/DgwMWswXKVVz1jlc/+MUv2Ch1RvecaEatMBFatry3rHmxrlh54dHVBW/cnvPmnT1+/Mk5lxg2Y0bDemPQGEadWf4GYQgjUkSYlFJElcVwg0989OwFdAOLmSFZSzNb4GymHvgBvv/kId85P2M1BiQGnj/4jE/6xG/ea/jK8oA9bfBMvYr5tjPOZE5oiigJ5KlQpYFjp66nipargEQ0QqPzGHelElFPyOvEg9U7jVZdwvKpLStrz1zzWMl/K+dSKaeyY5/VQHdhtoJgFG/Hjm/Yc2K1gVqIWhG1YSASUKSkSbGhp+EMzypFukvP+WgYes2rh8ecX16x6jtWj0/4hcuA1WtM0jSqxvoMhHkJnF6c51mURqGcUN3eg6qCquJq6Hn78BgQxuEMHxI6KJy1aPGsLs/ZjkMeax9yyGi1welMJlguZuzvLZi3LedEjN3n8uqKu6+8ytOLM6rDQ/yLMywObWtu332Fzz78GEuu/XUK7KJlfbVmrByymPPImMI46rktHbdiZN5ZmI/EZDFJ53YsZfJYB/JloiTLj/ogbDcdbd3S6AV90KyM4dlswZVpWI+eS90jlcLNHbKIpOCpmqrIhsJoGkZ7w3wkYWPP9uQpSVcs9/aZlMWSCkRleHbtk74Yo7zE5yEnpUhaFV21W7VwZzHj8fmG5+stWx84Xi5pnWYbHWehZ9nMQQJRQdD5QCGUCUmaRmdWRAaENIeSN/3s5JwXRvDEXOvaW6BMzRmGT05Ocr3MOEISzkJgePaYZ58I37i7x+98/VVuz1pMukZ/J3cpCEoLqIS1ZKeAzYoHpYivo6BJKElYpXZhrOjrGxIyqHGz9Wpqdr7ZkDt973qp3Vi3MLVuqUmAStBG0xjLq8sDVFOTyKySQGIIYx6YI4KYAW03vGuyeHTYd/io2Y6a9SsLLlCsL1dsz1fc3dtn4QXpxpyDxyx0rWtNEsWm2xKIxNqBdrj5HGsqNs/Pme9nwacULhiCR3vBaUvtLGn0zNuWhFDV8yxWZgyNtWiJHCxmHLQtCtiuLojhkuXyXZ5fnLO4dYStG1LI7Jj50SG2bTHWor0nJVitN+zt7eVIQBwb15LaBhuF0K9RYoljx90q34rmBuovZUxd+R8AfvQkNLPZjDEm4jhyWrX8ZLHPZbtPwCGNoT2wjCHuKI1VyqP5QvA5LQkjJnoosZhKARMHtiGibM1sscwc2aJ5k5Jwfv5Fo6+2RseU5TqU4IxQK4hac3vfcbLesO01n5xueP3eLVozciqaJ92Kd+s5LsGgY64VlaE0rbUczhf0SrNG0ZiRxhu+3sy5bzpcVFyJ5rOx5yqNXF1e4JPh4TCShoFj25KSYZs0axkJEU5tzR++uKT+0PPf/MLXmO84p6kgrdMDc2ht0JKBH1N0VnJOByqlLDRlslp2bpnKdcHPG9j1DA6jTb4xvL8OYSdua+k1nartk1HG+LM0jyRC2PSsV2fUFKV1o5jPGvaqOaouenQqEcnlH5EsJtwkw9pZnjjDZ2fnnD99zqFxtBjqytDNgHGEFDIVMHiieJpk2esSd1rLvF2goiIFwR3sc/H8BQD7t79BSIIfM5K6qBsk5TMgNh9O7wPj0OON4qCp2Z816OS52m45vTwDoJ61pHqBW87RASox9M4hbcXl2DEEj0VhRJVhPjYXK3QimoQYg1GwUYqVFT6VNd+yFZLAxixlkmuTquTq7KzSOYcyjlW3Ba1prWWtLY/NnI2q8oRuAT8E+pD1eCaRtBRiFmQrkZ2PReEuCSl6bBrxkljOWuqmYdttC2GkDI8KXzDNblXPd3UwJOZwbuJ0WmG+V3GVNKskbPzAbK44267YDolNGdWWKJou2nKsE//Z/hFSL/le9EStEKO4NXjejIpbUdOPPYMIMXoCuWXGaMfhzHJbWyRZQlA4EQyazo+MamBlDY+vIk+eXPD6wZzKOaxVOGVxtqiQkZXgkuR5hqqosZlJviFFBM/B/pImxgLyZnTj81zWideTb19tyjzfMtPxppbP9KcnQnsOcX8WNlICJgraR0ieRC47dX2+5bQ2aKNwtaNtKrAaUYrG5BB81DVV20IKzNs5Nm7ZrLc81xmdDSoxaxqWiwVX8QKjFIeq5htmzi/3sBn68vkVwc34zrxMm3IO3TSs15eI1uxZS2stHz95RpcmhcNEpRWHiwWzvQUouNxGnl50nDz/PZxz3Hv3TR50l0gCrR3trKUjILXJBh1GLBpjcwfS6dkZXiK2cWijIHSEmMWthjHSzo84GUaCFrRcj/sDrrtByldQiTF02FmFAF3YMuo9pFeM45akElZy0/4oZfpzKjW2ndpE2tW+d89YrlUHFvtLjNU7vd1s0OxYRl+YUfryAaemW4qMffb8kaM7+zQzy3breXJ1Rd069FXHNhoe9BsW1qF1oJLEbSz/8OCYd1LiUbemWbZZVEjGLBbsR84FVj5yGgaeO43g2AvC6IQWOKgNV6LpBkUTbZbeiIlOAiqBiY44Cs8fP8s6MkqYNY7FYsZs1pKIoD0iAaUsBruTpJxE+JJEum6Nj7mxdepEZ3pIwDTANI9zyM27WmcqVt/1u8PwU2b3V84JgRwGV9rs6qlG6aLeNwl2RWIU/DiwvixyAFqhrMmASbOgG46JWuNTJISR1XrDC4mlUqxIoqldhejc4+qScEtpXunHLOtJPkzM9/i//PF/QNsZy6OvEGKkuzxHhgFrLIvZgqPDI15cXSIkdArcPtzn7dt3SMlzue55dr7m04f/BhMf8Pf/wd/n48dPqQ4PMFqx6Tasw4atCfQmsjRZhEwFwTUVYwz4kPN/4zLJ/unzF7imJWlFH3UewDSvCHEgxp6UcbtsjKUeHWMkJI9VinndMibhsu94ah1Xyub6J0LUFpVKO6LKjfSpoPmobHxKFR1cNRlZNtBUxtxXTbVTYZxQ9Rh+to3vr1ovn1NeXubOBGuprMm5EFOJIHF865jDg0PWpxfEBHMsbxzeRcfIoyqPPpuJok4WNY7Mup6LcMVl29IkReV7uvWKC0m8UPvMk+bSw1XSvFCK6BZUCLdSz5HW3HIV0Qeep0gXhZg0MQivactbOvFe42h8wLqKqnRJnK9XXG5XBaKf0TYNi/kcUYKp1DVgozXKaKxyjOOAMi4zWRJI/DwBcApPb07JmqQvw88JTSexZ+vcTi/2Zt9lBnYzW6iAvEyd1TflEhX5+7lBuszjSHluSSpaqiFmka4Ycj9oCiGj0KWGa10RJAvX6KSVXJKZkGJtHM/PzlBYLrYjq6tLCFlYufMB0w/Mm4qYZjhrqI3icH/BGLasVp5nZ2uenX6PsP6P/PZv/gY/+LM/pf6Ft9mfK1xdMaQ167jh+NYBB1bjz1Y4Y7C1pVnO2XMVIUbOSpuY9D0pBLQIlavY6p5BJ3yUPEGtSE7KdJOVMpbWGqsdnSied5GLoLjwFT+0mk+tZbDXuadIxmy1JHTKUeFEe1GUMlr+g1lbSMrvxYgm5Rx4J/OSv8ZxvC4o/w3rpY2ybhoO9g+4urpktR6YNU3WMhW4c/cO77//Lj/4/g8IE7UNxde/8nX2lgs+OnnC6fkZQ1BQGYLR/FnX8RobOq2ZbTwLP7IePBd+5FMxvGP36IeazmvWRjhrHDr2/NrxPm9p4Zm2bIc1mzCwGTyEyLEV/vHRLb4xsyRn+O6m57QfmTmHVYpYOvxHL7AJnJ9fYcwWY+Bg0dA2DU3TZIUEo5i1GqtrtFEEPxIlhyEUg7g5n2RSa580SZu6LdzUz6+JGldXde6//LnuM6JT3JVzYOJCFdzg5jfLXgvsum2UmmQ1ypxKY1E6EKaGaokklaUrKlEIGpMUukzfyj8gu4ChrbLKm5rx4uyMgo+xHcYc9qP4/1D3X8+2Zdl5J/abZrltj7/nmsybrtJUZhkQAOEIECQFkESz2VRI0d2kIhShaD3pQa+KkP4FvUih/0DREYqQ1CRFsrtJgAAIgCRQQBmUy6r05vp7zLbLTaeHudbe+9ybmbgFFtXUyrh5ztl2rbnmmHOMb4zxfcWgYH8yZr1YgpcsFkvKuuVyXjMrL2jmv8tzN2+yuDgnC55fQfGSk7SVYZ3lvDvMqVzL3vkF69qhmhZP4PzxI0xjGIwnFMMhZr1msVozKAoSFNJ4Eg+pkoR1xYLArG1YS4lSkIpIEpkET4Ni5j2fGMenlWNmYXhynbutZZFk2LjKxbGUHSeuE+Bll1bxdJXJ9CrSwZsNai6IzBtZmjIcDDBtixRRt9QDTVPRtOtnsrVnNsr9g2PK9Zq6NlRlRV0bijxHKcWqrPj2d7/H7HwGIaozCwGf3H3AdDxCIcithuAxqqFKJe8lI/xZYLL2SL9iqiRzF5h5+LZd836VsHIHGD/kwnrOZw6pS0y+ptY1x3XOV1XGewLuGcvAB74+yXmJBbZSzNyYP75M0aMDbosVe9FhRXiP1AlOClQROrRV0RqJaRouLytccCAjKKCylIeTfdxgn4BCBkGnIUoQPcluZEHrd9k8jyV267Lm7Oxsw+TdsxeUywWTyZjRIOfs/Ayt9VWa/eAQ1iC86/RE5IZcbFMscKWKrAOQQpeblRKpFKqLf9IsRaUO19YEKdDOx/hLCcY6xZKQ1TKizX2JUCfA811fU7cNev9NZFA4b6PWi/Ms1lV034Un0TEeXDeOoFMumgZjLQ4PIdJ4rtqGHHhz/pCvNA2tgDoR/NXjfRoJzXJGFUZ8/fVXOLcVNsspRUKV5DRSM8hH5OMmcvGWNVVdMtSK69N9biYj7tLysB3w2LeUOQxs4GRueX045L3W8/sXCz5tWypaJpni9eMhF/MJrUpw1nZSHJEwK/iYt5YdNtDLNgi68ME3WFeTat3lp+O9unnjBrdu3KCuK3SSEDVPBNlQc3Jj76drlN/93ndjpYqLgq3eOq5du0ZR5Nx/dEbbVCRSR7Ef6xkNhnhnWS9WEZQgruC5TNnLE5at5Z3geT4IDquacaK5aaB0cF6veccrKlOgW2hkjfWSB7bm47Vhf2gZ4rleFNwUKd83c15Lc35VDUiDxwrF4ybwyTpW8AyvDalpmFRRt172kubd6uhCoDKWRGqE6AZZRmS0LS1LNDYdo3TkgN2oRwg2seGGuV1KsiwlSRKWy8dw/z7j8Zg8z2maJiKubYNvmtifqJ++BQ5HU1Ws1ysMBqU0KklJlOr4b3dfvXWm+9+8j65Tzx8zLHLEsuk6w2JnfpAxPk6kJgRLrhISLIlSBN3X0AbKHj2W6Wa37l1bpMJ6qNsWQsJkMmGxKLlcldgQC0JUfkCt9/jwk4/4pV/8qywXc/aLFIlFBc/AxN3da4kNHqka2mBpE0EtA5X01D5gvKSUgmVqadc1rW2x0xEhyxiUhlQ45Kjg3CdcFEcspznz2YxRWpGfHvLdD+7ybgiUSRpJqNOENBuQZlnUD3EhNnb3caiIJNDBd2RZWBCRLMsLS5IKhJNICVpIlE5onIrUop2Sd15EacaAQ6eBW7ePf7pGua7qzY0XId6UdVlFBWMfUCo2twYX0EIxzId427I3GqJUZP8a5gUiOISpWdgFj4qMorYcO08ePMdK4kkgH7CqAybUkblaVFiZcEHgo6rly0PNSAWG7YLnZM6BkfzS3j63QkUpLFYq1gjqRHL9+WscvjphffGQ+fszjlSO9kQXrzNM2a2QJkTNyxi4xw6SWEIlesh02+wcOsidqy6slJLlcskH73+ASlK+9rWvMZ1OOT4+xhhD0zRUqyXf/9Y3+OC9d0mzqDWB7LsiI7Hz4cEex6mjaiqscVRNzaqMytKxsz8ivn13vuzQXBkEAsV4MiFbrzZtVaa1Mf0SYq9gawzlek1QjmAsichJ0SQCrJZxIc3H/Lff/GMQEj16g75/s28ibo3DGUOeRZ4giWI4GrFqWkTbdux7W0BLChgnGUMlsW0bFzQfa29P94/JshxBVGmumgovLI1dY0wJJFgpqVVAFQIGIy6CozZLEhVoaTliSKhq2qblxtGU79crpK2psz38OOH0jdvMa4tdLxlai/JxXjoRc9DWVfjgSLOURCsUDiliq91qtWQyHvLcrVtdeBCoqgrvDHhBnmQ8/HTNcjHfhA6ibxoPlvc/+DHpePDTNcrQl5D1hknHdBriVJIdWiilIE1SGhcLt9dNQ11VKCmx1sfCXe+oA9Ra8EgFXg8JQSrmiadxkhvpiFmW0l5WPDiLk5KgqDV8ZDyNizuSsZYjIfl6NuS5/SG1jzSBwgsIGdPCcFwYLu9fcPFoTn1uqPdGnOjAMM9jnadvqBPJwKmNaxJCdFe8iLib6iozguy8xBCuxnb9pJMSLSOr2mq1JB+OkEJijGE2m22KDLTWaJ1QVbHEI9JHaHoyLusdaQ4jVTBhtCnHa4zBmBbrPMZG9vK6LGlsbF8SQjCQOUjBvF2zXM24/vwNBhaqtkEah0Rgg6NcrzmYTpld3iM0jlRFPiTnO6kAAX6U8XgxBzkiyLRbjHb7OmP9alnVWBsZ01WSMhwPqRcudgntIM+Z9NwYpUy8QAs6ACVgECzPZlRCbeg+DsZDslyjkwBEMqrWeirTYFtLXa+Z+o7GO4GQKkbacnuiqILHPL7Hq8ZAKvHLBa8WCSd7U2qd064rzMNzdGu4LQyl1Ky0oM1TGt8icxnpUfMsFua/c4lcldTVkksdGEz2WDeR6xbnkD5gnaGpY14yyTKqpo0NDiIya9Rtw/2PH/90jdJ3VSxbvdGAcR6dpEgZXYKofBTdVBsEoFi1FlAEIVmbhkrEOM4pSSUkRqUsVcFZoXhPtcyspCpLQqo4mg4ZLgwXrqYpFFbmrBcls6rmWp7SSMnQVbw59hQskBgSFN4JWqk5euOrPFg43OMaffoV6kHJcH/Icv2Qk+sHDBFkd++jyxrniC6L6JCMHeRMdol/L9iUkj1pkH3zrurQPyEi0dZyuSTNUnpl5954Y+pE4nxMKidpBiLC8sI7hG9xwqKl7jhUIS8S0kFCv0GLrnnYtG08I+8J65aKQL1asn9ySCsEy0/uczRKSXPIlEYJyIsxDxZLWuc5neyRLT1BaLzSm3P8YFjwaHaJGv8sUuZ4Z+gJp3po2PsIMPnGkCYG6+YMR2MOD/a59+BRt2jHSVNIx5vHU4bCR4rJrh5YOous2ogUB09FYH0/INOIwiZpQpplZMWAcZIhBgVipLu3S5q6RghPcAZpK/aCx9uW54cahKCxJV/WCev1nCVzyuAoiwaP4cvDKCi1Egm1SFk5cMpR+sDDxjJb1kyqCidSjHHM7s4QLkVlGct61RWXCNq2oWlrRsNR3KBkTE8FZDcXAuJJvtH/UKMcDIY4Z7HGRsmyQCzTUpokiQpQSig2gq5E6N9JjUjirloHj1Sy4wkNBOdoC8X9NCeMFA9X51wGqJVDVSV7QfDmwYAkGfJISVbBc3AsqFcPaCQY4dC+4VgbfO0ISnfahhIXHMtsjwfDAY1Zgh7ShIR3zs558aVrtF+6jg0VJ3uawYcPOP54RqpBa7FRmN4Acv3C5ENsldp5LNJrhs0Oupsacc7RtM2mgKBXiIIIIiF2aCZ3gJzUQqoULYHWtbHZV/eAQ5cS6T6o1/LAOxQGkSRokfBwtubdiwWPmjVfrVJuHSYUMkEFgQqSy3TEPRRV0CwenZPICZ6tC+2k5P/+w28DoMZfj6BTxzl0hYNVdLxCPrAqS4osVkqNxhMOJhMeX9wHV/LSiy8yrJe8VOTgOk9YSJSn63GNu3PfWKdELMc0jaBtLeuVJZprJwsQoHE+UrF4R1Hk7I0H7I8K8lx1Nc3xPhauQjjPQb3EGI8RgjrzGAROSRobaE1XHYWgNVAFWAvFKhEsTg+4MJ5z07KyLYn0XK5W6GWJz1N8onDBIZxnOpp02ILqRpKOR2m7KP/UjPLweD/GkesV1bqirZpYKjcasDedUJc1QkiW8yXOamSa43UcHKUlWiV4laLSgjTLYxVKJrnAkKyWTOsSrTNCW1LWFQoQPvBI1QzSAbUXnNqW25lhbzKJ1Tw+pmQ8sGjjToe04BNynzB794fc14OIEL5fY60hPRxw67WvUocSm2Y8OJpQ2Bb16QUHQaAJSBFpkHoB1F6dqmfEvrpPCkJQ3XMKITS9bF3vufXVO7vvUSoFqTaaiH2BOx1/0fnFktwsyNIBWZLEetgsZTIabmH4zof01hK8AxvZ4YdCcZOUDz2IvOB5HxjKEoVHEw0gFZ4HF0vuW8fEpSQyRdDx6gQQ6YBPLy8QIkXILFbP47d1TH1uDkBIvIzUGj5AXdYEE8jyFLf4XRJteO2Fl8jvf59JFnOjXbdaN76xmN+HgHBdDbDoKpu2+flYfhh8ZE30HmNjuOKDp1peUM7mLAcJWZGSZhlFlpFkGVlSoBTIHEQSyJQiIzL2WRtojaMRvuuZDLTeUQTBQbB4KRGDDGRCZQV1UDgJZ3mgGg9YI5iLjE9azzxIhuMxxrlYyCEAGZC25pXTU4z6KecpP7n7EXmeMx6NuXbjhLZumV3O+OGP347oWegS6yHj5u2f5fS1X8UUCQUhlrilKWQpVgnqto1d38KBqDjmLmZ+h4ycTEQiLtO2WC15qBtupRlvrD0vuYBNYk7NCDDdjbMe1qEBKUkJSDRTLD/jzrimNMLVjLzFpRK+9kusw5zFYs7+4IhMD6n3LX9WNPzSWjJIJQLXlUR1Rc56WyYRLSHmn6J7El/luzI7lWSRAxS3qfrZlNT19a9CgEpAaIxvaV2c8J29AoFVabm3XIOoGOSRWmKQp+zVJQiPlopURZoxiUQKSKWIC4ivUT7h3XPNd84rJvkFr50k3YITXSp8y8PFmB+ZKUfugjBSBBHZ6ZqgaacHfO+jDwjpLYIaR4a7TejSu+txTGLRdxQtGqSaXCcgJdX6El9/xMmNm3zwzrt8bVKQCLnJ726M2sdGaNW1eUWgjVjdFToGgBDd5ECU0PAdezxdrlTolAYPxmGEI2kb6pVBhVWHoHa3TwiGw2GXrgikRcYgzSnSKAlofcfmFwI22I7532KsIfWGPQFCWG4ogfWxYL0Vhj8VCd9qPTorqIzZbBbCW77iK37zaI910v50jVJ4aMuG87Jhpi6ZTqccHB0AguViSV03mKZlZQ2XInD74BCco1wvqBYrqvUKZ2sEbUzEu5a8aUilwQ4zDid7qHlL41pMlrH0DY4KLxw3rObVRcv+eMT9VPOOAolGhYT9kCB9STAC7QXOBbQIDGXger3kdjJAC0M+VgwOhqwO4L+/94gfvfcxw/EDbt26xd44o6ob5qXjWjFCQKfQG30rISLre5B0zbO9i9oXwsVO/aAg0WncKTuG86ZT7924sJ0LoxMd/Ta3rQDqN2AhIB8MGUlHEILgHbauuVyuuVjNESKQas0gKyiSlEFRkCaq0y2JdIizkHKmDqnGkksn8G5OCB4nQAVHIhzT8R4nap/1ouWx9RwqiRNxkTFyu7uH3hJ3DHLzTNgpbBCC2rSMBgNynWDdanNdIcK223+wrYbp6Dl6KFEQNpVHu3tLX2cauvGMY7qT4A2iK7d0BOfwIapwiX7B647VatWxQFjOzs5jy51SMbTSOv4uJTLRqE5aT6uE0ShD64RA3GUba2iNhQAJAeUhT3O8j8ri3jvE2rBXNfyVsOL4p22UiUs2Nyj4wOX5jPnlgsGgYDwaMBqlLOdz3LKhfPg+3/uX/4SAJxc1SkVh1IEzDKxFCMiE5dhWHE5zbkxvcPn4AbZqSRCkAZypUNpibM35rKYpjrhzesiPjnLWZzWmDcxoOMjjwA9Lx36QnLTL2HQbGiamZuxS6j3BzRdPWVKSv/0d9h87itKzPF/y4f1zDveHhFXJcu2oJppimJMPx+iOIuRcR5Vnh0DKrqxuM0lgpxEl1kmKuH+GIKiblhDUxkj7qhytkpjTpUux9Et5j8DaBu9MJPASAZXqmEdVHcVJCCyrmvmyJFFLtNSxjzFJSNKU+Tgw2j+mSEEuz5DIyD4YoHWOVQ1DZThkTaszvnnxkL+aZUySAo/lRy6Kx4riS1ypVOh9y60juy1qENB4x6PLCwZZjne7k7ArbBCR1YFu91MdMIhtCV3pZjRgcWWR6vbPKCTkPMGxKebfxuQC/HZHDSEy0YlOSDZ+VvzQnjOJndx7PJpN0bkHhIqF8dHFjuknpWOrnE40w8GYAkHWtLz1+hssm4Z7d+5sRHTzqmF18ZhPlnf4b37xOgfPYGvPvlOGvoucrr8pXsxyvmS9XLI/HnB7/wCGLc3ikleG9xhrwVg6MizaR2FYhSFJPVoEjGnJWHNj5WiTIe8nQz44X0YqkCB4XU15bXIDu7igPhkSfuYNPloLblx8wC+FivttRWM1lw4eFpqPU83A7zG2kqGBTK65SDUPpODRB/c5TRsabZgUOacm49HaYuaXnD96RLpcsLaaWT3jhRcnnB5bklQRhKJuJ2TrFO8VIZRd/+VWTUtEm8N6jxcOLSEN0ABtiMMsusa8qEbsQciY55SxBct2AJEEEttglUESGQUCsVE8hgixwkcKQZoPCKnv2OkDjbFU9Qq3TPmwFsxfGjDIGuTFkHdWZ0wGGWmS0oYAKuGvpCUvtXOcDDRpxbwpUTgSn/Dtex/F+54c9xNgsyUGJVAWJllKbVpK6zp+o/iSNgSCs7Tz76K15q03v8Y73/4OlqwT4FU7rW2RqFrupFs2Dd+9MXd8uEJGWTzvwyYVBzGGEZ07LUTkZ5V92N/XEPdUY4FOzMeiUJu1ZbMjiz4dK6NhOgg+kmX5YPCdCFAUx1UkMsEkGXfnDSY/xZiG6eEexydH5HnGc9WCX3N7HJgjRnr5TLb27PLqu45EENDliKRU6EQyISN7OCfJFEeTjD0/Z9p4ClOTmpbEBpRoOTjKeP7FKUaU/Oie5KRMeM3HONEq+L5dU/qK15IpfyU9oBiluGtHfLB6xPv3P+bHswQxv+RmsBwtH2DdkJlVfJLAGSn3ipzLRNFmDm0kUgc8BTeLfV7ILZwoQt3woKo5D5bWtDhXM0w0VgRKUZGPxii9jFJuMkGECSlgOq13ESLhr0fgu9yldz5ScfiAloJGeIKSlBgubctISAa9dqL3GOlBBQSGsWs47nKWAjhoKpJg6FvCemdxU5aKp6dsRbCh01SJIlEaGUaMhgdcczBZPUa0D/lodi8CPEkKIeaSJ5Mpx8WAUTYiu3WKddBUBpyKnRldrHhlFgTAeRK7olr8O3z2BujT7fzo9Pq8N/jlnzDdG3P3k3sED6bvWRVgfeyqMK2hqmr8uolN9CpFyMhssGlwJe6KbQgYwPmAc4EQtoYmevDIRZqXDR4XJFvz3h6i81D6x0I3rUOXwtnyHfYucn8P+l1eImwMLVrnmLeWD87v8ZW/8Quo8YCsyEGA9J7i/BP2mdMm+TNZ2k9glFdXsF4HQhDdkeFwyEBKVvMLpEmotaJIFVI4ggyQQDYesvfydeqjlCYRXHtxnzc/gen3H6B8QzbyBLvk9ZXjVweH2GsTfvAz1/FtzeJHnvc+uMQIySJI3nUtp8MxpU05X9UsnGddOZQBlWQ47VkIhQw5zmf8sXV8MPPIeoEvcl548+tckwVnF5fx/l2e8xVt0M09PnnQ8OGDNTqBrBhwPghUmcVkEh0ShHHI2qCcYei6TgLrCK2l0mAHgpnWnB7f4LxeYNoFtUjwLgIyIXikrfi5V25z/uBDvjS75HXT0ouY6mAYG4MnwXcs7aLfGa7OrM0k6sVsfbCIYBlWH/Nq+xBVrUnkBSpPMK0BIWid43J+ydl6SSI1A10wKHKyYkSaKszxCf/6f/wj0BNkdtrFjd1uREC1c8zs/4NpHyFW7+D2/+fI7Fp3etEazPpdBJaf+drP8s4P3yfZAa0DbCgmizxnb2+CtgFTNrSNwdvINldXdVTb8h6EopKi8xwkSB1jzh3w6coXsHVhr4zZZ83rnd/DU7+LLlv1BHLa7aguQCvhMQ1mOGZQFAipUS4SqBUGBssW3S5wov7iE+mOZ6/oefLvEAEQKR3aWWbVnHyokI0hDQFrNZW3+ElKsj9iNMqYHu/jn7/F47Tg/mpOlmgO2jmFcqAsqyTw2vSAnydjT2m+by313Rk+BFIm3PSaReqoneDfy8BEDvFaM/drzpzBJEknHAqHxR77e0WkIXQeVSgemRFpUWPNmqZ0VPUFi+Wai9klZ4v7PP9Lr3GibnHn4wecXSyoW4NOoDm9pHz5NscvPsdeNmR17wHLT++yt3A8N5uTuwrtBUFIGhVIE8l5MuCFGy/wz7/9Dd5ef5MsG5CqWFKXiEAyv+RnnnuOw+KQo/mCm8ITupRED5pEPqAQvZK+XjUENtsHbCZmlxkFFAHPsH2IDgbcgICnCQKhNEprghAUIkcnKVpIKmeZrR8hqxmjLEcMB1R1DTLtdoYenPEE3+Au/ymHQ8Ov/sJf47/7wz9CtPcQ2Sl9S1gIgbD6BkpKqrKNNa0iMiM4IaJeKV2U1xXcKwVqkDEYdCzqDCPC2oFl67ImGMtiXVJVJcELEFHCXaooehQ92YDuNjYlo6JW6FDpOHF3ciyfY60b5kIRGQ68DzGE2H1N9xkCgROKWW2RQ8WgDw+6MrtBW1MYj3I5uf8pG6UTW3g/uq8ahKfIAgdKkeO5nmn2TydcXi5wVuCdoq0cq0HD0aBlMLyGHE45uz9jWXpmF2tYLkknhhOrOBkf8cLNF/j0z37Ij85nrBYBfXfOZaGZZxIrFXkLi+WCx0dHcHJC6y3nsxnz+ZzxZMyyWkc9w1FKU1Z4t+bi4hIXAmvTUrUNbVMjO8CAjnTXZzXfvbjHr+7tI4SkkZK1KrBixHwwRJmWTx8+RB1cY68oWEhDuzijtpdMUofXGSZJcUpSLxSf3D3nrP0BRZJx+7VXOLr+HHuTA7wH1TaYs0f88Ft/wsP33uWFo4NItd8BKKrHIb1HBR+pK1H4oDqGhG2cBaKrwfUdJ41GdN3zOkiQHhtis7MPIjaAB0GCRHqP1oppqlGDIUqlSJnzyfQo6owOvwai/04PwhGW30b6C/4Pv/n3udhZqaXo+Xg7vsPQydEHhxMBI2BlGowYETAbkxAh4G2UHVAhNpeLnpWdGLNnhSYpxoyk5oYQtK2haSxNHVMP67plWdVUzmGalrSMjQ+DfIBTQOKjAjg9Zr5rWVvDDN1JxU2xl2ePY0sHMm2OjmZEErBomlYzPipQSYL2HhEkMggy35CGJeCotWb8DLb2zEa56bXrL6BbFZNUcl0pUim4NUw4zTQP0sDHF5bGZYx1TtsKzs8C+QQWzV2+9fZHqOEYFDyslohCc2uyz53r1zDpmG/up3z0eI3zgaqxtGswqoPACbTW88OHD8nee6+rLLIRPIGu1QnCR590pU3bO+Ccw3mHEgLdJ6u74noVBJNGkKwcF+clvhYYmWGyAjeYomRAzB/w4afvcjRbk4SahV+z2p+wvnWLqmm5WJXUTnJ/YHjgHuMe3OXGc89xsr+PCIEsyxmOxjx68ACzP+WDqmQlA2dthQ+jTUG7FAHrAkFlBC1wvsXVDWnweKnoq09DFwgFRMfIJzY7W/B9z33Y9HraDmXsaTJ7smohYzc9ODyOh2UZdys52IQpAMEZWH+bLNUcXNzlfr4XR1ZE+s9+kQjNA/Ar3vjyV7nz6b1IIKYCi8ayQpL6umMUjK1vUXBCkQRB2hNR7cw0unymwuKDJ9eQJwoxKqKxhAEmKDyCpmlYLUva1kBw+LZlsawR3QIkhSBLksj7IwSiq0LbeL6+16eJ/ZMxZdOP7facdj3HyhjqENg/mNJ4g5RRY0WGWJ2lPbhuL3uW45mNcpzkTCZTyqpkvl5H+MEHbNsyzQwZgomDA6VJjoY8xHHRpIibtykO9lhWhvvOs76/pq0TLmeX7J/scXz9Nu1Fzf3LNT8I77PSl7yflCwHCUjFsq2xIeLcwnmkDbRCEWRG2XqCdTEZ3Xsnm5Hrg/0OIZUCLx0SSyDEjpCuCEBISWIEyeOGdgFlaZk5yfC1lxndvs5FNedYVByIhkla8vyBJxkltHKff9uOqJIcpTVusWLVBhoMrTJYAUEphAtgHPPZJcvVCu8DjROIdEwdUqxI8F6gdMRVTALrLOGiGLIscrI0ZfTwgsHlCt3J0ydZQl6kKAGmbXDOo5UmS3PquqZ1hi3aIVBKg2tjWV8/Afs8YU+DCaii4Dsffxp3yOwG/RMB8GYOwfArr79BsAvS7Np2qGWXNhCSIB0ueJIkwZg2glFOsKgCi1azn4yijouUpKlgkEjMat0VBGxLCdneSaDTQfViC8aIaDgqgJJRBGmQCQ6yISBIVFTRsq2lbVrquqGpa6xx1E1JXcdC/jwfRARbCFRH5xK6xeFq9rRfogKiEwwEKE1Dg2cwHWPx5KoTCQ69VAS0qldH+4uPZzbK/+pLKW++vM+ySfjOQ8P7l4Y7Dyt8LckGA05GhnEmIJVoaTkoMj5N92lefol0NCIVAtUsWb3/KfPlklBd8OsvDHnzAAZna4rKkIY13/I1NJFhTQmBkmCt20wuK6MLJgJIH9WOeuQsKg7vGOTmrorNSidED3H3AyzxAZyDj8oV2VhiT0acvvoG/vZt1o/u8BtDA4vHtLMLRNOytC3FXHL95ilvJmtyM+c5VVAeNzwG/kQL7rwXJdCckAiho4yds/QVKFoIJlnBYyeZrwzWgA8tba6QqSbkEqlbgmtZiwH1yYQ6eI4v1hzkK05OLcWwK2pwCW3jQQ7QIkecR+8BF3DdKi8jLRsuBJCd+rFzOKXwQuBIYu1ymvHDj34UkfVk0qmbdftV/SkhWH7x9i3Wn3wLN+2lAURHxNztlCZqZownE+B+HOcg+TQEfu/OY26lES3O0oTpKLb4jYqC6ycnjN2KAZLUeoJpMG0NIRJF42IOOIQoVydUihCazXYm/WZxlkFERn4hSTSkOmE0TKFzIGMqxtM2PlJZLlesy4qmMhF5FpKAQum466EkOs26etr4PcpHYvKFN1gCiU7w1kMagxDlBZmvEbhtSumnaZS/+ErBzb0ZVjneemGPGs2fvuv5w2/eYZTX/LWff5mpDjRlTe0sLQWL0THvFyN8OqBFELyk3DOIwzv8+rUBv/DKkJzHyGyJfrDmS41AyIKyLPkjEyeQ6iawDeBk9O59l4IIoWMb2xgfscWs73uETV5+I1fQ4eCRPCrmuCBQa8kHrWE8HvPqG6/STg750Qcfc7ReMmvOadoaQUYuoFWOykq4qHiukBwPNWNZQeY4wfCD5TmpafB+QAgqKoERIRjZqZdKGciVQkjNUirW2YC8XTHONGoSu1EK48lkwF2UuPSQR1nBg8RwdDIlnTYE6Wi8Z123lLVjXS0QXpGTkU9TmlWNq2O6QMge4o9FDdtQxJO4GGdqGXVeetRRSh1TCsHjXY1ffZvnTk54sbxkjeZaFqXUrT2Lxeod+bFbf6/7BN3FjXHnqWTCI2s5zBPqck0zm9PefRQBKKmZ3D1noj3TJOF0POVglDEoRiRaIbyDtoourHW01mFDC8F21KoO6SMRdL8jye56d6lx4nwQSCVQWpJlCUJIDo8HOBdl340xOAvLtaE1jra1lK2lLGuEVFGhWhkSJTBCcGEsttsRcb7rbQXtLKmrYnztRRSO+mka5ckko5BrjLAUzpJXhqNW8+X9lMOhIQ9LhkJSCAhaMjgZcqks7/aNtQSSVUvz8WMa2/DD2RlvXV6SaUnbKkJryBYtL6aaOkv5M2VZGbOponDW7ZR97Ujk7RxPwt+7MTAdlB49XdEtXCKusCKyvK19wgM/YGASDhgwclOW8xkfjo5IXn0RL/dI53fJqzuMlitYrzkOEisbVoWnSDPufvKA5dwQXBpzdjsupOhSBkJGmXCtYg/i/f2Cd1884LVVSTo1pAOPdgmDNlDWltoYTP2YkzTH35Ls78XeT4dmVhs+OrugbAMWhQyOUWK5Pt4nGw5wD1dgLcIn9MrTiHgO8VCUHbGtCKAPTqiabyPy50Gk204QMwO/5NWbL1OePUL6gmI5R2uNrT+Moqgyjbld0Y9/9w39TisFDV2qIC9I0pzWx13aOM9Z2fLYW6wp0XKBloEi11EuMMvYKzSjRDPVBXkiyWSgEJ7EO3TXrhWlBP3VBOROZNxF4xA6hvvOcG2nQSOVJ1MAksFgSPCxaMYF8F5grKUqK1ZVzaJcU6WSxlumkz3qqkYHSbOqWLrA/vwC7x6jOrLp5KdtlCNZkDiHC5ZzA+99+JiP7q7I/YDCpdSzljAtyJXGO0tpSrLW07gVSo8JrmF+fpd6/ilvDMYcjzzl6oJ1SLi8UKxCRpJk3DCKpZboROBbE0EMITf5KNhxpz7LOAUbkVofrsLY/fv6DvooIye6hLcEq/CV4p3vfsRXvjLh13/5r/PHf/L7PGznhNEBnzxyhIeWnz864ZXrE4rLMx7WF5R1yWFSsJxV3Ltckw2uE1RN4g1NE7lag4jdJCARQaKFQOsULRIuErg38XxpOAI3A+dIMCSZI1cZF1iOR5LDgcaPBa5cEFyC8ZpZUzEPUKsEgUB6hQmCqlyTC8H+eAi1wBmN9SpSXggJSuNVglMZsyLqY9ZNRWLTKFU3OYkeieja1ZoPAfj1l1+E978HnXvWH1KIrnZ0p0qmQ2wkUVIOHTVphBMR9Q5dU7mPFC1ZokGlsTJKQuMtD+cL3GxFohISraC1FEGSp5JhITgZ5dzcn3A7yxjmI7QUCGfBWfr+X+n8hhZUiG2vi/cBGXqxwc7r2mVuDpEyUohA0vXa5jIwyXKu7U0x3rNKJN/86AFFMubs/DF+74CTg2OuHx9we39I9v7HXM4vIFEMdMrkGWzt2fOUbUmQ0DjB44eBi0dFJFcKgdna8fHjwMzWaO2YFkNqaxCrNbiHtMkJwq+pPrrPyXLJL54oXrpmSAeHtGaIF56P7wfOV5IPnWNl2tjaFaLar++kuvsi5Mh64p/aGeMmEEBue/6uJn1j+Y3okLENnUcvfRck4yQWKrcXa378vR8yfzAnVSUf/c6fQrHHoC4Z+JK1XmJwECQnWcZgnBAywc+d3Obmcsrv/vhD1muo1g2+N/oOkBcdqpekBVomFLXn1tqAWSG0QyYx/6u0JEssAwWTKaRZTAWsrKfBUdmSS7OmQaCcQgaLE0M+lRPavRMG+4cc6QGydFRnJb72WOuwQeKSIe3gEJ+O8SGNII0W/PCDfxUnxuSt6Gp78HaBX3+bL926ycnlQxoifYb2Wz+A0MeUbLbIuEnJThAqGp71HkWkYvGETbdHLNOLNadaxT5T4WGsE7JshNQpLkhWNJzVLaYyiMryzkXD6FHNraIgF4aphmmRUGjB/njMwXDESCm0bcHWBC0IIp6LDALhmyfjn+1uKvzVZX8z1xyBFhk8eUh5pCT3yyWv3rrBiy+/zCgpsFJT+IqjwxETMcVYi3w2LuZnN8p/9e2PeP56jvMJdx4HlsbQSrDBMneG1ULAMmCbktPhki+/cItj7XmhfMgnDzPsnmZdrcmlJ3OGNB2znBvuPTijFRmjMKW1gUrCLEloVuvIdRKiUq7r3C7oYsrOILeUiPHoayqfPrp6xQ7gkSEaZv9cEB5TG77/599Dq4QPfvwBdIuCaFakScI/+Bu/wMePLrnUCauT51HrFUUzZ+FWmMWSyht8gPO2olUlkANRUCgWYe8coUcsFRNjGM4uWIZLPqTkuMiYjgYMlEQIhxrE7ouytXircSFFyISlFZxZWMkEpXLQmnW+x0NGLJsD8voGs3wEOExh8Ynv1MAEQSZICqRTBBnTJsMs5+w8UlYImW/qR836BwRf87/4ub9C+eHb3RhusUjosDTZp2SeuNRNR4fHdXnWPm0Tuu1UdAUFPWt8LyHYq0L3BGVFERnhqwYIEuVjiuyTyiCdITUVe3nKpMhJLy/J1YyxVoy0ZJRJhoVmNMgZ6oRUKjCx7tb7iKiyMcKu2UCEK15avHUBjydIT609lY8o8GQ6IQAOiQxQCM9knDJOpgA78+2Lj2c2yvfWDRcfe1IUwgsOxwPUcASpZmHWzBYNswvLMMm5fu0Wq1VL4yxvseCwmvH91CFzQVIGponCNAmfvt9yuUhYuRoTMpQoCFLgpCdNc7IsitCYEDZV+kJIWmtJRErbtht9ht34UXbSA1diyvhMfG0c2V57BRB4GQAf6yp9n04gsix4TeEbjqoP8a8cc/bil/mdeyUHg0NO+JS1CxysBG0jKMuSc7MiqAIpBNZayrJkNJ1ub2oIUatEBERwJDSMxJppkdIYy4NqTZ0JDlQGIUeGEZBT1oIPzQCRj0AVXGQpd44Ua1egTYGQA1Z5ipMJkxA5SptWxpSAd9FtEz3Q5Qii6br4Y8vbC0PF47MHiPQ6yNiChLOE6j2GRcF1HxuBZQdj786xXvQossPT5Rp3KDGJOVgtZEw52C78+AvK4Pp8YugAqhB8LCWU0dORQpDrlP29I7QziKZEeMe8bgm+RYaAFKBFIBOBcZEwHQyZ5gOGiSZXgUlRMMhzMgnaO4KzUTmNyF7n3K5MRZ+jDwQFSzwX5Zrh3i1GwzF4iUeTeMHAWrT0mCwatgzPZnDPbJS/+aWXqLxltVozGSS8dPs6SFiWK2oCq+qIt3nE6Y1j6raibk3UVfAlz63fxwxPSfZy9mTK8GTEuVH89r0G5RPGekJWDAiJAiUZtILRMGc42sM6z2K1xoZAkqRdz57FeosQCiF6uo1+hetcxB1lrH4og9+ZSGHnRwd/xx0TejcG6HIvsfNhUdygOjjlwigWSrIMgk/Tfe5X8DoJh3pFGloymTIuBA/nDuc8q9WK0XS63cW9w7QleWb51Z9/jYc//g718DpVcJzJlGY4IogCUU1owwAvChAJ3inWFGibo0lwMmGdSZoQ8LkgoLAiuoA2wp54Ao0IuEzQ+qjeBXRF2/EarTUEHK1YsVzMkYNTJEn8nPpjvHnAr//Cr3D20ccUFpQSkYrySYekCzF2/xbQlZx1nS1Sd7teDPDFE8bN9g4SdhbGmDvs9EZDTIEEREzniIBuGzIRSNIUJSHkaXSPO6Vt7z3LpuJyUaNWDZlekmvNSEsGmSLPUyZKM1aKRCtGg5xBmpFoGXsyQ8AZi3dRmiFGpoE6SBpjGY+mJEkWuWNFRKxzYUkIHVseX6AtffV4ZqNs0pqsLHnhuT2KSYbUJdZaiqQh9RaZtLx0LcPUl5i2ixVEwHpLbiy3LpdM8oLnb0+Zjgs+/fAxDQnzquEeDXZ+ic6iPIBIMupWURlHWZYxHRIgECtNjHexkZWwsyP2bsbWfd3t+O+2h6dckc1EEJtIYpP37F/qVNSG/DSfsnAJ5dqQJJGbRQ4LLvyIR9WMg/UDrpk5w6xheCk59qe0BGazebdTxooTb1vacsX53Y/46kvPsx7e4E+bN8gnByyLIbNkjAkSJ6KgjeonaiJRXqMCJEGgVI4BKtfQYjv3MHQkXbrjS2poncdIR4sh6K4UzocNCKKpSXyLn5/HscieQ4oYIvj6PYSA6WTMtz96lwOh0FqRJSm3nN1Jn/SCRleBt75RuX8sl1tx3b6iaPeeCOLfmxCkX2dDv4b0Je9d/azo/vnIC6WU7HRE4u4mRSBPRATbshF+h/XaBc+laThvSsIikAhBpjWj4YBstSLVjiyJSmp7acE0ydEqIdUJiTV4a6mMom0Ee+NprAcnzjkRHJmw6BBiH6nnp1/R8/Erb3F9cYmmwruKVVmSZRkKSRpyzrMJd5zHNytyEUgA4cGmKVrkFFXJtYHnKJ/y3t05nz6qcEnKSjqsjryrAgdtiW8qXFA0jaM1ZrMihi6tEKTo8mJiwzq+e+zGldvnBJueup3XbX7nCaNka5yeKNX3QUhI1Ris7MrYPNIFmjzhAZrU5tSjE3RRoof3GdgCU1bcv3+PxXrFeDxhMpmghGA43Ce5pfmD73yTud/D5i+QFKdY77EiqhBrHEpIVBzNaEQhyq6lUqJ8Q+UNVahpnCGEyLjXNi15mjJKhzSiwQSPEhnKQihbElsi7ArTVLRtRdksSWzNByIm/VX+PADOzPDrH/DKSy/x6d27VCrlLBDrVJ3hvGk2C2E3oDi3XflEV1TgZOz9l0FQyK2KdURHBdui+q7Txftul32S24ini0K6uxa8jUKxritVDFtsvt+LQ+hTUrHlMNEZYjiI39k1NVtnmRsHpsGFikCUbM+kZqBTsjSlEJppkpPIjHfWDUsvuDkcQehgPG/RviXDRBWwp8KoLz6e2Si/UZxya3TAYn3Gjdk549rg0Nh8wHw05aPhKRcvHCMu71I/fo/x+QX5qsIKz4wG4xrMouaTh2e897Dm0qTMsgyfyo3ibc9dGmsmdAyme0WNbhWKYGkPFsQb+IRJsl1er97DLYnF9rl+E6VLu2wYsjvwAS9QIsVqzacPS169PiXTGSBQKFIxIvGa4CvupWvuCoE2a86qf89s9hCZ59y8fpOXX/0Sk8mYoii6HSrw8P49vvOtP6MNSxpzjhJjNA2eaSQcw8fSMhRCxJrXVipqfNwpETSAlRovBMbYuOwoiS8rfNXi1gtCW2KaGbZaIVqDdTW4iuAdOgRSoVGJgGy7kIUQ8OYSQsPJ4SH1g8cIEsymagouLBwc7HP/4SXOVEiZsO3+BDqlMi/jPVTE/KwVXS1oIDLhhW3tKSKmLmRnjE9RlfXea+gRUrp4c2dB9d09Fv1sUJvPEF0huQixQkh2+iBSaqTSeOnxSVeALgYguv5Xa5g3DcoZ2mqFDookLfhhq6lVQiIVwVpaF2hCxXJ5ztKdwVB0nE1PFg9+/vHMRnn/g0eIm6cs917mkdznK01kkL6z9zJ3Tr7MKpeUOkMdP8+1F25zcve7+B+9S7NYk6QKEzQXVlKFDDmdUC8rRqnGNoEWNjtfXO3jyhqUJDhJcJ3liN5FEl0+iU4XsM87divhBsre3s2AYkPL0X0+ImyalYXUHR+PQCiFSjRaa6TKqPYmDLKCbHiCdlP2x4cIJLYJOCuxTuL9ACemNJkFfYrPP2K+/BFUKddfeCkqLdtYLSI78iipFDgFPiPYjESOcCEj7dBNLVOyJEeKrnjCWwrt2MthPr9EWk/hDd47qtUSv1qCb0hMg23XLINBU8Y41xm20H6IhZhdkpyguPHC8/z+H/0OQh+g86OIMJoLAI4ODrj38HEXRfUmJ3l8dsarr3yJ+w/+CFffQyWjrdUQDcM4H1s/lEQEWLct92SLs1GpmRA1QpVU6EhJ37m3YcN0EW91BHpccF1ZYMeRi4vUmKJ3acU2dhNbc+7jUUHsnRYhuraim3cidjbE0s4eHQ4CgiKgSNOUYTrEe0/tU7xIMDphXjdcv3aTe59+wl2gKAZM9iZcywN7ScpyvkYPEpJugRj9NI1yNltjzV1uPX+NdLTP905bjlZr7tea+aPH6L0h00Kz5wzPl/d5JVzCtSn304yF8YwPMvz0iHK4j5q3rN67Qz0r8a1hVhkcsdzJ97Fh6BhZRGxJ6jZSoq6D7wQ7O2PruxOI6RIpchAC163ICBAhQYQCKVOEVohEEXSMF3SaodKs68tTmETgco1ME1KVMhQZiUzIiiGLBZhqRaIT0iSLaZMOSvchQv64vtUtdqwopa6CICGSDvceABKEbCmGimpZg69RMctNXS/wJqouY1tCvSK4mroqcc0cEdbxyr1Fe4MWDkXU08QLpDPITYqoW6Hk7t4TSb6Gw5z1eo2cvIUQOqKc5dsAJHIziJv5EAicXDvlG9/7LsgCVTwXUxw7fYeyQ5mljKI5tYZHvsasRES1AeEtAtBKkacd+6Gg0wHtDbyr1Q0+KoD1jmmfsw6fAaH0AFJ/mVfcqb7jo3dtRTdv5ObFvTzFlc6oEOem1hovNH5HynA6mXCwf8B0/4CsSDl0JeajB5yfzRBZwjArUIni6AtsrD+enaOHnHXV8snH91gf7WNGKT7M2Ju9x1GpyK/tkxxd47g27C3uUpuStRWM9oewbji/XNGuG0Q2ZyoGnOSKd9czrp8ekC4FizK2wODjpI4OZOzj6ystvOhEdHpS4P4VIjbuOqGxaU5SjGIJmxRoKaMCsR7g1RhUGjUMpYxiNzI2JwepCSrujqmOBpllGVmSopAooSmKjFQpnHcYY1k3ZXSROqYm2bnWBTlplm/SLT0nzZUYNkQBnDRLoWk5P7+L3j+iWl1Cu8C2K5yxpNaSGhsr5n1sKFfBkQqQ0iOEpa9MCpHKB4nrvA2BDCo2SIttDi7O8/5cAtO9Pf70W98AkZJMfrbjzrGIYMiLPC4IHchyZa+Uirqq6bfdsF05AfBCxAVQqbjAqMBcBSqTRiDNWYRwCO9Q3pEYx54LFEqSKR3j5gDxqlRcoDsV5X5W9te9W4gDfdXO1oP6rCO6z/GXXW7eXYAwhLBDE7Jzr7uY2IfAer3ixemUNEs3GEduHMeTCUfhmNI4nImdKs9y/AT9lAlGGla1Jbt7h1FWc+hm7AnP0eSI2VDzKYr71jNzB1TiBCkT9sIZN/yMwrakwRGaR2QqZVFLxPqcl/Ym/MJzY0ztWDaOu4vAp2cVl82AS1diEFgRJdmDlDipcEmCTFOSLMenY0Q2QWkd/fpEIbTciIfKbvR9SPBkeBH5PmOrSSQv1kqzNx4zHAzIkowsLchUuumyCEJGqbrgaY1FhJ48WSC1iDqE8ZYhQoJsHKlOCFJE6D7EAgLf1VHGeStQOhplWq7Izj5AihWZbRGhhVgugQyxzK0PpNRu+NU1Lcd5Fej/8/2M638XfgN2bGdk/OEJHJwe8ft/8vuoyV8FOcI7j2svCOYhL7z8Ovc+/TS62iF0gEjnnvb6m727SYheS7e7FMWAVHfMD0BuA4ohXglCcASZEILCuZgP1N5jcCjnUV4yRjORWWxpCz3soDZyB3EMFNL5zh2Nr9uktXbQg/jQdtvclmrS2W6fU+2c4F3IuHOje6l1QUzvBAGtsyT5gIP9A8qyjAuaEAiWiOU88vUWOUkheRL9+Lzj2VMiKua1xq3lVW14SzoGTuOM55Gx3Fs7vlUbHq8trc2hjUneodCc1oLDswUvDAYMixGXbeDhomLNmDN7SDG8DSOD9hXHBxpx6KibF1iva1TdNahKhdQpQSfYRBOkihUxMjLOiU3VRywspktkbyZgiLIKiewqRETHyyQlqVJMxgMGeYZto/6mFQbZrfqimxE9vaCgp6zwCG9xzuC8xZka0VqasmR2foYjB2ep6xrTGtK0E/HpqpBE93kyOFJbk9t1N7k7NvLPLBXsJleHVopu0nRT7akb34Mhn7djTPf3+ea3/5RAghr8TCQAQ+DLHwLw5de+xPs/+EFkMSC6lSJ4dID9vRGtaZGTX4wS5/EVG5jtZHLAfqJpXYnoFhflE4LqXilEd+86hnnvaIPrwhMwCBbeoIwjEYqkW0tdiBQcwCZdZMKaQuiIVguNC7JrU+7IujrgJ4KF24b9p80knv0VcGnz3h5VjkX2znvKpkENu6aJzqPwBFLfknc9l9622PB0Pvbzjmc2yuOjAzA50/kDXvcVo8s5jQOvLK1dsLeo+JnBjB+0OR/6ASpJaYFLOSGkExY4luuW2y9/jfl4HyUFrzBkzYBvBQlpStXA0ntWWaDMM5ppZMOWzkW4uh+frrg4eE+g16CIw6m6uFPK7W65Gdo+jSIk2gt0kEihSCXQeqyPuh1ZkkRQwDuEA+0cOLcRC12XC6wxKOHw9RLTrmM7DxYpKrSXCNMgMbgArtc93DGwrfJzusmz9nNigw0LnjZIuDqTNvXAOwb4xNFtzFc+v98hrl2/wR/88Z8gBm8ikwjrB2+h+YDxeIypt7wyInQ8rVLy1utf5l/++3+Lzp9DTH+Wvq7YebtZJFaLOV4lpMUEV1Uo0SLk9p71lxJ3sXi/JJogYlxqhIiFEd7He9F6XGs2BMxSQIJimCZMSJAhYSzSzsl2MQ7td0Apu0aFDlvfpGW29+NKFdjOLenWQLaD2xl0CBhjooTfTneMDDCwkPndqrIn/OsvOJ69SwSojSMzK/YKByZSEGpnsCFhuK7ZW9zHDq9xXuQs8hQZcpJ8xN7gGoPxa1xWKy7Hp4R0Dxs8Hk0gxwWPMRYTBOu8ocbiLGD8hpOGEKs6Ygmdiri3Eh0vzVZyLRVpN/gCL8WGiSB0O2hgyxkqfYf0WY8PJW3rqKwhNDXStXhrwRhS8SDmm3wgWEswEZyQMpCGmkHojE4GgjR4odDoeMNDdHn6Y6O+FSIYIxNFkN3u0sUyPWwVwpW50S1I7D5y5bcuPLpy73uD7xFMutwgQjDen/LhJx8TRIYe/WznuAW8mRHMGc+/8mUe3X8cEcgNcBJ/GiV5eH6OHt5CiWSLkoZtSVoZaiY3btEuW6y/JBczQqgiqrk9w62XSHTaw6awPfTuTLwuqUHLruMjIu/GeeamwbdwJhwT5SiUZ5BCkmgSBHkQ6A1Vpuvg1/6Ed47O5e9BHgmdV9PdhdDRqBBpZEyQtAiKLME6F3EKYsiRO0eCQ9K5vYjdm/WFxzMbZXXvHov1mpekRaSKtRpT6iGlGDAX+7RZhiHhLBtRT/ao8gmFGZCKgqXNOU8MIoegYg5KoIi5QdMpTwlSrUj1iEY6WguNsVGEJbioS+hs18Aaiw2id9nFS11+UwgXlZx8ABfwXXAg8AjXEJzBOUPStmjTELyPrid342osApkLZL4jgAgBKdcdi1ycOv2vogP9tthGgCCRBNKsQYqA99Aac/Xe99xBHfN5MRrE5tkQdTFl2JJQ+O6m0n989/PK53UxlOBzKCfEVqMD6NqXBMen1/m9//c/Ru/9MungOviAtRZfvYsQ8OrLr/Lh2+8CyaZyBhHpId+7eyd+9uitTUpBitApMURPZXp4TDFNSB6fI7UkaxWfzu/gw24rXkf+tbHTSPsCXai6e7FCRGKqbrhlN5bee5bCsQQehKgKl7QwaIhixMEyyTOGSpPrQKI6niYReeMlbEiwRA+CdcPVh0Cuv78yLlzGCxZCstCSyaDAeBsBIRlQQTK0DZr1xutxYpeD8IuPZ2ezC4eoyfM8LIb8gZK4UUqlM2qRsAyjbk0IGGmpBIQ2pQ0JtXdgKgSCVMS8m/ce5wJSRRbqpja0rcW5gLOx4dT6KHsOISo6hS4x3hdciq6yX3ZoYAgE51BihbcO0Vq0WaNdSfAW5WpkM0O6Bggo71C9O0tA6xLdxc0BgRM7EIHvGeM2j2yOsIMIbBhcQujQuVjzaTuj7GW3hYj8MSC4fvMG49GAB3fvbACFzed3caPauHpiQ8+8OcSTZ/Tk0W+dnn43HQxHXH/uRf7tn/4ZIjlgfPwrtC7uPAKDr77H/nSPZtVc6fro3bgsL3h4/hghEwaja6R5lEk0rcGWj8A84Otf+RqLGcyrBTelRqeKD85nSANWbIGazc608QnC06e++f6NY79ZA3vvaVdmLlKHOCrraZxlHSxJ3TIQinGiGOUJk+GQ0XBErrOYfgK8NXhrYnzrPKMqoPqKIylpgqXEsTaGy9Bwp7GgI5pv7VZEyJiW4KNAr+h2V8J/hC6R5tov0GjFJyrjYydiDMDWTYSA9i3KQ+FE5OHUEpXHVVYIiQqSsmyw1tO2TdTLCBYXNciAPh8VUbzYb+ejxFv8SmSILTrBW7y1eLNCuDWmMRhTkto5iTOkAXQwSEzMFQoQIgIzYeOmbOOt4MC4zl/sjBNBpGVk2xj7ZPeJ7HZp6A20fw2MRiOeO7rB0liatsF5w2q1xHuPbQ2XF+fMLs55/uaNjVv4mcdTOM/W+H/S4+XXXueH733EH/7Tf4pjxPj5/waZjFHCEHxFc/mvGeWe3/jrf5t3f/huFHfdnEMgzXP2jvf5xnf/DDX8Kkka1TGUkNh2hT3/Z7x0+3n+12/+Ik1Z8Z6yPJw94sPHH7OkZaAjkVh/5tuh3DyyE6awcTFDB9aFnYXrKhiz/WOT8spiF4mWcax0MWB0eMB4b4ROEkKSYWWyEbYN3uGdxZqWarVmtqyp1usoXrVuWK5XPGqWLJxn6QTD6QGDyYTLs3OCkFjnGAyH5CIwZxbBQQ8drvXTN8o6GXWQcLx6EWLgrJTEidjs7GTU7gshMqyZyuPmYlMkHatSPEJZBJ4E0fXgxdYpKWUkgjKGVDgkkdre1o9pq4dRn9407DUzRHBdUbVHia5WUgR0cJ1zG3eQIGIs4MMuLki3qMRZEXeAvoC5c4NhsztGztNoxD23aX+End/7FiOIcynJUrIs48HlBe+/9z5ZnpCmCVmaMSgKbt26iRLw3e9+F9c2TMfDDqmKyO7OPKNnnuuJgn+SIxAJiV975U3+2W//LotVRTJ6g/Ta36VKr1H7NUnw1Of/Br/+Pr/1D/5L3vvhe1sAqkt5yCC4ffs5/l///B+jildIT36LtY05UFmdUT/8f/DSrTGv3HyB//YP/iVJImmFoPYWKyyZ0N31dbnGwEYpbDOGRJR7Q3+584TbbUvZGYMIBEWvJ01T0jShKAr2JnvkWUY+yMmShFR1THWdJxNCVHHuU1RlY7mYLbm8nHN+fs5iuaCuaqbTKTdOb/LjR3MseQQcc8Xk2nWSNGO4d8DRteuxK2o45AjBCw9r3HpB00nIq2etRucnkVfvBiKevyB4T2sdro4xn/Ue6xzGeyw92hVFbDa7X5AgYxtMQgBfg7UQPNrUhGoVm1tNw9ifI4LFWotsKxJvEASkhKSjaJCic9z6lo5Aj4Rs71sf/wFXvPqwheW7/R66z1ShK5TeWcUjwhsVq7eN1RGU8JtX9bFgnMxlWWIePECIjFe+9ArT6ZjpdMJwMIiunmmZXVxEl5Z+59tCO0JwxQD7utyf7BAkwN/6uV/m//aP/wlleIHDL/0Ww8OXuLdqaY0g97GZPNjZZuA29a8df5EIgqIY8uHdTwkIkoNfQyQFhzJj7dYsHv0zsGd8/cu/zDs/fBuXRM8EiMpVIdncCCm3u/xWBnDHNe28kf7+bhFrNoCYJKLXWZqSpinT0YiiyMmyjERHQi/ZFY7QyZu3BLzx1HXNarlkvV4zX65ZrFY0bYNHcT5bYIyNIJxWKJ0xKiZcBsHRG69zcHDAwf4+k8mI4XCAlIr3P/6E/YN9sjxntVrhvcN6w9q1iGCQQpN11WLPcjyzUa5Wq83vkYZ1O9sDRDTVu9i0K0IHuoB2nuA9dV3i6pLENaRtiXYVwS4RokUJSIMlcW10N7TasL55HCFxGx2LQMD5rpIn9Ijf7pL6ReH0ThkVMvoTcus2RvBsB7HtbESIEN0hJTdseZuLF51uc49u9mbZpQ4uLy9JRgcUeRHj56ZBK91JwLGNhUSUq+dJhoInj3AlonymoxiO+Bd/+mdczuakL/1vaPWU5uIx1sau+4m0ZH7FPfOYw4NDlvPltsuGOOqeGAuOxxMEgfLsD8nKh5ycfJVFe87CPuKrb73F44eP6Am6dpyIKy53zyLweQwR/c30XepLKUWWZbF1LdHkeU6eZmRp9ETSNCGR23Gnq7RprGU2K1ksa1arknUV2w0vZjMWy3lMrYjIWzQYjbh56yZLUvaGQ0ajEUcnx0ynU46Ojzi7OCPJEo5OjuNc9D6yX0jJwckxjx4/5vT69c0OXxQ5AzeIrHdFRqHTjq7yLz6e2SiN7fvbou+9ScAGj/Yt0lpc0yBCBaHEti3eNCTVY4SzZN6RKEEaPAM8OZ6gDUJ2FRIy0i1Gp3PbfOY76e7+CCGgZJST850Cstg4rBFU/8xD9K1b3YoswoYvK+5NPhYoC7GpHon3Nxq8FDuhpugnj2LbGASdqmz3e5RQTxJItcQ2Nd5KEqlopSJVMWWiRH/2Aekjkrzt3e9OYgO7sikL++xj9/Ht5F6uVnzplTf587ffpv3w/8KTxV5nRNc+0Ypf/5W/x3s//GCza296vQU0VYWUgr/+a3+DP/yjf0N78S7fufwfgMDPvvUWg8GIs0ePI2L5JEK8ex9CLxYkQMlYNdW55koK0jQjz3OyPGM4HDAaDtGJijusjCVuwUfaECEF1nmaJhZprFdrjHXMF0suLi6o6pbGxpJGJLz+xutcrkvy8ZQ8LyiKgvF0ytHRMYtVyatvfo3jk5NIApbomOoQgn0puH/vPifXkkhT01VSudaB0pzP50wPDsEH9pHcnOSc5iO88hgZkB48n7UIPX08e5lds8R5F5HEdo0wJdYZhHNk7QJMizAGpQ1ataRCkApBJmpkElGyHmXrV1Av+mLyLskr7GYibcH9rjC9B2fYJrB9CJ34ym5vwNUVeucKAI0gAghxwwvdBPeb1FW/T+3GjXHd72bELsQguneEjlfGb93LECRKpYzHGXlR0CyXpHmOEYrQWtpEkaQqpk+UJBUixsNed2UqKu5SXUzSw+0iXGmOeuLY9XW3C1AQ8NHH7/D3/7Pf4t/84R8+/e7OIH71F/8a7/zgXYKXWxc9sKWjFIGqXBG84R/8vb/Pcr3im9/+Freff55hMeLRwwe44Dt9yM1IXjmzvo9DdXXJUmfkwzGj0ZjRaESaaIqiIE0TpBR4bzu+HhNBQW8w1mGN5ezsjNl8RlO3VKVjXdYoqbhx8zk+vnsWpRGkIhnk5IMBw+GA1gdu3L7N62+8wXgyQUmFkhKhFMtVyeOzC7IipzUtjW2xXUlfEJplWbNcNxhj8A6MMbRNTVWtuZwtuHP3Lkf7e4w6l3mdQeY8mTfQdT89y/HsMeXHf4R3DuE9mbfkuNjlLWLKWSUKmXXIGWk3/T2CNFaIwAa675PUcHXyb2YIEHe8XZQxXHmNFDFWEaLrqfwL0I9txUYP8PTfH1fsrmd8M0H/4iN0aKDv2M8deTFgb/+oK0qG46MTAoHlYsHe3hApJUkCWZbhcFRVhQ+BIs9RznQpkbAdhT5UDmyKoqXowZ6ny++unvd2pxRENvR7n3zCz7z55pUeVIEEF0VzPvjxe3i/2y3Bzvj3bwhUVcWPfvhjlBa8/vKXMMZwfn7WleB1C6XY5vgAtFakacaoKCiylEGeMd3bJyuGSB05cvv73NO7GGOp65bFYsHl5QVVveLy8jx2ZUz3+PTTT0iSBOs8xgSk0owHAxyKkxu3eOmllxhPJwzGI7JBjk4StJS88+47HJ1ejzUIzuMI4KII72z5CUd1i3Ue6yUuCLwPrNcN6xLu3J1RlmusiaFIVUUVMOctxRgmhwN+LMfU6hVenlpGsx9xxIqpWzOwFcNnmFnPbJT7fkEgoLVCR69jE8hH6tSwRTt7dytEd3LjIvY5mx0D273h27hj8+xT57FbptYzD+xO0s9LF/Rin9vv72XQryBB7HLGfJ5pbkEKjwtwdHSCkJr33n+ff/fvv0FdPyl5tuOOAnleIKXgZ3/u5xgMhrz1tbdo1kvWsznW2XiuO+O0MbYd71gIcWUx2uTwxOZC6JkWelfUe89isXgCZFHgRYwvdaTZBNXVv3e7BFtjiUBL9/0B5otlN/YR9BJKkOUpWkryPGe6NyXLU5I0iTFgmpIqFXuZRax9dUDbNlRVxXK5YrlcsF6VXF4uov5H02KtiSk075hMJhxfmzIanzCZTBiPx+wfHjAcjRiNxjStRcqEW7eewzgTG5dFrGbyQjHaO+Deowv29vaiZmfvawVYVg2Xi5KqNtQtNMZRVw3nZxf4AOvqsgvbJN5rvBgRkoTxeIAaHFCGMd+2N/mOOuJETGiT60xCy/PhnAMx53//OXNq93hmoxx0icLosfXiKrGnW9CBnqJPUffrdDdhNnHc1c98UvNv95k4aXb/vmpkn2XMuznEp3fOsPPPP/G32Jzj9tXx7GW3XYkgO0Q2uqs+BI6PT8iKIf/qX/8ejx8/RqBJ5ITD7Gtsy6oCqTym9Wdd2Vxg2fyYNlT80R/8EaFjDAd44/XX+Mqbb1BXa84vzmKoIMLm7MQOHNuPbNhewo4xx7/7GlKCiMX1Iepn7KLKIXiCkEhNF7Bu88/OR3qMWJoYaRX7eFoEYmNyomMaIkkpioLhaEiR50gkSRL1MJUCOkIvZy3rOhYazOZzLmYLZouYCyyrEtMahBR85a2vcO/RIy6XCxKdMJqMODh4nrzIKIqCtml482tf480330IpidIR3bXOY13g3r2H6KygXDUI3TXOhxbnPFZ6ZheXBJVjrKeqW4wxNJXh7NzStuc01kcdGBUrrchOkCqnltAKQUgSetEfEwKl1pjRAW56SpAHuKD5pAKvjriH4325j0rsT9co5Q6TrOwD9StxWDd56faFDRjyeUfYWu9nPRueeO3m8S92U7/4+SeNcdeF3e0cENsVJLBjsB2qKCWnp9f5xje/w/sffIgWY46yX2Wgb5LqCVIkT5yPgHB789i+/xpBWGp7gfErGveQyt3l7bff54dv/4jDwwNefulFrl+/zuXFOW1db1zK7Tq1E1luUCm25731Xru1ob/W7XltwoJY5Nkh6tuFVGpJkmbd++LfWZ4xGo0YjkZkWUGWphERd24bGgBKRte+tYZmXXNxec7FxQWXlzOqsmQ4GjKbzVmVDSpJI1u8VugiJ0kSHs8uObx+jTd/5mucHJ+wt7dHlmdkaUYgYFrDxx9/zGBvjGkt3oktzCcFZxcz9mdzWucwTcAGS2tLjPPMLkqWS8OyPme+KllXFba1hMozyCbMmwSfDWh0jhA6ohpSYoSgVZHXlQ4P8YBMM/YOjkj39ll6gXYBEWLI5qTDCU+jFOifckqkBwGvPLbZDbpb379GPLnv/Cd8/IQnKoTg5Pot/tm/+B9oS81Yf5nj4hdQMtt82FVCLugT5Vu/WCEE5MkxOceMeQGCx7gVs/a7zC/u8Y3zbzIajXjj9Ve5ffsVzh7coW1bdgb5M2Lfv9yoSyE6Rri4m2ml4843KJjsTxgMhuR5jtSSNEtAiO1iQ+S2bdsoszebzynLkvVyyXw+5/LyknVVxRrVED8/UZKXX/4SSVKQlzXHJ6ccHB5wenqdLMtio3mW8ujRI27ffoEkSTauNAKCD0itWaxWXFzOSZIM72IxuzUW56AyjkVZsawalnUnhFQtaauG+fmSJJ0glKWROagBDASMEkpd0CY5rUhwMiMqlsc7uWmNCzI+LhVFmnN0cMxwMEJYuYmHXX+zndikv54Nq/hJdspd49vU8/Wu1M6SLOLpb0K18JQtbz5nNzm+i9Ft3/PFu+JP+7iSpN7dhjrURSC4duMW/8//7p8g3R7Pjf4ztBxE96bLlT69we9eyQ44E0In3wcEgUCRqSnXB7+GC4bWzrm//m3+7M++w59989v8nd/8nyHWS+qq2jk5wRXy1U4TcfPczm9CSJx3m+vsu1WKYkhaDEAphoMB4/EeaRoT8LF3VOI7zM13XKt4IgjTNKzXay5nl5yfn/P48eNICWoMR4cHHB4cMl8skDIhzwcUgyEHBweMxgVpmnJwnPJ3fvGXmUym/eh0vowjyzLmywXFcIAPnqa2+BBpIa11+OAIiWK2XpEkDmMkdeOo1hVNbTifGfwnc1a1YekgKMW6NGidk+4foNWAoBKaTGJ9rPhyUuJkAmhCiLSQUfwp0qV6IRBeRNGpNCNJc8ajEVmW0jezP8XYj8DLnkPo2Y5nN0p2vjR+2+aHf6IF5ooH+RRj7/aInTlXrmDzo28s7l75l6rz/KKjC43j7+Lp567CPRKC4OT0Bv/jb/8u0u1za/hbaDGIAMcT5/9Z8W8sk+vSN50Nd+vbFfOJBRGaXB1xe/C/pPUL1u4O//Jf/T5/62/+KjcPjrl759PNIhbHSmzArifd7s1CIwU6ieVn08mEJEnI85zheILK8qjlIfqYuTdcCC4qptVVzXwx5+Gjh6zXJU3TcDG/pGmaWJEke2AI0jxDJ4qqXvPqq69y+4WXOb1xk+FwTJpmXbYr8MO330bphOn+PnVV44OjNZYgJcZ6vFB8/+0fc/v2C9RNS2MMLgSMCfjguFhVcL7CtBWmTZCyINFjBIqvfv3rJMWUO48uuPvg41iiNzzAJimlVB1pssD5WAwSeu8j9GBf6FrGuuVUSLyALEsZDcYMB6NYMdSVBAZiuaAP8bXbgCfEefYTTN9nF/i5gtg9sRXvxIZh5/c+7vn/G1f2M44+ND69cYM/+da3Wc80Nwd/FyXyrnD+iazh7sVuNsUQV1LCZkx2zf6pozdiocnUIYU+IpcH/M6//m1u3Djh5772VR4+uB8/pTPGXQJqrTVJkjAejxkMBuhEk+UxVuvL0PoT9SGAjorHIURh26ZpWCwWVGXD5dmc8/NL1us1ddNQNw3OOd76ylugBI8fP2Y4HLK3P2V/f4/pdMre3h6T8ZDZ7JLRaMqNm88TOh6fyIkUF4/TG7c4u5hxeuMWq7KMpXAmlmsGD3UjmK0MxUXJuixZriuq1uKtxFmPEKdMJ68wGR+SpCOsCTRt1HNZlQ3NbE0tJINrp8wWcxbzOb6uyYZj0izrh3rDt9Plm3ZuwzYcEVKitGZvb4/xcEyqssg00G1UGyyld7P/A2b9MxvlT3T8/9br3H7tF+ymW3z1KuAR38fVx3a9w+5zLxdLPvroY07z30SJbCOT4DeVRE+89+qJ7XqyT78sbL/8qpfRcclIGCbPc8pvcO/eb1O+YVBJgmkNyabULKKfaZIyHo9J05Qk6VzQLvUQ3ec+3IjfV1c1i9ljHp2fcXF+wXK5pmkalJKY1lGVLdb2CmdR1n1vuMd8MWexWvHrf/NvcvPGTfI8QyVdt6tSJFowPdjnhz98h5//pb/GYlkyXyyxztG6qJ5snOCDT+4wGI9p6oYQJK2BpnE0xvDpvUcdwDIDkTAc3eb45ilFNsZbQ6o1TeVYLA2NKXGx6wAXPGVjqLxj0basVUBmI4ppQrVes5qtkKKMi9RoSDpIr86f/l50HEQBUGnKaDKhyAukUDslgv1Ydp0YmxKoz5gHz3j8xEb5rMHq/1TH5xrmk3lLyYa6cufRq793b3n+hRf4nd/7NxTyJgN9c9vT+KSlPRFTdvjAlceueLibOCO+cdtIsAVz+mvywCh5ngP/8/zO7/4u//C/+i+RIVAUBUmSkCQdALOzYyqtUVLGUkXncR5Wq3UsxJ7Nmc1n3Lt/n/l6SWsNUe9DEjwcHBwQpGS0N+Hg6Ihr166xv7/HeDyOzPgq4fvf+z5JknLt+imttR0ML6JsO44kL6hNy/sffogPAmtj3s+GQN0aGmOpbeDR5ZrFvKaqHc4KlE7RScbx9S9z/dZtBqMxznnWZc2yrFiW58gArrUIJM5LLoOgNI7SGVoMjbfYEBn1nJNdnapiMBowmhQE76mqhrquMMaS5zlaK5TqBYUiyi47ryMfDtFZHhsSgog9thv3UHQ9ER2Tf/gPssmfBH19tq/5T9JkwxM/dx7oay6vHj2nGSCgrBvOzs45Sv86QiQbh/UpMOqJ9WD7dXFXDU+YbE9BCRucKNrnzuPbD4s3fJK+zsz8Ob/7+/+Gf/Rf/0PquoogTnfOUsfEv/Oe9apksVgwXyy5c+8hs/mSpq4ZFAVHR8e8//4HtM7ghSfJUoajEdPxlOlkj0QnnF1e8ht/+zcZT6b0wFySRJIogeLV117jO3/+Xd762tfxOIzzkbXPWPAOKQXGCs4vl6TZgLJqWa4rauOpGsPF5SVeZJyXgf3jF7g1PSbNRxjnaVpDWRnunFeYB7EZIupYdiixp2uIb2mcp0JSh0AjwCLxpGyKJjdeqUeKhERH+aA0G0MAa2M3Ul3VaKVIkxShEobDMYPxKN4KpTqaErFZPXdTZdtwRCKewFh+0uM/jvv6n/Dx+YuG+MxXHB+f8O/++BtoMWCUvrDZHD8L03nSlsTn2+vmsc8IQXdi8u3PIELHFJ9wkv0tHjz857z9o7d54fnbtLZhuVxSVhWL+Zyqqru/S5q6pu2MQKjIpqfTDJmk3Hz+NsNhwdG1Q05vnnJwcESe5V2LmuI73/0u67Lk9osv4lysD04STds2rJZdrnE+4+z8LLbudSWHbWMIVlDXLZezhjt3L2ntJc6DSgsme4ccXTvg9TfHuDRj7WG5cny8qFk/PMOauNV4wHjfpWAE1gWMdTgfd/34s0NslcVJgZWxjkl70QFqYct5K2NTgRRdnCgiS26SpCRJCiFE1oquWqqua1CSvCgQIsTP2l1Ir+ArOznD3d7Jv8Qu9ZcyyqcEdXbO51mPL954w1OfF9MkEbl8Vv7Mpz7zyf+Hrrcv7jE9/rbzChhO9nj8+DET/WWUzDsW8F3sM2w+/vPO6sql7lrzBvWjI7Pqvz88nUraWQ0ycYBiyLe+9W3aquYH7/w4wvomds689PJLNMayWKwRQjAaTzg5HVMMhhyfXOPg4IDFYsHx8Qlf+tIrBBmQ6aY2CxBolfDCSy/xg7ff5rU33mK1aqjqGu+iJLo1FmsrnHM8Or/EGEfV9CVxAUES3eCjm1y/9TKTg1NkPmJZGcqq4mJdcWd+zirAOghMK/BOgEzxTmKsxTqzBRC7SmoXwPvoXgYhCV3TtFCuK/eUqCCQqu+2kV3cH0GYvgehr9cKYidu1IpsEEOBvBjiApR1xcPH51hjyLOM8TjqwajOY9o0vfcGSriypu5mr571+Ind16cMsv/f537pZz+xi94//WRPoty/tr/g3gn8SVeAfhfrjahjtBMQ3Y3tZOwNUwBSSd55530AxskbBA99G2l/RpF1buecrpxa5wbv3KUr5x66Gyh2vldsKlZ3qm6ufqKWGZk85uGjD/krX/sas9USpKJICrI0xwdJVoz4mZ/7EsfHxzz//PPkeREJq5MMqSSz2YJ3332PW7dv01iDcZb1qqSsKryzhGBAaO49eMhHn3yKsxpr4rh556mqFY/O7rBqHB/fnZGqAUk25uj4mKPjawxGY4RSVHXNbFXz8UXNxXpJZSV1UBiRYkQSRXqtx1qDcx5H3alNPzmeMVkqhIiLCGLDrYMQIPXV1FD/OF3BUg+aXZlzvcEKpJLoLEdmGSJN8DpKzo/ygsF4iikrmuWSx/cfEBBkScJkMmY4HJGk6cYUxc5c7e+X/wm3y//k3defZn4y8qI+w+dtjFiwWC66h5KuVezqPt1TQX7+N+6snJtC1d1XXL2B/W4peuQXrrhJQkikkoyTF1m7DxFS8sqXXuHg+BrXj0452D+iKAref/99fu3Xfg1rbdT8lAofPNZ56rpBpQllU/Pu+x/iRdT/dNbFvKOLWpdV1VC3grPzEmsUVdVSVVEjtG4aHl1WvPnzf5vnnnuNPJvQtI6yqvnorKR6dEltWpyPBQcWRRVSmiCpWktpSmzPzxsC3kVJghD8pvrlaqufuJLTVkJe+XtDPvEs82VzfyPCqlRCmmakWU6SpJENfvflSpGOh6SjAVN/QmgN87OHXDy8x4OmYTTZY3x4zHgy3aRH/kPm7U+cp3zqsSuI4U9+/CQnf7WF6C/zbeIzdvVtKmK7Y8bj+o1b/Pn33iYVh2g5/MwdceMOB57a+vuv2p73Z19r6NwNj9+4sT2w0nfx97tELzM/TI6hhvlizt/9rb9Lmo/IVI7SCWmW8fDsjEcXF7z00kscHx3z6PE555czqrKO0gso6tZzsVij04y6iVL1ZV1RViVt2/L48TllC48vKoajQ45Pb7A3GaMTwaqx3F82GJ/y9t2SulqhZIJUmsYrKqEwKKy1OGuw3tOKgBMhlsMJjRcdhWef6xOqk/2LbtSGQFmIrtAj+p6bMbnCOLE7zk/31PaMAKGvSgIQCnSGSDPQCSrLQSj8BsjplsXeSxRgUoFOUo4HL6I6leizszPu3LmD1g84PjxkOp2i9a6ok/zC8ObJ4y9llFfcqkCn4vSXOf7i03yyd/DqQvDFr919vPtt+7VdsO89He9O5HQZDIYMhwOUUty6dYvVakUmJ/R5qCtG9uSC8uTlbNrANljuzts+5xxDBDa6TTO60WLHKCVIBX1/gJCCF26/wHj/GGdhta6oqorp4SHvvP8BSZ7z8af3qCob83iI2KQbApXxPHh4jlCKxSryI3kk2XCIDRkqTfh7/8V/znT/iNIYLuZzPpiVLCpP6SQro7FSE5C4BEpnsG3diWV5Ikt52NwzTx2vI2z5dwQgRGQF2FCIbJBo0elydPYXrjqCu65oJEOMhtrXqm7+v6GuidU7EWHNUWlBSFLo5C+QehPWbI3+6n2SPhanN1IiU41WksPBgMPrJ1zcv8uH7/+YwWjIweEho9EYrTN05wo/6/E/ofvapyN+gneEL44mP2/XDZuVuOfF0bHKJY1tQHt7+wwG445FLZZWSSkYj6dPffd20+ui2yvfud1prywDvXH+BWvQrvzAbkN4hCt2jRSU1AhUREJXKx5frmmtp24tzjvWbcvdhw84PL2GswHTitiY2xrWZdnRr2Sk2ZiiyDm5doNiMCQdTFhWntmsZTg13LmwvHd+HyOhbg2tDVQupQ6SlbG0IZKLBCGwXSH25lyF6ImPuguM91t1CiACruyG8YKfKMvsdhhPV53X55Z7/5Mdj2R34PvxD/F/wXcM+0qR5jlpOkSleWS/6FaCILaGvgEW+/sgwmbBIESwy1jLoipZLRfgGuziErxluZyzLlcUXRnjcDhiOBiSpukXT4Du+E8ypgyf8RvEXSFibVcNQQiu7KTee6RUSCnQOiHLUvb29iP5kpQMBgOyLN28ppda2wWzhBCRyKo7jXDFIp84vc8wtjhRtkTRT76wN9b+8RD6ODLm4LoZ2G2afZdBfI9AMMoOydQ+3/r2n/N3/vP/gvNlHWn0rcM7T90YFquS84s561UJpAihGQyGvPzq65yeXsN7KBvHZat4vFyzfLCmDeeYkNCahKZRmCBohaTGYRy0zlEHiSeSpIWO0JqOs0bTgyt+c85XqFVEL8raTfcr8lZwtcCejbVtyE3Ck09uh/azFvjQfadOJDpJ0UmK0imqb8vqzm/zsR2NSiy99lHvVimUCrS2pqpKlosl1jgIULdNpLgMjtC2CCFIswRrI9cvqzl1vWI+T2KHzTMcfymjvIJw7QzQZ0SdT/39xRvjdifsA3c6xGyXlSAEsfEqhJJR+LWrvNBJQpHnjCfjiDgqFblc1UafN97Ajuw3hEi4TIhdE9ZZnLVUVUVZVdvz2vg1XZd9B+U9iY1+/uXvTj7Rf1RvnXEEN7FlQHjZEdvtct1sd4Z+8jjnmFeOjx8vqKuKsqwwTQseTq/dZjq9wfO3DxlOjzA2UFvP+eWCT99+QFXXGCeYD65jfYp1ktpbKhfFWYNX4KILaYTEB41DYoUiSI8K0fUUnh1Zh05PA98xTogr1hLvY6+W8tQgfYZlxed7nsB+R+xBMTaPPeEe9sYsBUka0xyqo3kUIonshCKgpEBuKOgVUiQoqbFNgzUtxlUsqjXWGJyzWFwsCbRdl5OOBGzOtOBrRGjRXqB6Sifv8CYytbf+p6xPeYWAOGxpAsNmQLYjdHWn24kDnnIvt5oSQvTJDg9CbiTWd+e5lJJUZyiZUKQ5g8GAtMjRaULS13pu2mQ6qhApOlKrXvgj/lBS0bQt5XrNYrHa8IDWdU25XrFYzLlx4wb7+/ssL9dY3yJIO85Stob51DKzOwGfXLi2x24l0RXeg25H9vgYhzyphtr9vuvkXS5aal9w/eQm+3v7jIYjvA00Bi5Kx4ePWhZ3LmmDpgqK0iY4DrDOYT2s5hbr44LlhSRSZQdih6LvunnkxnfWHZmyCH3T946z3Y/9hpSMzzC0nfnyZIothM3Ln5ouuxujeGJUwo5RdgzpUsYFW+mIF0TpwRSIBflKxR00iC7X5S11Oce2BlPXONvivMF7SwgyEoIpyNIEFxwOS5A1GoutLwjnd7EPz5HjCcVkH59NUOQEpXBCXWFl/KLjP4r7uvHtPx+TuXL0Lo530SxVImLeLc/J8py863DI85wiH5DmQ9I0hxA73r3zG76aAJsO+kiOLDoSJkdZliyXkXpwvV5TluXmH96TZRkvvfQSSaK5vLzg4uKC/f0DLi/fx7g1WmqCe9JAnvYGNr9dcamuLlVP2drOS4LYxjKfafdPfOXLz3+VySyjbhvOLkru3F9SC0GlExatoBUZS2OpvafqCsJ7t64HR/p6at/t3D2DuNhdPDZxeVx5+92xX6A3rwtxp9xFLXdPOfidS3rCYMWVRW33cTZeE/TCWVvP44rmiVLITpVb68gOGNusNFqmaJkCgrZtMGZO1fHBetcSbCcI3ANrnQCmCzHCTASEYPBZQ3AlqjojrGcc24bjkaFuDQ8u32U9U6jhLfTkhGQwxg9S7DNZw1/CKJ9s4foipCYu+lsxF9kFyd0bN+VOSiuGwwF5nkaypf19xvsHjPcmCCExraFtDU3b4nwsuTI+yhZ4FyXq+s91ITKTr1bLyAO6LlmXsQh7uVyyWi53Ysn+vMSGi6Wqa/I8Y/9gn9Pr13n++dt88MH7tNxBM3kmWHt3RHYrOnY9htCN4cYN2wY1288IceIJcRX46R7dfNOH5zVvnwXMQGF9Th0kVW0wQVB6jRVg8ZjgaDvXXwqJFrrjnfX9l8U8/AYCDRtZiXirxRVUpT+D3aR96IGV3Z1r19D47EDn6gA+aag739M9JnfGJL7m6vcppUjTFK01QsW411tLVa5wpiE4h3MWQawEkqEvTGB7jSJA8Agc0huCaZBtg6hLcv+QvQwOC8H0sGC6d4zWLUo+x+qs5f6jGR/ee8ijR9/Hhxw1HuCf0dr+owM98Xb7qJ6sE6SIVPPDYsDeZMze3h63X3geIQInJ0dcv3GdH7/7HhfzBVIlOOcxxmGMJ3iBdzEBHqkrAqZtmV/OmM1mzBZz5osFq3JN27Y459Ba88Ybb2C94+Gjh8hEd8F4xmAwQErJ3nSP4XBAmmVMxxMuzs/5r//h/wohBHkxYDD4xzT1HYrwOkI8OWSfHUk/tVSFK+YGvavOTvE7/QQUOya3O/FE9zmKENTmPR9qyfepMbOAd6Ibm57+su0mdCwJy6Ug6C6mFY6ez1b2Z9fFfJvJ/4S7c6WzPlw1jKhhGXeUJz21KxCXfAJh3Tk+a4nvY8gN8zr9srT9VBmiGy2FRGpFnmdIpWjaEmMbXLA4YwimRnU8v0ooRNDgu0J3onGHCDQgfYusztHlIxJzxjg3HOxNOH1hys3jW+yPMg6mY8ajIXjBfFmzmFeshy23Tq/x1hsvslysePT4jAePH/LJ3bufe927x18a6Nkdxn7V35Q1SbH16dOcYjBgPJkwGg432g+JVKRKMh4Pee21V6nrNTqR1NWapq5wLlBWVWysrVuCD1RVzWw2Y7VasVqtWK/XnJ2d0TQN0IlzCjq+mdhUnChJ3TakecZgMub09JTj42Nu3rzJwf5+x7am0FrHuAP4829+m8nePqZt8R5+/df/Jv/9f/8vsOqchGs7BvS0QX623xCeeLaf2FuoY/OM6FWnRJSUF1vBIUQvqCo38uIAy9pTVm47AAgimsxGRk8piVKiczUjNbwQkvhXQG4kBuUVQ9uNXq/mgK+c9faxfldVu3HjjlsqAnLTg/psMdaVBWrnLbs7+KbkDof3nrKysUbXGqK6je9UKtSGmRAkrvNEZHAoa5HOIKoLQj1nlK44HktOjyWnxyfs7xeMxwP294aMc8VokACBYFtSWXBreoy/qVnVlkdn5yyWK+rDMS89d526eY2z87Nnut5nLx7YGaG+rqUvG9NZFFZJu3/5oNh0uWdFitRxd0q0QgrZ0b57WmuZLxZ861vfYjIZkeWRIMl7KNeed979gPOL88gD2oEvTdOiteK5554jzbJYuGwdPnh0GqtZpvv7TCZjimLAZDIhy1IuLy/5R//oH1EUA5IkyiP0kyxC3tGlFQgGwyHvf/ABz996DucdP/8Lv8Lv/M6/Ymm+zZ78jZjs3h2ULwgVrkadW5XgJ18DnRstOwBCSiSyi522JWcBcBJMMPhgGE72KStF4tUV/OSKyylAyFgk0Sfb+v9LtqX42xv8ZDDXX4SPIFdnfFfc9O7FkQk/giJbo9z5Xfitu3zl+GwD3Z6V2ModiP4K+qonokBR8ITgOu7hTkVNCQQuapkKUMiYCvUeb1pye4ZbX6KaSzJp2B+lHE4Uz70y5XB6yP445fBgzGCQkecZSSoJ3hG8Q7sQFzoN2BIVPKnO0WPFYLSPc1PqxnB2MefysiUv8s+8xiePZ2dIF8QWFx0T73mek2c5WVFwcHjEdDplVZa4EEEEH3ynWNzdkAA+xNVZaUUIAWdaqsZQNStWVcNyOefDjz7i7r1HXMxKVqsqDrqUm+StVAohFc579qZTRtM99g8OuHnzJjdv3WIwGnJy/ZTgPcvFAkIUa/3Gn3yDg8NrTPf2ODs/iyJF/fLiO0S5a81JsiHvf3SX42u3ECJhVZb84q/8Kn/4e7+HDeek4mQnWAxP+Ks7cU/H6bohjO7BqG5hi6+O8bDsDESLaJAx1tsWS10NsyR1+wjjL3n19b/FnZkh1RnuSli1rRXt0z9XYE3hQXhCkPgd/ecYE37GKiMi/BGk31x6f25XzKmrmtlIpIfeGd69EMFW6q9ftrY75xaVZhu7is7JlzHO6/9FV7N/TdeOJSNNR185FURAYdHOIU1Nu57hqyXa1ZwMlpzsZdw4HHJyUHB0NGY4KBgPBmRak6cpMhGI4JEEhA8IkRCERiMRsUIfZw0+OEQwBK8jXiI8gxyev1lw61pCYydPj+tnHM9slK9/+S3yIifReuumCsnRyTFFMaJqakLToFUaOVacjfm2bqyttZiyoiwj4FJVFQ8fPmY5X9A0NcPRkBs3bvDuu+9SVjUBietWt0QpRuMxk+mELMuYTEbs7+9z/8EDfuPv/B0Ojo5QSsdCYiFYVw0SQV6MUB2JUV6M+eDDO1y/GTBmCz55H8BHcR9nTfxOnbGsLBerFqUUZWV45bWv8Ae/969pwqek4TjGgX1VTwcUxBW8SxCFACKgBaSpRopIxWid26ncYTP5pACtJYmKDPS9tsm2ZGy754aNoBEIIRllihXiKWPa7pZE4OWKuxPTUUHsGMzG/dzdHjc9K0CnSNZ9zud1P4Stwx13sc2+3F9G38vYv6Hf9bpREbuf0HV3dAtJrKJyCB91SAUBROz2CHQpmSBQAbR12GqOb+8j6xWDYBlIw8k05bkbKTcOpxxM9hmNBkwmIwZFxqBIN8UosaAjLh69fN82zx1JmL3zXZFJRHRl991blz16OVrGgvdnOZ7ZKK9dPwW2EuGmY++WUrGua6qmxhM1KZx3VHXNcrViNVsyXyy4vLxktVrSNDXWGkBgjYskvlIy2jvg6NoNZouSu/fusndwyAu3X+CFF1/gxo0bACQ6iaItIg6K+9a3GY4n5MMxxrqo/yf7Ox8ng3MOYwz5YMgnd+6RDkZE0mAVLz/Eyp0QDCE4rPGsG8HZouHju+c466jLmtPjfQaDIU31CWO+DrvcPOFqGqNHCbWAVCekshPr2UyzbUmXgC3buFRxh+yN8qk5v5OS2BicJNESHdTmsafLDftqoc8zou65L0DSt4uC2LHZp13x7fKxA2CJHd51IWJMKbau50ZWka7RSWyx5S3pGBuqEykibiGjtXaQmSfYBu3W2KqiLVfk5pypqrhVLDi9NeX68YTp/ohikLM3ypgMBwySlCxNYqwtAt7bHTkISZxF8Tq8d5ux3VXxu0pNGtN0T42xvCo2/EXHs1NMqkh/iI+MZINhQZZl3L33MCaepeDTO3d4+PAB8+USISVpmvDJJ59GCsLQFX7LfgUXSKXJiwFaa/b29rl37z43b93il375V5geHHTqS+kmBkVKlIzGIITg4PCIO3cfsH98iq3jYHoRy+y861SgrSGEQDGecvfxh5gAbdMiXBJRNw/rqmRZlXgCSijWlaH0GQujyGTBc7de5trJEf/b/93/if/r//n/yDr8OYPwtbhCh37PE9H366TBFZBrSZ6mIATeu64YQmz8vrCZqKCV6kh7O2m87bbCLtQhhexcXTYTIcaGKrpMnxGbxThQfIFR7sgdXDm2bubmy7Zv2u58wJanZru/XqEkFaCkRAmJltH1jJPf4YKPrh9bI9tecZcrDf9f2v483polq+uEvysiM/feZ3zm6c5jVd2aJwoKEBAQBaEFFG1todum+7VfBbvblo/d7fA69WuLaPdr0yCKKCiKIMogUFJMRVHUPFFVt+Z7a7jjM5/nDHtnZkT0HysiMjLPee49l7eI57Ofc84ecmdGxoq11m+t9VuovxgT9gUfaU89q70dzN6ThP2rzNnh4sY6F8+d5MypbU5unebi9oLNzYa1jZqNtTnzJlKa+Cjors8xcg9Dd3FfsgQOQpn9+2Kq0/O3y78uW2o83zi2UF684zxPPvEM167d4OZNzf27fuMGjz32OHvLA1zwdE7NM0S4/4H7OXHyJAfLlqefehIbYeoLF85z+sxptja3OHlSy1wUkZ3xxBOfZ7Va8dCLHmZ/ucIYoyawNVhrYhNR8q65trHJo5/4NHfe+4DmHxqjN7n3dJ1S5gf0ht9aHnD15i0uX72Bc7C/71nuOdq2ZzZbEKoKU1nuuuseHjp9kdd/6TZ4w8as4uTcs721Tufv4NSpM+zdfIIFr8gyEyAnA0gWHjSbxCqLnLb01BtmxWTRydojalej1lh+DcpwiZBCASbtznjEB63Cv21vzoi4Hn6Bo6RxvKyiRTB5mxQ/A8kMLvhOQ8BYk1sg2lyh7yG02touNqYU77FeGwNbVAH3BrxRZFgCGB8/1y6RVUfYu47sXWHe3uTONeH8Wc/Zu7Y4fepuNjcWbK6vs7m1xvp6w6KxzJsaYz0Wj3jwXa+C5JOpGpS/2OgWlzb2Q6Bc7AqtZnXSmgNZWfp5qOC6eP35xrGF8s2/8ss8/tgT7N7q2dnZZ3/vAOe8gjYx6yHEWj9bWbrec+36Tc6cPcuDDz3A2bNnOX36FOsbaxH4MBhJqKeGT85eOM+73/MepXy3EaOLQE2mdPQe50JMJICDVcu1Gze1wUvc2fo+sFw6DlYdvXdgoGsbuv4EN24tOFi2zDfPs37Xac5vbjOfVVTWYSVQVzXeWjAts/mMtYXl7OnTLDbnPHtg+YY/+qf4sR/6P2ntM9TcSdIkGeuRlDyeypAC7aql7Vpc7/JCLTVaAk3VZE1ZNMNRdTEPSekGz177GQDuf8lr+WDXQ2UgON0Yips/rIkjzNPoU4aRfzeh9xoljA+f12v1ucGutrIj+k+GyiqKrKCtJ8Tept519K5FcLlWJLhI+2Vjip+AF4/QQddS7S/pbu7QussYv8tG3XJmo+eee2ruPXOS0+trbK1tsBZJoOu6Ym19zmxeUxvBisewwvcenFfhD8Ru4BI1pPYX9U5ZD4KyKo8EzJjUlsAf6kJdWgXl+8sih+PWDh9bKK/fvMmq7bhxc4fVSm9+AGxds7a5ztnz5zl56hSbW5tsbW9z5swZnnz6aapKeNnLX0rXttjYT1J3ECAGal0UpKpZcHNnj08//llOnjkb/VY1C1UY1Z8NXnen5aqj98K1Gzs0szkHq56dbsbefqDvK4KcwPmKra1tLt11B1/84IyD1YoNgcrW+r0hsLcKVPWKzc0ZGydPsra9TesDy67jE088w68//jQ3li1P717nRc1FrK1Yhs9QyyUGD4oRUphSz5xzuMLsEUm5osUCD1N5icIYV/8AiIoKgnj2u88CsLGxjbne3bYh6VjbHlZ3gwmazEwpJVnN6CmAFM831UU2TU1dVYpAOoc1YILDtV0kVlbuIO+0U7WWOYehTMqkOlWH9A7pV0h/C7/zBO7G51izgfNrDZfu3uTOCyc5vWHZmFesz6oIjBnWF+ux8kdT4+rGUlm1KoIXeicQ45OhUPwaQiGDSZmKJO5F5X2bakaAo0zWJIDjksHjaUl4AUJ5+douUs/YPHmSLbGcOnWGM2fOcvbcOc5fvEA9azCVzVyjxlpm6+t8+CMf5MSpUzz7zLM4T6R/0InxTkEWF6sS9pct8/Vtnnr2Bna+RQiipmjf4r2mRXVdT9cpi9n1mzvs9XM+c7llsTYjyJxu7S7W7zjFfLZBbdcgVLjecWV/idtb4cVRW8tcHBuNYdZUNPMNlouem8Hx9FN7XP7Eszx7a4/9gyWrHnaXQrWxRWu0+He+vsnezqfYMK9FqJCUmSPqg0n00Vxk+gYFcoIpdtNykRe+GKNXVUOGDPDoInChpwu32NraxgG9MbHI14yMXUj8QALY0ZeOdd6gRcc7fmR/M+ldRXzTCLU1gwC7HuMcoe/onUe8J9Ap8qo3W+OhsXDYR+Y76zuqfkVY7eGXO2zsPUEVWtbnwsVTM+560R2cOrFge2tBXcG8tjRiaGrLfFYjtsEaQ23BVtHSIFDRI47Yhj0Vi+lGQtBmQ05ii78i7TGMb8TzCteRHQNGn2WwcI5JBnBsoXzw4Zfy7LNX+Lpv+FLqZqb5o7aibpqhYiTOvwuBvu+xleHy5cs8+tFHmc/X1ATNgWSD8Wqfa9OWntZ5TL3gyvVd1rcP6J2wOgisVh3L1QFtu6LvoZudZra2yaUHXscdrziFCzN6Dz1wfecWy67l1s1bhP4Gs9i30NgaO58jZk4vsAM8c7Bk/9otVv1VbhBoIxN4MNEolUi32Aihc1iBm67m7pe8lo++41dx3KJiu4BQPCnupilu5NVvYxs0zXfVMbm9+FD0VknujKQwCPlTrTtg2T/NpTMP89SNns7WeBOwZZA+C1sCcsZ+bPlHGQVJO7+Ilh8loTSi4JVBCM4TnKNrl3R9pxaC1xieHrKYD1FIhlBB8BjfYbo93HIH0+3D3lXq/iZnFp5zmzX33d1w6tQZtjY3WMwrrIlhsapWoMgaqjpmjVmhqgJ1bagj7qCFDS5aVyGDSeV1IUMcnWipDcwP0XOf5ng/z7g928Wwb00s3tuOYwvlF3/Jl/LmN7+Zs2fP0swXYJT01xjDqu20x4T3WpHdKTOZd4HZYovPP3mNixciIVHwMf0pgIO+93Sdol+rVcfBjmNn74BOruLNDOcbnKyxfeJ+Tp88wcbWNgemZn/Vsotw46ajO7hB71YsXUtfWcysIcxrMHOWxuKcZ+kc+we7rHzsmegdne9Vx4nR1CuRgjW9LEsycX0H9lrPqbteSnjHm+m5Ti1bOZI3LO7hBqWdV2yCaYaFW74z6ilt8JNx2XgWoqiqYikG13cAnDpzgZWcALM2UIbkb55mh1Iccfi+kE/Sx0VvY2w5aIGviULrHaF39L2jbzsSyVU6roQIUkEElizBeSpZqouybPH7N+h3L7Pob3BCDrj7RM1dD25y4cxdbC1q6trQrFXYShvnBN9r0N4YbKWCV9UWW6lw1VVNXce+lmbw+QgB7zRs1/d9xiymlDbPNZJQJYVTfu44puiUL+j3xKes6gUbmyd58qnLnLt4ga5XP8mHwKrtNUk8QAiRJdtp5kfdrPPM0zfY3DqDtQ7nO1ZLzWftVo6u61m1PS4YFhvb3PPSV3Hi1FmuyCmqZgNrZvSdsL93wM39PS5f3mdv1SqlYAzoiTUEs0lbC/sEpcRwjiCettdW586pJuyJQigWI7OMesLgt8VKpryIrfG50FrEMN+4X2+M2dNW4aCCF2LRrOjvKSUtp8mVZtH0Jg53kySypYBJDJAjhqv7v4OI8JLXfA3vP9jCmTUsQqDNRxoLo8REgUGA0vNCwIoixU1TU1uL63T+etfh+54QHL5XoTQ+FMnmXnNHUYG0xFQ410Pb0i9v0O89hbRX2bQHXFwL3HPvBhfObHP6xJ0s5hVNDZiepNmNeASPd722ETDqDtV1TV3BYtFQ1Taag5FWMtknIWnGFPDXTaaMHZbAy2j+nyOUMX1PLhMsTNejBDW5Mwn5/oKjrwcHLadPn+Mjj36M2fo6GEVH+85Fgt7Y489rm7LedfStQ5zh5rVrLPdvsVp13NoP3DgQgtkAu8HG5hbbF08yX9+imq8jxnIrBA72V9x89gZd3+NCwMf4prc17XzBymkr7aXr6HqPC8l0VgbtZMz7RLYkQrAhpq5JhNpTPEPnLcQbHKcwXnmsHYixCiOWG/P7ETHsu09xpnmlfiLod6ZjwxC6GXbwrJueZ2gBcQmcegQRS+t6bq4eZWNzmysnH2ZfZtpZ2OtmE8I4LGIlGpMxa6ayGsa3xHiqgIhHgsctV6y6Dh81sSGw0e+hOGgVQx8+bloG7wKmi0LUdfjVHtXyKmH3CmflFutrjrPnKs6cmXPHhXvY3lijEhCfvj8qVaOCk3JbBY1pVsZQ15a6qZnPGmojVFVMrM+drQPBO5yq/Bg2SymemiXlnArl7UzSKV3J6E4cIbylUCYAMoQwFDUU/qfeE90k7IS68nbj2EJ589YBYhquXL3Jzq0VWN192zb2DfSBzgt9HyKFvaPrA245I5jzPH1rm94uaM6c4dTiDMZqaY1zjmUI7Oyv6HauYa3FBcOKCmfXcCaw9J4lgS62ym5DRy/6dxt5UXJ3qTABNXI1RRhpO2FcQZRStBAhGMlopsFToWl4upPDWqULvzZrzOoag8G5nuBd1JoFuVOB6pXDT2SzhH/yDc3nZhAqkIq99hl6v8/LX/8N3JAtZhsVbW9Zdit8nxzRtLgGWF5i0a81RrWf6/G9mne+1+ysEPNJrQyLc79qtCifWHnvAwaH7w7o9q8S9q4za28w83tszYXzWzV3v+gEZ7ZPsbkOGxuW2byikiqWJ6rbQuwaLdGvU7ZxUVKzyBZgraGqJGpMDbFQgEUh5r5qqVphIgYV1NKEzPe5QEaBvGGOEviL9w3ZPePPp/emkN5RAq/3PG3qyoJwnHFsodzZ2WG5WnGwXHHlyg2a+RqrVcf+/ordtuGg9aw6CGZOs6aNUeYntlm/4y62qzl4w/7+DZbLW7T7nra/CcZhKhP5UipMNWfZOfaWK65JiwtC77U1dpcEJa52n0zkeDNLXtCjhkTQwxjtLFVFBDHdLhfjGTmFLb5gkm+JAgYLWrpHfwHvHSfWHqGpawRtZ+968jkl4UgJ78654djDy/ncBlCnMHMlZdJaEEvAcnP1OGLg7pd/GR/1DcY4mgoIFa13BImAh7GavC+acwuOvl3ReY9rWyRvIIBPXKpF3k/yzWKhL90tZLULu9cIyxtU7R4nq5ucPzHn/vu3Ob19ihMn11ibN8znM6Q2WVMZqQhOEyh86Ami9YzqhEbz18a+mjZmbcWTs8ZSRZ6lRBWSUM2x1pJCWMhoaprhXBRQCM9RPmbaPEvhPUoop0I8Ok5ci+rnG4yxuRLpOOPYQvns1ZvsH7Tc2BM+/eQtZuvCQevBzmHzfmZntjkxW8OYmoChw3O9c+w/c51KLE0fEN8jldDNLe18QWsDXd/Sdj1t3+FjAHrVdTjqATGUBH2k2k3wPYQg6lcYQ0hMArdjQE92vwhidLEqx4xOpJVY4Z99P9WGJqhmML7l7o3A1rPv4a1v+lEW1T2cWjxIZQYhFh9iq+5U7AtEcEerQ+TITSNdYwnUqPUdhVIExHBr+Xmu7v82b/jKr+OT5l5WUeNYYGYspqroXQI2oOuWCrp5F836PvqUHoOjCqq9vNFE8+ADNR7reqQ9gNUedHv49hbtwXXWzC4Xtj13XtzmjrNnOLt5JxvzWqv7IxoqlaFJfxOTumOllmGo9LF1yvYBiUzpJgb6874oaqqqgowh/qKRa2lGJiEtUdYUDy9BmzJ+PNWEpQBO/cWjhLMU8tK6Ea9/mxgatFEov+A+5RMHa5w8/TAv/5ovo1lsYU2DMRWdC+wuO1adY/+gw/UHiBX6SuiCwEyp6pe10DvUzNpr8UZY1oI3gveWPpozAGKq6OulbJnkF6n5EyJqkQAUiS3KjLl9G7I0ITYBMyWMImqW2mgmBecIzmNEqAAb4N4t4Ylf/Id84GMfZtE8yF0n/hALIxj6LDwhZiqpkaUrMYFHXu/k8LWHmosmoIOMyISo3YMInV/xzO4vcfbiRU5/8Z/kw6s1fNvReI/3SrTc9R1dbEFnrdC7NgI1AWcCXjRWGMQQvKEKXkMcIRD6FfXqFixv0O9eo9m9zoZZcWq9544LG5w7t8mZU6fZXI/McGJp7Fz5Z0WvON0/HHgX81cjYmYgh9FsLCYfDAcfq2K01qOyZM2iwlZU1iT2chlyUYfk8cFsFyGDPKUgd12X7/vttGa5XkahlGIcFb8UUV9ZYggpCWZdq685dWFuN44tlHe9+CtxWK7vtewtHb7dQ7oDIOCrGjubUVv1PfZCx62+ZeXB9Q29jwI16pAj4Gv6mO2BLzMnkzsWJ5PxpE1TmJJdr7vR8wMpkvwPCo2UdtogzIxlVi1orGVmAw+e8rzvx/8qT3zis5xc+wZm4W7CQUuz3kDcAb14CFXsneiz0ZutURnkMJk36cVUyCWiaV8aY46cAKIVJtf23oW3N/jiP/o3+cithpX3+L6nDy7XabqgfnNqmgMxgZvYsyp2nbJYpPfI6iZu/wZVt4+7+Syz9gqn1oRLZze558WnOH96g/W5sLFRUc8CmIYgC7VaQkKok7aY3J/ob6UNb4CtojksKRVNrQCJRk5qVTeg4oOf6AmEPoE2Q8+RRKKdNWHQ7xg04WHEtBzTdLj0c5QYEG9XqTVzPDdeZxJKG8+lTLebhmSeaxxbKD/12A0OXIssZqzN17CzBWG2xoFz3OyWrA5aRUq90IuhlbnG/ILLJlu0wgZl0Xf0weeb40aOVkozk6HdWH5pvGuVkxrfQVokCVwdPS+SKxYkfr4WsJVQV4b1quKEqWiMcNfWinf9q/+Zz3/8KU7Mvw36Cu9WWvBNrC80ikZiiPE1zWjJ1xC/WnN5Nccy+ZW5ZKrwYz02TpQFLPvdFa4vf5tXf8lX8JFum73VHriVpo9FypAk2CELiSfZjbX3LPoO6VtW+3us9q/jV9ep3RW26xUv2mi49JItLpx5kBPbm2xuzJnNYdY0SJghVvAsWa76mGIXNUTcXETG8Tx9zSvnaRQm1ZpxsVJqF0hFt4ljJwnbVFulkYTSRs5fa/WRzyEEjQpEZLRUUNP81NvlppbXl0aOHufrGK/TtJYMQ5plmXL5BTdfb53YJvhA73tu0rN3sEcfieRcPCnE4suaIoiLqwA+shOeTJFYqW6GYLcQd8qkEZOaSYecCGC58APJRCyM1HQjwnAzjIg64EaD0rVAUwvWeqyFE43l7hOG3/xn38NnP/Yk57b/cw72esR1muI1b6AyGFGHPmigjhAMQh3zXYvTDKotPAEvsT4Qo0Idb2iIGtKjZnAQw6q7ylN7/56Xv+6LmT/ytTy93IXggBlGLEEcHov3LvuK3neE0BL6JabbJRzswc4+dXeTU/YWZzYN9z9whgun7+HkiS2aSpjNGprZTE0+QwTgtN7UB8H7GYIj0OfyMRsLCqyxsWTO0TuXc2BLNLSyiqYqNQyarEFkRxAKQdUbFQTNQRUQazITYkIxE4+RJocH2raNzPhGXZAiafwoUKbcRKa5rET0PLkium5D3uGNGKrKImVYpvi8YZyQnkzXuv4CM6Q/ffNGWlv4WFaTDZJcazRoKEWfIPlK6eSHq4dUPW8ieW5+aWKn60Z69C4z3X3EhCNfSwtgJJQItqrIGKcIhJ7T64arb/77vO29b2X3xk0evPPP0R1s4MxNgoVFUymbgBWqmPWiKXKq9Z0Z+GhHwIFPSQgmakhLkIDzfTFvhhBW7HaP0flr3Oo+wste8zoWL/tGnmjXcc0Wq1DjfQz8h4D0K8LyALu/Q99ex/mrhIPr1O0e241wcqPh4j2b3HvXGc6euMh6VbPRrDOztZrMJiixVhUr7An40OHaLqKamtY2r2rEJLPRQnzN+Q7nY+le32s3ZD8E6xOIM5hzsUi5EEKJJm5CrkMUSCOaOJDCCSOENdGBELJ56JyW7iWtpZ8zh8zXowqRSyAoAsNF3erYUiu1bLIGTKRCKRVKev/vCdDTFWju2IMY/1EmehHiDqMvkAinSrM0lXGVQ8b/xQ9PXi+/UcrfJyU0+aVhB0u7cu78JHqy3gfuPr/g+i98Lx/4tV9CxPLQQ9/JlrmPq3tPUdeqXeezSgPZ1lAZ0Z05mXXG0osuir7wZfKJB/3CIBXL/iZXVm9l6T43mW1FGo0xvPy1X8zay7+RT/cL+madeW+Z+Z6+24N2D9m/jtm/Qti9xvrBVawsuXBhgwv3n+bOc5c4v73G5vqcelFjGkMnDvGGECo6YusGCfQCxkdhCsRETe1OVaUYsPQEFDjSqg/NcdZuXSle6DMPb7kIS62ZrZjC8knWu4FMopzqUUsfbgjW+wLomYLaOtFJSJM5fMg8HW3aulmmdEUTfVzJr40FsRS43rloeZlDx07nfdxwCLwg4qyCXKn4P+qg4p066RJXe+o1mE+2KFuSkn6NuPuVR5J0xEHbZhkvbdbyAMnyT0I9ep+BYGPsOb4mLm6LnvOnGq7+wvfy6Fvfziu+9O+xdeYOLsoGT7zvw1jf4wQqW2GjllC2OdXyEpSPRzldYkK087luX9J3Rh9s1d/gqYOfxTQdJ0+cHvm+G1vbPPLKN9KsneQzu4Yn9zzO1LTLJVurz9Leuorbu0rV32QhB5xbr7jzvhPcfeE+Lpw5w9r6BlI3mMqwqLSaQzAEgRUOb512iU1J2RJZ6kxakCYi0RV1FUm38LmOUNnEXfw9skKQYp16j7VsJd25oHNCqsiI/rJo7W1d25ggYMG7rGVCCJm/N2XqDBpvcnsxGTQKxGL4BC5C1tTDUolKoVhvRO2Y0dN4T45CWdMaExGaqsn1vmM50J8pMV7jxc8/XoBQFrsekApATaRCLEc+8RjDK8myp5q0vI5QPi0yWKylj5hNimG3LfY/JFZ4pNMNJNNDtUPARhdXAI8xDlvDfefm3Pj5v8eHfuNXeOmX/++cefhlVOJYe3KP+c1bLELAG4P14PqAtx5v1P/SjSL6PcknOpTIHH0PgVW/yxP7P8PdD97Dg7/vT/LYXsDLjMbvMXMO0wc+cW2X/pmOUIG3zyAHj8ON63TVFc6t19x1dp2L509z/sIptre3WF9fp6ltgXgmNruIXIrHB4/xsaZR0qIt4n0++j94fDCxeqeL1JcqnMmH84mdvmCVk1jFYa2JWU6pltRDMHgHlW2wlaWqDE0T823rKms+QU3L5COmhyLjg4+o/t6AcA4rIApscpkC6IYy9i3V9ys3DY2zWmMyHUjS7CNBjIswUZYElOrl0NpmvAGkNLzjjBfO+5q+yAwpRjkYVVxwfv/UjC7Vugwo5CFrWwxy6Ml4IiEF1CdfIKW5PNag2gDGkDplqbmpDvt95yp2/uP/zgd/9Re4dP8f59T9L4YqUTB2rPeeVVBT1UkAH+h7h7MSQQ6iT5w2IxNN48kFBEACK3+TPuxy8q77eftODY1QY5k7i13u0az2aFc3ONjbpWp32ao67jgp3PmKM1w692Iunt7m1GbDbLGGmcWKHe9zMD5lvpgoeM57nAw+lOTNS0Eq12n8zhclTMm/skgmqxaRLCCpBjFf2ihupwBYChF432OssJgrK/18MaeqBkFcLg80TTEExI8D9WVYwYodhKW0noo1VX5meG7I0smCSVQokiy7cZgtmcbGDCVho1sZChUydU+K83quWOjtxvGrRGaz/LvGhIZFF8x4V9DY1dDgpawRLM1eZCyQo/0ujE3bNLQ8yBzxSvyc+HxsfSqaz140ZQyXuaCCGO46PWPn5/4WH/mt3+beR/5f3PuGb6aa1wRR8CUEz5bR/M8Kz4E4WpRWAhdwOK3At6BUh0krDppdDYIBxNhpPwHAhZd8OZ96Zka/u0u/t8f+/g2ag+vU4VNcWptz10vv4MTJM5w9vc329jZW1pnVjnljmImP2UwaPulJ1RHxnvhAH5PTxejmAcPiuF2C9lG+F4wRyhyXDIFQ9KjUDUFRZ7GGpq6p6wXGCLNZTVUPzWLbto3+aKd5qnFdmMKsmsb3xilwaR2OtWWJeA7nWmb+hMKKYySM5SNptTIuOR3T5/JmEdd5NrMZzuc449hCWc8Wt38xnke+ycS0rVCKXPq1MIOnu0/+JRXxHRa95A/ebs9JlR45ghJT9SSScUoIUbEL951r2PuFv8Wjb3snL3nj3+DMg49oxy/RJAIvBmeE+sQ6WyvLrO9Yup6l18oVvCPMLJ4IjhiyFg6ODOoQhhsUJND5HQCWO9eQxx7nhHuSi1stFy+c5Y6LFzl7+ivZ2lRmd2M9fegIwWDFxxrCGoMmXUhKqwtemdmS7yRo49mA0i/6MBLC0izM5mG8Zwm8qaoK4veVWtTHLCL84E8ao7WO89mcpmmYNdGMjqGLgGN1cBDZGIoYbgbbptptcl9jre5YUw7v894Pllv6TGF6pr9Hxy6W51QopwkF08T08vjp8/ncJQlj+oKhF+pxxvHN19v1bC+6u5Y3Xi31ZEPdTq8d/bx+9ujvU3/xdp/Tzx4CeYQYIXSIDdTW8qLzDauf+5t89G1v56Vv/DucevARbKO7amr0ggh9XVNtzjENVH3FzPVI39N3PZ3TXNLgFBYXEzIK6RIZVJqm+H95zacXO3z1q7a44/RFTm81rC/mNPWcup5hTBWtjZ5KYisDqWNrcp13I1bn3EW64yLs4PGH8junKOaUACo9n8AV1/f0pqOyNjZd1e9O1Q+VEWbzOne3appZZh10LoV5tK15iCziaX3kDKzizpVCdEgQCm15JKo7eS0hntPUy1JbamuIw/My1bq/m5GFUMi/HPdQL8CnPOKIEeBQc1MYtcYmWa+FcEyGTAVv9L4w3QyLCR8u8JCvm56L/mVGYoMmnFfWcP+ZmuXP/A0+/tvv4JE3/m1O3/8SpLJRHANdBAEqAv2sgpMb+JVFnKNxgar3uL6nW61wXukSNQ4ZgQMXYjOZuEsXiJUIbDePcLB8mu2w4mUvu4+6NhogN7Go1zaEoL4Y2GhqDRUS080sa8DSvJOAC+7IhZ7QzClIkuY4CV/Wmr3GH1OYomka6kpDQ7Ya0tuUdaKFEGIXar1D3odRL8sUP1S/8mgtVJqNw3nefhsPXhMyrLExSD/WiMm0t3Y4Xy2AcWhT2LEpf7s5Osq0v91I9/6YCjKPFyCUR8RZRAUEkZyZcuhz4m8zleNQigpSYY5ExFRvRXTW042ZmralbBeomVaxxxIlcVS+pRK4dPV9vOk3fpGL9/9Jtu5+MVIZzcg55O8GljNDs94gDYhTzlDTe2zbU80apUzsVrjIxOC6Ppp2gYD2vHRAhDwAYcPczcyc5Kd+6qd5/f/3b1DV2ihGTASiQsknM8RxNbMp5Y+kesKheUC542M4tKCSr5SETkRisL/PpNIiMKtrQl1pSMe5SMuvnbvqutLsn7qC0OP6jn5iAqtQJFAmplHGPh9DjvK4wiKdf7mPJ3wzJR8oOizRJ9YkBq0s0SSQqqpjlo/L60Si34hU2ayXgDIp+OQTh3TXIx6SxF/XtBYqlz5iXrGHV/XEJw85RHiY9e5243cVpxyfRfIND2OoatUW/GpSfAhN35I48YEUAok7VmY3jheVWbwLzZN8WYMinmipFXGya7+i8i0EF/leOu4+WfG+f/Z/UTcnOfeSP4RpKk3xS/VFyGhSVvOK5ckFdmWxyz72xQmYVY9dVfShgq4idYvsVi3+YIW0LfQdPibam6jtggiGjpPNa3nm+pt5/wc/wuu+6KVZiBLUjiQakSETxPuICDNU2A8hAPJ78iKz4/uRFkYSDBg0TMq+SprSWpvN0K7rokBbRDxtu6RvNYPJmKKiPmgbi8oarFUhcK6PFCnjlLejNKMi1oeZ4wbT0uFcaf6m8Eske0azakyh6Q/5fD5uaUW8U0Gjcp1qkohu7pJIJaIhGIXraB10eGTrO3zh45S3O4N0IVPQZnh1sEGDlDpz0IHZ/8xed4i0AEP8Rxi6SOF9FmUTAVUTPBalLPT9Cryj8S21W0W6iB5vPZeuP8HvfOZTXLz/T7J57gJ1bcCEI/e9EAJiK25tzjWmVvVI1yPeU1cW21R4VxFcnU1107Ywa7DLFX5/n2qJ7vBe6LzHG6iqmrXuThp7kh//8X/Da7/o7+Bch9gE0xsgRO3F2PcTIvWKCmSy8ofbFBcfg+n3XGhqai8RwpDGlpBHXUQGkTouYI8S4KuhX0ULpdR+KUPrkMlXaK0kZGVa2xDzjtUyhSle/symZ3p/DNvkhBQZUtpckX97O6DmdtorBA0Tlelx+f2SVu5hNyKdV9/Hkr4wnPsXvHSL20G6gVidftSLojGM4sXkEUkxkZneAd1JxKhHl95hDFp2JAAesWp6iA8YFzC91j+G0NGHA3y3IgSPp6WjxYSAWOHVdyx49z/9ATZPvJy7XvVHmM1nUSATDJPPOv8WAF83rIylrSroOkznaHqP7RzGV0q7n0CB5Qqpa2wdi7TFwKrFOAehpwue2ta0znNq9kU8c/OXefe7PsBrX/sSZV4rMknyyYRoocswc8YotJqA1tJvDEH9ySGfqLhdEwGt65pKNFG6j75j6Xum/NJRDDDfuUHrpodEqykEF31HG3mB3Oi7c/L4EYu+3ExyjDKm2/V9P/L1vPd5RZXXeFRcsQS4piGKaeglmfrHMTnL70rHd87FMrKofI44p9uNYwulew6hzDG4I0bOKkkXEP8ffqrfpAJQZ79SsAQ8YnotNHHaZdcq/TC928f1TjVXO9QUBvG4oH0plAGgQTBcPFHxiR//29x4+iov/5q/ztrps1rVUZz9kNZHbk6a2gUEY+irgJcKKkPrA9Z7Ku8jO4F2gZJKwQSxFqzQVAazu0+3bGMWDDgsdVWzxr1car6GH/6hH+Xk93wX9993UXl+Slg+z1Q8t+z/FD5TOd9xcaWY6O1253JROw5r5KkWSQsqN9hFECXbyWZZmWSQPyOgaW+DgKXNoDRTM6DD+LnpKBPT8yNqxXQ9SQuXx/XeZ81XVdUIkU4Cn447AFeHTe5BsMJIuEsCrZFvH3jO6zlqHFsoxRz91gSqHL0JDFpy/LoUoQ2BUGnv+RABAVosSwgt+B5xDt+ucO1SUTTvCX0fWbgDfQEQhNhKLVvNwYF0PGCf5lc+9VHO3vGH2bhwJ7aGBMGAmtZZU4bknscUTgAjCnYZyRynEOiDH7hivUfq2EejMsxi/mglFYY9xAvQadsFo2borHmY3dWn+N6/9w/5/u//+1icCrgU7EDR70vzWXrwR5muIqnd3DhxWgESN9II3kf2Pw4LYq6YKALxNoZHKmMQPH3fHhJkFcaikFki68Ak0J80V/oO1U7KeXSUZik1Ztu2rFYKsHmcot3xGGmTSJ8vwzm382nLv9McHRWzTBSWzvV5I0gCfBRwRbpPx9SS8EKE8rYHPRx/KUHg52ICiLdcTdTQqQD5HhN6fHuDvj3A+xaCx7ieKsTYXzCEcUJtBn1gSBxQQKTlrhOBR3/uR6jsNne+5BtpZhUiqlV1dQsptDO9koSf6QpP5yupYjm391HASWObElsNzPtAaCpk3lD3Trs9rSC4EMGDir7reOj8N/GxZ36Sv/t3/w/++l/5n3DtKqEPevTCn0pznTah2wUJymyY0mxLr6V4ZAg+Um0OpujIZ4v8OW3X0bYa7shgkegGlE3mvqfvOiXAmlWDaZoskMIsLTVTKcyzeliS5SYjEY9wTjcSgjpCgaCJBaDsFeZwhX/ph442jnjsbGoW7y2rOkqBTCVfpZ96VLbO1Kf+PTFfjwyJwKF1LPgM22CM+pvpBnsiHUjAeIf1EaHsHN4vcf0S13WaeBzUNEoZ/4Rk2UakFhsrPQSfAI/QI/4A0+/iuuvUqxuY7hZnb9zgXZ/8GPe9/H9g69LdmEoGnSOQiqtH5hqH3eTkS6kGDYAuaBNC7KEYEBeo4nOpMSwGpDLYWUUTami9XllwBGeoQsP9Z76W33n8x/iFX/xVvvbLv0gR0Vk9QgRH5yIS3/4mcgAA3C5JREFUNeoEgk9C6IYsHt3ZffYP00LsI7+rjXKTsm/KWJ5N3209WMtsPle2uQhHCoEQE7KtCCaah8HHRjnGIFZwefGGkSbRcEtBq2ESy2CMqyaf1ofM3J6+xzbCql3Ruj4y4I3vWtpOu64lAE1Tq7tVAk8IxhZbm2hBdkApVZLpW5qnKvig0exYaRPX0lExTV/Ulh5nHD8kcjuhjBeiP0KCIXK3JjEglVCJULke363oVit8tyT0e9At8b6L1INgQszyiIteBaeKCeUunotqOQO6INySqt/H37qK33kWs7rKGpc5OW953Wtexs//yC+xtn4PFx/5Eqp5pVXtKHn00C68vJmHLpBkNka3HVDKDxM8lfNUPdpD0Tlk1cOqw7terys4UnmLtUrJXwWPD1VMkYPzW/fTuW/hp376pzhz4gSvecmDhFopHoedXs8loZjJB4OxxnHO0fs+Az3JTIVp9ks8n8JE0++I15r9PKirSmOpEgih1xzkSOORyqKyNkJb363aNjOvm1xCMzaR9ZhGU/NmTUyi143EFyCTCeSOzyH6acZAZQ29RIFjAGkApWURiTQjQzVHuskSuWlykkecR+djjWh8e9KwZRZUcr2EgTe2BMCyVeBTTFVG2ve5xgvwKZ8roXboKWGDKN8NQnAd0q9g1eO6FavVAX65T+hjYmhk5kZSAFwvUoobJ8lPBASH9R20S/xql6rbw+/fwCyvs3A32TKO85tz7rrnBPeceQX1+S0+8dhnWR20PPLab2W+vYk34KQwSfMCKWKEhfpPk5xDDwLiPVUfH85jux7bORxeW7+tOkKnQfnQ9eprxiC/JL/MqDFgCVS1so9fPPUIz9x8MT/+kz/Na//WX8vzajKxkQpFCZCUQlnu6D54upRplOyCAnBIWTXWWuxEUJKGSqmGQ7giZRkpg7kpXJMRmBGfTmCOLuJxojgMTXWH52PH6wlLQNZuEbsvfct0HanKJZ1/qZVKM74Ef0ofMH02ZfIEH/B+7DqkY5ejDM3oPYigY5zv1IMVfg8Y0tPNobiQtFjT4g7BQb9Ewoq2W+FWK2gPCD4uTAlI1rmCDwaoMd5rVXvQ+rxM0ug0O8b7juBXuH4Pt3ON9etPsxn2OVW1XNhecPHeE9x1x70s1mdsbq9TNZZ5qAgnNvn/fe//ydb2w5x9+A30sVnrkSBY8ntI4hn39YCGXpLv7D3iHVXrqDtP0zpM22PaDudaet9x/ZnP0C53lF0ueE5v3k3j1RT0qO9pRXMvvfHY2hJEqGzDQ+e/hnc+/gP8kx/9cf77P/9fs/RtXuRhOM24o2tLwLL4OOe7Kj1gIQTjuF8OYTC2DEbhifiKsTH5Aa2DDCEQejfESkc+jIJ+ZVVKSggY+HXG/DglCCWTME7IIN7QDXoaQklaqBS+EqgZTM7hShMYNE2lK0EeghlItCfzk8+tPHfRuKQPhYUS19vvCdDjRct/NGDtsd5jw1JjcF2Hb7tYhnPAkoNMGx8iIJLQRIJkI1RvYEugJkiF84DvCH7J2t5NzMFNuHkdbl2mCftsbTWcPrHg0kuFu+94gFMnTrCYz2lqTYgWL9TG0tgaWazxA//397O/u8cbvua/xa5v0EaNEQKjAmqZLM1kzWY/0YMhMHdQ907jk20HvWO5e4NnnnyU3Z2n+PyVt9G5fZbddXwY+EVn1Ukau8lLz/4xtptTJCPYVgZbG2wT+0p6z+b8FJWs8e73vZ+qmWF71b7ea7lYYFhgmio25LKW2kWMxK7RqTjZjV7PWgqQI2KRxhjqSpkHBtM5aB4uaBfkbqjqHxDKJBBDyEDBOWKuqRZJ6+dSOEGrbFJ7u3JkQCZEHzEcRonTscrnp/HI8vmj5uso7VkmJExDN6OwR3EO06GtAofw03HGsYVyLexEkl1H6Fr6gz1Cd4AET5fzB0MGPgi6zzrUb/MSYvdGiw1q5uIPqIKn8R3dapdu7wrV8hrsX2G22uHUmuGOk1ucv/8MZ05tcer0BrOZZW2tYjZTZvSqqhGxsULCYqigqpBZzccf/SgbG/eyOHsnvZEY3og7eyBSYBYCSsaUACVhNl7JqeZ9YH3psX1Hv9xn58pTXLv6GB/41L+gc7uKYkZz7mVnFmzWdQaTPnRlh932Ou9/6kd4xfnvYHtxFkTJn2VeY5oKgsO3LXjDmbUX89TuO3jqmStsnV7HE+giBYd4N6QIR4Cp1BZZi0gYLXBrGWkEGEIMJiKYSUuksEdtKyo7IOiJYBqEylp8qIpjDTnJGtoYa8MuobftEDudz+caXon0kArAlOwChfnilfsnaaE0RjHR4rlkKqZkiCniqtN3GCBLr0csiCb2X00CVx5veowpH5POQ6XE1BPT/bnGsYXS3LyqJT19j6KOLZXvQTzBKhoZ939yFoNeYTQXAyIOExy27bGrFtt+ltWNy5jVPnO/y/mF49KJOXfet83Z7Ts4c2aD9fUZtakiRWHUuHaOsfVAUxGpGr0Izgh9bfjNX/oldm7c5GWv+U5kbR03mQ89pWnKw2AnGg91r5ypa62jaXvqg45rlz/Luz7yz7ly68MIMK+EL7t7gzvWKr760jYGz9pMuViNUyz6St9yyzv+6Qcv8/6n/xlbzf08ePpr2apP642qrXqzkUJtzZzEh8BnP/cEL966j871uqB97JCcMk5MSUI9FrhRgr0omJK0WdkWTkDJg2sLdaObhTGqZRFqqxOiCxFcBIxENAk8VaaUvlUCYabxu9IUFJFM+bFYLAaNxuDjjbRh2uiL50rNlf7Wt4YsPOX7Sv/wEK0kY40occ5Ks7YEesqk+jLUBGRrIj2XzPepdr/dOLZQLndv5ZtprMSuvqpmJBjqELDB44KhDzVBHBWepu+RrqVql4TlZdq9p5H9FbV3nJtf5vzWgrsfOM25s5c4cXKdxWKGFaGu5lSNwdaiOzYmJzWHoOwq0fhRUwnBRh4eb2v+w0/8JBub93LyRV9EL7G0rNxNKQxWn4AmFdLawawLzJyj6nrW93v6vVt88OO/wsef/DlCuMUdmxWvPrfGdzx0gbmoH7HC0wnsGuWEsRicE8RUnLA1f+4VF/j+DzzFR66+j4NnnuUB//VcWnuJQlsxgRsfMh+S8w6/irHBrsc7T20U0Uv5+TknWGRAohJgFQbfWCSM2szl0AeasGFliFEaGxHeoCy0efOKX5O0iHLTHrWgB+BpCpSU70sbStLQda09SEpTM9+v5Fs+xyjDFlNBKcfUTE/vG4FVAEFyMn7azNJnjoqzlteYz/2YgliO48cpfRvzL8EETbESegIGHyw2CMZ3eDzGt5iDm8xWt6huXcHsXmO9O2BhdrlwbsG5u89w4fwlTm3fxfpillu0KX1ErRNkKsQMF+2C0/wbAUlkxjKEBwAkqPb45V98E8v9JQ+95pvpNtYUpAlSzE8YpDIMGkVQc3DRBTaWnrpvkeWSz3zi3Xzksz/LjYPHePhUw//7Nfdx3/qc0CrH6I4E9o3QGYOTCCaJgBj6oDts5aAKwn/z0nO849kdfurjT/Chp3+Elm/jvgfeSDA1YkT7PMZiRB88oWsRtEuYl0iIlTRj8ob94OslDSkRhEnyqj6b/p4WYOrpoUQMARHl+bExVmggc9dKmvuJj1YKWXpefcZxilrZuxGGPh8wEGW1rWE2r4/M/EkSmeKXMKUHCSPzu6qqQ9lLpYCW2rJEcxOKm3zhUhAzqx6MgKXxHAx5w8aYGDk4fssCeCEhEYghA4GQSKXUjJ31u4hbwf515OA6s+VNtlZ7bJmOS6dmXLxrzoUzZ9nYuIf5Ys5sNmc2m1E3MyBElm2TuTNFJFP8l7QVg+9UmmrF/imCry3/4d/8BOvr93D6odfhJVUxRpCAYRekeE7wNC6w6GCzFeYHPXJwwMc+8Rbe/fg/x0jLd77iLF9/6SQL79nb22cJ7FaGFjWbkZSEkBaT0Cl+QxsCxntmPvDGc5ssGsOPfug6n3z2Zzh356to1k5CCLSVwUdf0Ihos9yg1JbBKICSd+SkJdP9GZxNFS4xyuQ4UjFRYMTgg9N0uVRATWJuDykWpcJojvbbpkBHKajJt5xWgZRoaGlG6989ywOHsSnlrhoyjAIZ6AIy2jzNdU1aaoSilus4Hjd9Z2rB3rZtPqfh2oaYZDpu+s6sPERGm01I6ymZ1ookHnkutxsvSCjVJPKaOUNHv9ylvf4sJ298klloOT2D05sNd9y7yaVzpzlxYhNrahaLhroJzJomVtZXGsOy9bCbTcyTUgincHZ5bcN5gVjhl//Tf2J5sOSR134zsrah2qUARkL+XIxKRk1Zu8Daqmd7GZivPO7WLh/79Ft53+d/lK++Z8Yfe+ASd9QNruu56R07lWffxmyiaNNF3RKPGf2imBJGTOtrRdsLvPzsnK+8d4Nf/fQ+Tz37KJdOfQliDEurncjSAjLWxETZQcvFkN6o10V6b8qaMUJu7xcKAfLB5w3JVnVMl0vznB7kpAYtsPZp/8q+5fQ+6b3S91ex4WsphGUMNY0y8dumLBrXsWpX9H3PbDZjsVjoWgljX3EqlEk7ludUClT5XemzZQeukZ9dmKsl2lr6kaWJnLVi2pRMiYIfS7xG49hCuc2KbvcGcnAd2XucRfs0Z2rLhdNbnLprwblzl9jeXGc2q5jNauYzLQmqaajrJjKqESvQQTC43scAbfwSGZKtp+bRMApzMwIVtfM4DGZe8eY3/Sdstcbi7kfo4w6V0uhk+I8QNNlcCNTOs3Hg2NrraG7t8bmnPsqHP/cLXNn/KN/y4Drf8cApcJ7drmXHePbr2AGKmFAYYmA9oKVa0SwOIe7souZkkIAzam66tuXL7lrnVz69y1PP/Cp33P86+vmcAyMjNDjv0um6JeGfmqlCFBIzaY6jnasK31mUsV1ivNWKoU4VHzlriEgdGk3bEBA/MEd4Qo69ej8IYxraHDUVHw9xyvSzDEWkOGlZ3WHEQCyuTn03Ul2iCURWh8NkXzCEQMpNIJ1faZom4StBp9KUTqZrMsNLoZ5eS/r+9L0508eHHLoyYnII6Ljj2EK58YlfZW48d56Yc+7ubc6cvZONE3O2T6xhpaepTWa7rmvtxmupqZmDl0jK6wikxjcxXphvaij+v30GhS6zIYNI0C7MTuCzn3mKZ556iov3fCPViTO46H+krk8qoEmohR6oQ2DWetb2O7h6g9/80I/ymZu/DfR86/2b/Ol7ttntVuyHwJ4YuiB4F30rGULnIf3LLMdkgUzaWLtB61V4H1iznvtONHxu51l2rjxFc+HuoVkSg7ugWSxxc4rV/lkI06xEQRRRYdWWcgFCop7UlDpFVlUgqszbO3Q+E9H3JcQ10TOmc84YyMidKLNyji4Xy+GBGB5J75kKKWKyP5jqO51z2pC37bLGm2q+dKypuZx+n8Yjp8+XApqeTxvDNIQyBZKmfmVg2DDEyKjhz3HGsYXy67/0Ds5tr7M9g3m9oJmvU9cK44dZhWQbO/osweO6gHMhlizF16KtmZRWnhjJe3oeU/g7PsvIjwyBYAS7WPDP/+k/oKo2Of/SP6QgUEDp+ZNXmQVEjdeKwFYLW7sd1TPXePuH/gVP7P02bzg/44/dc4pL6xVX3JJVgKVYWmMi0XLIWh1AKHly1OdOSRNCarfuSbwSkoS2d2zW0PsDVns3mblIuBB5bSpbxbBPnD8DxoTBvJQxn6vSZ0b0NXZEJlJYwFDvmEAXYwaqf8nzPySx4z0hJoxr+Zhkk7cUynLRTkGYabihrMg4vJj1/kyrWbz3hN5lLTfViM456lrZEdK1laRc0zHd6MuCa2PMUB9qqkObR3nd6bpK31K/QPISTRr3qOqV241jC+WDL7qbrbUZFT1VVVMFwyK2Ke+McgaEEIbKBEB80ARtYqemrKXiyYnqj6P8X3WSw1QEGQuuCoY3hr1Vzyc//nG2T7+K5uQ5Xf+SdE3IrdW0Xt9TBVjvPCf2HTc+/SjvevQf0/kn+OuvPcPL1xtW3nE1OA5EfUWXFp9ElwxJhAkZxA1E5DGTIhcgSNbR6dp1Uc2ruKC7JXiHcx1Xr70bay0ve/FDeH+AoG3XJMYxk4maKyqST5s1W/IJ9P3GqICX7ADGDJoxzXDaG3MCe9w0CWCrCmOqjPzCOFg+XXClgJaCeyjswADaKGAjmQalfG/y3V3ifo1a21pLU9mMypaIq5gjkgAn35u+o/RJM1BlJEIEh2k60/UkYRttVEYNfp+yl4pO0scZxxbKO05sYKzB2gUEj+8dvUH9pgDe9bk8SG1xMEk7FktS0mKJwxwhkKRPhAL8CeUCj/oyAahVxc//5M9hTM35F30j3hjd5WFg2QvgTaByKuwLF9jad8jl67z7o/+E1j/BX33lKV6yVnG9X7EjngNTEcTG64gLWAq/ToYwS0jaJG5KqW2BVlUMn8n9OVH/7g2X5rzzqRVPX/1ttu99lfK1+iUi2sC29xE+lUFAEr9raiUnEisdsoAQfRrlA5rNZhNhSAKbiqfj/Hjlc01dkpOJmxarcy6blaXZepRA3q5qv4xLlgI9LPxxQkAWBgArOBdbLEaGOalin0sKk5RA23fZmkDsoe9K35eurdTeGbTi8AZyFIKarI7ks9pKCiElh0S+4OZrIDV2cbrggyf0Zfvq4sSJpcAmxQcH/2QK1By1eYx2yKPMj7TzBiGIoXWWN/3sz7O5/RI2735pZCyLscIQ8vvFabnWzHk2V4H1Wy2f/tQ7ubn6LF9/1xovXq+54jt2xLGq9DM1lhDNVpGoHTWwpwwFcvROGjLgErtAxX6S5JusajaFNILvlbqyKCSwVYXvTZGnm2KIqeEqWTgTocpQ2WExJlXdD4shaYEy1CRiSRX1IlDXWm5VVRUmxuq6TitOEmp5FEhSjnGYYJwvOu0NWc4fDEnhJhYQJFAm+fGlKYwI3vnMnpevMX6fsirImBM3DKCT9z6n0pWbwe3WZBrlNaRrS0LpQ7Fhec3t/T3xKft2gI+D1yLkbCElwEGK1O4QItFtFFhJWGXUmPkCx5Og5pO+p4S8p5OjCQYWL8L73v0+nPOcvPQGQt1k8yf5qpLOJwpQ3fcsDhxPfPrdvOvJH+PUzPC1l9Z4Qnp2TdAuw6INZfIiKM52KKUaNHp+pItI35/+NIK4gRWB/F6G9/owshySZrYMmnEwOUNOs9OwhmClIif6G0gxzUFLxDMOodhE1X9Un6rK4QwI9F0X6wEHpLEMc6xWK5qmOWSelt9ZBtzLjaC8l+WGlkxZPTPJGmvIvLEqrEH9azXJK+VrStcZTfLkk2aTVqB3Lltd1toMJiW/svye6WZTXlvJQDAV0P39g+xiVLnfy+9B6VYoJo6QhAuOEq3EcZPBB53h4k2C92ntph0s/Z20JKQuwmFYP/HjCcW0uI0ZP/vT/x4jFRv3vjabDER0V0S0AVHcLead48xuy7Mfexe/9ekfYqNe8T0v3cbNPfsBNVcT67cY4urO6WSDsSSxiDiaYgmtLK4jRkL1EbUs6b0+4C18akcX4Mn6QT2OawHP1vYWwThEfAR0Ks1RNRJPSWK6XEK6tQ6+gGOzyTtYKoNwpgVWghQmgkQqSEP8ODkgkk3cYTH2fT8K3B8lZKWmnKbeHQUSZcGI16vdwVTAdD5j6McYBJtL2EwMCjrnNRtMDM7pXBN9vbSm9JotVWwf2HUduD5rXM1GHnPwTP3hdK2lSR+Cp6pstih646iM+vO1/QK3wlNXSrIvd0jJT9V+GGKOEjUUgZEWK2/EcJgxmpWRwOHAysmEmsMHuwdceeZZtk69Art5Qlu0FceVRPgcJ3qx8rjLV3jnY/+SRbXkf3rlJutz4VYIIBZjK0xtsSLRFzh8sen6U0A7bQSDD3zYBMqLNr3qPVIZHruhFsh6fQ4vsHf1Mdr+Fr//9/8RpF/RWN0CrNEq/Yy8Gm1zkIuHA7FgPG4e1mS/txQMEZMzokqTKpmmiaGgtGZKoS59s6MAn3LRTp8rXZFSaNN70s+kfQczdvDHkrYt/dy0trLfTVxn3g/rAa2JTZZTuvYEMFVVlTVmLu+yFXXRUTp9f1mLWW5Aaf5MahNprfZ56Rxy0A19YJ5nHL/IOY7RwrrNmHoY6eZMTdHnEsipDZ936PSItt9HfucjtG3L+fOvxtka8eUCUhNOvJp+1gfW9zqufu5j7PdX+OJzNRtrFbv67RruyLE7YRTF13cc2nyCL3bi55qTEPKOi0hsCFS09CvN2OCprWW9brRzlqiLACl/dRCmzNIWQkYK0yKkmM+yI9UUQUzC4fPcHc1u54u26VNO1JGZWNzPqcmWBHSqcdJIwlYK61EP4ND3ZZ9Nhs8bY5RytACCplo9acEUrkmf7VyLL+KlpS873WiSKawUIyGn8lXA3qc/T//sTfZqA99+2yUyzMHzvyVecMlKV5ivUCJ6cUby22JWy2214vh3yT5TmsCI4sbKAR+CgjsI4gyyWOMnf/xfM5+f59T9XzLKMlGwx2tnqoiYNssDzDNX+cCzP8t2Y/iG+9ZYBkcQC0kgYytyiUIvjBdZ2QxWv8dPrv94wxttNpQmwYvBEQj9CoBTJ7epahNZrSSfy+BzRlMPMnTvCMO/QCbVSqbp1IT0PuQrDD6GoMIAggzatIgjwpGLOs1HqQ1HKXQT4TlK48IAoJTCmTNlis+nz6apsHVFchk4JMCDk5VwBbVWIk9TSARdPifhmwB4j/MeiTHSkeXgh3hrmteq0ioXMQqWeR+w+yv8k9eobhzg5Atc5JwuKySBHJkohSCmx8jkOUwZny5m/Hc6QvouCEVGCnFZ+KD5oM9evcGVZ57lzKWvwi7WcDE8o2ZyZBmzmrdpgI3dJbtPf5qb/ed55eka5kLntUOU2FhDKBFISf5svDpFOwcTNAmkHzm9xxtBAsGCqS0rB0ZqbD3HBce1y28D4Ov/wJdibJv5aKX0TxkWpOvboQWeAYLJ2mxsbYyBnXTv1P2WyEnjY9hDs2hSsXPy1RRJPpzidhTIk8zC6UZQFmIfRbUxPe5Uo5c/s78c14UYRWJhTLGZQJvk8zmvKHMf+phbkc4n0MeO0hZiUXnAWt3UQ4j5tr3D990oCaOuNfRU1RWm0o206zus6ak6T+UH1+35xvGBnjARlpF/UAqlZKEsrve2owy6TstrjtawAR96pJnxr37kh6mqNc489Afp8LiAtueO5zgKp4iwsd/znuvvBOC15y3BOUDZzK2t1J80mruqGOZEs6e4F+FIc+1YFzwcjF/71A6fvNJz35k/ztbmRfaDJ4REJFyUY+XvmB5bd3gTu16X+ablAi4BlOn5Krg0rcYpWAkKtBXG1RlTU7C8l8m8Tfd1WuB81M/yfnddNwrMl2DL9NpK9HPwnYcNaeiZeQSDOYPmTyZnKr72IRB8jw9F2wTnlBAtWhNJIOfzeY7reokhMWNykYCxBnPMHNgX7FOmCy9vYDIRgv5BSAZesu3Tbpd8nQH9wSdoOR7bezcyGocJjNo2CDYEehE+8L73sb5xP9WpSzgf2Q+SHKYJCMpibj3s37jGk+1HWK+FC9sVQYwKoiiTeY5FRg09jBhzlXSOg4k30pLpDc8hmGmh3Fh5fv3Te6zPHub0qReD1KOd1EfNlY4V0KLyBCQlysajAJs09yHtTqIbZ1kJkefWp3sIiRwrobDWVnneyxS3ZPoaM2wYJZIKQ/yy9F/TuknnWyadl6MMoZRrII3y76OQ3um5lAhqef15vgohzmaoyIiIrPQpdZMY2i6Um6E2X3KK+JMwGIlI8u+hpkxfNgA36SYTBU53brVGY8pZNC2zZxIC40PGSQ7D6+V3lxMaxPKu970XgNOXvgJvYvA7CnppXmK1R6RtPe7aDbqw5GRNNAstIhaMjalFJmK6hwVNYpv2EhTx0e8k/0gg2NRkPDyXT+z2OA/ri7vw1rCqLAcHN+i66zz44P00tcG5mOsa3UrtVzL432ljIwqXEP1IYdiUhLGQMmgG732uNEnnpa/ZWHjcZaQzWUPOJerF8Zoo/b5cEztKnzOUQlmasLebo6OEadgUhsqM8jOHx+FQTPn+5POm48OQlJ6S51MWUrIcmkVDZYZzG2nf5PCk848xbb2eL3DyQHK842US/KDSB9MnCWCIeZmD6VNyphw1ieVxpiO9L/sjleXzTz6JwVKvnYtaJRRFvkR/j5jrCnjPZ3c+gqfn1WcbLEa53MXE4G6RMlacly70YWKDT9SO08U0QO3lZ0fviIvRec/OSm/evD5JEHDW4A72aPsdLl54BELamckhDI3KHc4sSecciu9Ilkk5h9OslbxYR9k9g7Ck+JtzLvtP5QKftrw76r6WZuf0nEvTdIqEJvP3qM+VGjHNa/m9Y4142B8tN4/SBJ5q2NSDJF1/0uyVMZrXTRhdWwjKTC8VuOyKlUDhoak6chxbKBeL+fBHCLi+GzI9GIKoqeuvkVhRkTrrxouLH4+mq88dhCN8kXMYJ9GIYbJEMM2MX//lN2Psgub8/bm/hDeCVQuXrMCNwXgHbjCVRYgd+kLMkrGZ5yaDH/GNaeGla/Reuxtn03B0ksW5HmFZDCac471PrRAxbG7cR7AGLxQsAtE/A6wZmBZiPvpoEUz9saPmLF1R6UPlNLPYrTm9XmbglH7iwcGBMs8VvK1ln5jp90/9uqk/WPqY5ffdjr916ieX/mj5e+k7DoRigyacmtvl5lAeO322rPnMmrHX5IoxkFaUcSEE5+ndtIvZ8aTy2EKZ0icDKI1kpSfsvUe8AWMI8W/v1QBMi8zHBS8iWQhDzD7RlnVF5UM87yBGWwsUO9Hw0+BDwFQLrZVMfqvzIJaUVVMaC8YVNxXIPFqxfXmpJXV7SJpPP5H92mgRDAGCNAYz/iizNWkx7/ucDlZ+zIt25NQLTKEPGaXd5a2rNJcOmU76OZEkjDJafKWmUTDDF8DcEFJJPT5AsJXVwLcQKyDiMUem21joS4EyxhwphOn38n2JCiT4iE8ENbF9UPDESEonjPdV0s+UzTMmzgKN7Y7Xz+E4eDrnqZAnwCttZHpb0uIZhHus8V3ue5ISZiRokvxxxvHjlOUKT1iNDzmGONjNw44lqTW6BKyJkL5PeZchUkbIaKcUydmxJH9gZMaEwGcf+xyr5ZJzd34N1DMlwUm+ScpkSZ6dD+BVcEsC5qR2ylSIECcxOrX6fPx9MPWG3MmxYJYCOThyAsP1iAJIO51nt4X15h6quLF4AnbkyibfaxBCEwZXMZ9vfv+wUNJpp/uRzi2ZpGlkfyjHNkM2uwyDyVvXNWY2O4Q424gdDNfNkYJXjqR9pr5gAlYMsbV7PC8fQm4olNaGsUWDV0cU4MM+ZjrflBE0NXfL30tkurRqUq3mkD+brIchBlteU9rcbDqe8ZFv2NPexn+ejhfgUxaZGUHwLmiw2h2VOpV8huEjY5TQx511cKynu1RgsMdHQmksb/ql/4Rg2Lr4Or0JLmqwuLOmsp6EXjqnPRgz900Y4o3Tcx9pnAA+dtYahQz0A7eBcW4zhGwRHDihdZ712SbO2ljr6WNDHcOVK9e4fqvn5NYM7T5GFu7SU53u9kHKe1BowwjWTIP8pUlZbn7jrszjbJ0xWDOYwprEPiQrTM3V8v6PQULG59SPzz+tj3SMFIZIiG2qzEjJ+clsTWa4lhP2eG9GApTGUYKaRvKpp+CSCepXlp8vr8NWtjj3kOs6q/oLnPtakhKp5TlA3r4/vDtNUbZDu/rErCpH4hOtEIJRM9Z6IRiQesbHP/Zx5ouLmM3TcadUAQ9Be2gYq0s4OI8Xh09CmXZFyLm8gmKuyfwqRS2Fb8pFMj3X5xv53UH9V10YyX+JPEHWYhHWF6d58NzX8tGPvplv/RN/jle+/BG+68/+aR6477ySMbleNV9Mz4uzmMXUhxBpV8aZOSGEUSPVwbf1WQDTgk45oOV1TrVeWgt918WEgsPvSc19yrVQ1l8mQq4yRNL3/aizlrbwc4firwn9Vmsrbh6B0XXnci+BvndYS76+coNIm9U0kSFddwghM95lMzuAWcwUuU6xZIk4iOhzkkKE1mjfUob+Ks83ju9TjpBWDi3O6U57KBWq+H0wyw7vpNkME8F4bXdgESpB2cb39rh5/QYnzzwMzSIxbBSZNV7927h5hE6Fsg/94AdEM4igfqJIWgQTsCJNbDhaILP2mmjd6UgfUy1iWcb1W9kNddaN9u60neehU29kuz7LZ66/kw9/6JP8t3/+f+HMmVO85MUP8Y1f/zW85lUPYkVL5yQi3emsnHejmF/SKqXfloQnVdqnhVqGHsrPDIu70MhxLqq61u+I/mXa8pJ8VpWNydn6vU3TxLrMIcY90HGCMZWSc7l03jHLph/HLVPnL+L3qVkbot+Zzj25P9F6YmxZTHOsS5+yJNdK15u+OwvvcomRggYz+cJGcHgwghb7B3wVLYhjbujHFsqU5RBCiH5VRJYKNDD9LHfEspj08DhcFpO1Z17mGnezQUGGt//m2wE4ceGLsjkX8jaFSonPHim+d9ph2DlscxLZE262QdOeBELeVY2mmgVlbytNWMI4nS47+y9oqP8q1vC2zy0B2Np6OcFqGzwbiZfbvufs7E4u3X0PB/0en7j6Tp64/F7e8uw7+Y3ffDtVZfnqr/oy7rvnLr7hD3wZa/MaQxvNd0ZB7tG3ly5AvFeJ10ZkYAJPCzAt2qEkaWy6pmNkIMenTXkwM0tzOa2hqRZOv/d9T2o4lBRAMh/T+5KWm15PaY6n80o+cgnCTDt+pXPK/mlC1ycx0MNzB6uuI/W7zCl2VaWs+MGj3PKBygrVYkYbPF9w9LXvet3hotlA3n0Op29NJ2uKaMV3oQLlc2V8qTUrY7BBi3WDiW0SqorPPP4ZAMzaSUgRcRkEJmGIOWk8mqCOwPzUvdgbc97z7Io/cNcCrOY39l2HreqcLxtkohULgRw9d2zBDGli6IFbrceadcxsHW+jKeo9bbti1fXqr3uhqee88uLv55Hzv4/WLXlq5+N85vq7+U+//Fac7/i/f+hH2dra5NWveClveN0rec0rX8zZk+s4t9Q5SOBbRFDL2F8JTEwFpUxrS4s41U0eBYjoZxRnKP3T9JnkZ06b40w344QBBAJd19N1fWFlHBaOqfUyvD5eayVxcvreslh5akmUczQFj9Lwvs3Pp82maRqNbTZWTVyUKWIxX7A65kqBF5KQnlDHkLDEQZMkW3pQ83FSiCZ3fAwQfWnCljEpPaTC0IbagDeCWKX8D1WdBSG2NCWxGYx8wTCgwUCiSCbM1zg1fw2Xl7/FJ2/0PHSyJuDxrlffKIYHInRJccAi2FD4icUI+arHrw8zoedo64pFY/G7SzocVgyVh7kx9KGn7VtcCNRUBFEN3tiaxWzO6QtfwovOv46ru5dZ9js8dvXdLNubvOW33s5vvFUtiDsuXeBv/a/fzT13bCmTQdTOVVNn/8c7T9t32dLxYVikKswSaTQGwUtaqhTI9Lv+1FTEros8ramwPN4v510sVQsRfIlrBqKZl8A5WC2T9rLx/lY41wIDkprOIXGzxtWmwof2SylN0vT+dL5TTZs0dTluh9YmN2SaodO2HSHA3MYifiMErzxJIByX//X4IZFIlaiap7gxqN0MyjSWaEL05FVojCjoT6R6HPIAh9BBXrghmi/WascnKwTRxeXrBZ/8+CeZLS5it8+TKEZ0k0jQszICGEwsxwETNMbVG+HEqddz9cn38kufPeDBbY29edfhjCnCFrefvMMCN/wRKC7p0PviNlZpoXLAxTaBBhs8W7MZt+qgtBYYjWmJaHPZCIoEoBLD+bVzGHuBB8+8mN57ru1e5vrBszy18zGuXf4s3/U9f5vv/76/zv0Xt3XjMwlwideQNsF8conpXQXEyGC+Jw1TAiJHoaYJC5BY4BuiJZHimq6IExtbRUEYktVBGQO8S2tLwyAuIqiCyUKo1pUWmqa1pppNz5Og66I0x0utWv6cgpGlZpyaunpeyUWrDh0j+Zt9p4wUxhgqZ6LwSr625xsvuHQLptB80h2BcskOOypxVxFCGGDkYffSY4z+FkWsKqdBda9pLPS949qVq6xtPqjxSTQGKhQuZQJ4otmaTtgDywoWG9us13fz1P7HuLzynF3Tch+xGkrxehASonesCXmekRnsstUwIHYAlbXs7z7N+z73T7DScOfmF3N27X5tkd73zCOSKSgvrADiFDiYieHSxgUubV7gkXOv5NZqj/c9+ev8uf/xb/BP/9Hf4d6Lm6y6Fi8R6S20xzQckuavzAfVrlxjH7UEPdLfZTF1GZJIx0yPtNATEdeQCebiOhlPbjrHqqow9nCyAYzLtKqqihUct8mp9YoPTHl1jhLA0r8sgaHyvNK1l+0IM5UKGkKn2HiOM15Ap4O4E4qmnqnpMSClTG6cMcqYXtU1VV0xm83yo2ma/KjrmrquqCoT6S6ieRs1cDq8AT77mScBWN9+MSA55Ux3UZPOUicfcglN8jZ7oLPCmVNfjZU1/uPjS3zQQDlB0bvbhT6KEPuh517IKH19C0jwrHae4r0f/UEW64YTp2s+ce0XePTqL3Lgb2GMaLpWCJnlIHhNUXSdo2972lXLatmy3D+ALvDAydfRt4a/8/d/kKZZ01S6CeiS76qMY4Z17HyW2+IdYfKVCzTXXBbPJeEo2QlCGOKHq9WK5XKZwcOUoNA0NbPZvFgXNU3T5M9ltvQCYDITM1XiNaXO0emRdEaeu5QiGn2/ytjCf02g1jhmWl5/yoUtUw91QzIjpeMJ9GjmlHsOC6wcx9aUOYSddv2MXQiSqCNtIl8i37A0kt8RX4xLeexAh9QJKwE1kr5Ss1ne/s53A7A4cV+c+EEbp5Ga3oQokETGdhP0+F4M1cZptm6+mk/c+C0+sdPzyKl5zJSJC0jiBQoDElu6mOX5lX/fbkQzPrEmpGEA4z23bnycVX+T7/nu7+H3ffEr+c23vosf+pF/xQee/tc8cvY/49LWPfReZ9kiaK+KYQPy0SdyXqH4moq7tl/Hhz/6G3zwY5/j3ovr0YIYC0jSXOXuX2qfEAL4gcu29CfTe9I9Ts1ySvO2fD0J1BThnKKiRjTEMEL7w8Col855mtzgnaOxNbLqaG/eoj9YKdGXqONk6kq5f2qDVEbpUWWoLApBkXpvLT4LccjXBGM2ujLSkO9n3iAGwe5CwNdGXZXwBc7oGSNQqp1yTqDvCMGNdtFyB7ud9tE2Bn7yXFrpJWCUUsBCNjGTmVqeUakls7nIYG6LsXgb6KuKjROv5ebyvbzp8QMePjXHlNZq9Ie+kCPt2Ku25+ZBT2W3qOo1guu4fP0diAivf/3LCaHn97/xFXzZ61/Bf/3df4UPPvFv+ezOPazVJ7n75GtobMPW7ASVtaz6jlk9x7uOttfduF9pBsoDJ17D9eXj/N1/+I/5v7/3f8GYVZ63pB2T4DVNc8h8TQvRhEG7lp8pj5MepQnYtu3IF10ul/kYIpbZbDbSeoO/OVSylJtAXde5m1XuO0Jsd+481gt17zA39rn+6Cc5uHZThRLog6OZz5kv5phTm5iTG1R1ja2qGCceEk+CVVoYQW+YLdrmTQGjAfSZcsYO1oUPgWo+w1jDqv0C576WpVsK1gw7lTJQpxMZgs6lQE7hbx1DQW4+ckbSZMi0ETD1nF95869QV1sszj7AFAdN4pt0cCAwFDFErWYNBIuvwCy2Obv5dTx762d46xMH/L57NmMO5eSEfhcjmbQy3jcAaJqK7UXFld0dutUthEDvDrj/vnsh9PTOY/EsasMP/6O/zY/+25/n3//cL/HEzuM8sfM+ADZm56nMjM7tU9t17jzxGk6v3cFavUZYBnznqU3Dlz/wp/nVj/8Tvusv/+/8o+/9y4ishiKCYmGV5mDSaMUNUZ88Cl0pSGVcEIawSQkILZfL/N7pd5YCno/FEJcs0c+qsgT8aE2lY/gAZtVx64kruKeu4Z++TnPQ5siAJcBux0p2Cc9cUxCxqaG29I3FzBtMZTFba8jmQoV3PiNUyhgYAtGtMnl9lr5voklR5ZqUSUSdnWOe+2z+HmT05PtEmYisJkcyAVzoCcENu60f/K5C3gYzN9nD+fnIk+MMNqZq9wK9CDs3dxC7jVSNHjPKZTqSRRSBDWBCQnOTz5saDOnDW8t8+2Ga/Uv8xmef4pUX19ioEy3jcErP5wXI9P+RmTt533gjBaDbv0Lb3+RFD7+B0C8xVaWvV4aNmeG7vvNb+DN/+pt59so1fvLfv4lnL1/l0Y9+gus3rnLu7GmefOoz3Dj4DLWZs9ac5lUXvpmqbuj6nqqt2Gwu8JGPvZ/LV3c5d252JLvcFH0cAUDJfI/8qyVY5eP9CwHEWJzz9L2jXa0IDBq3qipF3LPJOZidEkvUkudSprslMzWHXMRCiBlETlH1eS9UoWJ5fYebn32a/pkbVG0/sqSMmOGmrjzB9XhW6u+JotMC+HmN2ZhzUFWsbW5Qba7h1ufI+hyzmGNnsQuXFYLVJIFAABezmUSUf9YaCIYqQOs6usbgTqzhb3yBzdfSnEijRNXyjhcd5PSQMjajiEr0QyUv4hRaSYvVoKEAEQGn/uFB2xEINLPTEAPueqtKbRmrMkLIMbpAUEGNlQbq2QdCZeibhhMbX8ozN/4tv/W5Pb7uwe0iXYyCzfw2czL6f6JdwyGRzO8p32nyAhQ21mcYMQoAiaZs9aGnqT13XFjnu//st2quLw1975nNLKvW8Vtv/wC//Ktv4Z3vfj/vfuJf87q7/hSNmSFiuHPr5Tyx835+7TffyZ/8tq+KwNkghHD7ig4gZqcUPmZE3rTkSzKS6b3PyeFlErcyvMV+KMbk9uzpmkMIOucaJ4p0nWkKx8kCZLdYMM7jbx3Q39ynXXbsPH2Z7uotzKon5oHqYYLE4vekpQ0+MsdXAazz+D5acc7BwR4uBA7MTagrQlPRzS3z7Q3m62tUVY00FW5eQVMxm8/prdEEl0ob39ZrM70eFzDW0s8rNh+4g+qpq7ed53L8LomzhptZmqc6b8NzJgaLy8+WJTTl8QKKKkq84ZreqVC5w/Gu93wA1zs2z7wGsfWAlKX/JoIzCK3+JRI0J1YCIp5QWYIzVOsXsDvrfPzaiq92nip99ggL9nkBnRc4UgIFwGJtwWw2I3gFpbz32jYgx3chQkPKkDYTvG9pKvjqL38FX/Olr+Rgz/FH/+u/wHuf+Ld8xQPfiTGG9WYbI4YPfeTjiHx19v1DGGhTpjmvMGy40xzmaQC+792hZqylj1mCPTCmDSmFzpRCWYxptUkeIeDajltPX2bvqSvUBx1N57RSr6RCkewk5fNXayxt2WOAS7zW3jrXY3qQ1tMsBdnt6bhOJ5r22RmQpqJbLPDzCuYN87UFpq4wWwukqfB1Rb2oWeGpz59kY3PtWOvid83RkxC58mJ1frXkynuvWRUj+QvIc6zp4FNIPRa5ekfvPR0+ZfUNiyOK3VSJCUMGz3QIGsxGNPYWrMEstthYey3P7r6Fj11b8vLTi3im+cJ1sbzA0MeR1zc5hghcvabset/6zX+Q1Wql2t25XAxuDLlHpTEVZfgtgzMSMAS21mt+8B/8Hb7zu/8yjz77Vh4592Vszk6wNbvEe973QfZXgbqK1P8Fp4/YodNxeexSaKa+n+akjuOcyedMGnIaSoAxGZb3A9O5Jh8o0JP+LmOmU5+0DZ7Z1jpbZ06xunoTc/0AEaFDYqe1YZKD10J8dW1C/i5hkv4ZYn6yGKqmoo+xFHEgvtf5ihZX5TzQIVUbE1NgJwTa0GPXZ9j1OVvnTrFx3x3Iek211uAXs2Otk2PHKac7Zfpdq8VF239Zg61Se21BeymWj+kxE2sbBAehD9oExwuOQCeB3gSkbvjt334XxtSsn3kodvKIDnfyb7NJrNqEIkldSig2nTu6IL0I69uvxsgav/rpXVrnhx02QduTkIiUN/2FjKlcG8F7RSUrqyBL23d0Sdskcy0IOPBdD75HgkOCozJQGc228gScBO69dIIf+j//N57efxcffPLX6ZxnrT7FcrVi99ZSZ00t+JyfmdovHDVGSd4p9JKTBsZroox3DhUdAyVlWSJVWlj5uL3DhwHNTd+VfpaNhjyBlQS6rTnhwjb+9AZhc440FbauwVaa7C82tp0fwKnUyiAthHz+aYMxgjcUIEjU4D4QnIaIfFxexhgqhLkX5n1gozfMb/XUz+wSPvEs/ePPMpcaayvW68WxlskLYB4oMxpktMZllJCuwtf3ydcYpzKVQ4GBPh5/gFWMiTA18cKl4qMf+SiIYbZxUnWxpAS7MDjxaQrjnyHvfCUmyxBMju81zTqz+hJX9j/J9bbnXNWM5eewe3jUH887DmlKMwBmqlHiOUe0KZuXBZJc7uyjOHBKCCdwzx2n+KZv+Fr+zU/+DOfWHuCBU2/kmb1H+aEf/gn+yl/6DkLolQspFJQgookDZTgEBvOxpKccACGyVixjk1MBLwW7NEXLGt3cPTnY0WtATmRP51LbCuMD0qs1dvLcWThxElYdYW9F2F3i9w7oVh2u72HZ5vnuncukZ4Jk5DRfG2RrarwTM6y3/NxwPaOEAYloNcLBzVtseqENAZovcJFzmUakre/KvhQu5pmOsx604mJcUlOOcmcN0TksNVPShRWVcvKYBu0vlV6JZmpKtYvHNURkML5BNVs40veMF8d88RAH7Sf55LUVZ9abF64IEwhy9Iv5fIlABUSQR4aPH3lMDvt303lU00uFxKO5of/Ft30jP/Pzb+JT13+L19/xzdRmnV/7zd/mr/yP/1XshJbMgWQWHs5eiUfX3FMxhfWQ/h4EUUQyHWNZdVKavwmJTddSVdWRvKqEQRDL9yR/dRVWkdUPqKBfq3DbDYTAGpa5N1QusDpYQddjru3S7y9xq5Z2Zx+/XGlLPOezT1kiz899m6cu29gEVu5gMFaz2ZZtj1u2hNmC7ngRkReuKfXLgSQ4MrjRueYwPoRwuAtWXoTRXs9zUABJkRvShIDB8MSTV7lx/Qanzn4Zdm1jJIDp93g0PQ8hE3Lpwo6mS/FNUn6rwGxxJ3LT8unrHa+7M1BPbk7+TFAf7kjAJwnmERKWPzPafIuEh1xvF4rvGTKAJAIMeRePIQpJfp2EbD0ggcUcvvHrv5af/On/yFM3H8tX0XeO2jDQcYoiqD4Euq6NizMWCvsAMbEfYqwwABjalZqUxhqa2pLaPFS2RlDf0kftT0Cr8cVC6mSGMgKEQEzU1ooKCoLnJKxlwTVA13aZ39ZYC5XiA2IEZyr2Q6C2FWGzUVbys5uYrie0HVtLh9ld0i9bDnZu4a/vszw4oO868MqTZHygFoN4nePOxGobpx3MxRr6gkJVMqqscydGuZRcUJO3O1gStuYs3Zh0+nbjBYVE0tBJKxJ6USGQKHyud5r46xId42DaTk2bcu2PQAWvkyMitPHGIFZZzUOk8IjGRPlI9mv06YdQi5Smx/hzAGZ+EmtP8PjN66x6R91Uh7VqmAhXAbXnTeI2vhnRBC37JImUm5T2uBiRUYVA6o8pBWpdJt+X8+dEzVDvPUEcf/rbvoGf/tlf4JM3fp3O7XHXnecxqd9KBONCrJDvvZIvAyNtF3xR7Ovr/F2JqDm0AdcP6K2eruYiD7HOgE1NWMNw7s4XSSXxjvqg5WRTrV0iugGtHvEhbp5BqKsKY4oi6LgWghH6Cqgq+iogGzPMqQWzqqY56JCdFavdffb39uiWK9zuAX53iXMeu3KQkmDiveoJVGaohlGrUAYXLm4WXiAlOxDbQqxukyQ/Hb/LtgWJeFlHgvDLjP8yXFJ88sjjHRb4CAAFJa7q4kpOAWYrKU6ZKik1WOFDwI+M2/StgzYffp9sDvWM+fwBdvfeyRM3W1509jmmJsqiyuVYykotXH4gTD47XHf6Q2F4MZG1vZiXqVmVzL9So6QYMdE3FyNsrRv+2v/05/mb3/t/YSx815/5U9C3+EpbvgfA9Y4+hFw/CWOyZO8Hfy8J57SLVom4JtelzE1NqG7Jlj69nmQ+prBYybMzLY7OoZsQDvmrCR0djeif28rShsCKjqa2zNfWsNtrGH+CRe+wB0vccoUse/zuAbK3goMWv7ePW7b0bYd3FqkaGqA2FcZo7Wm0A+Mtlrz7hqB8w23XsvJfYE1ZTqAiY93gP4bBP5wGoo+MMU1eL3+mxaVxSwhi6BPnbDyMkbHx6KNAIjEZOB2b4fcyOaEUnAEKL4TpCJN6NAfpFhyT3mH02WIucodpiPmcieVvXJhbVkO4FBhPi7RAMnUBRIJpUTT8K9/wCNVf/gv4EHjlQ5dwAsEpi4QYNU1LjVUeq9RQIpLzV+fz+UioypzYpM3Lcq6S8iVdU9kGYAwiDaht+v6jQKbEMVTesnTdiSM2xOdCiK6CWNaqirlv8Cal7qnGDlagXrBPj20Ma6c2qMVgXWDzoMMue9z+koO9fWh7/I19jI/n6foYIhzytYmhFY+w8oG+PYpV/+hx/CqRgkQoFLA1qKZMr6VRBp0HYR2C5eVr5QjRDwxEf8QI73jrO0GEzfOvANR/skGDvyBISMXWJFc3Tkv8e2qrTpz1BAIt1l/Erb138tHLLQ+fXicHl2G0CRT5SMWTLyStQG2httulba9z7txZtrfWcf2tSIfpMGKobIVEYi1MLJfzSpnRR+G0xuBCiO5C1HAi6msZg1jhtS+/h77t6IxHfM8q8tJkFrtk3mcmuSSUeRbzPS2D/WXz1BIdTSPFGKc0IsYY2lYR0Vy3OdH8pVCm4yRtmMmqig2g7zpAcMKIsU5HJJIOEKwBExPtXQw7iQKGRoTZrNG1WtUYUVoPWZsjxjCva2zb0q86mpsty90ly4MDZi7Q7uzR3dhV8Cj4WJwk+FObtCcWGn/1x1shL0gop2BN1oojC05GO1r5e5KM2wrjZATUP/nohz8KwHzznCYkBBASM2yp5ZIIFdooJDR3+O5hatLOrQJeN9sAPHmry41YpdCw+omjETo5QijVdRtf187eis9fXzGfX2Lr0ou48cxJLl9+lL29FWuLiK4aCk1Q+NnhcGVGF5PAbXyeyCze+4DUAgaksYgJyiWzXNG1nc5Z1Dj1rMmcseVmq9c1RhlDCKxWyjiTkNSyw9a0KLjUmGneUt+OFIMsOYGS5gfGFkCRaFCaxtlk7cF1nfYZbZoMvvR9n3lXxepzIabV6eYveSVUsVeI956mqof2FIDTWgbCvKaez3DzQHU2MG97amNoDlbsXbmuKG8bKSkJrF04gzQzEGiq5tC6OWr8rjN6hhfG5uBR7xtuyGCePd/QxR9GMqaUhQZ8FO/RYcLhn2F45Pgf4/PNLh0GW69T21PstjdoO8eitooIjjRrPIJIxnk03nXUNUT/ovA4fAj0Tm96M19EkzsMsTMZKv0HjTGex1S1D0Mc0dT1CEQJYcjQKX19fU5RwlHfjuJ94/DA+MLKmGIpcKA+YxKcZJ5Ofb50jPT59Jn8erHhpU1juglOGdZFZCi0NqkfZKoXzTc48/Yw2ZZDcZwcdrJGcY24KbsM3qjb3lUBsRWtVa1oZ3NMcxLT9gWxNvRWcAdL7BFMercbL4CjZ2R3xqRxzSW5jesV33q0kD7ncxEd1GsQLl68wEc+/CihP6CyEaTwg8DmRjMxBUYi3qEJe2Q0Lx06Anb5lxxva+bMmnvYObjGs7dWPHBqTdkL8nWIAjuic5BMVsnnMb6ugqgy+jwwrw2L2tL6FcF15AVSTFMZCtA+kOOFOc0f7fteiZHj6ymDxRdB9967uMAGrSfRJHbRFyq1ZMYChEhuDZZYxC7R30fwQR8ixMRzky+l99oTxSfmQzOsosQ2kH4v7w+5TEpDHmJjXmxwVNaQZNcYMt+qtQ0pjTIwWDgiEs37qClDLDvUi4x8RLEJVfQDjREIJvebSS6Bj2EfzWQSgkuwYuQSAnxTkcJIRtAi8c4RWs8Ien+Ocew0OykeCRgxIjHl7fajBA2mZmtpFuXkZaNpepUkZrLAH/7GP4gA1z7z21RWaUZMZfRh0zEo1vfUiWTwLQWN54lkoCUthyCBEyffgJEZb/70HgQlbeqci0hrRJ2jPyfJWQ0eTaDQRwiO4F3kx3VI8BjRlt2Xb7bcWvZsbNxHPV/LmqG8XUnQVqsV+/v7HBwcsFqtRmzj6X3pud45ushv2/uhdK7vexXwEPAiucOXF8m8PaUmLu8ZgPcOY0SpOuYNVW1pmjpXf6jbmahhTETEReN0TkGkrne0XY/3JQ5O9g+nC61uGmbzOVVdY6zFVhW2VqTTVhYtPjY0s4bZrGE+n1FVFjGx7jGeRSIwl5BQgJSIH4UvNQ02JgqjJbHU6S0WkAoxtZYnxtoAH9n4vC8qikKA2oLVjUk8GQgUlHlg9Vzaqxi/q5BImtCySPW53vdc2rL8mcwoKZ4HYVZFJ991zAV6awnRWVfuhh7jg3ac9IO5mkf+vXR+k79kSP06AtCsnWFr9nI+feM9vOfJXd7z9IqdleP337PgJadn2ILuxMTNICQAqzCPh/+i+ePh49da/uWHd6ntBnfd+TU0Du689OXcuP47/MzP/Qp/4o9+hYZFYhgiUXz0vdM4XxOo6iEW5wtTM15SvNyAC47ghhYSwQybn0/aXtIGxm231mmlRzZtAd8P5uu0eVBprpZFyTYF2YtjJdOzXEulwGb/T+rsaycfM53flIS6NEVTs6JDSyBaC8kML33jtECG7t6DaV+azkMsVg9tqwoTi3pTiMcYQ79c0R4sj5zj6XjByQO3E7Dn8iUHsGcyK8XxDsfc4uvApYsnuPeB+/jc4++iu/nNmJNnSUwiYgXB6i7cQx+D+wO4w6CNBjkfzM34CAw5pxdOfxVc7vmJR99PJRsA/JtHdzkx289CeXHN8NKzQzD9yFGY1p/Z8bz9qZbt+iXcf8dXs712CpZLTm7dweb8Ej/5Uz/HhXNneP1rXoQ72BsY5CIKGqpA3/YEV5RTMQTtjRic76OPHxd9DHW46JdK2eCmAI5KtHMaG03CUYJACZkVyL5bepR8NuUxki/chYA1GnAfC8EgiGXyecmKbmVoPFSulyF/emz4ZQsshEyFEhJqXTQNKhVMOnfQjB6M5HkcQKcAHN0cycTyQBsdPhfQ1pHX9/BPXH7u9RLH70pTlpNSoqvPrxGH18uFkMaolo+ULgd+tcd/82e/nf/1e/4GT3z0l7nvDX+cIBWxwTIBQ2WUB7T3mt4kKQUjnwhkJyH7kyELJUStIUBdc8f2V9HsrLPVPAxUXFt+iBur9xMi1/XVA8eHrh4vGKxfX3N69lruO/lGFtUG1Y2b1PM5ddXw+ge/g3d94kf4vn/4g5w6dZK/9pf+HOdPbuDdSk1sYmKA82A9UlXZz1SzOtbHeDMK/Ks2r0A8Du2taKJfl0rvvPOatC0DwGSKFLKkf6fJINpwSH3eFCYbhyGGkMi0N0cJ7ExpY2azWQRohlZzIWjsta4mTHHF+ZRhl7H1IBDDRaYQorTOlCh5CPekY3gXsn/s8zaXOsEdXufpnEVCBgCd1+odgkdWLdW13eOtlXAcKBR4x1t+Nn95OrGjIHQYmy5jf3LIBCr9oaNGQrrS9zhb8873fZLv/74f4L57v5W7H/4qmq3t6IB72uDoXWDVOg5WLa3r6ZzHuaELE/HcxWn6lHiPCV4XO8qSUDlP0/Y0+ytM53LvSB88q3ZfkyYI9H6fA/e5fI5HTm7x+0Z1ifPbd1PXjVJq2kpL3azFWqH3HU9c/wiPXX0Ly+4ap8+c4tv/+Lfw+lc8TN/t07s+m1iJ3tBWuiuVi6w0I5NWtHGx4JMQxfKjyIrXrlb44KmMoWmaHAdEhB5P5zXwXWoV5xyrNpJrGRONEhmFzlK4pNxsRaC2A/Jbcscmc7RkY89a0lqsjLtmlYkN5bpLz+XSr86zWq2Yz+dYazN6ba2lnms5VTKJ02e71hHE5sbFKlt+pDGnHEM59DNa2wG6HvvUDXY+8Cn+i5/4V0cLWDFeMEfPVLimSQLp9/LnALXHxT/RtNMsEm0xpgtOsyIF4+GNr30Fs7/03Xzf3/sHXL38AV7/pX+Bevskzhi9EAkEjAILzo2EYvR72jQkoa+6A5jkY4rEtnmSs4sEmFULKtNELbPGWnW62GTSf8P3pXI0AerKkDI8TQhY57FBENfjRTm97tt+GXdsvYhHn/l1rtz4GP/g+/8J58+d5czpU/zhP/hVnNjejH6Z5c7zJ7GujzWZPicVhBAITi2AqjIIFRIE6wN957m8s2J3bx8CPH35Gr/wK28B4Ou/+ss5f+YUVeU4sbXB2Q1L1y/pRXlLc8wnxKTr4npNBM7SLJe+ZWnWJUAu4bNlJlDZO3JKf6ngDKrNJzHP7CcX8dFyZF+26LmZ3tPEeObUChhcqKjpgDKtdLoJTImWS2uhslrPOVtfZ/+Y/SmPrSnf/4435ZN2rsf7cX7r4ZKfsVAOPkt58qbIk3UjQR1IlojggCCmRuyM9374k/zjH/gnrPY2efjF38r5B15FZwUXoPfC3kHLrdWKVdvS99oKT5V7DKUk7Ri8tmT3LifUSwg0rcPuLWHZKeKKj8nkMXOmSJpOSceaFphKoqKAp2sxQmUNi3nDzNaKIIuizKMwSrKkJdCFnidvfpzHbryNg+6KzufwNra3tw6TYBXvSX+XLwRgZ+cWXepVObnH6bN1XXH6xAm+/dv+CG949YtwrOhTZ2kfqKLQtJ3eO2Ot9nYxlr6wftKGm3pV6prwVEZGSQOl6TgVnFLzVcZQRQ1ujeRywWkoKoE+XdehiWQac0z+qo1xzKqqojU1zdHWhlY+Z4oNfuXUXUvnlxIirLUYEc0wCoHgHCIw32m5+o4P8yf++T/j+cYLEsrBVA14f7jL7VGmLNw+L7a8yHKXSg5/aS5le99YOmNpqfhL3/0/8/QTV3j1K/87Lrz4i+iNwXvDQe+5sVxxkFi4nQIgEtFaDWuoT4R3EBHPBETVvcfurQj7KzV1YzfnhOym+Eo2XdP5F5uKRGjexBBPbQ2zuqIxlir6dSZWGxhMISF6ogKIEVa+Y9kveWb3kxx0N/PcXd7/GJ3bP86tG4bAubUXU5kFhMBmc4YLm/djrOWpnU+x113VFLh+n6d3P4IPLcYavv1PfAtf/3Vfguv3wcVzE7VINAsnxiRjW7/SzwtBeWVLP1BQHw/IGixtME3TDHMo445XlQybWFXZGH4Kh96fhFKb0AohUjsm07VEbdtuKAsrhVuT4GXk16aEiKTFy65iqUFQVVUYhuT70PW44Fhv4fq7H+XbfuAHn/c2Hb8VXiqfAuCwED6Xtizt7qlpO93lpmCBTLdzQAhY4/gH/9ff5d/9xM/w0//2B3g1gUsv/iJ6LN5Y5ramMx29SETAyFpMVRkQDASPz6ok7nzG4BtL6LRcWmJWTy6qiqavhJTilxIQQtaOIikpXM1NxaFiCCUM6CgYvKR413AeigYLtVTU9QabJ18VE/H1PavujZEErAhmTOcy3y09f+8Ds6rJVTaCWiTGCKfPvy76ujU+OHYPdnns2qN88tpv8S9+/D/wK7/xNv7+3/yLhLAXu3QNG6gvfcgYxkha4ygTFR8wRVs+UNaDMkk9HW9kwkZQKb3HF3Hbo9aRMYbOOYwyv+b3pPhtCAFEAcKpwlCTdJxIP12j01zgpCVDcSxjhK7zuKYmbH+BibNWq1XhV47NzamynULFadzO7yxh87SDkXCvYChycxCECmJXXM+f/M+/ic3NDf7FD/8gCNz5oi9Roawtq87StrqIEzyVhAYF1wi+WNRB0UwnApUlVBa8p8yzJaT3q2DZEH+P/mmIzYhSDFOFUxHS4GKJlDpWCpp7l2zWQajEx6COYMIYBU2l2nNTx/kr5v35bqJB2dqSaU0kCPeR6cgFQuiREFjIjIdPvoz7T72MJ3c/xwef/o/8pb/2ffyP/91/ycUzCw1DxKIIIWSzclbX8bpjVpEMNJS5uidmzUxDJtOk9SQQ1lqt0ZVhHSgTRXw+3tk0TxITTwioPxy/NymGpEW999hqNgKNknCqFky5tmPalvJ8y/We0HAV9uJuGIMzwOYXmKNn3EUpokpxHCVoU6E8qv5veoGjHU/y9OvCi1wqBgWZTDAx07/nm77xK/AEfuyHf5CAcOnhL2ZuK1ZNzUFrkS72ngzx5hULOQtrKM5fUsaPVmeYEMvJzLCYkzkc/FBKJuIxQSL5bxRiHzN/jPa16NEbZ2L2SQYmkskaZVMMkXY/YFIa2xH3ZfRcGH6Z+iRJx6bFUl6HItxe94egaXHO9XR9T7CGO7bu4ezWf8vbHvsJ/oe/8nf5lm/6Or7tG7+Sdnkran/18dSjjp2w42YTkvUUwShtRa6b+2KxGJmNyawsgcBsYREis0KgdT2N1HHji/HGSJZmBKomtn2vALGsun60hsu1Nq5+mpawdXHdarZPet9R/m4654zgpjthDN5BHwLN5uYRd/DwOLZQpuTmBFwkLVCGNo5yT0sTJPkLR/mX5ZC8WkKx6nRbDiElljuUVsLAsuUbv+ErMGL4F//0B3j2qffz8jf8GeZGM0Vmsxl919G3PUTQJplzwafc3aT/9PeULgYGb+LOF1ykulSNaUKgl8ifFy1iQYVa366LyQVRE1gU0XOodhIjGBlK2lLuphi0NC1mLfkYqNZFODFZy7keZnCsQoliWnw+ZW0mAU7CqLH1QOdcZNXrEe+o6oo33PWtfOSZt/HvfuY/8dGPf4r/+S98B8Evc6K3iTwY2ixVK1iccyAmJy5ozuvg45VkXaM4dRjCDiX2kNagovQFG0N+bay9gh+Iv4aWe+V7xq7UUQXYel6HNWX6zABilREELbbOVCFBWGx8gc3XNAZz4/DzMGW9O9yFqdxdbi+YcUElpVk48cXT0ZRU8Wn6wLd87VdQBcMP/dAP07/1gIde/9/E/FNlPQvWxIC3orGanxpKmRyfRTQzQzAxz1UiHUhElUNi1FMzzUZ1FozBiprY3qOfDQ7vOsT5nDBv8hcnyB+MaCK+lkMajCRfV4XemCK4nyd/OE5Imq+8N3kO08yGaMJG4uv4zwTNRnHe0XnNoXUxhKN+pOWl576M0+v38aFP/Cz/2//xz/mrf/HPYIJ2MJbUKdqPOXVEJLeM07aHlVo7RcB/8CWTxklCKfl1a6sBXISovcp1Vgra8NCwl9Fihvh3NGUOjWlYZtCeBU0Lg+VXCumglKKyiMh8ZWtFYad5vrcZxxbKetYMu0qiOoiv5e5b0VGfXuRUi05h5ekIWSaTn1WYwgFM7mIhpFZ3AYHO8U1/4Et57atfzvf85f8PH33nP+bUQ3+MrtEKgkrdPs3mLwWSspy5vJtR68WfChaEHLsC9RU1HCAEKzhrwWqOZ0rYtz5geodbrRDXYryyoA+lX8O8GAEb8yzFaFVEMo+9aE9LH0GPbLGEIfc2pReWwEY2VuNpayAHMnlJMgQiwOQ9kY0gZlZFXh8n2mPx5Ow8d229gQ8/+iY+9OjneN1L7qT1mhSfZ1QMprIReTUgJvci1TUxVFzk0Jet6F20XhCsNcoKELWvMYaARYwKcB+zbkjnCISQKEUSCmDjOWnBtyS2gGC1wonBekhZSQkx966P99pnu0lBuiFOX9eVvmKUvVG7TgftrdInP1rLvLqjdoEjxrGrRIy1GGu0VMYoL6vENPyc+Fv4jeUoneKjUNejfFBFyJwS9LoC2Y2+SfCxGiM4Ao4gPRiHc/tcOF3zX33Hn+CZq+/k1uffC74j+B4JHouQ9tds92dnbthoglqo0b80CVdV6pGoGQNKkhQMWtFuK0JVEeoaP5vh5zPcvMHPZrj5nM42dFLReUProXXQeike+lzvoIuVCBjDvtvFVEoybCp9SARWdMn4HOhOua4uxt+miRlJC43fp3PduZ6+jxoyfX/0m53zsdqjY7lccWH9RWzP7uWf/sufxJs11YzeK98PqjXrpqGqa5rZrGiuqrM/NR11k9bqDB8MxjZU9QxrawKGvtfsLLAYUyOmxmHxGHww9EH0pwcXBIfgMASxeu9ESIReQ3nZsGklTThYgloiZmOM2ZpkHaY6F52cJMDaaVo3DGsbjDSIVECFSI2YBme/wJpybDuPgR6tr/MjU/WocahWrxhHgUXDT8ntD1QjDD5tnqjcH0F3+y95wyv5R1XFtSvv4vSZl1DPFij8mICOdAwNi4yupzi3MPolTP4ej2BEa/9qCzbq8wDegAlaNqXm4DCnA5qr52ST+AdHkI6PXf059tqnOLP2CGc3XpRNZ4Ph3OYdWtPqfQSqdIJCNDdDZCGwEgpeIzni5OMrIWa3ZHBldINUi0ahrsRycvYgjz3zZt7xgY/wupfejbVVzIoSZrEDc0qbS1Oa0ulSjK9c3MkSGsInyrSvGlU3iWS6ly5QikvGW5QFHlC/szAzRyGWwpVKo/QpRYpKFSPRIkkau5g9MdrfNChSa0VrKqeRh2lo5XbjBTEPDLZzOpmsazIUXCJYZcrTUYjr7RLSx8dO9l3ICKLIZFFJMqtjnVuA+czy4IMP8NFHP8HiqadYP3cnVd1oBXkYUuesxJS6MCzVsa+m332kFBbP5t4f0VfLlxWK7mMh4EKgTygtJhfZpq8TCXgJrLo9ntz/RUJ1ixe/5H4+8uj7eXrvfcUlC82VddIuf3HjVcyrbS5tP0TTzJVloOiebKVslT6c+Qjs8RE5HUFGUvxO9oeD96zbsxixvPO9v8MXv+pBgngcIQfRJZnwVgm0UzXHFCgZofDWRv91AGOaplFN3XV5XhP7vnN9JHmui9BFquQgHyMNzbdN62wAH7tuKP1Kj6qqYxVMjLX6werzyfUQgxGL8yEWUCv3LYCzA62mD/5I3OKocWyhPDg4yAm9MOQtAgPsXZifpYCWf6fXE+JW3pj0uwIAQ1nUmNLSRzlVpyyvL5HYJk5NSud77QqMw+y0dOEW4cQ6Zl6ruVkq+nKBphtoNW+0D4HQjbrqjJdpNHmFWJHee4x4JDEWOA+9xy87uv0DXNfH5tVqeJLikJKvDi+ezy9/kWZ9yf/xd/82tQR2l463vfM9+Zudc7zpzb/G3t4+nsBnbr6FEODxGyc4vfYwd2y/gvVmmzpWaXgfy4gK32i4JhgY5CPuLBJ7R052eyDFINfqTcDwO49+DFvVeHpNKayqjLbWTZMJuUqgL62dxKwAYKRCxDObNcAQt9T3erquJwToeyWu1vADiNh4Tjab530/ZN/AAP5oCEV9TB3pp4IzEpMJjKkQfLRkLJq1PFh6xiRCsMjY7/PSxBTWS9LcPiRf+fnHC2qvXsLUGRiYCGEpXCmMcrtQSTnKPMjShNBJhqFEKH5+0iY5CztJSGQAa4LQHrS03jHbWFAtZgSbRDGiqQW4I6JmSLAGg9C5VfRfj54bBUOCMmij/REVD1OB9m0Pqx7XdmllEFAhCagAi9HvCgJd2KXz13nDq97A+tYMPJxeN3zTH/qK/I0SAv/5f/a1uNWKvu957MkrPPHMZf7Nv/tZnrjyDp7YeQdrzXlOzO/lru3XsKg2tEmQc3kTzfPDkJNsGJBeCDH5nuF9DJrHFC3VrK2QSuO6ZW8RFW6J1frD+qjrelQHmbRlUzexnd04U2zU3Kd4LY10TtN87PRaab2VmrrrukMaMltyLvYuqeti3Q+aMoWBQkhxcD2XaYhwUDRfYI4eNQlctLHVR+l7pUMMbrwDJDi8vAnlyaUbUf5eTsZ0chmhrzEhXA6Xi+lZRvnqPSdPntDnvFLSu70le8sl9dqcamNBqG02jQ3kRWpM5HGJ5FK9GBXKUWA4mvIFbosxWCd40RCK9MrPwqrTbr/JTKMElEIUYK9Ir4GWZ/E4Xvf61xBM2rWNvqfvo9kkBNch9NTG8/Bdp3jRPWf5A1/xRTz2xLP8u599Ex/80Ed44to7eGb3g6zVZzm/9nLm9gTr1QkIUJkq+nBxE4GMNivDn0QC7DBcpzriuuhjK/QT21vUVUWolWIlpddlPEAE7wdCZWurhK4pJUdkTw9omMP3HiNKWha8AlnKwq4+eKrml5RnlbRhZGpxfSRo09sUfdCe1CLdmAojycfTaxjCNIPVlvzhMeuCYQiPJA1cINthXJJYmum/B0Jp6Pwu4hxWKu2O5NU0K+NT01SpdKLl72Wsc+xfQLq6ZLLmmrR4/MFeHQt76rEh+MiB2vOffdPX8da3/jbL/lEW5ksxCK5zdDv79MuWam2GzGowylYmEYU1Lvp7JlasSyx01VjBYB3otxeCKTiJQX4fzV7ntBIl7qxJIFM/DVWcUaxDwOG51X8Say0vf/nDarZr6hIhOFzoFHAwgjeisa+08Vmh90vuOL/Bn//Ob8HxbTz59DV+5Md+it/58KPsXP+sCgE1lVnn5PwhNuoLbDfnmdkFIXg1cY0hiIlWR4iMDdHENhZbWTrX84mrvwb0/Hf/5Z9SYUqbKyb6nhKZEgRrovYUQUytmsbU0XRNa8bgY2FXCEPbvVSVo+Z05L9FEKNt24MP9L1q+HiLENFrUD/aoqhtBej5u1jRU2cTVzcLY0QpWYQYXSDnGBsxWNMQQhJS0cQQUrxaW6s7PYEoD3rHcx+YY4xjC+Uy9NT9Ab6rqCthVmmidTCxVZukWNPhhOJkSpQIlP7USylR3cMCOobzJYwD43pMfW+K2xFC3E3TJETfNYCJ7eLEtfSrFhqLnc0wlcaxQPBW6Ijt2EL0XYPH9z3euaJVQdy5k3hGNe1A44i9anbVCHHjYgIE6UcwMWvI+8BBexljhcWixnUHgNUsmaDCqYvS4HJ1SaI/cYQ+LnwAOi5d2OR7/vtvp3PCu9/7KJ9+/LP81tveiXMrntp7hy4CM2OruZcL669ke36WZjbX63AeH02zPEzgmb3H+cyN32LfPctf/K4/yytffD/1vKYLbvDOAzGW2BNEzdukaYIkX1FDCArOqWozgrarcwP5V9rsbarEFGWKT+g1omZoXmshxPkWUi8WIohENmGjKQq52kStN8HFdGRlxhtQaGtrjNQ4r0jsYNYPLow1RvOl44aUXi8W9fOOYwvl49d7Xrw9ZxYs3uouk3hWhGSWDGU4pRk6zS/U8xvnN5YAQKk90xhppyiI5edTCdHgKZYjZ37Gv1SAxAX8QYdf9VDFLA6BUBnCIuBrTyWG2qWgczSNSgIhCtBIV1d+bTDdlUkutY8zAkOL68F3BuWhOdG8hsurX+UDH/g4j7z4Djy9AieMM0mmxcTZpI+vpzrGEAJNY/ii1zzAK192N9/8h78cHwxPPHWNxx7/PG/5zbfz2c9/nGvLjzGzm9R2AwhsNXexPbtT72NwPL33QTq/y0F3hbvuvIO/8ef+Cg89cAmz1tAHn3Nay3zWdF/LPiOewYdMGjKF1HCeVduONvMyY6ZcVyk0UvqQUzco3/PJc/l3yf8Vc5nMTcEYDh2rhCCU7mSghfE+FADT724cWygfu77Fw1vCYrZiadVkzTGbmOxd+hIlXX16TBdRmRqVPjfErwo/sRTe/Pvhc0z9MJP2HGtd3TlTN6hkUqiCCTjf4+j1eSPaNbluMHUF3mNaR+g8pldeG5J+LPqJSCmcwxfrewMkPelj6GS0GEIyFYU1+wCVvJt/9s/+Fd/3vX+VgAb5JYwpDcsYm0QtqybcuBg3/V7Xda5t9N6zuPcM9146ye9/w6vYW/W85e3v5V3veT+Pf+azAOy1T/Pk7rsoz3Rra5P/8ju+na/7yjey6vZ1DiJIlS7XO/WPdYFWmsonUbNITOqLmkxDF0P8c9ktcc5RV1UuAyvDcEkTJhMxYQhkzSiZgY507ZA1bJzqAQwkJRMIUEU3wyMCVTW4SSGA95GKUiq8DCwamaPWKCorkqwfH9dbyp39AvuUvyOv4u7lU7xmdgWt4PeQmMX8UACadslyl55m5Ze7ZKklp5qzXFAD0DP1PcfHGrdpHo+U45mB2ZCYAoRRQoQLhGWP6wKYTntd+tjERTO2SXd3+m25bpNy45DpXkzIYQHJNzFdljDnZP06nnnmV/idD32KV7z0PoXjnVNgfoIuJrMrLe7Shy+D7CJDYxwRYTab4fqA7z3NvOfrv+r1fNPXvpHgNUvl6s4e7/nAh+N7G770Da/ixOYG88ZQVzO82cjJ1iKSWyEaMTgkEyMncirvnAI2JiGogusdKaThRXBec4o7FzCVatVUCaLCqN/Rez3vZN2kEIVeZ8GyJwlHNgnOQ+0pQ0omMVbUKzBWY50iBCrEOHxIhNbRvLZqEgcTwSUjWKmoGLiLfGS712T7COQVSuL5xrGF8lZ9nvfd2OGOtR3OVbv0ccGVxawwfHFJYZ8WSRk8Ttp1WqRaqv3SVBvM1xAd/6NiPul9IfoxsU8iSZDibhrfm3wfvWWTCfMqiMQ+IyHmViZIL0Ds7CTF84fHcNTxG9K1pxjd+DXDwtxPY97Dj/3Ln+D7vvev0bd7eNdTxQ0oQfnJjDPGUB4qCWXqnpwqMmxhYqb3maaimasfGVxPJYamrjmxteDeO76cIDBfLAhBKTWapsGYiq5zAxGV0S5f2Qy341KnsZmZzG+vpW8mgV1j6yitl9JsPWpUtymsLoHHMZaRfgqYOvumIjYKdxX9zA7vTdyIU5VSArOEhIILQl3VzOdzVqtV7rWiWrJXlgTvSfWZzzeOLZQ3LHysP8vLrt/izMkVYpc4BNMoKlVVVV4oZVJAeqQJHsYQuymDylMSonIik6bMvzOmGdQ3xxgWcObUNtvb2+zceJSF/RKQoxusSP6ZzJvheEkYp0uiFO0XOtLxdIG6uHD0tUTxX9mG7frVPPnkr/GBD3ychx84pzBHQUdR+urJp06LstSKTUx5g/F8JdMu3aOqrjGhpjK6yNKFOkKufUwjoeKpgl+D9cP8JmAnuSjpoYzz0Zz1quFcpFxRDT7MU7K6kk9aZnyVseySoqPcyNP7Ssshx1iNasoy9kjCjUSQYIcO0wwF1poLXdzLuNl3zkG7yoBTGiIySSt8/nHshPTWOi7PhQ/sb3D5YAMTukhU1RN8gZDZwYxIN2XoizEOIFtbHdlBaVroWgrl8PmhymBIvtZEgxBS+EJjU1pa7EeCNTUo8yQf0miTZ6WstZQUrdKdPj5C/Fk+VziDyXYmIQbK4pCSymMoKMDC3kdjt/kXP/avaeZr9L6jcz0u+Aixa2GAauwQb6dS8RMXQ9M0zGYz7SgVF11KwBcjNPOaZlYrbYk11LMaO2uo5g2mqahnM4y1A9pJiiG7GIaCqtFk7JS8j1TKSxYsgYreCc6JJtr30PVKuoWpYsK4+nS9D3kNJUErN+s0lZVR4jGDFLxL5OJ0xOSfsZeB8geJKNqbf6o5aqxQNxVS2VjYrh3De4+en5hI2lYRJOiaFw2TuaCcuqtuyd5yn8539MHFdveBqlYK0dmsKaIBzz2OzzwQNljVht/pHXfu7HJ2UTN32u/Q103s+U4mEErasQyaPldhc+lflr7lIZ8xJOSVLJQDghk1UAbmS617e1/z8LlM/i5+L/GZEN88mur0Whj9WRwpObSSncgk+MTQhgfwYMyME/VreeqpX+N3PvwpHnrgNEraPSCHOg86RzaCHIkrJqOdPvpxxaZmrAbRlS09Eh9XkRUgaNw2J9UbQx/BFyKIp/FDp0n4RtT/C0qErdw2RKtJwxVZ642yX2LwnZiM0A3uTWl2Zi0XZ9GI1n2GYu5LbZwmJ0QAIiAEG9MerRk8Hx8IMQ8gRFcmtUbvCfSof+wjkCNonrQLTsnOCDFNUPlxxQdsBtjAeUdVUGceZQUeNY6tKXsrGD9nx57lfe4cH3cb9Kxo+xW970dmQRljSs/BEB4ZhLM0E6flRSUt5WHIOh1v+nnnhwpzX0jXcZ3swyOhOXrHCx33gsdYO080MsM1JCTSu8As3ENjt/iRf/6v2do6zWw2o4mPummo65rZbMZ8Pmc+nzOLZVKmMGOTtVJW3wP5s1VdMZvNhpYAI7N03Fq9tGa0FEvfn7pCD/dYLZi267RELD6QlDdq6YtEjGxNFbFq9ZPtwD5nTST6StZUYXoyWGB5vovNq3zOGBMZAQZkNlOOxL+zAOXPSoIT8nxoW0NtqlS+t5yj9PcLCZEcWyit3WPdL9noA9dknfceNFyRiv1aGcPSl09jQVOT9agwR4kmTh8jkCf/Pu1rURzLDZ2m2tU+X/H7vgzocf4ykOJ4h83UchyW3wJm9WH8KKW0eJSQ0nCU6XemZwYxT5rPR43pvWWzeoQrV67w2GcuM5staJqGpmlYLBZsbGywubnJ1tYWa+tr1E1TbIKh2CCjeR80gD/0+jA0dZMXfmpnELy2M0jzPPbFBj4d9VWjK+GAYHAu0PeeZbsaalWNhoLIJrfgvKP32qYvmdUmdq8Oot2qA8q5Y1OSuzURUbUIlYIzks7h8D2dxjfTNZTIfr4bk3V2eN2N12v5meyGiVDVsUtYZWMWUvzckeDk4XFsoVzzcypmdJXhRnWaD11/EZ/dOcvMNBDGjUzTzUqomJLi+tHucZQQpufKnT29lob3Q7bHdEKTWZSO07YHvO71LwMJtOHxLGzHnRw9MCMh+//nkcfojzD6PaW1aX27+jRNuIsQhJ//j79M1cwykpo05GKxUE1X15jKEozQ9Y6udxwsW63mF4Opaqp6xnyxRl3NsKZGUP8s+Ws++m4lqJbuaen764IWNEVOKze8B+81rOF8iMwA6pOpn2uzn9c7TyAyC2AQU8VH+l0rS30I+W8xVsMn8bWYDDlaA+U46pzT71NBm/4scY0SVCzXYwmmZe1tYogFTwjKRKZ+Z6B/DvdtdN7HehfQGO1/IVhWNFxmm4/dqNlrByLddEHTnWZ6AWlyspnp/UgYSw14WHse1pLD95TOnmahnDxheehFD7PXf4gQduO7xhk+5TjqeSl+/m4E8GjTeapeD7+qPwUJm6zZ+3j729/FwVJ9uiaarinMkQS1jA/3fc/BwQHL5RLvFMFcX19nPp/n9yXff6oBrCnNxHFH5RLAc87RtR1953Au4Hof61UBIxmU8oCL7AguBGxdKXuFVdoQU9msIX3cmMQqSOMJyoWZXkt3SqAGZqFMqRwEsHyUhM9Hjanw3c7czG5S9JGrqhpZDSbGTdXSGWyj3xPzVaJNHzDYfokTyyfa07zt8z2rThMC2nY1kFF5n6neSyEyxowWRDJxb2e2HqU5pzQXR5wsqQ6ua1d8+3d8O/UMlv6DVDZEMiofs4PKqXuO6z/2lI4/dDvhHx85viuaP7rgJGsKj7DgQVwPb3nL21nf2NKiXmPBg++9Jtq3XfYBk7BmK0OGbld50/JaONz3ff6p360Be0XH9UHWakIfm8E6H1ituuwbBp/a7g2uyhTcS38nISmFftpANpvUIeTu1HmaLBjrqSSw8Gkeh8/ldutyOPR2lOlaCuKUWS9dSxrTTDVr7aHjp0mXiHI/X6y1HMcWyt2Djr0Dx6r3eG8JYrnSnOVd3SN86BnB9yva9hbBrdS58CF2MAat9uhxrqPvO7x3WDve2coJmAI+WZu6WCoW/KH3ZPMXDfA6L3hnMN4ysx1/6Xv+Iq35EKvwDmq7wkpk2wn6IKKAKW4gMI5kZBAghURiRggyCNP0kT+X7F8ZDpiELwpBSpzWFuWWEAxSNYSqJoil5hLn176Sf/xDP8Jb3/ZBzUDxBulBuoBvHe2qpW1bQtDmsnVdZ9O2MtqJuG972raji52VvY+VMGjVBZJ4b8B5YQhrQO+EVRfoeui90ewbYhjEmKghYske43AGDPHEHBcthG668GezWU4JlGLeQtC5tFYBJmeFVRPzrfVuYI2hqoZW8BZlFjSEfL9Tfo+PXE+aheNxriNzPwWtdU2FDlWlmU7Wal8TEyAVkCkR2oAz5MwiY/KGktrJP984tlAuW8eyc3Q+4LD0CPt2zpX6Ah/e2+bJPaOs4qHLPlj6aa0p0L9+JFTT/oS3FciIdk3fM3p/Qi2D7uL+/2nvXYNty66zsG/MOdfa+zzu7Xtvv9/qdwvJli3LsjEY2zI2YFcc21AJVKiC4BiIDS4oQlKpUKn8oCqVKqqgEmwKCmKSQMCGgCNA2AjHNn7JoiVLsiTr1VLL/e6+t/s+zjl777XmnCM/xhhzzrXOPrfPbbWMcPW8te957b0ec80xxxjfGOMbicARcOMRFm6Fv/iXfwQrfBQvDz+B6H4TXRgQXKWM5BZSPwbWtLtc85fXieo2yH1zWCdC6QOyoB7wfY9MwuLWxbvR0Vn86I/9XYzRIY8MRIBHRh5TsUycE67bvb097O/vY3d3D955xDFi2AzYrDcYhhE1Bcw2BK2oYFL/EBgyY0iMmIEhcXlFFn/XYqPC6GZZPbn64lRTK81KmtfRyjRWQTXt1ro69p46VSTk1h4YvDLQGQsAbIOXbdZSEMsDLg+aYeWBbYZZCyjaIzZuIO/lPN4ZCXTzMBWlZ0wLrNGY0KcZpxbK5AjRAZGASBkDEQ5ch0t+Dx9xb8UTl8/iGnZhzBmyU6JQAy4Wi2IyzIXNJvEk8OckoZ0LsBUhp5SkGWrKpetWzgOcP8SP/KU/i1tu38Urm5/Hy5ufxEifQt9VKscS/iizPFVy5o2W5XEdy3eb1zh9e9WUpHEyECF3HtlLeZLzHXy/A6YOY/K4pfsWXLz4Cv6Pf/BPEVOS1xhLLq2xxlnSt2TC1Mwfi5fZnNliaQE4eVWffxzH0k0rpSTNUPMULQYMmW16i2Ca92x+b2vWtuZea9LOwZcypzyfTa4a0tcO1W0nLcuLBWiyxjhrFxnT1DNMwkx9Iq2ltOtT9jqyCcB0w9i2Em4kJHf6Bj8zNjkASPBgeDznb8anDxZ4+PAQN+32SHBwNAAugWhZHlwrQHI/ckNtCt48eeBY6IMhFuaWhzXVmhkpMphJcywzPDJCD/zIj/wgvvCF5/Ev/8W/wvPP/yICfQj73dux8A8BbglwX7TyVJqmkI9ca5OgXiaofGDrYPtPUVYx65Sqg6GJ0QCnhBwZXbcQdHOTkYc9nPVvx//7L96Hb/vW34u7bz6LzAld12G5CEic9LhcSsxyrvmnQNVQ2/ycrKGQkiaH+j4DN+ZExe1zY86N/1fLmNpc3Db1bS6Q9h57pnZemHloT4HF/ZDJTJI4YbWtbagKYqmJOS6cOyCgVq8L2VXOunFA4q2+qfYAC3tg0MR40cpOaEBVA7fgYfu9+NqnEdw6Tp/Ro0LpoOYOKgHTpmM8He/BJ18h3N1fwX6/AtMA59eg1EHSJmpiwTbfsQVttoE/RQipkZNGGIq2bH6WnV5zKJkQIA088+YId99+Dv/1n/6TeO75l/BT7/1XePHFD4L5gyA47IYHAHh07mb0dF+dLHcO4CAoY8oSg5oDTZOfTxJMZSvIALw8RKfs7ZwZS3bIwWHIjDRmeBfgux4YR+S0i538NSBy+Ev/7f+Iv/HX/ipuOberyKUuZGj/R0xrVNsYY4s0Hk/O4IKCkw8a26Rjn7E5b1vMibkm5MmUK6VGW4zQCqr3fvK39qs99xgj4BgeVFtOpIicRjjyyIngXQcoWwVBKB9TVouJbK3FYo1A/UpSpNQEXM6dYL1DhbCbQSTHBQHBieZMpKVnysAOZhArjUojH/MN6LXG6Skm9XjZHFujR8wZMZ/FFboXn9js4JGDz+Gt5w9k4Y23wiGiC7Wky5LW55pzDvbYw5n/bDtgu0vb5wRgmMLWUflavPeQ2nVZmJ0HmAfcfcs+fvhP/wlcunqED/77D+Gpp76Il158qtHev1LOsfC3IrgzOL94D/KKIP2/qvaezdjJc8nyyJhlV6fMQjqlVBJjSuj7hRBxRSFK9p0H+g40iPm4yG8FpxF/8S//Ffytv/nXEJZZkFjbwHQuWiGYtzRvW5vL/GrSAbO6AgzneDKfdixLsDZNNkHYyeminTbUSSkVn3L+agV9WwKK5LOiXK8jSIofGJyjlpooaGeoJ2lW0jiUtWHtBAlR6sydE2pNShoHBQgRzklb+uxU+1fKYLFkEOBVOYl5UzV7qRc1CxGn15LA6+glUidLzIKu94hDxkHaw+e8w2evvIyHd16B378Clz0YcbLDtj7NNl+x9Tfs55PMrK0aVy+uFdqiKbwV4iq4Q0DfeYw84MwZj2/99m8E53eDuUNMGYcHR/jgBz4IkTjGp37zUzg8fBmJD3DL4rswDGoOKWJbJ+eUcwgoKJDgIAzoCVF6KnKG74IwlidhRnBdAHEAYgKzxzI/hqtHn8GP/q2/h//pr/xFZB5kfZj5WDYtYTxo52qe9C9zWs3GtkKjHfZ+q4Zow1s251ailHOt7phrxHnFxPxZT4ASNBsyREuGrrLIyb1FECVtRaAmJKcCvJRrC16eFUd7F8AJJJiz9hyNqnSEYIuZRfvDqF0YYK8mNMs8Ewmyq6V+BbnngtE3NDLXH6fXlM13SXcA8g6L4LAbgUgJIzx+Pd+Ge189wu/pBni6irWTng9E0EoD2dQyQ/4jhvNS7NqCBu0DaUfZrQiYcMeoCpXE4hZGbcAEsvCEEi9BZktgEdsKJfmaA+HMcg/f+z2/X8MsCX/0P/8+5Az8X//nP8LnPv2vcHP3hzAMAUKk9Nq+5PGbYQDCYcoZ8F2HwA48xlKP6jov6W5JF7IPYqZlgDngXPf1+NCHfw2f+uzTeOyRu5v5aSrwC+ubzYWHsBTUFgLCqVpp+HOKIHLaB7KCQC3VB0Myh4IPkh4HC11YIrsX9460cS5qlYbzAcMY0YFKIvsYk4bQ6sZhIKF3hBxFeNK4FvR3sg4YKQ2ijbPm4uaxWDFSJZRA9rSd3gc54avVEJkjhqNResBYWqbNKQRJlVDKUEIr5BjMSYQaDpQ8emj81clm5DLjGIn4CePU6KsN1p1HehhmxAgsg0PnJA70YnceH752E17a7CHFQwhreUTOEdK+LsG4Tp0TqHkqXPWh2OICWh7QOQIHVK/++E23ca6K1agwQHdAkiB0ACMQYxkIe53DXi+vM0uHM3sdvFtj2Uf88A/9KTz02G24NP40+mUWxrOCAZ5CTRKaB8TgnJDiKMzgXkiyLO/UBw9yQNasGwuZwPdg1yPgAeRE+Bv/649JiVHDxUrNz8y1oua4lqpzLpqOtGJkykA4nVctIGclvUKl5rD91oiqiFxtW0cyR5m5ZP7Y56RB0HQNlNRMAthlgBKYBxE4JICyVKvkiJwH5DQgxg3GuMY4rDCOKzBvwDwgpQHMUfxDSiDK8JTRBWDZeyw6B0dJY9gRyCMoj0pRpi+OcDwCPAA0gNwI7yKIN3Ak33vtctJ5QueB4BiOEhy9wVUi88GM4rO5Jr60cR0+52/DL167CVf7M1BjuyoutrigPEhzhlsbvPVPTKiSkgjbA3vNQbV0yez86fWrZm01qr6s7Mk6Z3nv0PmALjh4nxDjZfzIn/sBPPzW23Bp8z70fcQNacj2hMwQDp4BcRxAlMGdmhIxwUELl60TFynxMVmVxBK3Lr8FzzzzLH71Ax+Bwfc6Bc10VD5WoCaWW1mVpdHZ30MIot1mwlgzcKY5p+1za0Mg28Y0hDLbeJtnzrPvbeNVuS73lzV0I3FaMfclfBMR44gUk1obUQAeR+U5S48qi4t6mW/tr1ksLn0Rs7ZSjABtwLQG3AbOD8h8BMYRyG0AtwFjBec2INrAhxE+jHB+ONWyuHGhJHOiFaVLEUPK8H2ADw5AwmHYwSc3Z/GFeAHIPYgZCZXnROxrCJN4VqJOZjHLkpA755iEsAqNPc5c/J72YW69sRJ8tlusQjiH8/Vo0O0YYM3T0K9CExFQKe2BGK/hz/zZP4kHH78VF4f3gnFgcXRZLSdcG8++EqC0rgk5DuLfBEUPx4iUM4IX1Fi0J6vQWWaRR4/70NF5/O2/8+MAlhpykIavzBHMCWhiZZa2aHM4R2Bbn5PcVFvOffw2pth+fu43tr5i27i1FeJtz9WAIkDWAHGWhG9OQqiMDE4jkKMsZol91FaD2sPFqnocaJqJYz8ztDkBzRL0s2anQbioYtR1yXAs2tNTBnEs2pR4gMMIhxEE+d5TRHBfZk1pvkhixjpGjDmL0+8WGELAS7gVn7hyB4ZVgBsjxpHAI4NjEk5UZsTNGmnYiEOepcsys5AV5TwipVEXVoLzVL43c5fKBmGvCv2HJlBNpLo5T4Wymsl07GXrjBnIqfLJVLc9I+cj/MHv+k4M6RJGerLuumTM368NgxsW6ABhcEgRBKDre4AY4ziAszaNYdKEb5SUOKm08Lh999vxyqVr+L9/4p9LhTxnAdkgZl7OTWZUnnLX5JxLCGRbdYTdQ8u5ZGGSUoPZAHXt18m9Uu2oPAf5JMm+OwbeFc3O0AZEwjxQNpucwClhHIa6yXKBcFTDtfMNtdxU+5XfVcejKA1GafMAZiX+ikVrSlhF31+euyoOSuK28SimNiVkHq+7Fmy8bqGsuxsj5oRNHMAs3C4heQzxHJ5c7eOpIyFYChGgJLG4NEbkmAqlQ9asGzMTnE5c1smeaEyd9VYY26yRUnFfiKJceVCW/nSswqQ4m1UgWUE188WsHrG8BwA5wr33343QBSS6hHkrBdm4psJ5kohanCuNERiiZEJ1glyOcSwxvZSyNiN1pY4wZwLiOZzr34Z/9I9/Es89d1EhfAO/ptQsrWDM52/OWSrAXEVZC+jTBMRbhNSrH9lqwG3oeovAM7M+q2la3XxjcFBtSco+kZN06ibGZr1BGiU2az1My4ZHVKlDVOMZ62DW2LAIXhVGe1ac8uRlWhO6ldrLk4d3QZ5JtuY+jBxFqInF8jnNeF1C2fpjrCe3KnMCsMgBmW/C0/lWPHF4E15iYOiuIfkBQE2za32JNuWunmPKLtA+/PYh22Jwvgkm6fuM3tCOOdWQFZgwv1eDKsd82/kQ0SQsd5foQod1egbgfILlasLpG07SgnnUD9jOPEj9KWkys81X6ALgHGKWPGAhP3ZILJw3+/Q18NjHf/8//FWQWwLsYMiuYQAAjmnwts61mpxUdhC31YTNx3xW2zhMc7RCPA9hyc+o2j8y0phUqASFFSG0RgaWNq+ak6hgDJNzGzI82VjqdVjaoFXFbEvpbBbMRGOXvxFVQu7m+O082mj97OPkcdvH69aUGaWOX901MWWHlHEUAsYOWPlz+GD/Vvzq4Z04ONwFNx2Zc9aKc61Cz8wYU5KKdG7Sq4BjE7bNLCrmgz440jSsPjgs+iDleFv0VKlggcS4RK/Uf8kqBmxXZga0t6R30uF3ejxgiwzrdaKYtp6kYBctWio3i5Qi8jhKEqMtppyQAYSuh5RPMaQ/Ro9MHiM7bGLADj2EF158EU8++TzAHYAOzL6kHIqPXLV3Sql6V+Ql5KZ2iSPpe+3Ig1V4CMLtw1n4d6LArIDzSEApprbyuZSE1iQnZSbQYAPBgRPAEaBIiJsInwkUI2gY0CMj5AiXBlBcI3AEscyJ4A6sGkjMyHmt7hRMctJywAUYG0NKCZvNZpL4YEJqfxeCrOl6yMhC3J0jck4gM1dh8VIum1UBKG29v9FCeRLgb5oFUMKhzBgdIQUpBRrGW/Dsq+dw9Zp2+MsNT4/5H44wKDuBFdwaItjuPLIj0bHfTb9XP4G0wMoxFn1A3wX4E3y8nLNSUwxIPEIoBTOk3Y6UnKU0aGqX5mGWHhWqQdCpMDb2zwmzaJo9WIsH7wFXtaX1LUHKku7lnPLBaNaJC1LbyEDXL+DDAkweCQ49HgHB4yf/6Xvh3BKcHXIyvd5+be9fzAVHTlvWybuYbc69aob6efNJc56GNTKbc6Z+uc5VsVAKrb+5BhpzjSTdrtMI5AGOBRjpXALyBsgDkEbA8l3LsRUsc1N8Ye4Pz39va2wYhoJAz4vurbkwq8NJShIGjY0atmH+utxjTda3tcVcmxWdZnwJQM/xUS6FlPaQgZwdXgx34NOr87i4VhMS9hBrLMoa0tbsG3/MFGjBnNYkaQVNjmHkSPWBdH2Hru+2mjgCAjV+V5JdsGSCaHlPTDU7SQ+Ap558GpvNBrvucYC9JrJPSZgK4jpXoeU+RHtaKwjxEzWThyAxQ1f5c7zWIaYs57HaSSIHhzNYurvxqx/4AA5Xg/hPRJPCX1A1SecUn60pVkEwGW0RsnSoqk1lbe7kldWlSSXR3LSGmXIW3slNwXpKEs/OLJsgkdljookEUc4SqrJyrHb9cfVjt7k987Vko9WSJ7orM/yiHe3n5n00zY83k/k040sTSmr3XYJ0oGrJajM2/Rov9WfxKX4Lnjy4CUw9RhAiOQVSps047WvXKVmSOml1F6yAwhxkkK9o6T5BAtvBEaFv6DPmMHw7WlCkNbdbgMIo9J/+rWfADDg+2/imXMCGiR+LKarIYisWc7J2BzY6j6Q0ndC+GlLx4sgjaHPVMWWQC+iXOyKYcOBMGKOwrM2BHCJSbYyiOc1iaa+BGUpDWXNlTShFyH2xEubz1s5XW50/R1br9WTkvEFKa+Q8IicxD83v4yybsTyLpFYQyvOWY5rmklfO5vOyajLTZvWZtJv+tnTPyVIn2vr7FvuY+p5czteaxKcZrzv3FShWCjSlRb05S+cyYycAtI9n+nP48Dri3uHT2OsP4ShCatwtOC7HKruO3jATzZw0ah7EXPMAZr6WX+nnWTcQq/4+Hqc8PubvYeZa2R8CNsnjvT/1L9DReXTuHkDTvdpQSwFJ5AAK9JYbKL0mzScW/xoAtDluisJh47vS+UtAnoDOOQDiBnhHcF0PHjfNDWCi9UxIzGQU/06+ZpZ0P9nhZV6980JIPDMFi0Chtp9ofVTnsmpjX2KS28InzIzFokfcbDCOa4ATvIvgPICy9OFIMaMPpOwQYmZTA/wY4CTrJsEaBsk1BjVRrc/NiJxrEsW2/N/2/uaa2O5lrk1bvEPM1IhxrJZDCN2EWO61xusSyrJbcPs7qGAKQZJnB0+AYwdHIgiX/QV85PIS77qnw056URrpNLur+BmzLJtGKOviOOG6Jt+YAAAa+QVIgvAmmEMb2zphtNfS8tmG0OEjH/8Crl45wDn/HoBb8rBqpqMJfrdv0NoBMBiUVDCddXWSC7cu2XEc0YcF+mUv8VIQ4LX6nTOcCZEPCF0HGufPZtpAaR7wb4XtODo9DVHYPJgV0wp7u2DlvXnSU8balNuiZxi6zohxA3jJbc1pUMTVA5mR4qgAlTkDWvVfABXRlNaSzmhOQggTvh17dn3fT8zMbc/8uAW2Pe7avr81VXPOKoiyHm6kbcGXpClBKIHZ1vtgCK0eseS3QgBLXPYX8IXxNtx/9BweWkracmbJ6xS0DgBLw8+WSBkTbakoYlU20+s5dpFtgkClh2gFM80E86QdjYjEv0xAhsdP/MQ/w65/GL27Bym1Z7ZJ4XIfk4erb2FopggxOJNknBBLOZEjeHjVpnI47z1810sXYicpYsTCzJ1TRPAOXRfQzkJddKahar+RMn/a3MZ8VjFnJWkCVIXa4rQ5Q31VNxHa1t9iFmJsoFYH2XktHEZA4enNLKRb3onv7kAIngAICOdRExfKPM5MzVaTxZi061UutZ4GuLSWgyG2ht6e5FPOf9eWmrVa0gAdE1JrqWEm/GnGl6YpYcuPq1SyEDHJZq31eGrS5uzxcrgfn7gy4lF3GePmKpDPw7kOoBWIEgLR5IaNAaCaXrIDG4JnwiaX4YqWtKurLe7MH1WhdgTqO6QUdfG8Not1VjPYdz3e+973g7PDXngHiDrZSFD9CZ0o/VyW4PVst6Xmf0FwgUyaLWL+lglITGCXJcAetL8FMxwynMguxngE3wikEByTwiRSuZET1JT3SNkWsWjEpHPchQ5JNysXhJWcQJqxRiDXISYCvEPwvSRokJBZZV0LxEDfdyoEVBZ8G1dOMSGmmoWTYpQu2NRJZZGT9grWZ0C6LNfCaglJUCkLs98LKVguJmPdVI5Tyth6NqFxzhVAxjmPGC0lcAoOjilLNy0AwxgLWCjZVpbUUdsAnqSVt41TC+WJBzSZoGLy2+WDwMjEyF46NzEIK9rHM8N5fPbgDO7rXwDhKkALEAkUn5Lu5A2IYD5L/blWPNSLqBckl9RqWkDiSDULCSTRsmJ2N4c4CX0DtNosd3jiiQ9j1z8Kj3MAfAEfjDNKrIjG75hdZWtXKOKuP2ZkMg3lSp5rGkYAJPyonTU5JWnhrabvGKVqAuUWSbhXtfER2CHGUZIYSBYNINofpGF5ljxldkK2zDDkUTZE5uqTWWhE/paKb8xAKVKQJIipmTeZzywgHDkCstRHOu8liQIC1uliqBsVppQmrd9cg/hTLTrXgBPgq3nm7e/nIZT2JZZGKEkzBojlLBswcwUkTwvw2Di9UDbfG2jR/kzNm8xaTAA2YMnxZoKnDpwcXuzvxS+tR3w/X8ROfxVMCYQFsEWbmClwkg/U/rz1umeo2Rzmt9+xLsz2uPXYlgtLCGEH73vfzwLssEfvgHW2LLiAmfR2rNl5TvJh6glRpVo1L6mySCNjtWIE3oXvliAA4zhgyBnL3hcTsODh2ucj54w4JjCcorm19SBI/DAfAhjQBA7dEEIlmyoL2Em4qg2FyCJNQKo+vxUCCCJMxbSc8+9kzvBECD4ALsMhik/tauWQzaMnB9f0orTj2eK3Y0rop7b+2xbOMFPSzNo5IrwtM8f+bo2riKjEOAGU35t111bebPNJTxqnN1/bdcOtHuJivdY36I0QMGqaVyahx09MGHAWz7h78OzhHXhkQejyCol7kMtSO6iJBQQJYwhtpKBvJlPFVwOKH9T6tMB817OCAdZ3KJcKK0qmhErzHdRQZWGZcCAO+PCHfx27/iEJg2iPdmbR0aQmI5mDaw6knnUeuD/2oBqfTu4BkAp3kprBQbKm+h1G1y+QOWO9XsFlj5ykkLfMfxa0uLYUkJ18Mw4Tfygzw6spSERAJs2dtRvQa1KtRV4raBy0akI1MbVaS+aj5Ouq8LSAh8Q5Id2Q2QHs4SW3Ts356ppYfNLmrBUgEwBzcbrOgagCPCZkJoBEVNgVDfQZhqG8dwJGNWauMOSNEoclMXONqtM5o7VxajFl6VKmq9Q5P0kquN44vVBODjiXQswtSOgKF5tbF3bQXwdkHPhz+DA9gtsQcS+ex5Gia4w6wdAJcXpKu6msfitQhQgs6U1OwRO7nqmA5QpMWTNYrvd27JaIAC3hElDA47Of/TzGccQe3Qsmp5tFOzWt2NkG0I7ifDc/158IZE6fmI9lsxFAB5xBKYFjQt7dRY4RjiMkdmGdxrjUYG42JpRUHiGlqi1ijEIclQUl7UIn4ZFsWl12eomTOpCvJqoFhDOLZuQsprT3AcNmREosLAa5xugsTGDaDSQa3bEDkkPnnSYQ1OmRjTPCuw5SJcSqjWuiQGsWy/fHY7QASpsBE9A2MX5evTJZO5BQUYzW0Q2TzmZZQ0wifJoNRMIqb3nPr4X02zi9+Trb0VsZnJByFFtOl5/S8kVmgKVky0MsnZe7C/jk0e04uzNg4Y/A1oV5i5qv8bWMAum+xmgnmLngBcX3rRrV9hGafLYKswjK3v45vO9f/zg6uoAed4vm4VagWqu+zemZzRrhOpdfAZ56pCZFgxnMotk36yMwMQgJKQJMGTkfYJWewaOPPYTeA6vNqC0GxEdstYv1vDDLI7NU/HhSn03PDgiDm6GtUf3HpPFkkOTJSukZg7oas0ypRXqr1hOBkQR9Fzw8e+RkHEN65qzZUcpyIYJtaWtc2pYDtSVDC+yY1m5N1mreurJB9H0vKHyTalcQYv1sm0wyjiOYHDxX0MlGa/Z67zEOp8viacfpM3q4eQEKM8z+vu1jjfqXnyUpGi7gYncOnxvuwqV0FtlVc5TkjcVxb3dDagRyq43OKg4zp3wrAzZzXRwzs7Icv9HUwxjx6quvwvMZ0fsz/7AaqfX4ddQdl2Y/q+ErwIl3JZOmXVSTa9b5yTkKk5umoLFmvDAiuhAwjkMp0uUkIaq2prRohFm64jxtjNScroCNtq+ZpbK1fpM9M8tltvksqLrGJx0BniTV0NwJG5LeaNorbdVq7X20643Lsz3uR06e75af7fOWUWSxxzmJtb23DfPY+UwbX+98J43XF6ecHbvxx4+/1XZHQPwR1h0bGcwdXvY34UPr2/HOfsQdfBFHixGLgZFJQIoxifPMBE0bq1XocmDxP51zRSCrqZs1U0V9UW4mXv+X+JRDGpPSEwJk/iVEO0iVOeHDv/4xACR5rprF1LiejRDONKQCP3Y8838LHqQ+OqnGgXYOtmELGO3WQRnErpyLyDaBZgMcsxQGs/S9kL8LA5+b1U3OUcJWq5lw9Z1y5WTRGs53kJYwEltO+n7zz4AaO2w1j7kXwUlH5rg5guOElCM8cSkcyCkJ3KUhK/PZJOQhubMln9Y7DHFUTdiXtk1MQN/3kwyemnAuKYum7c1zYAKGcQA5OabX9zJJlhPPsIdpeZooHkHNBSizUNJ6czo6kNeFvp52TDWkhEUiQ+kXCCCPA7+Hp8ebcMf6Gdy5c4hFSiDS/oRZfJeS2KwQe3XHaj4poJsDm8ljBmoTk2LX/F4WtHMOi+USmdcYRhXgFpAhOd7emTP41z/9M+jdeSzcnciNQMzuWl4TH1u1oPON5rMcYQOJxPcgt914ERoQPRbJdWlUsAijgGRXAQDvftfXYRg3IOKmOoyb801N9G0Ah/1eNMGmJPpnlmC/Y/EZTZjre1PRSm2Avv2embWwOGHcrOGdCB/njKTlUJyT8OU0QIutq3EcJS5q5xtDEfwQ9L5mwnMsPMKqjZsCAjTWgcM0SQAAur6T5AaNXVp8swh6lkZUOUlMOZtlAiDGNzr39QRVWBDPsvWffIhIQHbiKySWCpKNOwv4u/C5eBUP8Abn8BTYAS6FEjtsTYZ5OKTd0QEIWFRM5qlQcmvmyJuFGMsJjSGjNri1IRQQGS+88gJWqw1u7r8exF4q10n8PfsfM/NLrq+xcmdgmAEpRQvOBGQyzxPQoTlUc6/OEQY8BwB42+96HDlFYcOrd1wWCCui7SyTanbeeb6smYzza7HvW96d6f1X4a5fpQpmGAZwyhiHAckJukxs9C8OhCwAEDDZaK1HqaChkr0zDMNE6EqIpLmO+YZjgjl3dVrS6bohTEM5zk1Z3u09OSUM41iAsvZY28Jh28YNa8ryVR+k6QpCjfHO8Ub7IENil6MwXyDDIbFHon08Ge/HW9YOb9u/go4uw+UMoFaNHPdN68OuE966cS2aQmXxVqFkgLMkAZFkrSwWCzBzcfrNh92gx9/53/8uzvXvwJ5/DGNUU1PuWsGesrLNlp1cqzU1td142x4332hav6jMfbupMM/m2lU6FGp8W8hmBZACRWKCErNSwk7ndr4o24p6ZmsSVN9vWpAZ2oNk6j/aPZipyQzkTBiz+LsxAZ4h1SDISHFE73owZySdO2a9LiVgbulZxJqqLeuYqbRKYMgz5JR06moesJSYVbNTKFOFnMySWawzGbPRoU43LZufsnmBkaKGnjYbMPMkm+k048bNVzaahqmWlD6FMkX8GhozEcBeuGUYGQfo8ALO4yNHG9yB+3HPckDUhd3u2JProeMs2tOrlewT8f3k+7rbApLhg7ogudYXAtXEOXPhNvzDH//HcHwOu+6rsRlykTkGwEbrD6A8vfnVkFVIVNChRW3lo9Od1H6e31u5fm6FQu+ZIw7Gz+LcuXO44/bz2KwO67FYQGsGwztCVLJlg6QnAMuWkIAtrLaGdarNSReuhFmEqqdqUUARzFGYDoQJIQuq64LkSkM2yIKyc0YmAHBFiJzzSgYuLoDUovqSpdRuxKXVn/PIPCJm7RqSpewuxoSYEwBXclTlWi3EkRtBZtWOsqa29UBp1yoRlYKH1rw9zXhdPqUDJjmWZYG9hjDa2rEFnVWIwYwRDk/hDJ44PIcL/Z3o8SJsgm0nssWyrbi5HRONyK22aBd9uxCraWPt2rz3WK/XeOWVq/jCF57C2fC1yNwj5TiRu+JV2i9JtZEZtMSwdDTh1FGtnaeaezJPph3bNQZsfW8xfUEgyki8wq233A9PQNcJLWa1Ihq/FLLzw7QZY4ImtxphnjdaAZN6/SKwdGwjIaLS4iDGCLBD8EF9Rgac12sEiDwI0k5AMn1c2UgnFpFqRz0DLA7YFmabcJiAlDAHpuBTTFGTAIZiHbSC1KK3barn/B7t69wXH8cRq9Xq1FoSeB1tCwqAPzmJLE3zkCYfOOEY9XfyuUgeLywu4OOHt+Hxiy/jwQsE0lQrp4vIGMgmZixwTDtNfMrrLPwqmNUId85pFlHGzs4+/v4/+pdw1GPHvRW2Y8tHcmOqoix0M58m1TOkaWEas2WC0OTzVNC2asbGF7z+YGzSU8g84vu+93vgHYG6vlxXSlnCIz4A5OCdgi+EpoZTwSa9cPObM3PRCm0ZFPO0q9fcpbC/mcZogaDQeYyDdkt2NWMKbCVgjNA55KjarsES5gLRoqDtZmyC2MYkCdOObnOfuN14Wkqabc/mxNFgIe08vOFVIjWDBgrAiE+VLOQASC40KdOYvp+33Eejn+SrkwydTBkvLO/C+4+W+GPxIm4Ol7HxvYQk1Dwy3zSXi+FJ8oKhilNToX2IFezI+l5CLkXQBEYgAjuPbucsPvWpz2Dh7oKjff2cbj12j7pwyYCbxp9kKAO3ETmrUKIsslzMB9Lzlzmaafvyu8lup0gsGI4yEl8CEeG+e+5E1/UYhxFCzw9QdvCLDgwxMZ0PGMeIMUawc9jEEZwYPmgcWcuOXCefkUaxkiSekxBCM0NDCAxwkvuEAEicADjJ5rHk8qzJBpmjLPagn2cHOI+MjM4vIN2+pZh82GzgSAL+mSV/l4jggzRs8kFydFuft9WsYkr7iRDGnOA5GHY9CQXZumk1ZOvXt5baZE23FgOJTzuO44TpYh63PGnccCs8QAkXdHEnsPiI5a8itZP1eYJg5gY9Em6njE3o8UJ3Hp/ZnMc7wgpEAr2TE5S03QSc056MDfM6Zrv1NoGUt9W/mQgxQ+OfWcEfq+EzHwaym+vnJHFa6xptJzefWq9BgsgdQKEINOtymOu+9jrQCuJMOBvAtvRABRIO4ucQvMctN+83FQtCJwISwi1iaMCeETkJBpAyAjmMHMEpl7IqEIFdLpuXLfYUE1wnISGJIdr11Ya1BIeopVOFgMoWLgubOTn5WyYA3ilfDwFkxFriW+YCJCnNpHZVBkESGmbWkMVV29hom2BgMUqb0zk2cUNaEZKIvtlstIhb/OI2ecCKrd9woKeqZCCiJoi/7kFTeU1W4+wIl/sOvzY+ils3r+B+96pQHToH1kRnAwVYhZWIYEkDQJ3U4yZfBmseq2I8xwarj7sNOzKfE6Wkyc41NzFFfVb/NCAreGAVBDwRSxPkxuadHG9mvm6ddqHUPHf+HHKMWCUJpHuWqg944yqVkMI4jkJbmYHMJIx6BaSo7OmcZQtp09Zas2/a/sDCBjI3m81GNI6ikvM4ppmY7YY2jiPA5sOSPF8ozyxIWR/CxFSNUXh7DIwCMDFRW7OxNSm3YRRzVoa5+9MCjPNzme9u5yvrBSfjH9vG6TXlbAXH5mc97cRnZNVcJX4JYMIfb8ed/CSabxMcXuR78Jlru7itO8S+06agQU3kLLto2dlA1axTH2ruewBTISQ1fY/dI5vZSSWtrNwVSXxqclMmkMfmieED42D8GPboQXh3QTQkYyaQ2yfkmHZsr6O81QqigSFfxJgP8M2/59uwOroG76TA1gqmgYSETTmGZDpB75cBzlKlA9FkgKCTxLJRxhgLS/p8Mdv3JmTOOS1gjnCZEJTloWS85KxUlhI+8N4V6yClCIJQ/qcE+KBtEgEY07tz9dEZ4mrCM441f7ZlIrDzt4DRttHeX+vHztfTJF2zfXzN85cEC2kzeFp/EnidaXYMTEzSPP2xAD4Myd6xP1rycznG5ICWJiexzAO3h98I78C5o0/ga3afl87LAOCFwyYn7WehAgRuBBPHd6Z2kRvIUye9PmTWzSWLXVw/nxMYkiY4EQw1d1kPlFNWrZBxOH4MV+ITuDb+Om7d+X44OociCacYx3zKY29AyQpK9AoA4PHHHgbnqDWsAHOozHp5gNp8ci9kMb8EFwK8gjoW/4sxIo0R3XI5Mf/alLy2RtIEoWpSs6gks2UYBvR9L2CLBeNzLuTbhRqFhX0uEdCVGKD44NYodj5SGuGc1JeKeRuKRmy5XI+3ZdgedjpJ2Ow4xhfLzJPkALOCFCWBkXfNz3u98Ybyvn6pQyAGyQ1dLxJe3TmPj8T78RxuU1sRoq0aLlHgxn2AY+ed+ZpSMZGBHHHfvfcg8VWktEZOWQGP5mVpWmbC2J5OL+BKfAIXLlxA5Cu4tPoZMMdGS74O0798pIJN9odVegoAcOftNxf2biGRFqrJGC25ehRBSDV/VILi4htKAri95H7aOCNQfaSWi8YQVubK+DdZpFu0jcz9vOsXw5rpihBKa3OANcTD5bpbs7FtRTAhVG6E0oCfVujm5mpZA21WV6M5Y4wYhgHDMGCz2ZTjt1q1/Yzt39vdqe3j9VWJqGZhtD9bEN52itMtvsarql8poyPC2J3HJfdWPHtlB4xankMAgvMITUOYAo0fv9RTub4TPwOCNl65chk333IzEg7AtClHbP+ZepdTWC4k45A/jP39Pfyh7/k+3Hb7nSLYeX2d89c5tbk8DvLUSRexJC38XWPMr+Dhhx7CsFlrzV9GirlWOcSEmBLGmJFgnZOjMppr81fLkDHf0qkVkrk0Y7JGN64JLQAowmCaw54JM2vfyGmSQhs+EaGsc0GwRIsav3TOI4QebRfqnCWTxxIJLMCfGoLnuWC21SXtNbajNU1bbTuOI9br9eRYrY9pn20zmWxsE/6Txg3kvk5mrRGmaq7azyd7QbND2ntJNkcuS5uROSBSwsEO8LGDR3HhlYS33nIFxIcoolcAAqgvSeATziYmpby27YzlATCDiRAzkKIrjVyWyx45eaRY0d92FjSyAecIiV7EmC/iD3z7fwJCwksvPo+OboWj5evRj5NB5bRW6MsY00UkXuGd7/xaXLl2FUQ7iEn6LuaoKWRgdAuheFyyETox4jAihF7NQmFft05UwXvEJPWVBNYW5yOiEm6lpvC9nUMj43IuaGs4oFRMaJsDI+1iYgElLFoUhZdo0e2B04jgHMZhRMqAQ0DXS/qcSySk00OE8x4pA5QJoIDMQ7mmOal2e73A1M2x6paahidCZ2mXRqo1B3DmG0zXGWGYk34ntVnmqZ7xDWT0tOGDOuaRM3nvjQ37vMXcGEBM0KqEhJd3LuATB2dxx2qDe/wGo09IgAADx05MW3eFAglt2RlZF3kRTDDWQ8Q4RnztO78Wv/HxTyDhZewtH8MwitZhTdmSzwGSA3uAAS/gWvogfv93fgeWOx7Sd3PbaGfpRkS1bgB28av8WYQQ8Oijj2K9fhWHR0Lf6UCAIb6O0GnCQ2Sg75NoWSLEaHwyDp4I3nnpm5KlYW0I4kMGT9hsNqAQMIwMeC8NeqgG4Ivpx5aWVhFd42MlDwm5ALDec/YZgOB9D9CIxAlghzFrRo5jRC0Y2FkGIBNYS6SsSNs26jYuaWZrm1y/zUQFqmBZNo5McX3/Nm03B4Xa4/ngsaAFnCPE+AYLJZ/w/RsyWoS2nEAeYGLGZb+Pzy/uw51XDnD72SOgdMRV7djEN+aHmp5G/LBtyGur61PKWK3W2GyAYUj4ju/8A/iZf/0zOLe8BI8zWPq3ICLDuyVyXiPxCofxo1jlJ8GI+I7v/A7s7PW4evUybjrbzc4jC68112QtzcIirzVfOnJeY5W+gNvvvBVx3CCOEWN04DgId6qT/ibZSfZOy71aCnIhbkDf94BzcL6bFFnbrj/1n0SjpWwsAq4AKVItIfdp8cUQurLYQ6jCWls0RHjyYk1kIBNjE6PgC5GwWUfwwaCgiUNGQPAOC99JiSgqyZedtwIsllg+TW80bQhgMh+t/2la0Tac+symgtiGiloftP39G2++2sWoIirW7Lb13Yzrac0iQFslnpCZMKptc4VuxReGC7j72iu47wIjQJBF4gTnzDBQT2uy4Ise1km0tCxUQW7iU9KLI2G9jlivEw4PV7jrrrvwlgfuxxe+8IQeSRbA0t+DdXoOjAjvHX7X2x7H448/js3mAEfXLkvcrjk/Nzv5ZB5mD+y4L3nC/BGQ8hEYCQ888KAijwQfOiGYZgDOC1qdE1K0NDNL7lYCK5bMk5gyusToe2niajw2AAp6aIvM/pY1NGULty34rVoqlYawMUobBtY2eQAhJ0JODHaM4Hpshg186HA0bBSkchg2Dk65aX12WA8Oy0WHjoNszLlD5iCYBhtgZcLjRdATkFEJknOyNgdQP9UeF02+ti9LMW1DQib8reC2Qmvzddpxwxk9JpDmC7I5lZPVsvXbrW85Hr0xM5mk8gQeTBmXwxk81T+EPm2wO34et3UJQIBzIxAcyEwRrtjVHNp2Dcoq8mu7J9UbzBJmiWPGsIngnPHCC0/jm77pG/H1734XNpsBTzzxBMZhxOXLz+OWC+dw+x2342u+9mtw6eJLuHTxOTjr6EyE9Vpig7vu7ail0zXrZzqun6h+7N3MGPgpEAHv/Lp3YRhXOLu3EDM09CCgJLb75LWbGKQwOaZStpaVlIs4IW8GBU9q7LENe1RCbJSsmFYA1+s1cmbEsYYBYkwIQYL+h0dH4rPHmpdqIQ7nGANJuMFHh6NVRs7S9oIBJB4AR8jkMKYAnwIoAh0IGT3A1p6dAY4ABkA7LZv2FA2akZyUfjkTLqUckKQhKi8i2TBks4Yeb0q72YJK7bprY6Kn1ZLA60yzM4H8sg8iZPjiu13yS/yGvwsPrC7hvL+CzkWArf2dols8BZSnQlnjkySgo0xmEsQvRdkOiQDOrjRryTHimWeewjBGxMR45LHH4XzAHbffildeeRHjuMEXv/hZBAI8tH8lCCCPzVoQV+G1nVxZc43ys4UPTjuYI47Sb2KxWGB3/wzGow0WCzlP6Bo+WqBk1ci01sXilJO3nafKEO5Ku4E2FilM5UlKqFwtzdpsNliv1yK4qS2D41KFEccRDGstEIuVYkkAGQlDjPAckLQxbRcccnbI6I1lF2MK4AEYOWGHAU8BDNtElqAcxZ/XvELSLm9zZNbu08Y8waClMqnjeFjH7qHNDjLLYO6/vta4AfS1PrStLlm10iYmm/yJ2x/nh6sHsLcxIGSRuhODgJzAaQ+HuA/PrZ7Co91lnF1qX0cyHlHzK6utX5Cxct0S1HZgbbyqvUvgIekHqS6QnMVHG0fhi2H53OroED4EfPGL1+BYcksDkQiltbUjB/Ye2bJeoJQehU+1nYPWz7Fr3e6DkH2QAMIAxoDb77gLMQ7oul4XhZif4DTxb9oczAlqCNUUOpfMEmo4OlphsegnFB62+IpQMpX44Gq10oY+HcB1QQKCYJZi38zyfLOsDe8so8eE1WpdSdBL9WEZCuwwRGA3ETGKFrP08uA8nJKaEXVgHss8z12C4ss2Bd0n+Y1tLHzugbRC2WrLNgY7D5Fcb7w+OpDGZD12Gp79MHHw5h9obGIAxpnKjNLh3mx5MOGoIxAHfHa4HbcfbfB13QF6t9b+hSREvs0FHKevqFFMAhC87ohe2pVnJzur94T9vV0cHh4CnEAsYQHZdTPIRfRee3mQCkHw6LwDQWr24DzYBayi5DtZ/iazPzaZrc8ymZ2ZYModlBWGEc8j8Qbv/oZvwOboGnb3l9K8PHh4kpCBWA8Sl5QsF1ng3nd6TCHqYnYglq+2OcTIcD6BScrZQEJBmaNwurITEGUzDGDOGOIoBFo5g0jihQTR0nFMEGI9jzRI2ECS9AHfLcUqYRG6mIEAB3YeCRlMrhBcW3u9zFp9QgLGZZeFrtIJwbMjggtONK33oFjLu6woxNbHPK3u2KbVrGHbZLYBcnN01oTdLIZt1SXbxutuW3Ba6/W1dwjRT5z5GMUI60olhfWtquTp7k58eriGR9Zr3LyonCyiMY9X0rdAziRnVideOYTL3YXgcPOFcxACYODo6Eh8JV/7Y/SLXgnA5FPCwJbVF8nIIFy49Q78k596Hzq6CR3dJZtNlpbpkxkgQ2C3C2aZlBLHBZhHHPJvYGdnBw8++ADGzRH6Pui1eAWZcjGlBYwJsGRzm3vM0gYtPzUleW7rzQYh1ea1BialJIyD5D3G2PRepNoxzapLPMvzG3OWTYCFDoQo6G4k5i5z1jzbjBTqZlXCHXq8nEVQU0q1h0pH8Mzo5E3ybJ2TXiuEibZqtWL78/w97fy32lUE3xgG63tM67ZjLuynGV9aK7w3aJRYVsMunhto1rJaraL/yuIMPofb8bHDi/jaQLig6KJkt9AkVgVg6w44MUcmu4z4TF3f4dZbb8XOzg6uXLmC1WoFgKUnpH6WMjd5pRk5RwEYmJHhEJlw5coV3OR/N0B9uR9mq0Kp2rvm41Yz/jozhsivYpNfxDe84xtxcHCAM3sL3ZjEJMxZ+G8qqrwty4RUGKYJ5UbJQUQYh6HxlwipMLk5YSYMlTSqdHoGTRYxSLSlxD3FtLSN1HzLGKOQOxMQx4jBDeWhzGN/khdrXLDyuF1yiCkjKXgDAhw5JQE/PoPtPLQabh7eaM9v3x93P6Z/a9fXXDmcZvz2C6UBk1AjslqUMkzz2I/cJIET4DjBc8ahO4OPHdyMu/aBW+gVIG9A2SNr+hUgzWUsDxOok9KaEWaqmVliPltwDn7Row83YXe5UKGcCrg6ipJ3OQyIcRAoHox+sYdf+vcfA8Fh4R4UMAVZeW/n1oP4uSaY9bqmD7RaEhnsDoDMePChB9D1QNdrj0WtLyRQKWsjIqWu3M6Sxwp+1aRtubZxHJG4kkmFIKY3UW1j0ApXBTdSceJtfu2epBTLK3HDFLkcx1Gn1HpKdhOQhK2yBdDUPYZTvzbFjOQI0UcEkjI/73wjOFXA2rnfpgnnc9T60lXYJm+pVtcMKLKEhWl+7/XHb4tQlpuc3IgF/eXlQBMyLoIs+skEEcDkMFLAJu/j2f5hfOJqxAN7V7DfOcRhhLhIclsWQLYOwi0rm/29NeUIrnRHtg3Du4Au7GFnuZjGVHU/QWYM44hx2GCMgyZ7J+yeuQVf+MIX0dEtCP4mpKwZLZzhWBbL1MWYPrC5GVXewlI3ueJPI4SARx59CEerKwjBofKyis+WU0VRucmumVgKqgHn2kA4hSScIMkDkqFjWr1lSbB5Nf8p5VHzZsvWWrSvs45fejpLTBjHUbJ1tDWC9CFB0d52HKkWEYAvhA7eeQg3kPaGIQ+rfhG3SKfuNeSh3Rxa4StTT9UnNXTZPrdNsNtjtubxacaXVSivH5thKY8C1J/kAvK0WkHeWV0qhkOkJQ5Dh2GP8fHVBdx5sMK7zx/C01XklBD0wyaAlq8IYBIQb3c9AqRBqfwFcyEJfsr/0j60ftEh5yWkq5VUTAzscO3gGvb9vei6HXAUBnbzHevzocaXrCDCiRkgBGRcwzo+g3e9++sw5gFd5+H9lFWdwZOAP5zDoKEOC/brDyD1z0QboMxdR5027PFq1uqRi//YXBZVjlPZGJprYWjNpPj0YGGPM01pLQFSzq1z33ze8nzdBDTpFBUOwcM7oTLp+yUoJ3BK2MRBmhwpENV2sJ4LSCs8bTjEEGsrrC6cPfl4QfT0eqcJ+5YTe5pxA0I5RQExERqar+Hy9/kOPH1Lw3PDzZLkGq0zZ9/OTOwQsoMHMPoeLy3vxIevHuLBRcQt/Q44SYFvZkkwnleVlyM1mkLRENWSdr6TdjXbIlpE13wn8S37xRK/8KsfBQCc7d4K7xyCN1+v7YUiPqTdX2WH4+NWQjP3K3wOjIxv/n3fDOKE5bIXoizIOUilXNBI9dm5mlG2OGXhkYYgZBOQFDi9ruY+LUzUFg2DIaRXzSJkFr9biClEQ7rmPTElcMraCUxN/zEiKGk0OYlNbjOznaubSfAenQ+aLdOhCwTvxWUZ15LmZ12ykARc886euYJQhImJb+dpe1ZanNZ7L5Q0KpTe+ZI80YZUbB7sfW0mzxuuKRtQWBeM7ThOHkyDElqfD4Z01yo1FZOJFuSvAT0nI0+2YetcDIAYTBkJGSCHwZ3Bs/5u/PKlq/jP7o5AYORxAziHrg/ShhwkTG7aBwKKQGYNuWSw/l4EwsIIstdQ0ZvVN+MyJ9zmGxIjJcLC9Xj6mWf113uaKC3a1riNrPaSG5XCqKDENoBA6DgHHKXP4tZbb8X5s0swRvSO4V2Gh69CDWhdpZljuuizdUjWLB2qZrSYfwKgxFg3RHIOBPm9CwGlRCozgvOIYyw/b9Yjlju7GDcRQorswexKmts6DiDfIaaEDCoJCOQDOEuIqY35tTm4LgThTbL3eE2IUCDJ6i/N+mEFBin0iDnCw6nQR3kOELCLHCv1UkboHKTfrCaQk2gM0rUhvEIRMQ7Y2dlR2kwGcpZqGuWQmrOir9cnl+3Nxw20V7fFYo+vLqXpaBZZ1qrDrdrSFhqVn7bvIxoyMY0GiEZSvgOGx8rt4vOrM/jc0SEe3d+ANdE5QmzFDADe6PkVmVXBSOZXkgiVD7rJMCq1P8yX8KAJVEuoGUR2TUDo9vD88y8g4Cxy6jEgqgazhVIkb7LDbtWM5t9ANsAxPYvIB/ju7/pebFbXcObMDoL6kgSgul/WmSo3n1eNhfacwqhnJiJDFl0FKwjJNFlxC6pWqcnttWuxWRtOM2mGYQRnaDIBwWudZC4WEU1s+laTt6+yZ5GuCVTcAF39zHStVUum1PWIPgCcAwWnz7cB8OoRiskOEtS3WAQ51826sCNMGfDaOOjxY588bjh5wA47kS0VVAaAhqB3sgAx15TX8zdnpz4msbo7MoHhsHJ7eHbxEH7ucsZ9O69gvwuyiyYRTLvEnKdQ9STzv/HznCGVjuHZS+bkxPHn+oXkw4p3wnuPo6MNXnrpJezQY8jJIfOoWqg+mMliOzY3ekkN4CB+9ogVfw7eO7zjHW/D6vAS9vb3BNBhSxaQbJha0VEfkplVY0zwYQ5OVFKXdoMQf3KA9z2IpxUPOVdz1kIpdn9dFxBjKowA3olPNsYkIYvm3CVs07gY87Iqe08BhmLUTUgyrcbkgRSxRiUKZ7SuT6V/tGEmZt10pz5i+6xan7mdozac1KYLlpXKlbfoDed9rcCL6H2bWLAmJqsfw1MnEOVNMHOvHEXNw6nmnH+mfG4ixLbViVRkv8Aa5/BMugOfv/oZvO12guM1KCzgxkoQlbSy3hbSMXN65ifWOKbqcyJonZB+hMqGZC8iwr/7lV8DACzpIa3WSI0ymPWbnN1rOxe2SEk1Q84bbPKLuO8t92G58AAvsbOzg3FDSCljaIiiTLNklhCHda5OOUkOcErSiTjVcAeztGEPwWMYRvWdCMF7eOfgAGk3Z3M4DoCCLSklOF/vK8VpeVjJM6VpOGoe15tXVMw3ruKbRskxTimBKQuhdBwRY5KSNU3kSBo6ERZB6PP3wpAYFPWnKqAtm8CJYBvqhtlem3MOoeuwGWMRRnvPabN5gBvyKc3xYGX21n71SWzuqhMbvwit0Nlx2u+Px+vqJ+uPXBb97H1KlkUsN3KZLuDfXbsHi8UzeOjMBl3fAVGMFlaonVwofDL1cKLl2p1+OlzxwyRPtCHUajYiLg++mYAGzJKRGz8Uk4daTZ8qkEUoc8aAV5H4CO94x9swxiN0XdAwCGEYpEzMQg8xjvAkCdjeexgTnFjqWvHA0kgWOSHHChB5CkqAzQBnBE/Su5McHIQTtutCMZFFKDMsbzgq+TLP/m7aon2S3vuSAN8Kb300jdBypffImZFJgJzsHNIwIo4Dcg7glNA5wqJnjCkDQwZzgg89Ajk41tCXoA0gqmGdefJ5q83rxrLd2bLnRKi4gW0wXxY6kJm4FANBFlyLlk5P3Gq409rUp78a+Z5I4XXX4TP9w7jlKOOuPqNLI7rQK6jA6EKP3GjKYp7Mrn3bdba+ncTr6mdqHE39CJ5+ptmnjvnkcx/Izt0Gq1mBIudl8d52263o+oBetdQ4RozDAMD8OimL8sEfO4/5joWsuTEX2/pAuw77fVKWPmtDN44DCNVvsnUQQkCKEUyhnG+K+rL619O6zMl8obZCl/sbi99vceAsNWgwZDlHxhiTglkMCgSfGDGlsrFAfelsQAwgFoPz5frMPC49KlugybS+ugj27C1hHxC/GTNNyzovpx03wDwwXTxG+V4edvv3E8Afw1Mmf2mFeKYMafL32THV/jUzmOHAFHDobsZnDs7joc1FvP32gL1OSZ6U7j74mlhwUpbFMTi+Oo8qmMUmgMX8pGCXsVjs4tee+BAC7aEPtyFnB+sa1wrdtvPYaAGD2lMz41r8GMgR3vXOtyOEhE5pFIdhQNLAvAE73gmBdee6Y+dsQZS58IlpWBnfZO0bMAOQq13JiFzJSaXm+A2+osDScTOwrdFsr882hjbGut0Pb8x/Bsib7+3AnCQ317MCTk7YCkpfS+XtidI5uhR7H8vamW6Sdj3WvBZAOdYwDFgul+quVF+zfe6n1ZSnNnSVJ1sqt5GQyysjUSp/F9acXF+WpkOAhRwUdkGhMbRXQTDzbNK5ddsUVrGcWElUT84hUYDPPQ7dnfiVa+fw9NEOUmQEMECdhEeoZmbYuK7+Fuu8JJ/XTpGzrBaSsENGh5deehlAANEC1iqd9OJZG3+fBOy0i9DOj5xBuIJNegHf+O53o/OQPg8R2BxtwCMQEGTakhShhSbIbueyjSiOlUhKTLKMzEmflTzDmAap+s9J5heiYZz3AqIRKYNA1XLtedoGve3fzQxFTqCcEIeNpvVlUEMtWdeIXl+uwI6NVrvDObAjKYKGsNEnJpDvQD4ATvreGNt7jBFDjHomJyE4mgJOtnHkRjtbuCUzsB5GbIYRQ4xIDIwxIbOgynMf8kbM11MLZYa1R8/SP0RfGbnsXMcBC/MbG8R7Yo5PhVRomBOmLXvsOPZqd2aW5kDEkveoQrHpLuDl7g48+SphnXvRICeI3msWn27Bn07wKMCZcfHVK8g5Y+nuB8HDKjQsaK3O1omnK0LZnIDAOMwfR+YRf+T7/1NQysij9K/YrDd6D6RF3HxMCCfaIWfEJGReLfJsz6H9LMBTuN+RAlak37cXOdUEufm+jVObOQ/9PrMgwXUzNy1smrFpDdBo+cn1N8+prA7yIApwThLg4RzGVO/fkuCZWbRbu8HOBKqAVw1/LENdgIIjoPxuboW0xznNuCHztTV76u//w49sJqUjjOhw2e3iYO9h/OblV/HQ+ip2zzr0KSIhbDXdAAOlZMwnk/j45J7kd/76R34DYKCn+6UGkESntokB20arJefmZhc8nO7SXdeVFvAt16oc3JqWKllxSgVUqvFEt/U62ria/eydLzmzmPiGAciWa2ro4jR8YF/bGJ35syb80haimUvdtKag17Tjld2HGE/VdSrRAX2QgqZKSh8zAOcEFOq7kukzDiN40Vfh0g+bWZ5T1qT4On8t0XN7nbamWrKt+bM87Ti9+apB4ZI0rg+q2WS3v5r3Tl62SLe+mtAKb3kfmmPoSTIIiQijI2wc4dCfwTPuZnzmkkMcAhzUsedKNzgBP8qlVoGtGk7MzsxTRrO5xgxdj5/92Z8HENDRbaKdnWQBkTEkFJOhDjtPy/pu1wIkwF3BteFJvOc934q93QqgCB9OCyiIdqs7OsoCnCwiOk57MYf3TRjafFGgqTds3jcHq8THr/E7cNU+OQsPKkOYz1OSjBgHLUx20+uYH7v1KesfgDYJwmsig9Pi6JQdmD1S9sgcwNyDuUfKHjF7DJExpogxJSSWTK+Y5OuYspimKWvrwIRhjGVZGpF1SrloTelmbcRdMm9GdH2acWqhJPOn1KAmE1D9/bYXAdU9OEFg6aRXI4ykxmd5zY8JlD6JTAmgFRJFXFzcjk9fPosXXhzAWbhG1+s1NptNRQ3VFMnNA293QpQdVBa9dHJuL36aN2nz7r1XP1O6TjkLVJtfq+afLXxLeC4gAxicM7xzWOenEPMhur6Dc7VHxnJnt1Tbxxix3N3H7t4eljs7yjIA5MSFY7Vcpxn/zT1vMwmnGxNNOh0TpoJt72fmEoss2pJblNfmXUxU7wicojYGJtQ26ZheY3Nttnm1QBADhQWiFBYQkJmU68cD6JBzB+aFvLBAzB6JPWJijDEjZi6+odVnpsyIKWOISb6O4kNmlpWZGIhZCiyEJcGV33FDyLWlBcrWcQNpdqdHj46N633sxrX79Q9BTf5jt8Qr3e34yCsXsXN+xCKkYu4VcwrmuFczy8wu50SzzZHFShxgTqKZ91wWvAidwUKNhnEi3HYsARRoElTXA4II6BaMV4++CCLCz/z0+/HJj38S3/s93w0i4Dc/9Rns7e7i7rvvwnq9xk+998eRsoRkvvZrvgpf98534NxepxvQ1ExsQaqanF7Lr4qg2u9zBjWrhWgar7X3tddf56yat4AWV2dz9Vz5XUpZABuuNZRFw+uFtwUG7TWTphnCnltBdsWKyhqjZhWcDIIPC+TUgbXcLEnuOqTdKYGcx3ozlASE9nrajczM2rl8xBhBISBq89jWPbjeeN2t8Jo/nPyh2cM//efboEN5YzkmgOpD0FzmCaKnM3JY4nJ/K566eg73X34O953XMAhPy5zkEyS4aFlEDcAxu8zJ76ELLzPGNODBBx/Ahz70UWRew9NOAZjMarW+F6aByVBcrlatLELJwz0aP47D+Ft4+Ae/BTc/dic+8/d/Ef/bj/1tEWhtRZZjAjnC2cfvwNEXX0HOGT//y7+Cn/uFX8Kf/6EfxM1n+7pRqQUyr+7YFrOU1gJ+9h5fJ232dCY+pGNYJywi1qRvmcQWYW6FLHMCLAap89C2Rydf+1Ja3Wh5TkSAJsU7cshIoqHYIWehQsmZRZOp7eX8AoCHowBwr6ZtVA3oxG9W+tGUAFAnHENZ6j1TikoPI0Irexih9jbJSFmKMiIDQ3yDhdJW5RYw8sRBzULbNvJ1eyucYFnL07/eWcsre49Lu3v4GD2O3YOIW/g5LM9mOCxR0V77lNY1aq8LyrK7U643UXZGzpLxQipc2qVq2GzwTb/76/HEhz6M1fg09vqb0M4Yz+dQ2zATm3kM8dOdVCVkfgUvHf0ibv7dD+Gr/vg3Y2c/4MHfdw8+/s8+hrQBzj9yJ8ajDa4+8wp853Hv730rhvWAmCIuf/5F/Ob/8j78xD/9Kfw3f+EHcXD1lXJeSbKvNB5z07VWZwDIUTYsbdRLhNKrElmC9Z0XAfadVW0kBCebnPnkjhLYJaUNSsVPNwOBkZFThHT/AtI4wgXRYN73gLIAFyEnJ+mPTrqwOWN0kDuAeq1I2cF5Ebjlzo5sLpGQ0IPgJL2QCL7bAROBKSFmAlNA6Dx8JxxN5DskTnDssN40dZIswhkjMIzm4lTNOYwbbDZSGbNaDddZt3XcUJHztpjUacZJAfqTRKtqyRPeMRFMrm/j+jsiQnILJNrBZfT47NWLePDoZbztHLBHHdbjoZqN5rBXlPS1LOopACFCKZUV7SajmT5tXVRz3+Yni+msZq9qUwIDtMLFzc9i5+EL+Kq/8AcRegemjAv3ncFX/fFvxOYVu14gfz0XjckEeA647e3345U/+HY8+08+hIuXrmKnqz7e9YL5bZs774NcpxPLIucMFzqMY7SbEV+u8MKaOamVKUWAgJxHeO8QOZffyfts821NQs2lDVqOBaFYYc5aooXiR+qElXuTI2lsE05riRwyvHAIk0NGRIIv/Tij+ocxO2kslaTcLGuGlAumYUfE7BHZgaIAVomluxk5J1oxyaZkFSUAgcljGDNiOp3MfEX1p3yjBhEpJaGDd8AY9vD84l48wRfw0riE9wnsR9lNT7G5bNuAjiW0KwI3f09OSenxp3C6BNiTFBnqvg7OcCRyfGX8AEb/Kh74L78FN912QU/BQMiAB7LzYKW+8E5eloJm+5QF98cYJxvppFBZZqyYnra4rezLKmtKaqJdSQOKkc25+cglCI+JKRqCL7HUtjKk9SFtStvPFU1u23UrgBXirJs/l/8mw9L1CnrLjJgzYhKByYmQc4cUA3LuAF4ipx7gJTgvwHmhv+sQIyFGAmcHcj2ADqAOMRHGkTGOwDgAKZFkdWWHrt+9ziqr4yuCze6NHmoVyo6MBDjCerGPp/hefPKFK7j33g69D1gN0lvDe3fcLG8Ww0mWgT1cZhHucUx49JEH4b3HKn8Ki/AQcvaq86mxus0/phnIk5DwMl5ZfxAr9wze8kPvwR1f9aAuNg+mNVLWjBV2UrRLgDnWMWaly9zuyZfypKwhhHIfGZY3a+VJRp5sWVki9KKt5PsoPUp0AwjqJ3rnkTiJb9doNftKjjDGEX2/IyVdGnLJyYqxUT/DwgZBID1XrUkV3IgLiivtJiACSih+IyB8QCmL5bL0wnObmTCOA7rgRaOmLHFNMKBmatSNdjOI7xhZNvrQL8F5I6Ci8xU19x3CQoC7qC3VUxK3Bi6gX85Z8reP31FCOSEB0J8zAkCMte/xkn8cT66u4vOXn8NbzkvukPlyQRkK5uli87S8bVkahqQuFjv4N+//BdGIeBGX4/uwQ29FwJ2A6yAcfcZcwAAyHHlkHGCdnsW1+HHEfAXoCG/54W/HA+95J3xouA8oa+5pVhPXACLx+WJMMH+63UKMSMoEwMCbFoGeJ2RborggpQl9v0DajACkFCylBEfC7pCZEXwQ8IQEdWbv4ZrjmWbsQodh3Bybx6ymqQF43nvpkelCMe05J3EwNB5LzIXlApzh4JTrSQrbM0Org2pYI2UR2MzA0XrEcsEILPeAlECI6H2H9TCgZ8nSigbk5YzgHFzotFIqlXBXCAHOe+z0IqSH+VBK4zgiBEF6id5ojh6efqXmV5O/23gDQh2vZ5TLmMCrAsp4t4+LOw/jVw5XWJwdcMEfTsykdqGW4zUaszW5tp6blvjpf/Nv0d+yj3BmB0dPPY9Nfg6EDpQcFu5+dHSTXueAw/Rp9YdGMBLIE8584wO45w+/G3c8/iC6oCVUGqDu+x5g1u5ZHsRKPs3WSdnSxeTpTLDrGZjTVso4P00Ot0SGWtnRZuWYH1hLk0g1WhYHWTSnl0LzNo8056zMgii/b8METpsNtRk8LdpqFHLbEh3aa7fc4m0x2EmqnJqvnCS1k8YE8AgQYxgiOBOcC0g5I/OIMUZ02q4hUFBt7JDZIbMXpJYIvuvBWCOzQ0xAv9gRn5ZP5y3eUOlW5Qm23Ullr/l9qaHQHaupRX4dY3u45EZGSXJwDq47xKs7t+Gzq8dw78VLeNct2ixVs5VKuIXmRcjVx5kksgv4CuGiWeD/+efvxxhHvO2/+8PYv+c2XH3+El7+xU/iygeeRLqywnrzOazM73QEvys7596jd+P8u96CW979CPZuPod+sVA2cyk4dl4gftc5gFlCIE19K6vZ2Qbzx80Gl371SSyXC9xx2zlcu3yx9plMGUSu2YhqG7e+X2AYNlLxoOVLBv44p8CJARjN/JBOhglq1FisMbh1XZDCaXKlCa2jpvSLWUmsBHl2TrKRnBOzfFJxAQWJlFcHGk4h16EtjMiZFM2dMhHO46BiPQCRDQFWAC7LZ1sADBCT1hnXrXeaoCA20MgM5yWRIPge5BihWwovEJ9u7Z5aKN10263CyVPRKRFGhsDeTDjltUzHiZ95LQnXxZrrhiFVHgSmHaz6iFV3AR+49hbcd/BR3HuWwDAWu+1JxHMwogqmRDgzE+B38Mu/8ms4+1X34Pxb7gCcx/n778BN992O8fu+EXGMOPitl7B+8QocEbozO7jtHQ8gBI9uuUBYdNodWpU8mWnkpJjXjeh3MhADeLMDyk7T1VQbZDVpdd6RE4ZLB+idtIQHi4kr9+PgqaFLJDHTiJwGueOkzrHve+SUJQBPpMIiBMjVD1TO16QTr/Qii0WHYRiLf8rI8MTgNMJ7qZWUBT6Cpe5YNKOGWYQ0LQIk5F2kvnDcjHpdEaHrsEZCpoQxD/DUorbqc2oFTAtSkZPydc5G8kxg7ZOZEkshThQy77azm/ceiVlMYZLFlpiU9Y4QMwMUhAyMIpiE+Y63NH7cNm6wyLmaRdRQndPkfRJsrclpr28Un2k+XuOA1PwvWx6mzqaTGNSrdB8+ffAibjn/AnYpIScPIEyEsJxypjGPaVIGPvmpJzEMA+79fY+JIOlxPBFod4kuZyx/11tAbwP6vsNi0aPrgixWgjALjIOw7mnIwL5mTuh2HHyfsbmWkTYZHWpmEMASeNfJIUhHKmTG+fPnAIKk3cE6bglC2vKQhrArrOQ+YLlcwnuPvu+LdiVyYIX+YxwVaZ0mIJSi6uYZSUrciJq9YzWJYkmN44gAoQMFJG9U4qih0XIRzK6EnMRETRKSiCM68uVn0Zz2khhpe1FTk1Zcg4ikYSJhp5BzpslG3GraOTIsc9Ai0hZGasrwLHvkFON18L7y7Hu15VE36SIT5qDP1emXe3CNBdoQNBbFpD7cvYCPHj6MO9OAd+Aa2nKxk2Kw9QE0DYMA9Msd/NIv/yr8bo9zb71bNioNEdST2zUYe0GtZIcii8b+V+BjiGnMnLC3wyCXcHi1pgWSCmPOCdFih2pSP/vzn0Q+GvFHf/D7sVmvhLSpgFZewkUNCVTrQ4bOT1rEWZhjjJuGeIoLuhhCJ41hu77MlZi6TW5qY4WIKTjOFrUASlKMbM9CNJt0ZTZQLutil+dpoRuAMY5D8/npOrUNzICrbB3JtspJE26ZDYvhTt2Y45U9bd6wCfJrlgnqeF1CqSHrssilzE6kUZpOVTo/05onjhLw/dKHAuCqrTVpXh1fIkZQXC4xIXYJL3Rn8O+f3sOddwLn/TWEPGKgAMe89ZqPZb6w+BTke3z0ox/D3mN3YP+O8wUFm7rTddfOjOYhUVlcVjNIxAriiF8F5bwZosf6kIGsnK7qA6U8Ki8OYzzc4Llf+CSe/Ykn8IM/8Cdw87k95BwRCLAMuS70MOLnvhdBsm5iXdchdAHr9Vq0q5q1TkMTOSnDgc6z+J2dms4M7yTEtFwusdqsS7K9HRsAfPBw4wjRmgCQEYLTSiR5cY76VRHXnDSGK0kJcYwgZDiSYnlCVla/BKfxaWjmFUjjqzyCOQCqgR2R9pSd2FeT570t26kV1hasmofRWmG1kq7TjBvmfQUsDuZkkojKwtfngmSgIItDfhq1rSb99JynvbhyEIa1aK0CqhgZA51z8oCy7OKr5RK/tbobH7n6Er7lplexEw+wDmelfpJO1phyKjXjifChX/8EmIHb/8Db1fFv9ukJYCR3lGLEZmPoYs3tVGUgoRxmUMpIaYM8bLC6HLA+DNgcJlAeinbIKWKMEZujFfJ6xKd+9N/i2keexX/1p/4EHrj3DgCM0PdKeyHX23V9YZsrccJcOXRyYngXAKbSx5IVYV2vJZwhC1mE0EEaIhFYO59xqX4BROBjjFgsFmqmEpzXWJ4j8Qu9x5glE4cgwugcwJwU9InwLiCnKBQnYBVKCAFyltQ9UqH2qqESp7JJcx5B6GGEYV4CnCWhYdsztrkxjp05ANh2uZ4wIczGaQUSuBGgx9XdJBAhcG37wJQa/allW54EIi7I5m9PjMQCAiagTk+tPOnyMJVseaQFjvbvxSc3CY+vfgvnQkLgAQxrW4f6tZik050wM+NIO3K5zqu5jmK6msalWQwppYTNJhdNUhnn1XRlRspCv88p4erzRrXCgH7NKeLg4hWsXrqCz/yN9yMdrHHL2Qv4U3/+h3DHrecAzuj7Xky6NMA5lBikoyo4bdKAVeSbP2n3HGNlK7BNZFJy5qppHDXFrDWJLVHAzHoJsWZ0vWhl5wMoyYxJhY0IuGimXNoarNcrhOARgi9mqm1QJjApRQWsMqYPsrH2dI7tfsZx3JLpNC1utjFHnU8CB+dF46clzzq1UHprYU5AB2nOaZeSQEhUQQYGEFNCUgTONMZknGAytGO7ptryuRMVmpMaS1hAWXZShoQBmHoc9Ht4nhI+dPAU7r6ZQbyRmkw4DQGZdOl5Zw8hpVRaDwgSqtempr1k4ojqnDw7mppFE5+k1HNmcNTQQOb6GSQMBys89/99HE//gw+AU8b+/h5uvv0u/KW/8MNYrw7AOcni7WQBpyFLIkLj15ngbJvndnESkQpVN/EPSzOfnNH3S4wpoev6slvPW+TVBIVcPt827DkpVmrmb/Dh2LW2VSL2t5SSILN6vpRSs15sHrM8F0g2kwiqsdDp+5pzHAv/oGrNVju2PnJLDWIYwmnGqYWyY2HAFqJbDw+5NyYgExe0lFn8ncSExFrOskVqZOG+Hu3ZIEnHjkn1b6ax9P9sf6UAy4DhFJEd40p3Hh/1D+POw0/g6/YYoA0cd82naXZWS8fKEzBJvs06Tw4gFezGR20VJjffld8wmia0yowGBsOBY8LmaIUXf+nTeP69H0F+dY0H7r8fjz36CL7jPb8PDhnD+kCS7AkgJBB7IGEikJIWmCd1k1Yobe+xNLthGEorQaLKMmd9NOz9EiZQnwval9FXGslWmC3kYsc27W0a2nJU7TNd12Gz2QAhY7nTQ/swSRGAUxTVC/0JaYob5xHgCEfSt4S8JKAjRwQnVStgjVEGQ1ulqMAIvCRmmhVlThq3nHYCt2tsBbedF5vfNs75WuOG4pREgDeYv0CtECgZko4Uc8bIltdvqWxf3kGzr8fBo/ozqSFrTWKAhMwBh/l+PLV6AQ8uVji3k4GYUTcAmuy0zBJYll4ZKFaAmE4Zzou9YGh8Qae5FUzbpQltaAMMDWCLg766doTh2gqXPvgkjp66iCsfeRrxYI277rgT/8WP/ABuu+WsAkXrJh7MqBUrScqqmswcR1N01b5vuzGbf5RzLq0ETcCMPNlGbWYjWsp38p79nTPFJ6taSIqZF4vFxDowIMi+bjabYwgm0GZVYaoJ9ViiMVumPpRnI1+zhi+spUOevKzBkfzdl2ek2wCETb47dtx2mGlvfxvHEYvF4o1HX0s5LhnRh6jJDEYEY+QsAplzoSPkiV54gwZP9SQd++a4zX/SMB8ITFi5C3ia34LffPkyvubOiH3avp0wC6FSecjO4evf9Q78g3/4k3jlV57Ebd/wCMwvKgXMdn2sN1AEkgUJzFI/eO25V5DHiOff/3GkdQSnjMtPPIW0GiQPNATcesst+GM/8Efw4AN34+jwAI6shweqr6agjCyiacJD1pL/OfGT9Yhs817b8I8IKJe/tcIQQlCCYoeUIjxkYRoTvTXuHccRfb+YmKzt8zFhrARdfuL3mkC2rQXsvWbitsCV1X2aALeF63ZN5ivb9cj1xibTx6G1Jqq70Qr69G/HQz351FoSuBGhJC/kVEwS74KYgIlFKIecEHPW8lKt3P4yCCQAWP7/5E+q1OYCeT0EteyunpDcgMvxAj579TGcv/okvvrMC0jESBb4Q/UboQ95HCPgPLou4s/90J/Bj/3dv4fP/M3345ZvewwXHr0bXb+Acx6+C8gxas6qXOfBy5exevkKVs++iku/+iTyasDB51+eTJlzDrfffhvuevxO/P73fCvuuvMO7O12GIcVwAl7Oz1iioI8QjaYrLmnlj5HWtIVY0K/WCCloeSXtg1rSnpcSRaYpsDJzi+C3Pd90ar2ucPDIywWS7ATTZVzxuHhYXmvgT07OzsTv9aObVq0fS62oG0uWt/UvpYyuFmYYhrgr+DL3KxsAZgWZZ2DevZ9u0FYkXx7rDaxxITVNojrrcV2nFooszppOWckIg15qHZUTSm9Fxu/7sugKeXoc5FXfTQ71XwS2gdSH7wI2ugTruzs4PP0MPaHNR4ZLyL0GZm038bEhLXjA5QZ4zDg0YfuxA/94A/gb/7o38alX/oc+gt7IE9Y3HETbv2mR3Dtsy/gym88W845XtsgHW3Ksfb39/Hur38X9nZ38d3f9R2SjO4dzuxK3mRMIxwRgsvodxaCOHJGjB7jsEFMWarw1bzMzCDvZYPUPNeYMthIrVQLmKaIMZYFaT6daU5j/7ZhWnKxWKgpKxtBTgmd9xhVYA9XR4WbpiU3JhLB6fse6/UaIQRsNptJuKE1V4EqwNuEasIphGmyvWwsVO6v3Uwqw0JNnDdE2YSo1dhybGGLF1qU8dg1VYGtGnQcx0na4muNUwtlMntYtmEFdARhjSjFRLA3fTk9yTda5AmEwAQODkdL4Fk+j48f3YyHFgfYpSsAwskosXbkynHEY4/ei7/+1/9n/NzP/SJ+4Rd+GddevYrDS0e49hvPwDmPSh5FeOc7vhpveeB+PP7Yw3j44fulKn9ca0zVfFmJrYEEjCACAkleKGnAJwRCH4Bx1KSIqGhgA5TYQjHtEXzAZlyXEEjbos12+1YLmrloJtvcJaimYBP31HOagK/X60Zwpr02WnPWFq6Zlq1mbDWQAUUhBKxWq63hhiIEzeW2vjRQQx7z+5rTfdrciL9+vE50/tXmu9Wgb3jyQLSiWIa0HVNMMBZztQ4z9k5zCZOJOyZhtPXbLQd5TeE8eUIkEL4/CCyeKONauBmfPzyHm46u4YFd4Q6tm5yGPdoQhvrXcdgA3uPbvu0b8N3f9e1wLDmen/zNz+ChB+7H/s5SKSEJOQ8Y0yioaF4jZ8ARw5eyGpsXhvPUXK3cL2nM0TGDqYN3jMQe67J71+mcp4ClnCYCC0x7ZdiiN4GyTJy+77HZDGXBtgCRdwFmzuWcAa+sdEp0PEcqc0rwKkimiVr/rjVdWwFqj9Fqpfk9tD6jd93kGK3GMm0438DmAFP7fkvVk81k+8qbI7Stef5a49RCObrpAVmFU9DD+bsbn++0YY/ZMeg68jgPJNzI2LZzERw2XZAzccYhzuLpnftx7/oq3naWMSJjVALn6cgV0SW1D8wsXB3AqbH91ofvAjBiGEYAFbGd0FA6lF6JBgjZvLrJHFZiZLl+IX6Ck0qYnWWvmTDAqOl5bZlSSgmsfiZQY4nL5RJHR0fY2dnBMAxFW5pQWnC9FCt3neS2dgFHmzV2lh3YUSnZSpsNvCOkKKZbjiOWyx2sj46w3NnFZhyEvKsRFhEGQUa9F9Co70UjinZLajYKGGMpekBtALy1YABVOFoAattoO2iZ6dquHXsGOUedC2u3QJNnZue0OW4tgtcaN9RLxF7CIm37+UxkBAdqXrT1NRdWmr0MZa0G3/Szx7s7X3+0Tnu7Y5FuLCAPhvDeJMdYu9twKT2K34oLKcG5rj8gmskRJJ2tMANkgBKmlQtNF5YUhexK45H1mqB+FzQ1jsv3gPGmVtNofm9930kOazhe9WKC2RZsm0Asl8sicC21o5zTFUEtIZHms8M4TICitgax+lOiZXxj1rYopnPVP3RuirbOkxmMnMuC/e392fMmNRfmfuh8TbTacxJeKX5kNVdtLnOOyFkdN60BtXzwCdpBNRGitQSuN35HEmddb2yz7Q0RlXiiB6jHhs7jOfcIPnztNqxj7Yw8AZWuq6qPV7+3LxPCye+aC7LrbIGIuUlkC9Z+Z3w1snEBi8WiBOdb9JAb/pwQQokZWpJAK7CtQA/DUP1EoJy/PWYJl+SMftEjdJ2GJajEIVuzt1gDTpLeLRNnDoy02q/1j9tUQNOEpjFTSuJ/U93E5mEKa2HRZt+0Zn3LXL9tDRk4NH9P+14AN2S+nr6XyGzxbF1MX8Fju4Y8YXCH0Tm80nl8ke/Dk1cZRB5+ZFBytVUDlVQEFdKaHNB6hsdfrGAZF4thYknMrnlSdd9op1YrOa3OiHGEd2KGOwKWC8l97YKHIyD4SkRti2mxWJSf7Xm2aXh2Hqt5bNPaTMAyiyB1XSfC2EvssuulXrRep8MwbNB1AZvNGt47jMOA4L1WhAiq78zE13/B1/4gYEjc1nthUWgfXbM+bROQj4ht570rsdg2DlmLAmrSQSvkwDSu2nUdFosF+r6fbJpyvCnyP7dWXmu8Lk35H5MgTuoWt/z9+C8lbTD6hGt9wsXudnxm8wBeTQ7IAxABlyUk4xUDrVUIDCsRYRXS2nWzvlg1mQsePngJZRTgggosb7u0fQUwEVCL/Yn2GUuWkdUlpiRVGH3wOLO/h+Wix3LRY3dnB33fY3d3tyxK28lNGBeLRVmQ1t3LFqmBPG1z2UW/KBrReY/FTo+YI1xwGOIAEGG9Xuu8AwAjxhGOgDgOCN4hjmPxywugBYhAgtD5IACRc0qEraEdchMF0QqAmcJSrdT0GQEmubc2YoMdtPHQ1p/ehsrOc3zbz9k4bUbP73jz9SQT8KTBALIDBs8YPGPjA56mr8YnDs8hLjw8iT9Vuo+1n52Zp2wHnL8v1523FTpZJKEslrYW0Xbkdpe3BWVfmTMWi75ZDFXrhRBw5swZ7O/v4+xNZ7FcLrG3t1e0hAE+hrQSEYZhKCl25g8Z4GNxRTNf7RpMO/WLBVivbb1eA41vOAxD+azlutYA+/TZmXDZBlCzi2ThbzabMvd2fa1mml8j51pDavdduXfSREhb7Wdz2tKC2Nc2zFI/U0NLgjl8mTXlb9c4yVw+5p9tGe2EztHW+fHFRQey9pnIIGRySC5gcB0u9ufwxfEevLLZEfIqSCjCGtxsvS5UCkTKzYtZy8nqZjHfNEwwW7/PzMw2pmdfnXPFd7TfMXPRen3fI4SAvu/Lz7bAFkvRcPv7++VcphFDCA0tyDgRgvY8RKS9JlF8zs4HsJJjeecRulDS3kxwgVrcXWsS54kGlbhr/uxaRBVQd8LVxPrWT5yn6rUa7BgaP3Nz2uZErTVjG1XObXULo++DUr0QmCME4GKAT5dq9xUtlDZuxFzeNrmn0o6QzkxSTeIgdTALMO9goCVe6h/GJ4bb8Yo7A4KHzwmJRmkk07SUL0jeCQ6lY1JfVAqEF520BnBa0JtzhKWptb5Ma5oBKKCMCZFpjtLnA1zMSfmMXF/XSUih6z1AGWfP7qPrPXb3lqUCI3QOKY9Y7vTwgeCD09xWaChCBHpvb6+ipdS4CZlB2YEj4NjDO68sdrVQ2DSPJZ5XNNnDuaAMdh6bzWaSt2omcPusmQFkcR9aC6Zt3Npu0C3oZcdpXZwy7x6SuOEJoZMCeUPOhc4kApyEbcEBfeexXHQIHggO2Fn0IGQEJ758F04nbl+yUJ7GJJy8/xSvN+qatiFmWzUmuAn51CAMwyNTwBAIh+EmvEB34aVxH5l6uOzgMjXNeXI5mqVwbbtf5xyCakL7uetqz8kWpm8FrUVagQrKtLv+1C8NcMrebULUmlOLRQeD80MQ/3NnZwHngN3dJbwn7OwsFDAJCKq5d3d3tXDaS1qdbg4gTKpHOGf09jeu/tlqtTpWImbarc2B3Ww2RRvNk+fLOcq9T3NPbX5q7LMNp+HYsVokdfvxjw+vlUAxSvF4CA4hOHhP8J7gPEqjpq736DqH/TOna1tww+jr7+ihz8nir0yE5IAxEA76m/Di4u14Lt+JI95FyHvYjQt4toUwzYHclijd+oqtoNhnTNCSEkW1pl1LImyLuOVjZeYiLCF06HrRlsvlUoWxK+ag+aqtmRrjWFBY80FDCNjZWaLrAs6cPYOuFzPXOcJyuUAsn40IXhgEWqEQ1IzLxtIKwrVr18p9A1Wgzb9s/c556Mf8XdtkWp/WTPzWx7PPteh1q0Vb/7Asheb9bQjGrpn1WXjvBXFWF8F7j+VyqZsBFDTrsVwu4P0brClb3+4rdchOaIkFSuIFVNQTfJJV2RwEWrhtL/ET2DtcW5zHs+5OfHFzE9Z+geQ2AFn6hPmIVTvZaM1Q8//sAeacpdOydvsFA8OmLkhDPttypXbBmUnYgj7eOyx6oTSx0IIjoO9CIaDarNdY9B04J/R9p/1BUuHM6bsA7xzOn7sJwXvccvMF7O4ssb+/CwKjC5IPvFgsig9tAmRpdA7AsNmAWHiJ+tCVxWzPq41J2nyM44hxHAvC25qctpF0XTfJzNFHL4hzGypRASKQhF6caPg2OUUaJHm9J0HSg/cIXkzvnIT1QEjDSO4hSU8VTw47iyW6END5IFlcnOAdwClh0QX0XRBOoFlW3EnjhszXdmJuxGx9I03TE89h1+NI2qU5mgimgTna7Xr20idqn3Hyyo4q2yMPOETEc+5mfNHdhecp4KgbkQmlxTkAeO+KljGNOPdl7HoBM1O10WnKiKNoRANUzLybQ+5tUbLF5MzHHMcRnDO64LVFOwk9iPcYhwFdCEhRqk4cEXKMEMa4rPHCjJ3lUmObhEXfSdUKmW8UsLNcYne5U4L9k7ggEcZhBJgxbDZwIKQxSlewMZbNxLRsq40MPW1zYafhDdcALNXE7/sOlUxM4p1CzCWIa4pRWBaTCKgJqjMO3BAQfEDfdXDksOgX2lyoCi4B5fPeOQTn0XedCC+50lhJsv9s3qOQAmio5zTjPwqg50bGjW4Yxw8w+wrorioxyE1a4tLyTnw27eIAN4FV4Lw/ntkx92NbM8lerflq72kXazvmwW4zRVuN2Qpm9TWnGS32e0sKsMr49XpdTFgLGywWfdFCfd+h7zvsn9kriQIpJezu7iL4gN3d3aLFUkpSDK6dusZxFJPTTQuNd3d3J9QjtumUihYN/7SB/Tb+Z3m5ZllU6hKaHMtCF61ZOl83ZsW0KLcdwzYN0+bM1cw/ngElFCKG2qYk4N1pl+QNm6/lZ0zNvonjfMrjnRji+FJMZD45lDL5uTFl6zXVU7fvaWAaZLeHw+XNeMGfw8X1DqyQWFjHlT2Pa+jDqzYqsq7+p11PW98HCECSlS5jTtPRLuYWFDFBMpOunseeG5WMnFYIzHR0zhWfqNXwNUQj5rJc04j9/V0wEnZ2FkBOOLO3i+AJnSdFGqdMbpMNx3t4kGgWlm5nnBKQMlJDO9JmEllMtM20mQtXa863oRIjZy5AGlo/c7p0iKiEbJyT6/Mg6erN8iyRMgI5eCIsur6YsPLc6wvMSpvD4JQRxxHdKdnsTi2UUU0i12ghTQWtS5aMD/R0Jqu1JZ+/5hH362m9uVbkJue01Q6vBVRx42BypvrSMEmGQyJCRsJq7PHy8hvwmfFhpM0CoKzmXYTLGS4lUIygnOA4w7EcwSo4iDBZKG1Bba+aKTg3Eew+BPjGB7MiYwN4TEAN5JBzRAjnTMSi64Cc0XmPNI7lqyfCGIdC+U9OSsUYSUmeB+zuLQHKWC57OdaiA1HGTWf3sewDln1AHFYIngEe4bWXifHSjGMs2sR7qQyhLIs1OIccI5AT8jiWGG6b+gfU+KltIqYpW2vBtJnMkSChEl6SihKnyf2grCEOVhIubXmgX2MapI5Vm/oSZ/maMzyk4GDReRAnIMlzzuMI4owcBwRH4BRBzMhRjuOY4fgNNl9bBm8LuKtYADOTcW623bg5+dqaclvI45QfbQ4iL57/YnIpGi5R//OQPC5FwmV/E15Y3oMn421Y855eD0CcQVkeVooDUhpVOGQ3n5dAMXMpTRrHsfg3c9OLmdGr9rSOWG2ZEVCLja3S3QQ3KrLZputZMoFk8YSJVrKsoN3d3cLXGuOIrvfCGscRXR8Q4wBov0oiCQ8sFh28J+zt7TbgVJogmDGmiW8Irpk63tUwiF2nvKXGFufpa/Z3e08IFVk1jW/gmoSLCFZ+ZYEw72kSGBPUTZ5lIJQNNjhCIELX+brpcRRmPZL4JZEy65Fdt5jwpwVJT2++JmsJnsE3tPJvfMy12vVuhrZ9/0ZdHk+/z5AQSeINDsY1Xulvxa/nB3HZnUWODLiulJSpBaMEYnzMDC3FwfOSHqobjqW8lep/1DQ200JWyGtmbVs+ZfMY1BwbxxGbzeYYq0Df9VitVhOBbnNb50nZKSUEXzN0LKZoaXO2UZivB1TUVDaaGuppSZonUz9bAy2zQOtbF5Y+NmvNQBsBYdrv+67HousFuCFBiLsQsOh6MS0bRJa5ch214RAz9edhF0tHbOPM7Wizll5rnFoonSZbm0h+uQXzeqM1jUn9tfb7L8/ZnOb6aGVIzFiNHa70N+O3ru1h5Xswb5AJwsYQHNgD7FgQXCdEY7XBjJjpRCiCKUhqXfiWMWM7/jiONbe0MVktxmeLwntftO96vcai4cKxryZQKSX44BuNGCdf21KrNu9Vqjxqyp1tEiXNzdVi6DbtDQCgIIkt7DYWK37nlI+nBW3s9yUtTxPUg3NYdj0COYzrDQI5BPII5LHseng49D4gOI+gPqBjQuc8NquVZFoxyouT+Pa2sRRrRTeddvNrc3fngForpG+4piTpSoOsgvkfalTxACpTjQrK60VcX3MorSYTiD0SdgBeIucFBr/A85ub8cXDHpvESMxYxRHsSFo3EITsF6yZOyKYQkjsMY4DlstFWcCtb2jkxO0DtodrwXVDLG2BmHC3tY9J09N2d3cnIAiRtWWvXDjzQmcjt+q6DkdHR43ZKVk3fd9jGAbs7OyogDFWqxWyxljFbJ369wAmJjxQAS+QhJXsWZp2bVHVCacOSVgjOA8kVqEiUJb2Gr0P6JyAS0gZjhkehM4F6bmaGB5OP8e1jWUWcKaaxKEkBXSdxCzN4rB4qYFpbaE0UDfLN9581dxCOfhpP/X6xon+ov0M1BzHJtfxy3xVKKiWDmZglT2u+dvx+aMH8PL6PAZjLgPDqZbzXsqz5qimxRgtvGB/SykXU9J+X/2xabWGmcAmhCZAJYg/EwYAJQtovV6XoPiZM2dwdHRUmOVMM+7uSmqYLTxDhYFpwkLNMNKi4QYpTSmWeTA/2a7fNLvNARiACt7e3h4AYGdnp+TIthlM0ydjsUdg0feaDMHFpAWzxmx9qcU0VJwAZaUX8CnFKIkXzpUicEvM996DIaRxJoDm35rFYhpzotG3+MEnjdPTgeRUJpRPiSJ9qWMreIT683/wQQkjAg5xFlf9A7h4KBpvuVwWZre2gr6Nfdkua0njVsIk758mCtjf2kVpoI4dt9V+puHaEErfi98o1ybmqPmXYo52BfW0uOXR0VERwJLjCkw2gxZMMUEGMPGfLFRjPmy7SbTCCgDjrC9m+/zNb52XWDnnSouEdh7acIn5xiYYZt7b54HqA5svvVwuiy/blrTlVLuUtT6nWSztRmjXZH8/1bLi0+rUN8eb483x2zJ+x2X0vDneHP+xjzeF8s3x5vgKG28K5ZvjzfEVNt4UyjfHm+MrbLwplG+ON8dX2HhTKN8cb46vsPGmUL453hxfYeNNoXxzvDm+wsabQvnmeHN8hY3/H2M53/5tSGLEAAAAAElFTkSuQmCC\",\n      \"text/plain\": [\n       \"<Figure size 640x480 with 1 Axes>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"sav_dataset.visualize_annotation(\\n\",\n    \"    frames, manual_annot, auto_annot,\\n\",\n    \"    annotated_frame_id=0,\\n\",\n    \"    show_manual=False,\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"### Masklet annotations and Metadata\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Manual annotations and metadata\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>video_id</th>\\n\",\n       \"      <th>video_duration</th>\\n\",\n       \"      <th>video_frame_count</th>\\n\",\n       \"      <th>video_height</th>\\n\",\n       \"      <th>video_width</th>\\n\",\n       \"      <th>video_resolution</th>\\n\",\n       \"      <th>video_environment</th>\\n\",\n       \"      <th>video_split</th>\\n\",\n       \"      <th>masklet</th>\\n\",\n       \"      <th>masklet_id</th>\\n\",\n       \"      <th>masklet_size_rel</th>\\n\",\n       \"      <th>masklet_size_abs</th>\\n\",\n       \"      <th>masklet_size_bucket</th>\\n\",\n       \"      <th>masklet_visibility_changes</th>\\n\",\n       \"      <th>masklet_first_appeared_frame</th>\\n\",\n       \"      <th>masklet_frame_count</th>\\n\",\n       \"      <th>masklet_edited_frame_count</th>\\n\",\n       \"      <th>masklet_type</th>\\n\",\n       \"      <th>masklet_stability_score</th>\\n\",\n       \"      <th>masklet_num</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>sav_000001</td>\\n\",\n       \"      <td>20.125</td>\\n\",\n       \"      <td>483.0</td>\\n\",\n       \"      <td>848.0</td>\\n\",\n       \"      <td>480.0</td>\\n\",\n       \"      <td>407040.0</td>\\n\",\n       \"      <td>Indoor</td>\\n\",\n       \"      <td>train</td>\\n\",\n       \"      <td>[[{'size': [848, 480], 'counts': 'i\\\\Y4&lt;Qj05K4L...</td>\\n\",\n       \"      <td>[0, 1, 2, 3, 4]</td>\\n\",\n       \"      <td>[0.0035249812, 0.0946159778, 0.011285757, 0.00...</td>\\n\",\n       \"      <td>[1434.8083333333, 38512.4876033058, 4593.75454...</td>\\n\",\n       \"      <td>[medium, large, medium, medium, medium]</td>\\n\",\n       \"      <td>[2, 0, 10, 0, 0]</td>\\n\",\n       \"      <td>[0.0, 0.0, 0.0, 113.0, 0.0]</td>\\n\",\n       \"      <td>[121, 121, 121, 121, 121]</td>\\n\",\n       \"      <td>[41, 11, 22, 4, 115]</td>\\n\",\n       \"      <td>[manual, manual, manual, manual, manual]</td>\\n\",\n       \"      <td>[None, None, None, None, None]</td>\\n\",\n       \"      <td>5</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"     video_id  video_duration  video_frame_count  video_height  video_width  \\\\\\n\",\n       \"0  sav_000001          20.125              483.0         848.0        480.0   \\n\",\n       \"\\n\",\n       \"   video_resolution video_environment video_split  \\\\\\n\",\n       \"0          407040.0            Indoor       train   \\n\",\n       \"\\n\",\n       \"                                             masklet       masklet_id  \\\\\\n\",\n       \"0  [[{'size': [848, 480], 'counts': 'i\\\\Y4<Qj05K4L...  [0, 1, 2, 3, 4]   \\n\",\n       \"\\n\",\n       \"                                    masklet_size_rel  \\\\\\n\",\n       \"0  [0.0035249812, 0.0946159778, 0.011285757, 0.00...   \\n\",\n       \"\\n\",\n       \"                                    masklet_size_abs  \\\\\\n\",\n       \"0  [1434.8083333333, 38512.4876033058, 4593.75454...   \\n\",\n       \"\\n\",\n       \"                       masklet_size_bucket masklet_visibility_changes  \\\\\\n\",\n       \"0  [medium, large, medium, medium, medium]           [2, 0, 10, 0, 0]   \\n\",\n       \"\\n\",\n       \"  masklet_first_appeared_frame        masklet_frame_count  \\\\\\n\",\n       \"0  [0.0, 0.0, 0.0, 113.0, 0.0]  [121, 121, 121, 121, 121]   \\n\",\n       \"\\n\",\n       \"  masklet_edited_frame_count                              masklet_type  \\\\\\n\",\n       \"0       [41, 11, 22, 4, 115]  [manual, manual, manual, manual, manual]   \\n\",\n       \"\\n\",\n       \"          masklet_stability_score  masklet_num  \\n\",\n       \"0  [None, None, None, None, None]            5  \"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"pd.DataFrame([manual_annot])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Auto annotations and metadata\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/html\": [\n       \"<div>\\n\",\n       \"<style scoped>\\n\",\n       \"    .dataframe tbody tr th:only-of-type {\\n\",\n       \"        vertical-align: middle;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe tbody tr th {\\n\",\n       \"        vertical-align: top;\\n\",\n       \"    }\\n\",\n       \"\\n\",\n       \"    .dataframe thead th {\\n\",\n       \"        text-align: right;\\n\",\n       \"    }\\n\",\n       \"</style>\\n\",\n       \"<table border=\\\"1\\\" class=\\\"dataframe\\\">\\n\",\n       \"  <thead>\\n\",\n       \"    <tr style=\\\"text-align: right;\\\">\\n\",\n       \"      <th></th>\\n\",\n       \"      <th>video_id</th>\\n\",\n       \"      <th>video_duration</th>\\n\",\n       \"      <th>video_frame_count</th>\\n\",\n       \"      <th>video_height</th>\\n\",\n       \"      <th>video_width</th>\\n\",\n       \"      <th>video_resolution</th>\\n\",\n       \"      <th>video_environment</th>\\n\",\n       \"      <th>video_split</th>\\n\",\n       \"      <th>masklet</th>\\n\",\n       \"      <th>masklet_id</th>\\n\",\n       \"      <th>masklet_size_rel</th>\\n\",\n       \"      <th>masklet_size_abs</th>\\n\",\n       \"      <th>masklet_size_bucket</th>\\n\",\n       \"      <th>masklet_visibility_changes</th>\\n\",\n       \"      <th>masklet_first_appeared_frame</th>\\n\",\n       \"      <th>masklet_frame_count</th>\\n\",\n       \"      <th>masklet_edited_frame_count</th>\\n\",\n       \"      <th>masklet_type</th>\\n\",\n       \"      <th>masklet_stability_score</th>\\n\",\n       \"      <th>masklet_num</th>\\n\",\n       \"    </tr>\\n\",\n       \"  </thead>\\n\",\n       \"  <tbody>\\n\",\n       \"    <tr>\\n\",\n       \"      <th>0</th>\\n\",\n       \"      <td>sav_000001</td>\\n\",\n       \"      <td>20.125</td>\\n\",\n       \"      <td>483.0</td>\\n\",\n       \"      <td>848.0</td>\\n\",\n       \"      <td>480.0</td>\\n\",\n       \"      <td>407040.0</td>\\n\",\n       \"      <td>Indoor</td>\\n\",\n       \"      <td>train</td>\\n\",\n       \"      <td>[[{'size': [848, 480], 'counts': 'ka0e8ka001O1...</td>\\n\",\n       \"      <td>[0, 1, 2, 3, 4, 5, 6, 7, 8]</td>\\n\",\n       \"      <td>[0.010841089678796047, 0.038489445267425544, 0...</td>\\n\",\n       \"      <td>[4412.757142857143, 15666.743801652892, 7663.1...</td>\\n\",\n       \"      <td>[medium, large, medium, large, medium, medium,...</td>\\n\",\n       \"      <td>[5, 0, 0, 0, 0, 0, 10, 3, 12]</td>\\n\",\n       \"      <td>[0, 0, 0, 0, 0, 0, 0, 0, 0]</td>\\n\",\n       \"      <td>[121, 121, 121, 121, 121, 121, 121, 121, 121]</td>\\n\",\n       \"      <td>[0, 0, 0, 0, 0, 0, 0, 0, 0]</td>\\n\",\n       \"      <td>[auto, auto, auto, auto, auto, auto, auto, aut...</td>\\n\",\n       \"      <td>[[1.0, 0.999616265296936, 1.0, 1.0, 1.0, 1.0, ...</td>\\n\",\n       \"      <td>9</td>\\n\",\n       \"    </tr>\\n\",\n       \"  </tbody>\\n\",\n       \"</table>\\n\",\n       \"</div>\"\n      ],\n      \"text/plain\": [\n       \"     video_id  video_duration  video_frame_count  video_height  video_width  \\\\\\n\",\n       \"0  sav_000001          20.125              483.0         848.0        480.0   \\n\",\n       \"\\n\",\n       \"   video_resolution video_environment video_split  \\\\\\n\",\n       \"0          407040.0            Indoor       train   \\n\",\n       \"\\n\",\n       \"                                             masklet  \\\\\\n\",\n       \"0  [[{'size': [848, 480], 'counts': 'ka0e8ka001O1...   \\n\",\n       \"\\n\",\n       \"                    masklet_id  \\\\\\n\",\n       \"0  [0, 1, 2, 3, 4, 5, 6, 7, 8]   \\n\",\n       \"\\n\",\n       \"                                    masklet_size_rel  \\\\\\n\",\n       \"0  [0.010841089678796047, 0.038489445267425544, 0...   \\n\",\n       \"\\n\",\n       \"                                    masklet_size_abs  \\\\\\n\",\n       \"0  [4412.757142857143, 15666.743801652892, 7663.1...   \\n\",\n       \"\\n\",\n       \"                                 masklet_size_bucket  \\\\\\n\",\n       \"0  [medium, large, medium, large, medium, medium,...   \\n\",\n       \"\\n\",\n       \"      masklet_visibility_changes masklet_first_appeared_frame  \\\\\\n\",\n       \"0  [5, 0, 0, 0, 0, 0, 10, 3, 12]  [0, 0, 0, 0, 0, 0, 0, 0, 0]   \\n\",\n       \"\\n\",\n       \"                             masklet_frame_count   masklet_edited_frame_count  \\\\\\n\",\n       \"0  [121, 121, 121, 121, 121, 121, 121, 121, 121]  [0, 0, 0, 0, 0, 0, 0, 0, 0]   \\n\",\n       \"\\n\",\n       \"                                        masklet_type  \\\\\\n\",\n       \"0  [auto, auto, auto, auto, auto, auto, auto, aut...   \\n\",\n       \"\\n\",\n       \"                             masklet_stability_score  masklet_num  \\n\",\n       \"0  [[1.0, 0.999616265296936, 1.0, 1.0, 1.0, 1.0, ...            9  \"\n      ]\n     },\n     \"execution_count\": 8,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"pd.DataFrame([auto_annot])\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Video info\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"sav_000001 is 20.125 seconds long with 483.0 frames. The video resolution is 848.0 x 480.0.\\n\",\n      \"This video is captured in Indoor environment.\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"video_id = manual_annot[\\\"video_id\\\"]\\n\",\n    \"video_duration = manual_annot[\\\"video_duration\\\"]\\n\",\n    \"video_frame_count = manual_annot[\\\"video_frame_count\\\"]\\n\",\n    \"H = manual_annot[\\\"video_height\\\"]\\n\",\n    \"W = manual_annot[\\\"video_width\\\"]\\n\",\n    \"environment = manual_annot[\\\"video_environment\\\"]\\n\",\n    \"print(\\n\",\n    \"    f\\\"{video_id} is {video_duration} seconds long with {video_frame_count} frames. The video resolution is {H} x {W}.\\\"\\n\",\n    \")\\n\",\n    \"print(f\\\"This video is captured in {environment} environment.\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"#### Masklet info\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"There are 5 manually labeled masklets and 9 automatically generated masklets.\\n\",\n      \"In SA-V, videos are annotated every 4 frames. Therefore, there are 121 frames being annotated.\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"print(\\n\",\n    \"    f\\\"There are {manual_annot['masklet_num']} manually labeled masklets and {auto_annot['masklet_num']} automatically generated masklets.\\\"\\n\",\n    \")\\n\",\n    \"print(\\n\",\n    \"    f\\\"In SA-V, videos are annotated every 4 frames. Therefore, there are {manual_annot['masklet_frame_count'][0]} frames being annotated.\\\"\\n\",\n    \")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 11,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'size': [848, 480],\\n\",\n       \" 'counts': 'i\\\\\\\\Y4<Qj05K4L4M3M2N3O000010O00001O00010O00000O101O0000000000000O010000000O10O10000O01000O100O010O1O1O1N2O1O0O2O1N20O01O1001N101O1N100O100O10O01O2O00000O1O10O1O11N1O1O100O1O2N1O1O3L4HTXk5'}\"\n      ]\n     },\n     \"execution_count\": 11,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Get the rle of the manual masklet with masklet_id=0 in frame 0\\n\",\n    \"masklet_id = 0\\n\",\n    \"annotated_frame_id = 0\\n\",\n    \"manual_annot[\\\"masklet\\\"][annotated_frame_id][masklet_id]\\n\",\n    \"# decode the rle using `mask_util.decode(rle)>0` to get the binary segmentation mask\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 12,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"{'size': [848, 480],\\n\",\n       \" 'counts': 'Q_T6S1Xh0X1eNY1[Od0E;M4N10000O101O00000000000000O0100000000001M2O1O1N3N1M4H8B?@e0POc1jMfZ[5'}\"\n      ]\n     },\n     \"execution_count\": 12,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"# Get the rle of the masklet with masklet_id=5 in frame 100\\n\",\n    \"masklet_id = 5\\n\",\n    \"annotated_frame_id = 100\\n\",\n    \"auto_annot[\\\"masklet\\\"][annotated_frame_id][masklet_id]\\n\",\n    \"# decode the rle using `mask_util.decode(rle)>0` to get the binary segmentation mask\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"onevision_ta_2_pseudo_labeling\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.10.12\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/sav_dataset/utils/sav_utils.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the sav_dataset directory of this source tree.\nimport json\nimport os\nfrom typing import Dict, List, Optional, Tuple\n\nimport cv2\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport pycocotools.mask as mask_util\n\n\ndef decode_video(video_path: str) -> List[np.ndarray]:\n    \"\"\"\n    Decode the video and return the RGB frames\n    \"\"\"\n    video = cv2.VideoCapture(video_path)\n    video_frames = []\n    while video.isOpened():\n        ret, frame = video.read()\n        if ret:\n            frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)\n            video_frames.append(frame)\n        else:\n            break\n    return video_frames\n\n\ndef show_anns(masks, colors: List, borders=True) -> None:\n    \"\"\"\n    show the annotations\n    \"\"\"\n    # return if no masks\n    if len(masks) == 0:\n        return\n\n    # sort masks by size\n    sorted_annot_and_color = sorted(\n        zip(masks, colors), key=(lambda x: x[0].sum()), reverse=True\n    )\n    H, W = sorted_annot_and_color[0][0].shape[0], sorted_annot_and_color[0][0].shape[1]\n\n    canvas = np.ones((H, W, 4))\n    canvas[:, :, 3] = 0  # set the alpha channel\n    contour_thickness = max(1, int(min(5, 0.01 * min(H, W))))\n    for mask, color in sorted_annot_and_color:\n        canvas[mask] = np.concatenate([color, [0.55]])\n        if borders:\n            contours, _ = cv2.findContours(\n                np.array(mask, dtype=np.uint8), cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE\n            )\n            cv2.drawContours(\n                canvas, contours, -1, (0.05, 0.05, 0.05, 1), thickness=contour_thickness\n            )\n\n    ax = plt.gca()\n    ax.imshow(canvas)\n\n\nclass SAVDataset:\n    \"\"\"\n    SAVDataset is a class to load the SAV dataset and visualize the annotations.\n    \"\"\"\n\n    def __init__(self, sav_dir, annot_sample_rate=4):\n        \"\"\"\n        Args:\n            sav_dir: the directory of the SAV dataset\n            annot_sample_rate: the sampling rate of the annotations.\n                The annotations are aligned with the videos at 6 fps.\n        \"\"\"\n        self.sav_dir = sav_dir\n        self.annot_sample_rate = annot_sample_rate\n        self.manual_mask_colors = np.random.random((256, 3))\n        self.auto_mask_colors = np.random.random((256, 3))\n\n    def read_frames(self, mp4_path: str) -> None:\n        \"\"\"\n        Read the frames and downsample them to align with the annotations.\n        \"\"\"\n        if not os.path.exists(mp4_path):\n            print(f\"{mp4_path} doesn't exist.\")\n            return None\n        else:\n            # decode the video\n            frames = decode_video(mp4_path)\n            print(f\"There are {len(frames)} frames decoded from {mp4_path} (24fps).\")\n\n            # downsample the frames to align with the annotations\n            frames = frames[:: self.annot_sample_rate]\n            print(\n                f\"Videos are annotated every {self.annot_sample_rate} frames. \"\n                \"To align with the annotations, \"\n                f\"downsample the video to {len(frames)} frames.\"\n            )\n            return frames\n\n    def get_frames_and_annotations(\n        self, video_id: str\n    ) -> Tuple[List | None, Dict | None, Dict | None]:\n        \"\"\"\n        Get the frames and annotations for video.\n        \"\"\"\n        # load the video\n        mp4_path = os.path.join(self.sav_dir, video_id + \".mp4\")\n        frames = self.read_frames(mp4_path)\n        if frames is None:\n            return None, None, None\n\n        # load the manual annotations\n        manual_annot_path = os.path.join(self.sav_dir, video_id + \"_manual.json\")\n        if not os.path.exists(manual_annot_path):\n            print(f\"{manual_annot_path} doesn't exist. Something might be wrong.\")\n            manual_annot = None\n        else:\n            manual_annot = json.load(open(manual_annot_path))\n\n        # load the manual annotations\n        auto_annot_path = os.path.join(self.sav_dir, video_id + \"_auto.json\")\n        if not os.path.exists(auto_annot_path):\n            print(f\"{auto_annot_path} doesn't exist.\")\n            auto_annot = None\n        else:\n            auto_annot = json.load(open(auto_annot_path))\n\n        return frames, manual_annot, auto_annot\n\n    def visualize_annotation(\n        self,\n        frames: List[np.ndarray],\n        auto_annot: Optional[Dict],\n        manual_annot: Optional[Dict],\n        annotated_frame_id: int,\n        show_auto=True,\n        show_manual=True,\n    ) -> None:\n        \"\"\"\n        Visualize the annotations on the annotated_frame_id.\n        If show_manual is True, show the manual annotations.\n        If show_auto is True, show the auto annotations.\n        By default, show both auto and manual annotations.\n        \"\"\"\n\n        if annotated_frame_id >= len(frames):\n            print(\"invalid annotated_frame_id\")\n            return\n\n        rles = []\n        colors = []\n        if show_manual and manual_annot is not None:\n            rles.extend(manual_annot[\"masklet\"][annotated_frame_id])\n            colors.extend(\n                self.manual_mask_colors[\n                    : len(manual_annot[\"masklet\"][annotated_frame_id])\n                ]\n            )\n        if show_auto and auto_annot is not None:\n            rles.extend(auto_annot[\"masklet\"][annotated_frame_id])\n            colors.extend(\n                self.auto_mask_colors[: len(auto_annot[\"masklet\"][annotated_frame_id])]\n            )\n\n        plt.imshow(frames[annotated_frame_id])\n\n        if len(rles) > 0:\n            masks = [mask_util.decode(rle) > 0 for rle in rles]\n            show_anns(masks, colors)\n        else:\n            print(\"No annotation will be shown\")\n\n        plt.axis(\"off\")\n        plt.show()\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/setup.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\nimport os\n\nfrom setuptools import find_packages, setup\n\n# Package metadata\nNAME = \"SAM-2\"\nVERSION = \"1.0\"\nDESCRIPTION = \"SAM 2: Segment Anything in Images and Videos\"\nURL = \"https://github.com/facebookresearch/sam2\"\nAUTHOR = \"Meta AI\"\nAUTHOR_EMAIL = \"segment-anything@meta.com\"\nLICENSE = \"Apache 2.0\"\n\n# Read the contents of README file\nwith open(\"README.md\", \"r\", encoding=\"utf-8\") as f:\n    LONG_DESCRIPTION = f.read()\n\n# Required dependencies\nREQUIRED_PACKAGES = [\n    \"torch>=2.3.1\",\n    \"torchvision>=0.18.1\",\n    \"numpy>=1.24.4\",\n    \"tqdm>=4.66.1\",\n    \"hydra-core>=1.3.2\",\n    \"iopath>=0.1.10\",\n    \"pillow>=9.4.0\",\n]\n\nEXTRA_PACKAGES = {\n    \"notebooks\": [\n        \"matplotlib>=3.9.1\",\n        \"jupyter>=1.0.0\",\n        \"opencv-python>=4.7.0\",\n        \"eva-decord>=0.6.1\",\n    ],\n    \"interactive-demo\": [\n        \"Flask>=3.0.3\",\n        \"Flask-Cors>=5.0.0\",\n        \"av>=13.0.0\",\n        \"dataclasses-json>=0.6.7\",\n        \"eva-decord>=0.6.1\",\n        \"gunicorn>=23.0.0\",\n        \"imagesize>=1.4.1\",\n        \"pycocotools>=2.0.8\",\n        \"strawberry-graphql>=0.243.0\",\n    ],\n    \"dev\": [\n        \"black==24.2.0\",\n        \"usort==1.0.2\",\n        \"ufmt==2.0.0b2\",\n        \"fvcore>=0.1.5.post20221221\",\n        \"pandas>=2.2.2\",\n        \"scikit-image>=0.24.0\",\n        \"tensorboard>=2.17.0\",\n        \"pycocotools>=2.0.8\",\n        \"tensordict>=0.5.0\",\n        \"opencv-python>=4.7.0\",\n        \"submitit>=1.5.1\",\n    ],\n}\n\n# By default, we also build the SAM 2 CUDA extension.\n# You may turn off CUDA build with `export SAM2_BUILD_CUDA=0`.\nBUILD_CUDA = os.getenv(\"SAM2_BUILD_CUDA\", \"1\") == \"1\"\n# By default, we allow SAM 2 installation to proceed even with build errors.\n# You may force stopping on errors with `export SAM2_BUILD_ALLOW_ERRORS=0`.\nBUILD_ALLOW_ERRORS = os.getenv(\"SAM2_BUILD_ALLOW_ERRORS\", \"1\") == \"1\"\n\n# Catch and skip errors during extension building and print a warning message\n# (note that this message only shows up under verbose build mode\n# \"pip install -v -e .\" or \"python setup.py build_ext -v\")\nCUDA_ERROR_MSG = (\n    \"{}\\n\\n\"\n    \"Failed to build the SAM 2 CUDA extension due to the error above. \"\n    \"You can still use SAM 2 and it's OK to ignore the error above, although some \"\n    \"post-processing functionality may be limited (which doesn't affect the results in most cases; \"\n    \"(see https://github.com/facebookresearch/sam2/blob/main/INSTALL.md).\\n\"\n)\n\n\ndef get_extensions():\n    if not BUILD_CUDA:\n        return []\n\n    try:\n        from torch.utils.cpp_extension import CUDAExtension\n\n        srcs = [\"sam2/csrc/connected_components.cu\"]\n        compile_args = {\n            \"cxx\": [],\n            \"nvcc\": [\n                \"-DCUDA_HAS_FP16=1\",\n                \"-D__CUDA_NO_HALF_OPERATORS__\",\n                \"-D__CUDA_NO_HALF_CONVERSIONS__\",\n                \"-D__CUDA_NO_HALF2_OPERATORS__\",\n            ],\n        }\n        ext_modules = [CUDAExtension(\"sam2._C\", srcs, extra_compile_args=compile_args)]\n    except Exception as e:\n        if BUILD_ALLOW_ERRORS:\n            print(CUDA_ERROR_MSG.format(e))\n            ext_modules = []\n        else:\n            raise e\n\n    return ext_modules\n\n\ntry:\n    from torch.utils.cpp_extension import BuildExtension\n\n    class BuildExtensionIgnoreErrors(BuildExtension):\n\n        def finalize_options(self):\n            try:\n                super().finalize_options()\n            except Exception as e:\n                print(CUDA_ERROR_MSG.format(e))\n                self.extensions = []\n\n        def build_extensions(self):\n            try:\n                super().build_extensions()\n            except Exception as e:\n                print(CUDA_ERROR_MSG.format(e))\n                self.extensions = []\n\n        def get_ext_filename(self, ext_name):\n            try:\n                return super().get_ext_filename(ext_name)\n            except Exception as e:\n                print(CUDA_ERROR_MSG.format(e))\n                self.extensions = []\n                return \"_C.so\"\n\n    cmdclass = {\n        \"build_ext\": (\n            BuildExtensionIgnoreErrors.with_options(no_python_abi_suffix=True)\n            if BUILD_ALLOW_ERRORS\n            else BuildExtension.with_options(no_python_abi_suffix=True)\n        )\n    }\nexcept Exception as e:\n    cmdclass = {}\n    if BUILD_ALLOW_ERRORS:\n        print(CUDA_ERROR_MSG.format(e))\n    else:\n        raise e\n\n\n# Setup configuration\nsetup(\n    name=NAME,\n    version=VERSION,\n    description=DESCRIPTION,\n    long_description=LONG_DESCRIPTION,\n    long_description_content_type=\"text/markdown\",\n    url=URL,\n    author=AUTHOR,\n    author_email=AUTHOR_EMAIL,\n    license=LICENSE,\n    packages=find_packages(exclude=\"notebooks\"),\n    include_package_data=True,\n    install_requires=REQUIRED_PACKAGES,\n    extras_require=EXTRA_PACKAGES,\n    python_requires=\">=3.10.0\",\n    ext_modules=get_extensions(),\n    cmdclass=cmdclass,\n)\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/tools/README.md",
    "content": "## SAM 2 toolkits\n\nThis directory provides toolkits for additional SAM 2 use cases.\n\n### Semi-supervised VOS inference\n\nThe `vos_inference.py` script can be used to generate predictions for semi-supervised video object segmentation (VOS) evaluation on datasets such as [DAVIS](https://davischallenge.org/index.html), [MOSE](https://henghuiding.github.io/MOSE/) or the SA-V dataset.\n\nAfter installing SAM 2 and its dependencies, it can be used as follows ([DAVIS 2017 dataset](https://davischallenge.org/davis2017/code.html) as an example). This script saves the prediction PNG files to the `--output_mask_dir`.\n```bash\npython ./tools/vos_inference.py \\\n  --sam2_cfg configs/sam2.1/sam2.1_hiera_b+.yaml \\\n  --sam2_checkpoint ./checkpoints/sam2.1_hiera_base_plus.pt \\\n  --base_video_dir /path-to-davis-2017/JPEGImages/480p \\\n  --input_mask_dir /path-to-davis-2017/Annotations/480p \\\n  --video_list_file /path-to-davis-2017/ImageSets/2017/val.txt \\\n  --output_mask_dir ./outputs/davis_2017_pred_pngs\n```\n(replace `/path-to-davis-2017` with the path to DAVIS 2017 dataset)\n\nTo evaluate on the SA-V dataset with per-object PNG files for the object masks, we need to **add the `--per_obj_png_file` flag** as follows (using SA-V val as an example). This script will also save per-object PNG files for the output masks under the `--per_obj_png_file` flag.\n```bash\npython ./tools/vos_inference.py \\\n  --sam2_cfg configs/sam2.1/sam2.1_hiera_b+.yaml \\\n  --sam2_checkpoint ./checkpoints/sam2.1_hiera_base_plus.pt \\\n  --base_video_dir /path-to-sav-val/JPEGImages_24fps \\\n  --input_mask_dir /path-to-sav-val/Annotations_6fps \\\n  --video_list_file /path-to-sav-val/sav_val.txt \\\n  --per_obj_png_file \\\n  --output_mask_dir ./outputs/sav_val_pred_pngs\n```\n(replace `/path-to-sav-val` with the path to SA-V val)\n\nThen, we can use the evaluation tools or servers for each dataset to get the performance of the prediction PNG files above.\n\nNote: by default, the `vos_inference.py` script above assumes that all objects to track already appear on frame 0 in each video (as is the case in DAVIS, MOSE or SA-V). **For VOS datasets that don't have all objects to track appearing in the first frame (such as LVOS or YouTube-VOS), please add the `--track_object_appearing_later_in_video` flag when using `vos_inference.py`**.\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/tools/vos_inference.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport argparse\nimport os\nfrom collections import defaultdict\n\nimport numpy as np\nimport torch\nfrom PIL import Image\nfrom sam2.build_sam import build_sam2_video_predictor\n\n\n# the PNG palette for DAVIS 2017 dataset\nDAVIS_PALETTE = b\"\\x00\\x00\\x00\\x80\\x00\\x00\\x00\\x80\\x00\\x80\\x80\\x00\\x00\\x00\\x80\\x80\\x00\\x80\\x00\\x80\\x80\\x80\\x80\\x80@\\x00\\x00\\xc0\\x00\\x00@\\x80\\x00\\xc0\\x80\\x00@\\x00\\x80\\xc0\\x00\\x80@\\x80\\x80\\xc0\\x80\\x80\\x00@\\x00\\x80@\\x00\\x00\\xc0\\x00\\x80\\xc0\\x00\\x00@\\x80\\x80@\\x80\\x00\\xc0\\x80\\x80\\xc0\\x80@@\\x00\\xc0@\\x00@\\xc0\\x00\\xc0\\xc0\\x00@@\\x80\\xc0@\\x80@\\xc0\\x80\\xc0\\xc0\\x80\\x00\\x00@\\x80\\x00@\\x00\\x80@\\x80\\x80@\\x00\\x00\\xc0\\x80\\x00\\xc0\\x00\\x80\\xc0\\x80\\x80\\xc0@\\x00@\\xc0\\x00@@\\x80@\\xc0\\x80@@\\x00\\xc0\\xc0\\x00\\xc0@\\x80\\xc0\\xc0\\x80\\xc0\\x00@@\\x80@@\\x00\\xc0@\\x80\\xc0@\\x00@\\xc0\\x80@\\xc0\\x00\\xc0\\xc0\\x80\\xc0\\xc0@@@\\xc0@@@\\xc0@\\xc0\\xc0@@@\\xc0\\xc0@\\xc0@\\xc0\\xc0\\xc0\\xc0\\xc0 \\x00\\x00\\xa0\\x00\\x00 \\x80\\x00\\xa0\\x80\\x00 \\x00\\x80\\xa0\\x00\\x80 \\x80\\x80\\xa0\\x80\\x80`\\x00\\x00\\xe0\\x00\\x00`\\x80\\x00\\xe0\\x80\\x00`\\x00\\x80\\xe0\\x00\\x80`\\x80\\x80\\xe0\\x80\\x80 @\\x00\\xa0@\\x00 \\xc0\\x00\\xa0\\xc0\\x00 @\\x80\\xa0@\\x80 \\xc0\\x80\\xa0\\xc0\\x80`@\\x00\\xe0@\\x00`\\xc0\\x00\\xe0\\xc0\\x00`@\\x80\\xe0@\\x80`\\xc0\\x80\\xe0\\xc0\\x80 \\x00@\\xa0\\x00@ \\x80@\\xa0\\x80@ \\x00\\xc0\\xa0\\x00\\xc0 \\x80\\xc0\\xa0\\x80\\xc0`\\x00@\\xe0\\x00@`\\x80@\\xe0\\x80@`\\x00\\xc0\\xe0\\x00\\xc0`\\x80\\xc0\\xe0\\x80\\xc0 @@\\xa0@@ \\xc0@\\xa0\\xc0@ @\\xc0\\xa0@\\xc0 \\xc0\\xc0\\xa0\\xc0\\xc0`@@\\xe0@@`\\xc0@\\xe0\\xc0@`@\\xc0\\xe0@\\xc0`\\xc0\\xc0\\xe0\\xc0\\xc0\\x00 \\x00\\x80 \\x00\\x00\\xa0\\x00\\x80\\xa0\\x00\\x00 \\x80\\x80 \\x80\\x00\\xa0\\x80\\x80\\xa0\\x80@ \\x00\\xc0 \\x00@\\xa0\\x00\\xc0\\xa0\\x00@ \\x80\\xc0 \\x80@\\xa0\\x80\\xc0\\xa0\\x80\\x00`\\x00\\x80`\\x00\\x00\\xe0\\x00\\x80\\xe0\\x00\\x00`\\x80\\x80`\\x80\\x00\\xe0\\x80\\x80\\xe0\\x80@`\\x00\\xc0`\\x00@\\xe0\\x00\\xc0\\xe0\\x00@`\\x80\\xc0`\\x80@\\xe0\\x80\\xc0\\xe0\\x80\\x00 @\\x80 @\\x00\\xa0@\\x80\\xa0@\\x00 \\xc0\\x80 \\xc0\\x00\\xa0\\xc0\\x80\\xa0\\xc0@ @\\xc0 @@\\xa0@\\xc0\\xa0@@ \\xc0\\xc0 \\xc0@\\xa0\\xc0\\xc0\\xa0\\xc0\\x00`@\\x80`@\\x00\\xe0@\\x80\\xe0@\\x00`\\xc0\\x80`\\xc0\\x00\\xe0\\xc0\\x80\\xe0\\xc0@`@\\xc0`@@\\xe0@\\xc0\\xe0@@`\\xc0\\xc0`\\xc0@\\xe0\\xc0\\xc0\\xe0\\xc0  \\x00\\xa0 \\x00 \\xa0\\x00\\xa0\\xa0\\x00  \\x80\\xa0 \\x80 \\xa0\\x80\\xa0\\xa0\\x80` \\x00\\xe0 \\x00`\\xa0\\x00\\xe0\\xa0\\x00` \\x80\\xe0 \\x80`\\xa0\\x80\\xe0\\xa0\\x80 `\\x00\\xa0`\\x00 \\xe0\\x00\\xa0\\xe0\\x00 `\\x80\\xa0`\\x80 \\xe0\\x80\\xa0\\xe0\\x80``\\x00\\xe0`\\x00`\\xe0\\x00\\xe0\\xe0\\x00``\\x80\\xe0`\\x80`\\xe0\\x80\\xe0\\xe0\\x80  @\\xa0 @ \\xa0@\\xa0\\xa0@  \\xc0\\xa0 \\xc0 \\xa0\\xc0\\xa0\\xa0\\xc0` @\\xe0 @`\\xa0@\\xe0\\xa0@` \\xc0\\xe0 \\xc0`\\xa0\\xc0\\xe0\\xa0\\xc0 `@\\xa0`@ \\xe0@\\xa0\\xe0@ `\\xc0\\xa0`\\xc0 \\xe0\\xc0\\xa0\\xe0\\xc0``@\\xe0`@`\\xe0@\\xe0\\xe0@``\\xc0\\xe0`\\xc0`\\xe0\\xc0\\xe0\\xe0\\xc0\"\n\n\ndef load_ann_png(path):\n    \"\"\"Load a PNG file as a mask and its palette.\"\"\"\n    mask = Image.open(path)\n    palette = mask.getpalette()\n    mask = np.array(mask).astype(np.uint8)\n    return mask, palette\n\n\ndef save_ann_png(path, mask, palette):\n    \"\"\"Save a mask as a PNG file with the given palette.\"\"\"\n    assert mask.dtype == np.uint8\n    assert mask.ndim == 2\n    output_mask = Image.fromarray(mask)\n    output_mask.putpalette(palette)\n    output_mask.save(path)\n\n\ndef get_per_obj_mask(mask):\n    \"\"\"Split a mask into per-object masks.\"\"\"\n    object_ids = np.unique(mask)\n    object_ids = object_ids[object_ids > 0].tolist()\n    per_obj_mask = {object_id: (mask == object_id) for object_id in object_ids}\n    return per_obj_mask\n\n\ndef put_per_obj_mask(per_obj_mask, height, width):\n    \"\"\"Combine per-object masks into a single mask.\"\"\"\n    mask = np.zeros((height, width), dtype=np.uint8)\n    object_ids = sorted(per_obj_mask)[::-1]\n    for object_id in object_ids:\n        object_mask = per_obj_mask[object_id]\n        object_mask = object_mask.reshape(height, width)\n        mask[object_mask] = object_id\n    return mask\n\n\ndef load_masks_from_dir(\n    input_mask_dir, video_name, frame_name, per_obj_png_file, allow_missing=False\n):\n    \"\"\"Load masks from a directory as a dict of per-object masks.\"\"\"\n    if not per_obj_png_file:\n        input_mask_path = os.path.join(input_mask_dir, video_name, f\"{frame_name}.png\")\n        if allow_missing and not os.path.exists(input_mask_path):\n            return {}, None\n        input_mask, input_palette = load_ann_png(input_mask_path)\n        per_obj_input_mask = get_per_obj_mask(input_mask)\n    else:\n        per_obj_input_mask = {}\n        input_palette = None\n        # each object is a directory in \"{object_id:%03d}\" format\n        for object_name in os.listdir(os.path.join(input_mask_dir, video_name)):\n            object_id = int(object_name)\n            input_mask_path = os.path.join(\n                input_mask_dir, video_name, object_name, f\"{frame_name}.png\"\n            )\n            if allow_missing and not os.path.exists(input_mask_path):\n                continue\n            input_mask, input_palette = load_ann_png(input_mask_path)\n            per_obj_input_mask[object_id] = input_mask > 0\n\n    return per_obj_input_mask, input_palette\n\n\ndef save_masks_to_dir(\n    output_mask_dir,\n    video_name,\n    frame_name,\n    per_obj_output_mask,\n    height,\n    width,\n    per_obj_png_file,\n    output_palette,\n):\n    \"\"\"Save masks to a directory as PNG files.\"\"\"\n    os.makedirs(os.path.join(output_mask_dir, video_name), exist_ok=True)\n    if not per_obj_png_file:\n        output_mask = put_per_obj_mask(per_obj_output_mask, height, width)\n        output_mask_path = os.path.join(\n            output_mask_dir, video_name, f\"{frame_name}.png\"\n        )\n        save_ann_png(output_mask_path, output_mask, output_palette)\n    else:\n        for object_id, object_mask in per_obj_output_mask.items():\n            object_name = f\"{object_id:03d}\"\n            os.makedirs(\n                os.path.join(output_mask_dir, video_name, object_name),\n                exist_ok=True,\n            )\n            output_mask = object_mask.reshape(height, width).astype(np.uint8)\n            output_mask_path = os.path.join(\n                output_mask_dir, video_name, object_name, f\"{frame_name}.png\"\n            )\n            save_ann_png(output_mask_path, output_mask, output_palette)\n\n\n@torch.inference_mode()\n@torch.autocast(device_type=\"cuda\", dtype=torch.bfloat16)\ndef vos_inference(\n    predictor,\n    base_video_dir,\n    input_mask_dir,\n    output_mask_dir,\n    video_name,\n    score_thresh=0.0,\n    use_all_masks=False,\n    per_obj_png_file=False,\n):\n    \"\"\"Run VOS inference on a single video with the given predictor.\"\"\"\n    # load the video frames and initialize the inference state on this video\n    video_dir = os.path.join(base_video_dir, video_name)\n    frame_names = [\n        os.path.splitext(p)[0]\n        for p in os.listdir(video_dir)\n        if os.path.splitext(p)[-1] in [\".jpg\", \".jpeg\", \".JPG\", \".JPEG\"]\n    ]\n    frame_names.sort(key=lambda p: int(os.path.splitext(p)[0]))\n    inference_state = predictor.init_state(\n        video_path=video_dir, async_loading_frames=False\n    )\n    height = inference_state[\"video_height\"]\n    width = inference_state[\"video_width\"]\n    input_palette = None\n\n    # fetch mask inputs from input_mask_dir (either only mask for the first frame, or all available masks)\n    if not use_all_masks:\n        # use only the first video's ground-truth mask as the input mask\n        input_frame_inds = [0]\n    else:\n        # use all mask files available in the input_mask_dir as the input masks\n        if not per_obj_png_file:\n            input_frame_inds = [\n                idx\n                for idx, name in enumerate(frame_names)\n                if os.path.exists(\n                    os.path.join(input_mask_dir, video_name, f\"{name}.png\")\n                )\n            ]\n        else:\n            input_frame_inds = [\n                idx\n                for object_name in os.listdir(os.path.join(input_mask_dir, video_name))\n                for idx, name in enumerate(frame_names)\n                if os.path.exists(\n                    os.path.join(input_mask_dir, video_name, object_name, f\"{name}.png\")\n                )\n            ]\n        # check and make sure we got at least one input frame\n        if len(input_frame_inds) == 0:\n            raise RuntimeError(\n                f\"In {video_name=}, got no input masks in {input_mask_dir=}. \"\n                \"Please make sure the input masks are available in the correct format.\"\n            )\n        input_frame_inds = sorted(set(input_frame_inds))\n\n    # add those input masks to SAM 2 inference state before propagation\n    object_ids_set = None\n    for input_frame_idx in input_frame_inds:\n        try:\n            per_obj_input_mask, input_palette = load_masks_from_dir(\n                input_mask_dir=input_mask_dir,\n                video_name=video_name,\n                frame_name=frame_names[input_frame_idx],\n                per_obj_png_file=per_obj_png_file,\n            )\n        except FileNotFoundError as e:\n            raise RuntimeError(\n                f\"In {video_name=}, failed to load input mask for frame {input_frame_idx=}. \"\n                \"Please add the `--track_object_appearing_later_in_video` flag \"\n                \"for VOS datasets that don't have all objects to track appearing \"\n                \"in the first frame (such as LVOS or YouTube-VOS).\"\n            ) from e\n        # get the list of object ids to track from the first input frame\n        if object_ids_set is None:\n            object_ids_set = set(per_obj_input_mask)\n        for object_id, object_mask in per_obj_input_mask.items():\n            # check and make sure no new object ids appear only in later frames\n            if object_id not in object_ids_set:\n                raise RuntimeError(\n                    f\"In {video_name=}, got a new {object_id=} appearing only in a \"\n                    f\"later {input_frame_idx=} (but not appearing in the first frame). \"\n                    \"Please add the `--track_object_appearing_later_in_video` flag \"\n                    \"for VOS datasets that don't have all objects to track appearing \"\n                    \"in the first frame (such as LVOS or YouTube-VOS).\"\n                )\n            predictor.add_new_mask(\n                inference_state=inference_state,\n                frame_idx=input_frame_idx,\n                obj_id=object_id,\n                mask=object_mask,\n            )\n\n    # check and make sure we have at least one object to track\n    if object_ids_set is None or len(object_ids_set) == 0:\n        raise RuntimeError(\n            f\"In {video_name=}, got no object ids on {input_frame_inds=}. \"\n            \"Please add the `--track_object_appearing_later_in_video` flag \"\n            \"for VOS datasets that don't have all objects to track appearing \"\n            \"in the first frame (such as LVOS or YouTube-VOS).\"\n        )\n    # run propagation throughout the video and collect the results in a dict\n    os.makedirs(os.path.join(output_mask_dir, video_name), exist_ok=True)\n    output_palette = input_palette or DAVIS_PALETTE\n    video_segments = {}  # video_segments contains the per-frame segmentation results\n    for out_frame_idx, out_obj_ids, out_mask_logits in predictor.propagate_in_video(\n        inference_state\n    ):\n        per_obj_output_mask = {\n            out_obj_id: (out_mask_logits[i] > score_thresh).cpu().numpy()\n            for i, out_obj_id in enumerate(out_obj_ids)\n        }\n        video_segments[out_frame_idx] = per_obj_output_mask\n\n    # write the output masks as palette PNG files to output_mask_dir\n    for out_frame_idx, per_obj_output_mask in video_segments.items():\n        save_masks_to_dir(\n            output_mask_dir=output_mask_dir,\n            video_name=video_name,\n            frame_name=frame_names[out_frame_idx],\n            per_obj_output_mask=per_obj_output_mask,\n            height=height,\n            width=width,\n            per_obj_png_file=per_obj_png_file,\n            output_palette=output_palette,\n        )\n\n\n@torch.inference_mode()\n@torch.autocast(device_type=\"cuda\", dtype=torch.bfloat16)\ndef vos_separate_inference_per_object(\n    predictor,\n    base_video_dir,\n    input_mask_dir,\n    output_mask_dir,\n    video_name,\n    score_thresh=0.0,\n    use_all_masks=False,\n    per_obj_png_file=False,\n):\n    \"\"\"\n    Run VOS inference on a single video with the given predictor.\n\n    Unlike `vos_inference`, this function run inference separately for each object\n    in a video, which could be applied to datasets like LVOS or YouTube-VOS that\n    don't have all objects to track appearing in the first frame (i.e. some objects\n    might appear only later in the video).\n    \"\"\"\n    # load the video frames and initialize the inference state on this video\n    video_dir = os.path.join(base_video_dir, video_name)\n    frame_names = [\n        os.path.splitext(p)[0]\n        for p in os.listdir(video_dir)\n        if os.path.splitext(p)[-1] in [\".jpg\", \".jpeg\", \".JPG\", \".JPEG\"]\n    ]\n    frame_names.sort(key=lambda p: int(os.path.splitext(p)[0]))\n    inference_state = predictor.init_state(\n        video_path=video_dir, async_loading_frames=False\n    )\n    height = inference_state[\"video_height\"]\n    width = inference_state[\"video_width\"]\n    input_palette = None\n\n    # collect all the object ids and their input masks\n    inputs_per_object = defaultdict(dict)\n    for idx, name in enumerate(frame_names):\n        if per_obj_png_file or os.path.exists(\n            os.path.join(input_mask_dir, video_name, f\"{name}.png\")\n        ):\n            per_obj_input_mask, input_palette = load_masks_from_dir(\n                input_mask_dir=input_mask_dir,\n                video_name=video_name,\n                frame_name=frame_names[idx],\n                per_obj_png_file=per_obj_png_file,\n                allow_missing=True,\n            )\n            for object_id, object_mask in per_obj_input_mask.items():\n                # skip empty masks\n                if not np.any(object_mask):\n                    continue\n                # if `use_all_masks=False`, we only use the first mask for each object\n                if len(inputs_per_object[object_id]) > 0 and not use_all_masks:\n                    continue\n                print(f\"adding mask from frame {idx} as input for {object_id=}\")\n                inputs_per_object[object_id][idx] = object_mask\n\n    # run inference separately for each object in the video\n    object_ids = sorted(inputs_per_object)\n    output_scores_per_object = defaultdict(dict)\n    for object_id in object_ids:\n        # add those input masks to SAM 2 inference state before propagation\n        input_frame_inds = sorted(inputs_per_object[object_id])\n        predictor.reset_state(inference_state)\n        for input_frame_idx in input_frame_inds:\n            predictor.add_new_mask(\n                inference_state=inference_state,\n                frame_idx=input_frame_idx,\n                obj_id=object_id,\n                mask=inputs_per_object[object_id][input_frame_idx],\n            )\n\n        # run propagation throughout the video and collect the results in a dict\n        for out_frame_idx, _, out_mask_logits in predictor.propagate_in_video(\n            inference_state,\n            start_frame_idx=min(input_frame_inds),\n            reverse=False,\n        ):\n            obj_scores = out_mask_logits.cpu().numpy()\n            output_scores_per_object[object_id][out_frame_idx] = obj_scores\n\n    # post-processing: consolidate the per-object scores into per-frame masks\n    os.makedirs(os.path.join(output_mask_dir, video_name), exist_ok=True)\n    output_palette = input_palette or DAVIS_PALETTE\n    video_segments = {}  # video_segments contains the per-frame segmentation results\n    for frame_idx in range(len(frame_names)):\n        scores = torch.full(\n            size=(len(object_ids), 1, height, width),\n            fill_value=-1024.0,\n            dtype=torch.float32,\n        )\n        for i, object_id in enumerate(object_ids):\n            if frame_idx in output_scores_per_object[object_id]:\n                scores[i] = torch.from_numpy(\n                    output_scores_per_object[object_id][frame_idx]\n                )\n\n        if not per_obj_png_file:\n            scores = predictor._apply_non_overlapping_constraints(scores)\n        per_obj_output_mask = {\n            object_id: (scores[i] > score_thresh).cpu().numpy()\n            for i, object_id in enumerate(object_ids)\n        }\n        video_segments[frame_idx] = per_obj_output_mask\n\n    # write the output masks as palette PNG files to output_mask_dir\n    for frame_idx, per_obj_output_mask in video_segments.items():\n        save_masks_to_dir(\n            output_mask_dir=output_mask_dir,\n            video_name=video_name,\n            frame_name=frame_names[frame_idx],\n            per_obj_output_mask=per_obj_output_mask,\n            height=height,\n            width=width,\n            per_obj_png_file=per_obj_png_file,\n            output_palette=output_palette,\n        )\n\n\ndef main():\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\n        \"--sam2_cfg\",\n        type=str,\n        default=\"configs/sam2.1/sam2.1_hiera_b+.yaml\",\n        help=\"SAM 2 model configuration file\",\n    )\n    parser.add_argument(\n        \"--sam2_checkpoint\",\n        type=str,\n        default=\"./checkpoints/sam2.1_hiera_b+.pt\",\n        help=\"path to the SAM 2 model checkpoint\",\n    )\n    parser.add_argument(\n        \"--base_video_dir\",\n        type=str,\n        required=True,\n        help=\"directory containing videos (as JPEG files) to run VOS prediction on\",\n    )\n    parser.add_argument(\n        \"--input_mask_dir\",\n        type=str,\n        required=True,\n        help=\"directory containing input masks (as PNG files) of each video\",\n    )\n    parser.add_argument(\n        \"--video_list_file\",\n        type=str,\n        default=None,\n        help=\"text file containing the list of video names to run VOS prediction on\",\n    )\n    parser.add_argument(\n        \"--output_mask_dir\",\n        type=str,\n        required=True,\n        help=\"directory to save the output masks (as PNG files)\",\n    )\n    parser.add_argument(\n        \"--score_thresh\",\n        type=float,\n        default=0.0,\n        help=\"threshold for the output mask logits (default: 0.0)\",\n    )\n    parser.add_argument(\n        \"--use_all_masks\",\n        action=\"store_true\",\n        help=\"whether to use all available PNG files in input_mask_dir \"\n        \"(default without this flag: just the first PNG file as input to the SAM 2 model; \"\n        \"usually we don't need this flag, since semi-supervised VOS evaluation usually takes input from the first frame only)\",\n    )\n    parser.add_argument(\n        \"--per_obj_png_file\",\n        action=\"store_true\",\n        help=\"whether use separate per-object PNG files for input and output masks \"\n        \"(default without this flag: all object masks are packed into a single PNG file on each frame following DAVIS format; \"\n        \"note that the SA-V dataset stores each object mask as an individual PNG file and requires this flag)\",\n    )\n    parser.add_argument(\n        \"--apply_postprocessing\",\n        action=\"store_true\",\n        help=\"whether to apply postprocessing (e.g. hole-filling) to the output masks \"\n        \"(we don't apply such post-processing in the SAM 2 model evaluation)\",\n    )\n    parser.add_argument(\n        \"--track_object_appearing_later_in_video\",\n        action=\"store_true\",\n        help=\"whether to track objects that appear later in the video (i.e. not on the first frame; \"\n        \"some VOS datasets like LVOS or YouTube-VOS don't have all objects appearing in the first frame)\",\n    )\n    args = parser.parse_args()\n\n    # if we use per-object PNG files, they could possibly overlap in inputs and outputs\n    hydra_overrides_extra = [\n        \"++model.non_overlap_masks=\" + (\"false\" if args.per_obj_png_file else \"true\")\n    ]\n    predictor = build_sam2_video_predictor(\n        config_file=args.sam2_cfg,\n        ckpt_path=args.sam2_checkpoint,\n        apply_postprocessing=args.apply_postprocessing,\n        hydra_overrides_extra=hydra_overrides_extra,\n    )\n\n    if args.use_all_masks:\n        print(\"using all available masks in input_mask_dir as input to the SAM 2 model\")\n    else:\n        print(\n            \"using only the first frame's mask in input_mask_dir as input to the SAM 2 model\"\n        )\n    # if a video list file is provided, read the video names from the file\n    # (otherwise, we use all subdirectories in base_video_dir)\n    if args.video_list_file is not None:\n        with open(args.video_list_file, \"r\") as f:\n            video_names = [v.strip() for v in f.readlines()]\n    else:\n        video_names = [\n            p\n            for p in os.listdir(args.base_video_dir)\n            if os.path.isdir(os.path.join(args.base_video_dir, p))\n        ]\n    print(f\"running VOS prediction on {len(video_names)} videos:\\n{video_names}\")\n\n    for n_video, video_name in enumerate(video_names):\n        print(f\"\\n{n_video + 1}/{len(video_names)} - running on {video_name}\")\n        if not args.track_object_appearing_later_in_video:\n            vos_inference(\n                predictor=predictor,\n                base_video_dir=args.base_video_dir,\n                input_mask_dir=args.input_mask_dir,\n                output_mask_dir=args.output_mask_dir,\n                video_name=video_name,\n                score_thresh=args.score_thresh,\n                use_all_masks=args.use_all_masks,\n                per_obj_png_file=args.per_obj_png_file,\n            )\n        else:\n            vos_separate_inference_per_object(\n                predictor=predictor,\n                base_video_dir=args.base_video_dir,\n                input_mask_dir=args.input_mask_dir,\n                output_mask_dir=args.output_mask_dir,\n                video_name=video_name,\n                score_thresh=args.score_thresh,\n                use_all_masks=args.use_all_masks,\n                per_obj_png_file=args.per_obj_png_file,\n            )\n\n    print(\n        f\"completed VOS prediction on {len(video_names)} videos -- \"\n        f\"output masks saved to {args.output_mask_dir}\"\n    )\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/README.md",
    "content": "# Training Code for SAM 2\n\nThis folder contains the training code for SAM 2, a foundation model for promptable visual segmentation in images and videos. \nThe code allows users to train and fine-tune SAM 2 on their own datasets (image, video, or both).\n\n## Structure\n\nThe training code is organized into the following subfolders:\n\n* `dataset`: This folder contains image and video dataset and dataloader classes as well as their transforms.\n* `model`: This folder contains the main model class (`SAM2Train`) for training/fine-tuning. `SAM2Train` inherits from `SAM2Base` model and provides functions to enable training or fine-tuning SAM 2. It also accepts all training-time parameters used for simulating user prompts (e.g. iterative point sampling).\n* `utils`: This folder contains training utils such as loggers and distributed training utils.\n* `scripts`: This folder contains the script to extract the frames of SA-V dataset to be used in training.\n* `loss_fns.py`: This file has the main loss class (`MultiStepMultiMasksAndIous`) used for training.\n* `optimizer.py`:  This file contains all optimizer utils that support arbitrary schedulers.\n* `trainer.py`: This file contains the `Trainer` class that accepts all the `Hydra` configurable modules (model, optimizer, datasets, etc..) and implements the main train/eval loop.\n* `train.py`: This script is used to launch training jobs. It supports single and multi-node jobs. For usage, please check the [Getting Started](README.md#getting-started) section or run `python training/train.py -h`\n\n## Getting Started\n\nTo get started with the training code, we provide a simple example to fine-tune our checkpoints on [MOSE](https://henghuiding.github.io/MOSE/) dataset, which can be extended to your custom datasets.\n\n#### Requirements:\n- We assume training on A100 GPUs with **80 GB** of memory.\n- Download the MOSE dataset using one of the provided links from [here](https://github.com/henghuiding/MOSE-api?tab=readme-ov-file#download).\n\n#### Steps to fine-tune on MOSE:\n- Install the packages required for training by running `pip install -e \".[dev]\"`.\n- Set the paths for MOSE dataset in `configs/sam2.1_training/sam2.1_hiera_b+_MOSE_finetune.yaml`.\n    ```yaml\n    dataset:\n        # PATHS to Dataset\n        img_folder: null # PATH to MOSE JPEGImages folder\n        gt_folder: null # PATH to MOSE Annotations folder\n        file_list_txt: null # Optional PATH to filelist containing a subset of videos to be used for training\n    ```\n- To fine-tune the base model on MOSE using 8 GPUs, run \n\n    ```python\n    python training/train.py \\\n        -c configs/sam2.1_training/sam2.1_hiera_b+_MOSE_finetune.yaml \\\n        --use-cluster 0 \\\n        --num-gpus 8\n    ```\n\n    We also support multi-node training on a cluster using [SLURM](https://slurm.schedmd.com/documentation.html), for example, you can train on 2 nodes by running\n\n    ```python\n    python training/train.py \\\n        -c configs/sam2.1_training/sam2.1_hiera_b+_MOSE_finetune.yaml \\\n        --use-cluster 1 \\\n        --num-gpus 8 \\\n        --num-nodes 2\n        --partition $PARTITION \\\n        --qos $QOS \\\n        --account $ACCOUNT\n    ```\n    where partition, qos, and account are optional and depend on your SLURM configuration.\n    By default, the checkpoint and logs will be saved under `sam2_logs` directory in the root of the repo. Alternatively, you can set the experiment log directory in the config file as follows:\n  \n    ```yaml\n      experiment_log_dir: null # Path to log directory, defaults to ./sam2_logs/${config_name}\n    ```\n    The training losses can be monitored using `tensorboard` logs stored under `tensorboard/` in the experiment log directory. We also provide a sample validation [split]( ../training/assets/MOSE_sample_val_list.txt) for evaluation purposes. To generate predictions, follow this [guide](../tools/README.md) on how to use our `vos_inference.py` script. After generating the predictions, you can run the `sav_evaluator.py` as detailed [here](../sav_dataset/README.md#sa-v-val-and-test-evaluation). The expected MOSE J&F after fine-tuning the Base plus model is 79.4.\n    \n    \n    After training/fine-tuning, you can then use the new checkpoint (saved in `checkpoints/` in the experiment log directory) similar to SAM 2 released checkpoints (as illustrated [here](../README.md#image-prediction)).\n## Training on images and videos\nThe code supports training on images and videos (similar to how SAM 2 is trained). We provide classes for loading SA-1B as a sample image dataset, SA-V as a sample video dataset, as well as any DAVIS-style video dataset (e.g. MOSE). Note that to train on SA-V, you must first extract all videos to JPEG frames using the provided extraction [script](./scripts/sav_frame_extraction_submitit.py). Below is an example of how to setup the datasets in your config to train on a mix of image and video datasets:\n\n```yaml\ndata:\n  train:\n    _target_: training.dataset.sam2_datasets.TorchTrainMixedDataset \n    phases_per_epoch: ${phases_per_epoch} # Chunks a single epoch into smaller phases\n    batch_sizes: # List of batch sizes corresponding to each dataset\n    - ${bs1} # Batch size of dataset 1\n    - ${bs2} # Batch size of dataset 2\n    datasets:\n    # SA1B as an example of an image dataset\n    - _target_: training.dataset.vos_dataset.VOSDataset\n      training: true\n      video_dataset:\n        _target_: training.dataset.vos_raw_dataset.SA1BRawDataset\n        img_folder: ${path_to_img_folder}\n        gt_folder: ${path_to_gt_folder}\n        file_list_txt: ${path_to_train_filelist} # Optional\n      sampler:\n        _target_: training.dataset.vos_sampler.RandomUniformSampler\n        num_frames: 1\n        max_num_objects: ${max_num_objects_per_image}\n      transforms: ${image_transforms}\n    # SA-V as an example of a video dataset\n    - _target_: training.dataset.vos_dataset.VOSDataset\n      training: true\n      video_dataset:\n        _target_: training.dataset.vos_raw_dataset.JSONRawDataset\n        img_folder: ${path_to_img_folder}\n        gt_folder: ${path_to_gt_folder}\n        file_list_txt: ${path_to_train_filelist} # Optional\n        ann_every: 4\n      sampler:\n        _target_: training.dataset.vos_sampler.RandomUniformSampler\n        num_frames: 8 # Number of frames per video\n        max_num_objects: ${max_num_objects_per_video}\n        reverse_time_prob: ${reverse_time_prob} # probability to reverse video\n      transforms: ${video_transforms}\n    shuffle: True\n    num_workers: ${num_train_workers}\n    pin_memory: True\n    drop_last: True\n    collate_fn:\n    _target_: training.utils.data_utils.collate_fn\n    _partial_: true\n    dict_key: all\n```\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/assets/MOSE_sample_train_list.txt",
    "content": "28191f94\n662487fe\n80906bf9\n7e704f2e\nefa25913\nb6f03bd9\n6834d249\n5a723c30\n07779415\n4ce088c6\n199995b5\n54273925\n4fa342f5\n110da3cf\n65856fa0\n46705bb3\nd869a3cf\n555aa049\n8f01fb2c\n37b07a28\n5e80b3dd\nba0e4dd4\n6f5144b6\nacec8407\n93723f88\nc7c7528c\n97f58761\ne71f9faa\ne64c13dc\n8830d59d\n0e4aeed9\n63437cf3\n95215aa1\n255f86ef\ndc54aab2\n327cd258\n198021ad\nc690220c\nd25ff89d\n7875b874\n4fa6d325\n9fc933f6\n4d8baafe\n55ae6921\n6a3bc149\n89f8163f\n2d65d2ac\ndba172b1\na14de179\n4017d1b3\n52ddf44c\n3ba93641\n34a5f964\nda7dee28\n872b76de\n1dc12eca\n265a69f4\n86a2b59f\n51e5ca25\nddf80bcd\n6786602e\n4fa28c89\nf56942e9\n2184bb93\nd883e976\nbfe1469e\nbc4e7b11\n1c80acb0\n2b0e34d3\n56b9ce41\n15f0b0cd\ncc5d0dd1\n1b7eada8\n7286b176\n0ab42ab1\nadb82dc9\nc060b1e6\n3da63bd5\n5488796e\nd7066e20\naab5ed11\n17f66311\n24df9789\n208fa934\n7ce2c865\ndebe4249\n4c56bbea\n149dbae2\nbeb693c9\n49eb0315\ne7ad4717\n4e016d5a\n95e24093\n07b5d86c\n80701b6c\n337dfa1e\nb624a46e\n3f849de8\n5db21df2\n47891b4c\na966d7fd\n013103f6\nda5e4bc5\nba9ea03d\n526195de\n57f3a53e\nb3aff7f8\n26048547\nbb7ee856\naef0d049\ne35a8262\n57ad022e\nf45d3823\ne5e9eb29\n39cc637e\na4fc4f17\ndd5a4739\nbbe97d18\n33602f6b\n9061dac9\n23454d80\na20baeec\n794f01d4\n02de2f2a\n055fca57\na69df343\ne307510e\nd07ad1be\n1fc5e086\ndb6533a5\nfe9706b7\n87e32230\n8ba58e4c\n561f6380\n2ab9ba0f\n86571569\n756cc6c9\naa185af5\nc6d7f94b\n7f54c579\n71f4b40e\n4190c83a\nfef0aba4\n2f7c71bb\ne4b6f2ef\n76adaeea\n11cdeb64\n733f2a02\ne50dbddb\nf643141f\nd2e75e95\n84559bc3\n7ade3068\ne69db797\n0b787263\n57895315\nd7969c29\n62529cd4\n203733e7\n48fd97a6\n723fd024\n849f0efb\naafea009\ndd4eb8f1\nd18554ae\nf3c0f0cf\n90fe55b9\nb0ffaf3b\ne79ecd47\nd670ce7b\n56a5643a\n90ff1d09\n1fb378d9\n57014c7d\n994ed763\n5bc7ea74\ne99bd793\ncbb66185\n5f3fcff6\n05ed1023\n85efa9e3\n652929ce\n905d8740\na6fcde01\n0fdf67f7\na5cf4c8d\ne1c48bdd\n782551f7\n6acd353f\nc30641cf\n81d12756\n51befc31\n9d5ab5ca\nd262b7e4\n2cd705a9\nf7360199\nd3f3bf9d\n028f6f64\n94767cb4\n3a739934\n72433603\nec66879d\n6149becc\n5845c157\nc5082b3c\nf89b54d0\nf3ada126\n409dcb8a\n4411fdee\neb93ed20\n9cb1ba0e\nb8e1ec26\n7edd8b4f\n5e9412c0\n2744f35a\ndafeb75e\nf3f072f2\n6f1df574\n5a064706\n89c76ac4\na6adef89\n76303516\ndbd67417\na53ef3fa\n10552818\nac7deb19\n2d403c59\n55c157f1\n214aeac3\na9f5e251\nd7807996\nd1dba33b\n1367e367\n44476e77\n0644075b\neda37457\nf2de4198\n9a4ce701\n46e00caf\n2ae75f99\ncd49fb99\n4e4483e7\na0669957\na6f0d882\n9ce1d54a\n1fc2314b\n21f363b3\n32ecef67\n70bcaf68\n115348f9\n60827ada\na218e951\n6d30d5ac\n6da17988\nf22c39ce\n5825f0e0\nf415f9ad\n0d4feda2\n832fc243\n414ca58b\na92390a0\nddd383cc\n43dc67f7\n962ae0e2\n6dd74e7b\n2bcd6c3b\nb394847f\n637fd121\nd46e771b\nf6bfc699\n63f138de\n932ad0a6\n2080824a\n52fa9174\n843d3bf7\nf3431885\n5c20c48a\n134a2ab0\n2ea465de\nf6786ab5\n2bf49664\na49ce97b\n6a50e93a\na7c21e95\n616ad8ec\n0a8d7b41\nb0c90527\n2d893fb7\n19310598\n7744dc51\n4539b907\n9d299f60\ne495537a\n0b02886a\nf4c4a2ca\ne957b2b5\ne6f3bf07\n258944c8\n54364322\nebb77f95\n0af03282\ncbdbc6c3\n494ecef0\nee91f783\n9698f06e\n11e16068\nb942ce0a\n423a50e6\nfb16e746\n9c88ae45\n8620c024\nd3af3c85\n780a25de\ne569a15f\nc4f9f19e\n1106f3a7\nd37e29a7\ne53611da\nfdb2e432\n18ad3117\n6fcd426d\n3bfa8379\n3b19c5c3\nff1142df\ncd182615\nb60ea255\nb3f5d019\n6dc5e55d\n103166c7\n37af9ac1\nad1881d1\n731149b3\n90e3338a\n6aa0b6f2\na25316a3\ndc8679e0\n571fb490\n80afed16\n983a551b\na58578e5\n2bc0bba4\n1143b3fe\nfdd8dd49\n7fe2bf77\n890ef032\n8466eeb2\nc791ddbb\n631b82bd\n78bf9b51\na99df45f\n2bdb692f\ne89b1501\n4e6aa1e8\ne5665030\nfe21fd5c\n635577d5\n4414cd3a\n03c99e83\nff041cd1\nc33adbc2\na988ec74\n576031e0\n03c21af7\n79b25f4b\nbbc485d6\nd36d5a0d\nefdab888\nb20e6781\n81fdc526\ne1c26a53\n7c6d3504\n52a04667\nf22e34d4\nbb936ead\n13f0606c\nd2abc61e\naf509e8f\nbea1c144\ne15e4de8\ne727099f\nb30744df\nffb6a2e4\n0d31d3a6\na23048fe\n7d452630\n6c736334\n046ed4f4\n94f4c2aa\nc290cfd3\nf7203226\n2fdae3c5\n7c78e351\n02b72b8d\n2d22d3be\nba28d02e\n197f6587\n43199a98\nb563b04f\n9293b755\n9cef7489\nd156b96f\n15e9161e\n6d094cd5\n0d876a65\nc818d30a\n8094b12b\na4a8e24b\n14655f54\n11c14893\n8a48f62a\n7f3d9c22\nd952481c\n03e0f9b8\n28980657\n6a0b5563\n5879983c\n37549a79\n4a7162bd\n7a6aa1ef\n0dc1b78c\nf6dba17b\n1dba51af\nb2f4d608\ne2e6f421\n464066da\n5d24e4ea\n1e75004d\na02ed92c\n673adbcc\nc2a0c0fd\n85addee5\n54b8f502\nf5d2d8d3\na19507e1\n803e1756\n0d1fe009\n5968c2d8\nb926e1ad\na9162e14\nae470d2b\nbd731802\n68c879f2\n21fe05d9\nc1ed21d0\n831498e4\ncc45a7f2\ncb170015\n59750be4\n30d1cb6b\n03e5f069\n106d33db\n3f003746\n3e5ad020\n8bc5a91c\n64b89eb5\nbfd28682\nf8687b9a\n7bbf38ee\nd6d92b30\nceaa6c65\n677c8ed7\ndc33acf8\ncfd1de31\ne5be4781\n85585220\n5d2316f6\ndd3f4a07\n34535f5f\n3ae0bc5d\nf521e3c5\n74c2284f\n12a42fd9\n61403519\n88cd32f3\n662a1846\n825a1944\ncf376cf1\n8465d99c\n61a2e246\n62d44645\n103b3ca8\nc7e745ed\n4ed71139\n230c2edf\n529c6889\n9e509c0d\n54b9dea2\na8934c0d\n29cffe2f\n48017512\nc9f7f69d\nce691ee6\n21c89360\n3b97c07b\nebd82d35\n2895bb8b\n7043c5c1\n85d694d7\n88fd7507\n18d8931e\naa718745\n89b671bb\n0d8d30ae\n26163977\na6121689\n1589579d\n159789c4\nf5ca8271\nfcc16740\n3158be0b\n860fc1f7\n3f54a330\n82f24ce7\n069f6a2a\n2fa9c523\nc9f1d87f\nefe9cbca\n8f969ea5\n4f5db794\n62c501f8\n2d3b0320\nc99637f0\n0f3b1fcb\n6e4ee861\ne0d9aff0\n230ddb91\ne14d1f96\nc83aa6a1\neabdf66a\n6783a303\n81659eb2\nce954bd7\n9a48c0c9\n0ab807b4\nf0617f71\nfe86f2f8\n61d80e22\ne4b6d2a0\nac093040\n0e05fabe\nd0b507c3\n3d828137\nc4fa0bab\nf7783321\nec27366a\n404e4c58\n073baf48\n0f685e01\nb0e98fdd\nb4891f7f\na46b7b77\nee059f99\n3c87888e\n8d23ddcc\n2d8d7d35\n5680be79\nfc79c03e\n20660b72\n53f67585\n90956534\n7e709e2d\ndae93f5c\n54b9dbba\ncc41ba05\n1e207fe0\na9c6abf2\n35e0ca09\ne3dcd186\n1b8bb699\n92162474\ncdad6812\n50b91533\n570215ac\n6042d64a\nb6e2c041\n08746283\n7a056996\nb8651773\nadf443e1\n6a6e0e3b\n886ed981\nc1d57fea\n43030c4c\n7ebfbf57\n0770ad03\ne85301d5\n31ac3d98\nacaef45e\n8f415dd1\nfe2dc281\n2c0b9d99\n8e24501e\n911ec4ad\n8036b58e\nc3b350b9\nb6cadd11\na3a80cf7\n88ab50cd\n59c755a8\n1339321a\n91b2f707\n97b0811e\n1da33959\n31b09833\nc1a40349\n708098a9\n1f220f98\n999e07cb\n0b5e5d29\n94c63453\nb826d642\na598602d\n4c83eab8\n2efd5e50\n6ec5da3a\n9fcd95eb\n9a2c6b5b\nc205a718\ne638e950\ncb43141c\n494dd91d\nc4957274\n4975a81d\na1f4c54d\n51e6fafa\n514490e5\nb0d09e6a\nc6726eb8\n06772c9a\n5a65ffd7\n3657c62b\n03012cfd\n529df209\nf1c38e66\nab417352\n118a067e\n8957514f\n22e8b380\n3b1a4616\na4457543\n57c9f6e0\ne362c16b\n0f809e41\n857e375e\n9cff25e3\nd754fb65\n6ad44b86\n051052d8\na4564b94\nf68507d0\n80a7cf7b\nad8cd1e0\n60b19cd3\n274fe944\nf06632aa\n628a337b\n92c96c05\n87fc565c\n6f6e6c37\n228a0234\n6487110a\naa911a8e\n40c47fa3\n9606508b\n6ba9e61f\nc8c1d5a9\ncf01df5b\n9421b9ad\n006e6b64\n1c28e081\n06273084\n8925e11b\nb46c822b\n00501424\ncfd946b2\n2e92a7dc\n1c5f5bb6\n1d29944c\n8248698e\n19247506\n1eac1aff\nee9caa47\n4a41cbf8\nd97c9309\n4ca87c14\n9707f1e3\n8bb9a221\n6605e67d\n95cf72d7\n1c6fb814\n033130b2\n4344808d\n5f14e5d2\na810399b\ne325a6d4\n7014ddf4\n725d4bfb\n790285e8\n1a6a731f\nfbfb6e30\n0d4d88f6\n80ce18a4\n572495b7\n4b44dc50\n95dce33c\n4a6fb202\n3142014e\na3c56751\n96b2a414\nc4aa176c\nfd1e394f\n93f0f509\nf494e9fa\nbfa42a75\ndb5319c7\naa92e070\n81220a93\ne4a72496\nfc467bf1\n5397b01d\n1dc0c9a0\nf6f8b4a6\n53dc7db4\n8ef303eb\n62ca45c9\ne9d3465e\n3784e3f6\n8c934e67\n5ba84e3f\n30e41f1e\n61cf0ec8\ne93e8f01\nfc6086dd\na95f0aea\n33a04ef2\n6f295adb\nd2aa8c66\n724cc810\nd8623d26\n8d0d641a\n4bda7a76\n38030c69\n56199c41\nd2f4b9e2\na7b8ac96\n64044df1\nfd1078cc\n0165667b\n16e1cca7\n915f0d9a\neeaaa67e\n378430d5\na84c60e6\nb4ae36cc\n2a3a0571\n13e6df75\naa348c45\n59d7a11d\n68954daf\nd6f883c6\nf28b429a\n32dc49d4\nccf14ee0\n7d512591\n9bdabdb2\ned878d94\n54eda06d\n132561ee\n3c4b6736\n0367af42\n531c1c36\n843d8f25\n333bdbdc\nc3c21268\n07b00746\nc7fe0584\n49fc9f2e\n9ed4317a\nd29991b4\n98b0033d\nf0b922bf\n89fe6899\n58264713\n2f49220a\n6ff85ca5\n4b96b2c8\na42f54f5\naa425600\n22fdee40\ndde85a9d\n3722f6fe\ne7529cbc\n5ae23f9f\ncc32235b\n730bc486\nb12701b7\na96b3010\n16130bd3\n2c713560\nf7935d24\na7eb6616\n0d6e7177\n100edaef\n0442a954\n60f4fa43\n37bf7edf\n76b18413\nab0646a9\nc575434d\n1e356390\n5416fbb7\ndf7cf932\n269872de\n9033b607\nc2e88575\n932542cd\n23e046fb\n3d08dadd\n7999adc5\ned81c485\n3bd7facd\n1feae28e\n8d72533b\n6a8d35d6\n65308bdc\n7f0b7662\n98290486\nfee3371f\nc463c7e5\nfaf7d852\n75c34dc5\n96a6722e\ne5605136\n851bc5d9\n15c41c4b\n6a39e104\n5fbff256\n0e7001dd\n5411113f\n3ea2f7f2\n242b74b1\n87727003\nec6dd0e9\n980baf58\n9d0b7bf1\n9113c9d4\n5ebef6bd\na5f70ce7\nb0240233\n06ad78e0\n8745edd0\nd8e8d984\nac32a655\n38568758\nd48c552d\n0b27d5f7\nc65d0736\n800e3c14\nd37a5857\nbcebc660\nd3ab52cc\n405e3ee7\ne33cddc9\nb0197182\n89fd5681\n9e192417\n8554c402\naae923b8\n31af515d\n75b26f88\n60471744\n460945aa\nc0fe8e1a\n1731babb\n2e85e35d\nf9c20062\n115da184\nddfa88c7\n359003f8\ndfa99126\nbf04814f\nf407a414\ne18723c4\n0a7a3629\nc07ab37e\n1251a1c9\n4d09d22a\n5984ed74\n34504f63\nced51047\n08ff419c\nd942e98c\n2697f864\n3b671a61\n72a2f7e2\n48e7cafe\n6adad2f7\n18840617\n1e44f47e\n36cc4055\n8c494902\n2982de7a\n6a428397\nc4a0ecfb\n231d6945\nfe470104\nf93e1bd0\nbd18bc5a\n7bd70d93\n8f81a0ee\ndb78e7a1\n7593caea\n86d5b29b\n5457b298\n0d967fd1\n62372d4c\n68259db3\nf0944ea2\n7b017dbf\nbcb6e338\n03692b14\nf7d36a47\n1ca2531a\n6728528d\n1fc0e6a8\n0ba9c5ad\na386eaa2\nb0c5459f\n1d64aff3\nb97d4f1a\nb3745d91\nc461003e\n910bf878\nae42601c\n8d2ddeff\naaecaa39\n250b5034\nedb11192\n7bfe9b57\n6d533759\n51586b36\na38d648a\n8fdb48e5\n6075d6b0\n3588ea03\nbc844942\n398d41f5\n660e3b70\n0b99f522\nf169fd1b\n7bfa2ab5\nab461319\n25153e58\n002b4dce\na2df1bee\n550a7357\nb604f2dd\n2f477d05\nbdf9eb5a\n857ddc6e\nc8f0fd41\n6df96f15\ne147ab26\n788da8e8\n02221fb0\nd1d95c61\na3f0cb28\n3a6e6ace\n67c2909a\n220382ab\neaed776d\naff08a61\nb99d1bd6\n9d9ae988\n34ccea00\n41dae436\n18513251\nad57acd1\n67f110fc\n3f09f5c9\n25ef7d43\n12a5d0d7\n3ff48b8b\n26ed56e6\nc047a092\nbb8639e1\n8788747f\n584838d4\nf8e5f837\n657242e8\ncb8eedf4\n74a917f1\n578f71da\nc9b27125\n22e1f53c\nf40145c2\n4795259b\n3f313a2f\nc9012bf6\n22167a50\n6e7f9437\nef51a724\n356e0fcb\nd3ea999d\n08a5c662\n85aa3b0e\n579fadec\n7bc95dc2\nc097af8e\nf01d8b9f\n80fb79c6\nea65e6b7\n29ff29f6\n9e1f739d\nb7fb59c9\ne2160f17\n0be33bc1\ne96b9b04\nb1affe79\nc4f4b2e2\nf4c8ffb1\n6a009e50\na8828854\n2786f841\na64e724c\n5f54d077\n7040385d\n6e0f0ecc\nf33d3c15\n8108b358\n46a502de\n1e0fb02a\nddbdfa32\ne7b34ab6\nc9080ed1\n395224b3\n33f9ab47\nc245ecda\nc28d81a9\n37303a3b\n6380dd6f\n2fb5a55b\n83b7c53c\n41c8d0d2\n3aab2d13\ndc7d21fb\n86a88668\n37bb38fe\nab6413a8\nbbe585b2\na0ca072a\n9d5940d2\nddb1d0b1\na946317a\n988b29a4\n89dc0432\n5df8490d\n5e167efa\n50a86faa\nfe6a535a\na9f8b8b4\n6e2dce1b\nd0696759\nc09da3b2\nf07dd347\n67408899\n406165ff\na4a9d03d\n9b5f0f47\n5f3e8022\n1d7a23e0\n25af2eeb\n82a3db34\nc9351029\n6c93d44c\nf088ad1c\n9ee59f51\nb5276b3f\nca74a924\n781af187\nfa3e0b85\nb898c99e\n1ca51f06\n5a92a0c1\n138c81fe\nd0722d0f\n05a7d84d\ne18f1dea\n799a2d61\n8276e558\nf0ba8748\nce733e8a\n2f9d0911\n58f24fa4\n66a25278\n3135d31d\n4b9223ee\nbdd5e6b3\nddbebec1\n8dbebbd9\n3020b38f\ne607450d\n724a5d1c\n91b754c5\n2e85e790\n3a407bd9\nfd137178\na304029b\n4023fc77\n440d5072\n2eb73c7c\n164a7305\nb33ade7c\n277ad883\nb0f7e75c\n74107936\n83924bdb\nb72beb78\n86c01d64\nf6f441eb\n23b9a3ea\n80b73f1a\n93c6411d\n1e95ef5e\n800b5eac\n9519832a\nae043406\nb06a902e\n1dbca5cc\n571f88a1\nb1faf52b\n45572497\n8d016cdb\nf92cdae8\n316931f8\nf9884439\ne1b7f212\ne23c6392\nccfae073\n5aa1efda\n74f0687c\neaff3301\nb6520a94\nc5398714\n15e7e4d1\n0fc00006\n8cf49218\n3a8ddc0a\ne7e2a0b9\neec4c008\n8d73085e\n77e246da\n00e92ab4\nf76f6cf9\n19801183\n233406ef\nb80e028c\n342c0b2a\na2768c47\n99350a74\nadbd400b\nf3978ade\nb87a4f6c\nfa95a6a2\n6dff20c9\n935b5ad8\ndbbbb401\n1b6472c1\n9c0e6331\n04ae7a6b\n4c94e4f3\n90cb46cb\n2831ecf5\nff77a145\n79af6097\nba61a719\nabcb7665\n7e87750e\nc4c7bc5d\n3a670b81\n3d9a7023\n82667d52\na4587f62\nca619b7f\n7c5462f5\nbda5c60d\ne6e48ac8\n405c6000\n7981f344\nf7375ab3\nbb467ff9\ncfc68a82\ne417a6d8\n1a6177c1\n7b75dace\nb1af350d\n484d48a3\n1f805416\n7416ab4e\n1291276c\n9e85179b\n5a74660c\n7e6d00df\n01e3cec8\nee2c0688\nf6de8226\na217538c\nb432c3ef\n49e5ff4e\n035359e5\n8ae8e7ed\n2da12766\ncac39070\n115adda4\n1a2872dc\nfac3378e\n294e7bf8\na1a4991f\nc062f4d7\n72b2b77d\n158062aa\n9ae447a7\na7b05677\nfdfd5d56\neac1a9e6\na5905593\n59992293\n84298fae\nf708e55f\n093d3d93\n75d26197\n924f5d88\n3184a7ec\nb454fdbc\n2d9101b8\nae70fb7c\n4385b2c4\n63b37343\n0b4b662c\n2883ae72\nffcab778\n0f96e2d7\n897066e3\nf23e98ad\n797a7b7e\n2fc476f9\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/assets/MOSE_sample_val_list.txt",
    "content": "32e5d721\n5bad0bab\n267bfd6c\n0a43a414\n56c56ca9\n9a1146b3\nc6ad7aaf\n78a1f4b1\nfc455e73\n072e7b3f\n77ccb57d\na76ee415\n8cdcfc17\n5d518b42\n376dd830\n0e843fc8\n2af0e766\n2bd4e845\nde2f2a6a\nade9ee91\n001ca3cb\nfc4c1c67\n8ef55579\nb84ce852\n4cc8528a\n767ffaaa\n112a2ef0\na338c8aa\ncbd144f5\n5ff72128\n86a949e2\n9f2323ac\n1fab1d1c\n75924351\nef55817b\n02deca50\n4d979d99\n4d65f873\n28470fa0\n0d1575fe\n06ea172e\n29a6ddc2\n797f1bec\n780e7a99\nb9ed5b44\n02a236b4\n607d8ff5\naf5666b2\n0558d0ed\na938c6b2\n103df575\n77110e80\n739e5a07\n6763a576\n06ebc138\nba4b3b09\nb35cc2f3\n4e0597a0\n5949ee84\n5348d547\n323c4236\nb3b51117\n55727ddd\nab2714f3\nd2878895\nc0734cb3\n94f7c53e\n2a2745e5\n442ffb54\n3592425a\n50ae03b0\n5f150435\n3067f9fa\n9ffb2818\nadeaf5aa\n31caacec\n1cd99b86\naa22f9d0\n8fa50320\ne6348d2c\n42ff84a5\n8c8b7913\nc96adcbc\n495be321\ndb735509\nee113fc4\na678cdab\nc409ca4d\n68d2b259\n592b4dee\n4e2b4dc7\neb4d26e1\n2009a00f\nbec5c89d\n67191f24\na3e85b4b\nda7080cd\n80d978e9\n36dcb93f\na41e8c44\n12fdc864\n46d140ea\n657c9dd9\na86f84ee\n90c1c43d\n33015509\nafc7664d\n23df06e1\n291d4799\n0ab75563\n251bf059\nbcefdcc4\nce9a2796\n94d3403a\n8f2e04bc\nf9cda066\n9dfa2cc5\n66924c91\ne765a09e\n15654ee1\n48e0bd39\nee095221\n2463609b\n544d0d1f\n51b8c2e1\nd321dde4\n4cb11a5f\nd7058a0d\n37af282a\nfabae187\n7be91184\n181ec185\n2d16ceeb\nb56be4b1\n6699eff0\n79acac96\nd61c4665\n0c13e1e7\n100f6ecf\n71217dfc\n82df0888\n4c42c747\nc9fdf703\nd2efeb4b\n69ed9d14\n64914fb6\n255bedbc\n4ea934d8\na034feb2\ne4f4ddae\ne36a3026\nc1489591\n111bb373\ne1d9fb32\n93e22d48\nc1ec4b26\nd9638e69\n60ab04c5\ncfe7773a\n62132822\n2f5fb2a3\n7bdd197d\n033333fd\n130fcdbe\n12e509c2\n67138c33\n6f90cc5f\n4e3020fe\nbbdd8bb7\nb399ccdb\nfecd10d2\n2e0967f7\nf509054f\n792c6ff7\n48e2afc5\nd904c048\n111e0a5c\nb83024e2\ne6a7b79c\nbdc5ccf7\nb8146d00\n9d394f1a\n645b84f9\n95ab2d0f\ne6f8a31d\nb4f876fb\ndc2c570d\n3afd02d7\n5c80c82c\nb1b32ddd\n9f25fc61\nba538072\nf8916fef\n43c04ad2\na658e949\n2861dd53\nf6e40aba\n09d305d1\naac33bff\n8d9d4c08\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/dataset/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/dataset/sam2_datasets.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport logging\nimport math\nfrom typing import Callable, Iterable, List, Optional, Sequence\n\nimport torch\n\nfrom torch.utils.data import BatchSampler, DataLoader, Dataset, IterableDataset, Subset\n\nfrom torch.utils.data.distributed import DistributedSampler\n\n\nclass MixedDataLoader:\n    def __init__(self, dataloaders: List[DataLoader], mixing_prob: torch.FloatTensor):\n        \"\"\"\n        Args:\n            dataloaders (List[DataLoader]): List of DataLoaders to be mixed.\n            mixing_prob (torch.FloatTensor): Probability of each dataloader to be sampled from\n\n        \"\"\"\n        assert len(dataloaders) == mixing_prob.shape[0]\n        self.dataloaders = dataloaders\n        self.mixing_prob = mixing_prob\n        # Iterator state\n        self._iter_dls = None\n        self._iter_mixing_prob = None\n        self.random_generator = torch.Generator()\n\n    def __len__(self):\n        return sum([len(d) for d in self.dataloaders])\n\n    def __iter__(self):\n        # Synchronize dataloader seeds\n        self.random_generator.manual_seed(42)\n        self._iter_dls = [iter(loader) for loader in self.dataloaders]\n        self._iter_mixing_prob = self.mixing_prob.clone()\n        return self\n\n    def __next__(self):\n        \"\"\"\n        Sample a dataloader to sample from based on mixing probabilities. If one of the dataloaders is exhausted, we continue sampling from the other loaders until all are exhausted.\n        \"\"\"\n        if self._iter_dls is None:\n            raise TypeError(f\"{type(self).__name__} object is not an iterator\")\n\n        while self._iter_mixing_prob.any():  # at least one D-Loader with non-zero prob.\n            dataset_idx = self._iter_mixing_prob.multinomial(\n                1, generator=self.random_generator\n            ).item()\n            try:\n                item = next(self._iter_dls[dataset_idx])\n                return item\n            except StopIteration:\n                # No more iterations for this dataset, set it's mixing probability to zero and try again.\n                self._iter_mixing_prob[dataset_idx] = 0\n            except Exception as e:\n                # log and raise any other unexpected error.\n                logging.error(e)\n                raise e\n\n        # Exhausted all iterators\n        raise StopIteration\n\n\nclass TorchTrainMixedDataset:\n    def __init__(\n        self,\n        datasets: List[Dataset],\n        batch_sizes: List[int],\n        num_workers: int,\n        shuffle: bool,\n        pin_memory: bool,\n        drop_last: bool,\n        collate_fn: Optional[Callable] = None,\n        worker_init_fn: Optional[Callable] = None,\n        phases_per_epoch: int = 1,\n        dataset_prob: Optional[List[float]] = None,\n    ) -> None:\n        \"\"\"\n        Args:\n            datasets (List[Dataset]): List of Datasets to be mixed.\n            batch_sizes (List[int]): Batch sizes for each dataset in the list.\n            num_workers (int): Number of workers per dataloader.\n            shuffle (bool): Whether or not to shuffle data.\n            pin_memory (bool): If True, use pinned memory when loading tensors from disk.\n            drop_last (bool): Whether or not to drop the last batch of data.\n            collate_fn (Callable): Function to merge a list of samples into a mini-batch.\n            worker_init_fn (Callable): Function to init each dataloader worker.\n            phases_per_epoch (int): Number of phases per epoch.\n            dataset_prob (List[float]): Probability of choosing the dataloader to sample from. Should sum to 1.0\n        \"\"\"\n\n        self.datasets = datasets\n        self.batch_sizes = batch_sizes\n        self.num_workers = num_workers\n        self.shuffle = shuffle\n        self.pin_memory = pin_memory\n        self.drop_last = drop_last\n        self.collate_fn = collate_fn\n        self.worker_init_fn = worker_init_fn\n        assert len(self.datasets) > 0\n        for dataset in self.datasets:\n            assert not isinstance(dataset, IterableDataset), \"Not supported\"\n            # `RepeatFactorWrapper` requires calling set_epoch first to get its length\n            self._set_dataset_epoch(dataset, 0)\n        self.phases_per_epoch = phases_per_epoch\n        self.chunks = [None] * len(datasets)\n        if dataset_prob is None:\n            # If not provided, assign each dataset a probability proportional to its length.\n            dataset_lens = [\n                (math.floor(len(d) / bs) if drop_last else math.ceil(len(d) / bs))\n                for d, bs in zip(datasets, batch_sizes)\n            ]\n            total_len = sum(dataset_lens)\n            dataset_prob = torch.tensor([d_len / total_len for d_len in dataset_lens])\n        else:\n            assert len(dataset_prob) == len(datasets)\n            dataset_prob = torch.tensor(dataset_prob)\n\n        logging.info(f\"Dataset mixing probabilities: {dataset_prob.tolist()}\")\n        assert dataset_prob.sum().item() == 1.0, \"Probabilities should sum to 1.0\"\n        self.dataset_prob = dataset_prob\n\n    def _set_dataset_epoch(self, dataset, epoch: int) -> None:\n        if hasattr(dataset, \"epoch\"):\n            dataset.epoch = epoch\n        if hasattr(dataset, \"set_epoch\"):\n            dataset.set_epoch(epoch)\n\n    def get_loader(self, epoch) -> Iterable:\n        dataloaders = []\n        for d_idx, (dataset, batch_size) in enumerate(\n            zip(self.datasets, self.batch_sizes)\n        ):\n            if self.phases_per_epoch > 1:\n                # Major epoch that looops over entire dataset\n                # len(main_epoch) == phases_per_epoch * len(epoch)\n                main_epoch = epoch // self.phases_per_epoch\n\n                # Phase with in the main epoch\n                local_phase = epoch % self.phases_per_epoch\n\n                # Start of new data-epoch or job is resumed after preemtion.\n                if local_phase == 0 or self.chunks[d_idx] is None:\n                    # set seed for dataset epoch\n                    # If using RepeatFactorWrapper, this step currectly re-samples indices before chunking.\n                    self._set_dataset_epoch(dataset, main_epoch)\n\n                    # Separate random generator for subset sampling\n                    g = torch.Generator()\n                    g.manual_seed(main_epoch)\n                    self.chunks[d_idx] = torch.chunk(\n                        torch.randperm(len(dataset), generator=g),\n                        self.phases_per_epoch,\n                    )\n\n                dataset = Subset(dataset, self.chunks[d_idx][local_phase])\n            else:\n                self._set_dataset_epoch(dataset, epoch)\n\n            sampler = DistributedSampler(dataset, shuffle=self.shuffle)\n            sampler.set_epoch(epoch)\n\n            batch_sampler = BatchSampler(sampler, batch_size, drop_last=self.drop_last)\n            dataloaders.append(\n                DataLoader(\n                    dataset,\n                    num_workers=self.num_workers,\n                    pin_memory=self.pin_memory,\n                    batch_sampler=batch_sampler,\n                    collate_fn=self.collate_fn,\n                    worker_init_fn=self.worker_init_fn,\n                )\n            )\n        return MixedDataLoader(dataloaders, self.dataset_prob)\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/dataset/transforms.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\"\"\"\nTransforms and data augmentation for both image + bbox.\n\"\"\"\n\nimport logging\n\nimport random\nfrom typing import Iterable\n\nimport torch\nimport torchvision.transforms as T\nimport torchvision.transforms.functional as F\nimport torchvision.transforms.v2.functional as Fv2\nfrom PIL import Image as PILImage\n\nfrom torchvision.transforms import InterpolationMode\n\nfrom training.utils.data_utils import VideoDatapoint\n\n\ndef hflip(datapoint, index):\n\n    datapoint.frames[index].data = F.hflip(datapoint.frames[index].data)\n    for obj in datapoint.frames[index].objects:\n        if obj.segment is not None:\n            obj.segment = F.hflip(obj.segment)\n\n    return datapoint\n\n\ndef get_size_with_aspect_ratio(image_size, size, max_size=None):\n    w, h = image_size\n    if max_size is not None:\n        min_original_size = float(min((w, h)))\n        max_original_size = float(max((w, h)))\n        if max_original_size / min_original_size * size > max_size:\n            size = max_size * min_original_size / max_original_size\n\n    if (w <= h and w == size) or (h <= w and h == size):\n        return (h, w)\n\n    if w < h:\n        ow = int(round(size))\n        oh = int(round(size * h / w))\n    else:\n        oh = int(round(size))\n        ow = int(round(size * w / h))\n\n    return (oh, ow)\n\n\ndef resize(datapoint, index, size, max_size=None, square=False, v2=False):\n    # size can be min_size (scalar) or (w, h) tuple\n\n    def get_size(image_size, size, max_size=None):\n        if isinstance(size, (list, tuple)):\n            return size[::-1]\n        else:\n            return get_size_with_aspect_ratio(image_size, size, max_size)\n\n    if square:\n        size = size, size\n    else:\n        cur_size = (\n            datapoint.frames[index].data.size()[-2:][::-1]\n            if v2\n            else datapoint.frames[index].data.size\n        )\n        size = get_size(cur_size, size, max_size)\n\n    old_size = (\n        datapoint.frames[index].data.size()[-2:][::-1]\n        if v2\n        else datapoint.frames[index].data.size\n    )\n    if v2:\n        datapoint.frames[index].data = Fv2.resize(\n            datapoint.frames[index].data, size, antialias=True\n        )\n    else:\n        datapoint.frames[index].data = F.resize(datapoint.frames[index].data, size)\n\n    new_size = (\n        datapoint.frames[index].data.size()[-2:][::-1]\n        if v2\n        else datapoint.frames[index].data.size\n    )\n\n    for obj in datapoint.frames[index].objects:\n        if obj.segment is not None:\n            obj.segment = F.resize(obj.segment[None, None], size).squeeze()\n\n    h, w = size\n    datapoint.frames[index].size = (h, w)\n    return datapoint\n\n\ndef pad(datapoint, index, padding, v2=False):\n    old_h, old_w = datapoint.frames[index].size\n    h, w = old_h, old_w\n    if len(padding) == 2:\n        # assumes that we only pad on the bottom right corners\n        datapoint.frames[index].data = F.pad(\n            datapoint.frames[index].data, (0, 0, padding[0], padding[1])\n        )\n        h += padding[1]\n        w += padding[0]\n    else:\n        # left, top, right, bottom\n        datapoint.frames[index].data = F.pad(\n            datapoint.frames[index].data,\n            (padding[0], padding[1], padding[2], padding[3]),\n        )\n        h += padding[1] + padding[3]\n        w += padding[0] + padding[2]\n\n    datapoint.frames[index].size = (h, w)\n\n    for obj in datapoint.frames[index].objects:\n        if obj.segment is not None:\n            if v2:\n                if len(padding) == 2:\n                    obj.segment = Fv2.pad(obj.segment, (0, 0, padding[0], padding[1]))\n                else:\n                    obj.segment = Fv2.pad(obj.segment, tuple(padding))\n            else:\n                if len(padding) == 2:\n                    obj.segment = F.pad(obj.segment, (0, 0, padding[0], padding[1]))\n                else:\n                    obj.segment = F.pad(obj.segment, tuple(padding))\n    return datapoint\n\n\nclass RandomHorizontalFlip:\n    def __init__(self, consistent_transform, p=0.5):\n        self.p = p\n        self.consistent_transform = consistent_transform\n\n    def __call__(self, datapoint, **kwargs):\n        if self.consistent_transform:\n            if random.random() < self.p:\n                for i in range(len(datapoint.frames)):\n                    datapoint = hflip(datapoint, i)\n            return datapoint\n        for i in range(len(datapoint.frames)):\n            if random.random() < self.p:\n                datapoint = hflip(datapoint, i)\n        return datapoint\n\n\nclass RandomResizeAPI:\n    def __init__(\n        self, sizes, consistent_transform, max_size=None, square=False, v2=False\n    ):\n        if isinstance(sizes, int):\n            sizes = (sizes,)\n        assert isinstance(sizes, Iterable)\n        self.sizes = list(sizes)\n        self.max_size = max_size\n        self.square = square\n        self.consistent_transform = consistent_transform\n        self.v2 = v2\n\n    def __call__(self, datapoint, **kwargs):\n        if self.consistent_transform:\n            size = random.choice(self.sizes)\n            for i in range(len(datapoint.frames)):\n                datapoint = resize(\n                    datapoint, i, size, self.max_size, square=self.square, v2=self.v2\n                )\n            return datapoint\n        for i in range(len(datapoint.frames)):\n            size = random.choice(self.sizes)\n            datapoint = resize(\n                datapoint, i, size, self.max_size, square=self.square, v2=self.v2\n            )\n        return datapoint\n\n\nclass ToTensorAPI:\n    def __init__(self, v2=False):\n        self.v2 = v2\n\n    def __call__(self, datapoint: VideoDatapoint, **kwargs):\n        for img in datapoint.frames:\n            if self.v2:\n                img.data = Fv2.to_image_tensor(img.data)\n            else:\n                img.data = F.to_tensor(img.data)\n        return datapoint\n\n\nclass NormalizeAPI:\n    def __init__(self, mean, std, v2=False):\n        self.mean = mean\n        self.std = std\n        self.v2 = v2\n\n    def __call__(self, datapoint: VideoDatapoint, **kwargs):\n        for img in datapoint.frames:\n            if self.v2:\n                img.data = Fv2.convert_image_dtype(img.data, torch.float32)\n                img.data = Fv2.normalize(img.data, mean=self.mean, std=self.std)\n            else:\n                img.data = F.normalize(img.data, mean=self.mean, std=self.std)\n\n        return datapoint\n\n\nclass ComposeAPI:\n    def __init__(self, transforms):\n        self.transforms = transforms\n\n    def __call__(self, datapoint, **kwargs):\n        for t in self.transforms:\n            datapoint = t(datapoint, **kwargs)\n        return datapoint\n\n    def __repr__(self):\n        format_string = self.__class__.__name__ + \"(\"\n        for t in self.transforms:\n            format_string += \"\\n\"\n            format_string += \"    {0}\".format(t)\n        format_string += \"\\n)\"\n        return format_string\n\n\nclass RandomGrayscale:\n    def __init__(self, consistent_transform, p=0.5):\n        self.p = p\n        self.consistent_transform = consistent_transform\n        self.Grayscale = T.Grayscale(num_output_channels=3)\n\n    def __call__(self, datapoint: VideoDatapoint, **kwargs):\n        if self.consistent_transform:\n            if random.random() < self.p:\n                for img in datapoint.frames:\n                    img.data = self.Grayscale(img.data)\n            return datapoint\n        for img in datapoint.frames:\n            if random.random() < self.p:\n                img.data = self.Grayscale(img.data)\n        return datapoint\n\n\nclass ColorJitter:\n    def __init__(self, consistent_transform, brightness, contrast, saturation, hue):\n        self.consistent_transform = consistent_transform\n        self.brightness = (\n            brightness\n            if isinstance(brightness, list)\n            else [max(0, 1 - brightness), 1 + brightness]\n        )\n        self.contrast = (\n            contrast\n            if isinstance(contrast, list)\n            else [max(0, 1 - contrast), 1 + contrast]\n        )\n        self.saturation = (\n            saturation\n            if isinstance(saturation, list)\n            else [max(0, 1 - saturation), 1 + saturation]\n        )\n        self.hue = hue if isinstance(hue, list) or hue is None else ([-hue, hue])\n\n    def __call__(self, datapoint: VideoDatapoint, **kwargs):\n        if self.consistent_transform:\n            # Create a color jitter transformation params\n            (\n                fn_idx,\n                brightness_factor,\n                contrast_factor,\n                saturation_factor,\n                hue_factor,\n            ) = T.ColorJitter.get_params(\n                self.brightness, self.contrast, self.saturation, self.hue\n            )\n        for img in datapoint.frames:\n            if not self.consistent_transform:\n                (\n                    fn_idx,\n                    brightness_factor,\n                    contrast_factor,\n                    saturation_factor,\n                    hue_factor,\n                ) = T.ColorJitter.get_params(\n                    self.brightness, self.contrast, self.saturation, self.hue\n                )\n            for fn_id in fn_idx:\n                if fn_id == 0 and brightness_factor is not None:\n                    img.data = F.adjust_brightness(img.data, brightness_factor)\n                elif fn_id == 1 and contrast_factor is not None:\n                    img.data = F.adjust_contrast(img.data, contrast_factor)\n                elif fn_id == 2 and saturation_factor is not None:\n                    img.data = F.adjust_saturation(img.data, saturation_factor)\n                elif fn_id == 3 and hue_factor is not None:\n                    img.data = F.adjust_hue(img.data, hue_factor)\n        return datapoint\n\n\nclass RandomAffine:\n    def __init__(\n        self,\n        degrees,\n        consistent_transform,\n        scale=None,\n        translate=None,\n        shear=None,\n        image_mean=(123, 116, 103),\n        log_warning=True,\n        num_tentatives=1,\n        image_interpolation=\"bicubic\",\n    ):\n        \"\"\"\n        The mask is required for this transform.\n        if consistent_transform if True, then the same random affine is applied to all frames and masks.\n        \"\"\"\n        self.degrees = degrees if isinstance(degrees, list) else ([-degrees, degrees])\n        self.scale = scale\n        self.shear = (\n            shear if isinstance(shear, list) else ([-shear, shear] if shear else None)\n        )\n        self.translate = translate\n        self.fill_img = image_mean\n        self.consistent_transform = consistent_transform\n        self.log_warning = log_warning\n        self.num_tentatives = num_tentatives\n\n        if image_interpolation == \"bicubic\":\n            self.image_interpolation = InterpolationMode.BICUBIC\n        elif image_interpolation == \"bilinear\":\n            self.image_interpolation = InterpolationMode.BILINEAR\n        else:\n            raise NotImplementedError\n\n    def __call__(self, datapoint: VideoDatapoint, **kwargs):\n        for _tentative in range(self.num_tentatives):\n            res = self.transform_datapoint(datapoint)\n            if res is not None:\n                return res\n\n        if self.log_warning:\n            logging.warning(\n                f\"Skip RandomAffine for zero-area mask in first frame after {self.num_tentatives} tentatives\"\n            )\n        return datapoint\n\n    def transform_datapoint(self, datapoint: VideoDatapoint):\n        _, height, width = F.get_dimensions(datapoint.frames[0].data)\n        img_size = [width, height]\n\n        if self.consistent_transform:\n            # Create a random affine transformation\n            affine_params = T.RandomAffine.get_params(\n                degrees=self.degrees,\n                translate=self.translate,\n                scale_ranges=self.scale,\n                shears=self.shear,\n                img_size=img_size,\n            )\n\n        for img_idx, img in enumerate(datapoint.frames):\n            this_masks = [\n                obj.segment.unsqueeze(0) if obj.segment is not None else None\n                for obj in img.objects\n            ]\n            if not self.consistent_transform:\n                # if not consistent we create a new affine params for every frame&mask pair Create a random affine transformation\n                affine_params = T.RandomAffine.get_params(\n                    degrees=self.degrees,\n                    translate=self.translate,\n                    scale_ranges=self.scale,\n                    shears=self.shear,\n                    img_size=img_size,\n                )\n\n            transformed_bboxes, transformed_masks = [], []\n            for i in range(len(img.objects)):\n                if this_masks[i] is None:\n                    transformed_masks.append(None)\n                    # Dummy bbox for a dummy target\n                    transformed_bboxes.append(torch.tensor([[0, 0, 1, 1]]))\n                else:\n                    transformed_mask = F.affine(\n                        this_masks[i],\n                        *affine_params,\n                        interpolation=InterpolationMode.NEAREST,\n                        fill=0.0,\n                    )\n                    if img_idx == 0 and transformed_mask.max() == 0:\n                        # We are dealing with a video and the object is not visible in the first frame\n                        # Return the datapoint without transformation\n                        return None\n                    transformed_masks.append(transformed_mask.squeeze())\n\n            for i in range(len(img.objects)):\n                img.objects[i].segment = transformed_masks[i]\n\n            img.data = F.affine(\n                img.data,\n                *affine_params,\n                interpolation=self.image_interpolation,\n                fill=self.fill_img,\n            )\n        return datapoint\n\n\ndef random_mosaic_frame(\n    datapoint,\n    index,\n    grid_h,\n    grid_w,\n    target_grid_y,\n    target_grid_x,\n    should_hflip,\n):\n    # Step 1: downsize the images and paste them into a mosaic\n    image_data = datapoint.frames[index].data\n    is_pil = isinstance(image_data, PILImage.Image)\n    if is_pil:\n        H_im = image_data.height\n        W_im = image_data.width\n        image_data_output = PILImage.new(\"RGB\", (W_im, H_im))\n    else:\n        H_im = image_data.size(-2)\n        W_im = image_data.size(-1)\n        image_data_output = torch.zeros_like(image_data)\n\n    downsize_cache = {}\n    for grid_y in range(grid_h):\n        for grid_x in range(grid_w):\n            y_offset_b = grid_y * H_im // grid_h\n            x_offset_b = grid_x * W_im // grid_w\n            y_offset_e = (grid_y + 1) * H_im // grid_h\n            x_offset_e = (grid_x + 1) * W_im // grid_w\n            H_im_downsize = y_offset_e - y_offset_b\n            W_im_downsize = x_offset_e - x_offset_b\n\n            if (H_im_downsize, W_im_downsize) in downsize_cache:\n                image_data_downsize = downsize_cache[(H_im_downsize, W_im_downsize)]\n            else:\n                image_data_downsize = F.resize(\n                    image_data,\n                    size=(H_im_downsize, W_im_downsize),\n                    interpolation=InterpolationMode.BILINEAR,\n                    antialias=True,  # antialiasing for downsizing\n                )\n                downsize_cache[(H_im_downsize, W_im_downsize)] = image_data_downsize\n            if should_hflip[grid_y, grid_x].item():\n                image_data_downsize = F.hflip(image_data_downsize)\n\n            if is_pil:\n                image_data_output.paste(image_data_downsize, (x_offset_b, y_offset_b))\n            else:\n                image_data_output[:, y_offset_b:y_offset_e, x_offset_b:x_offset_e] = (\n                    image_data_downsize\n                )\n\n    datapoint.frames[index].data = image_data_output\n\n    # Step 2: downsize the masks and paste them into the target grid of the mosaic\n    for obj in datapoint.frames[index].objects:\n        if obj.segment is None:\n            continue\n        assert obj.segment.shape == (H_im, W_im) and obj.segment.dtype == torch.uint8\n        segment_output = torch.zeros_like(obj.segment)\n\n        target_y_offset_b = target_grid_y * H_im // grid_h\n        target_x_offset_b = target_grid_x * W_im // grid_w\n        target_y_offset_e = (target_grid_y + 1) * H_im // grid_h\n        target_x_offset_e = (target_grid_x + 1) * W_im // grid_w\n        target_H_im_downsize = target_y_offset_e - target_y_offset_b\n        target_W_im_downsize = target_x_offset_e - target_x_offset_b\n\n        segment_downsize = F.resize(\n            obj.segment[None, None],\n            size=(target_H_im_downsize, target_W_im_downsize),\n            interpolation=InterpolationMode.BILINEAR,\n            antialias=True,  # antialiasing for downsizing\n        )[0, 0]\n        if should_hflip[target_grid_y, target_grid_x].item():\n            segment_downsize = F.hflip(segment_downsize[None, None])[0, 0]\n\n        segment_output[\n            target_y_offset_b:target_y_offset_e, target_x_offset_b:target_x_offset_e\n        ] = segment_downsize\n        obj.segment = segment_output\n\n    return datapoint\n\n\nclass RandomMosaicVideoAPI:\n    def __init__(self, prob=0.15, grid_h=2, grid_w=2, use_random_hflip=False):\n        self.prob = prob\n        self.grid_h = grid_h\n        self.grid_w = grid_w\n        self.use_random_hflip = use_random_hflip\n\n    def __call__(self, datapoint, **kwargs):\n        if random.random() > self.prob:\n            return datapoint\n\n        # select a random location to place the target mask in the mosaic\n        target_grid_y = random.randint(0, self.grid_h - 1)\n        target_grid_x = random.randint(0, self.grid_w - 1)\n        # whether to flip each grid in the mosaic horizontally\n        if self.use_random_hflip:\n            should_hflip = torch.rand(self.grid_h, self.grid_w) < 0.5\n        else:\n            should_hflip = torch.zeros(self.grid_h, self.grid_w, dtype=torch.bool)\n        for i in range(len(datapoint.frames)):\n            datapoint = random_mosaic_frame(\n                datapoint,\n                i,\n                grid_h=self.grid_h,\n                grid_w=self.grid_w,\n                target_grid_y=target_grid_y,\n                target_grid_x=target_grid_x,\n                should_hflip=should_hflip,\n            )\n\n        return datapoint\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/dataset/utils.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\"\"\"Some wrapping utilities extended from pytorch's to support repeat factor sampling in particular\"\"\"\n\nfrom typing import Iterable\n\nimport torch\nfrom torch.utils.data import (\n    ConcatDataset as TorchConcatDataset,\n    Dataset,\n    Subset as TorchSubset,\n)\n\n\nclass ConcatDataset(TorchConcatDataset):\n    def __init__(self, datasets: Iterable[Dataset]) -> None:\n        super(ConcatDataset, self).__init__(datasets)\n\n        self.repeat_factors = torch.cat([d.repeat_factors for d in datasets])\n\n    def set_epoch(self, epoch: int):\n        for dataset in self.datasets:\n            if hasattr(dataset, \"epoch\"):\n                dataset.epoch = epoch\n            if hasattr(dataset, \"set_epoch\"):\n                dataset.set_epoch(epoch)\n\n\nclass Subset(TorchSubset):\n    def __init__(self, dataset, indices) -> None:\n        super(Subset, self).__init__(dataset, indices)\n\n        self.repeat_factors = dataset.repeat_factors[indices]\n        assert len(indices) == len(self.repeat_factors)\n\n\n# Adapted from Detectron2\nclass RepeatFactorWrapper(Dataset):\n    \"\"\"\n    Thin wrapper around a dataset to implement repeat factor sampling.\n    The underlying dataset must have a repeat_factors member to indicate the per-image factor.\n    Set it to uniformly ones to disable repeat factor sampling\n    \"\"\"\n\n    def __init__(self, dataset, seed: int = 0):\n        self.dataset = dataset\n        self.epoch_ids = None\n        self._seed = seed\n\n        # Split into whole number (_int_part) and fractional (_frac_part) parts.\n        self._int_part = torch.trunc(dataset.repeat_factors)\n        self._frac_part = dataset.repeat_factors - self._int_part\n\n    def _get_epoch_indices(self, generator):\n        \"\"\"\n        Create a list of dataset indices (with repeats) to use for one epoch.\n\n        Args:\n            generator (torch.Generator): pseudo random number generator used for\n                stochastic rounding.\n\n        Returns:\n            torch.Tensor: list of dataset indices to use in one epoch. Each index\n                is repeated based on its calculated repeat factor.\n        \"\"\"\n        # Since repeat factors are fractional, we use stochastic rounding so\n        # that the target repeat factor is achieved in expectation over the\n        # course of training\n        rands = torch.rand(len(self._frac_part), generator=generator)\n        rep_factors = self._int_part + (rands < self._frac_part).float()\n        # Construct a list of indices in which we repeat images as specified\n        indices = []\n        for dataset_index, rep_factor in enumerate(rep_factors):\n            indices.extend([dataset_index] * int(rep_factor.item()))\n        return torch.tensor(indices, dtype=torch.int64)\n\n    def __len__(self):\n        if self.epoch_ids is None:\n            # Here we raise an error instead of returning original len(self.dataset) avoid\n            # accidentally using unwrapped length. Otherwise it's error-prone since the\n            # length changes to `len(self.epoch_ids)`changes after set_epoch is called.\n            raise RuntimeError(\"please call set_epoch first to get wrapped length\")\n            # return len(self.dataset)\n\n        return len(self.epoch_ids)\n\n    def set_epoch(self, epoch: int):\n        g = torch.Generator()\n        g.manual_seed(self._seed + epoch)\n        self.epoch_ids = self._get_epoch_indices(g)\n        if hasattr(self.dataset, \"set_epoch\"):\n            self.dataset.set_epoch(epoch)\n\n    def __getitem__(self, idx):\n        if self.epoch_ids is None:\n            raise RuntimeError(\n                \"Repeat ids haven't been computed. Did you forget to call set_epoch?\"\n            )\n\n        return self.dataset[self.epoch_ids[idx]]\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/dataset/vos_dataset.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport logging\nimport random\nfrom copy import deepcopy\n\nimport numpy as np\n\nimport torch\nfrom iopath.common.file_io import g_pathmgr\nfrom PIL import Image as PILImage\nfrom torchvision.datasets.vision import VisionDataset\n\nfrom training.dataset.vos_raw_dataset import VOSRawDataset\nfrom training.dataset.vos_sampler import VOSSampler\nfrom training.dataset.vos_segment_loader import JSONSegmentLoader\n\nfrom training.utils.data_utils import Frame, Object, VideoDatapoint\n\nMAX_RETRIES = 100\n\n\nclass VOSDataset(VisionDataset):\n    def __init__(\n        self,\n        transforms,\n        training: bool,\n        video_dataset: VOSRawDataset,\n        sampler: VOSSampler,\n        multiplier: int,\n        always_target=True,\n        target_segments_available=True,\n    ):\n        self._transforms = transforms\n        self.training = training\n        self.video_dataset = video_dataset\n        self.sampler = sampler\n\n        self.repeat_factors = torch.ones(len(self.video_dataset), dtype=torch.float32)\n        self.repeat_factors *= multiplier\n        print(f\"Raw dataset length = {len(self.video_dataset)}\")\n\n        self.curr_epoch = 0  # Used in case data loader behavior changes across epochs\n        self.always_target = always_target\n        self.target_segments_available = target_segments_available\n\n    def _get_datapoint(self, idx):\n\n        for retry in range(MAX_RETRIES):\n            try:\n                if isinstance(idx, torch.Tensor):\n                    idx = idx.item()\n                # sample a video\n                video, segment_loader = self.video_dataset.get_video(idx)\n                # sample frames and object indices to be used in a datapoint\n                sampled_frms_and_objs = self.sampler.sample(\n                    video, segment_loader, epoch=self.curr_epoch\n                )\n                break  # Succesfully loaded video\n            except Exception as e:\n                if self.training:\n                    logging.warning(\n                        f\"Loading failed (id={idx}); Retry {retry} with exception: {e}\"\n                    )\n                    idx = random.randrange(0, len(self.video_dataset))\n                else:\n                    # Shouldn't fail to load a val video\n                    raise e\n\n        datapoint = self.construct(video, sampled_frms_and_objs, segment_loader)\n        for transform in self._transforms:\n            datapoint = transform(datapoint, epoch=self.curr_epoch)\n        return datapoint\n\n    def construct(self, video, sampled_frms_and_objs, segment_loader):\n        \"\"\"\n        Constructs a VideoDatapoint sample to pass to transforms\n        \"\"\"\n        sampled_frames = sampled_frms_and_objs.frames\n        sampled_object_ids = sampled_frms_and_objs.object_ids\n\n        images = []\n        rgb_images = load_images(sampled_frames)\n        # Iterate over the sampled frames and store their rgb data and object data (bbox, segment)\n        for frame_idx, frame in enumerate(sampled_frames):\n            w, h = rgb_images[frame_idx].size\n            images.append(\n                Frame(\n                    data=rgb_images[frame_idx],\n                    objects=[],\n                )\n            )\n            # We load the gt segments associated with the current frame\n            if isinstance(segment_loader, JSONSegmentLoader):\n                segments = segment_loader.load(\n                    frame.frame_idx, obj_ids=sampled_object_ids\n                )\n            else:\n                segments = segment_loader.load(frame.frame_idx)\n            for obj_id in sampled_object_ids:\n                # Extract the segment\n                if obj_id in segments:\n                    assert (\n                        segments[obj_id] is not None\n                    ), \"None targets are not supported\"\n                    # segment is uint8 and remains uint8 throughout the transforms\n                    segment = segments[obj_id].to(torch.uint8)\n                else:\n                    # There is no target, we either use a zero mask target or drop this object\n                    if not self.always_target:\n                        continue\n                    segment = torch.zeros(h, w, dtype=torch.uint8)\n\n                images[frame_idx].objects.append(\n                    Object(\n                        object_id=obj_id,\n                        frame_index=frame.frame_idx,\n                        segment=segment,\n                    )\n                )\n        return VideoDatapoint(\n            frames=images,\n            video_id=video.video_id,\n            size=(h, w),\n        )\n\n    def __getitem__(self, idx):\n        return self._get_datapoint(idx)\n\n    def __len__(self):\n        return len(self.video_dataset)\n\n\ndef load_images(frames):\n    all_images = []\n    cache = {}\n    for frame in frames:\n        if frame.data is None:\n            # Load the frame rgb data from file\n            path = frame.image_path\n            if path in cache:\n                all_images.append(deepcopy(all_images[cache[path]]))\n                continue\n            with g_pathmgr.open(path, \"rb\") as fopen:\n                all_images.append(PILImage.open(fopen).convert(\"RGB\"))\n            cache[path] = len(all_images) - 1\n        else:\n            # The frame rgb data has already been loaded\n            # Convert it to a PILImage\n            all_images.append(tensor_2_PIL(frame.data))\n\n    return all_images\n\n\ndef tensor_2_PIL(data: torch.Tensor) -> PILImage.Image:\n    data = data.cpu().numpy().transpose((1, 2, 0)) * 255.0\n    data = data.astype(np.uint8)\n    return PILImage.fromarray(data)\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/dataset/vos_raw_dataset.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport glob\nimport logging\nimport os\nfrom dataclasses import dataclass\n\nfrom typing import List, Optional\n\nimport pandas as pd\n\nimport torch\n\nfrom iopath.common.file_io import g_pathmgr\n\nfrom omegaconf.listconfig import ListConfig\n\nfrom training.dataset.vos_segment_loader import (\n    JSONSegmentLoader,\n    MultiplePNGSegmentLoader,\n    PalettisedPNGSegmentLoader,\n    SA1BSegmentLoader,\n)\n\n\n@dataclass\nclass VOSFrame:\n    frame_idx: int\n    image_path: str\n    data: Optional[torch.Tensor] = None\n    is_conditioning_only: Optional[bool] = False\n\n\n@dataclass\nclass VOSVideo:\n    video_name: str\n    video_id: int\n    frames: List[VOSFrame]\n\n    def __len__(self):\n        return len(self.frames)\n\n\nclass VOSRawDataset:\n    def __init__(self):\n        pass\n\n    def get_video(self, idx):\n        raise NotImplementedError()\n\n\nclass PNGRawDataset(VOSRawDataset):\n    def __init__(\n        self,\n        img_folder,\n        gt_folder,\n        file_list_txt=None,\n        excluded_videos_list_txt=None,\n        sample_rate=1,\n        is_palette=True,\n        single_object_mode=False,\n        truncate_video=-1,\n        frames_sampling_mult=False,\n    ):\n        self.img_folder = img_folder\n        self.gt_folder = gt_folder\n        self.sample_rate = sample_rate\n        self.is_palette = is_palette\n        self.single_object_mode = single_object_mode\n        self.truncate_video = truncate_video\n\n        # Read the subset defined in file_list_txt\n        if file_list_txt is not None:\n            with g_pathmgr.open(file_list_txt, \"r\") as f:\n                subset = [os.path.splitext(line.strip())[0] for line in f]\n        else:\n            subset = os.listdir(self.img_folder)\n\n        # Read and process excluded files if provided\n        if excluded_videos_list_txt is not None:\n            with g_pathmgr.open(excluded_videos_list_txt, \"r\") as f:\n                excluded_files = [os.path.splitext(line.strip())[0] for line in f]\n        else:\n            excluded_files = []\n\n        # Check if it's not in excluded_files\n        self.video_names = sorted(\n            [video_name for video_name in subset if video_name not in excluded_files]\n        )\n\n        if self.single_object_mode:\n            # single object mode\n            self.video_names = sorted(\n                [\n                    os.path.join(video_name, obj)\n                    for video_name in self.video_names\n                    for obj in os.listdir(os.path.join(self.gt_folder, video_name))\n                ]\n            )\n\n        if frames_sampling_mult:\n            video_names_mult = []\n            for video_name in self.video_names:\n                num_frames = len(os.listdir(os.path.join(self.img_folder, video_name)))\n                video_names_mult.extend([video_name] * num_frames)\n            self.video_names = video_names_mult\n\n    def get_video(self, idx):\n        \"\"\"\n        Given a VOSVideo object, return the mask tensors.\n        \"\"\"\n        video_name = self.video_names[idx]\n\n        if self.single_object_mode:\n            video_frame_root = os.path.join(\n                self.img_folder, os.path.dirname(video_name)\n            )\n        else:\n            video_frame_root = os.path.join(self.img_folder, video_name)\n\n        video_mask_root = os.path.join(self.gt_folder, video_name)\n\n        if self.is_palette:\n            segment_loader = PalettisedPNGSegmentLoader(video_mask_root)\n        else:\n            segment_loader = MultiplePNGSegmentLoader(\n                video_mask_root, self.single_object_mode\n            )\n\n        all_frames = sorted(glob.glob(os.path.join(video_frame_root, \"*.jpg\")))\n        if self.truncate_video > 0:\n            all_frames = all_frames[: self.truncate_video]\n        frames = []\n        for _, fpath in enumerate(all_frames[:: self.sample_rate]):\n            fid = int(os.path.basename(fpath).split(\".\")[0])\n            frames.append(VOSFrame(fid, image_path=fpath))\n        video = VOSVideo(video_name, idx, frames)\n        return video, segment_loader\n\n    def __len__(self):\n        return len(self.video_names)\n\n\nclass SA1BRawDataset(VOSRawDataset):\n    def __init__(\n        self,\n        img_folder,\n        gt_folder,\n        file_list_txt=None,\n        excluded_videos_list_txt=None,\n        num_frames=1,\n        mask_area_frac_thresh=1.1,  # no filtering by default\n        uncertain_iou=-1,  # no filtering by default\n    ):\n        self.img_folder = img_folder\n        self.gt_folder = gt_folder\n        self.num_frames = num_frames\n        self.mask_area_frac_thresh = mask_area_frac_thresh\n        self.uncertain_iou = uncertain_iou  # stability score\n\n        # Read the subset defined in file_list_txt\n        if file_list_txt is not None:\n            with g_pathmgr.open(file_list_txt, \"r\") as f:\n                subset = [os.path.splitext(line.strip())[0] for line in f]\n        else:\n            subset = os.listdir(self.img_folder)\n            subset = [\n                path.split(\".\")[0] for path in subset if path.endswith(\".jpg\")\n            ]  # remove extension\n\n        # Read and process excluded files if provided\n        if excluded_videos_list_txt is not None:\n            with g_pathmgr.open(excluded_videos_list_txt, \"r\") as f:\n                excluded_files = [os.path.splitext(line.strip())[0] for line in f]\n        else:\n            excluded_files = []\n\n        # Check if it's not in excluded_files and it exists\n        self.video_names = [\n            video_name for video_name in subset if video_name not in excluded_files\n        ]\n\n    def get_video(self, idx):\n        \"\"\"\n        Given a VOSVideo object, return the mask tensors.\n        \"\"\"\n        video_name = self.video_names[idx]\n\n        video_frame_path = os.path.join(self.img_folder, video_name + \".jpg\")\n        video_mask_path = os.path.join(self.gt_folder, video_name + \".json\")\n\n        segment_loader = SA1BSegmentLoader(\n            video_mask_path,\n            mask_area_frac_thresh=self.mask_area_frac_thresh,\n            video_frame_path=video_frame_path,\n            uncertain_iou=self.uncertain_iou,\n        )\n\n        frames = []\n        for frame_idx in range(self.num_frames):\n            frames.append(VOSFrame(frame_idx, image_path=video_frame_path))\n        video_name = video_name.split(\"_\")[-1]  # filename is sa_{int}\n        # video id needs to be image_id to be able to load correct annotation file during eval\n        video = VOSVideo(video_name, int(video_name), frames)\n        return video, segment_loader\n\n    def __len__(self):\n        return len(self.video_names)\n\n\nclass JSONRawDataset(VOSRawDataset):\n    \"\"\"\n    Dataset where the annotation in the format of SA-V json files\n    \"\"\"\n\n    def __init__(\n        self,\n        img_folder,\n        gt_folder,\n        file_list_txt=None,\n        excluded_videos_list_txt=None,\n        sample_rate=1,\n        rm_unannotated=True,\n        ann_every=1,\n        frames_fps=24,\n    ):\n        self.gt_folder = gt_folder\n        self.img_folder = img_folder\n        self.sample_rate = sample_rate\n        self.rm_unannotated = rm_unannotated\n        self.ann_every = ann_every\n        self.frames_fps = frames_fps\n\n        # Read and process excluded files if provided\n        excluded_files = []\n        if excluded_videos_list_txt is not None:\n            if isinstance(excluded_videos_list_txt, str):\n                excluded_videos_lists = [excluded_videos_list_txt]\n            elif isinstance(excluded_videos_list_txt, ListConfig):\n                excluded_videos_lists = list(excluded_videos_list_txt)\n            else:\n                raise NotImplementedError\n\n            for excluded_videos_list_txt in excluded_videos_lists:\n                with open(excluded_videos_list_txt, \"r\") as f:\n                    excluded_files.extend(\n                        [os.path.splitext(line.strip())[0] for line in f]\n                    )\n        excluded_files = set(excluded_files)\n\n        # Read the subset defined in file_list_txt\n        if file_list_txt is not None:\n            with g_pathmgr.open(file_list_txt, \"r\") as f:\n                subset = [os.path.splitext(line.strip())[0] for line in f]\n        else:\n            subset = os.listdir(self.img_folder)\n\n        self.video_names = sorted(\n            [video_name for video_name in subset if video_name not in excluded_files]\n        )\n\n    def get_video(self, video_idx):\n        \"\"\"\n        Given a VOSVideo object, return the mask tensors.\n        \"\"\"\n        video_name = self.video_names[video_idx]\n        video_json_path = os.path.join(self.gt_folder, video_name + \"_manual.json\")\n        segment_loader = JSONSegmentLoader(\n            video_json_path=video_json_path,\n            ann_every=self.ann_every,\n            frames_fps=self.frames_fps,\n        )\n\n        frame_ids = [\n            int(os.path.splitext(frame_name)[0])\n            for frame_name in sorted(\n                os.listdir(os.path.join(self.img_folder, video_name))\n            )\n        ]\n\n        frames = [\n            VOSFrame(\n                frame_id,\n                image_path=os.path.join(\n                    self.img_folder, f\"{video_name}/%05d.jpg\" % (frame_id)\n                ),\n            )\n            for frame_id in frame_ids[:: self.sample_rate]\n        ]\n\n        if self.rm_unannotated:\n            # Eliminate the frames that have not been annotated\n            valid_frame_ids = [\n                i * segment_loader.ann_every\n                for i, annot in enumerate(segment_loader.frame_annots)\n                if annot is not None and None not in annot\n            ]\n            frames = [f for f in frames if f.frame_idx in valid_frame_ids]\n\n        video = VOSVideo(video_name, video_idx, frames)\n        return video, segment_loader\n\n    def __len__(self):\n        return len(self.video_names)\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/dataset/vos_sampler.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport random\nfrom dataclasses import dataclass\nfrom typing import List\n\nfrom training.dataset.vos_segment_loader import LazySegments\n\nMAX_RETRIES = 1000\n\n\n@dataclass\nclass SampledFramesAndObjects:\n    frames: List[int]\n    object_ids: List[int]\n\n\nclass VOSSampler:\n    def __init__(self, sort_frames=True):\n        # frames are ordered by frame id when sort_frames is True\n        self.sort_frames = sort_frames\n\n    def sample(self, video):\n        raise NotImplementedError()\n\n\nclass RandomUniformSampler(VOSSampler):\n    def __init__(\n        self,\n        num_frames,\n        max_num_objects,\n        reverse_time_prob=0.0,\n    ):\n        self.num_frames = num_frames\n        self.max_num_objects = max_num_objects\n        self.reverse_time_prob = reverse_time_prob\n\n    def sample(self, video, segment_loader, epoch=None):\n\n        for retry in range(MAX_RETRIES):\n            if len(video.frames) < self.num_frames:\n                raise Exception(\n                    f\"Cannot sample {self.num_frames} frames from video {video.video_name} as it only has {len(video.frames)} annotated frames.\"\n                )\n            start = random.randrange(0, len(video.frames) - self.num_frames + 1)\n            frames = [video.frames[start + step] for step in range(self.num_frames)]\n            if random.uniform(0, 1) < self.reverse_time_prob:\n                # Reverse time\n                frames = frames[::-1]\n\n            # Get first frame object ids\n            visible_object_ids = []\n            loaded_segms = segment_loader.load(frames[0].frame_idx)\n            if isinstance(loaded_segms, LazySegments):\n                # LazySegments for SA1BRawDataset\n                visible_object_ids = list(loaded_segms.keys())\n            else:\n                for object_id, segment in segment_loader.load(\n                    frames[0].frame_idx\n                ).items():\n                    if segment.sum():\n                        visible_object_ids.append(object_id)\n\n            # First frame needs to have at least a target to track\n            if len(visible_object_ids) > 0:\n                break\n            if retry >= MAX_RETRIES - 1:\n                raise Exception(\"No visible objects\")\n\n        object_ids = random.sample(\n            visible_object_ids,\n            min(len(visible_object_ids), self.max_num_objects),\n        )\n        return SampledFramesAndObjects(frames=frames, object_ids=object_ids)\n\n\nclass EvalSampler(VOSSampler):\n    \"\"\"\n    VOS Sampler for evaluation: sampling all the frames and all the objects in a video\n    \"\"\"\n\n    def __init__(\n        self,\n    ):\n        super().__init__()\n\n    def sample(self, video, segment_loader, epoch=None):\n        \"\"\"\n        Sampling all the frames and all the objects\n        \"\"\"\n        if self.sort_frames:\n            # ordered by frame id\n            frames = sorted(video.frames, key=lambda x: x.frame_idx)\n        else:\n            # use the original order\n            frames = video.frames\n        object_ids = segment_loader.load(frames[0].frame_idx).keys()\n        if len(object_ids) == 0:\n            raise Exception(\"First frame of the video has no objects\")\n\n        return SampledFramesAndObjects(frames=frames, object_ids=object_ids)\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/dataset/vos_segment_loader.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport glob\nimport json\nimport os\n\nimport numpy as np\nimport pandas as pd\nimport torch\n\nfrom PIL import Image as PILImage\n\ntry:\n    from pycocotools import mask as mask_utils\nexcept:\n    pass\n\n\nclass JSONSegmentLoader:\n    def __init__(self, video_json_path, ann_every=1, frames_fps=24, valid_obj_ids=None):\n        # Annotations in the json are provided every ann_every th frame\n        self.ann_every = ann_every\n        # Ids of the objects to consider when sampling this video\n        self.valid_obj_ids = valid_obj_ids\n        with open(video_json_path, \"r\") as f:\n            data = json.load(f)\n            if isinstance(data, list):\n                self.frame_annots = data\n            elif isinstance(data, dict):\n                masklet_field_name = \"masklet\" if \"masklet\" in data else \"masks\"\n                self.frame_annots = data[masklet_field_name]\n                if \"fps\" in data:\n                    if isinstance(data[\"fps\"], list):\n                        annotations_fps = int(data[\"fps\"][0])\n                    else:\n                        annotations_fps = int(data[\"fps\"])\n                    assert frames_fps % annotations_fps == 0\n                    self.ann_every = frames_fps // annotations_fps\n            else:\n                raise NotImplementedError\n\n    def load(self, frame_id, obj_ids=None):\n        assert frame_id % self.ann_every == 0\n        rle_mask = self.frame_annots[frame_id // self.ann_every]\n\n        valid_objs_ids = set(range(len(rle_mask)))\n        if self.valid_obj_ids is not None:\n            # Remove the masklets that have been filtered out for this video\n            valid_objs_ids &= set(self.valid_obj_ids)\n        if obj_ids is not None:\n            # Only keep the objects that have been sampled\n            valid_objs_ids &= set(obj_ids)\n        valid_objs_ids = sorted(list(valid_objs_ids))\n\n        # Construct rle_masks_filtered that only contains the rle masks we are interested in\n        id_2_idx = {}\n        rle_mask_filtered = []\n        for obj_id in valid_objs_ids:\n            if rle_mask[obj_id] is not None:\n                id_2_idx[obj_id] = len(rle_mask_filtered)\n                rle_mask_filtered.append(rle_mask[obj_id])\n            else:\n                id_2_idx[obj_id] = None\n\n        # Decode the masks\n        raw_segments = torch.from_numpy(mask_utils.decode(rle_mask_filtered)).permute(\n            2, 0, 1\n        )  # （num_obj, h, w）\n        segments = {}\n        for obj_id in valid_objs_ids:\n            if id_2_idx[obj_id] is None:\n                segments[obj_id] = None\n            else:\n                idx = id_2_idx[obj_id]\n                segments[obj_id] = raw_segments[idx]\n        return segments\n\n    def get_valid_obj_frames_ids(self, num_frames_min=None):\n        # For each object, find all the frames with a valid (not None) mask\n        num_objects = len(self.frame_annots[0])\n\n        # The result dict associates each obj_id with the id of its valid frames\n        res = {obj_id: [] for obj_id in range(num_objects)}\n\n        for annot_idx, annot in enumerate(self.frame_annots):\n            for obj_id in range(num_objects):\n                if annot[obj_id] is not None:\n                    res[obj_id].append(int(annot_idx * self.ann_every))\n\n        if num_frames_min is not None:\n            # Remove masklets that have less than num_frames_min valid masks\n            for obj_id, valid_frames in list(res.items()):\n                if len(valid_frames) < num_frames_min:\n                    res.pop(obj_id)\n\n        return res\n\n\nclass PalettisedPNGSegmentLoader:\n    def __init__(self, video_png_root):\n        \"\"\"\n        SegmentLoader for datasets with masks stored as palettised PNGs.\n        video_png_root: the folder contains all the masks stored in png\n        \"\"\"\n        self.video_png_root = video_png_root\n        # build a mapping from frame id to their PNG mask path\n        # note that in some datasets, the PNG paths could have more\n        # than 5 digits, e.g. \"00000000.png\" instead of \"00000.png\"\n        png_filenames = os.listdir(self.video_png_root)\n        self.frame_id_to_png_filename = {}\n        for filename in png_filenames:\n            frame_id, _ = os.path.splitext(filename)\n            self.frame_id_to_png_filename[int(frame_id)] = filename\n\n    def load(self, frame_id):\n        \"\"\"\n        load the single palettised mask from the disk (path: f'{self.video_png_root}/{frame_id:05d}.png')\n        Args:\n            frame_id: int, define the mask path\n        Return:\n            binary_segments: dict\n        \"\"\"\n        # check the path\n        mask_path = os.path.join(\n            self.video_png_root, self.frame_id_to_png_filename[frame_id]\n        )\n\n        # load the mask\n        masks = PILImage.open(mask_path).convert(\"P\")\n        masks = np.array(masks)\n\n        object_id = pd.unique(masks.flatten())\n        object_id = object_id[object_id != 0]  # remove background (0)\n\n        # convert into N binary segmentation masks\n        binary_segments = {}\n        for i in object_id:\n            bs = masks == i\n            binary_segments[i] = torch.from_numpy(bs)\n\n        return binary_segments\n\n    def __len__(self):\n        return\n\n\nclass MultiplePNGSegmentLoader:\n    def __init__(self, video_png_root, single_object_mode=False):\n        \"\"\"\n        video_png_root: the folder contains all the masks stored in png\n        single_object_mode: whether to load only a single object at a time\n        \"\"\"\n        self.video_png_root = video_png_root\n        self.single_object_mode = single_object_mode\n        # read a mask to know the resolution of the video\n        if self.single_object_mode:\n            tmp_mask_path = glob.glob(os.path.join(video_png_root, \"*.png\"))[0]\n        else:\n            tmp_mask_path = glob.glob(os.path.join(video_png_root, \"*\", \"*.png\"))[0]\n        tmp_mask = np.array(PILImage.open(tmp_mask_path))\n        self.H = tmp_mask.shape[0]\n        self.W = tmp_mask.shape[1]\n        if self.single_object_mode:\n            self.obj_id = (\n                int(video_png_root.split(\"/\")[-1]) + 1\n            )  # offset by 1 as bg is 0\n        else:\n            self.obj_id = None\n\n    def load(self, frame_id):\n        if self.single_object_mode:\n            return self._load_single_png(frame_id)\n        else:\n            return self._load_multiple_pngs(frame_id)\n\n    def _load_single_png(self, frame_id):\n        \"\"\"\n        load single png from the disk (path: f'{self.obj_id}/{frame_id:05d}.png')\n        Args:\n            frame_id: int, define the mask path\n        Return:\n            binary_segments: dict\n        \"\"\"\n        mask_path = os.path.join(self.video_png_root, f\"{frame_id:05d}.png\")\n        binary_segments = {}\n\n        if os.path.exists(mask_path):\n            mask = np.array(PILImage.open(mask_path))\n        else:\n            # if png doesn't exist, empty mask\n            mask = np.zeros((self.H, self.W), dtype=bool)\n        binary_segments[self.obj_id] = torch.from_numpy(mask > 0)\n        return binary_segments\n\n    def _load_multiple_pngs(self, frame_id):\n        \"\"\"\n        load multiple png masks from the disk (path: f'{obj_id}/{frame_id:05d}.png')\n        Args:\n            frame_id: int, define the mask path\n        Return:\n            binary_segments: dict\n        \"\"\"\n        # get the path\n        all_objects = sorted(glob.glob(os.path.join(self.video_png_root, \"*\")))\n        num_objects = len(all_objects)\n        assert num_objects > 0\n\n        # load the masks\n        binary_segments = {}\n        for obj_folder in all_objects:\n            # obj_folder is {video_name}/{obj_id}, obj_id is specified by the name of the folder\n            obj_id = int(obj_folder.split(\"/\")[-1])\n            obj_id = obj_id + 1  # offset 1 as bg is 0\n            mask_path = os.path.join(obj_folder, f\"{frame_id:05d}.png\")\n            if os.path.exists(mask_path):\n                mask = np.array(PILImage.open(mask_path))\n            else:\n                mask = np.zeros((self.H, self.W), dtype=bool)\n            binary_segments[obj_id] = torch.from_numpy(mask > 0)\n\n        return binary_segments\n\n    def __len__(self):\n        return\n\n\nclass LazySegments:\n    \"\"\"\n    Only decodes segments that are actually used.\n    \"\"\"\n\n    def __init__(self):\n        self.segments = {}\n        self.cache = {}\n\n    def __setitem__(self, key, item):\n        self.segments[key] = item\n\n    def __getitem__(self, key):\n        if key in self.cache:\n            return self.cache[key]\n        rle = self.segments[key]\n        mask = torch.from_numpy(mask_utils.decode([rle])).permute(2, 0, 1)[0]\n        self.cache[key] = mask\n        return mask\n\n    def __contains__(self, key):\n        return key in self.segments\n\n    def __len__(self):\n        return len(self.segments)\n\n    def keys(self):\n        return self.segments.keys()\n\n\nclass SA1BSegmentLoader:\n    def __init__(\n        self,\n        video_mask_path,\n        mask_area_frac_thresh=1.1,\n        video_frame_path=None,\n        uncertain_iou=-1,\n    ):\n        with open(video_mask_path, \"r\") as f:\n            self.frame_annots = json.load(f)\n\n        if mask_area_frac_thresh <= 1.0:\n            # Lazily read frame\n            orig_w, orig_h = PILImage.open(video_frame_path).size\n            area = orig_w * orig_h\n\n        self.frame_annots = self.frame_annots[\"annotations\"]\n\n        rle_masks = []\n        for frame_annot in self.frame_annots:\n            if not frame_annot[\"area\"] > 0:\n                continue\n            if (\"uncertain_iou\" in frame_annot) and (\n                frame_annot[\"uncertain_iou\"] < uncertain_iou\n            ):\n                # uncertain_iou is stability score\n                continue\n            if (\n                mask_area_frac_thresh <= 1.0\n                and (frame_annot[\"area\"] / area) >= mask_area_frac_thresh\n            ):\n                continue\n            rle_masks.append(frame_annot[\"segmentation\"])\n\n        self.segments = LazySegments()\n        for i, rle in enumerate(rle_masks):\n            self.segments[i] = rle\n\n    def load(self, frame_idx):\n        return self.segments\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/loss_fns.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom collections import defaultdict\nfrom typing import Dict, List\n\nimport torch\nimport torch.distributed\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom training.trainer import CORE_LOSS_KEY\n\nfrom training.utils.distributed import get_world_size, is_dist_avail_and_initialized\n\n\ndef dice_loss(inputs, targets, num_objects, loss_on_multimask=False):\n    \"\"\"\n    Compute the DICE loss, similar to generalized IOU for masks\n    Args:\n        inputs: A float tensor of arbitrary shape.\n                The predictions for each example.\n        targets: A float tensor with the same shape as inputs. Stores the binary\n                 classification label for each element in inputs\n                (0 for the negative class and 1 for the positive class).\n        num_objects: Number of objects in the batch\n        loss_on_multimask: True if multimask prediction is enabled\n    Returns:\n        Dice loss tensor\n    \"\"\"\n    inputs = inputs.sigmoid()\n    if loss_on_multimask:\n        # inputs and targets are [N, M, H, W] where M corresponds to multiple predicted masks\n        assert inputs.dim() == 4 and targets.dim() == 4\n        # flatten spatial dimension while keeping multimask channel dimension\n        inputs = inputs.flatten(2)\n        targets = targets.flatten(2)\n        numerator = 2 * (inputs * targets).sum(-1)\n    else:\n        inputs = inputs.flatten(1)\n        numerator = 2 * (inputs * targets).sum(1)\n    denominator = inputs.sum(-1) + targets.sum(-1)\n    loss = 1 - (numerator + 1) / (denominator + 1)\n    if loss_on_multimask:\n        return loss / num_objects\n    return loss.sum() / num_objects\n\n\ndef sigmoid_focal_loss(\n    inputs,\n    targets,\n    num_objects,\n    alpha: float = 0.25,\n    gamma: float = 2,\n    loss_on_multimask=False,\n):\n    \"\"\"\n    Loss used in RetinaNet for dense detection: https://arxiv.org/abs/1708.02002.\n    Args:\n        inputs: A float tensor of arbitrary shape.\n                The predictions for each example.\n        targets: A float tensor with the same shape as inputs. Stores the binary\n                 classification label for each element in inputs\n                (0 for the negative class and 1 for the positive class).\n        num_objects: Number of objects in the batch\n        alpha: (optional) Weighting factor in range (0,1) to balance\n                positive vs negative examples. Default = -1 (no weighting).\n        gamma: Exponent of the modulating factor (1 - p_t) to\n               balance easy vs hard examples.\n        loss_on_multimask: True if multimask prediction is enabled\n    Returns:\n        focal loss tensor\n    \"\"\"\n    prob = inputs.sigmoid()\n    ce_loss = F.binary_cross_entropy_with_logits(inputs, targets, reduction=\"none\")\n    p_t = prob * targets + (1 - prob) * (1 - targets)\n    loss = ce_loss * ((1 - p_t) ** gamma)\n\n    if alpha >= 0:\n        alpha_t = alpha * targets + (1 - alpha) * (1 - targets)\n        loss = alpha_t * loss\n\n    if loss_on_multimask:\n        # loss is [N, M, H, W] where M corresponds to multiple predicted masks\n        assert loss.dim() == 4\n        return loss.flatten(2).mean(-1) / num_objects  # average over spatial dims\n    return loss.mean(1).sum() / num_objects\n\n\ndef iou_loss(\n    inputs, targets, pred_ious, num_objects, loss_on_multimask=False, use_l1_loss=False\n):\n    \"\"\"\n    Args:\n        inputs: A float tensor of arbitrary shape.\n                The predictions for each example.\n        targets: A float tensor with the same shape as inputs. Stores the binary\n                 classification label for each element in inputs\n                (0 for the negative class and 1 for the positive class).\n        pred_ious: A float tensor containing the predicted IoUs scores per mask\n        num_objects: Number of objects in the batch\n        loss_on_multimask: True if multimask prediction is enabled\n        use_l1_loss: Whether to use L1 loss is used instead of MSE loss\n    Returns:\n        IoU loss tensor\n    \"\"\"\n    assert inputs.dim() == 4 and targets.dim() == 4\n    pred_mask = inputs.flatten(2) > 0\n    gt_mask = targets.flatten(2) > 0\n    area_i = torch.sum(pred_mask & gt_mask, dim=-1).float()\n    area_u = torch.sum(pred_mask | gt_mask, dim=-1).float()\n    actual_ious = area_i / torch.clamp(area_u, min=1.0)\n\n    if use_l1_loss:\n        loss = F.l1_loss(pred_ious, actual_ious, reduction=\"none\")\n    else:\n        loss = F.mse_loss(pred_ious, actual_ious, reduction=\"none\")\n    if loss_on_multimask:\n        return loss / num_objects\n    return loss.sum() / num_objects\n\n\nclass MultiStepMultiMasksAndIous(nn.Module):\n    def __init__(\n        self,\n        weight_dict,\n        focal_alpha=0.25,\n        focal_gamma=2,\n        supervise_all_iou=False,\n        iou_use_l1_loss=False,\n        pred_obj_scores=False,\n        focal_gamma_obj_score=0.0,\n        focal_alpha_obj_score=-1,\n    ):\n        \"\"\"\n        This class computes the multi-step multi-mask and IoU losses.\n        Args:\n            weight_dict: dict containing weights for focal, dice, iou losses\n            focal_alpha: alpha for sigmoid focal loss\n            focal_gamma: gamma for sigmoid focal loss\n            supervise_all_iou: if True, back-prop iou losses for all predicted masks\n            iou_use_l1_loss: use L1 loss instead of MSE loss for iou\n            pred_obj_scores: if True, compute loss for object scores\n            focal_gamma_obj_score: gamma for sigmoid focal loss on object scores\n            focal_alpha_obj_score: alpha for sigmoid focal loss on object scores\n        \"\"\"\n\n        super().__init__()\n        self.weight_dict = weight_dict\n        self.focal_alpha = focal_alpha\n        self.focal_gamma = focal_gamma\n        assert \"loss_mask\" in self.weight_dict\n        assert \"loss_dice\" in self.weight_dict\n        assert \"loss_iou\" in self.weight_dict\n        if \"loss_class\" not in self.weight_dict:\n            self.weight_dict[\"loss_class\"] = 0.0\n\n        self.focal_alpha_obj_score = focal_alpha_obj_score\n        self.focal_gamma_obj_score = focal_gamma_obj_score\n        self.supervise_all_iou = supervise_all_iou\n        self.iou_use_l1_loss = iou_use_l1_loss\n        self.pred_obj_scores = pred_obj_scores\n\n    def forward(self, outs_batch: List[Dict], targets_batch: torch.Tensor):\n        assert len(outs_batch) == len(targets_batch)\n        num_objects = torch.tensor(\n            (targets_batch.shape[1]), device=targets_batch.device, dtype=torch.float\n        )  # Number of objects is fixed within a batch\n        if is_dist_avail_and_initialized():\n            torch.distributed.all_reduce(num_objects)\n        num_objects = torch.clamp(num_objects / get_world_size(), min=1).item()\n\n        losses = defaultdict(int)\n        for outs, targets in zip(outs_batch, targets_batch):\n            cur_losses = self._forward(outs, targets, num_objects)\n            for k, v in cur_losses.items():\n                losses[k] += v\n\n        return losses\n\n    def _forward(self, outputs: Dict, targets: torch.Tensor, num_objects):\n        \"\"\"\n        Compute the losses related to the masks: the focal loss and the dice loss.\n        and also the MAE or MSE loss between predicted IoUs and actual IoUs.\n\n        Here \"multistep_pred_multimasks_high_res\" is a list of multimasks (tensors\n        of shape [N, M, H, W], where M could be 1 or larger, corresponding to\n        one or multiple predicted masks from a click.\n\n        We back-propagate focal, dice losses only on the prediction channel\n        with the lowest focal+dice loss between predicted mask and ground-truth.\n        If `supervise_all_iou` is True, we backpropagate ious losses for all predicted masks.\n        \"\"\"\n\n        target_masks = targets.unsqueeze(1).float()\n        assert target_masks.dim() == 4  # [N, 1, H, W]\n        src_masks_list = outputs[\"multistep_pred_multimasks_high_res\"]\n        ious_list = outputs[\"multistep_pred_ious\"]\n        object_score_logits_list = outputs[\"multistep_object_score_logits\"]\n\n        assert len(src_masks_list) == len(ious_list)\n        assert len(object_score_logits_list) == len(ious_list)\n\n        # accumulate the loss over prediction steps\n        losses = {\"loss_mask\": 0, \"loss_dice\": 0, \"loss_iou\": 0, \"loss_class\": 0}\n        for src_masks, ious, object_score_logits in zip(\n            src_masks_list, ious_list, object_score_logits_list\n        ):\n            self._update_losses(\n                losses, src_masks, target_masks, ious, num_objects, object_score_logits\n            )\n        losses[CORE_LOSS_KEY] = self.reduce_loss(losses)\n        return losses\n\n    def _update_losses(\n        self, losses, src_masks, target_masks, ious, num_objects, object_score_logits\n    ):\n        target_masks = target_masks.expand_as(src_masks)\n        # get focal, dice and iou loss on all output masks in a prediction step\n        loss_multimask = sigmoid_focal_loss(\n            src_masks,\n            target_masks,\n            num_objects,\n            alpha=self.focal_alpha,\n            gamma=self.focal_gamma,\n            loss_on_multimask=True,\n        )\n        loss_multidice = dice_loss(\n            src_masks, target_masks, num_objects, loss_on_multimask=True\n        )\n        if not self.pred_obj_scores:\n            loss_class = torch.tensor(\n                0.0, dtype=loss_multimask.dtype, device=loss_multimask.device\n            )\n            target_obj = torch.ones(\n                loss_multimask.shape[0],\n                1,\n                dtype=loss_multimask.dtype,\n                device=loss_multimask.device,\n            )\n        else:\n            target_obj = torch.any((target_masks[:, 0] > 0).flatten(1), dim=-1)[\n                ..., None\n            ].float()\n            loss_class = sigmoid_focal_loss(\n                object_score_logits,\n                target_obj,\n                num_objects,\n                alpha=self.focal_alpha_obj_score,\n                gamma=self.focal_gamma_obj_score,\n            )\n\n        loss_multiiou = iou_loss(\n            src_masks,\n            target_masks,\n            ious,\n            num_objects,\n            loss_on_multimask=True,\n            use_l1_loss=self.iou_use_l1_loss,\n        )\n        assert loss_multimask.dim() == 2\n        assert loss_multidice.dim() == 2\n        assert loss_multiiou.dim() == 2\n        if loss_multimask.size(1) > 1:\n            # take the mask indices with the smallest focal + dice loss for back propagation\n            loss_combo = (\n                loss_multimask * self.weight_dict[\"loss_mask\"]\n                + loss_multidice * self.weight_dict[\"loss_dice\"]\n            )\n            best_loss_inds = torch.argmin(loss_combo, dim=-1)\n            batch_inds = torch.arange(loss_combo.size(0), device=loss_combo.device)\n            loss_mask = loss_multimask[batch_inds, best_loss_inds].unsqueeze(1)\n            loss_dice = loss_multidice[batch_inds, best_loss_inds].unsqueeze(1)\n            # calculate the iou prediction and slot losses only in the index\n            # with the minimum loss for each mask (to be consistent w/ SAM)\n            if self.supervise_all_iou:\n                loss_iou = loss_multiiou.mean(dim=-1).unsqueeze(1)\n            else:\n                loss_iou = loss_multiiou[batch_inds, best_loss_inds].unsqueeze(1)\n        else:\n            loss_mask = loss_multimask\n            loss_dice = loss_multidice\n            loss_iou = loss_multiiou\n\n        # backprop focal, dice and iou loss only if obj present\n        loss_mask = loss_mask * target_obj\n        loss_dice = loss_dice * target_obj\n        loss_iou = loss_iou * target_obj\n\n        # sum over batch dimension (note that the losses are already divided by num_objects)\n        losses[\"loss_mask\"] += loss_mask.sum()\n        losses[\"loss_dice\"] += loss_dice.sum()\n        losses[\"loss_iou\"] += loss_iou.sum()\n        losses[\"loss_class\"] += loss_class\n\n    def reduce_loss(self, losses):\n        reduced_loss = 0.0\n        for loss_key, weight in self.weight_dict.items():\n            if loss_key not in losses:\n                raise ValueError(f\"{type(self)} doesn't compute {loss_key}\")\n            if weight != 0:\n                reduced_loss += losses[loss_key] * weight\n\n        return reduced_loss\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/model/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/optimizer.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport fnmatch\nimport inspect\nimport itertools\nimport logging\nimport types\nfrom typing import (\n    Any,\n    Callable,\n    Dict,\n    Iterable,\n    List,\n    Mapping,\n    Optional,\n    Set,\n    Tuple,\n    Type,\n    Union,\n)\n\nimport hydra\n\nimport torch\nimport torch.nn as nn\nfrom omegaconf import DictConfig\nfrom torch import Tensor\n\n\nclass Optimizer:\n    def __init__(self, optimizer, schedulers=None) -> None:\n        self.optimizer = optimizer\n        self.schedulers = schedulers\n        self._validate_optimizer_schedulers()\n        self.step_schedulers(0.0, 0)\n\n    def _validate_optimizer_schedulers(self):\n        if self.schedulers is None:\n            return\n        for _, set_of_schedulers in enumerate(self.schedulers):\n            for option, _ in set_of_schedulers.items():\n                assert option in self.optimizer.defaults, (\n                    \"Optimizer option \"\n                    f\"{option} not found in {self.optimizer}. Valid options are \"\n                    f\"{self.optimizer.defaults.keys()}\"\n                )\n\n    def step_schedulers(self, where: float, step: int) -> None:\n        if self.schedulers is None:\n            return\n        for i, param_group in enumerate(self.optimizer.param_groups):\n            for option, scheduler in self.schedulers[i].items():\n                if \"step\" in inspect.signature(scheduler.__call__).parameters:\n                    new_value = scheduler(step=step, where=where)\n                elif (\n                    hasattr(scheduler, \"scheduler\")\n                    and \"step\"\n                    in inspect.signature(scheduler.scheduler.__call__).parameters\n                ):\n                    # To handle ValueScaler wrappers\n                    new_value = scheduler(step=step, where=where)\n                else:\n                    new_value = scheduler(where)\n                param_group[option] = new_value\n\n    def step(self, where, step, closure=None):\n        self.step_schedulers(where, step)\n        return self.optimizer.step(closure)\n\n    def zero_grad(self, *args, **kwargs):\n        return self.optimizer.zero_grad(*args, **kwargs)\n\n\ndef set_default_parameters(\n    scheduler_cfgs: List[DictConfig], all_parameter_names: Set[str]\n) -> None:\n    \"\"\"Set up the \"default\" scheduler with the right parameters.\n\n    Args:\n        scheduler_cgfs: A list of scheduler configs, where each scheduler also\n            specifies which parameters it applies to, based on the names of parameters\n            or the class of the modules. At most one scheduler is allowed to skip this\n            specification, which is used as a \"default\" specification for any remaining\n            parameters.\n        all_parameter_names: Names of all the parameters to consider.\n    \"\"\"\n    constraints = [\n        scheduler_cfg.parameter_names\n        for scheduler_cfg in scheduler_cfgs\n        if scheduler_cfg.parameter_names is not None\n    ]\n    if len(constraints) == 0:\n        default_params = set(all_parameter_names)\n    else:\n        default_params = all_parameter_names - set.union(*constraints)\n    default_count = 0\n    for scheduler_cfg in scheduler_cfgs:\n        if scheduler_cfg.parameter_names is None:\n            scheduler_cfg.parameter_names = default_params\n            default_count += 1\n    assert default_count <= 1, \"Only one scheduler per option can be default\"\n    if default_count == 0:\n        # No default scheduler specified, add a default, but without any scheduler\n        # for that option\n        scheduler_cfgs.append({\"parameter_names\": default_params})\n\n\ndef name_constraints_to_parameters(\n    param_constraints: List[Set[str]], named_parameters: Dict[str, Tensor]\n) -> List[torch.nn.Parameter]:\n    \"\"\"Return parameters which match the intersection of parameter constraints.\n\n    Note that this returns the parameters themselves, not their names.\n\n    Args:\n        param_constraints: A list, with each element being a set of allowed parameters.\n        named_parameters: Mapping from a parameter name to the parameter itself.\n\n    Returns:\n        A list containing the parameters which overlap with _each_ constraint set from\n        param_constraints.\n    \"\"\"\n    matching_names = set.intersection(*param_constraints)\n    return [value for name, value in named_parameters.items() if name in matching_names]\n\n\ndef map_scheduler_cfgs_to_param_groups(\n    all_scheduler_cfgs: Iterable[List[Dict]],\n    named_parameters: Dict[str, Tensor],\n) -> Tuple[List[Dict[Any, Any]], List[Dict[str, List[torch.nn.Parameter]]]]:\n    \"\"\"Produce parameter groups corresponding to all the scheduler configs.\n\n    Takes all the scheduler configs, each of which applies to a specific optimizer\n    option (like \"lr\" or \"weight_decay\") and has a set of parameter names which it\n    applies to, and produces a final set of param groups where each param group\n    covers all the options which apply to a particular set of parameters.\n\n    Args:\n        all_scheduler_cfgs: All the scheduler configs covering every option.\n        named_parameters: Mapping from a parameter name to the parameter itself.\n    Returns:\n        Tuple of lists of schedulers and param_groups, where schedulers[i]\n        applies to param_groups[i].\n    \"\"\"\n\n    scheduler_cfgs_per_param_group = itertools.product(*all_scheduler_cfgs)\n    schedulers = []\n    param_groups = []\n    for scheduler_cfgs in scheduler_cfgs_per_param_group:\n        param_constraints = [\n            scheduler_cfg[\"parameter_names\"] for scheduler_cfg in scheduler_cfgs\n        ]\n        matching_parameters = name_constraints_to_parameters(\n            param_constraints, named_parameters\n        )\n        if len(matching_parameters) == 0:  # If no overlap of parameters, skip\n            continue\n        schedulers_for_group = {\n            scheduler_cfg[\"option\"]: scheduler_cfg[\"scheduler\"]\n            for scheduler_cfg in scheduler_cfgs\n            if \"option\" in scheduler_cfg\n        }\n        schedulers.append(schedulers_for_group)\n        param_groups.append({\"params\": matching_parameters})\n    return schedulers, param_groups\n\n\ndef validate_param_group_params(param_groups: List[Dict], model: nn.Module):\n    \"\"\"Check that the param groups are non-overlapping and cover all the parameters.\n\n    Args:\n        param_groups: List of all param groups\n        model: Model to validate against. The check ensures that all the model\n            parameters are part of param_groups\n    \"\"\"\n    for pg in param_groups:\n        # no param should be repeated within a group\n        assert len(pg[\"params\"]) == len(set(pg[\"params\"]))\n    parameters = [set(param_group[\"params\"]) for param_group in param_groups]\n    model_parameters = {parameter for _, parameter in model.named_parameters()}\n    for p1, p2 in itertools.permutations(parameters, 2):\n        assert p1.isdisjoint(p2), \"Scheduler generated param_groups should be disjoint\"\n    assert set.union(*parameters) == model_parameters, (\n        \"Scheduler generated param_groups must include all parameters of the model.\"\n        f\" Found {len(set.union(*parameters))} params whereas model has\"\n        f\" {len(model_parameters)} params\"\n    )\n\n\ndef unix_module_cls_pattern_to_parameter_names(\n    filter_module_cls_names: List[str],\n    module_cls_to_param_names: Dict[Type, str],\n) -> Union[None, Set[str]]:\n    \"\"\"Returns param names which pass the filters specified in filter_module_cls_names.\n\n    Args:\n        filter_module_cls_names: A list of filter strings containing class names, like\n            [\"torch.nn.LayerNorm\", \"torch.nn.BatchNorm2d\"]\n        module_cls_to_param_names: Mapping from module classes to the parameter names\n            they contain. See `get_module_cls_to_param_names`.\n    \"\"\"\n    if filter_module_cls_names is None:\n        return set()\n    allowed_parameter_names = []\n    for module_cls_name in filter_module_cls_names:\n        module_cls = hydra.utils.get_class(module_cls_name)\n        if module_cls not in module_cls_to_param_names:\n            raise AssertionError(\n                f\"module_cls_name {module_cls_name} does not \"\n                \"match any classes in the model\"\n            )\n        matching_parameters = module_cls_to_param_names[module_cls]\n        assert (\n            len(matching_parameters) > 0\n        ), f\"module_cls_name {module_cls_name} does not contain any parameters in the model\"\n        logging.info(\n            f\"Matches for module_cls_name [{module_cls_name}]: {matching_parameters} \"\n        )\n        allowed_parameter_names.append(matching_parameters)\n    return set.union(*allowed_parameter_names)\n\n\ndef unix_param_pattern_to_parameter_names(\n    filter_param_names: Optional[List[str]],\n    parameter_names: Dict[str, torch.Tensor],\n) -> Union[None, Set[str]]:\n    \"\"\"Returns param names which pass the filters specified in filter_param_names.\n\n    Args:\n        filter_param_names: A list of unix-style filter strings with optional\n            wildcards, like [\"block.2.*\", \"block.2.linear.weight\"]\n        module_cls_to_param_names: Mapping from module classes to the parameter names\n            they contain. See `get_module_cls_to_param_names`.\n    \"\"\"\n\n    if filter_param_names is None:\n        return set()\n    allowed_parameter_names = []\n    for param_name in filter_param_names:\n        matching_parameters = set(fnmatch.filter(parameter_names, param_name))\n        assert (\n            len(matching_parameters) >= 1\n        ), f\"param_name {param_name} does not match any parameters in the model\"\n        logging.info(f\"Matches for param_name [{param_name}]: {matching_parameters}\")\n        allowed_parameter_names.append(matching_parameters)\n    return set.union(*allowed_parameter_names)\n\n\ndef _unix_pattern_to_parameter_names(\n    scheduler_cfg: DictConfig,\n    parameter_names: Set[str],\n    module_cls_to_param_names: Dict[Type, str],\n) -> Union[None, Set[str]]:\n    \"\"\"Returns param names which pass the filters specified in scheduler_cfg.\n\n    Args:\n        scheduler_cfg: The config for the scheduler\n        parameter_names: The set of all parameter names which will be filtered\n    \"\"\"\n    if \"param_names\" not in scheduler_cfg and \"module_cls_names\" not in scheduler_cfg:\n        return None\n    return unix_param_pattern_to_parameter_names(\n        scheduler_cfg.get(\"param_names\"), parameter_names\n    ).union(\n        unix_module_cls_pattern_to_parameter_names(\n            scheduler_cfg.get(\"module_cls_names\"), module_cls_to_param_names\n        )\n    )\n\n\ndef get_module_cls_to_param_names(\n    model: nn.Module, param_allowlist: Set[str] = None\n) -> Dict[Type, str]:\n    \"\"\"Produce a mapping from all the modules classes to the names of parames they own.\n\n    Only counts a parameter as part of the immediate parent module, i.e. recursive\n    parents do not count.\n\n    Args:\n        model: Model to iterate over\n        param_allowlist: If specified, only these param names will be processed\n    \"\"\"\n\n    module_cls_to_params = {}\n    for module_name, module in model.named_modules():\n        module_cls = type(module)\n        module_cls_to_params.setdefault(module_cls, set())\n        for param_name, _ in module.named_parameters(recurse=False):\n            full_param_name = get_full_parameter_name(module_name, param_name)\n            if param_allowlist is None or full_param_name in param_allowlist:\n                module_cls_to_params[module_cls].add(full_param_name)\n    return module_cls_to_params\n\n\ndef construct_optimizer(\n    model: torch.nn.Module,\n    optimizer_conf: Any,\n    options_conf: Mapping[str, List] = None,\n    param_group_modifiers_conf: List[Callable] = None,\n    param_allowlist: Optional[Set[str]] = None,\n    validate_param_groups=True,\n) -> Optimizer:\n    \"\"\"\n    Constructs a stochastic gradient descent or ADAM (or ADAMw) optimizer\n    with momentum. i.e, constructs a torch.optim.Optimizer with zero-weight decay\n    Batchnorm and/or no-update 1-D parameters support, based on the config.\n\n    Supports wrapping the optimizer with Layer-wise Adaptive Rate Scaling\n    (LARS): https://arxiv.org/abs/1708.03888\n\n    Args:\n        model: model to perform stochastic gradient descent\n            optimization or ADAM optimization.\n        optimizer_conf: Hydra config consisting a partial torch optimizer like SGD or\n            ADAM, still missing the params argument which this function provides to\n            produce the final optimizer\n        param_group_modifiers_conf: Optional user specified functions which can modify\n            the final scheduler configs before the optimizer's param groups are built\n        param_allowlist: The parameters to optimize. Parameters which are not part of\n            this allowlist will be skipped.\n        validate_param_groups: If enabled, valides that the produced param_groups don't\n            overlap and cover all the model parameters.\n    \"\"\"\n    if param_allowlist is None:\n        param_allowlist = {name for name, _ in model.named_parameters()}\n\n    named_parameters = {\n        name: param\n        for name, param in model.named_parameters()\n        if name in param_allowlist\n    }\n\n    if not options_conf:\n        optimizer = hydra.utils.instantiate(optimizer_conf, named_parameters.values())\n        return Optimizer(optimizer)\n\n    all_parameter_names = {\n        name for name, _ in model.named_parameters() if name in param_allowlist\n    }\n    module_cls_to_all_param_names = get_module_cls_to_param_names(\n        model, param_allowlist\n    )\n\n    scheduler_cfgs_per_option = hydra.utils.instantiate(options_conf)\n    all_scheduler_cfgs = []\n    for option, scheduler_cfgs in scheduler_cfgs_per_option.items():\n        for config in scheduler_cfgs:\n            config.option = option\n            config.parameter_names = _unix_pattern_to_parameter_names(\n                config, all_parameter_names, module_cls_to_all_param_names\n            )\n        set_default_parameters(scheduler_cfgs, all_parameter_names)\n        all_scheduler_cfgs.append(scheduler_cfgs)\n\n    if param_group_modifiers_conf:\n        for custom_param_modifier in param_group_modifiers_conf:\n            custom_param_modifier = hydra.utils.instantiate(custom_param_modifier)\n            all_scheduler_cfgs = custom_param_modifier(\n                scheduler_cfgs=all_scheduler_cfgs, model=model\n            )\n    schedulers, param_groups = map_scheduler_cfgs_to_param_groups(\n        all_scheduler_cfgs, named_parameters\n    )\n    if validate_param_groups:\n        validate_param_group_params(param_groups, model)\n    optimizer = hydra.utils.instantiate(optimizer_conf, param_groups)\n    return Optimizer(optimizer, schedulers)\n\n\ndef get_full_parameter_name(module_name, param_name):\n    if module_name == \"\":\n        return param_name\n    return f\"{module_name}.{param_name}\"\n\n\nclass GradientClipper:\n    \"\"\"\n    Gradient clipping utils that works for DDP\n    \"\"\"\n\n    def __init__(self, max_norm: float = 1.0, norm_type: int = 2):\n        assert isinstance(max_norm, (int, float)) or max_norm is None\n        self.max_norm = max_norm if max_norm is None else float(max_norm)\n        self.norm_type = norm_type\n\n    def __call__(self, model: nn.Module):\n        if self.max_norm is None:\n            return  # no-op\n\n        nn.utils.clip_grad_norm_(\n            model.parameters(), max_norm=self.max_norm, norm_type=self.norm_type\n        )\n\n\nclass ValueScaler:\n    def __init__(self, scheduler, mult_val: float):\n        self.scheduler = scheduler\n        self.mult_val = mult_val\n\n    def __call__(self, *args, **kwargs):\n        val = self.scheduler(*args, **kwargs)\n        return val * self.mult_val\n\n\ndef rgetattr(obj, rattrs: str = None):\n    \"\"\"\n    Like getattr(), but supports dotted notation for nested objects.\n    rattrs is a str of form 'attr1.attr2', returns obj.attr1.attr2\n    \"\"\"\n    if rattrs is None:\n        return obj\n    attrs = rattrs.split(\".\")\n    for attr in attrs:\n        obj = getattr(obj, attr)\n    return obj\n\n\ndef layer_decay_param_modifier(\n    scheduler_cfgs: List[List[Dict]],\n    model,\n    layer_decay_value: float,\n    layer_decay_min: Optional[float] = None,\n    apply_to: Optional[str] = None,\n    overrides: List[Dict] = (),\n) -> List[List[Dict]]:\n    \"\"\"\n    Args\n    - scheduler_cfgs: a list of omegaconf.ListConfigs.\n        Each element in the list is a omegaconfg.DictConfig with the following structure\n        {\n            \"scheduler\": <some fvcore scheduler>\n            \"option\": <value> possible options are \"lr\", \"weight_decay\" etc.\n            \"parameter_names\": Set of str indicating param names that this scheduler applies to\n        }\n    - model: a model that implements a method `get_layer_id` that maps layer_name to an integer and\n            and a method get_num_layers.\n            Alternatively, use apply_to argument to select a specific component of the model.\n    - layer_decay_value: float\n    - layer_decay_min: min val for layer decay\n    - apply_to: optional arg to select which component of the model to apply the the layer decay modifier to\n    - overrides: to manually override lr for specific patterns. Is a list of dicts. Each dict, has keys \"pattern\", \"value\".\n    Returns\n    - scheduler_configs: same structure as the input, elements can be modified\n    \"\"\"\n    model = rgetattr(model, apply_to)\n    num_layers = model.get_num_layers() + 1\n    layer_decays = [\n        layer_decay_value ** (num_layers - i) for i in range(num_layers + 1)\n    ]\n    if layer_decay_min is not None:\n        layer_decays = [max(val, layer_decay_min) for val in layer_decays]\n    final_scheduler_cfgs = []\n    # scheduler_cfgs is a list of lists\n    for scheduler_cfg_group in scheduler_cfgs:\n        curr_cfg_group = []\n        # scheduler_cfg_group is a list of dictionaries\n        for scheduler_cfg in scheduler_cfg_group:\n            if scheduler_cfg[\"option\"] != \"lr\":\n                curr_cfg_group.append(scheduler_cfg)\n                continue\n            # Need sorted so that the list of parameter names is deterministic and consistent\n            # across re-runs of this job. Else it was causing issues with loading the optimizer\n            # state during a job restart (D38591759)\n            parameter_names = sorted(scheduler_cfg[\"parameter_names\"])\n\n            # Only want one cfg group per layer\n            layer_cfg_groups = {}\n            for param_name in parameter_names:\n                layer_id = num_layers\n                this_scale = layer_decays[layer_id]\n                if param_name.startswith(apply_to):\n                    layer_id = model.get_layer_id(param_name)\n                    this_scale = layer_decays[layer_id]\n                    # Overrides\n                    for override in overrides:\n                        if fnmatch.fnmatchcase(param_name, override[\"pattern\"]):\n                            this_scale = float(override[\"value\"])\n                            layer_id = override[\"pattern\"]\n                            break\n\n                if layer_id not in layer_cfg_groups:\n                    curr_param = {\n                        \"option\": scheduler_cfg[\"option\"],\n                        \"scheduler\": ValueScaler(\n                            scheduler_cfg[\"scheduler\"], this_scale\n                        ),\n                        \"parameter_names\": {param_name},\n                    }\n                else:\n                    curr_param = layer_cfg_groups[layer_id]\n                    curr_param[\"parameter_names\"].add(param_name)\n                layer_cfg_groups[layer_id] = curr_param\n\n            for layer_cfg in layer_cfg_groups.values():\n                curr_cfg_group.append(layer_cfg)\n\n        final_scheduler_cfgs.append(curr_cfg_group)\n    return final_scheduler_cfgs\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/scripts/sav_frame_extraction_submitit.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\nimport argparse\nimport os\nfrom pathlib import Path\n\nimport cv2\n\nimport numpy as np\nimport submitit\nimport tqdm\n\n\ndef get_args_parser():\n    parser = argparse.ArgumentParser(\n        description=\"[SA-V Preprocessing] Extracting JPEG frames\",\n        formatter_class=argparse.ArgumentDefaultsHelpFormatter,\n    )\n\n    # ------------\n    # DATA\n    # ------------\n    data_parser = parser.add_argument_group(\n        title=\"SA-V dataset data root\",\n        description=\"What data to load and how to process it.\",\n    )\n    data_parser.add_argument(\n        \"--sav-vid-dir\",\n        type=str,\n        required=True,\n        help=(\"Where to find the SAV videos\"),\n    )\n    data_parser.add_argument(\n        \"--sav-frame-sample-rate\",\n        type=int,\n        default=4,\n        help=\"Rate at which to sub-sample frames\",\n    )\n\n    # ------------\n    # LAUNCH\n    # ------------\n    launch_parser = parser.add_argument_group(\n        title=\"Cluster launch settings\",\n        description=\"Number of jobs and retry settings.\",\n    )\n    launch_parser.add_argument(\n        \"--n-jobs\",\n        type=int,\n        required=True,\n        help=\"Shard the run over this many jobs.\",\n    )\n    launch_parser.add_argument(\n        \"--timeout\", type=int, required=True, help=\"SLURM timeout parameter in minutes.\"\n    )\n    launch_parser.add_argument(\n        \"--partition\", type=str, required=True, help=\"Partition to launch on.\"\n    )\n    launch_parser.add_argument(\n        \"--account\", type=str, required=True, help=\"Partition to launch on.\"\n    )\n    launch_parser.add_argument(\"--qos\", type=str, required=True, help=\"QOS.\")\n\n    # ------------\n    # OUTPUT\n    # ------------\n    output_parser = parser.add_argument_group(\n        title=\"Setting for results output\", description=\"Where and how to save results.\"\n    )\n    output_parser.add_argument(\n        \"--output-dir\",\n        type=str,\n        required=True,\n        help=(\"Where to dump the extracted jpeg frames\"),\n    )\n    output_parser.add_argument(\n        \"--slurm-output-root-dir\",\n        type=str,\n        required=True,\n        help=(\"Where to save slurm outputs\"),\n    )\n    return parser\n\n\ndef decode_video(video_path: str):\n    assert os.path.exists(video_path)\n    video = cv2.VideoCapture(video_path)\n    video_frames = []\n    while video.isOpened():\n        ret, frame = video.read()\n        if ret:\n            video_frames.append(frame)\n        else:\n            break\n    return video_frames\n\n\ndef extract_frames(video_path, sample_rate):\n    frames = decode_video(video_path)\n    return frames[::sample_rate]\n\n\ndef submitit_launch(video_paths, sample_rate, save_root):\n    for path in tqdm.tqdm(video_paths):\n        frames = extract_frames(path, sample_rate)\n        output_folder = os.path.join(save_root, Path(path).stem)\n        if not os.path.exists(output_folder):\n            os.makedirs(output_folder)\n        for fid, frame in enumerate(frames):\n            frame_path = os.path.join(output_folder, f\"{fid*sample_rate:05d}.jpg\")\n            cv2.imwrite(frame_path, frame)\n    print(f\"Saved output to {save_root}\")\n\n\nif __name__ == \"__main__\":\n    parser = get_args_parser()\n    args = parser.parse_args()\n\n    sav_vid_dir = args.sav_vid_dir\n    save_root = args.output_dir\n    sample_rate = args.sav_frame_sample_rate\n\n    # List all SA-V videos\n    mp4_files = sorted([str(p) for p in Path(sav_vid_dir).glob(\"*/*.mp4\")])\n    mp4_files = np.array(mp4_files)\n    chunked_mp4_files = [x.tolist() for x in np.array_split(mp4_files, args.n_jobs)]\n\n    print(f\"Processing videos in: {sav_vid_dir}\")\n    print(f\"Processing {len(mp4_files)} files\")\n    print(f\"Beginning processing in {args.n_jobs} processes\")\n\n    # Submitit params\n    jobs_dir = os.path.join(args.slurm_output_root_dir, \"%j\")\n    cpus_per_task = 4\n    executor = submitit.AutoExecutor(folder=jobs_dir)\n    executor.update_parameters(\n        timeout_min=args.timeout,\n        gpus_per_node=0,\n        tasks_per_node=1,\n        slurm_array_parallelism=args.n_jobs,\n        cpus_per_task=cpus_per_task,\n        slurm_partition=args.partition,\n        slurm_account=args.account,\n        slurm_qos=args.qos,\n    )\n    executor.update_parameters(slurm_srun_args=[\"-vv\", \"--cpu-bind\", \"none\"])\n\n    # Launch\n    jobs = []\n    with executor.batch():\n        for _, mp4_chunk in tqdm.tqdm(enumerate(chunked_mp4_files)):\n            job = executor.submit(\n                submitit_launch,\n                video_paths=mp4_chunk,\n                sample_rate=sample_rate,\n                save_root=save_root,\n            )\n            jobs.append(job)\n\n    for j in jobs:\n        print(f\"Slurm JobID: {j.job_id}\")\n    print(f\"Saving outputs to {save_root}\")\n    print(f\"Slurm outputs at {args.slurm_output_root_dir}\")\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/train.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport logging\nimport os\nimport random\nimport sys\nimport traceback\nfrom argparse import ArgumentParser\n\nimport submitit\nimport torch\n\nfrom hydra import compose, initialize_config_module\nfrom hydra.utils import instantiate\n\nfrom iopath.common.file_io import g_pathmgr\nfrom omegaconf import OmegaConf\n\nfrom training.utils.train_utils import makedir, register_omegaconf_resolvers\n\nos.environ[\"HYDRA_FULL_ERROR\"] = \"1\"\n\n\ndef single_proc_run(local_rank, main_port, cfg, world_size):\n    \"\"\"Single GPU process\"\"\"\n    os.environ[\"MASTER_ADDR\"] = \"localhost\"\n    os.environ[\"MASTER_PORT\"] = str(main_port)\n    os.environ[\"RANK\"] = str(local_rank)\n    os.environ[\"LOCAL_RANK\"] = str(local_rank)\n    os.environ[\"WORLD_SIZE\"] = str(world_size)\n    try:\n        register_omegaconf_resolvers()\n    except Exception as e:\n        logging.info(e)\n\n    trainer = instantiate(cfg.trainer, _recursive_=False)\n    trainer.run()\n\n\ndef single_node_runner(cfg, main_port: int):\n    assert cfg.launcher.num_nodes == 1\n    num_proc = cfg.launcher.gpus_per_node\n    torch.multiprocessing.set_start_method(\n        \"spawn\"\n    )  # CUDA runtime does not support `fork`\n    if num_proc == 1:\n        # directly call single_proc so we can easily set breakpoints\n        # mp.spawn does not let us set breakpoints\n        single_proc_run(local_rank=0, main_port=main_port, cfg=cfg, world_size=num_proc)\n    else:\n        mp_runner = torch.multiprocessing.start_processes\n        args = (main_port, cfg, num_proc)\n        # Note: using \"fork\" below, \"spawn\" causes time and error regressions. Using\n        # spawn changes the default multiprocessing context to spawn, which doesn't\n        # interact well with the dataloaders (likely due to the use of OpenCV).\n        mp_runner(single_proc_run, args=args, nprocs=num_proc, start_method=\"spawn\")\n\n\ndef format_exception(e: Exception, limit=20):\n    traceback_str = \"\".join(traceback.format_tb(e.__traceback__, limit=limit))\n    return f\"{type(e).__name__}: {e}\\nTraceback:\\n{traceback_str}\"\n\n\nclass SubmititRunner(submitit.helpers.Checkpointable):\n    \"\"\"A callable which is passed to submitit to launch the jobs.\"\"\"\n\n    def __init__(self, port, cfg):\n        self.cfg = cfg\n        self.port = port\n        self.has_setup = False\n\n    def run_trainer(self):\n        job_env = submitit.JobEnvironment()\n        # Need to add this again so the hydra.job.set_env PYTHONPATH\n        # is also set when launching jobs.\n        add_pythonpath_to_sys_path()\n        os.environ[\"MASTER_ADDR\"] = job_env.hostnames[0]\n        os.environ[\"MASTER_PORT\"] = str(self.port)\n        os.environ[\"RANK\"] = str(job_env.global_rank)\n        os.environ[\"LOCAL_RANK\"] = str(job_env.local_rank)\n        os.environ[\"WORLD_SIZE\"] = str(job_env.num_tasks)\n\n        register_omegaconf_resolvers()\n        cfg_resolved = OmegaConf.to_container(self.cfg, resolve=False)\n        cfg_resolved = OmegaConf.create(cfg_resolved)\n\n        trainer = instantiate(cfg_resolved.trainer, _recursive_=False)\n        trainer.run()\n\n    def __call__(self):\n        job_env = submitit.JobEnvironment()\n        self.setup_job_info(job_env.job_id, job_env.global_rank)\n        try:\n            self.run_trainer()\n        except Exception as e:\n            # Log the exception. Then raise it again (as what SubmititRunner currently does).\n            message = format_exception(e)\n            logging.error(message)\n            raise e\n\n    def setup_job_info(self, job_id, rank):\n        \"\"\"Set up slurm job info\"\"\"\n        self.job_info = {\n            \"job_id\": job_id,\n            \"rank\": rank,\n            \"cluster\": self.cfg.get(\"cluster\", None),\n            \"experiment_log_dir\": self.cfg.launcher.experiment_log_dir,\n        }\n\n        self.has_setup = True\n\n\ndef add_pythonpath_to_sys_path():\n    if \"PYTHONPATH\" not in os.environ or not os.environ[\"PYTHONPATH\"]:\n        return\n    sys.path = os.environ[\"PYTHONPATH\"].split(\":\") + sys.path\n\n\ndef main(args) -> None:\n    cfg = compose(config_name=args.config)\n    if cfg.launcher.experiment_log_dir is None:\n        cfg.launcher.experiment_log_dir = os.path.join(\n            os.getcwd(), \"sam2_logs\", args.config\n        )\n    print(\"###################### Train App Config ####################\")\n    print(OmegaConf.to_yaml(cfg))\n    print(\"############################################################\")\n\n    add_pythonpath_to_sys_path()\n    makedir(cfg.launcher.experiment_log_dir)\n    with g_pathmgr.open(\n        os.path.join(cfg.launcher.experiment_log_dir, \"config.yaml\"), \"w\"\n    ) as f:\n        f.write(OmegaConf.to_yaml(cfg))\n\n    cfg_resolved = OmegaConf.to_container(cfg, resolve=False)\n    cfg_resolved = OmegaConf.create(cfg_resolved)\n\n    with g_pathmgr.open(\n        os.path.join(cfg.launcher.experiment_log_dir, \"config_resolved.yaml\"), \"w\"\n    ) as f:\n        f.write(OmegaConf.to_yaml(cfg_resolved, resolve=True))\n\n    submitit_conf = cfg.get(\"submitit\", None)\n    assert submitit_conf is not None, \"Missing submitit config\"\n\n    submitit_dir = cfg.launcher.experiment_log_dir\n    submitit_dir = os.path.join(submitit_dir, \"submitit_logs\")\n    # Priotrize cmd line args\n    cfg.launcher.gpus_per_node = (\n        args.num_gpus if args.num_gpus is not None else cfg.launcher.gpus_per_node\n    )\n    cfg.launcher.num_nodes = (\n        args.num_nodes if args.num_nodes is not None else cfg.launcher.num_nodes\n    )\n    submitit_conf.use_cluster = (\n        args.use_cluster if args.use_cluster is not None else submitit_conf.use_cluster\n    )\n    if submitit_conf.use_cluster:\n        executor = submitit.AutoExecutor(folder=submitit_dir)\n        submitit_conf.partition = (\n            args.partition\n            if args.partition is not None\n            else submitit_conf.get(\"partition\", None)\n        )\n        submitit_conf.account = (\n            args.account\n            if args.account is not None\n            else submitit_conf.get(\"account\", None)\n        )\n        submitit_conf.qos = (\n            args.qos if args.qos is not None else submitit_conf.get(\"qos\", None)\n        )\n        job_kwargs = {\n            \"timeout_min\": 60 * submitit_conf.timeout_hour,\n            \"name\": (\n                submitit_conf.name if hasattr(submitit_conf, \"name\") else args.config\n            ),\n            \"slurm_partition\": submitit_conf.partition,\n            \"gpus_per_node\": cfg.launcher.gpus_per_node,\n            \"tasks_per_node\": cfg.launcher.gpus_per_node,  # one task per GPU\n            \"cpus_per_task\": submitit_conf.cpus_per_task,\n            \"nodes\": cfg.launcher.num_nodes,\n            \"slurm_additional_parameters\": {\n                \"exclude\": \" \".join(submitit_conf.get(\"exclude_nodes\", [])),\n            },\n        }\n        if \"include_nodes\" in submitit_conf:\n            assert (\n                len(submitit_conf[\"include_nodes\"]) >= cfg.launcher.num_nodes\n            ), \"Not enough nodes\"\n            job_kwargs[\"slurm_additional_parameters\"][\"nodelist\"] = \" \".join(\n                submitit_conf[\"include_nodes\"]\n            )\n        if submitit_conf.account is not None:\n            job_kwargs[\"slurm_additional_parameters\"][\"account\"] = submitit_conf.account\n        if submitit_conf.qos is not None:\n            job_kwargs[\"slurm_additional_parameters\"][\"qos\"] = submitit_conf.qos\n\n        if submitit_conf.get(\"mem_gb\", None) is not None:\n            job_kwargs[\"mem_gb\"] = submitit_conf.mem_gb\n        elif submitit_conf.get(\"mem\", None) is not None:\n            job_kwargs[\"slurm_mem\"] = submitit_conf.mem\n\n        if submitit_conf.get(\"constraints\", None) is not None:\n            job_kwargs[\"slurm_constraint\"] = submitit_conf.constraints\n\n        if submitit_conf.get(\"comment\", None) is not None:\n            job_kwargs[\"slurm_comment\"] = submitit_conf.comment\n\n        # Supports only cpu-bind option within srun_args. New options can be added here\n        if submitit_conf.get(\"srun_args\", None) is not None:\n            job_kwargs[\"slurm_srun_args\"] = []\n            if submitit_conf.srun_args.get(\"cpu_bind\", None) is not None:\n                job_kwargs[\"slurm_srun_args\"].extend(\n                    [\"--cpu-bind\", submitit_conf.srun_args.cpu_bind]\n                )\n\n        print(\"###################### SLURM Config ####################\")\n        print(job_kwargs)\n        print(\"##########################################\")\n        executor.update_parameters(**job_kwargs)\n\n        main_port = random.randint(\n            submitit_conf.port_range[0], submitit_conf.port_range[1]\n        )\n        runner = SubmititRunner(main_port, cfg)\n        job = executor.submit(runner)\n        print(f\"Submitit Job ID: {job.job_id}\")\n        runner.setup_job_info(job.job_id, rank=0)\n    else:\n        cfg.launcher.num_nodes = 1\n        main_port = random.randint(\n            submitit_conf.port_range[0], submitit_conf.port_range[1]\n        )\n        single_node_runner(cfg, main_port)\n\n\nif __name__ == \"__main__\":\n\n    initialize_config_module(\"sam2\", version_base=\"1.2\")\n    parser = ArgumentParser()\n    parser.add_argument(\n        \"-c\",\n        \"--config\",\n        required=True,\n        type=str,\n        help=\"path to config file (e.g. configs/sam2.1_training/sam2.1_hiera_b+_MOSE_finetune.yaml)\",\n    )\n    parser.add_argument(\n        \"--use-cluster\",\n        type=int,\n        default=None,\n        help=\"whether to launch on a cluster, 0: run locally, 1: run on a cluster\",\n    )\n    parser.add_argument(\"--partition\", type=str, default=None, help=\"SLURM partition\")\n    parser.add_argument(\"--account\", type=str, default=None, help=\"SLURM account\")\n    parser.add_argument(\"--qos\", type=str, default=None, help=\"SLURM qos\")\n    parser.add_argument(\n        \"--num-gpus\", type=int, default=None, help=\"number of GPUS per node\"\n    )\n    parser.add_argument(\"--num-nodes\", type=int, default=None, help=\"Number of nodes\")\n    args = parser.parse_args()\n    args.use_cluster = bool(args.use_cluster) if args.use_cluster is not None else None\n    register_omegaconf_resolvers()\n    main(args)\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/trainer.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport gc\nimport json\nimport logging\nimport math\nimport os\nimport time\nfrom collections import OrderedDict\nfrom dataclasses import dataclass, field\nfrom typing import Any, Dict, List, Mapping, Optional\n\nimport numpy as np\n\nimport torch\nimport torch.distributed as dist\nimport torch.nn as nn\nfrom hydra.utils import instantiate\nfrom iopath.common.file_io import g_pathmgr\n\nfrom training.optimizer import construct_optimizer\n\nfrom training.utils.checkpoint_utils import (\n    assert_skipped_parameters_are_frozen,\n    exclude_params_matching_unix_pattern,\n    load_state_dict_into_model,\n    with_check_parameter_frozen,\n)\nfrom training.utils.data_utils import BatchedVideoDatapoint\nfrom training.utils.distributed import all_reduce_max, barrier, get_rank\n\nfrom training.utils.logger import Logger, setup_logging\n\nfrom training.utils.train_utils import (\n    AverageMeter,\n    collect_dict_keys,\n    DurationMeter,\n    get_amp_type,\n    get_machine_local_and_dist_rank,\n    get_resume_checkpoint,\n    human_readable_time,\n    is_dist_avail_and_initialized,\n    log_env_variables,\n    makedir,\n    MemMeter,\n    Phase,\n    ProgressMeter,\n    set_seeds,\n    setup_distributed_backend,\n)\n\n\nCORE_LOSS_KEY = \"core_loss\"\n\n\ndef unwrap_ddp_if_wrapped(model):\n    if isinstance(model, torch.nn.parallel.DistributedDataParallel):\n        return model.module\n    return model\n\n\n@dataclass\nclass OptimAMPConf:\n    enabled: bool = False\n    amp_dtype: str = \"float16\"\n\n\n@dataclass\nclass OptimConf:\n    optimizer: torch.optim.Optimizer = None\n    options: Optional[Dict[str, Any]] = None\n    param_group_modifiers: Optional[List] = None\n    amp: Optional[Dict[str, Any]] = None\n    gradient_clip: Any = None\n    gradient_logger: Any = None\n\n    def __post_init__(self):\n        # amp\n        if not isinstance(self.amp, OptimAMPConf):\n            if self.amp is None:\n                self.amp = {}\n            assert isinstance(self.amp, Mapping)\n            self.amp = OptimAMPConf(**self.amp)\n\n\n@dataclass\nclass DistributedConf:\n    backend: Optional[str] = None  # inferred from accelerator type\n    comms_dtype: Optional[str] = None\n    find_unused_parameters: bool = False\n    timeout_mins: int = 30\n\n\n@dataclass\nclass CudaConf:\n    cudnn_deterministic: bool = False\n    cudnn_benchmark: bool = True\n    allow_tf32: bool = False\n    # if not None, `matmul_allow_tf32` key will override `allow_tf32` for matmul\n    matmul_allow_tf32: Optional[bool] = None\n    # if not None, `cudnn_allow_tf32` key will override `allow_tf32` for cudnn\n    cudnn_allow_tf32: Optional[bool] = None\n\n\n@dataclass\nclass CheckpointConf:\n    save_dir: str\n    save_freq: int\n    save_list: List[int] = field(default_factory=list)\n    model_weight_initializer: Any = None\n    save_best_meters: List[str] = None\n    skip_saving_parameters: List[str] = field(default_factory=list)\n    initialize_after_preemption: Optional[bool] = None\n    # if not None, training will be resumed from this checkpoint\n    resume_from: Optional[str] = None\n\n    def infer_missing(self):\n        if self.initialize_after_preemption is None:\n            with_skip_saving = len(self.skip_saving_parameters) > 0\n            self.initialize_after_preemption = with_skip_saving\n        return self\n\n\n@dataclass\nclass LoggingConf:\n    log_dir: str\n    log_freq: int  # In iterations\n    tensorboard_writer: Any\n    log_level_primary: str = \"INFO\"\n    log_level_secondary: str = \"ERROR\"\n    log_scalar_frequency: int = 100\n    log_visual_frequency: int = 100\n    scalar_keys_to_log: Optional[Dict[str, Any]] = None\n    log_batch_stats: bool = False\n\n\nclass Trainer:\n    \"\"\"\n    Trainer supporting the DDP training strategies.\n    \"\"\"\n\n    EPSILON = 1e-8\n\n    def __init__(\n        self,\n        *,  # the order of these args can change at any time, so they are keyword-only\n        data: Dict[str, Any],\n        model: Dict[str, Any],\n        logging: Dict[str, Any],\n        checkpoint: Dict[str, Any],\n        max_epochs: int,\n        mode: str = \"train\",\n        accelerator: str = \"cuda\",\n        seed_value: int = 123,\n        val_epoch_freq: int = 1,\n        distributed: Dict[str, bool] = None,\n        cuda: Dict[str, bool] = None,\n        env_variables: Optional[Dict[str, Any]] = None,\n        optim: Optional[Dict[str, Any]] = None,\n        optim_overrides: Optional[List[Dict[str, Any]]] = None,\n        meters: Optional[Dict[str, Any]] = None,\n        loss: Optional[Dict[str, Any]] = None,\n    ):\n\n        self._setup_env_variables(env_variables)\n        self._setup_timers()\n\n        self.data_conf = data\n        self.model_conf = model\n        self.logging_conf = LoggingConf(**logging)\n        self.checkpoint_conf = CheckpointConf(**checkpoint).infer_missing()\n        self.max_epochs = max_epochs\n        self.mode = mode\n        self.val_epoch_freq = val_epoch_freq\n        self.optim_conf = OptimConf(**optim) if optim is not None else None\n        self.meters_conf = meters\n        self.loss_conf = loss\n        distributed = DistributedConf(**distributed or {})\n        cuda = CudaConf(**cuda or {})\n        self.where = 0.0\n\n        self._infer_distributed_backend_if_none(distributed, accelerator)\n\n        self._setup_device(accelerator)\n\n        self._setup_torch_dist_and_backend(cuda, distributed)\n\n        makedir(self.logging_conf.log_dir)\n        setup_logging(\n            __name__,\n            output_dir=self.logging_conf.log_dir,\n            rank=self.rank,\n            log_level_primary=self.logging_conf.log_level_primary,\n            log_level_secondary=self.logging_conf.log_level_secondary,\n        )\n\n        set_seeds(seed_value, self.max_epochs, self.distributed_rank)\n        log_env_variables()\n\n        assert (\n            is_dist_avail_and_initialized()\n        ), \"Torch distributed needs to be initialized before calling the trainer.\"\n\n        self._setup_components()  # Except Optimizer everything is setup here.\n        self._move_to_device()\n        self._construct_optimizers()\n        self._setup_dataloaders()\n\n        self.time_elapsed_meter = DurationMeter(\"Time Elapsed\", self.device, \":.2f\")\n\n        if self.checkpoint_conf.resume_from is not None:\n            assert os.path.exists(\n                self.checkpoint_conf.resume_from\n            ), f\"The 'resume_from' checkpoint {self.checkpoint_conf.resume_from} does not exist!\"\n            dst = os.path.join(self.checkpoint_conf.save_dir, \"checkpoint.pt\")\n            if self.distributed_rank == 0 and not os.path.exists(dst):\n                # Copy the \"resume_from\" checkpoint to the checkpoint folder\n                # if there is not a checkpoint to resume from already there\n                makedir(self.checkpoint_conf.save_dir)\n                g_pathmgr.copy(self.checkpoint_conf.resume_from, dst)\n            barrier()\n\n        self.load_checkpoint()\n        self._setup_ddp_distributed_training(distributed, accelerator)\n        barrier()\n\n    def _setup_timers(self):\n        \"\"\"\n        Initializes counters for elapsed time and eta.\n        \"\"\"\n        self.start_time = time.time()\n        self.ckpt_time_elapsed = 0\n        self.est_epoch_time = dict.fromkeys([Phase.TRAIN, Phase.VAL], 0)\n\n    def _get_meters(self, phase_filters=None):\n        if self.meters is None:\n            return {}\n        meters = {}\n        for phase, phase_meters in self.meters.items():\n            if phase_filters is not None and phase not in phase_filters:\n                continue\n            for key, key_meters in phase_meters.items():\n                if key_meters is None:\n                    continue\n                for name, meter in key_meters.items():\n                    meters[f\"{phase}_{key}/{name}\"] = meter\n        return meters\n\n    def _infer_distributed_backend_if_none(self, distributed_conf, accelerator):\n        if distributed_conf.backend is None:\n            distributed_conf.backend = \"nccl\" if accelerator == \"cuda\" else \"gloo\"\n\n    def _setup_env_variables(self, env_variables_conf) -> None:\n        if env_variables_conf is not None:\n            for variable_name, value in env_variables_conf.items():\n                os.environ[variable_name] = value\n\n    def _setup_torch_dist_and_backend(self, cuda_conf, distributed_conf) -> None:\n        if torch.cuda.is_available():\n            torch.backends.cudnn.deterministic = cuda_conf.cudnn_deterministic\n            torch.backends.cudnn.benchmark = cuda_conf.cudnn_benchmark\n            torch.backends.cuda.matmul.allow_tf32 = (\n                cuda_conf.matmul_allow_tf32\n                if cuda_conf.matmul_allow_tf32 is not None\n                else cuda_conf.allow_tf32\n            )\n            torch.backends.cudnn.allow_tf32 = (\n                cuda_conf.cudnn_allow_tf32\n                if cuda_conf.cudnn_allow_tf32 is not None\n                else cuda_conf.allow_tf32\n            )\n\n        self.rank = setup_distributed_backend(\n            distributed_conf.backend, distributed_conf.timeout_mins\n        )\n\n    def _setup_device(self, accelerator):\n        self.local_rank, self.distributed_rank = get_machine_local_and_dist_rank()\n        if accelerator == \"cuda\":\n            self.device = torch.device(\"cuda\", self.local_rank)\n            torch.cuda.set_device(self.local_rank)\n        elif accelerator == \"cpu\":\n            self.device = torch.device(\"cpu\")\n        else:\n            raise ValueError(f\"Unsupported accelerator: {accelerator}\")\n\n    def _setup_ddp_distributed_training(self, distributed_conf, accelerator):\n\n        assert isinstance(self.model, torch.nn.Module)\n\n        self.model = nn.parallel.DistributedDataParallel(\n            self.model,\n            device_ids=[self.local_rank] if accelerator == \"cuda\" else [],\n            find_unused_parameters=distributed_conf.find_unused_parameters,\n        )\n        if distributed_conf.comms_dtype is not None:  # noqa\n            from torch.distributed.algorithms import ddp_comm_hooks\n\n            amp_type = get_amp_type(distributed_conf.comms_dtype)\n            if amp_type == torch.bfloat16:\n                hook = ddp_comm_hooks.default_hooks.bf16_compress_hook\n                logging.info(\"Enabling bfloat16 grad communication\")\n            else:\n                hook = ddp_comm_hooks.default_hooks.fp16_compress_hook\n                logging.info(\"Enabling fp16 grad communication\")\n            process_group = None\n            self.model.register_comm_hook(process_group, hook)\n\n    def _move_to_device(self):\n        logging.info(\n            f\"Moving components to device {self.device} and local rank {self.local_rank}.\"\n        )\n\n        self.model.to(self.device)\n\n        logging.info(\n            f\"Done moving components to device {self.device} and local rank {self.local_rank}.\"\n        )\n\n    def save_checkpoint(self, epoch, checkpoint_names=None):\n        checkpoint_folder = self.checkpoint_conf.save_dir\n        makedir(checkpoint_folder)\n        if checkpoint_names is None:\n            checkpoint_names = [\"checkpoint\"]\n            if (\n                self.checkpoint_conf.save_freq > 0\n                and (int(epoch) % self.checkpoint_conf.save_freq == 0)\n            ) or int(epoch) in self.checkpoint_conf.save_list:\n                checkpoint_names.append(f\"checkpoint_{int(epoch)}\")\n\n        checkpoint_paths = []\n        for ckpt_name in checkpoint_names:\n            checkpoint_paths.append(os.path.join(checkpoint_folder, f\"{ckpt_name}.pt\"))\n\n        state_dict = unwrap_ddp_if_wrapped(self.model).state_dict()\n        state_dict = exclude_params_matching_unix_pattern(\n            patterns=self.checkpoint_conf.skip_saving_parameters, state_dict=state_dict\n        )\n\n        checkpoint = {\n            \"model\": state_dict,\n            \"optimizer\": self.optim.optimizer.state_dict(),\n            \"epoch\": epoch,\n            \"loss\": self.loss.state_dict(),\n            \"steps\": self.steps,\n            \"time_elapsed\": self.time_elapsed_meter.val,\n            \"best_meter_values\": self.best_meter_values,\n        }\n        if self.optim_conf.amp.enabled:\n            checkpoint[\"scaler\"] = self.scaler.state_dict()\n\n        # DDP checkpoints are only saved on rank 0 (all workers are identical)\n        if self.distributed_rank != 0:\n            return\n\n        for checkpoint_path in checkpoint_paths:\n            self._save_checkpoint(checkpoint, checkpoint_path)\n\n    def _save_checkpoint(self, checkpoint, checkpoint_path):\n        \"\"\"\n        Save a checkpoint while guarding against the job being killed in the middle\n        of checkpoint saving (which corrupts the checkpoint file and ruins the\n        entire training since usually only the last checkpoint is kept per run).\n\n        We first save the new checkpoint to a temp file (with a '.tmp' suffix), and\n        and move it to overwrite the old checkpoint_path.\n        \"\"\"\n        checkpoint_path_tmp = f\"{checkpoint_path}.tmp\"\n        with g_pathmgr.open(checkpoint_path_tmp, \"wb\") as f:\n            torch.save(checkpoint, f)\n        # after torch.save is completed, replace the old checkpoint with the new one\n        if g_pathmgr.exists(checkpoint_path):\n            # remove the old checkpoint_path file first (otherwise g_pathmgr.mv fails)\n            g_pathmgr.rm(checkpoint_path)\n        success = g_pathmgr.mv(checkpoint_path_tmp, checkpoint_path)\n        assert success\n\n    def load_checkpoint(self):\n        ckpt_path = get_resume_checkpoint(self.checkpoint_conf.save_dir)\n        if ckpt_path is None:\n            self._init_model_state()\n        else:\n            if self.checkpoint_conf.initialize_after_preemption:\n                self._call_model_initializer()\n            self._load_resuming_checkpoint(ckpt_path)\n\n    def _init_model_state(self):\n        # Checking that parameters that won't be saved are indeed frozen\n        # We do this check here before even saving the model to catch errors\n        # are early as possible and not at the end of the first epoch\n        assert_skipped_parameters_are_frozen(\n            patterns=self.checkpoint_conf.skip_saving_parameters,\n            model=self.model,\n        )\n\n        # Checking that parameters that won't be saved are initialized from\n        # within the model definition, unless `initialize_after_preemption`\n        # is explicitly set to `True`. If not, this is a bug, and after\n        # preemption, the `skip_saving_parameters` will have random values\n        allow_init_skip_parameters = self.checkpoint_conf.initialize_after_preemption\n        with with_check_parameter_frozen(\n            patterns=self.checkpoint_conf.skip_saving_parameters,\n            model=self.model,\n            disabled=allow_init_skip_parameters,\n        ):\n            self._call_model_initializer()\n\n    def _call_model_initializer(self):\n        model_weight_initializer = instantiate(\n            self.checkpoint_conf.model_weight_initializer\n        )\n        if model_weight_initializer is not None:\n            logging.info(\n                f\"Loading pretrained checkpoint from {self.checkpoint_conf.model_weight_initializer}\"\n            )\n            self.model = model_weight_initializer(model=self.model)\n\n    def _load_resuming_checkpoint(self, ckpt_path: str):\n        logging.info(f\"Resuming training from {ckpt_path}\")\n\n        with g_pathmgr.open(ckpt_path, \"rb\") as f:\n            checkpoint = torch.load(f, map_location=\"cpu\")\n        load_state_dict_into_model(\n            model=self.model,\n            state_dict=checkpoint[\"model\"],\n            ignore_missing_keys=self.checkpoint_conf.skip_saving_parameters,\n        )\n\n        self.optim.optimizer.load_state_dict(checkpoint[\"optimizer\"])\n        self.loss.load_state_dict(checkpoint[\"loss\"], strict=True)\n        self.epoch = checkpoint[\"epoch\"]\n        self.steps = checkpoint[\"steps\"]\n        self.ckpt_time_elapsed = checkpoint.get(\"time_elapsed\")\n\n        if self.optim_conf.amp.enabled and \"scaler\" in checkpoint:\n            self.scaler.load_state_dict(checkpoint[\"scaler\"])\n\n        self.best_meter_values = checkpoint.get(\"best_meter_values\", {})\n\n        if \"train_dataset\" in checkpoint and self.train_dataset is not None:\n            self.train_dataset.load_checkpoint_state(checkpoint[\"train_dataset\"])\n\n    def is_intermediate_val_epoch(self, epoch):\n        return epoch % self.val_epoch_freq == 0 and epoch < self.max_epochs - 1\n\n    def _step(\n        self,\n        batch: BatchedVideoDatapoint,\n        model: nn.Module,\n        phase: str,\n    ):\n\n        outputs = model(batch)\n        targets = batch.masks\n        batch_size = len(batch.img_batch)\n\n        key = batch.dict_key  # key for dataset\n        loss = self.loss[key](outputs, targets)\n        loss_str = f\"Losses/{phase}_{key}_loss\"\n\n        loss_log_str = os.path.join(\"Step_Losses\", loss_str)\n\n        # loss contains multiple sub-components we wish to log\n        step_losses = {}\n        if isinstance(loss, dict):\n            step_losses.update(\n                {f\"Losses/{phase}_{key}_{k}\": v for k, v in loss.items()}\n            )\n            loss = self._log_loss_detailed_and_return_core_loss(\n                loss, loss_log_str, self.steps[phase]\n            )\n\n        if self.steps[phase] % self.logging_conf.log_scalar_frequency == 0:\n            self.logger.log(\n                loss_log_str,\n                loss,\n                self.steps[phase],\n            )\n\n        self.steps[phase] += 1\n\n        ret_tuple = {loss_str: loss}, batch_size, step_losses\n\n        if phase in self.meters and key in self.meters[phase]:\n            meters_dict = self.meters[phase][key]\n            if meters_dict is not None:\n                for _, meter in meters_dict.items():\n                    meter.update(\n                        find_stages=outputs,\n                        find_metadatas=batch.metadata,\n                    )\n\n        return ret_tuple\n\n    def run(self):\n        assert self.mode in [\"train\", \"train_only\", \"val\"]\n        if self.mode == \"train\":\n            if self.epoch > 0:\n                logging.info(f\"Resuming training from epoch: {self.epoch}\")\n                # resuming from a checkpoint\n                if self.is_intermediate_val_epoch(self.epoch - 1):\n                    logging.info(\"Running previous val epoch\")\n                    self.epoch -= 1\n                    self.run_val()\n                    self.epoch += 1\n            self.run_train()\n            self.run_val()\n        elif self.mode == \"val\":\n            self.run_val()\n        elif self.mode == \"train_only\":\n            self.run_train()\n\n    def _setup_dataloaders(self):\n        self.train_dataset = None\n        self.val_dataset = None\n\n        if self.mode in [\"train\", \"val\"]:\n            self.val_dataset = instantiate(self.data_conf.get(Phase.VAL, None))\n\n        if self.mode in [\"train\", \"train_only\"]:\n            self.train_dataset = instantiate(self.data_conf.train)\n\n    def run_train(self):\n\n        while self.epoch < self.max_epochs:\n            dataloader = self.train_dataset.get_loader(epoch=int(self.epoch))\n            barrier()\n            outs = self.train_epoch(dataloader)\n            self.logger.log_dict(outs, self.epoch)  # Logged only on rank 0\n\n            # log train to text file.\n            if self.distributed_rank == 0:\n                with g_pathmgr.open(\n                    os.path.join(self.logging_conf.log_dir, \"train_stats.json\"),\n                    \"a\",\n                ) as f:\n                    f.write(json.dumps(outs) + \"\\n\")\n\n            # Save checkpoint before validating\n            self.save_checkpoint(self.epoch + 1)\n\n            del dataloader\n            gc.collect()\n\n            # Run val, not running on last epoch since will run after the\n            # loop anyway\n            if self.is_intermediate_val_epoch(self.epoch):\n                self.run_val()\n\n            if self.distributed_rank == 0:\n                self.best_meter_values.update(self._get_trainer_state(\"train\"))\n                with g_pathmgr.open(\n                    os.path.join(self.logging_conf.log_dir, \"best_stats.json\"),\n                    \"a\",\n                ) as f:\n                    f.write(json.dumps(self.best_meter_values) + \"\\n\")\n\n            self.epoch += 1\n        # epoch was incremented in the loop but the val step runs out of the loop\n        self.epoch -= 1\n\n    def run_val(self):\n        if not self.val_dataset:\n            return\n\n        dataloader = self.val_dataset.get_loader(epoch=int(self.epoch))\n        outs = self.val_epoch(dataloader, phase=Phase.VAL)\n        del dataloader\n        gc.collect()\n        self.logger.log_dict(outs, self.epoch)  # Logged only on rank 0\n\n        if self.distributed_rank == 0:\n            with g_pathmgr.open(\n                os.path.join(self.logging_conf.log_dir, \"val_stats.json\"),\n                \"a\",\n            ) as f:\n                f.write(json.dumps(outs) + \"\\n\")\n\n    def val_epoch(self, val_loader, phase):\n        batch_time = AverageMeter(\"Batch Time\", self.device, \":.2f\")\n        data_time = AverageMeter(\"Data Time\", self.device, \":.2f\")\n        mem = MemMeter(\"Mem (GB)\", self.device, \":.2f\")\n\n        iters_per_epoch = len(val_loader)\n\n        curr_phases = [phase]\n        curr_models = [self.model]\n\n        loss_names = []\n        for p in curr_phases:\n            for key in self.loss.keys():\n                loss_names.append(f\"Losses/{p}_{key}_loss\")\n\n        loss_mts = OrderedDict(\n            [(name, AverageMeter(name, self.device, \":.2e\")) for name in loss_names]\n        )\n        extra_loss_mts = {}\n\n        for model in curr_models:\n            model.eval()\n            if hasattr(unwrap_ddp_if_wrapped(model), \"on_validation_epoch_start\"):\n                unwrap_ddp_if_wrapped(model).on_validation_epoch_start()\n\n        progress = ProgressMeter(\n            iters_per_epoch,\n            [batch_time, data_time, mem, self.time_elapsed_meter, *loss_mts.values()],\n            self._get_meters(curr_phases),\n            prefix=\"Val Epoch: [{}]\".format(self.epoch),\n        )\n\n        end = time.time()\n\n        for data_iter, batch in enumerate(val_loader):\n\n            # measure data loading time\n            data_time.update(time.time() - end)\n\n            batch = batch.to(self.device, non_blocking=True)\n\n            # compute output\n            with torch.no_grad():\n                with torch.cuda.amp.autocast(\n                    enabled=(self.optim_conf.amp.enabled if self.optim_conf else False),\n                    dtype=(\n                        get_amp_type(self.optim_conf.amp.amp_dtype)\n                        if self.optim_conf\n                        else None\n                    ),\n                ):\n                    for phase, model in zip(curr_phases, curr_models):\n                        loss_dict, batch_size, extra_losses = self._step(\n                            batch,\n                            model,\n                            phase,\n                        )\n\n                        assert len(loss_dict) == 1\n                        loss_key, loss = loss_dict.popitem()\n\n                        loss_mts[loss_key].update(loss.item(), batch_size)\n\n                        for k, v in extra_losses.items():\n                            if k not in extra_loss_mts:\n                                extra_loss_mts[k] = AverageMeter(k, self.device, \":.2e\")\n                            extra_loss_mts[k].update(v.item(), batch_size)\n\n            # measure elapsed time\n            batch_time.update(time.time() - end)\n            end = time.time()\n\n            self.time_elapsed_meter.update(\n                time.time() - self.start_time + self.ckpt_time_elapsed\n            )\n\n            if torch.cuda.is_available():\n                mem.update(reset_peak_usage=True)\n\n            if data_iter % self.logging_conf.log_freq == 0:\n                progress.display(data_iter)\n\n            if data_iter % self.logging_conf.log_scalar_frequency == 0:\n                # Log progress meters.\n                for progress_meter in progress.meters:\n                    self.logger.log(\n                        os.path.join(\"Step_Stats\", phase, progress_meter.name),\n                        progress_meter.val,\n                        self.steps[Phase.VAL],\n                    )\n\n            if data_iter % 10 == 0:\n                dist.barrier()\n\n        self.est_epoch_time[phase] = batch_time.avg * iters_per_epoch\n        self._log_timers(phase)\n        for model in curr_models:\n            if hasattr(unwrap_ddp_if_wrapped(model), \"on_validation_epoch_end\"):\n                unwrap_ddp_if_wrapped(model).on_validation_epoch_end()\n\n        out_dict = self._log_meters_and_save_best_ckpts(curr_phases)\n\n        for k, v in loss_mts.items():\n            out_dict[k] = v.avg\n        for k, v in extra_loss_mts.items():\n            out_dict[k] = v.avg\n\n        for phase in curr_phases:\n            out_dict.update(self._get_trainer_state(phase))\n        self._reset_meters(curr_phases)\n        logging.info(f\"Meters: {out_dict}\")\n        return out_dict\n\n    def _get_trainer_state(self, phase):\n        return {\n            \"Trainer/where\": self.where,\n            \"Trainer/epoch\": self.epoch,\n            f\"Trainer/steps_{phase}\": self.steps[phase],\n        }\n\n    def train_epoch(self, train_loader):\n\n        # Init stat meters\n        batch_time_meter = AverageMeter(\"Batch Time\", self.device, \":.2f\")\n        data_time_meter = AverageMeter(\"Data Time\", self.device, \":.2f\")\n        mem_meter = MemMeter(\"Mem (GB)\", self.device, \":.2f\")\n        data_times = []\n        phase = Phase.TRAIN\n\n        iters_per_epoch = len(train_loader)\n\n        loss_names = []\n        for batch_key in self.loss.keys():\n            loss_names.append(f\"Losses/{phase}_{batch_key}_loss\")\n\n        loss_mts = OrderedDict(\n            [(name, AverageMeter(name, self.device, \":.2e\")) for name in loss_names]\n        )\n        extra_loss_mts = {}\n\n        progress = ProgressMeter(\n            iters_per_epoch,\n            [\n                batch_time_meter,\n                data_time_meter,\n                mem_meter,\n                self.time_elapsed_meter,\n                *loss_mts.values(),\n            ],\n            self._get_meters([phase]),\n            prefix=\"Train Epoch: [{}]\".format(self.epoch),\n        )\n\n        # Model training loop\n        self.model.train()\n        end = time.time()\n\n        for data_iter, batch in enumerate(train_loader):\n            # measure data loading time\n            data_time_meter.update(time.time() - end)\n            data_times.append(data_time_meter.val)\n            batch = batch.to(\n                self.device, non_blocking=True\n            )  # move tensors in a tensorclass\n\n            try:\n                self._run_step(batch, phase, loss_mts, extra_loss_mts)\n\n                # compute gradient and do optim step\n                exact_epoch = self.epoch + float(data_iter) / iters_per_epoch\n                self.where = float(exact_epoch) / self.max_epochs\n                assert self.where <= 1 + self.EPSILON\n                if self.where < 1.0:\n                    self.optim.step_schedulers(\n                        self.where, step=int(exact_epoch * iters_per_epoch)\n                    )\n                else:\n                    logging.warning(\n                        f\"Skipping scheduler update since the training is at the end, i.e, {self.where} of [0,1].\"\n                    )\n\n                # Log schedulers\n                if data_iter % self.logging_conf.log_scalar_frequency == 0:\n                    for j, param_group in enumerate(self.optim.optimizer.param_groups):\n                        for option in self.optim.schedulers[j]:\n                            optim_prefix = (\n                                \"\" + f\"{j}_\"\n                                if len(self.optim.optimizer.param_groups) > 1\n                                else \"\"\n                            )\n                            self.logger.log(\n                                os.path.join(\"Optim\", f\"{optim_prefix}\", option),\n                                param_group[option],\n                                self.steps[phase],\n                            )\n\n                # Clipping gradients and detecting diverging gradients\n                if self.gradient_clipper is not None:\n                    self.scaler.unscale_(self.optim.optimizer)\n                    self.gradient_clipper(model=self.model)\n\n                if self.gradient_logger is not None:\n                    self.gradient_logger(\n                        self.model, rank=self.distributed_rank, where=self.where\n                    )\n\n                # Optimizer step: the scaler will make sure gradients are not\n                # applied if the gradients are infinite\n                self.scaler.step(self.optim.optimizer)\n                self.scaler.update()\n\n                # measure elapsed time\n                batch_time_meter.update(time.time() - end)\n                end = time.time()\n\n                self.time_elapsed_meter.update(\n                    time.time() - self.start_time + self.ckpt_time_elapsed\n                )\n\n                mem_meter.update(reset_peak_usage=True)\n                if data_iter % self.logging_conf.log_freq == 0:\n                    progress.display(data_iter)\n\n                if data_iter % self.logging_conf.log_scalar_frequency == 0:\n                    # Log progress meters.\n                    for progress_meter in progress.meters:\n                        self.logger.log(\n                            os.path.join(\"Step_Stats\", phase, progress_meter.name),\n                            progress_meter.val,\n                            self.steps[phase],\n                        )\n\n            # Catching NaN/Inf errors in the loss\n            except FloatingPointError as e:\n                raise e\n\n        self.est_epoch_time[Phase.TRAIN] = batch_time_meter.avg * iters_per_epoch\n        self._log_timers(Phase.TRAIN)\n        self._log_sync_data_times(Phase.TRAIN, data_times)\n\n        out_dict = self._log_meters_and_save_best_ckpts([Phase.TRAIN])\n\n        for k, v in loss_mts.items():\n            out_dict[k] = v.avg\n        for k, v in extra_loss_mts.items():\n            out_dict[k] = v.avg\n        out_dict.update(self._get_trainer_state(phase))\n        logging.info(f\"Losses and meters: {out_dict}\")\n        self._reset_meters([phase])\n        return out_dict\n\n    def _log_sync_data_times(self, phase, data_times):\n        data_times = all_reduce_max(torch.tensor(data_times)).tolist()\n        steps = range(self.steps[phase] - len(data_times), self.steps[phase])\n        for step, data_time in zip(steps, data_times):\n            if step % self.logging_conf.log_scalar_frequency == 0:\n                self.logger.log(\n                    os.path.join(\"Step_Stats\", phase, \"Data Time Synced\"),\n                    data_time,\n                    step,\n                )\n\n    def _run_step(\n        self,\n        batch: BatchedVideoDatapoint,\n        phase: str,\n        loss_mts: Dict[str, AverageMeter],\n        extra_loss_mts: Dict[str, AverageMeter],\n        raise_on_error: bool = True,\n    ):\n        \"\"\"\n        Run the forward / backward\n        \"\"\"\n\n        # it's important to set grads to None, especially with Adam since 0\n        # grads will also update a model even if the step doesn't produce\n        # gradients\n        self.optim.zero_grad(set_to_none=True)\n        with torch.cuda.amp.autocast(\n            enabled=self.optim_conf.amp.enabled,\n            dtype=get_amp_type(self.optim_conf.amp.amp_dtype),\n        ):\n            loss_dict, batch_size, extra_losses = self._step(\n                batch,\n                self.model,\n                phase,\n            )\n\n        assert len(loss_dict) == 1\n        loss_key, loss = loss_dict.popitem()\n\n        if not math.isfinite(loss.item()):\n            error_msg = f\"Loss is {loss.item()}, attempting to stop training\"\n            logging.error(error_msg)\n            if raise_on_error:\n                raise FloatingPointError(error_msg)\n            else:\n                return\n\n        self.scaler.scale(loss).backward()\n        loss_mts[loss_key].update(loss.item(), batch_size)\n        for extra_loss_key, extra_loss in extra_losses.items():\n            if extra_loss_key not in extra_loss_mts:\n                extra_loss_mts[extra_loss_key] = AverageMeter(\n                    extra_loss_key, self.device, \":.2e\"\n                )\n            extra_loss_mts[extra_loss_key].update(extra_loss.item(), batch_size)\n\n    def _log_meters_and_save_best_ckpts(self, phases: List[str]):\n        logging.info(\"Synchronizing meters\")\n        out_dict = {}\n        checkpoint_save_keys = []\n        for key, meter in self._get_meters(phases).items():\n            meter_output = meter.compute_synced()\n            is_better_check = getattr(meter, \"is_better\", None)\n\n            for meter_subkey, meter_value in meter_output.items():\n                out_dict[os.path.join(\"Meters_train\", key, meter_subkey)] = meter_value\n\n                if is_better_check is None:\n                    continue\n\n                tracked_meter_key = os.path.join(key, meter_subkey)\n                if tracked_meter_key not in self.best_meter_values or is_better_check(\n                    meter_value,\n                    self.best_meter_values[tracked_meter_key],\n                ):\n                    self.best_meter_values[tracked_meter_key] = meter_value\n\n                    if (\n                        self.checkpoint_conf.save_best_meters is not None\n                        and key in self.checkpoint_conf.save_best_meters\n                    ):\n                        checkpoint_save_keys.append(tracked_meter_key.replace(\"/\", \"_\"))\n\n        if len(checkpoint_save_keys) > 0:\n            self.save_checkpoint(self.epoch + 1, checkpoint_save_keys)\n\n        return out_dict\n\n    def _log_timers(self, phase):\n        time_remaining = 0\n        epochs_remaining = self.max_epochs - self.epoch - 1\n        val_epochs_remaining = sum(\n            n % self.val_epoch_freq == 0 for n in range(self.epoch, self.max_epochs)\n        )\n\n        # Adding the guaranteed val run at the end if val_epoch_freq doesn't coincide with\n        # the end epoch.\n        if (self.max_epochs - 1) % self.val_epoch_freq != 0:\n            val_epochs_remaining += 1\n\n        # Remove the current val run from estimate\n        if phase == Phase.VAL:\n            val_epochs_remaining -= 1\n\n        time_remaining += (\n            epochs_remaining * self.est_epoch_time[Phase.TRAIN]\n            + val_epochs_remaining * self.est_epoch_time[Phase.VAL]\n        )\n\n        self.logger.log(\n            os.path.join(\"Step_Stats\", phase, self.time_elapsed_meter.name),\n            self.time_elapsed_meter.val,\n            self.steps[phase],\n        )\n\n        logging.info(f\"Estimated time remaining: {human_readable_time(time_remaining)}\")\n\n    def _reset_meters(self, phases: str) -> None:\n        for meter in self._get_meters(phases).values():\n            meter.reset()\n\n    def _check_val_key_match(self, val_keys, phase):\n        if val_keys is not None:\n            # Check if there are any duplicates\n            assert len(val_keys) == len(\n                set(val_keys)\n            ), f\"Duplicate keys in val datasets, keys: {val_keys}\"\n\n            # Check that the keys match the meter keys\n            if self.meters_conf is not None and phase in self.meters_conf:\n                assert set(val_keys) == set(self.meters_conf[phase].keys()), (\n                    f\"Keys in val datasets do not match the keys in meters.\"\n                    f\"\\nMissing in meters: {set(val_keys) - set(self.meters_conf[phase].keys())}\"\n                    f\"\\nMissing in val datasets: {set(self.meters_conf[phase].keys()) - set(val_keys)}\"\n                )\n\n            if self.loss_conf is not None:\n                loss_keys = set(self.loss_conf.keys()) - set([\"all\"])\n                assert all([k in loss_keys for k in val_keys]), (\n                    f\"Keys in val datasets do not match the keys in losses.\"\n                    f\"\\nMissing in losses: {set(val_keys) - loss_keys}\"\n                    f\"\\nMissing in val datasets: {loss_keys - set(val_keys)}\"\n                )\n\n    def _setup_components(self):\n\n        # Get the keys for all the val datasets, if any\n        val_phase = Phase.VAL\n        val_keys = None\n        if self.data_conf.get(val_phase, None) is not None:\n            val_keys = collect_dict_keys(self.data_conf[val_phase])\n        # Additional checks on the sanity of the config for val datasets\n        self._check_val_key_match(val_keys, phase=val_phase)\n\n        logging.info(\"Setting up components: Model, loss, optim, meters etc.\")\n        self.epoch = 0\n        self.steps = {Phase.TRAIN: 0, Phase.VAL: 0}\n\n        self.logger = Logger(self.logging_conf)\n\n        self.model = instantiate(self.model_conf, _convert_=\"all\")\n        print_model_summary(self.model)\n\n        self.loss = None\n        if self.loss_conf:\n            self.loss = {\n                key: el  # wrap_base_loss(el)\n                for (key, el) in instantiate(self.loss_conf, _convert_=\"all\").items()\n            }\n            self.loss = nn.ModuleDict(self.loss)\n\n        self.meters = {}\n        self.best_meter_values = {}\n        if self.meters_conf:\n            self.meters = instantiate(self.meters_conf, _convert_=\"all\")\n\n        self.scaler = torch.amp.GradScaler(\n            self.device,\n            enabled=self.optim_conf.amp.enabled if self.optim_conf else False,\n        )\n\n        self.gradient_clipper = (\n            instantiate(self.optim_conf.gradient_clip) if self.optim_conf else None\n        )\n        self.gradient_logger = (\n            instantiate(self.optim_conf.gradient_logger) if self.optim_conf else None\n        )\n\n        logging.info(\"Finished setting up components: Model, loss, optim, meters etc.\")\n\n    def _construct_optimizers(self):\n        self.optim = construct_optimizer(\n            self.model,\n            self.optim_conf.optimizer,\n            self.optim_conf.options,\n            self.optim_conf.param_group_modifiers,\n        )\n\n    def _log_loss_detailed_and_return_core_loss(self, loss, loss_str, step):\n        core_loss = loss.pop(CORE_LOSS_KEY)\n        if step % self.logging_conf.log_scalar_frequency == 0:\n            for k in loss:\n                log_str = os.path.join(loss_str, k)\n                self.logger.log(log_str, loss[k], step)\n        return core_loss\n\n\ndef print_model_summary(model: torch.nn.Module, log_dir: str = \"\"):\n    \"\"\"\n    Prints the model and the number of parameters in the model.\n    # Multiple packages provide this info in a nice table format\n    # However, they need us to provide an `input` (as they also write down the output sizes)\n    # Our models are complex, and a single input is restrictive.\n    # https://github.com/sksq96/pytorch-summary\n    # https://github.com/nmhkahn/torchsummaryX\n    \"\"\"\n    if get_rank() != 0:\n        return\n    param_kwargs = {}\n    trainable_parameters = sum(\n        p.numel() for p in model.parameters(**param_kwargs) if p.requires_grad\n    )\n    total_parameters = sum(p.numel() for p in model.parameters(**param_kwargs))\n    non_trainable_parameters = total_parameters - trainable_parameters\n    logging.info(\"==\" * 10)\n    logging.info(f\"Summary for model {type(model)}\")\n    logging.info(f\"Model is {model}\")\n    logging.info(f\"\\tTotal parameters {get_human_readable_count(total_parameters)}\")\n    logging.info(\n        f\"\\tTrainable parameters {get_human_readable_count(trainable_parameters)}\"\n    )\n    logging.info(\n        f\"\\tNon-Trainable parameters {get_human_readable_count(non_trainable_parameters)}\"\n    )\n    logging.info(\"==\" * 10)\n\n    if log_dir:\n        output_fpath = os.path.join(log_dir, \"model.txt\")\n        with g_pathmgr.open(output_fpath, \"w\") as f:\n            print(model, file=f)\n\n\nPARAMETER_NUM_UNITS = [\" \", \"K\", \"M\", \"B\", \"T\"]\n\n\ndef get_human_readable_count(number: int) -> str:\n    \"\"\"\n    Abbreviates an integer number with K, M, B, T for thousands, millions,\n    billions and trillions, respectively.\n    Examples:\n        >>> get_human_readable_count(123)\n        '123  '\n        >>> get_human_readable_count(1234)  # (one thousand)\n        '1.2 K'\n        >>> get_human_readable_count(2e6)   # (two million)\n        '2.0 M'\n        >>> get_human_readable_count(3e9)   # (three billion)\n        '3.0 B'\n        >>> get_human_readable_count(4e14)  # (four hundred trillion)\n        '400 T'\n        >>> get_human_readable_count(5e15)  # (more than trillion)\n        '5,000 T'\n    Args:\n        number: a positive integer number\n    Return:\n        A string formatted according to the pattern described above.\n    \"\"\"\n    assert number >= 0\n    labels = PARAMETER_NUM_UNITS\n    num_digits = int(np.floor(np.log10(number)) + 1 if number > 0 else 1)\n    num_groups = int(np.ceil(num_digits / 3))\n    num_groups = min(num_groups, len(labels))  # don't abbreviate beyond trillions\n    shift = -3 * (num_groups - 1)\n    number = number * (10**shift)\n    index = num_groups - 1\n    if index < 1 or number >= 100:\n        return f\"{int(number):,d} {labels[index]}\"\n    else:\n        return f\"{number:,.1f} {labels[index]}\"\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/utils/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/utils/checkpoint_utils.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport contextlib\nimport fnmatch\nimport logging\nfrom typing import (\n    Any,\n    Callable,\n    Dict,\n    List,\n    Mapping,\n    Optional,\n    Sequence,\n    Set,\n    Tuple,\n    Union,\n)\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom iopath.common.file_io import g_pathmgr\nfrom torch.jit._script import RecursiveScriptModule\n\n\ndef unix_pattern_to_parameter_names(\n    constraints: List[str], all_parameter_names: Sequence[str]\n) -> Union[None, Set[str]]:\n    \"\"\"\n    Go through the list of parameter names and select those that match\n    any of the provided constraints\n    \"\"\"\n    parameter_names = []\n    for param_name in constraints:\n        matching_parameters = set(fnmatch.filter(all_parameter_names, param_name))\n        assert (\n            len(matching_parameters) > 0\n        ), f\"param_names {param_name} don't match any param in the given names.\"\n        parameter_names.append(matching_parameters)\n    return set.union(*parameter_names)\n\n\ndef filter_params_matching_unix_pattern(\n    patterns: List[str], state_dict: Dict[str, torch.Tensor]\n) -> Dict[str, torch.Tensor]:\n    \"\"\"\n    Remove from the state dictionary the parameters matching the provided unix patterns\n\n    Args:\n        patterns: the list of unix patterns to exclude\n        state_dict: the dictionary to filter\n\n    Returns:\n        A new state dictionary\n    \"\"\"\n    if len(patterns) == 0:\n        return {}\n\n    all_keys = list(state_dict.keys())\n    included_keys = unix_pattern_to_parameter_names(patterns, all_keys)\n    return {k: state_dict[k] for k in included_keys}\n\n\ndef exclude_params_matching_unix_pattern(\n    patterns: List[str], state_dict: Dict[str, torch.Tensor]\n) -> Dict[str, torch.Tensor]:\n    \"\"\"\n    Remove from the state dictionary the parameters matching the provided unix patterns\n\n    Args:\n        patterns: the list of unix patterns to exclude\n        state_dict: the dictionary to filter\n\n    Returns:\n        A new state dictionary\n    \"\"\"\n    if len(patterns) == 0:\n        return state_dict\n\n    all_keys = list(state_dict.keys())\n    excluded_keys = unix_pattern_to_parameter_names(patterns, all_keys)\n    return {k: v for k, v in state_dict.items() if k not in excluded_keys}\n\n\ndef _get_state_dict_summary(state_dict: Dict[str, torch.Tensor]):\n    keys = []\n    trace = []\n    for k, v in state_dict.items():\n        keys.append(k)\n        trace.append(v.sum().item())\n    trace = np.array(trace)[np.argsort(keys)]\n    return trace\n\n\ndef assert_skipped_parameters_are_frozen(model: nn.Module, patterns: List[str]):\n    \"\"\"\n    Verifies that all the parameters matching the provided patterns\n    are frozen - this acts as a safeguard when ignoring parameter\n    when saving checkpoints - if the parameters are in fact trainable\n    \"\"\"\n    if not patterns:\n        return\n\n    frozen_state_dict = filter_params_matching_unix_pattern(\n        patterns=patterns, state_dict=model.state_dict()\n    )\n    non_frozen_keys = {\n        n\n        for n, p in model.named_parameters()\n        if n in frozen_state_dict and p.requires_grad\n    }\n    if non_frozen_keys:\n        raise ValueError(\n            f\"Parameters excluded with `skip_saving_parameters` should be frozen: {non_frozen_keys}\"\n        )\n\n\n@contextlib.contextmanager\ndef with_check_parameter_frozen(\n    model: nn.Module, patterns: List[str], disabled: bool = True\n):\n    \"\"\"\n    Context manager that inspects a model surrounding a piece of code\n    and verifies if the model has been updated by this piece of code\n\n    The function will raise an exception if the model has been updated\n    on at least one of the parameter that matches one of the pattern\n\n    Args:\n        model: the model that might have been updated\n        patterns: for the parameters we want to observe\n        allowed:\n    \"\"\"\n    if not patterns or disabled:\n        yield\n        return\n\n    frozen_state_dict = filter_params_matching_unix_pattern(\n        patterns=patterns, state_dict=model.state_dict()\n    )\n    summary_before = _get_state_dict_summary(frozen_state_dict)\n\n    yield\n\n    frozen_state_dict = filter_params_matching_unix_pattern(\n        patterns=patterns, state_dict=model.state_dict()\n    )\n    summary_after = _get_state_dict_summary(frozen_state_dict)\n\n    if not np.allclose(summary_before, summary_after, atol=1e-6):\n        raise ValueError(\n            f\"\"\"\n            The `model_weight_initializer` has initialized parameters frozen with `skip_saving_parameters`.\n            You can resolve this error by either initializing those parameters from within the model definition\n            or using the flag `trainer.checkpoint.initialize_after_preemption` to True.\n        \"\"\"\n        )\n\n\nclass CkptExcludeKernel:\n    \"\"\"\n    Removes the keys from the given model state_dict that match the key_pattern.\n\n    Args:\n        key_pattern: Patterns used to select the keys in the state_dict\n            that are eligible for this kernel.\n    \"\"\"\n\n    def __init__(self, key_pattern: List[str]):\n        self.key_pattern = key_pattern\n\n    def __call__(self, state_dict: Dict):\n        \"\"\"\n        Args:\n            state_dict: A dictionary representing the given checkpoint's state dict.\n        \"\"\"\n        if len(self.key_pattern) == 0:\n            return state_dict\n        exclude_keys = unix_pattern_to_parameter_names(\n            self.key_pattern, state_dict.keys()\n        )\n        return {k: v for k, v in state_dict.items() if k not in exclude_keys}\n\n\ndef load_checkpoint(\n    path_list: List[str],\n    pick_recursive_keys: Optional[List[str]] = None,\n    map_location: str = \"cpu\",\n) -> Any:\n    \"\"\"\n    Loads a checkpoint from the specified path.\n\n    Args:\n        path_list: A list of paths which contain the checkpoint. Each element\n            is tried (in order) until a file that exists is found. That file is then\n            used to read the checkpoint.\n        pick_recursive_keys: Picks sub dicts from the loaded checkpoint if not None.\n            For pick_recursive_keys = [\"a\", \"b\"], will return checkpoint_dict[\"a\"][\"b\"]\n        map_location (str): a function, torch.device, string or a dict specifying how to\n            remap storage locations\n\n    Returns: Model with the matchin pre-trained weights loaded.\n    \"\"\"\n    path_exists = False\n    for path in path_list:\n        if g_pathmgr.exists(path):\n            path_exists = True\n            break\n\n    if not path_exists:\n        raise ValueError(f\"No path exists in {path_list}\")\n\n    with g_pathmgr.open(path, \"rb\") as f:\n        checkpoint = torch.load(f, map_location=map_location)\n\n    logging.info(f\"Loaded checkpoint from {path}\")\n    if pick_recursive_keys is not None:\n        for key in pick_recursive_keys:\n            checkpoint = checkpoint[key]\n    return checkpoint\n\n\ndef get_state_dict(checkpoint, ckpt_state_dict_keys):\n    if isinstance(checkpoint, RecursiveScriptModule):\n        # This is a torchscript JIT model\n        return checkpoint.state_dict()\n    pre_train_dict = checkpoint\n    for i, key in enumerate(ckpt_state_dict_keys):\n        if (isinstance(pre_train_dict, Mapping) and key not in pre_train_dict) or (\n            isinstance(pre_train_dict, Sequence) and key >= len(pre_train_dict)\n        ):\n            key_str = (\n                '[\"' + '\"][\"'.join(list(map(ckpt_state_dict_keys[:i], str))) + '\"]'\n            )\n            raise KeyError(\n                f\"'{key}' not found in checkpoint{key_str} \"\n                f\"with keys: {pre_train_dict.keys()}\"\n            )\n        pre_train_dict = pre_train_dict[key]\n    return pre_train_dict\n\n\ndef load_checkpoint_and_apply_kernels(\n    checkpoint_path: str,\n    checkpoint_kernels: List[Callable] = None,\n    ckpt_state_dict_keys: Tuple[str] = (\"state_dict\",),\n    map_location: str = \"cpu\",\n) -> nn.Module:\n    \"\"\"\n    Performs checkpoint loading with a variety of pre-processing kernel applied in\n    sequence.\n\n    Args:\n        checkpoint_path (str): Path to the checkpoint.\n        checkpoint_kernels List(Callable): A list of checkpoint processing kernels\n            to apply in the specified order. Supported kernels include `CkptIncludeKernel`,\n            `CkptExcludeKernel`, etc. These kernels are applied in the\n            given order.\n        ckpt_state_dict_keys (str): Keys containing the model state dict.\n        map_location (str): a function, torch.device, string or a dict specifying how to\n            remap storage locations\n\n    Returns: Model with the matchin pre-trained weights loaded.\n    \"\"\"\n    assert g_pathmgr.exists(checkpoint_path), \"Checkpoint '{}' not found\".format(\n        checkpoint_path\n    )\n\n    # Load the checkpoint on CPU to avoid GPU mem spike.\n    with g_pathmgr.open(checkpoint_path, \"rb\") as f:\n        checkpoint = torch.load(f, map_location=map_location)\n\n    pre_train_dict = get_state_dict(checkpoint, ckpt_state_dict_keys)\n\n    # Not logging into info etc since it's a huge log\n    logging.debug(\n        \"Loaded Checkpoint State Dict pre-kernel application: %s\"\n        % str(\", \".join(list(pre_train_dict.keys())))\n    )\n    # Apply kernels\n    if checkpoint_kernels is not None:\n        for f in checkpoint_kernels:\n            pre_train_dict = f(state_dict=pre_train_dict)\n\n    logging.debug(\n        \"Loaded Checkpoint State Dict Post-kernel application %s\"\n        % str(\", \".join(list(pre_train_dict.keys())))\n    )\n\n    return pre_train_dict\n\n\ndef check_load_state_dict_errors(\n    missing_keys,\n    unexpected_keys,\n    strict: bool,\n    ignore_missing_keys: List[str] = None,\n    ignore_unexpected_keys: List[str] = None,\n):\n    if ignore_missing_keys is not None and len(ignore_missing_keys) > 0:\n        ignored_keys = unix_pattern_to_parameter_names(\n            ignore_missing_keys, missing_keys\n        )\n        missing_keys = [key for key in missing_keys if key not in ignored_keys]\n\n    if ignore_unexpected_keys is not None and len(ignore_unexpected_keys) > 0:\n        ignored_unexpected_keys = unix_pattern_to_parameter_names(\n            ignore_unexpected_keys, unexpected_keys\n        )\n        unexpected_keys = [\n            key for key in unexpected_keys if key not in ignored_unexpected_keys\n        ]\n\n    err = \"State key mismatch.\"\n    if unexpected_keys:\n        err += f\" Unexpected keys: {unexpected_keys}.\"\n    if missing_keys:\n        err += f\" Missing keys: {missing_keys}.\"\n\n    if unexpected_keys or missing_keys:\n        logging.warning(err)\n        if unexpected_keys or strict:\n            raise KeyError(err)\n\n\ndef load_state_dict_into_model(\n    state_dict: Dict,\n    model: nn.Module,\n    strict: bool = True,\n    ignore_missing_keys: List[str] = None,\n    ignore_unexpected_keys: List[str] = None,\n    checkpoint_kernels: List[Callable] = None,\n):\n    \"\"\"\n    Loads a state dict into the given model.\n\n    Args:\n        state_dict: A dictionary containing the model's\n            state dict, or a subset if strict is False\n        model: Model to load the checkpoint weights into\n        strict: raise if the state_dict has missing state keys\n        ignore_missing_keys: unix pattern of keys to ignore\n    \"\"\"\n    # Apply kernels\n    if checkpoint_kernels is not None:\n        for f in checkpoint_kernels:\n            state_dict = f(state_dict=state_dict)\n    missing_keys, unexpected_keys = model.load_state_dict(state_dict, strict=False)\n\n    check_load_state_dict_errors(\n        missing_keys,\n        unexpected_keys,\n        strict=strict,\n        ignore_missing_keys=ignore_missing_keys,\n        ignore_unexpected_keys=ignore_unexpected_keys,\n    )\n    return model\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/utils/data_utils.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\"\"\"\nMisc functions, including distributed helpers.\n\nMostly copy-paste from torchvision references.\n\"\"\"\n\nfrom dataclasses import dataclass\nfrom typing import List, Optional, Tuple, Union\n\nimport torch\n\nfrom PIL import Image as PILImage\nfrom tensordict import tensorclass\n\n\n@tensorclass\nclass BatchedVideoMetaData:\n    \"\"\"\n    This class represents metadata about a batch of videos.\n    Attributes:\n        unique_objects_identifier: A tensor of shape Bx3 containing unique identifiers for each object in the batch. Index consists of (video_id, obj_id, frame_id)\n        frame_orig_size: A tensor of shape Bx2 containing the original size of each frame in the batch.\n    \"\"\"\n\n    unique_objects_identifier: torch.LongTensor\n    frame_orig_size: torch.LongTensor\n\n\n@tensorclass\nclass BatchedVideoDatapoint:\n    \"\"\"\n    This class represents a batch of videos with associated annotations and metadata.\n    Attributes:\n        img_batch: A [TxBxCxHxW] tensor containing the image data for each frame in the batch, where T is the number of frames per video, and B is the number of videos in the batch.\n        obj_to_frame_idx: A [TxOx2] tensor containing the image_batch index which the object belongs to. O is the number of objects in the batch.\n        masks: A [TxOxHxW] tensor containing binary masks for each object in the batch.\n        metadata: An instance of BatchedVideoMetaData containing metadata about the batch.\n        dict_key: A string key used to identify the batch.\n    \"\"\"\n\n    img_batch: torch.FloatTensor\n    obj_to_frame_idx: torch.IntTensor\n    masks: torch.BoolTensor\n    metadata: BatchedVideoMetaData\n\n    dict_key: str\n\n    def pin_memory(self, device=None):\n        return self.apply(torch.Tensor.pin_memory, device=device)\n\n    @property\n    def num_frames(self) -> int:\n        \"\"\"\n        Returns the number of frames per video.\n        \"\"\"\n        return self.batch_size[0]\n\n    @property\n    def num_videos(self) -> int:\n        \"\"\"\n        Returns the number of videos in the batch.\n        \"\"\"\n        return self.img_batch.shape[1]\n\n    @property\n    def flat_obj_to_img_idx(self) -> torch.IntTensor:\n        \"\"\"\n        Returns a flattened tensor containing the object to img index.\n        The flat index can be used to access a flattened img_batch of shape [(T*B)xCxHxW]\n        \"\"\"\n        frame_idx, video_idx = self.obj_to_frame_idx.unbind(dim=-1)\n        flat_idx = video_idx * self.num_frames + frame_idx\n        return flat_idx\n\n    @property\n    def flat_img_batch(self) -> torch.FloatTensor:\n        \"\"\"\n        Returns a flattened img_batch_tensor of shape [(B*T)xCxHxW]\n        \"\"\"\n\n        return self.img_batch.transpose(0, 1).flatten(0, 1)\n\n\n@dataclass\nclass Object:\n    # Id of the object in the media\n    object_id: int\n    # Index of the frame in the media (0 if single image)\n    frame_index: int\n    segment: Union[torch.Tensor, dict]  # RLE dict or binary mask\n\n\n@dataclass\nclass Frame:\n    data: Union[torch.Tensor, PILImage.Image]\n    objects: List[Object]\n\n\n@dataclass\nclass VideoDatapoint:\n    \"\"\"Refers to an image/video and all its annotations\"\"\"\n\n    frames: List[Frame]\n    video_id: int\n    size: Tuple[int, int]\n\n\ndef collate_fn(\n    batch: List[VideoDatapoint],\n    dict_key,\n) -> BatchedVideoDatapoint:\n    \"\"\"\n    Args:\n        batch: A list of VideoDatapoint instances.\n        dict_key (str): A string key used to identify the batch.\n    \"\"\"\n    img_batch = []\n    for video in batch:\n        img_batch += [torch.stack([frame.data for frame in video.frames], dim=0)]\n\n    img_batch = torch.stack(img_batch, dim=0).permute((1, 0, 2, 3, 4))\n    T = img_batch.shape[0]\n    # Prepare data structures for sequential processing. Per-frame processing but batched across videos.\n    step_t_objects_identifier = [[] for _ in range(T)]\n    step_t_frame_orig_size = [[] for _ in range(T)]\n\n    step_t_masks = [[] for _ in range(T)]\n    step_t_obj_to_frame_idx = [\n        [] for _ in range(T)\n    ]  # List to store frame indices for each time step\n\n    for video_idx, video in enumerate(batch):\n        orig_video_id = video.video_id\n        orig_frame_size = video.size\n        for t, frame in enumerate(video.frames):\n            objects = frame.objects\n            for obj in objects:\n                orig_obj_id = obj.object_id\n                orig_frame_idx = obj.frame_index\n                step_t_obj_to_frame_idx[t].append(\n                    torch.tensor([t, video_idx], dtype=torch.int)\n                )\n                step_t_masks[t].append(obj.segment.to(torch.bool))\n                step_t_objects_identifier[t].append(\n                    torch.tensor([orig_video_id, orig_obj_id, orig_frame_idx])\n                )\n                step_t_frame_orig_size[t].append(torch.tensor(orig_frame_size))\n\n    obj_to_frame_idx = torch.stack(\n        [\n            torch.stack(obj_to_frame_idx, dim=0)\n            for obj_to_frame_idx in step_t_obj_to_frame_idx\n        ],\n        dim=0,\n    )\n    masks = torch.stack([torch.stack(masks, dim=0) for masks in step_t_masks], dim=0)\n    objects_identifier = torch.stack(\n        [torch.stack(id, dim=0) for id in step_t_objects_identifier], dim=0\n    )\n    frame_orig_size = torch.stack(\n        [torch.stack(id, dim=0) for id in step_t_frame_orig_size], dim=0\n    )\n    return BatchedVideoDatapoint(\n        img_batch=img_batch,\n        obj_to_frame_idx=obj_to_frame_idx,\n        masks=masks,\n        metadata=BatchedVideoMetaData(\n            unique_objects_identifier=objects_identifier,\n            frame_orig_size=frame_orig_size,\n        ),\n        dict_key=dict_key,\n        batch_size=[T],\n    )\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/utils/distributed.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport datetime\nimport functools\nimport io\nimport logging\nimport os\nimport random\nimport tempfile\nimport time\nfrom typing import Any, Callable, List, Tuple\n\nimport torch\nimport torch.autograd as autograd\nimport torch.distributed as dist\n\n\n# Default to GPU 0\n_cuda_device_index: int = 0\n\n# Setting _cuda_device_index to -1 internally implies that we should use CPU\n_CPU_DEVICE_INDEX = -1\n_PRIMARY_RANK = 0\n\n\n@functools.lru_cache()\ndef _get_global_gloo_group():\n    \"\"\"\n    Return a process group based on gloo backend, containing all the ranks\n    The result is cached.\n    \"\"\"\n\n    if dist.get_backend() == \"nccl\":\n        # Increase timeout from 1800 sec to 43200 sec (12 hr) to avoid some processes\n        # being much slower than others causing a timeout (which can happen in relation\n        # or LVIS class mAP evaluation).\n        timeout = 43200\n        return dist.new_group(\n            backend=\"gloo\",\n            timeout=datetime.timedelta(seconds=timeout),\n        )\n\n    return dist.group.WORLD\n\n\ndef is_main_process():\n    \"\"\"Return true if the current process is the main one\"\"\"\n    return get_rank() == 0\n\n\ndef all_gather_via_filesys(data, filesys_save_dir=None, gather_to_rank_0_only=False):\n    \"\"\"\n    Run all_gather on arbitrary picklable data (not necessarily tensors), similar to\n    `all_gather` above, but using filesystem instead of collective ops.\n\n    If gather_to_rank_0_only is True, only rank 0 will load the gathered object list\n    (and other ranks will have an empty list).\n    \"\"\"\n    world_size = get_world_size()\n    if world_size == 1:\n        return [data]\n\n    print(\"gathering via files\")\n    cpu_group = _get_global_gloo_group()\n\n    # if unspecified, we will save to the current python file dir\n    if filesys_save_dir is not None:\n        save_dir = filesys_save_dir\n    elif \"EXP_DIR\" in os.environ:\n        save_dir = os.environ[\"EXP_DIR\"]\n    else:\n        # try the same directory where the code is stored\n        save_dir = filesys_save_dir or os.path.dirname(__file__)\n    save_dir = os.path.join(save_dir, \"all_gather_via_filesys\")\n    if is_main_process():\n        os.makedirs(save_dir, exist_ok=True)\n\n    # use a timestamp and salt to distinguish different all_gather\n    timestamp = int(time.time()) if is_main_process() else 0\n    salt = random.randint(0, 2**31 - 1) if is_main_process() else 0\n    # broadcast the timestamp and salt across ranks\n    # (all-reduce will do the broadcasting since only rank 0 is non-zero)\n    timestamp_and_salt = torch.tensor([timestamp, salt], dtype=torch.long)\n    dist.all_reduce(timestamp_and_salt, group=cpu_group)\n    timestamp, salt = timestamp_and_salt.tolist()\n\n    # save the data to a file on the disk\n    rank_save = get_rank()\n    save_data_filename = f\"data_to_gather_{timestamp}_{salt}_{rank_save}.pkl\"\n    save_data_path = os.path.join(save_dir, save_data_filename)\n    assert not os.path.exists(save_data_path), f\"{save_data_path} already exists\"\n    torch.save(data, save_data_path)\n    dist.barrier(group=cpu_group)\n\n    # read the data from the files\n    data_list = []\n    if rank_save == 0 or not gather_to_rank_0_only:\n        for rank_load in range(world_size):\n            load_data_filename = f\"data_to_gather_{timestamp}_{salt}_{rank_load}.pkl\"\n            load_data_path = os.path.join(save_dir, load_data_filename)\n            assert os.path.exists(load_data_path), f\"cannot read {save_data_path}\"\n            data_list.append(torch.load(load_data_path))\n    dist.barrier(group=cpu_group)\n\n    # delete the saved file\n    os.remove(save_data_path)\n    return data_list\n\n\ndef all_gather(data, force_cpu=False, force_filesys=False, filesys_save_dir=None):\n    \"\"\"\n    Run all_gather on arbitrary picklable data (not necessarily tensors)\n    Args:\n        data: any picklable object\n    Returns:\n        list[data]: list of data gathered from each rank\n    \"\"\"\n\n    world_size = get_world_size()\n    if world_size == 1:\n        return [data]\n\n    if os.getenv(\"MDETR_FILESYS_REDUCE_RANK_0_ONLY\") == \"1\":\n        return all_gather_via_filesys(\n            data, filesys_save_dir, gather_to_rank_0_only=True\n        )\n\n    if os.getenv(\"MDETR_FILESYS_REDUCE\") == \"1\" or force_filesys:\n        return all_gather_via_filesys(data, filesys_save_dir)\n\n    cpu_group = None\n    if os.getenv(\"MDETR_CPU_REDUCE\") == \"1\" or force_cpu:\n        cpu_group = _get_global_gloo_group()\n\n    buffer = io.BytesIO()\n    torch.save(data, buffer)\n    data_view = buffer.getbuffer()\n    device = \"cuda\" if cpu_group is None else \"cpu\"\n    tensor = torch.ByteTensor(data_view).to(device)\n\n    # obtain Tensor size of each rank\n    local_size = torch.tensor([tensor.numel()], device=device, dtype=torch.long)\n    size_list = [\n        torch.tensor([0], device=device, dtype=torch.long) for _ in range(world_size)\n    ]\n    if cpu_group is None:\n        dist.all_gather(size_list, local_size)\n    else:\n        print(\"gathering on cpu\")\n        dist.all_gather(size_list, local_size, group=cpu_group)\n    size_list = [int(size.item()) for size in size_list]\n    max_size = max(size_list)\n    assert isinstance(local_size.item(), int)\n    local_size = int(local_size.item())\n\n    # receiving Tensor from all ranks\n    # we pad the tensor because torch all_gather does not support\n    # gathering tensors of different shapes\n    tensor_list = []\n    for _ in size_list:\n        tensor_list.append(torch.empty((max_size,), dtype=torch.uint8, device=device))\n    if local_size != max_size:\n        padding = torch.empty(\n            size=(max_size - local_size,), dtype=torch.uint8, device=device\n        )\n        tensor = torch.cat((tensor, padding), dim=0)\n    if cpu_group is None:\n        dist.all_gather(tensor_list, tensor)\n    else:\n        dist.all_gather(tensor_list, tensor, group=cpu_group)\n\n    data_list = []\n    for size, tensor in zip(size_list, tensor_list):\n        tensor = torch.split(tensor, [size, max_size - size], dim=0)[0]\n        buffer = io.BytesIO(tensor.cpu().numpy())\n        obj = torch.load(buffer)\n        data_list.append(obj)\n\n    return data_list\n\n\ndef convert_to_distributed_tensor(tensor: torch.Tensor) -> Tuple[torch.Tensor, str]:\n    \"\"\"\n    For some backends, such as NCCL, communication only works if the\n    tensor is on the GPU. This helper function converts to the correct\n    device and returns the tensor + original device.\n    \"\"\"\n    orig_device = \"cpu\" if not tensor.is_cuda else \"gpu\"\n    if (\n        torch.distributed.is_available()\n        and torch.distributed.get_backend() == torch.distributed.Backend.NCCL\n        and not tensor.is_cuda\n    ):\n        tensor = tensor.cuda()\n    return (tensor, orig_device)\n\n\ndef convert_to_normal_tensor(tensor: torch.Tensor, orig_device: str) -> torch.Tensor:\n    \"\"\"\n    For some backends, such as NCCL, communication only works if the\n    tensor is on the GPU. This converts the tensor back to original device.\n    \"\"\"\n    if tensor.is_cuda and orig_device == \"cpu\":\n        tensor = tensor.cpu()\n    return tensor\n\n\ndef is_distributed_training_run() -> bool:\n    return (\n        torch.distributed.is_available()\n        and torch.distributed.is_initialized()\n        and (torch.distributed.get_world_size() > 1)\n    )\n\n\ndef is_primary() -> bool:\n    \"\"\"\n    Returns True if this is rank 0 of a distributed training job OR if it is\n    a single trainer job. Otherwise False.\n    \"\"\"\n    return get_rank() == _PRIMARY_RANK\n\n\ndef all_reduce_mean(tensor: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Wrapper over torch.distributed.all_reduce for performing mean reduction\n    of tensor over all processes.\n    \"\"\"\n    return all_reduce_op(\n        tensor,\n        torch.distributed.ReduceOp.SUM,\n        lambda t: t / torch.distributed.get_world_size(),\n    )\n\n\ndef all_reduce_sum(tensor: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Wrapper over torch.distributed.all_reduce for performing sum\n    reduction of tensor over all processes in both distributed /\n    non-distributed scenarios.\n    \"\"\"\n    return all_reduce_op(tensor, torch.distributed.ReduceOp.SUM)\n\n\ndef all_reduce_min(tensor: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Wrapper over torch.distributed.all_reduce for performing min\n    reduction of tensor over all processes in both distributed /\n    non-distributed scenarios.\n    \"\"\"\n    return all_reduce_op(tensor, torch.distributed.ReduceOp.MIN)\n\n\ndef all_reduce_max(tensor: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Wrapper over torch.distributed.all_reduce for performing min\n    reduction of tensor over all processes in both distributed /\n    non-distributed scenarios.\n    \"\"\"\n    return all_reduce_op(tensor, torch.distributed.ReduceOp.MAX)\n\n\ndef all_reduce_op(\n    tensor: torch.Tensor,\n    op: torch.distributed.ReduceOp,\n    after_op_func: Callable[[torch.Tensor], torch.Tensor] = None,\n) -> torch.Tensor:\n    \"\"\"\n    Wrapper over torch.distributed.all_reduce for performing\n    reduction of tensor over all processes in both distributed /\n    non-distributed scenarios.\n    \"\"\"\n    if is_distributed_training_run():\n        tensor, orig_device = convert_to_distributed_tensor(tensor)\n        torch.distributed.all_reduce(tensor, op)\n        if after_op_func is not None:\n            tensor = after_op_func(tensor)\n        tensor = convert_to_normal_tensor(tensor, orig_device)\n    return tensor\n\n\ndef gather_tensors_from_all(tensor: torch.Tensor) -> List[torch.Tensor]:\n    \"\"\"\n    Wrapper over torch.distributed.all_gather for performing\n    'gather' of 'tensor' over all processes in both distributed /\n    non-distributed scenarios.\n    \"\"\"\n    if tensor.ndim == 0:\n        # 0 dim tensors cannot be gathered. so unsqueeze\n        tensor = tensor.unsqueeze(0)\n\n    if is_distributed_training_run():\n        tensor, orig_device = convert_to_distributed_tensor(tensor)\n        gathered_tensors = [\n            torch.zeros_like(tensor) for _ in range(torch.distributed.get_world_size())\n        ]\n        torch.distributed.all_gather(gathered_tensors, tensor)\n        gathered_tensors = [\n            convert_to_normal_tensor(_tensor, orig_device)\n            for _tensor in gathered_tensors\n        ]\n    else:\n        gathered_tensors = [tensor]\n\n    return gathered_tensors\n\n\ndef gather_from_all(tensor: torch.Tensor) -> torch.Tensor:\n    gathered_tensors = gather_tensors_from_all(tensor)\n    gathered_tensor = torch.cat(gathered_tensors, 0)\n    return gathered_tensor\n\n\ndef broadcast(tensor: torch.Tensor, src: int = 0) -> torch.Tensor:\n    \"\"\"\n    Wrapper over torch.distributed.broadcast for broadcasting a tensor from the source\n    to all processes in both distributed / non-distributed scenarios.\n    \"\"\"\n    if is_distributed_training_run():\n        tensor, orig_device = convert_to_distributed_tensor(tensor)\n        torch.distributed.broadcast(tensor, src)\n        tensor = convert_to_normal_tensor(tensor, orig_device)\n    return tensor\n\n\ndef barrier() -> None:\n    \"\"\"\n    Wrapper over torch.distributed.barrier, returns without waiting\n    if the distributed process group is not initialized instead of throwing error.\n    \"\"\"\n    if not torch.distributed.is_available() or not torch.distributed.is_initialized():\n        return\n    torch.distributed.barrier()\n\n\ndef get_world_size() -> int:\n    \"\"\"\n    Simple wrapper for correctly getting worldsize in both distributed\n    / non-distributed settings\n    \"\"\"\n    return (\n        torch.distributed.get_world_size()\n        if torch.distributed.is_available() and torch.distributed.is_initialized()\n        else 1\n    )\n\n\ndef get_rank() -> int:\n    \"\"\"\n    Simple wrapper for correctly getting rank in both distributed\n    / non-distributed settings\n    \"\"\"\n    return (\n        torch.distributed.get_rank()\n        if torch.distributed.is_available() and torch.distributed.is_initialized()\n        else 0\n    )\n\n\ndef get_primary_rank() -> int:\n    return _PRIMARY_RANK\n\n\ndef set_cuda_device_index(idx: int) -> None:\n    global _cuda_device_index\n    _cuda_device_index = idx\n    torch.cuda.set_device(_cuda_device_index)\n\n\ndef set_cpu_device() -> None:\n    global _cuda_device_index\n    _cuda_device_index = _CPU_DEVICE_INDEX\n\n\ndef get_cuda_device_index() -> int:\n    return _cuda_device_index\n\n\ndef init_distributed_data_parallel_model(\n    model: torch.nn.Module,\n    broadcast_buffers: bool = False,\n    find_unused_parameters: bool = True,\n    bucket_cap_mb: int = 25,\n) -> torch.nn.parallel.DistributedDataParallel:\n    global _cuda_device_index\n\n    if _cuda_device_index == _CPU_DEVICE_INDEX:\n        # CPU-only model, don't specify device\n        return torch.nn.parallel.DistributedDataParallel(\n            model,\n            broadcast_buffers=broadcast_buffers,\n            find_unused_parameters=find_unused_parameters,\n            bucket_cap_mb=bucket_cap_mb,\n        )\n    else:\n        # GPU model\n        return torch.nn.parallel.DistributedDataParallel(\n            model,\n            device_ids=[_cuda_device_index],\n            output_device=_cuda_device_index,\n            broadcast_buffers=broadcast_buffers,\n            find_unused_parameters=find_unused_parameters,\n            bucket_cap_mb=bucket_cap_mb,\n        )\n\n\ndef broadcast_object(obj: Any, src: int = _PRIMARY_RANK, use_disk: bool = True) -> Any:\n    \"\"\"Broadcast an object from a source to all workers.\n\n    Args:\n        obj: Object to broadcast, must be serializable\n        src: Source rank for broadcast (default is primary)\n        use_disk: If enabled, removes redundant CPU memory copies by writing to\n            disk\n    \"\"\"\n    # Either broadcast from primary to the fleet (default),\n    # or use the src setting as the original rank\n    if get_rank() == src:\n        # Emit data\n        buffer = io.BytesIO()\n        torch.save(obj, buffer)\n        data_view = buffer.getbuffer()\n        length_tensor = torch.LongTensor([len(data_view)])\n        length_tensor = broadcast(length_tensor, src=src)\n        data_tensor = torch.ByteTensor(data_view)\n        data_tensor = broadcast(data_tensor, src=src)\n    else:\n        # Fetch from the source\n        length_tensor = torch.LongTensor([0])\n        length_tensor = broadcast(length_tensor, src=src)\n        data_tensor = torch.empty([length_tensor.item()], dtype=torch.uint8)\n        data_tensor = broadcast(data_tensor, src=src)\n        if use_disk:\n            with tempfile.TemporaryFile(\"r+b\") as f:\n                f.write(data_tensor.numpy())\n                # remove reference to the data tensor and hope that Python garbage\n                # collects it\n                del data_tensor\n                f.seek(0)\n                obj = torch.load(f)\n        else:\n            buffer = io.BytesIO(data_tensor.numpy())\n            obj = torch.load(buffer)\n    return obj\n\n\ndef all_gather_tensor(tensor: torch.Tensor, world_size=None):\n    if world_size is None:\n        world_size = get_world_size()\n    # make contiguous because NCCL won't gather the tensor otherwise\n    assert tensor.is_contiguous(), f\"{tensor.shape} is not contiguous!\"\n    tensor, orig_device = convert_to_distributed_tensor(tensor)\n    tensor_all = [torch.ones_like(tensor) for _ in range(world_size)]\n    dist.all_gather(tensor_all, tensor, async_op=False)  # performance opt\n    tensor_all = [\n        convert_to_normal_tensor(tensor, orig_device) for tensor in tensor_all\n    ]\n    return tensor_all\n\n\ndef all_gather_batch(tensors: List[torch.Tensor]):\n    \"\"\"\n    Performs all_gather operation on the provided tensors.\n    \"\"\"\n    # Queue the gathered tensors\n    world_size = get_world_size()\n    # There is no need for reduction in the single-proc case\n    if world_size == 1:\n        return tensors\n    tensor_list = []\n    output_tensor = []\n    for tensor in tensors:\n        tensor_all = all_gather_tensor(tensor, world_size)\n        tensor_list.append(tensor_all)\n\n    for tensor_all in tensor_list:\n        output_tensor.append(torch.cat(tensor_all, dim=0))\n    return output_tensor\n\n\nclass GatherLayer(autograd.Function):\n    \"\"\"\n    Gather tensors from all workers with support for backward propagation:\n    This implementation does not cut the gradients as torch.distributed.all_gather does.\n    \"\"\"\n\n    @staticmethod\n    def forward(ctx, x):\n        output = [torch.zeros_like(x) for _ in range(dist.get_world_size())]\n        dist.all_gather(output, x)\n        return tuple(output)\n\n    @staticmethod\n    def backward(ctx, *grads):\n        all_gradients = torch.stack(grads)\n        dist.all_reduce(all_gradients)\n        return all_gradients[dist.get_rank()]\n\n\ndef all_gather_batch_with_grad(tensors):\n    \"\"\"\n    Performs all_gather operation on the provided tensors.\n    Graph remains connected for backward grad computation.\n    \"\"\"\n    # Queue the gathered tensors\n    world_size = get_world_size()\n    # There is no need for reduction in the single-proc case\n    if world_size == 1:\n        return tensors\n    tensor_list = []\n    output_tensor = []\n\n    for tensor in tensors:\n        tensor_all = GatherLayer.apply(tensor)\n        tensor_list.append(tensor_all)\n\n    for tensor_all in tensor_list:\n        output_tensor.append(torch.cat(tensor_all, dim=0))\n    return output_tensor\n\n\ndef unwrap_ddp_if_wrapped(model):\n    if isinstance(model, torch.nn.parallel.DistributedDataParallel):\n        return model.module\n    return model\n\n\ndef create_new_process_group(group_size):\n    \"\"\"\n    Creates process groups of a gives `group_size` and returns\n    process group that current GPU participates in.\n\n    `group_size` must divide the total number of GPUs (world_size).\n\n    Modified from\n    https://github.com/NVIDIA/apex/blob/4e1ae43f7f7ac69113ef426dd15f37123f0a2ed3/apex/parallel/__init__.py#L60\n\n    Args:\n        group_size (int): number of GPU's to collaborate for sync bn\n    \"\"\"\n\n    assert group_size > 0\n\n    world_size = torch.distributed.get_world_size()\n    if world_size <= 8:\n        if group_size > world_size:\n            logging.warning(\n                f\"Requested group size [{group_size}] > world size [{world_size}]. \"\n                \"Assuming local debug run and capping it to world size.\"\n            )\n            group_size = world_size\n    assert world_size >= group_size\n    assert world_size % group_size == 0\n\n    group = None\n    for group_num in range(world_size // group_size):\n        group_ids = range(group_num * group_size, (group_num + 1) * group_size)\n        cur_group = torch.distributed.new_group(ranks=group_ids)\n        if torch.distributed.get_rank() // group_size == group_num:\n            group = cur_group\n            # can not drop out and return here, every process must go through creation of all subgroups\n\n    assert group is not None\n    return group\n\n\ndef is_dist_avail_and_initialized():\n    if not dist.is_available():\n        return False\n    if not dist.is_initialized():\n        return False\n    return True\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/utils/logger.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n# Code borrowed from TLC - https://www.internalfb.com/code/fbsource/fbcode/pytorch/tlc/torchtlc/loggers/tensorboard.py\nimport atexit\nimport functools\nimport logging\nimport sys\nimport uuid\nfrom typing import Any, Dict, Optional, Union\n\nfrom hydra.utils import instantiate\n\nfrom iopath.common.file_io import g_pathmgr\nfrom numpy import ndarray\nfrom torch import Tensor\nfrom torch.utils.tensorboard import SummaryWriter\n\nfrom training.utils.train_utils import get_machine_local_and_dist_rank, makedir\n\nScalar = Union[Tensor, ndarray, int, float]\n\n\ndef make_tensorboard_logger(log_dir: str, **writer_kwargs: Any):\n    makedir(log_dir)\n    summary_writer_method = SummaryWriter\n    return TensorBoardLogger(\n        path=log_dir, summary_writer_method=summary_writer_method, **writer_kwargs\n    )\n\n\nclass TensorBoardWriterWrapper:\n    \"\"\"\n    A wrapper around a SummaryWriter object.\n    \"\"\"\n\n    def __init__(\n        self,\n        path: str,\n        *args: Any,\n        filename_suffix: str = None,\n        summary_writer_method: Any = SummaryWriter,\n        **kwargs: Any,\n    ) -> None:\n        \"\"\"Create a new TensorBoard logger.\n        On construction, the logger creates a new events file that logs\n        will be written to.  If the environment variable `RANK` is defined,\n        logger will only log if RANK = 0.\n\n        NOTE: If using the logger with distributed training:\n        - This logger can call collective operations\n        - Logs will be written on rank 0 only\n        - Logger must be constructed synchronously *after* initializing distributed process group.\n\n        Args:\n            path (str): path to write logs to\n            *args, **kwargs: Extra arguments to pass to SummaryWriter\n        \"\"\"\n        self._writer: Optional[SummaryWriter] = None\n        _, self._rank = get_machine_local_and_dist_rank()\n        self._path: str = path\n        if self._rank == 0:\n            logging.info(\n                f\"TensorBoard SummaryWriter instantiated. Files will be stored in: {path}\"\n            )\n            self._writer = summary_writer_method(\n                log_dir=path,\n                *args,\n                filename_suffix=filename_suffix or str(uuid.uuid4()),\n                **kwargs,\n            )\n        else:\n            logging.debug(\n                f\"Not logging meters on this host because env RANK: {self._rank} != 0\"\n            )\n        atexit.register(self.close)\n\n    @property\n    def writer(self) -> Optional[SummaryWriter]:\n        return self._writer\n\n    @property\n    def path(self) -> str:\n        return self._path\n\n    def flush(self) -> None:\n        \"\"\"Writes pending logs to disk.\"\"\"\n\n        if not self._writer:\n            return\n\n        self._writer.flush()\n\n    def close(self) -> None:\n        \"\"\"Close writer, flushing pending logs to disk.\n        Logs cannot be written after `close` is called.\n        \"\"\"\n\n        if not self._writer:\n            return\n\n        self._writer.close()\n        self._writer = None\n\n\nclass TensorBoardLogger(TensorBoardWriterWrapper):\n    \"\"\"\n    A simple logger for TensorBoard.\n    \"\"\"\n\n    def log_dict(self, payload: Dict[str, Scalar], step: int) -> None:\n        \"\"\"Add multiple scalar values to TensorBoard.\n\n        Args:\n            payload (dict): dictionary of tag name and scalar value\n            step (int, Optional): step value to record\n        \"\"\"\n        if not self._writer:\n            return\n        for k, v in payload.items():\n            self.log(k, v, step)\n\n    def log(self, name: str, data: Scalar, step: int) -> None:\n        \"\"\"Add scalar data to TensorBoard.\n\n        Args:\n            name (string): tag name used to group scalars\n            data (float/int/Tensor): scalar data to log\n            step (int, optional): step value to record\n        \"\"\"\n        if not self._writer:\n            return\n        self._writer.add_scalar(name, data, global_step=step, new_style=True)\n\n    def log_hparams(\n        self, hparams: Dict[str, Scalar], meters: Dict[str, Scalar]\n    ) -> None:\n        \"\"\"Add hyperparameter data to TensorBoard.\n\n        Args:\n            hparams (dict): dictionary of hyperparameter names and corresponding values\n            meters (dict): dictionary of name of meter and corersponding values\n        \"\"\"\n        if not self._writer:\n            return\n        self._writer.add_hparams(hparams, meters)\n\n\nclass Logger:\n    \"\"\"\n    A logger class that can interface with multiple loggers. It now supports tensorboard only for simplicity, but you can extend it with your own logger.\n    \"\"\"\n\n    def __init__(self, logging_conf):\n        # allow turning off TensorBoard with \"should_log: false\" in config\n        tb_config = logging_conf.tensorboard_writer\n        tb_should_log = tb_config and tb_config.pop(\"should_log\", True)\n        self.tb_logger = instantiate(tb_config) if tb_should_log else None\n\n    def log_dict(self, payload: Dict[str, Scalar], step: int) -> None:\n        if self.tb_logger:\n            self.tb_logger.log_dict(payload, step)\n\n    def log(self, name: str, data: Scalar, step: int) -> None:\n        if self.tb_logger:\n            self.tb_logger.log(name, data, step)\n\n    def log_hparams(\n        self, hparams: Dict[str, Scalar], meters: Dict[str, Scalar]\n    ) -> None:\n        if self.tb_logger:\n            self.tb_logger.log_hparams(hparams, meters)\n\n\n# cache the opened file object, so that different calls to `setup_logger`\n# with the same file name can safely write to the same file.\n@functools.lru_cache(maxsize=None)\ndef _cached_log_stream(filename):\n    # we tune the buffering value so that the logs are updated\n    # frequently.\n    log_buffer_kb = 10 * 1024  # 10KB\n    io = g_pathmgr.open(filename, mode=\"a\", buffering=log_buffer_kb)\n    atexit.register(io.close)\n    return io\n\n\ndef setup_logging(\n    name,\n    output_dir=None,\n    rank=0,\n    log_level_primary=\"INFO\",\n    log_level_secondary=\"ERROR\",\n):\n    \"\"\"\n    Setup various logging streams: stdout and file handlers.\n    For file handlers, we only setup for the master gpu.\n    \"\"\"\n    # get the filename if we want to log to the file as well\n    log_filename = None\n    if output_dir:\n        makedir(output_dir)\n        if rank == 0:\n            log_filename = f\"{output_dir}/log.txt\"\n\n    logger = logging.getLogger(name)\n    logger.setLevel(log_level_primary)\n\n    # create formatter\n    FORMAT = \"%(levelname)s %(asctime)s %(filename)s:%(lineno)4d: %(message)s\"\n    formatter = logging.Formatter(FORMAT)\n\n    # Cleanup any existing handlers\n    for h in logger.handlers:\n        logger.removeHandler(h)\n    logger.root.handlers = []\n\n    # setup the console handler\n    console_handler = logging.StreamHandler(sys.stdout)\n    console_handler.setFormatter(formatter)\n    logger.addHandler(console_handler)\n    if rank == 0:\n        console_handler.setLevel(log_level_primary)\n    else:\n        console_handler.setLevel(log_level_secondary)\n\n    # we log to file as well if user wants\n    if log_filename and rank == 0:\n        file_handler = logging.StreamHandler(_cached_log_stream(log_filename))\n        file_handler.setLevel(log_level_primary)\n        file_handler.setFormatter(formatter)\n        logger.addHandler(file_handler)\n\n    logging.root = logger\n\n\ndef shutdown_logging():\n    \"\"\"\n    After training is done, we ensure to shut down all the logger streams.\n    \"\"\"\n    logging.info(\"Shutting down loggers...\")\n    handlers = logging.root.handlers\n    for handler in handlers:\n        handler.close()\n"
  },
  {
    "path": "auto-seg/submodules/segment-anything-2/training/utils/train_utils.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport logging\nimport math\nimport os\nimport random\nimport re\nfrom datetime import timedelta\nfrom typing import Optional\n\nimport hydra\n\nimport numpy as np\nimport omegaconf\nimport torch\nimport torch.distributed as dist\nfrom iopath.common.file_io import g_pathmgr\nfrom omegaconf import OmegaConf\n\n\ndef multiply_all(*args):\n    return np.prod(np.array(args)).item()\n\n\ndef collect_dict_keys(config):\n    \"\"\"This function recursively iterates through a dataset configuration, and collect all the dict_key that are defined\"\"\"\n    val_keys = []\n    # If the this config points to the collate function, then it has a key\n    if \"_target_\" in config and re.match(r\".*collate_fn.*\", config[\"_target_\"]):\n        val_keys.append(config[\"dict_key\"])\n    else:\n        # Recursively proceed\n        for v in config.values():\n            if isinstance(v, type(config)):\n                val_keys.extend(collect_dict_keys(v))\n            elif isinstance(v, omegaconf.listconfig.ListConfig):\n                for item in v:\n                    if isinstance(item, type(config)):\n                        val_keys.extend(collect_dict_keys(item))\n    return val_keys\n\n\nclass Phase:\n    TRAIN = \"train\"\n    VAL = \"val\"\n\n\ndef register_omegaconf_resolvers():\n    OmegaConf.register_new_resolver(\"get_method\", hydra.utils.get_method)\n    OmegaConf.register_new_resolver(\"get_class\", hydra.utils.get_class)\n    OmegaConf.register_new_resolver(\"add\", lambda x, y: x + y)\n    OmegaConf.register_new_resolver(\"times\", multiply_all)\n    OmegaConf.register_new_resolver(\"divide\", lambda x, y: x / y)\n    OmegaConf.register_new_resolver(\"pow\", lambda x, y: x**y)\n    OmegaConf.register_new_resolver(\"subtract\", lambda x, y: x - y)\n    OmegaConf.register_new_resolver(\"range\", lambda x: list(range(x)))\n    OmegaConf.register_new_resolver(\"int\", lambda x: int(x))\n    OmegaConf.register_new_resolver(\"ceil_int\", lambda x: int(math.ceil(x)))\n    OmegaConf.register_new_resolver(\"merge\", lambda *x: OmegaConf.merge(*x))\n\n\ndef setup_distributed_backend(backend, timeout_mins):\n    \"\"\"\n    Initialize torch.distributed and set the CUDA device.\n    Expects environment variables to be set as per\n    https://pytorch.org/docs/stable/distributed.html#environment-variable-initialization\n    along with the environ variable \"LOCAL_RANK\" which is used to set the CUDA device.\n    \"\"\"\n    # enable TORCH_NCCL_ASYNC_ERROR_HANDLING to ensure dist nccl ops time out after timeout_mins\n    # of waiting\n    os.environ[\"TORCH_NCCL_ASYNC_ERROR_HANDLING\"] = \"1\"\n    logging.info(f\"Setting up torch.distributed with a timeout of {timeout_mins} mins\")\n    dist.init_process_group(backend=backend, timeout=timedelta(minutes=timeout_mins))\n    return dist.get_rank()\n\n\ndef get_machine_local_and_dist_rank():\n    \"\"\"\n    Get the distributed and local rank of the current gpu.\n    \"\"\"\n    local_rank = int(os.environ.get(\"LOCAL_RANK\", None))\n    distributed_rank = int(os.environ.get(\"RANK\", None))\n    assert (\n        local_rank is not None and distributed_rank is not None\n    ), \"Please the set the RANK and LOCAL_RANK environment variables.\"\n    return local_rank, distributed_rank\n\n\ndef print_cfg(cfg):\n    \"\"\"\n    Supports printing both Hydra DictConfig and also the AttrDict config\n    \"\"\"\n    logging.info(\"Training with config:\")\n    logging.info(OmegaConf.to_yaml(cfg))\n\n\ndef set_seeds(seed_value, max_epochs, dist_rank):\n    \"\"\"\n    Set the python random, numpy and torch seed for each gpu. Also set the CUDA\n    seeds if the CUDA is available. This ensures deterministic nature of the training.\n    \"\"\"\n    # Since in the pytorch sampler, we increment the seed by 1 for every epoch.\n    seed_value = (seed_value + dist_rank) * max_epochs\n    logging.info(f\"MACHINE SEED: {seed_value}\")\n    random.seed(seed_value)\n    np.random.seed(seed_value)\n    torch.manual_seed(seed_value)\n    if torch.cuda.is_available():\n        torch.cuda.manual_seed_all(seed_value)\n\n\ndef makedir(dir_path):\n    \"\"\"\n    Create the directory if it does not exist.\n    \"\"\"\n    is_success = False\n    try:\n        if not g_pathmgr.exists(dir_path):\n            g_pathmgr.mkdirs(dir_path)\n        is_success = True\n    except BaseException:\n        logging.info(f\"Error creating directory: {dir_path}\")\n    return is_success\n\n\ndef is_dist_avail_and_initialized():\n    if not dist.is_available():\n        return False\n    if not dist.is_initialized():\n        return False\n    return True\n\n\ndef get_amp_type(amp_type: Optional[str] = None):\n    if amp_type is None:\n        return None\n    assert amp_type in [\"bfloat16\", \"float16\"], \"Invalid Amp type.\"\n    if amp_type == \"bfloat16\":\n        return torch.bfloat16\n    else:\n        return torch.float16\n\n\ndef log_env_variables():\n    env_keys = sorted(list(os.environ.keys()))\n    st = \"\"\n    for k in env_keys:\n        v = os.environ[k]\n        st += f\"{k}={v}\\n\"\n    logging.info(\"Logging ENV_VARIABLES\")\n    logging.info(st)\n\n\nclass AverageMeter:\n    \"\"\"Computes and stores the average and current value\"\"\"\n\n    def __init__(self, name, device, fmt=\":f\"):\n        self.name = name\n        self.fmt = fmt\n        self.device = device\n        self.reset()\n\n    def reset(self):\n        self.val = 0\n        self.avg = 0\n        self.sum = 0\n        self.count = 0\n        self._allow_updates = True\n\n    def update(self, val, n=1):\n        self.val = val\n        self.sum += val * n\n        self.count += n\n        self.avg = self.sum / self.count\n\n    def __str__(self):\n        fmtstr = \"{name}: {val\" + self.fmt + \"} ({avg\" + self.fmt + \"})\"\n        return fmtstr.format(**self.__dict__)\n\n\nclass MemMeter:\n    \"\"\"Computes and stores the current, avg, and max of peak Mem usage per iteration\"\"\"\n\n    def __init__(self, name, device, fmt=\":f\"):\n        self.name = name\n        self.fmt = fmt\n        self.device = device\n        self.reset()\n\n    def reset(self):\n        self.val = 0  # Per iteration max usage\n        self.avg = 0  # Avg per iteration max usage\n        self.peak = 0  # Peak usage for lifetime of program\n        self.sum = 0\n        self.count = 0\n        self._allow_updates = True\n\n    def update(self, n=1, reset_peak_usage=True):\n        self.val = torch.cuda.max_memory_allocated() // 1e9\n        self.sum += self.val * n\n        self.count += n\n        self.avg = self.sum / self.count\n        self.peak = max(self.peak, self.val)\n        if reset_peak_usage:\n            torch.cuda.reset_peak_memory_stats()\n\n    def __str__(self):\n        fmtstr = (\n            \"{name}: {val\"\n            + self.fmt\n            + \"} ({avg\"\n            + self.fmt\n            + \"}/{peak\"\n            + self.fmt\n            + \"})\"\n        )\n        return fmtstr.format(**self.__dict__)\n\n\ndef human_readable_time(time_seconds):\n    time = int(time_seconds)\n    minutes, seconds = divmod(time, 60)\n    hours, minutes = divmod(minutes, 60)\n    days, hours = divmod(hours, 24)\n    return f\"{days:02}d {hours:02}h {minutes:02}m\"\n\n\nclass DurationMeter:\n    def __init__(self, name, device, fmt=\":f\"):\n        self.name = name\n        self.device = device\n        self.fmt = fmt\n        self.val = 0\n\n    def reset(self):\n        self.val = 0\n\n    def update(self, val):\n        self.val = val\n\n    def add(self, val):\n        self.val += val\n\n    def __str__(self):\n        return f\"{self.name}: {human_readable_time(self.val)}\"\n\n\nclass ProgressMeter:\n    def __init__(self, num_batches, meters, real_meters, prefix=\"\"):\n        self.batch_fmtstr = self._get_batch_fmtstr(num_batches)\n        self.meters = meters\n        self.real_meters = real_meters\n        self.prefix = prefix\n\n    def display(self, batch, enable_print=False):\n        entries = [self.prefix + self.batch_fmtstr.format(batch)]\n        entries += [str(meter) for meter in self.meters]\n        entries += [\n            \" | \".join(\n                [\n                    f\"{os.path.join(name, subname)}: {val:.4f}\"\n                    for subname, val in meter.compute().items()\n                ]\n            )\n            for name, meter in self.real_meters.items()\n        ]\n        logging.info(\" | \".join(entries))\n        if enable_print:\n            print(\" | \".join(entries))\n\n    def _get_batch_fmtstr(self, num_batches):\n        num_digits = len(str(num_batches // 1))\n        fmt = \"{:\" + str(num_digits) + \"d}\"\n        return \"[\" + fmt + \"/\" + fmt.format(num_batches) + \"]\"\n\n\ndef get_resume_checkpoint(checkpoint_save_dir):\n    if not g_pathmgr.isdir(checkpoint_save_dir):\n        return None\n    ckpt_file = os.path.join(checkpoint_save_dir, \"checkpoint.pt\")\n    if not g_pathmgr.isfile(ckpt_file):\n        return None\n\n    return ckpt_file\n"
  },
  {
    "path": "cogvideox_interpolation/datasets.py",
    "content": "import json \nimport torch \nimport cv2\nfrom typing import Any, Dict, List, Optional, Tuple\nfrom torch.utils.data import DataLoader, Dataset \nimport torchvision.transforms as TT  \nfrom torchvision import transforms\nfrom torchvision.transforms.functional import center_crop, resize \nfrom torchvision.transforms import InterpolationMode \nimport numpy as np\nimport random, os \ntry:\n    import decord\nexcept ImportError:\n    raise ImportError(\n        \"The `decord` package is required for loading the video dataset. Install with `pip install decord`\"\n    )\n\ndecord.bridge.set_bridge(\"torch\")\n\nclass ImageVideoDataset(Dataset): \n    def __init__(\n        self,\n        root_path,\n        annotation_json,\n        tokenizer,\n        max_sequence_length: int = 226,\n        height: int = 480,\n        width: int = 640,\n        video_reshape_mode: str = \"center\",\n        fps: int = 8,\n        stripe: int = 2,\n        max_num_frames: int = 49,\n        skip_frames_start: int = 0,\n        skip_frames_end: int = 0,\n        random_flip: Optional[float] = None,\n    ) -> None:\n        super().__init__() \n\n        self.root_path = root_path\n        with open(annotation_json, 'r') as f: \n            self.data_list = json.load(f)\n        \n        self.tokenizer = tokenizer \n        self.max_sequence_length = max_sequence_length \n        self.height = height\n        self.width = width\n        self.video_reshape_mode = video_reshape_mode\n        self.fps = fps\n        self.max_num_frames = max_num_frames\n        self.skip_frames_start = skip_frames_start\n        self.skip_frames_end = skip_frames_end \n        self.stripe = stripe \n        self.video_transforms = transforms.Compose(\n            [\n                transforms.RandomHorizontalFlip(random_flip) if random_flip else transforms.Lambda(lambda x: x),\n                transforms.Lambda(lambda x: x / 255.0),\n                transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5], inplace=True),\n            ]\n        )\n\n    \n    def __len__(self):\n        return len(self.data_list) \n    \n    def _resize_for_rectangle_crop(self, arr):\n        image_size = self.height, self.width\n        reshape_mode = self.video_reshape_mode\n        if arr.shape[3] / arr.shape[2] > image_size[1] / image_size[0]:\n            arr = resize(\n                arr,\n                size=[image_size[0], int(arr.shape[3] * image_size[0] / arr.shape[2])],\n                interpolation=InterpolationMode.BICUBIC,\n            )\n        else:\n            arr = resize(\n                arr,\n                size=[int(arr.shape[2] * image_size[1] / arr.shape[3]), image_size[1]],\n                interpolation=InterpolationMode.BICUBIC,\n            )\n\n        h, w = arr.shape[2], arr.shape[3]\n        arr = arr.squeeze(0)\n\n        delta_h = h - image_size[0]\n        delta_w = w - image_size[1]\n\n        if reshape_mode == \"random\" or reshape_mode == \"none\":\n            top = np.random.randint(0, delta_h + 1)\n            left = np.random.randint(0, delta_w + 1)\n        elif reshape_mode == \"center\":\n            top, left = delta_h // 2, delta_w // 2\n        else:\n            raise NotImplementedError\n        arr = TT.functional.crop(arr, top=top, left=left, height=image_size[0], width=image_size[1])\n        return arr\n    \n    def __getitem__(self, index): \n        while True: \n            try:\n                video_path = os.path.join(self.root_path, self.data_list[index]['clip_path'])\n                video_reader = decord.VideoReader(video_path, width=self.width, height=self.height)\n                video_num_frames = len(video_reader) \n                # print(video_num_frames, video_reader.get_avg_fps()) \n                if self.stripe * self.max_num_frames > video_num_frames: \n                    stripe = 1\n                else:\n                    stripe = self.stripe \n\n                random_range = video_num_frames - stripe * self.max_num_frames - 1\n                random_range = max(1, random_range)\n                start_frame = random.randint(1, random_range) if random_range > 0 else 1\n                \n                indices = list(range(start_frame, start_frame + stripe * self.max_num_frames, stripe)) # (end_frame - start_frame) // self.max_num_frames))\n                frames = video_reader.get_batch(indices)\n\n                # Ensure that we don't go over the limit\n                frames = frames[: self.max_num_frames]\n                selected_num_frames = frames.shape[0]\n\n                # Choose first (4k + 1) frames as this is how many is required by the VAE\n                remainder = (3 + (selected_num_frames % 4)) % 4\n                if remainder != 0:\n                    frames = frames[:-remainder]\n                selected_num_frames = frames.shape[0]\n\n                assert (selected_num_frames - 1) % 4 == 0 \n                if selected_num_frames == self.max_num_frames: \n                    break \n                else:\n                    index = (index + 1) % len(self.data_list) \n                    continue \n            \n            except Exception as e:\n                index = (index + 1) % len(self.data_list) \n                print(video_num_frames, start_frame, indices)\n                print(\n                    \"Error encounter during audio feature extraction: \", e, \n                )\n                continue\n\n        # Training transforms\n        # frames = (frames - 127.5) / 127.5\n        frames = frames.permute(0, 3, 1, 2).contiguous()  # [F, C, H, W]\n        frames = self._resize_for_rectangle_crop(frames) \n        frames = torch.stack([self.video_transforms(frame) for frame in frames], dim=0) \n\n        text_inputs = self.tokenizer(\n            [self.data_list[index]['caption']],\n            padding=\"max_length\",\n            max_length=self.max_sequence_length,\n            truncation=True,\n            add_special_tokens=True,\n            return_tensors=\"pt\",\n        )\n        text_input_ids = text_inputs.input_ids[0]\n\n        return frames.contiguous(), text_input_ids\n\n\nclass AutoEncoderDataset(ImageVideoDataset):\n    def __init__(self, *args, **kwargs):\n        super().__init__(*args, **kwargs)\n    def __getitem__(self, index): \n        while True: \n            try:\n                video_path = os.path.join(self.root_path, self.data_list[index]['clip_path'])\n                video_reader = decord.VideoReader(video_path, width=self.width, height=self.height)\n                video_num_frames = len(video_reader) \n                # print(video_num_frames, video_reader.get_avg_fps()) \n                if self.stripe * self.max_num_frames > video_num_frames: \n                    stripe = 1\n                else:\n                    stripe = self.stripe \n                \n                random_indice = [random.randint(1, video_num_frames - 1)] # random selects a frame from the video\n                frames = video_reader.get_batch(random_indice)\n                break \n            \n            except Exception as e:\n                print(\"[WARN] Get problem when loading video: \", self.data_list[index]['clip_path'])\n                print(\n                    \"Error encounter during audio feature extraction: \", e, \n                )\n                index = random.randint(0, len(self.data_list) - 1)\n                continue\n        return frames\n\n\nclass LvisDataset(Dataset): \n    def __init__(\n        self,\n        root_path,\n        annotation_json,\n        height: int = 480,\n        width: int = 640,\n        random_flip: Optional[float] = None,\n    ) -> None:\n        super().__init__() \n\n        self.root_path = root_path\n        with open(annotation_json, 'r') as f: \n            self.data_list = json.load(f)['images']\n        \n        self.height = height\n        self.width = width\n        self.width = width\n        self.video_transforms = transforms.Compose(\n            [\n                transforms.Lambda(lambda x: x / 255.0),\n                transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5], inplace=True),\n            ]\n        )\n\n\n    def __len__(self):\n        return len(self.data_list) \n    \n    def __getitem__(self, index): \n\n        image_path = os.path.join(self.root_path, \"unlabeled2017\", self.data_list[index]['file_name'])\n        image = cv2.imread(image_path)\n        image = cv2.resize(image, (self.width, self.height))\n        image = self.video_transforms(torch.from_numpy(image).permute(2, 0, 1))\n\n        return image.contiguous()\n"
  },
  {
    "path": "cogvideox_interpolation/losses.py",
    "content": "import torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom einops import rearrange, repeat\n\nfrom .lpips import LPIPS\n\ndef l2_loss(network_output, gt):\n    return ((network_output - gt) ** 2).mean()\n\ndef cos_loss(network_output, gt):\n    return 1 - F.cosine_similarity(network_output, gt, dim=1).mean()\n\ndef hinge_d_loss(logits_real, logits_fake):\n    loss_real = torch.mean(F.relu(1.0 - logits_real))\n    loss_fake = torch.mean(F.relu(1.0 + logits_fake))\n    d_loss = 0.5 * (loss_real + loss_fake)\n    return d_loss\n\n\ndef vanilla_d_loss(logits_real, logits_fake):\n    d_loss = 0.5 * (\n        torch.mean(torch.nn.functional.softplus(-logits_real)) + torch.mean(torch.nn.functional.softplus(logits_fake))\n    )\n    return d_loss\n\n\n# from MAGVIT, used in place hof hinge_d_loss\ndef sigmoid_cross_entropy_with_logits(labels, logits):\n    # The final formulation is: max(x, 0) - x * z + log(1 + exp(-abs(x)))\n    zeros = torch.zeros_like(logits, dtype=logits.dtype)\n    condition = logits >= zeros\n    relu_logits = torch.where(condition, logits, zeros)\n    neg_abs_logits = torch.where(condition, -logits, logits)\n    return relu_logits - logits * labels + torch.log1p(torch.exp(neg_abs_logits))\n\n\ndef lecam_reg(real_pred, fake_pred, ema_real_pred, ema_fake_pred):\n    assert real_pred.ndim == 0 and ema_fake_pred.ndim == 0\n    lecam_loss = torch.mean(torch.pow(nn.ReLU()(real_pred - ema_fake_pred), 2))\n    lecam_loss += torch.mean(torch.pow(nn.ReLU()(ema_real_pred - fake_pred), 2))\n    return lecam_loss\n\n\ndef gradient_penalty_fn(images, output):\n    gradients = torch.autograd.grad(\n        outputs=output,\n        inputs=images,\n        grad_outputs=torch.ones(output.size(), device=images.device),\n        create_graph=True,\n        retain_graph=True,\n        only_inputs=True,\n    )[0]\n\n    gradients = rearrange(gradients, \"b ... -> b (...)\")\n    return ((gradients.norm(2, dim=1) - 1) ** 2).mean()\n\n\nclass VAELoss(nn.Module):\n    def __init__(\n        self,\n        logvar_init=0.0,\n        perceptual_loss_weight=0.1,\n        kl_loss_weight=0.000001,\n        device=\"cpu\",\n        dtype=\"bf16\",\n    ):\n        super().__init__()\n\n        if type(dtype) == str:\n            if dtype == \"bf16\":\n                dtype = torch.bfloat16\n            elif dtype == \"fp16\":\n                dtype = torch.float16\n            else:\n                raise NotImplementedError(f\"dtype: {dtype}\")\n\n        # KL Loss\n        self.kl_loss_weight = kl_loss_weight\n        # Perceptual Loss\n        self.perceptual_loss_fn = LPIPS().eval().to(device, dtype)\n        self.perceptual_loss_weight = perceptual_loss_weight\n        self.logvar = nn.Parameter(torch.ones(size=()) * logvar_init)\n\n    def forward(\n        self,\n        video,\n        recon_video,\n        posterior,\n        nll_weights=None,\n        no_perceptual=False,\n    ):\n        video = rearrange(video, \"b c t h w -> (b t) c h w\").contiguous()\n        recon_video = rearrange(recon_video, \"b c t h w -> (b t) c h w\").contiguous()\n\n        # reconstruction loss\n        recon_loss = torch.abs(video - recon_video)\n\n        # perceptual loss\n        if self.perceptual_loss_weight is not None and self.perceptual_loss_weight > 0.0 and not no_perceptual:\n            # handle channels\n            channels = video.shape[1]\n            assert channels in {1, 3}\n            if channels == 1:\n                input_vgg_input = repeat(video, \"b 1 h w -> b c h w\", c=3)\n                recon_vgg_input = repeat(recon_video, \"b 1 h w -> b c h w\", c=3)\n            else:\n                input_vgg_input = video\n                recon_vgg_input = recon_video\n\n            perceptual_loss = self.perceptual_loss_fn(input_vgg_input, recon_vgg_input)\n            recon_loss = recon_loss + self.perceptual_loss_weight * perceptual_loss\n\n        nll_loss = recon_loss / torch.exp(self.logvar) + self.logvar\n\n        weighted_nll_loss = nll_loss\n        if nll_weights is not None:\n            weighted_nll_loss = nll_weights * nll_loss\n        weighted_nll_loss = torch.sum(weighted_nll_loss) / weighted_nll_loss.shape[0]\n        nll_loss = torch.sum(nll_loss) / nll_loss.shape[0]\n\n        # KL Loss\n        weighted_kl_loss = 0\n        if self.kl_loss_weight is not None and self.kl_loss_weight > 0.0:\n            kl_loss = posterior.kl()\n            kl_loss = torch.sum(kl_loss) / kl_loss.shape[0]\n            weighted_kl_loss = kl_loss * self.kl_loss_weight\n\n        return nll_loss, weighted_nll_loss, weighted_kl_loss\n\n\ndef adopt_weight(weight, global_step, threshold=0, value=0.0):\n    if global_step < threshold:\n        weight = value\n    return weight\n\n\nclass AdversarialLoss(nn.Module):\n    def __init__(\n        self,\n        discriminator_factor=1.0,\n        discriminator_start=50001,\n        generator_factor=0.5,\n        generator_loss_type=\"non-saturating\",\n    ):\n        super().__init__()\n        self.discriminator_factor = discriminator_factor\n        self.discriminator_start = discriminator_start\n        self.generator_factor = generator_factor\n        self.generator_loss_type = generator_loss_type\n\n    def calculate_adaptive_weight(self, nll_loss, g_loss, last_layer):\n        nll_grads = torch.autograd.grad(nll_loss, last_layer, retain_graph=True)[0]\n        g_grads = torch.autograd.grad(g_loss, last_layer, retain_graph=True)[0]\n        d_weight = torch.norm(nll_grads) / (torch.norm(g_grads) + 1e-4)\n        d_weight = torch.clamp(d_weight, 0.0, 1e4).detach()\n        d_weight = d_weight * self.generator_factor\n        return d_weight\n\n    def forward(\n        self,\n        fake_logits,\n        nll_loss,\n        last_layer,\n        global_step,\n        is_training=True,\n    ):\n        # NOTE: following MAGVIT to allow non_saturating\n        assert self.generator_loss_type in [\"hinge\", \"vanilla\", \"non-saturating\"]\n\n        if self.generator_loss_type == \"hinge\":\n            gen_loss = -torch.mean(fake_logits)\n        elif self.generator_loss_type == \"non-saturating\":\n            gen_loss = torch.mean(\n                sigmoid_cross_entropy_with_logits(labels=torch.ones_like(fake_logits), logits=fake_logits)\n            )\n        else:\n            raise ValueError(\"Generator loss {} not supported\".format(self.generator_loss_type))\n\n        if self.discriminator_factor is not None and self.discriminator_factor > 0.0:\n            try:\n                d_weight = self.calculate_adaptive_weight(nll_loss, gen_loss, last_layer)\n            except RuntimeError:\n                assert not is_training\n                d_weight = torch.tensor(0.0)\n        else:\n            d_weight = torch.tensor(0.0)\n\n        disc_factor = adopt_weight(self.discriminator_factor, global_step, threshold=self.discriminator_start)\n        weighted_gen_loss = d_weight * disc_factor * gen_loss\n\n        return weighted_gen_loss\n\n\nclass LeCamEMA:\n    def __init__(self, ema_real=0.0, ema_fake=0.0, decay=0.999, dtype=torch.bfloat16, device=\"cpu\"):\n        self.decay = decay\n        self.ema_real = torch.tensor(ema_real).to(device, dtype)\n        self.ema_fake = torch.tensor(ema_fake).to(device, dtype)\n\n    def update(self, ema_real, ema_fake):\n        self.ema_real = self.ema_real * self.decay + ema_real * (1 - self.decay)\n        self.ema_fake = self.ema_fake * self.decay + ema_fake * (1 - self.decay)\n\n    def get(self):\n        return self.ema_real, self.ema_fake\n\n\nclass DiscriminatorLoss(nn.Module):\n    def __init__(\n        self,\n        discriminator_factor=1.0,\n        discriminator_start=50001,\n        discriminator_loss_type=\"non-saturating\",\n        lecam_loss_weight=None,\n        gradient_penalty_loss_weight=None,  # SCH: following MAGVIT config.vqgan.grad_penalty_cost\n    ):\n        super().__init__()\n\n        assert discriminator_loss_type in [\"hinge\", \"vanilla\", \"non-saturating\"]\n        self.discriminator_factor = discriminator_factor\n        self.discriminator_start = discriminator_start\n        self.lecam_loss_weight = lecam_loss_weight\n        self.gradient_penalty_loss_weight = gradient_penalty_loss_weight\n        self.discriminator_loss_type = discriminator_loss_type\n\n    def forward(\n        self,\n        real_logits,\n        fake_logits,\n        global_step,\n        lecam_ema_real=None,\n        lecam_ema_fake=None,\n        real_video=None,\n        split=\"train\",\n    ):\n        if self.discriminator_factor is not None and self.discriminator_factor > 0.0:\n            disc_factor = adopt_weight(self.discriminator_factor, global_step, threshold=self.discriminator_start)\n\n            if self.discriminator_loss_type == \"hinge\":\n                disc_loss = hinge_d_loss(real_logits, fake_logits)\n            elif self.discriminator_loss_type == \"non-saturating\":\n                if real_logits is not None:\n                    real_loss = sigmoid_cross_entropy_with_logits(\n                        labels=torch.ones_like(real_logits), logits=real_logits\n                    )\n                else:\n                    real_loss = 0.0\n                if fake_logits is not None:\n                    fake_loss = sigmoid_cross_entropy_with_logits(\n                        labels=torch.zeros_like(fake_logits), logits=fake_logits\n                    )\n                else:\n                    fake_loss = 0.0\n                disc_loss = 0.5 * (torch.mean(real_loss) + torch.mean(fake_loss))\n            elif self.discriminator_loss_type == \"vanilla\":\n                disc_loss = vanilla_d_loss(real_logits, fake_logits)\n            else:\n                raise ValueError(f\"Unknown GAN loss '{self.discriminator_loss_type}'.\")\n\n            weighted_d_adversarial_loss = disc_factor * disc_loss\n\n        else:\n            weighted_d_adversarial_loss = 0\n\n        lecam_loss = torch.tensor(0.0)\n        if self.lecam_loss_weight is not None and self.lecam_loss_weight > 0.0:\n            real_pred = torch.mean(real_logits)\n            fake_pred = torch.mean(fake_logits)\n            lecam_loss = lecam_reg(real_pred, fake_pred, lecam_ema_real, lecam_ema_fake)\n            lecam_loss = lecam_loss * self.lecam_loss_weight\n\n        gradient_penalty = torch.tensor(0.0)\n        if self.gradient_penalty_loss_weight is not None and self.gradient_penalty_loss_weight > 0.0:\n            assert real_video is not None\n            gradient_penalty = gradient_penalty_fn(real_video, real_logits)\n            gradient_penalty *= self.gradient_penalty_loss_weight\n\n        return (weighted_d_adversarial_loss, lecam_loss, gradient_penalty)\n"
  },
  {
    "path": "cogvideox_interpolation/lpips.py",
    "content": "import hashlib\nimport os\nfrom collections import namedtuple\n\nimport requests\nimport torch\nimport torch.nn as nn\nfrom torchvision import models\nfrom tqdm import tqdm\n\nURL_MAP = {\"vgg_lpips\": \"https://heibox.uni-heidelberg.de/f/607503859c864bc1b30b/?dl=1\"}\n\nCKPT_MAP = {\"vgg_lpips\": \"vgg.pth\"}\n\nMD5_MAP = {\"vgg_lpips\": \"d507d7349b931f0638a25a48a722f98a\"}\n\n\ndef md5_hash(path):\n    with open(path, \"rb\") as f:\n        content = f.read()\n    return hashlib.md5(content).hexdigest()\n\n\ndef download(url, local_path, chunk_size=1024):\n    os.makedirs(os.path.split(local_path)[0], exist_ok=True)\n    with requests.get(url, stream=True) as r:\n        total_size = int(r.headers.get(\"content-length\", 0))\n        with tqdm(total=total_size, unit=\"B\", unit_scale=True) as pbar:\n            with open(local_path, \"wb\") as f:\n                for data in r.iter_content(chunk_size=chunk_size):\n                    if data:\n                        f.write(data)\n                        pbar.update(chunk_size)\n\n\ndef get_ckpt_path(name, root, check=False):\n    assert name in URL_MAP\n    path = os.path.join(root, CKPT_MAP[name])\n    if not os.path.exists(path) or (check and not md5_hash(path) == MD5_MAP[name]):\n        print(\"Downloading {} model from {} to {}\".format(name, URL_MAP[name], path))\n        download(URL_MAP[name], path)\n        md5 = md5_hash(path)\n        assert md5 == MD5_MAP[name], md5\n    return path\n\n\nclass LPIPS(nn.Module):\n    # Learned perceptual metric\n    def __init__(self, use_dropout=True):\n        super().__init__()\n        self.scaling_layer = ScalingLayer()\n        self.chns = [64, 128, 256, 512, 512]  # vg16 features\n        self.net = vgg16(pretrained=True, requires_grad=False)\n        self.lin0 = NetLinLayer(self.chns[0], use_dropout=use_dropout)\n        self.lin1 = NetLinLayer(self.chns[1], use_dropout=use_dropout)\n        self.lin2 = NetLinLayer(self.chns[2], use_dropout=use_dropout)\n        self.lin3 = NetLinLayer(self.chns[3], use_dropout=use_dropout)\n        self.lin4 = NetLinLayer(self.chns[4], use_dropout=use_dropout)\n        self.load_from_pretrained()\n        for param in self.parameters():\n            param.requires_grad = False\n\n    def load_from_pretrained(self, name=\"vgg_lpips\"):\n        ckpt = get_ckpt_path(name, \"model_zoo/taming/modules/autoencoder/lpips\")\n        self.load_state_dict(torch.load(ckpt, map_location=torch.device(\"cpu\")), strict=False)\n        # print(\"loaded pretrained LPIPS loss from {}\".format(ckpt))\n\n    @classmethod\n    def from_pretrained(cls, name=\"vgg_lpips\"):\n        if name != \"vgg_lpips\":\n            raise NotImplementedError\n        model = cls()\n        ckpt = get_ckpt_path(name)\n        model.load_state_dict(torch.load(ckpt, map_location=torch.device(\"cpu\")), strict=False)\n        return model\n\n    def forward(self, input, target):\n        in0_input, in1_input = (self.scaling_layer(input), self.scaling_layer(target))\n        outs0, outs1 = self.net(in0_input), self.net(in1_input)\n        feats0, feats1, diffs = {}, {}, {}\n        lins = [self.lin0, self.lin1, self.lin2, self.lin3, self.lin4]\n        for kk in range(len(self.chns)):\n            feats0[kk], feats1[kk] = normalize_tensor(outs0[kk]), normalize_tensor(outs1[kk])\n            diffs[kk] = (feats0[kk] - feats1[kk]) ** 2\n\n        res = [spatial_average(lins[kk].model(diffs[kk]), keepdim=True) for kk in range(len(self.chns))]\n        val = res[0]\n        for l in range(1, len(self.chns)):\n            val += res[l]\n        return val\n\n\nclass ScalingLayer(nn.Module):\n    def __init__(self):\n        super(ScalingLayer, self).__init__()\n        self.register_buffer(\"shift\", torch.Tensor([-0.030, -0.088, -0.188])[None, :, None, None])\n        self.register_buffer(\"scale\", torch.Tensor([0.458, 0.448, 0.450])[None, :, None, None])\n\n    def forward(self, inp):\n        return (inp - self.shift) / self.scale\n\n\nclass NetLinLayer(nn.Module):\n    \"\"\"A single linear layer which does a 1x1 conv\"\"\"\n\n    def __init__(self, chn_in, chn_out=1, use_dropout=False):\n        super(NetLinLayer, self).__init__()\n        layers = (\n            [\n                nn.Dropout(),\n            ]\n            if (use_dropout)\n            else []\n        )\n        layers += [\n            nn.Conv2d(chn_in, chn_out, 1, stride=1, padding=0, bias=False),\n        ]\n        self.model = nn.Sequential(*layers)\n\n\nclass vgg16(torch.nn.Module):\n    def __init__(self, requires_grad=False, pretrained=True):\n        super(vgg16, self).__init__()\n        vgg_pretrained_features = models.vgg16(pretrained=pretrained).features\n        self.slice1 = torch.nn.Sequential()\n        self.slice2 = torch.nn.Sequential()\n        self.slice3 = torch.nn.Sequential()\n        self.slice4 = torch.nn.Sequential()\n        self.slice5 = torch.nn.Sequential()\n        self.N_slices = 5\n        for x in range(4):\n            self.slice1.add_module(str(x), vgg_pretrained_features[x])\n        for x in range(4, 9):\n            self.slice2.add_module(str(x), vgg_pretrained_features[x])\n        for x in range(9, 16):\n            self.slice3.add_module(str(x), vgg_pretrained_features[x])\n        for x in range(16, 23):\n            self.slice4.add_module(str(x), vgg_pretrained_features[x])\n        for x in range(23, 30):\n            self.slice5.add_module(str(x), vgg_pretrained_features[x])\n        if not requires_grad:\n            for param in self.parameters():\n                param.requires_grad = False\n\n    def forward(self, X):\n        h = self.slice1(X)\n        h_relu1_2 = h\n        h = self.slice2(h)\n        h_relu2_2 = h\n        h = self.slice3(h)\n        h_relu3_3 = h\n        h = self.slice4(h)\n        h_relu4_3 = h\n        h = self.slice5(h)\n        h_relu5_3 = h\n        vgg_outputs = namedtuple(\"VggOutputs\", [\"relu1_2\", \"relu2_2\", \"relu3_3\", \"relu4_3\", \"relu5_3\"])\n        out = vgg_outputs(h_relu1_2, h_relu2_2, h_relu3_3, h_relu4_3, h_relu5_3)\n        return out\n\n\ndef normalize_tensor(x, eps=1e-10):\n    norm_factor = torch.sqrt(torch.sum(x**2, dim=1, keepdim=True))\n    return x / (norm_factor + eps)\n\n\ndef spatial_average(x, keepdim=True):\n    return x.mean([2, 3], keepdim=keepdim)\n"
  },
  {
    "path": "cogvideox_interpolation/pipeline.py",
    "content": "import inspect\nimport math\nfrom typing import Callable, Dict, List, Optional, Tuple, Union\n\nimport PIL\nimport torch\nfrom diffusers.callbacks import MultiPipelineCallbacks, PipelineCallback\nfrom diffusers.image_processor import PipelineImageInput\nfrom diffusers.models import (AutoencoderKLCogVideoX,\n                              CogVideoXTransformer3DModel)\nfrom diffusers.models.embeddings import get_3d_rotary_pos_embed\nfrom diffusers.pipelines.pipeline_utils import DiffusionPipeline\nfrom diffusers.schedulers import CogVideoXDDIMScheduler, CogVideoXDPMScheduler\nfrom diffusers.utils import logging, replace_example_docstring\nfrom diffusers.utils.torch_utils import randn_tensor\nfrom diffusers.video_processor import VideoProcessor\nfrom transformers import T5EncoderModel, T5Tokenizer\n\n\ndef get_resize_crop_region_for_grid(src, tgt_width, tgt_height):\n    tw = tgt_width\n    th = tgt_height\n    h, w = src\n    r = h / w\n    if r > (th / tw):\n        resize_height = th\n        resize_width = int(round(th / h * w))\n    else:\n        resize_width = tw\n        resize_height = int(round(tw / w * h))\n\n    crop_top = int(round((th - resize_height) / 2.0))\n    crop_left = int(round((tw - resize_width) / 2.0))\n\n    return (crop_top, crop_left), (crop_top + resize_height, crop_left + resize_width)\n\n\ndef retrieve_timesteps(\n    scheduler,\n    num_inference_steps: Optional[int] = None,\n    device: Optional[Union[str, torch.device]] = None,\n    timesteps: Optional[List[int]] = None,\n    sigmas: Optional[List[float]] = None,\n    **kwargs,\n):\n    \"\"\"\n    Calls the scheduler's `set_timesteps` method and retrieves timesteps from the scheduler after the call. Handles\n    custom timesteps. Any kwargs will be supplied to `scheduler.set_timesteps`.\n\n    Args:\n        scheduler (`SchedulerMixin`):\n            The scheduler to get timesteps from.\n        num_inference_steps (`int`):\n            The number of diffusion steps used when generating samples with a pre-trained model. If used, `timesteps`\n            must be `None`.\n        device (`str` or `torch.device`, *optional*):\n            The device to which the timesteps should be moved to. If `None`, the timesteps are not moved.\n        timesteps (`List[int]`, *optional*):\n            Custom timesteps used to override the timestep spacing strategy of the scheduler. If `timesteps` is passed,\n            `num_inference_steps` and `sigmas` must be `None`.\n        sigmas (`List[float]`, *optional*):\n            Custom sigmas used to override the timestep spacing strategy of the scheduler. If `sigmas` is passed,\n            `num_inference_steps` and `timesteps` must be `None`.\n\n    Returns:\n        `Tuple[torch.Tensor, int]`: A tuple where the first element is the timestep schedule from the scheduler and the\n        second element is the number of inference steps.\n    \"\"\"\n    if timesteps is not None and sigmas is not None:\n        raise ValueError(\"Only one of `timesteps` or `sigmas` can be passed. Please choose one to set custom values\")\n    if timesteps is not None:\n        accepts_timesteps = \"timesteps\" in set(inspect.signature(scheduler.set_timesteps).parameters.keys())\n        if not accepts_timesteps:\n            raise ValueError(\n                f\"The current scheduler class {scheduler.__class__}'s `set_timesteps` does not support custom\"\n                f\" timestep schedules. Please check whether you are using the correct scheduler.\"\n            )\n        scheduler.set_timesteps(timesteps=timesteps, device=device, **kwargs)\n        timesteps = scheduler.timesteps\n        num_inference_steps = len(timesteps)\n    elif sigmas is not None:\n        accept_sigmas = \"sigmas\" in set(inspect.signature(scheduler.set_timesteps).parameters.keys())\n        if not accept_sigmas:\n            raise ValueError(\n                f\"The current scheduler class {scheduler.__class__}'s `set_timesteps` does not support custom\"\n                f\" sigmas schedules. Please check whether you are using the correct scheduler.\"\n            )\n        scheduler.set_timesteps(sigmas=sigmas, device=device, **kwargs)\n        timesteps = scheduler.timesteps\n        num_inference_steps = len(timesteps)\n    else:\n        scheduler.set_timesteps(num_inference_steps, device=device, **kwargs)\n        timesteps = scheduler.timesteps\n    return timesteps, num_inference_steps\n\n# Copied from diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion_img2img.retrieve_latents\ndef retrieve_latents(\n    encoder_output: torch.Tensor, generator: Optional[torch.Generator] = None, sample_mode: str = \"sample\"\n):\n    if hasattr(encoder_output, \"latent_dist\") and sample_mode == \"sample\":\n        return encoder_output.latent_dist.sample(generator)\n    elif hasattr(encoder_output, \"latent_dist\") and sample_mode == \"argmax\":\n        return encoder_output.latent_dist.mode()\n    elif hasattr(encoder_output, \"latents\"):\n        return encoder_output.latents\n    else:\n        raise AttributeError(\"Could not access latents of provided encoder_output\")\n\nclass CogVideoXInterpolationPipeline(DiffusionPipeline): \n    _optional_components = []\n    model_cpu_offload_seq = \"text_encoder->transformer->vae\"\n\n    _callback_tensor_inputs = [\n        \"latents\",\n        \"prompt_embeds\",\n        \"negative_prompt_embeds\",\n    ]\n    def __init__(\n        self,\n        tokenizer: T5Tokenizer,\n        text_encoder: T5EncoderModel,\n        vae: AutoencoderKLCogVideoX,\n        transformer: CogVideoXTransformer3DModel,\n        scheduler: Union[CogVideoXDDIMScheduler, CogVideoXDPMScheduler],\n    ):\n        super().__init__()\n\n        self.register_modules(\n            tokenizer=tokenizer,\n            text_encoder=text_encoder,\n            vae=vae,\n            transformer=transformer,\n            scheduler=scheduler,\n        )\n        self.vae_scale_factor_spatial = (\n            2 ** (len(self.vae.config.block_out_channels) - 1) if hasattr(self, \"vae\") and self.vae is not None else 8\n        )\n        self.vae_scale_factor_temporal = (\n            self.vae.config.temporal_compression_ratio if hasattr(self, \"vae\") and self.vae is not None else 4\n        )\n\n        self.video_processor = VideoProcessor(vae_scale_factor=self.vae_scale_factor_spatial)\n\n\n    # Copied from diffusers.pipelines.cogvideo.pipeline_cogvideox.CogVideoXPipeline._get_t5_prompt_embeds\n    def _get_t5_prompt_embeds(\n        self,\n        prompt: Union[str, List[str]] = None,\n        num_videos_per_prompt: int = 1,\n        max_sequence_length: int = 226,\n        device: Optional[torch.device] = None,\n        dtype: Optional[torch.dtype] = None,\n    ):\n        device = device or self._execution_device\n        dtype = dtype or self.text_encoder.dtype\n\n        prompt = [prompt] if isinstance(prompt, str) else prompt\n        batch_size = len(prompt)\n\n        text_inputs = self.tokenizer(\n            prompt,\n            padding=\"max_length\",\n            max_length=max_sequence_length,\n            truncation=True,\n            add_special_tokens=True,\n            return_tensors=\"pt\",\n        )\n        text_input_ids = text_inputs.input_ids\n        untruncated_ids = self.tokenizer(prompt, padding=\"longest\", return_tensors=\"pt\").input_ids\n\n        if untruncated_ids.shape[-1] >= text_input_ids.shape[-1] and not torch.equal(text_input_ids, untruncated_ids):\n            removed_text = self.tokenizer.batch_decode(untruncated_ids[:, max_sequence_length - 1 : -1])\n            logger.warning(\n                \"The following part of your input was truncated because `max_sequence_length` is set to \"\n                f\" {max_sequence_length} tokens: {removed_text}\"\n            )\n\n        prompt_embeds = self.text_encoder(text_input_ids.to(device))[0]\n        prompt_embeds = prompt_embeds.to(dtype=dtype, device=device)\n\n        # duplicate text embeddings for each generation per prompt, using mps friendly method\n        _, seq_len, _ = prompt_embeds.shape\n        prompt_embeds = prompt_embeds.repeat(1, num_videos_per_prompt, 1)\n        prompt_embeds = prompt_embeds.view(batch_size * num_videos_per_prompt, seq_len, -1)\n\n        return prompt_embeds\n\n    # Copied from diffusers.pipelines.cogvideo.pipeline_cogvideox.CogVideoXPipeline.encode_prompt\n    def encode_prompt(\n        self,\n        prompt: Union[str, List[str]],\n        negative_prompt: Optional[Union[str, List[str]]] = None,\n        do_classifier_free_guidance: bool = True,\n        num_videos_per_prompt: int = 1,\n        prompt_embeds: Optional[torch.Tensor] = None,\n        negative_prompt_embeds: Optional[torch.Tensor] = None,\n        max_sequence_length: int = 226,\n        device: Optional[torch.device] = None,\n        dtype: Optional[torch.dtype] = None,\n    ):\n        r\"\"\"\n        Encodes the prompt into text encoder hidden states.\n\n        Args:\n            prompt (`str` or `List[str]`, *optional*):\n                prompt to be encoded\n            negative_prompt (`str` or `List[str]`, *optional*):\n                The prompt or prompts not to guide the image generation. If not defined, one has to pass\n                `negative_prompt_embeds` instead. Ignored when not using guidance (i.e., ignored if `guidance_scale` is\n                less than `1`).\n            do_classifier_free_guidance (`bool`, *optional*, defaults to `True`):\n                Whether to use classifier free guidance or not.\n            num_videos_per_prompt (`int`, *optional*, defaults to 1):\n                Number of videos that should be generated per prompt. torch device to place the resulting embeddings on\n            prompt_embeds (`torch.Tensor`, *optional*):\n                Pre-generated text embeddings. Can be used to easily tweak text inputs, *e.g.* prompt weighting. If not\n                provided, text embeddings will be generated from `prompt` input argument.\n            negative_prompt_embeds (`torch.Tensor`, *optional*):\n                Pre-generated negative text embeddings. Can be used to easily tweak text inputs, *e.g.* prompt\n                weighting. If not provided, negative_prompt_embeds will be generated from `negative_prompt` input\n                argument.\n            device: (`torch.device`, *optional*):\n                torch device\n            dtype: (`torch.dtype`, *optional*):\n                torch dtype\n        \"\"\"\n        device = device or self._execution_device\n\n        prompt = [prompt] if isinstance(prompt, str) else prompt\n        if prompt is not None:\n            batch_size = len(prompt)\n        else:\n            batch_size = prompt_embeds.shape[0]\n\n        if prompt_embeds is None:\n            prompt_embeds = self._get_t5_prompt_embeds(\n                prompt=prompt,\n                num_videos_per_prompt=num_videos_per_prompt,\n                max_sequence_length=max_sequence_length,\n                device=device,\n                dtype=dtype,\n            )\n\n        if do_classifier_free_guidance and negative_prompt_embeds is None:\n            negative_prompt = negative_prompt or \"\"\n            negative_prompt = batch_size * [negative_prompt] if isinstance(negative_prompt, str) else negative_prompt\n\n            if prompt is not None and type(prompt) is not type(negative_prompt):\n                raise TypeError(\n                    f\"`negative_prompt` should be the same type to `prompt`, but got {type(negative_prompt)} !=\"\n                    f\" {type(prompt)}.\"\n                )\n            elif batch_size != len(negative_prompt):\n                raise ValueError(\n                    f\"`negative_prompt`: {negative_prompt} has batch size {len(negative_prompt)}, but `prompt`:\"\n                    f\" {prompt} has batch size {batch_size}. Please make sure that passed `negative_prompt` matches\"\n                    \" the batch size of `prompt`.\"\n                )\n\n            negative_prompt_embeds = self._get_t5_prompt_embeds(\n                prompt=negative_prompt,\n                num_videos_per_prompt=num_videos_per_prompt,\n                max_sequence_length=max_sequence_length,\n                device=device,\n                dtype=dtype,\n            )\n\n        return prompt_embeds, negative_prompt_embeds\n\n    def prepare_latents(\n        self,\n        first_image: torch.Tensor,\n        last_image: torch.Tensor,\n        batch_size: int = 1,\n        num_channels_latents: int = 16,\n        num_frames: int = 13,\n        height: int = 60,\n        width: int = 90,\n        dtype: Optional[torch.dtype] = None,\n        device: Optional[torch.device] = None,\n        generator: Optional[torch.Generator] = None,\n        latents: Optional[torch.Tensor] = None,\n    ):\n        num_frames = (num_frames - 1) // self.vae_scale_factor_temporal + 1\n        shape = (\n            batch_size,\n            num_frames,\n            num_channels_latents,\n            height // self.vae_scale_factor_spatial,\n            width // self.vae_scale_factor_spatial,\n        )\n\n        if isinstance(generator, list) and len(generator) != batch_size:\n            raise ValueError(\n                f\"You have passed a list of generators of length {len(generator)}, but requested an effective batch\"\n                f\" size of {batch_size}. Make sure the batch size matches the length of the generators.\"\n            )\n\n        first_image = first_image.unsqueeze(2)  # [B, C, F, H, W]\n        last_image = last_image.unsqueeze(2)  # [B, C, F, H, W] \n\n        if isinstance(generator, list):\n            first_image_latents = [\n                retrieve_latents(self.vae.encode(first_image[i].unsqueeze(0)), generator[i]) for i in range(batch_size)\n            ]\n        else:\n            first_image_latents = [retrieve_latents(self.vae.encode(first_img.unsqueeze(0)), generator) for first_img in first_image]\n        \n        if isinstance(generator, list):\n            last_image_latents = [\n                retrieve_latents(self.vae.encode(last_image[i].unsqueeze(0)), generator[i]) for i in range(batch_size)\n            ]\n        else:\n            last_image_latents = [retrieve_latents(self.vae.encode(last_img.unsqueeze(0)), generator) for last_img in last_image]\n\n\n        first_image_latents = torch.cat(first_image_latents, dim=0).to(dtype).permute(0, 2, 1, 3, 4)  # [B, F, C, H, W]\n        first_image_latents = self.vae.config.scaling_factor * first_image_latents \n        last_image_latents = torch.cat(last_image_latents, dim=0).to(dtype).permute(0, 2, 1, 3, 4)  # [B, F, C, H, W]\n        last_image_latents = self.vae.config.scaling_factor * last_image_latents \n\n\n        padding_shape = (\n            batch_size,\n            num_frames - 2,\n            num_channels_latents,\n            height // self.vae_scale_factor_spatial,\n            width // self.vae_scale_factor_spatial,\n        )\n        latent_padding = torch.zeros(padding_shape, device=device, dtype=dtype)\n        image_latents = torch.cat([first_image_latents, latent_padding, last_image_latents], dim=1)\n\n        if latents is None:\n            latents = randn_tensor(shape, generator=generator, device=device, dtype=dtype)\n        else:\n            latents = latents.to(device)\n\n        # scale the initial noise by the standard deviation required by the scheduler\n        latents = latents * self.scheduler.init_noise_sigma\n        return latents, image_latents\n\n    # Copied from diffusers.pipelines.cogvideo.pipeline_cogvideox.CogVideoXPipeline.decode_latents\n    def decode_latents(self, latents: torch.Tensor) -> torch.Tensor:\n        latents = latents.permute(0, 2, 1, 3, 4)  # [batch_size, num_channels, num_frames, height, width]\n        latents = 1 / self.vae.config.scaling_factor * latents\n\n        frames = self.vae.decode(latents).sample\n        return frames\n\n    # Copied from diffusers.pipelines.animatediff.pipeline_animatediff_video2video.AnimateDiffVideoToVideoPipeline.get_timesteps\n    def get_timesteps(self, num_inference_steps, timesteps, strength, device):\n        # get the original timestep using init_timestep\n        init_timestep = min(int(num_inference_steps * strength), num_inference_steps)\n\n        t_start = max(num_inference_steps - init_timestep, 0)\n        timesteps = timesteps[t_start * self.scheduler.order :]\n\n        return timesteps, num_inference_steps - t_start\n\n    # Copied from diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion.StableDiffusionPipeline.prepare_extra_step_kwargs\n    def prepare_extra_step_kwargs(self, generator, eta):\n        # prepare extra kwargs for the scheduler step, since not all schedulers have the same signature\n        # eta (η) is only used with the DDIMScheduler, it will be ignored for other schedulers.\n        # eta corresponds to η in DDIM paper: https://arxiv.org/abs/2010.02502\n        # and should be between [0, 1]\n\n        accepts_eta = \"eta\" in set(inspect.signature(self.scheduler.step).parameters.keys())\n        extra_step_kwargs = {}\n        if accepts_eta:\n            extra_step_kwargs[\"eta\"] = eta\n\n        # check if the scheduler accepts generator\n        accepts_generator = \"generator\" in set(inspect.signature(self.scheduler.step).parameters.keys())\n        if accepts_generator:\n            extra_step_kwargs[\"generator\"] = generator\n        return extra_step_kwargs\n\n    def check_inputs(\n        self,\n        first_image,\n        last_image,\n        prompt,\n        height,\n        width,\n        negative_prompt,\n        callback_on_step_end_tensor_inputs,\n        video=None,\n        latents=None,\n        prompt_embeds=None,\n        negative_prompt_embeds=None,\n    ):\n        if (\n            not isinstance(first_image, torch.Tensor)\n            and not isinstance(first_image, PIL.Image.Image)\n            and not isinstance(first_image, list)\n        ):\n            raise ValueError(\n                \"`image` has to be of type `torch.Tensor` or `PIL.Image.Image` or `List[PIL.Image.Image]` but is\"\n                f\" {type(first_image)}\"\n            )\n        \n        if (\n            not isinstance(last_image, torch.Tensor)\n            and not isinstance(last_image, PIL.Image.Image)\n            and not isinstance(last_image, list)\n        ):\n            raise ValueError(\n                \"`image` has to be of type `torch.Tensor` or `PIL.Image.Image` or `List[PIL.Image.Image]` but is\"\n                f\" {type(last_image)}\"\n            )\n\n\n        if height % 8 != 0 or width % 8 != 0:\n            raise ValueError(f\"`height` and `width` have to be divisible by 8 but are {height} and {width}.\")\n\n        if callback_on_step_end_tensor_inputs is not None and not all(\n            k in self._callback_tensor_inputs for k in callback_on_step_end_tensor_inputs\n        ):\n            raise ValueError(\n                f\"`callback_on_step_end_tensor_inputs` has to be in {self._callback_tensor_inputs}, but found {[k for k in callback_on_step_end_tensor_inputs if k not in self._callback_tensor_inputs]}\"\n            )\n        if prompt is not None and prompt_embeds is not None:\n            raise ValueError(\n                f\"Cannot forward both `prompt`: {prompt} and `prompt_embeds`: {prompt_embeds}. Please make sure to\"\n                \" only forward one of the two.\"\n            )\n        elif prompt is None and prompt_embeds is None:\n            raise ValueError(\n                \"Provide either `prompt` or `prompt_embeds`. Cannot leave both `prompt` and `prompt_embeds` undefined.\"\n            )\n        elif prompt is not None and (not isinstance(prompt, str) and not isinstance(prompt, list)):\n            raise ValueError(f\"`prompt` has to be of type `str` or `list` but is {type(prompt)}\")\n\n        if prompt is not None and negative_prompt_embeds is not None:\n            raise ValueError(\n                f\"Cannot forward both `prompt`: {prompt} and `negative_prompt_embeds`:\"\n                f\" {negative_prompt_embeds}. Please make sure to only forward one of the two.\"\n            )\n\n        if negative_prompt is not None and negative_prompt_embeds is not None:\n            raise ValueError(\n                f\"Cannot forward both `negative_prompt`: {negative_prompt} and `negative_prompt_embeds`:\"\n                f\" {negative_prompt_embeds}. Please make sure to only forward one of the two.\"\n            )\n\n        if prompt_embeds is not None and negative_prompt_embeds is not None:\n            if prompt_embeds.shape != negative_prompt_embeds.shape:\n                raise ValueError(\n                    \"`prompt_embeds` and `negative_prompt_embeds` must have the same shape when passed directly, but\"\n                    f\" got: `prompt_embeds` {prompt_embeds.shape} != `negative_prompt_embeds`\"\n                    f\" {negative_prompt_embeds.shape}.\"\n                )\n\n        if video is not None and latents is not None:\n            raise ValueError(\"Only one of `video` or `latents` should be provided\")\n\n    # Copied from diffusers.pipelines.cogvideo.pipeline_cogvideox.CogVideoXPipeline.fuse_qkv_projections\n    def fuse_qkv_projections(self) -> None:\n        r\"\"\"Enables fused QKV projections.\"\"\"\n        self.fusing_transformer = True\n        self.transformer.fuse_qkv_projections()\n\n    # Copied from diffusers.pipelines.cogvideo.pipeline_cogvideox.CogVideoXPipeline.unfuse_qkv_projections\n    def unfuse_qkv_projections(self) -> None:\n        r\"\"\"Disable QKV projection fusion if enabled.\"\"\"\n        if not self.fusing_transformer:\n            logger.warning(\"The Transformer was not initially fused for QKV projections. Doing nothing.\")\n        else:\n            self.transformer.unfuse_qkv_projections()\n            self.fusing_transformer = False\n\n    # Copied from diffusers.pipelines.cogvideo.pipeline_cogvideox.CogVideoXPipeline._prepare_rotary_positional_embeddings\n    def _prepare_rotary_positional_embeddings(\n        self,\n        height: int,\n        width: int,\n        num_frames: int,\n        device: torch.device,\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        grid_height = height // (self.vae_scale_factor_spatial * self.transformer.config.patch_size)\n        grid_width = width // (self.vae_scale_factor_spatial * self.transformer.config.patch_size)\n        base_size_width = 720 // (self.vae_scale_factor_spatial * self.transformer.config.patch_size)\n        base_size_height = 480 // (self.vae_scale_factor_spatial * self.transformer.config.patch_size)\n\n        grid_crops_coords = get_resize_crop_region_for_grid(\n            (grid_height, grid_width), base_size_width, base_size_height\n        )\n        freqs_cos, freqs_sin = get_3d_rotary_pos_embed(\n            embed_dim=self.transformer.config.attention_head_dim,\n            crops_coords=grid_crops_coords,\n            grid_size=(grid_height, grid_width),\n            temporal_size=num_frames,\n        )\n\n        freqs_cos = freqs_cos.to(device=device)\n        freqs_sin = freqs_sin.to(device=device)\n        return freqs_cos, freqs_sin\n\n    @property\n    def guidance_scale(self):\n        return self._guidance_scale\n\n    @property\n    def num_timesteps(self):\n        return self._num_timesteps\n\n    @property\n    def interrupt(self):\n        return self._interrupt\n\n    @torch.no_grad()\n    def __call__(\n        self,\n        first_image: PipelineImageInput,\n        last_image: PipelineImageInput,\n        prompt: Optional[Union[str, List[str]]] = None,\n        negative_prompt: Optional[Union[str, List[str]]] = None,\n        height: int = 480,\n        width: int = 720,\n        num_frames: int = 49,\n        num_inference_steps: int = 50,\n        timesteps: Optional[List[int]] = None,\n        guidance_scale: float = 6,\n        use_dynamic_cfg: bool = False,\n        num_videos_per_prompt: int = 1,\n        eta: float = 0.0,\n        generator: Optional[Union[torch.Generator, List[torch.Generator]]] = None,\n        latents: Optional[torch.FloatTensor] = None,\n        prompt_embeds: Optional[torch.FloatTensor] = None,\n        negative_prompt_embeds: Optional[torch.FloatTensor] = None,\n        output_type: str = \"pil\",\n        return_dict: bool = True,\n        callback_on_step_end: Optional[\n            Union[Callable[[int, int, Dict], None], PipelineCallback, MultiPipelineCallbacks]\n        ] = None,\n        callback_on_step_end_tensor_inputs: List[str] = [\"latents\"],\n        max_sequence_length: int = 226,\n    ):\n        \"\"\"\n        Function invoked when calling the pipeline for generation.\n\n        Args:\n            image (`PipelineImageInput`):\n                The input video to condition the generation on. Must be an image, a list of images or a `torch.Tensor`.\n            prompt (`str` or `List[str]`, *optional*):\n                The prompt or prompts to guide the image generation. If not defined, one has to pass `prompt_embeds`.\n                instead.\n            negative_prompt (`str` or `List[str]`, *optional*):\n                The prompt or prompts not to guide the image generation. If not defined, one has to pass\n                `negative_prompt_embeds` instead. Ignored when not using guidance (i.e., ignored if `guidance_scale` is\n                less than `1`).\n            height (`int`, *optional*, defaults to self.unet.config.sample_size * self.vae_scale_factor):\n                The height in pixels of the generated image. This is set to 1024 by default for the best results.\n            width (`int`, *optional*, defaults to self.unet.config.sample_size * self.vae_scale_factor):\n                The width in pixels of the generated image. This is set to 1024 by default for the best results.\n            num_frames (`int`, defaults to `48`):\n                Number of frames to generate. Must be divisible by self.vae_scale_factor_temporal. Generated video will\n                contain 1 extra frame because CogVideoX is conditioned with (num_seconds * fps + 1) frames where\n                num_seconds is 6 and fps is 4. However, since videos can be saved at any fps, the only condition that\n                needs to be satisfied is that of divisibility mentioned above.\n            num_inference_steps (`int`, *optional*, defaults to 50):\n                The number of denoising steps. More denoising steps usually lead to a higher quality image at the\n                expense of slower inference.\n            timesteps (`List[int]`, *optional*):\n                Custom timesteps to use for the denoising process with schedulers which support a `timesteps` argument\n                in their `set_timesteps` method. If not defined, the default behavior when `num_inference_steps` is\n                passed will be used. Must be in descending order.\n            guidance_scale (`float`, *optional*, defaults to 7.0):\n                Guidance scale as defined in [Classifier-Free Diffusion Guidance](https://arxiv.org/abs/2207.12598).\n                `guidance_scale` is defined as `w` of equation 2. of [Imagen\n                Paper](https://arxiv.org/pdf/2205.11487.pdf). Guidance scale is enabled by setting `guidance_scale >\n                1`. Higher guidance scale encourages to generate images that are closely linked to the text `prompt`,\n                usually at the expense of lower image quality.\n            num_videos_per_prompt (`int`, *optional*, defaults to 1):\n                The number of videos to generate per prompt.\n            generator (`torch.Generator` or `List[torch.Generator]`, *optional*):\n                One or a list of [torch generator(s)](https://pytorch.org/docs/stable/generated/torch.Generator.html)\n                to make generation deterministic.\n            latents (`torch.FloatTensor`, *optional*):\n                Pre-generated noisy latents, sampled from a Gaussian distribution, to be used as inputs for image\n                generation. Can be used to tweak the same generation with different prompts. If not provided, a latents\n                tensor will ge generated by sampling using the supplied random `generator`.\n            prompt_embeds (`torch.FloatTensor`, *optional*):\n                Pre-generated text embeddings. Can be used to easily tweak text inputs, *e.g.* prompt weighting. If not\n                provided, text embeddings will be generated from `prompt` input argument.\n            negative_prompt_embeds (`torch.FloatTensor`, *optional*):\n                Pre-generated negative text embeddings. Can be used to easily tweak text inputs, *e.g.* prompt\n                weighting. If not provided, negative_prompt_embeds will be generated from `negative_prompt` input\n                argument.\n            output_type (`str`, *optional*, defaults to `\"pil\"`):\n                The output format of the generate image. Choose between\n                [PIL](https://pillow.readthedocs.io/en/stable/): `PIL.Image.Image` or `np.array`.\n            return_dict (`bool`, *optional*, defaults to `True`):\n                Whether or not to return a [`~pipelines.stable_diffusion_xl.StableDiffusionXLPipelineOutput`] instead\n                of a plain tuple.\n            callback_on_step_end (`Callable`, *optional*):\n                A function that calls at the end of each denoising steps during the inference. The function is called\n                with the following arguments: `callback_on_step_end(self: DiffusionPipeline, step: int, timestep: int,\n                callback_kwargs: Dict)`. `callback_kwargs` will include a list of all tensors as specified by\n                `callback_on_step_end_tensor_inputs`.\n            callback_on_step_end_tensor_inputs (`List`, *optional*):\n                The list of tensor inputs for the `callback_on_step_end` function. The tensors specified in the list\n                will be passed as `callback_kwargs` argument. You will only be able to include variables listed in the\n                `._callback_tensor_inputs` attribute of your pipeline class.\n            max_sequence_length (`int`, defaults to `226`):\n                Maximum sequence length in encoded prompt. Must be consistent with\n                `self.transformer.config.max_text_seq_length` otherwise may lead to poor results.\n\n        Examples:\n\n        Returns:\n            [`~pipelines.cogvideo.pipeline_output.CogVideoXPipelineOutput`] or `tuple`:\n            [`~pipelines.cogvideo.pipeline_output.CogVideoXPipelineOutput`] if `return_dict` is True, otherwise a\n            `tuple`. When returning a tuple, the first element is a list with the generated images.\n        \"\"\"\n\n        if num_frames > 49:\n            raise ValueError(\n                \"The number of frames must be less than 49 for now due to static positional embeddings. This will be updated in the future to remove this limitation.\"\n            )\n\n        if isinstance(callback_on_step_end, (PipelineCallback, MultiPipelineCallbacks)):\n            callback_on_step_end_tensor_inputs = callback_on_step_end.tensor_inputs\n\n        height = height or self.transformer.config.sample_size * self.vae_scale_factor_spatial\n        width = width or self.transformer.config.sample_size * self.vae_scale_factor_spatial\n        num_videos_per_prompt = 1\n\n        # 1. Check inputs. Raise error if not correct\n        self.check_inputs(\n            first_image,\n            last_image,\n            prompt,\n            height,\n            width,\n            negative_prompt,\n            callback_on_step_end_tensor_inputs,\n            prompt_embeds,\n            negative_prompt_embeds,\n        )\n        self._guidance_scale = guidance_scale\n        self._interrupt = False\n\n        # 2. Default call parameters\n        if prompt is not None and isinstance(prompt, str):\n            batch_size = 1\n        elif prompt is not None and isinstance(prompt, list):\n            batch_size = len(prompt)\n        else:\n            batch_size = prompt_embeds.shape[0]\n\n        device = self._execution_device\n\n        # here `guidance_scale` is defined analog to the guidance weight `w` of equation (2)\n        # of the Imagen paper: https://arxiv.org/pdf/2205.11487.pdf . `guidance_scale = 1`\n        # corresponds to doing no classifier free guidance.\n        do_classifier_free_guidance = guidance_scale > 1.0\n\n        # 3. Encode input prompt\n        prompt_embeds, negative_prompt_embeds = self.encode_prompt(\n            prompt=prompt,\n            negative_prompt=negative_prompt,\n            do_classifier_free_guidance=do_classifier_free_guidance,\n            num_videos_per_prompt=num_videos_per_prompt,\n            prompt_embeds=prompt_embeds,\n            negative_prompt_embeds=negative_prompt_embeds,\n            max_sequence_length=max_sequence_length,\n            device=device,\n        )\n        if do_classifier_free_guidance:\n            prompt_embeds = torch.cat([negative_prompt_embeds, prompt_embeds], dim=0)\n\n        # 4. Prepare timesteps\n        timesteps, num_inference_steps = retrieve_timesteps(self.scheduler, num_inference_steps, device, timesteps)\n        self._num_timesteps = len(timesteps)\n\n        # 5. Prepare latents\n        first_image = self.video_processor.preprocess(first_image, height=height, width=width).to(\n            device, dtype=prompt_embeds.dtype\n        )\n        last_image = self.video_processor.preprocess(last_image, height=height, width=width).to(\n            device, dtype=prompt_embeds.dtype\n        )\n\n        latent_channels = self.transformer.config.in_channels // 2\n        latents, image_latents = self.prepare_latents(\n            first_image,\n            last_image,\n            batch_size * num_videos_per_prompt,\n            latent_channels,\n            num_frames,\n            height,\n            width,\n            prompt_embeds.dtype,\n            device,\n            generator,\n            latents,\n        )\n\n        # 6. Prepare extra step kwargs. TODO: Logic should ideally just be moved out of the pipeline\n        extra_step_kwargs = self.prepare_extra_step_kwargs(generator, eta)\n\n        # 7. Create rotary embeds if required\n        image_rotary_emb = (\n            self._prepare_rotary_positional_embeddings(height, width, latents.size(1), device)\n            if self.transformer.config.use_rotary_positional_embeddings\n            else None\n        )\n\n        # 8. Denoising loop\n        num_warmup_steps = max(len(timesteps) - num_inference_steps * self.scheduler.order, 0)\n\n        with self.progress_bar(total=num_inference_steps) as progress_bar:\n            # for DPM-solver++\n            old_pred_original_sample = None\n            for i, t in enumerate(timesteps):\n                if self.interrupt:\n                    continue\n\n                latent_model_input = torch.cat([latents] * 2) if do_classifier_free_guidance else latents\n                latent_model_input = self.scheduler.scale_model_input(latent_model_input, t)\n\n                latent_image_input = torch.cat([image_latents] * 2) if do_classifier_free_guidance else image_latents\n                latent_model_input = torch.cat([latent_model_input, latent_image_input], dim=2)\n\n                # broadcast to batch dimension in a way that's compatible with ONNX/Core ML\n                timestep = t.expand(latent_model_input.shape[0])\n\n                # predict noise model_output\n                noise_pred = self.transformer(\n                    hidden_states=latent_model_input,\n                    encoder_hidden_states=prompt_embeds,\n                    timestep=timestep,\n                    image_rotary_emb=image_rotary_emb,\n                    return_dict=False,\n                )[0]\n                noise_pred = noise_pred.float()\n\n                # perform guidance\n                if use_dynamic_cfg:\n                    self._guidance_scale = 1 + guidance_scale * (\n                        (1 - math.cos(math.pi * ((num_inference_steps - t.item()) / num_inference_steps) ** 5.0)) / 2\n                    )\n                if do_classifier_free_guidance:\n                    noise_pred_uncond, noise_pred_text = noise_pred.chunk(2)\n                    noise_pred = noise_pred_uncond + self.guidance_scale * (noise_pred_text - noise_pred_uncond)\n\n                # compute the previous noisy sample x_t -> x_t-1\n                if not isinstance(self.scheduler, CogVideoXDPMScheduler):\n                    latents = self.scheduler.step(noise_pred, t, latents, **extra_step_kwargs, return_dict=False)[0]\n                else:\n                    latents, old_pred_original_sample = self.scheduler.step(\n                        noise_pred,\n                        old_pred_original_sample,\n                        t,\n                        timesteps[i - 1] if i > 0 else None,\n                        latents,\n                        **extra_step_kwargs,\n                        return_dict=False,\n                    )\n                latents = latents.to(prompt_embeds.dtype)\n\n                # call the callback, if provided\n                if callback_on_step_end is not None:\n                    callback_kwargs = {}\n                    for k in callback_on_step_end_tensor_inputs:\n                        callback_kwargs[k] = locals()[k]\n                    callback_outputs = callback_on_step_end(self, i, t, callback_kwargs)\n\n                    latents = callback_outputs.pop(\"latents\", latents)\n                    prompt_embeds = callback_outputs.pop(\"prompt_embeds\", prompt_embeds)\n                    negative_prompt_embeds = callback_outputs.pop(\"negative_prompt_embeds\", negative_prompt_embeds)\n\n                if i == len(timesteps) - 1 or ((i + 1) > num_warmup_steps and (i + 1) % self.scheduler.order == 0):\n                    progress_bar.update()\n\n        if not output_type == \"latent\":\n            video = self.decode_latents(latents)\n            video = self.video_processor.postprocess_video(video=video, output_type=output_type)\n        else:\n            video = latents\n\n        # Offload all models\n        self.maybe_free_model_hooks()\n\n        if not return_dict:\n            return (video,)\n\n        return (video,)\n"
  },
  {
    "path": "cogvideox_interpolation/utils/colormaps.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\" Helper functions for visualizing outputs \"\"\"\n\nfrom dataclasses import dataclass\nfrom typing import Optional\n\nimport matplotlib\nimport mediapy as media\nimport torch\nfrom jaxtyping import Bool, Float\nfrom torch import Tensor\n\nfrom . import colors\n\n# Colormaps = Literal[\"default\", \"turbo\", \"viridis\", \"magma\", \"inferno\", \"cividis\", \"gray\", \"pca\"]\nColormaps = \"turbo\"\n\n@dataclass(frozen=True)\nclass ColormapOptions:\n    \"\"\"Options for colormap\"\"\"\n\n    colormap: Colormaps = \"default\"\n    \"\"\" The colormap to use \"\"\"\n    normalize: bool = False\n    \"\"\" Whether to normalize the input tensor image \"\"\"\n    colormap_min: float = 0\n    \"\"\" Minimum value for the output colormap \"\"\"\n    colormap_max: float = 1\n    \"\"\" Maximum value for the output colormap \"\"\"\n    invert: bool = False\n    \"\"\" Whether to invert the output colormap \"\"\"\n\n\ndef apply_colormap(\n        image: Float[Tensor, \"*bs channels\"],\n        colormap_options: ColormapOptions = ColormapOptions(),\n        eps: float = 1e-9,\n        mask_thresh=None,\n):\n    \"\"\"\n    Applies a colormap to a tensor image.\n    If single channel, applies a colormap to the image.\n    If 3 channel, treats the channels as RGB.\n    If more than 3 channel, applies a PCA reduction on the dimensions to 3 channels\n\n    Args:\n        image: Input tensor image.\n        eps: Epsilon value for numerical stability.\n\n    Returns:\n        Tensor with the colormap applied.\n    \"\"\"\n\n    # default for rgb images\n    if image.shape[-1] == 3:\n        return image\n\n    # rendering depth outputs\n    if image.shape[-1] == 1 and torch.is_floating_point(image):\n        output = image\n        if mask_thresh is not None:\n            mask = output < mask_thresh\n        if colormap_options.normalize:\n            output = output - torch.min(output)\n            output = output / (torch.max(output) + eps)\n        output = (\n                output * (colormap_options.colormap_max - colormap_options.colormap_min) + colormap_options.colormap_min\n        )\n        output = torch.clip(output, 0, 1)\n        if mask_thresh is not None:\n            output[mask] = 0\n        if colormap_options.invert:\n            output = 1 - output\n        return apply_float_colormap(output, colormap=colormap_options.colormap)\n\n    # rendering boolean outputs\n    if image.dtype == torch.bool:\n        return apply_boolean_colormap(image)\n\n    if image.shape[-1] > 3:\n        return apply_pca_colormap(image)\n\n    raise NotImplementedError\n\n\ndef apply_float_colormap(image: Float[Tensor, \"*bs 1\"], colormap: Colormaps = \"viridis\"):\n    \"\"\"Convert single channel to a color image.\n\n    Args:\n        image: Single channel image.\n        colormap: Colormap for image.\n\n    Returns:\n        Tensor: Colored image with colors in [0, 1]\n    \"\"\"\n    if colormap == \"default\":\n        colormap = \"turbo\"\n\n    image = torch.nan_to_num(image, 0)\n    if colormap == \"gray\":\n        return image.repeat(1, 1, 3)\n    image_long = (image * 255).long()\n    image_long_min = torch.min(image_long)\n    image_long_max = torch.max(image_long)\n    assert image_long_min >= 0, f\"the min value is {image_long_min}\"\n    assert image_long_max <= 255, f\"the max value is {image_long_max}\"\n    return torch.tensor(matplotlib.colormaps[colormap].colors, device=image.device)[image_long[..., 0]]\n\n\ndef apply_depth_colormap(\n    depth: Float[Tensor, \"*bs 1\"],\n    accumulation: Optional[Float[Tensor, \"*bs 1\"]] = None,\n    near_plane: Optional[float] = None,\n    far_plane: Optional[float] = None,\n    colormap_options: ColormapOptions = ColormapOptions(),\n):\n    \"\"\"Converts a depth image to color for easier analysis.\n\n    Args:\n        depth: Depth image.\n        accumulation: Ray accumulation used for masking vis.\n        near_plane: Closest depth to consider. If None, use min image value.\n        far_plane: Furthest depth to consider. If None, use max image value.\n        colormap: Colormap to apply.\n\n    Returns:\n        Colored depth image with colors in [0, 1]\n    \"\"\"\n\n    near_plane = near_plane or float(torch.min(depth))\n    far_plane = far_plane or float(torch.max(depth))\n\n    depth = (depth - near_plane) / (far_plane - near_plane + 1e-10)\n    depth = torch.clip(depth, 0, 1)\n    # depth = torch.nan_to_num(depth, nan=0.0) # TODO(ethan): remove this\n\n    colored_image = apply_colormap(depth, colormap_options=colormap_options)\n\n    if accumulation is not None:\n        colored_image = colored_image * accumulation + (1 - accumulation)\n\n    return colored_image\n\n\ndef apply_boolean_colormap(\n    image: Bool[Tensor, \"*bs 1\"],\n    true_color = colors.WHITE,\n    false_color = colors.BLACK,\n):\n    \"\"\"Converts a depth image to color for easier analysis.\n\n    Args:\n        image: Boolean image.\n        true_color: Color to use for True.\n        false_color: Color to use for False.\n\n    Returns:\n        Colored boolean image\n    \"\"\"\n\n    colored_image = torch.ones(image.shape[:-1] + (3,))\n    colored_image[image[..., 0], :] = true_color\n    colored_image[~image[..., 0], :] = false_color\n    return colored_image\n\n\ndef apply_pca_colormap(image: Float[Tensor, \"*bs dim\"]):\n    \"\"\"Convert feature image to 3-channel RGB via PCA. The first three principle\n    components are used for the color channels, with outlier rejection per-channel\n\n    Args:\n        image: image of arbitrary vectors\n\n    Returns:\n        Tensor: Colored image\n    \"\"\"\n    original_shape = image.shape\n    image = image.contiguous().view(-1, image.shape[-1])\n    _, _, v = torch.pca_lowrank(image)\n    image = torch.matmul(image, v[..., :3])\n    d = torch.abs(image - torch.median(image, dim=0).values)\n    mdev = torch.median(d, dim=0).values\n    s = d / mdev\n    m = 3.0  # this is a hyperparam controlling how many std dev outside for outliers\n    rins = image[s[:, 0] < m, 0]\n    gins = image[s[:, 1] < m, 1]\n    bins = image[s[:, 2] < m, 2]\n\n    if len(rins) == 0 or len(gins) == 0 or len(bins) == 0:\n        return image.new_zeros(*original_shape[:-1], 3)\n\n    image[:, 0] -= rins.min()\n    image[:, 1] -= gins.min()\n    image[:, 2] -= bins.min()\n\n    image[:, 0] /= rins.max() - rins.min()\n    image[:, 1] /= gins.max() - gins.min()\n    image[:, 2] /= bins.max() - bins.min()\n\n    image = torch.clamp(image, 0, 1)\n    image_long = (image * 255).long()\n    image_long_min = torch.min(image_long)\n    image_long_max = torch.max(image_long)\n    assert image_long_min >= 0, f\"the min value is {image_long_min}\"\n    assert image_long_max <= 255, f\"the max value is {image_long_max}\"\n    return image.view(*original_shape[:-1], 3)\n\n\ndef colormap_saving(image: torch.Tensor, colormap_options, mask_thresh=None, save_path=None):\n    \"\"\"\n    if image's shape is (h, w, 1): draw colored relevance map;\n    if image's shape is (h, w, 3): return directively;\n    if image's shape is (h, w, c): execute PCA and transform it into (h, w, 3).\n    \"\"\"\n    output_image = (\n        apply_colormap(\n            image=image,\n            mask_thresh=mask_thresh,\n            colormap_options=colormap_options,\n        ).cpu().numpy()\n    )\n    if save_path is not None:\n        media.write_image(save_path.with_suffix(\".png\"), output_image, fmt=\"png\")\n    return output_image\n"
  },
  {
    "path": "cogvideox_interpolation/utils/colors.py",
    "content": "# Copyright 2022 the Regents of the University of California, Nerfstudio Team and contributors. All rights reserved.\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\n\"\"\"Common Colors\"\"\"\nfrom typing import Union\n\nimport torch\nfrom jaxtyping import Float\nfrom torch import Tensor\n\nWHITE = torch.tensor([1.0, 1.0, 1.0])\nBLACK = torch.tensor([0.0, 0.0, 0.0])\nRED = torch.tensor([1.0, 0.0, 0.0])\nGREEN = torch.tensor([0.0, 1.0, 0.0])\nBLUE = torch.tensor([0.0, 0.0, 1.0])\n\nCOLORS_DICT = {\n    \"white\": WHITE,\n    \"black\": BLACK,\n    \"red\": RED,\n    \"green\": GREEN,\n    \"blue\": BLUE,\n}\n\n\ndef get_color(color: Union[str, list]) -> Float[Tensor, \"3\"]:\n    \"\"\"\n    Args:\n        Color as a string or a rgb list\n\n    Returns:\n        Parsed color\n    \"\"\"\n    if isinstance(color, str):\n        color = color.lower()\n        if color not in COLORS_DICT:\n            raise ValueError(f\"{color} is not a valid preset color\")\n        return COLORS_DICT[color]\n    if isinstance(color, list):\n        if len(color) != 3:\n            raise ValueError(f\"Color should be 3 values (RGB) instead got {color}\")\n        return torch.tensor(color)\n\n    raise ValueError(f\"Color should be an RGB list or string, instead got {type(color)}\")\n"
  },
  {
    "path": "cogvideox_interpolation/utils/config_utils.py",
    "content": "import argparse\nimport os\n\nfrom mmengine.config import Config\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(description=\"Simple example of a training script.\")\n    \n    parser.add_argument(\"--config\", help=\"model config file path\")\n    parser.add_argument(\n        \"--pretrained_model_name_or_path\",\n        type=str,\n        default=None,\n        required=True,\n        help=\"Path to pretrained model or model identifier from huggingface.co/models.\",\n    )\n    parser.add_argument(\n        \"--pretrained_model_ae\",\n        type=str,\n        default=None,\n        help=\"Path to pretrained model or model identifier from huggingface.co/models.\",\n    )\n    parser.add_argument(\n        \"--root_path\",\n        type=str,\n        help=\"The output directory where the model predictions and checkpoints will be written.\",\n    )\n    parser.add_argument(\n        \"--annotation_json\",\n        type=str,\n        help=\"The output directory where the model predictions and checkpoints will be written.\",\n    )\n    parser.add_argument(\n        \"--output_dir\",\n        type=str,\n        default=\"results\",\n        help=\"The output directory where the model predictions and checkpoints will be written.\",\n    )\n    parser.add_argument(\n        \"--logging_dir\",\n        type=str,\n        default=\"logs\",\n    )\n    parser.add_argument(\n        \"--mixed_precision\",\n        type=str,\n        default=None,\n        choices=[\"no\", \"fp16\", \"bf16\"],\n        help=(\n            \"Whether to use mixed precision. Choose between fp16 and bf16 (bfloat16). Bf16 requires PyTorch >=\"\n            \" 1.10.and an Nvidia Ampere GPU.  Default to the value of accelerate config of the current system or the\"\n            \" flag passed with the `accelerate.launch` command. Use this argument to override the accelerate config.\"\n        ),\n    )\n    parser.add_argument(\n        \"--report_to\",\n        type=str,\n        default=\"tensorboard\",\n        help=(\n            'The integration to report the results and logs to. Supported platforms are `\"tensorboard\"`'\n            ' (default), `\"wandb\"` and `\"comet_ml\"`. Use `\"all\"` to report to all integrations.'\n        ),\n    )\n    parser.add_argument(\n        \"--gradient_accumulation_steps\",\n        type=int,\n        default=8,\n        help=\"Number of updates steps to accumulate before performing a backward/update pass.\",\n    )\n    parser.add_argument(\n        \"--revision\",\n        type=str,\n        default=None,\n        required=False,\n        help=\"Revision of pretrained model identifier from huggingface.co/models.\",\n    )\n    parser.add_argument(\n        \"--variant\",\n        type=str,\n        default=None,\n        help=\"Variant of the model files of the pretrained model identifier from huggingface.co/models, 'e.g.' fp16\",\n    ) \n    parser.add_argument(\n        \"--gradient_checkpointing\",\n        type=bool,\n        default=True,\n        help=\"Whether or not to use gradient checkpointing to save memory at the expense of slower backward pass.\",\n    )\n    parser.add_argument(\n        \"--learning_rate\",\n        type=float,\n        default=1e-4,\n        help=\"Initial learning rate (after the potential warmup period) to use.\",\n    )\n    parser.add_argument(\n        \"--use_8bit_adam\", \n        type=bool,\n        default=True,\n        help=\"Whether or not to use 8-bit Adam from bitsandbytes.\"\n    )\n    parser.add_argument(\n        \"--use_came\",\n        type=bool,\n        default=False,\n        help=\"whether to use came\",\n    )\n    parser.add_argument(\n        \"--allow_tf32\",\n        type=bool,\n        default=True,\n        help=(\n            \"Whether or not to allow TF32 on Ampere GPUs. Can be used to speed up training. For more information, see\"\n            \" https://pytorch.org/docs/stable/notes/cuda.html#tensorfloat-32-tf32-on-ampere-devices\"\n        ),\n    )\n    parser.add_argument(\n        \"--lr_scheduler\",\n        type=str,\n        default=\"constant\",\n        help=(\n            'The scheduler type to use. Choose between [\"linear\", \"cosine\", \"cosine_with_restarts\", \"polynomial\",'\n            ' \"constant\", \"constant_with_warmup\"]'\n        ),\n    )\n    parser.add_argument(\n        \"--lr_warmup_steps\", type=int, default=500, help=\"Number of steps for the warmup in the lr scheduler.\"\n    )\n    parser.add_argument(\n        \"--max_train_steps\",\n        type=int,\n        default=None,\n        help=\"Total number of training steps to perform.  If provided, overrides num_train_epochs.\",\n    ) \n    parser.add_argument(\n        \"--dataloader_num_workers\",\n        type=int,\n        default=0,\n        help=(\n            \"Number of subprocesses to use for data loading. 0 means that the data will be loaded in the main process.\"\n        ),\n    )\n    parser.add_argument(\n        \"--train_batch_size\", type=int, default=1, help=\"Batch size (per device) for the training dataloader.\"\n    )\n    parser.add_argument(\n        \"--checkpointing_steps\",\n        type=int,\n        default=4000,\n        help=(\n            \"Save a checkpoint of the training state every X updates. These checkpoints are only suitable for resuming\"\n            \" training using `--resume_from_checkpoint`.\"\n        ),\n    )\n    parser.add_argument(\"--seed\", type=int, default=42, help=\"A seed for reproducible training.\")\n    parser.add_argument(\"--num_train_epochs\", type=int, default=100)\n    parser.add_argument(\"--adam_beta1\", type=float, default=0.9, help=\"The beta1 parameter for the Adam optimizer.\")\n    parser.add_argument(\"--adam_beta2\", type=float, default=0.999, help=\"The beta2 parameter for the Adam optimizer.\")\n    parser.add_argument(\"--adam_weight_decay\", type=float, default=1e-2, help=\"Weight decay to use.\")\n    parser.add_argument(\"--adam_epsilon\", type=float, default=1e-08, help=\"Epsilon value for the Adam optimizer\")\n    parser.add_argument(\"--max_grad_norm\", default=1.0, type=float, help=\"Max gradient norm.\")\n    parser.add_argument(\"--local_rank\", type=int, default=-1, help=\"For distributed training: local_rank\")\n\n    parser.add_argument(\"--classes\", type=str, nargs=\"+\")\n    parser.add_argument(\"--img_path\", type=str)\n    parser.add_argument(\"--save_path\", type=str)\n\n    args = parser.parse_args()\n    env_local_rank = int(os.environ.get(\"LOCAL_RANK\", -1))\n    if env_local_rank != -1 and env_local_rank != args.local_rank:\n        args.local_rank = env_local_rank\n    return args \n\n\ndef merge_args(cfg, args):\n    # if args.ckpt_path is not None:\n    #     cfg.model[\"from_pretrained\"] = args.ckpt_path\n    #     if cfg.get(\"discriminator\") is not None:\n    #         cfg.discriminator[\"from_pretrained\"] = args.ckpt_path\n    #     args.ckpt_path = None\n    for k, v in vars(args).items():\n        if v is not None:\n            cfg[k] = v\n\n    return cfg\n\n\ndef read_config(config_path):\n    cfg = Config.fromfile(config_path)\n    return cfg\n\n\ndef parse_configs():\n    args = parse_args()\n    cfg = read_config(args.config)\n    cfg = merge_args(cfg, args)\n    return cfg\n\ndef str2bool(v):\n    if isinstance(v, bool):\n        return v\n    if v.lower() in (\"yes\", \"true\", \"t\", \"y\", \"1\"):\n        return True\n    elif v.lower() in (\"no\", \"false\", \"f\", \"n\", \"0\"):\n        return False\n    else:\n        raise argparse.ArgumentTypeError(\"Boolean value expected.\")\n"
  },
  {
    "path": "cogvideox_interpolation/utils/misc.py",
    "content": "import torch, time\nclass Timer:\n    def __init__(self, name, log=False):\n        self.name = name\n        self.start_time = None\n        self.end_time = None\n\n    @property\n    def elapsed_time(self):\n        return self.end_time - self.start_time\n\n    def __enter__(self):\n        torch.cuda.synchronize()\n        self.start_time = time.time()\n        return self\n\n    def __exit__(self, exc_type, exc_val, exc_tb):\n        torch.cuda.synchronize()\n        self.end_time = time.time()"
  },
  {
    "path": "configs/field_construction.yaml",
    "content": "wandb:\n  enable_wandb: False \n  project_name: \"proj\"\npipeline:\n  rgb_video_path: outputs/kitchen/rgb/video_ckpt_800.mp4\n  seg_video_path: outputs/kitchen/seg/video_ckpt_800.mp4\n  normal_video_path: outputs/kitchen/normal/video_ckpt_800.mp4\n  data_path: \"field_construction/data/kitchen\"\n  skip_video_process: False\n  skip_pose_estimate: True\n  skip_lang_feature_extraction: False\n  load_iteration: 5_000\n  selection: False\n  selected_idxs: []\n  chunk_num: 8  \n  keep_num_per_chunk: 3\n  mode: \"train\"\n\nvideo_processor:\n  img_format: \"png\"\n\nfeature_extractor:\n  type: \"open-seg\"\n  model_path: \"/home/lff/data1/cjw/langscene/model_zoo/openseg_exported_clip\"\n\npose_estimator:\n  type: \"vggt\"\n  device: \"cuda\"\n\nlseg:\n  model_path: \"model_zoo/lseg/demo_e200.ckpt\"\n  device: \"cuda\"\n\nae:\n  model_path: \"model_zoo/ae/model.safetensors\"\n  device: \"cuda\"\n\ngaussian:\n  debug_from: -100\n  detect_anomaly: False\n  test_iterations: [100, 500, 1000, 2000, 5000, 10_000, 12_000]\n  save_iterations: [100, 500, 1000, 2000, 5000, 10_000, 12_000]\n  quiet: False\n  checkpoint_iterations: [100, 500, 1000, 5000, 10_000, 12_000]\n  start_checkpoint: None\n\n  dataset:\n    sh_degree: 3\n    source_path: \"/home/lff/data1/cjw/langscene/field_construction/data/kitchen\"\n    model_path: \"/home/lff/data1/cjw/langscene/field_construction/outputs/kitchen\"\n    images: \"input\"\n    normal: \"normal\"\n    resolution: -1\n    white_background: False\n    data_device: \"cuda\" # \"cuda\" or \"cpu\"\n    eval: False\n    preload_img: True\n    ncc_scale: 1.0\n    multi_view_num: 8\n    multi_view_max_angle: 30\n    multi_view_min_dis: 0.01\n    multi_view_max_dis: 1.5\n    language_features_name: \"lang_features_dim3\"\n    \n  opt:\n    pp_optimizer: False\n    optim_pose: True\n    pose_until_iter: 2000\n    iterations: 12_000\n    max_geo_iter: 1500  \n    normal_optim: False\n\n    position_lr_init: 0.00016\n    position_lr_final: 0.0000016\n    position_lr_delay_mult: 0.01\n    position_lr_max_steps: 1000\n    feature_lr: 0.0025\n    opacity_lr: 0.05\n    language_feature_lr: 0.0050\n    instance_feature_lr: 0.0050\n    scaling_lr: 0.005\n    rotation_lr: 0.001\n    percent_dense: 0.001\n    lambda_dssim: 0.2\n    densification_interval: 100\n    opacity_reset_interval: 999_999\n    densify_from_iter: 500\n    densify_until_iter: 1200\n    # densify_from_iter: 999_999\n    # densify_until_iter: -1\n    # densify_grad_threshold: 0.0002\n    densify_grad_threshold: 0.004\n    scale_loss_weight: 100.0\n    wo_image_weight: False\n    single_view_weight: 0.10\n    single_view_weight_from_iter: 500\n    single_view_weight_end_iter: 2000\n    instance_supervision_from_iter: 12_001\n    use_virtul_cam: False\n    virtul_cam_prob: 0.5\n    use_multi_view_trim: True\n    multi_view_ncc_weight: 0.15\n    multi_view_geo_weight: 0.03\n    multi_view_weight_from_iter: 500\n    multi_view_weight_end_iter: 2000\n    multi_view_patch_size: 3\n    multi_view_sample_num: 102400\n    multi_view_pixel_noise_th: 1.0\n    wo_use_geo_occ_aware: False\n    opacity_cull_threshold: 0.05\n    # densify_abs_grad_threshold: 0.0008\n    densify_abs_grad_threshold: 0.016\n    abs_split_radii2D_threshold: 20\n    max_abs_split_points: 0\n    max_all_points: 12_000_000\n    exposure_compensation: False\n    random_background: False\n    reg3d_start: 2\n    reg3d_k: 5\n    reg3d_lambda_val: 4\n    lang_loss_start_iter: 1200\n    grouping_loss: True\n    loss_obj_3d: True\n\n  pipe:\n    convert_SHs_python: False\n    compute_cov3D_python: False\n    debug: False\n  \n  render:\n    load_iteration: 5_000\n    pose_optim_iter: 100\n    voxel_size: 0.01\n    normalized: True\n    include_features: True\n    \n  eval:\n    eval_data_path: \"\"\n    pose_optim_iter: 100"
  },
  {
    "path": "configs/test_config.py",
    "content": "# validation \nval_steps=10\nwandb=False\nrecord_time = True\n\n# autoencoder config\n# exp_name = \"AE-gpu8-bs1-channel-16\"\n# autoencoder_name = \"ae-channel-16\"\n\nexp_name = \"test\"\nautoencoder_name = \"ae-channel-3\"\n\ndataset_name = \"lvis\"\n\nlseg_weights=\"model_zoo/lseg/demo_e200.ckpt\"\n\n# loss weights\nperceptual_loss_weight = 0.1  # use vgg is not None and more than 0\nkl_loss_weight = 1e-6\n\nmixed_strategy = \"mixed_video_image\"\nmixed_image_ratio = 0.2\nuse_real_rec_loss = False\nuse_z_rec_loss = True\nuse_image_identity_loss = True"
  },
  {
    "path": "configs/unet_config_c16.py",
    "content": "# == datasets == \ndataset_path = \"/mnt/juicefs/datasets/lvis\"\njson_path = \"/mnt/juicefs/datasets/lvis/annotations/image_info_unlabeled2017.json\"\n\n#== train ==\nmixed_precision = \"no\"\nnum_train_epochs = 5\ntrain_batch_size = 4\nwandb=True\nexp_name = \"train-acc-unet-c16\"\nrecord_time = False\n\npretrained_model_ae = None\n\n# validation \nval_steps=100\ncheckpointing_steps = 50000\n\n#== model ==\nin_channels = 512\nout_channels = 512\nlatent_channels = 16\nencoder_block_out_channels=[256, 128, 64, 32, 16]\ndecoder_block_out_channels=[16, 32, 64, 128, 256]\nnum_encoder_blocks=(1, 1, 1, 1, 1)\nnum_decoder_blocks=(1, 1, 1, 1, 1)"
  },
  {
    "path": "configs/unet_config_c32.py",
    "content": "# == datasets == \ndataset_path = \"/mnt/juicefs/datasets/lvis\"\njson_path = \"/mnt/juicefs/datasets/lvis/annotations/image_info_unlabeled2017.json\"\n\n#== train ==\nmixed_precision = \"no\"\nnum_train_epochs = 5\ntrain_batch_size = 4\nwandb=True\nexp_name = \"train-acc-unet-c16\"\nrecord_time = False\n\npretrained_model_ae = None\n\n# validation \nval_steps=100\ncheckpointing_steps = 50000\n\n#== model ==\nin_channels = 512\nout_channels = 512\nlatent_channels = 32\nencoder_block_out_channels=[256, 64, 16]\ndecoder_block_out_channels=[16, 64, 256]\nnum_encoder_blocks=(1, 1, 1)\nnum_decoder_blocks=(1, 1, 1)"
  },
  {
    "path": "entry_point.py",
    "content": "import logging\nimport os\nimport random\nimport warnings\nfrom random import randint\n\nimport hydra\nimport numpy as np\nimport torch\nfrom omegaconf import DictConfig\n\nfrom field_construction.pipeline import FieldConstructionPipeline\n\ndef setup_seed(seed):\n    torch.manual_seed(seed)\n    torch.cuda.manual_seed_all(seed)\n    np.random.seed(seed)\n    random.seed(seed)\n\n\n@hydra.main(config_path=\"configs\", config_name=\"field_construction\", version_base=None)\ndef main(cfg: DictConfig):\n    logging.basicConfig(\n        level=logging.INFO,\n        format=\"%(asctime)s - %(name)s - %(levelname)s - %(message)s\",\n        handlers=[logging.StreamHandler]\n    )\n    # ignore pil debug message.\n    pil_logger = logging.getLogger(\"PIL\")\n    pil_logger.setLevel(logging.WARNING)\n    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' \n    warnings.filterwarnings(\"ignore\", category=FutureWarning)\n\n    setup_seed(42)\n    \n    pipeline = FieldConstructionPipeline(cfg)\n    if cfg.pipeline.mode == \"train\":\n        pipeline.construct_field()\n    elif cfg.pipeline.mode == \"render\":\n        pipeline.render_result()\n    elif cfg.pipeline.mode == \"eval\":\n        pipeline.eval()\n    else:\n        raise NotImplementedError\n\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "field_construction/auto_encoder.py",
    "content": "import glob\nimport os\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nfrom torch.utils.data import Dataset\n\n\nclass Autoencoder_dataset(Dataset):\n    def __init__(self, data_dir):\n        data_names = sorted(glob.glob(os.path.join(data_dir, '*.npy')))\n        data = []\n        for i in range(len(data_names)):\n            features = torch.from_numpy(np.load(data_names[i]))\n            data.append(features)\n\n        self.data = torch.cat(data, dim=0).float()\n\n    def __getitem__(self, index):\n        data = self.data[index]\n        return data\n\n    def __len__(self):\n        return self.data.shape[0] \n\n\nclass Autoencoder(nn.Module):\n    def __init__(self, encoder_hidden_dims=None, decoder_hidden_dims=None):\n        super(Autoencoder, self).__init__()\n        encoder_layers = []\n        if not encoder_hidden_dims:\n            encoder_hidden_dims = [512, 256, 128, 64, 32, 16, 3]\n        if not decoder_hidden_dims:\n            decoder_hidden_dims = [16, 32, 64, 128, 256, 512, 768]\n        for i in range(len(encoder_hidden_dims)):\n            if i == 0:\n                encoder_layers.append(nn.Linear(768, encoder_hidden_dims[i]))\n            else:\n                encoder_layers.append(torch.nn.BatchNorm1d(encoder_hidden_dims[i-1]))\n                encoder_layers.append(nn.ReLU())\n                encoder_layers.append(nn.Linear(encoder_hidden_dims[i-1], encoder_hidden_dims[i]))\n        self.encoder = nn.ModuleList(encoder_layers)\n\n        decoder_layers = []\n        for i in range(len(decoder_hidden_dims)):\n            if i == 0:\n                decoder_layers.append(nn.Linear(encoder_hidden_dims[-1], decoder_hidden_dims[i]))\n            else:\n                decoder_layers.append(nn.ReLU())\n                decoder_layers.append(nn.Linear(decoder_hidden_dims[i-1], decoder_hidden_dims[i]))\n        self.decoder = nn.ModuleList(decoder_layers)\n        print(self.encoder, self.decoder)\n    def forward(self, x):\n        for m in self.encoder:\n            x = m(x)\n        x = x / x.norm(dim=-1, keepdim=True)\n        for m in self.decoder:\n            x = m(x)\n        x = x / x.norm(dim=-1, keepdim=True)\n        return x\n\n    def encode(self, x):\n        for m in self.encoder:\n            x = m(x)\n        x = x / x.norm(dim=-1, keepdim=True)\n        return x\n\n    def decode(self, x):\n        for m in self.decoder:\n            x = m(x)\n        x = x / x.norm(dim=-1, keepdim=True)\n        return x"
  },
  {
    "path": "field_construction/extract_with_openseg.py",
    "content": "import os\nfrom argparse import ArgumentParser\n\nimport cv2\nimport numpy as np\nimport torch\nfrom tqdm import tqdm\n\n\ndef extract_with_openseg(cfg):\n    import tensorflow as tf2\n    import tensorflow._api.v2.compat.v1 as tf\n    gpus = tf.config.experimental.list_physical_devices('GPU')\n    if gpus:\n        try:\n            for gpu in gpus:\n                tf.config.experimental.set_memory_growth(gpu, True)\n        except RuntimeError as e:\n            print(e)\n\n    openseg = tf2.saved_model.load(\n        cfg.feature_extractor.model_path, \n        tags=[tf.saved_model.tag_constants.SERVING]\n    )\n    imgs_path = os.path.join(cfg.pipeline.data_path, \"input\")\n    img_names = list(\n        filter(\n            lambda x: x.endswith(\"png\") or x.endswith(\"jpg\"), os.listdir(imgs_path)\n        )\n    )\n    img_list = []\n    np_image_string_list = []\n    for img_name in img_names:\n        img_path = os.path.join(imgs_path, img_name)\n        image = cv2.imread(img_path)\n        with tf.gfile.GFile(img_path, 'rb') as f:\n            np_image_string = np.array([f.read()])\n\n        image = torch.from_numpy(image)\n        img_list.append(image)\n        np_image_string_list.append(np_image_string)\n\n    images = [img_list[i].permute(2, 0, 1)[None, ...] for i in range(len(img_list))]\n    imgs = torch.cat(images)\n    save_path = os.path.join(cfg.pipeline.data_path, \"lang_features\")\n    os.makedirs(save_path, exist_ok=True)\n    embed_size = 768\n    for i, (img, np_image_string) in enumerate(tqdm((zip(imgs, np_image_string_list)), desc=\"Extracting lang features\")):\n        text_emb = tf.zeros([1, 1, embed_size])\n        results = openseg.signatures[\"serving_default\"](\n            inp_image_bytes=tf.convert_to_tensor(np_image_string[0]),\n            inp_text_emb=text_emb\n        )\n        img_info = results['image_info']\n        crop_sz = [\n            int(img_info[0, 0] * img_info[2, 0]),\n            int(img_info[0, 1] * img_info[2, 1])\n        ]\n        image_embedding_feat = results['image_embedding_feat'][:, :crop_sz[0], :crop_sz[1]]\n        img_size = (img.shape[1], img.shape[2])\n        feat_2d = tf.cast(\n            tf.image.resize_nearest_neighbor(\n                image_embedding_feat, img_size, align_corners=True\n            )[0], dtype=tf.float16\n        ).numpy()\n        # save feat_2d\n        np.save(os.path.join(save_path, str(i+1).zfill(4)+\".npy\"), feat_2d)\n    \nif __name__ == \"__main__\":\n    arg_parser = ArgumentParser()\n    arg_parser.add_argument(\"--cfg\")\n    args = arg_parser.parse_args()\n    extract_with_openseg(args.cfg)"
  },
  {
    "path": "field_construction/gaussian_field.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use\n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport copy\nimport logging\nimport os\nimport random\nfrom random import randint\n\nimport cv2\nimport numpy as np\nimport open3d as o3d\nimport torch\nimport torch.nn.functional as F\nimport torchvision\nfrom tqdm import tqdm\n\nfrom cogvideox_interpolation.utils.colormaps import apply_pca_colormap\n\nfrom .gaussian_renderer import render\nfrom .scene import GaussianModel, Scene\nfrom .scene.app_model import AppModel\nfrom .scene.cameras import Camera\nfrom .utils.camera_utils import gen_virtul_cam\nfrom .utils.general_utils import safe_state\nfrom .utils.graphics_utils import patch_offsets, patch_warp\nfrom .utils.image_utils import psnr\nfrom .utils.loss_utils import (get_img_grad_weight, get_loss_instance_group,\n                               get_loss_semantic_group, l1_loss, lncc,\n                               loss_cls_3d, ranking_loss, ssim)\nfrom .utils.pose_utils import (get_camera_from_tensor, get_tensor_from_camera,\n                               post_pose_process, quad2rotation)\n\n\ndef post_process_mesh(mesh, cluster_to_keep=3):\n    \"\"\"\n    Post-process a mesh to filter out floaters and disconnected parts\n    \"\"\"\n    print(\"post processing the mesh to have {} clusterscluster_to_kep\".format(cluster_to_keep))\n    mesh_0 = copy.deepcopy(mesh)\n    with o3d.utility.VerbosityContextManager(o3d.utility.VerbosityLevel.Debug) as cm:\n        triangle_clusters, cluster_n_triangles, cluster_area = (mesh_0.cluster_connected_triangles())\n\n    triangle_clusters = np.asarray(triangle_clusters)\n    cluster_n_triangles = np.asarray(cluster_n_triangles)\n    cluster_area = np.asarray(cluster_area)\n    n_cluster = np.sort(cluster_n_triangles.copy())[-cluster_to_keep]\n    n_cluster = max(n_cluster, 50)  # filter meshes smaller than 50\n    triangles_to_remove = cluster_n_triangles[triangle_clusters] < n_cluster\n    mesh_0.remove_triangles_by_mask(triangles_to_remove)\n    mesh_0.remove_unreferenced_vertices()\n    mesh_0.remove_degenerate_triangles()\n    print(\"num vertices raw {}\".format(len(mesh.vertices)))\n    print(\"num vertices post {}\".format(len(mesh_0.vertices)))\n    return mesh_0\n\ndef permuted_pca(image):\n    return apply_pca_colormap(image.permute(0, 2, 3, 1)).permute(0, 3, 1, 2)\n\ndef save_pose(path, quat_pose, train_cams):\n    # Get camera IDs and convert quaternion poses to camera matrices\n    camera_ids = [cam.colmap_id for cam in train_cams]\n    world_to_camera = [get_camera_from_tensor(quat) for quat in quat_pose]\n    \n    # Reorder poses according to colmap IDs\n    colmap_poses = []\n    for i in range(len(camera_ids)):\n        idx = camera_ids.index(i + 1)  # Find position of camera i+1\n        pose = world_to_camera[idx]\n        colmap_poses.append(pose)\n    \n    # Convert to numpy array and save\n    colmap_poses = torch.stack(colmap_poses).detach().cpu().numpy()\n    np.save(path, colmap_poses)\n\n\ndef load_and_prepare_confidence(confidence_path, device='cuda', scale=(0.1, 1.0)):\n    \"\"\"\n    Loads, normalizes, inverts, and scales confidence values to obtain learning rate modifiers.\n    \n    Args:\n        confidence_path (str): Path to the .npy confidence file.\n        device (str): Device to load the tensor onto.\n        scale (tuple): Desired range for the learning rate modifiers.\n    \n    Returns:\n        torch.Tensor: Learning rate modifiers.\n    \"\"\"\n    # Load and normalize\n    confidence_np = np.load(confidence_path)\n    confidence_tensor = torch.from_numpy(confidence_np).float().to(device)\n    normalized_confidence = torch.sigmoid(confidence_tensor)\n\n    # Invert confidence and scale to desired range\n    inverted_confidence = 1.0 - normalized_confidence\n    min_scale, max_scale = scale\n    lr_modifiers = inverted_confidence * (max_scale - min_scale) + min_scale\n    \n    return lr_modifiers\n\nclass GaussianField():\n    def __init__(self, cfg):\n        self.cfg = cfg\n\n    def train(self):\n        cfg = self.cfg\n        dataset = cfg.gaussian.dataset\n        opt = cfg.gaussian.opt\n        pipe = cfg.gaussian.pipe\n        device = cfg.gaussian.dataset.data_device\n\n        self.gaussians = GaussianModel(cfg.gaussian.dataset.sh_degree)\n        self.scene = Scene(cfg.gaussian.dataset, self.gaussians)\n        self.app_model = AppModel()\n        self.app_model.train().cuda()\n\n        logging.info(\"Optimizing \" + dataset.model_path)\n        safe_state(cfg.gaussian.quiet)\n        \n        if opt.pp_optimizer:\n            confidence_path = os.path.join(dataset.source_path, f\"sparse/0\", \"confidence_dsp.npy\")\n            try:\n                confidence_lr = load_and_prepare_confidence(confidence_path, device='cuda', scale=(2, 100))\n                self.gaussians.training_setup_pp(opt, confidence_lr, device)                          \n            except:\n                logging.warning(\"can not load confidence. \")\n                cfg.opt.pp_optimizer = False\n                self.gaussians.training_setup(opt, device)\n        else:\n            self.gaussians.training_setup(opt, device)\n        \n        train_cams_init = self.scene.getTrainCameras().copy()\n        for save_iter in cfg.gaussian.save_iterations:\n            os.makedirs(self.scene.model_path + f'/pose/iter_{save_iter}', exist_ok=True)\n            save_pose(self.scene.model_path + f'/pose/iter_{save_iter}/pose_org.npy', self.gaussians.P, train_cams_init)\n        \n        first_iter = 0\n        if cfg.gaussian.start_checkpoint != \"None\":\n            model_params, first_iter = torch.load(cfg.gaussian.start_checkpoint)\n            self.gaussians.restore(model_params, opt)\n            self.app_model.load_weights(self.scene.model_path)\n        \n        bg_color = [1, 1, 1] if dataset.white_background else [0, 0, 0]\n        background = torch.tensor(bg_color, dtype=torch.float32, device=device)\n\n        iter_start = torch.cuda.Event(enable_timing=True)\n        iter_end = torch.cuda.Event(enable_timing=True)\n\n        viewpoint_stack = None\n        ema_loss_for_log = 0.0\n        ema_single_view_for_log = 0.0\n        ema_multi_view_geo_for_log = 0.0\n        ema_multi_view_pho_for_log = 0.0\n        ema_language_loss_for_log = 0.0\n        ema_grouping_loss = 0.0\n        ema_loss_obj_3d = 0.0\n        ema_ins_grouping_loss = 0.0\n        ema_ins_obj_3d_loss = 0.0\n        normal_loss, geo_loss, ncc_loss = None, None, None\n        language_loss = None\n        grouping_loss = None\n        include_feature = True\n        progress_bar = tqdm(range(first_iter, opt.iterations), desc=\"Training progress\")\n        first_iter += 1\n        debug_path = os.path.join(self.scene.model_path, \"debug\")\n        os.makedirs(debug_path, exist_ok=True)\n\n        camera_list = self.scene.getTrainCameras().copy()\n        last_cam_id = -1\n\n        self.gaussians.change_reqiures_grad(\"semantic\", iteration=first_iter, quiet=False)\n\n        if not opt.optim_pose:\n            self.gaussians.P.requires_grad_(False)\n\n        for iteration in range(first_iter, opt.iterations + 1):\n            iter_start.record()\n\n            self.gaussians.update_learning_rate(iteration)\n\n            if iteration % 100 == 0:\n                self.gaussians.oneupSHdegree()\n            \n            if not viewpoint_stack:\n                viewpoint_stack = camera_list.copy()\n\n            # update camera lists: \n            for cam_idx, cam in enumerate(camera_list):\n                if cam.uid == last_cam_id:\n                    updated_pose = self.gaussians.get_RT(self.gaussians.index_mapping[last_cam_id]).clone().detach()\n                    extrinsics = get_camera_from_tensor(updated_pose)\n                    camera_list[cam_idx].R = extrinsics[:3, :3].T\n                    camera_list[cam_idx].T = extrinsics[:3, 3]\n                    break\n            \n            viewpoint_cam: Camera = viewpoint_stack.pop(randint(0, len(viewpoint_stack) - 1))\n            last_cam_id = viewpoint_cam.uid\n            pose = self.gaussians.get_RT(self.gaussians.index_mapping[last_cam_id]) # quad t\n\n            if (iteration - 1) == cfg.gaussian.debug_from:\n                pipe.debug = True\n            \n            bg = torch.rand((3), device=\"cuda\") if opt.random_background else background\n\n            if not opt.optim_pose:\n                render_pkg = render(viewpoint_cam, self.gaussians, pipe, bg, app_model=self.app_model,\n                                    return_depth_normal=iteration > opt.single_view_weight_from_iter,\n                                    include_feature=include_feature)\n            else:\n                render_pkg = render(viewpoint_cam, self.gaussians, pipe, bg, app_model=self.app_model,\n                                    return_depth_normal=iteration > opt.single_view_weight_from_iter,\n                                    include_feature=include_feature, camera_pose=pose)\n            \n            image, viewspace_point_tensor, visibility_filter, radii, language_feature, instance_feature = \\\n                render_pkg[\"render\"], render_pkg[\"viewspace_points\"], render_pkg[\"visibility_filter\"], render_pkg[\"radii\"], \\\n                    render_pkg[\"language_feature\"], render_pkg[\"instance_feature\"]\n                \n\n            overall_loss = 0\n            image_loss = None\n            obj_3d_loss = None\n            grouping_loss = None\n            ins_obj_3d_loss = None\n            ins_grouping_loss = None\n\n            if iteration == opt.max_geo_iter:\n                self.gaussians.change_reqiures_grad(\"semantic_only\", iteration=iteration, quiet=False)\n\n            if iteration < opt.max_geo_iter:\n                gt_image, gt_image_gray = viewpoint_cam.get_image()\n                ssim_loss = (1.0 - ssim(image, gt_image))\n                if 'app_image' in render_pkg and ssim_loss < 0.5:\n                    app_image = render_pkg['app_image']\n                    Ll1 = l1_loss(app_image, gt_image)\n                else:\n                    Ll1 = l1_loss(image, gt_image)\n            \n                image_loss = (1.0 - opt.lambda_dssim) * Ll1 + opt.lambda_dssim * ssim_loss\n\n                overall_loss = overall_loss + image_loss\n\n                # scale loss\n                if visibility_filter.sum() > 0:\n                    scale = self.gaussians.get_scaling[visibility_filter]\n                    sorted_scale, _ = torch.sort(scale, dim=-1)\n                    min_scale_loss = sorted_scale[..., 0]\n                    overall_loss = overall_loss + opt.scale_loss_weight * min_scale_loss.mean()\n                \n                # single view loss:\n                if opt.single_view_weight_from_iter < iteration < opt.single_view_weight_end_iter:\n                    weight = opt.single_view_weight\n                    normal = render_pkg[\"rendered_normal\"]\n                    depth_normal = render_pkg[\"depth_normal\"]\n\n                    image_weight = (1.0 - get_img_grad_weight(gt_image))\n                    image_weight = (image_weight).clamp(0, 1).detach() ** 2\n\n                    if opt.normal_optim:\n                        render_normal = (normal.permute(1, 2, 0) @ (viewpoint_cam.world_view_transform[:3, :3].T)).permute(2, 0, 1)\n                        rendered_depth_normal = (depth_normal.permute(1, 2, 0) @ (viewpoint_cam.world_view_transform[:3, :3].T)).permute(2, 0, 1)\n                        normal_gt, normal_mask = viewpoint_cam.get_normal()\n                        prior_normal = normal_gt\n                        prior_normal_mask = normal_mask[0]\n                        normal_prior_error = (1 - F.cosine_similarity(prior_normal, render_normal, dim=0)) + \\\n                            (1 - F.cosine_similarity(prior_normal, rendered_depth_normal, dim=0))\n                        normal_prior_error = ranking_loss(normal_prior_error[prior_normal_mask], \n                                                        penalize_ratio=1.0, type=\"mean\")\n                        normal_loss = weight * normal_prior_error\n                    else:\n                        if not opt.wo_image_weight:\n                            normal_loss = weight * (image_weight * (((depth_normal - normal)).abs().sum(0))).mean()\n                        else:\n                            normal_loss = weight * (((depth_normal - normal)).abs().sum(0)).mean()\n                    overall_loss = overall_loss + normal_loss\n                \n                # multi-view loss\n                if opt.multi_view_weight_from_iter < iteration < opt.multi_view_weight_end_iter:\n                    nearest_cam = None if len(viewpoint_cam.nearest_id) == 0 else camera_list[\n                        random.sample(viewpoint_cam.nearest_id, 1)[0]]\n                    use_virtul_cam = False\n                    if opt.use_virtul_cam and (np.random.random() < opt.virtul_cam_prob or nearest_cam is None):\n                        nearest_cam = gen_virtul_cam(viewpoint_cam, trans_noise=dataset.multi_view_max_dis,\n                                                    deg_noise=dataset.multi_view_max_angle, device=device)\n                        use_virtul_cam = True\n                    if nearest_cam is not None:\n                        patch_size = opt.multi_view_patch_size\n                        sample_num = opt.multi_view_sample_num\n                        pixel_noise_th = opt.multi_view_pixel_noise_th\n                        total_patch_size = (patch_size * 2 + 1) ** 2\n                        ncc_weight = opt.multi_view_ncc_weight\n                        geo_weight = opt.multi_view_geo_weight\n                        H, W = render_pkg['plane_depth'].squeeze().shape\n                        ix, iy = torch.meshgrid(\n                            torch.arange(W), torch.arange(H), indexing='xy')\n                        pixels = torch.stack([ix, iy], dim=-1).float().to(render_pkg['plane_depth'].device)\n                        if not use_virtul_cam:\n                            nearest_pose = self.gaussians.get_RT(self.gaussians.index_mapping[nearest_cam.uid]) # quad t\n                            if not opt.optim_pose:\n                                nearest_render_pkg = render(nearest_cam, self.gaussians, pipe, bg, app_model=self.app_model,\n                                                            return_plane=True, return_depth_normal=False)\n                            else:\n                                nearest_render_pkg = render(nearest_cam, self.gaussians, pipe, bg, app_model=self.app_model,\n                                                            return_plane=True, return_depth_normal=False, camera_pose=nearest_pose.clone().detach())\n                        else:\n                            nearest_render_pkg = render(nearest_cam, self.gaussians, pipe, bg, app_model=self.app_model,\n                                                        return_plane=True, return_depth_normal=False)\n                        pts = self.gaussians.get_points_from_depth(viewpoint_cam, render_pkg['plane_depth'])\n                        pts_in_nearest_cam = pts @ nearest_cam.world_view_transform[:3,\n                                                :3] + nearest_cam.world_view_transform[3, :3]\n                        map_z, d_mask = self.gaussians.get_points_depth_in_depth_map(nearest_cam,\n                                                                                nearest_render_pkg['plane_depth'],\n                                                                                pts_in_nearest_cam)\n\n                        pts_in_nearest_cam = pts_in_nearest_cam / (pts_in_nearest_cam[:, 2:3])\n                        pts_in_nearest_cam = pts_in_nearest_cam * map_z.squeeze()[..., None]\n                        R = torch.tensor(nearest_cam.R).float().cuda()\n                        T = torch.tensor(nearest_cam.T).float().cuda()\n                        pts_ = (pts_in_nearest_cam - T) @ R.transpose(-1, -2)\n                        pts_in_view_cam = pts_ @ viewpoint_cam.world_view_transform[:3,\n                                                :3] + viewpoint_cam.world_view_transform[3, :3]\n                        pts_projections = torch.stack(\n                            [pts_in_view_cam[:, 0] * viewpoint_cam.Fx / pts_in_view_cam[:, 2] + viewpoint_cam.Cx,\n                            pts_in_view_cam[:, 1] * viewpoint_cam.Fy / pts_in_view_cam[:, 2] + viewpoint_cam.Cy],\n                            -1).float()\n                        pixel_noise = torch.norm(pts_projections - pixels.reshape(*pts_projections.shape), dim=-1)\n                        if not opt.wo_use_geo_occ_aware:\n                            d_mask = d_mask & (pixel_noise < pixel_noise_th)\n                            weights = (1.0 / torch.exp(pixel_noise)).detach()\n                            weights[~d_mask] = 0\n                        else:\n                            d_mask = d_mask\n                            weights = torch.ones_like(pixel_noise)\n                            weights[~d_mask] = 0\n                        if iteration % 200 == 0:\n                            gt_img_show = ((gt_image).permute(1, 2, 0).clamp(0, 1)[:, :,\n                                        [2, 1, 0]] * 255).detach().cpu().numpy().astype(np.uint8)\n                            if 'app_image' in render_pkg:\n                                img_show = ((render_pkg['app_image']).permute(1, 2, 0).clamp(0, 1)[:, :,\n                                            [2, 1, 0]] * 255).detach().cpu().numpy().astype(np.uint8)\n                            else:\n                                img_show = ((image).permute(1, 2, 0).clamp(0, 1)[:, :,\n                                            [2, 1, 0]] * 255).detach().cpu().numpy().astype(np.uint8)\n                            normal_show = (((normal + 1.0) * 0.5).permute(1, 2, 0).clamp(0,1) * 255).detach().cpu().numpy().astype(np.uint8)\n                            depth_normal_show = (((depth_normal + 1.0) * 0.5).permute(1, 2, 0).clamp(0,1) * 255).detach().cpu().numpy().astype(np.uint8)\n\n                            if not opt.normal_optim:\n                                normal_gt = torch.zeros_like(normal)\n                \n                            normal_gt_show = (normal_gt.permute(1, 2, 0) @ (viewpoint_cam.world_view_transform[:3, :3])).permute(2, 0, 1)\n                            normal_gt_show = (((normal_gt_show + 1.0) * 0.5).permute(1, 2, 0).clamp(0, 1) * 255).detach().cpu().numpy().astype(np.uint8)\n                            d_mask_show = (weights.float() * 255).detach().cpu().numpy().astype(np.uint8).reshape(H, W)\n                            d_mask_show_color = cv2.applyColorMap(d_mask_show, cv2.COLORMAP_JET)\n                            depth = render_pkg['plane_depth'].squeeze().detach().cpu().numpy()\n                            depth_i = (depth - depth.min()) / (depth.max() - depth.min() + 1e-20)\n                            depth_i = (depth_i * 255).clip(0, 255).astype(np.uint8)\n                            depth_color = cv2.applyColorMap(depth_i, cv2.COLORMAP_JET)\n                            distance = render_pkg['rendered_distance'].squeeze().detach().cpu().numpy()\n                            distance_i = (distance - distance.min()) / (distance.max() - distance.min() + 1e-20)\n                            distance_i = (distance_i * 255).clip(0, 255).astype(np.uint8)\n                            distance_color = cv2.applyColorMap(distance_i, cv2.COLORMAP_JET)\n                            image_weight = image_weight.detach().cpu().numpy()\n                            image_weight = (image_weight * 255).clip(0, 255).astype(np.uint8)\n                            image_weight_color = cv2.applyColorMap(image_weight, cv2.COLORMAP_JET)\n                            row0 = np.concatenate([gt_img_show, img_show, normal_show, distance_color], axis=1)\n                            row1 = np.concatenate([d_mask_show_color, depth_color, depth_normal_show, normal_gt_show],\n                                                axis=1)\n                            image_to_show = np.concatenate([row0, row1], axis=0)\n                            cv2.imwrite(\n                                os.path.join(debug_path, \"%05d\" % iteration + \"_\" + viewpoint_cam.image_name + \".jpg\"),\n                                image_to_show)\n\n                        if d_mask.sum() > 0:\n                            geo_loss = geo_weight * ((weights * pixel_noise)[d_mask]).mean()\n                            overall_loss += geo_loss\n                            if use_virtul_cam is False:\n                                with torch.no_grad():\n                                    # sample mask\n                                    d_mask = d_mask.reshape(-1)\n                                    valid_indices = torch.arange(d_mask.shape[0], device=d_mask.device)[d_mask]\n                                    if d_mask.sum() > sample_num:\n                                        index = np.random.choice(d_mask.sum().cpu().numpy(), sample_num, replace=False)\n                                        valid_indices = valid_indices[index]\n\n                                    weights = weights.reshape(-1)[valid_indices]\n                                    # sample ref frame patch\n                                    pixels = pixels.reshape(-1, 2)[valid_indices]\n                                    offsets = patch_offsets(patch_size, pixels.device)\n                                    ori_pixels_patch = pixels.reshape(-1, 1, 2) / viewpoint_cam.ncc_scale + offsets.float()\n\n                                    H, W = gt_image_gray.squeeze().shape\n                                    pixels_patch = ori_pixels_patch.clone()\n                                    pixels_patch[:, :, 0] = 2 * pixels_patch[:, :, 0] / (W - 1) - 1.0\n                                    pixels_patch[:, :, 1] = 2 * pixels_patch[:, :, 1] / (H - 1) - 1.0\n                                    ref_gray_val = F.grid_sample(gt_image_gray.unsqueeze(1), pixels_patch.view(1, -1, 1, 2),\n                                                                align_corners=True)\n                                    ref_gray_val = ref_gray_val.reshape(-1, total_patch_size)\n\n                                    ref_to_neareast_r = nearest_cam.world_view_transform[:3, :3].transpose(-1,\n                                                                                                        -2) @ viewpoint_cam.world_view_transform[\n                                                                                                                :3, :3]\n                                    ref_to_neareast_t = -ref_to_neareast_r @ viewpoint_cam.world_view_transform[3,\n                                                                            :3] + nearest_cam.world_view_transform[3, :3]\n\n                                # compute Homography\n                                ref_local_n = render_pkg[\"rendered_normal\"].permute(1, 2, 0)\n                                ref_local_n = ref_local_n.reshape(-1, 3)[valid_indices]\n                                ref_local_d = render_pkg['rendered_distance'].squeeze()\n                                ref_local_d = ref_local_d.reshape(-1)[valid_indices]\n                                H_ref_to_neareast = ref_to_neareast_r[None] - \\\n                                                    torch.matmul(\n                                                        ref_to_neareast_t[None, :, None].expand(ref_local_d.shape[0], 3, 1),\n                                                        ref_local_n[:, :, None].expand(ref_local_d.shape[0], 3, 1).permute(\n                                                            0, 2, 1)) / ref_local_d[..., None, None]\n                                H_ref_to_neareast = torch.matmul(\n                                    nearest_cam.get_k(nearest_cam.ncc_scale)[None].expand(ref_local_d.shape[0], 3, 3),\n                                    H_ref_to_neareast)\n                                H_ref_to_neareast = H_ref_to_neareast @ viewpoint_cam.get_inv_k(viewpoint_cam.ncc_scale)\n\n                                # compute neareast frame patch\n                                grid = patch_warp(H_ref_to_neareast.reshape(-1, 3, 3), ori_pixels_patch)\n                                grid[:, :, 0] = 2 * grid[:, :, 0] / (W - 1) - 1.0\n                                grid[:, :, 1] = 2 * grid[:, :, 1] / (H - 1) - 1.0\n                                _, nearest_image_gray = nearest_cam.get_image()\n                                sampled_gray_val = F.grid_sample(nearest_image_gray[None], grid.reshape(1, -1, 1, 2),\n                                                                align_corners=True)\n                                sampled_gray_val = sampled_gray_val.reshape(-1, total_patch_size)\n\n                                # compute loss\n                                ncc, ncc_mask = lncc(ref_gray_val, sampled_gray_val)\n                                mask = ncc_mask.reshape(-1)\n                                ncc = ncc.reshape(-1) * weights\n                                ncc = ncc[mask].squeeze()\n\n                                if mask.sum() > 0:\n                                    ncc_loss = ncc_weight * ncc.mean()\n                                    overall_loss = overall_loss + ncc_loss\n\n            if opt.lang_loss_start_iter <= iteration < opt.instance_supervision_from_iter:\n                # language feature loss\n                lf_path = os.path.join(dataset.source_path, dataset.language_features_name)\n                gt_language_feature, language_feature_mask, gt_seg = viewpoint_cam.get_language_feature(lf_path)\n                language_loss = l1_loss(language_feature * language_feature_mask,\n                                        gt_language_feature * language_feature_mask)\n                \n                overall_loss = overall_loss + language_loss\n\n                language_feature_mask = language_feature_mask.reshape(-1)\n                if opt.grouping_loss:\n                    grouping_loss = get_loss_semantic_group(gt_seg.reshape(-1)[language_feature_mask],\n                                                            language_feature.permute(1, 2, 0).reshape(-1, 3)[\n                                                            language_feature_mask])\n                    overall_loss = overall_loss + grouping_loss\n                if opt.loss_obj_3d:\n                    obj_3d_loss = loss_cls_3d(self.gaussians._xyz.detach().squeeze(),\n                                            self.gaussians._language_feature.squeeze(), opt.reg3d_k,\n                                            opt.reg3d_lambda_val, 2000000, 800)\n                    overall_loss += obj_3d_loss\n\n            elif iteration >= opt.instance_supervision_from_iter:\n                # change the grad mode and copy the semantic featuers into instance-level\n                if iteration == opt.instance_supervision_from_iter:\n                    self.gaussians._instance_feature.data.copy_(self.gaussians._language_feature.detach().clone())\n                    self.gaussians.change_reqiures_grad(\"instance\", iteration=iteration, quiet=False)\n                _, language_feature_mask, gt_seg = viewpoint_cam.get_language_feature(lf_path)\n                language_feature_mask = language_feature_mask.reshape(-1)\n                # supervise the instance features\n                if opt.grouping_loss:\n                    ins_grouping_loss = get_loss_instance_group(gt_seg.reshape(-1)[language_feature_mask],\n                                                                instance_feature.permute(1, 2, 0).reshape(-1, 3)[\n                                                                    language_feature_mask],\n                                                                language_feature.permute(1, 2, 0).reshape(-1, 3)[\n                                                                    language_feature_mask])\n                    overall_loss = overall_loss + ins_grouping_loss\n                if opt.loss_obj_3d:\n                    ins_obj_3d_loss = loss_cls_3d(self.gaussians._xyz.detach().squeeze(), self.gaussians._instance_feature.squeeze(),\n                                                opt.reg3d_k, opt.reg3d_lambda_val, 2000000, 800)\n                    overall_loss += ins_obj_3d_loss\n\n            overall_loss.backward()\n            iter_end.record()\n\n            with torch.no_grad():\n                ema_loss_for_log = 0.4 * image_loss.item() + 0.6 * ema_loss_for_log if image_loss is not None else 0.0 + 0.6 * ema_loss_for_log\n                ema_single_view_for_log = 0.4 * normal_loss.item() if normal_loss is not None else 0.0 + 0.6 * ema_single_view_for_log\n                ema_multi_view_geo_for_log = 0.4 * geo_loss.item() if geo_loss is not None else 0.0 + 0.6 * ema_multi_view_geo_for_log\n                ema_multi_view_pho_for_log = 0.4 * ncc_loss.item() if ncc_loss is not None else 0.0 + 0.6 * ema_multi_view_pho_for_log\n                ema_language_loss_for_log = 0.4 * language_loss.item() if language_loss is not None else 0.0 + 0.6 * ema_language_loss_for_log\n                ema_grouping_loss = 0.4 * grouping_loss.item() if grouping_loss is not None else 0.0 + 0.6 * ema_grouping_loss\n                ema_loss_obj_3d = 0.4 * obj_3d_loss.item() if obj_3d_loss is not None else 0.0 + 0.6 * ema_loss_obj_3d\n\n                ema_ins_obj_3d_loss = 0.4 * ins_obj_3d_loss.item() if ins_obj_3d_loss is not None else 0.0 + 0.6 * ema_ins_obj_3d_loss\n                ema_ins_grouping_loss = 0.4 * ins_grouping_loss.item() if ins_grouping_loss is not None else 0.0 + 0.6 * ema_ins_grouping_loss\n                if iteration % 10 == 0:\n                    loss_dict = {\n                        \"Loss\": f\"{ema_loss_for_log:.{5}f}\",\n                        \"Lang\": f\"{ema_language_loss_for_log:.{5}f}\",\n                        \"Points\": f\"{len(self.gaussians.get_xyz)}\",\n                        \"gp\": f\"{ema_grouping_loss:.{5}f}\",\n                        \"3d\": f\"{ema_loss_obj_3d:.{5}f}\",\n                        \"Ins\": f\"{ema_ins_grouping_loss:.{5}f}\",\n                    }\n                    progress_bar.set_postfix(loss_dict)\n                    progress_bar.update(10)\n                if iteration == opt.iterations:\n                    progress_bar.close()\n                self.training_report(iteration, camera_list, l1_loss, render, (pipe, background))\n                if (iteration in cfg.gaussian.save_iterations):\n                    print(\"\\n[ITER {}] Saving Gaussians\".format(iteration))\n                    self.scene.save(iteration, include_feature=include_feature)\n                    save_pose(self.scene.model_path + f'/pose/iter_{iteration}/pose_optimized.npy', self.gaussians.P, train_cams_init)\n\n                # Densification\n                if iteration < min(opt.max_geo_iter, opt.densify_until_iter):\n                    # Keep track of max radii in image-space for pruning\n                    mask = (render_pkg[\"out_observe\"] > 0) & visibility_filter\n                    self.gaussians.max_radii2D[mask] = torch.max(self.gaussians.max_radii2D[mask], radii[mask])\n                    viewspace_point_tensor_abs = render_pkg[\"viewspace_points_abs\"]\n                    self.gaussians.add_densification_stats(viewspace_point_tensor, viewspace_point_tensor_abs, visibility_filter)\n\n                if opt.densify_from_iter < iteration < min(opt.max_geo_iter, opt.densify_until_iter) and iteration % opt.densification_interval == 0:\n                    logging.info(\"densifying and pruning...\")\n                    size_threshold = 20 if iteration > opt.opacity_reset_interval else None\n                    self.gaussians.densify_and_prune(opt.densify_grad_threshold, opt.densify_abs_grad_threshold,\n                                                opt.opacity_cull_threshold, self.scene.cameras_extent, size_threshold)\n                \n                if iteration % opt.opacity_reset_interval == 0 or (dataset.white_background and iteration == opt.densify_from_iter):\n                    self.gaussians.reset_opacity()            \n\n                if iteration < opt.iterations:\n                    self.gaussians.optimizer.step()\n                    self.gaussians.cam_optimizer.step()\n                    self.app_model.optimizer.step()\n                    self.gaussians.optimizer.zero_grad(set_to_none=True)\n                    self.gaussians.cam_optimizer.zero_grad(set_to_none=True)\n                    self.app_model.optimizer.zero_grad(set_to_none=True)\n                    \n                if (iteration in cfg.gaussian.checkpoint_iterations):\n                    print(\"\\n[ITER {}] Saving Checkpoint\".format(iteration))\n                    torch.save((self.gaussians.capture(include_feature=include_feature), iteration),\n                            self.scene.model_path + \"/chkpnt\" + str(iteration) + \".pth\")\n                    self.app_model.save_weights(self.scene.model_path, iteration)\n\n        self.app_model.save_weights(self.scene.model_path, opt.iterations)\n        torch.cuda.empty_cache()\n        # move camera poses to target path.       \n        max_save_iter = max(cfg.gaussian.save_iterations)\n        orig_path = self.scene.model_path + f'/pose/iter_{max_save_iter}/pose_optimized.npy'\n        camera_path = os.path.join(cfg.pipeline.data_path, \"camera\")\n        eg_file = os.listdir(camera_path)[0]\n        logging.info(\"Post processing pose & move to data path...\")\n        post_pose_process(orig_path, os.path.join(camera_path, eg_file), os.path.join(cfg.pipeline.data_path, \"render_camera\"))\n\n\n    def training_report(self, iteration, camera_list, l1_loss, renderFunc, renderArgs):\n        # Report test and samples of training set\n        # do not use the optimized poses. \n        if iteration in self.cfg.gaussian.test_iterations:\n            torch.cuda.empty_cache()\n            validation_configs = ({'name': 'test', 'cameras': camera_list},\n                                {'name': 'train',\n                                'cameras': [self.scene.getTrainCameras()[idx % len(self.scene.getTrainCameras())] for idx in\n                                            range(5, 30, 5)]})\n\n            for config in validation_configs:\n                if config['cameras'] and len(config['cameras']) > 0:\n                    l1_test = 0.0\n                    psnr_test = 0.0\n                    for idx, viewpoint in enumerate(config['cameras']):\n                        if self.cfg.gaussian.opt.optim_pose:\n                            camera_pose = get_tensor_from_camera(viewpoint.world_view_transform.transpose(0, 1))\n                            out = renderFunc(viewpoint, self.scene.gaussians, *renderArgs, app_model=self.app_model, camera_pose=camera_pose)\n                        else:\n                            out = renderFunc(viewpoint, self.scene.gaussians, *renderArgs, app_model=self.app_model)\n                        image = out[\"render\"]\n                        if 'app_image' in out:\n                            image = out['app_image']\n                        image = torch.clamp(image, 0.0, 1.0)\n                        gt_image, _ = viewpoint.get_image()\n                        gt_image = torch.clamp(gt_image.to(\"cuda\"), 0.0, 1.0)\n                        l1_test += l1_loss(image, gt_image).mean().double()\n                        psnr_test += psnr(image, gt_image).mean().double()\n                        img_show = ((image).permute(1, 2, 0).clamp(0, 1)[:, :,\n                                    [2, 1, 0]] * 255).detach().cpu().numpy().astype(np.uint8)\n                        img_gt_show = ((gt_image).permute(1, 2, 0).clamp(0, 1)[:, :,\n                                    [2, 1, 0]] * 255).detach().cpu().numpy().astype(np.uint8)\n                        img_tosave = np.concatenate([img_show, img_gt_show], axis=1)\n                        valid_path = os.path.join(self.cfg.gaussian.dataset.model_path, \"valid\")\n                        os.makedirs(valid_path, exist_ok=True)\n                        cv2.imwrite(os.path.join(valid_path, f\"{iteration}_{viewpoint.uid}.png\"), img_tosave)\n\n                    psnr_test /= len(config['cameras'])\n                    l1_test /= len(config['cameras'])\n                    logging.info(\"\\n[ITER {}] Evaluating {}: L1 {} PSNR {}\".format(iteration, config['name'], l1_test, psnr_test))\n            torch.cuda.empty_cache()\n    \n    \n    def render(self):\n        cfg = self.cfg\n        dataset = cfg.gaussian.dataset\n        pipe = cfg.gaussian.pipe\n        device = cfg.gaussian.dataset.data_device\n        render_cfg = cfg.gaussian.render\n        opt = cfg.gaussian.opt\n\n        logging.info(\"Rendering \" + dataset.model_path)\n        safe_state(cfg.gaussian.quiet)\n\n        voxel_size = 0.01\n        volume = o3d.pipelines.integration.ScalableTSDFVolume(\n            voxel_length=voxel_size,\n            sdf_trunc=4.0 * voxel_size,\n            color_type=o3d.pipelines.integration.TSDFVolumeColorType.RGB8\n        )\n        volume_feature = o3d.pipelines.integration.ScalableTSDFVolume(\n            voxel_length=voxel_size,\n            sdf_trunc=4.0 * voxel_size,\n            color_type=o3d.pipelines.integration.TSDFVolumeColorType.RGB8\n        )\n\n        with torch.no_grad():\n            self.gaussians = GaussianModel(cfg.gaussian.dataset.sh_degree)\n            self.scene = Scene(cfg.gaussian.dataset, self.gaussians, load_iteration=cfg.pipeline.load_iteration, shuffle=False)\n            self.app_model = AppModel()\n\n            self.scene.loaded_iter = None\n            bg_color = [1, 1, 1] if dataset.white_background else [0, 0, 0]\n            background = torch.tensor(bg_color, dtype=torch.float32, device=device)\n            \n            render_path = os.path.join(dataset.model_path, \"test\", \"renders_rgb\")\n            render_depth_path = os.path.join(dataset.model_path, \"test\", \"renders_depth\")\n            render_depth_npy_path = os.path.join(dataset.model_path, \"test\", \"renders_depth_npy\")\n            render_normal_path = os.path.join(dataset.model_path, \"test\", \"renders_normal\")\n\n            os.makedirs(render_path, exist_ok=True)\n            os.makedirs(render_depth_path, exist_ok=True)\n            os.makedirs(render_depth_npy_path, exist_ok=True)\n            os.makedirs(render_normal_path, exist_ok=True)\n            depths_tsdf_fusion = []\n\n            all_language_feature = []\n            all_gt_language_feature = []\n            all_instance_feature = []\n            for idx, view in enumerate(tqdm(self.scene.getTrainCameras(), desc=\"Rendering progress\")):\n                camera_pose = get_tensor_from_camera(view.world_view_transform.transpose(0, 1))\n                gt, _ = view.get_image()\n                if not opt.optim_pose:\n                    out = render(view, self.gaussians, pipe, background, app_model=None)\n                else:\n                    out = render(view, self.gaussians, pipe, background, app_model=None, camera_pose=camera_pose)\n\n                rendering = out[\"render\"].clamp(0.0, 1.0)\n                _, H, W = rendering.shape\n\n                depth = out[\"plane_depth\"].squeeze()\n                depth_tsdf = depth.clone()\n\n                depth = depth.detach().cpu().numpy()\n                depth_i = (depth - depth.min()) / (depth.max() - depth.min() + 1e-20)\n                depth_i = (depth_i * 255).clip(0, 255).astype(np.uint8)\n                depth_color = cv2.applyColorMap(depth_i, cv2.COLORMAP_JET)\n\n                normal = out[\"rendered_normal\"].permute(1, 2, 0)\n                normal = normal @ view.world_view_transform[:3, :3]\n                normal = normal / (normal.norm(dim=-1, keepdim=True) + 1.0e-8)\n\n                # normal = normal.detach().cpu().numpy()\n                # normal = ((normal + 1) * 127.5).astype(np.uint8).clip(0, 255)\n                normal = normal.detach().cpu().numpy()[:, :, ::-1]\n                normal = ((1-normal) * 127.5).astype(np.uint8).clip(0, 255)\n\n                language_feature = out[\"language_feature\"]\n                instance_feature = out[\"instance_feature\"]\n                all_language_feature.append(language_feature)\n                all_instance_feature.append(instance_feature)\n\n                lf_path = os.path.join(dataset.source_path, dataset.language_features_name)\n                if os.path.exists(lf_path):\n                    gt_language, _, _ = view.get_language_feature(lf_path)\n                    all_gt_language_feature.append(gt_language)\n\n                gts_path = os.path.join(dataset.model_path, \"test\", \"gt_rgb\")\n                os.makedirs(gts_path, exist_ok=True)\n                torchvision.utils.save_image(gt.clamp(0.0, 1.0), os.path.join(gts_path, view.image_name + \".png\"))\n                torchvision.utils.save_image(rendering, os.path.join(render_path, view.image_name + \".png\"))\n\n                cv2.imwrite(os.path.join(render_depth_path, view.image_name + \".jpg\"), depth_color)\n                np.save(os.path.join(render_depth_npy_path, view.image_name + \".npy\"), depth)\n                cv2.imwrite(os.path.join(render_normal_path, view.image_name + \".jpg\"), normal)\n\n                view_dir = torch.nn.functional.normalize(view.get_rays(), p=2, dim=-1)\n                depth_normal = out[\"depth_normal\"].permute(1, 2, 0)\n                depth_normal = torch.nn.functional.normalize(depth_normal, p=2, dim=-1)\n                dot = torch.sum(view_dir * depth_normal, dim=-1).abs()\n                angle = torch.acos(dot)\n                mask = angle > (80.0 / 180 * 3.14159)\n                depth_tsdf[mask] = 0\n                depths_tsdf_fusion.append(depth_tsdf.squeeze().cpu())\n\n            depths_tsdf_fusion = torch.stack(depths_tsdf_fusion, dim=0)\n            max_depth = 5.0\n            for idx, view in enumerate(tqdm(self.scene.getTrainCameras(), desc=\"TSDF Fusion progress\")):\n                ref_depth = depths_tsdf_fusion[idx].cuda()\n\n                if view.mask is not None:\n                    ref_depth[view.mask.squeeze() < 0.5] = 0\n                ref_depth[ref_depth > max_depth] = 0\n                ref_depth = ref_depth.detach().cpu().numpy()\n                pose = np.identity(4)\n                pose[:3, :3] = view.R.transpose(-1, -2)\n                pose[:3, 3] = view.T\n                color = o3d.io.read_image(os.path.join(render_path, view.image_name + \".png\"))\n\n                depth = o3d.geometry.Image((ref_depth * 1000).astype(np.uint16))\n                rgbd = o3d.geometry.RGBDImage.create_from_color_and_depth(\n                    color, depth, depth_scale=1000.0, depth_trunc=max_depth, convert_rgb_to_intensity=False)\n                \n                volume.integrate(\n                    rgbd,\n                    o3d.camera.PinholeCameraIntrinsic(W, H, view.Fx, view.Fy, view.Cx, view.Cy),\n                    pose\n                )\n            num_cluster = 3\n            path = os.path.join(dataset.model_path, \"mesh\")\n            os.makedirs(path, exist_ok=True)\n            \n            mesh = volume.extract_triangle_mesh()\n            o3d.io.write_triangle_mesh(os.path.join(path, \"tsdf_fusion.ply\"), mesh,\n                                        write_triangle_uvs=True, write_vertex_colors=True, write_vertex_normals=True)\n\n            mesh = post_process_mesh(mesh, num_cluster)\n            o3d.io.write_triangle_mesh(os.path.join(path, \"tsdf_fusion_post.ply\"), mesh,\n                                        write_triangle_uvs=True, write_vertex_colors=True, write_vertex_normals=True)\n\n        \n        # perform pca among all lang/instance features\n        render_language_path = os.path.join(dataset.model_path, \"test\", \"renders_language\")\n        render_instance_path = os.path.join(dataset.model_path, \"test\", \"renders_instance\")\n        gts_language_path = os.path.join(dataset.model_path, \"test\", \"gt_language\")\n        render_language_npy_path = os.path.join(dataset.model_path, \"test\", \"renders_language_npy\")\n        render_instance_npy_path = os.path.join(dataset.model_path, \"test\", \"renders_instance_npy\")\n        gts_language_npy_path = os.path.join(dataset.model_path, \"test\", \"gt_language_npy\")\n        os.makedirs(render_language_path, exist_ok=True)\n        os.makedirs(gts_language_path, exist_ok=True)\n        os.makedirs(render_language_npy_path, exist_ok=True)\n        os.makedirs(gts_language_npy_path, exist_ok=True)\n        os.makedirs(render_instance_path, exist_ok=True)\n        os.makedirs(render_instance_npy_path, exist_ok=True)\n\n        all_language_feature = torch.stack(all_language_feature)\n        all_instance_feature = torch.stack(all_instance_feature)\n        if len(all_gt_language_feature):\n            all_gt_language_feature = torch.stack(all_gt_language_feature)\n        if render_cfg.normalized:\n            all_language_feature = torch.clamp(all_language_feature, min=-1, max=2)\n            min_value = torch.min(all_language_feature)\n            max_value = torch.max(all_language_feature)\n            normalized_language_feature = (all_language_feature - min_value) / (max_value - min_value)\n            pca_language_feature = permuted_pca(normalized_language_feature)\n            for idx, view in enumerate(self.scene.getTrainCameras()):\n                torchvision.utils.save_image(normalized_language_feature[idx], os.path.join(render_language_path, view.image_name + \".png\"))\n\n            all_instance_feature = torch.clamp(all_instance_feature, min=-1, max=2)\n            min_value = torch.min(all_instance_feature)\n            max_value = torch.max(all_instance_feature)\n            normalized_instance_feature = (all_instance_feature - min_value) / (max_value - min_value)\n            pca_instance_feature = permuted_pca(normalized_instance_feature)\n            for idx, view in enumerate(self.scene.getTrainCameras()):\n                torchvision.utils.save_image(\n                    # pca_instance_feature[idx],\n                    normalized_instance_feature[idx],\n                    os.path.join(render_instance_path, view.image_name + \".png\")\n                )\n\n            if os.path.exists(lf_path):\n                all_gt_language_feature = torch.clamp(all_gt_language_feature, min=-1, max=2)\n                min_value = torch.min(all_gt_language_feature)\n                max_value = torch.max(all_gt_language_feature)\n                normalized_gt_language = (all_gt_language_feature - min_value) / (max_value - min_value)\n                pca_gt_language = permuted_pca(normalized_gt_language)\n                for idx, view in enumerate(self.scene.getTrainCameras()):\n                    torchvision.utils.save_image(\n                        pca_gt_language[idx],\n                        os.path.join(gts_language_path, view.image_name + \".png\")\n                    )\n        else:\n            breakpoint()\n            all_language_feature = torch.clamp(all_language_feature, min=-1, max=2)\n            pca_language_feature = permuted_pca(all_language_feature)\n            for idx, view in enumerate(self.scene.getTrainCameras()):\n                torchvision.utils.save_image(\n                    pca_language_feature[idx],\n                    os.path.join(render_language_path, view.image_name + \".png\")\n                )\n\n            all_instance_feature = torch.clamp(all_instance_feature, min=-1, max=2)\n            pca_instance_feature = permuted_pca(all_instance_feature)\n            for idx, view in enumerate(self.scene.getTrainCameras()):\n                torchvision.utils.save_image(\n                    pca_instance_feature[idx],\n                    os.path.join(render_instance_path, view.image_name + \".png\")\n                )\n\n            if os.path.exists(lf_path):\n                all_gt_language_feature = torch.clamp(all_gt_language_feature, min=-1, max=2)\n                pca_gt_language = permuted_pca(all_gt_language_feature)\n                for idx, view in enumerate(self.scene.getTrainCameras()):\n                    torchvision.utils.save_image(\n                        pca_gt_language[idx],\n                        os.path.join(gts_language_path, view.image_name + \".png\")\n                    )\n\n\n        for idx, view in enumerate(self.scene.getTrainCameras()):\n            np.save(\n                os.path.join(render_language_npy_path, view.image_name + \".npy\"),\n                all_language_feature[idx].permute(1, 2, 0).cpu().numpy()\n            )\n            np.save(\n                os.path.join(render_instance_npy_path, view.image_name + \".npy\"),\n                all_instance_feature[idx].permute(1, 2, 0).cpu().numpy()\n            )\n            if os.path.exists(lf_path):\n                np.save(\n                    os.path.join(gts_language_npy_path, view.image_name + \".npy\"),\n                    all_gt_language_feature[idx].permute(1, 2, 0).cpu().numpy()\n                )\n\n        for idx, view in enumerate(tqdm(self.scene.getTrainCameras(), desc=\"TSDF Fusion progress\")):\n            ref_depth = depths_tsdf_fusion[idx].cuda()\n\n            if view.mask is not None:\n                ref_depth[view.mask.squeeze() < 0.5] = 0\n            ref_depth[ref_depth > max_depth] = 0\n            ref_depth = ref_depth.detach().cpu().numpy()\n            pose = np.identity(4)\n            pose[:3, :3] = view.R.transpose(-1, -2)\n            pose[:3, 3] = view.T\n            color_feature = o3d.io.read_image(os.path.join(render_language_path, view.image_name + \".png\"))\n            depth = o3d.geometry.Image((ref_depth * 1000).astype(np.uint16))\n            rgbd_feature = o3d.geometry.RGBDImage.create_from_color_and_depth(\n                color_feature, depth, depth_scale=1000.0, depth_trunc=max_depth, convert_rgb_to_intensity=False\n            )\n            volume_feature.integrate(\n                rgbd_feature,\n                o3d.camera.PinholeCameraIntrinsic(W, H, view.Fx, view.Fy, view.Cx, view.Cy),\n                pose\n            )\n        \n        num_cluster = 3\n        mesh_feature = volume_feature.extract_triangle_mesh()\n        o3d.io.write_triangle_mesh(os.path.join(path, \"feature_tsdf_fusion.ply\"), mesh_feature,\n                                    write_triangle_uvs=True, write_vertex_colors=True,\n                                    write_vertex_normals=True)\n        mesh_feature = post_process_mesh(mesh_feature, num_cluster)\n        o3d.io.write_triangle_mesh(os.path.join(path, \"feature_tsdf_fusion_post.ply\"), mesh_feature,\n                                    write_triangle_uvs=True, write_vertex_colors=True,\n                                    write_vertex_normals=True)\n\n\n    \n    \n    def eval(self):\n        cfg = self.cfg\n        dataset = cfg.gaussian.dataset\n        opt = cfg.gaussian.opt\n        pipe = cfg.gaussian.pipe\n        device = cfg.gaussian.dataset.data_device\n        \n        dataset.source_path = cfg.gaussian.eval.eval_data_path\n\n        logging.info(\"Evaling \" + dataset.model_path)\n        safe_state(cfg.gaussian.quiet)\n        # optimizing poses:\n        self.gaussians = GaussianModel(cfg.gaussian.dataset.sh_degree)\n        self.scene = Scene(cfg.gaussian.dataset, self.gaussians, load_iteration=cfg.pipeline.load_iteration, shuffle=False)\n\n        self.gaussians.training_setup(opt, device)\n\n        self.scene.loaded_iter = None\n        bg_color = [1, 1, 1] if dataset.white_background else [0, 0, 0]\n        background = torch.tensor(bg_color, dtype=torch.float32, device=device)\n\n        render_path = os.path.join(dataset.model_path, \"eval\", \"renders_rgb\")\n        render_depth_path = os.path.join(dataset.model_path, \"eval\", \"renders_depth\")\n        render_depth_npy_path = os.path.join(dataset.model_path, \"eval\", \"renders_depth_npy\")\n        render_normal_path = os.path.join(dataset.model_path, \"eval\", \"renders_normal\")\n\n        render_lang_path = os.path.join(dataset.model_path, \"eval\", \"renders_lang\")\n        render_instance_path = os.path.join(dataset.model_path, \"eval\", \"renders_instance\")\n        render_lang_npy_path = os.path.join(dataset.model_path, \"eval\", \"renders_lang_npy\")\n        render_instance_npy_path = os.path.join(dataset.model_path, \"eval\", \"renders_instance_npy\")\n\n        os.makedirs(render_path, exist_ok=True)\n        os.makedirs(render_depth_path, exist_ok=True)\n        os.makedirs(render_depth_npy_path, exist_ok=True)\n        os.makedirs(render_normal_path, exist_ok=True)\n        os.makedirs(render_lang_path, exist_ok=True)\n        os.makedirs(render_instance_path, exist_ok=True)  \n        os.makedirs(render_lang_npy_path, exist_ok=True)\n        os.makedirs(render_instance_npy_path, exist_ok=True)\n\n        self.gaussians.change_reqiures_grad(\"pose_only\", iteration=0, quiet=False)\n\n        for cam_idx, cam in enumerate(self.scene.getTrainCameras().copy()):\n            # optim pose iter:\n            first_iter = 1\n            ema_loss_for_log = 0.0\n            include_feature = True\n            progress_bar = tqdm(range(first_iter, cfg.gaussian.eval.pose_optim_iter + 1))\n\n            logging.info(f\"Optimizing camera {cam_idx}\")\n            iter_start = torch.cuda.Event(enable_timing=True)\n            iter_end = torch.cuda.Event(enable_timing=True)\n            for iteration in progress_bar:\n                iter_start.record()\n                self.gaussians.update_learning_rate(iteration)\n                pose = self.gaussians.get_RT(self.gaussians.index_mapping[cam.uid])\n                bg = torch.rand((3), device=\"cuda\") if opt.random_background else background\n                render_pkg = render(cam, self.gaussians, pipe, bg, app_model=None, \n                                    return_plane=False, return_depth_normal=False,\n                                    include_feature=include_feature, camera_pose=pose)\n                \n                image = render_pkg[\"render\"]\n                gt_image, _ = cam.get_image()\n                ssim_loss = (1.0 - ssim(image, gt_image))\n                Ll1 = l1_loss(image, gt_image)\n                image_loss = (1.0 - opt.lambda_dssim) * Ll1 + opt.lambda_dssim * ssim_loss\n                image_loss.backward()\n                iter_end.record()\n                with torch.no_grad():\n                    ema_loss_for_log = 0.4 * image_loss + 0.6 * ema_loss_for_log\n                    if iteration % 10 == 0:\n                        loss_dict = {\n                            \"Loss\": f\"{ema_loss_for_log:.5f}\"\n                        }\n                        progress_bar.set_postfix(loss_dict)\n                        progress_bar.update(10)\n                    if iteration < cfg.gaussian.eval.pose_optim_iter:\n                        self.gaussians.cam_optimizer.step()\n                        self.gaussians.cam_optimizer.zero_grad(set_to_none=True)\n\n                    if iteration == cfg.gaussian.eval.pose_optim_iter:\n                        # saving results:\n                        progress_bar.close()\n                        logging.info(\"Saving results...\")\n                        language_feature, instance_feature = render_pkg[\"language_feature\"], render_pkg[\"instance_feature\"]\n                        image_tosave = torch.cat([image, gt_image], dim=2).clamp(0, 1)\n                        torchvision.utils.save_image(image_tosave, os.path.join(render_path, cam.image_name + \".png\"))\n                        min_value = torch.min(language_feature)\n                        max_value = torch.max(language_feature)\n                        normalized_language_feature = (language_feature - min_value) / (max_value - min_value)\n                        torchvision.utils.save_image(permuted_pca(normalized_language_feature), \n                                os.path.join(render_lang_path, cam.image_name + \".png\"))\n                        np.save(os.path.join(render_lang_npy_path, cam.image_name + \".npy\"),\n                                language_feature.permute(1, 2, 0).cpu().numpy())\n\n                        min_value = torch.min(instance_feature)\n                        max_value = torch.max(instance_feature)\n                        normalized_instance_feature = (instance_feature - min_value) / (max_value - min_value)\n                        torchvision.utils.save_image(permuted_pca(normalized_instance_feature), \n                                os.path.join(render_instance_path, cam.image_name + \".png\"))\n                        np.save(os.path.join(render_instance_npy_path, cam.image_name + \".npy\"),\n                                instance_feature.permute(1, 2, 0).cpu().numpy())\n\n            torch.cuda.empty_cache()\n\n                \n"
  },
  {
    "path": "field_construction/gaussian_renderer/__init__.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use\n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport math\n\nimport torch\nfrom diff_LangSurf_rasterization import \\\n    GaussianRasterizationSettings as PlaneGaussianRasterizationSettings\nfrom diff_LangSurf_rasterization import \\\n    GaussianRasterizer as PlaneGaussianRasterizer\n\nfrom field_construction.scene.app_model import AppModel\nfrom field_construction.scene.gaussian_model import GaussianModel\nfrom field_construction.utils.graphics_utils import normal_from_depth_image\nfrom field_construction.utils.pose_utils import (get_camera_from_tensor,\n                                                 quadmultiply)\nfrom field_construction.utils.sh_utils import eval_sh\n\n\ndef render_normal(viewpoint_cam, depth, offset=None, normal=None, scale=1):\n    # depth: (H, W), bg_color: (3), alpha: (H, W)\n    # normal_ref: (3, H, W)\n    intrinsic_matrix, extrinsic_matrix = viewpoint_cam.get_calib_matrix_nerf(scale=scale)\n    st = max(int(scale/2)-1,0)\n    if offset is not None:\n        offset = offset[st::scale,st::scale]\n    normal_ref = normal_from_depth_image(depth[st::scale,st::scale], \n                                            intrinsic_matrix.to(depth.device), \n                                            extrinsic_matrix.to(depth.device), offset)\n\n    normal_ref = normal_ref.permute(2,0,1)\n    return normal_ref\n\ndef render(\n    viewpoint_camera,\n    pc : GaussianModel,\n    pipe, \n    bg_color : torch.Tensor, \n    scaling_modifier=1.0, \n    override_color=None, \n    app_model: AppModel=None,\n    return_plane=True,\n    return_depth_normal=True, \n    include_feature=True, \n    camera_pose=None\n):\n    \"\"\"\n    Render the scene. \n    \n    Background tensor (bg_color) must be on GPU!\n    \"\"\"\n    # Create zero tensor. We will use it to make pytorch return gradients of the 2D (screen-space) means\n    screenspace_points = torch.zeros_like(pc.get_xyz, dtype=pc.get_xyz.dtype, requires_grad=True, device=\"cuda\") + 0\n    screenspace_points_abs = torch.zeros_like(pc.get_xyz, dtype=pc.get_xyz.dtype, requires_grad=True, device=\"cuda\") + 0\n    try:\n        screenspace_points.retain_grad()\n        screenspace_points_abs.retain_grad()\n    except:\n        pass\n\n    # Set up rasterization configuration\n    tanfovx = math.tan(viewpoint_camera.FoVx * 0.5)\n    tanfovy = math.tan(viewpoint_camera.FoVy * 0.5)\n\n    w2c = torch.eye(4).cuda()\n    projmatrix = (\n        w2c.unsqueeze(0).bmm(viewpoint_camera.projection_matrix.unsqueeze(0))\n    ).squeeze(0)\n    camera_pos = w2c.inverse()[3, :3]\n    \n    if camera_pose is not None:\n        rel_w2c = get_camera_from_tensor(camera_pose)\n        gaussians_xyz = pc._xyz.clone()\n        gaussians_rot = pc._rotation.clone()\n        xyz_ones = torch.ones(gaussians_xyz.shape[0], 1).cuda().float()\n        xyz_homo = torch.cat((gaussians_xyz, xyz_ones), dim=1)\n        gaussians_xyz_trans = (rel_w2c @ xyz_homo.T).T[:, :3]\n        gaussians_rot_trans = quadmultiply(camera_pose[:4], gaussians_rot)\n        means3D = gaussians_xyz_trans \n    \n    else:\n        means3D = pc.get_xyz\n\n    means2D = screenspace_points\n    means2D_abs = screenspace_points_abs\n    opacity = pc.get_opacity\n    \n    # If precomputed 3d covariance is provided, use it. If not, then it will be computed from\n    # scaling / rotation by the rasterizer.\n    scales = None\n    rotations = None\n    cov3D_precomp = None\n    if pipe.compute_cov3D_python:\n        cov3D_precomp = pc.get_covariance(scaling_modifier)\n    else:\n        scales = pc.get_scaling\n        rotations = gaussians_rot_trans if camera_pose is not None else pc.get_rotation\n        # rotations = pc.get_rotation\n    \n    # If precomputed colors are provided, use them. Otherwise, if it is desired to precompute colors\n    # from SHs in Python, do it. If not, then SH -> RGB conversion will be done by rasterizer.\n    shs = None\n    colors_precomp = None\n\n    if override_color is None:\n        if pipe.convert_SHs_python:\n            shs_view = pc.get_features.transpose(1, 2).view(-1, 3, (pc.max_sh_degree+1)**2)\n            dir_pp = (pc.get_xyz - viewpoint_camera.camera_center.repeat(pc.get_features.shape[0], 1))\n            dir_pp_normalized = dir_pp/dir_pp.norm(dim=1, keepdim=True)\n            sh2rgb = eval_sh(pc.active_sh_degree, shs_view, dir_pp_normalized)\n            colors_precomp = torch.clamp_min(sh2rgb + 0.5, 0.0)\n        else:\n            shs = pc.get_features\n    else:\n        colors_precomp = override_color\n\n    if include_feature:\n        language_feature_precomp = pc.get_language_feature\n        instance_feature_precomp = pc.get_instance_feature\n        # language_feature_precomp = language_feature_precomp / (language_feature_precomp.norm(dim=-1, keepdim=True) + 1e-9)\n        # instance_feature_precomp = instance_feature_precomp / (instance_feature_precomp.norm(dim=-1, keepdim=True) + 1e-9)\n        # language_feature_precomp = torch.sigmoid(language_feature_precomp)\n    else:\n        language_feature_precomp = torch.zeros((1,), dtype=opacity.dtype, device=opacity.device)\n        instance_feature_precomp = torch.zeros((1,), dtype=opacity.dtype, device=opacity.device)\n\n    return_dict = None\n    raster_settings = PlaneGaussianRasterizationSettings(\n            image_height=int(viewpoint_camera.image_height),\n            image_width=int(viewpoint_camera.image_width),\n            tanfovx=tanfovx,\n            tanfovy=tanfovy,\n            bg=bg_color,\n            scale_modifier=scaling_modifier,\n            # viewmatrix=viewpoint_camera.world_view_transform,\n            # projmatrix=viewpoint_camera.full_proj_transform,\n            viewmatrix=w2c if camera_pose is not None else viewpoint_camera.world_view_transform,\n            projmatrix=projmatrix if camera_pose is not None else viewpoint_camera.full_proj_transform,\n            sh_degree=pc.active_sh_degree,\n            # campos=viewpoint_camera.camera_center,\n            campos=camera_pos if camera_pose is not None else viewpoint_camera.camera_center,\n            prefiltered=False,\n            render_geo=return_plane,\n            debug=pipe.debug,\n            include_feature=include_feature,\n        )\n\n    rasterizer = PlaneGaussianRasterizer(raster_settings=raster_settings)\n\n\n    if not return_plane:\n        rendered_image, language_feature, instance_feature, radii, out_observe, _, _ = rasterizer(\n            means3D = means3D,\n            means2D = means2D,\n            means2D_abs = means2D_abs,\n            shs = shs,\n            colors_precomp = colors_precomp,\n            language_feature_precomp = language_feature_precomp,\n            language_feature_instance_precomp = instance_feature_precomp,\n            opacities = opacity,\n            scales = scales,\n            rotations = rotations,\n            cov3D_precomp = cov3D_precomp)\n        \n        return_dict =  {\"render\": rendered_image,\n                        \"viewspace_points\": screenspace_points,\n                        \"viewspace_points_abs\": screenspace_points_abs,\n                        \"visibility_filter\" : radii > 0,\n                        \"radii\": radii,\n                        \"out_observe\": out_observe,\n                        \"language_feature\": language_feature,\n                        \"instance_feature\": instance_feature,\n                        }\n        if app_model is not None and pc.use_app:\n            appear_ab = app_model.appear_ab[torch.tensor(viewpoint_camera.uid).cuda()]\n            app_image = torch.exp(appear_ab[0]) * rendered_image + appear_ab[1]\n            return_dict.update({\"app_image\": app_image})\n        return return_dict\n\n    global_normal = pc.get_normal(viewpoint_camera)\n    local_normal = global_normal @ viewpoint_camera.world_view_transform[:3,:3]\n    pts_in_cam = means3D @ viewpoint_camera.world_view_transform[:3,:3] + viewpoint_camera.world_view_transform[3,:3]\n    depth_z = pts_in_cam[:, 2]\n    local_distance = (local_normal * pts_in_cam).sum(-1).abs()\n    input_all_map = torch.zeros((means3D.shape[0], 5)).cuda().float()\n    input_all_map[:, :3] = local_normal\n    input_all_map[:, 3] = 1.0\n    input_all_map[:, 4] = local_distance\n\n    rendered_image, language_feature, instance_feature, radii, out_observe, out_all_map, plane_depth = rasterizer(\n        means3D = means3D,\n        means2D = means2D,\n        means2D_abs = means2D_abs,\n        shs = shs,\n        colors_precomp = colors_precomp,\n        language_feature_precomp = language_feature_precomp,\n        language_feature_instance_precomp = instance_feature_precomp,\n        opacities = opacity,\n        scales = scales,\n        rotations = rotations,\n        all_map = input_all_map,\n        cov3D_precomp = cov3D_precomp)\n\n    rendered_normal = out_all_map[0:3]\n    rendered_alpha = out_all_map[3:4, ]\n    rendered_distance = out_all_map[4:5, ]\n    \n    return_dict =  {\"render\": rendered_image,\n                    \"viewspace_points\": screenspace_points,\n                    \"viewspace_points_abs\": screenspace_points_abs,\n                    \"visibility_filter\" : radii > 0,\n                    \"radii\": radii,\n                    \"out_observe\": out_observe,\n                    \"rendered_normal\": rendered_normal,\n                    \"plane_depth\": plane_depth,\n                    \"rendered_distance\": rendered_distance,\n                    \"language_feature\": language_feature,\n                    \"instance_feature\": instance_feature,\n                    }\n    if app_model is not None:\n        appear_ab = app_model.appear_ab[torch.tensor(viewpoint_camera.uid).cuda()]\n        app_image = torch.exp(appear_ab[0]) * rendered_image + appear_ab[1]\n        return_dict.update({\"app_image\": app_image})   \n\n    if return_depth_normal:\n        depth_normal = render_normal(viewpoint_camera, plane_depth.squeeze()) * (rendered_alpha).detach()\n        return_dict.update({\"depth_normal\": depth_normal})\n    \n    # Those Gaussians that were frustum culled or had a radius of 0 were not visible.\n    # They will be excluded from value updates used in the splitting criteria.\n    return return_dict"
  },
  {
    "path": "field_construction/gaussian_renderer/network_gui.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use\n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport json\nimport socket\nimport traceback\n\nimport torch\n\nfrom field_construction.scene.cameras import MiniCam\n\nhost = \"127.0.0.1\"\nport = 6009\n\nconn = None\naddr = None\n\nlistener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n\ndef init(wish_host, wish_port):\n    global host, port, listener\n    host = wish_host\n    port = wish_port\n    listener.bind((host, port))\n    listener.listen()\n    listener.settimeout(0)\n\ndef try_connect():\n    global conn, addr, listener\n    try:\n        conn, addr = listener.accept()\n        print(f\"\\nConnected by {addr}\")\n        conn.settimeout(None)\n    except Exception as inst:\n        pass\n            \ndef read():\n    global conn\n    messageLength = conn.recv(4)\n    messageLength = int.from_bytes(messageLength, 'little')\n    message = conn.recv(messageLength)\n    return json.loads(message.decode(\"utf-8\"))\n\ndef send(message_bytes, verify):\n    global conn\n    if message_bytes != None:\n        conn.sendall(message_bytes)\n    conn.sendall(len(verify).to_bytes(4, 'little'))\n    conn.sendall(bytes(verify, 'ascii'))\n\ndef receive():\n    message = read()\n\n    width = message[\"resolution_x\"]\n    height = message[\"resolution_y\"]\n\n    if width != 0 and height != 0:\n        try:\n            do_training = bool(message[\"train\"])\n            fovy = message[\"fov_y\"]\n            fovx = message[\"fov_x\"]\n            znear = message[\"z_near\"]\n            zfar = message[\"z_far\"]\n            do_shs_python = bool(message[\"shs_python\"])\n            do_rot_scale_python = bool(message[\"rot_scale_python\"])\n            keep_alive = bool(message[\"keep_alive\"])\n            scaling_modifier = message[\"scaling_modifier\"]\n            world_view_transform = torch.reshape(torch.tensor(message[\"view_matrix\"]), (4, 4)).cuda()\n            world_view_transform[:,1] = -world_view_transform[:,1]\n            world_view_transform[:,2] = -world_view_transform[:,2]\n            full_proj_transform = torch.reshape(torch.tensor(message[\"view_projection_matrix\"]), (4, 4)).cuda()\n            full_proj_transform[:,1] = -full_proj_transform[:,1]\n            custom_cam = MiniCam(width, height, fovy, fovx, znear, zfar, world_view_transform, full_proj_transform)\n        except Exception as e:\n            print(\"\")\n            traceback.print_exc()\n            raise e\n        return custom_cam, do_training, do_shs_python, do_rot_scale_python, keep_alive, scaling_modifier\n    else:\n        return None, None, None, None, None, None"
  },
  {
    "path": "field_construction/lpipsPyTorch/__init__.py",
    "content": "import torch\n\nfrom .modules.lpips import LPIPS\n\n\ndef lpips(x: torch.Tensor,\n          y: torch.Tensor,\n          net_type: str = 'alex',\n          version: str = '0.1'):\n    r\"\"\"Function that measures\n    Learned Perceptual Image Patch Similarity (LPIPS).\n\n    Arguments:\n        x, y (torch.Tensor): the input tensors to compare.\n        net_type (str): the network type to compare the features: \n                        'alex' | 'squeeze' | 'vgg'. Default: 'alex'.\n        version (str): the version of LPIPS. Default: 0.1.\n    \"\"\"\n    device = x.device\n    criterion = LPIPS(net_type, version).to(device)\n    return criterion(x, y)\n"
  },
  {
    "path": "field_construction/lpipsPyTorch/modules/lpips.py",
    "content": "import torch\nimport torch.nn as nn\n\nfrom .networks import get_network, LinLayers\nfrom .utils import get_state_dict\n\n\nclass LPIPS(nn.Module):\n    r\"\"\"Creates a criterion that measures\n    Learned Perceptual Image Patch Similarity (LPIPS).\n\n    Arguments:\n        net_type (str): the network type to compare the features: \n                        'alex' | 'squeeze' | 'vgg'. Default: 'alex'.\n        version (str): the version of LPIPS. Default: 0.1.\n    \"\"\"\n    def __init__(self, net_type: str = 'alex', version: str = '0.1'):\n\n        assert version in ['0.1'], 'v0.1 is only supported now'\n\n        super(LPIPS, self).__init__()\n\n        # pretrained network\n        self.net = get_network(net_type)\n\n        # linear layers\n        self.lin = LinLayers(self.net.n_channels_list)\n        self.lin.load_state_dict(get_state_dict(net_type, version))\n\n    def forward(self, x: torch.Tensor, y: torch.Tensor):\n        feat_x, feat_y = self.net(x), self.net(y)\n\n        diff = [(fx - fy) ** 2 for fx, fy in zip(feat_x, feat_y)]\n        res = [l(d).mean((2, 3), True) for d, l in zip(diff, self.lin)]\n\n        return torch.sum(torch.cat(res, 0), 0, True)\n"
  },
  {
    "path": "field_construction/lpipsPyTorch/modules/networks.py",
    "content": "from typing import Sequence\n\nfrom itertools import chain\n\nimport torch\nimport torch.nn as nn\nfrom torchvision import models\n\nfrom .utils import normalize_activation\n\n\ndef get_network(net_type: str):\n    if net_type == 'alex':\n        return AlexNet()\n    elif net_type == 'squeeze':\n        return SqueezeNet()\n    elif net_type == 'vgg':\n        return VGG16()\n    else:\n        raise NotImplementedError('choose net_type from [alex, squeeze, vgg].')\n\n\nclass LinLayers(nn.ModuleList):\n    def __init__(self, n_channels_list: Sequence[int]):\n        super(LinLayers, self).__init__([\n            nn.Sequential(\n                nn.Identity(),\n                nn.Conv2d(nc, 1, 1, 1, 0, bias=False)\n            ) for nc in n_channels_list\n        ])\n\n        for param in self.parameters():\n            param.requires_grad = False\n\n\nclass BaseNet(nn.Module):\n    def __init__(self):\n        super(BaseNet, self).__init__()\n\n        # register buffer\n        self.register_buffer(\n            'mean', torch.Tensor([-.030, -.088, -.188])[None, :, None, None])\n        self.register_buffer(\n            'std', torch.Tensor([.458, .448, .450])[None, :, None, None])\n\n    def set_requires_grad(self, state: bool):\n        for param in chain(self.parameters(), self.buffers()):\n            param.requires_grad = state\n\n    def z_score(self, x: torch.Tensor):\n        return (x - self.mean) / self.std\n\n    def forward(self, x: torch.Tensor):\n        x = self.z_score(x)\n\n        output = []\n        for i, (_, layer) in enumerate(self.layers._modules.items(), 1):\n            x = layer(x)\n            if i in self.target_layers:\n                output.append(normalize_activation(x))\n            if len(output) == len(self.target_layers):\n                break\n        return output\n\n\nclass SqueezeNet(BaseNet):\n    def __init__(self):\n        super(SqueezeNet, self).__init__()\n\n        self.layers = models.squeezenet1_1(True).features\n        self.target_layers = [2, 5, 8, 10, 11, 12, 13]\n        self.n_channels_list = [64, 128, 256, 384, 384, 512, 512]\n\n        self.set_requires_grad(False)\n\n\nclass AlexNet(BaseNet):\n    def __init__(self):\n        super(AlexNet, self).__init__()\n\n        self.layers = models.alexnet(True).features\n        self.target_layers = [2, 5, 8, 10, 12]\n        self.n_channels_list = [64, 192, 384, 256, 256]\n\n        self.set_requires_grad(False)\n\n\nclass VGG16(BaseNet):\n    def __init__(self):\n        super(VGG16, self).__init__()\n\n        self.layers = models.vgg16(weights=models.VGG16_Weights.IMAGENET1K_V1).features\n        self.target_layers = [4, 9, 16, 23, 30]\n        self.n_channels_list = [64, 128, 256, 512, 512]\n\n        self.set_requires_grad(False)\n"
  },
  {
    "path": "field_construction/lpipsPyTorch/modules/utils.py",
    "content": "from collections import OrderedDict\n\nimport torch\n\n\ndef normalize_activation(x, eps=1e-10):\n    norm_factor = torch.sqrt(torch.sum(x ** 2, dim=1, keepdim=True))\n    return x / (norm_factor + eps)\n\n\ndef get_state_dict(net_type: str = 'alex', version: str = '0.1'):\n    # build url\n    url = 'https://raw.githubusercontent.com/richzhang/PerceptualSimilarity/' \\\n        + f'master/lpips/weights/v{version}/{net_type}.pth'\n\n    # download\n    old_state_dict = torch.hub.load_state_dict_from_url(\n        url, progress=True,\n        map_location=None if torch.cuda.is_available() else torch.device('cpu')\n    )\n\n    # rename keys\n    new_state_dict = OrderedDict()\n    for key, val in old_state_dict.items():\n        new_key = key\n        new_key = new_key.replace('lin', '')\n        new_key = new_key.replace('model.', '')\n        new_state_dict[new_key] = val\n\n    return new_state_dict\n"
  },
  {
    "path": "field_construction/pipeline.py",
    "content": "\nfrom random import randint\n\nfrom .gaussian_field import GaussianField\nfrom .preprocessor import Preprocessor\n\n\nclass FieldConstructionPipeline:\n    def __init__(self, cfg):\n        self.cfg = cfg\n        if cfg.pipeline.mode == \"train\":\n            self.preprocessor = Preprocessor(cfg)\n        else:\n            self.preprocessor = None\n    \n    def construct_field(self):\n        self.preprocessor.preprocess()\n        del self.preprocessor\n        self.preprocessor = None\n\n        self.gaussian_field = GaussianField(self.cfg)\n        self.gaussian_field.train()\n\n    \n    def render_result(self):\n        self.gaussian_field = GaussianField(self.cfg)\n        self.gaussian_field.render()\n        \n    def eval(self):\n        self.gaussian_field = GaussianField(self.cfg)\n        self.gaussian_field.eval()\n\n"
  },
  {
    "path": "field_construction/pose_estimator/__init__.py",
    "content": "import logging\nimport os\nimport shutil\nimport time\nfrom abc import ABC, abstractmethod\nfrom pathlib import Path\n\nimport numpy as np\nimport open3d as o3d\nimport torch\n\nfrom utils.sfm_utils import (compute_co_vis_masks, get_sorted_image_files,\n                             load_images, save_extrinsic, save_intrinsics,\n                             save_points3D)\n\nfrom .utils import prepare_input, prepare_output, storePly\n\n\nclass BaseEstimator(ABC):\n    @abstractmethod\n    def get_poses():\n        pass\n\n\nclass ColmapEstimator(BaseEstimator):\n    def __init__(self, cfg):\n        self.cfg = cfg\n        \n    def get_poses(self, camera_model=\"OPENCV\", use_gpu=True):\n        save_path = self.cfg.pipeline.data_path\n        database_path = os.path.join(save_path, \"distorted\", \"database.db\")\n        raw_img_path = os.path.join(save_path, \"input\")\n        sparse_path = os.path.join(save_path, \"distorted\", \"sparse\")\n        os.makedirs(os.path.join(save_path, \"distorted\"), exist_ok=True)\n        os.makedirs(sparse_path, exist_ok=True)\n\n        feat_extraction_cmd = [\n            \"colmap\", \"feature_extractor\", \n            \"--database_path\", database_path,\n            \"--image_path\", raw_img_path,\n            \"--ImageReader.single_camera\", \"1\",\n            \"--ImageReader.camera_model\", camera_model,\n            \"--SiftExtraction.use_gpu\", str(int(use_gpu))\n        ]\n        feat_extraction_cmd = \" \".join(feat_extraction_cmd)\n        exit_code = os.system(feat_extraction_cmd)\n        if exit_code != 0:\n            logging.error(f\"Feature extraction failed with code {exit_code}. Exiting.\")\n            exit(exit_code)\n        \n        feat_matching_cmd = [\n            \"colmap\", \"exhaustive_matcher\",\n            \"--database_path\", database_path,\n            \"--SiftMatching.use_gpu\", str(int(use_gpu))\n        ]\n        feat_matching_cmd = \" \".join(feat_matching_cmd)\n        exit_code = os.system(feat_matching_cmd)\n        if exit_code != 0:\n            logging.error(f\"Feature matching failed with code {exit_code}. Exiting.\")\n            exit(exit_code)\n        \n        mapper_cmd = [\n            \"colmap\", \"mapper\",\n            \"--database_path\", database_path,\n            \"--image_path\", raw_img_path,\n            \"--output_path\", sparse_path,\n            \"--Mapper.ba_global_function_tolerance=0.000001\"\n        ]\n        mapper_cmd = \" \".join(mapper_cmd)\n        exit_code = os.system(mapper_cmd)\n        if exit_code != 0:\n            logging.error(f\"Mapper failed with code {exit_code}. Exiting.\")\n            exit(exit_code)\n\n        img_undist_cmd = [\n            \"colmap\", \"image_undistorter\",\n            \"--image_path\", raw_img_path,\n            \"--input_path\", os.path.join(sparse_path, \"0\"),\n            \"--output_path\", save_path,\n            \"--output_type\", \"COLMAP\"\n        ]\n        img_undist_cmd = \" \".join(img_undist_cmd)\n        exit_code = os.system(img_undist_cmd)\n        if exit_code != 0:\n            logging.error(f\"Mapper failed with code {exit_code}. Exiting.\")\n            exit(exit_code)\n        \n        # move data:\n        curr_path = os.path.join(save_path, \"sparse\")\n        dest_path = os.path.join(curr_path, \"0\")  \n        os.makedirs(dest_path, exist_ok=True)\n        files = list(filter(lambda x: x != \"0\", os.listdir(curr_path)))\n        for file in files:\n            src_file = os.path.join(curr_path, file)\n            dest_file = os.path.join(dest_path, file)\n            shutil.move(src_file, dest_file)\n\n\nclass MASt3REstimator(BaseEstimator):\n    def __init__(self, cfg):\n        from mast3r.model import AsymmetricMASt3R\n        self.cfg = cfg\n        self.device = cfg.pose_estimator.device\n        self.model = AsymmetricMASt3R.from_pretrained(cfg.pose_estimator.model_path).to(self.device)\n\n    def get_poses(self):\n        from dust3r.cloud_opt import GlobalAlignerMode, global_aligner\n        from dust3r.image_pairs import make_pairs\n        from dust3r.inference import inference\n        from dust3r.utils.device import to_numpy\n        from dust3r.utils.geometry import inv\n\n        save_path = self.cfg.pipeline.data_path\n        co_vis_dsp = self.cfg.pose_estimator.co_vis_dsp\n        sparse_path = os.path.join(save_path, \"sparse\", \"0\")\n        os.makedirs(sparse_path, exist_ok=True)\n        image_dir = Path(save_path) / \"input\"\n        image_files, image_suffix = get_sorted_image_files(image_dir)\n        n_views = len(image_files)\n        images, org_imgs_shape = load_images(image_files, size=512)\n\n        logging.info(\">> Making pairs...\")\n        pairs = make_pairs(images)\n        logging.info(\">> Inference...\")\n        output = inference(pairs, self.model, self.device, batch_size=1, verbose=True)\n        logging.info(f'>> Global alignment...')\n        scene = global_aligner(output, device=self.device, mode=GlobalAlignerMode.PointCloudOptimizer)\n\n        extrinsics_w2c = inv(to_numpy(scene.get_im_poses()))\n        intrinsics = to_numpy(scene.get_intrinsics())\n        focals = to_numpy(scene.get_focals())\n        imgs = np.array(scene.imgs)\n        pts3d = to_numpy(scene.get_pts3d())\n        pts3d = np.array(pts3d)\n        depthmaps = to_numpy(scene.im_depthmaps.detach().cpu().numpy())\n        values = [param.detach().cpu().numpy() for param in scene.im_conf]\n        confs = np.array(values)\n        \n        logging.info(f'>> Confiden-aware Ranking...')\n        avg_conf_scores = confs.mean(axis=(1, 2))\n        sorted_conf_indices = np.argsort(avg_conf_scores)[::-1]\n        sorted_conf_avg_conf_scores = avg_conf_scores[sorted_conf_indices]\n        logging.info(\"Sorted indices:\", str(sorted_conf_indices))\n        logging.info(\"Sorted average confidence scores:\", str(sorted_conf_avg_conf_scores))\n\n        logging.info(f'>> Calculate the co-visibility mask...')\n        depth_thre = self.cfg.pose_estimator.depth_thre\n        if  depth_thre > 0:\n            overlapping_masks = compute_co_vis_masks(sorted_conf_indices, depthmaps, pts3d, intrinsics, extrinsics_w2c, imgs.shape, depth_threshold=depth_thre)\n            overlapping_masks = ~overlapping_masks\n        else:\n            co_vis_dsp = False\n            overlapping_masks = None\n\n        focals = np.repeat(focals[0], n_views)\n        logging.info(f'>> Saving results...')\n        save_extrinsic(Path(sparse_path), extrinsics_w2c, image_files, image_suffix)\n        save_intrinsics(Path(sparse_path), focals, org_imgs_shape, imgs.shape, save_focals=True)\n        pts_num = save_points3D(Path(sparse_path), imgs, pts3d, confs.reshape(pts3d.shape[0], -1), overlapping_masks, use_masks=co_vis_dsp, save_all_pts=True, save_txt_path=save_path, depth_threshold=depth_thre)\n        # save_images_and_masks(Path(sparse_path), n_views, imgs, overlapping_masks, image_files, image_suffix)\n        logging.info(f'MASt3R Reconstruction is successfully converted to COLMAP files in: {sparse_path}')\n        logging.info(f'Number of points: {pts3d.reshape(-1, 3).shape[0]}')    \n        logging.info(f'Number of points after downsampling: {pts_num}')\n            \n    \nclass CUT3REstimator(BaseEstimator):\n    def __init__(self, cfg):\n        self.cfg = cfg  \n        self.device = cfg.pose_estimator.device\n\n    def get_poses(self):\n        cfg = self.cfg\n        if self.device == \"cuda\" and not torch.cuda.is_available():\n            print(\"cuda not available. switching to cpu.\")\n            self.device = \"cpu\"\n        \n        from cut3r.dust3r.inference import inference\n        from cut3r.dust3r.model import ARCroco3DStereo\n        \n        save_path = self.cfg.pipeline.data_path\n        img_folder_path = os.path.join(save_path, \"input\")\n        img_paths = [os.path.join(img_folder_path, img_name) for img_name in os.listdir(img_folder_path)]\n        img_mask = [True] * len(img_paths)\n        views, orig_shape = prepare_input(\n            img_paths=img_paths,\n            img_mask=img_mask,\n            size=512,\n            revisit=1,\n            update=True,\n        )\n        model = ARCroco3DStereo.from_pretrained(cfg.pose_estimator.model_path).to(self.device)\n        model.eval()\n\n        logging.info(\"Running inference...\")\n        start_time = time.time()\n        outputs, state_args = inference(views, model, self.device)\n        total_time = time.time() - start_time\n        per_frame_time = total_time / len(views)\n        print(\n            f\"Inference completed in {total_time:.2f} seconds (average {per_frame_time:.2f} s per frame).\"\n        )\n\n        pts3ds_other, colors, conf, cam_dict = prepare_output(\n            outputs, orig_shape, save_path, 1, True\n        )\n        conf = torch.cat(conf, dim=0)\n        if self.cfg.pipeline.selection:\n            conf_score = conf.mean(dim=(1, 2))\n            chunk_num = self.cfg.pipeline.chunk_num\n            keep_num_per_chunk = self.cfg.pipeline.keep_num_per_chunk\n            conf_scores_tuple = conf_score.chunk(chunk_num)\n            selected_idxs = []\n            total_conf_len = 0\n            for conf_scores_chunk in conf_scores_tuple:\n                _, idxs = conf_scores_chunk.sort(descending=True)\n                idxs = idxs[:keep_num_per_chunk]\n                selected_idxs += [(idx + total_conf_len).item() for idx in idxs]\n                total_conf_len += len(conf_scores_chunk)\n            self.cfg.pipeline.selected_idxs = sorted(selected_idxs)\n        \n        pts3ds_to_save = [pts3ds_other[idx].cpu().numpy() for idx in self.cfg.pipeline.selected_idxs]\n        colors_to_save = [colors[idx].cpu().numpy() for idx in self.cfg.pipeline.selected_idxs]\n        all_pts3ds = np.stack(pts3ds_to_save).reshape(-1, 3)\n        all_colors = np.stack(colors_to_save).reshape(-1, 3)\n        storePly(os.path.join(save_path, \"points3D.ply\"), all_pts3ds, all_colors)\n\nclass VGGTEstimator(BaseEstimator):\n    def __init__(self, cfg):\n        self.cfg = cfg\n        self.device = cfg.pose_estimator.device\n\n    def get_poses(self):\n        from vggt.models.vggt import VGGT\n        from vggt.utils.geometry import unproject_depth_map_to_point_map\n        from vggt.utils.load_fn import load_and_preprocess_images\n        from vggt.utils.pose_enc import pose_encoding_to_extri_intri\n\n        cfg = self.cfg\n        if self.device == \"cuda\" and not torch.cuda.is_available():\n            print(\"cuda not available. switching to cpu.\")\n            self.device = \"cpu\"\n        \n        dtype = torch.bfloat16 if torch.cuda.get_device_capability()[0] >= 8 else torch.float16\n        logging.info(\"Loading vggt...\")\n        model = VGGT.from_pretrained(\"facebook/VGGT-1B\").to(self.device)\n        save_path = self.cfg.pipeline.data_path\n        img_folder_path = os.path.join(save_path, \"input\")\n        img_paths = [os.path.join(img_folder_path, img_name) for img_name in os.listdir(img_folder_path)]\n        images = load_and_preprocess_images(img_paths).to(self.device)\n\n        with torch.no_grad(), torch.amp.autocast(\"cuda\", dtype=dtype):\n            images = images[None]\n            aggregated_tokens_list, ps_idx = model.aggregator(images)\n            pose_enc = model.camera_head(aggregated_tokens_list)[-1]\n            extrinsic, intrinsic = pose_encoding_to_extri_intri(pose_enc, images.shape[-2:])\n            depth_map, depth_conf = model.depth_head(aggregated_tokens_list, images, ps_idx)\n            point_map = unproject_depth_map_to_point_map(\n                depth_map.squeeze(0), \n                extrinsic.squeeze(0), \n                intrinsic.squeeze(0)\n            )\n            extrinsic, intrinsic = extrinsic.squeeze(), intrinsic.squeeze()\n            extrinsics_w2c = torch.eye(4)[None].repeat(len(extrinsic), 1, 1)\n            extrinsics_w2c[:, :3, :4] = extrinsic.cpu()\n            extrinsics_w2c = extrinsics_w2c.cpu().numpy()\n            intrinsics = intrinsic.cpu().numpy()\n\n            scaled_y, scaled_x = images.shape[-2:]\n            intrinsics[:, 0, 0] *= 720 / scaled_x\n            intrinsics[:, 1, 1] *= 480 / scaled_y\n            intrinsics[:, 0, 2] *= 720 / scaled_x\n            intrinsics[:, 1, 2] *= 480 / scaled_y\n\n            images = torch.stack([images[:, 0], images[:, -1]], dim=1)\n            point_map = np.stack([point_map[0], point_map[-1]], axis=0)\n            colors = images.permute(0, 1, 3, 4, 2).detach().cpu().numpy()\n            colors = colors.reshape(-1, 3)\n            point_map = point_map.reshape(-1, 3).astype(np.float32)\n        \n        pcd = o3d.geometry.PointCloud()\n        pcd.points = o3d.utility.Vector3dVector(point_map)\n        pcd.colors = o3d.utility.Vector3dVector(colors)\n        o3d.io.write_point_cloud(os.path.join(save_path, \"points3D.ply\"), pcd)\n        camera_dir = os.path.join(save_path, \"camera\")\n        os.makedirs(camera_dir, exist_ok=True)\n        for i, (w2c, intrinsic) in enumerate(zip(extrinsics_w2c, intrinsics)):\n            c2w = np.eye(4)\n            c2w[:3, :3] = w2c[:3, :3].T\n            c2w[:3, 3] = - w2c[:3, :3].T @ w2c[:3, 3]\n            np.savez(\n                os.path.join(camera_dir, f\"{i+1:04d}.npz\"), \n                pose=c2w,\n                intrinsics=intrinsic\n            )\n\ndef get_pose_estimator(cfg):\n    POSE_ESTIMATOR = {\n        \"colmap\": ColmapEstimator, \n        \"mast3r\": MASt3REstimator,\n        \"cut3r\": CUT3REstimator,\n        \"vggt\": VGGTEstimator,\n    }\n    return POSE_ESTIMATOR[cfg.pose_estimator.type](cfg)\n"
  },
  {
    "path": "field_construction/pose_estimator/utils.py",
    "content": "import os\nfrom copy import deepcopy\n\nimport numpy as np\nimport open3d as o3d\nimport torch\n\n\ndef storePly(path, xyz, rgb):\n    pcd = o3d.geometry.PointCloud()\n    pcd.points = o3d.utility.Vector3dVector(xyz)\n    pcd.colors = o3d.utility.Vector3dVector(rgb)\n    o3d.io.write_point_cloud(path, pcd)\n    \n    \ndef prepare_input(\n    img_paths, img_mask, size, raymaps=None, raymap_mask=None, revisit=1, update=True\n):\n    \"\"\"\n    Prepare input views for inference from a list of image paths.\n\n    Args:\n        img_paths (list): List of image file paths.\n        img_mask (list of bool): Flags indicating valid images.\n        size (int): Target image size.\n        raymaps (list, optional): List of ray maps.\n        raymap_mask (list, optional): Flags indicating valid ray maps.\n        revisit (int): How many times to revisit each view.\n        update (bool): Whether to update the state on revisits.\n\n    Returns:\n        list: A list of view dictionaries.\n    \"\"\"\n    # Import image loader (delayed import needed after adding ckpt path).\n    from cut3r.dust3r.utils.image import load_images\n\n    images, orig_shape = load_images(img_paths, size=size)\n    views = []\n\n    if raymaps is None and raymap_mask is None:\n        # Only images are provided.\n        for i in range(len(images)):\n            view = {\n                \"img\": images[i][\"img\"],\n                \"ray_map\": torch.full(\n                    (\n                        images[i][\"img\"].shape[0],\n                        6,\n                        images[i][\"img\"].shape[-2],\n                        images[i][\"img\"].shape[-1],\n                    ),\n                    torch.nan,\n                ),\n                \"true_shape\": torch.from_numpy(images[i][\"true_shape\"]),\n                \"idx\": i,\n                \"instance\": str(i),\n                \"camera_pose\": torch.from_numpy(np.eye(4, dtype=np.float32)).unsqueeze(\n                    0\n                ),\n                \"img_mask\": torch.tensor(True).unsqueeze(0),\n                \"ray_mask\": torch.tensor(False).unsqueeze(0),\n                \"update\": torch.tensor(True).unsqueeze(0),\n                \"reset\": torch.tensor(False).unsqueeze(0),\n            }\n            views.append(view)\n    else:\n        # Combine images and raymaps.\n        num_views = len(images) + len(raymaps)\n        assert len(img_mask) == len(raymap_mask) == num_views\n        assert sum(img_mask) == len(images) and sum(raymap_mask) == len(raymaps)\n\n        j = 0\n        k = 0\n        for i in range(num_views):\n            view = {\n                \"img\": (\n                    images[j][\"img\"]\n                    if img_mask[i]\n                    else torch.full_like(images[0][\"img\"], torch.nan)\n                ),\n                \"ray_map\": (\n                    raymaps[k]\n                    if raymap_mask[i]\n                    else torch.full_like(raymaps[0], torch.nan)\n                ),\n                \"true_shape\": (\n                    torch.from_numpy(images[j][\"true_shape\"])\n                    if img_mask[i]\n                    else torch.from_numpy(np.int32([raymaps[k].shape[1:-1][::-1]]))\n                ),\n                \"idx\": i,\n                \"instance\": str(i),\n                \"camera_pose\": torch.from_numpy(np.eye(4, dtype=np.float32)).unsqueeze(\n                    0\n                ),\n                \"img_mask\": torch.tensor(img_mask[i]).unsqueeze(0),\n                \"ray_mask\": torch.tensor(raymap_mask[i]).unsqueeze(0),\n                \"update\": torch.tensor(img_mask[i]).unsqueeze(0),\n                \"reset\": torch.tensor(False).unsqueeze(0),\n            }\n            if img_mask[i]:\n                j += 1\n            if raymap_mask[i]:\n                k += 1\n            views.append(view)\n        assert j == len(images) and k == len(raymaps)\n\n    if revisit > 1:\n        new_views = []\n        for r in range(revisit):\n            for i, view in enumerate(views):\n                new_view = deepcopy(view)\n                new_view[\"idx\"] = r * len(views) + i\n                new_view[\"instance\"] = str(r * len(views) + i)\n                if r > 0 and not update:\n                    new_view[\"update\"] = torch.tensor(False).unsqueeze(0)\n                new_views.append(new_view)\n        return new_views\n\n    return views, orig_shape\n    \n    \n\ndef prepare_output(outputs, orig_shape, outdir, revisit=1, use_pose=True):\n    \"\"\"\n    Process inference outputs to generate point clouds and camera parameters for visualization.\n\n    Args:\n        outputs (dict): Inference outputs.\n        revisit (int): Number of revisits per view.\n        use_pose (bool): Whether to transform points using camera pose.\n\n    Returns:\n        tuple: (points, colors, confidence, camera parameters dictionary)\n    \"\"\"\n    from cut3r.dust3r.post_process import estimate_focal_knowing_depth\n    from cut3r.dust3r.utils.camera import pose_encoding_to_camera\n    from cut3r.dust3r.utils.geometry import geotrf\n\n    # Only keep the outputs corresponding to one full pass.\n    valid_length = len(outputs[\"pred\"]) // revisit\n    outputs[\"pred\"] = outputs[\"pred\"][-valid_length:]\n    outputs[\"views\"] = outputs[\"views\"][-valid_length:]\n\n    pts3ds_self_ls = [output[\"pts3d_in_self_view\"].cpu() for output in outputs[\"pred\"]]\n    pts3ds_other = [output[\"pts3d_in_other_view\"].cpu() for output in outputs[\"pred\"]]\n    conf_self = [output[\"conf_self\"].cpu() for output in outputs[\"pred\"]]\n    conf_other = [output[\"conf\"].cpu() for output in outputs[\"pred\"]]\n    pts3ds_self = torch.cat(pts3ds_self_ls, 0)\n\n    # Recover camera poses.\n    pr_poses = [\n        pose_encoding_to_camera(pred[\"camera_pose\"].clone()).cpu()\n        for pred in outputs[\"pred\"]\n    ]\n    R_c2w = torch.cat([pr_pose[:, :3, :3] for pr_pose in pr_poses], 0)\n    t_c2w = torch.cat([pr_pose[:, :3, 3] for pr_pose in pr_poses], 0)\n\n    if use_pose:\n        transformed_pts3ds_other = []\n        for pose, pself in zip(pr_poses, pts3ds_self):\n            transformed_pts3ds_other.append(geotrf(pose, pself.unsqueeze(0)))\n        pts3ds_other = transformed_pts3ds_other\n        conf_other = conf_self\n\n    # Estimate focal length based on depth.\n    B, H, W, _ = pts3ds_self.shape\n    orig_H, orig_W = orig_shape\n    pp = torch.tensor([orig_W // 2, orig_H // 2], device=pts3ds_self.device).float().repeat(B, 1)\n    focal = estimate_focal_knowing_depth(pts3ds_self, pp, focal_mode=\"weiszfeld\")\n    # focal = focal.mean().repeat(len(focal))\n    focal_x = focal * orig_W / W\n    focal_y = focal * orig_H / H\n\n    colors = [\n        0.5 * (output[\"img\"].permute(0, 2, 3, 1) + 1.0) for output in outputs[\"views\"]\n    ]\n\n    cam_dict = {\n        \"focal\": focal.cpu().numpy(),\n        \"pp\": pp.cpu().numpy(),\n        \"R\": R_c2w.cpu().numpy(),\n        \"t\": t_c2w.cpu().numpy(),\n    }\n\n    cam2world_tosave = torch.cat(pr_poses)  # B, 4, 4\n    intrinsics_tosave = (\n        torch.eye(3).unsqueeze(0).repeat(cam2world_tosave.shape[0], 1, 1)\n    )  # B, 3, 3\n    intrinsics_tosave[:, 0, 0] = focal_x.detach().cpu()\n    intrinsics_tosave[:, 1, 1] = focal_y.detach().cpu() \n    intrinsics_tosave[:, 0, 2] = pp[:, 0]\n    intrinsics_tosave[:, 1, 2] = pp[:, 1]\n\n    os.makedirs(os.path.join(outdir, \"camera\"), exist_ok=True)\n\n    for f_id in range(len(cam2world_tosave)):\n        c2w = cam2world_tosave[f_id].cpu().numpy()\n        intrins = intrinsics_tosave[f_id].cpu().numpy()\n        np.savez(\n            os.path.join(outdir, \"camera\", f\"{f_id+1:04d}.npz\"),\n            pose=c2w,\n            intrinsics=intrins,\n        )\n\n    return pts3ds_other, colors, conf_other, cam_dict\n"
  },
  {
    "path": "field_construction/preprocessor.py",
    "content": "import glob\nimport logging\nimport os\nimport shutil\nimport subprocess\n\nimport cv2\nimport numpy as np\nimport torch\nfrom diffusers.models.autoencoders.vq_model import VQModel\nfrom safetensors.torch import load_file\nfrom torch.utils.data import DataLoader\nfrom torchvision import transforms\nfrom tqdm import tqdm\n\nfrom .auto_encoder import Autoencoder, Autoencoder_dataset\nfrom .pose_estimator import get_pose_estimator\nfrom .utils.loss_utils import cos_loss, l2_loss\nfrom .video_preprocessor import VideoPreprocessor\n\n\ndef extract_with_openseg(cfg):\n    import tensorflow as tf2\n    import tensorflow._api.v2.compat.v1 as tf\n    gpus = tf.config.experimental.list_physical_devices('GPU')\n    if gpus:\n        try:\n            for gpu in gpus:\n                tf.config.experimental.set_memory_growth(gpu, True)\n        except RuntimeError as e:\n            print(e)\n\n    openseg = tf2.saved_model.load(\n        cfg.feature_extractor.model_path, \n        tags=[tf.saved_model.tag_constants.SERVING]\n    )\n    imgs_path = os.path.join(cfg.pipeline.data_path, \"input\")\n    img_names = list(\n        filter(\n            lambda x: x.endswith(\"png\") or x.endswith(\"jpg\"), sorted(os.listdir(imgs_path))\n        )\n    )\n    img_list = []\n    np_image_string_list = []\n    for img_name in img_names:\n        img_path = os.path.join(imgs_path, img_name)\n        image = cv2.imread(img_path)\n        with tf.gfile.GFile(img_path, 'rb') as f:\n            np_image_string = np.array([f.read()])\n\n        image = torch.from_numpy(image)\n        img_list.append(image)\n        np_image_string_list.append(np_image_string)\n\n    images = [img_list[i].permute(2, 0, 1)[None, ...] for i in range(len(img_list))]\n    imgs = torch.cat(images)\n    save_path = os.path.join(cfg.pipeline.data_path, \"lang_features\")\n    os.makedirs(save_path, exist_ok=True)\n    embed_size = 768\n    for i, (img, np_image_string) in enumerate(tqdm((zip(imgs, np_image_string_list)), desc=\"Extracting lang features\", total=(len(imgs)))):\n        text_emb = tf.zeros([1, 1, embed_size])\n        results = openseg.signatures[\"serving_default\"](\n            inp_image_bytes=tf.convert_to_tensor(np_image_string[0]),\n            inp_text_emb=text_emb\n        )\n        img_info = results['image_info']\n        crop_sz = [\n            int(img_info[0, 0] * img_info[2, 0]),\n            int(img_info[0, 1] * img_info[2, 1])\n        ]\n        image_embedding_feat = results['image_embedding_feat'][:, :crop_sz[0], :crop_sz[1]]\n        img_size = (img.shape[1], img.shape[2])\n        feat_2d = tf.cast(\n            tf.image.resize_nearest_neighbor(\n                image_embedding_feat, img_size, align_corners=True\n            )[0], dtype=tf.float32\n        ).numpy()\n        # perform mask-pooling over feat2d\n        feat_2d = np.transpose(feat_2d, axes=(2, 0, 1))\n        pooled_feats2d = []\n        curr_mask = np.load(os.path.join(cfg.pipeline.data_path, \"lang_features_dim3\", str(i+1).zfill(4)+\"_s.npy\"))\n        for color_id in range(-1, curr_mask.max() + 1):\n            if not feat_2d[:, curr_mask == color_id].shape[-1]:\n                continue\n            pooled = feat_2d[:, curr_mask == color_id].mean(axis=-1)\n            pooled /= np.linalg.norm(pooled)\n            pooled_feats2d.append(pooled)\n\n        pooled_feats2d = np.stack(pooled_feats2d)\n        np.save(os.path.join(save_path, str(i+1).zfill(4)+\".npy\"), pooled_feats2d)\n\nclass Preprocessor:\n    def __init__(self, cfg):\n        self.cfg = cfg\n        if not cfg.pipeline.skip_video_process:\n            self.video_processor = VideoPreprocessor(cfg)\n        else:\n            self.video_processor = None\n\n        if not cfg.pipeline.skip_pose_estimate:\n            self.pose_estimator = get_pose_estimator(cfg)\n        else:\n            self.pose_estimator = None\n\n        if not cfg.pipeline.skip_lang_feature_extraction:\n            # load feature extractor\n            if cfg.feature_extractor.type == \"open-seg\":\n                self.lseg = None\n                self.sem_ae = Autoencoder()\n                self.sem_ae.cuda()\n\n            elif cfg.feature_extractor.type == \"lseg\":\n                self.lseg = LSegFeatureExtractor.from_pretrained(cfg.lseg.model_path)\n                self.lseg.to(cfg.lseg.device, dtype=torch.float32).eval()\n\n                self.sem_ae = VQModel(\n                    in_channels=512,\n                    out_channels=512,\n                    latent_channels=4,\n                    norm_num_groups=2,\n                    block_out_channels=[256, 64, 16],\n                    down_block_types=[\"DownEncoderBlock2D\"] * 3,\n                    up_block_types=[\"UpDecoderBlock2D\"] * 3,\n                    layers_per_block=1,\n                    norm_type=\"spatial\",\n                    num_vq_embeddings=1024,\n                )\n\n                self.sem_ae.load_state_dict(load_file(cfg.ae.model_path))\n                self.sem_ae.to(cfg.ae.device, dtype=torch.float32).eval()\n                self.img_transform = transforms.Compose(\n                    [\n                        transforms.Lambda(lambda x: x / 255),\n                        transforms.Normalize(\n                            mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5], inplace=True\n                        ),\n                    ]\n                )\n\n        else:\n            self.lseg = None\n            self.sem_ae = None\n            self.img_transform = None\n\n        \n    def generate_lang_features_with_openseg(self):\n        extract_with_openseg(self.cfg)\n        logging.info(\"Done feature extraction.\")\n\n        num_epochs = 400\n        os.makedirs(os.path.join(self.cfg.pipeline.data_path, \"ckpt\"), exist_ok=True)\n        save_path = os.path.join(self.cfg.pipeline.data_path, \"lang_features\")\n        train_dataset = Autoencoder_dataset(save_path)\n        train_loader = DataLoader(\n            dataset=train_dataset,\n            batch_size=512,\n            shuffle=True,\n            num_workers=32,\n            drop_last=False\n        )\n        test_loader = DataLoader(\n            dataset=train_dataset,\n            batch_size=512,\n            shuffle=False,\n            num_workers=32,\n            drop_last=False\n        )\n        optimizer = torch.optim.Adam(self.sem_ae.parameters(), lr=1e-4)\n        pbar = tqdm(range(num_epochs))\n        best_eval_loss = 100.0\n        best_epoch = 0\n\n        for epoch in pbar:\n            self.sem_ae.train()\n            for idx, feature in enumerate(train_loader):\n                data = feature.to(\"cuda\")\n                outputs_dim3 = self.sem_ae.encode(data)\n                outputs = self.sem_ae.decode(outputs_dim3)\n\n                l2loss = l2_loss(outputs, data)\n                cosloss = cos_loss(outputs, data)\n                loss = l2loss + cosloss * 0.001\n\n                optimizer.zero_grad()\n                loss.backward()\n                optimizer.step()\n            if epoch > 300:\n                eval_loss = 0.0\n                self.sem_ae.eval()\n                for idx, feature in enumerate(test_loader):\n                    data = feature.to(\"cuda\")\n                    with torch.no_grad():\n                        outputs = self.sem_ae(data)\n                    loss = l2_loss(outputs, data) + cos_loss(outputs, data)\n                    eval_loss += loss * len(feature)\n                eval_loss = eval_loss / len(train_dataset)\n                print(\"eval_loss:{:.8f}\".format(eval_loss))\n                if eval_loss < best_eval_loss:\n                    best_eval_loss = eval_loss\n                    best_epoch = epoch\n                    torch.save(self.sem_ae.state_dict(), os.path.join(self.cfg.pipeline.data_path, \"ckpt\", \"best_ckpt.pth\"))\n            pbar.set_postfix({\"Loss\": f\"{loss.item():.{7}f}\"})\n            pbar.update(1)\n\n        print(f\"best_epoch: {best_epoch}\")\n        print(\"best_loss: {:.8f}\".format(best_eval_loss))\n        # compress lang_feats with ae\n        logging.info(\"Compresing language features with best ckpt...\")\n        best_state_dict = torch.load(os.path.join(self.cfg.pipeline.data_path, \"ckpt\", \"best_ckpt.pth\"), weights_only=False)\n        self.sem_ae.load_state_dict(best_state_dict)\n        # check device\n        orig_lang_feat_names = sorted(glob.glob(os.path.join(save_path, \"*.npy\")))\n        dim3_save_path = os.path.join(self.cfg.pipeline.data_path, \"lang_features_dim3\")\n        with torch.no_grad():\n            for idx, orig_lang_feat_name in enumerate(orig_lang_feat_names):\n                orig_lang_feat = torch.from_numpy(np.load(orig_lang_feat_name)).cuda()\n                mask = np.load(os.path.join(dim3_save_path, str(idx+1).zfill(4)+\"_s.npy\"))\n                # check dtype\n                lang_feat = self.sem_ae.encode(orig_lang_feat).detach().cpu().numpy()\n                full_lang_feat = np.zeros((3, mask.shape[0], mask.shape[1]))\n                curr_id = 0\n                for color_id in range(-1, mask.max() + 1):\n                    if not mask[mask == color_id].shape[-1]:\n                        continue\n                    full_lang_feat[:, mask == color_id] = lang_feat[curr_id][:, None]\n                    curr_id += 1\n                np.save(os.path.join(dim3_save_path, str(idx+1).zfill(4)+\"_f.npy\"), full_lang_feat)\n\n    def generate_lang_features_with_lseg(self):\n        from cogvideox_interpolation.lseg import LSegFeatureExtractor\n        imgs_path = os.path.join(self.cfg.pipeline.data_path, \"input\")\n        img_names = list(\n            filter(\n                lambda x: x.endswith(\"png\") or x.endswith(\"jpg\"), os.listdir(imgs_path)\n            )\n        )\n        save_path = os.path.join(self.cfg.pipeline.data_path, \"lang_features_dim4\")\n        os.makedirs(save_path, exist_ok=True)\n        for img_name in tqdm(img_names):\n            img_path = os.path.join(imgs_path, img_name)\n            img = cv2.imread(img_path)\n            resolution = (640, 480)\n            img = cv2.resize(img, resolution)\n            frame_embed = self.img_transform(torch.from_numpy(img).permute(2, 0, 1)).to(\n                self.cfg.lseg.device, dtype=torch.float32\n            )[None, ...]\n            lseg_features = self.lseg.extract_features(frame_embed)\n            if lseg_features.device != self.sem_ae.device:\n                lseg_features = lseg_features.to(\"cpu\").to(self.sem_ae.device)\n\n            z = self.sem_ae.encode(lseg_features).latents  # [1, 4, 240, 320]\n            np.save(\n                os.path.join(save_path, f\"{img_name.split('.')[0]}_f.npy\"),\n                z.detach().cpu().numpy(),\n            )\n\n    def select_valid_data(self):\n        cfg = self.cfg\n        curr_data_path = cfg.pipeline.data_path\n        raw_data_path = os.path.join(curr_data_path, \"raw\")\n        os.makedirs(raw_data_path, exist_ok=True)\n        dirs_to_move = [\"camera\", \"input\", \"lang_features_dim3\", \"normal\"]\n        \n        orig_view_nums = len(os.listdir(os.path.join(curr_data_path, \"camera\")))\n        indexs = np.linspace(0, orig_view_nums-1, cfg.pipeline.chunk_num * cfg.pipeline.keep_num_per_chunk)\n        indexs = indexs.astype(np.int32).tolist()\n        cfg.pipeline.selected_idxs = indexs\n\n        for dir_to_move in dirs_to_move:\n            shutil.move(os.path.join(curr_data_path, dir_to_move), raw_data_path)\n            src_dir = os.path.join(raw_data_path, dir_to_move)\n            tar_dir = os.path.join(curr_data_path, dir_to_move)\n            os.makedirs(tar_dir, exist_ok=True)\n            file_lst = sorted(os.listdir(src_dir))\n            file_suffix = file_lst[0].split(\".\")[-1]\n            if dir_to_move == \"lang_features_dim3\":\n                f_file_lst = [file_lst[2 * idx] for idx in cfg.pipeline.selected_idxs]\n                s_file_lst = [file_lst[2 * idx + 1] for idx in cfg.pipeline.selected_idxs]\n                for file_idx in range(len(f_file_lst)):\n                    shutil.copy(\n                        os.path.join(src_dir, f_file_lst[file_idx]),\n                        os.path.join(tar_dir, f\"{file_idx+1:04d}_f.{file_suffix}\"),\n                    )\n                    shutil.copy(\n                        os.path.join(src_dir, s_file_lst[file_idx]),\n                        os.path.join(tar_dir, f\"{file_idx+1:04d}_s.{file_suffix}\"),\n                    )\n            else:\n                file_lst = [file_lst[idx] for idx in cfg.pipeline.selected_idxs]\n                for file_idx, file_name in enumerate(file_lst):\n                    shutil.copy(\n                        os.path.join(src_dir, file_name),\n                        os.path.join(tar_dir, f\"{file_idx+1:04d}.{file_suffix}\"),\n                    )\n\n    def preprocess(self):\n        if not self.cfg.pipeline.skip_video_process:\n            logging.info(\"Processing input videos...\")\n            self.video_processor.video_process()\n\n        if not self.cfg.pipeline.skip_pose_estimate:\n            logging.info(\"Estimating poses...\")\n            self.pose_estimator.get_poses()\n\n        if not self.cfg.pipeline.skip_lang_feature_extraction:\n            logging.info(\"Generating language features...\")\n            if self.cfg.feature_extractor.type == \"lseg\":\n                self.generate_lang_features_with_lseg()\n            elif self.cfg.feature_extractor.type == \"open-seg\":\n                self.generate_lang_features_with_openseg()\n\n        if self.cfg.pipeline.selection:\n            logging.info(\"Selecting views with higher confidence...\")\n            self.select_valid_data()\n\n        logging.info(\"Done all preprocessing!\")\n"
  },
  {
    "path": "field_construction/scene/__init__.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use\n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport json\nimport os\nimport random\n\nimport numpy as np\nimport torch\n\nfrom field_construction.scene.dataset_readers import sceneLoadTypeCallbacks\nfrom field_construction.scene.gaussian_model import GaussianModel\nfrom field_construction.utils.camera_utils import (camera_to_JSON,\n                                                   cameraList_from_camInfos)\nfrom field_construction.utils.system_utils import searchForMaxIteration\n\n\nclass Scene:\n    gaussians: GaussianModel\n\n    def __init__(self, args, gaussians: GaussianModel, load_iteration=None, shuffle=True,\n                 resolution_scales=[1.0]):\n        \"\"\"b\n        :param path: Path to colmap scene main folder.\n        \"\"\"\n        self.model_path = args.model_path\n        os.makedirs(self.model_path, exist_ok=True)\n        self.loaded_iter = None\n        self.gaussians = gaussians\n        self.source_path = args.source_path\n\n        if load_iteration:\n            if load_iteration == -1:\n                self.loaded_iter = searchForMaxIteration(os.path.join(self.model_path, \"point_cloud\"))\n            else:\n                self.loaded_iter = load_iteration\n            print(\"Loading trained model at iteration {}\".format(self.loaded_iter))\n\n        self.train_cameras = {}\n        self.test_cameras = {}\n\n        if os.path.exists(os.path.join(args.source_path, \"sparse\")):\n            scene_info = sceneLoadTypeCallbacks[\"Colmap\"](args.source_path, \"images\", args.eval, loaded_iter=self.loaded_iter)\n        elif os.path.exists(os.path.join(args.source_path, \"transforms_train.json\")):\n            print(\"Found transforms_train.json file, assuming Blender data set!\")\n            scene_info = sceneLoadTypeCallbacks[\"Blender\"](args.source_path, args.white_background, args.eval)\n        else:\n            print(\"Assuming CUT3R data set...\")\n            scene_info = sceneLoadTypeCallbacks[\"CUT3R\"](args.source_path, args.white_background, args.eval, loaded_iter=self.loaded_iter)\n\n        if not self.loaded_iter:\n            with open(scene_info.ply_path, 'rb') as src_file, open(os.path.join(self.model_path, \"input.ply\"), 'wb') as dest_file:\n                dest_file.write(src_file.read())\n            json_cams = []\n            camlist = []\n            if scene_info.test_cameras:\n                camlist.extend(scene_info.test_cameras)\n            if scene_info.train_cameras:\n                camlist.extend(scene_info.train_cameras)\n            for id, cam in enumerate(camlist):\n                json_cams.append(camera_to_JSON(id, cam))\n            with open(os.path.join(self.model_path, \"cameras.json\"), 'w') as file:\n                json.dump(json_cams, file)\n\n        if shuffle:\n            random.shuffle(scene_info.train_cameras)  # Multi-res consistent random shuffling\n            random.shuffle(scene_info.test_cameras)  # Multi-res consistent random shuffling\n\n        self.cameras_extent = scene_info.nerf_normalization[\"radius\"]\n        print(f\"cameras_extent {self.cameras_extent}\")\n\n        self.multi_view_num = args.multi_view_num\n        for resolution_scale in resolution_scales:\n            print(\"Loading Training Cameras\")\n            self.train_cameras[resolution_scale] = cameraList_from_camInfos(scene_info.train_cameras, resolution_scale,\n                                                                            args)\n            print(\"Loading Test Cameras\")\n            self.test_cameras[resolution_scale] = cameraList_from_camInfos(scene_info.test_cameras, resolution_scale,\n                                                                           args)\n\n            print(\"computing nearest_id\")\n            self.world_view_transforms = []\n            camera_centers = []\n            center_rays = []\n            for id, cur_cam in enumerate(self.train_cameras[resolution_scale]):\n                self.world_view_transforms.append(cur_cam.world_view_transform)\n                camera_centers.append(cur_cam.camera_center)\n                R = torch.tensor(cur_cam.R).float().cuda()\n                T = torch.tensor(cur_cam.T).float().cuda()\n                center_ray = torch.tensor([0.0, 0.0, 1.0]).float().cuda()\n                center_ray = center_ray @ R.transpose(-1, -2)\n                center_rays.append(center_ray)\n            self.world_view_transforms = torch.stack(self.world_view_transforms)\n            camera_centers = torch.stack(camera_centers, dim=0)\n            center_rays = torch.stack(center_rays, dim=0)\n            center_rays = torch.nn.functional.normalize(center_rays, dim=-1)\n            diss = torch.norm(camera_centers[:, None] - camera_centers[None], dim=-1).detach().cpu().numpy()\n            tmp = torch.sum(center_rays[:, None] * center_rays[None], dim=-1)\n            angles = torch.arccos(tmp) * 180 / 3.14159\n            angles = angles.detach().cpu().numpy()\n            with open(os.path.join(self.model_path, \"multi_view.json\"), 'w') as file:\n                for id, cur_cam in enumerate(self.train_cameras[resolution_scale]):\n                    sorted_indices = np.lexsort((angles[id], diss[id]))\n                    # sorted_indices = np.lexsort((diss[id], angles[id]))\n                    mask = (angles[id][sorted_indices] < args.multi_view_max_angle) & \\\n                           (diss[id][sorted_indices] > args.multi_view_min_dis) & \\\n                           (diss[id][sorted_indices] < args.multi_view_max_dis)\n                    sorted_indices = sorted_indices[mask]\n                    multi_view_num = min(self.multi_view_num, len(sorted_indices))\n                    json_d = {'ref_name': cur_cam.image_name, 'nearest_name': []}\n                    for index in sorted_indices[:multi_view_num]:\n                        cur_cam.nearest_id.append(index)\n                        cur_cam.nearest_names.append(self.train_cameras[resolution_scale][index].image_name)\n                        json_d[\"nearest_name\"].append(self.train_cameras[resolution_scale][index].image_name)\n                    json_str = json.dumps(json_d, separators=(',', ':'))\n                    file.write(json_str)\n                    file.write('\\n')\n                    # print(f\"frame {cur_cam.image_name}, neareast {cur_cam.nearest_names}, \\\n                    #       angle {angles[id][cur_cam.nearest_id]}, diss {diss[id][cur_cam.nearest_id]}\")\n\n        if self.loaded_iter:\n            self.gaussians.load_ply(os.path.join(self.model_path,\n                                                 \"point_cloud\",\n                                                 \"iteration_\" + str(self.loaded_iter),\n                                                 \"point_cloud.ply\"))\n        else:\n            self.gaussians.create_from_pcd(scene_info.point_cloud, self.cameras_extent)\n        self.gaussians.init_RT_seq(self.train_cameras)\n\n    def save(self, iteration, mask=None, include_feature=False, finetune=False):\n        if include_feature:\n            point_cloud_path = os.path.join(self.model_path, \"point_cloud/iteration_{}\".format(iteration))\n        else:\n            point_cloud_path = os.path.join(self.model_path, \"point_cloud/iteration_{}\".format(iteration))\n        if finetune:\n            self.gaussians.save_ply(os.path.join(point_cloud_path, \"finetune.ply\"), mask, include_feature)\n        else:\n            self.gaussians.save_ply(os.path.join(point_cloud_path, \"point_cloud.ply\"), mask, include_feature)\n\n    def getTrainCameras(self, scale=1.0):\n        return self.train_cameras[scale]\n\n    def getTestCameras(self, scale=1.0):\n        return self.test_cameras[scale]\n"
  },
  {
    "path": "field_construction/scene/app_model.py",
    "content": "import os\n\nimport torch\nimport torch.nn as nn\n\n\ndef searchForMaxIteration(folder):\n    saved_iters = [int(fname.split(\"_\")[-1]) for fname in os.listdir(folder)]\n    return max(saved_iters)\n\nclass AppModel(nn.Module):\n    def __init__(self, num_images=1600):  \n        super().__init__()   \n        self.appear_ab = nn.Parameter(torch.zeros(num_images, 2).cuda())\n        self.optimizer = torch.optim.Adam([\n                                {'params': self.appear_ab, 'lr': 0.001, \"name\": \"appear_ab\"},\n                                ], betas=(0.9, 0.99))\n            \n    def save_weights(self, model_path, iteration):\n        out_weights_path = os.path.join(model_path, \"app_model/iteration_{}\".format(iteration))\n        os.makedirs(out_weights_path, exist_ok=True)\n        print(f\"save app model. path: {out_weights_path}\")\n        torch.save(self.state_dict(), os.path.join(out_weights_path, 'app.pth'))\n\n    def load_weights(self, model_path, iteration=-1):\n        if iteration == -1:\n            loaded_iter = searchForMaxIteration(os.path.join(model_path, \"app_model\"))\n        else:\n            loaded_iter = iteration\n        weights_path = os.path.join(model_path, \"app_model/iteration_{}/app.pth\".format(loaded_iter))\n        state_dict = torch.load(weights_path)\n        self.load_state_dict(state_dict)\n\n    def freeze(self):\n        self.appear_ab.requires_grad_(False)\n"
  },
  {
    "path": "field_construction/scene/cameras.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use\n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport copy\nimport os\n\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nfrom PIL import Image\nfrom torch import nn\n\nfrom field_construction.utils.general_utils import PILtoTorch\nfrom field_construction.utils.graphics_utils import (\n    fov2focal, getProjectionMatrix, getProjectionMatrixCenterShift,\n    getWorld2View2)\n\n\ndef dilate(bin_img, ksize=6):\n    pad = (ksize - 1) // 2\n    bin_img = F.pad(bin_img, pad=[pad, pad, pad, pad], mode='reflect')\n    out = F.max_pool2d(bin_img, kernel_size=ksize, stride=1, padding=0)\n    return out\n\ndef erode(bin_img, ksize=12):\n    out = 1 - dilate(1 - bin_img, ksize)\n    return out\n\ndef process_image(image_path, resolution, ncc_scale):\n    image = Image.open(image_path)\n    if len(image.split()) > 3:\n        resized_image_rgb = torch.cat([PILtoTorch(im, resolution) for im in image.split()[:3]], dim=0)\n        loaded_mask = PILtoTorch(image.split()[3], resolution)\n        gt_image = resized_image_rgb\n        if ncc_scale != 1.0:\n            ncc_resolution = (int(resolution[0]/ncc_scale), int(resolution[1]/ncc_scale))\n            resized_image_rgb = torch.cat([PILtoTorch(im, ncc_resolution) for im in image.split()[:3]], dim=0)\n    else:\n        resized_image_rgb = PILtoTorch(image, resolution)\n        loaded_mask = None\n        gt_image = resized_image_rgb\n        if ncc_scale != 1.0:\n            ncc_resolution = (int(resolution[0]/ncc_scale), int(resolution[1]/ncc_scale))\n            resized_image_rgb = PILtoTorch(image, ncc_resolution)\n    gray_image = (0.299 * resized_image_rgb[0] + 0.587 * resized_image_rgb[1] + 0.114 * resized_image_rgb[2])[None]\n    return gt_image, gray_image, loaded_mask\n\nclass Camera(nn.Module):\n    def __init__(self, colmap_id, R, T, FoVx, FoVy,\n                 image_width, image_height,\n                 image_path, image_name, uid,\n                 trans=np.array([0.0, 0.0, 0.0]), scale=1.0, \n                 ncc_scale=1.0,\n                 preload_img=True, data_device = \"cuda\"\n                 ):\n        super(Camera, self).__init__()\n        self.uid = uid\n        self.nearest_id = []\n        self.nearest_names = []\n        self.colmap_id = colmap_id\n        self.R = R\n        self.T = T\n        self.FoVx = FoVx\n        self.FoVy = FoVy\n        self.image_name = image_name\n        self.image_path = image_path\n        self.image_width = image_width\n        self.image_height = image_height\n        self.resolution = (image_width, image_height)\n        self.Fx = fov2focal(FoVx, self.image_width)\n        self.Fy = fov2focal(FoVy, self.image_height)\n        self.Cx = 0.5 * self.image_width\n        self.Cy = 0.5 * self.image_height\n\n        base_image_path = \"/\".join(self.image_path.split(\"/\")[:-2])\n        self.normal_path = os.path.join(base_image_path, \"normal\", self.image_path.split(\"/\")[-1])\n        \n        try:\n            self.data_device = torch.device(data_device)\n        except Exception as e:\n            print(e)\n            print(f\"[Warning] Custom device {data_device} failed, fallback to default cuda device\" )\n            self.data_device = torch.device(\"cuda\")\n\n        self.original_image, self.image_gray, self.mask = None, None, None\n        self.preload_img = preload_img\n        self.ncc_scale = ncc_scale\n        if self.preload_img:\n            gt_image, gray_image, loaded_mask = process_image(self.image_path, self.resolution, ncc_scale)\n            self.original_image = gt_image.to(self.data_device)\n            self.original_image_gray = gray_image.to(self.data_device)\n            self.mask = loaded_mask\n\n\n        self.zfar = 100.0\n        self.znear = 0.01\n\n        self.trans = trans\n        self.scale = scale\n\n        self.world_view_transform = torch.tensor(getWorld2View2(R, T, trans, scale)).transpose(0, 1).cuda()\n        self.projection_matrix = getProjectionMatrix(znear=self.znear, zfar=self.zfar, fovX=self.FoVx, fovY=self.FoVy).transpose(0,1).cuda()\n        self.full_proj_transform = (self.world_view_transform.unsqueeze(0).bmm(self.projection_matrix.unsqueeze(0))).squeeze(0)\n        self.camera_center = self.world_view_transform.inverse()[3, :3]\n        self.plane_mask, self.non_plane_mask = None, None\n\n    def get_image(self):\n        if self.preload_img:\n            return self.original_image.cuda(), self.original_image_gray.cuda()\n        else:\n            gt_image, gray_image, _ = process_image(self.image_path, self.resolution, self.ncc_scale)\n            return gt_image.cuda(), gray_image.cuda()\n    \n    def get_normal(self):\n        _normal = Image.open(self.normal_path)\n        resized_normal = PILtoTorch(_normal, self.resolution)\n        resized_normal = resized_normal[:3]\n        _normal = - (resized_normal * 2 - 1).cuda()\n        # normalize normal\n        _normal = _normal.permute(1, 2, 0) @ (torch.linalg.inv(torch.as_tensor(self.R).float()).cuda())\n        normal_gt = _normal.permute(2, 0, 1)\n        normal_norm = torch.norm(normal_gt, dim=0, keepdim=True)\n        normal_mask = ~((normal_norm > 1.1) | (normal_norm < 0.9))\n        normal_gt /= normal_norm\n\n        return normal_gt, normal_mask\n\n        \n    def get_language_feature(self, language_feature_dir):\n        language_feature_name = os.path.join(language_feature_dir, self.image_name)\n        feature_map = torch.from_numpy(np.load(language_feature_name + '_f.npy')).to(self.data_device)\n        if len(feature_map.shape) < 4:\n            feature_map = feature_map[None]\n        point_feature = F.interpolate(feature_map, (self.image_height, self.image_width), mode=\"bilinear\", align_corners=False)\n        seg_map = torch.from_numpy(np.load(language_feature_name + \"_s.npy\")).to(self.data_device) # (h, w)\n        seg_map = seg_map.long()\n        mask = seg_map != -1\n        # perform mask_pooling:\n        point_feature = point_feature.squeeze(0) # (feat_dim, h, w)\n        # for color_id in range(seg_map.max() + 1):\n        #     point_feature[:, seg_map == color_id] = point_feature[:, seg_map == color_id].mean(dim=-1, keepdim=True)\n\n        return point_feature, mask, seg_map\n\n    def get_calib_matrix_nerf(self, scale=1.0):\n        intrinsic_matrix = torch.tensor([[self.Fx/scale, 0, self.Cx/scale], [0, self.Fy/scale, self.Cy/scale], [0, 0, 1]]).float()\n        extrinsic_matrix = self.world_view_transform.transpose(0,1).contiguous() # cam2world\n        return intrinsic_matrix, extrinsic_matrix\n    \n    def get_rays(self, scale=1.0):\n        W, H = int(self.image_width/scale), int(self.image_height/scale)\n        ix, iy = torch.meshgrid(\n            torch.arange(W), torch.arange(H), indexing='xy')\n        rays_d = torch.stack(\n                    [(ix-self.Cx/scale) / self.Fx * scale,\n                    (iy-self.Cy/scale) / self.Fy * scale,\n                    torch.ones_like(ix)], -1).float().cuda()\n        return rays_d\n    \n    def get_k(self, scale=1.0):\n        K = torch.tensor([[self.Fx / scale, 0, self.Cx / scale],\n                        [0, self.Fy / scale, self.Cy / scale],\n                        [0, 0, 1]]).cuda()\n        return K\n    \n    def get_inv_k(self, scale=1.0):\n        K_T = torch.tensor([[scale/self.Fx, 0, -self.Cx/self.Fx],\n                            [0, scale/self.Fy, -self.Cy/self.Fy],\n                            [0, 0, 1]]).cuda()\n        return K_T\n\nclass MiniCam:\n    def __init__(self, width, height, fovy, fovx, znear, zfar, world_view_transform, full_proj_transform):\n        self.image_width = width\n        self.image_height = height    \n        self.FoVy = fovy\n        self.FoVx = fovx\n        self.znear = znear\n        self.zfar = zfar\n        self.world_view_transform = world_view_transform\n        self.full_proj_transform = full_proj_transform\n        view_inv = torch.inverse(self.world_view_transform)\n        self.camera_center = view_inv[3][:3]\n\ndef sample_cam(cam_l: Camera, cam_r: Camera):\n    cam = copy.copy(cam_l)\n\n    Rt = np.zeros((4, 4))\n    Rt[:3, :3] = cam_l.R.transpose()\n    Rt[:3, 3] = cam_l.T\n    Rt[3, 3] = 1.0\n\n    Rt2 = np.zeros((4, 4))\n    Rt2[:3, :3] = cam_r.R.transpose()\n    Rt2[:3, 3] = cam_r.T\n    Rt2[3, 3] = 1.0\n\n    C2W = np.linalg.inv(Rt)\n    C2W2 = np.linalg.inv(Rt2)\n    w = np.random.rand()\n    pose_c2w_at_unseen =  w * C2W + (1 - w) * C2W2\n    Rt = np.linalg.inv(pose_c2w_at_unseen)\n    cam.R = Rt[:3, :3]\n    cam.T = Rt[:3, 3]\n\n    cam.world_view_transform = torch.tensor(getWorld2View2(cam.R, cam.T, cam.trans, cam.scale)).transpose(0, 1).cuda()\n    cam.projection_matrix = getProjectionMatrix(znear=cam.znear, zfar=cam.zfar, fovX=cam.FoVx, fovY=cam.FoVy).transpose(0,1).cuda()\n    cam.full_proj_transform = (cam.world_view_transform.unsqueeze(0).bmm(cam.projection_matrix.unsqueeze(0))).squeeze(0)\n    cam.camera_center = cam.world_view_transform.inverse()[3, :3]\n    return cam\n"
  },
  {
    "path": "field_construction/scene/colmap_loader.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use\n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport collections\nimport struct\n\nimport numpy as np\n\nCameraModel = collections.namedtuple(\n    \"CameraModel\", [\"model_id\", \"model_name\", \"num_params\"])\nCamera = collections.namedtuple(\n    \"Camera\", [\"id\", \"model\", \"width\", \"height\", \"params\"])\nBaseImage = collections.namedtuple(\n    \"Image\", [\"id\", \"qvec\", \"tvec\", \"camera_id\", \"name\", \"xys\", \"point3D_ids\"])\nPoint3D = collections.namedtuple(\n    \"Point3D\", [\"id\", \"xyz\", \"rgb\", \"error\", \"image_ids\", \"point2D_idxs\"])\nCAMERA_MODELS = {\n    CameraModel(model_id=0, model_name=\"SIMPLE_PINHOLE\", num_params=3),\n    CameraModel(model_id=1, model_name=\"PINHOLE\", num_params=4),\n    CameraModel(model_id=2, model_name=\"SIMPLE_RADIAL\", num_params=4),\n    CameraModel(model_id=3, model_name=\"RADIAL\", num_params=5),\n    CameraModel(model_id=4, model_name=\"OPENCV\", num_params=8),\n    CameraModel(model_id=5, model_name=\"OPENCV_FISHEYE\", num_params=8),\n    CameraModel(model_id=6, model_name=\"FULL_OPENCV\", num_params=12),\n    CameraModel(model_id=7, model_name=\"FOV\", num_params=5),\n    CameraModel(model_id=8, model_name=\"SIMPLE_RADIAL_FISHEYE\", num_params=4),\n    CameraModel(model_id=9, model_name=\"RADIAL_FISHEYE\", num_params=5),\n    CameraModel(model_id=10, model_name=\"THIN_PRISM_FISHEYE\", num_params=12)\n}\nCAMERA_MODEL_IDS = dict([(camera_model.model_id, camera_model)\n                         for camera_model in CAMERA_MODELS])\nCAMERA_MODEL_NAMES = dict([(camera_model.model_name, camera_model)\n                           for camera_model in CAMERA_MODELS])\n\n\ndef qvec2rotmat(qvec):\n    return np.array([\n        [1 - 2 * qvec[2]**2 - 2 * qvec[3]**2,\n         2 * qvec[1] * qvec[2] - 2 * qvec[0] * qvec[3],\n         2 * qvec[3] * qvec[1] + 2 * qvec[0] * qvec[2]],\n        [2 * qvec[1] * qvec[2] + 2 * qvec[0] * qvec[3],\n         1 - 2 * qvec[1]**2 - 2 * qvec[3]**2,\n         2 * qvec[2] * qvec[3] - 2 * qvec[0] * qvec[1]],\n        [2 * qvec[3] * qvec[1] - 2 * qvec[0] * qvec[2],\n         2 * qvec[2] * qvec[3] + 2 * qvec[0] * qvec[1],\n         1 - 2 * qvec[1]**2 - 2 * qvec[2]**2]])\n\ndef rotmat2qvec(R):\n    Rxx, Ryx, Rzx, Rxy, Ryy, Rzy, Rxz, Ryz, Rzz = R.flat\n    K = np.array([\n        [Rxx - Ryy - Rzz, 0, 0, 0],\n        [Ryx + Rxy, Ryy - Rxx - Rzz, 0, 0],\n        [Rzx + Rxz, Rzy + Ryz, Rzz - Rxx - Ryy, 0],\n        [Ryz - Rzy, Rzx - Rxz, Rxy - Ryx, Rxx + Ryy + Rzz]]) / 3.0\n    eigvals, eigvecs = np.linalg.eigh(K)\n    qvec = eigvecs[[3, 0, 1, 2], np.argmax(eigvals)]\n    if qvec[0] < 0:\n        qvec *= -1\n    return qvec\n\nclass Image(BaseImage):\n    def qvec2rotmat(self):\n        return qvec2rotmat(self.qvec)\n\ndef read_next_bytes(fid, num_bytes, format_char_sequence, endian_character=\"<\"):\n    \"\"\"Read and unpack the next bytes from a binary file.\n    :param fid:\n    :param num_bytes: Sum of combination of {2, 4, 8}, e.g. 2, 6, 16, 30, etc.\n    :param format_char_sequence: List of {c, e, f, d, h, H, i, I, l, L, q, Q}.\n    :param endian_character: Any of {@, =, <, >, !}\n    :return: Tuple of read and unpacked values.\n    \"\"\"\n    data = fid.read(num_bytes)\n    return struct.unpack(endian_character + format_char_sequence, data)\n\ndef read_points3D_text(path):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadPoints3DText(const std::string& path)\n        void Reconstruction::WritePoints3DText(const std::string& path)\n    \"\"\"\n    xyzs = None\n    rgbs = None\n    errors = None\n    num_points = 0\n    with open(path, \"r\") as fid:\n        while True:\n            line = fid.readline()\n            if not line:\n                break\n            line = line.strip()\n            if len(line) > 0 and line[0] != \"#\":\n                num_points += 1\n\n\n    xyzs = np.empty((num_points, 3))\n    rgbs = np.empty((num_points, 3))\n    errors = np.empty((num_points, 1))\n    count = 0\n    with open(path, \"r\") as fid:\n        while True:\n            line = fid.readline()\n            if not line:\n                break\n            line = line.strip()\n            if len(line) > 0 and line[0] != \"#\":\n                elems = line.split()\n                xyz = np.array(tuple(map(float, elems[1:4])))\n                rgb = np.array(tuple(map(int, elems[4:7])))\n                error = np.array(float(elems[7]))\n                if error > 2.0:\n                    continue\n                xyzs[count] = xyz\n                rgbs[count] = rgb\n                errors[count] = error\n                count += 1\n    xyzs = np.delete(xyzs, np.arange(count,num_points),axis=0)\n    rgbs = np.delete(rgbs, np.arange(count,num_points),axis=0)\n    errors = np.delete(errors, np.arange(count,num_points),axis=0)\n    return xyzs, rgbs, errors\n\ndef read_points3D_binary(path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadPoints3DBinary(const std::string& path)\n        void Reconstruction::WritePoints3DBinary(const std::string& path)\n    \"\"\"\n\n\n    with open(path_to_model_file, \"rb\") as fid:\n        num_points = read_next_bytes(fid, 8, \"Q\")[0]\n\n        xyzs = np.empty((num_points, 3))\n        rgbs = np.empty((num_points, 3))\n        errors = np.empty((num_points, 1))\n        count = 0\n        for p_id in range(num_points):\n            binary_point_line_properties = read_next_bytes(\n                fid, num_bytes=43, format_char_sequence=\"QdddBBBd\")\n            xyz = np.array(binary_point_line_properties[1:4])\n            rgb = np.array(binary_point_line_properties[4:7])\n            error = np.array(binary_point_line_properties[7])\n            track_length = read_next_bytes(\n                fid, num_bytes=8, format_char_sequence=\"Q\")[0]\n            track_elems = read_next_bytes(\n                fid, num_bytes=8*track_length,\n                format_char_sequence=\"ii\"*track_length)\n            if error > 2.0 or track_length < 3:\n                continue\n            xyzs[count] = xyz\n            rgbs[count] = rgb\n            errors[count] = error\n            count += 1\n    xyzs = np.delete(xyzs, np.arange(count,num_points),axis=0)\n    rgbs = np.delete(rgbs, np.arange(count,num_points),axis=0)\n    errors = np.delete(errors, np.arange(count,num_points),axis=0)\n    return xyzs, rgbs, errors\n\ndef read_intrinsics_text(path):\n    \"\"\"\n    Taken from https://github.com/colmap/colmap/blob/dev/scripts/python/read_write_model.py\n    \"\"\"\n    cameras = {}\n    with open(path, \"r\") as fid:\n        while True:\n            line = fid.readline()\n            if not line:\n                break\n            line = line.strip()\n            if len(line) > 0 and line[0] != \"#\":\n                elems = line.split()\n                camera_id = int(elems[0])\n                model = elems[1]\n                assert model == \"PINHOLE\", \"While the loader support other types, the rest of the code assumes PINHOLE\"\n                width = int(elems[2])\n                height = int(elems[3])\n                params = np.array(tuple(map(float, elems[4:])))\n                cameras[camera_id] = Camera(id=camera_id, model=model,\n                                            width=width, height=height,\n                                            params=params)\n    return cameras\n\ndef read_extrinsics_binary(path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::ReadImagesBinary(const std::string& path)\n        void Reconstruction::WriteImagesBinary(const std::string& path)\n    \"\"\"\n    images = {}\n    with open(path_to_model_file, \"rb\") as fid:\n        num_reg_images = read_next_bytes(fid, 8, \"Q\")[0]\n        for _ in range(num_reg_images):\n            binary_image_properties = read_next_bytes(\n                fid, num_bytes=64, format_char_sequence=\"idddddddi\")\n            image_id = binary_image_properties[0]\n            qvec = np.array(binary_image_properties[1:5])\n            tvec = np.array(binary_image_properties[5:8])\n            camera_id = binary_image_properties[8]\n            image_name = \"\"\n            current_char = read_next_bytes(fid, 1, \"c\")[0]\n            while current_char != b\"\\x00\":   # look for the ASCII 0 entry\n                image_name += current_char.decode(\"utf-8\")\n                current_char = read_next_bytes(fid, 1, \"c\")[0]\n            num_points2D = read_next_bytes(fid, num_bytes=8,\n                                           format_char_sequence=\"Q\")[0]\n            x_y_id_s = read_next_bytes(fid, num_bytes=24*num_points2D,\n                                       format_char_sequence=\"ddq\"*num_points2D)\n            xys = np.column_stack([tuple(map(float, x_y_id_s[0::3])),\n                                   tuple(map(float, x_y_id_s[1::3]))])\n            point3D_ids = np.array(tuple(map(int, x_y_id_s[2::3])))\n            images[image_id] = Image(\n                id=image_id, qvec=qvec, tvec=tvec,\n                camera_id=camera_id, name=image_name,\n                xys=xys, point3D_ids=point3D_ids)\n    return images\n\n\ndef read_intrinsics_binary(path_to_model_file):\n    \"\"\"\n    see: src/base/reconstruction.cc\n        void Reconstruction::WriteCamerasBinary(const std::string& path)\n        void Reconstruction::ReadCamerasBinary(const std::string& path)\n    \"\"\"\n    cameras = {}\n    with open(path_to_model_file, \"rb\") as fid:\n        num_cameras = read_next_bytes(fid, 8, \"Q\")[0]\n        for _ in range(num_cameras):\n            camera_properties = read_next_bytes(\n                fid, num_bytes=24, format_char_sequence=\"iiQQ\")\n            camera_id = camera_properties[0]\n            model_id = camera_properties[1]\n            model_name = CAMERA_MODEL_IDS[camera_properties[1]].model_name\n            width = camera_properties[2]\n            height = camera_properties[3]\n            num_params = CAMERA_MODEL_IDS[model_id].num_params\n            params = read_next_bytes(fid, num_bytes=8*num_params,\n                                     format_char_sequence=\"d\"*num_params)\n            cameras[camera_id] = Camera(id=camera_id,\n                                        model=model_name,\n                                        width=width,\n                                        height=height,\n                                        params=np.array(params))\n        assert len(cameras) == num_cameras\n    return cameras\n\n\ndef read_extrinsics_text(path):\n    \"\"\"\n    Taken from https://github.com/colmap/colmap/blob/dev/scripts/python/read_write_model.py\n    \"\"\"\n    images = {}\n    with open(path, \"r\") as fid:\n        while True:\n            line = fid.readline()\n            if not line:\n                break\n            line = line.strip()\n            if len(line) > 0 and line[0] != \"#\":\n                elems = line.split()\n                image_id = int(elems[0])\n                qvec = np.array(tuple(map(float, elems[1:5])))\n                tvec = np.array(tuple(map(float, elems[5:8])))\n                camera_id = int(elems[8])\n                image_name = elems[9]\n                elems = fid.readline().split()\n                xys = np.column_stack([tuple(map(float, elems[0::3])),\n                                       tuple(map(float, elems[1::3]))])\n                point3D_ids = np.array(tuple(map(int, elems[2::3])))\n                images[image_id] = Image(\n                    id=image_id, qvec=qvec, tvec=tvec,\n                    camera_id=camera_id, name=image_name,\n                    xys=xys, point3D_ids=point3D_ids)\n    return images\n\n\ndef read_colmap_bin_array(path):\n    \"\"\"\n    Taken from https://github.com/colmap/colmap/blob/dev/scripts/python/read_dense.py\n\n    :param path: path to the colmap binary file.\n    :return: nd array with the floating point values in the value\n    \"\"\"\n    with open(path, \"rb\") as fid:\n        width, height, channels = np.genfromtxt(fid, delimiter=\"&\", max_rows=1,\n                                                usecols=(0, 1, 2), dtype=int)\n        fid.seek(0)\n        num_delimiter = 0\n        byte = fid.read(1)\n        while True:\n            if byte == b\"&\":\n                num_delimiter += 1\n                if num_delimiter >= 3:\n                    break\n            byte = fid.read(1)\n        array = np.fromfile(fid, np.float32)\n    array = array.reshape((width, height, channels), order=\"F\")\n    return np.transpose(array, (1, 0, 2)).squeeze()\n\ndef write_cameras_text(cameras, path):\n    \"\"\"\n    see: src/colmap/scene/reconstruction.cc\n        void Reconstruction::WriteCamerasText(const std::string& path)\n        void Reconstruction::ReadCamerasText(const std::string& path)\n    \"\"\"\n    HEADER = (\n        \"# Camera list with one line of data per camera:\\n\"\n        + \"#   CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]\\n\"\n        + \"# Number of cameras: {}\\n\".format(len(cameras))\n    )\n    with open(path, \"w\") as fid:\n        fid.write(HEADER)\n        for _, cam in cameras.items():\n            to_write = [cam.id, cam.model, cam.width, cam.height, *cam.params]\n            line = \" \".join([str(elem) for elem in to_write])\n            fid.write(line + \"\\n\")\n\n\ndef write_next_bytes(fid, data, format_char_sequence, endian_character=\"<\"):\n    \"\"\"pack and write to a binary file.\n    :param fid:\n    :param data: data to send, if multiple elements are sent at the same time,\n    they should be encapsuled either in a list or a tuple\n    :param format_char_sequence: List of {c, e, f, d, h, H, i, I, l, L, q, Q}.\n    should be the same length as the data list or tuple\n    :param endian_character: Any of {@, =, <, >, !}\n    \"\"\"\n    if isinstance(data, (list, tuple)):\n        bytes = struct.pack(endian_character + format_char_sequence, *data)\n    else:\n        bytes = struct.pack(endian_character + format_char_sequence, data)\n    fid.write(bytes)\n\n\ndef write_cameras_binary(cameras, path_to_model_file):\n    \"\"\"\n    see: src/colmap/scene/reconstruction.cc\n        void Reconstruction::WriteCamerasBinary(const std::string& path)\n        void Reconstruction::ReadCamerasBinary(const std::string& path)\n    \"\"\"\n    with open(path_to_model_file, \"wb\") as fid:\n        write_next_bytes(fid, len(cameras), \"Q\")\n        for _, cam in cameras.items():\n            model_id = CAMERA_MODEL_NAMES[cam.model].model_id\n            camera_properties = [cam.id, model_id, cam.width, cam.height]\n            write_next_bytes(fid, camera_properties, \"iiQQ\")\n            for p in cam.params:\n                write_next_bytes(fid, float(p), \"d\")\n    return cameras\n\n\ndef write_images_text(images, path):\n    \"\"\"\n    see: src/colmap/scene/reconstruction.cc\n        void Reconstruction::ReadImagesText(const std::string& path)\n        void Reconstruction::WriteImagesText(const std::string& path)\n    \"\"\"\n    if len(images) == 0:\n        mean_observations = 0\n    else:\n        mean_observations = sum(\n            (len(img.point3D_ids) for _, img in images.items())\n        ) / len(images)\n    HEADER = (\n        \"# Image list with two lines of data per image:\\n\"\n        + \"#   IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME\\n\"\n        + \"#   POINTS2D[] as (X, Y, POINT3D_ID)\\n\"\n        + \"# Number of images: {}, mean observations per image: {}\\n\".format(\n            len(images), mean_observations\n        )\n    )\n\n    with open(path, \"w\") as fid:\n        fid.write(HEADER)\n        for _, img in images.items():\n            image_header = [\n                img.id,\n                *img.qvec,\n                *img.tvec,\n                img.camera_id,\n                img.name,\n            ]\n            first_line = \" \".join(map(str, image_header))\n            fid.write(first_line + \"\\n\")\n\n            points_strings = []\n            for xy, point3D_id in zip(img.xys, img.point3D_ids):\n                points_strings.append(\" \".join(map(str, [*xy, point3D_id])))\n            fid.write(\" \".join(points_strings) + \"\\n\")\n\n\ndef write_images_binary(images, path_to_model_file):\n    \"\"\"\n    see: src/colmap/scene/reconstruction.cc\n        void Reconstruction::ReadImagesBinary(const std::string& path)\n        void Reconstruction::WriteImagesBinary(const std::string& path)\n    \"\"\"\n    with open(path_to_model_file, \"wb\") as fid:\n        write_next_bytes(fid, len(images), \"Q\")\n        for _, img in images.items():\n            write_next_bytes(fid, img.id, \"i\")\n            write_next_bytes(fid, img.qvec.tolist(), \"dddd\")\n            write_next_bytes(fid, img.tvec.tolist(), \"ddd\")\n            write_next_bytes(fid, img.camera_id, \"i\")\n            for char in img.name:\n                write_next_bytes(fid, char.encode(\"utf-8\"), \"c\")\n            write_next_bytes(fid, b\"\\x00\", \"c\")\n            write_next_bytes(fid, len(img.point3D_ids), \"Q\")\n            for xy, p3d_id in zip(img.xys, img.point3D_ids):\n                write_next_bytes(fid, [*xy, p3d_id], \"ddq\")\n\n\ndef write_points3D_text(points3D, path):\n    \"\"\"\n    see: src/colmap/scene/reconstruction.cc\n        void Reconstruction::ReadPoints3DText(const std::string& path)\n        void Reconstruction::WritePoints3DText(const std::string& path)\n    \"\"\"\n    if len(points3D) == 0:\n        mean_track_length = 0\n    else:\n        mean_track_length = sum(\n            (len(pt.image_ids) for _, pt in points3D.items())\n        ) / len(points3D)\n    HEADER = (\n        \"# 3D point list with one line of data per point:\\n\"\n        + \"#   POINT3D_ID, X, Y, Z, R, G, B, ERROR, TRACK[] as (IMAGE_ID, POINT2D_IDX)\\n\"\n        + \"# Number of points: {}, mean track length: {}\\n\".format(\n            len(points3D), mean_track_length\n        )\n    )\n\n    with open(path, \"w\") as fid:\n        fid.write(HEADER)\n        for _, pt in points3D.items():\n            point_header = [pt.id, *pt.xyz, *pt.rgb, pt.error]\n            fid.write(\" \".join(map(str, point_header)) + \" \")\n            track_strings = []\n            for image_id, point2D in zip(pt.image_ids, pt.point2D_idxs):\n                track_strings.append(\" \".join(map(str, [image_id, point2D])))\n            fid.write(\" \".join(track_strings) + \"\\n\")\n\n\ndef write_points3D_binary(points3D, path_to_model_file):\n    \"\"\"\n    see: src/colmap/scene/reconstruction.cc\n        void Reconstruction::ReadPoints3DBinary(const std::string& path)\n        void Reconstruction::WritePoints3DBinary(const std::string& path)\n    \"\"\"\n    with open(path_to_model_file, \"wb\") as fid:\n        write_next_bytes(fid, len(points3D), \"Q\")\n        for _, pt in points3D.items():\n            write_next_bytes(fid, pt.id, \"Q\")\n            write_next_bytes(fid, pt.xyz.tolist(), \"ddd\")\n            write_next_bytes(fid, pt.rgb.tolist(), \"BBB\")\n            write_next_bytes(fid, pt.error, \"d\")\n            track_length = pt.image_ids.shape[0]\n            write_next_bytes(fid, track_length, \"Q\")\n            for image_id, point2D_id in zip(pt.image_ids, pt.point2D_idxs):\n                write_next_bytes(fid, [image_id, point2D_id], \"ii\")"
  },
  {
    "path": "field_construction/scene/dataset_readers.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use\n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport json\nimport os\nimport sys\nfrom pathlib import Path\nfrom typing import NamedTuple\n\nimport numpy as np\nimport open3d as o3d\nfrom PIL import Image\nfrom plyfile import PlyData, PlyElement\nfrom scipy.spatial.transform import Rotation as R\n\nfrom field_construction.scene.colmap_loader import (Camera, Image, qvec2rotmat,\n                                                    read_extrinsics_binary,\n                                                    read_extrinsics_text,\n                                                    read_intrinsics_binary,\n                                                    read_intrinsics_text,\n                                                    read_points3D_binary,\n                                                    read_points3D_text)\nfrom field_construction.scene.gaussian_model import BasicPointCloud\nfrom field_construction.utils.graphics_utils import (focal2fov, fov2focal,\n                                                     getWorld2View2)\nfrom field_construction.utils.sh_utils import SH2RGB\n\n\nclass CameraInfo(NamedTuple):\n    uid: int\n    global_id: int\n    R: np.array\n    T: np.array\n    FovY: np.array\n    FovX: np.array\n    image_path: str\n    image_name: str\n    width: int\n    height: int\n    fx: float\n    fy: float\n\nclass SceneInfo(NamedTuple):\n    point_cloud: BasicPointCloud\n    train_cameras: list\n    test_cameras: list\n    nerf_normalization: dict\n    ply_path: str\n\ndef getNerfppNorm(cam_info):\n    def get_center_and_diag(cam_centers):\n        cam_centers = np.hstack(cam_centers)\n        avg_cam_center = np.mean(cam_centers, axis=1, keepdims=True)\n        center = avg_cam_center\n        dist = np.linalg.norm(cam_centers - center, axis=0, keepdims=True)\n        diagonal = np.max(dist)\n        return center.flatten(), diagonal\n\n    cam_centers = []\n\n    for cam in cam_info:\n        W2C = getWorld2View2(cam.R, cam.T)\n        C2W = np.linalg.inv(W2C)\n        cam_centers.append(C2W[:3, 3:4])\n\n    center, diagonal = get_center_and_diag(cam_centers)\n    radius = diagonal * 1.1\n\n    translate = -center\n\n    return {\"translate\": translate, \"radius\": radius}\n\ndef load_poses(pose_path, num):\n    poses = []\n    with open(pose_path, \"r\") as f:\n        lines = f.readlines()\n    for i in range(num):\n        line = lines[i]\n        c2w = np.array(list(map(float, line.split()))).reshape(4, 4)\n        c2w[:3,3] = c2w[:3,3] * 10.0\n        w2c = np.linalg.inv(c2w)\n        w2c = w2c\n        poses.append(w2c)\n    poses = np.stack(poses, axis=0)\n    return poses\n\ndef readColmapCameras(cam_extrinsics, cam_intrinsics, images_folder):\n    cam_infos = []\n    for idx, key in enumerate(cam_extrinsics):\n        sys.stdout.write('\\r')\n        # the exact output you're looking for:\n        sys.stdout.write(\"Reading camera {}/{}\".format(idx+1, len(cam_extrinsics)))\n        sys.stdout.flush()\n\n        extr = cam_extrinsics[key]\n        intr = cam_intrinsics[extr.camera_id]\n        height = intr.height\n        width = intr.width\n\n        uid = intr.id\n        R = np.transpose(qvec2rotmat(extr.qvec))\n        T = np.array(extr.tvec)\n\n        if intr.model==\"SIMPLE_PINHOLE\":\n            focal_length_x = intr.params[0]\n            FovY = focal2fov(focal_length_x, height)\n            FovX = focal2fov(focal_length_x, width)\n        elif intr.model==\"PINHOLE\":\n            focal_length_x = intr.params[0]\n            focal_length_y = intr.params[1]\n            FovY = focal2fov(focal_length_y, height)\n            FovX = focal2fov(focal_length_x, width)\n        else:\n            assert False, \"Colmap camera model not handled: only undistorted datasets (PINHOLE or SIMPLE_PINHOLE cameras) supported!\"\n\n        image_path = os.path.join(images_folder, os.path.basename(extr.name))\n        image_name = os.path.basename(image_path).split(\".\")[0]\n\n        cam_info = CameraInfo(uid=uid, global_id=idx, R=R, T=T, FovY=FovY, FovX=FovX,\n                              image_path=image_path, image_name=image_name, \n                              width=width, height=height, fx=focal_length_x, fy=focal_length_y)\n        cam_infos.append(cam_info)\n    sys.stdout.write('\\n')\n    return cam_infos\n\ndef fetchPly_o3d(path):\n    pcd = o3d.io.read_point_cloud(path)\n    positions = np.asarray(pcd.points)\n    colors = np.asarray(pcd.colors)\n    normals = np.zeros_like(positions)\n    return BasicPointCloud(points=positions, colors=colors, normals=normals)\n\ndef fetchPly(path):\n    plydata = PlyData.read(path)\n    vertices = plydata['vertex']\n    positions = np.vstack([vertices['x'], vertices['y'], vertices['z']]).T\n    colors = np.vstack([vertices['red'], vertices['green'], vertices['blue']]).T / 255.0\n    normals = np.vstack([vertices['nx'], vertices['ny'], vertices['nz']]).T\n    return BasicPointCloud(points=positions, colors=colors, normals=normals)\n\ndef storePly(path, xyz, rgb):\n    # Define the dtype for the structured array\n    dtype = [('x', 'f4'), ('y', 'f4'), ('z', 'f4'),\n            ('nx', 'f4'), ('ny', 'f4'), ('nz', 'f4'),\n            ('red', 'u1'), ('green', 'u1'), ('blue', 'u1')]\n    \n    normals = np.zeros_like(xyz)\n\n    elements = np.empty(xyz.shape[0], dtype=dtype)\n    attributes = np.concatenate((xyz, normals, rgb), axis=1)\n    elements[:] = list(map(tuple, attributes))\n\n    # Create the PlyData object and write to file\n    vertex_element = PlyElement.describe(elements, 'vertex')\n    ply_data = PlyData([vertex_element])\n    ply_data.write(path)\n\ndef readColmapSceneInfo(path, images, eval, llffhold=10, loaded_iter=None):\n    try:\n        cameras_extrinsic_file = os.path.join(path, \"sparse/0\", \"images.txt\")\n        cameras_intrinsic_file = os.path.join(path, \"sparse/0\", \"cameras.txt\")\n        cam_extrinsics = read_extrinsics_text(cameras_extrinsic_file)\n        cam_intrinsics = read_intrinsics_text(cameras_intrinsic_file)\n    except:\n        cameras_extrinsic_file = os.path.join(path, \"sparse/0\", \"images.bin\")\n        cameras_intrinsic_file = os.path.join(path, \"sparse/0\", \"cameras.bin\")\n        cam_extrinsics = read_extrinsics_binary(cameras_extrinsic_file)\n        cam_intrinsics = read_intrinsics_binary(cameras_intrinsic_file)\n    \n    reading_dir = \"input\" if images == None else images\n    cam_infos_unsorted = readColmapCameras(cam_extrinsics=cam_extrinsics, cam_intrinsics=cam_intrinsics, images_folder=os.path.join(path, reading_dir))\n    # cam_infos = sorted(cam_infos_unsorted.copy(), key = lambda x : int(x.image_name.split('_')[-1]))\n    cam_infos = sorted(cam_infos_unsorted.copy(), key = lambda x : x.image_name)\n    \n    js_file = f\"{path}/split.json\"\n    train_list = None\n    test_list = None\n    if os.path.exists(js_file):\n        with open(js_file) as file:\n            meta = json.load(file)\n            train_list = meta[\"train\"]\n            test_list = meta[\"test\"]\n            print(f\"train_list {len(train_list)}, test_list {len(test_list)}\")\n\n    if train_list is not None:\n        train_cam_infos = [c for idx, c in enumerate(cam_infos) if c.image_name in train_list]\n        test_cam_infos = [c for idx, c in enumerate(cam_infos) if c.image_name in test_list]\n        print(f\"train_cam_infos {len(train_cam_infos)}, test_cam_infos {len(test_cam_infos)}\")\n    elif eval:\n        train_cam_infos = [c for idx, c in enumerate(cam_infos) if idx % llffhold != 0]\n        test_cam_infos = [c for idx, c in enumerate(cam_infos) if idx % llffhold == 0]\n        print(\"train_cam_infos: \", len(train_cam_infos))\n        print(\"test_cam_infos: \", len(test_cam_infos))\n    else:\n        train_cam_infos = cam_infos\n        test_cam_infos = []\n        print(\"only train_cam_infos: \", len(train_cam_infos))\n    nerf_normalization = getNerfppNorm(train_cam_infos)\n\n    ply_path = os.path.join(path, \"sparse/0/points3D.ply\")\n    bin_path = os.path.join(path, \"sparse/0/points3D.bin\")\n    txt_path = os.path.join(path, \"sparse/0/points3D.txt\")\n    if not loaded_iter:\n        if not os.path.exists(ply_path):\n            print(\"Converting point3d.bin to .ply, will happen only the first time you open the scene.\")\n            try:\n                xyz, rgb, _ = read_points3D_binary(bin_path)\n                print(f\"xyz {xyz.shape}\")\n            except:\n                xyz, rgb, _ = read_points3D_text(txt_path)\n            storePly(ply_path, xyz, rgb)\n        try:\n            pcd = fetchPly(ply_path)\n        except:\n            pcd = None\n    else:\n        pcd = None\n\n    scene_info = SceneInfo(point_cloud=pcd,\n                           train_cameras=train_cam_infos,\n                           test_cameras=test_cam_infos,\n                           nerf_normalization=nerf_normalization,\n                           ply_path=ply_path)\n    return scene_info\n\ndef read_camera_npz(camera_dir):\n    images = {}\n    cameras = {}\n    for file_name in sorted(os.listdir(camera_dir)):\n        if not file_name.endswith(\".npz\"):\n            continue\n        \n        file_path = os.path.join(camera_dir, file_name)\n        data = np.load(file_path)\n        pose = data[\"pose\"]\n        intrinsics = data[\"intrinsics\"]\n        \n        R_c2w = pose[:3, :3]\n        t_c2w = pose[:3, 3]\n        R_w2c = R_c2w.T\n        t_w2c = - R_w2c @ t_c2w\n        \n        rotation = R.from_matrix(R_w2c)\n        quat = rotation.as_quat()  \n        qvec = np.array([quat[3], quat[0], quat[1], quat[2]])\n        tvec = t_w2c\n        \n        fx = intrinsics[0, 0]\n        fy = intrinsics[1, 1]\n        cx = intrinsics[0, 2]\n        cy = intrinsics[1, 2]\n        \n        model_name = 'PINHOLE'\n        params = np.array([fx, fy, cx, cy], dtype=np.float64)\n        \n        width = int(cx * 2)\n        height = int(cy * 2)\n        \n        try:\n            image_id = int(os.path.splitext(file_name)[0])\n        except:\n            image_id = int(os.path.splitext(file_name.split(\"_\")[1])[0])\n\n        camera_id = image_id\n        \n        cameras[camera_id] = Camera(\n            id=camera_id,\n            model=model_name,\n            width=width,\n            height=height,\n            params=params\n        )\n        \n        image_name = os.path.splitext(file_name)[0] + \".png\"\n        images[image_id] = Image(\n            id=image_id,\n            qvec=qvec,\n            tvec=tvec,\n            camera_id=camera_id,\n            name=image_name,\n            xys=np.zeros((0, 2)), \n            point3D_ids=np.zeros(0, dtype=int)\n        )\n    \n    return images, cameras\n    \n\ndef readCUT3RInfo(path, images, eval, llffhold=10, loaded_iter=None):\n    cameras_file = os.path.join(path, \"camera\")\n    extrinsics, intrinsics = read_camera_npz(cameras_file)\n    reading_dir = \"input\"\n    cam_infos_unsorted = readColmapCameras(cam_extrinsics=extrinsics, cam_intrinsics=intrinsics, images_folder=os.path.join(path, reading_dir))\n    # cam_infos = sorted(cam_infos_unsorted.copy(), key = lambda x : int(x.image_name.split('_')[-1]))\n    cam_infos = sorted(cam_infos_unsorted.copy(), key = lambda x : x.image_name)\n    \n    js_file = f\"{path}/split.json\"\n    train_list = None\n    test_list = None\n    if os.path.exists(js_file):\n        with open(js_file) as file:\n            meta = json.load(file)\n            train_list = meta[\"train\"]\n            test_list = meta[\"test\"]\n            print(f\"train_list {len(train_list)}, test_list {len(test_list)}\")\n\n    if train_list is not None:\n        train_cam_infos = [c for idx, c in enumerate(cam_infos) if c.image_name in train_list]\n        test_cam_infos = [c for idx, c in enumerate(cam_infos) if c.image_name in test_list]\n        print(f\"train_cam_infos {len(train_cam_infos)}, test_cam_infos {len(test_cam_infos)}\")\n    elif eval:\n        train_cam_infos = [c for idx, c in enumerate(cam_infos) if idx % llffhold != 0]\n        test_cam_infos = [c for idx, c in enumerate(cam_infos) if idx % llffhold == 0]\n        print(\"train_cam_infos: \", len(train_cam_infos))\n        print(\"test_cam_infos: \", len(test_cam_infos))\n    else:\n        train_cam_infos = cam_infos\n        test_cam_infos = []\n        print(\"only train_cam_infos: \", len(train_cam_infos))\n    nerf_normalization = getNerfppNorm(train_cam_infos)\n\n    ply_path = os.path.join(path, \"points3D.ply\")\n    bin_path = os.path.join(path, \"points3D.bin\")\n    txt_path = os.path.join(path, \"points3D.txt\")\n    if not loaded_iter:\n        if not os.path.exists(ply_path):\n            print(\"Converting point3d.bin to .ply, will happen only the first time you open the scene.\")\n            try:\n                xyz, rgb, _ = read_points3D_binary(bin_path)\n                print(f\"xyz {xyz.shape}\")\n            except:\n                xyz, rgb, _ = read_points3D_text(txt_path)\n            storePly(ply_path, xyz, rgb)\n        try:\n            pcd = fetchPly_o3d(ply_path)\n        except:\n            pcd = None\n    else:\n        pcd = None\n\n    scene_info = SceneInfo(point_cloud=pcd,\n                           train_cameras=train_cam_infos,\n                           test_cameras=test_cam_infos,\n                           nerf_normalization=nerf_normalization,\n                           ply_path=ply_path)\n    return scene_info\n\n\n\ndef readCamerasFromTransforms(path, transformsfile, white_background, extension=\".png\"):\n    cam_infos = []\n\n    with open(os.path.join(path, transformsfile)) as json_file:\n        contents = json.load(json_file)\n        fovx = contents[\"camera_angle_x\"]\n\n        frames = contents[\"frames\"]\n        for idx, frame in enumerate(frames):\n            cam_name = os.path.join(path, frame[\"file_path\"] + extension)\n\n            # NeRF 'transform_matrix' is a camera-to-world transform\n            c2w = np.array(frame[\"transform_matrix\"])\n            # change from OpenGL/Blender camera axes (Y up, Z back) to COLMAP (Y down, Z forward)\n            c2w[:3, 1:3] *= -1\n\n            # get the world-to-camera transform and set R, T\n            w2c = np.linalg.inv(c2w)\n            R = np.transpose(w2c[:3,:3])  # R is stored transposed due to 'glm' in CUDA code\n            T = w2c[:3, 3]\n\n            image_path = os.path.join(path, cam_name)\n            image_name = Path(cam_name).stem\n            image = Image.open(image_path)\n\n            im_data = np.array(image.convert(\"RGBA\"))\n\n            bg = np.array([1,1,1]) if white_background else np.array([0, 0, 0])\n\n            norm_data = im_data / 255.0\n            arr = norm_data[:,:,:3] * norm_data[:, :, 3:4] + bg * (1 - norm_data[:, :, 3:4])\n            image = Image.fromarray(np.array(arr*255.0, dtype=np.byte), \"RGB\")\n\n            fovy = focal2fov(fov2focal(fovx, image.size[0]), image.size[1])\n            FovY = fovy \n            FovX = fovx\n\n            cam_infos.append(CameraInfo(uid=idx, global_id=idx, R=R, T=T, FovY=FovY, FovX=FovX, image=image,\n                            image_path=image_path, image_name=image_name, width=image.size[0], height=image.size[1]))\n            \n    return cam_infos\n\ndef readNerfSyntheticInfo(path, white_background, eval, extension=\".png\"):\n    print(\"Reading Training Transforms\")\n    train_cam_infos = readCamerasFromTransforms(path, \"transforms_train.json\", white_background, extension)\n    print(\"Reading Test Transforms\")\n    test_cam_infos = readCamerasFromTransforms(path, \"transforms_test.json\", white_background, extension)\n    if not eval:\n        train_cam_infos.extend(test_cam_infos)\n        test_cam_infos = []\n\n    nerf_normalization = getNerfppNorm(train_cam_infos)\n\n    ply_path = os.path.join(path, \"points3d.ply\")\n    if not os.path.exists(ply_path):\n        # Since this data set has no colmap data, we start with random points\n        num_pts = 100_000\n        print(f\"Generating random point cloud ({num_pts})...\")\n        \n        # We create random points inside the bounds of the synthetic Blender scenes\n        xyz = np.random.random((num_pts, 3)) * 2.6 - 1.3\n        shs = np.random.random((num_pts, 3)) / 255.0\n        pcd = BasicPointCloud(points=xyz, colors=SH2RGB(shs), normals=np.zeros((num_pts, 3)))\n\n        storePly(ply_path, xyz, SH2RGB(shs) * 255)\n    try:\n        pcd = fetchPly(ply_path)\n    except:\n        pcd = None\n\n    scene_info = SceneInfo(point_cloud=pcd,\n                           train_cameras=train_cam_infos,\n                           test_cameras=test_cam_infos,\n                           nerf_normalization=nerf_normalization,\n                           ply_path=ply_path)\n    return scene_info\n\nsceneLoadTypeCallbacks = {\n    \"Colmap\": readColmapSceneInfo,\n    \"Blender\" : readNerfSyntheticInfo,\n    \"CUT3R\": readCUT3RInfo\n}"
  },
  {
    "path": "field_construction/scene/gaussian_model.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use\n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport os\n\nimport numpy as np\nimport torch\nfrom plyfile import PlyData, PlyElement\nfrom pytorch3d.transforms import quaternion_to_matrix\nfrom simple_knn._C import distCUDA2\nfrom torch import nn\n\nfrom field_construction.scene.per_point_adam import PerPointAdam\nfrom field_construction.utils.general_utils import (build_rotation,\n                                                    build_scaling,\n                                                    build_scaling_rotation,\n                                                    get_expon_lr_func,\n                                                    inverse_sigmoid,\n                                                    strip_symmetric)\nfrom field_construction.utils.graphics_utils import BasicPointCloud\nfrom field_construction.utils.pose_utils import get_tensor_from_camera\nfrom field_construction.utils.sh_utils import RGB2SH\nfrom field_construction.utils.system_utils import mkdir_p\n\n\ndef dilate(bin_img, ksize=5):\n    pad = (ksize - 1) // 2\n    bin_img = torch.nn.functional.pad(bin_img, pad=[pad, pad, pad, pad], mode='reflect')\n    out = torch.nn.functional.max_pool2d(bin_img, kernel_size=ksize, stride=1, padding=0)\n    return out\n\ndef erode(bin_img, ksize=5):\n    out = 1 - dilate(1 - bin_img, ksize)\n    return out\n\nclass GaussianModel:\n\n    def setup_functions(self):\n        def build_covariance_from_scaling_rotation(scaling, scaling_modifier, rotation):\n            L = build_scaling_rotation(scaling_modifier * scaling, rotation)\n            actual_covariance = L @ L.transpose(1, 2)\n            symm = strip_symmetric(actual_covariance)\n            return symm\n        \n        self.scaling_activation = torch.exp\n        self.scaling_inverse_activation = torch.log\n\n        self.covariance_activation = build_covariance_from_scaling_rotation\n\n        self.opacity_activation = torch.sigmoid\n        self.inverse_opacity_activation = inverse_sigmoid\n\n        self.rotation_activation = torch.nn.functional.normalize\n\n    def __init__(self, sh_degree : int):\n        self.active_sh_degree = 0\n        self.max_sh_degree = sh_degree  \n        self._xyz = torch.empty(0)\n        self._knn_f = torch.empty(0)\n        self._features_dc = torch.empty(0)\n        self._features_rest = torch.empty(0)\n        self._scaling = torch.empty(0)\n        self._rotation = torch.empty(0)\n        self._opacity = torch.empty(0)\n        self._language_feature = torch.empty(0)\n        self._instance_feature=torch.empty(0)\n        self.max_radii2D = torch.empty(0)\n        self.max_weight = torch.empty(0)\n        self.xyz_gradient_accum = torch.empty(0)\n        self.xyz_gradient_accum_abs = torch.empty(0)\n        self.denom = torch.empty(0)\n        self.denom_abs = torch.empty(0)\n        self.optimizer = None\n        self.cam_optimizer = None\n        self.percent_dense = 0\n        self.spatial_lr_scale = 0\n        self.knn_dists = None\n        self.knn_idx = None\n        self.setup_functions()\n        self.use_app = False\n\n    def capture(self, include_feature=False):\n        if include_feature:\n            return (\n                self.active_sh_degree,\n                self._xyz,\n                self._knn_f,\n                self._features_dc,\n                self._features_rest,\n                self._scaling,\n                self._rotation,\n                self._opacity,\n                self._language_feature,\n                self._instance_feature,\n                self.max_radii2D,\n                self.max_weight,\n                self.xyz_gradient_accum,\n                self.xyz_gradient_accum_abs,\n                self.denom,\n                self.denom_abs,\n                self.optimizer.state_dict(),\n                self.cam_optimizer.state_dict(),\n                self.spatial_lr_scale,\n                self.P\n            )\n        else:\n            return (\n                self.active_sh_degree,\n                self._xyz,\n                self._knn_f,\n                self._features_dc,\n                self._features_rest,\n                self._scaling,\n                self._rotation,\n                self._opacity,\n                self.max_radii2D,\n                self.max_weight,\n                self.xyz_gradient_accum,\n                self.xyz_gradient_accum_abs,\n                self.denom,\n                self.denom_abs,\n                self.optimizer.state_dict(),\n                self.cam_optimizer.state_dict(),\n                self.spatial_lr_scale,\n                self.P\n            )\n    \n    def restore(self, model_args, training_args, mode='train'):\n        # Ckpt with training feature (20 arguments)\n        if len(model_args) == 20:\n            (self.active_sh_degree, \n            self._xyz, \n            self._knn_f,\n            self._features_dc, \n            self._features_rest,\n            self._scaling, \n            self._rotation, \n            self._opacity,\n            self._language_feature, # Added training feature: language feature\n            self._instance_feature, # Added training feature: instance feature\n            self.max_radii2D, \n            self.max_weight,\n            xyz_gradient_accum, \n            xyz_gradient_accum_abs,\n            denom,\n            denom_abs,\n            opt_dict, \n            cam_opt_dict,\n            self.spatial_lr_scale,\n            self.P\n            ) = model_args\n        # Ckpt without training feature (18 arguments)\n        elif len(model_args) == 18:\n            (self.active_sh_degree, \n            self._xyz, \n            self._knn_f,\n            self._features_dc, \n            self._features_rest,\n            self._scaling, \n            self._rotation, \n            self._opacity,\n            self.max_radii2D, \n            self.max_weight,\n            xyz_gradient_accum, \n            xyz_gradient_accum_abs,\n            denom,\n            denom_abs,\n            opt_dict, \n            cam_opt_dict,\n            self.spatial_lr_scale,\n            self.P\n            ) = model_args\n        if mode == 'train':\n            if isinstance(self.optimizer, PerPointAdam):\n                self.training_setup_pp(training_args)\n            else:\n                self.training_setup(training_args)\n            self.xyz_gradient_accum = xyz_gradient_accum\n            self.xyz_gradient_accum_abs = xyz_gradient_accum_abs\n            self.denom = denom\n            self.denom_abs = denom_abs\n            self.optimizer.load_state_dict(opt_dict)\n            self.cam_optimizer.load_state_dict(cam_opt_dict)\n\n    @property\n    def get_scaling(self):\n        return self.scaling_activation(self._scaling)\n        \n    @property\n    def get_rotation(self):\n        return self.rotation_activation(self._rotation)\n    \n    @property\n    def get_xyz(self):\n        return self._xyz\n    \n    @property\n    def get_features(self):\n        features_dc = self._features_dc\n        features_rest = self._features_rest\n        return torch.cat((features_dc, features_rest), dim=1)\n    \n    @property\n    def get_opacity(self):\n        return self.opacity_activation(self._opacity)\n    \n    @property\n    def get_language_feature(self):\n        return self._language_feature\n    \n    @property\n    def get_instance_feature(self):\n        return self._instance_feature\n    \n    def get_smallest_axis(self, return_idx=False):\n        rotation_matrices = self.get_rotation_matrix()\n        smallest_axis_idx = self.get_scaling.min(dim=-1)[1][..., None, None].expand(-1, 3, -1)\n        smallest_axis = rotation_matrices.gather(2, smallest_axis_idx)\n        if return_idx:\n            return smallest_axis.squeeze(dim=2), smallest_axis_idx[..., 0, 0]\n        return smallest_axis.squeeze(dim=2)\n    \n    def get_normal(self, view_cam):\n        normal_global = self.get_smallest_axis()\n        gaussian_to_cam_global = view_cam.camera_center - self._xyz\n        neg_mask = (normal_global * gaussian_to_cam_global).sum(-1) < 0.0\n        normal_global[neg_mask] = -normal_global[neg_mask]\n        return normal_global\n    \n    def init_RT_seq(self, cam_list):\n        poses =[]\n        index_mapping = {}\n        for cam_idx, cam in enumerate(cam_list[1.0]):\n            p = get_tensor_from_camera(cam.world_view_transform.transpose(0, 1)) # R T -> quat t\n            poses.append(p)\n            index_mapping[cam.uid] = cam_idx\n        poses = torch.stack(poses)\n        self.index_mapping = index_mapping\n        self.P = poses.cuda().requires_grad_(True)\n\n    def get_RT(self, idx):\n        pose = self.P[idx]\n        return pose\n    \n    def get_RT_test(self, idx):\n        pose = self.test_P[idx]\n        return pose\n    \n    def get_rotation_matrix(self):\n        return quaternion_to_matrix(self.get_rotation)\n\n    def get_covariance(self, scaling_modifier = 1):\n        return self.covariance_activation(self.get_scaling, scaling_modifier, self._rotation)\n\n    def oneupSHdegree(self):\n        if self.active_sh_degree < self.max_sh_degree:\n            self.active_sh_degree += 1\n\n    def create_from_pcd(self, pcd : BasicPointCloud, spatial_lr_scale : float):\n        self.spatial_lr_scale = spatial_lr_scale\n        fused_point_cloud = torch.tensor(np.asarray(pcd.points)).float().cuda()\n        fused_color = RGB2SH(torch.tensor(np.asarray(pcd.colors)).float().cuda())\n        features = torch.zeros((fused_color.shape[0], 3, (self.max_sh_degree + 1) ** 2)).float().cuda()\n        features[:, :3, 0 ] = fused_color\n        features[:, 3:, 1:] = 0.0\n\n        print(\"Number of points at initialisation : \", fused_point_cloud.shape[0])\n\n        dist = torch.sqrt(torch.clamp_min(distCUDA2(torch.from_numpy(np.asarray(pcd.points)).float().cuda()), 0.0000001))\n        # print(f\"new scale {torch.quantile(dist, 0.1)}\")\n        scales = torch.log(dist)[...,None].repeat(1, 3)\n        rots = torch.zeros((fused_point_cloud.shape[0], 4), device=\"cuda\")\n        rots[:, 0] = 1\n\n        opacities = inverse_sigmoid(0.1 * torch.ones((fused_point_cloud.shape[0], 1), dtype=torch.float, device=\"cuda\"))\n\n        knn_f = torch.randn((fused_point_cloud.shape[0], 6)).float().cuda()\n        self._xyz = nn.Parameter(fused_point_cloud.requires_grad_(True))\n        self._knn_f = nn.Parameter(knn_f.requires_grad_(True))\n        self._features_dc = nn.Parameter(features[:,:,0:1].transpose(1, 2).contiguous().requires_grad_(True))\n        self._features_rest = nn.Parameter(features[:,:,1:].transpose(1, 2).contiguous().requires_grad_(True))\n        self._scaling = nn.Parameter(scales.requires_grad_(True))\n        self._rotation = nn.Parameter(rots.requires_grad_(True))\n        self._opacity = nn.Parameter(opacities.requires_grad_(True))\n        self.max_radii2D = torch.zeros((self.get_xyz.shape[0]), device=\"cuda\")\n        self.max_weight = torch.zeros((self.get_xyz.shape[0]), device=\"cuda\")\n\n        language_feature = torch.zeros((fused_point_cloud.shape[0], 3), device=\"cuda\")\n        self._language_feature = nn.Parameter(language_feature.requires_grad_(True)).requires_grad_(True)  # dont train feature at first\n\n        # NOTE for instance distinguish\n        instance_feature = torch.zeros((fused_point_cloud.shape[0], 3), device=\"cuda\")\n        self._instance_feature = nn.Parameter(instance_feature.requires_grad_(False)).requires_grad_(False)  # just train feature at last\n\n    def training_setup(self, training_args, device):\n        self.percent_dense = training_args.percent_dense\n        self.xyz_gradient_accum = torch.zeros((self.get_xyz.shape[0], 1), device=device)\n        self.xyz_gradient_accum_abs = torch.zeros((self.get_xyz.shape[0], 1), device=device)\n        self.denom = torch.zeros((self.get_xyz.shape[0], 1), device=device)\n        self.denom_abs = torch.zeros((self.get_xyz.shape[0], 1), device=device)\n        self.abs_split_radii2D_threshold = training_args.abs_split_radii2D_threshold\n        self.max_abs_split_points = training_args.max_abs_split_points\n        self.max_all_points = training_args.max_all_points\n\n        l = [\n            {'params': [self._xyz], 'lr': training_args.position_lr_init * self.spatial_lr_scale, \"name\": \"xyz\"},\n            {'params': [self._knn_f], 'lr': 0.01, \"name\": \"knn_f\"},\n            {'params': [self._features_dc], 'lr': training_args.feature_lr, \"name\": \"f_dc\"},\n            {'params': [self._features_rest], 'lr': training_args.feature_lr / 20.0, \"name\": \"f_rest\"},\n            {'params': [self._opacity], 'lr': training_args.opacity_lr, \"name\": \"opacity\"},\n            {'params': [self._scaling], 'lr': training_args.scaling_lr, \"name\": \"scaling\"},\n            {'params': [self._rotation], 'lr': training_args.rotation_lr, \"name\": \"rotation\"},\n            {'params': [self._language_feature], 'lr': training_args.language_feature_lr, \"name\": \"language_feature\"},  # semantic\n            {'params': [self._instance_feature], 'lr': training_args.language_feature_lr, \"name\": \"instance_feature\"},  # instance \n        ]\n\n        l_cam = [{'params': [self.P],'lr': training_args.rotation_lr*0.1, \"name\": \"pose\"},]\n        # l += l_cam\n\n        self.optimizer = torch.optim.Adam(l, lr=0.0, eps=1e-15)\n        self.cam_optimizer = torch.optim.Adam(l_cam, lr=0.0, eps=1e-15)\n        \n        self.xyz_scheduler_args = get_expon_lr_func(lr_init=training_args.position_lr_init*self.spatial_lr_scale,\n                                                    lr_final=training_args.position_lr_final*self.spatial_lr_scale,\n                                                    lr_delay_mult=training_args.position_lr_delay_mult,\n                                                    max_steps=training_args.position_lr_max_steps)\n        \n        self.cam_scheduler_args = get_expon_lr_func(\n                                                    lr_init=training_args.rotation_lr*0.1,\n                                                    lr_final=training_args.rotation_lr*0.001,\n                                                    lr_delay_mult=training_args.position_lr_delay_mult,\n                                                    max_steps=training_args.iterations)\n\n        \n    # per-point optimizer\n    def training_setup_pp(self, training_args, confidence_lr=None, device=\"cuda\"):\n        self.percent_dense = training_args.percent_dense\n        self.xyz_gradient_accum = torch.zeros((self.get_xyz.shape[0], 1), device=device)\n        self.xyz_gradient_accum_abs = torch.zeros((self.get_xyz.shape[0], 1), device=device)\n        self.denom = torch.zeros((self.get_xyz.shape[0], 1), device=device)\n        self.denom_abs = torch.zeros((self.get_xyz.shape[0], 1), device=device)\n        self.abs_split_radii2D_threshold = training_args.abs_split_radii2D_threshold\n        self.max_abs_split_points = training_args.max_abs_split_points\n        self.max_all_points = training_args.max_all_points\n        self.per_point_lr = confidence_lr\n\n        l = [\n            {'params': [self._xyz], 'per_point_lr': self.per_point_lr, 'lr': training_args.position_lr_init * self.spatial_lr_scale, \"name\": \"xyz\"},\n            {'params': [self._knn_f], 'lr': 0.01, \"name\": \"knn_f\"},\n            {'params': [self._features_dc], 'lr': training_args.feature_lr, \"name\": \"f_dc\"},\n            {'params': [self._features_rest], 'lr': training_args.feature_lr / 20.0, \"name\": \"f_rest\"},\n            {'params': [self._opacity], 'lr': training_args.opacity_lr, \"name\": \"opacity\"},\n            {'params': [self._scaling], 'lr': training_args.scaling_lr, \"name\": \"scaling\"},\n            {'params': [self._rotation], 'lr': training_args.rotation_lr, \"name\": \"rotation\"},\n            {'params': [self._language_feature], 'lr': training_args.language_feature_lr, \"name\": \"language_feature\"},  # semantic\n            {'params': [self._instance_feature], 'lr': training_args.language_feature_lr, \"name\": \"instance_feature\"},  # instance \n        ]\n\n        l_cam = [{'params': [self.P],'lr': training_args.rotation_lr*0.1, \"name\": \"pose\"},]\n        # l += l_cam\n\n        self.optimizer = PerPointAdam(l, lr=0, betas=(0.9, 0.999), eps=1e-15, weight_decay=0.0)\n        self.cam_optimizer = torch.optim.Adam(l_cam, lr=0.0, eps=1e-15)\n\n        self.xyz_scheduler_args = get_expon_lr_func(lr_init=training_args.position_lr_init*self.spatial_lr_scale,\n                                                    lr_final=training_args.position_lr_final*self.spatial_lr_scale,\n                                                    lr_delay_mult=training_args.position_lr_delay_mult,\n                                                    max_steps=training_args.position_lr_max_steps)\n\n        self.cam_scheduler_args = get_expon_lr_func(\n                                                    lr_init=training_args.rotation_lr*0.1,\n                                                    lr_final=training_args.rotation_lr*0.001,\n                                                    lr_delay_mult=training_args.position_lr_delay_mult,\n                                                    max_steps=training_args.iterations)\n    \n    def clip_grad(self, norm=1.0):\n        for group in self.optimizer.param_groups:\n            torch.nn.utils.clip_grad_norm_(group[\"params\"][0], norm)\n\n    def update_learning_rate(self, iteration):\n        ''' Learning rate scheduling per step '''\n        for param_group in self.cam_optimizer.param_groups:\n            if param_group[\"name\"] == \"pose\":\n                lr = self.cam_scheduler_args(iteration)\n                param_group['lr'] = lr\n\n        for param_group in self.optimizer.param_groups:\n            if param_group[\"name\"] == \"xyz\":\n                lr = self.xyz_scheduler_args(iteration)\n                param_group['lr'] = lr\n\n    def construct_list_of_attributes(self, include_feature=False):\n        l = ['x', 'y', 'z', 'nx', 'ny', 'nz']\n        # All channels except the 3 DC\n        for i in range(self._features_dc.shape[1]*self._features_dc.shape[2]):\n            l.append('f_dc_{}'.format(i))\n        for i in range(self._features_rest.shape[1]*self._features_rest.shape[2]):\n            l.append('f_rest_{}'.format(i))\n        l.append('opacity')\n        for i in range(self._scaling.shape[1]):\n            l.append('scale_{}'.format(i))\n        for i in range(self._rotation.shape[1]):\n            l.append('rot_{}'.format(i))\n        if include_feature:\n            for i in range(self._language_feature.shape[1]):\n                l.append('language_feature_{}'.format(i))\n            for i in range(self._instance_feature.shape[1]):\n                l.append('instance_feature_{}'.format(i))\n        return l\n\n    def save_ply(self, path, mask=None, include_feature=False):\n        mkdir_p(os.path.dirname(path))\n\n        xyz = self._xyz.detach().cpu().numpy()\n        normals = np.zeros_like(xyz)\n        f_dc = self._features_dc.detach().transpose(1, 2).flatten(start_dim=1).contiguous().cpu().numpy()\n        f_rest = self._features_rest.detach().transpose(1, 2).flatten(start_dim=1).contiguous().cpu().numpy()\n        opacities = self._opacity.detach().cpu().numpy()\n        scale = self._scaling.detach().cpu().numpy()\n        rotation = self._rotation.detach().cpu().numpy()\n        language_feature = self._language_feature.detach().cpu().numpy()\n        instance_feature = self._instance_feature.detach().cpu().numpy()\n\n        dtype_full = [(attribute, 'f4') for attribute in self.construct_list_of_attributes(include_feature)]\n        elements = np.empty(xyz.shape[0], dtype=dtype_full)\n        if include_feature:\n            attributes = np.concatenate((xyz, normals, f_dc, f_rest, opacities, scale, rotation, language_feature, instance_feature), axis=1)\n        else: \n            attributes = np.concatenate((xyz, normals, f_dc, f_rest, opacities, scale, rotation), axis=1)\n\n        elements[:] = list(map(tuple, attributes))\n        el = PlyElement.describe(elements, 'vertex')\n        PlyData([el]).write(path)\n\n    def reset_opacity(self):\n        opacities_new = inverse_sigmoid(torch.min(self.get_opacity, torch.ones_like(self.get_opacity)*0.01))\n        optimizable_tensors = self.replace_tensor_to_optimizer(opacities_new, \"opacity\")\n        self._opacity = optimizable_tensors[\"opacity\"]\n\n    def load_ply(self, path):\n        plydata = PlyData.read(path)\n\n        xyz = np.stack((np.asarray(plydata.elements[0][\"x\"]),\n                        np.asarray(plydata.elements[0][\"y\"]),\n                        np.asarray(plydata.elements[0][\"z\"])),  axis=1)\n        opacities = np.asarray(plydata.elements[0][\"opacity\"])[..., np.newaxis]\n\n        features_dc = np.zeros((xyz.shape[0], 3, 1))\n        features_dc[:, 0, 0] = np.asarray(plydata.elements[0][\"f_dc_0\"])\n        features_dc[:, 1, 0] = np.asarray(plydata.elements[0][\"f_dc_1\"])\n        features_dc[:, 2, 0] = np.asarray(plydata.elements[0][\"f_dc_2\"])\n\n        extra_f_names = [p.name for p in plydata.elements[0].properties if p.name.startswith(\"f_rest_\")]\n        extra_f_names = sorted(extra_f_names, key = lambda x: int(x.split('_')[-1]))\n        assert len(extra_f_names)==3*(self.max_sh_degree + 1) ** 2 - 3\n        features_extra = np.zeros((xyz.shape[0], len(extra_f_names)))\n        for idx, attr_name in enumerate(extra_f_names):\n            features_extra[:, idx] = np.asarray(plydata.elements[0][attr_name])\n        # Reshape (P,F*SH_coeffs) to (P, F, SH_coeffs except DC)\n        features_extra = features_extra.reshape((features_extra.shape[0], 3, (self.max_sh_degree + 1) ** 2 - 1))\n\n        scale_names = [p.name for p in plydata.elements[0].properties if p.name.startswith(\"scale_\")]\n        scale_names = sorted(scale_names, key = lambda x: int(x.split('_')[-1]))\n        scales = np.zeros((xyz.shape[0], len(scale_names)))\n        for idx, attr_name in enumerate(scale_names):\n            scales[:, idx] = np.asarray(plydata.elements[0][attr_name])\n\n        rot_names = [p.name for p in plydata.elements[0].properties if p.name.startswith(\"rot\")]\n        rot_names = sorted(rot_names, key = lambda x: int(x.split('_')[-1]))\n        rots = np.zeros((xyz.shape[0], len(rot_names)))\n        for idx, attr_name in enumerate(rot_names):\n            rots[:, idx] = np.asarray(plydata.elements[0][attr_name])\n\n        language_feature_names = [p.name for p in plydata.elements[0].properties if p.name.startswith(\"language_feature\")]\n        language_feature_names = sorted(language_feature_names, key = lambda x: int(x.split('_')[-1]))\n        language_feature = np.zeros((xyz.shape[0], len(language_feature_names)))\n        for idx, attr_name in enumerate(language_feature_names):\n            language_feature[:, idx] = np.asarray(plydata.elements[0][attr_name])\n\n        # NOTE instance\n        instance_feature_names = [p.name for p in plydata.elements[0].properties if p.name.startswith(\"instance_feature\")]\n        instance_feature_names = sorted(instance_feature_names, key = lambda x: int(x.split('_')[-1]))\n        instance_feature = np.zeros((xyz.shape[0], len(instance_feature_names)))\n        for idx, attr_name in enumerate(instance_feature_names):\n            instance_feature[:, idx] = np.asarray(plydata.elements[0][attr_name])\n\n        self._xyz = nn.Parameter(torch.tensor(xyz, dtype=torch.float, device=\"cuda\").requires_grad_(True))\n        self._features_dc = nn.Parameter(torch.tensor(features_dc, dtype=torch.float, device=\"cuda\").transpose(1, 2).contiguous().requires_grad_(True))\n        self._features_rest = nn.Parameter(torch.tensor(features_extra, dtype=torch.float, device=\"cuda\").transpose(1, 2).contiguous().requires_grad_(True))\n        self._opacity = nn.Parameter(torch.tensor(opacities, dtype=torch.float, device=\"cuda\").requires_grad_(True))\n        self._scaling = nn.Parameter(torch.tensor(scales, dtype=torch.float, device=\"cuda\").requires_grad_(True))\n        self._rotation = nn.Parameter(torch.tensor(rots, dtype=torch.float, device=\"cuda\").requires_grad_(True))\n        self._language_feature = nn.Parameter(torch.tensor(language_feature, dtype=torch.float, device=\"cuda\").requires_grad_(False))\n        self._instance_feature = nn.Parameter(torch.tensor(instance_feature, dtype=torch.float, device=\"cuda\").requires_grad_(False))\n\n        self.active_sh_degree = self.max_sh_degree\n\n    def replace_tensor_to_optimizer(self, tensor, name):\n        optimizable_tensors = {}\n        for group in self.optimizer.param_groups:\n            if group[\"name\"] == name:\n                stored_state = self.optimizer.state.get(group['params'][0], None)\n                stored_state[\"exp_avg\"] = torch.zeros_like(tensor)\n                stored_state[\"exp_avg_sq\"] = torch.zeros_like(tensor)\n\n                del self.optimizer.state[group['params'][0]]\n                group[\"params\"][0] = nn.Parameter(tensor.requires_grad_(True))\n                self.optimizer.state[group['params'][0]] = stored_state\n\n                optimizable_tensors[group[\"name\"]] = group[\"params\"][0]\n        return optimizable_tensors\n\n    def _prune_optimizer(self, mask):\n        optimizable_tensors = {}\n        for group in self.optimizer.param_groups:\n            stored_state = self.optimizer.state.get(group['params'][0], None)\n            if stored_state is not None:\n                stored_state[\"exp_avg\"] = stored_state[\"exp_avg\"][mask]\n                stored_state[\"exp_avg_sq\"] = stored_state[\"exp_avg_sq\"][mask]\n\n                del self.optimizer.state[group['params'][0]]\n                group[\"params\"][0] = nn.Parameter((group[\"params\"][0][mask].requires_grad_(True)))\n                self.optimizer.state[group['params'][0]] = stored_state\n\n                optimizable_tensors[group[\"name\"]] = group[\"params\"][0]\n            else:\n                group[\"params\"][0] = nn.Parameter(group[\"params\"][0][mask].requires_grad_(True))\n                optimizable_tensors[group[\"name\"]] = group[\"params\"][0]\n        return optimizable_tensors\n\n    def prune_points(self, mask):\n        valid_points_mask = ~mask\n        optimizable_tensors = self._prune_optimizer(valid_points_mask)\n\n        self._xyz = optimizable_tensors[\"xyz\"]\n        self._knn_f = optimizable_tensors[\"knn_f\"]\n        self._features_dc = optimizable_tensors[\"f_dc\"]\n        self._features_rest = optimizable_tensors[\"f_rest\"]\n        self._opacity = optimizable_tensors[\"opacity\"]\n        self._scaling = optimizable_tensors[\"scaling\"]\n        self._rotation = optimizable_tensors[\"rotation\"]\n        self._language_feature = optimizable_tensors[\"language_feature\"]\n        self._instance_feature = optimizable_tensors[\"instance_feature\"]\n\n        self.xyz_gradient_accum = self.xyz_gradient_accum[valid_points_mask]\n        self.xyz_gradient_accum_abs = self.xyz_gradient_accum_abs[valid_points_mask]\n\n        self.denom = self.denom[valid_points_mask]\n        self.denom_abs = self.denom_abs[valid_points_mask]\n        self.max_radii2D = self.max_radii2D[valid_points_mask]\n        self.max_weight = self.max_weight[valid_points_mask]\n\n    def cat_tensors_to_optimizer(self, tensors_dict):\n        optimizable_tensors = {}\n        for group in self.optimizer.param_groups:\n            assert len(group[\"params\"]) == 1\n            extension_tensor = tensors_dict[group[\"name\"]]\n            stored_state = self.optimizer.state.get(group['params'][0], None)\n            if stored_state is not None:\n\n                stored_state[\"exp_avg\"] = torch.cat((stored_state[\"exp_avg\"], torch.zeros_like(extension_tensor)), dim=0)\n                stored_state[\"exp_avg_sq\"] = torch.cat((stored_state[\"exp_avg_sq\"], torch.zeros_like(extension_tensor)), dim=0)\n\n                del self.optimizer.state[group['params'][0]]\n                group[\"params\"][0] = nn.Parameter(torch.cat((group[\"params\"][0], extension_tensor), dim=0).requires_grad_(True))\n                self.optimizer.state[group['params'][0]] = stored_state\n\n                optimizable_tensors[group[\"name\"]] = group[\"params\"][0]\n            else:\n                group[\"params\"][0] = nn.Parameter(torch.cat((group[\"params\"][0], extension_tensor), dim=0).requires_grad_(True))\n                optimizable_tensors[group[\"name\"]] = group[\"params\"][0]\n\n        return optimizable_tensors\n\n    def densification_postfix(self, new_xyz, new_knn_f, new_features_dc, new_features_rest, new_opacities, new_scaling, new_rotation, new_language_feature, new_instance_feature):\n        d = {\"xyz\": new_xyz,\n        \"knn_f\": new_knn_f,\n        \"f_dc\": new_features_dc,\n        \"f_rest\": new_features_rest,\n        \"opacity\": new_opacities,\n        \"scaling\" : new_scaling,\n        \"rotation\" : new_rotation,\n        \"language_feature\": new_language_feature,\n        \"instance_feature\": new_instance_feature,\n        }\n        optimizable_tensors = self.cat_tensors_to_optimizer(d)\n        self._xyz = optimizable_tensors[\"xyz\"]\n        self._knn_f = optimizable_tensors[\"knn_f\"]\n        self._features_dc = optimizable_tensors[\"f_dc\"]\n        self._features_rest = optimizable_tensors[\"f_rest\"]\n        self._opacity = optimizable_tensors[\"opacity\"]\n        self._scaling = optimizable_tensors[\"scaling\"]\n        self._rotation = optimizable_tensors[\"rotation\"]\n        self._language_feature = optimizable_tensors[\"language_feature\"]\n        self._instance_feature = optimizable_tensors[\"instance_feature\"]\n\n        self.xyz_gradient_accum = torch.zeros((self.get_xyz.shape[0], 1), device=\"cuda\")\n        self.xyz_gradient_accum_abs = torch.zeros((self.get_xyz.shape[0], 1), device=\"cuda\")\n        self.denom = torch.zeros((self.get_xyz.shape[0], 1), device=\"cuda\")\n        self.denom_abs = torch.zeros((self.get_xyz.shape[0], 1), device=\"cuda\")\n        self.max_radii2D = torch.zeros((self.get_xyz.shape[0]), device=\"cuda\")\n        self.max_weight = torch.zeros((self.get_xyz.shape[0]), device=\"cuda\")\n\n    def densify_and_split(self, grads, grad_threshold, grads_abs, grad_abs_threshold, scene_extent, max_radii2D, N=2):\n        n_init_points = self.get_xyz.shape[0]\n        # Extract points that satisfy the gradient condition\n        padded_grad = torch.zeros((n_init_points), device=\"cuda\")\n        padded_grad[:grads.shape[0]] = grads.squeeze()\n        padded_grads_abs = torch.zeros((n_init_points), device=\"cuda\")\n        padded_grads_abs[:grads_abs.shape[0]] = grads_abs.squeeze()\n        padded_max_radii2D = torch.zeros((n_init_points), device=\"cuda\")\n        padded_max_radii2D[:max_radii2D.shape[0]] = max_radii2D.squeeze()\n\n        selected_pts_mask = torch.where(padded_grad >= grad_threshold, True, False)\n        selected_pts_mask = torch.logical_and(selected_pts_mask,\n                                              torch.max(self.get_scaling, dim=1).values > self.percent_dense*scene_extent)\n        if selected_pts_mask.sum() + n_init_points > self.max_all_points:\n            limited_num = self.max_all_points - n_init_points\n            padded_grad[~selected_pts_mask] = 0\n            ratio = limited_num / float(n_init_points)\n            threshold = torch.quantile(padded_grad, (1.0-ratio))\n            selected_pts_mask = torch.where(padded_grad > threshold, True, False)\n            # print(f\"split {selected_pts_mask.sum()}, raddi2D {padded_max_radii2D.max()} ,{padded_max_radii2D.median()}\")\n        else:\n            padded_grads_abs[selected_pts_mask] = 0\n            mask = (torch.max(self.get_scaling, dim=1).values > self.percent_dense*scene_extent) & (padded_max_radii2D > self.abs_split_radii2D_threshold)\n            padded_grads_abs[~mask] = 0\n            selected_pts_mask_abs = torch.where(padded_grads_abs >= grad_abs_threshold, True, False)\n            limited_num = min(self.max_all_points - n_init_points - selected_pts_mask.sum(), self.max_abs_split_points)\n            if selected_pts_mask_abs.sum() > limited_num:\n                ratio = limited_num / float(n_init_points)\n                threshold = torch.quantile(padded_grads_abs, (1.0-ratio))\n                selected_pts_mask_abs = torch.where(padded_grads_abs > threshold, True, False)\n            selected_pts_mask = torch.logical_or(selected_pts_mask, selected_pts_mask_abs)\n            # print(f\"split {selected_pts_mask.sum()}, abs {selected_pts_mask_abs.sum()}, raddi2D {padded_max_radii2D.max()} ,{padded_max_radii2D.median()}\")\n\n        stds = self.get_scaling[selected_pts_mask].repeat(N,1)\n        means =torch.zeros((stds.size(0), 3),device=\"cuda\")\n        samples = torch.normal(mean=means, std=stds)\n        rots = build_rotation(self._rotation[selected_pts_mask]).repeat(N,1,1)\n        new_xyz = torch.bmm(rots, samples.unsqueeze(-1)).squeeze(-1) + self.get_xyz[selected_pts_mask].repeat(N, 1)\n        new_scaling = self.scaling_inverse_activation(self.get_scaling[selected_pts_mask].repeat(N,1) / (0.8*N))\n        new_rotation = self._rotation[selected_pts_mask].repeat(N,1)\n        new_features_dc = self._features_dc[selected_pts_mask].repeat(N,1,1)\n        new_features_rest = self._features_rest[selected_pts_mask].repeat(N,1,1)\n        new_opacity = self._opacity[selected_pts_mask].repeat(N,1)\n        new_knn_f = self._knn_f[selected_pts_mask].repeat(N,1)\n        new_language_feature = self._language_feature[selected_pts_mask].repeat(N,1)\n        new_instance_feature = self._instance_feature[selected_pts_mask].repeat(N,1)\n\n        self.densification_postfix(new_xyz, new_knn_f, new_features_dc, new_features_rest, new_opacity, new_scaling, new_rotation, new_language_feature, new_instance_feature)\n\n        prune_filter = torch.cat((selected_pts_mask, torch.zeros(N * selected_pts_mask.sum(), device=\"cuda\", dtype=bool)))\n        self.prune_points(prune_filter)\n\n    def densify_and_clone(self, grads, grad_threshold, scene_extent):\n        n_init_points = self.get_xyz.shape[0]\n        # Extract points that satisfy the gradient condition\n        selected_pts_mask = torch.where(torch.norm(grads, dim=-1) >= grad_threshold, True, False)\n        selected_pts_mask = torch.logical_and(selected_pts_mask,\n                                              torch.max(self.get_scaling, dim=1).values <= self.percent_dense*scene_extent)\n        \n        if selected_pts_mask.sum() + n_init_points > self.max_all_points:\n            limited_num = self.max_all_points - n_init_points\n            grads_tmp = grads.squeeze().clone()\n            grads_tmp[~selected_pts_mask] = 0\n            ratio = min(limited_num / float(n_init_points), 1)\n            threshold = torch.quantile(grads_tmp, (1.0-ratio))\n            selected_pts_mask = torch.where(grads_tmp > threshold, True, False)\n\n        if selected_pts_mask.sum() > 0:\n            # print(f\"clone {selected_pts_mask.sum()}\")\n            new_xyz = self._xyz[selected_pts_mask]\n\n            stds = self.get_scaling[selected_pts_mask]\n            means =torch.zeros((stds.size(0), 3),device=\"cuda\")\n            samples = torch.normal(mean=means, std=stds)\n            rots = build_rotation(self._rotation[selected_pts_mask])\n            new_xyz = torch.bmm(rots, samples.unsqueeze(-1)).squeeze(-1) + self.get_xyz[selected_pts_mask]\n            \n            new_features_dc = self._features_dc[selected_pts_mask]\n            new_features_rest = self._features_rest[selected_pts_mask]\n            new_opacities = self._opacity[selected_pts_mask]\n            new_scaling = self._scaling[selected_pts_mask]\n            new_rotation = self._rotation[selected_pts_mask]\n            new_knn_f = self._knn_f[selected_pts_mask]\n            new_language_feature = self._language_feature[selected_pts_mask]\n            new_instance_feature = self._instance_feature[selected_pts_mask]\n\n            self.densification_postfix(new_xyz, new_knn_f, new_features_dc, new_features_rest, new_opacities, new_scaling, new_rotation, new_language_feature, new_instance_feature)\n\n    def densify_and_prune(self, max_grad, abs_max_grad, min_opacity, extent, max_screen_size):\n        grads = self.xyz_gradient_accum / self.denom\n        grads_abs = self.xyz_gradient_accum_abs / self.denom_abs\n        grads[grads.isnan()] = 0.0\n        grads_abs[grads_abs.isnan()] = 0.0\n        max_radii2D = self.max_radii2D.clone()\n\n        self.densify_and_clone(grads, max_grad, extent)\n        self.densify_and_split(grads, max_grad, grads_abs, abs_max_grad, extent, max_radii2D)\n\n        prune_mask = (self.get_opacity < min_opacity).squeeze()\n\n        if max_screen_size:\n            big_points_vs = self.max_radii2D > max_screen_size\n            big_points_ws = self.get_scaling.max(dim=1).values > 0.1 * extent\n            prune_mask = torch.logical_or(torch.logical_or(prune_mask, big_points_vs), big_points_ws)\n        self.prune_points(prune_mask)\n        # print(f\"all points {self._xyz.shape[0]}\")\n        torch.cuda.empty_cache()\n\n    def add_densification_stats(self, viewspace_point_tensor, viewspace_point_tensor_abs, update_filter):\n        self.xyz_gradient_accum[update_filter] += torch.norm(viewspace_point_tensor.grad[update_filter,:2], dim=-1, keepdim=True)\n        self.xyz_gradient_accum_abs[update_filter] += torch.norm(viewspace_point_tensor_abs.grad[update_filter,:2], dim=-1, keepdim=True)\n        self.denom[update_filter] += 1\n        self.denom_abs[update_filter] += 1\n\n    def get_points_depth_in_depth_map(self, fov_camera, depth, points_in_camera_space, scale=1):\n        st = max(int(scale/2)-1,0)\n        depth_view = depth[None,:,st::scale,st::scale]\n        W, H = int(fov_camera.image_width/scale), int(fov_camera.image_height/scale)\n        depth_view = depth_view[:H, :W]\n        pts_projections = torch.stack(\n                        [points_in_camera_space[:,0] * fov_camera.Fx / points_in_camera_space[:,2] + fov_camera.Cx,\n                         points_in_camera_space[:,1] * fov_camera.Fy / points_in_camera_space[:,2] + fov_camera.Cy], -1).float()/scale\n        mask = (pts_projections[:, 0] > 0) & (pts_projections[:, 0] < W) &\\\n               (pts_projections[:, 1] > 0) & (pts_projections[:, 1] < H) & (points_in_camera_space[:,2] > 0.1)\n\n        pts_projections[..., 0] /= ((W - 1) / 2)\n        pts_projections[..., 1] /= ((H - 1) / 2)\n        pts_projections -= 1\n        pts_projections = pts_projections.view(1, -1, 1, 2)\n        map_z = torch.nn.functional.grid_sample(input=depth_view,\n                                                grid=pts_projections,\n                                                mode='bilinear',\n                                                padding_mode='border',\n                                                align_corners=True\n                                                )[0, :, :, 0]\n        return map_z, mask\n    \n    def get_points_from_depth(self, fov_camera, depth, scale=1):\n        st = int(max(int(scale/2)-1,0))\n        depth_view = depth.squeeze()[st::scale,st::scale]\n        rays_d = fov_camera.get_rays(scale=scale)\n        depth_view = depth_view[:rays_d.shape[0], :rays_d.shape[1]]\n        pts = (rays_d * depth_view[..., None]).reshape(-1,3)\n        R = torch.tensor(fov_camera.R).float().cuda()\n        T = torch.tensor(fov_camera.T).float().cuda()\n        pts = (pts-T)@R.transpose(-1,-2)\n        return pts\n    \n    def change_reqiures_grad(self, change, iteration, quiet=True):\n        if change == \"geometry\":\n            self._xyz.requires_grad_(True)\n            self._knn_f.requires_grad_(True)\n            self._features_dc.requires_grad_(True)\n            self._features_rest.requires_grad_(True)\n            self._scaling.requires_grad_(True)\n            self._rotation.requires_grad_(True)\n            self._opacity.requires_grad_(True)\n            self.P.requires_grad_(True)\n            self._language_feature.requires_grad_(False)\n            self._instance_feature.requires_grad_(False)\n            if not quiet:\n                print(f'\\n[ITER {iteration}] Training gaussian params')\n        elif change == 'semantic': \n            self._xyz.requires_grad_(True)\n            self._knn_f.requires_grad_(True)\n            self._features_dc.requires_grad_(True)\n            self._features_rest.requires_grad_(True)\n            self._scaling.requires_grad_(True)\n            self._rotation.requires_grad_(True)\n            self._opacity.requires_grad_(True)\n            self.P.requires_grad_(True)\n            self._language_feature.requires_grad_(True)\n            self._instance_feature.requires_grad_(False)\n            if not quiet:\n                print(f'\\n[ITER {iteration}] Training gaussian params and language feature')\n        elif change == 'semantic_only': \n            self._xyz.requires_grad_(False)\n            self._knn_f.requires_grad_(False)\n            self._features_dc.requires_grad_(False)\n            self._features_rest.requires_grad_(False)\n            self._scaling.requires_grad_(False)\n            self._rotation.requires_grad_(False)\n            self._opacity.requires_grad_(False)\n            self.P.requires_grad_(False)\n            self._language_feature.requires_grad_(True)\n            self._instance_feature.requires_grad_(False)\n            if not quiet:\n                print(f'\\n[ITER {iteration}] Training language feature')\n        elif change == 'instance': \n            self._xyz.requires_grad_(False)\n            self._knn_f.requires_grad_(False)\n            self._features_dc.requires_grad_(False)\n            self._features_rest.requires_grad_(False)\n            self._scaling.requires_grad_(False)\n            self._rotation.requires_grad_(False)\n            self._opacity.requires_grad_(False)\n            self.P.requires_grad_(False)\n            self._language_feature.requires_grad_(False)\n            self._instance_feature.requires_grad_(True)\n            if not quiet:\n                print(f'\\n[ITER {iteration}] Training instance feature')\n        elif change == \"pose_only\":\n            self._xyz.requires_grad_(False)\n            self._knn_f.requires_grad_(False)\n            self._features_dc.requires_grad_(False)\n            self._features_rest.requires_grad_(False)\n            self._scaling.requires_grad_(False)\n            self._rotation.requires_grad_(False)\n            self._opacity.requires_grad_(False)\n            self.P.requires_grad_(True)\n            self._language_feature.requires_grad_(False)\n            self._instance_feature.requires_grad_(False)\n            if not quiet:\n                print(f'\\n[ITER {iteration}] Training instance feature')\n        elif change == 'finetune':\n            self._xyz.requires_grad_(False)\n            self._knn_f.requires_grad_(False)\n            self._features_dc.requires_grad_(True)\n            self._features_rest.requires_grad_(True)\n            self._scaling.requires_grad_(False)\n            self._rotation.requires_grad_(False)\n            self._opacity.requires_grad_(False)\n            self.P.requires_grad_(False)\n            self._language_feature.requires_grad_(False)\n            self._instance_feature.requires_grad_(False)\n            if not quiet:\n                print(f'\\n[ITER {iteration}] finetune')\n        else:\n            raise ValueError('Unknown type!')\n    "
  },
  {
    "path": "field_construction/scene/per_point_adam.py",
    "content": "import torch\nfrom torch.optim import Optimizer\n\n\nclass PerPointAdam(Optimizer):\n    \"\"\"Implements Adam optimizer with per-point learning rates.\n    \n    Allows unique learning rates for each point in specified parameter tensors,\n    useful for point cloud optimization.\n\n    Args:\n        params: Iterable of parameters to optimize or parameter groups\n        lr (float, optional): Default learning rate (default: 1e-3)\n        betas (tuple, optional): Coefficients for moving averages (default: (0.9, 0.999))\n        eps (float, optional): Term for numerical stability (default: 1e-8)\n        weight_decay (float, optional): Weight decay (L2 penalty) (default: 0)\n    \"\"\"\n    def __init__(self, params, lr=1e-3, betas=(0.9, 0.999), eps=1e-8, weight_decay=0):\n        if not all(0.0 <= x for x in [lr, eps, weight_decay]):\n            raise ValueError(f\"Invalid learning parameters: lr={lr}, eps={eps}, weight_decay={weight_decay}\")\n        if not all(0.0 <= beta < 1.0 for beta in betas):\n            raise ValueError(f\"Invalid beta parameters: {betas}\")\n\n        defaults = dict(lr=lr, betas=betas, eps=eps, weight_decay=weight_decay, per_point_lr=None)\n        super().__init__(params, defaults)\n\n    def _adjust_per_point_lr(self, per_point_lr, grad, mask):\n        \"\"\"Adjusts per-point learning rates based on gradient magnitudes.\"\"\"\n        grad_magnitude = grad.norm(dim=-1)\n        scaling_factor = torch.ones_like(grad_magnitude)\n        grad_sigmoid = torch.sigmoid(grad_magnitude[mask])\n        scaling_factor[mask] = 0.99 + (grad_sigmoid * 0.02)\n        return per_point_lr * scaling_factor.unsqueeze(1)\n\n    def step(self, closure=None):\n        \"\"\"Performs a single optimization step.\"\"\"\n        loss = closure() if closure is not None else None\n\n        for group in self.param_groups:\n            per_point_lr = group.get('per_point_lr')\n            \n            for p in group['params']:\n                if p.grad is None:\n                    continue\n                    \n                grad = p.grad.data\n                if grad.is_sparse:\n                    raise RuntimeError('PerPointAdam does not support sparse gradients')\n\n                # Initialize state if needed\n                state = self.state[p]\n                if len(state) == 0:\n                    state['step'] = 0\n                    state['exp_avg'] = torch.zeros_like(p.data)\n                    state['exp_avg_sq'] = torch.zeros_like(p.data)\n\n                # Get state values\n                exp_avg, exp_avg_sq = state['exp_avg'], state['exp_avg_sq']\n                beta1, beta2 = group['betas']\n                state['step'] += 1\n\n                # Apply weight decay if specified\n                if group['weight_decay'] != 0:\n                    grad = grad.add(p.data, alpha=group['weight_decay'])\n\n                # Compute mask for non-zero gradients\n                grad_norm = grad.norm()\n                mask = grad_norm > 0\n\n                # Update momentum terms\n                exp_avg.masked_scatter_(mask, \n                    exp_avg[mask].mul_(beta1).add_(grad[mask], alpha=1 - beta1))\n                exp_avg_sq.masked_scatter_(mask,\n                    exp_avg_sq[mask].mul_(beta2).addcmul_(grad[mask], grad[mask], value=1 - beta2))\n\n                # Compute bias corrections\n                bias_correction1 = 1 - beta1 ** state['step']\n                bias_correction2 = 1 - beta2 ** state['step']\n\n                # Compute step size\n                denom = exp_avg_sq.sqrt().add_(group['eps'])\n                step_size = group['lr'] * (bias_correction2 ** 0.5 / bias_correction1)\n\n                # Apply updates\n                if per_point_lr is not None:\n                    if not isinstance(per_point_lr, torch.Tensor):\n                        raise TypeError(\"per_point_lr must be a torch.Tensor\")\n                    if per_point_lr.device != p.data.device:\n                        raise ValueError(\"per_point_lr must be on the same device as parameter\")\n                    \n                    expected_shape = p.data.shape[:1] + (1,) * (p.data.dim() - 1)\n                    if per_point_lr.shape != expected_shape:\n                        raise ValueError(f\"{group['name']}: Invalid per_point_lr shape. Expected {expected_shape}, got {per_point_lr.shape}\")\n\n                    scaled_step_size = step_size * per_point_lr\n                    p.data.add_(-scaled_step_size * (exp_avg / denom))\n                    per_point_lr = self._adjust_per_point_lr(per_point_lr, grad, mask)\n                else:\n                    p.data.addcdiv_(exp_avg, denom, value=-step_size)\n\n        return loss"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/CMakeLists.txt",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\ncmake_minimum_required(VERSION 3.20)\n\nproject(DiffRast LANGUAGES CUDA CXX)\n\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_EXTENSIONS OFF)\nset(CMAKE_CUDA_STANDARD 17)\n\nset(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS}\")\n\nadd_library(CudaRasterizer\n\tcuda_rasterizer/backward.h\n\tcuda_rasterizer/backward.cu\n\tcuda_rasterizer/forward.h\n\tcuda_rasterizer/forward.cu\n\tcuda_rasterizer/auxiliary.h\n\tcuda_rasterizer/rasterizer_impl.cu\n\tcuda_rasterizer/rasterizer_impl.h\n\tcuda_rasterizer/rasterizer.h\n)\n\nset_target_properties(CudaRasterizer PROPERTIES CUDA_ARCHITECTURES \"70;75;86\")\n\ntarget_include_directories(CudaRasterizer PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/cuda_rasterizer)\ntarget_include_directories(CudaRasterizer PRIVATE third_party/glm ${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES})\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/LICENSE.md",
    "content": "Gaussian-Splatting License  \n===========================  \n\n**Inria** and **the Max Planck Institut for Informatik (MPII)** hold all the ownership rights on the *Software* named **gaussian-splatting**.  \nThe *Software* is in the process of being registered with the Agence pour la Protection des  \nProgrammes (APP).  \n\nThe *Software* is still being developed by the *Licensor*.  \n\n*Licensor*'s goal is to allow the research community to use, test and evaluate  \nthe *Software*.  \n\n## 1.  Definitions  \n\n*Licensee* means any person or entity that uses the *Software* and distributes  \nits *Work*.  \n\n*Licensor* means the owners of the *Software*, i.e Inria and MPII  \n\n*Software* means the original work of authorship made available under this  \nLicense ie gaussian-splatting.  \n\n*Work* means the *Software* and any additions to or derivative works of the  \n*Software* that are made available under this License.  \n\n\n## 2.  Purpose  \nThis license is intended to define the rights granted to the *Licensee* by  \nLicensors under the *Software*.  \n\n## 3.  Rights granted  \n\nFor the above reasons Licensors have decided to distribute the *Software*.  \nLicensors grant non-exclusive rights to use the *Software* for research purposes  \nto research users (both academic and industrial), free of charge, without right  \nto sublicense.. The *Software* may be used \"non-commercially\", i.e., for research  \nand/or evaluation purposes only.  \n\nSubject to the terms and conditions of this License, you are granted a  \nnon-exclusive, royalty-free, license to reproduce, prepare derivative works of,  \npublicly display, publicly perform and distribute its *Work* and any resulting  \nderivative works in any form.  \n\n## 4.  Limitations  \n\n**4.1 Redistribution.** You may reproduce or distribute the *Work* only if (a) you do  \nso under this License, (b) you include a complete copy of this License with  \nyour distribution, and (c) you retain without modification any copyright,  \npatent, trademark, or attribution notices that are present in the *Work*.  \n\n**4.2 Derivative Works.** You may specify that additional or different terms apply  \nto the use, reproduction, and distribution of your derivative works of the *Work*  \n(\"Your Terms\") only if (a) Your Terms provide that the use limitation in  \nSection 2 applies to your derivative works, and (b) you identify the specific  \nderivative works that are subject to Your Terms. Notwithstanding Your Terms,  \nthis License (including the redistribution requirements in Section 3.1) will  \ncontinue to apply to the *Work* itself.  \n\n**4.3** Any other use without of prior consent of Licensors is prohibited. Research  \nusers explicitly acknowledge having received from Licensors all information  \nallowing to appreciate the adequacy between of the *Software* and their needs and  \nto undertake all necessary precautions for its execution and use.  \n\n**4.4** The *Software* is provided both as a compiled library file and as source  \ncode. In case of using the *Software* for a publication or other results obtained  \nthrough the use of the *Software*, users are strongly encouraged to cite the  \ncorresponding publications as explained in the documentation of the *Software*.  \n\n## 5.  Disclaimer  \n\nTHE USER CANNOT USE, EXPLOIT OR DISTRIBUTE THE *SOFTWARE* FOR COMMERCIAL PURPOSES  \nWITHOUT PRIOR AND EXPLICIT CONSENT OF LICENSORS. YOU MUST CONTACT INRIA FOR ANY  \nUNAUTHORIZED USE: stip-sophia.transfert@inria.fr . ANY SUCH ACTION WILL  \nCONSTITUTE A FORGERY. THIS *SOFTWARE* IS PROVIDED \"AS IS\" WITHOUT ANY WARRANTIES  \nOF ANY NATURE AND ANY EXPRESS OR IMPLIED WARRANTIES, WITH REGARDS TO COMMERCIAL  \nUSE, PROFESSIONNAL USE, LEGAL OR NOT, OR OTHER, OR COMMERCIALISATION OR  \nADAPTATION. UNLESS EXPLICITLY PROVIDED BY LAW, IN NO EVENT, SHALL INRIA OR THE  \nAUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR  \nCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE  \nGOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS OR BUSINESS INTERRUPTION)  \nHOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  \nLIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING FROM, OUT OF OR  \nIN CONNECTION WITH THE *SOFTWARE* OR THE USE OR OTHER DEALINGS IN THE *SOFTWARE*.  \n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/README.md",
    "content": "# Differential Gaussian Rasterization for LangSurf\n\nUsed as the rasterization engine for LangSurf which can render rgb, depth, normal, language features and instance-level language features. If you can make use of it in your own research, please be so kind to cite us.\n\n<!-- <section class=\"section\" id=\"BibTeX\">\n  <div class=\"container is-max-desktop content\">\n    <h2 class=\"title\">BibTeX</h2>\n    <pre><code>@Article{kerbl3Dgaussians,\n      author       = {Kerbl, Bernhard and Kopanas, Georgios and Leimk{\\\"u}hler, Thomas and Drettakis, George},\n      title        = {3D Gaussian Splatting for Real-Time Radiance Field Rendering},\n      journal      = {ACM Transactions on Graphics},\n      number       = {4},\n      volume       = {42},\n      month        = {July},\n      year         = {2023},\n      url          = {https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/}\n}</code></pre>\n  </div>\n</section> -->"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/build/temp.linux-x86_64-cpython-310/.ninja_log",
    "content": "# ninja log v5\n1\t3269\t1740114322642951852\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/forward.o\taa1daee3d707d538\n1\t3499\t1740114322874950457\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/backward.o\tccc62c27cc08f3d2\n1\t10560\t1740114329930908314\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/rasterizer_impl.o\tb10d15ada471cc56\n2\t16378\t1740114335754873938\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/ext.o\t5065cf0abad3b1dc\n2\t51547\t1740114370898674085\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/rasterize_points.o\t69fcc9f1b32d75\n17\t3419\t1740115149196330150\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/forward.o\taa1daee3d707d538\n16\t3568\t1740115149352329917\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/backward.o\tccc62c27cc08f3d2\n17\t10358\t1740115156128319828\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/rasterizer_impl.o\tb10d15ada471cc56\n18\t50342\t1740115196108262280\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/rasterize_points.o\t69fcc9f1b32d75\n18\t3188\t1740115705015741260\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/forward.o\taa1daee3d707d538\n18\t3450\t1740115705271741067\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/backward.o\tccc62c27cc08f3d2\n18\t10867\t1740115712691735492\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/rasterizer_impl.o\tb10d15ada471cc56\n19\t51652\t1740115753455705563\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/rasterize_points.o\t69fcc9f1b32d75\n16\t3577\t1740119157035453892\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/forward.o\taa1daee3d707d538\n15\t3811\t1740119157275453274\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/backward.o\tccc62c27cc08f3d2\n16\t11339\t1740119164799433919\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/rasterizer_impl.o\tb10d15ada471cc56\n17\t56708\t1740119210139319436\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/rasterize_points.o\t69fcc9f1b32d75\n21\t3532\t1740331667538673799\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/forward.o\taa1daee3d707d538\n20\t3750\t1740331667758673391\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/backward.o\tccc62c27cc08f3d2\n21\t11715\t1740331675714658604\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/rasterizer_impl.o\tb10d15ada471cc56\n21\t77173\t1740331741158535523\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-LangSurf-rasterizer/build/temp.linux-x86_64-cpython-310/rasterize_points.o\t69fcc9f1b32d75\n56\t3946\t1743475571713662010\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-langsurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/backward.o\t87ff917ebb3c08f0\n57\t4118\t1743475571889660174\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-langsurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/forward.o\t874625155179daf1\n57\t11768\t1743475579533580803\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-langsurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/rasterizer_impl.o\t355dd834fa004c2c\n58\t45380\t1743475613145239337\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-langsurf-rasterizer/build/temp.linux-x86_64-cpython-310/ext.o\t6f5822467011ce30\n58\t78044\t1743475645788918929\t/home/lff/data1/cjw/langscene/field_construction/submodules/diff-langsurf-rasterizer/build/temp.linux-x86_64-cpython-310/rasterize_points.o\tbad4edeb9a9f8d44\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/build/temp.linux-x86_64-cpython-310/build.ninja",
    "content": "ninja_required_version = 1.3\ncxx = c++\nnvcc = /usr/local/cuda-12.2/bin/nvcc\n\ncflags = -pthread -B /home/lff/miniconda3/envs/langscene/compiler_compat -Wno-unused-result -Wsign-compare -DNDEBUG -fwrapv -O2 -Wall -fPIC -O2 -isystem /home/lff/miniconda3/envs/langscene/include -fPIC -O2 -isystem /home/lff/miniconda3/envs/langscene/include -fPIC -I/home/lff/miniconda3/envs/langscene/lib/python3.10/site-packages/torch/include -I/home/lff/miniconda3/envs/langscene/lib/python3.10/site-packages/torch/include/torch/csrc/api/include -I/home/lff/miniconda3/envs/langscene/lib/python3.10/site-packages/torch/include/TH -I/home/lff/miniconda3/envs/langscene/lib/python3.10/site-packages/torch/include/THC -I/usr/local/cuda-12.2/include -I/home/lff/miniconda3/envs/langscene/include/python3.10 -c\npost_cflags = -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE=\"_gcc\"' '-DPYBIND11_STDLIB=\"_libstdcpp\"' '-DPYBIND11_BUILD_ABI=\"_cxxabi1011\"' -DTORCH_EXTENSION_NAME=_C -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++17\ncuda_cflags = -I/home/lff/miniconda3/envs/langscene/lib/python3.10/site-packages/torch/include -I/home/lff/miniconda3/envs/langscene/lib/python3.10/site-packages/torch/include/torch/csrc/api/include -I/home/lff/miniconda3/envs/langscene/lib/python3.10/site-packages/torch/include/TH -I/home/lff/miniconda3/envs/langscene/lib/python3.10/site-packages/torch/include/THC -I/usr/local/cuda-12.2/include -I/home/lff/miniconda3/envs/langscene/include/python3.10 -c\ncuda_post_cflags = -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_BFLOAT16_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ --expt-relaxed-constexpr --compiler-options ''\"'\"'-fPIC'\"'\"'' -I/home/lff/data1/cjw/langscene/field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/ -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE=\"_gcc\"' '-DPYBIND11_STDLIB=\"_libstdcpp\"' '-DPYBIND11_BUILD_ABI=\"_cxxabi1011\"' -DTORCH_EXTENSION_NAME=_C -D_GLIBCXX_USE_CXX11_ABI=0 -gencode=arch=compute_86,code=compute_86 -gencode=arch=compute_86,code=sm_86 -std=c++17\ncuda_dlink_post_cflags = \nldflags = \n\nrule compile\n  command = $cxx -MMD -MF $out.d $cflags -c $in -o $out $post_cflags\n  depfile = $out.d\n  deps = gcc\n\nrule cuda_compile\n  depfile = $out.d\n  deps = gcc\n  command = $nvcc --generate-dependencies-with-compile --dependency-output $out.d $cuda_cflags -c $in -o $out $cuda_post_cflags\n\n\n\n\n\nbuild /home/lff/data1/cjw/langscene/field_construction/submodules/diff-langsurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/backward.o: cuda_compile /home/lff/data1/cjw/langscene/field_construction/submodules/diff-langsurf-rasterizer/cuda_rasterizer/backward.cu\nbuild /home/lff/data1/cjw/langscene/field_construction/submodules/diff-langsurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/forward.o: cuda_compile /home/lff/data1/cjw/langscene/field_construction/submodules/diff-langsurf-rasterizer/cuda_rasterizer/forward.cu\nbuild /home/lff/data1/cjw/langscene/field_construction/submodules/diff-langsurf-rasterizer/build/temp.linux-x86_64-cpython-310/cuda_rasterizer/rasterizer_impl.o: cuda_compile /home/lff/data1/cjw/langscene/field_construction/submodules/diff-langsurf-rasterizer/cuda_rasterizer/rasterizer_impl.cu\nbuild /home/lff/data1/cjw/langscene/field_construction/submodules/diff-langsurf-rasterizer/build/temp.linux-x86_64-cpython-310/ext.o: compile /home/lff/data1/cjw/langscene/field_construction/submodules/diff-langsurf-rasterizer/ext.cpp\nbuild /home/lff/data1/cjw/langscene/field_construction/submodules/diff-langsurf-rasterizer/build/temp.linux-x86_64-cpython-310/rasterize_points.o: cuda_compile /home/lff/data1/cjw/langscene/field_construction/submodules/diff-langsurf-rasterizer/rasterize_points.cu\n\n\n\n\n\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/cuda_rasterizer/auxiliary.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#ifndef CUDA_RASTERIZER_AUXILIARY_H_INCLUDED\n#define CUDA_RASTERIZER_AUXILIARY_H_INCLUDED\n\n#include \"config.h\"\n#include \"stdio.h\"\n\n#define BLOCK_SIZE (BLOCK_X * BLOCK_Y)\n#define NUM_WARPS (BLOCK_SIZE/32)\n\n// Spherical harmonics coefficients\n__device__ const float SH_C0 = 0.28209479177387814f;\n__device__ const float SH_C1 = 0.4886025119029199f;\n__device__ const float SH_C2[] = {\n\t1.0925484305920792f,\n\t-1.0925484305920792f,\n\t0.31539156525252005f,\n\t-1.0925484305920792f,\n\t0.5462742152960396f\n};\n__device__ const float SH_C3[] = {\n\t-0.5900435899266435f,\n\t2.890611442640554f,\n\t-0.4570457994644658f,\n\t0.3731763325901154f,\n\t-0.4570457994644658f,\n\t1.445305721320277f,\n\t-0.5900435899266435f\n};\n\n__forceinline__ __device__ float ndc2Pix(float v, int S)\n{\n\treturn ((v + 1.0) * S - 1.0) * 0.5;\n}\n\n__forceinline__ __device__ void getRect(const float2 p, int max_radius, uint2& rect_min, uint2& rect_max, dim3 grid)\n{\n\trect_min = {\n\t\tmin(grid.x, max((int)0, (int)((p.x - max_radius) / BLOCK_X))),\n\t\tmin(grid.y, max((int)0, (int)((p.y - max_radius) / BLOCK_Y)))\n\t};\n\trect_max = {\n\t\tmin(grid.x, max((int)0, (int)((p.x + max_radius + BLOCK_X - 1) / BLOCK_X))),\n\t\tmin(grid.y, max((int)0, (int)((p.y + max_radius + BLOCK_Y - 1) / BLOCK_Y)))\n\t};\n}\n\n__forceinline__ __device__ float3 transformPoint4x3(const float3& p, const float* matrix)\n{\n\tfloat3 transformed = {\n\t\tmatrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z + matrix[12],\n\t\tmatrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z + matrix[13],\n\t\tmatrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z + matrix[14],\n\t};\n\treturn transformed;\n}\n\n__forceinline__ __device__ float4 transformPoint4x4(const float3& p, const float* matrix)\n{\n\tfloat4 transformed = {\n\t\tmatrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z + matrix[12],\n\t\tmatrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z + matrix[13],\n\t\tmatrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z + matrix[14],\n\t\tmatrix[3] * p.x + matrix[7] * p.y + matrix[11] * p.z + matrix[15]\n\t};\n\treturn transformed;\n}\n\n__forceinline__ __device__ float3 transformVec4x3(const float3& p, const float* matrix)\n{\n\tfloat3 transformed = {\n\t\tmatrix[0] * p.x + matrix[4] * p.y + matrix[8] * p.z,\n\t\tmatrix[1] * p.x + matrix[5] * p.y + matrix[9] * p.z,\n\t\tmatrix[2] * p.x + matrix[6] * p.y + matrix[10] * p.z,\n\t};\n\treturn transformed;\n}\n\n__forceinline__ __device__ float3 transformVec4x3Transpose(const float3& p, const float* matrix)\n{\n\tfloat3 transformed = {\n\t\tmatrix[0] * p.x + matrix[1] * p.y + matrix[2] * p.z,\n\t\tmatrix[4] * p.x + matrix[5] * p.y + matrix[6] * p.z,\n\t\tmatrix[8] * p.x + matrix[9] * p.y + matrix[10] * p.z,\n\t};\n\treturn transformed;\n}\n\n__forceinline__ __device__ float dnormvdz(float3 v, float3 dv)\n{\n\tfloat sum2 = v.x * v.x + v.y * v.y + v.z * v.z;\n\tfloat invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2);\n\tfloat dnormvdz = (-v.x * v.z * dv.x - v.y * v.z * dv.y + (sum2 - v.z * v.z) * dv.z) * invsum32;\n\treturn dnormvdz;\n}\n\n__forceinline__ __device__ float3 dnormvdv(float3 v, float3 dv)\n{\n\tfloat sum2 = v.x * v.x + v.y * v.y + v.z * v.z;\n\tfloat invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2);\n\n\tfloat3 dnormvdv;\n\tdnormvdv.x = ((+sum2 - v.x * v.x) * dv.x - v.y * v.x * dv.y - v.z * v.x * dv.z) * invsum32;\n\tdnormvdv.y = (-v.x * v.y * dv.x + (sum2 - v.y * v.y) * dv.y - v.z * v.y * dv.z) * invsum32;\n\tdnormvdv.z = (-v.x * v.z * dv.x - v.y * v.z * dv.y + (sum2 - v.z * v.z) * dv.z) * invsum32;\n\treturn dnormvdv;\n}\n\n__forceinline__ __device__ float4 dnormvdv(float4 v, float4 dv)\n{\n\tfloat sum2 = v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w;\n\tfloat invsum32 = 1.0f / sqrt(sum2 * sum2 * sum2);\n\n\tfloat4 vdv = { v.x * dv.x, v.y * dv.y, v.z * dv.z, v.w * dv.w };\n\tfloat vdv_sum = vdv.x + vdv.y + vdv.z + vdv.w;\n\tfloat4 dnormvdv;\n\tdnormvdv.x = ((sum2 - v.x * v.x) * dv.x - v.x * (vdv_sum - vdv.x)) * invsum32;\n\tdnormvdv.y = ((sum2 - v.y * v.y) * dv.y - v.y * (vdv_sum - vdv.y)) * invsum32;\n\tdnormvdv.z = ((sum2 - v.z * v.z) * dv.z - v.z * (vdv_sum - vdv.z)) * invsum32;\n\tdnormvdv.w = ((sum2 - v.w * v.w) * dv.w - v.w * (vdv_sum - vdv.w)) * invsum32;\n\treturn dnormvdv;\n}\n\n__forceinline__ __device__ float sigmoid(float x)\n{\n\treturn 1.0f / (1.0f + expf(-x));\n}\n\n__forceinline__ __device__ bool in_frustum(int idx,\n\tconst float* orig_points,\n\tconst float* viewmatrix,\n\tconst float* projmatrix,\n\tbool prefiltered,\n\tfloat3& p_view)\n{\n\tfloat3 p_orig = { orig_points[3 * idx], orig_points[3 * idx + 1], orig_points[3 * idx + 2] };\n\n\t// Bring points to screen space\n\tfloat4 p_hom = transformPoint4x4(p_orig, projmatrix);\n\tfloat p_w = 1.0f / (p_hom.w + 0.0000001f);\n\tfloat3 p_proj = { p_hom.x * p_w, p_hom.y * p_w, p_hom.z * p_w };\n\tp_view = transformPoint4x3(p_orig, viewmatrix);\n\n\tif (p_view.z <= 0.2f)// || ((p_proj.x < -1.3 || p_proj.x > 1.3 || p_proj.y < -1.3 || p_proj.y > 1.3)))\n\t{\n\t\tif (prefiltered)\n\t\t{\n\t\t\tprintf(\"Point is filtered although prefiltered is set. This shouldn't happen!\");\n\t\t\t__trap();\n\t\t}\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n#define CHECK_CUDA(A, debug) \\\nA; if(debug) { \\\nauto ret = cudaDeviceSynchronize(); \\\nif (ret != cudaSuccess) { \\\nstd::cerr << \"\\n[CUDA ERROR] in \" << __FILE__ << \"\\nLine \" << __LINE__ << \": \" << cudaGetErrorString(ret); \\\nthrow std::runtime_error(cudaGetErrorString(ret)); \\\n} \\\n}\n\n#endif"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/cuda_rasterizer/backward.cu",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#include \"backward.h\"\n#include \"auxiliary.h\"\n#include <cooperative_groups.h>\n#include <cooperative_groups/reduce.h>\nnamespace cg = cooperative_groups;\n\n// Backward pass for conversion of spherical harmonics to RGB for\n// each Gaussian.\n__device__ void computeColorFromSH(int idx, int deg, int max_coeffs, const glm::vec3* means, glm::vec3 campos, const float* shs, const bool* clamped, const glm::vec3* dL_dcolor, glm::vec3* dL_dmeans, glm::vec3* dL_dshs)\n{\n\t// Compute intermediate values, as it is done during forward\n\tglm::vec3 pos = means[idx];\n\tglm::vec3 dir_orig = pos - campos;\n\tglm::vec3 dir = dir_orig / glm::length(dir_orig);\n\n\tglm::vec3* sh = ((glm::vec3*)shs) + idx * max_coeffs;\n\n\t// Use PyTorch rule for clamping: if clamping was applied,\n\t// gradient becomes 0.\n\tglm::vec3 dL_dRGB = dL_dcolor[idx];\n\tdL_dRGB.x *= clamped[3 * idx + 0] ? 0 : 1;\n\tdL_dRGB.y *= clamped[3 * idx + 1] ? 0 : 1;\n\tdL_dRGB.z *= clamped[3 * idx + 2] ? 0 : 1;\n\n\tglm::vec3 dRGBdx(0, 0, 0);\n\tglm::vec3 dRGBdy(0, 0, 0);\n\tglm::vec3 dRGBdz(0, 0, 0);\n\tfloat x = dir.x;\n\tfloat y = dir.y;\n\tfloat z = dir.z;\n\n\t// Target location for this Gaussian to write SH gradients to\n\tglm::vec3* dL_dsh = dL_dshs + idx * max_coeffs;\n\n\t// No tricks here, just high school-level calculus.\n\tfloat dRGBdsh0 = SH_C0;\n\tdL_dsh[0] = dRGBdsh0 * dL_dRGB;\n\tif (deg > 0)\n\t{\n\t\tfloat dRGBdsh1 = -SH_C1 * y;\n\t\tfloat dRGBdsh2 = SH_C1 * z;\n\t\tfloat dRGBdsh3 = -SH_C1 * x;\n\t\tdL_dsh[1] = dRGBdsh1 * dL_dRGB;\n\t\tdL_dsh[2] = dRGBdsh2 * dL_dRGB;\n\t\tdL_dsh[3] = dRGBdsh3 * dL_dRGB;\n\n\t\tdRGBdx = -SH_C1 * sh[3];\n\t\tdRGBdy = -SH_C1 * sh[1];\n\t\tdRGBdz = SH_C1 * sh[2];\n\n\t\tif (deg > 1)\n\t\t{\n\t\t\tfloat xx = x * x, yy = y * y, zz = z * z;\n\t\t\tfloat xy = x * y, yz = y * z, xz = x * z;\n\n\t\t\tfloat dRGBdsh4 = SH_C2[0] * xy;\n\t\t\tfloat dRGBdsh5 = SH_C2[1] * yz;\n\t\t\tfloat dRGBdsh6 = SH_C2[2] * (2.f * zz - xx - yy);\n\t\t\tfloat dRGBdsh7 = SH_C2[3] * xz;\n\t\t\tfloat dRGBdsh8 = SH_C2[4] * (xx - yy);\n\t\t\tdL_dsh[4] = dRGBdsh4 * dL_dRGB;\n\t\t\tdL_dsh[5] = dRGBdsh5 * dL_dRGB;\n\t\t\tdL_dsh[6] = dRGBdsh6 * dL_dRGB;\n\t\t\tdL_dsh[7] = dRGBdsh7 * dL_dRGB;\n\t\t\tdL_dsh[8] = dRGBdsh8 * dL_dRGB;\n\n\t\t\tdRGBdx += SH_C2[0] * y * sh[4] + SH_C2[2] * 2.f * -x * sh[6] + SH_C2[3] * z * sh[7] + SH_C2[4] * 2.f * x * sh[8];\n\t\t\tdRGBdy += SH_C2[0] * x * sh[4] + SH_C2[1] * z * sh[5] + SH_C2[2] * 2.f * -y * sh[6] + SH_C2[4] * 2.f * -y * sh[8];\n\t\t\tdRGBdz += SH_C2[1] * y * sh[5] + SH_C2[2] * 2.f * 2.f * z * sh[6] + SH_C2[3] * x * sh[7];\n\n\t\t\tif (deg > 2)\n\t\t\t{\n\t\t\t\tfloat dRGBdsh9 = SH_C3[0] * y * (3.f * xx - yy);\n\t\t\t\tfloat dRGBdsh10 = SH_C3[1] * xy * z;\n\t\t\t\tfloat dRGBdsh11 = SH_C3[2] * y * (4.f * zz - xx - yy);\n\t\t\t\tfloat dRGBdsh12 = SH_C3[3] * z * (2.f * zz - 3.f * xx - 3.f * yy);\n\t\t\t\tfloat dRGBdsh13 = SH_C3[4] * x * (4.f * zz - xx - yy);\n\t\t\t\tfloat dRGBdsh14 = SH_C3[5] * z * (xx - yy);\n\t\t\t\tfloat dRGBdsh15 = SH_C3[6] * x * (xx - 3.f * yy);\n\t\t\t\tdL_dsh[9] = dRGBdsh9 * dL_dRGB;\n\t\t\t\tdL_dsh[10] = dRGBdsh10 * dL_dRGB;\n\t\t\t\tdL_dsh[11] = dRGBdsh11 * dL_dRGB;\n\t\t\t\tdL_dsh[12] = dRGBdsh12 * dL_dRGB;\n\t\t\t\tdL_dsh[13] = dRGBdsh13 * dL_dRGB;\n\t\t\t\tdL_dsh[14] = dRGBdsh14 * dL_dRGB;\n\t\t\t\tdL_dsh[15] = dRGBdsh15 * dL_dRGB;\n\n\t\t\t\tdRGBdx += (\n\t\t\t\t\tSH_C3[0] * sh[9] * 3.f * 2.f * xy +\n\t\t\t\t\tSH_C3[1] * sh[10] * yz +\n\t\t\t\t\tSH_C3[2] * sh[11] * -2.f * xy +\n\t\t\t\t\tSH_C3[3] * sh[12] * -3.f * 2.f * xz +\n\t\t\t\t\tSH_C3[4] * sh[13] * (-3.f * xx + 4.f * zz - yy) +\n\t\t\t\t\tSH_C3[5] * sh[14] * 2.f * xz +\n\t\t\t\t\tSH_C3[6] * sh[15] * 3.f * (xx - yy));\n\n\t\t\t\tdRGBdy += (\n\t\t\t\t\tSH_C3[0] * sh[9] * 3.f * (xx - yy) +\n\t\t\t\t\tSH_C3[1] * sh[10] * xz +\n\t\t\t\t\tSH_C3[2] * sh[11] * (-3.f * yy + 4.f * zz - xx) +\n\t\t\t\t\tSH_C3[3] * sh[12] * -3.f * 2.f * yz +\n\t\t\t\t\tSH_C3[4] * sh[13] * -2.f * xy +\n\t\t\t\t\tSH_C3[5] * sh[14] * -2.f * yz +\n\t\t\t\t\tSH_C3[6] * sh[15] * -3.f * 2.f * xy);\n\n\t\t\t\tdRGBdz += (\n\t\t\t\t\tSH_C3[1] * sh[10] * xy +\n\t\t\t\t\tSH_C3[2] * sh[11] * 4.f * 2.f * yz +\n\t\t\t\t\tSH_C3[3] * sh[12] * 3.f * (2.f * zz - xx - yy) +\n\t\t\t\t\tSH_C3[4] * sh[13] * 4.f * 2.f * xz +\n\t\t\t\t\tSH_C3[5] * sh[14] * (xx - yy));\n\t\t\t}\n\t\t}\n\t}\n\n\t// The view direction is an input to the computation. View direction\n\t// is influenced by the Gaussian's mean, so SHs gradients\n\t// must propagate back into 3D position.\n\tglm::vec3 dL_ddir(glm::dot(dRGBdx, dL_dRGB), glm::dot(dRGBdy, dL_dRGB), glm::dot(dRGBdz, dL_dRGB));\n\n\t// Account for normalization of direction\n\tfloat3 dL_dmean = dnormvdv(float3{ dir_orig.x, dir_orig.y, dir_orig.z }, float3{ dL_ddir.x, dL_ddir.y, dL_ddir.z });\n\n\t// Gradients of loss w.r.t. Gaussian means, but only the portion \n\t// that is caused because the mean affects the view-dependent color.\n\t// Additional mean gradient is accumulated in below methods.\n\tdL_dmeans[idx] += glm::vec3(dL_dmean.x, dL_dmean.y, dL_dmean.z);\n}\n\n// Backward version of INVERSE 2D covariance matrix computation\n// (due to length launched as separate kernel before other \n// backward steps contained in preprocess)\n__global__ void computeCov2DCUDA(int P,\n\tconst float3* means,\n\tconst int* radii,\n\tconst float* cov3Ds,\n\tconst float h_x, float h_y,\n\tconst float tan_fovx, float tan_fovy,\n\tconst float* view_matrix,\n\tconst float* dL_dconics,\n\tfloat3* dL_dmeans,\n\tfloat* dL_dcov)\n{\n\tauto idx = cg::this_grid().thread_rank();\n\tif (idx >= P || !(radii[idx] > 0))\n\t\treturn;\n\n\t// Reading location of 3D covariance for this Gaussian\n\tconst float* cov3D = cov3Ds + 6 * idx;\n\n\t// Fetch gradients, recompute 2D covariance and relevant \n\t// intermediate forward results needed in the backward.\n\tfloat3 mean = means[idx];\n\tfloat3 dL_dconic = { dL_dconics[4 * idx], dL_dconics[4 * idx + 1], dL_dconics[4 * idx + 3] };\n\tfloat3 t = transformPoint4x3(mean, view_matrix);\n\t\n\tconst float limx = 1.3f * tan_fovx;\n\tconst float limy = 1.3f * tan_fovy;\n\tconst float txtz = t.x / t.z;\n\tconst float tytz = t.y / t.z;\n\tt.x = min(limx, max(-limx, txtz)) * t.z;\n\tt.y = min(limy, max(-limy, tytz)) * t.z;\n\t\n\tconst float x_grad_mul = txtz < -limx || txtz > limx ? 0 : 1;\n\tconst float y_grad_mul = tytz < -limy || tytz > limy ? 0 : 1;\n\n\tglm::mat3 J = glm::mat3(h_x / t.z, 0.0f, -(h_x * t.x) / (t.z * t.z),\n\t\t0.0f, h_y / t.z, -(h_y * t.y) / (t.z * t.z),\n\t\t0, 0, 0);\n\n\tglm::mat3 W = glm::mat3(\n\t\tview_matrix[0], view_matrix[4], view_matrix[8],\n\t\tview_matrix[1], view_matrix[5], view_matrix[9],\n\t\tview_matrix[2], view_matrix[6], view_matrix[10]);\n\n\tglm::mat3 Vrk = glm::mat3(\n\t\tcov3D[0], cov3D[1], cov3D[2],\n\t\tcov3D[1], cov3D[3], cov3D[4],\n\t\tcov3D[2], cov3D[4], cov3D[5]);\n\n\tglm::mat3 T = W * J;\n\n\tglm::mat3 cov2D = glm::transpose(T) * glm::transpose(Vrk) * T;\n\n\t// Use helper variables for 2D covariance entries. More compact.\n\tfloat a = cov2D[0][0] += 0.3f;\n\tfloat b = cov2D[0][1];\n\tfloat c = cov2D[1][1] += 0.3f;\n\n\tfloat denom = a * c - b * b;\n\tfloat dL_da = 0, dL_db = 0, dL_dc = 0;\n\tfloat denom2inv = 1.0f / ((denom * denom) + 0.0000001f);\n\n\tif (denom2inv != 0)\n\t{\n\t\t// Gradients of loss w.r.t. entries of 2D covariance matrix,\n\t\t// given gradients of loss w.r.t. conic matrix (inverse covariance matrix).\n\t\t// e.g., dL / da = dL / d_conic_a * d_conic_a / d_a\n\t\tdL_da = denom2inv * (-c * c * dL_dconic.x + 2 * b * c * dL_dconic.y + (denom - a * c) * dL_dconic.z);\n\t\tdL_dc = denom2inv * (-a * a * dL_dconic.z + 2 * a * b * dL_dconic.y + (denom - a * c) * dL_dconic.x);\n\t\tdL_db = denom2inv * 2 * (b * c * dL_dconic.x - (denom + 2 * b * b) * dL_dconic.y + a * b * dL_dconic.z);\n\n\t\t// Gradients of loss L w.r.t. each 3D covariance matrix (Vrk) entry, \n\t\t// given gradients w.r.t. 2D covariance matrix (diagonal).\n\t\t// cov2D = transpose(T) * transpose(Vrk) * T;\n\t\tdL_dcov[6 * idx + 0] = (T[0][0] * T[0][0] * dL_da + T[0][0] * T[1][0] * dL_db + T[1][0] * T[1][0] * dL_dc);\n\t\tdL_dcov[6 * idx + 3] = (T[0][1] * T[0][1] * dL_da + T[0][1] * T[1][1] * dL_db + T[1][1] * T[1][1] * dL_dc);\n\t\tdL_dcov[6 * idx + 5] = (T[0][2] * T[0][2] * dL_da + T[0][2] * T[1][2] * dL_db + T[1][2] * T[1][2] * dL_dc);\n\n\t\t// Gradients of loss L w.r.t. each 3D covariance matrix (Vrk) entry, \n\t\t// given gradients w.r.t. 2D covariance matrix (off-diagonal).\n\t\t// Off-diagonal elements appear twice --> double the gradient.\n\t\t// cov2D = transpose(T) * transpose(Vrk) * T;\n\t\tdL_dcov[6 * idx + 1] = 2 * T[0][0] * T[0][1] * dL_da + (T[0][0] * T[1][1] + T[0][1] * T[1][0]) * dL_db + 2 * T[1][0] * T[1][1] * dL_dc;\n\t\tdL_dcov[6 * idx + 2] = 2 * T[0][0] * T[0][2] * dL_da + (T[0][0] * T[1][2] + T[0][2] * T[1][0]) * dL_db + 2 * T[1][0] * T[1][2] * dL_dc;\n\t\tdL_dcov[6 * idx + 4] = 2 * T[0][2] * T[0][1] * dL_da + (T[0][1] * T[1][2] + T[0][2] * T[1][1]) * dL_db + 2 * T[1][1] * T[1][2] * dL_dc;\n\t}\n\telse\n\t{\n\t\tfor (int i = 0; i < 6; i++)\n\t\t\tdL_dcov[6 * idx + i] = 0;\n\t}\n\n\t// Gradients of loss w.r.t. upper 2x3 portion of intermediate matrix T\n\t// cov2D = transpose(T) * transpose(Vrk) * T;\n\tfloat dL_dT00 = 2 * (T[0][0] * Vrk[0][0] + T[0][1] * Vrk[0][1] + T[0][2] * Vrk[0][2]) * dL_da +\n\t\t(T[1][0] * Vrk[0][0] + T[1][1] * Vrk[0][1] + T[1][2] * Vrk[0][2]) * dL_db;\n\tfloat dL_dT01 = 2 * (T[0][0] * Vrk[1][0] + T[0][1] * Vrk[1][1] + T[0][2] * Vrk[1][2]) * dL_da +\n\t\t(T[1][0] * Vrk[1][0] + T[1][1] * Vrk[1][1] + T[1][2] * Vrk[1][2]) * dL_db;\n\tfloat dL_dT02 = 2 * (T[0][0] * Vrk[2][0] + T[0][1] * Vrk[2][1] + T[0][2] * Vrk[2][2]) * dL_da +\n\t\t(T[1][0] * Vrk[2][0] + T[1][1] * Vrk[2][1] + T[1][2] * Vrk[2][2]) * dL_db;\n\tfloat dL_dT10 = 2 * (T[1][0] * Vrk[0][0] + T[1][1] * Vrk[0][1] + T[1][2] * Vrk[0][2]) * dL_dc +\n\t\t(T[0][0] * Vrk[0][0] + T[0][1] * Vrk[0][1] + T[0][2] * Vrk[0][2]) * dL_db;\n\tfloat dL_dT11 = 2 * (T[1][0] * Vrk[1][0] + T[1][1] * Vrk[1][1] + T[1][2] * Vrk[1][2]) * dL_dc +\n\t\t(T[0][0] * Vrk[1][0] + T[0][1] * Vrk[1][1] + T[0][2] * Vrk[1][2]) * dL_db;\n\tfloat dL_dT12 = 2 * (T[1][0] * Vrk[2][0] + T[1][1] * Vrk[2][1] + T[1][2] * Vrk[2][2]) * dL_dc +\n\t\t(T[0][0] * Vrk[2][0] + T[0][1] * Vrk[2][1] + T[0][2] * Vrk[2][2]) * dL_db;\n\n\t// Gradients of loss w.r.t. upper 3x2 non-zero entries of Jacobian matrix\n\t// T = W * J\n\tfloat dL_dJ00 = W[0][0] * dL_dT00 + W[0][1] * dL_dT01 + W[0][2] * dL_dT02;\n\tfloat dL_dJ02 = W[2][0] * dL_dT00 + W[2][1] * dL_dT01 + W[2][2] * dL_dT02;\n\tfloat dL_dJ11 = W[1][0] * dL_dT10 + W[1][1] * dL_dT11 + W[1][2] * dL_dT12;\n\tfloat dL_dJ12 = W[2][0] * dL_dT10 + W[2][1] * dL_dT11 + W[2][2] * dL_dT12;\n\n\tfloat tz = 1.f / t.z;\n\tfloat tz2 = tz * tz;\n\tfloat tz3 = tz2 * tz;\n\n\t// Gradients of loss w.r.t. transformed Gaussian mean t\n\tfloat dL_dtx = x_grad_mul * -h_x * tz2 * dL_dJ02;\n\tfloat dL_dty = y_grad_mul * -h_y * tz2 * dL_dJ12;\n\tfloat dL_dtz = -h_x * tz2 * dL_dJ00 - h_y * tz2 * dL_dJ11 + (2 * h_x * t.x) * tz3 * dL_dJ02 + (2 * h_y * t.y) * tz3 * dL_dJ12;\n\n\t// Account for transformation of mean to t\n\t// t = transformPoint4x3(mean, view_matrix);\n\tfloat3 dL_dmean = transformVec4x3Transpose({ dL_dtx, dL_dty, dL_dtz }, view_matrix);\n\n\t// Gradients of loss w.r.t. Gaussian means, but only the portion \n\t// that is caused because the mean affects the covariance matrix.\n\t// Additional mean gradient is accumulated in BACKWARD::preprocess.\n\tdL_dmeans[idx] = dL_dmean;\n}\n\n// Backward pass for the conversion of scale and rotation to a \n// 3D covariance matrix for each Gaussian. \n__device__ void computeCov3D(int idx, const glm::vec3 scale, float mod, const glm::vec4 rot, const float* dL_dcov3Ds, glm::vec3* dL_dscales, glm::vec4* dL_drots)\n{\n\t// Recompute (intermediate) results for the 3D covariance computation.\n\tglm::vec4 q = rot;// / glm::length(rot);\n\tfloat r = q.x;\n\tfloat x = q.y;\n\tfloat y = q.z;\n\tfloat z = q.w;\n\n\tglm::mat3 R = glm::mat3(\n\t\t1.f - 2.f * (y * y + z * z), 2.f * (x * y - r * z), 2.f * (x * z + r * y),\n\t\t2.f * (x * y + r * z), 1.f - 2.f * (x * x + z * z), 2.f * (y * z - r * x),\n\t\t2.f * (x * z - r * y), 2.f * (y * z + r * x), 1.f - 2.f * (x * x + y * y)\n\t);\n\n\tglm::mat3 S = glm::mat3(1.0f);\n\n\tglm::vec3 s = mod * scale;\n\tS[0][0] = s.x;\n\tS[1][1] = s.y;\n\tS[2][2] = s.z;\n\n\tglm::mat3 M = S * R;\n\n\tconst float* dL_dcov3D = dL_dcov3Ds + 6 * idx;\n\n\tglm::vec3 dunc(dL_dcov3D[0], dL_dcov3D[3], dL_dcov3D[5]);\n\tglm::vec3 ounc = 0.5f * glm::vec3(dL_dcov3D[1], dL_dcov3D[2], dL_dcov3D[4]);\n\n\t// Convert per-element covariance loss gradients to matrix form\n\tglm::mat3 dL_dSigma = glm::mat3(\n\t\tdL_dcov3D[0], 0.5f * dL_dcov3D[1], 0.5f * dL_dcov3D[2],\n\t\t0.5f * dL_dcov3D[1], dL_dcov3D[3], 0.5f * dL_dcov3D[4],\n\t\t0.5f * dL_dcov3D[2], 0.5f * dL_dcov3D[4], dL_dcov3D[5]\n\t);\n\n\t// Compute loss gradient w.r.t. matrix M\n\t// dSigma_dM = 2 * M\n\tglm::mat3 dL_dM = 2.0f * M * dL_dSigma;\n\n\tglm::mat3 Rt = glm::transpose(R);\n\tglm::mat3 dL_dMt = glm::transpose(dL_dM);\n\n\t// Gradients of loss w.r.t. scale\n\tglm::vec3* dL_dscale = dL_dscales + idx;\n\tdL_dscale->x = glm::dot(Rt[0], dL_dMt[0]);\n\tdL_dscale->y = glm::dot(Rt[1], dL_dMt[1]);\n\tdL_dscale->z = glm::dot(Rt[2], dL_dMt[2]);\n\n\tdL_dMt[0] *= s.x;\n\tdL_dMt[1] *= s.y;\n\tdL_dMt[2] *= s.z;\n\n\t// Gradients of loss w.r.t. normalized quaternion\n\tglm::vec4 dL_dq;\n\tdL_dq.x = 2 * z * (dL_dMt[0][1] - dL_dMt[1][0]) + 2 * y * (dL_dMt[2][0] - dL_dMt[0][2]) + 2 * x * (dL_dMt[1][2] - dL_dMt[2][1]);\n\tdL_dq.y = 2 * y * (dL_dMt[1][0] + dL_dMt[0][1]) + 2 * z * (dL_dMt[2][0] + dL_dMt[0][2]) + 2 * r * (dL_dMt[1][2] - dL_dMt[2][1]) - 4 * x * (dL_dMt[2][2] + dL_dMt[1][1]);\n\tdL_dq.z = 2 * x * (dL_dMt[1][0] + dL_dMt[0][1]) + 2 * r * (dL_dMt[2][0] - dL_dMt[0][2]) + 2 * z * (dL_dMt[1][2] + dL_dMt[2][1]) - 4 * y * (dL_dMt[2][2] + dL_dMt[0][0]);\n\tdL_dq.w = 2 * r * (dL_dMt[0][1] - dL_dMt[1][0]) + 2 * x * (dL_dMt[2][0] + dL_dMt[0][2]) + 2 * y * (dL_dMt[1][2] + dL_dMt[2][1]) - 4 * z * (dL_dMt[1][1] + dL_dMt[0][0]);\n\n\t// Gradients of loss w.r.t. unnormalized quaternion\n\tfloat4* dL_drot = (float4*)(dL_drots + idx);\n\t*dL_drot = float4{ dL_dq.x, dL_dq.y, dL_dq.z, dL_dq.w };//dnormvdv(float4{ rot.x, rot.y, rot.z, rot.w }, float4{ dL_dq.x, dL_dq.y, dL_dq.z, dL_dq.w });\n}\n\n// Backward pass of the preprocessing steps, except\n// for the covariance computation and inversion\n// (those are handled by a previous kernel call)\ntemplate<int C>\n__global__ void preprocessCUDA(\n\tint P, int D, int M,\n\tconst float3* means,\n\tconst int* radii,\n\tconst float* shs,\n\tconst bool* clamped,\n\tconst glm::vec3* scales,\n\tconst glm::vec4* rotations,\n\tconst float scale_modifier,\n\tconst float* proj,\n\tconst glm::vec3* campos,\n\tconst float3* dL_dmean2D,\n\tglm::vec3* dL_dmeans,\n\tfloat* dL_dcolor,\n\tfloat* dL_dcov3D,\n\tfloat* dL_dsh,\n\tglm::vec3* dL_dscale,\n\tglm::vec4* dL_drot)\n{\n\tauto idx = cg::this_grid().thread_rank();\n\tif (idx >= P || !(radii[idx] > 0))\n\t\treturn;\n\n\tfloat3 m = means[idx];\n\n\t// Taking care of gradients from the screenspace points\n\tfloat4 m_hom = transformPoint4x4(m, proj);\n\tfloat m_w = 1.0f / (m_hom.w + 0.0000001f);\n\n\t// Compute loss gradient w.r.t. 3D means due to gradients of 2D means\n\t// from rendering procedure\n\tglm::vec3 dL_dmean;\n\tfloat mul1 = (proj[0] * m.x + proj[4] * m.y + proj[8] * m.z + proj[12]) * m_w * m_w;\n\tfloat mul2 = (proj[1] * m.x + proj[5] * m.y + proj[9] * m.z + proj[13]) * m_w * m_w;\n\tdL_dmean.x = (proj[0] * m_w - proj[3] * mul1) * dL_dmean2D[idx].x + (proj[1] * m_w - proj[3] * mul2) * dL_dmean2D[idx].y;\n\tdL_dmean.y = (proj[4] * m_w - proj[7] * mul1) * dL_dmean2D[idx].x + (proj[5] * m_w - proj[7] * mul2) * dL_dmean2D[idx].y;\n\tdL_dmean.z = (proj[8] * m_w - proj[11] * mul1) * dL_dmean2D[idx].x + (proj[9] * m_w - proj[11] * mul2) * dL_dmean2D[idx].y;\n\n\t// That's the second part of the mean gradient. Previous computation\n\t// of cov2D and following SH conversion also affects it.\n\tdL_dmeans[idx] += dL_dmean;\n\n\t// Compute gradient updates due to computing colors from SHs\n\tif (shs)\n\t\tcomputeColorFromSH(idx, D, M, (glm::vec3*)means, *campos, shs, clamped, (glm::vec3*)dL_dcolor, (glm::vec3*)dL_dmeans, (glm::vec3*)dL_dsh);\n\n\t// Compute gradient updates due to computing covariance from scale/rotation\n\tif (scales)\n\t\tcomputeCov3D(idx, scales[idx], scale_modifier, rotations[idx], dL_dcov3D, dL_dscale, dL_drot);\n}\n\n// Backward version of the rendering procedure.\ntemplate <uint32_t C, uint32_t F, uint32_t F_ins, uint32_t MAP_N>\n__global__ void __launch_bounds__(BLOCK_X * BLOCK_Y)\nrenderCUDA(\n\tconst uint2* __restrict__ ranges,\n\tconst uint32_t* __restrict__ point_list,\n\tint W, int H,\n\tfloat fx, float fy,\n\tconst float* __restrict__ bg_color,\n\tconst float2* __restrict__ points_xy_image,\n\tconst float4* __restrict__ conic_opacity,\n\tconst float* __restrict__ colors,\n\tconst float* __restrict__ language_feature,\n\tconst float* __restrict__ language_feature_instance,\n\tconst float* __restrict__ all_maps,\n\tconst float* __restrict__ all_map_pixels,\n\tconst float* __restrict__ final_Ts,\n\tconst uint32_t* __restrict__ n_contrib,\n\tconst float* __restrict__ dL_dpixels,\n\tconst float* __restrict__ dL_dpixels_F,\n\tconst float* __restrict__ dL_dpixels_F_instance,\n\tconst float* __restrict__ dL_dout_all_maps,\n\tconst float* __restrict__ dL_dout_plane_depths,\n\tfloat3* __restrict__ dL_dmean2D,\n\tfloat3* __restrict__ dL_dmean2D_abs,\n\tfloat4* __restrict__ dL_dconic2D,\n\tfloat* __restrict__ dL_dopacity,\n\tfloat* __restrict__ dL_dcolors,\n\tfloat* __restrict__ dL_dlanguage_feature,\n\tfloat* __restrict__ dL_dlanguage_feature_instance,\n\tfloat* __restrict__ dL_dall_map,\n\tconst bool render_geo,\n\tbool include_feature)\n{\n\t// We rasterize again. Compute necessary block info.\n\tauto block = cg::this_thread_block();\n\tconst uint32_t horizontal_blocks = (W + BLOCK_X - 1) / BLOCK_X;\n\tconst uint2 pix_min = { block.group_index().x * BLOCK_X, block.group_index().y * BLOCK_Y };\n\tconst uint2 pix_max = { min(pix_min.x + BLOCK_X, W), min(pix_min.y + BLOCK_Y , H) };\n\tconst uint2 pix = { pix_min.x + block.thread_index().x, pix_min.y + block.thread_index().y };\n\tconst uint32_t pix_id = W * pix.y + pix.x;\n\tconst float2 pixf = { (float)pix.x, (float)pix.y };\n\tconst float2 ray = { (pixf.x - W * 0.5) / fx, (pixf.y - H * 0.5) / fy };\n\n\tconst bool inside = pix.x < W&& pix.y < H;\n\tconst uint2 range = ranges[block.group_index().y * horizontal_blocks + block.group_index().x];\n\n\tconst int rounds = ((range.y - range.x + BLOCK_SIZE - 1) / BLOCK_SIZE);\n\n\tbool done = !inside;\n\tint toDo = range.y - range.x;\n\n\t__shared__ int collected_id[BLOCK_SIZE];\n\t__shared__ float2 collected_xy[BLOCK_SIZE];\n\t__shared__ float4 collected_conic_opacity[BLOCK_SIZE];\n\t__shared__ float collected_colors[C * BLOCK_SIZE];\n\t__shared__ float collected_feature[F * BLOCK_SIZE];\n\t__shared__ float collected_feature_instance[F_ins * BLOCK_SIZE];\n\t__shared__ float collected_all_maps[MAP_N * BLOCK_SIZE];\n\n\t// In the forward, we stored the final value for T, the\n\t// product of all (1 - alpha) factors. \n\tconst float T_final = inside ? final_Ts[pix_id] : 0;\n\tfloat T = T_final;\n\n\t// We start from the back. The ID of the last contributing\n\t// Gaussian is known from each pixel from the forward.\n\tuint32_t contributor = toDo;\n\tconst int last_contributor = inside ? n_contrib[pix_id] : 0;\n\n\tfloat accum_rec[C] = { 0 };\n\tfloat accum_all_map[MAP_N] = { 0 };\n\tfloat accum_rec_F[F] = { 0 };\n\tfloat accum_rec_F_instance[F_ins] = { 0 };\n\n\tfloat dL_dpixel[C];\n\tfloat dL_dout_all_map[MAP_N];\n\tfloat dL_dpixel_F[F] = { 0 };\n\tfloat dL_dpixel_F_instance[F_ins] = { 0 };\n\t// float grad_sum = 0;\n\n\tif (inside) {\n\t\tfor (int i = 0; i < C; i++) {\n\t\t\tdL_dpixel[i] = dL_dpixels[i * H * W + pix_id];\n\t\t\t// grad_sum += fabs(dL_dpixel[i]);\n\t\t}\n\t\tif (include_feature) {\n\t\t\tfor (int i = 0; i < F; i++) {\n\t\t\t\tdL_dpixel_F[i] = dL_dpixels_F[i * H * W + pix_id];\n\t\t\t}\n\t\t\tfor (int i = 0; i < F_ins; i++) {\n\t\t\t\tdL_dpixel_F_instance[i] = dL_dpixels_F_instance[i * H * W + pix_id];\n\t\t\t}\n\t\t}\n\t\tif(render_geo) {\n\t\t\tfor (int i = 0; i < MAP_N; i++) {\n\t\t\t\tdL_dout_all_map[i] = dL_dout_all_maps[i * H * W + pix_id];\n\t\t\t\t// grad_sum += fabs(dL_dout_all_map[i]);\n\t\t\t}\n\t\t\tconst float3 normal = {all_map_pixels[pix_id], all_map_pixels[H * W + pix_id], all_map_pixels[2 * H * W + pix_id]};\n\t\t\tconst float distance = all_map_pixels[4 * H * W + pix_id];\n\t\t\tconst float tmp = (normal.x * ray.x + normal.y * ray.y + normal.z + 1.0e-8);\n\t\t\tdL_dout_all_map[MAP_N-1] += (-dL_dout_plane_depths[pix_id] / tmp);\n\t\t\tdL_dout_all_map[0] += dL_dout_plane_depths[pix_id] * (distance / (tmp * tmp) * ray.x);\n\t\t\tdL_dout_all_map[1] += dL_dout_plane_depths[pix_id] * (distance / (tmp * tmp) * ray.y);\n\t\t\tdL_dout_all_map[2] += dL_dout_plane_depths[pix_id] * (distance / (tmp * tmp));\n\t\t}\n\t}\n\t// If grad is too small, skip\n\t// if (grad_sum < 0.000001f) {\n\t// \tdone = true;\n\t// }\n\n\tfloat last_alpha = 0;\n\tfloat last_color[C] = { 0 };\n\tfloat last_language_feature[F] = { 0 };\n\tfloat last_language_feature_instance[F_ins] = { 0 };\n\tfloat last_all_map[MAP_N] = { 0 };\n\n\n\t// Gradient of pixel coordinate w.r.t. normalized \n\t// screen-space viewport corrdinates (-1 to 1)\n\tconst float ddelx_dx = 0.5 * W;\n\tconst float ddely_dy = 0.5 * H;\n\n\t// Traverse all Gaussians\n\tfor (int i = 0; i < rounds; i++, toDo -= BLOCK_SIZE)\n\t{\n\t\t// Load auxiliary data into shared memory, start in the BACK\n\t\t// and load them in revers order.\n\t\tblock.sync();\n\t\tconst int progress = i * BLOCK_SIZE + block.thread_rank();\n\t\tif (range.x + progress < range.y)\n\t\t{\n\t\t\tconst int coll_id = point_list[range.y - progress - 1];\n\t\t\tcollected_id[block.thread_rank()] = coll_id;\n\t\t\tcollected_xy[block.thread_rank()] = points_xy_image[coll_id];\n\t\t\tcollected_conic_opacity[block.thread_rank()] = conic_opacity[coll_id];\n\t\t\tfor (int i = 0; i < C; i++)\n\t\t\t\tcollected_colors[i * BLOCK_SIZE + block.thread_rank()] = colors[coll_id * C + i];\n\t\t\tif (include_feature) {\n\t\t\t\tfor (int i = 0; i < F; i++)\n\t\t\t\t\tcollected_feature[i * BLOCK_SIZE + block.thread_rank()] = language_feature[coll_id * F + i];\n\t\t\t\tfor (int i = 0; i < F_ins; i++)\n\t\t\t\t\tcollected_feature_instance[i * BLOCK_SIZE + block.thread_rank()] = language_feature_instance[coll_id * F_ins + i];\n\t\t\t}\n\t\t\tif (render_geo) {\n\t\t\t\tfor (int i = 0; i < MAP_N; i++)\n\t\t\t\t\tcollected_all_maps[i * BLOCK_SIZE + block.thread_rank()] = all_maps[coll_id * MAP_N + i];\n\t\t\t}\n\t\t}\n\t\tblock.sync();\n\n\t\t// Iterate over Gaussians\n\t\tfor (int j = 0; !done && j < min(BLOCK_SIZE, toDo); j++)\n\t\t{\n\t\t\t// Keep track of current Gaussian ID. Skip, if this one\n\t\t\t// is behind the last contributor for this pixel.\n\t\t\tcontributor--;\n\t\t\tif (contributor >= last_contributor)\n\t\t\t\tcontinue;\n\n\t\t\t// Compute blending values, as before.\n\t\t\tconst float2 xy = collected_xy[j];\n\t\t\tconst float2 d = { xy.x - pixf.x, xy.y - pixf.y };\n\t\t\tconst float4 con_o = collected_conic_opacity[j];\n\t\t\tconst float power = -0.5f * (con_o.x * d.x * d.x + con_o.z * d.y * d.y) - con_o.y * d.x * d.y;\n\t\t\tif (power > 0.0f)\n\t\t\t\tcontinue;\n\n\t\t\tconst float G = exp(power);\n\t\t\tconst float alpha = min(0.99f, con_o.w * G);\n\t\t\tif (alpha < 1.0f / 255.0f)\n\t\t\t\tcontinue;\n\n\t\t\tT = T / (1.f - alpha);\n\t\t\tconst float dchannel_dcolor = alpha * T;\n\n\t\t\t// Propagate gradients to per-Gaussian colors and keep\n\t\t\t// gradients w.r.t. alpha (blending factor for a Gaussian/pixel\n\t\t\t// pair).\n\t\t\tfloat dL_dalpha = 0.0f;\n\t\t\tconst int global_id = collected_id[j];\n\t\t\tfor (int ch = 0; ch < C; ch++)\n\t\t\t{\n\t\t\t\tconst float c = collected_colors[ch * BLOCK_SIZE + j];\n\t\t\t\t// Update last color (to be used in the next iteration)\n\t\t\t\taccum_rec[ch] = last_alpha * last_color[ch] + (1.f - last_alpha) * accum_rec[ch];\n\t\t\t\tlast_color[ch] = c;\n\n\t\t\t\tconst float dL_dchannel = dL_dpixel[ch];\n\t\t\t\tdL_dalpha += (c - accum_rec[ch]) * dL_dchannel;\n\t\t\t\t// Update the gradients w.r.t. color of the Gaussian. \n\t\t\t\t// Atomic, since this pixel is just one of potentially\n\t\t\t\t// many that were affected by this Gaussian.\n\t\t\t\tatomicAdd(&(dL_dcolors[global_id * C + ch]), dchannel_dcolor * dL_dchannel);\n\t\t\t}\n\t\t\tif (include_feature) {\n\t\t\t\tfor (int ch = 0; ch < F; ch++)\n\t\t\t\t{\n\t\t\t\t\tconst float f = collected_feature[ch * BLOCK_SIZE + j];\n\t\t\t\t\t// Update last color (to be used in the next iteration)\n\t\t\t\t\taccum_rec_F[ch] = last_alpha * last_language_feature[ch] + (1.f - last_alpha) * accum_rec_F[ch];\n\t\t\t\t\tlast_language_feature[ch] = f;\n\n\t\t\t\t\tconst float dL_dchannel_F = dL_dpixel_F[ch];\n\t\t\t\t\tdL_dalpha += (f - accum_rec_F[ch]) * dL_dchannel_F;\n\t\t\t\t\t// Update the gradients w.r.t. color of the Gaussian. \n\t\t\t\t\t// Atomic, since this pixel is just one of potentially\n\t\t\t\t\t// many that were affected by this Gaussian.\n\t\t\t\t\tatomicAdd(&(dL_dlanguage_feature[global_id * F + ch]), dchannel_dcolor * dL_dchannel_F);\n\t\t\t\t}\n\t\t\t\tfor (int ch = 0; ch < F_ins; ch++)\n\t\t\t\t{\n\t\t\t\t\t// instance\n\t\t\t\t\tconst float f_ins = collected_feature_instance[ch * BLOCK_SIZE + j];\n\t\t\t\t\t// Update last color (to be used in the next iteration)\n\t\t\t\t\taccum_rec_F_instance[ch] = last_alpha * last_language_feature_instance[ch] + (1.f - last_alpha) * accum_rec_F_instance[ch];\n\t\t\t\t\tlast_language_feature_instance[ch] = f_ins;\n\n\t\t\t\t\tconst float dL_dchannel_F_instance = dL_dpixel_F_instance[ch];\n\t\t\t\t\tdL_dalpha += (f_ins - accum_rec_F_instance[ch]) * dL_dchannel_F_instance;\n\t\t\t\t\t// Update the gradients w.r.t. color of the Gaussian. \n\t\t\t\t\t// Atomic, since this pixel is just one of potentially\n\t\t\t\t\t// many that were affected by this Gaussian.\n\t\t\t\t\tatomicAdd(&(dL_dlanguage_feature_instance[global_id * F_ins + ch]), dchannel_dcolor * dL_dchannel_F_instance);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (render_geo) {\n\t\t\t\tfor (int ch = 0; ch < MAP_N; ch++)\n\t\t\t\t{\n\t\t\t\t\tconst float c = collected_all_maps[ch * BLOCK_SIZE + j];\n\t\t\t\t\t// Update last color (to be used in the next iteration)\n\t\t\t\t\taccum_all_map[ch] = last_alpha * last_all_map[ch] + (1.f - last_alpha) * accum_all_map[ch];\n\t\t\t\t\tlast_all_map[ch] = c;\n\n\t\t\t\t\tconst float dL_dchannel = dL_dout_all_map[ch];\n\t\t\t\t\tdL_dalpha += (c - accum_all_map[ch]) * dL_dchannel;\n\t\t\t\t\t// Update the gradients w.r.t. color of the Gaussian. \n\t\t\t\t\t// Atomic, since this pixel is just one of potentially\n\t\t\t\t\t// many that were affected by this Gaussian.\n\t\t\t\t\tatomicAdd(&(dL_dall_map[global_id * MAP_N + ch]), dchannel_dcolor * dL_dchannel);\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tdL_dalpha *= T;\n\t\t\t// Update last alpha (to be used in the next iteration)\n\t\t\tlast_alpha = alpha;\n\n\t\t\t// Account for fact that alpha also influences how much of\n\t\t\t// the background color is added if nothing left to blend\n\t\t\tfloat bg_dot_dpixel = 0;\n\t\t\tfor (int i = 0; i < C; i++)\n\t\t\t\tbg_dot_dpixel += bg_color[i] * dL_dpixel[i];\n\t\t\tdL_dalpha += (-T_final / (1.f - alpha)) * bg_dot_dpixel;\n\n\n\t\t\t// Helpful reusable temporary variables\n\t\t\tconst float dL_dG = con_o.w * dL_dalpha;\n\t\t\tconst float gdx = G * d.x;\n\t\t\tconst float gdy = G * d.y;\n\t\t\tconst float dG_ddelx = -gdx * con_o.x - gdy * con_o.y;\n\t\t\tconst float dG_ddely = -gdy * con_o.z - gdx * con_o.y;\n\n\t\t\t// Update gradients w.r.t. 2D mean position of the Gaussian\n\t\t\tatomicAdd(&dL_dmean2D[global_id].x, dL_dG * dG_ddelx * ddelx_dx);\n\t\t\tatomicAdd(&dL_dmean2D[global_id].y, dL_dG * dG_ddely * ddely_dy);\n\t\t\tatomicAdd(&dL_dmean2D_abs[global_id].x, fabs(dL_dG * dG_ddelx * ddelx_dx));\n\t\t\tatomicAdd(&dL_dmean2D_abs[global_id].y, fabs(dL_dG * dG_ddely * ddely_dy));\n\n\t\t\t// Update gradients w.r.t. 2D covariance (2x2 matrix, symmetric)\n\t\t\tatomicAdd(&dL_dconic2D[global_id].x, -0.5f * gdx * d.x * dL_dG);\n\t\t\tatomicAdd(&dL_dconic2D[global_id].y, -0.5f * gdx * d.y * dL_dG);\n\t\t\tatomicAdd(&dL_dconic2D[global_id].w, -0.5f * gdy * d.y * dL_dG);\n\n\t\t\t// Update gradients w.r.t. opacity of the Gaussian\n\t\t\tatomicAdd(&(dL_dopacity[global_id]), G * dL_dalpha);\n\t\t}\n\t}\n}\n\nvoid BACKWARD::preprocess(\n\tint P, int D, int M,\n\tconst float3* means3D,\n\tconst int* radii,\n\tconst float* shs,\n\tconst bool* clamped,\n\tconst glm::vec3* scales,\n\tconst glm::vec4* rotations,\n\tconst float scale_modifier,\n\tconst float* cov3Ds,\n\tconst float* viewmatrix,\n\tconst float* projmatrix,\n\tconst float focal_x, float focal_y,\n\tconst float tan_fovx, float tan_fovy,\n\tconst glm::vec3* campos,\n\tconst float3* dL_dmean2D,\n\tconst float* dL_dconic,\n\tglm::vec3* dL_dmean3D,\n\tfloat* dL_dcolor,\n\tfloat* dL_dcov3D,\n\tfloat* dL_dsh,\n\tglm::vec3* dL_dscale,\n\tglm::vec4* dL_drot)\n{\n\t// Propagate gradients for the path of 2D conic matrix computation. \n\t// Somewhat long, thus it is its own kernel rather than being part of \n\t// \"preprocess\". When done, loss gradient w.r.t. 3D means has been\n\t// modified and gradient w.r.t. 3D covariance matrix has been computed.\t\n\tcomputeCov2DCUDA << <(P + 255) / 256, 256 >> > (\n\t\tP,\n\t\tmeans3D,\n\t\tradii,\n\t\tcov3Ds,\n\t\tfocal_x,\n\t\tfocal_y,\n\t\ttan_fovx,\n\t\ttan_fovy,\n\t\tviewmatrix,\n\t\tdL_dconic,\n\t\t(float3*)dL_dmean3D,\n\t\tdL_dcov3D);\n\n\t// Propagate gradients for remaining steps: finish 3D mean gradients,\n\t// propagate color gradients to SH (if desireD), propagate 3D covariance\n\t// matrix gradients to scale and rotation.\n\tpreprocessCUDA<NUM_CHANNELS> << < (P + 255) / 256, 256 >> > (\n\t\tP, D, M,\n\t\t(float3*)means3D,\n\t\tradii,\n\t\tshs,\n\t\tclamped,\n\t\t(glm::vec3*)scales,\n\t\t(glm::vec4*)rotations,\n\t\tscale_modifier,\n\t\tprojmatrix,\n\t\tcampos,\n\t\t(float3*)dL_dmean2D,\n\t\t(glm::vec3*)dL_dmean3D,\n\t\tdL_dcolor,\n\t\tdL_dcov3D,\n\t\tdL_dsh,\n\t\tdL_dscale,\n\t\tdL_drot);\n}\n\nvoid BACKWARD::render(\n\tconst dim3 grid, const dim3 block,\n\tconst uint2* ranges,\n\tconst uint32_t* point_list,\n\tint W, int H,\n\tfloat fx, float fy,\n\tconst float* bg_color,\n\tconst float2* means2D,\n\tconst float4* conic_opacity,\n\tconst float* colors,\n\tconst float* language_feature,\n\tconst float* language_feature_instance,\n\tconst float* all_maps,\n\tconst float* all_map_pixels,\n\tconst float* final_Ts,\n\tconst uint32_t* n_contrib,\n\tconst float* dL_dpixels,\n\tconst float* dL_dpixels_F,\n\tconst float* dL_dpixels_F_instance,\n\tconst float* dL_dout_all_map,\n\tconst float* dL_dout_plane_depth,\n\tfloat3* dL_dmean2D,\n\tfloat3* dL_dmean2D_abs,\n\tfloat4* dL_dconic2D,\n\tfloat* dL_dopacity,\n\tfloat* dL_dcolors,\n\tfloat* dL_dlanguage_feature,\n\tfloat* dL_dlanguage_feature_instance,\n\tfloat* dL_dall_map,\n\tconst bool render_geo,\n\tbool include_feature)\n{\n\trenderCUDA<NUM_CHANNELS,NUM_CHANNELS_language_feature,NUM_CHANNELS_instance_feature,NUM_ALL_MAP> << <grid, block >> >(\n\t\tranges,\n\t\tpoint_list,\n\t\tW, H,\n\t\tfx, fy,\n\t\tbg_color,\n\t\tmeans2D,\n\t\tconic_opacity,\n\t\tcolors,\n\t\tlanguage_feature,\n\t\tlanguage_feature_instance,\n\t\tall_maps,\n\t\tall_map_pixels,\n\t\tfinal_Ts,\n\t\tn_contrib,\n\t\tdL_dpixels,\n\t\tdL_dpixels_F,\n\t\tdL_dpixels_F_instance,\n\t\tdL_dout_all_map,\n\t\tdL_dout_plane_depth,\n\t\tdL_dmean2D,\n\t\tdL_dmean2D_abs,\n\t\tdL_dconic2D,\n\t\tdL_dopacity,\n\t\tdL_dcolors,\n\t\tdL_dlanguage_feature,\n\t\tdL_dlanguage_feature_instance,\n\t\tdL_dall_map,\n\t\trender_geo,\n\t\tinclude_feature\n\t\t);\n}"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/cuda_rasterizer/backward.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#ifndef CUDA_RASTERIZER_BACKWARD_H_INCLUDED\n#define CUDA_RASTERIZER_BACKWARD_H_INCLUDED\n\n#include <cuda.h>\n#include \"cuda_runtime.h\"\n#include \"device_launch_parameters.h\"\n#define GLM_FORCE_CUDA\n#include <glm/glm.hpp>\n\nnamespace BACKWARD\n{\n\tvoid render(\n\t\tconst dim3 grid, dim3 block,\n\t\tconst uint2* ranges,\n\t\tconst uint32_t* point_list,\n\t\tint W, int H,\n\t\tfloat fx, float fy,\n\t\tconst float* bg_color,\n\t\tconst float2* means2D,\n\t\tconst float4* conic_opacity,\n\t\tconst float* colors,\n\t\tconst float* language_feature,\n\t\tconst float* language_feature_instance,\n\t\tconst float* all_maps,\n\t\tconst float* all_map_pixels,\n\t\tconst float* final_Ts,\n\t\tconst uint32_t* n_contrib,\n\t\tconst float* dL_dpixels,\n\t\tconst float* dL_dpixels_F,\n\t\tconst float* dL_dpixels_F_instance,\n\t\tconst float* dL_dout_all_map,\n\t\tconst float* dL_dout_plane_depth,\n\t\tfloat3* dL_dmean2D,\n\t\tfloat3* dL_dmean2D_abs,\n\t\tfloat4* dL_dconic2D,\n\t\tfloat* dL_dopacity,\n\t\tfloat* dL_dcolors,\n\t\tfloat* dL_dlanguage_feature,\n\t\tfloat* dL_dlanguage_feature_instance,\n\t\tfloat* dL_dall_map,\n\t\tconst bool render_geo,\n\t\tbool include_feature);\n\n\tvoid preprocess(\n\t\tint P, int D, int M,\n\t\tconst float3* means,\n\t\tconst int* radii,\n\t\tconst float* shs,\n\t\tconst bool* clamped,\n\t\tconst glm::vec3* scales,\n\t\tconst glm::vec4* rotations,\n\t\tconst float scale_modifier,\n\t\tconst float* cov3Ds,\n\t\tconst float* view,\n\t\tconst float* proj,\n\t\tconst float focal_x, float focal_y,\n\t\tconst float tan_fovx, float tan_fovy,\n\t\tconst glm::vec3* campos,\n\t\tconst float3* dL_dmean2D,\n\t\tconst float* dL_dconics,\n\t\tglm::vec3* dL_dmeans,\n\t\tfloat* dL_dcolor,\n\t\tfloat* dL_dcov3D,\n\t\tfloat* dL_dsh,\n\t\tglm::vec3* dL_dscale,\n\t\tglm::vec4* dL_drot);\n}\n\n#endif"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/cuda_rasterizer/config.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use\n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#ifndef CUDA_RASTERIZER_CONFIG_H_INCLUDED\n#define CUDA_RASTERIZER_CONFIG_H_INCLUDED\n\n#define NUM_CHANNELS 3 // Default 3, RGB\n#define NUM_CHANNELS_language_feature 3\n#define NUM_CHANNELS_instance_feature 3\n#define NUM_ALL_MAP 5\n#define BLOCK_X 16\n#define BLOCK_Y 16\n\n#endif"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/cuda_rasterizer/forward.cu",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use\n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#include \"forward.h\"\n#include \"auxiliary.h\"\n#include <cooperative_groups.h>\n#include <cooperative_groups/reduce.h>\n#include <stdio.h>\nnamespace cg = cooperative_groups;\n\n// Forward method for converting the input spherical harmonics\n// coefficients of each Gaussian to a simple RGB color.\n__device__ glm::vec3 computeColorFromSH(int idx, int deg, int max_coeffs, const glm::vec3 *means, glm::vec3 campos, const float *shs, bool *clamped)\n{\n\t// The implementation is loosely based on code for\n\t// \"Differentiable Point-Based Radiance Fields for\n\t// Efficient View Synthesis\" by Zhang et al. (2022)\n\tglm::vec3 pos = means[idx];\n\tglm::vec3 dir = pos - campos;\n\tdir = dir / glm::length(dir);\n\n\tglm::vec3 *sh = ((glm::vec3 *)shs) + idx * max_coeffs;\n\tglm::vec3 result = SH_C0 * sh[0];\n\n\tif (deg > 0)\n\t{\n\t\tfloat x = dir.x;\n\t\tfloat y = dir.y;\n\t\tfloat z = dir.z;\n\t\tresult = result - SH_C1 * y * sh[1] + SH_C1 * z * sh[2] - SH_C1 * x * sh[3];\n\n\t\tif (deg > 1)\n\t\t{\n\t\t\tfloat xx = x * x, yy = y * y, zz = z * z;\n\t\t\tfloat xy = x * y, yz = y * z, xz = x * z;\n\t\t\tresult = result +\n\t\t\t\t\t SH_C2[0] * xy * sh[4] +\n\t\t\t\t\t SH_C2[1] * yz * sh[5] +\n\t\t\t\t\t SH_C2[2] * (2.0f * zz - xx - yy) * sh[6] +\n\t\t\t\t\t SH_C2[3] * xz * sh[7] +\n\t\t\t\t\t SH_C2[4] * (xx - yy) * sh[8];\n\n\t\t\tif (deg > 2)\n\t\t\t{\n\t\t\t\tresult = result +\n\t\t\t\t\t\t SH_C3[0] * y * (3.0f * xx - yy) * sh[9] +\n\t\t\t\t\t\t SH_C3[1] * xy * z * sh[10] +\n\t\t\t\t\t\t SH_C3[2] * y * (4.0f * zz - xx - yy) * sh[11] +\n\t\t\t\t\t\t SH_C3[3] * z * (2.0f * zz - 3.0f * xx - 3.0f * yy) * sh[12] +\n\t\t\t\t\t\t SH_C3[4] * x * (4.0f * zz - xx - yy) * sh[13] +\n\t\t\t\t\t\t SH_C3[5] * z * (xx - yy) * sh[14] +\n\t\t\t\t\t\t SH_C3[6] * x * (xx - 3.0f * yy) * sh[15];\n\t\t\t}\n\t\t}\n\t}\n\tresult += 0.5f;\n\n\t// RGB colors are clamped to positive values. If values are\n\t// clamped, we need to keep track of this for the backward pass.\n\tclamped[3 * idx + 0] = (result.x < 0);\n\tclamped[3 * idx + 1] = (result.y < 0);\n\tclamped[3 * idx + 2] = (result.z < 0);\n\treturn glm::max(result, 0.0f);\n}\n\n// Forward version of 2D covariance matrix computation\n__device__ float3 computeCov2D(const float3 &mean, float focal_x, float focal_y, float tan_fovx, float tan_fovy, const float *cov3D, const float *viewmatrix)\n{\n\t// The following models the steps outlined by equations 29\n\t// and 31 in \"EWA Splatting\" (Zwicker et al., 2002).\n\t// Additionally considers aspect / scaling of viewport.\n\t// Transposes used to account for row-/column-major conventions.\n\tfloat3 t = transformPoint4x3(mean, viewmatrix);\n\n\tconst float limx = 1.3f * tan_fovx;\n\tconst float limy = 1.3f * tan_fovy;\n\tconst float txtz = t.x / t.z;\n\tconst float tytz = t.y / t.z;\n\tt.x = min(limx, max(-limx, txtz)) * t.z;\n\tt.y = min(limy, max(-limy, tytz)) * t.z;\n\n\tglm::mat3 J = glm::mat3(\n\t\tfocal_x / t.z, 0.0f, -(focal_x * t.x) / (t.z * t.z),\n\t\t0.0f, focal_y / t.z, -(focal_y * t.y) / (t.z * t.z),\n\t\t0, 0, 0);\n\n\tglm::mat3 W = glm::mat3(\n\t\tviewmatrix[0], viewmatrix[4], viewmatrix[8],\n\t\tviewmatrix[1], viewmatrix[5], viewmatrix[9],\n\t\tviewmatrix[2], viewmatrix[6], viewmatrix[10]);\n\n\tglm::mat3 T = W * J;\n\n\tglm::mat3 Vrk = glm::mat3(\n\t\tcov3D[0], cov3D[1], cov3D[2],\n\t\tcov3D[1], cov3D[3], cov3D[4],\n\t\tcov3D[2], cov3D[4], cov3D[5]);\n\n\tglm::mat3 cov = glm::transpose(T) * glm::transpose(Vrk) * T;\n\n\t// Apply low-pass filter: every Gaussian should be at least\n\t// one pixel wide/high. Discard 3rd row and column.\n\tcov[0][0] += 0.3f;\n\tcov[1][1] += 0.3f;\n\treturn {float(cov[0][0]), float(cov[0][1]), float(cov[1][1])};\n}\n\n// Forward method for converting scale and rotation properties of each\n// Gaussian to a 3D covariance matrix in world space. Also takes care\n// of quaternion normalization.\n__device__ void computeCov3D(const glm::vec3 scale, float mod, const glm::vec4 rot, float *cov3D)\n{\n\t// Create scaling matrix\n\tglm::mat3 S = glm::mat3(1.0f);\n\tS[0][0] = mod * scale.x;\n\tS[1][1] = mod * scale.y;\n\tS[2][2] = mod * scale.z;\n\n\t// Normalize quaternion to get valid rotation\n\tglm::vec4 q = rot; // / glm::length(rot);\n\tfloat r = q.x;\n\tfloat x = q.y;\n\tfloat y = q.z;\n\tfloat z = q.w;\n\n\t// Compute rotation matrix from quaternion\n\tglm::mat3 R = glm::mat3(\n\t\t1.f - 2.f * (y * y + z * z), 2.f * (x * y - r * z), 2.f * (x * z + r * y),\n\t\t2.f * (x * y + r * z), 1.f - 2.f * (x * x + z * z), 2.f * (y * z - r * x),\n\t\t2.f * (x * z - r * y), 2.f * (y * z + r * x), 1.f - 2.f * (x * x + y * y));\n\n\tglm::mat3 M = S * R;\n\n\t// Compute 3D world covariance matrix Sigma\n\tglm::mat3 Sigma = glm::transpose(M) * M;\n\n\t// Covariance is symmetric, only store upper right\n\tcov3D[0] = Sigma[0][0];\n\tcov3D[1] = Sigma[0][1];\n\tcov3D[2] = Sigma[0][2];\n\tcov3D[3] = Sigma[1][1];\n\tcov3D[4] = Sigma[1][2];\n\tcov3D[5] = Sigma[2][2];\n}\n\n// Perform initial steps for each Gaussian prior to rasterization.\ntemplate <int C>\n__global__ void preprocessCUDA(int P, int D, int M,\n\t\t\t\t\t\t\t   const float *orig_points,\n\t\t\t\t\t\t\t   const glm::vec3 *scales,\n\t\t\t\t\t\t\t   const float scale_modifier,\n\t\t\t\t\t\t\t   const glm::vec4 *rotations,\n\t\t\t\t\t\t\t   const float *opacities,\n\t\t\t\t\t\t\t   const float *shs,\n\t\t\t\t\t\t\t   bool *clamped,\n\t\t\t\t\t\t\t   const float *cov3D_precomp,\n\t\t\t\t\t\t\t   const float *colors_precomp,\n\t\t\t\t\t\t\t   const float *viewmatrix,\n\t\t\t\t\t\t\t   const float *projmatrix,\n\t\t\t\t\t\t\t   const glm::vec3 *cam_pos,\n\t\t\t\t\t\t\t   const int W, int H,\n\t\t\t\t\t\t\t   const float tan_fovx, float tan_fovy,\n\t\t\t\t\t\t\t   const float focal_x, float focal_y,\n\t\t\t\t\t\t\t   int *radii,\n\t\t\t\t\t\t\t   float2 *points_xy_image,\n\t\t\t\t\t\t\t   float *depths,\n\t\t\t\t\t\t\t   float *cov3Ds,\n\t\t\t\t\t\t\t   float *rgb,\n\t\t\t\t\t\t\t   float4 *conic_opacity,\n\t\t\t\t\t\t\t   const dim3 grid,\n\t\t\t\t\t\t\t   uint32_t *tiles_touched,\n\t\t\t\t\t\t\t   bool prefiltered)\n{\n\tauto idx = cg::this_grid().thread_rank();\n\tif (idx >= P)\n\t\treturn;\n\n\t// Initialize radius and touched tiles to 0. If this isn't changed,\n\t// this Gaussian will not be processed further.\n\tradii[idx] = 0;\n\ttiles_touched[idx] = 0;\n\n\t// Perform near culling, quit if outside.\n\tfloat3 p_view;\n\tif (!in_frustum(idx, orig_points, viewmatrix, projmatrix, prefiltered, p_view))\n\t\treturn;\n\n\t// Transform point by projecting\n\tfloat3 p_orig = {orig_points[3 * idx], orig_points[3 * idx + 1], orig_points[3 * idx + 2]};\n\tfloat4 p_hom = transformPoint4x4(p_orig, projmatrix);\n\tfloat p_w = 1.0f / (p_hom.w + 0.0000001f);\n\tfloat3 p_proj = {p_hom.x * p_w, p_hom.y * p_w, p_hom.z * p_w};\n\n\t// If 3D covariance matrix is precomputed, use it, otherwise compute\n\t// from scaling and rotation parameters.\n\tconst float *cov3D;\n\tif (cov3D_precomp != nullptr)\n\t{\n\t\tcov3D = cov3D_precomp + idx * 6;\n\t}\n\telse\n\t{\n\t\tcomputeCov3D(scales[idx], scale_modifier, rotations[idx], cov3Ds + idx * 6);\n\t\tcov3D = cov3Ds + idx * 6;\n\t}\n\n\t// Compute 2D screen-space covariance matrix\n\tfloat3 cov = computeCov2D(p_orig, focal_x, focal_y, tan_fovx, tan_fovy, cov3D, viewmatrix);\n\n\t// Invert covariance (EWA algorithm)\n\tfloat det = (cov.x * cov.z - cov.y * cov.y);\n\tif (det == 0.0f)\n\t\treturn;\n\tfloat det_inv = 1.f / det;\n\tfloat3 conic = {cov.z * det_inv, -cov.y * det_inv, cov.x * det_inv};\n\n\t// Compute extent in screen space (by finding eigenvalues of\n\t// 2D covariance matrix). Use extent to compute a bounding rectangle\n\t// of screen-space tiles that this Gaussian overlaps with. Quit if\n\t// rectangle covers 0 tiles.\n\tfloat mid = 0.5f * (cov.x + cov.z);\n\tfloat lambda1 = mid + sqrt(max(0.1f, mid * mid - det));\n\tfloat lambda2 = mid - sqrt(max(0.1f, mid * mid - det));\n\tfloat my_radius = ceil(3.f * sqrt(max(lambda1, lambda2)));\n\tfloat2 point_image = {ndc2Pix(p_proj.x, W), ndc2Pix(p_proj.y, H)};\n\tuint2 rect_min, rect_max;\n\tgetRect(point_image, my_radius, rect_min, rect_max, grid);\n\tif ((rect_max.x - rect_min.x) * (rect_max.y - rect_min.y) == 0)\n\t\treturn;\n\n\t// If colors have been precomputed, use them, otherwise convert\n\t// spherical harmonics coefficients to RGB color.\n\tif (colors_precomp == nullptr)\n\t{\n\t\tglm::vec3 result = computeColorFromSH(idx, D, M, (glm::vec3 *)orig_points, *cam_pos, shs, clamped);\n\t\trgb[idx * C + 0] = result.x;\n\t\trgb[idx * C + 1] = result.y;\n\t\trgb[idx * C + 2] = result.z;\n\t}\n\n\t// if (opacities[idx] > 0.9 && point_image.x > 0 && point_image.x < 1264 && point_image.y > 0 && point_image.y < 832) {\n\t// \tglm::vec4 q = rotations[idx];\n\t// \tglm::vec3 cp = *cam_pos;\n\t// \tprintf(\"q(wxyz) %lf %lf %lf %lf, scale %lf %lf %lf, mean3d %lf %lf %lf, c %lf %lf %lf\\n viewmatrix %lf %lf %lf %lf, %lf %lf %lf %lf, %lf %lf %lf %lf, %lf %lf %lf %lf\\n\",\n\t// \t\tq.x, q.y, q.z, q.w, scales[idx].x, scales[idx].y, scales[idx].z,\n\t// \t\tp_orig.x, p_orig.y, p_orig.z, cp.x, cp.y, cp.z,\n\t// \t\tviewmatrix[0],viewmatrix[4],viewmatrix[8],viewmatrix[12],\n\t// \t\tviewmatrix[1],viewmatrix[5],viewmatrix[9],viewmatrix[13],\n\t// \t\tviewmatrix[2],viewmatrix[6],viewmatrix[10],viewmatrix[14],\n\t// \t\tviewmatrix[3],viewmatrix[7],viewmatrix[11],viewmatrix[15]);\n\t// }\n\n\t// Store some useful helper data for the next steps.\n\tdepths[idx] = p_view.z;\n\tradii[idx] = my_radius;\n\tpoints_xy_image[idx] = point_image;\n\t// Inverse 2D covariance and opacity neatly pack into one float4\n\tconic_opacity[idx] = {conic.x, conic.y, conic.z, opacities[idx]};\n\ttiles_touched[idx] = (rect_max.y - rect_min.y) * (rect_max.x - rect_min.x);\n}\n\n// Main rasterization method. Collaboratively works on one tile per\n// block, each thread treats one pixel. Alternates between fetching\n// and rasterizing data.\ntemplate <uint32_t CHANNELS, uint32_t CHANNELS_language_feature, uint32_t CHANNELS_instance_feature, uint32_t ALL_MAP>\n__global__ void __launch_bounds__(BLOCK_X *BLOCK_Y)\n\trenderCUDA(\n\t\tconst uint2 *__restrict__ ranges,\n\t\tconst uint32_t *__restrict__ point_list,\n\t\tint W, int H,\n\t\tconst float focal_x, const float focal_y,\n\t\tconst float cx, const float cy,\n\t\tconst float *__restrict__ viewmatrix,\n\t\tconst float *__restrict__ cam_pos,\n\t\tconst float2 *__restrict__ points_xy_image,\n\t\tconst float *__restrict__ features,\n\t\tconst float *__restrict__ language_feature,\n\t\tconst float *__restrict__ language_feature_instance,\n\t\tconst float *__restrict__ all_map,\n\t\tconst float4 *__restrict__ conic_opacity,\n\t\tfloat *__restrict__ final_T,\n\t\tuint32_t *__restrict__ n_contrib,\n\t\tconst float *__restrict__ bg_color,\n\t\tfloat *__restrict__ out_color,\n\t\tfloat *__restrict__ out_language_feature,\n\t\tfloat *__restrict__ out_language_feature_instance,\n\t\tint *__restrict__ out_observe,\n\t\tfloat *__restrict__ out_all_map,\n\t\tfloat *__restrict__ out_plane_depth,\n\t\tconst bool render_geo,\n\t\tbool include_feature)\n{\n\t// Identify current tile and associated min/max pixel range.\n\tauto block = cg::this_thread_block();\n\tconst uint32_t horizontal_blocks = (W + BLOCK_X - 1) / BLOCK_X;\n\tconst uint2 pix_min = {block.group_index().x * BLOCK_X, block.group_index().y * BLOCK_Y};\n\tconst uint2 pix_max = {min(pix_min.x + BLOCK_X, W), min(pix_min.y + BLOCK_Y, H)};\n\tconst uint2 pix = {pix_min.x + block.thread_index().x, pix_min.y + block.thread_index().y};\n\tconst uint32_t pix_id = W * pix.y + pix.x;\n\tconst float2 pixf = {(float)pix.x, (float)pix.y};\n\tconst float2 ray = {(pixf.x - cx) / focal_x, (pixf.y - cy) / focal_y};\n\t// Check if this thread is associated with a valid pixel or outside.\n\tbool inside = pix.x < W && pix.y < H;\n\t// Done threads can help with fetching, but don't rasterize\n\tbool done = !inside;\n\n\t// Load start/end range of IDs to process in bit sorted list.\n\tuint2 range = ranges[block.group_index().y * horizontal_blocks + block.group_index().x];\n\tconst int rounds = ((range.y - range.x + BLOCK_SIZE - 1) / BLOCK_SIZE);\n\tint toDo = range.y - range.x;\n\n\t// Allocate storage for batches of collectively fetched data.\n\t__shared__ int collected_id[BLOCK_SIZE];\n\t__shared__ float2 collected_xy[BLOCK_SIZE];\n\t__shared__ float4 collected_conic_opacity[BLOCK_SIZE];\n\n\t// Initialize helper variables\n\tfloat T = 1.0f;\n\tuint32_t contributor = 0;\n\tuint32_t last_contributor = 0;\n\tfloat C[CHANNELS] = {0};\n\tfloat F[CHANNELS_language_feature] = {0};\n\tfloat F_ins[CHANNELS_instance_feature] = {0};\n\tfloat All_map[ALL_MAP] = {0};\n\n\t// Iterate over batches until all done or range is complete\n\tfor (int i = 0; i < rounds; i++, toDo -= BLOCK_SIZE)\n\t{\n\t\t// End if entire block votes that it is done rasterizing\n\t\tint num_done = __syncthreads_count(done);\n\t\tif (num_done == BLOCK_SIZE)\n\t\t\tbreak;\n\n\t\t// Collectively fetch per-Gaussian data from global to shared\n\t\tint progress = i * BLOCK_SIZE + block.thread_rank();\n\t\tif (range.x + progress < range.y)\n\t\t{\n\t\t\tint coll_id = point_list[range.x + progress];\n\t\t\tcollected_id[block.thread_rank()] = coll_id;\n\t\t\tcollected_xy[block.thread_rank()] = points_xy_image[coll_id];\n\t\t\tcollected_conic_opacity[block.thread_rank()] = conic_opacity[coll_id];\n\t\t}\n\t\tblock.sync();\n\n\t\t// Iterate over current batch\n\t\tfor (int j = 0; !done && j < min(BLOCK_SIZE, toDo); j++)\n\t\t{\n\t\t\t// Keep track of current position in range\n\t\t\tcontributor++;\n\t\t\t// Resample using conic matrix (cf. \"Surface\n\t\t\t// Splatting\" by Zwicker et al., 2001)\n\t\t\tfloat2 xy = collected_xy[j];\n\t\t\tfloat2 d = {xy.x - pixf.x, xy.y - pixf.y};\n\t\t\tfloat4 con_o = collected_conic_opacity[j];\n\t\t\tfloat power = -0.5f * (con_o.x * d.x * d.x + con_o.z * d.y * d.y) - con_o.y * d.x * d.y;\n\t\t\tif (power > 0.0f)\n\t\t\t\tcontinue;\n\n\t\t\t// Eq. (2) from 3D Gaussian splatting paper.\n\t\t\t// Obtain alpha by multiplying with Gaussian opacity\n\t\t\t// and its exponential falloff from mean.\n\t\t\t// Avoid numerical instabilities (see paper appendix).\n\t\t\tfloat alpha = min(0.99f, con_o.w * exp(power));\n\t\t\tif (alpha < 1.0f / 255.0f)\n\t\t\t\tcontinue;\n\t\t\tfloat test_T = T * (1 - alpha);\n\t\t\tif (test_T < 0.0001f)\n\t\t\t{\n\t\t\t\tdone = true;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Eq. (3) from 3D Gaussian splatting paper.\n\t\t\tfor (int ch = 0; ch < CHANNELS; ch++)\n\t\t\t\tC[ch] += features[collected_id[j] * CHANNELS + ch] * alpha * T;\n\t\t\tif (include_feature)\n\t\t\t{\n\t\t\t\tfor (int ch = 0; ch < CHANNELS_language_feature; ch++)\n\t\t\t\t\tF[ch] += language_feature[collected_id[j] * CHANNELS_language_feature + ch] * alpha * T;\n\t\t\t\tfor (int ch = 0; ch < CHANNELS_instance_feature; ch++)\n\t\t\t\t\tF_ins[ch] += language_feature_instance[collected_id[j] * CHANNELS_instance_feature + ch] * alpha * T;\n\t\t\t}\n\t\t\tif (render_geo)\n\t\t\t{\n\t\t\t\tfor (int ch = 0; ch < ALL_MAP; ch++)\n\t\t\t\t\tAll_map[ch] += all_map[collected_id[j] * ALL_MAP + ch] * alpha * T;\n\t\t\t}\n\n\t\t\tif (T > 0.5)\n\t\t\t{\n\t\t\t\tatomicAdd(&(out_observe[collected_id[j]]), 1);\n\t\t\t}\n\t\t\tT = test_T;\n\n\t\t\t// Keep track of last range entry to update this\n\t\t\t// pixel.\n\t\t\tlast_contributor = contributor;\n\t\t}\n\t}\n\n\t// All threads that treat valid pixel write out their final\n\t// rendering data to the frame and auxiliary buffers.\n\tif (inside)\n\t{\n\t\tfinal_T[pix_id] = T;\n\t\tn_contrib[pix_id] = last_contributor;\n\t\tfor (int ch = 0; ch < CHANNELS; ch++)\n\t\t\tout_color[ch * H * W + pix_id] = C[ch] + T * bg_color[ch];\n\t\tif (include_feature)\n\t\t{\n\t\t\tfor (int ch = 0; ch < CHANNELS_language_feature; ch++)\n\t\t\t\tout_language_feature[ch * H * W + pix_id] = F[ch]; // bg_color ???\n\t\t\tfor (int ch = 0; ch < CHANNELS_instance_feature; ch++)\n\t\t\t\tout_language_feature_instance[ch * H * W + pix_id] = F_ins[ch];\n\t\t}\n\t\tif (render_geo)\n\t\t{\n\t\t\tfor (int ch = 0; ch < ALL_MAP; ch++)\n\t\t\t\tout_all_map[ch * H * W + pix_id] = All_map[ch];\n\t\t\tout_plane_depth[pix_id] = All_map[4] / -(All_map[0] * ray.x + All_map[1] * ray.y + All_map[2] + 1.0e-8);\n\t\t}\n\t}\n}\n\nvoid FORWARD::render(\n\tconst dim3 grid, dim3 block,\n\tconst uint2 *ranges,\n\tconst uint32_t *point_list,\n\tint W, int H,\n\tconst float focal_x, const float focal_y,\n\tconst float cx, const float cy,\n\tconst float *viewmatrix,\n\tconst float *cam_pos,\n\tconst float2 *means2D,\n\tconst float *colors,\n\tconst float *language_feature,\n\tconst float *language_feature_instance,\n\tconst float *all_map,\n\tconst float4 *conic_opacity,\n\tfloat *final_T,\n\tuint32_t *n_contrib,\n\tconst float *bg_color,\n\tfloat *out_color,\n\tfloat *out_language_feature,\n\tfloat *out_language_feature_instance,\n\tint *out_observe,\n\tfloat *out_all_map,\n\tfloat *out_plane_depth,\n\tconst bool render_geo,\n\tbool include_feature)\n{\n\trenderCUDA<NUM_CHANNELS, NUM_CHANNELS_language_feature, NUM_CHANNELS_instance_feature, NUM_ALL_MAP><<<grid, block>>>(\n\t\tranges,\n\t\tpoint_list,\n\t\tW, H,\n\t\tfocal_x, focal_y,\n\t\tcx, cy,\n\t\tviewmatrix,\n\t\tcam_pos,\n\t\tmeans2D,\n\t\tcolors,\n\t\tlanguage_feature,\n\t\tlanguage_feature_instance,\n\t\tall_map,\n\t\tconic_opacity,\n\t\tfinal_T,\n\t\tn_contrib,\n\t\tbg_color,\n\t\tout_color,\n\t\tout_language_feature,\n\t\tout_language_feature_instance,\n\t\tout_observe,\n\t\tout_all_map,\n\t\tout_plane_depth,\n\t\trender_geo,\n\t\tinclude_feature);\n}\n\nvoid FORWARD::preprocess(int P, int D, int M,\n\t\t\t\t\t\t const float *means3D,\n\t\t\t\t\t\t const glm::vec3 *scales,\n\t\t\t\t\t\t const float scale_modifier,\n\t\t\t\t\t\t const glm::vec4 *rotations,\n\t\t\t\t\t\t const float *opacities,\n\t\t\t\t\t\t const float *shs,\n\t\t\t\t\t\t bool *clamped,\n\t\t\t\t\t\t const float *cov3D_precomp,\n\t\t\t\t\t\t const float *colors_precomp,\n\t\t\t\t\t\t const float *viewmatrix,\n\t\t\t\t\t\t const float *projmatrix,\n\t\t\t\t\t\t const glm::vec3 *cam_pos,\n\t\t\t\t\t\t const int W, int H,\n\t\t\t\t\t\t const float focal_x, float focal_y,\n\t\t\t\t\t\t const float tan_fovx, float tan_fovy,\n\t\t\t\t\t\t int *radii,\n\t\t\t\t\t\t float2 *means2D,\n\t\t\t\t\t\t float *depths,\n\t\t\t\t\t\t float *cov3Ds,\n\t\t\t\t\t\t float *rgb,\n\t\t\t\t\t\t float4 *conic_opacity,\n\t\t\t\t\t\t const dim3 grid,\n\t\t\t\t\t\t uint32_t *tiles_touched,\n\t\t\t\t\t\t bool prefiltered)\n{\n\tpreprocessCUDA<NUM_CHANNELS><<<(P + 255) / 256, 256>>>(\n\t\tP, D, M,\n\t\tmeans3D,\n\t\tscales,\n\t\tscale_modifier,\n\t\trotations,\n\t\topacities,\n\t\tshs,\n\t\tclamped,\n\t\tcov3D_precomp,\n\t\tcolors_precomp,\n\t\tviewmatrix,\n\t\tprojmatrix,\n\t\tcam_pos,\n\t\tW, H,\n\t\ttan_fovx, tan_fovy,\n\t\tfocal_x, focal_y,\n\t\tradii,\n\t\tmeans2D,\n\t\tdepths,\n\t\tcov3Ds,\n\t\trgb,\n\t\tconic_opacity,\n\t\tgrid,\n\t\ttiles_touched,\n\t\tprefiltered);\n}"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/cuda_rasterizer/forward.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#ifndef CUDA_RASTERIZER_FORWARD_H_INCLUDED\n#define CUDA_RASTERIZER_FORWARD_H_INCLUDED\n\n#include <cuda.h>\n#include \"cuda_runtime.h\"\n#include \"device_launch_parameters.h\"\n#define GLM_FORCE_CUDA\n#include <glm/glm.hpp>\n\nnamespace FORWARD\n{\n\t// Perform initial steps for each Gaussian prior to rasterization.\n\tvoid preprocess(int P, int D, int M,\n\t\tconst float* orig_points,\n\t\tconst glm::vec3* scales,\n\t\tconst float scale_modifier,\n\t\tconst glm::vec4* rotations,\n\t\tconst float* opacities,\n\t\tconst float* shs,\n\t\tbool* clamped,\n\t\tconst float* cov3D_precomp,\n\t\tconst float* colors_precomp,\n\t\tconst float* viewmatrix,\n\t\tconst float* projmatrix,\n\t\tconst glm::vec3* cam_pos,\n\t\tconst int W, int H,\n\t\tconst float focal_x, float focal_y,\n\t\tconst float tan_fovx, float tan_fovy,\n\t\tint* radii,\n\t\tfloat2* points_xy_image,\n\t\tfloat* depths,\n\t\tfloat* cov3Ds,\n\t\tfloat* colors,\n\t\tfloat4* conic_opacity,\n\t\tconst dim3 grid,\n\t\tuint32_t* tiles_touched,\n\t\tbool prefiltered);\n\n\t// Main rasterization method.\n\tvoid render(\n\t\tconst dim3 grid, dim3 block,\n\t\tconst uint2* ranges,\n\t\tconst uint32_t* point_list,\n\t\tint W, int H,\n\t\tconst float focal_x, const float focal_y,\n\t\tconst float cx, const float cy,\n\t\tconst float* viewmatrix,\n\t\tconst float* cam_pos,\n\t\tconst float2* points_xy_image,\n\t\tconst float* features,\n\t\tconst float* language_feature,\n\t\tconst float* language_feature_instance,\n\t\tconst float* all_map,\n\t\tconst float4* conic_opacity,\n\t\tfloat* final_T,\n\t\tuint32_t* n_contrib,\n\t\tconst float* bg_color,\n\t\tfloat* out_color,\n\t\tfloat* out_language_feature,\n\t\tfloat* out_language_feature_instance,\n\t\tint* out_observe,\n\t\tfloat* out_all_map,\n\t\tfloat* out_plane_depth,\n\t\tconst bool render_geo,\n\t\tbool include_feature);\n}\n\n\n#endif"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/cuda_rasterizer/rasterizer.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#ifndef CUDA_RASTERIZER_H_INCLUDED\n#define CUDA_RASTERIZER_H_INCLUDED\n\n#include <vector>\n#include <functional>\n\nnamespace CudaRasterizer\n{\n\tclass Rasterizer\n\t{\n\tpublic:\n\n\t\tstatic void markVisible(\n\t\t\tint P,\n\t\t\tfloat* means3D,\n\t\t\tfloat* viewmatrix,\n\t\t\tfloat* projmatrix,\n\t\t\tbool* present);\n\n\t\tstatic int forward(\n\t\t\tstd::function<char* (size_t)> geometryBuffer,\n\t\t\tstd::function<char* (size_t)> binningBuffer,\n\t\t\tstd::function<char* (size_t)> imageBuffer,\n\t\t\tconst int P, int D, int M,\n\t\t\tconst float* background,\n\t\t\tconst int width, int height,\n\t\t\tconst float* means3D,\n\t\t\tconst float* shs,\n\t\t\tconst float* colors_precomp,\n\t\t\tconst float* language_feature_precomp,\n\t\t\tconst float* language_feature_instance_precomp,\n\t\t\tconst float* opacities,\n\t\t\tconst float* scales,\n\t\t\tconst float scale_modifier,\n\t\t\tconst float* rotations,\n\t\t\tconst float* cov3D_precomp,\n\t\t\tconst float* all_map,\n\t\t\tconst float* viewmatrix,\n\t\t\tconst float* projmatrix,\n\t\t\tconst float* cam_pos,\n\t\t\tconst float tan_fovx, float tan_fovy,\n\t\t\tconst bool prefiltered,\n\t\t\tfloat* out_color,\n\t\t\tfloat* out_language_feature,\n\t\t\tfloat* out_language_feature_instance,\n\t\t\tint* radii,\n\t\t\tint* out_observe,\n\t\t\tfloat* out_all_map,\n\t\t\tfloat* out_plane_depth,\n\t\t\tconst bool render_geo,\n\t\t\tbool debug = false,\n\t\t\tbool include_feature = false);\n\n\t\tstatic void backward(\n\t\t\tconst int P, int D, int M, int R,\n\t\t\tconst float* background,\n\t\t\tconst float* all_map_pixels,\n\t\t\tconst int width, int height,\n\t\t\tconst float* means3D,\n\t\t\tconst float* shs,\n\t\t\tconst float* colors_precomp,\n\t\t\tconst float* language_feature_precomp,\n\t\t\tconst float* language_feature_instance_precomp,\n\t\t\tconst float* all_maps,\n\t\t\tconst float* scales,\n\t\t\tconst float scale_modifier,\n\t\t\tconst float* rotations,\n\t\t\tconst float* cov3D_precomp,\n\t\t\tconst float* viewmatrix,\n\t\t\tconst float* projmatrix,\n\t\t\tconst float* campos,\n\t\t\tconst float tan_fovx, float tan_fovy,\n\t\t\tconst int* radii,\n\t\t\tchar* geom_buffer,\n\t\t\tchar* binning_buffer,\n\t\t\tchar* image_buffer,\n\t\t\tconst float* dL_dpix,\n\t\t\tconst float* dL_dpix_F,\n\t\t\tconst float* dL_dpix_F_instance,\n\t\t\tconst float* dL_dout_all_map,\n\t\t\tconst float* dL_dout_plane_depth,\n\t\t\tfloat* dL_dmean2D,\n\t\t\tfloat* dL_dmean2D_abs,\n\t\t\tfloat* dL_dconic,\n\t\t\tfloat* dL_dopacity,\n\t\t\tfloat* dL_dcolor,\n\t\t\tfloat* dL_dlanguage_feature,\n\t\t\tfloat* dL_dlanguage_feature_instance,\n\t\t\tfloat* dL_dmean3D,\n\t\t\tfloat* dL_dcov3D,\n\t\t\tfloat* dL_dsh,\n\t\t\tfloat* dL_dscale,\n\t\t\tfloat* dL_drot,\n\t\t\tfloat* dL_dall_map,\n\t\t\tconst bool render_geo,\n\t\t\tbool debug,\n\t\t\tbool include_feature);\n\t};\n};\n\n#endif"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/cuda_rasterizer/rasterizer_impl.cu",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#include \"rasterizer_impl.h\"\n#include <iostream>\n#include <fstream>\n#include <algorithm>\n#include <numeric>\n#include <cuda.h>\n#include \"cuda_runtime.h\"\n#include \"device_launch_parameters.h\"\n#include <cub/cub.cuh>\n#include <cub/device/device_radix_sort.cuh>\n#define GLM_FORCE_CUDA\n#include <glm/glm.hpp>\n\n#include <cooperative_groups.h>\n#include <cooperative_groups/reduce.h>\nnamespace cg = cooperative_groups;\n\n#include \"auxiliary.h\"\n#include \"forward.h\"\n#include \"backward.h\"\n\n// Helper function to find the next-highest bit of the MSB\n// on the CPU.\nuint32_t getHigherMsb(uint32_t n)\n{\n\tuint32_t msb = sizeof(n) * 4;\n\tuint32_t step = msb;\n\twhile (step > 1)\n\t{\n\t\tstep /= 2;\n\t\tif (n >> msb)\n\t\t\tmsb += step;\n\t\telse\n\t\t\tmsb -= step;\n\t}\n\tif (n >> msb)\n\t\tmsb++;\n\treturn msb;\n}\n\n// Wrapper method to call auxiliary coarse frustum containment test.\n// Mark all Gaussians that pass it.\n__global__ void checkFrustum(int P,\n\tconst float* orig_points,\n\tconst float* viewmatrix,\n\tconst float* projmatrix,\n\tbool* present)\n{\n\tauto idx = cg::this_grid().thread_rank();\n\tif (idx >= P)\n\t\treturn;\n\n\tfloat3 p_view;\n\tpresent[idx] = in_frustum(idx, orig_points, viewmatrix, projmatrix, false, p_view);\n}\n\n// Generates one key/value pair for all Gaussian / tile overlaps. \n// Run once per Gaussian (1:N mapping).\n__global__ void duplicateWithKeys(\n\tint P,\n\tconst float2* points_xy,\n\tconst float* depths,\n\tconst uint32_t* offsets,\n\tuint64_t* gaussian_keys_unsorted,\n\tuint32_t* gaussian_values_unsorted,\n\tint* radii,\n\tdim3 grid)\n{\n\tauto idx = cg::this_grid().thread_rank();\n\tif (idx >= P)\n\t\treturn;\n\n\t// Generate no key/value pair for invisible Gaussians\n\tif (radii[idx] > 0)\n\t{\n\t\t// Find this Gaussian's offset in buffer for writing keys/values.\n\t\tuint32_t off = (idx == 0) ? 0 : offsets[idx - 1];\n\t\tuint2 rect_min, rect_max;\n\n\t\tgetRect(points_xy[idx], radii[idx], rect_min, rect_max, grid);\n\n\t\t// For each tile that the bounding rect overlaps, emit a \n\t\t// key/value pair. The key is |  tile ID  |      depth      |,\n\t\t// and the value is the ID of the Gaussian. Sorting the values \n\t\t// with this key yields Gaussian IDs in a list, such that they\n\t\t// are first sorted by tile and then by depth. \n\t\tfor (int y = rect_min.y; y < rect_max.y; y++)\n\t\t{\n\t\t\tfor (int x = rect_min.x; x < rect_max.x; x++)\n\t\t\t{\n\t\t\t\tuint64_t key = y * grid.x + x;\n\t\t\t\tkey <<= 32;\n\t\t\t\tkey |= *((uint32_t*)&depths[idx]);\n\t\t\t\tgaussian_keys_unsorted[off] = key;\n\t\t\t\tgaussian_values_unsorted[off] = idx;\n\t\t\t\toff++;\n\t\t\t}\n\t\t}\n\t}\n}\n\n// Check keys to see if it is at the start/end of one tile's range in \n// the full sorted list. If yes, write start/end of this tile. \n// Run once per instanced (duplicated) Gaussian ID.\n__global__ void identifyTileRanges(int L, uint64_t* point_list_keys, uint2* ranges)\n{\n\tauto idx = cg::this_grid().thread_rank();\n\tif (idx >= L)\n\t\treturn;\n\n\t// Read tile ID from key. Update start/end of tile range if at limit.\n\tuint64_t key = point_list_keys[idx];\n\tuint32_t currtile = key >> 32;\n\tif (idx == 0)\n\t\tranges[currtile].x = 0;\n\telse\n\t{\n\t\tuint32_t prevtile = point_list_keys[idx - 1] >> 32;\n\t\tif (currtile != prevtile)\n\t\t{\n\t\t\tranges[prevtile].y = idx;\n\t\t\tranges[currtile].x = idx;\n\t\t}\n\t}\n\tif (idx == L - 1)\n\t\tranges[currtile].y = L;\n}\n\n// Mark Gaussians as visible/invisible, based on view frustum testing\nvoid CudaRasterizer::Rasterizer::markVisible(\n\tint P,\n\tfloat* means3D,\n\tfloat* viewmatrix,\n\tfloat* projmatrix,\n\tbool* present)\n{\n\tcheckFrustum << <(P + 255) / 256, 256 >> > (\n\t\tP,\n\t\tmeans3D,\n\t\tviewmatrix, projmatrix,\n\t\tpresent);\n}\n\nCudaRasterizer::GeometryState CudaRasterizer::GeometryState::fromChunk(char*& chunk, size_t P)\n{\n\tGeometryState geom;\n\tobtain(chunk, geom.depths, P, 128);\n\tobtain(chunk, geom.clamped, P * 3, 128);\n\tobtain(chunk, geom.internal_radii, P, 128);\n\tobtain(chunk, geom.means2D, P, 128);\n\tobtain(chunk, geom.cov3D, P * 6, 128);\n\tobtain(chunk, geom.conic_opacity, P, 128);\n\tobtain(chunk, geom.rgb, P * 3, 128);\n\tobtain(chunk, geom.tiles_touched, P, 128);\n\tcub::DeviceScan::InclusiveSum(nullptr, geom.scan_size, geom.tiles_touched, geom.tiles_touched, P);\n\tobtain(chunk, geom.scanning_space, geom.scan_size, 128);\n\tobtain(chunk, geom.point_offsets, P, 128);\n\treturn geom;\n}\n\nCudaRasterizer::ImageState CudaRasterizer::ImageState::fromChunk(char*& chunk, size_t N)\n{\n\tImageState img;\n\tobtain(chunk, img.accum_alpha, N, 128);\n\tobtain(chunk, img.n_contrib, N, 128);\n\tobtain(chunk, img.ranges, N, 128);\n\treturn img;\n}\n\nCudaRasterizer::BinningState CudaRasterizer::BinningState::fromChunk(char*& chunk, size_t P)\n{\n\tBinningState binning;\n\tobtain(chunk, binning.point_list, P, 128);\n\tobtain(chunk, binning.point_list_unsorted, P, 128);\n\tobtain(chunk, binning.point_list_keys, P, 128);\n\tobtain(chunk, binning.point_list_keys_unsorted, P, 128);\n\tcub::DeviceRadixSort::SortPairs(\n\t\tnullptr, binning.sorting_size,\n\t\tbinning.point_list_keys_unsorted, binning.point_list_keys,\n\t\tbinning.point_list_unsorted, binning.point_list, P);\n\tobtain(chunk, binning.list_sorting_space, binning.sorting_size, 128);\n\treturn binning;\n}\n\n// Forward rendering procedure for differentiable rasterization\n// of Gaussians.\nint CudaRasterizer::Rasterizer::forward(\n\tstd::function<char* (size_t)> geometryBuffer,\n\tstd::function<char* (size_t)> binningBuffer,\n\tstd::function<char* (size_t)> imageBuffer,\n\tconst int P, int D, int M,\n\tconst float* background,\n\tconst int width, int height,\n\tconst float* means3D,\n\tconst float* shs,\n\tconst float* colors_precomp,\n\tconst float* language_feature_precomp,\n\tconst float* language_feature_instance_precomp,\n\tconst float* opacities,\n\tconst float* scales,\n\tconst float scale_modifier,\n\tconst float* rotations,\n\tconst float* cov3D_precomp,\n\tconst float* all_map,\n\tconst float* viewmatrix,\n\tconst float* projmatrix,\n\tconst float* cam_pos,\n\tconst float tan_fovx, float tan_fovy,\n\tconst bool prefiltered,\n\tfloat* out_color,\n\tfloat* out_language_feature,\n\tfloat* out_language_feature_instance,\n\tint* radii,\n\tint* out_observe,\n\tfloat* out_all_map,\n\tfloat* out_plane_depth,\n\tconst bool render_geo,\n\tbool debug,\n\tbool include_feature)\n{\n\tconst float focal_y = height / (2.0f * tan_fovy);\n\tconst float focal_x = width / (2.0f * tan_fovx);\n\n\tsize_t chunk_size = required<GeometryState>(P);\n\tchar* chunkptr = geometryBuffer(chunk_size);\n\tGeometryState geomState = GeometryState::fromChunk(chunkptr, P);\n\n\tif (radii == nullptr)\n\t{\n\t\tradii = geomState.internal_radii;\n\t}\n\n\tdim3 tile_grid((width + BLOCK_X - 1) / BLOCK_X, (height + BLOCK_Y - 1) / BLOCK_Y, 1);\n\tdim3 block(BLOCK_X, BLOCK_Y, 1);\n\n\t// Dynamically resize image-based auxiliary buffers during training\n\tsize_t img_chunk_size = required<ImageState>(width * height);\n\tchar* img_chunkptr = imageBuffer(img_chunk_size);\n\tImageState imgState = ImageState::fromChunk(img_chunkptr, width * height);\n\n\tif (NUM_CHANNELS != 3 && colors_precomp == nullptr)\n\t{\n\t\tthrow std::runtime_error(\"For non-RGB, provide precomputed Gaussian colors!\");\n\t}\n\n\t// Run preprocessing per-Gaussian (transformation, bounding, conversion of SHs to RGB)\n\tCHECK_CUDA(FORWARD::preprocess(\n\t\tP, D, M,\n\t\tmeans3D,\n\t\t(glm::vec3*)scales,\n\t\tscale_modifier,\n\t\t(glm::vec4*)rotations,\n\t\topacities,\n\t\tshs,\n\t\tgeomState.clamped,\n\t\tcov3D_precomp,\n\t\tcolors_precomp,\n\t\tviewmatrix, projmatrix,\n\t\t(glm::vec3*)cam_pos,\n\t\twidth, height,\n\t\tfocal_x, focal_y,\n\t\ttan_fovx, tan_fovy,\n\t\tradii,\n\t\tgeomState.means2D,\n\t\tgeomState.depths,\n\t\tgeomState.cov3D,\n\t\tgeomState.rgb,\n\t\tgeomState.conic_opacity,\n\t\ttile_grid,\n\t\tgeomState.tiles_touched,\n\t\tprefiltered\n\t), debug)\n\n\t// Compute prefix sum over full list of touched tile counts by Gaussians\n\t// E.g., [2, 3, 0, 2, 1] -> [2, 5, 5, 7, 8]\n\tCHECK_CUDA(cub::DeviceScan::InclusiveSum(geomState.scanning_space, geomState.scan_size, geomState.tiles_touched, geomState.point_offsets, P), debug)\n\n\t// Retrieve total number of Gaussian instances to launch and resize aux buffers\n\tint num_rendered;\n\tCHECK_CUDA(cudaMemcpy(&num_rendered, geomState.point_offsets + P - 1, sizeof(int), cudaMemcpyDeviceToHost), debug);\n\n\tsize_t binning_chunk_size = required<BinningState>(num_rendered);\n\tchar* binning_chunkptr = binningBuffer(binning_chunk_size);\n\tBinningState binningState = BinningState::fromChunk(binning_chunkptr, num_rendered);\n\n\t// For each instance to be rendered, produce adequate [ tile | depth ] key \n\t// and corresponding dublicated Gaussian indices to be sorted\n\tduplicateWithKeys << <(P + 255) / 256, 256 >> > (\n\t\tP,\n\t\tgeomState.means2D,\n\t\tgeomState.depths,\n\t\tgeomState.point_offsets,\n\t\tbinningState.point_list_keys_unsorted,\n\t\tbinningState.point_list_unsorted,\n\t\tradii,\n\t\ttile_grid)\n\tCHECK_CUDA(, debug)\n\n\tint bit = getHigherMsb(tile_grid.x * tile_grid.y);\n\n\t// Sort complete list of (duplicated) Gaussian indices by keys\n\tCHECK_CUDA(cub::DeviceRadixSort::SortPairs(\n\t\tbinningState.list_sorting_space,\n\t\tbinningState.sorting_size,\n\t\tbinningState.point_list_keys_unsorted, binningState.point_list_keys,\n\t\tbinningState.point_list_unsorted, binningState.point_list,\n\t\tnum_rendered, 0, 32 + bit), debug)\n\n\tCHECK_CUDA(cudaMemset(imgState.ranges, 0, tile_grid.x * tile_grid.y * sizeof(uint2)), debug);\n\n\t// Identify start and end of per-tile workloads in sorted list\n\tif (num_rendered > 0)\n\t\tidentifyTileRanges << <(num_rendered + 255) / 256, 256 >> > (\n\t\t\tnum_rendered,\n\t\t\tbinningState.point_list_keys,\n\t\t\timgState.ranges);\n\tCHECK_CUDA(, debug)\n\n\t// Let each tile blend its range of Gaussians independently in parallel\n\tconst float* feature_ptr = colors_precomp != nullptr ? colors_precomp : geomState.rgb;\n\tconst float* language_feature_ptr = language_feature_precomp;\n\tconst float* language_feature_instance_ptr = language_feature_instance_precomp;\n\tCHECK_CUDA(FORWARD::render(\n\t\ttile_grid, block,\n\t\timgState.ranges,\n\t\tbinningState.point_list,\n\t\twidth, height,\n\t\tfocal_x, focal_y,\n\t\tfloat(width*0.5f), float(height*0.5f),\n\t\tviewmatrix,\n\t\tcam_pos,\n\t\tgeomState.means2D,\n\t\tfeature_ptr,\n\t\tlanguage_feature_ptr,\n\t\tlanguage_feature_instance_ptr,\n\t\tall_map,\n\t\tgeomState.conic_opacity,\n\t\timgState.accum_alpha,\n\t\timgState.n_contrib,\n\t\tbackground,\n\t\tout_color,\n\t\tout_language_feature,\n\t\tout_language_feature_instance,\n\t\tout_observe,\n\t\tout_all_map,\n\t\tout_plane_depth,\n\t\trender_geo,\n\t\tinclude_feature), debug)\n\n\treturn num_rendered;\n}\n\n// Produce necessary gradients for optimization, corresponding\n// to forward render pass\nvoid CudaRasterizer::Rasterizer::backward(\n\tconst int P, int D, int M, int R,\n\tconst float* background,\n\tconst float* all_map_pixels,\n\tconst int width, int height,\n\tconst float* means3D,\n\tconst float* shs,\n\tconst float* colors_precomp,\n\tconst float* language_feature_precomp,\n\tconst float* language_feature_instance_precomp,\n\tconst float* all_maps,\n\tconst float* scales,\n\tconst float scale_modifier,\n\tconst float* rotations,\n\tconst float* cov3D_precomp,\n\tconst float* viewmatrix,\n\tconst float* projmatrix,\n\tconst float* campos,\n\tconst float tan_fovx, float tan_fovy,\n\tconst int* radii,\n\tchar* geom_buffer,\n\tchar* binning_buffer,\n\tchar* img_buffer,\n\tconst float* dL_dpix,\n\tconst float* dL_dpix_F,\n\tconst float* dL_dpix_F_instance,\n\tconst float* dL_dout_all_map,\n\tconst float* dL_dout_plane_depth,\n\tfloat* dL_dmean2D,\n\tfloat* dL_dmean2D_abs,\n\tfloat* dL_dconic,\n\tfloat* dL_dopacity,\n\tfloat* dL_dcolor,\n\tfloat* dL_dlanguage_feature,\n\tfloat* dL_dlanguage_feature_instance,\n\tfloat* dL_dmean3D,\n\tfloat* dL_dcov3D,\n\tfloat* dL_dsh,\n\tfloat* dL_dscale,\n\tfloat* dL_drot,\n\tfloat* dL_dall_map,\n\tconst bool render_geo,\n\tbool debug,\n\tbool include_feature)\n{\n\tGeometryState geomState = GeometryState::fromChunk(geom_buffer, P);\n\tBinningState binningState = BinningState::fromChunk(binning_buffer, R);\n\tImageState imgState = ImageState::fromChunk(img_buffer, width * height);\n\n\tif (radii == nullptr)\n\t{\n\t\tradii = geomState.internal_radii;\n\t}\n\n\tconst float focal_y = height / (2.0f * tan_fovy);\n\tconst float focal_x = width / (2.0f * tan_fovx);\n\n\tconst dim3 tile_grid((width + BLOCK_X - 1) / BLOCK_X, (height + BLOCK_Y - 1) / BLOCK_Y, 1);\n\tconst dim3 block(BLOCK_X, BLOCK_Y, 1);\n\n\t// Compute loss gradients w.r.t. 2D mean position, conic matrix,\n\t// opacity and RGB of Gaussians from per-pixel loss gradients.\n\t// If we were given precomputed colors and not SHs, use them.\n\tconst float* color_ptr = (colors_precomp != nullptr) ? colors_precomp : geomState.rgb;\n\tconst float* language_feature_ptr = language_feature_precomp;\n\tconst float* language_feature_instance_ptr = language_feature_instance_precomp;\n\tCHECK_CUDA(BACKWARD::render(\n\t\ttile_grid,\n\t\tblock,\n\t\timgState.ranges,\n\t\tbinningState.point_list,\n\t\twidth, height,\n\t\tfocal_x, focal_y,\n\t\tbackground,\n\t\tgeomState.means2D,\n\t\tgeomState.conic_opacity,\n\t\tcolor_ptr,\n\t\tlanguage_feature_ptr,\n\t\tlanguage_feature_instance_ptr,\n\t\tall_maps,\n\t\tall_map_pixels,\n\t\timgState.accum_alpha,\n\t\timgState.n_contrib,\n\t\tdL_dpix,\n\t\tdL_dpix_F,\n\t\tdL_dpix_F_instance,\n\t\tdL_dout_all_map,\n\t\tdL_dout_plane_depth,\n\t\t(float3*)dL_dmean2D,\n\t\t(float3*)dL_dmean2D_abs,\n\t\t(float4*)dL_dconic,\n\t\tdL_dopacity,\n\t\tdL_dcolor,\n\t\tdL_dlanguage_feature,\n\t\tdL_dlanguage_feature_instance,\n\t\tdL_dall_map,\n\t\trender_geo,\n\t\tinclude_feature), debug)\n\n\t// Take care of the rest of preprocessing. Was the precomputed covariance\n\t// given to us or a scales/rot pair? If precomputed, pass that. If not,\n\t// use the one we computed ourselves.\n\tconst float* cov3D_ptr = (cov3D_precomp != nullptr) ? cov3D_precomp : geomState.cov3D;\n\tCHECK_CUDA(BACKWARD::preprocess(P, D, M,\n\t\t(float3*)means3D,\n\t\tradii,\n\t\tshs,\n\t\tgeomState.clamped,\n\t\t(glm::vec3*)scales,\n\t\t(glm::vec4*)rotations,\n\t\tscale_modifier,\n\t\tcov3D_ptr,\n\t\tviewmatrix,\n\t\tprojmatrix,\n\t\tfocal_x, focal_y,\n\t\ttan_fovx, tan_fovy,\n\t\t(glm::vec3*)campos,\n\t\t(float3*)dL_dmean2D,\n\t\tdL_dconic,\n\t\t(glm::vec3*)dL_dmean3D,\n\t\tdL_dcolor,\n\t\tdL_dcov3D,\n\t\tdL_dsh,\n\t\t(glm::vec3*)dL_dscale,\n\t\t(glm::vec4*)dL_drot), debug)\n}"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/cuda_rasterizer/rasterizer_impl.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#pragma once\n\n#include <iostream>\n#include <vector>\n#include \"rasterizer.h\"\n#include <cuda_runtime_api.h>\n\nnamespace CudaRasterizer\n{\n\ttemplate <typename T>\n\tstatic void obtain(char*& chunk, T*& ptr, std::size_t count, std::size_t alignment)\n\t{\n\t\tstd::size_t offset = (reinterpret_cast<std::uintptr_t>(chunk) + alignment - 1) & ~(alignment - 1);\n\t\tptr = reinterpret_cast<T*>(offset);\n\t\tchunk = reinterpret_cast<char*>(ptr + count);\n\t}\n\n\tstruct GeometryState\n\t{\n\t\tsize_t scan_size;\n\t\tfloat* depths;\n\t\tchar* scanning_space;\n\t\tbool* clamped;\n\t\tint* internal_radii;\n\t\tfloat2* means2D;\n\t\tfloat* cov3D;\n\t\tfloat4* conic_opacity;\n\t\tfloat* rgb;\n\t\tuint32_t* point_offsets;\n\t\tuint32_t* tiles_touched;\n\n\t\tstatic GeometryState fromChunk(char*& chunk, size_t P);\n\t};\n\n\tstruct ImageState\n\t{\n\t\tuint2* ranges;\n\t\tuint32_t* n_contrib;\n\t\tfloat* accum_alpha;\n\n\t\tstatic ImageState fromChunk(char*& chunk, size_t N);\n\t};\n\n\tstruct BinningState\n\t{\n\t\tsize_t sorting_size;\n\t\tuint64_t* point_list_keys_unsorted;\n\t\tuint64_t* point_list_keys;\n\t\tuint32_t* point_list_unsorted;\n\t\tuint32_t* point_list;\n\t\tchar* list_sorting_space;\n\n\t\tstatic BinningState fromChunk(char*& chunk, size_t P);\n\t};\n\n\ttemplate<typename T> \n\tsize_t required(size_t P)\n\t{\n\t\tchar* size = nullptr;\n\t\tT::fromChunk(size, P);\n\t\treturn ((size_t)size) + 128;\n\t}\n};"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/diff_LangSurf_rasterization/__init__.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nfrom typing import NamedTuple\nimport torch.nn as nn\nimport torch\nfrom . import _C\n\ndef cpu_deep_copy_tuple(input_tuple):\n    copied_tensors = [item.cpu().clone() if isinstance(item, torch.Tensor) else item for item in input_tuple]\n    return tuple(copied_tensors)\n\ndef rasterize_gaussians(\n    means3D,\n    means2D,\n    means2D_abs,\n    sh,\n    colors_precomp,\n    language_feature_precomp,\n    language_feature_instance_precomp,\n    opacities,\n    scales,\n    rotations,\n    cov3Ds_precomp,\n    all_map,\n    raster_settings,\n):\n    return _RasterizeGaussians.apply(\n        means3D,\n        means2D,\n        means2D_abs,\n        sh,\n        colors_precomp,\n        language_feature_precomp,\n        language_feature_instance_precomp,\n        opacities,\n        scales,\n        rotations,\n        cov3Ds_precomp,\n        all_map,\n        raster_settings,\n    )\n\nclass _RasterizeGaussians(torch.autograd.Function):\n    @staticmethod\n    def forward(\n        ctx,\n        means3D,\n        means2D,\n        means2D_abs,\n        sh,\n        colors_precomp,\n        language_feature_precomp,\n        language_feature_instance_precomp,\n        opacities,\n        scales,\n        rotations,\n        cov3Ds_precomp,\n        all_maps,\n        raster_settings,\n    ):\n\n        # Restructure arguments the way that the C++ lib expects them\n        args = (\n            raster_settings.bg, \n            means3D,\n            colors_precomp,\n            language_feature_precomp,\n            language_feature_instance_precomp,\n            opacities,\n            scales,\n            rotations,\n            raster_settings.scale_modifier,\n            cov3Ds_precomp,\n            all_maps,\n            raster_settings.viewmatrix,\n            raster_settings.projmatrix,\n            raster_settings.tanfovx,\n            raster_settings.tanfovy,\n            raster_settings.image_height,\n            raster_settings.image_width,\n            sh,\n            raster_settings.sh_degree,\n            raster_settings.campos,\n            raster_settings.prefiltered,\n            raster_settings.render_geo,\n            raster_settings.debug,\n            raster_settings.include_feature\n        )\n\n        # Invoke C++/CUDA rasterizer\n        if raster_settings.debug:\n            cpu_args = cpu_deep_copy_tuple(args) # Copy them before they can be corrupted\n            try:\n                num_rendered, color, language_feature, language_feature_instance, radii, out_observe, out_all_map, geomBuffer, binningBuffer, imgBuffer = _C.rasterize_gaussians(*args)\n            except Exception as ex:\n                torch.save(cpu_args, \"snapshot_fw.dump\")\n                print(\"\\nAn error occured in forward. Please forward snapshot_fw.dump for debugging.\")\n                raise ex\n        else:\n            num_rendered, color, language_feature, language_feature_instance, radii, out_observe, out_all_map, out_plane_depth, geomBuffer, binningBuffer, imgBuffer = _C.rasterize_gaussians(*args)\n\n        # Keep relevant tensors for backward\n        ctx.raster_settings = raster_settings\n        ctx.num_rendered = num_rendered\n        ctx.save_for_backward(out_all_map, colors_precomp, language_feature_precomp, language_feature_instance_precomp, all_maps, means3D, scales, rotations, cov3Ds_precomp, radii, sh, geomBuffer, binningBuffer, imgBuffer)\n        return color, language_feature, language_feature_instance, radii, out_observe, out_all_map, out_plane_depth\n\n    @staticmethod\n    def backward(ctx, grad_out_color, grad_out_language_feature, grad_out_language_feature_instance, grad_radii, grad_out_observe, grad_out_all_map, grad_out_plane_depth):\n\n        # Restore necessary values from context\n        num_rendered = ctx.num_rendered\n        raster_settings = ctx.raster_settings\n        all_map_pixels, colors_precomp, language_feature_precomp, language_feature_instance_precomp, all_maps, means3D, scales, rotations, cov3Ds_precomp, radii, sh, geomBuffer, binningBuffer, imgBuffer = ctx.saved_tensors\n\n        # Restructure args as C++ method expects them\n        args = (raster_settings.bg,\n                all_map_pixels,\n                means3D, \n                radii, \n                colors_precomp, \n                language_feature_precomp,\n                language_feature_instance_precomp,\n                all_maps,\n                scales, \n                rotations, \n                raster_settings.scale_modifier, \n                cov3Ds_precomp, \n                raster_settings.viewmatrix, \n                raster_settings.projmatrix, \n                raster_settings.tanfovx, \n                raster_settings.tanfovy, \n                grad_out_color, \n                grad_out_language_feature,\n                grad_out_language_feature_instance,\n                grad_out_all_map,\n                grad_out_plane_depth,\n                sh, \n                raster_settings.sh_degree, \n                raster_settings.campos,\n                geomBuffer,\n                num_rendered,\n                binningBuffer,\n                imgBuffer,\n                raster_settings.render_geo,\n                raster_settings.debug,\n                raster_settings.include_feature)\n\n        # Compute gradients for relevant tensors by invoking backward method\n        if raster_settings.debug:\n            cpu_args = cpu_deep_copy_tuple(args) # Copy them before they can be corrupted\n            try:\n                grad_means2D, grad_means2D_abs, grad_colors_precomp, grad_language_feature_precomp, grad_language_feature_instance_precomp, grad_opacities, grad_means3D, grad_cov3Ds_precomp, grad_sh, grad_scales, grad_rotations, gard_all_map = _C.rasterize_gaussians_backward(*args)\n            except Exception as ex:\n                torch.save(cpu_args, \"snapshot_bw.dump\")\n                print(\"\\nAn error occured in backward. Writing snapshot_bw.dump for debugging.\\n\")\n                raise ex\n        else:\n             grad_means2D, grad_means2D_abs, grad_colors_precomp, grad_language_feature_precomp, grad_language_feature_instance_precomp, grad_opacities, grad_means3D, grad_cov3Ds_precomp, grad_sh, grad_scales, grad_rotations, gard_all_map = _C.rasterize_gaussians_backward(*args)\n        # print(f\"grad_means2D {grad_means2D.sum()}, grad_means2D_abs {grad_means2D_abs.sum()}\")\n\n        grads = (\n            grad_means3D,\n            grad_means2D,\n            grad_means2D_abs,\n            grad_sh,\n            grad_colors_precomp,\n            grad_language_feature_precomp,\n            grad_language_feature_instance_precomp,\n            grad_opacities,\n            grad_scales,\n            grad_rotations,\n            grad_cov3Ds_precomp,\n            gard_all_map,\n            None,\n        )\n\n        return grads\n\nclass GaussianRasterizationSettings(NamedTuple):\n    image_height: int\n    image_width: int \n    tanfovx : float\n    tanfovy : float\n    bg : torch.Tensor\n    scale_modifier : float\n    viewmatrix : torch.Tensor\n    projmatrix : torch.Tensor\n    sh_degree : int\n    campos : torch.Tensor\n    prefiltered : bool\n    render_geo : bool\n    debug : bool\n    include_feature: bool\n\nclass GaussianRasterizer(nn.Module):\n    def __init__(self, raster_settings):\n        super().__init__()\n        self.raster_settings = raster_settings\n\n    def markVisible(self, positions):\n        # Mark visible points (based on frustum culling for camera) with a boolean \n        with torch.no_grad():\n            raster_settings = self.raster_settings\n            visible = _C.mark_visible(\n                positions,\n                raster_settings.viewmatrix,\n                raster_settings.projmatrix)\n            \n        return visible\n\n    def forward(self, means3D, means2D, means2D_abs, opacities, shs = None, colors_precomp = None, language_feature_precomp = None, language_feature_instance_precomp = None, scales = None, rotations = None, cov3D_precomp = None, all_map=None):\n        \n        raster_settings = self.raster_settings\n\n        if (shs is None and colors_precomp is None) or (shs is not None and colors_precomp is not None):\n            raise Exception('Please provide excatly one of either SHs or precomputed colors!')\n        \n        if ((scales is None or rotations is None) and cov3D_precomp is None) or ((scales is not None or rotations is not None) and cov3D_precomp is not None):\n            raise Exception('Please provide exactly one of either scale/rotation pair or precomputed 3D covariance!')\n        \n        if shs is None:\n            shs = torch.Tensor([])\n        if colors_precomp is None:\n            colors_precomp = torch.Tensor([])\n        if language_feature_precomp is None:\n            language_feature_precomp = torch.Tensor([])\n        if language_feature_instance_precomp is None:\n            language_feature_instance_precomp = torch.Tensor([])\n\n        if scales is None:\n            scales = torch.Tensor([])\n        if rotations is None:\n            rotations = torch.Tensor([])\n        if cov3D_precomp is None:\n            cov3D_precomp = torch.Tensor([])\n        if all_map is None:\n            all_map = torch.Tensor([])\n\n        # Invoke C++/CUDA rasterization routine\n        return rasterize_gaussians(\n            means3D,\n            means2D,\n            means2D_abs,\n            shs,\n            colors_precomp,\n            language_feature_precomp,\n            language_feature_instance_precomp,\n            opacities,\n            scales, \n            rotations,\n            cov3D_precomp,\n            all_map,\n            raster_settings, \n        )\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/diff_LangSurf_rasterization.egg-info/PKG-INFO",
    "content": "Metadata-Version: 2.4\nName: diff_LangSurf_rasterization\nVersion: 0.0.0\nLicense-File: LICENSE.md\nDynamic: license-file\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/diff_LangSurf_rasterization.egg-info/SOURCES.txt",
    "content": "LICENSE.md\nREADME.md\next.cpp\nrasterize_points.cu\nsetup.py\ncuda_rasterizer/backward.cu\ncuda_rasterizer/forward.cu\ncuda_rasterizer/rasterizer_impl.cu\ndiff_LangSurf_rasterization/__init__.py\ndiff_LangSurf_rasterization.egg-info/PKG-INFO\ndiff_LangSurf_rasterization.egg-info/SOURCES.txt\ndiff_LangSurf_rasterization.egg-info/dependency_links.txt\ndiff_LangSurf_rasterization.egg-info/top_level.txt"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/diff_LangSurf_rasterization.egg-info/dependency_links.txt",
    "content": "\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/diff_LangSurf_rasterization.egg-info/top_level.txt",
    "content": "diff_LangSurf_rasterization\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/ext.cpp",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#include <torch/extension.h>\n#include \"rasterize_points.h\"\n\nPYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {\n  m.def(\"rasterize_gaussians\", &RasterizeGaussiansCUDA);\n  m.def(\"rasterize_gaussians_backward\", &RasterizeGaussiansBackwardCUDA);\n  m.def(\"mark_visible\", &markVisible);\n}"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/rasterize_points.cu",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#include <math.h>\n#include <torch/extension.h>\n#include <cstdio>\n#include <sstream>\n#include <iostream>\n#include <tuple>\n#include <stdio.h>\n#include <cuda_runtime_api.h>\n#include <memory>\n#include \"cuda_rasterizer/config.h\"\n#include \"cuda_rasterizer/rasterizer.h\"\n#include <fstream>\n#include <string>\n#include <functional>\n\nstd::function<char*(size_t N)> resizeFunctional(torch::Tensor& t) {\n    auto lambda = [&t](size_t N) {\n        t.resize_({(long long)N});\n\t\treturn reinterpret_cast<char*>(t.contiguous().data_ptr());\n    };\n    return lambda;\n}\n\nstd::tuple<int, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>\nRasterizeGaussiansCUDA(\n\tconst torch::Tensor& background,\n\tconst torch::Tensor& means3D,\n    const torch::Tensor& colors,\n\tconst torch::Tensor& language_feature,\n\tconst torch::Tensor& language_feature_instance,\n    const torch::Tensor& opacity,\n\tconst torch::Tensor& scales,\n\tconst torch::Tensor& rotations,\n\tconst float scale_modifier,\n\tconst torch::Tensor& cov3D_precomp,\n\tconst torch::Tensor& all_map,\n\tconst torch::Tensor& viewmatrix,\n\tconst torch::Tensor& projmatrix,\n\tconst float tan_fovx, \n\tconst float tan_fovy,\n    const int image_height,\n    const int image_width,\n\tconst torch::Tensor& sh,\n\tconst int degree,\n\tconst torch::Tensor& campos,\n\tconst bool prefiltered,\n\tconst bool render_geo,\n\tconst bool debug,\n\tconst bool include_feature)\n{\n  if (means3D.ndimension() != 2 || means3D.size(1) != 3) {\n    AT_ERROR(\"means3D must have dimensions (num_points, 3)\");\n  }\n  \n  const int P = means3D.size(0);\n  const int H = image_height;\n  const int W = image_width;\n\n  auto int_opts = means3D.options().dtype(torch::kInt32);\n  auto float_opts = means3D.options().dtype(torch::kFloat32);\n\n  torch::Tensor out_color = torch::full({NUM_CHANNELS, H, W}, 0.0, float_opts);\n  torch::Tensor out_language_feature;\n  torch::Tensor out_language_feature_instance;\n  if (include_feature) {\n\tout_language_feature = torch::full({NUM_CHANNELS_language_feature, H, W}, 0.0, float_opts);\n\tout_language_feature_instance = torch::full({NUM_CHANNELS_instance_feature, H, W}, 0.0, float_opts);\n  }\n  else {\n\tout_language_feature = torch::full({1}, 0.0, float_opts);\n\tout_language_feature_instance = torch::full({1}, 0.0, float_opts);\n  }\n  torch::Tensor radii = torch::full({P}, 0, means3D.options().dtype(torch::kInt32));\n  torch::Tensor out_observe = torch::full({P}, 0, means3D.options().dtype(torch::kInt32));\n  torch::Tensor out_all_map = torch::full({NUM_ALL_MAP, H, W}, 0, float_opts);\n  torch::Tensor out_plane_depth = torch::full({1, H, W}, 0, float_opts);\n  \n  torch::Device device(torch::kCUDA);\n  torch::TensorOptions options(torch::kByte);\n  torch::Tensor geomBuffer = torch::empty({0}, options.device(device));\n  torch::Tensor binningBuffer = torch::empty({0}, options.device(device));\n  torch::Tensor imgBuffer = torch::empty({0}, options.device(device));\n  std::function<char*(size_t)> geomFunc = resizeFunctional(geomBuffer);\n  std::function<char*(size_t)> binningFunc = resizeFunctional(binningBuffer);\n  std::function<char*(size_t)> imgFunc = resizeFunctional(imgBuffer);\n  \n  int rendered = 0;\n  if(P != 0)\n  {\n\t  int M = 0;\n\t  if(sh.size(0) != 0)\n\t  {\n\t\tM = sh.size(1);\n      }\n\n\t  rendered = CudaRasterizer::Rasterizer::forward(\n\t    geomFunc,\n\t\tbinningFunc,\n\t\timgFunc,\n\t    P, degree, M,\n\t\tbackground.contiguous().data<float>(),\n\t\tW, H,\n\t\tmeans3D.contiguous().data<float>(),\n\t\tsh.contiguous().data_ptr<float>(),\n\t\tcolors.contiguous().data<float>(), \n\t\tlanguage_feature.contiguous().data<float>(),\n\t\tlanguage_feature_instance.contiguous().data<float>(),\n\t\topacity.contiguous().data<float>(), \n\t\tscales.contiguous().data_ptr<float>(),\n\t\tscale_modifier,\n\t\trotations.contiguous().data_ptr<float>(),\n\t\tcov3D_precomp.contiguous().data<float>(), \n\t\tall_map.contiguous().data<float>(), \n\t\tviewmatrix.contiguous().data<float>(), \n\t\tprojmatrix.contiguous().data<float>(),\n\t\tcampos.contiguous().data<float>(),\n\t\ttan_fovx,\n\t\ttan_fovy,\n\t\tprefiltered,\n\t\tout_color.contiguous().data<float>(),\n\t\tout_language_feature.contiguous().data<float>(),\n\t\tout_language_feature_instance.contiguous().data<float>(),\n\t\tradii.contiguous().data<int>(),\n\t\tout_observe.contiguous().data<int>(),\n\t\tout_all_map.contiguous().data<float>(),\n\t\tout_plane_depth.contiguous().data<float>(),\n\t\trender_geo,\n\t\tdebug,\n\t\tinclude_feature);\n  }\n  return std::make_tuple(rendered, out_color, out_language_feature, out_language_feature_instance, radii, out_observe, out_all_map, out_plane_depth, geomBuffer, binningBuffer, imgBuffer);\n}\n\nstd::tuple<torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>\nRasterizeGaussiansBackwardCUDA(\n \tconst torch::Tensor& background,\n\tconst torch::Tensor& all_map_pixels,\n\tconst torch::Tensor& means3D,\n\tconst torch::Tensor& radii,\n    const torch::Tensor& colors,\n\tconst torch::Tensor& language_feature,\n\tconst torch::Tensor& language_feature_instance,\n\tconst torch::Tensor& all_maps,\n\tconst torch::Tensor& scales,\n\tconst torch::Tensor& rotations,\n\tconst float scale_modifier,\n\tconst torch::Tensor& cov3D_precomp,\n\tconst torch::Tensor& viewmatrix,\n    const torch::Tensor& projmatrix,\n\tconst float tan_fovx,\n\tconst float tan_fovy,\n    const torch::Tensor& dL_dout_color,\n\tconst torch::Tensor& dL_dout_language_feature,\n\tconst torch::Tensor& dL_dout_language_feature_instance,\n\tconst torch::Tensor& dL_dout_all_map,\n\tconst torch::Tensor& dL_dout_plane_depth,\n\tconst torch::Tensor& sh,\n\tconst int degree,\n\tconst torch::Tensor& campos,\n\tconst torch::Tensor& geomBuffer,\n\tconst int R,\n\tconst torch::Tensor& binningBuffer,\n\tconst torch::Tensor& imageBuffer,\n\tconst bool render_geo,\n\tconst bool debug,\n\tconst bool include_feature) \n{\n  const int P = means3D.size(0);\n  const int H = dL_dout_color.size(1);\n  const int W = dL_dout_color.size(2);\n  \n  int M = 0;\n  if(sh.size(0) != 0)\n  {\t\n\tM = sh.size(1);\n  }\n\n  torch::Tensor dL_dmeans3D = torch::zeros({P, 3}, means3D.options());\n  torch::Tensor dL_dmeans2D = torch::zeros({P, 3}, means3D.options());\n  torch::Tensor dL_dmeans2D_abs = torch::zeros({P, 3}, means3D.options());\n  torch::Tensor dL_dcolors = torch::zeros({P, NUM_CHANNELS}, means3D.options());\n  torch::Tensor dL_dlanguage_feature;\n  torch::Tensor dL_dlanguage_feature_instance;\n  if (include_feature) {\n\tdL_dlanguage_feature = torch::zeros({P, NUM_CHANNELS_language_feature}, means3D.options());\n\tdL_dlanguage_feature_instance = torch::zeros({P, NUM_CHANNELS_instance_feature}, means3D.options());\n  } else {\n\tdL_dlanguage_feature = torch::zeros({1}, means3D.options());\n\tdL_dlanguage_feature_instance = torch::zeros({1}, means3D.options());\n  }\n  torch::Tensor dL_dall_map = torch::zeros({P, NUM_ALL_MAP}, means3D.options());\n  torch::Tensor dL_dconic = torch::zeros({P, 2, 2}, means3D.options());\n  torch::Tensor dL_dopacity = torch::zeros({P, 1}, means3D.options());\n  torch::Tensor dL_dcov3D = torch::zeros({P, 6}, means3D.options());\n  torch::Tensor dL_dsh = torch::zeros({P, M, 3}, means3D.options());\n  torch::Tensor dL_dscales = torch::zeros({P, 3}, means3D.options());\n  torch::Tensor dL_drotations = torch::zeros({P, 4}, means3D.options());\n  \n  if(P != 0)\n  {  \n\t  CudaRasterizer::Rasterizer::backward(P, degree, M, R,\n\t  background.contiguous().data<float>(),\n\t  all_map_pixels.contiguous().data<float>(),\n\t  W, H, \n\t  means3D.contiguous().data<float>(),\n\t  sh.contiguous().data<float>(),\n\t  colors.contiguous().data<float>(),\n\t  language_feature.contiguous().data<float>(),\n\t  language_feature_instance.contiguous().data<float>(),\n\t  all_maps.contiguous().data<float>(),\n\t  scales.data_ptr<float>(),\n\t  scale_modifier,\n\t  rotations.data_ptr<float>(),\n\t  cov3D_precomp.contiguous().data<float>(),\n\t  viewmatrix.contiguous().data<float>(),\n\t  projmatrix.contiguous().data<float>(),\n\t  campos.contiguous().data<float>(),\n\t  tan_fovx,\n\t  tan_fovy,\n\t  radii.contiguous().data<int>(),\n\t  reinterpret_cast<char*>(geomBuffer.contiguous().data_ptr()),\n\t  reinterpret_cast<char*>(binningBuffer.contiguous().data_ptr()),\n\t  reinterpret_cast<char*>(imageBuffer.contiguous().data_ptr()),\n\t  dL_dout_color.contiguous().data<float>(),\n\t  dL_dout_language_feature.contiguous().data<float>(),\n\t  dL_dout_language_feature_instance.contiguous().data<float>(),\n\t  dL_dout_all_map.contiguous().data<float>(),\n\t  dL_dout_plane_depth.contiguous().data<float>(),\n\t  dL_dmeans2D.contiguous().data<float>(),\n\t  dL_dmeans2D_abs.contiguous().data<float>(),\n\t  dL_dconic.contiguous().data<float>(),  \n\t  dL_dopacity.contiguous().data<float>(),\n\t  dL_dcolors.contiguous().data<float>(),\n\t  dL_dlanguage_feature.contiguous().data<float>(),\n\t  dL_dlanguage_feature_instance.contiguous().data<float>(),\n\t  dL_dmeans3D.contiguous().data<float>(),\n\t  dL_dcov3D.contiguous().data<float>(),\n\t  dL_dsh.contiguous().data<float>(),\n\t  dL_dscales.contiguous().data<float>(),\n\t  dL_drotations.contiguous().data<float>(),\n\t  dL_dall_map.contiguous().data<float>(),\n\t  render_geo,\n\t  debug,\n\t  include_feature);\n  }\n\n  return std::make_tuple(dL_dmeans2D, dL_dmeans2D_abs, dL_dcolors, dL_dlanguage_feature, dL_dlanguage_feature_instance, dL_dopacity, dL_dmeans3D, dL_dcov3D, dL_dsh, dL_dscales, dL_drotations, dL_dall_map);\n}\n\ntorch::Tensor markVisible(\n\t\ttorch::Tensor& means3D,\n\t\ttorch::Tensor& viewmatrix,\n\t\ttorch::Tensor& projmatrix)\n{ \n  const int P = means3D.size(0);\n  \n  torch::Tensor present = torch::full({P}, false, means3D.options().dtype(at::kBool));\n \n  if(P != 0)\n  {\n\tCudaRasterizer::Rasterizer::markVisible(P,\n\t\tmeans3D.contiguous().data<float>(),\n\t\tviewmatrix.contiguous().data<float>(),\n\t\tprojmatrix.contiguous().data<float>(),\n\t\tpresent.contiguous().data<bool>());\n  }\n  \n  return present;\n}"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/rasterize_points.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#pragma once\n#include <torch/extension.h>\n#include <cstdio>\n#include <tuple>\n#include <string>\n\t\nstd::tuple<int, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>\nRasterizeGaussiansCUDA(\n\tconst torch::Tensor& background,\n\tconst torch::Tensor& means3D,\n    const torch::Tensor& colors,\n\tconst torch::Tensor& language_feature,\n\tconst torch::Tensor& language_feature_instance,\n    const torch::Tensor& opacity,\n\tconst torch::Tensor& scales,\n\tconst torch::Tensor& rotations,\n\tconst float scale_modifier,\n\tconst torch::Tensor& cov3D_precomp,\n\tconst torch::Tensor& all_map,\n\tconst torch::Tensor& viewmatrix,\n\tconst torch::Tensor& projmatrix,\n\tconst float tan_fovx, \n\tconst float tan_fovy,\n    const int image_height,\n    const int image_width,\n\tconst torch::Tensor& sh,\n\tconst int degree,\n\tconst torch::Tensor& campos,\n\tconst bool prefiltered,\n\tconst bool render_geo,\n\tconst bool debug,\n\tconst bool include_feature);\n\nstd::tuple<torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor, torch::Tensor>\nRasterizeGaussiansBackwardCUDA(\n \tconst torch::Tensor& background,\n\tconst torch::Tensor& all_map_pixels,\n\tconst torch::Tensor& means3D,\n\tconst torch::Tensor& radii,\n    const torch::Tensor& colors,\n\tconst torch::Tensor& language_feature,\n\tconst torch::Tensor& language_feature_instance,\n\tconst torch::Tensor& all_maps,\n\tconst torch::Tensor& scales,\n\tconst torch::Tensor& rotations,\n\tconst float scale_modifier,\n\tconst torch::Tensor& cov3D_precomp,\n\tconst torch::Tensor& viewmatrix,\n    const torch::Tensor& projmatrix,\n\tconst float tan_fovx,\n\tconst float tan_fovy,\n    const torch::Tensor& dL_dout_color,\n\tconst torch::Tensor& dL_dout_language_feature,\n\tconst torch::Tensor& dL_dout_language_feature_instance,\n\tconst torch::Tensor& dL_dout_all_map,\n\tconst torch::Tensor& dL_dout_plane_depth,\n\tconst torch::Tensor& sh,\n\tconst int degree,\n\tconst torch::Tensor& campos,\n\tconst torch::Tensor& geomBuffer,\n\tconst int R,\n\tconst torch::Tensor& binningBuffer,\n\tconst torch::Tensor& imageBuffer,\n\tconst bool render_geo,\n\tconst bool debug,\n\tconst bool include_feature);\n\t\t\ntorch::Tensor markVisible(\n\t\ttorch::Tensor& means3D,\n\t\ttorch::Tensor& viewmatrix,\n\t\ttorch::Tensor& projmatrix);"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/setup.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport os\n\nfrom setuptools import setup\nfrom torch.utils.cpp_extension import BuildExtension, CUDAExtension\n\nos.path.dirname(os.path.abspath(__file__))\n\nsetup(\n    name=\"diff_LangSurf_rasterization\",\n    packages=['diff_LangSurf_rasterization'],\n    ext_modules=[\n        CUDAExtension(\n            name=\"diff_LangSurf_rasterization._C\",\n            sources=[\n            \"cuda_rasterizer/rasterizer_impl.cu\",\n            \"cuda_rasterizer/forward.cu\",\n            \"cuda_rasterizer/backward.cu\",\n            \"rasterize_points.cu\",\n            \"ext.cpp\"],\n            extra_compile_args={\"nvcc\": [\"-I\" + os.path.join(os.path.dirname(os.path.abspath(__file__)), \"third_party/glm/\")]})\n        ],\n    cmdclass={\n        'build_ext': BuildExtension\n    }\n)\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/.appveyor.yml",
    "content": "shallow_clone: true\n\nplatform:\n  - x86\n  - x64\n\nconfiguration:\n  - Debug\n  - Release\n\nimage:\n  - Visual Studio 2013\n  - Visual Studio 2015\n  - Visual Studio 2017\n  - Visual Studio 2019\n\nenvironment:\n  matrix:\n    - GLM_ARGUMENTS: -DGLM_TEST_FORCE_PURE=ON\n    - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_SSE2=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\n    - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\n    - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_14=ON\n    - GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_17=ON\n\nmatrix:\n    exclude:\n    - image: Visual Studio 2013\n      GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\n    - image: Visual Studio 2013\n      GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_14=ON\n    - image: Visual Studio 2013\n      GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_17=ON\n    - image: Visual Studio 2013\n      configuration: Debug\n    - image: Visual Studio 2015\n      GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_SSE2=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\n    - image: Visual Studio 2015\n      GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_14=ON\n    - image: Visual Studio 2015\n      GLM_ARGUMENTS: -DGLM_TEST_ENABLE_SIMD_AVX=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_CXX_17=ON\n    - image: Visual Studio 2015\n      platform: x86\n    - image: Visual Studio 2015\n      configuration: Debug\n    - image: Visual Studio 2017\n      platform: x86\n    - image: Visual Studio 2017\n      configuration: Debug\n    - image: Visual Studio 2019\n      platform: x64\n\nbranches:\n  only:\n    - master\n\nbefore_build:\n  - ps: |\n      mkdir build\n      cd build\n\n      if (\"$env:APPVEYOR_JOB_NAME\" -match \"Image: Visual Studio 2013\") {\n          $env:generator=\"Visual Studio 12 2013\"\n      } \n      if (\"$env:APPVEYOR_JOB_NAME\" -match \"Image: Visual Studio 2015\") {\n          $env:generator=\"Visual Studio 14 2015\"\n      } \n      if (\"$env:APPVEYOR_JOB_NAME\" -match \"Image: Visual Studio 2017\") {\n          $env:generator=\"Visual Studio 15 2017\"\n      }\n      if (\"$env:APPVEYOR_JOB_NAME\" -match \"Image: Visual Studio 2019\") {\n          $env:generator=\"Visual Studio 16 2019\"\n      }\n      if ($env:PLATFORM -eq \"x64\") {\n          $env:generator=\"$env:generator Win64\"\n      }\n      echo generator=\"$env:generator\"\n      cmake .. -G \"$env:generator\" -DCMAKE_INSTALL_PREFIX=\"$env:APPVEYOR_BUILD_FOLDER/install\" -DGLM_QUIET=ON -DGLM_TEST_ENABLE=ON \"$env:GLM_ARGUMENTS\"\n\nbuild_script:\n  - cmake --build . --parallel --config %CONFIGURATION% -- /m /v:minimal\n  - cmake --build . --target install --parallel --config %CONFIGURATION% -- /m /v:minimal\n\ntest_script:\n  - ctest --parallel 4 --verbose -C %CONFIGURATION%\n  - cd ..\n  - ps: |\n      mkdir build_test_cmake\n      cd build_test_cmake\n      cmake ..\\test\\cmake\\ -G \"$env:generator\" -DCMAKE_PREFIX_PATH=\"$env:APPVEYOR_BUILD_FOLDER/install\"\n  - cmake --build . --parallel --config %CONFIGURATION% -- /m /v:minimal\n\ndeploy: off\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/.gitignore",
    "content": "# Compiled Object files\n*.slo\n*.lo\n*.o\n*.obj\n\n# Precompiled Headers\n*.gch\n*.pch\n\n# Compiled Dynamic libraries\n*.so\n*.dylib\n*.dll\n\n# Fortran module files\n*.mod\n\n# Compiled Static libraries\n*.lai\n*.la\n*.a\n*.lib\n\n# Executables\n*.exe\n*.out\n*.app\n\n# CMake\nCMakeCache.txt\nCMakeFiles\ncmake_install.cmake\ninstall_manifest.txt\n*.cmake\n!glmConfig.cmake\n!glmConfig-version.cmake\n# ^ May need to add future .cmake files as exceptions\n\n# Test logs\nTesting/*\n\n# Test input\ntest/gtc/*.dds\n\n# Project Files\nMakefile\n*.cbp\n*.user\n\n# Misc.\n*.log\n\n# local build(s)\nbuild*\n\n/.vs\n/.vscode\n/CMakeSettings.json\n.DS_Store\n*.swp\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/.travis.yml",
    "content": "language: cpp\n\nbranches:\n  only:\n    - master\n    - stable\n\njobs:\n  include:\n    - name: \"Xcode 7.3 C++98 pure release\"\n      os: osx\n      osx_image: xcode7.3\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON\"\n\n    - name: \"Xcode 7.3 C++98 sse2 release\"\n      os: osx\n      osx_image: xcode7.3\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON\"\n\n    - name: \"Xcode 7.3 C++98 ms release\"\n      os: osx\n      osx_image: xcode7.3\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\"\n\n    - name: \"XCode 7.3 C++11 pure release\"\n      os: osx\n      osx_image: xcode7.3\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON\"\n\n    - name: \"XCode 7.3 C++11 sse2 release\"\n      os: osx\n      osx_image: xcode7.3\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON\"\n\n    - name: \"XCode 10.3 C++11 sse2 release\"\n      os: osx\n      osx_image: xcode10.3\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON\"\n\n    - name: \"XCode 12.2 C++11 sse2 release\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"XCode 12.2 C++11 sse2 debug\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE3=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"XCode 12.2 C++11 avx debug\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"XCode 12.2 C++14 avx debug\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"XCode 12.2 C++14 pure debug\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"XCode 12.2 C++17 pure debug\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"XCode 12.2 C++17 sse2 debug\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"XCode 12.2 C++17 sse2 release\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"XCode 12.2 C++17 avx release\"\n      os: osx\n      osx_image: xcode12.2\n      env:\n        - MATRIX_EVAL=\"\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 4.9 C++98 pure release\"\n      os: linux\n      dist: Xenial\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-4.9\n      env:\n        - MATRIX_EVAL=\"CC=gcc-4.9 && CXX=g++-4.9\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 4.9 C++98 pure debug\"\n      os: linux\n      dist: Xenial\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-4.9\n      env:\n        - MATRIX_EVAL=\"CC=gcc-4.9 && CXX=g++-4.9\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 4.9 C++98 ms debug\"\n      os: linux\n      dist: Xenial\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-4.9\n      env:\n        - MATRIX_EVAL=\"CC=gcc-4.9 && CXX=g++-4.9\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_98=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 4.9 C++11 ms debug\"\n      os: linux\n      dist: Xenial\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-4.9\n      env:\n        - MATRIX_EVAL=\"CC=gcc-4.9 && CXX=g++-4.9\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 4.9 C++11 pure debug\"\n      os: linux\n      dist: Xenial\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-4.9\n      env:\n        - MATRIX_EVAL=\"CC=gcc-4.9 && CXX=g++-4.9\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_11=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 6 C++14 pure debug\"\n      os: linux\n      dist: bionic\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-6\n      env:\n        - MATRIX_EVAL=\"CC=gcc-6 && CXX=g++-6\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 6 C++14 ms debug\"\n      os: linux\n      dist: bionic\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-6\n      env:\n        - MATRIX_EVAL=\"CC=gcc-6 && CXX=g++-6\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 7 C++17 ms debug\"\n      os: linux\n      dist: bionic\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-7\n      env:\n        - MATRIX_EVAL=\"CC=gcc-7 && CXX=g++-7\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 7 C++17 pure debug\"\n      os: linux\n      dist: bionic\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-7\n      env:\n        - MATRIX_EVAL=\"CC=gcc-7 && CXX=g++-7\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 10 C++17 pure debug\"\n      os: linux\n      dist: bionic\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-10\n      env:\n        - MATRIX_EVAL=\"CC=gcc-10 && CXX=g++-10\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"GCC 10 C++17 pure release\"\n      os: linux\n      dist: bionic\n      addons:\n        apt:\n          sources:\n            - ubuntu-toolchain-r-test\n          packages:\n            - g++-10\n      env:\n        - MATRIX_EVAL=\"CC=gcc-10 && CXX=g++-10\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"Clang C++14 pure release\"\n      os: linux\n      dist: Xenial\n      env:\n        - MATRIX_EVAL=\"CC=clang && CXX=clang++\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"Clang C++14 pure debug\"\n      os: linux\n      dist: Xenial\n      env:\n        - MATRIX_EVAL=\"CC=clang && CXX=clang++\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"Clang C++14 sse2 debug\"\n      os: linux\n      dist: Xenial\n      env:\n        - MATRIX_EVAL=\"CC=clang && CXX=clang++\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"Clang C++14 sse2 debug\"\n      os: linux\n      dist: focal\n      env:\n        - MATRIX_EVAL=\"CC=clang && CXX=clang++\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_14=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"Clang C++17 sse2 debug\"\n      os: linux\n      dist: focal\n      env:\n        - MATRIX_EVAL=\"CC=clang && CXX=clang++\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_SSE2=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"Clang C++17 avx2 debug\"\n      os: linux\n      dist: focal\n      env:\n        - MATRIX_EVAL=\"CC=clang && CXX=clang++\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_ENABLE_LANG_EXTENSIONS=ON -DGLM_TEST_ENABLE_SIMD_AVX2=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"Clang C++17 pure debug\"\n      os: linux\n      dist: focal\n      env:\n        - MATRIX_EVAL=\"CC=clang && CXX=clang++\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Debug -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\n    - name: \"Clang C++17 pure release\"\n      os: linux\n      dist: focal\n      env:\n        - MATRIX_EVAL=\"CC=clang && CXX=clang++\"\n        - CMAKE_BUILD_ENV=\"-DCMAKE_BUILD_TYPE=Release -DGLM_TEST_ENABLE=ON -DGLM_TEST_ENABLE_CXX_17=ON -DGLM_TEST_FORCE_PURE=ON\"\n        - CTEST_ENV=\"--parallel 4 --output-on-failure\"\n        - CMAKE_ENV=\"--parallel\"\n\nbefore_script:\n    - cmake --version\n    - eval \"${MATRIX_EVAL}\"\n\nscript:\n  - ${CC} --version\n  - mkdir ./build\n  - cd ./build\n  - cmake -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/install -DCMAKE_CXX_COMPILER=$COMPILER ${CMAKE_BUILD_ENV} ..\n  - cmake --build . ${CMAKE_ENV}\n  - ctest ${CTEST_ENV}\n  - cmake --build . --target install ${CMAKE_ENV}\n  - cd $TRAVIS_BUILD_DIR\n  - mkdir ./build_test_cmake\n  - cd ./build_test_cmake\n  - cmake -DCMAKE_CXX_COMPILER=$COMPILER $TRAVIS_BUILD_DIR/test/cmake/ -DCMAKE_PREFIX_PATH=$TRAVIS_BUILD_DIR/install\n  - cmake --build .\n\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.2 FATAL_ERROR)\ncmake_policy(VERSION 3.2)\n\n\nfile(READ \"glm/detail/setup.hpp\" GLM_SETUP_FILE)\nstring(REGEX MATCH \"#define[ ]+GLM_VERSION_MAJOR[ ]+([0-9]+)\" _ ${GLM_SETUP_FILE})\nset(GLM_VERSION_MAJOR \"${CMAKE_MATCH_1}\")\nstring(REGEX MATCH \"#define[ ]+GLM_VERSION_MINOR[ ]+([0-9]+)\" _ ${GLM_SETUP_FILE})\nset(GLM_VERSION_MINOR \"${CMAKE_MATCH_1}\")\nstring(REGEX MATCH \"#define[ ]+GLM_VERSION_PATCH[ ]+([0-9]+)\" _ ${GLM_SETUP_FILE})\nset(GLM_VERSION_PATCH \"${CMAKE_MATCH_1}\")\nstring(REGEX MATCH \"#define[ ]+GLM_VERSION_REVISION[ ]+([0-9]+)\" _ ${GLM_SETUP_FILE})\nset(GLM_VERSION_REVISION \"${CMAKE_MATCH_1}\")\n\nset(GLM_VERSION ${GLM_VERSION_MAJOR}.${GLM_VERSION_MINOR}.${GLM_VERSION_PATCH}.${GLM_VERSION_REVISION})\nproject(glm VERSION ${GLM_VERSION} LANGUAGES CXX)\nmessage(STATUS \"GLM: Version \" ${GLM_VERSION})\n\nadd_subdirectory(glm)\nadd_library(glm::glm ALIAS glm)\n\nif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})\n\n\tinclude(CPack)\n\tinstall(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} PATTERN \"CMakeLists.txt\" EXCLUDE)\n\tinstall(EXPORT glm FILE glmConfig.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm NAMESPACE glm::)\n\tinclude(CMakePackageConfigHelpers)\n\twrite_basic_package_version_file(\"glmConfigVersion.cmake\" COMPATIBILITY AnyNewerVersion)\n\tinstall(FILES ${CMAKE_CURRENT_BINARY_DIR}/glmConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/glm)\n\n\tinclude(CTest)\n\tif(BUILD_TESTING)\n\t\tadd_subdirectory(test)\n\tendif()\n\nendif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})\n\nif (NOT TARGET uninstall)\nconfigure_file(cmake/cmake_uninstall.cmake.in\n               cmake_uninstall.cmake IMMEDIATE @ONLY)\n\nadd_custom_target(uninstall\n                  \"${CMAKE_COMMAND}\" -P\n                  \"${CMAKE_BINARY_DIR}/cmake_uninstall.cmake\")\nendif()\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/cmake/cmake_uninstall.cmake.in",
    "content": "if(NOT EXISTS \"@CMAKE_BINARY_DIR@/install_manifest.txt\")\n  message(FATAL_ERROR \"Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt\")\nendif()\n\nfile(READ \"@CMAKE_BINARY_DIR@/install_manifest.txt\" files)\nstring(REGEX REPLACE \"\\n\" \";\" files \"${files}\")\nforeach(file ${files})\n  message(STATUS \"Uninstalling $ENV{DESTDIR}${file}\")\n  if(IS_SYMLINK \"$ENV{DESTDIR}${file}\" OR EXISTS \"$ENV{DESTDIR}${file}\")\n    exec_program(\n      \"@CMAKE_COMMAND@\" ARGS \"-E remove \\\"$ENV{DESTDIR}${file}\\\"\"\n      OUTPUT_VARIABLE rm_out\n      RETURN_VALUE rm_retval\n      )\n    if(NOT \"${rm_retval}\" STREQUAL 0)\n      message(FATAL_ERROR \"Problem when removing $ENV{DESTDIR}${file}\")\n    endif()\n  else(IS_SYMLINK \"$ENV{DESTDIR}${file}\" OR EXISTS \"$ENV{DESTDIR}${file}\")\n    message(STATUS \"File $ENV{DESTDIR}${file} does not exist.\")\n  endif()\nendforeach()\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/copying.txt",
    "content": "================================================================================\nOpenGL Mathematics (GLM)\n--------------------------------------------------------------------------------\nGLM is licensed under The Happy Bunny License or MIT License\n\n================================================================================\nThe Happy Bunny License (Modified MIT License)\n--------------------------------------------------------------------------------\nCopyright (c) 2005 - G-Truc Creation\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nRestrictions:\n By making use of the Software for military purposes, you choose to make a\n Bunny unhappy.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n================================================================================\nThe MIT License\n--------------------------------------------------------------------------------\nCopyright (c) 2005 - G-Truc Creation\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00001_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: _features.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">_features.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"comment\">// #define GLM_CXX98_EXCEPTIONS</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"comment\">// #define GLM_CXX98_RTTI</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"comment\">// #define GLM_CXX11_RVALUE_REFERENCES</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"comment\">// Rvalue references - GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"comment\">// GLM_CXX11_TRAILING_RETURN</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"comment\">// Rvalue references for *this - GCC not supported</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"comment\">// GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Initialization of class objects by rvalues - GCC any</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"comment\">// GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"comment\">// Non-static data member initializers - GCC 4.7</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"comment\">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">// #define GLM_CXX11_VARIADIC_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"comment\">// Variadic templates - GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"comment\">// Extending variadic template template parameters - GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"comment\">// #define GLM_CXX11_GENERALIZED_INITIALIZERS</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"comment\">// Initializer lists - GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"comment\">// #define GLM_CXX11_STATIC_ASSERT</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"comment\">// Static assertions - GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"comment\">// #define GLM_CXX11_AUTO_TYPE</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"comment\">// auto-typed variables - GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"comment\">// #define GLM_CXX11_AUTO_TYPE</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"comment\">// Multi-declarator auto - GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"comment\">// #define GLM_CXX11_AUTO_TYPE</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"comment\">// Removal of auto as a storage-class specifier - GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"comment\">// #define GLM_CXX11_AUTO_TYPE</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"comment\">// New function declarator syntax - GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"comment\">// #define GLM_CXX11_LAMBDAS</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"comment\">// New wording for C++0x lambdas - GCC 4.5</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"comment\">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"comment\">// #define GLM_CXX11_DECLTYPE</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"comment\">// Declared type of an expression - GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"comment\">// Right angle brackets - GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"comment\">// Default template arguments for function templates    DR226   GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"comment\">// Solving the SFINAE problem for expressions   DR339   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"comment\">// #define GLM_CXX11_ALIAS_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"comment\">// Template aliases     N2258   GCC 4.7</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"comment\">// Extern templates     N1987   Yes</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"comment\">// #define GLM_CXX11_NULLPTR</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"comment\">// Null pointer constant        N2431   GCC 4.6</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;<span class=\"comment\">// #define GLM_CXX11_STRONG_ENUMS</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;<span class=\"comment\">// Strongly-typed enums N2347   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;<span class=\"comment\">// Forward declarations for enums       N2764   GCC 4.6</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"comment\">// Generalized attributes       N2761   GCC 4.8</span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;<span class=\"comment\">// Generalized constant expressions     N2235   GCC 4.6</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf</span></div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"comment\">// Alignment support    N2341   GCC 4.8</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;<span class=\"comment\">// #define GLM_CXX11_DELEGATING_CONSTRUCTORS</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;<span class=\"comment\">// Delegating constructors      N1986   GCC 4.7</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;<span class=\"comment\">// Inheriting constructors      N2540   GCC 4.8</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;<span class=\"comment\">// #define GLM_CXX11_EXPLICIT_CONVERSIONS</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;<span class=\"comment\">// Explicit conversion operators        N2437   GCC 4.5</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;<span class=\"comment\">// New character types  N2249   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;<span class=\"comment\">// Unicode string literals      N2442   GCC 4.5</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;<span class=\"comment\">// Raw string literals  N2442   GCC 4.5</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm</span></div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;<span class=\"comment\">// Universal character name literals    N2170   GCC 4.5</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html</span></div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;<span class=\"comment\">// #define GLM_CXX11_USER_LITERALS</span></div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"comment\">// User-defined literals                N2765   GCC 4.7</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf</span></div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;<span class=\"comment\">// Standard Layout Types        N2342   GCC 4.5</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"comment\">// #define GLM_CXX11_DEFAULTED_FUNCTIONS</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;<span class=\"comment\">// #define GLM_CXX11_DELETED_FUNCTIONS</span></div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"comment\">// Defaulted and deleted functions      N2346   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm</span></div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;<span class=\"comment\">// Extended friend declarations N1791   GCC 4.7</span></div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf</span></div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;<span class=\"comment\">// Extending sizeof     N2253   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html</span></div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;<span class=\"comment\">// #define GLM_CXX11_INLINE_NAMESPACES</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;<span class=\"comment\">// Inline namespaces    N2535   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;<span class=\"comment\">// #define GLM_CXX11_UNRESTRICTED_UNIONS</span></div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;<span class=\"comment\">// Unrestricted unions  N2544   GCC 4.6</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf</span></div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;<span class=\"comment\">// #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;<span class=\"comment\">// Local and unnamed types as template arguments        N2657   GCC 4.5</span></div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;<span class=\"comment\">// #define GLM_CXX11_RANGE_FOR</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;<span class=\"comment\">// Range-based for      N2930   GCC 4.6</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;<span class=\"comment\">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;<span class=\"comment\">// #define GLM_CXX11_OVERRIDE_CONTROL</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;<span class=\"comment\">// Explicit virtual overrides   N2928 N3206 N3272       GCC 4.7</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;<span class=\"comment\">// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm</span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm</span></div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm</span></div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;<span class=\"comment\">// Minimal support for garbage collection and reachability-based leak detection N2670   No</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm</span></div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;<span class=\"comment\">// #define GLM_CXX11_NOEXCEPT</span></div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;<span class=\"comment\">// Allowing move constructors to throw [noexcept]       N3050   GCC 4.6 (core language only)</span></div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;<span class=\"comment\">// Defining move special member functions       N3053   GCC 4.6</span></div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html</span></div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;<span class=\"comment\">// Sequence points      N2239   Yes</span></div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html</span></div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;<span class=\"comment\">// Atomic operations    N2427   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html</span></div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;<span class=\"comment\">// Strong Compare and Exchange  N2748   GCC 4.5</span></div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html</span></div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;<span class=\"comment\">// Bidirectional Fences N2752   GCC 4.8</span></div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm</span></div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;<span class=\"comment\">// Memory model N2429   GCC 4.8</span></div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm</span></div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;<span class=\"comment\">// Data-dependency ordering: atomics and memory model   N2664   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm</span></div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;<span class=\"comment\">// Propagating exceptions       N2179   GCC 4.4</span></div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html</span></div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;<span class=\"comment\">// Abandoning a process and at_quick_exit       N2440   GCC 4.8</span></div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm</span></div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;<span class=\"comment\">// Allow atomics use in signal handlers N2547   Yes</span></div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm</span></div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;<span class=\"comment\">// Thread-local storage N2659   GCC 4.8</span></div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm</span></div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;<span class=\"comment\">// Dynamic initialization and destruction with concurrency      N2660   GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm</span></div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;<span class=\"comment\">// __func__ predefined identifier       N2340   GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm</span></div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;<span class=\"comment\">// C99 preprocessor     N1653   GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm</span></div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;<span class=\"comment\">// long long    N1811   GCC 4.3</span></div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf</span></div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;<span class=\"comment\">// Extended integral types      N1988   Yes</span></div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;<span class=\"comment\">// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf</span></div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;<span class=\"preprocessor\">#if(GLM_COMPILER &amp; GLM_COMPILER_GCC)</span></div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;<span class=\"preprocessor\">#       define GLM_CXX11_STATIC_ASSERT</span></div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;<span class=\"preprocessor\">#elif(GLM_COMPILER &amp; GLM_COMPILER_CLANG)</span></div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_exceptions))</span></div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX98_EXCEPTIONS</span></div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_rtti))</span></div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX98_RTTI</span></div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_access_control_sfinae))</span></div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_ACCESS_CONTROL_SFINAE</span></div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_alias_templates))</span></div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_ALIAS_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_alignas))</span></div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_ALIGNAS</span></div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_attributes))</span></div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_ATTRIBUTES</span></div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_constexpr))</span></div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_CONSTEXPR</span></div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_decltype))</span></div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_DECLTYPE</span></div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_default_function_template_args))</span></div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS</span></div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_defaulted_functions))</span></div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_DEFAULTED_FUNCTIONS</span></div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_delegating_constructors))</span></div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_DELEGATING_CONSTRUCTORS</span></div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_deleted_functions))</span></div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_DELETED_FUNCTIONS</span></div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_explicit_conversions))</span></div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_EXPLICIT_CONVERSIONS</span></div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_generalized_initializers))</span></div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_GENERALIZED_INITIALIZERS</span></div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_implicit_moves))</span></div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_IMPLICIT_MOVES</span></div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_inheriting_constructors))</span></div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_INHERITING_CONSTRUCTORS</span></div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_inline_namespaces))</span></div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_INLINE_NAMESPACES</span></div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_lambdas))</span></div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_LAMBDAS</span></div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_local_type_template_args))</span></div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS</span></div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_noexcept))</span></div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_NOEXCEPT</span></div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_nonstatic_member_init))</span></div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_NONSTATIC_MEMBER_INIT</span></div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_nullptr))</span></div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_NULLPTR</span></div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_override_control))</span></div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_OVERRIDE_CONTROL</span></div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_reference_qualified_functions))</span></div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS</span></div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_range_for))</span></div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_RANGE_FOR</span></div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_raw_string_literals))</span></div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_RAW_STRING_LITERALS</span></div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_rvalue_references))</span></div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_RVALUE_REFERENCES</span></div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_static_assert))</span></div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_STATIC_ASSERT</span></div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_auto_type))</span></div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_AUTO_TYPE</span></div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_strong_enums))</span></div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_STRONG_ENUMS</span></div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_trailing_return))</span></div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_TRAILING_RETURN</span></div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_unicode_literals))</span></div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_UNICODE_LITERALS</span></div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_unrestricted_unions))</span></div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_UNRESTRICTED_UNIONS</span></div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_user_literals))</span></div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_USER_LITERALS</span></div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;<span class=\"preprocessor\">#       if(__has_feature(cxx_variadic_templates))</span></div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;<span class=\"preprocessor\">#               define GLM_CXX11_VARIADIC_TEMPLATES</span></div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;<span class=\"preprocessor\">#endif//(GLM_COMPILER &amp; GLM_COMPILER_CLANG)</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00002_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: _fixes.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">_fixes.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#include &lt;cmath&gt;</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#ifdef max</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#undef max</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#ifdef min</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#undef min</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#ifdef isnan</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#undef isnan</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#ifdef isinf</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#undef isinf</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#ifdef log2</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#undef log2</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00003_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: _noise.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">_noise.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;</div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;        GLM_FUNC_QUALIFIER T mod289(T <span class=\"keyword\">const</span>&amp; x)</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;                <span class=\"keywordflow\">return</span> x - <a class=\"code\" href=\"a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d\">floor</a>(x * (static_cast&lt;T&gt;(1.0) / static_cast&lt;T&gt;(289.0))) * <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(289.0);</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        GLM_FUNC_QUALIFIER T permute(T <span class=\"keyword\">const</span>&amp; x)</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keywordflow\">return</span> mod289(((x * static_cast&lt;T&gt;(34)) + static_cast&lt;T&gt;(1)) * x);</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; permute(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; x)</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                <span class=\"keywordflow\">return</span> mod289(((x * static_cast&lt;T&gt;(34)) + static_cast&lt;T&gt;(1)) * x);</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; permute(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x)</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                <span class=\"keywordflow\">return</span> mod289(((x * static_cast&lt;T&gt;(34)) + static_cast&lt;T&gt;(1)) * x);</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; permute(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; x)</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                <span class=\"keywordflow\">return</span> mod289(((x * static_cast&lt;T&gt;(34)) + static_cast&lt;T&gt;(1)) * x);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_QUALIFIER T taylorInvSqrt(T <span class=\"keyword\">const</span>&amp; r)</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(1.79284291400159) - <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(0.85373472095314) * r;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; taylorInvSqrt(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; r)</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(1.79284291400159) - <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(0.85373472095314) * r;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; taylorInvSqrt(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; r)</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(1.79284291400159) - <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(0.85373472095314) * r;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; taylorInvSqrt(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; r)</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                <span class=\"keywordflow\">return</span> <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(1.79284291400159) - <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(0.85373472095314) * r;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; fade(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; t)</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                <span class=\"keywordflow\">return</span> (t * t * t) * (t * (t * <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(6) - static_cast&lt;T&gt;(15)) + static_cast&lt;T&gt;(10));</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; fade(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; t)</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                <span class=\"keywordflow\">return</span> (t * t * t) * (t * (t * <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(6) - static_cast&lt;T&gt;(15)) + static_cast&lt;T&gt;(10));</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; fade(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; t)</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                <span class=\"keywordflow\">return</span> (t * t * t) * (t * (t * <span class=\"keyword\">static_cast&lt;</span>T<span class=\"keyword\">&gt;</span>(6) - static_cast&lt;T&gt;(15)) + static_cast&lt;T&gt;(10));</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"ttc\" id=\"a00241_html_gaa9d0742639e85b29c7c5de11cfd6840d\"><div class=\"ttname\"><a href=\"a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d\">glm::floor</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; floor(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a value equal to the nearest integer that is less then or equal to x. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00004_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: _swizzle.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">_swizzle.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;        <span class=\"comment\">// Internal class for implementing swizzle operators</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keywordtype\">int</span> N&gt;</div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;        <span class=\"keyword\">struct </span>_swizzle_base0</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;        <span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;                GLM_FUNC_QUALIFIER T&amp; elem(<span class=\"keywordtype\">size_t</span> i){ <span class=\"keywordflow\">return</span> (reinterpret_cast&lt;T*&gt;(_buffer))[i]; }</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;                GLM_FUNC_QUALIFIER T <span class=\"keyword\">const</span>&amp; elem(<span class=\"keywordtype\">size_t</span> i)<span class=\"keyword\"> const</span>{ <span class=\"keywordflow\">return</span> (reinterpret_cast&lt;const T*&gt;(_buffer))[i]; }</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;                <span class=\"comment\">// Use an opaque buffer to *ensure* the compiler doesn&#39;t call a constructor.</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;                <span class=\"comment\">// The size 1 buffer is assumed to aligned to the actual members so that the</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"comment\">// elem()</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keywordtype\">char</span>    _buffer[1];</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> N, <span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2, <span class=\"keywordtype\">int</span> E3, <span class=\"keywordtype\">bool</span> Aligned&gt;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;        <span class=\"keyword\">struct </span>_swizzle_base1 : <span class=\"keyword\">public</span> _swizzle_base0&lt;T, N&gt;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">bool</span> Aligned&gt;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;        <span class=\"keyword\">struct </span>_swizzle_base1&lt;2, T, Q, E0,E1,-1,-2, Aligned&gt; : <span class=\"keyword\">public</span> _swizzle_base0&lt;T, 2&gt;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; operator ()()<span class=\"keyword\">  const </span>{ <span class=\"keywordflow\">return</span> vec&lt;2, T, Q&gt;(this-&gt;elem(E0), this-&gt;elem(E1)); }</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2, <span class=\"keywordtype\">bool</span> Aligned&gt;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;        <span class=\"keyword\">struct </span>_swizzle_base1&lt;3, T, Q, E0,E1,E2,-1, Aligned&gt; : <span class=\"keyword\">public</span> _swizzle_base0&lt;T, 3&gt;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; operator ()()<span class=\"keyword\">  const </span>{ <span class=\"keywordflow\">return</span> vec&lt;3, T, Q&gt;(this-&gt;elem(E0), this-&gt;elem(E1), this-&gt;elem(E2)); }</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2, <span class=\"keywordtype\">int</span> E3, <span class=\"keywordtype\">bool</span> Aligned&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">struct </span>_swizzle_base1&lt;4, T, Q, E0,E1,E2,E3, Aligned&gt; : <span class=\"keyword\">public</span> _swizzle_base0&lt;T, 4&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; operator ()()<span class=\"keyword\">  const </span>{ <span class=\"keywordflow\">return</span> vec&lt;4, T, Q&gt;(this-&gt;elem(E0), this-&gt;elem(E1), this-&gt;elem(E2), this-&gt;elem(E3)); }</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"comment\">// Internal class for implementing swizzle operators</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"comment\">                Template parameters:</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"comment\">                T                       = type of scalar values (e.g. float, double)</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"comment\">                N                       = number of components in the vector (e.g. 3)</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"comment\">                E0...3          = what index the n-th element of this swizzle refers to in the unswizzled vec</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"comment\">                DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"comment\">                        containing duplicate elements so that they cannot be used as r-values).</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"comment\">        */</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> N, <span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2, <span class=\"keywordtype\">int</span> E3, <span class=\"keywordtype\">int</span> DUPLICATE_ELEMENTS&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">struct </span>_swizzle_base2 : <span class=\"keyword\">public</span> _swizzle_base1&lt;N, T, Q, E0,E1,E2,E3, detail::is_aligned&lt;Q&gt;::value&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                <span class=\"keyword\">struct </span>op_equal</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                        GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator() (T&amp; <a class=\"code\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a>, T&amp; t)<span class=\"keyword\"> const</span>{ e = t; }</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                <span class=\"keyword\">struct </span>op_minus</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                        GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator() (T&amp; <a class=\"code\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a>, T&amp; t)<span class=\"keyword\"> const</span>{ e -= t; }</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                <span class=\"keyword\">struct </span>op_plus</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                        GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator() (T&amp; <a class=\"code\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a>, T&amp; t)<span class=\"keyword\"> const</span>{ e += t; }</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                <span class=\"keyword\">struct </span>op_mul</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                        GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator() (T&amp; <a class=\"code\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a>, T&amp; t)<span class=\"keyword\"> const</span>{ e *= t; }</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                <span class=\"keyword\">struct </span>op_div</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                        GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator() (T&amp; <a class=\"code\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a>, T&amp; t)<span class=\"keyword\"> const</span>{ e /= t; }</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_QUALIFIER _swizzle_base2&amp; operator= (<span class=\"keyword\">const</span> T&amp; t)</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                        <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; N; ++i)</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                                (*<span class=\"keyword\">this</span>)[i] = t;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                        <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_QUALIFIER _swizzle_base2&amp; operator= (vec&lt;N, T, Q&gt; <span class=\"keyword\">const</span>&amp; that)</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                        _apply_op(that, op_equal());</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                        <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator -= (vec&lt;N, T, Q&gt; <span class=\"keyword\">const</span>&amp; that)</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                        _apply_op(that, op_minus());</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator += (vec&lt;N, T, Q&gt; <span class=\"keyword\">const</span>&amp; that)</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                        _apply_op(that, op_plus());</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator *= (vec&lt;N, T, Q&gt; <span class=\"keyword\">const</span>&amp; that)</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                        _apply_op(that, op_mul());</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> operator /= (vec&lt;N, T, Q&gt; <span class=\"keyword\">const</span>&amp; that)</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;                        _apply_op(that, op_div());</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;                GLM_FUNC_QUALIFIER T&amp; operator[](<span class=\"keywordtype\">size_t</span> i)</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;                        <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> offset_dst[4] = { E0, E1, E2, E3 };</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                        <span class=\"keywordflow\">return</span> this-&gt;elem(offset_dst[i]);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;                GLM_FUNC_QUALIFIER T operator[](<span class=\"keywordtype\">size_t</span> i)<span class=\"keyword\"> const</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"keyword\">                </span>{</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;                        <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> offset_dst[4] = { E0, E1, E2, E3 };</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;                        <span class=\"keywordflow\">return</span> this-&gt;elem(offset_dst[i]);</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        <span class=\"keyword\">protected</span>:</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keywordtype\">void</span> _apply_op(vec&lt;N, T, Q&gt; <span class=\"keyword\">const</span>&amp; that, <span class=\"keyword\">const</span> U&amp; op)</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                        <span class=\"comment\">// Make a copy of the data in this == &amp;that.</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                        <span class=\"comment\">// The copier should optimize out the copy in cases where the function is</span></div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;                        <span class=\"comment\">// properly inlined and the copy is not necessary.</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                        T t[N];</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;                        <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; N; ++i)</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;                                t[i] = that[i];</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                        <span class=\"keywordflow\">for</span> (<span class=\"keywordtype\">int</span> i = 0; i &lt; N; ++i)</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;                                op( (*<span class=\"keyword\">this</span>)[i], t[i] );</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        <span class=\"comment\">// Specialization for swizzles containing duplicate elements.  These cannot be modified.</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> N, <span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2, <span class=\"keywordtype\">int</span> E3&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        <span class=\"keyword\">struct </span>_swizzle_base2&lt;N, T, Q, E0,E1,E2,E3, 1&gt; : <span class=\"keyword\">public</span> _swizzle_base1&lt;N, T, Q, E0,E1,E2,E3, detail::is_aligned&lt;Q&gt;::value&gt;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;                <span class=\"keyword\">struct </span>Stub {};</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                GLM_FUNC_QUALIFIER _swizzle_base2&amp; operator= (Stub <span class=\"keyword\">const</span>&amp;) { <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>; }</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                GLM_FUNC_QUALIFIER T operator[]  (<span class=\"keywordtype\">size_t</span> i)<span class=\"keyword\"> const</span></div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;<span class=\"keyword\">                </span>{</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;                        <span class=\"keyword\">const</span> <span class=\"keywordtype\">int</span> offset_dst[4] = { E0, E1, E2, E3 };</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;                        <span class=\"keywordflow\">return</span> this-&gt;elem(offset_dst[i]);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> N, <span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2, <span class=\"keywordtype\">int</span> E3&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        <span class=\"keyword\">struct </span>_swizzle : <span class=\"keyword\">public</span> _swizzle_base2&lt;N, T, Q, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)&gt;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;                <span class=\"keyword\">typedef</span> _swizzle_base2&lt;N, T, Q, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)&gt; base_type;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;                <span class=\"keyword\">using</span> base_type::operator=;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">operator</span> vec&lt;N, T, Q&gt; () <span class=\"keyword\">const</span> { <span class=\"keywordflow\">return</span> (*<span class=\"keyword\">this</span>)(); }</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;<span class=\"comment\">// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_TEMPLATE1   template&lt;int N, typename T, qualifier Q, int E0, int E1, int E2, int E3&gt;</span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_TEMPLATE2   template&lt;int N, typename T, qualifier Q, int E0, int E1, int E2, int E3, int F0, int F1, int F2, int F3&gt;</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_TYPE1       _swizzle&lt;N, T, Q, E0, E1, E2, E3&gt;</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_TYPE2       _swizzle&lt;N, T, Q, F0, F1, F2, F3&gt;</span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;<span class=\"comment\">// Wrapper for a binary operator (e.g. u.yy + v.zy)</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND)                 \\</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE2                                                          \\</span></div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER vec&lt;N, T, Q&gt; operator OPERAND ( const GLM_SWIZZLE_TYPE1&amp; a, const GLM_SWIZZLE_TYPE2&amp; b)  \\</span></div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;<span class=\"preprocessor\">        {                                                                               \\</span></div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;<span class=\"preprocessor\">                return a() OPERAND b();                                                     \\</span></div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"preprocessor\">        }                                                                               \\</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                          \\</span></div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER vec&lt;N, T, Q&gt; operator OPERAND ( const GLM_SWIZZLE_TYPE1&amp; a, const vec&lt;N, T, Q&gt;&amp; b)                   \\</span></div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;<span class=\"preprocessor\">        {                                                                               \\</span></div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;<span class=\"preprocessor\">                return a() OPERAND b;                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;<span class=\"preprocessor\">        }                                                                               \\</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                          \\</span></div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER vec&lt;N, T, Q&gt; operator OPERAND ( const vec&lt;N, T, Q&gt;&amp; a, const GLM_SWIZZLE_TYPE1&amp; b)                   \\</span></div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;<span class=\"preprocessor\">        {                                                                               \\</span></div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;<span class=\"preprocessor\">                return a OPERAND b();                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;<span class=\"comment\">// Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz)</span></div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND)                                                              \\</span></div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER vec&lt;N, T, Q&gt; operator OPERAND ( const GLM_SWIZZLE_TYPE1&amp; a, const T&amp; b)      \\</span></div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;<span class=\"preprocessor\">        {                                                                                                                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;<span class=\"preprocessor\">                return a() OPERAND b;                                                                                                                                   \\</span></div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;<span class=\"preprocessor\">        }                                                                                                                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER vec&lt;N, T, Q&gt; operator OPERAND ( const T&amp; a, const GLM_SWIZZLE_TYPE1&amp; b)      \\</span></div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;<span class=\"preprocessor\">        {                                                                                                                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;<span class=\"preprocessor\">                return a OPERAND b();                                                                                                                                   \\</span></div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;<span class=\"comment\">// Macro for wrapping a function taking one argument (e.g. abs())</span></div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION)                                                                                               \\</span></div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1&amp; a)         \\</span></div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;<span class=\"preprocessor\">        {                                                                                                                                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a());                                                                                                                                                   \\</span></div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;<span class=\"comment\">// Macro for wrapping a function taking two vector arguments (e.g. dot()).</span></div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION)                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE2                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1&amp; a, const GLM_SWIZZLE_TYPE2&amp; b) \\</span></div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;<span class=\"preprocessor\">        {                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a(), b());                                                                              \\</span></div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;<span class=\"preprocessor\">        }                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1&amp; a, const GLM_SWIZZLE_TYPE1&amp; b) \\</span></div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;<span class=\"preprocessor\">        {                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a(), b());                                                                              \\</span></div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;<span class=\"preprocessor\">        }                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1&amp; a, const typename V&amp; b)         \\</span></div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;<span class=\"preprocessor\">        {                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a(), b);                                                                                \\</span></div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;<span class=\"preprocessor\">        }                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V&amp; a, const GLM_SWIZZLE_TYPE1&amp; b)                  \\</span></div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;<span class=\"preprocessor\">        {                                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a, b());                                                                                \\</span></div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;<span class=\"comment\">// Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()).</span></div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION)                                                             \\</span></div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE2                                                                                                    \\</span></div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1&amp; a, const GLM_SWIZZLE_TYPE2&amp; b, const T&amp; c)   \\</span></div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;<span class=\"preprocessor\">        {                                                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a(), b(), c);                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;<span class=\"preprocessor\">        }                                                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                                    \\</span></div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1&amp; a, const GLM_SWIZZLE_TYPE1&amp; b, const T&amp; c)   \\</span></div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;<span class=\"preprocessor\">        {                                                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a(), b(), c);                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;<span class=\"preprocessor\">        }                                                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                                    \\</span></div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1&amp; a, const typename S0::vec_type&amp; b, const T&amp; c)\\</span></div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;<span class=\"preprocessor\">        {                                                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a(), b, c);                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;<span class=\"preprocessor\">        }                                                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_TEMPLATE1                                                                                                    \\</span></div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;<span class=\"preprocessor\">        GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V&amp; a, const GLM_SWIZZLE_TYPE1&amp; b, const T&amp; c)           \\</span></div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;<span class=\"preprocessor\">        {                                                                                                                         \\</span></div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;<span class=\"preprocessor\">                return FUNCTION(a, b(), c);                                                                                           \\</span></div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;        <span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;                GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-)</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;                GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*)</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;                GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+)</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;                GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-)</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;                GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*)</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;                GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/)</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;        <span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;        <span class=\"comment\">// Swizzles are distinct types from the unswizzled type.  The below macros will</span></div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;        <span class=\"comment\">// provide template specializations for the swizzle types for the given functions</span></div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;        <span class=\"comment\">// so that the compiler does not have any ambiguity to choosing how to handle</span></div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;        <span class=\"comment\">// the function.</span></div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;        <span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;        <span class=\"comment\">// The alternative is to use the operator()() when calling the function in order</span></div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;        <span class=\"comment\">// to explicitly convert the swizzled type to the unswizzled type.</span></div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;        <span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    abs);</span></div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    acos);</span></div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    acosh);</span></div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    all);</span></div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    any);</span></div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_2_ARGS(value_type,  dot);</span></div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type,    cross);</span></div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type,    step);</span></div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;        <span class=\"comment\">//GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix);</span></div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE2_2_MEMBERS(T, Q, E0,E1) \\</span></div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2, T, Q, 0,0,-1,-2&gt; E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2, T, Q, 0,1,-1,-2&gt; E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2, T, Q, 1,0,-1,-2&gt; E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2, T, Q, 1,1,-1,-2&gt; E1 ## E1; };</span></div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE2_3_MEMBERS(T, Q, E0,E1) \\</span></div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3,T, Q, 0,0,0,-1&gt; E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3,T, Q, 0,0,1,-1&gt; E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3,T, Q, 0,1,0,-1&gt; E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3,T, Q, 0,1,1,-1&gt; E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3,T, Q, 1,0,0,-1&gt; E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3,T, Q, 1,0,1,-1&gt; E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3,T, Q, 1,1,0,-1&gt; E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3,T, Q, 1,1,1,-1&gt; E1 ## E1 ## E1; };</span></div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE2_4_MEMBERS(T, Q, E0,E1) \\</span></div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,0,0&gt; E0 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,0,1&gt; E0 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,1,0&gt; E0 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,1,1&gt; E0 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,0,0&gt; E0 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,0,1&gt; E0 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,1,0&gt; E0 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,1,1&gt; E0 ## E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,0,0&gt; E1 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,0,1&gt; E1 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,1,0&gt; E1 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,1,1&gt; E1 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,0,0&gt; E1 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,0,1&gt; E1 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,1,0&gt; E1 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,1,1&gt; E1 ## E1 ## E1 ## E1; };</span></div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE3_2_MEMBERS(T, Q, E0,E1,E2) \\</span></div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 0,0,-1,-2&gt; E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 0,1,-1,-2&gt; E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 0,2,-1,-2&gt; E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 1,0,-1,-2&gt; E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 1,1,-1,-2&gt; E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 1,2,-1,-2&gt; E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 2,0,-1,-2&gt; E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 2,1,-1,-2&gt; E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 2,2,-1,-2&gt; E2 ## E2; };</span></div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE3_3_MEMBERS(T, Q ,E0,E1,E2) \\</span></div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,0,0,-1&gt; E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,0,1,-1&gt; E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,0,2,-1&gt; E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,1,0,-1&gt; E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,1,1,-1&gt; E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,1,2,-1&gt; E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,2,0,-1&gt; E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,2,1,-1&gt; E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,2,2,-1&gt; E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,0,0,-1&gt; E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,0,1,-1&gt; E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,0,2,-1&gt; E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,1,0,-1&gt; E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,1,1,-1&gt; E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,1,2,-1&gt; E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,2,0,-1&gt; E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,2,1,-1&gt; E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,2,2,-1&gt; E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,0,0,-1&gt; E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,0,1,-1&gt; E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,0,2,-1&gt; E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,1,0,-1&gt; E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,1,1,-1&gt; E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,1,2,-1&gt; E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,2,0,-1&gt; E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,2,1,-1&gt; E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,2,2,-1&gt; E2 ## E2 ## E2; };</span></div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE3_4_MEMBERS(T, Q, E0,E1,E2) \\</span></div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,0,0&gt; E0 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,0,1&gt; E0 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,0,2&gt; E0 ## E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,1,0&gt; E0 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,1,1&gt; E0 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,1,2&gt; E0 ## E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,2,0&gt; E0 ## E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,2,1&gt; E0 ## E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,0,2,2&gt; E0 ## E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,0,0&gt; E0 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,0,1&gt; E0 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,0,2&gt; E0 ## E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,1,0&gt; E0 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,1,1&gt; E0 ## E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,1,2&gt; E0 ## E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,2,0&gt; E0 ## E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,2,1&gt; E0 ## E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,1,2,2&gt; E0 ## E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,0,0&gt; E0 ## E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,0,1&gt; E0 ## E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,0,2&gt; E0 ## E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,1,0&gt; E0 ## E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,1,1&gt; E0 ## E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,1,2&gt; E0 ## E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,2,0&gt; E0 ## E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,2,1&gt; E0 ## E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 0,2,2,2&gt; E0 ## E2 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,0,0&gt; E1 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,0,1&gt; E1 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,0,2&gt; E1 ## E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,1,0&gt; E1 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,1,1&gt; E1 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,1,2&gt; E1 ## E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,2,0&gt; E1 ## E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,2,1&gt; E1 ## E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,0,2,2&gt; E1 ## E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,0,0&gt; E1 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,0,1&gt; E1 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,0,2&gt; E1 ## E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,1,0&gt; E1 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,1,1&gt; E1 ## E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,1,2&gt; E1 ## E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,2,0&gt; E1 ## E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,2,1&gt; E1 ## E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,1,2,2&gt; E1 ## E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,0,0&gt; E1 ## E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,0,1&gt; E1 ## E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,0,2&gt; E1 ## E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,1,0&gt; E1 ## E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,1,1&gt; E1 ## E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,1,2&gt; E1 ## E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,2,0&gt; E1 ## E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,2,1&gt; E1 ## E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 1,2,2,2&gt; E1 ## E2 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,0,0&gt; E2 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,0,1&gt; E2 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,0,2&gt; E2 ## E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,1,0&gt; E2 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,1,1&gt; E2 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,1,2&gt; E2 ## E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,2,0&gt; E2 ## E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,2,1&gt; E2 ## E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,0,2,2&gt; E2 ## E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,0,0&gt; E2 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,0,1&gt; E2 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,0,2&gt; E2 ## E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,1,0&gt; E2 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,1,1&gt; E2 ## E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,1,2&gt; E2 ## E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,2,0&gt; E2 ## E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,2,1&gt; E2 ## E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,1,2,2&gt; E2 ## E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,0,0&gt; E2 ## E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,0,1&gt; E2 ## E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,0,2&gt; E2 ## E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,1,0&gt; E2 ## E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,1,1&gt; E2 ## E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,1,2&gt; E2 ## E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,2,0&gt; E2 ## E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,2,1&gt; E2 ## E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4,T, Q, 2,2,2,2&gt; E2 ## E2 ## E2 ## E2; };</span></div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE4_2_MEMBERS(T, Q, E0,E1,E2,E3) \\</span></div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 0,0,-1,-2&gt; E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 0,1,-1,-2&gt; E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 0,2,-1,-2&gt; E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 0,3,-1,-2&gt; E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 1,0,-1,-2&gt; E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 1,1,-1,-2&gt; E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 1,2,-1,-2&gt; E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 1,3,-1,-2&gt; E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 2,0,-1,-2&gt; E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 2,1,-1,-2&gt; E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 2,2,-1,-2&gt; E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 2,3,-1,-2&gt; E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 3,0,-1,-2&gt; E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 3,1,-1,-2&gt; E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 3,2,-1,-2&gt; E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;2,T, Q, 3,3,-1,-2&gt; E3 ## E3; };</span></div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE4_3_MEMBERS(T, Q, E0,E1,E2,E3) \\</span></div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,0,0,-1&gt; E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,0,1,-1&gt; E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,0,2,-1&gt; E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,0,3,-1&gt; E0 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,1,0,-1&gt; E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,1,1,-1&gt; E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,1,2,-1&gt; E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,1,3,-1&gt; E0 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,2,0,-1&gt; E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,2,1,-1&gt; E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,2,2,-1&gt; E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,2,3,-1&gt; E0 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,3,0,-1&gt; E0 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,3,1,-1&gt; E0 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,3,2,-1&gt; E0 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 0,3,3,-1&gt; E0 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,0,0,-1&gt; E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,0,1,-1&gt; E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,0,2,-1&gt; E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,0,3,-1&gt; E1 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,1,0,-1&gt; E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,1,1,-1&gt; E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,1,2,-1&gt; E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,1,3,-1&gt; E1 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,2,0,-1&gt; E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,2,1,-1&gt; E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,2,2,-1&gt; E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,2,3,-1&gt; E1 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,3,0,-1&gt; E1 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,3,1,-1&gt; E1 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,3,2,-1&gt; E1 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 1,3,3,-1&gt; E1 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,0,0,-1&gt; E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,0,1,-1&gt; E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,0,2,-1&gt; E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,0,3,-1&gt; E2 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,1,0,-1&gt; E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,1,1,-1&gt; E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,1,2,-1&gt; E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,1,3,-1&gt; E2 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,2,0,-1&gt; E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\">  524</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,2,1,-1&gt; E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,2,2,-1&gt; E2 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,2,3,-1&gt; E2 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,3,0,-1&gt; E2 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\">  528</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,3,1,-1&gt; E2 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,3,2,-1&gt; E2 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 2,3,3,-1&gt; E2 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,0,0,-1&gt; E3 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,0,1,-1&gt; E3 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\">  533</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,0,2,-1&gt; E3 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,0,3,-1&gt; E3 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,1,0,-1&gt; E3 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\">  536</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,1,1,-1&gt; E3 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,1,2,-1&gt; E3 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,1,3,-1&gt; E3 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,2,0,-1&gt; E3 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,2,1,-1&gt; E3 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\">  541</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,2,2,-1&gt; E3 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,2,3,-1&gt; E3 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,3,0,-1&gt; E3 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00544\"></a><span class=\"lineno\">  544</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,3,1,-1&gt; E3 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\">  545</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,3,2,-1&gt; E3 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;3, T, Q, 3,3,3,-1&gt; E3 ## E3 ## E3; };</span></div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;</div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\">  548</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE4_4_MEMBERS(T, Q, E0,E1,E2,E3) \\</span></div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\">  549</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,0,0&gt; E0 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\">  550</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,0,1&gt; E0 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,0,2&gt; E0 ## E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,0,3&gt; E0 ## E0 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\">  553</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,1,0&gt; E0 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\">  554</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,1,1&gt; E0 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,1,2&gt; E0 ## E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,1,3&gt; E0 ## E0 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\">  557</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,2,0&gt; E0 ## E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,2,1&gt; E0 ## E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,2,2&gt; E0 ## E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,2,3&gt; E0 ## E0 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,3,0&gt; E0 ## E0 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,3,1&gt; E0 ## E0 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,3,2&gt; E0 ## E0 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,0,3,3&gt; E0 ## E0 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,0,0&gt; E0 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,0,1&gt; E0 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,0,2&gt; E0 ## E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,0,3&gt; E0 ## E1 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,1,0&gt; E0 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,1,1&gt; E0 ## E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,1,2&gt; E0 ## E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,1,3&gt; E0 ## E1 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00573\"></a><span class=\"lineno\">  573</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,2,0&gt; E0 ## E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\">  574</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,2,1&gt; E0 ## E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,2,2&gt; E0 ## E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,2,3&gt; E0 ## E1 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,3,0&gt; E0 ## E1 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,3,1&gt; E0 ## E1 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,3,2&gt; E0 ## E1 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\">  580</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,1,3,3&gt; E0 ## E1 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,0,0&gt; E0 ## E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,0,1&gt; E0 ## E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,0,2&gt; E0 ## E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\">  584</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,0,3&gt; E0 ## E2 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\">  585</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,1,0&gt; E0 ## E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,1,1&gt; E0 ## E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,1,2&gt; E0 ## E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,1,3&gt; E0 ## E2 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,2,0&gt; E0 ## E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,2,1&gt; E0 ## E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,2,2&gt; E0 ## E2 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\">  592</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,2,3&gt; E0 ## E2 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,3,0&gt; E0 ## E2 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,3,1&gt; E0 ## E2 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,3,2&gt; E0 ## E2 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,2,3,3&gt; E0 ## E2 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,0,0&gt; E0 ## E3 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,0,1&gt; E0 ## E3 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,0,2&gt; E0 ## E3 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,0,3&gt; E0 ## E3 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,1,0&gt; E0 ## E3 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,1,1&gt; E0 ## E3 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,1,2&gt; E0 ## E3 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,1,3&gt; E0 ## E3 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00605\"></a><span class=\"lineno\">  605</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,2,0&gt; E0 ## E3 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,2,1&gt; E0 ## E3 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,2,2&gt; E0 ## E3 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,2,3&gt; E0 ## E3 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,3,0&gt; E0 ## E3 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,3,1&gt; E0 ## E3 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,3,2&gt; E0 ## E3 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\">  612</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 0,3,3,3&gt; E0 ## E3 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,0,0&gt; E1 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,0,1&gt; E1 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,0,2&gt; E1 ## E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,0,3&gt; E1 ## E0 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00617\"></a><span class=\"lineno\">  617</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,1,0&gt; E1 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,1,1&gt; E1 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,1,2&gt; E1 ## E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,1,3&gt; E1 ## E0 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,2,0&gt; E1 ## E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,2,1&gt; E1 ## E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,2,2&gt; E1 ## E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00624\"></a><span class=\"lineno\">  624</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,2,3&gt; E1 ## E0 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,3,0&gt; E1 ## E0 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,3,1&gt; E1 ## E0 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,3,2&gt; E1 ## E0 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,0,3,3&gt; E1 ## E0 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,0,0&gt; E1 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,0,1&gt; E1 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,0,2&gt; E1 ## E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,0,3&gt; E1 ## E1 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,1,0&gt; E1 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,1,1&gt; E1 ## E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\">  635</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,1,2&gt; E1 ## E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\">  636</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,1,3&gt; E1 ## E1 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,2,0&gt; E1 ## E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,2,1&gt; E1 ## E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,2,2&gt; E1 ## E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\">  640</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,2,3&gt; E1 ## E1 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\">  641</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,3,0&gt; E1 ## E1 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,3,1&gt; E1 ## E1 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\">  643</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,3,2&gt; E1 ## E1 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,1,3,3&gt; E1 ## E1 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,0,0&gt; E1 ## E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,0,1&gt; E1 ## E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\">  647</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,0,2&gt; E1 ## E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,0,3&gt; E1 ## E2 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00649\"></a><span class=\"lineno\">  649</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,1,0&gt; E1 ## E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,1,1&gt; E1 ## E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,1,2&gt; E1 ## E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00652\"></a><span class=\"lineno\">  652</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,1,3&gt; E1 ## E2 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\">  653</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,2,0&gt; E1 ## E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,2,1&gt; E1 ## E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,2,2&gt; E1 ## E2 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,2,3&gt; E1 ## E2 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,3,0&gt; E1 ## E2 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\">  658</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,3,1&gt; E1 ## E2 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,3,2&gt; E1 ## E2 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,2,3,3&gt; E1 ## E2 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00661\"></a><span class=\"lineno\">  661</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,0,0&gt; E1 ## E3 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\">  662</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,0,1&gt; E1 ## E3 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,0,2&gt; E1 ## E3 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\">  664</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,0,3&gt; E1 ## E3 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\">  665</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,1,0&gt; E1 ## E3 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\">  666</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,1,1&gt; E1 ## E3 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00667\"></a><span class=\"lineno\">  667</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,1,2&gt; E1 ## E3 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\">  668</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,1,3&gt; E1 ## E3 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,2,0&gt; E1 ## E3 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00670\"></a><span class=\"lineno\">  670</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,2,1&gt; E1 ## E3 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00671\"></a><span class=\"lineno\">  671</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,2,2&gt; E1 ## E3 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,2,3&gt; E1 ## E3 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\">  673</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,3,0&gt; E1 ## E3 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\">  674</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,3,1&gt; E1 ## E3 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\">  675</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,3,2&gt; E1 ## E3 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 1,3,3,3&gt; E1 ## E3 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,0,0&gt; E2 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00678\"></a><span class=\"lineno\">  678</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,0,1&gt; E2 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00679\"></a><span class=\"lineno\">  679</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,0,2&gt; E2 ## E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,0,3&gt; E2 ## E0 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,1,0&gt; E2 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\">  682</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,1,1&gt; E2 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00683\"></a><span class=\"lineno\">  683</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,1,2&gt; E2 ## E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00684\"></a><span class=\"lineno\">  684</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,1,3&gt; E2 ## E0 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\">  685</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,2,0&gt; E2 ## E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\">  686</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,2,1&gt; E2 ## E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00687\"></a><span class=\"lineno\">  687</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,2,2&gt; E2 ## E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00688\"></a><span class=\"lineno\">  688</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,2,3&gt; E2 ## E0 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,3,0&gt; E2 ## E0 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00690\"></a><span class=\"lineno\">  690</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,3,1&gt; E2 ## E0 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00691\"></a><span class=\"lineno\">  691</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,3,2&gt; E2 ## E0 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00692\"></a><span class=\"lineno\">  692</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,0,3,3&gt; E2 ## E0 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\">  693</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,0,0&gt; E2 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\">  694</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,0,1&gt; E2 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00695\"></a><span class=\"lineno\">  695</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,0,2&gt; E2 ## E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00696\"></a><span class=\"lineno\">  696</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,0,3&gt; E2 ## E1 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\">  697</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,1,0&gt; E2 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,1,1&gt; E2 ## E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,1,2&gt; E2 ## E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00700\"></a><span class=\"lineno\">  700</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,1,3&gt; E2 ## E1 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00701\"></a><span class=\"lineno\">  701</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,2,0&gt; E2 ## E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00702\"></a><span class=\"lineno\">  702</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,2,1&gt; E2 ## E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00703\"></a><span class=\"lineno\">  703</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,2,2&gt; E2 ## E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\">  704</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,2,3&gt; E2 ## E1 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00705\"></a><span class=\"lineno\">  705</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,3,0&gt; E2 ## E1 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00706\"></a><span class=\"lineno\">  706</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,3,1&gt; E2 ## E1 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00707\"></a><span class=\"lineno\">  707</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,3,2&gt; E2 ## E1 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00708\"></a><span class=\"lineno\">  708</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,1,3,3&gt; E2 ## E1 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00709\"></a><span class=\"lineno\">  709</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,0,0&gt; E2 ## E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,0,1&gt; E2 ## E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00711\"></a><span class=\"lineno\">  711</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,0,2&gt; E2 ## E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00712\"></a><span class=\"lineno\">  712</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,0,3&gt; E2 ## E2 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00713\"></a><span class=\"lineno\">  713</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,1,0&gt; E2 ## E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00714\"></a><span class=\"lineno\">  714</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,1,1&gt; E2 ## E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00715\"></a><span class=\"lineno\">  715</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,1,2&gt; E2 ## E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,1,3&gt; E2 ## E2 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,2,0&gt; E2 ## E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00718\"></a><span class=\"lineno\">  718</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,2,1&gt; E2 ## E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00719\"></a><span class=\"lineno\">  719</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,2,2&gt; E2 ## E2 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00720\"></a><span class=\"lineno\">  720</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,2,3&gt; E2 ## E2 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,3,0&gt; E2 ## E2 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00722\"></a><span class=\"lineno\">  722</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,3,1&gt; E2 ## E2 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00723\"></a><span class=\"lineno\">  723</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,3,2&gt; E2 ## E2 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,2,3,3&gt; E2 ## E2 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00725\"></a><span class=\"lineno\">  725</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,0,0&gt; E2 ## E3 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\">  726</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,0,1&gt; E2 ## E3 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00727\"></a><span class=\"lineno\">  727</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,0,2&gt; E2 ## E3 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00728\"></a><span class=\"lineno\">  728</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,0,3&gt; E2 ## E3 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\">  729</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,1,0&gt; E2 ## E3 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00730\"></a><span class=\"lineno\">  730</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,1,1&gt; E2 ## E3 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00731\"></a><span class=\"lineno\">  731</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,1,2&gt; E2 ## E3 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00732\"></a><span class=\"lineno\">  732</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,1,3&gt; E2 ## E3 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,2,0&gt; E2 ## E3 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00734\"></a><span class=\"lineno\">  734</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,2,1&gt; E2 ## E3 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00735\"></a><span class=\"lineno\">  735</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,2,2&gt; E2 ## E3 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,2,3&gt; E2 ## E3 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00737\"></a><span class=\"lineno\">  737</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,3,0&gt; E2 ## E3 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00738\"></a><span class=\"lineno\">  738</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,3,1&gt; E2 ## E3 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00739\"></a><span class=\"lineno\">  739</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,3,2&gt; E2 ## E3 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00740\"></a><span class=\"lineno\">  740</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 2,3,3,3&gt; E2 ## E3 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00741\"></a><span class=\"lineno\">  741</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,0,0&gt; E3 ## E0 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00742\"></a><span class=\"lineno\">  742</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,0,1&gt; E3 ## E0 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00743\"></a><span class=\"lineno\">  743</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,0,2&gt; E3 ## E0 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00744\"></a><span class=\"lineno\">  744</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,0,3&gt; E3 ## E0 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00745\"></a><span class=\"lineno\">  745</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,1,0&gt; E3 ## E0 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00746\"></a><span class=\"lineno\">  746</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,1,1&gt; E3 ## E0 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00747\"></a><span class=\"lineno\">  747</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,1,2&gt; E3 ## E0 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00748\"></a><span class=\"lineno\">  748</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,1,3&gt; E3 ## E0 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00749\"></a><span class=\"lineno\">  749</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,2,0&gt; E3 ## E0 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00750\"></a><span class=\"lineno\">  750</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,2,1&gt; E3 ## E0 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00751\"></a><span class=\"lineno\">  751</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,2,2&gt; E3 ## E0 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00752\"></a><span class=\"lineno\">  752</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,2,3&gt; E3 ## E0 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00753\"></a><span class=\"lineno\">  753</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,3,0&gt; E3 ## E0 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00754\"></a><span class=\"lineno\">  754</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,3,1&gt; E3 ## E0 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00755\"></a><span class=\"lineno\">  755</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,3,2&gt; E3 ## E0 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\">  756</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,0,3,3&gt; E3 ## E0 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00757\"></a><span class=\"lineno\">  757</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,0,0&gt; E3 ## E1 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00758\"></a><span class=\"lineno\">  758</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,0,1&gt; E3 ## E1 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00759\"></a><span class=\"lineno\">  759</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,0,2&gt; E3 ## E1 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00760\"></a><span class=\"lineno\">  760</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,0,3&gt; E3 ## E1 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00761\"></a><span class=\"lineno\">  761</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,1,0&gt; E3 ## E1 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00762\"></a><span class=\"lineno\">  762</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,1,1&gt; E3 ## E1 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00763\"></a><span class=\"lineno\">  763</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,1,2&gt; E3 ## E1 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00764\"></a><span class=\"lineno\">  764</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,1,3&gt; E3 ## E1 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00765\"></a><span class=\"lineno\">  765</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,2,0&gt; E3 ## E1 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00766\"></a><span class=\"lineno\">  766</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,2,1&gt; E3 ## E1 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00767\"></a><span class=\"lineno\">  767</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,2,2&gt; E3 ## E1 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00768\"></a><span class=\"lineno\">  768</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,2,3&gt; E3 ## E1 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00769\"></a><span class=\"lineno\">  769</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,3,0&gt; E3 ## E1 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00770\"></a><span class=\"lineno\">  770</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,3,1&gt; E3 ## E1 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00771\"></a><span class=\"lineno\">  771</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,3,2&gt; E3 ## E1 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00772\"></a><span class=\"lineno\">  772</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,1,3,3&gt; E3 ## E1 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\">  773</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,0,0&gt; E3 ## E2 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00774\"></a><span class=\"lineno\">  774</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,0,1&gt; E3 ## E2 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00775\"></a><span class=\"lineno\">  775</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,0,2&gt; E3 ## E2 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00776\"></a><span class=\"lineno\">  776</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,0,3&gt; E3 ## E2 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00777\"></a><span class=\"lineno\">  777</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,1,0&gt; E3 ## E2 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00778\"></a><span class=\"lineno\">  778</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,1,1&gt; E3 ## E2 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00779\"></a><span class=\"lineno\">  779</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,1,2&gt; E3 ## E2 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00780\"></a><span class=\"lineno\">  780</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,1,3&gt; E3 ## E2 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00781\"></a><span class=\"lineno\">  781</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,2,0&gt; E3 ## E2 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00782\"></a><span class=\"lineno\">  782</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,2,1&gt; E3 ## E2 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00783\"></a><span class=\"lineno\">  783</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,2,2&gt; E3 ## E2 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00784\"></a><span class=\"lineno\">  784</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,2,3&gt; E3 ## E2 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\">  785</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,3,0&gt; E3 ## E2 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00786\"></a><span class=\"lineno\">  786</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,3,1&gt; E3 ## E2 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00787\"></a><span class=\"lineno\">  787</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,3,2&gt; E3 ## E2 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00788\"></a><span class=\"lineno\">  788</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,2,3,3&gt; E3 ## E2 ## E3 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00789\"></a><span class=\"lineno\">  789</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,0,0&gt; E3 ## E3 ## E0 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,0,1&gt; E3 ## E3 ## E0 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00791\"></a><span class=\"lineno\">  791</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,0,2&gt; E3 ## E3 ## E0 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00792\"></a><span class=\"lineno\">  792</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,0,3&gt; E3 ## E3 ## E0 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00793\"></a><span class=\"lineno\">  793</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,1,0&gt; E3 ## E3 ## E1 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,1,1&gt; E3 ## E3 ## E1 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00795\"></a><span class=\"lineno\">  795</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,1,2&gt; E3 ## E3 ## E1 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00796\"></a><span class=\"lineno\">  796</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,1,3&gt; E3 ## E3 ## E1 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00797\"></a><span class=\"lineno\">  797</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,2,0&gt; E3 ## E3 ## E2 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00798\"></a><span class=\"lineno\">  798</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,2,1&gt; E3 ## E3 ## E2 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00799\"></a><span class=\"lineno\">  799</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,2,2&gt; E3 ## E3 ## E2 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00800\"></a><span class=\"lineno\">  800</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,2,3&gt; E3 ## E3 ## E2 ## E3; }; \\</span></div>\n<div class=\"line\"><a name=\"l00801\"></a><span class=\"lineno\">  801</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,3,0&gt; E3 ## E3 ## E3 ## E0; }; \\</span></div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\">  802</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,3,1&gt; E3 ## E3 ## E3 ## E1; }; \\</span></div>\n<div class=\"line\"><a name=\"l00803\"></a><span class=\"lineno\">  803</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,3,2&gt; E3 ## E3 ## E3 ## E2; }; \\</span></div>\n<div class=\"line\"><a name=\"l00804\"></a><span class=\"lineno\">  804</span>&#160;<span class=\"preprocessor\">        struct { detail::_swizzle&lt;4, T, Q, 3,3,3,3&gt; E3 ## E3 ## E3 ## E3; };</span></div>\n<div class=\"ttc\" id=\"a00290_html_ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><div class=\"ttname\"><a href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">glm::e</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType e()</div><div class=\"ttdoc\">Return e constant. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00005_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: _swizzle_func.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">_swizzle_func.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, CONST, A, B)   \\</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">        vec&lt;2, T, Q&gt; A ## B() CONST                                                     \\</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">        {                                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">                return vec&lt;2, T, Q&gt;(this-&gt;A, this-&gt;B);                  \\</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, CONST, A, B, C)                \\</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">        vec&lt;3, T, Q&gt; A ## B ## C() CONST                                                        \\</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">        {                                                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">                return vec&lt;3, T, Q&gt;(this-&gt;A, this-&gt;B, this-&gt;C);                 \\</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, CONST, A, B, C, D)                                     \\</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">        vec&lt;4, T, Q&gt; A ## B ## C ## D() CONST                                                                   \\</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">        {                                                                                                                                               \\</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">                return vec&lt;4, T, Q&gt;(this-&gt;A, this-&gt;B, this-&gt;C, this-&gt;D);                        \\</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(T, P, L, CONST, A, B)    \\</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">        template&lt;typename T&gt;                                                                            \\</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">        vec&lt;L, T, Q&gt; vec&lt;L, T, Q&gt;::A ## B() CONST                                       \\</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">        {                                                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">                return vec&lt;2, T, Q&gt;(this-&gt;A, this-&gt;B);                                  \\</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(T, P, L, CONST, A, B, C)         \\</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">        template&lt;typename T&gt;                                                                                    \\</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">        vec&lt;3, T, Q&gt; vec&lt;L, T, Q&gt;::A ## B ## C() CONST                                  \\</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">        {                                                                                                                               \\</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">                return vec&lt;3, T, Q&gt;(this-&gt;A, this-&gt;B, this-&gt;C);                         \\</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(T, P, L, CONST, A, B, C, D)              \\</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">        template&lt;typename T&gt;                                                                                            \\</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">        vec&lt;4, T, Q&gt; vec&lt;L, T, Q&gt;::A ## B ## C ## D() CONST                                     \\</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">        {                                                                                                                                       \\</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">                return vec&lt;4, T, Q&gt;(this-&gt;A, this-&gt;B, this-&gt;C, this-&gt;D);                \\</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#define GLM_MUTABLE</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, B, A)</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(T, P) \\</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, x, y) \\</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, r, g) \\</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, s, t)</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B)</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, B, A)</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C)</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, P) \\</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, x, y, z) \\</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, r, g, b) \\</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, s, t, p)</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, C)</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, B)</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, C, A)</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D)</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, P) \\</span></div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, x, y, z, w) \\</span></div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, r, g, b, a) \\</span></div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, s, t, p, q)</span></div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B)</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B)</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B)</span></div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B)</span></div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P)                     \\</span></div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, x, y)  \\</span></div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, r, g)  \\</span></div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, s, t)</span></div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C)</span></div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C)</span></div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C)</span></div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C)</span></div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P) \\</span></div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, x, y, z) \\</span></div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, r, g, b) \\</span></div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, s, t, p)</span></div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, D)</span></div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, D)</span></div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\">  524</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\">  528</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\">  533</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\">  536</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\">  541</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00544\"></a><span class=\"lineno\">  544</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\">  545</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\">  548</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\">  549</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\">  550</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\">  553</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\">  554</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\">  557</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00573\"></a><span class=\"lineno\">  573</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\">  574</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\">  580</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\">  584</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\">  585</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\">  592</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00605\"></a><span class=\"lineno\">  605</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\">  612</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00617\"></a><span class=\"lineno\">  617</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00624\"></a><span class=\"lineno\">  624</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\">  635</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\">  636</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\">  640</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\">  641</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\">  643</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\">  647</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00649\"></a><span class=\"lineno\">  649</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00652\"></a><span class=\"lineno\">  652</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\">  653</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, D) \\</span></div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, A) \\</span></div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, B) \\</span></div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\">  658</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, C) \\</span></div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, D) \\</span></div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, A) \\</span></div>\n<div class=\"line\"><a name=\"l00661\"></a><span class=\"lineno\">  661</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, B) \\</span></div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\">  662</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, C) \\</span></div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, D) \\</span></div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\">  664</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, A) \\</span></div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\">  665</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, B) \\</span></div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\">  666</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, C) \\</span></div>\n<div class=\"line\"><a name=\"l00667\"></a><span class=\"lineno\">  667</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\">  668</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, A) \\</span></div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, B) \\</span></div>\n<div class=\"line\"><a name=\"l00670\"></a><span class=\"lineno\">  670</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, C) \\</span></div>\n<div class=\"line\"><a name=\"l00671\"></a><span class=\"lineno\">  671</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, D)</span></div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;</div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\">  673</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\">  674</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\">  675</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\</span></div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D)</span></div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;</div>\n<div class=\"line\"><a name=\"l00678\"></a><span class=\"lineno\">  678</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P) \\</span></div>\n<div class=\"line\"><a name=\"l00679\"></a><span class=\"lineno\">  679</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, x, y, z, w) \\</span></div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, r, g, b, a) \\</span></div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;<span class=\"preprocessor\">        GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, s, t, p, q)</span></div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\">  682</span>&#160;</div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00006_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: _vectorize.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">_vectorize.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, length_t L, <span class=\"keyword\">typename</span> R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;        <span class=\"keyword\">struct </span>functor1{};</div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;        <span class=\"keyword\">struct </span>functor1&lt;vec, 1, R, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> vec&lt;1, R, Q&gt; call(R (*Func) (T x), vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;1, R, Q&gt;(Func(v.x));</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;        <span class=\"keyword\">struct </span>functor1&lt;vec, 2, R, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> vec&lt;2, R, Q&gt; call(R (*Func) (T x), vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;2, R, Q&gt;(Func(v.x), Func(v.y));</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;        <span class=\"keyword\">struct </span>functor1&lt;vec, 3, R, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> vec&lt;3, R, Q&gt; call(R (*Func) (T x), vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;3, R, Q&gt;(Func(v.x), Func(v.y), Func(v.z));</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">struct </span>functor1&lt;vec, 4, R, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> vec&lt;4, R, Q&gt; call(R (*Func) (T x), vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;4, R, Q&gt;(Func(v.x), Func(v.y), Func(v.z), Func(v.w));</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">struct </span>functor2{};</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">struct </span>functor2&lt;vec, 1, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;1, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; b)</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;1, T, Q&gt;(Func(a.x, b.x));</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">struct </span>functor2&lt;vec, 2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;2, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; b)</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;2, T, Q&gt;(Func(a.x, b.x), Func(a.y, b.y));</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        <span class=\"keyword\">struct </span>functor2&lt;vec, 3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;3, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; b)</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;3, T, Q&gt;(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">struct </span>functor2&lt;vec, 4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;4, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; b)</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;4, T, Q&gt;(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_sca{};</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_sca&lt;vec, 1, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;1, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, T b)</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;1, T, Q&gt;(Func(a.x, b));</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_sca&lt;vec, 2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;2, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, T b)</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;2, T, Q&gt;(Func(a.x, b), Func(a.y, b));</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_sca&lt;vec, 3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;3, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, T b)</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;3, T, Q&gt;(Func(a.x, b), Func(a.y, b), Func(a.z, b));</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt; <span class=\"keyword\">class </span>vec, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_sca&lt;vec, 4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;4, T, Q&gt; call(T (*Func) (T x, T y), vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, T b)</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;4, T, Q&gt;(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b));</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_int {};</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_int&lt;1, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;1, int, Q&gt; call(<span class=\"keywordtype\">int</span> (*Func) (T x, <span class=\"keywordtype\">int</span> y), vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;1, int, Q&gt; <span class=\"keyword\">const</span>&amp; b)</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;1, int, Q&gt;(Func(a.x, b.x));</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_int&lt;2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;2, int, Q&gt; call(<span class=\"keywordtype\">int</span> (*Func) (T x, <span class=\"keywordtype\">int</span> y), vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;2, int, Q&gt; <span class=\"keyword\">const</span>&amp; b)</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;2, int, Q&gt;(Func(a.x, b.x), Func(a.y, b.y));</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_int&lt;3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;3, int, Q&gt; call(<span class=\"keywordtype\">int</span> (*Func) (T x, <span class=\"keywordtype\">int</span> y), vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;3, int, Q&gt; <span class=\"keyword\">const</span>&amp; b)</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;3, int, Q&gt;(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        <span class=\"keyword\">struct </span>functor2_vec_int&lt;4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;                GLM_FUNC_QUALIFIER <span class=\"keyword\">static</span> vec&lt;4, int, Q&gt; call(<span class=\"keywordtype\">int</span> (*Func) (T x, <span class=\"keywordtype\">int</span> y), vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;4, int, Q&gt; <span class=\"keyword\">const</span>&amp; b)</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;                        <span class=\"keywordflow\">return</span> vec&lt;4, int, Q&gt;(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00007.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: associated_min_max.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">associated_min_max.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00308.html\">GLM_GTX_associated_min_max</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00007_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga7d9c8785230c8db60f72ec8975f1ba45\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:ga7d9c8785230c8db60f72ec8975f1ba45\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga7d9c8785230c8db60f72ec8975f1ba45\">associatedMax</a> (T x, U a, T y, U b)</td></tr>\n<tr class=\"memdesc:ga7d9c8785230c8db60f72ec8975f1ba45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga7d9c8785230c8db60f72ec8975f1ba45\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7d9c8785230c8db60f72ec8975f1ba45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c6758bc50aa7fbe700f87123a045aad\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5c6758bc50aa7fbe700f87123a045aad\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga5c6758bc50aa7fbe700f87123a045aad\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga5c6758bc50aa7fbe700f87123a045aad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga5c6758bc50aa7fbe700f87123a045aad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c6758bc50aa7fbe700f87123a045aad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0d169d6ce26b03248df175f39005d77f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0d169d6ce26b03248df175f39005d77f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga0d169d6ce26b03248df175f39005d77f\">associatedMax</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga0d169d6ce26b03248df175f39005d77f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga0d169d6ce26b03248df175f39005d77f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0d169d6ce26b03248df175f39005d77f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4086269afabcb81dd7ded33cb3448653\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4086269afabcb81dd7ded33cb3448653\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga4086269afabcb81dd7ded33cb3448653\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)</td></tr>\n<tr class=\"memdesc:ga4086269afabcb81dd7ded33cb3448653\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga4086269afabcb81dd7ded33cb3448653\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4086269afabcb81dd7ded33cb3448653\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec891e363d91abbf3a4443cf2f652209\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:gaec891e363d91abbf3a4443cf2f652209\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gaec891e363d91abbf3a4443cf2f652209\">associatedMax</a> (T x, U a, T y, U b, T z, U c)</td></tr>\n<tr class=\"memdesc:gaec891e363d91abbf3a4443cf2f652209\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#gaec891e363d91abbf3a4443cf2f652209\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec891e363d91abbf3a4443cf2f652209\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab84fdc35016a31e8cd0cbb8296bddf7c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab84fdc35016a31e8cd0cbb8296bddf7c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:gab84fdc35016a31e8cd0cbb8296bddf7c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c\">More...</a><br /></td></tr>\n<tr class=\"separator:gab84fdc35016a31e8cd0cbb8296bddf7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd2a2002f4f2144bbc39eb2336dd2fba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadd2a2002f4f2144bbc39eb2336dd2fba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba\">associatedMax</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:gadd2a2002f4f2144bbc39eb2336dd2fba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba\">More...</a><br /></td></tr>\n<tr class=\"separator:gadd2a2002f4f2144bbc39eb2336dd2fba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19f59d1141a51a3b2108a9807af78f7f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga19f59d1141a51a3b2108a9807af78f7f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga19f59d1141a51a3b2108a9807af78f7f\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c)</td></tr>\n<tr class=\"memdesc:ga19f59d1141a51a3b2108a9807af78f7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#ga19f59d1141a51a3b2108a9807af78f7f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga19f59d1141a51a3b2108a9807af78f7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3038ffcb43eaa6af75897a99a5047ccc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:ga3038ffcb43eaa6af75897a99a5047ccc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga3038ffcb43eaa6af75897a99a5047ccc\">associatedMax</a> (T x, U a, T y, U b, T z, U c, T w, U d)</td></tr>\n<tr class=\"memdesc:ga3038ffcb43eaa6af75897a99a5047ccc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga3038ffcb43eaa6af75897a99a5047ccc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3038ffcb43eaa6af75897a99a5047ccc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga11477c2c4b5b0bfd1b72b29df3725a9d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga11477c2c4b5b0bfd1b72b29df3725a9d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d\">associatedMax</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga11477c2c4b5b0bfd1b72b29df3725a9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga11477c2c4b5b0bfd1b72b29df3725a9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab9c3dd74cac899d2c625b5767ea3b3fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab9c3dd74cac899d2c625b5767ea3b3fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)</td></tr>\n<tr class=\"memdesc:gab9c3dd74cac899d2c625b5767ea3b3fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">More...</a><br /></td></tr>\n<tr class=\"separator:gab9c3dd74cac899d2c625b5767ea3b3fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacc01bd272359572fc28437ae214a02df\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacc01bd272359572fc28437ae214a02df\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gacc01bd272359572fc28437ae214a02df\">associatedMin</a> (T x, U a, T y, U b)</td></tr>\n<tr class=\"memdesc:gacc01bd272359572fc28437ae214a02df\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#gacc01bd272359572fc28437ae214a02df\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc01bd272359572fc28437ae214a02df\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac2f0dff90948f2e44386a5eafd941d1c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac2f0dff90948f2e44386a5eafd941d1c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gac2f0dff90948f2e44386a5eafd941d1c\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:gac2f0dff90948f2e44386a5eafd941d1c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#gac2f0dff90948f2e44386a5eafd941d1c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac2f0dff90948f2e44386a5eafd941d1c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacfec519c820331d023ef53a511749319\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacfec519c820331d023ef53a511749319\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gacfec519c820331d023ef53a511749319\">associatedMin</a> (T x, const vec&lt; L, U, Q &gt; &amp;a, T y, const vec&lt; L, U, Q &gt; &amp;b)</td></tr>\n<tr class=\"memdesc:gacfec519c820331d023ef53a511749319\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#gacfec519c820331d023ef53a511749319\">More...</a><br /></td></tr>\n<tr class=\"separator:gacfec519c820331d023ef53a511749319\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4757c7cab2d809124a8525d0a9deeb37\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4757c7cab2d809124a8525d0a9deeb37\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga4757c7cab2d809124a8525d0a9deeb37\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)</td></tr>\n<tr class=\"memdesc:ga4757c7cab2d809124a8525d0a9deeb37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga4757c7cab2d809124a8525d0a9deeb37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4757c7cab2d809124a8525d0a9deeb37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad0aa8f86259a26d839d34a3577a923fc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:gad0aa8f86259a26d839d34a3577a923fc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gad0aa8f86259a26d839d34a3577a923fc\">associatedMin</a> (T x, U a, T y, U b, T z, U c)</td></tr>\n<tr class=\"memdesc:gad0aa8f86259a26d839d34a3577a923fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#gad0aa8f86259a26d839d34a3577a923fc\">More...</a><br /></td></tr>\n<tr class=\"separator:gad0aa8f86259a26d839d34a3577a923fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga723e5411cebc7ffbd5c81ffeec61127d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga723e5411cebc7ffbd5c81ffeec61127d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:ga723e5411cebc7ffbd5c81ffeec61127d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga723e5411cebc7ffbd5c81ffeec61127d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga432224ebe2085eaa2b63a077ecbbbff6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:ga432224ebe2085eaa2b63a077ecbbbff6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga432224ebe2085eaa2b63a077ecbbbff6\">associatedMin</a> (T x, U a, T y, U b, T z, U c, T w, U d)</td></tr>\n<tr class=\"memdesc:ga432224ebe2085eaa2b63a077ecbbbff6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga432224ebe2085eaa2b63a077ecbbbff6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga432224ebe2085eaa2b63a077ecbbbff6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66b08118bc88f0494bcacb7cdb940556\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga66b08118bc88f0494bcacb7cdb940556\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga66b08118bc88f0494bcacb7cdb940556\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga66b08118bc88f0494bcacb7cdb940556\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga66b08118bc88f0494bcacb7cdb940556\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66b08118bc88f0494bcacb7cdb940556\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78c28fde1a7080fb7420bd88e68c6c68\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga78c28fde1a7080fb7420bd88e68c6c68\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68\">associatedMin</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga78c28fde1a7080fb7420bd88e68c6c68\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78c28fde1a7080fb7420bd88e68c6c68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2db7e351994baee78540a562d4bb6d3b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2db7e351994baee78540a562d4bb6d3b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)</td></tr>\n<tr class=\"memdesc:ga2db7e351994baee78540a562d4bb6d3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2db7e351994baee78540a562d4bb6d3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00308.html\">GLM_GTX_associated_min_max</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\ngtx_extented_min_max (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00007_source.html\">associated_min_max.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00007_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: associated_min_max.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">associated_min_max.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00007.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_associated_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_associated_min_max extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL U <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(T x, U a, T y, U b);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL vec&lt;2, U, Q&gt; <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                T x, <span class=\"keyword\">const</span> vec&lt;L, U, Q&gt;&amp; a,</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                T y, <span class=\"keyword\">const</span> vec&lt;L, U, Q&gt;&amp; b);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, U a,</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, U b);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        GLM_FUNC_DECL U <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                T x, U a,</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                T y, U b,</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                T z, U c);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b,</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; c);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL U <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                T x, U a,</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                T y, U b,</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                T z, U c,</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                T w, U d);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b,</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; c,</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; w, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; d);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                T x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                T y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b,</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                T z, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; c,</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                T w, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; d);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a>(</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, U a,</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, U b,</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z, U c,</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; w, U d);</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        GLM_FUNC_DECL U <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(T x, U a, T y, U b);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        GLM_FUNC_DECL vec&lt;2, U, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                T x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;                T y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, U a,</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, U b);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        GLM_FUNC_DECL U <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;                T x, U a,</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;                T y, U b,</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;                T z, U c);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b,</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; c);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;                T x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;                T y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b,</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;                T z, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; c);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, U a,</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, U b,</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z, U c);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        GLM_FUNC_DECL U <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;                T x, U a,</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;                T y, U b,</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;                T z, U c,</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;                T w, U d);</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b,</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; c,</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; w, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; d);</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;                T x, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;                T y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; b,</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;                T z, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; c,</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;                T w, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; d);</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        GLM_FUNC_DECL vec&lt;L, U, Q&gt; <a class=\"code\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a>(</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, U a,</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, U b,</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z, U c,</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; w, U d);</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;<span class=\"preprocessor\">#include &quot;associated_min_max.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00308_html_gab9c3dd74cac899d2c625b5767ea3b3fb\"><div class=\"ttname\"><a href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">glm::associatedMax</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, U, Q &gt; associatedMax(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)</div><div class=\"ttdoc\">Maximum comparison between 4 variables and returns 4 associated variable values. </div></div>\n<div class=\"ttc\" id=\"a00308_html_ga2db7e351994baee78540a562d4bb6d3b\"><div class=\"ttname\"><a href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">glm::associatedMin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, U, Q &gt; associatedMin(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)</div><div class=\"ttdoc\">Minimum comparison between 4 variables and returns 4 associated variable values. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00008.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: bit.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">bit.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00309.html\">GLM_GTX_bit</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00008_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0dcc8fe7c3d3ad60dea409281efa3d05\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga0dcc8fe7c3d3ad60dea409281efa3d05\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga0dcc8fe7c3d3ad60dea409281efa3d05\">highestBitValue</a> (genIUType Value)</td></tr>\n<tr class=\"separator:ga0dcc8fe7c3d3ad60dea409281efa3d05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga898ef075ccf809a1e480faab48fe96bf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga898ef075ccf809a1e480faab48fe96bf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga898ef075ccf809a1e480faab48fe96bf\">highestBitValue</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>\n<tr class=\"memdesc:ga898ef075ccf809a1e480faab48fe96bf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find the highest bit set to 1 in a integer variable and return its value.  <a href=\"a00309.html#ga898ef075ccf809a1e480faab48fe96bf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga898ef075ccf809a1e480faab48fe96bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ff6568089f3a9b67f5c30918855fc6f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga2ff6568089f3a9b67f5c30918855fc6f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga2ff6568089f3a9b67f5c30918855fc6f\">lowestBitValue</a> (genIUType Value)</td></tr>\n<tr class=\"separator:ga2ff6568089f3a9b67f5c30918855fc6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8cda2459871f574a0aecbe702ac93291\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga8cda2459871f574a0aecbe702ac93291\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga8cda2459871f574a0aecbe702ac93291\">powerOfTwoAbove</a> (genIUType Value)</td></tr>\n<tr class=\"memdesc:ga8cda2459871f574a0aecbe702ac93291\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value.  <a href=\"a00309.html#ga8cda2459871f574a0aecbe702ac93291\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8cda2459871f574a0aecbe702ac93291\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2bbded187c5febfefc1e524ba31b3fab\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2bbded187c5febfefc1e524ba31b3fab\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga2bbded187c5febfefc1e524ba31b3fab\">powerOfTwoAbove</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>\n<tr class=\"memdesc:ga2bbded187c5febfefc1e524ba31b3fab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value.  <a href=\"a00309.html#ga2bbded187c5febfefc1e524ba31b3fab\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2bbded187c5febfefc1e524ba31b3fab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3de7df63c589325101a2817a56f8e29d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga3de7df63c589325101a2817a56f8e29d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga3de7df63c589325101a2817a56f8e29d\">powerOfTwoBelow</a> (genIUType Value)</td></tr>\n<tr class=\"memdesc:ga3de7df63c589325101a2817a56f8e29d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value.  <a href=\"a00309.html#ga3de7df63c589325101a2817a56f8e29d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3de7df63c589325101a2817a56f8e29d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf78ddcc4152c051b2a21e68fecb10980\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf78ddcc4152c051b2a21e68fecb10980\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#gaf78ddcc4152c051b2a21e68fecb10980\">powerOfTwoBelow</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>\n<tr class=\"memdesc:gaf78ddcc4152c051b2a21e68fecb10980\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value.  <a href=\"a00309.html#gaf78ddcc4152c051b2a21e68fecb10980\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf78ddcc4152c051b2a21e68fecb10980\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f65973a5d2ea38c719e6a663149ead9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga5f65973a5d2ea38c719e6a663149ead9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga5f65973a5d2ea38c719e6a663149ead9\">powerOfTwoNearest</a> (genIUType Value)</td></tr>\n<tr class=\"memdesc:ga5f65973a5d2ea38c719e6a663149ead9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is the closet to the input value.  <a href=\"a00309.html#ga5f65973a5d2ea38c719e6a663149ead9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5f65973a5d2ea38c719e6a663149ead9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac87e65d11e16c3d6b91c3bcfaef7da0b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac87e65d11e16c3d6b91c3bcfaef7da0b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b\">powerOfTwoNearest</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>\n<tr class=\"memdesc:gac87e65d11e16c3d6b91c3bcfaef7da0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is the closet to the input value.  <a href=\"a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b\">More...</a><br /></td></tr>\n<tr class=\"separator:gac87e65d11e16c3d6b91c3bcfaef7da0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00309.html\">GLM_GTX_bit</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00008_source.html\">bit.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00008_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: bit.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">bit.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00008.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/bitfield.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_bit is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_bit extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00309.html#ga898ef075ccf809a1e480faab48fe96bf\">highestBitValue</a>(genIUType Value);</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00309.html#ga2ff6568089f3a9b67f5c30918855fc6f\">lowestBitValue</a>(genIUType Value);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00309.html#ga898ef075ccf809a1e480faab48fe96bf\">highestBitValue</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; value);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_DEPRECATED GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00309.html#ga2bbded187c5febfefc1e524ba31b3fab\">powerOfTwoAbove</a>(genIUType Value);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_DEPRECATED GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00309.html#ga2bbded187c5febfefc1e524ba31b3fab\">powerOfTwoAbove</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; value);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_DEPRECATED GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00309.html#gaf78ddcc4152c051b2a21e68fecb10980\">powerOfTwoBelow</a>(genIUType Value);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        GLM_DEPRECATED GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00309.html#gaf78ddcc4152c051b2a21e68fecb10980\">powerOfTwoBelow</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; value);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        GLM_DEPRECATED GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b\">powerOfTwoNearest</a>(genIUType Value);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;        GLM_DEPRECATED GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b\">powerOfTwoNearest</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; value);</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;<span class=\"preprocessor\">#include &quot;bit.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"ttc\" id=\"a00309_html_ga898ef075ccf809a1e480faab48fe96bf\"><div class=\"ttname\"><a href=\"a00309.html#ga898ef075ccf809a1e480faab48fe96bf\">glm::highestBitValue</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; highestBitValue(vec&lt; L, T, Q &gt; const &amp;value)</div><div class=\"ttdoc\">Find the highest bit set to 1 in a integer variable and return its value. </div></div>\n<div class=\"ttc\" id=\"a00309_html_gaf78ddcc4152c051b2a21e68fecb10980\"><div class=\"ttname\"><a href=\"a00309.html#gaf78ddcc4152c051b2a21e68fecb10980\">glm::powerOfTwoBelow</a></div><div class=\"ttdeci\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt; powerOfTwoBelow(vec&lt; L, T, Q &gt; const &amp;value)</div><div class=\"ttdoc\">Return the power of two number which value is just lower the input value. </div></div>\n<div class=\"ttc\" id=\"a00309_html_ga2bbded187c5febfefc1e524ba31b3fab\"><div class=\"ttname\"><a href=\"a00309.html#ga2bbded187c5febfefc1e524ba31b3fab\">glm::powerOfTwoAbove</a></div><div class=\"ttdeci\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt; powerOfTwoAbove(vec&lt; L, T, Q &gt; const &amp;value)</div><div class=\"ttdoc\">Return the power of two number which value is just higher the input value. </div></div>\n<div class=\"ttc\" id=\"a00309_html_gac87e65d11e16c3d6b91c3bcfaef7da0b\"><div class=\"ttname\"><a href=\"a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b\">glm::powerOfTwoNearest</a></div><div class=\"ttdeci\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt; powerOfTwoNearest(vec&lt; L, T, Q &gt; const &amp;value)</div><div class=\"ttdoc\">Return the power of two number which value is the closet to the input value. </div></div>\n<div class=\"ttc\" id=\"a00309_html_ga2ff6568089f3a9b67f5c30918855fc6f\"><div class=\"ttname\"><a href=\"a00309.html#ga2ff6568089f3a9b67f5c30918855fc6f\">glm::lowestBitValue</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genIUType lowestBitValue(genIUType Value)</div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00009.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: bitfield.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">bitfield.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00288.html\">GLM_GTC_bitfield</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00009_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga091d934233a2e121df91b8c7230357c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga091d934233a2e121df91b8c7230357c8\">bitfieldDeinterleave</a> (<a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">glm::uint16</a> x)</td></tr>\n<tr class=\"memdesc:ga091d934233a2e121df91b8c7230357c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Deinterleaves the bits of x.  <a href=\"a00288.html#ga091d934233a2e121df91b8c7230357c8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga091d934233a2e121df91b8c7230357c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7d1cc24dfbcdd932c3a2abbb76235f98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98\">bitfieldDeinterleave</a> (<a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">glm::uint32</a> x)</td></tr>\n<tr class=\"memdesc:ga7d1cc24dfbcdd932c3a2abbb76235f98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Deinterleaves the bits of x.  <a href=\"a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7d1cc24dfbcdd932c3a2abbb76235f98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8dbb8c87092f33bd815dd8a840be5d60\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60\">bitfieldDeinterleave</a> (<a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">glm::uint64</a> x)</td></tr>\n<tr class=\"memdesc:ga8dbb8c87092f33bd815dd8a840be5d60\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Deinterleaves the bits of x.  <a href=\"a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8dbb8c87092f33bd815dd8a840be5d60\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46f9295abe3b5c7658f5b13c7f819f0a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga46f9295abe3b5c7658f5b13c7f819f0a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga46f9295abe3b5c7658f5b13c7f819f0a\">bitfieldFillOne</a> (genIUType Value, int FirstBit, int BitCount)</td></tr>\n<tr class=\"memdesc:ga46f9295abe3b5c7658f5b13c7f819f0a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 1 a range of bits.  <a href=\"a00288.html#ga46f9295abe3b5c7658f5b13c7f819f0a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga46f9295abe3b5c7658f5b13c7f819f0a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e96dd1f0a4bc892f063251ed118c0c1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3e96dd1f0a4bc892f063251ed118c0c1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1\">bitfieldFillOne</a> (vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)</td></tr>\n<tr class=\"memdesc:ga3e96dd1f0a4bc892f063251ed118c0c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 1 a range of bits.  <a href=\"a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e96dd1f0a4bc892f063251ed118c0c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga697b86998b7d74ee0a69d8e9f8819fee\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga697b86998b7d74ee0a69d8e9f8819fee\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga697b86998b7d74ee0a69d8e9f8819fee\">bitfieldFillZero</a> (genIUType Value, int FirstBit, int BitCount)</td></tr>\n<tr class=\"memdesc:ga697b86998b7d74ee0a69d8e9f8819fee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 0 a range of bits.  <a href=\"a00288.html#ga697b86998b7d74ee0a69d8e9f8819fee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga697b86998b7d74ee0a69d8e9f8819fee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0d16c9acef4be79ea9b47c082a0cf7c2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0d16c9acef4be79ea9b47c082a0cf7c2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2\">bitfieldFillZero</a> (vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)</td></tr>\n<tr class=\"memdesc:ga0d16c9acef4be79ea9b47c082a0cf7c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 0 a range of bits.  <a href=\"a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0d16c9acef4be79ea9b47c082a0cf7c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24cad0069f9a0450abd80b3e89501adf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga24cad0069f9a0450abd80b3e89501adf\">bitfieldInterleave</a> (int8 x, int8 y)</td></tr>\n<tr class=\"memdesc:ga24cad0069f9a0450abd80b3e89501adf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga24cad0069f9a0450abd80b3e89501adf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga24cad0069f9a0450abd80b3e89501adf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a4976a529aec2cee56525e1165da484\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga9a4976a529aec2cee56525e1165da484\">bitfieldInterleave</a> (uint8 x, uint8 y)</td></tr>\n<tr class=\"memdesc:ga9a4976a529aec2cee56525e1165da484\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga9a4976a529aec2cee56525e1165da484\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9a4976a529aec2cee56525e1165da484\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a76bbca39c40153f3203d0a1926e142\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga4a76bbca39c40153f3203d0a1926e142\">bitfieldInterleave</a> (u8vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4a76bbca39c40153f3203d0a1926e142\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga4a76bbca39c40153f3203d0a1926e142\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a76bbca39c40153f3203d0a1926e142\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac51c33a394593f0631fa3aa5bb778809\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gac51c33a394593f0631fa3aa5bb778809\">bitfieldInterleave</a> (int16 x, int16 y)</td></tr>\n<tr class=\"memdesc:gac51c33a394593f0631fa3aa5bb778809\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#gac51c33a394593f0631fa3aa5bb778809\">More...</a><br /></td></tr>\n<tr class=\"separator:gac51c33a394593f0631fa3aa5bb778809\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94f3646a5667f4be56f8dcf3310e963f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga94f3646a5667f4be56f8dcf3310e963f\">bitfieldInterleave</a> (uint16 x, uint16 y)</td></tr>\n<tr class=\"memdesc:ga94f3646a5667f4be56f8dcf3310e963f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga94f3646a5667f4be56f8dcf3310e963f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94f3646a5667f4be56f8dcf3310e963f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga406c4ee56af4ca37a73f449f154eca3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga406c4ee56af4ca37a73f449f154eca3e\">bitfieldInterleave</a> (u16vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga406c4ee56af4ca37a73f449f154eca3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga406c4ee56af4ca37a73f449f154eca3e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga406c4ee56af4ca37a73f449f154eca3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebb756a24a0784e3d6fba8bd011ab77a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gaebb756a24a0784e3d6fba8bd011ab77a\">bitfieldInterleave</a> (int32 x, int32 y)</td></tr>\n<tr class=\"memdesc:gaebb756a24a0784e3d6fba8bd011ab77a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#gaebb756a24a0784e3d6fba8bd011ab77a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaebb756a24a0784e3d6fba8bd011ab77a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f1e2b3fe699e7d897ae38b2115ddcbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd\">bitfieldInterleave</a> (uint32 x, uint32 y)</td></tr>\n<tr class=\"memdesc:ga2f1e2b3fe699e7d897ae38b2115ddcbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f1e2b3fe699e7d897ae38b2115ddcbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8cb17574d60abd6ade84bc57c10e8f78\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78\">bitfieldInterleave</a> (u32vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8cb17574d60abd6ade84bc57c10e8f78\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8cb17574d60abd6ade84bc57c10e8f78\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8fdb724dccd4a07d57efc01147102137\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga8fdb724dccd4a07d57efc01147102137\">bitfieldInterleave</a> (int8 x, int8 y, int8 z)</td></tr>\n<tr class=\"memdesc:ga8fdb724dccd4a07d57efc01147102137\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#ga8fdb724dccd4a07d57efc01147102137\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8fdb724dccd4a07d57efc01147102137\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9fc2a0dd5dcf8b00e113f272a5feca93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga9fc2a0dd5dcf8b00e113f272a5feca93\">bitfieldInterleave</a> (uint8 x, uint8 y, uint8 z)</td></tr>\n<tr class=\"memdesc:ga9fc2a0dd5dcf8b00e113f272a5feca93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#ga9fc2a0dd5dcf8b00e113f272a5feca93\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9fc2a0dd5dcf8b00e113f272a5feca93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa901c36a842fa5d126ea650549f17b24\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gaa901c36a842fa5d126ea650549f17b24\">bitfieldInterleave</a> (int16 x, int16 y, int16 z)</td></tr>\n<tr class=\"memdesc:gaa901c36a842fa5d126ea650549f17b24\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#gaa901c36a842fa5d126ea650549f17b24\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa901c36a842fa5d126ea650549f17b24\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3afd6d38881fe3948c53d4214d2197fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga3afd6d38881fe3948c53d4214d2197fd\">bitfieldInterleave</a> (uint16 x, uint16 y, uint16 z)</td></tr>\n<tr class=\"memdesc:ga3afd6d38881fe3948c53d4214d2197fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#ga3afd6d38881fe3948c53d4214d2197fd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3afd6d38881fe3948c53d4214d2197fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad2075d96a6640121edaa98ea534102ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gad2075d96a6640121edaa98ea534102ca\">bitfieldInterleave</a> (int32 x, int32 y, int32 z)</td></tr>\n<tr class=\"memdesc:gad2075d96a6640121edaa98ea534102ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#gad2075d96a6640121edaa98ea534102ca\">More...</a><br /></td></tr>\n<tr class=\"separator:gad2075d96a6640121edaa98ea534102ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab19fbc739fc0cf7247978602c36f7da8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gab19fbc739fc0cf7247978602c36f7da8\">bitfieldInterleave</a> (uint32 x, uint32 y, uint32 z)</td></tr>\n<tr class=\"memdesc:gab19fbc739fc0cf7247978602c36f7da8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#gab19fbc739fc0cf7247978602c36f7da8\">More...</a><br /></td></tr>\n<tr class=\"separator:gab19fbc739fc0cf7247978602c36f7da8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a44ae22f5c953b296c42d067dccbe6d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga8a44ae22f5c953b296c42d067dccbe6d\">bitfieldInterleave</a> (int8 x, int8 y, int8 z, int8 w)</td></tr>\n<tr class=\"memdesc:ga8a44ae22f5c953b296c42d067dccbe6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y, z and w.  <a href=\"a00288.html#ga8a44ae22f5c953b296c42d067dccbe6d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8a44ae22f5c953b296c42d067dccbe6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14bb274d54a3c26f4919dd7ed0dd0c36\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga14bb274d54a3c26f4919dd7ed0dd0c36\">bitfieldInterleave</a> (uint8 x, uint8 y, uint8 z, uint8 w)</td></tr>\n<tr class=\"memdesc:ga14bb274d54a3c26f4919dd7ed0dd0c36\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y, z and w.  <a href=\"a00288.html#ga14bb274d54a3c26f4919dd7ed0dd0c36\">More...</a><br /></td></tr>\n<tr class=\"separator:ga14bb274d54a3c26f4919dd7ed0dd0c36\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga180a63161e1319fbd5a53c84d0429c7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga180a63161e1319fbd5a53c84d0429c7a\">bitfieldInterleave</a> (int16 x, int16 y, int16 z, int16 w)</td></tr>\n<tr class=\"memdesc:ga180a63161e1319fbd5a53c84d0429c7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y, z and w.  <a href=\"a00288.html#ga180a63161e1319fbd5a53c84d0429c7a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga180a63161e1319fbd5a53c84d0429c7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafca8768671a14c8016facccb66a89f26\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a> (uint16 x, uint16 y, uint16 z, uint16 w)</td></tr>\n<tr class=\"memdesc:gafca8768671a14c8016facccb66a89f26\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y, z and w.  <a href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">More...</a><br /></td></tr>\n<tr class=\"separator:gafca8768671a14c8016facccb66a89f26\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2eb49678a344ce1495bdb5586d9896b9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga2eb49678a344ce1495bdb5586d9896b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga2eb49678a344ce1495bdb5586d9896b9\">bitfieldRotateLeft</a> (genIUType In, int Shift)</td></tr>\n<tr class=\"memdesc:ga2eb49678a344ce1495bdb5586d9896b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate all bits to the left.  <a href=\"a00288.html#ga2eb49678a344ce1495bdb5586d9896b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2eb49678a344ce1495bdb5586d9896b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae186317091b1a39214ebf79008d44a1e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae186317091b1a39214ebf79008d44a1e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gae186317091b1a39214ebf79008d44a1e\">bitfieldRotateLeft</a> (vec&lt; L, T, Q &gt; const &amp;In, int Shift)</td></tr>\n<tr class=\"memdesc:gae186317091b1a39214ebf79008d44a1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate all bits to the left.  <a href=\"a00288.html#gae186317091b1a39214ebf79008d44a1e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae186317091b1a39214ebf79008d44a1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1c33d075c5fb8bd8dbfd5092bfc851ca\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga1c33d075c5fb8bd8dbfd5092bfc851ca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca\">bitfieldRotateRight</a> (genIUType In, int Shift)</td></tr>\n<tr class=\"memdesc:ga1c33d075c5fb8bd8dbfd5092bfc851ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate all bits to the right.  <a href=\"a00288.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1c33d075c5fb8bd8dbfd5092bfc851ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88\">bitfieldRotateRight</a> (vec&lt; L, T, Q &gt; const &amp;In, int Shift)</td></tr>\n<tr class=\"memdesc:ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate all bits to the right.  <a href=\"a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88\">More...</a><br /></td></tr>\n<tr class=\"separator:ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7eba518a0b71662114571ee76939f8a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gad7eba518a0b71662114571ee76939f8a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gad7eba518a0b71662114571ee76939f8a\">mask</a> (genIUType Bits)</td></tr>\n<tr class=\"memdesc:gad7eba518a0b71662114571ee76939f8a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a mask of 'count' bits.  <a href=\"a00288.html#gad7eba518a0b71662114571ee76939f8a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7eba518a0b71662114571ee76939f8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e64e3b922a296033b825311e7f5fff1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2e64e3b922a296033b825311e7f5fff1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga2e64e3b922a296033b825311e7f5fff1\">mask</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2e64e3b922a296033b825311e7f5fff1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a mask of 'count' bits.  <a href=\"a00288.html#ga2e64e3b922a296033b825311e7f5fff1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e64e3b922a296033b825311e7f5fff1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00288.html\">GLM_GTC_bitfield</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00009_source.html\">bitfield.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00009_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: bitfield.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">bitfield.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00009.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_int_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_uint_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/_vectorize.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00174.html\">type_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_bitfield extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00288.html#ga2e64e3b922a296033b825311e7f5fff1\">mask</a>(genIUType Bits);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00288.html#ga2e64e3b922a296033b825311e7f5fff1\">mask</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88\">bitfieldRotateRight</a>(genIUType In, <span class=\"keywordtype\">int</span> Shift);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88\">bitfieldRotateRight</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; In, <span class=\"keywordtype\">int</span> Shift);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00288.html#gae186317091b1a39214ebf79008d44a1e\">bitfieldRotateLeft</a>(genIUType In, <span class=\"keywordtype\">int</span> Shift);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00288.html#gae186317091b1a39214ebf79008d44a1e\">bitfieldRotateLeft</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; In, <span class=\"keywordtype\">int</span> Shift);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1\">bitfieldFillOne</a>(genIUType Value, <span class=\"keywordtype\">int</span> FirstBit, <span class=\"keywordtype\">int</span> BitCount);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1\">bitfieldFillOne</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Value, <span class=\"keywordtype\">int</span> FirstBit, <span class=\"keywordtype\">int</span> BitCount);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2\">bitfieldFillZero</a>(genIUType Value, <span class=\"keywordtype\">int</span> FirstBit, <span class=\"keywordtype\">int</span> BitCount);</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2\">bitfieldFillZero</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Value, <span class=\"keywordtype\">int</span> FirstBit, <span class=\"keywordtype\">int</span> BitCount);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL int16 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(int8 x, int8 y);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(uint8 x, uint8 y);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(<a class=\"code\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a> <a class=\"code\" href=\"a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60\">bitfieldDeinterleave</a>(<a class=\"code\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">glm::uint16</a> x);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        GLM_FUNC_DECL int32 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(int16 x, int16 y);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(uint16 x, uint16 y);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(<a class=\"code\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a> <a class=\"code\" href=\"a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60\">bitfieldDeinterleave</a>(<a class=\"code\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">glm::uint32</a> x);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(int32 x, int32 y);</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(uint32 x, uint32 y);</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(<a class=\"code\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a> <a class=\"code\" href=\"a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60\">bitfieldDeinterleave</a>(<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">glm::uint64</a> x);</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        GLM_FUNC_DECL int32 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(int8 x, int8 y, int8 z);</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(uint8 x, uint8 y, uint8 z);</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(int16 x, int16 y, int16 z);</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(uint16 x, uint16 y, uint16 z);</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(int32 x, int32 y, int32 z);</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(uint32 x, uint32 y, uint32 z);</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;        GLM_FUNC_DECL int32 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(int8 x, int8 y, int8 z, int8 w);</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(uint8 x, uint8 y, uint8 z, uint8 w);</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(int16 x, int16 y, int16 z, int16 w);</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a>(uint16 x, uint16 y, uint16 z, uint16 w);</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;<span class=\"preprocessor\">#include &quot;bitfield.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00263_html_ga1134b580f8da4de94ca6b1de4d37975e\"><div class=\"ttname\"><a href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">glm::uint32</a></div><div class=\"ttdeci\">detail::uint32 uint32</div><div class=\"ttdoc\">32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00151_source.html#l00064\">scalar_uint_sized.hpp:64</a></div></div>\n<div class=\"ttc\" id=\"a00288_html_gafca8768671a14c8016facccb66a89f26\"><div class=\"ttname\"><a href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">glm::bitfieldInterleave</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w)</div><div class=\"ttdoc\">Interleaves the bits of x, y, z and w. </div></div>\n<div class=\"ttc\" id=\"a00288_html_ga8dbb8c87092f33bd815dd8a840be5d60\"><div class=\"ttname\"><a href=\"a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60\">glm::bitfieldDeinterleave</a></div><div class=\"ttdeci\">GLM_FUNC_DECL glm::u32vec2 bitfieldDeinterleave(glm::uint64 x)</div><div class=\"ttdoc\">Deinterleaves the bits of x. </div></div>\n<div class=\"ttc\" id=\"a00288_html_ga0d16c9acef4be79ea9b47c082a0cf7c2\"><div class=\"ttname\"><a href=\"a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2\">glm::bitfieldFillZero</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldFillZero(vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)</div><div class=\"ttdoc\">Set to 0 a range of bits. </div></div>\n<div class=\"ttc\" id=\"a00263_html_ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"><div class=\"ttname\"><a href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">glm::uint16</a></div><div class=\"ttdeci\">detail::uint16 uint16</div><div class=\"ttdoc\">16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00151_source.html#l00061\">scalar_uint_sized.hpp:61</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga518b8d948a6b4ddb72f84d5c3b7b6611\"><div class=\"ttname\"><a href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, defaultp &gt; u8vec2</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00340\">fwd.hpp:340</a></div></div>\n<div class=\"ttc\" id=\"a00288_html_gae186317091b1a39214ebf79008d44a1e\"><div class=\"ttname\"><a href=\"a00288.html#gae186317091b1a39214ebf79008d44a1e\">glm::bitfieldRotateLeft</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldRotateLeft(vec&lt; L, T, Q &gt; const &amp;In, int Shift)</div><div class=\"ttdoc\">Rotate all bits to the left. </div></div>\n<div class=\"ttc\" id=\"a00288_html_ga2e64e3b922a296033b825311e7f5fff1\"><div class=\"ttname\"><a href=\"a00288.html#ga2e64e3b922a296033b825311e7f5fff1\">glm::mask</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; mask(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a mask of &#39;count&#39; bits. </div></div>\n<div class=\"ttc\" id=\"a00263_html_gab630f76c26b50298187f7889104d4b9c\"><div class=\"ttname\"><a href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">glm::uint64</a></div><div class=\"ttdeci\">detail::uint64 uint64</div><div class=\"ttdoc\">64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00151_source.html#l00067\">scalar_uint_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00288_html_ga3e96dd1f0a4bc892f063251ed118c0c1\"><div class=\"ttname\"><a href=\"a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1\">glm::bitfieldFillOne</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldFillOne(vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)</div><div class=\"ttdoc\">Set to 1 a range of bits. </div></div>\n<div class=\"ttc\" id=\"a00174_html\"><div class=\"ttname\"><a href=\"a00174.html\">type_precision.hpp</a></div><div class=\"ttdoc\">GLM_GTC_type_precision </div></div>\n<div class=\"ttc\" id=\"a00260_html_gaff5189f97f9e842d9636a0f240001b2e\"><div class=\"ttname\"><a href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">glm::int64</a></div><div class=\"ttdeci\">detail::int64 int64</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00146_source.html#l00067\">scalar_int_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a266e46ee218d0c680f12b35c500cc0\"><div class=\"ttname\"><a href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, defaultp &gt; u32vec2</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00380\">fwd.hpp:380</a></div></div>\n<div class=\"ttc\" id=\"a00288_html_ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><div class=\"ttname\"><a href=\"a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88\">glm::bitfieldRotateRight</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldRotateRight(vec&lt; L, T, Q &gt; const &amp;In, int Shift)</div><div class=\"ttdoc\">Rotate all bits to the right. </div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a78447eb9d66a114b193f4a25899c16\"><div class=\"ttname\"><a href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, defaultp &gt; u16vec2</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00360\">fwd.hpp:360</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00010.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: closest_point.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">closest_point.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00310.html\">GLM_GTX_closest_point</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00010_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga36529c278ef716986151d58d151d697d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga36529c278ef716986151d58d151d697d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00310.html#ga36529c278ef716986151d58d151d697d\">closestPointOnLine</a> (vec&lt; 3, T, Q &gt; const &amp;point, vec&lt; 3, T, Q &gt; const &amp;a, vec&lt; 3, T, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga36529c278ef716986151d58d151d697d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find the point on a straight line which is the closet of a point.  <a href=\"a00310.html#ga36529c278ef716986151d58d151d697d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga36529c278ef716986151d58d151d697d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\">closestPointOnLine</a> (vec&lt; 2, T, Q &gt; const &amp;point, vec&lt; 2, T, Q &gt; const &amp;a, vec&lt; 2, T, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2d lines work as well <br /></td></tr>\n<tr class=\"separator:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00310.html\">GLM_GTX_closest_point</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00010_source.html\">closest_point.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00010_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: closest_point.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">closest_point.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00010.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_closest_point extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\">closestPointOnLine</a>(</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; point,</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; b);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\">closestPointOnLine</a>(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; point,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; a,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; b);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#include &quot;closest_point.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00310_html_ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><div class=\"ttname\"><a href=\"a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\">glm::closestPointOnLine</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt; closestPointOnLine(vec&lt; 2, T, Q &gt; const &amp;point, vec&lt; 2, T, Q &gt; const &amp;a, vec&lt; 2, T, Q &gt; const &amp;b)</div><div class=\"ttdoc\">2d lines work as well </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00011.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: color_encoding.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">color_encoding.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00311.html\">GLM_GTX_color_encoding</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00011_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad12f4f65022b2c80e33fcba2ced0dc48\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gad12f4f65022b2c80e33fcba2ced0dc48\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad12f4f65022b2c80e33fcba2ced0dc48\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48\">convertD65XYZToD50XYZ</a> (vec&lt; 3, T, Q &gt; const &amp;ColorD65XYZ)</td></tr>\n<tr class=\"memdesc:gad12f4f65022b2c80e33fcba2ced0dc48\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a D65 YUV color to D50 YUV. <br /></td></tr>\n<tr class=\"separator:gad12f4f65022b2c80e33fcba2ced0dc48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5265386fc3ac29e4c580d37ed470859c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga5265386fc3ac29e4c580d37ed470859c\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5265386fc3ac29e4c580d37ed470859c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html#ga5265386fc3ac29e4c580d37ed470859c\">convertD65XYZToLinearSRGB</a> (vec&lt; 3, T, Q &gt; const &amp;ColorD65XYZ)</td></tr>\n<tr class=\"memdesc:ga5265386fc3ac29e4c580d37ed470859c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a D65 YUV color to linear sRGB. <br /></td></tr>\n<tr class=\"separator:ga5265386fc3ac29e4c580d37ed470859c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1522ba180e3d83d554a734056da031f9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga1522ba180e3d83d554a734056da031f9\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1522ba180e3d83d554a734056da031f9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html#ga1522ba180e3d83d554a734056da031f9\">convertLinearSRGBToD50XYZ</a> (vec&lt; 3, T, Q &gt; const &amp;ColorLinearSRGB)</td></tr>\n<tr class=\"memdesc:ga1522ba180e3d83d554a734056da031f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a linear sRGB color to D50 YUV. <br /></td></tr>\n<tr class=\"separator:ga1522ba180e3d83d554a734056da031f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf9e130d9d4ccf51cc99317de7449f369\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaf9e130d9d4ccf51cc99317de7449f369\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf9e130d9d4ccf51cc99317de7449f369\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html#gaf9e130d9d4ccf51cc99317de7449f369\">convertLinearSRGBToD65XYZ</a> (vec&lt; 3, T, Q &gt; const &amp;ColorLinearSRGB)</td></tr>\n<tr class=\"memdesc:gaf9e130d9d4ccf51cc99317de7449f369\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a linear sRGB color to D65 YUV. <br /></td></tr>\n<tr class=\"separator:gaf9e130d9d4ccf51cc99317de7449f369\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00311.html\">GLM_GTX_color_encoding</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00311.html\" title=\"Include <glm/gtx/color_encoding.hpp> to use the features of this extension. \">GLM_GTX_color_encoding</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00011_source.html\">color_encoding.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00011_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: color_encoding.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">color_encoding.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00011.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTC_color_encoding is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTC_color_encoding extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00311.html#gaf9e130d9d4ccf51cc99317de7449f369\">convertLinearSRGBToD65XYZ</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; ColorLinearSRGB);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00311.html#ga1522ba180e3d83d554a734056da031f9\">convertLinearSRGBToD50XYZ</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; ColorLinearSRGB);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00311.html#ga5265386fc3ac29e4c580d37ed470859c\">convertD65XYZToLinearSRGB</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; ColorD65XYZ);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48\">convertD65XYZToD50XYZ</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; ColorD65XYZ);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">#include &quot;color_encoding.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00311_html_ga5265386fc3ac29e4c580d37ed470859c\"><div class=\"ttname\"><a href=\"a00311.html#ga5265386fc3ac29e4c580d37ed470859c\">glm::convertD65XYZToLinearSRGB</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; convertD65XYZToLinearSRGB(vec&lt; 3, T, Q &gt; const &amp;ColorD65XYZ)</div><div class=\"ttdoc\">Convert a D65 YUV color to linear sRGB. </div></div>\n<div class=\"ttc\" id=\"a00311_html_ga1522ba180e3d83d554a734056da031f9\"><div class=\"ttname\"><a href=\"a00311.html#ga1522ba180e3d83d554a734056da031f9\">glm::convertLinearSRGBToD50XYZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; convertLinearSRGBToD50XYZ(vec&lt; 3, T, Q &gt; const &amp;ColorLinearSRGB)</div><div class=\"ttdoc\">Convert a linear sRGB color to D50 YUV. </div></div>\n<div class=\"ttc\" id=\"a00311_html_gaf9e130d9d4ccf51cc99317de7449f369\"><div class=\"ttname\"><a href=\"a00311.html#gaf9e130d9d4ccf51cc99317de7449f369\">glm::convertLinearSRGBToD65XYZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; convertLinearSRGBToD65XYZ(vec&lt; 3, T, Q &gt; const &amp;ColorLinearSRGB)</div><div class=\"ttdoc\">Convert a linear sRGB color to D65 YUV. </div></div>\n<div class=\"ttc\" id=\"a00311_html_gad12f4f65022b2c80e33fcba2ced0dc48\"><div class=\"ttname\"><a href=\"a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48\">glm::convertD65XYZToD50XYZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; convertD65XYZToD50XYZ(vec&lt; 3, T, Q &gt; const &amp;ColorD65XYZ)</div><div class=\"ttdoc\">Convert a D65 YUV color to D50 YUV. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00012.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: color_space.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/color_space.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00289.html\">GLM_GTC_color_space</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00012_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga42239e7b3da900f7ef37cec7e2476579\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga42239e7b3da900f7ef37cec7e2476579\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html#ga42239e7b3da900f7ef37cec7e2476579\">convertLinearToSRGB</a> (vec&lt; L, T, Q &gt; const &amp;ColorLinear)</td></tr>\n<tr class=\"memdesc:ga42239e7b3da900f7ef37cec7e2476579\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a linear color to sRGB color using a standard gamma correction.  <a href=\"a00289.html#ga42239e7b3da900f7ef37cec7e2476579\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42239e7b3da900f7ef37cec7e2476579\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaace0a21167d13d26116c283009af57f6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaace0a21167d13d26116c283009af57f6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html#gaace0a21167d13d26116c283009af57f6\">convertLinearToSRGB</a> (vec&lt; L, T, Q &gt; const &amp;ColorLinear, T Gamma)</td></tr>\n<tr class=\"memdesc:gaace0a21167d13d26116c283009af57f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a linear color to sRGB color using a custom gamma correction.  <a href=\"a00289.html#gaace0a21167d13d26116c283009af57f6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaace0a21167d13d26116c283009af57f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16c798b7a226b2c3079dedc55083d187\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga16c798b7a226b2c3079dedc55083d187\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html#ga16c798b7a226b2c3079dedc55083d187\">convertSRGBToLinear</a> (vec&lt; L, T, Q &gt; const &amp;ColorSRGB)</td></tr>\n<tr class=\"memdesc:ga16c798b7a226b2c3079dedc55083d187\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a sRGB color to linear color using a standard gamma correction.  <a href=\"a00289.html#ga16c798b7a226b2c3079dedc55083d187\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16c798b7a226b2c3079dedc55083d187\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1b91f27a9726c9cb403f9fee6e2e200\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gad1b91f27a9726c9cb403f9fee6e2e200\"></a>\ntemplate&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad1b91f27a9726c9cb403f9fee6e2e200\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200\">convertSRGBToLinear</a> (vec&lt; L, T, Q &gt; const &amp;ColorSRGB, T Gamma)</td></tr>\n<tr class=\"memdesc:gad1b91f27a9726c9cb403f9fee6e2e200\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a sRGB color to linear color using a custom gamma correction. <br /></td></tr>\n<tr class=\"separator:gad1b91f27a9726c9cb403f9fee6e2e200\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00289.html\">GLM_GTC_color_space</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00289.html\" title=\"Include <glm/gtc/color_space.hpp> to use the features of this extension. \">GLM_GTC_color_space</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00012_source.html\">gtc/color_space.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00012_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: color_space.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/color_space.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00012.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../exponential.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_color_space extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00289.html#gaace0a21167d13d26116c283009af57f6\">convertLinearToSRGB</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; ColorLinear);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00289.html#gaace0a21167d13d26116c283009af57f6\">convertLinearToSRGB</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; ColorLinear, T Gamma);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200\">convertSRGBToLinear</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; ColorSRGB);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"comment\">// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200\">convertSRGBToLinear</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; ColorSRGB, T Gamma);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"preprocessor\">#include &quot;color_space.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00289_html_gaace0a21167d13d26116c283009af57f6\"><div class=\"ttname\"><a href=\"a00289.html#gaace0a21167d13d26116c283009af57f6\">glm::convertLinearToSRGB</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; convertLinearToSRGB(vec&lt; L, T, Q &gt; const &amp;ColorLinear, T Gamma)</div><div class=\"ttdoc\">Convert a linear color to sRGB color using a custom gamma correction. </div></div>\n<div class=\"ttc\" id=\"a00289_html_gad1b91f27a9726c9cb403f9fee6e2e200\"><div class=\"ttname\"><a href=\"a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200\">glm::convertSRGBToLinear</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; convertSRGBToLinear(vec&lt; L, T, Q &gt; const &amp;ColorSRGB, T Gamma)</div><div class=\"ttdoc\">Convert a sRGB color to linear color using a custom gamma correction. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00013.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: color_space.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/color_space.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00312.html\">GLM_GTX_color_space</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00013_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga789802bec2d4fe0f9741c731b4a8a7d8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga789802bec2d4fe0f9741c731b4a8a7d8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8\">hsvColor</a> (vec&lt; 3, T, Q &gt; const &amp;rgbValue)</td></tr>\n<tr class=\"memdesc:ga789802bec2d4fe0f9741c731b4a8a7d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a color from RGB color space to its color in HSV color space.  <a href=\"a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga789802bec2d4fe0f9741c731b4a8a7d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad028e0a4f1a9c812b39439b746295b34\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad028e0a4f1a9c812b39439b746295b34\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#gad028e0a4f1a9c812b39439b746295b34\">luminosity</a> (vec&lt; 3, T, Q &gt; const &amp;color)</td></tr>\n<tr class=\"memdesc:gad028e0a4f1a9c812b39439b746295b34\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals.  <a href=\"a00312.html#gad028e0a4f1a9c812b39439b746295b34\">More...</a><br /></td></tr>\n<tr class=\"separator:gad028e0a4f1a9c812b39439b746295b34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f9193be46f45f0655c05a0cdca006db\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5f9193be46f45f0655c05a0cdca006db\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">rgbColor</a> (vec&lt; 3, T, Q &gt; const &amp;hsvValue)</td></tr>\n<tr class=\"memdesc:ga5f9193be46f45f0655c05a0cdca006db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a color from HSV color space to its color in RGB color space.  <a href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5f9193be46f45f0655c05a0cdca006db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga01a97152b44e1550edcac60bd849e884\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga01a97152b44e1550edcac60bd849e884\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#ga01a97152b44e1550edcac60bd849e884\">saturation</a> (T const s)</td></tr>\n<tr class=\"memdesc:ga01a97152b44e1550edcac60bd849e884\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a saturation matrix.  <a href=\"a00312.html#ga01a97152b44e1550edcac60bd849e884\">More...</a><br /></td></tr>\n<tr class=\"separator:ga01a97152b44e1550edcac60bd849e884\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2156cea600e90148ece5bc96fd6db43a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2156cea600e90148ece5bc96fd6db43a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#ga2156cea600e90148ece5bc96fd6db43a\">saturation</a> (T const s, vec&lt; 3, T, Q &gt; const &amp;color)</td></tr>\n<tr class=\"memdesc:ga2156cea600e90148ece5bc96fd6db43a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modify the saturation of a color.  <a href=\"a00312.html#ga2156cea600e90148ece5bc96fd6db43a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2156cea600e90148ece5bc96fd6db43a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaba0eacee0736dae860e9371cc1ae4785\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaba0eacee0736dae860e9371cc1ae4785\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#gaba0eacee0736dae860e9371cc1ae4785\">saturation</a> (T const s, vec&lt; 4, T, Q &gt; const &amp;color)</td></tr>\n<tr class=\"memdesc:gaba0eacee0736dae860e9371cc1ae4785\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modify the saturation of a color.  <a href=\"a00312.html#gaba0eacee0736dae860e9371cc1ae4785\">More...</a><br /></td></tr>\n<tr class=\"separator:gaba0eacee0736dae860e9371cc1ae4785\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00312.html\">GLM_GTX_color_space</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00013_source.html\">gtx/color_space.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00013_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: color_space.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/color_space.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00013.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_color_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_color_space extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">rgbColor</a>(</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; hsvValue);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8\">hsvColor</a>(</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; rgbValue);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00312.html#gaba0eacee0736dae860e9371cc1ae4785\">saturation</a>(</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                T <span class=\"keyword\">const</span> s);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00312.html#gaba0eacee0736dae860e9371cc1ae4785\">saturation</a>(</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                T <span class=\"keyword\">const</span> s,</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; color);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00312.html#gaba0eacee0736dae860e9371cc1ae4785\">saturation</a>(</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                T <span class=\"keyword\">const</span> s,</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; color);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00312.html#gad028e0a4f1a9c812b39439b746295b34\">luminosity</a>(</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; color);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"preprocessor\">#include &quot;color_space.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00312_html_gad028e0a4f1a9c812b39439b746295b34\"><div class=\"ttname\"><a href=\"a00312.html#gad028e0a4f1a9c812b39439b746295b34\">glm::luminosity</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T luminosity(vec&lt; 3, T, Q &gt; const &amp;color)</div><div class=\"ttdoc\">Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. </div></div>\n<div class=\"ttc\" id=\"a00312_html_gaba0eacee0736dae860e9371cc1ae4785\"><div class=\"ttname\"><a href=\"a00312.html#gaba0eacee0736dae860e9371cc1ae4785\">glm::saturation</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt; saturation(T const s, vec&lt; 4, T, Q &gt; const &amp;color)</div><div class=\"ttdoc\">Modify the saturation of a color. </div></div>\n<div class=\"ttc\" id=\"a00312_html_ga5f9193be46f45f0655c05a0cdca006db\"><div class=\"ttname\"><a href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">glm::rgbColor</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; rgbColor(vec&lt; 3, T, Q &gt; const &amp;hsvValue)</div><div class=\"ttdoc\">Converts a color from HSV color space to its color in RGB color space. </div></div>\n<div class=\"ttc\" id=\"a00312_html_ga789802bec2d4fe0f9741c731b4a8a7d8\"><div class=\"ttname\"><a href=\"a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8\">glm::hsvColor</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; hsvColor(vec&lt; 3, T, Q &gt; const &amp;rgbValue)</div><div class=\"ttdoc\">Converts a color from RGB color space to its color in HSV color space. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00014.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: color_space_YCoCg.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">color_space_YCoCg.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00313.html\">GLM_GTX_color_space_YCoCg</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00014_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0606353ec2a9b9eaa84f1b02ec391bc5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0606353ec2a9b9eaa84f1b02ec391bc5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5\">rgb2YCoCg</a> (vec&lt; 3, T, Q &gt; const &amp;rgbColor)</td></tr>\n<tr class=\"memdesc:ga0606353ec2a9b9eaa84f1b02ec391bc5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a color from RGB color space to YCoCg color space.  <a href=\"a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0606353ec2a9b9eaa84f1b02ec391bc5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0389772e44ca0fd2ba4a79bdd8efe898\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0389772e44ca0fd2ba4a79bdd8efe898\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898\">rgb2YCoCgR</a> (vec&lt; 3, T, Q &gt; const &amp;rgbColor)</td></tr>\n<tr class=\"memdesc:ga0389772e44ca0fd2ba4a79bdd8efe898\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a color from RGB color space to YCoCgR color space.  <a href=\"a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0389772e44ca0fd2ba4a79bdd8efe898\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga163596b804c7241810b2534a99eb1343\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga163596b804c7241810b2534a99eb1343\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html#ga163596b804c7241810b2534a99eb1343\">YCoCg2rgb</a> (vec&lt; 3, T, Q &gt; const &amp;YCoCgColor)</td></tr>\n<tr class=\"memdesc:ga163596b804c7241810b2534a99eb1343\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a color from YCoCg color space to RGB color space.  <a href=\"a00313.html#ga163596b804c7241810b2534a99eb1343\">More...</a><br /></td></tr>\n<tr class=\"separator:ga163596b804c7241810b2534a99eb1343\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf8d30574c8576838097d8e20c295384a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf8d30574c8576838097d8e20c295384a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html#gaf8d30574c8576838097d8e20c295384a\">YCoCgR2rgb</a> (vec&lt; 3, T, Q &gt; const &amp;YCoCgColor)</td></tr>\n<tr class=\"memdesc:gaf8d30574c8576838097d8e20c295384a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a color from YCoCgR color space to RGB color space.  <a href=\"a00313.html#gaf8d30574c8576838097d8e20c295384a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf8d30574c8576838097d8e20c295384a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00313.html\">GLM_GTX_color_space_YCoCg</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00014_source.html\">color_space_YCoCg.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00014_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: color_space_YCoCg.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">color_space_YCoCg.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00014.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_color_space_YCoCg is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_color_space_YCoCg extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5\">rgb2YCoCg</a>(</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">rgbColor</a>);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00313.html#ga163596b804c7241810b2534a99eb1343\">YCoCg2rgb</a>(</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; YCoCgColor);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898\">rgb2YCoCgR</a>(</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">rgbColor</a>);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00313.html#gaf8d30574c8576838097d8e20c295384a\">YCoCgR2rgb</a>(</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; YCoCgColor);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#include &quot;color_space_YCoCg.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00313_html_gaf8d30574c8576838097d8e20c295384a\"><div class=\"ttname\"><a href=\"a00313.html#gaf8d30574c8576838097d8e20c295384a\">glm::YCoCgR2rgb</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; YCoCgR2rgb(vec&lt; 3, T, Q &gt; const &amp;YCoCgColor)</div><div class=\"ttdoc\">Convert a color from YCoCgR color space to RGB color space. </div></div>\n<div class=\"ttc\" id=\"a00313_html_ga163596b804c7241810b2534a99eb1343\"><div class=\"ttname\"><a href=\"a00313.html#ga163596b804c7241810b2534a99eb1343\">glm::YCoCg2rgb</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; YCoCg2rgb(vec&lt; 3, T, Q &gt; const &amp;YCoCgColor)</div><div class=\"ttdoc\">Convert a color from YCoCg color space to RGB color space. </div></div>\n<div class=\"ttc\" id=\"a00312_html_ga5f9193be46f45f0655c05a0cdca006db\"><div class=\"ttname\"><a href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">glm::rgbColor</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; rgbColor(vec&lt; 3, T, Q &gt; const &amp;hsvValue)</div><div class=\"ttdoc\">Converts a color from HSV color space to its color in RGB color space. </div></div>\n<div class=\"ttc\" id=\"a00313_html_ga0606353ec2a9b9eaa84f1b02ec391bc5\"><div class=\"ttname\"><a href=\"a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5\">glm::rgb2YCoCg</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; rgb2YCoCg(vec&lt; 3, T, Q &gt; const &amp;rgbColor)</div><div class=\"ttdoc\">Convert a color from RGB color space to YCoCg color space. </div></div>\n<div class=\"ttc\" id=\"a00313_html_ga0389772e44ca0fd2ba4a79bdd8efe898\"><div class=\"ttname\"><a href=\"a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898\">glm::rgb2YCoCgR</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; rgb2YCoCgR(vec&lt; 3, T, Q &gt; const &amp;rgbColor)</div><div class=\"ttdoc\">Convert a color from RGB color space to YCoCgR color space. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00015.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: common.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">common.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00015_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga439e60a72eadecfeda2df5449c613a64\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga439e60a72eadecfeda2df5449c613a64\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga439e60a72eadecfeda2df5449c613a64\">abs</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga439e60a72eadecfeda2df5449c613a64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x if x &gt;= 0; otherwise, it returns -x.  <a href=\"a00241.html#ga439e60a72eadecfeda2df5449c613a64\">More...</a><br /></td></tr>\n<tr class=\"separator:ga439e60a72eadecfeda2df5449c613a64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81d3abddd0ef0c8de579bc541ecadab6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga81d3abddd0ef0c8de579bc541ecadab6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6\">abs</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga81d3abddd0ef0c8de579bc541ecadab6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x if x &gt;= 0; otherwise, it returns -x.  <a href=\"a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga81d3abddd0ef0c8de579bc541ecadab6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafb9d2a645a23aca12d4d6de0104b7657\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafb9d2a645a23aca12d4d6de0104b7657\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gafb9d2a645a23aca12d4d6de0104b7657\">ceil</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gafb9d2a645a23aca12d4d6de0104b7657\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer that is greater than or equal to x.  <a href=\"a00241.html#gafb9d2a645a23aca12d4d6de0104b7657\">More...</a><br /></td></tr>\n<tr class=\"separator:gafb9d2a645a23aca12d4d6de0104b7657\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cd77683da6361e297c56443fc70806d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7cd77683da6361e297c56443fc70806d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">clamp</a> (genType x, genType minVal, genType maxVal)</td></tr>\n<tr class=\"memdesc:ga7cd77683da6361e297c56443fc70806d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.  <a href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7cd77683da6361e297c56443fc70806d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafba2e0674deb5953878d89483cd6323d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafba2e0674deb5953878d89483cd6323d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gafba2e0674deb5953878d89483cd6323d\">clamp</a> (vec&lt; L, T, Q &gt; const &amp;x, T minVal, T maxVal)</td></tr>\n<tr class=\"memdesc:gafba2e0674deb5953878d89483cd6323d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.  <a href=\"a00241.html#gafba2e0674deb5953878d89483cd6323d\">More...</a><br /></td></tr>\n<tr class=\"separator:gafba2e0674deb5953878d89483cd6323d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d\">clamp</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)</td></tr>\n<tr class=\"memdesc:gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.  <a href=\"a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1425c1c3160ec51214b03a0469a3013d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga1425c1c3160ec51214b03a0469a3013d\">floatBitsToInt</a> (float const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1425c1c3160ec51214b03a0469a3013d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a signed integer value representing the encoding of a floating-point value.  <a href=\"a00241.html#ga1425c1c3160ec51214b03a0469a3013d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1425c1c3160ec51214b03a0469a3013d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99f7d62f78ac5ea3b49bae715c9488ed\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga99f7d62f78ac5ea3b49bae715c9488ed\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed\">floatBitsToInt</a> (vec&lt; L, float, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga99f7d62f78ac5ea3b49bae715c9488ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a signed integer value representing the encoding of a floating-point value.  <a href=\"a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99f7d62f78ac5ea3b49bae715c9488ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70e0271c34af52f3100c7960e18c3f2b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga70e0271c34af52f3100c7960e18c3f2b\">floatBitsToUint</a> (float const &amp;v)</td></tr>\n<tr class=\"memdesc:ga70e0271c34af52f3100c7960e18c3f2b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a unsigned integer value representing the encoding of a floating-point value.  <a href=\"a00241.html#ga70e0271c34af52f3100c7960e18c3f2b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga70e0271c34af52f3100c7960e18c3f2b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga49418ba4c8a60fbbb5d57b705f3e26db\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga49418ba4c8a60fbbb5d57b705f3e26db\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db\">floatBitsToUint</a> (vec&lt; L, float, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga49418ba4c8a60fbbb5d57b705f3e26db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a unsigned integer value representing the encoding of a floating-point value.  <a href=\"a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db\">More...</a><br /></td></tr>\n<tr class=\"separator:ga49418ba4c8a60fbbb5d57b705f3e26db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9d0742639e85b29c7c5de11cfd6840d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa9d0742639e85b29c7c5de11cfd6840d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d\">floor</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaa9d0742639e85b29c7c5de11cfd6840d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer that is less then or equal to x.  <a href=\"a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9d0742639e85b29c7c5de11cfd6840d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad0f444d4b81cc53c3b6edf5aa25078c2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gad0f444d4b81cc53c3b6edf5aa25078c2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2\">fma</a> (genType const &amp;a, genType const &amp;b, genType const &amp;c)</td></tr>\n<tr class=\"memdesc:gad0f444d4b81cc53c3b6edf5aa25078c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Computes and returns a * b + c.  <a href=\"a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2\">More...</a><br /></td></tr>\n<tr class=\"separator:gad0f444d4b81cc53c3b6edf5aa25078c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8ba89e40e55ae5cdf228548f9b7639c7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8ba89e40e55ae5cdf228548f9b7639c7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7\">fract</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga8ba89e40e55ae5cdf228548f9b7639c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return x - floor(x).  <a href=\"a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8ba89e40e55ae5cdf228548f9b7639c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2df623004f634b440d61e018d62c751b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2df623004f634b440d61e018d62c751b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga2df623004f634b440d61e018d62c751b\">fract</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga2df623004f634b440d61e018d62c751b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return x - floor(x).  <a href=\"a00241.html#ga2df623004f634b440d61e018d62c751b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2df623004f634b440d61e018d62c751b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaddf5ef73283c171730e0bcc11833fa81\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaddf5ef73283c171730e0bcc11833fa81\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaddf5ef73283c171730e0bcc11833fa81\">frexp</a> (genType x, int &amp;exp)</td></tr>\n<tr class=\"memdesc:gaddf5ef73283c171730e0bcc11833fa81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two, such that: x = significand * exp(2, exponent)  <a href=\"a00241.html#gaddf5ef73283c171730e0bcc11833fa81\">More...</a><br /></td></tr>\n<tr class=\"separator:gaddf5ef73283c171730e0bcc11833fa81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4fb7c21c2dce064b26fd9ccdaf9adcd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4\">intBitsToFloat</a> (int const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4fb7c21c2dce064b26fd9ccdaf9adcd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value.  <a href=\"a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4fb7c21c2dce064b26fd9ccdaf9adcd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, float, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0\">intBitsToFloat</a> (vec&lt; L, int, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value.  <a href=\"a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2885587c23a106301f20443896365b62\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2885587c23a106301f20443896365b62\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga2885587c23a106301f20443896365b62\">isinf</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga2885587c23a106301f20443896365b62\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations.  <a href=\"a00241.html#ga2885587c23a106301f20443896365b62\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2885587c23a106301f20443896365b62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29ef934c00306490de837b4746b4e14d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga29ef934c00306490de837b4746b4e14d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga29ef934c00306490de837b4746b4e14d\">isnan</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga29ef934c00306490de837b4746b4e14d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations.  <a href=\"a00241.html#ga29ef934c00306490de837b4746b4e14d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29ef934c00306490de837b4746b4e14d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3010e0a0c35a1b514540f2fb579c58c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gac3010e0a0c35a1b514540f2fb579c58c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gac3010e0a0c35a1b514540f2fb579c58c\">ldexp</a> (genType const &amp;x, int const &amp;exp)</td></tr>\n<tr class=\"memdesc:gac3010e0a0c35a1b514540f2fb579c58c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a floating-point number from x and the corresponding integral exponent of two in exp, returning: significand * exp(2, exponent)  <a href=\"a00241.html#gac3010e0a0c35a1b514540f2fb579c58c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac3010e0a0c35a1b514540f2fb579c58c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae02d42887fc5570451f880e3c624b9ac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae02d42887fc5570451f880e3c624b9ac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gae02d42887fc5570451f880e3c624b9ac\">max</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:gae02d42887fc5570451f880e3c624b9ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00241.html#gae02d42887fc5570451f880e3c624b9ac\">More...</a><br /></td></tr>\n<tr class=\"separator:gae02d42887fc5570451f880e3c624b9ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03e45d6e60d1c36edb00c52edeea0f31\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga03e45d6e60d1c36edb00c52edeea0f31\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31\">max</a> (vec&lt; L, T, Q &gt; const &amp;x, T y)</td></tr>\n<tr class=\"memdesc:ga03e45d6e60d1c36edb00c52edeea0f31\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31\">More...</a><br /></td></tr>\n<tr class=\"separator:ga03e45d6e60d1c36edb00c52edeea0f31\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac1fec0c3303b572a6d4697a637213870\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac1fec0c3303b572a6d4697a637213870\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gac1fec0c3303b572a6d4697a637213870\">max</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gac1fec0c3303b572a6d4697a637213870\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00241.html#gac1fec0c3303b572a6d4697a637213870\">More...</a><br /></td></tr>\n<tr class=\"separator:gac1fec0c3303b572a6d4697a637213870\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6cf8098827054a270ee36b18e30d471d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6cf8098827054a270ee36b18e30d471d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga6cf8098827054a270ee36b18e30d471d\">min</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:ga6cf8098827054a270ee36b18e30d471d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00241.html#ga6cf8098827054a270ee36b18e30d471d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6cf8098827054a270ee36b18e30d471d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7d015eba1f9f48519251f4abe69b14d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa7d015eba1f9f48519251f4abe69b14d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaa7d015eba1f9f48519251f4abe69b14d\">min</a> (vec&lt; L, T, Q &gt; const &amp;x, T y)</td></tr>\n<tr class=\"memdesc:gaa7d015eba1f9f48519251f4abe69b14d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00241.html#gaa7d015eba1f9f48519251f4abe69b14d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7d015eba1f9f48519251f4abe69b14d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31f49ef9e7d1beb003160c5e009b0c48\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga31f49ef9e7d1beb003160c5e009b0c48\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48\">min</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga31f49ef9e7d1beb003160c5e009b0c48\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48\">More...</a><br /></td></tr>\n<tr class=\"separator:ga31f49ef9e7d1beb003160c5e009b0c48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e93f374aae27d1a88b921860351f8d4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genTypeT , typename genTypeU &gt; </td></tr>\n<tr class=\"memitem:ga8e93f374aae27d1a88b921860351f8d4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genTypeT&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a> (genTypeT x, genTypeT y, genTypeU a)</td></tr>\n<tr class=\"memdesc:ga8e93f374aae27d1a88b921860351f8d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a.  <a href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8e93f374aae27d1a88b921860351f8d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9b197a452cd52db3c5c18bac72bd7798\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9b197a452cd52db3c5c18bac72bd7798\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga9b197a452cd52db3c5c18bac72bd7798\">mod</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga9b197a452cd52db3c5c18bac72bd7798\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modulus.  <a href=\"a00241.html#ga9b197a452cd52db3c5c18bac72bd7798\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9b197a452cd52db3c5c18bac72bd7798\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85e33f139b8db1b39b590a5713b9e679\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga85e33f139b8db1b39b590a5713b9e679\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga85e33f139b8db1b39b590a5713b9e679\">modf</a> (genType x, genType &amp;i)</td></tr>\n<tr class=\"memdesc:ga85e33f139b8db1b39b590a5713b9e679\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the fractional part of x and sets i to the integer part (as a whole number floating point value).  <a href=\"a00241.html#ga85e33f139b8db1b39b590a5713b9e679\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85e33f139b8db1b39b590a5713b9e679\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafa03aca8c4713e1cc892aa92ca135a7e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafa03aca8c4713e1cc892aa92ca135a7e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e\">round</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gafa03aca8c4713e1cc892aa92ca135a7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x.  <a href=\"a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e\">More...</a><br /></td></tr>\n<tr class=\"separator:gafa03aca8c4713e1cc892aa92ca135a7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga76b81785045a057989a84d99aeeb1578\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga76b81785045a057989a84d99aeeb1578\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga76b81785045a057989a84d99aeeb1578\">roundEven</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga76b81785045a057989a84d99aeeb1578\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x.  <a href=\"a00241.html#ga76b81785045a057989a84d99aeeb1578\">More...</a><br /></td></tr>\n<tr class=\"separator:ga76b81785045a057989a84d99aeeb1578\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1e2e5cfff800056540e32f6c9b604b28\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1e2e5cfff800056540e32f6c9b604b28\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga1e2e5cfff800056540e32f6c9b604b28\">sign</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1e2e5cfff800056540e32f6c9b604b28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 1.0 if x &gt; 0, 0.0 if x == 0, or -1.0 if x &lt; 0.  <a href=\"a00241.html#ga1e2e5cfff800056540e32f6c9b604b28\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e2e5cfff800056540e32f6c9b604b28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga562edf7eca082cc5b7a0aaf180436daf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga562edf7eca082cc5b7a0aaf180436daf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga562edf7eca082cc5b7a0aaf180436daf\">smoothstep</a> (genType edge0, genType edge1, genType x)</td></tr>\n<tr class=\"memdesc:ga562edf7eca082cc5b7a0aaf180436daf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 0.0 if x &lt;= edge0 and 1.0 if x &gt;= edge1 and performs smooth Hermite interpolation between 0 and 1 when edge0 &lt; x &lt; edge1.  <a href=\"a00241.html#ga562edf7eca082cc5b7a0aaf180436daf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga562edf7eca082cc5b7a0aaf180436daf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga015a1261ff23e12650211aa872863cce\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga015a1261ff23e12650211aa872863cce\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga015a1261ff23e12650211aa872863cce\">step</a> (genType edge, genType x)</td></tr>\n<tr class=\"memdesc:ga015a1261ff23e12650211aa872863cce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 0.0 if x &lt; edge, otherwise it returns 1.0 for each component of a genType.  <a href=\"a00241.html#ga015a1261ff23e12650211aa872863cce\">More...</a><br /></td></tr>\n<tr class=\"separator:ga015a1261ff23e12650211aa872863cce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f9a911a48ef244b51654eaefc81c551\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8f9a911a48ef244b51654eaefc81c551\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga8f9a911a48ef244b51654eaefc81c551\">step</a> (T edge, vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8f9a911a48ef244b51654eaefc81c551\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 0.0 if x &lt; edge, otherwise it returns 1.0.  <a href=\"a00241.html#ga8f9a911a48ef244b51654eaefc81c551\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f9a911a48ef244b51654eaefc81c551\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f\">step</a> (vec&lt; L, T, Q &gt; const &amp;edge, vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 0.0 if x &lt; edge, otherwise it returns 1.0.  <a href=\"a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf9375e3e06173271d49e6ffa3a334259\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf9375e3e06173271d49e6ffa3a334259\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaf9375e3e06173271d49e6ffa3a334259\">trunc</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf9375e3e06173271d49e6ffa3a334259\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolute value of x.  <a href=\"a00241.html#gaf9375e3e06173271d49e6ffa3a334259\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf9375e3e06173271d49e6ffa3a334259\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab2bae0d15dcdca6093f88f76b3975d97\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gab2bae0d15dcdca6093f88f76b3975d97\">uintBitsToFloat</a> (uint const &amp;v)</td></tr>\n<tr class=\"memdesc:gab2bae0d15dcdca6093f88f76b3975d97\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value.  <a href=\"a00241.html#gab2bae0d15dcdca6093f88f76b3975d97\">More...</a><br /></td></tr>\n<tr class=\"separator:gab2bae0d15dcdca6093f88f76b3975d97\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga97f46b5f7b42fe44482e13356eb394ae\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga97f46b5f7b42fe44482e13356eb394ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, float, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga97f46b5f7b42fe44482e13356eb394ae\">uintBitsToFloat</a> (vec&lt; L, uint, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga97f46b5f7b42fe44482e13356eb394ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value.  <a href=\"a00241.html#ga97f46b5f7b42fe44482e13356eb394ae\">More...</a><br /></td></tr>\n<tr class=\"separator:ga97f46b5f7b42fe44482e13356eb394ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00015_source.html\">common.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00015_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: common.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">common.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00015.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;detail/_fixes.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6\">abs</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6\">abs</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga1e2e5cfff800056540e32f6c9b604b28\">sign</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d\">floor</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gaf9375e3e06173271d49e6ffa3a334259\">trunc</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e\">round</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga76b81785045a057989a84d99aeeb1578\">roundEven</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gafb9d2a645a23aca12d4d6de0104b7657\">ceil</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00241.html#ga2df623004f634b440d61e018d62c751b\">fract</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga2df623004f634b440d61e018d62c751b\">fract</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00241.html#ga9b197a452cd52db3c5c18bac72bd7798\">mod</a>(genType x, genType y);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga9b197a452cd52db3c5c18bac72bd7798\">mod</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, T y);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga9b197a452cd52db3c5c18bac72bd7798\">mod</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00241.html#ga85e33f139b8db1b39b590a5713b9e679\">modf</a>(genType x, genType&amp; i);</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48\">min</a>(genType x, genType y);</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48\">min</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, T y);</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48\">min</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00241.html#gac1fec0c3303b572a6d4697a637213870\">max</a>(genType x, genType y);</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gac1fec0c3303b572a6d4697a637213870\">max</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, T y);</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gac1fec0c3303b572a6d4697a637213870\">max</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d\">clamp</a>(genType x, genType minVal, genType maxVal);</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d\">clamp</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, T minVal, T maxVal);</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d\">clamp</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; minVal, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; maxVal);</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genTypeT, <span class=\"keyword\">typename</span> genTypeU&gt;</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;        GLM_FUNC_DECL genTypeT <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(genTypeT x, genTypeT y, genTypeU a);</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, U, Q&gt; <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, U a);</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f\">step</a>(genType edge, genType x);</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f\">step</a>(T edge, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f\">step</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; edge, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00241.html#ga562edf7eca082cc5b7a0aaf180436daf\">smoothstep</a>(genType edge0, genType edge1, genType x);</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga562edf7eca082cc5b7a0aaf180436daf\">smoothstep</a>(T edge0, T edge1, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga562edf7eca082cc5b7a0aaf180436daf\">smoothstep</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; edge0, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; edge1, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00241.html#ga29ef934c00306490de837b4746b4e14d\">isnan</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00241.html#ga2885587c23a106301f20443896365b62\">isinf</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed\">floatBitsToInt</a>(<span class=\"keywordtype\">float</span> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;        GLM_FUNC_DECL vec&lt;L, int, Q&gt; <a class=\"code\" href=\"a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed\">floatBitsToInt</a>(vec&lt;L, float, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db\">floatBitsToUint</a>(<span class=\"keywordtype\">float</span> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;</div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;        GLM_FUNC_DECL vec&lt;L, uint, Q&gt; <a class=\"code\" href=\"a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db\">floatBitsToUint</a>(vec&lt;L, float, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;</div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0\">intBitsToFloat</a>(<span class=\"keywordtype\">int</span> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;</div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;        GLM_FUNC_DECL vec&lt;L, float, Q&gt; <a class=\"code\" href=\"a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0\">intBitsToFloat</a>(vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"a00241.html#ga97f46b5f7b42fe44482e13356eb394ae\">uintBitsToFloat</a>(uint <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;</div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;        GLM_FUNC_DECL vec&lt;L, float, Q&gt; <a class=\"code\" href=\"a00241.html#ga97f46b5f7b42fe44482e13356eb394ae\">uintBitsToFloat</a>(vec&lt;L, uint, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2\">fma</a>(genType <span class=\"keyword\">const</span>&amp; a, genType <span class=\"keyword\">const</span>&amp; b, genType <span class=\"keyword\">const</span>&amp; c);</div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;</div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00241.html#gaddf5ef73283c171730e0bcc11833fa81\">frexp</a>(genType x, <span class=\"keywordtype\">int</span>&amp; <a class=\"code\" href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">exp</a>);</div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;        </div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gaddf5ef73283c171730e0bcc11833fa81\">frexp</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;L, int, Q&gt;&amp; <a class=\"code\" href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">exp</a>);</div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;</div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00241.html#gac3010e0a0c35a1b514540f2fb579c58c\">ldexp</a>(genType <span class=\"keyword\">const</span>&amp; x, <span class=\"keywordtype\">int</span> <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">exp</a>);</div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;        </div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\">  533</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00241.html#gac3010e0a0c35a1b514540f2fb579c58c\">ldexp</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">exp</a>);</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;</div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\">  536</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;</div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;<span class=\"preprocessor\">#include &quot;detail/func_common.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;</div>\n<div class=\"ttc\" id=\"a00241_html_gaa9d0742639e85b29c7c5de11cfd6840d\"><div class=\"ttname\"><a href=\"a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d\">glm::floor</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; floor(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a value equal to the nearest integer that is less then or equal to x. </div></div>\n<div class=\"ttc\" id=\"a00241_html_gad0f444d4b81cc53c3b6edf5aa25078c2\"><div class=\"ttname\"><a href=\"a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2\">glm::fma</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType fma(genType const &amp;a, genType const &amp;b, genType const &amp;c)</div><div class=\"ttdoc\">Computes and returns a * b + c. </div></div>\n<div class=\"ttc\" id=\"a00241_html_gaf9375e3e06173271d49e6ffa3a334259\"><div class=\"ttname\"><a href=\"a00241.html#gaf9375e3e06173271d49e6ffa3a334259\">glm::trunc</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; trunc(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolut...</div></div>\n<div class=\"ttc\" id=\"a00241_html_ga9b197a452cd52db3c5c18bac72bd7798\"><div class=\"ttname\"><a href=\"a00241.html#ga9b197a452cd52db3c5c18bac72bd7798\">glm::mod</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; mod(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Modulus. </div></div>\n<div class=\"ttc\" id=\"a00241_html_gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><div class=\"ttname\"><a href=\"a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d\">glm::clamp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; clamp(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)</div><div class=\"ttdoc\">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...</div></div>\n<div class=\"ttc\" id=\"a00241_html_gafa03aca8c4713e1cc892aa92ca135a7e\"><div class=\"ttname\"><a href=\"a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e\">glm::round</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; round(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a value equal to the nearest integer to x. </div></div>\n<div class=\"ttc\" id=\"a00241_html_ga97f46b5f7b42fe44482e13356eb394ae\"><div class=\"ttname\"><a href=\"a00241.html#ga97f46b5f7b42fe44482e13356eb394ae\">glm::uintBitsToFloat</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, float, Q &gt; uintBitsToFloat(vec&lt; L, uint, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value...</div></div>\n<div class=\"ttc\" id=\"a00241_html_ga1e2e5cfff800056540e32f6c9b604b28\"><div class=\"ttname\"><a href=\"a00241.html#ga1e2e5cfff800056540e32f6c9b604b28\">glm::sign</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; sign(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. </div></div>\n<div class=\"ttc\" id=\"a00241_html_ga2885587c23a106301f20443896365b62\"><div class=\"ttname\"><a href=\"a00241.html#ga2885587c23a106301f20443896365b62\">glm::isinf</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt; isinf(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns true if x holds a positive infinity or negative infinity representation in the underlying imp...</div></div>\n<div class=\"ttc\" id=\"a00241_html_ga76b81785045a057989a84d99aeeb1578\"><div class=\"ttname\"><a href=\"a00241.html#ga76b81785045a057989a84d99aeeb1578\">glm::roundEven</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; roundEven(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a value equal to the nearest integer to x. </div></div>\n<div class=\"ttc\" id=\"a00241_html_ga85e33f139b8db1b39b590a5713b9e679\"><div class=\"ttname\"><a href=\"a00241.html#ga85e33f139b8db1b39b590a5713b9e679\">glm::modf</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType modf(genType x, genType &amp;i)</div><div class=\"ttdoc\">Returns the fractional part of x and sets i to the integer part (as a whole number floating point val...</div></div>\n<div class=\"ttc\" id=\"a00241_html_gafb9d2a645a23aca12d4d6de0104b7657\"><div class=\"ttname\"><a href=\"a00241.html#gafb9d2a645a23aca12d4d6de0104b7657\">glm::ceil</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; ceil(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a value equal to the nearest integer that is greater than or equal to x. </div></div>\n<div class=\"ttc\" id=\"a00241_html_ga31f49ef9e7d1beb003160c5e009b0c48\"><div class=\"ttname\"><a href=\"a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48\">glm::min</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; min(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns y if y < x; otherwise, it returns x. </div></div>\n<div class=\"ttc\" id=\"a00241_html_ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><div class=\"ttname\"><a href=\"a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0\">glm::intBitsToFloat</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, float, Q &gt; intBitsToFloat(vec&lt; L, int, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value...</div></div>\n<div class=\"ttc\" id=\"a00241_html_ga29ef934c00306490de837b4746b4e14d\"><div class=\"ttname\"><a href=\"a00241.html#ga29ef934c00306490de837b4746b4e14d\">glm::isnan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt; isnan(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns true if x holds a NaN (not a number) representation in the underlying implementation&#39;s set of...</div></div>\n<div class=\"ttc\" id=\"a00242_html_ga071566cadc7505455e611f2a0353f4d4\"><div class=\"ttname\"><a href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">glm::exp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; exp(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the natural exponentiation of x, i.e., e^x. </div></div>\n<div class=\"ttc\" id=\"a00241_html_ga49418ba4c8a60fbbb5d57b705f3e26db\"><div class=\"ttname\"><a href=\"a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db\">glm::floatBitsToUint</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt; floatBitsToUint(vec&lt; L, float, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns a unsigned integer value representing the encoding of a floating-point value. </div></div>\n<div class=\"ttc\" id=\"a00241_html_ga562edf7eca082cc5b7a0aaf180436daf\"><div class=\"ttname\"><a href=\"a00241.html#ga562edf7eca082cc5b7a0aaf180436daf\">glm::smoothstep</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x)</div><div class=\"ttdoc\">Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and performs smooth Hermite interpolation between 0 a...</div></div>\n<div class=\"ttc\" id=\"a00241_html_ga81d3abddd0ef0c8de579bc541ecadab6\"><div class=\"ttname\"><a href=\"a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6\">glm::abs</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; abs(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns x if x >= 0; otherwise, it returns -x. </div></div>\n<div class=\"ttc\" id=\"a00241_html_gac1fec0c3303b572a6d4697a637213870\"><div class=\"ttname\"><a href=\"a00241.html#gac1fec0c3303b572a6d4697a637213870\">glm::max</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; max(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns y if x < y; otherwise, it returns x. </div></div>\n<div class=\"ttc\" id=\"a00241_html_gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><div class=\"ttname\"><a href=\"a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f\">glm::step</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; step(vec&lt; L, T, Q &gt; const &amp;edge, vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns 0.0 if x < edge, otherwise it returns 1.0. </div></div>\n<div class=\"ttc\" id=\"a00241_html_ga2df623004f634b440d61e018d62c751b\"><div class=\"ttname\"><a href=\"a00241.html#ga2df623004f634b440d61e018d62c751b\">glm::fract</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fract(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Return x - floor(x). </div></div>\n<div class=\"ttc\" id=\"a00241_html_gac3010e0a0c35a1b514540f2fb579c58c\"><div class=\"ttname\"><a href=\"a00241.html#gac3010e0a0c35a1b514540f2fb579c58c\">glm::ldexp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType ldexp(genType const &amp;x, int const &amp;exp)</div><div class=\"ttdoc\">Builds a floating-point number from x and the corresponding integral exponent of two in exp...</div></div>\n<div class=\"ttc\" id=\"a00241_html_ga99f7d62f78ac5ea3b49bae715c9488ed\"><div class=\"ttname\"><a href=\"a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed\">glm::floatBitsToInt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, int, Q &gt; floatBitsToInt(vec&lt; L, float, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns a signed integer value representing the encoding of a floating-point value. </div></div>\n<div class=\"ttc\" id=\"a00241_html_ga8e93f374aae27d1a88b921860351f8d4\"><div class=\"ttname\"><a href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">glm::mix</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a)</div><div class=\"ttdoc\">If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...</div></div>\n<div class=\"ttc\" id=\"a00241_html_gaddf5ef73283c171730e0bcc11833fa81\"><div class=\"ttname\"><a href=\"a00241.html#gaddf5ef73283c171730e0bcc11833fa81\">glm::frexp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType frexp(genType x, int &amp;exp)</div><div class=\"ttdoc\">Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two...</div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00016.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: common.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/common.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00314.html\">GLM_GTX_common</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00016_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gab7d89c14c48ad01f720fb5daf8813161\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab7d89c14c48ad01f720fb5daf8813161\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html#gab7d89c14c48ad01f720fb5daf8813161\">closeBounded</a> (vec&lt; L, T, Q &gt; const &amp;Value, vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</td></tr>\n<tr class=\"memdesc:gab7d89c14c48ad01f720fb5daf8813161\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns whether vector components values are within an interval.  <a href=\"a00314.html#gab7d89c14c48ad01f720fb5daf8813161\">More...</a><br /></td></tr>\n<tr class=\"separator:gab7d89c14c48ad01f720fb5daf8813161\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5e80425df9833164ad469e83b475fb4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae5e80425df9833164ad469e83b475fb4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html#gae5e80425df9833164ad469e83b475fb4\">fmod</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gae5e80425df9833164ad469e83b475fb4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Similar to 'mod' but with a different rounding and integer support.  <a href=\"a00314.html#gae5e80425df9833164ad469e83b475fb4\">More...</a><br /></td></tr>\n<tr class=\"separator:gae5e80425df9833164ad469e83b475fb4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74aa7c7462245d83bd5a9edf9c6c2d91\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga74aa7c7462245d83bd5a9edf9c6c2d91\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::bool_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91\">isdenormal</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga74aa7c7462245d83bd5a9edf9c6c2d91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x is a denormalized number Numbers whose absolute value is too small to be represented in the normal format are represented in an alternate, denormalized format.  <a href=\"a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74aa7c7462245d83bd5a9edf9c6c2d91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafd303042ba2ba695bf53b2315f53f93f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafd303042ba2ba695bf53b2315f53f93f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html#gafd303042ba2ba695bf53b2315f53f93f\">openBounded</a> (vec&lt; L, T, Q &gt; const &amp;Value, vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</td></tr>\n<tr class=\"memdesc:gafd303042ba2ba695bf53b2315f53f93f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns whether vector components values are within an interval.  <a href=\"a00314.html#gafd303042ba2ba695bf53b2315f53f93f\">More...</a><br /></td></tr>\n<tr class=\"separator:gafd303042ba2ba695bf53b2315f53f93f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00314.html\">GLM_GTX_common</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00016_source.html\">gtx/common.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00016_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: common.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/common.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00016.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_common is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_common extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> genType::bool_type <a class=\"code\" href=\"a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91\">isdenormal</a>(genType <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00314.html#gae5e80425df9833164ad469e83b475fb4\">fmod</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">template</span> &lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00314.html#gafd303042ba2ba695bf53b2315f53f93f\">openBounded</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Value, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Min, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Max);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        <span class=\"keyword\">template</span> &lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00314.html#gab7d89c14c48ad01f720fb5daf8813161\">closeBounded</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Value, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Min, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Max);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\">#include &quot;common.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00314_html_gae5e80425df9833164ad469e83b475fb4\"><div class=\"ttname\"><a href=\"a00314.html#gae5e80425df9833164ad469e83b475fb4\">glm::fmod</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fmod(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Similar to &#39;mod&#39; but with a different rounding and integer support. </div></div>\n<div class=\"ttc\" id=\"a00314_html_gafd303042ba2ba695bf53b2315f53f93f\"><div class=\"ttname\"><a href=\"a00314.html#gafd303042ba2ba695bf53b2315f53f93f\">glm::openBounded</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt; openBounded(vec&lt; L, T, Q &gt; const &amp;Value, vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</div><div class=\"ttdoc\">Returns whether vector components values are within an interval. </div></div>\n<div class=\"ttc\" id=\"a00314_html_ga74aa7c7462245d83bd5a9edf9c6c2d91\"><div class=\"ttname\"><a href=\"a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91\">glm::isdenormal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType::bool_type isdenormal(genType const &amp;x)</div><div class=\"ttdoc\">Returns true if x is a denormalized number Numbers whose absolute value is too small to be represente...</div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00314_html_gab7d89c14c48ad01f720fb5daf8813161\"><div class=\"ttname\"><a href=\"a00314.html#gab7d89c14c48ad01f720fb5daf8813161\">glm::closeBounded</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt; closeBounded(vec&lt; L, T, Q &gt; const &amp;Value, vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</div><div class=\"ttdoc\">Returns whether vector components values are within an interval. </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00017.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: compatibility.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">compatibility.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00315.html\">GLM_GTX_compatibility</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00017_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaddcd7aa2e30e61af5b38660613d3979e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaddcd7aa2e30e61af5b38660613d3979e\"></a>\ntypedef bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaddcd7aa2e30e61af5b38660613d3979e\">bool1</a></td></tr>\n<tr class=\"memdesc:gaddcd7aa2e30e61af5b38660613d3979e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean type with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaddcd7aa2e30e61af5b38660613d3979e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f895c936f0c29c8729afbbf22806090\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7f895c936f0c29c8729afbbf22806090\"></a>\ntypedef bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga7f895c936f0c29c8729afbbf22806090\">bool1x1</a></td></tr>\n<tr class=\"memdesc:ga7f895c936f0c29c8729afbbf22806090\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga7f895c936f0c29c8729afbbf22806090\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa09ab65ec9c3c54305ff502e2b1fe6d9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa09ab65ec9c3c54305ff502e2b1fe6d9\"></a>\ntypedef vec&lt; 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9\">bool2</a></td></tr>\n<tr class=\"memdesc:gaa09ab65ec9c3c54305ff502e2b1fe6d9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean type with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaa09ab65ec9c3c54305ff502e2b1fe6d9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadb3703955e513632f98ba12fe051ba3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadb3703955e513632f98ba12fe051ba3e\"></a>\ntypedef mat&lt; 2, 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gadb3703955e513632f98ba12fe051ba3e\">bool2x2</a></td></tr>\n<tr class=\"memdesc:gadb3703955e513632f98ba12fe051ba3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gadb3703955e513632f98ba12fe051ba3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ae6ee155d0f90cb1ae5b6c4546738a0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9ae6ee155d0f90cb1ae5b6c4546738a0\"></a>\ntypedef mat&lt; 2, 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0\">bool2x3</a></td></tr>\n<tr class=\"memdesc:ga9ae6ee155d0f90cb1ae5b6c4546738a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga9ae6ee155d0f90cb1ae5b6c4546738a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d7fa65be8e8e4ad6d920b45c44e471f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4d7fa65be8e8e4ad6d920b45c44e471f\"></a>\ntypedef mat&lt; 2, 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f\">bool2x4</a></td></tr>\n<tr class=\"memdesc:ga4d7fa65be8e8e4ad6d920b45c44e471f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga4d7fa65be8e8e4ad6d920b45c44e471f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99629f818737f342204071ef8296b2ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga99629f818737f342204071ef8296b2ed\"></a>\ntypedef vec&lt; 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga99629f818737f342204071ef8296b2ed\">bool3</a></td></tr>\n<tr class=\"memdesc:ga99629f818737f342204071ef8296b2ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean type with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga99629f818737f342204071ef8296b2ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7d7311f7e0fa8b6163d96dab033a755\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac7d7311f7e0fa8b6163d96dab033a755\"></a>\ntypedef mat&lt; 3, 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac7d7311f7e0fa8b6163d96dab033a755\">bool3x2</a></td></tr>\n<tr class=\"memdesc:gac7d7311f7e0fa8b6163d96dab033a755\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gac7d7311f7e0fa8b6163d96dab033a755\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6c97b99aac3e302053ffb58aace9033c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6c97b99aac3e302053ffb58aace9033c\"></a>\ntypedef mat&lt; 3, 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga6c97b99aac3e302053ffb58aace9033c\">bool3x3</a></td></tr>\n<tr class=\"memdesc:ga6c97b99aac3e302053ffb58aace9033c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga6c97b99aac3e302053ffb58aace9033c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7d6b679463d37d6c527d478fb470fdf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae7d6b679463d37d6c527d478fb470fdf\"></a>\ntypedef mat&lt; 3, 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gae7d6b679463d37d6c527d478fb470fdf\">bool3x4</a></td></tr>\n<tr class=\"memdesc:gae7d6b679463d37d6c527d478fb470fdf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gae7d6b679463d37d6c527d478fb470fdf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13c3200b82708f73faac6d7f09ec91a3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga13c3200b82708f73faac6d7f09ec91a3\"></a>\ntypedef vec&lt; 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga13c3200b82708f73faac6d7f09ec91a3\">bool4</a></td></tr>\n<tr class=\"memdesc:ga13c3200b82708f73faac6d7f09ec91a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean type with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga13c3200b82708f73faac6d7f09ec91a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ed830f52408b2f83c085063a3eaf1d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9ed830f52408b2f83c085063a3eaf1d0\"></a>\ntypedef mat&lt; 4, 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0\">bool4x2</a></td></tr>\n<tr class=\"memdesc:ga9ed830f52408b2f83c085063a3eaf1d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga9ed830f52408b2f83c085063a3eaf1d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad0f5dc7f22c2065b1b06d57f1c0658fe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad0f5dc7f22c2065b1b06d57f1c0658fe\"></a>\ntypedef mat&lt; 4, 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe\">bool4x3</a></td></tr>\n<tr class=\"memdesc:gad0f5dc7f22c2065b1b06d57f1c0658fe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gad0f5dc7f22c2065b1b06d57f1c0658fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7d2a7d13986602ae2896bfaa394235d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7d2a7d13986602ae2896bfaa394235d4\"></a>\ntypedef mat&lt; 4, 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga7d2a7d13986602ae2896bfaa394235d4\">bool4x4</a></td></tr>\n<tr class=\"memdesc:ga7d2a7d13986602ae2896bfaa394235d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga7d2a7d13986602ae2896bfaa394235d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20b861a9b6e2a300323671c57a02525b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga20b861a9b6e2a300323671c57a02525b\"></a>\ntypedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga20b861a9b6e2a300323671c57a02525b\">double1</a></td></tr>\n<tr class=\"memdesc:ga20b861a9b6e2a300323671c57a02525b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga20b861a9b6e2a300323671c57a02525b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45f16a4dd0db1f199afaed9fd12fe9a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga45f16a4dd0db1f199afaed9fd12fe9a8\"></a>\ntypedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8\">double1x1</a></td></tr>\n<tr class=\"memdesc:ga45f16a4dd0db1f199afaed9fd12fe9a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga45f16a4dd0db1f199afaed9fd12fe9a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31b729b04facccda73f07ed26958b3c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga31b729b04facccda73f07ed26958b3c2\"></a>\ntypedef vec&lt; 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga31b729b04facccda73f07ed26958b3c2\">double2</a></td></tr>\n<tr class=\"memdesc:ga31b729b04facccda73f07ed26958b3c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga31b729b04facccda73f07ed26958b3c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae57d0201096834d25f2b91b319e7cdbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae57d0201096834d25f2b91b319e7cdbd\"></a>\ntypedef mat&lt; 2, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gae57d0201096834d25f2b91b319e7cdbd\">double2x2</a></td></tr>\n<tr class=\"memdesc:gae57d0201096834d25f2b91b319e7cdbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gae57d0201096834d25f2b91b319e7cdbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3655bc324008553ca61f39952d0b2d08\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3655bc324008553ca61f39952d0b2d08\"></a>\ntypedef mat&lt; 2, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga3655bc324008553ca61f39952d0b2d08\">double2x3</a></td></tr>\n<tr class=\"memdesc:ga3655bc324008553ca61f39952d0b2d08\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga3655bc324008553ca61f39952d0b2d08\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd33061fc64a7b2dcfd7322c49d9557a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacd33061fc64a7b2dcfd7322c49d9557a\"></a>\ntypedef mat&lt; 2, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a\">double2x4</a></td></tr>\n<tr class=\"memdesc:gacd33061fc64a7b2dcfd7322c49d9557a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gacd33061fc64a7b2dcfd7322c49d9557a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3d8b9028a1053a44a98902cd1c389472\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3d8b9028a1053a44a98902cd1c389472\"></a>\ntypedef vec&lt; 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga3d8b9028a1053a44a98902cd1c389472\">double3</a></td></tr>\n<tr class=\"memdesc:ga3d8b9028a1053a44a98902cd1c389472\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga3d8b9028a1053a44a98902cd1c389472\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ec08fc39c9d783dfcc488be240fe975\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5ec08fc39c9d783dfcc488be240fe975\"></a>\ntypedef mat&lt; 3, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga5ec08fc39c9d783dfcc488be240fe975\">double3x2</a></td></tr>\n<tr class=\"memdesc:ga5ec08fc39c9d783dfcc488be240fe975\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga5ec08fc39c9d783dfcc488be240fe975\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4bad5bb20c6ddaecfe4006c93841d180\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4bad5bb20c6ddaecfe4006c93841d180\"></a>\ntypedef mat&lt; 3, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180\">double3x3</a></td></tr>\n<tr class=\"memdesc:ga4bad5bb20c6ddaecfe4006c93841d180\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga4bad5bb20c6ddaecfe4006c93841d180\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ef022e453d663d70aec414b2a80f756\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2ef022e453d663d70aec414b2a80f756\"></a>\ntypedef mat&lt; 3, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga2ef022e453d663d70aec414b2a80f756\">double3x4</a></td></tr>\n<tr class=\"memdesc:ga2ef022e453d663d70aec414b2a80f756\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga2ef022e453d663d70aec414b2a80f756\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf92f58af24f35617518aeb3d4f63fda6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf92f58af24f35617518aeb3d4f63fda6\"></a>\ntypedef vec&lt; 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaf92f58af24f35617518aeb3d4f63fda6\">double4</a></td></tr>\n<tr class=\"memdesc:gaf92f58af24f35617518aeb3d4f63fda6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaf92f58af24f35617518aeb3d4f63fda6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabca29ccceea53669618b751aae0ba83d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabca29ccceea53669618b751aae0ba83d\"></a>\ntypedef mat&lt; 4, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gabca29ccceea53669618b751aae0ba83d\">double4x2</a></td></tr>\n<tr class=\"memdesc:gabca29ccceea53669618b751aae0ba83d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gabca29ccceea53669618b751aae0ba83d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafad66a02ccd360c86d6ab9ff9cfbc19c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafad66a02ccd360c86d6ab9ff9cfbc19c\"></a>\ntypedef mat&lt; 4, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c\">double4x3</a></td></tr>\n<tr class=\"memdesc:gafad66a02ccd360c86d6ab9ff9cfbc19c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gafad66a02ccd360c86d6ab9ff9cfbc19c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab541bed2e788e4537852a2492860806\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaab541bed2e788e4537852a2492860806\"></a>\ntypedef mat&lt; 4, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaab541bed2e788e4537852a2492860806\">double4x4</a></td></tr>\n<tr class=\"memdesc:gaab541bed2e788e4537852a2492860806\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaab541bed2e788e4537852a2492860806\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5208d01f6c6fbcb7bb55d610b9c0ead\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf5208d01f6c6fbcb7bb55d610b9c0ead\"></a>\ntypedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead\">float1</a></td></tr>\n<tr class=\"memdesc:gaf5208d01f6c6fbcb7bb55d610b9c0ead\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaf5208d01f6c6fbcb7bb55d610b9c0ead\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73720b8dc4620835b17f74d428f98c0c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga73720b8dc4620835b17f74d428f98c0c\"></a>\ntypedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga73720b8dc4620835b17f74d428f98c0c\">float1x1</a></td></tr>\n<tr class=\"memdesc:ga73720b8dc4620835b17f74d428f98c0c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga73720b8dc4620835b17f74d428f98c0c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga02d3c013982c183906c61d74aa3166ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga02d3c013982c183906c61d74aa3166ce\"></a>\ntypedef vec&lt; 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga02d3c013982c183906c61d74aa3166ce\">float2</a></td></tr>\n<tr class=\"memdesc:ga02d3c013982c183906c61d74aa3166ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga02d3c013982c183906c61d74aa3166ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga33d43ecbb60a85a1366ff83f8a0ec85f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga33d43ecbb60a85a1366ff83f8a0ec85f\"></a>\ntypedef mat&lt; 2, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f\">float2x2</a></td></tr>\n<tr class=\"memdesc:ga33d43ecbb60a85a1366ff83f8a0ec85f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga33d43ecbb60a85a1366ff83f8a0ec85f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga939b0cff15cee3030f75c1b2e36f89fe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga939b0cff15cee3030f75c1b2e36f89fe\"></a>\ntypedef mat&lt; 2, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe\">float2x3</a></td></tr>\n<tr class=\"memdesc:ga939b0cff15cee3030f75c1b2e36f89fe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga939b0cff15cee3030f75c1b2e36f89fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafec3cfd901ab334a92e0242b8f2269b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafec3cfd901ab334a92e0242b8f2269b4\"></a>\ntypedef mat&lt; 2, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gafec3cfd901ab334a92e0242b8f2269b4\">float2x4</a></td></tr>\n<tr class=\"memdesc:gafec3cfd901ab334a92e0242b8f2269b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gafec3cfd901ab334a92e0242b8f2269b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga821ff110fc8533a053cbfcc93e078cc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga821ff110fc8533a053cbfcc93e078cc0\"></a>\ntypedef vec&lt; 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga821ff110fc8533a053cbfcc93e078cc0\">float3</a></td></tr>\n<tr class=\"memdesc:ga821ff110fc8533a053cbfcc93e078cc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga821ff110fc8533a053cbfcc93e078cc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa6c69f04ba95f3faedf95dae874de576\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa6c69f04ba95f3faedf95dae874de576\"></a>\ntypedef mat&lt; 3, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaa6c69f04ba95f3faedf95dae874de576\">float3x2</a></td></tr>\n<tr class=\"memdesc:gaa6c69f04ba95f3faedf95dae874de576\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaa6c69f04ba95f3faedf95dae874de576\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6ceb5d38a58becdf420026e12a6562f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6ceb5d38a58becdf420026e12a6562f3\"></a>\ntypedef mat&lt; 3, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga6ceb5d38a58becdf420026e12a6562f3\">float3x3</a></td></tr>\n<tr class=\"memdesc:ga6ceb5d38a58becdf420026e12a6562f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga6ceb5d38a58becdf420026e12a6562f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d2679c321b793ca3784fe0315bb5332\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4d2679c321b793ca3784fe0315bb5332\"></a>\ntypedef mat&lt; 3, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4d2679c321b793ca3784fe0315bb5332\">float3x4</a></td></tr>\n<tr class=\"memdesc:ga4d2679c321b793ca3784fe0315bb5332\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga4d2679c321b793ca3784fe0315bb5332\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae2da7345087db3815a25d8837a727ef1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae2da7345087db3815a25d8837a727ef1\"></a>\ntypedef vec&lt; 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gae2da7345087db3815a25d8837a727ef1\">float4</a></td></tr>\n<tr class=\"memdesc:gae2da7345087db3815a25d8837a727ef1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gae2da7345087db3815a25d8837a727ef1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga308b9af0c221145bcfe9bfc129d9098e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga308b9af0c221145bcfe9bfc129d9098e\"></a>\ntypedef mat&lt; 4, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga308b9af0c221145bcfe9bfc129d9098e\">float4x2</a></td></tr>\n<tr class=\"memdesc:ga308b9af0c221145bcfe9bfc129d9098e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga308b9af0c221145bcfe9bfc129d9098e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0a51b4812038aa81d73ffcc37f741ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac0a51b4812038aa81d73ffcc37f741ac\"></a>\ntypedef mat&lt; 4, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac0a51b4812038aa81d73ffcc37f741ac\">float4x3</a></td></tr>\n<tr class=\"memdesc:gac0a51b4812038aa81d73ffcc37f741ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gac0a51b4812038aa81d73ffcc37f741ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad3051649b3715d828a4ab92cdae7c3bf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad3051649b3715d828a4ab92cdae7c3bf\"></a>\ntypedef mat&lt; 4, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gad3051649b3715d828a4ab92cdae7c3bf\">float4x4</a></td></tr>\n<tr class=\"memdesc:gad3051649b3715d828a4ab92cdae7c3bf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gad3051649b3715d828a4ab92cdae7c3bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0670a2111b5e4a6410bd027fa0232fc3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0670a2111b5e4a6410bd027fa0232fc3\"></a>\ntypedef int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3\">int1</a></td></tr>\n<tr class=\"memdesc:ga0670a2111b5e4a6410bd027fa0232fc3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer vector with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga0670a2111b5e4a6410bd027fa0232fc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga056ffe02d3a45af626f8e62221881c7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga056ffe02d3a45af626f8e62221881c7a\"></a>\ntypedef int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga056ffe02d3a45af626f8e62221881c7a\">int1x1</a></td></tr>\n<tr class=\"memdesc:ga056ffe02d3a45af626f8e62221881c7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga056ffe02d3a45af626f8e62221881c7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe3a8fd56354caafe24bfe1b1e3ad22a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafe3a8fd56354caafe24bfe1b1e3ad22a\"></a>\ntypedef vec&lt; 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a\">int2</a></td></tr>\n<tr class=\"memdesc:gafe3a8fd56354caafe24bfe1b1e3ad22a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer vector with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gafe3a8fd56354caafe24bfe1b1e3ad22a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e5ce477c15836b21e3c42daac68554d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4e5ce477c15836b21e3c42daac68554d\"></a>\ntypedef mat&lt; 2, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4e5ce477c15836b21e3c42daac68554d\">int2x2</a></td></tr>\n<tr class=\"memdesc:ga4e5ce477c15836b21e3c42daac68554d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga4e5ce477c15836b21e3c42daac68554d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga197ded5ad8354f6b6fb91189d7a269b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga197ded5ad8354f6b6fb91189d7a269b3\"></a>\ntypedef mat&lt; 2, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3\">int2x3</a></td></tr>\n<tr class=\"memdesc:ga197ded5ad8354f6b6fb91189d7a269b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga197ded5ad8354f6b6fb91189d7a269b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2749d59a7fddbac44f34ba78e57ef807\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2749d59a7fddbac44f34ba78e57ef807\"></a>\ntypedef mat&lt; 2, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga2749d59a7fddbac44f34ba78e57ef807\">int2x4</a></td></tr>\n<tr class=\"memdesc:ga2749d59a7fddbac44f34ba78e57ef807\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga2749d59a7fddbac44f34ba78e57ef807\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga909c38a425f215a50c847145d7da09f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga909c38a425f215a50c847145d7da09f0\"></a>\ntypedef vec&lt; 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga909c38a425f215a50c847145d7da09f0\">int3</a></td></tr>\n<tr class=\"memdesc:ga909c38a425f215a50c847145d7da09f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer vector with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga909c38a425f215a50c847145d7da09f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4cbe16a92cf3664376c7a2fc5126aa8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa4cbe16a92cf3664376c7a2fc5126aa8\"></a>\ntypedef mat&lt; 3, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8\">int3x2</a></td></tr>\n<tr class=\"memdesc:gaa4cbe16a92cf3664376c7a2fc5126aa8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaa4cbe16a92cf3664376c7a2fc5126aa8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga15c9649286f0bf431bdf9b3509580048\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga15c9649286f0bf431bdf9b3509580048\"></a>\ntypedef mat&lt; 3, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga15c9649286f0bf431bdf9b3509580048\">int3x3</a></td></tr>\n<tr class=\"memdesc:ga15c9649286f0bf431bdf9b3509580048\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga15c9649286f0bf431bdf9b3509580048\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaacac46ddc7d15d0f9529d05c92946a0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaacac46ddc7d15d0f9529d05c92946a0f\"></a>\ntypedef mat&lt; 3, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f\">int3x4</a></td></tr>\n<tr class=\"memdesc:gaacac46ddc7d15d0f9529d05c92946a0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaacac46ddc7d15d0f9529d05c92946a0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaecdef18c819c205aeee9f94dc93de56a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaecdef18c819c205aeee9f94dc93de56a\"></a>\ntypedef vec&lt; 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaecdef18c819c205aeee9f94dc93de56a\">int4</a></td></tr>\n<tr class=\"memdesc:gaecdef18c819c205aeee9f94dc93de56a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer vector with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaecdef18c819c205aeee9f94dc93de56a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga97a39dd9bc7d572810d80b8467cbffa1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga97a39dd9bc7d572810d80b8467cbffa1\"></a>\ntypedef mat&lt; 4, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1\">int4x2</a></td></tr>\n<tr class=\"memdesc:ga97a39dd9bc7d572810d80b8467cbffa1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga97a39dd9bc7d572810d80b8467cbffa1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4a2c53f14aeec9a17c2b81142b7e82d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae4a2c53f14aeec9a17c2b81142b7e82d\"></a>\ntypedef mat&lt; 4, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d\">int4x3</a></td></tr>\n<tr class=\"memdesc:gae4a2c53f14aeec9a17c2b81142b7e82d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gae4a2c53f14aeec9a17c2b81142b7e82d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04dee1552424198b8f58b377c2ee00d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga04dee1552424198b8f58b377c2ee00d8\"></a>\ntypedef mat&lt; 4, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga04dee1552424198b8f58b377c2ee00d8\">int4x4</a></td></tr>\n<tr class=\"memdesc:ga04dee1552424198b8f58b377c2ee00d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga04dee1552424198b8f58b377c2ee00d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gac63011205bf6d0be82589dc56dd26708\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gac63011205bf6d0be82589dc56dd26708\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac63011205bf6d0be82589dc56dd26708\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac63011205bf6d0be82589dc56dd26708\">atan2</a> (T x, T y)</td></tr>\n<tr class=\"memdesc:gac63011205bf6d0be82589dc56dd26708\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gac63011205bf6d0be82589dc56dd26708\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83bc41bd6f89113ee8006576b12bfc50\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga83bc41bd6f89113ee8006576b12bfc50\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga83bc41bd6f89113ee8006576b12bfc50\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga83bc41bd6f89113ee8006576b12bfc50\">atan2</a> (const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y)</td></tr>\n<tr class=\"memdesc:ga83bc41bd6f89113ee8006576b12bfc50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga83bc41bd6f89113ee8006576b12bfc50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac39314f5087e7e51e592897cabbc1927\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gac39314f5087e7e51e592897cabbc1927\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac39314f5087e7e51e592897cabbc1927\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac39314f5087e7e51e592897cabbc1927\">atan2</a> (const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y)</td></tr>\n<tr class=\"memdesc:gac39314f5087e7e51e592897cabbc1927\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gac39314f5087e7e51e592897cabbc1927\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaba86c28da7bf5bdac64fecf7d56e8ff3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaba86c28da7bf5bdac64fecf7d56e8ff3\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaba86c28da7bf5bdac64fecf7d56e8ff3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3\">atan2</a> (const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y)</td></tr>\n<tr class=\"memdesc:gaba86c28da7bf5bdac64fecf7d56e8ff3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaba86c28da7bf5bdac64fecf7d56e8ff3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4b04dcd3526996d68c1bfe17bfc8657\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaf4b04dcd3526996d68c1bfe17bfc8657\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaf4b04dcd3526996d68c1bfe17bfc8657\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaf4b04dcd3526996d68c1bfe17bfc8657\">isfinite</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf4b04dcd3526996d68c1bfe17bfc8657\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaf4b04dcd3526996d68c1bfe17bfc8657\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3b12b8ac3014418fe53c299478b6603\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gac3b12b8ac3014418fe53c299478b6603\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac3b12b8ac3014418fe53c299478b6603\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac3b12b8ac3014418fe53c299478b6603\">isfinite</a> (const vec&lt; 1, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:gac3b12b8ac3014418fe53c299478b6603\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gac3b12b8ac3014418fe53c299478b6603\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e76dc3e406ce6a4155c2b12a2e4b084\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga8e76dc3e406ce6a4155c2b12a2e4b084\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8e76dc3e406ce6a4155c2b12a2e4b084\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga8e76dc3e406ce6a4155c2b12a2e4b084\">isfinite</a> (const vec&lt; 2, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga8e76dc3e406ce6a4155c2b12a2e4b084\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga8e76dc3e406ce6a4155c2b12a2e4b084\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga929ef27f896d902c1771a2e5e150fc97\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga929ef27f896d902c1771a2e5e150fc97\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga929ef27f896d902c1771a2e5e150fc97\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga929ef27f896d902c1771a2e5e150fc97\">isfinite</a> (const vec&lt; 3, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga929ef27f896d902c1771a2e5e150fc97\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga929ef27f896d902c1771a2e5e150fc97\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19925badbe10ce61df1d0de00be0b5ad\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga19925badbe10ce61df1d0de00be0b5ad\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga19925badbe10ce61df1d0de00be0b5ad\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga19925badbe10ce61df1d0de00be0b5ad\">isfinite</a> (const vec&lt; 4, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga19925badbe10ce61df1d0de00be0b5ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga19925badbe10ce61df1d0de00be0b5ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5494ba3a95ea6594c86fc75236886864\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga5494ba3a95ea6594c86fc75236886864\"></a>\ntemplate&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga5494ba3a95ea6594c86fc75236886864\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga5494ba3a95ea6594c86fc75236886864\">lerp</a> (T x, T y, T a)</td></tr>\n<tr class=\"memdesc:ga5494ba3a95ea6594c86fc75236886864\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga5494ba3a95ea6594c86fc75236886864\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa551c0a0e16d2d4608e49f7696df897f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaa551c0a0e16d2d4608e49f7696df897f\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa551c0a0e16d2d4608e49f7696df897f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaa551c0a0e16d2d4608e49f7696df897f\">lerp</a> (const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y, T a)</td></tr>\n<tr class=\"memdesc:gaa551c0a0e16d2d4608e49f7696df897f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaa551c0a0e16d2d4608e49f7696df897f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga44a8b5fd776320f1713413dec959b32a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga44a8b5fd776320f1713413dec959b32a\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga44a8b5fd776320f1713413dec959b32a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga44a8b5fd776320f1713413dec959b32a\">lerp</a> (const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y, T a)</td></tr>\n<tr class=\"memdesc:ga44a8b5fd776320f1713413dec959b32a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga44a8b5fd776320f1713413dec959b32a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga89ac8e000199292ec7875519d27e214b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga89ac8e000199292ec7875519d27e214b\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga89ac8e000199292ec7875519d27e214b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga89ac8e000199292ec7875519d27e214b\">lerp</a> (const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, T a)</td></tr>\n<tr class=\"memdesc:ga89ac8e000199292ec7875519d27e214b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga89ac8e000199292ec7875519d27e214b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf68de5baf72d16135368b8ef4f841604\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaf68de5baf72d16135368b8ef4f841604\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf68de5baf72d16135368b8ef4f841604\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaf68de5baf72d16135368b8ef4f841604\">lerp</a> (const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y, const vec&lt; 2, T, Q &gt; &amp;a)</td></tr>\n<tr class=\"memdesc:gaf68de5baf72d16135368b8ef4f841604\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaf68de5baf72d16135368b8ef4f841604\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4ae1a616c8540a2649eab8e0cd051bb3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga4ae1a616c8540a2649eab8e0cd051bb3\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4ae1a616c8540a2649eab8e0cd051bb3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4ae1a616c8540a2649eab8e0cd051bb3\">lerp</a> (const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y, const vec&lt; 3, T, Q &gt; &amp;a)</td></tr>\n<tr class=\"memdesc:ga4ae1a616c8540a2649eab8e0cd051bb3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga4ae1a616c8540a2649eab8e0cd051bb3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab5477ab69c40de4db5d58d3359529724\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gab5477ab69c40de4db5d58d3359529724\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab5477ab69c40de4db5d58d3359529724\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a> (const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, const vec&lt; 4, T, Q &gt; &amp;a)</td></tr>\n<tr class=\"memdesc:gab5477ab69c40de4db5d58d3359529724\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gab5477ab69c40de4db5d58d3359529724\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0fd09e616d122bc2ed9726682ffd44b7\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga0fd09e616d122bc2ed9726682ffd44b7\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0fd09e616d122bc2ed9726682ffd44b7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga0fd09e616d122bc2ed9726682ffd44b7\">saturate</a> (T x)</td></tr>\n<tr class=\"memdesc:ga0fd09e616d122bc2ed9726682ffd44b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga0fd09e616d122bc2ed9726682ffd44b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee97b8001c794a78a44f5d59f62a8aba\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaee97b8001c794a78a44f5d59f62a8aba\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaee97b8001c794a78a44f5d59f62a8aba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaee97b8001c794a78a44f5d59f62a8aba\">saturate</a> (const vec&lt; 2, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:gaee97b8001c794a78a44f5d59f62a8aba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaee97b8001c794a78a44f5d59f62a8aba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39bfe3a421286ee31680d45c31ccc161\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga39bfe3a421286ee31680d45c31ccc161\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga39bfe3a421286ee31680d45c31ccc161\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga39bfe3a421286ee31680d45c31ccc161\">saturate</a> (const vec&lt; 3, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga39bfe3a421286ee31680d45c31ccc161\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga39bfe3a421286ee31680d45c31ccc161\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga356f8c3a7e7d6376d3d4b0a026407183\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga356f8c3a7e7d6376d3d4b0a026407183\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga356f8c3a7e7d6376d3d4b0a026407183\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183\">saturate</a> (const vec&lt; 4, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga356f8c3a7e7d6376d3d4b0a026407183\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga356f8c3a7e7d6376d3d4b0a026407183\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00315.html\">GLM_GTX_compatibility</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00017_source.html\">compatibility.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00017_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: compatibility.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">compatibility.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00017.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_compatibility is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_compatibility extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       include &lt;cfloat&gt;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#elif GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#       include &lt;cmath&gt;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#       if(GLM_PLATFORM &amp; GLM_PLATFORM_ANDROID)</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#               undef isfinite</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#endif//GLM_COMPILER</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga5494ba3a95ea6594c86fc75236886864\">   41</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt; GLM_FUNC_QUALIFIER T <a class=\"code\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a>(T x, T y, T a){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(x, y, a);}                                                                                                                                                                     </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaa551c0a0e16d2d4608e49f7696df897f\">   42</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a>(<span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; y, T a){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(x, y, a);}                                                 </div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga44a8b5fd776320f1713413dec959b32a\">   44</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a>(<span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; y, T a){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(x, y, a);}                                                 </div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga89ac8e000199292ec7875519d27e214b\">   45</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a>(<span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; y, T a){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(x, y, a);}                                                 </div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaf68de5baf72d16135368b8ef4f841604\">   46</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a>(<span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; y, <span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; a){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(x, y, a);}       </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga4ae1a616c8540a2649eab8e0cd051bb3\">   47</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a>(<span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; y, <span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; a){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(x, y, a);}       </div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">   48</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a>(<span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; y, <span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; a){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(x, y, a);}       </div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga0fd09e616d122bc2ed9726682ffd44b7\">   50</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER T <a class=\"code\" href=\"a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183\">saturate</a>(T x){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">clamp</a>(x, T(0), T(1));}                                                                                                              </div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaee97b8001c794a78a44f5d59f62a8aba\">   51</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183\">saturate</a>(<span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; x){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">clamp</a>(x, T(0), T(1));}                                 </div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga39bfe3a421286ee31680d45c31ccc161\">   52</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183\">saturate</a>(<span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; x){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">clamp</a>(x, T(0), T(1));}                                 </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183\">   53</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183\">saturate</a>(<span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; x){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">clamp</a>(x, T(0), T(1));}                                 </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gac63011205bf6d0be82589dc56dd26708\">   55</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER T <a class=\"code\" href=\"a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3\">atan2</a>(T x, T y){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">atan</a>(x, y);}                                                                                                                              </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga83bc41bd6f89113ee8006576b12bfc50\">   56</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3\">atan2</a>(<span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; y){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">atan</a>(x, y);}       </div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gac39314f5087e7e51e592897cabbc1927\">   57</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3\">atan2</a>(<span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; y){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">atan</a>(x, y);}       </div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3\">   58</a></span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_QUALIFIER vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3\">atan2</a>(<span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; x, <span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; y){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">atan</a>(x, y);}       </div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt; GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00315.html#ga19925badbe10ce61df1d0de00be0b5ad\">isfinite</a>(genType <span class=\"keyword\">const</span>&amp; x);                                                                                       </div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_DECL vec&lt;1, bool, Q&gt; <a class=\"code\" href=\"a00315.html#ga19925badbe10ce61df1d0de00be0b5ad\">isfinite</a>(<span class=\"keyword\">const</span> vec&lt;1, T, Q&gt;&amp; x);                                </div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_DECL vec&lt;2, bool, Q&gt; <a class=\"code\" href=\"a00315.html#ga19925badbe10ce61df1d0de00be0b5ad\">isfinite</a>(<span class=\"keyword\">const</span> vec&lt;2, T, Q&gt;&amp; x);                                </div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_DECL vec&lt;3, bool, Q&gt; <a class=\"code\" href=\"a00315.html#ga19925badbe10ce61df1d0de00be0b5ad\">isfinite</a>(<span class=\"keyword\">const</span> vec&lt;3, T, Q&gt;&amp; x);                                </div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt; GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00315.html#ga19925badbe10ce61df1d0de00be0b5ad\">isfinite</a>(<span class=\"keyword\">const</span> vec&lt;4, T, Q&gt;&amp; x);                                </div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaddcd7aa2e30e61af5b38660613d3979e\">   66</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">bool</span>                                            <a class=\"code\" href=\"a00315.html#gaddcd7aa2e30e61af5b38660613d3979e\">bool1</a>;                  </div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9\">   67</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, highp&gt;                     <a class=\"code\" href=\"a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9\">bool2</a>;                  </div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga99629f818737f342204071ef8296b2ed\">   68</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, highp&gt;                     <a class=\"code\" href=\"a00315.html#ga99629f818737f342204071ef8296b2ed\">bool3</a>;                  </div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga13c3200b82708f73faac6d7f09ec91a3\">   69</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, highp&gt;                     <a class=\"code\" href=\"a00315.html#ga13c3200b82708f73faac6d7f09ec91a3\">bool4</a>;                  </div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga7f895c936f0c29c8729afbbf22806090\">   71</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">bool</span>                                            <a class=\"code\" href=\"a00315.html#ga7f895c936f0c29c8729afbbf22806090\">bool1x1</a>;                </div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gadb3703955e513632f98ba12fe051ba3e\">   72</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#gadb3703955e513632f98ba12fe051ba3e\">bool2x2</a>;                </div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0\">   73</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0\">bool2x3</a>;                </div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f\">   74</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f\">bool2x4</a>;                </div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gac7d7311f7e0fa8b6163d96dab033a755\">   75</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#gac7d7311f7e0fa8b6163d96dab033a755\">bool3x2</a>;                </div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga6c97b99aac3e302053ffb58aace9033c\">   76</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#ga6c97b99aac3e302053ffb58aace9033c\">bool3x3</a>;                </div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gae7d6b679463d37d6c527d478fb470fdf\">   77</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#gae7d6b679463d37d6c527d478fb470fdf\">bool3x4</a>;                </div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0\">   78</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0\">bool4x2</a>;                </div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe\">   79</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe\">bool4x3</a>;                </div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga7d2a7d13986602ae2896bfaa394235d4\">   80</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, bool, highp&gt;          <a class=\"code\" href=\"a00315.html#ga7d2a7d13986602ae2896bfaa394235d4\">bool4x4</a>;                </div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3\">   82</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">int</span>                                                     <a class=\"code\" href=\"a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3\">int1</a>;                   </div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a\">   83</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, highp&gt;                      <a class=\"code\" href=\"a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a\">int2</a>;                   </div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga909c38a425f215a50c847145d7da09f0\">   84</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, highp&gt;                      <a class=\"code\" href=\"a00315.html#ga909c38a425f215a50c847145d7da09f0\">int3</a>;                   </div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaecdef18c819c205aeee9f94dc93de56a\">   85</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, highp&gt;                      <a class=\"code\" href=\"a00315.html#gaecdef18c819c205aeee9f94dc93de56a\">int4</a>;                   </div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga056ffe02d3a45af626f8e62221881c7a\">   87</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">int</span>                                                     <a class=\"code\" href=\"a00315.html#ga056ffe02d3a45af626f8e62221881c7a\">int1x1</a>;                 </div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga4e5ce477c15836b21e3c42daac68554d\">   88</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, int, highp&gt;           <a class=\"code\" href=\"a00315.html#ga4e5ce477c15836b21e3c42daac68554d\">int2x2</a>;                 </div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3\">   89</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, int, highp&gt;           <a class=\"code\" href=\"a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3\">int2x3</a>;                 </div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga2749d59a7fddbac44f34ba78e57ef807\">   90</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, int, highp&gt;           <a class=\"code\" href=\"a00315.html#ga2749d59a7fddbac44f34ba78e57ef807\">int2x4</a>;                 </div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8\">   91</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, int, highp&gt;           <a class=\"code\" href=\"a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8\">int3x2</a>;                 </div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga15c9649286f0bf431bdf9b3509580048\">   92</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, int, highp&gt;           <a class=\"code\" href=\"a00315.html#ga15c9649286f0bf431bdf9b3509580048\">int3x3</a>;                 </div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f\">   93</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, int, highp&gt;           <a class=\"code\" href=\"a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f\">int3x4</a>;                 </div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1\">   94</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, int, highp&gt;           <a class=\"code\" href=\"a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1\">int4x2</a>;                 </div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d\">   95</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, int, highp&gt;           <a class=\"code\" href=\"a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d\">int4x3</a>;                 </div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga04dee1552424198b8f58b377c2ee00d8\">   96</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, int, highp&gt;           <a class=\"code\" href=\"a00315.html#ga04dee1552424198b8f58b377c2ee00d8\">int4x4</a>;                 </div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead\">   98</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                           <a class=\"code\" href=\"a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead\">float1</a>;                 </div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga02d3c013982c183906c61d74aa3166ce\">   99</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, highp&gt;            <a class=\"code\" href=\"a00315.html#ga02d3c013982c183906c61d74aa3166ce\">float2</a>;                 </div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga821ff110fc8533a053cbfcc93e078cc0\">  100</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, highp&gt;            <a class=\"code\" href=\"a00315.html#ga821ff110fc8533a053cbfcc93e078cc0\">float3</a>;                 </div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gae2da7345087db3815a25d8837a727ef1\">  101</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, highp&gt;            <a class=\"code\" href=\"a00315.html#gae2da7345087db3815a25d8837a727ef1\">float4</a>;                 </div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga73720b8dc4620835b17f74d428f98c0c\">  103</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                           <a class=\"code\" href=\"a00315.html#ga73720b8dc4620835b17f74d428f98c0c\">float1x1</a>;               </div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f\">  104</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, highp&gt;         <a class=\"code\" href=\"a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f\">float2x2</a>;               </div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe\">  105</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, highp&gt;         <a class=\"code\" href=\"a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe\">float2x3</a>;               </div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gafec3cfd901ab334a92e0242b8f2269b4\">  106</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, highp&gt;         <a class=\"code\" href=\"a00315.html#gafec3cfd901ab334a92e0242b8f2269b4\">float2x4</a>;               </div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaa6c69f04ba95f3faedf95dae874de576\">  107</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, highp&gt;         <a class=\"code\" href=\"a00315.html#gaa6c69f04ba95f3faedf95dae874de576\">float3x2</a>;               </div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga6ceb5d38a58becdf420026e12a6562f3\">  108</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, highp&gt;         <a class=\"code\" href=\"a00315.html#ga6ceb5d38a58becdf420026e12a6562f3\">float3x3</a>;               </div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga4d2679c321b793ca3784fe0315bb5332\">  109</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, highp&gt;         <a class=\"code\" href=\"a00315.html#ga4d2679c321b793ca3784fe0315bb5332\">float3x4</a>;               </div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga308b9af0c221145bcfe9bfc129d9098e\">  110</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, highp&gt;         <a class=\"code\" href=\"a00315.html#ga308b9af0c221145bcfe9bfc129d9098e\">float4x2</a>;               </div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gac0a51b4812038aa81d73ffcc37f741ac\">  111</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, highp&gt;         <a class=\"code\" href=\"a00315.html#gac0a51b4812038aa81d73ffcc37f741ac\">float4x3</a>;               </div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gad3051649b3715d828a4ab92cdae7c3bf\">  112</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, highp&gt;         <a class=\"code\" href=\"a00315.html#gad3051649b3715d828a4ab92cdae7c3bf\">float4x4</a>;               </div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga20b861a9b6e2a300323671c57a02525b\">  114</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                          <a class=\"code\" href=\"a00315.html#ga20b861a9b6e2a300323671c57a02525b\">double1</a>;                </div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga31b729b04facccda73f07ed26958b3c2\">  115</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, highp&gt;           <a class=\"code\" href=\"a00315.html#ga31b729b04facccda73f07ed26958b3c2\">double2</a>;                </div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga3d8b9028a1053a44a98902cd1c389472\">  116</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, highp&gt;           <a class=\"code\" href=\"a00315.html#ga3d8b9028a1053a44a98902cd1c389472\">double3</a>;                </div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaf92f58af24f35617518aeb3d4f63fda6\">  117</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, highp&gt;           <a class=\"code\" href=\"a00315.html#gaf92f58af24f35617518aeb3d4f63fda6\">double4</a>;                </div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8\">  119</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                          <a class=\"code\" href=\"a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8\">double1x1</a>;              </div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gae57d0201096834d25f2b91b319e7cdbd\">  120</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, highp&gt;                <a class=\"code\" href=\"a00315.html#gae57d0201096834d25f2b91b319e7cdbd\">double2x2</a>;              </div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga3655bc324008553ca61f39952d0b2d08\">  121</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, highp&gt;                <a class=\"code\" href=\"a00315.html#ga3655bc324008553ca61f39952d0b2d08\">double2x3</a>;              </div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a\">  122</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, highp&gt;                <a class=\"code\" href=\"a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a\">double2x4</a>;              </div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga5ec08fc39c9d783dfcc488be240fe975\">  123</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, highp&gt;                <a class=\"code\" href=\"a00315.html#ga5ec08fc39c9d783dfcc488be240fe975\">double3x2</a>;              </div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180\">  124</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, highp&gt;                <a class=\"code\" href=\"a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180\">double3x3</a>;              </div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#ga2ef022e453d663d70aec414b2a80f756\">  125</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, highp&gt;                <a class=\"code\" href=\"a00315.html#ga2ef022e453d663d70aec414b2a80f756\">double3x4</a>;              </div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gabca29ccceea53669618b751aae0ba83d\">  126</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, highp&gt;                <a class=\"code\" href=\"a00315.html#gabca29ccceea53669618b751aae0ba83d\">double4x2</a>;              </div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c\">  127</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, highp&gt;                <a class=\"code\" href=\"a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c\">double4x3</a>;              </div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00315.html#gaab541bed2e788e4537852a2492860806\">  128</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, highp&gt;                <a class=\"code\" href=\"a00315.html#gaab541bed2e788e4537852a2492860806\">double4x4</a>;              </div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;<span class=\"preprocessor\">#include &quot;compatibility.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00315_html_gaab541bed2e788e4537852a2492860806\"><div class=\"ttname\"><a href=\"a00315.html#gaab541bed2e788e4537852a2492860806\">glm::double4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, highp &gt; double4x4</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00128\">compatibility.hpp:128</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gaacac46ddc7d15d0f9529d05c92946a0f\"><div class=\"ttname\"><a href=\"a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f\">glm::int3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, int, highp &gt; int3x4</div><div class=\"ttdoc\">integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00093\">compatibility.hpp:93</a></div></div>\n<div class=\"ttc\" id=\"a00373_html_gac61629f3a4aa14057e7a8cae002291db\"><div class=\"ttname\"><a href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">glm::atan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; atan(vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Arc tangent. </div></div>\n<div class=\"ttc\" id=\"a00315_html_gaddcd7aa2e30e61af5b38660613d3979e\"><div class=\"ttname\"><a href=\"a00315.html#gaddcd7aa2e30e61af5b38660613d3979e\">glm::bool1</a></div><div class=\"ttdeci\">bool bool1</div><div class=\"ttdoc\">boolean type with 1 component. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00066\">compatibility.hpp:66</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gac0a51b4812038aa81d73ffcc37f741ac\"><div class=\"ttname\"><a href=\"a00315.html#gac0a51b4812038aa81d73ffcc37f741ac\">glm::float4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, highp &gt; float4x3</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00111\">compatibility.hpp:111</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gad3051649b3715d828a4ab92cdae7c3bf\"><div class=\"ttname\"><a href=\"a00315.html#gad3051649b3715d828a4ab92cdae7c3bf\">glm::float4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, highp &gt; float4x4</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00112\">compatibility.hpp:112</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gacd33061fc64a7b2dcfd7322c49d9557a\"><div class=\"ttname\"><a href=\"a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a\">glm::double2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, highp &gt; double2x4</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00122\">compatibility.hpp:122</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gae57d0201096834d25f2b91b319e7cdbd\"><div class=\"ttname\"><a href=\"a00315.html#gae57d0201096834d25f2b91b319e7cdbd\">glm::double2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, highp &gt; double2x2</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00120\">compatibility.hpp:120</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga5ec08fc39c9d783dfcc488be240fe975\"><div class=\"ttname\"><a href=\"a00315.html#ga5ec08fc39c9d783dfcc488be240fe975\">glm::double3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, highp &gt; double3x2</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00123\">compatibility.hpp:123</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gaba86c28da7bf5bdac64fecf7d56e8ff3\"><div class=\"ttname\"><a href=\"a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3\">glm::atan2</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt; atan2(const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y)</div><div class=\"ttdoc\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what q...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00058\">compatibility.hpp:58</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga45f16a4dd0db1f199afaed9fd12fe9a8\"><div class=\"ttname\"><a href=\"a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8\">glm::double1x1</a></div><div class=\"ttdeci\">double double1x1</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00119\">compatibility.hpp:119</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gab5477ab69c40de4db5d58d3359529724\"><div class=\"ttname\"><a href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">glm::lerp</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt; lerp(const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, const vec&lt; 4, T, Q &gt; &amp;a)</div><div class=\"ttdoc\">Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using v...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00048\">compatibility.hpp:48</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga4bad5bb20c6ddaecfe4006c93841d180\"><div class=\"ttname\"><a href=\"a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180\">glm::double3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, highp &gt; double3x3</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00124\">compatibility.hpp:124</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gae2da7345087db3815a25d8837a727ef1\"><div class=\"ttname\"><a href=\"a00315.html#gae2da7345087db3815a25d8837a727ef1\">glm::float4</a></div><div class=\"ttdeci\">vec&lt; 4, float, highp &gt; float4</div><div class=\"ttdoc\">single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00101\">compatibility.hpp:101</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga056ffe02d3a45af626f8e62221881c7a\"><div class=\"ttname\"><a href=\"a00315.html#ga056ffe02d3a45af626f8e62221881c7a\">glm::int1x1</a></div><div class=\"ttdeci\">int int1x1</div><div class=\"ttdoc\">integer matrix with 1 component. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00087\">compatibility.hpp:87</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga02d3c013982c183906c61d74aa3166ce\"><div class=\"ttname\"><a href=\"a00315.html#ga02d3c013982c183906c61d74aa3166ce\">glm::float2</a></div><div class=\"ttdeci\">vec&lt; 2, float, highp &gt; float2</div><div class=\"ttdoc\">single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00099\">compatibility.hpp:99</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga19925badbe10ce61df1d0de00be0b5ad\"><div class=\"ttname\"><a href=\"a00315.html#ga19925badbe10ce61df1d0de00be0b5ad\">glm::isfinite</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; isfinite(const vec&lt; 4, T, Q &gt; &amp;x)</div><div class=\"ttdoc\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)...</div></div>\n<div class=\"ttc\" id=\"a00315_html_ga9ae6ee155d0f90cb1ae5b6c4546738a0\"><div class=\"ttname\"><a href=\"a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0\">glm::bool2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, bool, highp &gt; bool2x3</div><div class=\"ttdoc\">boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00073\">compatibility.hpp:73</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga197ded5ad8354f6b6fb91189d7a269b3\"><div class=\"ttname\"><a href=\"a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3\">glm::int2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, int, highp &gt; int2x3</div><div class=\"ttdoc\">integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00089\">compatibility.hpp:89</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga0670a2111b5e4a6410bd027fa0232fc3\"><div class=\"ttname\"><a href=\"a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3\">glm::int1</a></div><div class=\"ttdeci\">int int1</div><div class=\"ttdoc\">integer vector with 1 component. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00082\">compatibility.hpp:82</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga821ff110fc8533a053cbfcc93e078cc0\"><div class=\"ttname\"><a href=\"a00315.html#ga821ff110fc8533a053cbfcc93e078cc0\">glm::float3</a></div><div class=\"ttdeci\">vec&lt; 3, float, highp &gt; float3</div><div class=\"ttdoc\">single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00100\">compatibility.hpp:100</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gafec3cfd901ab334a92e0242b8f2269b4\"><div class=\"ttname\"><a href=\"a00315.html#gafec3cfd901ab334a92e0242b8f2269b4\">glm::float2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, highp &gt; float2x4</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00106\">compatibility.hpp:106</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gadb3703955e513632f98ba12fe051ba3e\"><div class=\"ttname\"><a href=\"a00315.html#gadb3703955e513632f98ba12fe051ba3e\">glm::bool2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, bool, highp &gt; bool2x2</div><div class=\"ttdoc\">boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00072\">compatibility.hpp:72</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga7d2a7d13986602ae2896bfaa394235d4\"><div class=\"ttname\"><a href=\"a00315.html#ga7d2a7d13986602ae2896bfaa394235d4\">glm::bool4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, bool, highp &gt; bool4x4</div><div class=\"ttdoc\">boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00080\">compatibility.hpp:80</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gaf5208d01f6c6fbcb7bb55d610b9c0ead\"><div class=\"ttname\"><a href=\"a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead\">glm::float1</a></div><div class=\"ttdeci\">float float1</div><div class=\"ttdoc\">single-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00098\">compatibility.hpp:98</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga73720b8dc4620835b17f74d428f98c0c\"><div class=\"ttname\"><a href=\"a00315.html#ga73720b8dc4620835b17f74d428f98c0c\">glm::float1x1</a></div><div class=\"ttdeci\">float float1x1</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00103\">compatibility.hpp:103</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gabca29ccceea53669618b751aae0ba83d\"><div class=\"ttname\"><a href=\"a00315.html#gabca29ccceea53669618b751aae0ba83d\">glm::double4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, highp &gt; double4x2</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00126\">compatibility.hpp:126</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gae4a2c53f14aeec9a17c2b81142b7e82d\"><div class=\"ttname\"><a href=\"a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d\">glm::int4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, int, highp &gt; int4x3</div><div class=\"ttdoc\">integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00095\">compatibility.hpp:95</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga9ed830f52408b2f83c085063a3eaf1d0\"><div class=\"ttname\"><a href=\"a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0\">glm::bool4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, bool, highp &gt; bool4x2</div><div class=\"ttdoc\">boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00078\">compatibility.hpp:78</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga33d43ecbb60a85a1366ff83f8a0ec85f\"><div class=\"ttname\"><a href=\"a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f\">glm::float2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, highp &gt; float2x2</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00104\">compatibility.hpp:104</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga909c38a425f215a50c847145d7da09f0\"><div class=\"ttname\"><a href=\"a00315.html#ga909c38a425f215a50c847145d7da09f0\">glm::int3</a></div><div class=\"ttdeci\">vec&lt; 3, int, highp &gt; int3</div><div class=\"ttdoc\">integer vector with 3 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00084\">compatibility.hpp:84</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga308b9af0c221145bcfe9bfc129d9098e\"><div class=\"ttname\"><a href=\"a00315.html#ga308b9af0c221145bcfe9bfc129d9098e\">glm::float4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, highp &gt; float4x2</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00110\">compatibility.hpp:110</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga3655bc324008553ca61f39952d0b2d08\"><div class=\"ttname\"><a href=\"a00315.html#ga3655bc324008553ca61f39952d0b2d08\">glm::double2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, highp &gt; double2x3</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00121\">compatibility.hpp:121</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga939b0cff15cee3030f75c1b2e36f89fe\"><div class=\"ttname\"><a href=\"a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe\">glm::float2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, highp &gt; float2x3</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00105\">compatibility.hpp:105</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gaa4cbe16a92cf3664376c7a2fc5126aa8\"><div class=\"ttname\"><a href=\"a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8\">glm::int3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, int, highp &gt; int3x2</div><div class=\"ttdoc\">integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00091\">compatibility.hpp:91</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga13c3200b82708f73faac6d7f09ec91a3\"><div class=\"ttname\"><a href=\"a00315.html#ga13c3200b82708f73faac6d7f09ec91a3\">glm::bool4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, highp &gt; bool4</div><div class=\"ttdoc\">boolean type with 4 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00069\">compatibility.hpp:69</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga97a39dd9bc7d572810d80b8467cbffa1\"><div class=\"ttname\"><a href=\"a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1\">glm::int4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, int, highp &gt; int4x2</div><div class=\"ttdoc\">integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00094\">compatibility.hpp:94</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga7f895c936f0c29c8729afbbf22806090\"><div class=\"ttname\"><a href=\"a00315.html#ga7f895c936f0c29c8729afbbf22806090\">glm::bool1x1</a></div><div class=\"ttdeci\">bool bool1x1</div><div class=\"ttdoc\">boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00071\">compatibility.hpp:71</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga356f8c3a7e7d6376d3d4b0a026407183\"><div class=\"ttname\"><a href=\"a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183\">glm::saturate</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt; saturate(const vec&lt; 4, T, Q &gt; &amp;x)</div><div class=\"ttdoc\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00053\">compatibility.hpp:53</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga99629f818737f342204071ef8296b2ed\"><div class=\"ttname\"><a href=\"a00315.html#ga99629f818737f342204071ef8296b2ed\">glm::bool3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, highp &gt; bool3</div><div class=\"ttdoc\">boolean type with 3 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00068\">compatibility.hpp:68</a></div></div>\n<div class=\"ttc\" id=\"a00241_html_ga7cd77683da6361e297c56443fc70806d\"><div class=\"ttname\"><a href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">glm::clamp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal)</div><div class=\"ttdoc\">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal an...</div></div>\n<div class=\"ttc\" id=\"a00315_html_ga4e5ce477c15836b21e3c42daac68554d\"><div class=\"ttname\"><a href=\"a00315.html#ga4e5ce477c15836b21e3c42daac68554d\">glm::int2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, int, highp &gt; int2x2</div><div class=\"ttdoc\">integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00088\">compatibility.hpp:88</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gafe3a8fd56354caafe24bfe1b1e3ad22a\"><div class=\"ttname\"><a href=\"a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a\">glm::int2</a></div><div class=\"ttdeci\">vec&lt; 2, int, highp &gt; int2</div><div class=\"ttdoc\">integer vector with 2 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00083\">compatibility.hpp:83</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga04dee1552424198b8f58b377c2ee00d8\"><div class=\"ttname\"><a href=\"a00315.html#ga04dee1552424198b8f58b377c2ee00d8\">glm::int4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, int, highp &gt; int4x4</div><div class=\"ttdoc\">integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00096\">compatibility.hpp:96</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gac7d7311f7e0fa8b6163d96dab033a755\"><div class=\"ttname\"><a href=\"a00315.html#gac7d7311f7e0fa8b6163d96dab033a755\">glm::bool3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, bool, highp &gt; bool3x2</div><div class=\"ttdoc\">boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00075\">compatibility.hpp:75</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gafad66a02ccd360c86d6ab9ff9cfbc19c\"><div class=\"ttname\"><a href=\"a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c\">glm::double4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, highp &gt; double4x3</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00127\">compatibility.hpp:127</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gad0f5dc7f22c2065b1b06d57f1c0658fe\"><div class=\"ttname\"><a href=\"a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe\">glm::bool4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, bool, highp &gt; bool4x3</div><div class=\"ttdoc\">boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00079\">compatibility.hpp:79</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga20b861a9b6e2a300323671c57a02525b\"><div class=\"ttname\"><a href=\"a00315.html#ga20b861a9b6e2a300323671c57a02525b\">glm::double1</a></div><div class=\"ttdeci\">double double1</div><div class=\"ttdoc\">double-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00114\">compatibility.hpp:114</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga3d8b9028a1053a44a98902cd1c389472\"><div class=\"ttname\"><a href=\"a00315.html#ga3d8b9028a1053a44a98902cd1c389472\">glm::double3</a></div><div class=\"ttdeci\">vec&lt; 3, double, highp &gt; double3</div><div class=\"ttdoc\">double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00116\">compatibility.hpp:116</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gaf92f58af24f35617518aeb3d4f63fda6\"><div class=\"ttname\"><a href=\"a00315.html#gaf92f58af24f35617518aeb3d4f63fda6\">glm::double4</a></div><div class=\"ttdeci\">vec&lt; 4, double, highp &gt; double4</div><div class=\"ttdoc\">double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00117\">compatibility.hpp:117</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga15c9649286f0bf431bdf9b3509580048\"><div class=\"ttname\"><a href=\"a00315.html#ga15c9649286f0bf431bdf9b3509580048\">glm::int3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, int, highp &gt; int3x3</div><div class=\"ttdoc\">integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00092\">compatibility.hpp:92</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga6c97b99aac3e302053ffb58aace9033c\"><div class=\"ttname\"><a href=\"a00315.html#ga6c97b99aac3e302053ffb58aace9033c\">glm::bool3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, bool, highp &gt; bool3x3</div><div class=\"ttdoc\">boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00076\">compatibility.hpp:76</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gaa6c69f04ba95f3faedf95dae874de576\"><div class=\"ttname\"><a href=\"a00315.html#gaa6c69f04ba95f3faedf95dae874de576\">glm::float3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, highp &gt; float3x2</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00107\">compatibility.hpp:107</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gaecdef18c819c205aeee9f94dc93de56a\"><div class=\"ttname\"><a href=\"a00315.html#gaecdef18c819c205aeee9f94dc93de56a\">glm::int4</a></div><div class=\"ttdeci\">vec&lt; 4, int, highp &gt; int4</div><div class=\"ttdoc\">integer vector with 4 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00085\">compatibility.hpp:85</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga31b729b04facccda73f07ed26958b3c2\"><div class=\"ttname\"><a href=\"a00315.html#ga31b729b04facccda73f07ed26958b3c2\">glm::double2</a></div><div class=\"ttdeci\">vec&lt; 2, double, highp &gt; double2</div><div class=\"ttdoc\">double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00115\">compatibility.hpp:115</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga6ceb5d38a58becdf420026e12a6562f3\"><div class=\"ttname\"><a href=\"a00315.html#ga6ceb5d38a58becdf420026e12a6562f3\">glm::float3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, highp &gt; float3x3</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00108\">compatibility.hpp:108</a></div></div>\n<div class=\"ttc\" id=\"a00241_html_ga8e93f374aae27d1a88b921860351f8d4\"><div class=\"ttname\"><a href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">glm::mix</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a)</div><div class=\"ttdoc\">If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...</div></div>\n<div class=\"ttc\" id=\"a00315_html_gaa09ab65ec9c3c54305ff502e2b1fe6d9\"><div class=\"ttname\"><a href=\"a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9\">glm::bool2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, highp &gt; bool2</div><div class=\"ttdoc\">boolean type with 2 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00067\">compatibility.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_gae7d6b679463d37d6c527d478fb470fdf\"><div class=\"ttname\"><a href=\"a00315.html#gae7d6b679463d37d6c527d478fb470fdf\">glm::bool3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, bool, highp &gt; bool3x4</div><div class=\"ttdoc\">boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00077\">compatibility.hpp:77</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga2749d59a7fddbac44f34ba78e57ef807\"><div class=\"ttname\"><a href=\"a00315.html#ga2749d59a7fddbac44f34ba78e57ef807\">glm::int2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, int, highp &gt; int2x4</div><div class=\"ttdoc\">integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00090\">compatibility.hpp:90</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga4d7fa65be8e8e4ad6d920b45c44e471f\"><div class=\"ttname\"><a href=\"a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f\">glm::bool2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, bool, highp &gt; bool2x4</div><div class=\"ttdoc\">boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00074\">compatibility.hpp:74</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga2ef022e453d663d70aec414b2a80f756\"><div class=\"ttname\"><a href=\"a00315.html#ga2ef022e453d663d70aec414b2a80f756\">glm::double3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, highp &gt; double3x4</div><div class=\"ttdoc\">double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00125\">compatibility.hpp:125</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00315_html_ga4d2679c321b793ca3784fe0315bb5332\"><div class=\"ttname\"><a href=\"a00315.html#ga4d2679c321b793ca3784fe0315bb5332\">glm::float3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, highp &gt; float3x4</div><div class=\"ttdoc\">single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00017_source.html#l00109\">compatibility.hpp:109</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00018.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: component_wise.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">component_wise.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00316.html\">GLM_GTX_component_wise</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00018_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf71833350e15e74d31cbf8a3e7f27051\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaf71833350e15e74d31cbf8a3e7f27051\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#gaf71833350e15e74d31cbf8a3e7f27051\">compAdd</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf71833350e15e74d31cbf8a3e7f27051\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add all vector components together.  <a href=\"a00316.html#gaf71833350e15e74d31cbf8a3e7f27051\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf71833350e15e74d31cbf8a3e7f27051\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabfa4bb19298c8c73d4217ba759c496b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gabfa4bb19298c8c73d4217ba759c496b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#gabfa4bb19298c8c73d4217ba759c496b6\">compMax</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:gabfa4bb19298c8c73d4217ba759c496b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find the maximum value between single vector components.  <a href=\"a00316.html#gabfa4bb19298c8c73d4217ba759c496b6\">More...</a><br /></td></tr>\n<tr class=\"separator:gabfa4bb19298c8c73d4217ba759c496b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab5d0832b5c7bb01b8d7395973bfb1425\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gab5d0832b5c7bb01b8d7395973bfb1425\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425\">compMin</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:gab5d0832b5c7bb01b8d7395973bfb1425\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find the minimum value between single vector components.  <a href=\"a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425\">More...</a><br /></td></tr>\n<tr class=\"separator:gab5d0832b5c7bb01b8d7395973bfb1425\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae8ab88024197202c9479d33bdc5a8a5d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae8ab88024197202c9479d33bdc5a8a5d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#gae8ab88024197202c9479d33bdc5a8a5d\">compMul</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:gae8ab88024197202c9479d33bdc5a8a5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Multiply all vector components together.  <a href=\"a00316.html#gae8ab88024197202c9479d33bdc5a8a5d\">More...</a><br /></td></tr>\n<tr class=\"separator:gae8ab88024197202c9479d33bdc5a8a5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f2b81ada8515875e58cb1667b6b9908\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename floatType , length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8f2b81ada8515875e58cb1667b6b9908\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#ga8f2b81ada8515875e58cb1667b6b9908\">compNormalize</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8f2b81ada8515875e58cb1667b6b9908\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert an integer vector to a normalized float vector.  <a href=\"a00316.html#ga8f2b81ada8515875e58cb1667b6b9908\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f2b81ada8515875e58cb1667b6b9908\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga80abc2980d65d675f435d178c36880eb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename floatType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga80abc2980d65d675f435d178c36880eb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#ga80abc2980d65d675f435d178c36880eb\">compScale</a> (vec&lt; L, floatType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga80abc2980d65d675f435d178c36880eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a normalized float vector to an integer vector.  <a href=\"a00316.html#ga80abc2980d65d675f435d178c36880eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga80abc2980d65d675f435d178c36880eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00316.html\">GLM_GTX_component_wise</a> </p>\n<dl class=\"section date\"><dt>Date</dt><dd>2007-05-21 / 2011-06-07 </dd></dl>\n<dl class=\"section author\"><dt>Author</dt><dd>Christophe Riccio</dd></dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00018_source.html\">component_wise.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00018_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: component_wise.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">component_wise.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00018.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_component_wise is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_component_wise extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> <span class=\"keywordtype\">float</span>Type, length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL vec&lt;L, floatType, Q&gt; <a class=\"code\" href=\"a00316.html#ga8f2b81ada8515875e58cb1667b6b9908\">compNormalize</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> <span class=\"keywordtype\">float</span>Type, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00316.html#ga80abc2980d65d675f435d178c36880eb\">compScale</a>(vec&lt;L, floatType, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> genType::value_type <a class=\"code\" href=\"a00316.html#gaf71833350e15e74d31cbf8a3e7f27051\">compAdd</a>(genType <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> genType::value_type <a class=\"code\" href=\"a00316.html#gae8ab88024197202c9479d33bdc5a8a5d\">compMul</a>(genType <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> genType::value_type <a class=\"code\" href=\"a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425\">compMin</a>(genType <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> genType::value_type <a class=\"code\" href=\"a00316.html#gabfa4bb19298c8c73d4217ba759c496b6\">compMax</a>(genType <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"preprocessor\">#include &quot;component_wise.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00316_html_gabfa4bb19298c8c73d4217ba759c496b6\"><div class=\"ttname\"><a href=\"a00316.html#gabfa4bb19298c8c73d4217ba759c496b6\">glm::compMax</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType::value_type compMax(genType const &amp;v)</div><div class=\"ttdoc\">Find the maximum value between single vector components. </div></div>\n<div class=\"ttc\" id=\"a00316_html_gae8ab88024197202c9479d33bdc5a8a5d\"><div class=\"ttname\"><a href=\"a00316.html#gae8ab88024197202c9479d33bdc5a8a5d\">glm::compMul</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType::value_type compMul(genType const &amp;v)</div><div class=\"ttdoc\">Multiply all vector components together. </div></div>\n<div class=\"ttc\" id=\"a00316_html_ga80abc2980d65d675f435d178c36880eb\"><div class=\"ttname\"><a href=\"a00316.html#ga80abc2980d65d675f435d178c36880eb\">glm::compScale</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; compScale(vec&lt; L, floatType, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Convert a normalized float vector to an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00316_html_ga8f2b81ada8515875e58cb1667b6b9908\"><div class=\"ttname\"><a href=\"a00316.html#ga8f2b81ada8515875e58cb1667b6b9908\">glm::compNormalize</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt; compNormalize(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Convert an integer vector to a normalized float vector. </div></div>\n<div class=\"ttc\" id=\"a00316_html_gab5d0832b5c7bb01b8d7395973bfb1425\"><div class=\"ttname\"><a href=\"a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425\">glm::compMin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType::value_type compMin(genType const &amp;v)</div><div class=\"ttdoc\">Find the minimum value between single vector components. </div></div>\n<div class=\"ttc\" id=\"a00316_html_gaf71833350e15e74d31cbf8a3e7f27051\"><div class=\"ttname\"><a href=\"a00316.html#gaf71833350e15e74d31cbf8a3e7f27051\">glm::compAdd</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType::value_type compAdd(genType const &amp;v)</div><div class=\"ttdoc\">Add all vector components together. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00019_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: compute_common.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">compute_common.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#include &quot;setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genFIType, <span class=\"keywordtype\">bool</span> <span class=\"comment\">/*signed*/</span>&gt;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;        <span class=\"keyword\">struct </span>compute_abs</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;        {};</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genFIType&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">struct </span>compute_abs&lt;genFIType, true&gt;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> genFIType call(genFIType x)</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                        GLM_STATIC_ASSERT(</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                                std::numeric_limits&lt;genFIType&gt;::is_iec559 || std::numeric_limits&lt;genFIType&gt;::is_signed,</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;                                <span class=\"stringliteral\">&quot;&#39;abs&#39; only accept floating-point and integer scalar or vector inputs&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                        <span class=\"keywordflow\">return</span> x &gt;= genFIType(0) ? x : -x;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                        <span class=\"comment\">// TODO, perf comp with: *(((int *) &amp;x) + 1) &amp;= 0x7fffffff;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CUDA</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;        <span class=\"keyword\">struct </span>compute_abs&lt;float, true&gt;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> <span class=\"keywordtype\">float</span> call(<span class=\"keywordtype\">float</span> x)</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;                        <span class=\"keywordflow\">return</span> fabsf(x);</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genFIType&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">struct </span>compute_abs&lt;genFIType, false&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> genFIType call(genFIType x)</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        GLM_STATIC_ASSERT(</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                                (!std::numeric_limits&lt;genFIType&gt;::is_signed &amp;&amp; std::numeric_limits&lt;genFIType&gt;::is_integer),</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                                <span class=\"stringliteral\">&quot;&#39;abs&#39; only accept floating-point and integer scalar or vector inputs&quot;</span>);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                        <span class=\"keywordflow\">return</span> x;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00020_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: compute_vector_relational.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">compute_vector_relational.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"comment\">//#include &quot;compute_common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#include &quot;setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, <span class=\"keywordtype\">bool</span> isFloat&gt;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;        <span class=\"keyword\">struct </span>compute_equal</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> call(T a, T b)</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;                        <span class=\"keywordflow\">return</span> a == b;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"comment\">        template &lt;typename T&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"comment\">        struct compute_equal&lt;T, true&gt;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"comment\">        {</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">                GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"comment\">                {</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"comment\">                        return detail::compute_abs&lt;T, std::numeric_limits&lt;T&gt;::is_signed&gt;::call(b - a) &lt;= static_cast&lt;T&gt;(0);</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"comment\">                        //return std::memcmp(&amp;a, &amp;b, sizeof(T)) == 0;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"comment\">                }</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"comment\">        };</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"comment\">*/</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00021.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: constants.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">constants.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00290.html\">GLM_GTC_constants</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00021_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a> ()</td></tr>\n<tr class=\"memdesc:ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return e constant.  <a href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8fe2e6f90bce9d829e9723b649fbd42\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gad8fe2e6f90bce9d829e9723b649fbd42\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42\">euler</a> ()</td></tr>\n<tr class=\"memdesc:gad8fe2e6f90bce9d829e9723b649fbd42\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return Euler's constant.  <a href=\"a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42\">More...</a><br /></td></tr>\n<tr class=\"separator:gad8fe2e6f90bce9d829e9723b649fbd42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga753950e5140e4ea6a88e4a18ba61dc09\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga753950e5140e4ea6a88e4a18ba61dc09\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09\">four_over_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga753950e5140e4ea6a88e4a18ba61dc09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 4 / pi.  <a href=\"a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09\">More...</a><br /></td></tr>\n<tr class=\"separator:ga753950e5140e4ea6a88e4a18ba61dc09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga748cf8642830657c5b7eae04d0a80899\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga748cf8642830657c5b7eae04d0a80899\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga748cf8642830657c5b7eae04d0a80899\">golden_ratio</a> ()</td></tr>\n<tr class=\"memdesc:ga748cf8642830657c5b7eae04d0a80899\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the golden ratio constant.  <a href=\"a00290.html#ga748cf8642830657c5b7eae04d0a80899\">More...</a><br /></td></tr>\n<tr class=\"separator:ga748cf8642830657c5b7eae04d0a80899\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c36b41d462e45641faf7d7938948bac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga0c36b41d462e45641faf7d7938948bac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga0c36b41d462e45641faf7d7938948bac\">half_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga0c36b41d462e45641faf7d7938948bac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pi / 2.  <a href=\"a00290.html#ga0c36b41d462e45641faf7d7938948bac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0c36b41d462e45641faf7d7938948bac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaca94292c839ed31a405ab7a81ae7e850\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaca94292c839ed31a405ab7a81ae7e850\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gaca94292c839ed31a405ab7a81ae7e850\">ln_ln_two</a> ()</td></tr>\n<tr class=\"memdesc:gaca94292c839ed31a405ab7a81ae7e850\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return ln(ln(2)).  <a href=\"a00290.html#gaca94292c839ed31a405ab7a81ae7e850\">More...</a><br /></td></tr>\n<tr class=\"separator:gaca94292c839ed31a405ab7a81ae7e850\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf97ebc6c059ffd788e6c4946f71ef66c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaf97ebc6c059ffd788e6c4946f71ef66c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c\">ln_ten</a> ()</td></tr>\n<tr class=\"memdesc:gaf97ebc6c059ffd788e6c4946f71ef66c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return ln(10).  <a href=\"a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf97ebc6c059ffd788e6c4946f71ef66c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24f4d27765678116f41a2f336ab7975c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga24f4d27765678116f41a2f336ab7975c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga24f4d27765678116f41a2f336ab7975c\">ln_two</a> ()</td></tr>\n<tr class=\"memdesc:ga24f4d27765678116f41a2f336ab7975c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return ln(2).  <a href=\"a00290.html#ga24f4d27765678116f41a2f336ab7975c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga24f4d27765678116f41a2f336ab7975c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39c2fb227631ca25894326529bdd1ee5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga39c2fb227631ca25894326529bdd1ee5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga39c2fb227631ca25894326529bdd1ee5\">one</a> ()</td></tr>\n<tr class=\"memdesc:ga39c2fb227631ca25894326529bdd1ee5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1.  <a href=\"a00290.html#ga39c2fb227631ca25894326529bdd1ee5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga39c2fb227631ca25894326529bdd1ee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga555150da2b06d23c8738981d5013e0eb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga555150da2b06d23c8738981d5013e0eb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga555150da2b06d23c8738981d5013e0eb\">one_over_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga555150da2b06d23c8738981d5013e0eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1 / pi.  <a href=\"a00290.html#ga555150da2b06d23c8738981d5013e0eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga555150da2b06d23c8738981d5013e0eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga788fa23a0939bac4d1d0205fb4f35818\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga788fa23a0939bac4d1d0205fb4f35818\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga788fa23a0939bac4d1d0205fb4f35818\">one_over_root_two</a> ()</td></tr>\n<tr class=\"memdesc:ga788fa23a0939bac4d1d0205fb4f35818\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1 / sqrt(2).  <a href=\"a00290.html#ga788fa23a0939bac4d1d0205fb4f35818\">More...</a><br /></td></tr>\n<tr class=\"separator:ga788fa23a0939bac4d1d0205fb4f35818\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c922b427986cbb2e4c6ac69874eefbc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7c922b427986cbb2e4c6ac69874eefbc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc\">one_over_two_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga7c922b427986cbb2e4c6ac69874eefbc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1 / (pi * 2).  <a href=\"a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c922b427986cbb2e4c6ac69874eefbc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3c9df42bd73c519a995c43f0f99e77e0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga3c9df42bd73c519a995c43f0f99e77e0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0\">quarter_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga3c9df42bd73c519a995c43f0f99e77e0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pi / 4.  <a href=\"a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3c9df42bd73c519a995c43f0f99e77e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae9ebbded75b53d4faeb1e4ef8b3347a2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae9ebbded75b53d4faeb1e4ef8b3347a2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2\">root_five</a> ()</td></tr>\n<tr class=\"memdesc:gae9ebbded75b53d4faeb1e4ef8b3347a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(5).  <a href=\"a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2\">More...</a><br /></td></tr>\n<tr class=\"separator:gae9ebbded75b53d4faeb1e4ef8b3347a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e276cb823cc5e612d4f89ed99c75039\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4e276cb823cc5e612d4f89ed99c75039\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga4e276cb823cc5e612d4f89ed99c75039\">root_half_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga4e276cb823cc5e612d4f89ed99c75039\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(pi / 2).  <a href=\"a00290.html#ga4e276cb823cc5e612d4f89ed99c75039\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e276cb823cc5e612d4f89ed99c75039\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4129412e96b33707a77c1a07652e23e2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4129412e96b33707a77c1a07652e23e2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga4129412e96b33707a77c1a07652e23e2\">root_ln_four</a> ()</td></tr>\n<tr class=\"memdesc:ga4129412e96b33707a77c1a07652e23e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(ln(4)).  <a href=\"a00290.html#ga4129412e96b33707a77c1a07652e23e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4129412e96b33707a77c1a07652e23e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga261380796b2cd496f68d2cf1d08b8eb9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga261380796b2cd496f68d2cf1d08b8eb9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9\">root_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga261380796b2cd496f68d2cf1d08b8eb9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return square root of pi.  <a href=\"a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga261380796b2cd496f68d2cf1d08b8eb9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f286be4abe88be1eed7d2a9f6cb193e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4f286be4abe88be1eed7d2a9f6cb193e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e\">root_three</a> ()</td></tr>\n<tr class=\"memdesc:ga4f286be4abe88be1eed7d2a9f6cb193e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(3).  <a href=\"a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f286be4abe88be1eed7d2a9f6cb193e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74e607d29020f100c0d0dc46ce2ca950\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga74e607d29020f100c0d0dc46ce2ca950\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga74e607d29020f100c0d0dc46ce2ca950\">root_two</a> ()</td></tr>\n<tr class=\"memdesc:ga74e607d29020f100c0d0dc46ce2ca950\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(2).  <a href=\"a00290.html#ga74e607d29020f100c0d0dc46ce2ca950\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74e607d29020f100c0d0dc46ce2ca950\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2bcedc575039fe0cd765742f8bbb0bd3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2bcedc575039fe0cd765742f8bbb0bd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3\">root_two_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga2bcedc575039fe0cd765742f8bbb0bd3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(2 * pi).  <a href=\"a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2bcedc575039fe0cd765742f8bbb0bd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3077c6311010a214b69ddc8214ec13b5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga3077c6311010a214b69ddc8214ec13b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga3077c6311010a214b69ddc8214ec13b5\">third</a> ()</td></tr>\n<tr class=\"memdesc:ga3077c6311010a214b69ddc8214ec13b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1 / 3.  <a href=\"a00290.html#ga3077c6311010a214b69ddc8214ec13b5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3077c6311010a214b69ddc8214ec13b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae94950df74b0ce382b1fc1d978ef7394\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae94950df74b0ce382b1fc1d978ef7394\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gae94950df74b0ce382b1fc1d978ef7394\">three_over_two_pi</a> ()</td></tr>\n<tr class=\"memdesc:gae94950df74b0ce382b1fc1d978ef7394\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pi / 2 * 3.  <a href=\"a00290.html#gae94950df74b0ce382b1fc1d978ef7394\">More...</a><br /></td></tr>\n<tr class=\"separator:gae94950df74b0ce382b1fc1d978ef7394\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74eadc8a211253079683219a3ea0462a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga74eadc8a211253079683219a3ea0462a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga74eadc8a211253079683219a3ea0462a\">two_over_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga74eadc8a211253079683219a3ea0462a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 2 / pi.  <a href=\"a00290.html#ga74eadc8a211253079683219a3ea0462a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74eadc8a211253079683219a3ea0462a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5827301817640843cf02026a8d493894\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga5827301817640843cf02026a8d493894\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga5827301817640843cf02026a8d493894\">two_over_root_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga5827301817640843cf02026a8d493894\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 2 / sqrt(pi).  <a href=\"a00290.html#ga5827301817640843cf02026a8d493894\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5827301817640843cf02026a8d493894\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa5276a4617566abcfe49286f40e3a256\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa5276a4617566abcfe49286f40e3a256\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gaa5276a4617566abcfe49286f40e3a256\">two_pi</a> ()</td></tr>\n<tr class=\"memdesc:gaa5276a4617566abcfe49286f40e3a256\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pi * 2.  <a href=\"a00290.html#gaa5276a4617566abcfe49286f40e3a256\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa5276a4617566abcfe49286f40e3a256\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9b4d2f4322edcf63a6737b92a29dd1f5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9b4d2f4322edcf63a6737b92a29dd1f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5\">two_thirds</a> ()</td></tr>\n<tr class=\"memdesc:ga9b4d2f4322edcf63a6737b92a29dd1f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 2 / 3.  <a href=\"a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9b4d2f4322edcf63a6737b92a29dd1f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga788f5a421fc0f40a1296ebc094cbaa8a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga788f5a421fc0f40a1296ebc094cbaa8a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a\">zero</a> ()</td></tr>\n<tr class=\"memdesc:ga788f5a421fc0f40a1296ebc094cbaa8a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 0.  <a href=\"a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga788f5a421fc0f40a1296ebc094cbaa8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00290.html\">GLM_GTC_constants</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00021_source.html\">constants.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00021_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: constants.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">constants.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00021.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_constants extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a\">zero</a>();</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga39c2fb227631ca25894326529bdd1ee5\">one</a>();</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#gaa5276a4617566abcfe49286f40e3a256\">two_pi</a>();</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9\">root_pi</a>();</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga0c36b41d462e45641faf7d7938948bac\">half_pi</a>();</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#gae94950df74b0ce382b1fc1d978ef7394\">three_over_two_pi</a>();</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0\">quarter_pi</a>();</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga555150da2b06d23c8738981d5013e0eb\">one_over_pi</a>();</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc\">one_over_two_pi</a>();</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga74eadc8a211253079683219a3ea0462a\">two_over_pi</a>();</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09\">four_over_pi</a>();</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga5827301817640843cf02026a8d493894\">two_over_root_pi</a>();</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga788fa23a0939bac4d1d0205fb4f35818\">one_over_root_two</a>();</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga4e276cb823cc5e612d4f89ed99c75039\">root_half_pi</a>();</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3\">root_two_pi</a>();</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga4129412e96b33707a77c1a07652e23e2\">root_ln_four</a>();</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a>();</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42\">euler</a>();</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga74e607d29020f100c0d0dc46ce2ca950\">root_two</a>();</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e\">root_three</a>();</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2\">root_five</a>();</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga24f4d27765678116f41a2f336ab7975c\">ln_two</a>();</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c\">ln_ten</a>();</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#gaca94292c839ed31a405ab7a81ae7e850\">ln_ln_two</a>();</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga3077c6311010a214b69ddc8214ec13b5\">third</a>();</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5\">two_thirds</a>();</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00290.html#ga748cf8642830657c5b7eae04d0a80899\">golden_ratio</a>();</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;<span class=\"preprocessor\">#include &quot;constants.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00290_html_ga3077c6311010a214b69ddc8214ec13b5\"><div class=\"ttname\"><a href=\"a00290.html#ga3077c6311010a214b69ddc8214ec13b5\">glm::third</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType third()</div><div class=\"ttdoc\">Return 1 / 3. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga74e607d29020f100c0d0dc46ce2ca950\"><div class=\"ttname\"><a href=\"a00290.html#ga74e607d29020f100c0d0dc46ce2ca950\">glm::root_two</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType root_two()</div><div class=\"ttdoc\">Return sqrt(2). </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga788fa23a0939bac4d1d0205fb4f35818\"><div class=\"ttname\"><a href=\"a00290.html#ga788fa23a0939bac4d1d0205fb4f35818\">glm::one_over_root_two</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_root_two()</div><div class=\"ttdoc\">Return 1 / sqrt(2). </div></div>\n<div class=\"ttc\" id=\"a00290_html_gad8fe2e6f90bce9d829e9723b649fbd42\"><div class=\"ttname\"><a href=\"a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42\">glm::euler</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType euler()</div><div class=\"ttdoc\">Return Euler&#39;s constant. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga9b4d2f4322edcf63a6737b92a29dd1f5\"><div class=\"ttname\"><a href=\"a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5\">glm::two_thirds</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType two_thirds()</div><div class=\"ttdoc\">Return 2 / 3. </div></div>\n<div class=\"ttc\" id=\"a00290_html_gaa5276a4617566abcfe49286f40e3a256\"><div class=\"ttname\"><a href=\"a00290.html#gaa5276a4617566abcfe49286f40e3a256\">glm::two_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType two_pi()</div><div class=\"ttdoc\">Return pi * 2. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga748cf8642830657c5b7eae04d0a80899\"><div class=\"ttname\"><a href=\"a00290.html#ga748cf8642830657c5b7eae04d0a80899\">glm::golden_ratio</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType golden_ratio()</div><div class=\"ttdoc\">Return the golden ratio constant. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga3c9df42bd73c519a995c43f0f99e77e0\"><div class=\"ttname\"><a href=\"a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0\">glm::quarter_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType quarter_pi()</div><div class=\"ttdoc\">Return pi / 4. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga39c2fb227631ca25894326529bdd1ee5\"><div class=\"ttname\"><a href=\"a00290.html#ga39c2fb227631ca25894326529bdd1ee5\">glm::one</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType one()</div><div class=\"ttdoc\">Return 1. </div></div>\n<div class=\"ttc\" id=\"a00290_html_gae9ebbded75b53d4faeb1e4ef8b3347a2\"><div class=\"ttname\"><a href=\"a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2\">glm::root_five</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType root_five()</div><div class=\"ttdoc\">Return sqrt(5). </div></div>\n<div class=\"ttc\" id=\"a00290_html_gae94950df74b0ce382b1fc1d978ef7394\"><div class=\"ttname\"><a href=\"a00290.html#gae94950df74b0ce382b1fc1d978ef7394\">glm::three_over_two_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType three_over_two_pi()</div><div class=\"ttdoc\">Return pi / 2 * 3. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga788f5a421fc0f40a1296ebc094cbaa8a\"><div class=\"ttname\"><a href=\"a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a\">glm::zero</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType zero()</div><div class=\"ttdoc\">Return 0. </div></div>\n<div class=\"ttc\" id=\"a00290_html_gaf97ebc6c059ffd788e6c4946f71ef66c\"><div class=\"ttname\"><a href=\"a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c\">glm::ln_ten</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ten()</div><div class=\"ttdoc\">Return ln(10). </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga4f286be4abe88be1eed7d2a9f6cb193e\"><div class=\"ttname\"><a href=\"a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e\">glm::root_three</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType root_three()</div><div class=\"ttdoc\">Return sqrt(3). </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga261380796b2cd496f68d2cf1d08b8eb9\"><div class=\"ttname\"><a href=\"a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9\">glm::root_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType root_pi()</div><div class=\"ttdoc\">Return square root of pi. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><div class=\"ttname\"><a href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">glm::e</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType e()</div><div class=\"ttdoc\">Return e constant. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga555150da2b06d23c8738981d5013e0eb\"><div class=\"ttname\"><a href=\"a00290.html#ga555150da2b06d23c8738981d5013e0eb\">glm::one_over_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_pi()</div><div class=\"ttdoc\">Return 1 / pi. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga74eadc8a211253079683219a3ea0462a\"><div class=\"ttname\"><a href=\"a00290.html#ga74eadc8a211253079683219a3ea0462a\">glm::two_over_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_pi()</div><div class=\"ttdoc\">Return 2 / pi. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga753950e5140e4ea6a88e4a18ba61dc09\"><div class=\"ttname\"><a href=\"a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09\">glm::four_over_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType four_over_pi()</div><div class=\"ttdoc\">Return 4 / pi. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga2bcedc575039fe0cd765742f8bbb0bd3\"><div class=\"ttname\"><a href=\"a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3\">glm::root_two_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType root_two_pi()</div><div class=\"ttdoc\">Return sqrt(2 * pi). </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga24f4d27765678116f41a2f336ab7975c\"><div class=\"ttname\"><a href=\"a00290.html#ga24f4d27765678116f41a2f336ab7975c\">glm::ln_two</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType ln_two()</div><div class=\"ttdoc\">Return ln(2). </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga4129412e96b33707a77c1a07652e23e2\"><div class=\"ttname\"><a href=\"a00290.html#ga4129412e96b33707a77c1a07652e23e2\">glm::root_ln_four</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType root_ln_four()</div><div class=\"ttdoc\">Return sqrt(ln(4)). </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga5827301817640843cf02026a8d493894\"><div class=\"ttname\"><a href=\"a00290.html#ga5827301817640843cf02026a8d493894\">glm::two_over_root_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_root_pi()</div><div class=\"ttdoc\">Return 2 / sqrt(pi). </div></div>\n<div class=\"ttc\" id=\"a00290_html_gaca94292c839ed31a405ab7a81ae7e850\"><div class=\"ttname\"><a href=\"a00290.html#gaca94292c839ed31a405ab7a81ae7e850\">glm::ln_ln_two</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ln_two()</div><div class=\"ttdoc\">Return ln(ln(2)). </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga4e276cb823cc5e612d4f89ed99c75039\"><div class=\"ttname\"><a href=\"a00290.html#ga4e276cb823cc5e612d4f89ed99c75039\">glm::root_half_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType root_half_pi()</div><div class=\"ttdoc\">Return sqrt(pi / 2). </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga0c36b41d462e45641faf7d7938948bac\"><div class=\"ttname\"><a href=\"a00290.html#ga0c36b41d462e45641faf7d7938948bac\">glm::half_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType half_pi()</div><div class=\"ttdoc\">Return pi / 2. </div></div>\n<div class=\"ttc\" id=\"a00290_html_ga7c922b427986cbb2e4c6ac69874eefbc\"><div class=\"ttname\"><a href=\"a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc\">glm::one_over_two_pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_two_pi()</div><div class=\"ttdoc\">Return 1 / (pi * 2). </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00022.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: dual_quaternion.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">dual_quaternion.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00317.html\">GLM_GTX_dual_quaternion</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00022_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga3d71f98d84ba59dfe4e369fde4714cd6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef highp_ddualquat&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">ddualquat</a></td></tr>\n<tr class=\"memdesc:ga3d71f98d84ba59dfe4e369fde4714cd6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of default double-qualifier floating-point numbers.  <a href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3d71f98d84ba59dfe4e369fde4714cd6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae93abee0c979902fbec6a7bee0f6fae1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef highp_fdualquat&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">dualquat</a></td></tr>\n<tr class=\"memdesc:gae93abee0c979902fbec6a7bee0f6fae1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of floating-point numbers.  <a href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">More...</a><br /></td></tr>\n<tr class=\"separator:gae93abee0c979902fbec6a7bee0f6fae1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga237c2b9b42c9a930e49de5840ae0f930\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef highp_fdualquat&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">fdualquat</a></td></tr>\n<tr class=\"memdesc:ga237c2b9b42c9a930e49de5840ae0f930\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of single-qualifier floating-point numbers.  <a href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">More...</a><br /></td></tr>\n<tr class=\"separator:ga237c2b9b42c9a930e49de5840ae0f930\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f67eafa7197d7a668dad5105a463d2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga8f67eafa7197d7a668dad5105a463d2a\">highp_ddualquat</a></td></tr>\n<tr class=\"memdesc:ga8f67eafa7197d7a668dad5105a463d2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of high double-qualifier floating-point numbers.  <a href=\"a00317.html#ga8f67eafa7197d7a668dad5105a463d2a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f67eafa7197d7a668dad5105a463d2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ef5bf1da52a9d4932335a517086ceaf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf\">highp_dualquat</a></td></tr>\n<tr class=\"memdesc:ga9ef5bf1da52a9d4932335a517086ceaf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of high single-qualifier floating-point numbers.  <a href=\"a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9ef5bf1da52a9d4932335a517086ceaf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4c4e55e9c99dc57b299ed590968da564\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga4c4e55e9c99dc57b299ed590968da564\">highp_fdualquat</a></td></tr>\n<tr class=\"memdesc:ga4c4e55e9c99dc57b299ed590968da564\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of high single-qualifier floating-point numbers.  <a href=\"a00317.html#ga4c4e55e9c99dc57b299ed590968da564\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4c4e55e9c99dc57b299ed590968da564\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4c5103338af3dac7e0fbc86895a3f1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a\">lowp_ddualquat</a></td></tr>\n<tr class=\"memdesc:gab4c5103338af3dac7e0fbc86895a3f1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of low double-qualifier floating-point numbers.  <a href=\"a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a\">More...</a><br /></td></tr>\n<tr class=\"separator:gab4c5103338af3dac7e0fbc86895a3f1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade05d29ebd4deea0f883d0e1bb4169aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa\">lowp_dualquat</a></td></tr>\n<tr class=\"memdesc:gade05d29ebd4deea0f883d0e1bb4169aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of low single-qualifier floating-point numbers.  <a href=\"a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa\">More...</a><br /></td></tr>\n<tr class=\"separator:gade05d29ebd4deea0f883d0e1bb4169aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa38f671be25a7f3b136a452a8bb42860\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gaa38f671be25a7f3b136a452a8bb42860\">lowp_fdualquat</a></td></tr>\n<tr class=\"memdesc:gaa38f671be25a7f3b136a452a8bb42860\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of low single-qualifier floating-point numbers.  <a href=\"a00317.html#gaa38f671be25a7f3b136a452a8bb42860\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa38f671be25a7f3b136a452a8bb42860\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0fb11e48e2d16348ccb06a25213641b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga0fb11e48e2d16348ccb06a25213641b4\">mediump_ddualquat</a></td></tr>\n<tr class=\"memdesc:ga0fb11e48e2d16348ccb06a25213641b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of medium double-qualifier floating-point numbers.  <a href=\"a00317.html#ga0fb11e48e2d16348ccb06a25213641b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0fb11e48e2d16348ccb06a25213641b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7aeb54c167712b38f2178a1be2360ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gaa7aeb54c167712b38f2178a1be2360ad\">mediump_dualquat</a></td></tr>\n<tr class=\"memdesc:gaa7aeb54c167712b38f2178a1be2360ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of medium single-qualifier floating-point numbers.  <a href=\"a00317.html#gaa7aeb54c167712b38f2178a1be2360ad\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7aeb54c167712b38f2178a1be2360ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a6b594ff7e81150d8143001367a9431\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga4a6b594ff7e81150d8143001367a9431\">mediump_fdualquat</a></td></tr>\n<tr class=\"memdesc:ga4a6b594ff7e81150d8143001367a9431\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of medium single-qualifier floating-point numbers.  <a href=\"a00317.html#ga4a6b594ff7e81150d8143001367a9431\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a6b594ff7e81150d8143001367a9431\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0b35c0e30df8a875dbaa751e0bd800e0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0b35c0e30df8a875dbaa751e0bd800e0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0\">dual_quat_identity</a> ()</td></tr>\n<tr class=\"memdesc:ga0b35c0e30df8a875dbaa751e0bd800e0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates an identity dual quaternion.  <a href=\"a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b35c0e30df8a875dbaa751e0bd800e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac4064ff813759740201765350eac4236\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac4064ff813759740201765350eac4236\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gac4064ff813759740201765350eac4236\">dualquat_cast</a> (mat&lt; 2, 4, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gac4064ff813759740201765350eac4236\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion.  <a href=\"a00317.html#gac4064ff813759740201765350eac4236\">More...</a><br /></td></tr>\n<tr class=\"separator:gac4064ff813759740201765350eac4236\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga91025ebdca0f4ea54da08497b00e8c84\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga91025ebdca0f4ea54da08497b00e8c84\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga91025ebdca0f4ea54da08497b00e8c84\">dualquat_cast</a> (mat&lt; 3, 4, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga91025ebdca0f4ea54da08497b00e8c84\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion.  <a href=\"a00317.html#ga91025ebdca0f4ea54da08497b00e8c84\">More...</a><br /></td></tr>\n<tr class=\"separator:ga91025ebdca0f4ea54da08497b00e8c84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga070f521a953f6461af4ab4cf8ccbf27e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga070f521a953f6461af4ab4cf8ccbf27e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e\">inverse</a> (tdualquat&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga070f521a953f6461af4ab4cf8ccbf27e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the q inverse.  <a href=\"a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga070f521a953f6461af4ab4cf8ccbf27e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace8380112d16d33f520839cb35a4d173\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gace8380112d16d33f520839cb35a4d173\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gace8380112d16d33f520839cb35a4d173\">lerp</a> (tdualquat&lt; T, Q &gt; const &amp;x, tdualquat&lt; T, Q &gt; const &amp;y, T const &amp;a)</td></tr>\n<tr class=\"memdesc:gace8380112d16d33f520839cb35a4d173\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the linear interpolation of two dual quaternion.  <a href=\"a00317.html#gace8380112d16d33f520839cb35a4d173\">More...</a><br /></td></tr>\n<tr class=\"separator:gace8380112d16d33f520839cb35a4d173\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae99d143b37f9cad4cd9285571aab685a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae99d143b37f9cad4cd9285571aab685a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gae99d143b37f9cad4cd9285571aab685a\">mat2x4_cast</a> (tdualquat&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gae99d143b37f9cad4cd9285571aab685a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 2 * 4 matrix.  <a href=\"a00317.html#gae99d143b37f9cad4cd9285571aab685a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae99d143b37f9cad4cd9285571aab685a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf59f5bb69620d2891c3795c6f2639179\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf59f5bb69620d2891c3795c6f2639179\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gaf59f5bb69620d2891c3795c6f2639179\">mat3x4_cast</a> (tdualquat&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf59f5bb69620d2891c3795c6f2639179\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 3 * 4 matrix.  <a href=\"a00317.html#gaf59f5bb69620d2891c3795c6f2639179\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf59f5bb69620d2891c3795c6f2639179\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga299b8641509606b1958ffa104a162cfe\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga299b8641509606b1958ffa104a162cfe\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga299b8641509606b1958ffa104a162cfe\">normalize</a> (tdualquat&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga299b8641509606b1958ffa104a162cfe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the normalized quaternion.  <a href=\"a00317.html#ga299b8641509606b1958ffa104a162cfe\">More...</a><br /></td></tr>\n<tr class=\"separator:ga299b8641509606b1958ffa104a162cfe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00317.html\">GLM_GTX_dual_quaternion</a> </p>\n<dl class=\"section author\"><dt>Author</dt><dd>Maksim Vorobiev (<a href=\"#\" onclick=\"location.href='mai'+'lto:'+'mso'+'me'+'one'+'@g'+'mai'+'l.'+'com'; return false;\">msome<span style=\"display: none;\">.nosp@m.</span>one@<span style=\"display: none;\">.nosp@m.</span>gmail<span style=\"display: none;\">.nosp@m.</span>.com</a>)</dd></dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00022_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: dual_quaternion.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">dual_quaternion.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00022.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_dual_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_dual_quaternion extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">struct </span>tdualquat</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                <span class=\"comment\">// -- Implementation detail --</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                <span class=\"keyword\">typedef</span> qua&lt;T, Q&gt; part_type;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                <span class=\"comment\">// -- Data --</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                qua&lt;T, Q&gt; real, dual;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                <span class=\"comment\">// -- Component accesses --</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>(){<span class=\"keywordflow\">return</span> 2;}</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                GLM_FUNC_DECL part_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                GLM_FUNC_DECL part_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                <span class=\"comment\">// -- Implicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR tdualquat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat&lt;T, Q&gt; const&amp; d) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat&lt;T, P&gt; const&amp; d);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                <span class=\"comment\">// -- Explicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua&lt;T, Q&gt; const&amp; real);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua&lt;T, Q&gt; const&amp; <a class=\"code\" href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">orientation</a>, vec&lt;3, T, Q&gt; const&amp; translation);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua&lt;T, Q&gt; const&amp; real, qua&lt;T, Q&gt; const&amp; dual);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                <span class=\"comment\">// -- Conversion constructors --</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tdualquat(tdualquat&lt;U, P&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat&lt;2, 4, T, Q&gt; const&amp; holder_mat);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat&lt;3, 4, T, Q&gt; const&amp; aug_mat);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                GLM_FUNC_DECL tdualquat&lt;T, Q&gt; &amp; operator=(tdualquat&lt;T, Q&gt; const&amp; m) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_DECL tdualquat&lt;T, Q&gt; &amp; operator=(tdualquat&lt;U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                GLM_FUNC_DECL tdualquat&lt;T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                GLM_FUNC_DECL tdualquat&lt;T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        <span class=\"comment\">// -- Unary bit operators --</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; operator+(tdualquat&lt;T, Q&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; operator-(tdualquat&lt;T, Q&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; operator+(tdualquat&lt;T, Q&gt; const&amp; q, tdualquat&lt;T, Q&gt; const&amp; p);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; operator*(tdualquat&lt;T, Q&gt; const&amp; q, tdualquat&lt;T, Q&gt; const&amp; p);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; operator*(tdualquat&lt;T, Q&gt; const&amp; q, vec&lt;3, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; operator*(vec&lt;3, T, Q&gt; const&amp; v, tdualquat&lt;T, Q&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; operator*(tdualquat&lt;T, Q&gt; const&amp; q, vec&lt;4, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; operator*(vec&lt;4, T, Q&gt; const&amp; v, tdualquat&lt;T, Q&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; operator*(tdualquat&lt;T, Q&gt; const&amp; q, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; operator*(T const&amp; s, tdualquat&lt;T, Q&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; operator/(tdualquat&lt;T, Q&gt; const&amp; q, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(tdualquat&lt;T, Q&gt; const&amp; q1, tdualquat&lt;T, Q&gt; const&amp; q2);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(tdualquat&lt;T, Q&gt; const&amp; q1, tdualquat&lt;T, Q&gt; const&amp; q2);</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        template &lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; <a class=\"code\" href=\"a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0\">dual_quat_identity</a>();</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; <a class=\"code\" href=\"a00317.html#ga299b8641509606b1958ffa104a162cfe\">normalize</a>(tdualquat&lt;T, Q&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; <a class=\"code\" href=\"a00317.html#gace8380112d16d33f520839cb35a4d173\">lerp</a>(tdualquat&lt;T, Q&gt; const&amp; x, tdualquat&lt;T, Q&gt; const&amp; y, T const&amp; a);</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; <a class=\"code\" href=\"a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e\">inverse</a>(tdualquat&lt;T, Q&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; <a class=\"code\" href=\"a00317.html#gae99d143b37f9cad4cd9285571aab685a\">mat2x4_cast</a>(tdualquat&lt;T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; <a class=\"code\" href=\"a00317.html#gaf59f5bb69620d2891c3795c6f2639179\">mat3x4_cast</a>(tdualquat&lt;T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; <a class=\"code\" href=\"a00317.html#ga91025ebdca0f4ea54da08497b00e8c84\">dualquat_cast</a>(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        GLM_FUNC_DECL tdualquat&lt;T, Q&gt; <a class=\"code\" href=\"a00317.html#ga91025ebdca0f4ea54da08497b00e8c84\">dualquat_cast</a>(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa\">  187</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">float</span>, lowp&gt;          <a class=\"code\" href=\"a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa\">lowp_dualquat</a>;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#gaa7aeb54c167712b38f2178a1be2360ad\">  192</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">float</span>, mediump&gt;       <a class=\"code\" href=\"a00317.html#gaa7aeb54c167712b38f2178a1be2360ad\">mediump_dualquat</a>;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf\">  197</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">float</span>, highp&gt;         <a class=\"code\" href=\"a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf\">highp_dualquat</a>;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#gaa38f671be25a7f3b136a452a8bb42860\">  203</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">float</span>, lowp&gt;          <a class=\"code\" href=\"a00317.html#gaa38f671be25a7f3b136a452a8bb42860\">lowp_fdualquat</a>;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#ga4a6b594ff7e81150d8143001367a9431\">  208</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">float</span>, mediump&gt;       <a class=\"code\" href=\"a00317.html#ga4a6b594ff7e81150d8143001367a9431\">mediump_fdualquat</a>;</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#ga4c4e55e9c99dc57b299ed590968da564\">  213</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">float</span>, highp&gt;         <a class=\"code\" href=\"a00317.html#ga4c4e55e9c99dc57b299ed590968da564\">highp_fdualquat</a>;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a\">  219</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">double</span>, lowp&gt;         <a class=\"code\" href=\"a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a\">lowp_ddualquat</a>;</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#ga0fb11e48e2d16348ccb06a25213641b4\">  224</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">double</span>, mediump&gt;      <a class=\"code\" href=\"a00317.html#ga0fb11e48e2d16348ccb06a25213641b4\">mediump_ddualquat</a>;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#ga8f67eafa7197d7a668dad5105a463d2a\">  229</a></span>&#160;        typedef tdualquat&lt;<span class=\"keywordtype\">double</span>, highp&gt;        <a class=\"code\" href=\"a00317.html#ga8f67eafa7197d7a668dad5105a463d2a\">highp_ddualquat</a>;</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;<span class=\"preprocessor\">#if(!defined(GLM_PRECISION_HIGHP_FLOAT) &amp;&amp; !defined(GLM_PRECISION_MEDIUMP_FLOAT) &amp;&amp; !defined(GLM_PRECISION_LOWP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;        <span class=\"keyword\">typedef</span> highp_fdualquat                 <a class=\"code\" href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">dualquat</a>;</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">  241</a></span>&#160;        <span class=\"keyword\">typedef</span> highp_fdualquat                 <a class=\"code\" href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">fdualquat</a>;</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_HIGHP_FLOAT) &amp;&amp; !defined(GLM_PRECISION_MEDIUMP_FLOAT) &amp;&amp; !defined(GLM_PRECISION_LOWP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;        <span class=\"keyword\">typedef</span> highp_fdualquat                 <a class=\"code\" href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">dualquat</a>;</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;        <span class=\"keyword\">typedef</span> highp_fdualquat                 <a class=\"code\" href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">fdualquat</a>;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;<span class=\"preprocessor\">#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) &amp;&amp; defined(GLM_PRECISION_MEDIUMP_FLOAT) &amp;&amp; !defined(GLM_PRECISION_LOWP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;        <span class=\"keyword\">typedef</span> mediump_fdualquat               <a class=\"code\" href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">dualquat</a>;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;        <span class=\"keyword\">typedef</span> mediump_fdualquat               <a class=\"code\" href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">fdualquat</a>;</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;<span class=\"preprocessor\">#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) &amp;&amp; !defined(GLM_PRECISION_MEDIUMP_FLOAT) &amp;&amp; defined(GLM_PRECISION_LOWP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;        <span class=\"keyword\">typedef</span> lowp_fdualquat                  <a class=\"code\" href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">dualquat</a>;</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;        <span class=\"keyword\">typedef</span> lowp_fdualquat                  <a class=\"code\" href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">fdualquat</a>;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;<span class=\"preprocessor\">#       error &quot;GLM error: multiple default precision requested for single-precision floating-point types&quot;</span></div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;<span class=\"preprocessor\">#if(!defined(GLM_PRECISION_HIGHP_DOUBLE) &amp;&amp; !defined(GLM_PRECISION_MEDIUMP_DOUBLE) &amp;&amp; !defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;        <span class=\"keyword\">typedef</span> highp_ddualquat                 <a class=\"code\" href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">ddualquat</a>;</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_HIGHP_DOUBLE) &amp;&amp; !defined(GLM_PRECISION_MEDIUMP_DOUBLE) &amp;&amp; !defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;        <span class=\"keyword\">typedef</span> highp_ddualquat                 <a class=\"code\" href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">ddualquat</a>;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;<span class=\"preprocessor\">#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) &amp;&amp; defined(GLM_PRECISION_MEDIUMP_DOUBLE) &amp;&amp; !defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;        <span class=\"keyword\">typedef</span> mediump_ddualquat               <a class=\"code\" href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">ddualquat</a>;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;<span class=\"preprocessor\">#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) &amp;&amp; !defined(GLM_PRECISION_MEDIUMP_DOUBLE) &amp;&amp; defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;        <span class=\"keyword\">typedef</span> lowp_ddualquat                  <a class=\"code\" href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">ddualquat</a>;</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;<span class=\"preprocessor\">#       error &quot;GLM error: Multiple default precision requested for double-precision floating-point types&quot;</span></div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;<span class=\"preprocessor\">#include &quot;dual_quaternion.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00317_html_ga3d71f98d84ba59dfe4e369fde4714cd6\"><div class=\"ttname\"><a href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">glm::ddualquat</a></div><div class=\"ttdeci\">highp_ddualquat ddualquat</div><div class=\"ttdoc\">Dual-quaternion of default double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00260\">dual_quaternion.hpp:260</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_ga237c2b9b42c9a930e49de5840ae0f930\"><div class=\"ttname\"><a href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">glm::fdualquat</a></div><div class=\"ttdeci\">highp_fdualquat fdualquat</div><div class=\"ttdoc\">Dual-quaternion of single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00241\">dual_quaternion.hpp:241</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_gae99d143b37f9cad4cd9285571aab685a\"><div class=\"ttname\"><a href=\"a00317.html#gae99d143b37f9cad4cd9285571aab685a\">glm::mat2x4_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 4, T, Q &gt; mat2x4_cast(tdualquat&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a quaternion to a 2 * 4 matrix. </div></div>\n<div class=\"ttc\" id=\"a00317_html_ga8f67eafa7197d7a668dad5105a463d2a\"><div class=\"ttname\"><a href=\"a00317.html#ga8f67eafa7197d7a668dad5105a463d2a\">glm::highp_ddualquat</a></div><div class=\"ttdeci\">tdualquat&lt; double, highp &gt; highp_ddualquat</div><div class=\"ttdoc\">Dual-quaternion of high double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00229\">dual_quaternion.hpp:229</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_ga299b8641509606b1958ffa104a162cfe\"><div class=\"ttname\"><a href=\"a00317.html#ga299b8641509606b1958ffa104a162cfe\">glm::normalize</a></div><div class=\"ttdeci\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt; normalize(tdualquat&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the normalized quaternion. </div></div>\n<div class=\"ttc\" id=\"a00317_html_ga0b35c0e30df8a875dbaa751e0bd800e0\"><div class=\"ttname\"><a href=\"a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0\">glm::dual_quat_identity</a></div><div class=\"ttdeci\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt; dual_quat_identity()</div><div class=\"ttdoc\">Creates an identity dual quaternion. </div></div>\n<div class=\"ttc\" id=\"a00317_html_ga070f521a953f6461af4ab4cf8ccbf27e\"><div class=\"ttname\"><a href=\"a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e\">glm::inverse</a></div><div class=\"ttdeci\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt; inverse(tdualquat&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the q inverse. </div></div>\n<div class=\"ttc\" id=\"a00317_html_gace8380112d16d33f520839cb35a4d173\"><div class=\"ttname\"><a href=\"a00317.html#gace8380112d16d33f520839cb35a4d173\">glm::lerp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt; lerp(tdualquat&lt; T, Q &gt; const &amp;x, tdualquat&lt; T, Q &gt; const &amp;y, T const &amp;a)</div><div class=\"ttdoc\">Returns the linear interpolation of two dual quaternion. </div></div>\n<div class=\"ttc\" id=\"a00317_html_gade05d29ebd4deea0f883d0e1bb4169aa\"><div class=\"ttname\"><a href=\"a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa\">glm::lowp_dualquat</a></div><div class=\"ttdeci\">tdualquat&lt; float, lowp &gt; lowp_dualquat</div><div class=\"ttdoc\">Dual-quaternion of low single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00187\">dual_quaternion.hpp:187</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_gaa38f671be25a7f3b136a452a8bb42860\"><div class=\"ttname\"><a href=\"a00317.html#gaa38f671be25a7f3b136a452a8bb42860\">glm::lowp_fdualquat</a></div><div class=\"ttdeci\">tdualquat&lt; float, lowp &gt; lowp_fdualquat</div><div class=\"ttdoc\">Dual-quaternion of low single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00203\">dual_quaternion.hpp:203</a></div></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00317_html_gab4c5103338af3dac7e0fbc86895a3f1a\"><div class=\"ttname\"><a href=\"a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a\">glm::lowp_ddualquat</a></div><div class=\"ttdeci\">tdualquat&lt; double, lowp &gt; lowp_ddualquat</div><div class=\"ttdoc\">Dual-quaternion of low double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00219\">dual_quaternion.hpp:219</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_gaf59f5bb69620d2891c3795c6f2639179\"><div class=\"ttname\"><a href=\"a00317.html#gaf59f5bb69620d2891c3795c6f2639179\">glm::mat3x4_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 4, T, Q &gt; mat3x4_cast(tdualquat&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a quaternion to a 3 * 4 matrix. </div></div>\n<div class=\"ttc\" id=\"a00317_html_gae93abee0c979902fbec6a7bee0f6fae1\"><div class=\"ttname\"><a href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">glm::dualquat</a></div><div class=\"ttdeci\">highp_fdualquat dualquat</div><div class=\"ttdoc\">Dual-quaternion of floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00236\">dual_quaternion.hpp:236</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_ga4c4e55e9c99dc57b299ed590968da564\"><div class=\"ttname\"><a href=\"a00317.html#ga4c4e55e9c99dc57b299ed590968da564\">glm::highp_fdualquat</a></div><div class=\"ttdeci\">tdualquat&lt; float, highp &gt; highp_fdualquat</div><div class=\"ttdoc\">Dual-quaternion of high single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00213\">dual_quaternion.hpp:213</a></div></div>\n<div class=\"ttc\" id=\"a00356_html_ga1a32fceb71962e6160e8af295c91930a\"><div class=\"ttname\"><a href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">glm::orientation</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; orientation(vec&lt; 3, T, Q &gt; const &amp;Normal, vec&lt; 3, T, Q &gt; const &amp;Up)</div><div class=\"ttdoc\">Build a rotation matrix from a normal and a up vector. </div></div>\n<div class=\"ttc\" id=\"a00317_html_gaa7aeb54c167712b38f2178a1be2360ad\"><div class=\"ttname\"><a href=\"a00317.html#gaa7aeb54c167712b38f2178a1be2360ad\">glm::mediump_dualquat</a></div><div class=\"ttdeci\">tdualquat&lt; float, mediump &gt; mediump_dualquat</div><div class=\"ttdoc\">Dual-quaternion of medium single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00192\">dual_quaternion.hpp:192</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_ga4a6b594ff7e81150d8143001367a9431\"><div class=\"ttname\"><a href=\"a00317.html#ga4a6b594ff7e81150d8143001367a9431\">glm::mediump_fdualquat</a></div><div class=\"ttdeci\">tdualquat&lt; float, mediump &gt; mediump_fdualquat</div><div class=\"ttdoc\">Dual-quaternion of medium single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00208\">dual_quaternion.hpp:208</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_ga0fb11e48e2d16348ccb06a25213641b4\"><div class=\"ttname\"><a href=\"a00317.html#ga0fb11e48e2d16348ccb06a25213641b4\">glm::mediump_ddualquat</a></div><div class=\"ttdeci\">tdualquat&lt; double, mediump &gt; mediump_ddualquat</div><div class=\"ttdoc\">Dual-quaternion of medium double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00224\">dual_quaternion.hpp:224</a></div></div>\n<div class=\"ttc\" id=\"a00317_html_ga91025ebdca0f4ea54da08497b00e8c84\"><div class=\"ttname\"><a href=\"a00317.html#ga91025ebdca0f4ea54da08497b00e8c84\">glm::dualquat_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt; dualquat_cast(mat&lt; 3, 4, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion. </div></div>\n<div class=\"ttc\" id=\"a00317_html_ga9ef5bf1da52a9d4932335a517086ceaf\"><div class=\"ttname\"><a href=\"a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf\">glm::highp_dualquat</a></div><div class=\"ttdeci\">tdualquat&lt; float, highp &gt; highp_dualquat</div><div class=\"ttdoc\">Dual-quaternion of high single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00022_source.html#l00197\">dual_quaternion.hpp:197</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00023.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: easing.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">easing.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00318.html\">GLM_GTX_easing</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00023_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga93cddcdb6347a44d5927cc2bf2570816\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga93cddcdb6347a44d5927cc2bf2570816\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga93cddcdb6347a44d5927cc2bf2570816\">backEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:ga93cddcdb6347a44d5927cc2bf2570816\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga33777c9dd98f61d9472f96aafdf2bd36\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga33777c9dd98f61d9472f96aafdf2bd36\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga33777c9dd98f61d9472f96aafdf2bd36\">backEaseIn</a> (genType const &amp;a, genType const &amp;o)</td></tr>\n<tr class=\"separator:ga33777c9dd98f61d9472f96aafdf2bd36\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace6d24722a2f6722b56398206eb810bb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gace6d24722a2f6722b56398206eb810bb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gace6d24722a2f6722b56398206eb810bb\">backEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:gace6d24722a2f6722b56398206eb810bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga68a7b760f2afdfab298d5cd6d7611fb1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga68a7b760f2afdfab298d5cd6d7611fb1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga68a7b760f2afdfab298d5cd6d7611fb1\">backEaseInOut</a> (genType const &amp;a, genType const &amp;o)</td></tr>\n<tr class=\"separator:ga68a7b760f2afdfab298d5cd6d7611fb1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf25069fa906413c858fd46903d520b9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gabf25069fa906413c858fd46903d520b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gabf25069fa906413c858fd46903d520b9\">backEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:gabf25069fa906413c858fd46903d520b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga640c1ac6fe9d277a197da69daf60ee4f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga640c1ac6fe9d277a197da69daf60ee4f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga640c1ac6fe9d277a197da69daf60ee4f\">backEaseOut</a> (genType const &amp;a, genType const &amp;o)</td></tr>\n<tr class=\"separator:ga640c1ac6fe9d277a197da69daf60ee4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaac30767f2e430b0c3fc859a4d59c7b5b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaac30767f2e430b0c3fc859a4d59c7b5b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gaac30767f2e430b0c3fc859a4d59c7b5b\">bounceEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:gaac30767f2e430b0c3fc859a4d59c7b5b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadf9f38eff1e5f4c2fa5b629a25ae413e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gadf9f38eff1e5f4c2fa5b629a25ae413e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gadf9f38eff1e5f4c2fa5b629a25ae413e\">bounceEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:gadf9f38eff1e5f4c2fa5b629a25ae413e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94007005ff0dcfa0749ebfa2aec540b2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga94007005ff0dcfa0749ebfa2aec540b2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga94007005ff0dcfa0749ebfa2aec540b2\">bounceEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:ga94007005ff0dcfa0749ebfa2aec540b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga34508d4b204a321ec26d6086aa047997\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga34508d4b204a321ec26d6086aa047997\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga34508d4b204a321ec26d6086aa047997\">circularEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga34508d4b204a321ec26d6086aa047997\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after shifted quadrant IV of unit circle.  <a href=\"a00318.html#ga34508d4b204a321ec26d6086aa047997\">More...</a><br /></td></tr>\n<tr class=\"separator:ga34508d4b204a321ec26d6086aa047997\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c1027637a5b02d4bb3612aa12599d69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga0c1027637a5b02d4bb3612aa12599d69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga0c1027637a5b02d4bb3612aa12599d69\">circularEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga0c1027637a5b02d4bb3612aa12599d69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise circular function y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1].  <a href=\"a00318.html#ga0c1027637a5b02d4bb3612aa12599d69\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0c1027637a5b02d4bb3612aa12599d69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26fefde9ced9b72745fe21f1a3fe8da7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga26fefde9ced9b72745fe21f1a3fe8da7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7\">circularEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga26fefde9ced9b72745fe21f1a3fe8da7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after shifted quadrant II of unit circle.  <a href=\"a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga26fefde9ced9b72745fe21f1a3fe8da7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaff52f746102b94864d105563ba8895ae\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaff52f746102b94864d105563ba8895ae\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaff52f746102b94864d105563ba8895ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gaff52f746102b94864d105563ba8895ae\">cubicEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gaff52f746102b94864d105563ba8895ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the cubic y = x^3. <br /></td></tr>\n<tr class=\"separator:gaff52f746102b94864d105563ba8895ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga55134072b42d75452189321d4a2ad91c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga55134072b42d75452189321d4a2ad91c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga55134072b42d75452189321d4a2ad91c\">cubicEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga55134072b42d75452189321d4a2ad91c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise cubic y = (1/2)((2x)^3) ; [0, 0.5) y = (1/2)((2x-2)^3 + 2) ; [0.5, 1].  <a href=\"a00318.html#ga55134072b42d75452189321d4a2ad91c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga55134072b42d75452189321d4a2ad91c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga40d746385d8bcc5973f5bc6a2340ca91\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga40d746385d8bcc5973f5bc6a2340ca91\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91\">cubicEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga40d746385d8bcc5973f5bc6a2340ca91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the cubic y = (x - 1)^3 + 1.  <a href=\"a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91\">More...</a><br /></td></tr>\n<tr class=\"separator:ga40d746385d8bcc5973f5bc6a2340ca91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga230918eccee4e113d10ec5b8cdc58695\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga230918eccee4e113d10ec5b8cdc58695\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga230918eccee4e113d10ec5b8cdc58695\">elasticEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga230918eccee4e113d10ec5b8cdc58695\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1))  <a href=\"a00318.html#ga230918eccee4e113d10ec5b8cdc58695\">More...</a><br /></td></tr>\n<tr class=\"separator:ga230918eccee4e113d10ec5b8cdc58695\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2db4ac8959559b11b4029e54812908d6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2db4ac8959559b11b4029e54812908d6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga2db4ac8959559b11b4029e54812908d6\">elasticEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga2db4ac8959559b11b4029e54812908d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise exponentially-damped sine wave: y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1].  <a href=\"a00318.html#ga2db4ac8959559b11b4029e54812908d6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2db4ac8959559b11b4029e54812908d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365\">elasticEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1.  <a href=\"a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365\">More...</a><br /></td></tr>\n<tr class=\"separator:gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f24ee9219ab4c84dc8de24be84c1e3c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7f24ee9219ab4c84dc8de24be84c1e3c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c\">exponentialEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga7f24ee9219ab4c84dc8de24be84c1e3c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the exponential function y = 2^(10(x - 1))  <a href=\"a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f24ee9219ab4c84dc8de24be84c1e3c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga232fb6dc093c5ce94bee105ff2947501\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga232fb6dc093c5ce94bee105ff2947501\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga232fb6dc093c5ce94bee105ff2947501\">exponentialEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga232fb6dc093c5ce94bee105ff2947501\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise exponential y = (1/2)2^(10(2x - 1)) ; [0,0.5) y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1].  <a href=\"a00318.html#ga232fb6dc093c5ce94bee105ff2947501\">More...</a><br /></td></tr>\n<tr class=\"separator:ga232fb6dc093c5ce94bee105ff2947501\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga517f2bcfd15bc2c25c466ae50808efc3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga517f2bcfd15bc2c25c466ae50808efc3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3\">exponentialEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga517f2bcfd15bc2c25c466ae50808efc3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the exponential function y = -2^(-10x) + 1.  <a href=\"a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga517f2bcfd15bc2c25c466ae50808efc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga290c3e47cb0a49f2e8abe90b1872b649\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga290c3e47cb0a49f2e8abe90b1872b649\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649\">linearInterpolation</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga290c3e47cb0a49f2e8abe90b1872b649\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the line y = x.  <a href=\"a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649\">More...</a><br /></td></tr>\n<tr class=\"separator:ga290c3e47cb0a49f2e8abe90b1872b649\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf42089d35855695132d217cd902304a0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaf42089d35855695132d217cd902304a0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gaf42089d35855695132d217cd902304a0\">quadraticEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gaf42089d35855695132d217cd902304a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the parabola y = x^2.  <a href=\"a00318.html#gaf42089d35855695132d217cd902304a0\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf42089d35855695132d217cd902304a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03e8fc2d7945a4e63ee33b2159c14cea\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga03e8fc2d7945a4e63ee33b2159c14cea\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea\">quadraticEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga03e8fc2d7945a4e63ee33b2159c14cea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise quadratic y = (1/2)((2x)^2) ; [0, 0.5) y = -(1/2)((2x-1)*(2x-3) - 1) ; [0.5, 1].  <a href=\"a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea\">More...</a><br /></td></tr>\n<tr class=\"separator:ga03e8fc2d7945a4e63ee33b2159c14cea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga283717bc2d937547ad34ec0472234ee3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga283717bc2d937547ad34ec0472234ee3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga283717bc2d937547ad34ec0472234ee3\">quadraticEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga283717bc2d937547ad34ec0472234ee3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the parabola y = -x^2 + 2x.  <a href=\"a00318.html#ga283717bc2d937547ad34ec0472234ee3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga283717bc2d937547ad34ec0472234ee3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga808b41f14514f47dad5dcc69eb924afd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga808b41f14514f47dad5dcc69eb924afd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga808b41f14514f47dad5dcc69eb924afd\">quarticEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga808b41f14514f47dad5dcc69eb924afd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the quartic x^4.  <a href=\"a00318.html#ga808b41f14514f47dad5dcc69eb924afd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga808b41f14514f47dad5dcc69eb924afd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d000f852de12b197e154f234b20c505\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6d000f852de12b197e154f234b20c505\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga6d000f852de12b197e154f234b20c505\">quarticEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga6d000f852de12b197e154f234b20c505\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise quartic y = (1/2)((2x)^4) ; [0, 0.5) y = -(1/2)((2x-2)^4 - 2) ; [0.5, 1].  <a href=\"a00318.html#ga6d000f852de12b197e154f234b20c505\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d000f852de12b197e154f234b20c505\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4dfb33fa7664aa888eb647999d329b98\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4dfb33fa7664aa888eb647999d329b98\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga4dfb33fa7664aa888eb647999d329b98\">quarticEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga4dfb33fa7664aa888eb647999d329b98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the quartic y = 1 - (x - 1)^4.  <a href=\"a00318.html#ga4dfb33fa7664aa888eb647999d329b98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4dfb33fa7664aa888eb647999d329b98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga097579d8e087dcf48037588140a21640\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga097579d8e087dcf48037588140a21640\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga097579d8e087dcf48037588140a21640\">quinticEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga097579d8e087dcf48037588140a21640\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the quintic y = x^5.  <a href=\"a00318.html#ga097579d8e087dcf48037588140a21640\">More...</a><br /></td></tr>\n<tr class=\"separator:ga097579d8e087dcf48037588140a21640\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a82d5c46df7e2d21cc0108eb7b83934\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2a82d5c46df7e2d21cc0108eb7b83934\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934\">quinticEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga2a82d5c46df7e2d21cc0108eb7b83934\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise quintic y = (1/2)((2x)^5) ; [0, 0.5) y = (1/2)((2x-2)^5 + 2) ; [0.5, 1].  <a href=\"a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2a82d5c46df7e2d21cc0108eb7b83934\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dbd4d5c8da3f5353121f615e7b591d7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7dbd4d5c8da3f5353121f615e7b591d7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7\">quinticEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga7dbd4d5c8da3f5353121f615e7b591d7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the quintic y = (x - 1)^5 + 1.  <a href=\"a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7dbd4d5c8da3f5353121f615e7b591d7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafb338ac6f6b2bcafee50e3dca5201dbf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gafb338ac6f6b2bcafee50e3dca5201dbf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf\">sineEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gafb338ac6f6b2bcafee50e3dca5201dbf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after quarter-cycle of sine wave.  <a href=\"a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf\">More...</a><br /></td></tr>\n<tr class=\"separator:gafb338ac6f6b2bcafee50e3dca5201dbf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7\">sineEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after half sine wave.  <a href=\"a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3e454f883afc1606ef91363881bf5a3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gab3e454f883afc1606ef91363881bf5a3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gab3e454f883afc1606ef91363881bf5a3\">sineEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gab3e454f883afc1606ef91363881bf5a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after quarter-cycle of sine wave (different phase)  <a href=\"a00318.html#gab3e454f883afc1606ef91363881bf5a3\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3e454f883afc1606ef91363881bf5a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00318.html\">GLM_GTX_easing</a> </p>\n<dl class=\"section author\"><dt>Author</dt><dd>Robert Chisholm</dd></dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00023_source.html\">easing.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00023_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: easing.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">easing.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00023.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_easing is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_easing extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649\">linearInterpolation</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#gaf42089d35855695132d217cd902304a0\">quadraticEaseIn</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga283717bc2d937547ad34ec0472234ee3\">quadraticEaseOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea\">quadraticEaseInOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#gaff52f746102b94864d105563ba8895ae\">cubicEaseIn</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91\">cubicEaseOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga55134072b42d75452189321d4a2ad91c\">cubicEaseInOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga808b41f14514f47dad5dcc69eb924afd\">quarticEaseIn</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga4dfb33fa7664aa888eb647999d329b98\">quarticEaseOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga6d000f852de12b197e154f234b20c505\">quarticEaseInOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga097579d8e087dcf48037588140a21640\">quinticEaseIn</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7\">quinticEaseOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934\">quinticEaseInOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf\">sineEaseIn</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#gab3e454f883afc1606ef91363881bf5a3\">sineEaseOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7\">sineEaseInOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga34508d4b204a321ec26d6086aa047997\">circularEaseIn</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7\">circularEaseOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga0c1027637a5b02d4bb3612aa12599d69\">circularEaseInOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c\">exponentialEaseIn</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3\">exponentialEaseOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga232fb6dc093c5ce94bee105ff2947501\">exponentialEaseInOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga230918eccee4e113d10ec5b8cdc58695\">elasticEaseIn</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365\">elasticEaseOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga2db4ac8959559b11b4029e54812908d6\">elasticEaseInOut</a>(genType <span class=\"keyword\">const</span> &amp; a);</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga33777c9dd98f61d9472f96aafdf2bd36\">backEaseIn</a>(genType <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga640c1ac6fe9d277a197da69daf60ee4f\">backEaseOut</a>(genType <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga68a7b760f2afdfab298d5cd6d7611fb1\">backEaseInOut</a>(genType <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga33777c9dd98f61d9472f96aafdf2bd36\">backEaseIn</a>(genType <span class=\"keyword\">const</span>&amp; a, genType <span class=\"keyword\">const</span>&amp; o);</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga640c1ac6fe9d277a197da69daf60ee4f\">backEaseOut</a>(genType <span class=\"keyword\">const</span>&amp; a, genType <span class=\"keyword\">const</span>&amp; o);</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga68a7b760f2afdfab298d5cd6d7611fb1\">backEaseInOut</a>(genType <span class=\"keyword\">const</span>&amp; a, genType <span class=\"keyword\">const</span>&amp; o);</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#gaac30767f2e430b0c3fc859a4d59c7b5b\">bounceEaseIn</a>(genType <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#ga94007005ff0dcfa0749ebfa2aec540b2\">bounceEaseOut</a>(genType <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00318.html#gadf9f38eff1e5f4c2fa5b629a25ae413e\">bounceEaseInOut</a>(genType <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;<span class=\"preprocessor\">#include &quot;easing.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00318_html_gaac30767f2e430b0c3fc859a4d59c7b5b\"><div class=\"ttname\"><a href=\"a00318.html#gaac30767f2e430b0c3fc859a4d59c7b5b\">glm::bounceEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType bounceEaseIn(genType const &amp;a)</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga0c1027637a5b02d4bb3612aa12599d69\"><div class=\"ttname\"><a href=\"a00318.html#ga0c1027637a5b02d4bb3612aa12599d69\">glm::circularEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType circularEaseInOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the piecewise circular function y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1]. </div></div>\n<div class=\"ttc\" id=\"a00318_html_gaff52f746102b94864d105563ba8895ae\"><div class=\"ttname\"><a href=\"a00318.html#gaff52f746102b94864d105563ba8895ae\">glm::cubicEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType cubicEaseIn(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the cubic y = x^3. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga230918eccee4e113d10ec5b8cdc58695\"><div class=\"ttname\"><a href=\"a00318.html#ga230918eccee4e113d10ec5b8cdc58695\">glm::elasticEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType elasticEaseIn(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1)) </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga097579d8e087dcf48037588140a21640\"><div class=\"ttname\"><a href=\"a00318.html#ga097579d8e087dcf48037588140a21640\">glm::quinticEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quinticEaseIn(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the quintic y = x^5. </div></div>\n<div class=\"ttc\" id=\"a00318_html_gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><div class=\"ttname\"><a href=\"a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7\">glm::sineEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType sineEaseInOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after half sine wave. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga26fefde9ced9b72745fe21f1a3fe8da7\"><div class=\"ttname\"><a href=\"a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7\">glm::circularEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType circularEaseOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after shifted quadrant II of unit circle. </div></div>\n<div class=\"ttc\" id=\"a00318_html_gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><div class=\"ttname\"><a href=\"a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365\">glm::elasticEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType elasticEaseOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga2db4ac8959559b11b4029e54812908d6\"><div class=\"ttname\"><a href=\"a00318.html#ga2db4ac8959559b11b4029e54812908d6\">glm::elasticEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType elasticEaseInOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the piecewise exponentially-damped sine wave: y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1]. </div></div>\n<div class=\"ttc\" id=\"a00318_html_gafb338ac6f6b2bcafee50e3dca5201dbf\"><div class=\"ttname\"><a href=\"a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf\">glm::sineEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType sineEaseIn(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after quarter-cycle of sine wave. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga290c3e47cb0a49f2e8abe90b1872b649\"><div class=\"ttname\"><a href=\"a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649\">glm::linearInterpolation</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType linearInterpolation(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the line y = x. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga808b41f14514f47dad5dcc69eb924afd\"><div class=\"ttname\"><a href=\"a00318.html#ga808b41f14514f47dad5dcc69eb924afd\">glm::quarticEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quarticEaseIn(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the quartic x^4. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga4dfb33fa7664aa888eb647999d329b98\"><div class=\"ttname\"><a href=\"a00318.html#ga4dfb33fa7664aa888eb647999d329b98\">glm::quarticEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quarticEaseOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the quartic y = 1 - (x - 1)^4. </div></div>\n<div class=\"ttc\" id=\"a00318_html_gab3e454f883afc1606ef91363881bf5a3\"><div class=\"ttname\"><a href=\"a00318.html#gab3e454f883afc1606ef91363881bf5a3\">glm::sineEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType sineEaseOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after quarter-cycle of sine wave (different phase) </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga03e8fc2d7945a4e63ee33b2159c14cea\"><div class=\"ttname\"><a href=\"a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea\">glm::quadraticEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quadraticEaseInOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the piecewise quadratic y = (1/2)((2x)^2) ; [0, 0.5) y = -(1/2)((2x-1)*(2x-3) - 1) ; [...</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga34508d4b204a321ec26d6086aa047997\"><div class=\"ttname\"><a href=\"a00318.html#ga34508d4b204a321ec26d6086aa047997\">glm::circularEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType circularEaseIn(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after shifted quadrant IV of unit circle. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga283717bc2d937547ad34ec0472234ee3\"><div class=\"ttname\"><a href=\"a00318.html#ga283717bc2d937547ad34ec0472234ee3\">glm::quadraticEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quadraticEaseOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the parabola y = -x^2 + 2x. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga517f2bcfd15bc2c25c466ae50808efc3\"><div class=\"ttname\"><a href=\"a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3\">glm::exponentialEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType exponentialEaseOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the exponential function y = -2^(-10x) + 1. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga7dbd4d5c8da3f5353121f615e7b591d7\"><div class=\"ttname\"><a href=\"a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7\">glm::quinticEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quinticEaseOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the quintic y = (x - 1)^5 + 1. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga40d746385d8bcc5973f5bc6a2340ca91\"><div class=\"ttname\"><a href=\"a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91\">glm::cubicEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType cubicEaseOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the cubic y = (x - 1)^3 + 1. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga232fb6dc093c5ce94bee105ff2947501\"><div class=\"ttname\"><a href=\"a00318.html#ga232fb6dc093c5ce94bee105ff2947501\">glm::exponentialEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType exponentialEaseInOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the piecewise exponential y = (1/2)2^(10(2x - 1)) ; [0,0.5) y = -(1/2)*2^(-10(2x - 1))...</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga94007005ff0dcfa0749ebfa2aec540b2\"><div class=\"ttname\"><a href=\"a00318.html#ga94007005ff0dcfa0749ebfa2aec540b2\">glm::bounceEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType bounceEaseOut(genType const &amp;a)</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga2a82d5c46df7e2d21cc0108eb7b83934\"><div class=\"ttname\"><a href=\"a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934\">glm::quinticEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quinticEaseInOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the piecewise quintic y = (1/2)((2x)^5) ; [0, 0.5) y = (1/2)((2x-2)^5 + 2) ; [0...</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga33777c9dd98f61d9472f96aafdf2bd36\"><div class=\"ttname\"><a href=\"a00318.html#ga33777c9dd98f61d9472f96aafdf2bd36\">glm::backEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType backEaseIn(genType const &amp;a, genType const &amp;o)</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga7f24ee9219ab4c84dc8de24be84c1e3c\"><div class=\"ttname\"><a href=\"a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c\">glm::exponentialEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType exponentialEaseIn(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the exponential function y = 2^(10(x - 1)) </div></div>\n<div class=\"ttc\" id=\"a00318_html_gaf42089d35855695132d217cd902304a0\"><div class=\"ttname\"><a href=\"a00318.html#gaf42089d35855695132d217cd902304a0\">glm::quadraticEaseIn</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quadraticEaseIn(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the parabola y = x^2. </div></div>\n<div class=\"ttc\" id=\"a00318_html_ga6d000f852de12b197e154f234b20c505\"><div class=\"ttname\"><a href=\"a00318.html#ga6d000f852de12b197e154f234b20c505\">glm::quarticEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType quarticEaseInOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the piecewise quartic y = (1/2)((2x)^4) ; [0, 0.5) y = -(1/2)((2x-2)^4 - 2) ; [0...</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga55134072b42d75452189321d4a2ad91c\"><div class=\"ttname\"><a href=\"a00318.html#ga55134072b42d75452189321d4a2ad91c\">glm::cubicEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType cubicEaseInOut(genType const &amp;a)</div><div class=\"ttdoc\">Modelled after the piecewise cubic y = (1/2)((2x)^3) ; [0, 0.5) y = (1/2)((2x-2)^3 + 2) ; [0...</div></div>\n<div class=\"ttc\" id=\"a00318_html_gadf9f38eff1e5f4c2fa5b629a25ae413e\"><div class=\"ttname\"><a href=\"a00318.html#gadf9f38eff1e5f4c2fa5b629a25ae413e\">glm::bounceEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType bounceEaseInOut(genType const &amp;a)</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga68a7b760f2afdfab298d5cd6d7611fb1\"><div class=\"ttname\"><a href=\"a00318.html#ga68a7b760f2afdfab298d5cd6d7611fb1\">glm::backEaseInOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType backEaseInOut(genType const &amp;a, genType const &amp;o)</div></div>\n<div class=\"ttc\" id=\"a00318_html_ga640c1ac6fe9d277a197da69daf60ee4f\"><div class=\"ttname\"><a href=\"a00318.html#ga640c1ac6fe9d277a197da69daf60ee4f\">glm::backEaseOut</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType backEaseOut(genType const &amp;a, genType const &amp;o)</div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00024.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: epsilon.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">epsilon.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00291.html\">GLM_GTC_epsilon</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00024_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga91b417866cafadd076004778217a1844\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga91b417866cafadd076004778217a1844\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html#ga91b417866cafadd076004778217a1844\">epsilonEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga91b417866cafadd076004778217a1844\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00291.html#ga91b417866cafadd076004778217a1844\">More...</a><br /></td></tr>\n<tr class=\"separator:ga91b417866cafadd076004778217a1844\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7f227999ca09e7ca994e8b35aba47bb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa7f227999ca09e7ca994e8b35aba47bb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb\">epsilonEqual</a> (genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaa7f227999ca09e7ca994e8b35aba47bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7f227999ca09e7ca994e8b35aba47bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf840d33b9a5261ec78dcd5125743b025\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf840d33b9a5261ec78dcd5125743b025\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html#gaf840d33b9a5261ec78dcd5125743b025\">epsilonNotEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaf840d33b9a5261ec78dcd5125743b025\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00291.html#gaf840d33b9a5261ec78dcd5125743b025\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf840d33b9a5261ec78dcd5125743b025\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50a92103fb0cbd796908e1bf20c79aaf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga50a92103fb0cbd796908e1bf20c79aaf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf\">epsilonNotEqual</a> (genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga50a92103fb0cbd796908e1bf20c79aaf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50a92103fb0cbd796908e1bf20c79aaf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00291.html\">GLM_GTC_epsilon</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00024_source.html\">epsilon.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00024_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: epsilon.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">epsilon.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00024.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_epsilon extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb\">epsilonEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb\">epsilonEqual</a>(genType <span class=\"keyword\">const</span>&amp; x, genType <span class=\"keyword\">const</span>&amp; y, genType <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf\">epsilonNotEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf\">epsilonNotEqual</a>(genType <span class=\"keyword\">const</span>&amp; x, genType <span class=\"keyword\">const</span>&amp; y, genType <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#include &quot;epsilon.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00291_html_gaa7f227999ca09e7ca994e8b35aba47bb\"><div class=\"ttname\"><a href=\"a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb\">glm::epsilonEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool epsilonEqual(genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)</div><div class=\"ttdoc\">Returns the component-wise comparison of |x - y| < epsilon. </div></div>\n<div class=\"ttc\" id=\"a00291_html_ga50a92103fb0cbd796908e1bf20c79aaf\"><div class=\"ttname\"><a href=\"a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf\">glm::epsilonNotEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool epsilonNotEqual(genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)</div><div class=\"ttdoc\">Returns the component-wise comparison of |x - y| >= epsilon. </div></div>\n<div class=\"ttc\" id=\"a00259_html_ga2a1e57fc5592b69cfae84174cbfc9429\"><div class=\"ttname\"><a href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">glm::epsilon</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class=\"ttdoc\">Return the epsilon constant for floating point types. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00025.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: euler_angles.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">euler_angles.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00319.html\">GLM_GTX_euler_angles</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00025_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga994b8186b3b80d91cf90bc403164692f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga994b8186b3b80d91cf90bc403164692f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga994b8186b3b80d91cf90bc403164692f\">derivedEulerAngleX</a> (T const &amp;angleX, T const &amp;angularVelocityX)</td></tr>\n<tr class=\"memdesc:ga994b8186b3b80d91cf90bc403164692f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis.  <a href=\"a00319.html#ga994b8186b3b80d91cf90bc403164692f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga994b8186b3b80d91cf90bc403164692f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0a4c56ecce7abcb69508ebe6313e9d10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0a4c56ecce7abcb69508ebe6313e9d10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10\">derivedEulerAngleY</a> (T const &amp;angleY, T const &amp;angularVelocityY)</td></tr>\n<tr class=\"memdesc:ga0a4c56ecce7abcb69508ebe6313e9d10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis.  <a href=\"a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0a4c56ecce7abcb69508ebe6313e9d10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae8b397348201c42667be983ba3f344df\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae8b397348201c42667be983ba3f344df\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gae8b397348201c42667be983ba3f344df\">derivedEulerAngleZ</a> (T const &amp;angleZ, T const &amp;angularVelocityZ)</td></tr>\n<tr class=\"memdesc:gae8b397348201c42667be983ba3f344df\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis.  <a href=\"a00319.html#gae8b397348201c42667be983ba3f344df\">More...</a><br /></td></tr>\n<tr class=\"separator:gae8b397348201c42667be983ba3f344df\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafba6282e4ed3ff8b5c75331abfba3489\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gafba6282e4ed3ff8b5c75331abfba3489\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gafba6282e4ed3ff8b5c75331abfba3489\">eulerAngleX</a> (T const &amp;angleX)</td></tr>\n<tr class=\"memdesc:gafba6282e4ed3ff8b5c75331abfba3489\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.  <a href=\"a00319.html#gafba6282e4ed3ff8b5c75331abfba3489\">More...</a><br /></td></tr>\n<tr class=\"separator:gafba6282e4ed3ff8b5c75331abfba3489\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga64036577ee17a2d24be0dbc05881d4e2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga64036577ee17a2d24be0dbc05881d4e2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga64036577ee17a2d24be0dbc05881d4e2\">eulerAngleXY</a> (T const &amp;angleX, T const &amp;angleY)</td></tr>\n<tr class=\"memdesc:ga64036577ee17a2d24be0dbc05881d4e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).  <a href=\"a00319.html#ga64036577ee17a2d24be0dbc05881d4e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga64036577ee17a2d24be0dbc05881d4e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29bd0787a28a6648159c0d6e69706066\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga29bd0787a28a6648159c0d6e69706066\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga29bd0787a28a6648159c0d6e69706066\">eulerAngleXYX</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga29bd0787a28a6648159c0d6e69706066\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X).  <a href=\"a00319.html#ga29bd0787a28a6648159c0d6e69706066\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29bd0787a28a6648159c0d6e69706066\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1975e0f0e9bed7f716dc9946da2ab645\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga1975e0f0e9bed7f716dc9946da2ab645\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645\">eulerAngleXYZ</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga1975e0f0e9bed7f716dc9946da2ab645\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z).  <a href=\"a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1975e0f0e9bed7f716dc9946da2ab645\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa39bd323c65c2fc0a1508be33a237ce9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa39bd323c65c2fc0a1508be33a237ce9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9\">eulerAngleXZ</a> (T const &amp;angleX, T const &amp;angleZ)</td></tr>\n<tr class=\"memdesc:gaa39bd323c65c2fc0a1508be33a237ce9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).  <a href=\"a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa39bd323c65c2fc0a1508be33a237ce9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga60171c79a17aec85d7891ae1d1533ec9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga60171c79a17aec85d7891ae1d1533ec9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga60171c79a17aec85d7891ae1d1533ec9\">eulerAngleXZX</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga60171c79a17aec85d7891ae1d1533ec9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X).  <a href=\"a00319.html#ga60171c79a17aec85d7891ae1d1533ec9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga60171c79a17aec85d7891ae1d1533ec9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga996dce12a60d8a674ba6737a535fa910\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga996dce12a60d8a674ba6737a535fa910\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga996dce12a60d8a674ba6737a535fa910\">eulerAngleXZY</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga996dce12a60d8a674ba6737a535fa910\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y).  <a href=\"a00319.html#ga996dce12a60d8a674ba6737a535fa910\">More...</a><br /></td></tr>\n<tr class=\"separator:ga996dce12a60d8a674ba6737a535fa910\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab84bf4746805fd69b8ecbb230e3974c5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab84bf4746805fd69b8ecbb230e3974c5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gab84bf4746805fd69b8ecbb230e3974c5\">eulerAngleY</a> (T const &amp;angleY)</td></tr>\n<tr class=\"memdesc:gab84bf4746805fd69b8ecbb230e3974c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.  <a href=\"a00319.html#gab84bf4746805fd69b8ecbb230e3974c5\">More...</a><br /></td></tr>\n<tr class=\"separator:gab84bf4746805fd69b8ecbb230e3974c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d\">eulerAngleYX</a> (T const &amp;angleY, T const &amp;angleX)</td></tr>\n<tr class=\"memdesc:ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).  <a href=\"a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga750fba9894117f87bcc529d7349d11de\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga750fba9894117f87bcc529d7349d11de\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga750fba9894117f87bcc529d7349d11de\">eulerAngleYXY</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga750fba9894117f87bcc529d7349d11de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y).  <a href=\"a00319.html#ga750fba9894117f87bcc529d7349d11de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga750fba9894117f87bcc529d7349d11de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab8ba99a9814f6d9edf417b6c6d5b0c10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab8ba99a9814f6d9edf417b6c6d5b0c10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10\">eulerAngleYXZ</a> (T const &amp;yaw, T const &amp;pitch, T const &amp;roll)</td></tr>\n<tr class=\"memdesc:gab8ba99a9814f6d9edf417b6c6d5b0c10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).  <a href=\"a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10\">More...</a><br /></td></tr>\n<tr class=\"separator:gab8ba99a9814f6d9edf417b6c6d5b0c10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga220379e10ac8cca55e275f0c9018fed9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga220379e10ac8cca55e275f0c9018fed9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga220379e10ac8cca55e275f0c9018fed9\">eulerAngleYZ</a> (T const &amp;angleY, T const &amp;angleZ)</td></tr>\n<tr class=\"memdesc:ga220379e10ac8cca55e275f0c9018fed9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).  <a href=\"a00319.html#ga220379e10ac8cca55e275f0c9018fed9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga220379e10ac8cca55e275f0c9018fed9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga08bef16357b8f9b3051b3dcaec4b7848\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga08bef16357b8f9b3051b3dcaec4b7848\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848\">eulerAngleYZX</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga08bef16357b8f9b3051b3dcaec4b7848\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X).  <a href=\"a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848\">More...</a><br /></td></tr>\n<tr class=\"separator:ga08bef16357b8f9b3051b3dcaec4b7848\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5e5e40abc27630749b42b3327c76d6e4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga5e5e40abc27630749b42b3327c76d6e4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga5e5e40abc27630749b42b3327c76d6e4\">eulerAngleYZY</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga5e5e40abc27630749b42b3327c76d6e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y).  <a href=\"a00319.html#ga5e5e40abc27630749b42b3327c76d6e4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5e5e40abc27630749b42b3327c76d6e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b3935248bb6c3ec6b0d9297d406e251\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga5b3935248bb6c3ec6b0d9297d406e251\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251\">eulerAngleZ</a> (T const &amp;angleZ)</td></tr>\n<tr class=\"memdesc:ga5b3935248bb6c3ec6b0d9297d406e251\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.  <a href=\"a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b3935248bb6c3ec6b0d9297d406e251\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga483903115cd4059228961046a28d69b5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga483903115cd4059228961046a28d69b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga483903115cd4059228961046a28d69b5\">eulerAngleZX</a> (T const &amp;angle, T const &amp;angleX)</td></tr>\n<tr class=\"memdesc:ga483903115cd4059228961046a28d69b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).  <a href=\"a00319.html#ga483903115cd4059228961046a28d69b5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga483903115cd4059228961046a28d69b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4505c54d2dd654df4569fd1f04c43aa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab4505c54d2dd654df4569fd1f04c43aa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gab4505c54d2dd654df4569fd1f04c43aa\">eulerAngleZXY</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:gab4505c54d2dd654df4569fd1f04c43aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y).  <a href=\"a00319.html#gab4505c54d2dd654df4569fd1f04c43aa\">More...</a><br /></td></tr>\n<tr class=\"separator:gab4505c54d2dd654df4569fd1f04c43aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga178f966c52b01e4d65e31ebd007e3247\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga178f966c52b01e4d65e31ebd007e3247\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga178f966c52b01e4d65e31ebd007e3247\">eulerAngleZXZ</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga178f966c52b01e4d65e31ebd007e3247\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z).  <a href=\"a00319.html#ga178f966c52b01e4d65e31ebd007e3247\">More...</a><br /></td></tr>\n<tr class=\"separator:ga178f966c52b01e4d65e31ebd007e3247\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga400b2bd5984999efab663f3a68e1d020\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga400b2bd5984999efab663f3a68e1d020\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga400b2bd5984999efab663f3a68e1d020\">eulerAngleZY</a> (T const &amp;angleZ, T const &amp;angleY)</td></tr>\n<tr class=\"memdesc:ga400b2bd5984999efab663f3a68e1d020\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).  <a href=\"a00319.html#ga400b2bd5984999efab663f3a68e1d020\">More...</a><br /></td></tr>\n<tr class=\"separator:ga400b2bd5984999efab663f3a68e1d020\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e61f1e39069c47530acab9167852dd6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga2e61f1e39069c47530acab9167852dd6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga2e61f1e39069c47530acab9167852dd6\">eulerAngleZYX</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga2e61f1e39069c47530acab9167852dd6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X).  <a href=\"a00319.html#ga2e61f1e39069c47530acab9167852dd6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e61f1e39069c47530acab9167852dd6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd795f1dbecaf74974f9c76bbcca6830\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gacd795f1dbecaf74974f9c76bbcca6830\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gacd795f1dbecaf74974f9c76bbcca6830\">eulerAngleZYZ</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:gacd795f1dbecaf74974f9c76bbcca6830\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z).  <a href=\"a00319.html#gacd795f1dbecaf74974f9c76bbcca6830\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd795f1dbecaf74974f9c76bbcca6830\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1077a72171d0f3b08f022ab5ff88af7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf1077a72171d0f3b08f022ab5ff88af7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7\">extractEulerAngleXYX</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gaf1077a72171d0f3b08f022ab5ff88af7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (X * Y * X) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf1077a72171d0f3b08f022ab5ff88af7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacea701562f778c1da4d3a0a1cf091000\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gacea701562f778c1da4d3a0a1cf091000\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gacea701562f778c1da4d3a0a1cf091000\">extractEulerAngleXYZ</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gacea701562f778c1da4d3a0a1cf091000\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (X * Y * Z) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gacea701562f778c1da4d3a0a1cf091000\">More...</a><br /></td></tr>\n<tr class=\"separator:gacea701562f778c1da4d3a0a1cf091000\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacf0bc6c031f25fa3ee0055b62c8260d0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gacf0bc6c031f25fa3ee0055b62c8260d0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0\">extractEulerAngleXZX</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gacf0bc6c031f25fa3ee0055b62c8260d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (X * Z * X) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf0bc6c031f25fa3ee0055b62c8260d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabe5a65d8eb1cd873c8de121cce1a15ed\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gabe5a65d8eb1cd873c8de121cce1a15ed\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed\">extractEulerAngleXZY</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gabe5a65d8eb1cd873c8de121cce1a15ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (X * Z * Y) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed\">More...</a><br /></td></tr>\n<tr class=\"separator:gabe5a65d8eb1cd873c8de121cce1a15ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab8868556361a190db94374e9983ed39\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaab8868556361a190db94374e9983ed39\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gaab8868556361a190db94374e9983ed39\">extractEulerAngleYXY</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gaab8868556361a190db94374e9983ed39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Y * X * Y) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gaab8868556361a190db94374e9983ed39\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab8868556361a190db94374e9983ed39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf0937518e63037335a0e8358b6f053c5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf0937518e63037335a0e8358b6f053c5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gaf0937518e63037335a0e8358b6f053c5\">extractEulerAngleYXZ</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gaf0937518e63037335a0e8358b6f053c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Y * X * Z) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gaf0937518e63037335a0e8358b6f053c5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf0937518e63037335a0e8358b6f053c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9049b78466796c0de2971756e25b93d3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9049b78466796c0de2971756e25b93d3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga9049b78466796c0de2971756e25b93d3\">extractEulerAngleYZX</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga9049b78466796c0de2971756e25b93d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Y * Z * X) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga9049b78466796c0de2971756e25b93d3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9049b78466796c0de2971756e25b93d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga11dad972c109e4bf8694c915017c44a6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga11dad972c109e4bf8694c915017c44a6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga11dad972c109e4bf8694c915017c44a6\">extractEulerAngleYZY</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga11dad972c109e4bf8694c915017c44a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Y * Z * Y) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga11dad972c109e4bf8694c915017c44a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga11dad972c109e4bf8694c915017c44a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81fbbca2ba0c778b9662d5355b4e2363\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga81fbbca2ba0c778b9662d5355b4e2363\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363\">extractEulerAngleZXY</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga81fbbca2ba0c778b9662d5355b4e2363\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Z * X * Y) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363\">More...</a><br /></td></tr>\n<tr class=\"separator:ga81fbbca2ba0c778b9662d5355b4e2363\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga59359fef9bad92afaca55e193f91e702\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga59359fef9bad92afaca55e193f91e702\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga59359fef9bad92afaca55e193f91e702\">extractEulerAngleZXZ</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga59359fef9bad92afaca55e193f91e702\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Z * X * Z) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga59359fef9bad92afaca55e193f91e702\">More...</a><br /></td></tr>\n<tr class=\"separator:ga59359fef9bad92afaca55e193f91e702\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2d6c11a4abfa60c565483cee2d3f7665\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga2d6c11a4abfa60c565483cee2d3f7665\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665\">extractEulerAngleZYX</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga2d6c11a4abfa60c565483cee2d3f7665\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Z * Y * X) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2d6c11a4abfa60c565483cee2d3f7665\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafdfa880a64b565223550c2d3938b1aeb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gafdfa880a64b565223550c2d3938b1aeb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gafdfa880a64b565223550c2d3938b1aeb\">extractEulerAngleZYZ</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gafdfa880a64b565223550c2d3938b1aeb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Z * Y * Z) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gafdfa880a64b565223550c2d3938b1aeb\">More...</a><br /></td></tr>\n<tr class=\"separator:gafdfa880a64b565223550c2d3938b1aeb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae16738a9f1887cf4e4db6a124637608d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae16738a9f1887cf4e4db6a124637608d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gae16738a9f1887cf4e4db6a124637608d\">orientate2</a> (T const &amp;angle)</td></tr>\n<tr class=\"memdesc:gae16738a9f1887cf4e4db6a124637608d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 2D 2 * 2 rotation matrix from an euler angle.  <a href=\"a00319.html#gae16738a9f1887cf4e4db6a124637608d\">More...</a><br /></td></tr>\n<tr class=\"separator:gae16738a9f1887cf4e4db6a124637608d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ca98668a5786f19c7b38299ebbc9b4c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7ca98668a5786f19c7b38299ebbc9b4c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga7ca98668a5786f19c7b38299ebbc9b4c\">orientate3</a> (T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga7ca98668a5786f19c7b38299ebbc9b4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle.  <a href=\"a00319.html#ga7ca98668a5786f19c7b38299ebbc9b4c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ca98668a5786f19c7b38299ebbc9b4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7238c8e15c7720e3ca6a45ab151eeabb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7238c8e15c7720e3ca6a45ab151eeabb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb\">orientate3</a> (vec&lt; 3, T, Q &gt; const &amp;angles)</td></tr>\n<tr class=\"memdesc:ga7238c8e15c7720e3ca6a45ab151eeabb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z).  <a href=\"a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7238c8e15c7720e3ca6a45ab151eeabb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a044653f71a4ecec68e0b623382b48a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4a044653f71a4ecec68e0b623382b48a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga4a044653f71a4ecec68e0b623382b48a\">orientate4</a> (vec&lt; 3, T, Q &gt; const &amp;angles)</td></tr>\n<tr class=\"memdesc:ga4a044653f71a4ecec68e0b623382b48a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).  <a href=\"a00319.html#ga4a044653f71a4ecec68e0b623382b48a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a044653f71a4ecec68e0b623382b48a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae6aa26ccb020d281b449619e419a609e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae6aa26ccb020d281b449619e419a609e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gae6aa26ccb020d281b449619e419a609e\">yawPitchRoll</a> (T const &amp;yaw, T const &amp;pitch, T const &amp;roll)</td></tr>\n<tr class=\"memdesc:gae6aa26ccb020d281b449619e419a609e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).  <a href=\"a00319.html#gae6aa26ccb020d281b449619e419a609e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae6aa26ccb020d281b449619e419a609e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00319.html\">GLM_GTX_euler_angles</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00025_source.html\">euler_angles.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00025_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: euler_angles.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">euler_angles.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00025.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_euler_angles is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_euler_angles extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gafba6282e4ed3ff8b5c75331abfba3489\">eulerAngleX</a>(</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleX);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gab84bf4746805fd69b8ecbb230e3974c5\">eulerAngleY</a>(</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleY);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251\">eulerAngleZ</a>(</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleZ);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga994b8186b3b80d91cf90bc403164692f\">derivedEulerAngleX</a>(</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                T <span class=\"keyword\">const</span> &amp; angleX, T <span class=\"keyword\">const</span> &amp; angularVelocityX);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10\">derivedEulerAngleY</a>(</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                T <span class=\"keyword\">const</span> &amp; angleY, T <span class=\"keyword\">const</span> &amp; angularVelocityY);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gae8b397348201c42667be983ba3f344df\">derivedEulerAngleZ</a>(</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                T <span class=\"keyword\">const</span> &amp; angleZ, T <span class=\"keyword\">const</span> &amp; angularVelocityZ);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga64036577ee17a2d24be0dbc05881d4e2\">eulerAngleXY</a>(</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleX,</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleY);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d\">eulerAngleYX</a>(</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleY,</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleX);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9\">eulerAngleXZ</a>(</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleX,</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleZ);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga483903115cd4059228961046a28d69b5\">eulerAngleZX</a>(</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>,</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleX);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga220379e10ac8cca55e275f0c9018fed9\">eulerAngleYZ</a>(</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleY,</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleZ);</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga400b2bd5984999efab663f3a68e1d020\">eulerAngleZY</a>(</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleZ,</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                T <span class=\"keyword\">const</span>&amp; angleY);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;    <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;    GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645\">eulerAngleXYZ</a>(</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        T <span class=\"keyword\">const</span>&amp; t1,</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        T <span class=\"keyword\">const</span>&amp; t2,</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        T <span class=\"keyword\">const</span>&amp; t3);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10\">eulerAngleYXZ</a>(</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">yaw</a>,</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">pitch</a>,</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">roll</a>);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga60171c79a17aec85d7891ae1d1533ec9\">eulerAngleXZX</a>(</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga29bd0787a28a6648159c0d6e69706066\">eulerAngleXYX</a>(</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga750fba9894117f87bcc529d7349d11de\">eulerAngleYXY</a>(</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga5e5e40abc27630749b42b3327c76d6e4\">eulerAngleYZY</a>(</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gacd795f1dbecaf74974f9c76bbcca6830\">eulerAngleZYZ</a>(</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga178f966c52b01e4d65e31ebd007e3247\">eulerAngleZXZ</a>(</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga996dce12a60d8a674ba6737a535fa910\">eulerAngleXZY</a>(</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848\">eulerAngleYZX</a>(</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga2e61f1e39069c47530acab9167852dd6\">eulerAngleZYX</a>(</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gab4505c54d2dd654df4569fd1f04c43aa\">eulerAngleZXY</a>(</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;                T <span class=\"keyword\">const</span> &amp; t1,</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;                T <span class=\"keyword\">const</span> &amp; t2,</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;                T <span class=\"keyword\">const</span> &amp; t3);</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gae6aa26ccb020d281b449619e419a609e\">yawPitchRoll</a>(</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">yaw</a>,</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">pitch</a>,</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">roll</a>);</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#gae16738a9f1887cf4e4db6a124637608d\">orientate2</a>(T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, defaultp&gt; <a class=\"code\" href=\"a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb\">orientate3</a>(T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb\">orientate3</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; angles);</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00319.html#ga4a044653f71a4ecec68e0b623382b48a\">orientate4</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; angles);</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;    <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;    GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#gacea701562f778c1da4d3a0a1cf091000\">extractEulerAngleXYZ</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span>&amp; M,</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;                                            T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;                                            T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;                                            T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#gaf0937518e63037335a0e8358b6f053c5\">extractEulerAngleYXZ</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0\">extractEulerAngleXZX</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7\">extractEulerAngleXYX</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#gaab8868556361a190db94374e9983ed39\">extractEulerAngleYXY</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#ga11dad972c109e4bf8694c915017c44a6\">extractEulerAngleYZY</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#gafdfa880a64b565223550c2d3938b1aeb\">extractEulerAngleZYZ</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#ga59359fef9bad92afaca55e193f91e702\">extractEulerAngleZXZ</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed\">extractEulerAngleXZY</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#ga9049b78466796c0de2971756e25b93d3\">extractEulerAngleYZX</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665\">extractEulerAngleZYX</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363\">extractEulerAngleZXY</a>(mat&lt;4, 4, T, defaultp&gt; <span class=\"keyword\">const</span> &amp; M,</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;                                                                                        T &amp; t1,</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;                                                                                        T &amp; t2,</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;                                                                                        T &amp; t3);</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;<span class=\"preprocessor\">#include &quot;euler_angles.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00319_html_ga64036577ee17a2d24be0dbc05881d4e2\"><div class=\"ttname\"><a href=\"a00319.html#ga64036577ee17a2d24be0dbc05881d4e2\">glm::eulerAngleXY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleXY(T const &amp;angleX, T const &amp;angleY)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga5e5e40abc27630749b42b3327c76d6e4\"><div class=\"ttname\"><a href=\"a00319.html#ga5e5e40abc27630749b42b3327c76d6e4\">glm::eulerAngleYZY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleYZY(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y). </div></div>\n<div class=\"ttc\" id=\"a00319_html_gaf0937518e63037335a0e8358b6f053c5\"><div class=\"ttname\"><a href=\"a00319.html#gaf0937518e63037335a0e8358b6f053c5\">glm::extractEulerAngleYXZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleYXZ(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (Y * X * Z) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga1975e0f0e9bed7f716dc9946da2ab645\"><div class=\"ttname\"><a href=\"a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645\">glm::eulerAngleXYZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleXYZ(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga996dce12a60d8a674ba6737a535fa910\"><div class=\"ttname\"><a href=\"a00319.html#ga996dce12a60d8a674ba6737a535fa910\">glm::eulerAngleXZY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleXZY(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y). </div></div>\n<div class=\"ttc\" id=\"a00319_html_gae8b397348201c42667be983ba3f344df\"><div class=\"ttname\"><a href=\"a00319.html#gae8b397348201c42667be983ba3f344df\">glm::derivedEulerAngleZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; derivedEulerAngleZ(T const &amp;angleZ, T const &amp;angularVelocityZ)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><div class=\"ttname\"><a href=\"a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d\">glm::eulerAngleYX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleYX(T const &amp;angleY, T const &amp;angleX)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X). </div></div>\n<div class=\"ttc\" id=\"a00319_html_gab84bf4746805fd69b8ecbb230e3974c5\"><div class=\"ttname\"><a href=\"a00319.html#gab84bf4746805fd69b8ecbb230e3974c5\">glm::eulerAngleY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleY(T const &amp;angleY)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00319_html_gafdfa880a64b565223550c2d3938b1aeb\"><div class=\"ttname\"><a href=\"a00319.html#gafdfa880a64b565223550c2d3938b1aeb\">glm::extractEulerAngleZYZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleZYZ(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (Z * Y * Z) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga994b8186b3b80d91cf90bc403164692f\"><div class=\"ttname\"><a href=\"a00319.html#ga994b8186b3b80d91cf90bc403164692f\">glm::derivedEulerAngleX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; derivedEulerAngleX(T const &amp;angleX, T const &amp;angularVelocityX)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis. </div></div>\n<div class=\"ttc\" id=\"a00319_html_gaf1077a72171d0f3b08f022ab5ff88af7\"><div class=\"ttname\"><a href=\"a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7\">glm::extractEulerAngleXYX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleXYX(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (X * Y * X) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_gab4505c54d2dd654df4569fd1f04c43aa\"><div class=\"ttname\"><a href=\"a00319.html#gab4505c54d2dd654df4569fd1f04c43aa\">glm::eulerAngleZXY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleZXY(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y). </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga0cc5ad970d0b00829b139fe0fe5a1e13\"><div class=\"ttname\"><a href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">glm::roll</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T roll(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns roll value of euler angles expressed in radians. </div></div>\n<div class=\"ttc\" id=\"a00319_html_gafba6282e4ed3ff8b5c75331abfba3489\"><div class=\"ttname\"><a href=\"a00319.html#gafba6282e4ed3ff8b5c75331abfba3489\">glm::eulerAngleX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleX(T const &amp;angleX)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X. </div></div>\n<div class=\"ttc\" id=\"a00319_html_gae16738a9f1887cf4e4db6a124637608d\"><div class=\"ttname\"><a href=\"a00319.html#gae16738a9f1887cf4e4db6a124637608d\">glm::orientate2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt; orientate2(T const &amp;angle)</div><div class=\"ttdoc\">Creates a 2D 2 * 2 rotation matrix from an euler angle. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga29bd0787a28a6648159c0d6e69706066\"><div class=\"ttname\"><a href=\"a00319.html#ga29bd0787a28a6648159c0d6e69706066\">glm::eulerAngleXYX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleXYX(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X). </div></div>\n<div class=\"ttc\" id=\"a00319_html_gab8ba99a9814f6d9edf417b6c6d5b0c10\"><div class=\"ttname\"><a href=\"a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10\">glm::eulerAngleYXZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleYXZ(T const &amp;yaw, T const &amp;pitch, T const &amp;roll)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_gacf0bc6c031f25fa3ee0055b62c8260d0\"><div class=\"ttname\"><a href=\"a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0\">glm::extractEulerAngleXZX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleXZX(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (X * Z * X) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga8da38cdfdc452dafa660c2f46506bad5\"><div class=\"ttname\"><a href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">glm::yaw</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T yaw(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns yaw value of euler angles expressed in radians. </div></div>\n<div class=\"ttc\" id=\"a00319_html_gaab8868556361a190db94374e9983ed39\"><div class=\"ttname\"><a href=\"a00319.html#gaab8868556361a190db94374e9983ed39\">glm::extractEulerAngleYXY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleYXY(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (Y * X * Y) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga81fbbca2ba0c778b9662d5355b4e2363\"><div class=\"ttname\"><a href=\"a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363\">glm::extractEulerAngleZXY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleZXY(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (Z * X * Y) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_gabe5a65d8eb1cd873c8de121cce1a15ed\"><div class=\"ttname\"><a href=\"a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed\">glm::extractEulerAngleXZY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleXZY(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (X * Z * Y) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga9049b78466796c0de2971756e25b93d3\"><div class=\"ttname\"><a href=\"a00319.html#ga9049b78466796c0de2971756e25b93d3\">glm::extractEulerAngleYZX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleYZX(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (Y * Z * X) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga60171c79a17aec85d7891ae1d1533ec9\"><div class=\"ttname\"><a href=\"a00319.html#ga60171c79a17aec85d7891ae1d1533ec9\">glm::eulerAngleXZX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleXZX(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga2e61f1e39069c47530acab9167852dd6\"><div class=\"ttname\"><a href=\"a00319.html#ga2e61f1e39069c47530acab9167852dd6\">glm::eulerAngleZYX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleZYX(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga4a044653f71a4ecec68e0b623382b48a\"><div class=\"ttname\"><a href=\"a00319.html#ga4a044653f71a4ecec68e0b623382b48a\">glm::orientate4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; orientate4(vec&lt; 3, T, Q &gt; const &amp;angles)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga2d6c11a4abfa60c565483cee2d3f7665\"><div class=\"ttname\"><a href=\"a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665\">glm::extractEulerAngleZYX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleZYX(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (Z * Y * X) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga5b3935248bb6c3ec6b0d9297d406e251\"><div class=\"ttname\"><a href=\"a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251\">glm::eulerAngleZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleZ(T const &amp;angleZ)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga750fba9894117f87bcc529d7349d11de\"><div class=\"ttname\"><a href=\"a00319.html#ga750fba9894117f87bcc529d7349d11de\">glm::eulerAngleYXY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleYXY(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga11dad972c109e4bf8694c915017c44a6\"><div class=\"ttname\"><a href=\"a00319.html#ga11dad972c109e4bf8694c915017c44a6\">glm::extractEulerAngleYZY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleYZY(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (Y * Z * Y) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_gae6aa26ccb020d281b449619e419a609e\"><div class=\"ttname\"><a href=\"a00319.html#gae6aa26ccb020d281b449619e419a609e\">glm::yawPitchRoll</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; yawPitchRoll(T const &amp;yaw, T const &amp;pitch, T const &amp;roll)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_gaa39bd323c65c2fc0a1508be33a237ce9\"><div class=\"ttname\"><a href=\"a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9\">glm::eulerAngleXZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleXZ(T const &amp;angleX, T const &amp;angleZ)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_gacea701562f778c1da4d3a0a1cf091000\"><div class=\"ttname\"><a href=\"a00319.html#gacea701562f778c1da4d3a0a1cf091000\">glm::extractEulerAngleXYZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleXYZ(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (X * Y * Z) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga178f966c52b01e4d65e31ebd007e3247\"><div class=\"ttname\"><a href=\"a00319.html#ga178f966c52b01e4d65e31ebd007e3247\">glm::eulerAngleZXZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleZXZ(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga08bef16357b8f9b3051b3dcaec4b7848\"><div class=\"ttname\"><a href=\"a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848\">glm::eulerAngleYZX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleYZX(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga400b2bd5984999efab663f3a68e1d020\"><div class=\"ttname\"><a href=\"a00319.html#ga400b2bd5984999efab663f3a68e1d020\">glm::eulerAngleZY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleZY(T const &amp;angleZ, T const &amp;angleY)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y). </div></div>\n<div class=\"ttc\" id=\"a00319_html_gacd795f1dbecaf74974f9c76bbcca6830\"><div class=\"ttname\"><a href=\"a00319.html#gacd795f1dbecaf74974f9c76bbcca6830\">glm::eulerAngleZYZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleZYZ(T const &amp;t1, T const &amp;t2, T const &amp;t3)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga220379e10ac8cca55e275f0c9018fed9\"><div class=\"ttname\"><a href=\"a00319.html#ga220379e10ac8cca55e275f0c9018fed9\">glm::eulerAngleYZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleYZ(T const &amp;angleY, T const &amp;angleZ)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga7238c8e15c7720e3ca6a45ab151eeabb\"><div class=\"ttname\"><a href=\"a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb\">glm::orientate3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; orientate3(vec&lt; 3, T, Q &gt; const &amp;angles)</div><div class=\"ttdoc\">Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z). </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga59359fef9bad92afaca55e193f91e702\"><div class=\"ttname\"><a href=\"a00319.html#ga59359fef9bad92afaca55e193f91e702\">glm::extractEulerAngleZXZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void extractEulerAngleZXZ(mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</div><div class=\"ttdoc\">Extracts the (Z * X * Z) Euler angles from the rotation matrix M. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga0a4c56ecce7abcb69508ebe6313e9d10\"><div class=\"ttname\"><a href=\"a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10\">glm::derivedEulerAngleY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; derivedEulerAngleY(T const &amp;angleY, T const &amp;angularVelocityY)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga7603e81477b46ddb448896909bc04928\"><div class=\"ttname\"><a href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">glm::pitch</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T pitch(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns pitch value of euler angles expressed in radians. </div></div>\n<div class=\"ttc\" id=\"a00319_html_ga483903115cd4059228961046a28d69b5\"><div class=\"ttname\"><a href=\"a00319.html#ga483903115cd4059228961046a28d69b5\">glm::eulerAngleZX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; eulerAngleZX(T const &amp;angle, T const &amp;angleX)</div><div class=\"ttdoc\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X). </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00026.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: exponential.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">exponential.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00026_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga071566cadc7505455e611f2a0353f4d4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga071566cadc7505455e611f2a0353f4d4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">exp</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga071566cadc7505455e611f2a0353f4d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the natural exponentiation of x, i.e., e^x.  <a href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga071566cadc7505455e611f2a0353f4d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaff17ace6b579a03bf223ed4d1ed2cd16\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaff17ace6b579a03bf223ed4d1ed2cd16\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16\">exp2</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaff17ace6b579a03bf223ed4d1ed2cd16\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 2 raised to the v power.  <a href=\"a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16\">More...</a><br /></td></tr>\n<tr class=\"separator:gaff17ace6b579a03bf223ed4d1ed2cd16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a\">inversesqrt</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the reciprocal of the positive square root of v.  <a href=\"a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga918c9f3fd086ce20e6760c903bd30fa9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga918c9f3fd086ce20e6760c903bd30fa9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9\">log</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga918c9f3fd086ce20e6760c903bd30fa9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the natural logarithm of v, i.e., returns the value y which satisfies the equation x = e^y.  <a href=\"a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga918c9f3fd086ce20e6760c903bd30fa9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga82831c7d9cca777cebedfe03a19c8d75\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga82831c7d9cca777cebedfe03a19c8d75\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga82831c7d9cca777cebedfe03a19c8d75\">log2</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga82831c7d9cca777cebedfe03a19c8d75\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y.  <a href=\"a00242.html#ga82831c7d9cca777cebedfe03a19c8d75\">More...</a><br /></td></tr>\n<tr class=\"separator:ga82831c7d9cca777cebedfe03a19c8d75\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2254981952d4f333b900a6bf5167a6c4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2254981952d4f333b900a6bf5167a6c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga2254981952d4f333b900a6bf5167a6c4\">pow</a> (vec&lt; L, T, Q &gt; const &amp;base, vec&lt; L, T, Q &gt; const &amp;exponent)</td></tr>\n<tr class=\"memdesc:ga2254981952d4f333b900a6bf5167a6c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 'base' raised to the power 'exponent'.  <a href=\"a00242.html#ga2254981952d4f333b900a6bf5167a6c4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2254981952d4f333b900a6bf5167a6c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa83e5f1648b7ccdf33b87c07c76cb77c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa83e5f1648b7ccdf33b87c07c76cb77c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c\">sqrt</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa83e5f1648b7ccdf33b87c07c76cb77c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the positive square root of v.  <a href=\"a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa83e5f1648b7ccdf33b87c07c76cb77c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00026_source.html\">exponential.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00026_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: exponential.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">exponential.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00026.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00178.html\">detail/type_vec1.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00179.html\">detail/type_vec2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00180.html\">detail/type_vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00181.html\">detail/type_vec4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &lt;cmath&gt;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00242.html#ga2254981952d4f333b900a6bf5167a6c4\">pow</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; base, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; exponent);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">exp</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9\">log</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16\">exp2</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00242.html#ga82831c7d9cca777cebedfe03a19c8d75\">log2</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c\">sqrt</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a\">inversesqrt</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"preprocessor\">#include &quot;detail/func_exponential.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">type_vec2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00242_html_gaa83e5f1648b7ccdf33b87c07c76cb77c\"><div class=\"ttname\"><a href=\"a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c\">glm::sqrt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; sqrt(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the positive square root of v. </div></div>\n<div class=\"ttc\" id=\"a00242_html_gaff17ace6b579a03bf223ed4d1ed2cd16\"><div class=\"ttname\"><a href=\"a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16\">glm::exp2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; exp2(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns 2 raised to the v power. </div></div>\n<div class=\"ttc\" id=\"a00242_html_ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><div class=\"ttname\"><a href=\"a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a\">glm::inversesqrt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; inversesqrt(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the reciprocal of the positive square root of v. </div></div>\n<div class=\"ttc\" id=\"a00181_html\"><div class=\"ttname\"><a href=\"a00181.html\">type_vec4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00178_html\"><div class=\"ttname\"><a href=\"a00178.html\">type_vec1.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00242_html_ga2254981952d4f333b900a6bf5167a6c4\"><div class=\"ttname\"><a href=\"a00242.html#ga2254981952d4f333b900a6bf5167a6c4\">glm::pow</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; pow(vec&lt; L, T, Q &gt; const &amp;base, vec&lt; L, T, Q &gt; const &amp;exponent)</div><div class=\"ttdoc\">Returns &#39;base&#39; raised to the power &#39;exponent&#39;. </div></div>\n<div class=\"ttc\" id=\"a00242_html_ga071566cadc7505455e611f2a0353f4d4\"><div class=\"ttname\"><a href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">glm::exp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; exp(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the natural exponentiation of x, i.e., e^x. </div></div>\n<div class=\"ttc\" id=\"a00242_html_ga918c9f3fd086ce20e6760c903bd30fa9\"><div class=\"ttname\"><a href=\"a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9\">glm::log</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; log(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the natural logarithm of v, i.e., returns the value y which satisfies the equation x = e^y...</div></div>\n<div class=\"ttc\" id=\"a00180_html\"><div class=\"ttname\"><a href=\"a00180.html\">type_vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00242_html_ga82831c7d9cca777cebedfe03a19c8d75\"><div class=\"ttname\"><a href=\"a00242.html#ga82831c7d9cca777cebedfe03a19c8d75\">glm::log2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; log2(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y...</div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00027.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: ext.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ext.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a> (Dependence)  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00027_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> (Dependence) </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00027_source.html\">ext.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00027_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: ext.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ext.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00027.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00037.html\">glm.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED)</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#       define GLM_MESSAGE_EXT_INCLUDED_DISPLAYED</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: All extensions included (not recommended)&quot;)</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#endif//GLM_MESSAGES</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00063.html\">./ext/matrix_double2x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00064.html\">./ext/matrix_double2x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00065.html\">./ext/matrix_double2x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00066.html\">./ext/matrix_double2x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00067.html\">./ext/matrix_double2x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00068.html\">./ext/matrix_double2x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00069.html\">./ext/matrix_double3x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00070.html\">./ext/matrix_double3x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00071.html\">./ext/matrix_double3x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00072.html\">./ext/matrix_double3x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00073.html\">./ext/matrix_double3x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00074.html\">./ext/matrix_double3x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00075.html\">./ext/matrix_double4x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00076.html\">./ext/matrix_double4x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00077.html\">./ext/matrix_double4x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00078.html\">./ext/matrix_double4x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00079.html\">./ext/matrix_double4x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00080.html\">./ext/matrix_double4x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00082.html\">./ext/matrix_float2x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00083.html\">./ext/matrix_float2x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00084.html\">./ext/matrix_float2x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00085.html\">./ext/matrix_float2x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00086.html\">./ext/matrix_float2x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00087.html\">./ext/matrix_float2x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00088.html\">./ext/matrix_float3x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00089.html\">./ext/matrix_float3x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00090.html\">./ext/matrix_float3x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00091.html\">./ext/matrix_float3x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00092.html\">./ext/matrix_float3x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00093.html\">./ext/matrix_float3x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00094.html\">./ext/matrix_float4x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">#include &quot;./ext/matrix_float4x2_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00096.html\">./ext/matrix_float4x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00097.html\">./ext/matrix_float4x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00098.html\">./ext/matrix_float4x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00099.html\">./ext/matrix_float4x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00107.html\">./ext/matrix_relational.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00128.html\">./ext/quaternion_double.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00129.html\">./ext/quaternion_double_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00131.html\">./ext/quaternion_float.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00132.html\">./ext/quaternion_float_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00133.html\">./ext/quaternion_geometric.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00134.html\">./ext/quaternion_relational.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00145.html\">./ext/scalar_constants.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00146.html\">./ext/scalar_int_sized.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00149.html\">./ext/scalar_relational.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00189.html\">./ext/vector_bool1.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00190.html\">./ext/vector_bool1_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00191.html\">./ext/vector_bool2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00192.html\">./ext/vector_bool2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00193.html\">./ext/vector_bool3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00194.html\">./ext/vector_bool3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00195.html\">./ext/vector_bool4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00196.html\">./ext/vector_bool4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00198.html\">./ext/vector_double1.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00199.html\">./ext/vector_double1_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00200.html\">./ext/vector_double2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00201.html\">./ext/vector_double2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00202.html\">./ext/vector_double3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00203.html\">./ext/vector_double3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00204.html\">./ext/vector_double4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00205.html\">./ext/vector_double4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00206.html\">./ext/vector_float1.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00207.html\">./ext/vector_float1_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00208.html\">./ext/vector_float2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00209.html\">./ext/vector_float2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00210.html\">./ext/vector_float3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00211.html\">./ext/vector_float3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00212.html\">./ext/vector_float4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00213.html\">./ext/vector_float4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00214.html\">./ext/vector_int1.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00215.html\">./ext/vector_int1_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00216.html\">./ext/vector_int2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00217.html\">./ext/vector_int2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00218.html\">./ext/vector_int3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00219.html\">./ext/vector_int3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00220.html\">./ext/vector_int4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00221.html\">./ext/vector_int4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00224.html\">./ext/vector_relational.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00226.html\">./ext/vector_uint1.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00227.html\">./ext/vector_uint1_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00228.html\">./ext/vector_uint2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00229.html\">./ext/vector_uint2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00230.html\">./ext/vector_uint3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00231.html\">./ext/vector_uint3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00232.html\">./ext/vector_uint4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00233.html\">./ext/vector_uint4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00009.html\">./gtc/bitfield.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00012.html\">./gtc/color_space.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00021.html\">./gtc/constants.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00024.html\">./gtc/epsilon.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00041.html\">./gtc/integer.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00058.html\">./gtc/matrix_access.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00100.html\">./gtc/matrix_integer.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00102.html\">./gtc/matrix_inverse.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00109.html\">./gtc/matrix_transform.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00112.html\">./gtc/noise.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00119.html\">./gtc/packing.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00125.html\">./gtc/quaternion.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00137.html\">./gtc/random.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00140.html\">./gtc/reciprocal.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00143.html\">./gtc/round.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00174.html\">./gtc/type_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00175.html\">./gtc/type_ptr.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00182.html\">./gtc/ulp.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00183.html\">./gtc/vec1.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;<span class=\"preprocessor\">#if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;<span class=\"preprocessor\">#       include &quot;<a class=\"code\" href=\"a00161.html\">./gtc/type_aligned.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;<span class=\"preprocessor\">#ifdef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00007.html\">./gtx/associated_min_max.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00008.html\">./gtx/bit.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00010.html\">./gtx/closest_point.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00011.html\">./gtx/color_encoding.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00013.html\">./gtx/color_space.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00014.html\">./gtx/color_space_YCoCg.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00017.html\">./gtx/compatibility.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00018.html\">./gtx/component_wise.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00022.html\">./gtx/dual_quaternion.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00025.html\">./gtx/euler_angles.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00028.html\">./gtx/extend.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00029.html\">./gtx/extended_min_max.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00031.html\">./gtx/fast_exponential.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00032.html\">./gtx/fast_square_root.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00033.html\">./gtx/fast_trigonometry.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00034.html\">./gtx/functions.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00038.html\">./gtx/gradient_paint.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00039.html\">./gtx/handed_coordinate_space.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00042.html\">./gtx/integer.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00044.html\">./gtx/intersect.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00046.html\">./gtx/log_base.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00061.html\">./gtx/matrix_cross_product.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00101.html\">./gtx/matrix_interpolation.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00103.html\">./gtx/matrix_major_storage.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00104.html\">./gtx/matrix_operation.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00106.html\">./gtx/matrix_query.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00111.html\">./gtx/mixed_product.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00113.html\">./gtx/norm.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00114.html\">./gtx/normal.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00115.html\">./gtx/normalize_dot.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00116.html\">./gtx/number_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00117.html\">./gtx/optimum_pow.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00118.html\">./gtx/orthonormalize.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00121.html\">./gtx/perpendicular.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00122.html\">./gtx/polar_coordinates.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00123.html\">./gtx/projection.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00126.html\">./gtx/quaternion.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00139.html\">./gtx/raw_data.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00142.html\">./gtx/rotate_vector.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00154.html\">./gtx/spline.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00155.html\">./gtx/std_based_type.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;<span class=\"preprocessor\">#if !(GLM_COMPILER &amp; GLM_COMPILER_CUDA)</span></div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;<span class=\"preprocessor\">#       include &quot;<a class=\"code\" href=\"a00156.html\">./gtx/string_cast.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00158.html\">./gtx/transform.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00159.html\">./gtx/transform2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00187.html\">./gtx/vec_swizzle.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00188.html\">./gtx/vector_angle.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00223.html\">./gtx/vector_query.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00235.html\">./gtx/wrap.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_TEMPLATE_ALIASES</span></div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;<span class=\"preprocessor\">#       include &quot;<a class=\"code\" href=\"a00148.html\">./gtx/scalar_multiplication.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_RANGE_FOR</span></div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;<span class=\"preprocessor\">#       include &quot;<a class=\"code\" href=\"a00138.html\">./gtx/range.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;<span class=\"preprocessor\">#endif//GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"ttc\" id=\"a00024_html\"><div class=\"ttname\"><a href=\"a00024.html\">epsilon.hpp</a></div><div class=\"ttdoc\">GLM_GTC_epsilon </div></div>\n<div class=\"ttc\" id=\"a00224_html\"><div class=\"ttname\"><a href=\"a00224.html\">vector_relational.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_relational </div></div>\n<div class=\"ttc\" id=\"a00022_html\"><div class=\"ttname\"><a href=\"a00022.html\">dual_quaternion.hpp</a></div><div class=\"ttdoc\">GLM_GTX_dual_quaternion </div></div>\n<div class=\"ttc\" id=\"a00122_html\"><div class=\"ttname\"><a href=\"a00122.html\">polar_coordinates.hpp</a></div><div class=\"ttdoc\">GLM_GTX_polar_coordinates </div></div>\n<div class=\"ttc\" id=\"a00010_html\"><div class=\"ttname\"><a href=\"a00010.html\">closest_point.hpp</a></div><div class=\"ttdoc\">GLM_GTX_closest_point </div></div>\n<div class=\"ttc\" id=\"a00210_html\"><div class=\"ttname\"><a href=\"a00210.html\">vector_float3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00093_html\"><div class=\"ttname\"><a href=\"a00093.html\">matrix_float3x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00068_html\"><div class=\"ttname\"><a href=\"a00068.html\">matrix_double2x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00039_html\"><div class=\"ttname\"><a href=\"a00039.html\">handed_coordinate_space.hpp</a></div><div class=\"ttdoc\">GLM_GTX_handed_coordinate_space </div></div>\n<div class=\"ttc\" id=\"a00193_html\"><div class=\"ttname\"><a href=\"a00193.html\">vector_bool3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00139_html\"><div class=\"ttname\"><a href=\"a00139.html\">raw_data.hpp</a></div><div class=\"ttdoc\">GLM_GTX_raw_data </div></div>\n<div class=\"ttc\" id=\"a00091_html\"><div class=\"ttname\"><a href=\"a00091.html\">matrix_float3x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">vector_bool2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00156_html\"><div class=\"ttname\"><a href=\"a00156.html\">string_cast.hpp</a></div><div class=\"ttdoc\">GLM_GTX_string_cast </div></div>\n<div class=\"ttc\" id=\"a00227_html\"><div class=\"ttname\"><a href=\"a00227.html\">vector_uint1_precision.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_uint1_precision </div></div>\n<div class=\"ttc\" id=\"a00044_html\"><div class=\"ttname\"><a href=\"a00044.html\">intersect.hpp</a></div><div class=\"ttdoc\">GLM_GTX_intersect </div></div>\n<div class=\"ttc\" id=\"a00215_html\"><div class=\"ttname\"><a href=\"a00215.html\">vector_int1_precision.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_int1_precision </div></div>\n<div class=\"ttc\" id=\"a00115_html\"><div class=\"ttname\"><a href=\"a00115.html\">normalize_dot.hpp</a></div><div class=\"ttdoc\">GLM_GTX_normalize_dot </div></div>\n<div class=\"ttc\" id=\"a00042_html\"><div class=\"ttname\"><a href=\"a00042.html\">integer.hpp</a></div><div class=\"ttdoc\">GLM_GTX_integer </div></div>\n<div class=\"ttc\" id=\"a00142_html\"><div class=\"ttname\"><a href=\"a00142.html\">rotate_vector.hpp</a></div><div class=\"ttdoc\">GLM_GTX_rotate_vector </div></div>\n<div class=\"ttc\" id=\"a00203_html\"><div class=\"ttname\"><a href=\"a00203.html\">vector_double3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00103_html\"><div class=\"ttname\"><a href=\"a00103.html\">matrix_major_storage.hpp</a></div><div class=\"ttdoc\">GLM_GTX_matrix_major_storage </div></div>\n<div class=\"ttc\" id=\"a00230_html\"><div class=\"ttname\"><a href=\"a00230.html\">vector_uint3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00201_html\"><div class=\"ttname\"><a href=\"a00201.html\">vector_double2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00088_html\"><div class=\"ttname\"><a href=\"a00088.html\">matrix_float3x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00101_html\"><div class=\"ttname\"><a href=\"a00101.html\">matrix_interpolation.hpp</a></div><div class=\"ttdoc\">GLM_GTX_matrix_interpolation </div></div>\n<div class=\"ttc\" id=\"a00188_html\"><div class=\"ttname\"><a href=\"a00188.html\">vector_angle.hpp</a></div><div class=\"ttdoc\">GLM_GTX_vector_angle </div></div>\n<div class=\"ttc\" id=\"a00159_html\"><div class=\"ttname\"><a href=\"a00159.html\">transform2.hpp</a></div><div class=\"ttdoc\">GLM_GTX_transform2 </div></div>\n<div class=\"ttc\" id=\"a00076_html\"><div class=\"ttname\"><a href=\"a00076.html\">matrix_double4x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00064_html\"><div class=\"ttname\"><a href=\"a00064.html\">matrix_double2x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00235_html\"><div class=\"ttname\"><a href=\"a00235.html\">wrap.hpp</a></div><div class=\"ttdoc\">GLM_GTX_wrap </div></div>\n<div class=\"ttc\" id=\"a00223_html\"><div class=\"ttname\"><a href=\"a00223.html\">vector_query.hpp</a></div><div class=\"ttdoc\">GLM_GTX_vector_query </div></div>\n<div class=\"ttc\" id=\"a00123_html\"><div class=\"ttname\"><a href=\"a00123.html\">projection.hpp</a></div><div class=\"ttdoc\">GLM_GTX_projection </div></div>\n<div class=\"ttc\" id=\"a00021_html\"><div class=\"ttname\"><a href=\"a00021.html\">constants.hpp</a></div><div class=\"ttdoc\">GLM_GTC_constants </div></div>\n<div class=\"ttc\" id=\"a00221_html\"><div class=\"ttname\"><a href=\"a00221.html\">vector_int4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00121_html\"><div class=\"ttname\"><a href=\"a00121.html\">perpendicular.hpp</a></div><div class=\"ttdoc\">GLM_GTX_perpendicular </div></div>\n<div class=\"ttc\" id=\"a00079_html\"><div class=\"ttname\"><a href=\"a00079.html\">matrix_double4x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00096_html\"><div class=\"ttname\"><a href=\"a00096.html\">matrix_float4x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00067_html\"><div class=\"ttname\"><a href=\"a00067.html\">matrix_double2x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00196_html\"><div class=\"ttname\"><a href=\"a00196.html\">vector_bool4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00084_html\"><div class=\"ttname\"><a href=\"a00084.html\">matrix_float2x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00155_html\"><div class=\"ttname\"><a href=\"a00155.html\">std_based_type.hpp</a></div><div class=\"ttdoc\">GLM_GTX_std_based_type </div></div>\n<div class=\"ttc\" id=\"a00082_html\"><div class=\"ttname\"><a href=\"a00082.html\">matrix_float2x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00018_html\"><div class=\"ttname\"><a href=\"a00018.html\">component_wise.hpp</a></div><div class=\"ttdoc\">GLM_GTX_component_wise </div></div>\n<div class=\"ttc\" id=\"a00182_html\"><div class=\"ttname\"><a href=\"a00182.html\">ulp.hpp</a></div><div class=\"ttdoc\">GLM_GTC_ulp </div></div>\n<div class=\"ttc\" id=\"a00143_html\"><div class=\"ttname\"><a href=\"a00143.html\">round.hpp</a></div><div class=\"ttdoc\">GLM_GTC_round </div></div>\n<div class=\"ttc\" id=\"a00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">vector_int3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00118_html\"><div class=\"ttname\"><a href=\"a00118.html\">orthonormalize.hpp</a></div><div class=\"ttdoc\">GLM_GTX_orthonormalize </div></div>\n<div class=\"ttc\" id=\"a00070_html\"><div class=\"ttname\"><a href=\"a00070.html\">matrix_double3x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00041_html\"><div class=\"ttname\"><a href=\"a00041.html\">integer.hpp</a></div><div class=\"ttdoc\">GLM_GTC_integer </div></div>\n<div class=\"ttc\" id=\"a00206_html\"><div class=\"ttname\"><a href=\"a00206.html\">vector_float1.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_float1 </div></div>\n<div class=\"ttc\" id=\"a00099_html\"><div class=\"ttname\"><a href=\"a00099.html\">matrix_float4x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00106_html\"><div class=\"ttname\"><a href=\"a00106.html\">matrix_query.hpp</a></div><div class=\"ttdoc\">GLM_GTX_matrix_query </div></div>\n<div class=\"ttc\" id=\"a00199_html\"><div class=\"ttname\"><a href=\"a00199.html\">vector_double1_precision.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_double1_precision </div></div>\n<div class=\"ttc\" id=\"a00087_html\"><div class=\"ttname\"><a href=\"a00087.html\">matrix_float2x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00187_html\"><div class=\"ttname\"><a href=\"a00187.html\">vec_swizzle.hpp</a></div><div class=\"ttdoc\">GLM_GTX_vec_swizzle </div></div>\n<div class=\"ttc\" id=\"a00075_html\"><div class=\"ttname\"><a href=\"a00075.html\">matrix_double4x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00175_html\"><div class=\"ttname\"><a href=\"a00175.html\">type_ptr.hpp</a></div><div class=\"ttdoc\">GLM_GTC_type_ptr </div></div>\n<div class=\"ttc\" id=\"a00063_html\"><div class=\"ttname\"><a href=\"a00063.html\">matrix_double2x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00038_html\"><div class=\"ttname\"><a href=\"a00038.html\">gradient_paint.hpp</a></div><div class=\"ttdoc\">GLM_GTX_gradient_paint </div></div>\n<div class=\"ttc\" id=\"a00009_html\"><div class=\"ttname\"><a href=\"a00009.html\">bitfield.hpp</a></div><div class=\"ttdoc\">GLM_GTC_bitfield </div></div>\n<div class=\"ttc\" id=\"a00138_html\"><div class=\"ttname\"><a href=\"a00138.html\">range.hpp</a></div><div class=\"ttdoc\">GLM_GTX_range </div></div>\n<div class=\"ttc\" id=\"a00209_html\"><div class=\"ttname\"><a href=\"a00209.html\">vector_float2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00090_html\"><div class=\"ttname\"><a href=\"a00090.html\">matrix_float3x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00109_html\"><div class=\"ttname\"><a href=\"a00109.html\">matrix_transform.hpp</a></div><div class=\"ttdoc\">GLM_GTC_matrix_transform </div></div>\n<div class=\"ttc\" id=\"a00061_html\"><div class=\"ttname\"><a href=\"a00061.html\">matrix_cross_product.hpp</a></div><div class=\"ttdoc\">GLM_GTX_matrix_cross_product </div></div>\n<div class=\"ttc\" id=\"a00190_html\"><div class=\"ttname\"><a href=\"a00190.html\">vector_bool1_precision.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_bool1_precision </div></div>\n<div class=\"ttc\" id=\"a00161_html\"><div class=\"ttname\"><a href=\"a00161.html\">type_aligned.hpp</a></div><div class=\"ttdoc\">GLM_GTC_type_aligned </div></div>\n<div class=\"ttc\" id=\"a00226_html\"><div class=\"ttname\"><a href=\"a00226.html\">vector_uint1.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_uint1 </div></div>\n<div class=\"ttc\" id=\"a00126_html\"><div class=\"ttname\"><a href=\"a00126.html\">quaternion.hpp</a></div><div class=\"ttdoc\">GLM_GTX_quaternion </div></div>\n<div class=\"ttc\" id=\"a00014_html\"><div class=\"ttname\"><a href=\"a00014.html\">color_space_YCoCg.hpp</a></div><div class=\"ttdoc\">GLM_GTX_color_space_YCoCg </div></div>\n<div class=\"ttc\" id=\"a00214_html\"><div class=\"ttname\"><a href=\"a00214.html\">vector_int1.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_int1 </div></div>\n<div class=\"ttc\" id=\"a00114_html\"><div class=\"ttname\"><a href=\"a00114.html\">normal.hpp</a></div><div class=\"ttdoc\">GLM_GTX_normal </div></div>\n<div class=\"ttc\" id=\"a00012_html\"><div class=\"ttname\"><a href=\"a00012.html\">color_space.hpp</a></div><div class=\"ttdoc\">GLM_GTC_color_space </div></div>\n<div class=\"ttc\" id=\"a00212_html\"><div class=\"ttname\"><a href=\"a00212.html\">vector_float4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00112_html\"><div class=\"ttname\"><a href=\"a00112.html\">noise.hpp</a></div><div class=\"ttdoc\">GLM_GTC_noise </div></div>\n<div class=\"ttc\" id=\"a00195_html\"><div class=\"ttname\"><a href=\"a00195.html\">vector_bool4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00200_html\"><div class=\"ttname\"><a href=\"a00200.html\">vector_double2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00083_html\"><div class=\"ttname\"><a href=\"a00083.html\">matrix_float2x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00100_html\"><div class=\"ttname\"><a href=\"a00100.html\">matrix_integer.hpp</a></div><div class=\"ttdoc\">GLM_GTC_matrix_integer </div></div>\n<div class=\"ttc\" id=\"a00058_html\"><div class=\"ttname\"><a href=\"a00058.html\">matrix_access.hpp</a></div><div class=\"ttdoc\">GLM_GTC_matrix_access </div></div>\n<div class=\"ttc\" id=\"a00029_html\"><div class=\"ttname\"><a href=\"a00029.html\">extended_min_max.hpp</a></div><div class=\"ttdoc\">GLM_GTX_extented_min_max </div></div>\n<div class=\"ttc\" id=\"a00183_html\"><div class=\"ttname\"><a href=\"a00183.html\">vec1.hpp</a></div><div class=\"ttdoc\">GLM_GTC_vec1 </div></div>\n<div class=\"ttc\" id=\"a00158_html\"><div class=\"ttname\"><a href=\"a00158.html\">transform.hpp</a></div><div class=\"ttdoc\">GLM_GTX_transform </div></div>\n<div class=\"ttc\" id=\"a00229_html\"><div class=\"ttname\"><a href=\"a00229.html\">vector_uint2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00129_html\"><div class=\"ttname\"><a href=\"a00129.html\">quaternion_double_precision.hpp</a></div><div class=\"ttdoc\">GLM_EXT_quaternion_double_precision </div></div>\n<div class=\"ttc\" id=\"a00046_html\"><div class=\"ttname\"><a href=\"a00046.html\">log_base.hpp</a></div><div class=\"ttdoc\">GLM_GTX_log_base </div></div>\n<div class=\"ttc\" id=\"a00017_html\"><div class=\"ttname\"><a href=\"a00017.html\">compatibility.hpp</a></div><div class=\"ttdoc\">GLM_GTX_compatibility </div></div>\n<div class=\"ttc\" id=\"a00146_html\"><div class=\"ttname\"><a href=\"a00146.html\">scalar_int_sized.hpp</a></div><div class=\"ttdoc\">GLM_EXT_scalar_int_sized </div></div>\n<div class=\"ttc\" id=\"a00217_html\"><div class=\"ttname\"><a href=\"a00217.html\">vector_int2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00117_html\"><div class=\"ttname\"><a href=\"a00117.html\">optimum_pow.hpp</a></div><div class=\"ttdoc\">GLM_GTX_optimum_pow </div></div>\n<div class=\"ttc\" id=\"a00034_html\"><div class=\"ttname\"><a href=\"a00034.html\">functions.hpp</a></div><div class=\"ttdoc\">GLM_GTX_functions </div></div>\n<div class=\"ttc\" id=\"a00134_html\"><div class=\"ttname\"><a href=\"a00134.html\">quaternion_relational.hpp</a></div><div class=\"ttdoc\">GLM_EXT_quaternion_relational </div></div>\n<div class=\"ttc\" id=\"a00205_html\"><div class=\"ttname\"><a href=\"a00205.html\">vector_double4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00032_html\"><div class=\"ttname\"><a href=\"a00032.html\">fast_square_root.hpp</a></div><div class=\"ttdoc\">GLM_GTX_fast_square_root </div></div>\n<div class=\"ttc\" id=\"a00232_html\"><div class=\"ttname\"><a href=\"a00232.html\">vector_uint4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00132_html\"><div class=\"ttname\"><a href=\"a00132.html\">quaternion_float_precision.hpp</a></div><div class=\"ttdoc\">GLM_EXT_quaternion_float_precision </div></div>\n<div class=\"ttc\" id=\"a00220_html\"><div class=\"ttname\"><a href=\"a00220.html\">vector_int4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00078_html\"><div class=\"ttname\"><a href=\"a00078.html\">matrix_double4x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00149_html\"><div class=\"ttname\"><a href=\"a00149.html\">scalar_relational.hpp</a></div><div class=\"ttdoc\">GLM_EXT_scalar_relational </div></div>\n<div class=\"ttc\" id=\"a00066_html\"><div class=\"ttname\"><a href=\"a00066.html\">matrix_double2x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00037_html\"><div class=\"ttname\"><a href=\"a00037.html\">glm.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00137_html\"><div class=\"ttname\"><a href=\"a00137.html\">random.hpp</a></div><div class=\"ttdoc\">GLM_GTC_random </div></div>\n<div class=\"ttc\" id=\"a00025_html\"><div class=\"ttname\"><a href=\"a00025.html\">euler_angles.hpp</a></div><div class=\"ttdoc\">GLM_GTX_euler_angles </div></div>\n<div class=\"ttc\" id=\"a00154_html\"><div class=\"ttname\"><a href=\"a00154.html\">spline.hpp</a></div><div class=\"ttdoc\">GLM_GTX_spline </div></div>\n<div class=\"ttc\" id=\"a00125_html\"><div class=\"ttname\"><a href=\"a00125.html\">quaternion.hpp</a></div><div class=\"ttdoc\">GLM_GTC_quaternion </div></div>\n<div class=\"ttc\" id=\"a00013_html\"><div class=\"ttname\"><a href=\"a00013.html\">color_space.hpp</a></div><div class=\"ttdoc\">GLM_GTX_color_space </div></div>\n<div class=\"ttc\" id=\"a00213_html\"><div class=\"ttname\"><a href=\"a00213.html\">vector_float4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00113_html\"><div class=\"ttname\"><a href=\"a00113.html\">norm.hpp</a></div><div class=\"ttdoc\">GLM_GTX_norm </div></div>\n<div class=\"ttc\" id=\"a00011_html\"><div class=\"ttname\"><a href=\"a00011.html\">color_encoding.hpp</a></div><div class=\"ttdoc\">GLM_GTX_color_encoding </div></div>\n<div class=\"ttc\" id=\"a00140_html\"><div class=\"ttname\"><a href=\"a00140.html\">reciprocal.hpp</a></div><div class=\"ttdoc\">GLM_GTC_reciprocal </div></div>\n<div class=\"ttc\" id=\"a00211_html\"><div class=\"ttname\"><a href=\"a00211.html\">vector_float3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00098_html\"><div class=\"ttname\"><a href=\"a00098.html\">matrix_float4x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00111_html\"><div class=\"ttname\"><a href=\"a00111.html\">mixed_product.hpp</a></div><div class=\"ttdoc\">GLM_GTX_mixed_producte </div></div>\n<div class=\"ttc\" id=\"a00069_html\"><div class=\"ttname\"><a href=\"a00069.html\">matrix_double3x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00198_html\"><div class=\"ttname\"><a href=\"a00198.html\">vector_double1.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_double1 </div></div>\n<div class=\"ttc\" id=\"a00086_html\"><div class=\"ttname\"><a href=\"a00086.html\">matrix_float2x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00074_html\"><div class=\"ttname\"><a href=\"a00074.html\">matrix_double3x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00174_html\"><div class=\"ttname\"><a href=\"a00174.html\">type_precision.hpp</a></div><div class=\"ttdoc\">GLM_GTC_type_precision </div></div>\n<div class=\"ttc\" id=\"a00145_html\"><div class=\"ttname\"><a href=\"a00145.html\">scalar_constants.hpp</a></div><div class=\"ttdoc\">GLM_EXT_scalar_constants </div></div>\n<div class=\"ttc\" id=\"a00072_html\"><div class=\"ttname\"><a href=\"a00072.html\">matrix_double3x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00033_html\"><div class=\"ttname\"><a href=\"a00033.html\">fast_trigonometry.hpp</a></div><div class=\"ttdoc\">GLM_GTX_fast_trigonometry </div></div>\n<div class=\"ttc\" id=\"a00008_html\"><div class=\"ttname\"><a href=\"a00008.html\">bit.hpp</a></div><div class=\"ttdoc\">GLM_GTX_bit </div></div>\n<div class=\"ttc\" id=\"a00233_html\"><div class=\"ttname\"><a href=\"a00233.html\">vector_uint4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00133_html\"><div class=\"ttname\"><a href=\"a00133.html\">quaternion_geometric.hpp</a></div><div class=\"ttdoc\">GLM_EXT_quaternion_geometric </div></div>\n<div class=\"ttc\" id=\"a00208_html\"><div class=\"ttname\"><a href=\"a00208.html\">vector_float2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00031_html\"><div class=\"ttname\"><a href=\"a00031.html\">fast_exponential.hpp</a></div><div class=\"ttdoc\">GLM_GTX_fast_exponential </div></div>\n<div class=\"ttc\" id=\"a00231_html\"><div class=\"ttname\"><a href=\"a00231.html\">vector_uint3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00131_html\"><div class=\"ttname\"><a href=\"a00131.html\">quaternion_float.hpp</a></div><div class=\"ttdoc\">GLM_EXT_quaternion_float </div></div>\n<div class=\"ttc\" id=\"a00089_html\"><div class=\"ttname\"><a href=\"a00089.html\">matrix_float3x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00189_html\"><div class=\"ttname\"><a href=\"a00189.html\">vector_bool1.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_bool1 </div></div>\n<div class=\"ttc\" id=\"a00077_html\"><div class=\"ttname\"><a href=\"a00077.html\">matrix_double4x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00094_html\"><div class=\"ttname\"><a href=\"a00094.html\">matrix_float4x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00065_html\"><div class=\"ttname\"><a href=\"a00065.html\">matrix_double2x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00194_html\"><div class=\"ttname\"><a href=\"a00194.html\">vector_bool3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00092_html\"><div class=\"ttname\"><a href=\"a00092.html\">matrix_float3x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00028_html\"><div class=\"ttname\"><a href=\"a00028.html\">extend.hpp</a></div><div class=\"ttdoc\">GLM_GTX_extend </div></div>\n<div class=\"ttc\" id=\"a00192_html\"><div class=\"ttname\"><a href=\"a00192.html\">vector_bool2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00228_html\"><div class=\"ttname\"><a href=\"a00228.html\">vector_uint2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00128_html\"><div class=\"ttname\"><a href=\"a00128.html\">quaternion_double.hpp</a></div><div class=\"ttdoc\">GLM_EXT_quaternion_double </div></div>\n<div class=\"ttc\" id=\"a00080_html\"><div class=\"ttname\"><a href=\"a00080.html\">matrix_double4x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00216_html\"><div class=\"ttname\"><a href=\"a00216.html\">vector_int2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00116_html\"><div class=\"ttname\"><a href=\"a00116.html\">number_precision.hpp</a></div><div class=\"ttdoc\">GLM_GTX_number_precision </div></div>\n<div class=\"ttc\" id=\"a00204_html\"><div class=\"ttname\"><a href=\"a00204.html\">vector_double4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00097_html\"><div class=\"ttname\"><a href=\"a00097.html\">matrix_float4x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00104_html\"><div class=\"ttname\"><a href=\"a00104.html\">matrix_operation.hpp</a></div><div class=\"ttdoc\">GLM_GTX_matrix_operation </div></div>\n<div class=\"ttc\" id=\"a00202_html\"><div class=\"ttname\"><a href=\"a00202.html\">vector_double3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00085_html\"><div class=\"ttname\"><a href=\"a00085.html\">matrix_float2x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00102_html\"><div class=\"ttname\"><a href=\"a00102.html\">matrix_inverse.hpp</a></div><div class=\"ttdoc\">GLM_GTC_matrix_inverse </div></div>\n<div class=\"ttc\" id=\"a00073_html\"><div class=\"ttname\"><a href=\"a00073.html\">matrix_double3x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00148_html\"><div class=\"ttname\"><a href=\"a00148.html\">scalar_multiplication.hpp</a></div><div class=\"ttdoc\">Experimental extensions </div></div>\n<div class=\"ttc\" id=\"a00219_html\"><div class=\"ttname\"><a href=\"a00219.html\">vector_int3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00119_html\"><div class=\"ttname\"><a href=\"a00119.html\">packing.hpp</a></div><div class=\"ttdoc\">GLM_GTC_packing </div></div>\n<div class=\"ttc\" id=\"a00071_html\"><div class=\"ttname\"><a href=\"a00071.html\">matrix_double3x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00007_html\"><div class=\"ttname\"><a href=\"a00007.html\">associated_min_max.hpp</a></div><div class=\"ttdoc\">GLM_GTX_associated_min_max </div></div>\n<div class=\"ttc\" id=\"a00207_html\"><div class=\"ttname\"><a href=\"a00207.html\">vector_float1_precision.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_float1_precision </div></div>\n<div class=\"ttc\" id=\"a00107_html\"><div class=\"ttname\"><a href=\"a00107.html\">matrix_relational.hpp</a></div><div class=\"ttdoc\">GLM_EXT_matrix_relational </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00028.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: extend.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">extend.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00320.html\">GLM_GTX_extend</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00028_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8140caae613b0f847ab0d7175dc03a37\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8140caae613b0f847ab0d7175dc03a37\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00320.html#ga8140caae613b0f847ab0d7175dc03a37\">extend</a> (genType const &amp;Origin, genType const &amp;Source, typename genType::value_type const Length)</td></tr>\n<tr class=\"memdesc:ga8140caae613b0f847ab0d7175dc03a37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extends of Length the Origin position using the (Source - Origin) direction.  <a href=\"a00320.html#ga8140caae613b0f847ab0d7175dc03a37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8140caae613b0f847ab0d7175dc03a37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00320.html\">GLM_GTX_extend</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00028_source.html\">extend.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00028_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: extend.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">extend.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00028.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_extend extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00320.html#ga8140caae613b0f847ab0d7175dc03a37\">extend</a>(</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                genType <span class=\"keyword\">const</span>&amp; Origin,</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                genType <span class=\"keyword\">const</span>&amp; Source,</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                <span class=\"keyword\">typename</span> genType::value_type <span class=\"keyword\">const</span> Length);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#include &quot;extend.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00320_html_ga8140caae613b0f847ab0d7175dc03a37\"><div class=\"ttname\"><a href=\"a00320.html#ga8140caae613b0f847ab0d7175dc03a37\">glm::extend</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType extend(genType const &amp;Origin, genType const &amp;Source, typename genType::value_type const Length)</div><div class=\"ttdoc\">Extends of Length the Origin position using the (Source - Origin) direction. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00029.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: extended_min_max.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">extended_min_max.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00321.html\">GLM_GTX_extented_min_max</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00029_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1e28539d3a46965ed9ef92ec7cb3b18a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga1e28539d3a46965ed9ef92ec7cb3b18a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga1e28539d3a46965ed9ef92ec7cb3b18a\">fclamp</a> (genType x, genType minVal, genType maxVal)</td></tr>\n<tr class=\"memdesc:ga1e28539d3a46965ed9ef92ec7cb3b18a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x.  <a href=\"a00321.html#ga1e28539d3a46965ed9ef92ec7cb3b18a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e28539d3a46965ed9ef92ec7cb3b18a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga60796d08903489ee185373593bc16b9d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga60796d08903489ee185373593bc16b9d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga60796d08903489ee185373593bc16b9d\">fclamp</a> (vec&lt; L, T, Q &gt; const &amp;x, T minVal, T maxVal)</td></tr>\n<tr class=\"memdesc:ga60796d08903489ee185373593bc16b9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x.  <a href=\"a00321.html#ga60796d08903489ee185373593bc16b9d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga60796d08903489ee185373593bc16b9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c15fa4709763c269c86c0b8b3aa2297\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5c15fa4709763c269c86c0b8b3aa2297\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297\">fclamp</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)</td></tr>\n<tr class=\"memdesc:ga5c15fa4709763c269c86c0b8b3aa2297\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x.  <a href=\"a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c15fa4709763c269c86c0b8b3aa2297\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5792cb2b51190057e4aea027eb56f81\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae5792cb2b51190057e4aea027eb56f81\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gae5792cb2b51190057e4aea027eb56f81\">fmax</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:gae5792cb2b51190057e4aea027eb56f81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00321.html#gae5792cb2b51190057e4aea027eb56f81\">More...</a><br /></td></tr>\n<tr class=\"separator:gae5792cb2b51190057e4aea027eb56f81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa3200559611ac5b9b9ae7283547916a7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa3200559611ac5b9b9ae7283547916a7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gaa3200559611ac5b9b9ae7283547916a7\">fmin</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:gaa3200559611ac5b9b9ae7283547916a7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00321.html#gaa3200559611ac5b9b9ae7283547916a7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3200559611ac5b9b9ae7283547916a7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04991ccb9865c4c4e58488cfb209ce69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga04991ccb9865c4c4e58488cfb209ce69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga04991ccb9865c4c4e58488cfb209ce69\">max</a> (T const &amp;x, T const &amp;y, T const &amp;z)</td></tr>\n<tr class=\"memdesc:ga04991ccb9865c4c4e58488cfb209ce69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 3 inputs.  <a href=\"a00321.html#ga04991ccb9865c4c4e58488cfb209ce69\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04991ccb9865c4c4e58488cfb209ce69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1b7bbe5c91de4924835ea3e14530744\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:gae1b7bbe5c91de4924835ea3e14530744\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gae1b7bbe5c91de4924835ea3e14530744\">max</a> (C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z)</td></tr>\n<tr class=\"memdesc:gae1b7bbe5c91de4924835ea3e14530744\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 3 inputs.  <a href=\"a00321.html#gae1b7bbe5c91de4924835ea3e14530744\">More...</a><br /></td></tr>\n<tr class=\"separator:gae1b7bbe5c91de4924835ea3e14530744\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf832e9d4ab4826b2dda2fda25935a3a4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:gaf832e9d4ab4826b2dda2fda25935a3a4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gaf832e9d4ab4826b2dda2fda25935a3a4\">max</a> (C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z)</td></tr>\n<tr class=\"memdesc:gaf832e9d4ab4826b2dda2fda25935a3a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 3 inputs.  <a href=\"a00321.html#gaf832e9d4ab4826b2dda2fda25935a3a4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf832e9d4ab4826b2dda2fda25935a3a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78e04a0cef1c4863fcae1a2130500d87\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga78e04a0cef1c4863fcae1a2130500d87\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga78e04a0cef1c4863fcae1a2130500d87\">max</a> (T const &amp;x, T const &amp;y, T const &amp;z, T const &amp;w)</td></tr>\n<tr class=\"memdesc:ga78e04a0cef1c4863fcae1a2130500d87\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 4 inputs.  <a href=\"a00321.html#ga78e04a0cef1c4863fcae1a2130500d87\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78e04a0cef1c4863fcae1a2130500d87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cca8b53cfda402040494cdf40fbdf4a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga7cca8b53cfda402040494cdf40fbdf4a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga7cca8b53cfda402040494cdf40fbdf4a\">max</a> (C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z, typename C&lt; T &gt;::T const &amp;w)</td></tr>\n<tr class=\"memdesc:ga7cca8b53cfda402040494cdf40fbdf4a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 4 inputs.  <a href=\"a00321.html#ga7cca8b53cfda402040494cdf40fbdf4a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7cca8b53cfda402040494cdf40fbdf4a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaacffbc466c2d08c140b181e7fd8a4858\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:gaacffbc466c2d08c140b181e7fd8a4858\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">max</a> (C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)</td></tr>\n<tr class=\"memdesc:gaacffbc466c2d08c140b181e7fd8a4858\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 4 inputs.  <a href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">More...</a><br /></td></tr>\n<tr class=\"separator:gaacffbc466c2d08c140b181e7fd8a4858\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga713d3f9b3e76312c0d314e0c8611a6a6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga713d3f9b3e76312c0d314e0c8611a6a6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga713d3f9b3e76312c0d314e0c8611a6a6\">min</a> (T const &amp;x, T const &amp;y, T const &amp;z)</td></tr>\n<tr class=\"memdesc:ga713d3f9b3e76312c0d314e0c8611a6a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 3 inputs.  <a href=\"a00321.html#ga713d3f9b3e76312c0d314e0c8611a6a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga713d3f9b3e76312c0d314e0c8611a6a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74d1a96e7cdbac40f6d35142d3bcbbd4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga74d1a96e7cdbac40f6d35142d3bcbbd4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga74d1a96e7cdbac40f6d35142d3bcbbd4\">min</a> (C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z)</td></tr>\n<tr class=\"memdesc:ga74d1a96e7cdbac40f6d35142d3bcbbd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 3 inputs.  <a href=\"a00321.html#ga74d1a96e7cdbac40f6d35142d3bcbbd4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74d1a96e7cdbac40f6d35142d3bcbbd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga42b5c3fc027fd3d9a50d2ccc9126d9f0\">min</a> (C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z)</td></tr>\n<tr class=\"memdesc:ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 3 inputs.  <a href=\"a00321.html#ga42b5c3fc027fd3d9a50d2ccc9126d9f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga95466987024d03039607f09e69813d69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga95466987024d03039607f09e69813d69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga95466987024d03039607f09e69813d69\">min</a> (T const &amp;x, T const &amp;y, T const &amp;z, T const &amp;w)</td></tr>\n<tr class=\"memdesc:ga95466987024d03039607f09e69813d69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 4 inputs.  <a href=\"a00321.html#ga95466987024d03039607f09e69813d69\">More...</a><br /></td></tr>\n<tr class=\"separator:ga95466987024d03039607f09e69813d69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4fe35dd31dd0c45693c9b60b830b8d47\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga4fe35dd31dd0c45693c9b60b830b8d47\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga4fe35dd31dd0c45693c9b60b830b8d47\">min</a> (C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z, typename C&lt; T &gt;::T const &amp;w)</td></tr>\n<tr class=\"memdesc:ga4fe35dd31dd0c45693c9b60b830b8d47\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 4 inputs.  <a href=\"a00321.html#ga4fe35dd31dd0c45693c9b60b830b8d47\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4fe35dd31dd0c45693c9b60b830b8d47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7471ea4159eed8dd9ea4ac5d46c2fead\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga7471ea4159eed8dd9ea4ac5d46c2fead\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">min</a> (C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)</td></tr>\n<tr class=\"memdesc:ga7471ea4159eed8dd9ea4ac5d46c2fead\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 4 inputs.  <a href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7471ea4159eed8dd9ea4ac5d46c2fead\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00321.html\">GLM_GTX_extented_min_max</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00029_source.html\">extended_min_max.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00029_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: extended_min_max.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">extended_min_max.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00029.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_extented_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_extented_min_max extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">min</a>(</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                T <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                T <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                T <span class=\"keyword\">const</span>&amp; z);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span>&gt; <span class=\"keyword\">class </span>C&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL C&lt;T&gt; <a class=\"code\" href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">min</a>(</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; z);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span>&gt; <span class=\"keyword\">class </span>C&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL C&lt;T&gt; <a class=\"code\" href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">min</a>(</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; z);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">min</a>(</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                T <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                T <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                T <span class=\"keyword\">const</span>&amp; z,</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                T <span class=\"keyword\">const</span>&amp; w);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span>&gt; <span class=\"keyword\">class </span>C&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_FUNC_DECL C&lt;T&gt; <a class=\"code\" href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">min</a>(</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; z,</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; w);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span>&gt; <span class=\"keyword\">class </span>C&gt;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        GLM_FUNC_DECL C&lt;T&gt; <a class=\"code\" href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">min</a>(</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; z,</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; w);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">max</a>(</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                T <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                T <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                T <span class=\"keyword\">const</span>&amp; z);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span>&gt; <span class=\"keyword\">class </span>C&gt;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        GLM_FUNC_DECL C&lt;T&gt; <a class=\"code\" href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">max</a>(</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; z);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span>&gt; <span class=\"keyword\">class </span>C&gt;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        GLM_FUNC_DECL C&lt;T&gt; <a class=\"code\" href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">max</a>(</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; z);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">max</a>(</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                T <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                T <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;                T <span class=\"keyword\">const</span>&amp; z,</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;                T <span class=\"keyword\">const</span>&amp; w);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span>&gt; <span class=\"keyword\">class </span>C&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        GLM_FUNC_DECL C&lt;T&gt; <a class=\"code\" href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">max</a>(</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; z,</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;                <span class=\"keyword\">typename</span> C&lt;T&gt;::T <span class=\"keyword\">const</span>&amp; w);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span>&gt; <span class=\"keyword\">class </span>C&gt;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        GLM_FUNC_DECL C&lt;T&gt; <a class=\"code\" href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">max</a>(</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; z,</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                C&lt;T&gt; <span class=\"keyword\">const</span>&amp; w);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00321.html#gaa3200559611ac5b9b9ae7283547916a7\">fmin</a>(genType x, genType y);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00321.html#gae5792cb2b51190057e4aea027eb56f81\">fmax</a>(genType x, genType y);</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297\">fclamp</a>(genType x, genType minVal, genType maxVal);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297\">fclamp</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, T minVal, T maxVal);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297\">fclamp</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; minVal, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; maxVal);</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;<span class=\"preprocessor\">#include &quot;extended_min_max.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00321_html_ga5c15fa4709763c269c86c0b8b3aa2297\"><div class=\"ttname\"><a href=\"a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297\">glm::fclamp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fclamp(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)</div><div class=\"ttdoc\">Returns min(max(x, minVal), maxVal) for each component in x. </div></div>\n<div class=\"ttc\" id=\"a00321_html_gaa3200559611ac5b9b9ae7283547916a7\"><div class=\"ttname\"><a href=\"a00321.html#gaa3200559611ac5b9b9ae7283547916a7\">glm::fmin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType fmin(genType x, genType y)</div><div class=\"ttdoc\">Returns y if y < x; otherwise, it returns x. </div></div>\n<div class=\"ttc\" id=\"a00321_html_gae5792cb2b51190057e4aea027eb56f81\"><div class=\"ttname\"><a href=\"a00321.html#gae5792cb2b51190057e4aea027eb56f81\">glm::fmax</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType fmax(genType x, genType y)</div><div class=\"ttdoc\">Returns y if x < y; otherwise, it returns x. </div></div>\n<div class=\"ttc\" id=\"a00321_html_gaacffbc466c2d08c140b181e7fd8a4858\"><div class=\"ttname\"><a href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">glm::max</a></div><div class=\"ttdeci\">GLM_FUNC_DECL C&lt; T &gt; max(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)</div><div class=\"ttdoc\">Return the maximum component-wise values of 4 inputs. </div></div>\n<div class=\"ttc\" id=\"a00321_html_ga7471ea4159eed8dd9ea4ac5d46c2fead\"><div class=\"ttname\"><a href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">glm::min</a></div><div class=\"ttdeci\">GLM_FUNC_DECL C&lt; T &gt; min(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)</div><div class=\"ttdoc\">Return the minimum component-wise values of 4 inputs. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00030.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: exterior_product.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">exterior_product.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00322.html\">GLM_GTX_exterior_product</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00030_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gac36e72b934ea6a9dd313772d7e78fa93\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac36e72b934ea6a9dd313772d7e78fa93\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00322.html#gac36e72b934ea6a9dd313772d7e78fa93\">cross</a> (vec&lt; 2, T, Q &gt; const &amp;v, vec&lt; 2, T, Q &gt; const &amp;u)</td></tr>\n<tr class=\"memdesc:gac36e72b934ea6a9dd313772d7e78fa93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the cross product of x and y.  <a href=\"a00322.html#gac36e72b934ea6a9dd313772d7e78fa93\">More...</a><br /></td></tr>\n<tr class=\"separator:gac36e72b934ea6a9dd313772d7e78fa93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00322.html\">GLM_GTX_exterior_product</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00322.html\" title=\"Include <glm/gtx/exterior_product.hpp> to use the features of this extension. \">GLM_GTX_exterior_product</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00030_source.html\">exterior_product.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00030_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: exterior_product.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">exterior_product.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00030.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_exterior_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_exterior_product extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00322.html#gac36e72b934ea6a9dd313772d7e78fa93\">cross</a>(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; u);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#include &quot;exterior_product.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00322_html_gac36e72b934ea6a9dd313772d7e78fa93\"><div class=\"ttname\"><a href=\"a00322.html#gac36e72b934ea6a9dd313772d7e78fa93\">glm::cross</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T cross(vec&lt; 2, T, Q &gt; const &amp;v, vec&lt; 2, T, Q &gt; const &amp;u)</div><div class=\"ttdoc\">Returns the cross product of x and y. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00031.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: fast_exponential.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">fast_exponential.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00323.html\">GLM_GTX_fast_exponential</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00031_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaa3180ac8f96ab37ab96e0cacaf608e10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa3180ac8f96ab37ab96e0cacaf608e10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#gaa3180ac8f96ab37ab96e0cacaf608e10\">fastExp</a> (T x)</td></tr>\n<tr class=\"memdesc:gaa3180ac8f96ab37ab96e0cacaf608e10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp function but less accurate.  <a href=\"a00323.html#gaa3180ac8f96ab37ab96e0cacaf608e10\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3180ac8f96ab37ab96e0cacaf608e10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3ba6153aec6bd74628f8b00530aa8d58\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3ba6153aec6bd74628f8b00530aa8d58\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58\">fastExp</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga3ba6153aec6bd74628f8b00530aa8d58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp function but less accurate.  <a href=\"a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3ba6153aec6bd74628f8b00530aa8d58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0af50585955eb14c60bb286297fabab2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0af50585955eb14c60bb286297fabab2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga0af50585955eb14c60bb286297fabab2\">fastExp2</a> (T x)</td></tr>\n<tr class=\"memdesc:ga0af50585955eb14c60bb286297fabab2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp2 function but less accurate.  <a href=\"a00323.html#ga0af50585955eb14c60bb286297fabab2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0af50585955eb14c60bb286297fabab2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacaaed8b67d20d244b7de217e7816c1b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacaaed8b67d20d244b7de217e7816c1b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#gacaaed8b67d20d244b7de217e7816c1b6\">fastExp2</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gacaaed8b67d20d244b7de217e7816c1b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp2 function but less accurate.  <a href=\"a00323.html#gacaaed8b67d20d244b7de217e7816c1b6\">More...</a><br /></td></tr>\n<tr class=\"separator:gacaaed8b67d20d244b7de217e7816c1b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1bdc97b7f96a600e29c753f1cd4388a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae1bdc97b7f96a600e29c753f1cd4388a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#gae1bdc97b7f96a600e29c753f1cd4388a\">fastLog</a> (T x)</td></tr>\n<tr class=\"memdesc:gae1bdc97b7f96a600e29c753f1cd4388a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common log function but less accurate.  <a href=\"a00323.html#gae1bdc97b7f96a600e29c753f1cd4388a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae1bdc97b7f96a600e29c753f1cd4388a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga937256993a7219e73f186bb348fe6be8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga937256993a7219e73f186bb348fe6be8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga937256993a7219e73f186bb348fe6be8\">fastLog</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga937256993a7219e73f186bb348fe6be8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp2 function but less accurate.  <a href=\"a00323.html#ga937256993a7219e73f186bb348fe6be8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga937256993a7219e73f186bb348fe6be8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e98118685f6dc9e05fbb13dd5e5234e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga6e98118685f6dc9e05fbb13dd5e5234e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga6e98118685f6dc9e05fbb13dd5e5234e\">fastLog2</a> (T x)</td></tr>\n<tr class=\"memdesc:ga6e98118685f6dc9e05fbb13dd5e5234e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common log2 function but less accurate.  <a href=\"a00323.html#ga6e98118685f6dc9e05fbb13dd5e5234e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e98118685f6dc9e05fbb13dd5e5234e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7562043539194ccc24649f8475bc5584\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7562043539194ccc24649f8475bc5584\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga7562043539194ccc24649f8475bc5584\">fastLog2</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga7562043539194ccc24649f8475bc5584\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common log2 function but less accurate.  <a href=\"a00323.html#ga7562043539194ccc24649f8475bc5584\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7562043539194ccc24649f8475bc5584\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5340e98a11fcbbd936ba6e983a154d50\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga5340e98a11fcbbd936ba6e983a154d50\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga5340e98a11fcbbd936ba6e983a154d50\">fastPow</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:ga5340e98a11fcbbd936ba6e983a154d50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common pow function but less accurate.  <a href=\"a00323.html#ga5340e98a11fcbbd936ba6e983a154d50\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5340e98a11fcbbd936ba6e983a154d50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga15325a8ed2d1c4ed2412c4b3b3927aa2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga15325a8ed2d1c4ed2412c4b3b3927aa2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga15325a8ed2d1c4ed2412c4b3b3927aa2\">fastPow</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga15325a8ed2d1c4ed2412c4b3b3927aa2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common pow function but less accurate.  <a href=\"a00323.html#ga15325a8ed2d1c4ed2412c4b3b3927aa2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga15325a8ed2d1c4ed2412c4b3b3927aa2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f2562db9c3e02ae76169c36b086c3f6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genTypeT , typename genTypeU &gt; </td></tr>\n<tr class=\"memitem:ga7f2562db9c3e02ae76169c36b086c3f6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genTypeT&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga7f2562db9c3e02ae76169c36b086c3f6\">fastPow</a> (genTypeT x, genTypeU y)</td></tr>\n<tr class=\"memdesc:ga7f2562db9c3e02ae76169c36b086c3f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common pow function but less accurate.  <a href=\"a00323.html#ga7f2562db9c3e02ae76169c36b086c3f6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f2562db9c3e02ae76169c36b086c3f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1abe488c0829da5b9de70ac64aeaa7e5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1abe488c0829da5b9de70ac64aeaa7e5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">fastPow</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1abe488c0829da5b9de70ac64aeaa7e5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common pow function but less accurate.  <a href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1abe488c0829da5b9de70ac64aeaa7e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00323.html\">GLM_GTX_fast_exponential</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\ngtx_half_float (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00031_source.html\">fast_exponential.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00031_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: fast_exponential.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">fast_exponential.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00031.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_fast_exponential is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_fast_exponential extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">fastPow</a>(genType x, genType y);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">fastPow</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genTypeT, <span class=\"keyword\">typename</span> genTypeU&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL genTypeT <a class=\"code\" href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">fastPow</a>(genTypeT x, genTypeU y);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">fastPow</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58\">fastExp</a>(T x);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58\">fastExp</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00323.html#ga937256993a7219e73f186bb348fe6be8\">fastLog</a>(T x);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00323.html#ga937256993a7219e73f186bb348fe6be8\">fastLog</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00323.html#gacaaed8b67d20d244b7de217e7816c1b6\">fastExp2</a>(T x);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00323.html#gacaaed8b67d20d244b7de217e7816c1b6\">fastExp2</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00323.html#ga7562043539194ccc24649f8475bc5584\">fastLog2</a>(T x);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00323.html#ga7562043539194ccc24649f8475bc5584\">fastLog2</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"preprocessor\">#include &quot;fast_exponential.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00323_html_ga937256993a7219e73f186bb348fe6be8\"><div class=\"ttname\"><a href=\"a00323.html#ga937256993a7219e73f186bb348fe6be8\">glm::fastLog</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fastLog(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Faster than the common exp2 function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00323_html_ga1abe488c0829da5b9de70ac64aeaa7e5\"><div class=\"ttname\"><a href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">glm::fastPow</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fastPow(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Faster than the common pow function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00323_html_ga7562043539194ccc24649f8475bc5584\"><div class=\"ttname\"><a href=\"a00323.html#ga7562043539194ccc24649f8475bc5584\">glm::fastLog2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fastLog2(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Faster than the common log2 function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00323_html_gacaaed8b67d20d244b7de217e7816c1b6\"><div class=\"ttname\"><a href=\"a00323.html#gacaaed8b67d20d244b7de217e7816c1b6\">glm::fastExp2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fastExp2(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Faster than the common exp2 function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00323_html_ga3ba6153aec6bd74628f8b00530aa8d58\"><div class=\"ttname\"><a href=\"a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58\">glm::fastExp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fastExp(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Faster than the common exp function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00032.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: fast_square_root.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">fast_square_root.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00324.html\">GLM_GTX_fast_square_root</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00032_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaac333418d0c4e0cc6d3d219ed606c238\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaac333418d0c4e0cc6d3d219ed606c238\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#gaac333418d0c4e0cc6d3d219ed606c238\">fastDistance</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:gaac333418d0c4e0cc6d3d219ed606c238\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common distance function but less accurate.  <a href=\"a00324.html#gaac333418d0c4e0cc6d3d219ed606c238\">More...</a><br /></td></tr>\n<tr class=\"separator:gaac333418d0c4e0cc6d3d219ed606c238\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42d3e771fa7cb3c60d828e315829df19\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga42d3e771fa7cb3c60d828e315829df19\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga42d3e771fa7cb3c60d828e315829df19\">fastDistance</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga42d3e771fa7cb3c60d828e315829df19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common distance function but less accurate.  <a href=\"a00324.html#ga42d3e771fa7cb3c60d828e315829df19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42d3e771fa7cb3c60d828e315829df19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f081b14d9c7035c8714eba5f7f75a8f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7f081b14d9c7035c8714eba5f7f75a8f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga7f081b14d9c7035c8714eba5f7f75a8f\">fastInverseSqrt</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga7f081b14d9c7035c8714eba5f7f75a8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common inversesqrt function but less accurate.  <a href=\"a00324.html#ga7f081b14d9c7035c8714eba5f7f75a8f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f081b14d9c7035c8714eba5f7f75a8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadcd7be12b1e5ee182141359d4c45dd24\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadcd7be12b1e5ee182141359d4c45dd24\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#gadcd7be12b1e5ee182141359d4c45dd24\">fastInverseSqrt</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gadcd7be12b1e5ee182141359d4c45dd24\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common inversesqrt function but less accurate.  <a href=\"a00324.html#gadcd7be12b1e5ee182141359d4c45dd24\">More...</a><br /></td></tr>\n<tr class=\"separator:gadcd7be12b1e5ee182141359d4c45dd24\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe697d6287719538346bbdf8b1367c59\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gafe697d6287719538346bbdf8b1367c59\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#gafe697d6287719538346bbdf8b1367c59\">fastLength</a> (genType x)</td></tr>\n<tr class=\"memdesc:gafe697d6287719538346bbdf8b1367c59\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common length function but less accurate.  <a href=\"a00324.html#gafe697d6287719538346bbdf8b1367c59\">More...</a><br /></td></tr>\n<tr class=\"separator:gafe697d6287719538346bbdf8b1367c59\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga90f66be92ef61e705c005e7b3209edb8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga90f66be92ef61e705c005e7b3209edb8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga90f66be92ef61e705c005e7b3209edb8\">fastLength</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga90f66be92ef61e705c005e7b3209edb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common length function but less accurate.  <a href=\"a00324.html#ga90f66be92ef61e705c005e7b3209edb8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga90f66be92ef61e705c005e7b3209edb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b02c1d6e0c754144e2f1e110bf9f16c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga3b02c1d6e0c754144e2f1e110bf9f16c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c\">fastNormalize</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga3b02c1d6e0c754144e2f1e110bf9f16c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common normalize function but less accurate.  <a href=\"a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3b02c1d6e0c754144e2f1e110bf9f16c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6c460e9414a50b2fc455c8f64c86cdc9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6c460e9414a50b2fc455c8f64c86cdc9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga6c460e9414a50b2fc455c8f64c86cdc9\">fastSqrt</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga6c460e9414a50b2fc455c8f64c86cdc9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common sqrt function but less accurate.  <a href=\"a00324.html#ga6c460e9414a50b2fc455c8f64c86cdc9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6c460e9414a50b2fc455c8f64c86cdc9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae83f0c03614f73eae5478c5b6274ee6d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae83f0c03614f73eae5478c5b6274ee6d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#gae83f0c03614f73eae5478c5b6274ee6d\">fastSqrt</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gae83f0c03614f73eae5478c5b6274ee6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common sqrt function but less accurate.  <a href=\"a00324.html#gae83f0c03614f73eae5478c5b6274ee6d\">More...</a><br /></td></tr>\n<tr class=\"separator:gae83f0c03614f73eae5478c5b6274ee6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00324.html\">GLM_GTX_fast_square_root</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00032_source.html\">fast_square_root.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00032_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: fast_square_root.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">fast_square_root.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00032.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../exponential.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_fast_square_root is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_fast_square_root extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00324.html#gae83f0c03614f73eae5478c5b6274ee6d\">fastSqrt</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00324.html#gae83f0c03614f73eae5478c5b6274ee6d\">fastSqrt</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00324.html#gadcd7be12b1e5ee182141359d4c45dd24\">fastInverseSqrt</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00324.html#gadcd7be12b1e5ee182141359d4c45dd24\">fastInverseSqrt</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00324.html#ga90f66be92ef61e705c005e7b3209edb8\">fastLength</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00324.html#ga90f66be92ef61e705c005e7b3209edb8\">fastLength</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00324.html#ga42d3e771fa7cb3c60d828e315829df19\">fastDistance</a>(genType x, genType y);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00324.html#ga42d3e771fa7cb3c60d828e315829df19\">fastDistance</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c\">fastNormalize</a>(genType <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\">#include &quot;fast_square_root.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00324_html_ga90f66be92ef61e705c005e7b3209edb8\"><div class=\"ttname\"><a href=\"a00324.html#ga90f66be92ef61e705c005e7b3209edb8\">glm::fastLength</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastLength(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Faster than the common length function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00324_html_ga42d3e771fa7cb3c60d828e315829df19\"><div class=\"ttname\"><a href=\"a00324.html#ga42d3e771fa7cb3c60d828e315829df19\">glm::fastDistance</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastDistance(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Faster than the common distance function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00324_html_gae83f0c03614f73eae5478c5b6274ee6d\"><div class=\"ttname\"><a href=\"a00324.html#gae83f0c03614f73eae5478c5b6274ee6d\">glm::fastSqrt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fastSqrt(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Faster than the common sqrt function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00324_html_ga3b02c1d6e0c754144e2f1e110bf9f16c\"><div class=\"ttname\"><a href=\"a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c\">glm::fastNormalize</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType fastNormalize(genType const &amp;x)</div><div class=\"ttdoc\">Faster than the common normalize function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00324_html_gadcd7be12b1e5ee182141359d4c45dd24\"><div class=\"ttname\"><a href=\"a00324.html#gadcd7be12b1e5ee182141359d4c45dd24\">glm::fastInverseSqrt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fastInverseSqrt(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Faster than the common inversesqrt function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00033.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: fast_trigonometry.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">fast_trigonometry.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00325.html\">GLM_GTX_fast_trigonometry</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00033_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga9721d63356e5d94fdc4b393a426ab26b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9721d63356e5d94fdc4b393a426ab26b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga9721d63356e5d94fdc4b393a426ab26b\">fastAcos</a> (T angle)</td></tr>\n<tr class=\"memdesc:ga9721d63356e5d94fdc4b393a426ab26b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common acos function but less accurate.  <a href=\"a00325.html#ga9721d63356e5d94fdc4b393a426ab26b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9721d63356e5d94fdc4b393a426ab26b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga562cb62c51fbfe7fac7db0bce706b81f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga562cb62c51fbfe7fac7db0bce706b81f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f\">fastAsin</a> (T angle)</td></tr>\n<tr class=\"memdesc:ga562cb62c51fbfe7fac7db0bce706b81f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common asin function but less accurate.  <a href=\"a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga562cb62c51fbfe7fac7db0bce706b81f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8d197c6ef564f5e5d59af3b3f8adcc2c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga8d197c6ef564f5e5d59af3b3f8adcc2c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga8d197c6ef564f5e5d59af3b3f8adcc2c\">fastAtan</a> (T y, T x)</td></tr>\n<tr class=\"memdesc:ga8d197c6ef564f5e5d59af3b3f8adcc2c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common atan function but less accurate.  <a href=\"a00325.html#ga8d197c6ef564f5e5d59af3b3f8adcc2c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8d197c6ef564f5e5d59af3b3f8adcc2c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae25de86a968490ff56856fa425ec9d30\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae25de86a968490ff56856fa425ec9d30\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#gae25de86a968490ff56856fa425ec9d30\">fastAtan</a> (T angle)</td></tr>\n<tr class=\"memdesc:gae25de86a968490ff56856fa425ec9d30\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common atan function but less accurate.  <a href=\"a00325.html#gae25de86a968490ff56856fa425ec9d30\">More...</a><br /></td></tr>\n<tr class=\"separator:gae25de86a968490ff56856fa425ec9d30\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab34c8b45c23c0165a64dcecfcc3b302a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab34c8b45c23c0165a64dcecfcc3b302a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a\">fastCos</a> (T angle)</td></tr>\n<tr class=\"memdesc:gab34c8b45c23c0165a64dcecfcc3b302a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common cos function but less accurate.  <a href=\"a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a\">More...</a><br /></td></tr>\n<tr class=\"separator:gab34c8b45c23c0165a64dcecfcc3b302a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0aab3257bb3b628d10a1e0483e2c6915\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0aab3257bb3b628d10a1e0483e2c6915\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915\">fastSin</a> (T angle)</td></tr>\n<tr class=\"memdesc:ga0aab3257bb3b628d10a1e0483e2c6915\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common sin function but less accurate.  <a href=\"a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0aab3257bb3b628d10a1e0483e2c6915\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf29b9c1101a10007b4f79ee89df27ba2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf29b9c1101a10007b4f79ee89df27ba2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2\">fastTan</a> (T angle)</td></tr>\n<tr class=\"memdesc:gaf29b9c1101a10007b4f79ee89df27ba2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common tan function but less accurate.  <a href=\"a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf29b9c1101a10007b4f79ee89df27ba2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga069527c6dbd64f53435b8ebc4878b473\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga069527c6dbd64f53435b8ebc4878b473\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga069527c6dbd64f53435b8ebc4878b473\">wrapAngle</a> (T angle)</td></tr>\n<tr class=\"memdesc:ga069527c6dbd64f53435b8ebc4878b473\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Wrap an angle to [0 2pi[ From GLM_GTX_fast_trigonometry extension.  <a href=\"a00325.html#ga069527c6dbd64f53435b8ebc4878b473\">More...</a><br /></td></tr>\n<tr class=\"separator:ga069527c6dbd64f53435b8ebc4878b473\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00325.html\">GLM_GTX_fast_trigonometry</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00033_source.html\">fast_trigonometry.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00033_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: fast_trigonometry.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">fast_trigonometry.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00033.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_fast_trigonometry is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_fast_trigonometry extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00325.html#ga069527c6dbd64f53435b8ebc4878b473\">wrapAngle</a>(T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915\">fastSin</a>(T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a\">fastCos</a>(T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2\">fastTan</a>(T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f\">fastAsin</a>(T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00325.html#ga9721d63356e5d94fdc4b393a426ab26b\">fastAcos</a>(T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00325.html#gae25de86a968490ff56856fa425ec9d30\">fastAtan</a>(T y, T x);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00325.html#gae25de86a968490ff56856fa425ec9d30\">fastAtan</a>(T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"preprocessor\">#include &quot;fast_trigonometry.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00325_html_ga562cb62c51fbfe7fac7db0bce706b81f\"><div class=\"ttname\"><a href=\"a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f\">glm::fastAsin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastAsin(T angle)</div><div class=\"ttdoc\">Faster than the common asin function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00325_html_ga9721d63356e5d94fdc4b393a426ab26b\"><div class=\"ttname\"><a href=\"a00325.html#ga9721d63356e5d94fdc4b393a426ab26b\">glm::fastAcos</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastAcos(T angle)</div><div class=\"ttdoc\">Faster than the common acos function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00325_html_gaf29b9c1101a10007b4f79ee89df27ba2\"><div class=\"ttname\"><a href=\"a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2\">glm::fastTan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastTan(T angle)</div><div class=\"ttdoc\">Faster than the common tan function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00325_html_gab34c8b45c23c0165a64dcecfcc3b302a\"><div class=\"ttname\"><a href=\"a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a\">glm::fastCos</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastCos(T angle)</div><div class=\"ttdoc\">Faster than the common cos function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00325_html_gae25de86a968490ff56856fa425ec9d30\"><div class=\"ttname\"><a href=\"a00325.html#gae25de86a968490ff56856fa425ec9d30\">glm::fastAtan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastAtan(T angle)</div><div class=\"ttdoc\">Faster than the common atan function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00325_html_ga0aab3257bb3b628d10a1e0483e2c6915\"><div class=\"ttname\"><a href=\"a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915\">glm::fastSin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastSin(T angle)</div><div class=\"ttdoc\">Faster than the common sin function but less accurate. </div></div>\n<div class=\"ttc\" id=\"a00325_html_ga069527c6dbd64f53435b8ebc4878b473\"><div class=\"ttname\"><a href=\"a00325.html#ga069527c6dbd64f53435b8ebc4878b473\">glm::wrapAngle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T wrapAngle(T angle)</div><div class=\"ttdoc\">Wrap an angle to [0 2pi[ From GLM_GTX_fast_trigonometry extension. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00034.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: functions.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">functions.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00326.html\">GLM_GTX_functions</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00034_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0b50b197ff74261a0fad90f4b8d24702\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0b50b197ff74261a0fad90f4b8d24702\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00326.html#ga0b50b197ff74261a0fad90f4b8d24702\">gauss</a> (T x, T ExpectedValue, T StandardDeviation)</td></tr>\n<tr class=\"memdesc:ga0b50b197ff74261a0fad90f4b8d24702\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1D gauss function  <a href=\"a00326.html#ga0b50b197ff74261a0fad90f4b8d24702\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b50b197ff74261a0fad90f4b8d24702\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad19ec8754a83c0b9a8dc16b7e60705ab\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad19ec8754a83c0b9a8dc16b7e60705ab\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab\">gauss</a> (vec&lt; 2, T, Q &gt; const &amp;Coord, vec&lt; 2, T, Q &gt; const &amp;ExpectedValue, vec&lt; 2, T, Q &gt; const &amp;StandardDeviation)</td></tr>\n<tr class=\"memdesc:gad19ec8754a83c0b9a8dc16b7e60705ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2D gauss function  <a href=\"a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gad19ec8754a83c0b9a8dc16b7e60705ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00326.html\">GLM_GTX_functions</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00034_source.html\">functions.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00034_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: functions.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">functions.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00034.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_functions is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_functions extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab\">gauss</a>(</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                T x,</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                T ExpectedValue,</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                T StandardDeviation);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab\">gauss</a>(</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; Coord,</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; ExpectedValue,</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; StandardDeviation);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">#include &quot;functions.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"ttc\" id=\"a00326_html_gad19ec8754a83c0b9a8dc16b7e60705ab\"><div class=\"ttname\"><a href=\"a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab\">glm::gauss</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T gauss(vec&lt; 2, T, Q &gt; const &amp;Coord, vec&lt; 2, T, Q &gt; const &amp;ExpectedValue, vec&lt; 2, T, Q &gt; const &amp;StandardDeviation)</div><div class=\"ttdoc\">2D gauss function </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00035_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: fwd.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">fwd.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#include &quot;detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;</div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">std::int8_t</a>                             int8;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">std::int16_t</a>                    int16;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">std::int32_t</a>                    int32;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">std::int64_t</a>                    <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">std::uint8_t</a>                    uint8;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">std::uint16_t</a>                   uint16;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">std::uint32_t</a>                   uint32;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">std::uint64_t</a>                   <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">char</span>                             int8;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">short</span>                    int16;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">int</span>                              int32;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a>                   <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span>                   uint8;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">short</span>                  uint16;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>                    uint32;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a>                  <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;        <span class=\"comment\">// Scalar int</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">   31</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">lowp_i8</a>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">   32</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">mediump_i8</a>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">   33</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">highp_i8</a>;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">   34</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">i8</a>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">   36</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">lowp_int8</a>;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">   37</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">mediump_int8</a>;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">   38</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">highp_int8</a>;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">   40</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">lowp_int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">   41</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">mediump_int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">   42</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">highp_int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">   43</a></span>&#160;        <span class=\"keyword\">typedef</span> int8                                    <a class=\"code\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">   45</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">lowp_i16</a>;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">mediump_i16</a>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">   47</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">highp_i16</a>;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">   48</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">i16</a>;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">   50</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">lowp_int16</a>;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">   51</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">mediump_int16</a>;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">   52</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">highp_int16</a>;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">   54</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">lowp_int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">   55</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">mediump_int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">   56</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">highp_int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">   57</a></span>&#160;        <span class=\"keyword\">typedef</span> int16                                   <a class=\"code\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">   59</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">lowp_i32</a>;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">   60</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">mediump_i32</a>;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">   61</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">highp_i32</a>;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">   62</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">i32</a>;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">   64</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">lowp_int32</a>;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">   65</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">mediump_int32</a>;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">   66</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">highp_int32</a>;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">   68</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">lowp_int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">   69</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">mediump_int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">   70</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">highp_int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">   71</a></span>&#160;        <span class=\"keyword\">typedef</span> int32                                   <a class=\"code\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">   73</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">lowp_i64</a>;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">   74</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">mediump_i64</a>;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">   75</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">highp_i64</a>;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">   76</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">i64</a>;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">   78</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">lowp_int64</a>;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">   79</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">mediump_int64</a>;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">   80</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">highp_int64</a>;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">   82</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">lowp_int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">   83</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">mediump_int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">   84</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">highp_int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">   85</a></span>&#160;        <span class=\"keyword\">typedef</span> int64                                   <a class=\"code\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        <span class=\"comment\">// Scalar uint</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">   89</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">lowp_u8</a>;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">   90</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">mediump_u8</a>;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">   91</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">highp_u8</a>;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">   92</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">u8</a>;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">   94</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">lowp_uint8</a>;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">   95</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">mediump_uint8</a>;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">   96</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">highp_uint8</a>;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">   98</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">lowp_uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">   99</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">mediump_uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">  100</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">highp_uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">  101</a></span>&#160;        <span class=\"keyword\">typedef</span> uint8                                   <a class=\"code\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">  103</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">lowp_u16</a>;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">  104</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">mediump_u16</a>;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">  105</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">highp_u16</a>;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">  106</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">u16</a>;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">  108</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">lowp_uint16</a>;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">  109</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">mediump_uint16</a>;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">  110</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">highp_uint16</a>;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">  112</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">lowp_uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">  113</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">mediump_uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">  114</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">highp_uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">  115</a></span>&#160;        <span class=\"keyword\">typedef</span> uint16                                  <a class=\"code\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">  117</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">lowp_u32</a>;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">  118</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">mediump_u32</a>;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">  119</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">highp_u32</a>;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">  120</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">u32</a>;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">  122</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">lowp_uint32</a>;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">  123</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">mediump_uint32</a>;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">  124</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">highp_uint32</a>;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">  126</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">lowp_uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">  127</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">mediump_uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">  128</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">highp_uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">  129</a></span>&#160;        <span class=\"keyword\">typedef</span> uint32                                  <a class=\"code\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">  131</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">lowp_u64</a>;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">  132</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">mediump_u64</a>;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">  133</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">highp_u64</a>;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">  134</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">u64</a>;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">  136</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">lowp_uint64</a>;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">  137</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">mediump_uint64</a>;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">  138</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">highp_uint64</a>;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">  140</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">lowp_uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">  141</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">mediump_uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">  142</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">highp_uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">  143</a></span>&#160;        <span class=\"keyword\">typedef</span> uint64                                  <a class=\"code\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        <span class=\"comment\">// Scalar float</span></div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">  147</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">lowp_f32</a>;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\">  148</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\">mediump_f32</a>;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6906e1ef0b34064b4b675489c5c38725\">  149</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#ga6906e1ef0b34064b4b675489c5c38725\">highp_f32</a>;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">  150</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a>;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">  152</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">lowp_float32</a>;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7\">  153</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7\">mediump_float32</a>;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea\">  154</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea\">highp_float32</a>;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">  155</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">float32</a>;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">  157</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">lowp_float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae4dee61f8fe1caccec309fbed02faf12\">  158</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#gae4dee61f8fe1caccec309fbed02faf12\">mediump_float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5376ef18dca9d248897c3363ef5a06b2\">  159</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#ga5376ef18dca9d248897c3363ef5a06b2\">highp_float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">  160</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span>                                   <a class=\"code\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">  163</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">lowp_f64</a>;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6d40381d78472553f878f66e443feeef\">  164</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#ga6d40381d78472553f878f66e443feeef\">mediump_f64</a>;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga51d5266017d88f62737c1973923a7cf4\">  165</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#ga51d5266017d88f62737c1973923a7cf4\">highp_f64</a>;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">  166</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a>;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">  168</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">lowp_float64</a>;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab83d8aae6e4f115e97a785e8574a115f\">  169</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#gab83d8aae6e4f115e97a785e8574a115f\">mediump_float64</a>;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215\">  170</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215\">highp_float64</a>;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">  171</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">float64</a>;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">  173</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">lowp_float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e\">  174</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e\">mediump_float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaaeeb0077198cff40e3f48b1108ece139\">  175</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#gaaeeb0077198cff40e3f48b1108ece139\">highp_float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">  176</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span>                                  <a class=\"code\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        <span class=\"comment\">// Vector bool</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, lowp&gt;              <a class=\"code\" href=\"a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9\">lowp_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">lowp_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">lowp_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">lowp_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, mediump&gt;   <a class=\"code\" href=\"a00266.html#ga7b4ccb989ba179fa44f7b0879c782621\">mediump_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, mediump&gt;   <a class=\"code\" href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">mediump_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, mediump&gt;   <a class=\"code\" href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">mediump_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, mediump&gt;   <a class=\"code\" href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">mediump_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, highp&gt;             <a class=\"code\" href=\"a00266.html#gae8a1e14abae1387274f57741750c06a2\">highp_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, highp&gt;             <a class=\"code\" href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">highp_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, highp&gt;             <a class=\"code\" href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">highp_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, highp&gt;             <a class=\"code\" href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">highp_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, defaultp&gt;  <a class=\"code\" href=\"a00265.html#ga067af382616d93f8e850baae5154cdcc\">bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, defaultp&gt;  <a class=\"code\" href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, defaultp&gt;  <a class=\"code\" href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, defaultp&gt;  <a class=\"code\" href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;        <span class=\"comment\">// Vector int</span></div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, lowp&gt;               <a class=\"code\" href=\"a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc\">lowp_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, lowp&gt;               <a class=\"code\" href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">lowp_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, lowp&gt;               <a class=\"code\" href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">lowp_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, lowp&gt;               <a class=\"code\" href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">lowp_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, mediump&gt;    <a class=\"code\" href=\"a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56\">mediump_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, mediump&gt;    <a class=\"code\" href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">mediump_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, mediump&gt;    <a class=\"code\" href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">mediump_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, mediump&gt;    <a class=\"code\" href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">mediump_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, highp&gt;              <a class=\"code\" href=\"a00273.html#ga7e02566f2bd2caa68e61be45a477c77e\">highp_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, highp&gt;              <a class=\"code\" href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">highp_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, highp&gt;              <a class=\"code\" href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">highp_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, highp&gt;              <a class=\"code\" href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">highp_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, defaultp&gt;   <a class=\"code\" href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, defaultp&gt;   <a class=\"code\" href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, defaultp&gt;   <a class=\"code\" href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, defaultp&gt;   <a class=\"code\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c\">  222</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i8, lowp&gt;                <a class=\"code\" href=\"a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c\">lowp_i8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac03e5099d27eeaa74b6016ea435a1df2\">  223</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i8, lowp&gt;                <a class=\"code\" href=\"a00304.html#gac03e5099d27eeaa74b6016ea435a1df2\">lowp_i8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae2f43ace6b5b33ab49516d9e40af1845\">  224</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i8, lowp&gt;                <a class=\"code\" href=\"a00304.html#gae2f43ace6b5b33ab49516d9e40af1845\">lowp_i8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5\">  225</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i8, lowp&gt;                <a class=\"code\" href=\"a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5\">lowp_i8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga85e8893f4ae3630065690a9000c0c483\">  227</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i8, mediump&gt;             <a class=\"code\" href=\"a00304.html#ga85e8893f4ae3630065690a9000c0c483\">mediump_i8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67\">  228</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i8, mediump&gt;             <a class=\"code\" href=\"a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67\">mediump_i8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6dd1c1618378c6f94d522a61c28773c9\">  229</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i8, mediump&gt;             <a class=\"code\" href=\"a00304.html#ga6dd1c1618378c6f94d522a61c28773c9\">mediump_i8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac7bb04fb857ef7b520e49f6c381432be\">  230</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i8, mediump&gt;             <a class=\"code\" href=\"a00304.html#gac7bb04fb857ef7b520e49f6c381432be\">mediump_i8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1d8c10949691b0fd990253476f47beb3\">  232</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i8, highp&gt;               <a class=\"code\" href=\"a00304.html#ga1d8c10949691b0fd990253476f47beb3\">highp_i8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga50542e4cb9b2f9bec213b66e06145d07\">  233</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i8, highp&gt;               <a class=\"code\" href=\"a00304.html#ga50542e4cb9b2f9bec213b66e06145d07\">highp_i8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8396bfdc081d9113190d0c39c9f67084\">  234</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i8, highp&gt;               <a class=\"code\" href=\"a00304.html#ga8396bfdc081d9113190d0c39c9f67084\">highp_i8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4824e3ddf6e608117dfe4809430737b4\">  235</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i8, highp&gt;               <a class=\"code\" href=\"a00304.html#ga4824e3ddf6e608117dfe4809430737b4\">highp_i8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">  237</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i8, defaultp&gt;    <a class=\"code\" href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">i8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">  238</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i8, defaultp&gt;    <a class=\"code\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">i8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">  239</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i8, defaultp&gt;    <a class=\"code\" href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">i8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">  240</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i8, defaultp&gt;    <a class=\"code\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">i8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6\">  242</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i16, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6\">lowp_i16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b\">  243</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i16, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b\">lowp_i16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab69ef9cbc2a9214bf5596c528c801b72\">  244</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i16, lowp&gt;               <a class=\"code\" href=\"a00304.html#gab69ef9cbc2a9214bf5596c528c801b72\">lowp_i16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1d47d94d17c2406abdd1f087a816e387\">  245</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i16, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga1d47d94d17c2406abdd1f087a816e387\">lowp_i16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacc44265ed440bf5e6e566782570de842\">  247</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i16, mediump&gt;    <a class=\"code\" href=\"a00304.html#gacc44265ed440bf5e6e566782570de842\">mediump_i16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88\">  248</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i16, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88\">mediump_i16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633\">  249</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i16, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633\">mediump_i16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf52982bb23e3a3772649b2c5bb84b107\">  250</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i16, mediump&gt;    <a class=\"code\" href=\"a00304.html#gaf52982bb23e3a3772649b2c5bb84b107\">mediump_i16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19\">  252</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19\">highp_i16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa7db3ad10947cf70cae6474d05ebd227\">  253</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i16, highp&gt;              <a class=\"code\" href=\"a00304.html#gaa7db3ad10947cf70cae6474d05ebd227\">highp_i16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96\">  254</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96\">highp_i16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7a18659438828f91ccca28f1a1e067b4\">  255</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga7a18659438828f91ccca28f1a1e067b4\">highp_i16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">  257</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i16, defaultp&gt;   <a class=\"code\" href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">i16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">  258</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i16, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">i16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">  259</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i16, defaultp&gt;   <a class=\"code\" href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">i16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">  260</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i16, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">i16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae31ac3608cf643ceffd6554874bec4a0\">  262</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gae31ac3608cf643ceffd6554874bec4a0\">lowp_i32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd\">  263</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd\">lowp_i32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d\">  264</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d\">lowp_i32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08\">  265</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08\">lowp_i32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga46a57f71e430637559097a732b550a7e\">  267</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga46a57f71e430637559097a732b550a7e\">mediump_i32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219\">  268</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219\">mediump_i32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a\">  269</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a\">mediump_i32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8\">  270</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8\">mediump_i32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6a9d71cc62745302f70422b7dc98755c\">  272</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga6a9d71cc62745302f70422b7dc98755c\">highp_i32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530\">  273</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, highp&gt;              <a class=\"code\" href=\"a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530\">highp_i32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1\">  274</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1\">highp_i32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902\">  275</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, highp&gt;              <a class=\"code\" href=\"a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902\">highp_i32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">  277</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">i32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">  278</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">i32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">  279</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">i32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">  280</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">i32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437\">  282</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i64, lowp&gt;               <a class=\"code\" href=\"a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437\">lowp_i64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c\">  283</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i64, lowp&gt;               <a class=\"code\" href=\"a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c\">lowp_i64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\">  284</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i64, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\">lowp_i64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gabb4229a4c1488bf063eed0c45355bb9c\">  285</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i64, lowp&gt;               <a class=\"code\" href=\"a00304.html#gabb4229a4c1488bf063eed0c45355bb9c\">lowp_i64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e\">  287</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i64, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e\">mediump_i64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2c94aeae3457325944ca1059b0b68330\">  288</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i64, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga2c94aeae3457325944ca1059b0b68330\">mediump_i64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e\">  289</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i64, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e\">mediump_i64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1\">  290</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i64, mediump&gt;    <a class=\"code\" href=\"a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1\">mediump_i64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4\">  292</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i64, highp&gt;              <a class=\"code\" href=\"a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4\">highp_i64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad9d1903cb20899966e8ebe0670889a5f\">  293</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i64, highp&gt;              <a class=\"code\" href=\"a00304.html#gad9d1903cb20899966e8ebe0670889a5f\">highp_i64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a\">  294</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i64, highp&gt;              <a class=\"code\" href=\"a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a\">highp_i64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad23b1be9b3bf20352089a6b738f0ebba\">  295</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i64, highp&gt;              <a class=\"code\" href=\"a00304.html#gad23b1be9b3bf20352089a6b738f0ebba\">highp_i64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">  297</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i64, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">i64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">  298</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i64, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">i64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">  299</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i64, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">i64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">  300</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i64, defaultp&gt;   <a class=\"code\" href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">i64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;        <span class=\"comment\">// Vector uint</span></div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, lowp&gt;               <a class=\"code\" href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">lowp_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, lowp&gt;               <a class=\"code\" href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">lowp_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, lowp&gt;               <a class=\"code\" href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">lowp_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, lowp&gt;               <a class=\"code\" href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">lowp_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, mediump&gt;    <a class=\"code\" href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">mediump_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, mediump&gt;    <a class=\"code\" href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">mediump_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, mediump&gt;    <a class=\"code\" href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">mediump_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, mediump&gt;    <a class=\"code\" href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">mediump_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, highp&gt;              <a class=\"code\" href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">highp_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, highp&gt;              <a class=\"code\" href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">highp_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, highp&gt;              <a class=\"code\" href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">highp_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, highp&gt;              <a class=\"code\" href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">highp_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, defaultp&gt;   <a class=\"code\" href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, defaultp&gt;   <a class=\"code\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, defaultp&gt;   <a class=\"code\" href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, defaultp&gt;   <a class=\"code\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec\">  324</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u8, lowp&gt;                <a class=\"code\" href=\"a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec\">lowp_u8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae6f63fa38635431e51a8f2602f15c566\">  325</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u8, lowp&gt;                <a class=\"code\" href=\"a00304.html#gae6f63fa38635431e51a8f2602f15c566\">lowp_u8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd\">  326</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u8, lowp&gt;                <a class=\"code\" href=\"a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd\">lowp_u8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga9910927f3a4d1addb3da6a82542a8287\">  327</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u8, lowp&gt;                <a class=\"code\" href=\"a00304.html#ga9910927f3a4d1addb3da6a82542a8287\">lowp_u8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4a43050843b141bdc7e85437faef6f55\">  329</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u8, mediump&gt;             <a class=\"code\" href=\"a00304.html#ga4a43050843b141bdc7e85437faef6f55\">mediump_u8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194\">  330</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u8, mediump&gt;             <a class=\"code\" href=\"a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194\">mediump_u8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaddc6f7748b699254942c5216b68f8f7f\">  331</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u8, mediump&gt;             <a class=\"code\" href=\"a00304.html#gaddc6f7748b699254942c5216b68f8f7f\">mediump_u8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b\">  332</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u8, mediump&gt;             <a class=\"code\" href=\"a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b\">mediump_u8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2\">  334</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u8, highp&gt;               <a class=\"code\" href=\"a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2\">highp_u8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga27585b7c3ab300059f11fcba465f6fd2\">  335</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u8, highp&gt;               <a class=\"code\" href=\"a00304.html#ga27585b7c3ab300059f11fcba465f6fd2\">highp_u8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga45721c13b956eb691cbd6c6c1429167a\">  336</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u8, highp&gt;               <a class=\"code\" href=\"a00304.html#ga45721c13b956eb691cbd6c6c1429167a\">highp_u8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060\">  337</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u8, highp&gt;               <a class=\"code\" href=\"a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060\">highp_u8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">  339</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u8, defaultp&gt;    <a class=\"code\" href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">u8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">  340</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u8, defaultp&gt;    <a class=\"code\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">  341</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u8, defaultp&gt;    <a class=\"code\" href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">u8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">  342</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u8, defaultp&gt;    <a class=\"code\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">u8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa6aab4ee7189b86716f5d7015d43021d\">  344</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u16, lowp&gt;               <a class=\"code\" href=\"a00304.html#gaa6aab4ee7189b86716f5d7015d43021d\">lowp_u16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2a7d997da9ac29cb931e35bd399f58df\">  345</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u16, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga2a7d997da9ac29cb931e35bd399f58df\">lowp_u16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac0253db6c3d3bae1f591676307a9dd8c\">  346</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u16, lowp&gt;               <a class=\"code\" href=\"a00304.html#gac0253db6c3d3bae1f591676307a9dd8c\">lowp_u16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1\">  347</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u16, lowp&gt;               <a class=\"code\" href=\"a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1\">lowp_u16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga400ce8cc566de093a9b28e59e220d6e4\">  349</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u16, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga400ce8cc566de093a9b28e59e220d6e4\">mediump_u16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1\">  350</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u16, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1\">mediump_u16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac9ba20234b0c3751d45ce575fc71e551\">  351</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u16, mediump&gt;    <a class=\"code\" href=\"a00304.html#gac9ba20234b0c3751d45ce575fc71e551\">mediump_u16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5793393686ce5bd2d5968ff9144762b8\">  352</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u16, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga5793393686ce5bd2d5968ff9144762b8\">mediump_u16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad064202b4cf9a2972475c03de657cb39\">  354</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u16, highp&gt;              <a class=\"code\" href=\"a00304.html#gad064202b4cf9a2972475c03de657cb39\">highp_u16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159\">  355</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159\">highp_u16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacfd806749008f0ade6ac4bb9dd91082f\">  356</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u16, highp&gt;              <a class=\"code\" href=\"a00304.html#gacfd806749008f0ade6ac4bb9dd91082f\">highp_u16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61\">  357</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61\">highp_u16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">  359</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u16, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">u16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">  360</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u16, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">  361</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u16, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">u16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">  362</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u16, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">u16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4\">  364</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4\">lowp_u32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf7e286e81347011e257ee779524e73b9\">  365</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gaf7e286e81347011e257ee779524e73b9\">lowp_u32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad3ad390560a671b1f676fbf03cd3aa15\">  366</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gad3ad390560a671b1f676fbf03cd3aa15\">lowp_u32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4502885718742aa238c36a312c3f3f20\">  367</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga4502885718742aa238c36a312c3f3f20\">lowp_u32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee\">  369</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee\">mediump_u32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga94f74851fce338549c705b5f0d601c4f\">  370</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga94f74851fce338549c705b5f0d601c4f\">mediump_u32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga012c24c8fc69707b90260474c70275a2\">  371</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga012c24c8fc69707b90260474c70275a2\">mediump_u32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a\">  372</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a\">mediump_u32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3\">  374</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3\">highp_u32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2f256334f83fba4c2d219e414b51df6c\">  375</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga2f256334f83fba4c2d219e414b51df6c\">highp_u32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf14d7a50502464e7cbfa074f24684cb1\">  376</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, highp&gt;              <a class=\"code\" href=\"a00304.html#gaf14d7a50502464e7cbfa074f24684cb1\">highp_u32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga22166f0da65038b447f3c5e534fff1c2\">  377</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga22166f0da65038b447f3c5e534fff1c2\">highp_u32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">  379</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, defaultp&gt;   <a class=\"code\" href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">u32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">  380</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">  381</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, defaultp&gt;   <a class=\"code\" href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">u32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">  382</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">u32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6\">  384</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u64, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6\">lowp_u64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga581485db4ba6ddb501505ee711fd8e42\">  385</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u64, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga581485db4ba6ddb501505ee711fd8e42\">lowp_u64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1\">  386</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u64, lowp&gt;               <a class=\"code\" href=\"a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1\">lowp_u64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6fccc89c34045c86339f6fa781ce96de\">  387</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u64, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga6fccc89c34045c86339f6fa781ce96de\">lowp_u64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga659f372ccb8307d5db5beca942cde5e8\">  389</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u64, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga659f372ccb8307d5db5beca942cde5e8\">mediump_u64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d\">  390</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u64, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d\">mediump_u64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1900c6ab74acd392809425953359ef52\">  391</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u64, mediump&gt;    <a class=\"code\" href=\"a00304.html#ga1900c6ab74acd392809425953359ef52\">mediump_u64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaec7ee455cb379ec2993e81482123e1cc\">  392</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u64, mediump&gt;    <a class=\"code\" href=\"a00304.html#gaec7ee455cb379ec2993e81482123e1cc\">mediump_u64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae4fe774744852c4d7d069be2e05257ab\">  394</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u64, highp&gt;              <a class=\"code\" href=\"a00304.html#gae4fe774744852c4d7d069be2e05257ab\">highp_u64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d\">  395</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u64, highp&gt;              <a class=\"code\" href=\"a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d\">highp_u64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga41bdabea6e589029659331ba47eb78c1\">  396</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u64, highp&gt;              <a class=\"code\" href=\"a00304.html#ga41bdabea6e589029659331ba47eb78c1\">highp_u64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325\">  397</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u64, highp&gt;              <a class=\"code\" href=\"a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325\">highp_u64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">  399</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u64, defaultp&gt;   <a class=\"code\" href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">u64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">  400</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u64, defaultp&gt;   <a class=\"code\" href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">u64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">  401</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u64, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">u64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">  402</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u64, defaultp&gt;   <a class=\"code\" href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">u64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;</div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;        <span class=\"comment\">// Vector float</span></div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, lowp&gt;                     <a class=\"code\" href=\"a00271.html#ga0a57630f03031706b1d26a7d70d9184c\">lowp_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, lowp&gt;                     <a class=\"code\" href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">lowp_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, lowp&gt;                     <a class=\"code\" href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">lowp_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, lowp&gt;                     <a class=\"code\" href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">lowp_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, mediump&gt;          <a class=\"code\" href=\"a00271.html#ga645f53e6b8056609023a894b4e2beef4\">mediump_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, mediump&gt;          <a class=\"code\" href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">mediump_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, mediump&gt;          <a class=\"code\" href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">mediump_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, mediump&gt;          <a class=\"code\" href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">mediump_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, highp&gt;            <a class=\"code\" href=\"a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9\">highp_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, highp&gt;            <a class=\"code\" href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">highp_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, highp&gt;            <a class=\"code\" href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">highp_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, highp&gt;            <a class=\"code\" href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">highp_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;</div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, defaultp&gt;         <a class=\"code\" href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">vec1</a>;</div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, defaultp&gt;         <a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a>;</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, defaultp&gt;         <a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a>;</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, defaultp&gt;         <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a>;</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;</div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga346b2336fff168a7e0df1583aae3e5a5\">  426</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, lowp&gt;                     <a class=\"code\" href=\"a00304.html#ga346b2336fff168a7e0df1583aae3e5a5\">lowp_fvec1</a>;</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d\">  427</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, lowp&gt;                     <a class=\"code\" href=\"a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d\">lowp_fvec2</a>;</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa\">  428</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, lowp&gt;                     <a class=\"code\" href=\"a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa\">lowp_fvec3</a>;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga755484ffbe39ae3db2875953ed04e7b7\">  429</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, lowp&gt;                     <a class=\"code\" href=\"a00304.html#ga755484ffbe39ae3db2875953ed04e7b7\">lowp_fvec4</a>;</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b\">  431</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, mediump&gt;          <a class=\"code\" href=\"a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b\">mediump_fvec1</a>;</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6\">  432</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, mediump&gt;          <a class=\"code\" href=\"a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6\">mediump_fvec2</a>;</div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07\">  433</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, mediump&gt;          <a class=\"code\" href=\"a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07\">mediump_fvec3</a>;</div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb\">  434</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, mediump&gt;          <a class=\"code\" href=\"a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb\">mediump_fvec4</a>;</div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa1040342c4efdedc8f90e6267db8d41c\">  436</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, highp&gt;            <a class=\"code\" href=\"a00304.html#gaa1040342c4efdedc8f90e6267db8d41c\">highp_fvec1</a>;</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae\">  437</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, highp&gt;            <a class=\"code\" href=\"a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae\">highp_fvec2</a>;</div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6ef77413883f48d6b53b4169b25edbd0\">  438</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, highp&gt;            <a class=\"code\" href=\"a00304.html#ga6ef77413883f48d6b53b4169b25edbd0\">highp_fvec3</a>;</div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8b839abbb44f5102609eed89f6ed61f7\">  439</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, highp&gt;            <a class=\"code\" href=\"a00304.html#ga8b839abbb44f5102609eed89f6ed61f7\">highp_fvec4</a>;</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">  441</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, defaultp&gt;           <a class=\"code\" href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">fvec1</a>;</div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">  442</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, defaultp&gt;           <a class=\"code\" href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">fvec2</a>;</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">  443</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, defaultp&gt;           <a class=\"code\" href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">fvec3</a>;</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">  444</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, defaultp&gt;           <a class=\"code\" href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">fvec4</a>;</div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e\">  446</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, lowp&gt;                       <a class=\"code\" href=\"a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e\">lowp_f32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0\">  447</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, lowp&gt;                       <a class=\"code\" href=\"a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0\">lowp_f32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf739a2cd7b81783a43148b53e40d983b\">  448</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, lowp&gt;                       <a class=\"code\" href=\"a00304.html#gaf739a2cd7b81783a43148b53e40d983b\">lowp_f32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4e2e1debe022074ab224c9faf856d374\">  449</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, lowp&gt;                       <a class=\"code\" href=\"a00304.html#ga4e2e1debe022074ab224c9faf856d374\">lowp_f32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;</div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gabb33cab7d7c74cc14aa95455d0690865\">  451</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, mediump&gt;            <a class=\"code\" href=\"a00304.html#gabb33cab7d7c74cc14aa95455d0690865\">mediump_f32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b\">  452</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, mediump&gt;            <a class=\"code\" href=\"a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b\">mediump_f32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga062ffef2973bd8241df993c3b30b327c\">  453</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga062ffef2973bd8241df993c3b30b327c\">mediump_f32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad80c84bcd5f585840faa6179f6fd446c\">  454</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, mediump&gt;            <a class=\"code\" href=\"a00304.html#gad80c84bcd5f585840faa6179f6fd446c\">mediump_f32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;</div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab1b1c9e8667902b78b2c330e4d383a61\">  456</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, highp&gt;                      <a class=\"code\" href=\"a00304.html#gab1b1c9e8667902b78b2c330e4d383a61\">highp_f32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77\">  457</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, highp&gt;                      <a class=\"code\" href=\"a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77\">highp_f32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c\">  458</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, highp&gt;                      <a class=\"code\" href=\"a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c\">highp_f32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga0f038d4e09862a74f03d102c59eda73e\">  459</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, highp&gt;                      <a class=\"code\" href=\"a00304.html#ga0f038d4e09862a74f03d102c59eda73e\">highp_f32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">  461</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, defaultp&gt;           <a class=\"code\" href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">f32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">  462</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, defaultp&gt;           <a class=\"code\" href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">f32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">  463</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, defaultp&gt;           <a class=\"code\" href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">f32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">  464</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, defaultp&gt;           <a class=\"code\" href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">f32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;</div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, lowp&gt;                       <a class=\"code\" href=\"a00269.html#gaf906eb86b6e96c35138d0e4928e1435a\">lowp_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, lowp&gt;                       <a class=\"code\" href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">lowp_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, lowp&gt;                       <a class=\"code\" href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">lowp_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, lowp&gt;                       <a class=\"code\" href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">lowp_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, mediump&gt;            <a class=\"code\" href=\"a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd\">mediump_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, mediump&gt;            <a class=\"code\" href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">mediump_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, mediump&gt;            <a class=\"code\" href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">mediump_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, mediump&gt;            <a class=\"code\" href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">mediump_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, highp&gt;                      <a class=\"code\" href=\"a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe\">highp_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, highp&gt;                      <a class=\"code\" href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">highp_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, highp&gt;                      <a class=\"code\" href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">highp_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, highp&gt;                      <a class=\"code\" href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">highp_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, defaultp&gt;           <a class=\"code\" href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, defaultp&gt;           <a class=\"code\" href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, defaultp&gt;           <a class=\"code\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, defaultp&gt;           <a class=\"code\" href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;</div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b\">  486</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, lowp&gt;                       <a class=\"code\" href=\"a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b\">lowp_f64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4e641a54d70c81eabf56c25c966d04bd\">  487</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, lowp&gt;                       <a class=\"code\" href=\"a00304.html#ga4e641a54d70c81eabf56c25c966d04bd\">lowp_f64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae7a4711107b7d078fc5f03ce2227b90b\">  488</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, lowp&gt;                       <a class=\"code\" href=\"a00304.html#gae7a4711107b7d078fc5f03ce2227b90b\">lowp_f64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4\">  489</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, lowp&gt;                       <a class=\"code\" href=\"a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4\">lowp_f64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;</div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac30fdf8afa489400053275b6a3350127\">  491</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, mediump&gt;            <a class=\"code\" href=\"a00304.html#gac30fdf8afa489400053275b6a3350127\">mediump_f64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b\">  492</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b\">mediump_f64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga461c4c7d0757404dd0dba931760b25cf\">  493</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga461c4c7d0757404dd0dba931760b25cf\">mediump_f64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e\">  494</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, mediump&gt;            <a class=\"code\" href=\"a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e\">mediump_f64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;</div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga62c31b133ceee9984fbee05ac4c434a9\">  496</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, highp&gt;                      <a class=\"code\" href=\"a00304.html#ga62c31b133ceee9984fbee05ac4c434a9\">highp_f64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2\">  497</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, highp&gt;                      <a class=\"code\" href=\"a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2\">highp_f64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851\">  498</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, highp&gt;                      <a class=\"code\" href=\"a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851\">highp_f64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444\">  499</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, highp&gt;                      <a class=\"code\" href=\"a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444\">highp_f64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">  501</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, defaultp&gt;           <a class=\"code\" href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">f64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">  502</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, defaultp&gt;           <a class=\"code\" href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">f64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">  503</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, defaultp&gt;           <a class=\"code\" href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">f64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">  504</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, defaultp&gt;           <a class=\"code\" href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">f64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;</div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;        <span class=\"comment\">// Matrix NxN</span></div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;</div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">lowp_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">lowp_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">lowp_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;</div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">mediump_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">mediump_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">mediump_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;</div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">highp_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">highp_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">highp_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;</div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">mat2</a>;</div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">mat3</a>;</div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">mat4</a>;</div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;</div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5bba0ce31210e274f73efacd3364c03f\">  524</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga5bba0ce31210e274f73efacd3364c03f\">lowp_fmat2</a>;</div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b\">  525</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b\">lowp_fmat3</a>;</div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f\">  526</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f\">lowp_fmat4</a>;</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;</div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff\">  528</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff\">mediump_fmat2</a>;</div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga80823dfad5dba98512c76af498343847\">  529</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga80823dfad5dba98512c76af498343847\">mediump_fmat3</a>;</div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9\">  530</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9\">mediump_fmat4</a>;</div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;</div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae98c88d9a7befa9b5877f49176225535\">  532</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gae98c88d9a7befa9b5877f49176225535\">highp_fmat2</a>;</div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75\">  533</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75\">highp_fmat3</a>;</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gabf28443ce0cc0959077ec39b21f32c39\">  534</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gabf28443ce0cc0959077ec39b21f32c39\">highp_fmat4</a>;</div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;</div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280\">  536</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280\">fmat2</a>;</div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga253d453c20e037730023fea0215cb6f6\">  537</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga253d453c20e037730023fea0215cb6f6\">fmat3</a>;</div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca\">  538</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca\">fmat4</a>;</div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;</div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga52409bc6d4a2ce3421526c069220d685\">  540</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga52409bc6d4a2ce3421526c069220d685\">lowp_f32mat2</a>;</div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4187f89f196505b40e63f516139511e5\">  541</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga4187f89f196505b40e63f516139511e5\">lowp_f32mat3</a>;</div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga766aed2871e6173a81011a877f398f04\">  542</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga766aed2871e6173a81011a877f398f04\">lowp_f32mat4</a>;</div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;</div>\n<div class=\"line\"><a name=\"l00544\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf9020c6176a75bc84828ab01ea7dac25\">  544</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaf9020c6176a75bc84828ab01ea7dac25\">mediump_f32mat2</a>;</div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8\">  545</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8\">mediump_f32mat3</a>;</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4491baaebbc46a20f1cb5da985576bf4\">  546</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga4491baaebbc46a20f1cb5da985576bf4\">mediump_f32mat4</a>;</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;</div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga298f7d4d273678d0282812368da27fda\">  548</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga298f7d4d273678d0282812368da27fda\">highp_f32mat2</a>;</div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga24f9ef3263b1638564713892cc37981f\">  549</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga24f9ef3263b1638564713892cc37981f\">highp_f32mat3</a>;</div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga14c90ca49885723f51d06e295587236f\">  550</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga14c90ca49885723f51d06e295587236f\">highp_f32mat4</a>;</div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab12383ed6ac7595ed6fde4d266c58425\">  552</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gab12383ed6ac7595ed6fde4d266c58425\">f32mat2</a>;</div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be\">  553</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be\">f32mat3</a>;</div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga99d1b85ff99956b33da7e9992aad129a\">  554</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga99d1b85ff99956b33da7e9992aad129a\">f32mat4</a>;</div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;</div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, lowp&gt;            <a class=\"code\" href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">lowp_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\">  557</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">lowp_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">lowp_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;</div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">mediump_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">mediump_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, mediump&gt;         <a class=\"code\" href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">mediump_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;</div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, highp&gt;           <a class=\"code\" href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">highp_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, highp&gt;           <a class=\"code\" href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">highp_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, highp&gt;           <a class=\"code\" href=\"a00284.html#ga945254f459860741138bceb74da496b9\">highp_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;</div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, defaultp&gt;        <a class=\"code\" href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, defaultp&gt;        <a class=\"code\" href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, defaultp&gt;        <a class=\"code\" href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;</div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gafc730f6b4242763b0eda0ffa25150292\">  572</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#gafc730f6b4242763b0eda0ffa25150292\">lowp_f64mat2</a>;</div>\n<div class=\"line\"><a name=\"l00573\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga58119a41d143ebaea0df70fe882e8a40\">  573</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga58119a41d143ebaea0df70fe882e8a40\">lowp_f64mat3</a>;</div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7451266e67794bd1125163502bc4a570\">  574</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga7451266e67794bd1125163502bc4a570\">lowp_f64mat4</a>;</div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;</div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac1281da5ded55047e8892b0e1f1ae965\">  576</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#gac1281da5ded55047e8892b0e1f1ae965\">mediump_f64mat2</a>;</div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776\">  577</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776\">mediump_f64mat3</a>;</div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5\">  578</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5\">mediump_f64mat4</a>;</div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;</div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf7adb92ce8de0afaff01436b039fd924\">  580</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#gaf7adb92ce8de0afaff01436b039fd924\">highp_f64mat2</a>;</div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546\">  581</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546\">highp_f64mat3</a>;</div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5\">  582</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5\">highp_f64mat4</a>;</div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;</div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad9771450a54785d13080cdde0fe20c1d\">  584</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gad9771450a54785d13080cdde0fe20c1d\">f64mat2</a>;</div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga9b69181efbf8f37ae934f135137b29c0\">  585</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga9b69181efbf8f37ae934f135137b29c0\">f64mat3</a>;</div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc\">  586</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc\">f64mat4</a>;</div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;</div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;        <span class=\"comment\">// Matrix MxN</span></div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;</div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">lowp_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">lowp_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\">  592</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">lowp_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">lowp_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">lowp_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">lowp_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21\">lowp_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">lowp_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">lowp_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;</div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">mediump_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">mediump_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">mediump_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">mediump_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">mediump_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00605\"></a><span class=\"lineno\">  605</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">mediump_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#gad75706b70545412ba9ac27d5ee210f66\">mediump_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">mediump_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">mediump_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">highp_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">highp_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\">  612</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">highp_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">highp_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">highp_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">highp_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5\">highp_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00617\"></a><span class=\"lineno\">  617</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">highp_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, highp&gt;           <a class=\"code\" href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">highp_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;</div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00624\"></a><span class=\"lineno\">  624</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066\">  630</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066\">lowp_fmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga71cdb53801ed4c3aadb3603c04723210\">  631</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga71cdb53801ed4c3aadb3603c04723210\">lowp_fmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaab217601c74974a84acbca428123ecf7\">  632</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#gaab217601c74974a84acbca428123ecf7\">lowp_fmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga49b98e7d71804af45d86886a489e633c\">  633</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga49b98e7d71804af45d86886a489e633c\">lowp_fmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4\">  634</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4\">lowp_fmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga28733aec7288191b314d42154fd0b690\">  635</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga28733aec7288191b314d42154fd0b690\">lowp_fmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c\">  636</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c\">lowp_fmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444\">  637</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444\">lowp_fmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac2f5263708ac847b361a9841e74ddf9f\">  638</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#gac2f5263708ac847b361a9841e74ddf9f\">lowp_fmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;</div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga98a687c17b174ea316b5f397b64f44bc\">  640</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga98a687c17b174ea316b5f397b64f44bc\">mediump_fmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa03f939d90d5ef157df957d93f0b9a64\">  641</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaa03f939d90d5ef157df957d93f0b9a64\">mediump_fmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga35223623e9ccebd8a281873b71b7d213\">  642</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga35223623e9ccebd8a281873b71b7d213\">mediump_fmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga42569e5b92f8635cedeadb1457ee1467\">  643</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga42569e5b92f8635cedeadb1457ee1467\">mediump_fmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa6f526388c74a66b3d52315a14d434ae\">  644</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaa6f526388c74a66b3d52315a14d434ae\">mediump_fmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4\">  645</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4\">mediump_fmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf\">  646</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf\">mediump_fmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga41ad497f7eae211556aefd783cb02b90\">  647</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga41ad497f7eae211556aefd783cb02b90\">mediump_fmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga22e27beead07bff4d5ce9d6065a57279\">  648</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga22e27beead07bff4d5ce9d6065a57279\">mediump_fmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00649\"></a><span class=\"lineno\">  649</span>&#160;</div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad\">  650</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad\">highp_fmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacf111095594996fef29067b2454fccad\">  651</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gacf111095594996fef29067b2454fccad\">highp_fmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00652\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2\">  652</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2\">highp_fmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19\">  653</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19\">highp_fmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e\">  654</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e\">highp_fmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga961fac2a885907ffcf4d40daac6615c5\">  655</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga961fac2a885907ffcf4d40daac6615c5\">highp_fmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga076961cf2d120c7168b957cb2ed107b3\">  656</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga076961cf2d120c7168b957cb2ed107b3\">highp_fmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae406ec670f64170a7437b5e302eeb2cb\">  657</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gae406ec670f64170a7437b5e302eeb2cb\">highp_fmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaee80c7cd3caa0f2635058656755f6f69\">  658</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gaee80c7cd3caa0f2635058656755f6f69\">highp_fmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;</div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">  660</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">fmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00661\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">  661</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">fmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">  662</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">fmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">  663</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">fmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">  664</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">fmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">  665</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">fmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">  666</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">fmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00667\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">  667</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">fmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">  668</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">fmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;</div>\n<div class=\"line\"><a name=\"l00670\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1d091b6abfba1772450e1745a06525bc\">  670</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga1d091b6abfba1772450e1745a06525bc\">lowp_f32mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00671\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga961ccb34cd1a5654c772c8709e001dc5\">  671</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga961ccb34cd1a5654c772c8709e001dc5\">lowp_f32mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacc6bf0209dda0c7c14851a646071c974\">  672</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#gacc6bf0209dda0c7c14851a646071c974\">lowp_f32mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac53f9d7ab04eace67adad026092fb1e8\">  673</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#gac53f9d7ab04eace67adad026092fb1e8\">lowp_f32mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga841211b641cff1fcf861bdb14e5e4abc\">  674</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga841211b641cff1fcf861bdb14e5e4abc\">lowp_f32mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga21b1b22dec013a72656e3644baf8a1e1\">  675</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga21b1b22dec013a72656e3644baf8a1e1\">lowp_f32mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae6f3fcb702a666de07650c149cfa845a\">  676</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#gae6f3fcb702a666de07650c149cfa845a\">lowp_f32mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac21eda58a1475449a5709b412ebd776c\">  677</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#gac21eda58a1475449a5709b412ebd776c\">lowp_f32mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00678\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4143d129898f91545948c46859adce44\">  678</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga4143d129898f91545948c46859adce44\">lowp_f32mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00679\"></a><span class=\"lineno\">  679</span>&#160;        </div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f\">  680</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f\">mediump_f32mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf\">  681</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf\">mediump_f32mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1\">  682</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1\">mediump_f32mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00683\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f\">  683</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f\">mediump_f32mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00684\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f\">  684</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f\">mediump_f32mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8df705d775b776f5ae6b39e2ab892899\">  685</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga8df705d775b776f5ae6b39e2ab892899\">mediump_f32mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f\">  686</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f\">mediump_f32mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00687\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gade108f16633cf95fa500b5b8c36c8b00\">  687</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#gade108f16633cf95fa500b5b8c36c8b00\">mediump_f32mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00688\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga936e95b881ecd2d109459ca41913fa99\">  688</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga936e95b881ecd2d109459ca41913fa99\">mediump_f32mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;</div>\n<div class=\"line\"><a name=\"l00690\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968\">  690</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968\">highp_f32mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00691\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga0aeb5cb001473b08c88175012708a379\">  691</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga0aeb5cb001473b08c88175012708a379\">highp_f32mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00692\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga88938ee1e7981fa3402e88da6ad74531\">  692</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga88938ee1e7981fa3402e88da6ad74531\">highp_f32mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga36537e701456f12c20e73f469cac4967\">  693</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga36537e701456f12c20e73f469cac4967\">highp_f32mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaab691ae40c37976d268d8cac0096e0e1\">  694</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gaab691ae40c37976d268d8cac0096e0e1\">highp_f32mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00695\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa5086dbd6efb272d13fc88829330861d\">  695</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gaa5086dbd6efb272d13fc88829330861d\">highp_f32mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00696\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f\">  696</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f\">highp_f32mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59\">  697</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59\">highp_f32mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf1b712b97b2322685fbbed28febe5f84\">  698</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, highp&gt;           <a class=\"code\" href=\"a00304.html#gaf1b712b97b2322685fbbed28febe5f84\">highp_f32mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;</div>\n<div class=\"line\"><a name=\"l00700\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">  700</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">f32mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00701\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">  701</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">f32mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00702\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">  702</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">f32mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00703\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">  703</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">f32mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">  704</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">f32mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00705\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">  705</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">f32mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00706\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">  706</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">f32mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00707\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">  707</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">f32mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00708\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">  708</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">f32mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00709\"></a><span class=\"lineno\">  709</span>&#160;</div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">lowp_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00711\"></a><span class=\"lineno\">  711</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">lowp_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00712\"></a><span class=\"lineno\">  712</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">lowp_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00713\"></a><span class=\"lineno\">  713</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">lowp_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00714\"></a><span class=\"lineno\">  714</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">lowp_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00715\"></a><span class=\"lineno\">  715</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">lowp_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">lowp_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">lowp_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00718\"></a><span class=\"lineno\">  718</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">lowp_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00719\"></a><span class=\"lineno\">  719</span>&#160;</div>\n<div class=\"line\"><a name=\"l00720\"></a><span class=\"lineno\">  720</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">mediump_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">mediump_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00722\"></a><span class=\"lineno\">  722</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">mediump_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00723\"></a><span class=\"lineno\">  723</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">mediump_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">mediump_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00725\"></a><span class=\"lineno\">  725</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">mediump_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\">  726</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">mediump_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00727\"></a><span class=\"lineno\">  727</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">mediump_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00728\"></a><span class=\"lineno\">  728</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">mediump_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\">  729</span>&#160;</div>\n<div class=\"line\"><a name=\"l00730\"></a><span class=\"lineno\">  730</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">highp_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00731\"></a><span class=\"lineno\">  731</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">highp_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00732\"></a><span class=\"lineno\">  732</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">highp_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">highp_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00734\"></a><span class=\"lineno\">  734</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">highp_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00735\"></a><span class=\"lineno\">  735</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">highp_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">highp_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00737\"></a><span class=\"lineno\">  737</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">highp_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00738\"></a><span class=\"lineno\">  738</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">highp_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00739\"></a><span class=\"lineno\">  739</span>&#160;</div>\n<div class=\"line\"><a name=\"l00740\"></a><span class=\"lineno\">  740</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00741\"></a><span class=\"lineno\">  741</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00742\"></a><span class=\"lineno\">  742</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00743\"></a><span class=\"lineno\">  743</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00744\"></a><span class=\"lineno\">  744</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00745\"></a><span class=\"lineno\">  745</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00746\"></a><span class=\"lineno\">  746</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00747\"></a><span class=\"lineno\">  747</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00748\"></a><span class=\"lineno\">  748</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, defaultp&gt;     <a class=\"code\" href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00749\"></a><span class=\"lineno\">  749</span>&#160;</div>\n<div class=\"line\"><a name=\"l00750\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga771fda9109933db34f808d92b9b84d7e\">  750</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga771fda9109933db34f808d92b9b84d7e\">lowp_f64mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00751\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga39e90adcffe33264bd608fa9c6bd184b\">  751</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga39e90adcffe33264bd608fa9c6bd184b\">lowp_f64mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00752\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga50265a202fbfe0a25fc70066c31d9336\">  752</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga50265a202fbfe0a25fc70066c31d9336\">lowp_f64mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00753\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad\">  753</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad\">lowp_f64mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00754\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac8f8a12ee03105ef8861dc652434e3b7\">  754</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#gac8f8a12ee03105ef8861dc652434e3b7\">lowp_f64mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00755\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gade8d1edfb23996ab6c622e65e3893271\">  755</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#gade8d1edfb23996ab6c622e65e3893271\">lowp_f64mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab0cecb80fd106bc369b9e46a165815ce\">  756</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#gab0cecb80fd106bc369b9e46a165815ce\">lowp_f64mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00757\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae731613b25db3a5ef5a05d21e57a57d3\">  757</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#gae731613b25db3a5ef5a05d21e57a57d3\">lowp_f64mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00758\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95\">  758</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, lowp&gt;            <a class=\"code\" href=\"a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95\">lowp_f64mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00759\"></a><span class=\"lineno\">  759</span>&#160;</div>\n<div class=\"line\"><a name=\"l00760\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4fd527644cccbca4cb205320eab026f3\">  760</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga4fd527644cccbca4cb205320eab026f3\">mediump_f64mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00761\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54\">  761</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54\">mediump_f64mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00762\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaf306dd69e53633636aee38cea79d4cb7\">  762</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#gaf306dd69e53633636aee38cea79d4cb7\">mediump_f64mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00763\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gacd926d36a72433f6cac51dd60fa13107\">  763</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#gacd926d36a72433f6cac51dd60fa13107\">mediump_f64mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00764\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e\">  764</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e\">mediump_f64mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00765\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2\">  765</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2\">mediump_f64mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00766\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga17d36f0ea22314117e1cec9594b33945\">  766</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga17d36f0ea22314117e1cec9594b33945\">mediump_f64mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00767\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d\">  767</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d\">mediump_f64mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00768\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga66edb8de17b9235029472f043ae107e9\">  768</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, mediump&gt;         <a class=\"code\" href=\"a00304.html#ga66edb8de17b9235029472f043ae107e9\">mediump_f64mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00769\"></a><span class=\"lineno\">  769</span>&#160;</div>\n<div class=\"line\"><a name=\"l00770\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga773ea237a051827cfc20de960bc73ff0\">  770</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#ga773ea237a051827cfc20de960bc73ff0\">highp_f64mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00771\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga8342c7469384c6d769cacc9e309278d9\">  771</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#ga8342c7469384c6d769cacc9e309278d9\">highp_f64mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00772\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5a67a7440b9c0d1538533540f99036a5\">  772</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#ga5a67a7440b9c0d1538533540f99036a5\">highp_f64mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a\">  773</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a\">highp_f64mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00774\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4\">  774</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4\">highp_f64mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00775\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gad310b1dddeec9ec837a104e7db8de580\">  775</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#gad310b1dddeec9ec837a104e7db8de580\">highp_f64mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00776\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga58c4631421e323e252fc716b6103e38c\">  776</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#ga58c4631421e323e252fc716b6103e38c\">highp_f64mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00777\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae94823d65648e44d972863c6caa13103\">  777</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#gae94823d65648e44d972863c6caa13103\">highp_f64mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00778\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga09a2374b725c4246d263ee36fb66434c\">  778</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, highp&gt;           <a class=\"code\" href=\"a00304.html#ga09a2374b725c4246d263ee36fb66434c\">highp_f64mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00779\"></a><span class=\"lineno\">  779</span>&#160;</div>\n<div class=\"line\"><a name=\"l00780\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">  780</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">f64mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00781\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">  781</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">f64mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00782\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">  782</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">f64mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00783\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">  783</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">f64mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00784\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">  784</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">f64mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">  785</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">f64mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00786\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">  786</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">f64mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00787\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">  787</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">f64mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00788\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">  788</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, defaultp&gt;        <a class=\"code\" href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">f64mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00789\"></a><span class=\"lineno\">  789</span>&#160;</div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;        <span class=\"comment\">// Quaternion</span></div>\n<div class=\"line\"><a name=\"l00791\"></a><span class=\"lineno\">  791</span>&#160;</div>\n<div class=\"line\"><a name=\"l00792\"></a><span class=\"lineno\">  792</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, lowp&gt;                        <a class=\"code\" href=\"a00253.html#gade62c5316c1c11a79c34c00c189558eb\">lowp_quat</a>;</div>\n<div class=\"line\"><a name=\"l00793\"></a><span class=\"lineno\">  793</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, mediump&gt;                     <a class=\"code\" href=\"a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d\">mediump_quat</a>;</div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, highp&gt;                       <a class=\"code\" href=\"a00253.html#gaa2fd8085774376310aeb80588e0eab6e\">highp_quat</a>;</div>\n<div class=\"line\"><a name=\"l00795\"></a><span class=\"lineno\">  795</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, defaultp&gt;            <a class=\"code\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">quat</a>;</div>\n<div class=\"line\"><a name=\"l00796\"></a><span class=\"lineno\">  796</span>&#160;</div>\n<div class=\"line\"><a name=\"l00797\"></a><span class=\"lineno\">  797</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, lowp&gt;                        lowp_fquat;</div>\n<div class=\"line\"><a name=\"l00798\"></a><span class=\"lineno\">  798</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, mediump&gt;                     mediump_fquat;</div>\n<div class=\"line\"><a name=\"l00799\"></a><span class=\"lineno\">  799</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, highp&gt;                       highp_fquat;</div>\n<div class=\"line\"><a name=\"l00800\"></a><span class=\"lineno\">  800</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, defaultp&gt;            fquat;</div>\n<div class=\"line\"><a name=\"l00801\"></a><span class=\"lineno\">  801</span>&#160;</div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347\">  802</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f32, lowp&gt;                          <a class=\"code\" href=\"a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347\">lowp_f32quat</a>;</div>\n<div class=\"line\"><a name=\"l00803\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3\">  803</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f32, mediump&gt;                       <a class=\"code\" href=\"a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3\">mediump_f32quat</a>;</div>\n<div class=\"line\"><a name=\"l00804\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3\">  804</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f32, highp&gt;                         <a class=\"code\" href=\"a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3\">highp_f32quat</a>;</div>\n<div class=\"line\"><a name=\"l00805\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">  805</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f32, defaultp&gt;                      <a class=\"code\" href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">f32quat</a>;</div>\n<div class=\"line\"><a name=\"l00806\"></a><span class=\"lineno\">  806</span>&#160;</div>\n<div class=\"line\"><a name=\"l00807\"></a><span class=\"lineno\">  807</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;double, lowp&gt;                       <a class=\"code\" href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">lowp_dquat</a>;</div>\n<div class=\"line\"><a name=\"l00808\"></a><span class=\"lineno\">  808</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;double, mediump&gt;            <a class=\"code\" href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">mediump_dquat</a>;</div>\n<div class=\"line\"><a name=\"l00809\"></a><span class=\"lineno\">  809</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;double, highp&gt;                      <a class=\"code\" href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">highp_dquat</a>;</div>\n<div class=\"line\"><a name=\"l00810\"></a><span class=\"lineno\">  810</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;double, defaultp&gt;           <a class=\"code\" href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">dquat</a>;</div>\n<div class=\"line\"><a name=\"l00811\"></a><span class=\"lineno\">  811</span>&#160;</div>\n<div class=\"line\"><a name=\"l00812\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae\">  812</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f64, lowp&gt;                          <a class=\"code\" href=\"a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae\">lowp_f64quat</a>;</div>\n<div class=\"line\"><a name=\"l00813\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga5e52f485059ce6e3010c590b882602c9\">  813</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f64, mediump&gt;                       <a class=\"code\" href=\"a00304.html#ga5e52f485059ce6e3010c590b882602c9\">mediump_f64quat</a>;</div>\n<div class=\"line\"><a name=\"l00814\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#gafcfdd74a115163af2ce1093551747352\">  814</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f64, highp&gt;                         <a class=\"code\" href=\"a00304.html#gafcfdd74a115163af2ce1093551747352\">highp_f64quat</a>;</div>\n<div class=\"line\"><a name=\"l00815\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">  815</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f64, defaultp&gt;                      <a class=\"code\" href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">f64quat</a>;</div>\n<div class=\"line\"><a name=\"l00816\"></a><span class=\"lineno\">  816</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00817\"></a><span class=\"lineno\">  817</span>&#160;</div>\n<div class=\"line\"><a name=\"l00818\"></a><span class=\"lineno\">  818</span>&#160;</div>\n<div class=\"ttc\" id=\"a00304_html_gad064202b4cf9a2972475c03de657cb39\"><div class=\"ttname\"><a href=\"a00304.html#gad064202b4cf9a2972475c03de657cb39\">glm::highp_u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, highp &gt; highp_u16vec1</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00354\">fwd.hpp:354</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gad75706b70545412ba9ac27d5ee210f66\"><div class=\"ttname\"><a href=\"a00284.html#gad75706b70545412ba9ac27d5ee210f66\">glm::mediump_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, mediump &gt; mediump_mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00095_source.html#l00022\">matrix_float4x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga602e119c6b246b4f6edcf66845f2aa0f\"><div class=\"ttname\"><a href=\"a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f\">glm::highp_f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, highp &gt; highp_f32mat4x2</div><div class=\"ttdoc\">High single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00696\">fwd.hpp:696</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga8d5a4e65fb976e4553b84995b95ecb38\"><div class=\"ttname\"><a href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">glm::highp_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, highp &gt; highp_mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00097_source.html#l00028\">matrix_float4x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gab2d35cc2655f44d60958d60a1de34e81\"><div class=\"ttname\"><a href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">glm::mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, defaultp &gt; mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00098_source.html#l00015\">matrix_float4x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga64ed0deb6573375b7016daf82ffd53a7\"><div class=\"ttname\"><a href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">glm::mediump_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, mediump &gt; mediump_uvec4</div><div class=\"ttdoc\">4 components vector of medium qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00233_source.html#l00022\">vector_uint4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0c181fdf06a309691999926b6690c969\"><div class=\"ttname\"><a href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">glm::highp_u64</a></div><div class=\"ttdeci\">uint64 highp_u64</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00133\">fwd.hpp:133</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac30fdf8afa489400053275b6a3350127\"><div class=\"ttname\"><a href=\"a00304.html#gac30fdf8afa489400053275b6a3350127\">glm::mediump_f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, mediump &gt; mediump_f64vec1</div><div class=\"ttdoc\">Medium double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00491\">fwd.hpp:491</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaea5c4518e175162e306d2c2b5ef5ac79\"><div class=\"ttname\"><a href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">glm::f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, defaultp &gt; f32vec3</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00463\">fwd.hpp:463</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga74e9133378fd0b4da8ac0bc0876702ff\"><div class=\"ttname\"><a href=\"a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff\">glm::mediump_fmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, mediump &gt; mediump_fmat2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00528\">fwd.hpp:528</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaaeeb0077198cff40e3f48b1108ece139\"><div class=\"ttname\"><a href=\"a00304.html#gaaeeb0077198cff40e3f48b1108ece139\">glm::highp_float64_t</a></div><div class=\"ttdeci\">double highp_float64_t</div><div class=\"ttdoc\">High 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00175\">fwd.hpp:175</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0ecd3f4952536e5ef12702b44d2626fc\"><div class=\"ttname\"><a href=\"a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc\">glm::f64mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, defaultp &gt; f64mat4</div><div class=\"ttdoc\">Double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00586\">fwd.hpp:586</a></div></div>\n<div class=\"ttc\" id=\"a00273_html_gad628c608970b3d0aa6cfb63ce6e53e56\"><div class=\"ttname\"><a href=\"a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56\">glm::mediump_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, mediump &gt; mediump_ivec1</div><div class=\"ttdoc\">1 component vector of signed integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00215_source.html#l00028\">vector_int1_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga23a8bca00914a51542bfea13a4778186\"><div class=\"ttname\"><a href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">glm::mediump_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, mediump &gt; mediump_dvec4</div><div class=\"ttdoc\">4 components vector of medium double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00205_source.html#l00025\">vector_double4_precision.hpp:25</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaca61dfaccbf2f58f2d8063a4e76b44a9\"><div class=\"ttname\"><a href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">glm::highp_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, highp &gt; highp_vec3</div><div class=\"ttdoc\">3 components vector of high single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00211_source.html#l00016\">vector_float3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga382dc5295cead78766239a8457abfa98\"><div class=\"ttname\"><a href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">glm::lowp_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, lowp &gt; lowp_dmat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00076_source.html#l00016\">matrix_double4x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaaa17ef6bfa4e4f2692348b1460c8efcb\"><div class=\"ttname\"><a href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">glm::mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, defaultp &gt; mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00082_source.html#l00015\">matrix_float2x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad9771450a54785d13080cdde0fe20c1d\"><div class=\"ttname\"><a href=\"a00304.html#gad9771450a54785d13080cdde0fe20c1d\">glm::f64mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, defaultp &gt; f64mat2</div><div class=\"ttdoc\">Double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00584\">fwd.hpp:584</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga41ad497f7eae211556aefd783cb02b90\"><div class=\"ttname\"><a href=\"a00304.html#ga41ad497f7eae211556aefd783cb02b90\">glm::mediump_fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, mediump &gt; mediump_fmat4x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00647\">fwd.hpp:647</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaaaf878d0d7bfc0aac054fe269a886ca8\"><div class=\"ttname\"><a href=\"a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8\">glm::mediump_f32mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, mediump &gt; mediump_f32mat3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00545\">fwd.hpp:545</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf4dae276fd29623950de14a6ca2586b5\"><div class=\"ttname\"><a href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">glm::mediump_uint32_t</a></div><div class=\"ttdeci\">uint32 mediump_uint32_t</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00127\">fwd.hpp:127</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa212b805736a759998e312cbdd550fae\"><div class=\"ttname\"><a href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">glm::lowp_uint64</a></div><div class=\"ttdeci\">uint64 lowp_uint64</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00136\">fwd.hpp:136</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gabc0f2f4ad21c90b341881cf056f8650e\"><div class=\"ttname\"><a href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">glm::mediump_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, mediump &gt; mediump_mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00040\">matrix_float3x3_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga98a687c17b174ea316b5f397b64f44bc\"><div class=\"ttname\"><a href=\"a00304.html#ga98a687c17b174ea316b5f397b64f44bc\">glm::mediump_fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, mediump &gt; mediump_fmat2x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00640\">fwd.hpp:640</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga701f32ab5b3fb06996b41f5c0d643805\"><div class=\"ttname\"><a href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">glm::f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, defaultp &gt; f32vec1</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00461\">fwd.hpp:461</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga14c90ca49885723f51d06e295587236f\"><div class=\"ttname\"><a href=\"a00304.html#ga14c90ca49885723f51d06e295587236f\">glm::highp_f32mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, highp &gt; highp_f32mat4</div><div class=\"ttdoc\">High single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00550\">fwd.hpp:550</a></div></div>\n<div class=\"ttc\" id=\"a00253_html_gaa2fd8085774376310aeb80588e0eab6e\"><div class=\"ttname\"><a href=\"a00253.html#gaa2fd8085774376310aeb80588e0eab6e\">glm::highp_quat</a></div><div class=\"ttdeci\">qua&lt; float, highp &gt; highp_quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00132_source.html#l00032\">quaternion_float_precision.hpp:32</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadbb198a4d7aad82a0f4dc466ef6f6215\"><div class=\"ttname\"><a href=\"a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215\">glm::highp_float64</a></div><div class=\"ttdeci\">double highp_float64</div><div class=\"ttdoc\">High 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00170\">fwd.hpp:170</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2076157df85e49b8c021e03e46a376c1\"><div class=\"ttname\"><a href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">glm::mediump_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, mediump &gt; mediump_dmat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00070_source.html#l00022\">matrix_double3x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1b09f03da7ac43055c68a349d5445083\"><div class=\"ttname\"><a href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">glm::lowp_u8</a></div><div class=\"ttdeci\">uint8 lowp_u8</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00089\">fwd.hpp:89</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga1e0ea3fba496bc7c6f620d2590acb66b\"><div class=\"ttname\"><a href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">glm::lowp_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, lowp &gt; lowp_dmat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00070_source.html#l00016\">matrix_double3x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8165913e068444f7842302d40ba897b9\"><div class=\"ttname\"><a href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">glm::u32</a></div><div class=\"ttdeci\">uint32 u32</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00120\">fwd.hpp:120</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9b69181efbf8f37ae934f135137b29c0\"><div class=\"ttname\"><a href=\"a00304.html#ga9b69181efbf8f37ae934f135137b29c0\">glm::f64mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, defaultp &gt; f64mat3</div><div class=\"ttdoc\">Double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00585\">fwd.hpp:585</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaa18f6b80b41c214f10666948539c1f93\"><div class=\"ttname\"><a href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">glm::highp_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, highp &gt; highp_ivec2</div><div class=\"ttdoc\">2 components vector of high qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00217_source.html#l00016\">vector_int2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gacf237c2d8832fe8db2d7e187585d34bd\"><div class=\"ttname\"><a href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">glm::highp_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, highp &gt; highp_dmat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00078_source.html#l00028\">matrix_double4x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga497d513d552d927537d61fa11e3701ab\"><div class=\"ttname\"><a href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">glm::mediump_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, mediump &gt; mediump_mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00085_source.html#l00022\">matrix_float2x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3714dab2c16a6545a405cb0c3b3aaa6f\"><div class=\"ttname\"><a href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">glm::lowp_float64</a></div><div class=\"ttdeci\">double lowp_float64</div><div class=\"ttdoc\">Low 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00168\">fwd.hpp:168</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga54b8a4e0f5a7203a821bf8e9c1265bcf\"><div class=\"ttname\"><a href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">glm::i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, defaultp &gt; i32vec1</div><div class=\"ttdoc\">32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00277\">fwd.hpp:277</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga746dc6da204f5622e395f492997dbf57\"><div class=\"ttname\"><a href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">glm::highp_uint16</a></div><div class=\"ttdeci\">uint16 highp_uint16</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00110\">fwd.hpp:110</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf306dd69e53633636aee38cea79d4cb7\"><div class=\"ttname\"><a href=\"a00304.html#gaf306dd69e53633636aee38cea79d4cb7\">glm::mediump_f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, mediump &gt; mediump_f64mat2x4</div><div class=\"ttdoc\">Medium double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00762\">fwd.hpp:762</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad23b1be9b3bf20352089a6b738f0ebba\"><div class=\"ttname\"><a href=\"a00304.html#gad23b1be9b3bf20352089a6b738f0ebba\">glm::highp_i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, highp &gt; highp_i64vec4</div><div class=\"ttdoc\">High qualifier 64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00295\">fwd.hpp:295</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga5389b3ab32dc0d72bea00057ab6d1dd3\"><div class=\"ttname\"><a href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">glm::mediump_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, mediump &gt; mediump_dmat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00040\">matrix_double4x4_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaab239fa9e35b65a67cbaa6ac082f3675\"><div class=\"ttname\"><a href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">glm::f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, defaultp &gt; f64mat3x4</div><div class=\"ttdoc\">Double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00787\">fwd.hpp:787</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gab654f4ed4a99d64a6cfc65320c2a7590\"><div class=\"ttname\"><a href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">glm::highp_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, highp &gt; highp_dvec4</div><div class=\"ttdoc\">4 components vector of high double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00205_source.html#l00018\">vector_double4_precision.hpp:18</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4541dc2feb2a31d6ecb5a303f3dd3280\"><div class=\"ttname\"><a href=\"a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280\">glm::fmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; fmat2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00536\">fwd.hpp:536</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga93add35d2a44c5830978b827e8c295e8\"><div class=\"ttname\"><a href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">glm::lowp_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, lowp &gt; lowp_dmat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00074_source.html#l00016\">matrix_double3x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae9c90a867a6026b1f6eab00456f3fb8b\"><div class=\"ttname\"><a href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">glm::i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, defaultp &gt; i16vec3</div><div class=\"ttdoc\">16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00259\">fwd.hpp:259</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf1b735b4b1145174f4e4167d13778f9b\"><div class=\"ttname\"><a href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">glm::lowp_uint32_t</a></div><div class=\"ttdeci\">uint32 lowp_uint32_t</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00126\">fwd.hpp:126</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62a32c31f4e2e8ca859663b6e3289a2d\"><div class=\"ttname\"><a href=\"a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d\">glm::lowp_fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, lowp &gt; lowp_fvec2</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00427\">fwd.hpp:427</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga34dd5ec1988c443bae80f1b20a8ade5f\"><div class=\"ttname\"><a href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">glm::mediump_uint32</a></div><div class=\"ttdeci\">uint32 mediump_uint32</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00123\">fwd.hpp:123</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac1c38778c0b5a1263f07753c05a4f7b9\"><div class=\"ttname\"><a href=\"a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9\">glm::mediump_fmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, mediump &gt; mediump_fmat4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00530\">fwd.hpp:530</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa38d732f5d4a7bc42a1b43b9d3c141ce\"><div class=\"ttname\"><a href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">glm::highp_uint64</a></div><div class=\"ttdeci\">uint64 highp_uint64</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00138\">fwd.hpp:138</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5bba0ce31210e274f73efacd3364c03f\"><div class=\"ttname\"><a href=\"a00304.html#ga5bba0ce31210e274f73efacd3364c03f\">glm::lowp_fmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, lowp &gt; lowp_fmat2</div><div class=\"ttdoc\">Low single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00524\">fwd.hpp:524</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa6a5b461bbf5fe20982472aa51896d4b\"><div class=\"ttname\"><a href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">glm::lowp_uint32</a></div><div class=\"ttdeci\">uint32 lowp_uint32</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00122\">fwd.hpp:122</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga40b5c557efebb5bb99d6b9aa81095afa\"><div class=\"ttname\"><a href=\"a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa\">glm::lowp_fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, lowp &gt; lowp_fvec3</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00428\">fwd.hpp:428</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga44bfa55cda5dbf53f24a1fb7610393d6\"><div class=\"ttname\"><a href=\"a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6\">glm::mediump_fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, mediump &gt; mediump_fvec2</div><div class=\"ttdoc\">Medium Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00432\">fwd.hpp:432</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga7a0e3fe41512b0494e598f5c58722f19\"><div class=\"ttname\"><a href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">glm::highp_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, highp &gt; highp_mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00085_source.html#l00028\">matrix_float2x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28733aec7288191b314d42154fd0b690\"><div class=\"ttname\"><a href=\"a00304.html#ga28733aec7288191b314d42154fd0b690\">glm::lowp_fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, lowp &gt; lowp_fmat3x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00635\">fwd.hpp:635</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gabe65c061834f61b4f7cb6037b19006a4\"><div class=\"ttname\"><a href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">glm::vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, defaultp &gt; vec2</div><div class=\"ttdoc\">2 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00208_source.html#l00015\">vector_float2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga771fda9109933db34f808d92b9b84d7e\"><div class=\"ttname\"><a href=\"a00304.html#ga771fda9109933db34f808d92b9b84d7e\">glm::lowp_f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, lowp &gt; lowp_f64mat2x2</div><div class=\"ttdoc\">Low double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00750\">fwd.hpp:750</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa4e31c3d9de067029efeb161a44b0232\"><div class=\"ttname\"><a href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">glm::i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, defaultp &gt; i64vec4</div><div class=\"ttdoc\">64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00300\">fwd.hpp:300</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1c522ca821c27b862fe51cf4024b064b\"><div class=\"ttname\"><a href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">glm::u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, defaultp &gt; u16vec3</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00361\">fwd.hpp:361</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga859be7b9d3a3765c1cafc14dbcf249a6\"><div class=\"ttname\"><a href=\"a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6\">glm::lowp_u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, lowp &gt; lowp_u64vec1</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00384\">fwd.hpp:384</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga6205fd19be355600334edef6af0b27cb\"><div class=\"ttname\"><a href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">glm::mediump_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, mediump &gt; mediump_dmat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00022\">matrix_double2x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga400ce8cc566de093a9b28e59e220d6e4\"><div class=\"ttname\"><a href=\"a00304.html#ga400ce8cc566de093a9b28e59e220d6e4\">glm::mediump_u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, mediump &gt; mediump_u16vec1</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00349\">fwd.hpp:349</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaa92c1954d71b1e7914874bd787b43d1c\"><div class=\"ttname\"><a href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">glm::highp_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, highp &gt; highp_vec2</div><div class=\"ttdoc\">2 components vector of high single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00209_source.html#l00016\">vector_float2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad06935764d78f43f9d542c784c2212ec\"><div class=\"ttname\"><a href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">glm::i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, defaultp &gt; i8vec2</div><div class=\"ttdoc\">8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00238\">fwd.hpp:238</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafd9a6ebc0c7b95f5c581d00d16a17c54\"><div class=\"ttname\"><a href=\"a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54\">glm::mediump_f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, mediump &gt; mediump_f64mat2x3</div><div class=\"ttdoc\">Medium double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00761\">fwd.hpp:761</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4502885718742aa238c36a312c3f3f20\"><div class=\"ttname\"><a href=\"a00304.html#ga4502885718742aa238c36a312c3f3f20\">glm::lowp_u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, lowp &gt; lowp_u32vec4</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00367\">fwd.hpp:367</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0f038d4e09862a74f03d102c59eda73e\"><div class=\"ttname\"><a href=\"a00304.html#ga0f038d4e09862a74f03d102c59eda73e\">glm::highp_f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, highp &gt; highp_f32vec4</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00459\">fwd.hpp:459</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga3d3e55874babd4bf93baa7bbc83ae418\"><div class=\"ttname\"><a href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">glm::uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, defaultp &gt; uvec3</div><div class=\"ttdoc\">3 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00230_source.html#l00015\">vector_uint3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga43e5b41c834fcaf4db5a831c0e28128e\"><div class=\"ttname\"><a href=\"a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e\">glm::lowp_f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, lowp &gt; lowp_f32vec1</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00446\">fwd.hpp:446</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0aeb5cb001473b08c88175012708a379\"><div class=\"ttname\"><a href=\"a00304.html#ga0aeb5cb001473b08c88175012708a379\">glm::highp_f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, highp &gt; highp_f32mat2x3</div><div class=\"ttdoc\">High single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00691\">fwd.hpp:691</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga226a8d52b4e3f77aaa6231135e886aac\"><div class=\"ttname\"><a href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">glm::highp_int64</a></div><div class=\"ttdeci\">int64 highp_int64</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00080\">fwd.hpp:80</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga20bf224bd4f8a24ecc4ed2004a40c219\"><div class=\"ttname\"><a href=\"a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219\">glm::mediump_i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, mediump &gt; mediump_i32vec2</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00268\">fwd.hpp:268</a></div></div>\n<div class=\"ttc\" id=\"a00269_html_gaf906eb86b6e96c35138d0e4928e1435a\"><div class=\"ttname\"><a href=\"a00269.html#gaf906eb86b6e96c35138d0e4928e1435a\">glm::lowp_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, lowp &gt; lowp_dvec1</div><div class=\"ttdoc\">1 component vector of double-precision floating-point numbers using low precision arithmetic in term ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00199_source.html#l00033\">vector_double1_precision.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7451266e67794bd1125163502bc4a570\"><div class=\"ttname\"><a href=\"a00304.html#ga7451266e67794bd1125163502bc4a570\">glm::lowp_f64mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, lowp &gt; lowp_f64mat4</div><div class=\"ttdoc\">Low double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00574\">fwd.hpp:574</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8cb400c0f4438f2640035d7b9824a0ca\"><div class=\"ttname\"><a href=\"a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca\">glm::fmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; fmat4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00538\">fwd.hpp:538</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaefe8ef520c6cb78590ebbefe648da4d4\"><div class=\"ttname\"><a href=\"a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4\">glm::mediump_fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, mediump &gt; mediump_fmat3x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00645\">fwd.hpp:645</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga0cab80beee64a5f8d2ae4e823983063a\"><div class=\"ttname\"><a href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">glm::lowp_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, lowp &gt; lowp_dmat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00016\">matrix_double3x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b2cd8d31eb345b2d641d9261c38db1a\"><div class=\"ttname\"><a href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">glm::lowp_int16_t</a></div><div class=\"ttdeci\">int16 lowp_int16_t</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00054\">fwd.hpp:54</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadf70eaaa230aeed5a4c9f4c9c5c55902\"><div class=\"ttname\"><a href=\"a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902\">glm::highp_i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, highp &gt; highp_i32vec4</div><div class=\"ttdoc\">High qualifier 32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00275\">fwd.hpp:275</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3b32ca1e57a4ef91babbc3d35a34ea20\"><div class=\"ttname\"><a href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">glm::f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, defaultp &gt; f32mat4x2</div><div class=\"ttdoc\">Single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00702\">fwd.hpp:702</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae54e4d1aeb5a0f0c64822e6f1b299e19\"><div class=\"ttname\"><a href=\"a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19\">glm::highp_fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, highp &gt; highp_fmat3x2</div><div class=\"ttdoc\">High single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00653\">fwd.hpp:653</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga8e879b57ddd81e5bf5a88929844e8b40\"><div class=\"ttname\"><a href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">glm::mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, defaultp &gt; mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00086_source.html#l00015\">matrix_float2x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa03f939d90d5ef157df957d93f0b9a64\"><div class=\"ttname\"><a href=\"a00304.html#gaa03f939d90d5ef157df957d93f0b9a64\">glm::mediump_fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, mediump &gt; mediump_fmat2x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00641\">fwd.hpp:641</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1bd0e914158bf03135f8a317de6debe9\"><div class=\"ttname\"><a href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">glm::mediump_u32</a></div><div class=\"ttdeci\">uint32 mediump_u32</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00118\">fwd.hpp:118</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga49b98e7d71804af45d86886a489e633c\"><div class=\"ttname\"><a href=\"a00304.html#ga49b98e7d71804af45d86886a489e633c\">glm::lowp_fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, lowp &gt; lowp_fmat3x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00633\">fwd.hpp:633</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3eee3a74d0f1de8635d846dfb29ec4bb\"><div class=\"ttname\"><a href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">glm::lowp_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, lowp &gt; lowp_mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00085_source.html#l00016\">matrix_float2x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae400c4ce1f5f3e1fa12861b2baed331a\"><div class=\"ttname\"><a href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">glm::lowp_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, lowp &gt; lowp_mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00016\">matrix_float2x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga17d36f0ea22314117e1cec9594b33945\"><div class=\"ttname\"><a href=\"a00304.html#ga17d36f0ea22314117e1cec9594b33945\">glm::mediump_f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, mediump &gt; mediump_f64mat4x2</div><div class=\"ttdoc\">Medium double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00766\">fwd.hpp:766</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga15ac87724048ab7169bb5d3572939dd3\"><div class=\"ttname\"><a href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">glm::lowp_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, lowp &gt; lowp_bvec4</div><div class=\"ttdoc\">4 components vector of low qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00196_source.html#l00028\">vector_bool4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga791b15ceb3f1e09d1a0ec6f3057ca159\"><div class=\"ttname\"><a href=\"a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159\">glm::highp_u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, highp &gt; highp_u16vec2</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00355\">fwd.hpp:355</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62c31b133ceee9984fbee05ac4c434a9\"><div class=\"ttname\"><a href=\"a00304.html#ga62c31b133ceee9984fbee05ac4c434a9\">glm::highp_f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, highp &gt; highp_f64vec1</div><div class=\"ttdoc\">High double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00496\">fwd.hpp:496</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gad0d784d8eee201aca362484d2daee46c\"><div class=\"ttname\"><a href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">glm::ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, defaultp &gt; ivec3</div><div class=\"ttdoc\">3 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00218_source.html#l00015\">vector_int3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4b5e2c9aaa5d7717bf71179aefa12e88\"><div class=\"ttname\"><a href=\"a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88\">glm::mediump_i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, mediump &gt; mediump_i16vec2</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00248\">fwd.hpp:248</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4920a1536f161f7ded1d6909b7fef0d2\"><div class=\"ttname\"><a href=\"a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2\">glm::highp_fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, highp &gt; highp_fmat2x4</div><div class=\"ttdoc\">High single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00652\">fwd.hpp:652</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga489b89ba93d4f7b3934df78debc52276\"><div class=\"ttname\"><a href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">glm::u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, defaultp &gt; u64vec3</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00401\">fwd.hpp:401</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf49470869e9be2c059629b250619804e\"><div class=\"ttname\"><a href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">glm::lowp_uint8</a></div><div class=\"ttdeci\">uint8 lowp_uint8</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00094\">fwd.hpp:94</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac53f9d7ab04eace67adad026092fb1e8\"><div class=\"ttname\"><a href=\"a00304.html#gac53f9d7ab04eace67adad026092fb1e8\">glm::lowp_f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, lowp &gt; lowp_f32mat3x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00673\">fwd.hpp:673</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga0be2c682258604a35004f088782a9645\"><div class=\"ttname\"><a href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">glm::mediump_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, mediump &gt; mediump_bvec4</div><div class=\"ttdoc\">4 components vector of medium qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00196_source.html#l00022\">vector_bool4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00280_html_ga2c27aea32de57d58aec8e92d5d2181e2\"><div class=\"ttname\"><a href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">glm::mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, defaultp &gt; mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00088_source.html#l00015\">matrix_float3x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga30069d1f02b19599cbfadf98c23ac6ed\"><div class=\"ttname\"><a href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">glm::lowp_u64</a></div><div class=\"ttdeci\">uint64 lowp_u64</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00131\">fwd.hpp:131</a></div></div>\n<div class=\"ttc\" id=\"a00277_html_ga38fde73aaf1420175ece8d4882558a3f\"><div class=\"ttname\"><a href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">glm::mediump_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, mediump &gt; mediump_uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00227_source.html#l00032\">vector_uint1_precision.hpp:32</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62324224b9c6cce9c6b4db96bb704a8a\"><div class=\"ttname\"><a href=\"a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a\">glm::highp_i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, highp &gt; highp_i64vec3</div><div class=\"ttdoc\">High qualifier 64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00294\">fwd.hpp:294</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6fbd69cbdaa44345bff923a2cf63de7e\"><div class=\"ttname\"><a href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">glm::mediump_int8</a></div><div class=\"ttdeci\">int8 mediump_int8</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00037\">fwd.hpp:37</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf645b1a60203b39c0207baff5e3d8c3c\"><div class=\"ttname\"><a href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">glm::lowp_int64</a></div><div class=\"ttdeci\">int64 lowp_int64</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00078\">fwd.hpp:78</a></div></div>\n<div class=\"ttc\" id=\"a00271_html_ga0a57630f03031706b1d26a7d70d9184c\"><div class=\"ttname\"><a href=\"a00271.html#ga0a57630f03031706b1d26a7d70d9184c\">glm::lowp_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, lowp &gt; lowp_vec1</div><div class=\"ttdoc\">1 component vector of single-precision floating-point numbers using low precision arithmetic in term ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00207_source.html#l00033\">vector_float1_precision.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab005efe0fa4de1a928e8ddec4bc2c43f\"><div class=\"ttname\"><a href=\"a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f\">glm::mediump_f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, mediump &gt; mediump_f32mat4x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00686\">fwd.hpp:686</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2ea82e12f4d7afcfce8f59894d400230\"><div class=\"ttname\"><a href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">glm::highp_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, highp &gt; highp_mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00046\">matrix_float3x3_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae7a4711107b7d078fc5f03ce2227b90b\"><div class=\"ttname\"><a href=\"a00304.html#gae7a4711107b7d078fc5f03ce2227b90b\">glm::lowp_f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, lowp &gt; lowp_f64vec3</div><div class=\"ttdoc\">Low double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00488\">fwd.hpp:488</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaf991cad0b34f64e33af186326dbc4d66\"><div class=\"ttname\"><a href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">glm::mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, defaultp &gt; mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00092_source.html#l00015\">matrix_float3x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga63362cb4a63fc1be7d2e49cd5d574c84\"><div class=\"ttname\"><a href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">glm::lowp_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, lowp &gt; lowp_mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00034\">matrix_float3x3_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaef3824ed4fe435a019c5b9dddf53fec5\"><div class=\"ttname\"><a href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">glm::u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, defaultp &gt; u64vec2</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00400\">fwd.hpp:400</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\"><div class=\"ttname\"><a href=\"a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\">glm::lowp_i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, lowp &gt; lowp_i64vec3</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00284\">fwd.hpp:284</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a8bdc32184ea0a522ef7bd90640cf67\"><div class=\"ttname\"><a href=\"a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67\">glm::mediump_i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, mediump &gt; mediump_i8vec2</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00228\">fwd.hpp:228</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gace3acb313c800552a9411953eb8b2ed7\"><div class=\"ttname\"><a href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">glm::lowp_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, lowp &gt; lowp_vec4</div><div class=\"ttdoc\">4 components vector of low single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00213_source.html#l00028\">vector_float4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gac7574544bb94777bdbd2eb224eb72fd0\"><div class=\"ttname\"><a href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">glm::mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, defaultp &gt; mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00096_source.html#l00015\">matrix_float4x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab90ade28222f8b861d5ceaf81a3a7f5d\"><div class=\"ttname\"><a href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">glm::f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, defaultp &gt; f32mat3x4</div><div class=\"ttdoc\">Single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00707\">fwd.hpp:707</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae220fa4c5a7b13ef2ab0420340de645c\"><div class=\"ttname\"><a href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">glm::mediump_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, mediump &gt; mediump_dmat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00076_source.html#l00022\">matrix_double4x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga30e8baef5d56d5c166872a2bc00f36e9\"><div class=\"ttname\"><a href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">glm::lowp_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, lowp &gt; lowp_vec2</div><div class=\"ttdoc\">2 components vector of low single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00209_source.html#l00028\">vector_float2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5609c8fa2b7eac3dec337d321cb0ca96\"><div class=\"ttname\"><a href=\"a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96\">glm::highp_i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, highp &gt; highp_i16vec3</div><div class=\"ttdoc\">High qualifier 16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00254\">fwd.hpp:254</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga741e05adf1f12d5d913f67088db1009a\"><div class=\"ttname\"><a href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">glm::mediump_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, mediump &gt; mediump_dmat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00066_source.html#l00022\">matrix_double2x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3be6c7fc5fe08fa2274bdb001d5f2633\"><div class=\"ttname\"><a href=\"a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633\">glm::mediump_i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, mediump &gt; mediump_i16vec3</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00249\">fwd.hpp:249</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf3f312156984c365e9f65620354da70b\"><div class=\"ttname\"><a href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">glm::u64</a></div><div class=\"ttdeci\">uint64 u64</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00134\">fwd.hpp:134</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gac57496299d276ed97044074097bd5e2c\"><div class=\"ttname\"><a href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">glm::mediump_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, mediump &gt; mediump_ivec2</div><div class=\"ttdoc\">2 components vector of medium qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00217_source.html#l00022\">vector_int2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga42569e5b92f8635cedeadb1457ee1467\"><div class=\"ttname\"><a href=\"a00304.html#ga42569e5b92f8635cedeadb1457ee1467\">glm::mediump_fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, mediump &gt; mediump_fmat3x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00643\">fwd.hpp:643</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gade502df1ce14f837fae7f60a03ddb9b0\"><div class=\"ttname\"><a href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">glm::f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, defaultp &gt; f64vec1</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00501\">fwd.hpp:501</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8343e9d244fb17a5bbf0d94d36b3695e\"><div class=\"ttname\"><a href=\"a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e\">glm::mediump_i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, mediump &gt; mediump_i64vec1</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00287\">fwd.hpp:287</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafe730798732aa7b0647096a004db1b1c\"><div class=\"ttname\"><a href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">glm::i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, defaultp &gt; i16vec1</div><div class=\"ttdoc\">16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00257\">fwd.hpp:257</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gad8e2727a6e7aa68280245bb0022118e1\"><div class=\"ttname\"><a href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">glm::lowp_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, lowp &gt; lowp_dmat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00016\">matrix_double2x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga5ceeb46670fdc000a0701910cc5061c9\"><div class=\"ttname\"><a href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">glm::highp_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, highp &gt; highp_dmat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00068_source.html#l00028\">matrix_double2x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac8f8a12ee03105ef8861dc652434e3b7\"><div class=\"ttname\"><a href=\"a00304.html#gac8f8a12ee03105ef8861dc652434e3b7\">glm::lowp_f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, lowp &gt; lowp_f64mat3x3</div><div class=\"ttdoc\">Low double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00754\">fwd.hpp:754</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4e641a54d70c81eabf56c25c966d04bd\"><div class=\"ttname\"><a href=\"a00304.html#ga4e641a54d70c81eabf56c25c966d04bd\">glm::lowp_f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, lowp &gt; lowp_f64vec2</div><div class=\"ttdoc\">Low double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00487\">fwd.hpp:487</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacf111095594996fef29067b2454fccad\"><div class=\"ttname\"><a href=\"a00304.html#gacf111095594996fef29067b2454fccad\">glm::highp_fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, highp &gt; highp_fmat2x3</div><div class=\"ttdoc\">High single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00651\">fwd.hpp:651</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac21eda58a1475449a5709b412ebd776c\"><div class=\"ttname\"><a href=\"a00304.html#gac21eda58a1475449a5709b412ebd776c\">glm::lowp_f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, lowp &gt; lowp_f32mat4x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00677\">fwd.hpp:677</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga58119a41d143ebaea0df70fe882e8a40\"><div class=\"ttname\"><a href=\"a00304.html#ga58119a41d143ebaea0df70fe882e8a40\">glm::lowp_f64mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, lowp &gt; lowp_f64mat3</div><div class=\"ttdoc\">Low double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00573\">fwd.hpp:573</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1900c6ab74acd392809425953359ef52\"><div class=\"ttname\"><a href=\"a00304.html#ga1900c6ab74acd392809425953359ef52\">glm::mediump_u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, mediump &gt; mediump_u64vec3</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00391\">fwd.hpp:391</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab83d8aae6e4f115e97a785e8574a115f\"><div class=\"ttname\"><a href=\"a00304.html#gab83d8aae6e4f115e97a785e8574a115f\">glm::mediump_float64</a></div><div class=\"ttdeci\">double mediump_float64</div><div class=\"ttdoc\">Medium 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00169\">fwd.hpp:169</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga232fad1b0d6dcc7c16aabde98b2e2a80\"><div class=\"ttname\"><a href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">glm::float64</a></div><div class=\"ttdeci\">double float64</div><div class=\"ttdoc\">Double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00171\">fwd.hpp:171</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gac6c781a85f012d77a75310a3058702c2\"><div class=\"ttname\"><a href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">glm::highp_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, highp &gt; highp_bvec2</div><div class=\"ttdoc\">2 components vector of high qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00192_source.html#l00016\">vector_bool2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa7db3ad10947cf70cae6474d05ebd227\"><div class=\"ttname\"><a href=\"a00304.html#gaa7db3ad10947cf70cae6474d05ebd227\">glm::highp_i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, highp &gt; highp_i16vec2</div><div class=\"ttdoc\">High qualifier 16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00253\">fwd.hpp:253</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8c8aa45aafcc23238edb1d5aeb801774\"><div class=\"ttname\"><a href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">glm::fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, defaultp &gt; fmat4x2</div><div class=\"ttdoc\">Single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00662\">fwd.hpp:662</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga39e90adcffe33264bd608fa9c6bd184b\"><div class=\"ttname\"><a href=\"a00304.html#ga39e90adcffe33264bd608fa9c6bd184b\">glm::lowp_f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, lowp &gt; lowp_f64mat2x3</div><div class=\"ttdoc\">Low double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00751\">fwd.hpp:751</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga44e158af77a670ee1b58c03cda9e1619\"><div class=\"ttname\"><a href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">glm::fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, defaultp &gt; fmat3x4</div><div class=\"ttdoc\">Single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00667\">fwd.hpp:667</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gac017848a9df570f60916a21a297b1e8e\"><div class=\"ttname\"><a href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">glm::lowp_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, lowp &gt; lowp_dmat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00034\">matrix_double3x3_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad3ad390560a671b1f676fbf03cd3aa15\"><div class=\"ttname\"><a href=\"a00304.html#gad3ad390560a671b1f676fbf03cd3aa15\">glm::lowp_u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, lowp &gt; lowp_u32vec3</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00366\">fwd.hpp:366</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf512b74c4400b68f9fdf9388b3d6aac8\"><div class=\"ttname\"><a href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">glm::f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, defaultp &gt; f32mat2x4</div><div class=\"ttdoc\">Single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00706\">fwd.hpp:706</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga755484ffbe39ae3db2875953ed04e7b7\"><div class=\"ttname\"><a href=\"a00304.html#ga755484ffbe39ae3db2875953ed04e7b7\">glm::lowp_fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, lowp &gt; lowp_fvec4</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00429\">fwd.hpp:429</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad80c84bcd5f585840faa6179f6fd446c\"><div class=\"ttname\"><a href=\"a00304.html#gad80c84bcd5f585840faa6179f6fd446c\">glm::mediump_f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, mediump &gt; mediump_f32vec4</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00454\">fwd.hpp:454</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga550831bfc26d1e0101c1cb3d79938c06\"><div class=\"ttname\"><a href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">glm::i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, defaultp &gt; i16vec4</div><div class=\"ttdoc\">16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00260\">fwd.hpp:260</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga667b2ece2b258be898812dc2177995d1\"><div class=\"ttname\"><a href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">glm::lowp_uint8_t</a></div><div class=\"ttdeci\">uint8 lowp_uint8_t</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00098\">fwd.hpp:98</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae978599c9711ac263ba732d4ac225b0e\"><div class=\"ttname\"><a href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">glm::highp_uint32_t</a></div><div class=\"ttdeci\">uint32 highp_uint32_t</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00128\">fwd.hpp:128</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa07c86650253672a19dbfb898f3265b8\"><div class=\"ttname\"><a href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">glm::fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; fmat3x3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00664\">fwd.hpp:664</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad38c544d332b8c4bd0b70b1bd9feccc2\"><div class=\"ttname\"><a href=\"a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2\">glm::mediump_f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, mediump &gt; mediump_f64mat3x4</div><div class=\"ttdoc\">Medium double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00765\">fwd.hpp:765</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga71cdb53801ed4c3aadb3603c04723210\"><div class=\"ttname\"><a href=\"a00304.html#ga71cdb53801ed4c3aadb3603c04723210\">glm::lowp_fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, lowp &gt; lowp_fmat2x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00631\">fwd.hpp:631</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabed3be8dfdc4a0df4bf3271dbd7344c4\"><div class=\"ttname\"><a href=\"a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4\">glm::lowp_u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, lowp &gt; lowp_u32vec1</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00364\">fwd.hpp:364</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaabf6cf90fd31efe25c94965507e98390\"><div class=\"ttname\"><a href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">glm::lowp_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, lowp &gt; lowp_mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00089_source.html#l00016\">matrix_float3x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab256cdab5eb582e426d749ae77b5b566\"><div class=\"ttname\"><a href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">glm::f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, defaultp &gt; f32mat2x3</div><div class=\"ttdoc\">Single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00703\">fwd.hpp:703</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga46a57f71e430637559097a732b550a7e\"><div class=\"ttname\"><a href=\"a00304.html#ga46a57f71e430637559097a732b550a7e\">glm::mediump_i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, mediump &gt; mediump_i32vec1</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00267\">fwd.hpp:267</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8a85a3d54a8a9e14fe7a1f96196c4f61\"><div class=\"ttname\"><a href=\"a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61\">glm::highp_u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, highp &gt; highp_u16vec4</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00357\">fwd.hpp:357</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae31ac3608cf643ceffd6554874bec4a0\"><div class=\"ttname\"><a href=\"a00304.html#gae31ac3608cf643ceffd6554874bec4a0\">glm::lowp_i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, lowp &gt; lowp_i32vec1</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00262\">fwd.hpp:262</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab0f7d875db5f3cc9f3168c5a0ed56437\"><div class=\"ttname\"><a href=\"a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437\">glm::lowp_i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, lowp &gt; lowp_i64vec1</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00282\">fwd.hpp:282</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0e35a565b9036bfc3989f5e23a0792e3\"><div class=\"ttname\"><a href=\"a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3\">glm::highp_u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, highp &gt; highp_u32vec1</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00374\">fwd.hpp:374</a></div></div>\n<div class=\"ttc\" id=\"a00266_html_gae8a1e14abae1387274f57741750c06a2\"><div class=\"ttname\"><a href=\"a00266.html#gae8a1e14abae1387274f57741750c06a2\">glm::highp_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, highp &gt; highp_bvec1</div><div class=\"ttdoc\">1 component vector of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00190_source.html#l00025\">vector_bool1_precision.hpp:25</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadff3608baa4b5bd3ed28f95c1c2c345d\"><div class=\"ttname\"><a href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">glm::mediump_int16</a></div><div class=\"ttdeci\">int16 mediump_int16</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00051\">fwd.hpp:51</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9df98857be695d5a30cb30f5bfa38a80\"><div class=\"ttname\"><a href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">glm::mediump_u16</a></div><div class=\"ttdeci\">uint16 mediump_u16</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00104\">fwd.hpp:104</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2b114a2f2af0fe1dfeb569c767822940\"><div class=\"ttname\"><a href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">glm::f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, defaultp &gt; f64quat</div><div class=\"ttdoc\">Double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00815\">fwd.hpp:815</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga5c6978d3ffba06738416a33083853fc0\"><div class=\"ttname\"><a href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">glm::mediump_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, mediump &gt; mediump_vec4</div><div class=\"ttdoc\">4 components vector of medium single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00213_source.html#l00022\">vector_float4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga461c4c7d0757404dd0dba931760b25cf\"><div class=\"ttname\"><a href=\"a00304.html#ga461c4c7d0757404dd0dba931760b25cf\">glm::mediump_f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, mediump &gt; mediump_f64vec3</div><div class=\"ttdoc\">Medium double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00493\">fwd.hpp:493</a></div></div>\n<div class=\"ttc\" id=\"a00249_html_ga1181459aa5d640a3ea43861b118f3f0b\"><div class=\"ttname\"><a href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">glm::dquat</a></div><div class=\"ttdeci\">qua&lt; double, defaultp &gt; dquat</div><div class=\"ttdoc\">Quaternion of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00128_source.html#l00035\">quaternion_double.hpp:35</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf09f3ca4b671a4a4f84505eb4cc865fd\"><div class=\"ttname\"><a href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">glm::u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, defaultp &gt; u64vec1</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00399\">fwd.hpp:399</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga322a7d7d2c2c68994dc872a33de63c61\"><div class=\"ttname\"><a href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">glm::int64_t</a></div><div class=\"ttdeci\">int64 int64_t</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00085\">fwd.hpp:85</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga29b349e037f0b24320b4548a143daee2\"><div class=\"ttname\"><a href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">glm::u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, defaultp &gt; u8vec1</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00339\">fwd.hpp:339</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d8c10949691b0fd990253476f47beb3\"><div class=\"ttname\"><a href=\"a00304.html#ga1d8c10949691b0fd990253476f47beb3\">glm::highp_i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, highp &gt; highp_i8vec1</div><div class=\"ttdoc\">High qualifier 8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00232\">fwd.hpp:232</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga20779a61de2fd526a17f12fe53ec46b1\"><div class=\"ttname\"><a href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">glm::u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, defaultp &gt; u8vec4</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00342\">fwd.hpp:342</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4bf09d8838a86866b39ee6e109341645\"><div class=\"ttname\"><a href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">glm::int8_t</a></div><div class=\"ttdeci\">int8 int8_t</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00043\">fwd.hpp:43</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga96faea43ac5f875d2d3ffbf8d213e3eb\"><div class=\"ttname\"><a href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">glm::i32</a></div><div class=\"ttdeci\">int32 i32</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00062\">fwd.hpp:62</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8a11ccd2e38f674bbf3c2d1afc232aee\"><div class=\"ttname\"><a href=\"a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee\">glm::mediump_u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, mediump &gt; mediump_u32vec1</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00369\">fwd.hpp:369</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9ec7c4c79e303c053e30729a95fb2c37\"><div class=\"ttname\"><a href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">glm::f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, defaultp &gt; f64mat2x2</div><div class=\"ttdoc\">Double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00780\">fwd.hpp:780</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d091b6abfba1772450e1745a06525bc\"><div class=\"ttname\"><a href=\"a00304.html#ga1d091b6abfba1772450e1745a06525bc\">glm::lowp_f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, lowp &gt; lowp_f32mat2x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00670\">fwd.hpp:670</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4e2e1debe022074ab224c9faf856d374\"><div class=\"ttname\"><a href=\"a00304.html#ga4e2e1debe022074ab224c9faf856d374\">glm::lowp_f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, lowp &gt; lowp_f32vec4</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00449\">fwd.hpp:449</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6ef77413883f48d6b53b4169b25edbd0\"><div class=\"ttname\"><a href=\"a00304.html#ga6ef77413883f48d6b53b4169b25edbd0\">glm::highp_fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, highp &gt; highp_fvec3</div><div class=\"ttdoc\">High Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00438\">fwd.hpp:438</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab0cecb80fd106bc369b9e46a165815ce\"><div class=\"ttname\"><a href=\"a00304.html#gab0cecb80fd106bc369b9e46a165815ce\">glm::lowp_f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, lowp &gt; lowp_f64mat4x2</div><div class=\"ttdoc\">Low double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00756\">fwd.hpp:756</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa6f526388c74a66b3d52315a14d434ae\"><div class=\"ttname\"><a href=\"a00304.html#gaa6f526388c74a66b3d52315a14d434ae\">glm::mediump_fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, mediump &gt; mediump_fmat3x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00644\">fwd.hpp:644</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabd2fda3cd208acf5a370ec9b5b3c58d4\"><div class=\"ttname\"><a href=\"a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4\">glm::highp_i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, highp &gt; highp_i64vec1</div><div class=\"ttdoc\">High qualifier 64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00292\">fwd.hpp:292</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4177a44206121dabc8c4ff1c0f544574\"><div class=\"ttname\"><a href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">glm::i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, defaultp &gt; i8vec4</div><div class=\"ttdoc\">8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00240\">fwd.hpp:240</a></div></div>\n<div class=\"ttc\" id=\"a00273_html_ga7e02566f2bd2caa68e61be45a477c77e\"><div class=\"ttname\"><a href=\"a00273.html#ga7e02566f2bd2caa68e61be45a477c77e\">glm::highp_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, highp &gt; highp_ivec1</div><div class=\"ttdoc\">1 component vector of signed integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00215_source.html#l00025\">vector_int1_precision.hpp:25</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga50c783c25082882ef00fe2e5cddba4aa\"><div class=\"ttname\"><a href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">glm::mediump_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, mediump &gt; mediump_bvec3</div><div class=\"ttdoc\">3 components vector of medium qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00194_source.html#l00022\">vector_bool3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga84ed04b4e0de18c977e932d617e7c223\"><div class=\"ttname\"><a href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">glm::highp_int32</a></div><div class=\"ttdeci\">int32 highp_int32</div><div class=\"ttdoc\">High qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00066\">fwd.hpp:66</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad4cc829ab1ad3e05ac0a24828a3c95cf\"><div class=\"ttname\"><a href=\"a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf\">glm::mediump_f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, mediump &gt; mediump_f32mat2x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00681\">fwd.hpp:681</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3a132bd05675c2e46556f67cf738600b\"><div class=\"ttname\"><a href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">glm::mediump_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, mediump &gt; mediump_dmat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00074_source.html#l00022\">matrix_double3x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab0eb2d65514ee3e49905aa2caad8c0ad\"><div class=\"ttname\"><a href=\"a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad\">glm::lowp_f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, lowp &gt; lowp_f64mat3x2</div><div class=\"ttdoc\">Low double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00753\">fwd.hpp:753</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gad941c947ad6cdd117a0e8554a4754983\"><div class=\"ttname\"><a href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">glm::mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, defaultp &gt; mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00094_source.html#l00015\">matrix_float4x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00271_html_ga645f53e6b8056609023a894b4e2beef4\"><div class=\"ttname\"><a href=\"a00271.html#ga645f53e6b8056609023a894b4e2beef4\">glm::mediump_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, mediump &gt; mediump_vec1</div><div class=\"ttdoc\">1 component vector of single-precision floating-point numbers using medium precision arithmetic in te...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00207_source.html#l00030\">vector_float1_precision.hpp:30</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7a6f1929464dcc680b16381a4ee5f2cf\"><div class=\"ttname\"><a href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">glm::highp_u32</a></div><div class=\"ttdeci\">uint32 highp_u32</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00119\">fwd.hpp:119</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga727675ac6b5d2fc699520e0059735e25\"><div class=\"ttname\"><a href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">glm::highp_i32</a></div><div class=\"ttdeci\">int32 highp_i32</div><div class=\"ttdoc\">High qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00061\">fwd.hpp:61</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga5abb4603dae0ce58c595e66d9123d812\"><div class=\"ttname\"><a href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">glm::ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, defaultp &gt; ivec4</div><div class=\"ttdoc\">4 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00220_source.html#l00015\">vector_int4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga15bca2b70917d9752231160d9da74b01\"><div class=\"ttname\"><a href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">glm::mediump_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, mediump &gt; mediump_mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00040\">matrix_float4x4_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3945dd6515d4498cb603e65ff867ab03\"><div class=\"ttname\"><a href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">glm::u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, defaultp &gt; u64vec4</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00402\">fwd.hpp:402</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga8433c6c1fdd80c0a83941d94aff73fa0\"><div class=\"ttname\"><a href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">glm::lowp_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, lowp &gt; lowp_ivec2</div><div class=\"ttdoc\">2 components vector of low qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00217_source.html#l00028\">vector_int2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga31c6ca0e074a44007f49a9a3720b18c8\"><div class=\"ttname\"><a href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">glm::f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, defaultp &gt; f32vec4</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00464\">fwd.hpp:464</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae3ab5719fc4c1e966631dbbcba8d412a\"><div class=\"ttname\"><a href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">glm::f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, defaultp &gt; f64mat2x3</div><div class=\"ttdoc\">Double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00783\">fwd.hpp:783</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga66edb8de17b9235029472f043ae107e9\"><div class=\"ttname\"><a href=\"a00304.html#ga66edb8de17b9235029472f043ae107e9\">glm::mediump_f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, mediump &gt; mediump_f64mat4x4</div><div class=\"ttdoc\">Medium double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00768\">fwd.hpp:768</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga51dc36a7719cb458fa5114831c20d64f\"><div class=\"ttname\"><a href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">glm::mediump_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, mediump &gt; mediump_dmat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00040\">matrix_double2x2_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa7f00459b9a2e5b2757e70afc0c189e1\"><div class=\"ttname\"><a href=\"a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1\">glm::lowp_u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, lowp &gt; lowp_u16vec4</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00347\">fwd.hpp:347</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaeebd7dd9f3e678691f8620241e5f9221\"><div class=\"ttname\"><a href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">glm::highp_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, highp &gt; highp_uvec4</div><div class=\"ttdoc\">4 components vector of high qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00233_source.html#l00016\">vector_uint4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga256b12b650c3f2fb86878fd1c5db8bc3\"><div class=\"ttname\"><a href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">glm::highp_uint32</a></div><div class=\"ttdeci\">uint32 highp_uint32</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00124\">fwd.hpp:124</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga766aed2871e6173a81011a877f398f04\"><div class=\"ttname\"><a href=\"a00304.html#ga766aed2871e6173a81011a877f398f04\">glm::lowp_f32mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, lowp &gt; lowp_f32mat4</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00542\">fwd.hpp:542</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2473d8bf3f4abf967c4d0e18175be6f7\"><div class=\"ttname\"><a href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">glm::f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, defaultp &gt; f64mat3x2</div><div class=\"ttdoc\">Double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00781\">fwd.hpp:781</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7812bf00676fb1a86dcd62cca354d2c7\"><div class=\"ttname\"><a href=\"a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7\">glm::mediump_float32</a></div><div class=\"ttdeci\">float mediump_float32</div><div class=\"ttdoc\">Medium 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00153\">fwd.hpp:153</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae627372cfd5f20dd87db490387b71195\"><div class=\"ttname\"><a href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">glm::u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, defaultp &gt; u32vec1</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00379\">fwd.hpp:379</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gafa3cdb8f24d09d761ec9ae2a4c7e5e21\"><div class=\"ttname\"><a href=\"a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21\">glm::lowp_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, lowp &gt; lowp_mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00095_source.html#l00016\">matrix_float4x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacfea053bd6bb3eddb996a4f94de22a3e\"><div class=\"ttname\"><a href=\"a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e\">glm::mediump_f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, mediump &gt; mediump_f64vec4</div><div class=\"ttdoc\">Medium double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00494\">fwd.hpp:494</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga916c1aed91cf91f7b41399ebe7c6e185\"><div class=\"ttname\"><a href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">glm::f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, defaultp &gt; f64mat3x3</div><div class=\"ttdoc\">Double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00784\">fwd.hpp:784</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac5a7f21136e0a78d0a1b9f60ef2f8aea\"><div class=\"ttname\"><a href=\"a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea\">glm::highp_float32</a></div><div class=\"ttdeci\">float highp_float32</div><div class=\"ttdoc\">High 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00154\">fwd.hpp:154</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga97432f9979e73e66567361fd01e4cffb\"><div class=\"ttname\"><a href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">glm::highp_uint8</a></div><div class=\"ttdeci\">uint8 highp_uint8</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00096\">fwd.hpp:96</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacb88796f2d08ef253d0345aff20c3aee\"><div class=\"ttname\"><a href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">glm::highp_i8</a></div><div class=\"ttdeci\">int8 highp_i8</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00033\">fwd.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga50265a202fbfe0a25fc70066c31d9336\"><div class=\"ttname\"><a href=\"a00304.html#ga50265a202fbfe0a25fc70066c31d9336\">glm::lowp_f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, lowp &gt; lowp_f64mat2x4</div><div class=\"ttdoc\">Low double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00752\">fwd.hpp:752</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gade8d1edfb23996ab6c622e65e3893271\"><div class=\"ttname\"><a href=\"a00304.html#gade8d1edfb23996ab6c622e65e3893271\">glm::lowp_f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, lowp &gt; lowp_f64mat3x4</div><div class=\"ttdoc\">Low double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00755\">fwd.hpp:755</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga868e8e4470a3ef97c7ee3032bf90dc79\"><div class=\"ttname\"><a href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">glm::lowp_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, lowp &gt; lowp_vec3</div><div class=\"ttdoc\">3 components vector of low single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00211_source.html#l00028\">vector_float3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga6454b3a26ea30f69de8e44c08a63d1b7\"><div class=\"ttname\"><a href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">glm::highp_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, highp &gt; highp_mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00093_source.html#l00028\">matrix_float3x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2dedee030500865267cd5851c00c139d\"><div class=\"ttname\"><a href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">glm::lowp_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, lowp &gt; lowp_mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00016\">matrix_float4x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacf1ded173e1e2d049c511d095b259e21\"><div class=\"ttname\"><a href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">glm::mediump_i8</a></div><div class=\"ttdeci\">int8 mediump_i8</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00032\">fwd.hpp:32</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga73c6abb280a45feeff60f9accaee91f3\"><div class=\"ttname\"><a href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">glm::highp_int64_t</a></div><div class=\"ttdeci\">int64 highp_int64_t</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00084\">fwd.hpp:84</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaee4da0e9fbd8cfa2f89cb80889719dc3\"><div class=\"ttname\"><a href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">glm::f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; f32mat4x4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00708\">fwd.hpp:708</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa4947bc8b47c72fceea9bda730ecf603\"><div class=\"ttname\"><a href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">glm::float32_t</a></div><div class=\"ttdeci\">float float32_t</div><div class=\"ttdoc\">Default 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00160\">fwd.hpp:160</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga04100c76f7d55a0dd0983ccf05142bff\"><div class=\"ttname\"><a href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">glm::f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; f32mat2x2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00700\">fwd.hpp:700</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab485c48f06a4fdd6b8d58d343bb49f3c\"><div class=\"ttname\"><a href=\"a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c\">glm::lowp_i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, lowp &gt; lowp_i64vec2</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00283\">fwd.hpp:283</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacc6bf0209dda0c7c14851a646071c974\"><div class=\"ttname\"><a href=\"a00304.html#gacc6bf0209dda0c7c14851a646071c974\">glm::lowp_f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, lowp &gt; lowp_f32mat2x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00672\">fwd.hpp:672</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaee663ff64429443ab07a5327074192f6\"><div class=\"ttname\"><a href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">glm::highp_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, highp &gt; highp_bvec4</div><div class=\"ttdoc\">4 components vector of high qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00196_source.html#l00016\">vector_bool4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2171d9dc1fefb1c82e2817f45b622eac\"><div class=\"ttname\"><a href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">glm::uint32_t</a></div><div class=\"ttdeci\">uint32 uint32_t</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00129\">fwd.hpp:129</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga24f9ef3263b1638564713892cc37981f\"><div class=\"ttname\"><a href=\"a00304.html#ga24f9ef3263b1638564713892cc37981f\">glm::highp_f32mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, highp &gt; highp_f32mat3</div><div class=\"ttdoc\">High single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00549\">fwd.hpp:549</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga84d88a6e3a54ccd2b67e195af4a4c23e\"><div class=\"ttname\"><a href=\"a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e\">glm::mediump_f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, mediump &gt; mediump_f64mat3x3</div><div class=\"ttdoc\">Medium double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00764\">fwd.hpp:764</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga0b6123e03653cc1bbe366fc55238a934\"><div class=\"ttname\"><a href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">glm::bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, defaultp &gt; bvec2</div><div class=\"ttdoc\">2 components vector of boolean. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00191_source.html#l00015\">vector_bool2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gac215a35481a6597d1bf622a382e9d6e2\"><div class=\"ttname\"><a href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, defaultp &gt; vec4</div><div class=\"ttdoc\">4 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00212_source.html#l00015\">vector_float4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaecc7082561fc9028b844b6cf3d305d36\"><div class=\"ttname\"><a href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">glm::u8</a></div><div class=\"ttdeci\">uint8 u8</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00092\">fwd.hpp:92</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga31e070ea3bdee623e6e18a61ba5718b1\"><div class=\"ttname\"><a href=\"a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1\">glm::highp_i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, highp &gt; highp_i32vec3</div><div class=\"ttdoc\">High qualifier 32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00274\">fwd.hpp:274</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaacdc525d6f7bddb3ae95d5c311bd06a1\"><div class=\"ttname\"><a href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">glm::float32</a></div><div class=\"ttdeci\">float float32</div><div class=\"ttdoc\">Single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00155\">fwd.hpp:155</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga713c796c54875cf4092d42ff9d9096b0\"><div class=\"ttname\"><a href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">glm::fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, defaultp &gt; fvec4</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00444\">fwd.hpp:444</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6a9d71cc62745302f70422b7dc98755c\"><div class=\"ttname\"><a href=\"a00304.html#ga6a9d71cc62745302f70422b7dc98755c\">glm::highp_i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, highp &gt; highp_i32vec1</div><div class=\"ttdoc\">High qualifier 32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00272\">fwd.hpp:272</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga86d6d4dbad92ffdcc759773340e15a97\"><div class=\"ttname\"><a href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">glm::highp_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, highp &gt; highp_dmat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00028\">matrix_double3x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4187f89f196505b40e63f516139511e5\"><div class=\"ttname\"><a href=\"a00304.html#ga4187f89f196505b40e63f516139511e5\">glm::lowp_f32mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, lowp &gt; lowp_f32mat3</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00541\">fwd.hpp:541</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga08c05ba8ffb19f5d14ab584e1e9e9ee5\"><div class=\"ttname\"><a href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">glm::u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, defaultp &gt; u16vec1</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00359\">fwd.hpp:359</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gade27f8324a16626cbce5d3e7da66b070\"><div class=\"ttname\"><a href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">glm::lowp_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, lowp &gt; lowp_mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00087_source.html#l00016\">matrix_float2x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00268_html_ga6221af17edc2d4477a4583d2cd53e569\"><div class=\"ttname\"><a href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">glm::dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, defaultp &gt; dvec1</div><div class=\"ttdoc\">1 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00198_source.html#l00028\">vector_double1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7e80d927ff0a3861ced68dfff8a4020b\"><div class=\"ttname\"><a href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">glm::i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, defaultp &gt; i8vec1</div><div class=\"ttdoc\">8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00237\">fwd.hpp:237</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga13a221b910aa9eb1b04ca1c86e81015a\"><div class=\"ttname\"><a href=\"a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a\">glm::mediump_i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, mediump &gt; mediump_i32vec3</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00269\">fwd.hpp:269</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b44026374982dcd1e52d22bac99247e\"><div class=\"ttname\"><a href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">glm::i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, defaultp &gt; i32vec2</div><div class=\"ttdoc\">32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00278\">fwd.hpp:278</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga1e743764869efa9223c2bcefccedaddc\"><div class=\"ttname\"><a href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">glm::mediump_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, mediump &gt; mediump_bvec2</div><div class=\"ttdoc\">2 components vector of medium qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00192_source.html#l00022\">vector_bool2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7cac84b520a6b57f2fbd880d3d63c51b\"><div class=\"ttname\"><a href=\"a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b\">glm::lowp_i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, lowp &gt; lowp_i16vec2</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00243\">fwd.hpp:243</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gabc61976261c406520c7a8e4d946dc3f0\"><div class=\"ttname\"><a href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">glm::mediump_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, mediump &gt; mediump_vec2</div><div class=\"ttdoc\">2 components vector of medium single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00209_source.html#l00022\">vector_float2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga73a08ef5a74798f3a1a99250b5f86a7d\"><div class=\"ttname\"><a href=\"a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d\">glm::mediump_u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, mediump &gt; mediump_u64vec2</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00390\">fwd.hpp:390</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9910927f3a4d1addb3da6a82542a8287\"><div class=\"ttname\"><a href=\"a00304.html#ga9910927f3a4d1addb3da6a82542a8287\">glm::lowp_u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, lowp &gt; lowp_u8vec4</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00327\">fwd.hpp:327</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaab691ae40c37976d268d8cac0096e0e1\"><div class=\"ttname\"><a href=\"a00304.html#gaab691ae40c37976d268d8cac0096e0e1\">glm::highp_f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, highp &gt; highp_f32mat3x3</div><div class=\"ttdoc\">High single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00694\">fwd.hpp:694</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8408cb76b6550ff01fa0a3024e7b68d2\"><div class=\"ttname\"><a href=\"a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2\">glm::highp_u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, highp &gt; highp_u8vec1</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00334\">fwd.hpp:334</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac4e00a26a2adb5f2c0a7096810df29e5\"><div class=\"ttname\"><a href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">glm::highp_uint8_t</a></div><div class=\"ttdeci\">uint8 highp_uint8_t</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00100\">fwd.hpp:100</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5d43ee8b5dbaa06c327b03b83682598a\"><div class=\"ttname\"><a href=\"a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a\">glm::mediump_u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, mediump &gt; mediump_u32vec4</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00372\">fwd.hpp:372</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae5eb02d92b7d4605a4b7f37ae5cb2968\"><div class=\"ttname\"><a href=\"a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968\">glm::highp_f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, highp &gt; highp_f32mat2x2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00690\">fwd.hpp:690</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga61185c44c8cc0b25d9a0f67d8a267444\"><div class=\"ttname\"><a href=\"a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444\">glm::highp_f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, highp &gt; highp_f64vec4</div><div class=\"ttdoc\">High double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00499\">fwd.hpp:499</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae367ea93c4ad8a7c101dd27b8b2b04ce\"><div class=\"ttname\"><a href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">glm::highp_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, highp &gt; highp_dmat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00046\">matrix_double3x3_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga150dc47e31c6b8cf8461803c8d56f7bd\"><div class=\"ttname\"><a href=\"a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd\">glm::lowp_u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, lowp &gt; lowp_u8vec3</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00326\">fwd.hpp:326</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6906e1ef0b34064b4b675489c5c38725\"><div class=\"ttname\"><a href=\"a00304.html#ga6906e1ef0b34064b4b675489c5c38725\">glm::highp_f32</a></div><div class=\"ttdeci\">float highp_f32</div><div class=\"ttdoc\">High 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00149\">fwd.hpp:149</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga30652709815ad9404272a31957daa59e\"><div class=\"ttname\"><a href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">glm::mediump_uint64</a></div><div class=\"ttdeci\">uint64 mediump_uint64</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00137\">fwd.hpp:137</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2c71c8bd9e2fe7d2e93ca250d8b6157f\"><div class=\"ttname\"><a href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">glm::highp_int32_t</a></div><div class=\"ttdeci\">int32 highp_int32_t</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00070\">fwd.hpp:70</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga961ccb34cd1a5654c772c8709e001dc5\"><div class=\"ttname\"><a href=\"a00304.html#ga961ccb34cd1a5654c772c8709e001dc5\">glm::lowp_f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, lowp &gt; lowp_f32mat2x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00671\">fwd.hpp:671</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa7a1ddca75c5f629173bf4772db7a635\"><div class=\"ttname\"><a href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">glm::f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, defaultp &gt; f64vec3</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00503\">fwd.hpp:503</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac9ba20234b0c3751d45ce575fc71e551\"><div class=\"ttname\"><a href=\"a00304.html#gac9ba20234b0c3751d45ce575fc71e551\">glm::mediump_u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, mediump &gt; mediump_u16vec3</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00351\">fwd.hpp:351</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac87278e0c702ba8afff76316d4eeb769\"><div class=\"ttname\"><a href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">glm::f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, defaultp &gt; f64mat2x4</div><div class=\"ttdoc\">Double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00786\">fwd.hpp:786</a></div></div>\n<div class=\"ttc\" id=\"a00250_html_gacdf73b1f7fd8f5a0c79a3934e99c1a14\"><div class=\"ttname\"><a href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">glm::mediump_dquat</a></div><div class=\"ttdeci\">qua&lt; double, mediump &gt; mediump_dquat</div><div class=\"ttdoc\">Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00129_source.html#l00033\">quaternion_double_precision.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga856f3905ee7cc2e4890a8a1d56c150be\"><div class=\"ttname\"><a href=\"a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be\">glm::f32mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; f32mat3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00553\">fwd.hpp:553</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4fd527644cccbca4cb205320eab026f3\"><div class=\"ttname\"><a href=\"a00304.html#ga4fd527644cccbca4cb205320eab026f3\">glm::mediump_f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, mediump &gt; mediump_f64mat2x2</div><div class=\"ttdoc\">Medium double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00760\">fwd.hpp:760</a></div></div>\n<div class=\"ttc\" id=\"a00269_html_ga77c22c4426da3a6865c88d3fc907e3fe\"><div class=\"ttname\"><a href=\"a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe\">glm::highp_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, highp &gt; highp_dvec1</div><div class=\"ttdoc\">1 component vector of double-precision floating-point numbers using high precision arithmetic in term...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00199_source.html#l00027\">vector_double1_precision.hpp:27</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gab91887d7565059dac640e3a1921c914a\"><div class=\"ttname\"><a href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">glm::mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, defaultp &gt; mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00090_source.html#l00015\">matrix_float3x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2af9490085ae3bdf36a544e9dd073610\"><div class=\"ttname\"><a href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">glm::mediump_u64</a></div><div class=\"ttdeci\">uint64 mediump_u64</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00132\">fwd.hpp:132</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gab8531bc3f269aa45835cd6e1972b7fc7\"><div class=\"ttname\"><a href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">glm::mediump_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, mediump &gt; mediump_mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00022\">matrix_float4x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7a18659438828f91ccca28f1a1e067b4\"><div class=\"ttname\"><a href=\"a00304.html#ga7a18659438828f91ccca28f1a1e067b4\">glm::highp_i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, highp &gt; highp_i16vec4</div><div class=\"ttdoc\">High qualifier 16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00255\">fwd.hpp:255</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5803cb9ae26399762d8bba9e0b2fc09f\"><div class=\"ttname\"><a href=\"a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f\">glm::lowp_fmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, lowp &gt; lowp_fmat4</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00526\">fwd.hpp:526</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga94f74851fce338549c705b5f0d601c4f\"><div class=\"ttname\"><a href=\"a00304.html#ga94f74851fce338549c705b5f0d601c4f\">glm::mediump_u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, mediump &gt; mediump_u32vec2</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00370\">fwd.hpp:370</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga41bdabea6e589029659331ba47eb78c1\"><div class=\"ttname\"><a href=\"a00304.html#ga41bdabea6e589029659331ba47eb78c1\">glm::highp_u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, highp &gt; highp_u64vec3</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00396\">fwd.hpp:396</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga2f6d9ec3ae14813ade37d6aee3715fdb\"><div class=\"ttname\"><a href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">glm::uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, defaultp &gt; uvec2</div><div class=\"ttdoc\">2 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00228_source.html#l00015\">vector_uint2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga504ce1631cb2ac02fcf1d44d8c2aa126\"><div class=\"ttname\"><a href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">glm::lowp_u16</a></div><div class=\"ttdeci\">uint16 lowp_u16</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00103\">fwd.hpp:103</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab69ef9cbc2a9214bf5596c528c801b72\"><div class=\"ttname\"><a href=\"a00304.html#gab69ef9cbc2a9214bf5596c528c801b72\">glm::lowp_i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, lowp &gt; lowp_i16vec3</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00244\">fwd.hpp:244</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac0253db6c3d3bae1f591676307a9dd8c\"><div class=\"ttname\"><a href=\"a00304.html#gac0253db6c3d3bae1f591676307a9dd8c\">glm::lowp_u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, lowp &gt; lowp_u16vec3</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00346\">fwd.hpp:346</a></div></div>\n<div class=\"ttc\" id=\"a00276_html_gac3bdd96183d23876c58a1424585fefe7\"><div class=\"ttname\"><a href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">glm::uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, defaultp &gt; uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00226_source.html#l00028\">vector_uint1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf739a2cd7b81783a43148b53e40d983b\"><div class=\"ttname\"><a href=\"a00304.html#gaf739a2cd7b81783a43148b53e40d983b\">glm::lowp_f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, lowp &gt; lowp_f32vec3</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00448\">fwd.hpp:448</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabf28443ce0cc0959077ec39b21f32c39\"><div class=\"ttname\"><a href=\"a00304.html#gabf28443ce0cc0959077ec39b21f32c39\">glm::highp_fmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, highp &gt; highp_fmat4</div><div class=\"ttdoc\">High single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00534\">fwd.hpp:534</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga83079315e230e8f39728f4bf0d2f9a9b\"><div class=\"ttname\"><a href=\"a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b\">glm::lowp_fmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, lowp &gt; lowp_fmat3</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00525\">fwd.hpp:525</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0336abc2604dd2c20c30e036454b64f8\"><div class=\"ttname\"><a href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">glm::highp_i16</a></div><div class=\"ttdeci\">int16 highp_i16</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00047\">fwd.hpp:47</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa40c03d52dbfbfaf03e75773b9606ff3\"><div class=\"ttname\"><a href=\"a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3\">glm::mediump_f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, mediump &gt; mediump_f32quat</div><div class=\"ttdoc\">Medium single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00803\">fwd.hpp:803</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad0549c902a96a7164e4ac858d5f39dbf\"><div class=\"ttname\"><a href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">glm::highp_int8</a></div><div class=\"ttdeci\">int8 highp_int8</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00038\">fwd.hpp:38</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae52e2b7077a9ff928a06ab5ce600b81e\"><div class=\"ttname\"><a href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">glm::f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, defaultp &gt; f64mat4x4</div><div class=\"ttdoc\">Double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00788\">fwd.hpp:788</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4295048a78bdf46b8a7de77ec665b497\"><div class=\"ttname\"><a href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">glm::fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, defaultp &gt; fmat4x3</div><div class=\"ttdoc\">Single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00665\">fwd.hpp:665</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaab217601c74974a84acbca428123ecf7\"><div class=\"ttname\"><a href=\"a00304.html#gaab217601c74974a84acbca428123ecf7\">glm::lowp_fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, lowp &gt; lowp_fmat2x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00632\">fwd.hpp:632</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga609bf0ace941d6ab1bb2f9522a04e546\"><div class=\"ttname\"><a href=\"a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546\">glm::highp_f64mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, highp &gt; highp_f64mat3</div><div class=\"ttdoc\">High double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00581\">fwd.hpp:581</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6dd1c1618378c6f94d522a61c28773c9\"><div class=\"ttname\"><a href=\"a00304.html#ga6dd1c1618378c6f94d522a61c28773c9\">glm::mediump_i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, mediump &gt; mediump_i8vec3</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00229\">fwd.hpp:229</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab1b1c9e8667902b78b2c330e4d383a61\"><div class=\"ttname\"><a href=\"a00304.html#gab1b1c9e8667902b78b2c330e4d383a61\">glm::highp_f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, highp &gt; highp_f32vec1</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00456\">fwd.hpp:456</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae2f43ace6b5b33ab49516d9e40af1845\"><div class=\"ttname\"><a href=\"a00304.html#gae2f43ace6b5b33ab49516d9e40af1845\">glm::lowp_i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, lowp &gt; lowp_i8vec3</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00224\">fwd.hpp:224</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga47bd2aae4701ee2fc865674a9df3d7a6\"><div class=\"ttname\"><a href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">glm::mediump_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, mediump &gt; mediump_dmat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00040\">matrix_double3x3_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae731613b25db3a5ef5a05d21e57a57d3\"><div class=\"ttname\"><a href=\"a00304.html#gae731613b25db3a5ef5a05d21e57a57d3\">glm::lowp_f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, lowp &gt; lowp_f64mat4x3</div><div class=\"ttdoc\">Low double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00757\">fwd.hpp:757</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4f15b41aa24b11cc42ad5798c04a2325\"><div class=\"ttname\"><a href=\"a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325\">glm::highp_u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, highp &gt; highp_u64vec4</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00397\">fwd.hpp:397</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga5aae49834d02732942f44e61d7bce136\"><div class=\"ttname\"><a href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">glm::mediump_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, mediump &gt; mediump_mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00022\">matrix_float3x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga89930533646b30d021759298aa6bf04a\"><div class=\"ttname\"><a href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">glm::fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, defaultp &gt; fvec3</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00443\">fwd.hpp:443</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2996630ba7b10535af8e065cf326f761\"><div class=\"ttname\"><a href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">glm::i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, defaultp &gt; i16vec2</div><div class=\"ttdoc\">16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00258\">fwd.hpp:258</a></div></div>\n<div class=\"ttc\" id=\"a00266_html_ga7b4ccb989ba179fa44f7b0879c782621\"><div class=\"ttname\"><a href=\"a00266.html#ga7b4ccb989ba179fa44f7b0879c782621\">glm::mediump_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, mediump &gt; mediump_bvec1</div><div class=\"ttdoc\">1 component vector of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00190_source.html#l00028\">vector_bool1_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga708bc5b91bbfedd21debac8dcf2a64cd\"><div class=\"ttname\"><a href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">glm::lowp_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, lowp &gt; lowp_dmat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00016\">matrix_double4x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga6543eeeb64f48d79a0b96484308c50f0\"><div class=\"ttname\"><a href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">glm::highp_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, highp &gt; highp_dmat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00074_source.html#l00028\">matrix_double3x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga239b96198771b7add8eea7e6b59840c0\"><div class=\"ttname\"><a href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">glm::f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, defaultp &gt; f32mat4x3</div><div class=\"ttdoc\">Single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00705\">fwd.hpp:705</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab12383ed6ac7595ed6fde4d266c58425\"><div class=\"ttname\"><a href=\"a00304.html#gab12383ed6ac7595ed6fde4d266c58425\">glm::f32mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; f32mat2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00552\">fwd.hpp:552</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga35223623e9ccebd8a281873b71b7d213\"><div class=\"ttname\"><a href=\"a00304.html#ga35223623e9ccebd8a281873b71b7d213\">glm::mediump_fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, mediump &gt; mediump_fmat2x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00642\">fwd.hpp:642</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga429c201b3e92c90b4ef4356f2be52ee1\"><div class=\"ttname\"><a href=\"a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1\">glm::mediump_u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, mediump &gt; mediump_u16vec2</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00350\">fwd.hpp:350</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4143d129898f91545948c46859adce44\"><div class=\"ttname\"><a href=\"a00304.html#ga4143d129898f91545948c46859adce44\">glm::lowp_f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, lowp &gt; lowp_f32mat4x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00678\">fwd.hpp:678</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga752ee45136011301b64afd8c310c47a4\"><div class=\"ttname\"><a href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">glm::lowp_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, lowp &gt; lowp_uvec2</div><div class=\"ttdoc\">2 components vector of low qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00229_source.html#l00028\">vector_uint2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga6271ebc85ed778ccc15458c3d86fc854\"><div class=\"ttname\"><a href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">glm::lowp_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, lowp &gt; lowp_mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00016\">matrix_float3x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae6f63fa38635431e51a8f2602f15c566\"><div class=\"ttname\"><a href=\"a00304.html#gae6f63fa38635431e51a8f2602f15c566\">glm::lowp_u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, lowp &gt; lowp_u8vec2</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00325\">fwd.hpp:325</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga108086730d086b7f6f7a033955dfb9c3\"><div class=\"ttname\"><a href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">glm::lowp_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, lowp &gt; lowp_dvec2</div><div class=\"ttdoc\">2 components vector of low double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00201_source.html#l00028\">vector_double2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad35fb67eb1d03c5a514f0bd7aed1c776\"><div class=\"ttname\"><a href=\"a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776\">glm::mediump_f64mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, mediump &gt; mediump_f64mat3</div><div class=\"ttdoc\">Medium double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00577\">fwd.hpp:577</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga392b673fd10847bfb78fb808c6cf8ff7\"><div class=\"ttname\"><a href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">glm::lowp_i16</a></div><div class=\"ttdeci\">int16 lowp_i16</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00045\">fwd.hpp:45</a></div></div>\n<div class=\"ttc\" id=\"a00270_html_gadfc071d934d8dae7955a1d530a3cf656\"><div class=\"ttname\"><a href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">glm::vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, defaultp &gt; vec1</div><div class=\"ttdoc\">1 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00206_source.html#l00028\">vector_float1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga83b7df38feefbb357f3673d950fafef7\"><div class=\"ttname\"><a href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">glm::mediump_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, mediump &gt; mediump_uvec3</div><div class=\"ttdoc\">3 components vector of medium qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00231_source.html#l00022\">vector_uint3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga961fac2a885907ffcf4d40daac6615c5\"><div class=\"ttname\"><a href=\"a00304.html#ga961fac2a885907ffcf4d40daac6615c5\">glm::highp_fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, highp &gt; highp_fmat3x4</div><div class=\"ttdoc\">High single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00655\">fwd.hpp:655</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga728366fef72cd96f0a5fa6429f05469e\"><div class=\"ttname\"><a href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">glm::float64_t</a></div><div class=\"ttdeci\">double float64_t</div><div class=\"ttdoc\">Default 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00176\">fwd.hpp:176</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga09a2374b725c4246d263ee36fb66434c\"><div class=\"ttname\"><a href=\"a00304.html#ga09a2374b725c4246d263ee36fb66434c\">glm::highp_f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, highp &gt; highp_f64mat4x4</div><div class=\"ttdoc\">High double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00778\">fwd.hpp:778</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga4d5a0055544a516237dcdace049b143d\"><div class=\"ttname\"><a href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">glm::highp_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, highp &gt; highp_mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00028\">matrix_float2x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gade108f16633cf95fa500b5b8c36c8b00\"><div class=\"ttname\"><a href=\"a00304.html#gade108f16633cf95fa500b5b8c36c8b00\">glm::mediump_f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, mediump &gt; mediump_f32mat4x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00687\">fwd.hpp:687</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga698e36b01167fc0f037889334dce8def\"><div class=\"ttname\"><a href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">glm::lowp_int16</a></div><div class=\"ttdeci\">int16 lowp_int16</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00050\">fwd.hpp:50</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gac1a86a75b3c68ebb704d7094043669d6\"><div class=\"ttname\"><a href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">glm::lowp_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, lowp &gt; lowp_ivec3</div><div class=\"ttdoc\">3 components vector of low qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00219_source.html#l00028\">vector_int3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga80823dfad5dba98512c76af498343847\"><div class=\"ttname\"><a href=\"a00304.html#ga80823dfad5dba98512c76af498343847\">glm::mediump_fmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, mediump &gt; mediump_fmat3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00529\">fwd.hpp:529</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaf650bc667bf2a0e496b5a9182bc8d378\"><div class=\"ttname\"><a href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">glm::mediump_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, mediump &gt; mediump_dmat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00022\">matrix_double4x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf1b712b97b2322685fbbed28febe5f84\"><div class=\"ttname\"><a href=\"a00304.html#gaf1b712b97b2322685fbbed28febe5f84\">glm::highp_f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, highp &gt; highp_f32mat4x4</div><div class=\"ttdoc\">High single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00698\">fwd.hpp:698</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaebf341fc4a5be233f7dde962c2e33847\"><div class=\"ttname\"><a href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">glm::lowp_int64_t</a></div><div class=\"ttdeci\">int64 lowp_int64_t</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00082\">fwd.hpp:82</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga27fc23da61859cd6356326c5f1c796de\"><div class=\"ttname\"><a href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">glm::lowp_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, lowp &gt; lowp_ivec4</div><div class=\"ttdoc\">4 components vector of low qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00221_source.html#l00028\">vector_int4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga91f91f411080c37730856ff5887f5bcf\"><div class=\"ttname\"><a href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">glm::uint16_t</a></div><div class=\"ttdeci\">uint16 uint16_t</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00115\">fwd.hpp:115</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"><div class=\"ttname\"><a href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">glm::lowp_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, lowp &gt; lowp_uvec4</div><div class=\"ttdoc\">4 components vector of low qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00233_source.html#l00028\">vector_uint4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga670ea1b0a1172bc73b1d7c1e0c26cce2\"><div class=\"ttname\"><a href=\"a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2\">glm::highp_f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, highp &gt; highp_f64vec2</div><div class=\"ttdoc\">High double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00497\">fwd.hpp:497</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga581485db4ba6ddb501505ee711fd8e42\"><div class=\"ttname\"><a href=\"a00304.html#ga581485db4ba6ddb501505ee711fd8e42\">glm::lowp_u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, lowp &gt; lowp_u64vec2</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00385\">fwd.hpp:385</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga253d453c20e037730023fea0215cb6f6\"><div class=\"ttname\"><a href=\"a00304.html#ga253d453c20e037730023fea0215cb6f6\">glm::fmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; fmat3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00537\">fwd.hpp:537</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaaab39454f56cf9fc6d940358ce5e6a0f\"><div class=\"ttname\"><a href=\"a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f\">glm::mediump_f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, mediump &gt; mediump_f32mat3x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00683\">fwd.hpp:683</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga970cb3306be25a5ca5db5a9456831228\"><div class=\"ttname\"><a href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">glm::dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, defaultp &gt; dmat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00071_source.html#l00015\">matrix_double3x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga6f40aa56265b4b0ccad41b86802efe33\"><div class=\"ttname\"><a href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">glm::dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, defaultp &gt; dmat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00071_source.html#l00020\">matrix_double3x3.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae6f3fcb702a666de07650c149cfa845a\"><div class=\"ttname\"><a href=\"a00304.html#gae6f3fcb702a666de07650c149cfa845a\">glm::lowp_f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, lowp &gt; lowp_f32mat4x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00676\">fwd.hpp:676</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga864aabca5f3296e176e0c3ed9cc16b02\"><div class=\"ttname\"><a href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">glm::lowp_int32</a></div><div class=\"ttdeci\">int32 lowp_int32</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00064\">fwd.hpp:64</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabf1f16c5ab8cb0484bd1e846ae4368f1\"><div class=\"ttname\"><a href=\"a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1\">glm::mediump_i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, mediump &gt; mediump_i64vec4</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00290\">fwd.hpp:290</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga9f7b9712373ff4342d9114619b55f5e3\"><div class=\"ttname\"><a href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">glm::bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, defaultp &gt; bvec4</div><div class=\"ttdoc\">4 components vector of boolean. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00195_source.html#l00015\">vector_bool4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28d97808322d3c92186e4a0c067d7e8e\"><div class=\"ttname\"><a href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">glm::uint8_t</a></div><div class=\"ttdeci\">uint8 uint8_t</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00101\">fwd.hpp:101</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga85e8893f4ae3630065690a9000c0c483\"><div class=\"ttname\"><a href=\"a00304.html#ga85e8893f4ae3630065690a9000c0c483\">glm::mediump_i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, mediump &gt; mediump_i8vec1</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00227\">fwd.hpp:227</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga26fc7ced1ad7ca5024f1c973c8dc9180\"><div class=\"ttname\"><a href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">glm::mediump_int32_t</a></div><div class=\"ttdeci\">int32 mediump_int32_t</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00069\">fwd.hpp:69</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga43ef60e4d996db15c9c8f069a96ff763\"><div class=\"ttname\"><a href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">glm::mediump_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, mediump &gt; mediump_dmat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00078_source.html#l00022\">matrix_double4x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5376ef18dca9d248897c3363ef5a06b2\"><div class=\"ttname\"><a href=\"a00304.html#ga5376ef18dca9d248897c3363ef5a06b2\">glm::highp_float32_t</a></div><div class=\"ttdeci\">float highp_float32_t</div><div class=\"ttdoc\">High 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00159\">fwd.hpp:159</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga65261fa8a21045c8646ddff114a56174\"><div class=\"ttname\"><a href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">glm::f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; f32mat3x3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00704\">fwd.hpp:704</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga118d24a3d12c034e7cccef7bf2f01b8a\"><div class=\"ttname\"><a href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">glm::highp_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, highp &gt; highp_dmat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00046\">matrix_double4x4_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd1259f3a9e8d2a9df5be2d74322ef9c\"><div class=\"ttname\"><a href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">glm::highp_u8</a></div><div class=\"ttdeci\">uint8 highp_u8</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00091\">fwd.hpp:91</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gad4689ec33bc2c26e10132b174b49001a\"><div class=\"ttname\"><a href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">glm::highp_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, highp &gt; highp_dmat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00066_source.html#l00028\">matrix_double2x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1fa92a233b9110861cdbc8c2ccf0b5a3\"><div class=\"ttname\"><a href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">glm::mediump_uint8</a></div><div class=\"ttdeci\">uint8 mediump_uint8</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00095\">fwd.hpp:95</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga076961cf2d120c7168b957cb2ed107b3\"><div class=\"ttname\"><a href=\"a00304.html#ga076961cf2d120c7168b957cb2ed107b3\">glm::highp_fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, highp &gt; highp_fmat4x2</div><div class=\"ttdoc\">High single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00656\">fwd.hpp:656</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0b8ebd4262331e139ff257d7cf2a4b77\"><div class=\"ttname\"><a href=\"a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77\">glm::highp_f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, highp &gt; highp_f32vec2</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00457\">fwd.hpp:457</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga685bda24922d112786af385deb4deb43\"><div class=\"ttname\"><a href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">glm::mediump_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, mediump &gt; mediump_dmat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00068_source.html#l00022\">matrix_double2x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga21dbd1f987775d7cc7607c139531c7e6\"><div class=\"ttname\"><a href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">glm::dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, defaultp &gt; dmat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00063_source.html#l00020\">matrix_double2x2.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gad281decae52948b82feb3a9db8f63a7b\"><div class=\"ttname\"><a href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">glm::highp_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, highp &gt; highp_vec4</div><div class=\"ttdoc\">4 components vector of high single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00213_source.html#l00016\">vector_float4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac3bc41bcac61d1ba8f02a6f68ce23f64\"><div class=\"ttname\"><a href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">glm::mediump_int64_t</a></div><div class=\"ttdeci\">int64 mediump_int64_t</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00083\">fwd.hpp:83</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa4a8682bec7ec8af666ef87fae38d5d1\"><div class=\"ttname\"><a href=\"a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1\">glm::lowp_u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, lowp &gt; lowp_u64vec3</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00386\">fwd.hpp:386</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gad5a6484b983b74f9d801cab8bc4e6a10\"><div class=\"ttname\"><a href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">glm::dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, defaultp &gt; dmat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00079_source.html#l00015\">matrix_double4x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00266_html_ga24a3d364e2ddd444f5b9e7975bbef8f9\"><div class=\"ttname\"><a href=\"a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9\">glm::lowp_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, lowp &gt; lowp_bvec1</div><div class=\"ttdoc\">1 component vector of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00190_source.html#l00031\">vector_bool1_precision.hpp:31</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga773ea237a051827cfc20de960bc73ff0\"><div class=\"ttname\"><a href=\"a00304.html#ga773ea237a051827cfc20de960bc73ff0\">glm::highp_f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, highp &gt; highp_f64mat2x2</div><div class=\"ttdoc\">High double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00770\">fwd.hpp:770</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf14d7a50502464e7cbfa074f24684cb1\"><div class=\"ttname\"><a href=\"a00304.html#gaf14d7a50502464e7cbfa074f24684cb1\">glm::highp_u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, highp &gt; highp_u32vec3</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00376\">fwd.hpp:376</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaedb70027d89a0a405046aefda4eabaa6\"><div class=\"ttname\"><a href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">glm::highp_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, highp &gt; highp_bvec3</div><div class=\"ttdoc\">3 components vector of high qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00194_source.html#l00016\">vector_bool3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1085c50dd8fbeb5e7e609b1c127492a5\"><div class=\"ttname\"><a href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">glm::highp_int8_t</a></div><div class=\"ttdeci\">int8 highp_int8_t</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00042\">fwd.hpp:42</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa3ba60ef8f69c6aeb1629594eaa95347\"><div class=\"ttname\"><a href=\"a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347\">glm::lowp_f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, lowp &gt; lowp_f32quat</div><div class=\"ttdoc\">Low single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00802\">fwd.hpp:802</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac9b2eb4296ffe50a32eacca9ed932c08\"><div class=\"ttname\"><a href=\"a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08\">glm::lowp_i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, lowp &gt; lowp_i32vec4</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00265\">fwd.hpp:265</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga70fdfcc1fd38084bde83c3f06a8b9f19\"><div class=\"ttname\"><a href=\"a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19\">glm::highp_i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, highp &gt; highp_i16vec1</div><div class=\"ttdoc\">High qualifier 16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00252\">fwd.hpp:252</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac2f5263708ac847b361a9841e74ddf9f\"><div class=\"ttname\"><a href=\"a00304.html#gac2f5263708ac847b361a9841e74ddf9f\">glm::lowp_fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, lowp &gt; lowp_fmat4x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00638\">fwd.hpp:638</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"><div class=\"ttname\"><a href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">glm::lowp_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, lowp &gt; lowp_dmat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00078_source.html#l00016\">matrix_double4x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1320a08e14fdff3821241eefab6947e9\"><div class=\"ttname\"><a href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">glm::f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, defaultp &gt; f32mat3x2</div><div class=\"ttdoc\">Single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00701\">fwd.hpp:701</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga841211b641cff1fcf861bdb14e5e4abc\"><div class=\"ttname\"><a href=\"a00304.html#ga841211b641cff1fcf861bdb14e5e4abc\">glm::lowp_f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, lowp &gt; lowp_f32mat3x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00674\">fwd.hpp:674</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac03e5099d27eeaa74b6016ea435a1df2\"><div class=\"ttname\"><a href=\"a00304.html#gac03e5099d27eeaa74b6016ea435a1df2\">glm::lowp_i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, lowp &gt; lowp_i8vec2</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00223\">fwd.hpp:223</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga866a05905c49912309ed1fa5f5980e61\"><div class=\"ttname\"><a href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">glm::i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, defaultp &gt; i32vec4</div><div class=\"ttdoc\">32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00280\">fwd.hpp:280</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga298f7d4d273678d0282812368da27fda\"><div class=\"ttname\"><a href=\"a00304.html#ga298f7d4d273678d0282812368da27fda\">glm::highp_f32mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, highp &gt; highp_f32mat2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00548\">fwd.hpp:548</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaeea53879fc327293cf3352a409b7867b\"><div class=\"ttname\"><a href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">glm::lowp_f32</a></div><div class=\"ttdeci\">float lowp_f32</div><div class=\"ttdoc\">Low 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00147\">fwd.hpp:147</a></div></div>\n<div class=\"ttc\" id=\"a00277_html_gacda57dd8c2bff4934c7f09ddd87c0f39\"><div class=\"ttname\"><a href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">glm::highp_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, highp &gt; highp_uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00227_source.html#l00027\">vector_uint1_precision.hpp:27</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5793393686ce5bd2d5968ff9144762b8\"><div class=\"ttname\"><a href=\"a00304.html#ga5793393686ce5bd2d5968ff9144762b8\">glm::mediump_u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, mediump &gt; mediump_u16vec4</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00352\">fwd.hpp:352</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaef61508dd40ec523416697982f9ceaae\"><div class=\"ttname\"><a href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">glm::highp_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, highp &gt; highp_uvec3</div><div class=\"ttdoc\">3 components vector of high qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00231_source.html#l00016\">vector_uint3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae267358ff2a41d156d97f5762630235a\"><div class=\"ttname\"><a href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">glm::u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, defaultp &gt; u32vec3</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00381\">fwd.hpp:381</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga518b8d948a6b4ddb72f84d5c3b7b6611\"><div class=\"ttname\"><a href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, defaultp &gt; u8vec2</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00340\">fwd.hpp:340</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga61c3b1dff4ec7c878af80503141b9f37\"><div class=\"ttname\"><a href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">glm::mediump_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, mediump &gt; mediump_dvec3</div><div class=\"ttdoc\">3 components vector of medium double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00203_source.html#l00024\">vector_double3_precision.hpp:24</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62a17cddeb4dffb4e18fe3aea23f051a\"><div class=\"ttname\"><a href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">glm::mediump_i16</a></div><div class=\"ttdeci\">int16 mediump_i16</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00046\">fwd.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga78f77b8b2d17b431ac5a68c0b5d7050d\"><div class=\"ttname\"><a href=\"a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d\">glm::highp_u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, highp &gt; highp_u64vec2</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00395\">fwd.hpp:395</a></div></div>\n<div class=\"ttc\" id=\"a00273_html_ga836dbb1dc516c233b7f5fe9763bc15dc\"><div class=\"ttname\"><a href=\"a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc\">glm::lowp_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, lowp &gt; lowp_ivec1</div><div class=\"ttdoc\">1 component vector of signed integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00215_source.html#l00031\">vector_int1_precision.hpp:31</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5a08d36cf7917cd19d081a603d0eae3e\"><div class=\"ttname\"><a href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">glm::i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, defaultp &gt; i8vec3</div><div class=\"ttdoc\">8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00239\">fwd.hpp:239</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa3ca74a44102035b3ffb5c9c52dfdd3f\"><div class=\"ttname\"><a href=\"a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f\">glm::mediump_f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, mediump &gt; mediump_f32mat2x2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00680\">fwd.hpp:680</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga0db98d836c5549d31cf64ecd043b7af7\"><div class=\"ttname\"><a href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">glm::mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, defaultp &gt; mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00098_source.html#l00020\">matrix_float4x4.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3963b1050fc65a383ee28e3f827b6e3e\"><div class=\"ttname\"><a href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">glm::mediump_uint16_t</a></div><div class=\"ttdeci\">uint16 mediump_uint16_t</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00113\">fwd.hpp:113</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga54697a78f9a4643af6a57fc2e626ec0d\"><div class=\"ttname\"><a href=\"a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d\">glm::mediump_f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, mediump &gt; mediump_f64mat4x3</div><div class=\"ttdoc\">Medium double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00767\">fwd.hpp:767</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7c5706f6bbe5282e5598acf7e7b377e2\"><div class=\"ttname\"><a href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">glm::u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, defaultp &gt; u8vec3</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00341\">fwd.hpp:341</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga51d5266017d88f62737c1973923a7cf4\"><div class=\"ttname\"><a href=\"a00304.html#ga51d5266017d88f62737c1973923a7cf4\">glm::highp_f64</a></div><div class=\"ttdeci\">double highp_f64</div><div class=\"ttdoc\">High 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00165\">fwd.hpp:165</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga999dc6703ad16e3d3c26b74ea8083f07\"><div class=\"ttname\"><a href=\"a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07\">glm::mediump_fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, mediump &gt; mediump_fvec3</div><div class=\"ttdoc\">Medium Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00433\">fwd.hpp:433</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7b968f2b86a0442a89c7359171e1d866\"><div class=\"ttname\"><a href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">glm::mediump_int64</a></div><div class=\"ttdeci\">int64 mediump_int64</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00079\">fwd.hpp:79</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaec7ee455cb379ec2993e81482123e1cc\"><div class=\"ttname\"><a href=\"a00304.html#gaec7ee455cb379ec2993e81482123e1cc\">glm::mediump_u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, mediump &gt; mediump_u64vec4</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00392\">fwd.hpp:392</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae27ac20302c2e39b6c78e7fe18e62ef7\"><div class=\"ttname\"><a href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">glm::highp_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, highp &gt; highp_dmat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00046\">matrix_double2x2_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3999d3e7ff22025c16ddb601e14dfdee\"><div class=\"ttname\"><a href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">glm::uint64_t</a></div><div class=\"ttdeci\">uint64 uint64_t</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00143\">fwd.hpp:143</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2f256334f83fba4c2d219e414b51df6c\"><div class=\"ttname\"><a href=\"a00304.html#ga2f256334f83fba4c2d219e414b51df6c\">glm::highp_u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, highp &gt; highp_u32vec2</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00375\">fwd.hpp:375</a></div></div>\n<div class=\"ttc\" id=\"a00269_html_ga79a789ebb176b37a45848f7ccdd3b3dd\"><div class=\"ttname\"><a href=\"a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd\">glm::mediump_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, mediump &gt; mediump_dvec1</div><div class=\"ttdoc\">1 component vector of double-precision floating-point numbers using medium precision arithmetic in te...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00199_source.html#l00030\">vector_double1_precision.hpp:30</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa1040342c4efdedc8f90e6267db8d41c\"><div class=\"ttname\"><a href=\"a00304.html#gaa1040342c4efdedc8f90e6267db8d41c\">glm::highp_fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, highp &gt; highp_fvec1</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00436\">fwd.hpp:436</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabb4229a4c1488bf063eed0c45355bb9c\"><div class=\"ttname\"><a href=\"a00304.html#gabb4229a4c1488bf063eed0c45355bb9c\">glm::lowp_i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, lowp &gt; lowp_i64vec4</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00285\">fwd.hpp:285</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gafb84dccdf5d82443df3ffc8428dcaf3e\"><div class=\"ttname\"><a href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">glm::highp_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, highp &gt; highp_ivec4</div><div class=\"ttdoc\">4 components vector of high qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00221_source.html#l00016\">vector_int4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7f526b5cccef126a2ebcf9bdd890394e\"><div class=\"ttname\"><a href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">glm::i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, defaultp &gt; i32vec3</div><div class=\"ttdoc\">32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00279\">fwd.hpp:279</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga88938ee1e7981fa3402e88da6ad74531\"><div class=\"ttname\"><a href=\"a00304.html#ga88938ee1e7981fa3402e88da6ad74531\">glm::highp_f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, highp &gt; highp_f32mat2x4</div><div class=\"ttdoc\">High single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00692\">fwd.hpp:692</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga036d6c7ca9fbbdc5f3871bfcb937c85c\"><div class=\"ttname\"><a href=\"a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c\">glm::lowp_i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, lowp &gt; lowp_i8vec1</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00222\">fwd.hpp:222</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf7adb92ce8de0afaff01436b039fd924\"><div class=\"ttname\"><a href=\"a00304.html#gaf7adb92ce8de0afaff01436b039fd924\">glm::highp_f64mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, highp &gt; highp_f64mat2</div><div class=\"ttdoc\">High double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00580\">fwd.hpp:580</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga42c518b2917e19ce6946a84c64a3a4b2\"><div class=\"ttname\"><a href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">glm::lowp_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, lowp &gt; lowp_dvec3</div><div class=\"ttdoc\">3 components vector of low double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00203_source.html#l00031\">vector_double3_precision.hpp:31</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga91c4815f93177eb423362fd296a87e9f\"><div class=\"ttname\"><a href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">glm::lowp_uint16_t</a></div><div class=\"ttdeci\">uint16 lowp_uint16_t</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00112\">fwd.hpp:112</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga8b09c71aaac7da7867ae58377fe219a8\"><div class=\"ttname\"><a href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">glm::dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, defaultp &gt; dvec2</div><div class=\"ttdoc\">2 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00200_source.html#l00015\">vector_double2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5bdbfb4ce7d05ce1e1b663f50be17e8a\"><div class=\"ttname\"><a href=\"a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a\">glm::highp_f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, highp &gt; highp_f64mat3x2</div><div class=\"ttdoc\">High double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00773\">fwd.hpp:773</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga012c24c8fc69707b90260474c70275a2\"><div class=\"ttname\"><a href=\"a00304.html#ga012c24c8fc69707b90260474c70275a2\">glm::mediump_u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, mediump &gt; mediump_u32vec3</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00371\">fwd.hpp:371</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad68bfd9f881856fc863a6ebca0b67f78\"><div class=\"ttname\"><a href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">glm::lowp_uint16</a></div><div class=\"ttdeci\">uint16 lowp_uint16</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00108\">fwd.hpp:108</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3fd9849f3da5ed6e3decc3fb10a20b3e\"><div class=\"ttname\"><a href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">glm::highp_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, highp &gt; highp_mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00028\">matrix_float3x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga45721c13b956eb691cbd6c6c1429167a\"><div class=\"ttname\"><a href=\"a00304.html#ga45721c13b956eb691cbd6c6c1429167a\">glm::highp_u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, highp &gt; highp_u8vec3</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00336\">fwd.hpp:336</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga66e92e57260bdb910609b9a56bf83e97\"><div class=\"ttname\"><a href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">glm::f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, defaultp &gt; f64vec4</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00504\">fwd.hpp:504</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga50542e4cb9b2f9bec213b66e06145d07\"><div class=\"ttname\"><a href=\"a00304.html#ga50542e4cb9b2f9bec213b66e06145d07\">glm::highp_i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, highp &gt; highp_i8vec2</div><div class=\"ttdoc\">High qualifier 8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00233\">fwd.hpp:233</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga369b447bb1b312449b679ea1f90f3cea\"><div class=\"ttname\"><a href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">glm::highp_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, highp &gt; highp_dmat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00028\">matrix_double2x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5fe17c87ede1b1b4d92454cff4da076d\"><div class=\"ttname\"><a href=\"a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d\">glm::lowp_i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, lowp &gt; lowp_i32vec3</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00264\">fwd.hpp:264</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7ff73a45cea9613ebf1a9fad0b9f82ac\"><div class=\"ttname\"><a href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">glm::lowp_i32</a></div><div class=\"ttdeci\">int32 lowp_i32</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00059\">fwd.hpp:59</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga22e27beead07bff4d5ce9d6065a57279\"><div class=\"ttname\"><a href=\"a00304.html#ga22e27beead07bff4d5ce9d6065a57279\">glm::mediump_fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, mediump &gt; mediump_fmat4x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00648\">fwd.hpp:648</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga9c3019b13faf179e4ad3626ea66df334\"><div class=\"ttname\"><a href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">glm::vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, defaultp &gt; vec3</div><div class=\"ttdoc\">3 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00210_source.html#l00015\">vector_float3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga5b0413198b7e9f061f7534a221c9dac9\"><div class=\"ttname\"><a href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">glm::lowp_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, lowp &gt; lowp_dmat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00034\">matrix_double4x4_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3ebcb1f6d8d8387253de8bccb058d77f\"><div class=\"ttname\"><a href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">glm::mediump_i64</a></div><div class=\"ttdeci\">int64 mediump_i64</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00074\">fwd.hpp:74</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga945254f459860741138bceb74da496b9\"><div class=\"ttname\"><a href=\"a00284.html#ga945254f459860741138bceb74da496b9\">glm::highp_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, highp &gt; highp_dmat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00028\">matrix_double4x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d47d94d17c2406abdd1f087a816e387\"><div class=\"ttname\"><a href=\"a00304.html#ga1d47d94d17c2406abdd1f087a816e387\">glm::lowp_i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, lowp &gt; lowp_i16vec4</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00245\">fwd.hpp:245</a></div></div>\n<div class=\"ttc\" id=\"a00265_html_ga067af382616d93f8e850baae5154cdcc\"><div class=\"ttname\"><a href=\"a00265.html#ga067af382616d93f8e850baae5154cdcc\">glm::bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, defaultp &gt; bvec1</div><div class=\"ttdoc\">1 components vector of boolean. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00189_source.html#l00027\">vector_bool1.hpp:27</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae94823d65648e44d972863c6caa13103\"><div class=\"ttname\"><a href=\"a00304.html#gae94823d65648e44d972863c6caa13103\">glm::highp_f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, highp &gt; highp_f64mat4x3</div><div class=\"ttdoc\">High double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00777\">fwd.hpp:777</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga27585b7c3ab300059f11fcba465f6fd2\"><div class=\"ttname\"><a href=\"a00304.html#ga27585b7c3ab300059f11fcba465f6fd2\">glm::highp_u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, highp &gt; highp_u8vec2</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00335\">fwd.hpp:335</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga27cfb51e0dbe15bba27a14a8590e8466\"><div class=\"ttname\"><a href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">glm::mediump_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, mediump &gt; mediump_ivec3</div><div class=\"ttdoc\">3 components vector of medium qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00219_source.html#l00022\">vector_int3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8396bfdc081d9113190d0c39c9f67084\"><div class=\"ttname\"><a href=\"a00304.html#ga8396bfdc081d9113190d0c39c9f67084\">glm::highp_i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, highp &gt; highp_i8vec3</div><div class=\"ttdoc\">High qualifier 8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00234\">fwd.hpp:234</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd1196090ece7a69fb5c3e43a7d4d851\"><div class=\"ttname\"><a href=\"a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851\">glm::highp_f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, highp &gt; highp_f64vec3</div><div class=\"ttdoc\">High double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00498\">fwd.hpp:498</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga24273aa02abaecaab7f160bac437a339\"><div class=\"ttname\"><a href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">glm::fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, defaultp &gt; fvec2</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00442\">fwd.hpp:442</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa666bb9e6d204d3bea0b3a39a3a335f4\"><div class=\"ttname\"><a href=\"a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4\">glm::lowp_f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, lowp &gt; lowp_f64vec4</div><div class=\"ttdoc\">Low double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00489\">fwd.hpp:489</a></div></div>\n<div class=\"ttc\" id=\"a00250_html_gaf13a25f41afc03480b40fc71bd249cec\"><div class=\"ttname\"><a href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">glm::highp_dquat</a></div><div class=\"ttdeci\">qua&lt; double, highp &gt; highp_dquat</div><div class=\"ttdoc\">Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00129_source.html#l00038\">quaternion_double_precision.hpp:38</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga062ffef2973bd8241df993c3b30b327c\"><div class=\"ttname\"><a href=\"a00304.html#ga062ffef2973bd8241df993c3b30b327c\">glm::mediump_f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, mediump &gt; mediump_f32vec3</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00453\">fwd.hpp:453</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabc7a97c07cbfac8e35eb5e63beb4b679\"><div class=\"ttname\"><a href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">glm::lowp_f64</a></div><div class=\"ttdeci\">double lowp_f64</div><div class=\"ttdoc\">Low 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00163\">fwd.hpp:163</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5868c2dcce41cc3ea5edcaeae239f62c\"><div class=\"ttname\"><a href=\"a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c\">glm::lowp_fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, lowp &gt; lowp_fmat4x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00636\">fwd.hpp:636</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga7dd782c3ef5719bc6d5c3ca826b8ad18\"><div class=\"ttname\"><a href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">glm::highp_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, highp &gt; highp_ivec3</div><div class=\"ttdoc\">3 components vector of high qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00219_source.html#l00016\">vector_int3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5a67a7440b9c0d1538533540f99036a5\"><div class=\"ttname\"><a href=\"a00304.html#ga5a67a7440b9c0d1538533540f99036a5\">glm::highp_f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, highp &gt; highp_f64mat2x4</div><div class=\"ttdoc\">High double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00772\">fwd.hpp:772</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad308e0ed27d64daa4213fb257fcbd5a5\"><div class=\"ttname\"><a href=\"a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5\">glm::highp_f64mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, highp &gt; highp_f64mat4</div><div class=\"ttdoc\">High double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00582\">fwd.hpp:582</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6addd4dfee87fc09ab9525e3d07db4c8\"><div class=\"ttname\"><a href=\"a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8\">glm::mediump_i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, mediump &gt; mediump_i32vec4</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00270\">fwd.hpp:270</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga52409bc6d4a2ce3421526c069220d685\"><div class=\"ttname\"><a href=\"a00304.html#ga52409bc6d4a2ce3421526c069220d685\">glm::lowp_f32mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, lowp &gt; lowp_f32mat2</div><div class=\"ttdoc\">Low single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00540\">fwd.hpp:540</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae8f5e3e964ca2ae240adc2c0d74adede\"><div class=\"ttname\"><a href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">glm::int16_t</a></div><div class=\"ttdeci\">int16 int16_t</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00057\">fwd.hpp:57</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga0412a634d183587e6188e9b11869f8f4\"><div class=\"ttname\"><a href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">glm::dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, defaultp &gt; dmat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00073_source.html#l00015\">matrix_double3x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaf6bf2f5bde7ad5b9c289f777b93094af\"><div class=\"ttname\"><a href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">glm::lowp_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, lowp &gt; lowp_dmat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00066_source.html#l00016\">matrix_double2x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac25db6d2b1e2a0f351b77ba3409ac4cd\"><div class=\"ttname\"><a href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">glm::highp_i64</a></div><div class=\"ttdeci\">int64 highp_i64</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00075\">fwd.hpp:75</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae7b75ea2e09fa686a79bbe9b6ca68ee5\"><div class=\"ttname\"><a href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">glm::mediump_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, mediump &gt; mediump_mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00087_source.html#l00022\">matrix_float2x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad310b1dddeec9ec837a104e7db8de580\"><div class=\"ttname\"><a href=\"a00304.html#gad310b1dddeec9ec837a104e7db8de580\">glm::highp_f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, highp &gt; highp_f64mat3x4</div><div class=\"ttdoc\">High double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00775\">fwd.hpp:775</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaed2dc69e0d507d4191092dbd44b3eb75\"><div class=\"ttname\"><a href=\"a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75\">glm::highp_fmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, highp &gt; highp_fmat3</div><div class=\"ttdoc\">High single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00533\">fwd.hpp:533</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd80ad7640e9e32f2edcb8330b1ffe4f\"><div class=\"ttname\"><a href=\"a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f\">glm::mediump_f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, mediump &gt; mediump_f32mat3x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00684\">fwd.hpp:684</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5e52f485059ce6e3010c590b882602c9\"><div class=\"ttname\"><a href=\"a00304.html#ga5e52f485059ce6e3010c590b882602c9\">glm::mediump_f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, mediump &gt; mediump_f64quat</div><div class=\"ttdoc\">Medium double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00813\">fwd.hpp:813</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga042ef09ff2f0cb24a36f541bcb3a3710\"><div class=\"ttname\"><a href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">glm::int32_t</a></div><div class=\"ttdeci\">int32 int32_t</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00071\">fwd.hpp:71</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadc4e1594f9555d919131ee02b17822a2\"><div class=\"ttname\"><a href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">glm::f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, defaultp &gt; f64vec2</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00502\">fwd.hpp:502</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gaa57e96bb337867329d5f43bcc27c1095\"><div class=\"ttname\"><a href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">glm::uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, defaultp &gt; uvec4</div><div class=\"ttdoc\">4 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00232_source.html#l00015\">vector_uint4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8dd3a3281ae5c970ffe0c41d538aa153\"><div class=\"ttname\"><a href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">glm::lowp_uint64_t</a></div><div class=\"ttdeci\">uint64 lowp_uint64_t</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00140\">fwd.hpp:140</a></div></div>\n<div class=\"ttc\" id=\"a00263_html_gab630f76c26b50298187f7889104d4b9c\"><div class=\"ttname\"><a href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">glm::uint64</a></div><div class=\"ttdeci\">detail::uint64 uint64</div><div class=\"ttdoc\">64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00151_source.html#l00067\">scalar_uint_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5fde0fa4a3852a9dd5d637a92ee74718\"><div class=\"ttname\"><a href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">glm::highp_int16</a></div><div class=\"ttdeci\">int16 highp_int16</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00052\">fwd.hpp:52</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga66b6a9af787e468a46dfe24189e87f9b\"><div class=\"ttname\"><a href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">glm::dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, defaultp &gt; dmat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00063_source.html#l00015\">matrix_double2x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacc44265ed440bf5e6e566782570de842\"><div class=\"ttname\"><a href=\"a00304.html#gacc44265ed440bf5e6e566782570de842\">glm::mediump_i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, mediump &gt; mediump_i16vec1</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00247\">fwd.hpp:247</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaef2198807e937072803ae0ae45e1965e\"><div class=\"ttname\"><a href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">glm::dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, defaultp &gt; dmat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00067_source.html#l00015\">matrix_double2x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3647309010a2160e9ec89bc6f7c95c35\"><div class=\"ttname\"><a href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">glm::highp_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, highp &gt; highp_dmat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00070_source.html#l00028\">matrix_double3x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga681381f19f11c9e5ee45cda2c56937ff\"><div class=\"ttname\"><a href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">glm::fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, defaultp &gt; fmat2x4</div><div class=\"ttdoc\">Single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00666\">fwd.hpp:666</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28635abcddb2f3e92c33c3f0fcc682ad\"><div class=\"ttname\"><a href=\"a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad\">glm::highp_fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, highp &gt; highp_fmat2x2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00650\">fwd.hpp:650</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b839abbb44f5102609eed89f6ed61f7\"><div class=\"ttname\"><a href=\"a00304.html#ga8b839abbb44f5102609eed89f6ed61f7\">glm::highp_fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, highp &gt; highp_fvec4</div><div class=\"ttdoc\">High Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00439\">fwd.hpp:439</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7c2cadb9b85cc7e0d125db21ca19dea4\"><div class=\"ttname\"><a href=\"a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4\">glm::highp_f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, highp &gt; highp_f64mat3x3</div><div class=\"ttdoc\">High double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00774\">fwd.hpp:774</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf5e94bf2a20af7601787c154751dc2e1\"><div class=\"ttname\"><a href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">glm::mediump_i32</a></div><div class=\"ttdeci\">int32 mediump_i32</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00060\">fwd.hpp:60</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga2384e263df19f1404b733016eff78fca\"><div class=\"ttname\"><a href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">glm::mediump_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, mediump &gt; mediump_vec3</div><div class=\"ttdoc\">3 components vector of medium single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00211_source.html#l00022\">vector_float3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a7d997da9ac29cb931e35bd399f58df\"><div class=\"ttname\"><a href=\"a00304.html#ga2a7d997da9ac29cb931e35bd399f58df\">glm::lowp_u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, lowp &gt; lowp_u16vec2</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00345\">fwd.hpp:345</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga22166f0da65038b447f3c5e534fff1c2\"><div class=\"ttname\"><a href=\"a00304.html#ga22166f0da65038b447f3c5e534fff1c2\">glm::highp_u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, highp &gt; highp_u32vec4</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00377\">fwd.hpp:377</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"><div class=\"ttname\"><a href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">glm::dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, defaultp &gt; dmat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00075_source.html#l00015\">matrix_double4x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga0b4432cb8d910e406576d10d802e190d\"><div class=\"ttname\"><a href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">glm::lowp_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, lowp &gt; lowp_dvec4</div><div class=\"ttdoc\">4 components vector of low double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00205_source.html#l00032\">vector_double4_precision.hpp:32</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaea881cae4ddc6c0fbf7cc5b08177ca5b\"><div class=\"ttname\"><a href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">glm::lowp_float32_t</a></div><div class=\"ttdeci\">float lowp_float32_t</div><div class=\"ttdoc\">Low 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00157\">fwd.hpp:157</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa46172d7dc1c7ffe3e78107ff88adf08\"><div class=\"ttname\"><a href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">glm::highp_uint64_t</a></div><div class=\"ttdeci\">uint64 highp_uint64_t</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00142\">fwd.hpp:142</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf3b694b2b8ded7e0b9f07b061917e1a0\"><div class=\"ttname\"><a href=\"a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0\">glm::lowp_f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, lowp &gt; lowp_f32vec2</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00447\">fwd.hpp:447</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga31cef34e4cd04840c54741ff2f7005f0\"><div class=\"ttname\"><a href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">glm::u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, defaultp &gt; u32vec4</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00382\">fwd.hpp:382</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac1281da5ded55047e8892b0e1f1ae965\"><div class=\"ttname\"><a href=\"a00304.html#gac1281da5ded55047e8892b0e1f1ae965\">glm::mediump_f64mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, mediump &gt; mediump_f64mat2</div><div class=\"ttdoc\">Medium double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00576\">fwd.hpp:576</a></div></div>\n<div class=\"ttc\" id=\"a00253_html_gad2a59409de1bb12ccb6eb692ee7e9d8d\"><div class=\"ttname\"><a href=\"a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d\">glm::mediump_quat</a></div><div class=\"ttdeci\">qua&lt; float, mediump &gt; mediump_quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00132_source.html#l00029\">quaternion_float_precision.hpp:29</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga66bffdd8e5c0d3ef9958bbab9ca1ba59\"><div class=\"ttname\"><a href=\"a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59\">glm::highp_f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, highp &gt; highp_f32mat4x3</div><div class=\"ttdoc\">High single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00697\">fwd.hpp:697</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"><div class=\"ttname\"><a href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">glm::lowp_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, lowp &gt; lowp_uvec3</div><div class=\"ttdoc\">3 components vector of low qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00231_source.html#l00028\">vector_uint3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2df7cdaf9a571ce7a1b09435f502c694\"><div class=\"ttname\"><a href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">glm::lowp_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, lowp &gt; lowp_mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00034\">matrix_float2x2_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga38e674196ba411d642be40c47bf33939\"><div class=\"ttname\"><a href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">glm::f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, defaultp &gt; f32quat</div><div class=\"ttdoc\">Single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00805\">fwd.hpp:805</a></div></div>\n<div class=\"ttc\" id=\"a00260_html_gaff5189f97f9e842d9636a0f240001b2e\"><div class=\"ttname\"><a href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">glm::int64</a></div><div class=\"ttdeci\">detail::int64 int64</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00146_source.html#l00067\">scalar_int_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00250_html_ga9e6e5f42e67dd5877350ba485c191f1c\"><div class=\"ttname\"><a href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">glm::lowp_dquat</a></div><div class=\"ttdeci\">qua&lt; double, lowp &gt; lowp_dquat</div><div class=\"ttdoc\">Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00129_source.html#l00028\">quaternion_double_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae4fe774744852c4d7d069be2e05257ab\"><div class=\"ttname\"><a href=\"a00304.html#gae4fe774744852c4d7d069be2e05257ab\">glm::highp_u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, highp &gt; highp_u64vec1</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00394\">fwd.hpp:394</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaa669c6675c3405f76c0b14020d1c0d61\"><div class=\"ttname\"><a href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">glm::mediump_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, mediump &gt; mediump_mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00093_source.html#l00022\">matrix_float3x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8342c7469384c6d769cacc9e309278d9\"><div class=\"ttname\"><a href=\"a00304.html#ga8342c7469384c6d769cacc9e309278d9\">glm::highp_f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, highp &gt; highp_f64mat2x3</div><div class=\"ttdoc\">High double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00771\">fwd.hpp:771</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6d388e9b9aa1b389f0672d9c7dfc61c5\"><div class=\"ttname\"><a href=\"a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5\">glm::lowp_i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, lowp &gt; lowp_i8vec4</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00225\">fwd.hpp:225</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5e649bbdb135fbcb4bfe950f4c73a444\"><div class=\"ttname\"><a href=\"a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444\">glm::lowp_fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, lowp &gt; lowp_fmat4x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00637\">fwd.hpp:637</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\"><div class=\"ttname\"><a href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">glm::f32</a></div><div class=\"ttdeci\">float f32</div><div class=\"ttdoc\">Default 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00150\">fwd.hpp:150</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa9b4579f8e6f3d9b649a965bcb785530\"><div class=\"ttname\"><a href=\"a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530\">glm::highp_i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, highp &gt; highp_i32vec2</div><div class=\"ttdoc\">High qualifier 32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00273\">fwd.hpp:273</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4a43050843b141bdc7e85437faef6f55\"><div class=\"ttname\"><a href=\"a00304.html#ga4a43050843b141bdc7e85437faef6f55\">glm::mediump_u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, mediump &gt; mediump_u8vec1</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00329\">fwd.hpp:329</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae406ec670f64170a7437b5e302eeb2cb\"><div class=\"ttname\"><a href=\"a00304.html#gae406ec670f64170a7437b5e302eeb2cb\">glm::highp_fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, highp &gt; highp_fmat4x3</div><div class=\"ttdoc\">High single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00657\">fwd.hpp:657</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga001e3e0638fbf8719788fc64c5b8cf39\"><div class=\"ttname\"><a href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">glm::dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, defaultp &gt; dmat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00069_source.html#l00015\">matrix_double3x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf52982bb23e3a3772649b2c5bb84b107\"><div class=\"ttname\"><a href=\"a00304.html#gaf52982bb23e3a3772649b2c5bb84b107\">glm::mediump_i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, mediump &gt; mediump_i16vec4</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00250\">fwd.hpp:250</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab7daf79d6bc06a68bea1c6f5e11b5512\"><div class=\"ttname\"><a href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">glm::f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, defaultp &gt; f64mat4x2</div><div class=\"ttdoc\">Double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00782\">fwd.hpp:782</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga55a2d2a8eb09b5633668257eb3cad453\"><div class=\"ttname\"><a href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">glm::fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, defaultp &gt; fmat2x3</div><div class=\"ttdoc\">Single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00663\">fwd.hpp:663</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa805ef691c711dc41e2776cfb67f5cf5\"><div class=\"ttname\"><a href=\"a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5\">glm::mediump_f64mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, mediump &gt; mediump_f64mat4</div><div class=\"ttdoc\">Medium double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00578\">fwd.hpp:578</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaaf4ee3b76d43d98da02ec399b99bda4b\"><div class=\"ttname\"><a href=\"a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b\">glm::mediump_u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, mediump &gt; mediump_u8vec4</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00332\">fwd.hpp:332</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gab24dc20dcdc5b71282634bdbf6b70105\"><div class=\"ttname\"><a href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">glm::highp_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, highp &gt; highp_dvec3</div><div class=\"ttdoc\">3 components vector of high double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00203_source.html#l00017\">vector_double3_precision.hpp:17</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga21b1b22dec013a72656e3644baf8a1e1\"><div class=\"ttname\"><a href=\"a00304.html#ga21b1b22dec013a72656e3644baf8a1e1\">glm::lowp_f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, lowp &gt; lowp_f32mat3x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00675\">fwd.hpp:675</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac61843e4fa96c1f4e9d8316454f32a8e\"><div class=\"ttname\"><a href=\"a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e\">glm::mediump_float64_t</a></div><div class=\"ttdeci\">double mediump_float64_t</div><div class=\"ttdoc\">Medium 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00174\">fwd.hpp:174</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2352ae43b284c9f71446674c0208c05d\"><div class=\"ttname\"><a href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">glm::highp_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, highp &gt; highp_mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00046\">matrix_float2x2_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga534c3ef5c3b8fdd8656b6afc205b4b77\"><div class=\"ttname\"><a href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">glm::lowp_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, lowp &gt; lowp_mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00097_source.html#l00016\">matrix_float4x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7c0d196f5fa79f7e892a2f323a0be1ae\"><div class=\"ttname\"><a href=\"a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae\">glm::highp_fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, highp &gt; highp_fvec2</div><div class=\"ttdoc\">High Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00437\">fwd.hpp:437</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa2d7acc0adb536fab71fe261232a40ff\"><div class=\"ttname\"><a href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">glm::u16</a></div><div class=\"ttdeci\">uint16 u16</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00106\">fwd.hpp:106</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga354736e0c645099cd44c42fb2f87c2b8\"><div class=\"ttname\"><a href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">glm::lowp_i64</a></div><div class=\"ttdeci\">int64 lowp_i64</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00073\">fwd.hpp:73</a></div></div>\n<div class=\"ttc\" id=\"a00277_html_ga8bf3fc8a7863d140f48b29341c750402\"><div class=\"ttname\"><a href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">glm::lowp_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, lowp &gt; lowp_uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00227_source.html#l00037\">vector_uint1_precision.hpp:37</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga6f9269106d91b2d2b91bcf27cd5f5560\"><div class=\"ttname\"><a href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">glm::ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, defaultp &gt; ivec2</div><div class=\"ttdoc\">2 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00216_source.html#l00015\">vector_int2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga99d1b85ff99956b33da7e9992aad129a\"><div class=\"ttname\"><a href=\"a00304.html#ga99d1b85ff99956b33da7e9992aad129a\">glm::f32mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; f32mat4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00554\">fwd.hpp:554</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacea38a85893e17e6834b6cb09a9ad0cf\"><div class=\"ttname\"><a href=\"a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf\">glm::mediump_fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, mediump &gt; mediump_fmat4x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00646\">fwd.hpp:646</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafc730f6b4242763b0eda0ffa25150292\"><div class=\"ttname\"><a href=\"a00304.html#gafc730f6b4242763b0eda0ffa25150292\">glm::lowp_f64mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, lowp &gt; lowp_f64mat2</div><div class=\"ttdoc\">Low double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00572\">fwd.hpp:572</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6d7b3789ecb932c26430009478cac7ae\"><div class=\"ttname\"><a href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">glm::mediump_int8_t</a></div><div class=\"ttdeci\">int8 mediump_int8_t</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00041\">fwd.hpp:41</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaba56275dd04a7a61560b0e8fa5d365b4\"><div class=\"ttname\"><a href=\"a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4\">glm::lowp_fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, lowp &gt; lowp_fmat3x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00634\">fwd.hpp:634</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7286a37076a09da140df18bfa75d4e38\"><div class=\"ttname\"><a href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">glm::lowp_float64_t</a></div><div class=\"ttdeci\">double lowp_float64_t</div><div class=\"ttdoc\">Low 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00173\">fwd.hpp:173</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacaea06d0a79ef3172e887a7a6ba434ff\"><div class=\"ttname\"><a href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">glm::highp_int16_t</a></div><div class=\"ttdeci\">int16 highp_int16_t</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00056\">fwd.hpp:56</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa5b44d3ef6efcf33f44876673a7a936e\"><div class=\"ttname\"><a href=\"a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e\">glm::highp_fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, highp &gt; highp_fmat3x3</div><div class=\"ttdoc\">High single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00654\">fwd.hpp:654</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga0f34486bb7fec8e5a5b3830b6a6cbeca\"><div class=\"ttname\"><a href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">glm::dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, defaultp &gt; dmat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00079_source.html#l00020\">matrix_double4x4.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2b65767f8b5aed1bd1cf86c541662b50\"><div class=\"ttname\"><a href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">glm::i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, defaultp &gt; i64vec1</div><div class=\"ttdoc\">64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00297\">fwd.hpp:297</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4f072ada9552e1e480bbb3b1acde5250\"><div class=\"ttname\"><a href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">glm::lowp_u32</a></div><div class=\"ttdeci\">uint32 lowp_u32</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00117\">fwd.hpp:117</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga4a1440b5ea3cf84d5b06c79b534bd770\"><div class=\"ttname\"><a href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">glm::mediump_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, mediump &gt; mediump_mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00097_source.html#l00022\">matrix_float4x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4b2e0e10d8d154fec9cab50e216588ec\"><div class=\"ttname\"><a href=\"a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec\">glm::lowp_u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, lowp &gt; lowp_u8vec1</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00324\">fwd.hpp:324</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8089722ffdf868cdfe721dea1fb6a90e\"><div class=\"ttname\"><a href=\"a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e\">glm::mediump_i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, mediump &gt; mediump_i64vec3</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00289\">fwd.hpp:289</a></div></div>\n<div class=\"ttc\" id=\"a00272_html_gaedd0562c2e77714929d7723a7e2e0dba\"><div class=\"ttname\"><a href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">glm::ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, defaultp &gt; ivec1</div><div class=\"ttdoc\">1 component vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00214_source.html#l00028\">vector_int1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4252cf7f5b0e3cd47c3d3badf0ef43b3\"><div class=\"ttname\"><a href=\"a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3\">glm::highp_f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, highp &gt; highp_f32quat</div><div class=\"ttdoc\">High single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00804\">fwd.hpp:804</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8e62c883d13f47015f3b70ed88751369\"><div class=\"ttname\"><a href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">glm::highp_u16</a></div><div class=\"ttdeci\">uint16 highp_u16</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00105\">fwd.hpp:105</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga98b9ed43cf8c5cf1d354b23c7df9119f\"><div class=\"ttname\"><a href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">glm::fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, defaultp &gt; fvec1</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00441\">fwd.hpp:441</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga9e1c9ee65fef547bde793e69723e24eb\"><div class=\"ttname\"><a href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">glm::mediump_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, mediump &gt; mediump_mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00089_source.html#l00022\">matrix_float3x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga5a5452140650988b94d5716e4d872465\"><div class=\"ttname\"><a href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">glm::lowp_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, lowp &gt; lowp_bvec2</div><div class=\"ttdoc\">2 components vector of low qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00192_source.html#l00028\">vector_bool2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga907f85d4a0eac3d8aaf571e5c2647194\"><div class=\"ttname\"><a href=\"a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194\">glm::mediump_u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, mediump &gt; mediump_u8vec2</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00330\">fwd.hpp:330</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0350631d35ff800e6133ac6243b13cbc\"><div class=\"ttname\"><a href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">glm::lowp_int32_t</a></div><div class=\"ttdeci\">int32 lowp_int32_t</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00068\">fwd.hpp:68</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa6aab4ee7189b86716f5d7015d43021d\"><div class=\"ttname\"><a href=\"a00304.html#gaa6aab4ee7189b86716f5d7015d43021d\">glm::lowp_u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, lowp &gt; lowp_u16vec1</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00344\">fwd.hpp:344</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaee80c7cd3caa0f2635058656755f6f69\"><div class=\"ttname\"><a href=\"a00304.html#gaee80c7cd3caa0f2635058656755f6f69\">glm::highp_fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, highp &gt; highp_fmat4x4</div><div class=\"ttdoc\">High single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00658\">fwd.hpp:658</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa5086dbd6efb272d13fc88829330861d\"><div class=\"ttname\"><a href=\"a00304.html#gaa5086dbd6efb272d13fc88829330861d\">glm::highp_f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, highp &gt; highp_f32mat3x4</div><div class=\"ttdoc\">High single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00695\">fwd.hpp:695</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga197151b72dfaf289daf98b361760ffe7\"><div class=\"ttname\"><a href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">glm::bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, defaultp &gt; bvec3</div><div class=\"ttdoc\">3 components vector of boolean. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00193_source.html#l00015\">vector_bool3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5d6c70e080409a76a257dc55bd8ea2c8\"><div class=\"ttname\"><a href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">glm::f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, defaultp &gt; f32vec2</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00462\">fwd.hpp:462</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacfd806749008f0ade6ac4bb9dd91082f\"><div class=\"ttname\"><a href=\"a00304.html#gacfd806749008f0ade6ac4bb9dd91082f\">glm::highp_u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, highp &gt; highp_u16vec3</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00356\">fwd.hpp:356</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae4dee61f8fe1caccec309fbed02faf12\"><div class=\"ttname\"><a href=\"a00304.html#gae4dee61f8fe1caccec309fbed02faf12\">glm::mediump_float32_t</a></div><div class=\"ttdeci\">float mediump_float32_t</div><div class=\"ttdoc\">Medium 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00158\">fwd.hpp:158</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3350c93c3275298f940a42875388e4b4\"><div class=\"ttname\"><a href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">glm::fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; fmat2x2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00660\">fwd.hpp:660</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\"><div class=\"ttname\"><a href=\"a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\">glm::mediump_f32</a></div><div class=\"ttdeci\">float mediump_f32</div><div class=\"ttdoc\">Medium 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00148\">fwd.hpp:148</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga936e95b881ecd2d109459ca41913fa99\"><div class=\"ttname\"><a href=\"a00304.html#ga936e95b881ecd2d109459ca41913fa99\">glm::mediump_f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, mediump &gt; mediump_f32mat4x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00688\">fwd.hpp:688</a></div></div>\n<div class=\"ttc\" id=\"a00253_html_gade62c5316c1c11a79c34c00c189558eb\"><div class=\"ttname\"><a href=\"a00253.html#gade62c5316c1c11a79c34c00c189558eb\">glm::lowp_quat</a></div><div class=\"ttdeci\">qua&lt; float, lowp &gt; lowp_quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00132_source.html#l00026\">quaternion_float_precision.hpp:26</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad6eb11412a3161ca8dc1d63b2a307c4b\"><div class=\"ttname\"><a href=\"a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b\">glm::mediump_f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, mediump &gt; mediump_f32vec2</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00452\">fwd.hpp:452</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga760bcf26fdb23a2c3ecad3c928a19ae6\"><div class=\"ttname\"><a href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">glm::lowp_int8</a></div><div class=\"ttdeci\">int8 lowp_int8</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00036\">fwd.hpp:36</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga493ab21243abe564b3f7d381e677d29a\"><div class=\"ttname\"><a href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">glm::mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, defaultp &gt; mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00084_source.html#l00015\">matrix_float2x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf2d02c5f4d59135b9bc524fe317fd26b\"><div class=\"ttname\"><a href=\"a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b\">glm::lowp_f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, lowp &gt; lowp_f64vec1</div><div class=\"ttdoc\">Low double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00486\">fwd.hpp:486</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga36537e701456f12c20e73f469cac4967\"><div class=\"ttname\"><a href=\"a00304.html#ga36537e701456f12c20e73f469cac4967\">glm::highp_f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, highp &gt; highp_f32mat3x2</div><div class=\"ttdoc\">High single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00693\">fwd.hpp:693</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd926d36a72433f6cac51dd60fa13107\"><div class=\"ttname\"><a href=\"a00304.html#gacd926d36a72433f6cac51dd60fa13107\">glm::mediump_f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, mediump &gt; mediump_f64mat3x2</div><div class=\"ttdoc\">Medium double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00763\">fwd.hpp:763</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga939fbf9c53008a8e84c7dd7cf8de29e2\"><div class=\"ttname\"><a href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">glm::mediump_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, mediump &gt; mediump_dmat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00022\">matrix_double3x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaddc6f7748b699254942c5216b68f8f7f\"><div class=\"ttname\"><a href=\"a00304.html#gaddc6f7748b699254942c5216b68f8f7f\">glm::mediump_u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, mediump &gt; mediump_u8vec3</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00331\">fwd.hpp:331</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga92cd388753d48e20de69ea2dbedf826a\"><div class=\"ttname\"><a href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">glm::dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, defaultp &gt; dmat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00065_source.html#l00015\">matrix_double2x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8c9cd734e03cd49674f3e287aa4a6f95\"><div class=\"ttname\"><a href=\"a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95\">glm::lowp_f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, lowp &gt; lowp_f64mat4x4</div><div class=\"ttdoc\">Low double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00758\">fwd.hpp:758</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga501a2f313f1c220eef4ab02bdabdc3c6\"><div class=\"ttname\"><a href=\"a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6\">glm::lowp_i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, lowp &gt; lowp_i16vec1</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00242\">fwd.hpp:242</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga5b83ae3d0fdec519c038e4d2cf967cf0\"><div class=\"ttname\"><a href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">glm::dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, defaultp &gt; dvec3</div><div class=\"ttdoc\">3 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00202_source.html#l00015\">vector_double3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga97507a31ecee8609887d0f23bbde92c7\"><div class=\"ttname\"><a href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">glm::lowp_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, lowp &gt; lowp_dmat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00068_source.html#l00016\">matrix_double2x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga119c41d73fe9977358174eb3ac1035a3\"><div class=\"ttname\"><a href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">glm::lowp_int8_t</a></div><div class=\"ttdeci\">int8 lowp_int8_t</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00040\">fwd.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf7e286e81347011e257ee779524e73b9\"><div class=\"ttname\"><a href=\"a00304.html#gaf7e286e81347011e257ee779524e73b9\">glm::lowp_u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, lowp &gt; lowp_u32vec2</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00365\">fwd.hpp:365</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae71445ac6cd0b9fba3e5c905cd030fb1\"><div class=\"ttname\"><a href=\"a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1\">glm::mediump_f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, mediump &gt; mediump_f32mat2x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00682\">fwd.hpp:682</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3e2e66ffbe341a80bc005ba2b9552110\"><div class=\"ttname\"><a href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">glm::f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, defaultp &gt; f64mat4x3</div><div class=\"ttdoc\">Double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00785\">fwd.hpp:785</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad9d1903cb20899966e8ebe0670889a5f\"><div class=\"ttname\"><a href=\"a00304.html#gad9d1903cb20899966e8ebe0670889a5f\">glm::highp_i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, highp &gt; highp_i64vec2</div><div class=\"ttdoc\">High qualifier 64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00293\">fwd.hpp:293</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4491baaebbc46a20f1cb5da985576bf4\"><div class=\"ttname\"><a href=\"a00304.html#ga4491baaebbc46a20f1cb5da985576bf4\">glm::mediump_f32mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, mediump &gt; mediump_f32mat4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00546\">fwd.hpp:546</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga1eda47a00027ec440eac05d63739c71b\"><div class=\"ttname\"><a href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">glm::highp_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, highp &gt; highp_mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00089_source.html#l00028\">matrix_float3x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga58cc504be0e3b61c48bc91554a767b9f\"><div class=\"ttname\"><a href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">glm::highp_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, highp &gt; highp_mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00046\">matrix_float4x4_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga2f4f6e9a69a0281d06940fd0990cafc3\"><div class=\"ttname\"><a href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">glm::mediump_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, mediump &gt; mediump_dvec2</div><div class=\"ttdoc\">2 components vector of medium double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00201_source.html#l00022\">vector_double2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gac61b94f5d9775f83f321bac899322fe2\"><div class=\"ttname\"><a href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">glm::lowp_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, lowp &gt; lowp_dmat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00034\">matrix_double2x2_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadb997e409103d4da18abd837e636a496\"><div class=\"ttname\"><a href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">glm::i64</a></div><div class=\"ttdeci\">int64 i64</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00076\">fwd.hpp:76</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d794d240091678f602e8de225b8d8c9\"><div class=\"ttname\"><a href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">glm::f64</a></div><div class=\"ttdeci\">double f64</div><div class=\"ttdoc\">Default 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00166\">fwd.hpp:166</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga79e0922a977662a8fd39d7829be3908b\"><div class=\"ttname\"><a href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">glm::lowp_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, lowp &gt; lowp_bvec3</div><div class=\"ttdoc\">3 components vector of low qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00194_source.html#l00028\">vector_bool3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gac5fc6786688eff02904ca5e7d6960092\"><div class=\"ttname\"><a href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">glm::lowp_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, lowp &gt; lowp_mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00093_source.html#l00016\">matrix_float3x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga686468a9a815bd4db8cddae42a6d6b87\"><div class=\"ttname\"><a href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">glm::lowp_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, lowp &gt; lowp_mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00034\">matrix_float4x4_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00271_html_ga9e8ed21862a897c156c0b2abca70b1e9\"><div class=\"ttname\"><a href=\"a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9\">glm::highp_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, highp &gt; highp_vec1</div><div class=\"ttdoc\">1 component vector of single-precision floating-point numbers using high precision arithmetic in term...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00207_source.html#l00027\">vector_float1_precision.hpp:27</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabb33cab7d7c74cc14aa95455d0690865\"><div class=\"ttname\"><a href=\"a00304.html#gabb33cab7d7c74cc14aa95455d0690865\">glm::mediump_f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, mediump &gt; mediump_f32vec1</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00451\">fwd.hpp:451</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8df705d775b776f5ae6b39e2ab892899\"><div class=\"ttname\"><a href=\"a00304.html#ga8df705d775b776f5ae6b39e2ab892899\">glm::mediump_f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, mediump &gt; mediump_f32mat3x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00685\">fwd.hpp:685</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae98c88d9a7befa9b5877f49176225535\"><div class=\"ttname\"><a href=\"a00304.html#gae98c88d9a7befa9b5877f49176225535\">glm::highp_fmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, highp &gt; highp_fmat2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00532\">fwd.hpp:532</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gad5dd50da9e37387ca6b4e6f9c80fe6f8\"><div class=\"ttname\"><a href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">glm::highp_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, highp &gt; highp_uvec2</div><div class=\"ttdoc\">2 components vector of high qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00229_source.html#l00016\">vector_uint2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga522775dbcc6d96246a1c5cf02344fd8c\"><div class=\"ttname\"><a href=\"a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c\">glm::highp_f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, highp &gt; highp_f32vec3</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00458\">fwd.hpp:458</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga0cdf57d29f9448864237b2fb3e39aa1d\"><div class=\"ttname\"><a href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">glm::mediump_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, mediump &gt; mediump_mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00040\">matrix_float2x2_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac7bb04fb857ef7b520e49f6c381432be\"><div class=\"ttname\"><a href=\"a00304.html#gac7bb04fb857ef7b520e49f6c381432be\">glm::mediump_i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, mediump &gt; mediump_i8vec4</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00230\">fwd.hpp:230</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga41b0d390bd8cc827323b1b3816ff4bf8\"><div class=\"ttname\"><a href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">glm::lowp_float32</a></div><div class=\"ttdeci\">float lowp_float32</div><div class=\"ttdoc\">Low 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00152\">fwd.hpp:152</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a266e46ee218d0c680f12b35c500cc0\"><div class=\"ttname\"><a href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, defaultp &gt; u32vec2</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00380\">fwd.hpp:380</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaa3b4f7806dad03d83bb3da0baa1e3b9b\"><div class=\"ttname\"><a href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">glm::mediump_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, mediump &gt; mediump_uvec2</div><div class=\"ttdoc\">2 components vector of medium qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00229_source.html#l00022\">vector_uint2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00252_html_gab0b441adb4509bc58d2946c2239a8942\"><div class=\"ttname\"><a href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">glm::quat</a></div><div class=\"ttdeci\">qua&lt; float, defaultp &gt; quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00131_source.html#l00035\">quaternion_float.hpp:35</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gab98d77cca255914f5e29697fcbc2d975\"><div class=\"ttname\"><a href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">glm::highp_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, highp &gt; highp_dvec2</div><div class=\"ttdoc\">2 components vector of high double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00201_source.html#l00016\">vector_double2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1bed890513c0f50b7e7ba4f7f359dbfb\"><div class=\"ttname\"><a href=\"a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb\">glm::mediump_fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, mediump &gt; mediump_fvec4</div><div class=\"ttdoc\">Medium Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00434\">fwd.hpp:434</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5244cef85d6e870e240c76428a262ae8\"><div class=\"ttname\"><a href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">glm::mediump_int32</a></div><div class=\"ttdeci\">int32 mediump_int32</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00065\">fwd.hpp:65</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga48310188e1d0c616bf8d78c92447523b\"><div class=\"ttname\"><a href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">glm::i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, defaultp &gt; i64vec2</div><div class=\"ttdoc\">64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00298\">fwd.hpp:298</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3ab5fe184343d394fb6c2723c3ee3699\"><div class=\"ttname\"><a href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">glm::i16</a></div><div class=\"ttdeci\">int16 i16</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00048\">fwd.hpp:48</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga57debab5d98ce618f7b2a97fe26eb3ac\"><div class=\"ttname\"><a href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">glm::dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, defaultp &gt; dvec4</div><div class=\"ttdoc\">4 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00204_source.html#l00015\">vector_double4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad01cc6479bde1fd1870f13d3ed9530b3\"><div class=\"ttname\"><a href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">glm::fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; fmat4x4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00668\">fwd.hpp:668</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga745452bd9c89f5ad948203e4fb4b4ea3\"><div class=\"ttname\"><a href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">glm::mediump_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, mediump &gt; mediump_mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00022\">matrix_float2x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa3ee2bc4af03cc06578b66b3e3f878ae\"><div class=\"ttname\"><a href=\"a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae\">glm::lowp_f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, lowp &gt; lowp_f64quat</div><div class=\"ttdoc\">Low double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00812\">fwd.hpp:812</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga8dd59e7fc6913ac5d61b86553e9148ba\"><div class=\"ttname\"><a href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">glm::mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, defaultp &gt; mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00082_source.html#l00020\">matrix_float2x2.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6af54d70d9beb0a7ef992a879e86b04f\"><div class=\"ttname\"><a href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">glm::fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, defaultp &gt; fmat3x2</div><div class=\"ttdoc\">Single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00661\">fwd.hpp:661</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gacd18864049f8c83799babe7e596ca05b\"><div class=\"ttname\"><a href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">glm::dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, defaultp &gt; dmat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00077_source.html#l00015\">matrix_double4x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaeda1f474c668eaecc443bea85a4a4eca\"><div class=\"ttname\"><a href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">glm::highp_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, highp &gt; highp_dmat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00076_source.html#l00028\">matrix_double4x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga529496d75775fb656a07993ea9af2450\"><div class=\"ttname\"><a href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">glm::u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, defaultp &gt; u16vec4</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00362\">fwd.hpp:362</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a78447eb9d66a114b193f4a25899c16\"><div class=\"ttname\"><a href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, defaultp &gt; u16vec2</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00360\">fwd.hpp:360</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad1213a22bbb9e4107f07eaa4956f8281\"><div class=\"ttname\"><a href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">glm::mediump_u8</a></div><div class=\"ttdeci\">uint8 mediump_u8</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00090\">fwd.hpp:90</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab0feb11edd0d3ab3e8ed996d349a5066\"><div class=\"ttname\"><a href=\"a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066\">glm::lowp_fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, lowp &gt; lowp_fmat2x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00630\">fwd.hpp:630</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4824e3ddf6e608117dfe4809430737b4\"><div class=\"ttname\"><a href=\"a00304.html#ga4824e3ddf6e608117dfe4809430737b4\">glm::highp_i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, highp &gt; highp_i8vec4</div><div class=\"ttdoc\">High qualifier 8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00235\">fwd.hpp:235</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6fccc89c34045c86339f6fa781ce96de\"><div class=\"ttname\"><a href=\"a00304.html#ga6fccc89c34045c86339f6fa781ce96de\">glm::lowp_u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, lowp &gt; lowp_u64vec4</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00387\">fwd.hpp:387</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2c94aeae3457325944ca1059b0b68330\"><div class=\"ttname\"><a href=\"a00304.html#ga2c94aeae3457325944ca1059b0b68330\">glm::mediump_i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, mediump &gt; mediump_i64vec2</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00288\">fwd.hpp:288</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga58c4631421e323e252fc716b6103e38c\"><div class=\"ttname\"><a href=\"a00304.html#ga58c4631421e323e252fc716b6103e38c\">glm::highp_f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, highp &gt; highp_f64mat4x2</div><div class=\"ttdoc\">High double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00776\">fwd.hpp:776</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gad72e13d669d039f12ae5afa23148adc1\"><div class=\"ttname\"><a href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">glm::highp_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, highp &gt; highp_mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00028\">matrix_float4x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga80e72fe94c88498537e8158ba7591c54\"><div class=\"ttname\"><a href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">glm::mediump_int16_t</a></div><div class=\"ttdeci\">int16 mediump_int16_t</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00055\">fwd.hpp:55</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga552a6bde5e75984efb0f863278da2e54\"><div class=\"ttname\"><a href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">glm::lowp_i8</a></div><div class=\"ttdeci\">int8 lowp_i8</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00031\">fwd.hpp:31</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gab68b66e6d2c37b804d0baf970fa4f0e5\"><div class=\"ttname\"><a href=\"a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5\">glm::highp_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, highp &gt; highp_mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00095_source.html#l00028\">matrix_float4x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga667948cfe6fb3d6606c750729ec49f77\"><div class=\"ttname\"><a href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">glm::i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, defaultp &gt; i64vec3</div><div class=\"ttdoc\">64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00299\">fwd.hpp:299</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga867a3c2d99ab369a454167d2c0a24dbd\"><div class=\"ttname\"><a href=\"a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd\">glm::lowp_i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, lowp &gt; lowp_i32vec2</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00263\">fwd.hpp:263</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafcfdd74a115163af2ce1093551747352\"><div class=\"ttname\"><a href=\"a00304.html#gafcfdd74a115163af2ce1093551747352\">glm::highp_f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, highp &gt; highp_f64quat</div><div class=\"ttdoc\">High double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00814\">fwd.hpp:814</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaefb0fc7a4960b782c18708bb6b655262\"><div class=\"ttname\"><a href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">glm::mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, defaultp &gt; mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00090_source.html#l00020\">matrix_float3x3.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8ebc04ecf6440c4ee24718a16600ce6b\"><div class=\"ttname\"><a href=\"a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b\">glm::mediump_f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, mediump &gt; mediump_f64vec2</div><div class=\"ttdoc\">Medium double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00492\">fwd.hpp:492</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacf54c3330ef60aa3d16cb676c7bcb8c7\"><div class=\"ttname\"><a href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">glm::highp_uint16_t</a></div><div class=\"ttdeci\">uint16 highp_uint16_t</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00114\">fwd.hpp:114</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga346b2336fff168a7e0df1583aae3e5a5\"><div class=\"ttname\"><a href=\"a00304.html#ga346b2336fff168a7e0df1583aae3e5a5\">glm::lowp_fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, lowp &gt; lowp_fvec1</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00426\">fwd.hpp:426</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga302ec977b0c0c3ea245b6c9275495355\"><div class=\"ttname\"><a href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">glm::i8</a></div><div class=\"ttdeci\">int8 i8</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00034\">fwd.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9b170dd4a8f38448a2dc93987c7875e9\"><div class=\"ttname\"><a href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">glm::mediump_uint64_t</a></div><div class=\"ttdeci\">uint64 mediump_uint64_t</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00141\">fwd.hpp:141</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga659f372ccb8307d5db5beca942cde5e8\"><div class=\"ttname\"><a href=\"a00304.html#ga659f372ccb8307d5db5beca942cde5e8\">glm::mediump_u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, mediump &gt; mediump_u64vec1</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00389\">fwd.hpp:389</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf9020c6176a75bc84828ab01ea7dac25\"><div class=\"ttname\"><a href=\"a00304.html#gaf9020c6176a75bc84828ab01ea7dac25\">glm::mediump_f32mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, mediump &gt; mediump_f32mat2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00544\">fwd.hpp:544</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga92a204c37e66ac6c1dc7ae91142f2ea5\"><div class=\"ttname\"><a href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">glm::mediump_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, mediump &gt; mediump_ivec4</div><div class=\"ttdoc\">4 components vector of medium qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00221_source.html#l00022\">vector_int4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"><div class=\"ttname\"><a href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">glm::highp_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, highp &gt; highp_mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00087_source.html#l00028\">matrix_float2x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadfe65c78231039e90507770db50c98c7\"><div class=\"ttname\"><a href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">glm::mediump_uint8_t</a></div><div class=\"ttdeci\">uint8 mediump_uint8_t</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00099\">fwd.hpp:99</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6d40381d78472553f878f66e443feeef\"><div class=\"ttname\"><a href=\"a00304.html#ga6d40381d78472553f878f66e443feeef\">glm::mediump_f64</a></div><div class=\"ttdeci\">double mediump_f64</div><div class=\"ttdoc\">Medium 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00164\">fwd.hpp:164</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga367964fc2133d3f1b5b3755ff9cf6c9b\"><div class=\"ttname\"><a href=\"a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b\">glm::mediump_fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, mediump &gt; mediump_fvec1</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00431\">fwd.hpp:431</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2885a6c89916911e418c06bb76b9bdbb\"><div class=\"ttname\"><a href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">glm::mediump_uint16</a></div><div class=\"ttdeci\">uint16 mediump_uint16</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00109\">fwd.hpp:109</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae0b75ad0fed8c00ddc0b5ce335d31060\"><div class=\"ttname\"><a href=\"a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060\">glm::highp_u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, highp &gt; highp_u8vec4</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00337\">fwd.hpp:337</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00036.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: geometric.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">geometric.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00036_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaeeec0794212fe84fc9d261de067c9587\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaeeec0794212fe84fc9d261de067c9587\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#gaeeec0794212fe84fc9d261de067c9587\">cross</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gaeeec0794212fe84fc9d261de067c9587\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the cross product of x and y.  <a href=\"a00279.html#gaeeec0794212fe84fc9d261de067c9587\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeeec0794212fe84fc9d261de067c9587\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa68de6c53e20dfb2dac2d20197562e3f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa68de6c53e20dfb2dac2d20197562e3f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f\">distance</a> (vec&lt; L, T, Q &gt; const &amp;p0, vec&lt; L, T, Q &gt; const &amp;p1)</td></tr>\n<tr class=\"memdesc:gaa68de6c53e20dfb2dac2d20197562e3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).  <a href=\"a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa68de6c53e20dfb2dac2d20197562e3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a\">dot</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the dot product of x and y, i.e., result = x * y.  <a href=\"a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7aed0a36c738169402404a3a5d54e43b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7aed0a36c738169402404a3a5d54e43b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga7aed0a36c738169402404a3a5d54e43b\">faceforward</a> (vec&lt; L, T, Q &gt; const &amp;N, vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;Nref)</td></tr>\n<tr class=\"memdesc:ga7aed0a36c738169402404a3a5d54e43b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">If dot(Nref, I) &lt; 0.0, return N, otherwise, return -N.  <a href=\"a00279.html#ga7aed0a36c738169402404a3a5d54e43b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7aed0a36c738169402404a3a5d54e43b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0cdabbb000834d994a1d6dc56f8f5263\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0cdabbb000834d994a1d6dc56f8f5263\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263\">length</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga0cdabbb000834d994a1d6dc56f8f5263\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the length of x, i.e., sqrt(x * x).  <a href=\"a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0cdabbb000834d994a1d6dc56f8f5263\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b8d3dcae77870781392ed2902cce597\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3b8d3dcae77870781392ed2902cce597\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga3b8d3dcae77870781392ed2902cce597\">normalize</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga3b8d3dcae77870781392ed2902cce597\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a vector in the same direction as x but with length of 1.  <a href=\"a00279.html#ga3b8d3dcae77870781392ed2902cce597\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3b8d3dcae77870781392ed2902cce597\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5631dd1d5618de5450b1ea3cf3e94905\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5631dd1d5618de5450b1ea3cf3e94905\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905\">reflect</a> (vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;N)</td></tr>\n<tr class=\"memdesc:ga5631dd1d5618de5450b1ea3cf3e94905\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">For the incident vector I and surface orientation N, returns the reflection direction : result = I - 2.0 * dot(N, I) * N.  <a href=\"a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5631dd1d5618de5450b1ea3cf3e94905\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga01da3dff9e2ef6b9d4915c3047e22b74\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga01da3dff9e2ef6b9d4915c3047e22b74\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74\">refract</a> (vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;N, T eta)</td></tr>\n<tr class=\"memdesc:ga01da3dff9e2ef6b9d4915c3047e22b74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">For the incident vector I and surface normal N, and the ratio of indices of refraction eta, return the refraction vector.  <a href=\"a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74\">More...</a><br /></td></tr>\n<tr class=\"separator:ga01da3dff9e2ef6b9d4915c3047e22b74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00036_source.html\">geometric.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00036_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: geometric.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">geometric.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00036.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00180.html\">detail/type_vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263\">length</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f\">distance</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; p0, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; p1);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a\">dot</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00279.html#gaeeec0794212fe84fc9d261de067c9587\">cross</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00279.html#ga3b8d3dcae77870781392ed2902cce597\">normalize</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00279.html#ga7aed0a36c738169402404a3a5d54e43b\">faceforward</a>(</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; N,</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; I,</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Nref);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905\">reflect</a>(</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; I,</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; N);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74\">refract</a>(</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; I,</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; N,</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                T eta);</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"preprocessor\">#include &quot;detail/func_geometric.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00279_html_ga5631dd1d5618de5450b1ea3cf3e94905\"><div class=\"ttname\"><a href=\"a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905\">glm::reflect</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; reflect(vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;N)</div><div class=\"ttdoc\">For the incident vector I and surface orientation N, returns the reflection direction : result = I - ...</div></div>\n<div class=\"ttc\" id=\"a00279_html_ga7aed0a36c738169402404a3a5d54e43b\"><div class=\"ttname\"><a href=\"a00279.html#ga7aed0a36c738169402404a3a5d54e43b\">glm::faceforward</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; faceforward(vec&lt; L, T, Q &gt; const &amp;N, vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;Nref)</div><div class=\"ttdoc\">If dot(Nref, I) < 0.0, return N, otherwise, return -N. </div></div>\n<div class=\"ttc\" id=\"a00279_html_ga0cdabbb000834d994a1d6dc56f8f5263\"><div class=\"ttname\"><a href=\"a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the length of x, i.e., sqrt(x * x). </div></div>\n<div class=\"ttc\" id=\"a00279_html_gaeeec0794212fe84fc9d261de067c9587\"><div class=\"ttname\"><a href=\"a00279.html#gaeeec0794212fe84fc9d261de067c9587\">glm::cross</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; cross(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the cross product of x and y. </div></div>\n<div class=\"ttc\" id=\"a00279_html_ga01da3dff9e2ef6b9d4915c3047e22b74\"><div class=\"ttname\"><a href=\"a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74\">glm::refract</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; refract(vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;N, T eta)</div><div class=\"ttdoc\">For the incident vector I and surface normal N, and the ratio of indices of refraction eta...</div></div>\n<div class=\"ttc\" id=\"a00279_html_ga3b8d3dcae77870781392ed2902cce597\"><div class=\"ttname\"><a href=\"a00279.html#ga3b8d3dcae77870781392ed2902cce597\">glm::normalize</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; normalize(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a vector in the same direction as x but with length of 1. </div></div>\n<div class=\"ttc\" id=\"a00180_html\"><div class=\"ttname\"><a href=\"a00180.html\">type_vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00279_html_gaa68de6c53e20dfb2dac2d20197562e3f\"><div class=\"ttname\"><a href=\"a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f\">glm::distance</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T distance(vec&lt; L, T, Q &gt; const &amp;p0, vec&lt; L, T, Q &gt; const &amp;p1)</div><div class=\"ttdoc\">Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). </div></div>\n<div class=\"ttc\" id=\"a00279_html_gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><div class=\"ttname\"><a href=\"a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a\">glm::dot</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T dot(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the dot product of x and y, i.e., result = x * y. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00037.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: glm.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">glm.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00037_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00037_source.html\">glm.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00037_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: glm.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">glm.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00037.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"preprocessor\">#include &quot;detail/_fixes.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;<span class=\"preprocessor\">#include &quot;detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;<span class=\"preprocessor\">#include &lt;cmath&gt;</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"preprocessor\">#include &lt;climits&gt;</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;<span class=\"preprocessor\">#include &lt;cfloat&gt;</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;<span class=\"preprocessor\">#include &lt;cassert&gt;</span></div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;<span class=\"preprocessor\">#include &quot;fwd.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00184.html\">vec2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00185.html\">vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00186.html\">vec4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00048.html\">mat2x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00049.html\">mat2x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00050.html\">mat2x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00051.html\">mat3x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00052.html\">mat3x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00053.html\">mat3x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00054.html\">mat4x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00055.html\">mat4x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00056.html\">mat4x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00160.html\">trigonometric.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00026.html\">exponential.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00015.html\">common.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00120.html\">packing.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00036.html\">geometric.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00057.html\">matrix.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00225.html\">vector_relational.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00043.html\">integer.hpp</a>&quot;</span></div>\n<div class=\"ttc\" id=\"a00056_html\"><div class=\"ttname\"><a href=\"a00056.html\">mat4x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00015_html\"><div class=\"ttname\"><a href=\"a00015.html\">common.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00050_html\"><div class=\"ttname\"><a href=\"a00050.html\">mat2x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00055_html\"><div class=\"ttname\"><a href=\"a00055.html\">mat4x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00184_html\"><div class=\"ttname\"><a href=\"a00184.html\">vec2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00043_html\"><div class=\"ttname\"><a href=\"a00043.html\">integer.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00026_html\"><div class=\"ttname\"><a href=\"a00026.html\">exponential.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00120_html\"><div class=\"ttname\"><a href=\"a00120.html\">packing.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00049_html\"><div class=\"ttname\"><a href=\"a00049.html\">mat2x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00054_html\"><div class=\"ttname\"><a href=\"a00054.html\">mat4x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00225_html\"><div class=\"ttname\"><a href=\"a00225.html\">vector_relational.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00052_html\"><div class=\"ttname\"><a href=\"a00052.html\">mat3x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00057_html\"><div class=\"ttname\"><a href=\"a00057.html\">matrix.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00186_html\"><div class=\"ttname\"><a href=\"a00186.html\">vec4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00160_html\"><div class=\"ttname\"><a href=\"a00160.html\">trigonometric.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00053_html\"><div class=\"ttname\"><a href=\"a00053.html\">mat3x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00051_html\"><div class=\"ttname\"><a href=\"a00051.html\">mat3x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00185_html\"><div class=\"ttname\"><a href=\"a00185.html\">vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00048_html\"><div class=\"ttname\"><a href=\"a00048.html\">mat2x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00036_html\"><div class=\"ttname\"><a href=\"a00036.html\">geometric.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00038.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: gradient_paint.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gradient_paint.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00327.html\">GLM_GTX_gradient_paint</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00038_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga849241df1e55129b8ce9476200307419\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga849241df1e55129b8ce9476200307419\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00327.html#ga849241df1e55129b8ce9476200307419\">linearGradient</a> (vec&lt; 2, T, Q &gt; const &amp;Point0, vec&lt; 2, T, Q &gt; const &amp;Point1, vec&lt; 2, T, Q &gt; const &amp;Position)</td></tr>\n<tr class=\"memdesc:ga849241df1e55129b8ce9476200307419\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a color from a linear gradient.  <a href=\"a00327.html#ga849241df1e55129b8ce9476200307419\">More...</a><br /></td></tr>\n<tr class=\"separator:ga849241df1e55129b8ce9476200307419\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaecb1e93de4cbe0758b882812d4da294\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaaecb1e93de4cbe0758b882812d4da294\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00327.html#gaaecb1e93de4cbe0758b882812d4da294\">radialGradient</a> (vec&lt; 2, T, Q &gt; const &amp;Center, T const &amp;Radius, vec&lt; 2, T, Q &gt; const &amp;Focal, vec&lt; 2, T, Q &gt; const &amp;Position)</td></tr>\n<tr class=\"memdesc:gaaecb1e93de4cbe0758b882812d4da294\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a color from a radial gradient.  <a href=\"a00327.html#gaaecb1e93de4cbe0758b882812d4da294\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaecb1e93de4cbe0758b882812d4da294\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00327.html\">GLM_GTX_gradient_paint</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00347.html\" title=\"Include <glm/gtx/optimum_pow.hpp> to use the features of this extension. \">GLM_GTX_optimum_pow</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00038_source.html\">gradient_paint.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00038_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: gradient_paint.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gradient_paint.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00038.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/optimum_pow.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_gradient_paint is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_gradient_paint extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00327.html#gaaecb1e93de4cbe0758b882812d4da294\">radialGradient</a>(</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; Center,</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                T <span class=\"keyword\">const</span>&amp; Radius,</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; Focal,</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; Position);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00327.html#ga849241df1e55129b8ce9476200307419\">linearGradient</a>(</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; Point0,</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; Point1,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; Position);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"preprocessor\">#include &quot;gradient_paint.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00327_html_gaaecb1e93de4cbe0758b882812d4da294\"><div class=\"ttname\"><a href=\"a00327.html#gaaecb1e93de4cbe0758b882812d4da294\">glm::radialGradient</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T radialGradient(vec&lt; 2, T, Q &gt; const &amp;Center, T const &amp;Radius, vec&lt; 2, T, Q &gt; const &amp;Focal, vec&lt; 2, T, Q &gt; const &amp;Position)</div><div class=\"ttdoc\">Return a color from a radial gradient. </div></div>\n<div class=\"ttc\" id=\"a00327_html_ga849241df1e55129b8ce9476200307419\"><div class=\"ttname\"><a href=\"a00327.html#ga849241df1e55129b8ce9476200307419\">glm::linearGradient</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T linearGradient(vec&lt; 2, T, Q &gt; const &amp;Point0, vec&lt; 2, T, Q &gt; const &amp;Point1, vec&lt; 2, T, Q &gt; const &amp;Position)</div><div class=\"ttdoc\">Return a color from a linear gradient. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00039.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: handed_coordinate_space.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">handed_coordinate_space.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00328.html\">GLM_GTX_handed_coordinate_space</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00039_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga6f1bad193b9a3b048543d1935cf04dd3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6f1bad193b9a3b048543d1935cf04dd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3\">leftHanded</a> (vec&lt; 3, T, Q &gt; const &amp;tangent, vec&lt; 3, T, Q &gt; const &amp;binormal, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga6f1bad193b9a3b048543d1935cf04dd3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return if a trihedron left handed or not.  <a href=\"a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6f1bad193b9a3b048543d1935cf04dd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99386a5ab5491871b947076e21699cc8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga99386a5ab5491871b947076e21699cc8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00328.html#ga99386a5ab5491871b947076e21699cc8\">rightHanded</a> (vec&lt; 3, T, Q &gt; const &amp;tangent, vec&lt; 3, T, Q &gt; const &amp;binormal, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga99386a5ab5491871b947076e21699cc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return if a trihedron right handed or not.  <a href=\"a00328.html#ga99386a5ab5491871b947076e21699cc8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99386a5ab5491871b947076e21699cc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00328.html\">GLM_GTX_handed_coordinate_space</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00039_source.html\">handed_coordinate_space.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00039_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: handed_coordinate_space.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">handed_coordinate_space.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00039.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_handed_coordinate_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_handed_coordinate_space extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00328.html#ga99386a5ab5491871b947076e21699cc8\">rightHanded</a>(</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; tangent,</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; binormal,</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; normal);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3\">leftHanded</a>(</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; tangent,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; binormal,</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; normal);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"preprocessor\">#include &quot;handed_coordinate_space.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00328_html_ga6f1bad193b9a3b048543d1935cf04dd3\"><div class=\"ttname\"><a href=\"a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3\">glm::leftHanded</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool leftHanded(vec&lt; 3, T, Q &gt; const &amp;tangent, vec&lt; 3, T, Q &gt; const &amp;binormal, vec&lt; 3, T, Q &gt; const &amp;normal)</div><div class=\"ttdoc\">Return if a trihedron left handed or not. </div></div>\n<div class=\"ttc\" id=\"a00328_html_ga99386a5ab5491871b947076e21699cc8\"><div class=\"ttname\"><a href=\"a00328.html#ga99386a5ab5491871b947076e21699cc8\">glm::rightHanded</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool rightHanded(vec&lt; 3, T, Q &gt; const &amp;tangent, vec&lt; 3, T, Q &gt; const &amp;binormal, vec&lt; 3, T, Q &gt; const &amp;normal)</div><div class=\"ttdoc\">Return if a trihedron right handed or not. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00040.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: hash.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">hash.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00329.html\">GLM_GTX_hash</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00040_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00329.html\">GLM_GTX_hash</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00040_source.html\">hash.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00040_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: hash.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">hash.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00040.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_hash is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_hash extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &lt;functional&gt;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/dual_quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#if !GLM_HAS_CXX11_STL</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">#       error &quot;GLM_GTX_hash requires C++11 standard library support&quot;</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00240.html\">std</a></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::vec&lt;1, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::vec&lt;2, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::vec&lt;3, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::vec&lt;4, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::qua&lt;T,Q&gt;&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::tdualquat&lt;T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::tdualquat&lt;T,Q&gt; <span class=\"keyword\">const</span>&amp; q) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;2, 2, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;2, 2, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;2, 3, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;2, 3, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;2, 4, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;2, 4, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;3, 2, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;3, 2, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;3, 3, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;3, 3, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;3, 4, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;3, 4, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;4, 2, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;4, 2, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;4, 3, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;4, 3, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, glm::qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        <span class=\"keyword\">struct </span>hash&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::mat&lt;4, 4, T,Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;                GLM_FUNC_DECL <span class=\"keywordtype\">size_t</span> operator()(glm::mat&lt;4, 4, T,Q&gt; <span class=\"keyword\">const</span>&amp; m) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;} <span class=\"comment\">// namespace std</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"preprocessor\">#include &quot;hash.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00240_html\"><div class=\"ttname\"><a href=\"a00240.html\">std</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00040_source.html#l00049\">hash.hpp:49</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00041.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: integer.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/integer.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00292.html\">GLM_GTC_integer</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00041_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga57824268ebe13a922f1d69a5d37f637f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga57824268ebe13a922f1d69a5d37f637f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00292.html#ga57824268ebe13a922f1d69a5d37f637f\">iround</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga57824268ebe13a922f1d69a5d37f637f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x.  <a href=\"a00292.html#ga57824268ebe13a922f1d69a5d37f637f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga57824268ebe13a922f1d69a5d37f637f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bd682e74bfacb005c735305207ec417\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga9bd682e74bfacb005c735305207ec417\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00292.html#ga9bd682e74bfacb005c735305207ec417\">log2</a> (genIUType x)</td></tr>\n<tr class=\"memdesc:ga9bd682e74bfacb005c735305207ec417\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the log2 of x for integer values.  <a href=\"a00292.html#ga9bd682e74bfacb005c735305207ec417\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9bd682e74bfacb005c735305207ec417\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6715b9d573972a0f7763d30d45bcaec4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6715b9d573972a0f7763d30d45bcaec4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00292.html#ga6715b9d573972a0f7763d30d45bcaec4\">uround</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga6715b9d573972a0f7763d30d45bcaec4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x.  <a href=\"a00292.html#ga6715b9d573972a0f7763d30d45bcaec4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6715b9d573972a0f7763d30d45bcaec4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00292.html\">GLM_GTC_integer</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00292.html\" title=\"Include <glm/gtc/integer.hpp> to use the features of this extension. \">GLM_GTC_integer</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00041_source.html\">gtc/integer.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00041_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: integer.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/integer.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00041.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../integer.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../exponential.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_integer extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00292.html#ga9bd682e74bfacb005c735305207ec417\">log2</a>(genIUType x);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL vec&lt;L, int, Q&gt; <a class=\"code\" href=\"a00292.html#ga57824268ebe13a922f1d69a5d37f637f\">iround</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        GLM_FUNC_DECL vec&lt;L, uint, Q&gt; <a class=\"code\" href=\"a00292.html#ga6715b9d573972a0f7763d30d45bcaec4\">uround</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#include &quot;integer.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00292_html_ga6715b9d573972a0f7763d30d45bcaec4\"><div class=\"ttname\"><a href=\"a00292.html#ga6715b9d573972a0f7763d30d45bcaec4\">glm::uround</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt; uround(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a value equal to the nearest integer to x. </div></div>\n<div class=\"ttc\" id=\"a00292_html_ga9bd682e74bfacb005c735305207ec417\"><div class=\"ttname\"><a href=\"a00292.html#ga9bd682e74bfacb005c735305207ec417\">glm::log2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genIUType log2(genIUType x)</div><div class=\"ttdoc\">Returns the log2 of x for integer values. </div></div>\n<div class=\"ttc\" id=\"a00292_html_ga57824268ebe13a922f1d69a5d37f637f\"><div class=\"ttname\"><a href=\"a00292.html#ga57824268ebe13a922f1d69a5d37f637f\">glm::iround</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, int, Q &gt; iround(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns a value equal to the nearest integer to x. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00042.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: integer.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/integer.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00330.html\">GLM_GTX_integer</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00042_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gada7e83fdfe943aba4f1d5bf80cb66f40\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef signed int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40\">sint</a></td></tr>\n<tr class=\"memdesc:gada7e83fdfe943aba4f1d5bf80cb66f40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32bit signed integer.  <a href=\"a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40\">More...</a><br /></td></tr>\n<tr class=\"separator:gada7e83fdfe943aba4f1d5bf80cb66f40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8cbd3120905f398ec321b5d1836e08fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8cbd3120905f398ec321b5d1836e08fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga8cbd3120905f398ec321b5d1836e08fb\">factorial</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8cbd3120905f398ec321b5d1836e08fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension.  <a href=\"a00330.html#ga8cbd3120905f398ec321b5d1836e08fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8cbd3120905f398ec321b5d1836e08fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7011b4e1c1e1ed492149b028feacc00e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL unsigned int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga7011b4e1c1e1ed492149b028feacc00e\">floor_log2</a> (unsigned int x)</td></tr>\n<tr class=\"memdesc:ga7011b4e1c1e1ed492149b028feacc00e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the floor log2 of x.  <a href=\"a00330.html#ga7011b4e1c1e1ed492149b028feacc00e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7011b4e1c1e1ed492149b028feacc00e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaabfbb41531ab7ad8d06fc176edfba785\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#gaabfbb41531ab7ad8d06fc176edfba785\">mod</a> (int x, int y)</td></tr>\n<tr class=\"memdesc:gaabfbb41531ab7ad8d06fc176edfba785\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modulus.  <a href=\"a00330.html#gaabfbb41531ab7ad8d06fc176edfba785\">More...</a><br /></td></tr>\n<tr class=\"separator:gaabfbb41531ab7ad8d06fc176edfba785\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63fc8d63e7da1706439233b386ba8b6f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga63fc8d63e7da1706439233b386ba8b6f\">mod</a> (uint x, uint y)</td></tr>\n<tr class=\"memdesc:ga63fc8d63e7da1706439233b386ba8b6f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modulus.  <a href=\"a00330.html#ga63fc8d63e7da1706439233b386ba8b6f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga63fc8d63e7da1706439233b386ba8b6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78dff8bdb361bf0061194c93e003d189\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga78dff8bdb361bf0061194c93e003d189\">nlz</a> (uint x)</td></tr>\n<tr class=\"memdesc:ga78dff8bdb361bf0061194c93e003d189\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the number of leading zeros.  <a href=\"a00330.html#ga78dff8bdb361bf0061194c93e003d189\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78dff8bdb361bf0061194c93e003d189\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga465016030a81d513fa2fac881ebdaa83\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga465016030a81d513fa2fac881ebdaa83\">pow</a> (int x, uint y)</td></tr>\n<tr class=\"memdesc:ga465016030a81d513fa2fac881ebdaa83\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the y power.  <a href=\"a00330.html#ga465016030a81d513fa2fac881ebdaa83\">More...</a><br /></td></tr>\n<tr class=\"separator:ga465016030a81d513fa2fac881ebdaa83\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga998e5ee915d3769255519e2fbaa2bbf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0\">pow</a> (uint x, uint y)</td></tr>\n<tr class=\"memdesc:ga998e5ee915d3769255519e2fbaa2bbf0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the y power.  <a href=\"a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga998e5ee915d3769255519e2fbaa2bbf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ce36693a75879ccd9bb10167cfa722d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga7ce36693a75879ccd9bb10167cfa722d\">sqrt</a> (int x)</td></tr>\n<tr class=\"memdesc:ga7ce36693a75879ccd9bb10167cfa722d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the positive square root of x.  <a href=\"a00330.html#ga7ce36693a75879ccd9bb10167cfa722d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ce36693a75879ccd9bb10167cfa722d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1975d318978d6dacf78b6444fa5ed7bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc\">sqrt</a> (uint x)</td></tr>\n<tr class=\"memdesc:ga1975d318978d6dacf78b6444fa5ed7bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the positive square root of x.  <a href=\"a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1975d318978d6dacf78b6444fa5ed7bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00330.html\">GLM_GTX_integer</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00042_source.html\">gtx/integer.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00042_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: integer.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/integer.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00042.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/integer.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_integer is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_integer extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0\">pow</a>(<span class=\"keywordtype\">int</span> x, uint y);</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc\">sqrt</a>(<span class=\"keywordtype\">int</span> x);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00330.html#ga7011b4e1c1e1ed492149b028feacc00e\">floor_log2</a>(<span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> x);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00330.html#ga63fc8d63e7da1706439233b386ba8b6f\">mod</a>(<span class=\"keywordtype\">int</span> x, <span class=\"keywordtype\">int</span> y);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00330.html#ga8cbd3120905f398ec321b5d1836e08fb\">factorial</a>(genType <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40\">   55</a></span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">int</span>                                      <a class=\"code\" href=\"a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40\">sint</a>;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0\">pow</a>(uint x, uint y);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc\">sqrt</a>(uint x);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00330.html#ga63fc8d63e7da1706439233b386ba8b6f\">mod</a>(uint x, uint y);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00330.html#ga78dff8bdb361bf0061194c93e003d189\">nlz</a>(uint x);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\">#include &quot;integer.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00330_html_ga78dff8bdb361bf0061194c93e003d189\"><div class=\"ttname\"><a href=\"a00330.html#ga78dff8bdb361bf0061194c93e003d189\">glm::nlz</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint nlz(uint x)</div><div class=\"ttdoc\">Returns the number of leading zeros. </div></div>\n<div class=\"ttc\" id=\"a00330_html_ga63fc8d63e7da1706439233b386ba8b6f\"><div class=\"ttname\"><a href=\"a00330.html#ga63fc8d63e7da1706439233b386ba8b6f\">glm::mod</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint mod(uint x, uint y)</div><div class=\"ttdoc\">Modulus. </div></div>\n<div class=\"ttc\" id=\"a00330_html_ga7011b4e1c1e1ed492149b028feacc00e\"><div class=\"ttname\"><a href=\"a00330.html#ga7011b4e1c1e1ed492149b028feacc00e\">glm::floor_log2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL unsigned int floor_log2(unsigned int x)</div><div class=\"ttdoc\">Returns the floor log2 of x. </div></div>\n<div class=\"ttc\" id=\"a00330_html_gada7e83fdfe943aba4f1d5bf80cb66f40\"><div class=\"ttname\"><a href=\"a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40\">glm::sint</a></div><div class=\"ttdeci\">signed int sint</div><div class=\"ttdoc\">32bit signed integer. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00042_source.html#l00055\">gtx/integer.hpp:55</a></div></div>\n<div class=\"ttc\" id=\"a00330_html_ga8cbd3120905f398ec321b5d1836e08fb\"><div class=\"ttname\"><a href=\"a00330.html#ga8cbd3120905f398ec321b5d1836e08fb\">glm::factorial</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType factorial(genType const &amp;x)</div><div class=\"ttdoc\">Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension...</div></div>\n<div class=\"ttc\" id=\"a00330_html_ga998e5ee915d3769255519e2fbaa2bbf0\"><div class=\"ttname\"><a href=\"a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0\">glm::pow</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint pow(uint x, uint y)</div><div class=\"ttdoc\">Returns x raised to the y power. </div></div>\n<div class=\"ttc\" id=\"a00330_html_ga1975d318978d6dacf78b6444fa5ed7bc\"><div class=\"ttname\"><a href=\"a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc\">glm::sqrt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint sqrt(uint x)</div><div class=\"ttdoc\">Returns the positive square root of x. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00043.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: integer.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">integer.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00043_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga44abfe3379e11cbd29425a843420d0d6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga44abfe3379e11cbd29425a843420d0d6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga44abfe3379e11cbd29425a843420d0d6\">bitCount</a> (genType v)</td></tr>\n<tr class=\"memdesc:ga44abfe3379e11cbd29425a843420d0d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the number of bits set to 1 in the binary representation of value.  <a href=\"a00370.html#ga44abfe3379e11cbd29425a843420d0d6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga44abfe3379e11cbd29425a843420d0d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5\">bitCount</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the number of bits set to 1 in the binary representation of value.  <a href=\"a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga346b25ab11e793e91a4a69c8aa6819f2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga346b25ab11e793e91a4a69c8aa6819f2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2\">bitfieldExtract</a> (vec&lt; L, T, Q &gt; const &amp;Value, int Offset, int Bits)</td></tr>\n<tr class=\"memdesc:ga346b25ab11e793e91a4a69c8aa6819f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of the result.  <a href=\"a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga346b25ab11e793e91a4a69c8aa6819f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e82992340d421fadb61a473df699b20\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2e82992340d421fadb61a473df699b20\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga2e82992340d421fadb61a473df699b20\">bitfieldInsert</a> (vec&lt; L, T, Q &gt; const &amp;Base, vec&lt; L, T, Q &gt; const &amp;Insert, int Offset, int Bits)</td></tr>\n<tr class=\"memdesc:ga2e82992340d421fadb61a473df699b20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the insertion the bits least-significant bits of insert into base.  <a href=\"a00370.html#ga2e82992340d421fadb61a473df699b20\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e82992340d421fadb61a473df699b20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga750a1d92464489b7711dee67aa3441b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga750a1d92464489b7711dee67aa3441b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga750a1d92464489b7711dee67aa3441b6\">bitfieldReverse</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga750a1d92464489b7711dee67aa3441b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the reversal of the bits of value.  <a href=\"a00370.html#ga750a1d92464489b7711dee67aa3441b6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga750a1d92464489b7711dee67aa3441b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf74c4d969fa34ab8acb9d390f5ca5274\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gaf74c4d969fa34ab8acb9d390f5ca5274\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gaf74c4d969fa34ab8acb9d390f5ca5274\">findLSB</a> (genIUType x)</td></tr>\n<tr class=\"memdesc:gaf74c4d969fa34ab8acb9d390f5ca5274\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the least significant bit set to 1 in the binary representation of value.  <a href=\"a00370.html#gaf74c4d969fa34ab8acb9d390f5ca5274\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf74c4d969fa34ab8acb9d390f5ca5274\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4454c0331d6369888c28ab677f4810c7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4454c0331d6369888c28ab677f4810c7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga4454c0331d6369888c28ab677f4810c7\">findLSB</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4454c0331d6369888c28ab677f4810c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the least significant bit set to 1 in the binary representation of value.  <a href=\"a00370.html#ga4454c0331d6369888c28ab677f4810c7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4454c0331d6369888c28ab677f4810c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7e4a794d766861c70bc961630f8ef621\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga7e4a794d766861c70bc961630f8ef621\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga7e4a794d766861c70bc961630f8ef621\">findMSB</a> (genIUType x)</td></tr>\n<tr class=\"memdesc:ga7e4a794d766861c70bc961630f8ef621\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the most significant bit in the binary representation of value.  <a href=\"a00370.html#ga7e4a794d766861c70bc961630f8ef621\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7e4a794d766861c70bc961630f8ef621\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39ac4d52028bb6ab08db5ad6562c2872\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga39ac4d52028bb6ab08db5ad6562c2872\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872\">findMSB</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga39ac4d52028bb6ab08db5ad6562c2872\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the most significant bit in the binary representation of value.  <a href=\"a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872\">More...</a><br /></td></tr>\n<tr class=\"separator:ga39ac4d52028bb6ab08db5ad6562c2872\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0c510a70e852f57594a9141848642e3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac0c510a70e852f57594a9141848642e3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gac0c510a70e852f57594a9141848642e3\">imulExtended</a> (vec&lt; L, int, Q &gt; const &amp;x, vec&lt; L, int, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; &amp;msb, vec&lt; L, int, Q &gt; &amp;lsb)</td></tr>\n<tr class=\"memdesc:gac0c510a70e852f57594a9141848642e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Multiplies 32-bit integers x and y, producing a 64-bit result.  <a href=\"a00370.html#gac0c510a70e852f57594a9141848642e3\">More...</a><br /></td></tr>\n<tr class=\"separator:gac0c510a70e852f57594a9141848642e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaedcec48743632dff6786bcc492074b1b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaedcec48743632dff6786bcc492074b1b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gaedcec48743632dff6786bcc492074b1b\">uaddCarry</a> (vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;carry)</td></tr>\n<tr class=\"memdesc:gaedcec48743632dff6786bcc492074b1b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32).  <a href=\"a00370.html#gaedcec48743632dff6786bcc492074b1b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaedcec48743632dff6786bcc492074b1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga732e2fb56db57ea541c7e5c92b7121be\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga732e2fb56db57ea541c7e5c92b7121be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga732e2fb56db57ea541c7e5c92b7121be\">umulExtended</a> (vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;msb, vec&lt; L, uint, Q &gt; &amp;lsb)</td></tr>\n<tr class=\"memdesc:ga732e2fb56db57ea541c7e5c92b7121be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Multiplies 32-bit integers x and y, producing a 64-bit result.  <a href=\"a00370.html#ga732e2fb56db57ea541c7e5c92b7121be\">More...</a><br /></td></tr>\n<tr class=\"separator:ga732e2fb56db57ea541c7e5c92b7121be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae3316ba1229ad9b9f09480833321b053\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae3316ba1229ad9b9f09480833321b053\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gae3316ba1229ad9b9f09480833321b053\">usubBorrow</a> (vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;borrow)</td></tr>\n<tr class=\"memdesc:gae3316ba1229ad9b9f09480833321b053\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise.  <a href=\"a00370.html#gae3316ba1229ad9b9f09480833321b053\">More...</a><br /></td></tr>\n<tr class=\"separator:gae3316ba1229ad9b9f09480833321b053\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00043_source.html\">integer.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00043_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: integer.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">integer.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00043.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00015.html\">common.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00225.html\">vector_relational.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL vec&lt;L, uint, Q&gt; <a class=\"code\" href=\"a00370.html#gaedcec48743632dff6786bcc492074b1b\">uaddCarry</a>(</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                vec&lt;L, uint, Q&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                vec&lt;L, uint, Q&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                vec&lt;L, uint, Q&gt; &amp; carry);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL vec&lt;L, uint, Q&gt; <a class=\"code\" href=\"a00370.html#gae3316ba1229ad9b9f09480833321b053\">usubBorrow</a>(</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                vec&lt;L, uint, Q&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                vec&lt;L, uint, Q&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                vec&lt;L, uint, Q&gt; &amp; borrow);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00370.html#ga732e2fb56db57ea541c7e5c92b7121be\">umulExtended</a>(</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                vec&lt;L, uint, Q&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                vec&lt;L, uint, Q&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                vec&lt;L, uint, Q&gt; &amp; msb,</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                vec&lt;L, uint, Q&gt; &amp; lsb);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00370.html#gac0c510a70e852f57594a9141848642e3\">imulExtended</a>(</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                vec&lt;L, int, Q&gt; &amp; msb,</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                vec&lt;L, int, Q&gt; &amp; lsb);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2\">bitfieldExtract</a>(</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Value,</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                <span class=\"keywordtype\">int</span> Offset,</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                <span class=\"keywordtype\">int</span> Bits);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00370.html#ga2e82992340d421fadb61a473df699b20\">bitfieldInsert</a>(</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Base,</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Insert,</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;                <span class=\"keywordtype\">int</span> Offset,</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                <span class=\"keywordtype\">int</span> Bits);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00370.html#ga750a1d92464489b7711dee67aa3441b6\">bitfieldReverse</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5\">bitCount</a>(genType v);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        GLM_FUNC_DECL vec&lt;L, int, Q&gt; <a class=\"code\" href=\"a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5\">bitCount</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00370.html#ga4454c0331d6369888c28ab677f4810c7\">findLSB</a>(genIUType x);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;        GLM_FUNC_DECL vec&lt;L, int, Q&gt; <a class=\"code\" href=\"a00370.html#ga4454c0331d6369888c28ab677f4810c7\">findLSB</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872\">findMSB</a>(genIUType x);</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;        GLM_FUNC_DECL vec&lt;L, int, Q&gt; <a class=\"code\" href=\"a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872\">findMSB</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;<span class=\"preprocessor\">#include &quot;detail/func_integer.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00015_html\"><div class=\"ttname\"><a href=\"a00015.html\">common.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00370_html_ga39ac4d52028bb6ab08db5ad6562c2872\"><div class=\"ttname\"><a href=\"a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872\">glm::findMSB</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, int, Q &gt; findMSB(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the bit number of the most significant bit in the binary representation of value...</div></div>\n<div class=\"ttc\" id=\"a00370_html_ga732e2fb56db57ea541c7e5c92b7121be\"><div class=\"ttname\"><a href=\"a00370.html#ga732e2fb56db57ea541c7e5c92b7121be\">glm::umulExtended</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void umulExtended(vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;msb, vec&lt; L, uint, Q &gt; &amp;lsb)</div><div class=\"ttdoc\">Multiplies 32-bit integers x and y, producing a 64-bit result. </div></div>\n<div class=\"ttc\" id=\"a00370_html_gac0c510a70e852f57594a9141848642e3\"><div class=\"ttname\"><a href=\"a00370.html#gac0c510a70e852f57594a9141848642e3\">glm::imulExtended</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void imulExtended(vec&lt; L, int, Q &gt; const &amp;x, vec&lt; L, int, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; &amp;msb, vec&lt; L, int, Q &gt; &amp;lsb)</div><div class=\"ttdoc\">Multiplies 32-bit integers x and y, producing a 64-bit result. </div></div>\n<div class=\"ttc\" id=\"a00370_html_gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><div class=\"ttname\"><a href=\"a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5\">glm::bitCount</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, int, Q &gt; bitCount(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the number of bits set to 1 in the binary representation of value. </div></div>\n<div class=\"ttc\" id=\"a00370_html_gaedcec48743632dff6786bcc492074b1b\"><div class=\"ttname\"><a href=\"a00370.html#gaedcec48743632dff6786bcc492074b1b\">glm::uaddCarry</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt; uaddCarry(vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;carry)</div><div class=\"ttdoc\">Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32). </div></div>\n<div class=\"ttc\" id=\"a00370_html_ga346b25ab11e793e91a4a69c8aa6819f2\"><div class=\"ttname\"><a href=\"a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2\">glm::bitfieldExtract</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldExtract(vec&lt; L, T, Q &gt; const &amp;Value, int Offset, int Bits)</div><div class=\"ttdoc\">Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of...</div></div>\n<div class=\"ttc\" id=\"a00370_html_ga2e82992340d421fadb61a473df699b20\"><div class=\"ttname\"><a href=\"a00370.html#ga2e82992340d421fadb61a473df699b20\">glm::bitfieldInsert</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldInsert(vec&lt; L, T, Q &gt; const &amp;Base, vec&lt; L, T, Q &gt; const &amp;Insert, int Offset, int Bits)</div><div class=\"ttdoc\">Returns the insertion the bits least-significant bits of insert into base. </div></div>\n<div class=\"ttc\" id=\"a00225_html\"><div class=\"ttname\"><a href=\"a00225.html\">vector_relational.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00370_html_ga750a1d92464489b7711dee67aa3441b6\"><div class=\"ttname\"><a href=\"a00370.html#ga750a1d92464489b7711dee67aa3441b6\">glm::bitfieldReverse</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; bitfieldReverse(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the reversal of the bits of value. </div></div>\n<div class=\"ttc\" id=\"a00370_html_gae3316ba1229ad9b9f09480833321b053\"><div class=\"ttname\"><a href=\"a00370.html#gae3316ba1229ad9b9f09480833321b053\">glm::usubBorrow</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt; usubBorrow(vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;borrow)</div><div class=\"ttdoc\">Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise. </div></div>\n<div class=\"ttc\" id=\"a00370_html_ga4454c0331d6369888c28ab677f4810c7\"><div class=\"ttname\"><a href=\"a00370.html#ga4454c0331d6369888c28ab677f4810c7\">glm::findLSB</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, int, Q &gt; findLSB(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the bit number of the least significant bit set to 1 in the binary representation of value...</div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00044.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: intersect.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">intersect.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00331.html\">GLM_GTX_intersect</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00044_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\">intersectLineSphere</a> (genType const &amp;point0, genType const &amp;point1, genType const &amp;sphereCenter, typename genType::value_type sphereRadius, genType &amp;intersectionPosition1, genType &amp;intersectionNormal1, genType &amp;intersectionPosition2=genType(), genType &amp;intersectionNormal2=genType())</td></tr>\n<tr class=\"memdesc:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a line and a sphere.  <a href=\"a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9d29b9b3acb504d43986502f42740df4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9d29b9b3acb504d43986502f42740df4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#ga9d29b9b3acb504d43986502f42740df4\">intersectLineTriangle</a> (genType const &amp;orig, genType const &amp;dir, genType const &amp;vert0, genType const &amp;vert1, genType const &amp;vert2, genType &amp;position)</td></tr>\n<tr class=\"memdesc:ga9d29b9b3acb504d43986502f42740df4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a line and a triangle.  <a href=\"a00331.html#ga9d29b9b3acb504d43986502f42740df4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9d29b9b3acb504d43986502f42740df4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad3697a9700ea379739a667ea02573488\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gad3697a9700ea379739a667ea02573488\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#gad3697a9700ea379739a667ea02573488\">intersectRayPlane</a> (genType const &amp;orig, genType const &amp;dir, genType const &amp;planeOrig, genType const &amp;planeNormal, typename genType::value_type &amp;intersectionDistance)</td></tr>\n<tr class=\"memdesc:gad3697a9700ea379739a667ea02573488\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a ray and a plane.  <a href=\"a00331.html#gad3697a9700ea379739a667ea02573488\">More...</a><br /></td></tr>\n<tr class=\"separator:gad3697a9700ea379739a667ea02573488\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac88f8cd84c4bcb5b947d56acbbcfa56e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gac88f8cd84c4bcb5b947d56acbbcfa56e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#gac88f8cd84c4bcb5b947d56acbbcfa56e\">intersectRaySphere</a> (genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, typename genType::value_type const sphereRadiusSquared, typename genType::value_type &amp;intersectionDistance)</td></tr>\n<tr class=\"memdesc:gac88f8cd84c4bcb5b947d56acbbcfa56e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection distance of a ray and a sphere.  <a href=\"a00331.html#gac88f8cd84c4bcb5b947d56acbbcfa56e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac88f8cd84c4bcb5b947d56acbbcfa56e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad28c00515b823b579c608aafa1100c1d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gad28c00515b823b579c608aafa1100c1d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#gad28c00515b823b579c608aafa1100c1d\">intersectRaySphere</a> (genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, const typename genType::value_type sphereRadius, genType &amp;intersectionPosition, genType &amp;intersectionNormal)</td></tr>\n<tr class=\"memdesc:gad28c00515b823b579c608aafa1100c1d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a ray and a sphere.  <a href=\"a00331.html#gad28c00515b823b579c608aafa1100c1d\">More...</a><br /></td></tr>\n<tr class=\"separator:gad28c00515b823b579c608aafa1100c1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65bf2c594482f04881c36bc761f9e946\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga65bf2c594482f04881c36bc761f9e946\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#ga65bf2c594482f04881c36bc761f9e946\">intersectRayTriangle</a> (vec&lt; 3, T, Q &gt; const &amp;orig, vec&lt; 3, T, Q &gt; const &amp;dir, vec&lt; 3, T, Q &gt; const &amp;v0, vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 2, T, Q &gt; &amp;baryPosition, T &amp;distance)</td></tr>\n<tr class=\"memdesc:ga65bf2c594482f04881c36bc761f9e946\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a ray and a triangle.  <a href=\"a00331.html#ga65bf2c594482f04881c36bc761f9e946\">More...</a><br /></td></tr>\n<tr class=\"separator:ga65bf2c594482f04881c36bc761f9e946\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00331.html\">GLM_GTX_intersect</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00310.html\" title=\"Include <glm/gtx/closest_point.hpp> to use the features of this extension. \">GLM_GTX_closest_point</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00044_source.html\">intersect.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00044_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: intersect.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">intersect.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00044.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &lt;cfloat&gt;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/closest_point.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/vector_query.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_closest_point extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00331.html#gad3697a9700ea379739a667ea02573488\">intersectRayPlane</a>(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                genType <span class=\"keyword\">const</span>&amp; orig, genType <span class=\"keyword\">const</span>&amp; dir,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                genType <span class=\"keyword\">const</span>&amp; planeOrig, genType <span class=\"keyword\">const</span>&amp; planeNormal,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                <span class=\"keyword\">typename</span> genType::value_type &amp; intersectionDistance);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00331.html#ga65bf2c594482f04881c36bc761f9e946\">intersectRayTriangle</a>(</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; orig, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; dir,</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v0, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                vec&lt;2, T, Q&gt;&amp; baryPosition, T&amp; <a class=\"code\" href=\"a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f\">distance</a>);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00331.html#ga9d29b9b3acb504d43986502f42740df4\">intersectLineTriangle</a>(</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                genType <span class=\"keyword\">const</span>&amp; orig, genType <span class=\"keyword\">const</span>&amp; dir,</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                genType <span class=\"keyword\">const</span>&amp; vert0, genType <span class=\"keyword\">const</span>&amp; vert1, genType <span class=\"keyword\">const</span>&amp; vert2,</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                genType &amp; position);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00331.html#gad28c00515b823b579c608aafa1100c1d\">intersectRaySphere</a>(</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                genType <span class=\"keyword\">const</span>&amp; rayStarting, genType <span class=\"keyword\">const</span>&amp; rayNormalizedDirection,</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                genType <span class=\"keyword\">const</span>&amp; sphereCenter, <span class=\"keyword\">typename</span> genType::value_type <span class=\"keyword\">const</span> sphereRadiusSquared,</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                <span class=\"keyword\">typename</span> genType::value_type &amp; intersectionDistance);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00331.html#gad28c00515b823b579c608aafa1100c1d\">intersectRaySphere</a>(</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                genType <span class=\"keyword\">const</span>&amp; rayStarting, genType <span class=\"keyword\">const</span>&amp; rayNormalizedDirection,</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                genType <span class=\"keyword\">const</span>&amp; sphereCenter, <span class=\"keyword\">const</span> <span class=\"keyword\">typename</span> genType::value_type sphereRadius,</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                genType &amp; intersectionPosition, genType &amp; intersectionNormal);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\">intersectLineSphere</a>(</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                genType <span class=\"keyword\">const</span>&amp; point0, genType <span class=\"keyword\">const</span>&amp; point1,</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                genType <span class=\"keyword\">const</span>&amp; sphereCenter, <span class=\"keyword\">typename</span> genType::value_type sphereRadius,</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                genType &amp; intersectionPosition1, genType &amp; intersectionNormal1,</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                genType &amp; intersectionPosition2 = genType(), genType &amp; intersectionNormal2 = genType());</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\">#include &quot;intersect.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00331_html_ga65bf2c594482f04881c36bc761f9e946\"><div class=\"ttname\"><a href=\"a00331.html#ga65bf2c594482f04881c36bc761f9e946\">glm::intersectRayTriangle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool intersectRayTriangle(vec&lt; 3, T, Q &gt; const &amp;orig, vec&lt; 3, T, Q &gt; const &amp;dir, vec&lt; 3, T, Q &gt; const &amp;v0, vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 2, T, Q &gt; &amp;baryPosition, T &amp;distance)</div><div class=\"ttdoc\">Compute the intersection of a ray and a triangle. </div></div>\n<div class=\"ttc\" id=\"a00331_html_gad28c00515b823b579c608aafa1100c1d\"><div class=\"ttname\"><a href=\"a00331.html#gad28c00515b823b579c608aafa1100c1d\">glm::intersectRaySphere</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool intersectRaySphere(genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, const typename genType::value_type sphereRadius, genType &amp;intersectionPosition, genType &amp;intersectionNormal)</div><div class=\"ttdoc\">Compute the intersection of a ray and a sphere. </div></div>\n<div class=\"ttc\" id=\"a00331_html_gad3697a9700ea379739a667ea02573488\"><div class=\"ttname\"><a href=\"a00331.html#gad3697a9700ea379739a667ea02573488\">glm::intersectRayPlane</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool intersectRayPlane(genType const &amp;orig, genType const &amp;dir, genType const &amp;planeOrig, genType const &amp;planeNormal, typename genType::value_type &amp;intersectionDistance)</div><div class=\"ttdoc\">Compute the intersection of a ray and a plane. </div></div>\n<div class=\"ttc\" id=\"a00331_html_ga9d29b9b3acb504d43986502f42740df4\"><div class=\"ttname\"><a href=\"a00331.html#ga9d29b9b3acb504d43986502f42740df4\">glm::intersectLineTriangle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool intersectLineTriangle(genType const &amp;orig, genType const &amp;dir, genType const &amp;vert0, genType const &amp;vert1, genType const &amp;vert2, genType &amp;position)</div><div class=\"ttdoc\">Compute the intersection of a line and a triangle. </div></div>\n<div class=\"ttc\" id=\"a00331_html_ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><div class=\"ttname\"><a href=\"a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\">glm::intersectLineSphere</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool intersectLineSphere(genType const &amp;point0, genType const &amp;point1, genType const &amp;sphereCenter, typename genType::value_type sphereRadius, genType &amp;intersectionPosition1, genType &amp;intersectionNormal1, genType &amp;intersectionPosition2=genType(), genType &amp;intersectionNormal2=genType())</div><div class=\"ttdoc\">Compute the intersection of a line and a sphere. </div></div>\n<div class=\"ttc\" id=\"a00279_html_gaa68de6c53e20dfb2dac2d20197562e3f\"><div class=\"ttname\"><a href=\"a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f\">glm::distance</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T distance(vec&lt; L, T, Q &gt; const &amp;p0, vec&lt; L, T, Q &gt; const &amp;p1)</div><div class=\"ttdoc\">Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00045.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: io.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">io.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00332.html\">GLM_GTX_io</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00045_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00332.html\">GLM_GTX_io</a> </p>\n<dl class=\"section author\"><dt>Author</dt><dd>Jan P Springer (<a href=\"#\" onclick=\"location.href='mai'+'lto:'+'reg'+'ni'+'rps'+'j@'+'gma'+'il'+'.co'+'m'; return false;\">regni<span style=\"display: none;\">.nosp@m.</span>rpsj<span style=\"display: none;\">.nosp@m.</span>@gmai<span style=\"display: none;\">.nosp@m.</span>l.co<span style=\"display: none;\">.nosp@m.</span>m</a>)</dd></dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00293.html\" title=\"Include <glm/gtc/matrix_access.hpp> to use the features of this extension. \">GLM_GTC_matrix_access</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00045_source.html\">io.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00045_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: io.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">io.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00045.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_io is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_io extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#include &lt;iosfwd&gt;</span>  <span class=\"comment\">// std::basic_ostream&lt;&gt; (fwd)</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#include &lt;locale&gt;</span>  <span class=\"comment\">// std::locale, std::locale::facet, std::locale::id</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &lt;utility&gt;</span> <span class=\"comment\">// std::pair&lt;&gt;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">namespace </span>io</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                <span class=\"keyword\">enum</span> order_type { column_major, row_major};</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                <span class=\"keyword\">class </span>format_punct : <span class=\"keyword\">public</span> std::locale::facet</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                        <span class=\"keyword\">typedef</span> CTy char_type;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                        <span class=\"keyword\">static</span> std::locale::id id;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                        <span class=\"keywordtype\">bool</span>       formatted;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        <span class=\"keywordtype\">unsigned</span>   precision;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                        <span class=\"keywordtype\">unsigned</span>   width;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                        char_type  separator;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                        char_type  delim_left;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                        char_type  delim_right;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                        char_type  space;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                        char_type  newline;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                        order_type order;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> format_punct(<span class=\"keywordtype\">size_t</span> a = 0);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> format_punct(format_punct <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr = std::<span class=\"keywordtype\">char</span>_traits&lt;CTy&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                <span class=\"keyword\">class </span>basic_state_saver {</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> basic_state_saver(std::basic_ios&lt;CTy,CTr&gt;&amp;);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                        GLM_FUNC_DECL ~basic_state_saver();</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                        typedef ::std::basic_ios&lt;CTy,CTr&gt;      state_type;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                        <span class=\"keyword\">typedef</span> <span class=\"keyword\">typename</span> state_type::char_type char_type;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                        typedef ::std::ios_base::fmtflags      flags_type;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                        typedef ::std::streamsize              streamsize_type;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                        typedef ::std::locale <span class=\"keyword\">const</span>            locale_type;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                        state_type&amp;     state_;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                        flags_type      flags_;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                        streamsize_type precision_;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                        streamsize_type width_;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                        char_type       fill_;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                        locale_type     locale_;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                        GLM_FUNC_DECL basic_state_saver&amp; operator=(basic_state_saver <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                <span class=\"keyword\">typedef</span> basic_state_saver&lt;char&gt;     state_saver;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                <span class=\"keyword\">typedef</span> basic_state_saver&lt;wchar_t&gt; wstate_saver;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr = std::<span class=\"keywordtype\">char</span>_traits&lt;CTy&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                <span class=\"keyword\">class </span>basic_format_saver</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> basic_format_saver(std::basic_ios&lt;CTy,CTr&gt;&amp;);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                        GLM_FUNC_DECL ~basic_format_saver();</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                        basic_state_saver&lt;CTy&gt; <span class=\"keyword\">const</span> bss_;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                        GLM_FUNC_DECL basic_format_saver&amp; operator=(basic_format_saver <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                <span class=\"keyword\">typedef</span> basic_format_saver&lt;char&gt;     format_saver;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                <span class=\"keyword\">typedef</span> basic_format_saver&lt;wchar_t&gt; wformat_saver;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                <span class=\"keyword\">struct </span>precision</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                        <span class=\"keywordtype\">unsigned</span> value;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> precision(<span class=\"keywordtype\">unsigned</span>);</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;                <span class=\"keyword\">struct </span>width</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                        <span class=\"keywordtype\">unsigned</span> value;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> width(<span class=\"keywordtype\">unsigned</span>);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy&gt;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                <span class=\"keyword\">struct </span>delimeter</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                        CTy value[3];</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> delimeter(CTy <span class=\"comment\">/* left */</span>, CTy <span class=\"comment\">/* right */</span>, CTy <span class=\"comment\">/* separator */</span> = <span class=\"charliteral\">&#39;,&#39;</span>);</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;                <span class=\"keyword\">struct </span>order</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;                        order_type value;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> order(order_type);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;                <span class=\"comment\">// functions, inlined (inline)</span></div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> FTy, <span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr&gt;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;                FTy <span class=\"keyword\">const</span>&amp; get_facet(std::basic_ios&lt;CTy,CTr&gt;&amp;);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> FTy, <span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr&gt;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;                std::basic_ios&lt;CTy,CTr&gt;&amp; formatted(std::basic_ios&lt;CTy,CTr&gt;&amp;);</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> FTy, <span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr&gt;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;                std::basic_ios&lt;CTy,CTr&gt;&amp; unformattet(std::basic_ios&lt;CTy,CTr&gt;&amp;);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;                std::basic_ostream&lt;CTy, CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy, CTr&gt;&amp;, precision <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;                std::basic_ostream&lt;CTy, CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy, CTr&gt;&amp;, width <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr&gt;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;                std::basic_ostream&lt;CTy, CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy, CTr&gt;&amp;, delimeter&lt;CTy&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr&gt;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;                std::basic_ostream&lt;CTy, CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy, CTr&gt;&amp;, order <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        }<span class=\"comment\">//namespace io</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;2, 2, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;2, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;2, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;3, 2, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;3, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;4, 2, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;4, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt;&amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt;&amp;, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;  <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> CTy, <span class=\"keyword\">typename</span> CTr, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        GLM_FUNC_DECL std::basic_ostream&lt;CTy,CTr&gt; &amp; operator&lt;&lt;(std::basic_ostream&lt;CTy,CTr&gt; &amp;,</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;                                                         std::pair&lt;mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&gt; <span class=\"keyword\">const</span>&amp;);</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;<span class=\"preprocessor\">#include &quot;io.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00046.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: log_base.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">log_base.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00333.html\">GLM_GTX_log_base</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00046_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga60a7b0a401da660869946b2b77c710c9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga60a7b0a401da660869946b2b77c710c9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00333.html#ga60a7b0a401da660869946b2b77c710c9\">log</a> (genType const &amp;x, genType const &amp;base)</td></tr>\n<tr class=\"memdesc:ga60a7b0a401da660869946b2b77c710c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Logarithm for any base.  <a href=\"a00333.html#ga60a7b0a401da660869946b2b77c710c9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga60a7b0a401da660869946b2b77c710c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04ef803a24f3d4f8c67dbccb33b0fce0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga04ef803a24f3d4f8c67dbccb33b0fce0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0\">sign</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;base)</td></tr>\n<tr class=\"memdesc:ga04ef803a24f3d4f8c67dbccb33b0fce0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Logarithm for any base.  <a href=\"a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04ef803a24f3d4f8c67dbccb33b0fce0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00333.html\">GLM_GTX_log_base</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00046_source.html\">log_base.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00046_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: log_base.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">log_base.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00046.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_log_base is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_log_base extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00333.html#ga60a7b0a401da660869946b2b77c710c9\">log</a>(</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                genType <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                genType <span class=\"keyword\">const</span>&amp; base);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0\">sign</a>(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; base);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">#include &quot;log_base.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00333_html_ga04ef803a24f3d4f8c67dbccb33b0fce0\"><div class=\"ttname\"><a href=\"a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0\">glm::sign</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; sign(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;base)</div><div class=\"ttdoc\">Logarithm for any base. </div></div>\n<div class=\"ttc\" id=\"a00333_html_ga60a7b0a401da660869946b2b77c710c9\"><div class=\"ttname\"><a href=\"a00333.html#ga60a7b0a401da660869946b2b77c710c9\">glm::log</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType log(genType const &amp;x, genType const &amp;base)</div><div class=\"ttdoc\">Logarithm for any base. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00047_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: man.doxy Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_5189610d3ba09ec39b766fb99b34cd93.html\">doc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">man.doxy</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\"># Doxyfile 1.8.10</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\"># This file describes the settings to be used by the documentation system</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\"># doxygen (www.doxygen.org) for a project.</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\"># All text after a double hash (##) is considered a comment and is placed in</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\"># front of the TAG it is preceding.</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\"># All text after a single hash (#) is considered a comment and will be ignored.</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\"># The format is:</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\"># TAG = value [value, ...]</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\"># For lists, items can also be appended using:</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\"># TAG += value [value, ...]</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\"># Values that contain spaces should be placed between quotes (\\&quot; \\&quot;).</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\"># Project related configuration options</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\"># This tag specifies the encoding used for all characters in the config file</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\"># that follow. The default is UTF-8 which is also the encoding used for all text</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\"># before the first occurrence of this tag. Doxygen uses libiconv (or the iconv</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\"># built into libc) for the transcoding. See http://www.gnu.org/software/libiconv</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\"># for the list of possible encodings.</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\"># The default value is: UTF-8.</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;DOXYFILE_ENCODING      = UTF-8</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\"># The PROJECT_NAME tag is a single word (or a sequence of words surrounded by</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\"># double-quotes, unless you are using Doxywizard) that should identify the</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\"># project for which the documentation is generated. This name is used in the</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\"># title of most generated pages and in a few other places.</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\"># The default value is: My Project.</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;PROJECT_NAME           = <span class=\"stringliteral\">&quot;0.9.9 API documentation&quot;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\"># The PROJECT_NUMBER tag can be used to enter a project or revision number. This</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\"># could be handy for archiving the generated documentation or if some version</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\"># control system is used.</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;PROJECT_NUMBER         = </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\"># Using the PROJECT_BRIEF tag one can provide an optional one line description</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\"># for a project that appears at the top of each page and should give viewer a</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\"># quick idea about the purpose of the project. Keep the description short.</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;PROJECT_BRIEF          = </div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\"># With the PROJECT_LOGO tag one can specify a logo or an icon that is included</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"preprocessor\"># in the documentation. The maximum height of the logo should not exceed 55</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\"># pixels and the maximum width should not exceed 200 pixels. Doxygen will copy</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"preprocessor\"># the logo to the output directory.</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;PROJECT_LOGO           = theme/logo-mini.png</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"preprocessor\"># The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"preprocessor\"># into which the generated documentation will be written. If a relative path is</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"preprocessor\"># entered, it will be relative to the location where doxygen was started. If</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"preprocessor\"># left blank the current directory will be used.</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;OUTPUT_DIRECTORY       = .</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"preprocessor\"># directories (in 2 levels) under the output directory of each output format and</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\"># will distribute the generated files over these directories. Enabling this</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;<span class=\"preprocessor\"># option can be useful when feeding doxygen a huge amount of source files, where</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"preprocessor\"># putting all generated files in the same directory would otherwise causes</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"preprocessor\"># performance problems for the file system.</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;CREATE_SUBDIRS         = NO</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;<span class=\"preprocessor\"># If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\"># characters to appear in the names of generated files. If set to NO, non-ASCII</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"preprocessor\"># characters will be escaped, for example _xE3_x81_x84 will be used for Unicode</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\"># U+3044.</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;ALLOW_UNICODE_NAMES    = NO</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\"># The OUTPUT_LANGUAGE tag is used to specify the language in which all</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\"># documentation generated by doxygen is written. Doxygen will use this</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"preprocessor\"># information to generate all constant output in the proper language.</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;<span class=\"preprocessor\"># Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;<span class=\"preprocessor\"># Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;<span class=\"preprocessor\"># Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;<span class=\"preprocessor\"># Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;<span class=\"preprocessor\"># Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;<span class=\"preprocessor\"># Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,</span></div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"preprocessor\"># Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;<span class=\"preprocessor\"># Ukrainian and Vietnamese.</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\"># The default value is: English.</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;OUTPUT_LANGUAGE        = English</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"preprocessor\"># If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;<span class=\"preprocessor\"># descriptions after the members that are listed in the file and class</span></div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;<span class=\"preprocessor\"># documentation (similar to Javadoc). Set to NO to disable this.</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;BRIEF_MEMBER_DESC      = YES</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"preprocessor\"># If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;<span class=\"preprocessor\"># description of a member or function before the detailed description</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;<span class=\"preprocessor\"># Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;<span class=\"preprocessor\"># brief descriptions will be completely suppressed.</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;REPEAT_BRIEF           = YES</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;<span class=\"preprocessor\"># This tag implements a quasi-intelligent brief description abbreviator that is</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;<span class=\"preprocessor\"># used to form the text in various listings. Each string in this list, if found</span></div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;<span class=\"preprocessor\"># as the leading text of the brief description, will be stripped from the text</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;<span class=\"preprocessor\"># and the result, after processing the whole list, is used as the annotated</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"preprocessor\"># text. Otherwise, the brief description is used as-is. If left blank, the</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;<span class=\"preprocessor\"># following values are used ($name is automatically replaced with the name of</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;<span class=\"preprocessor\"># the entity):The $name class, The $name widget, The $name file, is, provides,</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;<span class=\"preprocessor\"># specifies, contains, represents, a, an and the.</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;ABBREVIATE_BRIEF       = <span class=\"stringliteral\">&quot;The $name class       &quot;</span> \\</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;                         <span class=\"stringliteral\">&quot;The $name widget       &quot;</span> \\</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;                         <span class=\"stringliteral\">&quot;The $name file       &quot;</span> \\</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;                         is \\</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;                         provides \\</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                         specifies \\</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;                         contains \\</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                         represents \\</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                         a \\</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;                         an \\</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                         the</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;<span class=\"preprocessor\"># If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;<span class=\"preprocessor\"># doxygen will generate a detailed section even if there is only a brief</span></div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"preprocessor\"># description.</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;ALWAYS_DETAILED_SEC    = NO</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;<span class=\"preprocessor\"># If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;<span class=\"preprocessor\"># inherited members of a class in the documentation of that class as if those</span></div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"preprocessor\"># members were ordinary class members. Constructors, destructors and assignment</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;<span class=\"preprocessor\"># operators of the base classes will not be shown.</span></div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;INLINE_INHERITED_MEMB  = NO</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;<span class=\"preprocessor\"># If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path</span></div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;<span class=\"preprocessor\"># before files name in the file list and in the header files. If set to NO the</span></div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;<span class=\"preprocessor\"># shortest path that makes the file name unique will be used</span></div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;FULL_PATH_NAMES        = NO</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;<span class=\"preprocessor\"># The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;<span class=\"preprocessor\"># Stripping is only done if one of the specified strings matches the left-hand</span></div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;<span class=\"preprocessor\"># part of the path. The tag can be used to show relative paths in the file list.</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;<span class=\"preprocessor\"># If left blank the directory from which doxygen is run is used as the path to</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;<span class=\"preprocessor\"># strip.</span></div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;<span class=\"preprocessor\"># Note that you can specify absolute paths here, but also relative paths, which</span></div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;<span class=\"preprocessor\"># will be relative from the directory where doxygen is started.</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;<span class=\"preprocessor\"># This tag requires that the tag FULL_PATH_NAMES is set to YES.</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;STRIP_FROM_PATH        = <span class=\"stringliteral\">&quot;C:/Documents and Settings/Groove/       &quot;</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;<span class=\"preprocessor\"># The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;<span class=\"preprocessor\"># path mentioned in the documentation of a class, which tells the reader which</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;<span class=\"preprocessor\"># header file to include in order to use a class. If left blank only the name of</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"preprocessor\"># the header file containing the class definition is used. Otherwise one should</span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;<span class=\"preprocessor\"># specify the list of include paths that are normally passed to the compiler</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;<span class=\"preprocessor\"># using the -I flag.</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;STRIP_FROM_INC_PATH    = </div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;<span class=\"preprocessor\"># If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"preprocessor\"># less readable) file names. This can be useful is your file systems doesn&#39;t</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;<span class=\"preprocessor\"># support long names like on DOS, Mac, or CD-ROM.</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;SHORT_NAMES            = YES</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"preprocessor\"># If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;<span class=\"preprocessor\"># first line (until the first dot) of a Javadoc-style comment as the brief</span></div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;<span class=\"preprocessor\"># description. If set to NO, the Javadoc-style will behave just like regular Qt-</span></div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;<span class=\"preprocessor\"># style comments (thus requiring an explicit @brief command for a brief</span></div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;<span class=\"preprocessor\"># description.)</span></div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;JAVADOC_AUTOBRIEF      = YES</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;<span class=\"preprocessor\"># If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first</span></div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;<span class=\"preprocessor\"># line (until the first dot) of a Qt-style comment as the brief description. If</span></div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;<span class=\"preprocessor\"># set to NO, the Qt-style will behave just like regular Qt-style comments (thus</span></div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;<span class=\"preprocessor\"># requiring an explicit \\brief command for a brief description.)</span></div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;QT_AUTOBRIEF           = NO</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;<span class=\"preprocessor\"># The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a</span></div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;<span class=\"preprocessor\"># multi-line C++ special comment block (i.e. a block of </span></div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;<span class=\"preprocessor\"># a brief description. This used to be the default behavior. The new default is</span></div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;<span class=\"preprocessor\"># to treat a multi-line C++ comment block as a detailed description. Set this</span></div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;<span class=\"preprocessor\"># tag to YES if you prefer the old behavior instead.</span></div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;<span class=\"preprocessor\"># Note that setting this tag to YES also means that rational rose comments are</span></div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;<span class=\"preprocessor\"># not recognized any more.</span></div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;MULTILINE_CPP_IS_BRIEF = NO</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;<span class=\"preprocessor\"># If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the</span></div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;<span class=\"preprocessor\"># documentation from any documented member that it re-implements.</span></div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;INHERIT_DOCS           = YES</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;<span class=\"preprocessor\"># If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new</span></div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;<span class=\"preprocessor\"># page for each member. If set to NO, the documentation of a member will be part</span></div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;<span class=\"preprocessor\"># of the file/class/namespace that contains it.</span></div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;SEPARATE_MEMBER_PAGES  = NO</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;<span class=\"preprocessor\"># The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen</span></div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;<span class=\"preprocessor\"># uses this value to replace tabs by spaces in code fragments.</span></div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;<span class=\"preprocessor\"># Minimum value: 1, maximum value: 16, default value: 4.</span></div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;TAB_SIZE               = 8</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;<span class=\"preprocessor\"># This tag can be used to specify a number of aliases that act as commands in</span></div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;<span class=\"preprocessor\"># the documentation. An alias has the form:</span></div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;<span class=\"preprocessor\"># name=value</span></div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;<span class=\"preprocessor\"># For example adding</span></div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;<span class=\"preprocessor\"># &quot;sideeffect=@par Side Effects:\\n&quot;</span></div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;<span class=\"preprocessor\"># will allow you to put the command \\sideeffect (or @sideeffect) in the</span></div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;<span class=\"preprocessor\"># documentation, which will result in a user-defined paragraph with heading</span></div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;<span class=\"preprocessor\"># &quot;Side Effects:&quot;. You can put \\n&#39;s in the value part of an alias to insert</span></div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;<span class=\"preprocessor\"># newlines.</span></div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;ALIASES                = </div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;<span class=\"preprocessor\"># This tag can be used to specify a number of word-keyword mappings (TCL only).</span></div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;<span class=\"preprocessor\"># A mapping has the form &quot;name=value&quot;. For example adding &quot;class=itcl::class&quot;</span></div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;<span class=\"preprocessor\"># will allow you to use the command class in the itcl::class meaning.</span></div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;TCL_SUBST              = </div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;<span class=\"preprocessor\"># Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources</span></div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;<span class=\"preprocessor\"># only. Doxygen will then generate output that is more tailored for C. For</span></div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;<span class=\"preprocessor\"># instance, some of the names that are used will be different. The list of all</span></div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;<span class=\"preprocessor\"># members will be omitted, etc.</span></div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;OPTIMIZE_OUTPUT_FOR_C  = NO</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;<span class=\"preprocessor\"># Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or</span></div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;<span class=\"preprocessor\"># Python sources only. Doxygen will then generate output that is more tailored</span></div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;<span class=\"preprocessor\"># for that language. For instance, namespaces will be presented as packages,</span></div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;<span class=\"preprocessor\"># qualified scopes will look different, etc.</span></div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;OPTIMIZE_OUTPUT_JAVA   = NO</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;<span class=\"preprocessor\"># Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran</span></div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;<span class=\"preprocessor\"># sources. Doxygen will then generate output that is tailored for Fortran.</span></div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;OPTIMIZE_FOR_FORTRAN   = NO</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;<span class=\"preprocessor\"># Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL</span></div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;<span class=\"preprocessor\"># sources. Doxygen will then generate output that is tailored for VHDL.</span></div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;OPTIMIZE_OUTPUT_VHDL   = NO</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;<span class=\"preprocessor\"># Doxygen selects the parser to use depending on the extension of the files it</span></div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;<span class=\"preprocessor\"># parses. With this tag you can assign which parser to use for a given</span></div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;<span class=\"preprocessor\"># extension. Doxygen has a built-in mapping, but you can override or extend it</span></div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;<span class=\"preprocessor\"># using this tag. The format is ext=language, where ext is a file extension, and</span></div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;<span class=\"preprocessor\"># language is one of the parsers supported by doxygen: IDL, Java, Javascript,</span></div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;<span class=\"preprocessor\"># C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:</span></div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;<span class=\"preprocessor\"># FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:</span></div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;<span class=\"preprocessor\"># Fortran. In the later case the parser tries to guess whether the code is fixed</span></div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;<span class=\"preprocessor\"># or free formatted code, this is the default for Fortran type files), VHDL. For</span></div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;<span class=\"preprocessor\"># instance to make doxygen treat .inc files as Fortran files (default is PHP),</span></div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;<span class=\"preprocessor\"># and .f files as C (default is Fortran), use: inc=Fortran f=C.</span></div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;<span class=\"preprocessor\"># Note: For files without extension you can use no_extension as a placeholder.</span></div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;<span class=\"preprocessor\"># Note that for custom extensions you also need to set FILE_PATTERNS otherwise</span></div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;<span class=\"preprocessor\"># the files are not read by doxygen.</span></div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;EXTENSION_MAPPING      = </div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;<span class=\"preprocessor\"># If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments</span></div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;<span class=\"preprocessor\"># according to the Markdown format, which allows for more readable</span></div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;<span class=\"preprocessor\"># documentation. See http://daringfireball.net/projects/markdown/ for details.</span></div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;<span class=\"preprocessor\"># The output of markdown processing is further processed by doxygen, so you can</span></div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;<span class=\"preprocessor\"># mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in</span></div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;<span class=\"preprocessor\"># case of backward compatibilities issues.</span></div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;MARKDOWN_SUPPORT       = YES</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;<span class=\"preprocessor\"># When enabled doxygen tries to link words that correspond to documented</span></div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;<span class=\"preprocessor\"># classes, or namespaces to their corresponding documentation. Such a link can</span></div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;<span class=\"preprocessor\"># be prevented in individual cases by putting a % sign in front of the word or</span></div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;<span class=\"preprocessor\"># globally by setting AUTOLINK_SUPPORT to NO.</span></div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;AUTOLINK_SUPPORT       = YES</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;<span class=\"preprocessor\"># If you use STL classes (i.e. std::string, std::vector, etc.) but do not want</span></div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;<span class=\"preprocessor\"># to include (a tag file for) the STL sources as input, then you should set this</span></div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;<span class=\"preprocessor\"># tag to YES in order to let doxygen match functions declarations and</span></div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;<span class=\"preprocessor\"># definitions whose arguments contain STL classes (e.g. func(std::string);</span></div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;<span class=\"preprocessor\"># versus func(std::string) {}). This also make the inheritance and collaboration</span></div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;<span class=\"preprocessor\"># diagrams that involve STL classes more complete and accurate.</span></div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;BUILTIN_STL_SUPPORT    = NO</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;<span class=\"preprocessor\"># If you use Microsoft&#39;s C++/CLI language, you should set this option to YES to</span></div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;<span class=\"preprocessor\"># enable parsing support.</span></div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;CPP_CLI_SUPPORT        = NO</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;<span class=\"preprocessor\"># Set the SIP_SUPPORT tag to YES if your project consists of sip (see:</span></div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;<span class=\"preprocessor\"># http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen</span></div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;<span class=\"preprocessor\"># will parse them like normal C++ but will assume all classes use public instead</span></div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;<span class=\"preprocessor\"># of private inheritance when no explicit protection keyword is present.</span></div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;SIP_SUPPORT            = NO</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;<span class=\"preprocessor\"># For Microsoft&#39;s IDL there are propget and propput attributes to indicate</span></div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;<span class=\"preprocessor\"># getter and setter methods for a property. Setting this option to YES will make</span></div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;<span class=\"preprocessor\"># doxygen to replace the get and set methods by a property in the documentation.</span></div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;<span class=\"preprocessor\"># This will only work if the methods are indeed getting or setting a simple</span></div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;<span class=\"preprocessor\"># type. If this is not the case, or you want to show the methods anyway, you</span></div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;<span class=\"preprocessor\"># should set this option to NO.</span></div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;IDL_PROPERTY_SUPPORT   = YES</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;<span class=\"preprocessor\"># If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC</span></div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;<span class=\"preprocessor\"># tag is set to YES then doxygen will reuse the documentation of the first</span></div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;<span class=\"preprocessor\"># member in the group (if any) for the other members of the group. By default</span></div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;<span class=\"preprocessor\"># all members of a group must be documented explicitly.</span></div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;DISTRIBUTE_GROUP_DOC   = NO</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;<span class=\"preprocessor\"># If one adds a struct or class to a group and this option is enabled, then also</span></div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;<span class=\"preprocessor\"># any nested class or struct is added to the same group. By default this option</span></div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;<span class=\"preprocessor\"># is disabled and one has to add nested compounds explicitly via \\ingroup.</span></div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;GROUP_NESTED_COMPOUNDS = NO</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;<span class=\"preprocessor\"># Set the SUBGROUPING tag to YES to allow class member groups of the same type</span></div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;<span class=\"preprocessor\"># (for instance a group of public functions) to be put as a subgroup of that</span></div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;<span class=\"preprocessor\"># type (e.g. under the Public Functions section). Set it to NO to prevent</span></div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;<span class=\"preprocessor\"># subgrouping. Alternatively, this can be done per class using the</span></div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;<span class=\"preprocessor\"># \\nosubgrouping command.</span></div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;SUBGROUPING            = NO</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;<span class=\"preprocessor\"># When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions</span></div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;<span class=\"preprocessor\"># are shown inside the group in which they are included (e.g. using \\ingroup)</span></div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;<span class=\"preprocessor\"># instead of on a separate page (for HTML and Man pages) or section (for LaTeX</span></div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;<span class=\"preprocessor\"># and RTF).</span></div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;<span class=\"preprocessor\"># Note that this feature does not work in combination with</span></div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;<span class=\"preprocessor\"># SEPARATE_MEMBER_PAGES.</span></div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;INLINE_GROUPED_CLASSES = NO</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;<span class=\"preprocessor\"># When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions</span></div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;<span class=\"preprocessor\"># with only public data fields or simple typedef fields will be shown inline in</span></div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;<span class=\"preprocessor\"># the documentation of the scope in which they are defined (i.e. file,</span></div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;<span class=\"preprocessor\"># namespace, or group documentation), provided this scope is documented. If set</span></div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;<span class=\"preprocessor\"># to NO, structs, classes, and unions are shown on a separate page (for HTML and</span></div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;<span class=\"preprocessor\"># Man pages) or section (for LaTeX and RTF).</span></div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;INLINE_SIMPLE_STRUCTS  = NO</div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;<span class=\"preprocessor\"># When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or</span></div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;<span class=\"preprocessor\"># enum is documented as struct, union, or enum with the name of the typedef. So</span></div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;<span class=\"preprocessor\"># typedef struct TypeS {} TypeT, will appear in the documentation as a struct</span></div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;<span class=\"preprocessor\"># with name TypeT. When disabled the typedef will appear as a member of a file,</span></div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;<span class=\"preprocessor\"># namespace, or class. And the struct will be named TypeS. This can typically be</span></div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;<span class=\"preprocessor\"># useful for C code in case the coding convention dictates that all compound</span></div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;<span class=\"preprocessor\"># types are typedef&#39;ed and only the typedef is referenced, never the tag name.</span></div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;TYPEDEF_HIDES_STRUCT   = NO</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;</div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;<span class=\"preprocessor\"># The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This</span></div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;<span class=\"preprocessor\"># cache is used to resolve symbols given their name and scope. Since this can be</span></div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;<span class=\"preprocessor\"># an expensive process and often the same symbol appears multiple times in the</span></div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;<span class=\"preprocessor\"># code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small</span></div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;<span class=\"preprocessor\"># doxygen will become slower. If the cache is too large, memory is wasted. The</span></div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;<span class=\"preprocessor\"># cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range</span></div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;<span class=\"preprocessor\"># is 0..9, the default is 0, corresponding to a cache size of 2^16=65536</span></div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;<span class=\"preprocessor\"># symbols. At the end of a run doxygen will report the cache usage and suggest</span></div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;<span class=\"preprocessor\"># the optimal cache size from a speed point of view.</span></div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;<span class=\"preprocessor\"># Minimum value: 0, maximum value: 9, default value: 0.</span></div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;LOOKUP_CACHE_SIZE      = 0</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;<span class=\"preprocessor\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;<span class=\"preprocessor\"># Build related configuration options</span></div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;<span class=\"preprocessor\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;</div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;<span class=\"preprocessor\"># If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in</span></div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;<span class=\"preprocessor\"># documentation are documented, even if no documentation was available. Private</span></div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;<span class=\"preprocessor\"># class members and static file members will be hidden unless the</span></div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;<span class=\"preprocessor\"># EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.</span></div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;<span class=\"preprocessor\"># Note: This will also disable the warnings about undocumented members that are</span></div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;<span class=\"preprocessor\"># normally produced when WARNINGS is set to YES.</span></div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;EXTRACT_ALL            = NO</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;<span class=\"preprocessor\"># If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will</span></div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;<span class=\"preprocessor\"># be included in the documentation.</span></div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;</div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;EXTRACT_PRIVATE        = NO</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;<span class=\"preprocessor\"># If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal</span></div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;<span class=\"preprocessor\"># scope will be included in the documentation.</span></div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;EXTRACT_PACKAGE        = NO</div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;<span class=\"preprocessor\"># If the EXTRACT_STATIC tag is set to YES, all static members of a file will be</span></div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;<span class=\"preprocessor\"># included in the documentation.</span></div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;EXTRACT_STATIC         = YES</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;</div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;<span class=\"preprocessor\"># If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined</span></div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;<span class=\"preprocessor\"># locally in source files will be included in the documentation. If set to NO,</span></div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;<span class=\"preprocessor\"># only classes defined in header files are included. Does not have any effect</span></div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;<span class=\"preprocessor\"># for Java sources.</span></div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;EXTRACT_LOCAL_CLASSES  = NO</div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;</div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;<span class=\"preprocessor\"># This flag is only useful for Objective-C code. If set to YES, local methods,</span></div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;<span class=\"preprocessor\"># which are defined in the implementation section but not in the interface are</span></div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;<span class=\"preprocessor\"># included in the documentation. If set to NO, only methods in the interface are</span></div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;<span class=\"preprocessor\"># included.</span></div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;EXTRACT_LOCAL_METHODS  = NO</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;</div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;<span class=\"preprocessor\"># If this flag is set to YES, the members of anonymous namespaces will be</span></div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;<span class=\"preprocessor\"># extracted and appear in the documentation as a namespace called</span></div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;<span class=\"preprocessor\"># &#39;anonymous_namespace{file}&#39;, where file will be replaced with the base name of</span></div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;<span class=\"preprocessor\"># the file that contains the anonymous namespace. By default anonymous namespace</span></div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;<span class=\"preprocessor\"># are hidden.</span></div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;EXTRACT_ANON_NSPACES   = NO</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;</div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;<span class=\"preprocessor\"># If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all</span></div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;<span class=\"preprocessor\"># undocumented members inside documented classes or files. If set to NO these</span></div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;<span class=\"preprocessor\"># members will be included in the various overviews, but no documentation</span></div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;<span class=\"preprocessor\"># section is generated. This option has no effect if EXTRACT_ALL is enabled.</span></div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;HIDE_UNDOC_MEMBERS     = YES</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;<span class=\"preprocessor\"># If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all</span></div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;<span class=\"preprocessor\"># undocumented classes that are normally visible in the class hierarchy. If set</span></div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;<span class=\"preprocessor\"># to NO, these classes will be included in the various overviews. This option</span></div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;<span class=\"preprocessor\"># has no effect if EXTRACT_ALL is enabled.</span></div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;</div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;HIDE_UNDOC_CLASSES     = YES</div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;<span class=\"preprocessor\"># If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend</span></div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;<span class=\"preprocessor\"># (class|struct|union) declarations. If set to NO, these declarations will be</span></div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;<span class=\"preprocessor\"># included in the documentation.</span></div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;HIDE_FRIEND_COMPOUNDS  = YES</div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;</div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;<span class=\"preprocessor\"># If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any</span></div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160;<span class=\"preprocessor\"># documentation blocks found inside the body of a function. If set to NO, these</span></div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;<span class=\"preprocessor\"># blocks will be appended to the function&#39;s detailed documentation block.</span></div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;</div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;HIDE_IN_BODY_DOCS      = YES</div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;</div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;<span class=\"preprocessor\"># The INTERNAL_DOCS tag determines if documentation that is typed after a</span></div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;<span class=\"preprocessor\"># \\internal command is included. If the tag is set to NO then the documentation</span></div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;<span class=\"preprocessor\"># will be excluded. Set it to YES to include the internal documentation.</span></div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;</div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160;INTERNAL_DOCS          = NO</div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;<span class=\"preprocessor\"># If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file</span></div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;<span class=\"preprocessor\"># names in lower-case letters. If set to YES, upper-case letters are also</span></div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;<span class=\"preprocessor\"># allowed. This is useful if you have classes or files whose names only differ</span></div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;<span class=\"preprocessor\"># in case and if your file system supports case sensitive file names. Windows</span></div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;<span class=\"preprocessor\"># and Mac users are advised to set this option to NO.</span></div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;<span class=\"preprocessor\"># The default value is: system dependent.</span></div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;</div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;CASE_SENSE_NAMES       = YES</div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;</div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;<span class=\"preprocessor\"># If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with</span></div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;<span class=\"preprocessor\"># their full class and namespace scopes in the documentation. If set to YES, the</span></div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;<span class=\"preprocessor\"># scope will be hidden.</span></div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\">  524</span>&#160;</div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;HIDE_SCOPE_NAMES       = YES</div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;<span class=\"preprocessor\"># If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will</span></div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\">  528</span>&#160;<span class=\"preprocessor\"># append additional text to a page&#39;s title, such as Class Reference. If set to</span></div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;<span class=\"preprocessor\"># YES the compound reference will be hidden.</span></div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;</div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;HIDE_COMPOUND_REFERENCE= NO</div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\">  533</span>&#160;</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;<span class=\"preprocessor\"># If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of</span></div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;<span class=\"preprocessor\"># the files that are included by a file in the documentation of that file.</span></div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\">  536</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;</div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;SHOW_INCLUDE_FILES     = NO</div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;</div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160;<span class=\"preprocessor\"># If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each</span></div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\">  541</span>&#160;<span class=\"preprocessor\"># grouped member an include statement to the documentation, telling the reader</span></div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;<span class=\"preprocessor\"># which file to include in order to use the member.</span></div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00544\"></a><span class=\"lineno\">  544</span>&#160;</div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\">  545</span>&#160;SHOW_GROUPED_MEMB_INC  = NO</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;<span class=\"preprocessor\"># If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include</span></div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\">  548</span>&#160;<span class=\"preprocessor\"># files with double quotes in the documentation rather than with sharp brackets.</span></div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\">  549</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\">  550</span>&#160;</div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;FORCE_LOCAL_INCLUDES   = NO</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;</div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\">  553</span>&#160;<span class=\"preprocessor\"># If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the</span></div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\">  554</span>&#160;<span class=\"preprocessor\"># documentation for inline members.</span></div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160;</div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\">  557</span>&#160;INLINE_INFO            = NO</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;</div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;<span class=\"preprocessor\"># If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the</span></div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;<span class=\"preprocessor\"># (detailed) documentation of file and class members alphabetically by member</span></div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;<span class=\"preprocessor\"># name. If set to NO, the members will appear in declaration order.</span></div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;</div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;SORT_MEMBER_DOCS       = YES</div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;</div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;<span class=\"preprocessor\"># If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief</span></div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;<span class=\"preprocessor\"># descriptions of file, namespace and class members alphabetically by member</span></div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;<span class=\"preprocessor\"># name. If set to NO, the members will appear in declaration order. Note that</span></div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;<span class=\"preprocessor\"># this will also influence the order of the classes in the class list.</span></div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;</div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;SORT_BRIEF_DOCS        = YES</div>\n<div class=\"line\"><a name=\"l00573\"></a><span class=\"lineno\">  573</span>&#160;</div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\">  574</span>&#160;<span class=\"preprocessor\"># If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the</span></div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;<span class=\"preprocessor\"># (brief and detailed) documentation of class members so that constructors and</span></div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;<span class=\"preprocessor\"># destructors are listed first. If set to NO the constructors will appear in the</span></div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;<span class=\"preprocessor\"># respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.</span></div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;<span class=\"preprocessor\"># Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief</span></div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;<span class=\"preprocessor\"># member documentation.</span></div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\">  580</span>&#160;<span class=\"preprocessor\"># Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting</span></div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;<span class=\"preprocessor\"># detailed member documentation.</span></div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;</div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\">  584</span>&#160;SORT_MEMBERS_CTORS_1ST = NO</div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\">  585</span>&#160;</div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;<span class=\"preprocessor\"># If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy</span></div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;<span class=\"preprocessor\"># of group names into alphabetical order. If set to NO the group names will</span></div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;<span class=\"preprocessor\"># appear in their defined order.</span></div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;</div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;SORT_GROUP_NAMES       = NO</div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\">  592</span>&#160;</div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;<span class=\"preprocessor\"># If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by</span></div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;<span class=\"preprocessor\"># fully-qualified names, including namespaces. If set to NO, the class list will</span></div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;<span class=\"preprocessor\"># be sorted only by class name, not including the namespace part.</span></div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160;<span class=\"preprocessor\"># Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.</span></div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;<span class=\"preprocessor\"># Note: This option applies only to the class list, not to the alphabetical</span></div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;<span class=\"preprocessor\"># list.</span></div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;</div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;SORT_BY_SCOPE_NAME     = YES</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;<span class=\"preprocessor\"># If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper</span></div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;<span class=\"preprocessor\"># type resolution of all parameters of a function it will reject a match between</span></div>\n<div class=\"line\"><a name=\"l00605\"></a><span class=\"lineno\">  605</span>&#160;<span class=\"preprocessor\"># the prototype and the implementation of a member function even if there is</span></div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;<span class=\"preprocessor\"># only one candidate or it is obvious which candidate to choose by doing a</span></div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;<span class=\"preprocessor\"># simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still</span></div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;<span class=\"preprocessor\"># accept a match between prototype and implementation in such cases.</span></div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;</div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;STRICT_PROTO_MATCHING  = NO</div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\">  612</span>&#160;</div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160;<span class=\"preprocessor\"># The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo</span></div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;<span class=\"preprocessor\"># list. This list is created by putting \\todo commands in the documentation.</span></div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;</div>\n<div class=\"line\"><a name=\"l00617\"></a><span class=\"lineno\">  617</span>&#160;GENERATE_TODOLIST      = YES</div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;</div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;<span class=\"preprocessor\"># The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test</span></div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;<span class=\"preprocessor\"># list. This list is created by putting \\test commands in the documentation.</span></div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;</div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;GENERATE_TESTLIST      = YES</div>\n<div class=\"line\"><a name=\"l00624\"></a><span class=\"lineno\">  624</span>&#160;</div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160;<span class=\"preprocessor\"># The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug</span></div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;<span class=\"preprocessor\"># list. This list is created by putting \\bug commands in the documentation.</span></div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;</div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;GENERATE_BUGLIST       = YES</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;</div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;<span class=\"preprocessor\"># The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)</span></div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160;<span class=\"preprocessor\"># the deprecated list. This list is created by putting \\deprecated commands in</span></div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;<span class=\"preprocessor\"># the documentation.</span></div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\">  635</span>&#160;</div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\">  636</span>&#160;GENERATE_DEPRECATEDLIST= YES</div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160;</div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;<span class=\"preprocessor\"># The ENABLED_SECTIONS tag can be used to enable conditional documentation</span></div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;<span class=\"preprocessor\"># sections, marked by \\if &lt;section_label&gt; ... \\endif and \\cond &lt;section_label&gt;</span></div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\">  640</span>&#160;<span class=\"preprocessor\"># ... \\endcond blocks.</span></div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\">  641</span>&#160;</div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160;ENABLED_SECTIONS       = </div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\">  643</span>&#160;</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;<span class=\"preprocessor\"># The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the</span></div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;<span class=\"preprocessor\"># initial value of a variable or macro / define can have for it to appear in the</span></div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160;<span class=\"preprocessor\"># documentation. If the initializer consists of more lines than specified here</span></div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\">  647</span>&#160;<span class=\"preprocessor\"># it will be hidden. Use a value of 0 to hide initializers completely. The</span></div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160;<span class=\"preprocessor\"># appearance of the value of individual variables and macros / defines can be</span></div>\n<div class=\"line\"><a name=\"l00649\"></a><span class=\"lineno\">  649</span>&#160;<span class=\"preprocessor\"># controlled using \\showinitializer or \\hideinitializer command in the</span></div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160;<span class=\"preprocessor\"># documentation regardless of this setting.</span></div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;<span class=\"preprocessor\"># Minimum value: 0, maximum value: 10000, default value: 30.</span></div>\n<div class=\"line\"><a name=\"l00652\"></a><span class=\"lineno\">  652</span>&#160;</div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\">  653</span>&#160;MAX_INITIALIZER_LINES  = 30</div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;</div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;<span class=\"preprocessor\"># Set the SHOW_USED_FILES tag to NO to disable the list of files generated at</span></div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;<span class=\"preprocessor\"># the bottom of the documentation of classes and structs. If set to YES, the</span></div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;<span class=\"preprocessor\"># list will mention the files that were used to generate the documentation.</span></div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\">  658</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;</div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;SHOW_USED_FILES        = NO</div>\n<div class=\"line\"><a name=\"l00661\"></a><span class=\"lineno\">  661</span>&#160;</div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\">  662</span>&#160;<span class=\"preprocessor\"># Set the SHOW_FILES tag to NO to disable the generation of the Files page. This</span></div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;<span class=\"preprocessor\"># will remove the Files entry from the Quick Index and from the Folder Tree View</span></div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\">  664</span>&#160;<span class=\"preprocessor\"># (if specified).</span></div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\">  665</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\">  666</span>&#160;</div>\n<div class=\"line\"><a name=\"l00667\"></a><span class=\"lineno\">  667</span>&#160;SHOW_FILES             = YES</div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\">  668</span>&#160;</div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;<span class=\"preprocessor\"># Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces</span></div>\n<div class=\"line\"><a name=\"l00670\"></a><span class=\"lineno\">  670</span>&#160;<span class=\"preprocessor\"># page. This will remove the Namespaces entry from the Quick Index and from the</span></div>\n<div class=\"line\"><a name=\"l00671\"></a><span class=\"lineno\">  671</span>&#160;<span class=\"preprocessor\"># Folder Tree View (if specified).</span></div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\">  673</span>&#160;</div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\">  674</span>&#160;SHOW_NAMESPACES        = YES</div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\">  675</span>&#160;</div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;<span class=\"preprocessor\"># The FILE_VERSION_FILTER tag can be used to specify a program or script that</span></div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;<span class=\"preprocessor\"># doxygen should invoke to get the current version for each file (typically from</span></div>\n<div class=\"line\"><a name=\"l00678\"></a><span class=\"lineno\">  678</span>&#160;<span class=\"preprocessor\"># the version control system). Doxygen will invoke the program by executing (via</span></div>\n<div class=\"line\"><a name=\"l00679\"></a><span class=\"lineno\">  679</span>&#160;<span class=\"preprocessor\"># popen()) the command command input-file, where command is the value of the</span></div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;<span class=\"preprocessor\"># FILE_VERSION_FILTER tag, and input-file is the name of an input file provided</span></div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;<span class=\"preprocessor\"># by doxygen. Whatever the program writes to standard output is used as the file</span></div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\">  682</span>&#160;<span class=\"preprocessor\"># version. For an example see the documentation.</span></div>\n<div class=\"line\"><a name=\"l00683\"></a><span class=\"lineno\">  683</span>&#160;</div>\n<div class=\"line\"><a name=\"l00684\"></a><span class=\"lineno\">  684</span>&#160;FILE_VERSION_FILTER    = </div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\">  685</span>&#160;</div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\">  686</span>&#160;<span class=\"preprocessor\"># The LAYOUT_FILE tag can be used to specify a layout file which will be parsed</span></div>\n<div class=\"line\"><a name=\"l00687\"></a><span class=\"lineno\">  687</span>&#160;<span class=\"preprocessor\"># by doxygen. The layout file controls the global structure of the generated</span></div>\n<div class=\"line\"><a name=\"l00688\"></a><span class=\"lineno\">  688</span>&#160;<span class=\"preprocessor\"># output files in an output format independent way. To create the layout file</span></div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;<span class=\"preprocessor\"># that represents doxygen&#39;s defaults, run doxygen with the -l option. You can</span></div>\n<div class=\"line\"><a name=\"l00690\"></a><span class=\"lineno\">  690</span>&#160;<span class=\"preprocessor\"># optionally specify a file name after the option, if omitted DoxygenLayout.xml</span></div>\n<div class=\"line\"><a name=\"l00691\"></a><span class=\"lineno\">  691</span>&#160;<span class=\"preprocessor\"># will be used as the name of the layout file.</span></div>\n<div class=\"line\"><a name=\"l00692\"></a><span class=\"lineno\">  692</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\">  693</span>&#160;<span class=\"preprocessor\"># Note that if you run doxygen from a directory containing a file called</span></div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\">  694</span>&#160;<span class=\"preprocessor\"># DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE</span></div>\n<div class=\"line\"><a name=\"l00695\"></a><span class=\"lineno\">  695</span>&#160;<span class=\"preprocessor\"># tag is left empty.</span></div>\n<div class=\"line\"><a name=\"l00696\"></a><span class=\"lineno\">  696</span>&#160;</div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\">  697</span>&#160;LAYOUT_FILE            = </div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;</div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;<span class=\"preprocessor\"># The CITE_BIB_FILES tag can be used to specify one or more bib files containing</span></div>\n<div class=\"line\"><a name=\"l00700\"></a><span class=\"lineno\">  700</span>&#160;<span class=\"preprocessor\"># the reference definitions. This must be a list of .bib files. The .bib</span></div>\n<div class=\"line\"><a name=\"l00701\"></a><span class=\"lineno\">  701</span>&#160;<span class=\"preprocessor\"># extension is automatically appended if omitted. This requires the bibtex tool</span></div>\n<div class=\"line\"><a name=\"l00702\"></a><span class=\"lineno\">  702</span>&#160;<span class=\"preprocessor\"># to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.</span></div>\n<div class=\"line\"><a name=\"l00703\"></a><span class=\"lineno\">  703</span>&#160;<span class=\"preprocessor\"># For LaTeX the style of the bibliography can be controlled using</span></div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\">  704</span>&#160;<span class=\"preprocessor\"># LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the</span></div>\n<div class=\"line\"><a name=\"l00705\"></a><span class=\"lineno\">  705</span>&#160;<span class=\"preprocessor\"># search path. See also \\cite for info how to create references.</span></div>\n<div class=\"line\"><a name=\"l00706\"></a><span class=\"lineno\">  706</span>&#160;</div>\n<div class=\"line\"><a name=\"l00707\"></a><span class=\"lineno\">  707</span>&#160;CITE_BIB_FILES         = </div>\n<div class=\"line\"><a name=\"l00708\"></a><span class=\"lineno\">  708</span>&#160;</div>\n<div class=\"line\"><a name=\"l00709\"></a><span class=\"lineno\">  709</span>&#160;<span class=\"preprocessor\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;<span class=\"preprocessor\"># Configuration options related to warning and progress messages</span></div>\n<div class=\"line\"><a name=\"l00711\"></a><span class=\"lineno\">  711</span>&#160;<span class=\"preprocessor\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00712\"></a><span class=\"lineno\">  712</span>&#160;</div>\n<div class=\"line\"><a name=\"l00713\"></a><span class=\"lineno\">  713</span>&#160;<span class=\"preprocessor\"># The QUIET tag can be used to turn on/off the messages that are generated to</span></div>\n<div class=\"line\"><a name=\"l00714\"></a><span class=\"lineno\">  714</span>&#160;<span class=\"preprocessor\"># standard output by doxygen. If QUIET is set to YES this implies that the</span></div>\n<div class=\"line\"><a name=\"l00715\"></a><span class=\"lineno\">  715</span>&#160;<span class=\"preprocessor\"># messages are off.</span></div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160;</div>\n<div class=\"line\"><a name=\"l00718\"></a><span class=\"lineno\">  718</span>&#160;QUIET                  = NO</div>\n<div class=\"line\"><a name=\"l00719\"></a><span class=\"lineno\">  719</span>&#160;</div>\n<div class=\"line\"><a name=\"l00720\"></a><span class=\"lineno\">  720</span>&#160;<span class=\"preprocessor\"># The WARNINGS tag can be used to turn on/off the warning messages that are</span></div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;<span class=\"preprocessor\"># generated to standard error (stderr) by doxygen. If WARNINGS is set to YES</span></div>\n<div class=\"line\"><a name=\"l00722\"></a><span class=\"lineno\">  722</span>&#160;<span class=\"preprocessor\"># this implies that the warnings are on.</span></div>\n<div class=\"line\"><a name=\"l00723\"></a><span class=\"lineno\">  723</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160;<span class=\"preprocessor\"># Tip: Turn warnings on while writing the documentation.</span></div>\n<div class=\"line\"><a name=\"l00725\"></a><span class=\"lineno\">  725</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\">  726</span>&#160;</div>\n<div class=\"line\"><a name=\"l00727\"></a><span class=\"lineno\">  727</span>&#160;WARNINGS               = YES</div>\n<div class=\"line\"><a name=\"l00728\"></a><span class=\"lineno\">  728</span>&#160;</div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\">  729</span>&#160;<span class=\"preprocessor\"># If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate</span></div>\n<div class=\"line\"><a name=\"l00730\"></a><span class=\"lineno\">  730</span>&#160;<span class=\"preprocessor\"># warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag</span></div>\n<div class=\"line\"><a name=\"l00731\"></a><span class=\"lineno\">  731</span>&#160;<span class=\"preprocessor\"># will automatically be disabled.</span></div>\n<div class=\"line\"><a name=\"l00732\"></a><span class=\"lineno\">  732</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;</div>\n<div class=\"line\"><a name=\"l00734\"></a><span class=\"lineno\">  734</span>&#160;WARN_IF_UNDOCUMENTED   = YES</div>\n<div class=\"line\"><a name=\"l00735\"></a><span class=\"lineno\">  735</span>&#160;</div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;<span class=\"preprocessor\"># If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for</span></div>\n<div class=\"line\"><a name=\"l00737\"></a><span class=\"lineno\">  737</span>&#160;<span class=\"preprocessor\"># potential errors in the documentation, such as not documenting some parameters</span></div>\n<div class=\"line\"><a name=\"l00738\"></a><span class=\"lineno\">  738</span>&#160;<span class=\"preprocessor\"># in a documented function, or documenting parameters that don&#39;t exist or using</span></div>\n<div class=\"line\"><a name=\"l00739\"></a><span class=\"lineno\">  739</span>&#160;<span class=\"preprocessor\"># markup commands wrongly.</span></div>\n<div class=\"line\"><a name=\"l00740\"></a><span class=\"lineno\">  740</span>&#160;<span class=\"preprocessor\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00741\"></a><span class=\"lineno\">  741</span>&#160;</div>\n<div class=\"line\"><a name=\"l00742\"></a><span class=\"lineno\">  742</span>&#160;WARN_IF_DOC_ERROR      = YES</div>\n<div class=\"line\"><a name=\"l00743\"></a><span class=\"lineno\">  743</span>&#160;</div>\n<div class=\"line\"><a name=\"l00744\"></a><span class=\"lineno\">  744</span>&#160;<span class=\"preprocessor\"># This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that</span></div>\n<div class=\"line\"><a name=\"l00745\"></a><span class=\"lineno\">  745</span>&#160;<span class=\"preprocessor\"># are documented, but have no documentation for their parameters or return</span></div>\n<div class=\"line\"><a name=\"l00746\"></a><span class=\"lineno\">  746</span>&#160;<span class=\"preprocessor\"># value. If set to NO, doxygen will only warn about wrong or incomplete</span></div>\n<div class=\"line\"><a name=\"l00747\"></a><span class=\"lineno\">  747</span>&#160;<span class=\"preprocessor\"># parameter documentation, but not about the absence of documentation.</span></div>\n<div class=\"line\"><a name=\"l00748\"></a><span class=\"lineno\">  748</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00749\"></a><span class=\"lineno\">  749</span>&#160;</div>\n<div class=\"line\"><a name=\"l00750\"></a><span class=\"lineno\">  750</span>&#160;WARN_NO_PARAMDOC       = NO</div>\n<div class=\"line\"><a name=\"l00751\"></a><span class=\"lineno\">  751</span>&#160;</div>\n<div class=\"line\"><a name=\"l00752\"></a><span class=\"lineno\">  752</span>&#160;<span class=\"preprocessor\"># The WARN_FORMAT tag determines the format of the warning messages that doxygen</span></div>\n<div class=\"line\"><a name=\"l00753\"></a><span class=\"lineno\">  753</span>&#160;<span class=\"preprocessor\"># can produce. The string should contain the $file, $line, and $text tags, which</span></div>\n<div class=\"line\"><a name=\"l00754\"></a><span class=\"lineno\">  754</span>&#160;<span class=\"preprocessor\"># will be replaced by the file and line number from which the warning originated</span></div>\n<div class=\"line\"><a name=\"l00755\"></a><span class=\"lineno\">  755</span>&#160;<span class=\"preprocessor\"># and the warning text. Optionally the format may contain $version, which will</span></div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\">  756</span>&#160;<span class=\"preprocessor\"># be replaced by the version of the file (if it could be obtained via</span></div>\n<div class=\"line\"><a name=\"l00757\"></a><span class=\"lineno\">  757</span>&#160;<span class=\"preprocessor\"># FILE_VERSION_FILTER)</span></div>\n<div class=\"line\"><a name=\"l00758\"></a><span class=\"lineno\">  758</span>&#160;<span class=\"preprocessor\"># The default value is: $file:$line: $text.</span></div>\n<div class=\"line\"><a name=\"l00759\"></a><span class=\"lineno\">  759</span>&#160;</div>\n<div class=\"line\"><a name=\"l00760\"></a><span class=\"lineno\">  760</span>&#160;WARN_FORMAT            = <span class=\"stringliteral\">&quot;$file:$line: $text&quot;</span></div>\n<div class=\"line\"><a name=\"l00761\"></a><span class=\"lineno\">  761</span>&#160;</div>\n<div class=\"line\"><a name=\"l00762\"></a><span class=\"lineno\">  762</span>&#160;<span class=\"preprocessor\"># The WARN_LOGFILE tag can be used to specify a file to which warning and error</span></div>\n<div class=\"line\"><a name=\"l00763\"></a><span class=\"lineno\">  763</span>&#160;<span class=\"preprocessor\"># messages should be written. If left blank the output is written to standard</span></div>\n<div class=\"line\"><a name=\"l00764\"></a><span class=\"lineno\">  764</span>&#160;<span class=\"preprocessor\"># error (stderr).</span></div>\n<div class=\"line\"><a name=\"l00765\"></a><span class=\"lineno\">  765</span>&#160;</div>\n<div class=\"line\"><a name=\"l00766\"></a><span class=\"lineno\">  766</span>&#160;WARN_LOGFILE           = </div>\n<div class=\"line\"><a name=\"l00767\"></a><span class=\"lineno\">  767</span>&#160;</div>\n<div class=\"line\"><a name=\"l00768\"></a><span class=\"lineno\">  768</span>&#160;<span class=\"preprocessor\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00769\"></a><span class=\"lineno\">  769</span>&#160;<span class=\"preprocessor\"># Configuration options related to the input files</span></div>\n<div class=\"line\"><a name=\"l00770\"></a><span class=\"lineno\">  770</span>&#160;<span class=\"preprocessor\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00771\"></a><span class=\"lineno\">  771</span>&#160;</div>\n<div class=\"line\"><a name=\"l00772\"></a><span class=\"lineno\">  772</span>&#160;<span class=\"preprocessor\"># The INPUT tag is used to specify the files and/or directories that contain</span></div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\">  773</span>&#160;<span class=\"preprocessor\"># documented source files. You may enter file names like myfile.cpp or</span></div>\n<div class=\"line\"><a name=\"l00774\"></a><span class=\"lineno\">  774</span>&#160;<span class=\"preprocessor\"># directories like /usr/src/myproject. Separate the files or directories with</span></div>\n<div class=\"line\"><a name=\"l00775\"></a><span class=\"lineno\">  775</span>&#160;<span class=\"preprocessor\"># spaces. See also FILE_PATTERNS and EXTENSION_MAPPING</span></div>\n<div class=\"line\"><a name=\"l00776\"></a><span class=\"lineno\">  776</span>&#160;<span class=\"preprocessor\"># Note: If this tag is empty the current directory is searched.</span></div>\n<div class=\"line\"><a name=\"l00777\"></a><span class=\"lineno\">  777</span>&#160;</div>\n<div class=\"line\"><a name=\"l00778\"></a><span class=\"lineno\">  778</span>&#160;INPUT                  = ../<a class=\"code\" href=\"a00236.html\">glm</a> \\</div>\n<div class=\"line\"><a name=\"l00779\"></a><span class=\"lineno\">  779</span>&#160;                         .</div>\n<div class=\"line\"><a name=\"l00780\"></a><span class=\"lineno\">  780</span>&#160;</div>\n<div class=\"line\"><a name=\"l00781\"></a><span class=\"lineno\">  781</span>&#160;# This tag can be used to specify the character encoding of the source files</div>\n<div class=\"line\"><a name=\"l00782\"></a><span class=\"lineno\">  782</span>&#160;<span class=\"preprocessor\"># that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses</span></div>\n<div class=\"line\"><a name=\"l00783\"></a><span class=\"lineno\">  783</span>&#160;<span class=\"preprocessor\"># libiconv (or the iconv built into libc) for the transcoding. See the libiconv</span></div>\n<div class=\"line\"><a name=\"l00784\"></a><span class=\"lineno\">  784</span>&#160;<span class=\"preprocessor\"># documentation (see: http://www.gnu.org/software/libiconv) for the list of</span></div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\">  785</span>&#160;<span class=\"preprocessor\"># possible encodings.</span></div>\n<div class=\"line\"><a name=\"l00786\"></a><span class=\"lineno\">  786</span>&#160;<span class=\"preprocessor\"># The default value is: UTF-8.</span></div>\n<div class=\"line\"><a name=\"l00787\"></a><span class=\"lineno\">  787</span>&#160;</div>\n<div class=\"line\"><a name=\"l00788\"></a><span class=\"lineno\">  788</span>&#160;INPUT_ENCODING         = UTF-8</div>\n<div class=\"line\"><a name=\"l00789\"></a><span class=\"lineno\">  789</span>&#160;</div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;<span class=\"preprocessor\"># If the value of the INPUT tag contains directories, you can use the</span></div>\n<div class=\"line\"><a name=\"l00791\"></a><span class=\"lineno\">  791</span>&#160;<span class=\"preprocessor\"># FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and</span></div>\n<div class=\"line\"><a name=\"l00792\"></a><span class=\"lineno\">  792</span>&#160;<span class=\"preprocessor\"># *.h) to filter out the source-files in the directories.</span></div>\n<div class=\"line\"><a name=\"l00793\"></a><span class=\"lineno\">  793</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160;<span class=\"preprocessor\"># Note that for custom extensions or not directly supported extensions you also</span></div>\n<div class=\"line\"><a name=\"l00795\"></a><span class=\"lineno\">  795</span>&#160;<span class=\"preprocessor\"># need to set EXTENSION_MAPPING for the extension otherwise the files are not</span></div>\n<div class=\"line\"><a name=\"l00796\"></a><span class=\"lineno\">  796</span>&#160;<span class=\"preprocessor\"># read by doxygen.</span></div>\n<div class=\"line\"><a name=\"l00797\"></a><span class=\"lineno\">  797</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00798\"></a><span class=\"lineno\">  798</span>&#160;<span class=\"preprocessor\"># If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,</span></div>\n<div class=\"line\"><a name=\"l00799\"></a><span class=\"lineno\">  799</span>&#160;<span class=\"preprocessor\"># *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,</span></div>\n<div class=\"line\"><a name=\"l00800\"></a><span class=\"lineno\">  800</span>&#160;<span class=\"preprocessor\"># *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,</span></div>\n<div class=\"line\"><a name=\"l00801\"></a><span class=\"lineno\">  801</span>&#160;<span class=\"preprocessor\"># *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd,</span></div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\">  802</span>&#160;<span class=\"preprocessor\"># *.vhdl, *.ucf, *.qsf, *.as and *.js.</span></div>\n<div class=\"line\"><a name=\"l00803\"></a><span class=\"lineno\">  803</span>&#160;</div>\n<div class=\"line\"><a name=\"l00804\"></a><span class=\"lineno\">  804</span>&#160;FILE_PATTERNS          = *.hpp \\</div>\n<div class=\"line\"><a name=\"l00805\"></a><span class=\"lineno\">  805</span>&#160;                         *.doxy</div>\n<div class=\"line\"><a name=\"l00806\"></a><span class=\"lineno\">  806</span>&#160;</div>\n<div class=\"line\"><a name=\"l00807\"></a><span class=\"lineno\">  807</span>&#160;<span class=\"preprocessor\"># The RECURSIVE tag can be used to specify whether or not subdirectories should</span></div>\n<div class=\"line\"><a name=\"l00808\"></a><span class=\"lineno\">  808</span>&#160;<span class=\"preprocessor\"># be searched for input files as well.</span></div>\n<div class=\"line\"><a name=\"l00809\"></a><span class=\"lineno\">  809</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00810\"></a><span class=\"lineno\">  810</span>&#160;</div>\n<div class=\"line\"><a name=\"l00811\"></a><span class=\"lineno\">  811</span>&#160;RECURSIVE              = YES</div>\n<div class=\"line\"><a name=\"l00812\"></a><span class=\"lineno\">  812</span>&#160;</div>\n<div class=\"line\"><a name=\"l00813\"></a><span class=\"lineno\">  813</span>&#160;<span class=\"preprocessor\"># The EXCLUDE tag can be used to specify files and/or directories that should be</span></div>\n<div class=\"line\"><a name=\"l00814\"></a><span class=\"lineno\">  814</span>&#160;<span class=\"preprocessor\"># excluded from the INPUT source files. This way you can easily exclude a</span></div>\n<div class=\"line\"><a name=\"l00815\"></a><span class=\"lineno\">  815</span>&#160;<span class=\"preprocessor\"># subdirectory from a directory tree whose root is specified with the INPUT tag.</span></div>\n<div class=\"line\"><a name=\"l00816\"></a><span class=\"lineno\">  816</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00817\"></a><span class=\"lineno\">  817</span>&#160;<span class=\"preprocessor\"># Note that relative paths are relative to the directory from which doxygen is</span></div>\n<div class=\"line\"><a name=\"l00818\"></a><span class=\"lineno\">  818</span>&#160;<span class=\"preprocessor\"># run.</span></div>\n<div class=\"line\"><a name=\"l00819\"></a><span class=\"lineno\">  819</span>&#160;</div>\n<div class=\"line\"><a name=\"l00820\"></a><span class=\"lineno\">  820</span>&#160;EXCLUDE                = </div>\n<div class=\"line\"><a name=\"l00821\"></a><span class=\"lineno\">  821</span>&#160;</div>\n<div class=\"line\"><a name=\"l00822\"></a><span class=\"lineno\">  822</span>&#160;<span class=\"preprocessor\"># The EXCLUDE_SYMLINKS tag can be used to select whether or not files or</span></div>\n<div class=\"line\"><a name=\"l00823\"></a><span class=\"lineno\">  823</span>&#160;<span class=\"preprocessor\"># directories that are symbolic links (a Unix file system feature) are excluded</span></div>\n<div class=\"line\"><a name=\"l00824\"></a><span class=\"lineno\">  824</span>&#160;<span class=\"preprocessor\"># from the input.</span></div>\n<div class=\"line\"><a name=\"l00825\"></a><span class=\"lineno\">  825</span>&#160;<span class=\"preprocessor\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00826\"></a><span class=\"lineno\">  826</span>&#160;</div>\n<div class=\"line\"><a name=\"l00827\"></a><span class=\"lineno\">  827</span>&#160;EXCLUDE_SYMLINKS       = NO</div>\n<div class=\"line\"><a name=\"l00828\"></a><span class=\"lineno\">  828</span>&#160;</div>\n<div class=\"line\"><a name=\"l00829\"></a><span class=\"lineno\">  829</span>&#160;<span class=\"preprocessor\"># If the value of the INPUT tag contains directories, you can use the</span></div>\n<div class=\"line\"><a name=\"l00830\"></a><span class=\"lineno\">  830</span>&#160;<span class=\"preprocessor\"># EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude</span></div>\n<div class=\"line\"><a name=\"l00831\"></a><span class=\"lineno\">  831</span>&#160;<span class=\"preprocessor\"># certain files from those directories.</span></div>\n<div class=\"line\"><a name=\"l00832\"></a><span class=\"lineno\">  832</span>&#160;<span class=\"preprocessor\">#</span></div>\n<div class=\"line\"><a name=\"l00833\"></a><span class=\"lineno\">  833</span>&#160;<span class=\"preprocessor\"># Note that the wildcards are matched against the file with absolute path, so to</span></div>\n<div class=\"line\"><a name=\"l00834\"></a><span class=\"lineno\">  834</span>&#160;<span class=\"preprocessor\"># exclude all test directories for example use the pattern */test</span><span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l00835\"></a><span class=\"lineno\">  835</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00836\"></a><span class=\"lineno\">  836</span>&#160;<span class=\"comment\">EXCLUDE_PATTERNS       = </span></div>\n<div class=\"line\"><a name=\"l00837\"></a><span class=\"lineno\">  837</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00838\"></a><span class=\"lineno\">  838</span>&#160;<span class=\"comment\"># The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names</span></div>\n<div class=\"line\"><a name=\"l00839\"></a><span class=\"lineno\">  839</span>&#160;<span class=\"comment\"># (namespaces, classes, functions, etc.) that should be excluded from the</span></div>\n<div class=\"line\"><a name=\"l00840\"></a><span class=\"lineno\">  840</span>&#160;<span class=\"comment\"># output. The symbol name can be a fully qualified name, a word, or if the</span></div>\n<div class=\"line\"><a name=\"l00841\"></a><span class=\"lineno\">  841</span>&#160;<span class=\"comment\"># wildcard * is used, a substring. Examples: ANamespace, AClass,</span></div>\n<div class=\"line\"><a name=\"l00842\"></a><span class=\"lineno\">  842</span>&#160;<span class=\"comment\"># AClass::ANamespace, ANamespace::*Test</span></div>\n<div class=\"line\"><a name=\"l00843\"></a><span class=\"lineno\">  843</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l00844\"></a><span class=\"lineno\">  844</span>&#160;<span class=\"comment\"># Note that the wildcards are matched against the file with absolute path, so to</span></div>\n<div class=\"line\"><a name=\"l00845\"></a><span class=\"lineno\">  845</span>&#160;<span class=\"comment\"># exclude all test directories use the pattern */</span><span class=\"preprocessor\">test</span><span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l00846\"></a><span class=\"lineno\">  846</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00847\"></a><span class=\"lineno\">  847</span>&#160;<span class=\"comment\">EXCLUDE_SYMBOLS        = </span></div>\n<div class=\"line\"><a name=\"l00848\"></a><span class=\"lineno\">  848</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00849\"></a><span class=\"lineno\">  849</span>&#160;<span class=\"comment\"># The EXAMPLE_PATH tag can be used to specify one or more files or directories</span></div>\n<div class=\"line\"><a name=\"l00850\"></a><span class=\"lineno\">  850</span>&#160;<span class=\"comment\"># that contain example code fragments that are included (see the \\include</span></div>\n<div class=\"line\"><a name=\"l00851\"></a><span class=\"lineno\">  851</span>&#160;<span class=\"comment\"># command).</span></div>\n<div class=\"line\"><a name=\"l00852\"></a><span class=\"lineno\">  852</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00853\"></a><span class=\"lineno\">  853</span>&#160;<span class=\"comment\">EXAMPLE_PATH           = </span></div>\n<div class=\"line\"><a name=\"l00854\"></a><span class=\"lineno\">  854</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00855\"></a><span class=\"lineno\">  855</span>&#160;<span class=\"comment\"># If the value of the EXAMPLE_PATH tag contains directories, you can use the</span></div>\n<div class=\"line\"><a name=\"l00856\"></a><span class=\"lineno\">  856</span>&#160;<span class=\"comment\"># EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and</span></div>\n<div class=\"line\"><a name=\"l00857\"></a><span class=\"lineno\">  857</span>&#160;<span class=\"comment\"># *.h) to filter out the source-files in the directories. If left blank all</span></div>\n<div class=\"line\"><a name=\"l00858\"></a><span class=\"lineno\">  858</span>&#160;<span class=\"comment\"># files are included.</span></div>\n<div class=\"line\"><a name=\"l00859\"></a><span class=\"lineno\">  859</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00860\"></a><span class=\"lineno\">  860</span>&#160;<span class=\"comment\">EXAMPLE_PATTERNS       = *</span></div>\n<div class=\"line\"><a name=\"l00861\"></a><span class=\"lineno\">  861</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00862\"></a><span class=\"lineno\">  862</span>&#160;<span class=\"comment\"># If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be</span></div>\n<div class=\"line\"><a name=\"l00863\"></a><span class=\"lineno\">  863</span>&#160;<span class=\"comment\"># searched for input files to be used with the \\include or \\dontinclude commands</span></div>\n<div class=\"line\"><a name=\"l00864\"></a><span class=\"lineno\">  864</span>&#160;<span class=\"comment\"># irrespective of the value of the RECURSIVE tag.</span></div>\n<div class=\"line\"><a name=\"l00865\"></a><span class=\"lineno\">  865</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00866\"></a><span class=\"lineno\">  866</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00867\"></a><span class=\"lineno\">  867</span>&#160;<span class=\"comment\">EXAMPLE_RECURSIVE      = NO</span></div>\n<div class=\"line\"><a name=\"l00868\"></a><span class=\"lineno\">  868</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00869\"></a><span class=\"lineno\">  869</span>&#160;<span class=\"comment\"># The IMAGE_PATH tag can be used to specify one or more files or directories</span></div>\n<div class=\"line\"><a name=\"l00870\"></a><span class=\"lineno\">  870</span>&#160;<span class=\"comment\"># that contain images that are to be included in the documentation (see the</span></div>\n<div class=\"line\"><a name=\"l00871\"></a><span class=\"lineno\">  871</span>&#160;<span class=\"comment\"># \\image command).</span></div>\n<div class=\"line\"><a name=\"l00872\"></a><span class=\"lineno\">  872</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00873\"></a><span class=\"lineno\">  873</span>&#160;<span class=\"comment\">IMAGE_PATH             = </span></div>\n<div class=\"line\"><a name=\"l00874\"></a><span class=\"lineno\">  874</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00875\"></a><span class=\"lineno\">  875</span>&#160;<span class=\"comment\"># The INPUT_FILTER tag can be used to specify a program that doxygen should</span></div>\n<div class=\"line\"><a name=\"l00876\"></a><span class=\"lineno\">  876</span>&#160;<span class=\"comment\"># invoke to filter for each input file. Doxygen will invoke the filter program</span></div>\n<div class=\"line\"><a name=\"l00877\"></a><span class=\"lineno\">  877</span>&#160;<span class=\"comment\"># by executing (via popen()) the command:</span></div>\n<div class=\"line\"><a name=\"l00878\"></a><span class=\"lineno\">  878</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l00879\"></a><span class=\"lineno\">  879</span>&#160;<span class=\"comment\"># &lt;filter&gt; &lt;input-file&gt;</span></div>\n<div class=\"line\"><a name=\"l00880\"></a><span class=\"lineno\">  880</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l00881\"></a><span class=\"lineno\">  881</span>&#160;<span class=\"comment\"># where &lt;filter&gt; is the value of the INPUT_FILTER tag, and &lt;input-file&gt; is the</span></div>\n<div class=\"line\"><a name=\"l00882\"></a><span class=\"lineno\">  882</span>&#160;<span class=\"comment\"># name of an input file. Doxygen will then use the output that the filter</span></div>\n<div class=\"line\"><a name=\"l00883\"></a><span class=\"lineno\">  883</span>&#160;<span class=\"comment\"># program writes to standard output. If FILTER_PATTERNS is specified, this tag</span></div>\n<div class=\"line\"><a name=\"l00884\"></a><span class=\"lineno\">  884</span>&#160;<span class=\"comment\"># will be ignored.</span></div>\n<div class=\"line\"><a name=\"l00885\"></a><span class=\"lineno\">  885</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l00886\"></a><span class=\"lineno\">  886</span>&#160;<span class=\"comment\"># Note that the filter must not add or remove lines; it is applied before the</span></div>\n<div class=\"line\"><a name=\"l00887\"></a><span class=\"lineno\">  887</span>&#160;<span class=\"comment\"># code is scanned, but not when the output code is generated. If lines are added</span></div>\n<div class=\"line\"><a name=\"l00888\"></a><span class=\"lineno\">  888</span>&#160;<span class=\"comment\"># or removed, the anchors will not be placed correctly.</span></div>\n<div class=\"line\"><a name=\"l00889\"></a><span class=\"lineno\">  889</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00890\"></a><span class=\"lineno\">  890</span>&#160;<span class=\"comment\">INPUT_FILTER           = </span></div>\n<div class=\"line\"><a name=\"l00891\"></a><span class=\"lineno\">  891</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00892\"></a><span class=\"lineno\">  892</span>&#160;<span class=\"comment\"># The FILTER_PATTERNS tag can be used to specify filters on a per file pattern</span></div>\n<div class=\"line\"><a name=\"l00893\"></a><span class=\"lineno\">  893</span>&#160;<span class=\"comment\"># basis. Doxygen will compare the file name with each pattern and apply the</span></div>\n<div class=\"line\"><a name=\"l00894\"></a><span class=\"lineno\">  894</span>&#160;<span class=\"comment\"># filter if there is a match. The filters are a list of the form: pattern=filter</span></div>\n<div class=\"line\"><a name=\"l00895\"></a><span class=\"lineno\">  895</span>&#160;<span class=\"comment\"># (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how</span></div>\n<div class=\"line\"><a name=\"l00896\"></a><span class=\"lineno\">  896</span>&#160;<span class=\"comment\"># filters are used. If the FILTER_PATTERNS tag is empty or if none of the</span></div>\n<div class=\"line\"><a name=\"l00897\"></a><span class=\"lineno\">  897</span>&#160;<span class=\"comment\"># patterns match the file name, INPUT_FILTER is applied.</span></div>\n<div class=\"line\"><a name=\"l00898\"></a><span class=\"lineno\">  898</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00899\"></a><span class=\"lineno\">  899</span>&#160;<span class=\"comment\">FILTER_PATTERNS        = </span></div>\n<div class=\"line\"><a name=\"l00900\"></a><span class=\"lineno\">  900</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00901\"></a><span class=\"lineno\">  901</span>&#160;<span class=\"comment\"># If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using</span></div>\n<div class=\"line\"><a name=\"l00902\"></a><span class=\"lineno\">  902</span>&#160;<span class=\"comment\"># INPUT_FILTER) will also be used to filter the input files that are used for</span></div>\n<div class=\"line\"><a name=\"l00903\"></a><span class=\"lineno\">  903</span>&#160;<span class=\"comment\"># producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).</span></div>\n<div class=\"line\"><a name=\"l00904\"></a><span class=\"lineno\">  904</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00905\"></a><span class=\"lineno\">  905</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00906\"></a><span class=\"lineno\">  906</span>&#160;<span class=\"comment\">FILTER_SOURCE_FILES    = NO</span></div>\n<div class=\"line\"><a name=\"l00907\"></a><span class=\"lineno\">  907</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00908\"></a><span class=\"lineno\">  908</span>&#160;<span class=\"comment\"># The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file</span></div>\n<div class=\"line\"><a name=\"l00909\"></a><span class=\"lineno\">  909</span>&#160;<span class=\"comment\"># pattern. A pattern will override the setting for FILTER_PATTERN (if any) and</span></div>\n<div class=\"line\"><a name=\"l00910\"></a><span class=\"lineno\">  910</span>&#160;<span class=\"comment\"># it is also possible to disable source filtering for a specific pattern using</span></div>\n<div class=\"line\"><a name=\"l00911\"></a><span class=\"lineno\">  911</span>&#160;<span class=\"comment\"># *.ext= (so without naming a filter).</span></div>\n<div class=\"line\"><a name=\"l00912\"></a><span class=\"lineno\">  912</span>&#160;<span class=\"comment\"># This tag requires that the tag FILTER_SOURCE_FILES is set to YES.</span></div>\n<div class=\"line\"><a name=\"l00913\"></a><span class=\"lineno\">  913</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00914\"></a><span class=\"lineno\">  914</span>&#160;<span class=\"comment\">FILTER_SOURCE_PATTERNS = </span></div>\n<div class=\"line\"><a name=\"l00915\"></a><span class=\"lineno\">  915</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00916\"></a><span class=\"lineno\">  916</span>&#160;<span class=\"comment\"># If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that</span></div>\n<div class=\"line\"><a name=\"l00917\"></a><span class=\"lineno\">  917</span>&#160;<span class=\"comment\"># is part of the input, its contents will be placed on the main page</span></div>\n<div class=\"line\"><a name=\"l00918\"></a><span class=\"lineno\">  918</span>&#160;<span class=\"comment\"># (index.html). This can be useful if you have a project on for instance GitHub</span></div>\n<div class=\"line\"><a name=\"l00919\"></a><span class=\"lineno\">  919</span>&#160;<span class=\"comment\"># and want to reuse the introduction page also for the doxygen output.</span></div>\n<div class=\"line\"><a name=\"l00920\"></a><span class=\"lineno\">  920</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00921\"></a><span class=\"lineno\">  921</span>&#160;<span class=\"comment\">USE_MDFILE_AS_MAINPAGE = </span></div>\n<div class=\"line\"><a name=\"l00922\"></a><span class=\"lineno\">  922</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00923\"></a><span class=\"lineno\">  923</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00924\"></a><span class=\"lineno\">  924</span>&#160;<span class=\"comment\"># Configuration options related to source browsing</span></div>\n<div class=\"line\"><a name=\"l00925\"></a><span class=\"lineno\">  925</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l00926\"></a><span class=\"lineno\">  926</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00927\"></a><span class=\"lineno\">  927</span>&#160;<span class=\"comment\"># If the SOURCE_BROWSER tag is set to YES then a list of source files will be</span></div>\n<div class=\"line\"><a name=\"l00928\"></a><span class=\"lineno\">  928</span>&#160;<span class=\"comment\"># generated. Documented entities will be cross-referenced with these sources.</span></div>\n<div class=\"line\"><a name=\"l00929\"></a><span class=\"lineno\">  929</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l00930\"></a><span class=\"lineno\">  930</span>&#160;<span class=\"comment\"># Note: To get rid of all source code in the generated output, make sure that</span></div>\n<div class=\"line\"><a name=\"l00931\"></a><span class=\"lineno\">  931</span>&#160;<span class=\"comment\"># also VERBATIM_HEADERS is set to NO.</span></div>\n<div class=\"line\"><a name=\"l00932\"></a><span class=\"lineno\">  932</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00933\"></a><span class=\"lineno\">  933</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00934\"></a><span class=\"lineno\">  934</span>&#160;<span class=\"comment\">SOURCE_BROWSER         = YES</span></div>\n<div class=\"line\"><a name=\"l00935\"></a><span class=\"lineno\">  935</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00936\"></a><span class=\"lineno\">  936</span>&#160;<span class=\"comment\"># Setting the INLINE_SOURCES tag to YES will include the body of functions,</span></div>\n<div class=\"line\"><a name=\"l00937\"></a><span class=\"lineno\">  937</span>&#160;<span class=\"comment\"># classes and enums directly into the documentation.</span></div>\n<div class=\"line\"><a name=\"l00938\"></a><span class=\"lineno\">  938</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00939\"></a><span class=\"lineno\">  939</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00940\"></a><span class=\"lineno\">  940</span>&#160;<span class=\"comment\">INLINE_SOURCES         = NO</span></div>\n<div class=\"line\"><a name=\"l00941\"></a><span class=\"lineno\">  941</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00942\"></a><span class=\"lineno\">  942</span>&#160;<span class=\"comment\"># Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any</span></div>\n<div class=\"line\"><a name=\"l00943\"></a><span class=\"lineno\">  943</span>&#160;<span class=\"comment\"># special comment blocks from generated source code fragments. Normal C, C++ and</span></div>\n<div class=\"line\"><a name=\"l00944\"></a><span class=\"lineno\">  944</span>&#160;<span class=\"comment\"># Fortran comments will always remain visible.</span></div>\n<div class=\"line\"><a name=\"l00945\"></a><span class=\"lineno\">  945</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00946\"></a><span class=\"lineno\">  946</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00947\"></a><span class=\"lineno\">  947</span>&#160;<span class=\"comment\">STRIP_CODE_COMMENTS    = YES</span></div>\n<div class=\"line\"><a name=\"l00948\"></a><span class=\"lineno\">  948</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00949\"></a><span class=\"lineno\">  949</span>&#160;<span class=\"comment\"># If the REFERENCED_BY_RELATION tag is set to YES then for each documented</span></div>\n<div class=\"line\"><a name=\"l00950\"></a><span class=\"lineno\">  950</span>&#160;<span class=\"comment\"># function all documented functions referencing it will be listed.</span></div>\n<div class=\"line\"><a name=\"l00951\"></a><span class=\"lineno\">  951</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00952\"></a><span class=\"lineno\">  952</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00953\"></a><span class=\"lineno\">  953</span>&#160;<span class=\"comment\">REFERENCED_BY_RELATION = YES</span></div>\n<div class=\"line\"><a name=\"l00954\"></a><span class=\"lineno\">  954</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00955\"></a><span class=\"lineno\">  955</span>&#160;<span class=\"comment\"># If the REFERENCES_RELATION tag is set to YES then for each documented function</span></div>\n<div class=\"line\"><a name=\"l00956\"></a><span class=\"lineno\">  956</span>&#160;<span class=\"comment\"># all documented entities called/used by that function will be listed.</span></div>\n<div class=\"line\"><a name=\"l00957\"></a><span class=\"lineno\">  957</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00958\"></a><span class=\"lineno\">  958</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00959\"></a><span class=\"lineno\">  959</span>&#160;<span class=\"comment\">REFERENCES_RELATION    = YES</span></div>\n<div class=\"line\"><a name=\"l00960\"></a><span class=\"lineno\">  960</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00961\"></a><span class=\"lineno\">  961</span>&#160;<span class=\"comment\"># If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set</span></div>\n<div class=\"line\"><a name=\"l00962\"></a><span class=\"lineno\">  962</span>&#160;<span class=\"comment\"># to YES then the hyperlinks from functions in REFERENCES_RELATION and</span></div>\n<div class=\"line\"><a name=\"l00963\"></a><span class=\"lineno\">  963</span>&#160;<span class=\"comment\"># REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will</span></div>\n<div class=\"line\"><a name=\"l00964\"></a><span class=\"lineno\">  964</span>&#160;<span class=\"comment\"># link to the documentation.</span></div>\n<div class=\"line\"><a name=\"l00965\"></a><span class=\"lineno\">  965</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00966\"></a><span class=\"lineno\">  966</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00967\"></a><span class=\"lineno\">  967</span>&#160;<span class=\"comment\">REFERENCES_LINK_SOURCE = YES</span></div>\n<div class=\"line\"><a name=\"l00968\"></a><span class=\"lineno\">  968</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00969\"></a><span class=\"lineno\">  969</span>&#160;<span class=\"comment\"># If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the</span></div>\n<div class=\"line\"><a name=\"l00970\"></a><span class=\"lineno\">  970</span>&#160;<span class=\"comment\"># source code will show a tooltip with additional information such as prototype,</span></div>\n<div class=\"line\"><a name=\"l00971\"></a><span class=\"lineno\">  971</span>&#160;<span class=\"comment\"># brief description and links to the definition and documentation. Since this</span></div>\n<div class=\"line\"><a name=\"l00972\"></a><span class=\"lineno\">  972</span>&#160;<span class=\"comment\"># will make the HTML file larger and loading of large files a bit slower, you</span></div>\n<div class=\"line\"><a name=\"l00973\"></a><span class=\"lineno\">  973</span>&#160;<span class=\"comment\"># can opt to disable this feature.</span></div>\n<div class=\"line\"><a name=\"l00974\"></a><span class=\"lineno\">  974</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l00975\"></a><span class=\"lineno\">  975</span>&#160;<span class=\"comment\"># This tag requires that the tag SOURCE_BROWSER is set to YES.</span></div>\n<div class=\"line\"><a name=\"l00976\"></a><span class=\"lineno\">  976</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00977\"></a><span class=\"lineno\">  977</span>&#160;<span class=\"comment\">SOURCE_TOOLTIPS        = YES</span></div>\n<div class=\"line\"><a name=\"l00978\"></a><span class=\"lineno\">  978</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00979\"></a><span class=\"lineno\">  979</span>&#160;<span class=\"comment\"># If the USE_HTAGS tag is set to YES then the references to source code will</span></div>\n<div class=\"line\"><a name=\"l00980\"></a><span class=\"lineno\">  980</span>&#160;<span class=\"comment\"># point to the HTML generated by the htags(1) tool instead of doxygen built-in</span></div>\n<div class=\"line\"><a name=\"l00981\"></a><span class=\"lineno\">  981</span>&#160;<span class=\"comment\"># source browser. The htags tool is part of GNU&#39;s global source tagging system</span></div>\n<div class=\"line\"><a name=\"l00982\"></a><span class=\"lineno\">  982</span>&#160;<span class=\"comment\"># (see http://www.gnu.org/software/global/global.html). You will need version</span></div>\n<div class=\"line\"><a name=\"l00983\"></a><span class=\"lineno\">  983</span>&#160;<span class=\"comment\"># 4.8.6 or higher.</span></div>\n<div class=\"line\"><a name=\"l00984\"></a><span class=\"lineno\">  984</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l00985\"></a><span class=\"lineno\">  985</span>&#160;<span class=\"comment\"># To use it do the following:</span></div>\n<div class=\"line\"><a name=\"l00986\"></a><span class=\"lineno\">  986</span>&#160;<span class=\"comment\"># - Install the latest version of global</span></div>\n<div class=\"line\"><a name=\"l00987\"></a><span class=\"lineno\">  987</span>&#160;<span class=\"comment\"># - Enable SOURCE_BROWSER and USE_HTAGS in the config file</span></div>\n<div class=\"line\"><a name=\"l00988\"></a><span class=\"lineno\">  988</span>&#160;<span class=\"comment\"># - Make sure the INPUT points to the root of the source tree</span></div>\n<div class=\"line\"><a name=\"l00989\"></a><span class=\"lineno\">  989</span>&#160;<span class=\"comment\"># - Run doxygen as normal</span></div>\n<div class=\"line\"><a name=\"l00990\"></a><span class=\"lineno\">  990</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l00991\"></a><span class=\"lineno\">  991</span>&#160;<span class=\"comment\"># Doxygen will invoke htags (and that will in turn invoke gtags), so these</span></div>\n<div class=\"line\"><a name=\"l00992\"></a><span class=\"lineno\">  992</span>&#160;<span class=\"comment\"># tools must be available from the command line (i.e. in the search path).</span></div>\n<div class=\"line\"><a name=\"l00993\"></a><span class=\"lineno\">  993</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l00994\"></a><span class=\"lineno\">  994</span>&#160;<span class=\"comment\"># The result: instead of the source browser generated by doxygen, the links to</span></div>\n<div class=\"line\"><a name=\"l00995\"></a><span class=\"lineno\">  995</span>&#160;<span class=\"comment\"># source code will now point to the output of htags.</span></div>\n<div class=\"line\"><a name=\"l00996\"></a><span class=\"lineno\">  996</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l00997\"></a><span class=\"lineno\">  997</span>&#160;<span class=\"comment\"># This tag requires that the tag SOURCE_BROWSER is set to YES.</span></div>\n<div class=\"line\"><a name=\"l00998\"></a><span class=\"lineno\">  998</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l00999\"></a><span class=\"lineno\">  999</span>&#160;<span class=\"comment\">USE_HTAGS              = NO</span></div>\n<div class=\"line\"><a name=\"l01000\"></a><span class=\"lineno\"> 1000</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01001\"></a><span class=\"lineno\"> 1001</span>&#160;<span class=\"comment\"># If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a</span></div>\n<div class=\"line\"><a name=\"l01002\"></a><span class=\"lineno\"> 1002</span>&#160;<span class=\"comment\"># verbatim copy of the header file for each class for which an include is</span></div>\n<div class=\"line\"><a name=\"l01003\"></a><span class=\"lineno\"> 1003</span>&#160;<span class=\"comment\"># specified. Set to NO to disable this.</span></div>\n<div class=\"line\"><a name=\"l01004\"></a><span class=\"lineno\"> 1004</span>&#160;<span class=\"comment\"># See also: Section \\class.</span></div>\n<div class=\"line\"><a name=\"l01005\"></a><span class=\"lineno\"> 1005</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01006\"></a><span class=\"lineno\"> 1006</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01007\"></a><span class=\"lineno\"> 1007</span>&#160;<span class=\"comment\">VERBATIM_HEADERS       = YES</span></div>\n<div class=\"line\"><a name=\"l01008\"></a><span class=\"lineno\"> 1008</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01009\"></a><span class=\"lineno\"> 1009</span>&#160;<span class=\"comment\"># If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the</span></div>\n<div class=\"line\"><a name=\"l01010\"></a><span class=\"lineno\"> 1010</span>&#160;<span class=\"comment\"># clang parser (see: http://clang.llvm.org/) for more accurate parsing at the</span></div>\n<div class=\"line\"><a name=\"l01011\"></a><span class=\"lineno\"> 1011</span>&#160;<span class=\"comment\"># cost of reduced performance. This can be particularly helpful with template</span></div>\n<div class=\"line\"><a name=\"l01012\"></a><span class=\"lineno\"> 1012</span>&#160;<span class=\"comment\"># rich C++ code for which doxygen&#39;s built-in parser lacks the necessary type</span></div>\n<div class=\"line\"><a name=\"l01013\"></a><span class=\"lineno\"> 1013</span>&#160;<span class=\"comment\"># information.</span></div>\n<div class=\"line\"><a name=\"l01014\"></a><span class=\"lineno\"> 1014</span>&#160;<span class=\"comment\"># Note: The availability of this option depends on whether or not doxygen was</span></div>\n<div class=\"line\"><a name=\"l01015\"></a><span class=\"lineno\"> 1015</span>&#160;<span class=\"comment\"># compiled with the --with-libclang option.</span></div>\n<div class=\"line\"><a name=\"l01016\"></a><span class=\"lineno\"> 1016</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01017\"></a><span class=\"lineno\"> 1017</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01018\"></a><span class=\"lineno\"> 1018</span>&#160;<span class=\"comment\">CLANG_ASSISTED_PARSING = NO</span></div>\n<div class=\"line\"><a name=\"l01019\"></a><span class=\"lineno\"> 1019</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01020\"></a><span class=\"lineno\"> 1020</span>&#160;<span class=\"comment\"># If clang assisted parsing is enabled you can provide the compiler with command</span></div>\n<div class=\"line\"><a name=\"l01021\"></a><span class=\"lineno\"> 1021</span>&#160;<span class=\"comment\"># line options that you would normally use when invoking the compiler. Note that</span></div>\n<div class=\"line\"><a name=\"l01022\"></a><span class=\"lineno\"> 1022</span>&#160;<span class=\"comment\"># the include paths will already be set by doxygen for the files and directories</span></div>\n<div class=\"line\"><a name=\"l01023\"></a><span class=\"lineno\"> 1023</span>&#160;<span class=\"comment\"># specified with INPUT and INCLUDE_PATH.</span></div>\n<div class=\"line\"><a name=\"l01024\"></a><span class=\"lineno\"> 1024</span>&#160;<span class=\"comment\"># This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01025\"></a><span class=\"lineno\"> 1025</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01026\"></a><span class=\"lineno\"> 1026</span>&#160;<span class=\"comment\">CLANG_OPTIONS          = </span></div>\n<div class=\"line\"><a name=\"l01027\"></a><span class=\"lineno\"> 1027</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01028\"></a><span class=\"lineno\"> 1028</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01029\"></a><span class=\"lineno\"> 1029</span>&#160;<span class=\"comment\"># Configuration options related to the alphabetical class index</span></div>\n<div class=\"line\"><a name=\"l01030\"></a><span class=\"lineno\"> 1030</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01031\"></a><span class=\"lineno\"> 1031</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01032\"></a><span class=\"lineno\"> 1032</span>&#160;<span class=\"comment\"># If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all</span></div>\n<div class=\"line\"><a name=\"l01033\"></a><span class=\"lineno\"> 1033</span>&#160;<span class=\"comment\"># compounds will be generated. Enable this if the project contains a lot of</span></div>\n<div class=\"line\"><a name=\"l01034\"></a><span class=\"lineno\"> 1034</span>&#160;<span class=\"comment\"># classes, structs, unions or interfaces.</span></div>\n<div class=\"line\"><a name=\"l01035\"></a><span class=\"lineno\"> 1035</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01036\"></a><span class=\"lineno\"> 1036</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01037\"></a><span class=\"lineno\"> 1037</span>&#160;<span class=\"comment\">ALPHABETICAL_INDEX     = NO</span></div>\n<div class=\"line\"><a name=\"l01038\"></a><span class=\"lineno\"> 1038</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01039\"></a><span class=\"lineno\"> 1039</span>&#160;<span class=\"comment\"># The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in</span></div>\n<div class=\"line\"><a name=\"l01040\"></a><span class=\"lineno\"> 1040</span>&#160;<span class=\"comment\"># which the alphabetical index list will be split.</span></div>\n<div class=\"line\"><a name=\"l01041\"></a><span class=\"lineno\"> 1041</span>&#160;<span class=\"comment\"># Minimum value: 1, maximum value: 20, default value: 5.</span></div>\n<div class=\"line\"><a name=\"l01042\"></a><span class=\"lineno\"> 1042</span>&#160;<span class=\"comment\"># This tag requires that the tag ALPHABETICAL_INDEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01043\"></a><span class=\"lineno\"> 1043</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01044\"></a><span class=\"lineno\"> 1044</span>&#160;<span class=\"comment\">COLS_IN_ALPHA_INDEX    = 5</span></div>\n<div class=\"line\"><a name=\"l01045\"></a><span class=\"lineno\"> 1045</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01046\"></a><span class=\"lineno\"> 1046</span>&#160;<span class=\"comment\"># In case all classes in a project start with a common prefix, all classes will</span></div>\n<div class=\"line\"><a name=\"l01047\"></a><span class=\"lineno\"> 1047</span>&#160;<span class=\"comment\"># be put under the same header in the alphabetical index. The IGNORE_PREFIX tag</span></div>\n<div class=\"line\"><a name=\"l01048\"></a><span class=\"lineno\"> 1048</span>&#160;<span class=\"comment\"># can be used to specify a prefix (or a list of prefixes) that should be ignored</span></div>\n<div class=\"line\"><a name=\"l01049\"></a><span class=\"lineno\"> 1049</span>&#160;<span class=\"comment\"># while generating the index headers.</span></div>\n<div class=\"line\"><a name=\"l01050\"></a><span class=\"lineno\"> 1050</span>&#160;<span class=\"comment\"># This tag requires that the tag ALPHABETICAL_INDEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01051\"></a><span class=\"lineno\"> 1051</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01052\"></a><span class=\"lineno\"> 1052</span>&#160;<span class=\"comment\">IGNORE_PREFIX          = </span></div>\n<div class=\"line\"><a name=\"l01053\"></a><span class=\"lineno\"> 1053</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01054\"></a><span class=\"lineno\"> 1054</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01055\"></a><span class=\"lineno\"> 1055</span>&#160;<span class=\"comment\"># Configuration options related to the HTML output</span></div>\n<div class=\"line\"><a name=\"l01056\"></a><span class=\"lineno\"> 1056</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01057\"></a><span class=\"lineno\"> 1057</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01058\"></a><span class=\"lineno\"> 1058</span>&#160;<span class=\"comment\"># If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output</span></div>\n<div class=\"line\"><a name=\"l01059\"></a><span class=\"lineno\"> 1059</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01060\"></a><span class=\"lineno\"> 1060</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01061\"></a><span class=\"lineno\"> 1061</span>&#160;<span class=\"comment\">GENERATE_HTML          = YES</span></div>\n<div class=\"line\"><a name=\"l01062\"></a><span class=\"lineno\"> 1062</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01063\"></a><span class=\"lineno\"> 1063</span>&#160;<span class=\"comment\"># The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a</span></div>\n<div class=\"line\"><a name=\"l01064\"></a><span class=\"lineno\"> 1064</span>&#160;<span class=\"comment\"># relative path is entered the value of OUTPUT_DIRECTORY will be put in front of</span></div>\n<div class=\"line\"><a name=\"l01065\"></a><span class=\"lineno\"> 1065</span>&#160;<span class=\"comment\"># it.</span></div>\n<div class=\"line\"><a name=\"l01066\"></a><span class=\"lineno\"> 1066</span>&#160;<span class=\"comment\"># The default directory is: html.</span></div>\n<div class=\"line\"><a name=\"l01067\"></a><span class=\"lineno\"> 1067</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01068\"></a><span class=\"lineno\"> 1068</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01069\"></a><span class=\"lineno\"> 1069</span>&#160;<span class=\"comment\">HTML_OUTPUT            = html</span></div>\n<div class=\"line\"><a name=\"l01070\"></a><span class=\"lineno\"> 1070</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01071\"></a><span class=\"lineno\"> 1071</span>&#160;<span class=\"comment\"># The HTML_FILE_EXTENSION tag can be used to specify the file extension for each</span></div>\n<div class=\"line\"><a name=\"l01072\"></a><span class=\"lineno\"> 1072</span>&#160;<span class=\"comment\"># generated HTML page (for example: .htm, .php, .asp).</span></div>\n<div class=\"line\"><a name=\"l01073\"></a><span class=\"lineno\"> 1073</span>&#160;<span class=\"comment\"># The default value is: .html.</span></div>\n<div class=\"line\"><a name=\"l01074\"></a><span class=\"lineno\"> 1074</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01075\"></a><span class=\"lineno\"> 1075</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01076\"></a><span class=\"lineno\"> 1076</span>&#160;<span class=\"comment\">HTML_FILE_EXTENSION    = .html</span></div>\n<div class=\"line\"><a name=\"l01077\"></a><span class=\"lineno\"> 1077</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01078\"></a><span class=\"lineno\"> 1078</span>&#160;<span class=\"comment\"># The HTML_HEADER tag can be used to specify a user-defined HTML header file for</span></div>\n<div class=\"line\"><a name=\"l01079\"></a><span class=\"lineno\"> 1079</span>&#160;<span class=\"comment\"># each generated HTML page. If the tag is left blank doxygen will generate a</span></div>\n<div class=\"line\"><a name=\"l01080\"></a><span class=\"lineno\"> 1080</span>&#160;<span class=\"comment\"># standard header.</span></div>\n<div class=\"line\"><a name=\"l01081\"></a><span class=\"lineno\"> 1081</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01082\"></a><span class=\"lineno\"> 1082</span>&#160;<span class=\"comment\"># To get valid HTML the header file that includes any scripts and style sheets</span></div>\n<div class=\"line\"><a name=\"l01083\"></a><span class=\"lineno\"> 1083</span>&#160;<span class=\"comment\"># that doxygen needs, which is dependent on the configuration options used (e.g.</span></div>\n<div class=\"line\"><a name=\"l01084\"></a><span class=\"lineno\"> 1084</span>&#160;<span class=\"comment\"># the setting GENERATE_TREEVIEW). It is highly recommended to start with a</span></div>\n<div class=\"line\"><a name=\"l01085\"></a><span class=\"lineno\"> 1085</span>&#160;<span class=\"comment\"># default header using</span></div>\n<div class=\"line\"><a name=\"l01086\"></a><span class=\"lineno\"> 1086</span>&#160;<span class=\"comment\"># doxygen -w html new_header.html new_footer.html new_stylesheet.css</span></div>\n<div class=\"line\"><a name=\"l01087\"></a><span class=\"lineno\"> 1087</span>&#160;<span class=\"comment\"># YourConfigFile</span></div>\n<div class=\"line\"><a name=\"l01088\"></a><span class=\"lineno\"> 1088</span>&#160;<span class=\"comment\"># and then modify the file new_header.html. See also section &quot;Doxygen usage&quot;</span></div>\n<div class=\"line\"><a name=\"l01089\"></a><span class=\"lineno\"> 1089</span>&#160;<span class=\"comment\"># for information on how to generate the default header that doxygen normally</span></div>\n<div class=\"line\"><a name=\"l01090\"></a><span class=\"lineno\"> 1090</span>&#160;<span class=\"comment\"># uses.</span></div>\n<div class=\"line\"><a name=\"l01091\"></a><span class=\"lineno\"> 1091</span>&#160;<span class=\"comment\"># Note: The header is subject to change so you typically have to regenerate the</span></div>\n<div class=\"line\"><a name=\"l01092\"></a><span class=\"lineno\"> 1092</span>&#160;<span class=\"comment\"># default header when upgrading to a newer version of doxygen. For a description</span></div>\n<div class=\"line\"><a name=\"l01093\"></a><span class=\"lineno\"> 1093</span>&#160;<span class=\"comment\"># of the possible markers and block names see the documentation.</span></div>\n<div class=\"line\"><a name=\"l01094\"></a><span class=\"lineno\"> 1094</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01095\"></a><span class=\"lineno\"> 1095</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01096\"></a><span class=\"lineno\"> 1096</span>&#160;<span class=\"comment\">HTML_HEADER            = </span></div>\n<div class=\"line\"><a name=\"l01097\"></a><span class=\"lineno\"> 1097</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01098\"></a><span class=\"lineno\"> 1098</span>&#160;<span class=\"comment\"># The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each</span></div>\n<div class=\"line\"><a name=\"l01099\"></a><span class=\"lineno\"> 1099</span>&#160;<span class=\"comment\"># generated HTML page. If the tag is left blank doxygen will generate a standard</span></div>\n<div class=\"line\"><a name=\"l01100\"></a><span class=\"lineno\"> 1100</span>&#160;<span class=\"comment\"># footer. See HTML_HEADER for more information on how to generate a default</span></div>\n<div class=\"line\"><a name=\"l01101\"></a><span class=\"lineno\"> 1101</span>&#160;<span class=\"comment\"># footer and what special commands can be used inside the footer. See also</span></div>\n<div class=\"line\"><a name=\"l01102\"></a><span class=\"lineno\"> 1102</span>&#160;<span class=\"comment\"># section &quot;Doxygen usage&quot; for information on how to generate the default footer</span></div>\n<div class=\"line\"><a name=\"l01103\"></a><span class=\"lineno\"> 1103</span>&#160;<span class=\"comment\"># that doxygen normally uses.</span></div>\n<div class=\"line\"><a name=\"l01104\"></a><span class=\"lineno\"> 1104</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01105\"></a><span class=\"lineno\"> 1105</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01106\"></a><span class=\"lineno\"> 1106</span>&#160;<span class=\"comment\">HTML_FOOTER            = </span></div>\n<div class=\"line\"><a name=\"l01107\"></a><span class=\"lineno\"> 1107</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01108\"></a><span class=\"lineno\"> 1108</span>&#160;<span class=\"comment\"># The HTML_STYLESHEET tag can be used to specify a user-defined cascading style</span></div>\n<div class=\"line\"><a name=\"l01109\"></a><span class=\"lineno\"> 1109</span>&#160;<span class=\"comment\"># sheet that is used by each HTML page. It can be used to fine-tune the look of</span></div>\n<div class=\"line\"><a name=\"l01110\"></a><span class=\"lineno\"> 1110</span>&#160;<span class=\"comment\"># the HTML output. If left blank doxygen will generate a default style sheet.</span></div>\n<div class=\"line\"><a name=\"l01111\"></a><span class=\"lineno\"> 1111</span>&#160;<span class=\"comment\"># See also section &quot;Doxygen usage&quot; for information on how to generate the style</span></div>\n<div class=\"line\"><a name=\"l01112\"></a><span class=\"lineno\"> 1112</span>&#160;<span class=\"comment\"># sheet that doxygen normally uses.</span></div>\n<div class=\"line\"><a name=\"l01113\"></a><span class=\"lineno\"> 1113</span>&#160;<span class=\"comment\"># Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as</span></div>\n<div class=\"line\"><a name=\"l01114\"></a><span class=\"lineno\"> 1114</span>&#160;<span class=\"comment\"># it is more robust and this tag (HTML_STYLESHEET) will in the future become</span></div>\n<div class=\"line\"><a name=\"l01115\"></a><span class=\"lineno\"> 1115</span>&#160;<span class=\"comment\"># obsolete.</span></div>\n<div class=\"line\"><a name=\"l01116\"></a><span class=\"lineno\"> 1116</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01117\"></a><span class=\"lineno\"> 1117</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01118\"></a><span class=\"lineno\"> 1118</span>&#160;<span class=\"comment\">HTML_STYLESHEET        = </span></div>\n<div class=\"line\"><a name=\"l01119\"></a><span class=\"lineno\"> 1119</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01120\"></a><span class=\"lineno\"> 1120</span>&#160;<span class=\"comment\"># The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined</span></div>\n<div class=\"line\"><a name=\"l01121\"></a><span class=\"lineno\"> 1121</span>&#160;<span class=\"comment\"># cascading style sheets that are included after the standard style sheets</span></div>\n<div class=\"line\"><a name=\"l01122\"></a><span class=\"lineno\"> 1122</span>&#160;<span class=\"comment\"># created by doxygen. Using this option one can overrule certain style aspects.</span></div>\n<div class=\"line\"><a name=\"l01123\"></a><span class=\"lineno\"> 1123</span>&#160;<span class=\"comment\"># This is preferred over using HTML_STYLESHEET since it does not replace the</span></div>\n<div class=\"line\"><a name=\"l01124\"></a><span class=\"lineno\"> 1124</span>&#160;<span class=\"comment\"># standard style sheet and is therefore more robust against future updates.</span></div>\n<div class=\"line\"><a name=\"l01125\"></a><span class=\"lineno\"> 1125</span>&#160;<span class=\"comment\"># Doxygen will copy the style sheet files to the output directory.</span></div>\n<div class=\"line\"><a name=\"l01126\"></a><span class=\"lineno\"> 1126</span>&#160;<span class=\"comment\"># Note: The order of the extra style sheet files is of importance (e.g. the last</span></div>\n<div class=\"line\"><a name=\"l01127\"></a><span class=\"lineno\"> 1127</span>&#160;<span class=\"comment\"># style sheet in the list overrules the setting of the previous ones in the</span></div>\n<div class=\"line\"><a name=\"l01128\"></a><span class=\"lineno\"> 1128</span>&#160;<span class=\"comment\"># list). For an example see the documentation.</span></div>\n<div class=\"line\"><a name=\"l01129\"></a><span class=\"lineno\"> 1129</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01130\"></a><span class=\"lineno\"> 1130</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01131\"></a><span class=\"lineno\"> 1131</span>&#160;<span class=\"comment\">HTML_EXTRA_STYLESHEET  = </span></div>\n<div class=\"line\"><a name=\"l01132\"></a><span class=\"lineno\"> 1132</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01133\"></a><span class=\"lineno\"> 1133</span>&#160;<span class=\"comment\"># The HTML_EXTRA_FILES tag can be used to specify one or more extra images or</span></div>\n<div class=\"line\"><a name=\"l01134\"></a><span class=\"lineno\"> 1134</span>&#160;<span class=\"comment\"># other source files which should be copied to the HTML output directory. Note</span></div>\n<div class=\"line\"><a name=\"l01135\"></a><span class=\"lineno\"> 1135</span>&#160;<span class=\"comment\"># that these files will be copied to the base HTML output directory. Use the</span></div>\n<div class=\"line\"><a name=\"l01136\"></a><span class=\"lineno\"> 1136</span>&#160;<span class=\"comment\"># $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these</span></div>\n<div class=\"line\"><a name=\"l01137\"></a><span class=\"lineno\"> 1137</span>&#160;<span class=\"comment\"># files. In the HTML_STYLESHEET file, use the file name only. Also note that the</span></div>\n<div class=\"line\"><a name=\"l01138\"></a><span class=\"lineno\"> 1138</span>&#160;<span class=\"comment\"># files will be copied as-is; there are no commands or markers available.</span></div>\n<div class=\"line\"><a name=\"l01139\"></a><span class=\"lineno\"> 1139</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01140\"></a><span class=\"lineno\"> 1140</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01141\"></a><span class=\"lineno\"> 1141</span>&#160;<span class=\"comment\">HTML_EXTRA_FILES       = </span></div>\n<div class=\"line\"><a name=\"l01142\"></a><span class=\"lineno\"> 1142</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01143\"></a><span class=\"lineno\"> 1143</span>&#160;<span class=\"comment\"># The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen</span></div>\n<div class=\"line\"><a name=\"l01144\"></a><span class=\"lineno\"> 1144</span>&#160;<span class=\"comment\"># will adjust the colors in the style sheet and background images according to</span></div>\n<div class=\"line\"><a name=\"l01145\"></a><span class=\"lineno\"> 1145</span>&#160;<span class=\"comment\"># this color. Hue is specified as an angle on a colorwheel, see</span></div>\n<div class=\"line\"><a name=\"l01146\"></a><span class=\"lineno\"> 1146</span>&#160;<span class=\"comment\"># http://en.wikipedia.org/wiki/Hue for more information. For instance the value</span></div>\n<div class=\"line\"><a name=\"l01147\"></a><span class=\"lineno\"> 1147</span>&#160;<span class=\"comment\"># 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300</span></div>\n<div class=\"line\"><a name=\"l01148\"></a><span class=\"lineno\"> 1148</span>&#160;<span class=\"comment\"># purple, and 360 is red again.</span></div>\n<div class=\"line\"><a name=\"l01149\"></a><span class=\"lineno\"> 1149</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 359, default value: 220.</span></div>\n<div class=\"line\"><a name=\"l01150\"></a><span class=\"lineno\"> 1150</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01151\"></a><span class=\"lineno\"> 1151</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01152\"></a><span class=\"lineno\"> 1152</span>&#160;<span class=\"comment\">HTML_COLORSTYLE_HUE    = 220</span></div>\n<div class=\"line\"><a name=\"l01153\"></a><span class=\"lineno\"> 1153</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01154\"></a><span class=\"lineno\"> 1154</span>&#160;<span class=\"comment\"># The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors</span></div>\n<div class=\"line\"><a name=\"l01155\"></a><span class=\"lineno\"> 1155</span>&#160;<span class=\"comment\"># in the HTML output. For a value of 0 the output will use grayscales only. A</span></div>\n<div class=\"line\"><a name=\"l01156\"></a><span class=\"lineno\"> 1156</span>&#160;<span class=\"comment\"># value of 255 will produce the most vivid colors.</span></div>\n<div class=\"line\"><a name=\"l01157\"></a><span class=\"lineno\"> 1157</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 255, default value: 100.</span></div>\n<div class=\"line\"><a name=\"l01158\"></a><span class=\"lineno\"> 1158</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01159\"></a><span class=\"lineno\"> 1159</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01160\"></a><span class=\"lineno\"> 1160</span>&#160;<span class=\"comment\">HTML_COLORSTYLE_SAT    = 100</span></div>\n<div class=\"line\"><a name=\"l01161\"></a><span class=\"lineno\"> 1161</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01162\"></a><span class=\"lineno\"> 1162</span>&#160;<span class=\"comment\"># The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the</span></div>\n<div class=\"line\"><a name=\"l01163\"></a><span class=\"lineno\"> 1163</span>&#160;<span class=\"comment\"># luminance component of the colors in the HTML output. Values below 100</span></div>\n<div class=\"line\"><a name=\"l01164\"></a><span class=\"lineno\"> 1164</span>&#160;<span class=\"comment\"># gradually make the output lighter, whereas values above 100 make the output</span></div>\n<div class=\"line\"><a name=\"l01165\"></a><span class=\"lineno\"> 1165</span>&#160;<span class=\"comment\"># darker. The value divided by 100 is the actual gamma applied, so 80 represents</span></div>\n<div class=\"line\"><a name=\"l01166\"></a><span class=\"lineno\"> 1166</span>&#160;<span class=\"comment\"># a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not</span></div>\n<div class=\"line\"><a name=\"l01167\"></a><span class=\"lineno\"> 1167</span>&#160;<span class=\"comment\"># change the gamma.</span></div>\n<div class=\"line\"><a name=\"l01168\"></a><span class=\"lineno\"> 1168</span>&#160;<span class=\"comment\"># Minimum value: 40, maximum value: 240, default value: 80.</span></div>\n<div class=\"line\"><a name=\"l01169\"></a><span class=\"lineno\"> 1169</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01170\"></a><span class=\"lineno\"> 1170</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01171\"></a><span class=\"lineno\"> 1171</span>&#160;<span class=\"comment\">HTML_COLORSTYLE_GAMMA  = 80</span></div>\n<div class=\"line\"><a name=\"l01172\"></a><span class=\"lineno\"> 1172</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01173\"></a><span class=\"lineno\"> 1173</span>&#160;<span class=\"comment\"># If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML</span></div>\n<div class=\"line\"><a name=\"l01174\"></a><span class=\"lineno\"> 1174</span>&#160;<span class=\"comment\"># page will contain the date and time when the page was generated. Setting this</span></div>\n<div class=\"line\"><a name=\"l01175\"></a><span class=\"lineno\"> 1175</span>&#160;<span class=\"comment\"># to YES can help to show when doxygen was last run and thus if the</span></div>\n<div class=\"line\"><a name=\"l01176\"></a><span class=\"lineno\"> 1176</span>&#160;<span class=\"comment\"># documentation is up to date.</span></div>\n<div class=\"line\"><a name=\"l01177\"></a><span class=\"lineno\"> 1177</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01178\"></a><span class=\"lineno\"> 1178</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01179\"></a><span class=\"lineno\"> 1179</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01180\"></a><span class=\"lineno\"> 1180</span>&#160;<span class=\"comment\">HTML_TIMESTAMP         = NO</span></div>\n<div class=\"line\"><a name=\"l01181\"></a><span class=\"lineno\"> 1181</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01182\"></a><span class=\"lineno\"> 1182</span>&#160;<span class=\"comment\"># If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML</span></div>\n<div class=\"line\"><a name=\"l01183\"></a><span class=\"lineno\"> 1183</span>&#160;<span class=\"comment\"># documentation will contain sections that can be hidden and shown after the</span></div>\n<div class=\"line\"><a name=\"l01184\"></a><span class=\"lineno\"> 1184</span>&#160;<span class=\"comment\"># page has loaded.</span></div>\n<div class=\"line\"><a name=\"l01185\"></a><span class=\"lineno\"> 1185</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01186\"></a><span class=\"lineno\"> 1186</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01187\"></a><span class=\"lineno\"> 1187</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01188\"></a><span class=\"lineno\"> 1188</span>&#160;<span class=\"comment\">HTML_DYNAMIC_SECTIONS  = NO</span></div>\n<div class=\"line\"><a name=\"l01189\"></a><span class=\"lineno\"> 1189</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01190\"></a><span class=\"lineno\"> 1190</span>&#160;<span class=\"comment\"># With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries</span></div>\n<div class=\"line\"><a name=\"l01191\"></a><span class=\"lineno\"> 1191</span>&#160;<span class=\"comment\"># shown in the various tree structured indices initially; the user can expand</span></div>\n<div class=\"line\"><a name=\"l01192\"></a><span class=\"lineno\"> 1192</span>&#160;<span class=\"comment\"># and collapse entries dynamically later on. Doxygen will expand the tree to</span></div>\n<div class=\"line\"><a name=\"l01193\"></a><span class=\"lineno\"> 1193</span>&#160;<span class=\"comment\"># such a level that at most the specified number of entries are visible (unless</span></div>\n<div class=\"line\"><a name=\"l01194\"></a><span class=\"lineno\"> 1194</span>&#160;<span class=\"comment\"># a fully collapsed tree already exceeds this amount). So setting the number of</span></div>\n<div class=\"line\"><a name=\"l01195\"></a><span class=\"lineno\"> 1195</span>&#160;<span class=\"comment\"># entries 1 will produce a full collapsed tree by default. 0 is a special value</span></div>\n<div class=\"line\"><a name=\"l01196\"></a><span class=\"lineno\"> 1196</span>&#160;<span class=\"comment\"># representing an infinite number of entries and will result in a full expanded</span></div>\n<div class=\"line\"><a name=\"l01197\"></a><span class=\"lineno\"> 1197</span>&#160;<span class=\"comment\"># tree by default.</span></div>\n<div class=\"line\"><a name=\"l01198\"></a><span class=\"lineno\"> 1198</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 9999, default value: 100.</span></div>\n<div class=\"line\"><a name=\"l01199\"></a><span class=\"lineno\"> 1199</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01200\"></a><span class=\"lineno\"> 1200</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01201\"></a><span class=\"lineno\"> 1201</span>&#160;<span class=\"comment\">HTML_INDEX_NUM_ENTRIES = 100</span></div>\n<div class=\"line\"><a name=\"l01202\"></a><span class=\"lineno\"> 1202</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01203\"></a><span class=\"lineno\"> 1203</span>&#160;<span class=\"comment\"># If the GENERATE_DOCSET tag is set to YES, additional index files will be</span></div>\n<div class=\"line\"><a name=\"l01204\"></a><span class=\"lineno\"> 1204</span>&#160;<span class=\"comment\"># generated that can be used as input for Apple&#39;s Xcode 3 integrated development</span></div>\n<div class=\"line\"><a name=\"l01205\"></a><span class=\"lineno\"> 1205</span>&#160;<span class=\"comment\"># environment (see: http://developer.apple.com/tools/xcode/), introduced with</span></div>\n<div class=\"line\"><a name=\"l01206\"></a><span class=\"lineno\"> 1206</span>&#160;<span class=\"comment\"># OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a</span></div>\n<div class=\"line\"><a name=\"l01207\"></a><span class=\"lineno\"> 1207</span>&#160;<span class=\"comment\"># Makefile in the HTML output directory. Running make will produce the docset in</span></div>\n<div class=\"line\"><a name=\"l01208\"></a><span class=\"lineno\"> 1208</span>&#160;<span class=\"comment\"># that directory and running make install will install the docset in</span></div>\n<div class=\"line\"><a name=\"l01209\"></a><span class=\"lineno\"> 1209</span>&#160;<span class=\"comment\"># ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at</span></div>\n<div class=\"line\"><a name=\"l01210\"></a><span class=\"lineno\"> 1210</span>&#160;<span class=\"comment\"># startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html</span></div>\n<div class=\"line\"><a name=\"l01211\"></a><span class=\"lineno\"> 1211</span>&#160;<span class=\"comment\"># for more information.</span></div>\n<div class=\"line\"><a name=\"l01212\"></a><span class=\"lineno\"> 1212</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01213\"></a><span class=\"lineno\"> 1213</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01214\"></a><span class=\"lineno\"> 1214</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01215\"></a><span class=\"lineno\"> 1215</span>&#160;<span class=\"comment\">GENERATE_DOCSET        = NO</span></div>\n<div class=\"line\"><a name=\"l01216\"></a><span class=\"lineno\"> 1216</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01217\"></a><span class=\"lineno\"> 1217</span>&#160;<span class=\"comment\"># This tag determines the name of the docset feed. A documentation feed provides</span></div>\n<div class=\"line\"><a name=\"l01218\"></a><span class=\"lineno\"> 1218</span>&#160;<span class=\"comment\"># an umbrella under which multiple documentation sets from a single provider</span></div>\n<div class=\"line\"><a name=\"l01219\"></a><span class=\"lineno\"> 1219</span>&#160;<span class=\"comment\"># (such as a company or product suite) can be grouped.</span></div>\n<div class=\"line\"><a name=\"l01220\"></a><span class=\"lineno\"> 1220</span>&#160;<span class=\"comment\"># The default value is: Doxygen generated docs.</span></div>\n<div class=\"line\"><a name=\"l01221\"></a><span class=\"lineno\"> 1221</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_DOCSET is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01222\"></a><span class=\"lineno\"> 1222</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01223\"></a><span class=\"lineno\"> 1223</span>&#160;<span class=\"comment\">DOCSET_FEEDNAME        = &quot;Doxygen generated docs&quot;</span></div>\n<div class=\"line\"><a name=\"l01224\"></a><span class=\"lineno\"> 1224</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01225\"></a><span class=\"lineno\"> 1225</span>&#160;<span class=\"comment\"># This tag specifies a string that should uniquely identify the documentation</span></div>\n<div class=\"line\"><a name=\"l01226\"></a><span class=\"lineno\"> 1226</span>&#160;<span class=\"comment\"># set bundle. This should be a reverse domain-name style string, e.g.</span></div>\n<div class=\"line\"><a name=\"l01227\"></a><span class=\"lineno\"> 1227</span>&#160;<span class=\"comment\"># com.mycompany.MyDocSet. Doxygen will append .docset to the name.</span></div>\n<div class=\"line\"><a name=\"l01228\"></a><span class=\"lineno\"> 1228</span>&#160;<span class=\"comment\"># The default value is: org.doxygen.Project.</span></div>\n<div class=\"line\"><a name=\"l01229\"></a><span class=\"lineno\"> 1229</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_DOCSET is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01230\"></a><span class=\"lineno\"> 1230</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01231\"></a><span class=\"lineno\"> 1231</span>&#160;<span class=\"comment\">DOCSET_BUNDLE_ID       = org.doxygen.Project</span></div>\n<div class=\"line\"><a name=\"l01232\"></a><span class=\"lineno\"> 1232</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01233\"></a><span class=\"lineno\"> 1233</span>&#160;<span class=\"comment\"># The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify</span></div>\n<div class=\"line\"><a name=\"l01234\"></a><span class=\"lineno\"> 1234</span>&#160;<span class=\"comment\"># the documentation publisher. This should be a reverse domain-name style</span></div>\n<div class=\"line\"><a name=\"l01235\"></a><span class=\"lineno\"> 1235</span>&#160;<span class=\"comment\"># string, e.g. com.mycompany.MyDocSet.documentation.</span></div>\n<div class=\"line\"><a name=\"l01236\"></a><span class=\"lineno\"> 1236</span>&#160;<span class=\"comment\"># The default value is: org.doxygen.Publisher.</span></div>\n<div class=\"line\"><a name=\"l01237\"></a><span class=\"lineno\"> 1237</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_DOCSET is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01238\"></a><span class=\"lineno\"> 1238</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01239\"></a><span class=\"lineno\"> 1239</span>&#160;<span class=\"comment\">DOCSET_PUBLISHER_ID    = org.doxygen.Publisher</span></div>\n<div class=\"line\"><a name=\"l01240\"></a><span class=\"lineno\"> 1240</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01241\"></a><span class=\"lineno\"> 1241</span>&#160;<span class=\"comment\"># The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.</span></div>\n<div class=\"line\"><a name=\"l01242\"></a><span class=\"lineno\"> 1242</span>&#160;<span class=\"comment\"># The default value is: Publisher.</span></div>\n<div class=\"line\"><a name=\"l01243\"></a><span class=\"lineno\"> 1243</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_DOCSET is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01244\"></a><span class=\"lineno\"> 1244</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01245\"></a><span class=\"lineno\"> 1245</span>&#160;<span class=\"comment\">DOCSET_PUBLISHER_NAME  = Publisher</span></div>\n<div class=\"line\"><a name=\"l01246\"></a><span class=\"lineno\"> 1246</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01247\"></a><span class=\"lineno\"> 1247</span>&#160;<span class=\"comment\"># If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three</span></div>\n<div class=\"line\"><a name=\"l01248\"></a><span class=\"lineno\"> 1248</span>&#160;<span class=\"comment\"># additional HTML index files: index.hhp, index.hhc, and index.hhk. The</span></div>\n<div class=\"line\"><a name=\"l01249\"></a><span class=\"lineno\"> 1249</span>&#160;<span class=\"comment\"># index.hhp is a project file that can be read by Microsoft&#39;s HTML Help Workshop</span></div>\n<div class=\"line\"><a name=\"l01250\"></a><span class=\"lineno\"> 1250</span>&#160;<span class=\"comment\"># (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on</span></div>\n<div class=\"line\"><a name=\"l01251\"></a><span class=\"lineno\"> 1251</span>&#160;<span class=\"comment\"># Windows.</span></div>\n<div class=\"line\"><a name=\"l01252\"></a><span class=\"lineno\"> 1252</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01253\"></a><span class=\"lineno\"> 1253</span>&#160;<span class=\"comment\"># The HTML Help Workshop contains a compiler that can convert all HTML output</span></div>\n<div class=\"line\"><a name=\"l01254\"></a><span class=\"lineno\"> 1254</span>&#160;<span class=\"comment\"># generated by doxygen into a single compiled HTML file (.chm). Compiled HTML</span></div>\n<div class=\"line\"><a name=\"l01255\"></a><span class=\"lineno\"> 1255</span>&#160;<span class=\"comment\"># files are now used as the Windows 98 help format, and will replace the old</span></div>\n<div class=\"line\"><a name=\"l01256\"></a><span class=\"lineno\"> 1256</span>&#160;<span class=\"comment\"># Windows help format (.hlp) on all Windows platforms in the future. Compressed</span></div>\n<div class=\"line\"><a name=\"l01257\"></a><span class=\"lineno\"> 1257</span>&#160;<span class=\"comment\"># HTML files also contain an index, a table of contents, and you can search for</span></div>\n<div class=\"line\"><a name=\"l01258\"></a><span class=\"lineno\"> 1258</span>&#160;<span class=\"comment\"># words in the documentation. The HTML workshop also contains a viewer for</span></div>\n<div class=\"line\"><a name=\"l01259\"></a><span class=\"lineno\"> 1259</span>&#160;<span class=\"comment\"># compressed HTML files.</span></div>\n<div class=\"line\"><a name=\"l01260\"></a><span class=\"lineno\"> 1260</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01261\"></a><span class=\"lineno\"> 1261</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01262\"></a><span class=\"lineno\"> 1262</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01263\"></a><span class=\"lineno\"> 1263</span>&#160;<span class=\"comment\">GENERATE_HTMLHELP      = NO</span></div>\n<div class=\"line\"><a name=\"l01264\"></a><span class=\"lineno\"> 1264</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01265\"></a><span class=\"lineno\"> 1265</span>&#160;<span class=\"comment\"># The CHM_FILE tag can be used to specify the file name of the resulting .chm</span></div>\n<div class=\"line\"><a name=\"l01266\"></a><span class=\"lineno\"> 1266</span>&#160;<span class=\"comment\"># file. You can add a path in front of the file if the result should not be</span></div>\n<div class=\"line\"><a name=\"l01267\"></a><span class=\"lineno\"> 1267</span>&#160;<span class=\"comment\"># written to the html output directory.</span></div>\n<div class=\"line\"><a name=\"l01268\"></a><span class=\"lineno\"> 1268</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01269\"></a><span class=\"lineno\"> 1269</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01270\"></a><span class=\"lineno\"> 1270</span>&#160;<span class=\"comment\">CHM_FILE               = </span></div>\n<div class=\"line\"><a name=\"l01271\"></a><span class=\"lineno\"> 1271</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01272\"></a><span class=\"lineno\"> 1272</span>&#160;<span class=\"comment\"># The HHC_LOCATION tag can be used to specify the location (absolute path</span></div>\n<div class=\"line\"><a name=\"l01273\"></a><span class=\"lineno\"> 1273</span>&#160;<span class=\"comment\"># including file name) of the HTML help compiler (hhc.exe). If non-empty,</span></div>\n<div class=\"line\"><a name=\"l01274\"></a><span class=\"lineno\"> 1274</span>&#160;<span class=\"comment\"># doxygen will try to run the HTML help compiler on the generated index.hhp.</span></div>\n<div class=\"line\"><a name=\"l01275\"></a><span class=\"lineno\"> 1275</span>&#160;<span class=\"comment\"># The file has to be specified with full path.</span></div>\n<div class=\"line\"><a name=\"l01276\"></a><span class=\"lineno\"> 1276</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01277\"></a><span class=\"lineno\"> 1277</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01278\"></a><span class=\"lineno\"> 1278</span>&#160;<span class=\"comment\">HHC_LOCATION           = </span></div>\n<div class=\"line\"><a name=\"l01279\"></a><span class=\"lineno\"> 1279</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01280\"></a><span class=\"lineno\"> 1280</span>&#160;<span class=\"comment\"># The GENERATE_CHI flag controls if a separate .chi index file is generated</span></div>\n<div class=\"line\"><a name=\"l01281\"></a><span class=\"lineno\"> 1281</span>&#160;<span class=\"comment\"># (YES) or that it should be included in the master .chm file (NO).</span></div>\n<div class=\"line\"><a name=\"l01282\"></a><span class=\"lineno\"> 1282</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01283\"></a><span class=\"lineno\"> 1283</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01284\"></a><span class=\"lineno\"> 1284</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01285\"></a><span class=\"lineno\"> 1285</span>&#160;<span class=\"comment\">GENERATE_CHI           = NO</span></div>\n<div class=\"line\"><a name=\"l01286\"></a><span class=\"lineno\"> 1286</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01287\"></a><span class=\"lineno\"> 1287</span>&#160;<span class=\"comment\"># The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)</span></div>\n<div class=\"line\"><a name=\"l01288\"></a><span class=\"lineno\"> 1288</span>&#160;<span class=\"comment\"># and project file content.</span></div>\n<div class=\"line\"><a name=\"l01289\"></a><span class=\"lineno\"> 1289</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01290\"></a><span class=\"lineno\"> 1290</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01291\"></a><span class=\"lineno\"> 1291</span>&#160;<span class=\"comment\">CHM_INDEX_ENCODING     = </span></div>\n<div class=\"line\"><a name=\"l01292\"></a><span class=\"lineno\"> 1292</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01293\"></a><span class=\"lineno\"> 1293</span>&#160;<span class=\"comment\"># The BINARY_TOC flag controls whether a binary table of contents is generated</span></div>\n<div class=\"line\"><a name=\"l01294\"></a><span class=\"lineno\"> 1294</span>&#160;<span class=\"comment\"># (YES) or a normal table of contents (NO) in the .chm file. Furthermore it</span></div>\n<div class=\"line\"><a name=\"l01295\"></a><span class=\"lineno\"> 1295</span>&#160;<span class=\"comment\"># enables the Previous and Next buttons.</span></div>\n<div class=\"line\"><a name=\"l01296\"></a><span class=\"lineno\"> 1296</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01297\"></a><span class=\"lineno\"> 1297</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01298\"></a><span class=\"lineno\"> 1298</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01299\"></a><span class=\"lineno\"> 1299</span>&#160;<span class=\"comment\">BINARY_TOC             = NO</span></div>\n<div class=\"line\"><a name=\"l01300\"></a><span class=\"lineno\"> 1300</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01301\"></a><span class=\"lineno\"> 1301</span>&#160;<span class=\"comment\"># The TOC_EXPAND flag can be set to YES to add extra items for group members to</span></div>\n<div class=\"line\"><a name=\"l01302\"></a><span class=\"lineno\"> 1302</span>&#160;<span class=\"comment\"># the table of contents of the HTML help documentation and to the tree view.</span></div>\n<div class=\"line\"><a name=\"l01303\"></a><span class=\"lineno\"> 1303</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01304\"></a><span class=\"lineno\"> 1304</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTMLHELP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01305\"></a><span class=\"lineno\"> 1305</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01306\"></a><span class=\"lineno\"> 1306</span>&#160;<span class=\"comment\">TOC_EXPAND             = NO</span></div>\n<div class=\"line\"><a name=\"l01307\"></a><span class=\"lineno\"> 1307</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01308\"></a><span class=\"lineno\"> 1308</span>&#160;<span class=\"comment\"># If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and</span></div>\n<div class=\"line\"><a name=\"l01309\"></a><span class=\"lineno\"> 1309</span>&#160;<span class=\"comment\"># QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that</span></div>\n<div class=\"line\"><a name=\"l01310\"></a><span class=\"lineno\"> 1310</span>&#160;<span class=\"comment\"># can be used as input for Qt&#39;s qhelpgenerator to generate a Qt Compressed Help</span></div>\n<div class=\"line\"><a name=\"l01311\"></a><span class=\"lineno\"> 1311</span>&#160;<span class=\"comment\"># (.qch) of the generated HTML documentation.</span></div>\n<div class=\"line\"><a name=\"l01312\"></a><span class=\"lineno\"> 1312</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01313\"></a><span class=\"lineno\"> 1313</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01314\"></a><span class=\"lineno\"> 1314</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01315\"></a><span class=\"lineno\"> 1315</span>&#160;<span class=\"comment\">GENERATE_QHP           = NO</span></div>\n<div class=\"line\"><a name=\"l01316\"></a><span class=\"lineno\"> 1316</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01317\"></a><span class=\"lineno\"> 1317</span>&#160;<span class=\"comment\"># If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify</span></div>\n<div class=\"line\"><a name=\"l01318\"></a><span class=\"lineno\"> 1318</span>&#160;<span class=\"comment\"># the file name of the resulting .qch file. The path specified is relative to</span></div>\n<div class=\"line\"><a name=\"l01319\"></a><span class=\"lineno\"> 1319</span>&#160;<span class=\"comment\"># the HTML output folder.</span></div>\n<div class=\"line\"><a name=\"l01320\"></a><span class=\"lineno\"> 1320</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01321\"></a><span class=\"lineno\"> 1321</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01322\"></a><span class=\"lineno\"> 1322</span>&#160;<span class=\"comment\">QCH_FILE               = </span></div>\n<div class=\"line\"><a name=\"l01323\"></a><span class=\"lineno\"> 1323</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01324\"></a><span class=\"lineno\"> 1324</span>&#160;<span class=\"comment\"># The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help</span></div>\n<div class=\"line\"><a name=\"l01325\"></a><span class=\"lineno\"> 1325</span>&#160;<span class=\"comment\"># Project output. For more information please see Qt Help Project / Namespace</span></div>\n<div class=\"line\"><a name=\"l01326\"></a><span class=\"lineno\"> 1326</span>&#160;<span class=\"comment\"># (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).</span></div>\n<div class=\"line\"><a name=\"l01327\"></a><span class=\"lineno\"> 1327</span>&#160;<span class=\"comment\"># The default value is: org.doxygen.Project.</span></div>\n<div class=\"line\"><a name=\"l01328\"></a><span class=\"lineno\"> 1328</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01329\"></a><span class=\"lineno\"> 1329</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01330\"></a><span class=\"lineno\"> 1330</span>&#160;<span class=\"comment\">QHP_NAMESPACE          = org.doxygen.Project</span></div>\n<div class=\"line\"><a name=\"l01331\"></a><span class=\"lineno\"> 1331</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01332\"></a><span class=\"lineno\"> 1332</span>&#160;<span class=\"comment\"># The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt</span></div>\n<div class=\"line\"><a name=\"l01333\"></a><span class=\"lineno\"> 1333</span>&#160;<span class=\"comment\"># Help Project output. For more information please see Qt Help Project / Virtual</span></div>\n<div class=\"line\"><a name=\"l01334\"></a><span class=\"lineno\"> 1334</span>&#160;<span class=\"comment\"># Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-</span></div>\n<div class=\"line\"><a name=\"l01335\"></a><span class=\"lineno\"> 1335</span>&#160;<span class=\"comment\"># folders).</span></div>\n<div class=\"line\"><a name=\"l01336\"></a><span class=\"lineno\"> 1336</span>&#160;<span class=\"comment\"># The default value is: doc.</span></div>\n<div class=\"line\"><a name=\"l01337\"></a><span class=\"lineno\"> 1337</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01338\"></a><span class=\"lineno\"> 1338</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01339\"></a><span class=\"lineno\"> 1339</span>&#160;<span class=\"comment\">QHP_VIRTUAL_FOLDER     = doc</span></div>\n<div class=\"line\"><a name=\"l01340\"></a><span class=\"lineno\"> 1340</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01341\"></a><span class=\"lineno\"> 1341</span>&#160;<span class=\"comment\"># If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom</span></div>\n<div class=\"line\"><a name=\"l01342\"></a><span class=\"lineno\"> 1342</span>&#160;<span class=\"comment\"># filter to add. For more information please see Qt Help Project / Custom</span></div>\n<div class=\"line\"><a name=\"l01343\"></a><span class=\"lineno\"> 1343</span>&#160;<span class=\"comment\"># Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-</span></div>\n<div class=\"line\"><a name=\"l01344\"></a><span class=\"lineno\"> 1344</span>&#160;<span class=\"comment\"># filters).</span></div>\n<div class=\"line\"><a name=\"l01345\"></a><span class=\"lineno\"> 1345</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01346\"></a><span class=\"lineno\"> 1346</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01347\"></a><span class=\"lineno\"> 1347</span>&#160;<span class=\"comment\">QHP_CUST_FILTER_NAME   = </span></div>\n<div class=\"line\"><a name=\"l01348\"></a><span class=\"lineno\"> 1348</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01349\"></a><span class=\"lineno\"> 1349</span>&#160;<span class=\"comment\"># The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the</span></div>\n<div class=\"line\"><a name=\"l01350\"></a><span class=\"lineno\"> 1350</span>&#160;<span class=\"comment\"># custom filter to add. For more information please see Qt Help Project / Custom</span></div>\n<div class=\"line\"><a name=\"l01351\"></a><span class=\"lineno\"> 1351</span>&#160;<span class=\"comment\"># Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-</span></div>\n<div class=\"line\"><a name=\"l01352\"></a><span class=\"lineno\"> 1352</span>&#160;<span class=\"comment\"># filters).</span></div>\n<div class=\"line\"><a name=\"l01353\"></a><span class=\"lineno\"> 1353</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01354\"></a><span class=\"lineno\"> 1354</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01355\"></a><span class=\"lineno\"> 1355</span>&#160;<span class=\"comment\">QHP_CUST_FILTER_ATTRS  = </span></div>\n<div class=\"line\"><a name=\"l01356\"></a><span class=\"lineno\"> 1356</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01357\"></a><span class=\"lineno\"> 1357</span>&#160;<span class=\"comment\"># The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this</span></div>\n<div class=\"line\"><a name=\"l01358\"></a><span class=\"lineno\"> 1358</span>&#160;<span class=\"comment\"># project&#39;s filter section matches. Qt Help Project / Filter Attributes (see:</span></div>\n<div class=\"line\"><a name=\"l01359\"></a><span class=\"lineno\"> 1359</span>&#160;<span class=\"comment\"># http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).</span></div>\n<div class=\"line\"><a name=\"l01360\"></a><span class=\"lineno\"> 1360</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01361\"></a><span class=\"lineno\"> 1361</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01362\"></a><span class=\"lineno\"> 1362</span>&#160;<span class=\"comment\">QHP_SECT_FILTER_ATTRS  = </span></div>\n<div class=\"line\"><a name=\"l01363\"></a><span class=\"lineno\"> 1363</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01364\"></a><span class=\"lineno\"> 1364</span>&#160;<span class=\"comment\"># The QHG_LOCATION tag can be used to specify the location of Qt&#39;s</span></div>\n<div class=\"line\"><a name=\"l01365\"></a><span class=\"lineno\"> 1365</span>&#160;<span class=\"comment\"># qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the</span></div>\n<div class=\"line\"><a name=\"l01366\"></a><span class=\"lineno\"> 1366</span>&#160;<span class=\"comment\"># generated .qhp file.</span></div>\n<div class=\"line\"><a name=\"l01367\"></a><span class=\"lineno\"> 1367</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_QHP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01368\"></a><span class=\"lineno\"> 1368</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01369\"></a><span class=\"lineno\"> 1369</span>&#160;<span class=\"comment\">QHG_LOCATION           = </span></div>\n<div class=\"line\"><a name=\"l01370\"></a><span class=\"lineno\"> 1370</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01371\"></a><span class=\"lineno\"> 1371</span>&#160;<span class=\"comment\"># If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be</span></div>\n<div class=\"line\"><a name=\"l01372\"></a><span class=\"lineno\"> 1372</span>&#160;<span class=\"comment\"># generated, together with the HTML files, they form an Eclipse help plugin. To</span></div>\n<div class=\"line\"><a name=\"l01373\"></a><span class=\"lineno\"> 1373</span>&#160;<span class=\"comment\"># install this plugin and make it available under the help contents menu in</span></div>\n<div class=\"line\"><a name=\"l01374\"></a><span class=\"lineno\"> 1374</span>&#160;<span class=\"comment\"># Eclipse, the contents of the directory containing the HTML and XML files needs</span></div>\n<div class=\"line\"><a name=\"l01375\"></a><span class=\"lineno\"> 1375</span>&#160;<span class=\"comment\"># to be copied into the plugins directory of eclipse. The name of the directory</span></div>\n<div class=\"line\"><a name=\"l01376\"></a><span class=\"lineno\"> 1376</span>&#160;<span class=\"comment\"># within the plugins directory should be the same as the ECLIPSE_DOC_ID value.</span></div>\n<div class=\"line\"><a name=\"l01377\"></a><span class=\"lineno\"> 1377</span>&#160;<span class=\"comment\"># After copying Eclipse needs to be restarted before the help appears.</span></div>\n<div class=\"line\"><a name=\"l01378\"></a><span class=\"lineno\"> 1378</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01379\"></a><span class=\"lineno\"> 1379</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01380\"></a><span class=\"lineno\"> 1380</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01381\"></a><span class=\"lineno\"> 1381</span>&#160;<span class=\"comment\">GENERATE_ECLIPSEHELP   = NO</span></div>\n<div class=\"line\"><a name=\"l01382\"></a><span class=\"lineno\"> 1382</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01383\"></a><span class=\"lineno\"> 1383</span>&#160;<span class=\"comment\"># A unique identifier for the Eclipse help plugin. When installing the plugin</span></div>\n<div class=\"line\"><a name=\"l01384\"></a><span class=\"lineno\"> 1384</span>&#160;<span class=\"comment\"># the directory name containing the HTML and XML files should also have this</span></div>\n<div class=\"line\"><a name=\"l01385\"></a><span class=\"lineno\"> 1385</span>&#160;<span class=\"comment\"># name. Each documentation set should have its own identifier.</span></div>\n<div class=\"line\"><a name=\"l01386\"></a><span class=\"lineno\"> 1386</span>&#160;<span class=\"comment\"># The default value is: org.doxygen.Project.</span></div>\n<div class=\"line\"><a name=\"l01387\"></a><span class=\"lineno\"> 1387</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01388\"></a><span class=\"lineno\"> 1388</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01389\"></a><span class=\"lineno\"> 1389</span>&#160;<span class=\"comment\">ECLIPSE_DOC_ID         = org.doxygen.Project</span></div>\n<div class=\"line\"><a name=\"l01390\"></a><span class=\"lineno\"> 1390</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01391\"></a><span class=\"lineno\"> 1391</span>&#160;<span class=\"comment\"># If you want full control over the layout of the generated HTML pages it might</span></div>\n<div class=\"line\"><a name=\"l01392\"></a><span class=\"lineno\"> 1392</span>&#160;<span class=\"comment\"># be necessary to disable the index and replace it with your own. The</span></div>\n<div class=\"line\"><a name=\"l01393\"></a><span class=\"lineno\"> 1393</span>&#160;<span class=\"comment\"># DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top</span></div>\n<div class=\"line\"><a name=\"l01394\"></a><span class=\"lineno\"> 1394</span>&#160;<span class=\"comment\"># of each HTML page. A value of NO enables the index and the value YES disables</span></div>\n<div class=\"line\"><a name=\"l01395\"></a><span class=\"lineno\"> 1395</span>&#160;<span class=\"comment\"># it. Since the tabs in the index contain the same information as the navigation</span></div>\n<div class=\"line\"><a name=\"l01396\"></a><span class=\"lineno\"> 1396</span>&#160;<span class=\"comment\"># tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.</span></div>\n<div class=\"line\"><a name=\"l01397\"></a><span class=\"lineno\"> 1397</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01398\"></a><span class=\"lineno\"> 1398</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01399\"></a><span class=\"lineno\"> 1399</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01400\"></a><span class=\"lineno\"> 1400</span>&#160;<span class=\"comment\">DISABLE_INDEX          = NO</span></div>\n<div class=\"line\"><a name=\"l01401\"></a><span class=\"lineno\"> 1401</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01402\"></a><span class=\"lineno\"> 1402</span>&#160;<span class=\"comment\"># The GENERATE_TREEVIEW tag is used to specify whether a tree-like index</span></div>\n<div class=\"line\"><a name=\"l01403\"></a><span class=\"lineno\"> 1403</span>&#160;<span class=\"comment\"># structure should be generated to display hierarchical information. If the tag</span></div>\n<div class=\"line\"><a name=\"l01404\"></a><span class=\"lineno\"> 1404</span>&#160;<span class=\"comment\"># value is set to YES, a side panel will be generated containing a tree-like</span></div>\n<div class=\"line\"><a name=\"l01405\"></a><span class=\"lineno\"> 1405</span>&#160;<span class=\"comment\"># index structure (just like the one that is generated for HTML Help). For this</span></div>\n<div class=\"line\"><a name=\"l01406\"></a><span class=\"lineno\"> 1406</span>&#160;<span class=\"comment\"># to work a browser that supports JavaScript, DHTML, CSS and frames is required</span></div>\n<div class=\"line\"><a name=\"l01407\"></a><span class=\"lineno\"> 1407</span>&#160;<span class=\"comment\"># (i.e. any modern browser). Windows users are probably better off using the</span></div>\n<div class=\"line\"><a name=\"l01408\"></a><span class=\"lineno\"> 1408</span>&#160;<span class=\"comment\"># HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can</span></div>\n<div class=\"line\"><a name=\"l01409\"></a><span class=\"lineno\"> 1409</span>&#160;<span class=\"comment\"># further fine-tune the look of the index. As an example, the default style</span></div>\n<div class=\"line\"><a name=\"l01410\"></a><span class=\"lineno\"> 1410</span>&#160;<span class=\"comment\"># sheet generated by doxygen has an example that shows how to put an image at</span></div>\n<div class=\"line\"><a name=\"l01411\"></a><span class=\"lineno\"> 1411</span>&#160;<span class=\"comment\"># the root of the tree instead of the PROJECT_NAME. Since the tree basically has</span></div>\n<div class=\"line\"><a name=\"l01412\"></a><span class=\"lineno\"> 1412</span>&#160;<span class=\"comment\"># the same information as the tab index, you could consider setting</span></div>\n<div class=\"line\"><a name=\"l01413\"></a><span class=\"lineno\"> 1413</span>&#160;<span class=\"comment\"># DISABLE_INDEX to YES when enabling this option.</span></div>\n<div class=\"line\"><a name=\"l01414\"></a><span class=\"lineno\"> 1414</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01415\"></a><span class=\"lineno\"> 1415</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01416\"></a><span class=\"lineno\"> 1416</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01417\"></a><span class=\"lineno\"> 1417</span>&#160;<span class=\"comment\">GENERATE_TREEVIEW      = NO</span></div>\n<div class=\"line\"><a name=\"l01418\"></a><span class=\"lineno\"> 1418</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01419\"></a><span class=\"lineno\"> 1419</span>&#160;<span class=\"comment\"># The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that</span></div>\n<div class=\"line\"><a name=\"l01420\"></a><span class=\"lineno\"> 1420</span>&#160;<span class=\"comment\"># doxygen will group on one line in the generated HTML documentation.</span></div>\n<div class=\"line\"><a name=\"l01421\"></a><span class=\"lineno\"> 1421</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01422\"></a><span class=\"lineno\"> 1422</span>&#160;<span class=\"comment\"># Note that a value of 0 will completely suppress the enum values from appearing</span></div>\n<div class=\"line\"><a name=\"l01423\"></a><span class=\"lineno\"> 1423</span>&#160;<span class=\"comment\"># in the overview section.</span></div>\n<div class=\"line\"><a name=\"l01424\"></a><span class=\"lineno\"> 1424</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 20, default value: 4.</span></div>\n<div class=\"line\"><a name=\"l01425\"></a><span class=\"lineno\"> 1425</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01426\"></a><span class=\"lineno\"> 1426</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01427\"></a><span class=\"lineno\"> 1427</span>&#160;<span class=\"comment\">ENUM_VALUES_PER_LINE   = 4</span></div>\n<div class=\"line\"><a name=\"l01428\"></a><span class=\"lineno\"> 1428</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01429\"></a><span class=\"lineno\"> 1429</span>&#160;<span class=\"comment\"># If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used</span></div>\n<div class=\"line\"><a name=\"l01430\"></a><span class=\"lineno\"> 1430</span>&#160;<span class=\"comment\"># to set the initial width (in pixels) of the frame in which the tree is shown.</span></div>\n<div class=\"line\"><a name=\"l01431\"></a><span class=\"lineno\"> 1431</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 1500, default value: 250.</span></div>\n<div class=\"line\"><a name=\"l01432\"></a><span class=\"lineno\"> 1432</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01433\"></a><span class=\"lineno\"> 1433</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01434\"></a><span class=\"lineno\"> 1434</span>&#160;<span class=\"comment\">TREEVIEW_WIDTH         = 250</span></div>\n<div class=\"line\"><a name=\"l01435\"></a><span class=\"lineno\"> 1435</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01436\"></a><span class=\"lineno\"> 1436</span>&#160;<span class=\"comment\"># If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to</span></div>\n<div class=\"line\"><a name=\"l01437\"></a><span class=\"lineno\"> 1437</span>&#160;<span class=\"comment\"># external symbols imported via tag files in a separate window.</span></div>\n<div class=\"line\"><a name=\"l01438\"></a><span class=\"lineno\"> 1438</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01439\"></a><span class=\"lineno\"> 1439</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01440\"></a><span class=\"lineno\"> 1440</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01441\"></a><span class=\"lineno\"> 1441</span>&#160;<span class=\"comment\">EXT_LINKS_IN_WINDOW    = NO</span></div>\n<div class=\"line\"><a name=\"l01442\"></a><span class=\"lineno\"> 1442</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01443\"></a><span class=\"lineno\"> 1443</span>&#160;<span class=\"comment\"># Use this tag to change the font size of LaTeX formulas included as images in</span></div>\n<div class=\"line\"><a name=\"l01444\"></a><span class=\"lineno\"> 1444</span>&#160;<span class=\"comment\"># the HTML documentation. When you change the font size after a successful</span></div>\n<div class=\"line\"><a name=\"l01445\"></a><span class=\"lineno\"> 1445</span>&#160;<span class=\"comment\"># doxygen run you need to manually remove any form_*.png images from the HTML</span></div>\n<div class=\"line\"><a name=\"l01446\"></a><span class=\"lineno\"> 1446</span>&#160;<span class=\"comment\"># output directory to force them to be regenerated.</span></div>\n<div class=\"line\"><a name=\"l01447\"></a><span class=\"lineno\"> 1447</span>&#160;<span class=\"comment\"># Minimum value: 8, maximum value: 50, default value: 10.</span></div>\n<div class=\"line\"><a name=\"l01448\"></a><span class=\"lineno\"> 1448</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01449\"></a><span class=\"lineno\"> 1449</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01450\"></a><span class=\"lineno\"> 1450</span>&#160;<span class=\"comment\">FORMULA_FONTSIZE       = 10</span></div>\n<div class=\"line\"><a name=\"l01451\"></a><span class=\"lineno\"> 1451</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01452\"></a><span class=\"lineno\"> 1452</span>&#160;<span class=\"comment\"># Use the FORMULA_TRANPARENT tag to determine whether or not the images</span></div>\n<div class=\"line\"><a name=\"l01453\"></a><span class=\"lineno\"> 1453</span>&#160;<span class=\"comment\"># generated for formulas are transparent PNGs. Transparent PNGs are not</span></div>\n<div class=\"line\"><a name=\"l01454\"></a><span class=\"lineno\"> 1454</span>&#160;<span class=\"comment\"># supported properly for IE 6.0, but are supported on all modern browsers.</span></div>\n<div class=\"line\"><a name=\"l01455\"></a><span class=\"lineno\"> 1455</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01456\"></a><span class=\"lineno\"> 1456</span>&#160;<span class=\"comment\"># Note that when changing this option you need to delete any form_*.png files in</span></div>\n<div class=\"line\"><a name=\"l01457\"></a><span class=\"lineno\"> 1457</span>&#160;<span class=\"comment\"># the HTML output directory before the changes have effect.</span></div>\n<div class=\"line\"><a name=\"l01458\"></a><span class=\"lineno\"> 1458</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01459\"></a><span class=\"lineno\"> 1459</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01460\"></a><span class=\"lineno\"> 1460</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01461\"></a><span class=\"lineno\"> 1461</span>&#160;<span class=\"comment\">FORMULA_TRANSPARENT    = YES</span></div>\n<div class=\"line\"><a name=\"l01462\"></a><span class=\"lineno\"> 1462</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01463\"></a><span class=\"lineno\"> 1463</span>&#160;<span class=\"comment\"># Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see</span></div>\n<div class=\"line\"><a name=\"l01464\"></a><span class=\"lineno\"> 1464</span>&#160;<span class=\"comment\"># http://www.mathjax.org) which uses client side Javascript for the rendering</span></div>\n<div class=\"line\"><a name=\"l01465\"></a><span class=\"lineno\"> 1465</span>&#160;<span class=\"comment\"># instead of using pre-rendered bitmaps. Use this if you do not have LaTeX</span></div>\n<div class=\"line\"><a name=\"l01466\"></a><span class=\"lineno\"> 1466</span>&#160;<span class=\"comment\"># installed or if you want to formulas look prettier in the HTML output. When</span></div>\n<div class=\"line\"><a name=\"l01467\"></a><span class=\"lineno\"> 1467</span>&#160;<span class=\"comment\"># enabled you may also need to install MathJax separately and configure the path</span></div>\n<div class=\"line\"><a name=\"l01468\"></a><span class=\"lineno\"> 1468</span>&#160;<span class=\"comment\"># to it using the MATHJAX_RELPATH option.</span></div>\n<div class=\"line\"><a name=\"l01469\"></a><span class=\"lineno\"> 1469</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01470\"></a><span class=\"lineno\"> 1470</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01471\"></a><span class=\"lineno\"> 1471</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01472\"></a><span class=\"lineno\"> 1472</span>&#160;<span class=\"comment\">USE_MATHJAX            = NO</span></div>\n<div class=\"line\"><a name=\"l01473\"></a><span class=\"lineno\"> 1473</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01474\"></a><span class=\"lineno\"> 1474</span>&#160;<span class=\"comment\"># When MathJax is enabled you can set the default output format to be used for</span></div>\n<div class=\"line\"><a name=\"l01475\"></a><span class=\"lineno\"> 1475</span>&#160;<span class=\"comment\"># the MathJax output. See the MathJax site (see:</span></div>\n<div class=\"line\"><a name=\"l01476\"></a><span class=\"lineno\"> 1476</span>&#160;<span class=\"comment\"># http://docs.mathjax.org/en/latest/output.html) for more details.</span></div>\n<div class=\"line\"><a name=\"l01477\"></a><span class=\"lineno\"> 1477</span>&#160;<span class=\"comment\"># Possible values are: HTML-CSS (which is slower, but has the best</span></div>\n<div class=\"line\"><a name=\"l01478\"></a><span class=\"lineno\"> 1478</span>&#160;<span class=\"comment\"># compatibility), NativeMML (i.e. MathML) and SVG.</span></div>\n<div class=\"line\"><a name=\"l01479\"></a><span class=\"lineno\"> 1479</span>&#160;<span class=\"comment\"># The default value is: HTML-CSS.</span></div>\n<div class=\"line\"><a name=\"l01480\"></a><span class=\"lineno\"> 1480</span>&#160;<span class=\"comment\"># This tag requires that the tag USE_MATHJAX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01481\"></a><span class=\"lineno\"> 1481</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01482\"></a><span class=\"lineno\"> 1482</span>&#160;<span class=\"comment\">MATHJAX_FORMAT         = HTML-CSS</span></div>\n<div class=\"line\"><a name=\"l01483\"></a><span class=\"lineno\"> 1483</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01484\"></a><span class=\"lineno\"> 1484</span>&#160;<span class=\"comment\"># When MathJax is enabled you need to specify the location relative to the HTML</span></div>\n<div class=\"line\"><a name=\"l01485\"></a><span class=\"lineno\"> 1485</span>&#160;<span class=\"comment\"># output directory using the MATHJAX_RELPATH option. The destination directory</span></div>\n<div class=\"line\"><a name=\"l01486\"></a><span class=\"lineno\"> 1486</span>&#160;<span class=\"comment\"># should contain the MathJax.js script. For instance, if the mathjax directory</span></div>\n<div class=\"line\"><a name=\"l01487\"></a><span class=\"lineno\"> 1487</span>&#160;<span class=\"comment\"># is located at the same level as the HTML output directory, then</span></div>\n<div class=\"line\"><a name=\"l01488\"></a><span class=\"lineno\"> 1488</span>&#160;<span class=\"comment\"># MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax</span></div>\n<div class=\"line\"><a name=\"l01489\"></a><span class=\"lineno\"> 1489</span>&#160;<span class=\"comment\"># Content Delivery Network so you can quickly see the result without installing</span></div>\n<div class=\"line\"><a name=\"l01490\"></a><span class=\"lineno\"> 1490</span>&#160;<span class=\"comment\"># MathJax. However, it is strongly recommended to install a local copy of</span></div>\n<div class=\"line\"><a name=\"l01491\"></a><span class=\"lineno\"> 1491</span>&#160;<span class=\"comment\"># MathJax from http://www.mathjax.org before deployment.</span></div>\n<div class=\"line\"><a name=\"l01492\"></a><span class=\"lineno\"> 1492</span>&#160;<span class=\"comment\"># The default value is: http://cdn.mathjax.org/mathjax/latest.</span></div>\n<div class=\"line\"><a name=\"l01493\"></a><span class=\"lineno\"> 1493</span>&#160;<span class=\"comment\"># This tag requires that the tag USE_MATHJAX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01494\"></a><span class=\"lineno\"> 1494</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01495\"></a><span class=\"lineno\"> 1495</span>&#160;<span class=\"comment\">MATHJAX_RELPATH        = http://www.mathjax.org/mathjax</span></div>\n<div class=\"line\"><a name=\"l01496\"></a><span class=\"lineno\"> 1496</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01497\"></a><span class=\"lineno\"> 1497</span>&#160;<span class=\"comment\"># The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax</span></div>\n<div class=\"line\"><a name=\"l01498\"></a><span class=\"lineno\"> 1498</span>&#160;<span class=\"comment\"># extension names that should be enabled during MathJax rendering. For example</span></div>\n<div class=\"line\"><a name=\"l01499\"></a><span class=\"lineno\"> 1499</span>&#160;<span class=\"comment\"># MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols</span></div>\n<div class=\"line\"><a name=\"l01500\"></a><span class=\"lineno\"> 1500</span>&#160;<span class=\"comment\"># This tag requires that the tag USE_MATHJAX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01501\"></a><span class=\"lineno\"> 1501</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01502\"></a><span class=\"lineno\"> 1502</span>&#160;<span class=\"comment\">MATHJAX_EXTENSIONS     = </span></div>\n<div class=\"line\"><a name=\"l01503\"></a><span class=\"lineno\"> 1503</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01504\"></a><span class=\"lineno\"> 1504</span>&#160;<span class=\"comment\"># The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces</span></div>\n<div class=\"line\"><a name=\"l01505\"></a><span class=\"lineno\"> 1505</span>&#160;<span class=\"comment\"># of code that will be used on startup of the MathJax code. See the MathJax site</span></div>\n<div class=\"line\"><a name=\"l01506\"></a><span class=\"lineno\"> 1506</span>&#160;<span class=\"comment\"># (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an</span></div>\n<div class=\"line\"><a name=\"l01507\"></a><span class=\"lineno\"> 1507</span>&#160;<span class=\"comment\"># example see the documentation.</span></div>\n<div class=\"line\"><a name=\"l01508\"></a><span class=\"lineno\"> 1508</span>&#160;<span class=\"comment\"># This tag requires that the tag USE_MATHJAX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01509\"></a><span class=\"lineno\"> 1509</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01510\"></a><span class=\"lineno\"> 1510</span>&#160;<span class=\"comment\">MATHJAX_CODEFILE       = </span></div>\n<div class=\"line\"><a name=\"l01511\"></a><span class=\"lineno\"> 1511</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01512\"></a><span class=\"lineno\"> 1512</span>&#160;<span class=\"comment\"># When the SEARCHENGINE tag is enabled doxygen will generate a search box for</span></div>\n<div class=\"line\"><a name=\"l01513\"></a><span class=\"lineno\"> 1513</span>&#160;<span class=\"comment\"># the HTML output. The underlying search engine uses javascript and DHTML and</span></div>\n<div class=\"line\"><a name=\"l01514\"></a><span class=\"lineno\"> 1514</span>&#160;<span class=\"comment\"># should work on any modern browser. Note that when using HTML help</span></div>\n<div class=\"line\"><a name=\"l01515\"></a><span class=\"lineno\"> 1515</span>&#160;<span class=\"comment\"># (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)</span></div>\n<div class=\"line\"><a name=\"l01516\"></a><span class=\"lineno\"> 1516</span>&#160;<span class=\"comment\"># there is already a search function so this one should typically be disabled.</span></div>\n<div class=\"line\"><a name=\"l01517\"></a><span class=\"lineno\"> 1517</span>&#160;<span class=\"comment\"># For large projects the javascript based search engine can be slow, then</span></div>\n<div class=\"line\"><a name=\"l01518\"></a><span class=\"lineno\"> 1518</span>&#160;<span class=\"comment\"># enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to</span></div>\n<div class=\"line\"><a name=\"l01519\"></a><span class=\"lineno\"> 1519</span>&#160;<span class=\"comment\"># search using the keyboard; to jump to the search box use &lt;access key&gt; + S</span></div>\n<div class=\"line\"><a name=\"l01520\"></a><span class=\"lineno\"> 1520</span>&#160;<span class=\"comment\"># (what the &lt;access key&gt; is depends on the OS and browser, but it is typically</span></div>\n<div class=\"line\"><a name=\"l01521\"></a><span class=\"lineno\"> 1521</span>&#160;<span class=\"comment\"># &lt;CTRL&gt;, &lt;ALT&gt;/&lt;option&gt;, or both). Inside the search box use the &lt;cursor down</span></div>\n<div class=\"line\"><a name=\"l01522\"></a><span class=\"lineno\"> 1522</span>&#160;<span class=\"comment\"># key&gt; to jump into the search results window, the results can be navigated</span></div>\n<div class=\"line\"><a name=\"l01523\"></a><span class=\"lineno\"> 1523</span>&#160;<span class=\"comment\"># using the &lt;cursor keys&gt;. Press &lt;Enter&gt; to select an item or &lt;escape&gt; to cancel</span></div>\n<div class=\"line\"><a name=\"l01524\"></a><span class=\"lineno\"> 1524</span>&#160;<span class=\"comment\"># the search. The filter options can be selected when the cursor is inside the</span></div>\n<div class=\"line\"><a name=\"l01525\"></a><span class=\"lineno\"> 1525</span>&#160;<span class=\"comment\"># search box by pressing &lt;Shift&gt;+&lt;cursor down&gt;. Also here use the &lt;cursor keys&gt;</span></div>\n<div class=\"line\"><a name=\"l01526\"></a><span class=\"lineno\"> 1526</span>&#160;<span class=\"comment\"># to select a filter and &lt;Enter&gt; or &lt;escape&gt; to activate or cancel the filter</span></div>\n<div class=\"line\"><a name=\"l01527\"></a><span class=\"lineno\"> 1527</span>&#160;<span class=\"comment\"># option.</span></div>\n<div class=\"line\"><a name=\"l01528\"></a><span class=\"lineno\"> 1528</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01529\"></a><span class=\"lineno\"> 1529</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_HTML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01530\"></a><span class=\"lineno\"> 1530</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01531\"></a><span class=\"lineno\"> 1531</span>&#160;<span class=\"comment\">SEARCHENGINE           = YES</span></div>\n<div class=\"line\"><a name=\"l01532\"></a><span class=\"lineno\"> 1532</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01533\"></a><span class=\"lineno\"> 1533</span>&#160;<span class=\"comment\"># When the SERVER_BASED_SEARCH tag is enabled the search engine will be</span></div>\n<div class=\"line\"><a name=\"l01534\"></a><span class=\"lineno\"> 1534</span>&#160;<span class=\"comment\"># implemented using a web server instead of a web client using Javascript. There</span></div>\n<div class=\"line\"><a name=\"l01535\"></a><span class=\"lineno\"> 1535</span>&#160;<span class=\"comment\"># are two flavors of web server based searching depending on the EXTERNAL_SEARCH</span></div>\n<div class=\"line\"><a name=\"l01536\"></a><span class=\"lineno\"> 1536</span>&#160;<span class=\"comment\"># setting. When disabled, doxygen will generate a PHP script for searching and</span></div>\n<div class=\"line\"><a name=\"l01537\"></a><span class=\"lineno\"> 1537</span>&#160;<span class=\"comment\"># an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing</span></div>\n<div class=\"line\"><a name=\"l01538\"></a><span class=\"lineno\"> 1538</span>&#160;<span class=\"comment\"># and searching needs to be provided by external tools. See the section</span></div>\n<div class=\"line\"><a name=\"l01539\"></a><span class=\"lineno\"> 1539</span>&#160;<span class=\"comment\"># &quot;External Indexing and Searching&quot; for details.</span></div>\n<div class=\"line\"><a name=\"l01540\"></a><span class=\"lineno\"> 1540</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01541\"></a><span class=\"lineno\"> 1541</span>&#160;<span class=\"comment\"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01542\"></a><span class=\"lineno\"> 1542</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01543\"></a><span class=\"lineno\"> 1543</span>&#160;<span class=\"comment\">SERVER_BASED_SEARCH    = NO</span></div>\n<div class=\"line\"><a name=\"l01544\"></a><span class=\"lineno\"> 1544</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01545\"></a><span class=\"lineno\"> 1545</span>&#160;<span class=\"comment\"># When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP</span></div>\n<div class=\"line\"><a name=\"l01546\"></a><span class=\"lineno\"> 1546</span>&#160;<span class=\"comment\"># script for searching. Instead the search results are written to an XML file</span></div>\n<div class=\"line\"><a name=\"l01547\"></a><span class=\"lineno\"> 1547</span>&#160;<span class=\"comment\"># which needs to be processed by an external indexer. Doxygen will invoke an</span></div>\n<div class=\"line\"><a name=\"l01548\"></a><span class=\"lineno\"> 1548</span>&#160;<span class=\"comment\"># external search engine pointed to by the SEARCHENGINE_URL option to obtain the</span></div>\n<div class=\"line\"><a name=\"l01549\"></a><span class=\"lineno\"> 1549</span>&#160;<span class=\"comment\"># search results.</span></div>\n<div class=\"line\"><a name=\"l01550\"></a><span class=\"lineno\"> 1550</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01551\"></a><span class=\"lineno\"> 1551</span>&#160;<span class=\"comment\"># Doxygen ships with an example indexer (doxyindexer) and search engine</span></div>\n<div class=\"line\"><a name=\"l01552\"></a><span class=\"lineno\"> 1552</span>&#160;<span class=\"comment\"># (doxysearch.cgi) which are based on the open source search engine library</span></div>\n<div class=\"line\"><a name=\"l01553\"></a><span class=\"lineno\"> 1553</span>&#160;<span class=\"comment\"># Xapian (see: http://xapian.org/).</span></div>\n<div class=\"line\"><a name=\"l01554\"></a><span class=\"lineno\"> 1554</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01555\"></a><span class=\"lineno\"> 1555</span>&#160;<span class=\"comment\"># See the section &quot;External Indexing and Searching&quot; for details.</span></div>\n<div class=\"line\"><a name=\"l01556\"></a><span class=\"lineno\"> 1556</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01557\"></a><span class=\"lineno\"> 1557</span>&#160;<span class=\"comment\"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01558\"></a><span class=\"lineno\"> 1558</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01559\"></a><span class=\"lineno\"> 1559</span>&#160;<span class=\"comment\">EXTERNAL_SEARCH        = NO</span></div>\n<div class=\"line\"><a name=\"l01560\"></a><span class=\"lineno\"> 1560</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01561\"></a><span class=\"lineno\"> 1561</span>&#160;<span class=\"comment\"># The SEARCHENGINE_URL should point to a search engine hosted by a web server</span></div>\n<div class=\"line\"><a name=\"l01562\"></a><span class=\"lineno\"> 1562</span>&#160;<span class=\"comment\"># which will return the search results when EXTERNAL_SEARCH is enabled.</span></div>\n<div class=\"line\"><a name=\"l01563\"></a><span class=\"lineno\"> 1563</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01564\"></a><span class=\"lineno\"> 1564</span>&#160;<span class=\"comment\"># Doxygen ships with an example indexer (doxyindexer) and search engine</span></div>\n<div class=\"line\"><a name=\"l01565\"></a><span class=\"lineno\"> 1565</span>&#160;<span class=\"comment\"># (doxysearch.cgi) which are based on the open source search engine library</span></div>\n<div class=\"line\"><a name=\"l01566\"></a><span class=\"lineno\"> 1566</span>&#160;<span class=\"comment\"># Xapian (see: http://xapian.org/). See the section &quot;External Indexing and</span></div>\n<div class=\"line\"><a name=\"l01567\"></a><span class=\"lineno\"> 1567</span>&#160;<span class=\"comment\"># Searching&quot; for details.</span></div>\n<div class=\"line\"><a name=\"l01568\"></a><span class=\"lineno\"> 1568</span>&#160;<span class=\"comment\"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01569\"></a><span class=\"lineno\"> 1569</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01570\"></a><span class=\"lineno\"> 1570</span>&#160;<span class=\"comment\">SEARCHENGINE_URL       = </span></div>\n<div class=\"line\"><a name=\"l01571\"></a><span class=\"lineno\"> 1571</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01572\"></a><span class=\"lineno\"> 1572</span>&#160;<span class=\"comment\"># When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed</span></div>\n<div class=\"line\"><a name=\"l01573\"></a><span class=\"lineno\"> 1573</span>&#160;<span class=\"comment\"># search data is written to a file for indexing by an external tool. With the</span></div>\n<div class=\"line\"><a name=\"l01574\"></a><span class=\"lineno\"> 1574</span>&#160;<span class=\"comment\"># SEARCHDATA_FILE tag the name of this file can be specified.</span></div>\n<div class=\"line\"><a name=\"l01575\"></a><span class=\"lineno\"> 1575</span>&#160;<span class=\"comment\"># The default file is: searchdata.xml.</span></div>\n<div class=\"line\"><a name=\"l01576\"></a><span class=\"lineno\"> 1576</span>&#160;<span class=\"comment\"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01577\"></a><span class=\"lineno\"> 1577</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01578\"></a><span class=\"lineno\"> 1578</span>&#160;<span class=\"comment\">SEARCHDATA_FILE        = searchdata.xml</span></div>\n<div class=\"line\"><a name=\"l01579\"></a><span class=\"lineno\"> 1579</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01580\"></a><span class=\"lineno\"> 1580</span>&#160;<span class=\"comment\"># When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the</span></div>\n<div class=\"line\"><a name=\"l01581\"></a><span class=\"lineno\"> 1581</span>&#160;<span class=\"comment\"># EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is</span></div>\n<div class=\"line\"><a name=\"l01582\"></a><span class=\"lineno\"> 1582</span>&#160;<span class=\"comment\"># useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple</span></div>\n<div class=\"line\"><a name=\"l01583\"></a><span class=\"lineno\"> 1583</span>&#160;<span class=\"comment\"># projects and redirect the results back to the right project.</span></div>\n<div class=\"line\"><a name=\"l01584\"></a><span class=\"lineno\"> 1584</span>&#160;<span class=\"comment\"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01585\"></a><span class=\"lineno\"> 1585</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01586\"></a><span class=\"lineno\"> 1586</span>&#160;<span class=\"comment\">EXTERNAL_SEARCH_ID     = </span></div>\n<div class=\"line\"><a name=\"l01587\"></a><span class=\"lineno\"> 1587</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01588\"></a><span class=\"lineno\"> 1588</span>&#160;<span class=\"comment\"># The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen</span></div>\n<div class=\"line\"><a name=\"l01589\"></a><span class=\"lineno\"> 1589</span>&#160;<span class=\"comment\"># projects other than the one defined by this configuration file, but that are</span></div>\n<div class=\"line\"><a name=\"l01590\"></a><span class=\"lineno\"> 1590</span>&#160;<span class=\"comment\"># all added to the same external search index. Each project needs to have a</span></div>\n<div class=\"line\"><a name=\"l01591\"></a><span class=\"lineno\"> 1591</span>&#160;<span class=\"comment\"># unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of</span></div>\n<div class=\"line\"><a name=\"l01592\"></a><span class=\"lineno\"> 1592</span>&#160;<span class=\"comment\"># to a relative location where the documentation can be found. The format is:</span></div>\n<div class=\"line\"><a name=\"l01593\"></a><span class=\"lineno\"> 1593</span>&#160;<span class=\"comment\"># EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...</span></div>\n<div class=\"line\"><a name=\"l01594\"></a><span class=\"lineno\"> 1594</span>&#160;<span class=\"comment\"># This tag requires that the tag SEARCHENGINE is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01595\"></a><span class=\"lineno\"> 1595</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01596\"></a><span class=\"lineno\"> 1596</span>&#160;<span class=\"comment\">EXTRA_SEARCH_MAPPINGS  = </span></div>\n<div class=\"line\"><a name=\"l01597\"></a><span class=\"lineno\"> 1597</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01598\"></a><span class=\"lineno\"> 1598</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01599\"></a><span class=\"lineno\"> 1599</span>&#160;<span class=\"comment\"># Configuration options related to the LaTeX output</span></div>\n<div class=\"line\"><a name=\"l01600\"></a><span class=\"lineno\"> 1600</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01601\"></a><span class=\"lineno\"> 1601</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01602\"></a><span class=\"lineno\"> 1602</span>&#160;<span class=\"comment\"># If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.</span></div>\n<div class=\"line\"><a name=\"l01603\"></a><span class=\"lineno\"> 1603</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01604\"></a><span class=\"lineno\"> 1604</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01605\"></a><span class=\"lineno\"> 1605</span>&#160;<span class=\"comment\">GENERATE_LATEX         = NO</span></div>\n<div class=\"line\"><a name=\"l01606\"></a><span class=\"lineno\"> 1606</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01607\"></a><span class=\"lineno\"> 1607</span>&#160;<span class=\"comment\"># The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a</span></div>\n<div class=\"line\"><a name=\"l01608\"></a><span class=\"lineno\"> 1608</span>&#160;<span class=\"comment\"># relative path is entered the value of OUTPUT_DIRECTORY will be put in front of</span></div>\n<div class=\"line\"><a name=\"l01609\"></a><span class=\"lineno\"> 1609</span>&#160;<span class=\"comment\"># it.</span></div>\n<div class=\"line\"><a name=\"l01610\"></a><span class=\"lineno\"> 1610</span>&#160;<span class=\"comment\"># The default directory is: latex.</span></div>\n<div class=\"line\"><a name=\"l01611\"></a><span class=\"lineno\"> 1611</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01612\"></a><span class=\"lineno\"> 1612</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01613\"></a><span class=\"lineno\"> 1613</span>&#160;<span class=\"comment\">LATEX_OUTPUT           = latex</span></div>\n<div class=\"line\"><a name=\"l01614\"></a><span class=\"lineno\"> 1614</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01615\"></a><span class=\"lineno\"> 1615</span>&#160;<span class=\"comment\"># The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be</span></div>\n<div class=\"line\"><a name=\"l01616\"></a><span class=\"lineno\"> 1616</span>&#160;<span class=\"comment\"># invoked.</span></div>\n<div class=\"line\"><a name=\"l01617\"></a><span class=\"lineno\"> 1617</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01618\"></a><span class=\"lineno\"> 1618</span>&#160;<span class=\"comment\"># Note that when enabling USE_PDFLATEX this option is only used for generating</span></div>\n<div class=\"line\"><a name=\"l01619\"></a><span class=\"lineno\"> 1619</span>&#160;<span class=\"comment\"># bitmaps for formulas in the HTML output, but not in the Makefile that is</span></div>\n<div class=\"line\"><a name=\"l01620\"></a><span class=\"lineno\"> 1620</span>&#160;<span class=\"comment\"># written to the output directory.</span></div>\n<div class=\"line\"><a name=\"l01621\"></a><span class=\"lineno\"> 1621</span>&#160;<span class=\"comment\"># The default file is: latex.</span></div>\n<div class=\"line\"><a name=\"l01622\"></a><span class=\"lineno\"> 1622</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01623\"></a><span class=\"lineno\"> 1623</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01624\"></a><span class=\"lineno\"> 1624</span>&#160;<span class=\"comment\">LATEX_CMD_NAME         = latex</span></div>\n<div class=\"line\"><a name=\"l01625\"></a><span class=\"lineno\"> 1625</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01626\"></a><span class=\"lineno\"> 1626</span>&#160;<span class=\"comment\"># The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate</span></div>\n<div class=\"line\"><a name=\"l01627\"></a><span class=\"lineno\"> 1627</span>&#160;<span class=\"comment\"># index for LaTeX.</span></div>\n<div class=\"line\"><a name=\"l01628\"></a><span class=\"lineno\"> 1628</span>&#160;<span class=\"comment\"># The default file is: makeindex.</span></div>\n<div class=\"line\"><a name=\"l01629\"></a><span class=\"lineno\"> 1629</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01630\"></a><span class=\"lineno\"> 1630</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01631\"></a><span class=\"lineno\"> 1631</span>&#160;<span class=\"comment\">MAKEINDEX_CMD_NAME     = makeindex</span></div>\n<div class=\"line\"><a name=\"l01632\"></a><span class=\"lineno\"> 1632</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01633\"></a><span class=\"lineno\"> 1633</span>&#160;<span class=\"comment\"># If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX</span></div>\n<div class=\"line\"><a name=\"l01634\"></a><span class=\"lineno\"> 1634</span>&#160;<span class=\"comment\"># documents. This may be useful for small projects and may help to save some</span></div>\n<div class=\"line\"><a name=\"l01635\"></a><span class=\"lineno\"> 1635</span>&#160;<span class=\"comment\"># trees in general.</span></div>\n<div class=\"line\"><a name=\"l01636\"></a><span class=\"lineno\"> 1636</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01637\"></a><span class=\"lineno\"> 1637</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01638\"></a><span class=\"lineno\"> 1638</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01639\"></a><span class=\"lineno\"> 1639</span>&#160;<span class=\"comment\">COMPACT_LATEX          = NO</span></div>\n<div class=\"line\"><a name=\"l01640\"></a><span class=\"lineno\"> 1640</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01641\"></a><span class=\"lineno\"> 1641</span>&#160;<span class=\"comment\"># The PAPER_TYPE tag can be used to set the paper type that is used by the</span></div>\n<div class=\"line\"><a name=\"l01642\"></a><span class=\"lineno\"> 1642</span>&#160;<span class=\"comment\"># printer.</span></div>\n<div class=\"line\"><a name=\"l01643\"></a><span class=\"lineno\"> 1643</span>&#160;<span class=\"comment\"># Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x</span></div>\n<div class=\"line\"><a name=\"l01644\"></a><span class=\"lineno\"> 1644</span>&#160;<span class=\"comment\"># 14 inches) and executive (7.25 x 10.5 inches).</span></div>\n<div class=\"line\"><a name=\"l01645\"></a><span class=\"lineno\"> 1645</span>&#160;<span class=\"comment\"># The default value is: a4.</span></div>\n<div class=\"line\"><a name=\"l01646\"></a><span class=\"lineno\"> 1646</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01647\"></a><span class=\"lineno\"> 1647</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01648\"></a><span class=\"lineno\"> 1648</span>&#160;<span class=\"comment\">PAPER_TYPE             = a4wide</span></div>\n<div class=\"line\"><a name=\"l01649\"></a><span class=\"lineno\"> 1649</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01650\"></a><span class=\"lineno\"> 1650</span>&#160;<span class=\"comment\"># The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names</span></div>\n<div class=\"line\"><a name=\"l01651\"></a><span class=\"lineno\"> 1651</span>&#160;<span class=\"comment\"># that should be included in the LaTeX output. The package can be specified just</span></div>\n<div class=\"line\"><a name=\"l01652\"></a><span class=\"lineno\"> 1652</span>&#160;<span class=\"comment\"># by its name or with the correct syntax as to be used with the LaTeX</span></div>\n<div class=\"line\"><a name=\"l01653\"></a><span class=\"lineno\"> 1653</span>&#160;<span class=\"comment\"># \\usepackage command. To get the times font for instance you can specify :</span></div>\n<div class=\"line\"><a name=\"l01654\"></a><span class=\"lineno\"> 1654</span>&#160;<span class=\"comment\"># EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}</span></div>\n<div class=\"line\"><a name=\"l01655\"></a><span class=\"lineno\"> 1655</span>&#160;<span class=\"comment\"># To use the option intlimits with the amsmath package you can specify:</span></div>\n<div class=\"line\"><a name=\"l01656\"></a><span class=\"lineno\"> 1656</span>&#160;<span class=\"comment\"># EXTRA_PACKAGES=[intlimits]{amsmath}</span></div>\n<div class=\"line\"><a name=\"l01657\"></a><span class=\"lineno\"> 1657</span>&#160;<span class=\"comment\"># If left blank no extra packages will be included.</span></div>\n<div class=\"line\"><a name=\"l01658\"></a><span class=\"lineno\"> 1658</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01659\"></a><span class=\"lineno\"> 1659</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01660\"></a><span class=\"lineno\"> 1660</span>&#160;<span class=\"comment\">EXTRA_PACKAGES         = </span></div>\n<div class=\"line\"><a name=\"l01661\"></a><span class=\"lineno\"> 1661</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01662\"></a><span class=\"lineno\"> 1662</span>&#160;<span class=\"comment\"># The LATEX_HEADER tag can be used to specify a personal LaTeX header for the</span></div>\n<div class=\"line\"><a name=\"l01663\"></a><span class=\"lineno\"> 1663</span>&#160;<span class=\"comment\"># generated LaTeX document. The header should contain everything until the first</span></div>\n<div class=\"line\"><a name=\"l01664\"></a><span class=\"lineno\"> 1664</span>&#160;<span class=\"comment\"># chapter. If it is left blank doxygen will generate a standard header. See</span></div>\n<div class=\"line\"><a name=\"l01665\"></a><span class=\"lineno\"> 1665</span>&#160;<span class=\"comment\"># section &quot;Doxygen usage&quot; for information on how to let doxygen write the</span></div>\n<div class=\"line\"><a name=\"l01666\"></a><span class=\"lineno\"> 1666</span>&#160;<span class=\"comment\"># default header to a separate file.</span></div>\n<div class=\"line\"><a name=\"l01667\"></a><span class=\"lineno\"> 1667</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01668\"></a><span class=\"lineno\"> 1668</span>&#160;<span class=\"comment\"># Note: Only use a user-defined header if you know what you are doing! The</span></div>\n<div class=\"line\"><a name=\"l01669\"></a><span class=\"lineno\"> 1669</span>&#160;<span class=\"comment\"># following commands have a special meaning inside the header: $title,</span></div>\n<div class=\"line\"><a name=\"l01670\"></a><span class=\"lineno\"> 1670</span>&#160;<span class=\"comment\"># $datetime, $date, $doxygenversion, $projectname, $projectnumber,</span></div>\n<div class=\"line\"><a name=\"l01671\"></a><span class=\"lineno\"> 1671</span>&#160;<span class=\"comment\"># $projectbrief, $projectlogo. Doxygen will replace $title with the empty</span></div>\n<div class=\"line\"><a name=\"l01672\"></a><span class=\"lineno\"> 1672</span>&#160;<span class=\"comment\"># string, for the replacement values of the other commands the user is referred</span></div>\n<div class=\"line\"><a name=\"l01673\"></a><span class=\"lineno\"> 1673</span>&#160;<span class=\"comment\"># to HTML_HEADER.</span></div>\n<div class=\"line\"><a name=\"l01674\"></a><span class=\"lineno\"> 1674</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01675\"></a><span class=\"lineno\"> 1675</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01676\"></a><span class=\"lineno\"> 1676</span>&#160;<span class=\"comment\">LATEX_HEADER           = </span></div>\n<div class=\"line\"><a name=\"l01677\"></a><span class=\"lineno\"> 1677</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01678\"></a><span class=\"lineno\"> 1678</span>&#160;<span class=\"comment\"># The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the</span></div>\n<div class=\"line\"><a name=\"l01679\"></a><span class=\"lineno\"> 1679</span>&#160;<span class=\"comment\"># generated LaTeX document. The footer should contain everything after the last</span></div>\n<div class=\"line\"><a name=\"l01680\"></a><span class=\"lineno\"> 1680</span>&#160;<span class=\"comment\"># chapter. If it is left blank doxygen will generate a standard footer. See</span></div>\n<div class=\"line\"><a name=\"l01681\"></a><span class=\"lineno\"> 1681</span>&#160;<span class=\"comment\"># LATEX_HEADER for more information on how to generate a default footer and what</span></div>\n<div class=\"line\"><a name=\"l01682\"></a><span class=\"lineno\"> 1682</span>&#160;<span class=\"comment\"># special commands can be used inside the footer.</span></div>\n<div class=\"line\"><a name=\"l01683\"></a><span class=\"lineno\"> 1683</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01684\"></a><span class=\"lineno\"> 1684</span>&#160;<span class=\"comment\"># Note: Only use a user-defined footer if you know what you are doing!</span></div>\n<div class=\"line\"><a name=\"l01685\"></a><span class=\"lineno\"> 1685</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01686\"></a><span class=\"lineno\"> 1686</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01687\"></a><span class=\"lineno\"> 1687</span>&#160;<span class=\"comment\">LATEX_FOOTER           = </span></div>\n<div class=\"line\"><a name=\"l01688\"></a><span class=\"lineno\"> 1688</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01689\"></a><span class=\"lineno\"> 1689</span>&#160;<span class=\"comment\"># The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined</span></div>\n<div class=\"line\"><a name=\"l01690\"></a><span class=\"lineno\"> 1690</span>&#160;<span class=\"comment\"># LaTeX style sheets that are included after the standard style sheets created</span></div>\n<div class=\"line\"><a name=\"l01691\"></a><span class=\"lineno\"> 1691</span>&#160;<span class=\"comment\"># by doxygen. Using this option one can overrule certain style aspects. Doxygen</span></div>\n<div class=\"line\"><a name=\"l01692\"></a><span class=\"lineno\"> 1692</span>&#160;<span class=\"comment\"># will copy the style sheet files to the output directory.</span></div>\n<div class=\"line\"><a name=\"l01693\"></a><span class=\"lineno\"> 1693</span>&#160;<span class=\"comment\"># Note: The order of the extra style sheet files is of importance (e.g. the last</span></div>\n<div class=\"line\"><a name=\"l01694\"></a><span class=\"lineno\"> 1694</span>&#160;<span class=\"comment\"># style sheet in the list overrules the setting of the previous ones in the</span></div>\n<div class=\"line\"><a name=\"l01695\"></a><span class=\"lineno\"> 1695</span>&#160;<span class=\"comment\"># list).</span></div>\n<div class=\"line\"><a name=\"l01696\"></a><span class=\"lineno\"> 1696</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01697\"></a><span class=\"lineno\"> 1697</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01698\"></a><span class=\"lineno\"> 1698</span>&#160;<span class=\"comment\">LATEX_EXTRA_STYLESHEET = </span></div>\n<div class=\"line\"><a name=\"l01699\"></a><span class=\"lineno\"> 1699</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01700\"></a><span class=\"lineno\"> 1700</span>&#160;<span class=\"comment\"># The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or</span></div>\n<div class=\"line\"><a name=\"l01701\"></a><span class=\"lineno\"> 1701</span>&#160;<span class=\"comment\"># other source files which should be copied to the LATEX_OUTPUT output</span></div>\n<div class=\"line\"><a name=\"l01702\"></a><span class=\"lineno\"> 1702</span>&#160;<span class=\"comment\"># directory. Note that the files will be copied as-is; there are no commands or</span></div>\n<div class=\"line\"><a name=\"l01703\"></a><span class=\"lineno\"> 1703</span>&#160;<span class=\"comment\"># markers available.</span></div>\n<div class=\"line\"><a name=\"l01704\"></a><span class=\"lineno\"> 1704</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01705\"></a><span class=\"lineno\"> 1705</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01706\"></a><span class=\"lineno\"> 1706</span>&#160;<span class=\"comment\">LATEX_EXTRA_FILES      = </span></div>\n<div class=\"line\"><a name=\"l01707\"></a><span class=\"lineno\"> 1707</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01708\"></a><span class=\"lineno\"> 1708</span>&#160;<span class=\"comment\"># If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is</span></div>\n<div class=\"line\"><a name=\"l01709\"></a><span class=\"lineno\"> 1709</span>&#160;<span class=\"comment\"># prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will</span></div>\n<div class=\"line\"><a name=\"l01710\"></a><span class=\"lineno\"> 1710</span>&#160;<span class=\"comment\"># contain links (just like the HTML output) instead of page references. This</span></div>\n<div class=\"line\"><a name=\"l01711\"></a><span class=\"lineno\"> 1711</span>&#160;<span class=\"comment\"># makes the output suitable for online browsing using a PDF viewer.</span></div>\n<div class=\"line\"><a name=\"l01712\"></a><span class=\"lineno\"> 1712</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01713\"></a><span class=\"lineno\"> 1713</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01714\"></a><span class=\"lineno\"> 1714</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01715\"></a><span class=\"lineno\"> 1715</span>&#160;<span class=\"comment\">PDF_HYPERLINKS         = NO</span></div>\n<div class=\"line\"><a name=\"l01716\"></a><span class=\"lineno\"> 1716</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01717\"></a><span class=\"lineno\"> 1717</span>&#160;<span class=\"comment\"># If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate</span></div>\n<div class=\"line\"><a name=\"l01718\"></a><span class=\"lineno\"> 1718</span>&#160;<span class=\"comment\"># the PDF file directly from the LaTeX files. Set this option to YES, to get a</span></div>\n<div class=\"line\"><a name=\"l01719\"></a><span class=\"lineno\"> 1719</span>&#160;<span class=\"comment\"># higher quality PDF documentation.</span></div>\n<div class=\"line\"><a name=\"l01720\"></a><span class=\"lineno\"> 1720</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01721\"></a><span class=\"lineno\"> 1721</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01722\"></a><span class=\"lineno\"> 1722</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01723\"></a><span class=\"lineno\"> 1723</span>&#160;<span class=\"comment\">USE_PDFLATEX           = YES</span></div>\n<div class=\"line\"><a name=\"l01724\"></a><span class=\"lineno\"> 1724</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01725\"></a><span class=\"lineno\"> 1725</span>&#160;<span class=\"comment\"># If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode</span></div>\n<div class=\"line\"><a name=\"l01726\"></a><span class=\"lineno\"> 1726</span>&#160;<span class=\"comment\"># command to the generated LaTeX files. This will instruct LaTeX to keep running</span></div>\n<div class=\"line\"><a name=\"l01727\"></a><span class=\"lineno\"> 1727</span>&#160;<span class=\"comment\"># if errors occur, instead of asking the user for help. This option is also used</span></div>\n<div class=\"line\"><a name=\"l01728\"></a><span class=\"lineno\"> 1728</span>&#160;<span class=\"comment\"># when generating formulas in HTML.</span></div>\n<div class=\"line\"><a name=\"l01729\"></a><span class=\"lineno\"> 1729</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01730\"></a><span class=\"lineno\"> 1730</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01731\"></a><span class=\"lineno\"> 1731</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01732\"></a><span class=\"lineno\"> 1732</span>&#160;<span class=\"comment\">LATEX_BATCHMODE        = NO</span></div>\n<div class=\"line\"><a name=\"l01733\"></a><span class=\"lineno\"> 1733</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01734\"></a><span class=\"lineno\"> 1734</span>&#160;<span class=\"comment\"># If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the</span></div>\n<div class=\"line\"><a name=\"l01735\"></a><span class=\"lineno\"> 1735</span>&#160;<span class=\"comment\"># index chapters (such as File Index, Compound Index, etc.) in the output.</span></div>\n<div class=\"line\"><a name=\"l01736\"></a><span class=\"lineno\"> 1736</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01737\"></a><span class=\"lineno\"> 1737</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01738\"></a><span class=\"lineno\"> 1738</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01739\"></a><span class=\"lineno\"> 1739</span>&#160;<span class=\"comment\">LATEX_HIDE_INDICES     = NO</span></div>\n<div class=\"line\"><a name=\"l01740\"></a><span class=\"lineno\"> 1740</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01741\"></a><span class=\"lineno\"> 1741</span>&#160;<span class=\"comment\"># If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source</span></div>\n<div class=\"line\"><a name=\"l01742\"></a><span class=\"lineno\"> 1742</span>&#160;<span class=\"comment\"># code with syntax highlighting in the LaTeX output.</span></div>\n<div class=\"line\"><a name=\"l01743\"></a><span class=\"lineno\"> 1743</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01744\"></a><span class=\"lineno\"> 1744</span>&#160;<span class=\"comment\"># Note that which sources are shown also depends on other settings such as</span></div>\n<div class=\"line\"><a name=\"l01745\"></a><span class=\"lineno\"> 1745</span>&#160;<span class=\"comment\"># SOURCE_BROWSER.</span></div>\n<div class=\"line\"><a name=\"l01746\"></a><span class=\"lineno\"> 1746</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01747\"></a><span class=\"lineno\"> 1747</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01748\"></a><span class=\"lineno\"> 1748</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01749\"></a><span class=\"lineno\"> 1749</span>&#160;<span class=\"comment\">LATEX_SOURCE_CODE      = NO</span></div>\n<div class=\"line\"><a name=\"l01750\"></a><span class=\"lineno\"> 1750</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01751\"></a><span class=\"lineno\"> 1751</span>&#160;<span class=\"comment\"># The LATEX_BIB_STYLE tag can be used to specify the style to use for the</span></div>\n<div class=\"line\"><a name=\"l01752\"></a><span class=\"lineno\"> 1752</span>&#160;<span class=\"comment\"># bibliography, e.g. plainnat, or ieeetr. See</span></div>\n<div class=\"line\"><a name=\"l01753\"></a><span class=\"lineno\"> 1753</span>&#160;<span class=\"comment\"># http://en.wikipedia.org/wiki/BibTeX and \\cite for more info.</span></div>\n<div class=\"line\"><a name=\"l01754\"></a><span class=\"lineno\"> 1754</span>&#160;<span class=\"comment\"># The default value is: plain.</span></div>\n<div class=\"line\"><a name=\"l01755\"></a><span class=\"lineno\"> 1755</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_LATEX is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01756\"></a><span class=\"lineno\"> 1756</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01757\"></a><span class=\"lineno\"> 1757</span>&#160;<span class=\"comment\">LATEX_BIB_STYLE        = plain</span></div>\n<div class=\"line\"><a name=\"l01758\"></a><span class=\"lineno\"> 1758</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01759\"></a><span class=\"lineno\"> 1759</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01760\"></a><span class=\"lineno\"> 1760</span>&#160;<span class=\"comment\"># Configuration options related to the RTF output</span></div>\n<div class=\"line\"><a name=\"l01761\"></a><span class=\"lineno\"> 1761</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01762\"></a><span class=\"lineno\"> 1762</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01763\"></a><span class=\"lineno\"> 1763</span>&#160;<span class=\"comment\"># If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The</span></div>\n<div class=\"line\"><a name=\"l01764\"></a><span class=\"lineno\"> 1764</span>&#160;<span class=\"comment\"># RTF output is optimized for Word 97 and may not look too pretty with other RTF</span></div>\n<div class=\"line\"><a name=\"l01765\"></a><span class=\"lineno\"> 1765</span>&#160;<span class=\"comment\"># readers/editors.</span></div>\n<div class=\"line\"><a name=\"l01766\"></a><span class=\"lineno\"> 1766</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01767\"></a><span class=\"lineno\"> 1767</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01768\"></a><span class=\"lineno\"> 1768</span>&#160;<span class=\"comment\">GENERATE_RTF           = NO</span></div>\n<div class=\"line\"><a name=\"l01769\"></a><span class=\"lineno\"> 1769</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01770\"></a><span class=\"lineno\"> 1770</span>&#160;<span class=\"comment\"># The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a</span></div>\n<div class=\"line\"><a name=\"l01771\"></a><span class=\"lineno\"> 1771</span>&#160;<span class=\"comment\"># relative path is entered the value of OUTPUT_DIRECTORY will be put in front of</span></div>\n<div class=\"line\"><a name=\"l01772\"></a><span class=\"lineno\"> 1772</span>&#160;<span class=\"comment\"># it.</span></div>\n<div class=\"line\"><a name=\"l01773\"></a><span class=\"lineno\"> 1773</span>&#160;<span class=\"comment\"># The default directory is: rtf.</span></div>\n<div class=\"line\"><a name=\"l01774\"></a><span class=\"lineno\"> 1774</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01775\"></a><span class=\"lineno\"> 1775</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01776\"></a><span class=\"lineno\"> 1776</span>&#160;<span class=\"comment\">RTF_OUTPUT             = glm.rtf</span></div>\n<div class=\"line\"><a name=\"l01777\"></a><span class=\"lineno\"> 1777</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01778\"></a><span class=\"lineno\"> 1778</span>&#160;<span class=\"comment\"># If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF</span></div>\n<div class=\"line\"><a name=\"l01779\"></a><span class=\"lineno\"> 1779</span>&#160;<span class=\"comment\"># documents. This may be useful for small projects and may help to save some</span></div>\n<div class=\"line\"><a name=\"l01780\"></a><span class=\"lineno\"> 1780</span>&#160;<span class=\"comment\"># trees in general.</span></div>\n<div class=\"line\"><a name=\"l01781\"></a><span class=\"lineno\"> 1781</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01782\"></a><span class=\"lineno\"> 1782</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01783\"></a><span class=\"lineno\"> 1783</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01784\"></a><span class=\"lineno\"> 1784</span>&#160;<span class=\"comment\">COMPACT_RTF            = NO</span></div>\n<div class=\"line\"><a name=\"l01785\"></a><span class=\"lineno\"> 1785</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01786\"></a><span class=\"lineno\"> 1786</span>&#160;<span class=\"comment\"># If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will</span></div>\n<div class=\"line\"><a name=\"l01787\"></a><span class=\"lineno\"> 1787</span>&#160;<span class=\"comment\"># contain hyperlink fields. The RTF file will contain links (just like the HTML</span></div>\n<div class=\"line\"><a name=\"l01788\"></a><span class=\"lineno\"> 1788</span>&#160;<span class=\"comment\"># output) instead of page references. This makes the output suitable for online</span></div>\n<div class=\"line\"><a name=\"l01789\"></a><span class=\"lineno\"> 1789</span>&#160;<span class=\"comment\"># browsing using Word or some other Word compatible readers that support those</span></div>\n<div class=\"line\"><a name=\"l01790\"></a><span class=\"lineno\"> 1790</span>&#160;<span class=\"comment\"># fields.</span></div>\n<div class=\"line\"><a name=\"l01791\"></a><span class=\"lineno\"> 1791</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01792\"></a><span class=\"lineno\"> 1792</span>&#160;<span class=\"comment\"># Note: WordPad (write) and others do not support links.</span></div>\n<div class=\"line\"><a name=\"l01793\"></a><span class=\"lineno\"> 1793</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01794\"></a><span class=\"lineno\"> 1794</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01795\"></a><span class=\"lineno\"> 1795</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01796\"></a><span class=\"lineno\"> 1796</span>&#160;<span class=\"comment\">RTF_HYPERLINKS         = YES</span></div>\n<div class=\"line\"><a name=\"l01797\"></a><span class=\"lineno\"> 1797</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01798\"></a><span class=\"lineno\"> 1798</span>&#160;<span class=\"comment\"># Load stylesheet definitions from file. Syntax is similar to doxygen&#39;s config</span></div>\n<div class=\"line\"><a name=\"l01799\"></a><span class=\"lineno\"> 1799</span>&#160;<span class=\"comment\"># file, i.e. a series of assignments. You only have to provide replacements,</span></div>\n<div class=\"line\"><a name=\"l01800\"></a><span class=\"lineno\"> 1800</span>&#160;<span class=\"comment\"># missing definitions are set to their default value.</span></div>\n<div class=\"line\"><a name=\"l01801\"></a><span class=\"lineno\"> 1801</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01802\"></a><span class=\"lineno\"> 1802</span>&#160;<span class=\"comment\"># See also section &quot;Doxygen usage&quot; for information on how to generate the</span></div>\n<div class=\"line\"><a name=\"l01803\"></a><span class=\"lineno\"> 1803</span>&#160;<span class=\"comment\"># default style sheet that doxygen normally uses.</span></div>\n<div class=\"line\"><a name=\"l01804\"></a><span class=\"lineno\"> 1804</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01805\"></a><span class=\"lineno\"> 1805</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01806\"></a><span class=\"lineno\"> 1806</span>&#160;<span class=\"comment\">RTF_STYLESHEET_FILE    = </span></div>\n<div class=\"line\"><a name=\"l01807\"></a><span class=\"lineno\"> 1807</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01808\"></a><span class=\"lineno\"> 1808</span>&#160;<span class=\"comment\"># Set optional variables used in the generation of an RTF document. Syntax is</span></div>\n<div class=\"line\"><a name=\"l01809\"></a><span class=\"lineno\"> 1809</span>&#160;<span class=\"comment\"># similar to doxygen&#39;s config file. A template extensions file can be generated</span></div>\n<div class=\"line\"><a name=\"l01810\"></a><span class=\"lineno\"> 1810</span>&#160;<span class=\"comment\"># using doxygen -e rtf extensionFile.</span></div>\n<div class=\"line\"><a name=\"l01811\"></a><span class=\"lineno\"> 1811</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01812\"></a><span class=\"lineno\"> 1812</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01813\"></a><span class=\"lineno\"> 1813</span>&#160;<span class=\"comment\">RTF_EXTENSIONS_FILE    = </span></div>\n<div class=\"line\"><a name=\"l01814\"></a><span class=\"lineno\"> 1814</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01815\"></a><span class=\"lineno\"> 1815</span>&#160;<span class=\"comment\"># If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code</span></div>\n<div class=\"line\"><a name=\"l01816\"></a><span class=\"lineno\"> 1816</span>&#160;<span class=\"comment\"># with syntax highlighting in the RTF output.</span></div>\n<div class=\"line\"><a name=\"l01817\"></a><span class=\"lineno\"> 1817</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01818\"></a><span class=\"lineno\"> 1818</span>&#160;<span class=\"comment\"># Note that which sources are shown also depends on other settings such as</span></div>\n<div class=\"line\"><a name=\"l01819\"></a><span class=\"lineno\"> 1819</span>&#160;<span class=\"comment\"># SOURCE_BROWSER.</span></div>\n<div class=\"line\"><a name=\"l01820\"></a><span class=\"lineno\"> 1820</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01821\"></a><span class=\"lineno\"> 1821</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_RTF is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01822\"></a><span class=\"lineno\"> 1822</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01823\"></a><span class=\"lineno\"> 1823</span>&#160;<span class=\"comment\">RTF_SOURCE_CODE        = NO</span></div>\n<div class=\"line\"><a name=\"l01824\"></a><span class=\"lineno\"> 1824</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01825\"></a><span class=\"lineno\"> 1825</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01826\"></a><span class=\"lineno\"> 1826</span>&#160;<span class=\"comment\"># Configuration options related to the man page output</span></div>\n<div class=\"line\"><a name=\"l01827\"></a><span class=\"lineno\"> 1827</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01828\"></a><span class=\"lineno\"> 1828</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01829\"></a><span class=\"lineno\"> 1829</span>&#160;<span class=\"comment\"># If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for</span></div>\n<div class=\"line\"><a name=\"l01830\"></a><span class=\"lineno\"> 1830</span>&#160;<span class=\"comment\"># classes and files.</span></div>\n<div class=\"line\"><a name=\"l01831\"></a><span class=\"lineno\"> 1831</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01832\"></a><span class=\"lineno\"> 1832</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01833\"></a><span class=\"lineno\"> 1833</span>&#160;<span class=\"comment\">GENERATE_MAN           = NO</span></div>\n<div class=\"line\"><a name=\"l01834\"></a><span class=\"lineno\"> 1834</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01835\"></a><span class=\"lineno\"> 1835</span>&#160;<span class=\"comment\"># The MAN_OUTPUT tag is used to specify where the man pages will be put. If a</span></div>\n<div class=\"line\"><a name=\"l01836\"></a><span class=\"lineno\"> 1836</span>&#160;<span class=\"comment\"># relative path is entered the value of OUTPUT_DIRECTORY will be put in front of</span></div>\n<div class=\"line\"><a name=\"l01837\"></a><span class=\"lineno\"> 1837</span>&#160;<span class=\"comment\"># it. A directory man3 will be created inside the directory specified by</span></div>\n<div class=\"line\"><a name=\"l01838\"></a><span class=\"lineno\"> 1838</span>&#160;<span class=\"comment\"># MAN_OUTPUT.</span></div>\n<div class=\"line\"><a name=\"l01839\"></a><span class=\"lineno\"> 1839</span>&#160;<span class=\"comment\"># The default directory is: man.</span></div>\n<div class=\"line\"><a name=\"l01840\"></a><span class=\"lineno\"> 1840</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_MAN is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01841\"></a><span class=\"lineno\"> 1841</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01842\"></a><span class=\"lineno\"> 1842</span>&#160;<span class=\"comment\">MAN_OUTPUT             = man</span></div>\n<div class=\"line\"><a name=\"l01843\"></a><span class=\"lineno\"> 1843</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01844\"></a><span class=\"lineno\"> 1844</span>&#160;<span class=\"comment\"># The MAN_EXTENSION tag determines the extension that is added to the generated</span></div>\n<div class=\"line\"><a name=\"l01845\"></a><span class=\"lineno\"> 1845</span>&#160;<span class=\"comment\"># man pages. In case the manual section does not start with a number, the number</span></div>\n<div class=\"line\"><a name=\"l01846\"></a><span class=\"lineno\"> 1846</span>&#160;<span class=\"comment\"># 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is</span></div>\n<div class=\"line\"><a name=\"l01847\"></a><span class=\"lineno\"> 1847</span>&#160;<span class=\"comment\"># optional.</span></div>\n<div class=\"line\"><a name=\"l01848\"></a><span class=\"lineno\"> 1848</span>&#160;<span class=\"comment\"># The default value is: .3.</span></div>\n<div class=\"line\"><a name=\"l01849\"></a><span class=\"lineno\"> 1849</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_MAN is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01850\"></a><span class=\"lineno\"> 1850</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01851\"></a><span class=\"lineno\"> 1851</span>&#160;<span class=\"comment\">MAN_EXTENSION          = .3</span></div>\n<div class=\"line\"><a name=\"l01852\"></a><span class=\"lineno\"> 1852</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01853\"></a><span class=\"lineno\"> 1853</span>&#160;<span class=\"comment\"># The MAN_SUBDIR tag determines the name of the directory created within</span></div>\n<div class=\"line\"><a name=\"l01854\"></a><span class=\"lineno\"> 1854</span>&#160;<span class=\"comment\"># MAN_OUTPUT in which the man pages are placed. If defaults to man followed by</span></div>\n<div class=\"line\"><a name=\"l01855\"></a><span class=\"lineno\"> 1855</span>&#160;<span class=\"comment\"># MAN_EXTENSION with the initial . removed.</span></div>\n<div class=\"line\"><a name=\"l01856\"></a><span class=\"lineno\"> 1856</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_MAN is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01857\"></a><span class=\"lineno\"> 1857</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01858\"></a><span class=\"lineno\"> 1858</span>&#160;<span class=\"comment\">MAN_SUBDIR             = </span></div>\n<div class=\"line\"><a name=\"l01859\"></a><span class=\"lineno\"> 1859</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01860\"></a><span class=\"lineno\"> 1860</span>&#160;<span class=\"comment\"># If the MAN_LINKS tag is set to YES and doxygen generates man output, then it</span></div>\n<div class=\"line\"><a name=\"l01861\"></a><span class=\"lineno\"> 1861</span>&#160;<span class=\"comment\"># will generate one additional man file for each entity documented in the real</span></div>\n<div class=\"line\"><a name=\"l01862\"></a><span class=\"lineno\"> 1862</span>&#160;<span class=\"comment\"># man page(s). These additional files only source the real man page, but without</span></div>\n<div class=\"line\"><a name=\"l01863\"></a><span class=\"lineno\"> 1863</span>&#160;<span class=\"comment\"># them the man command would be unable to find the correct page.</span></div>\n<div class=\"line\"><a name=\"l01864\"></a><span class=\"lineno\"> 1864</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01865\"></a><span class=\"lineno\"> 1865</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_MAN is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01866\"></a><span class=\"lineno\"> 1866</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01867\"></a><span class=\"lineno\"> 1867</span>&#160;<span class=\"comment\">MAN_LINKS              = NO</span></div>\n<div class=\"line\"><a name=\"l01868\"></a><span class=\"lineno\"> 1868</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01869\"></a><span class=\"lineno\"> 1869</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01870\"></a><span class=\"lineno\"> 1870</span>&#160;<span class=\"comment\"># Configuration options related to the XML output</span></div>\n<div class=\"line\"><a name=\"l01871\"></a><span class=\"lineno\"> 1871</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01872\"></a><span class=\"lineno\"> 1872</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01873\"></a><span class=\"lineno\"> 1873</span>&#160;<span class=\"comment\"># If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that</span></div>\n<div class=\"line\"><a name=\"l01874\"></a><span class=\"lineno\"> 1874</span>&#160;<span class=\"comment\"># captures the structure of the code including all documentation.</span></div>\n<div class=\"line\"><a name=\"l01875\"></a><span class=\"lineno\"> 1875</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01876\"></a><span class=\"lineno\"> 1876</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01877\"></a><span class=\"lineno\"> 1877</span>&#160;<span class=\"comment\">GENERATE_XML           = NO</span></div>\n<div class=\"line\"><a name=\"l01878\"></a><span class=\"lineno\"> 1878</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01879\"></a><span class=\"lineno\"> 1879</span>&#160;<span class=\"comment\"># The XML_OUTPUT tag is used to specify where the XML pages will be put. If a</span></div>\n<div class=\"line\"><a name=\"l01880\"></a><span class=\"lineno\"> 1880</span>&#160;<span class=\"comment\"># relative path is entered the value of OUTPUT_DIRECTORY will be put in front of</span></div>\n<div class=\"line\"><a name=\"l01881\"></a><span class=\"lineno\"> 1881</span>&#160;<span class=\"comment\"># it.</span></div>\n<div class=\"line\"><a name=\"l01882\"></a><span class=\"lineno\"> 1882</span>&#160;<span class=\"comment\"># The default directory is: xml.</span></div>\n<div class=\"line\"><a name=\"l01883\"></a><span class=\"lineno\"> 1883</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_XML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01884\"></a><span class=\"lineno\"> 1884</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01885\"></a><span class=\"lineno\"> 1885</span>&#160;<span class=\"comment\">XML_OUTPUT             = xml</span></div>\n<div class=\"line\"><a name=\"l01886\"></a><span class=\"lineno\"> 1886</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01887\"></a><span class=\"lineno\"> 1887</span>&#160;<span class=\"comment\"># If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program</span></div>\n<div class=\"line\"><a name=\"l01888\"></a><span class=\"lineno\"> 1888</span>&#160;<span class=\"comment\"># listings (including syntax highlighting and cross-referencing information) to</span></div>\n<div class=\"line\"><a name=\"l01889\"></a><span class=\"lineno\"> 1889</span>&#160;<span class=\"comment\"># the XML output. Note that enabling this will significantly increase the size</span></div>\n<div class=\"line\"><a name=\"l01890\"></a><span class=\"lineno\"> 1890</span>&#160;<span class=\"comment\"># of the XML output.</span></div>\n<div class=\"line\"><a name=\"l01891\"></a><span class=\"lineno\"> 1891</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01892\"></a><span class=\"lineno\"> 1892</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_XML is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01893\"></a><span class=\"lineno\"> 1893</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01894\"></a><span class=\"lineno\"> 1894</span>&#160;<span class=\"comment\">XML_PROGRAMLISTING     = YES</span></div>\n<div class=\"line\"><a name=\"l01895\"></a><span class=\"lineno\"> 1895</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01896\"></a><span class=\"lineno\"> 1896</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01897\"></a><span class=\"lineno\"> 1897</span>&#160;<span class=\"comment\"># Configuration options related to the DOCBOOK output</span></div>\n<div class=\"line\"><a name=\"l01898\"></a><span class=\"lineno\"> 1898</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01899\"></a><span class=\"lineno\"> 1899</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01900\"></a><span class=\"lineno\"> 1900</span>&#160;<span class=\"comment\"># If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files</span></div>\n<div class=\"line\"><a name=\"l01901\"></a><span class=\"lineno\"> 1901</span>&#160;<span class=\"comment\"># that can be used to generate PDF.</span></div>\n<div class=\"line\"><a name=\"l01902\"></a><span class=\"lineno\"> 1902</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01903\"></a><span class=\"lineno\"> 1903</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01904\"></a><span class=\"lineno\"> 1904</span>&#160;<span class=\"comment\">GENERATE_DOCBOOK       = NO</span></div>\n<div class=\"line\"><a name=\"l01905\"></a><span class=\"lineno\"> 1905</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01906\"></a><span class=\"lineno\"> 1906</span>&#160;<span class=\"comment\"># The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.</span></div>\n<div class=\"line\"><a name=\"l01907\"></a><span class=\"lineno\"> 1907</span>&#160;<span class=\"comment\"># If a relative path is entered the value of OUTPUT_DIRECTORY will be put in</span></div>\n<div class=\"line\"><a name=\"l01908\"></a><span class=\"lineno\"> 1908</span>&#160;<span class=\"comment\"># front of it.</span></div>\n<div class=\"line\"><a name=\"l01909\"></a><span class=\"lineno\"> 1909</span>&#160;<span class=\"comment\"># The default directory is: docbook.</span></div>\n<div class=\"line\"><a name=\"l01910\"></a><span class=\"lineno\"> 1910</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_DOCBOOK is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01911\"></a><span class=\"lineno\"> 1911</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01912\"></a><span class=\"lineno\"> 1912</span>&#160;<span class=\"comment\">DOCBOOK_OUTPUT         = docbook</span></div>\n<div class=\"line\"><a name=\"l01913\"></a><span class=\"lineno\"> 1913</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01914\"></a><span class=\"lineno\"> 1914</span>&#160;<span class=\"comment\"># If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the</span></div>\n<div class=\"line\"><a name=\"l01915\"></a><span class=\"lineno\"> 1915</span>&#160;<span class=\"comment\"># program listings (including syntax highlighting and cross-referencing</span></div>\n<div class=\"line\"><a name=\"l01916\"></a><span class=\"lineno\"> 1916</span>&#160;<span class=\"comment\"># information) to the DOCBOOK output. Note that enabling this will significantly</span></div>\n<div class=\"line\"><a name=\"l01917\"></a><span class=\"lineno\"> 1917</span>&#160;<span class=\"comment\"># increase the size of the DOCBOOK output.</span></div>\n<div class=\"line\"><a name=\"l01918\"></a><span class=\"lineno\"> 1918</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01919\"></a><span class=\"lineno\"> 1919</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_DOCBOOK is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01920\"></a><span class=\"lineno\"> 1920</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01921\"></a><span class=\"lineno\"> 1921</span>&#160;<span class=\"comment\">DOCBOOK_PROGRAMLISTING = NO</span></div>\n<div class=\"line\"><a name=\"l01922\"></a><span class=\"lineno\"> 1922</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01923\"></a><span class=\"lineno\"> 1923</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01924\"></a><span class=\"lineno\"> 1924</span>&#160;<span class=\"comment\"># Configuration options for the AutoGen Definitions output</span></div>\n<div class=\"line\"><a name=\"l01925\"></a><span class=\"lineno\"> 1925</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01926\"></a><span class=\"lineno\"> 1926</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01927\"></a><span class=\"lineno\"> 1927</span>&#160;<span class=\"comment\"># If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an</span></div>\n<div class=\"line\"><a name=\"l01928\"></a><span class=\"lineno\"> 1928</span>&#160;<span class=\"comment\"># AutoGen Definitions (see http://autogen.sf.net) file that captures the</span></div>\n<div class=\"line\"><a name=\"l01929\"></a><span class=\"lineno\"> 1929</span>&#160;<span class=\"comment\"># structure of the code including all documentation. Note that this feature is</span></div>\n<div class=\"line\"><a name=\"l01930\"></a><span class=\"lineno\"> 1930</span>&#160;<span class=\"comment\"># still experimental and incomplete at the moment.</span></div>\n<div class=\"line\"><a name=\"l01931\"></a><span class=\"lineno\"> 1931</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01932\"></a><span class=\"lineno\"> 1932</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01933\"></a><span class=\"lineno\"> 1933</span>&#160;<span class=\"comment\">GENERATE_AUTOGEN_DEF   = NO</span></div>\n<div class=\"line\"><a name=\"l01934\"></a><span class=\"lineno\"> 1934</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01935\"></a><span class=\"lineno\"> 1935</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01936\"></a><span class=\"lineno\"> 1936</span>&#160;<span class=\"comment\"># Configuration options related to the Perl module output</span></div>\n<div class=\"line\"><a name=\"l01937\"></a><span class=\"lineno\"> 1937</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01938\"></a><span class=\"lineno\"> 1938</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01939\"></a><span class=\"lineno\"> 1939</span>&#160;<span class=\"comment\"># If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module</span></div>\n<div class=\"line\"><a name=\"l01940\"></a><span class=\"lineno\"> 1940</span>&#160;<span class=\"comment\"># file that captures the structure of the code including all documentation.</span></div>\n<div class=\"line\"><a name=\"l01941\"></a><span class=\"lineno\"> 1941</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l01942\"></a><span class=\"lineno\"> 1942</span>&#160;<span class=\"comment\"># Note that this feature is still experimental and incomplete at the moment.</span></div>\n<div class=\"line\"><a name=\"l01943\"></a><span class=\"lineno\"> 1943</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01944\"></a><span class=\"lineno\"> 1944</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01945\"></a><span class=\"lineno\"> 1945</span>&#160;<span class=\"comment\">GENERATE_PERLMOD       = NO</span></div>\n<div class=\"line\"><a name=\"l01946\"></a><span class=\"lineno\"> 1946</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01947\"></a><span class=\"lineno\"> 1947</span>&#160;<span class=\"comment\"># If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary</span></div>\n<div class=\"line\"><a name=\"l01948\"></a><span class=\"lineno\"> 1948</span>&#160;<span class=\"comment\"># Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI</span></div>\n<div class=\"line\"><a name=\"l01949\"></a><span class=\"lineno\"> 1949</span>&#160;<span class=\"comment\"># output from the Perl module output.</span></div>\n<div class=\"line\"><a name=\"l01950\"></a><span class=\"lineno\"> 1950</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01951\"></a><span class=\"lineno\"> 1951</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_PERLMOD is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01952\"></a><span class=\"lineno\"> 1952</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01953\"></a><span class=\"lineno\"> 1953</span>&#160;<span class=\"comment\">PERLMOD_LATEX          = NO</span></div>\n<div class=\"line\"><a name=\"l01954\"></a><span class=\"lineno\"> 1954</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01955\"></a><span class=\"lineno\"> 1955</span>&#160;<span class=\"comment\"># If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely</span></div>\n<div class=\"line\"><a name=\"l01956\"></a><span class=\"lineno\"> 1956</span>&#160;<span class=\"comment\"># formatted so it can be parsed by a human reader. This is useful if you want to</span></div>\n<div class=\"line\"><a name=\"l01957\"></a><span class=\"lineno\"> 1957</span>&#160;<span class=\"comment\"># understand what is going on. On the other hand, if this tag is set to NO, the</span></div>\n<div class=\"line\"><a name=\"l01958\"></a><span class=\"lineno\"> 1958</span>&#160;<span class=\"comment\"># size of the Perl module output will be much smaller and Perl will parse it</span></div>\n<div class=\"line\"><a name=\"l01959\"></a><span class=\"lineno\"> 1959</span>&#160;<span class=\"comment\"># just the same.</span></div>\n<div class=\"line\"><a name=\"l01960\"></a><span class=\"lineno\"> 1960</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01961\"></a><span class=\"lineno\"> 1961</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_PERLMOD is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01962\"></a><span class=\"lineno\"> 1962</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01963\"></a><span class=\"lineno\"> 1963</span>&#160;<span class=\"comment\">PERLMOD_PRETTY         = YES</span></div>\n<div class=\"line\"><a name=\"l01964\"></a><span class=\"lineno\"> 1964</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01965\"></a><span class=\"lineno\"> 1965</span>&#160;<span class=\"comment\"># The names of the make variables in the generated doxyrules.make file are</span></div>\n<div class=\"line\"><a name=\"l01966\"></a><span class=\"lineno\"> 1966</span>&#160;<span class=\"comment\"># prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful</span></div>\n<div class=\"line\"><a name=\"l01967\"></a><span class=\"lineno\"> 1967</span>&#160;<span class=\"comment\"># so different doxyrules.make files included by the same Makefile don&#39;t</span></div>\n<div class=\"line\"><a name=\"l01968\"></a><span class=\"lineno\"> 1968</span>&#160;<span class=\"comment\"># overwrite each other&#39;s variables.</span></div>\n<div class=\"line\"><a name=\"l01969\"></a><span class=\"lineno\"> 1969</span>&#160;<span class=\"comment\"># This tag requires that the tag GENERATE_PERLMOD is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01970\"></a><span class=\"lineno\"> 1970</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01971\"></a><span class=\"lineno\"> 1971</span>&#160;<span class=\"comment\">PERLMOD_MAKEVAR_PREFIX = </span></div>\n<div class=\"line\"><a name=\"l01972\"></a><span class=\"lineno\"> 1972</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01973\"></a><span class=\"lineno\"> 1973</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01974\"></a><span class=\"lineno\"> 1974</span>&#160;<span class=\"comment\"># Configuration options related to the preprocessor</span></div>\n<div class=\"line\"><a name=\"l01975\"></a><span class=\"lineno\"> 1975</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l01976\"></a><span class=\"lineno\"> 1976</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01977\"></a><span class=\"lineno\"> 1977</span>&#160;<span class=\"comment\"># If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all</span></div>\n<div class=\"line\"><a name=\"l01978\"></a><span class=\"lineno\"> 1978</span>&#160;<span class=\"comment\"># C-preprocessor directives found in the sources and include files.</span></div>\n<div class=\"line\"><a name=\"l01979\"></a><span class=\"lineno\"> 1979</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l01980\"></a><span class=\"lineno\"> 1980</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01981\"></a><span class=\"lineno\"> 1981</span>&#160;<span class=\"comment\">ENABLE_PREPROCESSING   = YES</span></div>\n<div class=\"line\"><a name=\"l01982\"></a><span class=\"lineno\"> 1982</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01983\"></a><span class=\"lineno\"> 1983</span>&#160;<span class=\"comment\"># If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names</span></div>\n<div class=\"line\"><a name=\"l01984\"></a><span class=\"lineno\"> 1984</span>&#160;<span class=\"comment\"># in the source code. If set to NO, only conditional compilation will be</span></div>\n<div class=\"line\"><a name=\"l01985\"></a><span class=\"lineno\"> 1985</span>&#160;<span class=\"comment\"># performed. Macro expansion can be done in a controlled way by setting</span></div>\n<div class=\"line\"><a name=\"l01986\"></a><span class=\"lineno\"> 1986</span>&#160;<span class=\"comment\"># EXPAND_ONLY_PREDEF to YES.</span></div>\n<div class=\"line\"><a name=\"l01987\"></a><span class=\"lineno\"> 1987</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01988\"></a><span class=\"lineno\"> 1988</span>&#160;<span class=\"comment\"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01989\"></a><span class=\"lineno\"> 1989</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01990\"></a><span class=\"lineno\"> 1990</span>&#160;<span class=\"comment\">MACRO_EXPANSION        = NO</span></div>\n<div class=\"line\"><a name=\"l01991\"></a><span class=\"lineno\"> 1991</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01992\"></a><span class=\"lineno\"> 1992</span>&#160;<span class=\"comment\"># If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then</span></div>\n<div class=\"line\"><a name=\"l01993\"></a><span class=\"lineno\"> 1993</span>&#160;<span class=\"comment\"># the macro expansion is limited to the macros specified with the PREDEFINED and</span></div>\n<div class=\"line\"><a name=\"l01994\"></a><span class=\"lineno\"> 1994</span>&#160;<span class=\"comment\"># EXPAND_AS_DEFINED tags.</span></div>\n<div class=\"line\"><a name=\"l01995\"></a><span class=\"lineno\"> 1995</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l01996\"></a><span class=\"lineno\"> 1996</span>&#160;<span class=\"comment\"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>\n<div class=\"line\"><a name=\"l01997\"></a><span class=\"lineno\"> 1997</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l01998\"></a><span class=\"lineno\"> 1998</span>&#160;<span class=\"comment\">EXPAND_ONLY_PREDEF     = NO</span></div>\n<div class=\"line\"><a name=\"l01999\"></a><span class=\"lineno\"> 1999</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02000\"></a><span class=\"lineno\"> 2000</span>&#160;<span class=\"comment\"># If the SEARCH_INCLUDES tag is set to YES, the include files in the</span></div>\n<div class=\"line\"><a name=\"l02001\"></a><span class=\"lineno\"> 2001</span>&#160;<span class=\"comment\"># INCLUDE_PATH will be searched if a #include is found.</span></div>\n<div class=\"line\"><a name=\"l02002\"></a><span class=\"lineno\"> 2002</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02003\"></a><span class=\"lineno\"> 2003</span>&#160;<span class=\"comment\"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02004\"></a><span class=\"lineno\"> 2004</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02005\"></a><span class=\"lineno\"> 2005</span>&#160;<span class=\"comment\">SEARCH_INCLUDES        = YES</span></div>\n<div class=\"line\"><a name=\"l02006\"></a><span class=\"lineno\"> 2006</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02007\"></a><span class=\"lineno\"> 2007</span>&#160;<span class=\"comment\"># The INCLUDE_PATH tag can be used to specify one or more directories that</span></div>\n<div class=\"line\"><a name=\"l02008\"></a><span class=\"lineno\"> 2008</span>&#160;<span class=\"comment\"># contain include files that are not input files but should be processed by the</span></div>\n<div class=\"line\"><a name=\"l02009\"></a><span class=\"lineno\"> 2009</span>&#160;<span class=\"comment\"># preprocessor.</span></div>\n<div class=\"line\"><a name=\"l02010\"></a><span class=\"lineno\"> 2010</span>&#160;<span class=\"comment\"># This tag requires that the tag SEARCH_INCLUDES is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02011\"></a><span class=\"lineno\"> 2011</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02012\"></a><span class=\"lineno\"> 2012</span>&#160;<span class=\"comment\">INCLUDE_PATH           = </span></div>\n<div class=\"line\"><a name=\"l02013\"></a><span class=\"lineno\"> 2013</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02014\"></a><span class=\"lineno\"> 2014</span>&#160;<span class=\"comment\"># You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard</span></div>\n<div class=\"line\"><a name=\"l02015\"></a><span class=\"lineno\"> 2015</span>&#160;<span class=\"comment\"># patterns (like *.h and *.hpp) to filter out the header-files in the</span></div>\n<div class=\"line\"><a name=\"l02016\"></a><span class=\"lineno\"> 2016</span>&#160;<span class=\"comment\"># directories. If left blank, the patterns specified with FILE_PATTERNS will be</span></div>\n<div class=\"line\"><a name=\"l02017\"></a><span class=\"lineno\"> 2017</span>&#160;<span class=\"comment\"># used.</span></div>\n<div class=\"line\"><a name=\"l02018\"></a><span class=\"lineno\"> 2018</span>&#160;<span class=\"comment\"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02019\"></a><span class=\"lineno\"> 2019</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02020\"></a><span class=\"lineno\"> 2020</span>&#160;<span class=\"comment\">INCLUDE_FILE_PATTERNS  = </span></div>\n<div class=\"line\"><a name=\"l02021\"></a><span class=\"lineno\"> 2021</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02022\"></a><span class=\"lineno\"> 2022</span>&#160;<span class=\"comment\"># The PREDEFINED tag can be used to specify one or more macro names that are</span></div>\n<div class=\"line\"><a name=\"l02023\"></a><span class=\"lineno\"> 2023</span>&#160;<span class=\"comment\"># defined before the preprocessor is started (similar to the -D option of e.g.</span></div>\n<div class=\"line\"><a name=\"l02024\"></a><span class=\"lineno\"> 2024</span>&#160;<span class=\"comment\"># gcc). The argument of the tag is a list of macros of the form: name or</span></div>\n<div class=\"line\"><a name=\"l02025\"></a><span class=\"lineno\"> 2025</span>&#160;<span class=\"comment\"># name=definition (no spaces). If the definition and the &quot;=&quot; are omitted, &quot;=1&quot;</span></div>\n<div class=\"line\"><a name=\"l02026\"></a><span class=\"lineno\"> 2026</span>&#160;<span class=\"comment\"># is assumed. To prevent a macro definition from being undefined via #undef or</span></div>\n<div class=\"line\"><a name=\"l02027\"></a><span class=\"lineno\"> 2027</span>&#160;<span class=\"comment\"># recursively expanded use the := operator instead of the = operator.</span></div>\n<div class=\"line\"><a name=\"l02028\"></a><span class=\"lineno\"> 2028</span>&#160;<span class=\"comment\"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02029\"></a><span class=\"lineno\"> 2029</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02030\"></a><span class=\"lineno\"> 2030</span>&#160;<span class=\"comment\">PREDEFINED             = </span></div>\n<div class=\"line\"><a name=\"l02031\"></a><span class=\"lineno\"> 2031</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02032\"></a><span class=\"lineno\"> 2032</span>&#160;<span class=\"comment\"># If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this</span></div>\n<div class=\"line\"><a name=\"l02033\"></a><span class=\"lineno\"> 2033</span>&#160;<span class=\"comment\"># tag can be used to specify a list of macro names that should be expanded. The</span></div>\n<div class=\"line\"><a name=\"l02034\"></a><span class=\"lineno\"> 2034</span>&#160;<span class=\"comment\"># macro definition that is found in the sources will be used. Use the PREDEFINED</span></div>\n<div class=\"line\"><a name=\"l02035\"></a><span class=\"lineno\"> 2035</span>&#160;<span class=\"comment\"># tag if you want to use a different macro definition that overrules the</span></div>\n<div class=\"line\"><a name=\"l02036\"></a><span class=\"lineno\"> 2036</span>&#160;<span class=\"comment\"># definition found in the source code.</span></div>\n<div class=\"line\"><a name=\"l02037\"></a><span class=\"lineno\"> 2037</span>&#160;<span class=\"comment\"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02038\"></a><span class=\"lineno\"> 2038</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02039\"></a><span class=\"lineno\"> 2039</span>&#160;<span class=\"comment\">EXPAND_AS_DEFINED      = </span></div>\n<div class=\"line\"><a name=\"l02040\"></a><span class=\"lineno\"> 2040</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02041\"></a><span class=\"lineno\"> 2041</span>&#160;<span class=\"comment\"># If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen&#39;s preprocessor will</span></div>\n<div class=\"line\"><a name=\"l02042\"></a><span class=\"lineno\"> 2042</span>&#160;<span class=\"comment\"># remove all references to function-like macros that are alone on a line, have</span></div>\n<div class=\"line\"><a name=\"l02043\"></a><span class=\"lineno\"> 2043</span>&#160;<span class=\"comment\"># an all uppercase name, and do not end with a semicolon. Such function macros</span></div>\n<div class=\"line\"><a name=\"l02044\"></a><span class=\"lineno\"> 2044</span>&#160;<span class=\"comment\"># are typically used for boiler-plate code, and will confuse the parser if not</span></div>\n<div class=\"line\"><a name=\"l02045\"></a><span class=\"lineno\"> 2045</span>&#160;<span class=\"comment\"># removed.</span></div>\n<div class=\"line\"><a name=\"l02046\"></a><span class=\"lineno\"> 2046</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02047\"></a><span class=\"lineno\"> 2047</span>&#160;<span class=\"comment\"># This tag requires that the tag ENABLE_PREPROCESSING is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02048\"></a><span class=\"lineno\"> 2048</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02049\"></a><span class=\"lineno\"> 2049</span>&#160;<span class=\"comment\">SKIP_FUNCTION_MACROS   = YES</span></div>\n<div class=\"line\"><a name=\"l02050\"></a><span class=\"lineno\"> 2050</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02051\"></a><span class=\"lineno\"> 2051</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l02052\"></a><span class=\"lineno\"> 2052</span>&#160;<span class=\"comment\"># Configuration options related to external references</span></div>\n<div class=\"line\"><a name=\"l02053\"></a><span class=\"lineno\"> 2053</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l02054\"></a><span class=\"lineno\"> 2054</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02055\"></a><span class=\"lineno\"> 2055</span>&#160;<span class=\"comment\"># The TAGFILES tag can be used to specify one or more tag files. For each tag</span></div>\n<div class=\"line\"><a name=\"l02056\"></a><span class=\"lineno\"> 2056</span>&#160;<span class=\"comment\"># file the location of the external documentation should be added. The format of</span></div>\n<div class=\"line\"><a name=\"l02057\"></a><span class=\"lineno\"> 2057</span>&#160;<span class=\"comment\"># a tag file without this location is as follows:</span></div>\n<div class=\"line\"><a name=\"l02058\"></a><span class=\"lineno\"> 2058</span>&#160;<span class=\"comment\"># TAGFILES = file1 file2 ...</span></div>\n<div class=\"line\"><a name=\"l02059\"></a><span class=\"lineno\"> 2059</span>&#160;<span class=\"comment\"># Adding location for the tag files is done as follows:</span></div>\n<div class=\"line\"><a name=\"l02060\"></a><span class=\"lineno\"> 2060</span>&#160;<span class=\"comment\"># TAGFILES = file1=loc1 &quot;file2 = loc2&quot; ...</span></div>\n<div class=\"line\"><a name=\"l02061\"></a><span class=\"lineno\"> 2061</span>&#160;<span class=\"comment\"># where loc1 and loc2 can be relative or absolute paths or URLs. See the</span></div>\n<div class=\"line\"><a name=\"l02062\"></a><span class=\"lineno\"> 2062</span>&#160;<span class=\"comment\"># section &quot;Linking to external documentation&quot; for more information about the use</span></div>\n<div class=\"line\"><a name=\"l02063\"></a><span class=\"lineno\"> 2063</span>&#160;<span class=\"comment\"># of tag files.</span></div>\n<div class=\"line\"><a name=\"l02064\"></a><span class=\"lineno\"> 2064</span>&#160;<span class=\"comment\"># Note: Each tag file must have a unique name (where the name does NOT include</span></div>\n<div class=\"line\"><a name=\"l02065\"></a><span class=\"lineno\"> 2065</span>&#160;<span class=\"comment\"># the path). If a tag file is not located in the directory in which doxygen is</span></div>\n<div class=\"line\"><a name=\"l02066\"></a><span class=\"lineno\"> 2066</span>&#160;<span class=\"comment\"># run, you must also specify the path to the tagfile here.</span></div>\n<div class=\"line\"><a name=\"l02067\"></a><span class=\"lineno\"> 2067</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02068\"></a><span class=\"lineno\"> 2068</span>&#160;<span class=\"comment\">TAGFILES               = </span></div>\n<div class=\"line\"><a name=\"l02069\"></a><span class=\"lineno\"> 2069</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02070\"></a><span class=\"lineno\"> 2070</span>&#160;<span class=\"comment\"># When a file name is specified after GENERATE_TAGFILE, doxygen will create a</span></div>\n<div class=\"line\"><a name=\"l02071\"></a><span class=\"lineno\"> 2071</span>&#160;<span class=\"comment\"># tag file that is based on the input files it reads. See section &quot;Linking to</span></div>\n<div class=\"line\"><a name=\"l02072\"></a><span class=\"lineno\"> 2072</span>&#160;<span class=\"comment\"># external documentation&quot; for more information about the usage of tag files.</span></div>\n<div class=\"line\"><a name=\"l02073\"></a><span class=\"lineno\"> 2073</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02074\"></a><span class=\"lineno\"> 2074</span>&#160;<span class=\"comment\">GENERATE_TAGFILE       = </span></div>\n<div class=\"line\"><a name=\"l02075\"></a><span class=\"lineno\"> 2075</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02076\"></a><span class=\"lineno\"> 2076</span>&#160;<span class=\"comment\"># If the ALLEXTERNALS tag is set to YES, all external class will be listed in</span></div>\n<div class=\"line\"><a name=\"l02077\"></a><span class=\"lineno\"> 2077</span>&#160;<span class=\"comment\"># the class index. If set to NO, only the inherited external classes will be</span></div>\n<div class=\"line\"><a name=\"l02078\"></a><span class=\"lineno\"> 2078</span>&#160;<span class=\"comment\"># listed.</span></div>\n<div class=\"line\"><a name=\"l02079\"></a><span class=\"lineno\"> 2079</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02080\"></a><span class=\"lineno\"> 2080</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02081\"></a><span class=\"lineno\"> 2081</span>&#160;<span class=\"comment\">ALLEXTERNALS           = NO</span></div>\n<div class=\"line\"><a name=\"l02082\"></a><span class=\"lineno\"> 2082</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02083\"></a><span class=\"lineno\"> 2083</span>&#160;<span class=\"comment\"># If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed</span></div>\n<div class=\"line\"><a name=\"l02084\"></a><span class=\"lineno\"> 2084</span>&#160;<span class=\"comment\"># in the modules index. If set to NO, only the current project&#39;s groups will be</span></div>\n<div class=\"line\"><a name=\"l02085\"></a><span class=\"lineno\"> 2085</span>&#160;<span class=\"comment\"># listed.</span></div>\n<div class=\"line\"><a name=\"l02086\"></a><span class=\"lineno\"> 2086</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02087\"></a><span class=\"lineno\"> 2087</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02088\"></a><span class=\"lineno\"> 2088</span>&#160;<span class=\"comment\">EXTERNAL_GROUPS        = YES</span></div>\n<div class=\"line\"><a name=\"l02089\"></a><span class=\"lineno\"> 2089</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02090\"></a><span class=\"lineno\"> 2090</span>&#160;<span class=\"comment\"># If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in</span></div>\n<div class=\"line\"><a name=\"l02091\"></a><span class=\"lineno\"> 2091</span>&#160;<span class=\"comment\"># the related pages index. If set to NO, only the current project&#39;s pages will</span></div>\n<div class=\"line\"><a name=\"l02092\"></a><span class=\"lineno\"> 2092</span>&#160;<span class=\"comment\"># be listed.</span></div>\n<div class=\"line\"><a name=\"l02093\"></a><span class=\"lineno\"> 2093</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02094\"></a><span class=\"lineno\"> 2094</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02095\"></a><span class=\"lineno\"> 2095</span>&#160;<span class=\"comment\">EXTERNAL_PAGES         = YES</span></div>\n<div class=\"line\"><a name=\"l02096\"></a><span class=\"lineno\"> 2096</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02097\"></a><span class=\"lineno\"> 2097</span>&#160;<span class=\"comment\"># The PERL_PATH should be the absolute path and name of the perl script</span></div>\n<div class=\"line\"><a name=\"l02098\"></a><span class=\"lineno\"> 2098</span>&#160;<span class=\"comment\"># interpreter (i.e. the result of &#39;which perl&#39;).</span></div>\n<div class=\"line\"><a name=\"l02099\"></a><span class=\"lineno\"> 2099</span>&#160;<span class=\"comment\"># The default file (with absolute path) is: /usr/bin/perl.</span></div>\n<div class=\"line\"><a name=\"l02100\"></a><span class=\"lineno\"> 2100</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02101\"></a><span class=\"lineno\"> 2101</span>&#160;<span class=\"comment\">PERL_PATH              = /usr/bin/perl</span></div>\n<div class=\"line\"><a name=\"l02102\"></a><span class=\"lineno\"> 2102</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02103\"></a><span class=\"lineno\"> 2103</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l02104\"></a><span class=\"lineno\"> 2104</span>&#160;<span class=\"comment\"># Configuration options related to the dot tool</span></div>\n<div class=\"line\"><a name=\"l02105\"></a><span class=\"lineno\"> 2105</span>&#160;<span class=\"comment\">#---------------------------------------------------------------------------</span></div>\n<div class=\"line\"><a name=\"l02106\"></a><span class=\"lineno\"> 2106</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02107\"></a><span class=\"lineno\"> 2107</span>&#160;<span class=\"comment\"># If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram</span></div>\n<div class=\"line\"><a name=\"l02108\"></a><span class=\"lineno\"> 2108</span>&#160;<span class=\"comment\"># (in HTML and LaTeX) for classes with base or super classes. Setting the tag to</span></div>\n<div class=\"line\"><a name=\"l02109\"></a><span class=\"lineno\"> 2109</span>&#160;<span class=\"comment\"># NO turns the diagrams off. Note that this option also works with HAVE_DOT</span></div>\n<div class=\"line\"><a name=\"l02110\"></a><span class=\"lineno\"> 2110</span>&#160;<span class=\"comment\"># disabled, but it is recommended to install and use dot, since it yields more</span></div>\n<div class=\"line\"><a name=\"l02111\"></a><span class=\"lineno\"> 2111</span>&#160;<span class=\"comment\"># powerful graphs.</span></div>\n<div class=\"line\"><a name=\"l02112\"></a><span class=\"lineno\"> 2112</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02113\"></a><span class=\"lineno\"> 2113</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02114\"></a><span class=\"lineno\"> 2114</span>&#160;<span class=\"comment\">CLASS_DIAGRAMS         = YES</span></div>\n<div class=\"line\"><a name=\"l02115\"></a><span class=\"lineno\"> 2115</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02116\"></a><span class=\"lineno\"> 2116</span>&#160;<span class=\"comment\"># You can define message sequence charts within doxygen comments using the \\msc</span></div>\n<div class=\"line\"><a name=\"l02117\"></a><span class=\"lineno\"> 2117</span>&#160;<span class=\"comment\"># command. Doxygen will then run the mscgen tool (see:</span></div>\n<div class=\"line\"><a name=\"l02118\"></a><span class=\"lineno\"> 2118</span>&#160;<span class=\"comment\"># http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the</span></div>\n<div class=\"line\"><a name=\"l02119\"></a><span class=\"lineno\"> 2119</span>&#160;<span class=\"comment\"># documentation. The MSCGEN_PATH tag allows you to specify the directory where</span></div>\n<div class=\"line\"><a name=\"l02120\"></a><span class=\"lineno\"> 2120</span>&#160;<span class=\"comment\"># the mscgen tool resides. If left empty the tool is assumed to be found in the</span></div>\n<div class=\"line\"><a name=\"l02121\"></a><span class=\"lineno\"> 2121</span>&#160;<span class=\"comment\"># default search path.</span></div>\n<div class=\"line\"><a name=\"l02122\"></a><span class=\"lineno\"> 2122</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02123\"></a><span class=\"lineno\"> 2123</span>&#160;<span class=\"comment\">MSCGEN_PATH            = </span></div>\n<div class=\"line\"><a name=\"l02124\"></a><span class=\"lineno\"> 2124</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02125\"></a><span class=\"lineno\"> 2125</span>&#160;<span class=\"comment\"># You can include diagrams made with dia in doxygen documentation. Doxygen will</span></div>\n<div class=\"line\"><a name=\"l02126\"></a><span class=\"lineno\"> 2126</span>&#160;<span class=\"comment\"># then run dia to produce the diagram and insert it in the documentation. The</span></div>\n<div class=\"line\"><a name=\"l02127\"></a><span class=\"lineno\"> 2127</span>&#160;<span class=\"comment\"># DIA_PATH tag allows you to specify the directory where the dia binary resides.</span></div>\n<div class=\"line\"><a name=\"l02128\"></a><span class=\"lineno\"> 2128</span>&#160;<span class=\"comment\"># If left empty dia is assumed to be found in the default search path.</span></div>\n<div class=\"line\"><a name=\"l02129\"></a><span class=\"lineno\"> 2129</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02130\"></a><span class=\"lineno\"> 2130</span>&#160;<span class=\"comment\">DIA_PATH               = </span></div>\n<div class=\"line\"><a name=\"l02131\"></a><span class=\"lineno\"> 2131</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02132\"></a><span class=\"lineno\"> 2132</span>&#160;<span class=\"comment\"># If set to YES the inheritance and collaboration graphs will hide inheritance</span></div>\n<div class=\"line\"><a name=\"l02133\"></a><span class=\"lineno\"> 2133</span>&#160;<span class=\"comment\"># and usage relations if the target is undocumented or is not a class.</span></div>\n<div class=\"line\"><a name=\"l02134\"></a><span class=\"lineno\"> 2134</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02135\"></a><span class=\"lineno\"> 2135</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02136\"></a><span class=\"lineno\"> 2136</span>&#160;<span class=\"comment\">HIDE_UNDOC_RELATIONS   = YES</span></div>\n<div class=\"line\"><a name=\"l02137\"></a><span class=\"lineno\"> 2137</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02138\"></a><span class=\"lineno\"> 2138</span>&#160;<span class=\"comment\"># If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is</span></div>\n<div class=\"line\"><a name=\"l02139\"></a><span class=\"lineno\"> 2139</span>&#160;<span class=\"comment\"># available from the path. This tool is part of Graphviz (see:</span></div>\n<div class=\"line\"><a name=\"l02140\"></a><span class=\"lineno\"> 2140</span>&#160;<span class=\"comment\"># http://www.graphviz.org/), a graph visualization toolkit from AT&amp;T and Lucent</span></div>\n<div class=\"line\"><a name=\"l02141\"></a><span class=\"lineno\"> 2141</span>&#160;<span class=\"comment\"># Bell Labs. The other options in this section have no effect if this option is</span></div>\n<div class=\"line\"><a name=\"l02142\"></a><span class=\"lineno\"> 2142</span>&#160;<span class=\"comment\"># set to NO</span></div>\n<div class=\"line\"><a name=\"l02143\"></a><span class=\"lineno\"> 2143</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02144\"></a><span class=\"lineno\"> 2144</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02145\"></a><span class=\"lineno\"> 2145</span>&#160;<span class=\"comment\">HAVE_DOT               = NO</span></div>\n<div class=\"line\"><a name=\"l02146\"></a><span class=\"lineno\"> 2146</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02147\"></a><span class=\"lineno\"> 2147</span>&#160;<span class=\"comment\"># The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed</span></div>\n<div class=\"line\"><a name=\"l02148\"></a><span class=\"lineno\"> 2148</span>&#160;<span class=\"comment\"># to run in parallel. When set to 0 doxygen will base this on the number of</span></div>\n<div class=\"line\"><a name=\"l02149\"></a><span class=\"lineno\"> 2149</span>&#160;<span class=\"comment\"># processors available in the system. You can set it explicitly to a value</span></div>\n<div class=\"line\"><a name=\"l02150\"></a><span class=\"lineno\"> 2150</span>&#160;<span class=\"comment\"># larger than 0 to get control over the balance between CPU load and processing</span></div>\n<div class=\"line\"><a name=\"l02151\"></a><span class=\"lineno\"> 2151</span>&#160;<span class=\"comment\"># speed.</span></div>\n<div class=\"line\"><a name=\"l02152\"></a><span class=\"lineno\"> 2152</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 32, default value: 0.</span></div>\n<div class=\"line\"><a name=\"l02153\"></a><span class=\"lineno\"> 2153</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02154\"></a><span class=\"lineno\"> 2154</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02155\"></a><span class=\"lineno\"> 2155</span>&#160;<span class=\"comment\">DOT_NUM_THREADS        = 0</span></div>\n<div class=\"line\"><a name=\"l02156\"></a><span class=\"lineno\"> 2156</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02157\"></a><span class=\"lineno\"> 2157</span>&#160;<span class=\"comment\"># When you want a differently looking font in the dot files that doxygen</span></div>\n<div class=\"line\"><a name=\"l02158\"></a><span class=\"lineno\"> 2158</span>&#160;<span class=\"comment\"># generates you can specify the font name using DOT_FONTNAME. You need to make</span></div>\n<div class=\"line\"><a name=\"l02159\"></a><span class=\"lineno\"> 2159</span>&#160;<span class=\"comment\"># sure dot is able to find the font, which can be done by putting it in a</span></div>\n<div class=\"line\"><a name=\"l02160\"></a><span class=\"lineno\"> 2160</span>&#160;<span class=\"comment\"># standard location or by setting the DOTFONTPATH environment variable or by</span></div>\n<div class=\"line\"><a name=\"l02161\"></a><span class=\"lineno\"> 2161</span>&#160;<span class=\"comment\"># setting DOT_FONTPATH to the directory containing the font.</span></div>\n<div class=\"line\"><a name=\"l02162\"></a><span class=\"lineno\"> 2162</span>&#160;<span class=\"comment\"># The default value is: Helvetica.</span></div>\n<div class=\"line\"><a name=\"l02163\"></a><span class=\"lineno\"> 2163</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02164\"></a><span class=\"lineno\"> 2164</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02165\"></a><span class=\"lineno\"> 2165</span>&#160;<span class=\"comment\">DOT_FONTNAME           = Helvetica</span></div>\n<div class=\"line\"><a name=\"l02166\"></a><span class=\"lineno\"> 2166</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02167\"></a><span class=\"lineno\"> 2167</span>&#160;<span class=\"comment\"># The DOT_FONTSIZE tag can be used to set the size (in points) of the font of</span></div>\n<div class=\"line\"><a name=\"l02168\"></a><span class=\"lineno\"> 2168</span>&#160;<span class=\"comment\"># dot graphs.</span></div>\n<div class=\"line\"><a name=\"l02169\"></a><span class=\"lineno\"> 2169</span>&#160;<span class=\"comment\"># Minimum value: 4, maximum value: 24, default value: 10.</span></div>\n<div class=\"line\"><a name=\"l02170\"></a><span class=\"lineno\"> 2170</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02171\"></a><span class=\"lineno\"> 2171</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02172\"></a><span class=\"lineno\"> 2172</span>&#160;<span class=\"comment\">DOT_FONTSIZE           = 10</span></div>\n<div class=\"line\"><a name=\"l02173\"></a><span class=\"lineno\"> 2173</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02174\"></a><span class=\"lineno\"> 2174</span>&#160;<span class=\"comment\"># By default doxygen will tell dot to use the default font as specified with</span></div>\n<div class=\"line\"><a name=\"l02175\"></a><span class=\"lineno\"> 2175</span>&#160;<span class=\"comment\"># DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set</span></div>\n<div class=\"line\"><a name=\"l02176\"></a><span class=\"lineno\"> 2176</span>&#160;<span class=\"comment\"># the path where dot can find it using this tag.</span></div>\n<div class=\"line\"><a name=\"l02177\"></a><span class=\"lineno\"> 2177</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02178\"></a><span class=\"lineno\"> 2178</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02179\"></a><span class=\"lineno\"> 2179</span>&#160;<span class=\"comment\">DOT_FONTPATH           = </span></div>\n<div class=\"line\"><a name=\"l02180\"></a><span class=\"lineno\"> 2180</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02181\"></a><span class=\"lineno\"> 2181</span>&#160;<span class=\"comment\"># If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for</span></div>\n<div class=\"line\"><a name=\"l02182\"></a><span class=\"lineno\"> 2182</span>&#160;<span class=\"comment\"># each documented class showing the direct and indirect inheritance relations.</span></div>\n<div class=\"line\"><a name=\"l02183\"></a><span class=\"lineno\"> 2183</span>&#160;<span class=\"comment\"># Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.</span></div>\n<div class=\"line\"><a name=\"l02184\"></a><span class=\"lineno\"> 2184</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02185\"></a><span class=\"lineno\"> 2185</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02186\"></a><span class=\"lineno\"> 2186</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02187\"></a><span class=\"lineno\"> 2187</span>&#160;<span class=\"comment\">CLASS_GRAPH            = YES</span></div>\n<div class=\"line\"><a name=\"l02188\"></a><span class=\"lineno\"> 2188</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02189\"></a><span class=\"lineno\"> 2189</span>&#160;<span class=\"comment\"># If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a</span></div>\n<div class=\"line\"><a name=\"l02190\"></a><span class=\"lineno\"> 2190</span>&#160;<span class=\"comment\"># graph for each documented class showing the direct and indirect implementation</span></div>\n<div class=\"line\"><a name=\"l02191\"></a><span class=\"lineno\"> 2191</span>&#160;<span class=\"comment\"># dependencies (inheritance, containment, and class references variables) of the</span></div>\n<div class=\"line\"><a name=\"l02192\"></a><span class=\"lineno\"> 2192</span>&#160;<span class=\"comment\"># class with other documented classes.</span></div>\n<div class=\"line\"><a name=\"l02193\"></a><span class=\"lineno\"> 2193</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02194\"></a><span class=\"lineno\"> 2194</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02195\"></a><span class=\"lineno\"> 2195</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02196\"></a><span class=\"lineno\"> 2196</span>&#160;<span class=\"comment\">COLLABORATION_GRAPH    = YES</span></div>\n<div class=\"line\"><a name=\"l02197\"></a><span class=\"lineno\"> 2197</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02198\"></a><span class=\"lineno\"> 2198</span>&#160;<span class=\"comment\"># If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for</span></div>\n<div class=\"line\"><a name=\"l02199\"></a><span class=\"lineno\"> 2199</span>&#160;<span class=\"comment\"># groups, showing the direct groups dependencies.</span></div>\n<div class=\"line\"><a name=\"l02200\"></a><span class=\"lineno\"> 2200</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02201\"></a><span class=\"lineno\"> 2201</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02202\"></a><span class=\"lineno\"> 2202</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02203\"></a><span class=\"lineno\"> 2203</span>&#160;<span class=\"comment\">GROUP_GRAPHS           = YES</span></div>\n<div class=\"line\"><a name=\"l02204\"></a><span class=\"lineno\"> 2204</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02205\"></a><span class=\"lineno\"> 2205</span>&#160;<span class=\"comment\"># If the UML_LOOK tag is set to YES, doxygen will generate inheritance and</span></div>\n<div class=\"line\"><a name=\"l02206\"></a><span class=\"lineno\"> 2206</span>&#160;<span class=\"comment\"># collaboration diagrams in a style similar to the OMG&#39;s Unified Modeling</span></div>\n<div class=\"line\"><a name=\"l02207\"></a><span class=\"lineno\"> 2207</span>&#160;<span class=\"comment\"># Language.</span></div>\n<div class=\"line\"><a name=\"l02208\"></a><span class=\"lineno\"> 2208</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02209\"></a><span class=\"lineno\"> 2209</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02210\"></a><span class=\"lineno\"> 2210</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02211\"></a><span class=\"lineno\"> 2211</span>&#160;<span class=\"comment\">UML_LOOK               = NO</span></div>\n<div class=\"line\"><a name=\"l02212\"></a><span class=\"lineno\"> 2212</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02213\"></a><span class=\"lineno\"> 2213</span>&#160;<span class=\"comment\"># If the UML_LOOK tag is enabled, the fields and methods are shown inside the</span></div>\n<div class=\"line\"><a name=\"l02214\"></a><span class=\"lineno\"> 2214</span>&#160;<span class=\"comment\"># class node. If there are many fields or methods and many nodes the graph may</span></div>\n<div class=\"line\"><a name=\"l02215\"></a><span class=\"lineno\"> 2215</span>&#160;<span class=\"comment\"># become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the</span></div>\n<div class=\"line\"><a name=\"l02216\"></a><span class=\"lineno\"> 2216</span>&#160;<span class=\"comment\"># number of items for each type to make the size more manageable. Set this to 0</span></div>\n<div class=\"line\"><a name=\"l02217\"></a><span class=\"lineno\"> 2217</span>&#160;<span class=\"comment\"># for no limit. Note that the threshold may be exceeded by 50% before the limit</span></div>\n<div class=\"line\"><a name=\"l02218\"></a><span class=\"lineno\"> 2218</span>&#160;<span class=\"comment\"># is enforced. So when you set the threshold to 10, up to 15 fields may appear,</span></div>\n<div class=\"line\"><a name=\"l02219\"></a><span class=\"lineno\"> 2219</span>&#160;<span class=\"comment\"># but if the number exceeds 15, the total amount of fields shown is limited to</span></div>\n<div class=\"line\"><a name=\"l02220\"></a><span class=\"lineno\"> 2220</span>&#160;<span class=\"comment\"># 10.</span></div>\n<div class=\"line\"><a name=\"l02221\"></a><span class=\"lineno\"> 2221</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 100, default value: 10.</span></div>\n<div class=\"line\"><a name=\"l02222\"></a><span class=\"lineno\"> 2222</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02223\"></a><span class=\"lineno\"> 2223</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02224\"></a><span class=\"lineno\"> 2224</span>&#160;<span class=\"comment\">UML_LIMIT_NUM_FIELDS   = 10</span></div>\n<div class=\"line\"><a name=\"l02225\"></a><span class=\"lineno\"> 2225</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02226\"></a><span class=\"lineno\"> 2226</span>&#160;<span class=\"comment\"># If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and</span></div>\n<div class=\"line\"><a name=\"l02227\"></a><span class=\"lineno\"> 2227</span>&#160;<span class=\"comment\"># collaboration graphs will show the relations between templates and their</span></div>\n<div class=\"line\"><a name=\"l02228\"></a><span class=\"lineno\"> 2228</span>&#160;<span class=\"comment\"># instances.</span></div>\n<div class=\"line\"><a name=\"l02229\"></a><span class=\"lineno\"> 2229</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02230\"></a><span class=\"lineno\"> 2230</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02231\"></a><span class=\"lineno\"> 2231</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02232\"></a><span class=\"lineno\"> 2232</span>&#160;<span class=\"comment\">TEMPLATE_RELATIONS     = NO</span></div>\n<div class=\"line\"><a name=\"l02233\"></a><span class=\"lineno\"> 2233</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02234\"></a><span class=\"lineno\"> 2234</span>&#160;<span class=\"comment\"># If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to</span></div>\n<div class=\"line\"><a name=\"l02235\"></a><span class=\"lineno\"> 2235</span>&#160;<span class=\"comment\"># YES then doxygen will generate a graph for each documented file showing the</span></div>\n<div class=\"line\"><a name=\"l02236\"></a><span class=\"lineno\"> 2236</span>&#160;<span class=\"comment\"># direct and indirect include dependencies of the file with other documented</span></div>\n<div class=\"line\"><a name=\"l02237\"></a><span class=\"lineno\"> 2237</span>&#160;<span class=\"comment\"># files.</span></div>\n<div class=\"line\"><a name=\"l02238\"></a><span class=\"lineno\"> 2238</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02239\"></a><span class=\"lineno\"> 2239</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02240\"></a><span class=\"lineno\"> 2240</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02241\"></a><span class=\"lineno\"> 2241</span>&#160;<span class=\"comment\">INCLUDE_GRAPH          = YES</span></div>\n<div class=\"line\"><a name=\"l02242\"></a><span class=\"lineno\"> 2242</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02243\"></a><span class=\"lineno\"> 2243</span>&#160;<span class=\"comment\"># If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are</span></div>\n<div class=\"line\"><a name=\"l02244\"></a><span class=\"lineno\"> 2244</span>&#160;<span class=\"comment\"># set to YES then doxygen will generate a graph for each documented file showing</span></div>\n<div class=\"line\"><a name=\"l02245\"></a><span class=\"lineno\"> 2245</span>&#160;<span class=\"comment\"># the direct and indirect include dependencies of the file with other documented</span></div>\n<div class=\"line\"><a name=\"l02246\"></a><span class=\"lineno\"> 2246</span>&#160;<span class=\"comment\"># files.</span></div>\n<div class=\"line\"><a name=\"l02247\"></a><span class=\"lineno\"> 2247</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02248\"></a><span class=\"lineno\"> 2248</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02249\"></a><span class=\"lineno\"> 2249</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02250\"></a><span class=\"lineno\"> 2250</span>&#160;<span class=\"comment\">INCLUDED_BY_GRAPH      = YES</span></div>\n<div class=\"line\"><a name=\"l02251\"></a><span class=\"lineno\"> 2251</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02252\"></a><span class=\"lineno\"> 2252</span>&#160;<span class=\"comment\"># If the CALL_GRAPH tag is set to YES then doxygen will generate a call</span></div>\n<div class=\"line\"><a name=\"l02253\"></a><span class=\"lineno\"> 2253</span>&#160;<span class=\"comment\"># dependency graph for every global function or class method.</span></div>\n<div class=\"line\"><a name=\"l02254\"></a><span class=\"lineno\"> 2254</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l02255\"></a><span class=\"lineno\"> 2255</span>&#160;<span class=\"comment\"># Note that enabling this option will significantly increase the time of a run.</span></div>\n<div class=\"line\"><a name=\"l02256\"></a><span class=\"lineno\"> 2256</span>&#160;<span class=\"comment\"># So in most cases it will be better to enable call graphs for selected</span></div>\n<div class=\"line\"><a name=\"l02257\"></a><span class=\"lineno\"> 2257</span>&#160;<span class=\"comment\"># functions only using the \\callgraph command. Disabling a call graph can be</span></div>\n<div class=\"line\"><a name=\"l02258\"></a><span class=\"lineno\"> 2258</span>&#160;<span class=\"comment\"># accomplished by means of the command \\hidecallgraph.</span></div>\n<div class=\"line\"><a name=\"l02259\"></a><span class=\"lineno\"> 2259</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02260\"></a><span class=\"lineno\"> 2260</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02261\"></a><span class=\"lineno\"> 2261</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02262\"></a><span class=\"lineno\"> 2262</span>&#160;<span class=\"comment\">CALL_GRAPH             = YES</span></div>\n<div class=\"line\"><a name=\"l02263\"></a><span class=\"lineno\"> 2263</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02264\"></a><span class=\"lineno\"> 2264</span>&#160;<span class=\"comment\"># If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller</span></div>\n<div class=\"line\"><a name=\"l02265\"></a><span class=\"lineno\"> 2265</span>&#160;<span class=\"comment\"># dependency graph for every global function or class method.</span></div>\n<div class=\"line\"><a name=\"l02266\"></a><span class=\"lineno\"> 2266</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l02267\"></a><span class=\"lineno\"> 2267</span>&#160;<span class=\"comment\"># Note that enabling this option will significantly increase the time of a run.</span></div>\n<div class=\"line\"><a name=\"l02268\"></a><span class=\"lineno\"> 2268</span>&#160;<span class=\"comment\"># So in most cases it will be better to enable caller graphs for selected</span></div>\n<div class=\"line\"><a name=\"l02269\"></a><span class=\"lineno\"> 2269</span>&#160;<span class=\"comment\"># functions only using the \\callergraph command. Disabling a caller graph can be</span></div>\n<div class=\"line\"><a name=\"l02270\"></a><span class=\"lineno\"> 2270</span>&#160;<span class=\"comment\"># accomplished by means of the command \\hidecallergraph.</span></div>\n<div class=\"line\"><a name=\"l02271\"></a><span class=\"lineno\"> 2271</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02272\"></a><span class=\"lineno\"> 2272</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02273\"></a><span class=\"lineno\"> 2273</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02274\"></a><span class=\"lineno\"> 2274</span>&#160;<span class=\"comment\">CALLER_GRAPH           = YES</span></div>\n<div class=\"line\"><a name=\"l02275\"></a><span class=\"lineno\"> 2275</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02276\"></a><span class=\"lineno\"> 2276</span>&#160;<span class=\"comment\"># If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical</span></div>\n<div class=\"line\"><a name=\"l02277\"></a><span class=\"lineno\"> 2277</span>&#160;<span class=\"comment\"># hierarchy of all classes instead of a textual one.</span></div>\n<div class=\"line\"><a name=\"l02278\"></a><span class=\"lineno\"> 2278</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02279\"></a><span class=\"lineno\"> 2279</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02280\"></a><span class=\"lineno\"> 2280</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02281\"></a><span class=\"lineno\"> 2281</span>&#160;<span class=\"comment\">GRAPHICAL_HIERARCHY    = YES</span></div>\n<div class=\"line\"><a name=\"l02282\"></a><span class=\"lineno\"> 2282</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02283\"></a><span class=\"lineno\"> 2283</span>&#160;<span class=\"comment\"># If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the</span></div>\n<div class=\"line\"><a name=\"l02284\"></a><span class=\"lineno\"> 2284</span>&#160;<span class=\"comment\"># dependencies a directory has on other directories in a graphical way. The</span></div>\n<div class=\"line\"><a name=\"l02285\"></a><span class=\"lineno\"> 2285</span>&#160;<span class=\"comment\"># dependency relations are determined by the #include relations between the</span></div>\n<div class=\"line\"><a name=\"l02286\"></a><span class=\"lineno\"> 2286</span>&#160;<span class=\"comment\"># files in the directories.</span></div>\n<div class=\"line\"><a name=\"l02287\"></a><span class=\"lineno\"> 2287</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02288\"></a><span class=\"lineno\"> 2288</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02289\"></a><span class=\"lineno\"> 2289</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02290\"></a><span class=\"lineno\"> 2290</span>&#160;<span class=\"comment\">DIRECTORY_GRAPH        = YES</span></div>\n<div class=\"line\"><a name=\"l02291\"></a><span class=\"lineno\"> 2291</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02292\"></a><span class=\"lineno\"> 2292</span>&#160;<span class=\"comment\"># The DOT_IMAGE_FORMAT tag can be used to set the image format of the images</span></div>\n<div class=\"line\"><a name=\"l02293\"></a><span class=\"lineno\"> 2293</span>&#160;<span class=\"comment\"># generated by dot. For an explanation of the image formats see the section</span></div>\n<div class=\"line\"><a name=\"l02294\"></a><span class=\"lineno\"> 2294</span>&#160;<span class=\"comment\"># output formats in the documentation of the dot tool (Graphviz (see:</span></div>\n<div class=\"line\"><a name=\"l02295\"></a><span class=\"lineno\"> 2295</span>&#160;<span class=\"comment\"># http://www.graphviz.org/)).</span></div>\n<div class=\"line\"><a name=\"l02296\"></a><span class=\"lineno\"> 2296</span>&#160;<span class=\"comment\"># Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order</span></div>\n<div class=\"line\"><a name=\"l02297\"></a><span class=\"lineno\"> 2297</span>&#160;<span class=\"comment\"># to make the SVG files visible in IE 9+ (other browsers do not have this</span></div>\n<div class=\"line\"><a name=\"l02298\"></a><span class=\"lineno\"> 2298</span>&#160;<span class=\"comment\"># requirement).</span></div>\n<div class=\"line\"><a name=\"l02299\"></a><span class=\"lineno\"> 2299</span>&#160;<span class=\"comment\"># Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,</span></div>\n<div class=\"line\"><a name=\"l02300\"></a><span class=\"lineno\"> 2300</span>&#160;<span class=\"comment\"># png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and</span></div>\n<div class=\"line\"><a name=\"l02301\"></a><span class=\"lineno\"> 2301</span>&#160;<span class=\"comment\"># png:gdiplus:gdiplus.</span></div>\n<div class=\"line\"><a name=\"l02302\"></a><span class=\"lineno\"> 2302</span>&#160;<span class=\"comment\"># The default value is: png.</span></div>\n<div class=\"line\"><a name=\"l02303\"></a><span class=\"lineno\"> 2303</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02304\"></a><span class=\"lineno\"> 2304</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02305\"></a><span class=\"lineno\"> 2305</span>&#160;<span class=\"comment\">DOT_IMAGE_FORMAT       = png</span></div>\n<div class=\"line\"><a name=\"l02306\"></a><span class=\"lineno\"> 2306</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02307\"></a><span class=\"lineno\"> 2307</span>&#160;<span class=\"comment\"># If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to</span></div>\n<div class=\"line\"><a name=\"l02308\"></a><span class=\"lineno\"> 2308</span>&#160;<span class=\"comment\"># enable generation of interactive SVG images that allow zooming and panning.</span></div>\n<div class=\"line\"><a name=\"l02309\"></a><span class=\"lineno\"> 2309</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l02310\"></a><span class=\"lineno\"> 2310</span>&#160;<span class=\"comment\"># Note that this requires a modern browser other than Internet Explorer. Tested</span></div>\n<div class=\"line\"><a name=\"l02311\"></a><span class=\"lineno\"> 2311</span>&#160;<span class=\"comment\"># and working are Firefox, Chrome, Safari, and Opera.</span></div>\n<div class=\"line\"><a name=\"l02312\"></a><span class=\"lineno\"> 2312</span>&#160;<span class=\"comment\"># Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make</span></div>\n<div class=\"line\"><a name=\"l02313\"></a><span class=\"lineno\"> 2313</span>&#160;<span class=\"comment\"># the SVG files visible. Older versions of IE do not have SVG support.</span></div>\n<div class=\"line\"><a name=\"l02314\"></a><span class=\"lineno\"> 2314</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02315\"></a><span class=\"lineno\"> 2315</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02316\"></a><span class=\"lineno\"> 2316</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02317\"></a><span class=\"lineno\"> 2317</span>&#160;<span class=\"comment\">INTERACTIVE_SVG        = NO</span></div>\n<div class=\"line\"><a name=\"l02318\"></a><span class=\"lineno\"> 2318</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02319\"></a><span class=\"lineno\"> 2319</span>&#160;<span class=\"comment\"># The DOT_PATH tag can be used to specify the path where the dot tool can be</span></div>\n<div class=\"line\"><a name=\"l02320\"></a><span class=\"lineno\"> 2320</span>&#160;<span class=\"comment\"># found. If left blank, it is assumed the dot tool can be found in the path.</span></div>\n<div class=\"line\"><a name=\"l02321\"></a><span class=\"lineno\"> 2321</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02322\"></a><span class=\"lineno\"> 2322</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02323\"></a><span class=\"lineno\"> 2323</span>&#160;<span class=\"comment\">DOT_PATH               = </span></div>\n<div class=\"line\"><a name=\"l02324\"></a><span class=\"lineno\"> 2324</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02325\"></a><span class=\"lineno\"> 2325</span>&#160;<span class=\"comment\"># The DOTFILE_DIRS tag can be used to specify one or more directories that</span></div>\n<div class=\"line\"><a name=\"l02326\"></a><span class=\"lineno\"> 2326</span>&#160;<span class=\"comment\"># contain dot files that are included in the documentation (see the \\dotfile</span></div>\n<div class=\"line\"><a name=\"l02327\"></a><span class=\"lineno\"> 2327</span>&#160;<span class=\"comment\"># command).</span></div>\n<div class=\"line\"><a name=\"l02328\"></a><span class=\"lineno\"> 2328</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02329\"></a><span class=\"lineno\"> 2329</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02330\"></a><span class=\"lineno\"> 2330</span>&#160;<span class=\"comment\">DOTFILE_DIRS           = </span></div>\n<div class=\"line\"><a name=\"l02331\"></a><span class=\"lineno\"> 2331</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02332\"></a><span class=\"lineno\"> 2332</span>&#160;<span class=\"comment\"># The MSCFILE_DIRS tag can be used to specify one or more directories that</span></div>\n<div class=\"line\"><a name=\"l02333\"></a><span class=\"lineno\"> 2333</span>&#160;<span class=\"comment\"># contain msc files that are included in the documentation (see the \\mscfile</span></div>\n<div class=\"line\"><a name=\"l02334\"></a><span class=\"lineno\"> 2334</span>&#160;<span class=\"comment\"># command).</span></div>\n<div class=\"line\"><a name=\"l02335\"></a><span class=\"lineno\"> 2335</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02336\"></a><span class=\"lineno\"> 2336</span>&#160;<span class=\"comment\">MSCFILE_DIRS           = </span></div>\n<div class=\"line\"><a name=\"l02337\"></a><span class=\"lineno\"> 2337</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02338\"></a><span class=\"lineno\"> 2338</span>&#160;<span class=\"comment\"># The DIAFILE_DIRS tag can be used to specify one or more directories that</span></div>\n<div class=\"line\"><a name=\"l02339\"></a><span class=\"lineno\"> 2339</span>&#160;<span class=\"comment\"># contain dia files that are included in the documentation (see the \\diafile</span></div>\n<div class=\"line\"><a name=\"l02340\"></a><span class=\"lineno\"> 2340</span>&#160;<span class=\"comment\"># command).</span></div>\n<div class=\"line\"><a name=\"l02341\"></a><span class=\"lineno\"> 2341</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02342\"></a><span class=\"lineno\"> 2342</span>&#160;<span class=\"comment\">DIAFILE_DIRS           = </span></div>\n<div class=\"line\"><a name=\"l02343\"></a><span class=\"lineno\"> 2343</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02344\"></a><span class=\"lineno\"> 2344</span>&#160;<span class=\"comment\"># When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the</span></div>\n<div class=\"line\"><a name=\"l02345\"></a><span class=\"lineno\"> 2345</span>&#160;<span class=\"comment\"># path where java can find the plantuml.jar file. If left blank, it is assumed</span></div>\n<div class=\"line\"><a name=\"l02346\"></a><span class=\"lineno\"> 2346</span>&#160;<span class=\"comment\"># PlantUML is not used or called during a preprocessing step. Doxygen will</span></div>\n<div class=\"line\"><a name=\"l02347\"></a><span class=\"lineno\"> 2347</span>&#160;<span class=\"comment\"># generate a warning when it encounters a \\startuml command in this case and</span></div>\n<div class=\"line\"><a name=\"l02348\"></a><span class=\"lineno\"> 2348</span>&#160;<span class=\"comment\"># will not generate output for the diagram.</span></div>\n<div class=\"line\"><a name=\"l02349\"></a><span class=\"lineno\"> 2349</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02350\"></a><span class=\"lineno\"> 2350</span>&#160;<span class=\"comment\">PLANTUML_JAR_PATH      = </span></div>\n<div class=\"line\"><a name=\"l02351\"></a><span class=\"lineno\"> 2351</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02352\"></a><span class=\"lineno\"> 2352</span>&#160;<span class=\"comment\"># When using plantuml, the specified paths are searched for files specified by</span></div>\n<div class=\"line\"><a name=\"l02353\"></a><span class=\"lineno\"> 2353</span>&#160;<span class=\"comment\"># the !include statement in a plantuml block.</span></div>\n<div class=\"line\"><a name=\"l02354\"></a><span class=\"lineno\"> 2354</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02355\"></a><span class=\"lineno\"> 2355</span>&#160;<span class=\"comment\">PLANTUML_INCLUDE_PATH  = </span></div>\n<div class=\"line\"><a name=\"l02356\"></a><span class=\"lineno\"> 2356</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02357\"></a><span class=\"lineno\"> 2357</span>&#160;<span class=\"comment\"># The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes</span></div>\n<div class=\"line\"><a name=\"l02358\"></a><span class=\"lineno\"> 2358</span>&#160;<span class=\"comment\"># that will be shown in the graph. If the number of nodes in a graph becomes</span></div>\n<div class=\"line\"><a name=\"l02359\"></a><span class=\"lineno\"> 2359</span>&#160;<span class=\"comment\"># larger than this value, doxygen will truncate the graph, which is visualized</span></div>\n<div class=\"line\"><a name=\"l02360\"></a><span class=\"lineno\"> 2360</span>&#160;<span class=\"comment\"># by representing a node as a red box. Note that doxygen if the number of direct</span></div>\n<div class=\"line\"><a name=\"l02361\"></a><span class=\"lineno\"> 2361</span>&#160;<span class=\"comment\"># children of the root node in a graph is already larger than</span></div>\n<div class=\"line\"><a name=\"l02362\"></a><span class=\"lineno\"> 2362</span>&#160;<span class=\"comment\"># DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that</span></div>\n<div class=\"line\"><a name=\"l02363\"></a><span class=\"lineno\"> 2363</span>&#160;<span class=\"comment\"># the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.</span></div>\n<div class=\"line\"><a name=\"l02364\"></a><span class=\"lineno\"> 2364</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 10000, default value: 50.</span></div>\n<div class=\"line\"><a name=\"l02365\"></a><span class=\"lineno\"> 2365</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02366\"></a><span class=\"lineno\"> 2366</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02367\"></a><span class=\"lineno\"> 2367</span>&#160;<span class=\"comment\">DOT_GRAPH_MAX_NODES    = 50</span></div>\n<div class=\"line\"><a name=\"l02368\"></a><span class=\"lineno\"> 2368</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02369\"></a><span class=\"lineno\"> 2369</span>&#160;<span class=\"comment\"># The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs</span></div>\n<div class=\"line\"><a name=\"l02370\"></a><span class=\"lineno\"> 2370</span>&#160;<span class=\"comment\"># generated by dot. A depth value of 3 means that only nodes reachable from the</span></div>\n<div class=\"line\"><a name=\"l02371\"></a><span class=\"lineno\"> 2371</span>&#160;<span class=\"comment\"># root by following a path via at most 3 edges will be shown. Nodes that lay</span></div>\n<div class=\"line\"><a name=\"l02372\"></a><span class=\"lineno\"> 2372</span>&#160;<span class=\"comment\"># further from the root node will be omitted. Note that setting this option to 1</span></div>\n<div class=\"line\"><a name=\"l02373\"></a><span class=\"lineno\"> 2373</span>&#160;<span class=\"comment\"># or 2 may greatly reduce the computation time needed for large code bases. Also</span></div>\n<div class=\"line\"><a name=\"l02374\"></a><span class=\"lineno\"> 2374</span>&#160;<span class=\"comment\"># note that the size of a graph can be further restricted by</span></div>\n<div class=\"line\"><a name=\"l02375\"></a><span class=\"lineno\"> 2375</span>&#160;<span class=\"comment\"># DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.</span></div>\n<div class=\"line\"><a name=\"l02376\"></a><span class=\"lineno\"> 2376</span>&#160;<span class=\"comment\"># Minimum value: 0, maximum value: 1000, default value: 0.</span></div>\n<div class=\"line\"><a name=\"l02377\"></a><span class=\"lineno\"> 2377</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02378\"></a><span class=\"lineno\"> 2378</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02379\"></a><span class=\"lineno\"> 2379</span>&#160;<span class=\"comment\">MAX_DOT_GRAPH_DEPTH    = 1000</span></div>\n<div class=\"line\"><a name=\"l02380\"></a><span class=\"lineno\"> 2380</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02381\"></a><span class=\"lineno\"> 2381</span>&#160;<span class=\"comment\"># Set the DOT_TRANSPARENT tag to YES to generate images with a transparent</span></div>\n<div class=\"line\"><a name=\"l02382\"></a><span class=\"lineno\"> 2382</span>&#160;<span class=\"comment\"># background. This is disabled by default, because dot on Windows does not seem</span></div>\n<div class=\"line\"><a name=\"l02383\"></a><span class=\"lineno\"> 2383</span>&#160;<span class=\"comment\"># to support this out of the box.</span></div>\n<div class=\"line\"><a name=\"l02384\"></a><span class=\"lineno\"> 2384</span>&#160;<span class=\"comment\">#</span></div>\n<div class=\"line\"><a name=\"l02385\"></a><span class=\"lineno\"> 2385</span>&#160;<span class=\"comment\"># Warning: Depending on the platform used, enabling this option may lead to</span></div>\n<div class=\"line\"><a name=\"l02386\"></a><span class=\"lineno\"> 2386</span>&#160;<span class=\"comment\"># badly anti-aliased labels on the edges of a graph (i.e. they become hard to</span></div>\n<div class=\"line\"><a name=\"l02387\"></a><span class=\"lineno\"> 2387</span>&#160;<span class=\"comment\"># read).</span></div>\n<div class=\"line\"><a name=\"l02388\"></a><span class=\"lineno\"> 2388</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02389\"></a><span class=\"lineno\"> 2389</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02390\"></a><span class=\"lineno\"> 2390</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02391\"></a><span class=\"lineno\"> 2391</span>&#160;<span class=\"comment\">DOT_TRANSPARENT        = NO</span></div>\n<div class=\"line\"><a name=\"l02392\"></a><span class=\"lineno\"> 2392</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02393\"></a><span class=\"lineno\"> 2393</span>&#160;<span class=\"comment\"># Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output</span></div>\n<div class=\"line\"><a name=\"l02394\"></a><span class=\"lineno\"> 2394</span>&#160;<span class=\"comment\"># files in one run (i.e. multiple -o and -T options on the command line). This</span></div>\n<div class=\"line\"><a name=\"l02395\"></a><span class=\"lineno\"> 2395</span>&#160;<span class=\"comment\"># makes dot run faster, but since only newer versions of dot (&gt;1.8.10) support</span></div>\n<div class=\"line\"><a name=\"l02396\"></a><span class=\"lineno\"> 2396</span>&#160;<span class=\"comment\"># this, this feature is disabled by default.</span></div>\n<div class=\"line\"><a name=\"l02397\"></a><span class=\"lineno\"> 2397</span>&#160;<span class=\"comment\"># The default value is: NO.</span></div>\n<div class=\"line\"><a name=\"l02398\"></a><span class=\"lineno\"> 2398</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02399\"></a><span class=\"lineno\"> 2399</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02400\"></a><span class=\"lineno\"> 2400</span>&#160;<span class=\"comment\">DOT_MULTI_TARGETS      = NO</span></div>\n<div class=\"line\"><a name=\"l02401\"></a><span class=\"lineno\"> 2401</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02402\"></a><span class=\"lineno\"> 2402</span>&#160;<span class=\"comment\"># If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page</span></div>\n<div class=\"line\"><a name=\"l02403\"></a><span class=\"lineno\"> 2403</span>&#160;<span class=\"comment\"># explaining the meaning of the various boxes and arrows in the dot generated</span></div>\n<div class=\"line\"><a name=\"l02404\"></a><span class=\"lineno\"> 2404</span>&#160;<span class=\"comment\"># graphs.</span></div>\n<div class=\"line\"><a name=\"l02405\"></a><span class=\"lineno\"> 2405</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02406\"></a><span class=\"lineno\"> 2406</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02407\"></a><span class=\"lineno\"> 2407</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02408\"></a><span class=\"lineno\"> 2408</span>&#160;<span class=\"comment\">GENERATE_LEGEND        = YES</span></div>\n<div class=\"line\"><a name=\"l02409\"></a><span class=\"lineno\"> 2409</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02410\"></a><span class=\"lineno\"> 2410</span>&#160;<span class=\"comment\"># If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot</span></div>\n<div class=\"line\"><a name=\"l02411\"></a><span class=\"lineno\"> 2411</span>&#160;<span class=\"comment\"># files that are used to generate the various graphs.</span></div>\n<div class=\"line\"><a name=\"l02412\"></a><span class=\"lineno\"> 2412</span>&#160;<span class=\"comment\"># The default value is: YES.</span></div>\n<div class=\"line\"><a name=\"l02413\"></a><span class=\"lineno\"> 2413</span>&#160;<span class=\"comment\"># This tag requires that the tag HAVE_DOT is set to YES.</span></div>\n<div class=\"line\"><a name=\"l02414\"></a><span class=\"lineno\"> 2414</span>&#160;<span class=\"comment\"></span></div>\n<div class=\"line\"><a name=\"l02415\"></a><span class=\"lineno\"> 2415</span>&#160;<span class=\"comment\">DOT_CLEANUP            = YES</span></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00048.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat2x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat2x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00048_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00048_source.html\">mat2x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00048_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat2x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat2x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00048.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00063.html\">./ext/matrix_double2x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00064.html\">./ext/matrix_double2x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00082.html\">./ext/matrix_float2x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00083.html\">./ext/matrix_float2x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"ttc\" id=\"a00064_html\"><div class=\"ttname\"><a href=\"a00064.html\">matrix_double2x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00082_html\"><div class=\"ttname\"><a href=\"a00082.html\">matrix_float2x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00063_html\"><div class=\"ttname\"><a href=\"a00063.html\">matrix_double2x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00083_html\"><div class=\"ttname\"><a href=\"a00083.html\">matrix_float2x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00049.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat2x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat2x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00049_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00049_source.html\">mat2x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00049_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat2x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat2x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00049.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00065.html\">./ext/matrix_double2x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00066.html\">./ext/matrix_double2x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00084.html\">./ext/matrix_float2x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00085.html\">./ext/matrix_float2x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"ttc\" id=\"a00084_html\"><div class=\"ttname\"><a href=\"a00084.html\">matrix_float2x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00066_html\"><div class=\"ttname\"><a href=\"a00066.html\">matrix_double2x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00065_html\"><div class=\"ttname\"><a href=\"a00065.html\">matrix_double2x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00085_html\"><div class=\"ttname\"><a href=\"a00085.html\">matrix_float2x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00050.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat2x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat2x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00050_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00050_source.html\">mat2x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00050_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat2x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat2x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00050.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00067.html\">./ext/matrix_double2x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00068.html\">./ext/matrix_double2x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00086.html\">./ext/matrix_float2x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00087.html\">./ext/matrix_float2x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"ttc\" id=\"a00068_html\"><div class=\"ttname\"><a href=\"a00068.html\">matrix_double2x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00067_html\"><div class=\"ttname\"><a href=\"a00067.html\">matrix_double2x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00087_html\"><div class=\"ttname\"><a href=\"a00087.html\">matrix_float2x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00086_html\"><div class=\"ttname\"><a href=\"a00086.html\">matrix_float2x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00051.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat3x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat3x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00051_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00051_source.html\">mat3x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00051_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat3x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat3x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00051.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00069.html\">./ext/matrix_double3x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00070.html\">./ext/matrix_double3x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00088.html\">./ext/matrix_float3x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00089.html\">./ext/matrix_float3x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"ttc\" id=\"a00088_html\"><div class=\"ttname\"><a href=\"a00088.html\">matrix_float3x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00070_html\"><div class=\"ttname\"><a href=\"a00070.html\">matrix_double3x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00069_html\"><div class=\"ttname\"><a href=\"a00069.html\">matrix_double3x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00089_html\"><div class=\"ttname\"><a href=\"a00089.html\">matrix_float3x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00052.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat3x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat3x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00052_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00052_source.html\">mat3x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00052_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat3x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat3x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00052.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00071.html\">./ext/matrix_double3x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00072.html\">./ext/matrix_double3x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00090.html\">./ext/matrix_float3x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00091.html\">./ext/matrix_float3x3_precision.hpp</a>&quot;</span></div>\n<div class=\"ttc\" id=\"a00091_html\"><div class=\"ttname\"><a href=\"a00091.html\">matrix_float3x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00090_html\"><div class=\"ttname\"><a href=\"a00090.html\">matrix_float3x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00072_html\"><div class=\"ttname\"><a href=\"a00072.html\">matrix_double3x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00071_html\"><div class=\"ttname\"><a href=\"a00071.html\">matrix_double3x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00053.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat3x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat3x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00053_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00053_source.html\">mat3x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00053_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat3x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat3x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00053.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00073.html\">./ext/matrix_double3x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00074.html\">./ext/matrix_double3x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00092.html\">./ext/matrix_float3x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00093.html\">./ext/matrix_float3x4_precision.hpp</a>&quot;</span></div>\n<div class=\"ttc\" id=\"a00093_html\"><div class=\"ttname\"><a href=\"a00093.html\">matrix_float3x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00074_html\"><div class=\"ttname\"><a href=\"a00074.html\">matrix_double3x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00092_html\"><div class=\"ttname\"><a href=\"a00092.html\">matrix_float3x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00073_html\"><div class=\"ttname\"><a href=\"a00073.html\">matrix_double3x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00054.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat4x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat4x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00054_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00054_source.html\">mat4x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00054_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat4x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat4x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00054.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00075.html\">./ext/matrix_double4x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00076.html\">./ext/matrix_double4x2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00094.html\">./ext/matrix_float4x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;./ext/matrix_float4x2_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"ttc\" id=\"a00076_html\"><div class=\"ttname\"><a href=\"a00076.html\">matrix_double4x2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00075_html\"><div class=\"ttname\"><a href=\"a00075.html\">matrix_double4x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00094_html\"><div class=\"ttname\"><a href=\"a00094.html\">matrix_float4x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00055.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat4x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat4x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00055_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00055_source.html\">mat4x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00055_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat4x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat4x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00055.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00077.html\">./ext/matrix_double4x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00078.html\">./ext/matrix_double4x3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00096.html\">./ext/matrix_float4x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00097.html\">./ext/matrix_float4x3_precision.hpp</a>&quot;</span></div>\n<div class=\"ttc\" id=\"a00096_html\"><div class=\"ttname\"><a href=\"a00096.html\">matrix_float4x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00078_html\"><div class=\"ttname\"><a href=\"a00078.html\">matrix_double4x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00077_html\"><div class=\"ttname\"><a href=\"a00077.html\">matrix_double4x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00097_html\"><div class=\"ttname\"><a href=\"a00097.html\">matrix_float4x3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00056.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat4x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat4x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00056_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00056_source.html\">mat4x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00056_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mat4x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mat4x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00056.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00079.html\">./ext/matrix_double4x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00080.html\">./ext/matrix_double4x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00098.html\">./ext/matrix_float4x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00099.html\">./ext/matrix_float4x4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"ttc\" id=\"a00079_html\"><div class=\"ttname\"><a href=\"a00079.html\">matrix_double4x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00099_html\"><div class=\"ttname\"><a href=\"a00099.html\">matrix_float4x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00098_html\"><div class=\"ttname\"><a href=\"a00098.html\">matrix_float4x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00080_html\"><div class=\"ttname\"><a href=\"a00080.html\">matrix_double4x4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00057.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00057_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad7928795124768e058f99dce270f5c8d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad7928795124768e058f99dce270f5c8d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gad7928795124768e058f99dce270f5c8d\">determinant</a> (mat&lt; C, R, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gad7928795124768e058f99dce270f5c8d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the determinant of a squared matrix.  <a href=\"a00371.html#gad7928795124768e058f99dce270f5c8d\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7928795124768e058f99dce270f5c8d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaed509fe8129b01e4f20a6d0de5690091\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaed509fe8129b01e4f20a6d0de5690091\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gaed509fe8129b01e4f20a6d0de5690091\">inverse</a> (mat&lt; C, R, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gaed509fe8129b01e4f20a6d0de5690091\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the inverse of a squared matrix.  <a href=\"a00371.html#gaed509fe8129b01e4f20a6d0de5690091\">More...</a><br /></td></tr>\n<tr class=\"separator:gaed509fe8129b01e4f20a6d0de5690091\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf14569404c779fedca98d0b9b8e58c1f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf14569404c779fedca98d0b9b8e58c1f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gaf14569404c779fedca98d0b9b8e58c1f\">matrixCompMult</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gaf14569404c779fedca98d0b9b8e58c1f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and y[i][j].  <a href=\"a00371.html#gaf14569404c779fedca98d0b9b8e58c1f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf14569404c779fedca98d0b9b8e58c1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac29fb7bae75a8e4c1b74cbbf85520e50\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac29fb7bae75a8e4c1b74cbbf85520e50\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL detail::outerProduct_trait&lt; C, R, T, Q &gt;::type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50\">outerProduct</a> (vec&lt; C, T, Q &gt; const &amp;c, vec&lt; R, T, Q &gt; const &amp;r)</td></tr>\n<tr class=\"memdesc:gac29fb7bae75a8e4c1b74cbbf85520e50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Treats the first parameter c as a column vector and the second parameter r as a row vector and does a linear algebraic matrix multiply c * r.  <a href=\"a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50\">More...</a><br /></td></tr>\n<tr class=\"separator:gac29fb7bae75a8e4c1b74cbbf85520e50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae679d841da8ce9dbcc6c2d454f15bc35\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae679d841da8ce9dbcc6c2d454f15bc35\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;::transpose_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35\">transpose</a> (mat&lt; C, R, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gae679d841da8ce9dbcc6c2d454f15bc35\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the transposed matrix of x.  <a href=\"a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35\">More...</a><br /></td></tr>\n<tr class=\"separator:gae679d841da8ce9dbcc6c2d454f15bc35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00057_source.html\">matrix.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00057_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00057.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00184.html\">vec2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00185.html\">vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00186.html\">vec4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00048.html\">mat2x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00049.html\">mat2x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00050.html\">mat2x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00051.html\">mat3x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00052.html\">mat3x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00053.html\">mat3x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00054.html\">mat4x2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00055.html\">mat4x3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00056.html\">mat4x4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a> {</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait{};</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;2, 2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 2, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;2, 3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 2, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;2, 4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 2, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;3, 2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 3, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;3, 3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 3, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;3, 4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 3, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;4, 2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 4, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;4, 3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 4, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keyword\">struct </span>outerProduct_trait&lt;4, 4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 4, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; <a class=\"code\" href=\"a00371.html#gaf14569404c779fedca98d0b9b8e58c1f\">matrixCompMult</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> detail::outerProduct_trait&lt;C, R, T, Q&gt;::type <a class=\"code\" href=\"a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50\">outerProduct</a>(vec&lt;C, T, Q&gt; <span class=\"keyword\">const</span>&amp; c, vec&lt;R, T, Q&gt; <span class=\"keyword\">const</span>&amp; r);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> mat&lt;C, R, T, Q&gt;::transpose_type <a class=\"code\" href=\"a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35\">transpose</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00371.html#gad7928795124768e058f99dce270f5c8d\">determinant</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; <a class=\"code\" href=\"a00371.html#gaed509fe8129b01e4f20a6d0de5690091\">inverse</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;<span class=\"preprocessor\">#include &quot;detail/func_matrix.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00371_html_gaf14569404c779fedca98d0b9b8e58c1f\"><div class=\"ttname\"><a href=\"a00371.html#gaf14569404c779fedca98d0b9b8e58c1f\">glm::matrixCompMult</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt; matrixCompMult(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and...</div></div>\n<div class=\"ttc\" id=\"a00056_html\"><div class=\"ttname\"><a href=\"a00056.html\">mat4x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00371_html_gad7928795124768e058f99dce270f5c8d\"><div class=\"ttname\"><a href=\"a00371.html#gad7928795124768e058f99dce270f5c8d\">glm::determinant</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T determinant(mat&lt; C, R, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Return the determinant of a squared matrix. </div></div>\n<div class=\"ttc\" id=\"a00050_html\"><div class=\"ttname\"><a href=\"a00050.html\">mat2x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00371_html_gac29fb7bae75a8e4c1b74cbbf85520e50\"><div class=\"ttname\"><a href=\"a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50\">glm::outerProduct</a></div><div class=\"ttdeci\">GLM_FUNC_DECL detail::outerProduct_trait&lt; C, R, T, Q &gt;::type outerProduct(vec&lt; C, T, Q &gt; const &amp;c, vec&lt; R, T, Q &gt; const &amp;r)</div><div class=\"ttdoc\">Treats the first parameter c as a column vector and the second parameter r as a row vector and does a...</div></div>\n<div class=\"ttc\" id=\"a00055_html\"><div class=\"ttname\"><a href=\"a00055.html\">mat4x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00184_html\"><div class=\"ttname\"><a href=\"a00184.html\">vec2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00371_html_gae679d841da8ce9dbcc6c2d454f15bc35\"><div class=\"ttname\"><a href=\"a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35\">glm::transpose</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;::transpose_type transpose(mat&lt; C, R, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the transposed matrix of x. </div></div>\n<div class=\"ttc\" id=\"a00049_html\"><div class=\"ttname\"><a href=\"a00049.html\">mat2x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00054_html\"><div class=\"ttname\"><a href=\"a00054.html\">mat4x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00052_html\"><div class=\"ttname\"><a href=\"a00052.html\">mat3x3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00186_html\"><div class=\"ttname\"><a href=\"a00186.html\">vec4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00371_html_gaed509fe8129b01e4f20a6d0de5690091\"><div class=\"ttname\"><a href=\"a00371.html#gaed509fe8129b01e4f20a6d0de5690091\">glm::inverse</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt; inverse(mat&lt; C, R, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Return the inverse of a squared matrix. </div></div>\n<div class=\"ttc\" id=\"a00053_html\"><div class=\"ttname\"><a href=\"a00053.html\">mat3x4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00051_html\"><div class=\"ttname\"><a href=\"a00051.html\">mat3x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00185_html\"><div class=\"ttname\"><a href=\"a00185.html\">vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00048_html\"><div class=\"ttname\"><a href=\"a00048.html\">mat2x2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00058.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_access.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_access.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00293.html\">GLM_GTC_matrix_access</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00058_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga96022eb0d3fae39d89fc7a954e59b374\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga96022eb0d3fae39d89fc7a954e59b374\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::col_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html#ga96022eb0d3fae39d89fc7a954e59b374\">column</a> (genType const &amp;m, length_t index)</td></tr>\n<tr class=\"memdesc:ga96022eb0d3fae39d89fc7a954e59b374\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get a specific column of a matrix.  <a href=\"a00293.html#ga96022eb0d3fae39d89fc7a954e59b374\">More...</a><br /></td></tr>\n<tr class=\"separator:ga96022eb0d3fae39d89fc7a954e59b374\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9e757377523890e8b80c5843dbe4dd15\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9e757377523890e8b80c5843dbe4dd15\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html#ga9e757377523890e8b80c5843dbe4dd15\">column</a> (genType const &amp;m, length_t index, typename genType::col_type const &amp;x)</td></tr>\n<tr class=\"memdesc:ga9e757377523890e8b80c5843dbe4dd15\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set a specific column to a matrix.  <a href=\"a00293.html#ga9e757377523890e8b80c5843dbe4dd15\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9e757377523890e8b80c5843dbe4dd15\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga259e5ebd0f31ec3f83440f8cae7f5dba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga259e5ebd0f31ec3f83440f8cae7f5dba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::row_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html#ga259e5ebd0f31ec3f83440f8cae7f5dba\">row</a> (genType const &amp;m, length_t index)</td></tr>\n<tr class=\"memdesc:ga259e5ebd0f31ec3f83440f8cae7f5dba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get a specific row of a matrix.  <a href=\"a00293.html#ga259e5ebd0f31ec3f83440f8cae7f5dba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga259e5ebd0f31ec3f83440f8cae7f5dba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaadcc64829aadf4103477679e48c7594f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaadcc64829aadf4103477679e48c7594f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html#gaadcc64829aadf4103477679e48c7594f\">row</a> (genType const &amp;m, length_t index, typename genType::row_type const &amp;x)</td></tr>\n<tr class=\"memdesc:gaadcc64829aadf4103477679e48c7594f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set a specific row to a matrix.  <a href=\"a00293.html#gaadcc64829aadf4103477679e48c7594f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaadcc64829aadf4103477679e48c7594f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00293.html\">GLM_GTC_matrix_access</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00058_source.html\">matrix_access.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00058_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_access.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_access.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00058.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_matrix_access extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> genType::row_type <a class=\"code\" href=\"a00293.html#gaadcc64829aadf4103477679e48c7594f\">row</a>(</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                genType <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                length_t index);</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00293.html#gaadcc64829aadf4103477679e48c7594f\">row</a>(</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                genType <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                length_t index,</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                <span class=\"keyword\">typename</span> genType::row_type <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> genType::col_type <a class=\"code\" href=\"a00293.html#ga9e757377523890e8b80c5843dbe4dd15\">column</a>(</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                genType <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                length_t index);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00293.html#ga9e757377523890e8b80c5843dbe4dd15\">column</a>(</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                genType <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                length_t index,</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                <span class=\"keyword\">typename</span> genType::col_type <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_access.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00293_html_gaadcc64829aadf4103477679e48c7594f\"><div class=\"ttname\"><a href=\"a00293.html#gaadcc64829aadf4103477679e48c7594f\">glm::row</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType row(genType const &amp;m, length_t index, typename genType::row_type const &amp;x)</div><div class=\"ttdoc\">Set a specific row to a matrix. </div></div>\n<div class=\"ttc\" id=\"a00293_html_ga9e757377523890e8b80c5843dbe4dd15\"><div class=\"ttname\"><a href=\"a00293.html#ga9e757377523890e8b80c5843dbe4dd15\">glm::column</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType column(genType const &amp;m, length_t index, typename genType::col_type const &amp;x)</div><div class=\"ttdoc\">Set a specific column to a matrix. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00059.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_clip_space.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_clip_space.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00243.html\">GLM_EXT_matrix_clip_space</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00059_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0bcd4542e0affc63a0b8c08fcb839ea9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0bcd4542e0affc63a0b8c08fcb839ea9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9\">frustum</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga0bcd4542e0affc63a0b8c08fcb839ea9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a frustum matrix with default handedness, using the default handedness and default near and far clip planes definition.  <a href=\"a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0bcd4542e0affc63a0b8c08fcb839ea9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4277c37f61d81da01bc9db14ea90296\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae4277c37f61d81da01bc9db14ea90296\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gae4277c37f61d81da01bc9db14ea90296\">frustumLH</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:gae4277c37f61d81da01bc9db14ea90296\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a left handed frustum matrix.  <a href=\"a00243.html#gae4277c37f61d81da01bc9db14ea90296\">More...</a><br /></td></tr>\n<tr class=\"separator:gae4277c37f61d81da01bc9db14ea90296\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga259520cad03b3f8bca9417920035ed01\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga259520cad03b3f8bca9417920035ed01\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga259520cad03b3f8bca9417920035ed01\">frustumLH_NO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga259520cad03b3f8bca9417920035ed01\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a left handed frustum matrix.  <a href=\"a00243.html#ga259520cad03b3f8bca9417920035ed01\">More...</a><br /></td></tr>\n<tr class=\"separator:ga259520cad03b3f8bca9417920035ed01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94218b094862d17798370242680b9030\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga94218b094862d17798370242680b9030\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga94218b094862d17798370242680b9030\">frustumLH_ZO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga94218b094862d17798370242680b9030\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a left handed frustum matrix.  <a href=\"a00243.html#ga94218b094862d17798370242680b9030\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94218b094862d17798370242680b9030\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae34ec664ad44860bf4b5ba631f0e0e90\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae34ec664ad44860bf4b5ba631f0e0e90\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90\">frustumNO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:gae34ec664ad44860bf4b5ba631f0e0e90\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90\">More...</a><br /></td></tr>\n<tr class=\"separator:gae34ec664ad44860bf4b5ba631f0e0e90\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4366ab45880c6c5f8b3e8c371ca4b136\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga4366ab45880c6c5f8b3e8c371ca4b136\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136\">frustumRH</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga4366ab45880c6c5f8b3e8c371ca4b136\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a right handed frustum matrix.  <a href=\"a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4366ab45880c6c5f8b3e8c371ca4b136\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9236c8439f21be186b79c97b588836b9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9236c8439f21be186b79c97b588836b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga9236c8439f21be186b79c97b588836b9\">frustumRH_NO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga9236c8439f21be186b79c97b588836b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a right handed frustum matrix.  <a href=\"a00243.html#ga9236c8439f21be186b79c97b588836b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9236c8439f21be186b79c97b588836b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7654a9227f14d5382786b9fc0eb5692d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7654a9227f14d5382786b9fc0eb5692d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga7654a9227f14d5382786b9fc0eb5692d\">frustumRH_ZO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga7654a9227f14d5382786b9fc0eb5692d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a right handed frustum matrix.  <a href=\"a00243.html#ga7654a9227f14d5382786b9fc0eb5692d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7654a9227f14d5382786b9fc0eb5692d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa73322e152edf50cf30a6edac342a757\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa73322e152edf50cf30a6edac342a757\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaa73322e152edf50cf30a6edac342a757\">frustumZO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:gaa73322e152edf50cf30a6edac342a757\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gaa73322e152edf50cf30a6edac342a757\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa73322e152edf50cf30a6edac342a757\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga44fa38a18349450325cae2661bb115ca\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga44fa38a18349450325cae2661bb115ca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga44fa38a18349450325cae2661bb115ca\">infinitePerspective</a> (T fovy, T aspect, T near)</td></tr>\n<tr class=\"memdesc:ga44fa38a18349450325cae2661bb115ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness.  <a href=\"a00243.html#ga44fa38a18349450325cae2661bb115ca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga44fa38a18349450325cae2661bb115ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3201b30f5b3ea0f933246d87bfb992a9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga3201b30f5b3ea0f933246d87bfb992a9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9\">infinitePerspectiveLH</a> (T fovy, T aspect, T near)</td></tr>\n<tr class=\"memdesc:ga3201b30f5b3ea0f933246d87bfb992a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite.  <a href=\"a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3201b30f5b3ea0f933246d87bfb992a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99672ffe5714ef478dab2437255fe7e1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga99672ffe5714ef478dab2437255fe7e1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga99672ffe5714ef478dab2437255fe7e1\">infinitePerspectiveRH</a> (T fovy, T aspect, T near)</td></tr>\n<tr class=\"memdesc:ga99672ffe5714ef478dab2437255fe7e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite.  <a href=\"a00243.html#ga99672ffe5714ef478dab2437255fe7e1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99672ffe5714ef478dab2437255fe7e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5b6b40ed882cd56cd7cb97701909c06\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae5b6b40ed882cd56cd7cb97701909c06\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gae5b6b40ed882cd56cd7cb97701909c06\">ortho</a> (T left, T right, T bottom, T top)</td></tr>\n<tr class=\"memdesc:gae5b6b40ed882cd56cd7cb97701909c06\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for projecting two-dimensional coordinates onto the screen.  <a href=\"a00243.html#gae5b6b40ed882cd56cd7cb97701909c06\">More...</a><br /></td></tr>\n<tr class=\"separator:gae5b6b40ed882cd56cd7cb97701909c06\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6615d8a9d39432e279c4575313ecb456\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga6615d8a9d39432e279c4575313ecb456\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga6615d8a9d39432e279c4575313ecb456\">ortho</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:ga6615d8a9d39432e279c4575313ecb456\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using the default handedness and default near and far clip planes definition.  <a href=\"a00243.html#ga6615d8a9d39432e279c4575313ecb456\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6615d8a9d39432e279c4575313ecb456\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad122a79aadaa5529cec4ac197203db7f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gad122a79aadaa5529cec4ac197203db7f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gad122a79aadaa5529cec4ac197203db7f\">orthoLH</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gad122a79aadaa5529cec4ac197203db7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.  <a href=\"a00243.html#gad122a79aadaa5529cec4ac197203db7f\">More...</a><br /></td></tr>\n<tr class=\"separator:gad122a79aadaa5529cec4ac197203db7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga526416735ea7c5c5cd255bf99d051bd8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga526416735ea7c5c5cd255bf99d051bd8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga526416735ea7c5c5cd255bf99d051bd8\">orthoLH_NO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:ga526416735ea7c5c5cd255bf99d051bd8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume using right-handed coordinates.  <a href=\"a00243.html#ga526416735ea7c5c5cd255bf99d051bd8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga526416735ea7c5c5cd255bf99d051bd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab37ac3eec8d61f22fceda7775e836afa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab37ac3eec8d61f22fceda7775e836afa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gab37ac3eec8d61f22fceda7775e836afa\">orthoLH_ZO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gab37ac3eec8d61f22fceda7775e836afa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.  <a href=\"a00243.html#gab37ac3eec8d61f22fceda7775e836afa\">More...</a><br /></td></tr>\n<tr class=\"separator:gab37ac3eec8d61f22fceda7775e836afa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab219d28a8f178d4517448fcd6395a073\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab219d28a8f178d4517448fcd6395a073\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gab219d28a8f178d4517448fcd6395a073\">orthoNO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gab219d28a8f178d4517448fcd6395a073\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gab219d28a8f178d4517448fcd6395a073\">More...</a><br /></td></tr>\n<tr class=\"separator:gab219d28a8f178d4517448fcd6395a073\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16264c9b838edeb9dd1de7a1010a13a4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga16264c9b838edeb9dd1de7a1010a13a4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4\">orthoRH</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:ga16264c9b838edeb9dd1de7a1010a13a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.  <a href=\"a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16264c9b838edeb9dd1de7a1010a13a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa2f7a1373170bf0a4a2ddef9b0706780\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa2f7a1373170bf0a4a2ddef9b0706780\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780\">orthoRH_NO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gaa2f7a1373170bf0a4a2ddef9b0706780\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.  <a href=\"a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa2f7a1373170bf0a4a2ddef9b0706780\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9aea2e515b08fd7dce47b7b6ec34d588\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9aea2e515b08fd7dce47b7b6ec34d588\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588\">orthoRH_ZO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:ga9aea2e515b08fd7dce47b7b6ec34d588\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.  <a href=\"a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9aea2e515b08fd7dce47b7b6ec34d588\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea11a70817af2c0801c869dea0b7a5bc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaea11a70817af2c0801c869dea0b7a5bc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaea11a70817af2c0801c869dea0b7a5bc\">orthoZO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gaea11a70817af2c0801c869dea0b7a5bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.  <a href=\"a00243.html#gaea11a70817af2c0801c869dea0b7a5bc\">More...</a><br /></td></tr>\n<tr class=\"separator:gaea11a70817af2c0801c869dea0b7a5bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga747c8cf99458663dd7ad1bb3a2f07787\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga747c8cf99458663dd7ad1bb3a2f07787\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787\">perspective</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:ga747c8cf99458663dd7ad1bb3a2f07787\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symetric perspective-view frustum based on the default handedness and default near and far clip planes definition.  <a href=\"a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787\">More...</a><br /></td></tr>\n<tr class=\"separator:ga747c8cf99458663dd7ad1bb3a2f07787\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebd02240fd36e85ad754f02ddd9a560d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaebd02240fd36e85ad754f02ddd9a560d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaebd02240fd36e85ad754f02ddd9a560d\">perspectiveFov</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gaebd02240fd36e85ad754f02ddd9a560d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view and the default handedness and default near and far clip planes definition.  <a href=\"a00243.html#gaebd02240fd36e85ad754f02ddd9a560d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaebd02240fd36e85ad754f02ddd9a560d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6aebe16c164bd8e52554cbe0304ef4aa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga6aebe16c164bd8e52554cbe0304ef4aa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa\">perspectiveFovLH</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:ga6aebe16c164bd8e52554cbe0304ef4aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a left handed perspective projection matrix based on a field of view.  <a href=\"a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6aebe16c164bd8e52554cbe0304ef4aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad18a4495b77530317327e8d466488c1a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gad18a4495b77530317327e8d466488c1a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gad18a4495b77530317327e8d466488c1a\">perspectiveFovLH_NO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gad18a4495b77530317327e8d466488c1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using left-handed coordinates.  <a href=\"a00243.html#gad18a4495b77530317327e8d466488c1a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad18a4495b77530317327e8d466488c1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabdd37014f529e25b2fa1b3ba06c10d5c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gabdd37014f529e25b2fa1b3ba06c10d5c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c\">perspectiveFovLH_ZO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gabdd37014f529e25b2fa1b3ba06c10d5c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using left-handed coordinates.  <a href=\"a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c\">More...</a><br /></td></tr>\n<tr class=\"separator:gabdd37014f529e25b2fa1b3ba06c10d5c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf30e7bd3b1387a6776433dd5383e6633\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf30e7bd3b1387a6776433dd5383e6633\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaf30e7bd3b1387a6776433dd5383e6633\">perspectiveFovNO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gaf30e7bd3b1387a6776433dd5383e6633\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gaf30e7bd3b1387a6776433dd5383e6633\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf30e7bd3b1387a6776433dd5383e6633\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf32bf563f28379c68554a44ee60c6a85\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf32bf563f28379c68554a44ee60c6a85\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaf32bf563f28379c68554a44ee60c6a85\">perspectiveFovRH</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gaf32bf563f28379c68554a44ee60c6a85\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a right handed perspective projection matrix based on a field of view.  <a href=\"a00243.html#gaf32bf563f28379c68554a44ee60c6a85\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf32bf563f28379c68554a44ee60c6a85\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga257b733ff883c9a065801023cf243eb2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga257b733ff883c9a065801023cf243eb2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga257b733ff883c9a065801023cf243eb2\">perspectiveFovRH_NO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:ga257b733ff883c9a065801023cf243eb2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using right-handed coordinates.  <a href=\"a00243.html#ga257b733ff883c9a065801023cf243eb2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga257b733ff883c9a065801023cf243eb2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dcbb25331676f5b0795aced1a905c44\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7dcbb25331676f5b0795aced1a905c44\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga7dcbb25331676f5b0795aced1a905c44\">perspectiveFovRH_ZO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:ga7dcbb25331676f5b0795aced1a905c44\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using right-handed coordinates.  <a href=\"a00243.html#ga7dcbb25331676f5b0795aced1a905c44\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7dcbb25331676f5b0795aced1a905c44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4bc69fa1d1f95128430aa3d2a712390b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga4bc69fa1d1f95128430aa3d2a712390b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b\">perspectiveFovZO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:ga4bc69fa1d1f95128430aa3d2a712390b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4bc69fa1d1f95128430aa3d2a712390b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bd34951dc7022ac256fcb51d7f6fc2f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9bd34951dc7022ac256fcb51d7f6fc2f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f\">perspectiveLH</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:ga9bd34951dc7022ac256fcb51d7f6fc2f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a left handed, symetric perspective-view frustum.  <a href=\"a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9bd34951dc7022ac256fcb51d7f6fc2f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaead4d049d1feab463b700b5641aa590e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaead4d049d1feab463b700b5641aa590e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaead4d049d1feab463b700b5641aa590e\">perspectiveLH_NO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gaead4d049d1feab463b700b5641aa590e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a left handed, symetric perspective-view frustum.  <a href=\"a00243.html#gaead4d049d1feab463b700b5641aa590e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaead4d049d1feab463b700b5641aa590e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaca32af88c2719005c02817ad1142986c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaca32af88c2719005c02817ad1142986c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaca32af88c2719005c02817ad1142986c\">perspectiveLH_ZO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gaca32af88c2719005c02817ad1142986c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a left handed, symetric perspective-view frustum.  <a href=\"a00243.html#gaca32af88c2719005c02817ad1142986c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaca32af88c2719005c02817ad1142986c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf497e6bca61e7c87088370b126a93758\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf497e6bca61e7c87088370b126a93758\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaf497e6bca61e7c87088370b126a93758\">perspectiveNO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gaf497e6bca61e7c87088370b126a93758\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gaf497e6bca61e7c87088370b126a93758\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf497e6bca61e7c87088370b126a93758\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26b88757fbd90601b80768a7e1ad3aa1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga26b88757fbd90601b80768a7e1ad3aa1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1\">perspectiveRH</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:ga26b88757fbd90601b80768a7e1ad3aa1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a right handed, symetric perspective-view frustum.  <a href=\"a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga26b88757fbd90601b80768a7e1ad3aa1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1526cb2cbe796095284e8f34b01c582\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gad1526cb2cbe796095284e8f34b01c582\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gad1526cb2cbe796095284e8f34b01c582\">perspectiveRH_NO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gad1526cb2cbe796095284e8f34b01c582\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a right handed, symetric perspective-view frustum.  <a href=\"a00243.html#gad1526cb2cbe796095284e8f34b01c582\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1526cb2cbe796095284e8f34b01c582\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\">perspectiveRH_ZO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a right handed, symetric perspective-view frustum.  <a href=\"a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9dfba5c2322da54f72b1eb7c7c11b47\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa9dfba5c2322da54f72b1eb7c7c11b47\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47\">perspectiveZO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gaa9dfba5c2322da54f72b1eb7c7c11b47\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9dfba5c2322da54f72b1eb7c7c11b47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaaeacc04a2a6f4b18c5899d37e7bb3ef9\">tweakedInfinitePerspective</a> (T fovy, T aspect, T near)</td></tr>\n<tr class=\"memdesc:gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.  <a href=\"a00243.html#gaaeacc04a2a6f4b18c5899d37e7bb3ef9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5b3c85ff6737030a1d2214474ffa7a8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf5b3c85ff6737030a1d2214474ffa7a8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8\">tweakedInfinitePerspective</a> (T fovy, T aspect, T near, T ep)</td></tr>\n<tr class=\"memdesc:gaf5b3c85ff6737030a1d2214474ffa7a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.  <a href=\"a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5b3c85ff6737030a1d2214474ffa7a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00243.html\">GLM_EXT_matrix_clip_space</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00059_source.html\">matrix_clip_space.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00059_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_clip_space.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_clip_space.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00059.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../trigonometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_matrix_clip_space extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga6615d8a9d39432e279c4575313ecb456\">ortho</a>(</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                T left, T right, T bottom, T top);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gab37ac3eec8d61f22fceda7775e836afa\">orthoLH_ZO</a>(</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga526416735ea7c5c5cd255bf99d051bd8\">orthoLH_NO</a>(</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588\">orthoRH_ZO</a>(</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780\">orthoRH_NO</a>(</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaea11a70817af2c0801c869dea0b7a5bc\">orthoZO</a>(</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gab219d28a8f178d4517448fcd6395a073\">orthoNO</a>(</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gad122a79aadaa5529cec4ac197203db7f\">orthoLH</a>(</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4\">orthoRH</a>(</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga6615d8a9d39432e279c4575313ecb456\">ortho</a>(</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                T left, T right, T bottom, T top, T zNear, T zFar);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga94218b094862d17798370242680b9030\">frustumLH_ZO</a>(</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga259520cad03b3f8bca9417920035ed01\">frustumLH_NO</a>(</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga7654a9227f14d5382786b9fc0eb5692d\">frustumRH_ZO</a>(</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga9236c8439f21be186b79c97b588836b9\">frustumRH_NO</a>(</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaa73322e152edf50cf30a6edac342a757\">frustumZO</a>(</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90\">frustumNO</a>(</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gae4277c37f61d81da01bc9db14ea90296\">frustumLH</a>(</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136\">frustumRH</a>(</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9\">frustum</a>(</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;                T left, T right, T bottom, T top, T near, T far);</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\">perspectiveRH_ZO</a>(</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gad1526cb2cbe796095284e8f34b01c582\">perspectiveRH_NO</a>(</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaca32af88c2719005c02817ad1142986c\">perspectiveLH_ZO</a>(</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaead4d049d1feab463b700b5641aa590e\">perspectiveLH_NO</a>(</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47\">perspectiveZO</a>(</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaf497e6bca61e7c87088370b126a93758\">perspectiveNO</a>(</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1\">perspectiveRH</a>(</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f\">perspectiveLH</a>(</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787\">perspective</a>(</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;                T fovy, T aspect, T near, T far);</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga7dcbb25331676f5b0795aced1a905c44\">perspectiveFovRH_ZO</a>(</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga257b733ff883c9a065801023cf243eb2\">perspectiveFovRH_NO</a>(</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c\">perspectiveFovLH_ZO</a>(</div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gad18a4495b77530317327e8d466488c1a\">perspectiveFovLH_NO</a>(</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;</div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b\">perspectiveFovZO</a>(</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaf30e7bd3b1387a6776433dd5383e6633\">perspectiveFovNO</a>(</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaf32bf563f28379c68554a44ee60c6a85\">perspectiveFovRH</a>(</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;</div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa\">perspectiveFovLH</a>(</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaebd02240fd36e85ad754f02ddd9a560d\">perspectiveFov</a>(</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;                T fov, T width, T height, T near, T far);</div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9\">infinitePerspectiveLH</a>(</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;                T fovy, T aspect, T near);</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga99672ffe5714ef478dab2437255fe7e1\">infinitePerspectiveRH</a>(</div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;                T fovy, T aspect, T near);</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#ga44fa38a18349450325cae2661bb115ca\">infinitePerspective</a>(</div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;                T fovy, T aspect, T near);</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;</div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8\">tweakedInfinitePerspective</a>(</div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;                T fovy, T aspect, T near);</div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;</div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8\">tweakedInfinitePerspective</a>(</div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;                T fovy, T aspect, T near, T ep);</div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;</div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;</div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_clip_space.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00243_html_ga9236c8439f21be186b79c97b588836b9\"><div class=\"ttname\"><a href=\"a00243.html#ga9236c8439f21be186b79c97b588836b9\">glm::frustumRH_NO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustumRH_NO(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a right handed frustum matrix. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga44fa38a18349450325cae2661bb115ca\"><div class=\"ttname\"><a href=\"a00243.html#ga44fa38a18349450325cae2661bb115ca\">glm::infinitePerspective</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; infinitePerspective(T fovy, T aspect, T near)</div><div class=\"ttdoc\">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default han...</div></div>\n<div class=\"ttc\" id=\"a00243_html_gaea11a70817af2c0801c869dea0b7a5bc\"><div class=\"ttname\"><a href=\"a00243.html#gaea11a70817af2c0801c869dea0b7a5bc\">glm::orthoZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; orthoZO(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gaf5b3c85ff6737030a1d2214474ffa7a8\"><div class=\"ttname\"><a href=\"a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8\">glm::tweakedInfinitePerspective</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; tweakedInfinitePerspective(T fovy, T aspect, T near, T ep)</div><div class=\"ttdoc\">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics har...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga16264c9b838edeb9dd1de7a1010a13a4\"><div class=\"ttname\"><a href=\"a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4\">glm::orthoRH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; orthoRH(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga6aebe16c164bd8e52554cbe0304ef4aa\"><div class=\"ttname\"><a href=\"a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa\">glm::perspectiveFovLH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFovLH(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a left handed perspective projection matrix based on a field of view. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga94218b094862d17798370242680b9030\"><div class=\"ttname\"><a href=\"a00243.html#ga94218b094862d17798370242680b9030\">glm::frustumLH_ZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustumLH_ZO(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a left handed frustum matrix. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga259520cad03b3f8bca9417920035ed01\"><div class=\"ttname\"><a href=\"a00243.html#ga259520cad03b3f8bca9417920035ed01\">glm::frustumLH_NO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustumLH_NO(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a left handed frustum matrix. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gae34ec664ad44860bf4b5ba631f0e0e90\"><div class=\"ttname\"><a href=\"a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90\">glm::frustumNO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustumNO(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-h...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga4366ab45880c6c5f8b3e8c371ca4b136\"><div class=\"ttname\"><a href=\"a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136\">glm::frustumRH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustumRH(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a right handed frustum matrix. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gae4277c37f61d81da01bc9db14ea90296\"><div class=\"ttname\"><a href=\"a00243.html#gae4277c37f61d81da01bc9db14ea90296\">glm::frustumLH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustumLH(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a left handed frustum matrix. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga257b733ff883c9a065801023cf243eb2\"><div class=\"ttname\"><a href=\"a00243.html#ga257b733ff883c9a065801023cf243eb2\">glm::perspectiveFovRH_NO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFovRH_NO(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a perspective projection matrix based on a field of view using right-handed coordinates...</div></div>\n<div class=\"ttc\" id=\"a00243_html_gaebd02240fd36e85ad754f02ddd9a560d\"><div class=\"ttname\"><a href=\"a00243.html#gaebd02240fd36e85ad754f02ddd9a560d\">glm::perspectiveFov</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFov(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a perspective projection matrix based on a field of view and the default handedness and defaul...</div></div>\n<div class=\"ttc\" id=\"a00243_html_gaf32bf563f28379c68554a44ee60c6a85\"><div class=\"ttname\"><a href=\"a00243.html#gaf32bf563f28379c68554a44ee60c6a85\">glm::perspectiveFovRH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFovRH(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a right handed perspective projection matrix based on a field of view. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga7654a9227f14d5382786b9fc0eb5692d\"><div class=\"ttname\"><a href=\"a00243.html#ga7654a9227f14d5382786b9fc0eb5692d\">glm::frustumRH_ZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustumRH_ZO(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a right handed frustum matrix. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gab37ac3eec8d61f22fceda7775e836afa\"><div class=\"ttname\"><a href=\"a00243.html#gab37ac3eec8d61f22fceda7775e836afa\">glm::orthoLH_ZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; orthoLH_ZO(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gaca32af88c2719005c02817ad1142986c\"><div class=\"ttname\"><a href=\"a00243.html#gaca32af88c2719005c02817ad1142986c\">glm::perspectiveLH_ZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveLH_ZO(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a left handed, symetric perspective-view frustum. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gad1526cb2cbe796095284e8f34b01c582\"><div class=\"ttname\"><a href=\"a00243.html#gad1526cb2cbe796095284e8f34b01c582\">glm::perspectiveRH_NO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveRH_NO(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a right handed, symetric perspective-view frustum. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gaa2f7a1373170bf0a4a2ddef9b0706780\"><div class=\"ttname\"><a href=\"a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780\">glm::orthoRH_NO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; orthoRH_NO(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gaead4d049d1feab463b700b5641aa590e\"><div class=\"ttname\"><a href=\"a00243.html#gaead4d049d1feab463b700b5641aa590e\">glm::perspectiveLH_NO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveLH_NO(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a left handed, symetric perspective-view frustum. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga6615d8a9d39432e279c4575313ecb456\"><div class=\"ttname\"><a href=\"a00243.html#ga6615d8a9d39432e279c4575313ecb456\">glm::ortho</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; ortho(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume, using the default handedness and defaul...</div></div>\n<div class=\"ttc\" id=\"a00243_html_gabdd37014f529e25b2fa1b3ba06c10d5c\"><div class=\"ttname\"><a href=\"a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c\">glm::perspectiveFovLH_ZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFovLH_ZO(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a perspective projection matrix based on a field of view using left-handed coordinates...</div></div>\n<div class=\"ttc\" id=\"a00243_html_gaa73322e152edf50cf30a6edac342a757\"><div class=\"ttname\"><a href=\"a00243.html#gaa73322e152edf50cf30a6edac342a757\">glm::frustumZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustumZO(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-h...</div></div>\n<div class=\"ttc\" id=\"a00243_html_gad122a79aadaa5529cec4ac197203db7f\"><div class=\"ttname\"><a href=\"a00243.html#gad122a79aadaa5529cec4ac197203db7f\">glm::orthoLH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; orthoLH(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gab219d28a8f178d4517448fcd6395a073\"><div class=\"ttname\"><a href=\"a00243.html#gab219d28a8f178d4517448fcd6395a073\">glm::orthoNO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; orthoNO(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FO...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga526416735ea7c5c5cd255bf99d051bd8\"><div class=\"ttname\"><a href=\"a00243.html#ga526416735ea7c5c5cd255bf99d051bd8\">glm::orthoLH_NO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; orthoLH_NO(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume using right-handed coordinates. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gaf30e7bd3b1387a6776433dd5383e6633\"><div class=\"ttname\"><a href=\"a00243.html#gaf30e7bd3b1387a6776433dd5383e6633\">glm::perspectiveFovNO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFovNO(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga747c8cf99458663dd7ad1bb3a2f07787\"><div class=\"ttname\"><a href=\"a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787\">glm::perspective</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspective(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a symetric perspective-view frustum based on the default handedness and default ...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga9aea2e515b08fd7dce47b7b6ec34d588\"><div class=\"ttname\"><a href=\"a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588\">glm::orthoRH_ZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; orthoRH_ZO(T left, T right, T bottom, T top, T zNear, T zFar)</div><div class=\"ttdoc\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga4bc69fa1d1f95128430aa3d2a712390b\"><div class=\"ttname\"><a href=\"a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b\">glm::perspectiveFovZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFovZO(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga99672ffe5714ef478dab2437255fe7e1\"><div class=\"ttname\"><a href=\"a00243.html#ga99672ffe5714ef478dab2437255fe7e1\">glm::infinitePerspectiveRH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; infinitePerspectiveRH(T fovy, T aspect, T near)</div><div class=\"ttdoc\">Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite...</div></div>\n<div class=\"ttc\" id=\"a00243_html_gaf497e6bca61e7c87088370b126a93758\"><div class=\"ttname\"><a href=\"a00243.html#gaf497e6bca61e7c87088370b126a93758\">glm::perspectiveNO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveNO(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_L...</div></div>\n<div class=\"ttc\" id=\"a00243_html_gad18a4495b77530317327e8d466488c1a\"><div class=\"ttname\"><a href=\"a00243.html#gad18a4495b77530317327e8d466488c1a\">glm::perspectiveFovLH_NO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFovLH_NO(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a perspective projection matrix based on a field of view using left-handed coordinates...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><div class=\"ttname\"><a href=\"a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\">glm::perspectiveRH_ZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveRH_ZO(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a right handed, symetric perspective-view frustum. </div></div>\n<div class=\"ttc\" id=\"a00243_html_gaa9dfba5c2322da54f72b1eb7c7c11b47\"><div class=\"ttname\"><a href=\"a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47\">glm::perspectiveZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveZO(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_L...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga3201b30f5b3ea0f933246d87bfb992a9\"><div class=\"ttname\"><a href=\"a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9\">glm::infinitePerspectiveLH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; infinitePerspectiveLH(T fovy, T aspect, T near)</div><div class=\"ttdoc\">Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga9bd34951dc7022ac256fcb51d7f6fc2f\"><div class=\"ttname\"><a href=\"a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f\">glm::perspectiveLH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveLH(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a left handed, symetric perspective-view frustum. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga7dcbb25331676f5b0795aced1a905c44\"><div class=\"ttname\"><a href=\"a00243.html#ga7dcbb25331676f5b0795aced1a905c44\">glm::perspectiveFovRH_ZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveFovRH_ZO(T fov, T width, T height, T near, T far)</div><div class=\"ttdoc\">Builds a perspective projection matrix based on a field of view using right-handed coordinates...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga0bcd4542e0affc63a0b8c08fcb839ea9\"><div class=\"ttname\"><a href=\"a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9\">glm::frustum</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; frustum(T left, T right, T bottom, T top, T near, T far)</div><div class=\"ttdoc\">Creates a frustum matrix with default handedness, using the default handedness and default near and f...</div></div>\n<div class=\"ttc\" id=\"a00243_html_ga26b88757fbd90601b80768a7e1ad3aa1\"><div class=\"ttname\"><a href=\"a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1\">glm::perspectiveRH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspectiveRH(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a right handed, symetric perspective-view frustum. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00060.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_common.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_common.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00244.html\">GLM_EXT_matrix_common</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00060_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00244.html\">GLM_EXT_matrix_common</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00060_source.html\">matrix_common.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00060_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_common.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_common.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00060.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/_fixes.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_matrix_transform extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;        GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, mat&lt;C, R, U, Q&gt; <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;        GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, U a);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_common.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00241_html_ga8e93f374aae27d1a88b921860351f8d4\"><div class=\"ttname\"><a href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">glm::mix</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a)</div><div class=\"ttdoc\">If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of ...</div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00061.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_cross_product.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_cross_product.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00334.html\">GLM_GTX_matrix_cross_product</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00061_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga5802386bb4c37b3332a3b6fd8b6960ff\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5802386bb4c37b3332a3b6fd8b6960ff\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff\">matrixCross3</a> (vec&lt; 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga5802386bb4c37b3332a3b6fd8b6960ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a cross product matrix.  <a href=\"a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5802386bb4c37b3332a3b6fd8b6960ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20057fff91ddafa102934adb25458cde\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga20057fff91ddafa102934adb25458cde\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00334.html#ga20057fff91ddafa102934adb25458cde\">matrixCross4</a> (vec&lt; 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga20057fff91ddafa102934adb25458cde\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a cross product matrix.  <a href=\"a00334.html#ga20057fff91ddafa102934adb25458cde\">More...</a><br /></td></tr>\n<tr class=\"separator:ga20057fff91ddafa102934adb25458cde\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00334.html\">GLM_GTX_matrix_cross_product</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\ngtx_extented_min_max (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00061_source.html\">matrix_cross_product.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00061_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_cross_product.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_cross_product.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00061.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_cross_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_cross_product extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff\">matrixCross3</a>(</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00334.html#ga20057fff91ddafa102934adb25458cde\">matrixCross4</a>(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_cross_product.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00334_html_ga20057fff91ddafa102934adb25458cde\"><div class=\"ttname\"><a href=\"a00334.html#ga20057fff91ddafa102934adb25458cde\">glm::matrixCross4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; matrixCross4(vec&lt; 3, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Build a cross product matrix. </div></div>\n<div class=\"ttc\" id=\"a00334_html_ga5802386bb4c37b3332a3b6fd8b6960ff\"><div class=\"ttname\"><a href=\"a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff\">glm::matrixCross3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; matrixCross3(vec&lt; 3, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Build a cross product matrix. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00062.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_decompose.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_decompose.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00335.html\">GLM_GTX_matrix_decompose</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00062_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gac0e342656ba09a9bc97c57182ba73124\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac0e342656ba09a9bc97c57182ba73124\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00335.html#gac0e342656ba09a9bc97c57182ba73124\">decompose</a> (mat&lt; 4, 4, T, Q &gt; const &amp;modelMatrix, vec&lt; 3, T, Q &gt; &amp;scale, qua&lt; T, Q &gt; &amp;orientation, vec&lt; 3, T, Q &gt; &amp;translation, vec&lt; 3, T, Q &gt; &amp;skew, vec&lt; 4, T, Q &gt; &amp;perspective)</td></tr>\n<tr class=\"memdesc:gac0e342656ba09a9bc97c57182ba73124\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Decomposes a model matrix to translations, rotation and scale components.  <a href=\"a00335.html#gac0e342656ba09a9bc97c57182ba73124\">More...</a><br /></td></tr>\n<tr class=\"separator:gac0e342656ba09a9bc97c57182ba73124\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00335.html\">GLM_GTX_matrix_decompose</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00062_source.html\">matrix_decompose.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00062_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_decompose.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_decompose.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00062.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/matrix_transform.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_decompose is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_decompose extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00335.html#gac0e342656ba09a9bc97c57182ba73124\">decompose</a>(</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; modelMatrix,</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                vec&lt;3, T, Q&gt; &amp; <a class=\"code\" href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">scale</a>, qua&lt;T, Q&gt; &amp; <a class=\"code\" href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">orientation</a>, vec&lt;3, T, Q&gt; &amp; translation, vec&lt;3, T, Q&gt; &amp; skew, vec&lt;4, T, Q&gt; &amp; <a class=\"code\" href=\"a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787\">perspective</a>);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_decompose.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00335_html_gac0e342656ba09a9bc97c57182ba73124\"><div class=\"ttname\"><a href=\"a00335.html#gac0e342656ba09a9bc97c57182ba73124\">glm::decompose</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool decompose(mat&lt; 4, 4, T, Q &gt; const &amp;modelMatrix, vec&lt; 3, T, Q &gt; &amp;scale, qua&lt; T, Q &gt; &amp;orientation, vec&lt; 3, T, Q &gt; &amp;translation, vec&lt; 3, T, Q &gt; &amp;skew, vec&lt; 4, T, Q &gt; &amp;perspective)</div><div class=\"ttdoc\">Decomposes a model matrix to translations, rotation and scale components. </div></div>\n<div class=\"ttc\" id=\"a00247_html_ga05051adbee603fb3c5095d8cf5cc229b\"><div class=\"ttname\"><a href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">glm::scale</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; scale(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Builds a scale 4 * 4 matrix created from 3 scalars. </div></div>\n<div class=\"ttc\" id=\"a00243_html_ga747c8cf99458663dd7ad1bb3a2f07787\"><div class=\"ttname\"><a href=\"a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787\">glm::perspective</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; perspective(T fovy, T aspect, T near, T far)</div><div class=\"ttdoc\">Creates a matrix for a symetric perspective-view frustum based on the default handedness and default ...</div></div>\n<div class=\"ttc\" id=\"a00356_html_ga1a32fceb71962e6160e8af295c91930a\"><div class=\"ttname\"><a href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">glm::orientation</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; orientation(vec&lt; 3, T, Q &gt; const &amp;Normal, vec&lt; 3, T, Q &gt; const &amp;Up)</div><div class=\"ttdoc\">Build a rotation matrix from a normal and a up vector. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00063.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00063_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga21dbd1f987775d7cc7607c139531c7e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">dmat2</a></td></tr>\n<tr class=\"memdesc:ga21dbd1f987775d7cc7607c139531c7e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga21dbd1f987775d7cc7607c139531c7e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66b6a9af787e468a46dfe24189e87f9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga66b6a9af787e468a46dfe24189e87f9b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66b6a9af787e468a46dfe24189e87f9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00063_source.html\">matrix_double2x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00063_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00063.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">   20</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_ga21dbd1f987775d7cc7607c139531c7e6\"><div class=\"ttname\"><a href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">glm::dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, defaultp &gt; dmat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00063_source.html#l00020\">matrix_double2x2.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga66b6a9af787e468a46dfe24189e87f9b\"><div class=\"ttname\"><a href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">glm::dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, defaultp &gt; dmat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00063_source.html#l00015\">matrix_double2x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00064.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00064_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga369b447bb1b312449b679ea1f90f3cea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">highp_dmat2</a></td></tr>\n<tr class=\"memdesc:ga369b447bb1b312449b679ea1f90f3cea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">More...</a><br /></td></tr>\n<tr class=\"separator:ga369b447bb1b312449b679ea1f90f3cea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae27ac20302c2e39b6c78e7fe18e62ef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">highp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gae27ac20302c2e39b6c78e7fe18e62ef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">More...</a><br /></td></tr>\n<tr class=\"separator:gae27ac20302c2e39b6c78e7fe18e62ef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8e2727a6e7aa68280245bb0022118e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">lowp_dmat2</a></td></tr>\n<tr class=\"memdesc:gad8e2727a6e7aa68280245bb0022118e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">More...</a><br /></td></tr>\n<tr class=\"separator:gad8e2727a6e7aa68280245bb0022118e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac61b94f5d9775f83f321bac899322fe2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">lowp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gac61b94f5d9775f83f321bac899322fe2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">More...</a><br /></td></tr>\n<tr class=\"separator:gac61b94f5d9775f83f321bac899322fe2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6205fd19be355600334edef6af0b27cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">mediump_dmat2</a></td></tr>\n<tr class=\"memdesc:ga6205fd19be355600334edef6af0b27cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6205fd19be355600334edef6af0b27cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga51dc36a7719cb458fa5114831c20d64f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">mediump_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga51dc36a7719cb458fa5114831c20d64f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga51dc36a7719cb458fa5114831c20d64f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00064_source.html\">matrix_double2x2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00064_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00064.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">lowp_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">mediump_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">highp_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">   34</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">lowp_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">   40</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">mediump_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">highp_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga6205fd19be355600334edef6af0b27cb\"><div class=\"ttname\"><a href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">glm::mediump_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, mediump &gt; mediump_dmat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00022\">matrix_double2x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gad8e2727a6e7aa68280245bb0022118e1\"><div class=\"ttname\"><a href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">glm::lowp_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, lowp &gt; lowp_dmat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00016\">matrix_double2x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga51dc36a7719cb458fa5114831c20d64f\"><div class=\"ttname\"><a href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">glm::mediump_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, mediump &gt; mediump_dmat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00040\">matrix_double2x2_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae27ac20302c2e39b6c78e7fe18e62ef7\"><div class=\"ttname\"><a href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">glm::highp_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, highp &gt; highp_dmat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00046\">matrix_double2x2_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga369b447bb1b312449b679ea1f90f3cea\"><div class=\"ttname\"><a href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">glm::highp_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, highp &gt; highp_dmat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00028\">matrix_double2x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gac61b94f5d9775f83f321bac899322fe2\"><div class=\"ttname\"><a href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">glm::lowp_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, lowp &gt; lowp_dmat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00064_source.html#l00034\">matrix_double2x2_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00065.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00065_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga92cd388753d48e20de69ea2dbedf826a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga92cd388753d48e20de69ea2dbedf826a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga92cd388753d48e20de69ea2dbedf826a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00065_source.html\">matrix_double2x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00065_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00065.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_ga92cd388753d48e20de69ea2dbedf826a\"><div class=\"ttname\"><a href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">glm::dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, defaultp &gt; dmat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00065_source.html#l00015\">matrix_double2x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00066.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00066_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gad4689ec33bc2c26e10132b174b49001a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">highp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gad4689ec33bc2c26e10132b174b49001a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad4689ec33bc2c26e10132b174b49001a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6bf2f5bde7ad5b9c289f777b93094af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">lowp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gaf6bf2f5bde7ad5b9c289f777b93094af\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6bf2f5bde7ad5b9c289f777b93094af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga741e05adf1f12d5d913f67088db1009a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">mediump_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga741e05adf1f12d5d913f67088db1009a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga741e05adf1f12d5d913f67088db1009a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00066_source.html\">matrix_double2x3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00066_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00066.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">lowp_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">mediump_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">highp_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga741e05adf1f12d5d913f67088db1009a\"><div class=\"ttname\"><a href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">glm::mediump_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, mediump &gt; mediump_dmat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00066_source.html#l00022\">matrix_double2x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gad4689ec33bc2c26e10132b174b49001a\"><div class=\"ttname\"><a href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">glm::highp_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, highp &gt; highp_dmat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00066_source.html#l00028\">matrix_double2x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaf6bf2f5bde7ad5b9c289f777b93094af\"><div class=\"ttname\"><a href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">glm::lowp_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, lowp &gt; lowp_dmat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00066_source.html#l00016\">matrix_double2x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00067.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00067_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaef2198807e937072803ae0ae45e1965e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">dmat2x4</a></td></tr>\n<tr class=\"memdesc:gaef2198807e937072803ae0ae45e1965e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaef2198807e937072803ae0ae45e1965e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00067_source.html\">matrix_double2x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00067_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00067.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gaef2198807e937072803ae0ae45e1965e\"><div class=\"ttname\"><a href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">glm::dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, defaultp &gt; dmat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00067_source.html#l00015\">matrix_double2x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00068.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00068_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga5ceeb46670fdc000a0701910cc5061c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">highp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga5ceeb46670fdc000a0701910cc5061c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5ceeb46670fdc000a0701910cc5061c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga97507a31ecee8609887d0f23bbde92c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">lowp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga97507a31ecee8609887d0f23bbde92c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga97507a31ecee8609887d0f23bbde92c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga685bda24922d112786af385deb4deb43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">mediump_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga685bda24922d112786af385deb4deb43\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">More...</a><br /></td></tr>\n<tr class=\"separator:ga685bda24922d112786af385deb4deb43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00068_source.html\">matrix_double2x4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00068_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double2x4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double2x4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00068.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">lowp_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">mediump_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">highp_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga5ceeb46670fdc000a0701910cc5061c9\"><div class=\"ttname\"><a href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">glm::highp_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, highp &gt; highp_dmat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00068_source.html#l00028\">matrix_double2x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga685bda24922d112786af385deb4deb43\"><div class=\"ttname\"><a href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">glm::mediump_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, mediump &gt; mediump_dmat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00068_source.html#l00022\">matrix_double2x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga97507a31ecee8609887d0f23bbde92c7\"><div class=\"ttname\"><a href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">glm::lowp_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, lowp &gt; lowp_dmat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00068_source.html#l00016\">matrix_double2x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00069.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00069_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga001e3e0638fbf8719788fc64c5b8cf39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga001e3e0638fbf8719788fc64c5b8cf39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">More...</a><br /></td></tr>\n<tr class=\"separator:ga001e3e0638fbf8719788fc64c5b8cf39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00069_source.html\">matrix_double3x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00069_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00069.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_ga001e3e0638fbf8719788fc64c5b8cf39\"><div class=\"ttname\"><a href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">glm::dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, defaultp &gt; dmat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00069_source.html#l00015\">matrix_double3x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00070.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00070_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga3647309010a2160e9ec89bc6f7c95c35\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">highp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga3647309010a2160e9ec89bc6f7c95c35\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3647309010a2160e9ec89bc6f7c95c35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1e0ea3fba496bc7c6f620d2590acb66b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">lowp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga1e0ea3fba496bc7c6f620d2590acb66b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e0ea3fba496bc7c6f620d2590acb66b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2076157df85e49b8c021e03e46a376c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">mediump_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga2076157df85e49b8c021e03e46a376c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2076157df85e49b8c021e03e46a376c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00070_source.html\">matrix_double3x2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00070_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00070.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">lowp_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">mediump_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">highp_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga2076157df85e49b8c021e03e46a376c1\"><div class=\"ttname\"><a href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">glm::mediump_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, mediump &gt; mediump_dmat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00070_source.html#l00022\">matrix_double3x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga1e0ea3fba496bc7c6f620d2590acb66b\"><div class=\"ttname\"><a href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">glm::lowp_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, lowp &gt; lowp_dmat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00070_source.html#l00016\">matrix_double3x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3647309010a2160e9ec89bc6f7c95c35\"><div class=\"ttname\"><a href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">glm::highp_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, highp &gt; highp_dmat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00070_source.html#l00028\">matrix_double3x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00071.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00071_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga6f40aa56265b4b0ccad41b86802efe33\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">dmat3</a></td></tr>\n<tr class=\"memdesc:ga6f40aa56265b4b0ccad41b86802efe33\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6f40aa56265b4b0ccad41b86802efe33\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga970cb3306be25a5ca5db5a9456831228\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga970cb3306be25a5ca5db5a9456831228\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">More...</a><br /></td></tr>\n<tr class=\"separator:ga970cb3306be25a5ca5db5a9456831228\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00071_source.html\">matrix_double3x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00071_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00071.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">   20</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_ga970cb3306be25a5ca5db5a9456831228\"><div class=\"ttname\"><a href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">glm::dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, defaultp &gt; dmat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00071_source.html#l00015\">matrix_double3x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga6f40aa56265b4b0ccad41b86802efe33\"><div class=\"ttname\"><a href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">glm::dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, defaultp &gt; dmat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00071_source.html#l00020\">matrix_double3x3.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00072.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00072_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga86d6d4dbad92ffdcc759773340e15a97\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">highp_dmat3</a></td></tr>\n<tr class=\"memdesc:ga86d6d4dbad92ffdcc759773340e15a97\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">More...</a><br /></td></tr>\n<tr class=\"separator:ga86d6d4dbad92ffdcc759773340e15a97\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae367ea93c4ad8a7c101dd27b8b2b04ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">highp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:gae367ea93c4ad8a7c101dd27b8b2b04ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">More...</a><br /></td></tr>\n<tr class=\"separator:gae367ea93c4ad8a7c101dd27b8b2b04ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0cab80beee64a5f8d2ae4e823983063a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">lowp_dmat3</a></td></tr>\n<tr class=\"memdesc:ga0cab80beee64a5f8d2ae4e823983063a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0cab80beee64a5f8d2ae4e823983063a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac017848a9df570f60916a21a297b1e8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">lowp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:gac017848a9df570f60916a21a297b1e8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac017848a9df570f60916a21a297b1e8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga939fbf9c53008a8e84c7dd7cf8de29e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">mediump_dmat3</a></td></tr>\n<tr class=\"memdesc:ga939fbf9c53008a8e84c7dd7cf8de29e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga939fbf9c53008a8e84c7dd7cf8de29e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga47bd2aae4701ee2fc865674a9df3d7a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">mediump_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga47bd2aae4701ee2fc865674a9df3d7a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga47bd2aae4701ee2fc865674a9df3d7a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00072_source.html\">matrix_double3x3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00072_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00072.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">lowp_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">mediump_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">highp_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">   34</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">lowp_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">   40</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">mediump_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">highp_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga0cab80beee64a5f8d2ae4e823983063a\"><div class=\"ttname\"><a href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">glm::lowp_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, lowp &gt; lowp_dmat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00016\">matrix_double3x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gac017848a9df570f60916a21a297b1e8e\"><div class=\"ttname\"><a href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">glm::lowp_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, lowp &gt; lowp_dmat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00034\">matrix_double3x3_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga86d6d4dbad92ffdcc759773340e15a97\"><div class=\"ttname\"><a href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">glm::highp_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, highp &gt; highp_dmat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00028\">matrix_double3x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae367ea93c4ad8a7c101dd27b8b2b04ce\"><div class=\"ttname\"><a href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">glm::highp_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, highp &gt; highp_dmat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00046\">matrix_double3x3_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga47bd2aae4701ee2fc865674a9df3d7a6\"><div class=\"ttname\"><a href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">glm::mediump_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, mediump &gt; mediump_dmat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00040\">matrix_double3x3_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga939fbf9c53008a8e84c7dd7cf8de29e2\"><div class=\"ttname\"><a href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">glm::mediump_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, mediump &gt; mediump_dmat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00072_source.html#l00022\">matrix_double3x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00073.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00073_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga0412a634d183587e6188e9b11869f8f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga0412a634d183587e6188e9b11869f8f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0412a634d183587e6188e9b11869f8f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00073_source.html\">matrix_double3x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00073_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00073.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_ga0412a634d183587e6188e9b11869f8f4\"><div class=\"ttname\"><a href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">glm::dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, defaultp &gt; dmat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00073_source.html#l00015\">matrix_double3x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00074.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00074_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga6543eeeb64f48d79a0b96484308c50f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">highp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga6543eeeb64f48d79a0b96484308c50f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6543eeeb64f48d79a0b96484308c50f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga93add35d2a44c5830978b827e8c295e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">lowp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga93add35d2a44c5830978b827e8c295e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga93add35d2a44c5830978b827e8c295e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a132bd05675c2e46556f67cf738600b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">mediump_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga3a132bd05675c2e46556f67cf738600b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a132bd05675c2e46556f67cf738600b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00074_source.html\">matrix_double3x4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00074_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double3x4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double3x4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00074.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">lowp_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">mediump_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">highp_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga93add35d2a44c5830978b827e8c295e8\"><div class=\"ttname\"><a href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">glm::lowp_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, lowp &gt; lowp_dmat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00074_source.html#l00016\">matrix_double3x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3a132bd05675c2e46556f67cf738600b\"><div class=\"ttname\"><a href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">glm::mediump_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, mediump &gt; mediump_dmat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00074_source.html#l00022\">matrix_double3x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga6543eeeb64f48d79a0b96484308c50f0\"><div class=\"ttname\"><a href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">glm::highp_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, highp &gt; highp_dmat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00074_source.html#l00028\">matrix_double3x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00075.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00075_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00075_source.html\">matrix_double4x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00075_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00075.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"><div class=\"ttname\"><a href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">glm::dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, defaultp &gt; dmat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00075_source.html#l00015\">matrix_double4x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00076.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00076_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaeda1f474c668eaecc443bea85a4a4eca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">highp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gaeda1f474c668eaecc443bea85a4a4eca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeda1f474c668eaecc443bea85a4a4eca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga382dc5295cead78766239a8457abfa98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">lowp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga382dc5295cead78766239a8457abfa98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga382dc5295cead78766239a8457abfa98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae220fa4c5a7b13ef2ab0420340de645c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">mediump_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gae220fa4c5a7b13ef2ab0420340de645c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">More...</a><br /></td></tr>\n<tr class=\"separator:gae220fa4c5a7b13ef2ab0420340de645c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00076_source.html\">matrix_double4x2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00076_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00076.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">lowp_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">mediump_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">highp_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga382dc5295cead78766239a8457abfa98\"><div class=\"ttname\"><a href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">glm::lowp_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, lowp &gt; lowp_dmat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00076_source.html#l00016\">matrix_double4x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae220fa4c5a7b13ef2ab0420340de645c\"><div class=\"ttname\"><a href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">glm::mediump_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, mediump &gt; mediump_dmat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00076_source.html#l00022\">matrix_double4x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaeda1f474c668eaecc443bea85a4a4eca\"><div class=\"ttname\"><a href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">glm::highp_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, highp &gt; highp_dmat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00076_source.html#l00028\">matrix_double4x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00077.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00077_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gacd18864049f8c83799babe7e596ca05b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">dmat4x3</a></td></tr>\n<tr class=\"memdesc:gacd18864049f8c83799babe7e596ca05b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd18864049f8c83799babe7e596ca05b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00077_source.html\">matrix_double4x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00077_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00077.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gacd18864049f8c83799babe7e596ca05b\"><div class=\"ttname\"><a href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">glm::dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, defaultp &gt; dmat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00077_source.html#l00015\">matrix_double4x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00078.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00078_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gacf237c2d8832fe8db2d7e187585d34bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">highp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gacf237c2d8832fe8db2d7e187585d34bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf237c2d8832fe8db2d7e187585d34bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">lowp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43ef60e4d996db15c9c8f069a96ff763\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">mediump_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga43ef60e4d996db15c9c8f069a96ff763\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43ef60e4d996db15c9c8f069a96ff763\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00078_source.html\">matrix_double4x3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00078_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00078.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">lowp_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">mediump_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, highp&gt;        <a class=\"code\" href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">highp_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_gacf237c2d8832fe8db2d7e187585d34bd\"><div class=\"ttname\"><a href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">glm::highp_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, highp &gt; highp_dmat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00078_source.html#l00028\">matrix_double4x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga43ef60e4d996db15c9c8f069a96ff763\"><div class=\"ttname\"><a href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">glm::mediump_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, mediump &gt; mediump_dmat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00078_source.html#l00022\">matrix_double4x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"><div class=\"ttname\"><a href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">glm::lowp_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, lowp &gt; lowp_dmat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00078_source.html#l00016\">matrix_double4x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00079.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00079_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga0f34486bb7fec8e5a5b3830b6a6cbeca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">dmat4</a></td></tr>\n<tr class=\"memdesc:ga0f34486bb7fec8e5a5b3830b6a6cbeca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0f34486bb7fec8e5a5b3830b6a6cbeca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad5a6484b983b74f9d801cab8bc4e6a10\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">dmat4x4</a></td></tr>\n<tr class=\"memdesc:gad5a6484b983b74f9d801cab8bc4e6a10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">More...</a><br /></td></tr>\n<tr class=\"separator:gad5a6484b983b74f9d801cab8bc4e6a10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00079_source.html\">matrix_double4x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00079_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00079.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">   20</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, defaultp&gt;             <a class=\"code\" href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gad5a6484b983b74f9d801cab8bc4e6a10\"><div class=\"ttname\"><a href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">glm::dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, defaultp &gt; dmat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00079_source.html#l00015\">matrix_double4x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga0f34486bb7fec8e5a5b3830b6a6cbeca\"><div class=\"ttname\"><a href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">glm::dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, defaultp &gt; dmat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00079_source.html#l00020\">matrix_double4x4.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00080.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00080_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga945254f459860741138bceb74da496b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga945254f459860741138bceb74da496b9\">highp_dmat4</a></td></tr>\n<tr class=\"memdesc:ga945254f459860741138bceb74da496b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga945254f459860741138bceb74da496b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga945254f459860741138bceb74da496b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga118d24a3d12c034e7cccef7bf2f01b8a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">highp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga118d24a3d12c034e7cccef7bf2f01b8a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga118d24a3d12c034e7cccef7bf2f01b8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga708bc5b91bbfedd21debac8dcf2a64cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">lowp_dmat4</a></td></tr>\n<tr class=\"memdesc:ga708bc5b91bbfedd21debac8dcf2a64cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga708bc5b91bbfedd21debac8dcf2a64cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b0413198b7e9f061f7534a221c9dac9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">lowp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga5b0413198b7e9f061f7534a221c9dac9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b0413198b7e9f061f7534a221c9dac9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf650bc667bf2a0e496b5a9182bc8d378\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">mediump_dmat4</a></td></tr>\n<tr class=\"memdesc:gaf650bc667bf2a0e496b5a9182bc8d378\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf650bc667bf2a0e496b5a9182bc8d378\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5389b3ab32dc0d72bea00057ab6d1dd3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">mediump_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga5389b3ab32dc0d72bea00057ab6d1dd3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5389b3ab32dc0d72bea00057ab6d1dd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00080_source.html\">matrix_double4x4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00080_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_double4x4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_double4x4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00080.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">lowp_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">mediump_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga945254f459860741138bceb74da496b9\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga945254f459860741138bceb74da496b9\">highp_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">   34</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, lowp&gt;         <a class=\"code\" href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">lowp_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">   40</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, mediump&gt;      <a class=\"code\" href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">mediump_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, highp&gt;        <a class=\"code\" href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">highp_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga5389b3ab32dc0d72bea00057ab6d1dd3\"><div class=\"ttname\"><a href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">glm::mediump_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, mediump &gt; mediump_dmat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00040\">matrix_double4x4_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga708bc5b91bbfedd21debac8dcf2a64cd\"><div class=\"ttname\"><a href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">glm::lowp_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, lowp &gt; lowp_dmat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00016\">matrix_double4x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaf650bc667bf2a0e496b5a9182bc8d378\"><div class=\"ttname\"><a href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">glm::mediump_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, mediump &gt; mediump_dmat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00022\">matrix_double4x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga118d24a3d12c034e7cccef7bf2f01b8a\"><div class=\"ttname\"><a href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">glm::highp_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, highp &gt; highp_dmat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00046\">matrix_double4x4_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga5b0413198b7e9f061f7534a221c9dac9\"><div class=\"ttname\"><a href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">glm::lowp_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, lowp &gt; lowp_dmat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00034\">matrix_double4x4_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga945254f459860741138bceb74da496b9\"><div class=\"ttname\"><a href=\"a00284.html#ga945254f459860741138bceb74da496b9\">glm::highp_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, highp &gt; highp_dmat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00080_source.html#l00028\">matrix_double4x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00081.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_factorisation.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_factorisation.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00336.html\">GLM_GTX_matrix_factorisation</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00081_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf39f4e5f78eb29c1a90277d45b9b3feb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf39f4e5f78eb29c1a90277d45b9b3feb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb\">fliplr</a> (mat&lt; C, R, T, Q &gt; const &amp;in)</td></tr>\n<tr class=\"memdesc:gaf39f4e5f78eb29c1a90277d45b9b3feb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Flips the matrix columns right and left.  <a href=\"a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf39f4e5f78eb29c1a90277d45b9b3feb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85003371f0ba97380dd25e8905de1870\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga85003371f0ba97380dd25e8905de1870\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html#ga85003371f0ba97380dd25e8905de1870\">flipud</a> (mat&lt; C, R, T, Q &gt; const &amp;in)</td></tr>\n<tr class=\"memdesc:ga85003371f0ba97380dd25e8905de1870\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Flips the matrix rows up and down.  <a href=\"a00336.html#ga85003371f0ba97380dd25e8905de1870\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85003371f0ba97380dd25e8905de1870\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac62d7bfc8dc661e616620d70552cd566\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac62d7bfc8dc661e616620d70552cd566\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html#gac62d7bfc8dc661e616620d70552cd566\">qr_decompose</a> (mat&lt; C, R, T, Q &gt; const &amp;in, mat&lt;(C&lt; R?C:R), R, T, Q &gt; &amp;q, mat&lt; C,(C&lt; R?C:R), T, Q &gt; &amp;r)</td></tr>\n<tr class=\"memdesc:gac62d7bfc8dc661e616620d70552cd566\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Performs QR factorisation of a matrix.  <a href=\"a00336.html#gac62d7bfc8dc661e616620d70552cd566\">More...</a><br /></td></tr>\n<tr class=\"separator:gac62d7bfc8dc661e616620d70552cd566\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga82874e2ebe891ba35ac21d9993873758\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga82874e2ebe891ba35ac21d9993873758\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html#ga82874e2ebe891ba35ac21d9993873758\">rq_decompose</a> (mat&lt; C, R, T, Q &gt; const &amp;in, mat&lt;(C&lt; R?C:R), R, T, Q &gt; &amp;r, mat&lt; C,(C&lt; R?C:R), T, Q &gt; &amp;q)</td></tr>\n<tr class=\"memdesc:ga82874e2ebe891ba35ac21d9993873758\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Performs RQ factorisation of a matrix.  <a href=\"a00336.html#ga82874e2ebe891ba35ac21d9993873758\">More...</a><br /></td></tr>\n<tr class=\"separator:ga82874e2ebe891ba35ac21d9993873758\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00336.html\">GLM_GTX_matrix_factorisation</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00081_source.html\">matrix_factorisation.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00081_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_factorisation.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_factorisation.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00081.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_factorisation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_factorisation extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"comment\">Suggestions:</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"comment\"> - Move helper functions flipud and fliplr to another file: They may be helpful in more general circumstances.</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"comment\"> - Implement other types of matrix factorisation, such as: QL and LQ, L(D)U, eigendecompositions, etc...</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"comment\">*/</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span> &lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; <a class=\"code\" href=\"a00336.html#ga85003371f0ba97380dd25e8905de1870\">flipud</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; in);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span> &lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; <a class=\"code\" href=\"a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb\">fliplr</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; in);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span> &lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00336.html#gac62d7bfc8dc661e616620d70552cd566\">qr_decompose</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; in, mat&lt;(C &lt; R ? C : R), R, T, Q&gt;&amp; q, mat&lt;C, (C &lt; R ? C : R), T, Q&gt;&amp; r);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"keyword\">template</span> &lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00336.html#ga82874e2ebe891ba35ac21d9993873758\">rq_decompose</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; in, mat&lt;(C &lt; R ? C : R), R, T, Q&gt;&amp; r, mat&lt;C, (C &lt; R ? C : R), T, Q&gt;&amp; q);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;}</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_factorisation.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00336_html_ga82874e2ebe891ba35ac21d9993873758\"><div class=\"ttname\"><a href=\"a00336.html#ga82874e2ebe891ba35ac21d9993873758\">glm::rq_decompose</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void rq_decompose(mat&lt; C, R, T, Q &gt; const &amp;in, mat&lt;(C&lt; R?C:R), R, T, Q &gt; &amp;r, mat&lt; C,(C&lt; R?C:R), T, Q &gt; &amp;q)</div><div class=\"ttdoc\">Performs RQ factorisation of a matrix. </div></div>\n<div class=\"ttc\" id=\"a00336_html_gac62d7bfc8dc661e616620d70552cd566\"><div class=\"ttname\"><a href=\"a00336.html#gac62d7bfc8dc661e616620d70552cd566\">glm::qr_decompose</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void qr_decompose(mat&lt; C, R, T, Q &gt; const &amp;in, mat&lt;(C&lt; R?C:R), R, T, Q &gt; &amp;q, mat&lt; C,(C&lt; R?C:R), T, Q &gt; &amp;r)</div><div class=\"ttdoc\">Performs QR factorisation of a matrix. </div></div>\n<div class=\"ttc\" id=\"a00336_html_ga85003371f0ba97380dd25e8905de1870\"><div class=\"ttname\"><a href=\"a00336.html#ga85003371f0ba97380dd25e8905de1870\">glm::flipud</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt; flipud(mat&lt; C, R, T, Q &gt; const &amp;in)</div><div class=\"ttdoc\">Flips the matrix rows up and down. </div></div>\n<div class=\"ttc\" id=\"a00336_html_gaf39f4e5f78eb29c1a90277d45b9b3feb\"><div class=\"ttname\"><a href=\"a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb\">glm::fliplr</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt; fliplr(mat&lt; C, R, T, Q &gt; const &amp;in)</div><div class=\"ttdoc\">Flips the matrix columns right and left. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00082.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00082_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga8dd59e7fc6913ac5d61b86553e9148ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">mat2</a></td></tr>\n<tr class=\"memdesc:ga8dd59e7fc6913ac5d61b86553e9148ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8dd59e7fc6913ac5d61b86553e9148ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa17ef6bfa4e4f2692348b1460c8efcb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">mat2x2</a></td></tr>\n<tr class=\"memdesc:gaaa17ef6bfa4e4f2692348b1460c8efcb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaa17ef6bfa4e4f2692348b1460c8efcb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00082_source.html\">matrix_float2x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00082_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00082.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, defaultp&gt;              <a class=\"code\" href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">   20</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, defaultp&gt;              <a class=\"code\" href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">mat2</a>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gaaa17ef6bfa4e4f2692348b1460c8efcb\"><div class=\"ttname\"><a href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">glm::mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, defaultp &gt; mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00082_source.html#l00015\">matrix_float2x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga8dd59e7fc6913ac5d61b86553e9148ba\"><div class=\"ttname\"><a href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">glm::mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, defaultp &gt; mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00082_source.html#l00020\">matrix_float2x2.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00083.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00083_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga4d5a0055544a516237dcdace049b143d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">highp_mat2</a></td></tr>\n<tr class=\"memdesc:ga4d5a0055544a516237dcdace049b143d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4d5a0055544a516237dcdace049b143d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2352ae43b284c9f71446674c0208c05d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">highp_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga2352ae43b284c9f71446674c0208c05d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2352ae43b284c9f71446674c0208c05d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae400c4ce1f5f3e1fa12861b2baed331a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">lowp_mat2</a></td></tr>\n<tr class=\"memdesc:gae400c4ce1f5f3e1fa12861b2baed331a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae400c4ce1f5f3e1fa12861b2baed331a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2df7cdaf9a571ce7a1b09435f502c694\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">lowp_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga2df7cdaf9a571ce7a1b09435f502c694\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2df7cdaf9a571ce7a1b09435f502c694\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga745452bd9c89f5ad948203e4fb4b4ea3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">mediump_mat2</a></td></tr>\n<tr class=\"memdesc:ga745452bd9c89f5ad948203e4fb4b4ea3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga745452bd9c89f5ad948203e4fb4b4ea3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0cdf57d29f9448864237b2fb3e39aa1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">mediump_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga0cdf57d29f9448864237b2fb3e39aa1d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0cdf57d29f9448864237b2fb3e39aa1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00083_source.html\">matrix_float2x2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00083_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00083.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">lowp_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">mediump_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">highp_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">   34</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">lowp_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">   40</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">mediump_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">highp_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_gae400c4ce1f5f3e1fa12861b2baed331a\"><div class=\"ttname\"><a href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">glm::lowp_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, lowp &gt; lowp_mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00016\">matrix_float2x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga4d5a0055544a516237dcdace049b143d\"><div class=\"ttname\"><a href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">glm::highp_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, highp &gt; highp_mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00028\">matrix_float2x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2df7cdaf9a571ce7a1b09435f502c694\"><div class=\"ttname\"><a href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">glm::lowp_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, lowp &gt; lowp_mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00034\">matrix_float2x2_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2352ae43b284c9f71446674c0208c05d\"><div class=\"ttname\"><a href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">glm::highp_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, highp &gt; highp_mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00046\">matrix_float2x2_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga0cdf57d29f9448864237b2fb3e39aa1d\"><div class=\"ttname\"><a href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">glm::mediump_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, mediump &gt; mediump_mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00040\">matrix_float2x2_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga745452bd9c89f5ad948203e4fb4b4ea3\"><div class=\"ttname\"><a href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">glm::mediump_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, mediump &gt; mediump_mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00083_source.html#l00022\">matrix_float2x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00084.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00084_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga493ab21243abe564b3f7d381e677d29a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">mat2x3</a></td></tr>\n<tr class=\"memdesc:ga493ab21243abe564b3f7d381e677d29a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga493ab21243abe564b3f7d381e677d29a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00084_source.html\">matrix_float2x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00084_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00084.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, defaultp&gt;              <a class=\"code\" href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_ga493ab21243abe564b3f7d381e677d29a\"><div class=\"ttname\"><a href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">glm::mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, defaultp &gt; mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00084_source.html#l00015\">matrix_float2x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00085.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00085_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga7a0e3fe41512b0494e598f5c58722f19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">highp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga7a0e3fe41512b0494e598f5c58722f19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a0e3fe41512b0494e598f5c58722f19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3eee3a74d0f1de8635d846dfb29ec4bb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">lowp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga3eee3a74d0f1de8635d846dfb29ec4bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3eee3a74d0f1de8635d846dfb29ec4bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga497d513d552d927537d61fa11e3701ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">mediump_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga497d513d552d927537d61fa11e3701ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">More...</a><br /></td></tr>\n<tr class=\"separator:ga497d513d552d927537d61fa11e3701ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00085_source.html\">matrix_float2x3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00085_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00085.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">lowp_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">mediump_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">highp_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga497d513d552d927537d61fa11e3701ab\"><div class=\"ttname\"><a href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">glm::mediump_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, mediump &gt; mediump_mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00085_source.html#l00022\">matrix_float2x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga7a0e3fe41512b0494e598f5c58722f19\"><div class=\"ttname\"><a href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">glm::highp_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, highp &gt; highp_mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00085_source.html#l00028\">matrix_float2x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3eee3a74d0f1de8635d846dfb29ec4bb\"><div class=\"ttname\"><a href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">glm::lowp_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, lowp &gt; lowp_mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00085_source.html#l00016\">matrix_float2x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00086.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00086_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga8e879b57ddd81e5bf5a88929844e8b40\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">mat2x4</a></td></tr>\n<tr class=\"memdesc:ga8e879b57ddd81e5bf5a88929844e8b40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8e879b57ddd81e5bf5a88929844e8b40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00086_source.html\">matrix_float2x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00086_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00086.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, defaultp&gt;              <a class=\"code\" href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_ga8e879b57ddd81e5bf5a88929844e8b40\"><div class=\"ttname\"><a href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">glm::mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, defaultp &gt; mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00086_source.html#l00015\">matrix_float2x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00087.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00087_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">highp_mat2x4</a></td></tr>\n<tr class=\"memdesc:ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade27f8324a16626cbce5d3e7da66b070\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">lowp_mat2x4</a></td></tr>\n<tr class=\"memdesc:gade27f8324a16626cbce5d3e7da66b070\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">More...</a><br /></td></tr>\n<tr class=\"separator:gade27f8324a16626cbce5d3e7da66b070\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7b75ea2e09fa686a79bbe9b6ca68ee5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">mediump_mat2x4</a></td></tr>\n<tr class=\"memdesc:gae7b75ea2e09fa686a79bbe9b6ca68ee5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7b75ea2e09fa686a79bbe9b6ca68ee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00087_source.html\">matrix_float2x4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00087_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float2x4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float2x4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00087.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">lowp_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">mediump_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">highp_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_gade27f8324a16626cbce5d3e7da66b070\"><div class=\"ttname\"><a href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">glm::lowp_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, lowp &gt; lowp_mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00087_source.html#l00016\">matrix_float2x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gae7b75ea2e09fa686a79bbe9b6ca68ee5\"><div class=\"ttname\"><a href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">glm::mediump_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, mediump &gt; mediump_mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00087_source.html#l00022\">matrix_float2x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"><div class=\"ttname\"><a href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">glm::highp_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, highp &gt; highp_mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00087_source.html#l00028\">matrix_float2x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00088.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00088_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga2c27aea32de57d58aec8e92d5d2181e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">mat3x2</a></td></tr>\n<tr class=\"memdesc:ga2c27aea32de57d58aec8e92d5d2181e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of single-precision floating-point numbers.  <a href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c27aea32de57d58aec8e92d5d2181e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00088_source.html\">matrix_float3x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00088_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00088.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, defaultp&gt;                      <a class=\"code\" href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00280_html_ga2c27aea32de57d58aec8e92d5d2181e2\"><div class=\"ttname\"><a href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">glm::mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, defaultp &gt; mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00088_source.html#l00015\">matrix_float3x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00089.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00089_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga1eda47a00027ec440eac05d63739c71b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">highp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga1eda47a00027ec440eac05d63739c71b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1eda47a00027ec440eac05d63739c71b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaabf6cf90fd31efe25c94965507e98390\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">lowp_mat3x2</a></td></tr>\n<tr class=\"memdesc:gaabf6cf90fd31efe25c94965507e98390\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">More...</a><br /></td></tr>\n<tr class=\"separator:gaabf6cf90fd31efe25c94965507e98390\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9e1c9ee65fef547bde793e69723e24eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">mediump_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga9e1c9ee65fef547bde793e69723e24eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9e1c9ee65fef547bde793e69723e24eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00089_source.html\">matrix_float3x2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00089_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00089.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">lowp_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">mediump_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">highp_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_gaabf6cf90fd31efe25c94965507e98390\"><div class=\"ttname\"><a href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">glm::lowp_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, lowp &gt; lowp_mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00089_source.html#l00016\">matrix_float3x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga9e1c9ee65fef547bde793e69723e24eb\"><div class=\"ttname\"><a href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">glm::mediump_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, mediump &gt; mediump_mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00089_source.html#l00022\">matrix_float3x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga1eda47a00027ec440eac05d63739c71b\"><div class=\"ttname\"><a href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">glm::highp_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, highp &gt; highp_mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00089_source.html#l00028\">matrix_float3x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00090.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00090_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaefb0fc7a4960b782c18708bb6b655262\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">mat3</a></td></tr>\n<tr class=\"memdesc:gaefb0fc7a4960b782c18708bb6b655262\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">More...</a><br /></td></tr>\n<tr class=\"separator:gaefb0fc7a4960b782c18708bb6b655262\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab91887d7565059dac640e3a1921c914a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">mat3x3</a></td></tr>\n<tr class=\"memdesc:gab91887d7565059dac640e3a1921c914a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">More...</a><br /></td></tr>\n<tr class=\"separator:gab91887d7565059dac640e3a1921c914a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00090_source.html\">matrix_float3x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00090_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00090.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, defaultp&gt;                      <a class=\"code\" href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">   20</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, defaultp&gt;                      <a class=\"code\" href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">mat3</a>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gab91887d7565059dac640e3a1921c914a\"><div class=\"ttname\"><a href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">glm::mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, defaultp &gt; mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00090_source.html#l00015\">matrix_float3x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaefb0fc7a4960b782c18708bb6b655262\"><div class=\"ttname\"><a href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">glm::mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, defaultp &gt; mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00090_source.html#l00020\">matrix_float3x3.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00091.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00091_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga3fd9849f3da5ed6e3decc3fb10a20b3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">highp_mat3</a></td></tr>\n<tr class=\"memdesc:ga3fd9849f3da5ed6e3decc3fb10a20b3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3fd9849f3da5ed6e3decc3fb10a20b3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ea82e12f4d7afcfce8f59894d400230\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">highp_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga2ea82e12f4d7afcfce8f59894d400230\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ea82e12f4d7afcfce8f59894d400230\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6271ebc85ed778ccc15458c3d86fc854\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">lowp_mat3</a></td></tr>\n<tr class=\"memdesc:ga6271ebc85ed778ccc15458c3d86fc854\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6271ebc85ed778ccc15458c3d86fc854\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63362cb4a63fc1be7d2e49cd5d574c84\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">lowp_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga63362cb4a63fc1be7d2e49cd5d574c84\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">More...</a><br /></td></tr>\n<tr class=\"separator:ga63362cb4a63fc1be7d2e49cd5d574c84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5aae49834d02732942f44e61d7bce136\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">mediump_mat3</a></td></tr>\n<tr class=\"memdesc:ga5aae49834d02732942f44e61d7bce136\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5aae49834d02732942f44e61d7bce136\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc0f2f4ad21c90b341881cf056f8650e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">mediump_mat3x3</a></td></tr>\n<tr class=\"memdesc:gabc0f2f4ad21c90b341881cf056f8650e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">More...</a><br /></td></tr>\n<tr class=\"separator:gabc0f2f4ad21c90b341881cf056f8650e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00091_source.html\">matrix_float3x3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00091_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00091.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">lowp_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">mediump_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">highp_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">   34</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">lowp_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">   40</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">mediump_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">highp_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_gabc0f2f4ad21c90b341881cf056f8650e\"><div class=\"ttname\"><a href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">glm::mediump_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, mediump &gt; mediump_mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00040\">matrix_float3x3_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2ea82e12f4d7afcfce8f59894d400230\"><div class=\"ttname\"><a href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">glm::highp_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, highp &gt; highp_mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00046\">matrix_float3x3_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga63362cb4a63fc1be7d2e49cd5d574c84\"><div class=\"ttname\"><a href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">glm::lowp_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, lowp &gt; lowp_mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00034\">matrix_float3x3_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga5aae49834d02732942f44e61d7bce136\"><div class=\"ttname\"><a href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">glm::mediump_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, mediump &gt; mediump_mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00022\">matrix_float3x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga6271ebc85ed778ccc15458c3d86fc854\"><div class=\"ttname\"><a href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">glm::lowp_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, lowp &gt; lowp_mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00016\">matrix_float3x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga3fd9849f3da5ed6e3decc3fb10a20b3e\"><div class=\"ttname\"><a href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">glm::highp_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, highp &gt; highp_mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00091_source.html#l00028\">matrix_float3x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00092.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00092_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaf991cad0b34f64e33af186326dbc4d66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">mat3x4</a></td></tr>\n<tr class=\"memdesc:gaf991cad0b34f64e33af186326dbc4d66\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf991cad0b34f64e33af186326dbc4d66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00092_source.html\">matrix_float3x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00092_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00092.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, defaultp&gt;                      <a class=\"code\" href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gaf991cad0b34f64e33af186326dbc4d66\"><div class=\"ttname\"><a href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">glm::mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, defaultp &gt; mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00092_source.html#l00015\">matrix_float3x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00093.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00093_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga6454b3a26ea30f69de8e44c08a63d1b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">highp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga6454b3a26ea30f69de8e44c08a63d1b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6454b3a26ea30f69de8e44c08a63d1b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac5fc6786688eff02904ca5e7d6960092\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">lowp_mat3x4</a></td></tr>\n<tr class=\"memdesc:gac5fc6786688eff02904ca5e7d6960092\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">More...</a><br /></td></tr>\n<tr class=\"separator:gac5fc6786688eff02904ca5e7d6960092\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa669c6675c3405f76c0b14020d1c0d61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">mediump_mat3x4</a></td></tr>\n<tr class=\"memdesc:gaa669c6675c3405f76c0b14020d1c0d61\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa669c6675c3405f76c0b14020d1c0d61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00093_source.html\">matrix_float3x4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00093_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float3x4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float3x4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00093.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">lowp_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">mediump_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">highp_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga6454b3a26ea30f69de8e44c08a63d1b7\"><div class=\"ttname\"><a href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">glm::highp_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, highp &gt; highp_mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00093_source.html#l00028\">matrix_float3x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gaa669c6675c3405f76c0b14020d1c0d61\"><div class=\"ttname\"><a href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">glm::mediump_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, mediump &gt; mediump_mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00093_source.html#l00022\">matrix_float3x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gac5fc6786688eff02904ca5e7d6960092\"><div class=\"ttname\"><a href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">glm::lowp_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, lowp &gt; lowp_mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00093_source.html#l00016\">matrix_float3x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00094.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00094_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gad941c947ad6cdd117a0e8554a4754983\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">mat4x2</a></td></tr>\n<tr class=\"memdesc:gad941c947ad6cdd117a0e8554a4754983\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">More...</a><br /></td></tr>\n<tr class=\"separator:gad941c947ad6cdd117a0e8554a4754983\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00094_source.html\">matrix_float4x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00094_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00094.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, defaultp&gt;                      <a class=\"code\" href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gad941c947ad6cdd117a0e8554a4754983\"><div class=\"ttname\"><a href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">glm::mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, defaultp &gt; mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00094_source.html#l00015\">matrix_float4x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00095_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21\">lowp_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gad75706b70545412ba9ac27d5ee210f66\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#gad75706b70545412ba9ac27d5ee210f66\">mediump_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, highp&gt;         <a class=\"code\" href=\"a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5\">highp_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_gad75706b70545412ba9ac27d5ee210f66\"><div class=\"ttname\"><a href=\"a00284.html#gad75706b70545412ba9ac27d5ee210f66\">glm::mediump_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, mediump &gt; mediump_mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00095_source.html#l00022\">matrix_float4x2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gafa3cdb8f24d09d761ec9ae2a4c7e5e21\"><div class=\"ttname\"><a href=\"a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21\">glm::lowp_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, lowp &gt; lowp_mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00095_source.html#l00016\">matrix_float4x2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gab68b66e6d2c37b804d0baf970fa4f0e5\"><div class=\"ttname\"><a href=\"a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5\">glm::highp_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, highp &gt; highp_mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00095_source.html#l00028\">matrix_float4x2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00096.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00096_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gac7574544bb94777bdbd2eb224eb72fd0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">mat4x3</a></td></tr>\n<tr class=\"memdesc:gac7574544bb94777bdbd2eb224eb72fd0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7574544bb94777bdbd2eb224eb72fd0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00096_source.html\">matrix_float4x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00096_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00096.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, defaultp&gt;                      <a class=\"code\" href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gac7574544bb94777bdbd2eb224eb72fd0\"><div class=\"ttname\"><a href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">glm::mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, defaultp &gt; mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00096_source.html#l00015\">matrix_float4x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00097.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00097_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga8d5a4e65fb976e4553b84995b95ecb38\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">highp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga8d5a4e65fb976e4553b84995b95ecb38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8d5a4e65fb976e4553b84995b95ecb38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga534c3ef5c3b8fdd8656b6afc205b4b77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">lowp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga534c3ef5c3b8fdd8656b6afc205b4b77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">More...</a><br /></td></tr>\n<tr class=\"separator:ga534c3ef5c3b8fdd8656b6afc205b4b77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a1440b5ea3cf84d5b06c79b534bd770\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">mediump_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga4a1440b5ea3cf84d5b06c79b534bd770\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a1440b5ea3cf84d5b06c79b534bd770\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00097_source.html\">matrix_float4x3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00097_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00097.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">lowp_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">mediump_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">highp_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga8d5a4e65fb976e4553b84995b95ecb38\"><div class=\"ttname\"><a href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">glm::highp_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, highp &gt; highp_mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00097_source.html#l00028\">matrix_float4x3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga534c3ef5c3b8fdd8656b6afc205b4b77\"><div class=\"ttname\"><a href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">glm::lowp_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, lowp &gt; lowp_mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00097_source.html#l00016\">matrix_float4x3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga4a1440b5ea3cf84d5b06c79b534bd770\"><div class=\"ttname\"><a href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">glm::mediump_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, mediump &gt; mediump_mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00097_source.html#l00022\">matrix_float4x3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00098.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00098_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"memitem:gab2d35cc2655f44d60958d60a1de34e81\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">mat4x4</a></td></tr>\n<tr class=\"memdesc:gab2d35cc2655f44d60958d60a1de34e81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">More...</a><br /></td></tr>\n<tr class=\"separator:gab2d35cc2655f44d60958d60a1de34e81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0db98d836c5549d31cf64ecd043b7af7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">mat4</a></td></tr>\n<tr class=\"memdesc:ga0db98d836c5549d31cf64ecd043b7af7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0db98d836c5549d31cf64ecd043b7af7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00098_source.html\">matrix_float4x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00098_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00098.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, defaultp&gt;                      <a class=\"code\" href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">   20</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, defaultp&gt;                      <a class=\"code\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">mat4</a>;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00283_html_gab2d35cc2655f44d60958d60a1de34e81\"><div class=\"ttname\"><a href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">glm::mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, defaultp &gt; mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00098_source.html#l00015\">matrix_float4x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga0db98d836c5549d31cf64ecd043b7af7\"><div class=\"ttname\"><a href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">glm::mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, defaultp &gt; mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00098_source.html#l00020\">matrix_float4x4.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00099.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00099_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gad72e13d669d039f12ae5afa23148adc1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">highp_mat4</a></td></tr>\n<tr class=\"memdesc:gad72e13d669d039f12ae5afa23148adc1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">More...</a><br /></td></tr>\n<tr class=\"separator:gad72e13d669d039f12ae5afa23148adc1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58cc504be0e3b61c48bc91554a767b9f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">highp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga58cc504be0e3b61c48bc91554a767b9f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58cc504be0e3b61c48bc91554a767b9f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2dedee030500865267cd5851c00c139d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">lowp_mat4</a></td></tr>\n<tr class=\"memdesc:ga2dedee030500865267cd5851c00c139d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2dedee030500865267cd5851c00c139d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga686468a9a815bd4db8cddae42a6d6b87\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">lowp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga686468a9a815bd4db8cddae42a6d6b87\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">More...</a><br /></td></tr>\n<tr class=\"separator:ga686468a9a815bd4db8cddae42a6d6b87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab8531bc3f269aa45835cd6e1972b7fc7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">mediump_mat4</a></td></tr>\n<tr class=\"memdesc:gab8531bc3f269aa45835cd6e1972b7fc7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">More...</a><br /></td></tr>\n<tr class=\"separator:gab8531bc3f269aa45835cd6e1972b7fc7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga15bca2b70917d9752231160d9da74b01\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">mediump_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga15bca2b70917d9752231160d9da74b01\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">More...</a><br /></td></tr>\n<tr class=\"separator:ga15bca2b70917d9752231160d9da74b01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00099_source.html\">matrix_float4x4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00099_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_float4x4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_float4x4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00099.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">lowp_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">mediump_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, highp&gt;         <a class=\"code\" href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">highp_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">   34</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, lowp&gt;          <a class=\"code\" href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">lowp_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">   40</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, mediump&gt;       <a class=\"code\" href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">mediump_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, highp&gt;         <a class=\"code\" href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">highp_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00284_html_ga15bca2b70917d9752231160d9da74b01\"><div class=\"ttname\"><a href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">glm::mediump_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, mediump &gt; mediump_mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00040\">matrix_float4x4_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga2dedee030500865267cd5851c00c139d\"><div class=\"ttname\"><a href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">glm::lowp_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, lowp &gt; lowp_mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00016\">matrix_float4x4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gab8531bc3f269aa45835cd6e1972b7fc7\"><div class=\"ttname\"><a href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">glm::mediump_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, mediump &gt; mediump_mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using medium precision ar...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00022\">matrix_float4x4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga58cc504be0e3b61c48bc91554a767b9f\"><div class=\"ttname\"><a href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">glm::highp_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, highp &gt; highp_mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00046\">matrix_float4x4_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_ga686468a9a815bd4db8cddae42a6d6b87\"><div class=\"ttname\"><a href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">glm::lowp_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, lowp &gt; lowp_mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using low precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00034\">matrix_float4x4_precision.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00284_html_gad72e13d669d039f12ae5afa23148adc1\"><div class=\"ttname\"><a href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">glm::highp_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, highp &gt; highp_mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers using high precision arit...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00099_source.html#l00028\">matrix_float4x4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00100.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_integer.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_integer.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00294.html\">GLM_GTC_matrix_integer</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00100_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga8499cc3b016003f835314c1c756e9db9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8499cc3b016003f835314c1c756e9db9\">highp_imat2</a></td></tr>\n<tr class=\"memdesc:ga8499cc3b016003f835314c1c756e9db9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#ga8499cc3b016003f835314c1c756e9db9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8499cc3b016003f835314c1c756e9db9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa389e2d1c3b10941cae870bc0aeba5b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3\">highp_imat2x2</a></td></tr>\n<tr class=\"memdesc:gaa389e2d1c3b10941cae870bc0aeba5b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa389e2d1c3b10941cae870bc0aeba5b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaba49d890e06c9444795f5a133fbf1336\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaba49d890e06c9444795f5a133fbf1336\">highp_imat2x3</a></td></tr>\n<tr class=\"memdesc:gaba49d890e06c9444795f5a133fbf1336\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 2x3 matrix.  <a href=\"a00294.html#gaba49d890e06c9444795f5a133fbf1336\">More...</a><br /></td></tr>\n<tr class=\"separator:gaba49d890e06c9444795f5a133fbf1336\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05a970fd4366dad6c8a0be676b1eae5b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b\">highp_imat2x4</a></td></tr>\n<tr class=\"memdesc:ga05a970fd4366dad6c8a0be676b1eae5b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 2x4 matrix.  <a href=\"a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga05a970fd4366dad6c8a0be676b1eae5b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaca4506a3efa679eff7c006d9826291fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaca4506a3efa679eff7c006d9826291fd\">highp_imat3</a></td></tr>\n<tr class=\"memdesc:gaca4506a3efa679eff7c006d9826291fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#gaca4506a3efa679eff7c006d9826291fd\">More...</a><br /></td></tr>\n<tr class=\"separator:gaca4506a3efa679eff7c006d9826291fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga91c671c3ff9706c2393e78b22fd84bcb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb\">highp_imat3x2</a></td></tr>\n<tr class=\"memdesc:ga91c671c3ff9706c2393e78b22fd84bcb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 3x2 matrix.  <a href=\"a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga91c671c3ff9706c2393e78b22fd84bcb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07d7b7173e2a6f843ff5f1c615a95b41\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41\">highp_imat3x3</a></td></tr>\n<tr class=\"memdesc:ga07d7b7173e2a6f843ff5f1c615a95b41\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41\">More...</a><br /></td></tr>\n<tr class=\"separator:ga07d7b7173e2a6f843ff5f1c615a95b41\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga53008f580be99018a17b357b5a4ffc0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga53008f580be99018a17b357b5a4ffc0d\">highp_imat3x4</a></td></tr>\n<tr class=\"memdesc:ga53008f580be99018a17b357b5a4ffc0d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 3x4 matrix.  <a href=\"a00294.html#ga53008f580be99018a17b357b5a4ffc0d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga53008f580be99018a17b357b5a4ffc0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cfb09b34e0fcf73eaf6512d6483ef56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56\">highp_imat4</a></td></tr>\n<tr class=\"memdesc:ga7cfb09b34e0fcf73eaf6512d6483ef56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7cfb09b34e0fcf73eaf6512d6483ef56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1858820fb292cae396408b2034407f72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1858820fb292cae396408b2034407f72\">highp_imat4x2</a></td></tr>\n<tr class=\"memdesc:ga1858820fb292cae396408b2034407f72\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 4x2 matrix.  <a href=\"a00294.html#ga1858820fb292cae396408b2034407f72\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1858820fb292cae396408b2034407f72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6be0b80ae74bb309bc5b964d93d68fc5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5\">highp_imat4x3</a></td></tr>\n<tr class=\"memdesc:ga6be0b80ae74bb309bc5b964d93d68fc5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 4x3 matrix.  <a href=\"a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6be0b80ae74bb309bc5b964d93d68fc5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c783ee6f8f040ab37df2f70392c8b44\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44\">highp_imat4x4</a></td></tr>\n<tr class=\"memdesc:ga2c783ee6f8f040ab37df2f70392c8b44\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c783ee6f8f040ab37df2f70392c8b44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42cbce64c4c1cd121b8437daa6e110de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga42cbce64c4c1cd121b8437daa6e110de\">highp_umat2</a></td></tr>\n<tr class=\"memdesc:ga42cbce64c4c1cd121b8437daa6e110de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga42cbce64c4c1cd121b8437daa6e110de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42cbce64c4c1cd121b8437daa6e110de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5337b7bc95f9cbac08a0c00b3f936b28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28\">highp_umat2x2</a></td></tr>\n<tr class=\"memdesc:ga5337b7bc95f9cbac08a0c00b3f936b28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5337b7bc95f9cbac08a0c00b3f936b28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga90718c7128320b24b52f9ea70e643ad4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga90718c7128320b24b52f9ea70e643ad4\">highp_umat2x3</a></td></tr>\n<tr class=\"memdesc:ga90718c7128320b24b52f9ea70e643ad4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 2x3 matrix.  <a href=\"a00294.html#ga90718c7128320b24b52f9ea70e643ad4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga90718c7128320b24b52f9ea70e643ad4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadca0a4724b4a6f56a2355b6f6e19248b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b\">highp_umat2x4</a></td></tr>\n<tr class=\"memdesc:gadca0a4724b4a6f56a2355b6f6e19248b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 2x4 matrix.  <a href=\"a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b\">More...</a><br /></td></tr>\n<tr class=\"separator:gadca0a4724b4a6f56a2355b6f6e19248b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1143120339b7d2d469d327662e8a172\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa1143120339b7d2d469d327662e8a172\">highp_umat3</a></td></tr>\n<tr class=\"memdesc:gaa1143120339b7d2d469d327662e8a172\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#gaa1143120339b7d2d469d327662e8a172\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa1143120339b7d2d469d327662e8a172\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga844a5da2e7fc03fc7cccc7f1b70809c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4\">highp_umat3x2</a></td></tr>\n<tr class=\"memdesc:ga844a5da2e7fc03fc7cccc7f1b70809c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 3x2 matrix.  <a href=\"a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga844a5da2e7fc03fc7cccc7f1b70809c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f7d41c36b980774a4d2e7c1647fb4b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2\">highp_umat3x3</a></td></tr>\n<tr class=\"memdesc:ga1f7d41c36b980774a4d2e7c1647fb4b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f7d41c36b980774a4d2e7c1647fb4b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga25ee15c323924f2d0fe9896d329e5086\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga25ee15c323924f2d0fe9896d329e5086\">highp_umat3x4</a></td></tr>\n<tr class=\"memdesc:ga25ee15c323924f2d0fe9896d329e5086\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 3x4 matrix.  <a href=\"a00294.html#ga25ee15c323924f2d0fe9896d329e5086\">More...</a><br /></td></tr>\n<tr class=\"separator:ga25ee15c323924f2d0fe9896d329e5086\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf665e4e78c2cc32a54ab40325738f9c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9\">highp_umat4</a></td></tr>\n<tr class=\"memdesc:gaf665e4e78c2cc32a54ab40325738f9c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf665e4e78c2cc32a54ab40325738f9c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae69eb82ec08b0dc9bf2ead2a339ff801\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801\">highp_umat4x2</a></td></tr>\n<tr class=\"memdesc:gae69eb82ec08b0dc9bf2ead2a339ff801\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 4x2 matrix.  <a href=\"a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801\">More...</a><br /></td></tr>\n<tr class=\"separator:gae69eb82ec08b0dc9bf2ead2a339ff801\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45a8163d02c43216252056b0c120f3a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga45a8163d02c43216252056b0c120f3a5\">highp_umat4x3</a></td></tr>\n<tr class=\"memdesc:ga45a8163d02c43216252056b0c120f3a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 4x3 matrix.  <a href=\"a00294.html#ga45a8163d02c43216252056b0c120f3a5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga45a8163d02c43216252056b0c120f3a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6a56cbb769aed334c95241664415f9ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6a56cbb769aed334c95241664415f9ba\">highp_umat4x4</a></td></tr>\n<tr class=\"memdesc:ga6a56cbb769aed334c95241664415f9ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#ga6a56cbb769aed334c95241664415f9ba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6a56cbb769aed334c95241664415f9ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaabe04f9948d4a213bb1c20137de03e01\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">imat2</a></td></tr>\n<tr class=\"memdesc:gaabe04f9948d4a213bb1c20137de03e01\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 2x2 matrix.  <a href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">More...</a><br /></td></tr>\n<tr class=\"separator:gaabe04f9948d4a213bb1c20137de03e01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4732a240522ad9bc28144fda2fc14ec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">imat2x2</a></td></tr>\n<tr class=\"memdesc:gaa4732a240522ad9bc28144fda2fc14ec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 2x2 matrix.  <a href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4732a240522ad9bc28144fda2fc14ec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3f42dd3d5d94a0fd5706f7ec8dd0c605\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">imat2x3</a></td></tr>\n<tr class=\"memdesc:ga3f42dd3d5d94a0fd5706f7ec8dd0c605\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 2x3 matrix.  <a href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3f42dd3d5d94a0fd5706f7ec8dd0c605\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9d8faafdca42583d67e792dd038fc668\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">imat2x4</a></td></tr>\n<tr class=\"memdesc:ga9d8faafdca42583d67e792dd038fc668\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 2x4 matrix.  <a href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9d8faafdca42583d67e792dd038fc668\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga038f68437155ffa3c2583a15264a8195\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">imat3</a></td></tr>\n<tr class=\"memdesc:ga038f68437155ffa3c2583a15264a8195\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 3x3 matrix.  <a href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">More...</a><br /></td></tr>\n<tr class=\"separator:ga038f68437155ffa3c2583a15264a8195\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b33bbe4f12c060892bd3cc8d4cd737f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">imat3x2</a></td></tr>\n<tr class=\"memdesc:ga7b33bbe4f12c060892bd3cc8d4cd737f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 3x2 matrix.  <a href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b33bbe4f12c060892bd3cc8d4cd737f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6aacc960f62e8f7d2fe9d32d5050e7a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">imat3x3</a></td></tr>\n<tr class=\"memdesc:ga6aacc960f62e8f7d2fe9d32d5050e7a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 3x3 matrix.  <a href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6aacc960f62e8f7d2fe9d32d5050e7a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e9ce23496d8b08dfc302d4039694b58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">imat3x4</a></td></tr>\n<tr class=\"memdesc:ga6e9ce23496d8b08dfc302d4039694b58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 3x4 matrix.  <a href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e9ce23496d8b08dfc302d4039694b58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga96b0d26a33b81bb6a60ca0f39682f7eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">imat4</a></td></tr>\n<tr class=\"memdesc:ga96b0d26a33b81bb6a60ca0f39682f7eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 4x4 matrix.  <a href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga96b0d26a33b81bb6a60ca0f39682f7eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8ce7ef51d8b2c1901fa5414deccbc3fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">imat4x2</a></td></tr>\n<tr class=\"memdesc:ga8ce7ef51d8b2c1901fa5414deccbc3fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 4x2 matrix.  <a href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8ce7ef51d8b2c1901fa5414deccbc3fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga705ee0bf49d6c3de4404ce2481bf0df5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">imat4x3</a></td></tr>\n<tr class=\"memdesc:ga705ee0bf49d6c3de4404ce2481bf0df5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 4x3 matrix.  <a href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga705ee0bf49d6c3de4404ce2481bf0df5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43ed5e4f475b6f4cad7cba78f29c405b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">imat4x4</a></td></tr>\n<tr class=\"memdesc:ga43ed5e4f475b6f4cad7cba78f29c405b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 4x4 matrix.  <a href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43ed5e4f475b6f4cad7cba78f29c405b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0bff0be804142bb16d441aec0a7962e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa0bff0be804142bb16d441aec0a7962e\">lowp_imat2</a></td></tr>\n<tr class=\"memdesc:gaa0bff0be804142bb16d441aec0a7962e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#gaa0bff0be804142bb16d441aec0a7962e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0bff0be804142bb16d441aec0a7962e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92b95b679975d408645547ab45a8dcd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga92b95b679975d408645547ab45a8dcd8\">lowp_imat2x2</a></td></tr>\n<tr class=\"memdesc:ga92b95b679975d408645547ab45a8dcd8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#ga92b95b679975d408645547ab45a8dcd8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga92b95b679975d408645547ab45a8dcd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8c9e7a388f8e7c52f1e6857dee8afb65\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65\">lowp_imat2x3</a></td></tr>\n<tr class=\"memdesc:ga8c9e7a388f8e7c52f1e6857dee8afb65\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 2x3 matrix.  <a href=\"a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8c9e7a388f8e7c52f1e6857dee8afb65\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9cc13bd1f8dd2933e9fa31fe3f70e16e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e\">lowp_imat2x4</a></td></tr>\n<tr class=\"memdesc:ga9cc13bd1f8dd2933e9fa31fe3f70e16e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 2x4 matrix.  <a href=\"a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9cc13bd1f8dd2933e9fa31fe3f70e16e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga69bfe668f4170379fc1f35d82b060c43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga69bfe668f4170379fc1f35d82b060c43\">lowp_imat3</a></td></tr>\n<tr class=\"memdesc:ga69bfe668f4170379fc1f35d82b060c43\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#ga69bfe668f4170379fc1f35d82b060c43\">More...</a><br /></td></tr>\n<tr class=\"separator:ga69bfe668f4170379fc1f35d82b060c43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga33db8f27491d30906cd37c0d86b3f432\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga33db8f27491d30906cd37c0d86b3f432\">lowp_imat3x2</a></td></tr>\n<tr class=\"memdesc:ga33db8f27491d30906cd37c0d86b3f432\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 3x2 matrix.  <a href=\"a00294.html#ga33db8f27491d30906cd37c0d86b3f432\">More...</a><br /></td></tr>\n<tr class=\"separator:ga33db8f27491d30906cd37c0d86b3f432\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga664f061df00020048c3f8530329ace45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga664f061df00020048c3f8530329ace45\">lowp_imat3x3</a></td></tr>\n<tr class=\"memdesc:ga664f061df00020048c3f8530329ace45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#ga664f061df00020048c3f8530329ace45\">More...</a><br /></td></tr>\n<tr class=\"separator:ga664f061df00020048c3f8530329ace45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9273faab33623d944af4080befbb2c80\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga9273faab33623d944af4080befbb2c80\">lowp_imat3x4</a></td></tr>\n<tr class=\"memdesc:ga9273faab33623d944af4080befbb2c80\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 3x4 matrix.  <a href=\"a00294.html#ga9273faab33623d944af4080befbb2c80\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9273faab33623d944af4080befbb2c80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1e77f7270cad461ca4fcb4c3ec2e98c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c\">lowp_imat4</a></td></tr>\n<tr class=\"memdesc:gad1e77f7270cad461ca4fcb4c3ec2e98c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1e77f7270cad461ca4fcb4c3ec2e98c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26ec1a2ba08a1488f5f05336858a0f09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09\">lowp_imat4x2</a></td></tr>\n<tr class=\"memdesc:ga26ec1a2ba08a1488f5f05336858a0f09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 4x2 matrix.  <a href=\"a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09\">More...</a><br /></td></tr>\n<tr class=\"separator:ga26ec1a2ba08a1488f5f05336858a0f09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f40483a3ae634ead8ad22272c543a33\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8f40483a3ae634ead8ad22272c543a33\">lowp_imat4x3</a></td></tr>\n<tr class=\"memdesc:ga8f40483a3ae634ead8ad22272c543a33\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 4x3 matrix.  <a href=\"a00294.html#ga8f40483a3ae634ead8ad22272c543a33\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f40483a3ae634ead8ad22272c543a33\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf65677e53ac8e31a107399340d5e2451\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf65677e53ac8e31a107399340d5e2451\">lowp_imat4x4</a></td></tr>\n<tr class=\"memdesc:gaf65677e53ac8e31a107399340d5e2451\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#gaf65677e53ac8e31a107399340d5e2451\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf65677e53ac8e31a107399340d5e2451\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2fba702d990437fc88ff3f3a76846ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf2fba702d990437fc88ff3f3a76846ee\">lowp_umat2</a></td></tr>\n<tr class=\"memdesc:gaf2fba702d990437fc88ff3f3a76846ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#gaf2fba702d990437fc88ff3f3a76846ee\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2fba702d990437fc88ff3f3a76846ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b2e9d89745f7175051284e54c81d81c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga7b2e9d89745f7175051284e54c81d81c\">lowp_umat2x2</a></td></tr>\n<tr class=\"memdesc:ga7b2e9d89745f7175051284e54c81d81c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga7b2e9d89745f7175051284e54c81d81c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b2e9d89745f7175051284e54c81d81c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3072f90fd86f17a862e21589fbb14c0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga3072f90fd86f17a862e21589fbb14c0f\">lowp_umat2x3</a></td></tr>\n<tr class=\"memdesc:ga3072f90fd86f17a862e21589fbb14c0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 2x3 matrix.  <a href=\"a00294.html#ga3072f90fd86f17a862e21589fbb14c0f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3072f90fd86f17a862e21589fbb14c0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8bb45fec4bd77bd81b4ae7eb961a270d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d\">lowp_umat2x4</a></td></tr>\n<tr class=\"memdesc:ga8bb45fec4bd77bd81b4ae7eb961a270d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 2x4 matrix.  <a href=\"a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8bb45fec4bd77bd81b4ae7eb961a270d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1145f72bcdd590f5808c4bc170c2924\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf1145f72bcdd590f5808c4bc170c2924\">lowp_umat3</a></td></tr>\n<tr class=\"memdesc:gaf1145f72bcdd590f5808c4bc170c2924\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#gaf1145f72bcdd590f5808c4bc170c2924\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf1145f72bcdd590f5808c4bc170c2924\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga56ea68c6a6cba8d8c21d17bb14e69c6b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b\">lowp_umat3x2</a></td></tr>\n<tr class=\"memdesc:ga56ea68c6a6cba8d8c21d17bb14e69c6b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 3x2 matrix.  <a href=\"a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga56ea68c6a6cba8d8c21d17bb14e69c6b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f660a39a395cc14f018f985e7dfbeb5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5\">lowp_umat3x3</a></td></tr>\n<tr class=\"memdesc:ga4f660a39a395cc14f018f985e7dfbeb5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f660a39a395cc14f018f985e7dfbeb5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec3d624306bd59649f021864709d56b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaec3d624306bd59649f021864709d56b5\">lowp_umat3x4</a></td></tr>\n<tr class=\"memdesc:gaec3d624306bd59649f021864709d56b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 3x4 matrix.  <a href=\"a00294.html#gaec3d624306bd59649f021864709d56b5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec3d624306bd59649f021864709d56b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac092c6105827bf9ea080db38074b78eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gac092c6105827bf9ea080db38074b78eb\">lowp_umat4</a></td></tr>\n<tr class=\"memdesc:gac092c6105827bf9ea080db38074b78eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#gac092c6105827bf9ea080db38074b78eb\">More...</a><br /></td></tr>\n<tr class=\"separator:gac092c6105827bf9ea080db38074b78eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7716c2b210d141846f1ac4e774adef5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga7716c2b210d141846f1ac4e774adef5e\">lowp_umat4x2</a></td></tr>\n<tr class=\"memdesc:ga7716c2b210d141846f1ac4e774adef5e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 4x2 matrix.  <a href=\"a00294.html#ga7716c2b210d141846f1ac4e774adef5e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7716c2b210d141846f1ac4e774adef5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09ab33a2636f5f43f7fae29cfbc20fff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff\">lowp_umat4x3</a></td></tr>\n<tr class=\"memdesc:ga09ab33a2636f5f43f7fae29cfbc20fff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 4x3 matrix.  <a href=\"a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga09ab33a2636f5f43f7fae29cfbc20fff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga10aafc66cf1a0ece336b1c5ae13d0cc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0\">lowp_umat4x4</a></td></tr>\n<tr class=\"memdesc:ga10aafc66cf1a0ece336b1c5ae13d0cc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga10aafc66cf1a0ece336b1c5ae13d0cc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20f4cc7ab23e2aa1f4db9fdb5496d378\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378\">mediump_imat2</a></td></tr>\n<tr class=\"memdesc:ga20f4cc7ab23e2aa1f4db9fdb5496d378\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378\">More...</a><br /></td></tr>\n<tr class=\"separator:ga20f4cc7ab23e2aa1f4db9fdb5496d378\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b2aeb11a329940721dda9583e71f856\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga4b2aeb11a329940721dda9583e71f856\">mediump_imat2x2</a></td></tr>\n<tr class=\"memdesc:ga4b2aeb11a329940721dda9583e71f856\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#ga4b2aeb11a329940721dda9583e71f856\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b2aeb11a329940721dda9583e71f856\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74362470ba99843ac70aee5ac38cc674\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga74362470ba99843ac70aee5ac38cc674\">mediump_imat2x3</a></td></tr>\n<tr class=\"memdesc:ga74362470ba99843ac70aee5ac38cc674\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 2x3 matrix.  <a href=\"a00294.html#ga74362470ba99843ac70aee5ac38cc674\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74362470ba99843ac70aee5ac38cc674\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8da25cd380ba30fc5b68a4687deb3e09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09\">mediump_imat2x4</a></td></tr>\n<tr class=\"memdesc:ga8da25cd380ba30fc5b68a4687deb3e09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 2x4 matrix.  <a href=\"a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8da25cd380ba30fc5b68a4687deb3e09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6c63bdc736efd3466e0730de0251cb71\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6c63bdc736efd3466e0730de0251cb71\">mediump_imat3</a></td></tr>\n<tr class=\"memdesc:ga6c63bdc736efd3466e0730de0251cb71\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#ga6c63bdc736efd3466e0730de0251cb71\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6c63bdc736efd3466e0730de0251cb71\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0b4e42d648fb3eaf4bb88da82ecc809\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809\">mediump_imat3x2</a></td></tr>\n<tr class=\"memdesc:gac0b4e42d648fb3eaf4bb88da82ecc809\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 3x2 matrix.  <a href=\"a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809\">More...</a><br /></td></tr>\n<tr class=\"separator:gac0b4e42d648fb3eaf4bb88da82ecc809\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad99cc2aad8fc57f068cfa7719dbbea12\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12\">mediump_imat3x3</a></td></tr>\n<tr class=\"memdesc:gad99cc2aad8fc57f068cfa7719dbbea12\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12\">More...</a><br /></td></tr>\n<tr class=\"separator:gad99cc2aad8fc57f068cfa7719dbbea12\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga67689a518b181a26540bc44a163525cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga67689a518b181a26540bc44a163525cd\">mediump_imat3x4</a></td></tr>\n<tr class=\"memdesc:ga67689a518b181a26540bc44a163525cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 3x4 matrix.  <a href=\"a00294.html#ga67689a518b181a26540bc44a163525cd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga67689a518b181a26540bc44a163525cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf348552978553630d2a00b78eb887ced\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf348552978553630d2a00b78eb887ced\">mediump_imat4</a></td></tr>\n<tr class=\"memdesc:gaf348552978553630d2a00b78eb887ced\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#gaf348552978553630d2a00b78eb887ced\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf348552978553630d2a00b78eb887ced\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b2d35816f7103f0f4c82dd2f27571fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc\">mediump_imat4x2</a></td></tr>\n<tr class=\"memdesc:ga8b2d35816f7103f0f4c82dd2f27571fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 4x2 matrix.  <a href=\"a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b2d35816f7103f0f4c82dd2f27571fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b10acc696759e03f6ab918f4467e94c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga5b10acc696759e03f6ab918f4467e94c\">mediump_imat4x3</a></td></tr>\n<tr class=\"memdesc:ga5b10acc696759e03f6ab918f4467e94c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 4x3 matrix.  <a href=\"a00294.html#ga5b10acc696759e03f6ab918f4467e94c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b10acc696759e03f6ab918f4467e94c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2596869d154dec1180beadbb9df80501\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga2596869d154dec1180beadbb9df80501\">mediump_imat4x4</a></td></tr>\n<tr class=\"memdesc:ga2596869d154dec1180beadbb9df80501\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#ga2596869d154dec1180beadbb9df80501\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2596869d154dec1180beadbb9df80501\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43041378b3410ea951b7de0dfd2bc7ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee\">mediump_umat2</a></td></tr>\n<tr class=\"memdesc:ga43041378b3410ea951b7de0dfd2bc7ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43041378b3410ea951b7de0dfd2bc7ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b209b1b751f041422137e3c065dfa98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga3b209b1b751f041422137e3c065dfa98\">mediump_umat2x2</a></td></tr>\n<tr class=\"memdesc:ga3b209b1b751f041422137e3c065dfa98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga3b209b1b751f041422137e3c065dfa98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3b209b1b751f041422137e3c065dfa98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee2c1f13b41f4c92ea5b3efe367a1306\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306\">mediump_umat2x3</a></td></tr>\n<tr class=\"memdesc:gaee2c1f13b41f4c92ea5b3efe367a1306\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 2x3 matrix.  <a href=\"a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee2c1f13b41f4c92ea5b3efe367a1306\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1317ddca16d01e119a40b7f0ee85f95\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gae1317ddca16d01e119a40b7f0ee85f95\">mediump_umat2x4</a></td></tr>\n<tr class=\"memdesc:gae1317ddca16d01e119a40b7f0ee85f95\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 2x4 matrix.  <a href=\"a00294.html#gae1317ddca16d01e119a40b7f0ee85f95\">More...</a><br /></td></tr>\n<tr class=\"separator:gae1317ddca16d01e119a40b7f0ee85f95\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1730dbe3c67801f53520b06d1aa0a34a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a\">mediump_umat3</a></td></tr>\n<tr class=\"memdesc:ga1730dbe3c67801f53520b06d1aa0a34a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1730dbe3c67801f53520b06d1aa0a34a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaadc28bfdc8ebca81ae85121b11994970\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaadc28bfdc8ebca81ae85121b11994970\">mediump_umat3x2</a></td></tr>\n<tr class=\"memdesc:gaadc28bfdc8ebca81ae85121b11994970\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 3x2 matrix.  <a href=\"a00294.html#gaadc28bfdc8ebca81ae85121b11994970\">More...</a><br /></td></tr>\n<tr class=\"separator:gaadc28bfdc8ebca81ae85121b11994970\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga48f2fc38d3f7fab3cfbc961278ced53d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d\">mediump_umat3x3</a></td></tr>\n<tr class=\"memdesc:ga48f2fc38d3f7fab3cfbc961278ced53d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga48f2fc38d3f7fab3cfbc961278ced53d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78009a1e4ca64217e46b418535e52546\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga78009a1e4ca64217e46b418535e52546\">mediump_umat3x4</a></td></tr>\n<tr class=\"memdesc:ga78009a1e4ca64217e46b418535e52546\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 3x4 matrix.  <a href=\"a00294.html#ga78009a1e4ca64217e46b418535e52546\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78009a1e4ca64217e46b418535e52546\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5087c2beb26a11d9af87432e554cf9d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga5087c2beb26a11d9af87432e554cf9d1\">mediump_umat4</a></td></tr>\n<tr class=\"memdesc:ga5087c2beb26a11d9af87432e554cf9d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#ga5087c2beb26a11d9af87432e554cf9d1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5087c2beb26a11d9af87432e554cf9d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf35aefd81cc13718f6b059623f7425fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf35aefd81cc13718f6b059623f7425fa\">mediump_umat4x2</a></td></tr>\n<tr class=\"memdesc:gaf35aefd81cc13718f6b059623f7425fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 4x2 matrix.  <a href=\"a00294.html#gaf35aefd81cc13718f6b059623f7425fa\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf35aefd81cc13718f6b059623f7425fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e1bed14fbc7f4b376aaed064f89f0fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb\">mediump_umat4x3</a></td></tr>\n<tr class=\"memdesc:ga4e1bed14fbc7f4b376aaed064f89f0fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 4x3 matrix.  <a href=\"a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e1bed14fbc7f4b376aaed064f89f0fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9428fc8430dc552aad920653f822ef3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa9428fc8430dc552aad920653f822ef3\">mediump_umat4x4</a></td></tr>\n<tr class=\"memdesc:gaa9428fc8430dc552aad920653f822ef3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#gaa9428fc8430dc552aad920653f822ef3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9428fc8430dc552aad920653f822ef3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4cae85566f900debf930c41944b64691\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">umat2</a></td></tr>\n<tr class=\"memdesc:ga4cae85566f900debf930c41944b64691\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4cae85566f900debf930c41944b64691\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf8acdd33ce8951051edbca5200898aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">umat2x2</a></td></tr>\n<tr class=\"memdesc:gabf8acdd33ce8951051edbca5200898aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 2x2 matrix.  <a href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf8acdd33ce8951051edbca5200898aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1870da7578d5022b973a83155d386ab3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">umat2x3</a></td></tr>\n<tr class=\"memdesc:ga1870da7578d5022b973a83155d386ab3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 2x3 matrix.  <a href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1870da7578d5022b973a83155d386ab3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga57936a3998e992370e59a223e0ee4fd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">umat2x4</a></td></tr>\n<tr class=\"memdesc:ga57936a3998e992370e59a223e0ee4fd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 2x4 matrix.  <a href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga57936a3998e992370e59a223e0ee4fd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5085e3ff02abbac5e537eb7b89ab63b6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">umat3</a></td></tr>\n<tr class=\"memdesc:ga5085e3ff02abbac5e537eb7b89ab63b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5085e3ff02abbac5e537eb7b89ab63b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9cd7fa637a4a6788337f45231fad9e1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">umat3x2</a></td></tr>\n<tr class=\"memdesc:ga9cd7fa637a4a6788337f45231fad9e1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 3x2 matrix.  <a href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9cd7fa637a4a6788337f45231fad9e1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f2cfcf3357db0cdf31fcb15e3c6bafb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">umat3x3</a></td></tr>\n<tr class=\"memdesc:ga1f2cfcf3357db0cdf31fcb15e3c6bafb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f2cfcf3357db0cdf31fcb15e3c6bafb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7c78ff3fc4309605ab0fa186c8d48ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">umat3x4</a></td></tr>\n<tr class=\"memdesc:gae7c78ff3fc4309605ab0fa186c8d48ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 3x4 matrix.  <a href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7c78ff3fc4309605ab0fa186c8d48ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga38bc7bb6494e344185df596deeb4544c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">umat4</a></td></tr>\n<tr class=\"memdesc:ga38bc7bb6494e344185df596deeb4544c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 4x4 matrix.  <a href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga38bc7bb6494e344185df596deeb4544c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70fa2d05896aa83cbc8c07672a429b53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">umat4x2</a></td></tr>\n<tr class=\"memdesc:ga70fa2d05896aa83cbc8c07672a429b53\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 4x2 matrix.  <a href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">More...</a><br /></td></tr>\n<tr class=\"separator:ga70fa2d05896aa83cbc8c07672a429b53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga87581417945411f75cb31dd6ca1dba98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">umat4x3</a></td></tr>\n<tr class=\"memdesc:ga87581417945411f75cb31dd6ca1dba98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 4x3 matrix.  <a href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga87581417945411f75cb31dd6ca1dba98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf72e6d399c42985db6872c50f53d7eb8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">umat4x4</a></td></tr>\n<tr class=\"memdesc:gaf72e6d399c42985db6872c50f53d7eb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 4x4 matrix.  <a href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf72e6d399c42985db6872c50f53d7eb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00294.html\">GLM_GTC_matrix_integer</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00100_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_integer.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_integer.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00100.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_matrix_integer extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga8499cc3b016003f835314c1c756e9db9\">   37</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga8499cc3b016003f835314c1c756e9db9\">highp_imat2</a>;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaca4506a3efa679eff7c006d9826291fd\">   41</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#gaca4506a3efa679eff7c006d9826291fd\">highp_imat3</a>;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56\">   45</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56\">highp_imat4</a>;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3\">   49</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3\">highp_imat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaba49d890e06c9444795f5a133fbf1336\">   53</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#gaba49d890e06c9444795f5a133fbf1336\">highp_imat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b\">   57</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b\">highp_imat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb\">   61</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb\">highp_imat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41\">   65</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41\">highp_imat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga53008f580be99018a17b357b5a4ffc0d\">   69</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga53008f580be99018a17b357b5a4ffc0d\">highp_imat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga1858820fb292cae396408b2034407f72\">   73</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga1858820fb292cae396408b2034407f72\">highp_imat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5\">   77</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5\">highp_imat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44\">   81</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, int, highp&gt;                           <a class=\"code\" href=\"a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44\">highp_imat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378\">   86</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378\">mediump_imat2</a>;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga6c63bdc736efd3466e0730de0251cb71\">   90</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga6c63bdc736efd3466e0730de0251cb71\">mediump_imat3</a>;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaf348552978553630d2a00b78eb887ced\">   94</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#gaf348552978553630d2a00b78eb887ced\">mediump_imat4</a>;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga4b2aeb11a329940721dda9583e71f856\">   99</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga4b2aeb11a329940721dda9583e71f856\">mediump_imat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga74362470ba99843ac70aee5ac38cc674\">  103</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga74362470ba99843ac70aee5ac38cc674\">mediump_imat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09\">  107</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09\">mediump_imat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809\">  111</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809\">mediump_imat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12\">  115</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12\">mediump_imat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga67689a518b181a26540bc44a163525cd\">  119</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga67689a518b181a26540bc44a163525cd\">mediump_imat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc\">  123</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc\">mediump_imat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga5b10acc696759e03f6ab918f4467e94c\">  127</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga5b10acc696759e03f6ab918f4467e94c\">mediump_imat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga2596869d154dec1180beadbb9df80501\">  131</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, int, mediump&gt;                 <a class=\"code\" href=\"a00294.html#ga2596869d154dec1180beadbb9df80501\">mediump_imat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaa0bff0be804142bb16d441aec0a7962e\">  136</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#gaa0bff0be804142bb16d441aec0a7962e\">lowp_imat2</a>;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga69bfe668f4170379fc1f35d82b060c43\">  140</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga69bfe668f4170379fc1f35d82b060c43\">lowp_imat3</a>;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c\">  144</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c\">lowp_imat4</a>;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga92b95b679975d408645547ab45a8dcd8\">  149</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga92b95b679975d408645547ab45a8dcd8\">lowp_imat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65\">  153</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65\">lowp_imat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e\">  157</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e\">lowp_imat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga33db8f27491d30906cd37c0d86b3f432\">  161</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga33db8f27491d30906cd37c0d86b3f432\">lowp_imat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga664f061df00020048c3f8530329ace45\">  165</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga664f061df00020048c3f8530329ace45\">lowp_imat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga9273faab33623d944af4080befbb2c80\">  169</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga9273faab33623d944af4080befbb2c80\">lowp_imat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09\">  173</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09\">lowp_imat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga8f40483a3ae634ead8ad22272c543a33\">  177</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#ga8f40483a3ae634ead8ad22272c543a33\">lowp_imat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaf65677e53ac8e31a107399340d5e2451\">  181</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, int, lowp&gt;                            <a class=\"code\" href=\"a00294.html#gaf65677e53ac8e31a107399340d5e2451\">lowp_imat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga42cbce64c4c1cd121b8437daa6e110de\">  186</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#ga42cbce64c4c1cd121b8437daa6e110de\">highp_umat2</a>;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaa1143120339b7d2d469d327662e8a172\">  190</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#gaa1143120339b7d2d469d327662e8a172\">highp_umat3</a>;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9\">  194</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9\">highp_umat4</a>;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28\">  198</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28\">highp_umat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga90718c7128320b24b52f9ea70e643ad4\">  202</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#ga90718c7128320b24b52f9ea70e643ad4\">highp_umat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b\">  206</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b\">highp_umat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4\">  210</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4\">highp_umat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2\">  214</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2\">highp_umat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga25ee15c323924f2d0fe9896d329e5086\">  218</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#ga25ee15c323924f2d0fe9896d329e5086\">highp_umat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801\">  222</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801\">highp_umat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga45a8163d02c43216252056b0c120f3a5\">  226</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#ga45a8163d02c43216252056b0c120f3a5\">highp_umat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga6a56cbb769aed334c95241664415f9ba\">  230</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, uint, highp&gt;                          <a class=\"code\" href=\"a00294.html#ga6a56cbb769aed334c95241664415f9ba\">highp_umat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee\">  235</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee\">mediump_umat2</a>;</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a\">  239</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a\">mediump_umat3</a>;</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga5087c2beb26a11d9af87432e554cf9d1\">  243</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#ga5087c2beb26a11d9af87432e554cf9d1\">mediump_umat4</a>;</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga3b209b1b751f041422137e3c065dfa98\">  248</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#ga3b209b1b751f041422137e3c065dfa98\">mediump_umat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306\">  252</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306\">mediump_umat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gae1317ddca16d01e119a40b7f0ee85f95\">  256</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#gae1317ddca16d01e119a40b7f0ee85f95\">mediump_umat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaadc28bfdc8ebca81ae85121b11994970\">  260</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#gaadc28bfdc8ebca81ae85121b11994970\">mediump_umat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d\">  264</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d\">mediump_umat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga78009a1e4ca64217e46b418535e52546\">  268</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#ga78009a1e4ca64217e46b418535e52546\">mediump_umat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaf35aefd81cc13718f6b059623f7425fa\">  272</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#gaf35aefd81cc13718f6b059623f7425fa\">mediump_umat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb\">  276</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb\">mediump_umat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaa9428fc8430dc552aad920653f822ef3\">  280</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, uint, mediump&gt;                        <a class=\"code\" href=\"a00294.html#gaa9428fc8430dc552aad920653f822ef3\">mediump_umat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaf2fba702d990437fc88ff3f3a76846ee\">  285</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#gaf2fba702d990437fc88ff3f3a76846ee\">lowp_umat2</a>;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaf1145f72bcdd590f5808c4bc170c2924\">  289</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#gaf1145f72bcdd590f5808c4bc170c2924\">lowp_umat3</a>;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gac092c6105827bf9ea080db38074b78eb\">  293</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#gac092c6105827bf9ea080db38074b78eb\">lowp_umat4</a>;</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga7b2e9d89745f7175051284e54c81d81c\">  298</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#ga7b2e9d89745f7175051284e54c81d81c\">lowp_umat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga3072f90fd86f17a862e21589fbb14c0f\">  302</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#ga3072f90fd86f17a862e21589fbb14c0f\">lowp_umat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d\">  306</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d\">lowp_umat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b\">  310</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b\">lowp_umat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5\">  314</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5\">lowp_umat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaec3d624306bd59649f021864709d56b5\">  318</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#gaec3d624306bd59649f021864709d56b5\">lowp_umat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga7716c2b210d141846f1ac4e774adef5e\">  322</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#ga7716c2b210d141846f1ac4e774adef5e\">lowp_umat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff\">  326</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff\">lowp_umat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0\">  330</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, uint, lowp&gt;                           <a class=\"code\" href=\"a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0\">lowp_umat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;<span class=\"preprocessor\">#if(defined(GLM_PRECISION_HIGHP_INT))</span></div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat2                                                             <a class=\"code\" href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">imat2</a>;</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat3                                                             <a class=\"code\" href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">imat3</a>;</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat4                                                             <a class=\"code\" href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">imat4</a>;</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat2x2                                                   <a class=\"code\" href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">imat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat2x3                                                   <a class=\"code\" href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">imat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat2x4                                                   <a class=\"code\" href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">imat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat3x2                                                   <a class=\"code\" href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">imat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat3x3                                                   <a class=\"code\" href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">imat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat3x4                                                   <a class=\"code\" href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">imat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat4x2                                                   <a class=\"code\" href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">imat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat4x3                                                   <a class=\"code\" href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">imat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;        <span class=\"keyword\">typedef</span> highp_imat4x4                                                   <a class=\"code\" href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">imat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_LOWP_INT))</span></div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat2                                                              <a class=\"code\" href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">imat2</a>;</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat3                                                              <a class=\"code\" href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">imat3</a>;</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat4                                                              <a class=\"code\" href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">imat4</a>;</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat2x2                                                    <a class=\"code\" href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">imat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat2x3                                                    <a class=\"code\" href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">imat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat2x4                                                    <a class=\"code\" href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">imat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat3x2                                                    <a class=\"code\" href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">imat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat3x3                                                    <a class=\"code\" href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">imat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat3x4                                                    <a class=\"code\" href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">imat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat4x2                                                    <a class=\"code\" href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">imat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat4x3                                                    <a class=\"code\" href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">imat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;        <span class=\"keyword\">typedef</span> lowp_imat4x4                                                    <a class=\"code\" href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">imat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;<span class=\"preprocessor\">#else //if(defined(GLM_PRECISION_MEDIUMP_INT))</span></div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">  362</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat2                                                   <a class=\"code\" href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">imat2</a>;</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">  366</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat3                                                   <a class=\"code\" href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">imat3</a>;</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">  370</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat4                                                   <a class=\"code\" href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">imat4</a>;</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">  374</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat2x2                                                 <a class=\"code\" href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">imat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">  378</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat2x3                                                 <a class=\"code\" href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">imat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">  382</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat2x4                                                 <a class=\"code\" href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">imat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">  386</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat3x2                                                 <a class=\"code\" href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">imat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">  390</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat3x3                                                 <a class=\"code\" href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">imat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">  394</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat3x4                                                 <a class=\"code\" href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">imat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">  398</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat4x2                                                 <a class=\"code\" href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">imat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">  402</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat4x3                                                 <a class=\"code\" href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">imat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">  406</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_imat4x4                                                 <a class=\"code\" href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">imat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;<span class=\"preprocessor\">#endif//GLM_PRECISION</span></div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;<span class=\"preprocessor\">#if(defined(GLM_PRECISION_HIGHP_UINT))</span></div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat2                                                             <a class=\"code\" href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">umat2</a>;</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat3                                                             <a class=\"code\" href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">umat3</a>;</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat4                                                             <a class=\"code\" href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">umat4</a>;</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat2x2                                                   <a class=\"code\" href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">umat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat2x3                                                   <a class=\"code\" href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">umat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat2x4                                                   <a class=\"code\" href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">umat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat3x2                                                   <a class=\"code\" href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">umat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat3x3                                                   <a class=\"code\" href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">umat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat3x4                                                   <a class=\"code\" href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">umat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat4x2                                                   <a class=\"code\" href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">umat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat4x3                                                   <a class=\"code\" href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">umat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;        <span class=\"keyword\">typedef</span> highp_umat4x4                                                   <a class=\"code\" href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">umat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_LOWP_UINT))</span></div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat2                                                              <a class=\"code\" href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">umat2</a>;</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat3                                                              <a class=\"code\" href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">umat3</a>;</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat4                                                              <a class=\"code\" href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">umat4</a>;</div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat2x2                                                    <a class=\"code\" href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">umat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat2x3                                                    <a class=\"code\" href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">umat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat2x4                                                    <a class=\"code\" href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">umat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat3x2                                                    <a class=\"code\" href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">umat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat3x3                                                    <a class=\"code\" href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">umat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat3x4                                                    <a class=\"code\" href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">umat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat4x2                                                    <a class=\"code\" href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">umat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat4x3                                                    <a class=\"code\" href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">umat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;        <span class=\"keyword\">typedef</span> lowp_umat4x4                                                    <a class=\"code\" href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">umat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;<span class=\"preprocessor\">#else //if(defined(GLM_PRECISION_MEDIUMP_UINT))</span></div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;</div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">  439</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat2                                                   <a class=\"code\" href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">umat2</a>;</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">  443</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat3                                                   <a class=\"code\" href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">umat3</a>;</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">  447</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat4                                                   <a class=\"code\" href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">umat4</a>;</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;</div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">  451</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat2x2                                                 <a class=\"code\" href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">umat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">  455</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat2x3                                                 <a class=\"code\" href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">umat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">  459</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat2x4                                                 <a class=\"code\" href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">umat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">  463</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat3x2                                                 <a class=\"code\" href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">umat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;</div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">  467</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat3x3                                                 <a class=\"code\" href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">umat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">  471</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat3x4                                                 <a class=\"code\" href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">umat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;</div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">  475</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat4x2                                                 <a class=\"code\" href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">umat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;</div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">  479</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat4x3                                                 <a class=\"code\" href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">umat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;</div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">  483</a></span>&#160;        <span class=\"keyword\">typedef</span> mediump_umat4x4                                                 <a class=\"code\" href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">umat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;<span class=\"preprocessor\">#endif//GLM_PRECISION</span></div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;</div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00294_html_ga43ed5e4f475b6f4cad7cba78f29c405b\"><div class=\"ttname\"><a href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">glm::imat4x4</a></div><div class=\"ttdeci\">mediump_imat4x4 imat4x4</div><div class=\"ttdoc\">Signed integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00406\">matrix_integer.hpp:406</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaa4732a240522ad9bc28144fda2fc14ec\"><div class=\"ttname\"><a href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">glm::imat2x2</a></div><div class=\"ttdeci\">mediump_imat2x2 imat2x2</div><div class=\"ttdoc\">Signed integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00374\">matrix_integer.hpp:374</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga38bc7bb6494e344185df596deeb4544c\"><div class=\"ttname\"><a href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">glm::umat4</a></div><div class=\"ttdeci\">mediump_umat4 umat4</div><div class=\"ttdoc\">Unsigned integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00447\">matrix_integer.hpp:447</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga70fa2d05896aa83cbc8c07672a429b53\"><div class=\"ttname\"><a href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">glm::umat4x2</a></div><div class=\"ttdeci\">mediump_umat4x2 umat4x2</div><div class=\"ttdoc\">Unsigned integer 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00475\">matrix_integer.hpp:475</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga10aafc66cf1a0ece336b1c5ae13d0cc0\"><div class=\"ttname\"><a href=\"a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0\">glm::lowp_umat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, uint, lowp &gt; lowp_umat4x4</div><div class=\"ttdoc\">Low-qualifier unsigned integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00330\">matrix_integer.hpp:330</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga8b2d35816f7103f0f4c82dd2f27571fc\"><div class=\"ttname\"><a href=\"a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc\">glm::mediump_imat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, int, mediump &gt; mediump_imat4x2</div><div class=\"ttdoc\">Medium-qualifier signed integer 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00123\">matrix_integer.hpp:123</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gac092c6105827bf9ea080db38074b78eb\"><div class=\"ttname\"><a href=\"a00294.html#gac092c6105827bf9ea080db38074b78eb\">glm::lowp_umat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, uint, lowp &gt; lowp_umat4</div><div class=\"ttdoc\">Low-qualifier unsigned integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00293\">matrix_integer.hpp:293</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga91c671c3ff9706c2393e78b22fd84bcb\"><div class=\"ttname\"><a href=\"a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb\">glm::highp_imat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, int, highp &gt; highp_imat3x2</div><div class=\"ttdoc\">High-qualifier signed integer 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00061\">matrix_integer.hpp:61</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga1f7d41c36b980774a4d2e7c1647fb4b2\"><div class=\"ttname\"><a href=\"a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2\">glm::highp_umat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, uint, highp &gt; highp_umat3x3</div><div class=\"ttdoc\">High-qualifier unsigned integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00214\">matrix_integer.hpp:214</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga7b2e9d89745f7175051284e54c81d81c\"><div class=\"ttname\"><a href=\"a00294.html#ga7b2e9d89745f7175051284e54c81d81c\">glm::lowp_umat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, uint, lowp &gt; lowp_umat2x2</div><div class=\"ttdoc\">Low-qualifier unsigned integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00298\">matrix_integer.hpp:298</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga1f2cfcf3357db0cdf31fcb15e3c6bafb\"><div class=\"ttname\"><a href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">glm::umat3x3</a></div><div class=\"ttdeci\">mediump_umat3x3 umat3x3</div><div class=\"ttdoc\">Unsigned integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00467\">matrix_integer.hpp:467</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gadca0a4724b4a6f56a2355b6f6e19248b\"><div class=\"ttname\"><a href=\"a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b\">glm::highp_umat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, uint, highp &gt; highp_umat2x4</div><div class=\"ttdoc\">High-qualifier unsigned integer 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00206\">matrix_integer.hpp:206</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga9cd7fa637a4a6788337f45231fad9e1a\"><div class=\"ttname\"><a href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">glm::umat3x2</a></div><div class=\"ttdeci\">mediump_umat3x2 umat3x2</div><div class=\"ttdoc\">Unsigned integer 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00463\">matrix_integer.hpp:463</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga33db8f27491d30906cd37c0d86b3f432\"><div class=\"ttname\"><a href=\"a00294.html#ga33db8f27491d30906cd37c0d86b3f432\">glm::lowp_imat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, int, lowp &gt; lowp_imat3x2</div><div class=\"ttdoc\">Low-qualifier signed integer 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00161\">matrix_integer.hpp:161</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaa1143120339b7d2d469d327662e8a172\"><div class=\"ttname\"><a href=\"a00294.html#gaa1143120339b7d2d469d327662e8a172\">glm::highp_umat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, uint, highp &gt; highp_umat3</div><div class=\"ttdoc\">High-qualifier unsigned integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00190\">matrix_integer.hpp:190</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga5b10acc696759e03f6ab918f4467e94c\"><div class=\"ttname\"><a href=\"a00294.html#ga5b10acc696759e03f6ab918f4467e94c\">glm::mediump_imat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, int, mediump &gt; mediump_imat4x3</div><div class=\"ttdoc\">Medium-qualifier signed integer 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00127\">matrix_integer.hpp:127</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga038f68437155ffa3c2583a15264a8195\"><div class=\"ttname\"><a href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">glm::imat3</a></div><div class=\"ttdeci\">mediump_imat3 imat3</div><div class=\"ttdoc\">Signed integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00366\">matrix_integer.hpp:366</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga20f4cc7ab23e2aa1f4db9fdb5496d378\"><div class=\"ttname\"><a href=\"a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378\">glm::mediump_imat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, int, mediump &gt; mediump_imat2</div><div class=\"ttdoc\">Medium-qualifier signed integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00086\">matrix_integer.hpp:86</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga78009a1e4ca64217e46b418535e52546\"><div class=\"ttname\"><a href=\"a00294.html#ga78009a1e4ca64217e46b418535e52546\">glm::mediump_umat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, uint, mediump &gt; mediump_umat3x4</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00268\">matrix_integer.hpp:268</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaf65677e53ac8e31a107399340d5e2451\"><div class=\"ttname\"><a href=\"a00294.html#gaf65677e53ac8e31a107399340d5e2451\">glm::lowp_imat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, int, lowp &gt; lowp_imat4x4</div><div class=\"ttdoc\">Low-qualifier signed integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00181\">matrix_integer.hpp:181</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga05a970fd4366dad6c8a0be676b1eae5b\"><div class=\"ttname\"><a href=\"a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b\">glm::highp_imat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, int, highp &gt; highp_imat2x4</div><div class=\"ttdoc\">High-qualifier signed integer 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00057\">matrix_integer.hpp:57</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga1870da7578d5022b973a83155d386ab3\"><div class=\"ttname\"><a href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">glm::umat2x3</a></div><div class=\"ttdeci\">mediump_umat2x3 umat2x3</div><div class=\"ttdoc\">Unsigned integer 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00455\">matrix_integer.hpp:455</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga8f40483a3ae634ead8ad22272c543a33\"><div class=\"ttname\"><a href=\"a00294.html#ga8f40483a3ae634ead8ad22272c543a33\">glm::lowp_imat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, int, lowp &gt; lowp_imat4x3</div><div class=\"ttdoc\">Low-qualifier signed integer 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00177\">matrix_integer.hpp:177</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaf1145f72bcdd590f5808c4bc170c2924\"><div class=\"ttname\"><a href=\"a00294.html#gaf1145f72bcdd590f5808c4bc170c2924\">glm::lowp_umat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, uint, lowp &gt; lowp_umat3</div><div class=\"ttdoc\">Low-qualifier unsigned integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00289\">matrix_integer.hpp:289</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaa9428fc8430dc552aad920653f822ef3\"><div class=\"ttname\"><a href=\"a00294.html#gaa9428fc8430dc552aad920653f822ef3\">glm::mediump_umat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, uint, mediump &gt; mediump_umat4x4</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00280\">matrix_integer.hpp:280</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaadc28bfdc8ebca81ae85121b11994970\"><div class=\"ttname\"><a href=\"a00294.html#gaadc28bfdc8ebca81ae85121b11994970\">glm::mediump_umat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, uint, mediump &gt; mediump_umat3x2</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00260\">matrix_integer.hpp:260</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gae1317ddca16d01e119a40b7f0ee85f95\"><div class=\"ttname\"><a href=\"a00294.html#gae1317ddca16d01e119a40b7f0ee85f95\">glm::mediump_umat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, uint, mediump &gt; mediump_umat2x4</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00256\">matrix_integer.hpp:256</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga2c783ee6f8f040ab37df2f70392c8b44\"><div class=\"ttname\"><a href=\"a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44\">glm::highp_imat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, int, highp &gt; highp_imat4x4</div><div class=\"ttdoc\">High-qualifier signed integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00081\">matrix_integer.hpp:81</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga8bb45fec4bd77bd81b4ae7eb961a270d\"><div class=\"ttname\"><a href=\"a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d\">glm::lowp_umat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, uint, lowp &gt; lowp_umat2x4</div><div class=\"ttdoc\">Low-qualifier unsigned integer 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00306\">matrix_integer.hpp:306</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga705ee0bf49d6c3de4404ce2481bf0df5\"><div class=\"ttname\"><a href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">glm::imat4x3</a></div><div class=\"ttdeci\">mediump_imat4x3 imat4x3</div><div class=\"ttdoc\">Signed integer 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00402\">matrix_integer.hpp:402</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga48f2fc38d3f7fab3cfbc961278ced53d\"><div class=\"ttname\"><a href=\"a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d\">glm::mediump_umat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, uint, mediump &gt; mediump_umat3x3</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00264\">matrix_integer.hpp:264</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga8499cc3b016003f835314c1c756e9db9\"><div class=\"ttname\"><a href=\"a00294.html#ga8499cc3b016003f835314c1c756e9db9\">glm::highp_imat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, int, highp &gt; highp_imat2</div><div class=\"ttdoc\">High-qualifier signed integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00037\">matrix_integer.hpp:37</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga4cae85566f900debf930c41944b64691\"><div class=\"ttname\"><a href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">glm::umat2</a></div><div class=\"ttdeci\">mediump_umat2 umat2</div><div class=\"ttdoc\">Unsigned integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00439\">matrix_integer.hpp:439</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaec3d624306bd59649f021864709d56b5\"><div class=\"ttname\"><a href=\"a00294.html#gaec3d624306bd59649f021864709d56b5\">glm::lowp_umat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, uint, lowp &gt; lowp_umat3x4</div><div class=\"ttdoc\">Low-qualifier unsigned integer 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00318\">matrix_integer.hpp:318</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaf35aefd81cc13718f6b059623f7425fa\"><div class=\"ttname\"><a href=\"a00294.html#gaf35aefd81cc13718f6b059623f7425fa\">glm::mediump_umat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, uint, mediump &gt; mediump_umat4x2</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00272\">matrix_integer.hpp:272</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga8ce7ef51d8b2c1901fa5414deccbc3fa\"><div class=\"ttname\"><a href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">glm::imat4x2</a></div><div class=\"ttdeci\">mediump_imat4x2 imat4x2</div><div class=\"ttdoc\">Signed integer 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00398\">matrix_integer.hpp:398</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga74362470ba99843ac70aee5ac38cc674\"><div class=\"ttname\"><a href=\"a00294.html#ga74362470ba99843ac70aee5ac38cc674\">glm::mediump_imat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, int, mediump &gt; mediump_imat2x3</div><div class=\"ttdoc\">Medium-qualifier signed integer 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00103\">matrix_integer.hpp:103</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga43041378b3410ea951b7de0dfd2bc7ee\"><div class=\"ttname\"><a href=\"a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee\">glm::mediump_umat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, uint, mediump &gt; mediump_umat2</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00235\">matrix_integer.hpp:235</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaabe04f9948d4a213bb1c20137de03e01\"><div class=\"ttname\"><a href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">glm::imat2</a></div><div class=\"ttdeci\">mediump_imat2 imat2</div><div class=\"ttdoc\">Signed integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00362\">matrix_integer.hpp:362</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga4e1bed14fbc7f4b376aaed064f89f0fb\"><div class=\"ttname\"><a href=\"a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb\">glm::mediump_umat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, uint, mediump &gt; mediump_umat4x3</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00276\">matrix_integer.hpp:276</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga6c63bdc736efd3466e0730de0251cb71\"><div class=\"ttname\"><a href=\"a00294.html#ga6c63bdc736efd3466e0730de0251cb71\">glm::mediump_imat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, int, mediump &gt; mediump_imat3</div><div class=\"ttdoc\">Medium-qualifier signed integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00090\">matrix_integer.hpp:90</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga42cbce64c4c1cd121b8437daa6e110de\"><div class=\"ttname\"><a href=\"a00294.html#ga42cbce64c4c1cd121b8437daa6e110de\">glm::highp_umat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, uint, highp &gt; highp_umat2</div><div class=\"ttdoc\">High-qualifier unsigned integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00186\">matrix_integer.hpp:186</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga6e9ce23496d8b08dfc302d4039694b58\"><div class=\"ttname\"><a href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">glm::imat3x4</a></div><div class=\"ttdeci\">mediump_imat3x4 imat3x4</div><div class=\"ttdoc\">Signed integer 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00394\">matrix_integer.hpp:394</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga844a5da2e7fc03fc7cccc7f1b70809c4\"><div class=\"ttname\"><a href=\"a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4\">glm::highp_umat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, uint, highp &gt; highp_umat3x2</div><div class=\"ttdoc\">High-qualifier unsigned integer 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00210\">matrix_integer.hpp:210</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaa389e2d1c3b10941cae870bc0aeba5b3\"><div class=\"ttname\"><a href=\"a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3\">glm::highp_imat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, int, highp &gt; highp_imat2x2</div><div class=\"ttdoc\">High-qualifier signed integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00049\">matrix_integer.hpp:49</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga25ee15c323924f2d0fe9896d329e5086\"><div class=\"ttname\"><a href=\"a00294.html#ga25ee15c323924f2d0fe9896d329e5086\">glm::highp_umat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, uint, highp &gt; highp_umat3x4</div><div class=\"ttdoc\">High-qualifier unsigned integer 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00218\">matrix_integer.hpp:218</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gad99cc2aad8fc57f068cfa7719dbbea12\"><div class=\"ttname\"><a href=\"a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12\">glm::mediump_imat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, int, mediump &gt; mediump_imat3x3</div><div class=\"ttdoc\">Medium-qualifier signed integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00115\">matrix_integer.hpp:115</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga6a56cbb769aed334c95241664415f9ba\"><div class=\"ttname\"><a href=\"a00294.html#ga6a56cbb769aed334c95241664415f9ba\">glm::highp_umat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, uint, highp &gt; highp_umat4x4</div><div class=\"ttdoc\">High-qualifier unsigned integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00230\">matrix_integer.hpp:230</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga9d8faafdca42583d67e792dd038fc668\"><div class=\"ttname\"><a href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">glm::imat2x4</a></div><div class=\"ttdeci\">mediump_imat2x4 imat2x4</div><div class=\"ttdoc\">Signed integer 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00382\">matrix_integer.hpp:382</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga57936a3998e992370e59a223e0ee4fd4\"><div class=\"ttname\"><a href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">glm::umat2x4</a></div><div class=\"ttdeci\">mediump_umat2x4 umat2x4</div><div class=\"ttdoc\">Unsigned integer 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00459\">matrix_integer.hpp:459</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga8da25cd380ba30fc5b68a4687deb3e09\"><div class=\"ttname\"><a href=\"a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09\">glm::mediump_imat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, int, mediump &gt; mediump_imat2x4</div><div class=\"ttdoc\">Medium-qualifier signed integer 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00107\">matrix_integer.hpp:107</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaa0bff0be804142bb16d441aec0a7962e\"><div class=\"ttname\"><a href=\"a00294.html#gaa0bff0be804142bb16d441aec0a7962e\">glm::lowp_imat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, int, lowp &gt; lowp_imat2</div><div class=\"ttdoc\">Low-qualifier signed integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00136\">matrix_integer.hpp:136</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga26ec1a2ba08a1488f5f05336858a0f09\"><div class=\"ttname\"><a href=\"a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09\">glm::lowp_imat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, int, lowp &gt; lowp_imat4x2</div><div class=\"ttdoc\">Low-qualifier signed integer 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00173\">matrix_integer.hpp:173</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga09ab33a2636f5f43f7fae29cfbc20fff\"><div class=\"ttname\"><a href=\"a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff\">glm::lowp_umat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, uint, lowp &gt; lowp_umat4x3</div><div class=\"ttdoc\">Low-qualifier unsigned integer 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00326\">matrix_integer.hpp:326</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga96b0d26a33b81bb6a60ca0f39682f7eb\"><div class=\"ttname\"><a href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">glm::imat4</a></div><div class=\"ttdeci\">mediump_imat4 imat4</div><div class=\"ttdoc\">Signed integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00370\">matrix_integer.hpp:370</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga7b33bbe4f12c060892bd3cc8d4cd737f\"><div class=\"ttname\"><a href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">glm::imat3x2</a></div><div class=\"ttdeci\">mediump_imat3x2 imat3x2</div><div class=\"ttdoc\">Signed integer 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00386\">matrix_integer.hpp:386</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga3072f90fd86f17a862e21589fbb14c0f\"><div class=\"ttname\"><a href=\"a00294.html#ga3072f90fd86f17a862e21589fbb14c0f\">glm::lowp_umat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, uint, lowp &gt; lowp_umat2x3</div><div class=\"ttdoc\">Low-qualifier unsigned integer 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00302\">matrix_integer.hpp:302</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gac0b4e42d648fb3eaf4bb88da82ecc809\"><div class=\"ttname\"><a href=\"a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809\">glm::mediump_imat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, int, mediump &gt; mediump_imat3x2</div><div class=\"ttdoc\">Medium-qualifier signed integer 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00111\">matrix_integer.hpp:111</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaf72e6d399c42985db6872c50f53d7eb8\"><div class=\"ttname\"><a href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">glm::umat4x4</a></div><div class=\"ttdeci\">mediump_umat4x4 umat4x4</div><div class=\"ttdoc\">Unsigned integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00483\">matrix_integer.hpp:483</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga6be0b80ae74bb309bc5b964d93d68fc5\"><div class=\"ttname\"><a href=\"a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5\">glm::highp_imat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, int, highp &gt; highp_imat4x3</div><div class=\"ttdoc\">High-qualifier signed integer 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00077\">matrix_integer.hpp:77</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga87581417945411f75cb31dd6ca1dba98\"><div class=\"ttname\"><a href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">glm::umat4x3</a></div><div class=\"ttdeci\">mediump_umat4x3 umat4x3</div><div class=\"ttdoc\">Unsigned integer 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00479\">matrix_integer.hpp:479</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga7716c2b210d141846f1ac4e774adef5e\"><div class=\"ttname\"><a href=\"a00294.html#ga7716c2b210d141846f1ac4e774adef5e\">glm::lowp_umat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, uint, lowp &gt; lowp_umat4x2</div><div class=\"ttdoc\">Low-qualifier unsigned integer 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00322\">matrix_integer.hpp:322</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga56ea68c6a6cba8d8c21d17bb14e69c6b\"><div class=\"ttname\"><a href=\"a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b\">glm::lowp_umat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, uint, lowp &gt; lowp_umat3x2</div><div class=\"ttdoc\">Low-qualifier unsigned integer 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00310\">matrix_integer.hpp:310</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga5337b7bc95f9cbac08a0c00b3f936b28\"><div class=\"ttname\"><a href=\"a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28\">glm::highp_umat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, uint, highp &gt; highp_umat2x2</div><div class=\"ttdoc\">High-qualifier unsigned integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00198\">matrix_integer.hpp:198</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga664f061df00020048c3f8530329ace45\"><div class=\"ttname\"><a href=\"a00294.html#ga664f061df00020048c3f8530329ace45\">glm::lowp_imat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, int, lowp &gt; lowp_imat3x3</div><div class=\"ttdoc\">Low-qualifier signed integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00165\">matrix_integer.hpp:165</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga07d7b7173e2a6f843ff5f1c615a95b41\"><div class=\"ttname\"><a href=\"a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41\">glm::highp_imat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, int, highp &gt; highp_imat3x3</div><div class=\"ttdoc\">High-qualifier signed integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00065\">matrix_integer.hpp:65</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaee2c1f13b41f4c92ea5b3efe367a1306\"><div class=\"ttname\"><a href=\"a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306\">glm::mediump_umat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, uint, mediump &gt; mediump_umat2x3</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00252\">matrix_integer.hpp:252</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gae69eb82ec08b0dc9bf2ead2a339ff801\"><div class=\"ttname\"><a href=\"a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801\">glm::highp_umat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, uint, highp &gt; highp_umat4x2</div><div class=\"ttdoc\">High-qualifier unsigned integer 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00222\">matrix_integer.hpp:222</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga4f660a39a395cc14f018f985e7dfbeb5\"><div class=\"ttname\"><a href=\"a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5\">glm::lowp_umat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, uint, lowp &gt; lowp_umat3x3</div><div class=\"ttdoc\">Low-qualifier unsigned integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00314\">matrix_integer.hpp:314</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga3f42dd3d5d94a0fd5706f7ec8dd0c605\"><div class=\"ttname\"><a href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">glm::imat2x3</a></div><div class=\"ttdeci\">mediump_imat2x3 imat2x3</div><div class=\"ttdoc\">Signed integer 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00378\">matrix_integer.hpp:378</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga8c9e7a388f8e7c52f1e6857dee8afb65\"><div class=\"ttname\"><a href=\"a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65\">glm::lowp_imat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, int, lowp &gt; lowp_imat2x3</div><div class=\"ttdoc\">Low-qualifier signed integer 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00153\">matrix_integer.hpp:153</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaf665e4e78c2cc32a54ab40325738f9c9\"><div class=\"ttname\"><a href=\"a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9\">glm::highp_umat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, uint, highp &gt; highp_umat4</div><div class=\"ttdoc\">High-qualifier unsigned integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00194\">matrix_integer.hpp:194</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaca4506a3efa679eff7c006d9826291fd\"><div class=\"ttname\"><a href=\"a00294.html#gaca4506a3efa679eff7c006d9826291fd\">glm::highp_imat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, int, highp &gt; highp_imat3</div><div class=\"ttdoc\">High-qualifier signed integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00041\">matrix_integer.hpp:41</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga1730dbe3c67801f53520b06d1aa0a34a\"><div class=\"ttname\"><a href=\"a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a\">glm::mediump_umat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, uint, mediump &gt; mediump_umat3</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00239\">matrix_integer.hpp:239</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga4b2aeb11a329940721dda9583e71f856\"><div class=\"ttname\"><a href=\"a00294.html#ga4b2aeb11a329940721dda9583e71f856\">glm::mediump_imat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, int, mediump &gt; mediump_imat2x2</div><div class=\"ttdoc\">Medium-qualifier signed integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00099\">matrix_integer.hpp:99</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaba49d890e06c9444795f5a133fbf1336\"><div class=\"ttname\"><a href=\"a00294.html#gaba49d890e06c9444795f5a133fbf1336\">glm::highp_imat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, int, highp &gt; highp_imat2x3</div><div class=\"ttdoc\">High-qualifier signed integer 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00053\">matrix_integer.hpp:53</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga1858820fb292cae396408b2034407f72\"><div class=\"ttname\"><a href=\"a00294.html#ga1858820fb292cae396408b2034407f72\">glm::highp_imat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, int, highp &gt; highp_imat4x2</div><div class=\"ttdoc\">High-qualifier signed integer 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00073\">matrix_integer.hpp:73</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga9273faab33623d944af4080befbb2c80\"><div class=\"ttname\"><a href=\"a00294.html#ga9273faab33623d944af4080befbb2c80\">glm::lowp_imat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, int, lowp &gt; lowp_imat3x4</div><div class=\"ttdoc\">Low-qualifier signed integer 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00169\">matrix_integer.hpp:169</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga5085e3ff02abbac5e537eb7b89ab63b6\"><div class=\"ttname\"><a href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">glm::umat3</a></div><div class=\"ttdeci\">mediump_umat3 umat3</div><div class=\"ttdoc\">Unsigned integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00443\">matrix_integer.hpp:443</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga92b95b679975d408645547ab45a8dcd8\"><div class=\"ttname\"><a href=\"a00294.html#ga92b95b679975d408645547ab45a8dcd8\">glm::lowp_imat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, int, lowp &gt; lowp_imat2x2</div><div class=\"ttdoc\">Low-qualifier signed integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00149\">matrix_integer.hpp:149</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga90718c7128320b24b52f9ea70e643ad4\"><div class=\"ttname\"><a href=\"a00294.html#ga90718c7128320b24b52f9ea70e643ad4\">glm::highp_umat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, uint, highp &gt; highp_umat2x3</div><div class=\"ttdoc\">High-qualifier unsigned integer 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00202\">matrix_integer.hpp:202</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga7cfb09b34e0fcf73eaf6512d6483ef56\"><div class=\"ttname\"><a href=\"a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56\">glm::highp_imat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, int, highp &gt; highp_imat4</div><div class=\"ttdoc\">High-qualifier signed integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00045\">matrix_integer.hpp:45</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga9cc13bd1f8dd2933e9fa31fe3f70e16e\"><div class=\"ttname\"><a href=\"a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e\">glm::lowp_imat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, int, lowp &gt; lowp_imat2x4</div><div class=\"ttdoc\">Low-qualifier signed integer 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00157\">matrix_integer.hpp:157</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga67689a518b181a26540bc44a163525cd\"><div class=\"ttname\"><a href=\"a00294.html#ga67689a518b181a26540bc44a163525cd\">glm::mediump_imat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, int, mediump &gt; mediump_imat3x4</div><div class=\"ttdoc\">Medium-qualifier signed integer 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00119\">matrix_integer.hpp:119</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga2596869d154dec1180beadbb9df80501\"><div class=\"ttname\"><a href=\"a00294.html#ga2596869d154dec1180beadbb9df80501\">glm::mediump_imat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, int, mediump &gt; mediump_imat4x4</div><div class=\"ttdoc\">Medium-qualifier signed integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00131\">matrix_integer.hpp:131</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaf348552978553630d2a00b78eb887ced\"><div class=\"ttname\"><a href=\"a00294.html#gaf348552978553630d2a00b78eb887ced\">glm::mediump_imat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, int, mediump &gt; mediump_imat4</div><div class=\"ttdoc\">Medium-qualifier signed integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00094\">matrix_integer.hpp:94</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga6aacc960f62e8f7d2fe9d32d5050e7a4\"><div class=\"ttname\"><a href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">glm::imat3x3</a></div><div class=\"ttdeci\">mediump_imat3x3 imat3x3</div><div class=\"ttdoc\">Signed integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00390\">matrix_integer.hpp:390</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga69bfe668f4170379fc1f35d82b060c43\"><div class=\"ttname\"><a href=\"a00294.html#ga69bfe668f4170379fc1f35d82b060c43\">glm::lowp_imat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, int, lowp &gt; lowp_imat3</div><div class=\"ttdoc\">Low-qualifier signed integer 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00140\">matrix_integer.hpp:140</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gaf2fba702d990437fc88ff3f3a76846ee\"><div class=\"ttname\"><a href=\"a00294.html#gaf2fba702d990437fc88ff3f3a76846ee\">glm::lowp_umat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, uint, lowp &gt; lowp_umat2</div><div class=\"ttdoc\">Low-qualifier unsigned integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00285\">matrix_integer.hpp:285</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga45a8163d02c43216252056b0c120f3a5\"><div class=\"ttname\"><a href=\"a00294.html#ga45a8163d02c43216252056b0c120f3a5\">glm::highp_umat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, uint, highp &gt; highp_umat4x3</div><div class=\"ttdoc\">High-qualifier unsigned integer 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00226\">matrix_integer.hpp:226</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gabf8acdd33ce8951051edbca5200898aa\"><div class=\"ttname\"><a href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">glm::umat2x2</a></div><div class=\"ttdeci\">mediump_umat2x2 umat2x2</div><div class=\"ttdoc\">Unsigned integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00451\">matrix_integer.hpp:451</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga5087c2beb26a11d9af87432e554cf9d1\"><div class=\"ttname\"><a href=\"a00294.html#ga5087c2beb26a11d9af87432e554cf9d1\">glm::mediump_umat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, uint, mediump &gt; mediump_umat4</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00243\">matrix_integer.hpp:243</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gad1e77f7270cad461ca4fcb4c3ec2e98c\"><div class=\"ttname\"><a href=\"a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c\">glm::lowp_imat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, int, lowp &gt; lowp_imat4</div><div class=\"ttdoc\">Low-qualifier signed integer 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00144\">matrix_integer.hpp:144</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_gae7c78ff3fc4309605ab0fa186c8d48ba\"><div class=\"ttname\"><a href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">glm::umat3x4</a></div><div class=\"ttdeci\">mediump_umat3x4 umat3x4</div><div class=\"ttdoc\">Unsigned integer 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00471\">matrix_integer.hpp:471</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga53008f580be99018a17b357b5a4ffc0d\"><div class=\"ttname\"><a href=\"a00294.html#ga53008f580be99018a17b357b5a4ffc0d\">glm::highp_imat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, int, highp &gt; highp_imat3x4</div><div class=\"ttdoc\">High-qualifier signed integer 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00069\">matrix_integer.hpp:69</a></div></div>\n<div class=\"ttc\" id=\"a00294_html_ga3b209b1b751f041422137e3c065dfa98\"><div class=\"ttname\"><a href=\"a00294.html#ga3b209b1b751f041422137e3c065dfa98\">glm::mediump_umat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, uint, mediump &gt; mediump_umat2x2</div><div class=\"ttdoc\">Medium-qualifier unsigned integer 2x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00100_source.html#l00248\">matrix_integer.hpp:248</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00101.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_interpolation.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_interpolation.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00337.html\">GLM_GTX_matrix_interpolation</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00101_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gafefe32ce5a90a135287ba34fac3623bc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafefe32ce5a90a135287ba34fac3623bc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html#gafefe32ce5a90a135287ba34fac3623bc\">axisAngle</a> (mat&lt; 4, 4, T, Q &gt; const &amp;Mat, vec&lt; 3, T, Q &gt; &amp;Axis, T &amp;Angle)</td></tr>\n<tr class=\"memdesc:gafefe32ce5a90a135287ba34fac3623bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get the axis and angle of the rotation from a matrix.  <a href=\"a00337.html#gafefe32ce5a90a135287ba34fac3623bc\">More...</a><br /></td></tr>\n<tr class=\"separator:gafefe32ce5a90a135287ba34fac3623bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a788e2f5223397df5c426413ecc2f6b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3a788e2f5223397df5c426413ecc2f6b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html#ga3a788e2f5223397df5c426413ecc2f6b\">axisAngleMatrix</a> (vec&lt; 3, T, Q &gt; const &amp;Axis, T const Angle)</td></tr>\n<tr class=\"memdesc:ga3a788e2f5223397df5c426413ecc2f6b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from axis and angle.  <a href=\"a00337.html#ga3a788e2f5223397df5c426413ecc2f6b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a788e2f5223397df5c426413ecc2f6b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabbc1c7385a145f04b5c54228965df145\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabbc1c7385a145f04b5c54228965df145\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html#gabbc1c7385a145f04b5c54228965df145\">extractMatrixRotation</a> (mat&lt; 4, 4, T, Q &gt; const &amp;Mat)</td></tr>\n<tr class=\"memdesc:gabbc1c7385a145f04b5c54228965df145\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the rotation part of a matrix.  <a href=\"a00337.html#gabbc1c7385a145f04b5c54228965df145\">More...</a><br /></td></tr>\n<tr class=\"separator:gabbc1c7385a145f04b5c54228965df145\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e67863d150724b10c1ac00972dc958c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4e67863d150724b10c1ac00972dc958c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html#ga4e67863d150724b10c1ac00972dc958c\">interpolate</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m1, mat&lt; 4, 4, T, Q &gt; const &amp;m2, T const Delta)</td></tr>\n<tr class=\"memdesc:ga4e67863d150724b10c1ac00972dc958c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a interpolation of 4 * 4 matrixes.  <a href=\"a00337.html#ga4e67863d150724b10c1ac00972dc958c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e67863d150724b10c1ac00972dc958c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00337.html\">GLM_GTX_matrix_interpolation</a> </p>\n<dl class=\"section author\"><dt>Author</dt><dd>Ghenadii Ursachi (<a href=\"#\" onclick=\"location.href='mai'+'lto:'+'the'+'.a'+'ste'+'ro'+'th@'+'gm'+'ail'+'.c'+'om'; return false;\">the.a<span style=\"display: none;\">.nosp@m.</span>ster<span style=\"display: none;\">.nosp@m.</span>oth@g<span style=\"display: none;\">.nosp@m.</span>mail<span style=\"display: none;\">.nosp@m.</span>.com</a>)</dd></dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00101_source.html\">matrix_interpolation.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00101_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_interpolation.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_interpolation.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00101.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_interpolation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_interpolation extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">void</span> <a class=\"code\" href=\"a00337.html#gafefe32ce5a90a135287ba34fac3623bc\">axisAngle</a>(</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; Mat, vec&lt;3, T, Q&gt; &amp; Axis, T &amp; Angle);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00337.html#ga3a788e2f5223397df5c426413ecc2f6b\">axisAngleMatrix</a>(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; Axis, T <span class=\"keyword\">const</span> Angle);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00337.html#gabbc1c7385a145f04b5c54228965df145\">extractMatrixRotation</a>(</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; Mat);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00337.html#ga4e67863d150724b10c1ac00972dc958c\">interpolate</a>(</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m1, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m2, T <span class=\"keyword\">const</span> Delta);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_interpolation.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00337_html_gabbc1c7385a145f04b5c54228965df145\"><div class=\"ttname\"><a href=\"a00337.html#gabbc1c7385a145f04b5c54228965df145\">glm::extractMatrixRotation</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; extractMatrixRotation(mat&lt; 4, 4, T, Q &gt; const &amp;Mat)</div><div class=\"ttdoc\">Extracts the rotation part of a matrix. </div></div>\n<div class=\"ttc\" id=\"a00337_html_ga4e67863d150724b10c1ac00972dc958c\"><div class=\"ttname\"><a href=\"a00337.html#ga4e67863d150724b10c1ac00972dc958c\">glm::interpolate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; interpolate(mat&lt; 4, 4, T, Q &gt; const &amp;m1, mat&lt; 4, 4, T, Q &gt; const &amp;m2, T const Delta)</div><div class=\"ttdoc\">Build a interpolation of 4 * 4 matrixes. </div></div>\n<div class=\"ttc\" id=\"a00337_html_gafefe32ce5a90a135287ba34fac3623bc\"><div class=\"ttname\"><a href=\"a00337.html#gafefe32ce5a90a135287ba34fac3623bc\">glm::axisAngle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL void axisAngle(mat&lt; 4, 4, T, Q &gt; const &amp;Mat, vec&lt; 3, T, Q &gt; &amp;Axis, T &amp;Angle)</div><div class=\"ttdoc\">Get the axis and angle of the rotation from a matrix. </div></div>\n<div class=\"ttc\" id=\"a00337_html_ga3a788e2f5223397df5c426413ecc2f6b\"><div class=\"ttname\"><a href=\"a00337.html#ga3a788e2f5223397df5c426413ecc2f6b\">glm::axisAngleMatrix</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; axisAngleMatrix(vec&lt; 3, T, Q &gt; const &amp;Axis, T const Angle)</div><div class=\"ttdoc\">Build a matrix from axis and angle. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00102.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_inverse.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_inverse.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00295.html\">GLM_GTC_matrix_inverse</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00102_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gae0fcc5fc8783291f9702272de428fa0e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae0fcc5fc8783291f9702272de428fa0e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00295.html#gae0fcc5fc8783291f9702272de428fa0e\">affineInverse</a> (genType const &amp;m)</td></tr>\n<tr class=\"memdesc:gae0fcc5fc8783291f9702272de428fa0e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Fast matrix inverse for affine matrix.  <a href=\"a00295.html#gae0fcc5fc8783291f9702272de428fa0e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae0fcc5fc8783291f9702272de428fa0e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab213cd0e3ead5f316d583f99d6312008\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gab213cd0e3ead5f316d583f99d6312008\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00295.html#gab213cd0e3ead5f316d583f99d6312008\">inverseTranspose</a> (genType const &amp;m)</td></tr>\n<tr class=\"memdesc:gab213cd0e3ead5f316d583f99d6312008\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the inverse transpose of a matrix.  <a href=\"a00295.html#gab213cd0e3ead5f316d583f99d6312008\">More...</a><br /></td></tr>\n<tr class=\"separator:gab213cd0e3ead5f316d583f99d6312008\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00295.html\">GLM_GTC_matrix_inverse</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00102_source.html\">matrix_inverse.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00102_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_inverse.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_inverse.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00102.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../matrix.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_matrix_inverse extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00295.html#gae0fcc5fc8783291f9702272de428fa0e\">affineInverse</a>(genType <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00295.html#gab213cd0e3ead5f316d583f99d6312008\">inverseTranspose</a>(genType <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_inverse.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00295_html_gab213cd0e3ead5f316d583f99d6312008\"><div class=\"ttname\"><a href=\"a00295.html#gab213cd0e3ead5f316d583f99d6312008\">glm::inverseTranspose</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType inverseTranspose(genType const &amp;m)</div><div class=\"ttdoc\">Compute the inverse transpose of a matrix. </div></div>\n<div class=\"ttc\" id=\"a00295_html_gae0fcc5fc8783291f9702272de428fa0e\"><div class=\"ttname\"><a href=\"a00295.html#gae0fcc5fc8783291f9702272de428fa0e\">glm::affineInverse</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType affineInverse(genType const &amp;m)</div><div class=\"ttdoc\">Fast matrix inverse for affine matrix. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00103.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_major_storage.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_major_storage.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00338.html\">GLM_GTX_matrix_major_storage</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00103_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaaff72f11286e59a4a88ed21a347f284c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaaff72f11286e59a4a88ed21a347f284c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaaff72f11286e59a4a88ed21a347f284c\">colMajor2</a> (vec&lt; 2, T, Q &gt; const &amp;v1, vec&lt; 2, T, Q &gt; const &amp;v2)</td></tr>\n<tr class=\"memdesc:gaaff72f11286e59a4a88ed21a347f284c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from column vectors.  <a href=\"a00338.html#gaaff72f11286e59a4a88ed21a347f284c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaff72f11286e59a4a88ed21a347f284c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafc25fd44196c92b1397b127aec1281ab\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafc25fd44196c92b1397b127aec1281ab\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gafc25fd44196c92b1397b127aec1281ab\">colMajor2</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gafc25fd44196c92b1397b127aec1281ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from other matrix.  <a href=\"a00338.html#gafc25fd44196c92b1397b127aec1281ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gafc25fd44196c92b1397b127aec1281ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1e25b72b085087740c92f5c70f3b051f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1e25b72b085087740c92f5c70f3b051f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#ga1e25b72b085087740c92f5c70f3b051f\">colMajor3</a> (vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)</td></tr>\n<tr class=\"memdesc:ga1e25b72b085087740c92f5c70f3b051f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from column vectors.  <a href=\"a00338.html#ga1e25b72b085087740c92f5c70f3b051f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e25b72b085087740c92f5c70f3b051f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga86bd0656e787bb7f217607572590af27\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga86bd0656e787bb7f217607572590af27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#ga86bd0656e787bb7f217607572590af27\">colMajor3</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:ga86bd0656e787bb7f217607572590af27\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from other matrix.  <a href=\"a00338.html#ga86bd0656e787bb7f217607572590af27\">More...</a><br /></td></tr>\n<tr class=\"separator:ga86bd0656e787bb7f217607572590af27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4aa6c7e17bfce41a6c13bf6469fab05\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf4aa6c7e17bfce41a6c13bf6469fab05\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaf4aa6c7e17bfce41a6c13bf6469fab05\">colMajor4</a> (vec&lt; 4, T, Q &gt; const &amp;v1, vec&lt; 4, T, Q &gt; const &amp;v2, vec&lt; 4, T, Q &gt; const &amp;v3, vec&lt; 4, T, Q &gt; const &amp;v4)</td></tr>\n<tr class=\"memdesc:gaf4aa6c7e17bfce41a6c13bf6469fab05\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from column vectors.  <a href=\"a00338.html#gaf4aa6c7e17bfce41a6c13bf6469fab05\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4aa6c7e17bfce41a6c13bf6469fab05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3\">colMajor4</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from other matrix.  <a href=\"a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\">rowMajor2</a> (vec&lt; 2, T, Q &gt; const &amp;v1, vec&lt; 2, T, Q &gt; const &amp;v2)</td></tr>\n<tr class=\"memdesc:gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from row vectors.  <a href=\"a00338.html#gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf66c75ed69ca9e87462550708c2c6726\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf66c75ed69ca9e87462550708c2c6726\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaf66c75ed69ca9e87462550708c2c6726\">rowMajor2</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gaf66c75ed69ca9e87462550708c2c6726\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from other matrix.  <a href=\"a00338.html#gaf66c75ed69ca9e87462550708c2c6726\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf66c75ed69ca9e87462550708c2c6726\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ae46497493339f745754e40f438442e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2ae46497493339f745754e40f438442e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#ga2ae46497493339f745754e40f438442e\">rowMajor3</a> (vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)</td></tr>\n<tr class=\"memdesc:ga2ae46497493339f745754e40f438442e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from row vectors.  <a href=\"a00338.html#ga2ae46497493339f745754e40f438442e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ae46497493339f745754e40f438442e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77\">rowMajor3</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from other matrix.  <a href=\"a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77\">More...</a><br /></td></tr>\n<tr class=\"separator:gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#ga9636cd6bbe2c32a8d0c03ffb8b1ef284\">rowMajor4</a> (vec&lt; 4, T, Q &gt; const &amp;v1, vec&lt; 4, T, Q &gt; const &amp;v2, vec&lt; 4, T, Q &gt; const &amp;v3, vec&lt; 4, T, Q &gt; const &amp;v4)</td></tr>\n<tr class=\"memdesc:ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from row vectors.  <a href=\"a00338.html#ga9636cd6bbe2c32a8d0c03ffb8b1ef284\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac92ad1c2acdf18d3eb7be45a32f9566b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac92ad1c2acdf18d3eb7be45a32f9566b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b\">rowMajor4</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gac92ad1c2acdf18d3eb7be45a32f9566b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from other matrix.  <a href=\"a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b\">More...</a><br /></td></tr>\n<tr class=\"separator:gac92ad1c2acdf18d3eb7be45a32f9566b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00338.html\">GLM_GTX_matrix_major_storage</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\ngtx_extented_min_max (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00103_source.html\">matrix_major_storage.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00103_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_major_storage.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_major_storage.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00103.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_major_storage is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_major_storage extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; <a class=\"code\" href=\"a00338.html#gaf66c75ed69ca9e87462550708c2c6726\">rowMajor2</a>(</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; <a class=\"code\" href=\"a00338.html#gaf66c75ed69ca9e87462550708c2c6726\">rowMajor2</a>(</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                mat&lt;2, 2, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77\">rowMajor3</a>(</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v3);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77\">rowMajor3</a>(</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b\">rowMajor4</a>(</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v3,</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v4);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b\">rowMajor4</a>(</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; <a class=\"code\" href=\"a00338.html#gafc25fd44196c92b1397b127aec1281ab\">colMajor2</a>(</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; <a class=\"code\" href=\"a00338.html#gafc25fd44196c92b1397b127aec1281ab\">colMajor2</a>(</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                mat&lt;2, 2, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00338.html#ga86bd0656e787bb7f217607572590af27\">colMajor3</a>(</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v3);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00338.html#ga86bd0656e787bb7f217607572590af27\">colMajor3</a>(</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3\">colMajor4</a>(</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v3,</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v4);</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3\">colMajor4</a>(</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_major_storage.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00338_html_gac92ad1c2acdf18d3eb7be45a32f9566b\"><div class=\"ttname\"><a href=\"a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b\">glm::rowMajor4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; rowMajor4(mat&lt; 4, 4, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Build a row major matrix from other matrix. </div></div>\n<div class=\"ttc\" id=\"a00338_html_gaf66c75ed69ca9e87462550708c2c6726\"><div class=\"ttname\"><a href=\"a00338.html#gaf66c75ed69ca9e87462550708c2c6726\">glm::rowMajor2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt; rowMajor2(mat&lt; 2, 2, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Build a row major matrix from other matrix. </div></div>\n<div class=\"ttc\" id=\"a00338_html_gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><div class=\"ttname\"><a href=\"a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3\">glm::colMajor4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; colMajor4(mat&lt; 4, 4, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Build a column major matrix from other matrix. </div></div>\n<div class=\"ttc\" id=\"a00338_html_ga86bd0656e787bb7f217607572590af27\"><div class=\"ttname\"><a href=\"a00338.html#ga86bd0656e787bb7f217607572590af27\">glm::colMajor3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; colMajor3(mat&lt; 3, 3, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Build a column major matrix from other matrix. </div></div>\n<div class=\"ttc\" id=\"a00338_html_gafc25fd44196c92b1397b127aec1281ab\"><div class=\"ttname\"><a href=\"a00338.html#gafc25fd44196c92b1397b127aec1281ab\">glm::colMajor2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt; colMajor2(mat&lt; 2, 2, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Build a column major matrix from other matrix. </div></div>\n<div class=\"ttc\" id=\"a00338_html_gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><div class=\"ttname\"><a href=\"a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77\">glm::rowMajor3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; rowMajor3(mat&lt; 3, 3, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Build a row major matrix from other matrix. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00104.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_operation.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_operation.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00339.html\">GLM_GTX_matrix_operation</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00104_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga40a38402a30860af6e508fe76211e659\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga40a38402a30860af6e508fe76211e659\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga40a38402a30860af6e508fe76211e659\">adjugate</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:ga40a38402a30860af6e508fe76211e659\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build an adjugate matrix.  <a href=\"a00339.html#ga40a38402a30860af6e508fe76211e659\">More...</a><br /></td></tr>\n<tr class=\"separator:ga40a38402a30860af6e508fe76211e659\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaddb09f7abc1a9c56a243d32ff3538be6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaddb09f7abc1a9c56a243d32ff3538be6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gaddb09f7abc1a9c56a243d32ff3538be6\">adjugate</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gaddb09f7abc1a9c56a243d32ff3538be6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build an adjugate matrix.  <a href=\"a00339.html#gaddb09f7abc1a9c56a243d32ff3538be6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaddb09f7abc1a9c56a243d32ff3538be6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9aaa7d1f40391b0b5cacccb60e104ba8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9aaa7d1f40391b0b5cacccb60e104ba8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8\">adjugate</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:ga9aaa7d1f40391b0b5cacccb60e104ba8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build an adjugate matrix.  <a href=\"a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9aaa7d1f40391b0b5cacccb60e104ba8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58a32a2beeb2478dae2a721368cdd4ac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga58a32a2beeb2478dae2a721368cdd4ac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac\">diagonal2x2</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga58a32a2beeb2478dae2a721368cdd4ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58a32a2beeb2478dae2a721368cdd4ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab69f900206a430e2875a5a073851e175\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab69f900206a430e2875a5a073851e175\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gab69f900206a430e2875a5a073851e175\">diagonal2x3</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gab69f900206a430e2875a5a073851e175\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#gab69f900206a430e2875a5a073851e175\">More...</a><br /></td></tr>\n<tr class=\"separator:gab69f900206a430e2875a5a073851e175\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30b4dbfed60a919d66acc8a63bcdc549\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga30b4dbfed60a919d66acc8a63bcdc549\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549\">diagonal2x4</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga30b4dbfed60a919d66acc8a63bcdc549\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549\">More...</a><br /></td></tr>\n<tr class=\"separator:ga30b4dbfed60a919d66acc8a63bcdc549\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga832c805d5130d28ad76236958d15b47d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga832c805d5130d28ad76236958d15b47d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga832c805d5130d28ad76236958d15b47d\">diagonal3x2</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga832c805d5130d28ad76236958d15b47d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga832c805d5130d28ad76236958d15b47d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga832c805d5130d28ad76236958d15b47d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5487ff9cdbc8e04d594adef1bcb16ee0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5487ff9cdbc8e04d594adef1bcb16ee0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0\">diagonal3x3</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga5487ff9cdbc8e04d594adef1bcb16ee0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5487ff9cdbc8e04d594adef1bcb16ee0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7551139cff0c4208d27f0ad3437833e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad7551139cff0c4208d27f0ad3437833e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gad7551139cff0c4208d27f0ad3437833e\">diagonal3x4</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gad7551139cff0c4208d27f0ad3437833e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#gad7551139cff0c4208d27f0ad3437833e\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7551139cff0c4208d27f0ad3437833e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb8969e6543ba775c6638161a37ac330\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacb8969e6543ba775c6638161a37ac330\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gacb8969e6543ba775c6638161a37ac330\">diagonal4x2</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gacb8969e6543ba775c6638161a37ac330\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#gacb8969e6543ba775c6638161a37ac330\">More...</a><br /></td></tr>\n<tr class=\"separator:gacb8969e6543ba775c6638161a37ac330\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae235def5049d6740f0028433f5e13f90\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae235def5049d6740f0028433f5e13f90\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gae235def5049d6740f0028433f5e13f90\">diagonal4x3</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gae235def5049d6740f0028433f5e13f90\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#gae235def5049d6740f0028433f5e13f90\">More...</a><br /></td></tr>\n<tr class=\"separator:gae235def5049d6740f0028433f5e13f90\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b4cd8dea436791b072356231ee8578f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0b4cd8dea436791b072356231ee8578f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga0b4cd8dea436791b072356231ee8578f\">diagonal4x4</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga0b4cd8dea436791b072356231ee8578f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga0b4cd8dea436791b072356231ee8578f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b4cd8dea436791b072356231ee8578f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00339.html\">GLM_GTX_matrix_operation</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00104_source.html\">matrix_operation.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00104_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_operation.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_operation.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00104.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_operation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_operation extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; <a class=\"code\" href=\"a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac\">diagonal2x2</a>(</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; <a class=\"code\" href=\"a00339.html#gab69f900206a430e2875a5a073851e175\">diagonal2x3</a>(</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; <a class=\"code\" href=\"a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549\">diagonal2x4</a>(</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; <a class=\"code\" href=\"a00339.html#ga832c805d5130d28ad76236958d15b47d\">diagonal3x2</a>(</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0\">diagonal3x3</a>(</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; <a class=\"code\" href=\"a00339.html#gad7551139cff0c4208d27f0ad3437833e\">diagonal3x4</a>(</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; <a class=\"code\" href=\"a00339.html#gacb8969e6543ba775c6638161a37ac330\">diagonal4x2</a>(</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; <a class=\"code\" href=\"a00339.html#gae235def5049d6740f0028433f5e13f90\">diagonal4x3</a>(</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00339.html#ga0b4cd8dea436791b072356231ee8578f\">diagonal4x4</a>(</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; <a class=\"code\" href=\"a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8\">adjugate</a>(mat&lt;2, 2, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8\">adjugate</a>(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8\">adjugate</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_operation.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00339_html_gae235def5049d6740f0028433f5e13f90\"><div class=\"ttname\"><a href=\"a00339.html#gae235def5049d6740f0028433f5e13f90\">glm::diagonal4x3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 3, T, Q &gt; diagonal4x3(vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_ga58a32a2beeb2478dae2a721368cdd4ac\"><div class=\"ttname\"><a href=\"a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac\">glm::diagonal2x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt; diagonal2x2(vec&lt; 2, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_gad7551139cff0c4208d27f0ad3437833e\"><div class=\"ttname\"><a href=\"a00339.html#gad7551139cff0c4208d27f0ad3437833e\">glm::diagonal3x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 4, T, Q &gt; diagonal3x4(vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_ga832c805d5130d28ad76236958d15b47d\"><div class=\"ttname\"><a href=\"a00339.html#ga832c805d5130d28ad76236958d15b47d\">glm::diagonal3x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 2, T, Q &gt; diagonal3x2(vec&lt; 2, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_gab69f900206a430e2875a5a073851e175\"><div class=\"ttname\"><a href=\"a00339.html#gab69f900206a430e2875a5a073851e175\">glm::diagonal2x3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 3, T, Q &gt; diagonal2x3(vec&lt; 2, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_ga5487ff9cdbc8e04d594adef1bcb16ee0\"><div class=\"ttname\"><a href=\"a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0\">glm::diagonal3x3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; diagonal3x3(vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_ga9aaa7d1f40391b0b5cacccb60e104ba8\"><div class=\"ttname\"><a href=\"a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8\">glm::adjugate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; adjugate(mat&lt; 4, 4, T, Q &gt; const &amp;m)</div><div class=\"ttdoc\">Build an adjugate matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_ga30b4dbfed60a919d66acc8a63bcdc549\"><div class=\"ttname\"><a href=\"a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549\">glm::diagonal2x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 4, T, Q &gt; diagonal2x4(vec&lt; 2, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_gacb8969e6543ba775c6638161a37ac330\"><div class=\"ttname\"><a href=\"a00339.html#gacb8969e6543ba775c6638161a37ac330\">glm::diagonal4x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 2, T, Q &gt; diagonal4x2(vec&lt; 2, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<div class=\"ttc\" id=\"a00339_html_ga0b4cd8dea436791b072356231ee8578f\"><div class=\"ttname\"><a href=\"a00339.html#ga0b4cd8dea436791b072356231ee8578f\">glm::diagonal4x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; diagonal4x4(vec&lt; 4, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a diagonal matrix. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00105.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_projection.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_projection.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00245.html\">GLM_EXT_matrix_projection</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00105_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q, typename U &gt; </td></tr>\n<tr class=\"memitem:gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82\">pickMatrix</a> (vec&lt; 2, T, Q &gt; const &amp;center, vec&lt; 2, T, Q &gt; const &amp;delta, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Define a picking region.  <a href=\"a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf36e96033f456659e6705472a06b6e11\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf36e96033f456659e6705472a06b6e11\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#gaf36e96033f456659e6705472a06b6e11\">project</a> (vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:gaf36e96033f456659e6705472a06b6e11\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near and far clip planes definition.  <a href=\"a00245.html#gaf36e96033f456659e6705472a06b6e11\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf36e96033f456659e6705472a06b6e11\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05249751f48d14cb282e4979802b8111\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga05249751f48d14cb282e4979802b8111\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#ga05249751f48d14cb282e4979802b8111\">projectNO</a> (vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:ga05249751f48d14cb282e4979802b8111\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.  <a href=\"a00245.html#ga05249751f48d14cb282e4979802b8111\">More...</a><br /></td></tr>\n<tr class=\"separator:ga05249751f48d14cb282e4979802b8111\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga77d157525063dec83a557186873ee080\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga77d157525063dec83a557186873ee080\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#ga77d157525063dec83a557186873ee080\">projectZO</a> (vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:ga77d157525063dec83a557186873ee080\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.  <a href=\"a00245.html#ga77d157525063dec83a557186873ee080\">More...</a><br /></td></tr>\n<tr class=\"separator:ga77d157525063dec83a557186873ee080\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga36641e5d60f994e01c3d8f56b10263d2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga36641e5d60f994e01c3d8f56b10263d2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#ga36641e5d60f994e01c3d8f56b10263d2\">unProject</a> (vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:ga36641e5d60f994e01c3d8f56b10263d2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near and far clip planes definition.  <a href=\"a00245.html#ga36641e5d60f994e01c3d8f56b10263d2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga36641e5d60f994e01c3d8f56b10263d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae089ba9fc150ff69c252a20e508857b5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae089ba9fc150ff69c252a20e508857b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#gae089ba9fc150ff69c252a20e508857b5\">unProjectNO</a> (vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:gae089ba9fc150ff69c252a20e508857b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.  <a href=\"a00245.html#gae089ba9fc150ff69c252a20e508857b5\">More...</a><br /></td></tr>\n<tr class=\"separator:gae089ba9fc150ff69c252a20e508857b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade5136413ce530f8e606124d570fba32\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gade5136413ce530f8e606124d570fba32\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#gade5136413ce530f8e606124d570fba32\">unProjectZO</a> (vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:gade5136413ce530f8e606124d570fba32\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.  <a href=\"a00245.html#gade5136413ce530f8e606124d570fba32\">More...</a><br /></td></tr>\n<tr class=\"separator:gade5136413ce530f8e606124d570fba32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00245.html\">GLM_EXT_matrix_projection</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00105_source.html\">matrix_projection.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00105_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_projection.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_projection.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00105.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../trigonometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../matrix.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_matrix_projection extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00245.html#ga77d157525063dec83a557186873ee080\">projectZO</a>(</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; obj, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; model, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a>, vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; viewport);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00245.html#ga05249751f48d14cb282e4979802b8111\">projectNO</a>(</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; obj, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; model, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a>, vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; viewport);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00245.html#gaf36e96033f456659e6705472a06b6e11\">project</a>(</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; obj, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; model, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a>, vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; viewport);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00245.html#gade5136413ce530f8e606124d570fba32\">unProjectZO</a>(</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; win, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; model, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a>, vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; viewport);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00245.html#gae089ba9fc150ff69c252a20e508857b5\">unProjectNO</a>(</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; win, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; model, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a>, vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; viewport);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> U, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00245.html#ga36641e5d60f994e01c3d8f56b10263d2\">unProject</a>(</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; win, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; model, mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a>, vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; viewport);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82\">pickMatrix</a>(</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; center, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; delta, vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; viewport);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_projection.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00245_html_gade5136413ce530f8e606124d570fba32\"><div class=\"ttname\"><a href=\"a00245.html#gade5136413ce530f8e606124d570fba32\">glm::unProjectZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; unProjectZO(vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</div><div class=\"ttdoc\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. </div></div>\n<div class=\"ttc\" id=\"a00351_html_ga58384b7170801dd513de46f87c7fb00e\"><div class=\"ttname\"><a href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">glm::proj</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType proj(genType const &amp;x, genType const &amp;Normal)</div><div class=\"ttdoc\">Projects x on Normal. </div></div>\n<div class=\"ttc\" id=\"a00245_html_ga77d157525063dec83a557186873ee080\"><div class=\"ttname\"><a href=\"a00245.html#ga77d157525063dec83a557186873ee080\">glm::projectZO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; projectZO(vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</div><div class=\"ttdoc\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. </div></div>\n<div class=\"ttc\" id=\"a00245_html_ga05249751f48d14cb282e4979802b8111\"><div class=\"ttname\"><a href=\"a00245.html#ga05249751f48d14cb282e4979802b8111\">glm::projectNO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; projectNO(vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</div><div class=\"ttdoc\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. </div></div>\n<div class=\"ttc\" id=\"a00245_html_gaf36e96033f456659e6705472a06b6e11\"><div class=\"ttname\"><a href=\"a00245.html#gaf36e96033f456659e6705472a06b6e11\">glm::project</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; project(vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</div><div class=\"ttdoc\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near...</div></div>\n<div class=\"ttc\" id=\"a00245_html_gae089ba9fc150ff69c252a20e508857b5\"><div class=\"ttname\"><a href=\"a00245.html#gae089ba9fc150ff69c252a20e508857b5\">glm::unProjectNO</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; unProjectNO(vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</div><div class=\"ttdoc\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. </div></div>\n<div class=\"ttc\" id=\"a00245_html_ga36641e5d60f994e01c3d8f56b10263d2\"><div class=\"ttname\"><a href=\"a00245.html#ga36641e5d60f994e01c3d8f56b10263d2\">glm::unProject</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; unProject(vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</div><div class=\"ttdoc\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near...</div></div>\n<div class=\"ttc\" id=\"a00245_html_gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><div class=\"ttname\"><a href=\"a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82\">glm::pickMatrix</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; pickMatrix(vec&lt; 2, T, Q &gt; const &amp;center, vec&lt; 2, T, Q &gt; const &amp;delta, vec&lt; 4, U, Q &gt; const &amp;viewport)</div><div class=\"ttdoc\">Define a picking region. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00106.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_query.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_query.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00340.html\">GLM_GTX_matrix_query</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00106_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaee935d145581c82e82b154ccfd78ad91\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q, template&lt; length_t, length_t, typename, qualifier &gt; class matType&gt; </td></tr>\n<tr class=\"memitem:gaee935d145581c82e82b154ccfd78ad91\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#gaee935d145581c82e82b154ccfd78ad91\">isIdentity</a> (matType&lt; C, R, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaee935d145581c82e82b154ccfd78ad91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is an identity matrix.  <a href=\"a00340.html#gaee935d145581c82e82b154ccfd78ad91\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee935d145581c82e82b154ccfd78ad91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae785af56f47ce220a1609f7f84aa077a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae785af56f47ce220a1609f7f84aa077a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#gae785af56f47ce220a1609f7f84aa077a\">isNormalized</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gae785af56f47ce220a1609f7f84aa077a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is a normalized matrix.  <a href=\"a00340.html#gae785af56f47ce220a1609f7f84aa077a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae785af56f47ce220a1609f7f84aa077a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa068311695f28f5f555f5f746a6a66fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa068311695f28f5f555f5f746a6a66fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#gaa068311695f28f5f555f5f746a6a66fb\">isNormalized</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaa068311695f28f5f555f5f746a6a66fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is a normalized matrix.  <a href=\"a00340.html#gaa068311695f28f5f555f5f746a6a66fb\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa068311695f28f5f555f5f746a6a66fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d9bb4d0465df49fedfad79adc6ce4ad\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4d9bb4d0465df49fedfad79adc6ce4ad\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad\">isNormalized</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga4d9bb4d0465df49fedfad79adc6ce4ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is a normalized matrix.  <a href=\"a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4d9bb4d0465df49fedfad79adc6ce4ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9790ec222ce948c0ff0d8ce927340dba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9790ec222ce948c0ff0d8ce927340dba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#ga9790ec222ce948c0ff0d8ce927340dba\">isNull</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga9790ec222ce948c0ff0d8ce927340dba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix a null matrix.  <a href=\"a00340.html#ga9790ec222ce948c0ff0d8ce927340dba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9790ec222ce948c0ff0d8ce927340dba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae14501c6b14ccda6014cc5350080103d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae14501c6b14ccda6014cc5350080103d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#gae14501c6b14ccda6014cc5350080103d\">isNull</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gae14501c6b14ccda6014cc5350080103d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix a null matrix.  <a href=\"a00340.html#gae14501c6b14ccda6014cc5350080103d\">More...</a><br /></td></tr>\n<tr class=\"separator:gae14501c6b14ccda6014cc5350080103d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b98bb30a9fefa7cdea5f1dcddba677b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2b98bb30a9fefa7cdea5f1dcddba677b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b\">isNull</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga2b98bb30a9fefa7cdea5f1dcddba677b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is a null matrix.  <a href=\"a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b98bb30a9fefa7cdea5f1dcddba677b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58f3289f74dcab653387dd78ad93ca40\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q, template&lt; length_t, length_t, typename, qualifier &gt; class matType&gt; </td></tr>\n<tr class=\"memitem:ga58f3289f74dcab653387dd78ad93ca40\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#ga58f3289f74dcab653387dd78ad93ca40\">isOrthogonal</a> (matType&lt; C, R, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga58f3289f74dcab653387dd78ad93ca40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is an orthonormalized matrix.  <a href=\"a00340.html#ga58f3289f74dcab653387dd78ad93ca40\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58f3289f74dcab653387dd78ad93ca40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00340.html\">GLM_GTX_matrix_query</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00368.html\" title=\"Include <glm/gtx/vector_query.hpp> to use the features of this extension. \">GLM_GTX_vector_query</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00106_source.html\">matrix_query.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00106_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_query.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_query.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00106.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/vector_query.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_query extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b\">isNull</a>(mat&lt;2, 2, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b\">isNull</a>(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b\">isNull</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keyword\">template</span>&lt;length_t, length_t, <span class=\"keyword\">typename</span>, qualifier&gt; <span class=\"keyword\">class </span>matType&gt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00340.html#gaee935d145581c82e82b154ccfd78ad91\">isIdentity</a>(matType&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad\">isNormalized</a>(mat&lt;2, 2, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad\">isNormalized</a>(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad\">isNormalized</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q, <span class=\"keyword\">template</span>&lt;length_t, length_t, <span class=\"keyword\">typename</span>, qualifier&gt; <span class=\"keyword\">class </span>matType&gt;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00340.html#ga58f3289f74dcab653387dd78ad93ca40\">isOrthogonal</a>(matType&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_query.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00340_html_ga4d9bb4d0465df49fedfad79adc6ce4ad\"><div class=\"ttname\"><a href=\"a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad\">glm::isNormalized</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool isNormalized(mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)</div><div class=\"ttdoc\">Return whether a matrix is a normalized matrix. </div></div>\n<div class=\"ttc\" id=\"a00340_html_gaee935d145581c82e82b154ccfd78ad91\"><div class=\"ttname\"><a href=\"a00340.html#gaee935d145581c82e82b154ccfd78ad91\">glm::isIdentity</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool isIdentity(matType&lt; C, R, T, Q &gt; const &amp;m, T const &amp;epsilon)</div><div class=\"ttdoc\">Return whether a matrix is an identity matrix. </div></div>\n<div class=\"ttc\" id=\"a00340_html_ga2b98bb30a9fefa7cdea5f1dcddba677b\"><div class=\"ttname\"><a href=\"a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b\">glm::isNull</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool isNull(mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)</div><div class=\"ttdoc\">Return whether a matrix is a null matrix. </div></div>\n<div class=\"ttc\" id=\"a00259_html_ga2a1e57fc5592b69cfae84174cbfc9429\"><div class=\"ttname\"><a href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">glm::epsilon</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class=\"ttdoc\">Return the epsilon constant for floating point types. </div></div>\n<div class=\"ttc\" id=\"a00340_html_ga58f3289f74dcab653387dd78ad93ca40\"><div class=\"ttname\"><a href=\"a00340.html#ga58f3289f74dcab653387dd78ad93ca40\">glm::isOrthogonal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool isOrthogonal(matType&lt; C, R, T, Q &gt; const &amp;m, T const &amp;epsilon)</div><div class=\"ttdoc\">Return whether a matrix is an orthonormalized matrix. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00107.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_relational.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_relational.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00246.html\">GLM_EXT_matrix_relational</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00107_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga27e90dcb7941c9b70e295dc3f6f6369f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga27e90dcb7941c9b70e295dc3f6f6369f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga27e90dcb7941c9b70e295dc3f6f6369f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Perform a component-wise equal-to comparison of two matrices.  <a href=\"a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27e90dcb7941c9b70e295dc3f6f6369f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5d687d70d11708b68c36c6db5777040\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf5d687d70d11708b68c36c6db5777040\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gaf5d687d70d11708b68c36c6db5777040\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:gaf5d687d70d11708b68c36c6db5777040\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00246.html#gaf5d687d70d11708b68c36c6db5777040\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5d687d70d11708b68c36c6db5777040\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafa6a053e81179fa4292b35651c83c3fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafa6a053e81179fa4292b35651c83c3fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gafa6a053e81179fa4292b35651c83c3fb\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, T, Q &gt; const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gafa6a053e81179fa4292b35651c83c3fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00246.html#gafa6a053e81179fa4292b35651c83c3fb\">More...</a><br /></td></tr>\n<tr class=\"separator:gafa6a053e81179fa4292b35651c83c3fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3a93f19e72e9141f50527c9de21d0c0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab3a93f19e72e9141f50527c9de21d0c0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gab3a93f19e72e9141f50527c9de21d0c0\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:gab3a93f19e72e9141f50527c9de21d0c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00246.html#gab3a93f19e72e9141f50527c9de21d0c0\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3a93f19e72e9141f50527c9de21d0c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5305af376173f1902719fa309bbae671\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5305af376173f1902719fa309bbae671\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:ga5305af376173f1902719fa309bbae671\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5305af376173f1902719fa309bbae671\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8504f18a7e2bf315393032c2137dad83\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8504f18a7e2bf315393032c2137dad83\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#ga8504f18a7e2bf315393032c2137dad83\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga8504f18a7e2bf315393032c2137dad83\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Perform a component-wise not-equal-to comparison of two matrices.  <a href=\"a00246.html#ga8504f18a7e2bf315393032c2137dad83\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8504f18a7e2bf315393032c2137dad83\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29071147d118569344d10944b7d5c378\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga29071147d118569344d10944b7d5c378\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#ga29071147d118569344d10944b7d5c378\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:ga29071147d118569344d10944b7d5c378\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00246.html#ga29071147d118569344d10944b7d5c378\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29071147d118569344d10944b7d5c378\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7959e14fbc35b4ed2617daf4d67f6cd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad7959e14fbc35b4ed2617daf4d67f6cd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gad7959e14fbc35b4ed2617daf4d67f6cd\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, T, Q &gt; const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gad7959e14fbc35b4ed2617daf4d67f6cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00246.html#gad7959e14fbc35b4ed2617daf4d67f6cd\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7959e14fbc35b4ed2617daf4d67f6cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1cd7fc228ef6e26c73583fd0d9c6552\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa1cd7fc228ef6e26c73583fd0d9c6552\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gaa1cd7fc228ef6e26c73583fd0d9c6552\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:gaa1cd7fc228ef6e26c73583fd0d9c6552\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00246.html#gaa1cd7fc228ef6e26c73583fd0d9c6552\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa1cd7fc228ef6e26c73583fd0d9c6552\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa5517341754149ffba742d230afd1f32\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa5517341754149ffba742d230afd1f32\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:gaa5517341754149ffba742d230afd1f32\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa5517341754149ffba742d230afd1f32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00246.html\">GLM_EXT_matrix_relational</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00107_source.html\">matrix_relational.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00107_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_relational.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_relational.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00107.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_matrix_relational extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">equal</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">notEqual</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">equal</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">equal</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;C, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">notEqual</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">notEqual</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;C, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">equal</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">equal</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;C, int, Q&gt; <span class=\"keyword\">const</span>&amp; ULPs);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">notEqual</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; <a class=\"code\" href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">notEqual</a>(mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, mat&lt;C, R, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;C, int, Q&gt; <span class=\"keyword\">const</span>&amp; ULPs);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_relational.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00246_html_ga5305af376173f1902719fa309bbae671\"><div class=\"ttname\"><a href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">glm::equal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt; equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)</div><div class=\"ttdoc\">Returns the component-wise comparison between two vectors in term of ULPs. </div></div>\n<div class=\"ttc\" id=\"a00259_html_ga2a1e57fc5592b69cfae84174cbfc9429\"><div class=\"ttname\"><a href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">glm::epsilon</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class=\"ttdoc\">Return the epsilon constant for floating point types. </div></div>\n<div class=\"ttc\" id=\"a00246_html_gaa5517341754149ffba742d230afd1f32\"><div class=\"ttname\"><a href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">glm::notEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt; notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)</div><div class=\"ttdoc\">Returns the component-wise comparison between two vectors in term of ULPs. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00108.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_transform.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">ext/matrix_transform.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00247.html\">GLM_EXT_matrix_transform</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00108_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga81696f2b8d1db02ea1aff8da8f269314\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga81696f2b8d1db02ea1aff8da8f269314\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga81696f2b8d1db02ea1aff8da8f269314\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#ga81696f2b8d1db02ea1aff8da8f269314\">identity</a> ()</td></tr>\n<tr class=\"memdesc:ga81696f2b8d1db02ea1aff8da8f269314\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds an identity matrix. <br /></td></tr>\n<tr class=\"separator:ga81696f2b8d1db02ea1aff8da8f269314\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa64aa951a0e99136bba9008d2b59c78e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa64aa951a0e99136bba9008d2b59c78e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#gaa64aa951a0e99136bba9008d2b59c78e\">lookAt</a> (vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gaa64aa951a0e99136bba9008d2b59c78e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a look at view matrix based on the default handedness.  <a href=\"a00247.html#gaa64aa951a0e99136bba9008d2b59c78e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa64aa951a0e99136bba9008d2b59c78e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab2c09e25b0a16d3a9d89cc85bbae41b0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab2c09e25b0a16d3a9d89cc85bbae41b0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0\">lookAtLH</a> (vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gab2c09e25b0a16d3a9d89cc85bbae41b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a left handed look at view matrix.  <a href=\"a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0\">More...</a><br /></td></tr>\n<tr class=\"separator:gab2c09e25b0a16d3a9d89cc85bbae41b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacfa12c8889c754846bc20c65d9b5c701\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacfa12c8889c754846bc20c65d9b5c701\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#gacfa12c8889c754846bc20c65d9b5c701\">lookAtRH</a> (vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gacfa12c8889c754846bc20c65d9b5c701\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a right handed look at view matrix.  <a href=\"a00247.html#gacfa12c8889c754846bc20c65d9b5c701\">More...</a><br /></td></tr>\n<tr class=\"separator:gacfa12c8889c754846bc20c65d9b5c701\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee9e865eaa9776370996da2940873fd4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaee9e865eaa9776370996da2940873fd4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#gaee9e865eaa9776370996da2940873fd4\">rotate</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:gaee9e865eaa9776370996da2940873fd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a rotation 4 * 4 matrix created from an axis vector and an angle.  <a href=\"a00247.html#gaee9e865eaa9776370996da2940873fd4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee9e865eaa9776370996da2940873fd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05051adbee603fb3c5095d8cf5cc229b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga05051adbee603fb3c5095d8cf5cc229b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">scale</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga05051adbee603fb3c5095d8cf5cc229b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a scale 4 * 4 matrix created from 3 scalars.  <a href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga05051adbee603fb3c5095d8cf5cc229b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a4ecc4ad82652b8fb14dcb087879284\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1a4ecc4ad82652b8fb14dcb087879284\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284\">translate</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1a4ecc4ad82652b8fb14dcb087879284\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a translation 4 * 4 matrix created from a vector of 3 components.  <a href=\"a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a4ecc4ad82652b8fb14dcb087879284\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00247.html\">GLM_EXT_matrix_transform</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00108_source.html\">ext/matrix_transform.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00108_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_transform.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ext/matrix_transform.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00108.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../trigonometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../matrix.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_matrix_transform extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00247.html#ga81696f2b8d1db02ea1aff8da8f269314\">identity</a>();</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284\">translate</a>(</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00247.html#gaee9e865eaa9776370996da2940873fd4\">rotate</a>(</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">axis</a>);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">scale</a>(</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00247.html#gacfa12c8889c754846bc20c65d9b5c701\">lookAtRH</a>(</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; eye, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; center, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; up);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0\">lookAtLH</a>(</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; eye, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; center, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; up);</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00247.html#gaa64aa951a0e99136bba9008d2b59c78e\">lookAt</a>(</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; eye, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; center, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; up);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_transform.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00247_html_gab2c09e25b0a16d3a9d89cc85bbae41b0\"><div class=\"ttname\"><a href=\"a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0\">glm::lookAtLH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; lookAtLH(vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</div><div class=\"ttdoc\">Build a left handed look at view matrix. </div></div>\n<div class=\"ttc\" id=\"a00247_html_gacfa12c8889c754846bc20c65d9b5c701\"><div class=\"ttname\"><a href=\"a00247.html#gacfa12c8889c754846bc20c65d9b5c701\">glm::lookAtRH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; lookAtRH(vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</div><div class=\"ttdoc\">Build a right handed look at view matrix. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00247_html_ga1a4ecc4ad82652b8fb14dcb087879284\"><div class=\"ttname\"><a href=\"a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284\">glm::translate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; translate(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Builds a translation 4 * 4 matrix created from a vector of 3 components. </div></div>\n<div class=\"ttc\" id=\"a00247_html_gaee9e865eaa9776370996da2940873fd4\"><div class=\"ttname\"><a href=\"a00247.html#gaee9e865eaa9776370996da2940873fd4\">glm::rotate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; rotate(mat&lt; 4, 4, T, Q &gt; const &amp;m, T angle, vec&lt; 3, T, Q &gt; const &amp;axis)</div><div class=\"ttdoc\">Builds a rotation 4 * 4 matrix created from an axis vector and an angle. </div></div>\n<div class=\"ttc\" id=\"a00247_html_ga81696f2b8d1db02ea1aff8da8f269314\"><div class=\"ttname\"><a href=\"a00247.html#ga81696f2b8d1db02ea1aff8da8f269314\">glm::identity</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType identity()</div><div class=\"ttdoc\">Builds an identity matrix. </div></div>\n<div class=\"ttc\" id=\"a00247_html_ga05051adbee603fb3c5095d8cf5cc229b\"><div class=\"ttname\"><a href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">glm::scale</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; scale(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Builds a scale 4 * 4 matrix created from 3 scalars. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga764254f10248b505e936e5309a88c23d\"><div class=\"ttname\"><a href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">glm::axis</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; axis(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the q rotation axis. </div></div>\n<div class=\"ttc\" id=\"a00247_html_gaa64aa951a0e99136bba9008d2b59c78e\"><div class=\"ttname\"><a href=\"a00247.html#gaa64aa951a0e99136bba9008d2b59c78e\">glm::lookAt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; lookAt(vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</div><div class=\"ttdoc\">Build a look at view matrix based on the default handedness. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00109.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_transform.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/matrix_transform.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00296.html\">GLM_GTC_matrix_transform</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00109_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00296.html\">GLM_GTC_matrix_transform</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00362.html\" title=\"Include <glm/gtx/transform.hpp> to use the features of this extension. \">GLM_GTX_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00363.html\" title=\"Include <glm/gtx/transform2.hpp> to use the features of this extension. \">GLM_GTX_transform2</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00109_source.html\">gtc/matrix_transform.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00109_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_transform.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/matrix_transform.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00109.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/matrix_projection.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/matrix_clip_space.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/matrix_transform.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_matrix_transform extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_transform.inl&quot;</span></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00110.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_transform_2d.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_transform_2d.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00341.html\">GLM_GTX_matrix_transform_2d</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00110_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad5c84a4932a758f385a87098ce1b1660\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad5c84a4932a758f385a87098ce1b1660\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#gad5c84a4932a758f385a87098ce1b1660\">rotate</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T angle)</td></tr>\n<tr class=\"memdesc:gad5c84a4932a758f385a87098ce1b1660\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a rotation 3 * 3 matrix created from an angle.  <a href=\"a00341.html#gad5c84a4932a758f385a87098ce1b1660\">More...</a><br /></td></tr>\n<tr class=\"separator:gad5c84a4932a758f385a87098ce1b1660\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadb47d2ad2bd984b213e8ff7d9cd8154e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadb47d2ad2bd984b213e8ff7d9cd8154e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e\">scale</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gadb47d2ad2bd984b213e8ff7d9cd8154e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a scale 3 * 3 matrix created from a vector of 2 components.  <a href=\"a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e\">More...</a><br /></td></tr>\n<tr class=\"separator:gadb47d2ad2bd984b213e8ff7d9cd8154e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a118ece5db1e2022112b954846012af\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2a118ece5db1e2022112b954846012af\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#ga2a118ece5db1e2022112b954846012af\">shearX</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T y)</td></tr>\n<tr class=\"memdesc:ga2a118ece5db1e2022112b954846012af\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix.  <a href=\"a00341.html#ga2a118ece5db1e2022112b954846012af\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2a118ece5db1e2022112b954846012af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga717f1833369c1ac4a40e4ac015af885e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga717f1833369c1ac4a40e4ac015af885e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#ga717f1833369c1ac4a40e4ac015af885e\">shearY</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T x)</td></tr>\n<tr class=\"memdesc:ga717f1833369c1ac4a40e4ac015af885e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a vertical (parallel to the y axis) shear 3 * 3 matrix.  <a href=\"a00341.html#ga717f1833369c1ac4a40e4ac015af885e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga717f1833369c1ac4a40e4ac015af885e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4573ae47c80938aa9053ef6a33755ab\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf4573ae47c80938aa9053ef6a33755ab\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#gaf4573ae47c80938aa9053ef6a33755ab\">translate</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf4573ae47c80938aa9053ef6a33755ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a translation 3 * 3 matrix created from a vector of 2 components.  <a href=\"a00341.html#gaf4573ae47c80938aa9053ef6a33755ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4573ae47c80938aa9053ef6a33755ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00341.html\">GLM_GTX_matrix_transform_2d</a> </p>\n<dl class=\"section author\"><dt>Author</dt><dd>Miguel Ángel Pérez Martínez</dd></dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00110_source.html\">matrix_transform_2d.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00110_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: matrix_transform_2d.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">matrix_transform_2d.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00110.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_transform_2d is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_matrix_transform_2d extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00341.html#gaf4573ae47c80938aa9053ef6a33755ab\">translate</a>(</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00341.html#gad5c84a4932a758f385a87098ce1b1660\">rotate</a>(</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e\">scale</a>(</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00341.html#ga2a118ece5db1e2022112b954846012af\">shearX</a>(</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                T y);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00341.html#ga717f1833369c1ac4a40e4ac015af885e\">shearY</a>(</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                T x);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">#include &quot;matrix_transform_2d.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00341_html_gaf4573ae47c80938aa9053ef6a33755ab\"><div class=\"ttname\"><a href=\"a00341.html#gaf4573ae47c80938aa9053ef6a33755ab\">glm::translate</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt; translate(mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Builds a translation 3 * 3 matrix created from a vector of 2 components. </div></div>\n<div class=\"ttc\" id=\"a00341_html_gad5c84a4932a758f385a87098ce1b1660\"><div class=\"ttname\"><a href=\"a00341.html#gad5c84a4932a758f385a87098ce1b1660\">glm::rotate</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt; rotate(mat&lt; 3, 3, T, Q &gt; const &amp;m, T angle)</div><div class=\"ttdoc\">Builds a rotation 3 * 3 matrix created from an angle. </div></div>\n<div class=\"ttc\" id=\"a00341_html_ga717f1833369c1ac4a40e4ac015af885e\"><div class=\"ttname\"><a href=\"a00341.html#ga717f1833369c1ac4a40e4ac015af885e\">glm::shearY</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt; shearY(mat&lt; 3, 3, T, Q &gt; const &amp;m, T x)</div><div class=\"ttdoc\">Builds a vertical (parallel to the y axis) shear 3 * 3 matrix. </div></div>\n<div class=\"ttc\" id=\"a00341_html_gadb47d2ad2bd984b213e8ff7d9cd8154e\"><div class=\"ttname\"><a href=\"a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e\">glm::scale</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt; scale(mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Builds a scale 3 * 3 matrix created from a vector of 2 components. </div></div>\n<div class=\"ttc\" id=\"a00341_html_ga2a118ece5db1e2022112b954846012af\"><div class=\"ttname\"><a href=\"a00341.html#ga2a118ece5db1e2022112b954846012af\">glm::shearX</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt; shearX(mat&lt; 3, 3, T, Q &gt; const &amp;m, T y)</div><div class=\"ttdoc\">Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00111.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mixed_product.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">mixed_product.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00342.html\">GLM_GTX_mixed_producte</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00111_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gab3c6048fbb67f7243b088a4fee48d020\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gab3c6048fbb67f7243b088a4fee48d020\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab3c6048fbb67f7243b088a4fee48d020\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00342.html#gab3c6048fbb67f7243b088a4fee48d020\">mixedProduct</a> (vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)</td></tr>\n<tr class=\"memdesc:gab3c6048fbb67f7243b088a4fee48d020\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Mixed product of 3 vectors (from GLM_GTX_mixed_product extension) <br /></td></tr>\n<tr class=\"separator:gab3c6048fbb67f7243b088a4fee48d020\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00342.html\">GLM_GTX_mixed_producte</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00111_source.html\">mixed_product.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00111_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: mixed_product.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">mixed_product.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00111.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_mixed_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_mixed_product extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00342.html#gab3c6048fbb67f7243b088a4fee48d020\">mixedProduct</a>(</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v3);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#include &quot;mixed_product.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00342_html_gab3c6048fbb67f7243b088a4fee48d020\"><div class=\"ttname\"><a href=\"a00342.html#gab3c6048fbb67f7243b088a4fee48d020\">glm::mixedProduct</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T mixedProduct(vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)</div><div class=\"ttdoc\">Mixed product of 3 vectors (from GLM_GTX_mixed_product extension) </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00112.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: noise.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">noise.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00297.html\">GLM_GTC_noise</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00112_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1e043ce3b51510e9bc4469227cefc38a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1e043ce3b51510e9bc4469227cefc38a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00297.html#ga1e043ce3b51510e9bc4469227cefc38a\">perlin</a> (vec&lt; L, T, Q &gt; const &amp;p)</td></tr>\n<tr class=\"memdesc:ga1e043ce3b51510e9bc4469227cefc38a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Classic perlin noise.  <a href=\"a00297.html#ga1e043ce3b51510e9bc4469227cefc38a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e043ce3b51510e9bc4469227cefc38a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac270edc54c5fc52f5985a45f940bb103\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac270edc54c5fc52f5985a45f940bb103\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00297.html#gac270edc54c5fc52f5985a45f940bb103\">perlin</a> (vec&lt; L, T, Q &gt; const &amp;p, vec&lt; L, T, Q &gt; const &amp;rep)</td></tr>\n<tr class=\"memdesc:gac270edc54c5fc52f5985a45f940bb103\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Periodic perlin noise.  <a href=\"a00297.html#gac270edc54c5fc52f5985a45f940bb103\">More...</a><br /></td></tr>\n<tr class=\"separator:gac270edc54c5fc52f5985a45f940bb103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8122468c69015ff397349a7dcc638b27\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8122468c69015ff397349a7dcc638b27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00297.html#ga8122468c69015ff397349a7dcc638b27\">simplex</a> (vec&lt; L, T, Q &gt; const &amp;p)</td></tr>\n<tr class=\"memdesc:ga8122468c69015ff397349a7dcc638b27\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simplex noise.  <a href=\"a00297.html#ga8122468c69015ff397349a7dcc638b27\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8122468c69015ff397349a7dcc638b27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00297.html\">GLM_GTC_noise</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00112_source.html\">noise.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00112_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: noise.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">noise.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00112.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/_noise.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_noise extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00297.html#gac270edc54c5fc52f5985a45f940bb103\">perlin</a>(</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; p);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00297.html#gac270edc54c5fc52f5985a45f940bb103\">perlin</a>(</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; p,</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; rep);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00297.html#ga8122468c69015ff397349a7dcc638b27\">simplex</a>(</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; p);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"preprocessor\">#include &quot;noise.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00297_html_ga8122468c69015ff397349a7dcc638b27\"><div class=\"ttname\"><a href=\"a00297.html#ga8122468c69015ff397349a7dcc638b27\">glm::simplex</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T simplex(vec&lt; L, T, Q &gt; const &amp;p)</div><div class=\"ttdoc\">Simplex noise. </div></div>\n<div class=\"ttc\" id=\"a00297_html_gac270edc54c5fc52f5985a45f940bb103\"><div class=\"ttname\"><a href=\"a00297.html#gac270edc54c5fc52f5985a45f940bb103\">glm::perlin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T perlin(vec&lt; L, T, Q &gt; const &amp;p, vec&lt; L, T, Q &gt; const &amp;rep)</div><div class=\"ttdoc\">Periodic perlin noise. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00113.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: norm.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">norm.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00343.html\">GLM_GTX_norm</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00113_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga85660f1b79f66c09c7b5a6f80e68c89f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga85660f1b79f66c09c7b5a6f80e68c89f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f\">distance2</a> (vec&lt; L, T, Q &gt; const &amp;p0, vec&lt; L, T, Q &gt; const &amp;p1)</td></tr>\n<tr class=\"memdesc:ga85660f1b79f66c09c7b5a6f80e68c89f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the squared distance between p0 and p1, i.e., length2(p0 - p1).  <a href=\"a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85660f1b79f66c09c7b5a6f80e68c89f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae2fc0b2aa967bebfd6a244700bff6997\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae2fc0b2aa967bebfd6a244700bff6997\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gae2fc0b2aa967bebfd6a244700bff6997\">l1Norm</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gae2fc0b2aa967bebfd6a244700bff6997\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L1 norm between x and y.  <a href=\"a00343.html#gae2fc0b2aa967bebfd6a244700bff6997\">More...</a><br /></td></tr>\n<tr class=\"separator:gae2fc0b2aa967bebfd6a244700bff6997\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a7491e2037ceeb37f83ce41addfc0be\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1a7491e2037ceeb37f83ce41addfc0be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be\">l1Norm</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1a7491e2037ceeb37f83ce41addfc0be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L1 norm of v.  <a href=\"a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a7491e2037ceeb37f83ce41addfc0be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41340b2ef40a9307ab0f137181565168\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga41340b2ef40a9307ab0f137181565168\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga41340b2ef40a9307ab0f137181565168\">l2Norm</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga41340b2ef40a9307ab0f137181565168\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L2 norm between x and y.  <a href=\"a00343.html#ga41340b2ef40a9307ab0f137181565168\">More...</a><br /></td></tr>\n<tr class=\"separator:ga41340b2ef40a9307ab0f137181565168\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae288bde8f0e41fb4ed62e65137b18cba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae288bde8f0e41fb4ed62e65137b18cba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gae288bde8f0e41fb4ed62e65137b18cba\">l2Norm</a> (vec&lt; 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gae288bde8f0e41fb4ed62e65137b18cba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L2 norm of v.  <a href=\"a00343.html#gae288bde8f0e41fb4ed62e65137b18cba\">More...</a><br /></td></tr>\n<tr class=\"separator:gae288bde8f0e41fb4ed62e65137b18cba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8d1789651050adb7024917984b41c3de\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8d1789651050adb7024917984b41c3de\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga8d1789651050adb7024917984b41c3de\">length2</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8d1789651050adb7024917984b41c3de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the squared length of x.  <a href=\"a00343.html#ga8d1789651050adb7024917984b41c3de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8d1789651050adb7024917984b41c3de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad58a8231fc32e38104a9e1c4d3c0cb64\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad58a8231fc32e38104a9e1c4d3c0cb64\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gad58a8231fc32e38104a9e1c4d3c0cb64\">lMaxNorm</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gad58a8231fc32e38104a9e1c4d3c0cb64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the LMax norm between x and y.  <a href=\"a00343.html#gad58a8231fc32e38104a9e1c4d3c0cb64\">More...</a><br /></td></tr>\n<tr class=\"separator:gad58a8231fc32e38104a9e1c4d3c0cb64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6968a324837a8e899396d44de23d5aae\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6968a324837a8e899396d44de23d5aae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga6968a324837a8e899396d44de23d5aae\">lMaxNorm</a> (vec&lt; 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga6968a324837a8e899396d44de23d5aae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the LMax norm of v.  <a href=\"a00343.html#ga6968a324837a8e899396d44de23d5aae\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6968a324837a8e899396d44de23d5aae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacad23d30497eb16f67709f2375d1f66a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacad23d30497eb16f67709f2375d1f66a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gacad23d30497eb16f67709f2375d1f66a\">lxNorm</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, unsigned int Depth)</td></tr>\n<tr class=\"memdesc:gacad23d30497eb16f67709f2375d1f66a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L norm between x and y.  <a href=\"a00343.html#gacad23d30497eb16f67709f2375d1f66a\">More...</a><br /></td></tr>\n<tr class=\"separator:gacad23d30497eb16f67709f2375d1f66a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac61b6d81d796d6eb4d4183396a19ab91\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac61b6d81d796d6eb4d4183396a19ab91\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gac61b6d81d796d6eb4d4183396a19ab91\">lxNorm</a> (vec&lt; 3, T, Q &gt; const &amp;x, unsigned int Depth)</td></tr>\n<tr class=\"memdesc:gac61b6d81d796d6eb4d4183396a19ab91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L norm of v.  <a href=\"a00343.html#gac61b6d81d796d6eb4d4183396a19ab91\">More...</a><br /></td></tr>\n<tr class=\"separator:gac61b6d81d796d6eb4d4183396a19ab91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00343.html\">GLM_GTX_norm</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00316.html\" title=\"Include <glm/gtx/component_wise.hpp> to use the features of this extension. \">GLM_GTX_component_wise</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00113_source.html\">norm.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00113_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: norm.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">norm.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00113.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/component_wise.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_norm is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_norm extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#ga8d1789651050adb7024917984b41c3de\">length2</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f\">distance2</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; p0, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; p1);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be\">l1Norm</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be\">l1Norm</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#gae288bde8f0e41fb4ed62e65137b18cba\">l2Norm</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#gae288bde8f0e41fb4ed62e65137b18cba\">l2Norm</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#gac61b6d81d796d6eb4d4183396a19ab91\">lxNorm</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> Depth);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#gac61b6d81d796d6eb4d4183396a19ab91\">lxNorm</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> Depth);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#ga6968a324837a8e899396d44de23d5aae\">lMaxNorm</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00343.html#ga6968a324837a8e899396d44de23d5aae\">lMaxNorm</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;<span class=\"preprocessor\">#include &quot;norm.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00343_html_ga8d1789651050adb7024917984b41c3de\"><div class=\"ttname\"><a href=\"a00343.html#ga8d1789651050adb7024917984b41c3de\">glm::length2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length2(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the squared length of x. </div></div>\n<div class=\"ttc\" id=\"a00343_html_ga1a7491e2037ceeb37f83ce41addfc0be\"><div class=\"ttname\"><a href=\"a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be\">glm::l1Norm</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T l1Norm(vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the L1 norm of v. </div></div>\n<div class=\"ttc\" id=\"a00343_html_ga85660f1b79f66c09c7b5a6f80e68c89f\"><div class=\"ttname\"><a href=\"a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f\">glm::distance2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T distance2(vec&lt; L, T, Q &gt; const &amp;p0, vec&lt; L, T, Q &gt; const &amp;p1)</div><div class=\"ttdoc\">Returns the squared distance between p0 and p1, i.e., length2(p0 - p1). </div></div>\n<div class=\"ttc\" id=\"a00343_html_ga6968a324837a8e899396d44de23d5aae\"><div class=\"ttname\"><a href=\"a00343.html#ga6968a324837a8e899396d44de23d5aae\">glm::lMaxNorm</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T lMaxNorm(vec&lt; 3, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the LMax norm of v. </div></div>\n<div class=\"ttc\" id=\"a00343_html_gac61b6d81d796d6eb4d4183396a19ab91\"><div class=\"ttname\"><a href=\"a00343.html#gac61b6d81d796d6eb4d4183396a19ab91\">glm::lxNorm</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T lxNorm(vec&lt; 3, T, Q &gt; const &amp;x, unsigned int Depth)</div><div class=\"ttdoc\">Returns the L norm of v. </div></div>\n<div class=\"ttc\" id=\"a00343_html_gae288bde8f0e41fb4ed62e65137b18cba\"><div class=\"ttname\"><a href=\"a00343.html#gae288bde8f0e41fb4ed62e65137b18cba\">glm::l2Norm</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T l2Norm(vec&lt; 3, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the L2 norm of v. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00114.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: normal.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">normal.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00344.html\">GLM_GTX_normal</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00114_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaff1cb5496925dfa7962df457772a7f35\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaff1cb5496925dfa7962df457772a7f35\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00344.html#gaff1cb5496925dfa7962df457772a7f35\">triangleNormal</a> (vec&lt; 3, T, Q &gt; const &amp;p1, vec&lt; 3, T, Q &gt; const &amp;p2, vec&lt; 3, T, Q &gt; const &amp;p3)</td></tr>\n<tr class=\"memdesc:gaff1cb5496925dfa7962df457772a7f35\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Computes triangle normal from triangle points.  <a href=\"a00344.html#gaff1cb5496925dfa7962df457772a7f35\">More...</a><br /></td></tr>\n<tr class=\"separator:gaff1cb5496925dfa7962df457772a7f35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00344.html\">GLM_GTX_normal</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\ngtx_extented_min_max (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00114_source.html\">normal.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00114_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: normal.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">normal.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00114.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_normal is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_normal extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00344.html#gaff1cb5496925dfa7962df457772a7f35\">triangleNormal</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; p1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; p2, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; p3);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#include &quot;normal.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00344_html_gaff1cb5496925dfa7962df457772a7f35\"><div class=\"ttname\"><a href=\"a00344.html#gaff1cb5496925dfa7962df457772a7f35\">glm::triangleNormal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; triangleNormal(vec&lt; 3, T, Q &gt; const &amp;p1, vec&lt; 3, T, Q &gt; const &amp;p2, vec&lt; 3, T, Q &gt; const &amp;p3)</div><div class=\"ttdoc\">Computes triangle normal from triangle points. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00115.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: normalize_dot.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">normalize_dot.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00345.html\">GLM_GTX_normalize_dot</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00115_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2746fb9b5bd22b06b2f7c8babba5de9e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2746fb9b5bd22b06b2f7c8babba5de9e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e\">fastNormalizeDot</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga2746fb9b5bd22b06b2f7c8babba5de9e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Normalize parameters and returns the dot product of x and y.  <a href=\"a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2746fb9b5bd22b06b2f7c8babba5de9e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb140a2b903115d318c8b0a2fb5a5daa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacb140a2b903115d318c8b0a2fb5a5daa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa\">normalizeDot</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gacb140a2b903115d318c8b0a2fb5a5daa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Normalize parameters and returns the dot product of x and y.  <a href=\"a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa\">More...</a><br /></td></tr>\n<tr class=\"separator:gacb140a2b903115d318c8b0a2fb5a5daa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00345.html\">GLM_GTX_normalize_dot</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00115_source.html\">normalize_dot.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00115_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: normalize_dot.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">normalize_dot.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00115.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/fast_square_root.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_normalize_dot is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_normalize_dot extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa\">normalizeDot</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e\">fastNormalizeDot</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#include &quot;normalize_dot.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00345_html_gacb140a2b903115d318c8b0a2fb5a5daa\"><div class=\"ttname\"><a href=\"a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa\">glm::normalizeDot</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T normalizeDot(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Normalize parameters and returns the dot product of x and y. </div></div>\n<div class=\"ttc\" id=\"a00345_html_ga2746fb9b5bd22b06b2f7c8babba5de9e\"><div class=\"ttname\"><a href=\"a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e\">glm::fastNormalizeDot</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fastNormalizeDot(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Normalize parameters and returns the dot product of x and y. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00116.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: number_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">number_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00346.html\">GLM_GTX_number_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00116_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga145ad477a2a3e152855511c3b52469a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga145ad477a2a3e152855511c3b52469a6\"></a>\ntypedef f32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga145ad477a2a3e152855511c3b52469a6\">f32mat1</a></td></tr>\n<tr class=\"memdesc:ga145ad477a2a3e152855511c3b52469a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga145ad477a2a3e152855511c3b52469a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac88c6a4dbfc380aa26e3adbbade36348\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac88c6a4dbfc380aa26e3adbbade36348\"></a>\ntypedef f32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#gac88c6a4dbfc380aa26e3adbbade36348\">f32mat1x1</a></td></tr>\n<tr class=\"memdesc:gac88c6a4dbfc380aa26e3adbbade36348\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:gac88c6a4dbfc380aa26e3adbbade36348\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07f8d7348eb7ae059a84c118fdfeb943\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga07f8d7348eb7ae059a84c118fdfeb943\"></a>\ntypedef f32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga07f8d7348eb7ae059a84c118fdfeb943\">f32vec1</a></td></tr>\n<tr class=\"memdesc:ga07f8d7348eb7ae059a84c118fdfeb943\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga07f8d7348eb7ae059a84c118fdfeb943\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga59bfa589419b5265d01314fcecd33435\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga59bfa589419b5265d01314fcecd33435\"></a>\ntypedef f64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga59bfa589419b5265d01314fcecd33435\">f64mat1</a></td></tr>\n<tr class=\"memdesc:ga59bfa589419b5265d01314fcecd33435\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga59bfa589419b5265d01314fcecd33435\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga448eeb08d0b7d8c43a8b292c981955fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga448eeb08d0b7d8c43a8b292c981955fd\"></a>\ntypedef f64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga448eeb08d0b7d8c43a8b292c981955fd\">f64mat1x1</a></td></tr>\n<tr class=\"memdesc:ga448eeb08d0b7d8c43a8b292c981955fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga448eeb08d0b7d8c43a8b292c981955fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5987a61b8c03d5c432a9e62f0b3efe1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae5987a61b8c03d5c432a9e62f0b3efe1\"></a>\ntypedef f64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#gae5987a61b8c03d5c432a9e62f0b3efe1\">f64vec1</a></td></tr>\n<tr class=\"memdesc:gae5987a61b8c03d5c432a9e62f0b3efe1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:gae5987a61b8c03d5c432a9e62f0b3efe1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52cc069a92e126c3a8dcde93424d2ef0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga52cc069a92e126c3a8dcde93424d2ef0\"></a>\ntypedef u16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga52cc069a92e126c3a8dcde93424d2ef0\">u16vec1</a></td></tr>\n<tr class=\"memdesc:ga52cc069a92e126c3a8dcde93424d2ef0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16bit unsigned integer scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga52cc069a92e126c3a8dcde93424d2ef0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"></a>\ntypedef u32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3\">u32vec1</a></td></tr>\n<tr class=\"memdesc:ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32bit unsigned integer scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga818de170e2584ab037130f2881925974\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga818de170e2584ab037130f2881925974\"></a>\ntypedef u64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga818de170e2584ab037130f2881925974\">u64vec1</a></td></tr>\n<tr class=\"memdesc:ga818de170e2584ab037130f2881925974\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64bit unsigned integer scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga818de170e2584ab037130f2881925974\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5853fe457f4c8a6bc09343d0e9833980\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5853fe457f4c8a6bc09343d0e9833980\"></a>\ntypedef u8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga5853fe457f4c8a6bc09343d0e9833980\">u8vec1</a></td></tr>\n<tr class=\"memdesc:ga5853fe457f4c8a6bc09343d0e9833980\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8bit unsigned integer scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga5853fe457f4c8a6bc09343d0e9833980\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00346.html\">GLM_GTX_number_precision</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00116_source.html\">number_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00116_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: number_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">number_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00116.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/type_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_number_precision is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_number_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span>gtx</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"comment\">// Unsigned int vector types</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#ga5853fe457f4c8a6bc09343d0e9833980\">   38</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">u8</a>                      <a class=\"code\" href=\"a00346.html#ga5853fe457f4c8a6bc09343d0e9833980\">u8vec1</a>;         </div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#ga52cc069a92e126c3a8dcde93424d2ef0\">   39</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">u16</a>                     <a class=\"code\" href=\"a00346.html#ga52cc069a92e126c3a8dcde93424d2ef0\">u16vec1</a>;    </div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3\">   40</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">u32</a>                     <a class=\"code\" href=\"a00346.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3\">u32vec1</a>;    </div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#ga818de170e2584ab037130f2881925974\">   41</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">u64</a>                     <a class=\"code\" href=\"a00346.html#ga818de170e2584ab037130f2881925974\">u64vec1</a>;    </div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"comment\">// Float vector types</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#ga07f8d7348eb7ae059a84c118fdfeb943\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a>                     <a class=\"code\" href=\"a00346.html#ga07f8d7348eb7ae059a84c118fdfeb943\">f32vec1</a>;    </div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#gae5987a61b8c03d5c432a9e62f0b3efe1\">   47</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a>                     <a class=\"code\" href=\"a00346.html#gae5987a61b8c03d5c432a9e62f0b3efe1\">f64vec1</a>;    </div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"comment\">// Float matrix types</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#ga145ad477a2a3e152855511c3b52469a6\">   52</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a>                     <a class=\"code\" href=\"a00346.html#ga145ad477a2a3e152855511c3b52469a6\">f32mat1</a>;        </div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#gac88c6a4dbfc380aa26e3adbbade36348\">   53</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a>                     <a class=\"code\" href=\"a00346.html#gac88c6a4dbfc380aa26e3adbbade36348\">f32mat1x1</a>;      </div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#ga59bfa589419b5265d01314fcecd33435\">   54</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a>                     <a class=\"code\" href=\"a00346.html#ga59bfa589419b5265d01314fcecd33435\">f64mat1</a>;        </div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00346.html#ga448eeb08d0b7d8c43a8b292c981955fd\">   55</a></span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a>                     <a class=\"code\" href=\"a00346.html#ga448eeb08d0b7d8c43a8b292c981955fd\">f64mat1x1</a>;      </div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;}<span class=\"comment\">//namespace gtx</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"preprocessor\">#include &quot;number_precision.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00304_html_ga8165913e068444f7842302d40ba897b9\"><div class=\"ttname\"><a href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">glm::u32</a></div><div class=\"ttdeci\">uint32 u32</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00120\">fwd.hpp:120</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf3f312156984c365e9f65620354da70b\"><div class=\"ttname\"><a href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">glm::u64</a></div><div class=\"ttdeci\">uint64 u64</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00134\">fwd.hpp:134</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_gac88c6a4dbfc380aa26e3adbbade36348\"><div class=\"ttname\"><a href=\"a00346.html#gac88c6a4dbfc380aa26e3adbbade36348\">glm::gtx::f32mat1x1</a></div><div class=\"ttdeci\">f32 f32mat1x1</div><div class=\"ttdoc\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00053\">number_precision.hpp:53</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_ga59bfa589419b5265d01314fcecd33435\"><div class=\"ttname\"><a href=\"a00346.html#ga59bfa589419b5265d01314fcecd33435\">glm::gtx::f64mat1</a></div><div class=\"ttdeci\">f64 f64mat1</div><div class=\"ttdoc\">Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00054\">number_precision.hpp:54</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_ga52cc069a92e126c3a8dcde93424d2ef0\"><div class=\"ttname\"><a href=\"a00346.html#ga52cc069a92e126c3a8dcde93424d2ef0\">glm::gtx::u16vec1</a></div><div class=\"ttdeci\">u16 u16vec1</div><div class=\"ttdoc\">16bit unsigned integer scalar. (from GLM_GTX_number_precision extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00039\">number_precision.hpp:39</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaecc7082561fc9028b844b6cf3d305d36\"><div class=\"ttname\"><a href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">glm::u8</a></div><div class=\"ttdeci\">uint8 u8</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00092\">fwd.hpp:92</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_ga145ad477a2a3e152855511c3b52469a6\"><div class=\"ttname\"><a href=\"a00346.html#ga145ad477a2a3e152855511c3b52469a6\">glm::gtx::f32mat1</a></div><div class=\"ttdeci\">f32 f32mat1</div><div class=\"ttdoc\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00052\">number_precision.hpp:52</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_ga07f8d7348eb7ae059a84c118fdfeb943\"><div class=\"ttname\"><a href=\"a00346.html#ga07f8d7348eb7ae059a84c118fdfeb943\">glm::gtx::f32vec1</a></div><div class=\"ttdeci\">f32 f32vec1</div><div class=\"ttdoc\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00046\">number_precision.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_gae5987a61b8c03d5c432a9e62f0b3efe1\"><div class=\"ttname\"><a href=\"a00346.html#gae5987a61b8c03d5c432a9e62f0b3efe1\">glm::gtx::f64vec1</a></div><div class=\"ttdeci\">f64 f64vec1</div><div class=\"ttdoc\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00047\">number_precision.hpp:47</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_ga448eeb08d0b7d8c43a8b292c981955fd\"><div class=\"ttname\"><a href=\"a00346.html#ga448eeb08d0b7d8c43a8b292c981955fd\">glm::gtx::f64mat1x1</a></div><div class=\"ttdeci\">f64 f64mat1x1</div><div class=\"ttdoc\">Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00055\">number_precision.hpp:55</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_ga818de170e2584ab037130f2881925974\"><div class=\"ttname\"><a href=\"a00346.html#ga818de170e2584ab037130f2881925974\">glm::gtx::u64vec1</a></div><div class=\"ttdeci\">u64 u64vec1</div><div class=\"ttdoc\">64bit unsigned integer scalar. (from GLM_GTX_number_precision extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00041\">number_precision.hpp:41</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"><div class=\"ttname\"><a href=\"a00346.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3\">glm::gtx::u32vec1</a></div><div class=\"ttdeci\">u32 u32vec1</div><div class=\"ttdoc\">32bit unsigned integer scalar. (from GLM_GTX_number_precision extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00040\">number_precision.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\"><div class=\"ttname\"><a href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">glm::f32</a></div><div class=\"ttdeci\">float f32</div><div class=\"ttdoc\">Default 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00150\">fwd.hpp:150</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa2d7acc0adb536fab71fe261232a40ff\"><div class=\"ttname\"><a href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">glm::u16</a></div><div class=\"ttdeci\">uint16 u16</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00106\">fwd.hpp:106</a></div></div>\n<div class=\"ttc\" id=\"a00346_html_ga5853fe457f4c8a6bc09343d0e9833980\"><div class=\"ttname\"><a href=\"a00346.html#ga5853fe457f4c8a6bc09343d0e9833980\">glm::gtx::u8vec1</a></div><div class=\"ttdeci\">u8 u8vec1</div><div class=\"ttdoc\">8bit unsigned integer scalar. (from GLM_GTX_number_precision extension) </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00116_source.html#l00038\">number_precision.hpp:38</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d794d240091678f602e8de225b8d8c9\"><div class=\"ttname\"><a href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">glm::f64</a></div><div class=\"ttdeci\">double f64</div><div class=\"ttdoc\">Default 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00166\">fwd.hpp:166</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00117.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: optimum_pow.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">optimum_pow.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00347.html\">GLM_GTX_optimum_pow</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00117_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga19aaff3213bf23bdec3ef124ace237e9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga19aaff3213bf23bdec3ef124ace237e9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00347.html#ga19aaff3213bf23bdec3ef124ace237e9\">pow2</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga19aaff3213bf23bdec3ef124ace237e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the power of 2.  <a href=\"a00347.html#ga19aaff3213bf23bdec3ef124ace237e9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga19aaff3213bf23bdec3ef124ace237e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga35689d03cd434d6ea819f1942d3bf82e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga35689d03cd434d6ea819f1942d3bf82e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00347.html#ga35689d03cd434d6ea819f1942d3bf82e\">pow3</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga35689d03cd434d6ea819f1942d3bf82e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the power of 3.  <a href=\"a00347.html#ga35689d03cd434d6ea819f1942d3bf82e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga35689d03cd434d6ea819f1942d3bf82e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacef0968763026e180e53e735007dbf5a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gacef0968763026e180e53e735007dbf5a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00347.html#gacef0968763026e180e53e735007dbf5a\">pow4</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:gacef0968763026e180e53e735007dbf5a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the power of 4.  <a href=\"a00347.html#gacef0968763026e180e53e735007dbf5a\">More...</a><br /></td></tr>\n<tr class=\"separator:gacef0968763026e180e53e735007dbf5a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00347.html\">GLM_GTX_optimum_pow</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00117_source.html\">optimum_pow.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00117_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: optimum_pow.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">optimum_pow.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00117.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_optimum_pow is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_optimum_pow extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span>gtx</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00347.html#ga19aaff3213bf23bdec3ef124ace237e9\">pow2</a>(genType <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00347.html#ga35689d03cd434d6ea819f1942d3bf82e\">pow3</a>(genType <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00347.html#gacef0968763026e180e53e735007dbf5a\">pow4</a>(genType <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;}<span class=\"comment\">//namespace gtx</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">#include &quot;optimum_pow.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00347_html_ga35689d03cd434d6ea819f1942d3bf82e\"><div class=\"ttname\"><a href=\"a00347.html#ga35689d03cd434d6ea819f1942d3bf82e\">glm::gtx::pow3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType pow3(genType const &amp;x)</div><div class=\"ttdoc\">Returns x raised to the power of 3. </div></div>\n<div class=\"ttc\" id=\"a00347_html_gacef0968763026e180e53e735007dbf5a\"><div class=\"ttname\"><a href=\"a00347.html#gacef0968763026e180e53e735007dbf5a\">glm::gtx::pow4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType pow4(genType const &amp;x)</div><div class=\"ttdoc\">Returns x raised to the power of 4. </div></div>\n<div class=\"ttc\" id=\"a00347_html_ga19aaff3213bf23bdec3ef124ace237e9\"><div class=\"ttname\"><a href=\"a00347.html#ga19aaff3213bf23bdec3ef124ace237e9\">glm::gtx::pow2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType pow2(genType const &amp;x)</div><div class=\"ttdoc\">Returns x raised to the power of 2. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00118.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: orthonormalize.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">orthonormalize.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00348.html\">GLM_GTX_orthonormalize</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00118_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga4cab5d698e6e2eccea30c8e81c74371f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4cab5d698e6e2eccea30c8e81c74371f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00348.html#ga4cab5d698e6e2eccea30c8e81c74371f\">orthonormalize</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:ga4cab5d698e6e2eccea30c8e81c74371f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the orthonormalized matrix of m.  <a href=\"a00348.html#ga4cab5d698e6e2eccea30c8e81c74371f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4cab5d698e6e2eccea30c8e81c74371f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3bc7ef498815026bc3d361ae0b7138e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac3bc7ef498815026bc3d361ae0b7138e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00348.html#gac3bc7ef498815026bc3d361ae0b7138e\">orthonormalize</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gac3bc7ef498815026bc3d361ae0b7138e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Orthonormalizes x according y.  <a href=\"a00348.html#gac3bc7ef498815026bc3d361ae0b7138e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac3bc7ef498815026bc3d361ae0b7138e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00348.html\">GLM_GTX_orthonormalize</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\ngtx_extented_min_max (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00118_source.html\">orthonormalize.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00118_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: orthonormalize.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">orthonormalize.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00118.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_orthonormalize is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_orthonormalize extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00348.html#gac3bc7ef498815026bc3d361ae0b7138e\">orthonormalize</a>(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00348.html#gac3bc7ef498815026bc3d361ae0b7138e\">orthonormalize</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#include &quot;orthonormalize.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00348_html_gac3bc7ef498815026bc3d361ae0b7138e\"><div class=\"ttname\"><a href=\"a00348.html#gac3bc7ef498815026bc3d361ae0b7138e\">glm::orthonormalize</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; orthonormalize(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Orthonormalizes x according y. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00119.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: packing.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/packing.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00298.html\">GLM_GTC_packing</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00119_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga4944ad465ff950e926d49621f916c78d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga4944ad465ff950e926d49621f916c78d\">packF2x11_1x10</a> (vec3 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4944ad465ff950e926d49621f916c78d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.  <a href=\"a00298.html#ga4944ad465ff950e926d49621f916c78d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4944ad465ff950e926d49621f916c78d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3f648fc205467792dc6d8c59c748f8a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga3f648fc205467792dc6d8c59c748f8a6\">packF3x9_E1x5</a> (vec3 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3f648fc205467792dc6d8c59c748f8a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.  <a href=\"a00298.html#ga3f648fc205467792dc6d8c59c748f8a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3f648fc205467792dc6d8c59c748f8a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2d8bbce673ebc04831c1fb05c47f5251\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2d8bbce673ebc04831c1fb05c47f5251\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint16, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251\">packHalf</a> (vec&lt; L, float, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2d8bbce673ebc04831c1fb05c47f5251\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification.  <a href=\"a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2d8bbce673ebc04831c1fb05c47f5251\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43f2093b6ff192a79058ff7834fc3528\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga43f2093b6ff192a79058ff7834fc3528\">packHalf1x16</a> (float v)</td></tr>\n<tr class=\"memdesc:ga43f2093b6ff192a79058ff7834fc3528\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 16-bit floating-point representation found in the OpenGL Specification, and then packing this 16-bit value into a 16-bit unsigned integer.  <a href=\"a00298.html#ga43f2093b6ff192a79058ff7834fc3528\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43f2093b6ff192a79058ff7834fc3528\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe2f7b39caf8f5ec555e1c059ec530e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6\">packHalf4x16</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gafe2f7b39caf8f5ec555e1c059ec530e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a four-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these four 16-bit values into a 64-bit unsigned integer.  <a href=\"a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6\">More...</a><br /></td></tr>\n<tr class=\"separator:gafe2f7b39caf8f5ec555e1c059ec530e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga06ecb6afb902dba45419008171db9023\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga06ecb6afb902dba45419008171db9023\">packI3x10_1x2</a> (ivec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga06ecb6afb902dba45419008171db9023\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a four-component signed integer vector to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer.  <a href=\"a00298.html#ga06ecb6afb902dba45419008171db9023\">More...</a><br /></td></tr>\n<tr class=\"separator:ga06ecb6afb902dba45419008171db9023\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3644163cf3a47bf1d4af1f4b03013a7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e\">packInt2x16</a> (i16vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3644163cf3a47bf1d4af1f4b03013a7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3644163cf3a47bf1d4af1f4b03013a7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1e4c8a9e67d86b61a6eec86703a827a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a\">packInt2x32</a> (i32vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:gad1e4c8a9e67d86b61a6eec86703a827a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1e4c8a9e67d86b61a6eec86703a827a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8884b1f2292414f36d59ef3be5d62914\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga8884b1f2292414f36d59ef3be5d62914\">packInt2x8</a> (i8vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8884b1f2292414f36d59ef3be5d62914\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#ga8884b1f2292414f36d59ef3be5d62914\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8884b1f2292414f36d59ef3be5d62914\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1989f093a27ae69cf9207145be48b3d7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga1989f093a27ae69cf9207145be48b3d7\">packInt4x16</a> (i16vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1989f093a27ae69cf9207145be48b3d7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#ga1989f093a27ae69cf9207145be48b3d7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1989f093a27ae69cf9207145be48b3d7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2238401d5ce2aaade1a44ba19709072\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaf2238401d5ce2aaade1a44ba19709072\">packInt4x8</a> (i8vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf2238401d5ce2aaade1a44ba19709072\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#gaf2238401d5ce2aaade1a44ba19709072\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2238401d5ce2aaade1a44ba19709072\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0466daf4c90f76cc64b3f105ce727295\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0466daf4c90f76cc64b3f105ce727295\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga0466daf4c90f76cc64b3f105ce727295\">packRGBM</a> (vec&lt; 3, T, Q &gt; const &amp;rgb)</td></tr>\n<tr class=\"memdesc:ga0466daf4c90f76cc64b3f105ce727295\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification.  <a href=\"a00298.html#ga0466daf4c90f76cc64b3f105ce727295\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0466daf4c90f76cc64b3f105ce727295\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa54b5855a750d6aeb12c1c902f5939b8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename intType , length_t L, typename floatType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa54b5855a750d6aeb12c1c902f5939b8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, intType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8\">packSnorm</a> (vec&lt; L, floatType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa54b5855a750d6aeb12c1c902f5939b8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into signed integer values.  <a href=\"a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa54b5855a750d6aeb12c1c902f5939b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab22f8bcfdb5fc65af4701b25f143c1af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af\">packSnorm1x16</a> (float v)</td></tr>\n<tr class=\"memdesc:gab22f8bcfdb5fc65af4701b25f143c1af\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the normalized floating-point value v into 16-bit integer value.  <a href=\"a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af\">More...</a><br /></td></tr>\n<tr class=\"separator:gab22f8bcfdb5fc65af4701b25f143c1af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae3592e0795e62aaa1865b3a10496a7a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gae3592e0795e62aaa1865b3a10496a7a1\">packSnorm1x8</a> (float s)</td></tr>\n<tr class=\"memdesc:gae3592e0795e62aaa1865b3a10496a7a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the normalized floating-point value v into 8-bit integer value.  <a href=\"a00298.html#gae3592e0795e62aaa1865b3a10496a7a1\">More...</a><br /></td></tr>\n<tr class=\"separator:gae3592e0795e62aaa1865b3a10496a7a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6be3cfb2cce3702f03e91bbeb5286d7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e\">packSnorm2x8</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga6be3cfb2cce3702f03e91bbeb5286d7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8-bit integer values.  <a href=\"a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6be3cfb2cce3702f03e91bbeb5286d7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab997545661877d2c7362a5084d3897d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab997545661877d2c7362a5084d3897d3\">packSnorm3x10_1x2</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gab997545661877d2c7362a5084d3897d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values.  <a href=\"a00298.html#gab997545661877d2c7362a5084d3897d3\">More...</a><br /></td></tr>\n<tr class=\"separator:gab997545661877d2c7362a5084d3897d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga358943934d21da947d5bcc88c2ab7832\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga358943934d21da947d5bcc88c2ab7832\">packSnorm4x16</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga358943934d21da947d5bcc88c2ab7832\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 16-bit integer values.  <a href=\"a00298.html#ga358943934d21da947d5bcc88c2ab7832\">More...</a><br /></td></tr>\n<tr class=\"separator:ga358943934d21da947d5bcc88c2ab7832\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada3d88d59f0f458f9c51a9fd359a4bc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0\">packU3x10_1x2</a> (uvec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gada3d88d59f0f458f9c51a9fd359a4bc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer.  <a href=\"a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0\">More...</a><br /></td></tr>\n<tr class=\"separator:gada3d88d59f0f458f9c51a9fd359a4bc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5eecc9e8cbaf51ac6cf57501e670ee19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19\">packUint2x16</a> (u16vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga5eecc9e8cbaf51ac6cf57501e670ee19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5eecc9e8cbaf51ac6cf57501e670ee19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa864081097b86e83d8e4a4d79c382b22\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaa864081097b86e83d8e4a4d79c382b22\">packUint2x32</a> (u32vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa864081097b86e83d8e4a4d79c382b22\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#gaa864081097b86e83d8e4a4d79c382b22\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa864081097b86e83d8e4a4d79c382b22\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3c3c9fb53ae7823b10fa083909357590\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga3c3c9fb53ae7823b10fa083909357590\">packUint2x8</a> (u8vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3c3c9fb53ae7823b10fa083909357590\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#ga3c3c9fb53ae7823b10fa083909357590\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3c3c9fb53ae7823b10fa083909357590\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ceb62cca347d8ace42ee90317a3f1f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9\">packUint4x16</a> (u16vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2ceb62cca347d8ace42ee90317a3f1f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ceb62cca347d8ace42ee90317a3f1f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0fe2f09aeb403cd66c1a062f58861ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab\">packUint4x8</a> (u8vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa0fe2f09aeb403cd66c1a062f58861ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0fe2f09aeb403cd66c1a062f58861ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename uintType , length_t L, typename floatType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uintType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a\">packUnorm</a> (vec&lt; L, floatType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9f82737bf2a44bedff1d286b76837886\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga9f82737bf2a44bedff1d286b76837886\">packUnorm1x16</a> (float v)</td></tr>\n<tr class=\"memdesc:ga9f82737bf2a44bedff1d286b76837886\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the normalized floating-point value v into a 16-bit integer value.  <a href=\"a00298.html#ga9f82737bf2a44bedff1d286b76837886\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9f82737bf2a44bedff1d286b76837886\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga768e0337dd6246773f14aa0a421fe9a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga768e0337dd6246773f14aa0a421fe9a8\">packUnorm1x5_1x6_1x5</a> (vec3 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga768e0337dd6246773f14aa0a421fe9a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#ga768e0337dd6246773f14aa0a421fe9a8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga768e0337dd6246773f14aa0a421fe9a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b2fa60df3460403817d28b082ee0736\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga4b2fa60df3460403817d28b082ee0736\">packUnorm1x8</a> (float v)</td></tr>\n<tr class=\"memdesc:ga4b2fa60df3460403817d28b082ee0736\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the normalized floating-point value v into a 8-bit integer value.  <a href=\"a00298.html#ga4b2fa60df3460403817d28b082ee0736\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b2fa60df3460403817d28b082ee0736\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f9abdb50f9be1aa1c14912504a0d98d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d\">packUnorm2x3_1x2</a> (vec3 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga7f9abdb50f9be1aa1c14912504a0d98d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f9abdb50f9be1aa1c14912504a0d98d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab6bbd5be3b8e6db538ecb33a7844481c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c\">packUnorm2x4</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:gab6bbd5be3b8e6db538ecb33a7844481c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c\">More...</a><br /></td></tr>\n<tr class=\"separator:gab6bbd5be3b8e6db538ecb33a7844481c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a666b1c688ab54100061ed06526de6e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga9a666b1c688ab54100061ed06526de6e\">packUnorm2x8</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga9a666b1c688ab54100061ed06526de6e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8-bit integer values.  <a href=\"a00298.html#ga9a666b1c688ab54100061ed06526de6e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9a666b1c688ab54100061ed06526de6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a1ee625d2707c60530fb3fca2980b19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga8a1ee625d2707c60530fb3fca2980b19\">packUnorm3x10_1x2</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8a1ee625d2707c60530fb3fca2980b19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values.  <a href=\"a00298.html#ga8a1ee625d2707c60530fb3fca2980b19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8a1ee625d2707c60530fb3fca2980b19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec4112086d7fb133bea104a7c237de52\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaec4112086d7fb133bea104a7c237de52\">packUnorm3x5_1x1</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaec4112086d7fb133bea104a7c237de52\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#gaec4112086d7fb133bea104a7c237de52\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec4112086d7fb133bea104a7c237de52\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f63c264e7ab63264e2b2a99fd393897\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga1f63c264e7ab63264e2b2a99fd393897\">packUnorm4x16</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1f63c264e7ab63264e2b2a99fd393897\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 16-bit integer values.  <a href=\"a00298.html#ga1f63c264e7ab63264e2b2a99fd393897\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f63c264e7ab63264e2b2a99fd393897\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad3e7e3ce521513584a53aedc5f9765c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gad3e7e3ce521513584a53aedc5f9765c1\">packUnorm4x4</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gad3e7e3ce521513584a53aedc5f9765c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#gad3e7e3ce521513584a53aedc5f9765c1\">More...</a><br /></td></tr>\n<tr class=\"separator:gad3e7e3ce521513584a53aedc5f9765c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b1fd1e854705b1345e98409e0a25e50\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2b1fd1e854705b1345e98409e0a25e50\">unpackF2x11_1x10</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga2b1fd1e854705b1345e98409e0a25e50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .  <a href=\"a00298.html#ga2b1fd1e854705b1345e98409e0a25e50\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b1fd1e854705b1345e98409e0a25e50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab9e60ebe3ad3eeced6a9ec6eb876d74e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e\">unpackF3x9_E1x5</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:gab9e60ebe3ad3eeced6a9ec6eb876d74e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .  <a href=\"a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e\">More...</a><br /></td></tr>\n<tr class=\"separator:gab9e60ebe3ad3eeced6a9ec6eb876d74e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30d6b2f1806315bcd6047131f547d33b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga30d6b2f1806315bcd6047131f547d33b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, float, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga30d6b2f1806315bcd6047131f547d33b\">unpackHalf</a> (vec&lt; L, uint16, Q &gt; const &amp;p)</td></tr>\n<tr class=\"memdesc:ga30d6b2f1806315bcd6047131f547d33b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values.  <a href=\"a00298.html#ga30d6b2f1806315bcd6047131f547d33b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga30d6b2f1806315bcd6047131f547d33b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac37dedaba24b00adb4ec6e8f92c19dbf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf\">unpackHalf1x16</a> (uint16 v)</td></tr>\n<tr class=\"memdesc:gac37dedaba24b00adb4ec6e8f92c19dbf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value, interpreted as a 16-bit floating-point number according to the OpenGL Specification, and converting it to 32-bit floating-point values.  <a href=\"a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf\">More...</a><br /></td></tr>\n<tr class=\"separator:gac37dedaba24b00adb4ec6e8f92c19dbf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga57dfc41b2eb20b0ac00efae7d9c49dcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd\">unpackHalf4x16</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:ga57dfc41b2eb20b0ac00efae7d9c49dcd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values.  <a href=\"a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga57dfc41b2eb20b0ac00efae7d9c49dcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a05330e5490be0908d3b117d82aff56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL ivec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga9a05330e5490be0908d3b117d82aff56\">unpackI3x10_1x2</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga9a05330e5490be0908d3b117d82aff56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers.  <a href=\"a00298.html#ga9a05330e5490be0908d3b117d82aff56\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9a05330e5490be0908d3b117d82aff56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaccde055882918a3175de82f4ca8b7d8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i16vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaccde055882918a3175de82f4ca8b7d8e\">unpackInt2x16</a> (int p)</td></tr>\n<tr class=\"memdesc:gaccde055882918a3175de82f4ca8b7d8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gaccde055882918a3175de82f4ca8b7d8e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaccde055882918a3175de82f4ca8b7d8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab297c0bfd38433524791eb0584d8f08d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i32vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab297c0bfd38433524791eb0584d8f08d\">unpackInt2x32</a> (int64 p)</td></tr>\n<tr class=\"memdesc:gab297c0bfd38433524791eb0584d8f08d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gab297c0bfd38433524791eb0584d8f08d\">More...</a><br /></td></tr>\n<tr class=\"separator:gab297c0bfd38433524791eb0584d8f08d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0c59f1e259fca9e68adb2207a6b665e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i8vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab0c59f1e259fca9e68adb2207a6b665e\">unpackInt2x8</a> (int16 p)</td></tr>\n<tr class=\"memdesc:gab0c59f1e259fca9e68adb2207a6b665e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gab0c59f1e259fca9e68adb2207a6b665e\">More...</a><br /></td></tr>\n<tr class=\"separator:gab0c59f1e259fca9e68adb2207a6b665e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52c154a9b232b62c22517a700cc0c78c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i16vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga52c154a9b232b62c22517a700cc0c78c\">unpackInt4x16</a> (int64 p)</td></tr>\n<tr class=\"memdesc:ga52c154a9b232b62c22517a700cc0c78c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#ga52c154a9b232b62c22517a700cc0c78c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga52c154a9b232b62c22517a700cc0c78c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1cd8d2038cdd33a860801aa155a26221\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i8vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga1cd8d2038cdd33a860801aa155a26221\">unpackInt4x8</a> (int32 p)</td></tr>\n<tr class=\"memdesc:ga1cd8d2038cdd33a860801aa155a26221\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#ga1cd8d2038cdd33a860801aa155a26221\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1cd8d2038cdd33a860801aa155a26221\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c1ec97894b05ea21a05aea4f0204a02\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5c1ec97894b05ea21a05aea4f0204a02\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02\">unpackRGBM</a> (vec&lt; 4, T, Q &gt; const &amp;rgbm)</td></tr>\n<tr class=\"memdesc:ga5c1ec97894b05ea21a05aea4f0204a02\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values.  <a href=\"a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c1ec97894b05ea21a05aea4f0204a02\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d49b31e5c3f9df8e1f99ab62b999482\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename floatType , length_t L, typename intType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6d49b31e5c3f9df8e1f99ab62b999482\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482\">unpackSnorm</a> (vec&lt; L, intType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga6d49b31e5c3f9df8e1f99ab62b999482\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d49b31e5c3f9df8e1f99ab62b999482\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga96dd15002370627a443c835ab03a766c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga96dd15002370627a443c835ab03a766c\">unpackSnorm1x16</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga96dd15002370627a443c835ab03a766c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers.  <a href=\"a00298.html#ga96dd15002370627a443c835ab03a766c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga96dd15002370627a443c835ab03a766c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4851ff86678aa1c7ace9d67846894285\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga4851ff86678aa1c7ace9d67846894285\">unpackSnorm1x8</a> (uint8 p)</td></tr>\n<tr class=\"memdesc:ga4851ff86678aa1c7ace9d67846894285\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers.  <a href=\"a00298.html#ga4851ff86678aa1c7ace9d67846894285\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4851ff86678aa1c7ace9d67846894285\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b128e89be449fc71336968a66bf6e1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga8b128e89be449fc71336968a66bf6e1a\">unpackSnorm2x8</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga8b128e89be449fc71336968a66bf6e1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers.  <a href=\"a00298.html#ga8b128e89be449fc71336968a66bf6e1a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b128e89be449fc71336968a66bf6e1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a4fbf79be9740e3c57737bc2af05e5b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b\">unpackSnorm3x10_1x2</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga7a4fbf79be9740e3c57737bc2af05e5b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.  <a href=\"a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a4fbf79be9740e3c57737bc2af05e5b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaddf9c353528fe896106f7181219c7f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaaddf9c353528fe896106f7181219c7f4\">unpackSnorm4x16</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:gaaddf9c353528fe896106f7181219c7f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers.  <a href=\"a00298.html#gaaddf9c353528fe896106f7181219c7f4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaddf9c353528fe896106f7181219c7f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga48df3042a7d079767f5891a1bfd8a60a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga48df3042a7d079767f5891a1bfd8a60a\">unpackU3x10_1x2</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga48df3042a7d079767f5891a1bfd8a60a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers.  <a href=\"a00298.html#ga48df3042a7d079767f5891a1bfd8a60a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga48df3042a7d079767f5891a1bfd8a60a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga035bbbeab7ec2b28c0529757395b645b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u16vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga035bbbeab7ec2b28c0529757395b645b\">unpackUint2x16</a> (uint p)</td></tr>\n<tr class=\"memdesc:ga035bbbeab7ec2b28c0529757395b645b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#ga035bbbeab7ec2b28c0529757395b645b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga035bbbeab7ec2b28c0529757395b645b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf942ff11b65e83eb5f77e68329ebc6ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u32vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab\">unpackUint2x32</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:gaf942ff11b65e83eb5f77e68329ebc6ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf942ff11b65e83eb5f77e68329ebc6ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7600a6c71784b637a410869d2a5adcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u8vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaa7600a6c71784b637a410869d2a5adcd\">unpackUint2x8</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:gaa7600a6c71784b637a410869d2a5adcd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gaa7600a6c71784b637a410869d2a5adcd\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7600a6c71784b637a410869d2a5adcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab173834ef14cfc23a96a959f3ff4b8dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u16vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc\">unpackUint4x16</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:gab173834ef14cfc23a96a959f3ff4b8dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc\">More...</a><br /></td></tr>\n<tr class=\"separator:gab173834ef14cfc23a96a959f3ff4b8dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6dc0e4341810a641c7ed08f10e335d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u8vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1\">unpackUint4x8</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:gaf6dc0e4341810a641c7ed08f10e335d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6dc0e4341810a641c7ed08f10e335d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename floatType , length_t L, typename uintType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f\">unpackUnorm</a> (vec&lt; L, uintType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83d34160a5cb7bcb5339823210fc7501\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga83d34160a5cb7bcb5339823210fc7501\">unpackUnorm1x16</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga83d34160a5cb7bcb5339823210fc7501\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers.  <a href=\"a00298.html#ga83d34160a5cb7bcb5339823210fc7501\">More...</a><br /></td></tr>\n<tr class=\"separator:ga83d34160a5cb7bcb5339823210fc7501\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3bc08ecfc0f3339be93fb2b3b56d88a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a\">unpackUnorm1x5_1x6_1x5</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:gab3bc08ecfc0f3339be93fb2b3b56d88a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3bc08ecfc0f3339be93fb2b3b56d88a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1319207e30874fb4931a9ee913983ee1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga1319207e30874fb4931a9ee913983ee1\">unpackUnorm1x8</a> (uint8 p)</td></tr>\n<tr class=\"memdesc:ga1319207e30874fb4931a9ee913983ee1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a single 8-bit integer to a normalized floating-point value.  <a href=\"a00298.html#ga1319207e30874fb4931a9ee913983ee1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1319207e30874fb4931a9ee913983ee1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6abd5a9014df3b5ce4059008d2491260\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga6abd5a9014df3b5ce4059008d2491260\">unpackUnorm2x3_1x2</a> (uint8 p)</td></tr>\n<tr class=\"memdesc:ga6abd5a9014df3b5ce4059008d2491260\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga6abd5a9014df3b5ce4059008d2491260\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6abd5a9014df3b5ce4059008d2491260\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e50476132fe5f27f08e273d9c70d85b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2e50476132fe5f27f08e273d9c70d85b\">unpackUnorm2x4</a> (uint8 p)</td></tr>\n<tr class=\"memdesc:ga2e50476132fe5f27f08e273d9c70d85b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga2e50476132fe5f27f08e273d9c70d85b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e50476132fe5f27f08e273d9c70d85b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga637cbe3913dd95c6e7b4c99c61bd611f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f\">unpackUnorm2x8</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga637cbe3913dd95c6e7b4c99c61bd611f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers.  <a href=\"a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga637cbe3913dd95c6e7b4c99c61bd611f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5156d3060355fe332865da2c7f78815f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga5156d3060355fe332865da2c7f78815f\">unpackUnorm3x10_1x2</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga5156d3060355fe332865da2c7f78815f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.  <a href=\"a00298.html#ga5156d3060355fe332865da2c7f78815f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5156d3060355fe332865da2c7f78815f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ff95ff5bc16f396432ab67243dbae4d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d\">unpackUnorm3x5_1x1</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga5ff95ff5bc16f396432ab67243dbae4d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5ff95ff5bc16f396432ab67243dbae4d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ae149c5d2473ac1e5f347bb654a242d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d\">unpackUnorm4x16</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:ga2ae149c5d2473ac1e5f347bb654a242d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers.  <a href=\"a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ae149c5d2473ac1e5f347bb654a242d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac58ee89d0e224bb6df5e8bbb18843a2d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d\">unpackUnorm4x4</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:gac58ee89d0e224bb6df5e8bbb18843a2d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d\">More...</a><br /></td></tr>\n<tr class=\"separator:gac58ee89d0e224bb6df5e8bbb18843a2d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00298.html\">GLM_GTC_packing</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00119_source.html\">gtc/packing.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00119_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: packing.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/packing.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00119.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00174.html\">type_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_packing extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL uint8 <a class=\"code\" href=\"a00298.html#ga4b2fa60df3460403817d28b082ee0736\">packUnorm1x8</a>(<span class=\"keywordtype\">float</span> v);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"a00298.html#ga1319207e30874fb4931a9ee913983ee1\">unpackUnorm1x8</a>(uint8 p);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#ga9a666b1c688ab54100061ed06526de6e\">packUnorm2x8</a>(<a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <a class=\"code\" href=\"a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f\">unpackUnorm2x8</a>(uint16 p);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        GLM_FUNC_DECL uint8 <a class=\"code\" href=\"a00298.html#gae3592e0795e62aaa1865b3a10496a7a1\">packSnorm1x8</a>(<span class=\"keywordtype\">float</span> s);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"a00298.html#ga4851ff86678aa1c7ace9d67846894285\">unpackSnorm1x8</a>(uint8 p);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e\">packSnorm2x8</a>(<a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <a class=\"code\" href=\"a00298.html#ga8b128e89be449fc71336968a66bf6e1a\">unpackSnorm2x8</a>(uint16 p);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#ga9f82737bf2a44bedff1d286b76837886\">packUnorm1x16</a>(<span class=\"keywordtype\">float</span> v);</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"a00298.html#ga83d34160a5cb7bcb5339823210fc7501\">unpackUnorm1x16</a>(uint16 p);</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00298.html#ga1f63c264e7ab63264e2b2a99fd393897\">packUnorm4x16</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d\">unpackUnorm4x16</a>(<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> p);</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af\">packSnorm1x16</a>(<span class=\"keywordtype\">float</span> v);</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"a00298.html#ga96dd15002370627a443c835ab03a766c\">unpackSnorm1x16</a>(uint16 p);</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00298.html#ga358943934d21da947d5bcc88c2ab7832\">packSnorm4x16</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00298.html#gaaddf9c353528fe896106f7181219c7f4\">unpackSnorm4x16</a>(<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> p);</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#ga43f2093b6ff192a79058ff7834fc3528\">packHalf1x16</a>(<span class=\"keywordtype\">float</span> v);</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf\">unpackHalf1x16</a>(uint16 v);</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6\">packHalf4x16</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd\">unpackHalf4x16</a>(<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> p);</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00298.html#ga06ecb6afb902dba45419008171db9023\">packI3x10_1x2</a>(<a class=\"code\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a> <a class=\"code\" href=\"a00298.html#ga9a05330e5490be0908d3b117d82aff56\">unpackI3x10_1x2</a>(uint32 p);</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0\">packU3x10_1x2</a>(<a class=\"code\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a> <a class=\"code\" href=\"a00298.html#ga48df3042a7d079767f5891a1bfd8a60a\">unpackU3x10_1x2</a>(uint32 p);</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00298.html#gab997545661877d2c7362a5084d3897d3\">packSnorm3x10_1x2</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b\">unpackSnorm3x10_1x2</a>(uint32 p);</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00298.html#ga8a1ee625d2707c60530fb3fca2980b19\">packUnorm3x10_1x2</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00298.html#ga5156d3060355fe332865da2c7f78815f\">unpackUnorm3x10_1x2</a>(uint32 p);</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;</div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00298.html#ga4944ad465ff950e926d49621f916c78d\">packF2x11_1x10</a>(<a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> <a class=\"code\" href=\"a00298.html#ga2b1fd1e854705b1345e98409e0a25e50\">unpackF2x11_1x10</a>(uint32 p);</div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;</div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00298.html#ga3f648fc205467792dc6d8c59c748f8a6\">packF3x9_E1x5</a>(<a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> <a class=\"code\" href=\"a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e\">unpackF3x9_E1x5</a>(uint32 p);</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00298.html#ga0466daf4c90f76cc64b3f105ce727295\">packRGBM</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; rgb);</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02\">unpackRGBM</a>(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; rgbm);</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;        GLM_FUNC_DECL vec&lt;L, uint16, Q&gt; <a class=\"code\" href=\"a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251\">packHalf</a>(vec&lt;L, float, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;        GLM_FUNC_DECL vec&lt;L, float, Q&gt; <a class=\"code\" href=\"a00298.html#ga30d6b2f1806315bcd6047131f547d33b\">unpackHalf</a>(vec&lt;L, uint16, Q&gt; <span class=\"keyword\">const</span>&amp; p);</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;</div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> u<span class=\"keywordtype\">int</span>Type, length_t L, <span class=\"keyword\">typename</span> <span class=\"keywordtype\">float</span>Type, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;        GLM_FUNC_DECL vec&lt;L, uintType, Q&gt; <a class=\"code\" href=\"a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a\">packUnorm</a>(vec&lt;L, floatType, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;</div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> <span class=\"keywordtype\">float</span>Type, length_t L, <span class=\"keyword\">typename</span> u<span class=\"keywordtype\">int</span>Type, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;        GLM_FUNC_DECL vec&lt;L, floatType, Q&gt; <a class=\"code\" href=\"a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f\">unpackUnorm</a>(vec&lt;L, uintType, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;</div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> <span class=\"keywordtype\">int</span>Type, length_t L, <span class=\"keyword\">typename</span> <span class=\"keywordtype\">float</span>Type, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\">  533</span>&#160;        GLM_FUNC_DECL vec&lt;L, intType, Q&gt; <a class=\"code\" href=\"a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8\">packSnorm</a>(vec&lt;L, floatType, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;</div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> <span class=\"keywordtype\">float</span>Type, length_t L, <span class=\"keyword\">typename</span> <span class=\"keywordtype\">int</span>Type, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160;        GLM_FUNC_DECL vec&lt;L, floatType, Q&gt; <a class=\"code\" href=\"a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482\">unpackSnorm</a>(vec&lt;L, intType, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\">  541</span>&#160;</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;        GLM_FUNC_DECL uint8 <a class=\"code\" href=\"a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c\">packUnorm2x4</a>(<a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <a class=\"code\" href=\"a00298.html#ga2e50476132fe5f27f08e273d9c70d85b\">unpackUnorm2x4</a>(uint8 p);</div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\">  553</span>&#160;</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#gad3e7e3ce521513584a53aedc5f9765c1\">packUnorm4x4</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;</div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d\">unpackUnorm4x4</a>(uint16 p);</div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;</div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#ga768e0337dd6246773f14aa0a421fe9a8\">packUnorm1x5_1x6_1x5</a>(<a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;</div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> <a class=\"code\" href=\"a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a\">unpackUnorm1x5_1x6_1x5</a>(uint16 p);</div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;</div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#gaec4112086d7fb133bea104a7c237de52\">packUnorm3x5_1x1</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;</div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d\">unpackUnorm3x5_1x1</a>(uint16 p);</div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;</div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;        GLM_FUNC_DECL uint8 <a class=\"code\" href=\"a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d\">packUnorm2x3_1x2</a>(<a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;</div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> <a class=\"code\" href=\"a00298.html#ga6abd5a9014df3b5ce4059008d2491260\">unpackUnorm2x3_1x2</a>(uint8 p);</div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;</div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;        GLM_FUNC_DECL int16 <a class=\"code\" href=\"a00298.html#ga8884b1f2292414f36d59ef3be5d62914\">packInt2x8</a>(<a class=\"code\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">i8vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;</div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">i8vec2</a> <a class=\"code\" href=\"a00298.html#gab0c59f1e259fca9e68adb2207a6b665e\">unpackInt2x8</a>(int16 p);</div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;</div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;        GLM_FUNC_DECL uint16 <a class=\"code\" href=\"a00298.html#ga3c3c9fb53ae7823b10fa083909357590\">packUint2x8</a>(<a class=\"code\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;</div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a> <a class=\"code\" href=\"a00298.html#gaa7600a6c71784b637a410869d2a5adcd\">unpackUint2x8</a>(uint16 p);</div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;</div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160;        GLM_FUNC_DECL int32 <a class=\"code\" href=\"a00298.html#gaf2238401d5ce2aaade1a44ba19709072\">packInt4x8</a>(<a class=\"code\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">i8vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;</div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">i8vec4</a> <a class=\"code\" href=\"a00298.html#ga1cd8d2038cdd33a860801aa155a26221\">unpackInt4x8</a>(int32 p);</div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;        GLM_FUNC_DECL uint32 <a class=\"code\" href=\"a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab\">packUint4x8</a>(<a class=\"code\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">u8vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;</div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">u8vec4</a> <a class=\"code\" href=\"a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1\">unpackUint4x8</a>(uint32 p);</div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;</div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e\">packInt2x16</a>(<a class=\"code\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">i16vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;</div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\">  662</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">i16vec2</a> <a class=\"code\" href=\"a00298.html#gaccde055882918a3175de82f4ca8b7d8e\">unpackInt2x16</a>(<span class=\"keywordtype\">int</span> p);</div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;</div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\">  668</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> <a class=\"code\" href=\"a00298.html#ga1989f093a27ae69cf9207145be48b3d7\">packInt4x16</a>(<a class=\"code\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">i16vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;</div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\">  674</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">i16vec4</a> <a class=\"code\" href=\"a00298.html#ga52c154a9b232b62c22517a700cc0c78c\">unpackInt4x16</a>(<a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> p);</div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\">  675</span>&#160;</div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19\">packUint2x16</a>(<a class=\"code\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;</div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\">  686</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a> <a class=\"code\" href=\"a00298.html#ga035bbbeab7ec2b28c0529757395b645b\">unpackUint2x16</a>(uint p);</div>\n<div class=\"line\"><a name=\"l00687\"></a><span class=\"lineno\">  687</span>&#160;</div>\n<div class=\"line\"><a name=\"l00692\"></a><span class=\"lineno\">  692</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9\">packUint4x16</a>(<a class=\"code\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">u16vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\">  693</span>&#160;</div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">u16vec4</a> <a class=\"code\" href=\"a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc\">unpackUint4x16</a>(<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> p);</div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;</div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\">  704</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> <a class=\"code\" href=\"a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a\">packInt2x32</a>(<a class=\"code\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">i32vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00705\"></a><span class=\"lineno\">  705</span>&#160;</div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">i32vec2</a> <a class=\"code\" href=\"a00298.html#gab297c0bfd38433524791eb0584d8f08d\">unpackInt2x32</a>(<a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> p);</div>\n<div class=\"line\"><a name=\"l00711\"></a><span class=\"lineno\">  711</span>&#160;</div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> <a class=\"code\" href=\"a00298.html#gaa864081097b86e83d8e4a4d79c382b22\">packUint2x32</a>(<a class=\"code\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160;</div>\n<div class=\"line\"><a name=\"l00722\"></a><span class=\"lineno\">  722</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a> <a class=\"code\" href=\"a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab\">unpackUint2x32</a>(<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> p);</div>\n<div class=\"line\"><a name=\"l00723\"></a><span class=\"lineno\">  723</span>&#160;</div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160;</div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\">  726</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00727\"></a><span class=\"lineno\">  727</span>&#160;</div>\n<div class=\"line\"><a name=\"l00728\"></a><span class=\"lineno\">  728</span>&#160;<span class=\"preprocessor\">#include &quot;packing.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00298_html_gad3e7e3ce521513584a53aedc5f9765c1\"><div class=\"ttname\"><a href=\"a00298.html#gad3e7e3ce521513584a53aedc5f9765c1\">glm::packUnorm4x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packUnorm4x4(vec4 const &amp;v)</div><div class=\"ttdoc\">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga3c3c9fb53ae7823b10fa083909357590\"><div class=\"ttname\"><a href=\"a00298.html#ga3c3c9fb53ae7823b10fa083909357590\">glm::packUint2x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packUint2x8(u8vec2 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed unsigned integer. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gab6bbd5be3b8e6db538ecb33a7844481c\"><div class=\"ttname\"><a href=\"a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c\">glm::packUnorm2x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint8 packUnorm2x4(vec2 const &amp;v)</div><div class=\"ttdoc\">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga2ae149c5d2473ac1e5f347bb654a242d\"><div class=\"ttname\"><a href=\"a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d\">glm::unpackUnorm4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 p)</div><div class=\"ttdoc\">First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gaccde055882918a3175de82f4ca8b7d8e\"><div class=\"ttname\"><a href=\"a00298.html#gaccde055882918a3175de82f4ca8b7d8e\">glm::unpackInt2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL i16vec2 unpackInt2x16(int p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga1cd8d2038cdd33a860801aa155a26221\"><div class=\"ttname\"><a href=\"a00298.html#ga1cd8d2038cdd33a860801aa155a26221\">glm::unpackInt4x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL i8vec4 unpackInt4x8(int32 p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00281_html_gabe65c061834f61b4f7cb6037b19006a4\"><div class=\"ttname\"><a href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">glm::vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, defaultp &gt; vec2</div><div class=\"ttdoc\">2 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00208_source.html#l00015\">vector_float2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_gab173834ef14cfc23a96a959f3ff4b8dc\"><div class=\"ttname\"><a href=\"a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc\">glm::unpackUint4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL u16vec4 unpackUint4x16(uint64 p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00304_html_gad06935764d78f43f9d542c784c2212ec\"><div class=\"ttname\"><a href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">glm::i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, defaultp &gt; i8vec2</div><div class=\"ttdoc\">8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00238\">fwd.hpp:238</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_gaf942ff11b65e83eb5f77e68329ebc6ab\"><div class=\"ttname\"><a href=\"a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab\">glm::unpackUint2x32</a></div><div class=\"ttdeci\">GLM_FUNC_DECL u32vec2 unpackUint2x32(uint64 p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga30d6b2f1806315bcd6047131f547d33b\"><div class=\"ttname\"><a href=\"a00298.html#ga30d6b2f1806315bcd6047131f547d33b\">glm::unpackHalf</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, float, Q &gt; unpackHalf(vec&lt; L, uint16, Q &gt; const &amp;p)</div><div class=\"ttdoc\">Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bi...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga1f63c264e7ab63264e2b2a99fd393897\"><div class=\"ttname\"><a href=\"a00298.html#ga1f63c264e7ab63264e2b2a99fd393897\">glm::packUnorm4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint64 packUnorm4x16(vec4 const &amp;v)</div><div class=\"ttdoc\">First, converts each component of the normalized floating-point value v into 16-bit integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><div class=\"ttname\"><a href=\"a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a\">glm::packUnorm</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, uintType, Q &gt; packUnorm(vec&lt; L, floatType, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga2b1fd1e854705b1345e98409e0a25e50\"><div class=\"ttname\"><a href=\"a00298.html#ga2b1fd1e854705b1345e98409e0a25e50\">glm::unpackF2x11_1x10</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 p)</div><div class=\"ttdoc\">First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and ...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga4b2fa60df3460403817d28b082ee0736\"><div class=\"ttname\"><a href=\"a00298.html#ga4b2fa60df3460403817d28b082ee0736\">glm::packUnorm1x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint8 packUnorm1x8(float v)</div><div class=\"ttdoc\">First, converts the normalized floating-point value v into a 8-bit integer value. ...</div></div>\n<div class=\"ttc\" id=\"a00298_html_gaa7600a6c71784b637a410869d2a5adcd\"><div class=\"ttname\"><a href=\"a00298.html#gaa7600a6c71784b637a410869d2a5adcd\">glm::unpackUint2x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL u8vec2 unpackUint2x8(uint16 p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga5156d3060355fe332865da2c7f78815f\"><div class=\"ttname\"><a href=\"a00298.html#ga5156d3060355fe332865da2c7f78815f\">glm::unpackUnorm3x10_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 p)</div><div class=\"ttdoc\">First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga2e50476132fe5f27f08e273d9c70d85b\"><div class=\"ttname\"><a href=\"a00298.html#ga2e50476132fe5f27f08e273d9c70d85b\">glm::unpackUnorm2x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec2 unpackUnorm2x4(uint8 p)</div><div class=\"ttdoc\">Convert a packed integer to a normalized floating-point vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga0466daf4c90f76cc64b3f105ce727295\"><div class=\"ttname\"><a href=\"a00298.html#ga0466daf4c90f76cc64b3f105ce727295\">glm::packRGBM</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt; packRGBM(vec&lt; 3, T, Q &gt; const &amp;rgb)</div><div class=\"ttdoc\">Returns an unsigned integer vector obtained by converting the components of a floating-point vector t...</div></div>\n<div class=\"ttc\" id=\"a00304_html_ga550831bfc26d1e0101c1cb3d79938c06\"><div class=\"ttname\"><a href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">glm::i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, defaultp &gt; i16vec4</div><div class=\"ttdoc\">16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00260\">fwd.hpp:260</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_gaaddf9c353528fe896106f7181219c7f4\"><div class=\"ttname\"><a href=\"a00298.html#gaaddf9c353528fe896106f7181219c7f4\">glm::unpackSnorm4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 p)</div><div class=\"ttdoc\">First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga8a1ee625d2707c60530fb3fca2980b19\"><div class=\"ttname\"><a href=\"a00298.html#ga8a1ee625d2707c60530fb3fca2980b19\">glm::packUnorm3x10_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const &amp;v)</div><div class=\"ttdoc\">First, converts the first three components of the normalized floating-point value v into 10-bit unsig...</div></div>\n<div class=\"ttc\" id=\"a00304_html_ga20779a61de2fd526a17f12fe53ec46b1\"><div class=\"ttname\"><a href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">glm::u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, defaultp &gt; u8vec4</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00342\">fwd.hpp:342</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4177a44206121dabc8c4ff1c0f544574\"><div class=\"ttname\"><a href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">glm::i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, defaultp &gt; i8vec4</div><div class=\"ttdoc\">8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00240\">fwd.hpp:240</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga5abb4603dae0ce58c595e66d9123d812\"><div class=\"ttname\"><a href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">glm::ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, defaultp &gt; ivec4</div><div class=\"ttdoc\">4 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00220_source.html#l00015\">vector_int4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_gab297c0bfd38433524791eb0584d8f08d\"><div class=\"ttname\"><a href=\"a00298.html#gab297c0bfd38433524791eb0584d8f08d\">glm::unpackInt2x32</a></div><div class=\"ttdeci\">GLM_FUNC_DECL i32vec2 unpackInt2x32(int64 p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga7f9abdb50f9be1aa1c14912504a0d98d\"><div class=\"ttname\"><a href=\"a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d\">glm::packUnorm2x3_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint8 packUnorm2x3_1x2(vec3 const &amp;v)</div><div class=\"ttdoc\">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga9f82737bf2a44bedff1d286b76837886\"><div class=\"ttname\"><a href=\"a00298.html#ga9f82737bf2a44bedff1d286b76837886\">glm::packUnorm1x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packUnorm1x16(float v)</div><div class=\"ttdoc\">First, converts the normalized floating-point value v into a 16-bit integer value. </div></div>\n<div class=\"ttc\" id=\"a00281_html_gac215a35481a6597d1bf622a382e9d6e2\"><div class=\"ttname\"><a href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, defaultp &gt; vec4</div><div class=\"ttdoc\">4 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00212_source.html#l00015\">vector_float4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b44026374982dcd1e52d22bac99247e\"><div class=\"ttname\"><a href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">glm::i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, defaultp &gt; i32vec2</div><div class=\"ttdoc\">32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00278\">fwd.hpp:278</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_ga1319207e30874fb4931a9ee913983ee1\"><div class=\"ttname\"><a href=\"a00298.html#ga1319207e30874fb4931a9ee913983ee1\">glm::unpackUnorm1x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL float unpackUnorm1x8(uint8 p)</div><div class=\"ttdoc\">Convert a single 8-bit integer to a normalized floating-point value. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga4851ff86678aa1c7ace9d67846894285\"><div class=\"ttname\"><a href=\"a00298.html#ga4851ff86678aa1c7ace9d67846894285\">glm::unpackSnorm1x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL float unpackSnorm1x8(uint8 p)</div><div class=\"ttdoc\">First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gac37dedaba24b00adb4ec6e8f92c19dbf\"><div class=\"ttname\"><a href=\"a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf\">glm::unpackHalf1x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL float unpackHalf1x16(uint16 v)</div><div class=\"ttdoc\">Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into ...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga52c154a9b232b62c22517a700cc0c78c\"><div class=\"ttname\"><a href=\"a00298.html#ga52c154a9b232b62c22517a700cc0c78c\">glm::unpackInt4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL i16vec4 unpackInt4x16(int64 p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga83d34160a5cb7bcb5339823210fc7501\"><div class=\"ttname\"><a href=\"a00298.html#ga83d34160a5cb7bcb5339823210fc7501\">glm::unpackUnorm1x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL float unpackUnorm1x16(uint16 p)</div><div class=\"ttdoc\">First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga8b128e89be449fc71336968a66bf6e1a\"><div class=\"ttname\"><a href=\"a00298.html#ga8b128e89be449fc71336968a66bf6e1a\">glm::unpackSnorm2x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 p)</div><div class=\"ttdoc\">First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2996630ba7b10535af8e065cf326f761\"><div class=\"ttname\"><a href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">glm::i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, defaultp &gt; i16vec2</div><div class=\"ttdoc\">16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00258\">fwd.hpp:258</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_ga9a05330e5490be0908d3b117d82aff56\"><div class=\"ttname\"><a href=\"a00298.html#ga9a05330e5490be0908d3b117d82aff56\">glm::unpackI3x10_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 p)</div><div class=\"ttdoc\">Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers...</div></div>\n<div class=\"ttc\" id=\"a00298_html_gab22f8bcfdb5fc65af4701b25f143c1af\"><div class=\"ttname\"><a href=\"a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af\">glm::packSnorm1x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packSnorm1x16(float v)</div><div class=\"ttdoc\">First, converts the normalized floating-point value v into 16-bit integer value. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gab9e60ebe3ad3eeced6a9ec6eb876d74e\"><div class=\"ttname\"><a href=\"a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e\">glm::unpackF3x9_E1x5</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec3 unpackF3x9_E1x5(uint32 p)</div><div class=\"ttdoc\">First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and ...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><div class=\"ttname\"><a href=\"a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f\">glm::unpackUnorm</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt; unpackUnorm(vec&lt; L, uintType, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Convert a packed integer to a normalized floating-point vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gaa54b5855a750d6aeb12c1c902f5939b8\"><div class=\"ttname\"><a href=\"a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8\">glm::packSnorm</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, intType, Q &gt; packSnorm(vec&lt; L, floatType, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Convert each component of the normalized floating-point vector into signed integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga768e0337dd6246773f14aa0a421fe9a8\"><div class=\"ttname\"><a href=\"a00298.html#ga768e0337dd6246773f14aa0a421fe9a8\">glm::packUnorm1x5_1x6_1x5</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packUnorm1x5_1x6_1x5(vec3 const &amp;v)</div><div class=\"ttdoc\">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga5ff95ff5bc16f396432ab67243dbae4d\"><div class=\"ttname\"><a href=\"a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d\">glm::unpackUnorm3x5_1x1</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackUnorm3x5_1x1(uint16 p)</div><div class=\"ttdoc\">Convert a packed integer to a normalized floating-point vector. </div></div>\n<div class=\"ttc\" id=\"a00304_html_ga518b8d948a6b4ddb72f84d5c3b7b6611\"><div class=\"ttname\"><a href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, defaultp &gt; u8vec2</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00340\">fwd.hpp:340</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_ga7a4fbf79be9740e3c57737bc2af05e5b\"><div class=\"ttname\"><a href=\"a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b\">glm::unpackSnorm3x10_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 p)</div><div class=\"ttdoc\">First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gab997545661877d2c7362a5084d3897d3\"><div class=\"ttname\"><a href=\"a00298.html#gab997545661877d2c7362a5084d3897d3\">glm::packSnorm3x10_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const &amp;v)</div><div class=\"ttdoc\">First, converts the first three components of the normalized floating-point value v into 10-bit signe...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga1989f093a27ae69cf9207145be48b3d7\"><div class=\"ttname\"><a href=\"a00298.html#ga1989f093a27ae69cf9207145be48b3d7\">glm::packInt4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL int64 packInt4x16(i16vec4 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed integer. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gab3bc08ecfc0f3339be93fb2b3b56d88a\"><div class=\"ttname\"><a href=\"a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a\">glm::unpackUnorm1x5_1x6_1x5</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec3 unpackUnorm1x5_1x6_1x5(uint16 p)</div><div class=\"ttdoc\">Convert a packed integer to a normalized floating-point vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga3f648fc205467792dc6d8c59c748f8a6\"><div class=\"ttname\"><a href=\"a00298.html#ga3f648fc205467792dc6d8c59c748f8a6\">glm::packF3x9_E1x5</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint32 packF3x9_E1x5(vec3 const &amp;v)</div><div class=\"ttdoc\">First, converts the first two components of the normalized floating-point value v into 11-bit signles...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga9a666b1c688ab54100061ed06526de6e\"><div class=\"ttname\"><a href=\"a00298.html#ga9a666b1c688ab54100061ed06526de6e\">glm::packUnorm2x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packUnorm2x8(vec2 const &amp;v)</div><div class=\"ttdoc\">First, converts each component of the normalized floating-point value v into 8-bit integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga2ceb62cca347d8ace42ee90317a3f1f9\"><div class=\"ttname\"><a href=\"a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9\">glm::packUint4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint64 packUint4x16(u16vec4 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed unsigned integer. </div></div>\n<div class=\"ttc\" id=\"a00281_html_ga9c3019b13faf179e4ad3626ea66df334\"><div class=\"ttname\"><a href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">glm::vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, defaultp &gt; vec3</div><div class=\"ttdoc\">3 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00210_source.html#l00015\">vector_float3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_gaec4112086d7fb133bea104a7c237de52\"><div class=\"ttname\"><a href=\"a00298.html#gaec4112086d7fb133bea104a7c237de52\">glm::packUnorm3x5_1x1</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packUnorm3x5_1x1(vec4 const &amp;v)</div><div class=\"ttdoc\">Convert each component of the normalized floating-point vector into unsigned integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga637cbe3913dd95c6e7b4c99c61bd611f\"><div class=\"ttname\"><a href=\"a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f\">glm::unpackUnorm2x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 p)</div><div class=\"ttdoc\">First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga035bbbeab7ec2b28c0529757395b645b\"><div class=\"ttname\"><a href=\"a00298.html#ga035bbbeab7ec2b28c0529757395b645b\">glm::unpackUint2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL u16vec2 unpackUint2x16(uint p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga5eecc9e8cbaf51ac6cf57501e670ee19\"><div class=\"ttname\"><a href=\"a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19\">glm::packUint2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint packUint2x16(u16vec2 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed unsigned integer. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga358943934d21da947d5bcc88c2ab7832\"><div class=\"ttname\"><a href=\"a00298.html#ga358943934d21da947d5bcc88c2ab7832\">glm::packSnorm4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint64 packSnorm4x16(vec4 const &amp;v)</div><div class=\"ttdoc\">First, converts each component of the normalized floating-point value v into 16-bit integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_gaa864081097b86e83d8e4a4d79c382b22\"><div class=\"ttname\"><a href=\"a00298.html#gaa864081097b86e83d8e4a4d79c382b22\">glm::packUint2x32</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint64 packUint2x32(u32vec2 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed unsigned integer. </div></div>\n<div class=\"ttc\" id=\"a00281_html_gaa57e96bb337867329d5f43bcc27c1095\"><div class=\"ttname\"><a href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">glm::uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, defaultp &gt; uvec4</div><div class=\"ttdoc\">4 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00232_source.html#l00015\">vector_uint4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_ga57dfc41b2eb20b0ac00efae7d9c49dcd\"><div class=\"ttname\"><a href=\"a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd\">glm::unpackHalf4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackHalf4x16(uint64 p)</div><div class=\"ttdoc\">Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigne...</div></div>\n<div class=\"ttc\" id=\"a00263_html_gab630f76c26b50298187f7889104d4b9c\"><div class=\"ttname\"><a href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">glm::uint64</a></div><div class=\"ttdeci\">detail::uint64 uint64</div><div class=\"ttdoc\">64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00151_source.html#l00067\">scalar_uint_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_gac58ee89d0e224bb6df5e8bbb18843a2d\"><div class=\"ttname\"><a href=\"a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d\">glm::unpackUnorm4x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackUnorm4x4(uint16 p)</div><div class=\"ttdoc\">Convert a packed integer to a normalized floating-point vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gafe2f7b39caf8f5ec555e1c059ec530e6\"><div class=\"ttname\"><a href=\"a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6\">glm::packHalf4x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint64 packHalf4x16(vec4 const &amp;v)</div><div class=\"ttdoc\">Returns an unsigned integer obtained by converting the components of a four-component floating-point ...</div></div>\n<div class=\"ttc\" id=\"a00174_html\"><div class=\"ttname\"><a href=\"a00174.html\">type_precision.hpp</a></div><div class=\"ttdoc\">GLM_GTC_type_precision </div></div>\n<div class=\"ttc\" id=\"a00298_html_gab0c59f1e259fca9e68adb2207a6b665e\"><div class=\"ttname\"><a href=\"a00298.html#gab0c59f1e259fca9e68adb2207a6b665e\">glm::unpackInt2x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL i8vec2 unpackInt2x8(int16 p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00260_html_gaff5189f97f9e842d9636a0f240001b2e\"><div class=\"ttname\"><a href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">glm::int64</a></div><div class=\"ttdeci\">detail::int64 int64</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00146_source.html#l00067\">scalar_int_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_ga6abd5a9014df3b5ce4059008d2491260\"><div class=\"ttname\"><a href=\"a00298.html#ga6abd5a9014df3b5ce4059008d2491260\">glm::unpackUnorm2x3_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec3 unpackUnorm2x3_1x2(uint8 p)</div><div class=\"ttdoc\">Convert a packed integer to a normalized floating-point vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga4944ad465ff950e926d49621f916c78d\"><div class=\"ttname\"><a href=\"a00298.html#ga4944ad465ff950e926d49621f916c78d\">glm::packF2x11_1x10</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const &amp;v)</div><div class=\"ttdoc\">First, converts the first two components of the normalized floating-point value v into 11-bit signles...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga48df3042a7d079767f5891a1bfd8a60a\"><div class=\"ttname\"><a href=\"a00298.html#ga48df3042a7d079767f5891a1bfd8a60a\">glm::unpackU3x10_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 p)</div><div class=\"ttdoc\">Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga43f2093b6ff192a79058ff7834fc3528\"><div class=\"ttname\"><a href=\"a00298.html#ga43f2093b6ff192a79058ff7834fc3528\">glm::packHalf1x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packHalf1x16(float v)</div><div class=\"ttdoc\">Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 1...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga6d49b31e5c3f9df8e1f99ab62b999482\"><div class=\"ttname\"><a href=\"a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482\">glm::unpackSnorm</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt; unpackSnorm(vec&lt; L, intType, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Convert a packed integer to a normalized floating-point vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga5c1ec97894b05ea21a05aea4f0204a02\"><div class=\"ttname\"><a href=\"a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02\">glm::unpackRGBM</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; unpackRGBM(vec&lt; 4, T, Q &gt; const &amp;rgbm)</div><div class=\"ttdoc\">Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bi...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga6be3cfb2cce3702f03e91bbeb5286d7e\"><div class=\"ttname\"><a href=\"a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e\">glm::packSnorm2x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint16 packSnorm2x8(vec2 const &amp;v)</div><div class=\"ttdoc\">First, converts each component of the normalized floating-point value v into 8-bit integer values...</div></div>\n<div class=\"ttc\" id=\"a00298_html_gae3592e0795e62aaa1865b3a10496a7a1\"><div class=\"ttname\"><a href=\"a00298.html#gae3592e0795e62aaa1865b3a10496a7a1\">glm::packSnorm1x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint8 packSnorm1x8(float s)</div><div class=\"ttdoc\">First, converts the normalized floating-point value v into 8-bit integer value. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gaf6dc0e4341810a641c7ed08f10e335d1\"><div class=\"ttname\"><a href=\"a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1\">glm::unpackUint4x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL u8vec4 unpackUint4x8(uint32 p)</div><div class=\"ttdoc\">Convert a packed integer into an integer vector. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga06ecb6afb902dba45419008171db9023\"><div class=\"ttname\"><a href=\"a00298.html#ga06ecb6afb902dba45419008171db9023\">glm::packI3x10_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const &amp;v)</div><div class=\"ttdoc\">Returns an unsigned integer obtained by converting the components of a four-component signed integer ...</div></div>\n<div class=\"ttc\" id=\"a00298_html_ga8884b1f2292414f36d59ef3be5d62914\"><div class=\"ttname\"><a href=\"a00298.html#ga8884b1f2292414f36d59ef3be5d62914\">glm::packInt2x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL int16 packInt2x8(i8vec2 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed integer. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gad1e4c8a9e67d86b61a6eec86703a827a\"><div class=\"ttname\"><a href=\"a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a\">glm::packInt2x32</a></div><div class=\"ttdeci\">GLM_FUNC_DECL int64 packInt2x32(i32vec2 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed integer. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gaa0fe2f09aeb403cd66c1a062f58861ab\"><div class=\"ttname\"><a href=\"a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab\">glm::packUint4x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint32 packUint4x8(u8vec4 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed unsigned integer. </div></div>\n<div class=\"ttc\" id=\"a00298_html_gada3d88d59f0f458f9c51a9fd359a4bc0\"><div class=\"ttname\"><a href=\"a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0\">glm::packU3x10_1x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const &amp;v)</div><div class=\"ttdoc\">Returns an unsigned integer obtained by converting the components of a four-component unsigned intege...</div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a266e46ee218d0c680f12b35c500cc0\"><div class=\"ttname\"><a href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, defaultp &gt; u32vec2</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00380\">fwd.hpp:380</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_ga3644163cf3a47bf1d4af1f4b03013a7e\"><div class=\"ttname\"><a href=\"a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e\">glm::packInt2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL int packInt2x16(i16vec2 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed integer. </div></div>\n<div class=\"ttc\" id=\"a00298_html_ga2d8bbce673ebc04831c1fb05c47f5251\"><div class=\"ttname\"><a href=\"a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251\">glm::packHalf</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, uint16, Q &gt; packHalf(vec&lt; L, float, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns an unsigned integer vector obtained by converting the components of a floating-point vector t...</div></div>\n<div class=\"ttc\" id=\"a00304_html_ga529496d75775fb656a07993ea9af2450\"><div class=\"ttname\"><a href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">glm::u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, defaultp &gt; u16vec4</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00362\">fwd.hpp:362</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_gaf2238401d5ce2aaade1a44ba19709072\"><div class=\"ttname\"><a href=\"a00298.html#gaf2238401d5ce2aaade1a44ba19709072\">glm::packInt4x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL int32 packInt4x8(i8vec4 const &amp;v)</div><div class=\"ttdoc\">Convert each component from an integer vector into a packed integer. </div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a78447eb9d66a114b193f4a25899c16\"><div class=\"ttname\"><a href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, defaultp &gt; u16vec2</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00360\">fwd.hpp:360</a></div></div>\n<div class=\"ttc\" id=\"a00298_html_ga96dd15002370627a443c835ab03a766c\"><div class=\"ttname\"><a href=\"a00298.html#ga96dd15002370627a443c835ab03a766c\">glm::unpackSnorm1x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL float unpackSnorm1x16(uint16 p)</div><div class=\"ttdoc\">First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00120.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: packing.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">packing.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00120_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaa916ca426b2bb0343ba17e3753e245c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#gaa916ca426b2bb0343ba17e3753e245c2\">packDouble2x32</a> (uvec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa916ca426b2bb0343ba17e3753e245c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a double-qualifier value obtained by packing the components of v into a 64-bit value.  <a href=\"a00372.html#gaa916ca426b2bb0343ba17e3753e245c2\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa916ca426b2bb0343ba17e3753e245c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20f134b07db3a3d3a38efb2617388c92\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga20f134b07db3a3d3a38efb2617388c92\">packHalf2x16</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga20f134b07db3a3d3a38efb2617388c92\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a two-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these two 16- bit integers into a 32-bit unsigned integer.  <a href=\"a00372.html#ga20f134b07db3a3d3a38efb2617388c92\">More...</a><br /></td></tr>\n<tr class=\"separator:ga20f134b07db3a3d3a38efb2617388c92\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga977ab172da5494e5ac63e952afacfbe2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga977ab172da5494e5ac63e952afacfbe2\">packSnorm2x16</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga977ab172da5494e5ac63e952afacfbe2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.  <a href=\"a00372.html#ga977ab172da5494e5ac63e952afacfbe2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga977ab172da5494e5ac63e952afacfbe2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85e8f17627516445026ab7a9c2e3531a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga85e8f17627516445026ab7a9c2e3531a\">packSnorm4x8</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga85e8f17627516445026ab7a9c2e3531a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.  <a href=\"a00372.html#ga85e8f17627516445026ab7a9c2e3531a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85e8f17627516445026ab7a9c2e3531a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0e2d107039fe608a209497af867b85fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga0e2d107039fe608a209497af867b85fb\">packUnorm2x16</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga0e2d107039fe608a209497af867b85fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.  <a href=\"a00372.html#ga0e2d107039fe608a209497af867b85fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0e2d107039fe608a209497af867b85fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf7d2f7341a9eeb4a436929d6f9ad08f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2\">packUnorm4x8</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf7d2f7341a9eeb4a436929d6f9ad08f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.  <a href=\"a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf7d2f7341a9eeb4a436929d6f9ad08f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f4296dc5f12f0aa67ac05b8bb322483\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483\">unpackDouble2x32</a> (double v)</td></tr>\n<tr class=\"memdesc:ga5f4296dc5f12f0aa67ac05b8bb322483\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a two-component unsigned integer vector representation of v.  <a href=\"a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5f4296dc5f12f0aa67ac05b8bb322483\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf59b52e6b28da9335322c4ae19b5d745\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#gaf59b52e6b28da9335322c4ae19b5d745\">unpackHalf2x16</a> (uint v)</td></tr>\n<tr class=\"memdesc:gaf59b52e6b28da9335322c4ae19b5d745\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values.  <a href=\"a00372.html#gaf59b52e6b28da9335322c4ae19b5d745\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf59b52e6b28da9335322c4ae19b5d745\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd8f8971a3fe28418be0d0fa1f786b38\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38\">unpackSnorm2x16</a> (uint p)</td></tr>\n<tr class=\"memdesc:gacd8f8971a3fe28418be0d0fa1f786b38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.  <a href=\"a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd8f8971a3fe28418be0d0fa1f786b38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2db488646d48b7c43d3218954523fe82\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga2db488646d48b7c43d3218954523fe82\">unpackSnorm4x8</a> (uint p)</td></tr>\n<tr class=\"memdesc:ga2db488646d48b7c43d3218954523fe82\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.  <a href=\"a00372.html#ga2db488646d48b7c43d3218954523fe82\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2db488646d48b7c43d3218954523fe82\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f66188e5d65afeb9ffba1ad971e4007\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007\">unpackUnorm2x16</a> (uint p)</td></tr>\n<tr class=\"memdesc:ga1f66188e5d65afeb9ffba1ad971e4007\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.  <a href=\"a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f66188e5d65afeb9ffba1ad971e4007\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f903259150b67e9466f5f8edffcd197\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga7f903259150b67e9466f5f8edffcd197\">unpackUnorm4x8</a> (uint p)</td></tr>\n<tr class=\"memdesc:ga7f903259150b67e9466f5f8edffcd197\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.  <a href=\"a00372.html#ga7f903259150b67e9466f5f8edffcd197\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f903259150b67e9466f5f8edffcd197\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00120_source.html\">packing.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00120_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: packing.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">packing.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00120.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00228.html\">./ext/vector_uint2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00208.html\">./ext/vector_float2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00212.html\">./ext/vector_float4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00372.html#ga0e2d107039fe608a209497af867b85fb\">packUnorm2x16</a>(<a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00372.html#ga977ab172da5494e5ac63e952afacfbe2\">packSnorm2x16</a>(<a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2\">packUnorm4x8</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00372.html#ga85e8f17627516445026ab7a9c2e3531a\">packSnorm4x8</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <a class=\"code\" href=\"a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007\">unpackUnorm2x16</a>(uint p);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <a class=\"code\" href=\"a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38\">unpackSnorm2x16</a>(uint p);</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00372.html#ga7f903259150b67e9466f5f8edffcd197\">unpackUnorm4x8</a>(uint p);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> <a class=\"code\" href=\"a00372.html#ga2db488646d48b7c43d3218954523fe82\">unpackSnorm4x8</a>(uint p);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"a00372.html#gaa916ca426b2bb0343ba17e3753e245c2\">packDouble2x32</a>(<a class=\"code\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a> <a class=\"code\" href=\"a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483\">unpackDouble2x32</a>(<span class=\"keywordtype\">double</span> v);</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_FUNC_DECL uint <a class=\"code\" href=\"a00372.html#ga20f134b07db3a3d3a38efb2617388c92\">packHalf2x16</a>(<a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> <a class=\"code\" href=\"a00372.html#gaf59b52e6b28da9335322c4ae19b5d745\">unpackHalf2x16</a>(uint v);</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;<span class=\"preprocessor\">#include &quot;detail/func_packing.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00372_html_ga1f66188e5d65afeb9ffba1ad971e4007\"><div class=\"ttname\"><a href=\"a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007\">glm::unpackUnorm2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec2 unpackUnorm2x16(uint p)</div><div class=\"ttdoc\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00281_html_gabe65c061834f61b4f7cb6037b19006a4\"><div class=\"ttname\"><a href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">glm::vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, defaultp &gt; vec2</div><div class=\"ttdoc\">2 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00208_source.html#l00015\">vector_float2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00372_html_ga977ab172da5494e5ac63e952afacfbe2\"><div class=\"ttname\"><a href=\"a00372.html#ga977ab172da5494e5ac63e952afacfbe2\">glm::packSnorm2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint packSnorm2x16(vec2 const &amp;v)</div><div class=\"ttdoc\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...</div></div>\n<div class=\"ttc\" id=\"a00372_html_ga85e8f17627516445026ab7a9c2e3531a\"><div class=\"ttname\"><a href=\"a00372.html#ga85e8f17627516445026ab7a9c2e3531a\">glm::packSnorm4x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint packSnorm4x8(vec4 const &amp;v)</div><div class=\"ttdoc\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...</div></div>\n<div class=\"ttc\" id=\"a00372_html_ga0e2d107039fe608a209497af867b85fb\"><div class=\"ttname\"><a href=\"a00372.html#ga0e2d107039fe608a209497af867b85fb\">glm::packUnorm2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint packUnorm2x16(vec2 const &amp;v)</div><div class=\"ttdoc\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...</div></div>\n<div class=\"ttc\" id=\"a00372_html_ga5f4296dc5f12f0aa67ac05b8bb322483\"><div class=\"ttname\"><a href=\"a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483\">glm::unpackDouble2x32</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uvec2 unpackDouble2x32(double v)</div><div class=\"ttdoc\">Returns a two-component unsigned integer vector representation of v. </div></div>\n<div class=\"ttc\" id=\"a00281_html_gac215a35481a6597d1bf622a382e9d6e2\"><div class=\"ttname\"><a href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, defaultp &gt; vec4</div><div class=\"ttdoc\">4 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00212_source.html#l00015\">vector_float4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00372_html_gacd8f8971a3fe28418be0d0fa1f786b38\"><div class=\"ttname\"><a href=\"a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38\">glm::unpackSnorm2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec2 unpackSnorm2x16(uint p)</div><div class=\"ttdoc\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00281_html_ga2f6d9ec3ae14813ade37d6aee3715fdb\"><div class=\"ttname\"><a href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">glm::uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, defaultp &gt; uvec2</div><div class=\"ttdoc\">2 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00228_source.html#l00015\">vector_uint2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00372_html_gaf59b52e6b28da9335322c4ae19b5d745\"><div class=\"ttname\"><a href=\"a00372.html#gaf59b52e6b28da9335322c4ae19b5d745\">glm::unpackHalf2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec2 unpackHalf2x16(uint v)</div><div class=\"ttdoc\">Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned...</div></div>\n<div class=\"ttc\" id=\"a00212_html\"><div class=\"ttname\"><a href=\"a00212.html\">vector_float4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00372_html_gaf7d2f7341a9eeb4a436929d6f9ad08f2\"><div class=\"ttname\"><a href=\"a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2\">glm::packUnorm4x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint packUnorm4x8(vec4 const &amp;v)</div><div class=\"ttdoc\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer val...</div></div>\n<div class=\"ttc\" id=\"a00372_html_ga2db488646d48b7c43d3218954523fe82\"><div class=\"ttname\"><a href=\"a00372.html#ga2db488646d48b7c43d3218954523fe82\">glm::unpackSnorm4x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackSnorm4x8(uint p)</div><div class=\"ttdoc\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00372_html_gaa916ca426b2bb0343ba17e3753e245c2\"><div class=\"ttname\"><a href=\"a00372.html#gaa916ca426b2bb0343ba17e3753e245c2\">glm::packDouble2x32</a></div><div class=\"ttdeci\">GLM_FUNC_DECL double packDouble2x32(uvec2 const &amp;v)</div><div class=\"ttdoc\">Returns a double-qualifier value obtained by packing the components of v into a 64-bit value...</div></div>\n<div class=\"ttc\" id=\"a00372_html_ga20f134b07db3a3d3a38efb2617388c92\"><div class=\"ttname\"><a href=\"a00372.html#ga20f134b07db3a3d3a38efb2617388c92\">glm::packHalf2x16</a></div><div class=\"ttdeci\">GLM_FUNC_DECL uint packHalf2x16(vec2 const &amp;v)</div><div class=\"ttdoc\">Returns an unsigned integer obtained by converting the components of a two-component floating-point v...</div></div>\n<div class=\"ttc\" id=\"a00208_html\"><div class=\"ttname\"><a href=\"a00208.html\">vector_float2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00372_html_ga7f903259150b67e9466f5f8edffcd197\"><div class=\"ttname\"><a href=\"a00372.html#ga7f903259150b67e9466f5f8edffcd197\">glm::unpackUnorm4x8</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec4 unpackUnorm4x8(uint p)</div><div class=\"ttdoc\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </div></div>\n<div class=\"ttc\" id=\"a00228_html\"><div class=\"ttname\"><a href=\"a00228.html\">vector_uint2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00121.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: perpendicular.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">perpendicular.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00349.html\">GLM_GTX_perpendicular</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00121_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga264cfc4e180cf9b852e943b35089003c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga264cfc4e180cf9b852e943b35089003c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00349.html#ga264cfc4e180cf9b852e943b35089003c\">perp</a> (genType const &amp;x, genType const &amp;Normal)</td></tr>\n<tr class=\"memdesc:ga264cfc4e180cf9b852e943b35089003c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Projects x a perpendicular axis of Normal.  <a href=\"a00349.html#ga264cfc4e180cf9b852e943b35089003c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga264cfc4e180cf9b852e943b35089003c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00349.html\">GLM_GTX_perpendicular</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00351.html\" title=\"Include <glm/gtx/projection.hpp> to use the features of this extension. \">GLM_GTX_projection</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00121_source.html\">perpendicular.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00121_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: perpendicular.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">perpendicular.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00121.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/projection.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_perpendicular is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_perpendicular extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00349.html#ga264cfc4e180cf9b852e943b35089003c\">perp</a>(genType <span class=\"keyword\">const</span>&amp; x, genType <span class=\"keyword\">const</span>&amp; Normal);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#include &quot;perpendicular.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00349_html_ga264cfc4e180cf9b852e943b35089003c\"><div class=\"ttname\"><a href=\"a00349.html#ga264cfc4e180cf9b852e943b35089003c\">glm::perp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType perp(genType const &amp;x, genType const &amp;Normal)</div><div class=\"ttdoc\">Projects x a perpendicular axis of Normal. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00122.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: polar_coordinates.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">polar_coordinates.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00350.html\">GLM_GTX_polar_coordinates</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00122_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1821d5b3324201e60a9e2823d0b5d0c8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1821d5b3324201e60a9e2823d0b5d0c8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8\">euclidean</a> (vec&lt; 2, T, Q &gt; const &amp;polar)</td></tr>\n<tr class=\"memdesc:ga1821d5b3324201e60a9e2823d0b5d0c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert Polar to Euclidean coordinates.  <a href=\"a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1821d5b3324201e60a9e2823d0b5d0c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab83ac2c0e55b684b06b6c46c28b1590d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab83ac2c0e55b684b06b6c46c28b1590d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d\">polar</a> (vec&lt; 3, T, Q &gt; const &amp;euclidean)</td></tr>\n<tr class=\"memdesc:gab83ac2c0e55b684b06b6c46c28b1590d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude.  <a href=\"a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d\">More...</a><br /></td></tr>\n<tr class=\"separator:gab83ac2c0e55b684b06b6c46c28b1590d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00350.html\">GLM_GTX_polar_coordinates</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00122_source.html\">polar_coordinates.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00122_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: polar_coordinates.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">polar_coordinates.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00122.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_polar_coordinates is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_polar_coordinates extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d\">polar</a>(</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8\">euclidean</a>);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8\">euclidean</a>(</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d\">polar</a>);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">#include &quot;polar_coordinates.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00350_html_gab83ac2c0e55b684b06b6c46c28b1590d\"><div class=\"ttname\"><a href=\"a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d\">glm::polar</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; polar(vec&lt; 3, T, Q &gt; const &amp;euclidean)</div><div class=\"ttdoc\">Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude...</div></div>\n<div class=\"ttc\" id=\"a00350_html_ga1821d5b3324201e60a9e2823d0b5d0c8\"><div class=\"ttname\"><a href=\"a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8\">glm::euclidean</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; euclidean(vec&lt; 2, T, Q &gt; const &amp;polar)</div><div class=\"ttdoc\">Convert Polar to Euclidean coordinates. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00123.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: projection.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">projection.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00351.html\">GLM_GTX_projection</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00123_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga58384b7170801dd513de46f87c7fb00e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga58384b7170801dd513de46f87c7fb00e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a> (genType const &amp;x, genType const &amp;Normal)</td></tr>\n<tr class=\"memdesc:ga58384b7170801dd513de46f87c7fb00e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Projects x on Normal.  <a href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58384b7170801dd513de46f87c7fb00e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00351.html\">GLM_GTX_projection</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00123_source.html\">projection.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00123_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: projection.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">projection.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00123.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_projection is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_projection extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a>(genType <span class=\"keyword\">const</span>&amp; x, genType <span class=\"keyword\">const</span>&amp; Normal);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#include &quot;projection.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00351_html_ga58384b7170801dd513de46f87c7fb00e\"><div class=\"ttname\"><a href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">glm::proj</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType proj(genType const &amp;x, genType const &amp;Normal)</div><div class=\"ttdoc\">Projects x on Normal. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00124_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: qualifier.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">qualifier.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#include &quot;setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;</div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;        <span class=\"keyword\">enum</span> qualifier</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;                packed_highp, </div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;                packed_mediump, </div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;                packed_lowp, </div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;                        aligned_highp, </div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                        aligned_mediump, </div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                        aligned_lowp, <span class=\"comment\">// ///&lt; Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs to maximize performance</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                        aligned = aligned_highp, </div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;                highp = packed_highp, </div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                mediump = packed_mediump, </div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                lowp = packed_lowp, </div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;                packed = packed_highp, </div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE &amp;&amp; defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;                        defaultp = aligned_highp</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                        defaultp = highp</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">typedef</span> qualifier precision;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">struct </span>vec;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">struct </span>mat;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">struct </span>qua;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#       if GLM_HAS_TEMPLATE_ALIASES</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tvec1 = vec&lt;1, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tvec2 = vec&lt;2, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tvec3 = vec&lt;3, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tvec4 = vec&lt;4, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat2x2 = mat&lt;2, 2, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat2x3 = mat&lt;2, 3, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat2x4 = mat&lt;2, 4, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat3x2 = mat&lt;3, 2, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat3x3 = mat&lt;3, 3, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat3x4 = mat&lt;3, 4, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat4x2 = mat&lt;4, 2, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat4x3 = mat&lt;4, 3, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tmat4x4 = mat&lt;4, 4, T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q = defaultp&gt; <span class=\"keyword\">using</span> tquat = qua&lt;T, Q&gt;;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;glm::qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keyword\">struct </span>is_aligned</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> value = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"preprocessor\">#       if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                <span class=\"keyword\">struct </span>is_aligned&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::aligned_lowp&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                        <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> value = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                <span class=\"keyword\">struct </span>is_aligned&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::aligned_mediump&gt;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                        <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> value = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                <span class=\"keyword\">struct </span>is_aligned&lt;<a class=\"code\" href=\"a00236.html\">glm</a>::aligned_highp&gt;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                        <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> <span class=\"keywordtype\">bool</span> value = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, <span class=\"keywordtype\">bool</span> is_aligned&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        <span class=\"keyword\">struct </span>storage</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keyword\">struct </span>type {</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                        T data[L];</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                } type;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\">#       if GLM_HAS_ALIGNOF</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                <span class=\"keyword\">struct </span>storage&lt;L, T, true&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                        <span class=\"keyword\">typedef</span> <span class=\"keyword\">struct </span><span class=\"keyword\">alignas</span>(L * sizeof(T)) type {</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                                T data[L];</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                        } type;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                <span class=\"keyword\">struct </span>storage&lt;3, T, true&gt;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                        <span class=\"keyword\">typedef</span> <span class=\"keyword\">struct </span><span class=\"keyword\">alignas</span>(4 * sizeof(T)) type {</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                                T data[4];</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                        } type;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                };</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"preprocessor\">#       if GLM_ARCH &amp; GLM_ARCH_SSE2_BIT</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, float, true&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                <span class=\"keyword\">typedef</span> glm_f32vec4 type;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, int, true&gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                <span class=\"keyword\">typedef</span> glm_i32vec4 type;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, unsigned int, true&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                <span class=\"keyword\">typedef</span> glm_u32vec4 type;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;2, double, true&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                <span class=\"keyword\">typedef</span> glm_f64vec2 type;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;2, detail::<a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>, true&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;                <span class=\"keyword\">typedef</span> glm_i64vec2 type;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;2, detail::<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>, true&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;                <span class=\"keyword\">typedef</span> glm_u64vec2 type;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;<span class=\"preprocessor\">#       if (GLM_ARCH &amp; GLM_ARCH_AVX_BIT)</span></div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, double, true&gt;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;                <span class=\"keyword\">typedef</span> glm_f64vec4 type;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;<span class=\"preprocessor\">#       if (GLM_ARCH &amp; GLM_ARCH_AVX2_BIT)</span></div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, detail::<a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>, true&gt;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;                <span class=\"keyword\">typedef</span> glm_i64vec4 type;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, detail::<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>, true&gt;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;                <span class=\"keyword\">typedef</span> glm_u64vec4 type;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"preprocessor\">#       if GLM_ARCH &amp; GLM_ARCH_NEON_BIT</span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, float, true&gt;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;                <span class=\"keyword\">typedef</span> glm_f32vec4 type;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, int, true&gt;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;                <span class=\"keyword\">typedef</span> glm_i32vec4 type;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;        <span class=\"keyword\">struct </span>storage&lt;4, unsigned int, true&gt;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;                <span class=\"keyword\">typedef</span> glm_u32vec4 type;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        <span class=\"keyword\">enum</span> genTypeEnum</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;                GENTYPE_VEC,</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;                GENTYPE_MAT,</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;                GENTYPE_QUAT</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        <span class=\"keyword\">struct </span>genTypeTrait</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;        {};</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;        <span class=\"keyword\">template</span> &lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;        <span class=\"keyword\">struct </span>genTypeTrait&lt;mat&lt;C, R, T&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keyword\">const</span> genTypeEnum GENTYPE = GENTYPE_MAT;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType, genTypeEnum type&gt;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;        <span class=\"keyword\">struct </span>init_gentype</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;        <span class=\"keyword\">struct </span>init_gentype&lt;genType, GENTYPE_QUAT&gt;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> genType <a class=\"code\" href=\"a00247.html#ga81696f2b8d1db02ea1aff8da8f269314\">identity</a>()</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;                        <span class=\"keywordflow\">return</span> genType(1, 0, 0, 0);</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;        <span class=\"keyword\">struct </span>init_gentype&lt;genType, GENTYPE_MAT&gt;</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;                GLM_FUNC_QUALIFIER GLM_CONSTEXPR <span class=\"keyword\">static</span> genType <a class=\"code\" href=\"a00247.html#ga81696f2b8d1db02ea1aff8da8f269314\">identity</a>()</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;                        <span class=\"keywordflow\">return</span> genType(1);</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00247_html_ga81696f2b8d1db02ea1aff8da8f269314\"><div class=\"ttname\"><a href=\"a00247.html#ga81696f2b8d1db02ea1aff8da8f269314\">glm::identity</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType identity()</div><div class=\"ttdoc\">Builds an identity matrix. </div></div>\n<div class=\"ttc\" id=\"a00263_html_gab630f76c26b50298187f7889104d4b9c\"><div class=\"ttname\"><a href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">glm::uint64</a></div><div class=\"ttdeci\">detail::uint64 uint64</div><div class=\"ttdoc\">64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00151_source.html#l00067\">scalar_uint_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00260_html_gaff5189f97f9e842d9636a0f240001b2e\"><div class=\"ttname\"><a href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">glm::int64</a></div><div class=\"ttdeci\">detail::int64 int64</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00146_source.html#l00067\">scalar_int_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00125.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/quaternion.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00299.html\">GLM_GTC_quaternion</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00125_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf4dd967dead22dd932fc7460ceecb03f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf4dd967dead22dd932fc7460ceecb03f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gaf4dd967dead22dd932fc7460ceecb03f\">eulerAngles</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf4dd967dead22dd932fc7460ceecb03f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns euler angles, pitch as x, yaw as y, roll as z.  <a href=\"a00299.html#gaf4dd967dead22dd932fc7460ceecb03f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4dd967dead22dd932fc7460ceecb03f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f7fa76e06c417b757ddfd438f3f677b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8f7fa76e06c417b757ddfd438f3f677b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b\">greaterThan</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga8f7fa76e06c417b757ddfd438f3f677b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &gt; y.  <a href=\"a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f7fa76e06c417b757ddfd438f3f677b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga388cbeba987dae7b5937f742efa49a5a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga388cbeba987dae7b5937f742efa49a5a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga388cbeba987dae7b5937f742efa49a5a\">greaterThanEqual</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga388cbeba987dae7b5937f742efa49a5a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &gt;= y.  <a href=\"a00299.html#ga388cbeba987dae7b5937f742efa49a5a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga388cbeba987dae7b5937f742efa49a5a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad091a2d22c8acfebfa92bcfca1dfe9c4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad091a2d22c8acfebfa92bcfca1dfe9c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4\">lessThan</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gad091a2d22c8acfebfa92bcfca1dfe9c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison result of x &lt; y.  <a href=\"a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4\">More...</a><br /></td></tr>\n<tr class=\"separator:gad091a2d22c8acfebfa92bcfca1dfe9c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac00012eea281800d2403f4ea8443134d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac00012eea281800d2403f4ea8443134d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gac00012eea281800d2403f4ea8443134d\">lessThanEqual</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gac00012eea281800d2403f4ea8443134d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &lt;= y.  <a href=\"a00299.html#gac00012eea281800d2403f4ea8443134d\">More...</a><br /></td></tr>\n<tr class=\"separator:gac00012eea281800d2403f4ea8443134d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga333ab70047fbe4132406100c292dbc89\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga333ab70047fbe4132406100c292dbc89\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">mat3_cast</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga333ab70047fbe4132406100c292dbc89\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 3 * 3 matrix.  <a href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">More...</a><br /></td></tr>\n<tr class=\"separator:ga333ab70047fbe4132406100c292dbc89\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1113212d9bdefc2e31ad40e5bbb506f3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1113212d9bdefc2e31ad40e5bbb506f3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">mat4_cast</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1113212d9bdefc2e31ad40e5bbb506f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 4 * 4 matrix.  <a href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1113212d9bdefc2e31ad40e5bbb506f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7603e81477b46ddb448896909bc04928\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7603e81477b46ddb448896909bc04928\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">pitch</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga7603e81477b46ddb448896909bc04928\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns pitch value of euler angles expressed in radians.  <a href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7603e81477b46ddb448896909bc04928\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1108a4ab88ca87bac321454eea7702f8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1108a4ab88ca87bac321454eea7702f8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">quat_cast</a> (mat&lt; 3, 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1108a4ab88ca87bac321454eea7702f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a pure rotation 3 * 3 matrix to a quaternion.  <a href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1108a4ab88ca87bac321454eea7702f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4524810f07f72e8c7bdc7764fa11cb58\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4524810f07f72e8c7bdc7764fa11cb58\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58\">quat_cast</a> (mat&lt; 4, 4, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga4524810f07f72e8c7bdc7764fa11cb58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a pure rotation 4 * 4 matrix to a quaternion.  <a href=\"a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4524810f07f72e8c7bdc7764fa11cb58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabe7fc5ec5feb41ab234d5d2b6254697f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabe7fc5ec5feb41ab234d5d2b6254697f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f\">quatLookAt</a> (vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gabe7fc5ec5feb41ab234d5d2b6254697f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a look at quaternion based on the default handedness.  <a href=\"a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f\">More...</a><br /></td></tr>\n<tr class=\"separator:gabe7fc5ec5feb41ab234d5d2b6254697f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2da350c73411be3bb19441b226b81a74\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2da350c73411be3bb19441b226b81a74\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga2da350c73411be3bb19441b226b81a74\">quatLookAtLH</a> (vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:ga2da350c73411be3bb19441b226b81a74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a left-handed look at quaternion.  <a href=\"a00299.html#ga2da350c73411be3bb19441b226b81a74\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2da350c73411be3bb19441b226b81a74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6529ac8c04a57fcc35865b5c9437cc8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf6529ac8c04a57fcc35865b5c9437cc8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8\">quatLookAtRH</a> (vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gaf6529ac8c04a57fcc35865b5c9437cc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a right-handed look at quaternion.  <a href=\"a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6529ac8c04a57fcc35865b5c9437cc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0cc5ad970d0b00829b139fe0fe5a1e13\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0cc5ad970d0b00829b139fe0fe5a1e13\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">roll</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga0cc5ad970d0b00829b139fe0fe5a1e13\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns roll value of euler angles expressed in radians.  <a href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0cc5ad970d0b00829b139fe0fe5a1e13\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8da38cdfdc452dafa660c2f46506bad5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8da38cdfdc452dafa660c2f46506bad5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">yaw</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8da38cdfdc452dafa660c2f46506bad5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns yaw value of euler angles expressed in radians.  <a href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8da38cdfdc452dafa660c2f46506bad5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00299.html\">GLM_GTC_quaternion</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00125_source.html\">gtc/quaternion.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00125_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/quaternion.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00125.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/matrix_transform.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_float.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_float_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_double.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_double_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_trigonometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_transform.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_quaternion extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00299.html#gaf4dd967dead22dd932fc7460ceecb03f\">eulerAngles</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">roll</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">pitch</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">yaw</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">mat3_cast</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">mat4_cast</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58\">quat_cast</a>(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58\">quat_cast</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4\">lessThan</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00299.html#gac00012eea281800d2403f4ea8443134d\">lessThanEqual</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b\">greaterThan</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00299.html#ga388cbeba987dae7b5937f742efa49a5a\">greaterThanEqual</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f\">quatLookAt</a>(</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; direction,</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; up);</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8\">quatLookAtRH</a>(</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; direction,</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; up);</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00299.html#ga2da350c73411be3bb19441b226b81a74\">quatLookAtLH</a>(</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; direction,</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; up);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;<span class=\"preprocessor\">#include &quot;quaternion.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00299_html_ga1113212d9bdefc2e31ad40e5bbb506f3\"><div class=\"ttname\"><a href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">glm::mat4_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; mat4_cast(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a quaternion to a 4 * 4 matrix. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga8f7fa76e06c417b757ddfd438f3f677b\"><div class=\"ttname\"><a href=\"a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b\">glm::greaterThan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; greaterThan(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison of result x > y. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga388cbeba987dae7b5937f742efa49a5a\"><div class=\"ttname\"><a href=\"a00299.html#ga388cbeba987dae7b5937f742efa49a5a\">glm::greaterThanEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; greaterThanEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison of result x >= y. </div></div>\n<div class=\"ttc\" id=\"a00299_html_gac00012eea281800d2403f4ea8443134d\"><div class=\"ttname\"><a href=\"a00299.html#gac00012eea281800d2403f4ea8443134d\">glm::lessThanEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; lessThanEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison of result x <= y. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga0cc5ad970d0b00829b139fe0fe5a1e13\"><div class=\"ttname\"><a href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">glm::roll</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T roll(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns roll value of euler angles expressed in radians. </div></div>\n<div class=\"ttc\" id=\"a00299_html_gabe7fc5ec5feb41ab234d5d2b6254697f\"><div class=\"ttname\"><a href=\"a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f\">glm::quatLookAt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; quatLookAt(vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</div><div class=\"ttdoc\">Build a look at quaternion based on the default handedness. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga4524810f07f72e8c7bdc7764fa11cb58\"><div class=\"ttname\"><a href=\"a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58\">glm::quat_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; quat_cast(mat&lt; 4, 4, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a pure rotation 4 * 4 matrix to a quaternion. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga333ab70047fbe4132406100c292dbc89\"><div class=\"ttname\"><a href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">glm::mat3_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; mat3_cast(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a quaternion to a 3 * 3 matrix. </div></div>\n<div class=\"ttc\" id=\"a00299_html_gaf4dd967dead22dd932fc7460ceecb03f\"><div class=\"ttname\"><a href=\"a00299.html#gaf4dd967dead22dd932fc7460ceecb03f\">glm::eulerAngles</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; eulerAngles(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns euler angles, pitch as x, yaw as y, roll as z. </div></div>\n<div class=\"ttc\" id=\"a00299_html_gad091a2d22c8acfebfa92bcfca1dfe9c4\"><div class=\"ttname\"><a href=\"a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4\">glm::lessThan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; lessThan(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison result of x < y. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga8da38cdfdc452dafa660c2f46506bad5\"><div class=\"ttname\"><a href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">glm::yaw</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T yaw(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns yaw value of euler angles expressed in radians. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga2da350c73411be3bb19441b226b81a74\"><div class=\"ttname\"><a href=\"a00299.html#ga2da350c73411be3bb19441b226b81a74\">glm::quatLookAtLH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; quatLookAtLH(vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</div><div class=\"ttdoc\">Build a left-handed look at quaternion. </div></div>\n<div class=\"ttc\" id=\"a00299_html_gaf6529ac8c04a57fcc35865b5c9437cc8\"><div class=\"ttname\"><a href=\"a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8\">glm::quatLookAtRH</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; quatLookAtRH(vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</div><div class=\"ttdoc\">Build a right-handed look at quaternion. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga7603e81477b46ddb448896909bc04928\"><div class=\"ttname\"><a href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">glm::pitch</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T pitch(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns pitch value of euler angles expressed in radians. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00126.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/quaternion.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00352.html\">GLM_GTX_quaternion</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00126_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2f32f970411c44cdd38bb98960198385\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2f32f970411c44cdd38bb98960198385\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga2f32f970411c44cdd38bb98960198385\">cross</a> (qua&lt; T, Q &gt; const &amp;q, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2f32f970411c44cdd38bb98960198385\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute a cross product between a quaternion and a vector.  <a href=\"a00352.html#ga2f32f970411c44cdd38bb98960198385\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f32f970411c44cdd38bb98960198385\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9f5f77255756e5668dfee7f0d07ed021\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9f5f77255756e5668dfee7f0d07ed021\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga9f5f77255756e5668dfee7f0d07ed021\">cross</a> (vec&lt; 3, T, Q &gt; const &amp;v, qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga9f5f77255756e5668dfee7f0d07ed021\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute a cross product between a vector and a quaternion.  <a href=\"a00352.html#ga9f5f77255756e5668dfee7f0d07ed021\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9f5f77255756e5668dfee7f0d07ed021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga321953c1b2e7befe6f5dcfddbfc6b76b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga321953c1b2e7befe6f5dcfddbfc6b76b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b\">extractRealComponent</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga321953c1b2e7befe6f5dcfddbfc6b76b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extract the real component of a quaternion.  <a href=\"a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga321953c1b2e7befe6f5dcfddbfc6b76b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga264e10708d58dd0ff53b7902a2bd2561\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga264e10708d58dd0ff53b7902a2bd2561\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga264e10708d58dd0ff53b7902a2bd2561\">fastMix</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T const &amp;a)</td></tr>\n<tr class=\"memdesc:ga264e10708d58dd0ff53b7902a2bd2561\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion normalized linear interpolation.  <a href=\"a00352.html#ga264e10708d58dd0ff53b7902a2bd2561\">More...</a><br /></td></tr>\n<tr class=\"separator:ga264e10708d58dd0ff53b7902a2bd2561\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacc5cd5f3e78de61d141c2355417424de\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacc5cd5f3e78de61d141c2355417424de\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gacc5cd5f3e78de61d141c2355417424de\">intermediate</a> (qua&lt; T, Q &gt; const &amp;prev, qua&lt; T, Q &gt; const &amp;curr, qua&lt; T, Q &gt; const &amp;next)</td></tr>\n<tr class=\"memdesc:gacc5cd5f3e78de61d141c2355417424de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an intermediate control point for squad interpolation.  <a href=\"a00352.html#gacc5cd5f3e78de61d141c2355417424de\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc5cd5f3e78de61d141c2355417424de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58a609b1b8ab965f5df2702e8ca4e75b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga58a609b1b8ab965f5df2702e8ca4e75b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b\">length2</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga58a609b1b8ab965f5df2702e8ca4e75b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the squared length of x.  <a href=\"a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58a609b1b8ab965f5df2702e8ca4e75b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ee8332600b2aca3a77622a28d857b55\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5ee8332600b2aca3a77622a28d857b55\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga5ee8332600b2aca3a77622a28d857b55\">quat_identity</a> ()</td></tr>\n<tr class=\"memdesc:ga5ee8332600b2aca3a77622a28d857b55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Create an identity quaternion.  <a href=\"a00352.html#ga5ee8332600b2aca3a77622a28d857b55\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5ee8332600b2aca3a77622a28d857b55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07da6ef58646442efe93b0c273d73776\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga07da6ef58646442efe93b0c273d73776\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga07da6ef58646442efe93b0c273d73776\">rotate</a> (qua&lt; T, Q &gt; const &amp;q, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga07da6ef58646442efe93b0c273d73776\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns quarternion square root.  <a href=\"a00352.html#ga07da6ef58646442efe93b0c273d73776\">More...</a><br /></td></tr>\n<tr class=\"separator:ga07da6ef58646442efe93b0c273d73776\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafcb78dfff45fbf19a7fcb2bd03fbf196\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafcb78dfff45fbf19a7fcb2bd03fbf196\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196\">rotate</a> (qua&lt; T, Q &gt; const &amp;q, vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gafcb78dfff45fbf19a7fcb2bd03fbf196\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotates a 4 components vector by a quaternion.  <a href=\"a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196\">More...</a><br /></td></tr>\n<tr class=\"separator:gafcb78dfff45fbf19a7fcb2bd03fbf196\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03e61282831cc3f52cc76f72f52ad2c5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga03e61282831cc3f52cc76f72f52ad2c5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5\">rotation</a> (vec&lt; 3, T, Q &gt; const &amp;orig, vec&lt; 3, T, Q &gt; const &amp;dest)</td></tr>\n<tr class=\"memdesc:ga03e61282831cc3f52cc76f72f52ad2c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the rotation between two vectors.  <a href=\"a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga03e61282831cc3f52cc76f72f52ad2c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc576cc957adc2a568cdcbc3799175bc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadc576cc957adc2a568cdcbc3799175bc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gadc576cc957adc2a568cdcbc3799175bc\">shortMix</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T const &amp;a)</td></tr>\n<tr class=\"memdesc:gadc576cc957adc2a568cdcbc3799175bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion interpolation using the rotation short path.  <a href=\"a00352.html#gadc576cc957adc2a568cdcbc3799175bc\">More...</a><br /></td></tr>\n<tr class=\"separator:gadc576cc957adc2a568cdcbc3799175bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b9bf3459e132ad8a18fe970669e3e35\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0b9bf3459e132ad8a18fe970669e3e35\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35\">squad</a> (qua&lt; T, Q &gt; const &amp;q1, qua&lt; T, Q &gt; const &amp;q2, qua&lt; T, Q &gt; const &amp;s1, qua&lt; T, Q &gt; const &amp;s2, T const &amp;h)</td></tr>\n<tr class=\"memdesc:ga0b9bf3459e132ad8a18fe970669e3e35\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute a point on a path according squad equation.  <a href=\"a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b9bf3459e132ad8a18fe970669e3e35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab0afabb894b28a983fb8ec610409d56\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaab0afabb894b28a983fb8ec610409d56\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gaab0afabb894b28a983fb8ec610409d56\">toMat3</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaab0afabb894b28a983fb8ec610409d56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 3 * 3 matrix.  <a href=\"a00352.html#gaab0afabb894b28a983fb8ec610409d56\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab0afabb894b28a983fb8ec610409d56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadfa2c77094e8cc9adad321d938855ffb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadfa2c77094e8cc9adad321d938855ffb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gadfa2c77094e8cc9adad321d938855ffb\">toMat4</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gadfa2c77094e8cc9adad321d938855ffb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 4 * 4 matrix.  <a href=\"a00352.html#gadfa2c77094e8cc9adad321d938855ffb\">More...</a><br /></td></tr>\n<tr class=\"separator:gadfa2c77094e8cc9adad321d938855ffb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga798de5d186499c9a9231cd92c8afaef1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga798de5d186499c9a9231cd92c8afaef1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga798de5d186499c9a9231cd92c8afaef1\">toQuat</a> (mat&lt; 3, 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga798de5d186499c9a9231cd92c8afaef1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a 3 * 3 matrix to a quaternion.  <a href=\"a00352.html#ga798de5d186499c9a9231cd92c8afaef1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga798de5d186499c9a9231cd92c8afaef1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5eb36f51e1638e710451eba194dbc011\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5eb36f51e1638e710451eba194dbc011\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga5eb36f51e1638e710451eba194dbc011\">toQuat</a> (mat&lt; 4, 4, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga5eb36f51e1638e710451eba194dbc011\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a 4 * 4 matrix to a quaternion.  <a href=\"a00352.html#ga5eb36f51e1638e710451eba194dbc011\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5eb36f51e1638e710451eba194dbc011\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00352.html\">GLM_GTX_quaternion</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\ngtx_extented_min_max (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00126_source.html\">gtx/quaternion.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00126_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/quaternion.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00126.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_exponential.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/norm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_quaternion extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00352.html#ga5ee8332600b2aca3a77622a28d857b55\">quat_identity</a>();</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00352.html#ga9f5f77255756e5668dfee7f0d07ed021\">cross</a>(</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00352.html#ga9f5f77255756e5668dfee7f0d07ed021\">cross</a>(</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35\">squad</a>(</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q1,</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q2,</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; s1,</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; s2,</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                T <span class=\"keyword\">const</span>&amp; h);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00352.html#gacc5cd5f3e78de61d141c2355417424de\">intermediate</a>(</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; prev,</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; curr,</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; next);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"comment\">//template&lt;typename T, qualifier Q&gt;</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <span class=\"comment\">//qua&lt;T, Q&gt; sqrt(</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"comment\">//      qua&lt;T, Q&gt; const&amp; q);</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196\">rotate</a>(</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q,</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196\">rotate</a>(</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q,</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b\">extractRealComponent</a>(</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00352.html#gaab0afabb894b28a983fb8ec610409d56\">  113</a></span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00352.html#gaab0afabb894b28a983fb8ec610409d56\">toMat3</a>(</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">mat3_cast</a>(x);}</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00352.html#gadfa2c77094e8cc9adad321d938855ffb\">  120</a></span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00352.html#gadfa2c77094e8cc9adad321d938855ffb\">toMat4</a>(</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">mat4_cast</a>(x);}</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00352.html#ga798de5d186499c9a9231cd92c8afaef1\">  127</a></span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00352.html#ga5eb36f51e1638e710451eba194dbc011\">toQuat</a>(</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">quat_cast</a>(x);}</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00352.html#ga5eb36f51e1638e710451eba194dbc011\">  134</a></span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00352.html#ga5eb36f51e1638e710451eba194dbc011\">toQuat</a>(</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; x){<span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">quat_cast</a>(x);}</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00352.html#gadc576cc957adc2a568cdcbc3799175bc\">shortMix</a>(</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;                T <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00352.html#ga264e10708d58dd0ff53b7902a2bd2561\">fastMix</a>(</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;                T <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5\">rotation</a>(</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; orig,</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; dest);</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b\">length2</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;<span class=\"preprocessor\">#include &quot;quaternion.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00299_html_ga1113212d9bdefc2e31ad40e5bbb506f3\"><div class=\"ttname\"><a href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">glm::mat4_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; mat4_cast(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a quaternion to a 4 * 4 matrix. </div></div>\n<div class=\"ttc\" id=\"a00352_html_gadc576cc957adc2a568cdcbc3799175bc\"><div class=\"ttname\"><a href=\"a00352.html#gadc576cc957adc2a568cdcbc3799175bc\">glm::shortMix</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; shortMix(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T const &amp;a)</div><div class=\"ttdoc\">Quaternion interpolation using the rotation short path. </div></div>\n<div class=\"ttc\" id=\"a00352_html_ga5ee8332600b2aca3a77622a28d857b55\"><div class=\"ttname\"><a href=\"a00352.html#ga5ee8332600b2aca3a77622a28d857b55\">glm::quat_identity</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; quat_identity()</div><div class=\"ttdoc\">Create an identity quaternion. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga1108a4ab88ca87bac321454eea7702f8\"><div class=\"ttname\"><a href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">glm::quat_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; quat_cast(mat&lt; 3, 3, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a pure rotation 3 * 3 matrix to a quaternion. </div></div>\n<div class=\"ttc\" id=\"a00352_html_gacc5cd5f3e78de61d141c2355417424de\"><div class=\"ttname\"><a href=\"a00352.html#gacc5cd5f3e78de61d141c2355417424de\">glm::intermediate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; intermediate(qua&lt; T, Q &gt; const &amp;prev, qua&lt; T, Q &gt; const &amp;curr, qua&lt; T, Q &gt; const &amp;next)</div><div class=\"ttdoc\">Returns an intermediate control point for squad interpolation. </div></div>\n<div class=\"ttc\" id=\"a00299_html_ga333ab70047fbe4132406100c292dbc89\"><div class=\"ttname\"><a href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">glm::mat3_cast</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; mat3_cast(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a quaternion to a 3 * 3 matrix. </div></div>\n<div class=\"ttc\" id=\"a00352_html_gadfa2c77094e8cc9adad321d938855ffb\"><div class=\"ttname\"><a href=\"a00352.html#gadfa2c77094e8cc9adad321d938855ffb\">glm::toMat4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; toMat4(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a quaternion to a 4 * 4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00126_source.html#l00120\">gtx/quaternion.hpp:120</a></div></div>\n<div class=\"ttc\" id=\"a00352_html_ga321953c1b2e7befe6f5dcfddbfc6b76b\"><div class=\"ttname\"><a href=\"a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b\">glm::extractRealComponent</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T extractRealComponent(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Extract the real component of a quaternion. </div></div>\n<div class=\"ttc\" id=\"a00352_html_gaab0afabb894b28a983fb8ec610409d56\"><div class=\"ttname\"><a href=\"a00352.html#gaab0afabb894b28a983fb8ec610409d56\">glm::toMat3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; toMat3(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a quaternion to a 3 * 3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00126_source.html#l00113\">gtx/quaternion.hpp:113</a></div></div>\n<div class=\"ttc\" id=\"a00352_html_ga0b9bf3459e132ad8a18fe970669e3e35\"><div class=\"ttname\"><a href=\"a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35\">glm::squad</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; squad(qua&lt; T, Q &gt; const &amp;q1, qua&lt; T, Q &gt; const &amp;q2, qua&lt; T, Q &gt; const &amp;s1, qua&lt; T, Q &gt; const &amp;s2, T const &amp;h)</div><div class=\"ttdoc\">Compute a point on a path according squad equation. </div></div>\n<div class=\"ttc\" id=\"a00352_html_ga9f5f77255756e5668dfee7f0d07ed021\"><div class=\"ttname\"><a href=\"a00352.html#ga9f5f77255756e5668dfee7f0d07ed021\">glm::cross</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; cross(vec&lt; 3, T, Q &gt; const &amp;v, qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Compute a cross product between a vector and a quaternion. </div></div>\n<div class=\"ttc\" id=\"a00352_html_ga5eb36f51e1638e710451eba194dbc011\"><div class=\"ttname\"><a href=\"a00352.html#ga5eb36f51e1638e710451eba194dbc011\">glm::toQuat</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; toQuat(mat&lt; 4, 4, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Converts a 4 * 4 matrix to a quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00126_source.html#l00134\">gtx/quaternion.hpp:134</a></div></div>\n<div class=\"ttc\" id=\"a00352_html_ga03e61282831cc3f52cc76f72f52ad2c5\"><div class=\"ttname\"><a href=\"a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5\">glm::rotation</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; rotation(vec&lt; 3, T, Q &gt; const &amp;orig, vec&lt; 3, T, Q &gt; const &amp;dest)</div><div class=\"ttdoc\">Compute the rotation between two vectors. </div></div>\n<div class=\"ttc\" id=\"a00352_html_gafcb78dfff45fbf19a7fcb2bd03fbf196\"><div class=\"ttname\"><a href=\"a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196\">glm::rotate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt; rotate(qua&lt; T, Q &gt; const &amp;q, vec&lt; 4, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Rotates a 4 components vector by a quaternion. </div></div>\n<div class=\"ttc\" id=\"a00352_html_ga264e10708d58dd0ff53b7902a2bd2561\"><div class=\"ttname\"><a href=\"a00352.html#ga264e10708d58dd0ff53b7902a2bd2561\">glm::fastMix</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; fastMix(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T const &amp;a)</div><div class=\"ttdoc\">Quaternion normalized linear interpolation. </div></div>\n<div class=\"ttc\" id=\"a00352_html_ga58a609b1b8ab965f5df2702e8ca4e75b\"><div class=\"ttname\"><a href=\"a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b\">glm::length2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length2(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the squared length of x. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00127.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_common.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_common.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00248.html\">GLM_EXT_quaternion_common</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00127_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga10d7bda73201788ac2ab28cd8d0d409b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga10d7bda73201788ac2ab28cd8d0d409b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b\">conjugate</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga10d7bda73201788ac2ab28cd8d0d409b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the q conjugate.  <a href=\"a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga10d7bda73201788ac2ab28cd8d0d409b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab41da854ae678e23e114b598cbca4065\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab41da854ae678e23e114b598cbca4065\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#gab41da854ae678e23e114b598cbca4065\">inverse</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gab41da854ae678e23e114b598cbca4065\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the q inverse.  <a href=\"a00248.html#gab41da854ae678e23e114b598cbca4065\">More...</a><br /></td></tr>\n<tr class=\"separator:gab41da854ae678e23e114b598cbca4065\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45722741ea266b4e861938b365c5f362\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga45722741ea266b4e861938b365c5f362\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#ga45722741ea266b4e861938b365c5f362\">isinf</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga45722741ea266b4e861938b365c5f362\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations.  <a href=\"a00248.html#ga45722741ea266b4e861938b365c5f362\">More...</a><br /></td></tr>\n<tr class=\"separator:ga45722741ea266b4e861938b365c5f362\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1bb55f8963616502e96dc564384d8a03\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1bb55f8963616502e96dc564384d8a03\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#ga1bb55f8963616502e96dc564384d8a03\">isnan</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1bb55f8963616502e96dc564384d8a03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations.  <a href=\"a00248.html#ga1bb55f8963616502e96dc564384d8a03\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1bb55f8963616502e96dc564384d8a03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6033dc0741051fa463a0a147ba29f293\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6033dc0741051fa463a0a147ba29f293\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#ga6033dc0741051fa463a0a147ba29f293\">lerp</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</td></tr>\n<tr class=\"memdesc:ga6033dc0741051fa463a0a147ba29f293\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Linear interpolation of two quaternions.  <a href=\"a00248.html#ga6033dc0741051fa463a0a147ba29f293\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6033dc0741051fa463a0a147ba29f293\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafbfe587b8da11fb89a30c3d67dd5ccc2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafbfe587b8da11fb89a30c3d67dd5ccc2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2\">mix</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</td></tr>\n<tr class=\"memdesc:gafbfe587b8da11fb89a30c3d67dd5ccc2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Spherical linear interpolation of two quaternions.  <a href=\"a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2\">More...</a><br /></td></tr>\n<tr class=\"separator:gafbfe587b8da11fb89a30c3d67dd5ccc2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7fc3c945be366b9942b842f55da428a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae7fc3c945be366b9942b842f55da428a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#gae7fc3c945be366b9942b842f55da428a\">slerp</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</td></tr>\n<tr class=\"memdesc:gae7fc3c945be366b9942b842f55da428a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Spherical linear interpolation of two quaternions.  <a href=\"a00248.html#gae7fc3c945be366b9942b842f55da428a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7fc3c945be366b9942b842f55da428a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00248.html\">GLM_EXT_quaternion_common</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00127_source.html\">quaternion_common.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00127_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_common.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_common.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00127.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../trigonometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;../exponential.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_common extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2\">mix</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T a);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00248.html#ga6033dc0741051fa463a0a147ba29f293\">lerp</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T a);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00248.html#gae7fc3c945be366b9942b842f55da428a\">slerp</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T a);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b\">conjugate</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00248.html#gab41da854ae678e23e114b598cbca4065\">inverse</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00248.html#ga1bb55f8963616502e96dc564384d8a03\">isnan</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00248.html#ga45722741ea266b4e861938b365c5f362\">isinf</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;<span class=\"preprocessor\">#include &quot;quaternion_common.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00248_html_ga45722741ea266b4e861938b365c5f362\"><div class=\"ttname\"><a href=\"a00248.html#ga45722741ea266b4e861938b365c5f362\">glm::isinf</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; isinf(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns true if x holds a positive infinity or negative infinity representation in the underlying imp...</div></div>\n<div class=\"ttc\" id=\"a00248_html_ga1bb55f8963616502e96dc564384d8a03\"><div class=\"ttname\"><a href=\"a00248.html#ga1bb55f8963616502e96dc564384d8a03\">glm::isnan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; isnan(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns true if x holds a NaN (not a number) representation in the underlying implementation&#39;s set of...</div></div>\n<div class=\"ttc\" id=\"a00248_html_ga10d7bda73201788ac2ab28cd8d0d409b\"><div class=\"ttname\"><a href=\"a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b\">glm::conjugate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; conjugate(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the q conjugate. </div></div>\n<div class=\"ttc\" id=\"a00248_html_gae7fc3c945be366b9942b842f55da428a\"><div class=\"ttname\"><a href=\"a00248.html#gae7fc3c945be366b9942b842f55da428a\">glm::slerp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; slerp(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</div><div class=\"ttdoc\">Spherical linear interpolation of two quaternions. </div></div>\n<div class=\"ttc\" id=\"a00248_html_gab41da854ae678e23e114b598cbca4065\"><div class=\"ttname\"><a href=\"a00248.html#gab41da854ae678e23e114b598cbca4065\">glm::inverse</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; inverse(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the q inverse. </div></div>\n<div class=\"ttc\" id=\"a00248_html_ga6033dc0741051fa463a0a147ba29f293\"><div class=\"ttname\"><a href=\"a00248.html#ga6033dc0741051fa463a0a147ba29f293\">glm::lerp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; lerp(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</div><div class=\"ttdoc\">Linear interpolation of two quaternions. </div></div>\n<div class=\"ttc\" id=\"a00248_html_gafbfe587b8da11fb89a30c3d67dd5ccc2\"><div class=\"ttname\"><a href=\"a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2\">glm::mix</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; mix(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</div><div class=\"ttdoc\">Spherical linear interpolation of two quaternions. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00128.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_double.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_double.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00249.html\">GLM_EXT_quaternion_double</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00128_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga1181459aa5d640a3ea43861b118f3f0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1181459aa5d640a3ea43861b118f3f0b\"></a>\ntypedef qua&lt; double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">dquat</a></td></tr>\n<tr class=\"memdesc:ga1181459aa5d640a3ea43861b118f3f0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga1181459aa5d640a3ea43861b118f3f0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00249.html\">GLM_EXT_quaternion_double</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00128_source.html\">quaternion_double.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00128_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_double.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_double.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00128.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_quat.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_double extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">   35</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;double, defaultp&gt;           <a class=\"code\" href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">dquat</a>;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"ttc\" id=\"a00249_html_ga1181459aa5d640a3ea43861b118f3f0b\"><div class=\"ttname\"><a href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">glm::dquat</a></div><div class=\"ttdeci\">qua&lt; double, defaultp &gt; dquat</div><div class=\"ttdoc\">Quaternion of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00128_source.html#l00035\">quaternion_double.hpp:35</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00129.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_double_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_double_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00250.html\">GLM_EXT_quaternion_double_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00129_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaf13a25f41afc03480b40fc71bd249cec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">highp_dquat</a></td></tr>\n<tr class=\"memdesc:gaf13a25f41afc03480b40fc71bd249cec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf13a25f41afc03480b40fc71bd249cec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9e6e5f42e67dd5877350ba485c191f1c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">lowp_dquat</a></td></tr>\n<tr class=\"memdesc:ga9e6e5f42e67dd5877350ba485c191f1c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9e6e5f42e67dd5877350ba485c191f1c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacdf73b1f7fd8f5a0c79a3934e99c1a14\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">mediump_dquat</a></td></tr>\n<tr class=\"memdesc:gacdf73b1f7fd8f5a0c79a3934e99c1a14\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">More...</a><br /></td></tr>\n<tr class=\"separator:gacdf73b1f7fd8f5a0c79a3934e99c1a14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00250.html\">GLM_EXT_quaternion_double_precision</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00129_source.html\">quaternion_double_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00129_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_double_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_double_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00129.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_quat.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_double_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;double, lowp&gt;               <a class=\"code\" href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">lowp_dquat</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">   33</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;double, mediump&gt;    <a class=\"code\" href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">mediump_dquat</a>;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">   38</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;double, highp&gt;              <a class=\"code\" href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">highp_dquat</a>;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"ttc\" id=\"a00250_html_gacdf73b1f7fd8f5a0c79a3934e99c1a14\"><div class=\"ttname\"><a href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">glm::mediump_dquat</a></div><div class=\"ttdeci\">qua&lt; double, mediump &gt; mediump_dquat</div><div class=\"ttdoc\">Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00129_source.html#l00033\">quaternion_double_precision.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00250_html_gaf13a25f41afc03480b40fc71bd249cec\"><div class=\"ttname\"><a href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">glm::highp_dquat</a></div><div class=\"ttdeci\">qua&lt; double, highp &gt; highp_dquat</div><div class=\"ttdoc\">Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00129_source.html#l00038\">quaternion_double_precision.hpp:38</a></div></div>\n<div class=\"ttc\" id=\"a00250_html_ga9e6e5f42e67dd5877350ba485c191f1c\"><div class=\"ttname\"><a href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">glm::lowp_dquat</a></div><div class=\"ttdeci\">qua&lt; double, lowp &gt; lowp_dquat</div><div class=\"ttdoc\">Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00129_source.html#l00028\">quaternion_double_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00130.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_exponential.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_exponential.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00251.html\">GLM_EXT_quaternion_exponential</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00130_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaab2d37ef7265819f1d2939b9dc2c52ac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaab2d37ef7265819f1d2939b9dc2c52ac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac\">exp</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gaab2d37ef7265819f1d2939b9dc2c52ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a exponential of a quaternion.  <a href=\"a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab2d37ef7265819f1d2939b9dc2c52ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa5f7b20e296671b16ce25a2ab7ad5473\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa5f7b20e296671b16ce25a2ab7ad5473\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473\">log</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gaa5f7b20e296671b16ce25a2ab7ad5473\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a logarithm of a quaternion.  <a href=\"a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa5f7b20e296671b16ce25a2ab7ad5473\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4975ffcacd312a8c0bbd046a76c5607e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4975ffcacd312a8c0bbd046a76c5607e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e\">pow</a> (qua&lt; T, Q &gt; const &amp;q, T y)</td></tr>\n<tr class=\"memdesc:ga4975ffcacd312a8c0bbd046a76c5607e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a quaternion raised to a power.  <a href=\"a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4975ffcacd312a8c0bbd046a76c5607e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga64b7b255ed7bcba616fe6b44470b022e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga64b7b255ed7bcba616fe6b44470b022e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#ga64b7b255ed7bcba616fe6b44470b022e\">sqrt</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga64b7b255ed7bcba616fe6b44470b022e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the square root of a quaternion.  <a href=\"a00256.html#ga64b7b255ed7bcba616fe6b44470b022e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga64b7b255ed7bcba616fe6b44470b022e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00251.html\">GLM_EXT_quaternion_exponential</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00130_source.html\">quaternion_exponential.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00130_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_exponential.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_exponential.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00130.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../trigonometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_exponential extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac\">exp</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473\">log</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e\">pow</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, T y);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00256.html#ga64b7b255ed7bcba616fe6b44470b022e\">sqrt</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"preprocessor\">#include &quot;quaternion_exponential.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00256_html_gaa5f7b20e296671b16ce25a2ab7ad5473\"><div class=\"ttname\"><a href=\"a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473\">glm::log</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; log(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns a logarithm of a quaternion. </div></div>\n<div class=\"ttc\" id=\"a00256_html_ga4975ffcacd312a8c0bbd046a76c5607e\"><div class=\"ttname\"><a href=\"a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e\">glm::pow</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; pow(qua&lt; T, Q &gt; const &amp;q, T y)</div><div class=\"ttdoc\">Returns a quaternion raised to a power. </div></div>\n<div class=\"ttc\" id=\"a00256_html_ga64b7b255ed7bcba616fe6b44470b022e\"><div class=\"ttname\"><a href=\"a00256.html#ga64b7b255ed7bcba616fe6b44470b022e\">glm::sqrt</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; sqrt(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the square root of a quaternion. </div></div>\n<div class=\"ttc\" id=\"a00256_html_gaab2d37ef7265819f1d2939b9dc2c52ac\"><div class=\"ttname\"><a href=\"a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac\">glm::exp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; exp(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns a exponential of a quaternion. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00131.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_float.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_float.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00252.html\">GLM_EXT_quaternion_float</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00131_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gab0b441adb4509bc58d2946c2239a8942\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0b441adb4509bc58d2946c2239a8942\"></a>\ntypedef qua&lt; float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">quat</a></td></tr>\n<tr class=\"memdesc:gab0b441adb4509bc58d2946c2239a8942\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gab0b441adb4509bc58d2946c2239a8942\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00252.html\">GLM_EXT_quaternion_float</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00131_source.html\">quaternion_float.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00131_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_float.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_float.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00131.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_quat.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_float extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">   35</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, defaultp&gt;            <a class=\"code\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">quat</a>;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"ttc\" id=\"a00252_html_gab0b441adb4509bc58d2946c2239a8942\"><div class=\"ttname\"><a href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">glm::quat</a></div><div class=\"ttdeci\">qua&lt; float, defaultp &gt; quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00131_source.html#l00035\">quaternion_float.hpp:35</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00132.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_float_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_float_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00253.html\">GLM_EXT_quaternion_float_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00132_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaa2fd8085774376310aeb80588e0eab6e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa2fd8085774376310aeb80588e0eab6e\"></a>\ntypedef qua&lt; float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00253.html#gaa2fd8085774376310aeb80588e0eab6e\">highp_quat</a></td></tr>\n<tr class=\"memdesc:gaa2fd8085774376310aeb80588e0eab6e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa2fd8085774376310aeb80588e0eab6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade62c5316c1c11a79c34c00c189558eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gade62c5316c1c11a79c34c00c189558eb\"></a>\ntypedef qua&lt; float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00253.html#gade62c5316c1c11a79c34c00c189558eb\">lowp_quat</a></td></tr>\n<tr class=\"memdesc:gade62c5316c1c11a79c34c00c189558eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gade62c5316c1c11a79c34c00c189558eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad2a59409de1bb12ccb6eb692ee7e9d8d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad2a59409de1bb12ccb6eb692ee7e9d8d\"></a>\ntypedef qua&lt; float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d\">mediump_quat</a></td></tr>\n<tr class=\"memdesc:gad2a59409de1bb12ccb6eb692ee7e9d8d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad2a59409de1bb12ccb6eb692ee7e9d8d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00253.html\">GLM_EXT_quaternion_float_precision</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00132_source.html\">quaternion_float_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00132_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_float_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_float_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00132.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_quat.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_float_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00253.html#gade62c5316c1c11a79c34c00c189558eb\">   26</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, lowp&gt;                <a class=\"code\" href=\"a00253.html#gade62c5316c1c11a79c34c00c189558eb\">lowp_quat</a>;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d\">   29</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, mediump&gt;             <a class=\"code\" href=\"a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d\">mediump_quat</a>;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00253.html#gaa2fd8085774376310aeb80588e0eab6e\">   32</a></span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;float, highp&gt;               <a class=\"code\" href=\"a00253.html#gaa2fd8085774376310aeb80588e0eab6e\">highp_quat</a>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"ttc\" id=\"a00253_html_gaa2fd8085774376310aeb80588e0eab6e\"><div class=\"ttname\"><a href=\"a00253.html#gaa2fd8085774376310aeb80588e0eab6e\">glm::highp_quat</a></div><div class=\"ttdeci\">qua&lt; float, highp &gt; highp_quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00132_source.html#l00032\">quaternion_float_precision.hpp:32</a></div></div>\n<div class=\"ttc\" id=\"a00253_html_gad2a59409de1bb12ccb6eb692ee7e9d8d\"><div class=\"ttname\"><a href=\"a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d\">glm::mediump_quat</a></div><div class=\"ttdeci\">qua&lt; float, mediump &gt; mediump_quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00132_source.html#l00029\">quaternion_float_precision.hpp:29</a></div></div>\n<div class=\"ttc\" id=\"a00253_html_gade62c5316c1c11a79c34c00c189558eb\"><div class=\"ttname\"><a href=\"a00253.html#gade62c5316c1c11a79c34c00c189558eb\">glm::lowp_quat</a></div><div class=\"ttdeci\">qua&lt; float, lowp &gt; lowp_quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00132_source.html#l00026\">quaternion_float_precision.hpp:26</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00133.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_geometric.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_geometric.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00254.html\">GLM_EXT_quaternion_geometric</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00133_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga755beaa929c75751dee646cccba37e4c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga755beaa929c75751dee646cccba37e4c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html#ga755beaa929c75751dee646cccba37e4c\">cross</a> (qua&lt; T, Q &gt; const &amp;q1, qua&lt; T, Q &gt; const &amp;q2)</td></tr>\n<tr class=\"memdesc:ga755beaa929c75751dee646cccba37e4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute a cross product.  <a href=\"a00254.html#ga755beaa929c75751dee646cccba37e4c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga755beaa929c75751dee646cccba37e4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc\">dot</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...  <a href=\"a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab703732449be6c7199369b3f9a91ed38\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab703732449be6c7199369b3f9a91ed38\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gab703732449be6c7199369b3f9a91ed38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the norm of a quaternions.  <a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">More...</a><br /></td></tr>\n<tr class=\"separator:gab703732449be6c7199369b3f9a91ed38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf30e3263fffe8dcc6659aea76ae8927\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabf30e3263fffe8dcc6659aea76ae8927\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html#gabf30e3263fffe8dcc6659aea76ae8927\">normalize</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gabf30e3263fffe8dcc6659aea76ae8927\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the normalized quaternion.  <a href=\"a00254.html#gabf30e3263fffe8dcc6659aea76ae8927\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf30e3263fffe8dcc6659aea76ae8927\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00254.html\">GLM_EXT_quaternion_geometric</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00133_source.html\">quaternion_geometric.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00133_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_geometric.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_geometric.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00133.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../exponential.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_geometric extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00254.html#gabf30e3263fffe8dcc6659aea76ae8927\">normalize</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc\">dot</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_QUALIFIER qua&lt;T, Q&gt; <a class=\"code\" href=\"a00254.html#ga755beaa929c75751dee646cccba37e4c\">cross</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q1, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q2);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"preprocessor\">#include &quot;quaternion_geometric.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00254_html_ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><div class=\"ttname\"><a href=\"a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc\">glm::dot</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T dot(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ... </div></div>\n<div class=\"ttc\" id=\"a00254_html_ga755beaa929c75751dee646cccba37e4c\"><div class=\"ttname\"><a href=\"a00254.html#ga755beaa929c75751dee646cccba37e4c\">glm::cross</a></div><div class=\"ttdeci\">GLM_FUNC_QUALIFIER qua&lt; T, Q &gt; cross(qua&lt; T, Q &gt; const &amp;q1, qua&lt; T, Q &gt; const &amp;q2)</div><div class=\"ttdoc\">Compute a cross product. </div></div>\n<div class=\"ttc\" id=\"a00254_html_gabf30e3263fffe8dcc6659aea76ae8927\"><div class=\"ttname\"><a href=\"a00254.html#gabf30e3263fffe8dcc6659aea76ae8927\">glm::normalize</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; normalize(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the normalized quaternion. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00134.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_relational.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_relational.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00255.html\">GLM_EXT_quaternion_relational</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00134_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad7827af0549504ff1cd6a359786acc7a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad7827af0549504ff1cd6a359786acc7a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html#gad7827af0549504ff1cd6a359786acc7a\">equal</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gad7827af0549504ff1cd6a359786acc7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x == y.  <a href=\"a00255.html#gad7827af0549504ff1cd6a359786acc7a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7827af0549504ff1cd6a359786acc7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa001eecb91106463169a8e5ef1577b39\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa001eecb91106463169a8e5ef1577b39\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html#gaa001eecb91106463169a8e5ef1577b39\">equal</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:gaa001eecb91106463169a8e5ef1577b39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00255.html#gaa001eecb91106463169a8e5ef1577b39\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa001eecb91106463169a8e5ef1577b39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab441cee0de5867a868f3a586ee68cfe1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab441cee0de5867a868f3a586ee68cfe1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html#gab441cee0de5867a868f3a586ee68cfe1\">notEqual</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gab441cee0de5867a868f3a586ee68cfe1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x != y.  <a href=\"a00255.html#gab441cee0de5867a868f3a586ee68cfe1\">More...</a><br /></td></tr>\n<tr class=\"separator:gab441cee0de5867a868f3a586ee68cfe1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5117a44c1bf21af857cd23e44a96d313\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5117a44c1bf21af857cd23e44a96d313\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html#ga5117a44c1bf21af857cd23e44a96d313\">notEqual</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:ga5117a44c1bf21af857cd23e44a96d313\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00255.html#ga5117a44c1bf21af857cd23e44a96d313\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5117a44c1bf21af857cd23e44a96d313\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00255.html\">GLM_EXT_quaternion_relational</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00134_source.html\">quaternion_relational.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00134_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_relational.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_relational.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00134.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_relational extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00255.html#gaa001eecb91106463169a8e5ef1577b39\">equal</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00255.html#gaa001eecb91106463169a8e5ef1577b39\">equal</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00255.html#ga5117a44c1bf21af857cd23e44a96d313\">notEqual</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        GLM_FUNC_DECL vec&lt;4, bool, Q&gt; <a class=\"code\" href=\"a00255.html#ga5117a44c1bf21af857cd23e44a96d313\">notEqual</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"preprocessor\">#include &quot;quaternion_relational.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00259_html_ga2a1e57fc5592b69cfae84174cbfc9429\"><div class=\"ttname\"><a href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">glm::epsilon</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class=\"ttdoc\">Return the epsilon constant for floating point types. </div></div>\n<div class=\"ttc\" id=\"a00255_html_ga5117a44c1bf21af857cd23e44a96d313\"><div class=\"ttname\"><a href=\"a00255.html#ga5117a44c1bf21af857cd23e44a96d313\">glm::notEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; notEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)</div><div class=\"ttdoc\">Returns the component-wise comparison of |x - y| >= epsilon. </div></div>\n<div class=\"ttc\" id=\"a00255_html_gaa001eecb91106463169a8e5ef1577b39\"><div class=\"ttname\"><a href=\"a00255.html#gaa001eecb91106463169a8e5ef1577b39\">glm::equal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt; equal(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)</div><div class=\"ttdoc\">Returns the component-wise comparison of |x - y| < epsilon. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00135.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_transform.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_transform.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00256.html\">GLM_EXT_quaternion_transform</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00135_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gabfc57de6d4d2e11970f54119c5ccf0f5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabfc57de6d4d2e11970f54119c5ccf0f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5\">rotate</a> (qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:gabfc57de6d4d2e11970f54119c5ccf0f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotates a quaternion from a vector of 3 components axis and an angle.  <a href=\"a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5\">More...</a><br /></td></tr>\n<tr class=\"separator:gabfc57de6d4d2e11970f54119c5ccf0f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00256.html\">GLM_EXT_quaternion_transform</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00135_source.html\">quaternion_transform.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00135_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_transform.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_transform.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00135.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../trigonometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../geometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_transform extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5\">rotate</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">axis</a>);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#include &quot;quaternion_transform.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00256_html_gabfc57de6d4d2e11970f54119c5ccf0f5\"><div class=\"ttname\"><a href=\"a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5\">glm::rotate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; rotate(qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</div><div class=\"ttdoc\">Rotates a quaternion from a vector of 3 components axis and an angle. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga764254f10248b505e936e5309a88c23d\"><div class=\"ttname\"><a href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">glm::axis</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; axis(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the q rotation axis. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00136.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_trigonometric.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_trigonometric.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00257.html\">GLM_EXT_quaternion_trigonometric</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00136_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8aa248b31d5ade470c87304df5eb7bd8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8aa248b31d5ade470c87304df5eb7bd8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8aa248b31d5ade470c87304df5eb7bd8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the quaternion rotation angle.  <a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8aa248b31d5ade470c87304df5eb7bd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c0095cfcb218c75a4b79d7687950036\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5c0095cfcb218c75a4b79d7687950036\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00257.html#ga5c0095cfcb218c75a4b79d7687950036\">angleAxis</a> (T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:ga5c0095cfcb218c75a4b79d7687950036\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a quaternion from an angle and a normalized axis.  <a href=\"a00257.html#ga5c0095cfcb218c75a4b79d7687950036\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c0095cfcb218c75a4b79d7687950036\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga764254f10248b505e936e5309a88c23d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga764254f10248b505e936e5309a88c23d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">axis</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga764254f10248b505e936e5309a88c23d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the q rotation axis.  <a href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga764254f10248b505e936e5309a88c23d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00257.html\">GLM_EXT_quaternion_trigonometric</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00136_source.html\">quaternion_trigonometric.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00136_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: quaternion_trigonometric.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">quaternion_trigonometric.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00136.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../trigonometric.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../exponential.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00145.html\">scalar_constants.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00224.html\">vector_relational.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_quaternion_trigonometric extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">axis</a>(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00257.html#ga5c0095cfcb218c75a4b79d7687950036\">angleAxis</a>(T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">axis</a>);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"preprocessor\">#include &quot;quaternion_trigonometric.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00224_html\"><div class=\"ttname\"><a href=\"a00224.html\">vector_relational.hpp</a></div><div class=\"ttdoc\">GLM_EXT_vector_relational </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga5c0095cfcb218c75a4b79d7687950036\"><div class=\"ttname\"><a href=\"a00257.html#ga5c0095cfcb218c75a4b79d7687950036\">glm::angleAxis</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; angleAxis(T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</div><div class=\"ttdoc\">Build a quaternion from an angle and a normalized axis. </div></div>\n<div class=\"ttc\" id=\"a00145_html\"><div class=\"ttname\"><a href=\"a00145.html\">scalar_constants.hpp</a></div><div class=\"ttdoc\">GLM_EXT_scalar_constants </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga764254f10248b505e936e5309a88c23d\"><div class=\"ttname\"><a href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">glm::axis</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; axis(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the q rotation axis. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00137.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: random.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">random.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00300.html\">GLM_GTC_random</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00137_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga7c53b7797f3147af68a11c767679fa3f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7c53b7797f3147af68a11c767679fa3f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga7c53b7797f3147af68a11c767679fa3f\">ballRand</a> (T Radius)</td></tr>\n<tr class=\"memdesc:ga7c53b7797f3147af68a11c767679fa3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius.  <a href=\"a00300.html#ga7c53b7797f3147af68a11c767679fa3f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c53b7797f3147af68a11c767679fa3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9dd05c36025088fae25b97c869e88517\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9dd05c36025088fae25b97c869e88517\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga9dd05c36025088fae25b97c869e88517\">circularRand</a> (T Radius)</td></tr>\n<tr class=\"memdesc:ga9dd05c36025088fae25b97c869e88517\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius.  <a href=\"a00300.html#ga9dd05c36025088fae25b97c869e88517\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9dd05c36025088fae25b97c869e88517\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73\">diskRand</a> (T Radius)</td></tr>\n<tr class=\"memdesc:gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius.  <a href=\"a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5193a83e49e4fdc5652c084711083574\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga5193a83e49e4fdc5652c084711083574\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga5193a83e49e4fdc5652c084711083574\">gaussRand</a> (genType Mean, genType Deviation)</td></tr>\n<tr class=\"memdesc:ga5193a83e49e4fdc5652c084711083574\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate random numbers in the interval [Min, Max], according a gaussian distribution.  <a href=\"a00300.html#ga5193a83e49e4fdc5652c084711083574\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5193a83e49e4fdc5652c084711083574\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04e241ab88374a477a2c2ceadd2fa03d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga04e241ab88374a477a2c2ceadd2fa03d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga04e241ab88374a477a2c2ceadd2fa03d\">linearRand</a> (genType Min, genType Max)</td></tr>\n<tr class=\"memdesc:ga04e241ab88374a477a2c2ceadd2fa03d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate random numbers in the interval [Min, Max], according a linear distribution.  <a href=\"a00300.html#ga04e241ab88374a477a2c2ceadd2fa03d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04e241ab88374a477a2c2ceadd2fa03d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94731130c298a9ff5e5025fdee6d97a0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga94731130c298a9ff5e5025fdee6d97a0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga94731130c298a9ff5e5025fdee6d97a0\">linearRand</a> (vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</td></tr>\n<tr class=\"memdesc:ga94731130c298a9ff5e5025fdee6d97a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate random numbers in the interval [Min, Max], according a linear distribution.  <a href=\"a00300.html#ga94731130c298a9ff5e5025fdee6d97a0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94731130c298a9ff5e5025fdee6d97a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga22f90fcaccdf001c516ca90f6428e138\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga22f90fcaccdf001c516ca90f6428e138\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga22f90fcaccdf001c516ca90f6428e138\">sphericalRand</a> (T Radius)</td></tr>\n<tr class=\"memdesc:ga22f90fcaccdf001c516ca90f6428e138\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius.  <a href=\"a00300.html#ga22f90fcaccdf001c516ca90f6428e138\">More...</a><br /></td></tr>\n<tr class=\"separator:ga22f90fcaccdf001c516ca90f6428e138\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00300.html\">GLM_GTC_random</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\ngtx_random (extended) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00137_source.html\">random.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00137_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: random.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">random.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00137.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_int_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_uint_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_random extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00300.html#ga94731130c298a9ff5e5025fdee6d97a0\">linearRand</a>(genType Min, genType Max);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00300.html#ga94731130c298a9ff5e5025fdee6d97a0\">linearRand</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Min, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Max);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00300.html#ga5193a83e49e4fdc5652c084711083574\">gaussRand</a>(genType Mean, genType Deviation);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, defaultp&gt; <a class=\"code\" href=\"a00300.html#ga9dd05c36025088fae25b97c869e88517\">circularRand</a>(T Radius);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, defaultp&gt; <a class=\"code\" href=\"a00300.html#ga22f90fcaccdf001c516ca90f6428e138\">sphericalRand</a>(T Radius);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, defaultp&gt; <a class=\"code\" href=\"a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73\">diskRand</a>(T Radius);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, defaultp&gt; <a class=\"code\" href=\"a00300.html#ga7c53b7797f3147af68a11c767679fa3f\">ballRand</a>(T Radius);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">#include &quot;random.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00300_html_ga9dd05c36025088fae25b97c869e88517\"><div class=\"ttname\"><a href=\"a00300.html#ga9dd05c36025088fae25b97c869e88517\">glm::circularRand</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt; circularRand(T Radius)</div><div class=\"ttdoc\">Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius...</div></div>\n<div class=\"ttc\" id=\"a00300_html_gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><div class=\"ttname\"><a href=\"a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73\">glm::diskRand</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt; diskRand(T Radius)</div><div class=\"ttdoc\">Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a...</div></div>\n<div class=\"ttc\" id=\"a00300_html_ga5193a83e49e4fdc5652c084711083574\"><div class=\"ttname\"><a href=\"a00300.html#ga5193a83e49e4fdc5652c084711083574\">glm::gaussRand</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType gaussRand(genType Mean, genType Deviation)</div><div class=\"ttdoc\">Generate random numbers in the interval [Min, Max], according a gaussian distribution. </div></div>\n<div class=\"ttc\" id=\"a00300_html_ga22f90fcaccdf001c516ca90f6428e138\"><div class=\"ttname\"><a href=\"a00300.html#ga22f90fcaccdf001c516ca90f6428e138\">glm::sphericalRand</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt; sphericalRand(T Radius)</div><div class=\"ttdoc\">Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius...</div></div>\n<div class=\"ttc\" id=\"a00300_html_ga7c53b7797f3147af68a11c767679fa3f\"><div class=\"ttname\"><a href=\"a00300.html#ga7c53b7797f3147af68a11c767679fa3f\">glm::ballRand</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt; ballRand(T Radius)</div><div class=\"ttdoc\">Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of...</div></div>\n<div class=\"ttc\" id=\"a00300_html_ga94731130c298a9ff5e5025fdee6d97a0\"><div class=\"ttname\"><a href=\"a00300.html#ga94731130c298a9ff5e5025fdee6d97a0\">glm::linearRand</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; linearRand(vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</div><div class=\"ttdoc\">Generate random numbers in the interval [Min, Max], according a linear distribution. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00138.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: range.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">range.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00353.html\">GLM_GTX_range</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00138_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00353.html\">GLM_GTX_range</a> </p>\n<dl class=\"section author\"><dt>Author</dt><dd>Joshua Moerman </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00138_source.html\">range.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00138_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: range.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">range.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00138.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_range is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_range extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/type_ptr.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#       if GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#               pragma warning(push)</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#               pragma warning(disable : 4100) // unreferenced formal parameter</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">inline</span> length_t components(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                <span class=\"keywordflow\">return</span> v.length();</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">inline</span> length_t components(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                <span class=\"keywordflow\">return</span> v.length();</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        <span class=\"keyword\">inline</span> length_t components(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                <span class=\"keywordflow\">return</span> v.length();</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">inline</span> length_t components(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                <span class=\"keywordflow\">return</span> v.length();</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">inline</span> length_t components(genType <span class=\"keyword\">const</span>&amp; m)</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                <span class=\"keywordflow\">return</span> m.length() * m[0].length();</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        <span class=\"keyword\">inline</span> <span class=\"keyword\">typename</span> genType::value_type <span class=\"keyword\">const</span> * begin(genType <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">value_ptr</a>(v);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">inline</span> <span class=\"keyword\">typename</span> genType::value_type <span class=\"keyword\">const</span> * end(genType <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                <span class=\"keywordflow\">return</span> begin(v) + components(v);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">inline</span> <span class=\"keyword\">typename</span> genType::value_type * begin(genType&amp; v)</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                <span class=\"keywordflow\">return</span> <a class=\"code\" href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">value_ptr</a>(v);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        <span class=\"keyword\">inline</span> <span class=\"keyword\">typename</span> genType::value_type * end(genType&amp; v)</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                <span class=\"keywordflow\">return</span> begin(v) + components(v);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;<span class=\"preprocessor\">#       if GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"preprocessor\">#               pragma warning(pop)</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00305_html_ga1c64669e1ba1160ad9386e43dc57569a\"><div class=\"ttname\"><a href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">glm::value_ptr</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType::value_type const * value_ptr(genType const &amp;v)</div><div class=\"ttdoc\">Return the constant address to the data of the input parameter. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00139.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: raw_data.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">raw_data.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00354.html\">GLM_GTX_raw_data</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00139_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga3005cb0d839d546c616becfa6602c607\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef detail::uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html#ga3005cb0d839d546c616becfa6602c607\">byte</a></td></tr>\n<tr class=\"memdesc:ga3005cb0d839d546c616becfa6602c607\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for byte numbers.  <a href=\"a00354.html#ga3005cb0d839d546c616becfa6602c607\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3005cb0d839d546c616becfa6602c607\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga86e46fff9f80ae33893d8d697f2ca98a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef detail::uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a\">dword</a></td></tr>\n<tr class=\"memdesc:ga86e46fff9f80ae33893d8d697f2ca98a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for dword numbers.  <a href=\"a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga86e46fff9f80ae33893d8d697f2ca98a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4021754ffb8e5ef14c75802b15657714\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef detail::uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html#ga4021754ffb8e5ef14c75802b15657714\">qword</a></td></tr>\n<tr class=\"memdesc:ga4021754ffb8e5ef14c75802b15657714\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for qword numbers.  <a href=\"a00354.html#ga4021754ffb8e5ef14c75802b15657714\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4021754ffb8e5ef14c75802b15657714\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16e9fea0ef1e6c4ef472d3d1731c49a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef detail::uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5\">word</a></td></tr>\n<tr class=\"memdesc:ga16e9fea0ef1e6c4ef472d3d1731c49a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for word numbers.  <a href=\"a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16e9fea0ef1e6c4ef472d3d1731c49a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00354.html\">GLM_GTX_raw_data</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00139_source.html\">raw_data.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00139_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: raw_data.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">raw_data.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00139.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_uint_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_raw_data is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_raw_data extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00354.html#ga3005cb0d839d546c616becfa6602c607\">   34</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8           <a class=\"code\" href=\"a00354.html#ga3005cb0d839d546c616becfa6602c607\">byte</a>;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5\">   38</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16          <a class=\"code\" href=\"a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5\">word</a>;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a\">   42</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32          <a class=\"code\" href=\"a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a\">dword</a>;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00354.html#ga4021754ffb8e5ef14c75802b15657714\">   46</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::uint64          <a class=\"code\" href=\"a00354.html#ga4021754ffb8e5ef14c75802b15657714\">qword</a>;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">#include &quot;raw_data.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00354_html_ga86e46fff9f80ae33893d8d697f2ca98a\"><div class=\"ttname\"><a href=\"a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a\">glm::dword</a></div><div class=\"ttdeci\">detail::uint32 dword</div><div class=\"ttdoc\">Type for dword numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00139_source.html#l00042\">raw_data.hpp:42</a></div></div>\n<div class=\"ttc\" id=\"a00354_html_ga3005cb0d839d546c616becfa6602c607\"><div class=\"ttname\"><a href=\"a00354.html#ga3005cb0d839d546c616becfa6602c607\">glm::byte</a></div><div class=\"ttdeci\">detail::uint8 byte</div><div class=\"ttdoc\">Type for byte numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00139_source.html#l00034\">raw_data.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00354_html_ga4021754ffb8e5ef14c75802b15657714\"><div class=\"ttname\"><a href=\"a00354.html#ga4021754ffb8e5ef14c75802b15657714\">glm::qword</a></div><div class=\"ttdeci\">detail::uint64 qword</div><div class=\"ttdoc\">Type for qword numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00139_source.html#l00046\">raw_data.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00354_html_ga16e9fea0ef1e6c4ef472d3d1731c49a5\"><div class=\"ttname\"><a href=\"a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5\">glm::word</a></div><div class=\"ttdeci\">detail::uint16 word</div><div class=\"ttdoc\">Type for word numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00139_source.html#l00038\">raw_data.hpp:38</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00140.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: reciprocal.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">reciprocal.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00301.html\">GLM_GTC_reciprocal</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00140_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaeadfb9c9d71093f7865b2ba2ca8d104d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaeadfb9c9d71093f7865b2ba2ca8d104d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d\">acot</a> (genType x)</td></tr>\n<tr class=\"memdesc:gaeadfb9c9d71093f7865b2ba2ca8d104d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse cotangent function.  <a href=\"a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeadfb9c9d71093f7865b2ba2ca8d104d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafaca98a7100170db8841f446282debfa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gafaca98a7100170db8841f446282debfa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#gafaca98a7100170db8841f446282debfa\">acoth</a> (genType x)</td></tr>\n<tr class=\"memdesc:gafaca98a7100170db8841f446282debfa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse cotangent hyperbolic function.  <a href=\"a00301.html#gafaca98a7100170db8841f446282debfa\">More...</a><br /></td></tr>\n<tr class=\"separator:gafaca98a7100170db8841f446282debfa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b4bed91476b9b915e76b4a30236d330\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga1b4bed91476b9b915e76b4a30236d330\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga1b4bed91476b9b915e76b4a30236d330\">acsc</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga1b4bed91476b9b915e76b4a30236d330\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse cosecant function.  <a href=\"a00301.html#ga1b4bed91476b9b915e76b4a30236d330\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1b4bed91476b9b915e76b4a30236d330\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b50aa5e5afc7e19ec113ab91596c576\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4b50aa5e5afc7e19ec113ab91596c576\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576\">acsch</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga4b50aa5e5afc7e19ec113ab91596c576\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse cosecant hyperbolic function.  <a href=\"a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b50aa5e5afc7e19ec113ab91596c576\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c5b7f962c2c9ff684e6d2de48db1f10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2c5b7f962c2c9ff684e6d2de48db1f10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10\">asec</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga2c5b7f962c2c9ff684e6d2de48db1f10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse secant function.  <a href=\"a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c5b7f962c2c9ff684e6d2de48db1f10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec7586dccfe431f850d006f3824b8ca6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaec7586dccfe431f850d006f3824b8ca6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#gaec7586dccfe431f850d006f3824b8ca6\">asech</a> (genType x)</td></tr>\n<tr class=\"memdesc:gaec7586dccfe431f850d006f3824b8ca6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse secant hyperbolic function.  <a href=\"a00301.html#gaec7586dccfe431f850d006f3824b8ca6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec7586dccfe431f850d006f3824b8ca6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a7b517a95bbd3ad74da3aea87a66314\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga3a7b517a95bbd3ad74da3aea87a66314\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314\">cot</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga3a7b517a95bbd3ad74da3aea87a66314\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Cotangent function.  <a href=\"a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a7b517a95bbd3ad74da3aea87a66314\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b8b770eb7198e4dea59d52e6db81442\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6b8b770eb7198e4dea59d52e6db81442\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga6b8b770eb7198e4dea59d52e6db81442\">coth</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga6b8b770eb7198e4dea59d52e6db81442\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Cotangent hyperbolic function.  <a href=\"a00301.html#ga6b8b770eb7198e4dea59d52e6db81442\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6b8b770eb7198e4dea59d52e6db81442\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga59dd0005b6474eea48af743b4f14ebbb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga59dd0005b6474eea48af743b4f14ebbb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga59dd0005b6474eea48af743b4f14ebbb\">csc</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga59dd0005b6474eea48af743b4f14ebbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Cosecant function.  <a href=\"a00301.html#ga59dd0005b6474eea48af743b4f14ebbb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga59dd0005b6474eea48af743b4f14ebbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d95843ff3ca6472ab399ba171d290a0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6d95843ff3ca6472ab399ba171d290a0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga6d95843ff3ca6472ab399ba171d290a0\">csch</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga6d95843ff3ca6472ab399ba171d290a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Cosecant hyperbolic function.  <a href=\"a00301.html#ga6d95843ff3ca6472ab399ba171d290a0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d95843ff3ca6472ab399ba171d290a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4bcbebee670c5ea155f0777b3acbd84\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae4bcbebee670c5ea155f0777b3acbd84\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#gae4bcbebee670c5ea155f0777b3acbd84\">sec</a> (genType angle)</td></tr>\n<tr class=\"memdesc:gae4bcbebee670c5ea155f0777b3acbd84\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Secant function.  <a href=\"a00301.html#gae4bcbebee670c5ea155f0777b3acbd84\">More...</a><br /></td></tr>\n<tr class=\"separator:gae4bcbebee670c5ea155f0777b3acbd84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a5cfd1e7170104a7b33863b1b75e5ae\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9a5cfd1e7170104a7b33863b1b75e5ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae\">sech</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga9a5cfd1e7170104a7b33863b1b75e5ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Secant hyperbolic function.  <a href=\"a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9a5cfd1e7170104a7b33863b1b75e5ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00301.html\">GLM_GTC_reciprocal</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00140_source.html\">reciprocal.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00140_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: reciprocal.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">reciprocal.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00140.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_reciprocal extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#gae4bcbebee670c5ea155f0777b3acbd84\">sec</a>(genType <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#ga59dd0005b6474eea48af743b4f14ebbb\">csc</a>(genType <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314\">cot</a>(genType <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10\">asec</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#ga1b4bed91476b9b915e76b4a30236d330\">acsc</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d\">acot</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae\">sech</a>(genType <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#ga6d95843ff3ca6472ab399ba171d290a0\">csch</a>(genType <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#ga6b8b770eb7198e4dea59d52e6db81442\">coth</a>(genType <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#gaec7586dccfe431f850d006f3824b8ca6\">asech</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576\">acsch</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00301.html#gafaca98a7100170db8841f446282debfa\">acoth</a>(genType x);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;<span class=\"preprocessor\">#include &quot;reciprocal.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00301_html_gae4bcbebee670c5ea155f0777b3acbd84\"><div class=\"ttname\"><a href=\"a00301.html#gae4bcbebee670c5ea155f0777b3acbd84\">glm::sec</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType sec(genType angle)</div><div class=\"ttdoc\">Secant function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_ga59dd0005b6474eea48af743b4f14ebbb\"><div class=\"ttname\"><a href=\"a00301.html#ga59dd0005b6474eea48af743b4f14ebbb\">glm::csc</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType csc(genType angle)</div><div class=\"ttdoc\">Cosecant function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_ga6b8b770eb7198e4dea59d52e6db81442\"><div class=\"ttname\"><a href=\"a00301.html#ga6b8b770eb7198e4dea59d52e6db81442\">glm::coth</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType coth(genType angle)</div><div class=\"ttdoc\">Cotangent hyperbolic function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_ga2c5b7f962c2c9ff684e6d2de48db1f10\"><div class=\"ttname\"><a href=\"a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10\">glm::asec</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType asec(genType x)</div><div class=\"ttdoc\">Inverse secant function. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00301_html_ga3a7b517a95bbd3ad74da3aea87a66314\"><div class=\"ttname\"><a href=\"a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314\">glm::cot</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType cot(genType angle)</div><div class=\"ttdoc\">Cotangent function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_ga1b4bed91476b9b915e76b4a30236d330\"><div class=\"ttname\"><a href=\"a00301.html#ga1b4bed91476b9b915e76b4a30236d330\">glm::acsc</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType acsc(genType x)</div><div class=\"ttdoc\">Inverse cosecant function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_ga9a5cfd1e7170104a7b33863b1b75e5ae\"><div class=\"ttname\"><a href=\"a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae\">glm::sech</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType sech(genType angle)</div><div class=\"ttdoc\">Secant hyperbolic function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_ga6d95843ff3ca6472ab399ba171d290a0\"><div class=\"ttname\"><a href=\"a00301.html#ga6d95843ff3ca6472ab399ba171d290a0\">glm::csch</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType csch(genType angle)</div><div class=\"ttdoc\">Cosecant hyperbolic function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_gafaca98a7100170db8841f446282debfa\"><div class=\"ttname\"><a href=\"a00301.html#gafaca98a7100170db8841f446282debfa\">glm::acoth</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType acoth(genType x)</div><div class=\"ttdoc\">Inverse cotangent hyperbolic function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_gaeadfb9c9d71093f7865b2ba2ca8d104d\"><div class=\"ttname\"><a href=\"a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d\">glm::acot</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType acot(genType x)</div><div class=\"ttdoc\">Inverse cotangent function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_gaec7586dccfe431f850d006f3824b8ca6\"><div class=\"ttname\"><a href=\"a00301.html#gaec7586dccfe431f850d006f3824b8ca6\">glm::asech</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType asech(genType x)</div><div class=\"ttdoc\">Inverse secant hyperbolic function. </div></div>\n<div class=\"ttc\" id=\"a00301_html_ga4b50aa5e5afc7e19ec113ab91596c576\"><div class=\"ttname\"><a href=\"a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576\">glm::acsch</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType acsch(genType x)</div><div class=\"ttdoc\">Inverse cosecant hyperbolic function. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00141.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: rotate_normalized_axis.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">rotate_normalized_axis.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00355.html\">GLM_GTX_rotate_normalized_axis</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00141_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga50efd7ebca0f7a603bb3cc11e34c708d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga50efd7ebca0f7a603bb3cc11e34c708d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00355.html#ga50efd7ebca0f7a603bb3cc11e34c708d\">rotateNormalizedAxis</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:ga50efd7ebca0f7a603bb3cc11e34c708d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a rotation 4 * 4 matrix created from a normalized axis and an angle.  <a href=\"a00355.html#ga50efd7ebca0f7a603bb3cc11e34c708d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50efd7ebca0f7a603bb3cc11e34c708d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga08f9c5411437d528019a25bfc01473d1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga08f9c5411437d528019a25bfc01473d1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00355.html#ga08f9c5411437d528019a25bfc01473d1\">rotateNormalizedAxis</a> (qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:ga08f9c5411437d528019a25bfc01473d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotates a quaternion from a vector of 3 components normalized axis and an angle.  <a href=\"a00355.html#ga08f9c5411437d528019a25bfc01473d1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga08f9c5411437d528019a25bfc01473d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00355.html\">GLM_GTX_rotate_normalized_axis</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00296.html\" title=\"Include <glm/gtc/matrix_transform.hpp> to use the features of this extension. \">GLM_GTC_matrix_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00141_source.html\">rotate_normalized_axis.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00141_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: rotate_normalized_axis.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">rotate_normalized_axis.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00141.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/epsilon.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_rotate_normalized_axis is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_rotate_normalized_axis extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00355.html#ga08f9c5411437d528019a25bfc01473d1\">rotateNormalizedAxis</a>(</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m,</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>,</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">axis</a>);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; <a class=\"code\" href=\"a00355.html#ga08f9c5411437d528019a25bfc01473d1\">rotateNormalizedAxis</a>(</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q,</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>,</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">axis</a>);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"preprocessor\">#include &quot;rotate_normalized_axis.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00355_html_ga08f9c5411437d528019a25bfc01473d1\"><div class=\"ttname\"><a href=\"a00355.html#ga08f9c5411437d528019a25bfc01473d1\">glm::rotateNormalizedAxis</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, Q &gt; rotateNormalizedAxis(qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</div><div class=\"ttdoc\">Rotates a quaternion from a vector of 3 components normalized axis and an angle. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga764254f10248b505e936e5309a88c23d\"><div class=\"ttname\"><a href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">glm::axis</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; axis(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the q rotation axis. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00142.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: rotate_vector.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">rotate_vector.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00356.html\">GLM_GTX_rotate_vector</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00142_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1a32fceb71962e6160e8af295c91930a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1a32fceb71962e6160e8af295c91930a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">orientation</a> (vec&lt; 3, T, Q &gt; const &amp;Normal, vec&lt; 3, T, Q &gt; const &amp;Up)</td></tr>\n<tr class=\"memdesc:ga1a32fceb71962e6160e8af295c91930a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a rotation matrix from a normal and a up vector.  <a href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a32fceb71962e6160e8af295c91930a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab64a67b52ff4f86c3ba16595a5a25af6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab64a67b52ff4f86c3ba16595a5a25af6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#gab64a67b52ff4f86c3ba16595a5a25af6\">rotate</a> (vec&lt; 2, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:gab64a67b52ff4f86c3ba16595a5a25af6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a two dimensional vector.  <a href=\"a00356.html#gab64a67b52ff4f86c3ba16595a5a25af6\">More...</a><br /></td></tr>\n<tr class=\"separator:gab64a67b52ff4f86c3ba16595a5a25af6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ba501ef83d1a009a17ac774cc560f21\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1ba501ef83d1a009a17ac774cc560f21\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga1ba501ef83d1a009a17ac774cc560f21\">rotate</a> (vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga1ba501ef83d1a009a17ac774cc560f21\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a three dimensional vector around an axis.  <a href=\"a00356.html#ga1ba501ef83d1a009a17ac774cc560f21\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1ba501ef83d1a009a17ac774cc560f21\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1005f1267ed9c57faa3f24cf6873b961\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1005f1267ed9c57faa3f24cf6873b961\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga1005f1267ed9c57faa3f24cf6873b961\">rotate</a> (vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga1005f1267ed9c57faa3f24cf6873b961\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a four dimensional vector around an axis.  <a href=\"a00356.html#ga1005f1267ed9c57faa3f24cf6873b961\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1005f1267ed9c57faa3f24cf6873b961\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga059fdbdba4cca35cdff172a9d0d0afc9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga059fdbdba4cca35cdff172a9d0d0afc9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga059fdbdba4cca35cdff172a9d0d0afc9\">rotateX</a> (vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga059fdbdba4cca35cdff172a9d0d0afc9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a three dimensional vector around the X axis.  <a href=\"a00356.html#ga059fdbdba4cca35cdff172a9d0d0afc9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga059fdbdba4cca35cdff172a9d0d0afc9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4333b1ea8ebf1bd52bc3801a7617398a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4333b1ea8ebf1bd52bc3801a7617398a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a\">rotateX</a> (vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga4333b1ea8ebf1bd52bc3801a7617398a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a four dimensional vector around the X axis.  <a href=\"a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4333b1ea8ebf1bd52bc3801a7617398a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebdc8b054ace27d9f62e054531c6f44d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaebdc8b054ace27d9f62e054531c6f44d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#gaebdc8b054ace27d9f62e054531c6f44d\">rotateY</a> (vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:gaebdc8b054ace27d9f62e054531c6f44d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a three dimensional vector around the Y axis.  <a href=\"a00356.html#gaebdc8b054ace27d9f62e054531c6f44d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaebdc8b054ace27d9f62e054531c6f44d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3ce3db0867b7f8efd878ee34f95a623b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3ce3db0867b7f8efd878ee34f95a623b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b\">rotateY</a> (vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga3ce3db0867b7f8efd878ee34f95a623b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a four dimensional vector around the Y axis.  <a href=\"a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3ce3db0867b7f8efd878ee34f95a623b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a048838a03f6249acbacb4dbacf79c4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5a048838a03f6249acbacb4dbacf79c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga5a048838a03f6249acbacb4dbacf79c4\">rotateZ</a> (vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga5a048838a03f6249acbacb4dbacf79c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a three dimensional vector around the Z axis.  <a href=\"a00356.html#ga5a048838a03f6249acbacb4dbacf79c4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5a048838a03f6249acbacb4dbacf79c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga923b75c6448161053768822d880702e6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga923b75c6448161053768822d880702e6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga923b75c6448161053768822d880702e6\">rotateZ</a> (vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga923b75c6448161053768822d880702e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a four dimensional vector around the Z axis.  <a href=\"a00356.html#ga923b75c6448161053768822d880702e6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga923b75c6448161053768822d880702e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b11b18ce824174ea1a5a69ea14e2cee\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8b11b18ce824174ea1a5a69ea14e2cee\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee\">slerp</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, T const &amp;a)</td></tr>\n<tr class=\"memdesc:ga8b11b18ce824174ea1a5a69ea14e2cee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns Spherical interpolation between two vectors.  <a href=\"a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b11b18ce824174ea1a5a69ea14e2cee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00356.html\">GLM_GTX_rotate_vector</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00362.html\" title=\"Include <glm/gtx/transform.hpp> to use the features of this extension. \">GLM_GTX_transform</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00142_source.html\">rotate_vector.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00142_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: rotate_vector.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">rotate_vector.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00142.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/transform.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/epsilon.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_rotate_vector is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_rotate_vector extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee\">slerp</a>(</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x,</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; y,</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                T <span class=\"keyword\">const</span>&amp; a);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga1005f1267ed9c57faa3f24cf6873b961\">rotate</a>(</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga1005f1267ed9c57faa3f24cf6873b961\">rotate</a>(</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>,</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; normal);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga1005f1267ed9c57faa3f24cf6873b961\">rotate</a>(</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>,</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; normal);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a\">rotateX</a>(</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b\">rotateY</a>(</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga923b75c6448161053768822d880702e6\">rotateZ</a>(</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a\">rotateX</a>(</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b\">rotateY</a>(</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga923b75c6448161053768822d880702e6\">rotateZ</a>(</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v,</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">orientation</a>(</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; Normal,</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; Up);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;<span class=\"preprocessor\">#include &quot;rotate_vector.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00356_html_ga923b75c6448161053768822d880702e6\"><div class=\"ttname\"><a href=\"a00356.html#ga923b75c6448161053768822d880702e6\">glm::rotateZ</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt; rotateZ(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</div><div class=\"ttdoc\">Rotate a four dimensional vector around the Z axis. </div></div>\n<div class=\"ttc\" id=\"a00356_html_ga3ce3db0867b7f8efd878ee34f95a623b\"><div class=\"ttname\"><a href=\"a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b\">glm::rotateY</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt; rotateY(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</div><div class=\"ttdoc\">Rotate a four dimensional vector around the Y axis. </div></div>\n<div class=\"ttc\" id=\"a00356_html_ga4333b1ea8ebf1bd52bc3801a7617398a\"><div class=\"ttname\"><a href=\"a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a\">glm::rotateX</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt; rotateX(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</div><div class=\"ttdoc\">Rotate a four dimensional vector around the X axis. </div></div>\n<div class=\"ttc\" id=\"a00356_html_ga8b11b18ce824174ea1a5a69ea14e2cee\"><div class=\"ttname\"><a href=\"a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee\">glm::slerp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; slerp(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, T const &amp;a)</div><div class=\"ttdoc\">Returns Spherical interpolation between two vectors. </div></div>\n<div class=\"ttc\" id=\"a00356_html_ga1a32fceb71962e6160e8af295c91930a\"><div class=\"ttname\"><a href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">glm::orientation</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; orientation(vec&lt; 3, T, Q &gt; const &amp;Normal, vec&lt; 3, T, Q &gt; const &amp;Up)</div><div class=\"ttdoc\">Build a rotation matrix from a normal and a up vector. </div></div>\n<div class=\"ttc\" id=\"a00356_html_ga1005f1267ed9c57faa3f24cf6873b961\"><div class=\"ttname\"><a href=\"a00356.html#ga1005f1267ed9c57faa3f24cf6873b961\">glm::rotate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt; rotate(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)</div><div class=\"ttdoc\">Rotate a four dimensional vector around an axis. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00143.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: round.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">round.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00302.html\">GLM_GTC_round</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00143_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1d89ac88582aaf4d5dfa5feb4a376fd4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga1d89ac88582aaf4d5dfa5feb4a376fd4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga1d89ac88582aaf4d5dfa5feb4a376fd4\">ceilMultiple</a> (genType v, genType Multiple)</td></tr>\n<tr class=\"memdesc:ga1d89ac88582aaf4d5dfa5feb4a376fd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00302.html#ga1d89ac88582aaf4d5dfa5feb4a376fd4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1d89ac88582aaf4d5dfa5feb4a376fd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\">ceilMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\">More...</a><br /></td></tr>\n<tr class=\"separator:gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c3ef36ae32aa4271f1544f92bd578b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga5c3ef36ae32aa4271f1544f92bd578b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga5c3ef36ae32aa4271f1544f92bd578b6\">ceilPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:ga5c3ef36ae32aa4271f1544f92bd578b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value, round up to a power of two.  <a href=\"a00302.html#ga5c3ef36ae32aa4271f1544f92bd578b6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c3ef36ae32aa4271f1544f92bd578b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab53d4a97c0d3e297be5f693cdfdfe5d2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab53d4a97c0d3e297be5f693cdfdfe5d2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2\">ceilPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gab53d4a97c0d3e297be5f693cdfdfe5d2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value, round up to a power of two.  <a href=\"a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2\">More...</a><br /></td></tr>\n<tr class=\"separator:gab53d4a97c0d3e297be5f693cdfdfe5d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ffa3cd5f2ea746ee1bf57c46da6315e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2ffa3cd5f2ea746ee1bf57c46da6315e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga2ffa3cd5f2ea746ee1bf57c46da6315e\">floorMultiple</a> (genType v, genType Multiple)</td></tr>\n<tr class=\"memdesc:ga2ffa3cd5f2ea746ee1bf57c46da6315e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00302.html#ga2ffa3cd5f2ea746ee1bf57c46da6315e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ffa3cd5f2ea746ee1bf57c46da6315e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacdd8901448f51f0b192380e422fae3e4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacdd8901448f51f0b192380e422fae3e4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gacdd8901448f51f0b192380e422fae3e4\">floorMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:gacdd8901448f51f0b192380e422fae3e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00302.html#gacdd8901448f51f0b192380e422fae3e4\">More...</a><br /></td></tr>\n<tr class=\"separator:gacdd8901448f51f0b192380e422fae3e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe273a57935d04c9db677bf67f9a71f4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gafe273a57935d04c9db677bf67f9a71f4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gafe273a57935d04c9db677bf67f9a71f4\">floorPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:gafe273a57935d04c9db677bf67f9a71f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value, round down to a power of two.  <a href=\"a00302.html#gafe273a57935d04c9db677bf67f9a71f4\">More...</a><br /></td></tr>\n<tr class=\"separator:gafe273a57935d04c9db677bf67f9a71f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf0d591a8fca8ddb9289cdeb44b989c2d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf0d591a8fca8ddb9289cdeb44b989c2d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d\">floorPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf0d591a8fca8ddb9289cdeb44b989c2d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value, round down to a power of two.  <a href=\"a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf0d591a8fca8ddb9289cdeb44b989c2d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab892defcc9c0b0618df7251253dc0fbb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gab892defcc9c0b0618df7251253dc0fbb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gab892defcc9c0b0618df7251253dc0fbb\">roundMultiple</a> (genType v, genType Multiple)</td></tr>\n<tr class=\"memdesc:gab892defcc9c0b0618df7251253dc0fbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00302.html#gab892defcc9c0b0618df7251253dc0fbb\">More...</a><br /></td></tr>\n<tr class=\"separator:gab892defcc9c0b0618df7251253dc0fbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f1a68332d761804c054460a612e3a4b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2f1a68332d761804c054460a612e3a4b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga2f1a68332d761804c054460a612e3a4b\">roundMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:ga2f1a68332d761804c054460a612e3a4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00302.html#ga2f1a68332d761804c054460a612e3a4b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f1a68332d761804c054460a612e3a4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4e1bf5d1cd179f59261a7342bdcafca\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gae4e1bf5d1cd179f59261a7342bdcafca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gae4e1bf5d1cd179f59261a7342bdcafca\">roundPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:gae4e1bf5d1cd179f59261a7342bdcafca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is the closet to the input value.  <a href=\"a00302.html#gae4e1bf5d1cd179f59261a7342bdcafca\">More...</a><br /></td></tr>\n<tr class=\"separator:gae4e1bf5d1cd179f59261a7342bdcafca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga258802a7d55c03c918f28cf4d241c4d0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga258802a7d55c03c918f28cf4d241c4d0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga258802a7d55c03c918f28cf4d241c4d0\">roundPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga258802a7d55c03c918f28cf4d241c4d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is the closet to the input value.  <a href=\"a00302.html#ga258802a7d55c03c918f28cf4d241c4d0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga258802a7d55c03c918f28cf4d241c4d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00302.html\">GLM_GTC_round</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00143_source.html\">round.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00143_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: round.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">round.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00143.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/_vectorize.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_round extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2\">ceilPowerOfTwo</a>(genIUType v);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2\">ceilPowerOfTwo</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d\">floorPowerOfTwo</a>(genIUType v);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d\">floorPowerOfTwo</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00302.html#ga258802a7d55c03c918f28cf4d241c4d0\">roundPowerOfTwo</a>(genIUType v);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00302.html#ga258802a7d55c03c918f28cf4d241c4d0\">roundPowerOfTwo</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\">ceilMultiple</a>(genType v, genType Multiple);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\">ceilMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Multiple);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00302.html#gacdd8901448f51f0b192380e422fae3e4\">floorMultiple</a>(genType v, genType Multiple);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00302.html#gacdd8901448f51f0b192380e422fae3e4\">floorMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Multiple);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00302.html#ga2f1a68332d761804c054460a612e3a4b\">roundMultiple</a>(genType v, genType Multiple);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00302.html#ga2f1a68332d761804c054460a612e3a4b\">roundMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Multiple);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;<span class=\"preprocessor\">#include &quot;round.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00302_html_ga258802a7d55c03c918f28cf4d241c4d0\"><div class=\"ttname\"><a href=\"a00302.html#ga258802a7d55c03c918f28cf4d241c4d0\">glm::roundPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; roundPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Return the power of two number which value is the closet to the input value. </div></div>\n<div class=\"ttc\" id=\"a00302_html_gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><div class=\"ttname\"><a href=\"a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\">glm::ceilMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; ceilMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</div><div class=\"ttdoc\">Higher multiple number of Source. </div></div>\n<div class=\"ttc\" id=\"a00302_html_gaf0d591a8fca8ddb9289cdeb44b989c2d\"><div class=\"ttname\"><a href=\"a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d\">glm::floorPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; floorPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Return the power of two number which value is just lower the input value, round down to a power of tw...</div></div>\n<div class=\"ttc\" id=\"a00302_html_ga2f1a68332d761804c054460a612e3a4b\"><div class=\"ttname\"><a href=\"a00302.html#ga2f1a68332d761804c054460a612e3a4b\">glm::roundMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; roundMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</div><div class=\"ttdoc\">Lower multiple number of Source. </div></div>\n<div class=\"ttc\" id=\"a00302_html_gab53d4a97c0d3e297be5f693cdfdfe5d2\"><div class=\"ttname\"><a href=\"a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2\">glm::ceilPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; ceilPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Return the power of two number which value is just higher the input value, round up to a power of two...</div></div>\n<div class=\"ttc\" id=\"a00302_html_gacdd8901448f51f0b192380e422fae3e4\"><div class=\"ttname\"><a href=\"a00302.html#gacdd8901448f51f0b192380e422fae3e4\">glm::floorMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; floorMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</div><div class=\"ttdoc\">Lower multiple number of Source. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00144.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_common.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_common.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00258.html\">GLM_EXT_scalar_common</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00144_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga36920478565cf608e93064283ce06421\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga36920478565cf608e93064283ce06421\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga36920478565cf608e93064283ce06421\">fmax</a> (T a, T b)</td></tr>\n<tr class=\"memdesc:ga36920478565cf608e93064283ce06421\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 2 inputs.  <a href=\"a00258.html#ga36920478565cf608e93064283ce06421\">More...</a><br /></td></tr>\n<tr class=\"separator:ga36920478565cf608e93064283ce06421\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0007bba71ca451ac70e99d28dfbeaab9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0007bba71ca451ac70e99d28dfbeaab9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga0007bba71ca451ac70e99d28dfbeaab9\">fmax</a> (T a, T b, T C)</td></tr>\n<tr class=\"memdesc:ga0007bba71ca451ac70e99d28dfbeaab9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 3 inputs.  <a href=\"a00258.html#ga0007bba71ca451ac70e99d28dfbeaab9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0007bba71ca451ac70e99d28dfbeaab9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27e260b1ff4d04c3ad4b864d26cbaf08\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga27e260b1ff4d04c3ad4b864d26cbaf08\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08\">fmax</a> (T a, T b, T C, T D)</td></tr>\n<tr class=\"memdesc:ga27e260b1ff4d04c3ad4b864d26cbaf08\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 4 inputs.  <a href=\"a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27e260b1ff4d04c3ad4b864d26cbaf08\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b2b438a765e2a62098c79eb212f28f0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7b2b438a765e2a62098c79eb212f28f0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga7b2b438a765e2a62098c79eb212f28f0\">fmin</a> (T a, T b)</td></tr>\n<tr class=\"memdesc:ga7b2b438a765e2a62098c79eb212f28f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 2 inputs.  <a href=\"a00258.html#ga7b2b438a765e2a62098c79eb212f28f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b2b438a765e2a62098c79eb212f28f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a95fe4cf5437e8133f1093fe9726a64\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga1a95fe4cf5437e8133f1093fe9726a64\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga1a95fe4cf5437e8133f1093fe9726a64\">fmin</a> (T a, T b, T c)</td></tr>\n<tr class=\"memdesc:ga1a95fe4cf5437e8133f1093fe9726a64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 3 inputs.  <a href=\"a00258.html#ga1a95fe4cf5437e8133f1093fe9726a64\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a95fe4cf5437e8133f1093fe9726a64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661\">fmin</a> (T a, T b, T c, T d)</td></tr>\n<tr class=\"memdesc:ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 4 inputs.  <a href=\"a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa20839d9ab14514f8966f69877ea0de8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa20839d9ab14514f8966f69877ea0de8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#gaa20839d9ab14514f8966f69877ea0de8\">max</a> (T a, T b, T c)</td></tr>\n<tr class=\"memdesc:gaa20839d9ab14514f8966f69877ea0de8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 3 inputs.  <a href=\"a00258.html#gaa20839d9ab14514f8966f69877ea0de8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa20839d9ab14514f8966f69877ea0de8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67\">max</a> (T a, T b, T c, T d)</td></tr>\n<tr class=\"memdesc:ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 4 inputs.  <a href=\"a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga420b37cbd98c395b93dab0278305cd46\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga420b37cbd98c395b93dab0278305cd46\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga420b37cbd98c395b93dab0278305cd46\">min</a> (T a, T b, T c)</td></tr>\n<tr class=\"memdesc:ga420b37cbd98c395b93dab0278305cd46\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 3 inputs.  <a href=\"a00258.html#ga420b37cbd98c395b93dab0278305cd46\">More...</a><br /></td></tr>\n<tr class=\"separator:ga420b37cbd98c395b93dab0278305cd46\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0d24a9acb8178df77e4aff90cbb2010d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0d24a9acb8178df77e4aff90cbb2010d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d\">min</a> (T a, T b, T c, T d)</td></tr>\n<tr class=\"memdesc:ga0d24a9acb8178df77e4aff90cbb2010d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 4 inputs.  <a href=\"a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0d24a9acb8178df77e4aff90cbb2010d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00258.html\">GLM_EXT_scalar_common</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00144_source.html\">scalar_common.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00144_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_common.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_common.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00144.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_scalar_common extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d\">min</a>(T a, T b, T c);</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d\">min</a>(T a, T b, T c, T d);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67\">max</a>(T a, T b, T c);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67\">max</a>(T a, T b, T c, T d);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661\">fmin</a>(T a, T b);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661\">fmin</a>(T a, T b, T c);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661\">fmin</a>(T a, T b, T c, T d);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08\">fmax</a>(T a, T b);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08\">fmax</a>(T a, T b, T C);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08\">fmax</a>(T a, T b, T C, T D);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"preprocessor\">#include &quot;scalar_common.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00258_html_ga0d24a9acb8178df77e4aff90cbb2010d\"><div class=\"ttname\"><a href=\"a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d\">glm::min</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T min(T a, T b, T c, T d)</div><div class=\"ttdoc\">Returns the minimum component-wise values of 4 inputs. </div></div>\n<div class=\"ttc\" id=\"a00258_html_ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><div class=\"ttname\"><a href=\"a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67\">glm::max</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T max(T a, T b, T c, T d)</div><div class=\"ttdoc\">Returns the maximum component-wise values of 4 inputs. </div></div>\n<div class=\"ttc\" id=\"a00258_html_ga27e260b1ff4d04c3ad4b864d26cbaf08\"><div class=\"ttname\"><a href=\"a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08\">glm::fmax</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fmax(T a, T b, T C, T D)</div><div class=\"ttdoc\">Returns the maximum component-wise values of 4 inputs. </div></div>\n<div class=\"ttc\" id=\"a00258_html_ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><div class=\"ttname\"><a href=\"a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661\">glm::fmin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T fmin(T a, T b, T c, T d)</div><div class=\"ttdoc\">Returns the minimum component-wise values of 4 inputs. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00145.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_constants.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_constants.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00259.html\">GLM_EXT_scalar_constants</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00145_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2a1e57fc5592b69cfae84174cbfc9429\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga2a1e57fc5592b69cfae84174cbfc9429\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2a1e57fc5592b69cfae84174cbfc9429\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a> ()</td></tr>\n<tr class=\"memdesc:ga2a1e57fc5592b69cfae84174cbfc9429\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the epsilon constant for floating point types. <br /></td></tr>\n<tr class=\"separator:ga2a1e57fc5592b69cfae84174cbfc9429\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94bafeb2a0f23ab6450fed1f98ee4e45\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga94bafeb2a0f23ab6450fed1f98ee4e45\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga94bafeb2a0f23ab6450fed1f98ee4e45\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00259.html#ga94bafeb2a0f23ab6450fed1f98ee4e45\">pi</a> ()</td></tr>\n<tr class=\"memdesc:ga94bafeb2a0f23ab6450fed1f98ee4e45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the pi constant for floating point types. <br /></td></tr>\n<tr class=\"separator:ga94bafeb2a0f23ab6450fed1f98ee4e45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00259.html\">GLM_EXT_scalar_constants</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00145_source.html\">scalar_constants.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00145_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_constants.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_constants.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00145.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_scalar_constants extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>();</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR genType <a class=\"code\" href=\"a00259.html#ga94bafeb2a0f23ab6450fed1f98ee4e45\">pi</a>();</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &quot;scalar_constants.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00259_html_ga94bafeb2a0f23ab6450fed1f98ee4e45\"><div class=\"ttname\"><a href=\"a00259.html#ga94bafeb2a0f23ab6450fed1f98ee4e45\">glm::pi</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType pi()</div><div class=\"ttdoc\">Return the pi constant for floating point types. </div></div>\n<div class=\"ttc\" id=\"a00259_html_ga2a1e57fc5592b69cfae84174cbfc9429\"><div class=\"ttname\"><a href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">glm::epsilon</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class=\"ttdoc\">Return the epsilon constant for floating point types. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00146.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_int_sized.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_int_sized.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00260.html\">GLM_EXT_scalar_int_sized</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00146_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga259fa4834387bd68627ddf37bb3ebdb9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga259fa4834387bd68627ddf37bb3ebdb9\"></a>\ntypedef detail::int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a></td></tr>\n<tr class=\"memdesc:ga259fa4834387bd68627ddf37bb3ebdb9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit signed integer type. <br /></td></tr>\n<tr class=\"separator:ga259fa4834387bd68627ddf37bb3ebdb9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43d43196463bde49cb067f5c20ab8481\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga43d43196463bde49cb067f5c20ab8481\"></a>\ntypedef detail::int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a></td></tr>\n<tr class=\"memdesc:ga43d43196463bde49cb067f5c20ab8481\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer type. <br /></td></tr>\n<tr class=\"separator:ga43d43196463bde49cb067f5c20ab8481\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaff5189f97f9e842d9636a0f240001b2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaff5189f97f9e842d9636a0f240001b2e\"></a>\ntypedef detail::int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a></td></tr>\n<tr class=\"memdesc:gaff5189f97f9e842d9636a0f240001b2e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit signed integer type. <br /></td></tr>\n<tr class=\"separator:gaff5189f97f9e842d9636a0f240001b2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b956fe1df85f3c132b21edb4e116458\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1b956fe1df85f3c132b21edb4e116458\"></a>\ntypedef detail::int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a></td></tr>\n<tr class=\"memdesc:ga1b956fe1df85f3c132b21edb4e116458\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit signed integer type. <br /></td></tr>\n<tr class=\"separator:ga1b956fe1df85f3c132b21edb4e116458\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00260.html\">GLM_EXT_scalar_int_sized</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00146_source.html\">scalar_int_sized.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00146_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_int_sized.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_int_sized.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00146.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_scalar_int_sized extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">std::int8_t</a>                     <a class=\"code\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">std::int16_t</a>            <a class=\"code\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">std::int32_t</a>            <a class=\"code\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">char</span>                     <a class=\"code\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">short</span>            <a class=\"code\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">int</span>                      <a class=\"code\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#endif//</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">struct </span>is_int&lt;int8&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                <span class=\"keyword\">enum</span> test {value = ~0};</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">struct </span>is_int&lt;int16&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                <span class=\"keyword\">enum</span> test {value = ~0};</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">struct </span>is_int&lt;<a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                <span class=\"keyword\">enum</span> test {value = ~0};</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">   58</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::int8            <a class=\"code\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">   61</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::int16           <a class=\"code\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">   64</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::int32           <a class=\"code\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">   67</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::int64           <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00304_html_ga4bf09d8838a86866b39ee6e109341645\"><div class=\"ttname\"><a href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">glm::int8_t</a></div><div class=\"ttdeci\">int8 int8_t</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00043\">fwd.hpp:43</a></div></div>\n<div class=\"ttc\" id=\"a00260_html_ga1b956fe1df85f3c132b21edb4e116458\"><div class=\"ttname\"><a href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">glm::int8</a></div><div class=\"ttdeci\">detail::int8 int8</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00146_source.html#l00058\">scalar_int_sized.hpp:58</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae8f5e3e964ca2ae240adc2c0d74adede\"><div class=\"ttname\"><a href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">glm::int16_t</a></div><div class=\"ttdeci\">int16 int16_t</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00057\">fwd.hpp:57</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga042ef09ff2f0cb24a36f541bcb3a3710\"><div class=\"ttname\"><a href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">glm::int32_t</a></div><div class=\"ttdeci\">int32 int32_t</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00071\">fwd.hpp:71</a></div></div>\n<div class=\"ttc\" id=\"a00260_html_gaff5189f97f9e842d9636a0f240001b2e\"><div class=\"ttname\"><a href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">glm::int64</a></div><div class=\"ttdeci\">detail::int64 int64</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00146_source.html#l00067\">scalar_int_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00260_html_ga43d43196463bde49cb067f5c20ab8481\"><div class=\"ttname\"><a href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">glm::int32</a></div><div class=\"ttdeci\">detail::int32 int32</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00146_source.html#l00064\">scalar_int_sized.hpp:64</a></div></div>\n<div class=\"ttc\" id=\"a00260_html_ga259fa4834387bd68627ddf37bb3ebdb9\"><div class=\"ttname\"><a href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">glm::int16</a></div><div class=\"ttdeci\">detail::int16 int16</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00146_source.html#l00061\">scalar_int_sized.hpp:61</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00147.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_integer.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_integer.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00261.html\">GLM_EXT_scalar_integer</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00147_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2777901e41ad6e1e9d0ad6cc855d1075\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga2777901e41ad6e1e9d0ad6cc855d1075\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075\">findNSB</a> (genIUType x, int significantBitCount)</td></tr>\n<tr class=\"memdesc:ga2777901e41ad6e1e9d0ad6cc855d1075\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the Nth significant bit set to 1 in the binary representation of value.  <a href=\"a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2777901e41ad6e1e9d0ad6cc855d1075\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec593d33956a8fe43f78fccc63ddde9a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gaec593d33956a8fe43f78fccc63ddde9a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gaec593d33956a8fe43f78fccc63ddde9a\">isMultiple</a> (genIUType v, genIUType Multiple)</td></tr>\n<tr class=\"memdesc:gaec593d33956a8fe43f78fccc63ddde9a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the 'Value' is a multiple of 'Multiple'.  <a href=\"a00261.html#gaec593d33956a8fe43f78fccc63ddde9a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec593d33956a8fe43f78fccc63ddde9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadf491730354aa7da67fbe23d4d688763\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gadf491730354aa7da67fbe23d4d688763\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gadf491730354aa7da67fbe23d4d688763\">isPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:gadf491730354aa7da67fbe23d4d688763\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the value is a power of two number.  <a href=\"a00261.html#gadf491730354aa7da67fbe23d4d688763\">More...</a><br /></td></tr>\n<tr class=\"separator:gadf491730354aa7da67fbe23d4d688763\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab770a3835c44c8a6fd225be4f4e6b317\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gab770a3835c44c8a6fd225be4f4e6b317\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gab770a3835c44c8a6fd225be4f4e6b317\">nextMultiple</a> (genIUType v, genIUType Multiple)</td></tr>\n<tr class=\"memdesc:gab770a3835c44c8a6fd225be4f4e6b317\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00261.html#gab770a3835c44c8a6fd225be4f4e6b317\">More...</a><br /></td></tr>\n<tr class=\"separator:gab770a3835c44c8a6fd225be4f4e6b317\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a37c2f2fd347886c9af6a3ca3db04dc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga3a37c2f2fd347886c9af6a3ca3db04dc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc\">nextPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:ga3a37c2f2fd347886c9af6a3ca3db04dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value, round up to a power of two.  <a href=\"a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a37c2f2fd347886c9af6a3ca3db04dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada3bdd871ffe31f2d484aa668362f636\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gada3bdd871ffe31f2d484aa668362f636\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gada3bdd871ffe31f2d484aa668362f636\">prevMultiple</a> (genIUType v, genIUType Multiple)</td></tr>\n<tr class=\"memdesc:gada3bdd871ffe31f2d484aa668362f636\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00261.html#gada3bdd871ffe31f2d484aa668362f636\">More...</a><br /></td></tr>\n<tr class=\"separator:gada3bdd871ffe31f2d484aa668362f636\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab21902a0e7e5a8451a7ad80333618727\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gab21902a0e7e5a8451a7ad80333618727\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gab21902a0e7e5a8451a7ad80333618727\">prevPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:gab21902a0e7e5a8451a7ad80333618727\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value, round down to a power of two.  <a href=\"a00261.html#gab21902a0e7e5a8451a7ad80333618727\">More...</a><br /></td></tr>\n<tr class=\"separator:gab21902a0e7e5a8451a7ad80333618727\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00261.html\">GLM_EXT_scalar_integer</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00147_source.html\">scalar_integer.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00147_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_integer.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_integer.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00147.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/_vectorize.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_float.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_scalar_integer extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00261.html#gadf491730354aa7da67fbe23d4d688763\">isPowerOfTwo</a>(genIUType v);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc\">nextPowerOfTwo</a>(genIUType v);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00261.html#gab21902a0e7e5a8451a7ad80333618727\">prevPowerOfTwo</a>(genIUType v);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00261.html#gaec593d33956a8fe43f78fccc63ddde9a\">isMultiple</a>(genIUType v, genIUType Multiple);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00261.html#gab770a3835c44c8a6fd225be4f4e6b317\">nextMultiple</a>(genIUType v, genIUType Multiple);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        GLM_FUNC_DECL genIUType <a class=\"code\" href=\"a00261.html#gada3bdd871ffe31f2d484aa668362f636\">prevMultiple</a>(genIUType v, genIUType Multiple);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genIUType&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> <a class=\"code\" href=\"a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075\">findNSB</a>(genIUType x, <span class=\"keywordtype\">int</span> significantBitCount);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\">#include &quot;scalar_integer.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00261_html_gab21902a0e7e5a8451a7ad80333618727\"><div class=\"ttname\"><a href=\"a00261.html#gab21902a0e7e5a8451a7ad80333618727\">glm::prevPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genIUType prevPowerOfTwo(genIUType v)</div><div class=\"ttdoc\">Return the power of two number which value is just lower the input value, round down to a power of tw...</div></div>\n<div class=\"ttc\" id=\"a00261_html_gada3bdd871ffe31f2d484aa668362f636\"><div class=\"ttname\"><a href=\"a00261.html#gada3bdd871ffe31f2d484aa668362f636\">glm::prevMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genIUType prevMultiple(genIUType v, genIUType Multiple)</div><div class=\"ttdoc\">Lower multiple number of Source. </div></div>\n<div class=\"ttc\" id=\"a00261_html_gaec593d33956a8fe43f78fccc63ddde9a\"><div class=\"ttname\"><a href=\"a00261.html#gaec593d33956a8fe43f78fccc63ddde9a\">glm::isMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool isMultiple(genIUType v, genIUType Multiple)</div><div class=\"ttdoc\">Return true if the &#39;Value&#39; is a multiple of &#39;Multiple&#39;. </div></div>\n<div class=\"ttc\" id=\"a00261_html_ga2777901e41ad6e1e9d0ad6cc855d1075\"><div class=\"ttname\"><a href=\"a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075\">glm::findNSB</a></div><div class=\"ttdeci\">GLM_FUNC_DECL int findNSB(genIUType x, int significantBitCount)</div><div class=\"ttdoc\">Returns the bit number of the Nth significant bit set to 1 in the binary representation of value...</div></div>\n<div class=\"ttc\" id=\"a00261_html_gab770a3835c44c8a6fd225be4f4e6b317\"><div class=\"ttname\"><a href=\"a00261.html#gab770a3835c44c8a6fd225be4f4e6b317\">glm::nextMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genIUType nextMultiple(genIUType v, genIUType Multiple)</div><div class=\"ttdoc\">Higher multiple number of Source. </div></div>\n<div class=\"ttc\" id=\"a00261_html_gadf491730354aa7da67fbe23d4d688763\"><div class=\"ttname\"><a href=\"a00261.html#gadf491730354aa7da67fbe23d4d688763\">glm::isPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool isPowerOfTwo(genIUType v)</div><div class=\"ttdoc\">Return true if the value is a power of two number. </div></div>\n<div class=\"ttc\" id=\"a00261_html_ga3a37c2f2fd347886c9af6a3ca3db04dc\"><div class=\"ttname\"><a href=\"a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc\">glm::nextPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genIUType nextPowerOfTwo(genIUType v)</div><div class=\"ttdoc\">Return the power of two number which value is just higher the input value, round up to a power of two...</div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00148.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_multiplication.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_multiplication.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00287.html\">Experimental extensions</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00148_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00287.html\">Experimental extensions</a> </p>\n<dl class=\"section author\"><dt>Author</dt><dd>Joshua Moerman</dd></dl>\n<p>Include &lt;<a class=\"el\" href=\"a00148.html\" title=\"Experimental extensions \">glm/gtx/scalar_multiplication.hpp</a>&gt; to use the features of this extension.</p>\n<p>Enables scalar multiplication for all types</p>\n<p>Since GLSL is very strict about types, the following (often used) combinations do not work: double * vec4 int * vec4 vec4 / int So we'll fix that! Of course \"float * vec4\" should remain the same (hence the enable_if magic) </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00148_source.html\">scalar_multiplication.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00148_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_multiplication.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_multiplication.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00148.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_scalar_multiplication is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_scalar_multiplication extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &lt;type_traits&gt;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, <span class=\"keyword\">typename</span> Vec&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        <span class=\"keyword\">using</span> return_type_scalar_multiplication = <span class=\"keyword\">typename</span> std::enable_if&lt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                !std::is_same&lt;T, float&gt;::value       <span class=\"comment\">// T may not be a float</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                &amp;&amp; std::is_arithmetic&lt;T&gt;::value, Vec <span class=\"comment\">// But it may be an int or double (no vec3 or mat3, ...)</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        &gt;::type;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#define GLM_IMPLEMENT_SCAL_MULT(Vec) \\</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">        template&lt;typename T&gt; \\</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">        return_type_scalar_multiplication&lt;T, Vec&gt; \\</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">        operator*(T const&amp; s, Vec rh){ \\</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">                return rh *= static_cast&lt;float&gt;(s); \\</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">        } \\</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">         \\</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">        template&lt;typename T&gt; \\</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">        return_type_scalar_multiplication&lt;T, Vec&gt; \\</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"preprocessor\">        operator*(Vec lh, T const&amp; s){ \\</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">                return lh *= static_cast&lt;float&gt;(s); \\</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"preprocessor\">        } \\</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"preprocessor\">         \\</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">        template&lt;typename T&gt; \\</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">        return_type_scalar_multiplication&lt;T, Vec&gt; \\</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"preprocessor\">        operator/(Vec lh, T const&amp; s){ \\</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"preprocessor\">                return lh *= 1.0f / s; \\</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"preprocessor\">        }</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a>)</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a>)</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a>)</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">mat2</a>)</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">mat2x3</a>)</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">mat2x4</a>)</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">mat3x2</a>)</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">mat3</a>)</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">mat3x4</a>)</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">mat4x2</a>)</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">mat4x3</a>)</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;GLM_IMPLEMENT_SCAL_MULT(<a class=\"code\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">mat4</a>)</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\">#undef GLM_IMPLEMENT_SCAL_MULT</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;} <span class=\"comment\">// namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_gabe65c061834f61b4f7cb6037b19006a4\"><div class=\"ttname\"><a href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">glm::vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, defaultp &gt; vec2</div><div class=\"ttdoc\">2 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00208_source.html#l00015\">vector_float2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga8e879b57ddd81e5bf5a88929844e8b40\"><div class=\"ttname\"><a href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">glm::mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, defaultp &gt; mat2x4</div><div class=\"ttdoc\">2 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00086_source.html#l00015\">matrix_float2x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00280_html_ga2c27aea32de57d58aec8e92d5d2181e2\"><div class=\"ttname\"><a href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">glm::mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, defaultp &gt; mat3x2</div><div class=\"ttdoc\">3 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00088_source.html#l00015\">matrix_float3x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaf991cad0b34f64e33af186326dbc4d66\"><div class=\"ttname\"><a href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">glm::mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, defaultp &gt; mat3x4</div><div class=\"ttdoc\">3 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00092_source.html#l00015\">matrix_float3x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gac7574544bb94777bdbd2eb224eb72fd0\"><div class=\"ttname\"><a href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">glm::mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, defaultp &gt; mat4x3</div><div class=\"ttdoc\">4 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00096_source.html#l00015\">matrix_float4x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gad941c947ad6cdd117a0e8554a4754983\"><div class=\"ttname\"><a href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">glm::mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, defaultp &gt; mat4x2</div><div class=\"ttdoc\">4 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00094_source.html#l00015\">matrix_float4x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gac215a35481a6597d1bf622a382e9d6e2\"><div class=\"ttname\"><a href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, defaultp &gt; vec4</div><div class=\"ttdoc\">4 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00212_source.html#l00015\">vector_float4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga0db98d836c5549d31cf64ecd043b7af7\"><div class=\"ttname\"><a href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">glm::mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, defaultp &gt; mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00098_source.html#l00020\">matrix_float4x4.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga9c3019b13faf179e4ad3626ea66df334\"><div class=\"ttname\"><a href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">glm::vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, defaultp &gt; vec3</div><div class=\"ttdoc\">3 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00210_source.html#l00015\">vector_float3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga493ab21243abe564b3f7d381e677d29a\"><div class=\"ttname\"><a href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">glm::mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, defaultp &gt; mat2x3</div><div class=\"ttdoc\">2 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00084_source.html#l00015\">matrix_float2x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga8dd59e7fc6913ac5d61b86553e9148ba\"><div class=\"ttname\"><a href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">glm::mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, defaultp &gt; mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00082_source.html#l00020\">matrix_float2x2.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaefb0fc7a4960b782c18708bb6b655262\"><div class=\"ttname\"><a href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">glm::mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, defaultp &gt; mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00090_source.html#l00020\">matrix_float3x3.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00149.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_relational.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">ext/scalar_relational.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00262.html\">GLM_EXT_scalar_relational</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00149_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a90ebafeace352ccc14055418ebd220be\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:a90ebafeace352ccc14055418ebd220be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>equal</b> (genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:a90ebafeace352ccc14055418ebd220be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00236.html#a90ebafeace352ccc14055418ebd220be\">More...</a><br /></td></tr>\n<tr class=\"separator:a90ebafeace352ccc14055418ebd220be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a865b9a427c42df73b8af9cd3f7f25394\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:a865b9a427c42df73b8af9cd3f7f25394\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>equal</b> (genType const &amp;x, genType const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:a865b9a427c42df73b8af9cd3f7f25394\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two scalars in term of ULPs.  <a href=\"a00236.html#a865b9a427c42df73b8af9cd3f7f25394\">More...</a><br /></td></tr>\n<tr class=\"separator:a865b9a427c42df73b8af9cd3f7f25394\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a835ecf946c74f3d68be93e70b10821e7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:a835ecf946c74f3d68be93e70b10821e7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>notEqual</b> (genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:a835ecf946c74f3d68be93e70b10821e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00236.html#a835ecf946c74f3d68be93e70b10821e7\">More...</a><br /></td></tr>\n<tr class=\"separator:a835ecf946c74f3d68be93e70b10821e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abd21e65b2e4c9d501d51536c4a6ef7cb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:abd21e65b2e4c9d501d51536c4a6ef7cb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>notEqual</b> (genType const &amp;x, genType const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:abd21e65b2e4c9d501d51536c4a6ef7cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two scalars in term of ULPs.  <a href=\"a00236.html#abd21e65b2e4c9d501d51536c4a6ef7cb\">More...</a><br /></td></tr>\n<tr class=\"separator:abd21e65b2e4c9d501d51536c4a6ef7cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00262.html\">GLM_EXT_scalar_relational</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00149_source.html\">ext/scalar_relational.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00149_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_relational.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ext/scalar_relational.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00149.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_scalar_relational extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f\">equal</a>(genType <span class=\"keyword\">const</span>&amp; x, genType <span class=\"keyword\">const</span>&amp; y, genType <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00246.html#ga8504f18a7e2bf315393032c2137dad83\">notEqual</a>(genType <span class=\"keyword\">const</span>&amp; x, genType <span class=\"keyword\">const</span>&amp; y, genType <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f\">equal</a>(genType <span class=\"keyword\">const</span>&amp; x, genType <span class=\"keyword\">const</span>&amp; y, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00246.html#ga8504f18a7e2bf315393032c2137dad83\">notEqual</a>(genType <span class=\"keyword\">const</span>&amp; x, genType <span class=\"keyword\">const</span>&amp; y, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#include &quot;scalar_relational.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00246_html_ga8504f18a7e2bf315393032c2137dad83\"><div class=\"ttname\"><a href=\"a00246.html#ga8504f18a7e2bf315393032c2137dad83\">glm::notEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt; notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Perform a component-wise not-equal-to comparison of two matrices. </div></div>\n<div class=\"ttc\" id=\"a00246_html_ga27e90dcb7941c9b70e295dc3f6f6369f\"><div class=\"ttname\"><a href=\"a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f\">glm::equal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt; equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Perform a component-wise equal-to comparison of two matrices. </div></div>\n<div class=\"ttc\" id=\"a00259_html_ga2a1e57fc5592b69cfae84174cbfc9429\"><div class=\"ttname\"><a href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">glm::epsilon</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class=\"ttdoc\">Return the epsilon constant for floating point types. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00150.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_relational.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/scalar_relational.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00357.html\">GLM_GTX_scalar_relational</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00150_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00357.html\">GLM_GTX_scalar_relational</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00150_source.html\">gtx/scalar_relational.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00150_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_relational.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/scalar_relational.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00150.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_extend extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#include &quot;scalar_relational.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00151.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_uint_sized.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_uint_sized.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00263.html\">GLM_EXT_scalar_uint_sized</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00151_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"></a>\ntypedef detail::uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a></td></tr>\n<tr class=\"memdesc:ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit unsigned integer type. <br /></td></tr>\n<tr class=\"separator:ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1134b580f8da4de94ca6b1de4d37975e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1134b580f8da4de94ca6b1de4d37975e\"></a>\ntypedef detail::uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a></td></tr>\n<tr class=\"memdesc:ga1134b580f8da4de94ca6b1de4d37975e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit unsigned integer type. <br /></td></tr>\n<tr class=\"separator:ga1134b580f8da4de94ca6b1de4d37975e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab630f76c26b50298187f7889104d4b9c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab630f76c26b50298187f7889104d4b9c\"></a>\ntypedef detail::uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a></td></tr>\n<tr class=\"memdesc:gab630f76c26b50298187f7889104d4b9c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit unsigned integer type. <br /></td></tr>\n<tr class=\"separator:gab630f76c26b50298187f7889104d4b9c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadde6aaee8457bee49c2a92621fe22b79\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadde6aaee8457bee49c2a92621fe22b79\"></a>\ntypedef detail::uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a></td></tr>\n<tr class=\"memdesc:gadde6aaee8457bee49c2a92621fe22b79\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit unsigned integer type. <br /></td></tr>\n<tr class=\"separator:gadde6aaee8457bee49c2a92621fe22b79\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00263.html\">GLM_EXT_scalar_uint_sized</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00151_source.html\">scalar_uint_sized.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00151_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_uint_sized.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_uint_sized.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00151.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_scalar_uint_sized extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">std::uint8_t</a>            <a class=\"code\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">std::uint16_t</a>           <a class=\"code\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">std::uint32_t</a>           <a class=\"code\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span>           <a class=\"code\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">short</span>          <a class=\"code\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>            <a class=\"code\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">struct </span>is_int&lt;uint8&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                <span class=\"keyword\">enum</span> test {value = ~0};</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">struct </span>is_int&lt;uint16&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                <span class=\"keyword\">enum</span> test {value = ~0};</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">struct </span>is_int&lt;<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                <span class=\"keyword\">enum</span> test {value = ~0};</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">   58</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8           <a class=\"code\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">   61</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16          <a class=\"code\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">   64</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32          <a class=\"code\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">   67</a></span>&#160;        <span class=\"keyword\">typedef</span> detail::uint64          <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00263_html_ga1134b580f8da4de94ca6b1de4d37975e\"><div class=\"ttname\"><a href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">glm::uint32</a></div><div class=\"ttdeci\">detail::uint32 uint32</div><div class=\"ttdoc\">32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00151_source.html#l00064\">scalar_uint_sized.hpp:64</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2171d9dc1fefb1c82e2817f45b622eac\"><div class=\"ttname\"><a href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">glm::uint32_t</a></div><div class=\"ttdeci\">uint32 uint32_t</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00129\">fwd.hpp:129</a></div></div>\n<div class=\"ttc\" id=\"a00263_html_ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"><div class=\"ttname\"><a href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">glm::uint16</a></div><div class=\"ttdeci\">detail::uint16 uint16</div><div class=\"ttdoc\">16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00151_source.html#l00061\">scalar_uint_sized.hpp:61</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga91f91f411080c37730856ff5887f5bcf\"><div class=\"ttname\"><a href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">glm::uint16_t</a></div><div class=\"ttdeci\">uint16 uint16_t</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00115\">fwd.hpp:115</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28d97808322d3c92186e4a0c067d7e8e\"><div class=\"ttname\"><a href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">glm::uint8_t</a></div><div class=\"ttdeci\">uint8 uint8_t</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00101\">fwd.hpp:101</a></div></div>\n<div class=\"ttc\" id=\"a00263_html_gab630f76c26b50298187f7889104d4b9c\"><div class=\"ttname\"><a href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">glm::uint64</a></div><div class=\"ttdeci\">detail::uint64 uint64</div><div class=\"ttdoc\">64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00151_source.html#l00067\">scalar_uint_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00263_html_gadde6aaee8457bee49c2a92621fe22b79\"><div class=\"ttname\"><a href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">glm::uint8</a></div><div class=\"ttdeci\">detail::uint8 uint8</div><div class=\"ttdoc\">8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00151_source.html#l00058\">scalar_uint_sized.hpp:58</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00152.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_ulp.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_ulp.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00264.html\">GLM_EXT_scalar_ulp</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00152_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ae609a2729cacccbabe966221d61e0dc4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>floatDistance</b> (float x, float y)</td></tr>\n<tr class=\"memdesc:ae609a2729cacccbabe966221d61e0dc4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the distance in the number of ULP between 2 single-precision floating-point scalars.  <a href=\"a00236.html#ae609a2729cacccbabe966221d61e0dc4\">More...</a><br /></td></tr>\n<tr class=\"separator:ae609a2729cacccbabe966221d61e0dc4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4b76118ff56adfbc41a5925908b48606\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>floatDistance</b> (double x, double y)</td></tr>\n<tr class=\"memdesc:a4b76118ff56adfbc41a5925908b48606\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the distance in the number of ULP between 2 double-precision floating-point scalars.  <a href=\"a00236.html#a4b76118ff56adfbc41a5925908b48606\">More...</a><br /></td></tr>\n<tr class=\"separator:a4b76118ff56adfbc41a5925908b48606\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a30bc0280e7cefd159867b1aa5050b94a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:a30bc0280e7cefd159867b1aa5050b94a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>nextFloat</b> (genType x)</td></tr>\n<tr class=\"memdesc:a30bc0280e7cefd159867b1aa5050b94a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the next ULP value(s) after the input value(s).  <a href=\"a00236.html#a30bc0280e7cefd159867b1aa5050b94a\">More...</a><br /></td></tr>\n<tr class=\"separator:a30bc0280e7cefd159867b1aa5050b94a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a54eb5916c5250c8f0ad8224fb8e0d392\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:a54eb5916c5250c8f0ad8224fb8e0d392\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>nextFloat</b> (genType x, int ULPs)</td></tr>\n<tr class=\"memdesc:a54eb5916c5250c8f0ad8224fb8e0d392\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance after the input value(s).  <a href=\"a00236.html#a54eb5916c5250c8f0ad8224fb8e0d392\">More...</a><br /></td></tr>\n<tr class=\"separator:a54eb5916c5250c8f0ad8224fb8e0d392\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a25320ace5b3e239405077912eb4e7bf9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:a25320ace5b3e239405077912eb4e7bf9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prevFloat</b> (genType x)</td></tr>\n<tr class=\"memdesc:a25320ace5b3e239405077912eb4e7bf9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the previous ULP value(s) before the input value(s).  <a href=\"a00236.html#a25320ace5b3e239405077912eb4e7bf9\">More...</a><br /></td></tr>\n<tr class=\"separator:a25320ace5b3e239405077912eb4e7bf9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a760b98a221f1f511edbcdf0b06c49841\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:a760b98a221f1f511edbcdf0b06c49841\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prevFloat</b> (genType x, int ULPs)</td></tr>\n<tr class=\"memdesc:a760b98a221f1f511edbcdf0b06c49841\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance before the input value(s).  <a href=\"a00236.html#a760b98a221f1f511edbcdf0b06c49841\">More...</a><br /></td></tr>\n<tr class=\"separator:a760b98a221f1f511edbcdf0b06c49841\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00264.html\">GLM_EXT_scalar_ulp</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00152_source.html\">scalar_ulp.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00152_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: scalar_ulp.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">scalar_ulp.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00152.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_int_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_scalar_ulp extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL genType nextFloat(genType x);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL genType prevFloat(genType x);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL genType nextFloat(genType x, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_FUNC_DECL genType prevFloat(genType x, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> floatDistance(<span class=\"keywordtype\">float</span> x, <span class=\"keywordtype\">float</span> y);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> floatDistance(<span class=\"keywordtype\">double</span> x, <span class=\"keywordtype\">double</span> y);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\">#include &quot;scalar_ulp.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00260_html_gaff5189f97f9e842d9636a0f240001b2e\"><div class=\"ttname\"><a href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">glm::int64</a></div><div class=\"ttdeci\">detail::int64 int64</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00146_source.html#l00067\">scalar_int_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00153_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: setup.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">setup.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#ifndef GLM_SETUP_INCLUDED</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#include &lt;cassert&gt;</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#define GLM_VERSION_MAJOR                       0</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#define GLM_VERSION_MINOR                       9</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#define GLM_VERSION_PATCH                       9</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#define GLM_VERSION_REVISION            6</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#define GLM_VERSION                                     996</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#define GLM_VERSION_MESSAGE                     &quot;GLM: version 0.9.9.6&quot;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#define GLM_SETUP_INCLUDED                      GLM_VERSION</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Active states</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#define GLM_DISABLE             0</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#define GLM_ENABLE              1</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"comment\">// Messages</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_MESSAGES)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       define GLM_MESSAGES GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       define GLM_MESSAGES GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"comment\">// Detect the platform</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#include &quot;../simd/platform.h&quot;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"comment\">// Build model</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#if defined(__arch64__) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__)</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#       define GLM_MODEL        GLM_MODEL_64</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#elif defined(__i386__) || defined(__ppc__)</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#       define GLM_MODEL        GLM_MODEL_32</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#       define GLM_MODEL        GLM_MODEL_32</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#endif//</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">#if !defined(GLM_MODEL) &amp;&amp; GLM_COMPILER != 0</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#       error &quot;GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message.&quot;</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">#endif//GLM_MODEL</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"comment\">// C++ Version</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"comment\">// User defines: GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_FORCE_CXX11, GLM_FORCE_CXX14, GLM_FORCE_CXX17, GLM_FORCE_CXX2A</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX98_FLAG                     (1 &lt;&lt; 1)</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX03_FLAG                     (1 &lt;&lt; 2)</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX0X_FLAG                     (1 &lt;&lt; 3)</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX11_FLAG                     (1 &lt;&lt; 4)</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX14_FLAG                     (1 &lt;&lt; 5)</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX17_FLAG                     (1 &lt;&lt; 6)</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX2A_FLAG                     (1 &lt;&lt; 7)</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXXMS_FLAG                     (1 &lt;&lt; 8)</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXXGNU_FLAG            (1 &lt;&lt; 9)</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX98                  GLM_LANG_CXX98_FLAG</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX03                  (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX0X                  (GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX11                  (GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX14                  (GLM_LANG_CXX11 | GLM_LANG_CXX14_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX17                  (GLM_LANG_CXX14 | GLM_LANG_CXX17_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXX2A                  (GLM_LANG_CXX17 | GLM_LANG_CXX2A_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXXMS                  GLM_LANG_CXXMS_FLAG</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;<span class=\"preprocessor\">#define GLM_LANG_CXXGNU                 GLM_LANG_CXXGNU_FLAG</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"preprocessor\">#if (defined(_MSC_EXTENSIONS))</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\">#elif ((GLM_COMPILER &amp; (GLM_COMPILER_CLANG | GLM_COMPILER_GCC)) &amp;&amp; (GLM_ARCH &amp; GLM_ARCH_SIMD_BIT))</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG_EXT 0</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"preprocessor\">#if (defined(GLM_FORCE_CXX_UNKNOWN))</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG 0</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_CXX2A)</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG_STL11_FORCED</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_CXX17)</span></div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG_STL11_FORCED</span></div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_CXX14)</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG_STL11_FORCED</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_CXX11)</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG_STL11_FORCED</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_CXX03)</span></div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG (GLM_LANG_CXX03 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_CXX98)</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;<span class=\"preprocessor\">#       define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;<span class=\"preprocessor\">#       if GLM_COMPILER &amp; GLM_COMPILER_VC &amp;&amp; defined(_MSVC_LANG)</span></div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;<span class=\"preprocessor\">#               if GLM_COMPILER &gt;= GLM_COMPILER_VC15_7</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;<span class=\"preprocessor\">#                       define GLM_LANG_PLATFORM _MSVC_LANG</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;<span class=\"preprocessor\">#               elif GLM_COMPILER &gt;= GLM_COMPILER_VC15</span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;<span class=\"preprocessor\">#                       if _MSVC_LANG &gt; 201402L</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;<span class=\"preprocessor\">#                               define GLM_LANG_PLATFORM 201402L</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;<span class=\"preprocessor\">#                       else</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;<span class=\"preprocessor\">#                               define GLM_LANG_PLATFORM _MSVC_LANG</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;<span class=\"preprocessor\">#                       define GLM_LANG_PLATFORM 0</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;<span class=\"preprocessor\">#               define GLM_LANG_PLATFORM 0</span></div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;<span class=\"preprocessor\">#       if __cplusplus &gt; 201703L || GLM_LANG_PLATFORM &gt; 201703L</span></div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;<span class=\"preprocessor\">#               define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;<span class=\"preprocessor\">#       elif __cplusplus == 201703L || GLM_LANG_PLATFORM == 201703L</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;<span class=\"preprocessor\">#               define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"preprocessor\">#       elif __cplusplus == 201402L || __cplusplus == 201500L || GLM_LANG_PLATFORM == 201402L</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;<span class=\"preprocessor\">#               define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;<span class=\"preprocessor\">#       elif __cplusplus == 201103L || GLM_LANG_PLATFORM == 201103L</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;<span class=\"preprocessor\">#               define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;<span class=\"preprocessor\">#       elif defined(__INTEL_CXX11_MODE__) || defined(_MSC_VER) || defined(__GXX_EXPERIMENTAL_CXX0X__)</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;<span class=\"preprocessor\">#               define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;<span class=\"preprocessor\">#       elif __cplusplus == 199711L</span></div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;<span class=\"preprocessor\">#               define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;<span class=\"preprocessor\">#               define GLM_LANG (0 | GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;<span class=\"comment\">// Has of C++ features</span></div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;<span class=\"comment\">// http://clang.llvm.org/cxx_status.html</span></div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;<span class=\"comment\">// http://gcc.gnu.org/projects/cxx0x.html</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;<span class=\"comment\">// http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;<span class=\"comment\">// Android has multiple STLs but C++11 STL detection doesn&#39;t always work #284 #564</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;<span class=\"preprocessor\">#if GLM_PLATFORM == GLM_PLATFORM_ANDROID &amp;&amp; !defined(GLM_LANG_STL11_FORCED)</span></div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_CXX11_STL 0</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;<span class=\"preprocessor\">#elif GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;<span class=\"preprocessor\">#       if (defined(_LIBCPP_VERSION) || (GLM_LANG &amp; GLM_LANG_CXX11_FLAG) || defined(GLM_LANG_STL11_FORCED))</span></div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;<span class=\"preprocessor\">#               define GLM_HAS_CXX11_STL 1</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;<span class=\"preprocessor\">#               define GLM_HAS_CXX11_STL 0</span></div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_CXX11_STL 1</span></div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_CXX11_STL ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_GCC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_GCC48)) || \\</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC12)) || \\</span></div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;<span class=\"preprocessor\">                ((GLM_PLATFORM != GLM_PLATFORM_WINDOWS) &amp;&amp; (GLM_COMPILER &amp; GLM_COMPILER_INTEL) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_INTEL15))))</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;<span class=\"comment\">// N1720</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_STATIC_ASSERT __has_feature(cxx_static_assert)</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_STATIC_ASSERT 1</span></div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_STATIC_ASSERT ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA)) || \\</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC))))</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;<span class=\"comment\">// N1988</span></div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;<span class=\"preprocessor\">#if GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_EXTENDED_INTEGER_TYPE 1</span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_EXTENDED_INTEGER_TYPE (\\</span></div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;<span class=\"preprocessor\">                ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (GLM_COMPILER &amp; GLM_COMPILER_VC)) || \\</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"preprocessor\">                ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (GLM_COMPILER &amp; GLM_COMPILER_CUDA)) || \\</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;<span class=\"preprocessor\">                ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (GLM_COMPILER &amp; GLM_COMPILER_CLANG)))</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;<span class=\"comment\">// N2672 Initializer lists http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm</span></div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_INITIALIZER_LISTS __has_feature(cxx_generalized_initializers)</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_INITIALIZER_LISTS 1</span></div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_INITIALIZER_LISTS ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC15)) || \\</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_INTEL) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_INTEL14)) || \\</span></div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA))))</span></div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;<span class=\"comment\">// N2544 Unrestricted unions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf</span></div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions)</span></div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_UNRESTRICTED_UNIONS 1</span></div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_UNRESTRICTED_UNIONS (GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;<span class=\"preprocessor\">                (GLM_COMPILER &amp; GLM_COMPILER_VC) || \\</span></div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA)))</span></div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;<span class=\"comment\">// N2346</span></div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_DEFAULTED_FUNCTIONS __has_feature(cxx_defaulted_functions)</span></div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_DEFAULTED_FUNCTIONS 1</span></div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_DEFAULTED_FUNCTIONS ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC12)) || \\</span></div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_INTEL)) || \\</span></div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;<span class=\"preprocessor\">                (GLM_COMPILER &amp; GLM_COMPILER_CUDA)))</span></div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;<span class=\"comment\">// N2118</span></div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_RVALUE_REFERENCES __has_feature(cxx_rvalue_references)</span></div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_RVALUE_REFERENCES 1</span></div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_RVALUE_REFERENCES ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC)) || \\</span></div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA))))</span></div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;<span class=\"comment\">// N2437 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf</span></div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS __has_feature(cxx_explicit_conversions)</span></div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1</span></div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_INTEL) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_INTEL14)) || \\</span></div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC12)) || \\</span></div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA))))</span></div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;<span class=\"comment\">// N2258 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf</span></div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_TEMPLATE_ALIASES __has_feature(cxx_alias_templates)</span></div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_TEMPLATE_ALIASES 1</span></div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_TEMPLATE_ALIASES ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_INTEL)) || \\</span></div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC12)) || \\</span></div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA))))</span></div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;<span class=\"comment\">// N2930 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html</span></div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_RANGE_FOR __has_feature(cxx_range_for)</span></div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_RANGE_FOR 1</span></div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_RANGE_FOR ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_INTEL)) || \\</span></div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC)) || \\</span></div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA))))</span></div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;<span class=\"comment\">// N2341 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf</span></div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_ALIGNOF __has_feature(cxx_alignas)</span></div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;<span class=\"preprocessor\">#elif GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_ALIGNOF 1</span></div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_ALIGNOF ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_INTEL) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_INTEL15)) || \\</span></div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC14)) || \\</span></div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA))))</span></div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;<span class=\"comment\">// N2235 Generalized Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf</span></div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;<span class=\"comment\">// N3652 Extended Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html</span></div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;<span class=\"preprocessor\">#if (GLM_ARCH &amp; GLM_ARCH_SIMD_BIT) // Compiler SIMD intrinsics don&#39;t support constexpr...</span></div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_CONSTEXPR 0</span></div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;<span class=\"preprocessor\">#elif (GLM_COMPILER &amp; GLM_COMPILER_CLANG)</span></div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_CONSTEXPR __has_feature(cxx_relaxed_constexpr)</span></div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;<span class=\"preprocessor\">#elif (GLM_LANG &amp; GLM_LANG_CXX14_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_CONSTEXPR 1</span></div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_CONSTEXPR ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; GLM_HAS_INITIALIZER_LISTS &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_INTEL) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_INTEL17)) || \\</span></div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC15))))</span></div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_CONSTEXPR</span></div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;<span class=\"preprocessor\">#       define GLM_CONSTEXPR constexpr</span></div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;<span class=\"preprocessor\">#       define GLM_CONSTEXPR</span></div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_CONSTEXPR</span></div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;<span class=\"preprocessor\"># if (GLM_COMPILER &amp; GLM_COMPILER_CLANG)</span></div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;<span class=\"preprocessor\">#       if __has_feature(cxx_if_constexpr)</span></div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;<span class=\"preprocessor\">#               define GLM_HAS_IF_CONSTEXPR 1</span></div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;<span class=\"preprocessor\">#               define GLM_HAS_IF_CONSTEXPR 0</span></div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;<span class=\"preprocessor\"># elif (GLM_LANG &amp; GLM_LANG_CXX17_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_IF_CONSTEXPR 1</span></div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;<span class=\"preprocessor\"># else</span></div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_IF_CONSTEXPR 0</span></div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;<span class=\"preprocessor\"># endif</span></div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_IF_CONSTEXPR 0</span></div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_IF_CONSTEXPR</span></div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;<span class=\"preprocessor\">#       define GLM_IF_CONSTEXPR if constexpr</span></div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;<span class=\"preprocessor\">#       define GLM_IF_CONSTEXPR if</span></div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;<span class=\"preprocessor\">#if GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_ASSIGNABLE 1</span></div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_ASSIGNABLE ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC15)) || \\</span></div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_GCC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_GCC49))))</span></div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;<span class=\"preprocessor\">#define GLM_HAS_TRIVIAL_QUERIES 0</span></div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;<span class=\"preprocessor\">#if GLM_LANG &amp; GLM_LANG_CXX11_FLAG</span></div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_MAKE_SIGNED 1</span></div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_MAKE_SIGNED ((GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC12)) || \\</span></div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_CUDA))))</span></div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;<span class=\"comment\">//</span></div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_INTRINSICS)</span></div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_BITSCAN_WINDOWS ((GLM_PLATFORM &amp; GLM_PLATFORM_WINDOWS) &amp;&amp; (\\</span></div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_INTEL)) || \\</span></div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;<span class=\"preprocessor\">                ((GLM_COMPILER &amp; GLM_COMPILER_VC) &amp;&amp; (GLM_COMPILER &gt;= GLM_COMPILER_VC14) &amp;&amp; (GLM_ARCH &amp; GLM_ARCH_X86_BIT))))</span></div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_BITSCAN_WINDOWS 0</span></div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;<span class=\"comment\">// OpenMP</span></div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;<span class=\"preprocessor\">#ifdef _OPENMP</span></div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;<span class=\"preprocessor\">#       if GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;<span class=\"preprocessor\">#               if GLM_COMPILER &gt;= GLM_COMPILER_GCC61</span></div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;<span class=\"preprocessor\">#                       define GLM_HAS_OPENMP 45</span></div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;<span class=\"preprocessor\">#               elif GLM_COMPILER &gt;= GLM_COMPILER_GCC49</span></div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;<span class=\"preprocessor\">#                       define GLM_HAS_OPENMP 40</span></div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;<span class=\"preprocessor\">#               elif GLM_COMPILER &gt;= GLM_COMPILER_GCC47</span></div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;<span class=\"preprocessor\">#                       define GLM_HAS_OPENMP 31</span></div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;<span class=\"preprocessor\">#                       define GLM_HAS_OPENMP 0</span></div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;<span class=\"preprocessor\">#               if GLM_COMPILER &gt;= GLM_COMPILER_CLANG38</span></div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;<span class=\"preprocessor\">#                       define GLM_HAS_OPENMP 31</span></div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;<span class=\"preprocessor\">#                       define GLM_HAS_OPENMP 0</span></div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;<span class=\"preprocessor\">#               define GLM_HAS_OPENMP 20</span></div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_INTEL</span></div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;<span class=\"preprocessor\">#               if GLM_COMPILER &gt;= GLM_COMPILER_INTEL16</span></div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;<span class=\"preprocessor\">#                       define GLM_HAS_OPENMP 40</span></div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;<span class=\"preprocessor\">#                       define GLM_HAS_OPENMP 0</span></div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;<span class=\"preprocessor\">#               define GLM_HAS_OPENMP 0</span></div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;<span class=\"preprocessor\">#       define GLM_HAS_OPENMP 0</span></div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;<span class=\"comment\">// nullptr</span></div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;<span class=\"preprocessor\">#if GLM_LANG &amp; GLM_LANG_CXX0X_FLAG</span></div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_NULLPTR GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_NULLPTR GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;<span class=\"preprocessor\">#if GLM_CONFIG_NULLPTR == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;<span class=\"preprocessor\">#       define GLM_NULLPTR nullptr</span></div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;<span class=\"preprocessor\">#       define GLM_NULLPTR 0</span></div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;<span class=\"comment\">// Static assert</span></div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;</div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_STATIC_ASSERT</span></div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;<span class=\"preprocessor\">#       define GLM_STATIC_ASSERT(x, message) static_assert(x, message)</span></div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;<span class=\"preprocessor\">#elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;<span class=\"preprocessor\">#       define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1]</span></div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;<span class=\"preprocessor\">#       define GLM_STATIC_ASSERT(x, message) assert(x)</span></div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;<span class=\"preprocessor\">#endif//GLM_LANG</span></div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;<span class=\"comment\">// Qualifiers</span></div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER &amp; GLM_COMPILER_CUDA</span></div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;<span class=\"preprocessor\">#       define GLM_CUDA_FUNC_DEF __device__ __host__</span></div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;<span class=\"preprocessor\">#       define GLM_CUDA_FUNC_DECL __device__ __host__</span></div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;<span class=\"preprocessor\">#       define GLM_CUDA_FUNC_DEF</span></div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;<span class=\"preprocessor\">#       define GLM_CUDA_FUNC_DECL</span></div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_INLINE)</span></div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;<span class=\"preprocessor\">#       if GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;<span class=\"preprocessor\">#               define GLM_INLINE __forceinline</span></div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;<span class=\"preprocessor\">#               define GLM_NEVER_INLINE __declspec((noinline))</span></div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)</span></div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;<span class=\"preprocessor\">#               define GLM_INLINE inline __attribute__((__always_inline__))</span></div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;<span class=\"preprocessor\">#               define GLM_NEVER_INLINE __attribute__((__noinline__))</span></div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_CUDA</span></div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;<span class=\"preprocessor\">#               define GLM_INLINE __forceinline__</span></div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;<span class=\"preprocessor\">#               define GLM_NEVER_INLINE __noinline__</span></div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;<span class=\"preprocessor\">#               define GLM_INLINE inline</span></div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;<span class=\"preprocessor\">#               define GLM_NEVER_INLINE</span></div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;<span class=\"preprocessor\">#       endif//GLM_COMPILER</span></div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;<span class=\"preprocessor\">#       define GLM_INLINE inline</span></div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;<span class=\"preprocessor\">#       define GLM_NEVER_INLINE</span></div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;<span class=\"preprocessor\">#endif//defined(GLM_FORCE_INLINE)</span></div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;</div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;<span class=\"preprocessor\">#define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL</span></div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;<span class=\"preprocessor\">#define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE</span></div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;</div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;<span class=\"comment\">// Swizzle operators</span></div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;<span class=\"comment\">// User defines: GLM_FORCE_SWIZZLE</span></div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_DISABLED            0</span></div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_OPERATOR            1</span></div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;<span class=\"preprocessor\">#define GLM_SWIZZLE_FUNCTION            2</span></div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_XYZW_ONLY)</span></div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;<span class=\"preprocessor\">#       undef GLM_FORCE_SWIZZLE</span></div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;</div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;<span class=\"preprocessor\">#if defined(GLM_SWIZZLE)</span></div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_SWIZZLE is deprecated, use GLM_FORCE_SWIZZLE instead.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;<span class=\"preprocessor\">#       define GLM_FORCE_SWIZZLE</span></div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_SWIZZLE) &amp;&amp; (GLM_LANG &amp; GLM_LANG_CXXMS_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_SWIZZLE)</span></div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_DISABLED</span></div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;</div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;<span class=\"comment\">// Allows using not basic types as genType</span></div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;<span class=\"comment\">// #define GLM_FORCE_UNRESTRICTED_GENTYPE</span></div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;<span class=\"preprocessor\">#ifdef GLM_FORCE_UNRESTRICTED_GENTYPE</span></div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;</div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;<span class=\"comment\">// Clip control, define GLM_FORCE_DEPTH_ZERO_TO_ONE before including GLM</span></div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;<span class=\"comment\">// to use a clip space between 0 to 1.</span></div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;<span class=\"comment\">// Coordinate system, define GLM_FORCE_LEFT_HANDED before including GLM</span></div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;<span class=\"comment\">// to use left handed coordinate system by default.</span></div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;<span class=\"preprocessor\">#define GLM_CLIP_CONTROL_ZO_BIT         (1 &lt;&lt; 0) // ZERO_TO_ONE</span></div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;<span class=\"preprocessor\">#define GLM_CLIP_CONTROL_NO_BIT         (1 &lt;&lt; 1) // NEGATIVE_ONE_TO_ONE</span></div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;<span class=\"preprocessor\">#define GLM_CLIP_CONTROL_LH_BIT         (1 &lt;&lt; 2) // LEFT_HANDED, For DirectX, Metal, Vulkan</span></div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;<span class=\"preprocessor\">#define GLM_CLIP_CONTROL_RH_BIT         (1 &lt;&lt; 3) // RIGHT_HANDED, For OpenGL, default in GLM</span></div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;</div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;<span class=\"preprocessor\">#define GLM_CLIP_CONTROL_LH_ZO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_ZO_BIT)</span></div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;<span class=\"preprocessor\">#define GLM_CLIP_CONTROL_LH_NO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_NO_BIT)</span></div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;<span class=\"preprocessor\">#define GLM_CLIP_CONTROL_RH_ZO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_ZO_BIT)</span></div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;<span class=\"preprocessor\">#define GLM_CLIP_CONTROL_RH_NO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_NO_BIT)</span></div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;</div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;<span class=\"preprocessor\">#ifdef GLM_FORCE_DEPTH_ZERO_TO_ONE</span></div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;<span class=\"preprocessor\">#       ifdef GLM_FORCE_LEFT_HANDED</span></div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;<span class=\"preprocessor\">#               define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_ZO</span></div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160;<span class=\"preprocessor\">#               define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_ZO</span></div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;<span class=\"preprocessor\">#       ifdef GLM_FORCE_LEFT_HANDED</span></div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;<span class=\"preprocessor\">#               define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_NO</span></div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;<span class=\"preprocessor\">#               define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_NO</span></div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;</div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160;<span class=\"comment\">// Qualifiers</span></div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;<span class=\"preprocessor\">#if (GLM_COMPILER &amp; GLM_COMPILER_VC) || ((GLM_COMPILER &amp; GLM_COMPILER_INTEL) &amp;&amp; (GLM_PLATFORM &amp; GLM_PLATFORM_WINDOWS))</span></div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;<span class=\"preprocessor\">#       define GLM_DEPRECATED __declspec(deprecated)</span></div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;<span class=\"preprocessor\">#       define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name</span></div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;<span class=\"preprocessor\">#elif GLM_COMPILER &amp; (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_INTEL)</span></div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;<span class=\"preprocessor\">#       define GLM_DEPRECATED __attribute__((__deprecated__))</span></div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;<span class=\"preprocessor\">#       define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(alignment)))</span></div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;<span class=\"preprocessor\">#elif GLM_COMPILER &amp; GLM_COMPILER_CUDA</span></div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;<span class=\"preprocessor\">#       define GLM_DEPRECATED</span></div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;<span class=\"preprocessor\">#       define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __align__(x)</span></div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;<span class=\"preprocessor\">#       define GLM_DEPRECATED</span></div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;<span class=\"preprocessor\">#       define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name</span></div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\">  524</span>&#160;</div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;<span class=\"preprocessor\">#ifdef GLM_FORCE_EXPLICIT_CTOR</span></div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\">  528</span>&#160;<span class=\"preprocessor\">#       define GLM_EXPLICIT explicit</span></div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;<span class=\"preprocessor\">#       define GLM_EXPLICIT</span></div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;<span class=\"comment\">// SYCL</span></div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;</div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\">  536</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER==GLM_COMPILER_SYCL</span></div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;</div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;<span class=\"preprocessor\">#include &lt;CL/sycl.hpp&gt;</span></div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160;</div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\">  541</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a> {</div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00240.html\">std</a> {</div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;        <span class=\"comment\">// Import SYCL&#39;s functions into the namespace glm::std to force their usages.</span></div>\n<div class=\"line\"><a name=\"l00544\"></a><span class=\"lineno\">  544</span>&#160;        <span class=\"comment\">// It&#39;s important to use the math built-in function (sin, exp, ...)</span></div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\">  545</span>&#160;        <span class=\"comment\">// of SYCL instead the std ones.</span></div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;        <span class=\"keyword\">using namespace </span>cl::sycl;</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;</div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\">  549</span>&#160;        <span class=\"comment\">// Import some &quot;harmless&quot; std&#39;s stuffs used by glm into</span></div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\">  550</span>&#160;        <span class=\"comment\">// the new glm::std namespace.</span></div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;        <span class=\"keyword\">using</span> numeric_limits = ::std::numeric_limits&lt;T&gt;;</div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\">  553</span>&#160;</div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\">  554</span>&#160;        using ::std::size_t;</div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;</div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160;        <a class=\"code\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">using ::std::uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\">  557</span>&#160;        <a class=\"code\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">using ::std::uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;        <a class=\"code\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">using ::std::uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;        <a class=\"code\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">using ::std::uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;</div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;        <a class=\"code\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">using ::std::int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;        <a class=\"code\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">using ::std::int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;        <a class=\"code\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">using ::std::int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;        <a class=\"code\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">using ::std::int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;</div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;        using ::std::make_unsigned;</div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;} <span class=\"comment\">//namespace std</span></div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;</div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;</div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\">  574</span>&#160;</div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;<span class=\"comment\">// Length type: all length functions returns a length_t type.</span></div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;<span class=\"comment\">// When GLM_FORCE_SIZE_T_LENGTH is defined, length_t is a typedef of size_t otherwise</span></div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;<span class=\"comment\">// length_t is a typedef of int like GLSL defines it.</span></div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;</div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\">  580</span>&#160;<span class=\"preprocessor\">#define GLM_LENGTH_INT          1</span></div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;<span class=\"preprocessor\">#define GLM_LENGTH_SIZE_T       2</span></div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;</div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;<span class=\"preprocessor\">#ifdef GLM_FORCE_SIZE_T_LENGTH</span></div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\">  584</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_LENGTH_TYPE           GLM_LENGTH_SIZE_T</span></div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\">  585</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_LENGTH_TYPE           GLM_LENGTH_INT</span></div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;</div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;        <span class=\"keyword\">using</span> std::size_t;</div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\">  592</span>&#160;<span class=\"preprocessor\">#       if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T</span></div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">size_t</span> length_t;</div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">int</span> length_t;</div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;</div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;<span class=\"comment\">// constexpr</span></div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_CONSTEXPR</span></div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_CONSTEXP GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;</div>\n<div class=\"line\"><a name=\"l00605\"></a><span class=\"lineno\">  605</span>&#160;        <span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, std::<span class=\"keywordtype\">size_t</span> N&gt;</div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;                constexpr std::size_t countof(T <span class=\"keyword\">const</span> (&amp;)[N])</div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;                        <span class=\"keywordflow\">return</span> N;</div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\">  612</span>&#160;        }<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160;<span class=\"preprocessor\">#       define GLM_COUNTOF(arr) glm::countof(arr)</span></div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;<span class=\"preprocessor\">#elif defined(_MSC_VER)</span></div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_CONSTEXP GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;</div>\n<div class=\"line\"><a name=\"l00617\"></a><span class=\"lineno\">  617</span>&#160;<span class=\"preprocessor\">#       define GLM_COUNTOF(arr) _countof(arr)</span></div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_CONSTEXP GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;</div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;<span class=\"preprocessor\">#       define GLM_COUNTOF(arr) sizeof(arr) / sizeof(arr[0])</span></div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;</div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160;<span class=\"comment\">// uint</span></div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;</div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;        <span class=\"keyword\">struct </span>is_int</div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;                <span class=\"keyword\">enum</span> test {value = 0};</div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\">  635</span>&#160;</div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\">  636</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160;        <span class=\"keyword\">struct </span>is_int&lt;unsigned int&gt;</div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;                <span class=\"keyword\">enum</span> test {value = ~0};</div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\">  640</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\">  641</span>&#160;</div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\">  643</span>&#160;        <span class=\"keyword\">struct </span>is_int&lt;signed int&gt;</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;                <span class=\"keyword\">enum</span> test {value = ~0};</div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\">  647</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160;</div>\n<div class=\"line\"><a name=\"l00649\"></a><span class=\"lineno\">  649</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span>    uint;</div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;</div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\">  653</span>&#160;<span class=\"comment\">// 64-bit int</span></div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;</div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;<span class=\"preprocessor\">#       include &lt;cstdint&gt;</span></div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\">  658</span>&#160;</div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00661\"></a><span class=\"lineno\">  661</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\">  662</span>&#160;<span class=\"preprocessor\">#       if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">std::uint64_t</a>                                           <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\">  664</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">std::int64_t</a>                                            <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\">  665</span>&#160;<span class=\"preprocessor\">#       elif (defined(__STDC_VERSION__) &amp;&amp; (__STDC_VERSION__ &gt;= 199901L)) // C99 detected, 64 bit types available</span></div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\">  666</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">uint64_t</a>                                                        <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00667\"></a><span class=\"lineno\">  667</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">int64_t</a>                                                         <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\">  668</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> __int64                                        <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00670\"></a><span class=\"lineno\">  670</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> __int64                                          <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00671\"></a><span class=\"lineno\">  671</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;<span class=\"preprocessor\">#               pragma GCC diagnostic ignored &quot;-Wlong-long&quot;</span></div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\">  673</span>&#160;                __extension__ <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> <span class=\"keywordtype\">long</span>        <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\">  674</span>&#160;                __extension__ <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">long</span> <span class=\"keywordtype\">long</span>          <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\">  675</span>&#160;<span class=\"preprocessor\">#       elif (GLM_COMPILER &amp; GLM_COMPILER_CLANG)</span></div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;<span class=\"preprocessor\">#               pragma clang diagnostic ignored &quot;-Wc++11-long-long&quot;</span></div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> <span class=\"keywordtype\">long</span>                                      <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00678\"></a><span class=\"lineno\">  678</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">long</span> <span class=\"keywordtype\">long</span>                                        <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00679\"></a><span class=\"lineno\">  679</span>&#160;<span class=\"preprocessor\">#       else//unknown compiler</span></div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> <span class=\"keywordtype\">long</span>                                      <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>;</div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">signed</span> <span class=\"keywordtype\">long</span> <span class=\"keywordtype\">long</span>                                        <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>;</div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\">  682</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00683\"></a><span class=\"lineno\">  683</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00684\"></a><span class=\"lineno\">  684</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\">  685</span>&#160;</div>\n<div class=\"line\"><a name=\"l00687\"></a><span class=\"lineno\">  687</span>&#160;<span class=\"comment\">// make_unsigned</span></div>\n<div class=\"line\"><a name=\"l00688\"></a><span class=\"lineno\">  688</span>&#160;</div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_MAKE_SIGNED</span></div>\n<div class=\"line\"><a name=\"l00690\"></a><span class=\"lineno\">  690</span>&#160;<span class=\"preprocessor\">#       include &lt;type_traits&gt;</span></div>\n<div class=\"line\"><a name=\"l00691\"></a><span class=\"lineno\">  691</span>&#160;</div>\n<div class=\"line\"><a name=\"l00692\"></a><span class=\"lineno\">  692</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\">  693</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\">  694</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00695\"></a><span class=\"lineno\">  695</span>&#160;        <span class=\"keyword\">using</span> std::make_unsigned;</div>\n<div class=\"line\"><a name=\"l00696\"></a><span class=\"lineno\">  696</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\">  697</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;</div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00700\"></a><span class=\"lineno\">  700</span>&#160;</div>\n<div class=\"line\"><a name=\"l00701\"></a><span class=\"lineno\">  701</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00702\"></a><span class=\"lineno\">  702</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00703\"></a><span class=\"lineno\">  703</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\">  704</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00705\"></a><span class=\"lineno\">  705</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned</div>\n<div class=\"line\"><a name=\"l00706\"></a><span class=\"lineno\">  706</span>&#160;        {};</div>\n<div class=\"line\"><a name=\"l00707\"></a><span class=\"lineno\">  707</span>&#160;</div>\n<div class=\"line\"><a name=\"l00708\"></a><span class=\"lineno\">  708</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00709\"></a><span class=\"lineno\">  709</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;char&gt;</div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00711\"></a><span class=\"lineno\">  711</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span> type;</div>\n<div class=\"line\"><a name=\"l00712\"></a><span class=\"lineno\">  712</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00713\"></a><span class=\"lineno\">  713</span>&#160;</div>\n<div class=\"line\"><a name=\"l00714\"></a><span class=\"lineno\">  714</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00715\"></a><span class=\"lineno\">  715</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;signed char&gt;</div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span> type;</div>\n<div class=\"line\"><a name=\"l00718\"></a><span class=\"lineno\">  718</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00719\"></a><span class=\"lineno\">  719</span>&#160;</div>\n<div class=\"line\"><a name=\"l00720\"></a><span class=\"lineno\">  720</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;short&gt;</div>\n<div class=\"line\"><a name=\"l00722\"></a><span class=\"lineno\">  722</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00723\"></a><span class=\"lineno\">  723</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">short</span> type;</div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00725\"></a><span class=\"lineno\">  725</span>&#160;</div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\">  726</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00727\"></a><span class=\"lineno\">  727</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;int&gt;</div>\n<div class=\"line\"><a name=\"l00728\"></a><span class=\"lineno\">  728</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\">  729</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> type;</div>\n<div class=\"line\"><a name=\"l00730\"></a><span class=\"lineno\">  730</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00731\"></a><span class=\"lineno\">  731</span>&#160;</div>\n<div class=\"line\"><a name=\"l00732\"></a><span class=\"lineno\">  732</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;long&gt;</div>\n<div class=\"line\"><a name=\"l00734\"></a><span class=\"lineno\">  734</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00735\"></a><span class=\"lineno\">  735</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> type;</div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00737\"></a><span class=\"lineno\">  737</span>&#160;</div>\n<div class=\"line\"><a name=\"l00738\"></a><span class=\"lineno\">  738</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00739\"></a><span class=\"lineno\">  739</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;<a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>&gt;</div>\n<div class=\"line\"><a name=\"l00740\"></a><span class=\"lineno\">  740</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00741\"></a><span class=\"lineno\">  741</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> type;</div>\n<div class=\"line\"><a name=\"l00742\"></a><span class=\"lineno\">  742</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00743\"></a><span class=\"lineno\">  743</span>&#160;</div>\n<div class=\"line\"><a name=\"l00744\"></a><span class=\"lineno\">  744</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00745\"></a><span class=\"lineno\">  745</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;unsigned char&gt;</div>\n<div class=\"line\"><a name=\"l00746\"></a><span class=\"lineno\">  746</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00747\"></a><span class=\"lineno\">  747</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">char</span> type;</div>\n<div class=\"line\"><a name=\"l00748\"></a><span class=\"lineno\">  748</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00749\"></a><span class=\"lineno\">  749</span>&#160;</div>\n<div class=\"line\"><a name=\"l00750\"></a><span class=\"lineno\">  750</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00751\"></a><span class=\"lineno\">  751</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;unsigned short&gt;</div>\n<div class=\"line\"><a name=\"l00752\"></a><span class=\"lineno\">  752</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00753\"></a><span class=\"lineno\">  753</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">short</span> type;</div>\n<div class=\"line\"><a name=\"l00754\"></a><span class=\"lineno\">  754</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00755\"></a><span class=\"lineno\">  755</span>&#160;</div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\">  756</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00757\"></a><span class=\"lineno\">  757</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;unsigned int&gt;</div>\n<div class=\"line\"><a name=\"l00758\"></a><span class=\"lineno\">  758</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00759\"></a><span class=\"lineno\">  759</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">int</span> type;</div>\n<div class=\"line\"><a name=\"l00760\"></a><span class=\"lineno\">  760</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00761\"></a><span class=\"lineno\">  761</span>&#160;</div>\n<div class=\"line\"><a name=\"l00762\"></a><span class=\"lineno\">  762</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00763\"></a><span class=\"lineno\">  763</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;unsigned long&gt;</div>\n<div class=\"line\"><a name=\"l00764\"></a><span class=\"lineno\">  764</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00765\"></a><span class=\"lineno\">  765</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">unsigned</span> <span class=\"keywordtype\">long</span> type;</div>\n<div class=\"line\"><a name=\"l00766\"></a><span class=\"lineno\">  766</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00767\"></a><span class=\"lineno\">  767</span>&#160;</div>\n<div class=\"line\"><a name=\"l00768\"></a><span class=\"lineno\">  768</span>&#160;        <span class=\"keyword\">template</span>&lt;&gt;</div>\n<div class=\"line\"><a name=\"l00769\"></a><span class=\"lineno\">  769</span>&#160;        <span class=\"keyword\">struct </span>make_unsigned&lt;<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>&gt;</div>\n<div class=\"line\"><a name=\"l00770\"></a><span class=\"lineno\">  770</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00771\"></a><span class=\"lineno\">  771</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a> type;</div>\n<div class=\"line\"><a name=\"l00772\"></a><span class=\"lineno\">  772</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\">  773</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00774\"></a><span class=\"lineno\">  774</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00775\"></a><span class=\"lineno\">  775</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00776\"></a><span class=\"lineno\">  776</span>&#160;</div>\n<div class=\"line\"><a name=\"l00778\"></a><span class=\"lineno\">  778</span>&#160;<span class=\"comment\">// Only use x, y, z, w as vector type components</span></div>\n<div class=\"line\"><a name=\"l00779\"></a><span class=\"lineno\">  779</span>&#160;</div>\n<div class=\"line\"><a name=\"l00780\"></a><span class=\"lineno\">  780</span>&#160;<span class=\"preprocessor\">#ifdef GLM_FORCE_XYZW_ONLY</span></div>\n<div class=\"line\"><a name=\"l00781\"></a><span class=\"lineno\">  781</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_XYZW_ONLY GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00782\"></a><span class=\"lineno\">  782</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00783\"></a><span class=\"lineno\">  783</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_XYZW_ONLY GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00784\"></a><span class=\"lineno\">  784</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\">  785</span>&#160;</div>\n<div class=\"line\"><a name=\"l00787\"></a><span class=\"lineno\">  787</span>&#160;<span class=\"comment\">// Configure the use of defaulted initialized types</span></div>\n<div class=\"line\"><a name=\"l00788\"></a><span class=\"lineno\">  788</span>&#160;</div>\n<div class=\"line\"><a name=\"l00789\"></a><span class=\"lineno\">  789</span>&#160;<span class=\"preprocessor\">#define GLM_CTOR_INIT_DISABLE           0</span></div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;<span class=\"preprocessor\">#define GLM_CTOR_INITIALIZER_LIST       1</span></div>\n<div class=\"line\"><a name=\"l00791\"></a><span class=\"lineno\">  791</span>&#160;<span class=\"preprocessor\">#define GLM_CTOR_INITIALISATION         2</span></div>\n<div class=\"line\"><a name=\"l00792\"></a><span class=\"lineno\">  792</span>&#160;</div>\n<div class=\"line\"><a name=\"l00793\"></a><span class=\"lineno\">  793</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_CTOR_INIT) &amp;&amp; GLM_HAS_INITIALIZER_LISTS</span></div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALIZER_LIST</span></div>\n<div class=\"line\"><a name=\"l00795\"></a><span class=\"lineno\">  795</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_CTOR_INIT) &amp;&amp; !GLM_HAS_INITIALIZER_LISTS</span></div>\n<div class=\"line\"><a name=\"l00796\"></a><span class=\"lineno\">  796</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALISATION</span></div>\n<div class=\"line\"><a name=\"l00797\"></a><span class=\"lineno\">  797</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00798\"></a><span class=\"lineno\">  798</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_CTOR_INIT GLM_CTOR_INIT_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00799\"></a><span class=\"lineno\">  799</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00800\"></a><span class=\"lineno\">  800</span>&#160;</div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\">  802</span>&#160;<span class=\"comment\">// Use SIMD instruction sets</span></div>\n<div class=\"line\"><a name=\"l00803\"></a><span class=\"lineno\">  803</span>&#160;</div>\n<div class=\"line\"><a name=\"l00804\"></a><span class=\"lineno\">  804</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_ALIGNOF &amp;&amp; (GLM_LANG &amp; GLM_LANG_CXXMS_FLAG) &amp;&amp; (GLM_ARCH &amp; GLM_ARCH_SIMD_BIT)</span></div>\n<div class=\"line\"><a name=\"l00805\"></a><span class=\"lineno\">  805</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_SIMD GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00806\"></a><span class=\"lineno\">  806</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00807\"></a><span class=\"lineno\">  807</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_SIMD GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00808\"></a><span class=\"lineno\">  808</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00809\"></a><span class=\"lineno\">  809</span>&#160;</div>\n<div class=\"line\"><a name=\"l00811\"></a><span class=\"lineno\">  811</span>&#160;<span class=\"comment\">// Configure the use of defaulted function</span></div>\n<div class=\"line\"><a name=\"l00812\"></a><span class=\"lineno\">  812</span>&#160;</div>\n<div class=\"line\"><a name=\"l00813\"></a><span class=\"lineno\">  813</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_DEFAULTED_FUNCTIONS &amp;&amp; GLM_CONFIG_CTOR_INIT == GLM_CTOR_INIT_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00814\"></a><span class=\"lineno\">  814</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00815\"></a><span class=\"lineno\">  815</span>&#160;<span class=\"preprocessor\">#       define GLM_DEFAULT = default</span></div>\n<div class=\"line\"><a name=\"l00816\"></a><span class=\"lineno\">  816</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00817\"></a><span class=\"lineno\">  817</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00818\"></a><span class=\"lineno\">  818</span>&#160;<span class=\"preprocessor\">#       define GLM_DEFAULT</span></div>\n<div class=\"line\"><a name=\"l00819\"></a><span class=\"lineno\">  819</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00820\"></a><span class=\"lineno\">  820</span>&#160;</div>\n<div class=\"line\"><a name=\"l00822\"></a><span class=\"lineno\">  822</span>&#160;<span class=\"comment\">// Configure the use of aligned gentypes</span></div>\n<div class=\"line\"><a name=\"l00823\"></a><span class=\"lineno\">  823</span>&#160;</div>\n<div class=\"line\"><a name=\"l00824\"></a><span class=\"lineno\">  824</span>&#160;<span class=\"preprocessor\">#ifdef GLM_FORCE_ALIGNED // Legacy define</span></div>\n<div class=\"line\"><a name=\"l00825\"></a><span class=\"lineno\">  825</span>&#160;<span class=\"preprocessor\">#       define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES</span></div>\n<div class=\"line\"><a name=\"l00826\"></a><span class=\"lineno\">  826</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00827\"></a><span class=\"lineno\">  827</span>&#160;</div>\n<div class=\"line\"><a name=\"l00828\"></a><span class=\"lineno\">  828</span>&#160;<span class=\"preprocessor\">#ifdef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES</span></div>\n<div class=\"line\"><a name=\"l00829\"></a><span class=\"lineno\">  829</span>&#160;<span class=\"preprocessor\">#       define GLM_FORCE_ALIGNED_GENTYPES</span></div>\n<div class=\"line\"><a name=\"l00830\"></a><span class=\"lineno\">  830</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00831\"></a><span class=\"lineno\">  831</span>&#160;</div>\n<div class=\"line\"><a name=\"l00832\"></a><span class=\"lineno\">  832</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_ALIGNOF &amp;&amp; (GLM_LANG &amp; GLM_LANG_CXXMS_FLAG) &amp;&amp; (defined(GLM_FORCE_ALIGNED_GENTYPES) || (GLM_CONFIG_SIMD == GLM_ENABLE))</span></div>\n<div class=\"line\"><a name=\"l00833\"></a><span class=\"lineno\">  833</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_ALIGNED_GENTYPES GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00834\"></a><span class=\"lineno\">  834</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00835\"></a><span class=\"lineno\">  835</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_ALIGNED_GENTYPES GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00836\"></a><span class=\"lineno\">  836</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00837\"></a><span class=\"lineno\">  837</span>&#160;</div>\n<div class=\"line\"><a name=\"l00839\"></a><span class=\"lineno\">  839</span>&#160;<span class=\"comment\">// Configure the use of anonymous structure as implementation detail</span></div>\n<div class=\"line\"><a name=\"l00840\"></a><span class=\"lineno\">  840</span>&#160;</div>\n<div class=\"line\"><a name=\"l00841\"></a><span class=\"lineno\">  841</span>&#160;<span class=\"preprocessor\">#if ((GLM_CONFIG_SIMD == GLM_ENABLE) || (GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR) || (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE))</span></div>\n<div class=\"line\"><a name=\"l00842\"></a><span class=\"lineno\">  842</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_ANONYMOUS_STRUCT GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00843\"></a><span class=\"lineno\">  843</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00844\"></a><span class=\"lineno\">  844</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_ANONYMOUS_STRUCT GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00845\"></a><span class=\"lineno\">  845</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00846\"></a><span class=\"lineno\">  846</span>&#160;</div>\n<div class=\"line\"><a name=\"l00848\"></a><span class=\"lineno\">  848</span>&#160;<span class=\"comment\">// Silent warnings</span></div>\n<div class=\"line\"><a name=\"l00849\"></a><span class=\"lineno\">  849</span>&#160;</div>\n<div class=\"line\"><a name=\"l00850\"></a><span class=\"lineno\">  850</span>&#160;<span class=\"preprocessor\">#ifdef GLM_FORCE_SILENT_WARNINGS</span></div>\n<div class=\"line\"><a name=\"l00851\"></a><span class=\"lineno\">  851</span>&#160;<span class=\"preprocessor\">#       define GLM_SILENT_WARNINGS GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00852\"></a><span class=\"lineno\">  852</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00853\"></a><span class=\"lineno\">  853</span>&#160;<span class=\"preprocessor\">#       define GLM_SILENT_WARNINGS GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l00854\"></a><span class=\"lineno\">  854</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00855\"></a><span class=\"lineno\">  855</span>&#160;</div>\n<div class=\"line\"><a name=\"l00857\"></a><span class=\"lineno\">  857</span>&#160;<span class=\"comment\">// Precision</span></div>\n<div class=\"line\"><a name=\"l00858\"></a><span class=\"lineno\">  858</span>&#160;</div>\n<div class=\"line\"><a name=\"l00859\"></a><span class=\"lineno\">  859</span>&#160;<span class=\"preprocessor\">#define GLM_HIGHP               1</span></div>\n<div class=\"line\"><a name=\"l00860\"></a><span class=\"lineno\">  860</span>&#160;<span class=\"preprocessor\">#define GLM_MEDIUMP             2</span></div>\n<div class=\"line\"><a name=\"l00861\"></a><span class=\"lineno\">  861</span>&#160;<span class=\"preprocessor\">#define GLM_LOWP                3</span></div>\n<div class=\"line\"><a name=\"l00862\"></a><span class=\"lineno\">  862</span>&#160;</div>\n<div class=\"line\"><a name=\"l00863\"></a><span class=\"lineno\">  863</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_PRECISION_HIGHP_BOOL) || defined(GLM_PRECISION_HIGHP_BOOL)</span></div>\n<div class=\"line\"><a name=\"l00864\"></a><span class=\"lineno\">  864</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_BOOL                GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00865\"></a><span class=\"lineno\">  865</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_MEDIUMP_BOOL) || defined(GLM_PRECISION_MEDIUMP_BOOL)</span></div>\n<div class=\"line\"><a name=\"l00866\"></a><span class=\"lineno\">  866</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_BOOL                GLM_MEDIUMP</span></div>\n<div class=\"line\"><a name=\"l00867\"></a><span class=\"lineno\">  867</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_LOWP_BOOL) || defined(GLM_PRECISION_LOWP_BOOL)</span></div>\n<div class=\"line\"><a name=\"l00868\"></a><span class=\"lineno\">  868</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_BOOL                GLM_LOWP</span></div>\n<div class=\"line\"><a name=\"l00869\"></a><span class=\"lineno\">  869</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00870\"></a><span class=\"lineno\">  870</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_BOOL                GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00871\"></a><span class=\"lineno\">  871</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00872\"></a><span class=\"lineno\">  872</span>&#160;</div>\n<div class=\"line\"><a name=\"l00873\"></a><span class=\"lineno\">  873</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_PRECISION_HIGHP_INT) || defined(GLM_PRECISION_HIGHP_INT)</span></div>\n<div class=\"line\"><a name=\"l00874\"></a><span class=\"lineno\">  874</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_INT                 GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00875\"></a><span class=\"lineno\">  875</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_MEDIUMP_INT) || defined(GLM_PRECISION_MEDIUMP_INT)</span></div>\n<div class=\"line\"><a name=\"l00876\"></a><span class=\"lineno\">  876</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_INT                 GLM_MEDIUMP</span></div>\n<div class=\"line\"><a name=\"l00877\"></a><span class=\"lineno\">  877</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_LOWP_INT) || defined(GLM_PRECISION_LOWP_INT)</span></div>\n<div class=\"line\"><a name=\"l00878\"></a><span class=\"lineno\">  878</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_INT                 GLM_LOWP</span></div>\n<div class=\"line\"><a name=\"l00879\"></a><span class=\"lineno\">  879</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00880\"></a><span class=\"lineno\">  880</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_INT                 GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00881\"></a><span class=\"lineno\">  881</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00882\"></a><span class=\"lineno\">  882</span>&#160;</div>\n<div class=\"line\"><a name=\"l00883\"></a><span class=\"lineno\">  883</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_PRECISION_HIGHP_UINT) || defined(GLM_PRECISION_HIGHP_UINT)</span></div>\n<div class=\"line\"><a name=\"l00884\"></a><span class=\"lineno\">  884</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_UINT                GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00885\"></a><span class=\"lineno\">  885</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_MEDIUMP_UINT) || defined(GLM_PRECISION_MEDIUMP_UINT)</span></div>\n<div class=\"line\"><a name=\"l00886\"></a><span class=\"lineno\">  886</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_UINT                GLM_MEDIUMP</span></div>\n<div class=\"line\"><a name=\"l00887\"></a><span class=\"lineno\">  887</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_LOWP_UINT) || defined(GLM_PRECISION_LOWP_UINT)</span></div>\n<div class=\"line\"><a name=\"l00888\"></a><span class=\"lineno\">  888</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_UINT                GLM_LOWP</span></div>\n<div class=\"line\"><a name=\"l00889\"></a><span class=\"lineno\">  889</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00890\"></a><span class=\"lineno\">  890</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_UINT                GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00891\"></a><span class=\"lineno\">  891</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00892\"></a><span class=\"lineno\">  892</span>&#160;</div>\n<div class=\"line\"><a name=\"l00893\"></a><span class=\"lineno\">  893</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_PRECISION_HIGHP_FLOAT) || defined(GLM_PRECISION_HIGHP_FLOAT)</span></div>\n<div class=\"line\"><a name=\"l00894\"></a><span class=\"lineno\">  894</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_FLOAT               GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00895\"></a><span class=\"lineno\">  895</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_MEDIUMP_FLOAT) || defined(GLM_PRECISION_MEDIUMP_FLOAT)</span></div>\n<div class=\"line\"><a name=\"l00896\"></a><span class=\"lineno\">  896</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_FLOAT               GLM_MEDIUMP</span></div>\n<div class=\"line\"><a name=\"l00897\"></a><span class=\"lineno\">  897</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_LOWP_FLOAT) || defined(GLM_PRECISION_LOWP_FLOAT)</span></div>\n<div class=\"line\"><a name=\"l00898\"></a><span class=\"lineno\">  898</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_FLOAT               GLM_LOWP</span></div>\n<div class=\"line\"><a name=\"l00899\"></a><span class=\"lineno\">  899</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00900\"></a><span class=\"lineno\">  900</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_FLOAT               GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00901\"></a><span class=\"lineno\">  901</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00902\"></a><span class=\"lineno\">  902</span>&#160;</div>\n<div class=\"line\"><a name=\"l00903\"></a><span class=\"lineno\">  903</span>&#160;<span class=\"preprocessor\">#if defined(GLM_FORCE_PRECISION_HIGHP_DOUBLE) || defined(GLM_PRECISION_HIGHP_DOUBLE)</span></div>\n<div class=\"line\"><a name=\"l00904\"></a><span class=\"lineno\">  904</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_DOUBLE              GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00905\"></a><span class=\"lineno\">  905</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_MEDIUMP_DOUBLE) || defined(GLM_PRECISION_MEDIUMP_DOUBLE)</span></div>\n<div class=\"line\"><a name=\"l00906\"></a><span class=\"lineno\">  906</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_DOUBLE              GLM_MEDIUMP</span></div>\n<div class=\"line\"><a name=\"l00907\"></a><span class=\"lineno\">  907</span>&#160;<span class=\"preprocessor\">#elif defined(GLM_FORCE_PRECISION_LOWP_DOUBLE) || defined(GLM_PRECISION_LOWP_DOUBLE)</span></div>\n<div class=\"line\"><a name=\"l00908\"></a><span class=\"lineno\">  908</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_DOUBLE              GLM_LOWP</span></div>\n<div class=\"line\"><a name=\"l00909\"></a><span class=\"lineno\">  909</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00910\"></a><span class=\"lineno\">  910</span>&#160;<span class=\"preprocessor\">#       define GLM_CONFIG_PRECISION_DOUBLE              GLM_HIGHP</span></div>\n<div class=\"line\"><a name=\"l00911\"></a><span class=\"lineno\">  911</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00912\"></a><span class=\"lineno\">  912</span>&#160;</div>\n<div class=\"line\"><a name=\"l00914\"></a><span class=\"lineno\">  914</span>&#160;<span class=\"comment\">// Check inclusions of different versions of GLM</span></div>\n<div class=\"line\"><a name=\"l00915\"></a><span class=\"lineno\">  915</span>&#160;</div>\n<div class=\"line\"><a name=\"l00916\"></a><span class=\"lineno\">  916</span>&#160;<span class=\"preprocessor\">#elif ((GLM_SETUP_INCLUDED != GLM_VERSION) &amp;&amp; !defined(GLM_FORCE_IGNORE_VERSION))</span></div>\n<div class=\"line\"><a name=\"l00917\"></a><span class=\"lineno\">  917</span>&#160;<span class=\"preprocessor\">#       error &quot;GLM error: A different version of GLM is already included. Define GLM_FORCE_IGNORE_VERSION before including GLM headers to ignore this error.&quot;</span></div>\n<div class=\"line\"><a name=\"l00918\"></a><span class=\"lineno\">  918</span>&#160;<span class=\"preprocessor\">#elif GLM_SETUP_INCLUDED == GLM_VERSION</span></div>\n<div class=\"line\"><a name=\"l00919\"></a><span class=\"lineno\">  919</span>&#160;</div>\n<div class=\"line\"><a name=\"l00921\"></a><span class=\"lineno\">  921</span>&#160;<span class=\"comment\">// Messages</span></div>\n<div class=\"line\"><a name=\"l00922\"></a><span class=\"lineno\">  922</span>&#160;</div>\n<div class=\"line\"><a name=\"l00923\"></a><span class=\"lineno\">  923</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_MESSAGE_DISPLAYED)</span></div>\n<div class=\"line\"><a name=\"l00924\"></a><span class=\"lineno\">  924</span>&#160;<span class=\"preprocessor\">#       define GLM_MESSAGE_DISPLAYED</span></div>\n<div class=\"line\"><a name=\"l00925\"></a><span class=\"lineno\">  925</span>&#160;<span class=\"preprocessor\">#               define GLM_STR_HELPER(x) #x</span></div>\n<div class=\"line\"><a name=\"l00926\"></a><span class=\"lineno\">  926</span>&#160;<span class=\"preprocessor\">#               define GLM_STR(x) GLM_STR_HELPER(x)</span></div>\n<div class=\"line\"><a name=\"l00927\"></a><span class=\"lineno\">  927</span>&#160;</div>\n<div class=\"line\"><a name=\"l00928\"></a><span class=\"lineno\">  928</span>&#160;        <span class=\"comment\">// Report GLM version</span></div>\n<div class=\"line\"><a name=\"l00929\"></a><span class=\"lineno\">  929</span>&#160;<span class=\"preprocessor\">#               pragma message (GLM_STR(GLM_VERSION_MESSAGE))</span></div>\n<div class=\"line\"><a name=\"l00930\"></a><span class=\"lineno\">  930</span>&#160;</div>\n<div class=\"line\"><a name=\"l00931\"></a><span class=\"lineno\">  931</span>&#160;        <span class=\"comment\">// Report C++ language</span></div>\n<div class=\"line\"><a name=\"l00932\"></a><span class=\"lineno\">  932</span>&#160;<span class=\"preprocessor\">#       if (GLM_LANG &amp; GLM_LANG_CXX2A_FLAG) &amp;&amp; (GLM_LANG &amp; GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00933\"></a><span class=\"lineno\">  933</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 2A with extensions&quot;)</span></div>\n<div class=\"line\"><a name=\"l00934\"></a><span class=\"lineno\">  934</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX2A_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00935\"></a><span class=\"lineno\">  935</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 2A&quot;)</span></div>\n<div class=\"line\"><a name=\"l00936\"></a><span class=\"lineno\">  936</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX17_FLAG) &amp;&amp; (GLM_LANG &amp; GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00937\"></a><span class=\"lineno\">  937</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 17 with extensions&quot;)</span></div>\n<div class=\"line\"><a name=\"l00938\"></a><span class=\"lineno\">  938</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX17_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00939\"></a><span class=\"lineno\">  939</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 17&quot;)</span></div>\n<div class=\"line\"><a name=\"l00940\"></a><span class=\"lineno\">  940</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX14_FLAG) &amp;&amp; (GLM_LANG &amp; GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00941\"></a><span class=\"lineno\">  941</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 14 with extensions&quot;)</span></div>\n<div class=\"line\"><a name=\"l00942\"></a><span class=\"lineno\">  942</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX14_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00943\"></a><span class=\"lineno\">  943</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 14&quot;)</span></div>\n<div class=\"line\"><a name=\"l00944\"></a><span class=\"lineno\">  944</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX11_FLAG) &amp;&amp; (GLM_LANG &amp; GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00945\"></a><span class=\"lineno\">  945</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 11 with extensions&quot;)</span></div>\n<div class=\"line\"><a name=\"l00946\"></a><span class=\"lineno\">  946</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX11_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00947\"></a><span class=\"lineno\">  947</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 11&quot;)</span></div>\n<div class=\"line\"><a name=\"l00948\"></a><span class=\"lineno\">  948</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX0X_FLAG) &amp;&amp; (GLM_LANG &amp; GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00949\"></a><span class=\"lineno\">  949</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 0x with extensions&quot;)</span></div>\n<div class=\"line\"><a name=\"l00950\"></a><span class=\"lineno\">  950</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX0X_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00951\"></a><span class=\"lineno\">  951</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 0x&quot;)</span></div>\n<div class=\"line\"><a name=\"l00952\"></a><span class=\"lineno\">  952</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX03_FLAG) &amp;&amp; (GLM_LANG &amp; GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00953\"></a><span class=\"lineno\">  953</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 03 with extensions&quot;)</span></div>\n<div class=\"line\"><a name=\"l00954\"></a><span class=\"lineno\">  954</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX03_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00955\"></a><span class=\"lineno\">  955</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 03&quot;)</span></div>\n<div class=\"line\"><a name=\"l00956\"></a><span class=\"lineno\">  956</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX98_FLAG) &amp;&amp; (GLM_LANG &amp; GLM_LANG_EXT)</span></div>\n<div class=\"line\"><a name=\"l00957\"></a><span class=\"lineno\">  957</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 98 with extensions&quot;)</span></div>\n<div class=\"line\"><a name=\"l00958\"></a><span class=\"lineno\">  958</span>&#160;<span class=\"preprocessor\">#       elif (GLM_LANG &amp; GLM_LANG_CXX98_FLAG)</span></div>\n<div class=\"line\"><a name=\"l00959\"></a><span class=\"lineno\">  959</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ 98&quot;)</span></div>\n<div class=\"line\"><a name=\"l00960\"></a><span class=\"lineno\">  960</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00961\"></a><span class=\"lineno\">  961</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: C++ language undetected&quot;)</span></div>\n<div class=\"line\"><a name=\"l00962\"></a><span class=\"lineno\">  962</span>&#160;<span class=\"preprocessor\">#       endif//GLM_LANG</span></div>\n<div class=\"line\"><a name=\"l00963\"></a><span class=\"lineno\">  963</span>&#160;</div>\n<div class=\"line\"><a name=\"l00964\"></a><span class=\"lineno\">  964</span>&#160;        <span class=\"comment\">// Report compiler detection</span></div>\n<div class=\"line\"><a name=\"l00965\"></a><span class=\"lineno\">  965</span>&#160;<span class=\"preprocessor\">#       if GLM_COMPILER &amp; GLM_COMPILER_CUDA</span></div>\n<div class=\"line\"><a name=\"l00966\"></a><span class=\"lineno\">  966</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: CUDA compiler detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l00967\"></a><span class=\"lineno\">  967</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00968\"></a><span class=\"lineno\">  968</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Visual C++ compiler detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l00969\"></a><span class=\"lineno\">  969</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00970\"></a><span class=\"lineno\">  970</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Clang compiler detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l00971\"></a><span class=\"lineno\">  971</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_INTEL</span></div>\n<div class=\"line\"><a name=\"l00972\"></a><span class=\"lineno\">  972</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Intel Compiler detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l00973\"></a><span class=\"lineno\">  973</span>&#160;<span class=\"preprocessor\">#       elif GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00974\"></a><span class=\"lineno\">  974</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GCC compiler detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l00975\"></a><span class=\"lineno\">  975</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00976\"></a><span class=\"lineno\">  976</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Compiler not detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l00977\"></a><span class=\"lineno\">  977</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00978\"></a><span class=\"lineno\">  978</span>&#160;</div>\n<div class=\"line\"><a name=\"l00979\"></a><span class=\"lineno\">  979</span>&#160;        <span class=\"comment\">// Report build target</span></div>\n<div class=\"line\"><a name=\"l00980\"></a><span class=\"lineno\">  980</span>&#160;<span class=\"preprocessor\">#       if (GLM_ARCH &amp; GLM_ARCH_AVX2_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l00981\"></a><span class=\"lineno\">  981</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 64 bits with AVX2 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l00982\"></a><span class=\"lineno\">  982</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_AVX2_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l00983\"></a><span class=\"lineno\">  983</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 32 bits with AVX2 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l00984\"></a><span class=\"lineno\">  984</span>&#160;</div>\n<div class=\"line\"><a name=\"l00985\"></a><span class=\"lineno\">  985</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_AVX_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l00986\"></a><span class=\"lineno\">  986</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 64 bits with AVX instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l00987\"></a><span class=\"lineno\">  987</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_AVX_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l00988\"></a><span class=\"lineno\">  988</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 32 bits with AVX instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l00989\"></a><span class=\"lineno\">  989</span>&#160;</div>\n<div class=\"line\"><a name=\"l00990\"></a><span class=\"lineno\">  990</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSE42_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l00991\"></a><span class=\"lineno\">  991</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 64 bits with SSE4.2 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l00992\"></a><span class=\"lineno\">  992</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSE42_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l00993\"></a><span class=\"lineno\">  993</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 32 bits with SSE4.2 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l00994\"></a><span class=\"lineno\">  994</span>&#160;</div>\n<div class=\"line\"><a name=\"l00995\"></a><span class=\"lineno\">  995</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSE41_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l00996\"></a><span class=\"lineno\">  996</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 64 bits with SSE4.1 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l00997\"></a><span class=\"lineno\">  997</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSE41_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l00998\"></a><span class=\"lineno\">  998</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 32 bits with SSE4.1 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l00999\"></a><span class=\"lineno\">  999</span>&#160;</div>\n<div class=\"line\"><a name=\"l01000\"></a><span class=\"lineno\"> 1000</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSSE3_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l01001\"></a><span class=\"lineno\"> 1001</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 64 bits with SSSE3 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01002\"></a><span class=\"lineno\"> 1002</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSSE3_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l01003\"></a><span class=\"lineno\"> 1003</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 32 bits with SSSE3 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01004\"></a><span class=\"lineno\"> 1004</span>&#160;</div>\n<div class=\"line\"><a name=\"l01005\"></a><span class=\"lineno\"> 1005</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSE3_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l01006\"></a><span class=\"lineno\"> 1006</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 64 bits with SSE3 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01007\"></a><span class=\"lineno\"> 1007</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSE3_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l01008\"></a><span class=\"lineno\"> 1008</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 32 bits with SSE3 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01009\"></a><span class=\"lineno\"> 1009</span>&#160;</div>\n<div class=\"line\"><a name=\"l01010\"></a><span class=\"lineno\"> 1010</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSE2_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l01011\"></a><span class=\"lineno\"> 1011</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 64 bits with SSE2 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01012\"></a><span class=\"lineno\"> 1012</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_SSE2_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l01013\"></a><span class=\"lineno\"> 1013</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 32 bits with SSE2 instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01014\"></a><span class=\"lineno\"> 1014</span>&#160;</div>\n<div class=\"line\"><a name=\"l01015\"></a><span class=\"lineno\"> 1015</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_X86_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l01016\"></a><span class=\"lineno\"> 1016</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 64 bits build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01017\"></a><span class=\"lineno\"> 1017</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_X86_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l01018\"></a><span class=\"lineno\"> 1018</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: x86 32 bits build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01019\"></a><span class=\"lineno\"> 1019</span>&#160;</div>\n<div class=\"line\"><a name=\"l01020\"></a><span class=\"lineno\"> 1020</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_NEON_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l01021\"></a><span class=\"lineno\"> 1021</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: ARM 64 bits with Neon instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01022\"></a><span class=\"lineno\"> 1022</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_NEON_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l01023\"></a><span class=\"lineno\"> 1023</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: ARM 32 bits with Neon instruction set build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01024\"></a><span class=\"lineno\"> 1024</span>&#160;</div>\n<div class=\"line\"><a name=\"l01025\"></a><span class=\"lineno\"> 1025</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_ARM_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l01026\"></a><span class=\"lineno\"> 1026</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: ARM 64 bits build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01027\"></a><span class=\"lineno\"> 1027</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_ARM_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l01028\"></a><span class=\"lineno\"> 1028</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: ARM 32 bits build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01029\"></a><span class=\"lineno\"> 1029</span>&#160;</div>\n<div class=\"line\"><a name=\"l01030\"></a><span class=\"lineno\"> 1030</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_MIPS_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l01031\"></a><span class=\"lineno\"> 1031</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: MIPS 64 bits build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01032\"></a><span class=\"lineno\"> 1032</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_MIPS_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l01033\"></a><span class=\"lineno\"> 1033</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: MIPS 32 bits build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01034\"></a><span class=\"lineno\"> 1034</span>&#160;</div>\n<div class=\"line\"><a name=\"l01035\"></a><span class=\"lineno\"> 1035</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_PPC_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_64)</span></div>\n<div class=\"line\"><a name=\"l01036\"></a><span class=\"lineno\"> 1036</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: PowerPC 64 bits build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01037\"></a><span class=\"lineno\"> 1037</span>&#160;<span class=\"preprocessor\">#       elif (GLM_ARCH &amp; GLM_ARCH_PPC_BIT) &amp;&amp; (GLM_MODEL == GLM_MODEL_32)</span></div>\n<div class=\"line\"><a name=\"l01038\"></a><span class=\"lineno\"> 1038</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: PowerPC 32 bits build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01039\"></a><span class=\"lineno\"> 1039</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l01040\"></a><span class=\"lineno\"> 1040</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Unknown build target&quot;)</span></div>\n<div class=\"line\"><a name=\"l01041\"></a><span class=\"lineno\"> 1041</span>&#160;<span class=\"preprocessor\">#       endif//GLM_ARCH</span></div>\n<div class=\"line\"><a name=\"l01042\"></a><span class=\"lineno\"> 1042</span>&#160;</div>\n<div class=\"line\"><a name=\"l01043\"></a><span class=\"lineno\"> 1043</span>&#160;        <span class=\"comment\">// Report platform name</span></div>\n<div class=\"line\"><a name=\"l01044\"></a><span class=\"lineno\"> 1044</span>&#160;<span class=\"preprocessor\">#       if(GLM_PLATFORM &amp; GLM_PLATFORM_QNXNTO)</span></div>\n<div class=\"line\"><a name=\"l01045\"></a><span class=\"lineno\"> 1045</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: QNX platform detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01046\"></a><span class=\"lineno\"> 1046</span>&#160;<span class=\"comment\">//#     elif(GLM_PLATFORM &amp; GLM_PLATFORM_IOS)</span></div>\n<div class=\"line\"><a name=\"l01047\"></a><span class=\"lineno\"> 1047</span>&#160;<span class=\"comment\">//#             pragma message(&quot;GLM: iOS platform detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01048\"></a><span class=\"lineno\"> 1048</span>&#160;<span class=\"preprocessor\">#       elif(GLM_PLATFORM &amp; GLM_PLATFORM_APPLE)</span></div>\n<div class=\"line\"><a name=\"l01049\"></a><span class=\"lineno\"> 1049</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Apple platform detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01050\"></a><span class=\"lineno\"> 1050</span>&#160;<span class=\"preprocessor\">#       elif(GLM_PLATFORM &amp; GLM_PLATFORM_WINCE)</span></div>\n<div class=\"line\"><a name=\"l01051\"></a><span class=\"lineno\"> 1051</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: WinCE platform detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01052\"></a><span class=\"lineno\"> 1052</span>&#160;<span class=\"preprocessor\">#       elif(GLM_PLATFORM &amp; GLM_PLATFORM_WINDOWS)</span></div>\n<div class=\"line\"><a name=\"l01053\"></a><span class=\"lineno\"> 1053</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Windows platform detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01054\"></a><span class=\"lineno\"> 1054</span>&#160;<span class=\"preprocessor\">#       elif(GLM_PLATFORM &amp; GLM_PLATFORM_CHROME_NACL)</span></div>\n<div class=\"line\"><a name=\"l01055\"></a><span class=\"lineno\"> 1055</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Native Client detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01056\"></a><span class=\"lineno\"> 1056</span>&#160;<span class=\"preprocessor\">#       elif(GLM_PLATFORM &amp; GLM_PLATFORM_ANDROID)</span></div>\n<div class=\"line\"><a name=\"l01057\"></a><span class=\"lineno\"> 1057</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Android platform detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01058\"></a><span class=\"lineno\"> 1058</span>&#160;<span class=\"preprocessor\">#       elif(GLM_PLATFORM &amp; GLM_PLATFORM_LINUX)</span></div>\n<div class=\"line\"><a name=\"l01059\"></a><span class=\"lineno\"> 1059</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: Linux platform detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01060\"></a><span class=\"lineno\"> 1060</span>&#160;<span class=\"preprocessor\">#       elif(GLM_PLATFORM &amp; GLM_PLATFORM_UNIX)</span></div>\n<div class=\"line\"><a name=\"l01061\"></a><span class=\"lineno\"> 1061</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: UNIX platform detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01062\"></a><span class=\"lineno\"> 1062</span>&#160;<span class=\"preprocessor\">#       elif(GLM_PLATFORM &amp; GLM_PLATFORM_UNKNOWN)</span></div>\n<div class=\"line\"><a name=\"l01063\"></a><span class=\"lineno\"> 1063</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: platform unknown&quot;)</span></div>\n<div class=\"line\"><a name=\"l01064\"></a><span class=\"lineno\"> 1064</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l01065\"></a><span class=\"lineno\"> 1065</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: platform not detected&quot;)</span></div>\n<div class=\"line\"><a name=\"l01066\"></a><span class=\"lineno\"> 1066</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01067\"></a><span class=\"lineno\"> 1067</span>&#160;</div>\n<div class=\"line\"><a name=\"l01068\"></a><span class=\"lineno\"> 1068</span>&#160;        <span class=\"comment\">// Report whether only xyzw component are used</span></div>\n<div class=\"line\"><a name=\"l01069\"></a><span class=\"lineno\"> 1069</span>&#160;<span class=\"preprocessor\">#       if defined GLM_FORCE_XYZW_ONLY</span></div>\n<div class=\"line\"><a name=\"l01070\"></a><span class=\"lineno\"> 1070</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_XYZW_ONLY is defined. Only x, y, z and w component are available in vector type. This define disables swizzle operators and SIMD instruction sets.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01071\"></a><span class=\"lineno\"> 1071</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01072\"></a><span class=\"lineno\"> 1072</span>&#160;</div>\n<div class=\"line\"><a name=\"l01073\"></a><span class=\"lineno\"> 1073</span>&#160;        <span class=\"comment\">// Report swizzle operator support</span></div>\n<div class=\"line\"><a name=\"l01074\"></a><span class=\"lineno\"> 1074</span>&#160;<span class=\"preprocessor\">#       if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l01075\"></a><span class=\"lineno\"> 1075</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_SWIZZLE is defined, swizzling operators enabled.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01076\"></a><span class=\"lineno\"> 1076</span>&#160;<span class=\"preprocessor\">#       elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l01077\"></a><span class=\"lineno\"> 1077</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_SWIZZLE is defined, swizzling functions enabled. Enable compiler C++ language extensions to enable swizzle operators.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01078\"></a><span class=\"lineno\"> 1078</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l01079\"></a><span class=\"lineno\"> 1079</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01080\"></a><span class=\"lineno\"> 1080</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01081\"></a><span class=\"lineno\"> 1081</span>&#160;</div>\n<div class=\"line\"><a name=\"l01082\"></a><span class=\"lineno\"> 1082</span>&#160;        <span class=\"comment\">// Report .length() type</span></div>\n<div class=\"line\"><a name=\"l01083\"></a><span class=\"lineno\"> 1083</span>&#160;<span class=\"preprocessor\">#       if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T</span></div>\n<div class=\"line\"><a name=\"l01084\"></a><span class=\"lineno\"> 1084</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_SIZE_T_LENGTH is defined. .length() returns a glm::length_t, a typedef of std::size_t.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01085\"></a><span class=\"lineno\"> 1085</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l01086\"></a><span class=\"lineno\"> 1086</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01087\"></a><span class=\"lineno\"> 1087</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01088\"></a><span class=\"lineno\"> 1088</span>&#160;</div>\n<div class=\"line\"><a name=\"l01089\"></a><span class=\"lineno\"> 1089</span>&#160;<span class=\"preprocessor\">#       if GLM_CONFIG_UNRESTRICTED_GENTYPE == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l01090\"></a><span class=\"lineno\"> 1090</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is defined. Removes GLSL restrictions on valid function genTypes.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01091\"></a><span class=\"lineno\"> 1091</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l01092\"></a><span class=\"lineno\"> 1092</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01093\"></a><span class=\"lineno\"> 1093</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01094\"></a><span class=\"lineno\"> 1094</span>&#160;</div>\n<div class=\"line\"><a name=\"l01095\"></a><span class=\"lineno\"> 1095</span>&#160;<span class=\"preprocessor\">#       if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l01096\"></a><span class=\"lineno\"> 1096</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_SILENT_WARNINGS is defined. Ignores C++ warnings from using C++ language extensions.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01097\"></a><span class=\"lineno\"> 1097</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l01098\"></a><span class=\"lineno\"> 1098</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_SILENT_WARNINGS is undefined. Shows C++ warnings from using C++ language extensions.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01099\"></a><span class=\"lineno\"> 1099</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01100\"></a><span class=\"lineno\"> 1100</span>&#160;</div>\n<div class=\"line\"><a name=\"l01101\"></a><span class=\"lineno\"> 1101</span>&#160;<span class=\"preprocessor\">#       ifdef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l01102\"></a><span class=\"lineno\"> 1102</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_SINGLE_ONLY is defined. Using only single precision floating-point types.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01103\"></a><span class=\"lineno\"> 1103</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01104\"></a><span class=\"lineno\"> 1104</span>&#160;</div>\n<div class=\"line\"><a name=\"l01105\"></a><span class=\"lineno\"> 1105</span>&#160;<span class=\"preprocessor\">#       if defined(GLM_FORCE_ALIGNED_GENTYPES) &amp;&amp; (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE)</span></div>\n<div class=\"line\"><a name=\"l01106\"></a><span class=\"lineno\"> 1106</span>&#160;<span class=\"preprocessor\">#               undef GLM_FORCE_ALIGNED_GENTYPES</span></div>\n<div class=\"line\"><a name=\"l01107\"></a><span class=\"lineno\"> 1107</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_ALIGNED_GENTYPES is defined, allowing aligned types. This prevents the use of C++ constexpr.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01108\"></a><span class=\"lineno\"> 1108</span>&#160;<span class=\"preprocessor\">#       elif defined(GLM_FORCE_ALIGNED_GENTYPES) &amp;&amp; (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE)</span></div>\n<div class=\"line\"><a name=\"l01109\"></a><span class=\"lineno\"> 1109</span>&#160;<span class=\"preprocessor\">#               undef GLM_FORCE_ALIGNED_GENTYPES</span></div>\n<div class=\"line\"><a name=\"l01110\"></a><span class=\"lineno\"> 1110</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01111\"></a><span class=\"lineno\"> 1111</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01112\"></a><span class=\"lineno\"> 1112</span>&#160;</div>\n<div class=\"line\"><a name=\"l01113\"></a><span class=\"lineno\"> 1113</span>&#160;<span class=\"preprocessor\">#       if defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES)</span></div>\n<div class=\"line\"><a name=\"l01114\"></a><span class=\"lineno\"> 1114</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE</span></div>\n<div class=\"line\"><a name=\"l01115\"></a><span class=\"lineno\"> 1115</span>&#160;<span class=\"preprocessor\">#                       undef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES</span></div>\n<div class=\"line\"><a name=\"l01116\"></a><span class=\"lineno\"> 1116</span>&#160;<span class=\"preprocessor\">#                       pragma message(&quot;GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01117\"></a><span class=\"lineno\"> 1117</span>&#160;<span class=\"preprocessor\">#               elif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l01118\"></a><span class=\"lineno\"> 1118</span>&#160;<span class=\"preprocessor\">#                       pragma message(&quot;GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined. All gentypes (e.g. vec3) will be aligned and padded by default.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01119\"></a><span class=\"lineno\"> 1119</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l01120\"></a><span class=\"lineno\"> 1120</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01121\"></a><span class=\"lineno\"> 1121</span>&#160;</div>\n<div class=\"line\"><a name=\"l01122\"></a><span class=\"lineno\"> 1122</span>&#160;<span class=\"preprocessor\">#       if GLM_CONFIG_CLIP_CONTROL &amp; GLM_CLIP_CONTROL_ZO_BIT</span></div>\n<div class=\"line\"><a name=\"l01123\"></a><span class=\"lineno\"> 1123</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is defined. Using zero to one depth clip space.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01124\"></a><span class=\"lineno\"> 1124</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l01125\"></a><span class=\"lineno\"> 1125</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01126\"></a><span class=\"lineno\"> 1126</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01127\"></a><span class=\"lineno\"> 1127</span>&#160;</div>\n<div class=\"line\"><a name=\"l01128\"></a><span class=\"lineno\"> 1128</span>&#160;<span class=\"preprocessor\">#       if GLM_CONFIG_CLIP_CONTROL &amp; GLM_CLIP_CONTROL_LH_BIT</span></div>\n<div class=\"line\"><a name=\"l01129\"></a><span class=\"lineno\"> 1129</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_LEFT_HANDED is defined. Using left handed coordinate system.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01130\"></a><span class=\"lineno\"> 1130</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l01131\"></a><span class=\"lineno\"> 1131</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system.&quot;)</span></div>\n<div class=\"line\"><a name=\"l01132\"></a><span class=\"lineno\"> 1132</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l01133\"></a><span class=\"lineno\"> 1133</span>&#160;<span class=\"preprocessor\">#endif//GLM_MESSAGES</span></div>\n<div class=\"line\"><a name=\"l01134\"></a><span class=\"lineno\"> 1134</span>&#160;</div>\n<div class=\"line\"><a name=\"l01135\"></a><span class=\"lineno\"> 1135</span>&#160;<span class=\"preprocessor\">#endif//GLM_SETUP_INCLUDED</span></div>\n<div class=\"ttc\" id=\"a00304_html_ga322a7d7d2c2c68994dc872a33de63c61\"><div class=\"ttname\"><a href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">glm::int64_t</a></div><div class=\"ttdeci\">int64 int64_t</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00085\">fwd.hpp:85</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4bf09d8838a86866b39ee6e109341645\"><div class=\"ttname\"><a href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">glm::int8_t</a></div><div class=\"ttdeci\">int8 int8_t</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00043\">fwd.hpp:43</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2171d9dc1fefb1c82e2817f45b622eac\"><div class=\"ttname\"><a href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">glm::uint32_t</a></div><div class=\"ttdeci\">uint32 uint32_t</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00129\">fwd.hpp:129</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga91f91f411080c37730856ff5887f5bcf\"><div class=\"ttname\"><a href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">glm::uint16_t</a></div><div class=\"ttdeci\">uint16 uint16_t</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00115\">fwd.hpp:115</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28d97808322d3c92186e4a0c067d7e8e\"><div class=\"ttname\"><a href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">glm::uint8_t</a></div><div class=\"ttdeci\">uint8 uint8_t</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00101\">fwd.hpp:101</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3999d3e7ff22025c16ddb601e14dfdee\"><div class=\"ttname\"><a href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">glm::uint64_t</a></div><div class=\"ttdeci\">uint64 uint64_t</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00143\">fwd.hpp:143</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae8f5e3e964ca2ae240adc2c0d74adede\"><div class=\"ttname\"><a href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">glm::int16_t</a></div><div class=\"ttdeci\">int16 int16_t</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00057\">fwd.hpp:57</a></div></div>\n<div class=\"ttc\" id=\"a00240_html\"><div class=\"ttname\"><a href=\"a00240.html\">std</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00040_source.html#l00049\">hash.hpp:49</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga042ef09ff2f0cb24a36f541bcb3a3710\"><div class=\"ttname\"><a href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">glm::int32_t</a></div><div class=\"ttdeci\">int32 int32_t</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00071\">fwd.hpp:71</a></div></div>\n<div class=\"ttc\" id=\"a00263_html_gab630f76c26b50298187f7889104d4b9c\"><div class=\"ttname\"><a href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">glm::uint64</a></div><div class=\"ttdeci\">detail::uint64 uint64</div><div class=\"ttdoc\">64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00151_source.html#l00067\">scalar_uint_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00260_html_gaff5189f97f9e842d9636a0f240001b2e\"><div class=\"ttname\"><a href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">glm::int64</a></div><div class=\"ttdeci\">detail::int64 int64</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00146_source.html#l00067\">scalar_int_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00154.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: spline.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">spline.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00358.html\">GLM_GTX_spline</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00154_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8119c04f8210fd0d292757565cd6918d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8119c04f8210fd0d292757565cd6918d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00358.html#ga8119c04f8210fd0d292757565cd6918d\">catmullRom</a> (genType const &amp;v1, genType const &amp;v2, genType const &amp;v3, genType const &amp;v4, typename genType::value_type const &amp;s)</td></tr>\n<tr class=\"memdesc:ga8119c04f8210fd0d292757565cd6918d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a point from a catmull rom curve.  <a href=\"a00358.html#ga8119c04f8210fd0d292757565cd6918d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8119c04f8210fd0d292757565cd6918d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b867eb52e2fc933d2e0bf26aabc9a70\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6b867eb52e2fc933d2e0bf26aabc9a70\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70\">cubic</a> (genType const &amp;v1, genType const &amp;v2, genType const &amp;v3, genType const &amp;v4, typename genType::value_type const &amp;s)</td></tr>\n<tr class=\"memdesc:ga6b867eb52e2fc933d2e0bf26aabc9a70\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a point from a cubic curve.  <a href=\"a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6b867eb52e2fc933d2e0bf26aabc9a70\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa69e143f6374d32f934a8edeaa50bac9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa69e143f6374d32f934a8edeaa50bac9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00358.html#gaa69e143f6374d32f934a8edeaa50bac9\">hermite</a> (genType const &amp;v1, genType const &amp;t1, genType const &amp;v2, genType const &amp;t2, typename genType::value_type const &amp;s)</td></tr>\n<tr class=\"memdesc:gaa69e143f6374d32f934a8edeaa50bac9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a point from a hermite curve.  <a href=\"a00358.html#gaa69e143f6374d32f934a8edeaa50bac9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa69e143f6374d32f934a8edeaa50bac9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00358.html\">GLM_GTX_spline</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00154_source.html\">spline.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00154_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: spline.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">spline.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00154.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/optimum_pow.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_spline is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_spline extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00358.html#ga8119c04f8210fd0d292757565cd6918d\">catmullRom</a>(</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v3,</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v4,</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                <span class=\"keyword\">typename</span> genType::value_type <span class=\"keyword\">const</span>&amp; s);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00358.html#gaa69e143f6374d32f934a8edeaa50bac9\">hermite</a>(</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                genType <span class=\"keyword\">const</span>&amp; t1,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                genType <span class=\"keyword\">const</span>&amp; t2,</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                <span class=\"keyword\">typename</span> genType::value_type <span class=\"keyword\">const</span>&amp; s);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70\">cubic</a>(</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v1,</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v2,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v3,</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                genType <span class=\"keyword\">const</span>&amp; v4,</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                <span class=\"keyword\">typename</span> genType::value_type <span class=\"keyword\">const</span>&amp; s);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#include &quot;spline.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00358_html_gaa69e143f6374d32f934a8edeaa50bac9\"><div class=\"ttname\"><a href=\"a00358.html#gaa69e143f6374d32f934a8edeaa50bac9\">glm::hermite</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType hermite(genType const &amp;v1, genType const &amp;t1, genType const &amp;v2, genType const &amp;t2, typename genType::value_type const &amp;s)</div><div class=\"ttdoc\">Return a point from a hermite curve. </div></div>\n<div class=\"ttc\" id=\"a00358_html_ga6b867eb52e2fc933d2e0bf26aabc9a70\"><div class=\"ttname\"><a href=\"a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70\">glm::cubic</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType cubic(genType const &amp;v1, genType const &amp;v2, genType const &amp;v3, genType const &amp;v4, typename genType::value_type const &amp;s)</div><div class=\"ttdoc\">Return a point from a cubic curve. </div></div>\n<div class=\"ttc\" id=\"a00358_html_ga8119c04f8210fd0d292757565cd6918d\"><div class=\"ttname\"><a href=\"a00358.html#ga8119c04f8210fd0d292757565cd6918d\">glm::catmullRom</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType catmullRom(genType const &amp;v1, genType const &amp;v2, genType const &amp;v3, genType const &amp;v4, typename genType::value_type const &amp;s)</div><div class=\"ttdoc\">Return a point from a catmull rom curve. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00155.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: std_based_type.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">std_based_type.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00359.html\">GLM_GTX_std_based_type</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00155_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaeb877ac8f9a3703961736c1c5072cf68\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gaeb877ac8f9a3703961736c1c5072cf68\">size1</a></td></tr>\n<tr class=\"memdesc:gaeb877ac8f9a3703961736c1c5072cf68\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of one std::size_t component.  <a href=\"a00359.html#gaeb877ac8f9a3703961736c1c5072cf68\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeb877ac8f9a3703961736c1c5072cf68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaf6accc57f5aa50447ba7310ce3f0d6f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f\">size1_t</a></td></tr>\n<tr class=\"memdesc:gaaf6accc57f5aa50447ba7310ce3f0d6f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of one std::size_t component.  <a href=\"a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaf6accc57f5aa50447ba7310ce3f0d6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1bfe8c4975ff282bce41be2bacd524fe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe\">size2</a></td></tr>\n<tr class=\"memdesc:ga1bfe8c4975ff282bce41be2bacd524fe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of two std::size_t components.  <a href=\"a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1bfe8c4975ff282bce41be2bacd524fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5976c25657d4e2b5f73f39364c3845d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#ga5976c25657d4e2b5f73f39364c3845d6\">size2_t</a></td></tr>\n<tr class=\"memdesc:ga5976c25657d4e2b5f73f39364c3845d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of two std::size_t components.  <a href=\"a00359.html#ga5976c25657d4e2b5f73f39364c3845d6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5976c25657d4e2b5f73f39364c3845d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1c72956d0359b0db332c6c8774d3b04\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gae1c72956d0359b0db332c6c8774d3b04\">size3</a></td></tr>\n<tr class=\"memdesc:gae1c72956d0359b0db332c6c8774d3b04\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of three std::size_t components.  <a href=\"a00359.html#gae1c72956d0359b0db332c6c8774d3b04\">More...</a><br /></td></tr>\n<tr class=\"separator:gae1c72956d0359b0db332c6c8774d3b04\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2654983c60d641fd3808e65a8dfad8d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gaf2654983c60d641fd3808e65a8dfad8d\">size3_t</a></td></tr>\n<tr class=\"memdesc:gaf2654983c60d641fd3808e65a8dfad8d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of three std::size_t components.  <a href=\"a00359.html#gaf2654983c60d641fd3808e65a8dfad8d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2654983c60d641fd3808e65a8dfad8d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a19dde617beaf8ce3cfc2ac5064e9aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa\">size4</a></td></tr>\n<tr class=\"memdesc:ga3a19dde617beaf8ce3cfc2ac5064e9aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of four std::size_t components.  <a href=\"a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a19dde617beaf8ce3cfc2ac5064e9aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa423efcea63675a2df26990dbcb58656\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gaa423efcea63675a2df26990dbcb58656\">size4_t</a></td></tr>\n<tr class=\"memdesc:gaa423efcea63675a2df26990dbcb58656\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of four std::size_t components.  <a href=\"a00359.html#gaa423efcea63675a2df26990dbcb58656\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa423efcea63675a2df26990dbcb58656\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00359.html\">GLM_GTX_std_based_type</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\ngtx_extented_min_max (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00155_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: std_based_type.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">std_based_type.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00155.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;cstdlib&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_std_based_type is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_std_based_type extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00359.html#gaeb877ac8f9a3703961736c1c5072cf68\">   35</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, std::size_t, defaultp&gt;           <a class=\"code\" href=\"a00359.html#gaeb877ac8f9a3703961736c1c5072cf68\">size1</a>;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe\">   39</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, std::size_t, defaultp&gt;           <a class=\"code\" href=\"a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe\">size2</a>;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00359.html#gae1c72956d0359b0db332c6c8774d3b04\">   43</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, std::size_t, defaultp&gt;           <a class=\"code\" href=\"a00359.html#gae1c72956d0359b0db332c6c8774d3b04\">size3</a>;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa\">   47</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, std::size_t, defaultp&gt;           <a class=\"code\" href=\"a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa\">size4</a>;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f\">   51</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, std::size_t, defaultp&gt;           <a class=\"code\" href=\"a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f\">size1_t</a>;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00359.html#ga5976c25657d4e2b5f73f39364c3845d6\">   55</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, std::size_t, defaultp&gt;           <a class=\"code\" href=\"a00359.html#ga5976c25657d4e2b5f73f39364c3845d6\">size2_t</a>;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00359.html#gaf2654983c60d641fd3808e65a8dfad8d\">   59</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, std::size_t, defaultp&gt;           <a class=\"code\" href=\"a00359.html#gaf2654983c60d641fd3808e65a8dfad8d\">size3_t</a>;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00359.html#gaa423efcea63675a2df26990dbcb58656\">   63</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, std::size_t, defaultp&gt;           <a class=\"code\" href=\"a00359.html#gaa423efcea63675a2df26990dbcb58656\">size4_t</a>;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"preprocessor\">#include &quot;std_based_type.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00359_html_gaeb877ac8f9a3703961736c1c5072cf68\"><div class=\"ttname\"><a href=\"a00359.html#gaeb877ac8f9a3703961736c1c5072cf68\">glm::size1</a></div><div class=\"ttdeci\">vec&lt; 1, std::size_t, defaultp &gt; size1</div><div class=\"ttdoc\">Vector type based of one std::size_t component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00155_source.html#l00035\">std_based_type.hpp:35</a></div></div>\n<div class=\"ttc\" id=\"a00359_html_gaf2654983c60d641fd3808e65a8dfad8d\"><div class=\"ttname\"><a href=\"a00359.html#gaf2654983c60d641fd3808e65a8dfad8d\">glm::size3_t</a></div><div class=\"ttdeci\">vec&lt; 3, std::size_t, defaultp &gt; size3_t</div><div class=\"ttdoc\">Vector type based of three std::size_t components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00155_source.html#l00059\">std_based_type.hpp:59</a></div></div>\n<div class=\"ttc\" id=\"a00359_html_ga5976c25657d4e2b5f73f39364c3845d6\"><div class=\"ttname\"><a href=\"a00359.html#ga5976c25657d4e2b5f73f39364c3845d6\">glm::size2_t</a></div><div class=\"ttdeci\">vec&lt; 2, std::size_t, defaultp &gt; size2_t</div><div class=\"ttdoc\">Vector type based of two std::size_t components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00155_source.html#l00055\">std_based_type.hpp:55</a></div></div>\n<div class=\"ttc\" id=\"a00359_html_ga3a19dde617beaf8ce3cfc2ac5064e9aa\"><div class=\"ttname\"><a href=\"a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa\">glm::size4</a></div><div class=\"ttdeci\">vec&lt; 4, std::size_t, defaultp &gt; size4</div><div class=\"ttdoc\">Vector type based of four std::size_t components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00155_source.html#l00047\">std_based_type.hpp:47</a></div></div>\n<div class=\"ttc\" id=\"a00359_html_gaaf6accc57f5aa50447ba7310ce3f0d6f\"><div class=\"ttname\"><a href=\"a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f\">glm::size1_t</a></div><div class=\"ttdeci\">vec&lt; 1, std::size_t, defaultp &gt; size1_t</div><div class=\"ttdoc\">Vector type based of one std::size_t component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00155_source.html#l00051\">std_based_type.hpp:51</a></div></div>\n<div class=\"ttc\" id=\"a00359_html_gae1c72956d0359b0db332c6c8774d3b04\"><div class=\"ttname\"><a href=\"a00359.html#gae1c72956d0359b0db332c6c8774d3b04\">glm::size3</a></div><div class=\"ttdeci\">vec&lt; 3, std::size_t, defaultp &gt; size3</div><div class=\"ttdoc\">Vector type based of three std::size_t components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00155_source.html#l00043\">std_based_type.hpp:43</a></div></div>\n<div class=\"ttc\" id=\"a00359_html_ga1bfe8c4975ff282bce41be2bacd524fe\"><div class=\"ttname\"><a href=\"a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe\">glm::size2</a></div><div class=\"ttdeci\">vec&lt; 2, std::size_t, defaultp &gt; size2</div><div class=\"ttdoc\">Vector type based of two std::size_t components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00155_source.html#l00039\">std_based_type.hpp:39</a></div></div>\n<div class=\"ttc\" id=\"a00359_html_gaa423efcea63675a2df26990dbcb58656\"><div class=\"ttname\"><a href=\"a00359.html#gaa423efcea63675a2df26990dbcb58656\">glm::size4_t</a></div><div class=\"ttdeci\">vec&lt; 4, std::size_t, defaultp &gt; size4_t</div><div class=\"ttdoc\">Vector type based of four std::size_t components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00155_source.html#l00063\">std_based_type.hpp:63</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00156.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: string_cast.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">string_cast.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00360.html\">GLM_GTX_string_cast</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00156_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8f0dced1fd45e67e2d77e80ab93c7af5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8f0dced1fd45e67e2d77e80ab93c7af5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL std::string&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5\">to_string</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8f0dced1fd45e67e2d77e80ab93c7af5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Create a string from a GLM vector or matrix typed variable.  <a href=\"a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f0dced1fd45e67e2d77e80ab93c7af5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00360.html\">GLM_GTX_string_cast</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00330.html\" title=\"Include <glm/gtx/integer.hpp> to use the features of this extension. \">GLM_GTX_integer</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00156_source.html\">string_cast.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00156_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: string_cast.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">string_cast.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00156.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/type_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/dual_quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &lt;string&gt;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &lt;cmath&gt;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_string_cast is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_string_cast extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#if(GLM_COMPILER &amp; GLM_COMPILER_CUDA)</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#       error &quot;GLM_GTX_string_cast is not supported on CUDA compiler&quot;</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        GLM_FUNC_DECL std::string <a class=\"code\" href=\"a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5\">to_string</a>(genType <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"preprocessor\">#include &quot;string_cast.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00360_html_ga8f0dced1fd45e67e2d77e80ab93c7af5\"><div class=\"ttname\"><a href=\"a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5\">glm::to_string</a></div><div class=\"ttdeci\">GLM_FUNC_DECL std::string to_string(genType const &amp;x)</div><div class=\"ttdoc\">Create a string from a GLM vector or matrix typed variable. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00157.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: texture.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">texture.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00361.html\">GLM_GTX_texture</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00157_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaa8c377f4e63486db4fa872d77880da73\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa8c377f4e63486db4fa872d77880da73\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00361.html#gaa8c377f4e63486db4fa872d77880da73\">levels</a> (vec&lt; L, T, Q &gt; const &amp;Extent)</td></tr>\n<tr class=\"memdesc:gaa8c377f4e63486db4fa872d77880da73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the number of mipmaps levels necessary to create a mipmap complete texture.  <a href=\"a00361.html#gaa8c377f4e63486db4fa872d77880da73\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa8c377f4e63486db4fa872d77880da73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00361.html\">GLM_GTX_texture</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00157_source.html\">texture.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00157_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: texture.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">texture.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00157.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/integer.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/component_wise.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_texture is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_texture extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span> &lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        T <a class=\"code\" href=\"a00361.html#gaa8c377f4e63486db4fa872d77880da73\">levels</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Extent);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#include &quot;texture.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"ttc\" id=\"a00361_html_gaa8c377f4e63486db4fa872d77880da73\"><div class=\"ttname\"><a href=\"a00361.html#gaa8c377f4e63486db4fa872d77880da73\">glm::levels</a></div><div class=\"ttdeci\">T levels(vec&lt; L, T, Q &gt; const &amp;Extent)</div><div class=\"ttdoc\">Compute the number of mipmaps levels necessary to create a mipmap complete texture. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00158.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: transform.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">transform.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00362.html\">GLM_GTX_transform</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00158_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf599be4c0e9d99be1f9cddba79b6018b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf599be4c0e9d99be1f9cddba79b6018b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b\">rotate</a> (T angle, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf599be4c0e9d99be1f9cddba79b6018b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians.  <a href=\"a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf599be4c0e9d99be1f9cddba79b6018b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafbeefee8fec884d566e4ada0049174d7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafbeefee8fec884d566e4ada0049174d7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00362.html#gafbeefee8fec884d566e4ada0049174d7\">scale</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gafbeefee8fec884d566e4ada0049174d7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components.  <a href=\"a00362.html#gafbeefee8fec884d566e4ada0049174d7\">More...</a><br /></td></tr>\n<tr class=\"separator:gafbeefee8fec884d566e4ada0049174d7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga309a30e652e58c396e2c3d4db3ee7658\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga309a30e652e58c396e2c3d4db3ee7658\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00362.html#ga309a30e652e58c396e2c3d4db3ee7658\">translate</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga309a30e652e58c396e2c3d4db3ee7658\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.  <a href=\"a00362.html#ga309a30e652e58c396e2c3d4db3ee7658\">More...</a><br /></td></tr>\n<tr class=\"separator:ga309a30e652e58c396e2c3d4db3ee7658\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00362.html\">GLM_GTX_transform</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00296.html\" title=\"Include <glm/gtc/matrix_transform.hpp> to use the features of this extension. \">GLM_GTC_matrix_transform</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00362.html\" title=\"Include <glm/gtx/transform.hpp> to use the features of this extension. \">GLM_GTX_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00363.html\" title=\"Include <glm/gtx/transform2.hpp> to use the features of this extension. \">GLM_GTX_transform2</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00158_source.html\">transform.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00158_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: transform.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">transform.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00158.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/matrix_transform.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_transform is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_transform extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00362.html#ga309a30e652e58c396e2c3d4db3ee7658\">translate</a>(</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b\">rotate</a>(</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                T <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00362.html#gafbeefee8fec884d566e4ada0049174d7\">scale</a>(</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#include &quot;transform.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00362_html_ga309a30e652e58c396e2c3d4db3ee7658\"><div class=\"ttname\"><a href=\"a00362.html#ga309a30e652e58c396e2c3d4db3ee7658\">glm::translate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; translate(vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00362_html_gafbeefee8fec884d566e4ada0049174d7\"><div class=\"ttname\"><a href=\"a00362.html#gafbeefee8fec884d566e4ada0049174d7\">glm::scale</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; scale(vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components. </div></div>\n<div class=\"ttc\" id=\"a00362_html_gaf599be4c0e9d99be1f9cddba79b6018b\"><div class=\"ttname\"><a href=\"a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b\">glm::rotate</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; rotate(T angle, vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians...</div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00159.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: transform2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">transform2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00363.html\">GLM_GTX_transform2</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00159_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga5b992a0cdc8298054edb68e228f0d93e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5b992a0cdc8298054edb68e228f0d93e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#ga5b992a0cdc8298054edb68e228f0d93e\">proj2D</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga5b992a0cdc8298054edb68e228f0d93e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build planar projection matrix along normal axis.  <a href=\"a00363.html#ga5b992a0cdc8298054edb68e228f0d93e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b992a0cdc8298054edb68e228f0d93e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa2b7f4f15b98f697caede11bef50509e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa2b7f4f15b98f697caede11bef50509e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gaa2b7f4f15b98f697caede11bef50509e\">proj3D</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:gaa2b7f4f15b98f697caede11bef50509e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build planar projection matrix along normal axis.  <a href=\"a00363.html#gaa2b7f4f15b98f697caede11bef50509e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa2b7f4f15b98f697caede11bef50509e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf249498b236e62c983d90d30d63c99c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabf249498b236e62c983d90d30d63c99c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gabf249498b236e62c983d90d30d63c99c\">scaleBias</a> (T scale, T bias)</td></tr>\n<tr class=\"memdesc:gabf249498b236e62c983d90d30d63c99c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a scale bias matrix.  <a href=\"a00363.html#gabf249498b236e62c983d90d30d63c99c\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf249498b236e62c983d90d30d63c99c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae2bdd91a76759fecfbaef97e3020aa8e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae2bdd91a76759fecfbaef97e3020aa8e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e\">scaleBias</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T scale, T bias)</td></tr>\n<tr class=\"memdesc:gae2bdd91a76759fecfbaef97e3020aa8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a scale bias matrix.  <a href=\"a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae2bdd91a76759fecfbaef97e3020aa8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf714b8a358181572b32a45555f71948\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabf714b8a358181572b32a45555f71948\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gabf714b8a358181572b32a45555f71948\">shearX2D</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T y)</td></tr>\n<tr class=\"memdesc:gabf714b8a358181572b32a45555f71948\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on X axis.  <a href=\"a00363.html#gabf714b8a358181572b32a45555f71948\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf714b8a358181572b32a45555f71948\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73e867c6cd4d700fe2054437e56106c4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga73e867c6cd4d700fe2054437e56106c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#ga73e867c6cd4d700fe2054437e56106c4\">shearX3D</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T y, T z)</td></tr>\n<tr class=\"memdesc:ga73e867c6cd4d700fe2054437e56106c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension.  <a href=\"a00363.html#ga73e867c6cd4d700fe2054437e56106c4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga73e867c6cd4d700fe2054437e56106c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7998d0763d9181550c77e8af09a182c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac7998d0763d9181550c77e8af09a182c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gac7998d0763d9181550c77e8af09a182c\">shearY2D</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T x)</td></tr>\n<tr class=\"memdesc:gac7998d0763d9181550c77e8af09a182c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on Y axis.  <a href=\"a00363.html#gac7998d0763d9181550c77e8af09a182c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7998d0763d9181550c77e8af09a182c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade5bb65ffcb513973db1a1314fb5cfac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gade5bb65ffcb513973db1a1314fb5cfac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gade5bb65ffcb513973db1a1314fb5cfac\">shearY3D</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T x, T z)</td></tr>\n<tr class=\"memdesc:gade5bb65ffcb513973db1a1314fb5cfac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on Y axis.  <a href=\"a00363.html#gade5bb65ffcb513973db1a1314fb5cfac\">More...</a><br /></td></tr>\n<tr class=\"separator:gade5bb65ffcb513973db1a1314fb5cfac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6591e0a3a9d2c9c0b6577bb4dace0255\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6591e0a3a9d2c9c0b6577bb4dace0255\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255\">shearZ3D</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T x, T y)</td></tr>\n<tr class=\"memdesc:ga6591e0a3a9d2c9c0b6577bb4dace0255\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on Z axis.  <a href=\"a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6591e0a3a9d2c9c0b6577bb4dace0255\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00363.html\">GLM_GTX_transform2</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00362.html\" title=\"Include <glm/gtx/transform.hpp> to use the features of this extension. \">GLM_GTX_transform</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00159_source.html\">transform2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00159_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: transform2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">transform2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00159.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/transform.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_transform2 is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_transform2 extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00363.html#gabf714b8a358181572b32a45555f71948\">shearX2D</a>(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T y);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00363.html#gac7998d0763d9181550c77e8af09a182c\">shearY2D</a>(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T x);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00363.html#ga73e867c6cd4d700fe2054437e56106c4\">shearX3D</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T y, T z);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00363.html#gade5bb65ffcb513973db1a1314fb5cfac\">shearY3D</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T x, T z);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255\">shearZ3D</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T x, T y);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"comment\">//template&lt;typename T&gt; GLM_FUNC_QUALIFIER mat&lt;4, 4, T, Q&gt; shear(const mat&lt;4, 4, T, Q&gt; &amp; m, shearPlane, planePoint, angle)</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <span class=\"comment\">// Identity + tan(angle) * cross(Normal, OnPlaneVector)     0</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"comment\">// - dot(PointOnPlane, normal) * OnPlaneVector              1</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        <span class=\"comment\">// Reflect functions seem to don&#39;t work</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"comment\">//template&lt;typename T&gt; mat&lt;3, 3, T, Q&gt; reflect2D(const mat&lt;3, 3, T, Q&gt; &amp; m, const vec&lt;3, T, Q&gt;&amp; normal){return reflect2DGTX(m, normal);}                                                                        //!&lt; \\brief Build a reflection matrix (from GLM_GTX_transform2 extension)</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"comment\">//template&lt;typename T&gt; mat&lt;4, 4, T, Q&gt; reflect3D(const mat&lt;4, 4, T, Q&gt; &amp; m, const vec&lt;3, T, Q&gt;&amp; normal){return reflect3DGTX(m, normal);}                                                                        //!&lt; \\brief Build a reflection matrix (from GLM_GTX_transform2 extension)</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; <a class=\"code\" href=\"a00363.html#ga5b992a0cdc8298054edb68e228f0d93e\">proj2D</a>(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; normal);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00363.html#gaa2b7f4f15b98f697caede11bef50509e\">proj3D</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span> &amp; m, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; normal);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e\">scaleBias</a>(T <a class=\"code\" href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">scale</a>, T bias);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; <a class=\"code\" href=\"a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e\">scaleBias</a>(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; m, T <a class=\"code\" href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">scale</a>, T bias);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;<span class=\"preprocessor\">#include &quot;transform2.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00363_html_gabf714b8a358181572b32a45555f71948\"><div class=\"ttname\"><a href=\"a00363.html#gabf714b8a358181572b32a45555f71948\">glm::shearX2D</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; shearX2D(mat&lt; 3, 3, T, Q &gt; const &amp;m, T y)</div><div class=\"ttdoc\">Transforms a matrix with a shearing on X axis. </div></div>\n<div class=\"ttc\" id=\"a00363_html_gac7998d0763d9181550c77e8af09a182c\"><div class=\"ttname\"><a href=\"a00363.html#gac7998d0763d9181550c77e8af09a182c\">glm::shearY2D</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; shearY2D(mat&lt; 3, 3, T, Q &gt; const &amp;m, T x)</div><div class=\"ttdoc\">Transforms a matrix with a shearing on Y axis. </div></div>\n<div class=\"ttc\" id=\"a00363_html_gaa2b7f4f15b98f697caede11bef50509e\"><div class=\"ttname\"><a href=\"a00363.html#gaa2b7f4f15b98f697caede11bef50509e\">glm::proj3D</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; proj3D(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;normal)</div><div class=\"ttdoc\">Build planar projection matrix along normal axis. </div></div>\n<div class=\"ttc\" id=\"a00363_html_ga5b992a0cdc8298054edb68e228f0d93e\"><div class=\"ttname\"><a href=\"a00363.html#ga5b992a0cdc8298054edb68e228f0d93e\">glm::proj2D</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt; proj2D(mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;normal)</div><div class=\"ttdoc\">Build planar projection matrix along normal axis. </div></div>\n<div class=\"ttc\" id=\"a00363_html_ga6591e0a3a9d2c9c0b6577bb4dace0255\"><div class=\"ttname\"><a href=\"a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255\">glm::shearZ3D</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; shearZ3D(mat&lt; 4, 4, T, Q &gt; const &amp;m, T x, T y)</div><div class=\"ttdoc\">Transforms a matrix with a shearing on Z axis. </div></div>\n<div class=\"ttc\" id=\"a00247_html_ga05051adbee603fb3c5095d8cf5cc229b\"><div class=\"ttname\"><a href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">glm::scale</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; scale(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Builds a scale 4 * 4 matrix created from 3 scalars. </div></div>\n<div class=\"ttc\" id=\"a00363_html_gade5bb65ffcb513973db1a1314fb5cfac\"><div class=\"ttname\"><a href=\"a00363.html#gade5bb65ffcb513973db1a1314fb5cfac\">glm::shearY3D</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; shearY3D(mat&lt; 4, 4, T, Q &gt; const &amp;m, T x, T z)</div><div class=\"ttdoc\">Transforms a matrix with a shearing on Y axis. </div></div>\n<div class=\"ttc\" id=\"a00363_html_gae2bdd91a76759fecfbaef97e3020aa8e\"><div class=\"ttname\"><a href=\"a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e\">glm::scaleBias</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; scaleBias(mat&lt; 4, 4, T, Q &gt; const &amp;m, T scale, T bias)</div><div class=\"ttdoc\">Build a scale bias matrix. </div></div>\n<div class=\"ttc\" id=\"a00363_html_ga73e867c6cd4d700fe2054437e56106c4\"><div class=\"ttname\"><a href=\"a00363.html#ga73e867c6cd4d700fe2054437e56106c4\">glm::shearX3D</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt; shearX3D(mat&lt; 4, 4, T, Q &gt; const &amp;m, T y, T z)</div><div class=\"ttdoc\">Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00160.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: trigonometric.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">trigonometric.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00160_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gacc9b092df8257c68f19c9053703e2563\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacc9b092df8257c68f19c9053703e2563\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gacc9b092df8257c68f19c9053703e2563\">acos</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gacc9b092df8257c68f19c9053703e2563\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc cosine.  <a href=\"a00373.html#gacc9b092df8257c68f19c9053703e2563\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc9b092df8257c68f19c9053703e2563\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga858f35dc66fd2688f20c52b5f25be76a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga858f35dc66fd2688f20c52b5f25be76a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga858f35dc66fd2688f20c52b5f25be76a\">acosh</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga858f35dc66fd2688f20c52b5f25be76a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc hyperbolic cosine; returns the non-negative inverse of cosh.  <a href=\"a00373.html#ga858f35dc66fd2688f20c52b5f25be76a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga858f35dc66fd2688f20c52b5f25be76a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0552d2df4865fa8c3d7cfc3ec2caac73\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0552d2df4865fa8c3d7cfc3ec2caac73\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73\">asin</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga0552d2df4865fa8c3d7cfc3ec2caac73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc sine.  <a href=\"a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0552d2df4865fa8c3d7cfc3ec2caac73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3ef16b501ee859fddde88e22192a5950\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3ef16b501ee859fddde88e22192a5950\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga3ef16b501ee859fddde88e22192a5950\">asinh</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga3ef16b501ee859fddde88e22192a5950\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc hyperbolic sine; returns the inverse of sinh.  <a href=\"a00373.html#ga3ef16b501ee859fddde88e22192a5950\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3ef16b501ee859fddde88e22192a5950\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac61629f3a4aa14057e7a8cae002291db\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac61629f3a4aa14057e7a8cae002291db\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">atan</a> (vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gac61629f3a4aa14057e7a8cae002291db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent.  <a href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">More...</a><br /></td></tr>\n<tr class=\"separator:gac61629f3a4aa14057e7a8cae002291db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5229f087eaccbc466f1c609ce3107b95\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5229f087eaccbc466f1c609ce3107b95\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga5229f087eaccbc466f1c609ce3107b95\">atan</a> (vec&lt; L, T, Q &gt; const &amp;y_over_x)</td></tr>\n<tr class=\"memdesc:ga5229f087eaccbc466f1c609ce3107b95\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent.  <a href=\"a00373.html#ga5229f087eaccbc466f1c609ce3107b95\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5229f087eaccbc466f1c609ce3107b95\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc925650e618357d07da255531658b87\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabc925650e618357d07da255531658b87\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gabc925650e618357d07da255531658b87\">atanh</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gabc925650e618357d07da255531658b87\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc hyperbolic tangent; returns the inverse of tanh.  <a href=\"a00373.html#gabc925650e618357d07da255531658b87\">More...</a><br /></td></tr>\n<tr class=\"separator:gabc925650e618357d07da255531658b87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6a41efc740e3b3c937447d3a6284130e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6a41efc740e3b3c937447d3a6284130e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga6a41efc740e3b3c937447d3a6284130e\">cos</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga6a41efc740e3b3c937447d3a6284130e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The standard trigonometric cosine function.  <a href=\"a00373.html#ga6a41efc740e3b3c937447d3a6284130e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6a41efc740e3b3c937447d3a6284130e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e260e372742c5f517aca196cf1e62b3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4e260e372742c5f517aca196cf1e62b3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga4e260e372742c5f517aca196cf1e62b3\">cosh</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga4e260e372742c5f517aca196cf1e62b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2.  <a href=\"a00373.html#ga4e260e372742c5f517aca196cf1e62b3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e260e372742c5f517aca196cf1e62b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8faec9e303538065911ba8b3caf7326b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8faec9e303538065911ba8b3caf7326b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga8faec9e303538065911ba8b3caf7326b\">degrees</a> (vec&lt; L, T, Q &gt; const &amp;radians)</td></tr>\n<tr class=\"memdesc:ga8faec9e303538065911ba8b3caf7326b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts radians to degrees and returns the result.  <a href=\"a00373.html#ga8faec9e303538065911ba8b3caf7326b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8faec9e303538065911ba8b3caf7326b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e1db4862c5e25afd553930e2fdd6a68\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6e1db4862c5e25afd553930e2fdd6a68\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68\">radians</a> (vec&lt; L, T, Q &gt; const &amp;degrees)</td></tr>\n<tr class=\"memdesc:ga6e1db4862c5e25afd553930e2fdd6a68\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts degrees to radians and returns the result.  <a href=\"a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e1db4862c5e25afd553930e2fdd6a68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29747fd108cb7292ae5a284f69691a69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga29747fd108cb7292ae5a284f69691a69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga29747fd108cb7292ae5a284f69691a69\">sin</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga29747fd108cb7292ae5a284f69691a69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The standard trigonometric sine function.  <a href=\"a00373.html#ga29747fd108cb7292ae5a284f69691a69\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29747fd108cb7292ae5a284f69691a69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7c39ff21809e281552b4dbe46f4a39d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac7c39ff21809e281552b4dbe46f4a39d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gac7c39ff21809e281552b4dbe46f4a39d\">sinh</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:gac7c39ff21809e281552b4dbe46f4a39d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2.  <a href=\"a00373.html#gac7c39ff21809e281552b4dbe46f4a39d\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7c39ff21809e281552b4dbe46f4a39d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga293a34cfb9f0115cc606b4a97c84f11f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga293a34cfb9f0115cc606b4a97c84f11f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f\">tan</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga293a34cfb9f0115cc606b4a97c84f11f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The standard trigonometric tangent function.  <a href=\"a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga293a34cfb9f0115cc606b4a97c84f11f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\">tanh</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)  <a href=\"a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00160_source.html\">trigonometric.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00160_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: trigonometric.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">trigonometric.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00160.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68\">radians</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00373.html#ga8faec9e303538065911ba8b3caf7326b\">degrees</a>);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga8faec9e303538065911ba8b3caf7326b\">degrees</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68\">radians</a>);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga29747fd108cb7292ae5a284f69691a69\">sin</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga6a41efc740e3b3c937447d3a6284130e\">cos</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f\">tan</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73\">asin</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#gacc9b092df8257c68f19c9053703e2563\">acos</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga5229f087eaccbc466f1c609ce3107b95\">atan</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga5229f087eaccbc466f1c609ce3107b95\">atan</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y_over_x);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#gac7c39ff21809e281552b4dbe46f4a39d\">sinh</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga4e260e372742c5f517aca196cf1e62b3\">cosh</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\">tanh</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a>);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga3ef16b501ee859fddde88e22192a5950\">asinh</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#ga858f35dc66fd2688f20c52b5f25be76a\">acosh</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00373.html#gabc925650e618357d07da255531658b87\">atanh</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;<span class=\"preprocessor\">#include &quot;detail/func_trigonometric.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00373_html_ga8faec9e303538065911ba8b3caf7326b\"><div class=\"ttname\"><a href=\"a00373.html#ga8faec9e303538065911ba8b3caf7326b\">glm::degrees</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; degrees(vec&lt; L, T, Q &gt; const &amp;radians)</div><div class=\"ttdoc\">Converts radians to degrees and returns the result. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga4e260e372742c5f517aca196cf1e62b3\"><div class=\"ttname\"><a href=\"a00373.html#ga4e260e372742c5f517aca196cf1e62b3\">glm::cosh</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; cosh(vec&lt; L, T, Q &gt; const &amp;angle)</div><div class=\"ttdoc\">Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2. </div></div>\n<div class=\"ttc\" id=\"a00373_html_gacc9b092df8257c68f19c9053703e2563\"><div class=\"ttname\"><a href=\"a00373.html#gacc9b092df8257c68f19c9053703e2563\">glm::acos</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; acos(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Arc cosine. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga29747fd108cb7292ae5a284f69691a69\"><div class=\"ttname\"><a href=\"a00373.html#ga29747fd108cb7292ae5a284f69691a69\">glm::sin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; sin(vec&lt; L, T, Q &gt; const &amp;angle)</div><div class=\"ttdoc\">The standard trigonometric sine function. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga6e1db4862c5e25afd553930e2fdd6a68\"><div class=\"ttname\"><a href=\"a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68\">glm::radians</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; radians(vec&lt; L, T, Q &gt; const &amp;degrees)</div><div class=\"ttdoc\">Converts degrees to radians and returns the result. </div></div>\n<div class=\"ttc\" id=\"a00257_html_ga8aa248b31d5ade470c87304df5eb7bd8\"><div class=\"ttname\"><a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns the quaternion rotation angle. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga0552d2df4865fa8c3d7cfc3ec2caac73\"><div class=\"ttname\"><a href=\"a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73\">glm::asin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; asin(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Arc sine. </div></div>\n<div class=\"ttc\" id=\"a00373_html_gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><div class=\"ttname\"><a href=\"a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\">glm::tanh</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; tanh(vec&lt; L, T, Q &gt; const &amp;angle)</div><div class=\"ttdoc\">Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) </div></div>\n<div class=\"ttc\" id=\"a00373_html_gac7c39ff21809e281552b4dbe46f4a39d\"><div class=\"ttname\"><a href=\"a00373.html#gac7c39ff21809e281552b4dbe46f4a39d\">glm::sinh</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; sinh(vec&lt; L, T, Q &gt; const &amp;angle)</div><div class=\"ttdoc\">Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga3ef16b501ee859fddde88e22192a5950\"><div class=\"ttname\"><a href=\"a00373.html#ga3ef16b501ee859fddde88e22192a5950\">glm::asinh</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; asinh(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Arc hyperbolic sine; returns the inverse of sinh. </div></div>\n<div class=\"ttc\" id=\"a00373_html_gabc925650e618357d07da255531658b87\"><div class=\"ttname\"><a href=\"a00373.html#gabc925650e618357d07da255531658b87\">glm::atanh</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; atanh(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Arc hyperbolic tangent; returns the inverse of tanh. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga6a41efc740e3b3c937447d3a6284130e\"><div class=\"ttname\"><a href=\"a00373.html#ga6a41efc740e3b3c937447d3a6284130e\">glm::cos</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; cos(vec&lt; L, T, Q &gt; const &amp;angle)</div><div class=\"ttdoc\">The standard trigonometric cosine function. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga5229f087eaccbc466f1c609ce3107b95\"><div class=\"ttname\"><a href=\"a00373.html#ga5229f087eaccbc466f1c609ce3107b95\">glm::atan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; atan(vec&lt; L, T, Q &gt; const &amp;y_over_x)</div><div class=\"ttdoc\">Arc tangent. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga858f35dc66fd2688f20c52b5f25be76a\"><div class=\"ttname\"><a href=\"a00373.html#ga858f35dc66fd2688f20c52b5f25be76a\">glm::acosh</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; acosh(vec&lt; L, T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Arc hyperbolic cosine; returns the non-negative inverse of cosh. </div></div>\n<div class=\"ttc\" id=\"a00373_html_ga293a34cfb9f0115cc606b4a97c84f11f\"><div class=\"ttname\"><a href=\"a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f\">glm::tan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; tan(vec&lt; L, T, Q &gt; const &amp;angle)</div><div class=\"ttdoc\">The standard trigonometric tangent function. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00161.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_aligned.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/type_aligned.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00303.html\">GLM_GTC_type_aligned</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00161_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga780a35f764020f553a9601a3fcdcd059\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga780a35f764020f553a9601a3fcdcd059\"></a>\ntypedef aligned_highp_bvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga780a35f764020f553a9601a3fcdcd059\">aligned_bvec1</a></td></tr>\n<tr class=\"memdesc:ga780a35f764020f553a9601a3fcdcd059\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga780a35f764020f553a9601a3fcdcd059\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae766b317c5afec852bfb3d74a3c54bc8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae766b317c5afec852bfb3d74a3c54bc8\"></a>\ntypedef aligned_highp_bvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae766b317c5afec852bfb3d74a3c54bc8\">aligned_bvec2</a></td></tr>\n<tr class=\"memdesc:gae766b317c5afec852bfb3d74a3c54bc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae766b317c5afec852bfb3d74a3c54bc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1964ba70d15915e5b710926decbb3cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae1964ba70d15915e5b710926decbb3cb\"></a>\ntypedef aligned_highp_bvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae1964ba70d15915e5b710926decbb3cb\">aligned_bvec3</a></td></tr>\n<tr class=\"memdesc:gae1964ba70d15915e5b710926decbb3cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae1964ba70d15915e5b710926decbb3cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae164a1f7879f828bc35e50b79d786b05\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae164a1f7879f828bc35e50b79d786b05\"></a>\ntypedef aligned_highp_bvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae164a1f7879f828bc35e50b79d786b05\">aligned_bvec4</a></td></tr>\n<tr class=\"memdesc:gae164a1f7879f828bc35e50b79d786b05\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae164a1f7879f828bc35e50b79d786b05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6783859382677d35fcd5dac7dcbefdbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6783859382677d35fcd5dac7dcbefdbd\"></a>\ntypedef aligned_highp_dmat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6783859382677d35fcd5dac7dcbefdbd\">aligned_dmat2</a></td></tr>\n<tr class=\"memdesc:ga6783859382677d35fcd5dac7dcbefdbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga6783859382677d35fcd5dac7dcbefdbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga449a3ec2dde6b6bb4bb94c49a6aad388\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga449a3ec2dde6b6bb4bb94c49a6aad388\"></a>\ntypedef aligned_highp_dmat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388\">aligned_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga449a3ec2dde6b6bb4bb94c49a6aad388\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga449a3ec2dde6b6bb4bb94c49a6aad388\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga53d519a7b1bfb69076b3ec206a6b3bd1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga53d519a7b1bfb69076b3ec206a6b3bd1\"></a>\ntypedef aligned_highp_dmat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1\">aligned_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga53d519a7b1bfb69076b3ec206a6b3bd1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga53d519a7b1bfb69076b3ec206a6b3bd1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ccb2baeb0ab57b818c24e0d486c59d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5ccb2baeb0ab57b818c24e0d486c59d0\"></a>\ntypedef aligned_highp_dmat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0\">aligned_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga5ccb2baeb0ab57b818c24e0d486c59d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5ccb2baeb0ab57b818c24e0d486c59d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19aa695ffdb45ce29f7ea0b5029627de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga19aa695ffdb45ce29f7ea0b5029627de\"></a>\ntypedef aligned_highp_dmat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de\">aligned_dmat3</a></td></tr>\n<tr class=\"memdesc:ga19aa695ffdb45ce29f7ea0b5029627de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga19aa695ffdb45ce29f7ea0b5029627de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f5123d834bd1170edf8c386834e112c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5f5123d834bd1170edf8c386834e112c\"></a>\ntypedef aligned_highp_dmat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5f5123d834bd1170edf8c386834e112c\">aligned_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga5f5123d834bd1170edf8c386834e112c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5f5123d834bd1170edf8c386834e112c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga635bf3732281a2c2ca54d8f9d33d178f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga635bf3732281a2c2ca54d8f9d33d178f\"></a>\ntypedef aligned_highp_dmat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f\">aligned_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga635bf3732281a2c2ca54d8f9d33d178f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga635bf3732281a2c2ca54d8f9d33d178f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf488c6ad88c185054595d4d5c7ba5b9d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf488c6ad88c185054595d4d5c7ba5b9d\"></a>\ntypedef aligned_highp_dmat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d\">aligned_dmat3x4</a></td></tr>\n<tr class=\"memdesc:gaf488c6ad88c185054595d4d5c7ba5b9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaf488c6ad88c185054595d4d5c7ba5b9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga001bb387ae8192fa94dbd8b23b600439\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga001bb387ae8192fa94dbd8b23b600439\"></a>\ntypedef aligned_highp_dmat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga001bb387ae8192fa94dbd8b23b600439\">aligned_dmat4</a></td></tr>\n<tr class=\"memdesc:ga001bb387ae8192fa94dbd8b23b600439\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga001bb387ae8192fa94dbd8b23b600439\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa409cfb737bd59b68dc683e9b03930cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa409cfb737bd59b68dc683e9b03930cc\"></a>\ntypedef aligned_highp_dmat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa409cfb737bd59b68dc683e9b03930cc\">aligned_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gaa409cfb737bd59b68dc683e9b03930cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaa409cfb737bd59b68dc683e9b03930cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga621e89ca1dbdcb7b5a3e7de237c44121\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga621e89ca1dbdcb7b5a3e7de237c44121\"></a>\ntypedef aligned_highp_dmat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121\">aligned_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga621e89ca1dbdcb7b5a3e7de237c44121\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga621e89ca1dbdcb7b5a3e7de237c44121\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac9bda778d0b7ad82f656dab99b71857a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac9bda778d0b7ad82f656dab99b71857a\"></a>\ntypedef aligned_highp_dmat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac9bda778d0b7ad82f656dab99b71857a\">aligned_dmat4x4</a></td></tr>\n<tr class=\"memdesc:gac9bda778d0b7ad82f656dab99b71857a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gac9bda778d0b7ad82f656dab99b71857a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4974f46ae5a19415d91316960a53617a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4974f46ae5a19415d91316960a53617a\"></a>\ntypedef aligned_highp_dvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">aligned_dvec1</a></td></tr>\n<tr class=\"memdesc:ga4974f46ae5a19415d91316960a53617a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga4974f46ae5a19415d91316960a53617a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga18d859f87122b2b3b2992ffe86dbebc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga18d859f87122b2b3b2992ffe86dbebc0\"></a>\ntypedef aligned_highp_dvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">aligned_dvec2</a></td></tr>\n<tr class=\"memdesc:ga18d859f87122b2b3b2992ffe86dbebc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga18d859f87122b2b3b2992ffe86dbebc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa37869eea77d28419b2fb0ff70b69bf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa37869eea77d28419b2fb0ff70b69bf0\"></a>\ntypedef aligned_highp_dvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">aligned_dvec3</a></td></tr>\n<tr class=\"memdesc:gaa37869eea77d28419b2fb0ff70b69bf0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaa37869eea77d28419b2fb0ff70b69bf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a9f0a4795ccc442fa9901845026f9f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8a9f0a4795ccc442fa9901845026f9f5\"></a>\ntypedef aligned_highp_dvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">aligned_dvec4</a></td></tr>\n<tr class=\"memdesc:ga8a9f0a4795ccc442fa9901845026f9f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga8a9f0a4795ccc442fa9901845026f9f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga862843a45b01c35ffe4d44c47ea774ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga862843a45b01c35ffe4d44c47ea774ad\"></a>\ntypedef vec&lt; 1, bool, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga862843a45b01c35ffe4d44c47ea774ad\">aligned_highp_bvec1</a></td></tr>\n<tr class=\"memdesc:ga862843a45b01c35ffe4d44c47ea774ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga862843a45b01c35ffe4d44c47ea774ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0731b593c5e33559954c80f8687e76c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0731b593c5e33559954c80f8687e76c6\"></a>\ntypedef vec&lt; 2, bool, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0731b593c5e33559954c80f8687e76c6\">aligned_highp_bvec2</a></td></tr>\n<tr class=\"memdesc:ga0731b593c5e33559954c80f8687e76c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga0731b593c5e33559954c80f8687e76c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0913bdf048d0cb74af1d2512aec675bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0913bdf048d0cb74af1d2512aec675bc\"></a>\ntypedef vec&lt; 3, bool, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0913bdf048d0cb74af1d2512aec675bc\">aligned_highp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga0913bdf048d0cb74af1d2512aec675bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga0913bdf048d0cb74af1d2512aec675bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9df1d0c425852cf63a57e533b7a83f4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9df1d0c425852cf63a57e533b7a83f4f\"></a>\ntypedef vec&lt; 4, bool, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9df1d0c425852cf63a57e533b7a83f4f\">aligned_highp_bvec4</a></td></tr>\n<tr class=\"memdesc:ga9df1d0c425852cf63a57e533b7a83f4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga9df1d0c425852cf63a57e533b7a83f4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a7eeae43cb7673e14cc89bf02f7dd45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3a7eeae43cb7673e14cc89bf02f7dd45\"></a>\ntypedef mat&lt; 2, 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3a7eeae43cb7673e14cc89bf02f7dd45\">aligned_highp_dmat2</a></td></tr>\n<tr class=\"memdesc:ga3a7eeae43cb7673e14cc89bf02f7dd45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3a7eeae43cb7673e14cc89bf02f7dd45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaef26dfe3855a91644665b55c9096a8c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaef26dfe3855a91644665b55c9096a8c8\"></a>\ntypedef mat&lt; 2, 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaef26dfe3855a91644665b55c9096a8c8\">aligned_highp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gaef26dfe3855a91644665b55c9096a8c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaef26dfe3855a91644665b55c9096a8c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7c9d4ab7ab651cdf8001fe7843e238b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa7c9d4ab7ab651cdf8001fe7843e238b\"></a>\ntypedef mat&lt; 2, 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa7c9d4ab7ab651cdf8001fe7843e238b\">aligned_highp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gaa7c9d4ab7ab651cdf8001fe7843e238b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa7c9d4ab7ab651cdf8001fe7843e238b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0d2b8a75f1908dcf32c27f8524bdced\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa0d2b8a75f1908dcf32c27f8524bdced\"></a>\ntypedef mat&lt; 2, 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa0d2b8a75f1908dcf32c27f8524bdced\">aligned_highp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gaa0d2b8a75f1908dcf32c27f8524bdced\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa0d2b8a75f1908dcf32c27f8524bdced\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8f6abb2c9994850b5d5c04a5f979ed8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad8f6abb2c9994850b5d5c04a5f979ed8\"></a>\ntypedef mat&lt; 3, 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad8f6abb2c9994850b5d5c04a5f979ed8\">aligned_highp_dmat3</a></td></tr>\n<tr class=\"memdesc:gad8f6abb2c9994850b5d5c04a5f979ed8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad8f6abb2c9994850b5d5c04a5f979ed8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab069b2fc2ec785fc4e193cf26c022679\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab069b2fc2ec785fc4e193cf26c022679\"></a>\ntypedef mat&lt; 3, 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab069b2fc2ec785fc4e193cf26c022679\">aligned_highp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:gab069b2fc2ec785fc4e193cf26c022679\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab069b2fc2ec785fc4e193cf26c022679\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66073b1ddef34b681741f572338ddb8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga66073b1ddef34b681741f572338ddb8e\"></a>\ntypedef mat&lt; 3, 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga66073b1ddef34b681741f572338ddb8e\">aligned_highp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga66073b1ddef34b681741f572338ddb8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga66073b1ddef34b681741f572338ddb8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga683c8ca66de323ea533a760abedd0efc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga683c8ca66de323ea533a760abedd0efc\"></a>\ntypedef mat&lt; 3, 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga683c8ca66de323ea533a760abedd0efc\">aligned_highp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga683c8ca66de323ea533a760abedd0efc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga683c8ca66de323ea533a760abedd0efc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacaa7407ea00ffdd322ce86a57adb547e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacaa7407ea00ffdd322ce86a57adb547e\"></a>\ntypedef mat&lt; 4, 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacaa7407ea00ffdd322ce86a57adb547e\">aligned_highp_dmat4</a></td></tr>\n<tr class=\"memdesc:gacaa7407ea00ffdd322ce86a57adb547e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gacaa7407ea00ffdd322ce86a57adb547e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga93a23ca3d42818d56e0702213c66354b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga93a23ca3d42818d56e0702213c66354b\"></a>\ntypedef mat&lt; 4, 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga93a23ca3d42818d56e0702213c66354b\">aligned_highp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga93a23ca3d42818d56e0702213c66354b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga93a23ca3d42818d56e0702213c66354b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacab7374b560745cb1d0a306a90353f58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacab7374b560745cb1d0a306a90353f58\"></a>\ntypedef mat&lt; 4, 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacab7374b560745cb1d0a306a90353f58\">aligned_highp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gacab7374b560745cb1d0a306a90353f58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gacab7374b560745cb1d0a306a90353f58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fbfba14368b742972d3b58a0a303682\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1fbfba14368b742972d3b58a0a303682\"></a>\ntypedef mat&lt; 4, 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1fbfba14368b742972d3b58a0a303682\">aligned_highp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga1fbfba14368b742972d3b58a0a303682\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga1fbfba14368b742972d3b58a0a303682\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf0448b0f7ceb8273f7eda3a92205eefc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf0448b0f7ceb8273f7eda3a92205eefc\"></a>\ntypedef vec&lt; 1, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf0448b0f7ceb8273f7eda3a92205eefc\">aligned_highp_dvec1</a></td></tr>\n<tr class=\"memdesc:gaf0448b0f7ceb8273f7eda3a92205eefc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf0448b0f7ceb8273f7eda3a92205eefc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab173a333e6b7ce153ceba66ac4a321cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab173a333e6b7ce153ceba66ac4a321cf\"></a>\ntypedef vec&lt; 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab173a333e6b7ce153ceba66ac4a321cf\">aligned_highp_dvec2</a></td></tr>\n<tr class=\"memdesc:gab173a333e6b7ce153ceba66ac4a321cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab173a333e6b7ce153ceba66ac4a321cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae94ef61edfa047d05bc69b6065fc42ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae94ef61edfa047d05bc69b6065fc42ba\"></a>\ntypedef vec&lt; 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae94ef61edfa047d05bc69b6065fc42ba\">aligned_highp_dvec3</a></td></tr>\n<tr class=\"memdesc:gae94ef61edfa047d05bc69b6065fc42ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae94ef61edfa047d05bc69b6065fc42ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8fad35c5677f228e261fe541f15363a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8fad35c5677f228e261fe541f15363a4\"></a>\ntypedef vec&lt; 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8fad35c5677f228e261fe541f15363a4\">aligned_highp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga8fad35c5677f228e261fe541f15363a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8fad35c5677f228e261fe541f15363a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad63b8c5b4dc0500d54d7414ef555178f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad63b8c5b4dc0500d54d7414ef555178f\"></a>\ntypedef vec&lt; 1, int, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad63b8c5b4dc0500d54d7414ef555178f\">aligned_highp_ivec1</a></td></tr>\n<tr class=\"memdesc:gad63b8c5b4dc0500d54d7414ef555178f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gad63b8c5b4dc0500d54d7414ef555178f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41563650f36cb7f479e080de21e08418\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga41563650f36cb7f479e080de21e08418\"></a>\ntypedef vec&lt; 2, int, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga41563650f36cb7f479e080de21e08418\">aligned_highp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga41563650f36cb7f479e080de21e08418\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga41563650f36cb7f479e080de21e08418\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6eca5170bb35eac90b4972590fd31a06\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6eca5170bb35eac90b4972590fd31a06\"></a>\ntypedef vec&lt; 3, int, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6eca5170bb35eac90b4972590fd31a06\">aligned_highp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga6eca5170bb35eac90b4972590fd31a06\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga6eca5170bb35eac90b4972590fd31a06\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31bfa801e1579fdba752ec3f7a45ec91\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga31bfa801e1579fdba752ec3f7a45ec91\"></a>\ntypedef vec&lt; 4, int, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga31bfa801e1579fdba752ec3f7a45ec91\">aligned_highp_ivec4</a></td></tr>\n<tr class=\"memdesc:ga31bfa801e1579fdba752ec3f7a45ec91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga31bfa801e1579fdba752ec3f7a45ec91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf9db5e8a929c317da5aa12cc53741b63\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf9db5e8a929c317da5aa12cc53741b63\"></a>\ntypedef mat&lt; 2, 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf9db5e8a929c317da5aa12cc53741b63\">aligned_highp_mat2</a></td></tr>\n<tr class=\"memdesc:gaf9db5e8a929c317da5aa12cc53741b63\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf9db5e8a929c317da5aa12cc53741b63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab559d943abf92bc588bcd3f4c0e4664b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab559d943abf92bc588bcd3f4c0e4664b\"></a>\ntypedef mat&lt; 2, 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab559d943abf92bc588bcd3f4c0e4664b\">aligned_highp_mat2x2</a></td></tr>\n<tr class=\"memdesc:gab559d943abf92bc588bcd3f4c0e4664b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab559d943abf92bc588bcd3f4c0e4664b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50c9af5aa3a848956d625fc64dc8488e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga50c9af5aa3a848956d625fc64dc8488e\"></a>\ntypedef mat&lt; 2, 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga50c9af5aa3a848956d625fc64dc8488e\">aligned_highp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga50c9af5aa3a848956d625fc64dc8488e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga50c9af5aa3a848956d625fc64dc8488e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0edcfdd179f8a158342eead48a4d0c2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0edcfdd179f8a158342eead48a4d0c2a\"></a>\ntypedef mat&lt; 2, 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0edcfdd179f8a158342eead48a4d0c2a\">aligned_highp_mat2x4</a></td></tr>\n<tr class=\"memdesc:ga0edcfdd179f8a158342eead48a4d0c2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0edcfdd179f8a158342eead48a4d0c2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabab3afcc04459c7b123604ae5dc663f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabab3afcc04459c7b123604ae5dc663f6\"></a>\ntypedef mat&lt; 3, 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabab3afcc04459c7b123604ae5dc663f6\">aligned_highp_mat3</a></td></tr>\n<tr class=\"memdesc:gabab3afcc04459c7b123604ae5dc663f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gabab3afcc04459c7b123604ae5dc663f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9fc2167b47c9be9295f2d8eea7f0ca75\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9fc2167b47c9be9295f2d8eea7f0ca75\"></a>\ntypedef mat&lt; 3, 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9fc2167b47c9be9295f2d8eea7f0ca75\">aligned_highp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga9fc2167b47c9be9295f2d8eea7f0ca75\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9fc2167b47c9be9295f2d8eea7f0ca75\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f7b8c99ba6f2d07c73a195a8143c259\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2f7b8c99ba6f2d07c73a195a8143c259\"></a>\ntypedef mat&lt; 3, 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2f7b8c99ba6f2d07c73a195a8143c259\">aligned_highp_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga2f7b8c99ba6f2d07c73a195a8143c259\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2f7b8c99ba6f2d07c73a195a8143c259\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52e00afd0eb181e6738f40cf41787049\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga52e00afd0eb181e6738f40cf41787049\"></a>\ntypedef mat&lt; 3, 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga52e00afd0eb181e6738f40cf41787049\">aligned_highp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga52e00afd0eb181e6738f40cf41787049\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga52e00afd0eb181e6738f40cf41787049\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga058ae939bfdbcbb80521dd4a3b01afba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga058ae939bfdbcbb80521dd4a3b01afba\"></a>\ntypedef mat&lt; 4, 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga058ae939bfdbcbb80521dd4a3b01afba\">aligned_highp_mat4</a></td></tr>\n<tr class=\"memdesc:ga058ae939bfdbcbb80521dd4a3b01afba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga058ae939bfdbcbb80521dd4a3b01afba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga84e1f5e0718952a079b748825c03f956\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga84e1f5e0718952a079b748825c03f956\"></a>\ntypedef mat&lt; 4, 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga84e1f5e0718952a079b748825c03f956\">aligned_highp_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga84e1f5e0718952a079b748825c03f956\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga84e1f5e0718952a079b748825c03f956\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafff1684c4ff19b4a818138ccacc1e78d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafff1684c4ff19b4a818138ccacc1e78d\"></a>\ntypedef mat&lt; 4, 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gafff1684c4ff19b4a818138ccacc1e78d\">aligned_highp_mat4x3</a></td></tr>\n<tr class=\"memdesc:gafff1684c4ff19b4a818138ccacc1e78d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gafff1684c4ff19b4a818138ccacc1e78d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga40d49648083a0498a12a4bb41ae6ece8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga40d49648083a0498a12a4bb41ae6ece8\"></a>\ntypedef mat&lt; 4, 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga40d49648083a0498a12a4bb41ae6ece8\">aligned_highp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga40d49648083a0498a12a4bb41ae6ece8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga40d49648083a0498a12a4bb41ae6ece8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b80e28396c6ef7d32c6fd18df498451\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5b80e28396c6ef7d32c6fd18df498451\"></a>\ntypedef vec&lt; 1, uint, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5b80e28396c6ef7d32c6fd18df498451\">aligned_highp_uvec1</a></td></tr>\n<tr class=\"memdesc:ga5b80e28396c6ef7d32c6fd18df498451\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga5b80e28396c6ef7d32c6fd18df498451\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04db692662a4908beeaf5a5ba6e19483\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga04db692662a4908beeaf5a5ba6e19483\"></a>\ntypedef vec&lt; 2, uint, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga04db692662a4908beeaf5a5ba6e19483\">aligned_highp_uvec2</a></td></tr>\n<tr class=\"memdesc:ga04db692662a4908beeaf5a5ba6e19483\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga04db692662a4908beeaf5a5ba6e19483\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga073fd6e8b241afade6d8afbd676b2667\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga073fd6e8b241afade6d8afbd676b2667\"></a>\ntypedef vec&lt; 3, uint, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga073fd6e8b241afade6d8afbd676b2667\">aligned_highp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga073fd6e8b241afade6d8afbd676b2667\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga073fd6e8b241afade6d8afbd676b2667\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabdd60462042859f876c17c7346c732a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabdd60462042859f876c17c7346c732a5\"></a>\ntypedef vec&lt; 4, uint, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabdd60462042859f876c17c7346c732a5\">aligned_highp_uvec4</a></td></tr>\n<tr class=\"memdesc:gabdd60462042859f876c17c7346c732a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gabdd60462042859f876c17c7346c732a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d0bd70d5fac49b800546d608b707513\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4d0bd70d5fac49b800546d608b707513\"></a>\ntypedef vec&lt; 1, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4d0bd70d5fac49b800546d608b707513\">aligned_highp_vec1</a></td></tr>\n<tr class=\"memdesc:ga4d0bd70d5fac49b800546d608b707513\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4d0bd70d5fac49b800546d608b707513\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac9f8482dde741fb6bab7248b81a45465\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac9f8482dde741fb6bab7248b81a45465\"></a>\ntypedef vec&lt; 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac9f8482dde741fb6bab7248b81a45465\">aligned_highp_vec2</a></td></tr>\n<tr class=\"memdesc:gac9f8482dde741fb6bab7248b81a45465\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac9f8482dde741fb6bab7248b81a45465\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65415d2d68c9cc0ca554524a8f5510b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga65415d2d68c9cc0ca554524a8f5510b2\"></a>\ntypedef vec&lt; 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga65415d2d68c9cc0ca554524a8f5510b2\">aligned_highp_vec3</a></td></tr>\n<tr class=\"memdesc:ga65415d2d68c9cc0ca554524a8f5510b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga65415d2d68c9cc0ca554524a8f5510b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cb26d354dd69d23849c34c4fba88da9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7cb26d354dd69d23849c34c4fba88da9\"></a>\ntypedef vec&lt; 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7cb26d354dd69d23849c34c4fba88da9\">aligned_highp_vec4</a></td></tr>\n<tr class=\"memdesc:ga7cb26d354dd69d23849c34c4fba88da9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7cb26d354dd69d23849c34c4fba88da9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga76298aed82a439063c3d55980c84aa0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga76298aed82a439063c3d55980c84aa0b\"></a>\ntypedef aligned_highp_ivec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">aligned_ivec1</a></td></tr>\n<tr class=\"memdesc:ga76298aed82a439063c3d55980c84aa0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga76298aed82a439063c3d55980c84aa0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4f38fd2c86cee6940986197777b3ca4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae4f38fd2c86cee6940986197777b3ca4\"></a>\ntypedef aligned_highp_ivec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">aligned_ivec2</a></td></tr>\n<tr class=\"memdesc:gae4f38fd2c86cee6940986197777b3ca4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gae4f38fd2c86cee6940986197777b3ca4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga32794322d294e5ace7fed4a61896f270\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga32794322d294e5ace7fed4a61896f270\"></a>\ntypedef aligned_highp_ivec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">aligned_ivec3</a></td></tr>\n<tr class=\"memdesc:ga32794322d294e5ace7fed4a61896f270\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga32794322d294e5ace7fed4a61896f270\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f79eae5927c9033d84617e49f6f34e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7f79eae5927c9033d84617e49f6f34e4\"></a>\ntypedef aligned_highp_ivec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">aligned_ivec4</a></td></tr>\n<tr class=\"memdesc:ga7f79eae5927c9033d84617e49f6f34e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga7f79eae5927c9033d84617e49f6f34e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac6036449ab1c4abf8efe1ea00fcdd1c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac6036449ab1c4abf8efe1ea00fcdd1c9\"></a>\ntypedef vec&lt; 1, bool, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac6036449ab1c4abf8efe1ea00fcdd1c9\">aligned_lowp_bvec1</a></td></tr>\n<tr class=\"memdesc:gac6036449ab1c4abf8efe1ea00fcdd1c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gac6036449ab1c4abf8efe1ea00fcdd1c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga59fadcd3835646e419372ae8b43c5d37\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga59fadcd3835646e419372ae8b43c5d37\"></a>\ntypedef vec&lt; 2, bool, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga59fadcd3835646e419372ae8b43c5d37\">aligned_lowp_bvec2</a></td></tr>\n<tr class=\"memdesc:ga59fadcd3835646e419372ae8b43c5d37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga59fadcd3835646e419372ae8b43c5d37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83aab4d191053f169c93a3e364f2e118\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga83aab4d191053f169c93a3e364f2e118\"></a>\ntypedef vec&lt; 3, bool, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga83aab4d191053f169c93a3e364f2e118\">aligned_lowp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga83aab4d191053f169c93a3e364f2e118\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga83aab4d191053f169c93a3e364f2e118\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7a76555ee4853614e5755181a8dd54e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa7a76555ee4853614e5755181a8dd54e\"></a>\ntypedef vec&lt; 4, bool, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa7a76555ee4853614e5755181a8dd54e\">aligned_lowp_bvec4</a></td></tr>\n<tr class=\"memdesc:gaa7a76555ee4853614e5755181a8dd54e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gaa7a76555ee4853614e5755181a8dd54e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga79a90173d8faa9816dc852ce447d66ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga79a90173d8faa9816dc852ce447d66ca\"></a>\ntypedef mat&lt; 2, 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga79a90173d8faa9816dc852ce447d66ca\">aligned_lowp_dmat2</a></td></tr>\n<tr class=\"memdesc:ga79a90173d8faa9816dc852ce447d66ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga79a90173d8faa9816dc852ce447d66ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07cb8e846666cbf56045b064fb553d2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga07cb8e846666cbf56045b064fb553d2e\"></a>\ntypedef mat&lt; 2, 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga07cb8e846666cbf56045b064fb553d2e\">aligned_lowp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga07cb8e846666cbf56045b064fb553d2e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga07cb8e846666cbf56045b064fb553d2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a4536b6e1f2ebb690f63816b5d7e48b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7a4536b6e1f2ebb690f63816b5d7e48b\"></a>\ntypedef mat&lt; 2, 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7a4536b6e1f2ebb690f63816b5d7e48b\">aligned_lowp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga7a4536b6e1f2ebb690f63816b5d7e48b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7a4536b6e1f2ebb690f63816b5d7e48b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0cf4f7c9a264941519acad286e055ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0cf4f7c9a264941519acad286e055ea\"></a>\ntypedef mat&lt; 2, 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab0cf4f7c9a264941519acad286e055ea\">aligned_lowp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gab0cf4f7c9a264941519acad286e055ea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab0cf4f7c9a264941519acad286e055ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac00e15efded8a57c9dec3aed0fb547e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac00e15efded8a57c9dec3aed0fb547e7\"></a>\ntypedef mat&lt; 3, 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac00e15efded8a57c9dec3aed0fb547e7\">aligned_lowp_dmat3</a></td></tr>\n<tr class=\"memdesc:gac00e15efded8a57c9dec3aed0fb547e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac00e15efded8a57c9dec3aed0fb547e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa281a47d5d627313984d0f8df993b648\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa281a47d5d627313984d0f8df993b648\"></a>\ntypedef mat&lt; 3, 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa281a47d5d627313984d0f8df993b648\">aligned_lowp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:gaa281a47d5d627313984d0f8df993b648\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa281a47d5d627313984d0f8df993b648\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f3148a72355e39932d6855baca42ebc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7f3148a72355e39932d6855baca42ebc\"></a>\ntypedef mat&lt; 3, 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7f3148a72355e39932d6855baca42ebc\">aligned_lowp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga7f3148a72355e39932d6855baca42ebc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7f3148a72355e39932d6855baca42ebc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea3ccc5ef5b178e6e49b4fa1427605d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaea3ccc5ef5b178e6e49b4fa1427605d3\"></a>\ntypedef mat&lt; 3, 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaea3ccc5ef5b178e6e49b4fa1427605d3\">aligned_lowp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:gaea3ccc5ef5b178e6e49b4fa1427605d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaea3ccc5ef5b178e6e49b4fa1427605d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab92c6d7d58d43dfb8147e9aedfe8351b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab92c6d7d58d43dfb8147e9aedfe8351b\"></a>\ntypedef mat&lt; 4, 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab92c6d7d58d43dfb8147e9aedfe8351b\">aligned_lowp_dmat4</a></td></tr>\n<tr class=\"memdesc:gab92c6d7d58d43dfb8147e9aedfe8351b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab92c6d7d58d43dfb8147e9aedfe8351b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf806dfdaffb2e9f7681b1cd2825898ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf806dfdaffb2e9f7681b1cd2825898ce\"></a>\ntypedef mat&lt; 4, 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf806dfdaffb2e9f7681b1cd2825898ce\">aligned_lowp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gaf806dfdaffb2e9f7681b1cd2825898ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf806dfdaffb2e9f7681b1cd2825898ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0931ac7807fa1428c7bbf249efcdf0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0931ac7807fa1428c7bbf249efcdf0d\"></a>\ntypedef mat&lt; 4, 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab0931ac7807fa1428c7bbf249efcdf0d\">aligned_lowp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gab0931ac7807fa1428c7bbf249efcdf0d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab0931ac7807fa1428c7bbf249efcdf0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8220a93d2fca2dd707821b4ab6f809e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad8220a93d2fca2dd707821b4ab6f809e\"></a>\ntypedef mat&lt; 4, 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad8220a93d2fca2dd707821b4ab6f809e\">aligned_lowp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:gad8220a93d2fca2dd707821b4ab6f809e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad8220a93d2fca2dd707821b4ab6f809e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f8a2cc5a686e52b1615761f4978ca62\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7f8a2cc5a686e52b1615761f4978ca62\"></a>\ntypedef vec&lt; 1, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7f8a2cc5a686e52b1615761f4978ca62\">aligned_lowp_dvec1</a></td></tr>\n<tr class=\"memdesc:ga7f8a2cc5a686e52b1615761f4978ca62\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7f8a2cc5a686e52b1615761f4978ca62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0e37cff4a43cca866101f0a35f01db6d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0e37cff4a43cca866101f0a35f01db6d\"></a>\ntypedef vec&lt; 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0e37cff4a43cca866101f0a35f01db6d\">aligned_lowp_dvec2</a></td></tr>\n<tr class=\"memdesc:ga0e37cff4a43cca866101f0a35f01db6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0e37cff4a43cca866101f0a35f01db6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab9e669c4efd52d3347fc6d5f6b20fd59\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab9e669c4efd52d3347fc6d5f6b20fd59\"></a>\ntypedef vec&lt; 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab9e669c4efd52d3347fc6d5f6b20fd59\">aligned_lowp_dvec3</a></td></tr>\n<tr class=\"memdesc:gab9e669c4efd52d3347fc6d5f6b20fd59\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab9e669c4efd52d3347fc6d5f6b20fd59\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga226f5ec7a953cea559c16fe3aff9924f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga226f5ec7a953cea559c16fe3aff9924f\"></a>\ntypedef vec&lt; 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga226f5ec7a953cea559c16fe3aff9924f\">aligned_lowp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga226f5ec7a953cea559c16fe3aff9924f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga226f5ec7a953cea559c16fe3aff9924f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1101d3a82b2e3f5f8828bd8f3adab3e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1101d3a82b2e3f5f8828bd8f3adab3e1\"></a>\ntypedef vec&lt; 1, int, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1101d3a82b2e3f5f8828bd8f3adab3e1\">aligned_lowp_ivec1</a></td></tr>\n<tr class=\"memdesc:ga1101d3a82b2e3f5f8828bd8f3adab3e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga1101d3a82b2e3f5f8828bd8f3adab3e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga44c4accad582cfbd7226a19b83b0cadc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga44c4accad582cfbd7226a19b83b0cadc\"></a>\ntypedef vec&lt; 2, int, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga44c4accad582cfbd7226a19b83b0cadc\">aligned_lowp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga44c4accad582cfbd7226a19b83b0cadc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga44c4accad582cfbd7226a19b83b0cadc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65663f10a02e52cedcddbcfe36ddf38d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga65663f10a02e52cedcddbcfe36ddf38d\"></a>\ntypedef vec&lt; 3, int, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga65663f10a02e52cedcddbcfe36ddf38d\">aligned_lowp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga65663f10a02e52cedcddbcfe36ddf38d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga65663f10a02e52cedcddbcfe36ddf38d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaae92fcec8b2e0328ffbeac31cc4fc419\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaae92fcec8b2e0328ffbeac31cc4fc419\"></a>\ntypedef vec&lt; 4, int, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaae92fcec8b2e0328ffbeac31cc4fc419\">aligned_lowp_ivec4</a></td></tr>\n<tr class=\"memdesc:gaae92fcec8b2e0328ffbeac31cc4fc419\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaae92fcec8b2e0328ffbeac31cc4fc419\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga17c424412207b00dba1cf587b099eea3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga17c424412207b00dba1cf587b099eea3\"></a>\ntypedef mat&lt; 2, 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga17c424412207b00dba1cf587b099eea3\">aligned_lowp_mat2</a></td></tr>\n<tr class=\"memdesc:ga17c424412207b00dba1cf587b099eea3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga17c424412207b00dba1cf587b099eea3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0e44aeb930a47f9cbf2db15b56433b0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0e44aeb930a47f9cbf2db15b56433b0f\"></a>\ntypedef mat&lt; 2, 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0e44aeb930a47f9cbf2db15b56433b0f\">aligned_lowp_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga0e44aeb930a47f9cbf2db15b56433b0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0e44aeb930a47f9cbf2db15b56433b0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dec6d96bc61312b1e56d137c9c74030\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7dec6d96bc61312b1e56d137c9c74030\"></a>\ntypedef mat&lt; 2, 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7dec6d96bc61312b1e56d137c9c74030\">aligned_lowp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga7dec6d96bc61312b1e56d137c9c74030\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7dec6d96bc61312b1e56d137c9c74030\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa694fab1f8df5f658846573ba8ffc563\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa694fab1f8df5f658846573ba8ffc563\"></a>\ntypedef mat&lt; 2, 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa694fab1f8df5f658846573ba8ffc563\">aligned_lowp_mat2x4</a></td></tr>\n<tr class=\"memdesc:gaa694fab1f8df5f658846573ba8ffc563\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa694fab1f8df5f658846573ba8ffc563\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1eb9076cc28ead5020fd3029fd0472c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1eb9076cc28ead5020fd3029fd0472c5\"></a>\ntypedef mat&lt; 3, 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1eb9076cc28ead5020fd3029fd0472c5\">aligned_lowp_mat3</a></td></tr>\n<tr class=\"memdesc:ga1eb9076cc28ead5020fd3029fd0472c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga1eb9076cc28ead5020fd3029fd0472c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2d6639f0bd777bae1ee0eba71cd7bfdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2d6639f0bd777bae1ee0eba71cd7bfdc\"></a>\ntypedef mat&lt; 3, 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2d6639f0bd777bae1ee0eba71cd7bfdc\">aligned_lowp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga2d6639f0bd777bae1ee0eba71cd7bfdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2d6639f0bd777bae1ee0eba71cd7bfdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeaab04e378a90956eec8d68a99d777ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaeaab04e378a90956eec8d68a99d777ed\"></a>\ntypedef mat&lt; 3, 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaeaab04e378a90956eec8d68a99d777ed\">aligned_lowp_mat3x3</a></td></tr>\n<tr class=\"memdesc:gaeaab04e378a90956eec8d68a99d777ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaeaab04e378a90956eec8d68a99d777ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f03696ab066572c6c044e63edf635a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1f03696ab066572c6c044e63edf635a2\"></a>\ntypedef mat&lt; 3, 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1f03696ab066572c6c044e63edf635a2\">aligned_lowp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga1f03696ab066572c6c044e63edf635a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga1f03696ab066572c6c044e63edf635a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga25ea2f684e36aa5e978b4f2f86593824\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga25ea2f684e36aa5e978b4f2f86593824\"></a>\ntypedef mat&lt; 4, 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga25ea2f684e36aa5e978b4f2f86593824\">aligned_lowp_mat4</a></td></tr>\n<tr class=\"memdesc:ga25ea2f684e36aa5e978b4f2f86593824\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga25ea2f684e36aa5e978b4f2f86593824\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2cb16c3fdfb15e0719d942ee3b548bc4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2cb16c3fdfb15e0719d942ee3b548bc4\"></a>\ntypedef mat&lt; 4, 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2cb16c3fdfb15e0719d942ee3b548bc4\">aligned_lowp_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga2cb16c3fdfb15e0719d942ee3b548bc4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2cb16c3fdfb15e0719d942ee3b548bc4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7e96981e872f17a780d9f1c22dc1f512\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7e96981e872f17a780d9f1c22dc1f512\"></a>\ntypedef mat&lt; 4, 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7e96981e872f17a780d9f1c22dc1f512\">aligned_lowp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga7e96981e872f17a780d9f1c22dc1f512\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7e96981e872f17a780d9f1c22dc1f512\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadae3dcfc22d28c64d0548cbfd9d08719\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadae3dcfc22d28c64d0548cbfd9d08719\"></a>\ntypedef mat&lt; 4, 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadae3dcfc22d28c64d0548cbfd9d08719\">aligned_lowp_mat4x4</a></td></tr>\n<tr class=\"memdesc:gadae3dcfc22d28c64d0548cbfd9d08719\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gadae3dcfc22d28c64d0548cbfd9d08719\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad09b93acc43c43423408d17a64f6d7ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad09b93acc43c43423408d17a64f6d7ca\"></a>\ntypedef vec&lt; 1, uint, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad09b93acc43c43423408d17a64f6d7ca\">aligned_lowp_uvec1</a></td></tr>\n<tr class=\"memdesc:gad09b93acc43c43423408d17a64f6d7ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gad09b93acc43c43423408d17a64f6d7ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6f94fcd28dde906fc6cad5f742b55c1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6f94fcd28dde906fc6cad5f742b55c1a\"></a>\ntypedef vec&lt; 2, uint, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6f94fcd28dde906fc6cad5f742b55c1a\">aligned_lowp_uvec2</a></td></tr>\n<tr class=\"memdesc:ga6f94fcd28dde906fc6cad5f742b55c1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga6f94fcd28dde906fc6cad5f742b55c1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9e9f006970b1a00862e3e6e599eedd4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9e9f006970b1a00862e3e6e599eedd4c\"></a>\ntypedef vec&lt; 3, uint, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9e9f006970b1a00862e3e6e599eedd4c\">aligned_lowp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga9e9f006970b1a00862e3e6e599eedd4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga9e9f006970b1a00862e3e6e599eedd4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46b1b0b9eb8625a5d69137bd66cd13dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga46b1b0b9eb8625a5d69137bd66cd13dc\"></a>\ntypedef vec&lt; 4, uint, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga46b1b0b9eb8625a5d69137bd66cd13dc\">aligned_lowp_uvec4</a></td></tr>\n<tr class=\"memdesc:ga46b1b0b9eb8625a5d69137bd66cd13dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga46b1b0b9eb8625a5d69137bd66cd13dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab34aee3d5e121c543fea11d2c50ecc43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab34aee3d5e121c543fea11d2c50ecc43\"></a>\ntypedef vec&lt; 1, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab34aee3d5e121c543fea11d2c50ecc43\">aligned_lowp_vec1</a></td></tr>\n<tr class=\"memdesc:gab34aee3d5e121c543fea11d2c50ecc43\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab34aee3d5e121c543fea11d2c50ecc43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga53ac5d252317f1fa43c2ef921857bf13\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga53ac5d252317f1fa43c2ef921857bf13\"></a>\ntypedef vec&lt; 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga53ac5d252317f1fa43c2ef921857bf13\">aligned_lowp_vec2</a></td></tr>\n<tr class=\"memdesc:ga53ac5d252317f1fa43c2ef921857bf13\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga53ac5d252317f1fa43c2ef921857bf13\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga98f0b5cd65fce164ff1367c2a3b3aa1e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga98f0b5cd65fce164ff1367c2a3b3aa1e\"></a>\ntypedef vec&lt; 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga98f0b5cd65fce164ff1367c2a3b3aa1e\">aligned_lowp_vec3</a></td></tr>\n<tr class=\"memdesc:ga98f0b5cd65fce164ff1367c2a3b3aa1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga98f0b5cd65fce164ff1367c2a3b3aa1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga82f7275d6102593a69ce38cdad680409\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga82f7275d6102593a69ce38cdad680409\"></a>\ntypedef vec&lt; 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga82f7275d6102593a69ce38cdad680409\">aligned_lowp_vec4</a></td></tr>\n<tr class=\"memdesc:ga82f7275d6102593a69ce38cdad680409\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga82f7275d6102593a69ce38cdad680409\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a8a5f8c47cd7d5502dd9932f83472b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5a8a5f8c47cd7d5502dd9932f83472b9\"></a>\ntypedef aligned_highp_mat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">aligned_mat2</a></td></tr>\n<tr class=\"memdesc:ga5a8a5f8c47cd7d5502dd9932f83472b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5a8a5f8c47cd7d5502dd9932f83472b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabb04f459d81d753d278b2072e2375e8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabb04f459d81d753d278b2072e2375e8e\"></a>\ntypedef aligned_highp_mat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">aligned_mat2x2</a></td></tr>\n<tr class=\"memdesc:gabb04f459d81d753d278b2072e2375e8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gabb04f459d81d753d278b2072e2375e8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga832476bb1c59ef673db37433ff34e399\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga832476bb1c59ef673db37433ff34e399\"></a>\ntypedef aligned_highp_mat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga832476bb1c59ef673db37433ff34e399\">aligned_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga832476bb1c59ef673db37433ff34e399\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga832476bb1c59ef673db37433ff34e399\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadab11a7504430825b648ff7c7e36b725\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadab11a7504430825b648ff7c7e36b725\"></a>\ntypedef aligned_highp_mat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadab11a7504430825b648ff7c7e36b725\">aligned_mat2x4</a></td></tr>\n<tr class=\"memdesc:gadab11a7504430825b648ff7c7e36b725\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadab11a7504430825b648ff7c7e36b725\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43a92a24ca863e0e0f3b65834b3cf714\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga43a92a24ca863e0e0f3b65834b3cf714\"></a>\ntypedef aligned_highp_mat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">aligned_mat3</a></td></tr>\n<tr class=\"memdesc:ga43a92a24ca863e0e0f3b65834b3cf714\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga43a92a24ca863e0e0f3b65834b3cf714\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c0df24ba85eafafc0eb0c90690510ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5c0df24ba85eafafc0eb0c90690510ed\"></a>\ntypedef aligned_highp_mat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed\">aligned_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga5c0df24ba85eafafc0eb0c90690510ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5c0df24ba85eafafc0eb0c90690510ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadb065dbe5c11271fef8cf2ea8608f187\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadb065dbe5c11271fef8cf2ea8608f187\"></a>\ntypedef aligned_highp_mat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">aligned_mat3x3</a></td></tr>\n<tr class=\"memdesc:gadb065dbe5c11271fef8cf2ea8608f187\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadb065dbe5c11271fef8cf2ea8608f187\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga88061c72c997b94c420f2b0a60d9df26\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga88061c72c997b94c420f2b0a60d9df26\"></a>\ntypedef aligned_highp_mat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga88061c72c997b94c420f2b0a60d9df26\">aligned_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga88061c72c997b94c420f2b0a60d9df26\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga88061c72c997b94c420f2b0a60d9df26\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0fddcf95dd51cbcbf624ea7c40dfeb8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0fddcf95dd51cbcbf624ea7c40dfeb8\"></a>\ntypedef aligned_highp_mat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">aligned_mat4</a></td></tr>\n<tr class=\"memdesc:gab0fddcf95dd51cbcbf624ea7c40dfeb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gab0fddcf95dd51cbcbf624ea7c40dfeb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac9a2d0fb815fd5c2bd58b869c55e32d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac9a2d0fb815fd5c2bd58b869c55e32d3\"></a>\ntypedef aligned_highp_mat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3\">aligned_mat4x2</a></td></tr>\n<tr class=\"memdesc:gac9a2d0fb815fd5c2bd58b869c55e32d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gac9a2d0fb815fd5c2bd58b869c55e32d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga452bbbfd26e244de216e4d004d50bb74\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga452bbbfd26e244de216e4d004d50bb74\"></a>\ntypedef aligned_highp_mat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga452bbbfd26e244de216e4d004d50bb74\">aligned_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga452bbbfd26e244de216e4d004d50bb74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga452bbbfd26e244de216e4d004d50bb74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b8fb86973a0b768c5bd802c92fac1a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8b8fb86973a0b768c5bd802c92fac1a1\"></a>\ntypedef aligned_highp_mat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\">aligned_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga8b8fb86973a0b768c5bd802c92fac1a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga8b8fb86973a0b768c5bd802c92fac1a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd3b8bd71a758f7fb0da8e525156f34e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadd3b8bd71a758f7fb0da8e525156f34e\"></a>\ntypedef vec&lt; 1, bool, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadd3b8bd71a758f7fb0da8e525156f34e\">aligned_mediump_bvec1</a></td></tr>\n<tr class=\"memdesc:gadd3b8bd71a758f7fb0da8e525156f34e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gadd3b8bd71a758f7fb0da8e525156f34e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb183eb5e67ec0d0ea5a016cba962810\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacb183eb5e67ec0d0ea5a016cba962810\"></a>\ntypedef vec&lt; 2, bool, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacb183eb5e67ec0d0ea5a016cba962810\">aligned_mediump_bvec2</a></td></tr>\n<tr class=\"memdesc:gacb183eb5e67ec0d0ea5a016cba962810\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gacb183eb5e67ec0d0ea5a016cba962810\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacfa4a542f1b20a5b63ad702dfb6fd587\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacfa4a542f1b20a5b63ad702dfb6fd587\"></a>\ntypedef vec&lt; 3, bool, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacfa4a542f1b20a5b63ad702dfb6fd587\">aligned_mediump_bvec3</a></td></tr>\n<tr class=\"memdesc:gacfa4a542f1b20a5b63ad702dfb6fd587\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gacfa4a542f1b20a5b63ad702dfb6fd587\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga91bc1f513bb9b0fd60281d57ded9a48c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga91bc1f513bb9b0fd60281d57ded9a48c\"></a>\ntypedef vec&lt; 4, bool, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga91bc1f513bb9b0fd60281d57ded9a48c\">aligned_mediump_bvec4</a></td></tr>\n<tr class=\"memdesc:ga91bc1f513bb9b0fd60281d57ded9a48c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga91bc1f513bb9b0fd60281d57ded9a48c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62a2dfd668c91072b72c3109fc6cda28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga62a2dfd668c91072b72c3109fc6cda28\"></a>\ntypedef mat&lt; 2, 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga62a2dfd668c91072b72c3109fc6cda28\">aligned_mediump_dmat2</a></td></tr>\n<tr class=\"memdesc:ga62a2dfd668c91072b72c3109fc6cda28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga62a2dfd668c91072b72c3109fc6cda28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9b7feec247d378dd407ba81f56ea96c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9b7feec247d378dd407ba81f56ea96c8\"></a>\ntypedef mat&lt; 2, 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9b7feec247d378dd407ba81f56ea96c8\">aligned_mediump_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga9b7feec247d378dd407ba81f56ea96c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9b7feec247d378dd407ba81f56ea96c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafcb189f4f93648fe7ca802ca4aca2eb8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafcb189f4f93648fe7ca802ca4aca2eb8\"></a>\ntypedef mat&lt; 2, 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gafcb189f4f93648fe7ca802ca4aca2eb8\">aligned_mediump_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gafcb189f4f93648fe7ca802ca4aca2eb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gafcb189f4f93648fe7ca802ca4aca2eb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92f8873e3bbd5ca1323c8bbe5725cc5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga92f8873e3bbd5ca1323c8bbe5725cc5e\"></a>\ntypedef mat&lt; 2, 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga92f8873e3bbd5ca1323c8bbe5725cc5e\">aligned_mediump_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga92f8873e3bbd5ca1323c8bbe5725cc5e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga92f8873e3bbd5ca1323c8bbe5725cc5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6dc2832b747c00e0a0df621aba196960\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6dc2832b747c00e0a0df621aba196960\"></a>\ntypedef mat&lt; 3, 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6dc2832b747c00e0a0df621aba196960\">aligned_mediump_dmat3</a></td></tr>\n<tr class=\"memdesc:ga6dc2832b747c00e0a0df621aba196960\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6dc2832b747c00e0a0df621aba196960\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a97f0355d801de3444d42c1d5b40438\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5a97f0355d801de3444d42c1d5b40438\"></a>\ntypedef mat&lt; 3, 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5a97f0355d801de3444d42c1d5b40438\">aligned_mediump_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga5a97f0355d801de3444d42c1d5b40438\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga5a97f0355d801de3444d42c1d5b40438\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga649d0acf01054b17e679cf00e150e025\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga649d0acf01054b17e679cf00e150e025\"></a>\ntypedef mat&lt; 3, 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga649d0acf01054b17e679cf00e150e025\">aligned_mediump_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga649d0acf01054b17e679cf00e150e025\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga649d0acf01054b17e679cf00e150e025\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45e155a4840f69b2fa4ed8047a676860\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga45e155a4840f69b2fa4ed8047a676860\"></a>\ntypedef mat&lt; 3, 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga45e155a4840f69b2fa4ed8047a676860\">aligned_mediump_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga45e155a4840f69b2fa4ed8047a676860\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga45e155a4840f69b2fa4ed8047a676860\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a9376d82f0e946e25137eb55543e6ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8a9376d82f0e946e25137eb55543e6ce\"></a>\ntypedef mat&lt; 4, 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8a9376d82f0e946e25137eb55543e6ce\">aligned_mediump_dmat4</a></td></tr>\n<tr class=\"memdesc:ga8a9376d82f0e946e25137eb55543e6ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8a9376d82f0e946e25137eb55543e6ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc25e547f4de4af62403492532cd1b6d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabc25e547f4de4af62403492532cd1b6d\"></a>\ntypedef mat&lt; 4, 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabc25e547f4de4af62403492532cd1b6d\">aligned_mediump_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gabc25e547f4de4af62403492532cd1b6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gabc25e547f4de4af62403492532cd1b6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae84f4763ecdc7457ecb7930bad12057c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae84f4763ecdc7457ecb7930bad12057c\"></a>\ntypedef mat&lt; 4, 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae84f4763ecdc7457ecb7930bad12057c\">aligned_mediump_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gae84f4763ecdc7457ecb7930bad12057c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae84f4763ecdc7457ecb7930bad12057c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa292ebaa907afdecb2d5967fb4fb1247\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa292ebaa907afdecb2d5967fb4fb1247\"></a>\ntypedef mat&lt; 4, 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa292ebaa907afdecb2d5967fb4fb1247\">aligned_mediump_dmat4x4</a></td></tr>\n<tr class=\"memdesc:gaa292ebaa907afdecb2d5967fb4fb1247\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa292ebaa907afdecb2d5967fb4fb1247\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7180b685c581adb224406a7f831608e3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7180b685c581adb224406a7f831608e3\"></a>\ntypedef vec&lt; 1, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7180b685c581adb224406a7f831608e3\">aligned_mediump_dvec1</a></td></tr>\n<tr class=\"memdesc:ga7180b685c581adb224406a7f831608e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7180b685c581adb224406a7f831608e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9af1eabe22f569e70d9893be72eda0f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9af1eabe22f569e70d9893be72eda0f5\"></a>\ntypedef vec&lt; 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9af1eabe22f569e70d9893be72eda0f5\">aligned_mediump_dvec2</a></td></tr>\n<tr class=\"memdesc:ga9af1eabe22f569e70d9893be72eda0f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9af1eabe22f569e70d9893be72eda0f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga058e7ddab1428e47f2197bdd3a5a6953\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga058e7ddab1428e47f2197bdd3a5a6953\"></a>\ntypedef vec&lt; 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga058e7ddab1428e47f2197bdd3a5a6953\">aligned_mediump_dvec3</a></td></tr>\n<tr class=\"memdesc:ga058e7ddab1428e47f2197bdd3a5a6953\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga058e7ddab1428e47f2197bdd3a5a6953\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaffd747ea2aea1e69c2ecb04e68521b21\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaffd747ea2aea1e69c2ecb04e68521b21\"></a>\ntypedef vec&lt; 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaffd747ea2aea1e69c2ecb04e68521b21\">aligned_mediump_dvec4</a></td></tr>\n<tr class=\"memdesc:gaffd747ea2aea1e69c2ecb04e68521b21\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaffd747ea2aea1e69c2ecb04e68521b21\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20e63dd980b81af10cadbbe219316650\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga20e63dd980b81af10cadbbe219316650\"></a>\ntypedef vec&lt; 1, int, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga20e63dd980b81af10cadbbe219316650\">aligned_mediump_ivec1</a></td></tr>\n<tr class=\"memdesc:ga20e63dd980b81af10cadbbe219316650\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga20e63dd980b81af10cadbbe219316650\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea13d89d49daca2c796aeaa82fc2c2f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaea13d89d49daca2c796aeaa82fc2c2f2\"></a>\ntypedef vec&lt; 2, int, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaea13d89d49daca2c796aeaa82fc2c2f2\">aligned_mediump_ivec2</a></td></tr>\n<tr class=\"memdesc:gaea13d89d49daca2c796aeaa82fc2c2f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaea13d89d49daca2c796aeaa82fc2c2f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabbf0f15e9c3d9868e43241ad018f82bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabbf0f15e9c3d9868e43241ad018f82bd\"></a>\ntypedef vec&lt; 3, int, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabbf0f15e9c3d9868e43241ad018f82bd\">aligned_mediump_ivec3</a></td></tr>\n<tr class=\"memdesc:gabbf0f15e9c3d9868e43241ad018f82bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gabbf0f15e9c3d9868e43241ad018f82bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6099dd7878d0a78101a4250d8cd2d736\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6099dd7878d0a78101a4250d8cd2d736\"></a>\ntypedef vec&lt; 4, int, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6099dd7878d0a78101a4250d8cd2d736\">aligned_mediump_ivec4</a></td></tr>\n<tr class=\"memdesc:ga6099dd7878d0a78101a4250d8cd2d736\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga6099dd7878d0a78101a4250d8cd2d736\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6f041b212c57664d88bc6aefb7e36f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf6f041b212c57664d88bc6aefb7e36f3\"></a>\ntypedef mat&lt; 2, 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf6f041b212c57664d88bc6aefb7e36f3\">aligned_mediump_mat2</a></td></tr>\n<tr class=\"memdesc:gaf6f041b212c57664d88bc6aefb7e36f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf6f041b212c57664d88bc6aefb7e36f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04bf49316ee777d42fcfe681ee37d7be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga04bf49316ee777d42fcfe681ee37d7be\"></a>\ntypedef mat&lt; 2, 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga04bf49316ee777d42fcfe681ee37d7be\">aligned_mediump_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga04bf49316ee777d42fcfe681ee37d7be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga04bf49316ee777d42fcfe681ee37d7be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26a0b61e444a51a37b9737cf4d84291b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga26a0b61e444a51a37b9737cf4d84291b\"></a>\ntypedef mat&lt; 2, 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga26a0b61e444a51a37b9737cf4d84291b\">aligned_mediump_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga26a0b61e444a51a37b9737cf4d84291b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga26a0b61e444a51a37b9737cf4d84291b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga163facc9ed2692ea1300ed57c5d12b17\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga163facc9ed2692ea1300ed57c5d12b17\"></a>\ntypedef mat&lt; 2, 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga163facc9ed2692ea1300ed57c5d12b17\">aligned_mediump_mat2x4</a></td></tr>\n<tr class=\"memdesc:ga163facc9ed2692ea1300ed57c5d12b17\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga163facc9ed2692ea1300ed57c5d12b17\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b76ba17ae5d53debeb6f7e55919a57c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3b76ba17ae5d53debeb6f7e55919a57c\"></a>\ntypedef mat&lt; 3, 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3b76ba17ae5d53debeb6f7e55919a57c\">aligned_mediump_mat3</a></td></tr>\n<tr class=\"memdesc:ga3b76ba17ae5d53debeb6f7e55919a57c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3b76ba17ae5d53debeb6f7e55919a57c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga80dee705d714300378e0847f45059097\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga80dee705d714300378e0847f45059097\"></a>\ntypedef mat&lt; 3, 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga80dee705d714300378e0847f45059097\">aligned_mediump_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga80dee705d714300378e0847f45059097\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga80dee705d714300378e0847f45059097\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga721f5404caf40d68962dcc0529de71d9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga721f5404caf40d68962dcc0529de71d9\"></a>\ntypedef mat&lt; 3, 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga721f5404caf40d68962dcc0529de71d9\">aligned_mediump_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga721f5404caf40d68962dcc0529de71d9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga721f5404caf40d68962dcc0529de71d9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga98f4dc6722a2541a990918c074075359\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga98f4dc6722a2541a990918c074075359\"></a>\ntypedef mat&lt; 3, 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga98f4dc6722a2541a990918c074075359\">aligned_mediump_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga98f4dc6722a2541a990918c074075359\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga98f4dc6722a2541a990918c074075359\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeefee8317192174596852ce19b602720\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaeefee8317192174596852ce19b602720\"></a>\ntypedef mat&lt; 4, 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaeefee8317192174596852ce19b602720\">aligned_mediump_mat4</a></td></tr>\n<tr class=\"memdesc:gaeefee8317192174596852ce19b602720\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaeefee8317192174596852ce19b602720\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46f372a006345c252a41267657cc22c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga46f372a006345c252a41267657cc22c0\"></a>\ntypedef mat&lt; 4, 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga46f372a006345c252a41267657cc22c0\">aligned_mediump_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga46f372a006345c252a41267657cc22c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga46f372a006345c252a41267657cc22c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0effece4545acdebdc2a5512a303110e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0effece4545acdebdc2a5512a303110e\"></a>\ntypedef mat&lt; 4, 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0effece4545acdebdc2a5512a303110e\">aligned_mediump_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga0effece4545acdebdc2a5512a303110e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0effece4545acdebdc2a5512a303110e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga312864244cae4e8f10f478cffd0f76de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga312864244cae4e8f10f478cffd0f76de\"></a>\ntypedef mat&lt; 4, 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga312864244cae4e8f10f478cffd0f76de\">aligned_mediump_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga312864244cae4e8f10f478cffd0f76de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga312864244cae4e8f10f478cffd0f76de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb78126ea2eb779b41c7511128ff1283\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacb78126ea2eb779b41c7511128ff1283\"></a>\ntypedef vec&lt; 1, uint, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacb78126ea2eb779b41c7511128ff1283\">aligned_mediump_uvec1</a></td></tr>\n<tr class=\"memdesc:gacb78126ea2eb779b41c7511128ff1283\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gacb78126ea2eb779b41c7511128ff1283\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga081d53e0a71443d0b68ea61c870f9adc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga081d53e0a71443d0b68ea61c870f9adc\"></a>\ntypedef vec&lt; 2, uint, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga081d53e0a71443d0b68ea61c870f9adc\">aligned_mediump_uvec2</a></td></tr>\n<tr class=\"memdesc:ga081d53e0a71443d0b68ea61c870f9adc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga081d53e0a71443d0b68ea61c870f9adc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6fc921bdde2bdbc7e09b028e1e9b379\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad6fc921bdde2bdbc7e09b028e1e9b379\"></a>\ntypedef vec&lt; 3, uint, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad6fc921bdde2bdbc7e09b028e1e9b379\">aligned_mediump_uvec3</a></td></tr>\n<tr class=\"memdesc:gad6fc921bdde2bdbc7e09b028e1e9b379\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gad6fc921bdde2bdbc7e09b028e1e9b379\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73ea0c1ba31580e107d21270883f51fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga73ea0c1ba31580e107d21270883f51fc\"></a>\ntypedef vec&lt; 4, uint, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga73ea0c1ba31580e107d21270883f51fc\">aligned_mediump_uvec4</a></td></tr>\n<tr class=\"memdesc:ga73ea0c1ba31580e107d21270883f51fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga73ea0c1ba31580e107d21270883f51fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b797eec76fa471e300158f3453b3b2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6b797eec76fa471e300158f3453b3b2e\"></a>\ntypedef vec&lt; 1, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6b797eec76fa471e300158f3453b3b2e\">aligned_mediump_vec1</a></td></tr>\n<tr class=\"memdesc:ga6b797eec76fa471e300158f3453b3b2e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6b797eec76fa471e300158f3453b3b2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga026a55ddbf2bafb1432f1157a2708616\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga026a55ddbf2bafb1432f1157a2708616\"></a>\ntypedef vec&lt; 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga026a55ddbf2bafb1432f1157a2708616\">aligned_mediump_vec2</a></td></tr>\n<tr class=\"memdesc:ga026a55ddbf2bafb1432f1157a2708616\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga026a55ddbf2bafb1432f1157a2708616\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a25e494173f6a64637b08a1b50a2132\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3a25e494173f6a64637b08a1b50a2132\"></a>\ntypedef vec&lt; 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3a25e494173f6a64637b08a1b50a2132\">aligned_mediump_vec3</a></td></tr>\n<tr class=\"memdesc:ga3a25e494173f6a64637b08a1b50a2132\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3a25e494173f6a64637b08a1b50a2132\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga320d1c661cff2ef214eb50241f2928b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga320d1c661cff2ef214eb50241f2928b2\"></a>\ntypedef vec&lt; 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga320d1c661cff2ef214eb50241f2928b2\">aligned_mediump_vec4</a></td></tr>\n<tr class=\"memdesc:ga320d1c661cff2ef214eb50241f2928b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga320d1c661cff2ef214eb50241f2928b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ff8ed402c93d280ff0597c1c5e7c548\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1ff8ed402c93d280ff0597c1c5e7c548\"></a>\ntypedef aligned_highp_uvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">aligned_uvec1</a></td></tr>\n<tr class=\"memdesc:ga1ff8ed402c93d280ff0597c1c5e7c548\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga1ff8ed402c93d280ff0597c1c5e7c548\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga074137e3be58528d67041c223d49f398\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga074137e3be58528d67041c223d49f398\"></a>\ntypedef aligned_highp_uvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">aligned_uvec2</a></td></tr>\n<tr class=\"memdesc:ga074137e3be58528d67041c223d49f398\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga074137e3be58528d67041c223d49f398\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a8d9c3046f89d854eb758adfa0811c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2a8d9c3046f89d854eb758adfa0811c0\"></a>\ntypedef aligned_highp_uvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">aligned_uvec3</a></td></tr>\n<tr class=\"memdesc:ga2a8d9c3046f89d854eb758adfa0811c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga2a8d9c3046f89d854eb758adfa0811c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf842c45eea186170c267a328e3f3b7d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabf842c45eea186170c267a328e3f3b7d\"></a>\ntypedef aligned_highp_uvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">aligned_uvec4</a></td></tr>\n<tr class=\"memdesc:gabf842c45eea186170c267a328e3f3b7d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gabf842c45eea186170c267a328e3f3b7d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05e6d4c908965d04191c2070a8d0a65e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga05e6d4c908965d04191c2070a8d0a65e\"></a>\ntypedef aligned_highp_vec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">aligned_vec1</a></td></tr>\n<tr class=\"memdesc:ga05e6d4c908965d04191c2070a8d0a65e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga05e6d4c908965d04191c2070a8d0a65e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0682462f8096a226773e20fac993cde5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0682462f8096a226773e20fac993cde5\"></a>\ntypedef aligned_highp_vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">aligned_vec2</a></td></tr>\n<tr class=\"memdesc:ga0682462f8096a226773e20fac993cde5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga0682462f8096a226773e20fac993cde5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cf643b66664e0cd3c48759ae66c2bd0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7cf643b66664e0cd3c48759ae66c2bd0\"></a>\ntypedef aligned_highp_vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">aligned_vec3</a></td></tr>\n<tr class=\"memdesc:ga7cf643b66664e0cd3c48759ae66c2bd0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga7cf643b66664e0cd3c48759ae66c2bd0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85d89e83cb8137e1be1446de8c3b643a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga85d89e83cb8137e1be1446de8c3b643a\"></a>\ntypedef aligned_highp_vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">aligned_vec4</a></td></tr>\n<tr class=\"memdesc:ga85d89e83cb8137e1be1446de8c3b643a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga85d89e83cb8137e1be1446de8c3b643a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga88632cea9008ac0ac1388e94e804a53c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga88632cea9008ac0ac1388e94e804a53c\"></a>\ntypedef packed_highp_bvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga88632cea9008ac0ac1388e94e804a53c\">packed_bvec1</a></td></tr>\n<tr class=\"memdesc:ga88632cea9008ac0ac1388e94e804a53c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga88632cea9008ac0ac1388e94e804a53c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab85245913eaa40ab82adabcae37086cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab85245913eaa40ab82adabcae37086cb\"></a>\ntypedef packed_highp_bvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab85245913eaa40ab82adabcae37086cb\">packed_bvec2</a></td></tr>\n<tr class=\"memdesc:gab85245913eaa40ab82adabcae37086cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gab85245913eaa40ab82adabcae37086cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c48f9417f649e27f3fb0c9f733a18bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0c48f9417f649e27f3fb0c9f733a18bd\"></a>\ntypedef packed_highp_bvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0c48f9417f649e27f3fb0c9f733a18bd\">packed_bvec3</a></td></tr>\n<tr class=\"memdesc:ga0c48f9417f649e27f3fb0c9f733a18bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga0c48f9417f649e27f3fb0c9f733a18bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3180d7db84a74c402157df3bbc0ae3ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3180d7db84a74c402157df3bbc0ae3ed\"></a>\ntypedef packed_highp_bvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3180d7db84a74c402157df3bbc0ae3ed\">packed_bvec4</a></td></tr>\n<tr class=\"memdesc:ga3180d7db84a74c402157df3bbc0ae3ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga3180d7db84a74c402157df3bbc0ae3ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad87408a8350918711f845f071bbe43fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad87408a8350918711f845f071bbe43fb\"></a>\ntypedef packed_highp_dmat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad87408a8350918711f845f071bbe43fb\">packed_dmat2</a></td></tr>\n<tr class=\"memdesc:gad87408a8350918711f845f071bbe43fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gad87408a8350918711f845f071bbe43fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa33d8e06657a777efb0c72c44ce87a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaa33d8e06657a777efb0c72c44ce87a9\"></a>\ntypedef packed_highp_dmat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9\">packed_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gaaa33d8e06657a777efb0c72c44ce87a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaaa33d8e06657a777efb0c72c44ce87a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3a5315f588ba04ad255188071ec4e22\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac3a5315f588ba04ad255188071ec4e22\"></a>\ntypedef packed_highp_dmat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac3a5315f588ba04ad255188071ec4e22\">packed_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gac3a5315f588ba04ad255188071ec4e22\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gac3a5315f588ba04ad255188071ec4e22\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae398fc3156f51d3684b08f62c1a5a6d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae398fc3156f51d3684b08f62c1a5a6d4\"></a>\ntypedef packed_highp_dmat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4\">packed_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gae398fc3156f51d3684b08f62c1a5a6d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gae398fc3156f51d3684b08f62c1a5a6d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03dfc90d539cc87ea3a15a9caa5d2245\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga03dfc90d539cc87ea3a15a9caa5d2245\"></a>\ntypedef packed_highp_dmat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245\">packed_dmat3</a></td></tr>\n<tr class=\"memdesc:ga03dfc90d539cc87ea3a15a9caa5d2245\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga03dfc90d539cc87ea3a15a9caa5d2245\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae36de20a4c0e0b1444b7903ae811d94e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae36de20a4c0e0b1444b7903ae811d94e\"></a>\ntypedef packed_highp_dmat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae36de20a4c0e0b1444b7903ae811d94e\">packed_dmat3x2</a></td></tr>\n<tr class=\"memdesc:gae36de20a4c0e0b1444b7903ae811d94e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gae36de20a4c0e0b1444b7903ae811d94e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab9b909f1392d86854334350efcae85f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab9b909f1392d86854334350efcae85f5\"></a>\ntypedef packed_highp_dmat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab9b909f1392d86854334350efcae85f5\">packed_dmat3x3</a></td></tr>\n<tr class=\"memdesc:gab9b909f1392d86854334350efcae85f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gab9b909f1392d86854334350efcae85f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga199131fd279c92c2ac12df6d978f1dd6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga199131fd279c92c2ac12df6d978f1dd6\"></a>\ntypedef packed_highp_dmat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga199131fd279c92c2ac12df6d978f1dd6\">packed_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga199131fd279c92c2ac12df6d978f1dd6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga199131fd279c92c2ac12df6d978f1dd6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada980a3485640aa8151f368f17ad3086\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gada980a3485640aa8151f368f17ad3086\"></a>\ntypedef packed_highp_dmat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gada980a3485640aa8151f368f17ad3086\">packed_dmat4</a></td></tr>\n<tr class=\"memdesc:gada980a3485640aa8151f368f17ad3086\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gada980a3485640aa8151f368f17ad3086\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6dc65249730698d3cc9ac5d7e1bc4d72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6dc65249730698d3cc9ac5d7e1bc4d72\"></a>\ntypedef packed_highp_dmat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72\">packed_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga6dc65249730698d3cc9ac5d7e1bc4d72\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga6dc65249730698d3cc9ac5d7e1bc4d72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadf202aaa9ed71c09f9bbe347e43f8764\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadf202aaa9ed71c09f9bbe347e43f8764\"></a>\ntypedef packed_highp_dmat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764\">packed_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gadf202aaa9ed71c09f9bbe347e43f8764\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadf202aaa9ed71c09f9bbe347e43f8764\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae20617435a6d042d7c38da2badd64a09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae20617435a6d042d7c38da2badd64a09\"></a>\ntypedef packed_highp_dmat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae20617435a6d042d7c38da2badd64a09\">packed_dmat4x4</a></td></tr>\n<tr class=\"memdesc:gae20617435a6d042d7c38da2badd64a09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gae20617435a6d042d7c38da2badd64a09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga532f0c940649b1ee303acd572fc35531\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga532f0c940649b1ee303acd572fc35531\"></a>\ntypedef packed_highp_dvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga532f0c940649b1ee303acd572fc35531\">packed_dvec1</a></td></tr>\n<tr class=\"memdesc:ga532f0c940649b1ee303acd572fc35531\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga532f0c940649b1ee303acd572fc35531\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c194b11fbda636f2ab20c3bd0079196\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5c194b11fbda636f2ab20c3bd0079196\"></a>\ntypedef packed_highp_dvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5c194b11fbda636f2ab20c3bd0079196\">packed_dvec2</a></td></tr>\n<tr class=\"memdesc:ga5c194b11fbda636f2ab20c3bd0079196\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5c194b11fbda636f2ab20c3bd0079196\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0581ea552d86b2b5de7a2804bed80e72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0581ea552d86b2b5de7a2804bed80e72\"></a>\ntypedef packed_highp_dvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0581ea552d86b2b5de7a2804bed80e72\">packed_dvec3</a></td></tr>\n<tr class=\"memdesc:ga0581ea552d86b2b5de7a2804bed80e72\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga0581ea552d86b2b5de7a2804bed80e72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae8a9b181f9dc813ad6e125a52b14b935\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae8a9b181f9dc813ad6e125a52b14b935\"></a>\ntypedef packed_highp_dvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae8a9b181f9dc813ad6e125a52b14b935\">packed_dvec4</a></td></tr>\n<tr class=\"memdesc:gae8a9b181f9dc813ad6e125a52b14b935\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gae8a9b181f9dc813ad6e125a52b14b935\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga439e97795314b81cd15abd4e5c2e6e7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga439e97795314b81cd15abd4e5c2e6e7a\"></a>\ntypedef vec&lt; 1, bool, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga439e97795314b81cd15abd4e5c2e6e7a\">packed_highp_bvec1</a></td></tr>\n<tr class=\"memdesc:ga439e97795314b81cd15abd4e5c2e6e7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga439e97795314b81cd15abd4e5c2e6e7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad791d671f4fcf1ed1ea41f752916b70a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad791d671f4fcf1ed1ea41f752916b70a\"></a>\ntypedef vec&lt; 2, bool, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad791d671f4fcf1ed1ea41f752916b70a\">packed_highp_bvec2</a></td></tr>\n<tr class=\"memdesc:gad791d671f4fcf1ed1ea41f752916b70a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gad791d671f4fcf1ed1ea41f752916b70a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6a5a3250b57dfadc66735bc72911437f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6a5a3250b57dfadc66735bc72911437f\"></a>\ntypedef vec&lt; 3, bool, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6a5a3250b57dfadc66735bc72911437f\">packed_highp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga6a5a3250b57dfadc66735bc72911437f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga6a5a3250b57dfadc66735bc72911437f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09f517d88b996ef1b2f42fd54222b82d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga09f517d88b996ef1b2f42fd54222b82d\"></a>\ntypedef vec&lt; 4, bool, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga09f517d88b996ef1b2f42fd54222b82d\">packed_highp_bvec4</a></td></tr>\n<tr class=\"memdesc:ga09f517d88b996ef1b2f42fd54222b82d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga09f517d88b996ef1b2f42fd54222b82d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae29686632fd05efac0675d9a6370d77b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae29686632fd05efac0675d9a6370d77b\"></a>\ntypedef mat&lt; 2, 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae29686632fd05efac0675d9a6370d77b\">packed_highp_dmat2</a></td></tr>\n<tr class=\"memdesc:gae29686632fd05efac0675d9a6370d77b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae29686632fd05efac0675d9a6370d77b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga22bd6382b16052e301edbfc031b9f37a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga22bd6382b16052e301edbfc031b9f37a\"></a>\ntypedef mat&lt; 2, 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga22bd6382b16052e301edbfc031b9f37a\">packed_highp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga22bd6382b16052e301edbfc031b9f37a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga22bd6382b16052e301edbfc031b9f37a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga999d82719696d4c59f4d236dd08f273d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga999d82719696d4c59f4d236dd08f273d\"></a>\ntypedef mat&lt; 2, 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga999d82719696d4c59f4d236dd08f273d\">packed_highp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga999d82719696d4c59f4d236dd08f273d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga999d82719696d4c59f4d236dd08f273d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6998ac2a8d7fe456b651a6336ed26bb0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6998ac2a8d7fe456b651a6336ed26bb0\"></a>\ntypedef mat&lt; 2, 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6998ac2a8d7fe456b651a6336ed26bb0\">packed_highp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga6998ac2a8d7fe456b651a6336ed26bb0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6998ac2a8d7fe456b651a6336ed26bb0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadac7c040c4810dd52b36fcd09d097400\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadac7c040c4810dd52b36fcd09d097400\"></a>\ntypedef mat&lt; 3, 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadac7c040c4810dd52b36fcd09d097400\">packed_highp_dmat3</a></td></tr>\n<tr class=\"memdesc:gadac7c040c4810dd52b36fcd09d097400\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gadac7c040c4810dd52b36fcd09d097400\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab462744977beb85fb5c782bc2eea7b15\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab462744977beb85fb5c782bc2eea7b15\"></a>\ntypedef mat&lt; 3, 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab462744977beb85fb5c782bc2eea7b15\">packed_highp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:gab462744977beb85fb5c782bc2eea7b15\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab462744977beb85fb5c782bc2eea7b15\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga49e5a709d098523823b2f824e48672a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga49e5a709d098523823b2f824e48672a6\"></a>\ntypedef mat&lt; 3, 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga49e5a709d098523823b2f824e48672a6\">packed_highp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga49e5a709d098523823b2f824e48672a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga49e5a709d098523823b2f824e48672a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c67b3b0adab71c8680c3d819f1fa9b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2c67b3b0adab71c8680c3d819f1fa9b7\"></a>\ntypedef mat&lt; 3, 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2c67b3b0adab71c8680c3d819f1fa9b7\">packed_highp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga2c67b3b0adab71c8680c3d819f1fa9b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2c67b3b0adab71c8680c3d819f1fa9b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6718822cd7af005a9b5bd6ee282f6ba6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6718822cd7af005a9b5bd6ee282f6ba6\"></a>\ntypedef mat&lt; 4, 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6718822cd7af005a9b5bd6ee282f6ba6\">packed_highp_dmat4</a></td></tr>\n<tr class=\"memdesc:ga6718822cd7af005a9b5bd6ee282f6ba6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6718822cd7af005a9b5bd6ee282f6ba6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga12e39e797fb724a5b51fcbea2513a7da\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga12e39e797fb724a5b51fcbea2513a7da\"></a>\ntypedef mat&lt; 4, 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga12e39e797fb724a5b51fcbea2513a7da\">packed_highp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga12e39e797fb724a5b51fcbea2513a7da\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga12e39e797fb724a5b51fcbea2513a7da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga79c2e9f82e67963c1ecad0ad6d0ec72e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga79c2e9f82e67963c1ecad0ad6d0ec72e\"></a>\ntypedef mat&lt; 4, 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga79c2e9f82e67963c1ecad0ad6d0ec72e\">packed_highp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga79c2e9f82e67963c1ecad0ad6d0ec72e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga79c2e9f82e67963c1ecad0ad6d0ec72e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2df58e03e5afded28707b4f7d077afb4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2df58e03e5afded28707b4f7d077afb4\"></a>\ntypedef mat&lt; 4, 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2df58e03e5afded28707b4f7d077afb4\">packed_highp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga2df58e03e5afded28707b4f7d077afb4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2df58e03e5afded28707b4f7d077afb4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab472b2d917b5e6efd76e8c7dbfbbf9f1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab472b2d917b5e6efd76e8c7dbfbbf9f1\"></a>\ntypedef vec&lt; 1, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab472b2d917b5e6efd76e8c7dbfbbf9f1\">packed_highp_dvec1</a></td></tr>\n<tr class=\"memdesc:gab472b2d917b5e6efd76e8c7dbfbbf9f1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab472b2d917b5e6efd76e8c7dbfbbf9f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b2dc48fa19b684d207d69c6b145eb63\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5b2dc48fa19b684d207d69c6b145eb63\"></a>\ntypedef vec&lt; 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5b2dc48fa19b684d207d69c6b145eb63\">packed_highp_dvec2</a></td></tr>\n<tr class=\"memdesc:ga5b2dc48fa19b684d207d69c6b145eb63\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga5b2dc48fa19b684d207d69c6b145eb63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaac6b356ef00154da41aaae7d1549193\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaac6b356ef00154da41aaae7d1549193\"></a>\ntypedef vec&lt; 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaac6b356ef00154da41aaae7d1549193\">packed_highp_dvec3</a></td></tr>\n<tr class=\"memdesc:gaaac6b356ef00154da41aaae7d1549193\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaaac6b356ef00154da41aaae7d1549193\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81b5368fe485e2630aa9b44832d592e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga81b5368fe485e2630aa9b44832d592e7\"></a>\ntypedef vec&lt; 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga81b5368fe485e2630aa9b44832d592e7\">packed_highp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga81b5368fe485e2630aa9b44832d592e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga81b5368fe485e2630aa9b44832d592e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7245acc887a5438f46fd85fdf076bb3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7245acc887a5438f46fd85fdf076bb3b\"></a>\ntypedef vec&lt; 1, int, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7245acc887a5438f46fd85fdf076bb3b\">packed_highp_ivec1</a></td></tr>\n<tr class=\"memdesc:ga7245acc887a5438f46fd85fdf076bb3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga7245acc887a5438f46fd85fdf076bb3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga54f368ec6b514a5aa4f28d40e6f93ef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga54f368ec6b514a5aa4f28d40e6f93ef7\"></a>\ntypedef vec&lt; 2, int, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga54f368ec6b514a5aa4f28d40e6f93ef7\">packed_highp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga54f368ec6b514a5aa4f28d40e6f93ef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga54f368ec6b514a5aa4f28d40e6f93ef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga865a9c7bb22434b1b8c5ac31e164b628\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga865a9c7bb22434b1b8c5ac31e164b628\"></a>\ntypedef vec&lt; 3, int, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga865a9c7bb22434b1b8c5ac31e164b628\">packed_highp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga865a9c7bb22434b1b8c5ac31e164b628\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga865a9c7bb22434b1b8c5ac31e164b628\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6f1b4e3a51c2c051814b60d5d1b8895\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad6f1b4e3a51c2c051814b60d5d1b8895\"></a>\ntypedef vec&lt; 4, int, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad6f1b4e3a51c2c051814b60d5d1b8895\">packed_highp_ivec4</a></td></tr>\n<tr class=\"memdesc:gad6f1b4e3a51c2c051814b60d5d1b8895\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gad6f1b4e3a51c2c051814b60d5d1b8895\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f2d913d8cca2f935b2522964408c0b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2f2d913d8cca2f935b2522964408c0b2\"></a>\ntypedef mat&lt; 2, 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2f2d913d8cca2f935b2522964408c0b2\">packed_highp_mat2</a></td></tr>\n<tr class=\"memdesc:ga2f2d913d8cca2f935b2522964408c0b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2f2d913d8cca2f935b2522964408c0b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga245c12d2daf67feecaa2d3277c8f6661\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga245c12d2daf67feecaa2d3277c8f6661\"></a>\ntypedef mat&lt; 2, 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga245c12d2daf67feecaa2d3277c8f6661\">packed_highp_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga245c12d2daf67feecaa2d3277c8f6661\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga245c12d2daf67feecaa2d3277c8f6661\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga069cc8892aadae144c00f35297617d44\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga069cc8892aadae144c00f35297617d44\"></a>\ntypedef mat&lt; 2, 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga069cc8892aadae144c00f35297617d44\">packed_highp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga069cc8892aadae144c00f35297617d44\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga069cc8892aadae144c00f35297617d44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6904d09b62141d09712b76983892f95b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6904d09b62141d09712b76983892f95b\"></a>\ntypedef mat&lt; 2, 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6904d09b62141d09712b76983892f95b\">packed_highp_mat2x4</a></td></tr>\n<tr class=\"memdesc:ga6904d09b62141d09712b76983892f95b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6904d09b62141d09712b76983892f95b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabdd5fbffe8b8b8a7b33523f25b120dbe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabdd5fbffe8b8b8a7b33523f25b120dbe\"></a>\ntypedef mat&lt; 3, 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabdd5fbffe8b8b8a7b33523f25b120dbe\">packed_highp_mat3</a></td></tr>\n<tr class=\"memdesc:gabdd5fbffe8b8b8a7b33523f25b120dbe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gabdd5fbffe8b8b8a7b33523f25b120dbe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2624719cb251d8de8cad1beaefc3a3f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2624719cb251d8de8cad1beaefc3a3f9\"></a>\ntypedef mat&lt; 3, 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2624719cb251d8de8cad1beaefc3a3f9\">packed_highp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga2624719cb251d8de8cad1beaefc3a3f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2624719cb251d8de8cad1beaefc3a3f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2e07527d678440bf0c20adbeb9177c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf2e07527d678440bf0c20adbeb9177c5\"></a>\ntypedef mat&lt; 3, 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf2e07527d678440bf0c20adbeb9177c5\">packed_highp_mat3x3</a></td></tr>\n<tr class=\"memdesc:gaf2e07527d678440bf0c20adbeb9177c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf2e07527d678440bf0c20adbeb9177c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga72102fa6ac2445aa3bb203128ad52449\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga72102fa6ac2445aa3bb203128ad52449\"></a>\ntypedef mat&lt; 3, 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga72102fa6ac2445aa3bb203128ad52449\">packed_highp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga72102fa6ac2445aa3bb203128ad52449\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga72102fa6ac2445aa3bb203128ad52449\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga253e8379b08d2dc6fe2800b2fb913203\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga253e8379b08d2dc6fe2800b2fb913203\"></a>\ntypedef mat&lt; 4, 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga253e8379b08d2dc6fe2800b2fb913203\">packed_highp_mat4</a></td></tr>\n<tr class=\"memdesc:ga253e8379b08d2dc6fe2800b2fb913203\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga253e8379b08d2dc6fe2800b2fb913203\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae389c2071cf3cdb33e7812c6fd156710\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae389c2071cf3cdb33e7812c6fd156710\"></a>\ntypedef mat&lt; 4, 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae389c2071cf3cdb33e7812c6fd156710\">packed_highp_mat4x2</a></td></tr>\n<tr class=\"memdesc:gae389c2071cf3cdb33e7812c6fd156710\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae389c2071cf3cdb33e7812c6fd156710\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4584f64394bd7123b7a8534741e4916c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4584f64394bd7123b7a8534741e4916c\"></a>\ntypedef mat&lt; 4, 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4584f64394bd7123b7a8534741e4916c\">packed_highp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga4584f64394bd7123b7a8534741e4916c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4584f64394bd7123b7a8534741e4916c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0149fe15668925147e07c94fd2c2d6ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0149fe15668925147e07c94fd2c2d6ae\"></a>\ntypedef mat&lt; 4, 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0149fe15668925147e07c94fd2c2d6ae\">packed_highp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga0149fe15668925147e07c94fd2c2d6ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0149fe15668925147e07c94fd2c2d6ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8c32b53f628a3616aa5061e58d66fe74\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8c32b53f628a3616aa5061e58d66fe74\"></a>\ntypedef vec&lt; 1, uint, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8c32b53f628a3616aa5061e58d66fe74\">packed_highp_uvec1</a></td></tr>\n<tr class=\"memdesc:ga8c32b53f628a3616aa5061e58d66fe74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga8c32b53f628a3616aa5061e58d66fe74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab704d4fb15f6f96d70e363d5db7060cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab704d4fb15f6f96d70e363d5db7060cd\"></a>\ntypedef vec&lt; 2, uint, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab704d4fb15f6f96d70e363d5db7060cd\">packed_highp_uvec2</a></td></tr>\n<tr class=\"memdesc:gab704d4fb15f6f96d70e363d5db7060cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gab704d4fb15f6f96d70e363d5db7060cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b570da473fec4619db5aa0dce5133b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0b570da473fec4619db5aa0dce5133b0\"></a>\ntypedef vec&lt; 3, uint, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0b570da473fec4619db5aa0dce5133b0\">packed_highp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga0b570da473fec4619db5aa0dce5133b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga0b570da473fec4619db5aa0dce5133b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa582f38c82aef61dea7aaedf15bb06a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa582f38c82aef61dea7aaedf15bb06a6\"></a>\ntypedef vec&lt; 4, uint, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa582f38c82aef61dea7aaedf15bb06a6\">packed_highp_uvec4</a></td></tr>\n<tr class=\"memdesc:gaa582f38c82aef61dea7aaedf15bb06a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gaa582f38c82aef61dea7aaedf15bb06a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga56473759d2702ee19ab7f91d0017fa70\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga56473759d2702ee19ab7f91d0017fa70\"></a>\ntypedef vec&lt; 1, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga56473759d2702ee19ab7f91d0017fa70\">packed_highp_vec1</a></td></tr>\n<tr class=\"memdesc:ga56473759d2702ee19ab7f91d0017fa70\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga56473759d2702ee19ab7f91d0017fa70\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b8b9475e7c3b16aed13edbc460bbc4d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6b8b9475e7c3b16aed13edbc460bbc4d\"></a>\ntypedef vec&lt; 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6b8b9475e7c3b16aed13edbc460bbc4d\">packed_highp_vec2</a></td></tr>\n<tr class=\"memdesc:ga6b8b9475e7c3b16aed13edbc460bbc4d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6b8b9475e7c3b16aed13edbc460bbc4d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3815661df0e2de79beff8168c09adf1e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3815661df0e2de79beff8168c09adf1e\"></a>\ntypedef vec&lt; 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3815661df0e2de79beff8168c09adf1e\">packed_highp_vec3</a></td></tr>\n<tr class=\"memdesc:ga3815661df0e2de79beff8168c09adf1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3815661df0e2de79beff8168c09adf1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4015f36bf5a5adb6ac5d45beed959867\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4015f36bf5a5adb6ac5d45beed959867\"></a>\ntypedef vec&lt; 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4015f36bf5a5adb6ac5d45beed959867\">packed_highp_vec4</a></td></tr>\n<tr class=\"memdesc:ga4015f36bf5a5adb6ac5d45beed959867\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4015f36bf5a5adb6ac5d45beed959867\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga11581a06fc7bf941fa4d4b6aca29812c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga11581a06fc7bf941fa4d4b6aca29812c\"></a>\ntypedef packed_highp_ivec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga11581a06fc7bf941fa4d4b6aca29812c\">packed_ivec1</a></td></tr>\n<tr class=\"memdesc:ga11581a06fc7bf941fa4d4b6aca29812c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga11581a06fc7bf941fa4d4b6aca29812c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fe4c5f56b8087d773aa90dc88a257a7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1fe4c5f56b8087d773aa90dc88a257a7\"></a>\ntypedef packed_highp_ivec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1fe4c5f56b8087d773aa90dc88a257a7\">packed_ivec2</a></td></tr>\n<tr class=\"memdesc:ga1fe4c5f56b8087d773aa90dc88a257a7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga1fe4c5f56b8087d773aa90dc88a257a7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae157682a7847161787951ba1db4cf325\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae157682a7847161787951ba1db4cf325\"></a>\ntypedef packed_highp_ivec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae157682a7847161787951ba1db4cf325\">packed_ivec3</a></td></tr>\n<tr class=\"memdesc:gae157682a7847161787951ba1db4cf325\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gae157682a7847161787951ba1db4cf325\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac228b70372abd561340d5f926a7c1778\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac228b70372abd561340d5f926a7c1778\"></a>\ntypedef packed_highp_ivec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac228b70372abd561340d5f926a7c1778\">packed_ivec4</a></td></tr>\n<tr class=\"memdesc:gac228b70372abd561340d5f926a7c1778\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gac228b70372abd561340d5f926a7c1778\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae3c8750f53259ece334d3aa3b3649a40\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae3c8750f53259ece334d3aa3b3649a40\"></a>\ntypedef vec&lt; 1, bool, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae3c8750f53259ece334d3aa3b3649a40\">packed_lowp_bvec1</a></td></tr>\n<tr class=\"memdesc:gae3c8750f53259ece334d3aa3b3649a40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae3c8750f53259ece334d3aa3b3649a40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac969befedbda69eb78d4e23f751fdbee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac969befedbda69eb78d4e23f751fdbee\"></a>\ntypedef vec&lt; 2, bool, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac969befedbda69eb78d4e23f751fdbee\">packed_lowp_bvec2</a></td></tr>\n<tr class=\"memdesc:gac969befedbda69eb78d4e23f751fdbee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gac969befedbda69eb78d4e23f751fdbee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c20adbe1409e3fe4544677a7f6fe954\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7c20adbe1409e3fe4544677a7f6fe954\"></a>\ntypedef vec&lt; 3, bool, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7c20adbe1409e3fe4544677a7f6fe954\">packed_lowp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga7c20adbe1409e3fe4544677a7f6fe954\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga7c20adbe1409e3fe4544677a7f6fe954\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae473587cff3092edc0877fc691c26a0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae473587cff3092edc0877fc691c26a0b\"></a>\ntypedef vec&lt; 4, bool, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae473587cff3092edc0877fc691c26a0b\">packed_lowp_bvec4</a></td></tr>\n<tr class=\"memdesc:gae473587cff3092edc0877fc691c26a0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae473587cff3092edc0877fc691c26a0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac93f9b1a35b9de4f456b9f2dfeaf1097\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac93f9b1a35b9de4f456b9f2dfeaf1097\"></a>\ntypedef mat&lt; 2, 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac93f9b1a35b9de4f456b9f2dfeaf1097\">packed_lowp_dmat2</a></td></tr>\n<tr class=\"memdesc:gac93f9b1a35b9de4f456b9f2dfeaf1097\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac93f9b1a35b9de4f456b9f2dfeaf1097\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeeaff6c132ec91ebd21da3a2399548ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaeeaff6c132ec91ebd21da3a2399548ea\"></a>\ntypedef mat&lt; 2, 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaeeaff6c132ec91ebd21da3a2399548ea\">packed_lowp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gaeeaff6c132ec91ebd21da3a2399548ea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaeeaff6c132ec91ebd21da3a2399548ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ccdcd4846775cbe4f9d12e71d55b5d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2ccdcd4846775cbe4f9d12e71d55b5d2\"></a>\ntypedef mat&lt; 2, 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2ccdcd4846775cbe4f9d12e71d55b5d2\">packed_lowp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga2ccdcd4846775cbe4f9d12e71d55b5d2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2ccdcd4846775cbe4f9d12e71d55b5d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac870c47d2d9d48503f6c9ee3baec8ce1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac870c47d2d9d48503f6c9ee3baec8ce1\"></a>\ntypedef mat&lt; 2, 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac870c47d2d9d48503f6c9ee3baec8ce1\">packed_lowp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gac870c47d2d9d48503f6c9ee3baec8ce1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac870c47d2d9d48503f6c9ee3baec8ce1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3894a059eeaacec8791c25de398d9955\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3894a059eeaacec8791c25de398d9955\"></a>\ntypedef mat&lt; 3, 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3894a059eeaacec8791c25de398d9955\">packed_lowp_dmat3</a></td></tr>\n<tr class=\"memdesc:ga3894a059eeaacec8791c25de398d9955\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3894a059eeaacec8791c25de398d9955\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga23ec236950f5859f59197663266b535d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga23ec236950f5859f59197663266b535d\"></a>\ntypedef mat&lt; 3, 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga23ec236950f5859f59197663266b535d\">packed_lowp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga23ec236950f5859f59197663266b535d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga23ec236950f5859f59197663266b535d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"></a>\ntypedef mat&lt; 3, 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4a7c7d8c3a663d0ec2a858cbfa14e54c\">packed_lowp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8fc0e66da83599071b7ec17510686cd9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8fc0e66da83599071b7ec17510686cd9\"></a>\ntypedef mat&lt; 3, 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8fc0e66da83599071b7ec17510686cd9\">packed_lowp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga8fc0e66da83599071b7ec17510686cd9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8fc0e66da83599071b7ec17510686cd9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03e1edf5666c40affe39aee35c87956f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga03e1edf5666c40affe39aee35c87956f\"></a>\ntypedef mat&lt; 4, 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga03e1edf5666c40affe39aee35c87956f\">packed_lowp_dmat4</a></td></tr>\n<tr class=\"memdesc:ga03e1edf5666c40affe39aee35c87956f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga03e1edf5666c40affe39aee35c87956f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39658fb13369db869d363684bd8399c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga39658fb13369db869d363684bd8399c0\"></a>\ntypedef mat&lt; 4, 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga39658fb13369db869d363684bd8399c0\">packed_lowp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga39658fb13369db869d363684bd8399c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga39658fb13369db869d363684bd8399c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30b0351eebc18c6056101359bdd3a359\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga30b0351eebc18c6056101359bdd3a359\"></a>\ntypedef mat&lt; 4, 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga30b0351eebc18c6056101359bdd3a359\">packed_lowp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga30b0351eebc18c6056101359bdd3a359\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga30b0351eebc18c6056101359bdd3a359\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0294d4c45151425c86a11deee7693c0e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0294d4c45151425c86a11deee7693c0e\"></a>\ntypedef mat&lt; 4, 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0294d4c45151425c86a11deee7693c0e\">packed_lowp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga0294d4c45151425c86a11deee7693c0e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0294d4c45151425c86a11deee7693c0e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga054050e9d4e78d81db0e6d1573b1c624\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga054050e9d4e78d81db0e6d1573b1c624\"></a>\ntypedef vec&lt; 1, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga054050e9d4e78d81db0e6d1573b1c624\">packed_lowp_dvec1</a></td></tr>\n<tr class=\"memdesc:ga054050e9d4e78d81db0e6d1573b1c624\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga054050e9d4e78d81db0e6d1573b1c624\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc19938ddb204bfcb4d9ef35b1e2bf93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadc19938ddb204bfcb4d9ef35b1e2bf93\"></a>\ntypedef vec&lt; 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadc19938ddb204bfcb4d9ef35b1e2bf93\">packed_lowp_dvec2</a></td></tr>\n<tr class=\"memdesc:gadc19938ddb204bfcb4d9ef35b1e2bf93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gadc19938ddb204bfcb4d9ef35b1e2bf93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9189210cabd6651a5e14a4c46fb20598\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9189210cabd6651a5e14a4c46fb20598\"></a>\ntypedef vec&lt; 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9189210cabd6651a5e14a4c46fb20598\">packed_lowp_dvec3</a></td></tr>\n<tr class=\"memdesc:ga9189210cabd6651a5e14a4c46fb20598\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9189210cabd6651a5e14a4c46fb20598\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga262dafd0c001c3a38d1cc91d024ca738\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga262dafd0c001c3a38d1cc91d024ca738\"></a>\ntypedef vec&lt; 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga262dafd0c001c3a38d1cc91d024ca738\">packed_lowp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga262dafd0c001c3a38d1cc91d024ca738\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga262dafd0c001c3a38d1cc91d024ca738\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf22b77f1cf3e73b8b1dddfe7f959357c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf22b77f1cf3e73b8b1dddfe7f959357c\"></a>\ntypedef vec&lt; 1, int, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf22b77f1cf3e73b8b1dddfe7f959357c\">packed_lowp_ivec1</a></td></tr>\n<tr class=\"memdesc:gaf22b77f1cf3e73b8b1dddfe7f959357c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaf22b77f1cf3e73b8b1dddfe7f959357c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52635859f5ef660ab999d22c11b7867f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga52635859f5ef660ab999d22c11b7867f\"></a>\ntypedef vec&lt; 2, int, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga52635859f5ef660ab999d22c11b7867f\">packed_lowp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga52635859f5ef660ab999d22c11b7867f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga52635859f5ef660ab999d22c11b7867f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga98c9d122a959e9f3ce10a5623c310f5d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga98c9d122a959e9f3ce10a5623c310f5d\"></a>\ntypedef vec&lt; 3, int, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga98c9d122a959e9f3ce10a5623c310f5d\">packed_lowp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga98c9d122a959e9f3ce10a5623c310f5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga98c9d122a959e9f3ce10a5623c310f5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga931731b8ae3b54c7ecc221509dae96bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga931731b8ae3b54c7ecc221509dae96bc\"></a>\ntypedef vec&lt; 4, int, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga931731b8ae3b54c7ecc221509dae96bc\">packed_lowp_ivec4</a></td></tr>\n<tr class=\"memdesc:ga931731b8ae3b54c7ecc221509dae96bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga931731b8ae3b54c7ecc221509dae96bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70dcb9ef0b24e832772a7405efa9669a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga70dcb9ef0b24e832772a7405efa9669a\"></a>\ntypedef mat&lt; 2, 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga70dcb9ef0b24e832772a7405efa9669a\">packed_lowp_mat2</a></td></tr>\n<tr class=\"memdesc:ga70dcb9ef0b24e832772a7405efa9669a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga70dcb9ef0b24e832772a7405efa9669a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac70667c7642ec8d50245e6e6936a3927\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac70667c7642ec8d50245e6e6936a3927\"></a>\ntypedef mat&lt; 2, 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac70667c7642ec8d50245e6e6936a3927\">packed_lowp_mat2x2</a></td></tr>\n<tr class=\"memdesc:gac70667c7642ec8d50245e6e6936a3927\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac70667c7642ec8d50245e6e6936a3927\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e7df5a11e1be27bc29a4c0d3956f234\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3e7df5a11e1be27bc29a4c0d3956f234\"></a>\ntypedef mat&lt; 2, 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3e7df5a11e1be27bc29a4c0d3956f234\">packed_lowp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga3e7df5a11e1be27bc29a4c0d3956f234\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3e7df5a11e1be27bc29a4c0d3956f234\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea9c555e669dc56c45d95dcc75d59bf3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaea9c555e669dc56c45d95dcc75d59bf3\"></a>\ntypedef mat&lt; 2, 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaea9c555e669dc56c45d95dcc75d59bf3\">packed_lowp_mat2x4</a></td></tr>\n<tr class=\"memdesc:gaea9c555e669dc56c45d95dcc75d59bf3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaea9c555e669dc56c45d95dcc75d59bf3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0d22400969dd223465b2900fecfb4f53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0d22400969dd223465b2900fecfb4f53\"></a>\ntypedef mat&lt; 3, 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0d22400969dd223465b2900fecfb4f53\">packed_lowp_mat3</a></td></tr>\n<tr class=\"memdesc:ga0d22400969dd223465b2900fecfb4f53\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0d22400969dd223465b2900fecfb4f53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga128cd52649621861635fab746df91735\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga128cd52649621861635fab746df91735\"></a>\ntypedef mat&lt; 3, 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga128cd52649621861635fab746df91735\">packed_lowp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga128cd52649621861635fab746df91735\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga128cd52649621861635fab746df91735\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5adf1802c5375a9dfb1729691bedd94e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5adf1802c5375a9dfb1729691bedd94e\"></a>\ntypedef mat&lt; 3, 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5adf1802c5375a9dfb1729691bedd94e\">packed_lowp_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga5adf1802c5375a9dfb1729691bedd94e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga5adf1802c5375a9dfb1729691bedd94e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92247ca09fa03c4013ba364f3a0fca7f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga92247ca09fa03c4013ba364f3a0fca7f\"></a>\ntypedef mat&lt; 3, 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga92247ca09fa03c4013ba364f3a0fca7f\">packed_lowp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga92247ca09fa03c4013ba364f3a0fca7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga92247ca09fa03c4013ba364f3a0fca7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a1dd2387725a335413d4c4fee8609c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2a1dd2387725a335413d4c4fee8609c4\"></a>\ntypedef mat&lt; 4, 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2a1dd2387725a335413d4c4fee8609c4\">packed_lowp_mat4</a></td></tr>\n<tr class=\"memdesc:ga2a1dd2387725a335413d4c4fee8609c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2a1dd2387725a335413d4c4fee8609c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f22607dcd090cd280071ccc689f4079\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8f22607dcd090cd280071ccc689f4079\"></a>\ntypedef mat&lt; 4, 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8f22607dcd090cd280071ccc689f4079\">packed_lowp_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga8f22607dcd090cd280071ccc689f4079\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8f22607dcd090cd280071ccc689f4079\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7661d759d6ad218e132e3d051e7b2c6c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7661d759d6ad218e132e3d051e7b2c6c\"></a>\ntypedef mat&lt; 4, 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7661d759d6ad218e132e3d051e7b2c6c\">packed_lowp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga7661d759d6ad218e132e3d051e7b2c6c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7661d759d6ad218e132e3d051e7b2c6c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga776f18d1a6e7d399f05d386167dc60f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga776f18d1a6e7d399f05d386167dc60f5\"></a>\ntypedef mat&lt; 4, 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga776f18d1a6e7d399f05d386167dc60f5\">packed_lowp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga776f18d1a6e7d399f05d386167dc60f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga776f18d1a6e7d399f05d386167dc60f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf111fed760ecce16cb1988807569bee5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf111fed760ecce16cb1988807569bee5\"></a>\ntypedef vec&lt; 1, uint, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf111fed760ecce16cb1988807569bee5\">packed_lowp_uvec1</a></td></tr>\n<tr class=\"memdesc:gaf111fed760ecce16cb1988807569bee5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gaf111fed760ecce16cb1988807569bee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga958210fe245a75b058325d367c951132\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga958210fe245a75b058325d367c951132\"></a>\ntypedef vec&lt; 2, uint, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga958210fe245a75b058325d367c951132\">packed_lowp_uvec2</a></td></tr>\n<tr class=\"memdesc:ga958210fe245a75b058325d367c951132\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga958210fe245a75b058325d367c951132\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga576a3f8372197a56a79dee1c8280f485\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga576a3f8372197a56a79dee1c8280f485\"></a>\ntypedef vec&lt; 3, uint, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga576a3f8372197a56a79dee1c8280f485\">packed_lowp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga576a3f8372197a56a79dee1c8280f485\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga576a3f8372197a56a79dee1c8280f485\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafdd97922b4a2a42cd0c99a13877ff4da\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafdd97922b4a2a42cd0c99a13877ff4da\"></a>\ntypedef vec&lt; 4, uint, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gafdd97922b4a2a42cd0c99a13877ff4da\">packed_lowp_uvec4</a></td></tr>\n<tr class=\"memdesc:gafdd97922b4a2a42cd0c99a13877ff4da\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gafdd97922b4a2a42cd0c99a13877ff4da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0a6198fe64166a6a61084d43c71518a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0a6198fe64166a6a61084d43c71518a9\"></a>\ntypedef vec&lt; 1, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0a6198fe64166a6a61084d43c71518a9\">packed_lowp_vec1</a></td></tr>\n<tr class=\"memdesc:ga0a6198fe64166a6a61084d43c71518a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0a6198fe64166a6a61084d43c71518a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafbf1c2cce307c5594b165819ed83bf5d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafbf1c2cce307c5594b165819ed83bf5d\"></a>\ntypedef vec&lt; 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gafbf1c2cce307c5594b165819ed83bf5d\">packed_lowp_vec2</a></td></tr>\n<tr class=\"memdesc:gafbf1c2cce307c5594b165819ed83bf5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gafbf1c2cce307c5594b165819ed83bf5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a30c137c1f8cce478c28eab0427a570\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3a30c137c1f8cce478c28eab0427a570\"></a>\ntypedef vec&lt; 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3a30c137c1f8cce478c28eab0427a570\">packed_lowp_vec3</a></td></tr>\n<tr class=\"memdesc:ga3a30c137c1f8cce478c28eab0427a570\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3a30c137c1f8cce478c28eab0427a570\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3cc94fb8de80bbd8a4aa7a5b206d304a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3cc94fb8de80bbd8a4aa7a5b206d304a\"></a>\ntypedef vec&lt; 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3cc94fb8de80bbd8a4aa7a5b206d304a\">packed_lowp_vec4</a></td></tr>\n<tr class=\"memdesc:ga3cc94fb8de80bbd8a4aa7a5b206d304a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3cc94fb8de80bbd8a4aa7a5b206d304a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd019b43fcf42e1590d45dddaa504a1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadd019b43fcf42e1590d45dddaa504a1a\"></a>\ntypedef packed_highp_mat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadd019b43fcf42e1590d45dddaa504a1a\">packed_mat2</a></td></tr>\n<tr class=\"memdesc:gadd019b43fcf42e1590d45dddaa504a1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadd019b43fcf42e1590d45dddaa504a1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga51eaadcdc292c8750f746a5dc3e6c517\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga51eaadcdc292c8750f746a5dc3e6c517\"></a>\ntypedef packed_highp_mat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517\">packed_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga51eaadcdc292c8750f746a5dc3e6c517\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga51eaadcdc292c8750f746a5dc3e6c517\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga301b76a89b8a9625501ca58815017f20\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga301b76a89b8a9625501ca58815017f20\"></a>\ntypedef packed_highp_mat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga301b76a89b8a9625501ca58815017f20\">packed_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga301b76a89b8a9625501ca58815017f20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga301b76a89b8a9625501ca58815017f20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac401da1dd9177ad81d7618a2a5541e23\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac401da1dd9177ad81d7618a2a5541e23\"></a>\ntypedef packed_highp_mat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac401da1dd9177ad81d7618a2a5541e23\">packed_mat2x4</a></td></tr>\n<tr class=\"memdesc:gac401da1dd9177ad81d7618a2a5541e23\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gac401da1dd9177ad81d7618a2a5541e23\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bc12b0ab7be8448836711b77cc7b83a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9bc12b0ab7be8448836711b77cc7b83a\"></a>\ntypedef packed_highp_mat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a\">packed_mat3</a></td></tr>\n<tr class=\"memdesc:ga9bc12b0ab7be8448836711b77cc7b83a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga9bc12b0ab7be8448836711b77cc7b83a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga134f0d99fbd2459c13cd9ebd056509fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga134f0d99fbd2459c13cd9ebd056509fa\"></a>\ntypedef packed_highp_mat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa\">packed_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga134f0d99fbd2459c13cd9ebd056509fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga134f0d99fbd2459c13cd9ebd056509fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6c1dbe8cde9fbb231284b01f8aeaaa99\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6c1dbe8cde9fbb231284b01f8aeaaa99\"></a>\ntypedef packed_highp_mat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99\">packed_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga6c1dbe8cde9fbb231284b01f8aeaaa99\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga6c1dbe8cde9fbb231284b01f8aeaaa99\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad63515526cccfe88ffa8fe5ed64f95f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad63515526cccfe88ffa8fe5ed64f95f8\"></a>\ntypedef packed_highp_mat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8\">packed_mat3x4</a></td></tr>\n<tr class=\"memdesc:gad63515526cccfe88ffa8fe5ed64f95f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gad63515526cccfe88ffa8fe5ed64f95f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c139854e5b04cf08a957dee3b510441\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2c139854e5b04cf08a957dee3b510441\"></a>\ntypedef packed_highp_mat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2c139854e5b04cf08a957dee3b510441\">packed_mat4</a></td></tr>\n<tr class=\"memdesc:ga2c139854e5b04cf08a957dee3b510441\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga2c139854e5b04cf08a957dee3b510441\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga379c1153f1339bdeaefd592bebf538e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga379c1153f1339bdeaefd592bebf538e8\"></a>\ntypedef packed_highp_mat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga379c1153f1339bdeaefd592bebf538e8\">packed_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga379c1153f1339bdeaefd592bebf538e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga379c1153f1339bdeaefd592bebf538e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab286466e19f7399c8d25089da9400d43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab286466e19f7399c8d25089da9400d43\"></a>\ntypedef packed_highp_mat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab286466e19f7399c8d25089da9400d43\">packed_mat4x3</a></td></tr>\n<tr class=\"memdesc:gab286466e19f7399c8d25089da9400d43\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gab286466e19f7399c8d25089da9400d43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga67e7102557d6067bb6ac00d4ad0e1374\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga67e7102557d6067bb6ac00d4ad0e1374\"></a>\ntypedef packed_highp_mat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374\">packed_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga67e7102557d6067bb6ac00d4ad0e1374\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga67e7102557d6067bb6ac00d4ad0e1374\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5546d828d63010a8f9cf81161ad0275a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5546d828d63010a8f9cf81161ad0275a\"></a>\ntypedef vec&lt; 1, bool, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5546d828d63010a8f9cf81161ad0275a\">packed_mediump_bvec1</a></td></tr>\n<tr class=\"memdesc:ga5546d828d63010a8f9cf81161ad0275a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga5546d828d63010a8f9cf81161ad0275a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4c6414a59539e66a242ad4cf4b476b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab4c6414a59539e66a242ad4cf4b476b4\"></a>\ntypedef vec&lt; 2, bool, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab4c6414a59539e66a242ad4cf4b476b4\">packed_mediump_bvec2</a></td></tr>\n<tr class=\"memdesc:gab4c6414a59539e66a242ad4cf4b476b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gab4c6414a59539e66a242ad4cf4b476b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70147763edff3fe96b03a0b98d6339a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga70147763edff3fe96b03a0b98d6339a2\"></a>\ntypedef vec&lt; 3, bool, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga70147763edff3fe96b03a0b98d6339a2\">packed_mediump_bvec3</a></td></tr>\n<tr class=\"memdesc:ga70147763edff3fe96b03a0b98d6339a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga70147763edff3fe96b03a0b98d6339a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b1620f259595b9da47a6374fc44588a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7b1620f259595b9da47a6374fc44588a\"></a>\ntypedef vec&lt; 4, bool, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7b1620f259595b9da47a6374fc44588a\">packed_mediump_bvec4</a></td></tr>\n<tr class=\"memdesc:ga7b1620f259595b9da47a6374fc44588a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga7b1620f259595b9da47a6374fc44588a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9d60e32d3fcb51f817046cd881fdbf57\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9d60e32d3fcb51f817046cd881fdbf57\"></a>\ntypedef mat&lt; 2, 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9d60e32d3fcb51f817046cd881fdbf57\">packed_mediump_dmat2</a></td></tr>\n<tr class=\"memdesc:ga9d60e32d3fcb51f817046cd881fdbf57\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9d60e32d3fcb51f817046cd881fdbf57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39e8bb9b70e5694964e8266a21ba534e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga39e8bb9b70e5694964e8266a21ba534e\"></a>\ntypedef mat&lt; 2, 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga39e8bb9b70e5694964e8266a21ba534e\">packed_mediump_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga39e8bb9b70e5694964e8266a21ba534e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga39e8bb9b70e5694964e8266a21ba534e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8897c6d9adb4140b1c3b0a07b8f0a430\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8897c6d9adb4140b1c3b0a07b8f0a430\"></a>\ntypedef mat&lt; 2, 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8897c6d9adb4140b1c3b0a07b8f0a430\">packed_mediump_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga8897c6d9adb4140b1c3b0a07b8f0a430\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8897c6d9adb4140b1c3b0a07b8f0a430\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa4126969c765e7faa2ebf6951c22ffb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaa4126969c765e7faa2ebf6951c22ffb\"></a>\ntypedef mat&lt; 2, 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaa4126969c765e7faa2ebf6951c22ffb\">packed_mediump_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gaaa4126969c765e7faa2ebf6951c22ffb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaaa4126969c765e7faa2ebf6951c22ffb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf969eb879c76a5f4576e4a1e10095cf6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf969eb879c76a5f4576e4a1e10095cf6\"></a>\ntypedef mat&lt; 3, 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf969eb879c76a5f4576e4a1e10095cf6\">packed_mediump_dmat3</a></td></tr>\n<tr class=\"memdesc:gaf969eb879c76a5f4576e4a1e10095cf6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf969eb879c76a5f4576e4a1e10095cf6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga86efe91cdaa2864c828a5d6d46356c6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga86efe91cdaa2864c828a5d6d46356c6a\"></a>\ntypedef mat&lt; 3, 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga86efe91cdaa2864c828a5d6d46356c6a\">packed_mediump_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga86efe91cdaa2864c828a5d6d46356c6a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga86efe91cdaa2864c828a5d6d46356c6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf85877d38d8cfbc21d59d939afd72375\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf85877d38d8cfbc21d59d939afd72375\"></a>\ntypedef mat&lt; 3, 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf85877d38d8cfbc21d59d939afd72375\">packed_mediump_dmat3x3</a></td></tr>\n<tr class=\"memdesc:gaf85877d38d8cfbc21d59d939afd72375\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf85877d38d8cfbc21d59d939afd72375\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad5dcaf93df267bc3029174e430e0907f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad5dcaf93df267bc3029174e430e0907f\"></a>\ntypedef mat&lt; 3, 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad5dcaf93df267bc3029174e430e0907f\">packed_mediump_dmat3x4</a></td></tr>\n<tr class=\"memdesc:gad5dcaf93df267bc3029174e430e0907f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad5dcaf93df267bc3029174e430e0907f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b0ee7996651ddd04eaa0c4cdbb66332\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4b0ee7996651ddd04eaa0c4cdbb66332\"></a>\ntypedef mat&lt; 4, 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4b0ee7996651ddd04eaa0c4cdbb66332\">packed_mediump_dmat4</a></td></tr>\n<tr class=\"memdesc:ga4b0ee7996651ddd04eaa0c4cdbb66332\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4b0ee7996651ddd04eaa0c4cdbb66332\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a15514a0631f700de6312b9d5db3a73\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9a15514a0631f700de6312b9d5db3a73\"></a>\ntypedef mat&lt; 4, 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9a15514a0631f700de6312b9d5db3a73\">packed_mediump_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga9a15514a0631f700de6312b9d5db3a73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9a15514a0631f700de6312b9d5db3a73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab5b36cc9caee1bb1c5178fe191bf5713\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab5b36cc9caee1bb1c5178fe191bf5713\"></a>\ntypedef mat&lt; 4, 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab5b36cc9caee1bb1c5178fe191bf5713\">packed_mediump_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gab5b36cc9caee1bb1c5178fe191bf5713\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab5b36cc9caee1bb1c5178fe191bf5713\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga21e86cf2f6c126bacf31b8985db06bd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga21e86cf2f6c126bacf31b8985db06bd4\"></a>\ntypedef mat&lt; 4, 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga21e86cf2f6c126bacf31b8985db06bd4\">packed_mediump_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga21e86cf2f6c126bacf31b8985db06bd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga21e86cf2f6c126bacf31b8985db06bd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8920e90ea9c01d9c97e604a938ce2cbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8920e90ea9c01d9c97e604a938ce2cbd\"></a>\ntypedef vec&lt; 1, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8920e90ea9c01d9c97e604a938ce2cbd\">packed_mediump_dvec1</a></td></tr>\n<tr class=\"memdesc:ga8920e90ea9c01d9c97e604a938ce2cbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8920e90ea9c01d9c97e604a938ce2cbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c754a783b6fcf80374c013371c4dae9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0c754a783b6fcf80374c013371c4dae9\"></a>\ntypedef vec&lt; 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0c754a783b6fcf80374c013371c4dae9\">packed_mediump_dvec2</a></td></tr>\n<tr class=\"memdesc:ga0c754a783b6fcf80374c013371c4dae9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0c754a783b6fcf80374c013371c4dae9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f18ada6f7cdd8c46db33ba987280fc4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1f18ada6f7cdd8c46db33ba987280fc4\"></a>\ntypedef vec&lt; 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1f18ada6f7cdd8c46db33ba987280fc4\">packed_mediump_dvec3</a></td></tr>\n<tr class=\"memdesc:ga1f18ada6f7cdd8c46db33ba987280fc4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga1f18ada6f7cdd8c46db33ba987280fc4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga568b850f1116b667043533cf77826968\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga568b850f1116b667043533cf77826968\"></a>\ntypedef vec&lt; 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga568b850f1116b667043533cf77826968\">packed_mediump_dvec4</a></td></tr>\n<tr class=\"memdesc:ga568b850f1116b667043533cf77826968\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga568b850f1116b667043533cf77826968\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09507ef020a49517a7bcd50438f05056\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga09507ef020a49517a7bcd50438f05056\"></a>\ntypedef vec&lt; 1, int, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga09507ef020a49517a7bcd50438f05056\">packed_mediump_ivec1</a></td></tr>\n<tr class=\"memdesc:ga09507ef020a49517a7bcd50438f05056\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga09507ef020a49517a7bcd50438f05056\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa891048dddef4627df33809ec726219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaa891048dddef4627df33809ec726219\"></a>\ntypedef vec&lt; 2, int, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaa891048dddef4627df33809ec726219\">packed_mediump_ivec2</a></td></tr>\n<tr class=\"memdesc:gaaa891048dddef4627df33809ec726219\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaaa891048dddef4627df33809ec726219\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga06f26d54dca30994eb1fdadb8e69f4a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga06f26d54dca30994eb1fdadb8e69f4a2\"></a>\ntypedef vec&lt; 3, int, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga06f26d54dca30994eb1fdadb8e69f4a2\">packed_mediump_ivec3</a></td></tr>\n<tr class=\"memdesc:ga06f26d54dca30994eb1fdadb8e69f4a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga06f26d54dca30994eb1fdadb8e69f4a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70130dc8ed9c966ec2a221ce586d45d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga70130dc8ed9c966ec2a221ce586d45d8\"></a>\ntypedef vec&lt; 4, int, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga70130dc8ed9c966ec2a221ce586d45d8\">packed_mediump_ivec4</a></td></tr>\n<tr class=\"memdesc:ga70130dc8ed9c966ec2a221ce586d45d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga70130dc8ed9c966ec2a221ce586d45d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43cd36d430c5187bfdca34a23cb41581\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga43cd36d430c5187bfdca34a23cb41581\"></a>\ntypedef mat&lt; 2, 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga43cd36d430c5187bfdca34a23cb41581\">packed_mediump_mat2</a></td></tr>\n<tr class=\"memdesc:ga43cd36d430c5187bfdca34a23cb41581\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga43cd36d430c5187bfdca34a23cb41581\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2d2a73e662759e301c22b8931ff6a526\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2d2a73e662759e301c22b8931ff6a526\"></a>\ntypedef mat&lt; 2, 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2d2a73e662759e301c22b8931ff6a526\">packed_mediump_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga2d2a73e662759e301c22b8931ff6a526\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2d2a73e662759e301c22b8931ff6a526\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99049db01faf1e95ed9fb875a47dffe2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga99049db01faf1e95ed9fb875a47dffe2\"></a>\ntypedef mat&lt; 2, 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga99049db01faf1e95ed9fb875a47dffe2\">packed_mediump_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga99049db01faf1e95ed9fb875a47dffe2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga99049db01faf1e95ed9fb875a47dffe2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad43a240533f388ce0504b495d9df3d52\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad43a240533f388ce0504b495d9df3d52\"></a>\ntypedef mat&lt; 2, 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad43a240533f388ce0504b495d9df3d52\">packed_mediump_mat2x4</a></td></tr>\n<tr class=\"memdesc:gad43a240533f388ce0504b495d9df3d52\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad43a240533f388ce0504b495d9df3d52\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13a75c6cbd0a411f694bc82486cd1e55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga13a75c6cbd0a411f694bc82486cd1e55\"></a>\ntypedef mat&lt; 3, 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga13a75c6cbd0a411f694bc82486cd1e55\">packed_mediump_mat3</a></td></tr>\n<tr class=\"memdesc:ga13a75c6cbd0a411f694bc82486cd1e55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga13a75c6cbd0a411f694bc82486cd1e55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04cfaf1421284df3c24ea0985dab24e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga04cfaf1421284df3c24ea0985dab24e7\"></a>\ntypedef mat&lt; 3, 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga04cfaf1421284df3c24ea0985dab24e7\">packed_mediump_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga04cfaf1421284df3c24ea0985dab24e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga04cfaf1421284df3c24ea0985dab24e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa9cea174d342dd9650e3436823cab23\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaa9cea174d342dd9650e3436823cab23\"></a>\ntypedef mat&lt; 3, 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaa9cea174d342dd9650e3436823cab23\">packed_mediump_mat3x3</a></td></tr>\n<tr class=\"memdesc:gaaa9cea174d342dd9650e3436823cab23\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaaa9cea174d342dd9650e3436823cab23\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc93a9560593bd32e099c908531305f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabc93a9560593bd32e099c908531305f5\"></a>\ntypedef mat&lt; 3, 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabc93a9560593bd32e099c908531305f5\">packed_mediump_mat3x4</a></td></tr>\n<tr class=\"memdesc:gabc93a9560593bd32e099c908531305f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gabc93a9560593bd32e099c908531305f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae89d72ffc149147f61df701bbc8755bf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae89d72ffc149147f61df701bbc8755bf\"></a>\ntypedef mat&lt; 4, 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae89d72ffc149147f61df701bbc8755bf\">packed_mediump_mat4</a></td></tr>\n<tr class=\"memdesc:gae89d72ffc149147f61df701bbc8755bf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae89d72ffc149147f61df701bbc8755bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa458f9d9e0934bae3097e2a373b24707\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa458f9d9e0934bae3097e2a373b24707\"></a>\ntypedef mat&lt; 4, 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa458f9d9e0934bae3097e2a373b24707\">packed_mediump_mat4x2</a></td></tr>\n<tr class=\"memdesc:gaa458f9d9e0934bae3097e2a373b24707\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa458f9d9e0934bae3097e2a373b24707\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga02ca6255394aa778abaeb0f733c4d2b6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga02ca6255394aa778abaeb0f733c4d2b6\"></a>\ntypedef mat&lt; 4, 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga02ca6255394aa778abaeb0f733c4d2b6\">packed_mediump_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga02ca6255394aa778abaeb0f733c4d2b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga02ca6255394aa778abaeb0f733c4d2b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf304f64c06743c1571401504d3f50259\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf304f64c06743c1571401504d3f50259\"></a>\ntypedef mat&lt; 4, 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf304f64c06743c1571401504d3f50259\">packed_mediump_mat4x4</a></td></tr>\n<tr class=\"memdesc:gaf304f64c06743c1571401504d3f50259\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf304f64c06743c1571401504d3f50259\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c29fb42bab9a4f9b66bc60b2e514a34\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2c29fb42bab9a4f9b66bc60b2e514a34\"></a>\ntypedef vec&lt; 1, uint, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2c29fb42bab9a4f9b66bc60b2e514a34\">packed_mediump_uvec1</a></td></tr>\n<tr class=\"memdesc:ga2c29fb42bab9a4f9b66bc60b2e514a34\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga2c29fb42bab9a4f9b66bc60b2e514a34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1f95690a78dc12e39da32943243aeef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa1f95690a78dc12e39da32943243aeef\"></a>\ntypedef vec&lt; 2, uint, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa1f95690a78dc12e39da32943243aeef\">packed_mediump_uvec2</a></td></tr>\n<tr class=\"memdesc:gaa1f95690a78dc12e39da32943243aeef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gaa1f95690a78dc12e39da32943243aeef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ea2bbdbcb0a69242f6d884663c1b0ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1ea2bbdbcb0a69242f6d884663c1b0ab\"></a>\ntypedef vec&lt; 3, uint, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1ea2bbdbcb0a69242f6d884663c1b0ab\">packed_mediump_uvec3</a></td></tr>\n<tr class=\"memdesc:ga1ea2bbdbcb0a69242f6d884663c1b0ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga1ea2bbdbcb0a69242f6d884663c1b0ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63a73be86a4f07ea7a7499ab0bfebe45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga63a73be86a4f07ea7a7499ab0bfebe45\"></a>\ntypedef vec&lt; 4, uint, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga63a73be86a4f07ea7a7499ab0bfebe45\">packed_mediump_uvec4</a></td></tr>\n<tr class=\"memdesc:ga63a73be86a4f07ea7a7499ab0bfebe45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga63a73be86a4f07ea7a7499ab0bfebe45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga71d63cead1e113fca0bcdaaa33aad050\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga71d63cead1e113fca0bcdaaa33aad050\"></a>\ntypedef vec&lt; 1, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga71d63cead1e113fca0bcdaaa33aad050\">packed_mediump_vec1</a></td></tr>\n<tr class=\"memdesc:ga71d63cead1e113fca0bcdaaa33aad050\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga71d63cead1e113fca0bcdaaa33aad050\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6844c6f4691d1bf67673240850430948\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6844c6f4691d1bf67673240850430948\"></a>\ntypedef vec&lt; 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6844c6f4691d1bf67673240850430948\">packed_mediump_vec2</a></td></tr>\n<tr class=\"memdesc:ga6844c6f4691d1bf67673240850430948\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6844c6f4691d1bf67673240850430948\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0eb771b708c5b2205d9b14dd1434fd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0eb771b708c5b2205d9b14dd1434fd8\"></a>\ntypedef vec&lt; 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab0eb771b708c5b2205d9b14dd1434fd8\">packed_mediump_vec3</a></td></tr>\n<tr class=\"memdesc:gab0eb771b708c5b2205d9b14dd1434fd8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab0eb771b708c5b2205d9b14dd1434fd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga68c9bb24f387b312bae6a0a68e74d95e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga68c9bb24f387b312bae6a0a68e74d95e\"></a>\ntypedef vec&lt; 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga68c9bb24f387b312bae6a0a68e74d95e\">packed_mediump_vec4</a></td></tr>\n<tr class=\"memdesc:ga68c9bb24f387b312bae6a0a68e74d95e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga68c9bb24f387b312bae6a0a68e74d95e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5621493caac01bdd22ab6be4416b0314\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5621493caac01bdd22ab6be4416b0314\"></a>\ntypedef packed_highp_uvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5621493caac01bdd22ab6be4416b0314\">packed_uvec1</a></td></tr>\n<tr class=\"memdesc:ga5621493caac01bdd22ab6be4416b0314\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga5621493caac01bdd22ab6be4416b0314\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabcc33efb4d5e83b8fe4706360e75b932\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabcc33efb4d5e83b8fe4706360e75b932\"></a>\ntypedef packed_highp_uvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabcc33efb4d5e83b8fe4706360e75b932\">packed_uvec2</a></td></tr>\n<tr class=\"memdesc:gabcc33efb4d5e83b8fe4706360e75b932\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gabcc33efb4d5e83b8fe4706360e75b932\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab96804e99e3a72a35740fec690c79617\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab96804e99e3a72a35740fec690c79617\"></a>\ntypedef packed_highp_uvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab96804e99e3a72a35740fec690c79617\">packed_uvec3</a></td></tr>\n<tr class=\"memdesc:gab96804e99e3a72a35740fec690c79617\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gab96804e99e3a72a35740fec690c79617\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"></a>\ntypedef packed_highp_uvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8e5d92e84ebdbe2480cf96bc17d6e2f2\">packed_uvec4</a></td></tr>\n<tr class=\"memdesc:ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14741e3d9da9ae83765389927f837331\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga14741e3d9da9ae83765389927f837331\"></a>\ntypedef packed_highp_vec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga14741e3d9da9ae83765389927f837331\">packed_vec1</a></td></tr>\n<tr class=\"memdesc:ga14741e3d9da9ae83765389927f837331\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga14741e3d9da9ae83765389927f837331\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3254defa5a8f0ae4b02b45fedba84a66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3254defa5a8f0ae4b02b45fedba84a66\"></a>\ntypedef packed_highp_vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66\">packed_vec2</a></td></tr>\n<tr class=\"memdesc:ga3254defa5a8f0ae4b02b45fedba84a66\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga3254defa5a8f0ae4b02b45fedba84a66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaccccd090e185450caa28b5b63ad4e8f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaccccd090e185450caa28b5b63ad4e8f0\"></a>\ntypedef packed_highp_vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaccccd090e185450caa28b5b63ad4e8f0\">packed_vec3</a></td></tr>\n<tr class=\"memdesc:gaccccd090e185450caa28b5b63ad4e8f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaccccd090e185450caa28b5b63ad4e8f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga37a0e0bf653169b581c5eea3d547fa5d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga37a0e0bf653169b581c5eea3d547fa5d\"></a>\ntypedef packed_highp_vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d\">packed_vec4</a></td></tr>\n<tr class=\"memdesc:ga37a0e0bf653169b581c5eea3d547fa5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga37a0e0bf653169b581c5eea3d547fa5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00303.html\">GLM_GTC_type_aligned</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00161_source.html\">gtc/type_aligned.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00161_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_aligned.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtc/type_aligned.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00161.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#if (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE)</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#       error &quot;GLM: Aligned gentypes require to enable C++ language extensions. Define GLM_FORCE_ALIGNED_GENTYPES before including GLM headers to use aligned types.&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\"># pragma message(&quot;GLM: GLM_GTC_type_aligned extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#include &quot;../vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"comment\">// -- *vec1 --</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga4d0bd70d5fac49b800546d608b707513\">   45</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, aligned_highp&gt;    <a class=\"code\" href=\"a00303.html#ga4d0bd70d5fac49b800546d608b707513\">aligned_highp_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6b797eec76fa471e300158f3453b3b2e\">   48</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, aligned_mediump&gt;  <a class=\"code\" href=\"a00303.html#ga6b797eec76fa471e300158f3453b3b2e\">aligned_mediump_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab34aee3d5e121c543fea11d2c50ecc43\">   51</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, aligned_lowp&gt;             <a class=\"code\" href=\"a00303.html#gab34aee3d5e121c543fea11d2c50ecc43\">aligned_lowp_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf0448b0f7ceb8273f7eda3a92205eefc\">   54</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, aligned_highp&gt;   <a class=\"code\" href=\"a00303.html#gaf0448b0f7ceb8273f7eda3a92205eefc\">aligned_highp_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7180b685c581adb224406a7f831608e3\">   57</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, aligned_mediump&gt; <a class=\"code\" href=\"a00303.html#ga7180b685c581adb224406a7f831608e3\">aligned_mediump_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7f8a2cc5a686e52b1615761f4978ca62\">   60</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, aligned_lowp&gt;    <a class=\"code\" href=\"a00303.html#ga7f8a2cc5a686e52b1615761f4978ca62\">aligned_lowp_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad63b8c5b4dc0500d54d7414ef555178f\">   63</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, aligned_highp&gt;              <a class=\"code\" href=\"a00303.html#gad63b8c5b4dc0500d54d7414ef555178f\">aligned_highp_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga20e63dd980b81af10cadbbe219316650\">   66</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, aligned_mediump&gt;    <a class=\"code\" href=\"a00303.html#ga20e63dd980b81af10cadbbe219316650\">aligned_mediump_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga1101d3a82b2e3f5f8828bd8f3adab3e1\">   69</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, aligned_lowp&gt;               <a class=\"code\" href=\"a00303.html#ga1101d3a82b2e3f5f8828bd8f3adab3e1\">aligned_lowp_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5b80e28396c6ef7d32c6fd18df498451\">   72</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, uint, aligned_highp&gt;             <a class=\"code\" href=\"a00303.html#ga5b80e28396c6ef7d32c6fd18df498451\">aligned_highp_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gacb78126ea2eb779b41c7511128ff1283\">   75</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, uint, aligned_mediump&gt;   <a class=\"code\" href=\"a00303.html#gacb78126ea2eb779b41c7511128ff1283\">aligned_mediump_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad09b93acc43c43423408d17a64f6d7ca\">   78</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, uint, aligned_lowp&gt;              <a class=\"code\" href=\"a00303.html#gad09b93acc43c43423408d17a64f6d7ca\">aligned_lowp_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga862843a45b01c35ffe4d44c47ea774ad\">   81</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, aligned_highp&gt;             <a class=\"code\" href=\"a00303.html#ga862843a45b01c35ffe4d44c47ea774ad\">aligned_highp_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gadd3b8bd71a758f7fb0da8e525156f34e\">   84</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, aligned_mediump&gt;   <a class=\"code\" href=\"a00303.html#gadd3b8bd71a758f7fb0da8e525156f34e\">aligned_mediump_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac6036449ab1c4abf8efe1ea00fcdd1c9\">   87</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, aligned_lowp&gt;              <a class=\"code\" href=\"a00303.html#gac6036449ab1c4abf8efe1ea00fcdd1c9\">aligned_lowp_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga56473759d2702ee19ab7f91d0017fa70\">   90</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, packed_highp&gt;             <a class=\"code\" href=\"a00303.html#ga56473759d2702ee19ab7f91d0017fa70\">packed_highp_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga71d63cead1e113fca0bcdaaa33aad050\">   93</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, packed_mediump&gt;   <a class=\"code\" href=\"a00303.html#ga71d63cead1e113fca0bcdaaa33aad050\">packed_mediump_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0a6198fe64166a6a61084d43c71518a9\">   96</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, packed_lowp&gt;              <a class=\"code\" href=\"a00303.html#ga0a6198fe64166a6a61084d43c71518a9\">packed_lowp_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab472b2d917b5e6efd76e8c7dbfbbf9f1\">   99</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, packed_highp&gt;    <a class=\"code\" href=\"a00303.html#gab472b2d917b5e6efd76e8c7dbfbbf9f1\">packed_highp_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8920e90ea9c01d9c97e604a938ce2cbd\">  102</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, packed_mediump&gt;  <a class=\"code\" href=\"a00303.html#ga8920e90ea9c01d9c97e604a938ce2cbd\">packed_mediump_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga054050e9d4e78d81db0e6d1573b1c624\">  105</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, packed_lowp&gt;             <a class=\"code\" href=\"a00303.html#ga054050e9d4e78d81db0e6d1573b1c624\">packed_lowp_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7245acc887a5438f46fd85fdf076bb3b\">  108</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, packed_highp&gt;               <a class=\"code\" href=\"a00303.html#ga7245acc887a5438f46fd85fdf076bb3b\">packed_highp_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga09507ef020a49517a7bcd50438f05056\">  111</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, packed_mediump&gt;             <a class=\"code\" href=\"a00303.html#ga09507ef020a49517a7bcd50438f05056\">packed_mediump_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf22b77f1cf3e73b8b1dddfe7f959357c\">  114</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, packed_lowp&gt;                <a class=\"code\" href=\"a00303.html#gaf22b77f1cf3e73b8b1dddfe7f959357c\">packed_lowp_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8c32b53f628a3616aa5061e58d66fe74\">  117</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, uint, packed_highp&gt;              <a class=\"code\" href=\"a00303.html#ga8c32b53f628a3616aa5061e58d66fe74\">packed_highp_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2c29fb42bab9a4f9b66bc60b2e514a34\">  120</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, uint, packed_mediump&gt;    <a class=\"code\" href=\"a00303.html#ga2c29fb42bab9a4f9b66bc60b2e514a34\">packed_mediump_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf111fed760ecce16cb1988807569bee5\">  123</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, uint, packed_lowp&gt;               <a class=\"code\" href=\"a00303.html#gaf111fed760ecce16cb1988807569bee5\">packed_lowp_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga439e97795314b81cd15abd4e5c2e6e7a\">  126</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, packed_highp&gt;              <a class=\"code\" href=\"a00303.html#ga439e97795314b81cd15abd4e5c2e6e7a\">packed_highp_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5546d828d63010a8f9cf81161ad0275a\">  129</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, packed_mediump&gt;    <a class=\"code\" href=\"a00303.html#ga5546d828d63010a8f9cf81161ad0275a\">packed_mediump_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae3c8750f53259ece334d3aa3b3649a40\">  132</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, packed_lowp&gt;               <a class=\"code\" href=\"a00303.html#gae3c8750f53259ece334d3aa3b3649a40\">packed_lowp_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        <span class=\"comment\">// -- *vec2 --</span></div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac9f8482dde741fb6bab7248b81a45465\">  137</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, aligned_highp&gt;    <a class=\"code\" href=\"a00303.html#gac9f8482dde741fb6bab7248b81a45465\">aligned_highp_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga026a55ddbf2bafb1432f1157a2708616\">  140</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, aligned_mediump&gt;  <a class=\"code\" href=\"a00303.html#ga026a55ddbf2bafb1432f1157a2708616\">aligned_mediump_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga53ac5d252317f1fa43c2ef921857bf13\">  143</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, aligned_lowp&gt;             <a class=\"code\" href=\"a00303.html#ga53ac5d252317f1fa43c2ef921857bf13\">aligned_lowp_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab173a333e6b7ce153ceba66ac4a321cf\">  146</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, aligned_highp&gt;   <a class=\"code\" href=\"a00303.html#gab173a333e6b7ce153ceba66ac4a321cf\">aligned_highp_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9af1eabe22f569e70d9893be72eda0f5\">  149</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, aligned_mediump&gt; <a class=\"code\" href=\"a00303.html#ga9af1eabe22f569e70d9893be72eda0f5\">aligned_mediump_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0e37cff4a43cca866101f0a35f01db6d\">  152</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, aligned_lowp&gt;    <a class=\"code\" href=\"a00303.html#ga0e37cff4a43cca866101f0a35f01db6d\">aligned_lowp_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga41563650f36cb7f479e080de21e08418\">  155</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, aligned_highp&gt;              <a class=\"code\" href=\"a00303.html#ga41563650f36cb7f479e080de21e08418\">aligned_highp_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaea13d89d49daca2c796aeaa82fc2c2f2\">  158</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, aligned_mediump&gt;    <a class=\"code\" href=\"a00303.html#gaea13d89d49daca2c796aeaa82fc2c2f2\">aligned_mediump_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga44c4accad582cfbd7226a19b83b0cadc\">  161</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, aligned_lowp&gt;               <a class=\"code\" href=\"a00303.html#ga44c4accad582cfbd7226a19b83b0cadc\">aligned_lowp_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga04db692662a4908beeaf5a5ba6e19483\">  164</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, uint, aligned_highp&gt;             <a class=\"code\" href=\"a00303.html#ga04db692662a4908beeaf5a5ba6e19483\">aligned_highp_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga081d53e0a71443d0b68ea61c870f9adc\">  167</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, uint, aligned_mediump&gt;   <a class=\"code\" href=\"a00303.html#ga081d53e0a71443d0b68ea61c870f9adc\">aligned_mediump_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6f94fcd28dde906fc6cad5f742b55c1a\">  170</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, uint, aligned_lowp&gt;              <a class=\"code\" href=\"a00303.html#ga6f94fcd28dde906fc6cad5f742b55c1a\">aligned_lowp_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0731b593c5e33559954c80f8687e76c6\">  173</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, aligned_highp&gt;             <a class=\"code\" href=\"a00303.html#ga0731b593c5e33559954c80f8687e76c6\">aligned_highp_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gacb183eb5e67ec0d0ea5a016cba962810\">  176</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, aligned_mediump&gt;   <a class=\"code\" href=\"a00303.html#gacb183eb5e67ec0d0ea5a016cba962810\">aligned_mediump_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga59fadcd3835646e419372ae8b43c5d37\">  179</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, aligned_lowp&gt;              <a class=\"code\" href=\"a00303.html#ga59fadcd3835646e419372ae8b43c5d37\">aligned_lowp_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6b8b9475e7c3b16aed13edbc460bbc4d\">  182</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, packed_highp&gt;             <a class=\"code\" href=\"a00303.html#ga6b8b9475e7c3b16aed13edbc460bbc4d\">packed_highp_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6844c6f4691d1bf67673240850430948\">  185</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, packed_mediump&gt;   <a class=\"code\" href=\"a00303.html#ga6844c6f4691d1bf67673240850430948\">packed_mediump_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gafbf1c2cce307c5594b165819ed83bf5d\">  188</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, packed_lowp&gt;              <a class=\"code\" href=\"a00303.html#gafbf1c2cce307c5594b165819ed83bf5d\">packed_lowp_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5b2dc48fa19b684d207d69c6b145eb63\">  191</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, packed_highp&gt;    <a class=\"code\" href=\"a00303.html#ga5b2dc48fa19b684d207d69c6b145eb63\">packed_highp_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0c754a783b6fcf80374c013371c4dae9\">  194</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, packed_mediump&gt;  <a class=\"code\" href=\"a00303.html#ga0c754a783b6fcf80374c013371c4dae9\">packed_mediump_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gadc19938ddb204bfcb4d9ef35b1e2bf93\">  197</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, packed_lowp&gt;             <a class=\"code\" href=\"a00303.html#gadc19938ddb204bfcb4d9ef35b1e2bf93\">packed_lowp_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga54f368ec6b514a5aa4f28d40e6f93ef7\">  200</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, packed_highp&gt;               <a class=\"code\" href=\"a00303.html#ga54f368ec6b514a5aa4f28d40e6f93ef7\">packed_highp_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaaa891048dddef4627df33809ec726219\">  203</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, packed_mediump&gt;             <a class=\"code\" href=\"a00303.html#gaaa891048dddef4627df33809ec726219\">packed_mediump_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga52635859f5ef660ab999d22c11b7867f\">  206</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, packed_lowp&gt;                <a class=\"code\" href=\"a00303.html#ga52635859f5ef660ab999d22c11b7867f\">packed_lowp_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab704d4fb15f6f96d70e363d5db7060cd\">  209</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, uint, packed_highp&gt;              <a class=\"code\" href=\"a00303.html#gab704d4fb15f6f96d70e363d5db7060cd\">packed_highp_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa1f95690a78dc12e39da32943243aeef\">  212</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, uint, packed_mediump&gt;    <a class=\"code\" href=\"a00303.html#gaa1f95690a78dc12e39da32943243aeef\">packed_mediump_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga958210fe245a75b058325d367c951132\">  215</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, uint, packed_lowp&gt;               <a class=\"code\" href=\"a00303.html#ga958210fe245a75b058325d367c951132\">packed_lowp_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad791d671f4fcf1ed1ea41f752916b70a\">  218</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, packed_highp&gt;              <a class=\"code\" href=\"a00303.html#gad791d671f4fcf1ed1ea41f752916b70a\">packed_highp_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab4c6414a59539e66a242ad4cf4b476b4\">  221</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, packed_mediump&gt;    <a class=\"code\" href=\"a00303.html#gab4c6414a59539e66a242ad4cf4b476b4\">packed_mediump_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac969befedbda69eb78d4e23f751fdbee\">  224</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, packed_lowp&gt;               <a class=\"code\" href=\"a00303.html#gac969befedbda69eb78d4e23f751fdbee\">packed_lowp_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;        <span class=\"comment\">// -- *vec3 --</span></div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga65415d2d68c9cc0ca554524a8f5510b2\">  229</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, aligned_highp&gt;    <a class=\"code\" href=\"a00303.html#ga65415d2d68c9cc0ca554524a8f5510b2\">aligned_highp_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3a25e494173f6a64637b08a1b50a2132\">  232</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, aligned_mediump&gt;  <a class=\"code\" href=\"a00303.html#ga3a25e494173f6a64637b08a1b50a2132\">aligned_mediump_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga98f0b5cd65fce164ff1367c2a3b3aa1e\">  235</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, aligned_lowp&gt;             <a class=\"code\" href=\"a00303.html#ga98f0b5cd65fce164ff1367c2a3b3aa1e\">aligned_lowp_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae94ef61edfa047d05bc69b6065fc42ba\">  238</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, aligned_highp&gt;   <a class=\"code\" href=\"a00303.html#gae94ef61edfa047d05bc69b6065fc42ba\">aligned_highp_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga058e7ddab1428e47f2197bdd3a5a6953\">  241</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, aligned_mediump&gt; <a class=\"code\" href=\"a00303.html#ga058e7ddab1428e47f2197bdd3a5a6953\">aligned_mediump_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab9e669c4efd52d3347fc6d5f6b20fd59\">  244</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, aligned_lowp&gt;    <a class=\"code\" href=\"a00303.html#gab9e669c4efd52d3347fc6d5f6b20fd59\">aligned_lowp_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6eca5170bb35eac90b4972590fd31a06\">  247</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, aligned_highp&gt;              <a class=\"code\" href=\"a00303.html#ga6eca5170bb35eac90b4972590fd31a06\">aligned_highp_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabbf0f15e9c3d9868e43241ad018f82bd\">  250</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, aligned_mediump&gt;    <a class=\"code\" href=\"a00303.html#gabbf0f15e9c3d9868e43241ad018f82bd\">aligned_mediump_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga65663f10a02e52cedcddbcfe36ddf38d\">  253</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, aligned_lowp&gt;               <a class=\"code\" href=\"a00303.html#ga65663f10a02e52cedcddbcfe36ddf38d\">aligned_lowp_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga073fd6e8b241afade6d8afbd676b2667\">  256</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, uint, aligned_highp&gt;             <a class=\"code\" href=\"a00303.html#ga073fd6e8b241afade6d8afbd676b2667\">aligned_highp_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad6fc921bdde2bdbc7e09b028e1e9b379\">  259</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, uint, aligned_mediump&gt;   <a class=\"code\" href=\"a00303.html#gad6fc921bdde2bdbc7e09b028e1e9b379\">aligned_mediump_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9e9f006970b1a00862e3e6e599eedd4c\">  262</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, uint, aligned_lowp&gt;              <a class=\"code\" href=\"a00303.html#ga9e9f006970b1a00862e3e6e599eedd4c\">aligned_lowp_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0913bdf048d0cb74af1d2512aec675bc\">  265</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, aligned_highp&gt;             <a class=\"code\" href=\"a00303.html#ga0913bdf048d0cb74af1d2512aec675bc\">aligned_highp_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gacfa4a542f1b20a5b63ad702dfb6fd587\">  268</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, aligned_mediump&gt;   <a class=\"code\" href=\"a00303.html#gacfa4a542f1b20a5b63ad702dfb6fd587\">aligned_mediump_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga83aab4d191053f169c93a3e364f2e118\">  271</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, aligned_lowp&gt;              <a class=\"code\" href=\"a00303.html#ga83aab4d191053f169c93a3e364f2e118\">aligned_lowp_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3815661df0e2de79beff8168c09adf1e\">  274</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, packed_highp&gt;             <a class=\"code\" href=\"a00303.html#ga3815661df0e2de79beff8168c09adf1e\">packed_highp_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab0eb771b708c5b2205d9b14dd1434fd8\">  277</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, packed_mediump&gt;   <a class=\"code\" href=\"a00303.html#gab0eb771b708c5b2205d9b14dd1434fd8\">packed_mediump_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3a30c137c1f8cce478c28eab0427a570\">  280</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, packed_lowp&gt;              <a class=\"code\" href=\"a00303.html#ga3a30c137c1f8cce478c28eab0427a570\">packed_lowp_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaaac6b356ef00154da41aaae7d1549193\">  283</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, packed_highp&gt;    <a class=\"code\" href=\"a00303.html#gaaac6b356ef00154da41aaae7d1549193\">packed_highp_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga1f18ada6f7cdd8c46db33ba987280fc4\">  286</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, packed_mediump&gt;  <a class=\"code\" href=\"a00303.html#ga1f18ada6f7cdd8c46db33ba987280fc4\">packed_mediump_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9189210cabd6651a5e14a4c46fb20598\">  289</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, packed_lowp&gt;             <a class=\"code\" href=\"a00303.html#ga9189210cabd6651a5e14a4c46fb20598\">packed_lowp_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga865a9c7bb22434b1b8c5ac31e164b628\">  292</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, packed_highp&gt;               <a class=\"code\" href=\"a00303.html#ga865a9c7bb22434b1b8c5ac31e164b628\">packed_highp_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga06f26d54dca30994eb1fdadb8e69f4a2\">  295</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, packed_mediump&gt;             <a class=\"code\" href=\"a00303.html#ga06f26d54dca30994eb1fdadb8e69f4a2\">packed_mediump_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga98c9d122a959e9f3ce10a5623c310f5d\">  298</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, packed_lowp&gt;                <a class=\"code\" href=\"a00303.html#ga98c9d122a959e9f3ce10a5623c310f5d\">packed_lowp_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0b570da473fec4619db5aa0dce5133b0\">  301</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, uint, packed_highp&gt;              <a class=\"code\" href=\"a00303.html#ga0b570da473fec4619db5aa0dce5133b0\">packed_highp_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga1ea2bbdbcb0a69242f6d884663c1b0ab\">  304</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, uint, packed_mediump&gt;    <a class=\"code\" href=\"a00303.html#ga1ea2bbdbcb0a69242f6d884663c1b0ab\">packed_mediump_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga576a3f8372197a56a79dee1c8280f485\">  307</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, uint, packed_lowp&gt;               <a class=\"code\" href=\"a00303.html#ga576a3f8372197a56a79dee1c8280f485\">packed_lowp_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6a5a3250b57dfadc66735bc72911437f\">  310</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, packed_highp&gt;              <a class=\"code\" href=\"a00303.html#ga6a5a3250b57dfadc66735bc72911437f\">packed_highp_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga70147763edff3fe96b03a0b98d6339a2\">  313</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, packed_mediump&gt;    <a class=\"code\" href=\"a00303.html#ga70147763edff3fe96b03a0b98d6339a2\">packed_mediump_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7c20adbe1409e3fe4544677a7f6fe954\">  316</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, packed_lowp&gt;               <a class=\"code\" href=\"a00303.html#ga7c20adbe1409e3fe4544677a7f6fe954\">packed_lowp_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;        <span class=\"comment\">// -- *vec4 --</span></div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7cb26d354dd69d23849c34c4fba88da9\">  321</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, aligned_highp&gt;    <a class=\"code\" href=\"a00303.html#ga7cb26d354dd69d23849c34c4fba88da9\">aligned_highp_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga320d1c661cff2ef214eb50241f2928b2\">  324</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, aligned_mediump&gt;  <a class=\"code\" href=\"a00303.html#ga320d1c661cff2ef214eb50241f2928b2\">aligned_mediump_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga82f7275d6102593a69ce38cdad680409\">  327</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, aligned_lowp&gt;             <a class=\"code\" href=\"a00303.html#ga82f7275d6102593a69ce38cdad680409\">aligned_lowp_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8fad35c5677f228e261fe541f15363a4\">  330</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, aligned_highp&gt;   <a class=\"code\" href=\"a00303.html#ga8fad35c5677f228e261fe541f15363a4\">aligned_highp_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaffd747ea2aea1e69c2ecb04e68521b21\">  333</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, aligned_mediump&gt; <a class=\"code\" href=\"a00303.html#gaffd747ea2aea1e69c2ecb04e68521b21\">aligned_mediump_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga226f5ec7a953cea559c16fe3aff9924f\">  336</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, aligned_lowp&gt;    <a class=\"code\" href=\"a00303.html#ga226f5ec7a953cea559c16fe3aff9924f\">aligned_lowp_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga31bfa801e1579fdba752ec3f7a45ec91\">  339</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, aligned_highp&gt;              <a class=\"code\" href=\"a00303.html#ga31bfa801e1579fdba752ec3f7a45ec91\">aligned_highp_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6099dd7878d0a78101a4250d8cd2d736\">  342</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, aligned_mediump&gt;    <a class=\"code\" href=\"a00303.html#ga6099dd7878d0a78101a4250d8cd2d736\">aligned_mediump_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaae92fcec8b2e0328ffbeac31cc4fc419\">  345</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, aligned_lowp&gt;               <a class=\"code\" href=\"a00303.html#gaae92fcec8b2e0328ffbeac31cc4fc419\">aligned_lowp_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabdd60462042859f876c17c7346c732a5\">  348</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, uint, aligned_highp&gt;             <a class=\"code\" href=\"a00303.html#gabdd60462042859f876c17c7346c732a5\">aligned_highp_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga73ea0c1ba31580e107d21270883f51fc\">  351</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, uint, aligned_mediump&gt;   <a class=\"code\" href=\"a00303.html#ga73ea0c1ba31580e107d21270883f51fc\">aligned_mediump_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga46b1b0b9eb8625a5d69137bd66cd13dc\">  354</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, uint, aligned_lowp&gt;              <a class=\"code\" href=\"a00303.html#ga46b1b0b9eb8625a5d69137bd66cd13dc\">aligned_lowp_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9df1d0c425852cf63a57e533b7a83f4f\">  357</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, aligned_highp&gt;             <a class=\"code\" href=\"a00303.html#ga9df1d0c425852cf63a57e533b7a83f4f\">aligned_highp_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga91bc1f513bb9b0fd60281d57ded9a48c\">  360</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, aligned_mediump&gt;   <a class=\"code\" href=\"a00303.html#ga91bc1f513bb9b0fd60281d57ded9a48c\">aligned_mediump_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa7a76555ee4853614e5755181a8dd54e\">  363</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, aligned_lowp&gt;              <a class=\"code\" href=\"a00303.html#gaa7a76555ee4853614e5755181a8dd54e\">aligned_lowp_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga4015f36bf5a5adb6ac5d45beed959867\">  366</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, packed_highp&gt;             <a class=\"code\" href=\"a00303.html#ga4015f36bf5a5adb6ac5d45beed959867\">packed_highp_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga68c9bb24f387b312bae6a0a68e74d95e\">  369</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, packed_mediump&gt;   <a class=\"code\" href=\"a00303.html#ga68c9bb24f387b312bae6a0a68e74d95e\">packed_mediump_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3cc94fb8de80bbd8a4aa7a5b206d304a\">  372</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, packed_lowp&gt;              <a class=\"code\" href=\"a00303.html#ga3cc94fb8de80bbd8a4aa7a5b206d304a\">packed_lowp_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;</div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga81b5368fe485e2630aa9b44832d592e7\">  375</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, packed_highp&gt;    <a class=\"code\" href=\"a00303.html#ga81b5368fe485e2630aa9b44832d592e7\">packed_highp_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga568b850f1116b667043533cf77826968\">  378</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, packed_mediump&gt;  <a class=\"code\" href=\"a00303.html#ga568b850f1116b667043533cf77826968\">packed_mediump_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga262dafd0c001c3a38d1cc91d024ca738\">  381</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, packed_lowp&gt;             <a class=\"code\" href=\"a00303.html#ga262dafd0c001c3a38d1cc91d024ca738\">packed_lowp_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad6f1b4e3a51c2c051814b60d5d1b8895\">  384</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, packed_highp&gt;               <a class=\"code\" href=\"a00303.html#gad6f1b4e3a51c2c051814b60d5d1b8895\">packed_highp_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga70130dc8ed9c966ec2a221ce586d45d8\">  387</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, packed_mediump&gt;             <a class=\"code\" href=\"a00303.html#ga70130dc8ed9c966ec2a221ce586d45d8\">packed_mediump_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga931731b8ae3b54c7ecc221509dae96bc\">  390</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, packed_lowp&gt;                <a class=\"code\" href=\"a00303.html#ga931731b8ae3b54c7ecc221509dae96bc\">packed_lowp_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa582f38c82aef61dea7aaedf15bb06a6\">  393</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, uint, packed_highp&gt;              <a class=\"code\" href=\"a00303.html#gaa582f38c82aef61dea7aaedf15bb06a6\">packed_highp_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;</div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga63a73be86a4f07ea7a7499ab0bfebe45\">  396</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, uint, packed_mediump&gt;    <a class=\"code\" href=\"a00303.html#ga63a73be86a4f07ea7a7499ab0bfebe45\">packed_mediump_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gafdd97922b4a2a42cd0c99a13877ff4da\">  399</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, uint, packed_lowp&gt;               <a class=\"code\" href=\"a00303.html#gafdd97922b4a2a42cd0c99a13877ff4da\">packed_lowp_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga09f517d88b996ef1b2f42fd54222b82d\">  402</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, packed_highp&gt;              <a class=\"code\" href=\"a00303.html#ga09f517d88b996ef1b2f42fd54222b82d\">packed_highp_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;</div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7b1620f259595b9da47a6374fc44588a\">  405</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, packed_mediump&gt;    <a class=\"code\" href=\"a00303.html#ga7b1620f259595b9da47a6374fc44588a\">packed_mediump_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;</div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae473587cff3092edc0877fc691c26a0b\">  408</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, packed_lowp&gt;               <a class=\"code\" href=\"a00303.html#gae473587cff3092edc0877fc691c26a0b\">packed_lowp_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;</div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;        <span class=\"comment\">// -- *mat2 --</span></div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf9db5e8a929c317da5aa12cc53741b63\">  413</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#gaf9db5e8a929c317da5aa12cc53741b63\">aligned_highp_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf6f041b212c57664d88bc6aefb7e36f3\">  416</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#gaf6f041b212c57664d88bc6aefb7e36f3\">aligned_mediump_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga17c424412207b00dba1cf587b099eea3\">  419</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga17c424412207b00dba1cf587b099eea3\">aligned_lowp_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;</div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3a7eeae43cb7673e14cc89bf02f7dd45\">  422</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#ga3a7eeae43cb7673e14cc89bf02f7dd45\">aligned_highp_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga62a2dfd668c91072b72c3109fc6cda28\">  425</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#ga62a2dfd668c91072b72c3109fc6cda28\">aligned_mediump_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga79a90173d8faa9816dc852ce447d66ca\">  428</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#ga79a90173d8faa9816dc852ce447d66ca\">aligned_lowp_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2f2d913d8cca2f935b2522964408c0b2\">  431</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga2f2d913d8cca2f935b2522964408c0b2\">packed_highp_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;</div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga43cd36d430c5187bfdca34a23cb41581\">  434</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#ga43cd36d430c5187bfdca34a23cb41581\">packed_mediump_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga70dcb9ef0b24e832772a7405efa9669a\">  437</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga70dcb9ef0b24e832772a7405efa9669a\">packed_lowp_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae29686632fd05efac0675d9a6370d77b\">  440</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#gae29686632fd05efac0675d9a6370d77b\">packed_highp_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9d60e32d3fcb51f817046cd881fdbf57\">  443</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga9d60e32d3fcb51f817046cd881fdbf57\">packed_mediump_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac93f9b1a35b9de4f456b9f2dfeaf1097\">  446</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#gac93f9b1a35b9de4f456b9f2dfeaf1097\">packed_lowp_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;        <span class=\"comment\">// -- *mat3 --</span></div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;</div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabab3afcc04459c7b123604ae5dc663f6\">  451</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#gabab3afcc04459c7b123604ae5dc663f6\">aligned_highp_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;</div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3b76ba17ae5d53debeb6f7e55919a57c\">  454</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga3b76ba17ae5d53debeb6f7e55919a57c\">aligned_mediump_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;</div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga1eb9076cc28ead5020fd3029fd0472c5\">  457</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga1eb9076cc28ead5020fd3029fd0472c5\">aligned_lowp_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad8f6abb2c9994850b5d5c04a5f979ed8\">  460</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#gad8f6abb2c9994850b5d5c04a5f979ed8\">aligned_highp_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6dc2832b747c00e0a0df621aba196960\">  463</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#ga6dc2832b747c00e0a0df621aba196960\">aligned_mediump_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;</div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac00e15efded8a57c9dec3aed0fb547e7\">  466</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#gac00e15efded8a57c9dec3aed0fb547e7\">aligned_lowp_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;</div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabdd5fbffe8b8b8a7b33523f25b120dbe\">  469</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#gabdd5fbffe8b8b8a7b33523f25b120dbe\">packed_highp_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga13a75c6cbd0a411f694bc82486cd1e55\">  472</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#ga13a75c6cbd0a411f694bc82486cd1e55\">packed_mediump_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;</div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0d22400969dd223465b2900fecfb4f53\">  475</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga0d22400969dd223465b2900fecfb4f53\">packed_lowp_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;</div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gadac7c040c4810dd52b36fcd09d097400\">  478</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#gadac7c040c4810dd52b36fcd09d097400\">packed_highp_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf969eb879c76a5f4576e4a1e10095cf6\">  481</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#gaf969eb879c76a5f4576e4a1e10095cf6\">packed_mediump_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3894a059eeaacec8791c25de398d9955\">  484</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga3894a059eeaacec8791c25de398d9955\">packed_lowp_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;</div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;        <span class=\"comment\">// -- *mat4 --</span></div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;</div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga058ae939bfdbcbb80521dd4a3b01afba\">  489</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#ga058ae939bfdbcbb80521dd4a3b01afba\">aligned_highp_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaeefee8317192174596852ce19b602720\">  492</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#gaeefee8317192174596852ce19b602720\">aligned_mediump_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga25ea2f684e36aa5e978b4f2f86593824\">  495</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga25ea2f684e36aa5e978b4f2f86593824\">aligned_lowp_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;</div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gacaa7407ea00ffdd322ce86a57adb547e\">  498</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#gacaa7407ea00ffdd322ce86a57adb547e\">aligned_highp_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8a9376d82f0e946e25137eb55543e6ce\">  501</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#ga8a9376d82f0e946e25137eb55543e6ce\">aligned_mediump_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;</div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab92c6d7d58d43dfb8147e9aedfe8351b\">  504</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#gab92c6d7d58d43dfb8147e9aedfe8351b\">aligned_lowp_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;</div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga253e8379b08d2dc6fe2800b2fb913203\">  507</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga253e8379b08d2dc6fe2800b2fb913203\">packed_highp_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;</div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae89d72ffc149147f61df701bbc8755bf\">  510</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#gae89d72ffc149147f61df701bbc8755bf\">packed_mediump_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2a1dd2387725a335413d4c4fee8609c4\">  513</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga2a1dd2387725a335413d4c4fee8609c4\">packed_lowp_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;</div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6718822cd7af005a9b5bd6ee282f6ba6\">  516</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga6718822cd7af005a9b5bd6ee282f6ba6\">packed_highp_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;</div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga4b0ee7996651ddd04eaa0c4cdbb66332\">  519</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga4b0ee7996651ddd04eaa0c4cdbb66332\">packed_mediump_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;</div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga03e1edf5666c40affe39aee35c87956f\">  522</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga03e1edf5666c40affe39aee35c87956f\">packed_lowp_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;</div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\">  524</span>&#160;        <span class=\"comment\">// -- *mat2x2 --</span></div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab559d943abf92bc588bcd3f4c0e4664b\">  527</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#gab559d943abf92bc588bcd3f4c0e4664b\">aligned_highp_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\">  528</span>&#160;</div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga04bf49316ee777d42fcfe681ee37d7be\">  530</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga04bf49316ee777d42fcfe681ee37d7be\">aligned_mediump_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;</div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0e44aeb930a47f9cbf2db15b56433b0f\">  533</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga0e44aeb930a47f9cbf2db15b56433b0f\">aligned_lowp_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;</div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaef26dfe3855a91644665b55c9096a8c8\">  536</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#gaef26dfe3855a91644665b55c9096a8c8\">aligned_highp_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;</div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9b7feec247d378dd407ba81f56ea96c8\">  539</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#ga9b7feec247d378dd407ba81f56ea96c8\">aligned_mediump_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160;</div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga07cb8e846666cbf56045b064fb553d2e\">  542</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#ga07cb8e846666cbf56045b064fb553d2e\">aligned_lowp_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;</div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga245c12d2daf67feecaa2d3277c8f6661\">  545</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga245c12d2daf67feecaa2d3277c8f6661\">packed_highp_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;</div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2d2a73e662759e301c22b8931ff6a526\">  548</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#ga2d2a73e662759e301c22b8931ff6a526\">packed_mediump_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\">  549</span>&#160;</div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac70667c7642ec8d50245e6e6936a3927\">  551</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#gac70667c7642ec8d50245e6e6936a3927\">packed_lowp_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;</div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga22bd6382b16052e301edbfc031b9f37a\">  554</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga22bd6382b16052e301edbfc031b9f37a\">packed_highp_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;</div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga39e8bb9b70e5694964e8266a21ba534e\">  557</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga39e8bb9b70e5694964e8266a21ba534e\">packed_mediump_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;</div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaeeaff6c132ec91ebd21da3a2399548ea\">  560</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#gaeeaff6c132ec91ebd21da3a2399548ea\">packed_lowp_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;</div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;        <span class=\"comment\">// -- *mat2x3 --</span></div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;</div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga50c9af5aa3a848956d625fc64dc8488e\">  565</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#ga50c9af5aa3a848956d625fc64dc8488e\">aligned_highp_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;</div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga26a0b61e444a51a37b9737cf4d84291b\">  568</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga26a0b61e444a51a37b9737cf4d84291b\">aligned_mediump_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;</div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7dec6d96bc61312b1e56d137c9c74030\">  571</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga7dec6d96bc61312b1e56d137c9c74030\">aligned_lowp_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;</div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa7c9d4ab7ab651cdf8001fe7843e238b\">  574</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#gaa7c9d4ab7ab651cdf8001fe7843e238b\">aligned_highp_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;</div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gafcb189f4f93648fe7ca802ca4aca2eb8\">  577</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#gafcb189f4f93648fe7ca802ca4aca2eb8\">aligned_mediump_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;</div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7a4536b6e1f2ebb690f63816b5d7e48b\">  580</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#ga7a4536b6e1f2ebb690f63816b5d7e48b\">aligned_lowp_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;</div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga069cc8892aadae144c00f35297617d44\">  583</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga069cc8892aadae144c00f35297617d44\">packed_highp_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\">  584</span>&#160;</div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga99049db01faf1e95ed9fb875a47dffe2\">  586</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#ga99049db01faf1e95ed9fb875a47dffe2\">packed_mediump_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;</div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3e7df5a11e1be27bc29a4c0d3956f234\">  589</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga3e7df5a11e1be27bc29a4c0d3956f234\">packed_lowp_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;</div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga999d82719696d4c59f4d236dd08f273d\">  592</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga999d82719696d4c59f4d236dd08f273d\">packed_highp_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;</div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8897c6d9adb4140b1c3b0a07b8f0a430\">  595</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga8897c6d9adb4140b1c3b0a07b8f0a430\">packed_mediump_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160;</div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2ccdcd4846775cbe4f9d12e71d55b5d2\">  598</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga2ccdcd4846775cbe4f9d12e71d55b5d2\">packed_lowp_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;</div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;        <span class=\"comment\">// -- *mat2x4 --</span></div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0edcfdd179f8a158342eead48a4d0c2a\">  603</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#ga0edcfdd179f8a158342eead48a4d0c2a\">aligned_highp_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;</div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga163facc9ed2692ea1300ed57c5d12b17\">  606</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga163facc9ed2692ea1300ed57c5d12b17\">aligned_mediump_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;</div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa694fab1f8df5f658846573ba8ffc563\">  609</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#gaa694fab1f8df5f658846573ba8ffc563\">aligned_lowp_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;</div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa0d2b8a75f1908dcf32c27f8524bdced\">  612</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#gaa0d2b8a75f1908dcf32c27f8524bdced\">aligned_highp_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160;</div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga92f8873e3bbd5ca1323c8bbe5725cc5e\">  615</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#ga92f8873e3bbd5ca1323c8bbe5725cc5e\">aligned_mediump_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;</div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab0cf4f7c9a264941519acad286e055ea\">  618</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#gab0cf4f7c9a264941519acad286e055ea\">aligned_lowp_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;</div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6904d09b62141d09712b76983892f95b\">  621</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga6904d09b62141d09712b76983892f95b\">packed_highp_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;</div>\n<div class=\"line\"><a name=\"l00624\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad43a240533f388ce0504b495d9df3d52\">  624</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#gad43a240533f388ce0504b495d9df3d52\">packed_mediump_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160;</div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaea9c555e669dc56c45d95dcc75d59bf3\">  627</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#gaea9c555e669dc56c45d95dcc75d59bf3\">packed_lowp_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6998ac2a8d7fe456b651a6336ed26bb0\">  630</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga6998ac2a8d7fe456b651a6336ed26bb0\">packed_highp_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;</div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaaa4126969c765e7faa2ebf6951c22ffb\">  633</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#gaaa4126969c765e7faa2ebf6951c22ffb\">packed_mediump_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160;</div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac870c47d2d9d48503f6c9ee3baec8ce1\">  636</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#gac870c47d2d9d48503f6c9ee3baec8ce1\">packed_lowp_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160;</div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;        <span class=\"comment\">// -- *mat3x2 --</span></div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;</div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9fc2167b47c9be9295f2d8eea7f0ca75\">  641</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#ga9fc2167b47c9be9295f2d8eea7f0ca75\">aligned_highp_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160;</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga80dee705d714300378e0847f45059097\">  644</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga80dee705d714300378e0847f45059097\">aligned_mediump_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;</div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2d6639f0bd777bae1ee0eba71cd7bfdc\">  647</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga2d6639f0bd777bae1ee0eba71cd7bfdc\">aligned_lowp_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160;</div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab069b2fc2ec785fc4e193cf26c022679\">  650</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#gab069b2fc2ec785fc4e193cf26c022679\">aligned_highp_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;</div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5a97f0355d801de3444d42c1d5b40438\">  653</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#ga5a97f0355d801de3444d42c1d5b40438\">aligned_mediump_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;</div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa281a47d5d627313984d0f8df993b648\">  656</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#gaa281a47d5d627313984d0f8df993b648\">aligned_lowp_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;</div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2624719cb251d8de8cad1beaefc3a3f9\">  659</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga2624719cb251d8de8cad1beaefc3a3f9\">packed_highp_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;</div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga04cfaf1421284df3c24ea0985dab24e7\">  662</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#ga04cfaf1421284df3c24ea0985dab24e7\">packed_mediump_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;</div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga128cd52649621861635fab746df91735\">  665</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga128cd52649621861635fab746df91735\">packed_lowp_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\">  666</span>&#160;</div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab462744977beb85fb5c782bc2eea7b15\">  668</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#gab462744977beb85fb5c782bc2eea7b15\">packed_highp_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;</div>\n<div class=\"line\"><a name=\"l00671\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga86efe91cdaa2864c828a5d6d46356c6a\">  671</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga86efe91cdaa2864c828a5d6d46356c6a\">packed_mediump_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;</div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga23ec236950f5859f59197663266b535d\">  674</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga23ec236950f5859f59197663266b535d\">packed_lowp_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\">  675</span>&#160;</div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;        <span class=\"comment\">// -- *mat3x3 --</span></div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;</div>\n<div class=\"line\"><a name=\"l00679\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2f7b8c99ba6f2d07c73a195a8143c259\">  679</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#ga2f7b8c99ba6f2d07c73a195a8143c259\">aligned_highp_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;</div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga721f5404caf40d68962dcc0529de71d9\">  682</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga721f5404caf40d68962dcc0529de71d9\">aligned_mediump_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00683\"></a><span class=\"lineno\">  683</span>&#160;</div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaeaab04e378a90956eec8d68a99d777ed\">  685</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#gaeaab04e378a90956eec8d68a99d777ed\">aligned_lowp_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\">  686</span>&#160;</div>\n<div class=\"line\"><a name=\"l00688\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga66073b1ddef34b681741f572338ddb8e\">  688</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#ga66073b1ddef34b681741f572338ddb8e\">aligned_highp_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;</div>\n<div class=\"line\"><a name=\"l00691\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga649d0acf01054b17e679cf00e150e025\">  691</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#ga649d0acf01054b17e679cf00e150e025\">aligned_mediump_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00692\"></a><span class=\"lineno\">  692</span>&#160;</div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7f3148a72355e39932d6855baca42ebc\">  694</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#ga7f3148a72355e39932d6855baca42ebc\">aligned_lowp_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00695\"></a><span class=\"lineno\">  695</span>&#160;</div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf2e07527d678440bf0c20adbeb9177c5\">  697</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#gaf2e07527d678440bf0c20adbeb9177c5\">packed_highp_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;</div>\n<div class=\"line\"><a name=\"l00700\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaaa9cea174d342dd9650e3436823cab23\">  700</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#gaaa9cea174d342dd9650e3436823cab23\">packed_mediump_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00701\"></a><span class=\"lineno\">  701</span>&#160;</div>\n<div class=\"line\"><a name=\"l00703\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5adf1802c5375a9dfb1729691bedd94e\">  703</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga5adf1802c5375a9dfb1729691bedd94e\">packed_lowp_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\">  704</span>&#160;</div>\n<div class=\"line\"><a name=\"l00706\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga49e5a709d098523823b2f824e48672a6\">  706</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga49e5a709d098523823b2f824e48672a6\">packed_highp_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00707\"></a><span class=\"lineno\">  707</span>&#160;</div>\n<div class=\"line\"><a name=\"l00709\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf85877d38d8cfbc21d59d939afd72375\">  709</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#gaf85877d38d8cfbc21d59d939afd72375\">packed_mediump_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;</div>\n<div class=\"line\"><a name=\"l00712\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga4a7c7d8c3a663d0ec2a858cbfa14e54c\">  712</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga4a7c7d8c3a663d0ec2a858cbfa14e54c\">packed_lowp_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00713\"></a><span class=\"lineno\">  713</span>&#160;</div>\n<div class=\"line\"><a name=\"l00714\"></a><span class=\"lineno\">  714</span>&#160;        <span class=\"comment\">// -- *mat3x4 --</span></div>\n<div class=\"line\"><a name=\"l00715\"></a><span class=\"lineno\">  715</span>&#160;</div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga52e00afd0eb181e6738f40cf41787049\">  717</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#ga52e00afd0eb181e6738f40cf41787049\">aligned_highp_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00718\"></a><span class=\"lineno\">  718</span>&#160;</div>\n<div class=\"line\"><a name=\"l00720\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga98f4dc6722a2541a990918c074075359\">  720</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga98f4dc6722a2541a990918c074075359\">aligned_mediump_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;</div>\n<div class=\"line\"><a name=\"l00723\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga1f03696ab066572c6c044e63edf635a2\">  723</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga1f03696ab066572c6c044e63edf635a2\">aligned_lowp_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160;</div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga683c8ca66de323ea533a760abedd0efc\">  726</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#ga683c8ca66de323ea533a760abedd0efc\">aligned_highp_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00727\"></a><span class=\"lineno\">  727</span>&#160;</div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga45e155a4840f69b2fa4ed8047a676860\">  729</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#ga45e155a4840f69b2fa4ed8047a676860\">aligned_mediump_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00730\"></a><span class=\"lineno\">  730</span>&#160;</div>\n<div class=\"line\"><a name=\"l00732\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaea3ccc5ef5b178e6e49b4fa1427605d3\">  732</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#gaea3ccc5ef5b178e6e49b4fa1427605d3\">aligned_lowp_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;</div>\n<div class=\"line\"><a name=\"l00735\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga72102fa6ac2445aa3bb203128ad52449\">  735</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga72102fa6ac2445aa3bb203128ad52449\">packed_highp_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;</div>\n<div class=\"line\"><a name=\"l00738\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabc93a9560593bd32e099c908531305f5\">  738</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#gabc93a9560593bd32e099c908531305f5\">packed_mediump_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00739\"></a><span class=\"lineno\">  739</span>&#160;</div>\n<div class=\"line\"><a name=\"l00741\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga92247ca09fa03c4013ba364f3a0fca7f\">  741</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga92247ca09fa03c4013ba364f3a0fca7f\">packed_lowp_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00742\"></a><span class=\"lineno\">  742</span>&#160;</div>\n<div class=\"line\"><a name=\"l00744\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2c67b3b0adab71c8680c3d819f1fa9b7\">  744</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga2c67b3b0adab71c8680c3d819f1fa9b7\">packed_highp_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00745\"></a><span class=\"lineno\">  745</span>&#160;</div>\n<div class=\"line\"><a name=\"l00747\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad5dcaf93df267bc3029174e430e0907f\">  747</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#gad5dcaf93df267bc3029174e430e0907f\">packed_mediump_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00748\"></a><span class=\"lineno\">  748</span>&#160;</div>\n<div class=\"line\"><a name=\"l00750\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8fc0e66da83599071b7ec17510686cd9\">  750</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga8fc0e66da83599071b7ec17510686cd9\">packed_lowp_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00751\"></a><span class=\"lineno\">  751</span>&#160;</div>\n<div class=\"line\"><a name=\"l00752\"></a><span class=\"lineno\">  752</span>&#160;        <span class=\"comment\">// -- *mat4x2 --</span></div>\n<div class=\"line\"><a name=\"l00753\"></a><span class=\"lineno\">  753</span>&#160;</div>\n<div class=\"line\"><a name=\"l00755\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga84e1f5e0718952a079b748825c03f956\">  755</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#ga84e1f5e0718952a079b748825c03f956\">aligned_highp_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\">  756</span>&#160;</div>\n<div class=\"line\"><a name=\"l00758\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga46f372a006345c252a41267657cc22c0\">  758</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga46f372a006345c252a41267657cc22c0\">aligned_mediump_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00759\"></a><span class=\"lineno\">  759</span>&#160;</div>\n<div class=\"line\"><a name=\"l00761\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2cb16c3fdfb15e0719d942ee3b548bc4\">  761</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga2cb16c3fdfb15e0719d942ee3b548bc4\">aligned_lowp_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00762\"></a><span class=\"lineno\">  762</span>&#160;</div>\n<div class=\"line\"><a name=\"l00764\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga93a23ca3d42818d56e0702213c66354b\">  764</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#ga93a23ca3d42818d56e0702213c66354b\">aligned_highp_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00765\"></a><span class=\"lineno\">  765</span>&#160;</div>\n<div class=\"line\"><a name=\"l00767\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabc25e547f4de4af62403492532cd1b6d\">  767</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#gabc25e547f4de4af62403492532cd1b6d\">aligned_mediump_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00768\"></a><span class=\"lineno\">  768</span>&#160;</div>\n<div class=\"line\"><a name=\"l00770\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf806dfdaffb2e9f7681b1cd2825898ce\">  770</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#gaf806dfdaffb2e9f7681b1cd2825898ce\">aligned_lowp_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00771\"></a><span class=\"lineno\">  771</span>&#160;</div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae389c2071cf3cdb33e7812c6fd156710\">  773</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#gae389c2071cf3cdb33e7812c6fd156710\">packed_highp_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00774\"></a><span class=\"lineno\">  774</span>&#160;</div>\n<div class=\"line\"><a name=\"l00776\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa458f9d9e0934bae3097e2a373b24707\">  776</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#gaa458f9d9e0934bae3097e2a373b24707\">packed_mediump_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00777\"></a><span class=\"lineno\">  777</span>&#160;</div>\n<div class=\"line\"><a name=\"l00779\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8f22607dcd090cd280071ccc689f4079\">  779</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga8f22607dcd090cd280071ccc689f4079\">packed_lowp_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00780\"></a><span class=\"lineno\">  780</span>&#160;</div>\n<div class=\"line\"><a name=\"l00782\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga12e39e797fb724a5b51fcbea2513a7da\">  782</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga12e39e797fb724a5b51fcbea2513a7da\">packed_highp_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00783\"></a><span class=\"lineno\">  783</span>&#160;</div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9a15514a0631f700de6312b9d5db3a73\">  785</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga9a15514a0631f700de6312b9d5db3a73\">packed_mediump_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00786\"></a><span class=\"lineno\">  786</span>&#160;</div>\n<div class=\"line\"><a name=\"l00788\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga39658fb13369db869d363684bd8399c0\">  788</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga39658fb13369db869d363684bd8399c0\">packed_lowp_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00789\"></a><span class=\"lineno\">  789</span>&#160;</div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;        <span class=\"comment\">// -- *mat4x3 --</span></div>\n<div class=\"line\"><a name=\"l00791\"></a><span class=\"lineno\">  791</span>&#160;</div>\n<div class=\"line\"><a name=\"l00793\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gafff1684c4ff19b4a818138ccacc1e78d\">  793</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#gafff1684c4ff19b4a818138ccacc1e78d\">aligned_highp_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160;</div>\n<div class=\"line\"><a name=\"l00796\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0effece4545acdebdc2a5512a303110e\">  796</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga0effece4545acdebdc2a5512a303110e\">aligned_mediump_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00797\"></a><span class=\"lineno\">  797</span>&#160;</div>\n<div class=\"line\"><a name=\"l00799\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7e96981e872f17a780d9f1c22dc1f512\">  799</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga7e96981e872f17a780d9f1c22dc1f512\">aligned_lowp_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00800\"></a><span class=\"lineno\">  800</span>&#160;</div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gacab7374b560745cb1d0a306a90353f58\">  802</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#gacab7374b560745cb1d0a306a90353f58\">aligned_highp_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00803\"></a><span class=\"lineno\">  803</span>&#160;</div>\n<div class=\"line\"><a name=\"l00805\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae84f4763ecdc7457ecb7930bad12057c\">  805</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#gae84f4763ecdc7457ecb7930bad12057c\">aligned_mediump_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00806\"></a><span class=\"lineno\">  806</span>&#160;</div>\n<div class=\"line\"><a name=\"l00808\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab0931ac7807fa1428c7bbf249efcdf0d\">  808</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#gab0931ac7807fa1428c7bbf249efcdf0d\">aligned_lowp_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00809\"></a><span class=\"lineno\">  809</span>&#160;</div>\n<div class=\"line\"><a name=\"l00811\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga4584f64394bd7123b7a8534741e4916c\">  811</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga4584f64394bd7123b7a8534741e4916c\">packed_highp_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00812\"></a><span class=\"lineno\">  812</span>&#160;</div>\n<div class=\"line\"><a name=\"l00814\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga02ca6255394aa778abaeb0f733c4d2b6\">  814</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#ga02ca6255394aa778abaeb0f733c4d2b6\">packed_mediump_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00815\"></a><span class=\"lineno\">  815</span>&#160;</div>\n<div class=\"line\"><a name=\"l00817\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7661d759d6ad218e132e3d051e7b2c6c\">  817</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga7661d759d6ad218e132e3d051e7b2c6c\">packed_lowp_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00818\"></a><span class=\"lineno\">  818</span>&#160;</div>\n<div class=\"line\"><a name=\"l00820\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga79c2e9f82e67963c1ecad0ad6d0ec72e\">  820</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga79c2e9f82e67963c1ecad0ad6d0ec72e\">packed_highp_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00821\"></a><span class=\"lineno\">  821</span>&#160;</div>\n<div class=\"line\"><a name=\"l00823\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab5b36cc9caee1bb1c5178fe191bf5713\">  823</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#gab5b36cc9caee1bb1c5178fe191bf5713\">packed_mediump_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00824\"></a><span class=\"lineno\">  824</span>&#160;</div>\n<div class=\"line\"><a name=\"l00826\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga30b0351eebc18c6056101359bdd3a359\">  826</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga30b0351eebc18c6056101359bdd3a359\">packed_lowp_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00827\"></a><span class=\"lineno\">  827</span>&#160;</div>\n<div class=\"line\"><a name=\"l00828\"></a><span class=\"lineno\">  828</span>&#160;        <span class=\"comment\">// -- *mat4x4 --</span></div>\n<div class=\"line\"><a name=\"l00829\"></a><span class=\"lineno\">  829</span>&#160;</div>\n<div class=\"line\"><a name=\"l00831\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga40d49648083a0498a12a4bb41ae6ece8\">  831</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, aligned_highp&gt;         <a class=\"code\" href=\"a00303.html#ga40d49648083a0498a12a4bb41ae6ece8\">aligned_highp_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00832\"></a><span class=\"lineno\">  832</span>&#160;</div>\n<div class=\"line\"><a name=\"l00834\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga312864244cae4e8f10f478cffd0f76de\">  834</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, aligned_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga312864244cae4e8f10f478cffd0f76de\">aligned_mediump_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00835\"></a><span class=\"lineno\">  835</span>&#160;</div>\n<div class=\"line\"><a name=\"l00837\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gadae3dcfc22d28c64d0548cbfd9d08719\">  837</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, aligned_lowp&gt;          <a class=\"code\" href=\"a00303.html#gadae3dcfc22d28c64d0548cbfd9d08719\">aligned_lowp_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00838\"></a><span class=\"lineno\">  838</span>&#160;</div>\n<div class=\"line\"><a name=\"l00840\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga1fbfba14368b742972d3b58a0a303682\">  840</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, aligned_highp&gt;        <a class=\"code\" href=\"a00303.html#ga1fbfba14368b742972d3b58a0a303682\">aligned_highp_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00841\"></a><span class=\"lineno\">  841</span>&#160;</div>\n<div class=\"line\"><a name=\"l00843\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa292ebaa907afdecb2d5967fb4fb1247\">  843</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, aligned_mediump&gt;      <a class=\"code\" href=\"a00303.html#gaa292ebaa907afdecb2d5967fb4fb1247\">aligned_mediump_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00844\"></a><span class=\"lineno\">  844</span>&#160;</div>\n<div class=\"line\"><a name=\"l00846\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad8220a93d2fca2dd707821b4ab6f809e\">  846</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, aligned_lowp&gt;         <a class=\"code\" href=\"a00303.html#gad8220a93d2fca2dd707821b4ab6f809e\">aligned_lowp_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00847\"></a><span class=\"lineno\">  847</span>&#160;</div>\n<div class=\"line\"><a name=\"l00849\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0149fe15668925147e07c94fd2c2d6ae\">  849</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, packed_highp&gt;          <a class=\"code\" href=\"a00303.html#ga0149fe15668925147e07c94fd2c2d6ae\">packed_highp_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00850\"></a><span class=\"lineno\">  850</span>&#160;</div>\n<div class=\"line\"><a name=\"l00852\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf304f64c06743c1571401504d3f50259\">  852</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, packed_mediump&gt;        <a class=\"code\" href=\"a00303.html#gaf304f64c06743c1571401504d3f50259\">packed_mediump_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00853\"></a><span class=\"lineno\">  853</span>&#160;</div>\n<div class=\"line\"><a name=\"l00855\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga776f18d1a6e7d399f05d386167dc60f5\">  855</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, float, packed_lowp&gt;           <a class=\"code\" href=\"a00303.html#ga776f18d1a6e7d399f05d386167dc60f5\">packed_lowp_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00856\"></a><span class=\"lineno\">  856</span>&#160;</div>\n<div class=\"line\"><a name=\"l00858\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2df58e03e5afded28707b4f7d077afb4\">  858</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, packed_highp&gt;         <a class=\"code\" href=\"a00303.html#ga2df58e03e5afded28707b4f7d077afb4\">packed_highp_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00859\"></a><span class=\"lineno\">  859</span>&#160;</div>\n<div class=\"line\"><a name=\"l00861\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga21e86cf2f6c126bacf31b8985db06bd4\">  861</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, packed_mediump&gt;       <a class=\"code\" href=\"a00303.html#ga21e86cf2f6c126bacf31b8985db06bd4\">packed_mediump_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00862\"></a><span class=\"lineno\">  862</span>&#160;</div>\n<div class=\"line\"><a name=\"l00864\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0294d4c45151425c86a11deee7693c0e\">  864</a></span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, double, packed_lowp&gt;          <a class=\"code\" href=\"a00303.html#ga0294d4c45151425c86a11deee7693c0e\">packed_lowp_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00865\"></a><span class=\"lineno\">  865</span>&#160;</div>\n<div class=\"line\"><a name=\"l00866\"></a><span class=\"lineno\">  866</span>&#160;        <span class=\"comment\">// -- default --</span></div>\n<div class=\"line\"><a name=\"l00867\"></a><span class=\"lineno\">  867</span>&#160;</div>\n<div class=\"line\"><a name=\"l00868\"></a><span class=\"lineno\">  868</span>&#160;<span class=\"preprocessor\">#if(defined(GLM_PRECISION_LOWP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00869\"></a><span class=\"lineno\">  869</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_vec1                       <a class=\"code\" href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">aligned_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00870\"></a><span class=\"lineno\">  870</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_vec2                       <a class=\"code\" href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">aligned_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00871\"></a><span class=\"lineno\">  871</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_vec3                       <a class=\"code\" href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">aligned_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00872\"></a><span class=\"lineno\">  872</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_vec4                       <a class=\"code\" href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">aligned_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00873\"></a><span class=\"lineno\">  873</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_vec1                        <a class=\"code\" href=\"a00303.html#ga14741e3d9da9ae83765389927f837331\">packed_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00874\"></a><span class=\"lineno\">  874</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_vec2                        <a class=\"code\" href=\"a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66\">packed_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00875\"></a><span class=\"lineno\">  875</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_vec3                        <a class=\"code\" href=\"a00303.html#gaccccd090e185450caa28b5b63ad4e8f0\">packed_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00876\"></a><span class=\"lineno\">  876</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_vec4                        <a class=\"code\" href=\"a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d\">packed_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00877\"></a><span class=\"lineno\">  877</span>&#160;</div>\n<div class=\"line\"><a name=\"l00878\"></a><span class=\"lineno\">  878</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat2                       <a class=\"code\" href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">aligned_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00879\"></a><span class=\"lineno\">  879</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat3                       <a class=\"code\" href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">aligned_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00880\"></a><span class=\"lineno\">  880</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat4                       <a class=\"code\" href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">aligned_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00881\"></a><span class=\"lineno\">  881</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat2                        <a class=\"code\" href=\"a00303.html#gadd019b43fcf42e1590d45dddaa504a1a\">packed_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00882\"></a><span class=\"lineno\">  882</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat3                        <a class=\"code\" href=\"a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a\">packed_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00883\"></a><span class=\"lineno\">  883</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat4                        <a class=\"code\" href=\"a00303.html#ga2c139854e5b04cf08a957dee3b510441\">packed_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00884\"></a><span class=\"lineno\">  884</span>&#160;</div>\n<div class=\"line\"><a name=\"l00885\"></a><span class=\"lineno\">  885</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat2x2                     <a class=\"code\" href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">aligned_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00886\"></a><span class=\"lineno\">  886</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat2x3                     <a class=\"code\" href=\"a00303.html#ga832476bb1c59ef673db37433ff34e399\">aligned_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00887\"></a><span class=\"lineno\">  887</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat2x4                     <a class=\"code\" href=\"a00303.html#gadab11a7504430825b648ff7c7e36b725\">aligned_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00888\"></a><span class=\"lineno\">  888</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat3x2                     <a class=\"code\" href=\"a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed\">aligned_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00889\"></a><span class=\"lineno\">  889</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat3x3                     <a class=\"code\" href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">aligned_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00890\"></a><span class=\"lineno\">  890</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat3x4                     <a class=\"code\" href=\"a00303.html#ga88061c72c997b94c420f2b0a60d9df26\">aligned_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00891\"></a><span class=\"lineno\">  891</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat4x2                     <a class=\"code\" href=\"a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3\">aligned_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00892\"></a><span class=\"lineno\">  892</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat4x3                     <a class=\"code\" href=\"a00303.html#ga452bbbfd26e244de216e4d004d50bb74\">aligned_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00893\"></a><span class=\"lineno\">  893</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_mat4x4                     <a class=\"code\" href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\">aligned_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00894\"></a><span class=\"lineno\">  894</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat2x2                      <a class=\"code\" href=\"a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517\">packed_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00895\"></a><span class=\"lineno\">  895</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat2x3                      <a class=\"code\" href=\"a00303.html#ga301b76a89b8a9625501ca58815017f20\">packed_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00896\"></a><span class=\"lineno\">  896</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat2x4                      <a class=\"code\" href=\"a00303.html#gac401da1dd9177ad81d7618a2a5541e23\">packed_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00897\"></a><span class=\"lineno\">  897</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat3x2                      <a class=\"code\" href=\"a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa\">packed_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00898\"></a><span class=\"lineno\">  898</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat3x3                      <a class=\"code\" href=\"a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99\">packed_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00899\"></a><span class=\"lineno\">  899</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat3x4                      <a class=\"code\" href=\"a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8\">packed_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00900\"></a><span class=\"lineno\">  900</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat4x2                      <a class=\"code\" href=\"a00303.html#ga379c1153f1339bdeaefd592bebf538e8\">packed_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00901\"></a><span class=\"lineno\">  901</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat4x3                      <a class=\"code\" href=\"a00303.html#gab286466e19f7399c8d25089da9400d43\">packed_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00902\"></a><span class=\"lineno\">  902</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_mat4x4                      <a class=\"code\" href=\"a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374\">packed_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00903\"></a><span class=\"lineno\">  903</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00904\"></a><span class=\"lineno\">  904</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_vec1            <a class=\"code\" href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">aligned_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00905\"></a><span class=\"lineno\">  905</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_vec2            <a class=\"code\" href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">aligned_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00906\"></a><span class=\"lineno\">  906</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_vec3            <a class=\"code\" href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">aligned_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00907\"></a><span class=\"lineno\">  907</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_vec4            <a class=\"code\" href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">aligned_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00908\"></a><span class=\"lineno\">  908</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_vec1                     <a class=\"code\" href=\"a00303.html#ga14741e3d9da9ae83765389927f837331\">packed_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00909\"></a><span class=\"lineno\">  909</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_vec2                     <a class=\"code\" href=\"a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66\">packed_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00910\"></a><span class=\"lineno\">  910</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_vec3                     <a class=\"code\" href=\"a00303.html#gaccccd090e185450caa28b5b63ad4e8f0\">packed_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00911\"></a><span class=\"lineno\">  911</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_vec4                     <a class=\"code\" href=\"a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d\">packed_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00912\"></a><span class=\"lineno\">  912</span>&#160;</div>\n<div class=\"line\"><a name=\"l00913\"></a><span class=\"lineno\">  913</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat2            <a class=\"code\" href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">aligned_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00914\"></a><span class=\"lineno\">  914</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat3            <a class=\"code\" href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">aligned_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00915\"></a><span class=\"lineno\">  915</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat4            <a class=\"code\" href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">aligned_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00916\"></a><span class=\"lineno\">  916</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat2                     <a class=\"code\" href=\"a00303.html#gadd019b43fcf42e1590d45dddaa504a1a\">packed_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00917\"></a><span class=\"lineno\">  917</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat3                     <a class=\"code\" href=\"a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a\">packed_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00918\"></a><span class=\"lineno\">  918</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat4                     <a class=\"code\" href=\"a00303.html#ga2c139854e5b04cf08a957dee3b510441\">packed_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00919\"></a><span class=\"lineno\">  919</span>&#160;</div>\n<div class=\"line\"><a name=\"l00920\"></a><span class=\"lineno\">  920</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat2x2          <a class=\"code\" href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">aligned_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00921\"></a><span class=\"lineno\">  921</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat2x3          <a class=\"code\" href=\"a00303.html#ga832476bb1c59ef673db37433ff34e399\">aligned_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00922\"></a><span class=\"lineno\">  922</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat2x4          <a class=\"code\" href=\"a00303.html#gadab11a7504430825b648ff7c7e36b725\">aligned_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00923\"></a><span class=\"lineno\">  923</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat3x2          <a class=\"code\" href=\"a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed\">aligned_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00924\"></a><span class=\"lineno\">  924</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat3x3          <a class=\"code\" href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">aligned_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00925\"></a><span class=\"lineno\">  925</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat3x4          <a class=\"code\" href=\"a00303.html#ga88061c72c997b94c420f2b0a60d9df26\">aligned_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00926\"></a><span class=\"lineno\">  926</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat4x2          <a class=\"code\" href=\"a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3\">aligned_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00927\"></a><span class=\"lineno\">  927</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat4x3          <a class=\"code\" href=\"a00303.html#ga452bbbfd26e244de216e4d004d50bb74\">aligned_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00928\"></a><span class=\"lineno\">  928</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_mat4x4          <a class=\"code\" href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\">aligned_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00929\"></a><span class=\"lineno\">  929</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat2x2           <a class=\"code\" href=\"a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517\">packed_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00930\"></a><span class=\"lineno\">  930</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat2x3           <a class=\"code\" href=\"a00303.html#ga301b76a89b8a9625501ca58815017f20\">packed_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00931\"></a><span class=\"lineno\">  931</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat2x4           <a class=\"code\" href=\"a00303.html#gac401da1dd9177ad81d7618a2a5541e23\">packed_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00932\"></a><span class=\"lineno\">  932</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat3x2           <a class=\"code\" href=\"a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa\">packed_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00933\"></a><span class=\"lineno\">  933</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat3x3           <a class=\"code\" href=\"a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99\">packed_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00934\"></a><span class=\"lineno\">  934</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat3x4           <a class=\"code\" href=\"a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8\">packed_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00935\"></a><span class=\"lineno\">  935</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat4x2           <a class=\"code\" href=\"a00303.html#ga379c1153f1339bdeaefd592bebf538e8\">packed_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l00936\"></a><span class=\"lineno\">  936</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat4x3           <a class=\"code\" href=\"a00303.html#gab286466e19f7399c8d25089da9400d43\">packed_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l00937\"></a><span class=\"lineno\">  937</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_mat4x4           <a class=\"code\" href=\"a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374\">packed_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l00938\"></a><span class=\"lineno\">  938</span>&#160;<span class=\"preprocessor\">#else //defined(GLM_PRECISION_HIGHP_FLOAT)</span></div>\n<div class=\"line\"><a name=\"l00939\"></a><span class=\"lineno\">  939</span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_vec1                      <a class=\"code\" href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">aligned_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00941\"></a><span class=\"lineno\">  941</span>&#160;</div>\n<div class=\"line\"><a name=\"l00943\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">  943</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_vec2                      <a class=\"code\" href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">aligned_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00944\"></a><span class=\"lineno\">  944</span>&#160;</div>\n<div class=\"line\"><a name=\"l00946\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">  946</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_vec3                      <a class=\"code\" href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">aligned_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00947\"></a><span class=\"lineno\">  947</span>&#160;</div>\n<div class=\"line\"><a name=\"l00949\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">  949</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_vec4                      <a class=\"code\" href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">aligned_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00950\"></a><span class=\"lineno\">  950</span>&#160;</div>\n<div class=\"line\"><a name=\"l00952\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga14741e3d9da9ae83765389927f837331\">  952</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_vec1                       <a class=\"code\" href=\"a00303.html#ga14741e3d9da9ae83765389927f837331\">packed_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00953\"></a><span class=\"lineno\">  953</span>&#160;</div>\n<div class=\"line\"><a name=\"l00955\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66\">  955</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_vec2                       <a class=\"code\" href=\"a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66\">packed_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00956\"></a><span class=\"lineno\">  956</span>&#160;</div>\n<div class=\"line\"><a name=\"l00958\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaccccd090e185450caa28b5b63ad4e8f0\">  958</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_vec3                       <a class=\"code\" href=\"a00303.html#gaccccd090e185450caa28b5b63ad4e8f0\">packed_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00959\"></a><span class=\"lineno\">  959</span>&#160;</div>\n<div class=\"line\"><a name=\"l00961\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d\">  961</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_vec4                       <a class=\"code\" href=\"a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d\">packed_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00962\"></a><span class=\"lineno\">  962</span>&#160;</div>\n<div class=\"line\"><a name=\"l00964\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">  964</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat2                      <a class=\"code\" href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">aligned_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00965\"></a><span class=\"lineno\">  965</span>&#160;</div>\n<div class=\"line\"><a name=\"l00967\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">  967</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat3                      <a class=\"code\" href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">aligned_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00968\"></a><span class=\"lineno\">  968</span>&#160;</div>\n<div class=\"line\"><a name=\"l00970\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">  970</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat4                      <a class=\"code\" href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">aligned_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00971\"></a><span class=\"lineno\">  971</span>&#160;</div>\n<div class=\"line\"><a name=\"l00973\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gadd019b43fcf42e1590d45dddaa504a1a\">  973</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat2                       <a class=\"code\" href=\"a00303.html#gadd019b43fcf42e1590d45dddaa504a1a\">packed_mat2</a>;</div>\n<div class=\"line\"><a name=\"l00974\"></a><span class=\"lineno\">  974</span>&#160;</div>\n<div class=\"line\"><a name=\"l00976\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a\">  976</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat3                       <a class=\"code\" href=\"a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a\">packed_mat3</a>;</div>\n<div class=\"line\"><a name=\"l00977\"></a><span class=\"lineno\">  977</span>&#160;</div>\n<div class=\"line\"><a name=\"l00979\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2c139854e5b04cf08a957dee3b510441\">  979</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat4                       <a class=\"code\" href=\"a00303.html#ga2c139854e5b04cf08a957dee3b510441\">packed_mat4</a>;</div>\n<div class=\"line\"><a name=\"l00980\"></a><span class=\"lineno\">  980</span>&#160;</div>\n<div class=\"line\"><a name=\"l00982\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">  982</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat2x2            <a class=\"code\" href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">aligned_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l00983\"></a><span class=\"lineno\">  983</span>&#160;</div>\n<div class=\"line\"><a name=\"l00985\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga832476bb1c59ef673db37433ff34e399\">  985</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat2x3            <a class=\"code\" href=\"a00303.html#ga832476bb1c59ef673db37433ff34e399\">aligned_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l00986\"></a><span class=\"lineno\">  986</span>&#160;</div>\n<div class=\"line\"><a name=\"l00988\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gadab11a7504430825b648ff7c7e36b725\">  988</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat2x4            <a class=\"code\" href=\"a00303.html#gadab11a7504430825b648ff7c7e36b725\">aligned_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l00989\"></a><span class=\"lineno\">  989</span>&#160;</div>\n<div class=\"line\"><a name=\"l00991\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed\">  991</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat3x2            <a class=\"code\" href=\"a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed\">aligned_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l00992\"></a><span class=\"lineno\">  992</span>&#160;</div>\n<div class=\"line\"><a name=\"l00994\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">  994</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat3x3            <a class=\"code\" href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">aligned_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l00995\"></a><span class=\"lineno\">  995</span>&#160;</div>\n<div class=\"line\"><a name=\"l00997\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga88061c72c997b94c420f2b0a60d9df26\">  997</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat3x4            <a class=\"code\" href=\"a00303.html#ga88061c72c997b94c420f2b0a60d9df26\">aligned_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l00998\"></a><span class=\"lineno\">  998</span>&#160;</div>\n<div class=\"line\"><a name=\"l01000\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3\"> 1000</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat4x2            <a class=\"code\" href=\"a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3\">aligned_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01001\"></a><span class=\"lineno\"> 1001</span>&#160;</div>\n<div class=\"line\"><a name=\"l01003\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga452bbbfd26e244de216e4d004d50bb74\"> 1003</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat4x3            <a class=\"code\" href=\"a00303.html#ga452bbbfd26e244de216e4d004d50bb74\">aligned_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01004\"></a><span class=\"lineno\"> 1004</span>&#160;</div>\n<div class=\"line\"><a name=\"l01006\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\"> 1006</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_mat4x4            <a class=\"code\" href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\">aligned_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01007\"></a><span class=\"lineno\"> 1007</span>&#160;</div>\n<div class=\"line\"><a name=\"l01009\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517\"> 1009</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat2x2                     <a class=\"code\" href=\"a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517\">packed_mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01010\"></a><span class=\"lineno\"> 1010</span>&#160;</div>\n<div class=\"line\"><a name=\"l01012\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga301b76a89b8a9625501ca58815017f20\"> 1012</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat2x3                     <a class=\"code\" href=\"a00303.html#ga301b76a89b8a9625501ca58815017f20\">packed_mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01013\"></a><span class=\"lineno\"> 1013</span>&#160;</div>\n<div class=\"line\"><a name=\"l01015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac401da1dd9177ad81d7618a2a5541e23\"> 1015</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat2x4                     <a class=\"code\" href=\"a00303.html#gac401da1dd9177ad81d7618a2a5541e23\">packed_mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01016\"></a><span class=\"lineno\"> 1016</span>&#160;</div>\n<div class=\"line\"><a name=\"l01018\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa\"> 1018</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat3x2                     <a class=\"code\" href=\"a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa\">packed_mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01019\"></a><span class=\"lineno\"> 1019</span>&#160;</div>\n<div class=\"line\"><a name=\"l01021\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99\"> 1021</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat3x3                     <a class=\"code\" href=\"a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99\">packed_mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01022\"></a><span class=\"lineno\"> 1022</span>&#160;</div>\n<div class=\"line\"><a name=\"l01024\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8\"> 1024</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat3x4                     <a class=\"code\" href=\"a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8\">packed_mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01025\"></a><span class=\"lineno\"> 1025</span>&#160;</div>\n<div class=\"line\"><a name=\"l01027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga379c1153f1339bdeaefd592bebf538e8\"> 1027</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat4x2                     <a class=\"code\" href=\"a00303.html#ga379c1153f1339bdeaefd592bebf538e8\">packed_mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01028\"></a><span class=\"lineno\"> 1028</span>&#160;</div>\n<div class=\"line\"><a name=\"l01030\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab286466e19f7399c8d25089da9400d43\"> 1030</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat4x3                     <a class=\"code\" href=\"a00303.html#gab286466e19f7399c8d25089da9400d43\">packed_mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01031\"></a><span class=\"lineno\"> 1031</span>&#160;</div>\n<div class=\"line\"><a name=\"l01033\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374\"> 1033</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_mat4x4                     <a class=\"code\" href=\"a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374\">packed_mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01034\"></a><span class=\"lineno\"> 1034</span>&#160;<span class=\"preprocessor\">#endif//GLM_PRECISION</span></div>\n<div class=\"line\"><a name=\"l01035\"></a><span class=\"lineno\"> 1035</span>&#160;</div>\n<div class=\"line\"><a name=\"l01036\"></a><span class=\"lineno\"> 1036</span>&#160;<span class=\"preprocessor\">#if(defined(GLM_PRECISION_LOWP_DOUBLE))</span></div>\n<div class=\"line\"><a name=\"l01037\"></a><span class=\"lineno\"> 1037</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dvec1                      <a class=\"code\" href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">aligned_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l01038\"></a><span class=\"lineno\"> 1038</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dvec2                      <a class=\"code\" href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">aligned_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l01039\"></a><span class=\"lineno\"> 1039</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dvec3                      <a class=\"code\" href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">aligned_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l01040\"></a><span class=\"lineno\"> 1040</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dvec4                      <a class=\"code\" href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">aligned_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l01041\"></a><span class=\"lineno\"> 1041</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dvec1                       <a class=\"code\" href=\"a00303.html#ga532f0c940649b1ee303acd572fc35531\">packed_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l01042\"></a><span class=\"lineno\"> 1042</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dvec2                       <a class=\"code\" href=\"a00303.html#ga5c194b11fbda636f2ab20c3bd0079196\">packed_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l01043\"></a><span class=\"lineno\"> 1043</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dvec3                       <a class=\"code\" href=\"a00303.html#ga0581ea552d86b2b5de7a2804bed80e72\">packed_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l01044\"></a><span class=\"lineno\"> 1044</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dvec4                       <a class=\"code\" href=\"a00303.html#gae8a9b181f9dc813ad6e125a52b14b935\">packed_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l01045\"></a><span class=\"lineno\"> 1045</span>&#160;</div>\n<div class=\"line\"><a name=\"l01046\"></a><span class=\"lineno\"> 1046</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat2                      <a class=\"code\" href=\"a00303.html#ga6783859382677d35fcd5dac7dcbefdbd\">aligned_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l01047\"></a><span class=\"lineno\"> 1047</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat3                      <a class=\"code\" href=\"a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de\">aligned_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l01048\"></a><span class=\"lineno\"> 1048</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat4                      <a class=\"code\" href=\"a00303.html#ga001bb387ae8192fa94dbd8b23b600439\">aligned_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l01049\"></a><span class=\"lineno\"> 1049</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat2                       <a class=\"code\" href=\"a00303.html#gad87408a8350918711f845f071bbe43fb\">packed_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l01050\"></a><span class=\"lineno\"> 1050</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat3                       <a class=\"code\" href=\"a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245\">packed_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l01051\"></a><span class=\"lineno\"> 1051</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat4                       <a class=\"code\" href=\"a00303.html#gada980a3485640aa8151f368f17ad3086\">packed_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l01052\"></a><span class=\"lineno\"> 1052</span>&#160;</div>\n<div class=\"line\"><a name=\"l01053\"></a><span class=\"lineno\"> 1053</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat2x2            <a class=\"code\" href=\"a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388\">aligned_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01054\"></a><span class=\"lineno\"> 1054</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat2x3            <a class=\"code\" href=\"a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1\">aligned_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01055\"></a><span class=\"lineno\"> 1055</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat2x4            <a class=\"code\" href=\"a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0\">aligned_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01056\"></a><span class=\"lineno\"> 1056</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat3x2            <a class=\"code\" href=\"a00303.html#ga5f5123d834bd1170edf8c386834e112c\">aligned_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01057\"></a><span class=\"lineno\"> 1057</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat3x3            <a class=\"code\" href=\"a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f\">aligned_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01058\"></a><span class=\"lineno\"> 1058</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat3x4            <a class=\"code\" href=\"a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d\">aligned_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01059\"></a><span class=\"lineno\"> 1059</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat4x2            <a class=\"code\" href=\"a00303.html#gaa409cfb737bd59b68dc683e9b03930cc\">aligned_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01060\"></a><span class=\"lineno\"> 1060</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat4x3            <a class=\"code\" href=\"a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121\">aligned_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01061\"></a><span class=\"lineno\"> 1061</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_dmat4x4            <a class=\"code\" href=\"a00303.html#gac9bda778d0b7ad82f656dab99b71857a\">aligned_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01062\"></a><span class=\"lineno\"> 1062</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat2x2                     <a class=\"code\" href=\"a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9\">packed_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01063\"></a><span class=\"lineno\"> 1063</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat2x3                     <a class=\"code\" href=\"a00303.html#gac3a5315f588ba04ad255188071ec4e22\">packed_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01064\"></a><span class=\"lineno\"> 1064</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat2x4                     <a class=\"code\" href=\"a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4\">packed_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01065\"></a><span class=\"lineno\"> 1065</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat3x2                     <a class=\"code\" href=\"a00303.html#gae36de20a4c0e0b1444b7903ae811d94e\">packed_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01066\"></a><span class=\"lineno\"> 1066</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat3x3                     <a class=\"code\" href=\"a00303.html#gab9b909f1392d86854334350efcae85f5\">packed_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01067\"></a><span class=\"lineno\"> 1067</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat3x4                     <a class=\"code\" href=\"a00303.html#ga199131fd279c92c2ac12df6d978f1dd6\">packed_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01068\"></a><span class=\"lineno\"> 1068</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat4x2                     <a class=\"code\" href=\"a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72\">packed_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01069\"></a><span class=\"lineno\"> 1069</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat4x3                     <a class=\"code\" href=\"a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764\">packed_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01070\"></a><span class=\"lineno\"> 1070</span>&#160;        <span class=\"keyword\">typedef</span> packed_lowp_dmat4x4                     <a class=\"code\" href=\"a00303.html#gae20617435a6d042d7c38da2badd64a09\">packed_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01071\"></a><span class=\"lineno\"> 1071</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))</span></div>\n<div class=\"line\"><a name=\"l01072\"></a><span class=\"lineno\"> 1072</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dvec1           <a class=\"code\" href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">aligned_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l01073\"></a><span class=\"lineno\"> 1073</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dvec2           <a class=\"code\" href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">aligned_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l01074\"></a><span class=\"lineno\"> 1074</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dvec3           <a class=\"code\" href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">aligned_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l01075\"></a><span class=\"lineno\"> 1075</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dvec4           <a class=\"code\" href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">aligned_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l01076\"></a><span class=\"lineno\"> 1076</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dvec1            <a class=\"code\" href=\"a00303.html#ga532f0c940649b1ee303acd572fc35531\">packed_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l01077\"></a><span class=\"lineno\"> 1077</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dvec2            <a class=\"code\" href=\"a00303.html#ga5c194b11fbda636f2ab20c3bd0079196\">packed_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l01078\"></a><span class=\"lineno\"> 1078</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dvec3            <a class=\"code\" href=\"a00303.html#ga0581ea552d86b2b5de7a2804bed80e72\">packed_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l01079\"></a><span class=\"lineno\"> 1079</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dvec4            <a class=\"code\" href=\"a00303.html#gae8a9b181f9dc813ad6e125a52b14b935\">packed_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l01080\"></a><span class=\"lineno\"> 1080</span>&#160;</div>\n<div class=\"line\"><a name=\"l01081\"></a><span class=\"lineno\"> 1081</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat2           <a class=\"code\" href=\"a00303.html#ga6783859382677d35fcd5dac7dcbefdbd\">aligned_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l01082\"></a><span class=\"lineno\"> 1082</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat3           <a class=\"code\" href=\"a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de\">aligned_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l01083\"></a><span class=\"lineno\"> 1083</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat4           <a class=\"code\" href=\"a00303.html#ga001bb387ae8192fa94dbd8b23b600439\">aligned_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l01084\"></a><span class=\"lineno\"> 1084</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat2            <a class=\"code\" href=\"a00303.html#gad87408a8350918711f845f071bbe43fb\">packed_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l01085\"></a><span class=\"lineno\"> 1085</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat3            <a class=\"code\" href=\"a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245\">packed_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l01086\"></a><span class=\"lineno\"> 1086</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat4            <a class=\"code\" href=\"a00303.html#gada980a3485640aa8151f368f17ad3086\">packed_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l01087\"></a><span class=\"lineno\"> 1087</span>&#160;</div>\n<div class=\"line\"><a name=\"l01088\"></a><span class=\"lineno\"> 1088</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat2x2         <a class=\"code\" href=\"a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388\">aligned_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01089\"></a><span class=\"lineno\"> 1089</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat2x3         <a class=\"code\" href=\"a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1\">aligned_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01090\"></a><span class=\"lineno\"> 1090</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat2x4         <a class=\"code\" href=\"a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0\">aligned_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01091\"></a><span class=\"lineno\"> 1091</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat3x2         <a class=\"code\" href=\"a00303.html#ga5f5123d834bd1170edf8c386834e112c\">aligned_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01092\"></a><span class=\"lineno\"> 1092</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat3x3         <a class=\"code\" href=\"a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f\">aligned_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01093\"></a><span class=\"lineno\"> 1093</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat3x4         <a class=\"code\" href=\"a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d\">aligned_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01094\"></a><span class=\"lineno\"> 1094</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat4x2         <a class=\"code\" href=\"a00303.html#gaa409cfb737bd59b68dc683e9b03930cc\">aligned_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01095\"></a><span class=\"lineno\"> 1095</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat4x3         <a class=\"code\" href=\"a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121\">aligned_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01096\"></a><span class=\"lineno\"> 1096</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_dmat4x4         <a class=\"code\" href=\"a00303.html#gac9bda778d0b7ad82f656dab99b71857a\">aligned_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01097\"></a><span class=\"lineno\"> 1097</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat2x2          <a class=\"code\" href=\"a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9\">packed_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01098\"></a><span class=\"lineno\"> 1098</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat2x3          <a class=\"code\" href=\"a00303.html#gac3a5315f588ba04ad255188071ec4e22\">packed_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01099\"></a><span class=\"lineno\"> 1099</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat2x4          <a class=\"code\" href=\"a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4\">packed_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01100\"></a><span class=\"lineno\"> 1100</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat3x2          <a class=\"code\" href=\"a00303.html#gae36de20a4c0e0b1444b7903ae811d94e\">packed_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01101\"></a><span class=\"lineno\"> 1101</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat3x3          <a class=\"code\" href=\"a00303.html#gab9b909f1392d86854334350efcae85f5\">packed_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01102\"></a><span class=\"lineno\"> 1102</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat3x4          <a class=\"code\" href=\"a00303.html#ga199131fd279c92c2ac12df6d978f1dd6\">packed_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01103\"></a><span class=\"lineno\"> 1103</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat4x2          <a class=\"code\" href=\"a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72\">packed_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01104\"></a><span class=\"lineno\"> 1104</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat4x3          <a class=\"code\" href=\"a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764\">packed_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01105\"></a><span class=\"lineno\"> 1105</span>&#160;        <span class=\"keyword\">typedef</span> packed_mediump_dmat4x4          <a class=\"code\" href=\"a00303.html#gae20617435a6d042d7c38da2badd64a09\">packed_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01106\"></a><span class=\"lineno\"> 1106</span>&#160;<span class=\"preprocessor\">#else //defined(GLM_PRECISION_HIGHP_DOUBLE)</span></div>\n<div class=\"line\"><a name=\"l01107\"></a><span class=\"lineno\"> 1107</span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dvec1                     <a class=\"code\" href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">aligned_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l01109\"></a><span class=\"lineno\"> 1109</span>&#160;</div>\n<div class=\"line\"><a name=\"l01111\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\"> 1111</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dvec2                     <a class=\"code\" href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">aligned_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l01112\"></a><span class=\"lineno\"> 1112</span>&#160;</div>\n<div class=\"line\"><a name=\"l01114\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\"> 1114</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dvec3                     <a class=\"code\" href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">aligned_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l01115\"></a><span class=\"lineno\"> 1115</span>&#160;</div>\n<div class=\"line\"><a name=\"l01117\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\"> 1117</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dvec4                     <a class=\"code\" href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">aligned_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l01118\"></a><span class=\"lineno\"> 1118</span>&#160;</div>\n<div class=\"line\"><a name=\"l01120\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga532f0c940649b1ee303acd572fc35531\"> 1120</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dvec1                      <a class=\"code\" href=\"a00303.html#ga532f0c940649b1ee303acd572fc35531\">packed_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l01121\"></a><span class=\"lineno\"> 1121</span>&#160;</div>\n<div class=\"line\"><a name=\"l01123\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5c194b11fbda636f2ab20c3bd0079196\"> 1123</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dvec2                      <a class=\"code\" href=\"a00303.html#ga5c194b11fbda636f2ab20c3bd0079196\">packed_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l01124\"></a><span class=\"lineno\"> 1124</span>&#160;</div>\n<div class=\"line\"><a name=\"l01126\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0581ea552d86b2b5de7a2804bed80e72\"> 1126</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dvec3                      <a class=\"code\" href=\"a00303.html#ga0581ea552d86b2b5de7a2804bed80e72\">packed_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l01127\"></a><span class=\"lineno\"> 1127</span>&#160;</div>\n<div class=\"line\"><a name=\"l01129\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae8a9b181f9dc813ad6e125a52b14b935\"> 1129</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dvec4                      <a class=\"code\" href=\"a00303.html#gae8a9b181f9dc813ad6e125a52b14b935\">packed_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l01130\"></a><span class=\"lineno\"> 1130</span>&#160;</div>\n<div class=\"line\"><a name=\"l01132\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6783859382677d35fcd5dac7dcbefdbd\"> 1132</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat2                     <a class=\"code\" href=\"a00303.html#ga6783859382677d35fcd5dac7dcbefdbd\">aligned_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l01133\"></a><span class=\"lineno\"> 1133</span>&#160;</div>\n<div class=\"line\"><a name=\"l01135\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de\"> 1135</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat3                     <a class=\"code\" href=\"a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de\">aligned_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l01136\"></a><span class=\"lineno\"> 1136</span>&#160;</div>\n<div class=\"line\"><a name=\"l01138\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga001bb387ae8192fa94dbd8b23b600439\"> 1138</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat4                     <a class=\"code\" href=\"a00303.html#ga001bb387ae8192fa94dbd8b23b600439\">aligned_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l01139\"></a><span class=\"lineno\"> 1139</span>&#160;</div>\n<div class=\"line\"><a name=\"l01141\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gad87408a8350918711f845f071bbe43fb\"> 1141</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat2                      <a class=\"code\" href=\"a00303.html#gad87408a8350918711f845f071bbe43fb\">packed_dmat2</a>;</div>\n<div class=\"line\"><a name=\"l01142\"></a><span class=\"lineno\"> 1142</span>&#160;</div>\n<div class=\"line\"><a name=\"l01144\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245\"> 1144</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat3                      <a class=\"code\" href=\"a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245\">packed_dmat3</a>;</div>\n<div class=\"line\"><a name=\"l01145\"></a><span class=\"lineno\"> 1145</span>&#160;</div>\n<div class=\"line\"><a name=\"l01147\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gada980a3485640aa8151f368f17ad3086\"> 1147</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat4                      <a class=\"code\" href=\"a00303.html#gada980a3485640aa8151f368f17ad3086\">packed_dmat4</a>;</div>\n<div class=\"line\"><a name=\"l01148\"></a><span class=\"lineno\"> 1148</span>&#160;</div>\n<div class=\"line\"><a name=\"l01150\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388\"> 1150</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat2x2           <a class=\"code\" href=\"a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388\">aligned_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01151\"></a><span class=\"lineno\"> 1151</span>&#160;</div>\n<div class=\"line\"><a name=\"l01153\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1\"> 1153</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat2x3           <a class=\"code\" href=\"a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1\">aligned_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01154\"></a><span class=\"lineno\"> 1154</span>&#160;</div>\n<div class=\"line\"><a name=\"l01156\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0\"> 1156</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat2x4           <a class=\"code\" href=\"a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0\">aligned_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01157\"></a><span class=\"lineno\"> 1157</span>&#160;</div>\n<div class=\"line\"><a name=\"l01159\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5f5123d834bd1170edf8c386834e112c\"> 1159</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat3x2           <a class=\"code\" href=\"a00303.html#ga5f5123d834bd1170edf8c386834e112c\">aligned_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01160\"></a><span class=\"lineno\"> 1160</span>&#160;</div>\n<div class=\"line\"><a name=\"l01162\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f\"> 1162</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat3x3           <a class=\"code\" href=\"a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f\">aligned_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01163\"></a><span class=\"lineno\"> 1163</span>&#160;</div>\n<div class=\"line\"><a name=\"l01165\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d\"> 1165</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat3x4           <a class=\"code\" href=\"a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d\">aligned_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01166\"></a><span class=\"lineno\"> 1166</span>&#160;</div>\n<div class=\"line\"><a name=\"l01168\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaa409cfb737bd59b68dc683e9b03930cc\"> 1168</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat4x2           <a class=\"code\" href=\"a00303.html#gaa409cfb737bd59b68dc683e9b03930cc\">aligned_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01169\"></a><span class=\"lineno\"> 1169</span>&#160;</div>\n<div class=\"line\"><a name=\"l01171\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121\"> 1171</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat4x3           <a class=\"code\" href=\"a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121\">aligned_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01172\"></a><span class=\"lineno\"> 1172</span>&#160;</div>\n<div class=\"line\"><a name=\"l01174\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac9bda778d0b7ad82f656dab99b71857a\"> 1174</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_dmat4x4           <a class=\"code\" href=\"a00303.html#gac9bda778d0b7ad82f656dab99b71857a\">aligned_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01175\"></a><span class=\"lineno\"> 1175</span>&#160;</div>\n<div class=\"line\"><a name=\"l01177\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9\"> 1177</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat2x2            <a class=\"code\" href=\"a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9\">packed_dmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01178\"></a><span class=\"lineno\"> 1178</span>&#160;</div>\n<div class=\"line\"><a name=\"l01180\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac3a5315f588ba04ad255188071ec4e22\"> 1180</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat2x3            <a class=\"code\" href=\"a00303.html#gac3a5315f588ba04ad255188071ec4e22\">packed_dmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01181\"></a><span class=\"lineno\"> 1181</span>&#160;</div>\n<div class=\"line\"><a name=\"l01183\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4\"> 1183</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat2x4            <a class=\"code\" href=\"a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4\">packed_dmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01184\"></a><span class=\"lineno\"> 1184</span>&#160;</div>\n<div class=\"line\"><a name=\"l01186\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae36de20a4c0e0b1444b7903ae811d94e\"> 1186</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat3x2            <a class=\"code\" href=\"a00303.html#gae36de20a4c0e0b1444b7903ae811d94e\">packed_dmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01187\"></a><span class=\"lineno\"> 1187</span>&#160;</div>\n<div class=\"line\"><a name=\"l01189\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab9b909f1392d86854334350efcae85f5\"> 1189</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat3x3            <a class=\"code\" href=\"a00303.html#gab9b909f1392d86854334350efcae85f5\">packed_dmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01190\"></a><span class=\"lineno\"> 1190</span>&#160;</div>\n<div class=\"line\"><a name=\"l01192\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga199131fd279c92c2ac12df6d978f1dd6\"> 1192</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat3x4            <a class=\"code\" href=\"a00303.html#ga199131fd279c92c2ac12df6d978f1dd6\">packed_dmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01193\"></a><span class=\"lineno\"> 1193</span>&#160;</div>\n<div class=\"line\"><a name=\"l01195\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72\"> 1195</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat4x2            <a class=\"code\" href=\"a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72\">packed_dmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01196\"></a><span class=\"lineno\"> 1196</span>&#160;</div>\n<div class=\"line\"><a name=\"l01198\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764\"> 1198</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat4x3            <a class=\"code\" href=\"a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764\">packed_dmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01199\"></a><span class=\"lineno\"> 1199</span>&#160;</div>\n<div class=\"line\"><a name=\"l01201\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae20617435a6d042d7c38da2badd64a09\"> 1201</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_dmat4x4            <a class=\"code\" href=\"a00303.html#gae20617435a6d042d7c38da2badd64a09\">packed_dmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01202\"></a><span class=\"lineno\"> 1202</span>&#160;<span class=\"preprocessor\">#endif//GLM_PRECISION</span></div>\n<div class=\"line\"><a name=\"l01203\"></a><span class=\"lineno\"> 1203</span>&#160;</div>\n<div class=\"line\"><a name=\"l01204\"></a><span class=\"lineno\"> 1204</span>&#160;<span class=\"preprocessor\">#if(defined(GLM_PRECISION_LOWP_INT))</span></div>\n<div class=\"line\"><a name=\"l01205\"></a><span class=\"lineno\"> 1205</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_ivec1                      <a class=\"code\" href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">aligned_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l01206\"></a><span class=\"lineno\"> 1206</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_ivec2                      <a class=\"code\" href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">aligned_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l01207\"></a><span class=\"lineno\"> 1207</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_ivec3                      <a class=\"code\" href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">aligned_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l01208\"></a><span class=\"lineno\"> 1208</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_ivec4                      <a class=\"code\" href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">aligned_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l01209\"></a><span class=\"lineno\"> 1209</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_MEDIUMP_INT))</span></div>\n<div class=\"line\"><a name=\"l01210\"></a><span class=\"lineno\"> 1210</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_ivec1           <a class=\"code\" href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">aligned_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l01211\"></a><span class=\"lineno\"> 1211</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_ivec2           <a class=\"code\" href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">aligned_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l01212\"></a><span class=\"lineno\"> 1212</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_ivec3           <a class=\"code\" href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">aligned_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l01213\"></a><span class=\"lineno\"> 1213</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_ivec4           <a class=\"code\" href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">aligned_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l01214\"></a><span class=\"lineno\"> 1214</span>&#160;<span class=\"preprocessor\">#else //defined(GLM_PRECISION_HIGHP_INT)</span></div>\n<div class=\"line\"><a name=\"l01215\"></a><span class=\"lineno\"> 1215</span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_ivec1                     <a class=\"code\" href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">aligned_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l01217\"></a><span class=\"lineno\"> 1217</span>&#160;</div>\n<div class=\"line\"><a name=\"l01219\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\"> 1219</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_ivec2                     <a class=\"code\" href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">aligned_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l01220\"></a><span class=\"lineno\"> 1220</span>&#160;</div>\n<div class=\"line\"><a name=\"l01222\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\"> 1222</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_ivec3                     <a class=\"code\" href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">aligned_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l01223\"></a><span class=\"lineno\"> 1223</span>&#160;</div>\n<div class=\"line\"><a name=\"l01225\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\"> 1225</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_ivec4                     <a class=\"code\" href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">aligned_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l01226\"></a><span class=\"lineno\"> 1226</span>&#160;</div>\n<div class=\"line\"><a name=\"l01228\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga11581a06fc7bf941fa4d4b6aca29812c\"> 1228</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_ivec1                      <a class=\"code\" href=\"a00303.html#ga11581a06fc7bf941fa4d4b6aca29812c\">packed_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l01229\"></a><span class=\"lineno\"> 1229</span>&#160;</div>\n<div class=\"line\"><a name=\"l01231\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga1fe4c5f56b8087d773aa90dc88a257a7\"> 1231</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_ivec2                      <a class=\"code\" href=\"a00303.html#ga1fe4c5f56b8087d773aa90dc88a257a7\">packed_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l01232\"></a><span class=\"lineno\"> 1232</span>&#160;</div>\n<div class=\"line\"><a name=\"l01234\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae157682a7847161787951ba1db4cf325\"> 1234</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_ivec3                      <a class=\"code\" href=\"a00303.html#gae157682a7847161787951ba1db4cf325\">packed_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l01235\"></a><span class=\"lineno\"> 1235</span>&#160;</div>\n<div class=\"line\"><a name=\"l01237\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gac228b70372abd561340d5f926a7c1778\"> 1237</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_ivec4                      <a class=\"code\" href=\"a00303.html#gac228b70372abd561340d5f926a7c1778\">packed_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l01238\"></a><span class=\"lineno\"> 1238</span>&#160;<span class=\"preprocessor\">#endif//GLM_PRECISION</span></div>\n<div class=\"line\"><a name=\"l01239\"></a><span class=\"lineno\"> 1239</span>&#160;</div>\n<div class=\"line\"><a name=\"l01240\"></a><span class=\"lineno\"> 1240</span>&#160;        <span class=\"comment\">// -- Unsigned integer definition --</span></div>\n<div class=\"line\"><a name=\"l01241\"></a><span class=\"lineno\"> 1241</span>&#160;</div>\n<div class=\"line\"><a name=\"l01242\"></a><span class=\"lineno\"> 1242</span>&#160;<span class=\"preprocessor\">#if(defined(GLM_PRECISION_LOWP_UINT))</span></div>\n<div class=\"line\"><a name=\"l01243\"></a><span class=\"lineno\"> 1243</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_uvec1                      <a class=\"code\" href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">aligned_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l01244\"></a><span class=\"lineno\"> 1244</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_uvec2                      <a class=\"code\" href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">aligned_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l01245\"></a><span class=\"lineno\"> 1245</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_uvec3                      <a class=\"code\" href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">aligned_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l01246\"></a><span class=\"lineno\"> 1246</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_uvec4                      <a class=\"code\" href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">aligned_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l01247\"></a><span class=\"lineno\"> 1247</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_MEDIUMP_UINT))</span></div>\n<div class=\"line\"><a name=\"l01248\"></a><span class=\"lineno\"> 1248</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_uvec1           <a class=\"code\" href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">aligned_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l01249\"></a><span class=\"lineno\"> 1249</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_uvec2           <a class=\"code\" href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">aligned_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l01250\"></a><span class=\"lineno\"> 1250</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_uvec3           <a class=\"code\" href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">aligned_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l01251\"></a><span class=\"lineno\"> 1251</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_uvec4           <a class=\"code\" href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">aligned_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l01252\"></a><span class=\"lineno\"> 1252</span>&#160;<span class=\"preprocessor\">#else //defined(GLM_PRECISION_HIGHP_UINT)</span></div>\n<div class=\"line\"><a name=\"l01253\"></a><span class=\"lineno\"> 1253</span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_uvec1                     <a class=\"code\" href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">aligned_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l01255\"></a><span class=\"lineno\"> 1255</span>&#160;</div>\n<div class=\"line\"><a name=\"l01257\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga074137e3be58528d67041c223d49f398\"> 1257</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_uvec2                     <a class=\"code\" href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">aligned_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l01258\"></a><span class=\"lineno\"> 1258</span>&#160;</div>\n<div class=\"line\"><a name=\"l01260\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\"> 1260</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_uvec3                     <a class=\"code\" href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">aligned_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l01261\"></a><span class=\"lineno\"> 1261</span>&#160;</div>\n<div class=\"line\"><a name=\"l01263\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\"> 1263</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_uvec4                     <a class=\"code\" href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">aligned_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l01264\"></a><span class=\"lineno\"> 1264</span>&#160;</div>\n<div class=\"line\"><a name=\"l01266\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga5621493caac01bdd22ab6be4416b0314\"> 1266</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_uvec1                      <a class=\"code\" href=\"a00303.html#ga5621493caac01bdd22ab6be4416b0314\">packed_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l01267\"></a><span class=\"lineno\"> 1267</span>&#160;</div>\n<div class=\"line\"><a name=\"l01269\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gabcc33efb4d5e83b8fe4706360e75b932\"> 1269</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_uvec2                      <a class=\"code\" href=\"a00303.html#gabcc33efb4d5e83b8fe4706360e75b932\">packed_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l01270\"></a><span class=\"lineno\"> 1270</span>&#160;</div>\n<div class=\"line\"><a name=\"l01272\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab96804e99e3a72a35740fec690c79617\"> 1272</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_uvec3                      <a class=\"code\" href=\"a00303.html#gab96804e99e3a72a35740fec690c79617\">packed_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l01273\"></a><span class=\"lineno\"> 1273</span>&#160;</div>\n<div class=\"line\"><a name=\"l01275\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"> 1275</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_uvec4                      <a class=\"code\" href=\"a00303.html#ga8e5d92e84ebdbe2480cf96bc17d6e2f2\">packed_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l01276\"></a><span class=\"lineno\"> 1276</span>&#160;<span class=\"preprocessor\">#endif//GLM_PRECISION</span></div>\n<div class=\"line\"><a name=\"l01277\"></a><span class=\"lineno\"> 1277</span>&#160;</div>\n<div class=\"line\"><a name=\"l01278\"></a><span class=\"lineno\"> 1278</span>&#160;<span class=\"preprocessor\">#if(defined(GLM_PRECISION_LOWP_BOOL))</span></div>\n<div class=\"line\"><a name=\"l01279\"></a><span class=\"lineno\"> 1279</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_bvec1                      <a class=\"code\" href=\"a00303.html#ga780a35f764020f553a9601a3fcdcd059\">aligned_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l01280\"></a><span class=\"lineno\"> 1280</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_bvec2                      <a class=\"code\" href=\"a00303.html#gae766b317c5afec852bfb3d74a3c54bc8\">aligned_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l01281\"></a><span class=\"lineno\"> 1281</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_bvec3                      <a class=\"code\" href=\"a00303.html#gae1964ba70d15915e5b710926decbb3cb\">aligned_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l01282\"></a><span class=\"lineno\"> 1282</span>&#160;        <span class=\"keyword\">typedef</span> aligned_lowp_bvec4                      <a class=\"code\" href=\"a00303.html#gae164a1f7879f828bc35e50b79d786b05\">aligned_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l01283\"></a><span class=\"lineno\"> 1283</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_MEDIUMP_BOOL))</span></div>\n<div class=\"line\"><a name=\"l01284\"></a><span class=\"lineno\"> 1284</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_bvec1           <a class=\"code\" href=\"a00303.html#ga780a35f764020f553a9601a3fcdcd059\">aligned_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l01285\"></a><span class=\"lineno\"> 1285</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_bvec2           <a class=\"code\" href=\"a00303.html#gae766b317c5afec852bfb3d74a3c54bc8\">aligned_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l01286\"></a><span class=\"lineno\"> 1286</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_bvec3           <a class=\"code\" href=\"a00303.html#gae1964ba70d15915e5b710926decbb3cb\">aligned_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l01287\"></a><span class=\"lineno\"> 1287</span>&#160;        <span class=\"keyword\">typedef</span> aligned_mediump_bvec4           <a class=\"code\" href=\"a00303.html#gae164a1f7879f828bc35e50b79d786b05\">aligned_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l01288\"></a><span class=\"lineno\"> 1288</span>&#160;<span class=\"preprocessor\">#else //defined(GLM_PRECISION_HIGHP_BOOL)</span></div>\n<div class=\"line\"><a name=\"l01289\"></a><span class=\"lineno\"> 1289</span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_bvec1                     <a class=\"code\" href=\"a00303.html#ga780a35f764020f553a9601a3fcdcd059\">aligned_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l01291\"></a><span class=\"lineno\"> 1291</span>&#160;</div>\n<div class=\"line\"><a name=\"l01293\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae766b317c5afec852bfb3d74a3c54bc8\"> 1293</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_bvec2                     <a class=\"code\" href=\"a00303.html#gae766b317c5afec852bfb3d74a3c54bc8\">aligned_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l01294\"></a><span class=\"lineno\"> 1294</span>&#160;</div>\n<div class=\"line\"><a name=\"l01296\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae1964ba70d15915e5b710926decbb3cb\"> 1296</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_bvec3                     <a class=\"code\" href=\"a00303.html#gae1964ba70d15915e5b710926decbb3cb\">aligned_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l01297\"></a><span class=\"lineno\"> 1297</span>&#160;</div>\n<div class=\"line\"><a name=\"l01299\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gae164a1f7879f828bc35e50b79d786b05\"> 1299</a></span>&#160;        <span class=\"keyword\">typedef</span> aligned_highp_bvec4                     <a class=\"code\" href=\"a00303.html#gae164a1f7879f828bc35e50b79d786b05\">aligned_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l01300\"></a><span class=\"lineno\"> 1300</span>&#160;</div>\n<div class=\"line\"><a name=\"l01302\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga88632cea9008ac0ac1388e94e804a53c\"> 1302</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_bvec1                      <a class=\"code\" href=\"a00303.html#ga88632cea9008ac0ac1388e94e804a53c\">packed_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l01303\"></a><span class=\"lineno\"> 1303</span>&#160;</div>\n<div class=\"line\"><a name=\"l01305\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#gab85245913eaa40ab82adabcae37086cb\"> 1305</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_bvec2                      <a class=\"code\" href=\"a00303.html#gab85245913eaa40ab82adabcae37086cb\">packed_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l01306\"></a><span class=\"lineno\"> 1306</span>&#160;</div>\n<div class=\"line\"><a name=\"l01308\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga0c48f9417f649e27f3fb0c9f733a18bd\"> 1308</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_bvec3                      <a class=\"code\" href=\"a00303.html#ga0c48f9417f649e27f3fb0c9f733a18bd\">packed_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l01309\"></a><span class=\"lineno\"> 1309</span>&#160;</div>\n<div class=\"line\"><a name=\"l01311\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00303.html#ga3180d7db84a74c402157df3bbc0ae3ed\"> 1311</a></span>&#160;        <span class=\"keyword\">typedef</span> packed_highp_bvec4                      <a class=\"code\" href=\"a00303.html#ga3180d7db84a74c402157df3bbc0ae3ed\">packed_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l01312\"></a><span class=\"lineno\"> 1312</span>&#160;<span class=\"preprocessor\">#endif//GLM_PRECISION</span></div>\n<div class=\"line\"><a name=\"l01313\"></a><span class=\"lineno\"> 1313</span>&#160;</div>\n<div class=\"line\"><a name=\"l01315\"></a><span class=\"lineno\"> 1315</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00303_html_gab96804e99e3a72a35740fec690c79617\"><div class=\"ttname\"><a href=\"a00303.html#gab96804e99e3a72a35740fec690c79617\">glm::packed_uvec3</a></div><div class=\"ttdeci\">packed_highp_uvec3 packed_uvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01272\">gtc/type_aligned.hpp:1272</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga51eaadcdc292c8750f746a5dc3e6c517\"><div class=\"ttname\"><a href=\"a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517\">glm::packed_mat2x2</a></div><div class=\"ttdeci\">packed_highp_mat2x2 packed_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01009\">gtc/type_aligned.hpp:1009</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa694fab1f8df5f658846573ba8ffc563\"><div class=\"ttname\"><a href=\"a00303.html#gaa694fab1f8df5f658846573ba8ffc563\">glm::aligned_lowp_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, aligned_lowp &gt; aligned_lowp_mat2x4</div><div class=\"ttdoc\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00609\">gtc/type_aligned.hpp:609</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa7a76555ee4853614e5755181a8dd54e\"><div class=\"ttname\"><a href=\"a00303.html#gaa7a76555ee4853614e5755181a8dd54e\">glm::aligned_lowp_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, aligned_lowp &gt; aligned_lowp_bvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00363\">gtc/type_aligned.hpp:363</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga81b5368fe485e2630aa9b44832d592e7\"><div class=\"ttname\"><a href=\"a00303.html#ga81b5368fe485e2630aa9b44832d592e7\">glm::packed_highp_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, packed_highp &gt; packed_highp_dvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of double-precision floating-point numbers using high pr...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00375\">gtc/type_aligned.hpp:375</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac3a5315f588ba04ad255188071ec4e22\"><div class=\"ttname\"><a href=\"a00303.html#gac3a5315f588ba04ad255188071ec4e22\">glm::packed_dmat2x3</a></div><div class=\"ttdeci\">packed_highp_dmat2x3 packed_dmat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01180\">gtc/type_aligned.hpp:1180</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7c20adbe1409e3fe4544677a7f6fe954\"><div class=\"ttname\"><a href=\"a00303.html#ga7c20adbe1409e3fe4544677a7f6fe954\">glm::packed_lowp_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, packed_lowp &gt; packed_lowp_bvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00316\">gtc/type_aligned.hpp:316</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2c139854e5b04cf08a957dee3b510441\"><div class=\"ttname\"><a href=\"a00303.html#ga2c139854e5b04cf08a957dee3b510441\">glm::packed_mat4</a></div><div class=\"ttdeci\">packed_highp_mat4 packed_mat4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00979\">gtc/type_aligned.hpp:979</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga074137e3be58528d67041c223d49f398\"><div class=\"ttname\"><a href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">glm::aligned_uvec2</a></div><div class=\"ttdeci\">aligned_highp_uvec2 aligned_uvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01257\">gtc/type_aligned.hpp:1257</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga59fadcd3835646e419372ae8b43c5d37\"><div class=\"ttname\"><a href=\"a00303.html#ga59fadcd3835646e419372ae8b43c5d37\">glm::aligned_lowp_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, aligned_lowp &gt; aligned_lowp_bvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00179\">gtc/type_aligned.hpp:179</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga865a9c7bb22434b1b8c5ac31e164b628\"><div class=\"ttname\"><a href=\"a00303.html#ga865a9c7bb22434b1b8c5ac31e164b628\">glm::packed_highp_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, packed_highp &gt; packed_highp_ivec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00292\">gtc/type_aligned.hpp:292</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga12e39e797fb724a5b51fcbea2513a7da\"><div class=\"ttname\"><a href=\"a00303.html#ga12e39e797fb724a5b51fcbea2513a7da\">glm::packed_highp_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, packed_highp &gt; packed_highp_dmat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00782\">gtc/type_aligned.hpp:782</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad87408a8350918711f845f071bbe43fb\"><div class=\"ttname\"><a href=\"a00303.html#gad87408a8350918711f845f071bbe43fb\">glm::packed_dmat2</a></div><div class=\"ttdeci\">packed_highp_dmat2 packed_dmat2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01141\">gtc/type_aligned.hpp:1141</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadac7c040c4810dd52b36fcd09d097400\"><div class=\"ttname\"><a href=\"a00303.html#gadac7c040c4810dd52b36fcd09d097400\">glm::packed_highp_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, packed_highp &gt; packed_highp_dmat3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00478\">gtc/type_aligned.hpp:478</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7e96981e872f17a780d9f1c22dc1f512\"><div class=\"ttname\"><a href=\"a00303.html#ga7e96981e872f17a780d9f1c22dc1f512\">glm::aligned_lowp_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, aligned_lowp &gt; aligned_lowp_mat4x3</div><div class=\"ttdoc\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00799\">gtc/type_aligned.hpp:799</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6998ac2a8d7fe456b651a6336ed26bb0\"><div class=\"ttname\"><a href=\"a00303.html#ga6998ac2a8d7fe456b651a6336ed26bb0\">glm::packed_highp_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, packed_highp &gt; packed_highp_dmat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00630\">gtc/type_aligned.hpp:630</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaea13d89d49daca2c796aeaa82fc2c2f2\"><div class=\"ttname\"><a href=\"a00303.html#gaea13d89d49daca2c796aeaa82fc2c2f2\">glm::aligned_mediump_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, aligned_mediump &gt; aligned_mediump_ivec2</div><div class=\"ttdoc\">2 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00158\">gtc/type_aligned.hpp:158</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga02ca6255394aa778abaeb0f733c4d2b6\"><div class=\"ttname\"><a href=\"a00303.html#ga02ca6255394aa778abaeb0f733c4d2b6\">glm::packed_mediump_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, packed_mediump &gt; packed_mediump_mat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00814\">gtc/type_aligned.hpp:814</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae157682a7847161787951ba1db4cf325\"><div class=\"ttname\"><a href=\"a00303.html#gae157682a7847161787951ba1db4cf325\">glm::packed_ivec3</a></div><div class=\"ttdeci\">packed_highp_ivec3 packed_ivec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01234\">gtc/type_aligned.hpp:1234</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga683c8ca66de323ea533a760abedd0efc\"><div class=\"ttname\"><a href=\"a00303.html#ga683c8ca66de323ea533a760abedd0efc\">glm::aligned_highp_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, aligned_highp &gt; aligned_highp_dmat3x4</div><div class=\"ttdoc\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00726\">gtc/type_aligned.hpp:726</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf85877d38d8cfbc21d59d939afd72375\"><div class=\"ttname\"><a href=\"a00303.html#gaf85877d38d8cfbc21d59d939afd72375\">glm::packed_mediump_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, packed_mediump &gt; packed_mediump_dmat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00709\">gtc/type_aligned.hpp:709</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadd019b43fcf42e1590d45dddaa504a1a\"><div class=\"ttname\"><a href=\"a00303.html#gadd019b43fcf42e1590d45dddaa504a1a\">glm::packed_mat2</a></div><div class=\"ttdeci\">packed_highp_mat2 packed_mat2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00973\">gtc/type_aligned.hpp:973</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8fc0e66da83599071b7ec17510686cd9\"><div class=\"ttname\"><a href=\"a00303.html#ga8fc0e66da83599071b7ec17510686cd9\">glm::packed_lowp_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, packed_lowp &gt; packed_lowp_dmat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00750\">gtc/type_aligned.hpp:750</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga026a55ddbf2bafb1432f1157a2708616\"><div class=\"ttname\"><a href=\"a00303.html#ga026a55ddbf2bafb1432f1157a2708616\">glm::aligned_mediump_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, aligned_mediump &gt; aligned_mediump_vec2</div><div class=\"ttdoc\">2 components vector aligned in memory of single-precision floating-point numbers using medium precisi...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00140\">gtc/type_aligned.hpp:140</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadae3dcfc22d28c64d0548cbfd9d08719\"><div class=\"ttname\"><a href=\"a00303.html#gadae3dcfc22d28c64d0548cbfd9d08719\">glm::aligned_lowp_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, aligned_lowp &gt; aligned_lowp_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00837\">gtc/type_aligned.hpp:837</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9bc12b0ab7be8448836711b77cc7b83a\"><div class=\"ttname\"><a href=\"a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a\">glm::packed_mat3</a></div><div class=\"ttdeci\">packed_highp_mat3 packed_mat3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00976\">gtc/type_aligned.hpp:976</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gada980a3485640aa8151f368f17ad3086\"><div class=\"ttname\"><a href=\"a00303.html#gada980a3485640aa8151f368f17ad3086\">glm::packed_dmat4</a></div><div class=\"ttdeci\">packed_highp_dmat4 packed_dmat4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01147\">gtc/type_aligned.hpp:1147</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga37a0e0bf653169b581c5eea3d547fa5d\"><div class=\"ttname\"><a href=\"a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d\">glm::packed_vec4</a></div><div class=\"ttdeci\">packed_highp_vec4 packed_vec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00961\">gtc/type_aligned.hpp:961</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7cb26d354dd69d23849c34c4fba88da9\"><div class=\"ttname\"><a href=\"a00303.html#ga7cb26d354dd69d23849c34c4fba88da9\">glm::aligned_highp_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, aligned_highp &gt; aligned_highp_vec4</div><div class=\"ttdoc\">4 components vector aligned in memory of single-precision floating-point numbers using high precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00321\">gtc/type_aligned.hpp:321</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2df58e03e5afded28707b4f7d077afb4\"><div class=\"ttname\"><a href=\"a00303.html#ga2df58e03e5afded28707b4f7d077afb4\">glm::packed_highp_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, packed_highp &gt; packed_highp_dmat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00858\">gtc/type_aligned.hpp:858</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7180b685c581adb224406a7f831608e3\"><div class=\"ttname\"><a href=\"a00303.html#ga7180b685c581adb224406a7f831608e3\">glm::aligned_mediump_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, aligned_mediump &gt; aligned_mediump_dvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of double-precision floating-point numbers using medium precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00057\">gtc/type_aligned.hpp:57</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga66073b1ddef34b681741f572338ddb8e\"><div class=\"ttname\"><a href=\"a00303.html#ga66073b1ddef34b681741f572338ddb8e\">glm::aligned_highp_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, aligned_highp &gt; aligned_highp_dmat3x3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00688\">gtc/type_aligned.hpp:688</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0581ea552d86b2b5de7a2804bed80e72\"><div class=\"ttname\"><a href=\"a00303.html#ga0581ea552d86b2b5de7a2804bed80e72\">glm::packed_dvec3</a></div><div class=\"ttdeci\">packed_highp_dvec3 packed_dvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01126\">gtc/type_aligned.hpp:1126</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8920e90ea9c01d9c97e604a938ce2cbd\"><div class=\"ttname\"><a href=\"a00303.html#ga8920e90ea9c01d9c97e604a938ce2cbd\">glm::packed_mediump_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, packed_mediump &gt; packed_mediump_dvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of double-precision floating-point numbers using medium p...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00102\">gtc/type_aligned.hpp:102</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5621493caac01bdd22ab6be4416b0314\"><div class=\"ttname\"><a href=\"a00303.html#ga5621493caac01bdd22ab6be4416b0314\">glm::packed_uvec1</a></div><div class=\"ttdeci\">packed_highp_uvec1 packed_uvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01266\">gtc/type_aligned.hpp:1266</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga92247ca09fa03c4013ba364f3a0fca7f\"><div class=\"ttname\"><a href=\"a00303.html#ga92247ca09fa03c4013ba364f3a0fca7f\">glm::packed_lowp_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, packed_lowp &gt; packed_lowp_mat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00741\">gtc/type_aligned.hpp:741</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad09b93acc43c43423408d17a64f6d7ca\"><div class=\"ttname\"><a href=\"a00303.html#gad09b93acc43c43423408d17a64f6d7ca\">glm::aligned_lowp_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, uint, aligned_lowp &gt; aligned_lowp_uvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00078\">gtc/type_aligned.hpp:78</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac870c47d2d9d48503f6c9ee3baec8ce1\"><div class=\"ttname\"><a href=\"a00303.html#gac870c47d2d9d48503f6c9ee3baec8ce1\">glm::packed_lowp_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, packed_lowp &gt; packed_lowp_dmat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00636\">gtc/type_aligned.hpp:636</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga32794322d294e5ace7fed4a61896f270\"><div class=\"ttname\"><a href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">glm::aligned_ivec3</a></div><div class=\"ttdeci\">aligned_highp_ivec3 aligned_ivec3</div><div class=\"ttdoc\">3 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01222\">gtc/type_aligned.hpp:1222</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2c67b3b0adab71c8680c3d819f1fa9b7\"><div class=\"ttname\"><a href=\"a00303.html#ga2c67b3b0adab71c8680c3d819f1fa9b7\">glm::packed_highp_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, packed_highp &gt; packed_highp_dmat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00744\">gtc/type_aligned.hpp:744</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3254defa5a8f0ae4b02b45fedba84a66\"><div class=\"ttname\"><a href=\"a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66\">glm::packed_vec2</a></div><div class=\"ttdeci\">packed_highp_vec2 packed_vec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00955\">gtc/type_aligned.hpp:955</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8c32b53f628a3616aa5061e58d66fe74\"><div class=\"ttname\"><a href=\"a00303.html#ga8c32b53f628a3616aa5061e58d66fe74\">glm::packed_highp_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, uint, packed_highp &gt; packed_highp_uvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00117\">gtc/type_aligned.hpp:117</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac70667c7642ec8d50245e6e6936a3927\"><div class=\"ttname\"><a href=\"a00303.html#gac70667c7642ec8d50245e6e6936a3927\">glm::packed_lowp_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, packed_lowp &gt; packed_lowp_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00551\">gtc/type_aligned.hpp:551</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga439e97795314b81cd15abd4e5c2e6e7a\"><div class=\"ttname\"><a href=\"a00303.html#ga439e97795314b81cd15abd4e5c2e6e7a\">glm::packed_highp_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, packed_highp &gt; packed_highp_bvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00126\">gtc/type_aligned.hpp:126</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae164a1f7879f828bc35e50b79d786b05\"><div class=\"ttname\"><a href=\"a00303.html#gae164a1f7879f828bc35e50b79d786b05\">glm::aligned_bvec4</a></div><div class=\"ttdeci\">aligned_highp_bvec4 aligned_bvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01299\">gtc/type_aligned.hpp:1299</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7cf643b66664e0cd3c48759ae66c2bd0\"><div class=\"ttname\"><a href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">glm::aligned_vec3</a></div><div class=\"ttdeci\">aligned_highp_vec3 aligned_vec3</div><div class=\"ttdoc\">3 components vector aligned in memory of single-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00946\">gtc/type_aligned.hpp:946</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"><div class=\"ttname\"><a href=\"a00303.html#ga4a7c7d8c3a663d0ec2a858cbfa14e54c\">glm::packed_lowp_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, packed_lowp &gt; packed_lowp_dmat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00712\">gtc/type_aligned.hpp:712</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2a8d9c3046f89d854eb758adfa0811c0\"><div class=\"ttname\"><a href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">glm::aligned_uvec3</a></div><div class=\"ttdeci\">aligned_highp_uvec3 aligned_uvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01260\">gtc/type_aligned.hpp:1260</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabc25e547f4de4af62403492532cd1b6d\"><div class=\"ttname\"><a href=\"a00303.html#gabc25e547f4de4af62403492532cd1b6d\">glm::aligned_mediump_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, aligned_mediump &gt; aligned_mediump_dmat4x2</div><div class=\"ttdoc\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00767\">gtc/type_aligned.hpp:767</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabab3afcc04459c7b123604ae5dc663f6\"><div class=\"ttname\"><a href=\"a00303.html#gabab3afcc04459c7b123604ae5dc663f6\">glm::aligned_highp_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, aligned_highp &gt; aligned_highp_mat3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00451\">gtc/type_aligned.hpp:451</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa1f95690a78dc12e39da32943243aeef\"><div class=\"ttname\"><a href=\"a00303.html#gaa1f95690a78dc12e39da32943243aeef\">glm::packed_mediump_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, uint, packed_mediump &gt; packed_mediump_uvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00212\">gtc/type_aligned.hpp:212</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga65415d2d68c9cc0ca554524a8f5510b2\"><div class=\"ttname\"><a href=\"a00303.html#ga65415d2d68c9cc0ca554524a8f5510b2\">glm::aligned_highp_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, aligned_highp &gt; aligned_highp_vec3</div><div class=\"ttdoc\">3 components vector aligned in memory of single-precision floating-point numbers using high precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00229\">gtc/type_aligned.hpp:229</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga452bbbfd26e244de216e4d004d50bb74\"><div class=\"ttname\"><a href=\"a00303.html#ga452bbbfd26e244de216e4d004d50bb74\">glm::aligned_mat4x3</a></div><div class=\"ttdeci\">aligned_highp_mat4x3 aligned_mat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01003\">gtc/type_aligned.hpp:1003</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaae92fcec8b2e0328ffbeac31cc4fc419\"><div class=\"ttname\"><a href=\"a00303.html#gaae92fcec8b2e0328ffbeac31cc4fc419\">glm::aligned_lowp_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, aligned_lowp &gt; aligned_lowp_ivec4</div><div class=\"ttdoc\">4 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00345\">gtc/type_aligned.hpp:345</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf9db5e8a929c317da5aa12cc53741b63\"><div class=\"ttname\"><a href=\"a00303.html#gaf9db5e8a929c317da5aa12cc53741b63\">glm::aligned_highp_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, aligned_highp &gt; aligned_highp_mat2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00413\">gtc/type_aligned.hpp:413</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga14741e3d9da9ae83765389927f837331\"><div class=\"ttname\"><a href=\"a00303.html#ga14741e3d9da9ae83765389927f837331\">glm::packed_vec1</a></div><div class=\"ttdeci\">packed_highp_vec1 packed_vec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00952\">gtc/type_aligned.hpp:952</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga44c4accad582cfbd7226a19b83b0cadc\"><div class=\"ttname\"><a href=\"a00303.html#ga44c4accad582cfbd7226a19b83b0cadc\">glm::aligned_lowp_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, aligned_lowp &gt; aligned_lowp_ivec2</div><div class=\"ttdoc\">2 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00161\">gtc/type_aligned.hpp:161</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga39658fb13369db869d363684bd8399c0\"><div class=\"ttname\"><a href=\"a00303.html#ga39658fb13369db869d363684bd8399c0\">glm::packed_lowp_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, packed_lowp &gt; packed_lowp_dmat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00788\">gtc/type_aligned.hpp:788</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa37869eea77d28419b2fb0ff70b69bf0\"><div class=\"ttname\"><a href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">glm::aligned_dvec3</a></div><div class=\"ttdeci\">aligned_highp_dvec3 aligned_dvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of double-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01114\">gtc/type_aligned.hpp:1114</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0a6198fe64166a6a61084d43c71518a9\"><div class=\"ttname\"><a href=\"a00303.html#ga0a6198fe64166a6a61084d43c71518a9\">glm::packed_lowp_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, packed_lowp &gt; packed_lowp_vec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of single-precision floating-point numbers using low prec...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00096\">gtc/type_aligned.hpp:96</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga70147763edff3fe96b03a0b98d6339a2\"><div class=\"ttname\"><a href=\"a00303.html#ga70147763edff3fe96b03a0b98d6339a2\">glm::packed_mediump_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, packed_mediump &gt; packed_mediump_bvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00313\">gtc/type_aligned.hpp:313</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga4974f46ae5a19415d91316960a53617a\"><div class=\"ttname\"><a href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">glm::aligned_dvec1</a></div><div class=\"ttdeci\">aligned_highp_dvec1 aligned_dvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01108\">gtc/type_aligned.hpp:1108</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"><div class=\"ttname\"><a href=\"a00303.html#ga8e5d92e84ebdbe2480cf96bc17d6e2f2\">glm::packed_uvec4</a></div><div class=\"ttdeci\">packed_highp_uvec4 packed_uvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01275\">gtc/type_aligned.hpp:1275</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga03dfc90d539cc87ea3a15a9caa5d2245\"><div class=\"ttname\"><a href=\"a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245\">glm::packed_dmat3</a></div><div class=\"ttdeci\">packed_highp_dmat3 packed_dmat3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01144\">gtc/type_aligned.hpp:1144</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac9f8482dde741fb6bab7248b81a45465\"><div class=\"ttname\"><a href=\"a00303.html#gac9f8482dde741fb6bab7248b81a45465\">glm::aligned_highp_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, aligned_highp &gt; aligned_highp_vec2</div><div class=\"ttdoc\">2 components vector aligned in memory of single-precision floating-point numbers using high precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00137\">gtc/type_aligned.hpp:137</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaef26dfe3855a91644665b55c9096a8c8\"><div class=\"ttname\"><a href=\"a00303.html#gaef26dfe3855a91644665b55c9096a8c8\">glm::aligned_highp_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, aligned_highp &gt; aligned_highp_dmat2x2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00536\">gtc/type_aligned.hpp:536</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9e9f006970b1a00862e3e6e599eedd4c\"><div class=\"ttname\"><a href=\"a00303.html#ga9e9f006970b1a00862e3e6e599eedd4c\">glm::aligned_lowp_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, uint, aligned_lowp &gt; aligned_lowp_uvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00262\">gtc/type_aligned.hpp:262</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7f8a2cc5a686e52b1615761f4978ca62\"><div class=\"ttname\"><a href=\"a00303.html#ga7f8a2cc5a686e52b1615761f4978ca62\">glm::aligned_lowp_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, aligned_lowp &gt; aligned_lowp_dvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of double-precision floating-point numbers using low precision a...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00060\">gtc/type_aligned.hpp:60</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6b797eec76fa471e300158f3453b3b2e\"><div class=\"ttname\"><a href=\"a00303.html#ga6b797eec76fa471e300158f3453b3b2e\">glm::aligned_mediump_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, aligned_mediump &gt; aligned_mediump_vec1</div><div class=\"ttdoc\">1 component vector aligned in memory of single-precision floating-point numbers using medium precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00048\">gtc/type_aligned.hpp:48</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga30b0351eebc18c6056101359bdd3a359\"><div class=\"ttname\"><a href=\"a00303.html#ga30b0351eebc18c6056101359bdd3a359\">glm::packed_lowp_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, packed_lowp &gt; packed_lowp_dmat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00826\">gtc/type_aligned.hpp:826</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaea3ccc5ef5b178e6e49b4fa1427605d3\"><div class=\"ttname\"><a href=\"a00303.html#gaea3ccc5ef5b178e6e49b4fa1427605d3\">glm::aligned_lowp_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, aligned_lowp &gt; aligned_lowp_dmat3x4</div><div class=\"ttdoc\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00732\">gtc/type_aligned.hpp:732</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae389c2071cf3cdb33e7812c6fd156710\"><div class=\"ttname\"><a href=\"a00303.html#gae389c2071cf3cdb33e7812c6fd156710\">glm::packed_highp_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, packed_highp &gt; packed_highp_mat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00773\">gtc/type_aligned.hpp:773</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga80dee705d714300378e0847f45059097\"><div class=\"ttname\"><a href=\"a00303.html#ga80dee705d714300378e0847f45059097\">glm::aligned_mediump_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, aligned_mediump &gt; aligned_mediump_mat3x2</div><div class=\"ttdoc\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00644\">gtc/type_aligned.hpp:644</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0effece4545acdebdc2a5512a303110e\"><div class=\"ttname\"><a href=\"a00303.html#ga0effece4545acdebdc2a5512a303110e\">glm::aligned_mediump_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, aligned_mediump &gt; aligned_mediump_mat4x3</div><div class=\"ttdoc\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00796\">gtc/type_aligned.hpp:796</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab9e669c4efd52d3347fc6d5f6b20fd59\"><div class=\"ttname\"><a href=\"a00303.html#gab9e669c4efd52d3347fc6d5f6b20fd59\">glm::aligned_lowp_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, aligned_lowp &gt; aligned_lowp_dvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of double-precision floating-point numbers using low precision ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00244\">gtc/type_aligned.hpp:244</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga43cd36d430c5187bfdca34a23cb41581\"><div class=\"ttname\"><a href=\"a00303.html#ga43cd36d430c5187bfdca34a23cb41581\">glm::packed_mediump_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, packed_mediump &gt; packed_mediump_mat2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00434\">gtc/type_aligned.hpp:434</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6c1dbe8cde9fbb231284b01f8aeaaa99\"><div class=\"ttname\"><a href=\"a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99\">glm::packed_mat3x3</a></div><div class=\"ttdeci\">packed_highp_mat3x3 packed_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01021\">gtc/type_aligned.hpp:1021</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab472b2d917b5e6efd76e8c7dbfbbf9f1\"><div class=\"ttname\"><a href=\"a00303.html#gab472b2d917b5e6efd76e8c7dbfbbf9f1\">glm::packed_highp_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, packed_highp &gt; packed_highp_dvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of double-precision floating-point numbers using high pre...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00099\">gtc/type_aligned.hpp:99</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa281a47d5d627313984d0f8df993b648\"><div class=\"ttname\"><a href=\"a00303.html#gaa281a47d5d627313984d0f8df993b648\">glm::aligned_lowp_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, aligned_lowp &gt; aligned_lowp_dmat3x2</div><div class=\"ttdoc\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00656\">gtc/type_aligned.hpp:656</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga13a75c6cbd0a411f694bc82486cd1e55\"><div class=\"ttname\"><a href=\"a00303.html#ga13a75c6cbd0a411f694bc82486cd1e55\">glm::packed_mediump_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, packed_mediump &gt; packed_mediump_mat3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00472\">gtc/type_aligned.hpp:472</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga17c424412207b00dba1cf587b099eea3\"><div class=\"ttname\"><a href=\"a00303.html#ga17c424412207b00dba1cf587b099eea3\">glm::aligned_lowp_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, aligned_lowp &gt; aligned_lowp_mat2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00419\">gtc/type_aligned.hpp:419</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae20617435a6d042d7c38da2badd64a09\"><div class=\"ttname\"><a href=\"a00303.html#gae20617435a6d042d7c38da2badd64a09\">glm::packed_dmat4x4</a></div><div class=\"ttdeci\">packed_highp_dmat4x4 packed_dmat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01201\">gtc/type_aligned.hpp:1201</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7a4536b6e1f2ebb690f63816b5d7e48b\"><div class=\"ttname\"><a href=\"a00303.html#ga7a4536b6e1f2ebb690f63816b5d7e48b\">glm::aligned_lowp_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, aligned_lowp &gt; aligned_lowp_dmat2x3</div><div class=\"ttdoc\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00580\">gtc/type_aligned.hpp:580</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2a1dd2387725a335413d4c4fee8609c4\"><div class=\"ttname\"><a href=\"a00303.html#ga2a1dd2387725a335413d4c4fee8609c4\">glm::packed_lowp_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, packed_lowp &gt; packed_lowp_mat4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00513\">gtc/type_aligned.hpp:513</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga56473759d2702ee19ab7f91d0017fa70\"><div class=\"ttname\"><a href=\"a00303.html#ga56473759d2702ee19ab7f91d0017fa70\">glm::packed_highp_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, packed_highp &gt; packed_highp_vec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of single-precision floating-point numbers using high pre...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00090\">gtc/type_aligned.hpp:90</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga26a0b61e444a51a37b9737cf4d84291b\"><div class=\"ttname\"><a href=\"a00303.html#ga26a0b61e444a51a37b9737cf4d84291b\">glm::aligned_mediump_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, aligned_mediump &gt; aligned_mediump_mat2x3</div><div class=\"ttdoc\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00568\">gtc/type_aligned.hpp:568</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga245c12d2daf67feecaa2d3277c8f6661\"><div class=\"ttname\"><a href=\"a00303.html#ga245c12d2daf67feecaa2d3277c8f6661\">glm::packed_highp_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, packed_highp &gt; packed_highp_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00545\">gtc/type_aligned.hpp:545</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gacb183eb5e67ec0d0ea5a016cba962810\"><div class=\"ttname\"><a href=\"a00303.html#gacb183eb5e67ec0d0ea5a016cba962810\">glm::aligned_mediump_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, aligned_mediump &gt; aligned_mediump_bvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00176\">gtc/type_aligned.hpp:176</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac93f9b1a35b9de4f456b9f2dfeaf1097\"><div class=\"ttname\"><a href=\"a00303.html#gac93f9b1a35b9de4f456b9f2dfeaf1097\">glm::packed_lowp_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, packed_lowp &gt; packed_lowp_dmat2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00446\">gtc/type_aligned.hpp:446</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga62a2dfd668c91072b72c3109fc6cda28\"><div class=\"ttname\"><a href=\"a00303.html#ga62a2dfd668c91072b72c3109fc6cda28\">glm::aligned_mediump_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, aligned_mediump &gt; aligned_mediump_dmat2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00425\">gtc/type_aligned.hpp:425</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga68c9bb24f387b312bae6a0a68e74d95e\"><div class=\"ttname\"><a href=\"a00303.html#ga68c9bb24f387b312bae6a0a68e74d95e\">glm::packed_mediump_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, packed_mediump &gt; packed_mediump_vec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of single-precision floating-point numbers using medium ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00369\">gtc/type_aligned.hpp:369</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa409cfb737bd59b68dc683e9b03930cc\"><div class=\"ttname\"><a href=\"a00303.html#gaa409cfb737bd59b68dc683e9b03930cc\">glm::aligned_dmat4x2</a></div><div class=\"ttdeci\">aligned_highp_dmat4x2 aligned_dmat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01168\">gtc/type_aligned.hpp:1168</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0294d4c45151425c86a11deee7693c0e\"><div class=\"ttname\"><a href=\"a00303.html#ga0294d4c45151425c86a11deee7693c0e\">glm::packed_lowp_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, packed_lowp &gt; packed_lowp_dmat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00864\">gtc/type_aligned.hpp:864</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga22bd6382b16052e301edbfc031b9f37a\"><div class=\"ttname\"><a href=\"a00303.html#ga22bd6382b16052e301edbfc031b9f37a\">glm::packed_highp_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, packed_highp &gt; packed_highp_dmat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00554\">gtc/type_aligned.hpp:554</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5adf1802c5375a9dfb1729691bedd94e\"><div class=\"ttname\"><a href=\"a00303.html#ga5adf1802c5375a9dfb1729691bedd94e\">glm::packed_lowp_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, packed_lowp &gt; packed_lowp_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00703\">gtc/type_aligned.hpp:703</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga4584f64394bd7123b7a8534741e4916c\"><div class=\"ttname\"><a href=\"a00303.html#ga4584f64394bd7123b7a8534741e4916c\">glm::packed_highp_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, packed_highp &gt; packed_highp_mat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00811\">gtc/type_aligned.hpp:811</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3b76ba17ae5d53debeb6f7e55919a57c\"><div class=\"ttname\"><a href=\"a00303.html#ga3b76ba17ae5d53debeb6f7e55919a57c\">glm::aligned_mediump_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, aligned_mediump &gt; aligned_mediump_mat3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00454\">gtc/type_aligned.hpp:454</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gacab7374b560745cb1d0a306a90353f58\"><div class=\"ttname\"><a href=\"a00303.html#gacab7374b560745cb1d0a306a90353f58\">glm::aligned_highp_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, aligned_highp &gt; aligned_highp_dmat4x3</div><div class=\"ttdoc\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00802\">gtc/type_aligned.hpp:802</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac6036449ab1c4abf8efe1ea00fcdd1c9\"><div class=\"ttname\"><a href=\"a00303.html#gac6036449ab1c4abf8efe1ea00fcdd1c9\">glm::aligned_lowp_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, aligned_lowp &gt; aligned_lowp_bvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00087\">gtc/type_aligned.hpp:87</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5a8a5f8c47cd7d5502dd9932f83472b9\"><div class=\"ttname\"><a href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">glm::aligned_mat2</a></div><div class=\"ttdeci\">aligned_highp_mat2 aligned_mat2</div><div class=\"ttdoc\">2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00964\">gtc/type_aligned.hpp:964</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa292ebaa907afdecb2d5967fb4fb1247\"><div class=\"ttname\"><a href=\"a00303.html#gaa292ebaa907afdecb2d5967fb4fb1247\">glm::aligned_mediump_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, aligned_mediump &gt; aligned_mediump_dmat4x4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00843\">gtc/type_aligned.hpp:843</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabbf0f15e9c3d9868e43241ad018f82bd\"><div class=\"ttname\"><a href=\"a00303.html#gabbf0f15e9c3d9868e43241ad018f82bd\">glm::aligned_mediump_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, aligned_mediump &gt; aligned_mediump_ivec3</div><div class=\"ttdoc\">3 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00250\">gtc/type_aligned.hpp:250</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae1964ba70d15915e5b710926decbb3cb\"><div class=\"ttname\"><a href=\"a00303.html#gae1964ba70d15915e5b710926decbb3cb\">glm::aligned_bvec3</a></div><div class=\"ttdeci\">aligned_highp_bvec3 aligned_bvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01296\">gtc/type_aligned.hpp:1296</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabcc33efb4d5e83b8fe4706360e75b932\"><div class=\"ttname\"><a href=\"a00303.html#gabcc33efb4d5e83b8fe4706360e75b932\">glm::packed_uvec2</a></div><div class=\"ttdeci\">packed_highp_uvec2 packed_uvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01269\">gtc/type_aligned.hpp:1269</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga226f5ec7a953cea559c16fe3aff9924f\"><div class=\"ttname\"><a href=\"a00303.html#ga226f5ec7a953cea559c16fe3aff9924f\">glm::aligned_lowp_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, aligned_lowp &gt; aligned_lowp_dvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of double-precision floating-point numbers using low precision ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00336\">gtc/type_aligned.hpp:336</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac00e15efded8a57c9dec3aed0fb547e7\"><div class=\"ttname\"><a href=\"a00303.html#gac00e15efded8a57c9dec3aed0fb547e7\">glm::aligned_lowp_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, aligned_lowp &gt; aligned_lowp_dmat3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00466\">gtc/type_aligned.hpp:466</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf304f64c06743c1571401504d3f50259\"><div class=\"ttname\"><a href=\"a00303.html#gaf304f64c06743c1571401504d3f50259\">glm::packed_mediump_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, packed_mediump &gt; packed_mediump_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00852\">gtc/type_aligned.hpp:852</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabdd60462042859f876c17c7346c732a5\"><div class=\"ttname\"><a href=\"a00303.html#gabdd60462042859f876c17c7346c732a5\">glm::aligned_highp_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, uint, aligned_highp &gt; aligned_highp_uvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00348\">gtc/type_aligned.hpp:348</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga79c2e9f82e67963c1ecad0ad6d0ec72e\"><div class=\"ttname\"><a href=\"a00303.html#ga79c2e9f82e67963c1ecad0ad6d0ec72e\">glm::packed_highp_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, packed_highp &gt; packed_highp_dmat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00820\">gtc/type_aligned.hpp:820</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7661d759d6ad218e132e3d051e7b2c6c\"><div class=\"ttname\"><a href=\"a00303.html#ga7661d759d6ad218e132e3d051e7b2c6c\">glm::packed_lowp_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, packed_lowp &gt; packed_lowp_mat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00817\">gtc/type_aligned.hpp:817</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga53ac5d252317f1fa43c2ef921857bf13\"><div class=\"ttname\"><a href=\"a00303.html#ga53ac5d252317f1fa43c2ef921857bf13\">glm::aligned_lowp_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, aligned_lowp &gt; aligned_lowp_vec2</div><div class=\"ttdoc\">2 components vector aligned in memory of single-precision floating-point numbers using low precision ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00143\">gtc/type_aligned.hpp:143</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf22b77f1cf3e73b8b1dddfe7f959357c\"><div class=\"ttname\"><a href=\"a00303.html#gaf22b77f1cf3e73b8b1dddfe7f959357c\">glm::packed_lowp_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, packed_lowp &gt; packed_lowp_ivec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00114\">gtc/type_aligned.hpp:114</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga83aab4d191053f169c93a3e364f2e118\"><div class=\"ttname\"><a href=\"a00303.html#ga83aab4d191053f169c93a3e364f2e118\">glm::aligned_lowp_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, aligned_lowp &gt; aligned_lowp_bvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00271\">gtc/type_aligned.hpp:271</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8a9376d82f0e946e25137eb55543e6ce\"><div class=\"ttname\"><a href=\"a00303.html#ga8a9376d82f0e946e25137eb55543e6ce\">glm::aligned_mediump_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, aligned_mediump &gt; aligned_mediump_dmat4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00501\">gtc/type_aligned.hpp:501</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad43a240533f388ce0504b495d9df3d52\"><div class=\"ttname\"><a href=\"a00303.html#gad43a240533f388ce0504b495d9df3d52\">glm::packed_mediump_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, packed_mediump &gt; packed_mediump_mat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00624\">gtc/type_aligned.hpp:624</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6718822cd7af005a9b5bd6ee282f6ba6\"><div class=\"ttname\"><a href=\"a00303.html#ga6718822cd7af005a9b5bd6ee282f6ba6\">glm::packed_highp_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, packed_highp &gt; packed_highp_dmat4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00516\">gtc/type_aligned.hpp:516</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga46f372a006345c252a41267657cc22c0\"><div class=\"ttname\"><a href=\"a00303.html#ga46f372a006345c252a41267657cc22c0\">glm::aligned_mediump_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, aligned_mediump &gt; aligned_mediump_mat4x2</div><div class=\"ttdoc\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00758\">gtc/type_aligned.hpp:758</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabc93a9560593bd32e099c908531305f5\"><div class=\"ttname\"><a href=\"a00303.html#gabc93a9560593bd32e099c908531305f5\">glm::packed_mediump_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, packed_mediump &gt; packed_mediump_mat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00738\">gtc/type_aligned.hpp:738</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0b570da473fec4619db5aa0dce5133b0\"><div class=\"ttname\"><a href=\"a00303.html#ga0b570da473fec4619db5aa0dce5133b0\">glm::packed_highp_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, uint, packed_highp &gt; packed_highp_uvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00301\">gtc/type_aligned.hpp:301</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga449a3ec2dde6b6bb4bb94c49a6aad388\"><div class=\"ttname\"><a href=\"a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388\">glm::aligned_dmat2x2</a></div><div class=\"ttdeci\">aligned_highp_dmat2x2 aligned_dmat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01150\">gtc/type_aligned.hpp:1150</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9d60e32d3fcb51f817046cd881fdbf57\"><div class=\"ttname\"><a href=\"a00303.html#ga9d60e32d3fcb51f817046cd881fdbf57\">glm::packed_mediump_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, packed_mediump &gt; packed_mediump_dmat2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00443\">gtc/type_aligned.hpp:443</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga72102fa6ac2445aa3bb203128ad52449\"><div class=\"ttname\"><a href=\"a00303.html#ga72102fa6ac2445aa3bb203128ad52449\">glm::packed_highp_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, packed_highp &gt; packed_highp_mat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00735\">gtc/type_aligned.hpp:735</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad63515526cccfe88ffa8fe5ed64f95f8\"><div class=\"ttname\"><a href=\"a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8\">glm::packed_mat3x4</a></div><div class=\"ttdeci\">packed_highp_mat3x4 packed_mat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01024\">gtc/type_aligned.hpp:1024</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaaa4126969c765e7faa2ebf6951c22ffb\"><div class=\"ttname\"><a href=\"a00303.html#gaaa4126969c765e7faa2ebf6951c22ffb\">glm::packed_mediump_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, packed_mediump &gt; packed_mediump_dmat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00633\">gtc/type_aligned.hpp:633</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2c29fb42bab9a4f9b66bc60b2e514a34\"><div class=\"ttname\"><a href=\"a00303.html#ga2c29fb42bab9a4f9b66bc60b2e514a34\">glm::packed_mediump_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, uint, packed_mediump &gt; packed_mediump_uvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00120\">gtc/type_aligned.hpp:120</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab92c6d7d58d43dfb8147e9aedfe8351b\"><div class=\"ttname\"><a href=\"a00303.html#gab92c6d7d58d43dfb8147e9aedfe8351b\">glm::aligned_lowp_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, aligned_lowp &gt; aligned_lowp_dmat4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00504\">gtc/type_aligned.hpp:504</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab286466e19f7399c8d25089da9400d43\"><div class=\"ttname\"><a href=\"a00303.html#gab286466e19f7399c8d25089da9400d43\">glm::packed_mat4x3</a></div><div class=\"ttdeci\">packed_highp_mat4x3 packed_mat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01030\">gtc/type_aligned.hpp:1030</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga931731b8ae3b54c7ecc221509dae96bc\"><div class=\"ttname\"><a href=\"a00303.html#ga931731b8ae3b54c7ecc221509dae96bc\">glm::packed_lowp_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, packed_lowp &gt; packed_lowp_ivec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00390\">gtc/type_aligned.hpp:390</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga70130dc8ed9c966ec2a221ce586d45d8\"><div class=\"ttname\"><a href=\"a00303.html#ga70130dc8ed9c966ec2a221ce586d45d8\">glm::packed_mediump_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, packed_mediump &gt; packed_mediump_ivec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00387\">gtc/type_aligned.hpp:387</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9af1eabe22f569e70d9893be72eda0f5\"><div class=\"ttname\"><a href=\"a00303.html#ga9af1eabe22f569e70d9893be72eda0f5\">glm::aligned_mediump_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, aligned_mediump &gt; aligned_mediump_dvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of double-precision floating-point numbers using medium precisi...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00149\">gtc/type_aligned.hpp:149</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1fe4c5f56b8087d773aa90dc88a257a7\"><div class=\"ttname\"><a href=\"a00303.html#ga1fe4c5f56b8087d773aa90dc88a257a7\">glm::packed_ivec2</a></div><div class=\"ttdeci\">packed_highp_ivec2 packed_ivec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01231\">gtc/type_aligned.hpp:1231</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga76298aed82a439063c3d55980c84aa0b\"><div class=\"ttname\"><a href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">glm::aligned_ivec1</a></div><div class=\"ttdeci\">aligned_highp_ivec1 aligned_ivec1</div><div class=\"ttdoc\">1 component vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01216\">gtc/type_aligned.hpp:1216</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga06f26d54dca30994eb1fdadb8e69f4a2\"><div class=\"ttname\"><a href=\"a00303.html#ga06f26d54dca30994eb1fdadb8e69f4a2\">glm::packed_mediump_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, packed_mediump &gt; packed_mediump_ivec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00295\">gtc/type_aligned.hpp:295</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga576a3f8372197a56a79dee1c8280f485\"><div class=\"ttname\"><a href=\"a00303.html#ga576a3f8372197a56a79dee1c8280f485\">glm::packed_lowp_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, uint, packed_lowp &gt; packed_lowp_uvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00307\">gtc/type_aligned.hpp:307</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6dc65249730698d3cc9ac5d7e1bc4d72\"><div class=\"ttname\"><a href=\"a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72\">glm::packed_dmat4x2</a></div><div class=\"ttdeci\">packed_highp_dmat4x2 packed_dmat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01195\">gtc/type_aligned.hpp:1195</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga91bc1f513bb9b0fd60281d57ded9a48c\"><div class=\"ttname\"><a href=\"a00303.html#ga91bc1f513bb9b0fd60281d57ded9a48c\">glm::aligned_mediump_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, aligned_mediump &gt; aligned_mediump_bvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00360\">gtc/type_aligned.hpp:360</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0731b593c5e33559954c80f8687e76c6\"><div class=\"ttname\"><a href=\"a00303.html#ga0731b593c5e33559954c80f8687e76c6\">glm::aligned_highp_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, aligned_highp &gt; aligned_highp_bvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00173\">gtc/type_aligned.hpp:173</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3cc94fb8de80bbd8a4aa7a5b206d304a\"><div class=\"ttname\"><a href=\"a00303.html#ga3cc94fb8de80bbd8a4aa7a5b206d304a\">glm::packed_lowp_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, packed_lowp &gt; packed_lowp_vec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of single-precision floating-point numbers using low pre...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00372\">gtc/type_aligned.hpp:372</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8fad35c5677f228e261fe541f15363a4\"><div class=\"ttname\"><a href=\"a00303.html#ga8fad35c5677f228e261fe541f15363a4\">glm::aligned_highp_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, aligned_highp &gt; aligned_highp_dvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of double-precision floating-point numbers using high precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00330\">gtc/type_aligned.hpp:330</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga999d82719696d4c59f4d236dd08f273d\"><div class=\"ttname\"><a href=\"a00303.html#ga999d82719696d4c59f4d236dd08f273d\">glm::packed_highp_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, packed_highp &gt; packed_highp_dmat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00592\">gtc/type_aligned.hpp:592</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf6f041b212c57664d88bc6aefb7e36f3\"><div class=\"ttname\"><a href=\"a00303.html#gaf6f041b212c57664d88bc6aefb7e36f3\">glm::aligned_mediump_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, aligned_mediump &gt; aligned_mediump_mat2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00416\">gtc/type_aligned.hpp:416</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga92f8873e3bbd5ca1323c8bbe5725cc5e\"><div class=\"ttname\"><a href=\"a00303.html#ga92f8873e3bbd5ca1323c8bbe5725cc5e\">glm::aligned_mediump_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, aligned_mediump &gt; aligned_mediump_dmat2x4</div><div class=\"ttdoc\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00615\">gtc/type_aligned.hpp:615</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae473587cff3092edc0877fc691c26a0b\"><div class=\"ttname\"><a href=\"a00303.html#gae473587cff3092edc0877fc691c26a0b\">glm::packed_lowp_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, packed_lowp &gt; packed_lowp_bvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00408\">gtc/type_aligned.hpp:408</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0c754a783b6fcf80374c013371c4dae9\"><div class=\"ttname\"><a href=\"a00303.html#ga0c754a783b6fcf80374c013371c4dae9\">glm::packed_mediump_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, packed_mediump &gt; packed_mediump_dvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of double-precision floating-point numbers using medium ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00194\">gtc/type_aligned.hpp:194</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab173a333e6b7ce153ceba66ac4a321cf\"><div class=\"ttname\"><a href=\"a00303.html#gab173a333e6b7ce153ceba66ac4a321cf\">glm::aligned_highp_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, aligned_highp &gt; aligned_highp_dvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of double-precision floating-point numbers using high precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00146\">gtc/type_aligned.hpp:146</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab0cf4f7c9a264941519acad286e055ea\"><div class=\"ttname\"><a href=\"a00303.html#gab0cf4f7c9a264941519acad286e055ea\">glm::aligned_lowp_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, aligned_lowp &gt; aligned_lowp_dmat2x4</div><div class=\"ttdoc\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00618\">gtc/type_aligned.hpp:618</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga832476bb1c59ef673db37433ff34e399\"><div class=\"ttname\"><a href=\"a00303.html#ga832476bb1c59ef673db37433ff34e399\">glm::aligned_mat2x3</a></div><div class=\"ttdeci\">aligned_highp_mat2x3 aligned_mat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00985\">gtc/type_aligned.hpp:985</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga70dcb9ef0b24e832772a7405efa9669a\"><div class=\"ttname\"><a href=\"a00303.html#ga70dcb9ef0b24e832772a7405efa9669a\">glm::packed_lowp_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, packed_lowp &gt; packed_lowp_mat2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00437\">gtc/type_aligned.hpp:437</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6099dd7878d0a78101a4250d8cd2d736\"><div class=\"ttname\"><a href=\"a00303.html#ga6099dd7878d0a78101a4250d8cd2d736\">glm::aligned_mediump_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, aligned_mediump &gt; aligned_mediump_ivec4</div><div class=\"ttdoc\">4 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00342\">gtc/type_aligned.hpp:342</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac969befedbda69eb78d4e23f751fdbee\"><div class=\"ttname\"><a href=\"a00303.html#gac969befedbda69eb78d4e23f751fdbee\">glm::packed_lowp_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, packed_lowp &gt; packed_lowp_bvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00224\">gtc/type_aligned.hpp:224</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga54f368ec6b514a5aa4f28d40e6f93ef7\"><div class=\"ttname\"><a href=\"a00303.html#ga54f368ec6b514a5aa4f28d40e6f93ef7\">glm::packed_highp_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, packed_highp &gt; packed_highp_ivec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00200\">gtc/type_aligned.hpp:200</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga199131fd279c92c2ac12df6d978f1dd6\"><div class=\"ttname\"><a href=\"a00303.html#ga199131fd279c92c2ac12df6d978f1dd6\">glm::packed_dmat3x4</a></div><div class=\"ttdeci\">packed_highp_dmat3x4 packed_dmat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01192\">gtc/type_aligned.hpp:1192</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf969eb879c76a5f4576e4a1e10095cf6\"><div class=\"ttname\"><a href=\"a00303.html#gaf969eb879c76a5f4576e4a1e10095cf6\">glm::packed_mediump_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, packed_mediump &gt; packed_mediump_dmat3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00481\">gtc/type_aligned.hpp:481</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab0931ac7807fa1428c7bbf249efcdf0d\"><div class=\"ttname\"><a href=\"a00303.html#gab0931ac7807fa1428c7bbf249efcdf0d\">glm::aligned_lowp_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, aligned_lowp &gt; aligned_lowp_dmat4x3</div><div class=\"ttdoc\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00808\">gtc/type_aligned.hpp:808</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1fbfba14368b742972d3b58a0a303682\"><div class=\"ttname\"><a href=\"a00303.html#ga1fbfba14368b742972d3b58a0a303682\">glm::aligned_highp_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, aligned_highp &gt; aligned_highp_dmat4x4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00840\">gtc/type_aligned.hpp:840</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9a15514a0631f700de6312b9d5db3a73\"><div class=\"ttname\"><a href=\"a00303.html#ga9a15514a0631f700de6312b9d5db3a73\">glm::packed_mediump_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, packed_mediump &gt; packed_mediump_dmat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00785\">gtc/type_aligned.hpp:785</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga67e7102557d6067bb6ac00d4ad0e1374\"><div class=\"ttname\"><a href=\"a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374\">glm::packed_mat4x4</a></div><div class=\"ttdeci\">packed_highp_mat4x4 packed_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01033\">gtc/type_aligned.hpp:1033</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga253e8379b08d2dc6fe2800b2fb913203\"><div class=\"ttname\"><a href=\"a00303.html#ga253e8379b08d2dc6fe2800b2fb913203\">glm::packed_highp_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, packed_highp &gt; packed_highp_mat4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00507\">gtc/type_aligned.hpp:507</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gacaa7407ea00ffdd322ce86a57adb547e\"><div class=\"ttname\"><a href=\"a00303.html#gacaa7407ea00ffdd322ce86a57adb547e\">glm::aligned_highp_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, aligned_highp &gt; aligned_highp_dmat4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00498\">gtc/type_aligned.hpp:498</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab069b2fc2ec785fc4e193cf26c022679\"><div class=\"ttname\"><a href=\"a00303.html#gab069b2fc2ec785fc4e193cf26c022679\">glm::aligned_highp_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, aligned_highp &gt; aligned_highp_dmat3x2</div><div class=\"ttdoc\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00650\">gtc/type_aligned.hpp:650</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga054050e9d4e78d81db0e6d1573b1c624\"><div class=\"ttname\"><a href=\"a00303.html#ga054050e9d4e78d81db0e6d1573b1c624\">glm::packed_lowp_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, packed_lowp &gt; packed_lowp_dvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of double-precision floating-point numbers using low prec...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00105\">gtc/type_aligned.hpp:105</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga25ea2f684e36aa5e978b4f2f86593824\"><div class=\"ttname\"><a href=\"a00303.html#ga25ea2f684e36aa5e978b4f2f86593824\">glm::aligned_lowp_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, aligned_lowp &gt; aligned_lowp_mat4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00495\">gtc/type_aligned.hpp:495</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1ea2bbdbcb0a69242f6d884663c1b0ab\"><div class=\"ttname\"><a href=\"a00303.html#ga1ea2bbdbcb0a69242f6d884663c1b0ab\">glm::packed_mediump_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, uint, packed_mediump &gt; packed_mediump_uvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00304\">gtc/type_aligned.hpp:304</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga621e89ca1dbdcb7b5a3e7de237c44121\"><div class=\"ttname\"><a href=\"a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121\">glm::aligned_dmat4x3</a></div><div class=\"ttdeci\">aligned_highp_dmat4x3 aligned_dmat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01171\">gtc/type_aligned.hpp:1171</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf806dfdaffb2e9f7681b1cd2825898ce\"><div class=\"ttname\"><a href=\"a00303.html#gaf806dfdaffb2e9f7681b1cd2825898ce\">glm::aligned_lowp_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, aligned_lowp &gt; aligned_lowp_dmat4x2</div><div class=\"ttdoc\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00770\">gtc/type_aligned.hpp:770</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8897c6d9adb4140b1c3b0a07b8f0a430\"><div class=\"ttname\"><a href=\"a00303.html#ga8897c6d9adb4140b1c3b0a07b8f0a430\">glm::packed_mediump_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, packed_mediump &gt; packed_mediump_dmat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00595\">gtc/type_aligned.hpp:595</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga93a23ca3d42818d56e0702213c66354b\"><div class=\"ttname\"><a href=\"a00303.html#ga93a23ca3d42818d56e0702213c66354b\">glm::aligned_highp_dmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, double, aligned_highp &gt; aligned_highp_dmat4x2</div><div class=\"ttdoc\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00764\">gtc/type_aligned.hpp:764</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga88061c72c997b94c420f2b0a60d9df26\"><div class=\"ttname\"><a href=\"a00303.html#ga88061c72c997b94c420f2b0a60d9df26\">glm::aligned_mat3x4</a></div><div class=\"ttdeci\">aligned_highp_mat3x4 aligned_mat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00997\">gtc/type_aligned.hpp:997</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad8220a93d2fca2dd707821b4ab6f809e\"><div class=\"ttname\"><a href=\"a00303.html#gad8220a93d2fca2dd707821b4ab6f809e\">glm::aligned_lowp_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, aligned_lowp &gt; aligned_lowp_dmat4x4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00846\">gtc/type_aligned.hpp:846</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga312864244cae4e8f10f478cffd0f76de\"><div class=\"ttname\"><a href=\"a00303.html#ga312864244cae4e8f10f478cffd0f76de\">glm::aligned_mediump_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, aligned_mediump &gt; aligned_mediump_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00834\">gtc/type_aligned.hpp:834</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab0fddcf95dd51cbcbf624ea7c40dfeb8\"><div class=\"ttname\"><a href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">glm::aligned_mat4</a></div><div class=\"ttdeci\">aligned_highp_mat4 aligned_mat4</div><div class=\"ttdoc\">4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00970\">gtc/type_aligned.hpp:970</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaeeaff6c132ec91ebd21da3a2399548ea\"><div class=\"ttname\"><a href=\"a00303.html#gaeeaff6c132ec91ebd21da3a2399548ea\">glm::packed_lowp_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, packed_lowp &gt; packed_lowp_dmat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00560\">gtc/type_aligned.hpp:560</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaaa891048dddef4627df33809ec726219\"><div class=\"ttname\"><a href=\"a00303.html#gaaa891048dddef4627df33809ec726219\">glm::packed_mediump_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, packed_mediump &gt; packed_mediump_ivec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00203\">gtc/type_aligned.hpp:203</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae36de20a4c0e0b1444b7903ae811d94e\"><div class=\"ttname\"><a href=\"a00303.html#gae36de20a4c0e0b1444b7903ae811d94e\">glm::packed_dmat3x2</a></div><div class=\"ttdeci\">packed_highp_dmat3x2 packed_dmat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01186\">gtc/type_aligned.hpp:1186</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga4b0ee7996651ddd04eaa0c4cdbb66332\"><div class=\"ttname\"><a href=\"a00303.html#ga4b0ee7996651ddd04eaa0c4cdbb66332\">glm::packed_mediump_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, packed_mediump &gt; packed_mediump_dmat4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00519\">gtc/type_aligned.hpp:519</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga98f0b5cd65fce164ff1367c2a3b3aa1e\"><div class=\"ttname\"><a href=\"a00303.html#ga98f0b5cd65fce164ff1367c2a3b3aa1e\">glm::aligned_lowp_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, aligned_lowp &gt; aligned_lowp_vec3</div><div class=\"ttdoc\">3 components vector aligned in memory of single-precision floating-point numbers using low precision ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00235\">gtc/type_aligned.hpp:235</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6904d09b62141d09712b76983892f95b\"><div class=\"ttname\"><a href=\"a00303.html#ga6904d09b62141d09712b76983892f95b\">glm::packed_highp_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, packed_highp &gt; packed_highp_mat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00621\">gtc/type_aligned.hpp:621</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga50c9af5aa3a848956d625fc64dc8488e\"><div class=\"ttname\"><a href=\"a00303.html#ga50c9af5aa3a848956d625fc64dc8488e\">glm::aligned_highp_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, aligned_highp &gt; aligned_highp_mat2x3</div><div class=\"ttdoc\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00565\">gtc/type_aligned.hpp:565</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaaa9cea174d342dd9650e3436823cab23\"><div class=\"ttname\"><a href=\"a00303.html#gaaa9cea174d342dd9650e3436823cab23\">glm::packed_mediump_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, packed_mediump &gt; packed_mediump_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00700\">gtc/type_aligned.hpp:700</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga4015f36bf5a5adb6ac5d45beed959867\"><div class=\"ttname\"><a href=\"a00303.html#ga4015f36bf5a5adb6ac5d45beed959867\">glm::packed_highp_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, packed_highp &gt; packed_highp_vec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of single-precision floating-point numbers using high pr...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00366\">gtc/type_aligned.hpp:366</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1ff8ed402c93d280ff0597c1c5e7c548\"><div class=\"ttname\"><a href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">glm::aligned_uvec1</a></div><div class=\"ttdeci\">aligned_highp_uvec1 aligned_uvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01254\">gtc/type_aligned.hpp:1254</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga40d49648083a0498a12a4bb41ae6ece8\"><div class=\"ttname\"><a href=\"a00303.html#ga40d49648083a0498a12a4bb41ae6ece8\">glm::aligned_highp_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, aligned_highp &gt; aligned_highp_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00831\">gtc/type_aligned.hpp:831</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa458f9d9e0934bae3097e2a373b24707\"><div class=\"ttname\"><a href=\"a00303.html#gaa458f9d9e0934bae3097e2a373b24707\">glm::packed_mediump_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, packed_mediump &gt; packed_mediump_mat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00776\">gtc/type_aligned.hpp:776</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2d6639f0bd777bae1ee0eba71cd7bfdc\"><div class=\"ttname\"><a href=\"a00303.html#ga2d6639f0bd777bae1ee0eba71cd7bfdc\">glm::aligned_lowp_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, aligned_lowp &gt; aligned_lowp_mat3x2</div><div class=\"ttdoc\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00647\">gtc/type_aligned.hpp:647</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0d22400969dd223465b2900fecfb4f53\"><div class=\"ttname\"><a href=\"a00303.html#ga0d22400969dd223465b2900fecfb4f53\">glm::packed_lowp_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, packed_lowp &gt; packed_lowp_mat3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00475\">gtc/type_aligned.hpp:475</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga09f517d88b996ef1b2f42fd54222b82d\"><div class=\"ttname\"><a href=\"a00303.html#ga09f517d88b996ef1b2f42fd54222b82d\">glm::packed_highp_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, packed_highp &gt; packed_highp_bvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00402\">gtc/type_aligned.hpp:402</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga05e6d4c908965d04191c2070a8d0a65e\"><div class=\"ttname\"><a href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">glm::aligned_vec1</a></div><div class=\"ttdeci\">aligned_highp_vec1 aligned_vec1</div><div class=\"ttdoc\">1 component vector aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00940\">gtc/type_aligned.hpp:940</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaccccd090e185450caa28b5b63ad4e8f0\"><div class=\"ttname\"><a href=\"a00303.html#gaccccd090e185450caa28b5b63ad4e8f0\">glm::packed_vec3</a></div><div class=\"ttdeci\">packed_highp_vec3 packed_vec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00958\">gtc/type_aligned.hpp:958</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga301b76a89b8a9625501ca58815017f20\"><div class=\"ttname\"><a href=\"a00303.html#ga301b76a89b8a9625501ca58815017f20\">glm::packed_mat2x3</a></div><div class=\"ttdeci\">packed_highp_mat2x3 packed_mat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01012\">gtc/type_aligned.hpp:1012</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gacfa4a542f1b20a5b63ad702dfb6fd587\"><div class=\"ttname\"><a href=\"a00303.html#gacfa4a542f1b20a5b63ad702dfb6fd587\">glm::aligned_mediump_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, aligned_mediump &gt; aligned_mediump_bvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00268\">gtc/type_aligned.hpp:268</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gacb78126ea2eb779b41c7511128ff1283\"><div class=\"ttname\"><a href=\"a00303.html#gacb78126ea2eb779b41c7511128ff1283\">glm::aligned_mediump_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, uint, aligned_mediump &gt; aligned_mediump_uvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00075\">gtc/type_aligned.hpp:75</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae766b317c5afec852bfb3d74a3c54bc8\"><div class=\"ttname\"><a href=\"a00303.html#gae766b317c5afec852bfb3d74a3c54bc8\">glm::aligned_bvec2</a></div><div class=\"ttdeci\">aligned_highp_bvec2 aligned_bvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01293\">gtc/type_aligned.hpp:1293</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaaa33d8e06657a777efb0c72c44ce87a9\"><div class=\"ttname\"><a href=\"a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9\">glm::packed_dmat2x2</a></div><div class=\"ttdeci\">packed_highp_dmat2x2 packed_dmat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01177\">gtc/type_aligned.hpp:1177</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8f22607dcd090cd280071ccc689f4079\"><div class=\"ttname\"><a href=\"a00303.html#ga8f22607dcd090cd280071ccc689f4079\">glm::packed_lowp_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, packed_lowp &gt; packed_lowp_mat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00779\">gtc/type_aligned.hpp:779</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae398fc3156f51d3684b08f62c1a5a6d4\"><div class=\"ttname\"><a href=\"a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4\">glm::packed_dmat2x4</a></div><div class=\"ttdeci\">packed_highp_dmat2x4 packed_dmat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01183\">gtc/type_aligned.hpp:1183</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga073fd6e8b241afade6d8afbd676b2667\"><div class=\"ttname\"><a href=\"a00303.html#ga073fd6e8b241afade6d8afbd676b2667\">glm::aligned_highp_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, uint, aligned_highp &gt; aligned_highp_uvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00256\">gtc/type_aligned.hpp:256</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab4c6414a59539e66a242ad4cf4b476b4\"><div class=\"ttname\"><a href=\"a00303.html#gab4c6414a59539e66a242ad4cf4b476b4\">glm::packed_mediump_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, packed_mediump &gt; packed_mediump_bvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00221\">gtc/type_aligned.hpp:221</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga780a35f764020f553a9601a3fcdcd059\"><div class=\"ttname\"><a href=\"a00303.html#ga780a35f764020f553a9601a3fcdcd059\">glm::aligned_bvec1</a></div><div class=\"ttdeci\">aligned_highp_bvec1 aligned_bvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01290\">gtc/type_aligned.hpp:1290</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5c0df24ba85eafafc0eb0c90690510ed\"><div class=\"ttname\"><a href=\"a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed\">glm::aligned_mat3x2</a></div><div class=\"ttdeci\">aligned_highp_mat3x2 aligned_mat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00991\">gtc/type_aligned.hpp:991</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1101d3a82b2e3f5f8828bd8f3adab3e1\"><div class=\"ttname\"><a href=\"a00303.html#ga1101d3a82b2e3f5f8828bd8f3adab3e1\">glm::aligned_lowp_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, aligned_lowp &gt; aligned_lowp_ivec1</div><div class=\"ttdoc\">1 component vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00069\">gtc/type_aligned.hpp:69</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga649d0acf01054b17e679cf00e150e025\"><div class=\"ttname\"><a href=\"a00303.html#ga649d0acf01054b17e679cf00e150e025\">glm::aligned_mediump_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, aligned_mediump &gt; aligned_mediump_dmat3x3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00691\">gtc/type_aligned.hpp:691</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga128cd52649621861635fab746df91735\"><div class=\"ttname\"><a href=\"a00303.html#ga128cd52649621861635fab746df91735\">glm::packed_lowp_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, packed_lowp &gt; packed_lowp_mat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00665\">gtc/type_aligned.hpp:665</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga069cc8892aadae144c00f35297617d44\"><div class=\"ttname\"><a href=\"a00303.html#ga069cc8892aadae144c00f35297617d44\">glm::packed_highp_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, packed_highp &gt; packed_highp_mat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00583\">gtc/type_aligned.hpp:583</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga776f18d1a6e7d399f05d386167dc60f5\"><div class=\"ttname\"><a href=\"a00303.html#ga776f18d1a6e7d399f05d386167dc60f5\">glm::packed_lowp_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, packed_lowp &gt; packed_lowp_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00855\">gtc/type_aligned.hpp:855</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabf842c45eea186170c267a328e3f3b7d\"><div class=\"ttname\"><a href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">glm::aligned_uvec4</a></div><div class=\"ttdeci\">aligned_highp_uvec4 aligned_uvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01263\">gtc/type_aligned.hpp:1263</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab85245913eaa40ab82adabcae37086cb\"><div class=\"ttname\"><a href=\"a00303.html#gab85245913eaa40ab82adabcae37086cb\">glm::packed_bvec2</a></div><div class=\"ttdeci\">packed_highp_bvec2 packed_bvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01305\">gtc/type_aligned.hpp:1305</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2f7b8c99ba6f2d07c73a195a8143c259\"><div class=\"ttname\"><a href=\"a00303.html#ga2f7b8c99ba6f2d07c73a195a8143c259\">glm::aligned_highp_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, aligned_highp &gt; aligned_highp_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00679\">gtc/type_aligned.hpp:679</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3180d7db84a74c402157df3bbc0ae3ed\"><div class=\"ttname\"><a href=\"a00303.html#ga3180d7db84a74c402157df3bbc0ae3ed\">glm::packed_bvec4</a></div><div class=\"ttdeci\">packed_highp_bvec4 packed_bvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01311\">gtc/type_aligned.hpp:1311</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7f79eae5927c9033d84617e49f6f34e4\"><div class=\"ttname\"><a href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">glm::aligned_ivec4</a></div><div class=\"ttdeci\">aligned_highp_ivec4 aligned_ivec4</div><div class=\"ttdoc\">4 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01225\">gtc/type_aligned.hpp:1225</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf2e07527d678440bf0c20adbeb9177c5\"><div class=\"ttname\"><a href=\"a00303.html#gaf2e07527d678440bf0c20adbeb9177c5\">glm::packed_highp_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, packed_highp &gt; packed_highp_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00697\">gtc/type_aligned.hpp:697</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad6f1b4e3a51c2c051814b60d5d1b8895\"><div class=\"ttname\"><a href=\"a00303.html#gad6f1b4e3a51c2c051814b60d5d1b8895\">glm::packed_highp_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, packed_highp &gt; packed_highp_ivec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00384\">gtc/type_aligned.hpp:384</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga134f0d99fbd2459c13cd9ebd056509fa\"><div class=\"ttname\"><a href=\"a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa\">glm::packed_mat3x2</a></div><div class=\"ttdeci\">packed_highp_mat3x2 packed_mat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01018\">gtc/type_aligned.hpp:1018</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga04db692662a4908beeaf5a5ba6e19483\"><div class=\"ttname\"><a href=\"a00303.html#ga04db692662a4908beeaf5a5ba6e19483\">glm::aligned_highp_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, uint, aligned_highp &gt; aligned_highp_uvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00164\">gtc/type_aligned.hpp:164</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga19aa695ffdb45ce29f7ea0b5029627de\"><div class=\"ttname\"><a href=\"a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de\">glm::aligned_dmat3</a></div><div class=\"ttdeci\">aligned_highp_dmat3 aligned_dmat3</div><div class=\"ttdoc\">3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01135\">gtc/type_aligned.hpp:1135</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6eca5170bb35eac90b4972590fd31a06\"><div class=\"ttname\"><a href=\"a00303.html#ga6eca5170bb35eac90b4972590fd31a06\">glm::aligned_highp_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, aligned_highp &gt; aligned_highp_ivec3</div><div class=\"ttdoc\">3 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00247\">gtc/type_aligned.hpp:247</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga07cb8e846666cbf56045b064fb553d2e\"><div class=\"ttname\"><a href=\"a00303.html#ga07cb8e846666cbf56045b064fb553d2e\">glm::aligned_lowp_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, aligned_lowp &gt; aligned_lowp_dmat2x2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00542\">gtc/type_aligned.hpp:542</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9fc2167b47c9be9295f2d8eea7f0ca75\"><div class=\"ttname\"><a href=\"a00303.html#ga9fc2167b47c9be9295f2d8eea7f0ca75\">glm::aligned_highp_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, aligned_highp &gt; aligned_highp_mat3x2</div><div class=\"ttdoc\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00641\">gtc/type_aligned.hpp:641</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5b80e28396c6ef7d32c6fd18df498451\"><div class=\"ttname\"><a href=\"a00303.html#ga5b80e28396c6ef7d32c6fd18df498451\">glm::aligned_highp_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, uint, aligned_highp &gt; aligned_highp_uvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00072\">gtc/type_aligned.hpp:72</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadab11a7504430825b648ff7c7e36b725\"><div class=\"ttname\"><a href=\"a00303.html#gadab11a7504430825b648ff7c7e36b725\">glm::aligned_mat2x4</a></div><div class=\"ttdeci\">aligned_highp_mat2x4 aligned_mat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00988\">gtc/type_aligned.hpp:988</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaeefee8317192174596852ce19b602720\"><div class=\"ttname\"><a href=\"a00303.html#gaeefee8317192174596852ce19b602720\">glm::aligned_mediump_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, aligned_mediump &gt; aligned_mediump_mat4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00492\">gtc/type_aligned.hpp:492</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga532f0c940649b1ee303acd572fc35531\"><div class=\"ttname\"><a href=\"a00303.html#ga532f0c940649b1ee303acd572fc35531\">glm::packed_dvec1</a></div><div class=\"ttdeci\">packed_highp_dvec1 packed_dvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01120\">gtc/type_aligned.hpp:1120</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5ccb2baeb0ab57b818c24e0d486c59d0\"><div class=\"ttname\"><a href=\"a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0\">glm::aligned_dmat2x4</a></div><div class=\"ttdeci\">aligned_highp_dmat2x4 aligned_dmat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01156\">gtc/type_aligned.hpp:1156</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga39e8bb9b70e5694964e8266a21ba534e\"><div class=\"ttname\"><a href=\"a00303.html#ga39e8bb9b70e5694964e8266a21ba534e\">glm::packed_mediump_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, packed_mediump &gt; packed_mediump_dmat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00557\">gtc/type_aligned.hpp:557</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9189210cabd6651a5e14a4c46fb20598\"><div class=\"ttname\"><a href=\"a00303.html#ga9189210cabd6651a5e14a4c46fb20598\">glm::packed_lowp_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, packed_lowp &gt; packed_lowp_dvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of double-precision floating-point numbers using low pre...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00289\">gtc/type_aligned.hpp:289</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga46b1b0b9eb8625a5d69137bd66cd13dc\"><div class=\"ttname\"><a href=\"a00303.html#ga46b1b0b9eb8625a5d69137bd66cd13dc\">glm::aligned_lowp_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, uint, aligned_lowp &gt; aligned_lowp_uvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00354\">gtc/type_aligned.hpp:354</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa582f38c82aef61dea7aaedf15bb06a6\"><div class=\"ttname\"><a href=\"a00303.html#gaa582f38c82aef61dea7aaedf15bb06a6\">glm::packed_highp_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, uint, packed_highp &gt; packed_highp_uvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00393\">gtc/type_aligned.hpp:393</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaea9c555e669dc56c45d95dcc75d59bf3\"><div class=\"ttname\"><a href=\"a00303.html#gaea9c555e669dc56c45d95dcc75d59bf3\">glm::packed_lowp_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, packed_lowp &gt; packed_lowp_mat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00627\">gtc/type_aligned.hpp:627</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0682462f8096a226773e20fac993cde5\"><div class=\"ttname\"><a href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">glm::aligned_vec2</a></div><div class=\"ttdeci\">aligned_highp_vec2 aligned_vec2</div><div class=\"ttdoc\">2 components vector aligned in memory of single-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00943\">gtc/type_aligned.hpp:943</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabb04f459d81d753d278b2072e2375e8e\"><div class=\"ttname\"><a href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">glm::aligned_mat2x2</a></div><div class=\"ttdeci\">aligned_highp_mat2x2 aligned_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00982\">gtc/type_aligned.hpp:982</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3894a059eeaacec8791c25de398d9955\"><div class=\"ttname\"><a href=\"a00303.html#ga3894a059eeaacec8791c25de398d9955\">glm::packed_lowp_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, packed_lowp &gt; packed_lowp_dmat3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00484\">gtc/type_aligned.hpp:484</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga635bf3732281a2c2ca54d8f9d33d178f\"><div class=\"ttname\"><a href=\"a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f\">glm::aligned_dmat3x3</a></div><div class=\"ttdeci\">aligned_highp_dmat3x3 aligned_dmat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01162\">gtc/type_aligned.hpp:1162</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5b2dc48fa19b684d207d69c6b145eb63\"><div class=\"ttname\"><a href=\"a00303.html#ga5b2dc48fa19b684d207d69c6b145eb63\">glm::packed_highp_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, packed_highp &gt; packed_highp_dvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of double-precision floating-point numbers using high pr...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00191\">gtc/type_aligned.hpp:191</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9b7feec247d378dd407ba81f56ea96c8\"><div class=\"ttname\"><a href=\"a00303.html#ga9b7feec247d378dd407ba81f56ea96c8\">glm::aligned_mediump_dmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, aligned_mediump &gt; aligned_mediump_dmat2x2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00539\">gtc/type_aligned.hpp:539</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf111fed760ecce16cb1988807569bee5\"><div class=\"ttname\"><a href=\"a00303.html#gaf111fed760ecce16cb1988807569bee5\">glm::packed_lowp_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, uint, packed_lowp &gt; packed_lowp_uvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00123\">gtc/type_aligned.hpp:123</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga958210fe245a75b058325d367c951132\"><div class=\"ttname\"><a href=\"a00303.html#ga958210fe245a75b058325d367c951132\">glm::packed_lowp_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, uint, packed_lowp &gt; packed_lowp_uvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00215\">gtc/type_aligned.hpp:215</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadf202aaa9ed71c09f9bbe347e43f8764\"><div class=\"ttname\"><a href=\"a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764\">glm::packed_dmat4x3</a></div><div class=\"ttdeci\">packed_highp_dmat4x3 packed_dmat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01198\">gtc/type_aligned.hpp:1198</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7f3148a72355e39932d6855baca42ebc\"><div class=\"ttname\"><a href=\"a00303.html#ga7f3148a72355e39932d6855baca42ebc\">glm::aligned_lowp_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, aligned_lowp &gt; aligned_lowp_dmat3x3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00694\">gtc/type_aligned.hpp:694</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabdd5fbffe8b8b8a7b33523f25b120dbe\"><div class=\"ttname\"><a href=\"a00303.html#gabdd5fbffe8b8b8a7b33523f25b120dbe\">glm::packed_highp_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, packed_highp &gt; packed_highp_mat3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00469\">gtc/type_aligned.hpp:469</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga53d519a7b1bfb69076b3ec206a6b3bd1\"><div class=\"ttname\"><a href=\"a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1\">glm::aligned_dmat2x3</a></div><div class=\"ttdeci\">aligned_highp_dmat2x3 aligned_dmat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01153\">gtc/type_aligned.hpp:1153</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga04bf49316ee777d42fcfe681ee37d7be\"><div class=\"ttname\"><a href=\"a00303.html#ga04bf49316ee777d42fcfe681ee37d7be\">glm::aligned_mediump_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, aligned_mediump &gt; aligned_mediump_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00530\">gtc/type_aligned.hpp:530</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0e44aeb930a47f9cbf2db15b56433b0f\"><div class=\"ttname\"><a href=\"a00303.html#ga0e44aeb930a47f9cbf2db15b56433b0f\">glm::aligned_lowp_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, aligned_lowp &gt; aligned_lowp_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00533\">gtc/type_aligned.hpp:533</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5546d828d63010a8f9cf81161ad0275a\"><div class=\"ttname\"><a href=\"a00303.html#ga5546d828d63010a8f9cf81161ad0275a\">glm::packed_mediump_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, packed_mediump &gt; packed_mediump_bvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00129\">gtc/type_aligned.hpp:129</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga03e1edf5666c40affe39aee35c87956f\"><div class=\"ttname\"><a href=\"a00303.html#ga03e1edf5666c40affe39aee35c87956f\">glm::packed_lowp_dmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, packed_lowp &gt; packed_lowp_dmat4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00522\">gtc/type_aligned.hpp:522</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga11581a06fc7bf941fa4d4b6aca29812c\"><div class=\"ttname\"><a href=\"a00303.html#ga11581a06fc7bf941fa4d4b6aca29812c\">glm::packed_ivec1</a></div><div class=\"ttdeci\">packed_highp_ivec1 packed_ivec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01228\">gtc/type_aligned.hpp:1228</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae3c8750f53259ece334d3aa3b3649a40\"><div class=\"ttname\"><a href=\"a00303.html#gae3c8750f53259ece334d3aa3b3649a40\">glm::packed_lowp_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, packed_lowp &gt; packed_lowp_bvec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00132\">gtc/type_aligned.hpp:132</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5f5123d834bd1170edf8c386834e112c\"><div class=\"ttname\"><a href=\"a00303.html#ga5f5123d834bd1170edf8c386834e112c\">glm::aligned_dmat3x2</a></div><div class=\"ttdeci\">aligned_highp_dmat3x2 aligned_dmat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01159\">gtc/type_aligned.hpp:1159</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab462744977beb85fb5c782bc2eea7b15\"><div class=\"ttname\"><a href=\"a00303.html#gab462744977beb85fb5c782bc2eea7b15\">glm::packed_highp_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, packed_highp &gt; packed_highp_dmat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00668\">gtc/type_aligned.hpp:668</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae4f38fd2c86cee6940986197777b3ca4\"><div class=\"ttname\"><a href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">glm::aligned_ivec2</a></div><div class=\"ttdeci\">aligned_highp_ivec2 aligned_ivec2</div><div class=\"ttdoc\">2 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01219\">gtc/type_aligned.hpp:1219</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac9bda778d0b7ad82f656dab99b71857a\"><div class=\"ttname\"><a href=\"a00303.html#gac9bda778d0b7ad82f656dab99b71857a\">glm::aligned_dmat4x4</a></div><div class=\"ttdeci\">aligned_highp_dmat4x4 aligned_dmat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01174\">gtc/type_aligned.hpp:1174</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga49e5a709d098523823b2f824e48672a6\"><div class=\"ttname\"><a href=\"a00303.html#ga49e5a709d098523823b2f824e48672a6\">glm::packed_highp_dmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, packed_highp &gt; packed_highp_dmat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00706\">gtc/type_aligned.hpp:706</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga9df1d0c425852cf63a57e533b7a83f4f\"><div class=\"ttname\"><a href=\"a00303.html#ga9df1d0c425852cf63a57e533b7a83f4f\">glm::aligned_highp_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, aligned_highp &gt; aligned_highp_bvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00357\">gtc/type_aligned.hpp:357</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7b1620f259595b9da47a6374fc44588a\"><div class=\"ttname\"><a href=\"a00303.html#ga7b1620f259595b9da47a6374fc44588a\">glm::packed_mediump_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, packed_mediump &gt; packed_mediump_bvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00405\">gtc/type_aligned.hpp:405</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2f2d913d8cca2f935b2522964408c0b2\"><div class=\"ttname\"><a href=\"a00303.html#ga2f2d913d8cca2f935b2522964408c0b2\">glm::packed_highp_mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, packed_highp &gt; packed_highp_mat2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00431\">gtc/type_aligned.hpp:431</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac401da1dd9177ad81d7618a2a5541e23\"><div class=\"ttname\"><a href=\"a00303.html#gac401da1dd9177ad81d7618a2a5541e23\">glm::packed_mat2x4</a></div><div class=\"ttdeci\">packed_highp_mat2x4 packed_mat2x4</div><div class=\"ttdoc\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01015\">gtc/type_aligned.hpp:1015</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2cb16c3fdfb15e0719d942ee3b548bc4\"><div class=\"ttname\"><a href=\"a00303.html#ga2cb16c3fdfb15e0719d942ee3b548bc4\">glm::aligned_lowp_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, aligned_lowp &gt; aligned_lowp_mat4x2</div><div class=\"ttdoc\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00761\">gtc/type_aligned.hpp:761</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadd3b8bd71a758f7fb0da8e525156f34e\"><div class=\"ttname\"><a href=\"a00303.html#gadd3b8bd71a758f7fb0da8e525156f34e\">glm::aligned_mediump_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, aligned_mediump &gt; aligned_mediump_bvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00084\">gtc/type_aligned.hpp:84</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa0d2b8a75f1908dcf32c27f8524bdced\"><div class=\"ttname\"><a href=\"a00303.html#gaa0d2b8a75f1908dcf32c27f8524bdced\">glm::aligned_highp_dmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, double, aligned_highp &gt; aligned_highp_dmat2x4</div><div class=\"ttdoc\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00612\">gtc/type_aligned.hpp:612</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga721f5404caf40d68962dcc0529de71d9\"><div class=\"ttname\"><a href=\"a00303.html#ga721f5404caf40d68962dcc0529de71d9\">glm::aligned_mediump_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, aligned_mediump &gt; aligned_mediump_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00682\">gtc/type_aligned.hpp:682</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae89d72ffc149147f61df701bbc8755bf\"><div class=\"ttname\"><a href=\"a00303.html#gae89d72ffc149147f61df701bbc8755bf\">glm::packed_mediump_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, packed_mediump &gt; packed_mediump_mat4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00510\">gtc/type_aligned.hpp:510</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga71d63cead1e113fca0bcdaaa33aad050\"><div class=\"ttname\"><a href=\"a00303.html#ga71d63cead1e113fca0bcdaaa33aad050\">glm::packed_mediump_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, packed_mediump &gt; packed_mediump_vec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of single-precision floating-point numbers using medium p...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00093\">gtc/type_aligned.hpp:93</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8b8fb86973a0b768c5bd802c92fac1a1\"><div class=\"ttname\"><a href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\">glm::aligned_mat4x4</a></div><div class=\"ttdeci\">aligned_highp_mat4x4 aligned_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01006\">gtc/type_aligned.hpp:1006</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac9a2d0fb815fd5c2bd58b869c55e32d3\"><div class=\"ttname\"><a href=\"a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3\">glm::aligned_mat4x2</a></div><div class=\"ttdeci\">aligned_highp_mat4x2 aligned_mat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01000\">gtc/type_aligned.hpp:1000</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3815661df0e2de79beff8168c09adf1e\"><div class=\"ttname\"><a href=\"a00303.html#ga3815661df0e2de79beff8168c09adf1e\">glm::packed_highp_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, packed_highp &gt; packed_highp_vec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of single-precision floating-point numbers using high pr...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00274\">gtc/type_aligned.hpp:274</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8a9f0a4795ccc442fa9901845026f9f5\"><div class=\"ttname\"><a href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">glm::aligned_dvec4</a></div><div class=\"ttdeci\">aligned_highp_dvec4 aligned_dvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of double-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01117\">gtc/type_aligned.hpp:1117</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad63b8c5b4dc0500d54d7414ef555178f\"><div class=\"ttname\"><a href=\"a00303.html#gad63b8c5b4dc0500d54d7414ef555178f\">glm::aligned_highp_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, aligned_highp &gt; aligned_highp_ivec1</div><div class=\"ttdoc\">1 component vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00063\">gtc/type_aligned.hpp:63</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1eb9076cc28ead5020fd3029fd0472c5\"><div class=\"ttname\"><a href=\"a00303.html#ga1eb9076cc28ead5020fd3029fd0472c5\">glm::aligned_lowp_mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, aligned_lowp &gt; aligned_lowp_mat3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00457\">gtc/type_aligned.hpp:457</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3a7eeae43cb7673e14cc89bf02f7dd45\"><div class=\"ttname\"><a href=\"a00303.html#ga3a7eeae43cb7673e14cc89bf02f7dd45\">glm::aligned_highp_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, aligned_highp &gt; aligned_highp_dmat2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00422\">gtc/type_aligned.hpp:422</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf488c6ad88c185054595d4d5c7ba5b9d\"><div class=\"ttname\"><a href=\"a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d\">glm::aligned_dmat3x4</a></div><div class=\"ttdeci\">aligned_highp_dmat3x4 aligned_dmat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01165\">gtc/type_aligned.hpp:1165</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0c48f9417f649e27f3fb0c9f733a18bd\"><div class=\"ttname\"><a href=\"a00303.html#ga0c48f9417f649e27f3fb0c9f733a18bd\">glm::packed_bvec3</a></div><div class=\"ttdeci\">packed_highp_bvec3 packed_bvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01308\">gtc/type_aligned.hpp:1308</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0149fe15668925147e07c94fd2c2d6ae\"><div class=\"ttname\"><a href=\"a00303.html#ga0149fe15668925147e07c94fd2c2d6ae\">glm::packed_highp_mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, packed_highp &gt; packed_highp_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00849\">gtc/type_aligned.hpp:849</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab0eb771b708c5b2205d9b14dd1434fd8\"><div class=\"ttname\"><a href=\"a00303.html#gab0eb771b708c5b2205d9b14dd1434fd8\">glm::packed_mediump_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, packed_mediump &gt; packed_mediump_vec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of single-precision floating-point numbers using medium ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00277\">gtc/type_aligned.hpp:277</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6f94fcd28dde906fc6cad5f742b55c1a\"><div class=\"ttname\"><a href=\"a00303.html#ga6f94fcd28dde906fc6cad5f742b55c1a\">glm::aligned_lowp_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, uint, aligned_lowp &gt; aligned_lowp_uvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00170\">gtc/type_aligned.hpp:170</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga862843a45b01c35ffe4d44c47ea774ad\"><div class=\"ttname\"><a href=\"a00303.html#ga862843a45b01c35ffe4d44c47ea774ad\">glm::aligned_highp_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, aligned_highp &gt; aligned_highp_bvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00081\">gtc/type_aligned.hpp:81</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad791d671f4fcf1ed1ea41f752916b70a\"><div class=\"ttname\"><a href=\"a00303.html#gad791d671f4fcf1ed1ea41f752916b70a\">glm::packed_highp_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, packed_highp &gt; packed_highp_bvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00218\">gtc/type_aligned.hpp:218</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7245acc887a5438f46fd85fdf076bb3b\"><div class=\"ttname\"><a href=\"a00303.html#ga7245acc887a5438f46fd85fdf076bb3b\">glm::packed_highp_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, packed_highp &gt; packed_highp_ivec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00108\">gtc/type_aligned.hpp:108</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0edcfdd179f8a158342eead48a4d0c2a\"><div class=\"ttname\"><a href=\"a00303.html#ga0edcfdd179f8a158342eead48a4d0c2a\">glm::aligned_highp_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, aligned_highp &gt; aligned_highp_mat2x4</div><div class=\"ttdoc\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00603\">gtc/type_aligned.hpp:603</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga52635859f5ef660ab999d22c11b7867f\"><div class=\"ttname\"><a href=\"a00303.html#ga52635859f5ef660ab999d22c11b7867f\">glm::packed_lowp_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, packed_lowp &gt; packed_lowp_ivec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00206\">gtc/type_aligned.hpp:206</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaaac6b356ef00154da41aaae7d1549193\"><div class=\"ttname\"><a href=\"a00303.html#gaaac6b356ef00154da41aaae7d1549193\">glm::packed_highp_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, packed_highp &gt; packed_highp_dvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of double-precision floating-point numbers using high pr...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00283\">gtc/type_aligned.hpp:283</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga41563650f36cb7f479e080de21e08418\"><div class=\"ttname\"><a href=\"a00303.html#ga41563650f36cb7f479e080de21e08418\">glm::aligned_highp_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, aligned_highp &gt; aligned_highp_ivec2</div><div class=\"ttdoc\">2 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00155\">gtc/type_aligned.hpp:155</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6783859382677d35fcd5dac7dcbefdbd\"><div class=\"ttname\"><a href=\"a00303.html#ga6783859382677d35fcd5dac7dcbefdbd\">glm::aligned_dmat2</a></div><div class=\"ttdeci\">aligned_highp_dmat2 aligned_dmat2</div><div class=\"ttdoc\">2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01132\">gtc/type_aligned.hpp:1132</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga86efe91cdaa2864c828a5d6d46356c6a\"><div class=\"ttname\"><a href=\"a00303.html#ga86efe91cdaa2864c828a5d6d46356c6a\">glm::packed_mediump_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, packed_mediump &gt; packed_mediump_dmat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00671\">gtc/type_aligned.hpp:671</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad6fc921bdde2bdbc7e09b028e1e9b379\"><div class=\"ttname\"><a href=\"a00303.html#gad6fc921bdde2bdbc7e09b028e1e9b379\">glm::aligned_mediump_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, uint, aligned_mediump &gt; aligned_mediump_uvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00259\">gtc/type_aligned.hpp:259</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga262dafd0c001c3a38d1cc91d024ca738\"><div class=\"ttname\"><a href=\"a00303.html#ga262dafd0c001c3a38d1cc91d024ca738\">glm::packed_lowp_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, packed_lowp &gt; packed_lowp_dvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of double-precision floating-point numbers using low pre...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00381\">gtc/type_aligned.hpp:381</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1f18ada6f7cdd8c46db33ba987280fc4\"><div class=\"ttname\"><a href=\"a00303.html#ga1f18ada6f7cdd8c46db33ba987280fc4\">glm::packed_mediump_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, packed_mediump &gt; packed_mediump_dvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of double-precision floating-point numbers using medium ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00286\">gtc/type_aligned.hpp:286</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gafcb189f4f93648fe7ca802ca4aca2eb8\"><div class=\"ttname\"><a href=\"a00303.html#gafcb189f4f93648fe7ca802ca4aca2eb8\">glm::aligned_mediump_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, aligned_mediump &gt; aligned_mediump_dmat2x3</div><div class=\"ttdoc\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00577\">gtc/type_aligned.hpp:577</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga65663f10a02e52cedcddbcfe36ddf38d\"><div class=\"ttname\"><a href=\"a00303.html#ga65663f10a02e52cedcddbcfe36ddf38d\">glm::aligned_lowp_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, aligned_lowp &gt; aligned_lowp_ivec3</div><div class=\"ttdoc\">3 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00253\">gtc/type_aligned.hpp:253</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab559d943abf92bc588bcd3f4c0e4664b\"><div class=\"ttname\"><a href=\"a00303.html#gab559d943abf92bc588bcd3f4c0e4664b\">glm::aligned_highp_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, aligned_highp &gt; aligned_highp_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00527\">gtc/type_aligned.hpp:527</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gafff1684c4ff19b4a818138ccacc1e78d\"><div class=\"ttname\"><a href=\"a00303.html#gafff1684c4ff19b4a818138ccacc1e78d\">glm::aligned_highp_mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, float, aligned_highp &gt; aligned_highp_mat4x3</div><div class=\"ttdoc\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00793\">gtc/type_aligned.hpp:793</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0913bdf048d0cb74af1d2512aec675bc\"><div class=\"ttname\"><a href=\"a00303.html#ga0913bdf048d0cb74af1d2512aec675bc\">glm::aligned_highp_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, aligned_highp &gt; aligned_highp_bvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00265\">gtc/type_aligned.hpp:265</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3a30c137c1f8cce478c28eab0427a570\"><div class=\"ttname\"><a href=\"a00303.html#ga3a30c137c1f8cce478c28eab0427a570\">glm::packed_lowp_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, packed_lowp &gt; packed_lowp_vec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of single-precision floating-point numbers using low pre...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00280\">gtc/type_aligned.hpp:280</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga081d53e0a71443d0b68ea61c870f9adc\"><div class=\"ttname\"><a href=\"a00303.html#ga081d53e0a71443d0b68ea61c870f9adc\">glm::aligned_mediump_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, uint, aligned_mediump &gt; aligned_mediump_uvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00167\">gtc/type_aligned.hpp:167</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga09507ef020a49517a7bcd50438f05056\"><div class=\"ttname\"><a href=\"a00303.html#ga09507ef020a49517a7bcd50438f05056\">glm::packed_mediump_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, packed_mediump &gt; packed_mediump_ivec1</div><div class=\"ttdoc\">1 component vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00111\">gtc/type_aligned.hpp:111</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad8f6abb2c9994850b5d5c04a5f979ed8\"><div class=\"ttname\"><a href=\"a00303.html#gad8f6abb2c9994850b5d5c04a5f979ed8\">glm::aligned_highp_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, aligned_highp &gt; aligned_highp_dmat3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00460\">gtc/type_aligned.hpp:460</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga63a73be86a4f07ea7a7499ab0bfebe45\"><div class=\"ttname\"><a href=\"a00303.html#ga63a73be86a4f07ea7a7499ab0bfebe45\">glm::packed_mediump_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, uint, packed_mediump &gt; packed_mediump_uvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00396\">gtc/type_aligned.hpp:396</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5a97f0355d801de3444d42c1d5b40438\"><div class=\"ttname\"><a href=\"a00303.html#ga5a97f0355d801de3444d42c1d5b40438\">glm::aligned_mediump_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, aligned_mediump &gt; aligned_mediump_dmat3x2</div><div class=\"ttdoc\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00653\">gtc/type_aligned.hpp:653</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga45e155a4840f69b2fa4ed8047a676860\"><div class=\"ttname\"><a href=\"a00303.html#ga45e155a4840f69b2fa4ed8047a676860\">glm::aligned_mediump_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, aligned_mediump &gt; aligned_mediump_dmat3x4</div><div class=\"ttdoc\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00729\">gtc/type_aligned.hpp:729</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab5b36cc9caee1bb1c5178fe191bf5713\"><div class=\"ttname\"><a href=\"a00303.html#gab5b36cc9caee1bb1c5178fe191bf5713\">glm::packed_mediump_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, packed_mediump &gt; packed_mediump_dmat4x3</div><div class=\"ttdoc\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00823\">gtc/type_aligned.hpp:823</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab704d4fb15f6f96d70e363d5db7060cd\"><div class=\"ttname\"><a href=\"a00303.html#gab704d4fb15f6f96d70e363d5db7060cd\">glm::packed_highp_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, uint, packed_highp &gt; packed_highp_uvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00209\">gtc/type_aligned.hpp:209</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga73ea0c1ba31580e107d21270883f51fc\"><div class=\"ttname\"><a href=\"a00303.html#ga73ea0c1ba31580e107d21270883f51fc\">glm::aligned_mediump_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, uint, aligned_mediump &gt; aligned_mediump_uvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00351\">gtc/type_aligned.hpp:351</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga568b850f1116b667043533cf77826968\"><div class=\"ttname\"><a href=\"a00303.html#ga568b850f1116b667043533cf77826968\">glm::packed_mediump_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, packed_mediump &gt; packed_mediump_dvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of double-precision floating-point numbers using medium ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00378\">gtc/type_aligned.hpp:378</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga85d89e83cb8137e1be1446de8c3b643a\"><div class=\"ttname\"><a href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">glm::aligned_vec4</a></div><div class=\"ttdeci\">aligned_highp_vec4 aligned_vec4</div><div class=\"ttdoc\">4 components vector aligned in memory of single-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00949\">gtc/type_aligned.hpp:949</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga31bfa801e1579fdba752ec3f7a45ec91\"><div class=\"ttname\"><a href=\"a00303.html#ga31bfa801e1579fdba752ec3f7a45ec91\">glm::aligned_highp_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, aligned_highp &gt; aligned_highp_ivec4</div><div class=\"ttdoc\">4 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00339\">gtc/type_aligned.hpp:339</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0e37cff4a43cca866101f0a35f01db6d\"><div class=\"ttname\"><a href=\"a00303.html#ga0e37cff4a43cca866101f0a35f01db6d\">glm::aligned_lowp_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, aligned_lowp &gt; aligned_lowp_dvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of double-precision floating-point numbers using low precision ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00152\">gtc/type_aligned.hpp:152</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga88632cea9008ac0ac1388e94e804a53c\"><div class=\"ttname\"><a href=\"a00303.html#ga88632cea9008ac0ac1388e94e804a53c\">glm::packed_bvec1</a></div><div class=\"ttdeci\">packed_highp_bvec1 packed_bvec1</div><div class=\"ttdoc\">1 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01302\">gtc/type_aligned.hpp:1302</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3e7df5a11e1be27bc29a4c0d3956f234\"><div class=\"ttname\"><a href=\"a00303.html#ga3e7df5a11e1be27bc29a4c0d3956f234\">glm::packed_lowp_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, packed_lowp &gt; packed_lowp_mat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00589\">gtc/type_aligned.hpp:589</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab34aee3d5e121c543fea11d2c50ecc43\"><div class=\"ttname\"><a href=\"a00303.html#gab34aee3d5e121c543fea11d2c50ecc43\">glm::aligned_lowp_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, aligned_lowp &gt; aligned_lowp_vec1</div><div class=\"ttdoc\">1 component vector aligned in memory of single-precision floating-point numbers using low precision a...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00051\">gtc/type_aligned.hpp:51</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gafbf1c2cce307c5594b165819ed83bf5d\"><div class=\"ttname\"><a href=\"a00303.html#gafbf1c2cce307c5594b165819ed83bf5d\">glm::packed_lowp_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, packed_lowp &gt; packed_lowp_vec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of single-precision floating-point numbers using low pre...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00188\">gtc/type_aligned.hpp:188</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaf0448b0f7ceb8273f7eda3a92205eefc\"><div class=\"ttname\"><a href=\"a00303.html#gaf0448b0f7ceb8273f7eda3a92205eefc\">glm::aligned_highp_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, aligned_highp &gt; aligned_highp_dvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of double-precision floating-point numbers using high precision ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00054\">gtc/type_aligned.hpp:54</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga99049db01faf1e95ed9fb875a47dffe2\"><div class=\"ttname\"><a href=\"a00303.html#ga99049db01faf1e95ed9fb875a47dffe2\">glm::packed_mediump_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, packed_mediump &gt; packed_mediump_mat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00586\">gtc/type_aligned.hpp:586</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga04cfaf1421284df3c24ea0985dab24e7\"><div class=\"ttname\"><a href=\"a00303.html#ga04cfaf1421284df3c24ea0985dab24e7\">glm::packed_mediump_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, packed_mediump &gt; packed_mediump_mat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00662\">gtc/type_aligned.hpp:662</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga320d1c661cff2ef214eb50241f2928b2\"><div class=\"ttname\"><a href=\"a00303.html#ga320d1c661cff2ef214eb50241f2928b2\">glm::aligned_mediump_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, aligned_mediump &gt; aligned_mediump_vec4</div><div class=\"ttdoc\">4 components vector aligned in memory of single-precision floating-point numbers using medium precisi...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00324\">gtc/type_aligned.hpp:324</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae8a9b181f9dc813ad6e125a52b14b935\"><div class=\"ttname\"><a href=\"a00303.html#gae8a9b181f9dc813ad6e125a52b14b935\">glm::packed_dvec4</a></div><div class=\"ttdeci\">packed_highp_dvec4 packed_dvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01129\">gtc/type_aligned.hpp:1129</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaffd747ea2aea1e69c2ecb04e68521b21\"><div class=\"ttname\"><a href=\"a00303.html#gaffd747ea2aea1e69c2ecb04e68521b21\">glm::aligned_mediump_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, aligned_mediump &gt; aligned_mediump_dvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of double-precision floating-point numbers using medium precisi...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00333\">gtc/type_aligned.hpp:333</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga21e86cf2f6c126bacf31b8985db06bd4\"><div class=\"ttname\"><a href=\"a00303.html#ga21e86cf2f6c126bacf31b8985db06bd4\">glm::packed_mediump_dmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, double, packed_mediump &gt; packed_mediump_dmat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00861\">gtc/type_aligned.hpp:861</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gad5dcaf93df267bc3029174e430e0907f\"><div class=\"ttname\"><a href=\"a00303.html#gad5dcaf93df267bc3029174e430e0907f\">glm::packed_mediump_dmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, double, packed_mediump &gt; packed_mediump_dmat3x4</div><div class=\"ttdoc\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00747\">gtc/type_aligned.hpp:747</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga52e00afd0eb181e6738f40cf41787049\"><div class=\"ttname\"><a href=\"a00303.html#ga52e00afd0eb181e6738f40cf41787049\">glm::aligned_highp_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, aligned_highp &gt; aligned_highp_mat3x4</div><div class=\"ttdoc\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00717\">gtc/type_aligned.hpp:717</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga058ae939bfdbcbb80521dd4a3b01afba\"><div class=\"ttname\"><a href=\"a00303.html#ga058ae939bfdbcbb80521dd4a3b01afba\">glm::aligned_highp_mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, aligned_highp &gt; aligned_highp_mat4</div><div class=\"ttdoc\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00489\">gtc/type_aligned.hpp:489</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2ccdcd4846775cbe4f9d12e71d55b5d2\"><div class=\"ttname\"><a href=\"a00303.html#ga2ccdcd4846775cbe4f9d12e71d55b5d2\">glm::packed_lowp_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, packed_lowp &gt; packed_lowp_dmat2x3</div><div class=\"ttdoc\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00598\">gtc/type_aligned.hpp:598</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga98f4dc6722a2541a990918c074075359\"><div class=\"ttname\"><a href=\"a00303.html#ga98f4dc6722a2541a990918c074075359\">glm::aligned_mediump_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, aligned_mediump &gt; aligned_mediump_mat3x4</div><div class=\"ttdoc\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00720\">gtc/type_aligned.hpp:720</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab9b909f1392d86854334350efcae85f5\"><div class=\"ttname\"><a href=\"a00303.html#gab9b909f1392d86854334350efcae85f5\">glm::packed_dmat3x3</a></div><div class=\"ttdeci\">packed_highp_dmat3x3 packed_dmat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01189\">gtc/type_aligned.hpp:1189</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadb065dbe5c11271fef8cf2ea8608f187\"><div class=\"ttname\"><a href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">glm::aligned_mat3x3</a></div><div class=\"ttdeci\">aligned_highp_mat3x3 aligned_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00994\">gtc/type_aligned.hpp:994</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga98c9d122a959e9f3ce10a5623c310f5d\"><div class=\"ttname\"><a href=\"a00303.html#ga98c9d122a959e9f3ce10a5623c310f5d\">glm::packed_lowp_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, packed_lowp &gt; packed_lowp_ivec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00298\">gtc/type_aligned.hpp:298</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga001bb387ae8192fa94dbd8b23b600439\"><div class=\"ttname\"><a href=\"a00303.html#ga001bb387ae8192fa94dbd8b23b600439\">glm::aligned_dmat4</a></div><div class=\"ttdeci\">aligned_highp_dmat4 aligned_dmat4</div><div class=\"ttdoc\">4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01138\">gtc/type_aligned.hpp:1138</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga84e1f5e0718952a079b748825c03f956\"><div class=\"ttname\"><a href=\"a00303.html#ga84e1f5e0718952a079b748825c03f956\">glm::aligned_highp_mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, float, aligned_highp &gt; aligned_highp_mat4x2</div><div class=\"ttdoc\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00755\">gtc/type_aligned.hpp:755</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6b8b9475e7c3b16aed13edbc460bbc4d\"><div class=\"ttname\"><a href=\"a00303.html#ga6b8b9475e7c3b16aed13edbc460bbc4d\">glm::packed_highp_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, packed_highp &gt; packed_highp_vec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of single-precision floating-point numbers using high pr...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00182\">gtc/type_aligned.hpp:182</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga79a90173d8faa9816dc852ce447d66ca\"><div class=\"ttname\"><a href=\"a00303.html#ga79a90173d8faa9816dc852ce447d66ca\">glm::aligned_lowp_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, aligned_lowp &gt; aligned_lowp_dmat2</div><div class=\"ttdoc\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00428\">gtc/type_aligned.hpp:428</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gafdd97922b4a2a42cd0c99a13877ff4da\"><div class=\"ttname\"><a href=\"a00303.html#gafdd97922b4a2a42cd0c99a13877ff4da\">glm::packed_lowp_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, uint, packed_lowp &gt; packed_lowp_uvec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00399\">gtc/type_aligned.hpp:399</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gac228b70372abd561340d5f926a7c1778\"><div class=\"ttname\"><a href=\"a00303.html#gac228b70372abd561340d5f926a7c1778\">glm::packed_ivec4</a></div><div class=\"ttdeci\">packed_highp_ivec4 packed_ivec4</div><div class=\"ttdoc\">4 components vector tightly packed in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01237\">gtc/type_aligned.hpp:1237</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5c194b11fbda636f2ab20c3bd0079196\"><div class=\"ttname\"><a href=\"a00303.html#ga5c194b11fbda636f2ab20c3bd0079196\">glm::packed_dvec2</a></div><div class=\"ttdeci\">packed_highp_dvec2 packed_dvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01123\">gtc/type_aligned.hpp:1123</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaeaab04e378a90956eec8d68a99d777ed\"><div class=\"ttname\"><a href=\"a00303.html#gaeaab04e378a90956eec8d68a99d777ed\">glm::aligned_lowp_mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, aligned_lowp &gt; aligned_lowp_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00685\">gtc/type_aligned.hpp:685</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga23ec236950f5859f59197663266b535d\"><div class=\"ttname\"><a href=\"a00303.html#ga23ec236950f5859f59197663266b535d\">glm::packed_lowp_dmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, double, packed_lowp &gt; packed_lowp_dmat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00674\">gtc/type_aligned.hpp:674</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2624719cb251d8de8cad1beaefc3a3f9\"><div class=\"ttname\"><a href=\"a00303.html#ga2624719cb251d8de8cad1beaefc3a3f9\">glm::packed_highp_mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, float, packed_highp &gt; packed_highp_mat3x2</div><div class=\"ttdoc\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00659\">gtc/type_aligned.hpp:659</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6dc2832b747c00e0a0df621aba196960\"><div class=\"ttname\"><a href=\"a00303.html#ga6dc2832b747c00e0a0df621aba196960\">glm::aligned_mediump_dmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, double, aligned_mediump &gt; aligned_mediump_dmat3</div><div class=\"ttdoc\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00463\">gtc/type_aligned.hpp:463</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7dec6d96bc61312b1e56d137c9c74030\"><div class=\"ttname\"><a href=\"a00303.html#ga7dec6d96bc61312b1e56d137c9c74030\">glm::aligned_lowp_mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, float, aligned_lowp &gt; aligned_lowp_mat2x3</div><div class=\"ttdoc\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00571\">gtc/type_aligned.hpp:571</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga20e63dd980b81af10cadbbe219316650\"><div class=\"ttname\"><a href=\"a00303.html#ga20e63dd980b81af10cadbbe219316650\">glm::aligned_mediump_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, aligned_mediump &gt; aligned_mediump_ivec1</div><div class=\"ttdoc\">1 component vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00066\">gtc/type_aligned.hpp:66</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae29686632fd05efac0675d9a6370d77b\"><div class=\"ttname\"><a href=\"a00303.html#gae29686632fd05efac0675d9a6370d77b\">glm::packed_highp_dmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, double, packed_highp &gt; packed_highp_dmat2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precisio...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00440\">gtc/type_aligned.hpp:440</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6844c6f4691d1bf67673240850430948\"><div class=\"ttname\"><a href=\"a00303.html#ga6844c6f4691d1bf67673240850430948\">glm::packed_mediump_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, packed_mediump &gt; packed_mediump_vec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of single-precision floating-point numbers using medium ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00185\">gtc/type_aligned.hpp:185</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga43a92a24ca863e0e0f3b65834b3cf714\"><div class=\"ttname\"><a href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">glm::aligned_mat3</a></div><div class=\"ttdeci\">aligned_highp_mat3 aligned_mat3</div><div class=\"ttdoc\">3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00967\">gtc/type_aligned.hpp:967</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae84f4763ecdc7457ecb7930bad12057c\"><div class=\"ttname\"><a href=\"a00303.html#gae84f4763ecdc7457ecb7930bad12057c\">glm::aligned_mediump_dmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, double, aligned_mediump &gt; aligned_mediump_dmat4x3</div><div class=\"ttdoc\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00805\">gtc/type_aligned.hpp:805</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2d2a73e662759e301c22b8931ff6a526\"><div class=\"ttname\"><a href=\"a00303.html#ga2d2a73e662759e301c22b8931ff6a526\">glm::packed_mediump_mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, packed_mediump &gt; packed_mediump_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precis...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00548\">gtc/type_aligned.hpp:548</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa7c9d4ab7ab651cdf8001fe7843e238b\"><div class=\"ttname\"><a href=\"a00303.html#gaa7c9d4ab7ab651cdf8001fe7843e238b\">glm::aligned_highp_dmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, double, aligned_highp &gt; aligned_highp_dmat2x3</div><div class=\"ttdoc\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arith...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00574\">gtc/type_aligned.hpp:574</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga18d859f87122b2b3b2992ffe86dbebc0\"><div class=\"ttname\"><a href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">glm::aligned_dvec2</a></div><div class=\"ttdeci\">aligned_highp_dvec2 aligned_dvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of double-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01111\">gtc/type_aligned.hpp:1111</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1f03696ab066572c6c044e63edf635a2\"><div class=\"ttname\"><a href=\"a00303.html#ga1f03696ab066572c6c044e63edf635a2\">glm::aligned_lowp_mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, float, aligned_lowp &gt; aligned_lowp_mat3x4</div><div class=\"ttdoc\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithm...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00723\">gtc/type_aligned.hpp:723</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga379c1153f1339bdeaefd592bebf538e8\"><div class=\"ttname\"><a href=\"a00303.html#ga379c1153f1339bdeaefd592bebf538e8\">glm::packed_mat4x2</a></div><div class=\"ttdeci\">packed_highp_mat4x2 packed_mat4x2</div><div class=\"ttdoc\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01027\">gtc/type_aligned.hpp:1027</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga82f7275d6102593a69ce38cdad680409\"><div class=\"ttname\"><a href=\"a00303.html#ga82f7275d6102593a69ce38cdad680409\">glm::aligned_lowp_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, aligned_lowp &gt; aligned_lowp_vec4</div><div class=\"ttdoc\">4 components vector aligned in memory of single-precision floating-point numbers using low precision ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00327\">gtc/type_aligned.hpp:327</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga6a5a3250b57dfadc66735bc72911437f\"><div class=\"ttname\"><a href=\"a00303.html#ga6a5a3250b57dfadc66735bc72911437f\">glm::packed_highp_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, packed_highp &gt; packed_highp_bvec3</div><div class=\"ttdoc\">3 components vector tightly packed in memory of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00310\">gtc/type_aligned.hpp:310</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadc19938ddb204bfcb4d9ef35b1e2bf93\"><div class=\"ttname\"><a href=\"a00303.html#gadc19938ddb204bfcb4d9ef35b1e2bf93\">glm::packed_lowp_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, packed_lowp &gt; packed_lowp_dvec2</div><div class=\"ttdoc\">2 components vector tightly packed in memory of double-precision floating-point numbers using low pre...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00197\">gtc/type_aligned.hpp:197</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga058e7ddab1428e47f2197bdd3a5a6953\"><div class=\"ttname\"><a href=\"a00303.html#ga058e7ddab1428e47f2197bdd3a5a6953\">glm::aligned_mediump_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, aligned_mediump &gt; aligned_mediump_dvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of double-precision floating-point numbers using medium precisi...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00241\">gtc/type_aligned.hpp:241</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga3a25e494173f6a64637b08a1b50a2132\"><div class=\"ttname\"><a href=\"a00303.html#ga3a25e494173f6a64637b08a1b50a2132\">glm::aligned_mediump_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, aligned_mediump &gt; aligned_mediump_vec3</div><div class=\"ttdoc\">3 components vector aligned in memory of single-precision floating-point numbers using medium precisi...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00232\">gtc/type_aligned.hpp:232</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga163facc9ed2692ea1300ed57c5d12b17\"><div class=\"ttname\"><a href=\"a00303.html#ga163facc9ed2692ea1300ed57c5d12b17\">glm::aligned_mediump_mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, float, aligned_mediump &gt; aligned_mediump_mat2x4</div><div class=\"ttdoc\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision ari...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00606\">gtc/type_aligned.hpp:606</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae94ef61edfa047d05bc69b6065fc42ba\"><div class=\"ttname\"><a href=\"a00303.html#gae94ef61edfa047d05bc69b6065fc42ba\">glm::aligned_highp_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, aligned_highp &gt; aligned_highp_dvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of double-precision floating-point numbers using high precision...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00238\">gtc/type_aligned.hpp:238</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga4d0bd70d5fac49b800546d608b707513\"><div class=\"ttname\"><a href=\"a00303.html#ga4d0bd70d5fac49b800546d608b707513\">glm::aligned_highp_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, aligned_highp &gt; aligned_highp_vec1</div><div class=\"ttdoc\">1 component vector aligned in memory of single-precision floating-point numbers using high precision ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00045\">gtc/type_aligned.hpp:45</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00162.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_aligned.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/type_aligned.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00364.html\">GLM_GTX_type_aligned</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00162_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gab5cd5c5fad228b25c782084f1cc30114\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab5cd5c5fad228b25c782084f1cc30114\">GLM_ALIGNED_TYPEDEF</a> (lowp_int8, aligned_lowp_int8, 1)</td></tr>\n<tr class=\"memdesc:gab5cd5c5fad228b25c782084f1cc30114\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gab5cd5c5fad228b25c782084f1cc30114\">More...</a><br /></td></tr>\n<tr class=\"separator:gab5cd5c5fad228b25c782084f1cc30114\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5bb5dd895ef625c1b113f2cf400186b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5bb5dd895ef625c1b113f2cf400186b0\">GLM_ALIGNED_TYPEDEF</a> (lowp_int16, aligned_lowp_int16, 2)</td></tr>\n<tr class=\"memdesc:ga5bb5dd895ef625c1b113f2cf400186b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga5bb5dd895ef625c1b113f2cf400186b0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5bb5dd895ef625c1b113f2cf400186b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac6efa54cf7c6c86f7158922abdb1a430\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac6efa54cf7c6c86f7158922abdb1a430\">GLM_ALIGNED_TYPEDEF</a> (lowp_int32, aligned_lowp_int32, 4)</td></tr>\n<tr class=\"memdesc:gac6efa54cf7c6c86f7158922abdb1a430\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gac6efa54cf7c6c86f7158922abdb1a430\">More...</a><br /></td></tr>\n<tr class=\"separator:gac6efa54cf7c6c86f7158922abdb1a430\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6612eb77c8607048e7552279a11eeb5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6612eb77c8607048e7552279a11eeb5f\">GLM_ALIGNED_TYPEDEF</a> (lowp_int64, aligned_lowp_int64, 8)</td></tr>\n<tr class=\"memdesc:ga6612eb77c8607048e7552279a11eeb5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga6612eb77c8607048e7552279a11eeb5f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6612eb77c8607048e7552279a11eeb5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ddc1848ff2223026db8968ce0c97497\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7ddc1848ff2223026db8968ce0c97497\">GLM_ALIGNED_TYPEDEF</a> (lowp_int8_t, aligned_lowp_int8_t, 1)</td></tr>\n<tr class=\"memdesc:ga7ddc1848ff2223026db8968ce0c97497\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga7ddc1848ff2223026db8968ce0c97497\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ddc1848ff2223026db8968ce0c97497\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga22240dd9458b0f8c11fbcc4f48714f68\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga22240dd9458b0f8c11fbcc4f48714f68\">GLM_ALIGNED_TYPEDEF</a> (lowp_int16_t, aligned_lowp_int16_t, 2)</td></tr>\n<tr class=\"memdesc:ga22240dd9458b0f8c11fbcc4f48714f68\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga22240dd9458b0f8c11fbcc4f48714f68\">More...</a><br /></td></tr>\n<tr class=\"separator:ga22240dd9458b0f8c11fbcc4f48714f68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8130ea381d76a2cc34a93ccbb6cf487d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8130ea381d76a2cc34a93ccbb6cf487d\">GLM_ALIGNED_TYPEDEF</a> (lowp_int32_t, aligned_lowp_int32_t, 4)</td></tr>\n<tr class=\"memdesc:ga8130ea381d76a2cc34a93ccbb6cf487d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga8130ea381d76a2cc34a93ccbb6cf487d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8130ea381d76a2cc34a93ccbb6cf487d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ccb60f3215d293fd62b33b31ed0e7be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7ccb60f3215d293fd62b33b31ed0e7be\">GLM_ALIGNED_TYPEDEF</a> (lowp_int64_t, aligned_lowp_int64_t, 8)</td></tr>\n<tr class=\"memdesc:ga7ccb60f3215d293fd62b33b31ed0e7be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga7ccb60f3215d293fd62b33b31ed0e7be\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ccb60f3215d293fd62b33b31ed0e7be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac20d508d2ef5cc95ad3daf083c57ec2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac20d508d2ef5cc95ad3daf083c57ec2a\">GLM_ALIGNED_TYPEDEF</a> (lowp_i8, aligned_lowp_i8, 1)</td></tr>\n<tr class=\"memdesc:gac20d508d2ef5cc95ad3daf083c57ec2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gac20d508d2ef5cc95ad3daf083c57ec2a\">More...</a><br /></td></tr>\n<tr class=\"separator:gac20d508d2ef5cc95ad3daf083c57ec2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50257b48069a31d0c8d9c1f644d267de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga50257b48069a31d0c8d9c1f644d267de\">GLM_ALIGNED_TYPEDEF</a> (lowp_i16, aligned_lowp_i16, 2)</td></tr>\n<tr class=\"memdesc:ga50257b48069a31d0c8d9c1f644d267de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga50257b48069a31d0c8d9c1f644d267de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50257b48069a31d0c8d9c1f644d267de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa07e98e67b7a3435c0746018c7a2a839\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa07e98e67b7a3435c0746018c7a2a839\">GLM_ALIGNED_TYPEDEF</a> (lowp_i32, aligned_lowp_i32, 4)</td></tr>\n<tr class=\"memdesc:gaa07e98e67b7a3435c0746018c7a2a839\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gaa07e98e67b7a3435c0746018c7a2a839\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa07e98e67b7a3435c0746018c7a2a839\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62601fc6f8ca298b77285bedf03faffd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga62601fc6f8ca298b77285bedf03faffd\">GLM_ALIGNED_TYPEDEF</a> (lowp_i64, aligned_lowp_i64, 8)</td></tr>\n<tr class=\"memdesc:ga62601fc6f8ca298b77285bedf03faffd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga62601fc6f8ca298b77285bedf03faffd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga62601fc6f8ca298b77285bedf03faffd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac8cff825951aeb54dd846037113c72db\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac8cff825951aeb54dd846037113c72db\">GLM_ALIGNED_TYPEDEF</a> (mediump_int8, aligned_mediump_int8, 1)</td></tr>\n<tr class=\"memdesc:gac8cff825951aeb54dd846037113c72db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gac8cff825951aeb54dd846037113c72db\">More...</a><br /></td></tr>\n<tr class=\"separator:gac8cff825951aeb54dd846037113c72db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78f443d88f438575a62b5df497cdf66b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga78f443d88f438575a62b5df497cdf66b\">GLM_ALIGNED_TYPEDEF</a> (mediump_int16, aligned_mediump_int16, 2)</td></tr>\n<tr class=\"memdesc:ga78f443d88f438575a62b5df497cdf66b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga78f443d88f438575a62b5df497cdf66b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78f443d88f438575a62b5df497cdf66b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0680cd3b5d4e8006985fb41a4f9b57af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0680cd3b5d4e8006985fb41a4f9b57af\">GLM_ALIGNED_TYPEDEF</a> (mediump_int32, aligned_mediump_int32, 4)</td></tr>\n<tr class=\"memdesc:ga0680cd3b5d4e8006985fb41a4f9b57af\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga0680cd3b5d4e8006985fb41a4f9b57af\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0680cd3b5d4e8006985fb41a4f9b57af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9e5babb1dd3e3531b42c37bf25dd951\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad9e5babb1dd3e3531b42c37bf25dd951\">GLM_ALIGNED_TYPEDEF</a> (mediump_int64, aligned_mediump_int64, 8)</td></tr>\n<tr class=\"memdesc:gad9e5babb1dd3e3531b42c37bf25dd951\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#gad9e5babb1dd3e3531b42c37bf25dd951\">More...</a><br /></td></tr>\n<tr class=\"separator:gad9e5babb1dd3e3531b42c37bf25dd951\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga353fd9fa8a9ad952fcabd0d53ad9a6dd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga353fd9fa8a9ad952fcabd0d53ad9a6dd\">GLM_ALIGNED_TYPEDEF</a> (mediump_int8_t, aligned_mediump_int8_t, 1)</td></tr>\n<tr class=\"memdesc:ga353fd9fa8a9ad952fcabd0d53ad9a6dd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga353fd9fa8a9ad952fcabd0d53ad9a6dd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga353fd9fa8a9ad952fcabd0d53ad9a6dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2196442c0e5c5e8c77842de388c42521\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2196442c0e5c5e8c77842de388c42521\">GLM_ALIGNED_TYPEDEF</a> (mediump_int16_t, aligned_mediump_int16_t, 2)</td></tr>\n<tr class=\"memdesc:ga2196442c0e5c5e8c77842de388c42521\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga2196442c0e5c5e8c77842de388c42521\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2196442c0e5c5e8c77842de388c42521\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1284488189daf897cf095c5eefad9744\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1284488189daf897cf095c5eefad9744\">GLM_ALIGNED_TYPEDEF</a> (mediump_int32_t, aligned_mediump_int32_t, 4)</td></tr>\n<tr class=\"memdesc:ga1284488189daf897cf095c5eefad9744\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga1284488189daf897cf095c5eefad9744\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1284488189daf897cf095c5eefad9744\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73fdc86a539808af58808b7c60a1c4d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga73fdc86a539808af58808b7c60a1c4d8\">GLM_ALIGNED_TYPEDEF</a> (mediump_int64_t, aligned_mediump_int64_t, 8)</td></tr>\n<tr class=\"memdesc:ga73fdc86a539808af58808b7c60a1c4d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga73fdc86a539808af58808b7c60a1c4d8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga73fdc86a539808af58808b7c60a1c4d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafafeea923e1983262c972e2b83922d3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gafafeea923e1983262c972e2b83922d3b\">GLM_ALIGNED_TYPEDEF</a> (mediump_i8, aligned_mediump_i8, 1)</td></tr>\n<tr class=\"memdesc:gafafeea923e1983262c972e2b83922d3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gafafeea923e1983262c972e2b83922d3b\">More...</a><br /></td></tr>\n<tr class=\"separator:gafafeea923e1983262c972e2b83922d3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\">GLM_ALIGNED_TYPEDEF</a> (mediump_i16, aligned_mediump_i16, 2)</td></tr>\n<tr class=\"memdesc:ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63b882e29170d428463d99c3d630acc6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga63b882e29170d428463d99c3d630acc6\">GLM_ALIGNED_TYPEDEF</a> (mediump_i32, aligned_mediump_i32, 4)</td></tr>\n<tr class=\"memdesc:ga63b882e29170d428463d99c3d630acc6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga63b882e29170d428463d99c3d630acc6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga63b882e29170d428463d99c3d630acc6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b20507bb048c1edea2d441cc953e6f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8b20507bb048c1edea2d441cc953e6f0\">GLM_ALIGNED_TYPEDEF</a> (mediump_i64, aligned_mediump_i64, 8)</td></tr>\n<tr class=\"memdesc:ga8b20507bb048c1edea2d441cc953e6f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga8b20507bb048c1edea2d441cc953e6f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b20507bb048c1edea2d441cc953e6f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga56c5ca60813027b603c7b61425a0479d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga56c5ca60813027b603c7b61425a0479d\">GLM_ALIGNED_TYPEDEF</a> (highp_int8, aligned_highp_int8, 1)</td></tr>\n<tr class=\"memdesc:ga56c5ca60813027b603c7b61425a0479d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga56c5ca60813027b603c7b61425a0479d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga56c5ca60813027b603c7b61425a0479d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a751b3aff24c0259f4a7357c2969089\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7a751b3aff24c0259f4a7357c2969089\">GLM_ALIGNED_TYPEDEF</a> (highp_int16, aligned_highp_int16, 2)</td></tr>\n<tr class=\"memdesc:ga7a751b3aff24c0259f4a7357c2969089\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga7a751b3aff24c0259f4a7357c2969089\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a751b3aff24c0259f4a7357c2969089\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70cd2144351c556469ee6119e59971fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga70cd2144351c556469ee6119e59971fc\">GLM_ALIGNED_TYPEDEF</a> (highp_int32, aligned_highp_int32, 4)</td></tr>\n<tr class=\"memdesc:ga70cd2144351c556469ee6119e59971fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga70cd2144351c556469ee6119e59971fc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga70cd2144351c556469ee6119e59971fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46bbf08dc004d8c433041e0b5018a5d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga46bbf08dc004d8c433041e0b5018a5d3\">GLM_ALIGNED_TYPEDEF</a> (highp_int64, aligned_highp_int64, 8)</td></tr>\n<tr class=\"memdesc:ga46bbf08dc004d8c433041e0b5018a5d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga46bbf08dc004d8c433041e0b5018a5d3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga46bbf08dc004d8c433041e0b5018a5d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3e10c77a20d1abad2de1c561c7a5c18\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab3e10c77a20d1abad2de1c561c7a5c18\">GLM_ALIGNED_TYPEDEF</a> (highp_int8_t, aligned_highp_int8_t, 1)</td></tr>\n<tr class=\"memdesc:gab3e10c77a20d1abad2de1c561c7a5c18\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gab3e10c77a20d1abad2de1c561c7a5c18\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3e10c77a20d1abad2de1c561c7a5c18\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga968f30319ebeaca9ebcd3a25a8e139fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga968f30319ebeaca9ebcd3a25a8e139fb\">GLM_ALIGNED_TYPEDEF</a> (highp_int16_t, aligned_highp_int16_t, 2)</td></tr>\n<tr class=\"memdesc:ga968f30319ebeaca9ebcd3a25a8e139fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga968f30319ebeaca9ebcd3a25a8e139fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga968f30319ebeaca9ebcd3a25a8e139fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaae773c28e6390c6aa76f5b678b7098a3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaae773c28e6390c6aa76f5b678b7098a3\">GLM_ALIGNED_TYPEDEF</a> (highp_int32_t, aligned_highp_int32_t, 4)</td></tr>\n<tr class=\"memdesc:gaae773c28e6390c6aa76f5b678b7098a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gaae773c28e6390c6aa76f5b678b7098a3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaae773c28e6390c6aa76f5b678b7098a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga790cfff1ca39d0ed696ffed980809311\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga790cfff1ca39d0ed696ffed980809311\">GLM_ALIGNED_TYPEDEF</a> (highp_int64_t, aligned_highp_int64_t, 8)</td></tr>\n<tr class=\"memdesc:ga790cfff1ca39d0ed696ffed980809311\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga790cfff1ca39d0ed696ffed980809311\">More...</a><br /></td></tr>\n<tr class=\"separator:ga790cfff1ca39d0ed696ffed980809311\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8265b91eb23c120a9b0c3e381bc37b96\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8265b91eb23c120a9b0c3e381bc37b96\">GLM_ALIGNED_TYPEDEF</a> (highp_i8, aligned_highp_i8, 1)</td></tr>\n<tr class=\"memdesc:ga8265b91eb23c120a9b0c3e381bc37b96\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga8265b91eb23c120a9b0c3e381bc37b96\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8265b91eb23c120a9b0c3e381bc37b96\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae6d384de17588d8edb894fbe06e0d410\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gae6d384de17588d8edb894fbe06e0d410\">GLM_ALIGNED_TYPEDEF</a> (highp_i16, aligned_highp_i16, 2)</td></tr>\n<tr class=\"memdesc:gae6d384de17588d8edb894fbe06e0d410\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#gae6d384de17588d8edb894fbe06e0d410\">More...</a><br /></td></tr>\n<tr class=\"separator:gae6d384de17588d8edb894fbe06e0d410\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9c8172b745ee03fc5b2b91c350c2922f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9c8172b745ee03fc5b2b91c350c2922f\">GLM_ALIGNED_TYPEDEF</a> (highp_i32, aligned_highp_i32, 4)</td></tr>\n<tr class=\"memdesc:ga9c8172b745ee03fc5b2b91c350c2922f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga9c8172b745ee03fc5b2b91c350c2922f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9c8172b745ee03fc5b2b91c350c2922f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga77e0dff12aa4020ddc3f8cabbea7b2e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga77e0dff12aa4020ddc3f8cabbea7b2e6\">GLM_ALIGNED_TYPEDEF</a> (highp_i64, aligned_highp_i64, 8)</td></tr>\n<tr class=\"memdesc:ga77e0dff12aa4020ddc3f8cabbea7b2e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga77e0dff12aa4020ddc3f8cabbea7b2e6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga77e0dff12aa4020ddc3f8cabbea7b2e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabd82b9faa9d4d618dbbe0fc8a1efee63\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gabd82b9faa9d4d618dbbe0fc8a1efee63\">GLM_ALIGNED_TYPEDEF</a> (int8, aligned_int8, 1)</td></tr>\n<tr class=\"memdesc:gabd82b9faa9d4d618dbbe0fc8a1efee63\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gabd82b9faa9d4d618dbbe0fc8a1efee63\">More...</a><br /></td></tr>\n<tr class=\"separator:gabd82b9faa9d4d618dbbe0fc8a1efee63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga285649744560be21000cfd81bbb5d507\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga285649744560be21000cfd81bbb5d507\">GLM_ALIGNED_TYPEDEF</a> (int16, aligned_int16, 2)</td></tr>\n<tr class=\"memdesc:ga285649744560be21000cfd81bbb5d507\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga285649744560be21000cfd81bbb5d507\">More...</a><br /></td></tr>\n<tr class=\"separator:ga285649744560be21000cfd81bbb5d507\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07732da630b2deda428ce95c0ecaf3ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga07732da630b2deda428ce95c0ecaf3ff\">GLM_ALIGNED_TYPEDEF</a> (int32, aligned_int32, 4)</td></tr>\n<tr class=\"memdesc:ga07732da630b2deda428ce95c0ecaf3ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga07732da630b2deda428ce95c0ecaf3ff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga07732da630b2deda428ce95c0ecaf3ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a8da2a8c51f69c07a2e7f473aa420f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1a8da2a8c51f69c07a2e7f473aa420f4\">GLM_ALIGNED_TYPEDEF</a> (int64, aligned_int64, 8)</td></tr>\n<tr class=\"memdesc:ga1a8da2a8c51f69c07a2e7f473aa420f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga1a8da2a8c51f69c07a2e7f473aa420f4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a8da2a8c51f69c07a2e7f473aa420f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga848aedf13e2d9738acf0bb482c590174\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga848aedf13e2d9738acf0bb482c590174\">GLM_ALIGNED_TYPEDEF</a> (int8_t, aligned_int8_t, 1)</td></tr>\n<tr class=\"memdesc:ga848aedf13e2d9738acf0bb482c590174\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga848aedf13e2d9738acf0bb482c590174\">More...</a><br /></td></tr>\n<tr class=\"separator:ga848aedf13e2d9738acf0bb482c590174\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafd2803d39049dd45a37a63931e25d943\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gafd2803d39049dd45a37a63931e25d943\">GLM_ALIGNED_TYPEDEF</a> (int16_t, aligned_int16_t, 2)</td></tr>\n<tr class=\"memdesc:gafd2803d39049dd45a37a63931e25d943\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#gafd2803d39049dd45a37a63931e25d943\">More...</a><br /></td></tr>\n<tr class=\"separator:gafd2803d39049dd45a37a63931e25d943\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae553b33349d6da832cf0724f1e024094\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gae553b33349d6da832cf0724f1e024094\">GLM_ALIGNED_TYPEDEF</a> (int32_t, aligned_int32_t, 4)</td></tr>\n<tr class=\"memdesc:gae553b33349d6da832cf0724f1e024094\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gae553b33349d6da832cf0724f1e024094\">More...</a><br /></td></tr>\n<tr class=\"separator:gae553b33349d6da832cf0724f1e024094\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16d223a2b3409e812e1d3bd87f0e9e5c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga16d223a2b3409e812e1d3bd87f0e9e5c\">GLM_ALIGNED_TYPEDEF</a> (int64_t, aligned_int64_t, 8)</td></tr>\n<tr class=\"memdesc:ga16d223a2b3409e812e1d3bd87f0e9e5c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga16d223a2b3409e812e1d3bd87f0e9e5c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16d223a2b3409e812e1d3bd87f0e9e5c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2de065d2ddfdb366bcd0febca79ae2ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2de065d2ddfdb366bcd0febca79ae2ad\">GLM_ALIGNED_TYPEDEF</a> (i8, aligned_i8, 1)</td></tr>\n<tr class=\"memdesc:ga2de065d2ddfdb366bcd0febca79ae2ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga2de065d2ddfdb366bcd0febca79ae2ad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2de065d2ddfdb366bcd0febca79ae2ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabd786bdc20a11c8cb05c92c8212e28d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gabd786bdc20a11c8cb05c92c8212e28d3\">GLM_ALIGNED_TYPEDEF</a> (i16, aligned_i16, 2)</td></tr>\n<tr class=\"memdesc:gabd786bdc20a11c8cb05c92c8212e28d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#gabd786bdc20a11c8cb05c92c8212e28d3\">More...</a><br /></td></tr>\n<tr class=\"separator:gabd786bdc20a11c8cb05c92c8212e28d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad4aefe56691cdb640c72f0d46d3fb532\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad4aefe56691cdb640c72f0d46d3fb532\">GLM_ALIGNED_TYPEDEF</a> (i32, aligned_i32, 4)</td></tr>\n<tr class=\"memdesc:gad4aefe56691cdb640c72f0d46d3fb532\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gad4aefe56691cdb640c72f0d46d3fb532\">More...</a><br /></td></tr>\n<tr class=\"separator:gad4aefe56691cdb640c72f0d46d3fb532\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8fe9745f7de24a8394518152ff9fccdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8fe9745f7de24a8394518152ff9fccdc\">GLM_ALIGNED_TYPEDEF</a> (i64, aligned_i64, 8)</td></tr>\n<tr class=\"memdesc:ga8fe9745f7de24a8394518152ff9fccdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga8fe9745f7de24a8394518152ff9fccdc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8fe9745f7de24a8394518152ff9fccdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaad735483450099f7f882d4e3a3569bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaaad735483450099f7f882d4e3a3569bd\">GLM_ALIGNED_TYPEDEF</a> (ivec1, aligned_ivec1, 4)</td></tr>\n<tr class=\"memdesc:gaaad735483450099f7f882d4e3a3569bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gaaad735483450099f7f882d4e3a3569bd\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaad735483450099f7f882d4e3a3569bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7b6f823802edbd6edbaf70ea25bf068\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac7b6f823802edbd6edbaf70ea25bf068\">GLM_ALIGNED_TYPEDEF</a> (ivec2, aligned_ivec2, 8)</td></tr>\n<tr class=\"memdesc:gac7b6f823802edbd6edbaf70ea25bf068\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#gac7b6f823802edbd6edbaf70ea25bf068\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7b6f823802edbd6edbaf70ea25bf068\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e235bcd2b8029613f25b8d40a2d3ef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga3e235bcd2b8029613f25b8d40a2d3ef7\">GLM_ALIGNED_TYPEDEF</a> (ivec3, aligned_ivec3, 16)</td></tr>\n<tr class=\"memdesc:ga3e235bcd2b8029613f25b8d40a2d3ef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#ga3e235bcd2b8029613f25b8d40a2d3ef7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e235bcd2b8029613f25b8d40a2d3ef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50d8a9523968c77f8325b4c9bfbff41e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga50d8a9523968c77f8325b4c9bfbff41e\">GLM_ALIGNED_TYPEDEF</a> (ivec4, aligned_ivec4, 16)</td></tr>\n<tr class=\"memdesc:ga50d8a9523968c77f8325b4c9bfbff41e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#ga50d8a9523968c77f8325b4c9bfbff41e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50d8a9523968c77f8325b4c9bfbff41e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ec20fdfb729c702032da9378c79679f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9ec20fdfb729c702032da9378c79679f\">GLM_ALIGNED_TYPEDEF</a> (i8vec1, aligned_i8vec1, 1)</td></tr>\n<tr class=\"memdesc:ga9ec20fdfb729c702032da9378c79679f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga9ec20fdfb729c702032da9378c79679f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9ec20fdfb729c702032da9378c79679f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga25b3fe1d9e8d0a5e86c1949c1acd8131\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga25b3fe1d9e8d0a5e86c1949c1acd8131\">GLM_ALIGNED_TYPEDEF</a> (i8vec2, aligned_i8vec2, 2)</td></tr>\n<tr class=\"memdesc:ga25b3fe1d9e8d0a5e86c1949c1acd8131\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#ga25b3fe1d9e8d0a5e86c1949c1acd8131\">More...</a><br /></td></tr>\n<tr class=\"separator:ga25b3fe1d9e8d0a5e86c1949c1acd8131\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2958f907719d94d8109b562540c910e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2958f907719d94d8109b562540c910e2\">GLM_ALIGNED_TYPEDEF</a> (i8vec3, aligned_i8vec3, 4)</td></tr>\n<tr class=\"memdesc:ga2958f907719d94d8109b562540c910e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#ga2958f907719d94d8109b562540c910e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2958f907719d94d8109b562540c910e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fe6fc032a978f1c845fac9aa0668714\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1fe6fc032a978f1c845fac9aa0668714\">GLM_ALIGNED_TYPEDEF</a> (i8vec4, aligned_i8vec4, 4)</td></tr>\n<tr class=\"memdesc:ga1fe6fc032a978f1c845fac9aa0668714\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#ga1fe6fc032a978f1c845fac9aa0668714\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1fe6fc032a978f1c845fac9aa0668714\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4161e7a496dc96972254143fe873e55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa4161e7a496dc96972254143fe873e55\">GLM_ALIGNED_TYPEDEF</a> (i16vec1, aligned_i16vec1, 2)</td></tr>\n<tr class=\"memdesc:gaa4161e7a496dc96972254143fe873e55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#gaa4161e7a496dc96972254143fe873e55\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4161e7a496dc96972254143fe873e55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9d7cb211ccda69b1c22ddeeb0f3e7aba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9d7cb211ccda69b1c22ddeeb0f3e7aba\">GLM_ALIGNED_TYPEDEF</a> (i16vec2, aligned_i16vec2, 4)</td></tr>\n<tr class=\"memdesc:ga9d7cb211ccda69b1c22ddeeb0f3e7aba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#ga9d7cb211ccda69b1c22ddeeb0f3e7aba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9d7cb211ccda69b1c22ddeeb0f3e7aba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaee91dd2ab34423bcc11072ef6bd0f02\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaaee91dd2ab34423bcc11072ef6bd0f02\">GLM_ALIGNED_TYPEDEF</a> (i16vec3, aligned_i16vec3, 8)</td></tr>\n<tr class=\"memdesc:gaaee91dd2ab34423bcc11072ef6bd0f02\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#gaaee91dd2ab34423bcc11072ef6bd0f02\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaee91dd2ab34423bcc11072ef6bd0f02\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga49f047ccaa8b31fad9f26c67bf9b3510\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga49f047ccaa8b31fad9f26c67bf9b3510\">GLM_ALIGNED_TYPEDEF</a> (i16vec4, aligned_i16vec4, 8)</td></tr>\n<tr class=\"memdesc:ga49f047ccaa8b31fad9f26c67bf9b3510\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#ga49f047ccaa8b31fad9f26c67bf9b3510\">More...</a><br /></td></tr>\n<tr class=\"separator:ga49f047ccaa8b31fad9f26c67bf9b3510\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga904e9c2436bb099397c0823506a0771f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga904e9c2436bb099397c0823506a0771f\">GLM_ALIGNED_TYPEDEF</a> (i32vec1, aligned_i32vec1, 4)</td></tr>\n<tr class=\"memdesc:ga904e9c2436bb099397c0823506a0771f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga904e9c2436bb099397c0823506a0771f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga904e9c2436bb099397c0823506a0771f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf90651cf2f5e7ee2b11cfdc5a6749534\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf90651cf2f5e7ee2b11cfdc5a6749534\">GLM_ALIGNED_TYPEDEF</a> (i32vec2, aligned_i32vec2, 8)</td></tr>\n<tr class=\"memdesc:gaf90651cf2f5e7ee2b11cfdc5a6749534\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#gaf90651cf2f5e7ee2b11cfdc5a6749534\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf90651cf2f5e7ee2b11cfdc5a6749534\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7354a4ead8cb17868aec36b9c30d6010\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7354a4ead8cb17868aec36b9c30d6010\">GLM_ALIGNED_TYPEDEF</a> (i32vec3, aligned_i32vec3, 16)</td></tr>\n<tr class=\"memdesc:ga7354a4ead8cb17868aec36b9c30d6010\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#ga7354a4ead8cb17868aec36b9c30d6010\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7354a4ead8cb17868aec36b9c30d6010\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad2ecbdea18732163e2636e27b37981ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad2ecbdea18732163e2636e27b37981ee\">GLM_ALIGNED_TYPEDEF</a> (i32vec4, aligned_i32vec4, 16)</td></tr>\n<tr class=\"memdesc:gad2ecbdea18732163e2636e27b37981ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#gad2ecbdea18732163e2636e27b37981ee\">More...</a><br /></td></tr>\n<tr class=\"separator:gad2ecbdea18732163e2636e27b37981ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga965b1c9aa1800e93d4abc2eb2b5afcbf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga965b1c9aa1800e93d4abc2eb2b5afcbf\">GLM_ALIGNED_TYPEDEF</a> (i64vec1, aligned_i64vec1, 8)</td></tr>\n<tr class=\"memdesc:ga965b1c9aa1800e93d4abc2eb2b5afcbf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga965b1c9aa1800e93d4abc2eb2b5afcbf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga965b1c9aa1800e93d4abc2eb2b5afcbf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f9e9c2ea2768675dff9bae5cde2d829\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1f9e9c2ea2768675dff9bae5cde2d829\">GLM_ALIGNED_TYPEDEF</a> (i64vec2, aligned_i64vec2, 16)</td></tr>\n<tr class=\"memdesc:ga1f9e9c2ea2768675dff9bae5cde2d829\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#ga1f9e9c2ea2768675dff9bae5cde2d829\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f9e9c2ea2768675dff9bae5cde2d829\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad77c317b7d942322cd5be4c8127b3187\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad77c317b7d942322cd5be4c8127b3187\">GLM_ALIGNED_TYPEDEF</a> (i64vec3, aligned_i64vec3, 32)</td></tr>\n<tr class=\"memdesc:gad77c317b7d942322cd5be4c8127b3187\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#gad77c317b7d942322cd5be4c8127b3187\">More...</a><br /></td></tr>\n<tr class=\"separator:gad77c317b7d942322cd5be4c8127b3187\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga716f8ea809bdb11b5b542d8b71aeb04f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga716f8ea809bdb11b5b542d8b71aeb04f\">GLM_ALIGNED_TYPEDEF</a> (i64vec4, aligned_i64vec4, 32)</td></tr>\n<tr class=\"memdesc:ga716f8ea809bdb11b5b542d8b71aeb04f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#ga716f8ea809bdb11b5b542d8b71aeb04f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga716f8ea809bdb11b5b542d8b71aeb04f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad46f8e9082d5878b1bc04f9c1471cdaa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad46f8e9082d5878b1bc04f9c1471cdaa\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint8, aligned_lowp_uint8, 1)</td></tr>\n<tr class=\"memdesc:gad46f8e9082d5878b1bc04f9c1471cdaa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gad46f8e9082d5878b1bc04f9c1471cdaa\">More...</a><br /></td></tr>\n<tr class=\"separator:gad46f8e9082d5878b1bc04f9c1471cdaa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1246094581af624aca6c7499aaabf801\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1246094581af624aca6c7499aaabf801\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint16, aligned_lowp_uint16, 2)</td></tr>\n<tr class=\"memdesc:ga1246094581af624aca6c7499aaabf801\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga1246094581af624aca6c7499aaabf801\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1246094581af624aca6c7499aaabf801\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a5009a1d0196bbf21dd7518f61f0249\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7a5009a1d0196bbf21dd7518f61f0249\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint32, aligned_lowp_uint32, 4)</td></tr>\n<tr class=\"memdesc:ga7a5009a1d0196bbf21dd7518f61f0249\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga7a5009a1d0196bbf21dd7518f61f0249\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a5009a1d0196bbf21dd7518f61f0249\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45213fd18b3bb1df391671afefe4d1e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga45213fd18b3bb1df391671afefe4d1e7\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint64, aligned_lowp_uint64, 8)</td></tr>\n<tr class=\"memdesc:ga45213fd18b3bb1df391671afefe4d1e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga45213fd18b3bb1df391671afefe4d1e7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga45213fd18b3bb1df391671afefe4d1e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0ba26b4e3fd9ecbc25358efd68d8a4ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0ba26b4e3fd9ecbc25358efd68d8a4ca\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint8_t, aligned_lowp_uint8_t, 1)</td></tr>\n<tr class=\"memdesc:ga0ba26b4e3fd9ecbc25358efd68d8a4ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga0ba26b4e3fd9ecbc25358efd68d8a4ca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0ba26b4e3fd9ecbc25358efd68d8a4ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2b58f5fb6d4ec8ce7b76221d3af43e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf2b58f5fb6d4ec8ce7b76221d3af43e1\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint16_t, aligned_lowp_uint16_t, 2)</td></tr>\n<tr class=\"memdesc:gaf2b58f5fb6d4ec8ce7b76221d3af43e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaf2b58f5fb6d4ec8ce7b76221d3af43e1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2b58f5fb6d4ec8ce7b76221d3af43e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc246401847dcba155f0699425e49dcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gadc246401847dcba155f0699425e49dcd\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint32_t, aligned_lowp_uint32_t, 4)</td></tr>\n<tr class=\"memdesc:gadc246401847dcba155f0699425e49dcd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gadc246401847dcba155f0699425e49dcd\">More...</a><br /></td></tr>\n<tr class=\"separator:gadc246401847dcba155f0699425e49dcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaace64bddf51a9def01498da9a94fb01c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaace64bddf51a9def01498da9a94fb01c\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint64_t, aligned_lowp_uint64_t, 8)</td></tr>\n<tr class=\"memdesc:gaace64bddf51a9def01498da9a94fb01c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaace64bddf51a9def01498da9a94fb01c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaace64bddf51a9def01498da9a94fb01c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7bb97c29d664bd86ffb1bed4abc5534\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad7bb97c29d664bd86ffb1bed4abc5534\">GLM_ALIGNED_TYPEDEF</a> (lowp_u8, aligned_lowp_u8, 1)</td></tr>\n<tr class=\"memdesc:gad7bb97c29d664bd86ffb1bed4abc5534\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gad7bb97c29d664bd86ffb1bed4abc5534\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7bb97c29d664bd86ffb1bed4abc5534\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga404bba7785130e0b1384d695a9450b28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga404bba7785130e0b1384d695a9450b28\">GLM_ALIGNED_TYPEDEF</a> (lowp_u16, aligned_lowp_u16, 2)</td></tr>\n<tr class=\"memdesc:ga404bba7785130e0b1384d695a9450b28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga404bba7785130e0b1384d695a9450b28\">More...</a><br /></td></tr>\n<tr class=\"separator:ga404bba7785130e0b1384d695a9450b28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31ba41fd896257536958ec6080203d2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga31ba41fd896257536958ec6080203d2a\">GLM_ALIGNED_TYPEDEF</a> (lowp_u32, aligned_lowp_u32, 4)</td></tr>\n<tr class=\"memdesc:ga31ba41fd896257536958ec6080203d2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga31ba41fd896257536958ec6080203d2a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga31ba41fd896257536958ec6080203d2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacca5f13627f57b3505676e40a6e43e5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gacca5f13627f57b3505676e40a6e43e5e\">GLM_ALIGNED_TYPEDEF</a> (lowp_u64, aligned_lowp_u64, 8)</td></tr>\n<tr class=\"memdesc:gacca5f13627f57b3505676e40a6e43e5e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gacca5f13627f57b3505676e40a6e43e5e\">More...</a><br /></td></tr>\n<tr class=\"separator:gacca5f13627f57b3505676e40a6e43e5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5faf1d3e70bf33174dd7f3d01d5b883b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5faf1d3e70bf33174dd7f3d01d5b883b\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint8, aligned_mediump_uint8, 1)</td></tr>\n<tr class=\"memdesc:ga5faf1d3e70bf33174dd7f3d01d5b883b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga5faf1d3e70bf33174dd7f3d01d5b883b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5faf1d3e70bf33174dd7f3d01d5b883b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga727e2bf2c433bb3b0182605860a48363\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga727e2bf2c433bb3b0182605860a48363\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint16, aligned_mediump_uint16, 2)</td></tr>\n<tr class=\"memdesc:ga727e2bf2c433bb3b0182605860a48363\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga727e2bf2c433bb3b0182605860a48363\">More...</a><br /></td></tr>\n<tr class=\"separator:ga727e2bf2c433bb3b0182605860a48363\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga12566ca66d5962dadb4a5eb4c74e891e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga12566ca66d5962dadb4a5eb4c74e891e\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint32, aligned_mediump_uint32, 4)</td></tr>\n<tr class=\"memdesc:ga12566ca66d5962dadb4a5eb4c74e891e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga12566ca66d5962dadb4a5eb4c74e891e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga12566ca66d5962dadb4a5eb4c74e891e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b66a97a8acaa35c5a377b947318c6bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7b66a97a8acaa35c5a377b947318c6bc\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint64, aligned_mediump_uint64, 8)</td></tr>\n<tr class=\"memdesc:ga7b66a97a8acaa35c5a377b947318c6bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga7b66a97a8acaa35c5a377b947318c6bc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b66a97a8acaa35c5a377b947318c6bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9cde002439b74fa66120a16a9f55fcc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa9cde002439b74fa66120a16a9f55fcc\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint8_t, aligned_mediump_uint8_t, 1)</td></tr>\n<tr class=\"memdesc:gaa9cde002439b74fa66120a16a9f55fcc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaa9cde002439b74fa66120a16a9f55fcc\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9cde002439b74fa66120a16a9f55fcc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ca98c67f7d1e975f7c5202f1da1df1f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1ca98c67f7d1e975f7c5202f1da1df1f\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint16_t, aligned_mediump_uint16_t, 2)</td></tr>\n<tr class=\"memdesc:ga1ca98c67f7d1e975f7c5202f1da1df1f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga1ca98c67f7d1e975f7c5202f1da1df1f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1ca98c67f7d1e975f7c5202f1da1df1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1dc8bc6199d785f235576948d80a597c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1dc8bc6199d785f235576948d80a597c\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint32_t, aligned_mediump_uint32_t, 4)</td></tr>\n<tr class=\"memdesc:ga1dc8bc6199d785f235576948d80a597c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga1dc8bc6199d785f235576948d80a597c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1dc8bc6199d785f235576948d80a597c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad14a0f2ec93519682b73d70b8e401d81\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad14a0f2ec93519682b73d70b8e401d81\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint64_t, aligned_mediump_uint64_t, 8)</td></tr>\n<tr class=\"memdesc:gad14a0f2ec93519682b73d70b8e401d81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gad14a0f2ec93519682b73d70b8e401d81\">More...</a><br /></td></tr>\n<tr class=\"separator:gad14a0f2ec93519682b73d70b8e401d81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada8b996eb6526dc1ead813bd49539d1b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gada8b996eb6526dc1ead813bd49539d1b\">GLM_ALIGNED_TYPEDEF</a> (mediump_u8, aligned_mediump_u8, 1)</td></tr>\n<tr class=\"memdesc:gada8b996eb6526dc1ead813bd49539d1b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gada8b996eb6526dc1ead813bd49539d1b\">More...</a><br /></td></tr>\n<tr class=\"separator:gada8b996eb6526dc1ead813bd49539d1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga28948f6bfb52b42deb9d73ae1ea8d8b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga28948f6bfb52b42deb9d73ae1ea8d8b0\">GLM_ALIGNED_TYPEDEF</a> (mediump_u16, aligned_mediump_u16, 2)</td></tr>\n<tr class=\"memdesc:ga28948f6bfb52b42deb9d73ae1ea8d8b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga28948f6bfb52b42deb9d73ae1ea8d8b0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga28948f6bfb52b42deb9d73ae1ea8d8b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6a7c0b5630f89d3f1c5b4ef2919bb4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad6a7c0b5630f89d3f1c5b4ef2919bb4c\">GLM_ALIGNED_TYPEDEF</a> (mediump_u32, aligned_mediump_u32, 4)</td></tr>\n<tr class=\"memdesc:gad6a7c0b5630f89d3f1c5b4ef2919bb4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gad6a7c0b5630f89d3f1c5b4ef2919bb4c\">More...</a><br /></td></tr>\n<tr class=\"separator:gad6a7c0b5630f89d3f1c5b4ef2919bb4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0fc531cbaa972ac3a0b86d21ef4a7fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa0fc531cbaa972ac3a0b86d21ef4a7fa\">GLM_ALIGNED_TYPEDEF</a> (mediump_u64, aligned_mediump_u64, 8)</td></tr>\n<tr class=\"memdesc:gaa0fc531cbaa972ac3a0b86d21ef4a7fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaa0fc531cbaa972ac3a0b86d21ef4a7fa\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0fc531cbaa972ac3a0b86d21ef4a7fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0ee829f7b754b262bbfe6317c0d678ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0ee829f7b754b262bbfe6317c0d678ac\">GLM_ALIGNED_TYPEDEF</a> (highp_uint8, aligned_highp_uint8, 1)</td></tr>\n<tr class=\"memdesc:ga0ee829f7b754b262bbfe6317c0d678ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga0ee829f7b754b262bbfe6317c0d678ac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0ee829f7b754b262bbfe6317c0d678ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga447848a817a626cae08cedc9778b331c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga447848a817a626cae08cedc9778b331c\">GLM_ALIGNED_TYPEDEF</a> (highp_uint16, aligned_highp_uint16, 2)</td></tr>\n<tr class=\"memdesc:ga447848a817a626cae08cedc9778b331c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga447848a817a626cae08cedc9778b331c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga447848a817a626cae08cedc9778b331c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6027ae13b2734f542a6e7beee11b8820\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6027ae13b2734f542a6e7beee11b8820\">GLM_ALIGNED_TYPEDEF</a> (highp_uint32, aligned_highp_uint32, 4)</td></tr>\n<tr class=\"memdesc:ga6027ae13b2734f542a6e7beee11b8820\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga6027ae13b2734f542a6e7beee11b8820\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6027ae13b2734f542a6e7beee11b8820\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2aca46c8608c95ef991ee4c332acde5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2aca46c8608c95ef991ee4c332acde5f\">GLM_ALIGNED_TYPEDEF</a> (highp_uint64, aligned_highp_uint64, 8)</td></tr>\n<tr class=\"memdesc:ga2aca46c8608c95ef991ee4c332acde5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga2aca46c8608c95ef991ee4c332acde5f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2aca46c8608c95ef991ee4c332acde5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaff50b10dd1c48be324fdaffd18e2c7ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaff50b10dd1c48be324fdaffd18e2c7ea\">GLM_ALIGNED_TYPEDEF</a> (highp_uint8_t, aligned_highp_uint8_t, 1)</td></tr>\n<tr class=\"memdesc:gaff50b10dd1c48be324fdaffd18e2c7ea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaff50b10dd1c48be324fdaffd18e2c7ea\">More...</a><br /></td></tr>\n<tr class=\"separator:gaff50b10dd1c48be324fdaffd18e2c7ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9fc4421dbb833d5461e6d4e59dcfde55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9fc4421dbb833d5461e6d4e59dcfde55\">GLM_ALIGNED_TYPEDEF</a> (highp_uint16_t, aligned_highp_uint16_t, 2)</td></tr>\n<tr class=\"memdesc:ga9fc4421dbb833d5461e6d4e59dcfde55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga9fc4421dbb833d5461e6d4e59dcfde55\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9fc4421dbb833d5461e6d4e59dcfde55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga329f1e2b94b33ba5e3918197030bcf03\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga329f1e2b94b33ba5e3918197030bcf03\">GLM_ALIGNED_TYPEDEF</a> (highp_uint32_t, aligned_highp_uint32_t, 4)</td></tr>\n<tr class=\"memdesc:ga329f1e2b94b33ba5e3918197030bcf03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga329f1e2b94b33ba5e3918197030bcf03\">More...</a><br /></td></tr>\n<tr class=\"separator:ga329f1e2b94b33ba5e3918197030bcf03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga71e646f7e301aa422328194162c9c998\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga71e646f7e301aa422328194162c9c998\">GLM_ALIGNED_TYPEDEF</a> (highp_uint64_t, aligned_highp_uint64_t, 8)</td></tr>\n<tr class=\"memdesc:ga71e646f7e301aa422328194162c9c998\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga71e646f7e301aa422328194162c9c998\">More...</a><br /></td></tr>\n<tr class=\"separator:ga71e646f7e301aa422328194162c9c998\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8942e09f479489441a7a5004c6d8cb66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8942e09f479489441a7a5004c6d8cb66\">GLM_ALIGNED_TYPEDEF</a> (highp_u8, aligned_highp_u8, 1)</td></tr>\n<tr class=\"memdesc:ga8942e09f479489441a7a5004c6d8cb66\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga8942e09f479489441a7a5004c6d8cb66\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8942e09f479489441a7a5004c6d8cb66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab32497d6e4db16ee439dbedd64c5865\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaab32497d6e4db16ee439dbedd64c5865\">GLM_ALIGNED_TYPEDEF</a> (highp_u16, aligned_highp_u16, 2)</td></tr>\n<tr class=\"memdesc:gaab32497d6e4db16ee439dbedd64c5865\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaab32497d6e4db16ee439dbedd64c5865\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab32497d6e4db16ee439dbedd64c5865\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaadbb34952eca8e3d7fe122c3e167742\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaaadbb34952eca8e3d7fe122c3e167742\">GLM_ALIGNED_TYPEDEF</a> (highp_u32, aligned_highp_u32, 4)</td></tr>\n<tr class=\"memdesc:gaaadbb34952eca8e3d7fe122c3e167742\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaaadbb34952eca8e3d7fe122c3e167742\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaadbb34952eca8e3d7fe122c3e167742\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92024d27c74a3650afb55ec8e024ed25\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga92024d27c74a3650afb55ec8e024ed25\">GLM_ALIGNED_TYPEDEF</a> (highp_u64, aligned_highp_u64, 8)</td></tr>\n<tr class=\"memdesc:ga92024d27c74a3650afb55ec8e024ed25\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga92024d27c74a3650afb55ec8e024ed25\">More...</a><br /></td></tr>\n<tr class=\"separator:ga92024d27c74a3650afb55ec8e024ed25\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabde1d0b4072df35453db76075ab896a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gabde1d0b4072df35453db76075ab896a6\">GLM_ALIGNED_TYPEDEF</a> (uint8, aligned_uint8, 1)</td></tr>\n<tr class=\"memdesc:gabde1d0b4072df35453db76075ab896a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gabde1d0b4072df35453db76075ab896a6\">More...</a><br /></td></tr>\n<tr class=\"separator:gabde1d0b4072df35453db76075ab896a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga06c296c9e398b294c8c9dd2a7693dcbb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga06c296c9e398b294c8c9dd2a7693dcbb\">GLM_ALIGNED_TYPEDEF</a> (uint16, aligned_uint16, 2)</td></tr>\n<tr class=\"memdesc:ga06c296c9e398b294c8c9dd2a7693dcbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga06c296c9e398b294c8c9dd2a7693dcbb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga06c296c9e398b294c8c9dd2a7693dcbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacf1744488c96ebd33c9f36ad33b2010a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gacf1744488c96ebd33c9f36ad33b2010a\">GLM_ALIGNED_TYPEDEF</a> (uint32, aligned_uint32, 4)</td></tr>\n<tr class=\"memdesc:gacf1744488c96ebd33c9f36ad33b2010a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gacf1744488c96ebd33c9f36ad33b2010a\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf1744488c96ebd33c9f36ad33b2010a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3328061a64c20ba59d5f9da24c2cd059\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga3328061a64c20ba59d5f9da24c2cd059\">GLM_ALIGNED_TYPEDEF</a> (uint64, aligned_uint64, 8)</td></tr>\n<tr class=\"memdesc:ga3328061a64c20ba59d5f9da24c2cd059\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga3328061a64c20ba59d5f9da24c2cd059\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3328061a64c20ba59d5f9da24c2cd059\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6ced36f13bae57f377bafa6f5fcc299\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf6ced36f13bae57f377bafa6f5fcc299\">GLM_ALIGNED_TYPEDEF</a> (uint8_t, aligned_uint8_t, 1)</td></tr>\n<tr class=\"memdesc:gaf6ced36f13bae57f377bafa6f5fcc299\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaf6ced36f13bae57f377bafa6f5fcc299\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6ced36f13bae57f377bafa6f5fcc299\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafbc7fb7847bfc78a339d1d371c915c73\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gafbc7fb7847bfc78a339d1d371c915c73\">GLM_ALIGNED_TYPEDEF</a> (uint16_t, aligned_uint16_t, 2)</td></tr>\n<tr class=\"memdesc:gafbc7fb7847bfc78a339d1d371c915c73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gafbc7fb7847bfc78a339d1d371c915c73\">More...</a><br /></td></tr>\n<tr class=\"separator:gafbc7fb7847bfc78a339d1d371c915c73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa86bc56a73fd8120b1121b5f5e6245ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa86bc56a73fd8120b1121b5f5e6245ae\">GLM_ALIGNED_TYPEDEF</a> (uint32_t, aligned_uint32_t, 4)</td></tr>\n<tr class=\"memdesc:gaa86bc56a73fd8120b1121b5f5e6245ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaa86bc56a73fd8120b1121b5f5e6245ae\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa86bc56a73fd8120b1121b5f5e6245ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga68c0b9e669060d0eb5ab8c3ddeb483d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga68c0b9e669060d0eb5ab8c3ddeb483d8\">GLM_ALIGNED_TYPEDEF</a> (uint64_t, aligned_uint64_t, 8)</td></tr>\n<tr class=\"memdesc:ga68c0b9e669060d0eb5ab8c3ddeb483d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga68c0b9e669060d0eb5ab8c3ddeb483d8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga68c0b9e669060d0eb5ab8c3ddeb483d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f3bab577daf3343e99cc005134bce86\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga4f3bab577daf3343e99cc005134bce86\">GLM_ALIGNED_TYPEDEF</a> (u8, aligned_u8, 1)</td></tr>\n<tr class=\"memdesc:ga4f3bab577daf3343e99cc005134bce86\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga4f3bab577daf3343e99cc005134bce86\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f3bab577daf3343e99cc005134bce86\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13a2391339d0790d43b76d00a7611c4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga13a2391339d0790d43b76d00a7611c4f\">GLM_ALIGNED_TYPEDEF</a> (u16, aligned_u16, 2)</td></tr>\n<tr class=\"memdesc:ga13a2391339d0790d43b76d00a7611c4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga13a2391339d0790d43b76d00a7611c4f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga13a2391339d0790d43b76d00a7611c4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga197570e03acbc3d18ab698e342971e8f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga197570e03acbc3d18ab698e342971e8f\">GLM_ALIGNED_TYPEDEF</a> (u32, aligned_u32, 4)</td></tr>\n<tr class=\"memdesc:ga197570e03acbc3d18ab698e342971e8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga197570e03acbc3d18ab698e342971e8f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga197570e03acbc3d18ab698e342971e8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0f033b21e145a1faa32c62ede5878993\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0f033b21e145a1faa32c62ede5878993\">GLM_ALIGNED_TYPEDEF</a> (u64, aligned_u64, 8)</td></tr>\n<tr class=\"memdesc:ga0f033b21e145a1faa32c62ede5878993\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga0f033b21e145a1faa32c62ede5878993\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0f033b21e145a1faa32c62ede5878993\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga509af83527f5cd512e9a7873590663aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga509af83527f5cd512e9a7873590663aa\">GLM_ALIGNED_TYPEDEF</a> (uvec1, aligned_uvec1, 4)</td></tr>\n<tr class=\"memdesc:ga509af83527f5cd512e9a7873590663aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga509af83527f5cd512e9a7873590663aa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga509af83527f5cd512e9a7873590663aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94e86186978c502c6dc0c0d9c4a30679\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga94e86186978c502c6dc0c0d9c4a30679\">GLM_ALIGNED_TYPEDEF</a> (uvec2, aligned_uvec2, 8)</td></tr>\n<tr class=\"memdesc:ga94e86186978c502c6dc0c0d9c4a30679\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#ga94e86186978c502c6dc0c0d9c4a30679\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94e86186978c502c6dc0c0d9c4a30679\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5cec574686a7f3c8ed24bb195c5e2d0a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5cec574686a7f3c8ed24bb195c5e2d0a\">GLM_ALIGNED_TYPEDEF</a> (uvec3, aligned_uvec3, 16)</td></tr>\n<tr class=\"memdesc:ga5cec574686a7f3c8ed24bb195c5e2d0a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#ga5cec574686a7f3c8ed24bb195c5e2d0a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5cec574686a7f3c8ed24bb195c5e2d0a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga47edfdcee9c89b1ebdaf20450323b1d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga47edfdcee9c89b1ebdaf20450323b1d4\">GLM_ALIGNED_TYPEDEF</a> (uvec4, aligned_uvec4, 16)</td></tr>\n<tr class=\"memdesc:ga47edfdcee9c89b1ebdaf20450323b1d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#ga47edfdcee9c89b1ebdaf20450323b1d4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga47edfdcee9c89b1ebdaf20450323b1d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5611d6718e3a00096918a64192e73a45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5611d6718e3a00096918a64192e73a45\">GLM_ALIGNED_TYPEDEF</a> (u8vec1, aligned_u8vec1, 1)</td></tr>\n<tr class=\"memdesc:ga5611d6718e3a00096918a64192e73a45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga5611d6718e3a00096918a64192e73a45\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5611d6718e3a00096918a64192e73a45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19837e6f72b60d994a805ef564c6c326\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga19837e6f72b60d994a805ef564c6c326\">GLM_ALIGNED_TYPEDEF</a> (u8vec2, aligned_u8vec2, 2)</td></tr>\n<tr class=\"memdesc:ga19837e6f72b60d994a805ef564c6c326\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#ga19837e6f72b60d994a805ef564c6c326\">More...</a><br /></td></tr>\n<tr class=\"separator:ga19837e6f72b60d994a805ef564c6c326\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9740cf8e34f068049b42a2753f9601c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9740cf8e34f068049b42a2753f9601c2\">GLM_ALIGNED_TYPEDEF</a> (u8vec3, aligned_u8vec3, 4)</td></tr>\n<tr class=\"memdesc:ga9740cf8e34f068049b42a2753f9601c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#ga9740cf8e34f068049b42a2753f9601c2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9740cf8e34f068049b42a2753f9601c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b8588bb221448f5541a858903822a57\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8b8588bb221448f5541a858903822a57\">GLM_ALIGNED_TYPEDEF</a> (u8vec4, aligned_u8vec4, 4)</td></tr>\n<tr class=\"memdesc:ga8b8588bb221448f5541a858903822a57\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#ga8b8588bb221448f5541a858903822a57\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b8588bb221448f5541a858903822a57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga991abe990c16de26b2129d6bc2f4c051\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga991abe990c16de26b2129d6bc2f4c051\">GLM_ALIGNED_TYPEDEF</a> (u16vec1, aligned_u16vec1, 2)</td></tr>\n<tr class=\"memdesc:ga991abe990c16de26b2129d6bc2f4c051\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga991abe990c16de26b2129d6bc2f4c051\">More...</a><br /></td></tr>\n<tr class=\"separator:ga991abe990c16de26b2129d6bc2f4c051\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac01bb9fc32a1cd76c2b80d030f71df4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac01bb9fc32a1cd76c2b80d030f71df4c\">GLM_ALIGNED_TYPEDEF</a> (u16vec2, aligned_u16vec2, 4)</td></tr>\n<tr class=\"memdesc:gac01bb9fc32a1cd76c2b80d030f71df4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#gac01bb9fc32a1cd76c2b80d030f71df4c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac01bb9fc32a1cd76c2b80d030f71df4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09540dbca093793a36a8997e0d4bee77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga09540dbca093793a36a8997e0d4bee77\">GLM_ALIGNED_TYPEDEF</a> (u16vec3, aligned_u16vec3, 8)</td></tr>\n<tr class=\"memdesc:ga09540dbca093793a36a8997e0d4bee77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#ga09540dbca093793a36a8997e0d4bee77\">More...</a><br /></td></tr>\n<tr class=\"separator:ga09540dbca093793a36a8997e0d4bee77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaecafb5996f5a44f57e34d29c8670741e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaecafb5996f5a44f57e34d29c8670741e\">GLM_ALIGNED_TYPEDEF</a> (u16vec4, aligned_u16vec4, 8)</td></tr>\n<tr class=\"memdesc:gaecafb5996f5a44f57e34d29c8670741e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#gaecafb5996f5a44f57e34d29c8670741e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaecafb5996f5a44f57e34d29c8670741e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac6b161a04d2f8408fe1c9d857e8daac0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac6b161a04d2f8408fe1c9d857e8daac0\">GLM_ALIGNED_TYPEDEF</a> (u32vec1, aligned_u32vec1, 4)</td></tr>\n<tr class=\"memdesc:gac6b161a04d2f8408fe1c9d857e8daac0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gac6b161a04d2f8408fe1c9d857e8daac0\">More...</a><br /></td></tr>\n<tr class=\"separator:gac6b161a04d2f8408fe1c9d857e8daac0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fa0dfc8feb0fa17dab2acd43e05342b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1fa0dfc8feb0fa17dab2acd43e05342b\">GLM_ALIGNED_TYPEDEF</a> (u32vec2, aligned_u32vec2, 8)</td></tr>\n<tr class=\"memdesc:ga1fa0dfc8feb0fa17dab2acd43e05342b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#ga1fa0dfc8feb0fa17dab2acd43e05342b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1fa0dfc8feb0fa17dab2acd43e05342b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0019500abbfa9c66eff61ca75eaaed94\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0019500abbfa9c66eff61ca75eaaed94\">GLM_ALIGNED_TYPEDEF</a> (u32vec3, aligned_u32vec3, 16)</td></tr>\n<tr class=\"memdesc:ga0019500abbfa9c66eff61ca75eaaed94\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#ga0019500abbfa9c66eff61ca75eaaed94\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0019500abbfa9c66eff61ca75eaaed94\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14fd29d01dae7b08a04e9facbcc18824\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga14fd29d01dae7b08a04e9facbcc18824\">GLM_ALIGNED_TYPEDEF</a> (u32vec4, aligned_u32vec4, 16)</td></tr>\n<tr class=\"memdesc:ga14fd29d01dae7b08a04e9facbcc18824\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#ga14fd29d01dae7b08a04e9facbcc18824\">More...</a><br /></td></tr>\n<tr class=\"separator:ga14fd29d01dae7b08a04e9facbcc18824\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab253845f534a67136f9619843cade903\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab253845f534a67136f9619843cade903\">GLM_ALIGNED_TYPEDEF</a> (u64vec1, aligned_u64vec1, 8)</td></tr>\n<tr class=\"memdesc:gab253845f534a67136f9619843cade903\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gab253845f534a67136f9619843cade903\">More...</a><br /></td></tr>\n<tr class=\"separator:gab253845f534a67136f9619843cade903\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga929427a7627940cdf3304f9c050b677d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga929427a7627940cdf3304f9c050b677d\">GLM_ALIGNED_TYPEDEF</a> (u64vec2, aligned_u64vec2, 16)</td></tr>\n<tr class=\"memdesc:ga929427a7627940cdf3304f9c050b677d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#ga929427a7627940cdf3304f9c050b677d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga929427a7627940cdf3304f9c050b677d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae373b6c04fdf9879f33d63e6949c037e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gae373b6c04fdf9879f33d63e6949c037e\">GLM_ALIGNED_TYPEDEF</a> (u64vec3, aligned_u64vec3, 32)</td></tr>\n<tr class=\"memdesc:gae373b6c04fdf9879f33d63e6949c037e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#gae373b6c04fdf9879f33d63e6949c037e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae373b6c04fdf9879f33d63e6949c037e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga53a8a03dca2015baec4584f45b8e9cdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga53a8a03dca2015baec4584f45b8e9cdc\">GLM_ALIGNED_TYPEDEF</a> (u64vec4, aligned_u64vec4, 32)</td></tr>\n<tr class=\"memdesc:ga53a8a03dca2015baec4584f45b8e9cdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#ga53a8a03dca2015baec4584f45b8e9cdc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga53a8a03dca2015baec4584f45b8e9cdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3301bae94ef5bf59fbdd9a24e7d2a01\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab3301bae94ef5bf59fbdd9a24e7d2a01\">GLM_ALIGNED_TYPEDEF</a> (float32, aligned_float32, 4)</td></tr>\n<tr class=\"memdesc:gab3301bae94ef5bf59fbdd9a24e7d2a01\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit single-qualifier floating-point aligned scalar.  <a href=\"a00364.html#gab3301bae94ef5bf59fbdd9a24e7d2a01\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3301bae94ef5bf59fbdd9a24e7d2a01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada9b0bea273d3ae0286f891533b9568f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gada9b0bea273d3ae0286f891533b9568f\">GLM_ALIGNED_TYPEDEF</a> (float32_t, aligned_float32_t, 4)</td></tr>\n<tr class=\"memdesc:gada9b0bea273d3ae0286f891533b9568f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit single-qualifier floating-point aligned scalar.  <a href=\"a00364.html#gada9b0bea273d3ae0286f891533b9568f\">More...</a><br /></td></tr>\n<tr class=\"separator:gada9b0bea273d3ae0286f891533b9568f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadbce23b9f23d77bb3884e289a574ebd5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gadbce23b9f23d77bb3884e289a574ebd5\">GLM_ALIGNED_TYPEDEF</a> (float32, aligned_f32, 4)</td></tr>\n<tr class=\"memdesc:gadbce23b9f23d77bb3884e289a574ebd5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit single-qualifier floating-point aligned scalar.  <a href=\"a00364.html#gadbce23b9f23d77bb3884e289a574ebd5\">More...</a><br /></td></tr>\n<tr class=\"separator:gadbce23b9f23d77bb3884e289a574ebd5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga75930684ff2233171c573e603f216162\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga75930684ff2233171c573e603f216162\">GLM_ALIGNED_TYPEDEF</a> (float64, aligned_float64, 8)</td></tr>\n<tr class=\"memdesc:ga75930684ff2233171c573e603f216162\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit double-qualifier floating-point aligned scalar.  <a href=\"a00364.html#ga75930684ff2233171c573e603f216162\">More...</a><br /></td></tr>\n<tr class=\"separator:ga75930684ff2233171c573e603f216162\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e3a2d83b131336219a0f4c7cbba2a48\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6e3a2d83b131336219a0f4c7cbba2a48\">GLM_ALIGNED_TYPEDEF</a> (float64_t, aligned_float64_t, 8)</td></tr>\n<tr class=\"memdesc:ga6e3a2d83b131336219a0f4c7cbba2a48\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit double-qualifier floating-point aligned scalar.  <a href=\"a00364.html#ga6e3a2d83b131336219a0f4c7cbba2a48\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e3a2d83b131336219a0f4c7cbba2a48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4deaa0dea930c393d55e7a4352b0a20\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa4deaa0dea930c393d55e7a4352b0a20\">GLM_ALIGNED_TYPEDEF</a> (float64, aligned_f64, 8)</td></tr>\n<tr class=\"memdesc:gaa4deaa0dea930c393d55e7a4352b0a20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit double-qualifier floating-point aligned scalar.  <a href=\"a00364.html#gaa4deaa0dea930c393d55e7a4352b0a20\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4deaa0dea930c393d55e7a4352b0a20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81bc497b2bfc6f80bab690c6ee28f0f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga81bc497b2bfc6f80bab690c6ee28f0f9\">GLM_ALIGNED_TYPEDEF</a> (vec1, aligned_vec1, 4)</td></tr>\n<tr class=\"memdesc:ga81bc497b2bfc6f80bab690c6ee28f0f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#ga81bc497b2bfc6f80bab690c6ee28f0f9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga81bc497b2bfc6f80bab690c6ee28f0f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada3e8f783e9d4b90006695a16c39d4d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gada3e8f783e9d4b90006695a16c39d4d4\">GLM_ALIGNED_TYPEDEF</a> (vec2, aligned_vec2, 8)</td></tr>\n<tr class=\"memdesc:gada3e8f783e9d4b90006695a16c39d4d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#gada3e8f783e9d4b90006695a16c39d4d4\">More...</a><br /></td></tr>\n<tr class=\"separator:gada3e8f783e9d4b90006695a16c39d4d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab8d081fac3a38d6f55fa552f32168d32\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab8d081fac3a38d6f55fa552f32168d32\">GLM_ALIGNED_TYPEDEF</a> (vec3, aligned_vec3, 16)</td></tr>\n<tr class=\"memdesc:gab8d081fac3a38d6f55fa552f32168d32\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#gab8d081fac3a38d6f55fa552f32168d32\">More...</a><br /></td></tr>\n<tr class=\"separator:gab8d081fac3a38d6f55fa552f32168d32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga12fe7b9769c964c5b48dcfd8b7f40198\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga12fe7b9769c964c5b48dcfd8b7f40198\">GLM_ALIGNED_TYPEDEF</a> (vec4, aligned_vec4, 16)</td></tr>\n<tr class=\"memdesc:ga12fe7b9769c964c5b48dcfd8b7f40198\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga12fe7b9769c964c5b48dcfd8b7f40198\">More...</a><br /></td></tr>\n<tr class=\"separator:ga12fe7b9769c964c5b48dcfd8b7f40198\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaefab04611c7f8fe1fd9be3071efea6cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaefab04611c7f8fe1fd9be3071efea6cc\">GLM_ALIGNED_TYPEDEF</a> (fvec1, aligned_fvec1, 4)</td></tr>\n<tr class=\"memdesc:gaefab04611c7f8fe1fd9be3071efea6cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#gaefab04611c7f8fe1fd9be3071efea6cc\">More...</a><br /></td></tr>\n<tr class=\"separator:gaefab04611c7f8fe1fd9be3071efea6cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2543c05ba19b3bd19d45b1227390c5b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2543c05ba19b3bd19d45b1227390c5b4\">GLM_ALIGNED_TYPEDEF</a> (fvec2, aligned_fvec2, 8)</td></tr>\n<tr class=\"memdesc:ga2543c05ba19b3bd19d45b1227390c5b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#ga2543c05ba19b3bd19d45b1227390c5b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2543c05ba19b3bd19d45b1227390c5b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga009afd727fd657ef33a18754d6d28f60\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga009afd727fd657ef33a18754d6d28f60\">GLM_ALIGNED_TYPEDEF</a> (fvec3, aligned_fvec3, 16)</td></tr>\n<tr class=\"memdesc:ga009afd727fd657ef33a18754d6d28f60\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#ga009afd727fd657ef33a18754d6d28f60\">More...</a><br /></td></tr>\n<tr class=\"separator:ga009afd727fd657ef33a18754d6d28f60\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f26177e74bfb301a3d0e02ec3c3ef53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2f26177e74bfb301a3d0e02ec3c3ef53\">GLM_ALIGNED_TYPEDEF</a> (fvec4, aligned_fvec4, 16)</td></tr>\n<tr class=\"memdesc:ga2f26177e74bfb301a3d0e02ec3c3ef53\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga2f26177e74bfb301a3d0e02ec3c3ef53\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f26177e74bfb301a3d0e02ec3c3ef53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga309f495a1d6b75ddf195b674b65cb1e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga309f495a1d6b75ddf195b674b65cb1e4\">GLM_ALIGNED_TYPEDEF</a> (f32vec1, aligned_f32vec1, 4)</td></tr>\n<tr class=\"memdesc:ga309f495a1d6b75ddf195b674b65cb1e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#ga309f495a1d6b75ddf195b674b65cb1e4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga309f495a1d6b75ddf195b674b65cb1e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5e185865a2217d0cd47187644683a8c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5e185865a2217d0cd47187644683a8c3\">GLM_ALIGNED_TYPEDEF</a> (f32vec2, aligned_f32vec2, 8)</td></tr>\n<tr class=\"memdesc:ga5e185865a2217d0cd47187644683a8c3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#ga5e185865a2217d0cd47187644683a8c3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5e185865a2217d0cd47187644683a8c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade4458b27b039b9ca34f8ec049f3115a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gade4458b27b039b9ca34f8ec049f3115a\">GLM_ALIGNED_TYPEDEF</a> (f32vec3, aligned_f32vec3, 16)</td></tr>\n<tr class=\"memdesc:gade4458b27b039b9ca34f8ec049f3115a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#gade4458b27b039b9ca34f8ec049f3115a\">More...</a><br /></td></tr>\n<tr class=\"separator:gade4458b27b039b9ca34f8ec049f3115a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\">GLM_ALIGNED_TYPEDEF</a> (f32vec4, aligned_f32vec4, 16)</td></tr>\n<tr class=\"memdesc:ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e0f35fa0c626285a8bad41707e7316c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga3e0f35fa0c626285a8bad41707e7316c\">GLM_ALIGNED_TYPEDEF</a> (dvec1, aligned_dvec1, 8)</td></tr>\n<tr class=\"memdesc:ga3e0f35fa0c626285a8bad41707e7316c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#ga3e0f35fa0c626285a8bad41707e7316c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e0f35fa0c626285a8bad41707e7316c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78bfec2f185d1d365ea0a9ef1e3d45b8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga78bfec2f185d1d365ea0a9ef1e3d45b8\">GLM_ALIGNED_TYPEDEF</a> (dvec2, aligned_dvec2, 16)</td></tr>\n<tr class=\"memdesc:ga78bfec2f185d1d365ea0a9ef1e3d45b8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#ga78bfec2f185d1d365ea0a9ef1e3d45b8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78bfec2f185d1d365ea0a9ef1e3d45b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga01fe6fee6db5df580b6724a7e681f069\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga01fe6fee6db5df580b6724a7e681f069\">GLM_ALIGNED_TYPEDEF</a> (dvec3, aligned_dvec3, 32)</td></tr>\n<tr class=\"memdesc:ga01fe6fee6db5df580b6724a7e681f069\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#ga01fe6fee6db5df580b6724a7e681f069\">More...</a><br /></td></tr>\n<tr class=\"separator:ga01fe6fee6db5df580b6724a7e681f069\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga687d5b8f551d5af32425c0b2fba15e99\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga687d5b8f551d5af32425c0b2fba15e99\">GLM_ALIGNED_TYPEDEF</a> (dvec4, aligned_dvec4, 32)</td></tr>\n<tr class=\"memdesc:ga687d5b8f551d5af32425c0b2fba15e99\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga687d5b8f551d5af32425c0b2fba15e99\">More...</a><br /></td></tr>\n<tr class=\"separator:ga687d5b8f551d5af32425c0b2fba15e99\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e842371d46842ff8f1813419ba49d0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8e842371d46842ff8f1813419ba49d0f\">GLM_ALIGNED_TYPEDEF</a> (f64vec1, aligned_f64vec1, 8)</td></tr>\n<tr class=\"memdesc:ga8e842371d46842ff8f1813419ba49d0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#ga8e842371d46842ff8f1813419ba49d0f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8e842371d46842ff8f1813419ba49d0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga32814aa0f19316b43134fc25f2aad2b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga32814aa0f19316b43134fc25f2aad2b9\">GLM_ALIGNED_TYPEDEF</a> (f64vec2, aligned_f64vec2, 16)</td></tr>\n<tr class=\"memdesc:ga32814aa0f19316b43134fc25f2aad2b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#ga32814aa0f19316b43134fc25f2aad2b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga32814aa0f19316b43134fc25f2aad2b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf3d3bbc1e93909b689123b085e177a14\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf3d3bbc1e93909b689123b085e177a14\">GLM_ALIGNED_TYPEDEF</a> (f64vec3, aligned_f64vec3, 32)</td></tr>\n<tr class=\"memdesc:gaf3d3bbc1e93909b689123b085e177a14\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#gaf3d3bbc1e93909b689123b085e177a14\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf3d3bbc1e93909b689123b085e177a14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga804c654cead1139bd250f90f9bb01fad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga804c654cead1139bd250f90f9bb01fad\">GLM_ALIGNED_TYPEDEF</a> (f64vec4, aligned_f64vec4, 32)</td></tr>\n<tr class=\"memdesc:ga804c654cead1139bd250f90f9bb01fad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga804c654cead1139bd250f90f9bb01fad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga804c654cead1139bd250f90f9bb01fad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacce4ac532880b8c7469d3c31974420a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gacce4ac532880b8c7469d3c31974420a1\">GLM_ALIGNED_TYPEDEF</a> (mat2, aligned_mat2, 16)</td></tr>\n<tr class=\"memdesc:gacce4ac532880b8c7469d3c31974420a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#gacce4ac532880b8c7469d3c31974420a1\">More...</a><br /></td></tr>\n<tr class=\"separator:gacce4ac532880b8c7469d3c31974420a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0498e0e249a6faddaf96aa55d7f81c3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0498e0e249a6faddaf96aa55d7f81c3b\">GLM_ALIGNED_TYPEDEF</a> (mat3, aligned_mat3, 16)</td></tr>\n<tr class=\"memdesc:ga0498e0e249a6faddaf96aa55d7f81c3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#ga0498e0e249a6faddaf96aa55d7f81c3b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0498e0e249a6faddaf96aa55d7f81c3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7435d87de82a0d652b35dc5b9cc718d5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7435d87de82a0d652b35dc5b9cc718d5\">GLM_ALIGNED_TYPEDEF</a> (mat4, aligned_mat4, 16)</td></tr>\n<tr class=\"memdesc:ga7435d87de82a0d652b35dc5b9cc718d5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#ga7435d87de82a0d652b35dc5b9cc718d5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7435d87de82a0d652b35dc5b9cc718d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga719da577361541a4c43a2dd1d0e361e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga719da577361541a4c43a2dd1d0e361e1\">GLM_ALIGNED_TYPEDEF</a> (fmat2x2, aligned_fmat2, 16)</td></tr>\n<tr class=\"memdesc:ga719da577361541a4c43a2dd1d0e361e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga719da577361541a4c43a2dd1d0e361e1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga719da577361541a4c43a2dd1d0e361e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e7ee4f541e1d7db66cd1a224caacafb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6e7ee4f541e1d7db66cd1a224caacafb\">GLM_ALIGNED_TYPEDEF</a> (fmat3x3, aligned_fmat3, 16)</td></tr>\n<tr class=\"memdesc:ga6e7ee4f541e1d7db66cd1a224caacafb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#ga6e7ee4f541e1d7db66cd1a224caacafb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e7ee4f541e1d7db66cd1a224caacafb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5d672d359f2a39f63f98c7975057486\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gae5d672d359f2a39f63f98c7975057486\">GLM_ALIGNED_TYPEDEF</a> (fmat4x4, aligned_fmat4, 16)</td></tr>\n<tr class=\"memdesc:gae5d672d359f2a39f63f98c7975057486\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#gae5d672d359f2a39f63f98c7975057486\">More...</a><br /></td></tr>\n<tr class=\"separator:gae5d672d359f2a39f63f98c7975057486\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6fa2df037dbfc5fe8c8e0b4db8a34953\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6fa2df037dbfc5fe8c8e0b4db8a34953\">GLM_ALIGNED_TYPEDEF</a> (fmat2x2, aligned_fmat2x2, 16)</td></tr>\n<tr class=\"memdesc:ga6fa2df037dbfc5fe8c8e0b4db8a34953\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga6fa2df037dbfc5fe8c8e0b4db8a34953\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6fa2df037dbfc5fe8c8e0b4db8a34953\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0743b4f4f69a3227b82ff58f6abbad62\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0743b4f4f69a3227b82ff58f6abbad62\">GLM_ALIGNED_TYPEDEF</a> (fmat2x3, aligned_fmat2x3, 16)</td></tr>\n<tr class=\"memdesc:ga0743b4f4f69a3227b82ff58f6abbad62\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 2x3 matrix.  <a href=\"a00364.html#ga0743b4f4f69a3227b82ff58f6abbad62\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0743b4f4f69a3227b82ff58f6abbad62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a76b325fdf70f961d835edd182c63dd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1a76b325fdf70f961d835edd182c63dd\">GLM_ALIGNED_TYPEDEF</a> (fmat2x4, aligned_fmat2x4, 16)</td></tr>\n<tr class=\"memdesc:ga1a76b325fdf70f961d835edd182c63dd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 2x4 matrix.  <a href=\"a00364.html#ga1a76b325fdf70f961d835edd182c63dd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a76b325fdf70f961d835edd182c63dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b4e181cd041ba28c3163e7b8074aef0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga4b4e181cd041ba28c3163e7b8074aef0\">GLM_ALIGNED_TYPEDEF</a> (fmat3x2, aligned_fmat3x2, 16)</td></tr>\n<tr class=\"memdesc:ga4b4e181cd041ba28c3163e7b8074aef0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x2 matrix.  <a href=\"a00364.html#ga4b4e181cd041ba28c3163e7b8074aef0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b4e181cd041ba28c3163e7b8074aef0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27b13f465abc8a40705698145e222c3f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga27b13f465abc8a40705698145e222c3f\">GLM_ALIGNED_TYPEDEF</a> (fmat3x3, aligned_fmat3x3, 16)</td></tr>\n<tr class=\"memdesc:ga27b13f465abc8a40705698145e222c3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#ga27b13f465abc8a40705698145e222c3f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27b13f465abc8a40705698145e222c3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2608d19cc275830a6f8c0b6405625a4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2608d19cc275830a6f8c0b6405625a4f\">GLM_ALIGNED_TYPEDEF</a> (fmat3x4, aligned_fmat3x4, 16)</td></tr>\n<tr class=\"memdesc:ga2608d19cc275830a6f8c0b6405625a4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x4 matrix.  <a href=\"a00364.html#ga2608d19cc275830a6f8c0b6405625a4f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2608d19cc275830a6f8c0b6405625a4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga93f09768241358a287c4cca538f1f7e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga93f09768241358a287c4cca538f1f7e7\">GLM_ALIGNED_TYPEDEF</a> (fmat4x2, aligned_fmat4x2, 16)</td></tr>\n<tr class=\"memdesc:ga93f09768241358a287c4cca538f1f7e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x2 matrix.  <a href=\"a00364.html#ga93f09768241358a287c4cca538f1f7e7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga93f09768241358a287c4cca538f1f7e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c117e3ecca089e10247b1d41d88aff9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7c117e3ecca089e10247b1d41d88aff9\">GLM_ALIGNED_TYPEDEF</a> (fmat4x3, aligned_fmat4x3, 16)</td></tr>\n<tr class=\"memdesc:ga7c117e3ecca089e10247b1d41d88aff9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x3 matrix.  <a href=\"a00364.html#ga7c117e3ecca089e10247b1d41d88aff9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c117e3ecca089e10247b1d41d88aff9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07c75cd04ba42dc37fa3e105f89455c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga07c75cd04ba42dc37fa3e105f89455c5\">GLM_ALIGNED_TYPEDEF</a> (fmat4x4, aligned_fmat4x4, 16)</td></tr>\n<tr class=\"memdesc:ga07c75cd04ba42dc37fa3e105f89455c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#ga07c75cd04ba42dc37fa3e105f89455c5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga07c75cd04ba42dc37fa3e105f89455c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65ff0d690a34a4d7f46f9b2eb51525ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga65ff0d690a34a4d7f46f9b2eb51525ee\">GLM_ALIGNED_TYPEDEF</a> (f32mat2x2, aligned_f32mat2, 16)</td></tr>\n<tr class=\"memdesc:ga65ff0d690a34a4d7f46f9b2eb51525ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga65ff0d690a34a4d7f46f9b2eb51525ee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga65ff0d690a34a4d7f46f9b2eb51525ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd8ddbe2bf65ccede865ba2f510176dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gadd8ddbe2bf65ccede865ba2f510176dc\">GLM_ALIGNED_TYPEDEF</a> (f32mat3x3, aligned_f32mat3, 16)</td></tr>\n<tr class=\"memdesc:gadd8ddbe2bf65ccede865ba2f510176dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#gadd8ddbe2bf65ccede865ba2f510176dc\">More...</a><br /></td></tr>\n<tr class=\"separator:gadd8ddbe2bf65ccede865ba2f510176dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf18dbff14bf13d3ff540c517659ec045\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf18dbff14bf13d3ff540c517659ec045\">GLM_ALIGNED_TYPEDEF</a> (f32mat4x4, aligned_f32mat4, 16)</td></tr>\n<tr class=\"memdesc:gaf18dbff14bf13d3ff540c517659ec045\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#gaf18dbff14bf13d3ff540c517659ec045\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf18dbff14bf13d3ff540c517659ec045\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66339f6139bf7ff19e245beb33f61cc8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga66339f6139bf7ff19e245beb33f61cc8\">GLM_ALIGNED_TYPEDEF</a> (f32mat2x2, aligned_f32mat2x2, 16)</td></tr>\n<tr class=\"memdesc:ga66339f6139bf7ff19e245beb33f61cc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga66339f6139bf7ff19e245beb33f61cc8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66339f6139bf7ff19e245beb33f61cc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1558a48b3934011b52612809f443e46d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1558a48b3934011b52612809f443e46d\">GLM_ALIGNED_TYPEDEF</a> (f32mat2x3, aligned_f32mat2x3, 16)</td></tr>\n<tr class=\"memdesc:ga1558a48b3934011b52612809f443e46d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 2x3 matrix.  <a href=\"a00364.html#ga1558a48b3934011b52612809f443e46d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1558a48b3934011b52612809f443e46d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa52e5732daa62851627021ad551c7680\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa52e5732daa62851627021ad551c7680\">GLM_ALIGNED_TYPEDEF</a> (f32mat2x4, aligned_f32mat2x4, 16)</td></tr>\n<tr class=\"memdesc:gaa52e5732daa62851627021ad551c7680\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 2x4 matrix.  <a href=\"a00364.html#gaa52e5732daa62851627021ad551c7680\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa52e5732daa62851627021ad551c7680\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac09663c42566bcb58d23c6781ac4e85a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac09663c42566bcb58d23c6781ac4e85a\">GLM_ALIGNED_TYPEDEF</a> (f32mat3x2, aligned_f32mat3x2, 16)</td></tr>\n<tr class=\"memdesc:gac09663c42566bcb58d23c6781ac4e85a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x2 matrix.  <a href=\"a00364.html#gac09663c42566bcb58d23c6781ac4e85a\">More...</a><br /></td></tr>\n<tr class=\"separator:gac09663c42566bcb58d23c6781ac4e85a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3f510999e59e1b309113e1d561162b29\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga3f510999e59e1b309113e1d561162b29\">GLM_ALIGNED_TYPEDEF</a> (f32mat3x3, aligned_f32mat3x3, 16)</td></tr>\n<tr class=\"memdesc:ga3f510999e59e1b309113e1d561162b29\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#ga3f510999e59e1b309113e1d561162b29\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3f510999e59e1b309113e1d561162b29\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c9c94f0c89cd71ce56551db6cf4aaec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2c9c94f0c89cd71ce56551db6cf4aaec\">GLM_ALIGNED_TYPEDEF</a> (f32mat3x4, aligned_f32mat3x4, 16)</td></tr>\n<tr class=\"memdesc:ga2c9c94f0c89cd71ce56551db6cf4aaec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x4 matrix.  <a href=\"a00364.html#ga2c9c94f0c89cd71ce56551db6cf4aaec\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c9c94f0c89cd71ce56551db6cf4aaec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99ce8274c750fbfdf0e70c95946a2875\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga99ce8274c750fbfdf0e70c95946a2875\">GLM_ALIGNED_TYPEDEF</a> (f32mat4x2, aligned_f32mat4x2, 16)</td></tr>\n<tr class=\"memdesc:ga99ce8274c750fbfdf0e70c95946a2875\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x2 matrix.  <a href=\"a00364.html#ga99ce8274c750fbfdf0e70c95946a2875\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99ce8274c750fbfdf0e70c95946a2875\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9476ef66790239df53dbe66f3989c3b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9476ef66790239df53dbe66f3989c3b5\">GLM_ALIGNED_TYPEDEF</a> (f32mat4x3, aligned_f32mat4x3, 16)</td></tr>\n<tr class=\"memdesc:ga9476ef66790239df53dbe66f3989c3b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x3 matrix.  <a href=\"a00364.html#ga9476ef66790239df53dbe66f3989c3b5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9476ef66790239df53dbe66f3989c3b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacc429b3b0b49921e12713b6d31e14e1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gacc429b3b0b49921e12713b6d31e14e1d\">GLM_ALIGNED_TYPEDEF</a> (f32mat4x4, aligned_f32mat4x4, 16)</td></tr>\n<tr class=\"memdesc:gacc429b3b0b49921e12713b6d31e14e1d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#gacc429b3b0b49921e12713b6d31e14e1d\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc429b3b0b49921e12713b6d31e14e1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga88f6c6fa06e6e64479763e69444669cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga88f6c6fa06e6e64479763e69444669cf\">GLM_ALIGNED_TYPEDEF</a> (f64mat2x2, aligned_f64mat2, 32)</td></tr>\n<tr class=\"memdesc:ga88f6c6fa06e6e64479763e69444669cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga88f6c6fa06e6e64479763e69444669cf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga88f6c6fa06e6e64479763e69444669cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaae8e4639c991e64754145ab8e4c32083\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaae8e4639c991e64754145ab8e4c32083\">GLM_ALIGNED_TYPEDEF</a> (f64mat3x3, aligned_f64mat3, 32)</td></tr>\n<tr class=\"memdesc:gaae8e4639c991e64754145ab8e4c32083\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#gaae8e4639c991e64754145ab8e4c32083\">More...</a><br /></td></tr>\n<tr class=\"separator:gaae8e4639c991e64754145ab8e4c32083\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e9094f3feb3b5b49d0f83683a101fde\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6e9094f3feb3b5b49d0f83683a101fde\">GLM_ALIGNED_TYPEDEF</a> (f64mat4x4, aligned_f64mat4, 32)</td></tr>\n<tr class=\"memdesc:ga6e9094f3feb3b5b49d0f83683a101fde\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#ga6e9094f3feb3b5b49d0f83683a101fde\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e9094f3feb3b5b49d0f83683a101fde\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadbd2c639c03de1c3e9591b5a39f65559\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gadbd2c639c03de1c3e9591b5a39f65559\">GLM_ALIGNED_TYPEDEF</a> (f64mat2x2, aligned_f64mat2x2, 32)</td></tr>\n<tr class=\"memdesc:gadbd2c639c03de1c3e9591b5a39f65559\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#gadbd2c639c03de1c3e9591b5a39f65559\">More...</a><br /></td></tr>\n<tr class=\"separator:gadbd2c639c03de1c3e9591b5a39f65559\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab059d7b9fe2094acc563b7223987499f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab059d7b9fe2094acc563b7223987499f\">GLM_ALIGNED_TYPEDEF</a> (f64mat2x3, aligned_f64mat2x3, 32)</td></tr>\n<tr class=\"memdesc:gab059d7b9fe2094acc563b7223987499f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 2x3 matrix.  <a href=\"a00364.html#gab059d7b9fe2094acc563b7223987499f\">More...</a><br /></td></tr>\n<tr class=\"separator:gab059d7b9fe2094acc563b7223987499f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabbc811d1c52ed2b8cfcaff1378f75c69\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gabbc811d1c52ed2b8cfcaff1378f75c69\">GLM_ALIGNED_TYPEDEF</a> (f64mat2x4, aligned_f64mat2x4, 32)</td></tr>\n<tr class=\"memdesc:gabbc811d1c52ed2b8cfcaff1378f75c69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 2x4 matrix.  <a href=\"a00364.html#gabbc811d1c52ed2b8cfcaff1378f75c69\">More...</a><br /></td></tr>\n<tr class=\"separator:gabbc811d1c52ed2b8cfcaff1378f75c69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ddf5212777734d2fd841a84439f3bdf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9ddf5212777734d2fd841a84439f3bdf\">GLM_ALIGNED_TYPEDEF</a> (f64mat3x2, aligned_f64mat3x2, 32)</td></tr>\n<tr class=\"memdesc:ga9ddf5212777734d2fd841a84439f3bdf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 3x2 matrix.  <a href=\"a00364.html#ga9ddf5212777734d2fd841a84439f3bdf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9ddf5212777734d2fd841a84439f3bdf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1dda32ed09f94bfcf0a7d8edfb6cf13\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad1dda32ed09f94bfcf0a7d8edfb6cf13\">GLM_ALIGNED_TYPEDEF</a> (f64mat3x3, aligned_f64mat3x3, 32)</td></tr>\n<tr class=\"memdesc:gad1dda32ed09f94bfcf0a7d8edfb6cf13\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#gad1dda32ed09f94bfcf0a7d8edfb6cf13\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1dda32ed09f94bfcf0a7d8edfb6cf13\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5875e0fa72f07e271e7931811cbbf31a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5875e0fa72f07e271e7931811cbbf31a\">GLM_ALIGNED_TYPEDEF</a> (f64mat3x4, aligned_f64mat3x4, 32)</td></tr>\n<tr class=\"memdesc:ga5875e0fa72f07e271e7931811cbbf31a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 3x4 matrix.  <a href=\"a00364.html#ga5875e0fa72f07e271e7931811cbbf31a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5875e0fa72f07e271e7931811cbbf31a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41e82cd6ac07f912ba2a2d45799dcf0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga41e82cd6ac07f912ba2a2d45799dcf0d\">GLM_ALIGNED_TYPEDEF</a> (f64mat4x2, aligned_f64mat4x2, 32)</td></tr>\n<tr class=\"memdesc:ga41e82cd6ac07f912ba2a2d45799dcf0d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 4x2 matrix.  <a href=\"a00364.html#ga41e82cd6ac07f912ba2a2d45799dcf0d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga41e82cd6ac07f912ba2a2d45799dcf0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0892638d6ba773043b3d63d1d092622e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0892638d6ba773043b3d63d1d092622e\">GLM_ALIGNED_TYPEDEF</a> (f64mat4x3, aligned_f64mat4x3, 32)</td></tr>\n<tr class=\"memdesc:ga0892638d6ba773043b3d63d1d092622e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 4x3 matrix.  <a href=\"a00364.html#ga0892638d6ba773043b3d63d1d092622e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0892638d6ba773043b3d63d1d092622e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga912a16432608b822f1e13607529934c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga912a16432608b822f1e13607529934c1\">GLM_ALIGNED_TYPEDEF</a> (f64mat4x4, aligned_f64mat4x4, 32)</td></tr>\n<tr class=\"memdesc:ga912a16432608b822f1e13607529934c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#ga912a16432608b822f1e13607529934c1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga912a16432608b822f1e13607529934c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafd945a8ea86b042aba410e0560df9a3d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gafd945a8ea86b042aba410e0560df9a3d\">GLM_ALIGNED_TYPEDEF</a> (quat, aligned_quat, 16)</td></tr>\n<tr class=\"memdesc:gafd945a8ea86b042aba410e0560df9a3d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#gafd945a8ea86b042aba410e0560df9a3d\">More...</a><br /></td></tr>\n<tr class=\"separator:gafd945a8ea86b042aba410e0560df9a3d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19c2ba545d1f2f36bcb7b60c9a228622\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga19c2ba545d1f2f36bcb7b60c9a228622\">GLM_ALIGNED_TYPEDEF</a> (quat, aligned_fquat, 16)</td></tr>\n<tr class=\"memdesc:ga19c2ba545d1f2f36bcb7b60c9a228622\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#ga19c2ba545d1f2f36bcb7b60c9a228622\">More...</a><br /></td></tr>\n<tr class=\"separator:ga19c2ba545d1f2f36bcb7b60c9a228622\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaabc28c84a3288b697605d4688686f9a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaabc28c84a3288b697605d4688686f9a9\">GLM_ALIGNED_TYPEDEF</a> (dquat, aligned_dquat, 32)</td></tr>\n<tr class=\"memdesc:gaabc28c84a3288b697605d4688686f9a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#gaabc28c84a3288b697605d4688686f9a9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaabc28c84a3288b697605d4688686f9a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ed8aeb5ca67fade269a46105f1bf273\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1ed8aeb5ca67fade269a46105f1bf273\">GLM_ALIGNED_TYPEDEF</a> (f32quat, aligned_f32quat, 16)</td></tr>\n<tr class=\"memdesc:ga1ed8aeb5ca67fade269a46105f1bf273\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#ga1ed8aeb5ca67fade269a46105f1bf273\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1ed8aeb5ca67fade269a46105f1bf273\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga95cc03b8b475993fa50e05e38e203303\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a> (f64quat, aligned_f64quat, 32)</td></tr>\n<tr class=\"memdesc:ga95cc03b8b475993fa50e05e38e203303\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">More...</a><br /></td></tr>\n<tr class=\"separator:ga95cc03b8b475993fa50e05e38e203303\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00364.html\">GLM_GTX_type_aligned</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00162_source.html\">gtx/type_aligned.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00162_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_aligned.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtx/type_aligned.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00162.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/type_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_type_aligned is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_type_aligned extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;        <span class=\"comment\">// Signed int vector types</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">lowp_int8</a>, aligned_lowp_int8, 1);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">lowp_int16</a>, aligned_lowp_int16, 2);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">lowp_int32</a>, aligned_lowp_int32, 4);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">lowp_int64</a>, aligned_lowp_int64, 8);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">lowp_int8_t</a>, aligned_lowp_int8_t, 1);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">lowp_int16_t</a>, aligned_lowp_int16_t, 2);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">lowp_int32_t</a>, aligned_lowp_int32_t, 4);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">lowp_int64_t</a>, aligned_lowp_int64_t, 8);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">lowp_i8</a>, aligned_lowp_i8, 1);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">lowp_i16</a>, aligned_lowp_i16, 2);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">lowp_i32</a>, aligned_lowp_i32, 4);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">lowp_i64</a>, aligned_lowp_i64, 8);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">mediump_int8</a>, aligned_mediump_int8, 1);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">mediump_int16</a>, aligned_mediump_int16, 2);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">mediump_int32</a>, aligned_mediump_int32, 4);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">mediump_int64</a>, aligned_mediump_int64, 8);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">mediump_int8_t</a>, aligned_mediump_int8_t, 1);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">mediump_int16_t</a>, aligned_mediump_int16_t, 2);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">mediump_int32_t</a>, aligned_mediump_int32_t, 4);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">mediump_int64_t</a>, aligned_mediump_int64_t, 8);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">mediump_i8</a>, aligned_mediump_i8, 1);</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">mediump_i16</a>, aligned_mediump_i16, 2);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">mediump_i32</a>, aligned_mediump_i32, 4);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">mediump_i64</a>, aligned_mediump_i64, 8);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">highp_int8</a>, aligned_highp_int8, 1);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">highp_int16</a>, aligned_highp_int16, 2);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">highp_int32</a>, aligned_highp_int32, 4);</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">highp_int64</a>, aligned_highp_int64, 8);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">highp_int8_t</a>, aligned_highp_int8_t, 1);</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">highp_int16_t</a>, aligned_highp_int16_t, 2);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">highp_int32_t</a>, aligned_highp_int32_t, 4);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">highp_int64_t</a>, aligned_highp_int64_t, 8);</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">highp_i8</a>, aligned_highp_i8, 1);</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">highp_i16</a>, aligned_highp_i16, 2);</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">highp_i32</a>, aligned_highp_i32, 4);</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">highp_i64</a>, aligned_highp_i64, 8);</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(int8, aligned_int8, 1);</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(int16, aligned_int16, 2);</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(int32, aligned_int32, 4);</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>, aligned_int64, 8);</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">int8_t</a>, aligned_int8_t, 1);</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">int16_t</a>, aligned_int16_t, 2);</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">int32_t</a>, aligned_int32_t, 4);</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">int64_t</a>, aligned_int64_t, 8);</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">i8</a>, aligned_i8, 1);</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">i16</a>, aligned_i16, 2);</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">i32</a>, aligned_i32, 4);</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">i64</a>, aligned_i64, 8);</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">ivec1</a>, <a class=\"code\" href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">aligned_ivec1</a>, 4);</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">ivec2</a>, <a class=\"code\" href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">aligned_ivec2</a>, 8);</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">ivec3</a>, <a class=\"code\" href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">aligned_ivec3</a>, 16);</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a>, <a class=\"code\" href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">aligned_ivec4</a>, 16);</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">i8vec1</a>, aligned_i8vec1, 1);</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">i8vec2</a>, aligned_i8vec2, 2);</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">i8vec3</a>, aligned_i8vec3, 4);</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">i8vec4</a>, aligned_i8vec4, 4);</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">i16vec1</a>, aligned_i16vec1, 2);</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">i16vec2</a>, aligned_i16vec2, 4);</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">i16vec3</a>, aligned_i16vec3, 8);</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">i16vec4</a>, aligned_i16vec4, 8);</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">i32vec1</a>, aligned_i32vec1, 4);</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">i32vec2</a>, aligned_i32vec2, 8);</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">i32vec3</a>, aligned_i32vec3, 16);</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">i32vec4</a>, aligned_i32vec4, 16);</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">i64vec1</a>, aligned_i64vec1, 8);</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">i64vec2</a>, aligned_i64vec2, 16);</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">i64vec3</a>, aligned_i64vec3, 32);</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">i64vec4</a>, aligned_i64vec4, 32);</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;        <span class=\"comment\">// Unsigned int vector types</span></div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">lowp_uint8</a>, aligned_lowp_uint8, 1);</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">lowp_uint16</a>, aligned_lowp_uint16, 2);</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">lowp_uint32</a>, aligned_lowp_uint32, 4);</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">lowp_uint64</a>, aligned_lowp_uint64, 8);</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">lowp_uint8_t</a>, aligned_lowp_uint8_t, 1);</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">lowp_uint16_t</a>, aligned_lowp_uint16_t, 2);</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">lowp_uint32_t</a>, aligned_lowp_uint32_t, 4);</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">lowp_uint64_t</a>, aligned_lowp_uint64_t, 8);</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">lowp_u8</a>, aligned_lowp_u8, 1);</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">lowp_u16</a>, aligned_lowp_u16, 2);</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">lowp_u32</a>, aligned_lowp_u32, 4);</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">lowp_u64</a>, aligned_lowp_u64, 8);</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">mediump_uint8</a>, aligned_mediump_uint8, 1);</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">mediump_uint16</a>, aligned_mediump_uint16, 2);</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">mediump_uint32</a>, aligned_mediump_uint32, 4);</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">mediump_uint64</a>, aligned_mediump_uint64, 8);</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">mediump_uint8_t</a>, aligned_mediump_uint8_t, 1);</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">mediump_uint16_t</a>, aligned_mediump_uint16_t, 2);</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">mediump_uint32_t</a>, aligned_mediump_uint32_t, 4);</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;</div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">mediump_uint64_t</a>, aligned_mediump_uint64_t, 8);</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">mediump_u8</a>, aligned_mediump_u8, 1);</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">mediump_u16</a>, aligned_mediump_u16, 2);</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">mediump_u32</a>, aligned_mediump_u32, 4);</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">mediump_u64</a>, aligned_mediump_u64, 8);</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">highp_uint8</a>, aligned_highp_uint8, 1);</div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">highp_uint16</a>, aligned_highp_uint16, 2);</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">highp_uint32</a>, aligned_highp_uint32, 4);</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">highp_uint64</a>, aligned_highp_uint64, 8);</div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;</div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">highp_uint8_t</a>, aligned_highp_uint8_t, 1);</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;</div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">highp_uint16_t</a>, aligned_highp_uint16_t, 2);</div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;</div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">highp_uint32_t</a>, aligned_highp_uint32_t, 4);</div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">highp_uint64_t</a>, aligned_highp_uint64_t, 8);</div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;</div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">highp_u8</a>, aligned_highp_u8, 1);</div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">highp_u16</a>, aligned_highp_u16, 2);</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;</div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">highp_u32</a>, aligned_highp_u32, 4);</div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;</div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">highp_u64</a>, aligned_highp_u64, 8);</div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;</div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(uint8, aligned_uint8, 1);</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;</div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(uint16, aligned_uint16, 2);</div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;</div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(uint32, aligned_uint32, 4);</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>, aligned_uint64, 8);</div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;</div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;</div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">uint8_t</a>, aligned_uint8_t, 1);</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;</div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">uint16_t</a>, aligned_uint16_t, 2);</div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;</div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">uint32_t</a>, aligned_uint32_t, 4);</div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160;</div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">uint64_t</a>, aligned_uint64_t, 8);</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;</div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;</div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">u8</a>, aligned_u8, 1);</div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;</div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">u16</a>, aligned_u16, 2);</div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;</div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">u32</a>, aligned_u32, 4);</div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;</div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">u64</a>, aligned_u64, 8);</div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;</div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">uvec1</a>, <a class=\"code\" href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">aligned_uvec1</a>, 4);</div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;</div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a>, <a class=\"code\" href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">aligned_uvec2</a>, 8);</div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;</div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">uvec3</a>, <a class=\"code\" href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">aligned_uvec3</a>, 16);</div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a>, <a class=\"code\" href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">aligned_uvec4</a>, 16);</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;</div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\">  548</span>&#160;</div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">u8vec1</a>, aligned_u8vec1, 1);</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;</div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a>, aligned_u8vec2, 2);</div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160;</div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">u8vec3</a>, aligned_u8vec3, 4);</div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;</div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">u8vec4</a>, aligned_u8vec4, 4);</div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;</div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;</div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">u16vec1</a>, aligned_u16vec1, 2);</div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;</div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a>, aligned_u16vec2, 4);</div>\n<div class=\"line\"><a name=\"l00573\"></a><span class=\"lineno\">  573</span>&#160;</div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">u16vec3</a>, aligned_u16vec3, 8);</div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;</div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\">  580</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">u16vec4</a>, aligned_u16vec4, 8);</div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;</div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;</div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\">  585</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">u32vec1</a>, aligned_u32vec1, 4);</div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;</div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a>, aligned_u32vec2, 8);</div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;</div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">u32vec3</a>, aligned_u32vec3, 16);</div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;</div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">u32vec4</a>, aligned_u32vec4, 16);</div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;</div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">u64vec1</a>, aligned_u64vec1, 8);</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;</div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">u64vec2</a>, aligned_u64vec2, 16);</div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">u64vec3</a>, aligned_u64vec3, 32);</div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;</div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">u64vec4</a>, aligned_u64vec4, 32);</div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;</div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;</div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;        <span class=\"comment\">// Float vector types</span></div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;</div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">float32</a>, aligned_float32, 4);</div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;</div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">float32_t</a>, aligned_float32_t, 4);</div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">float32</a>, aligned_f32, 4);</div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;</div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;</div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\">  636</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">float64</a>, aligned_float64, 8);</div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160;</div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\">  640</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">float64_t</a>, aligned_float64_t, 8);</div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\">  641</span>&#160;</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">float64</a>, aligned_f64, 8);</div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;</div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160;<span class=\"preprocessor\">#       endif//GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\">  647</span>&#160;</div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160;</div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">vec1</a>, <a class=\"code\" href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">aligned_vec1</a>, 4);</div>\n<div class=\"line\"><a name=\"l00652\"></a><span class=\"lineno\">  652</span>&#160;</div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a>, <a class=\"code\" href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">aligned_vec2</a>, 8);</div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;</div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a>, <a class=\"code\" href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">aligned_vec3</a>, 16);</div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;</div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a>, <a class=\"code\" href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">aligned_vec4</a>, 16);</div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\">  664</span>&#160;</div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\">  665</span>&#160;</div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\">  668</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">fvec1</a>, aligned_fvec1, 4);</div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;</div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">fvec2</a>, aligned_fvec2, 8);</div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\">  673</span>&#160;</div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">fvec3</a>, aligned_fvec3, 16);</div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;</div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">fvec4</a>, aligned_fvec4, 16);</div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;</div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\">  682</span>&#160;</div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\">  685</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">f32vec1</a>, aligned_f32vec1, 4);</div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\">  686</span>&#160;</div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">f32vec2</a>, aligned_f32vec2, 8);</div>\n<div class=\"line\"><a name=\"l00690\"></a><span class=\"lineno\">  690</span>&#160;</div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\">  693</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">f32vec3</a>, aligned_f32vec3, 16);</div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\">  694</span>&#160;</div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\">  697</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">f32vec4</a>, aligned_f32vec4, 16);</div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;</div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;</div>\n<div class=\"line\"><a name=\"l00702\"></a><span class=\"lineno\">  702</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">dvec1</a>, <a class=\"code\" href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">aligned_dvec1</a>, 8);</div>\n<div class=\"line\"><a name=\"l00703\"></a><span class=\"lineno\">  703</span>&#160;</div>\n<div class=\"line\"><a name=\"l00706\"></a><span class=\"lineno\">  706</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">dvec2</a>, <a class=\"code\" href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">aligned_dvec2</a>, 16);</div>\n<div class=\"line\"><a name=\"l00707\"></a><span class=\"lineno\">  707</span>&#160;</div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">dvec3</a>, <a class=\"code\" href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">aligned_dvec3</a>, 32);</div>\n<div class=\"line\"><a name=\"l00711\"></a><span class=\"lineno\">  711</span>&#160;</div>\n<div class=\"line\"><a name=\"l00714\"></a><span class=\"lineno\">  714</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">dvec4</a>, <a class=\"code\" href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">aligned_dvec4</a>, 32);</div>\n<div class=\"line\"><a name=\"l00715\"></a><span class=\"lineno\">  715</span>&#160;</div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;</div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l00718\"></a><span class=\"lineno\">  718</span>&#160;</div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">f64vec1</a>, aligned_f64vec1, 8);</div>\n<div class=\"line\"><a name=\"l00722\"></a><span class=\"lineno\">  722</span>&#160;</div>\n<div class=\"line\"><a name=\"l00725\"></a><span class=\"lineno\">  725</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">f64vec2</a>, aligned_f64vec2, 16);</div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\">  726</span>&#160;</div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\">  729</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">f64vec3</a>, aligned_f64vec3, 32);</div>\n<div class=\"line\"><a name=\"l00730\"></a><span class=\"lineno\">  730</span>&#160;</div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">f64vec4</a>, aligned_f64vec4, 32);</div>\n<div class=\"line\"><a name=\"l00734\"></a><span class=\"lineno\">  734</span>&#160;</div>\n<div class=\"line\"><a name=\"l00735\"></a><span class=\"lineno\">  735</span>&#160;<span class=\"preprocessor\">#       endif//GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;</div>\n<div class=\"line\"><a name=\"l00738\"></a><span class=\"lineno\">  738</span>&#160;        <span class=\"comment\">// Float matrix types</span></div>\n<div class=\"line\"><a name=\"l00739\"></a><span class=\"lineno\">  739</span>&#160;</div>\n<div class=\"line\"><a name=\"l00742\"></a><span class=\"lineno\">  742</span>&#160;        <span class=\"comment\">//typedef detail::tmat1&lt;f32&gt; mat1;</span></div>\n<div class=\"line\"><a name=\"l00743\"></a><span class=\"lineno\">  743</span>&#160;</div>\n<div class=\"line\"><a name=\"l00746\"></a><span class=\"lineno\">  746</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">mat2</a>, <a class=\"code\" href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">aligned_mat2</a>, 16);</div>\n<div class=\"line\"><a name=\"l00747\"></a><span class=\"lineno\">  747</span>&#160;</div>\n<div class=\"line\"><a name=\"l00750\"></a><span class=\"lineno\">  750</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">mat3</a>, <a class=\"code\" href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">aligned_mat3</a>, 16);</div>\n<div class=\"line\"><a name=\"l00751\"></a><span class=\"lineno\">  751</span>&#160;</div>\n<div class=\"line\"><a name=\"l00754\"></a><span class=\"lineno\">  754</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">mat4</a>, <a class=\"code\" href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">aligned_mat4</a>, 16);</div>\n<div class=\"line\"><a name=\"l00755\"></a><span class=\"lineno\">  755</span>&#160;</div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\">  756</span>&#160;</div>\n<div class=\"line\"><a name=\"l00759\"></a><span class=\"lineno\">  759</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f32&gt; mat1;</span></div>\n<div class=\"line\"><a name=\"l00760\"></a><span class=\"lineno\">  760</span>&#160;</div>\n<div class=\"line\"><a name=\"l00763\"></a><span class=\"lineno\">  763</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">mat2x2</a>, <a class=\"code\" href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">aligned_mat2x2</a>, 16);</div>\n<div class=\"line\"><a name=\"l00764\"></a><span class=\"lineno\">  764</span>&#160;</div>\n<div class=\"line\"><a name=\"l00767\"></a><span class=\"lineno\">  767</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">mat3x3</a>, <a class=\"code\" href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">aligned_mat3x3</a>, 16);</div>\n<div class=\"line\"><a name=\"l00768\"></a><span class=\"lineno\">  768</span>&#160;</div>\n<div class=\"line\"><a name=\"l00771\"></a><span class=\"lineno\">  771</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">mat4x4</a>, <a class=\"code\" href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\">aligned_mat4x4</a>, 16);</div>\n<div class=\"line\"><a name=\"l00772\"></a><span class=\"lineno\">  772</span>&#160;</div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\">  773</span>&#160;</div>\n<div class=\"line\"><a name=\"l00776\"></a><span class=\"lineno\">  776</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f32&gt; fmat1;</span></div>\n<div class=\"line\"><a name=\"l00777\"></a><span class=\"lineno\">  777</span>&#160;</div>\n<div class=\"line\"><a name=\"l00780\"></a><span class=\"lineno\">  780</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">fmat2x2</a>, aligned_fmat2, 16);</div>\n<div class=\"line\"><a name=\"l00781\"></a><span class=\"lineno\">  781</span>&#160;</div>\n<div class=\"line\"><a name=\"l00784\"></a><span class=\"lineno\">  784</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">fmat3x3</a>, aligned_fmat3, 16);</div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\">  785</span>&#160;</div>\n<div class=\"line\"><a name=\"l00788\"></a><span class=\"lineno\">  788</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">fmat4x4</a>, aligned_fmat4, 16);</div>\n<div class=\"line\"><a name=\"l00789\"></a><span class=\"lineno\">  789</span>&#160;</div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;</div>\n<div class=\"line\"><a name=\"l00793\"></a><span class=\"lineno\">  793</span>&#160;        <span class=\"comment\">//typedef f32 fmat1x1;</span></div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160;</div>\n<div class=\"line\"><a name=\"l00797\"></a><span class=\"lineno\">  797</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">fmat2x2</a>, aligned_fmat2x2, 16);</div>\n<div class=\"line\"><a name=\"l00798\"></a><span class=\"lineno\">  798</span>&#160;</div>\n<div class=\"line\"><a name=\"l00801\"></a><span class=\"lineno\">  801</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">fmat2x3</a>, aligned_fmat2x3, 16);</div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\">  802</span>&#160;</div>\n<div class=\"line\"><a name=\"l00805\"></a><span class=\"lineno\">  805</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">fmat2x4</a>, aligned_fmat2x4, 16);</div>\n<div class=\"line\"><a name=\"l00806\"></a><span class=\"lineno\">  806</span>&#160;</div>\n<div class=\"line\"><a name=\"l00809\"></a><span class=\"lineno\">  809</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">fmat3x2</a>, aligned_fmat3x2, 16);</div>\n<div class=\"line\"><a name=\"l00810\"></a><span class=\"lineno\">  810</span>&#160;</div>\n<div class=\"line\"><a name=\"l00813\"></a><span class=\"lineno\">  813</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">fmat3x3</a>, aligned_fmat3x3, 16);</div>\n<div class=\"line\"><a name=\"l00814\"></a><span class=\"lineno\">  814</span>&#160;</div>\n<div class=\"line\"><a name=\"l00817\"></a><span class=\"lineno\">  817</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">fmat3x4</a>, aligned_fmat3x4, 16);</div>\n<div class=\"line\"><a name=\"l00818\"></a><span class=\"lineno\">  818</span>&#160;</div>\n<div class=\"line\"><a name=\"l00821\"></a><span class=\"lineno\">  821</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">fmat4x2</a>, aligned_fmat4x2, 16);</div>\n<div class=\"line\"><a name=\"l00822\"></a><span class=\"lineno\">  822</span>&#160;</div>\n<div class=\"line\"><a name=\"l00825\"></a><span class=\"lineno\">  825</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">fmat4x3</a>, aligned_fmat4x3, 16);</div>\n<div class=\"line\"><a name=\"l00826\"></a><span class=\"lineno\">  826</span>&#160;</div>\n<div class=\"line\"><a name=\"l00829\"></a><span class=\"lineno\">  829</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">fmat4x4</a>, aligned_fmat4x4, 16);</div>\n<div class=\"line\"><a name=\"l00830\"></a><span class=\"lineno\">  830</span>&#160;</div>\n<div class=\"line\"><a name=\"l00831\"></a><span class=\"lineno\">  831</span>&#160;</div>\n<div class=\"line\"><a name=\"l00834\"></a><span class=\"lineno\">  834</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f32, defaultp&gt; f32mat1;</span></div>\n<div class=\"line\"><a name=\"l00835\"></a><span class=\"lineno\">  835</span>&#160;</div>\n<div class=\"line\"><a name=\"l00838\"></a><span class=\"lineno\">  838</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">f32mat2x2</a>, aligned_f32mat2, 16);</div>\n<div class=\"line\"><a name=\"l00839\"></a><span class=\"lineno\">  839</span>&#160;</div>\n<div class=\"line\"><a name=\"l00842\"></a><span class=\"lineno\">  842</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">f32mat3x3</a>, aligned_f32mat3, 16);</div>\n<div class=\"line\"><a name=\"l00843\"></a><span class=\"lineno\">  843</span>&#160;</div>\n<div class=\"line\"><a name=\"l00846\"></a><span class=\"lineno\">  846</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">f32mat4x4</a>, aligned_f32mat4, 16);</div>\n<div class=\"line\"><a name=\"l00847\"></a><span class=\"lineno\">  847</span>&#160;</div>\n<div class=\"line\"><a name=\"l00848\"></a><span class=\"lineno\">  848</span>&#160;</div>\n<div class=\"line\"><a name=\"l00851\"></a><span class=\"lineno\">  851</span>&#160;        <span class=\"comment\">//typedef f32 f32mat1x1;</span></div>\n<div class=\"line\"><a name=\"l00852\"></a><span class=\"lineno\">  852</span>&#160;</div>\n<div class=\"line\"><a name=\"l00855\"></a><span class=\"lineno\">  855</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">f32mat2x2</a>, aligned_f32mat2x2, 16);</div>\n<div class=\"line\"><a name=\"l00856\"></a><span class=\"lineno\">  856</span>&#160;</div>\n<div class=\"line\"><a name=\"l00859\"></a><span class=\"lineno\">  859</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">f32mat2x3</a>, aligned_f32mat2x3, 16);</div>\n<div class=\"line\"><a name=\"l00860\"></a><span class=\"lineno\">  860</span>&#160;</div>\n<div class=\"line\"><a name=\"l00863\"></a><span class=\"lineno\">  863</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">f32mat2x4</a>, aligned_f32mat2x4, 16);</div>\n<div class=\"line\"><a name=\"l00864\"></a><span class=\"lineno\">  864</span>&#160;</div>\n<div class=\"line\"><a name=\"l00867\"></a><span class=\"lineno\">  867</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">f32mat3x2</a>, aligned_f32mat3x2, 16);</div>\n<div class=\"line\"><a name=\"l00868\"></a><span class=\"lineno\">  868</span>&#160;</div>\n<div class=\"line\"><a name=\"l00871\"></a><span class=\"lineno\">  871</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">f32mat3x3</a>, aligned_f32mat3x3, 16);</div>\n<div class=\"line\"><a name=\"l00872\"></a><span class=\"lineno\">  872</span>&#160;</div>\n<div class=\"line\"><a name=\"l00875\"></a><span class=\"lineno\">  875</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">f32mat3x4</a>, aligned_f32mat3x4, 16);</div>\n<div class=\"line\"><a name=\"l00876\"></a><span class=\"lineno\">  876</span>&#160;</div>\n<div class=\"line\"><a name=\"l00879\"></a><span class=\"lineno\">  879</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">f32mat4x2</a>, aligned_f32mat4x2, 16);</div>\n<div class=\"line\"><a name=\"l00880\"></a><span class=\"lineno\">  880</span>&#160;</div>\n<div class=\"line\"><a name=\"l00883\"></a><span class=\"lineno\">  883</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">f32mat4x3</a>, aligned_f32mat4x3, 16);</div>\n<div class=\"line\"><a name=\"l00884\"></a><span class=\"lineno\">  884</span>&#160;</div>\n<div class=\"line\"><a name=\"l00887\"></a><span class=\"lineno\">  887</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">f32mat4x4</a>, aligned_f32mat4x4, 16);</div>\n<div class=\"line\"><a name=\"l00888\"></a><span class=\"lineno\">  888</span>&#160;</div>\n<div class=\"line\"><a name=\"l00889\"></a><span class=\"lineno\">  889</span>&#160;</div>\n<div class=\"line\"><a name=\"l00890\"></a><span class=\"lineno\">  890</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l00891\"></a><span class=\"lineno\">  891</span>&#160;</div>\n<div class=\"line\"><a name=\"l00894\"></a><span class=\"lineno\">  894</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f64, defaultp&gt; f64mat1;</span></div>\n<div class=\"line\"><a name=\"l00895\"></a><span class=\"lineno\">  895</span>&#160;</div>\n<div class=\"line\"><a name=\"l00898\"></a><span class=\"lineno\">  898</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">f64mat2x2</a>, aligned_f64mat2, 32);</div>\n<div class=\"line\"><a name=\"l00899\"></a><span class=\"lineno\">  899</span>&#160;</div>\n<div class=\"line\"><a name=\"l00902\"></a><span class=\"lineno\">  902</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">f64mat3x3</a>, aligned_f64mat3, 32);</div>\n<div class=\"line\"><a name=\"l00903\"></a><span class=\"lineno\">  903</span>&#160;</div>\n<div class=\"line\"><a name=\"l00906\"></a><span class=\"lineno\">  906</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">f64mat4x4</a>, aligned_f64mat4, 32);</div>\n<div class=\"line\"><a name=\"l00907\"></a><span class=\"lineno\">  907</span>&#160;</div>\n<div class=\"line\"><a name=\"l00908\"></a><span class=\"lineno\">  908</span>&#160;</div>\n<div class=\"line\"><a name=\"l00911\"></a><span class=\"lineno\">  911</span>&#160;        <span class=\"comment\">//typedef f64 f64mat1x1;</span></div>\n<div class=\"line\"><a name=\"l00912\"></a><span class=\"lineno\">  912</span>&#160;</div>\n<div class=\"line\"><a name=\"l00915\"></a><span class=\"lineno\">  915</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">f64mat2x2</a>, aligned_f64mat2x2, 32);</div>\n<div class=\"line\"><a name=\"l00916\"></a><span class=\"lineno\">  916</span>&#160;</div>\n<div class=\"line\"><a name=\"l00919\"></a><span class=\"lineno\">  919</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">f64mat2x3</a>, aligned_f64mat2x3, 32);</div>\n<div class=\"line\"><a name=\"l00920\"></a><span class=\"lineno\">  920</span>&#160;</div>\n<div class=\"line\"><a name=\"l00923\"></a><span class=\"lineno\">  923</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">f64mat2x4</a>, aligned_f64mat2x4, 32);</div>\n<div class=\"line\"><a name=\"l00924\"></a><span class=\"lineno\">  924</span>&#160;</div>\n<div class=\"line\"><a name=\"l00927\"></a><span class=\"lineno\">  927</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">f64mat3x2</a>, aligned_f64mat3x2, 32);</div>\n<div class=\"line\"><a name=\"l00928\"></a><span class=\"lineno\">  928</span>&#160;</div>\n<div class=\"line\"><a name=\"l00931\"></a><span class=\"lineno\">  931</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">f64mat3x3</a>, aligned_f64mat3x3, 32);</div>\n<div class=\"line\"><a name=\"l00932\"></a><span class=\"lineno\">  932</span>&#160;</div>\n<div class=\"line\"><a name=\"l00935\"></a><span class=\"lineno\">  935</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">f64mat3x4</a>, aligned_f64mat3x4, 32);</div>\n<div class=\"line\"><a name=\"l00936\"></a><span class=\"lineno\">  936</span>&#160;</div>\n<div class=\"line\"><a name=\"l00939\"></a><span class=\"lineno\">  939</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">f64mat4x2</a>, aligned_f64mat4x2, 32);</div>\n<div class=\"line\"><a name=\"l00940\"></a><span class=\"lineno\">  940</span>&#160;</div>\n<div class=\"line\"><a name=\"l00943\"></a><span class=\"lineno\">  943</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">f64mat4x3</a>, aligned_f64mat4x3, 32);</div>\n<div class=\"line\"><a name=\"l00944\"></a><span class=\"lineno\">  944</span>&#160;</div>\n<div class=\"line\"><a name=\"l00947\"></a><span class=\"lineno\">  947</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">f64mat4x4</a>, aligned_f64mat4x4, 32);</div>\n<div class=\"line\"><a name=\"l00948\"></a><span class=\"lineno\">  948</span>&#160;</div>\n<div class=\"line\"><a name=\"l00949\"></a><span class=\"lineno\">  949</span>&#160;<span class=\"preprocessor\">#       endif//GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l00950\"></a><span class=\"lineno\">  950</span>&#160;</div>\n<div class=\"line\"><a name=\"l00951\"></a><span class=\"lineno\">  951</span>&#160;</div>\n<div class=\"line\"><a name=\"l00953\"></a><span class=\"lineno\">  953</span>&#160;        <span class=\"comment\">// Quaternion types</span></div>\n<div class=\"line\"><a name=\"l00954\"></a><span class=\"lineno\">  954</span>&#160;</div>\n<div class=\"line\"><a name=\"l00957\"></a><span class=\"lineno\">  957</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">quat</a>, aligned_quat, 16);</div>\n<div class=\"line\"><a name=\"l00958\"></a><span class=\"lineno\">  958</span>&#160;</div>\n<div class=\"line\"><a name=\"l00961\"></a><span class=\"lineno\">  961</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">quat</a>, aligned_fquat, 16);</div>\n<div class=\"line\"><a name=\"l00962\"></a><span class=\"lineno\">  962</span>&#160;</div>\n<div class=\"line\"><a name=\"l00965\"></a><span class=\"lineno\">  965</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">dquat</a>, aligned_dquat, 32);</div>\n<div class=\"line\"><a name=\"l00966\"></a><span class=\"lineno\">  966</span>&#160;</div>\n<div class=\"line\"><a name=\"l00969\"></a><span class=\"lineno\">  969</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">f32quat</a>, aligned_f32quat, 16);</div>\n<div class=\"line\"><a name=\"l00970\"></a><span class=\"lineno\">  970</span>&#160;</div>\n<div class=\"line\"><a name=\"l00971\"></a><span class=\"lineno\">  971</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l00972\"></a><span class=\"lineno\">  972</span>&#160;</div>\n<div class=\"line\"><a name=\"l00975\"></a><span class=\"lineno\">  975</span>&#160;        <a class=\"code\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a>(<a class=\"code\" href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">f64quat</a>, aligned_f64quat, 32);</div>\n<div class=\"line\"><a name=\"l00976\"></a><span class=\"lineno\">  976</span>&#160;</div>\n<div class=\"line\"><a name=\"l00977\"></a><span class=\"lineno\">  977</span>&#160;<span class=\"preprocessor\">#       endif//GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l00978\"></a><span class=\"lineno\">  978</span>&#160;</div>\n<div class=\"line\"><a name=\"l00980\"></a><span class=\"lineno\">  980</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00981\"></a><span class=\"lineno\">  981</span>&#160;</div>\n<div class=\"line\"><a name=\"l00982\"></a><span class=\"lineno\">  982</span>&#160;<span class=\"preprocessor\">#include &quot;type_aligned.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00283_html_gab2d35cc2655f44d60958d60a1de34e81\"><div class=\"ttname\"><a href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">glm::mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, defaultp &gt; mat4x4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00098_source.html#l00015\">matrix_float4x4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0c181fdf06a309691999926b6690c969\"><div class=\"ttname\"><a href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">glm::highp_u64</a></div><div class=\"ttdeci\">uint64 highp_u64</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00133\">fwd.hpp:133</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaea5c4518e175162e306d2c2b5ef5ac79\"><div class=\"ttname\"><a href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">glm::f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, defaultp &gt; f32vec3</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00463\">fwd.hpp:463</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaaa17ef6bfa4e4f2692348b1460c8efcb\"><div class=\"ttname\"><a href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">glm::mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, defaultp &gt; mat2x2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00082_source.html#l00015\">matrix_float2x2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf4dae276fd29623950de14a6ca2586b5\"><div class=\"ttname\"><a href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">glm::mediump_uint32_t</a></div><div class=\"ttdeci\">uint32 mediump_uint32_t</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00127\">fwd.hpp:127</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga074137e3be58528d67041c223d49f398\"><div class=\"ttname\"><a href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">glm::aligned_uvec2</a></div><div class=\"ttdeci\">aligned_highp_uvec2 aligned_uvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01257\">gtc/type_aligned.hpp:1257</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa212b805736a759998e312cbdd550fae\"><div class=\"ttname\"><a href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">glm::lowp_uint64</a></div><div class=\"ttdeci\">uint64 lowp_uint64</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00136\">fwd.hpp:136</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga701f32ab5b3fb06996b41f5c0d643805\"><div class=\"ttname\"><a href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">glm::f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, defaultp &gt; f32vec1</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00461\">fwd.hpp:461</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1b09f03da7ac43055c68a349d5445083\"><div class=\"ttname\"><a href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">glm::lowp_u8</a></div><div class=\"ttdeci\">uint8 lowp_u8</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00089\">fwd.hpp:89</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8165913e068444f7842302d40ba897b9\"><div class=\"ttname\"><a href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">glm::u32</a></div><div class=\"ttdeci\">uint32 u32</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00120\">fwd.hpp:120</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga54b8a4e0f5a7203a821bf8e9c1265bcf\"><div class=\"ttname\"><a href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">glm::i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, defaultp &gt; i32vec1</div><div class=\"ttdoc\">32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00277\">fwd.hpp:277</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga746dc6da204f5622e395f492997dbf57\"><div class=\"ttname\"><a href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">glm::highp_uint16</a></div><div class=\"ttdeci\">uint16 highp_uint16</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00110\">fwd.hpp:110</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaab239fa9e35b65a67cbaa6ac082f3675\"><div class=\"ttname\"><a href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">glm::f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, defaultp &gt; f64mat3x4</div><div class=\"ttdoc\">Double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00787\">fwd.hpp:787</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae9c90a867a6026b1f6eab00456f3fb8b\"><div class=\"ttname\"><a href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">glm::i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, defaultp &gt; i16vec3</div><div class=\"ttdoc\">16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00259\">fwd.hpp:259</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf1b735b4b1145174f4e4167d13778f9b\"><div class=\"ttname\"><a href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">glm::lowp_uint32_t</a></div><div class=\"ttdeci\">uint32 lowp_uint32_t</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00126\">fwd.hpp:126</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga34dd5ec1988c443bae80f1b20a8ade5f\"><div class=\"ttname\"><a href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">glm::mediump_uint32</a></div><div class=\"ttdeci\">uint32 mediump_uint32</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00123\">fwd.hpp:123</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa38d732f5d4a7bc42a1b43b9d3c141ce\"><div class=\"ttname\"><a href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">glm::highp_uint64</a></div><div class=\"ttdeci\">uint64 highp_uint64</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00138\">fwd.hpp:138</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa6a5b461bbf5fe20982472aa51896d4b\"><div class=\"ttname\"><a href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">glm::lowp_uint32</a></div><div class=\"ttdeci\">uint32 lowp_uint32</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00122\">fwd.hpp:122</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gabe65c061834f61b4f7cb6037b19006a4\"><div class=\"ttname\"><a href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">glm::vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, defaultp &gt; vec2</div><div class=\"ttdoc\">2 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00208_source.html#l00015\">vector_float2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa4e31c3d9de067029efeb161a44b0232\"><div class=\"ttname\"><a href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">glm::i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, defaultp &gt; i64vec4</div><div class=\"ttdoc\">64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00300\">fwd.hpp:300</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1c522ca821c27b862fe51cf4024b064b\"><div class=\"ttname\"><a href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">glm::u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, defaultp &gt; u16vec3</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00361\">fwd.hpp:361</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga32794322d294e5ace7fed4a61896f270\"><div class=\"ttname\"><a href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">glm::aligned_ivec3</a></div><div class=\"ttdeci\">aligned_highp_ivec3 aligned_ivec3</div><div class=\"ttdoc\">3 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01222\">gtc/type_aligned.hpp:1222</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad06935764d78f43f9d542c784c2212ec\"><div class=\"ttname\"><a href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">glm::i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, defaultp &gt; i8vec2</div><div class=\"ttdoc\">8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00238\">fwd.hpp:238</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7cf643b66664e0cd3c48759ae66c2bd0\"><div class=\"ttname\"><a href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">glm::aligned_vec3</a></div><div class=\"ttdeci\">aligned_highp_vec3 aligned_vec3</div><div class=\"ttdoc\">3 components vector aligned in memory of single-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00946\">gtc/type_aligned.hpp:946</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga3d3e55874babd4bf93baa7bbc83ae418\"><div class=\"ttname\"><a href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">glm::uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, defaultp &gt; uvec3</div><div class=\"ttdoc\">3 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00230_source.html#l00015\">vector_uint3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga2a8d9c3046f89d854eb758adfa0811c0\"><div class=\"ttname\"><a href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">glm::aligned_uvec3</a></div><div class=\"ttdeci\">aligned_highp_uvec3 aligned_uvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01260\">gtc/type_aligned.hpp:1260</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga226a8d52b4e3f77aaa6231135e886aac\"><div class=\"ttname\"><a href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">glm::highp_int64</a></div><div class=\"ttdeci\">int64 highp_int64</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00080\">fwd.hpp:80</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b2cd8d31eb345b2d641d9261c38db1a\"><div class=\"ttname\"><a href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">glm::lowp_int16_t</a></div><div class=\"ttdeci\">int16 lowp_int16_t</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00054\">fwd.hpp:54</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3b32ca1e57a4ef91babbc3d35a34ea20\"><div class=\"ttname\"><a href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">glm::f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, defaultp &gt; f32mat4x2</div><div class=\"ttdoc\">Single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00702\">fwd.hpp:702</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1bd0e914158bf03135f8a317de6debe9\"><div class=\"ttname\"><a href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">glm::mediump_u32</a></div><div class=\"ttdeci\">uint32 mediump_u32</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00118\">fwd.hpp:118</a></div></div>\n<div class=\"ttc\" id=\"a00364_html_ga95cc03b8b475993fa50e05e38e203303\"><div class=\"ttname\"><a href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">glm::GLM_ALIGNED_TYPEDEF</a></div><div class=\"ttdeci\">GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32)</div><div class=\"ttdoc\">Double-qualifier floating-point aligned quaternion. </div></div>\n<div class=\"ttc\" id=\"a00303_html_gaa37869eea77d28419b2fb0ff70b69bf0\"><div class=\"ttname\"><a href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">glm::aligned_dvec3</a></div><div class=\"ttdeci\">aligned_highp_dvec3 aligned_dvec3</div><div class=\"ttdoc\">3 components vector aligned in memory of double-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01114\">gtc/type_aligned.hpp:1114</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga4974f46ae5a19415d91316960a53617a\"><div class=\"ttname\"><a href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">glm::aligned_dvec1</a></div><div class=\"ttdeci\">aligned_highp_dvec1 aligned_dvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01108\">gtc/type_aligned.hpp:1108</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gad0d784d8eee201aca362484d2daee46c\"><div class=\"ttname\"><a href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">glm::ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, defaultp &gt; ivec3</div><div class=\"ttdoc\">3 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00218_source.html#l00015\">vector_int3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga489b89ba93d4f7b3934df78debc52276\"><div class=\"ttname\"><a href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">glm::u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, defaultp &gt; u64vec3</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00401\">fwd.hpp:401</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf49470869e9be2c059629b250619804e\"><div class=\"ttname\"><a href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">glm::lowp_uint8</a></div><div class=\"ttdeci\">uint8 lowp_uint8</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00094\">fwd.hpp:94</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga30069d1f02b19599cbfadf98c23ac6ed\"><div class=\"ttname\"><a href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">glm::lowp_u64</a></div><div class=\"ttdeci\">uint64 lowp_u64</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00131\">fwd.hpp:131</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6fbd69cbdaa44345bff923a2cf63de7e\"><div class=\"ttname\"><a href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">glm::mediump_int8</a></div><div class=\"ttdeci\">int8 mediump_int8</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00037\">fwd.hpp:37</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf645b1a60203b39c0207baff5e3d8c3c\"><div class=\"ttname\"><a href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">glm::lowp_int64</a></div><div class=\"ttdeci\">int64 lowp_int64</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00078\">fwd.hpp:78</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaef3824ed4fe435a019c5b9dddf53fec5\"><div class=\"ttname\"><a href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">glm::u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, defaultp &gt; u64vec2</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00400\">fwd.hpp:400</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab90ade28222f8b861d5ceaf81a3a7f5d\"><div class=\"ttname\"><a href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">glm::f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, defaultp &gt; f32mat3x4</div><div class=\"ttdoc\">Single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00707\">fwd.hpp:707</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf3f312156984c365e9f65620354da70b\"><div class=\"ttname\"><a href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">glm::u64</a></div><div class=\"ttdeci\">uint64 u64</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00134\">fwd.hpp:134</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gade502df1ce14f837fae7f60a03ddb9b0\"><div class=\"ttname\"><a href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">glm::f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, defaultp &gt; f64vec1</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00501\">fwd.hpp:501</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafe730798732aa7b0647096a004db1b1c\"><div class=\"ttname\"><a href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">glm::i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, defaultp &gt; i16vec1</div><div class=\"ttdoc\">16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00257\">fwd.hpp:257</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga232fad1b0d6dcc7c16aabde98b2e2a80\"><div class=\"ttname\"><a href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">glm::float64</a></div><div class=\"ttdeci\">double float64</div><div class=\"ttdoc\">Double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00171\">fwd.hpp:171</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8c8aa45aafcc23238edb1d5aeb801774\"><div class=\"ttname\"><a href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">glm::fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, defaultp &gt; fmat4x2</div><div class=\"ttdoc\">Single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00662\">fwd.hpp:662</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga44e158af77a670ee1b58c03cda9e1619\"><div class=\"ttname\"><a href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">glm::fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, defaultp &gt; fmat3x4</div><div class=\"ttdoc\">Single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00667\">fwd.hpp:667</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf512b74c4400b68f9fdf9388b3d6aac8\"><div class=\"ttname\"><a href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">glm::f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, defaultp &gt; f32mat2x4</div><div class=\"ttdoc\">Single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00706\">fwd.hpp:706</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga550831bfc26d1e0101c1cb3d79938c06\"><div class=\"ttname\"><a href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">glm::i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, defaultp &gt; i16vec4</div><div class=\"ttdoc\">16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00260\">fwd.hpp:260</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga667b2ece2b258be898812dc2177995d1\"><div class=\"ttname\"><a href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">glm::lowp_uint8_t</a></div><div class=\"ttdeci\">uint8 lowp_uint8_t</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00098\">fwd.hpp:98</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae978599c9711ac263ba732d4ac225b0e\"><div class=\"ttname\"><a href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">glm::highp_uint32_t</a></div><div class=\"ttdeci\">uint32 highp_uint32_t</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00128\">fwd.hpp:128</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa07c86650253672a19dbfb898f3265b8\"><div class=\"ttname\"><a href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">glm::fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; fmat3x3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00664\">fwd.hpp:664</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab256cdab5eb582e426d749ae77b5b566\"><div class=\"ttname\"><a href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">glm::f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, defaultp &gt; f32mat2x3</div><div class=\"ttdoc\">Single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00703\">fwd.hpp:703</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadff3608baa4b5bd3ed28f95c1c2c345d\"><div class=\"ttname\"><a href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">glm::mediump_int16</a></div><div class=\"ttdeci\">int16 mediump_int16</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00051\">fwd.hpp:51</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9df98857be695d5a30cb30f5bfa38a80\"><div class=\"ttname\"><a href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">glm::mediump_u16</a></div><div class=\"ttdeci\">uint16 mediump_u16</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00104\">fwd.hpp:104</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2b114a2f2af0fe1dfeb569c767822940\"><div class=\"ttname\"><a href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">glm::f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, defaultp &gt; f64quat</div><div class=\"ttdoc\">Double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00815\">fwd.hpp:815</a></div></div>\n<div class=\"ttc\" id=\"a00249_html_ga1181459aa5d640a3ea43861b118f3f0b\"><div class=\"ttname\"><a href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">glm::dquat</a></div><div class=\"ttdeci\">qua&lt; double, defaultp &gt; dquat</div><div class=\"ttdoc\">Quaternion of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00128_source.html#l00035\">quaternion_double.hpp:35</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf09f3ca4b671a4a4f84505eb4cc865fd\"><div class=\"ttname\"><a href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">glm::u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, defaultp &gt; u64vec1</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00399\">fwd.hpp:399</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga322a7d7d2c2c68994dc872a33de63c61\"><div class=\"ttname\"><a href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">glm::int64_t</a></div><div class=\"ttdeci\">int64 int64_t</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00085\">fwd.hpp:85</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga5a8a5f8c47cd7d5502dd9932f83472b9\"><div class=\"ttname\"><a href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">glm::aligned_mat2</a></div><div class=\"ttdeci\">aligned_highp_mat2 aligned_mat2</div><div class=\"ttdoc\">2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00964\">gtc/type_aligned.hpp:964</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga29b349e037f0b24320b4548a143daee2\"><div class=\"ttname\"><a href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">glm::u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, defaultp &gt; u8vec1</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00339\">fwd.hpp:339</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga20779a61de2fd526a17f12fe53ec46b1\"><div class=\"ttname\"><a href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">glm::u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, defaultp &gt; u8vec4</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00342\">fwd.hpp:342</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4bf09d8838a86866b39ee6e109341645\"><div class=\"ttname\"><a href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">glm::int8_t</a></div><div class=\"ttdeci\">int8 int8_t</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00043\">fwd.hpp:43</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga96faea43ac5f875d2d3ffbf8d213e3eb\"><div class=\"ttname\"><a href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">glm::i32</a></div><div class=\"ttdeci\">int32 i32</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00062\">fwd.hpp:62</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9ec7c4c79e303c053e30729a95fb2c37\"><div class=\"ttname\"><a href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">glm::f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, defaultp &gt; f64mat2x2</div><div class=\"ttdoc\">Double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00780\">fwd.hpp:780</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4177a44206121dabc8c4ff1c0f544574\"><div class=\"ttname\"><a href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">glm::i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, defaultp &gt; i8vec4</div><div class=\"ttdoc\">8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00240\">fwd.hpp:240</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga84ed04b4e0de18c977e932d617e7c223\"><div class=\"ttname\"><a href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">glm::highp_int32</a></div><div class=\"ttdeci\">int32 highp_int32</div><div class=\"ttdoc\">High qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00066\">fwd.hpp:66</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7a6f1929464dcc680b16381a4ee5f2cf\"><div class=\"ttname\"><a href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">glm::highp_u32</a></div><div class=\"ttdeci\">uint32 highp_u32</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00119\">fwd.hpp:119</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga727675ac6b5d2fc699520e0059735e25\"><div class=\"ttname\"><a href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">glm::highp_i32</a></div><div class=\"ttdeci\">int32 highp_i32</div><div class=\"ttdoc\">High qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00061\">fwd.hpp:61</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga5abb4603dae0ce58c595e66d9123d812\"><div class=\"ttname\"><a href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">glm::ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, defaultp &gt; ivec4</div><div class=\"ttdoc\">4 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00220_source.html#l00015\">vector_int4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3945dd6515d4498cb603e65ff867ab03\"><div class=\"ttname\"><a href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">glm::u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, defaultp &gt; u64vec4</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00402\">fwd.hpp:402</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga31c6ca0e074a44007f49a9a3720b18c8\"><div class=\"ttname\"><a href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">glm::f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, defaultp &gt; f32vec4</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00464\">fwd.hpp:464</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae3ab5719fc4c1e966631dbbcba8d412a\"><div class=\"ttname\"><a href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">glm::f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, defaultp &gt; f64mat2x3</div><div class=\"ttdoc\">Double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00783\">fwd.hpp:783</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga256b12b650c3f2fb86878fd1c5db8bc3\"><div class=\"ttname\"><a href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">glm::highp_uint32</a></div><div class=\"ttdeci\">uint32 highp_uint32</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00124\">fwd.hpp:124</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2473d8bf3f4abf967c4d0e18175be6f7\"><div class=\"ttname\"><a href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">glm::f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, defaultp &gt; f64mat3x2</div><div class=\"ttdoc\">Double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00781\">fwd.hpp:781</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae627372cfd5f20dd87db490387b71195\"><div class=\"ttname\"><a href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">glm::u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, defaultp &gt; u32vec1</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00379\">fwd.hpp:379</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga916c1aed91cf91f7b41399ebe7c6e185\"><div class=\"ttname\"><a href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">glm::f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, defaultp &gt; f64mat3x3</div><div class=\"ttdoc\">Double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00784\">fwd.hpp:784</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga97432f9979e73e66567361fd01e4cffb\"><div class=\"ttname\"><a href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">glm::highp_uint8</a></div><div class=\"ttdeci\">uint8 highp_uint8</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00096\">fwd.hpp:96</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacb88796f2d08ef253d0345aff20c3aee\"><div class=\"ttname\"><a href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">glm::highp_i8</a></div><div class=\"ttdeci\">int8 highp_i8</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00033\">fwd.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacf1ded173e1e2d049c511d095b259e21\"><div class=\"ttname\"><a href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">glm::mediump_i8</a></div><div class=\"ttdeci\">int8 mediump_i8</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00032\">fwd.hpp:32</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga73c6abb280a45feeff60f9accaee91f3\"><div class=\"ttname\"><a href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">glm::highp_int64_t</a></div><div class=\"ttdeci\">int64 highp_int64_t</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00084\">fwd.hpp:84</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaee4da0e9fbd8cfa2f89cb80889719dc3\"><div class=\"ttname\"><a href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">glm::f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; f32mat4x4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00708\">fwd.hpp:708</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa4947bc8b47c72fceea9bda730ecf603\"><div class=\"ttname\"><a href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">glm::float32_t</a></div><div class=\"ttdeci\">float float32_t</div><div class=\"ttdoc\">Default 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00160\">fwd.hpp:160</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga04100c76f7d55a0dd0983ccf05142bff\"><div class=\"ttname\"><a href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">glm::f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; f32mat2x2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00700\">fwd.hpp:700</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2171d9dc1fefb1c82e2817f45b622eac\"><div class=\"ttname\"><a href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">glm::uint32_t</a></div><div class=\"ttdeci\">uint32 uint32_t</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00129\">fwd.hpp:129</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga76298aed82a439063c3d55980c84aa0b\"><div class=\"ttname\"><a href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">glm::aligned_ivec1</a></div><div class=\"ttdeci\">aligned_highp_ivec1 aligned_ivec1</div><div class=\"ttdoc\">1 component vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01216\">gtc/type_aligned.hpp:1216</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gac215a35481a6597d1bf622a382e9d6e2\"><div class=\"ttname\"><a href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, defaultp &gt; vec4</div><div class=\"ttdoc\">4 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00212_source.html#l00015\">vector_float4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaecc7082561fc9028b844b6cf3d305d36\"><div class=\"ttname\"><a href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">glm::u8</a></div><div class=\"ttdeci\">uint8 u8</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00092\">fwd.hpp:92</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaacdc525d6f7bddb3ae95d5c311bd06a1\"><div class=\"ttname\"><a href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">glm::float32</a></div><div class=\"ttdeci\">float float32</div><div class=\"ttdoc\">Single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00155\">fwd.hpp:155</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga713c796c54875cf4092d42ff9d9096b0\"><div class=\"ttname\"><a href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">glm::fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, defaultp &gt; fvec4</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00444\">fwd.hpp:444</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga08c05ba8ffb19f5d14ab584e1e9e9ee5\"><div class=\"ttname\"><a href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">glm::u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, defaultp &gt; u16vec1</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00359\">fwd.hpp:359</a></div></div>\n<div class=\"ttc\" id=\"a00268_html_ga6221af17edc2d4477a4583d2cd53e569\"><div class=\"ttname\"><a href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">glm::dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, defaultp &gt; dvec1</div><div class=\"ttdoc\">1 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00198_source.html#l00028\">vector_double1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7e80d927ff0a3861ced68dfff8a4020b\"><div class=\"ttname\"><a href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">glm::i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, defaultp &gt; i8vec1</div><div class=\"ttdoc\">8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00237\">fwd.hpp:237</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b44026374982dcd1e52d22bac99247e\"><div class=\"ttname\"><a href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">glm::i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, defaultp &gt; i32vec2</div><div class=\"ttdoc\">32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00278\">fwd.hpp:278</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac4e00a26a2adb5f2c0a7096810df29e5\"><div class=\"ttname\"><a href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">glm::highp_uint8_t</a></div><div class=\"ttdeci\">uint8 highp_uint8_t</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00100\">fwd.hpp:100</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga30652709815ad9404272a31957daa59e\"><div class=\"ttname\"><a href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">glm::mediump_uint64</a></div><div class=\"ttdeci\">uint64 mediump_uint64</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00137\">fwd.hpp:137</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2c71c8bd9e2fe7d2e93ca250d8b6157f\"><div class=\"ttname\"><a href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">glm::highp_int32_t</a></div><div class=\"ttdeci\">int32 highp_int32_t</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00070\">fwd.hpp:70</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa7a1ddca75c5f629173bf4772db7a635\"><div class=\"ttname\"><a href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">glm::f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, defaultp &gt; f64vec3</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00503\">fwd.hpp:503</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac87278e0c702ba8afff76316d4eeb769\"><div class=\"ttname\"><a href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">glm::f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, defaultp &gt; f64mat2x4</div><div class=\"ttdoc\">Double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00786\">fwd.hpp:786</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gab91887d7565059dac640e3a1921c914a\"><div class=\"ttname\"><a href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">glm::mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, defaultp &gt; mat3x3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00090_source.html#l00015\">matrix_float3x3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2af9490085ae3bdf36a544e9dd073610\"><div class=\"ttname\"><a href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">glm::mediump_u64</a></div><div class=\"ttdeci\">uint64 mediump_u64</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00132\">fwd.hpp:132</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga2f6d9ec3ae14813ade37d6aee3715fdb\"><div class=\"ttname\"><a href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">glm::uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, defaultp &gt; uvec2</div><div class=\"ttdoc\">2 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00228_source.html#l00015\">vector_uint2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga504ce1631cb2ac02fcf1d44d8c2aa126\"><div class=\"ttname\"><a href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">glm::lowp_u16</a></div><div class=\"ttdeci\">uint16 lowp_u16</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00103\">fwd.hpp:103</a></div></div>\n<div class=\"ttc\" id=\"a00276_html_gac3bdd96183d23876c58a1424585fefe7\"><div class=\"ttname\"><a href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">glm::uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, defaultp &gt; uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00226_source.html#l00028\">vector_uint1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0336abc2604dd2c20c30e036454b64f8\"><div class=\"ttname\"><a href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">glm::highp_i16</a></div><div class=\"ttdeci\">int16 highp_i16</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00047\">fwd.hpp:47</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad0549c902a96a7164e4ac858d5f39dbf\"><div class=\"ttname\"><a href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">glm::highp_int8</a></div><div class=\"ttdeci\">int8 highp_int8</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00038\">fwd.hpp:38</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae52e2b7077a9ff928a06ab5ce600b81e\"><div class=\"ttname\"><a href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">glm::f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, defaultp &gt; f64mat4x4</div><div class=\"ttdoc\">Double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00788\">fwd.hpp:788</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4295048a78bdf46b8a7de77ec665b497\"><div class=\"ttname\"><a href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">glm::fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, defaultp &gt; fmat4x3</div><div class=\"ttdoc\">Single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00665\">fwd.hpp:665</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga89930533646b30d021759298aa6bf04a\"><div class=\"ttname\"><a href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">glm::fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, defaultp &gt; fvec3</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00443\">fwd.hpp:443</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2996630ba7b10535af8e065cf326f761\"><div class=\"ttname\"><a href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">glm::i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, defaultp &gt; i16vec2</div><div class=\"ttdoc\">16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00258\">fwd.hpp:258</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga239b96198771b7add8eea7e6b59840c0\"><div class=\"ttname\"><a href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">glm::f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, defaultp &gt; f32mat4x3</div><div class=\"ttdoc\">Single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00705\">fwd.hpp:705</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga392b673fd10847bfb78fb808c6cf8ff7\"><div class=\"ttname\"><a href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">glm::lowp_i16</a></div><div class=\"ttdeci\">int16 lowp_i16</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00045\">fwd.hpp:45</a></div></div>\n<div class=\"ttc\" id=\"a00270_html_gadfc071d934d8dae7955a1d530a3cf656\"><div class=\"ttname\"><a href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">glm::vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, defaultp &gt; vec1</div><div class=\"ttdoc\">1 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00206_source.html#l00028\">vector_float1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gab0fddcf95dd51cbcbf624ea7c40dfeb8\"><div class=\"ttname\"><a href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">glm::aligned_mat4</a></div><div class=\"ttdeci\">aligned_highp_mat4 aligned_mat4</div><div class=\"ttdoc\">4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00970\">gtc/type_aligned.hpp:970</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga728366fef72cd96f0a5fa6429f05469e\"><div class=\"ttname\"><a href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">glm::float64_t</a></div><div class=\"ttdeci\">double float64_t</div><div class=\"ttdoc\">Default 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00176\">fwd.hpp:176</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga698e36b01167fc0f037889334dce8def\"><div class=\"ttname\"><a href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">glm::lowp_int16</a></div><div class=\"ttdeci\">int16 lowp_int16</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00050\">fwd.hpp:50</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga1ff8ed402c93d280ff0597c1c5e7c548\"><div class=\"ttname\"><a href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">glm::aligned_uvec1</a></div><div class=\"ttdeci\">aligned_highp_uvec1 aligned_uvec1</div><div class=\"ttdoc\">1 component vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01254\">gtc/type_aligned.hpp:1254</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaebf341fc4a5be233f7dde962c2e33847\"><div class=\"ttname\"><a href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">glm::lowp_int64_t</a></div><div class=\"ttdeci\">int64 lowp_int64_t</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00082\">fwd.hpp:82</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga91f91f411080c37730856ff5887f5bcf\"><div class=\"ttname\"><a href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">glm::uint16_t</a></div><div class=\"ttdeci\">uint16 uint16_t</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00115\">fwd.hpp:115</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga05e6d4c908965d04191c2070a8d0a65e\"><div class=\"ttname\"><a href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">glm::aligned_vec1</a></div><div class=\"ttdeci\">aligned_highp_vec1 aligned_vec1</div><div class=\"ttdoc\">1 component vector aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00940\">gtc/type_aligned.hpp:940</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga864aabca5f3296e176e0c3ed9cc16b02\"><div class=\"ttname\"><a href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">glm::lowp_int32</a></div><div class=\"ttdeci\">int32 lowp_int32</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00064\">fwd.hpp:64</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28d97808322d3c92186e4a0c067d7e8e\"><div class=\"ttname\"><a href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">glm::uint8_t</a></div><div class=\"ttdeci\">uint8 uint8_t</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00101\">fwd.hpp:101</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga26fc7ced1ad7ca5024f1c973c8dc9180\"><div class=\"ttname\"><a href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">glm::mediump_int32_t</a></div><div class=\"ttdeci\">int32 mediump_int32_t</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00069\">fwd.hpp:69</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga65261fa8a21045c8646ddff114a56174\"><div class=\"ttname\"><a href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">glm::f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; f32mat3x3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00704\">fwd.hpp:704</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd1259f3a9e8d2a9df5be2d74322ef9c\"><div class=\"ttname\"><a href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">glm::highp_u8</a></div><div class=\"ttdeci\">uint8 highp_u8</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00091\">fwd.hpp:91</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1fa92a233b9110861cdbc8c2ccf0b5a3\"><div class=\"ttname\"><a href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">glm::mediump_uint8</a></div><div class=\"ttdeci\">uint8 mediump_uint8</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00095\">fwd.hpp:95</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabf842c45eea186170c267a328e3f3b7d\"><div class=\"ttname\"><a href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">glm::aligned_uvec4</a></div><div class=\"ttdeci\">aligned_highp_uvec4 aligned_uvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01263\">gtc/type_aligned.hpp:1263</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac3bc41bcac61d1ba8f02a6f68ce23f64\"><div class=\"ttname\"><a href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">glm::mediump_int64_t</a></div><div class=\"ttdeci\">int64 mediump_int64_t</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00083\">fwd.hpp:83</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga7f79eae5927c9033d84617e49f6f34e4\"><div class=\"ttname\"><a href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">glm::aligned_ivec4</a></div><div class=\"ttdeci\">aligned_highp_ivec4 aligned_ivec4</div><div class=\"ttdoc\">4 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01225\">gtc/type_aligned.hpp:1225</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1085c50dd8fbeb5e7e609b1c127492a5\"><div class=\"ttname\"><a href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">glm::highp_int8_t</a></div><div class=\"ttdeci\">int8 highp_int8_t</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00042\">fwd.hpp:42</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1320a08e14fdff3821241eefab6947e9\"><div class=\"ttname\"><a href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">glm::f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, defaultp &gt; f32mat3x2</div><div class=\"ttdoc\">Single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00701\">fwd.hpp:701</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga866a05905c49912309ed1fa5f5980e61\"><div class=\"ttname\"><a href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">glm::i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, defaultp &gt; i32vec4</div><div class=\"ttdoc\">32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00280\">fwd.hpp:280</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae267358ff2a41d156d97f5762630235a\"><div class=\"ttname\"><a href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">glm::u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, defaultp &gt; u32vec3</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00381\">fwd.hpp:381</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga518b8d948a6b4ddb72f84d5c3b7b6611\"><div class=\"ttname\"><a href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, defaultp &gt; u8vec2</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00340\">fwd.hpp:340</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62a17cddeb4dffb4e18fe3aea23f051a\"><div class=\"ttname\"><a href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">glm::mediump_i16</a></div><div class=\"ttdeci\">int16 mediump_i16</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00046\">fwd.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5a08d36cf7917cd19d081a603d0eae3e\"><div class=\"ttname\"><a href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">glm::i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, defaultp &gt; i8vec3</div><div class=\"ttdoc\">8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00239\">fwd.hpp:239</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga0682462f8096a226773e20fac993cde5\"><div class=\"ttname\"><a href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">glm::aligned_vec2</a></div><div class=\"ttdeci\">aligned_highp_vec2 aligned_vec2</div><div class=\"ttdoc\">2 components vector aligned in memory of single-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00943\">gtc/type_aligned.hpp:943</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga0db98d836c5549d31cf64ecd043b7af7\"><div class=\"ttname\"><a href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">glm::mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, float, defaultp &gt; mat4</div><div class=\"ttdoc\">4 columns of 4 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00098_source.html#l00020\">matrix_float4x4.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gabb04f459d81d753d278b2072e2375e8e\"><div class=\"ttname\"><a href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">glm::aligned_mat2x2</a></div><div class=\"ttdeci\">aligned_highp_mat2x2 aligned_mat2x2</div><div class=\"ttdoc\">2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00982\">gtc/type_aligned.hpp:982</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3963b1050fc65a383ee28e3f827b6e3e\"><div class=\"ttname\"><a href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">glm::mediump_uint16_t</a></div><div class=\"ttdeci\">uint16 mediump_uint16_t</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00113\">fwd.hpp:113</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7c5706f6bbe5282e5598acf7e7b377e2\"><div class=\"ttname\"><a href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">glm::u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, defaultp &gt; u8vec3</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00341\">fwd.hpp:341</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7b968f2b86a0442a89c7359171e1d866\"><div class=\"ttname\"><a href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">glm::mediump_int64</a></div><div class=\"ttdeci\">int64 mediump_int64</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00079\">fwd.hpp:79</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3999d3e7ff22025c16ddb601e14dfdee\"><div class=\"ttname\"><a href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">glm::uint64_t</a></div><div class=\"ttdeci\">uint64 uint64_t</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00143\">fwd.hpp:143</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7f526b5cccef126a2ebcf9bdd890394e\"><div class=\"ttname\"><a href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">glm::i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, defaultp &gt; i32vec3</div><div class=\"ttdoc\">32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00279\">fwd.hpp:279</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga91c4815f93177eb423362fd296a87e9f\"><div class=\"ttname\"><a href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">glm::lowp_uint16_t</a></div><div class=\"ttdeci\">uint16 lowp_uint16_t</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00112\">fwd.hpp:112</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga8b09c71aaac7da7867ae58377fe219a8\"><div class=\"ttname\"><a href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">glm::dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, defaultp &gt; dvec2</div><div class=\"ttdoc\">2 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00200_source.html#l00015\">vector_double2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad68bfd9f881856fc863a6ebca0b67f78\"><div class=\"ttname\"><a href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">glm::lowp_uint16</a></div><div class=\"ttdeci\">uint16 lowp_uint16</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00108\">fwd.hpp:108</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga66e92e57260bdb910609b9a56bf83e97\"><div class=\"ttname\"><a href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">glm::f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, defaultp &gt; f64vec4</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00504\">fwd.hpp:504</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7ff73a45cea9613ebf1a9fad0b9f82ac\"><div class=\"ttname\"><a href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">glm::lowp_i32</a></div><div class=\"ttdeci\">int32 lowp_i32</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00059\">fwd.hpp:59</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga9c3019b13faf179e4ad3626ea66df334\"><div class=\"ttname\"><a href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">glm::vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, defaultp &gt; vec3</div><div class=\"ttdoc\">3 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00210_source.html#l00015\">vector_float3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3ebcb1f6d8d8387253de8bccb058d77f\"><div class=\"ttname\"><a href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">glm::mediump_i64</a></div><div class=\"ttdeci\">int64 mediump_i64</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00074\">fwd.hpp:74</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga24273aa02abaecaab7f160bac437a339\"><div class=\"ttname\"><a href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">glm::fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, defaultp &gt; fvec2</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00442\">fwd.hpp:442</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gae4f38fd2c86cee6940986197777b3ca4\"><div class=\"ttname\"><a href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">glm::aligned_ivec2</a></div><div class=\"ttdeci\">aligned_highp_ivec2 aligned_ivec2</div><div class=\"ttdoc\">2 components vector aligned in memory of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01219\">gtc/type_aligned.hpp:1219</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae8f5e3e964ca2ae240adc2c0d74adede\"><div class=\"ttname\"><a href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">glm::int16_t</a></div><div class=\"ttdeci\">int16 int16_t</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00057\">fwd.hpp:57</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac25db6d2b1e2a0f351b77ba3409ac4cd\"><div class=\"ttname\"><a href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">glm::highp_i64</a></div><div class=\"ttdeci\">int64 highp_i64</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00075\">fwd.hpp:75</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga042ef09ff2f0cb24a36f541bcb3a3710\"><div class=\"ttname\"><a href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">glm::int32_t</a></div><div class=\"ttdeci\">int32 int32_t</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00071\">fwd.hpp:71</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadc4e1594f9555d919131ee02b17822a2\"><div class=\"ttname\"><a href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">glm::f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, defaultp &gt; f64vec2</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00502\">fwd.hpp:502</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_gaa57e96bb337867329d5f43bcc27c1095\"><div class=\"ttname\"><a href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">glm::uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, defaultp &gt; uvec4</div><div class=\"ttdoc\">4 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00232_source.html#l00015\">vector_uint4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8dd3a3281ae5c970ffe0c41d538aa153\"><div class=\"ttname\"><a href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">glm::lowp_uint64_t</a></div><div class=\"ttdeci\">uint64 lowp_uint64_t</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00140\">fwd.hpp:140</a></div></div>\n<div class=\"ttc\" id=\"a00263_html_gab630f76c26b50298187f7889104d4b9c\"><div class=\"ttname\"><a href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">glm::uint64</a></div><div class=\"ttdeci\">detail::uint64 uint64</div><div class=\"ttdoc\">64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00151_source.html#l00067\">scalar_uint_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5fde0fa4a3852a9dd5d637a92ee74718\"><div class=\"ttname\"><a href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">glm::highp_int16</a></div><div class=\"ttdeci\">int16 highp_int16</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00052\">fwd.hpp:52</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8b8fb86973a0b768c5bd802c92fac1a1\"><div class=\"ttname\"><a href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\">glm::aligned_mat4x4</a></div><div class=\"ttdeci\">aligned_highp_mat4x4 aligned_mat4x4</div><div class=\"ttdoc\">4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01006\">gtc/type_aligned.hpp:1006</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga681381f19f11c9e5ee45cda2c56937ff\"><div class=\"ttname\"><a href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">glm::fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, defaultp &gt; fmat2x4</div><div class=\"ttdoc\">Single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00666\">fwd.hpp:666</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf5e94bf2a20af7601787c154751dc2e1\"><div class=\"ttname\"><a href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">glm::mediump_i32</a></div><div class=\"ttdeci\">int32 mediump_i32</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00060\">fwd.hpp:60</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga8a9f0a4795ccc442fa9901845026f9f5\"><div class=\"ttname\"><a href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">glm::aligned_dvec4</a></div><div class=\"ttdeci\">aligned_highp_dvec4 aligned_dvec4</div><div class=\"ttdoc\">4 components vector aligned in memory of double-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01117\">gtc/type_aligned.hpp:1117</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa46172d7dc1c7ffe3e78107ff88adf08\"><div class=\"ttname\"><a href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">glm::highp_uint64_t</a></div><div class=\"ttdeci\">uint64 highp_uint64_t</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00142\">fwd.hpp:142</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga31cef34e4cd04840c54741ff2f7005f0\"><div class=\"ttname\"><a href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">glm::u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, defaultp &gt; u32vec4</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00382\">fwd.hpp:382</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga38e674196ba411d642be40c47bf33939\"><div class=\"ttname\"><a href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">glm::f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, defaultp &gt; f32quat</div><div class=\"ttdoc\">Single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00805\">fwd.hpp:805</a></div></div>\n<div class=\"ttc\" id=\"a00260_html_gaff5189f97f9e842d9636a0f240001b2e\"><div class=\"ttname\"><a href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">glm::int64</a></div><div class=\"ttdeci\">detail::int64 int64</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00146_source.html#l00067\">scalar_int_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab7daf79d6bc06a68bea1c6f5e11b5512\"><div class=\"ttname\"><a href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">glm::f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, defaultp &gt; f64mat4x2</div><div class=\"ttdoc\">Double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00782\">fwd.hpp:782</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga55a2d2a8eb09b5633668257eb3cad453\"><div class=\"ttname\"><a href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">glm::fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, defaultp &gt; fmat2x3</div><div class=\"ttdoc\">Single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00663\">fwd.hpp:663</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa2d7acc0adb536fab71fe261232a40ff\"><div class=\"ttname\"><a href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">glm::u16</a></div><div class=\"ttdeci\">uint16 u16</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00106\">fwd.hpp:106</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga354736e0c645099cd44c42fb2f87c2b8\"><div class=\"ttname\"><a href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">glm::lowp_i64</a></div><div class=\"ttdeci\">int64 lowp_i64</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00073\">fwd.hpp:73</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga6f9269106d91b2d2b91bcf27cd5f5560\"><div class=\"ttname\"><a href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">glm::ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, defaultp &gt; ivec2</div><div class=\"ttdoc\">2 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00216_source.html#l00015\">vector_int2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6d7b3789ecb932c26430009478cac7ae\"><div class=\"ttname\"><a href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">glm::mediump_int8_t</a></div><div class=\"ttdeci\">int8 mediump_int8_t</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00041\">fwd.hpp:41</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacaea06d0a79ef3172e887a7a6ba434ff\"><div class=\"ttname\"><a href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">glm::highp_int16_t</a></div><div class=\"ttdeci\">int16 highp_int16_t</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00056\">fwd.hpp:56</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2b65767f8b5aed1bd1cf86c541662b50\"><div class=\"ttname\"><a href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">glm::i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, defaultp &gt; i64vec1</div><div class=\"ttdoc\">64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00297\">fwd.hpp:297</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga85d89e83cb8137e1be1446de8c3b643a\"><div class=\"ttname\"><a href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">glm::aligned_vec4</a></div><div class=\"ttdeci\">aligned_highp_vec4 aligned_vec4</div><div class=\"ttdoc\">4 components vector aligned in memory of single-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00949\">gtc/type_aligned.hpp:949</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4f072ada9552e1e480bbb3b1acde5250\"><div class=\"ttname\"><a href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">glm::lowp_u32</a></div><div class=\"ttdeci\">uint32 lowp_u32</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00117\">fwd.hpp:117</a></div></div>\n<div class=\"ttc\" id=\"a00272_html_gaedd0562c2e77714929d7723a7e2e0dba\"><div class=\"ttname\"><a href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">glm::ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, defaultp &gt; ivec1</div><div class=\"ttdoc\">1 component vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00214_source.html#l00028\">vector_int1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8e62c883d13f47015f3b70ed88751369\"><div class=\"ttname\"><a href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">glm::highp_u16</a></div><div class=\"ttdeci\">uint16 highp_u16</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00105\">fwd.hpp:105</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga98b9ed43cf8c5cf1d354b23c7df9119f\"><div class=\"ttname\"><a href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">glm::fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, defaultp &gt; fvec1</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00441\">fwd.hpp:441</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0350631d35ff800e6133ac6243b13cbc\"><div class=\"ttname\"><a href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">glm::lowp_int32_t</a></div><div class=\"ttdeci\">int32 lowp_int32_t</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00068\">fwd.hpp:68</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5d6c70e080409a76a257dc55bd8ea2c8\"><div class=\"ttname\"><a href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">glm::f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, defaultp &gt; f32vec2</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00462\">fwd.hpp:462</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3350c93c3275298f940a42875388e4b4\"><div class=\"ttname\"><a href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">glm::fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; fmat2x2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00660\">fwd.hpp:660</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga760bcf26fdb23a2c3ecad3c928a19ae6\"><div class=\"ttname\"><a href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">glm::lowp_int8</a></div><div class=\"ttdeci\">int8 lowp_int8</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00036\">fwd.hpp:36</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga5b83ae3d0fdec519c038e4d2cf967cf0\"><div class=\"ttname\"><a href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">glm::dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, defaultp &gt; dvec3</div><div class=\"ttdoc\">3 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00202_source.html#l00015\">vector_double3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga119c41d73fe9977358174eb3ac1035a3\"><div class=\"ttname\"><a href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">glm::lowp_int8_t</a></div><div class=\"ttdeci\">int8 lowp_int8_t</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00040\">fwd.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_gadb065dbe5c11271fef8cf2ea8608f187\"><div class=\"ttname\"><a href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">glm::aligned_mat3x3</a></div><div class=\"ttdeci\">aligned_highp_mat3x3 aligned_mat3x3</div><div class=\"ttdoc\">3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00994\">gtc/type_aligned.hpp:994</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3e2e66ffbe341a80bc005ba2b9552110\"><div class=\"ttname\"><a href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">glm::f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, defaultp &gt; f64mat4x3</div><div class=\"ttdoc\">Double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00785\">fwd.hpp:785</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadb997e409103d4da18abd837e636a496\"><div class=\"ttname\"><a href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">glm::i64</a></div><div class=\"ttdeci\">int64 i64</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00076\">fwd.hpp:76</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a266e46ee218d0c680f12b35c500cc0\"><div class=\"ttname\"><a href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, defaultp &gt; u32vec2</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00380\">fwd.hpp:380</a></div></div>\n<div class=\"ttc\" id=\"a00252_html_gab0b441adb4509bc58d2946c2239a8942\"><div class=\"ttname\"><a href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">glm::quat</a></div><div class=\"ttdeci\">qua&lt; float, defaultp &gt; quat</div><div class=\"ttdoc\">Quaternion of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00131_source.html#l00035\">quaternion_float.hpp:35</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5244cef85d6e870e240c76428a262ae8\"><div class=\"ttname\"><a href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">glm::mediump_int32</a></div><div class=\"ttdeci\">int32 mediump_int32</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00065\">fwd.hpp:65</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga48310188e1d0c616bf8d78c92447523b\"><div class=\"ttname\"><a href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">glm::i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, defaultp &gt; i64vec2</div><div class=\"ttdoc\">64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00298\">fwd.hpp:298</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3ab5fe184343d394fb6c2723c3ee3699\"><div class=\"ttname\"><a href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">glm::i16</a></div><div class=\"ttdeci\">int16 i16</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00048\">fwd.hpp:48</a></div></div>\n<div class=\"ttc\" id=\"a00281_html_ga57debab5d98ce618f7b2a97fe26eb3ac\"><div class=\"ttname\"><a href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">glm::dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, defaultp &gt; dvec4</div><div class=\"ttdoc\">4 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00204_source.html#l00015\">vector_double4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad01cc6479bde1fd1870f13d3ed9530b3\"><div class=\"ttname\"><a href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">glm::fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; fmat4x4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00668\">fwd.hpp:668</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_ga8dd59e7fc6913ac5d61b86553e9148ba\"><div class=\"ttname\"><a href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">glm::mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, float, defaultp &gt; mat2</div><div class=\"ttdoc\">2 columns of 2 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00082_source.html#l00020\">matrix_float2x2.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga43a92a24ca863e0e0f3b65834b3cf714\"><div class=\"ttname\"><a href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">glm::aligned_mat3</a></div><div class=\"ttdeci\">aligned_highp_mat3 aligned_mat3</div><div class=\"ttdoc\">3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l00967\">gtc/type_aligned.hpp:967</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6af54d70d9beb0a7ef992a879e86b04f\"><div class=\"ttname\"><a href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">glm::fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, defaultp &gt; fmat3x2</div><div class=\"ttdoc\">Single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00661\">fwd.hpp:661</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga529496d75775fb656a07993ea9af2450\"><div class=\"ttname\"><a href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">glm::u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, defaultp &gt; u16vec4</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00362\">fwd.hpp:362</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a78447eb9d66a114b193f4a25899c16\"><div class=\"ttname\"><a href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, defaultp &gt; u16vec2</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00360\">fwd.hpp:360</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad1213a22bbb9e4107f07eaa4956f8281\"><div class=\"ttname\"><a href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">glm::mediump_u8</a></div><div class=\"ttdeci\">uint8 mediump_u8</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00090\">fwd.hpp:90</a></div></div>\n<div class=\"ttc\" id=\"a00303_html_ga18d859f87122b2b3b2992ffe86dbebc0\"><div class=\"ttname\"><a href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">glm::aligned_dvec2</a></div><div class=\"ttdeci\">aligned_highp_dvec2 aligned_dvec2</div><div class=\"ttdoc\">2 components vector aligned in memory of double-precision floating-point numbers. ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00161_source.html#l01111\">gtc/type_aligned.hpp:1111</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga80e72fe94c88498537e8158ba7591c54\"><div class=\"ttname\"><a href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">glm::mediump_int16_t</a></div><div class=\"ttdeci\">int16 mediump_int16_t</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00055\">fwd.hpp:55</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga552a6bde5e75984efb0f863278da2e54\"><div class=\"ttname\"><a href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">glm::lowp_i8</a></div><div class=\"ttdeci\">int8 lowp_i8</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00031\">fwd.hpp:31</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga667948cfe6fb3d6606c750729ec49f77\"><div class=\"ttname\"><a href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">glm::i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, defaultp &gt; i64vec3</div><div class=\"ttdoc\">64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00299\">fwd.hpp:299</a></div></div>\n<div class=\"ttc\" id=\"a00283_html_gaefb0fc7a4960b782c18708bb6b655262\"><div class=\"ttname\"><a href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">glm::mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, float, defaultp &gt; mat3</div><div class=\"ttdoc\">3 columns of 3 components matrix of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00090_source.html#l00020\">matrix_float3x3.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacf54c3330ef60aa3d16cb676c7bcb8c7\"><div class=\"ttname\"><a href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">glm::highp_uint16_t</a></div><div class=\"ttdeci\">uint16 highp_uint16_t</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00114\">fwd.hpp:114</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga302ec977b0c0c3ea245b6c9275495355\"><div class=\"ttname\"><a href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">glm::i8</a></div><div class=\"ttdeci\">int8 i8</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00034\">fwd.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9b170dd4a8f38448a2dc93987c7875e9\"><div class=\"ttname\"><a href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">glm::mediump_uint64_t</a></div><div class=\"ttdeci\">uint64 mediump_uint64_t</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00141\">fwd.hpp:141</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadfe65c78231039e90507770db50c98c7\"><div class=\"ttname\"><a href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">glm::mediump_uint8_t</a></div><div class=\"ttdeci\">uint8 mediump_uint8_t</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00099\">fwd.hpp:99</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2885a6c89916911e418c06bb76b9bdbb\"><div class=\"ttname\"><a href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">glm::mediump_uint16</a></div><div class=\"ttdeci\">uint16 mediump_uint16</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00109\">fwd.hpp:109</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00163_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_float.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_float.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#include &quot;setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;</div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER == GLM_COMPILER_VC12</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#       pragma warning(push)</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#       pragma warning(disable: 4512) // assignment operator could not be generated</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">union </span>float_t</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        {};</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;        <span class=\"comment\">// https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        <span class=\"keyword\">template</span> &lt;&gt;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;        <span class=\"keyword\">union </span>float_t&lt;float&gt;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">int</span> int_type;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span> float_type;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;                GLM_CONSTEXPR float_t(float_type Num = 0.0f) : f(Num) {}</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                GLM_CONSTEXPR float_t&amp; operator=(float_t <span class=\"keyword\">const</span>&amp; x)</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                        f = x.f;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                        <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                <span class=\"comment\">// Portable extraction of components.</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;                GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> negative()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> i &lt; 0; }</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                GLM_CONSTEXPR int_type mantissa()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> i &amp; ((1 &lt;&lt; 23) - 1); }</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                GLM_CONSTEXPR int_type exponent()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> (i &gt;&gt; 23) &amp; ((1 &lt;&lt; 8) - 1); }</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                int_type i;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                float_type f;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"keyword\">template</span> &lt;&gt;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">union </span>float_t&lt;double&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> int_type;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span> float_type;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                GLM_CONSTEXPR float_t(float_type Num = static_cast&lt;float_type&gt;(0)) : f(Num) {}</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                GLM_CONSTEXPR float_t&amp; operator=(float_t <span class=\"keyword\">const</span>&amp; x)</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                {</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                        f = x.f;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                        <span class=\"keywordflow\">return</span> *<span class=\"keyword\">this</span>;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                }</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                <span class=\"comment\">// Portable extraction of components.</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> negative()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> i &lt; 0; }</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                GLM_CONSTEXPR int_type mantissa()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> i &amp; ((int_type(1) &lt;&lt; 52) - 1); }</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                GLM_CONSTEXPR int_type exponent()<span class=\"keyword\"> const </span>{ <span class=\"keywordflow\">return</span> (i &gt;&gt; 52) &amp; ((int_type(1) &lt;&lt; 11) - 1); }</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                int_type i;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                float_type f;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;<span class=\"preprocessor\">#if GLM_COMPILER == GLM_COMPILER_VC12</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"preprocessor\">#       pragma warning(pop)</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"ttc\" id=\"a00260_html_gaff5189f97f9e842d9636a0f240001b2e\"><div class=\"ttname\"><a href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">glm::int64</a></div><div class=\"ttdeci\">detail::int64 int64</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00146_source.html#l00067\">scalar_int_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00164_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_half.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_half.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00002\"></a><span class=\"lineno\">    2</span>&#160;</div>\n<div class=\"line\"><a name=\"l00003\"></a><span class=\"lineno\">    3</span>&#160;<span class=\"preprocessor\">#include &quot;setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;</div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a>{</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"keyword\">namespace </span>detail</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">short</span> hdata;</div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">float</span> toFloat32(hdata value);</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;        GLM_FUNC_DECL hdata toFloat16(<span class=\"keywordtype\">float</span> <span class=\"keyword\">const</span>&amp; value);</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;}<span class=\"comment\">//namespace detail</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;type_half.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00165.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat2x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat2x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00165_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00165_source.html\">type_mat2x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00165_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat2x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat2x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00165.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00179.html\">type_vec2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;2, 2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 2, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 2, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                col_type value[2];</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>() { <span class=\"keywordflow\">return</span> 2; }</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;2, 2, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                        T const&amp; x1, T const&amp; y1,</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T const&amp; x2, T const&amp; y2);</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        col_type const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        col_type const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                template&lt;typename U, typename V, typename M, typename N&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                        U const&amp; x1, V const&amp; y1,</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                        M const&amp; x2, N const&amp; y2);</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                template&lt;typename U, typename V&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                        vec&lt;2, U, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        vec&lt;2, V, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator=(mat&lt;2, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator+=(mat&lt;2, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator-=(mat&lt;2, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator*=(mat&lt;2, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator/=(mat&lt;2, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator++ ();</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; &amp; operator-- ();</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator+(mat&lt;2, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator-(mat&lt;2, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator+(mat&lt;2, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator+(T scalar, mat&lt;2, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator+(mat&lt;2, 2, T, Q&gt; const&amp; m1, mat&lt;2, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator-(mat&lt;2, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator-(T scalar, mat&lt;2, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator-(mat&lt;2, 2, T, Q&gt; const&amp; m1, mat&lt;2, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator*(mat&lt;2, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator*(T scalar, mat&lt;2, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        GLM_FUNC_DECL typename mat&lt;2, 2, T, Q&gt;::col_type operator*(mat&lt;2, 2, T, Q&gt; const&amp; m, typename mat&lt;2, 2, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        GLM_FUNC_DECL typename mat&lt;2, 2, T, Q&gt;::row_type operator*(typename mat&lt;2, 2, T, Q&gt;::col_type const&amp; v, mat&lt;2, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator*(mat&lt;2, 2, T, Q&gt; const&amp; m1, mat&lt;2, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator*(mat&lt;2, 2, T, Q&gt; const&amp; m1, mat&lt;3, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator*(mat&lt;2, 2, T, Q&gt; const&amp; m1, mat&lt;4, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator/(mat&lt;2, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator/(T scalar, mat&lt;2, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_FUNC_DECL typename mat&lt;2, 2, T, Q&gt;::col_type operator/(mat&lt;2, 2, T, Q&gt; const&amp; m, typename mat&lt;2, 2, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        GLM_FUNC_DECL typename mat&lt;2, 2, T, Q&gt;::row_type operator/(typename mat&lt;2, 2, T, Q&gt;::col_type const&amp; v, mat&lt;2, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator/(mat&lt;2, 2, T, Q&gt; const&amp; m1, mat&lt;2, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(mat&lt;2, 2, T, Q&gt; const&amp; m1, mat&lt;2, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;2, 2, T, Q&gt; const&amp; m1, mat&lt;2, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat2x2.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"ttc\" id=\"a00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">type_vec2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00166.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat2x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat2x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00166_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00166_source.html\">type_mat2x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00166_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat2x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat2x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00166.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00179.html\">type_vec2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00180.html\">type_vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;2, 3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 3, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 2, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                col_type value[2];</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>() { <span class=\"keywordflow\">return</span> 2; }</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;2, 3, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x0, T y0, T z0,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        T x1, T y1, T z1);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        col_type const&amp; v0,</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                        col_type const&amp; v1);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                template&lt;typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                        X1 x1, Y1 y1, Z1 z1,</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                        X2 x2, Y2 y2, Z2 z2);</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                template&lt;typename U, typename V&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        vec&lt;3, U, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                        vec&lt;3, V, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator=(mat&lt;2, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator+=(mat&lt;2, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator-=(mat&lt;2, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator++ ();</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; &amp; operator-- ();</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator+(mat&lt;2, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator-(mat&lt;2, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator+(mat&lt;2, 3, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator+(mat&lt;2, 3, T, Q&gt; const&amp; m1, mat&lt;2, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator-(mat&lt;2, 3, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator-(mat&lt;2, 3, T, Q&gt; const&amp; m1, mat&lt;2, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator*(mat&lt;2, 3, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator*(T scalar, mat&lt;2, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        GLM_FUNC_DECL typename mat&lt;2, 3, T, Q&gt;::col_type operator*(mat&lt;2, 3, T, Q&gt; const&amp; m, typename mat&lt;2, 3, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_FUNC_DECL typename mat&lt;2, 3, T, Q&gt;::row_type operator*(typename mat&lt;2, 3, T, Q&gt;::col_type const&amp; v, mat&lt;2, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator*(mat&lt;2, 3, T, Q&gt; const&amp; m1, mat&lt;2, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator*(mat&lt;2, 3, T, Q&gt; const&amp; m1, mat&lt;3, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator*(mat&lt;2, 3, T, Q&gt; const&amp; m1, mat&lt;4, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator/(mat&lt;2, 3, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator/(T scalar, mat&lt;2, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(mat&lt;2, 3, T, Q&gt; const&amp; m1, mat&lt;2, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;2, 3, T, Q&gt; const&amp; m1, mat&lt;2, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat2x3.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"ttc\" id=\"a00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">type_vec2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00180_html\"><div class=\"ttname\"><a href=\"a00180.html\">type_vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00167.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat2x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat2x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00167_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00167_source.html\">type_mat2x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00167_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat2x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat2x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00167.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00179.html\">type_vec2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00181.html\">type_vec4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;2, 4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 4, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 2, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                col_type value[2];</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>() { <span class=\"keywordflow\">return</span> 2; }</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;2, 4, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x0, T y0, T z0, T w0,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        T x1, T y1, T z1, T w1);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        col_type const&amp; v0,</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                        col_type const&amp; v1);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                template&lt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                        typename X1, typename Y1, typename Z1, typename W1,</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                        typename X2, typename Y2, typename Z2, typename W2&gt;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                        X1 x1, Y1 y1, Z1 z1, W1 w1,</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                        X2 x2, Y2 y2, Z2 z2, W2 w2);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                template&lt;typename U, typename V&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                        vec&lt;4, U, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                        vec&lt;4, V, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator=(mat&lt;2, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator+=(mat&lt;2, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator-=(mat&lt;2, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator++ ();</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; &amp; operator-- ();</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator+(mat&lt;2, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator-(mat&lt;2, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator+(mat&lt;2, 4, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator+(mat&lt;2, 4, T, Q&gt; const&amp; m1, mat&lt;2, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator-(mat&lt;2, 4, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator-(mat&lt;2, 4, T, Q&gt; const&amp; m1, mat&lt;2, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator*(mat&lt;2, 4, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator*(T scalar, mat&lt;2, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        GLM_FUNC_DECL typename mat&lt;2, 4, T, Q&gt;::col_type operator*(mat&lt;2, 4, T, Q&gt; const&amp; m, typename mat&lt;2, 4, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        GLM_FUNC_DECL typename mat&lt;2, 4, T, Q&gt;::row_type operator*(typename mat&lt;2, 4, T, Q&gt;::col_type const&amp; v, mat&lt;2, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator*(mat&lt;2, 4, T, Q&gt; const&amp; m1, mat&lt;4, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator*(mat&lt;2, 4, T, Q&gt; const&amp; m1, mat&lt;2, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator*(mat&lt;2, 4, T, Q&gt; const&amp; m1, mat&lt;3, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator/(mat&lt;2, 4, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator/(T scalar, mat&lt;2, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(mat&lt;2, 4, T, Q&gt; const&amp; m1, mat&lt;2, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;2, 4, T, Q&gt; const&amp; m1, mat&lt;2, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat2x4.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"ttc\" id=\"a00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">type_vec2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00181_html\"><div class=\"ttname\"><a href=\"a00181.html\">type_vec4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00168.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat3x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat3x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00168_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00168_source.html\">type_mat3x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00168_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat3x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat3x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00168.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00179.html\">type_vec2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00180.html\">type_vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;3, 2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 2, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 3, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                col_type value[3];</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>() { <span class=\"keywordflow\">return</span> 3; }</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;3, 2, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x0, T y0,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        T x1, T y1,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        T x2, T y2);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                        col_type const&amp; v0,</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                        col_type const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                        col_type const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                template&lt;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                        typename X1, typename Y1,</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                        typename X2, typename Y2,</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                        typename X3, typename Y3&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        X1 x1, Y1 y1,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                        X2 x2, Y2 y2,</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                        X3 x3, Y3 y3);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                template&lt;typename V1, typename V2, typename V3&gt;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                        vec&lt;2, V1, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                        vec&lt;2, V2, Q&gt; const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                        vec&lt;2, V3, Q&gt; const&amp; v3);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator=(mat&lt;3, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator+=(mat&lt;3, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator-=(mat&lt;3, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator++ ();</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; &amp; operator-- ();</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator+(mat&lt;3, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator-(mat&lt;3, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator+(mat&lt;3, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator+(mat&lt;3, 2, T, Q&gt; const&amp; m1, mat&lt;3, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator-(mat&lt;3, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator-(mat&lt;3, 2, T, Q&gt; const&amp; m1, mat&lt;3, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator*(mat&lt;3, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator*(T scalar, mat&lt;3, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        GLM_FUNC_DECL typename mat&lt;3, 2, T, Q&gt;::col_type operator*(mat&lt;3, 2, T, Q&gt; const&amp; m, typename mat&lt;3, 2, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        GLM_FUNC_DECL typename mat&lt;3, 2, T, Q&gt;::row_type operator*(typename mat&lt;3, 2, T, Q&gt;::col_type const&amp; v, mat&lt;3, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator*(mat&lt;3, 2, T, Q&gt; const&amp; m1, mat&lt;2, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator*(mat&lt;3, 2, T, Q&gt; const&amp; m1, mat&lt;3, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator*(mat&lt;3, 2, T, Q&gt; const&amp; m1, mat&lt;4, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator/(mat&lt;3, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator/(T scalar, mat&lt;3, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(mat&lt;3, 2, T, Q&gt; const&amp; m1, mat&lt;3, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;3, 2, T, Q&gt; const&amp; m1, mat&lt;3, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat3x2.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"ttc\" id=\"a00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">type_vec2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00180_html\"><div class=\"ttname\"><a href=\"a00180.html\">type_vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00169.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat3x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat3x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00169_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00169_source.html\">type_mat3x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00169_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat3x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat3x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00169.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00180.html\">type_vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;3, 3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 3, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 3, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                col_type value[3];</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>() { <span class=\"keywordflow\">return</span> 3; }</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;3, 3, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                        T x0, T y0, T z0,</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x1, T y1, T z1,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        T x2, T y2, T z2);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        col_type const&amp; v0,</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                        col_type const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                        col_type const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                template&lt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                        typename X1, typename Y1, typename Z1,</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                        typename X2, typename Y2, typename Z2,</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                        typename X3, typename Y3, typename Z3&gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                        X1 x1, Y1 y1, Z1 z1,</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        X2 x2, Y2 y2, Z2 z2,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                        X3 x3, Y3 y3, Z3 z3);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                template&lt;typename V1, typename V2, typename V3&gt;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                        vec&lt;3, V1, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                        vec&lt;3, V2, Q&gt; const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                        vec&lt;3, V3, Q&gt; const&amp; v3);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator=(mat&lt;3, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator+=(mat&lt;3, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator-=(mat&lt;3, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator*=(mat&lt;3, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator/=(mat&lt;3, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator++();</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; &amp; operator--();</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator+(mat&lt;3, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator-(mat&lt;3, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator+(mat&lt;3, 3, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator+(T scalar, mat&lt;3, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator+(mat&lt;3, 3, T, Q&gt; const&amp; m1, mat&lt;3, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator-(mat&lt;3, 3, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator-(T scalar, mat&lt;3, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator-(mat&lt;3, 3, T, Q&gt; const&amp; m1, mat&lt;3, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator*(mat&lt;3, 3, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator*(T scalar, mat&lt;3, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        GLM_FUNC_DECL typename mat&lt;3, 3, T, Q&gt;::col_type operator*(mat&lt;3, 3, T, Q&gt; const&amp; m, typename mat&lt;3, 3, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        GLM_FUNC_DECL typename mat&lt;3, 3, T, Q&gt;::row_type operator*(typename mat&lt;3, 3, T, Q&gt;::col_type const&amp; v, mat&lt;3, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator*(mat&lt;3, 3, T, Q&gt; const&amp; m1, mat&lt;3, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator*(mat&lt;3, 3, T, Q&gt; const&amp; m1, mat&lt;2, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator*(mat&lt;3, 3, T, Q&gt; const&amp; m1, mat&lt;4, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator/(mat&lt;3, 3, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator/(T scalar, mat&lt;3, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        GLM_FUNC_DECL typename mat&lt;3, 3, T, Q&gt;::col_type operator/(mat&lt;3, 3, T, Q&gt; const&amp; m, typename mat&lt;3, 3, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        GLM_FUNC_DECL typename mat&lt;3, 3, T, Q&gt;::row_type operator/(typename mat&lt;3, 3, T, Q&gt;::col_type const&amp; v, mat&lt;3, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator/(mat&lt;3, 3, T, Q&gt; const&amp; m1, mat&lt;3, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator==(mat&lt;3, 3, T, Q&gt; const&amp; m1, mat&lt;3, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;3, 3, T, Q&gt; const&amp; m1, mat&lt;3, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat3x3.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00180_html\"><div class=\"ttname\"><a href=\"a00180.html\">type_vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00170.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat3x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat3x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00170_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00170_source.html\">type_mat3x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00170_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat3x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat3x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00170.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00180.html\">type_vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00181.html\">type_vec4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;3, 4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 4, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 3, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                col_type value[3];</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>() { <span class=\"keywordflow\">return</span> 3; }</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;3, 4, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x0, T y0, T z0, T w0,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        T x1, T y1, T z1, T w1,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        T x2, T y2, T z2, T w2);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                        col_type const&amp; v0,</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                        col_type const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                        col_type const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                template&lt;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                        typename X1, typename Y1, typename Z1, typename W1,</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                        typename X2, typename Y2, typename Z2, typename W2,</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                        typename X3, typename Y3, typename Z3, typename W3&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        X1 x1, Y1 y1, Z1 z1, W1 w1,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                        X2 x2, Y2 y2, Z2 z2, W2 w2,</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                        X3 x3, Y3 y3, Z3 z3, W3 w3);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                template&lt;typename V1, typename V2, typename V3&gt;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                        vec&lt;4, V1, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                        vec&lt;4, V2, Q&gt; const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                        vec&lt;4, V3, Q&gt; const&amp; v3);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator=(mat&lt;3, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator+=(mat&lt;3, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator-=(mat&lt;3, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator++();</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; &amp; operator--();</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator+(mat&lt;3, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator-(mat&lt;3, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator+(mat&lt;3, 4, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator+(mat&lt;3, 4, T, Q&gt; const&amp; m1, mat&lt;3, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator-(mat&lt;3, 4, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator-(mat&lt;3, 4, T, Q&gt; const&amp; m1, mat&lt;3, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator*(mat&lt;3, 4, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator*(T scalar, mat&lt;3, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        GLM_FUNC_DECL typename mat&lt;3, 4, T, Q&gt;::col_type operator*(mat&lt;3, 4, T, Q&gt; const&amp; m, typename mat&lt;3, 4, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        GLM_FUNC_DECL typename mat&lt;3, 4, T, Q&gt;::row_type operator*(typename mat&lt;3, 4, T, Q&gt;::col_type const&amp; v, mat&lt;3, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator*(mat&lt;3, 4, T, Q&gt; const&amp; m1,      mat&lt;4, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator*(mat&lt;3, 4, T, Q&gt; const&amp; m1, mat&lt;2, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator*(mat&lt;3, 4, T, Q&gt; const&amp; m1,      mat&lt;3, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator/(mat&lt;3, 4, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator/(T scalar, mat&lt;3, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(mat&lt;3, 4, T, Q&gt; const&amp; m1, mat&lt;3, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;3, 4, T, Q&gt; const&amp; m1, mat&lt;3, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat3x4.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00181_html\"><div class=\"ttname\"><a href=\"a00181.html\">type_vec4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00180_html\"><div class=\"ttname\"><a href=\"a00180.html\">type_vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00171.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat4x2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat4x2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00171_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00171_source.html\">type_mat4x2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00171_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat4x2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat4x2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00171.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00179.html\">type_vec2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00181.html\">type_vec4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;4, 2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 2, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;2, 4, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                col_type value[4];</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>() { <span class=\"keywordflow\">return</span> 4; }</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;4, 2, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x0, T y0,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        T x1, T y1,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        T x2, T y2,</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        T x3, T y3);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                        col_type const&amp; v0,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                        col_type const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                        col_type const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                        col_type const&amp; v3);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                template&lt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                        typename X0, typename Y0,</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                        typename X1, typename Y1,</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        typename X2, typename Y2,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                        typename X3, typename Y3&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                        X0 x0, Y0 y0,</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                        X1 x1, Y1 y1,</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                        X2 x2, Y2 y2,</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                        X3 x3, Y3 y3);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                template&lt;typename V1, typename V2, typename V3, typename V4&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                        vec&lt;2, V1, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                        vec&lt;2, V2, Q&gt; const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                        vec&lt;2, V3, Q&gt; const&amp; v3,</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                        vec&lt;2, V4, Q&gt; const&amp; v4);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator=(mat&lt;4, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator+=(mat&lt;4, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator-=(mat&lt;4, 2, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator++ ();</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; &amp; operator-- ();</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator+(mat&lt;4, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator-(mat&lt;4, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator+(mat&lt;4, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator+(mat&lt;4, 2, T, Q&gt; const&amp; m1, mat&lt;4, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator-(mat&lt;4, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator-(mat&lt;4, 2, T, Q&gt; const&amp; m1,      mat&lt;4, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator*(mat&lt;4, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator*(T scalar, mat&lt;4, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        GLM_FUNC_DECL typename mat&lt;4, 2, T, Q&gt;::col_type operator*(mat&lt;4, 2, T, Q&gt; const&amp; m, typename mat&lt;4, 2, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        GLM_FUNC_DECL typename mat&lt;4, 2, T, Q&gt;::row_type operator*(typename mat&lt;4, 2, T, Q&gt;::col_type const&amp; v, mat&lt;4, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; operator*(mat&lt;4, 2, T, Q&gt; const&amp; m1, mat&lt;2, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; operator*(mat&lt;4, 2, T, Q&gt; const&amp; m1, mat&lt;3, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator*(mat&lt;4, 2, T, Q&gt; const&amp; m1, mat&lt;4, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator/(mat&lt;4, 2, T, Q&gt; const&amp; m, T scalar);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; operator/(T scalar, mat&lt;4, 2, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(mat&lt;4, 2, T, Q&gt; const&amp; m1, mat&lt;4, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;4, 2, T, Q&gt; const&amp; m1, mat&lt;4, 2, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat4x2.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"ttc\" id=\"a00179_html\"><div class=\"ttname\"><a href=\"a00179.html\">type_vec2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00181_html\"><div class=\"ttname\"><a href=\"a00181.html\">type_vec4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00172.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat4x3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat4x3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00172_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00172_source.html\">type_mat4x3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00172_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat4x3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat4x3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00172.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00180.html\">type_vec3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00181.html\">type_vec4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;4, 3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 3, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;3, 4, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                col_type value[4];</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>() { <span class=\"keywordflow\">return</span> 4; }</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;4, 3, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const&amp; x);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T const&amp; x0, T const&amp; y0, T const&amp; z0,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        T const&amp; x1, T const&amp; y1, T const&amp; z1,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        T const&amp; x2, T const&amp; y2, T const&amp; z2,</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        T const&amp; x3, T const&amp; y3, T const&amp; z3);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                        col_type const&amp; v0,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                        col_type const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                        col_type const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                        col_type const&amp; v3);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                template&lt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                        typename X1, typename Y1, typename Z1,</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                        typename X2, typename Y2, typename Z2,</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        typename X3, typename Y3, typename Z3,</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                        typename X4, typename Y4, typename Z4&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                        X1 const&amp; x1, Y1 const&amp; y1, Z1 const&amp; z1,</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                        X2 const&amp; x2, Y2 const&amp; y2, Z2 const&amp; z2,</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                        X3 const&amp; x3, Y3 const&amp; y3, Z3 const&amp; z3,</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                        X4 const&amp; x4, Y4 const&amp; y4, Z4 const&amp; z4);</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                template&lt;typename V1, typename V2, typename V3, typename V4&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                        vec&lt;3, V1, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                        vec&lt;3, V2, Q&gt; const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                        vec&lt;3, V3, Q&gt; const&amp; v3,</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                        vec&lt;3, V4, Q&gt; const&amp; v4);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; &amp; operator=(mat&lt;4, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; &amp; operator+=(mat&lt;4, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; &amp; operator-=(mat&lt;4, 3, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt;&amp; operator++();</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt;&amp; operator--();</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator+(mat&lt;4, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator-(mat&lt;4, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator+(mat&lt;4, 3, T, Q&gt; const&amp; m, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator+(mat&lt;4, 3, T, Q&gt; const&amp; m1, mat&lt;4, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator-(mat&lt;4, 3, T, Q&gt; const&amp; m, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator-(mat&lt;4, 3, T, Q&gt; const&amp; m1, mat&lt;4, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator*(mat&lt;4, 3, T, Q&gt; const&amp; m, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator*(T const&amp; s, mat&lt;4, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        GLM_FUNC_DECL typename mat&lt;4, 3, T, Q&gt;::col_type operator*(mat&lt;4, 3, T, Q&gt; const&amp; m, typename mat&lt;4, 3, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        GLM_FUNC_DECL typename mat&lt;4, 3, T, Q&gt;::row_type operator*(typename mat&lt;4, 3, T, Q&gt;::col_type const&amp; v, mat&lt;4, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; operator*(mat&lt;4, 3, T, Q&gt; const&amp; m1, mat&lt;2, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; operator*(mat&lt;4, 3, T, Q&gt; const&amp; m1,      mat&lt;3, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator*(mat&lt;4, 3, T, Q&gt; const&amp; m1, mat&lt;4, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator/(mat&lt;4, 3, T, Q&gt; const&amp; m, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; operator/(T const&amp; s, mat&lt;4, 3, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(mat&lt;4, 3, T, Q&gt; const&amp; m1, mat&lt;4, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;4, 3, T, Q&gt; const&amp; m1, mat&lt;4, 3, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat4x3.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;<span class=\"preprocessor\">#endif //GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00181_html\"><div class=\"ttname\"><a href=\"a00181.html\">type_vec4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00180_html\"><div class=\"ttname\"><a href=\"a00180.html\">type_vec3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00173.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat4x4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat4x4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00173_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00173_source.html\">type_mat4x4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00173_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_mat4x4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_mat4x4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00173.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00181.html\">type_vec4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;</div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;        <span class=\"keyword\">struct </span>mat&lt;4, 4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, T, Q&gt; col_type;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, T, Q&gt; row_type;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 4, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;                <span class=\"keyword\">typedef</span> mat&lt;4, 4, T, Q&gt; transpose_type;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;        <span class=\"keyword\">private</span>:</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                col_type value[4];</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;        <span class=\"keyword\">public</span>:</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"comment\">// -- Accesses --</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>(){<span class=\"keywordflow\">return</span> 4;}</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;                GLM_FUNC_DECL col_type &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR col_type <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;                <span class=\"comment\">// -- Constructors --</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(mat&lt;4, 4, T, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const&amp; x);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                        T const&amp; x0, T const&amp; y0, T const&amp; z0, T const&amp; w0,</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T const&amp; x1, T const&amp; y1, T const&amp; z1, T const&amp; w1,</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        T const&amp; x2, T const&amp; y2, T const&amp; z2, T const&amp; w2,</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        T const&amp; x3, T const&amp; y3, T const&amp; z3, T const&amp; w3);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                        col_type const&amp; v0,</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                        col_type const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                        col_type const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                        col_type const&amp; v3);</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                <span class=\"comment\">// -- Conversions --</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                template&lt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                        typename X1, typename Y1, typename Z1, typename W1,</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                        typename X2, typename Y2, typename Z2, typename W2,</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                        typename X3, typename Y3, typename Z3, typename W3,</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                        typename X4, typename Y4, typename Z4, typename W4&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                        X1 const&amp; x1, Y1 const&amp; y1, Z1 const&amp; z1, W1 const&amp; w1,</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                        X2 const&amp; x2, Y2 const&amp; y2, Z2 const&amp; z2, W2 const&amp; w2,</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                        X3 const&amp; x3, Y3 const&amp; y3, Z3 const&amp; z3, W3 const&amp; w3,</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                        X4 const&amp; x4, Y4 const&amp; y4, Z4 const&amp; z4, W4 const&amp; w4);</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                template&lt;typename V1, typename V2, typename V3, typename V4&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR mat(</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                        vec&lt;4, V1, Q&gt; const&amp; v1,</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                        vec&lt;4, V2, Q&gt; const&amp; v2,</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                        vec&lt;4, V3, Q&gt; const&amp; v3,</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                        vec&lt;4, V4, Q&gt; const&amp; v4);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                <span class=\"comment\">// -- Matrix conversions --</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 4, U, P&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;2, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 2, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;3, 4, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat&lt;4, 3, T, Q&gt; const&amp; x);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator=(mat&lt;4, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator+=(U s);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator+=(mat&lt;4, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator-=(U s);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator-=(mat&lt;4, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator*=(mat&lt;4, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator/=(mat&lt;4, 4, U, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator++();</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; &amp; operator--();</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator+(mat&lt;4, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator-(mat&lt;4, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator+(mat&lt;4, 4, T, Q&gt; const&amp; m, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator+(T const&amp; s, mat&lt;4, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator+(mat&lt;4, 4, T, Q&gt; const&amp; m1, mat&lt;4, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator-(mat&lt;4, 4, T, Q&gt; const&amp; m, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator-(T const&amp; s, mat&lt;4, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator-(mat&lt;4, 4, T, Q&gt; const&amp; m1,      mat&lt;4, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator*(mat&lt;4, 4, T, Q&gt; const&amp; m, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator*(T const&amp; s, mat&lt;4, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        GLM_FUNC_DECL typename mat&lt;4, 4, T, Q&gt;::col_type operator*(mat&lt;4, 4, T, Q&gt; const&amp; m, typename mat&lt;4, 4, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        GLM_FUNC_DECL typename mat&lt;4, 4, T, Q&gt;::row_type operator*(typename mat&lt;4, 4, T, Q&gt;::col_type const&amp; v, mat&lt;4, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; operator*(mat&lt;4, 4, T, Q&gt; const&amp; m1, mat&lt;2, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; operator*(mat&lt;4, 4, T, Q&gt; const&amp; m1, mat&lt;3, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator*(mat&lt;4, 4, T, Q&gt; const&amp; m1, mat&lt;4, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator/(mat&lt;4, 4, T, Q&gt; const&amp; m, T const&amp; s);</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator/(T const&amp; s, mat&lt;4, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        GLM_FUNC_DECL typename mat&lt;4, 4, T, Q&gt;::col_type operator/(mat&lt;4, 4, T, Q&gt; const&amp; m, typename mat&lt;4, 4, T, Q&gt;::row_type const&amp; v);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;        GLM_FUNC_DECL typename mat&lt;4, 4, T, Q&gt;::row_type operator/(typename mat&lt;4, 4, T, Q&gt;::col_type const&amp; v, mat&lt;4, 4, T, Q&gt; const&amp; m);</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; operator/(mat&lt;4, 4, T, Q&gt; const&amp; m1,      mat&lt;4, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator==(mat&lt;4, 4, T, Q&gt; const&amp; m1, mat&lt;4, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> operator!=(mat&lt;4, 4, T, Q&gt; const&amp; m1, mat&lt;4, 4, T, Q&gt; const&amp; m2);</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;<span class=\"preprocessor\">#include &quot;type_mat4x4.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;<span class=\"preprocessor\">#endif//GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00181_html\"><div class=\"ttname\"><a href=\"a00181.html\">type_vec4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00174.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00304.html\">GLM_GTC_type_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00174_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00304.html\">GLM_GTC_type_precision</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00174_source.html\">type_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00174_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00174.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_int_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_uint_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_type_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        <span class=\"comment\">// Signed int vector types</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">lowp_int8</a>;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">lowp_int16</a>;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">lowp_int32</a>;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">lowp_int64</a>;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">lowp_int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">lowp_int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">lowp_int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">lowp_int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">lowp_i8</a>;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">lowp_i16</a>;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">lowp_i32</a>;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">lowp_i64</a>;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">mediump_int8</a>;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">mediump_int16</a>;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">mediump_int32</a>;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">mediump_int64</a>;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">mediump_int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">mediump_int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">mediump_int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">mediump_int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">mediump_i8</a>;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">mediump_i16</a>;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">mediump_i32</a>;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">mediump_i64</a>;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">highp_int8</a>;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">highp_int16</a>;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">highp_int32</a>;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">highp_int64</a>;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">highp_int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">highp_int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">highp_int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">highp_int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">highp_i8</a>;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">highp_i16</a>;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">highp_i32</a>;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">highp_i64</a>;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;        <span class=\"keyword\">using</span> <a class=\"code\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">std::int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        <span class=\"keyword\">using</span> <a class=\"code\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">std::int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;        <span class=\"keyword\">using</span> <a class=\"code\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">std::int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        <span class=\"keyword\">using</span> <a class=\"code\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">std::int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">int8_t</a>;</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">int16_t</a>;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">int32_t</a>;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">int64_t</a>;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;        <span class=\"keyword\">typedef</span> detail::int8 <a class=\"code\" href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">i8</a>;</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;        <span class=\"keyword\">typedef</span> detail::int16 <a class=\"code\" href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">i16</a>;</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;        <span class=\"keyword\">typedef</span> detail::int32 <a class=\"code\" href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">i32</a>;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">detail::int64</a> <a class=\"code\" href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">i64</a>;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i8, lowp&gt; <a class=\"code\" href=\"a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c\">lowp_i8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i8, lowp&gt; <a class=\"code\" href=\"a00304.html#gac03e5099d27eeaa74b6016ea435a1df2\">lowp_i8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i8, lowp&gt; <a class=\"code\" href=\"a00304.html#gae2f43ace6b5b33ab49516d9e40af1845\">lowp_i8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i8, lowp&gt; <a class=\"code\" href=\"a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5\">lowp_i8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i8, mediump&gt; <a class=\"code\" href=\"a00304.html#ga85e8893f4ae3630065690a9000c0c483\">mediump_i8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i8, mediump&gt; <a class=\"code\" href=\"a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67\">mediump_i8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i8, mediump&gt; <a class=\"code\" href=\"a00304.html#ga6dd1c1618378c6f94d522a61c28773c9\">mediump_i8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i8, mediump&gt; <a class=\"code\" href=\"a00304.html#gac7bb04fb857ef7b520e49f6c381432be\">mediump_i8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i8, highp&gt; <a class=\"code\" href=\"a00304.html#ga1d8c10949691b0fd990253476f47beb3\">highp_i8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i8, highp&gt; <a class=\"code\" href=\"a00304.html#ga50542e4cb9b2f9bec213b66e06145d07\">highp_i8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i8, highp&gt; <a class=\"code\" href=\"a00304.html#ga8396bfdc081d9113190d0c39c9f67084\">highp_i8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i8, highp&gt; <a class=\"code\" href=\"a00304.html#ga4824e3ddf6e608117dfe4809430737b4\">highp_i8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i8, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">i8vec1</a>;</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i8, defaultp&gt; <a class=\"code\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">i8vec2</a>;</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i8, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">i8vec3</a>;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i8, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">i8vec4</a>;</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i16, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6\">lowp_i16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i16, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b\">lowp_i16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i16, lowp&gt;               <a class=\"code\" href=\"a00304.html#gab69ef9cbc2a9214bf5596c528c801b72\">lowp_i16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i16, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga1d47d94d17c2406abdd1f087a816e387\">lowp_i16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i16, mediump&gt;            <a class=\"code\" href=\"a00304.html#gacc44265ed440bf5e6e566782570de842\">mediump_i16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i16, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88\">mediump_i16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i16, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633\">mediump_i16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i16, mediump&gt;            <a class=\"code\" href=\"a00304.html#gaf52982bb23e3a3772649b2c5bb84b107\">mediump_i16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19\">highp_i16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i16, highp&gt;              <a class=\"code\" href=\"a00304.html#gaa7db3ad10947cf70cae6474d05ebd227\">highp_i16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96\">highp_i16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga7a18659438828f91ccca28f1a1e067b4\">highp_i16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i16, defaultp&gt; <a class=\"code\" href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">i16vec1</a>;</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i16, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">i16vec2</a>;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i16, defaultp&gt; <a class=\"code\" href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">i16vec3</a>;</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i16, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">i16vec4</a>;</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gae31ac3608cf643ceffd6554874bec4a0\">lowp_i32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd\">lowp_i32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d\">lowp_i32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08\">lowp_i32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga46a57f71e430637559097a732b550a7e\">mediump_i32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219\">mediump_i32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a\">mediump_i32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8\">mediump_i32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;</div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga6a9d71cc62745302f70422b7dc98755c\">highp_i32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, highp&gt;              <a class=\"code\" href=\"a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530\">highp_i32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1\">highp_i32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, highp&gt;              <a class=\"code\" href=\"a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902\">highp_i32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">i32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">i32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">i32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">i32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;</div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i64, lowp&gt;               <a class=\"code\" href=\"a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437\">lowp_i64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;</div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i64, lowp&gt;               <a class=\"code\" href=\"a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c\">lowp_i64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i64, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\">lowp_i64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i64, lowp&gt;               <a class=\"code\" href=\"a00304.html#gabb4229a4c1488bf063eed0c45355bb9c\">lowp_i64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i64, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e\">mediump_i64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;</div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i64, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga2c94aeae3457325944ca1059b0b68330\">mediump_i64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i64, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e\">mediump_i64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i64, mediump&gt;            <a class=\"code\" href=\"a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1\">mediump_i64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;</div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i64, highp&gt;              <a class=\"code\" href=\"a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4\">highp_i64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;</div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i64, highp&gt;              <a class=\"code\" href=\"a00304.html#gad9d1903cb20899966e8ebe0670889a5f\">highp_i64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;</div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i64, highp&gt;              <a class=\"code\" href=\"a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a\">highp_i64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;</div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i64, highp&gt;              <a class=\"code\" href=\"a00304.html#gad23b1be9b3bf20352089a6b738f0ebba\">highp_i64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;</div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, i64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">i64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;</div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, i64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">i64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;</div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, i64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">i64vec3</a>;</div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;</div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, i64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">i64vec4</a>;</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;</div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;</div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;        <span class=\"comment\">// Unsigned int vector types</span></div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;</div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">lowp_uint8</a>;</div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;</div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">lowp_uint16</a>;</div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;</div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">lowp_uint32</a>;</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;</div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">lowp_uint64</a>;</div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">lowp_uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;</div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">lowp_uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;</div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">lowp_uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">lowp_uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;</div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\">  550</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">lowp_u8</a>;</div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;</div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\">  554</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">lowp_u16</a>;</div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">lowp_u32</a>;</div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;</div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">lowp_u64</a>;</div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;</div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">mediump_uint8</a>;</div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;</div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">mediump_uint16</a>;</div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;</div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\">  574</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">mediump_uint32</a>;</div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;</div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">mediump_uint64</a>;</div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;</div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">mediump_uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;</div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">mediump_uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;</div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">mediump_uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;</div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">mediump_uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;</div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">mediump_u8</a>;</div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">mediump_u16</a>;</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;</div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">mediump_u32</a>;</div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">mediump_u64</a>;</div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;</div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">highp_uint8</a>;</div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;</div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">highp_uint16</a>;</div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;</div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">highp_uint32</a>;</div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;</div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">highp_uint64</a>;</div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">highp_uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;</div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">highp_uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\">  635</span>&#160;</div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">highp_uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;</div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">highp_uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\">  643</span>&#160;</div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">highp_u8</a>;</div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\">  647</span>&#160;</div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">highp_u16</a>;</div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;</div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">highp_u32</a>;</div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;</div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\">  658</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">highp_u64</a>;</div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;</div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;<span class=\"preprocessor\">#if GLM_HAS_EXTENDED_INTEGER_TYPE</span></div>\n<div class=\"line\"><a name=\"l00661\"></a><span class=\"lineno\">  661</span>&#160;        <span class=\"keyword\">using</span> <a class=\"code\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">std::uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\">  662</span>&#160;        <span class=\"keyword\">using</span> <a class=\"code\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">std::uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;        <span class=\"keyword\">using</span> <a class=\"code\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">std::uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\">  664</span>&#160;        <span class=\"keyword\">using</span> <a class=\"code\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">std::uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\">  665</span>&#160;<span class=\"preprocessor\">#else</span></div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\">  666</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">uint8_t</a>;</div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;</div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">uint16_t</a>;</div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\">  673</span>&#160;</div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">uint32_t</a>;</div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;</div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">uint64_t</a>;</div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\">  682</span>&#160;</div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\">  685</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint8 <a class=\"code\" href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">u8</a>;</div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\">  686</span>&#160;</div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint16 <a class=\"code\" href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">u16</a>;</div>\n<div class=\"line\"><a name=\"l00690\"></a><span class=\"lineno\">  690</span>&#160;</div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\">  693</span>&#160;        <span class=\"keyword\">typedef</span> detail::uint32 <a class=\"code\" href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">u32</a>;</div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\">  694</span>&#160;</div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\">  697</span>&#160;        <span class=\"keyword\">typedef</span> <a class=\"code\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">detail::uint64</a> <a class=\"code\" href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">u64</a>;</div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;</div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;</div>\n<div class=\"line\"><a name=\"l00700\"></a><span class=\"lineno\">  700</span>&#160;</div>\n<div class=\"line\"><a name=\"l00701\"></a><span class=\"lineno\">  701</span>&#160;</div>\n<div class=\"line\"><a name=\"l00702\"></a><span class=\"lineno\">  702</span>&#160;</div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\">  704</span>&#160;        <span class=\"comment\">// Float vector types</span></div>\n<div class=\"line\"><a name=\"l00705\"></a><span class=\"lineno\">  705</span>&#160;</div>\n<div class=\"line\"><a name=\"l00708\"></a><span class=\"lineno\">  708</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">float</span> <a class=\"code\" href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">float32</a>;</div>\n<div class=\"line\"><a name=\"l00709\"></a><span class=\"lineno\">  709</span>&#160;</div>\n<div class=\"line\"><a name=\"l00712\"></a><span class=\"lineno\">  712</span>&#160;        <span class=\"keyword\">typedef</span> <span class=\"keywordtype\">double</span> <a class=\"code\" href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">float64</a>;</div>\n<div class=\"line\"><a name=\"l00713\"></a><span class=\"lineno\">  713</span>&#160;</div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">lowp_float32</a>;</div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160;</div>\n<div class=\"line\"><a name=\"l00720\"></a><span class=\"lineno\">  720</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">lowp_float64</a>;</div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;</div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">lowp_float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00725\"></a><span class=\"lineno\">  725</span>&#160;</div>\n<div class=\"line\"><a name=\"l00728\"></a><span class=\"lineno\">  728</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">lowp_float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\">  729</span>&#160;</div>\n<div class=\"line\"><a name=\"l00732\"></a><span class=\"lineno\">  732</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">lowp_f32</a>;</div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;</div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">lowp_f64</a>;</div>\n<div class=\"line\"><a name=\"l00737\"></a><span class=\"lineno\">  737</span>&#160;</div>\n<div class=\"line\"><a name=\"l00740\"></a><span class=\"lineno\">  740</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">lowp_float32</a>;</div>\n<div class=\"line\"><a name=\"l00741\"></a><span class=\"lineno\">  741</span>&#160;</div>\n<div class=\"line\"><a name=\"l00744\"></a><span class=\"lineno\">  744</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">lowp_float64</a>;</div>\n<div class=\"line\"><a name=\"l00745\"></a><span class=\"lineno\">  745</span>&#160;</div>\n<div class=\"line\"><a name=\"l00748\"></a><span class=\"lineno\">  748</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">lowp_float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00749\"></a><span class=\"lineno\">  749</span>&#160;</div>\n<div class=\"line\"><a name=\"l00752\"></a><span class=\"lineno\">  752</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">lowp_float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00753\"></a><span class=\"lineno\">  753</span>&#160;</div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\">  756</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">lowp_f32</a>;</div>\n<div class=\"line\"><a name=\"l00757\"></a><span class=\"lineno\">  757</span>&#160;</div>\n<div class=\"line\"><a name=\"l00760\"></a><span class=\"lineno\">  760</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">lowp_f64</a>;</div>\n<div class=\"line\"><a name=\"l00761\"></a><span class=\"lineno\">  761</span>&#160;</div>\n<div class=\"line\"><a name=\"l00762\"></a><span class=\"lineno\">  762</span>&#160;</div>\n<div class=\"line\"><a name=\"l00765\"></a><span class=\"lineno\">  765</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">lowp_float32</a>;</div>\n<div class=\"line\"><a name=\"l00766\"></a><span class=\"lineno\">  766</span>&#160;</div>\n<div class=\"line\"><a name=\"l00769\"></a><span class=\"lineno\">  769</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">lowp_float64</a>;</div>\n<div class=\"line\"><a name=\"l00770\"></a><span class=\"lineno\">  770</span>&#160;</div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\">  773</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">lowp_float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00774\"></a><span class=\"lineno\">  774</span>&#160;</div>\n<div class=\"line\"><a name=\"l00777\"></a><span class=\"lineno\">  777</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">lowp_float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00778\"></a><span class=\"lineno\">  778</span>&#160;</div>\n<div class=\"line\"><a name=\"l00781\"></a><span class=\"lineno\">  781</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">lowp_f32</a>;</div>\n<div class=\"line\"><a name=\"l00782\"></a><span class=\"lineno\">  782</span>&#160;</div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\">  785</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">lowp_f64</a>;</div>\n<div class=\"line\"><a name=\"l00786\"></a><span class=\"lineno\">  786</span>&#160;</div>\n<div class=\"line\"><a name=\"l00787\"></a><span class=\"lineno\">  787</span>&#160;</div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7\">mediump_float32</a>;</div>\n<div class=\"line\"><a name=\"l00791\"></a><span class=\"lineno\">  791</span>&#160;</div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#gab83d8aae6e4f115e97a785e8574a115f\">mediump_float64</a>;</div>\n<div class=\"line\"><a name=\"l00795\"></a><span class=\"lineno\">  795</span>&#160;</div>\n<div class=\"line\"><a name=\"l00798\"></a><span class=\"lineno\">  798</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gae4dee61f8fe1caccec309fbed02faf12\">mediump_float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00799\"></a><span class=\"lineno\">  799</span>&#160;</div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\">  802</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e\">mediump_float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00803\"></a><span class=\"lineno\">  803</span>&#160;</div>\n<div class=\"line\"><a name=\"l00806\"></a><span class=\"lineno\">  806</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\">mediump_f32</a>;</div>\n<div class=\"line\"><a name=\"l00807\"></a><span class=\"lineno\">  807</span>&#160;</div>\n<div class=\"line\"><a name=\"l00810\"></a><span class=\"lineno\">  810</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga6d40381d78472553f878f66e443feeef\">mediump_f64</a>;</div>\n<div class=\"line\"><a name=\"l00811\"></a><span class=\"lineno\">  811</span>&#160;</div>\n<div class=\"line\"><a name=\"l00812\"></a><span class=\"lineno\">  812</span>&#160;</div>\n<div class=\"line\"><a name=\"l00815\"></a><span class=\"lineno\">  815</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea\">highp_float32</a>;</div>\n<div class=\"line\"><a name=\"l00816\"></a><span class=\"lineno\">  816</span>&#160;</div>\n<div class=\"line\"><a name=\"l00819\"></a><span class=\"lineno\">  819</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215\">highp_float64</a>;</div>\n<div class=\"line\"><a name=\"l00820\"></a><span class=\"lineno\">  820</span>&#160;</div>\n<div class=\"line\"><a name=\"l00823\"></a><span class=\"lineno\">  823</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#ga5376ef18dca9d248897c3363ef5a06b2\">highp_float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00824\"></a><span class=\"lineno\">  824</span>&#160;</div>\n<div class=\"line\"><a name=\"l00827\"></a><span class=\"lineno\">  827</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#gaaeeb0077198cff40e3f48b1108ece139\">highp_float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00828\"></a><span class=\"lineno\">  828</span>&#160;</div>\n<div class=\"line\"><a name=\"l00831\"></a><span class=\"lineno\">  831</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#ga6906e1ef0b34064b4b675489c5c38725\">highp_f32</a>;</div>\n<div class=\"line\"><a name=\"l00832\"></a><span class=\"lineno\">  832</span>&#160;</div>\n<div class=\"line\"><a name=\"l00835\"></a><span class=\"lineno\">  835</span>&#160;        <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga51d5266017d88f62737c1973923a7cf4\">highp_f64</a>;</div>\n<div class=\"line\"><a name=\"l00836\"></a><span class=\"lineno\">  836</span>&#160;</div>\n<div class=\"line\"><a name=\"l00837\"></a><span class=\"lineno\">  837</span>&#160;</div>\n<div class=\"line\"><a name=\"l00838\"></a><span class=\"lineno\">  838</span>&#160;<span class=\"preprocessor\">#if(defined(GLM_PRECISION_LOWP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00839\"></a><span class=\"lineno\">  839</span>&#160;        <span class=\"keyword\">typedef</span> lowp_float32_t <a class=\"code\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00842\"></a><span class=\"lineno\">  842</span>&#160;</div>\n<div class=\"line\"><a name=\"l00845\"></a><span class=\"lineno\">  845</span>&#160;        <span class=\"keyword\">typedef</span> lowp_float64_t <a class=\"code\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00846\"></a><span class=\"lineno\">  846</span>&#160;</div>\n<div class=\"line\"><a name=\"l00849\"></a><span class=\"lineno\">  849</span>&#160;        <span class=\"keyword\">typedef</span> lowp_f32 <a class=\"code\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a>;</div>\n<div class=\"line\"><a name=\"l00850\"></a><span class=\"lineno\">  850</span>&#160;</div>\n<div class=\"line\"><a name=\"l00853\"></a><span class=\"lineno\">  853</span>&#160;        <span class=\"keyword\">typedef</span> lowp_f64 <a class=\"code\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a>;</div>\n<div class=\"line\"><a name=\"l00854\"></a><span class=\"lineno\">  854</span>&#160;</div>\n<div class=\"line\"><a name=\"l00855\"></a><span class=\"lineno\">  855</span>&#160;<span class=\"preprocessor\">#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00856\"></a><span class=\"lineno\">  856</span>&#160;        <span class=\"keyword\">typedef</span> mediump_float32 <a class=\"code\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00859\"></a><span class=\"lineno\">  859</span>&#160;</div>\n<div class=\"line\"><a name=\"l00862\"></a><span class=\"lineno\">  862</span>&#160;        <span class=\"keyword\">typedef</span> mediump_float64 <a class=\"code\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00863\"></a><span class=\"lineno\">  863</span>&#160;</div>\n<div class=\"line\"><a name=\"l00866\"></a><span class=\"lineno\">  866</span>&#160;        <span class=\"keyword\">typedef</span> mediump_float32 <a class=\"code\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a>;</div>\n<div class=\"line\"><a name=\"l00867\"></a><span class=\"lineno\">  867</span>&#160;</div>\n<div class=\"line\"><a name=\"l00870\"></a><span class=\"lineno\">  870</span>&#160;        <span class=\"keyword\">typedef</span> mediump_float64 <a class=\"code\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a>;</div>\n<div class=\"line\"><a name=\"l00871\"></a><span class=\"lineno\">  871</span>&#160;</div>\n<div class=\"line\"><a name=\"l00872\"></a><span class=\"lineno\">  872</span>&#160;<span class=\"preprocessor\">#else//(defined(GLM_PRECISION_HIGHP_FLOAT))</span></div>\n<div class=\"line\"><a name=\"l00873\"></a><span class=\"lineno\">  873</span>&#160;</div>\n<div class=\"line\"><a name=\"l00876\"></a><span class=\"lineno\">  876</span>&#160;        <span class=\"keyword\">typedef</span> highp_float32_t <a class=\"code\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">float32_t</a>;</div>\n<div class=\"line\"><a name=\"l00877\"></a><span class=\"lineno\">  877</span>&#160;</div>\n<div class=\"line\"><a name=\"l00880\"></a><span class=\"lineno\">  880</span>&#160;        <span class=\"keyword\">typedef</span> highp_float64_t <a class=\"code\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">float64_t</a>;</div>\n<div class=\"line\"><a name=\"l00881\"></a><span class=\"lineno\">  881</span>&#160;</div>\n<div class=\"line\"><a name=\"l00884\"></a><span class=\"lineno\">  884</span>&#160;        <span class=\"keyword\">typedef</span> highp_float32_t <a class=\"code\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a>;</div>\n<div class=\"line\"><a name=\"l00885\"></a><span class=\"lineno\">  885</span>&#160;</div>\n<div class=\"line\"><a name=\"l00888\"></a><span class=\"lineno\">  888</span>&#160;        <span class=\"keyword\">typedef</span> highp_float64_t <a class=\"code\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a>;</div>\n<div class=\"line\"><a name=\"l00889\"></a><span class=\"lineno\">  889</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00890\"></a><span class=\"lineno\">  890</span>&#160;</div>\n<div class=\"line\"><a name=\"l00891\"></a><span class=\"lineno\">  891</span>&#160;</div>\n<div class=\"line\"><a name=\"l00894\"></a><span class=\"lineno\">  894</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, lowp&gt; <a class=\"code\" href=\"a00304.html#ga346b2336fff168a7e0df1583aae3e5a5\">lowp_fvec1</a>;</div>\n<div class=\"line\"><a name=\"l00895\"></a><span class=\"lineno\">  895</span>&#160;</div>\n<div class=\"line\"><a name=\"l00898\"></a><span class=\"lineno\">  898</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, lowp&gt; <a class=\"code\" href=\"a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d\">lowp_fvec2</a>;</div>\n<div class=\"line\"><a name=\"l00899\"></a><span class=\"lineno\">  899</span>&#160;</div>\n<div class=\"line\"><a name=\"l00902\"></a><span class=\"lineno\">  902</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, lowp&gt; <a class=\"code\" href=\"a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa\">lowp_fvec3</a>;</div>\n<div class=\"line\"><a name=\"l00903\"></a><span class=\"lineno\">  903</span>&#160;</div>\n<div class=\"line\"><a name=\"l00906\"></a><span class=\"lineno\">  906</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, lowp&gt; <a class=\"code\" href=\"a00304.html#ga755484ffbe39ae3db2875953ed04e7b7\">lowp_fvec4</a>;</div>\n<div class=\"line\"><a name=\"l00907\"></a><span class=\"lineno\">  907</span>&#160;</div>\n<div class=\"line\"><a name=\"l00908\"></a><span class=\"lineno\">  908</span>&#160;</div>\n<div class=\"line\"><a name=\"l00911\"></a><span class=\"lineno\">  911</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, mediump&gt; <a class=\"code\" href=\"a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b\">mediump_fvec1</a>;</div>\n<div class=\"line\"><a name=\"l00912\"></a><span class=\"lineno\">  912</span>&#160;</div>\n<div class=\"line\"><a name=\"l00915\"></a><span class=\"lineno\">  915</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, mediump&gt; <a class=\"code\" href=\"a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6\">mediump_fvec2</a>;</div>\n<div class=\"line\"><a name=\"l00916\"></a><span class=\"lineno\">  916</span>&#160;</div>\n<div class=\"line\"><a name=\"l00919\"></a><span class=\"lineno\">  919</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, mediump&gt; <a class=\"code\" href=\"a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07\">mediump_fvec3</a>;</div>\n<div class=\"line\"><a name=\"l00920\"></a><span class=\"lineno\">  920</span>&#160;</div>\n<div class=\"line\"><a name=\"l00923\"></a><span class=\"lineno\">  923</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, mediump&gt; <a class=\"code\" href=\"a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb\">mediump_fvec4</a>;</div>\n<div class=\"line\"><a name=\"l00924\"></a><span class=\"lineno\">  924</span>&#160;</div>\n<div class=\"line\"><a name=\"l00925\"></a><span class=\"lineno\">  925</span>&#160;</div>\n<div class=\"line\"><a name=\"l00928\"></a><span class=\"lineno\">  928</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, highp&gt; <a class=\"code\" href=\"a00304.html#gaa1040342c4efdedc8f90e6267db8d41c\">highp_fvec1</a>;</div>\n<div class=\"line\"><a name=\"l00929\"></a><span class=\"lineno\">  929</span>&#160;</div>\n<div class=\"line\"><a name=\"l00932\"></a><span class=\"lineno\">  932</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, highp&gt; <a class=\"code\" href=\"a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae\">highp_fvec2</a>;</div>\n<div class=\"line\"><a name=\"l00933\"></a><span class=\"lineno\">  933</span>&#160;</div>\n<div class=\"line\"><a name=\"l00936\"></a><span class=\"lineno\">  936</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, highp&gt; <a class=\"code\" href=\"a00304.html#ga6ef77413883f48d6b53b4169b25edbd0\">highp_fvec3</a>;</div>\n<div class=\"line\"><a name=\"l00937\"></a><span class=\"lineno\">  937</span>&#160;</div>\n<div class=\"line\"><a name=\"l00940\"></a><span class=\"lineno\">  940</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, highp&gt; <a class=\"code\" href=\"a00304.html#ga8b839abbb44f5102609eed89f6ed61f7\">highp_fvec4</a>;</div>\n<div class=\"line\"><a name=\"l00941\"></a><span class=\"lineno\">  941</span>&#160;</div>\n<div class=\"line\"><a name=\"l00942\"></a><span class=\"lineno\">  942</span>&#160;</div>\n<div class=\"line\"><a name=\"l00945\"></a><span class=\"lineno\">  945</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e\">lowp_f32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00946\"></a><span class=\"lineno\">  946</span>&#160;</div>\n<div class=\"line\"><a name=\"l00949\"></a><span class=\"lineno\">  949</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0\">lowp_f32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00950\"></a><span class=\"lineno\">  950</span>&#160;</div>\n<div class=\"line\"><a name=\"l00953\"></a><span class=\"lineno\">  953</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gaf739a2cd7b81783a43148b53e40d983b\">lowp_f32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00954\"></a><span class=\"lineno\">  954</span>&#160;</div>\n<div class=\"line\"><a name=\"l00957\"></a><span class=\"lineno\">  957</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga4e2e1debe022074ab224c9faf856d374\">lowp_f32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00958\"></a><span class=\"lineno\">  958</span>&#160;</div>\n<div class=\"line\"><a name=\"l00961\"></a><span class=\"lineno\">  961</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gabb33cab7d7c74cc14aa95455d0690865\">mediump_f32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00962\"></a><span class=\"lineno\">  962</span>&#160;</div>\n<div class=\"line\"><a name=\"l00965\"></a><span class=\"lineno\">  965</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b\">mediump_f32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00966\"></a><span class=\"lineno\">  966</span>&#160;</div>\n<div class=\"line\"><a name=\"l00969\"></a><span class=\"lineno\">  969</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#ga062ffef2973bd8241df993c3b30b327c\">mediump_f32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00970\"></a><span class=\"lineno\">  970</span>&#160;</div>\n<div class=\"line\"><a name=\"l00973\"></a><span class=\"lineno\">  973</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gad80c84bcd5f585840faa6179f6fd446c\">mediump_f32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00974\"></a><span class=\"lineno\">  974</span>&#160;</div>\n<div class=\"line\"><a name=\"l00977\"></a><span class=\"lineno\">  977</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gab1b1c9e8667902b78b2c330e4d383a61\">highp_f32vec1</a>;</div>\n<div class=\"line\"><a name=\"l00978\"></a><span class=\"lineno\">  978</span>&#160;</div>\n<div class=\"line\"><a name=\"l00981\"></a><span class=\"lineno\">  981</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77\">highp_f32vec2</a>;</div>\n<div class=\"line\"><a name=\"l00982\"></a><span class=\"lineno\">  982</span>&#160;</div>\n<div class=\"line\"><a name=\"l00985\"></a><span class=\"lineno\">  985</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c\">highp_f32vec3</a>;</div>\n<div class=\"line\"><a name=\"l00986\"></a><span class=\"lineno\">  986</span>&#160;</div>\n<div class=\"line\"><a name=\"l00989\"></a><span class=\"lineno\">  989</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga0f038d4e09862a74f03d102c59eda73e\">highp_f32vec4</a>;</div>\n<div class=\"line\"><a name=\"l00990\"></a><span class=\"lineno\">  990</span>&#160;</div>\n<div class=\"line\"><a name=\"l00991\"></a><span class=\"lineno\">  991</span>&#160;</div>\n<div class=\"line\"><a name=\"l00994\"></a><span class=\"lineno\">  994</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b\">lowp_f64vec1</a>;</div>\n<div class=\"line\"><a name=\"l00995\"></a><span class=\"lineno\">  995</span>&#160;</div>\n<div class=\"line\"><a name=\"l00998\"></a><span class=\"lineno\">  998</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#ga4e641a54d70c81eabf56c25c966d04bd\">lowp_f64vec2</a>;</div>\n<div class=\"line\"><a name=\"l00999\"></a><span class=\"lineno\">  999</span>&#160;</div>\n<div class=\"line\"><a name=\"l01002\"></a><span class=\"lineno\"> 1002</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gae7a4711107b7d078fc5f03ce2227b90b\">lowp_f64vec3</a>;</div>\n<div class=\"line\"><a name=\"l01003\"></a><span class=\"lineno\"> 1003</span>&#160;</div>\n<div class=\"line\"><a name=\"l01006\"></a><span class=\"lineno\"> 1006</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4\">lowp_f64vec4</a>;</div>\n<div class=\"line\"><a name=\"l01007\"></a><span class=\"lineno\"> 1007</span>&#160;</div>\n<div class=\"line\"><a name=\"l01010\"></a><span class=\"lineno\"> 1010</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#gac30fdf8afa489400053275b6a3350127\">mediump_f64vec1</a>;</div>\n<div class=\"line\"><a name=\"l01011\"></a><span class=\"lineno\"> 1011</span>&#160;</div>\n<div class=\"line\"><a name=\"l01014\"></a><span class=\"lineno\"> 1014</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b\">mediump_f64vec2</a>;</div>\n<div class=\"line\"><a name=\"l01015\"></a><span class=\"lineno\"> 1015</span>&#160;</div>\n<div class=\"line\"><a name=\"l01018\"></a><span class=\"lineno\"> 1018</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#ga461c4c7d0757404dd0dba931760b25cf\">mediump_f64vec3</a>;</div>\n<div class=\"line\"><a name=\"l01019\"></a><span class=\"lineno\"> 1019</span>&#160;</div>\n<div class=\"line\"><a name=\"l01022\"></a><span class=\"lineno\"> 1022</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e\">mediump_f64vec4</a>;</div>\n<div class=\"line\"><a name=\"l01023\"></a><span class=\"lineno\"> 1023</span>&#160;</div>\n<div class=\"line\"><a name=\"l01026\"></a><span class=\"lineno\"> 1026</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga62c31b133ceee9984fbee05ac4c434a9\">highp_f64vec1</a>;</div>\n<div class=\"line\"><a name=\"l01027\"></a><span class=\"lineno\"> 1027</span>&#160;</div>\n<div class=\"line\"><a name=\"l01030\"></a><span class=\"lineno\"> 1030</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2\">highp_f64vec2</a>;</div>\n<div class=\"line\"><a name=\"l01031\"></a><span class=\"lineno\"> 1031</span>&#160;</div>\n<div class=\"line\"><a name=\"l01034\"></a><span class=\"lineno\"> 1034</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f64, highp&gt; <a class=\"code\" href=\"a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851\">highp_f64vec3</a>;</div>\n<div class=\"line\"><a name=\"l01035\"></a><span class=\"lineno\"> 1035</span>&#160;</div>\n<div class=\"line\"><a name=\"l01038\"></a><span class=\"lineno\"> 1038</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444\">highp_f64vec4</a>;</div>\n<div class=\"line\"><a name=\"l01039\"></a><span class=\"lineno\"> 1039</span>&#160;</div>\n<div class=\"line\"><a name=\"l01040\"></a><span class=\"lineno\"> 1040</span>&#160;</div>\n<div class=\"line\"><a name=\"l01041\"></a><span class=\"lineno\"> 1041</span>&#160;</div>\n<div class=\"line\"><a name=\"l01043\"></a><span class=\"lineno\"> 1043</span>&#160;        <span class=\"comment\">// Float matrix types</span></div>\n<div class=\"line\"><a name=\"l01044\"></a><span class=\"lineno\"> 1044</span>&#160;</div>\n<div class=\"line\"><a name=\"l01047\"></a><span class=\"lineno\"> 1047</span>&#160;        <span class=\"comment\">//typedef lowp_f32 lowp_fmat1x1;</span></div>\n<div class=\"line\"><a name=\"l01048\"></a><span class=\"lineno\"> 1048</span>&#160;</div>\n<div class=\"line\"><a name=\"l01051\"></a><span class=\"lineno\"> 1051</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066\">lowp_fmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01052\"></a><span class=\"lineno\"> 1052</span>&#160;</div>\n<div class=\"line\"><a name=\"l01055\"></a><span class=\"lineno\"> 1055</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga71cdb53801ed4c3aadb3603c04723210\">lowp_fmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01056\"></a><span class=\"lineno\"> 1056</span>&#160;</div>\n<div class=\"line\"><a name=\"l01059\"></a><span class=\"lineno\"> 1059</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gaab217601c74974a84acbca428123ecf7\">lowp_fmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01060\"></a><span class=\"lineno\"> 1060</span>&#160;</div>\n<div class=\"line\"><a name=\"l01063\"></a><span class=\"lineno\"> 1063</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga49b98e7d71804af45d86886a489e633c\">lowp_fmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01064\"></a><span class=\"lineno\"> 1064</span>&#160;</div>\n<div class=\"line\"><a name=\"l01067\"></a><span class=\"lineno\"> 1067</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4\">lowp_fmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01068\"></a><span class=\"lineno\"> 1068</span>&#160;</div>\n<div class=\"line\"><a name=\"l01071\"></a><span class=\"lineno\"> 1071</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga28733aec7288191b314d42154fd0b690\">lowp_fmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01072\"></a><span class=\"lineno\"> 1072</span>&#160;</div>\n<div class=\"line\"><a name=\"l01075\"></a><span class=\"lineno\"> 1075</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c\">lowp_fmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01076\"></a><span class=\"lineno\"> 1076</span>&#160;</div>\n<div class=\"line\"><a name=\"l01079\"></a><span class=\"lineno\"> 1079</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444\">lowp_fmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01080\"></a><span class=\"lineno\"> 1080</span>&#160;</div>\n<div class=\"line\"><a name=\"l01083\"></a><span class=\"lineno\"> 1083</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gac2f5263708ac847b361a9841e74ddf9f\">lowp_fmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01084\"></a><span class=\"lineno\"> 1084</span>&#160;</div>\n<div class=\"line\"><a name=\"l01087\"></a><span class=\"lineno\"> 1087</span>&#160;        <span class=\"comment\">//typedef lowp_fmat1x1 lowp_fmat1;</span></div>\n<div class=\"line\"><a name=\"l01088\"></a><span class=\"lineno\"> 1088</span>&#160;</div>\n<div class=\"line\"><a name=\"l01091\"></a><span class=\"lineno\"> 1091</span>&#160;        <span class=\"keyword\">typedef</span> lowp_fmat2x2 <a class=\"code\" href=\"a00304.html#ga5bba0ce31210e274f73efacd3364c03f\">lowp_fmat2</a>;</div>\n<div class=\"line\"><a name=\"l01092\"></a><span class=\"lineno\"> 1092</span>&#160;</div>\n<div class=\"line\"><a name=\"l01095\"></a><span class=\"lineno\"> 1095</span>&#160;        <span class=\"keyword\">typedef</span> lowp_fmat3x3 <a class=\"code\" href=\"a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b\">lowp_fmat3</a>;</div>\n<div class=\"line\"><a name=\"l01096\"></a><span class=\"lineno\"> 1096</span>&#160;</div>\n<div class=\"line\"><a name=\"l01099\"></a><span class=\"lineno\"> 1099</span>&#160;        <span class=\"keyword\">typedef</span> lowp_fmat4x4 <a class=\"code\" href=\"a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f\">lowp_fmat4</a>;</div>\n<div class=\"line\"><a name=\"l01100\"></a><span class=\"lineno\"> 1100</span>&#160;</div>\n<div class=\"line\"><a name=\"l01101\"></a><span class=\"lineno\"> 1101</span>&#160;</div>\n<div class=\"line\"><a name=\"l01104\"></a><span class=\"lineno\"> 1104</span>&#160;        <span class=\"comment\">//typedef mediump_f32 mediump_fmat1x1;</span></div>\n<div class=\"line\"><a name=\"l01105\"></a><span class=\"lineno\"> 1105</span>&#160;</div>\n<div class=\"line\"><a name=\"l01108\"></a><span class=\"lineno\"> 1108</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#ga98a687c17b174ea316b5f397b64f44bc\">mediump_fmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01109\"></a><span class=\"lineno\"> 1109</span>&#160;</div>\n<div class=\"line\"><a name=\"l01112\"></a><span class=\"lineno\"> 1112</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gaa03f939d90d5ef157df957d93f0b9a64\">mediump_fmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01113\"></a><span class=\"lineno\"> 1113</span>&#160;</div>\n<div class=\"line\"><a name=\"l01116\"></a><span class=\"lineno\"> 1116</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#ga35223623e9ccebd8a281873b71b7d213\">mediump_fmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01117\"></a><span class=\"lineno\"> 1117</span>&#160;</div>\n<div class=\"line\"><a name=\"l01120\"></a><span class=\"lineno\"> 1120</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#ga42569e5b92f8635cedeadb1457ee1467\">mediump_fmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01121\"></a><span class=\"lineno\"> 1121</span>&#160;</div>\n<div class=\"line\"><a name=\"l01124\"></a><span class=\"lineno\"> 1124</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gaa6f526388c74a66b3d52315a14d434ae\">mediump_fmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01125\"></a><span class=\"lineno\"> 1125</span>&#160;</div>\n<div class=\"line\"><a name=\"l01128\"></a><span class=\"lineno\"> 1128</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4\">mediump_fmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01129\"></a><span class=\"lineno\"> 1129</span>&#160;</div>\n<div class=\"line\"><a name=\"l01132\"></a><span class=\"lineno\"> 1132</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf\">mediump_fmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01133\"></a><span class=\"lineno\"> 1133</span>&#160;</div>\n<div class=\"line\"><a name=\"l01136\"></a><span class=\"lineno\"> 1136</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#ga41ad497f7eae211556aefd783cb02b90\">mediump_fmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01137\"></a><span class=\"lineno\"> 1137</span>&#160;</div>\n<div class=\"line\"><a name=\"l01140\"></a><span class=\"lineno\"> 1140</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#ga22e27beead07bff4d5ce9d6065a57279\">mediump_fmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01141\"></a><span class=\"lineno\"> 1141</span>&#160;</div>\n<div class=\"line\"><a name=\"l01144\"></a><span class=\"lineno\"> 1144</span>&#160;        <span class=\"comment\">//typedef mediump_fmat1x1 mediump_fmat1;</span></div>\n<div class=\"line\"><a name=\"l01145\"></a><span class=\"lineno\"> 1145</span>&#160;</div>\n<div class=\"line\"><a name=\"l01148\"></a><span class=\"lineno\"> 1148</span>&#160;        <span class=\"keyword\">typedef</span> mediump_fmat2x2 <a class=\"code\" href=\"a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff\">mediump_fmat2</a>;</div>\n<div class=\"line\"><a name=\"l01149\"></a><span class=\"lineno\"> 1149</span>&#160;</div>\n<div class=\"line\"><a name=\"l01152\"></a><span class=\"lineno\"> 1152</span>&#160;        <span class=\"keyword\">typedef</span> mediump_fmat3x3 <a class=\"code\" href=\"a00304.html#ga80823dfad5dba98512c76af498343847\">mediump_fmat3</a>;</div>\n<div class=\"line\"><a name=\"l01153\"></a><span class=\"lineno\"> 1153</span>&#160;</div>\n<div class=\"line\"><a name=\"l01156\"></a><span class=\"lineno\"> 1156</span>&#160;        <span class=\"keyword\">typedef</span> mediump_fmat4x4 <a class=\"code\" href=\"a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9\">mediump_fmat4</a>;</div>\n<div class=\"line\"><a name=\"l01157\"></a><span class=\"lineno\"> 1157</span>&#160;</div>\n<div class=\"line\"><a name=\"l01158\"></a><span class=\"lineno\"> 1158</span>&#160;</div>\n<div class=\"line\"><a name=\"l01161\"></a><span class=\"lineno\"> 1161</span>&#160;        <span class=\"comment\">//typedef highp_f32 highp_fmat1x1;</span></div>\n<div class=\"line\"><a name=\"l01162\"></a><span class=\"lineno\"> 1162</span>&#160;</div>\n<div class=\"line\"><a name=\"l01165\"></a><span class=\"lineno\"> 1165</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad\">highp_fmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01166\"></a><span class=\"lineno\"> 1166</span>&#160;</div>\n<div class=\"line\"><a name=\"l01169\"></a><span class=\"lineno\"> 1169</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gacf111095594996fef29067b2454fccad\">highp_fmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01170\"></a><span class=\"lineno\"> 1170</span>&#160;</div>\n<div class=\"line\"><a name=\"l01173\"></a><span class=\"lineno\"> 1173</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2\">highp_fmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01174\"></a><span class=\"lineno\"> 1174</span>&#160;</div>\n<div class=\"line\"><a name=\"l01177\"></a><span class=\"lineno\"> 1177</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19\">highp_fmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01178\"></a><span class=\"lineno\"> 1178</span>&#160;</div>\n<div class=\"line\"><a name=\"l01181\"></a><span class=\"lineno\"> 1181</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e\">highp_fmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01182\"></a><span class=\"lineno\"> 1182</span>&#160;</div>\n<div class=\"line\"><a name=\"l01185\"></a><span class=\"lineno\"> 1185</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga961fac2a885907ffcf4d40daac6615c5\">highp_fmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01186\"></a><span class=\"lineno\"> 1186</span>&#160;</div>\n<div class=\"line\"><a name=\"l01189\"></a><span class=\"lineno\"> 1189</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga076961cf2d120c7168b957cb2ed107b3\">highp_fmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01190\"></a><span class=\"lineno\"> 1190</span>&#160;</div>\n<div class=\"line\"><a name=\"l01193\"></a><span class=\"lineno\"> 1193</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gae406ec670f64170a7437b5e302eeb2cb\">highp_fmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01194\"></a><span class=\"lineno\"> 1194</span>&#160;</div>\n<div class=\"line\"><a name=\"l01197\"></a><span class=\"lineno\"> 1197</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gaee80c7cd3caa0f2635058656755f6f69\">highp_fmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01198\"></a><span class=\"lineno\"> 1198</span>&#160;</div>\n<div class=\"line\"><a name=\"l01201\"></a><span class=\"lineno\"> 1201</span>&#160;        <span class=\"comment\">//typedef highp_fmat1x1 highp_fmat1;</span></div>\n<div class=\"line\"><a name=\"l01202\"></a><span class=\"lineno\"> 1202</span>&#160;</div>\n<div class=\"line\"><a name=\"l01205\"></a><span class=\"lineno\"> 1205</span>&#160;        <span class=\"keyword\">typedef</span> highp_fmat2x2 <a class=\"code\" href=\"a00304.html#gae98c88d9a7befa9b5877f49176225535\">highp_fmat2</a>;</div>\n<div class=\"line\"><a name=\"l01206\"></a><span class=\"lineno\"> 1206</span>&#160;</div>\n<div class=\"line\"><a name=\"l01209\"></a><span class=\"lineno\"> 1209</span>&#160;        <span class=\"keyword\">typedef</span> highp_fmat3x3 <a class=\"code\" href=\"a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75\">highp_fmat3</a>;</div>\n<div class=\"line\"><a name=\"l01210\"></a><span class=\"lineno\"> 1210</span>&#160;</div>\n<div class=\"line\"><a name=\"l01213\"></a><span class=\"lineno\"> 1213</span>&#160;        <span class=\"keyword\">typedef</span> highp_fmat4x4 <a class=\"code\" href=\"a00304.html#gabf28443ce0cc0959077ec39b21f32c39\">highp_fmat4</a>;</div>\n<div class=\"line\"><a name=\"l01214\"></a><span class=\"lineno\"> 1214</span>&#160;</div>\n<div class=\"line\"><a name=\"l01215\"></a><span class=\"lineno\"> 1215</span>&#160;</div>\n<div class=\"line\"><a name=\"l01218\"></a><span class=\"lineno\"> 1218</span>&#160;        <span class=\"comment\">//typedef f32 lowp_f32mat1x1;</span></div>\n<div class=\"line\"><a name=\"l01219\"></a><span class=\"lineno\"> 1219</span>&#160;</div>\n<div class=\"line\"><a name=\"l01222\"></a><span class=\"lineno\"> 1222</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga1d091b6abfba1772450e1745a06525bc\">lowp_f32mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01223\"></a><span class=\"lineno\"> 1223</span>&#160;</div>\n<div class=\"line\"><a name=\"l01226\"></a><span class=\"lineno\"> 1226</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga961ccb34cd1a5654c772c8709e001dc5\">lowp_f32mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01227\"></a><span class=\"lineno\"> 1227</span>&#160;</div>\n<div class=\"line\"><a name=\"l01230\"></a><span class=\"lineno\"> 1230</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gacc6bf0209dda0c7c14851a646071c974\">lowp_f32mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01231\"></a><span class=\"lineno\"> 1231</span>&#160;</div>\n<div class=\"line\"><a name=\"l01234\"></a><span class=\"lineno\"> 1234</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gac53f9d7ab04eace67adad026092fb1e8\">lowp_f32mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01235\"></a><span class=\"lineno\"> 1235</span>&#160;</div>\n<div class=\"line\"><a name=\"l01238\"></a><span class=\"lineno\"> 1238</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga841211b641cff1fcf861bdb14e5e4abc\">lowp_f32mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01239\"></a><span class=\"lineno\"> 1239</span>&#160;</div>\n<div class=\"line\"><a name=\"l01242\"></a><span class=\"lineno\"> 1242</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga21b1b22dec013a72656e3644baf8a1e1\">lowp_f32mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01243\"></a><span class=\"lineno\"> 1243</span>&#160;</div>\n<div class=\"line\"><a name=\"l01246\"></a><span class=\"lineno\"> 1246</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gae6f3fcb702a666de07650c149cfa845a\">lowp_f32mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01247\"></a><span class=\"lineno\"> 1247</span>&#160;</div>\n<div class=\"line\"><a name=\"l01250\"></a><span class=\"lineno\"> 1250</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gac21eda58a1475449a5709b412ebd776c\">lowp_f32mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01251\"></a><span class=\"lineno\"> 1251</span>&#160;</div>\n<div class=\"line\"><a name=\"l01254\"></a><span class=\"lineno\"> 1254</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, lowp&gt; <a class=\"code\" href=\"a00304.html#ga4143d129898f91545948c46859adce44\">lowp_f32mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01255\"></a><span class=\"lineno\"> 1255</span>&#160;</div>\n<div class=\"line\"><a name=\"l01258\"></a><span class=\"lineno\"> 1258</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f32, lowp&gt; lowp_f32mat1;</span></div>\n<div class=\"line\"><a name=\"l01259\"></a><span class=\"lineno\"> 1259</span>&#160;</div>\n<div class=\"line\"><a name=\"l01262\"></a><span class=\"lineno\"> 1262</span>&#160;        <span class=\"keyword\">typedef</span> lowp_f32mat2x2 <a class=\"code\" href=\"a00304.html#ga52409bc6d4a2ce3421526c069220d685\">lowp_f32mat2</a>;</div>\n<div class=\"line\"><a name=\"l01263\"></a><span class=\"lineno\"> 1263</span>&#160;</div>\n<div class=\"line\"><a name=\"l01266\"></a><span class=\"lineno\"> 1266</span>&#160;        <span class=\"keyword\">typedef</span> lowp_f32mat3x3 <a class=\"code\" href=\"a00304.html#ga4187f89f196505b40e63f516139511e5\">lowp_f32mat3</a>;</div>\n<div class=\"line\"><a name=\"l01267\"></a><span class=\"lineno\"> 1267</span>&#160;</div>\n<div class=\"line\"><a name=\"l01270\"></a><span class=\"lineno\"> 1270</span>&#160;        <span class=\"keyword\">typedef</span> lowp_f32mat4x4 <a class=\"code\" href=\"a00304.html#ga766aed2871e6173a81011a877f398f04\">lowp_f32mat4</a>;</div>\n<div class=\"line\"><a name=\"l01271\"></a><span class=\"lineno\"> 1271</span>&#160;</div>\n<div class=\"line\"><a name=\"l01272\"></a><span class=\"lineno\"> 1272</span>&#160;</div>\n<div class=\"line\"><a name=\"l01275\"></a><span class=\"lineno\"> 1275</span>&#160;        <span class=\"comment\">//typedef f32 mediump_f32mat1x1;</span></div>\n<div class=\"line\"><a name=\"l01276\"></a><span class=\"lineno\"> 1276</span>&#160;</div>\n<div class=\"line\"><a name=\"l01279\"></a><span class=\"lineno\"> 1279</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f\">mediump_f32mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01280\"></a><span class=\"lineno\"> 1280</span>&#160;</div>\n<div class=\"line\"><a name=\"l01283\"></a><span class=\"lineno\"> 1283</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf\">mediump_f32mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01284\"></a><span class=\"lineno\"> 1284</span>&#160;</div>\n<div class=\"line\"><a name=\"l01287\"></a><span class=\"lineno\"> 1287</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1\">mediump_f32mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01288\"></a><span class=\"lineno\"> 1288</span>&#160;</div>\n<div class=\"line\"><a name=\"l01291\"></a><span class=\"lineno\"> 1291</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f\">mediump_f32mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01292\"></a><span class=\"lineno\"> 1292</span>&#160;</div>\n<div class=\"line\"><a name=\"l01295\"></a><span class=\"lineno\"> 1295</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f\">mediump_f32mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01296\"></a><span class=\"lineno\"> 1296</span>&#160;</div>\n<div class=\"line\"><a name=\"l01299\"></a><span class=\"lineno\"> 1299</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#ga8df705d775b776f5ae6b39e2ab892899\">mediump_f32mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01300\"></a><span class=\"lineno\"> 1300</span>&#160;</div>\n<div class=\"line\"><a name=\"l01303\"></a><span class=\"lineno\"> 1303</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f\">mediump_f32mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01304\"></a><span class=\"lineno\"> 1304</span>&#160;</div>\n<div class=\"line\"><a name=\"l01307\"></a><span class=\"lineno\"> 1307</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gade108f16633cf95fa500b5b8c36c8b00\">mediump_f32mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01308\"></a><span class=\"lineno\"> 1308</span>&#160;</div>\n<div class=\"line\"><a name=\"l01311\"></a><span class=\"lineno\"> 1311</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, mediump&gt; <a class=\"code\" href=\"a00304.html#ga936e95b881ecd2d109459ca41913fa99\">mediump_f32mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01312\"></a><span class=\"lineno\"> 1312</span>&#160;</div>\n<div class=\"line\"><a name=\"l01315\"></a><span class=\"lineno\"> 1315</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f32, mediump&gt; f32mat1;</span></div>\n<div class=\"line\"><a name=\"l01316\"></a><span class=\"lineno\"> 1316</span>&#160;</div>\n<div class=\"line\"><a name=\"l01319\"></a><span class=\"lineno\"> 1319</span>&#160;        <span class=\"keyword\">typedef</span> mediump_f32mat2x2 <a class=\"code\" href=\"a00304.html#gaf9020c6176a75bc84828ab01ea7dac25\">mediump_f32mat2</a>;</div>\n<div class=\"line\"><a name=\"l01320\"></a><span class=\"lineno\"> 1320</span>&#160;</div>\n<div class=\"line\"><a name=\"l01323\"></a><span class=\"lineno\"> 1323</span>&#160;        <span class=\"keyword\">typedef</span> mediump_f32mat3x3 <a class=\"code\" href=\"a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8\">mediump_f32mat3</a>;</div>\n<div class=\"line\"><a name=\"l01324\"></a><span class=\"lineno\"> 1324</span>&#160;</div>\n<div class=\"line\"><a name=\"l01327\"></a><span class=\"lineno\"> 1327</span>&#160;        <span class=\"keyword\">typedef</span> mediump_f32mat4x4 <a class=\"code\" href=\"a00304.html#ga4491baaebbc46a20f1cb5da985576bf4\">mediump_f32mat4</a>;</div>\n<div class=\"line\"><a name=\"l01328\"></a><span class=\"lineno\"> 1328</span>&#160;</div>\n<div class=\"line\"><a name=\"l01329\"></a><span class=\"lineno\"> 1329</span>&#160;</div>\n<div class=\"line\"><a name=\"l01332\"></a><span class=\"lineno\"> 1332</span>&#160;        <span class=\"comment\">//typedef f32 highp_f32mat1x1;</span></div>\n<div class=\"line\"><a name=\"l01333\"></a><span class=\"lineno\"> 1333</span>&#160;</div>\n<div class=\"line\"><a name=\"l01336\"></a><span class=\"lineno\"> 1336</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968\">highp_f32mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01337\"></a><span class=\"lineno\"> 1337</span>&#160;</div>\n<div class=\"line\"><a name=\"l01340\"></a><span class=\"lineno\"> 1340</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga0aeb5cb001473b08c88175012708a379\">highp_f32mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01341\"></a><span class=\"lineno\"> 1341</span>&#160;</div>\n<div class=\"line\"><a name=\"l01344\"></a><span class=\"lineno\"> 1344</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga88938ee1e7981fa3402e88da6ad74531\">highp_f32mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01345\"></a><span class=\"lineno\"> 1345</span>&#160;</div>\n<div class=\"line\"><a name=\"l01348\"></a><span class=\"lineno\"> 1348</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga36537e701456f12c20e73f469cac4967\">highp_f32mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01349\"></a><span class=\"lineno\"> 1349</span>&#160;</div>\n<div class=\"line\"><a name=\"l01352\"></a><span class=\"lineno\"> 1352</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gaab691ae40c37976d268d8cac0096e0e1\">highp_f32mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01353\"></a><span class=\"lineno\"> 1353</span>&#160;</div>\n<div class=\"line\"><a name=\"l01356\"></a><span class=\"lineno\"> 1356</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gaa5086dbd6efb272d13fc88829330861d\">highp_f32mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01357\"></a><span class=\"lineno\"> 1357</span>&#160;</div>\n<div class=\"line\"><a name=\"l01360\"></a><span class=\"lineno\"> 1360</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f\">highp_f32mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01361\"></a><span class=\"lineno\"> 1361</span>&#160;</div>\n<div class=\"line\"><a name=\"l01364\"></a><span class=\"lineno\"> 1364</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59\">highp_f32mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01365\"></a><span class=\"lineno\"> 1365</span>&#160;</div>\n<div class=\"line\"><a name=\"l01368\"></a><span class=\"lineno\"> 1368</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, highp&gt; <a class=\"code\" href=\"a00304.html#gaf1b712b97b2322685fbbed28febe5f84\">highp_f32mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01369\"></a><span class=\"lineno\"> 1369</span>&#160;</div>\n<div class=\"line\"><a name=\"l01372\"></a><span class=\"lineno\"> 1372</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f32, highp&gt; f32mat1;</span></div>\n<div class=\"line\"><a name=\"l01373\"></a><span class=\"lineno\"> 1373</span>&#160;</div>\n<div class=\"line\"><a name=\"l01376\"></a><span class=\"lineno\"> 1376</span>&#160;        <span class=\"keyword\">typedef</span> highp_f32mat2x2 <a class=\"code\" href=\"a00304.html#ga298f7d4d273678d0282812368da27fda\">highp_f32mat2</a>;</div>\n<div class=\"line\"><a name=\"l01377\"></a><span class=\"lineno\"> 1377</span>&#160;</div>\n<div class=\"line\"><a name=\"l01380\"></a><span class=\"lineno\"> 1380</span>&#160;        <span class=\"keyword\">typedef</span> highp_f32mat3x3 <a class=\"code\" href=\"a00304.html#ga24f9ef3263b1638564713892cc37981f\">highp_f32mat3</a>;</div>\n<div class=\"line\"><a name=\"l01381\"></a><span class=\"lineno\"> 1381</span>&#160;</div>\n<div class=\"line\"><a name=\"l01384\"></a><span class=\"lineno\"> 1384</span>&#160;        <span class=\"keyword\">typedef</span> highp_f32mat4x4 <a class=\"code\" href=\"a00304.html#ga14c90ca49885723f51d06e295587236f\">highp_f32mat4</a>;</div>\n<div class=\"line\"><a name=\"l01385\"></a><span class=\"lineno\"> 1385</span>&#160;</div>\n<div class=\"line\"><a name=\"l01386\"></a><span class=\"lineno\"> 1386</span>&#160;</div>\n<div class=\"line\"><a name=\"l01389\"></a><span class=\"lineno\"> 1389</span>&#160;        <span class=\"comment\">//typedef f64 lowp_f64mat1x1;</span></div>\n<div class=\"line\"><a name=\"l01390\"></a><span class=\"lineno\"> 1390</span>&#160;</div>\n<div class=\"line\"><a name=\"l01393\"></a><span class=\"lineno\"> 1393</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#ga771fda9109933db34f808d92b9b84d7e\">lowp_f64mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01394\"></a><span class=\"lineno\"> 1394</span>&#160;</div>\n<div class=\"line\"><a name=\"l01397\"></a><span class=\"lineno\"> 1397</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#ga39e90adcffe33264bd608fa9c6bd184b\">lowp_f64mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01398\"></a><span class=\"lineno\"> 1398</span>&#160;</div>\n<div class=\"line\"><a name=\"l01401\"></a><span class=\"lineno\"> 1401</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#ga50265a202fbfe0a25fc70066c31d9336\">lowp_f64mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01402\"></a><span class=\"lineno\"> 1402</span>&#160;</div>\n<div class=\"line\"><a name=\"l01405\"></a><span class=\"lineno\"> 1405</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad\">lowp_f64mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01406\"></a><span class=\"lineno\"> 1406</span>&#160;</div>\n<div class=\"line\"><a name=\"l01409\"></a><span class=\"lineno\"> 1409</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gac8f8a12ee03105ef8861dc652434e3b7\">lowp_f64mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01410\"></a><span class=\"lineno\"> 1410</span>&#160;</div>\n<div class=\"line\"><a name=\"l01413\"></a><span class=\"lineno\"> 1413</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gade8d1edfb23996ab6c622e65e3893271\">lowp_f64mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01414\"></a><span class=\"lineno\"> 1414</span>&#160;</div>\n<div class=\"line\"><a name=\"l01417\"></a><span class=\"lineno\"> 1417</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gab0cecb80fd106bc369b9e46a165815ce\">lowp_f64mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01418\"></a><span class=\"lineno\"> 1418</span>&#160;</div>\n<div class=\"line\"><a name=\"l01421\"></a><span class=\"lineno\"> 1421</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gae731613b25db3a5ef5a05d21e57a57d3\">lowp_f64mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01422\"></a><span class=\"lineno\"> 1422</span>&#160;</div>\n<div class=\"line\"><a name=\"l01425\"></a><span class=\"lineno\"> 1425</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, lowp&gt; <a class=\"code\" href=\"a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95\">lowp_f64mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01426\"></a><span class=\"lineno\"> 1426</span>&#160;</div>\n<div class=\"line\"><a name=\"l01429\"></a><span class=\"lineno\"> 1429</span>&#160;        <span class=\"comment\">//typedef lowp_f64mat1x1 lowp_f64mat1;</span></div>\n<div class=\"line\"><a name=\"l01430\"></a><span class=\"lineno\"> 1430</span>&#160;</div>\n<div class=\"line\"><a name=\"l01433\"></a><span class=\"lineno\"> 1433</span>&#160;        <span class=\"keyword\">typedef</span> lowp_f64mat2x2 <a class=\"code\" href=\"a00304.html#gafc730f6b4242763b0eda0ffa25150292\">lowp_f64mat2</a>;</div>\n<div class=\"line\"><a name=\"l01434\"></a><span class=\"lineno\"> 1434</span>&#160;</div>\n<div class=\"line\"><a name=\"l01437\"></a><span class=\"lineno\"> 1437</span>&#160;        <span class=\"keyword\">typedef</span> lowp_f64mat3x3 <a class=\"code\" href=\"a00304.html#ga58119a41d143ebaea0df70fe882e8a40\">lowp_f64mat3</a>;</div>\n<div class=\"line\"><a name=\"l01438\"></a><span class=\"lineno\"> 1438</span>&#160;</div>\n<div class=\"line\"><a name=\"l01441\"></a><span class=\"lineno\"> 1441</span>&#160;        <span class=\"keyword\">typedef</span> lowp_f64mat4x4 <a class=\"code\" href=\"a00304.html#ga7451266e67794bd1125163502bc4a570\">lowp_f64mat4</a>;</div>\n<div class=\"line\"><a name=\"l01442\"></a><span class=\"lineno\"> 1442</span>&#160;</div>\n<div class=\"line\"><a name=\"l01443\"></a><span class=\"lineno\"> 1443</span>&#160;</div>\n<div class=\"line\"><a name=\"l01446\"></a><span class=\"lineno\"> 1446</span>&#160;        <span class=\"comment\">//typedef f64 Highp_f64mat1x1;</span></div>\n<div class=\"line\"><a name=\"l01447\"></a><span class=\"lineno\"> 1447</span>&#160;</div>\n<div class=\"line\"><a name=\"l01450\"></a><span class=\"lineno\"> 1450</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#ga4fd527644cccbca4cb205320eab026f3\">mediump_f64mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01451\"></a><span class=\"lineno\"> 1451</span>&#160;</div>\n<div class=\"line\"><a name=\"l01454\"></a><span class=\"lineno\"> 1454</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54\">mediump_f64mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01455\"></a><span class=\"lineno\"> 1455</span>&#160;</div>\n<div class=\"line\"><a name=\"l01458\"></a><span class=\"lineno\"> 1458</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#gaf306dd69e53633636aee38cea79d4cb7\">mediump_f64mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01459\"></a><span class=\"lineno\"> 1459</span>&#160;</div>\n<div class=\"line\"><a name=\"l01462\"></a><span class=\"lineno\"> 1462</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#gacd926d36a72433f6cac51dd60fa13107\">mediump_f64mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01463\"></a><span class=\"lineno\"> 1463</span>&#160;</div>\n<div class=\"line\"><a name=\"l01466\"></a><span class=\"lineno\"> 1466</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e\">mediump_f64mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01467\"></a><span class=\"lineno\"> 1467</span>&#160;</div>\n<div class=\"line\"><a name=\"l01470\"></a><span class=\"lineno\"> 1470</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2\">mediump_f64mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01471\"></a><span class=\"lineno\"> 1471</span>&#160;</div>\n<div class=\"line\"><a name=\"l01474\"></a><span class=\"lineno\"> 1474</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#ga17d36f0ea22314117e1cec9594b33945\">mediump_f64mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01475\"></a><span class=\"lineno\"> 1475</span>&#160;</div>\n<div class=\"line\"><a name=\"l01478\"></a><span class=\"lineno\"> 1478</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d\">mediump_f64mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01479\"></a><span class=\"lineno\"> 1479</span>&#160;</div>\n<div class=\"line\"><a name=\"l01482\"></a><span class=\"lineno\"> 1482</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, mediump&gt; <a class=\"code\" href=\"a00304.html#ga66edb8de17b9235029472f043ae107e9\">mediump_f64mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01483\"></a><span class=\"lineno\"> 1483</span>&#160;</div>\n<div class=\"line\"><a name=\"l01486\"></a><span class=\"lineno\"> 1486</span>&#160;        <span class=\"comment\">//typedef mediump_f64mat1x1 mediump_f64mat1;</span></div>\n<div class=\"line\"><a name=\"l01487\"></a><span class=\"lineno\"> 1487</span>&#160;</div>\n<div class=\"line\"><a name=\"l01490\"></a><span class=\"lineno\"> 1490</span>&#160;        <span class=\"keyword\">typedef</span> mediump_f64mat2x2 <a class=\"code\" href=\"a00304.html#gac1281da5ded55047e8892b0e1f1ae965\">mediump_f64mat2</a>;</div>\n<div class=\"line\"><a name=\"l01491\"></a><span class=\"lineno\"> 1491</span>&#160;</div>\n<div class=\"line\"><a name=\"l01494\"></a><span class=\"lineno\"> 1494</span>&#160;        <span class=\"keyword\">typedef</span> mediump_f64mat3x3 <a class=\"code\" href=\"a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776\">mediump_f64mat3</a>;</div>\n<div class=\"line\"><a name=\"l01495\"></a><span class=\"lineno\"> 1495</span>&#160;</div>\n<div class=\"line\"><a name=\"l01498\"></a><span class=\"lineno\"> 1498</span>&#160;        <span class=\"keyword\">typedef</span> mediump_f64mat4x4 <a class=\"code\" href=\"a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5\">mediump_f64mat4</a>;</div>\n<div class=\"line\"><a name=\"l01499\"></a><span class=\"lineno\"> 1499</span>&#160;</div>\n<div class=\"line\"><a name=\"l01502\"></a><span class=\"lineno\"> 1502</span>&#160;        <span class=\"comment\">//typedef f64 highp_f64mat1x1;</span></div>\n<div class=\"line\"><a name=\"l01503\"></a><span class=\"lineno\"> 1503</span>&#160;</div>\n<div class=\"line\"><a name=\"l01506\"></a><span class=\"lineno\"> 1506</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga773ea237a051827cfc20de960bc73ff0\">highp_f64mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01507\"></a><span class=\"lineno\"> 1507</span>&#160;</div>\n<div class=\"line\"><a name=\"l01510\"></a><span class=\"lineno\"> 1510</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga8342c7469384c6d769cacc9e309278d9\">highp_f64mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01511\"></a><span class=\"lineno\"> 1511</span>&#160;</div>\n<div class=\"line\"><a name=\"l01514\"></a><span class=\"lineno\"> 1514</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga5a67a7440b9c0d1538533540f99036a5\">highp_f64mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01515\"></a><span class=\"lineno\"> 1515</span>&#160;</div>\n<div class=\"line\"><a name=\"l01518\"></a><span class=\"lineno\"> 1518</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a\">highp_f64mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01519\"></a><span class=\"lineno\"> 1519</span>&#160;</div>\n<div class=\"line\"><a name=\"l01522\"></a><span class=\"lineno\"> 1522</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4\">highp_f64mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01523\"></a><span class=\"lineno\"> 1523</span>&#160;</div>\n<div class=\"line\"><a name=\"l01526\"></a><span class=\"lineno\"> 1526</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f64, highp&gt; <a class=\"code\" href=\"a00304.html#gad310b1dddeec9ec837a104e7db8de580\">highp_f64mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01527\"></a><span class=\"lineno\"> 1527</span>&#160;</div>\n<div class=\"line\"><a name=\"l01530\"></a><span class=\"lineno\"> 1530</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga58c4631421e323e252fc716b6103e38c\">highp_f64mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01531\"></a><span class=\"lineno\"> 1531</span>&#160;</div>\n<div class=\"line\"><a name=\"l01534\"></a><span class=\"lineno\"> 1534</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f64, highp&gt; <a class=\"code\" href=\"a00304.html#gae94823d65648e44d972863c6caa13103\">highp_f64mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01535\"></a><span class=\"lineno\"> 1535</span>&#160;</div>\n<div class=\"line\"><a name=\"l01538\"></a><span class=\"lineno\"> 1538</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, highp&gt; <a class=\"code\" href=\"a00304.html#ga09a2374b725c4246d263ee36fb66434c\">highp_f64mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01539\"></a><span class=\"lineno\"> 1539</span>&#160;</div>\n<div class=\"line\"><a name=\"l01542\"></a><span class=\"lineno\"> 1542</span>&#160;        <span class=\"comment\">//typedef highp_f64mat1x1 highp_f64mat1;</span></div>\n<div class=\"line\"><a name=\"l01543\"></a><span class=\"lineno\"> 1543</span>&#160;</div>\n<div class=\"line\"><a name=\"l01546\"></a><span class=\"lineno\"> 1546</span>&#160;        <span class=\"keyword\">typedef</span> highp_f64mat2x2 <a class=\"code\" href=\"a00304.html#gaf7adb92ce8de0afaff01436b039fd924\">highp_f64mat2</a>;</div>\n<div class=\"line\"><a name=\"l01547\"></a><span class=\"lineno\"> 1547</span>&#160;</div>\n<div class=\"line\"><a name=\"l01550\"></a><span class=\"lineno\"> 1550</span>&#160;        <span class=\"keyword\">typedef</span> highp_f64mat3x3 <a class=\"code\" href=\"a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546\">highp_f64mat3</a>;</div>\n<div class=\"line\"><a name=\"l01551\"></a><span class=\"lineno\"> 1551</span>&#160;</div>\n<div class=\"line\"><a name=\"l01554\"></a><span class=\"lineno\"> 1554</span>&#160;        <span class=\"keyword\">typedef</span> highp_f64mat4x4 <a class=\"code\" href=\"a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5\">highp_f64mat4</a>;</div>\n<div class=\"line\"><a name=\"l01555\"></a><span class=\"lineno\"> 1555</span>&#160;</div>\n<div class=\"line\"><a name=\"l01556\"></a><span class=\"lineno\"> 1556</span>&#160;</div>\n<div class=\"line\"><a name=\"l01557\"></a><span class=\"lineno\"> 1557</span>&#160;</div>\n<div class=\"line\"><a name=\"l01558\"></a><span class=\"lineno\"> 1558</span>&#160;</div>\n<div class=\"line\"><a name=\"l01561\"></a><span class=\"lineno\"> 1561</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u8, lowp&gt; <a class=\"code\" href=\"a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec\">lowp_u8vec1</a>;</div>\n<div class=\"line\"><a name=\"l01562\"></a><span class=\"lineno\"> 1562</span>&#160;</div>\n<div class=\"line\"><a name=\"l01565\"></a><span class=\"lineno\"> 1565</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u8, lowp&gt; <a class=\"code\" href=\"a00304.html#gae6f63fa38635431e51a8f2602f15c566\">lowp_u8vec2</a>;</div>\n<div class=\"line\"><a name=\"l01566\"></a><span class=\"lineno\"> 1566</span>&#160;</div>\n<div class=\"line\"><a name=\"l01569\"></a><span class=\"lineno\"> 1569</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u8, lowp&gt; <a class=\"code\" href=\"a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd\">lowp_u8vec3</a>;</div>\n<div class=\"line\"><a name=\"l01570\"></a><span class=\"lineno\"> 1570</span>&#160;</div>\n<div class=\"line\"><a name=\"l01573\"></a><span class=\"lineno\"> 1573</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u8, lowp&gt; <a class=\"code\" href=\"a00304.html#ga9910927f3a4d1addb3da6a82542a8287\">lowp_u8vec4</a>;</div>\n<div class=\"line\"><a name=\"l01574\"></a><span class=\"lineno\"> 1574</span>&#160;</div>\n<div class=\"line\"><a name=\"l01575\"></a><span class=\"lineno\"> 1575</span>&#160;</div>\n<div class=\"line\"><a name=\"l01578\"></a><span class=\"lineno\"> 1578</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u8, mediump&gt; <a class=\"code\" href=\"a00304.html#ga4a43050843b141bdc7e85437faef6f55\">mediump_u8vec1</a>;</div>\n<div class=\"line\"><a name=\"l01579\"></a><span class=\"lineno\"> 1579</span>&#160;</div>\n<div class=\"line\"><a name=\"l01582\"></a><span class=\"lineno\"> 1582</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u8, mediump&gt; <a class=\"code\" href=\"a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194\">mediump_u8vec2</a>;</div>\n<div class=\"line\"><a name=\"l01583\"></a><span class=\"lineno\"> 1583</span>&#160;</div>\n<div class=\"line\"><a name=\"l01586\"></a><span class=\"lineno\"> 1586</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u8, mediump&gt; <a class=\"code\" href=\"a00304.html#gaddc6f7748b699254942c5216b68f8f7f\">mediump_u8vec3</a>;</div>\n<div class=\"line\"><a name=\"l01587\"></a><span class=\"lineno\"> 1587</span>&#160;</div>\n<div class=\"line\"><a name=\"l01590\"></a><span class=\"lineno\"> 1590</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u8, mediump&gt; <a class=\"code\" href=\"a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b\">mediump_u8vec4</a>;</div>\n<div class=\"line\"><a name=\"l01591\"></a><span class=\"lineno\"> 1591</span>&#160;</div>\n<div class=\"line\"><a name=\"l01592\"></a><span class=\"lineno\"> 1592</span>&#160;</div>\n<div class=\"line\"><a name=\"l01595\"></a><span class=\"lineno\"> 1595</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u8, highp&gt; <a class=\"code\" href=\"a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2\">highp_u8vec1</a>;</div>\n<div class=\"line\"><a name=\"l01596\"></a><span class=\"lineno\"> 1596</span>&#160;</div>\n<div class=\"line\"><a name=\"l01599\"></a><span class=\"lineno\"> 1599</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u8, highp&gt; <a class=\"code\" href=\"a00304.html#ga27585b7c3ab300059f11fcba465f6fd2\">highp_u8vec2</a>;</div>\n<div class=\"line\"><a name=\"l01600\"></a><span class=\"lineno\"> 1600</span>&#160;</div>\n<div class=\"line\"><a name=\"l01603\"></a><span class=\"lineno\"> 1603</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u8, highp&gt; <a class=\"code\" href=\"a00304.html#ga45721c13b956eb691cbd6c6c1429167a\">highp_u8vec3</a>;</div>\n<div class=\"line\"><a name=\"l01604\"></a><span class=\"lineno\"> 1604</span>&#160;</div>\n<div class=\"line\"><a name=\"l01607\"></a><span class=\"lineno\"> 1607</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u8, highp&gt; <a class=\"code\" href=\"a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060\">highp_u8vec4</a>;</div>\n<div class=\"line\"><a name=\"l01608\"></a><span class=\"lineno\"> 1608</span>&#160;</div>\n<div class=\"line\"><a name=\"l01609\"></a><span class=\"lineno\"> 1609</span>&#160;</div>\n<div class=\"line\"><a name=\"l01610\"></a><span class=\"lineno\"> 1610</span>&#160;</div>\n<div class=\"line\"><a name=\"l01613\"></a><span class=\"lineno\"> 1613</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u8, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">u8vec1</a>;</div>\n<div class=\"line\"><a name=\"l01614\"></a><span class=\"lineno\"> 1614</span>&#160;</div>\n<div class=\"line\"><a name=\"l01617\"></a><span class=\"lineno\"> 1617</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u8, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a>;</div>\n<div class=\"line\"><a name=\"l01618\"></a><span class=\"lineno\"> 1618</span>&#160;</div>\n<div class=\"line\"><a name=\"l01621\"></a><span class=\"lineno\"> 1621</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u8, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">u8vec3</a>;</div>\n<div class=\"line\"><a name=\"l01622\"></a><span class=\"lineno\"> 1622</span>&#160;</div>\n<div class=\"line\"><a name=\"l01625\"></a><span class=\"lineno\"> 1625</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u8, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">u8vec4</a>;</div>\n<div class=\"line\"><a name=\"l01626\"></a><span class=\"lineno\"> 1626</span>&#160;</div>\n<div class=\"line\"><a name=\"l01627\"></a><span class=\"lineno\"> 1627</span>&#160;</div>\n<div class=\"line\"><a name=\"l01628\"></a><span class=\"lineno\"> 1628</span>&#160;</div>\n<div class=\"line\"><a name=\"l01629\"></a><span class=\"lineno\"> 1629</span>&#160;</div>\n<div class=\"line\"><a name=\"l01632\"></a><span class=\"lineno\"> 1632</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u16, lowp&gt;               <a class=\"code\" href=\"a00304.html#gaa6aab4ee7189b86716f5d7015d43021d\">lowp_u16vec1</a>;</div>\n<div class=\"line\"><a name=\"l01633\"></a><span class=\"lineno\"> 1633</span>&#160;</div>\n<div class=\"line\"><a name=\"l01636\"></a><span class=\"lineno\"> 1636</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u16, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga2a7d997da9ac29cb931e35bd399f58df\">lowp_u16vec2</a>;</div>\n<div class=\"line\"><a name=\"l01637\"></a><span class=\"lineno\"> 1637</span>&#160;</div>\n<div class=\"line\"><a name=\"l01640\"></a><span class=\"lineno\"> 1640</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u16, lowp&gt;               <a class=\"code\" href=\"a00304.html#gac0253db6c3d3bae1f591676307a9dd8c\">lowp_u16vec3</a>;</div>\n<div class=\"line\"><a name=\"l01641\"></a><span class=\"lineno\"> 1641</span>&#160;</div>\n<div class=\"line\"><a name=\"l01644\"></a><span class=\"lineno\"> 1644</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u16, lowp&gt;               <a class=\"code\" href=\"a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1\">lowp_u16vec4</a>;</div>\n<div class=\"line\"><a name=\"l01645\"></a><span class=\"lineno\"> 1645</span>&#160;</div>\n<div class=\"line\"><a name=\"l01646\"></a><span class=\"lineno\"> 1646</span>&#160;</div>\n<div class=\"line\"><a name=\"l01649\"></a><span class=\"lineno\"> 1649</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u16, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga400ce8cc566de093a9b28e59e220d6e4\">mediump_u16vec1</a>;</div>\n<div class=\"line\"><a name=\"l01650\"></a><span class=\"lineno\"> 1650</span>&#160;</div>\n<div class=\"line\"><a name=\"l01653\"></a><span class=\"lineno\"> 1653</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u16, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1\">mediump_u16vec2</a>;</div>\n<div class=\"line\"><a name=\"l01654\"></a><span class=\"lineno\"> 1654</span>&#160;</div>\n<div class=\"line\"><a name=\"l01657\"></a><span class=\"lineno\"> 1657</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u16, mediump&gt;            <a class=\"code\" href=\"a00304.html#gac9ba20234b0c3751d45ce575fc71e551\">mediump_u16vec3</a>;</div>\n<div class=\"line\"><a name=\"l01658\"></a><span class=\"lineno\"> 1658</span>&#160;</div>\n<div class=\"line\"><a name=\"l01661\"></a><span class=\"lineno\"> 1661</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u16, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga5793393686ce5bd2d5968ff9144762b8\">mediump_u16vec4</a>;</div>\n<div class=\"line\"><a name=\"l01662\"></a><span class=\"lineno\"> 1662</span>&#160;</div>\n<div class=\"line\"><a name=\"l01663\"></a><span class=\"lineno\"> 1663</span>&#160;</div>\n<div class=\"line\"><a name=\"l01666\"></a><span class=\"lineno\"> 1666</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u16, highp&gt;              <a class=\"code\" href=\"a00304.html#gad064202b4cf9a2972475c03de657cb39\">highp_u16vec1</a>;</div>\n<div class=\"line\"><a name=\"l01667\"></a><span class=\"lineno\"> 1667</span>&#160;</div>\n<div class=\"line\"><a name=\"l01670\"></a><span class=\"lineno\"> 1670</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159\">highp_u16vec2</a>;</div>\n<div class=\"line\"><a name=\"l01671\"></a><span class=\"lineno\"> 1671</span>&#160;</div>\n<div class=\"line\"><a name=\"l01674\"></a><span class=\"lineno\"> 1674</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u16, highp&gt;              <a class=\"code\" href=\"a00304.html#gacfd806749008f0ade6ac4bb9dd91082f\">highp_u16vec3</a>;</div>\n<div class=\"line\"><a name=\"l01675\"></a><span class=\"lineno\"> 1675</span>&#160;</div>\n<div class=\"line\"><a name=\"l01678\"></a><span class=\"lineno\"> 1678</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u16, highp&gt;              <a class=\"code\" href=\"a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61\">highp_u16vec4</a>;</div>\n<div class=\"line\"><a name=\"l01679\"></a><span class=\"lineno\"> 1679</span>&#160;</div>\n<div class=\"line\"><a name=\"l01680\"></a><span class=\"lineno\"> 1680</span>&#160;</div>\n<div class=\"line\"><a name=\"l01681\"></a><span class=\"lineno\"> 1681</span>&#160;</div>\n<div class=\"line\"><a name=\"l01682\"></a><span class=\"lineno\"> 1682</span>&#160;</div>\n<div class=\"line\"><a name=\"l01685\"></a><span class=\"lineno\"> 1685</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u16, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">u16vec1</a>;</div>\n<div class=\"line\"><a name=\"l01686\"></a><span class=\"lineno\"> 1686</span>&#160;</div>\n<div class=\"line\"><a name=\"l01689\"></a><span class=\"lineno\"> 1689</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u16, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a>;</div>\n<div class=\"line\"><a name=\"l01690\"></a><span class=\"lineno\"> 1690</span>&#160;</div>\n<div class=\"line\"><a name=\"l01693\"></a><span class=\"lineno\"> 1693</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u16, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">u16vec3</a>;</div>\n<div class=\"line\"><a name=\"l01694\"></a><span class=\"lineno\"> 1694</span>&#160;</div>\n<div class=\"line\"><a name=\"l01697\"></a><span class=\"lineno\"> 1697</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u16, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">u16vec4</a>;</div>\n<div class=\"line\"><a name=\"l01698\"></a><span class=\"lineno\"> 1698</span>&#160;</div>\n<div class=\"line\"><a name=\"l01699\"></a><span class=\"lineno\"> 1699</span>&#160;</div>\n<div class=\"line\"><a name=\"l01700\"></a><span class=\"lineno\"> 1700</span>&#160;</div>\n<div class=\"line\"><a name=\"l01703\"></a><span class=\"lineno\"> 1703</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4\">lowp_u32vec1</a>;</div>\n<div class=\"line\"><a name=\"l01704\"></a><span class=\"lineno\"> 1704</span>&#160;</div>\n<div class=\"line\"><a name=\"l01707\"></a><span class=\"lineno\"> 1707</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gaf7e286e81347011e257ee779524e73b9\">lowp_u32vec2</a>;</div>\n<div class=\"line\"><a name=\"l01708\"></a><span class=\"lineno\"> 1708</span>&#160;</div>\n<div class=\"line\"><a name=\"l01711\"></a><span class=\"lineno\"> 1711</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, lowp&gt;               <a class=\"code\" href=\"a00304.html#gad3ad390560a671b1f676fbf03cd3aa15\">lowp_u32vec3</a>;</div>\n<div class=\"line\"><a name=\"l01712\"></a><span class=\"lineno\"> 1712</span>&#160;</div>\n<div class=\"line\"><a name=\"l01715\"></a><span class=\"lineno\"> 1715</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga4502885718742aa238c36a312c3f3f20\">lowp_u32vec4</a>;</div>\n<div class=\"line\"><a name=\"l01716\"></a><span class=\"lineno\"> 1716</span>&#160;</div>\n<div class=\"line\"><a name=\"l01717\"></a><span class=\"lineno\"> 1717</span>&#160;</div>\n<div class=\"line\"><a name=\"l01720\"></a><span class=\"lineno\"> 1720</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee\">mediump_u32vec1</a>;</div>\n<div class=\"line\"><a name=\"l01721\"></a><span class=\"lineno\"> 1721</span>&#160;</div>\n<div class=\"line\"><a name=\"l01724\"></a><span class=\"lineno\"> 1724</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga94f74851fce338549c705b5f0d601c4f\">mediump_u32vec2</a>;</div>\n<div class=\"line\"><a name=\"l01725\"></a><span class=\"lineno\"> 1725</span>&#160;</div>\n<div class=\"line\"><a name=\"l01728\"></a><span class=\"lineno\"> 1728</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga012c24c8fc69707b90260474c70275a2\">mediump_u32vec3</a>;</div>\n<div class=\"line\"><a name=\"l01729\"></a><span class=\"lineno\"> 1729</span>&#160;</div>\n<div class=\"line\"><a name=\"l01732\"></a><span class=\"lineno\"> 1732</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a\">mediump_u32vec4</a>;</div>\n<div class=\"line\"><a name=\"l01733\"></a><span class=\"lineno\"> 1733</span>&#160;</div>\n<div class=\"line\"><a name=\"l01734\"></a><span class=\"lineno\"> 1734</span>&#160;</div>\n<div class=\"line\"><a name=\"l01737\"></a><span class=\"lineno\"> 1737</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3\">highp_u32vec1</a>;</div>\n<div class=\"line\"><a name=\"l01738\"></a><span class=\"lineno\"> 1738</span>&#160;</div>\n<div class=\"line\"><a name=\"l01741\"></a><span class=\"lineno\"> 1741</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga2f256334f83fba4c2d219e414b51df6c\">highp_u32vec2</a>;</div>\n<div class=\"line\"><a name=\"l01742\"></a><span class=\"lineno\"> 1742</span>&#160;</div>\n<div class=\"line\"><a name=\"l01745\"></a><span class=\"lineno\"> 1745</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, highp&gt;              <a class=\"code\" href=\"a00304.html#gaf14d7a50502464e7cbfa074f24684cb1\">highp_u32vec3</a>;</div>\n<div class=\"line\"><a name=\"l01746\"></a><span class=\"lineno\"> 1746</span>&#160;</div>\n<div class=\"line\"><a name=\"l01749\"></a><span class=\"lineno\"> 1749</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, highp&gt;              <a class=\"code\" href=\"a00304.html#ga22166f0da65038b447f3c5e534fff1c2\">highp_u32vec4</a>;</div>\n<div class=\"line\"><a name=\"l01750\"></a><span class=\"lineno\"> 1750</span>&#160;</div>\n<div class=\"line\"><a name=\"l01751\"></a><span class=\"lineno\"> 1751</span>&#160;</div>\n<div class=\"line\"><a name=\"l01752\"></a><span class=\"lineno\"> 1752</span>&#160;</div>\n<div class=\"line\"><a name=\"l01755\"></a><span class=\"lineno\"> 1755</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">u32vec1</a>;</div>\n<div class=\"line\"><a name=\"l01756\"></a><span class=\"lineno\"> 1756</span>&#160;</div>\n<div class=\"line\"><a name=\"l01759\"></a><span class=\"lineno\"> 1759</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a>;</div>\n<div class=\"line\"><a name=\"l01760\"></a><span class=\"lineno\"> 1760</span>&#160;</div>\n<div class=\"line\"><a name=\"l01763\"></a><span class=\"lineno\"> 1763</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">u32vec3</a>;</div>\n<div class=\"line\"><a name=\"l01764\"></a><span class=\"lineno\"> 1764</span>&#160;</div>\n<div class=\"line\"><a name=\"l01767\"></a><span class=\"lineno\"> 1767</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">u32vec4</a>;</div>\n<div class=\"line\"><a name=\"l01768\"></a><span class=\"lineno\"> 1768</span>&#160;</div>\n<div class=\"line\"><a name=\"l01769\"></a><span class=\"lineno\"> 1769</span>&#160;</div>\n<div class=\"line\"><a name=\"l01770\"></a><span class=\"lineno\"> 1770</span>&#160;</div>\n<div class=\"line\"><a name=\"l01771\"></a><span class=\"lineno\"> 1771</span>&#160;</div>\n<div class=\"line\"><a name=\"l01774\"></a><span class=\"lineno\"> 1774</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u64, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6\">lowp_u64vec1</a>;</div>\n<div class=\"line\"><a name=\"l01775\"></a><span class=\"lineno\"> 1775</span>&#160;</div>\n<div class=\"line\"><a name=\"l01778\"></a><span class=\"lineno\"> 1778</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u64, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga581485db4ba6ddb501505ee711fd8e42\">lowp_u64vec2</a>;</div>\n<div class=\"line\"><a name=\"l01779\"></a><span class=\"lineno\"> 1779</span>&#160;</div>\n<div class=\"line\"><a name=\"l01782\"></a><span class=\"lineno\"> 1782</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u64, lowp&gt;               <a class=\"code\" href=\"a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1\">lowp_u64vec3</a>;</div>\n<div class=\"line\"><a name=\"l01783\"></a><span class=\"lineno\"> 1783</span>&#160;</div>\n<div class=\"line\"><a name=\"l01786\"></a><span class=\"lineno\"> 1786</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u64, lowp&gt;               <a class=\"code\" href=\"a00304.html#ga6fccc89c34045c86339f6fa781ce96de\">lowp_u64vec4</a>;</div>\n<div class=\"line\"><a name=\"l01787\"></a><span class=\"lineno\"> 1787</span>&#160;</div>\n<div class=\"line\"><a name=\"l01788\"></a><span class=\"lineno\"> 1788</span>&#160;</div>\n<div class=\"line\"><a name=\"l01791\"></a><span class=\"lineno\"> 1791</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u64, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga659f372ccb8307d5db5beca942cde5e8\">mediump_u64vec1</a>;</div>\n<div class=\"line\"><a name=\"l01792\"></a><span class=\"lineno\"> 1792</span>&#160;</div>\n<div class=\"line\"><a name=\"l01795\"></a><span class=\"lineno\"> 1795</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u64, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d\">mediump_u64vec2</a>;</div>\n<div class=\"line\"><a name=\"l01796\"></a><span class=\"lineno\"> 1796</span>&#160;</div>\n<div class=\"line\"><a name=\"l01799\"></a><span class=\"lineno\"> 1799</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u64, mediump&gt;            <a class=\"code\" href=\"a00304.html#ga1900c6ab74acd392809425953359ef52\">mediump_u64vec3</a>;</div>\n<div class=\"line\"><a name=\"l01800\"></a><span class=\"lineno\"> 1800</span>&#160;</div>\n<div class=\"line\"><a name=\"l01803\"></a><span class=\"lineno\"> 1803</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u64, mediump&gt;            <a class=\"code\" href=\"a00304.html#gaec7ee455cb379ec2993e81482123e1cc\">mediump_u64vec4</a>;</div>\n<div class=\"line\"><a name=\"l01804\"></a><span class=\"lineno\"> 1804</span>&#160;</div>\n<div class=\"line\"><a name=\"l01805\"></a><span class=\"lineno\"> 1805</span>&#160;</div>\n<div class=\"line\"><a name=\"l01808\"></a><span class=\"lineno\"> 1808</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u64, highp&gt;              <a class=\"code\" href=\"a00304.html#gae4fe774744852c4d7d069be2e05257ab\">highp_u64vec1</a>;</div>\n<div class=\"line\"><a name=\"l01809\"></a><span class=\"lineno\"> 1809</span>&#160;</div>\n<div class=\"line\"><a name=\"l01812\"></a><span class=\"lineno\"> 1812</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u64, highp&gt;              <a class=\"code\" href=\"a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d\">highp_u64vec2</a>;</div>\n<div class=\"line\"><a name=\"l01813\"></a><span class=\"lineno\"> 1813</span>&#160;</div>\n<div class=\"line\"><a name=\"l01816\"></a><span class=\"lineno\"> 1816</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u64, highp&gt;              <a class=\"code\" href=\"a00304.html#ga41bdabea6e589029659331ba47eb78c1\">highp_u64vec3</a>;</div>\n<div class=\"line\"><a name=\"l01817\"></a><span class=\"lineno\"> 1817</span>&#160;</div>\n<div class=\"line\"><a name=\"l01820\"></a><span class=\"lineno\"> 1820</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u64, highp&gt;              <a class=\"code\" href=\"a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325\">highp_u64vec4</a>;</div>\n<div class=\"line\"><a name=\"l01821\"></a><span class=\"lineno\"> 1821</span>&#160;</div>\n<div class=\"line\"><a name=\"l01822\"></a><span class=\"lineno\"> 1822</span>&#160;</div>\n<div class=\"line\"><a name=\"l01823\"></a><span class=\"lineno\"> 1823</span>&#160;</div>\n<div class=\"line\"><a name=\"l01824\"></a><span class=\"lineno\"> 1824</span>&#160;</div>\n<div class=\"line\"><a name=\"l01827\"></a><span class=\"lineno\"> 1827</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, u64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">u64vec1</a>;</div>\n<div class=\"line\"><a name=\"l01828\"></a><span class=\"lineno\"> 1828</span>&#160;</div>\n<div class=\"line\"><a name=\"l01831\"></a><span class=\"lineno\"> 1831</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, u64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">u64vec2</a>;</div>\n<div class=\"line\"><a name=\"l01832\"></a><span class=\"lineno\"> 1832</span>&#160;</div>\n<div class=\"line\"><a name=\"l01835\"></a><span class=\"lineno\"> 1835</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, u64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">u64vec3</a>;</div>\n<div class=\"line\"><a name=\"l01836\"></a><span class=\"lineno\"> 1836</span>&#160;</div>\n<div class=\"line\"><a name=\"l01839\"></a><span class=\"lineno\"> 1839</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, u64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">u64vec4</a>;</div>\n<div class=\"line\"><a name=\"l01840\"></a><span class=\"lineno\"> 1840</span>&#160;</div>\n<div class=\"line\"><a name=\"l01841\"></a><span class=\"lineno\"> 1841</span>&#160;</div>\n<div class=\"line\"><a name=\"l01843\"></a><span class=\"lineno\"> 1843</span>&#160;        <span class=\"comment\">// Float vector types</span></div>\n<div class=\"line\"><a name=\"l01844\"></a><span class=\"lineno\"> 1844</span>&#160;</div>\n<div class=\"line\"><a name=\"l01847\"></a><span class=\"lineno\"> 1847</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">float32_t</a>;</div>\n<div class=\"line\"><a name=\"l01848\"></a><span class=\"lineno\"> 1848</span>&#160;</div>\n<div class=\"line\"><a name=\"l01851\"></a><span class=\"lineno\"> 1851</span>&#160;        <span class=\"keyword\">typedef</span> float32 <a class=\"code\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a>;</div>\n<div class=\"line\"><a name=\"l01852\"></a><span class=\"lineno\"> 1852</span>&#160;</div>\n<div class=\"line\"><a name=\"l01853\"></a><span class=\"lineno\"> 1853</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l01854\"></a><span class=\"lineno\"> 1854</span>&#160;</div>\n<div class=\"line\"><a name=\"l01857\"></a><span class=\"lineno\"> 1857</span>&#160;                <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">float64_t</a>;</div>\n<div class=\"line\"><a name=\"l01858\"></a><span class=\"lineno\"> 1858</span>&#160;</div>\n<div class=\"line\"><a name=\"l01861\"></a><span class=\"lineno\"> 1861</span>&#160;                <span class=\"keyword\">typedef</span> float64 <a class=\"code\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a>;</div>\n<div class=\"line\"><a name=\"l01862\"></a><span class=\"lineno\"> 1862</span>&#160;<span class=\"preprocessor\">#       endif//GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l01863\"></a><span class=\"lineno\"> 1863</span>&#160;</div>\n<div class=\"line\"><a name=\"l01866\"></a><span class=\"lineno\"> 1866</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">fvec1</a>;</div>\n<div class=\"line\"><a name=\"l01867\"></a><span class=\"lineno\"> 1867</span>&#160;</div>\n<div class=\"line\"><a name=\"l01870\"></a><span class=\"lineno\"> 1870</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">fvec2</a>;</div>\n<div class=\"line\"><a name=\"l01871\"></a><span class=\"lineno\"> 1871</span>&#160;</div>\n<div class=\"line\"><a name=\"l01874\"></a><span class=\"lineno\"> 1874</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">fvec3</a>;</div>\n<div class=\"line\"><a name=\"l01875\"></a><span class=\"lineno\"> 1875</span>&#160;</div>\n<div class=\"line\"><a name=\"l01878\"></a><span class=\"lineno\"> 1878</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">fvec4</a>;</div>\n<div class=\"line\"><a name=\"l01879\"></a><span class=\"lineno\"> 1879</span>&#160;</div>\n<div class=\"line\"><a name=\"l01880\"></a><span class=\"lineno\"> 1880</span>&#160;</div>\n<div class=\"line\"><a name=\"l01883\"></a><span class=\"lineno\"> 1883</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">f32vec1</a>;</div>\n<div class=\"line\"><a name=\"l01884\"></a><span class=\"lineno\"> 1884</span>&#160;</div>\n<div class=\"line\"><a name=\"l01887\"></a><span class=\"lineno\"> 1887</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">f32vec2</a>;</div>\n<div class=\"line\"><a name=\"l01888\"></a><span class=\"lineno\"> 1888</span>&#160;</div>\n<div class=\"line\"><a name=\"l01891\"></a><span class=\"lineno\"> 1891</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">f32vec3</a>;</div>\n<div class=\"line\"><a name=\"l01892\"></a><span class=\"lineno\"> 1892</span>&#160;</div>\n<div class=\"line\"><a name=\"l01895\"></a><span class=\"lineno\"> 1895</span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">f32vec4</a>;</div>\n<div class=\"line\"><a name=\"l01896\"></a><span class=\"lineno\"> 1896</span>&#160;</div>\n<div class=\"line\"><a name=\"l01897\"></a><span class=\"lineno\"> 1897</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l01898\"></a><span class=\"lineno\"> 1898</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;1, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">f64vec1</a>;</div>\n<div class=\"line\"><a name=\"l01901\"></a><span class=\"lineno\"> 1901</span>&#160;</div>\n<div class=\"line\"><a name=\"l01904\"></a><span class=\"lineno\"> 1904</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">f64vec2</a>;</div>\n<div class=\"line\"><a name=\"l01905\"></a><span class=\"lineno\"> 1905</span>&#160;</div>\n<div class=\"line\"><a name=\"l01908\"></a><span class=\"lineno\"> 1908</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">f64vec3</a>;</div>\n<div class=\"line\"><a name=\"l01909\"></a><span class=\"lineno\"> 1909</span>&#160;</div>\n<div class=\"line\"><a name=\"l01912\"></a><span class=\"lineno\"> 1912</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">f64vec4</a>;</div>\n<div class=\"line\"><a name=\"l01913\"></a><span class=\"lineno\"> 1913</span>&#160;<span class=\"preprocessor\">#       endif//GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l01914\"></a><span class=\"lineno\"> 1914</span>&#160;</div>\n<div class=\"line\"><a name=\"l01915\"></a><span class=\"lineno\"> 1915</span>&#160;</div>\n<div class=\"line\"><a name=\"l01917\"></a><span class=\"lineno\"> 1917</span>&#160;        <span class=\"comment\">// Float matrix types</span></div>\n<div class=\"line\"><a name=\"l01918\"></a><span class=\"lineno\"> 1918</span>&#160;</div>\n<div class=\"line\"><a name=\"l01921\"></a><span class=\"lineno\"> 1921</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f32&gt; fmat1;</span></div>\n<div class=\"line\"><a name=\"l01922\"></a><span class=\"lineno\"> 1922</span>&#160;</div>\n<div class=\"line\"><a name=\"l01925\"></a><span class=\"lineno\"> 1925</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280\">fmat2</a>;</div>\n<div class=\"line\"><a name=\"l01926\"></a><span class=\"lineno\"> 1926</span>&#160;</div>\n<div class=\"line\"><a name=\"l01929\"></a><span class=\"lineno\"> 1929</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga253d453c20e037730023fea0215cb6f6\">fmat3</a>;</div>\n<div class=\"line\"><a name=\"l01930\"></a><span class=\"lineno\"> 1930</span>&#160;</div>\n<div class=\"line\"><a name=\"l01933\"></a><span class=\"lineno\"> 1933</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca\">fmat4</a>;</div>\n<div class=\"line\"><a name=\"l01934\"></a><span class=\"lineno\"> 1934</span>&#160;</div>\n<div class=\"line\"><a name=\"l01935\"></a><span class=\"lineno\"> 1935</span>&#160;</div>\n<div class=\"line\"><a name=\"l01938\"></a><span class=\"lineno\"> 1938</span>&#160;        <span class=\"comment\">//typedef f32 fmat1x1;</span></div>\n<div class=\"line\"><a name=\"l01939\"></a><span class=\"lineno\"> 1939</span>&#160;</div>\n<div class=\"line\"><a name=\"l01942\"></a><span class=\"lineno\"> 1942</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">fmat2x2</a>;</div>\n<div class=\"line\"><a name=\"l01943\"></a><span class=\"lineno\"> 1943</span>&#160;</div>\n<div class=\"line\"><a name=\"l01946\"></a><span class=\"lineno\"> 1946</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">fmat2x3</a>;</div>\n<div class=\"line\"><a name=\"l01947\"></a><span class=\"lineno\"> 1947</span>&#160;</div>\n<div class=\"line\"><a name=\"l01950\"></a><span class=\"lineno\"> 1950</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">fmat2x4</a>;</div>\n<div class=\"line\"><a name=\"l01951\"></a><span class=\"lineno\"> 1951</span>&#160;</div>\n<div class=\"line\"><a name=\"l01954\"></a><span class=\"lineno\"> 1954</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">fmat3x2</a>;</div>\n<div class=\"line\"><a name=\"l01955\"></a><span class=\"lineno\"> 1955</span>&#160;</div>\n<div class=\"line\"><a name=\"l01958\"></a><span class=\"lineno\"> 1958</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">fmat3x3</a>;</div>\n<div class=\"line\"><a name=\"l01959\"></a><span class=\"lineno\"> 1959</span>&#160;</div>\n<div class=\"line\"><a name=\"l01962\"></a><span class=\"lineno\"> 1962</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">fmat3x4</a>;</div>\n<div class=\"line\"><a name=\"l01963\"></a><span class=\"lineno\"> 1963</span>&#160;</div>\n<div class=\"line\"><a name=\"l01966\"></a><span class=\"lineno\"> 1966</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">fmat4x2</a>;</div>\n<div class=\"line\"><a name=\"l01967\"></a><span class=\"lineno\"> 1967</span>&#160;</div>\n<div class=\"line\"><a name=\"l01970\"></a><span class=\"lineno\"> 1970</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">fmat4x3</a>;</div>\n<div class=\"line\"><a name=\"l01971\"></a><span class=\"lineno\"> 1971</span>&#160;</div>\n<div class=\"line\"><a name=\"l01974\"></a><span class=\"lineno\"> 1974</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">fmat4x4</a>;</div>\n<div class=\"line\"><a name=\"l01975\"></a><span class=\"lineno\"> 1975</span>&#160;</div>\n<div class=\"line\"><a name=\"l01976\"></a><span class=\"lineno\"> 1976</span>&#160;</div>\n<div class=\"line\"><a name=\"l01979\"></a><span class=\"lineno\"> 1979</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f32, defaultp&gt; f32mat1;</span></div>\n<div class=\"line\"><a name=\"l01980\"></a><span class=\"lineno\"> 1980</span>&#160;</div>\n<div class=\"line\"><a name=\"l01983\"></a><span class=\"lineno\"> 1983</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gab12383ed6ac7595ed6fde4d266c58425\">f32mat2</a>;</div>\n<div class=\"line\"><a name=\"l01984\"></a><span class=\"lineno\"> 1984</span>&#160;</div>\n<div class=\"line\"><a name=\"l01987\"></a><span class=\"lineno\"> 1987</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be\">f32mat3</a>;</div>\n<div class=\"line\"><a name=\"l01988\"></a><span class=\"lineno\"> 1988</span>&#160;</div>\n<div class=\"line\"><a name=\"l01991\"></a><span class=\"lineno\"> 1991</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga99d1b85ff99956b33da7e9992aad129a\">f32mat4</a>;</div>\n<div class=\"line\"><a name=\"l01992\"></a><span class=\"lineno\"> 1992</span>&#160;</div>\n<div class=\"line\"><a name=\"l01993\"></a><span class=\"lineno\"> 1993</span>&#160;</div>\n<div class=\"line\"><a name=\"l01996\"></a><span class=\"lineno\"> 1996</span>&#160;        <span class=\"comment\">//typedef f32 f32mat1x1;</span></div>\n<div class=\"line\"><a name=\"l01997\"></a><span class=\"lineno\"> 1997</span>&#160;</div>\n<div class=\"line\"><a name=\"l02000\"></a><span class=\"lineno\"> 2000</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">f32mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l02001\"></a><span class=\"lineno\"> 2001</span>&#160;</div>\n<div class=\"line\"><a name=\"l02004\"></a><span class=\"lineno\"> 2004</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">f32mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l02005\"></a><span class=\"lineno\"> 2005</span>&#160;</div>\n<div class=\"line\"><a name=\"l02008\"></a><span class=\"lineno\"> 2008</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">f32mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l02009\"></a><span class=\"lineno\"> 2009</span>&#160;</div>\n<div class=\"line\"><a name=\"l02012\"></a><span class=\"lineno\"> 2012</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">f32mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l02013\"></a><span class=\"lineno\"> 2013</span>&#160;</div>\n<div class=\"line\"><a name=\"l02016\"></a><span class=\"lineno\"> 2016</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">f32mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l02017\"></a><span class=\"lineno\"> 2017</span>&#160;</div>\n<div class=\"line\"><a name=\"l02020\"></a><span class=\"lineno\"> 2020</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">f32mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l02021\"></a><span class=\"lineno\"> 2021</span>&#160;</div>\n<div class=\"line\"><a name=\"l02024\"></a><span class=\"lineno\"> 2024</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">f32mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l02025\"></a><span class=\"lineno\"> 2025</span>&#160;</div>\n<div class=\"line\"><a name=\"l02028\"></a><span class=\"lineno\"> 2028</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">f32mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l02029\"></a><span class=\"lineno\"> 2029</span>&#160;</div>\n<div class=\"line\"><a name=\"l02032\"></a><span class=\"lineno\"> 2032</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">f32mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l02033\"></a><span class=\"lineno\"> 2033</span>&#160;</div>\n<div class=\"line\"><a name=\"l02034\"></a><span class=\"lineno\"> 2034</span>&#160;</div>\n<div class=\"line\"><a name=\"l02035\"></a><span class=\"lineno\"> 2035</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l02036\"></a><span class=\"lineno\"> 2036</span>&#160;</div>\n<div class=\"line\"><a name=\"l02039\"></a><span class=\"lineno\"> 2039</span>&#160;        <span class=\"comment\">//typedef detail::tmat1x1&lt;f64, defaultp&gt; f64mat1;</span></div>\n<div class=\"line\"><a name=\"l02040\"></a><span class=\"lineno\"> 2040</span>&#160;</div>\n<div class=\"line\"><a name=\"l02043\"></a><span class=\"lineno\"> 2043</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gad9771450a54785d13080cdde0fe20c1d\">f64mat2</a>;</div>\n<div class=\"line\"><a name=\"l02044\"></a><span class=\"lineno\"> 2044</span>&#160;</div>\n<div class=\"line\"><a name=\"l02047\"></a><span class=\"lineno\"> 2047</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga9b69181efbf8f37ae934f135137b29c0\">f64mat3</a>;</div>\n<div class=\"line\"><a name=\"l02048\"></a><span class=\"lineno\"> 2048</span>&#160;</div>\n<div class=\"line\"><a name=\"l02051\"></a><span class=\"lineno\"> 2051</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc\">f64mat4</a>;</div>\n<div class=\"line\"><a name=\"l02052\"></a><span class=\"lineno\"> 2052</span>&#160;</div>\n<div class=\"line\"><a name=\"l02053\"></a><span class=\"lineno\"> 2053</span>&#160;</div>\n<div class=\"line\"><a name=\"l02056\"></a><span class=\"lineno\"> 2056</span>&#160;        <span class=\"comment\">//typedef f64 f64mat1x1;</span></div>\n<div class=\"line\"><a name=\"l02057\"></a><span class=\"lineno\"> 2057</span>&#160;</div>\n<div class=\"line\"><a name=\"l02060\"></a><span class=\"lineno\"> 2060</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 2, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">f64mat2x2</a>;</div>\n<div class=\"line\"><a name=\"l02061\"></a><span class=\"lineno\"> 2061</span>&#160;</div>\n<div class=\"line\"><a name=\"l02064\"></a><span class=\"lineno\"> 2064</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 3, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">f64mat2x3</a>;</div>\n<div class=\"line\"><a name=\"l02065\"></a><span class=\"lineno\"> 2065</span>&#160;</div>\n<div class=\"line\"><a name=\"l02068\"></a><span class=\"lineno\"> 2068</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;2, 4, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">f64mat2x4</a>;</div>\n<div class=\"line\"><a name=\"l02069\"></a><span class=\"lineno\"> 2069</span>&#160;</div>\n<div class=\"line\"><a name=\"l02072\"></a><span class=\"lineno\"> 2072</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 2, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">f64mat3x2</a>;</div>\n<div class=\"line\"><a name=\"l02073\"></a><span class=\"lineno\"> 2073</span>&#160;</div>\n<div class=\"line\"><a name=\"l02076\"></a><span class=\"lineno\"> 2076</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 3, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">f64mat3x3</a>;</div>\n<div class=\"line\"><a name=\"l02077\"></a><span class=\"lineno\"> 2077</span>&#160;</div>\n<div class=\"line\"><a name=\"l02080\"></a><span class=\"lineno\"> 2080</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;3, 4, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">f64mat3x4</a>;</div>\n<div class=\"line\"><a name=\"l02081\"></a><span class=\"lineno\"> 2081</span>&#160;</div>\n<div class=\"line\"><a name=\"l02084\"></a><span class=\"lineno\"> 2084</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 2, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">f64mat4x2</a>;</div>\n<div class=\"line\"><a name=\"l02085\"></a><span class=\"lineno\"> 2085</span>&#160;</div>\n<div class=\"line\"><a name=\"l02088\"></a><span class=\"lineno\"> 2088</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 3, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">f64mat4x3</a>;</div>\n<div class=\"line\"><a name=\"l02089\"></a><span class=\"lineno\"> 2089</span>&#160;</div>\n<div class=\"line\"><a name=\"l02092\"></a><span class=\"lineno\"> 2092</span>&#160;        <span class=\"keyword\">typedef</span> mat&lt;4, 4, f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">f64mat4x4</a>;</div>\n<div class=\"line\"><a name=\"l02093\"></a><span class=\"lineno\"> 2093</span>&#160;</div>\n<div class=\"line\"><a name=\"l02094\"></a><span class=\"lineno\"> 2094</span>&#160;<span class=\"preprocessor\">#       endif//GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l02095\"></a><span class=\"lineno\"> 2095</span>&#160;</div>\n<div class=\"line\"><a name=\"l02097\"></a><span class=\"lineno\"> 2097</span>&#160;        <span class=\"comment\">// Quaternion types</span></div>\n<div class=\"line\"><a name=\"l02098\"></a><span class=\"lineno\"> 2098</span>&#160;</div>\n<div class=\"line\"><a name=\"l02101\"></a><span class=\"lineno\"> 2101</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f32, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">f32quat</a>;</div>\n<div class=\"line\"><a name=\"l02102\"></a><span class=\"lineno\"> 2102</span>&#160;</div>\n<div class=\"line\"><a name=\"l02105\"></a><span class=\"lineno\"> 2105</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f32, lowp&gt; <a class=\"code\" href=\"a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347\">lowp_f32quat</a>;</div>\n<div class=\"line\"><a name=\"l02106\"></a><span class=\"lineno\"> 2106</span>&#160;</div>\n<div class=\"line\"><a name=\"l02109\"></a><span class=\"lineno\"> 2109</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f64, lowp&gt; <a class=\"code\" href=\"a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae\">lowp_f64quat</a>;</div>\n<div class=\"line\"><a name=\"l02110\"></a><span class=\"lineno\"> 2110</span>&#160;</div>\n<div class=\"line\"><a name=\"l02113\"></a><span class=\"lineno\"> 2113</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f32, mediump&gt; <a class=\"code\" href=\"a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3\">mediump_f32quat</a>;</div>\n<div class=\"line\"><a name=\"l02114\"></a><span class=\"lineno\"> 2114</span>&#160;</div>\n<div class=\"line\"><a name=\"l02115\"></a><span class=\"lineno\"> 2115</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l02116\"></a><span class=\"lineno\"> 2116</span>&#160;</div>\n<div class=\"line\"><a name=\"l02119\"></a><span class=\"lineno\"> 2119</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f64, mediump&gt; <a class=\"code\" href=\"a00304.html#ga5e52f485059ce6e3010c590b882602c9\">mediump_f64quat</a>;</div>\n<div class=\"line\"><a name=\"l02120\"></a><span class=\"lineno\"> 2120</span>&#160;</div>\n<div class=\"line\"><a name=\"l02123\"></a><span class=\"lineno\"> 2123</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f32, highp&gt; <a class=\"code\" href=\"a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3\">highp_f32quat</a>;</div>\n<div class=\"line\"><a name=\"l02124\"></a><span class=\"lineno\"> 2124</span>&#160;</div>\n<div class=\"line\"><a name=\"l02127\"></a><span class=\"lineno\"> 2127</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f64, highp&gt; <a class=\"code\" href=\"a00304.html#gafcfdd74a115163af2ce1093551747352\">highp_f64quat</a>;</div>\n<div class=\"line\"><a name=\"l02128\"></a><span class=\"lineno\"> 2128</span>&#160;</div>\n<div class=\"line\"><a name=\"l02131\"></a><span class=\"lineno\"> 2131</span>&#160;        <span class=\"keyword\">typedef</span> qua&lt;f64, defaultp&gt; <a class=\"code\" href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">f64quat</a>;</div>\n<div class=\"line\"><a name=\"l02132\"></a><span class=\"lineno\"> 2132</span>&#160;</div>\n<div class=\"line\"><a name=\"l02133\"></a><span class=\"lineno\"> 2133</span>&#160;<span class=\"preprocessor\">#       endif//GLM_FORCE_SINGLE_ONLY</span></div>\n<div class=\"line\"><a name=\"l02134\"></a><span class=\"lineno\"> 2134</span>&#160;</div>\n<div class=\"line\"><a name=\"l02136\"></a><span class=\"lineno\"> 2136</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l02137\"></a><span class=\"lineno\"> 2137</span>&#160;</div>\n<div class=\"line\"><a name=\"l02138\"></a><span class=\"lineno\"> 2138</span>&#160;<span class=\"preprocessor\">#include &quot;type_precision.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00304_html_gad064202b4cf9a2972475c03de657cb39\"><div class=\"ttname\"><a href=\"a00304.html#gad064202b4cf9a2972475c03de657cb39\">glm::highp_u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, highp &gt; highp_u16vec1</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00354\">fwd.hpp:354</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga602e119c6b246b4f6edcf66845f2aa0f\"><div class=\"ttname\"><a href=\"a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f\">glm::highp_f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, highp &gt; highp_f32mat4x2</div><div class=\"ttdoc\">High single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00696\">fwd.hpp:696</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0c181fdf06a309691999926b6690c969\"><div class=\"ttname\"><a href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">glm::highp_u64</a></div><div class=\"ttdeci\">uint64 highp_u64</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00133\">fwd.hpp:133</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac30fdf8afa489400053275b6a3350127\"><div class=\"ttname\"><a href=\"a00304.html#gac30fdf8afa489400053275b6a3350127\">glm::mediump_f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, mediump &gt; mediump_f64vec1</div><div class=\"ttdoc\">Medium double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00491\">fwd.hpp:491</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaea5c4518e175162e306d2c2b5ef5ac79\"><div class=\"ttname\"><a href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">glm::f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, defaultp &gt; f32vec3</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00463\">fwd.hpp:463</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga74e9133378fd0b4da8ac0bc0876702ff\"><div class=\"ttname\"><a href=\"a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff\">glm::mediump_fmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, mediump &gt; mediump_fmat2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00528\">fwd.hpp:528</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaaeeb0077198cff40e3f48b1108ece139\"><div class=\"ttname\"><a href=\"a00304.html#gaaeeb0077198cff40e3f48b1108ece139\">glm::highp_float64_t</a></div><div class=\"ttdeci\">double highp_float64_t</div><div class=\"ttdoc\">High 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00175\">fwd.hpp:175</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0ecd3f4952536e5ef12702b44d2626fc\"><div class=\"ttname\"><a href=\"a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc\">glm::f64mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, defaultp &gt; f64mat4</div><div class=\"ttdoc\">Double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00586\">fwd.hpp:586</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad9771450a54785d13080cdde0fe20c1d\"><div class=\"ttname\"><a href=\"a00304.html#gad9771450a54785d13080cdde0fe20c1d\">glm::f64mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, defaultp &gt; f64mat2</div><div class=\"ttdoc\">Double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00584\">fwd.hpp:584</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga41ad497f7eae211556aefd783cb02b90\"><div class=\"ttname\"><a href=\"a00304.html#ga41ad497f7eae211556aefd783cb02b90\">glm::mediump_fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, mediump &gt; mediump_fmat4x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00647\">fwd.hpp:647</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaaaf878d0d7bfc0aac054fe269a886ca8\"><div class=\"ttname\"><a href=\"a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8\">glm::mediump_f32mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, mediump &gt; mediump_f32mat3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00545\">fwd.hpp:545</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf4dae276fd29623950de14a6ca2586b5\"><div class=\"ttname\"><a href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">glm::mediump_uint32_t</a></div><div class=\"ttdeci\">uint32 mediump_uint32_t</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00127\">fwd.hpp:127</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa212b805736a759998e312cbdd550fae\"><div class=\"ttname\"><a href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">glm::lowp_uint64</a></div><div class=\"ttdeci\">uint64 lowp_uint64</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00136\">fwd.hpp:136</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga98a687c17b174ea316b5f397b64f44bc\"><div class=\"ttname\"><a href=\"a00304.html#ga98a687c17b174ea316b5f397b64f44bc\">glm::mediump_fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, mediump &gt; mediump_fmat2x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00640\">fwd.hpp:640</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga701f32ab5b3fb06996b41f5c0d643805\"><div class=\"ttname\"><a href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">glm::f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, defaultp &gt; f32vec1</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00461\">fwd.hpp:461</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga14c90ca49885723f51d06e295587236f\"><div class=\"ttname\"><a href=\"a00304.html#ga14c90ca49885723f51d06e295587236f\">glm::highp_f32mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, highp &gt; highp_f32mat4</div><div class=\"ttdoc\">High single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00550\">fwd.hpp:550</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadbb198a4d7aad82a0f4dc466ef6f6215\"><div class=\"ttname\"><a href=\"a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215\">glm::highp_float64</a></div><div class=\"ttdeci\">double highp_float64</div><div class=\"ttdoc\">High 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00170\">fwd.hpp:170</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1b09f03da7ac43055c68a349d5445083\"><div class=\"ttname\"><a href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">glm::lowp_u8</a></div><div class=\"ttdeci\">uint8 lowp_u8</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00089\">fwd.hpp:89</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8165913e068444f7842302d40ba897b9\"><div class=\"ttname\"><a href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">glm::u32</a></div><div class=\"ttdeci\">uint32 u32</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00120\">fwd.hpp:120</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9b69181efbf8f37ae934f135137b29c0\"><div class=\"ttname\"><a href=\"a00304.html#ga9b69181efbf8f37ae934f135137b29c0\">glm::f64mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, defaultp &gt; f64mat3</div><div class=\"ttdoc\">Double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00585\">fwd.hpp:585</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3714dab2c16a6545a405cb0c3b3aaa6f\"><div class=\"ttname\"><a href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">glm::lowp_float64</a></div><div class=\"ttdeci\">double lowp_float64</div><div class=\"ttdoc\">Low 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00168\">fwd.hpp:168</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga54b8a4e0f5a7203a821bf8e9c1265bcf\"><div class=\"ttname\"><a href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">glm::i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, defaultp &gt; i32vec1</div><div class=\"ttdoc\">32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00277\">fwd.hpp:277</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga746dc6da204f5622e395f492997dbf57\"><div class=\"ttname\"><a href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">glm::highp_uint16</a></div><div class=\"ttdeci\">uint16 highp_uint16</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00110\">fwd.hpp:110</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf306dd69e53633636aee38cea79d4cb7\"><div class=\"ttname\"><a href=\"a00304.html#gaf306dd69e53633636aee38cea79d4cb7\">glm::mediump_f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, mediump &gt; mediump_f64mat2x4</div><div class=\"ttdoc\">Medium double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00762\">fwd.hpp:762</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad23b1be9b3bf20352089a6b738f0ebba\"><div class=\"ttname\"><a href=\"a00304.html#gad23b1be9b3bf20352089a6b738f0ebba\">glm::highp_i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, highp &gt; highp_i64vec4</div><div class=\"ttdoc\">High qualifier 64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00295\">fwd.hpp:295</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaab239fa9e35b65a67cbaa6ac082f3675\"><div class=\"ttname\"><a href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">glm::f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, defaultp &gt; f64mat3x4</div><div class=\"ttdoc\">Double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00787\">fwd.hpp:787</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4541dc2feb2a31d6ecb5a303f3dd3280\"><div class=\"ttname\"><a href=\"a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280\">glm::fmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; fmat2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00536\">fwd.hpp:536</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae9c90a867a6026b1f6eab00456f3fb8b\"><div class=\"ttname\"><a href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">glm::i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, defaultp &gt; i16vec3</div><div class=\"ttdoc\">16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00259\">fwd.hpp:259</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf1b735b4b1145174f4e4167d13778f9b\"><div class=\"ttname\"><a href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">glm::lowp_uint32_t</a></div><div class=\"ttdeci\">uint32 lowp_uint32_t</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00126\">fwd.hpp:126</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62a32c31f4e2e8ca859663b6e3289a2d\"><div class=\"ttname\"><a href=\"a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d\">glm::lowp_fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, lowp &gt; lowp_fvec2</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00427\">fwd.hpp:427</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga34dd5ec1988c443bae80f1b20a8ade5f\"><div class=\"ttname\"><a href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">glm::mediump_uint32</a></div><div class=\"ttdeci\">uint32 mediump_uint32</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00123\">fwd.hpp:123</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac1c38778c0b5a1263f07753c05a4f7b9\"><div class=\"ttname\"><a href=\"a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9\">glm::mediump_fmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, mediump &gt; mediump_fmat4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00530\">fwd.hpp:530</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa38d732f5d4a7bc42a1b43b9d3c141ce\"><div class=\"ttname\"><a href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">glm::highp_uint64</a></div><div class=\"ttdeci\">uint64 highp_uint64</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00138\">fwd.hpp:138</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5bba0ce31210e274f73efacd3364c03f\"><div class=\"ttname\"><a href=\"a00304.html#ga5bba0ce31210e274f73efacd3364c03f\">glm::lowp_fmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, lowp &gt; lowp_fmat2</div><div class=\"ttdoc\">Low single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00524\">fwd.hpp:524</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa6a5b461bbf5fe20982472aa51896d4b\"><div class=\"ttname\"><a href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">glm::lowp_uint32</a></div><div class=\"ttdeci\">uint32 lowp_uint32</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00122\">fwd.hpp:122</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga40b5c557efebb5bb99d6b9aa81095afa\"><div class=\"ttname\"><a href=\"a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa\">glm::lowp_fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, lowp &gt; lowp_fvec3</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00428\">fwd.hpp:428</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga44bfa55cda5dbf53f24a1fb7610393d6\"><div class=\"ttname\"><a href=\"a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6\">glm::mediump_fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, mediump &gt; mediump_fvec2</div><div class=\"ttdoc\">Medium Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00432\">fwd.hpp:432</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28733aec7288191b314d42154fd0b690\"><div class=\"ttname\"><a href=\"a00304.html#ga28733aec7288191b314d42154fd0b690\">glm::lowp_fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, lowp &gt; lowp_fmat3x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00635\">fwd.hpp:635</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga771fda9109933db34f808d92b9b84d7e\"><div class=\"ttname\"><a href=\"a00304.html#ga771fda9109933db34f808d92b9b84d7e\">glm::lowp_f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, lowp &gt; lowp_f64mat2x2</div><div class=\"ttdoc\">Low double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00750\">fwd.hpp:750</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa4e31c3d9de067029efeb161a44b0232\"><div class=\"ttname\"><a href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">glm::i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, defaultp &gt; i64vec4</div><div class=\"ttdoc\">64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00300\">fwd.hpp:300</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1c522ca821c27b862fe51cf4024b064b\"><div class=\"ttname\"><a href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">glm::u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, defaultp &gt; u16vec3</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00361\">fwd.hpp:361</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga859be7b9d3a3765c1cafc14dbcf249a6\"><div class=\"ttname\"><a href=\"a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6\">glm::lowp_u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, lowp &gt; lowp_u64vec1</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00384\">fwd.hpp:384</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga400ce8cc566de093a9b28e59e220d6e4\"><div class=\"ttname\"><a href=\"a00304.html#ga400ce8cc566de093a9b28e59e220d6e4\">glm::mediump_u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, mediump &gt; mediump_u16vec1</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00349\">fwd.hpp:349</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad06935764d78f43f9d542c784c2212ec\"><div class=\"ttname\"><a href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">glm::i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, defaultp &gt; i8vec2</div><div class=\"ttdoc\">8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00238\">fwd.hpp:238</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafd9a6ebc0c7b95f5c581d00d16a17c54\"><div class=\"ttname\"><a href=\"a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54\">glm::mediump_f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, mediump &gt; mediump_f64mat2x3</div><div class=\"ttdoc\">Medium double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00761\">fwd.hpp:761</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4502885718742aa238c36a312c3f3f20\"><div class=\"ttname\"><a href=\"a00304.html#ga4502885718742aa238c36a312c3f3f20\">glm::lowp_u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, lowp &gt; lowp_u32vec4</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00367\">fwd.hpp:367</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0f038d4e09862a74f03d102c59eda73e\"><div class=\"ttname\"><a href=\"a00304.html#ga0f038d4e09862a74f03d102c59eda73e\">glm::highp_f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, highp &gt; highp_f32vec4</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00459\">fwd.hpp:459</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga43e5b41c834fcaf4db5a831c0e28128e\"><div class=\"ttname\"><a href=\"a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e\">glm::lowp_f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, lowp &gt; lowp_f32vec1</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00446\">fwd.hpp:446</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0aeb5cb001473b08c88175012708a379\"><div class=\"ttname\"><a href=\"a00304.html#ga0aeb5cb001473b08c88175012708a379\">glm::highp_f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, highp &gt; highp_f32mat2x3</div><div class=\"ttdoc\">High single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00691\">fwd.hpp:691</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga226a8d52b4e3f77aaa6231135e886aac\"><div class=\"ttname\"><a href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">glm::highp_int64</a></div><div class=\"ttdeci\">int64 highp_int64</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00080\">fwd.hpp:80</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga20bf224bd4f8a24ecc4ed2004a40c219\"><div class=\"ttname\"><a href=\"a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219\">glm::mediump_i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, mediump &gt; mediump_i32vec2</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00268\">fwd.hpp:268</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7451266e67794bd1125163502bc4a570\"><div class=\"ttname\"><a href=\"a00304.html#ga7451266e67794bd1125163502bc4a570\">glm::lowp_f64mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, lowp &gt; lowp_f64mat4</div><div class=\"ttdoc\">Low double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00574\">fwd.hpp:574</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8cb400c0f4438f2640035d7b9824a0ca\"><div class=\"ttname\"><a href=\"a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca\">glm::fmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; fmat4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00538\">fwd.hpp:538</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaefe8ef520c6cb78590ebbefe648da4d4\"><div class=\"ttname\"><a href=\"a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4\">glm::mediump_fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, mediump &gt; mediump_fmat3x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00645\">fwd.hpp:645</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b2cd8d31eb345b2d641d9261c38db1a\"><div class=\"ttname\"><a href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">glm::lowp_int16_t</a></div><div class=\"ttdeci\">int16 lowp_int16_t</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00054\">fwd.hpp:54</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadf70eaaa230aeed5a4c9f4c9c5c55902\"><div class=\"ttname\"><a href=\"a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902\">glm::highp_i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, highp &gt; highp_i32vec4</div><div class=\"ttdoc\">High qualifier 32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00275\">fwd.hpp:275</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3b32ca1e57a4ef91babbc3d35a34ea20\"><div class=\"ttname\"><a href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">glm::f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, defaultp &gt; f32mat4x2</div><div class=\"ttdoc\">Single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00702\">fwd.hpp:702</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae54e4d1aeb5a0f0c64822e6f1b299e19\"><div class=\"ttname\"><a href=\"a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19\">glm::highp_fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, highp &gt; highp_fmat3x2</div><div class=\"ttdoc\">High single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00653\">fwd.hpp:653</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa03f939d90d5ef157df957d93f0b9a64\"><div class=\"ttname\"><a href=\"a00304.html#gaa03f939d90d5ef157df957d93f0b9a64\">glm::mediump_fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, mediump &gt; mediump_fmat2x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00641\">fwd.hpp:641</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1bd0e914158bf03135f8a317de6debe9\"><div class=\"ttname\"><a href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">glm::mediump_u32</a></div><div class=\"ttdeci\">uint32 mediump_u32</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00118\">fwd.hpp:118</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga49b98e7d71804af45d86886a489e633c\"><div class=\"ttname\"><a href=\"a00304.html#ga49b98e7d71804af45d86886a489e633c\">glm::lowp_fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, lowp &gt; lowp_fmat3x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00633\">fwd.hpp:633</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga17d36f0ea22314117e1cec9594b33945\"><div class=\"ttname\"><a href=\"a00304.html#ga17d36f0ea22314117e1cec9594b33945\">glm::mediump_f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, mediump &gt; mediump_f64mat4x2</div><div class=\"ttdoc\">Medium double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00766\">fwd.hpp:766</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga791b15ceb3f1e09d1a0ec6f3057ca159\"><div class=\"ttname\"><a href=\"a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159\">glm::highp_u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, highp &gt; highp_u16vec2</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00355\">fwd.hpp:355</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62c31b133ceee9984fbee05ac4c434a9\"><div class=\"ttname\"><a href=\"a00304.html#ga62c31b133ceee9984fbee05ac4c434a9\">glm::highp_f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, highp &gt; highp_f64vec1</div><div class=\"ttdoc\">High double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00496\">fwd.hpp:496</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4b5e2c9aaa5d7717bf71179aefa12e88\"><div class=\"ttname\"><a href=\"a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88\">glm::mediump_i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, mediump &gt; mediump_i16vec2</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00248\">fwd.hpp:248</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4920a1536f161f7ded1d6909b7fef0d2\"><div class=\"ttname\"><a href=\"a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2\">glm::highp_fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, highp &gt; highp_fmat2x4</div><div class=\"ttdoc\">High single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00652\">fwd.hpp:652</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga489b89ba93d4f7b3934df78debc52276\"><div class=\"ttname\"><a href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">glm::u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, defaultp &gt; u64vec3</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00401\">fwd.hpp:401</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf49470869e9be2c059629b250619804e\"><div class=\"ttname\"><a href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">glm::lowp_uint8</a></div><div class=\"ttdeci\">uint8 lowp_uint8</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00094\">fwd.hpp:94</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac53f9d7ab04eace67adad026092fb1e8\"><div class=\"ttname\"><a href=\"a00304.html#gac53f9d7ab04eace67adad026092fb1e8\">glm::lowp_f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, lowp &gt; lowp_f32mat3x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00673\">fwd.hpp:673</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga30069d1f02b19599cbfadf98c23ac6ed\"><div class=\"ttname\"><a href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">glm::lowp_u64</a></div><div class=\"ttdeci\">uint64 lowp_u64</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00131\">fwd.hpp:131</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62324224b9c6cce9c6b4db96bb704a8a\"><div class=\"ttname\"><a href=\"a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a\">glm::highp_i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, highp &gt; highp_i64vec3</div><div class=\"ttdoc\">High qualifier 64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00294\">fwd.hpp:294</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6fbd69cbdaa44345bff923a2cf63de7e\"><div class=\"ttname\"><a href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">glm::mediump_int8</a></div><div class=\"ttdeci\">int8 mediump_int8</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00037\">fwd.hpp:37</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf645b1a60203b39c0207baff5e3d8c3c\"><div class=\"ttname\"><a href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">glm::lowp_int64</a></div><div class=\"ttdeci\">int64 lowp_int64</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00078\">fwd.hpp:78</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab005efe0fa4de1a928e8ddec4bc2c43f\"><div class=\"ttname\"><a href=\"a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f\">glm::mediump_f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, mediump &gt; mediump_f32mat4x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00686\">fwd.hpp:686</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae7a4711107b7d078fc5f03ce2227b90b\"><div class=\"ttname\"><a href=\"a00304.html#gae7a4711107b7d078fc5f03ce2227b90b\">glm::lowp_f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, lowp &gt; lowp_f64vec3</div><div class=\"ttdoc\">Low double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00488\">fwd.hpp:488</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaef3824ed4fe435a019c5b9dddf53fec5\"><div class=\"ttname\"><a href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">glm::u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, defaultp &gt; u64vec2</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00400\">fwd.hpp:400</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\"><div class=\"ttname\"><a href=\"a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\">glm::lowp_i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, lowp &gt; lowp_i64vec3</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00284\">fwd.hpp:284</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a8bdc32184ea0a522ef7bd90640cf67\"><div class=\"ttname\"><a href=\"a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67\">glm::mediump_i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, mediump &gt; mediump_i8vec2</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00228\">fwd.hpp:228</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab90ade28222f8b861d5ceaf81a3a7f5d\"><div class=\"ttname\"><a href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">glm::f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, defaultp &gt; f32mat3x4</div><div class=\"ttdoc\">Single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00707\">fwd.hpp:707</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5609c8fa2b7eac3dec337d321cb0ca96\"><div class=\"ttname\"><a href=\"a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96\">glm::highp_i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, highp &gt; highp_i16vec3</div><div class=\"ttdoc\">High qualifier 16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00254\">fwd.hpp:254</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3be6c7fc5fe08fa2274bdb001d5f2633\"><div class=\"ttname\"><a href=\"a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633\">glm::mediump_i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, mediump &gt; mediump_i16vec3</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00249\">fwd.hpp:249</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf3f312156984c365e9f65620354da70b\"><div class=\"ttname\"><a href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">glm::u64</a></div><div class=\"ttdeci\">uint64 u64</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00134\">fwd.hpp:134</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gade502df1ce14f837fae7f60a03ddb9b0\"><div class=\"ttname\"><a href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">glm::f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, defaultp &gt; f64vec1</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00501\">fwd.hpp:501</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga42569e5b92f8635cedeadb1457ee1467\"><div class=\"ttname\"><a href=\"a00304.html#ga42569e5b92f8635cedeadb1457ee1467\">glm::mediump_fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, mediump &gt; mediump_fmat3x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00643\">fwd.hpp:643</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8343e9d244fb17a5bbf0d94d36b3695e\"><div class=\"ttname\"><a href=\"a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e\">glm::mediump_i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, mediump &gt; mediump_i64vec1</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00287\">fwd.hpp:287</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafe730798732aa7b0647096a004db1b1c\"><div class=\"ttname\"><a href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">glm::i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, defaultp &gt; i16vec1</div><div class=\"ttdoc\">16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00257\">fwd.hpp:257</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac8f8a12ee03105ef8861dc652434e3b7\"><div class=\"ttname\"><a href=\"a00304.html#gac8f8a12ee03105ef8861dc652434e3b7\">glm::lowp_f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, lowp &gt; lowp_f64mat3x3</div><div class=\"ttdoc\">Low double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00754\">fwd.hpp:754</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4e641a54d70c81eabf56c25c966d04bd\"><div class=\"ttname\"><a href=\"a00304.html#ga4e641a54d70c81eabf56c25c966d04bd\">glm::lowp_f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, lowp &gt; lowp_f64vec2</div><div class=\"ttdoc\">Low double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00487\">fwd.hpp:487</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacf111095594996fef29067b2454fccad\"><div class=\"ttname\"><a href=\"a00304.html#gacf111095594996fef29067b2454fccad\">glm::highp_fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, highp &gt; highp_fmat2x3</div><div class=\"ttdoc\">High single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00651\">fwd.hpp:651</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga58119a41d143ebaea0df70fe882e8a40\"><div class=\"ttname\"><a href=\"a00304.html#ga58119a41d143ebaea0df70fe882e8a40\">glm::lowp_f64mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, lowp &gt; lowp_f64mat3</div><div class=\"ttdoc\">Low double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00573\">fwd.hpp:573</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac21eda58a1475449a5709b412ebd776c\"><div class=\"ttname\"><a href=\"a00304.html#gac21eda58a1475449a5709b412ebd776c\">glm::lowp_f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, lowp &gt; lowp_f32mat4x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00677\">fwd.hpp:677</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1900c6ab74acd392809425953359ef52\"><div class=\"ttname\"><a href=\"a00304.html#ga1900c6ab74acd392809425953359ef52\">glm::mediump_u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, mediump &gt; mediump_u64vec3</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00391\">fwd.hpp:391</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab83d8aae6e4f115e97a785e8574a115f\"><div class=\"ttname\"><a href=\"a00304.html#gab83d8aae6e4f115e97a785e8574a115f\">glm::mediump_float64</a></div><div class=\"ttdeci\">double mediump_float64</div><div class=\"ttdoc\">Medium 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00169\">fwd.hpp:169</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga232fad1b0d6dcc7c16aabde98b2e2a80\"><div class=\"ttname\"><a href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">glm::float64</a></div><div class=\"ttdeci\">double float64</div><div class=\"ttdoc\">Double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00171\">fwd.hpp:171</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa7db3ad10947cf70cae6474d05ebd227\"><div class=\"ttname\"><a href=\"a00304.html#gaa7db3ad10947cf70cae6474d05ebd227\">glm::highp_i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, highp &gt; highp_i16vec2</div><div class=\"ttdoc\">High qualifier 16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00253\">fwd.hpp:253</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8c8aa45aafcc23238edb1d5aeb801774\"><div class=\"ttname\"><a href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">glm::fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, defaultp &gt; fmat4x2</div><div class=\"ttdoc\">Single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00662\">fwd.hpp:662</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga39e90adcffe33264bd608fa9c6bd184b\"><div class=\"ttname\"><a href=\"a00304.html#ga39e90adcffe33264bd608fa9c6bd184b\">glm::lowp_f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, lowp &gt; lowp_f64mat2x3</div><div class=\"ttdoc\">Low double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00751\">fwd.hpp:751</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga44e158af77a670ee1b58c03cda9e1619\"><div class=\"ttname\"><a href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">glm::fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, defaultp &gt; fmat3x4</div><div class=\"ttdoc\">Single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00667\">fwd.hpp:667</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad3ad390560a671b1f676fbf03cd3aa15\"><div class=\"ttname\"><a href=\"a00304.html#gad3ad390560a671b1f676fbf03cd3aa15\">glm::lowp_u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, lowp &gt; lowp_u32vec3</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00366\">fwd.hpp:366</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf512b74c4400b68f9fdf9388b3d6aac8\"><div class=\"ttname\"><a href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">glm::f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, defaultp &gt; f32mat2x4</div><div class=\"ttdoc\">Single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00706\">fwd.hpp:706</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga755484ffbe39ae3db2875953ed04e7b7\"><div class=\"ttname\"><a href=\"a00304.html#ga755484ffbe39ae3db2875953ed04e7b7\">glm::lowp_fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, lowp &gt; lowp_fvec4</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00429\">fwd.hpp:429</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad80c84bcd5f585840faa6179f6fd446c\"><div class=\"ttname\"><a href=\"a00304.html#gad80c84bcd5f585840faa6179f6fd446c\">glm::mediump_f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, mediump &gt; mediump_f32vec4</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00454\">fwd.hpp:454</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga550831bfc26d1e0101c1cb3d79938c06\"><div class=\"ttname\"><a href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">glm::i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, defaultp &gt; i16vec4</div><div class=\"ttdoc\">16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00260\">fwd.hpp:260</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga667b2ece2b258be898812dc2177995d1\"><div class=\"ttname\"><a href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">glm::lowp_uint8_t</a></div><div class=\"ttdeci\">uint8 lowp_uint8_t</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00098\">fwd.hpp:98</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae978599c9711ac263ba732d4ac225b0e\"><div class=\"ttname\"><a href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">glm::highp_uint32_t</a></div><div class=\"ttdeci\">uint32 highp_uint32_t</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00128\">fwd.hpp:128</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa07c86650253672a19dbfb898f3265b8\"><div class=\"ttname\"><a href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">glm::fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; fmat3x3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00664\">fwd.hpp:664</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad38c544d332b8c4bd0b70b1bd9feccc2\"><div class=\"ttname\"><a href=\"a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2\">glm::mediump_f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, mediump &gt; mediump_f64mat3x4</div><div class=\"ttdoc\">Medium double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00765\">fwd.hpp:765</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga71cdb53801ed4c3aadb3603c04723210\"><div class=\"ttname\"><a href=\"a00304.html#ga71cdb53801ed4c3aadb3603c04723210\">glm::lowp_fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, lowp &gt; lowp_fmat2x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00631\">fwd.hpp:631</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabed3be8dfdc4a0df4bf3271dbd7344c4\"><div class=\"ttname\"><a href=\"a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4\">glm::lowp_u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, lowp &gt; lowp_u32vec1</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00364\">fwd.hpp:364</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab256cdab5eb582e426d749ae77b5b566\"><div class=\"ttname\"><a href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">glm::f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, defaultp &gt; f32mat2x3</div><div class=\"ttdoc\">Single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00703\">fwd.hpp:703</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga46a57f71e430637559097a732b550a7e\"><div class=\"ttname\"><a href=\"a00304.html#ga46a57f71e430637559097a732b550a7e\">glm::mediump_i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, mediump &gt; mediump_i32vec1</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00267\">fwd.hpp:267</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8a85a3d54a8a9e14fe7a1f96196c4f61\"><div class=\"ttname\"><a href=\"a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61\">glm::highp_u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, highp &gt; highp_u16vec4</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00357\">fwd.hpp:357</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae31ac3608cf643ceffd6554874bec4a0\"><div class=\"ttname\"><a href=\"a00304.html#gae31ac3608cf643ceffd6554874bec4a0\">glm::lowp_i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, lowp &gt; lowp_i32vec1</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00262\">fwd.hpp:262</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab0f7d875db5f3cc9f3168c5a0ed56437\"><div class=\"ttname\"><a href=\"a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437\">glm::lowp_i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, lowp &gt; lowp_i64vec1</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00282\">fwd.hpp:282</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0e35a565b9036bfc3989f5e23a0792e3\"><div class=\"ttname\"><a href=\"a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3\">glm::highp_u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, highp &gt; highp_u32vec1</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00374\">fwd.hpp:374</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadff3608baa4b5bd3ed28f95c1c2c345d\"><div class=\"ttname\"><a href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">glm::mediump_int16</a></div><div class=\"ttdeci\">int16 mediump_int16</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00051\">fwd.hpp:51</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9df98857be695d5a30cb30f5bfa38a80\"><div class=\"ttname\"><a href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">glm::mediump_u16</a></div><div class=\"ttdeci\">uint16 mediump_u16</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00104\">fwd.hpp:104</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2b114a2f2af0fe1dfeb569c767822940\"><div class=\"ttname\"><a href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">glm::f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, defaultp &gt; f64quat</div><div class=\"ttdoc\">Double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00815\">fwd.hpp:815</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga461c4c7d0757404dd0dba931760b25cf\"><div class=\"ttname\"><a href=\"a00304.html#ga461c4c7d0757404dd0dba931760b25cf\">glm::mediump_f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, mediump &gt; mediump_f64vec3</div><div class=\"ttdoc\">Medium double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00493\">fwd.hpp:493</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf09f3ca4b671a4a4f84505eb4cc865fd\"><div class=\"ttname\"><a href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">glm::u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, defaultp &gt; u64vec1</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00399\">fwd.hpp:399</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga322a7d7d2c2c68994dc872a33de63c61\"><div class=\"ttname\"><a href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">glm::int64_t</a></div><div class=\"ttdeci\">int64 int64_t</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00085\">fwd.hpp:85</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga29b349e037f0b24320b4548a143daee2\"><div class=\"ttname\"><a href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">glm::u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, defaultp &gt; u8vec1</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00339\">fwd.hpp:339</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d8c10949691b0fd990253476f47beb3\"><div class=\"ttname\"><a href=\"a00304.html#ga1d8c10949691b0fd990253476f47beb3\">glm::highp_i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, highp &gt; highp_i8vec1</div><div class=\"ttdoc\">High qualifier 8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00232\">fwd.hpp:232</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga20779a61de2fd526a17f12fe53ec46b1\"><div class=\"ttname\"><a href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">glm::u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, defaultp &gt; u8vec4</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00342\">fwd.hpp:342</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4bf09d8838a86866b39ee6e109341645\"><div class=\"ttname\"><a href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">glm::int8_t</a></div><div class=\"ttdeci\">int8 int8_t</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00043\">fwd.hpp:43</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga96faea43ac5f875d2d3ffbf8d213e3eb\"><div class=\"ttname\"><a href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">glm::i32</a></div><div class=\"ttdeci\">int32 i32</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00062\">fwd.hpp:62</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8a11ccd2e38f674bbf3c2d1afc232aee\"><div class=\"ttname\"><a href=\"a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee\">glm::mediump_u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, mediump &gt; mediump_u32vec1</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00369\">fwd.hpp:369</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9ec7c4c79e303c053e30729a95fb2c37\"><div class=\"ttname\"><a href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">glm::f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, defaultp &gt; f64mat2x2</div><div class=\"ttdoc\">Double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00780\">fwd.hpp:780</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d091b6abfba1772450e1745a06525bc\"><div class=\"ttname\"><a href=\"a00304.html#ga1d091b6abfba1772450e1745a06525bc\">glm::lowp_f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, lowp &gt; lowp_f32mat2x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00670\">fwd.hpp:670</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4e2e1debe022074ab224c9faf856d374\"><div class=\"ttname\"><a href=\"a00304.html#ga4e2e1debe022074ab224c9faf856d374\">glm::lowp_f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, lowp &gt; lowp_f32vec4</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00449\">fwd.hpp:449</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6ef77413883f48d6b53b4169b25edbd0\"><div class=\"ttname\"><a href=\"a00304.html#ga6ef77413883f48d6b53b4169b25edbd0\">glm::highp_fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, highp &gt; highp_fvec3</div><div class=\"ttdoc\">High Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00438\">fwd.hpp:438</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab0cecb80fd106bc369b9e46a165815ce\"><div class=\"ttname\"><a href=\"a00304.html#gab0cecb80fd106bc369b9e46a165815ce\">glm::lowp_f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, lowp &gt; lowp_f64mat4x2</div><div class=\"ttdoc\">Low double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00756\">fwd.hpp:756</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa6f526388c74a66b3d52315a14d434ae\"><div class=\"ttname\"><a href=\"a00304.html#gaa6f526388c74a66b3d52315a14d434ae\">glm::mediump_fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, mediump &gt; mediump_fmat3x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00644\">fwd.hpp:644</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabd2fda3cd208acf5a370ec9b5b3c58d4\"><div class=\"ttname\"><a href=\"a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4\">glm::highp_i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, highp &gt; highp_i64vec1</div><div class=\"ttdoc\">High qualifier 64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00292\">fwd.hpp:292</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4177a44206121dabc8c4ff1c0f544574\"><div class=\"ttname\"><a href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">glm::i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, defaultp &gt; i8vec4</div><div class=\"ttdoc\">8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00240\">fwd.hpp:240</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga84ed04b4e0de18c977e932d617e7c223\"><div class=\"ttname\"><a href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">glm::highp_int32</a></div><div class=\"ttdeci\">int32 highp_int32</div><div class=\"ttdoc\">High qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00066\">fwd.hpp:66</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad4cc829ab1ad3e05ac0a24828a3c95cf\"><div class=\"ttname\"><a href=\"a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf\">glm::mediump_f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, mediump &gt; mediump_f32mat2x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00681\">fwd.hpp:681</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab0eb2d65514ee3e49905aa2caad8c0ad\"><div class=\"ttname\"><a href=\"a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad\">glm::lowp_f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, lowp &gt; lowp_f64mat3x2</div><div class=\"ttdoc\">Low double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00753\">fwd.hpp:753</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7a6f1929464dcc680b16381a4ee5f2cf\"><div class=\"ttname\"><a href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">glm::highp_u32</a></div><div class=\"ttdeci\">uint32 highp_u32</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00119\">fwd.hpp:119</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga727675ac6b5d2fc699520e0059735e25\"><div class=\"ttname\"><a href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">glm::highp_i32</a></div><div class=\"ttdeci\">int32 highp_i32</div><div class=\"ttdoc\">High qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00061\">fwd.hpp:61</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3945dd6515d4498cb603e65ff867ab03\"><div class=\"ttname\"><a href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">glm::u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, defaultp &gt; u64vec4</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00402\">fwd.hpp:402</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga31c6ca0e074a44007f49a9a3720b18c8\"><div class=\"ttname\"><a href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">glm::f32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, defaultp &gt; f32vec4</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00464\">fwd.hpp:464</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae3ab5719fc4c1e966631dbbcba8d412a\"><div class=\"ttname\"><a href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">glm::f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, defaultp &gt; f64mat2x3</div><div class=\"ttdoc\">Double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00783\">fwd.hpp:783</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga66edb8de17b9235029472f043ae107e9\"><div class=\"ttname\"><a href=\"a00304.html#ga66edb8de17b9235029472f043ae107e9\">glm::mediump_f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, mediump &gt; mediump_f64mat4x4</div><div class=\"ttdoc\">Medium double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00768\">fwd.hpp:768</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa7f00459b9a2e5b2757e70afc0c189e1\"><div class=\"ttname\"><a href=\"a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1\">glm::lowp_u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, lowp &gt; lowp_u16vec4</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00347\">fwd.hpp:347</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga256b12b650c3f2fb86878fd1c5db8bc3\"><div class=\"ttname\"><a href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">glm::highp_uint32</a></div><div class=\"ttdeci\">uint32 highp_uint32</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00124\">fwd.hpp:124</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga766aed2871e6173a81011a877f398f04\"><div class=\"ttname\"><a href=\"a00304.html#ga766aed2871e6173a81011a877f398f04\">glm::lowp_f32mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, lowp &gt; lowp_f32mat4</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00542\">fwd.hpp:542</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2473d8bf3f4abf967c4d0e18175be6f7\"><div class=\"ttname\"><a href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">glm::f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, defaultp &gt; f64mat3x2</div><div class=\"ttdoc\">Double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00781\">fwd.hpp:781</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7812bf00676fb1a86dcd62cca354d2c7\"><div class=\"ttname\"><a href=\"a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7\">glm::mediump_float32</a></div><div class=\"ttdeci\">float mediump_float32</div><div class=\"ttdoc\">Medium 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00153\">fwd.hpp:153</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae627372cfd5f20dd87db490387b71195\"><div class=\"ttname\"><a href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">glm::u32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u32, defaultp &gt; u32vec1</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00379\">fwd.hpp:379</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacfea053bd6bb3eddb996a4f94de22a3e\"><div class=\"ttname\"><a href=\"a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e\">glm::mediump_f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, mediump &gt; mediump_f64vec4</div><div class=\"ttdoc\">Medium double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00494\">fwd.hpp:494</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga916c1aed91cf91f7b41399ebe7c6e185\"><div class=\"ttname\"><a href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">glm::f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, defaultp &gt; f64mat3x3</div><div class=\"ttdoc\">Double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00784\">fwd.hpp:784</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac5a7f21136e0a78d0a1b9f60ef2f8aea\"><div class=\"ttname\"><a href=\"a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea\">glm::highp_float32</a></div><div class=\"ttdeci\">float highp_float32</div><div class=\"ttdoc\">High 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00154\">fwd.hpp:154</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga97432f9979e73e66567361fd01e4cffb\"><div class=\"ttname\"><a href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">glm::highp_uint8</a></div><div class=\"ttdeci\">uint8 highp_uint8</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00096\">fwd.hpp:96</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacb88796f2d08ef253d0345aff20c3aee\"><div class=\"ttname\"><a href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">glm::highp_i8</a></div><div class=\"ttdeci\">int8 highp_i8</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00033\">fwd.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga50265a202fbfe0a25fc70066c31d9336\"><div class=\"ttname\"><a href=\"a00304.html#ga50265a202fbfe0a25fc70066c31d9336\">glm::lowp_f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, lowp &gt; lowp_f64mat2x4</div><div class=\"ttdoc\">Low double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00752\">fwd.hpp:752</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gade8d1edfb23996ab6c622e65e3893271\"><div class=\"ttname\"><a href=\"a00304.html#gade8d1edfb23996ab6c622e65e3893271\">glm::lowp_f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, lowp &gt; lowp_f64mat3x4</div><div class=\"ttdoc\">Low double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00755\">fwd.hpp:755</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacf1ded173e1e2d049c511d095b259e21\"><div class=\"ttname\"><a href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">glm::mediump_i8</a></div><div class=\"ttdeci\">int8 mediump_i8</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00032\">fwd.hpp:32</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga73c6abb280a45feeff60f9accaee91f3\"><div class=\"ttname\"><a href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">glm::highp_int64_t</a></div><div class=\"ttdeci\">int64 highp_int64_t</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00084\">fwd.hpp:84</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaee4da0e9fbd8cfa2f89cb80889719dc3\"><div class=\"ttname\"><a href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">glm::f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; f32mat4x4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00708\">fwd.hpp:708</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa4947bc8b47c72fceea9bda730ecf603\"><div class=\"ttname\"><a href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">glm::float32_t</a></div><div class=\"ttdeci\">float float32_t</div><div class=\"ttdoc\">Default 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00160\">fwd.hpp:160</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga04100c76f7d55a0dd0983ccf05142bff\"><div class=\"ttname\"><a href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">glm::f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; f32mat2x2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00700\">fwd.hpp:700</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab485c48f06a4fdd6b8d58d343bb49f3c\"><div class=\"ttname\"><a href=\"a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c\">glm::lowp_i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, lowp &gt; lowp_i64vec2</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00283\">fwd.hpp:283</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacc6bf0209dda0c7c14851a646071c974\"><div class=\"ttname\"><a href=\"a00304.html#gacc6bf0209dda0c7c14851a646071c974\">glm::lowp_f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, lowp &gt; lowp_f32mat2x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00672\">fwd.hpp:672</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2171d9dc1fefb1c82e2817f45b622eac\"><div class=\"ttname\"><a href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">glm::uint32_t</a></div><div class=\"ttdeci\">uint32 uint32_t</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00129\">fwd.hpp:129</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga24f9ef3263b1638564713892cc37981f\"><div class=\"ttname\"><a href=\"a00304.html#ga24f9ef3263b1638564713892cc37981f\">glm::highp_f32mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, highp &gt; highp_f32mat3</div><div class=\"ttdoc\">High single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00549\">fwd.hpp:549</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga84d88a6e3a54ccd2b67e195af4a4c23e\"><div class=\"ttname\"><a href=\"a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e\">glm::mediump_f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, mediump &gt; mediump_f64mat3x3</div><div class=\"ttdoc\">Medium double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00764\">fwd.hpp:764</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaecc7082561fc9028b844b6cf3d305d36\"><div class=\"ttname\"><a href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">glm::u8</a></div><div class=\"ttdeci\">uint8 u8</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00092\">fwd.hpp:92</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga31e070ea3bdee623e6e18a61ba5718b1\"><div class=\"ttname\"><a href=\"a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1\">glm::highp_i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, highp &gt; highp_i32vec3</div><div class=\"ttdoc\">High qualifier 32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00274\">fwd.hpp:274</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaacdc525d6f7bddb3ae95d5c311bd06a1\"><div class=\"ttname\"><a href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">glm::float32</a></div><div class=\"ttdeci\">float float32</div><div class=\"ttdoc\">Single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00155\">fwd.hpp:155</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga713c796c54875cf4092d42ff9d9096b0\"><div class=\"ttname\"><a href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">glm::fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, f32, defaultp &gt; fvec4</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00444\">fwd.hpp:444</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6a9d71cc62745302f70422b7dc98755c\"><div class=\"ttname\"><a href=\"a00304.html#ga6a9d71cc62745302f70422b7dc98755c\">glm::highp_i32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i32, highp &gt; highp_i32vec1</div><div class=\"ttdoc\">High qualifier 32 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00272\">fwd.hpp:272</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4187f89f196505b40e63f516139511e5\"><div class=\"ttname\"><a href=\"a00304.html#ga4187f89f196505b40e63f516139511e5\">glm::lowp_f32mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, lowp &gt; lowp_f32mat3</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00541\">fwd.hpp:541</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga08c05ba8ffb19f5d14ab584e1e9e9ee5\"><div class=\"ttname\"><a href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">glm::u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, defaultp &gt; u16vec1</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00359\">fwd.hpp:359</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7e80d927ff0a3861ced68dfff8a4020b\"><div class=\"ttname\"><a href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">glm::i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, defaultp &gt; i8vec1</div><div class=\"ttdoc\">8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00237\">fwd.hpp:237</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga13a221b910aa9eb1b04ca1c86e81015a\"><div class=\"ttname\"><a href=\"a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a\">glm::mediump_i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, mediump &gt; mediump_i32vec3</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00269\">fwd.hpp:269</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b44026374982dcd1e52d22bac99247e\"><div class=\"ttname\"><a href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">glm::i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, defaultp &gt; i32vec2</div><div class=\"ttdoc\">32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00278\">fwd.hpp:278</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7cac84b520a6b57f2fbd880d3d63c51b\"><div class=\"ttname\"><a href=\"a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b\">glm::lowp_i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, lowp &gt; lowp_i16vec2</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00243\">fwd.hpp:243</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga73a08ef5a74798f3a1a99250b5f86a7d\"><div class=\"ttname\"><a href=\"a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d\">glm::mediump_u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, mediump &gt; mediump_u64vec2</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00390\">fwd.hpp:390</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9910927f3a4d1addb3da6a82542a8287\"><div class=\"ttname\"><a href=\"a00304.html#ga9910927f3a4d1addb3da6a82542a8287\">glm::lowp_u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, lowp &gt; lowp_u8vec4</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00327\">fwd.hpp:327</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaab691ae40c37976d268d8cac0096e0e1\"><div class=\"ttname\"><a href=\"a00304.html#gaab691ae40c37976d268d8cac0096e0e1\">glm::highp_f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, highp &gt; highp_f32mat3x3</div><div class=\"ttdoc\">High single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00694\">fwd.hpp:694</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8408cb76b6550ff01fa0a3024e7b68d2\"><div class=\"ttname\"><a href=\"a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2\">glm::highp_u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, highp &gt; highp_u8vec1</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00334\">fwd.hpp:334</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac4e00a26a2adb5f2c0a7096810df29e5\"><div class=\"ttname\"><a href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">glm::highp_uint8_t</a></div><div class=\"ttdeci\">uint8 highp_uint8_t</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00100\">fwd.hpp:100</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5d43ee8b5dbaa06c327b03b83682598a\"><div class=\"ttname\"><a href=\"a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a\">glm::mediump_u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, mediump &gt; mediump_u32vec4</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00372\">fwd.hpp:372</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae5eb02d92b7d4605a4b7f37ae5cb2968\"><div class=\"ttname\"><a href=\"a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968\">glm::highp_f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, highp &gt; highp_f32mat2x2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00690\">fwd.hpp:690</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga61185c44c8cc0b25d9a0f67d8a267444\"><div class=\"ttname\"><a href=\"a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444\">glm::highp_f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, highp &gt; highp_f64vec4</div><div class=\"ttdoc\">High double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00499\">fwd.hpp:499</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga150dc47e31c6b8cf8461803c8d56f7bd\"><div class=\"ttname\"><a href=\"a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd\">glm::lowp_u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, lowp &gt; lowp_u8vec3</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00326\">fwd.hpp:326</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6906e1ef0b34064b4b675489c5c38725\"><div class=\"ttname\"><a href=\"a00304.html#ga6906e1ef0b34064b4b675489c5c38725\">glm::highp_f32</a></div><div class=\"ttdeci\">float highp_f32</div><div class=\"ttdoc\">High 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00149\">fwd.hpp:149</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga30652709815ad9404272a31957daa59e\"><div class=\"ttname\"><a href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">glm::mediump_uint64</a></div><div class=\"ttdeci\">uint64 mediump_uint64</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00137\">fwd.hpp:137</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2c71c8bd9e2fe7d2e93ca250d8b6157f\"><div class=\"ttname\"><a href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">glm::highp_int32_t</a></div><div class=\"ttdeci\">int32 highp_int32_t</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00070\">fwd.hpp:70</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa7a1ddca75c5f629173bf4772db7a635\"><div class=\"ttname\"><a href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">glm::f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, defaultp &gt; f64vec3</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00503\">fwd.hpp:503</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga961ccb34cd1a5654c772c8709e001dc5\"><div class=\"ttname\"><a href=\"a00304.html#ga961ccb34cd1a5654c772c8709e001dc5\">glm::lowp_f32mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, lowp &gt; lowp_f32mat2x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00671\">fwd.hpp:671</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac9ba20234b0c3751d45ce575fc71e551\"><div class=\"ttname\"><a href=\"a00304.html#gac9ba20234b0c3751d45ce575fc71e551\">glm::mediump_u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, mediump &gt; mediump_u16vec3</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00351\">fwd.hpp:351</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac87278e0c702ba8afff76316d4eeb769\"><div class=\"ttname\"><a href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">glm::f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, defaultp &gt; f64mat2x4</div><div class=\"ttdoc\">Double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00786\">fwd.hpp:786</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga856f3905ee7cc2e4890a8a1d56c150be\"><div class=\"ttname\"><a href=\"a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be\">glm::f32mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; f32mat3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00553\">fwd.hpp:553</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4fd527644cccbca4cb205320eab026f3\"><div class=\"ttname\"><a href=\"a00304.html#ga4fd527644cccbca4cb205320eab026f3\">glm::mediump_f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, mediump &gt; mediump_f64mat2x2</div><div class=\"ttdoc\">Medium double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00760\">fwd.hpp:760</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2af9490085ae3bdf36a544e9dd073610\"><div class=\"ttname\"><a href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">glm::mediump_u64</a></div><div class=\"ttdeci\">uint64 mediump_u64</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00132\">fwd.hpp:132</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7a18659438828f91ccca28f1a1e067b4\"><div class=\"ttname\"><a href=\"a00304.html#ga7a18659438828f91ccca28f1a1e067b4\">glm::highp_i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, highp &gt; highp_i16vec4</div><div class=\"ttdoc\">High qualifier 16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00255\">fwd.hpp:255</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5803cb9ae26399762d8bba9e0b2fc09f\"><div class=\"ttname\"><a href=\"a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f\">glm::lowp_fmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, lowp &gt; lowp_fmat4</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00526\">fwd.hpp:526</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga94f74851fce338549c705b5f0d601c4f\"><div class=\"ttname\"><a href=\"a00304.html#ga94f74851fce338549c705b5f0d601c4f\">glm::mediump_u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, mediump &gt; mediump_u32vec2</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00370\">fwd.hpp:370</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga41bdabea6e589029659331ba47eb78c1\"><div class=\"ttname\"><a href=\"a00304.html#ga41bdabea6e589029659331ba47eb78c1\">glm::highp_u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, highp &gt; highp_u64vec3</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00396\">fwd.hpp:396</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga504ce1631cb2ac02fcf1d44d8c2aa126\"><div class=\"ttname\"><a href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">glm::lowp_u16</a></div><div class=\"ttdeci\">uint16 lowp_u16</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00103\">fwd.hpp:103</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab69ef9cbc2a9214bf5596c528c801b72\"><div class=\"ttname\"><a href=\"a00304.html#gab69ef9cbc2a9214bf5596c528c801b72\">glm::lowp_i16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i16, lowp &gt; lowp_i16vec3</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00244\">fwd.hpp:244</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac0253db6c3d3bae1f591676307a9dd8c\"><div class=\"ttname\"><a href=\"a00304.html#gac0253db6c3d3bae1f591676307a9dd8c\">glm::lowp_u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, lowp &gt; lowp_u16vec3</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00346\">fwd.hpp:346</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf739a2cd7b81783a43148b53e40d983b\"><div class=\"ttname\"><a href=\"a00304.html#gaf739a2cd7b81783a43148b53e40d983b\">glm::lowp_f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, lowp &gt; lowp_f32vec3</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00448\">fwd.hpp:448</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabf28443ce0cc0959077ec39b21f32c39\"><div class=\"ttname\"><a href=\"a00304.html#gabf28443ce0cc0959077ec39b21f32c39\">glm::highp_fmat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, highp &gt; highp_fmat4</div><div class=\"ttdoc\">High single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00534\">fwd.hpp:534</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga83079315e230e8f39728f4bf0d2f9a9b\"><div class=\"ttname\"><a href=\"a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b\">glm::lowp_fmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, lowp &gt; lowp_fmat3</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00525\">fwd.hpp:525</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0336abc2604dd2c20c30e036454b64f8\"><div class=\"ttname\"><a href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">glm::highp_i16</a></div><div class=\"ttdeci\">int16 highp_i16</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00047\">fwd.hpp:47</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa40c03d52dbfbfaf03e75773b9606ff3\"><div class=\"ttname\"><a href=\"a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3\">glm::mediump_f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, mediump &gt; mediump_f32quat</div><div class=\"ttdoc\">Medium single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00803\">fwd.hpp:803</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad0549c902a96a7164e4ac858d5f39dbf\"><div class=\"ttname\"><a href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">glm::highp_int8</a></div><div class=\"ttdeci\">int8 highp_int8</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00038\">fwd.hpp:38</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae52e2b7077a9ff928a06ab5ce600b81e\"><div class=\"ttname\"><a href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">glm::f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, defaultp &gt; f64mat4x4</div><div class=\"ttdoc\">Double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00788\">fwd.hpp:788</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4295048a78bdf46b8a7de77ec665b497\"><div class=\"ttname\"><a href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">glm::fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, defaultp &gt; fmat4x3</div><div class=\"ttdoc\">Single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00665\">fwd.hpp:665</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaab217601c74974a84acbca428123ecf7\"><div class=\"ttname\"><a href=\"a00304.html#gaab217601c74974a84acbca428123ecf7\">glm::lowp_fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, lowp &gt; lowp_fmat2x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00632\">fwd.hpp:632</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga609bf0ace941d6ab1bb2f9522a04e546\"><div class=\"ttname\"><a href=\"a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546\">glm::highp_f64mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, highp &gt; highp_f64mat3</div><div class=\"ttdoc\">High double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00581\">fwd.hpp:581</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6dd1c1618378c6f94d522a61c28773c9\"><div class=\"ttname\"><a href=\"a00304.html#ga6dd1c1618378c6f94d522a61c28773c9\">glm::mediump_i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, mediump &gt; mediump_i8vec3</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00229\">fwd.hpp:229</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab1b1c9e8667902b78b2c330e4d383a61\"><div class=\"ttname\"><a href=\"a00304.html#gab1b1c9e8667902b78b2c330e4d383a61\">glm::highp_f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, highp &gt; highp_f32vec1</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00456\">fwd.hpp:456</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae2f43ace6b5b33ab49516d9e40af1845\"><div class=\"ttname\"><a href=\"a00304.html#gae2f43ace6b5b33ab49516d9e40af1845\">glm::lowp_i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, lowp &gt; lowp_i8vec3</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00224\">fwd.hpp:224</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae731613b25db3a5ef5a05d21e57a57d3\"><div class=\"ttname\"><a href=\"a00304.html#gae731613b25db3a5ef5a05d21e57a57d3\">glm::lowp_f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, lowp &gt; lowp_f64mat4x3</div><div class=\"ttdoc\">Low double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00757\">fwd.hpp:757</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4f15b41aa24b11cc42ad5798c04a2325\"><div class=\"ttname\"><a href=\"a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325\">glm::highp_u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, highp &gt; highp_u64vec4</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00397\">fwd.hpp:397</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga89930533646b30d021759298aa6bf04a\"><div class=\"ttname\"><a href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">glm::fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, defaultp &gt; fvec3</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00443\">fwd.hpp:443</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2996630ba7b10535af8e065cf326f761\"><div class=\"ttname\"><a href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">glm::i16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i16, defaultp &gt; i16vec2</div><div class=\"ttdoc\">16 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00258\">fwd.hpp:258</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga239b96198771b7add8eea7e6b59840c0\"><div class=\"ttname\"><a href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">glm::f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, defaultp &gt; f32mat4x3</div><div class=\"ttdoc\">Single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00705\">fwd.hpp:705</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab12383ed6ac7595ed6fde4d266c58425\"><div class=\"ttname\"><a href=\"a00304.html#gab12383ed6ac7595ed6fde4d266c58425\">glm::f32mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; f32mat2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00552\">fwd.hpp:552</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga429c201b3e92c90b4ef4356f2be52ee1\"><div class=\"ttname\"><a href=\"a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1\">glm::mediump_u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, mediump &gt; mediump_u16vec2</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00350\">fwd.hpp:350</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga35223623e9ccebd8a281873b71b7d213\"><div class=\"ttname\"><a href=\"a00304.html#ga35223623e9ccebd8a281873b71b7d213\">glm::mediump_fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, mediump &gt; mediump_fmat2x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00642\">fwd.hpp:642</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4143d129898f91545948c46859adce44\"><div class=\"ttname\"><a href=\"a00304.html#ga4143d129898f91545948c46859adce44\">glm::lowp_f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, lowp &gt; lowp_f32mat4x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00678\">fwd.hpp:678</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae6f63fa38635431e51a8f2602f15c566\"><div class=\"ttname\"><a href=\"a00304.html#gae6f63fa38635431e51a8f2602f15c566\">glm::lowp_u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, lowp &gt; lowp_u8vec2</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00325\">fwd.hpp:325</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad35fb67eb1d03c5a514f0bd7aed1c776\"><div class=\"ttname\"><a href=\"a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776\">glm::mediump_f64mat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, mediump &gt; mediump_f64mat3</div><div class=\"ttdoc\">Medium double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00577\">fwd.hpp:577</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga392b673fd10847bfb78fb808c6cf8ff7\"><div class=\"ttname\"><a href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">glm::lowp_i16</a></div><div class=\"ttdeci\">int16 lowp_i16</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00045\">fwd.hpp:45</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga961fac2a885907ffcf4d40daac6615c5\"><div class=\"ttname\"><a href=\"a00304.html#ga961fac2a885907ffcf4d40daac6615c5\">glm::highp_fmat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, highp &gt; highp_fmat3x4</div><div class=\"ttdoc\">High single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00655\">fwd.hpp:655</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga728366fef72cd96f0a5fa6429f05469e\"><div class=\"ttname\"><a href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">glm::float64_t</a></div><div class=\"ttdeci\">double float64_t</div><div class=\"ttdoc\">Default 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00176\">fwd.hpp:176</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga09a2374b725c4246d263ee36fb66434c\"><div class=\"ttname\"><a href=\"a00304.html#ga09a2374b725c4246d263ee36fb66434c\">glm::highp_f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, highp &gt; highp_f64mat4x4</div><div class=\"ttdoc\">High double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00778\">fwd.hpp:778</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gade108f16633cf95fa500b5b8c36c8b00\"><div class=\"ttname\"><a href=\"a00304.html#gade108f16633cf95fa500b5b8c36c8b00\">glm::mediump_f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, mediump &gt; mediump_f32mat4x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00687\">fwd.hpp:687</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga698e36b01167fc0f037889334dce8def\"><div class=\"ttname\"><a href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">glm::lowp_int16</a></div><div class=\"ttdeci\">int16 lowp_int16</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00050\">fwd.hpp:50</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga80823dfad5dba98512c76af498343847\"><div class=\"ttname\"><a href=\"a00304.html#ga80823dfad5dba98512c76af498343847\">glm::mediump_fmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, mediump &gt; mediump_fmat3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00529\">fwd.hpp:529</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf1b712b97b2322685fbbed28febe5f84\"><div class=\"ttname\"><a href=\"a00304.html#gaf1b712b97b2322685fbbed28febe5f84\">glm::highp_f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, highp &gt; highp_f32mat4x4</div><div class=\"ttdoc\">High single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00698\">fwd.hpp:698</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaebf341fc4a5be233f7dde962c2e33847\"><div class=\"ttname\"><a href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">glm::lowp_int64_t</a></div><div class=\"ttdeci\">int64 lowp_int64_t</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00082\">fwd.hpp:82</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga91f91f411080c37730856ff5887f5bcf\"><div class=\"ttname\"><a href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">glm::uint16_t</a></div><div class=\"ttdeci\">uint16 uint16_t</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00115\">fwd.hpp:115</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga670ea1b0a1172bc73b1d7c1e0c26cce2\"><div class=\"ttname\"><a href=\"a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2\">glm::highp_f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, highp &gt; highp_f64vec2</div><div class=\"ttdoc\">High double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00497\">fwd.hpp:497</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga581485db4ba6ddb501505ee711fd8e42\"><div class=\"ttname\"><a href=\"a00304.html#ga581485db4ba6ddb501505ee711fd8e42\">glm::lowp_u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, lowp &gt; lowp_u64vec2</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00385\">fwd.hpp:385</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga253d453c20e037730023fea0215cb6f6\"><div class=\"ttname\"><a href=\"a00304.html#ga253d453c20e037730023fea0215cb6f6\">glm::fmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; fmat3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00537\">fwd.hpp:537</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaaab39454f56cf9fc6d940358ce5e6a0f\"><div class=\"ttname\"><a href=\"a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f\">glm::mediump_f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, mediump &gt; mediump_f32mat3x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00683\">fwd.hpp:683</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae6f3fcb702a666de07650c149cfa845a\"><div class=\"ttname\"><a href=\"a00304.html#gae6f3fcb702a666de07650c149cfa845a\">glm::lowp_f32mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, lowp &gt; lowp_f32mat4x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00676\">fwd.hpp:676</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga864aabca5f3296e176e0c3ed9cc16b02\"><div class=\"ttname\"><a href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">glm::lowp_int32</a></div><div class=\"ttdeci\">int32 lowp_int32</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00064\">fwd.hpp:64</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabf1f16c5ab8cb0484bd1e846ae4368f1\"><div class=\"ttname\"><a href=\"a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1\">glm::mediump_i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, mediump &gt; mediump_i64vec4</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00290\">fwd.hpp:290</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28d97808322d3c92186e4a0c067d7e8e\"><div class=\"ttname\"><a href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">glm::uint8_t</a></div><div class=\"ttdeci\">uint8 uint8_t</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00101\">fwd.hpp:101</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga85e8893f4ae3630065690a9000c0c483\"><div class=\"ttname\"><a href=\"a00304.html#ga85e8893f4ae3630065690a9000c0c483\">glm::mediump_i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, mediump &gt; mediump_i8vec1</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00227\">fwd.hpp:227</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga26fc7ced1ad7ca5024f1c973c8dc9180\"><div class=\"ttname\"><a href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">glm::mediump_int32_t</a></div><div class=\"ttdeci\">int32 mediump_int32_t</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00069\">fwd.hpp:69</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5376ef18dca9d248897c3363ef5a06b2\"><div class=\"ttname\"><a href=\"a00304.html#ga5376ef18dca9d248897c3363ef5a06b2\">glm::highp_float32_t</a></div><div class=\"ttdeci\">float highp_float32_t</div><div class=\"ttdoc\">High 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00159\">fwd.hpp:159</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga65261fa8a21045c8646ddff114a56174\"><div class=\"ttname\"><a href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">glm::f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, defaultp &gt; f32mat3x3</div><div class=\"ttdoc\">Single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00704\">fwd.hpp:704</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd1259f3a9e8d2a9df5be2d74322ef9c\"><div class=\"ttname\"><a href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">glm::highp_u8</a></div><div class=\"ttdeci\">uint8 highp_u8</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00091\">fwd.hpp:91</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1fa92a233b9110861cdbc8c2ccf0b5a3\"><div class=\"ttname\"><a href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">glm::mediump_uint8</a></div><div class=\"ttdeci\">uint8 mediump_uint8</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00095\">fwd.hpp:95</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga076961cf2d120c7168b957cb2ed107b3\"><div class=\"ttname\"><a href=\"a00304.html#ga076961cf2d120c7168b957cb2ed107b3\">glm::highp_fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, highp &gt; highp_fmat4x2</div><div class=\"ttdoc\">High single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00656\">fwd.hpp:656</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0b8ebd4262331e139ff257d7cf2a4b77\"><div class=\"ttname\"><a href=\"a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77\">glm::highp_f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, highp &gt; highp_f32vec2</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00457\">fwd.hpp:457</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac3bc41bcac61d1ba8f02a6f68ce23f64\"><div class=\"ttname\"><a href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">glm::mediump_int64_t</a></div><div class=\"ttdeci\">int64 mediump_int64_t</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00083\">fwd.hpp:83</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa4a8682bec7ec8af666ef87fae38d5d1\"><div class=\"ttname\"><a href=\"a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1\">glm::lowp_u64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u64, lowp &gt; lowp_u64vec3</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00386\">fwd.hpp:386</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga773ea237a051827cfc20de960bc73ff0\"><div class=\"ttname\"><a href=\"a00304.html#ga773ea237a051827cfc20de960bc73ff0\">glm::highp_f64mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, highp &gt; highp_f64mat2x2</div><div class=\"ttdoc\">High double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00770\">fwd.hpp:770</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf14d7a50502464e7cbfa074f24684cb1\"><div class=\"ttname\"><a href=\"a00304.html#gaf14d7a50502464e7cbfa074f24684cb1\">glm::highp_u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, highp &gt; highp_u32vec3</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00376\">fwd.hpp:376</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1085c50dd8fbeb5e7e609b1c127492a5\"><div class=\"ttname\"><a href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">glm::highp_int8_t</a></div><div class=\"ttdeci\">int8 highp_int8_t</div><div class=\"ttdoc\">High qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00042\">fwd.hpp:42</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa3ba60ef8f69c6aeb1629594eaa95347\"><div class=\"ttname\"><a href=\"a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347\">glm::lowp_f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, lowp &gt; lowp_f32quat</div><div class=\"ttdoc\">Low single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00802\">fwd.hpp:802</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac9b2eb4296ffe50a32eacca9ed932c08\"><div class=\"ttname\"><a href=\"a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08\">glm::lowp_i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, lowp &gt; lowp_i32vec4</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00265\">fwd.hpp:265</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga70fdfcc1fd38084bde83c3f06a8b9f19\"><div class=\"ttname\"><a href=\"a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19\">glm::highp_i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, highp &gt; highp_i16vec1</div><div class=\"ttdoc\">High qualifier 16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00252\">fwd.hpp:252</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac2f5263708ac847b361a9841e74ddf9f\"><div class=\"ttname\"><a href=\"a00304.html#gac2f5263708ac847b361a9841e74ddf9f\">glm::lowp_fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, lowp &gt; lowp_fmat4x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00638\">fwd.hpp:638</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1320a08e14fdff3821241eefab6947e9\"><div class=\"ttname\"><a href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">glm::f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, defaultp &gt; f32mat3x2</div><div class=\"ttdoc\">Single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00701\">fwd.hpp:701</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga841211b641cff1fcf861bdb14e5e4abc\"><div class=\"ttname\"><a href=\"a00304.html#ga841211b641cff1fcf861bdb14e5e4abc\">glm::lowp_f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, lowp &gt; lowp_f32mat3x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00674\">fwd.hpp:674</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac03e5099d27eeaa74b6016ea435a1df2\"><div class=\"ttname\"><a href=\"a00304.html#gac03e5099d27eeaa74b6016ea435a1df2\">glm::lowp_i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, lowp &gt; lowp_i8vec2</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00223\">fwd.hpp:223</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga866a05905c49912309ed1fa5f5980e61\"><div class=\"ttname\"><a href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">glm::i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, defaultp &gt; i32vec4</div><div class=\"ttdoc\">32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00280\">fwd.hpp:280</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga298f7d4d273678d0282812368da27fda\"><div class=\"ttname\"><a href=\"a00304.html#ga298f7d4d273678d0282812368da27fda\">glm::highp_f32mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, highp &gt; highp_f32mat2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00548\">fwd.hpp:548</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaeea53879fc327293cf3352a409b7867b\"><div class=\"ttname\"><a href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">glm::lowp_f32</a></div><div class=\"ttdeci\">float lowp_f32</div><div class=\"ttdoc\">Low 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00147\">fwd.hpp:147</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5793393686ce5bd2d5968ff9144762b8\"><div class=\"ttname\"><a href=\"a00304.html#ga5793393686ce5bd2d5968ff9144762b8\">glm::mediump_u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, mediump &gt; mediump_u16vec4</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00352\">fwd.hpp:352</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae267358ff2a41d156d97f5762630235a\"><div class=\"ttname\"><a href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">glm::u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, defaultp &gt; u32vec3</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00381\">fwd.hpp:381</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga518b8d948a6b4ddb72f84d5c3b7b6611\"><div class=\"ttname\"><a href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, defaultp &gt; u8vec2</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00340\">fwd.hpp:340</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga62a17cddeb4dffb4e18fe3aea23f051a\"><div class=\"ttname\"><a href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">glm::mediump_i16</a></div><div class=\"ttdeci\">int16 mediump_i16</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00046\">fwd.hpp:46</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga78f77b8b2d17b431ac5a68c0b5d7050d\"><div class=\"ttname\"><a href=\"a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d\">glm::highp_u64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u64, highp &gt; highp_u64vec2</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00395\">fwd.hpp:395</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5a08d36cf7917cd19d081a603d0eae3e\"><div class=\"ttname\"><a href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">glm::i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, defaultp &gt; i8vec3</div><div class=\"ttdoc\">8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00239\">fwd.hpp:239</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa3ca74a44102035b3ffb5c9c52dfdd3f\"><div class=\"ttname\"><a href=\"a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f\">glm::mediump_f32mat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, mediump &gt; mediump_f32mat2x2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00680\">fwd.hpp:680</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3963b1050fc65a383ee28e3f827b6e3e\"><div class=\"ttname\"><a href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">glm::mediump_uint16_t</a></div><div class=\"ttdeci\">uint16 mediump_uint16_t</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00113\">fwd.hpp:113</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga54697a78f9a4643af6a57fc2e626ec0d\"><div class=\"ttname\"><a href=\"a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d\">glm::mediump_f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, mediump &gt; mediump_f64mat4x3</div><div class=\"ttdoc\">Medium double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00767\">fwd.hpp:767</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7c5706f6bbe5282e5598acf7e7b377e2\"><div class=\"ttname\"><a href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">glm::u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, defaultp &gt; u8vec3</div><div class=\"ttdoc\">Default qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00341\">fwd.hpp:341</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga51d5266017d88f62737c1973923a7cf4\"><div class=\"ttname\"><a href=\"a00304.html#ga51d5266017d88f62737c1973923a7cf4\">glm::highp_f64</a></div><div class=\"ttdeci\">double highp_f64</div><div class=\"ttdoc\">High 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00165\">fwd.hpp:165</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga999dc6703ad16e3d3c26b74ea8083f07\"><div class=\"ttname\"><a href=\"a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07\">glm::mediump_fvec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, mediump &gt; mediump_fvec3</div><div class=\"ttdoc\">Medium Single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00433\">fwd.hpp:433</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7b968f2b86a0442a89c7359171e1d866\"><div class=\"ttname\"><a href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">glm::mediump_int64</a></div><div class=\"ttdeci\">int64 mediump_int64</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00079\">fwd.hpp:79</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaec7ee455cb379ec2993e81482123e1cc\"><div class=\"ttname\"><a href=\"a00304.html#gaec7ee455cb379ec2993e81482123e1cc\">glm::mediump_u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, mediump &gt; mediump_u64vec4</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00392\">fwd.hpp:392</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3999d3e7ff22025c16ddb601e14dfdee\"><div class=\"ttname\"><a href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">glm::uint64_t</a></div><div class=\"ttdeci\">uint64 uint64_t</div><div class=\"ttdoc\">Default qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00143\">fwd.hpp:143</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2f256334f83fba4c2d219e414b51df6c\"><div class=\"ttname\"><a href=\"a00304.html#ga2f256334f83fba4c2d219e414b51df6c\">glm::highp_u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, highp &gt; highp_u32vec2</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00375\">fwd.hpp:375</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa1040342c4efdedc8f90e6267db8d41c\"><div class=\"ttname\"><a href=\"a00304.html#gaa1040342c4efdedc8f90e6267db8d41c\">glm::highp_fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, highp &gt; highp_fvec1</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00436\">fwd.hpp:436</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabb4229a4c1488bf063eed0c45355bb9c\"><div class=\"ttname\"><a href=\"a00304.html#gabb4229a4c1488bf063eed0c45355bb9c\">glm::lowp_i64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i64, lowp &gt; lowp_i64vec4</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00285\">fwd.hpp:285</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7f526b5cccef126a2ebcf9bdd890394e\"><div class=\"ttname\"><a href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">glm::i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, defaultp &gt; i32vec3</div><div class=\"ttdoc\">32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00279\">fwd.hpp:279</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga88938ee1e7981fa3402e88da6ad74531\"><div class=\"ttname\"><a href=\"a00304.html#ga88938ee1e7981fa3402e88da6ad74531\">glm::highp_f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, highp &gt; highp_f32mat2x4</div><div class=\"ttdoc\">High single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00692\">fwd.hpp:692</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga036d6c7ca9fbbdc5f3871bfcb937c85c\"><div class=\"ttname\"><a href=\"a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c\">glm::lowp_i8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i8, lowp &gt; lowp_i8vec1</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00222\">fwd.hpp:222</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf7adb92ce8de0afaff01436b039fd924\"><div class=\"ttname\"><a href=\"a00304.html#gaf7adb92ce8de0afaff01436b039fd924\">glm::highp_f64mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, highp &gt; highp_f64mat2</div><div class=\"ttdoc\">High double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00580\">fwd.hpp:580</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga91c4815f93177eb423362fd296a87e9f\"><div class=\"ttname\"><a href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">glm::lowp_uint16_t</a></div><div class=\"ttdeci\">uint16 lowp_uint16_t</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00112\">fwd.hpp:112</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5bdbfb4ce7d05ce1e1b663f50be17e8a\"><div class=\"ttname\"><a href=\"a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a\">glm::highp_f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, highp &gt; highp_f64mat3x2</div><div class=\"ttdoc\">High double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00773\">fwd.hpp:773</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga012c24c8fc69707b90260474c70275a2\"><div class=\"ttname\"><a href=\"a00304.html#ga012c24c8fc69707b90260474c70275a2\">glm::mediump_u32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u32, mediump &gt; mediump_u32vec3</div><div class=\"ttdoc\">Medium qualifier 32 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00371\">fwd.hpp:371</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad68bfd9f881856fc863a6ebca0b67f78\"><div class=\"ttname\"><a href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">glm::lowp_uint16</a></div><div class=\"ttdeci\">uint16 lowp_uint16</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00108\">fwd.hpp:108</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga45721c13b956eb691cbd6c6c1429167a\"><div class=\"ttname\"><a href=\"a00304.html#ga45721c13b956eb691cbd6c6c1429167a\">glm::highp_u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, highp &gt; highp_u8vec3</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00336\">fwd.hpp:336</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga66e92e57260bdb910609b9a56bf83e97\"><div class=\"ttname\"><a href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">glm::f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, defaultp &gt; f64vec4</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00504\">fwd.hpp:504</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga50542e4cb9b2f9bec213b66e06145d07\"><div class=\"ttname\"><a href=\"a00304.html#ga50542e4cb9b2f9bec213b66e06145d07\">glm::highp_i8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i8, highp &gt; highp_i8vec2</div><div class=\"ttdoc\">High qualifier 8 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00233\">fwd.hpp:233</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5fe17c87ede1b1b4d92454cff4da076d\"><div class=\"ttname\"><a href=\"a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d\">glm::lowp_i32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i32, lowp &gt; lowp_i32vec3</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00264\">fwd.hpp:264</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7ff73a45cea9613ebf1a9fad0b9f82ac\"><div class=\"ttname\"><a href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">glm::lowp_i32</a></div><div class=\"ttdeci\">int32 lowp_i32</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00059\">fwd.hpp:59</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga22e27beead07bff4d5ce9d6065a57279\"><div class=\"ttname\"><a href=\"a00304.html#ga22e27beead07bff4d5ce9d6065a57279\">glm::mediump_fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, mediump &gt; mediump_fmat4x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00648\">fwd.hpp:648</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3ebcb1f6d8d8387253de8bccb058d77f\"><div class=\"ttname\"><a href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">glm::mediump_i64</a></div><div class=\"ttdeci\">int64 mediump_i64</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00074\">fwd.hpp:74</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d47d94d17c2406abdd1f087a816e387\"><div class=\"ttname\"><a href=\"a00304.html#ga1d47d94d17c2406abdd1f087a816e387\">glm::lowp_i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, lowp &gt; lowp_i16vec4</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00245\">fwd.hpp:245</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae94823d65648e44d972863c6caa13103\"><div class=\"ttname\"><a href=\"a00304.html#gae94823d65648e44d972863c6caa13103\">glm::highp_f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, highp &gt; highp_f64mat4x3</div><div class=\"ttdoc\">High double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00777\">fwd.hpp:777</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga27585b7c3ab300059f11fcba465f6fd2\"><div class=\"ttname\"><a href=\"a00304.html#ga27585b7c3ab300059f11fcba465f6fd2\">glm::highp_u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, highp &gt; highp_u8vec2</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00335\">fwd.hpp:335</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8396bfdc081d9113190d0c39c9f67084\"><div class=\"ttname\"><a href=\"a00304.html#ga8396bfdc081d9113190d0c39c9f67084\">glm::highp_i8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i8, highp &gt; highp_i8vec3</div><div class=\"ttdoc\">High qualifier 8 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00234\">fwd.hpp:234</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd1196090ece7a69fb5c3e43a7d4d851\"><div class=\"ttname\"><a href=\"a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851\">glm::highp_f64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f64, highp &gt; highp_f64vec3</div><div class=\"ttdoc\">High double-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00498\">fwd.hpp:498</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga24273aa02abaecaab7f160bac437a339\"><div class=\"ttname\"><a href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">glm::fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, defaultp &gt; fvec2</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00442\">fwd.hpp:442</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa666bb9e6d204d3bea0b3a39a3a335f4\"><div class=\"ttname\"><a href=\"a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4\">glm::lowp_f64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, f64, lowp &gt; lowp_f64vec4</div><div class=\"ttdoc\">Low double-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00489\">fwd.hpp:489</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga062ffef2973bd8241df993c3b30b327c\"><div class=\"ttname\"><a href=\"a00304.html#ga062ffef2973bd8241df993c3b30b327c\">glm::mediump_f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, mediump &gt; mediump_f32vec3</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00453\">fwd.hpp:453</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabc7a97c07cbfac8e35eb5e63beb4b679\"><div class=\"ttname\"><a href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">glm::lowp_f64</a></div><div class=\"ttdeci\">double lowp_f64</div><div class=\"ttdoc\">Low 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00163\">fwd.hpp:163</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5868c2dcce41cc3ea5edcaeae239f62c\"><div class=\"ttname\"><a href=\"a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c\">glm::lowp_fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, lowp &gt; lowp_fmat4x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00636\">fwd.hpp:636</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5a67a7440b9c0d1538533540f99036a5\"><div class=\"ttname\"><a href=\"a00304.html#ga5a67a7440b9c0d1538533540f99036a5\">glm::highp_f64mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f64, highp &gt; highp_f64mat2x4</div><div class=\"ttdoc\">High double-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00772\">fwd.hpp:772</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad308e0ed27d64daa4213fb257fcbd5a5\"><div class=\"ttname\"><a href=\"a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5\">glm::highp_f64mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, highp &gt; highp_f64mat4</div><div class=\"ttdoc\">High double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00582\">fwd.hpp:582</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6addd4dfee87fc09ab9525e3d07db4c8\"><div class=\"ttname\"><a href=\"a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8\">glm::mediump_i32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i32, mediump &gt; mediump_i32vec4</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00270\">fwd.hpp:270</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga52409bc6d4a2ce3421526c069220d685\"><div class=\"ttname\"><a href=\"a00304.html#ga52409bc6d4a2ce3421526c069220d685\">glm::lowp_f32mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, lowp &gt; lowp_f32mat2</div><div class=\"ttdoc\">Low single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00540\">fwd.hpp:540</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae8f5e3e964ca2ae240adc2c0d74adede\"><div class=\"ttname\"><a href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">glm::int16_t</a></div><div class=\"ttdeci\">int16 int16_t</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00057\">fwd.hpp:57</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac25db6d2b1e2a0f351b77ba3409ac4cd\"><div class=\"ttname\"><a href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">glm::highp_i64</a></div><div class=\"ttdeci\">int64 highp_i64</div><div class=\"ttdoc\">High qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00075\">fwd.hpp:75</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad310b1dddeec9ec837a104e7db8de580\"><div class=\"ttname\"><a href=\"a00304.html#gad310b1dddeec9ec837a104e7db8de580\">glm::highp_f64mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f64, highp &gt; highp_f64mat3x4</div><div class=\"ttdoc\">High double-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00775\">fwd.hpp:775</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaed2dc69e0d507d4191092dbd44b3eb75\"><div class=\"ttname\"><a href=\"a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75\">glm::highp_fmat3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, highp &gt; highp_fmat3</div><div class=\"ttdoc\">High single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00533\">fwd.hpp:533</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd80ad7640e9e32f2edcb8330b1ffe4f\"><div class=\"ttname\"><a href=\"a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f\">glm::mediump_f32mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, mediump &gt; mediump_f32mat3x3</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00684\">fwd.hpp:684</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5e52f485059ce6e3010c590b882602c9\"><div class=\"ttname\"><a href=\"a00304.html#ga5e52f485059ce6e3010c590b882602c9\">glm::mediump_f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, mediump &gt; mediump_f64quat</div><div class=\"ttdoc\">Medium double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00813\">fwd.hpp:813</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga042ef09ff2f0cb24a36f541bcb3a3710\"><div class=\"ttname\"><a href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">glm::int32_t</a></div><div class=\"ttdeci\">int32 int32_t</div><div class=\"ttdoc\">32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00071\">fwd.hpp:71</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadc4e1594f9555d919131ee02b17822a2\"><div class=\"ttname\"><a href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">glm::f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, defaultp &gt; f64vec2</div><div class=\"ttdoc\">Double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00502\">fwd.hpp:502</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8dd3a3281ae5c970ffe0c41d538aa153\"><div class=\"ttname\"><a href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">glm::lowp_uint64_t</a></div><div class=\"ttdeci\">uint64 lowp_uint64_t</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00140\">fwd.hpp:140</a></div></div>\n<div class=\"ttc\" id=\"a00263_html_gab630f76c26b50298187f7889104d4b9c\"><div class=\"ttname\"><a href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">glm::uint64</a></div><div class=\"ttdeci\">detail::uint64 uint64</div><div class=\"ttdoc\">64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00151_source.html#l00067\">scalar_uint_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5fde0fa4a3852a9dd5d637a92ee74718\"><div class=\"ttname\"><a href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">glm::highp_int16</a></div><div class=\"ttdeci\">int16 highp_int16</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00052\">fwd.hpp:52</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacc44265ed440bf5e6e566782570de842\"><div class=\"ttname\"><a href=\"a00304.html#gacc44265ed440bf5e6e566782570de842\">glm::mediump_i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, mediump &gt; mediump_i16vec1</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00247\">fwd.hpp:247</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga681381f19f11c9e5ee45cda2c56937ff\"><div class=\"ttname\"><a href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">glm::fmat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, defaultp &gt; fmat2x4</div><div class=\"ttdoc\">Single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00666\">fwd.hpp:666</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga28635abcddb2f3e92c33c3f0fcc682ad\"><div class=\"ttname\"><a href=\"a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad\">glm::highp_fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, highp &gt; highp_fmat2x2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00650\">fwd.hpp:650</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8b839abbb44f5102609eed89f6ed61f7\"><div class=\"ttname\"><a href=\"a00304.html#ga8b839abbb44f5102609eed89f6ed61f7\">glm::highp_fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, highp &gt; highp_fvec4</div><div class=\"ttdoc\">High Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00439\">fwd.hpp:439</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7c2cadb9b85cc7e0d125db21ca19dea4\"><div class=\"ttname\"><a href=\"a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4\">glm::highp_f64mat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f64, highp &gt; highp_f64mat3x3</div><div class=\"ttdoc\">High double-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00774\">fwd.hpp:774</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf5e94bf2a20af7601787c154751dc2e1\"><div class=\"ttname\"><a href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">glm::mediump_i32</a></div><div class=\"ttdeci\">int32 mediump_i32</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00060\">fwd.hpp:60</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a7d997da9ac29cb931e35bd399f58df\"><div class=\"ttname\"><a href=\"a00304.html#ga2a7d997da9ac29cb931e35bd399f58df\">glm::lowp_u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, lowp &gt; lowp_u16vec2</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00345\">fwd.hpp:345</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga22166f0da65038b447f3c5e534fff1c2\"><div class=\"ttname\"><a href=\"a00304.html#ga22166f0da65038b447f3c5e534fff1c2\">glm::highp_u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, highp &gt; highp_u32vec4</div><div class=\"ttdoc\">High qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00377\">fwd.hpp:377</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaea881cae4ddc6c0fbf7cc5b08177ca5b\"><div class=\"ttname\"><a href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">glm::lowp_float32_t</a></div><div class=\"ttdeci\">float lowp_float32_t</div><div class=\"ttdoc\">Low 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00157\">fwd.hpp:157</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa46172d7dc1c7ffe3e78107ff88adf08\"><div class=\"ttname\"><a href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">glm::highp_uint64_t</a></div><div class=\"ttdeci\">uint64 highp_uint64_t</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00142\">fwd.hpp:142</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf3b694b2b8ded7e0b9f07b061917e1a0\"><div class=\"ttname\"><a href=\"a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0\">glm::lowp_f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, lowp &gt; lowp_f32vec2</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00447\">fwd.hpp:447</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga31cef34e4cd04840c54741ff2f7005f0\"><div class=\"ttname\"><a href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">glm::u32vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u32, defaultp &gt; u32vec4</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00382\">fwd.hpp:382</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac1281da5ded55047e8892b0e1f1ae965\"><div class=\"ttname\"><a href=\"a00304.html#gac1281da5ded55047e8892b0e1f1ae965\">glm::mediump_f64mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, mediump &gt; mediump_f64mat2</div><div class=\"ttdoc\">Medium double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00576\">fwd.hpp:576</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga66bffdd8e5c0d3ef9958bbab9ca1ba59\"><div class=\"ttname\"><a href=\"a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59\">glm::highp_f32mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, highp &gt; highp_f32mat4x3</div><div class=\"ttdoc\">High single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00697\">fwd.hpp:697</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga38e674196ba411d642be40c47bf33939\"><div class=\"ttname\"><a href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">glm::f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, defaultp &gt; f32quat</div><div class=\"ttdoc\">Single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00805\">fwd.hpp:805</a></div></div>\n<div class=\"ttc\" id=\"a00260_html_gaff5189f97f9e842d9636a0f240001b2e\"><div class=\"ttname\"><a href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">glm::int64</a></div><div class=\"ttdeci\">detail::int64 int64</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00146_source.html#l00067\">scalar_int_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae4fe774744852c4d7d069be2e05257ab\"><div class=\"ttname\"><a href=\"a00304.html#gae4fe774744852c4d7d069be2e05257ab\">glm::highp_u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, highp &gt; highp_u64vec1</div><div class=\"ttdoc\">High qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00394\">fwd.hpp:394</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8342c7469384c6d769cacc9e309278d9\"><div class=\"ttname\"><a href=\"a00304.html#ga8342c7469384c6d769cacc9e309278d9\">glm::highp_f64mat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f64, highp &gt; highp_f64mat2x3</div><div class=\"ttdoc\">High double-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00771\">fwd.hpp:771</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6d388e9b9aa1b389f0672d9c7dfc61c5\"><div class=\"ttname\"><a href=\"a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5\">glm::lowp_i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, lowp &gt; lowp_i8vec4</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00225\">fwd.hpp:225</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5e649bbdb135fbcb4bfe950f4c73a444\"><div class=\"ttname\"><a href=\"a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444\">glm::lowp_fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, lowp &gt; lowp_fmat4x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00637\">fwd.hpp:637</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\"><div class=\"ttname\"><a href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">glm::f32</a></div><div class=\"ttdeci\">float f32</div><div class=\"ttdoc\">Default 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00150\">fwd.hpp:150</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa9b4579f8e6f3d9b649a965bcb785530\"><div class=\"ttname\"><a href=\"a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530\">glm::highp_i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, highp &gt; highp_i32vec2</div><div class=\"ttdoc\">High qualifier 32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00273\">fwd.hpp:273</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4a43050843b141bdc7e85437faef6f55\"><div class=\"ttname\"><a href=\"a00304.html#ga4a43050843b141bdc7e85437faef6f55\">glm::mediump_u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, mediump &gt; mediump_u8vec1</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00329\">fwd.hpp:329</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae406ec670f64170a7437b5e302eeb2cb\"><div class=\"ttname\"><a href=\"a00304.html#gae406ec670f64170a7437b5e302eeb2cb\">glm::highp_fmat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f32, highp &gt; highp_fmat4x3</div><div class=\"ttdoc\">High single-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00657\">fwd.hpp:657</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf52982bb23e3a3772649b2c5bb84b107\"><div class=\"ttname\"><a href=\"a00304.html#gaf52982bb23e3a3772649b2c5bb84b107\">glm::mediump_i16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i16, mediump &gt; mediump_i16vec4</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00250\">fwd.hpp:250</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab7daf79d6bc06a68bea1c6f5e11b5512\"><div class=\"ttname\"><a href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">glm::f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, defaultp &gt; f64mat4x2</div><div class=\"ttdoc\">Double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00782\">fwd.hpp:782</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga55a2d2a8eb09b5633668257eb3cad453\"><div class=\"ttname\"><a href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">glm::fmat2x3</a></div><div class=\"ttdeci\">mat&lt; 2, 3, f32, defaultp &gt; fmat2x3</div><div class=\"ttdoc\">Single-qualifier floating-point 2x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00663\">fwd.hpp:663</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa805ef691c711dc41e2776cfb67f5cf5\"><div class=\"ttname\"><a href=\"a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5\">glm::mediump_f64mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, mediump &gt; mediump_f64mat4</div><div class=\"ttdoc\">Medium double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00578\">fwd.hpp:578</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaaf4ee3b76d43d98da02ec399b99bda4b\"><div class=\"ttname\"><a href=\"a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b\">glm::mediump_u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, mediump &gt; mediump_u8vec4</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00332\">fwd.hpp:332</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga21b1b22dec013a72656e3644baf8a1e1\"><div class=\"ttname\"><a href=\"a00304.html#ga21b1b22dec013a72656e3644baf8a1e1\">glm::lowp_f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, lowp &gt; lowp_f32mat3x4</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00675\">fwd.hpp:675</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac61843e4fa96c1f4e9d8316454f32a8e\"><div class=\"ttname\"><a href=\"a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e\">glm::mediump_float64_t</a></div><div class=\"ttdeci\">double mediump_float64_t</div><div class=\"ttdoc\">Medium 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00174\">fwd.hpp:174</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7c0d196f5fa79f7e892a2f323a0be1ae\"><div class=\"ttname\"><a href=\"a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae\">glm::highp_fvec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, highp &gt; highp_fvec2</div><div class=\"ttdoc\">High Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00437\">fwd.hpp:437</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa2d7acc0adb536fab71fe261232a40ff\"><div class=\"ttname\"><a href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">glm::u16</a></div><div class=\"ttdeci\">uint16 u16</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00106\">fwd.hpp:106</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga354736e0c645099cd44c42fb2f87c2b8\"><div class=\"ttname\"><a href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">glm::lowp_i64</a></div><div class=\"ttdeci\">int64 lowp_i64</div><div class=\"ttdoc\">Low qualifier 64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00073\">fwd.hpp:73</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga99d1b85ff99956b33da7e9992aad129a\"><div class=\"ttname\"><a href=\"a00304.html#ga99d1b85ff99956b33da7e9992aad129a\">glm::f32mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; f32mat4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00554\">fwd.hpp:554</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacea38a85893e17e6834b6cb09a9ad0cf\"><div class=\"ttname\"><a href=\"a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf\">glm::mediump_fmat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f32, mediump &gt; mediump_fmat4x2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00646\">fwd.hpp:646</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafc730f6b4242763b0eda0ffa25150292\"><div class=\"ttname\"><a href=\"a00304.html#gafc730f6b4242763b0eda0ffa25150292\">glm::lowp_f64mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f64, lowp &gt; lowp_f64mat2</div><div class=\"ttdoc\">Low double-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00572\">fwd.hpp:572</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6d7b3789ecb932c26430009478cac7ae\"><div class=\"ttname\"><a href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">glm::mediump_int8_t</a></div><div class=\"ttdeci\">int8 mediump_int8_t</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00041\">fwd.hpp:41</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaba56275dd04a7a61560b0e8fa5d365b4\"><div class=\"ttname\"><a href=\"a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4\">glm::lowp_fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, lowp &gt; lowp_fmat3x3</div><div class=\"ttdoc\">Low single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00634\">fwd.hpp:634</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga7286a37076a09da140df18bfa75d4e38\"><div class=\"ttname\"><a href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">glm::lowp_float64_t</a></div><div class=\"ttdeci\">double lowp_float64_t</div><div class=\"ttdoc\">Low 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00173\">fwd.hpp:173</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacaea06d0a79ef3172e887a7a6ba434ff\"><div class=\"ttname\"><a href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">glm::highp_int16_t</a></div><div class=\"ttdeci\">int16 highp_int16_t</div><div class=\"ttdoc\">High qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00056\">fwd.hpp:56</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa5b44d3ef6efcf33f44876673a7a936e\"><div class=\"ttname\"><a href=\"a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e\">glm::highp_fmat3x3</a></div><div class=\"ttdeci\">mat&lt; 3, 3, f32, highp &gt; highp_fmat3x3</div><div class=\"ttdoc\">High single-qualifier floating-point 3x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00654\">fwd.hpp:654</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2b65767f8b5aed1bd1cf86c541662b50\"><div class=\"ttname\"><a href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">glm::i64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i64, defaultp &gt; i64vec1</div><div class=\"ttdoc\">64 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00297\">fwd.hpp:297</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4f072ada9552e1e480bbb3b1acde5250\"><div class=\"ttname\"><a href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">glm::lowp_u32</a></div><div class=\"ttdeci\">uint32 lowp_u32</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00117\">fwd.hpp:117</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4b2e0e10d8d154fec9cab50e216588ec\"><div class=\"ttname\"><a href=\"a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec\">glm::lowp_u8vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u8, lowp &gt; lowp_u8vec1</div><div class=\"ttdoc\">Low qualifier 8 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00324\">fwd.hpp:324</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8089722ffdf868cdfe721dea1fb6a90e\"><div class=\"ttname\"><a href=\"a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e\">glm::mediump_i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, mediump &gt; mediump_i64vec3</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00289\">fwd.hpp:289</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4252cf7f5b0e3cd47c3d3badf0ef43b3\"><div class=\"ttname\"><a href=\"a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3\">glm::highp_f32quat</a></div><div class=\"ttdeci\">qua&lt; f32, highp &gt; highp_f32quat</div><div class=\"ttdoc\">High single-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00804\">fwd.hpp:804</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8e62c883d13f47015f3b70ed88751369\"><div class=\"ttname\"><a href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">glm::highp_u16</a></div><div class=\"ttdeci\">uint16 highp_u16</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00105\">fwd.hpp:105</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga98b9ed43cf8c5cf1d354b23c7df9119f\"><div class=\"ttname\"><a href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">glm::fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, defaultp &gt; fvec1</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00441\">fwd.hpp:441</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga907f85d4a0eac3d8aaf571e5c2647194\"><div class=\"ttname\"><a href=\"a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194\">glm::mediump_u8vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u8, mediump &gt; mediump_u8vec2</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00330\">fwd.hpp:330</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga0350631d35ff800e6133ac6243b13cbc\"><div class=\"ttname\"><a href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">glm::lowp_int32_t</a></div><div class=\"ttdeci\">int32 lowp_int32_t</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00068\">fwd.hpp:68</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa6aab4ee7189b86716f5d7015d43021d\"><div class=\"ttname\"><a href=\"a00304.html#gaa6aab4ee7189b86716f5d7015d43021d\">glm::lowp_u16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u16, lowp &gt; lowp_u16vec1</div><div class=\"ttdoc\">Low qualifier 16 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00344\">fwd.hpp:344</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaee80c7cd3caa0f2635058656755f6f69\"><div class=\"ttname\"><a href=\"a00304.html#gaee80c7cd3caa0f2635058656755f6f69\">glm::highp_fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, highp &gt; highp_fmat4x4</div><div class=\"ttdoc\">High single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00658\">fwd.hpp:658</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa5086dbd6efb272d13fc88829330861d\"><div class=\"ttname\"><a href=\"a00304.html#gaa5086dbd6efb272d13fc88829330861d\">glm::highp_f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, highp &gt; highp_f32mat3x4</div><div class=\"ttdoc\">High single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00695\">fwd.hpp:695</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5d6c70e080409a76a257dc55bd8ea2c8\"><div class=\"ttname\"><a href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">glm::f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, defaultp &gt; f32vec2</div><div class=\"ttdoc\">Single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00462\">fwd.hpp:462</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacfd806749008f0ade6ac4bb9dd91082f\"><div class=\"ttname\"><a href=\"a00304.html#gacfd806749008f0ade6ac4bb9dd91082f\">glm::highp_u16vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u16, highp &gt; highp_u16vec3</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00356\">fwd.hpp:356</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae4dee61f8fe1caccec309fbed02faf12\"><div class=\"ttname\"><a href=\"a00304.html#gae4dee61f8fe1caccec309fbed02faf12\">glm::mediump_float32_t</a></div><div class=\"ttdeci\">float mediump_float32_t</div><div class=\"ttdoc\">Medium 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00158\">fwd.hpp:158</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3350c93c3275298f940a42875388e4b4\"><div class=\"ttname\"><a href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">glm::fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, defaultp &gt; fmat2x2</div><div class=\"ttdoc\">Single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00660\">fwd.hpp:660</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\"><div class=\"ttname\"><a href=\"a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\">glm::mediump_f32</a></div><div class=\"ttdeci\">float mediump_f32</div><div class=\"ttdoc\">Medium 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00148\">fwd.hpp:148</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga936e95b881ecd2d109459ca41913fa99\"><div class=\"ttname\"><a href=\"a00304.html#ga936e95b881ecd2d109459ca41913fa99\">glm::mediump_f32mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, mediump &gt; mediump_f32mat4x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00688\">fwd.hpp:688</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad6eb11412a3161ca8dc1d63b2a307c4b\"><div class=\"ttname\"><a href=\"a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b\">glm::mediump_f32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f32, mediump &gt; mediump_f32vec2</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00452\">fwd.hpp:452</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga760bcf26fdb23a2c3ecad3c928a19ae6\"><div class=\"ttname\"><a href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">glm::lowp_int8</a></div><div class=\"ttdeci\">int8 lowp_int8</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00036\">fwd.hpp:36</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf2d02c5f4d59135b9bc524fe317fd26b\"><div class=\"ttname\"><a href=\"a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b\">glm::lowp_f64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f64, lowp &gt; lowp_f64vec1</div><div class=\"ttdoc\">Low double-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00486\">fwd.hpp:486</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga36537e701456f12c20e73f469cac4967\"><div class=\"ttname\"><a href=\"a00304.html#ga36537e701456f12c20e73f469cac4967\">glm::highp_f32mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, highp &gt; highp_f32mat3x2</div><div class=\"ttdoc\">High single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00693\">fwd.hpp:693</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacd926d36a72433f6cac51dd60fa13107\"><div class=\"ttname\"><a href=\"a00304.html#gacd926d36a72433f6cac51dd60fa13107\">glm::mediump_f64mat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f64, mediump &gt; mediump_f64mat3x2</div><div class=\"ttdoc\">Medium double-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00763\">fwd.hpp:763</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaddc6f7748b699254942c5216b68f8f7f\"><div class=\"ttname\"><a href=\"a00304.html#gaddc6f7748b699254942c5216b68f8f7f\">glm::mediump_u8vec3</a></div><div class=\"ttdeci\">vec&lt; 3, u8, mediump &gt; mediump_u8vec3</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00331\">fwd.hpp:331</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8c9cd734e03cd49674f3e287aa4a6f95\"><div class=\"ttname\"><a href=\"a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95\">glm::lowp_f64mat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f64, lowp &gt; lowp_f64mat4x4</div><div class=\"ttdoc\">Low double-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00758\">fwd.hpp:758</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga501a2f313f1c220eef4ab02bdabdc3c6\"><div class=\"ttname\"><a href=\"a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6\">glm::lowp_i16vec1</a></div><div class=\"ttdeci\">vec&lt; 1, i16, lowp &gt; lowp_i16vec1</div><div class=\"ttdoc\">Low qualifier 16 bit signed integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00242\">fwd.hpp:242</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga119c41d73fe9977358174eb3ac1035a3\"><div class=\"ttname\"><a href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">glm::lowp_int8_t</a></div><div class=\"ttdeci\">int8 lowp_int8_t</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00040\">fwd.hpp:40</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf7e286e81347011e257ee779524e73b9\"><div class=\"ttname\"><a href=\"a00304.html#gaf7e286e81347011e257ee779524e73b9\">glm::lowp_u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, lowp &gt; lowp_u32vec2</div><div class=\"ttdoc\">Low qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00365\">fwd.hpp:365</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae71445ac6cd0b9fba3e5c905cd030fb1\"><div class=\"ttname\"><a href=\"a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1\">glm::mediump_f32mat2x4</a></div><div class=\"ttdeci\">mat&lt; 2, 4, f32, mediump &gt; mediump_f32mat2x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 2x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00682\">fwd.hpp:682</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3e2e66ffbe341a80bc005ba2b9552110\"><div class=\"ttname\"><a href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">glm::f64mat4x3</a></div><div class=\"ttdeci\">mat&lt; 4, 3, f64, defaultp &gt; f64mat4x3</div><div class=\"ttdoc\">Double-qualifier floating-point 4x3 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00785\">fwd.hpp:785</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad9d1903cb20899966e8ebe0670889a5f\"><div class=\"ttname\"><a href=\"a00304.html#gad9d1903cb20899966e8ebe0670889a5f\">glm::highp_i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, highp &gt; highp_i64vec2</div><div class=\"ttdoc\">High qualifier 64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00293\">fwd.hpp:293</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4491baaebbc46a20f1cb5da985576bf4\"><div class=\"ttname\"><a href=\"a00304.html#ga4491baaebbc46a20f1cb5da985576bf4\">glm::mediump_f32mat4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, mediump &gt; mediump_f32mat4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00546\">fwd.hpp:546</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadb997e409103d4da18abd837e636a496\"><div class=\"ttname\"><a href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">glm::i64</a></div><div class=\"ttdeci\">int64 i64</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00076\">fwd.hpp:76</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1d794d240091678f602e8de225b8d8c9\"><div class=\"ttname\"><a href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">glm::f64</a></div><div class=\"ttdeci\">double f64</div><div class=\"ttdoc\">Default 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00166\">fwd.hpp:166</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gabb33cab7d7c74cc14aa95455d0690865\"><div class=\"ttname\"><a href=\"a00304.html#gabb33cab7d7c74cc14aa95455d0690865\">glm::mediump_f32vec1</a></div><div class=\"ttdeci\">vec&lt; 1, f32, mediump &gt; mediump_f32vec1</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00451\">fwd.hpp:451</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8df705d775b776f5ae6b39e2ab892899\"><div class=\"ttname\"><a href=\"a00304.html#ga8df705d775b776f5ae6b39e2ab892899\">glm::mediump_f32mat3x4</a></div><div class=\"ttdeci\">mat&lt; 3, 4, f32, mediump &gt; mediump_f32mat3x4</div><div class=\"ttdoc\">Medium single-qualifier floating-point 3x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00685\">fwd.hpp:685</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae98c88d9a7befa9b5877f49176225535\"><div class=\"ttname\"><a href=\"a00304.html#gae98c88d9a7befa9b5877f49176225535\">glm::highp_fmat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, highp &gt; highp_fmat2</div><div class=\"ttdoc\">High single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00532\">fwd.hpp:532</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga522775dbcc6d96246a1c5cf02344fd8c\"><div class=\"ttname\"><a href=\"a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c\">glm::highp_f32vec3</a></div><div class=\"ttdeci\">vec&lt; 3, f32, highp &gt; highp_f32vec3</div><div class=\"ttdoc\">High single-qualifier floating-point vector of 3 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00458\">fwd.hpp:458</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gac7bb04fb857ef7b520e49f6c381432be\"><div class=\"ttname\"><a href=\"a00304.html#gac7bb04fb857ef7b520e49f6c381432be\">glm::mediump_i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, mediump &gt; mediump_i8vec4</div><div class=\"ttdoc\">Medium qualifier 8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00230\">fwd.hpp:230</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga41b0d390bd8cc827323b1b3816ff4bf8\"><div class=\"ttname\"><a href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">glm::lowp_float32</a></div><div class=\"ttdeci\">float lowp_float32</div><div class=\"ttdoc\">Low 32 bit single-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00152\">fwd.hpp:152</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a266e46ee218d0c680f12b35c500cc0\"><div class=\"ttname\"><a href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u32, defaultp &gt; u32vec2</div><div class=\"ttdoc\">Default qualifier 32 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00380\">fwd.hpp:380</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga1bed890513c0f50b7e7ba4f7f359dbfb\"><div class=\"ttname\"><a href=\"a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb\">glm::mediump_fvec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, mediump &gt; mediump_fvec4</div><div class=\"ttdoc\">Medium Single-qualifier floating-point vector of 4 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00434\">fwd.hpp:434</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga5244cef85d6e870e240c76428a262ae8\"><div class=\"ttname\"><a href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">glm::mediump_int32</a></div><div class=\"ttdeci\">int32 mediump_int32</div><div class=\"ttdoc\">Medium qualifier 32 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00065\">fwd.hpp:65</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga48310188e1d0c616bf8d78c92447523b\"><div class=\"ttname\"><a href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">glm::i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, defaultp &gt; i64vec2</div><div class=\"ttdoc\">64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00298\">fwd.hpp:298</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga3ab5fe184343d394fb6c2723c3ee3699\"><div class=\"ttname\"><a href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">glm::i16</a></div><div class=\"ttdeci\">int16 i16</div><div class=\"ttdoc\">16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00048\">fwd.hpp:48</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad01cc6479bde1fd1870f13d3ed9530b3\"><div class=\"ttname\"><a href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">glm::fmat4x4</a></div><div class=\"ttdeci\">mat&lt; 4, 4, f32, defaultp &gt; fmat4x4</div><div class=\"ttdoc\">Single-qualifier floating-point 4x4 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00668\">fwd.hpp:668</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaa3ee2bc4af03cc06578b66b3e3f878ae\"><div class=\"ttname\"><a href=\"a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae\">glm::lowp_f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, lowp &gt; lowp_f64quat</div><div class=\"ttdoc\">Low double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00812\">fwd.hpp:812</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6af54d70d9beb0a7ef992a879e86b04f\"><div class=\"ttname\"><a href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">glm::fmat3x2</a></div><div class=\"ttdeci\">mat&lt; 3, 2, f32, defaultp &gt; fmat3x2</div><div class=\"ttdoc\">Single-qualifier floating-point 3x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00661\">fwd.hpp:661</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga529496d75775fb656a07993ea9af2450\"><div class=\"ttname\"><a href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">glm::u16vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u16, defaultp &gt; u16vec4</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00362\">fwd.hpp:362</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2a78447eb9d66a114b193f4a25899c16\"><div class=\"ttname\"><a href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a></div><div class=\"ttdeci\">vec&lt; 2, u16, defaultp &gt; u16vec2</div><div class=\"ttdoc\">Default qualifier 16 bit unsigned integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00360\">fwd.hpp:360</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gad1213a22bbb9e4107f07eaa4956f8281\"><div class=\"ttname\"><a href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">glm::mediump_u8</a></div><div class=\"ttdeci\">uint8 mediump_u8</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00090\">fwd.hpp:90</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gab0feb11edd0d3ab3e8ed996d349a5066\"><div class=\"ttname\"><a href=\"a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066\">glm::lowp_fmat2x2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, lowp &gt; lowp_fmat2x2</div><div class=\"ttdoc\">Low single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00630\">fwd.hpp:630</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga4824e3ddf6e608117dfe4809430737b4\"><div class=\"ttname\"><a href=\"a00304.html#ga4824e3ddf6e608117dfe4809430737b4\">glm::highp_i8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, i8, highp &gt; highp_i8vec4</div><div class=\"ttdoc\">High qualifier 8 bit signed integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00235\">fwd.hpp:235</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6fccc89c34045c86339f6fa781ce96de\"><div class=\"ttname\"><a href=\"a00304.html#ga6fccc89c34045c86339f6fa781ce96de\">glm::lowp_u64vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u64, lowp &gt; lowp_u64vec4</div><div class=\"ttdoc\">Low qualifier 64 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00387\">fwd.hpp:387</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2c94aeae3457325944ca1059b0b68330\"><div class=\"ttname\"><a href=\"a00304.html#ga2c94aeae3457325944ca1059b0b68330\">glm::mediump_i64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i64, mediump &gt; mediump_i64vec2</div><div class=\"ttdoc\">Medium qualifier 64 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00288\">fwd.hpp:288</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga58c4631421e323e252fc716b6103e38c\"><div class=\"ttname\"><a href=\"a00304.html#ga58c4631421e323e252fc716b6103e38c\">glm::highp_f64mat4x2</a></div><div class=\"ttdeci\">mat&lt; 4, 2, f64, highp &gt; highp_f64mat4x2</div><div class=\"ttdoc\">High double-qualifier floating-point 4x2 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00776\">fwd.hpp:776</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga80e72fe94c88498537e8158ba7591c54\"><div class=\"ttname\"><a href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">glm::mediump_int16_t</a></div><div class=\"ttdeci\">int16 mediump_int16_t</div><div class=\"ttdoc\">Medium qualifier 16 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00055\">fwd.hpp:55</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga552a6bde5e75984efb0f863278da2e54\"><div class=\"ttname\"><a href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">glm::lowp_i8</a></div><div class=\"ttdeci\">int8 lowp_i8</div><div class=\"ttdoc\">Low qualifier 8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00031\">fwd.hpp:31</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga667948cfe6fb3d6606c750729ec49f77\"><div class=\"ttname\"><a href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">glm::i64vec3</a></div><div class=\"ttdeci\">vec&lt; 3, i64, defaultp &gt; i64vec3</div><div class=\"ttdoc\">64 bit signed integer vector of 3 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00299\">fwd.hpp:299</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga867a3c2d99ab369a454167d2c0a24dbd\"><div class=\"ttname\"><a href=\"a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd\">glm::lowp_i32vec2</a></div><div class=\"ttdeci\">vec&lt; 2, i32, lowp &gt; lowp_i32vec2</div><div class=\"ttdoc\">Low qualifier 32 bit signed integer vector of 2 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00263\">fwd.hpp:263</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gafcfdd74a115163af2ce1093551747352\"><div class=\"ttname\"><a href=\"a00304.html#gafcfdd74a115163af2ce1093551747352\">glm::highp_f64quat</a></div><div class=\"ttdeci\">qua&lt; f64, highp &gt; highp_f64quat</div><div class=\"ttdoc\">High double-qualifier floating-point quaternion. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00814\">fwd.hpp:814</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga8ebc04ecf6440c4ee24718a16600ce6b\"><div class=\"ttname\"><a href=\"a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b\">glm::mediump_f64vec2</a></div><div class=\"ttdeci\">vec&lt; 2, f64, mediump &gt; mediump_f64vec2</div><div class=\"ttdoc\">Medium double-qualifier floating-point vector of 2 components. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00492\">fwd.hpp:492</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gacf54c3330ef60aa3d16cb676c7bcb8c7\"><div class=\"ttname\"><a href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">glm::highp_uint16_t</a></div><div class=\"ttdeci\">uint16 highp_uint16_t</div><div class=\"ttdoc\">High qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00114\">fwd.hpp:114</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga346b2336fff168a7e0df1583aae3e5a5\"><div class=\"ttname\"><a href=\"a00304.html#ga346b2336fff168a7e0df1583aae3e5a5\">glm::lowp_fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, lowp &gt; lowp_fvec1</div><div class=\"ttdoc\">Low single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00426\">fwd.hpp:426</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga302ec977b0c0c3ea245b6c9275495355\"><div class=\"ttname\"><a href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">glm::i8</a></div><div class=\"ttdeci\">int8 i8</div><div class=\"ttdoc\">8 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00034\">fwd.hpp:34</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga9b170dd4a8f38448a2dc93987c7875e9\"><div class=\"ttname\"><a href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">glm::mediump_uint64_t</a></div><div class=\"ttdeci\">uint64 mediump_uint64_t</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00141\">fwd.hpp:141</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga659f372ccb8307d5db5beca942cde5e8\"><div class=\"ttname\"><a href=\"a00304.html#ga659f372ccb8307d5db5beca942cde5e8\">glm::mediump_u64vec1</a></div><div class=\"ttdeci\">vec&lt; 1, u64, mediump &gt; mediump_u64vec1</div><div class=\"ttdoc\">Medium qualifier 64 bit unsigned integer scalar type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00389\">fwd.hpp:389</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gaf9020c6176a75bc84828ab01ea7dac25\"><div class=\"ttname\"><a href=\"a00304.html#gaf9020c6176a75bc84828ab01ea7dac25\">glm::mediump_f32mat2</a></div><div class=\"ttdeci\">mat&lt; 2, 2, f32, mediump &gt; mediump_f32mat2</div><div class=\"ttdoc\">Medium single-qualifier floating-point 1x1 matrix. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00544\">fwd.hpp:544</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gadfe65c78231039e90507770db50c98c7\"><div class=\"ttname\"><a href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">glm::mediump_uint8_t</a></div><div class=\"ttdeci\">uint8 mediump_uint8_t</div><div class=\"ttdoc\">Medium qualifier 8 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00099\">fwd.hpp:99</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga6d40381d78472553f878f66e443feeef\"><div class=\"ttname\"><a href=\"a00304.html#ga6d40381d78472553f878f66e443feeef\">glm::mediump_f64</a></div><div class=\"ttdeci\">double mediump_f64</div><div class=\"ttdoc\">Medium 64 bit double-qualifier floating-point scalar. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00164\">fwd.hpp:164</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga367964fc2133d3f1b5b3755ff9cf6c9b\"><div class=\"ttname\"><a href=\"a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b\">glm::mediump_fvec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, mediump &gt; mediump_fvec1</div><div class=\"ttdoc\">Medium single-qualifier floating-point vector of 1 component. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00431\">fwd.hpp:431</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_ga2885a6c89916911e418c06bb76b9bdbb\"><div class=\"ttname\"><a href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">glm::mediump_uint16</a></div><div class=\"ttdeci\">uint16 mediump_uint16</div><div class=\"ttdoc\">Medium qualifier 16 bit unsigned integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00109\">fwd.hpp:109</a></div></div>\n<div class=\"ttc\" id=\"a00304_html_gae0b75ad0fed8c00ddc0b5ce335d31060\"><div class=\"ttname\"><a href=\"a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060\">glm::highp_u8vec4</a></div><div class=\"ttdeci\">vec&lt; 4, u8, highp &gt; highp_u8vec4</div><div class=\"ttdoc\">High qualifier 8 bit unsigned integer vector of 4 components type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00035_source.html#l00337\">fwd.hpp:337</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00175.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_ptr.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">type_ptr.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00305.html\">GLM_GTC_type_ptr</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00175_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga04409e74dc3da251d2501acf5b4b546c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga04409e74dc3da251d2501acf5b4b546c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga04409e74dc3da251d2501acf5b4b546c\">make_mat2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga04409e74dc3da251d2501acf5b4b546c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga04409e74dc3da251d2501acf5b4b546c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04409e74dc3da251d2501acf5b4b546c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae49e1c7bcd5abec74d1c34155031f663\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae49e1c7bcd5abec74d1c34155031f663\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gae49e1c7bcd5abec74d1c34155031f663\">make_mat2x2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:gae49e1c7bcd5abec74d1c34155031f663\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#gae49e1c7bcd5abec74d1c34155031f663\">More...</a><br /></td></tr>\n<tr class=\"separator:gae49e1c7bcd5abec74d1c34155031f663\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga21982104164789cf8985483aaefc25e8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga21982104164789cf8985483aaefc25e8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga21982104164789cf8985483aaefc25e8\">make_mat2x3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga21982104164789cf8985483aaefc25e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga21982104164789cf8985483aaefc25e8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga21982104164789cf8985483aaefc25e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga078b862c90b0e9a79ed43a58997d8388\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga078b862c90b0e9a79ed43a58997d8388\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga078b862c90b0e9a79ed43a58997d8388\">make_mat2x4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga078b862c90b0e9a79ed43a58997d8388\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga078b862c90b0e9a79ed43a58997d8388\">More...</a><br /></td></tr>\n<tr class=\"separator:ga078b862c90b0e9a79ed43a58997d8388\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f\">make_mat3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27a24e121dc39e6857620e0f85b6e1a8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga27a24e121dc39e6857620e0f85b6e1a8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8\">make_mat3x2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga27a24e121dc39e6857620e0f85b6e1a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27a24e121dc39e6857620e0f85b6e1a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2e8337b15c3362aaeb6e5849e1c0536\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf2e8337b15c3362aaeb6e5849e1c0536\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536\">make_mat3x3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:gaf2e8337b15c3362aaeb6e5849e1c0536\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2e8337b15c3362aaeb6e5849e1c0536\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05dd66232aedb993e3b8e7b35eaf932b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga05dd66232aedb993e3b8e7b35eaf932b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b\">make_mat3x4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga05dd66232aedb993e3b8e7b35eaf932b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga05dd66232aedb993e3b8e7b35eaf932b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7bcedb710d1446c87fd1fc93ed8ee9a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae7bcedb710d1446c87fd1fc93ed8ee9a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a\">make_mat4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:gae7bcedb710d1446c87fd1fc93ed8ee9a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7bcedb710d1446c87fd1fc93ed8ee9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c\">make_mat4x2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0330bf6640092d7985fac92927bbd42b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0330bf6640092d7985fac92927bbd42b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga0330bf6640092d7985fac92927bbd42b\">make_mat4x3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga0330bf6640092d7985fac92927bbd42b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga0330bf6640092d7985fac92927bbd42b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0330bf6640092d7985fac92927bbd42b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f084be30e404844bfbb4a551ac2728c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga8f084be30e404844bfbb4a551ac2728c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga8f084be30e404844bfbb4a551ac2728c\">make_mat4x4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga8f084be30e404844bfbb4a551ac2728c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga8f084be30e404844bfbb4a551ac2728c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f084be30e404844bfbb4a551ac2728c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58110d7d81cf7d029e2bab7f8cd9b246\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga58110d7d81cf7d029e2bab7f8cd9b246\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246\">make_quat</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga58110d7d81cf7d029e2bab7f8cd9b246\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a quaternion from a pointer.  <a href=\"a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58110d7d81cf7d029e2bab7f8cd9b246\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4135f03f3049f0a4eb76545c4967957c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4135f03f3049f0a4eb76545c4967957c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga4135f03f3049f0a4eb76545c4967957c\">make_vec1</a> (vec&lt; 1, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4135f03f3049f0a4eb76545c4967957c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga4135f03f3049f0a4eb76545c4967957c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4135f03f3049f0a4eb76545c4967957c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13c92b81e55f201b052a6404d57da220\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga13c92b81e55f201b052a6404d57da220\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga13c92b81e55f201b052a6404d57da220\">make_vec1</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga13c92b81e55f201b052a6404d57da220\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga13c92b81e55f201b052a6404d57da220\">More...</a><br /></td></tr>\n<tr class=\"separator:ga13c92b81e55f201b052a6404d57da220\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3c23cc74086d361e22bbd5e91a334e03\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3c23cc74086d361e22bbd5e91a334e03\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga3c23cc74086d361e22bbd5e91a334e03\">make_vec1</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3c23cc74086d361e22bbd5e91a334e03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga3c23cc74086d361e22bbd5e91a334e03\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3c23cc74086d361e22bbd5e91a334e03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6af06bb60d64ca8bcd169e3c93bc2419\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6af06bb60d64ca8bcd169e3c93bc2419\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">make_vec1</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga6af06bb60d64ca8bcd169e3c93bc2419\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6af06bb60d64ca8bcd169e3c93bc2419\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8476d0e6f1b9b4a6193cc25f59d8a896\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8476d0e6f1b9b4a6193cc25f59d8a896\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga8476d0e6f1b9b4a6193cc25f59d8a896\">make_vec2</a> (vec&lt; 1, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8476d0e6f1b9b4a6193cc25f59d8a896\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga8476d0e6f1b9b4a6193cc25f59d8a896\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8476d0e6f1b9b4a6193cc25f59d8a896\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae54bd325a08ad26edf63929201adebc7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae54bd325a08ad26edf63929201adebc7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gae54bd325a08ad26edf63929201adebc7\">make_vec2</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gae54bd325a08ad26edf63929201adebc7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gae54bd325a08ad26edf63929201adebc7\">More...</a><br /></td></tr>\n<tr class=\"separator:gae54bd325a08ad26edf63929201adebc7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0084fea4694cf47276e9cccbe7b1015a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0084fea4694cf47276e9cccbe7b1015a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga0084fea4694cf47276e9cccbe7b1015a\">make_vec2</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga0084fea4694cf47276e9cccbe7b1015a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga0084fea4694cf47276e9cccbe7b1015a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0084fea4694cf47276e9cccbe7b1015a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b81f71f3a222fe5bba81e3983751249\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2b81f71f3a222fe5bba81e3983751249\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga2b81f71f3a222fe5bba81e3983751249\">make_vec2</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2b81f71f3a222fe5bba81e3983751249\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga2b81f71f3a222fe5bba81e3983751249\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b81f71f3a222fe5bba81e3983751249\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81253cf7b0ebfbb1e70540c5774e6824\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga81253cf7b0ebfbb1e70540c5774e6824\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">make_vec2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga81253cf7b0ebfbb1e70540c5774e6824\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">More...</a><br /></td></tr>\n<tr class=\"separator:ga81253cf7b0ebfbb1e70540c5774e6824\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9147e4b3a5d0f4772edfbfd179d7ea0b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9147e4b3a5d0f4772edfbfd179d7ea0b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga9147e4b3a5d0f4772edfbfd179d7ea0b\">make_vec3</a> (vec&lt; 1, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga9147e4b3a5d0f4772edfbfd179d7ea0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga9147e4b3a5d0f4772edfbfd179d7ea0b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9147e4b3a5d0f4772edfbfd179d7ea0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga482b60a842a5b154d3eed392417a9511\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga482b60a842a5b154d3eed392417a9511\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga482b60a842a5b154d3eed392417a9511\">make_vec3</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga482b60a842a5b154d3eed392417a9511\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga482b60a842a5b154d3eed392417a9511\">More...</a><br /></td></tr>\n<tr class=\"separator:ga482b60a842a5b154d3eed392417a9511\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd57046034df557b8b1c457f58613623\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacd57046034df557b8b1c457f58613623\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gacd57046034df557b8b1c457f58613623\">make_vec3</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gacd57046034df557b8b1c457f58613623\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gacd57046034df557b8b1c457f58613623\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd57046034df557b8b1c457f58613623\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b589ed7d41a298b516d2a69169248f1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8b589ed7d41a298b516d2a69169248f1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga8b589ed7d41a298b516d2a69169248f1\">make_vec3</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8b589ed7d41a298b516d2a69169248f1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga8b589ed7d41a298b516d2a69169248f1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b589ed7d41a298b516d2a69169248f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9e0d36ff489cb30c65ad1fa40351651\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gad9e0d36ff489cb30c65ad1fa40351651\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">make_vec3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:gad9e0d36ff489cb30c65ad1fa40351651\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">More...</a><br /></td></tr>\n<tr class=\"separator:gad9e0d36ff489cb30c65ad1fa40351651\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga600cb97f70c5d50d3a4a145e1cafbf37\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga600cb97f70c5d50d3a4a145e1cafbf37\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga600cb97f70c5d50d3a4a145e1cafbf37\">make_vec4</a> (vec&lt; 1, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga600cb97f70c5d50d3a4a145e1cafbf37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga600cb97f70c5d50d3a4a145e1cafbf37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga600cb97f70c5d50d3a4a145e1cafbf37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9bd116caf28196fd1cf00b278286fa7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa9bd116caf28196fd1cf00b278286fa7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gaa9bd116caf28196fd1cf00b278286fa7\">make_vec4</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa9bd116caf28196fd1cf00b278286fa7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gaa9bd116caf28196fd1cf00b278286fa7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9bd116caf28196fd1cf00b278286fa7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4036328ba4702c74cbdfad1fc03d1b8f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4036328ba4702c74cbdfad1fc03d1b8f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga4036328ba4702c74cbdfad1fc03d1b8f\">make_vec4</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4036328ba4702c74cbdfad1fc03d1b8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga4036328ba4702c74cbdfad1fc03d1b8f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4036328ba4702c74cbdfad1fc03d1b8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa95cb15732f708f613e65a0578895ae5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa95cb15732f708f613e65a0578895ae5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gaa95cb15732f708f613e65a0578895ae5\">make_vec4</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa95cb15732f708f613e65a0578895ae5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gaa95cb15732f708f613e65a0578895ae5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa95cb15732f708f613e65a0578895ae5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63f576518993efc22a969f18f80e29bb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga63f576518993efc22a969f18f80e29bb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">make_vec4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga63f576518993efc22a969f18f80e29bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga63f576518993efc22a969f18f80e29bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1c64669e1ba1160ad9386e43dc57569a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga1c64669e1ba1160ad9386e43dc57569a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type const *&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">value_ptr</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1c64669e1ba1160ad9386e43dc57569a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the constant address to the data of the input parameter.  <a href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1c64669e1ba1160ad9386e43dc57569a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00305.html\">GLM_GTC_type_ptr</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00175_source.html\">type_ptr.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00175_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_ptr.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_ptr.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00175.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#include &quot;../vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#include &quot;../vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#include &quot;../vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#include &quot;../mat2x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;<span class=\"preprocessor\">#include &quot;../mat3x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;<span class=\"preprocessor\">#include &quot;../mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">#include &lt;cstring&gt;</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_type_ptr extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_FUNC_DECL <span class=\"keyword\">typename</span> genType::value_type <span class=\"keyword\">const</span> * <a class=\"code\" href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">value_ptr</a>(genType <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        GLM_FUNC_DECL vec&lt;1, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">make_vec1</a>(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        GLM_FUNC_DECL vec&lt;1, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">make_vec1</a>(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        GLM_FUNC_DECL vec&lt;1, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">make_vec1</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        GLM_FUNC_DECL vec&lt;1, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">make_vec1</a>(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">make_vec2</a>(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">make_vec2</a>(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">make_vec2</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">make_vec2</a>(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">make_vec3</a>(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">make_vec3</a>(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">make_vec3</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; <a class=\"code\" href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">make_vec3</a>(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">make_vec4</a>(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">make_vec4</a>(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">make_vec4</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        <span class=\"keyword\">template</span> &lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; <a class=\"code\" href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">make_vec4</a>(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        GLM_FUNC_DECL vec&lt;2, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">make_vec2</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">make_vec3</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">make_vec4</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#gae49e1c7bcd5abec74d1c34155031f663\">make_mat2x2</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        GLM_FUNC_DECL mat&lt;2, 3, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga21982104164789cf8985483aaefc25e8\">make_mat2x3</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        GLM_FUNC_DECL mat&lt;2, 4, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga078b862c90b0e9a79ed43a58997d8388\">make_mat2x4</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        GLM_FUNC_DECL mat&lt;3, 2, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8\">make_mat3x2</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536\">make_mat3x3</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        GLM_FUNC_DECL mat&lt;3, 4, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b\">make_mat3x4</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;        GLM_FUNC_DECL mat&lt;4, 2, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c\">make_mat4x2</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;        GLM_FUNC_DECL mat&lt;4, 3, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga0330bf6640092d7985fac92927bbd42b\">make_mat4x3</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga8f084be30e404844bfbb4a551ac2728c\">make_mat4x4</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        GLM_FUNC_DECL mat&lt;2, 2, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga04409e74dc3da251d2501acf5b4b546c\">make_mat2</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;        GLM_FUNC_DECL mat&lt;3, 3, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f\">make_mat3</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;        GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; <a class=\"code\" href=\"a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a\">make_mat4</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;        GLM_FUNC_DECL qua&lt;T, defaultp&gt; <a class=\"code\" href=\"a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246\">make_quat</a>(T <span class=\"keyword\">const</span> * <span class=\"keyword\">const</span> ptr);</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;<span class=\"preprocessor\">#include &quot;type_ptr.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00305_html_ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><div class=\"ttname\"><a href=\"a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f\">glm::make_mat3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, defaultp &gt; make_mat3(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_gad9e0d36ff489cb30c65ad1fa40351651\"><div class=\"ttname\"><a href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">glm::make_vec3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt; make_vec3(T const *const ptr)</div><div class=\"ttdoc\">Build a vector from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga27a24e121dc39e6857620e0f85b6e1a8\"><div class=\"ttname\"><a href=\"a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8\">glm::make_mat3x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 2, T, defaultp &gt; make_mat3x2(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga6af06bb60d64ca8bcd169e3c93bc2419\"><div class=\"ttname\"><a href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">glm::make_vec1</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt; make_vec1(vec&lt; 4, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Build a vector from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga58110d7d81cf7d029e2bab7f8cd9b246\"><div class=\"ttname\"><a href=\"a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246\">glm::make_quat</a></div><div class=\"ttdeci\">GLM_FUNC_DECL qua&lt; T, defaultp &gt; make_quat(T const *const ptr)</div><div class=\"ttdoc\">Build a quaternion from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_gae7bcedb710d1446c87fd1fc93ed8ee9a\"><div class=\"ttname\"><a href=\"a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a\">glm::make_mat4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; make_mat4(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga81253cf7b0ebfbb1e70540c5774e6824\"><div class=\"ttname\"><a href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">glm::make_vec2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt; make_vec2(T const *const ptr)</div><div class=\"ttdoc\">Build a vector from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga078b862c90b0e9a79ed43a58997d8388\"><div class=\"ttname\"><a href=\"a00305.html#ga078b862c90b0e9a79ed43a58997d8388\">glm::make_mat2x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 4, T, defaultp &gt; make_mat2x4(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga04409e74dc3da251d2501acf5b4b546c\"><div class=\"ttname\"><a href=\"a00305.html#ga04409e74dc3da251d2501acf5b4b546c\">glm::make_mat2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt; make_mat2(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga1c64669e1ba1160ad9386e43dc57569a\"><div class=\"ttname\"><a href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">glm::value_ptr</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType::value_type const * value_ptr(genType const &amp;v)</div><div class=\"ttdoc\">Return the constant address to the data of the input parameter. </div></div>\n<div class=\"ttc\" id=\"a00305_html_gae49e1c7bcd5abec74d1c34155031f663\"><div class=\"ttname\"><a href=\"a00305.html#gae49e1c7bcd5abec74d1c34155031f663\">glm::make_mat2x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt; make_mat2x2(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga21982104164789cf8985483aaefc25e8\"><div class=\"ttname\"><a href=\"a00305.html#ga21982104164789cf8985483aaefc25e8\">glm::make_mat2x3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 2, 3, T, defaultp &gt; make_mat2x3(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga05dd66232aedb993e3b8e7b35eaf932b\"><div class=\"ttname\"><a href=\"a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b\">glm::make_mat3x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 4, T, defaultp &gt; make_mat3x4(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga63f576518993efc22a969f18f80e29bb\"><div class=\"ttname\"><a href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">glm::make_vec4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 4, T, defaultp &gt; make_vec4(T const *const ptr)</div><div class=\"ttdoc\">Build a vector from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga0330bf6640092d7985fac92927bbd42b\"><div class=\"ttname\"><a href=\"a00305.html#ga0330bf6640092d7985fac92927bbd42b\">glm::make_mat4x3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 3, T, defaultp &gt; make_mat4x3(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_gaf2e8337b15c3362aaeb6e5849e1c0536\"><div class=\"ttname\"><a href=\"a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536\">glm::make_mat3x3</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 3, 3, T, defaultp &gt; make_mat3x3(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga8f084be30e404844bfbb4a551ac2728c\"><div class=\"ttname\"><a href=\"a00305.html#ga8f084be30e404844bfbb4a551ac2728c\">glm::make_mat4x4</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt; make_mat4x4(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00305_html_ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><div class=\"ttname\"><a href=\"a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c\">glm::make_mat4x2</a></div><div class=\"ttdeci\">GLM_FUNC_DECL mat&lt; 4, 2, T, defaultp &gt; make_mat4x2(T const *const ptr)</div><div class=\"ttdoc\">Build a matrix from a pointer. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00176.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_quat.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_quat.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00176_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00176_source.html\">type_quat.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00176_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_quat.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_quat.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00176.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat3x3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_mat4x4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/quaternion_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/constants.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/matrix_transform.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;        <span class=\"keyword\">struct </span>qua</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;                <span class=\"comment\">// -- Implementation detail --</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                <span class=\"keyword\">typedef</span> qua&lt;T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;                <span class=\"comment\">// -- Data --</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic ignored &quot;-Wpedantic&quot;</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wgnu-anonymous-struct&quot;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wnested-anon-types&quot;</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#                               pragma warning(push)</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#                               pragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#               if GLM_LANG &amp; GLM_LANG_CXXMS_FLAG</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;                        <span class=\"keyword\">union</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                                <span class=\"keyword\">struct </span>{ T x, y, z, w;};</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                                <span class=\"keyword\">typename</span> detail::storage&lt;4, T, detail::is_aligned&lt;Q&gt;::value&gt;::type data;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                        };</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                        T x, y, z, w;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"preprocessor\">#                               pragma warning(pop)</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                <span class=\"comment\">// -- Component accesses --</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>(){<span class=\"keywordflow\">return</span> 4;}</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                <span class=\"comment\">// -- Implicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR qua() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR qua(qua&lt;T, Q&gt; const&amp; q) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR qua(qua&lt;T, P&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;                <span class=\"comment\">// -- Explicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR qua(T s, vec&lt;3, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR qua(T w, T x, T y, T z);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                <span class=\"comment\">// -- Conversion constructors --</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(qua&lt;U, P&gt; const&amp; q);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;<span class=\"preprocessor\">#               if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS</span></div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> <span class=\"keyword\">operator</span> mat&lt;3, 3, T, Q&gt;() <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                        GLM_FUNC_DECL <span class=\"keyword\">explicit</span> <span class=\"keyword\">operator</span> mat&lt;4, 4, T, Q&gt;() <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                GLM_FUNC_DECL qua(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; u, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT qua(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00299.html#gaf4dd967dead22dd932fc7460ceecb03f\">eulerAngles</a>);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT qua(mat&lt;3, 3, T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                GLM_FUNC_DECL GLM_EXPLICIT qua(mat&lt;4, 4, T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                GLM_FUNC_DECL qua&lt;T, Q&gt;&amp; operator=(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                GLM_FUNC_DECL qua&lt;T, Q&gt;&amp; operator=(qua&lt;U, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;                GLM_FUNC_DECL qua&lt;T, Q&gt;&amp; operator+=(qua&lt;U, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;                GLM_FUNC_DECL qua&lt;T, Q&gt;&amp; operator-=(qua&lt;U, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                GLM_FUNC_DECL qua&lt;T, Q&gt;&amp; operator*=(qua&lt;U, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;                GLM_FUNC_DECL qua&lt;T, Q&gt;&amp; operator*=(U s);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;                GLM_FUNC_DECL qua&lt;T, Q&gt;&amp; operator/=(U s);</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        <span class=\"comment\">// -- Unary bit operators --</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; operator+(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; operator-(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; operator+(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; p);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; operator-(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; p);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; operator*(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; p);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; operator*(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;        GLM_FUNC_DECL vec&lt;3, T, Q&gt; operator*(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; operator*(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;        GLM_FUNC_DECL vec&lt;4, T, Q&gt; operator*(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; operator*(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, T <span class=\"keyword\">const</span>&amp; s);</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; operator*(T <span class=\"keyword\">const</span>&amp; s, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q);</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;        GLM_FUNC_DECL qua&lt;T, Q&gt; operator/(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q, T <span class=\"keyword\">const</span>&amp; s);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator==(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q1, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q2);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator!=(qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q1, qua&lt;T, Q&gt; <span class=\"keyword\">const</span>&amp; q2);</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;<span class=\"preprocessor\">#include &quot;type_quat.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;<span class=\"preprocessor\">#endif//GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"ttc\" id=\"a00299_html_gaf4dd967dead22dd932fc7460ceecb03f\"><div class=\"ttname\"><a href=\"a00299.html#gaf4dd967dead22dd932fc7460ceecb03f\">glm::eulerAngles</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt; eulerAngles(qua&lt; T, Q &gt; const &amp;x)</div><div class=\"ttdoc\">Returns euler angles, pitch as x, yaw as y, roll as z. </div></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00177.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_trait.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_trait.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00365.html\">GLM_GTX_type_trait</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00177_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00365.html\">GLM_GTX_type_trait</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00177_source.html\">type_trait.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00177_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_trait.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_trait.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00177.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_type_trait is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_type_trait extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/dual_quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T&gt;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">struct </span>type</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_vec = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_mat = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_quat = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> components = 0;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> cols = 0;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> rows = 0;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">struct </span>type&lt;vec&lt;L, T, Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_vec = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_mat = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_quat = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> components = L;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t C, length_t R, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        <span class=\"keyword\">struct </span>type&lt;mat&lt;C, R, T, Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_vec = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_mat = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_quat = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> components = C;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> cols = C;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> rows = R;</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">struct </span>type&lt;qua&lt;T, Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_vec = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_mat = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_quat = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> components = 4;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">struct </span>type&lt;tdualquat&lt;T, Q&gt; &gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_vec = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_mat = <span class=\"keyword\">false</span>;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;                <span class=\"keyword\">static</span> <span class=\"keywordtype\">bool</span> <span class=\"keyword\">const</span> is_quat = <span class=\"keyword\">true</span>;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;                <span class=\"keyword\">static</span> length_t <span class=\"keyword\">const</span> components = 8;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;<span class=\"preprocessor\">#include &quot;type_trait.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00178.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_vec1.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_vec1.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00178_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00178_source.html\">type_vec1.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00178_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_vec1.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_vec1.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00178.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#       include &quot;_swizzle.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#       include &quot;_swizzle_func.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;        <span class=\"keyword\">struct </span>vec&lt;1, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"comment\">// -- Implementation detail --</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;1, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;1, bool, Q&gt; bool_type;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"comment\">// -- Data --</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic ignored &quot;-Wpedantic&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wgnu-anonymous-struct&quot;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wnested-anon-types&quot;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#                               pragma warning(push)</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#                               pragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_XYZW_ONLY</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#               elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        <span class=\"keyword\">union</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                                T x;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                                T r;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                                T s;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                                <span class=\"keyword\">typename</span> detail::storage&lt;1, T, detail::is_aligned&lt;Q&gt;::value&gt;::type data;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;<span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"comment\">#                               if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_2_MEMBERS(T, Q, x)</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_2_MEMBERS(T, Q, r)</span></div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_2_MEMBERS(T, Q, s)</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_3_MEMBERS(T, Q, x)</span></div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_3_MEMBERS(T, Q, r)</span></div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_3_MEMBERS(T, Q, s)</span></div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_4_MEMBERS(T, Q, x)</span></div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_4_MEMBERS(T, Q, r)</span></div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;<span class=\"comment\">                                        _GLM_SWIZZLE1_4_MEMBERS(T, Q, s)</span></div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"comment\">#                               endif</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;<span class=\"comment\">*/</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                        };</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                        <span class=\"keyword\">union </span>{T x, r, s;};</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"comment\">#                       if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;<span class=\"comment\">                                GLM_SWIZZLE_GEN_VEC_FROM_VEC1(T, Q)</span></div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"comment\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"comment\">*/</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">#                               pragma warning(pop)</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;                <span class=\"comment\">// -- Component accesses --</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>(){<span class=\"keywordflow\">return</span> 1;}</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                <span class=\"comment\">// -- Implicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const&amp; v) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, T, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                <span class=\"comment\">// -- Explicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                <span class=\"comment\">// -- Conversion vector constructors --</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;2, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;3, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;4, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;1, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                <span class=\"comment\">// -- Swizzle constructors --</span></div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;<span class=\"comment\">/*</span></div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;<span class=\"comment\">#               if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;<span class=\"comment\">                        template&lt;int E0&gt;</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;<span class=\"comment\">                        GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle&lt;1, T, Q, E0, -1,-2,-3&gt; const&amp; that)</span></div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;<span class=\"comment\">                        {</span></div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;<span class=\"comment\">                                *this = that();</span></div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;<span class=\"comment\">                        }</span></div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;<span class=\"comment\">#               endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;<span class=\"comment\">*/</span></div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator=(vec const&amp; v) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator+=(U scalar);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator+=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator-=(U scalar);</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator-=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator*=(U scalar);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator*=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator/=(U scalar);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator/=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator++();</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator--();</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;                <span class=\"comment\">// -- Unary bit operators --</span></div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator%=(U scalar);</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator%=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator&amp;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator&amp;=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator|=(U scalar);</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator|=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator^=(U scalar);</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator^=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator&lt;&lt;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator&lt;&lt;=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator&gt;&gt;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;                template&lt;typename U&gt;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; &amp; operator&gt;&gt;=(vec&lt;1, U, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator+(vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator-(vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator+(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator+(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator+(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator-(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator-(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator-(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator*(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator*(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator*(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator/(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator/(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator/(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator%(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator%(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator%(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&amp;(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&amp;(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&amp;(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator|(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator|(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator|(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator^(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator^(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator^(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&lt;&lt;(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&lt;&lt;(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&lt;&lt;(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&gt;&gt;(vec&lt;1, T, Q&gt; const&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&gt;&gt;(T scalar, vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator&gt;&gt;(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, T, Q&gt; operator~(vec&lt;1, T, Q&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator==(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;        template&lt;typename T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator!=(vec&lt;1, T, Q&gt; const&amp; v1, vec&lt;1, T, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;        template&lt;qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, <span class=\"keywordtype\">bool</span>, Q&gt; operator&amp;&amp;(vec&lt;1, <span class=\"keywordtype\">bool</span>, Q&gt; const&amp; v1, vec&lt;1, <span class=\"keywordtype\">bool</span>, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;        template&lt;qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;1, <span class=\"keywordtype\">bool</span>, Q&gt; operator||(vec&lt;1, <span class=\"keywordtype\">bool</span>, Q&gt; const&amp; v1, vec&lt;1, <span class=\"keywordtype\">bool</span>, Q&gt; const&amp; v2);</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;<span class=\"preprocessor\">#include &quot;type_vec1.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;<span class=\"preprocessor\">#endif//GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00179.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_vec2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_vec2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00179_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00179_source.html\">type_vec2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00179_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_vec2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_vec2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00179.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#       include &quot;_swizzle.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#       include &quot;_swizzle_func.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;        <span class=\"keyword\">struct </span>vec&lt;2, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"comment\">// -- Implementation detail --</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;2, bool, Q&gt; bool_type;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"comment\">// -- Data --</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic ignored &quot;-Wpedantic&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wgnu-anonymous-struct&quot;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wnested-anon-types&quot;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#                               pragma warning(push)</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#                               pragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_XYZW_ONLY</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x, y;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#               elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        <span class=\"keyword\">union</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                                <span class=\"keyword\">struct</span>{ T x, y; };</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                                <span class=\"keyword\">struct</span>{ T r, g; };</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                                <span class=\"keyword\">struct</span>{ T s, t; };</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                                <span class=\"keyword\">typename</span> detail::storage&lt;2, T, detail::is_aligned&lt;Q&gt;::value&gt;::type data;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"preprocessor\">#                               if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                                        GLM_SWIZZLE2_2_MEMBERS(T, Q, x, y)</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                                        GLM_SWIZZLE2_2_MEMBERS(T, Q, r, g)</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                                        GLM_SWIZZLE2_2_MEMBERS(T, Q, s, t)</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                                        GLM_SWIZZLE2_3_MEMBERS(T, Q, x, y)</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                                        GLM_SWIZZLE2_3_MEMBERS(T, Q, r, g)</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                                        GLM_SWIZZLE2_3_MEMBERS(T, Q, s, t)</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                                        GLM_SWIZZLE2_4_MEMBERS(T, Q, x, y)</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                                        GLM_SWIZZLE2_4_MEMBERS(T, Q, r, g)</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                                        GLM_SWIZZLE2_4_MEMBERS(T, Q, s, t)</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"preprocessor\">#                               endif</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                        };</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                        <span class=\"keyword\">union </span>{T x, r, s;};</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                        <span class=\"keyword\">union </span>{T y, g, t;};</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;<span class=\"preprocessor\">#                       if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                                GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, Q)</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"preprocessor\">#                       endif//GLM_CONFIG_SWIZZLE</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"preprocessor\">#                               pragma warning(pop)</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                <span class=\"comment\">// -- Component accesses --</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>(){<span class=\"keywordflow\">return</span> 2;}</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T&amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                <span class=\"comment\">// -- Implicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const&amp; v) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;2, T, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                <span class=\"comment\">// -- Explicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                <span class=\"comment\">// -- Conversion constructors --</span></div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec&lt;1, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                template&lt;typename A, typename B&gt;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, B y);</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;                template&lt;typename A, typename B&gt;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, A, Q&gt; const&amp; x, B y);</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                template&lt;typename A, typename B&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, vec&lt;1, B, Q&gt; const&amp; y);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;                template&lt;typename A, typename B&gt;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, A, Q&gt; const&amp; x, vec&lt;1, B, Q&gt; const&amp; y);</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                <span class=\"comment\">// -- Conversion vector constructors --</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;3, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;4, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;2, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                <span class=\"comment\">// -- Swizzle constructors --</span></div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1&gt;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle&lt;2, T, Q, E0, E1,-1,-2&gt; <span class=\"keyword\">const</span>&amp; that)</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                                *<span class=\"keyword\">this</span> = that();</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;<span class=\"preprocessor\">#               endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator=(vec <span class=\"keyword\">const</span>&amp; v) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator+=(U scalar);</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator+=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator+=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator-=(U scalar);</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator-=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator-=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator*=(U scalar);</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator*=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator*=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator/=(U scalar);</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator/=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator/=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator++();</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator--();</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;                <span class=\"comment\">// -- Unary bit operators --</span></div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator%=(U scalar);</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator%=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator%=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&amp;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&amp;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&amp;=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator|=(U scalar);</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator|=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator|=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator^=(U scalar);</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator^=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator^=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&lt;&lt;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&lt;&lt;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&lt;&lt;=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&gt;&gt;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&gt;&gt;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; &amp; operator&gt;&gt;=(vec&lt;2, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator+(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator-(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator+(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator+(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator+(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator+(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator+(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator-(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator-(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator-(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator-(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator-(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator*(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator*(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator*(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator*(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator*(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator/(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator/(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator/(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator/(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator/(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator%(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator%(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator%(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator%(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator%(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&amp;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&amp;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&amp;(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&amp;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&amp;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator|(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator|(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator|(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator|(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator|(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator^(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator^(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator^(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator^(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator^(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&lt;&lt;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&lt;&lt;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&lt;&lt;(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&lt;&lt;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&lt;&lt;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&gt;&gt;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&gt;&gt;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&gt;&gt;(T scalar, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&gt;&gt;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator&gt;&gt;(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, T, Q&gt; operator~(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator==(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator!=(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;        <span class=\"keyword\">template</span>&lt;qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, bool, Q&gt; operator&amp;&amp;(vec&lt;2, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;        <span class=\"keyword\">template</span>&lt;qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;2, bool, Q&gt; operator||(vec&lt;2, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;2, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;<span class=\"preprocessor\">#include &quot;type_vec2.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;<span class=\"preprocessor\">#endif//GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00180.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_vec3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_vec3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00180_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00180_source.html\">type_vec3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00180_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_vec3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_vec3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00180.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#       include &quot;_swizzle.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#       include &quot;_swizzle_func.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;        <span class=\"keyword\">struct </span>vec&lt;3, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"comment\">// -- Implementation detail --</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;3, bool, Q&gt; bool_type;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"comment\">// -- Data --</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic ignored &quot;-Wpedantic&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wgnu-anonymous-struct&quot;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wnested-anon-types&quot;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#                               pragma warning(push)</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#                               pragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#                               if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#                                       pragma warning(disable: 4324)  // structure was padded due to alignment specifier</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;<span class=\"preprocessor\">#                               endif</span></div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_XYZW_ONLY</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        T x, y, z;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;<span class=\"preprocessor\">#               elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                        <span class=\"keyword\">union</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;                                <span class=\"keyword\">struct</span>{ T x, y, z; };</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                                <span class=\"keyword\">struct</span>{ T r, g, b; };</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;                                <span class=\"keyword\">struct</span>{ T s, t, p; };</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                                <span class=\"keyword\">typename</span> detail::storage&lt;3, T, detail::is_aligned&lt;Q&gt;::value&gt;::type data;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">#                               if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                                        GLM_SWIZZLE3_2_MEMBERS(T, Q, x, y, z)</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                                        GLM_SWIZZLE3_2_MEMBERS(T, Q, r, g, b)</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                                        GLM_SWIZZLE3_2_MEMBERS(T, Q, s, t, p)</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                                        GLM_SWIZZLE3_3_MEMBERS(T, Q, x, y, z)</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                                        GLM_SWIZZLE3_3_MEMBERS(T, Q, r, g, b)</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                                        GLM_SWIZZLE3_3_MEMBERS(T, Q, s, t, p)</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;                                        GLM_SWIZZLE3_4_MEMBERS(T, Q, x, y, z)</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                                        GLM_SWIZZLE3_4_MEMBERS(T, Q, r, g, b)</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;                                        GLM_SWIZZLE3_4_MEMBERS(T, Q, s, t, p)</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;<span class=\"preprocessor\">#                               endif</span></div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                        };</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                        <span class=\"keyword\">union </span>{ T x, r, s; };</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;                        <span class=\"keyword\">union </span>{ T y, g, t; };</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;                        <span class=\"keyword\">union </span>{ T z, b, p; };</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"preprocessor\">#                       if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;                                GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, Q)</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;<span class=\"preprocessor\">#                       endif//GLM_CONFIG_SWIZZLE</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"preprocessor\">#               endif//GLM_LANG</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"preprocessor\">#                               pragma warning(pop)</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                <span class=\"comment\">// -- Component accesses --</span></div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>(){<span class=\"keywordflow\">return</span> 3;}</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;                <span class=\"comment\">// -- Implicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const&amp; v) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;3, T, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;                <span class=\"comment\">// -- Explicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(T a, T b, T c);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;                <span class=\"comment\">// -- Conversion scalar constructors --</span></div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec&lt;1, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                template&lt;typename X, typename Y, typename Z&gt;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X x, Y y, Z z);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;                template&lt;typename X, typename Y, typename Z&gt;</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, Y _y, Z _z);</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;                template&lt;typename X, typename Y, typename Z&gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec&lt;1, Y, Q&gt; const&amp; _y, Z _z);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                template&lt;typename X, typename Y, typename Z&gt;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, vec&lt;1, Y, Q&gt; const&amp; _y, Z _z);</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;                template&lt;typename X, typename Y, typename Z&gt;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec&lt;1, Z, Q&gt; const&amp; _z);</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;                template&lt;typename X, typename Y, typename Z&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, Y _y, vec&lt;1, Z, Q&gt; const&amp; _z);</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                template&lt;typename X, typename Y, typename Z&gt;</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec&lt;1, Y, Q&gt; const&amp; _y, vec&lt;1, Z, Q&gt; const&amp; _z);</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                template&lt;typename X, typename Y, typename Z&gt;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, vec&lt;1, Y, Q&gt; const&amp; _y, vec&lt;1, Z, Q&gt; const&amp; _z);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                <span class=\"comment\">// -- Conversion vector constructors --</span></div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;2, A, P&gt; const&amp; _xy, B _z);</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;2, A, P&gt; const&amp; _xy, vec&lt;1, B, P&gt; const&amp; _z);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec&lt;2, B, P&gt; const&amp; _yz);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, A, P&gt; const&amp; _x, vec&lt;2, B, P&gt; const&amp; _yz);</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;4, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;3, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;                <span class=\"comment\">// -- Swizzle constructors --</span></div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2&gt;</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle&lt;3, T, Q, E0, E1, E2, -1&gt; <span class=\"keyword\">const</span>&amp; that)</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;                                *<span class=\"keyword\">this</span> = that();</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1&gt;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle&lt;2, T, Q, E0, E1, -1, -2&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span>&amp; scalar)</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;                                *<span class=\"keyword\">this</span> = vec(v(), scalar);</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1&gt;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(T <span class=\"keyword\">const</span>&amp; scalar, detail::_swizzle&lt;2, T, Q, E0, E1, -1, -2&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;                                *<span class=\"keyword\">this</span> = vec(scalar, v());</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;<span class=\"preprocessor\">#               endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt;&amp; operator=(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator+=(U scalar);</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator+=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator+=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator-=(U scalar);</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator-=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator-=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator*=(U scalar);</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator*=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator*=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator/=(U scalar);</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator/=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator/=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator++();</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator--();</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;                <span class=\"comment\">// -- Unary bit operators --</span></div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator%=(U scalar);</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator%=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator%=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&amp;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&amp;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&amp;=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator|=(U scalar);</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator|=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator|=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator^=(U scalar);</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator^=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator^=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&lt;&lt;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&lt;&lt;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&lt;&lt;=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&gt;&gt;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&gt;&gt;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; &amp; operator&gt;&gt;=(vec&lt;3, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator+(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator-(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator+(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator+(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar);</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator+(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator+(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator+(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator-(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator-(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator-(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator-(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator-(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator*(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator*(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator*(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator*(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator*(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator/(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator/(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator/(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator/(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator/(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator%(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator%(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator%(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator%(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator%(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&amp;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, T scalar);</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&amp;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&amp;(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&amp;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&amp;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator|(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator|(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator|(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator|(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator|(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator^(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator^(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator^(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator^(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator^(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&lt;&lt;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&lt;&lt;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&lt;&lt;(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&lt;&lt;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&lt;&lt;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&gt;&gt;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;</div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&gt;&gt;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&gt;&gt;(T scalar, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&gt;&gt;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator&gt;&gt;(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, T, Q&gt; operator~(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator==(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator!=(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;        <span class=\"keyword\">template</span>&lt;qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, bool, Q&gt; operator&amp;&amp;(vec&lt;3, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;</div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;        <span class=\"keyword\">template</span>&lt;qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;3, bool, Q&gt; operator||(vec&lt;3, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;3, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;<span class=\"preprocessor\">#include &quot;type_vec3.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;<span class=\"preprocessor\">#endif//GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00181.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_vec4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_vec4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00181_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00181_source.html\">type_vec4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00181_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: type_vec4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">type_vec4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00181.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;</div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#       include &quot;_swizzle.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#       include &quot;_swizzle_func.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &lt;cstddef&gt;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;        <span class=\"keyword\">struct </span>vec&lt;4, T, Q&gt;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;        {</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;                <span class=\"comment\">// -- Implementation detail --</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;                <span class=\"keyword\">typedef</span> T value_type;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, T, Q&gt; type;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;                <span class=\"keyword\">typedef</span> vec&lt;4, bool, Q&gt; bool_type;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;                <span class=\"comment\">// -- Data --</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic ignored &quot;-Wpedantic&quot;</span></div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic push</span></div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wgnu-anonymous-struct&quot;</span></div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic ignored &quot;-Wnested-anon-types&quot;</span></div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;<span class=\"preprocessor\">#                               pragma warning(push)</span></div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;<span class=\"preprocessor\">#                               pragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union</span></div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_XYZW_ONLY</span></div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;                        T x, y, z, w;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;<span class=\"preprocessor\">#               elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                        <span class=\"keyword\">union</span></div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;                                <span class=\"keyword\">struct </span>{ T x, y, z, w; };</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;                                <span class=\"keyword\">struct </span>{ T r, g, b, a; };</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;                                <span class=\"keyword\">struct </span>{ T s, t, p, q; };</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                                <span class=\"keyword\">typename</span> detail::storage&lt;4, T, detail::is_aligned&lt;Q&gt;::value&gt;::type data;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;<span class=\"preprocessor\">#                               if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;                                        GLM_SWIZZLE4_2_MEMBERS(T, Q, x, y, z, w)</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;                                        GLM_SWIZZLE4_2_MEMBERS(T, Q, r, g, b, a)</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                                        GLM_SWIZZLE4_2_MEMBERS(T, Q, s, t, p, q)</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;                                        GLM_SWIZZLE4_3_MEMBERS(T, Q, x, y, z, w)</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;                                        GLM_SWIZZLE4_3_MEMBERS(T, Q, r, g, b, a)</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;                                        GLM_SWIZZLE4_3_MEMBERS(T, Q, s, t, p, q)</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;                                        GLM_SWIZZLE4_4_MEMBERS(T, Q, x, y, z, w)</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                                        GLM_SWIZZLE4_4_MEMBERS(T, Q, r, g, b, a)</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;                                        GLM_SWIZZLE4_4_MEMBERS(T, Q, s, t, p, q)</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;<span class=\"preprocessor\">#                               endif</span></div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;                        };</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;<span class=\"preprocessor\">#               else</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;                        <span class=\"keyword\">union </span>{ T x, r, s; };</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                        <span class=\"keyword\">union </span>{ T y, g, t; };</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;                        <span class=\"keyword\">union </span>{ T z, b, p; };</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;                        <span class=\"keyword\">union </span>{ T w, a, q; };</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;<span class=\"preprocessor\">#                       if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION</span></div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                                GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, Q)</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;<span class=\"preprocessor\">#               if GLM_SILENT_WARNINGS == GLM_ENABLE</span></div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;<span class=\"preprocessor\">#                       if GLM_COMPILER &amp; GLM_COMPILER_CLANG</span></div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;<span class=\"preprocessor\">#                               pragma clang diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_GCC</span></div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;<span class=\"preprocessor\">#                               pragma GCC diagnostic pop</span></div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;<span class=\"preprocessor\">#                       elif GLM_COMPILER &amp; GLM_COMPILER_VC</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;<span class=\"preprocessor\">#                               pragma warning(pop)</span></div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;<span class=\"preprocessor\">#                       endif</span></div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;<span class=\"preprocessor\">#               endif</span></div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;                <span class=\"comment\">// -- Component accesses --</span></div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;                <span class=\"keyword\">typedef</span> length_t length_type;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;                GLM_FUNC_DECL <span class=\"keyword\">static</span> GLM_CONSTEXPR length_type <a class=\"code\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a>(){<span class=\"keywordflow\">return</span> 4;}</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T &amp; operator[](length_type i);</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR T <span class=\"keyword\">const</span>&amp; operator[](length_type i) <span class=\"keyword\">const</span>;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;                <span class=\"comment\">// -- Implicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;4, T, Q&gt; const&amp; v) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                template&lt;qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;4, T, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;                <span class=\"comment\">// -- Explicit basic constructors --</span></div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y, T z, T w);</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;                <span class=\"comment\">// -- Conversion scalar constructors --</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec&lt;1, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, Z _z, W _w);</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, Y _y, Z _z, W _w);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec&lt;1, Y, Q&gt; const&amp; _y, Z _z, W _w);</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, vec&lt;1, Y, Q&gt; const&amp; _y, Z _z, W _w);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec&lt;1, Z, Q&gt; const&amp; _z, W _w);</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, Y _y, vec&lt;1, Z, Q&gt; const&amp; _z, W _w);</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec&lt;1, Y, Q&gt; const&amp; _y, vec&lt;1, Z, Q&gt; const&amp; _z, W _w);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, vec&lt;1, Y, Q&gt; const&amp; _y, vec&lt;1, Z, Q&gt; const&amp; _z, W _w);</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, Y _y, Z _z, vec&lt;1, W, Q&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec&lt;1, Y, Q&gt; const&amp; _y, Z _z, vec&lt;1, W, Q&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, vec&lt;1, Y, Q&gt; const&amp; _y, Z _z, vec&lt;1, W, Q&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec&lt;1, Z, Q&gt; const&amp; _z, vec&lt;1, W, Q&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, Y _y, vec&lt;1, Z, Q&gt; const&amp; _z, vec&lt;1, W, Q&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec&lt;1, Y, Q&gt; const&amp; _y, vec&lt;1, Z, Q&gt; const&amp; _z, vec&lt;1, W, Q&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;                template&lt;typename X, typename Y, typename Z, typename W&gt;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, X, Q&gt; const&amp; _x, vec&lt;1, Y, Q&gt; const&amp; _Y, vec&lt;1, Z, Q&gt; const&amp; _z, vec&lt;1, W, Q&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;                <span class=\"comment\">// -- Conversion vector constructors --</span></div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;2, A, P&gt; const&amp; _xy, B _z, C _w);</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;2, A, P&gt; const&amp; _xy, vec&lt;1, B, P&gt; const&amp; _z, C _w);</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;2, A, P&gt; const&amp; _xy, B _z, vec&lt;1, C, P&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;2, A, P&gt; const&amp; _xy, vec&lt;1, B, P&gt; const&amp; _z, vec&lt;1, C, P&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec&lt;2, B, P&gt; const&amp; _yz, C _w);</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, A, P&gt; const&amp; _x, vec&lt;2, B, P&gt; const&amp; _yz, C _w);</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec&lt;2, B, P&gt; const&amp; _yz, vec&lt;1, C, P&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, A, P&gt; const&amp; _x, vec&lt;2, B, P&gt; const&amp; _yz, vec&lt;1, C, P&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, B _y, vec&lt;2, C, P&gt; const&amp; _zw);</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, A, P&gt; const&amp; _x, B _y, vec&lt;2, C, P&gt; const&amp; _zw);</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec&lt;1, B, P&gt; const&amp; _y, vec&lt;2, C, P&gt; const&amp; _zw);</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;                template&lt;typename A, typename B, typename C, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, A, P&gt; const&amp; _x, vec&lt;1, B, P&gt; const&amp; _y, vec&lt;2, C, P&gt; const&amp; _zw);</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;3, A, P&gt; const&amp; _xyz, B _w);</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;3, A, P&gt; const&amp; _xyz, vec&lt;1, B, P&gt; const&amp; _w);</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec&lt;3, B, P&gt; const&amp; _yzw);</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;1, A, P&gt; const&amp; _x, vec&lt;3, B, P&gt; const&amp; _yzw);</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;                template&lt;typename A, typename B, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec(vec&lt;2, A, P&gt; const&amp; _xy, vec&lt;2, B, P&gt; const&amp; _zw);</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;                template&lt;typename U, qualifier P&gt;</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec&lt;4, U, P&gt; const&amp; v);</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;                <span class=\"comment\">// -- Swizzle constructors --</span></div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;<span class=\"preprocessor\">#               if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2, <span class=\"keywordtype\">int</span> E3&gt;</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle&lt;4, T, Q, E0, E1, E2, E3&gt; <span class=\"keyword\">const</span>&amp; that)</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;                                *<span class=\"keyword\">this</span> = that();</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> F0, <span class=\"keywordtype\">int</span> F1&gt;</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle&lt;2, T, Q, E0, E1, -1, -2&gt; <span class=\"keyword\">const</span>&amp; v, detail::_swizzle&lt;2, T, Q, F0, F1, -1, -2&gt; <span class=\"keyword\">const</span>&amp; u)</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;                                *<span class=\"keyword\">this</span> = vec&lt;4, T, Q&gt;(v(), u());</div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1&gt;</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(T <span class=\"keyword\">const</span>&amp; x, T <span class=\"keyword\">const</span>&amp; y, detail::_swizzle&lt;2, T, Q, E0, E1, -1, -2&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;                                *<span class=\"keyword\">this</span> = vec&lt;4, T, Q&gt;(x, y, v());</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1&gt;</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(T <span class=\"keyword\">const</span>&amp; x, detail::_swizzle&lt;2, T, Q, E0, E1, -1, -2&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span>&amp; w)</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;                                *<span class=\"keyword\">this</span> = vec&lt;4, T, Q&gt;(x, v(), w);</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1&gt;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle&lt;2, T, Q, E0, E1, -1, -2&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span>&amp; z, T <span class=\"keyword\">const</span>&amp; w)</div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;                                *<span class=\"keyword\">this</span> = vec&lt;4, T, Q&gt;(v(), z, w);</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2&gt;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle&lt;3, T, Q, E0, E1, E2, -1&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span>&amp; w)</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;                                *<span class=\"keyword\">this</span> = vec&lt;4, T, Q&gt;(v(), w);</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;                        <span class=\"keyword\">template</span>&lt;<span class=\"keywordtype\">int</span> E0, <span class=\"keywordtype\">int</span> E1, <span class=\"keywordtype\">int</span> E2&gt;</div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;                        GLM_FUNC_DECL GLM_CONSTEXPR vec(T <span class=\"keyword\">const</span>&amp; x, detail::_swizzle&lt;3, T, Q, E0, E1, E2, -1&gt; <span class=\"keyword\">const</span>&amp; v)</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;                        {</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;                                *<span class=\"keyword\">this</span> = vec&lt;4, T, Q&gt;(x, v());</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;                        }</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;<span class=\"preprocessor\">#               endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR</span></div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;</div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;                <span class=\"comment\">// -- Unary arithmetic operators --</span></div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator=(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v) GLM_DEFAULT;</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator+=(U scalar);</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator+=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator+=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator-=(U scalar);</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator-=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator-=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator*=(U scalar);</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator*=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator*=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator/=(U scalar);</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator/=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt;&amp; operator/=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;                <span class=\"comment\">// -- Increment and decrement operators --</span></div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator++();</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator--();</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator++(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator--(<span class=\"keywordtype\">int</span>);</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;                <span class=\"comment\">// -- Unary bit operators --</span></div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator%=(U scalar);</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator%=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator%=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&amp;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&amp;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&amp;=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator|=(U scalar);</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator|=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator|=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator^=(U scalar);</div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator^=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator^=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&lt;&lt;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&lt;&lt;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&lt;&lt;=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&gt;&gt;=(U scalar);</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&gt;&gt;=(vec&lt;1, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;                <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> U&gt;</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;                GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; &amp; operator&gt;&gt;=(vec&lt;4, U, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;        };</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;        <span class=\"comment\">// -- Unary operators --</span></div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator+(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator-(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;        <span class=\"comment\">// -- Binary operators --</span></div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;</div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator+(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span> &amp; scalar);</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator+(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;</div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator+(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator+(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;</div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator+(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator-(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span> &amp; scalar);</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;</div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator-(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator-(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;</div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator-(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator-(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator*(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span> &amp; scalar);</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator*(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator*(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator*(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator*(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;</div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator/(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span> &amp; scalar);</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator/(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator/(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator/(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;</div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator/(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator%(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator%(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar);</div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;</div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator%(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;</div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator%(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator%(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;</div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&amp;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&amp;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar);</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&amp;(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&amp;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;</div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&amp;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator|(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator|(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar);</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator|(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;</div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator|(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator|(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;</div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator^(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator^(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar);</div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator^(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;</div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator^(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator^(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&lt;&lt;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;</div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&lt;&lt;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar);</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&lt;&lt;(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&lt;&lt;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;</div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&lt;&lt;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&gt;&gt;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T scalar);</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&gt;&gt;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar);</div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&gt;&gt;(T scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;</div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&gt;&gt;(vec&lt;1, T, Q&gt; <span class=\"keyword\">const</span>&amp; scalar, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator&gt;&gt;(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;</div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, T, Q&gt; operator~(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;</div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;        <span class=\"comment\">// -- Boolean operators --</span></div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;</div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator==(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;</div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> operator!=(vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, T, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;</div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;        <span class=\"keyword\">template</span>&lt;qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, bool, Q&gt; operator&amp;&amp;(vec&lt;4, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160;</div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;        <span class=\"keyword\">template</span>&lt;qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;4, bool, Q&gt; operator||(vec&lt;4, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v1, vec&lt;4, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v2);</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;</div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;<span class=\"preprocessor\">#ifndef GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;<span class=\"preprocessor\">#include &quot;type_vec4.inl&quot;</span></div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;<span class=\"preprocessor\">#endif//GLM_EXTERNAL_TEMPLATE</span></div>\n<div class=\"ttc\" id=\"a00254_html_gab703732449be6c7199369b3f9a91ed38\"><div class=\"ttname\"><a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">glm::length</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T length(qua&lt; T, Q &gt; const &amp;q)</div><div class=\"ttdoc\">Returns the norm of a quaternions. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00182.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: ulp.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">ulp.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00306.html\">GLM_GTC_ulp</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00182_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a2358fa840554fa36531aee28f3e14d6b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>float_distance</b> (float x, float y)</td></tr>\n<tr class=\"memdesc:a2358fa840554fa36531aee28f3e14d6b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the distance in the number of ULP between 2 single-precision floating-point scalars.  <a href=\"a00236.html#a2358fa840554fa36531aee28f3e14d6b\">More...</a><br /></td></tr>\n<tr class=\"separator:a2358fa840554fa36531aee28f3e14d6b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a464d5c96158df04d96a11d97b00c51a7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>float_distance</b> (double x, double y)</td></tr>\n<tr class=\"memdesc:a464d5c96158df04d96a11d97b00c51a7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the distance in the number of ULP between 2 double-precision floating-point scalars.  <a href=\"a00236.html#a464d5c96158df04d96a11d97b00c51a7\">More...</a><br /></td></tr>\n<tr class=\"separator:a464d5c96158df04d96a11d97b00c51a7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a15349749edb8373079f4dcd518cc3d02\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a15349749edb8373079f4dcd518cc3d02\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>float_distance</b> (vec&lt; L, float, Q &gt; const &amp;x, vec&lt; L, float, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:a15349749edb8373079f4dcd518cc3d02\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the distance in the number of ULP between 2 single-precision floating-point scalars.  <a href=\"a00236.html#a15349749edb8373079f4dcd518cc3d02\">More...</a><br /></td></tr>\n<tr class=\"separator:a15349749edb8373079f4dcd518cc3d02\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ac0726cf2e5ce7d03b0ac4c81438c07fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ac0726cf2e5ce7d03b0ac4c81438c07fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int64, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>float_distance</b> (vec&lt; L, double, Q &gt; const &amp;x, vec&lt; L, double, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ac0726cf2e5ce7d03b0ac4c81438c07fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the distance in the number of ULP between 2 double-precision floating-point scalars.  <a href=\"a00236.html#ac0726cf2e5ce7d03b0ac4c81438c07fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ac0726cf2e5ce7d03b0ac4c81438c07fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ab21fbe69182da4f378862feeffe24b16\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ab21fbe69182da4f378862feeffe24b16\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>next_float</b> (genType x)</td></tr>\n<tr class=\"memdesc:ab21fbe69182da4f378862feeffe24b16\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the next ULP value(s) after the input value(s).  <a href=\"a00236.html#ab21fbe69182da4f378862feeffe24b16\">More...</a><br /></td></tr>\n<tr class=\"separator:ab21fbe69182da4f378862feeffe24b16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af8540f4caeba5037dee6506184f360b0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:af8540f4caeba5037dee6506184f360b0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>next_float</b> (genType x, int ULPs)</td></tr>\n<tr class=\"memdesc:af8540f4caeba5037dee6506184f360b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance after the input value(s).  <a href=\"a00236.html#af8540f4caeba5037dee6506184f360b0\">More...</a><br /></td></tr>\n<tr class=\"separator:af8540f4caeba5037dee6506184f360b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a72c18d50df8ef360960ddf1f5d09c728\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a72c18d50df8ef360960ddf1f5d09c728\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>next_float</b> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:a72c18d50df8ef360960ddf1f5d09c728\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the next ULP value(s) after the input value(s).  <a href=\"a00236.html#a72c18d50df8ef360960ddf1f5d09c728\">More...</a><br /></td></tr>\n<tr class=\"separator:a72c18d50df8ef360960ddf1f5d09c728\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a78b63ddacacb9e0e8f4172d85f4373aa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a78b63ddacacb9e0e8f4172d85f4373aa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>next_float</b> (vec&lt; L, T, Q &gt; const &amp;x, int ULPs)</td></tr>\n<tr class=\"memdesc:a78b63ddacacb9e0e8f4172d85f4373aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance after the input value(s).  <a href=\"a00236.html#a78b63ddacacb9e0e8f4172d85f4373aa\">More...</a><br /></td></tr>\n<tr class=\"separator:a78b63ddacacb9e0e8f4172d85f4373aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a48e17607989d47bc99e16cce74543e19\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a48e17607989d47bc99e16cce74543e19\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>next_float</b> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:a48e17607989d47bc99e16cce74543e19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance after the input value(s).  <a href=\"a00236.html#a48e17607989d47bc99e16cce74543e19\">More...</a><br /></td></tr>\n<tr class=\"separator:a48e17607989d47bc99e16cce74543e19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af2a8466ad7470fcafaf91b24b43d1d4d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:af2a8466ad7470fcafaf91b24b43d1d4d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prev_float</b> (genType x)</td></tr>\n<tr class=\"memdesc:af2a8466ad7470fcafaf91b24b43d1d4d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the previous ULP value(s) before the input value(s).  <a href=\"a00236.html#af2a8466ad7470fcafaf91b24b43d1d4d\">More...</a><br /></td></tr>\n<tr class=\"separator:af2a8466ad7470fcafaf91b24b43d1d4d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a71d68bb1fff11ac1c757d44cd23ddf50\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:a71d68bb1fff11ac1c757d44cd23ddf50\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prev_float</b> (genType x, int ULPs)</td></tr>\n<tr class=\"memdesc:a71d68bb1fff11ac1c757d44cd23ddf50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance before the input value(s).  <a href=\"a00236.html#a71d68bb1fff11ac1c757d44cd23ddf50\">More...</a><br /></td></tr>\n<tr class=\"separator:a71d68bb1fff11ac1c757d44cd23ddf50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:af2268a89effe42c4d6952085fa616cee\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:af2268a89effe42c4d6952085fa616cee\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prev_float</b> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:af2268a89effe42c4d6952085fa616cee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the previous ULP value(s) before the input value(s).  <a href=\"a00236.html#af2268a89effe42c4d6952085fa616cee\">More...</a><br /></td></tr>\n<tr class=\"separator:af2268a89effe42c4d6952085fa616cee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:aa761d18f8e3a93752550c9ce9556749c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:aa761d18f8e3a93752550c9ce9556749c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prev_float</b> (vec&lt; L, T, Q &gt; const &amp;x, int ULPs)</td></tr>\n<tr class=\"memdesc:aa761d18f8e3a93752550c9ce9556749c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance before the input value(s).  <a href=\"a00236.html#aa761d18f8e3a93752550c9ce9556749c\">More...</a><br /></td></tr>\n<tr class=\"separator:aa761d18f8e3a93752550c9ce9556749c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a471608a1ffbf4472dc5c84216ea937e8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a471608a1ffbf4472dc5c84216ea937e8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prev_float</b> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:a471608a1ffbf4472dc5c84216ea937e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance before the input value(s).  <a href=\"a00236.html#a471608a1ffbf4472dc5c84216ea937e8\">More...</a><br /></td></tr>\n<tr class=\"separator:a471608a1ffbf4472dc5c84216ea937e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00306.html\">GLM_GTC_ulp</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00182_source.html\">ulp.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00182_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: ulp.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ulp.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00182.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/_vectorize.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_int_sized.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_ulp extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL genType next_float(genType x);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL genType prev_float(genType x);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL genType next_float(genType x, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_FUNC_DECL genType prev_float(genType x, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">int</span> float_distance(<span class=\"keywordtype\">float</span> x, <span class=\"keywordtype\">float</span> y);</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        GLM_FUNC_DECL <a class=\"code\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a> float_distance(<span class=\"keywordtype\">double</span> x, <span class=\"keywordtype\">double</span> y);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; next_float(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; next_float(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; next_float(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; ULPs);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; prev_float(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; prev_float(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; prev_float(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; ULPs);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        GLM_FUNC_DECL vec&lt;L, int, Q&gt; float_distance(vec&lt;L, float, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, float, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        GLM_FUNC_DECL vec&lt;L, int64, Q&gt; float_distance(vec&lt;L, double, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, double, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;</div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;<span class=\"preprocessor\">#include &quot;ulp.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00260_html_gaff5189f97f9e842d9636a0f240001b2e\"><div class=\"ttname\"><a href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">glm::int64</a></div><div class=\"ttdeci\">detail::int64 int64</div><div class=\"ttdoc\">64 bit signed integer type. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00146_source.html#l00067\">scalar_int_sized.hpp:67</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00183.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec1.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec1.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00307.html\">GLM_GTC_vec1</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00183_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00307.html\">GLM_GTC_vec1</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00183_source.html\">vec1.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00183_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec1.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec1.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00183.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_bool1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_bool1_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_float1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_float1_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_double1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_double1_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_int1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_int1_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_uint1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/vector_uint1_precision.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_GTC_vec1 extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00184.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00184_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00184_source.html\">vec2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00184_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00184.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00191.html\">./ext/vector_bool2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00192.html\">./ext/vector_bool2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00208.html\">./ext/vector_float2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00209.html\">./ext/vector_float2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00200.html\">./ext/vector_double2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00201.html\">./ext/vector_double2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00216.html\">./ext/vector_int2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00217.html\">./ext/vector_int2_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00228.html\">./ext/vector_uint2.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00229.html\">./ext/vector_uint2_precision.hpp</a>&quot;</span></div>\n<div class=\"ttc\" id=\"a00191_html\"><div class=\"ttname\"><a href=\"a00191.html\">vector_bool2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00201_html\"><div class=\"ttname\"><a href=\"a00201.html\">vector_double2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00209_html\"><div class=\"ttname\"><a href=\"a00209.html\">vector_float2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00200_html\"><div class=\"ttname\"><a href=\"a00200.html\">vector_double2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00229_html\"><div class=\"ttname\"><a href=\"a00229.html\">vector_uint2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00217_html\"><div class=\"ttname\"><a href=\"a00217.html\">vector_int2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00208_html\"><div class=\"ttname\"><a href=\"a00208.html\">vector_float2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00192_html\"><div class=\"ttname\"><a href=\"a00192.html\">vector_bool2_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00228_html\"><div class=\"ttname\"><a href=\"a00228.html\">vector_uint2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00216_html\"><div class=\"ttname\"><a href=\"a00216.html\">vector_int2.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00185.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00185_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00185_source.html\">vec3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00185_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00185.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00193.html\">./ext/vector_bool3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00194.html\">./ext/vector_bool3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00210.html\">./ext/vector_float3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00211.html\">./ext/vector_float3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00202.html\">./ext/vector_double3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00203.html\">./ext/vector_double3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00218.html\">./ext/vector_int3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00219.html\">./ext/vector_int3_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00230.html\">./ext/vector_uint3.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00231.html\">./ext/vector_uint3_precision.hpp</a>&quot;</span></div>\n<div class=\"ttc\" id=\"a00210_html\"><div class=\"ttname\"><a href=\"a00210.html\">vector_float3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00193_html\"><div class=\"ttname\"><a href=\"a00193.html\">vector_bool3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00203_html\"><div class=\"ttname\"><a href=\"a00203.html\">vector_double3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00230_html\"><div class=\"ttname\"><a href=\"a00230.html\">vector_uint3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00218_html\"><div class=\"ttname\"><a href=\"a00218.html\">vector_int3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00211_html\"><div class=\"ttname\"><a href=\"a00211.html\">vector_float3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00231_html\"><div class=\"ttname\"><a href=\"a00231.html\">vector_uint3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00194_html\"><div class=\"ttname\"><a href=\"a00194.html\">vector_bool3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00202_html\"><div class=\"ttname\"><a href=\"a00202.html\">vector_double3.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00219_html\"><div class=\"ttname\"><a href=\"a00219.html\">vector_int3_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00186.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00186_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00186_source.html\">vec4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00186_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00186.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00195.html\">./ext/vector_bool4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00196.html\">./ext/vector_bool4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00212.html\">./ext/vector_float4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00213.html\">./ext/vector_float4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00204.html\">./ext/vector_double4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00010\"></a><span class=\"lineno\">   10</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00205.html\">./ext/vector_double4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00220.html\">./ext/vector_int4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00221.html\">./ext/vector_int4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00232.html\">./ext/vector_uint4.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#include &quot;<a class=\"code\" href=\"a00233.html\">./ext/vector_uint4_precision.hpp</a>&quot;</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"ttc\" id=\"a00221_html\"><div class=\"ttname\"><a href=\"a00221.html\">vector_int4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00196_html\"><div class=\"ttname\"><a href=\"a00196.html\">vector_bool4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00212_html\"><div class=\"ttname\"><a href=\"a00212.html\">vector_float4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00195_html\"><div class=\"ttname\"><a href=\"a00195.html\">vector_bool4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00205_html\"><div class=\"ttname\"><a href=\"a00205.html\">vector_double4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00232_html\"><div class=\"ttname\"><a href=\"a00232.html\">vector_uint4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00220_html\"><div class=\"ttname\"><a href=\"a00220.html\">vector_int4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00213_html\"><div class=\"ttname\"><a href=\"a00213.html\">vector_float4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00233_html\"><div class=\"ttname\"><a href=\"a00233.html\">vector_uint4_precision.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n<div class=\"ttc\" id=\"a00204_html\"><div class=\"ttname\"><a href=\"a00204.html\">vector_double4.hpp</a></div><div class=\"ttdoc\">Core features </div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00187.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec_swizzle.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec_swizzle.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00366.html\">GLM_GTX_vec_swizzle</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00187_source.html\">Go to the source code of this file.</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00366.html\">GLM_GTX_vec_swizzle</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00187_source.html\">vec_swizzle.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00187_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vec_swizzle.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vec_swizzle.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00187.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_vec_swizzle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_vec_swizzle extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a> {</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;        <span class=\"comment\">// xx</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xx(<span class=\"keyword\">const</span> glm::vec&lt;1, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"comment\">// xy</span></div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00063\"></a><span class=\"lineno\">   63</span>&#160;        <span class=\"comment\">// xz</span></div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00073\"></a><span class=\"lineno\">   73</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"comment\">// xw</span></div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; xw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.x, v.w);</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <span class=\"comment\">// yx</span></div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;</div>\n<div class=\"line\"><a name=\"l00091\"></a><span class=\"lineno\">   91</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        <span class=\"comment\">// yy</span></div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00111\"></a><span class=\"lineno\">  111</span>&#160;</div>\n<div class=\"line\"><a name=\"l00112\"></a><span class=\"lineno\">  112</span>&#160;        <span class=\"comment\">// yz</span></div>\n<div class=\"line\"><a name=\"l00113\"></a><span class=\"lineno\">  113</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00114\"></a><span class=\"lineno\">  114</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00122\"></a><span class=\"lineno\">  122</span>&#160;</div>\n<div class=\"line\"><a name=\"l00123\"></a><span class=\"lineno\">  123</span>&#160;        <span class=\"comment\">// yw</span></div>\n<div class=\"line\"><a name=\"l00124\"></a><span class=\"lineno\">  124</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00125\"></a><span class=\"lineno\">  125</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; yw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00126\"></a><span class=\"lineno\">  126</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.y, v.w);</div>\n<div class=\"line\"><a name=\"l00127\"></a><span class=\"lineno\">  127</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        <span class=\"comment\">// zx</span></div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00131\"></a><span class=\"lineno\">  131</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; zx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00135\"></a><span class=\"lineno\">  135</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00136\"></a><span class=\"lineno\">  136</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; zx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00137\"></a><span class=\"lineno\">  137</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;        <span class=\"comment\">// zy</span></div>\n<div class=\"line\"><a name=\"l00141\"></a><span class=\"lineno\">  141</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; zy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00146\"></a><span class=\"lineno\">  146</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; zy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00150\"></a><span class=\"lineno\">  150</span>&#160;</div>\n<div class=\"line\"><a name=\"l00151\"></a><span class=\"lineno\">  151</span>&#160;        <span class=\"comment\">// zz</span></div>\n<div class=\"line\"><a name=\"l00152\"></a><span class=\"lineno\">  152</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00153\"></a><span class=\"lineno\">  153</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; zz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00154\"></a><span class=\"lineno\">  154</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00155\"></a><span class=\"lineno\">  155</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00156\"></a><span class=\"lineno\">  156</span>&#160;</div>\n<div class=\"line\"><a name=\"l00157\"></a><span class=\"lineno\">  157</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00158\"></a><span class=\"lineno\">  158</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; zz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00159\"></a><span class=\"lineno\">  159</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00160\"></a><span class=\"lineno\">  160</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00161\"></a><span class=\"lineno\">  161</span>&#160;</div>\n<div class=\"line\"><a name=\"l00162\"></a><span class=\"lineno\">  162</span>&#160;        <span class=\"comment\">// zw</span></div>\n<div class=\"line\"><a name=\"l00163\"></a><span class=\"lineno\">  163</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00164\"></a><span class=\"lineno\">  164</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; zw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00165\"></a><span class=\"lineno\">  165</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.z, v.w);</div>\n<div class=\"line\"><a name=\"l00166\"></a><span class=\"lineno\">  166</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00167\"></a><span class=\"lineno\">  167</span>&#160;</div>\n<div class=\"line\"><a name=\"l00168\"></a><span class=\"lineno\">  168</span>&#160;        <span class=\"comment\">// wx</span></div>\n<div class=\"line\"><a name=\"l00169\"></a><span class=\"lineno\">  169</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00170\"></a><span class=\"lineno\">  170</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; wx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00171\"></a><span class=\"lineno\">  171</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.w, v.x);</div>\n<div class=\"line\"><a name=\"l00172\"></a><span class=\"lineno\">  172</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00173\"></a><span class=\"lineno\">  173</span>&#160;</div>\n<div class=\"line\"><a name=\"l00174\"></a><span class=\"lineno\">  174</span>&#160;        <span class=\"comment\">// wy</span></div>\n<div class=\"line\"><a name=\"l00175\"></a><span class=\"lineno\">  175</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00176\"></a><span class=\"lineno\">  176</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; wy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00177\"></a><span class=\"lineno\">  177</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.w, v.y);</div>\n<div class=\"line\"><a name=\"l00178\"></a><span class=\"lineno\">  178</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00179\"></a><span class=\"lineno\">  179</span>&#160;</div>\n<div class=\"line\"><a name=\"l00180\"></a><span class=\"lineno\">  180</span>&#160;        <span class=\"comment\">// wz</span></div>\n<div class=\"line\"><a name=\"l00181\"></a><span class=\"lineno\">  181</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00182\"></a><span class=\"lineno\">  182</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; wz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00183\"></a><span class=\"lineno\">  183</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.w, v.z);</div>\n<div class=\"line\"><a name=\"l00184\"></a><span class=\"lineno\">  184</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00185\"></a><span class=\"lineno\">  185</span>&#160;</div>\n<div class=\"line\"><a name=\"l00186\"></a><span class=\"lineno\">  186</span>&#160;        <span class=\"comment\">// ww</span></div>\n<div class=\"line\"><a name=\"l00187\"></a><span class=\"lineno\">  187</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00188\"></a><span class=\"lineno\">  188</span>&#160;        GLM_INLINE glm::vec&lt;2, T, Q&gt; ww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00189\"></a><span class=\"lineno\">  189</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;2, T, Q&gt;(v.w, v.w);</div>\n<div class=\"line\"><a name=\"l00190\"></a><span class=\"lineno\">  190</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00191\"></a><span class=\"lineno\">  191</span>&#160;</div>\n<div class=\"line\"><a name=\"l00192\"></a><span class=\"lineno\">  192</span>&#160;        <span class=\"comment\">// xxx</span></div>\n<div class=\"line\"><a name=\"l00193\"></a><span class=\"lineno\">  193</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00194\"></a><span class=\"lineno\">  194</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxx(<span class=\"keyword\">const</span> glm::vec&lt;1, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00195\"></a><span class=\"lineno\">  195</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00196\"></a><span class=\"lineno\">  196</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00197\"></a><span class=\"lineno\">  197</span>&#160;</div>\n<div class=\"line\"><a name=\"l00198\"></a><span class=\"lineno\">  198</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00199\"></a><span class=\"lineno\">  199</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00200\"></a><span class=\"lineno\">  200</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00201\"></a><span class=\"lineno\">  201</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00202\"></a><span class=\"lineno\">  202</span>&#160;</div>\n<div class=\"line\"><a name=\"l00203\"></a><span class=\"lineno\">  203</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00204\"></a><span class=\"lineno\">  204</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00205\"></a><span class=\"lineno\">  205</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00206\"></a><span class=\"lineno\">  206</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00207\"></a><span class=\"lineno\">  207</span>&#160;</div>\n<div class=\"line\"><a name=\"l00208\"></a><span class=\"lineno\">  208</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00209\"></a><span class=\"lineno\">  209</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00210\"></a><span class=\"lineno\">  210</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00211\"></a><span class=\"lineno\">  211</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00212\"></a><span class=\"lineno\">  212</span>&#160;</div>\n<div class=\"line\"><a name=\"l00213\"></a><span class=\"lineno\">  213</span>&#160;        <span class=\"comment\">// xxy</span></div>\n<div class=\"line\"><a name=\"l00214\"></a><span class=\"lineno\">  214</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00215\"></a><span class=\"lineno\">  215</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00216\"></a><span class=\"lineno\">  216</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00217\"></a><span class=\"lineno\">  217</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00218\"></a><span class=\"lineno\">  218</span>&#160;</div>\n<div class=\"line\"><a name=\"l00219\"></a><span class=\"lineno\">  219</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00220\"></a><span class=\"lineno\">  220</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00221\"></a><span class=\"lineno\">  221</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00222\"></a><span class=\"lineno\">  222</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00223\"></a><span class=\"lineno\">  223</span>&#160;</div>\n<div class=\"line\"><a name=\"l00224\"></a><span class=\"lineno\">  224</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00225\"></a><span class=\"lineno\">  225</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00226\"></a><span class=\"lineno\">  226</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00227\"></a><span class=\"lineno\">  227</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00228\"></a><span class=\"lineno\">  228</span>&#160;</div>\n<div class=\"line\"><a name=\"l00229\"></a><span class=\"lineno\">  229</span>&#160;        <span class=\"comment\">// xxz</span></div>\n<div class=\"line\"><a name=\"l00230\"></a><span class=\"lineno\">  230</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00231\"></a><span class=\"lineno\">  231</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00232\"></a><span class=\"lineno\">  232</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00233\"></a><span class=\"lineno\">  233</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00234\"></a><span class=\"lineno\">  234</span>&#160;</div>\n<div class=\"line\"><a name=\"l00235\"></a><span class=\"lineno\">  235</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00236\"></a><span class=\"lineno\">  236</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00237\"></a><span class=\"lineno\">  237</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00238\"></a><span class=\"lineno\">  238</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00239\"></a><span class=\"lineno\">  239</span>&#160;</div>\n<div class=\"line\"><a name=\"l00240\"></a><span class=\"lineno\">  240</span>&#160;        <span class=\"comment\">// xxw</span></div>\n<div class=\"line\"><a name=\"l00241\"></a><span class=\"lineno\">  241</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00242\"></a><span class=\"lineno\">  242</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00243\"></a><span class=\"lineno\">  243</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l00244\"></a><span class=\"lineno\">  244</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00245\"></a><span class=\"lineno\">  245</span>&#160;</div>\n<div class=\"line\"><a name=\"l00246\"></a><span class=\"lineno\">  246</span>&#160;        <span class=\"comment\">// xyx</span></div>\n<div class=\"line\"><a name=\"l00247\"></a><span class=\"lineno\">  247</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00248\"></a><span class=\"lineno\">  248</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00249\"></a><span class=\"lineno\">  249</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00250\"></a><span class=\"lineno\">  250</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00251\"></a><span class=\"lineno\">  251</span>&#160;</div>\n<div class=\"line\"><a name=\"l00252\"></a><span class=\"lineno\">  252</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00253\"></a><span class=\"lineno\">  253</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00254\"></a><span class=\"lineno\">  254</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00255\"></a><span class=\"lineno\">  255</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00256\"></a><span class=\"lineno\">  256</span>&#160;</div>\n<div class=\"line\"><a name=\"l00257\"></a><span class=\"lineno\">  257</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00258\"></a><span class=\"lineno\">  258</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00259\"></a><span class=\"lineno\">  259</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00260\"></a><span class=\"lineno\">  260</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00261\"></a><span class=\"lineno\">  261</span>&#160;</div>\n<div class=\"line\"><a name=\"l00262\"></a><span class=\"lineno\">  262</span>&#160;        <span class=\"comment\">// xyy</span></div>\n<div class=\"line\"><a name=\"l00263\"></a><span class=\"lineno\">  263</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00264\"></a><span class=\"lineno\">  264</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00265\"></a><span class=\"lineno\">  265</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00266\"></a><span class=\"lineno\">  266</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00267\"></a><span class=\"lineno\">  267</span>&#160;</div>\n<div class=\"line\"><a name=\"l00268\"></a><span class=\"lineno\">  268</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00269\"></a><span class=\"lineno\">  269</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00270\"></a><span class=\"lineno\">  270</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00271\"></a><span class=\"lineno\">  271</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00272\"></a><span class=\"lineno\">  272</span>&#160;</div>\n<div class=\"line\"><a name=\"l00273\"></a><span class=\"lineno\">  273</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00274\"></a><span class=\"lineno\">  274</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00275\"></a><span class=\"lineno\">  275</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00276\"></a><span class=\"lineno\">  276</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00277\"></a><span class=\"lineno\">  277</span>&#160;</div>\n<div class=\"line\"><a name=\"l00278\"></a><span class=\"lineno\">  278</span>&#160;        <span class=\"comment\">// xyz</span></div>\n<div class=\"line\"><a name=\"l00279\"></a><span class=\"lineno\">  279</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00280\"></a><span class=\"lineno\">  280</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00281\"></a><span class=\"lineno\">  281</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00282\"></a><span class=\"lineno\">  282</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00283\"></a><span class=\"lineno\">  283</span>&#160;</div>\n<div class=\"line\"><a name=\"l00284\"></a><span class=\"lineno\">  284</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00285\"></a><span class=\"lineno\">  285</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00286\"></a><span class=\"lineno\">  286</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00287\"></a><span class=\"lineno\">  287</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00288\"></a><span class=\"lineno\">  288</span>&#160;</div>\n<div class=\"line\"><a name=\"l00289\"></a><span class=\"lineno\">  289</span>&#160;        <span class=\"comment\">// xyw</span></div>\n<div class=\"line\"><a name=\"l00290\"></a><span class=\"lineno\">  290</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00291\"></a><span class=\"lineno\">  291</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00292\"></a><span class=\"lineno\">  292</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l00293\"></a><span class=\"lineno\">  293</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00294\"></a><span class=\"lineno\">  294</span>&#160;</div>\n<div class=\"line\"><a name=\"l00295\"></a><span class=\"lineno\">  295</span>&#160;        <span class=\"comment\">// xzx</span></div>\n<div class=\"line\"><a name=\"l00296\"></a><span class=\"lineno\">  296</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00297\"></a><span class=\"lineno\">  297</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00298\"></a><span class=\"lineno\">  298</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00299\"></a><span class=\"lineno\">  299</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00300\"></a><span class=\"lineno\">  300</span>&#160;</div>\n<div class=\"line\"><a name=\"l00301\"></a><span class=\"lineno\">  301</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00302\"></a><span class=\"lineno\">  302</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00303\"></a><span class=\"lineno\">  303</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00304\"></a><span class=\"lineno\">  304</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00305\"></a><span class=\"lineno\">  305</span>&#160;</div>\n<div class=\"line\"><a name=\"l00306\"></a><span class=\"lineno\">  306</span>&#160;        <span class=\"comment\">// xzy</span></div>\n<div class=\"line\"><a name=\"l00307\"></a><span class=\"lineno\">  307</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00308\"></a><span class=\"lineno\">  308</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00309\"></a><span class=\"lineno\">  309</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00310\"></a><span class=\"lineno\">  310</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00311\"></a><span class=\"lineno\">  311</span>&#160;</div>\n<div class=\"line\"><a name=\"l00312\"></a><span class=\"lineno\">  312</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00313\"></a><span class=\"lineno\">  313</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00314\"></a><span class=\"lineno\">  314</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00315\"></a><span class=\"lineno\">  315</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00316\"></a><span class=\"lineno\">  316</span>&#160;</div>\n<div class=\"line\"><a name=\"l00317\"></a><span class=\"lineno\">  317</span>&#160;        <span class=\"comment\">// xzz</span></div>\n<div class=\"line\"><a name=\"l00318\"></a><span class=\"lineno\">  318</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00319\"></a><span class=\"lineno\">  319</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00320\"></a><span class=\"lineno\">  320</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00321\"></a><span class=\"lineno\">  321</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00322\"></a><span class=\"lineno\">  322</span>&#160;</div>\n<div class=\"line\"><a name=\"l00323\"></a><span class=\"lineno\">  323</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00324\"></a><span class=\"lineno\">  324</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00325\"></a><span class=\"lineno\">  325</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00326\"></a><span class=\"lineno\">  326</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00327\"></a><span class=\"lineno\">  327</span>&#160;</div>\n<div class=\"line\"><a name=\"l00328\"></a><span class=\"lineno\">  328</span>&#160;        <span class=\"comment\">// xzw</span></div>\n<div class=\"line\"><a name=\"l00329\"></a><span class=\"lineno\">  329</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00330\"></a><span class=\"lineno\">  330</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00331\"></a><span class=\"lineno\">  331</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l00332\"></a><span class=\"lineno\">  332</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00333\"></a><span class=\"lineno\">  333</span>&#160;</div>\n<div class=\"line\"><a name=\"l00334\"></a><span class=\"lineno\">  334</span>&#160;        <span class=\"comment\">// xwx</span></div>\n<div class=\"line\"><a name=\"l00335\"></a><span class=\"lineno\">  335</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00336\"></a><span class=\"lineno\">  336</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00337\"></a><span class=\"lineno\">  337</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l00338\"></a><span class=\"lineno\">  338</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00339\"></a><span class=\"lineno\">  339</span>&#160;</div>\n<div class=\"line\"><a name=\"l00340\"></a><span class=\"lineno\">  340</span>&#160;        <span class=\"comment\">// xwy</span></div>\n<div class=\"line\"><a name=\"l00341\"></a><span class=\"lineno\">  341</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00342\"></a><span class=\"lineno\">  342</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00343\"></a><span class=\"lineno\">  343</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l00344\"></a><span class=\"lineno\">  344</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00345\"></a><span class=\"lineno\">  345</span>&#160;</div>\n<div class=\"line\"><a name=\"l00346\"></a><span class=\"lineno\">  346</span>&#160;        <span class=\"comment\">// xwz</span></div>\n<div class=\"line\"><a name=\"l00347\"></a><span class=\"lineno\">  347</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00348\"></a><span class=\"lineno\">  348</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00349\"></a><span class=\"lineno\">  349</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l00350\"></a><span class=\"lineno\">  350</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00351\"></a><span class=\"lineno\">  351</span>&#160;</div>\n<div class=\"line\"><a name=\"l00352\"></a><span class=\"lineno\">  352</span>&#160;        <span class=\"comment\">// xww</span></div>\n<div class=\"line\"><a name=\"l00353\"></a><span class=\"lineno\">  353</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00354\"></a><span class=\"lineno\">  354</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; xww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00355\"></a><span class=\"lineno\">  355</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.x, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l00356\"></a><span class=\"lineno\">  356</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00357\"></a><span class=\"lineno\">  357</span>&#160;</div>\n<div class=\"line\"><a name=\"l00358\"></a><span class=\"lineno\">  358</span>&#160;        <span class=\"comment\">// yxx</span></div>\n<div class=\"line\"><a name=\"l00359\"></a><span class=\"lineno\">  359</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00360\"></a><span class=\"lineno\">  360</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00361\"></a><span class=\"lineno\">  361</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00362\"></a><span class=\"lineno\">  362</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00363\"></a><span class=\"lineno\">  363</span>&#160;</div>\n<div class=\"line\"><a name=\"l00364\"></a><span class=\"lineno\">  364</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00365\"></a><span class=\"lineno\">  365</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00366\"></a><span class=\"lineno\">  366</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00367\"></a><span class=\"lineno\">  367</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00368\"></a><span class=\"lineno\">  368</span>&#160;</div>\n<div class=\"line\"><a name=\"l00369\"></a><span class=\"lineno\">  369</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00370\"></a><span class=\"lineno\">  370</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00371\"></a><span class=\"lineno\">  371</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00372\"></a><span class=\"lineno\">  372</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00373\"></a><span class=\"lineno\">  373</span>&#160;</div>\n<div class=\"line\"><a name=\"l00374\"></a><span class=\"lineno\">  374</span>&#160;        <span class=\"comment\">// yxy</span></div>\n<div class=\"line\"><a name=\"l00375\"></a><span class=\"lineno\">  375</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00376\"></a><span class=\"lineno\">  376</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00377\"></a><span class=\"lineno\">  377</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00378\"></a><span class=\"lineno\">  378</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00379\"></a><span class=\"lineno\">  379</span>&#160;</div>\n<div class=\"line\"><a name=\"l00380\"></a><span class=\"lineno\">  380</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00381\"></a><span class=\"lineno\">  381</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00382\"></a><span class=\"lineno\">  382</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00383\"></a><span class=\"lineno\">  383</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00384\"></a><span class=\"lineno\">  384</span>&#160;</div>\n<div class=\"line\"><a name=\"l00385\"></a><span class=\"lineno\">  385</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00386\"></a><span class=\"lineno\">  386</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00387\"></a><span class=\"lineno\">  387</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00388\"></a><span class=\"lineno\">  388</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00389\"></a><span class=\"lineno\">  389</span>&#160;</div>\n<div class=\"line\"><a name=\"l00390\"></a><span class=\"lineno\">  390</span>&#160;        <span class=\"comment\">// yxz</span></div>\n<div class=\"line\"><a name=\"l00391\"></a><span class=\"lineno\">  391</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00392\"></a><span class=\"lineno\">  392</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00393\"></a><span class=\"lineno\">  393</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00394\"></a><span class=\"lineno\">  394</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00395\"></a><span class=\"lineno\">  395</span>&#160;</div>\n<div class=\"line\"><a name=\"l00396\"></a><span class=\"lineno\">  396</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00397\"></a><span class=\"lineno\">  397</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00398\"></a><span class=\"lineno\">  398</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00399\"></a><span class=\"lineno\">  399</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00400\"></a><span class=\"lineno\">  400</span>&#160;</div>\n<div class=\"line\"><a name=\"l00401\"></a><span class=\"lineno\">  401</span>&#160;        <span class=\"comment\">// yxw</span></div>\n<div class=\"line\"><a name=\"l00402\"></a><span class=\"lineno\">  402</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00403\"></a><span class=\"lineno\">  403</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00404\"></a><span class=\"lineno\">  404</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l00405\"></a><span class=\"lineno\">  405</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00406\"></a><span class=\"lineno\">  406</span>&#160;</div>\n<div class=\"line\"><a name=\"l00407\"></a><span class=\"lineno\">  407</span>&#160;        <span class=\"comment\">// yyx</span></div>\n<div class=\"line\"><a name=\"l00408\"></a><span class=\"lineno\">  408</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00409\"></a><span class=\"lineno\">  409</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00410\"></a><span class=\"lineno\">  410</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00411\"></a><span class=\"lineno\">  411</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00412\"></a><span class=\"lineno\">  412</span>&#160;</div>\n<div class=\"line\"><a name=\"l00413\"></a><span class=\"lineno\">  413</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00414\"></a><span class=\"lineno\">  414</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00415\"></a><span class=\"lineno\">  415</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00416\"></a><span class=\"lineno\">  416</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00417\"></a><span class=\"lineno\">  417</span>&#160;</div>\n<div class=\"line\"><a name=\"l00418\"></a><span class=\"lineno\">  418</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00419\"></a><span class=\"lineno\">  419</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00420\"></a><span class=\"lineno\">  420</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00421\"></a><span class=\"lineno\">  421</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00422\"></a><span class=\"lineno\">  422</span>&#160;</div>\n<div class=\"line\"><a name=\"l00423\"></a><span class=\"lineno\">  423</span>&#160;        <span class=\"comment\">// yyy</span></div>\n<div class=\"line\"><a name=\"l00424\"></a><span class=\"lineno\">  424</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00425\"></a><span class=\"lineno\">  425</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00426\"></a><span class=\"lineno\">  426</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00427\"></a><span class=\"lineno\">  427</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00428\"></a><span class=\"lineno\">  428</span>&#160;</div>\n<div class=\"line\"><a name=\"l00429\"></a><span class=\"lineno\">  429</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00430\"></a><span class=\"lineno\">  430</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00431\"></a><span class=\"lineno\">  431</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00432\"></a><span class=\"lineno\">  432</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00433\"></a><span class=\"lineno\">  433</span>&#160;</div>\n<div class=\"line\"><a name=\"l00434\"></a><span class=\"lineno\">  434</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00435\"></a><span class=\"lineno\">  435</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00436\"></a><span class=\"lineno\">  436</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00437\"></a><span class=\"lineno\">  437</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00438\"></a><span class=\"lineno\">  438</span>&#160;</div>\n<div class=\"line\"><a name=\"l00439\"></a><span class=\"lineno\">  439</span>&#160;        <span class=\"comment\">// yyz</span></div>\n<div class=\"line\"><a name=\"l00440\"></a><span class=\"lineno\">  440</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00441\"></a><span class=\"lineno\">  441</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00442\"></a><span class=\"lineno\">  442</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00443\"></a><span class=\"lineno\">  443</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00444\"></a><span class=\"lineno\">  444</span>&#160;</div>\n<div class=\"line\"><a name=\"l00445\"></a><span class=\"lineno\">  445</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00446\"></a><span class=\"lineno\">  446</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00447\"></a><span class=\"lineno\">  447</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00448\"></a><span class=\"lineno\">  448</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00449\"></a><span class=\"lineno\">  449</span>&#160;</div>\n<div class=\"line\"><a name=\"l00450\"></a><span class=\"lineno\">  450</span>&#160;        <span class=\"comment\">// yyw</span></div>\n<div class=\"line\"><a name=\"l00451\"></a><span class=\"lineno\">  451</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00452\"></a><span class=\"lineno\">  452</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00453\"></a><span class=\"lineno\">  453</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l00454\"></a><span class=\"lineno\">  454</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00455\"></a><span class=\"lineno\">  455</span>&#160;</div>\n<div class=\"line\"><a name=\"l00456\"></a><span class=\"lineno\">  456</span>&#160;        <span class=\"comment\">// yzx</span></div>\n<div class=\"line\"><a name=\"l00457\"></a><span class=\"lineno\">  457</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00458\"></a><span class=\"lineno\">  458</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00459\"></a><span class=\"lineno\">  459</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00460\"></a><span class=\"lineno\">  460</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00461\"></a><span class=\"lineno\">  461</span>&#160;</div>\n<div class=\"line\"><a name=\"l00462\"></a><span class=\"lineno\">  462</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00463\"></a><span class=\"lineno\">  463</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00464\"></a><span class=\"lineno\">  464</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00465\"></a><span class=\"lineno\">  465</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00466\"></a><span class=\"lineno\">  466</span>&#160;</div>\n<div class=\"line\"><a name=\"l00467\"></a><span class=\"lineno\">  467</span>&#160;        <span class=\"comment\">// yzy</span></div>\n<div class=\"line\"><a name=\"l00468\"></a><span class=\"lineno\">  468</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00469\"></a><span class=\"lineno\">  469</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00470\"></a><span class=\"lineno\">  470</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00471\"></a><span class=\"lineno\">  471</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00472\"></a><span class=\"lineno\">  472</span>&#160;</div>\n<div class=\"line\"><a name=\"l00473\"></a><span class=\"lineno\">  473</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00474\"></a><span class=\"lineno\">  474</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00475\"></a><span class=\"lineno\">  475</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00476\"></a><span class=\"lineno\">  476</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00477\"></a><span class=\"lineno\">  477</span>&#160;</div>\n<div class=\"line\"><a name=\"l00478\"></a><span class=\"lineno\">  478</span>&#160;        <span class=\"comment\">// yzz</span></div>\n<div class=\"line\"><a name=\"l00479\"></a><span class=\"lineno\">  479</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00480\"></a><span class=\"lineno\">  480</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00481\"></a><span class=\"lineno\">  481</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00482\"></a><span class=\"lineno\">  482</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00483\"></a><span class=\"lineno\">  483</span>&#160;</div>\n<div class=\"line\"><a name=\"l00484\"></a><span class=\"lineno\">  484</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00485\"></a><span class=\"lineno\">  485</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00486\"></a><span class=\"lineno\">  486</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00487\"></a><span class=\"lineno\">  487</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00488\"></a><span class=\"lineno\">  488</span>&#160;</div>\n<div class=\"line\"><a name=\"l00489\"></a><span class=\"lineno\">  489</span>&#160;        <span class=\"comment\">// yzw</span></div>\n<div class=\"line\"><a name=\"l00490\"></a><span class=\"lineno\">  490</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00491\"></a><span class=\"lineno\">  491</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00492\"></a><span class=\"lineno\">  492</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l00493\"></a><span class=\"lineno\">  493</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00494\"></a><span class=\"lineno\">  494</span>&#160;</div>\n<div class=\"line\"><a name=\"l00495\"></a><span class=\"lineno\">  495</span>&#160;        <span class=\"comment\">// ywx</span></div>\n<div class=\"line\"><a name=\"l00496\"></a><span class=\"lineno\">  496</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00497\"></a><span class=\"lineno\">  497</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; ywx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00498\"></a><span class=\"lineno\">  498</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l00499\"></a><span class=\"lineno\">  499</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00500\"></a><span class=\"lineno\">  500</span>&#160;</div>\n<div class=\"line\"><a name=\"l00501\"></a><span class=\"lineno\">  501</span>&#160;        <span class=\"comment\">// ywy</span></div>\n<div class=\"line\"><a name=\"l00502\"></a><span class=\"lineno\">  502</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00503\"></a><span class=\"lineno\">  503</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; ywy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00504\"></a><span class=\"lineno\">  504</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l00505\"></a><span class=\"lineno\">  505</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00506\"></a><span class=\"lineno\">  506</span>&#160;</div>\n<div class=\"line\"><a name=\"l00507\"></a><span class=\"lineno\">  507</span>&#160;        <span class=\"comment\">// ywz</span></div>\n<div class=\"line\"><a name=\"l00508\"></a><span class=\"lineno\">  508</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00509\"></a><span class=\"lineno\">  509</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; ywz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00510\"></a><span class=\"lineno\">  510</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l00511\"></a><span class=\"lineno\">  511</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00512\"></a><span class=\"lineno\">  512</span>&#160;</div>\n<div class=\"line\"><a name=\"l00513\"></a><span class=\"lineno\">  513</span>&#160;        <span class=\"comment\">// yww</span></div>\n<div class=\"line\"><a name=\"l00514\"></a><span class=\"lineno\">  514</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00515\"></a><span class=\"lineno\">  515</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; yww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00516\"></a><span class=\"lineno\">  516</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.y, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l00517\"></a><span class=\"lineno\">  517</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00518\"></a><span class=\"lineno\">  518</span>&#160;</div>\n<div class=\"line\"><a name=\"l00519\"></a><span class=\"lineno\">  519</span>&#160;        <span class=\"comment\">// zxx</span></div>\n<div class=\"line\"><a name=\"l00520\"></a><span class=\"lineno\">  520</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00521\"></a><span class=\"lineno\">  521</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00522\"></a><span class=\"lineno\">  522</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00523\"></a><span class=\"lineno\">  523</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00524\"></a><span class=\"lineno\">  524</span>&#160;</div>\n<div class=\"line\"><a name=\"l00525\"></a><span class=\"lineno\">  525</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00526\"></a><span class=\"lineno\">  526</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00527\"></a><span class=\"lineno\">  527</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00528\"></a><span class=\"lineno\">  528</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00529\"></a><span class=\"lineno\">  529</span>&#160;</div>\n<div class=\"line\"><a name=\"l00530\"></a><span class=\"lineno\">  530</span>&#160;        <span class=\"comment\">// zxy</span></div>\n<div class=\"line\"><a name=\"l00531\"></a><span class=\"lineno\">  531</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00532\"></a><span class=\"lineno\">  532</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00533\"></a><span class=\"lineno\">  533</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00534\"></a><span class=\"lineno\">  534</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00535\"></a><span class=\"lineno\">  535</span>&#160;</div>\n<div class=\"line\"><a name=\"l00536\"></a><span class=\"lineno\">  536</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00537\"></a><span class=\"lineno\">  537</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00538\"></a><span class=\"lineno\">  538</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00539\"></a><span class=\"lineno\">  539</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00540\"></a><span class=\"lineno\">  540</span>&#160;</div>\n<div class=\"line\"><a name=\"l00541\"></a><span class=\"lineno\">  541</span>&#160;        <span class=\"comment\">// zxz</span></div>\n<div class=\"line\"><a name=\"l00542\"></a><span class=\"lineno\">  542</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00543\"></a><span class=\"lineno\">  543</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00544\"></a><span class=\"lineno\">  544</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00545\"></a><span class=\"lineno\">  545</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00546\"></a><span class=\"lineno\">  546</span>&#160;</div>\n<div class=\"line\"><a name=\"l00547\"></a><span class=\"lineno\">  547</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00548\"></a><span class=\"lineno\">  548</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00549\"></a><span class=\"lineno\">  549</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00550\"></a><span class=\"lineno\">  550</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00551\"></a><span class=\"lineno\">  551</span>&#160;</div>\n<div class=\"line\"><a name=\"l00552\"></a><span class=\"lineno\">  552</span>&#160;        <span class=\"comment\">// zxw</span></div>\n<div class=\"line\"><a name=\"l00553\"></a><span class=\"lineno\">  553</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00554\"></a><span class=\"lineno\">  554</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00555\"></a><span class=\"lineno\">  555</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l00556\"></a><span class=\"lineno\">  556</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00557\"></a><span class=\"lineno\">  557</span>&#160;</div>\n<div class=\"line\"><a name=\"l00558\"></a><span class=\"lineno\">  558</span>&#160;        <span class=\"comment\">// zyx</span></div>\n<div class=\"line\"><a name=\"l00559\"></a><span class=\"lineno\">  559</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00560\"></a><span class=\"lineno\">  560</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00561\"></a><span class=\"lineno\">  561</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00562\"></a><span class=\"lineno\">  562</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00563\"></a><span class=\"lineno\">  563</span>&#160;</div>\n<div class=\"line\"><a name=\"l00564\"></a><span class=\"lineno\">  564</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00565\"></a><span class=\"lineno\">  565</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00566\"></a><span class=\"lineno\">  566</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00567\"></a><span class=\"lineno\">  567</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00568\"></a><span class=\"lineno\">  568</span>&#160;</div>\n<div class=\"line\"><a name=\"l00569\"></a><span class=\"lineno\">  569</span>&#160;        <span class=\"comment\">// zyy</span></div>\n<div class=\"line\"><a name=\"l00570\"></a><span class=\"lineno\">  570</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00571\"></a><span class=\"lineno\">  571</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00572\"></a><span class=\"lineno\">  572</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00573\"></a><span class=\"lineno\">  573</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00574\"></a><span class=\"lineno\">  574</span>&#160;</div>\n<div class=\"line\"><a name=\"l00575\"></a><span class=\"lineno\">  575</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00576\"></a><span class=\"lineno\">  576</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00577\"></a><span class=\"lineno\">  577</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00578\"></a><span class=\"lineno\">  578</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00579\"></a><span class=\"lineno\">  579</span>&#160;</div>\n<div class=\"line\"><a name=\"l00580\"></a><span class=\"lineno\">  580</span>&#160;        <span class=\"comment\">// zyz</span></div>\n<div class=\"line\"><a name=\"l00581\"></a><span class=\"lineno\">  581</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00582\"></a><span class=\"lineno\">  582</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00583\"></a><span class=\"lineno\">  583</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00584\"></a><span class=\"lineno\">  584</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00585\"></a><span class=\"lineno\">  585</span>&#160;</div>\n<div class=\"line\"><a name=\"l00586\"></a><span class=\"lineno\">  586</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00587\"></a><span class=\"lineno\">  587</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00588\"></a><span class=\"lineno\">  588</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00589\"></a><span class=\"lineno\">  589</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00590\"></a><span class=\"lineno\">  590</span>&#160;</div>\n<div class=\"line\"><a name=\"l00591\"></a><span class=\"lineno\">  591</span>&#160;        <span class=\"comment\">// zyw</span></div>\n<div class=\"line\"><a name=\"l00592\"></a><span class=\"lineno\">  592</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00593\"></a><span class=\"lineno\">  593</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00594\"></a><span class=\"lineno\">  594</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l00595\"></a><span class=\"lineno\">  595</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00596\"></a><span class=\"lineno\">  596</span>&#160;</div>\n<div class=\"line\"><a name=\"l00597\"></a><span class=\"lineno\">  597</span>&#160;        <span class=\"comment\">// zzx</span></div>\n<div class=\"line\"><a name=\"l00598\"></a><span class=\"lineno\">  598</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00599\"></a><span class=\"lineno\">  599</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00600\"></a><span class=\"lineno\">  600</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00601\"></a><span class=\"lineno\">  601</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00602\"></a><span class=\"lineno\">  602</span>&#160;</div>\n<div class=\"line\"><a name=\"l00603\"></a><span class=\"lineno\">  603</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00604\"></a><span class=\"lineno\">  604</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00605\"></a><span class=\"lineno\">  605</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00606\"></a><span class=\"lineno\">  606</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00607\"></a><span class=\"lineno\">  607</span>&#160;</div>\n<div class=\"line\"><a name=\"l00608\"></a><span class=\"lineno\">  608</span>&#160;        <span class=\"comment\">// zzy</span></div>\n<div class=\"line\"><a name=\"l00609\"></a><span class=\"lineno\">  609</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00610\"></a><span class=\"lineno\">  610</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00611\"></a><span class=\"lineno\">  611</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00612\"></a><span class=\"lineno\">  612</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00613\"></a><span class=\"lineno\">  613</span>&#160;</div>\n<div class=\"line\"><a name=\"l00614\"></a><span class=\"lineno\">  614</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00615\"></a><span class=\"lineno\">  615</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00616\"></a><span class=\"lineno\">  616</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00617\"></a><span class=\"lineno\">  617</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00618\"></a><span class=\"lineno\">  618</span>&#160;</div>\n<div class=\"line\"><a name=\"l00619\"></a><span class=\"lineno\">  619</span>&#160;        <span class=\"comment\">// zzz</span></div>\n<div class=\"line\"><a name=\"l00620\"></a><span class=\"lineno\">  620</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00621\"></a><span class=\"lineno\">  621</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00622\"></a><span class=\"lineno\">  622</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00623\"></a><span class=\"lineno\">  623</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00624\"></a><span class=\"lineno\">  624</span>&#160;</div>\n<div class=\"line\"><a name=\"l00625\"></a><span class=\"lineno\">  625</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00626\"></a><span class=\"lineno\">  626</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00627\"></a><span class=\"lineno\">  627</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00628\"></a><span class=\"lineno\">  628</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00629\"></a><span class=\"lineno\">  629</span>&#160;</div>\n<div class=\"line\"><a name=\"l00630\"></a><span class=\"lineno\">  630</span>&#160;        <span class=\"comment\">// zzw</span></div>\n<div class=\"line\"><a name=\"l00631\"></a><span class=\"lineno\">  631</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00632\"></a><span class=\"lineno\">  632</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00633\"></a><span class=\"lineno\">  633</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l00634\"></a><span class=\"lineno\">  634</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00635\"></a><span class=\"lineno\">  635</span>&#160;</div>\n<div class=\"line\"><a name=\"l00636\"></a><span class=\"lineno\">  636</span>&#160;        <span class=\"comment\">// zwx</span></div>\n<div class=\"line\"><a name=\"l00637\"></a><span class=\"lineno\">  637</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00638\"></a><span class=\"lineno\">  638</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00639\"></a><span class=\"lineno\">  639</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l00640\"></a><span class=\"lineno\">  640</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00641\"></a><span class=\"lineno\">  641</span>&#160;</div>\n<div class=\"line\"><a name=\"l00642\"></a><span class=\"lineno\">  642</span>&#160;        <span class=\"comment\">// zwy</span></div>\n<div class=\"line\"><a name=\"l00643\"></a><span class=\"lineno\">  643</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00644\"></a><span class=\"lineno\">  644</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00645\"></a><span class=\"lineno\">  645</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l00646\"></a><span class=\"lineno\">  646</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00647\"></a><span class=\"lineno\">  647</span>&#160;</div>\n<div class=\"line\"><a name=\"l00648\"></a><span class=\"lineno\">  648</span>&#160;        <span class=\"comment\">// zwz</span></div>\n<div class=\"line\"><a name=\"l00649\"></a><span class=\"lineno\">  649</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00650\"></a><span class=\"lineno\">  650</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00651\"></a><span class=\"lineno\">  651</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l00652\"></a><span class=\"lineno\">  652</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00653\"></a><span class=\"lineno\">  653</span>&#160;</div>\n<div class=\"line\"><a name=\"l00654\"></a><span class=\"lineno\">  654</span>&#160;        <span class=\"comment\">// zww</span></div>\n<div class=\"line\"><a name=\"l00655\"></a><span class=\"lineno\">  655</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00656\"></a><span class=\"lineno\">  656</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; zww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00657\"></a><span class=\"lineno\">  657</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.z, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l00658\"></a><span class=\"lineno\">  658</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00659\"></a><span class=\"lineno\">  659</span>&#160;</div>\n<div class=\"line\"><a name=\"l00660\"></a><span class=\"lineno\">  660</span>&#160;        <span class=\"comment\">// wxx</span></div>\n<div class=\"line\"><a name=\"l00661\"></a><span class=\"lineno\">  661</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00662\"></a><span class=\"lineno\">  662</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00663\"></a><span class=\"lineno\">  663</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00664\"></a><span class=\"lineno\">  664</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00665\"></a><span class=\"lineno\">  665</span>&#160;</div>\n<div class=\"line\"><a name=\"l00666\"></a><span class=\"lineno\">  666</span>&#160;        <span class=\"comment\">// wxy</span></div>\n<div class=\"line\"><a name=\"l00667\"></a><span class=\"lineno\">  667</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00668\"></a><span class=\"lineno\">  668</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00669\"></a><span class=\"lineno\">  669</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00670\"></a><span class=\"lineno\">  670</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00671\"></a><span class=\"lineno\">  671</span>&#160;</div>\n<div class=\"line\"><a name=\"l00672\"></a><span class=\"lineno\">  672</span>&#160;        <span class=\"comment\">// wxz</span></div>\n<div class=\"line\"><a name=\"l00673\"></a><span class=\"lineno\">  673</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00674\"></a><span class=\"lineno\">  674</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00675\"></a><span class=\"lineno\">  675</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00676\"></a><span class=\"lineno\">  676</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00677\"></a><span class=\"lineno\">  677</span>&#160;</div>\n<div class=\"line\"><a name=\"l00678\"></a><span class=\"lineno\">  678</span>&#160;        <span class=\"comment\">// wxw</span></div>\n<div class=\"line\"><a name=\"l00679\"></a><span class=\"lineno\">  679</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00680\"></a><span class=\"lineno\">  680</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00681\"></a><span class=\"lineno\">  681</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l00682\"></a><span class=\"lineno\">  682</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00683\"></a><span class=\"lineno\">  683</span>&#160;</div>\n<div class=\"line\"><a name=\"l00684\"></a><span class=\"lineno\">  684</span>&#160;        <span class=\"comment\">// wyx</span></div>\n<div class=\"line\"><a name=\"l00685\"></a><span class=\"lineno\">  685</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00686\"></a><span class=\"lineno\">  686</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00687\"></a><span class=\"lineno\">  687</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00688\"></a><span class=\"lineno\">  688</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00689\"></a><span class=\"lineno\">  689</span>&#160;</div>\n<div class=\"line\"><a name=\"l00690\"></a><span class=\"lineno\">  690</span>&#160;        <span class=\"comment\">// wyy</span></div>\n<div class=\"line\"><a name=\"l00691\"></a><span class=\"lineno\">  691</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00692\"></a><span class=\"lineno\">  692</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00693\"></a><span class=\"lineno\">  693</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00694\"></a><span class=\"lineno\">  694</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00695\"></a><span class=\"lineno\">  695</span>&#160;</div>\n<div class=\"line\"><a name=\"l00696\"></a><span class=\"lineno\">  696</span>&#160;        <span class=\"comment\">// wyz</span></div>\n<div class=\"line\"><a name=\"l00697\"></a><span class=\"lineno\">  697</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00698\"></a><span class=\"lineno\">  698</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00699\"></a><span class=\"lineno\">  699</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00700\"></a><span class=\"lineno\">  700</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00701\"></a><span class=\"lineno\">  701</span>&#160;</div>\n<div class=\"line\"><a name=\"l00702\"></a><span class=\"lineno\">  702</span>&#160;        <span class=\"comment\">// wyw</span></div>\n<div class=\"line\"><a name=\"l00703\"></a><span class=\"lineno\">  703</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00704\"></a><span class=\"lineno\">  704</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00705\"></a><span class=\"lineno\">  705</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l00706\"></a><span class=\"lineno\">  706</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00707\"></a><span class=\"lineno\">  707</span>&#160;</div>\n<div class=\"line\"><a name=\"l00708\"></a><span class=\"lineno\">  708</span>&#160;        <span class=\"comment\">// wzx</span></div>\n<div class=\"line\"><a name=\"l00709\"></a><span class=\"lineno\">  709</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00710\"></a><span class=\"lineno\">  710</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00711\"></a><span class=\"lineno\">  711</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00712\"></a><span class=\"lineno\">  712</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00713\"></a><span class=\"lineno\">  713</span>&#160;</div>\n<div class=\"line\"><a name=\"l00714\"></a><span class=\"lineno\">  714</span>&#160;        <span class=\"comment\">// wzy</span></div>\n<div class=\"line\"><a name=\"l00715\"></a><span class=\"lineno\">  715</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00716\"></a><span class=\"lineno\">  716</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00717\"></a><span class=\"lineno\">  717</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00718\"></a><span class=\"lineno\">  718</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00719\"></a><span class=\"lineno\">  719</span>&#160;</div>\n<div class=\"line\"><a name=\"l00720\"></a><span class=\"lineno\">  720</span>&#160;        <span class=\"comment\">// wzz</span></div>\n<div class=\"line\"><a name=\"l00721\"></a><span class=\"lineno\">  721</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00722\"></a><span class=\"lineno\">  722</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00723\"></a><span class=\"lineno\">  723</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00724\"></a><span class=\"lineno\">  724</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00725\"></a><span class=\"lineno\">  725</span>&#160;</div>\n<div class=\"line\"><a name=\"l00726\"></a><span class=\"lineno\">  726</span>&#160;        <span class=\"comment\">// wzw</span></div>\n<div class=\"line\"><a name=\"l00727\"></a><span class=\"lineno\">  727</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00728\"></a><span class=\"lineno\">  728</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00729\"></a><span class=\"lineno\">  729</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l00730\"></a><span class=\"lineno\">  730</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00731\"></a><span class=\"lineno\">  731</span>&#160;</div>\n<div class=\"line\"><a name=\"l00732\"></a><span class=\"lineno\">  732</span>&#160;        <span class=\"comment\">// wwx</span></div>\n<div class=\"line\"><a name=\"l00733\"></a><span class=\"lineno\">  733</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00734\"></a><span class=\"lineno\">  734</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00735\"></a><span class=\"lineno\">  735</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l00736\"></a><span class=\"lineno\">  736</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00737\"></a><span class=\"lineno\">  737</span>&#160;</div>\n<div class=\"line\"><a name=\"l00738\"></a><span class=\"lineno\">  738</span>&#160;        <span class=\"comment\">// wwy</span></div>\n<div class=\"line\"><a name=\"l00739\"></a><span class=\"lineno\">  739</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00740\"></a><span class=\"lineno\">  740</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00741\"></a><span class=\"lineno\">  741</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l00742\"></a><span class=\"lineno\">  742</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00743\"></a><span class=\"lineno\">  743</span>&#160;</div>\n<div class=\"line\"><a name=\"l00744\"></a><span class=\"lineno\">  744</span>&#160;        <span class=\"comment\">// wwz</span></div>\n<div class=\"line\"><a name=\"l00745\"></a><span class=\"lineno\">  745</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00746\"></a><span class=\"lineno\">  746</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; wwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00747\"></a><span class=\"lineno\">  747</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l00748\"></a><span class=\"lineno\">  748</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00749\"></a><span class=\"lineno\">  749</span>&#160;</div>\n<div class=\"line\"><a name=\"l00750\"></a><span class=\"lineno\">  750</span>&#160;        <span class=\"comment\">// www</span></div>\n<div class=\"line\"><a name=\"l00751\"></a><span class=\"lineno\">  751</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00752\"></a><span class=\"lineno\">  752</span>&#160;        GLM_INLINE glm::vec&lt;3, T, Q&gt; www(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00753\"></a><span class=\"lineno\">  753</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;3, T, Q&gt;(v.w, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l00754\"></a><span class=\"lineno\">  754</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00755\"></a><span class=\"lineno\">  755</span>&#160;</div>\n<div class=\"line\"><a name=\"l00756\"></a><span class=\"lineno\">  756</span>&#160;        <span class=\"comment\">// xxxx</span></div>\n<div class=\"line\"><a name=\"l00757\"></a><span class=\"lineno\">  757</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00758\"></a><span class=\"lineno\">  758</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxx(<span class=\"keyword\">const</span> glm::vec&lt;1, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00759\"></a><span class=\"lineno\">  759</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00760\"></a><span class=\"lineno\">  760</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00761\"></a><span class=\"lineno\">  761</span>&#160;</div>\n<div class=\"line\"><a name=\"l00762\"></a><span class=\"lineno\">  762</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00763\"></a><span class=\"lineno\">  763</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00764\"></a><span class=\"lineno\">  764</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00765\"></a><span class=\"lineno\">  765</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00766\"></a><span class=\"lineno\">  766</span>&#160;</div>\n<div class=\"line\"><a name=\"l00767\"></a><span class=\"lineno\">  767</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00768\"></a><span class=\"lineno\">  768</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00769\"></a><span class=\"lineno\">  769</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00770\"></a><span class=\"lineno\">  770</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00771\"></a><span class=\"lineno\">  771</span>&#160;</div>\n<div class=\"line\"><a name=\"l00772\"></a><span class=\"lineno\">  772</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00773\"></a><span class=\"lineno\">  773</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00774\"></a><span class=\"lineno\">  774</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00775\"></a><span class=\"lineno\">  775</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00776\"></a><span class=\"lineno\">  776</span>&#160;</div>\n<div class=\"line\"><a name=\"l00777\"></a><span class=\"lineno\">  777</span>&#160;        <span class=\"comment\">// xxxy</span></div>\n<div class=\"line\"><a name=\"l00778\"></a><span class=\"lineno\">  778</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00779\"></a><span class=\"lineno\">  779</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00780\"></a><span class=\"lineno\">  780</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00781\"></a><span class=\"lineno\">  781</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00782\"></a><span class=\"lineno\">  782</span>&#160;</div>\n<div class=\"line\"><a name=\"l00783\"></a><span class=\"lineno\">  783</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00784\"></a><span class=\"lineno\">  784</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00785\"></a><span class=\"lineno\">  785</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00786\"></a><span class=\"lineno\">  786</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00787\"></a><span class=\"lineno\">  787</span>&#160;</div>\n<div class=\"line\"><a name=\"l00788\"></a><span class=\"lineno\">  788</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00789\"></a><span class=\"lineno\">  789</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00790\"></a><span class=\"lineno\">  790</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00791\"></a><span class=\"lineno\">  791</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00792\"></a><span class=\"lineno\">  792</span>&#160;</div>\n<div class=\"line\"><a name=\"l00793\"></a><span class=\"lineno\">  793</span>&#160;        <span class=\"comment\">// xxxz</span></div>\n<div class=\"line\"><a name=\"l00794\"></a><span class=\"lineno\">  794</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00795\"></a><span class=\"lineno\">  795</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00796\"></a><span class=\"lineno\">  796</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00797\"></a><span class=\"lineno\">  797</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00798\"></a><span class=\"lineno\">  798</span>&#160;</div>\n<div class=\"line\"><a name=\"l00799\"></a><span class=\"lineno\">  799</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00800\"></a><span class=\"lineno\">  800</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00801\"></a><span class=\"lineno\">  801</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00802\"></a><span class=\"lineno\">  802</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00803\"></a><span class=\"lineno\">  803</span>&#160;</div>\n<div class=\"line\"><a name=\"l00804\"></a><span class=\"lineno\">  804</span>&#160;        <span class=\"comment\">// xxxw</span></div>\n<div class=\"line\"><a name=\"l00805\"></a><span class=\"lineno\">  805</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00806\"></a><span class=\"lineno\">  806</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00807\"></a><span class=\"lineno\">  807</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l00808\"></a><span class=\"lineno\">  808</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00809\"></a><span class=\"lineno\">  809</span>&#160;</div>\n<div class=\"line\"><a name=\"l00810\"></a><span class=\"lineno\">  810</span>&#160;        <span class=\"comment\">// xxyx</span></div>\n<div class=\"line\"><a name=\"l00811\"></a><span class=\"lineno\">  811</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00812\"></a><span class=\"lineno\">  812</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00813\"></a><span class=\"lineno\">  813</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00814\"></a><span class=\"lineno\">  814</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00815\"></a><span class=\"lineno\">  815</span>&#160;</div>\n<div class=\"line\"><a name=\"l00816\"></a><span class=\"lineno\">  816</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00817\"></a><span class=\"lineno\">  817</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00818\"></a><span class=\"lineno\">  818</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00819\"></a><span class=\"lineno\">  819</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00820\"></a><span class=\"lineno\">  820</span>&#160;</div>\n<div class=\"line\"><a name=\"l00821\"></a><span class=\"lineno\">  821</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00822\"></a><span class=\"lineno\">  822</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00823\"></a><span class=\"lineno\">  823</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00824\"></a><span class=\"lineno\">  824</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00825\"></a><span class=\"lineno\">  825</span>&#160;</div>\n<div class=\"line\"><a name=\"l00826\"></a><span class=\"lineno\">  826</span>&#160;        <span class=\"comment\">// xxyy</span></div>\n<div class=\"line\"><a name=\"l00827\"></a><span class=\"lineno\">  827</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00828\"></a><span class=\"lineno\">  828</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00829\"></a><span class=\"lineno\">  829</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00830\"></a><span class=\"lineno\">  830</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00831\"></a><span class=\"lineno\">  831</span>&#160;</div>\n<div class=\"line\"><a name=\"l00832\"></a><span class=\"lineno\">  832</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00833\"></a><span class=\"lineno\">  833</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00834\"></a><span class=\"lineno\">  834</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00835\"></a><span class=\"lineno\">  835</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00836\"></a><span class=\"lineno\">  836</span>&#160;</div>\n<div class=\"line\"><a name=\"l00837\"></a><span class=\"lineno\">  837</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00838\"></a><span class=\"lineno\">  838</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00839\"></a><span class=\"lineno\">  839</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00840\"></a><span class=\"lineno\">  840</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00841\"></a><span class=\"lineno\">  841</span>&#160;</div>\n<div class=\"line\"><a name=\"l00842\"></a><span class=\"lineno\">  842</span>&#160;        <span class=\"comment\">// xxyz</span></div>\n<div class=\"line\"><a name=\"l00843\"></a><span class=\"lineno\">  843</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00844\"></a><span class=\"lineno\">  844</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00845\"></a><span class=\"lineno\">  845</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00846\"></a><span class=\"lineno\">  846</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00847\"></a><span class=\"lineno\">  847</span>&#160;</div>\n<div class=\"line\"><a name=\"l00848\"></a><span class=\"lineno\">  848</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00849\"></a><span class=\"lineno\">  849</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00850\"></a><span class=\"lineno\">  850</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l00851\"></a><span class=\"lineno\">  851</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00852\"></a><span class=\"lineno\">  852</span>&#160;</div>\n<div class=\"line\"><a name=\"l00853\"></a><span class=\"lineno\">  853</span>&#160;        <span class=\"comment\">// xxyw</span></div>\n<div class=\"line\"><a name=\"l00854\"></a><span class=\"lineno\">  854</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00855\"></a><span class=\"lineno\">  855</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00856\"></a><span class=\"lineno\">  856</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l00857\"></a><span class=\"lineno\">  857</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00858\"></a><span class=\"lineno\">  858</span>&#160;</div>\n<div class=\"line\"><a name=\"l00859\"></a><span class=\"lineno\">  859</span>&#160;        <span class=\"comment\">// xxzx</span></div>\n<div class=\"line\"><a name=\"l00860\"></a><span class=\"lineno\">  860</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00861\"></a><span class=\"lineno\">  861</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00862\"></a><span class=\"lineno\">  862</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00863\"></a><span class=\"lineno\">  863</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00864\"></a><span class=\"lineno\">  864</span>&#160;</div>\n<div class=\"line\"><a name=\"l00865\"></a><span class=\"lineno\">  865</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00866\"></a><span class=\"lineno\">  866</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00867\"></a><span class=\"lineno\">  867</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l00868\"></a><span class=\"lineno\">  868</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00869\"></a><span class=\"lineno\">  869</span>&#160;</div>\n<div class=\"line\"><a name=\"l00870\"></a><span class=\"lineno\">  870</span>&#160;        <span class=\"comment\">// xxzy</span></div>\n<div class=\"line\"><a name=\"l00871\"></a><span class=\"lineno\">  871</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00872\"></a><span class=\"lineno\">  872</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00873\"></a><span class=\"lineno\">  873</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00874\"></a><span class=\"lineno\">  874</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00875\"></a><span class=\"lineno\">  875</span>&#160;</div>\n<div class=\"line\"><a name=\"l00876\"></a><span class=\"lineno\">  876</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00877\"></a><span class=\"lineno\">  877</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00878\"></a><span class=\"lineno\">  878</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l00879\"></a><span class=\"lineno\">  879</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00880\"></a><span class=\"lineno\">  880</span>&#160;</div>\n<div class=\"line\"><a name=\"l00881\"></a><span class=\"lineno\">  881</span>&#160;        <span class=\"comment\">// xxzz</span></div>\n<div class=\"line\"><a name=\"l00882\"></a><span class=\"lineno\">  882</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00883\"></a><span class=\"lineno\">  883</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00884\"></a><span class=\"lineno\">  884</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00885\"></a><span class=\"lineno\">  885</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00886\"></a><span class=\"lineno\">  886</span>&#160;</div>\n<div class=\"line\"><a name=\"l00887\"></a><span class=\"lineno\">  887</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00888\"></a><span class=\"lineno\">  888</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00889\"></a><span class=\"lineno\">  889</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l00890\"></a><span class=\"lineno\">  890</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00891\"></a><span class=\"lineno\">  891</span>&#160;</div>\n<div class=\"line\"><a name=\"l00892\"></a><span class=\"lineno\">  892</span>&#160;        <span class=\"comment\">// xxzw</span></div>\n<div class=\"line\"><a name=\"l00893\"></a><span class=\"lineno\">  893</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00894\"></a><span class=\"lineno\">  894</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00895\"></a><span class=\"lineno\">  895</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l00896\"></a><span class=\"lineno\">  896</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00897\"></a><span class=\"lineno\">  897</span>&#160;</div>\n<div class=\"line\"><a name=\"l00898\"></a><span class=\"lineno\">  898</span>&#160;        <span class=\"comment\">// xxwx</span></div>\n<div class=\"line\"><a name=\"l00899\"></a><span class=\"lineno\">  899</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00900\"></a><span class=\"lineno\">  900</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00901\"></a><span class=\"lineno\">  901</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l00902\"></a><span class=\"lineno\">  902</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00903\"></a><span class=\"lineno\">  903</span>&#160;</div>\n<div class=\"line\"><a name=\"l00904\"></a><span class=\"lineno\">  904</span>&#160;        <span class=\"comment\">// xxwy</span></div>\n<div class=\"line\"><a name=\"l00905\"></a><span class=\"lineno\">  905</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00906\"></a><span class=\"lineno\">  906</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00907\"></a><span class=\"lineno\">  907</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l00908\"></a><span class=\"lineno\">  908</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00909\"></a><span class=\"lineno\">  909</span>&#160;</div>\n<div class=\"line\"><a name=\"l00910\"></a><span class=\"lineno\">  910</span>&#160;        <span class=\"comment\">// xxwz</span></div>\n<div class=\"line\"><a name=\"l00911\"></a><span class=\"lineno\">  911</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00912\"></a><span class=\"lineno\">  912</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00913\"></a><span class=\"lineno\">  913</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l00914\"></a><span class=\"lineno\">  914</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00915\"></a><span class=\"lineno\">  915</span>&#160;</div>\n<div class=\"line\"><a name=\"l00916\"></a><span class=\"lineno\">  916</span>&#160;        <span class=\"comment\">// xxww</span></div>\n<div class=\"line\"><a name=\"l00917\"></a><span class=\"lineno\">  917</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00918\"></a><span class=\"lineno\">  918</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xxww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00919\"></a><span class=\"lineno\">  919</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.x, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l00920\"></a><span class=\"lineno\">  920</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00921\"></a><span class=\"lineno\">  921</span>&#160;</div>\n<div class=\"line\"><a name=\"l00922\"></a><span class=\"lineno\">  922</span>&#160;        <span class=\"comment\">// xyxx</span></div>\n<div class=\"line\"><a name=\"l00923\"></a><span class=\"lineno\">  923</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00924\"></a><span class=\"lineno\">  924</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00925\"></a><span class=\"lineno\">  925</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00926\"></a><span class=\"lineno\">  926</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00927\"></a><span class=\"lineno\">  927</span>&#160;</div>\n<div class=\"line\"><a name=\"l00928\"></a><span class=\"lineno\">  928</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00929\"></a><span class=\"lineno\">  929</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00930\"></a><span class=\"lineno\">  930</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00931\"></a><span class=\"lineno\">  931</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00932\"></a><span class=\"lineno\">  932</span>&#160;</div>\n<div class=\"line\"><a name=\"l00933\"></a><span class=\"lineno\">  933</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00934\"></a><span class=\"lineno\">  934</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00935\"></a><span class=\"lineno\">  935</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l00936\"></a><span class=\"lineno\">  936</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00937\"></a><span class=\"lineno\">  937</span>&#160;</div>\n<div class=\"line\"><a name=\"l00938\"></a><span class=\"lineno\">  938</span>&#160;        <span class=\"comment\">// xyxy</span></div>\n<div class=\"line\"><a name=\"l00939\"></a><span class=\"lineno\">  939</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00940\"></a><span class=\"lineno\">  940</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00941\"></a><span class=\"lineno\">  941</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00942\"></a><span class=\"lineno\">  942</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00943\"></a><span class=\"lineno\">  943</span>&#160;</div>\n<div class=\"line\"><a name=\"l00944\"></a><span class=\"lineno\">  944</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00945\"></a><span class=\"lineno\">  945</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00946\"></a><span class=\"lineno\">  946</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00947\"></a><span class=\"lineno\">  947</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00948\"></a><span class=\"lineno\">  948</span>&#160;</div>\n<div class=\"line\"><a name=\"l00949\"></a><span class=\"lineno\">  949</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00950\"></a><span class=\"lineno\">  950</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00951\"></a><span class=\"lineno\">  951</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l00952\"></a><span class=\"lineno\">  952</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00953\"></a><span class=\"lineno\">  953</span>&#160;</div>\n<div class=\"line\"><a name=\"l00954\"></a><span class=\"lineno\">  954</span>&#160;        <span class=\"comment\">// xyxz</span></div>\n<div class=\"line\"><a name=\"l00955\"></a><span class=\"lineno\">  955</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00956\"></a><span class=\"lineno\">  956</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00957\"></a><span class=\"lineno\">  957</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00958\"></a><span class=\"lineno\">  958</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00959\"></a><span class=\"lineno\">  959</span>&#160;</div>\n<div class=\"line\"><a name=\"l00960\"></a><span class=\"lineno\">  960</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00961\"></a><span class=\"lineno\">  961</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00962\"></a><span class=\"lineno\">  962</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l00963\"></a><span class=\"lineno\">  963</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00964\"></a><span class=\"lineno\">  964</span>&#160;</div>\n<div class=\"line\"><a name=\"l00965\"></a><span class=\"lineno\">  965</span>&#160;        <span class=\"comment\">// xyxw</span></div>\n<div class=\"line\"><a name=\"l00966\"></a><span class=\"lineno\">  966</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00967\"></a><span class=\"lineno\">  967</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00968\"></a><span class=\"lineno\">  968</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l00969\"></a><span class=\"lineno\">  969</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00970\"></a><span class=\"lineno\">  970</span>&#160;</div>\n<div class=\"line\"><a name=\"l00971\"></a><span class=\"lineno\">  971</span>&#160;        <span class=\"comment\">// xyyx</span></div>\n<div class=\"line\"><a name=\"l00972\"></a><span class=\"lineno\">  972</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00973\"></a><span class=\"lineno\">  973</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00974\"></a><span class=\"lineno\">  974</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00975\"></a><span class=\"lineno\">  975</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00976\"></a><span class=\"lineno\">  976</span>&#160;</div>\n<div class=\"line\"><a name=\"l00977\"></a><span class=\"lineno\">  977</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00978\"></a><span class=\"lineno\">  978</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00979\"></a><span class=\"lineno\">  979</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00980\"></a><span class=\"lineno\">  980</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00981\"></a><span class=\"lineno\">  981</span>&#160;</div>\n<div class=\"line\"><a name=\"l00982\"></a><span class=\"lineno\">  982</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00983\"></a><span class=\"lineno\">  983</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00984\"></a><span class=\"lineno\">  984</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l00985\"></a><span class=\"lineno\">  985</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00986\"></a><span class=\"lineno\">  986</span>&#160;</div>\n<div class=\"line\"><a name=\"l00987\"></a><span class=\"lineno\">  987</span>&#160;        <span class=\"comment\">// xyyy</span></div>\n<div class=\"line\"><a name=\"l00988\"></a><span class=\"lineno\">  988</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00989\"></a><span class=\"lineno\">  989</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00990\"></a><span class=\"lineno\">  990</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00991\"></a><span class=\"lineno\">  991</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00992\"></a><span class=\"lineno\">  992</span>&#160;</div>\n<div class=\"line\"><a name=\"l00993\"></a><span class=\"lineno\">  993</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00994\"></a><span class=\"lineno\">  994</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l00995\"></a><span class=\"lineno\">  995</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l00996\"></a><span class=\"lineno\">  996</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l00997\"></a><span class=\"lineno\">  997</span>&#160;</div>\n<div class=\"line\"><a name=\"l00998\"></a><span class=\"lineno\">  998</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00999\"></a><span class=\"lineno\">  999</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01000\"></a><span class=\"lineno\"> 1000</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01001\"></a><span class=\"lineno\"> 1001</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01002\"></a><span class=\"lineno\"> 1002</span>&#160;</div>\n<div class=\"line\"><a name=\"l01003\"></a><span class=\"lineno\"> 1003</span>&#160;        <span class=\"comment\">// xyyz</span></div>\n<div class=\"line\"><a name=\"l01004\"></a><span class=\"lineno\"> 1004</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01005\"></a><span class=\"lineno\"> 1005</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01006\"></a><span class=\"lineno\"> 1006</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01007\"></a><span class=\"lineno\"> 1007</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01008\"></a><span class=\"lineno\"> 1008</span>&#160;</div>\n<div class=\"line\"><a name=\"l01009\"></a><span class=\"lineno\"> 1009</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01010\"></a><span class=\"lineno\"> 1010</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01011\"></a><span class=\"lineno\"> 1011</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01012\"></a><span class=\"lineno\"> 1012</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01013\"></a><span class=\"lineno\"> 1013</span>&#160;</div>\n<div class=\"line\"><a name=\"l01014\"></a><span class=\"lineno\"> 1014</span>&#160;        <span class=\"comment\">// xyyw</span></div>\n<div class=\"line\"><a name=\"l01015\"></a><span class=\"lineno\"> 1015</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01016\"></a><span class=\"lineno\"> 1016</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01017\"></a><span class=\"lineno\"> 1017</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l01018\"></a><span class=\"lineno\"> 1018</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01019\"></a><span class=\"lineno\"> 1019</span>&#160;</div>\n<div class=\"line\"><a name=\"l01020\"></a><span class=\"lineno\"> 1020</span>&#160;        <span class=\"comment\">// xyzx</span></div>\n<div class=\"line\"><a name=\"l01021\"></a><span class=\"lineno\"> 1021</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01022\"></a><span class=\"lineno\"> 1022</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01023\"></a><span class=\"lineno\"> 1023</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01024\"></a><span class=\"lineno\"> 1024</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01025\"></a><span class=\"lineno\"> 1025</span>&#160;</div>\n<div class=\"line\"><a name=\"l01026\"></a><span class=\"lineno\"> 1026</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01027\"></a><span class=\"lineno\"> 1027</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01028\"></a><span class=\"lineno\"> 1028</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01029\"></a><span class=\"lineno\"> 1029</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01030\"></a><span class=\"lineno\"> 1030</span>&#160;</div>\n<div class=\"line\"><a name=\"l01031\"></a><span class=\"lineno\"> 1031</span>&#160;        <span class=\"comment\">// xyzy</span></div>\n<div class=\"line\"><a name=\"l01032\"></a><span class=\"lineno\"> 1032</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01033\"></a><span class=\"lineno\"> 1033</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01034\"></a><span class=\"lineno\"> 1034</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01035\"></a><span class=\"lineno\"> 1035</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01036\"></a><span class=\"lineno\"> 1036</span>&#160;</div>\n<div class=\"line\"><a name=\"l01037\"></a><span class=\"lineno\"> 1037</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01038\"></a><span class=\"lineno\"> 1038</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01039\"></a><span class=\"lineno\"> 1039</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01040\"></a><span class=\"lineno\"> 1040</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01041\"></a><span class=\"lineno\"> 1041</span>&#160;</div>\n<div class=\"line\"><a name=\"l01042\"></a><span class=\"lineno\"> 1042</span>&#160;        <span class=\"comment\">// xyzz</span></div>\n<div class=\"line\"><a name=\"l01043\"></a><span class=\"lineno\"> 1043</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01044\"></a><span class=\"lineno\"> 1044</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01045\"></a><span class=\"lineno\"> 1045</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01046\"></a><span class=\"lineno\"> 1046</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01047\"></a><span class=\"lineno\"> 1047</span>&#160;</div>\n<div class=\"line\"><a name=\"l01048\"></a><span class=\"lineno\"> 1048</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01049\"></a><span class=\"lineno\"> 1049</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01050\"></a><span class=\"lineno\"> 1050</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01051\"></a><span class=\"lineno\"> 1051</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01052\"></a><span class=\"lineno\"> 1052</span>&#160;</div>\n<div class=\"line\"><a name=\"l01053\"></a><span class=\"lineno\"> 1053</span>&#160;        <span class=\"comment\">// xyzw</span></div>\n<div class=\"line\"><a name=\"l01054\"></a><span class=\"lineno\"> 1054</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01055\"></a><span class=\"lineno\"> 1055</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01056\"></a><span class=\"lineno\"> 1056</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l01057\"></a><span class=\"lineno\"> 1057</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01058\"></a><span class=\"lineno\"> 1058</span>&#160;</div>\n<div class=\"line\"><a name=\"l01059\"></a><span class=\"lineno\"> 1059</span>&#160;        <span class=\"comment\">// xywx</span></div>\n<div class=\"line\"><a name=\"l01060\"></a><span class=\"lineno\"> 1060</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01061\"></a><span class=\"lineno\"> 1061</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xywx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01062\"></a><span class=\"lineno\"> 1062</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l01063\"></a><span class=\"lineno\"> 1063</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01064\"></a><span class=\"lineno\"> 1064</span>&#160;</div>\n<div class=\"line\"><a name=\"l01065\"></a><span class=\"lineno\"> 1065</span>&#160;        <span class=\"comment\">// xywy</span></div>\n<div class=\"line\"><a name=\"l01066\"></a><span class=\"lineno\"> 1066</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01067\"></a><span class=\"lineno\"> 1067</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xywy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01068\"></a><span class=\"lineno\"> 1068</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l01069\"></a><span class=\"lineno\"> 1069</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01070\"></a><span class=\"lineno\"> 1070</span>&#160;</div>\n<div class=\"line\"><a name=\"l01071\"></a><span class=\"lineno\"> 1071</span>&#160;        <span class=\"comment\">// xywz</span></div>\n<div class=\"line\"><a name=\"l01072\"></a><span class=\"lineno\"> 1072</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01073\"></a><span class=\"lineno\"> 1073</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xywz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01074\"></a><span class=\"lineno\"> 1074</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l01075\"></a><span class=\"lineno\"> 1075</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01076\"></a><span class=\"lineno\"> 1076</span>&#160;</div>\n<div class=\"line\"><a name=\"l01077\"></a><span class=\"lineno\"> 1077</span>&#160;        <span class=\"comment\">// xyww</span></div>\n<div class=\"line\"><a name=\"l01078\"></a><span class=\"lineno\"> 1078</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01079\"></a><span class=\"lineno\"> 1079</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xyww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01080\"></a><span class=\"lineno\"> 1080</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.y, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l01081\"></a><span class=\"lineno\"> 1081</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01082\"></a><span class=\"lineno\"> 1082</span>&#160;</div>\n<div class=\"line\"><a name=\"l01083\"></a><span class=\"lineno\"> 1083</span>&#160;        <span class=\"comment\">// xzxx</span></div>\n<div class=\"line\"><a name=\"l01084\"></a><span class=\"lineno\"> 1084</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01085\"></a><span class=\"lineno\"> 1085</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01086\"></a><span class=\"lineno\"> 1086</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01087\"></a><span class=\"lineno\"> 1087</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01088\"></a><span class=\"lineno\"> 1088</span>&#160;</div>\n<div class=\"line\"><a name=\"l01089\"></a><span class=\"lineno\"> 1089</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01090\"></a><span class=\"lineno\"> 1090</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01091\"></a><span class=\"lineno\"> 1091</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01092\"></a><span class=\"lineno\"> 1092</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01093\"></a><span class=\"lineno\"> 1093</span>&#160;</div>\n<div class=\"line\"><a name=\"l01094\"></a><span class=\"lineno\"> 1094</span>&#160;        <span class=\"comment\">// xzxy</span></div>\n<div class=\"line\"><a name=\"l01095\"></a><span class=\"lineno\"> 1095</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01096\"></a><span class=\"lineno\"> 1096</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01097\"></a><span class=\"lineno\"> 1097</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01098\"></a><span class=\"lineno\"> 1098</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01099\"></a><span class=\"lineno\"> 1099</span>&#160;</div>\n<div class=\"line\"><a name=\"l01100\"></a><span class=\"lineno\"> 1100</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01101\"></a><span class=\"lineno\"> 1101</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01102\"></a><span class=\"lineno\"> 1102</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01103\"></a><span class=\"lineno\"> 1103</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01104\"></a><span class=\"lineno\"> 1104</span>&#160;</div>\n<div class=\"line\"><a name=\"l01105\"></a><span class=\"lineno\"> 1105</span>&#160;        <span class=\"comment\">// xzxz</span></div>\n<div class=\"line\"><a name=\"l01106\"></a><span class=\"lineno\"> 1106</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01107\"></a><span class=\"lineno\"> 1107</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01108\"></a><span class=\"lineno\"> 1108</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01109\"></a><span class=\"lineno\"> 1109</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01110\"></a><span class=\"lineno\"> 1110</span>&#160;</div>\n<div class=\"line\"><a name=\"l01111\"></a><span class=\"lineno\"> 1111</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01112\"></a><span class=\"lineno\"> 1112</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01113\"></a><span class=\"lineno\"> 1113</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01114\"></a><span class=\"lineno\"> 1114</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01115\"></a><span class=\"lineno\"> 1115</span>&#160;</div>\n<div class=\"line\"><a name=\"l01116\"></a><span class=\"lineno\"> 1116</span>&#160;        <span class=\"comment\">// xzxw</span></div>\n<div class=\"line\"><a name=\"l01117\"></a><span class=\"lineno\"> 1117</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01118\"></a><span class=\"lineno\"> 1118</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01119\"></a><span class=\"lineno\"> 1119</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l01120\"></a><span class=\"lineno\"> 1120</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01121\"></a><span class=\"lineno\"> 1121</span>&#160;</div>\n<div class=\"line\"><a name=\"l01122\"></a><span class=\"lineno\"> 1122</span>&#160;        <span class=\"comment\">// xzyx</span></div>\n<div class=\"line\"><a name=\"l01123\"></a><span class=\"lineno\"> 1123</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01124\"></a><span class=\"lineno\"> 1124</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01125\"></a><span class=\"lineno\"> 1125</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01126\"></a><span class=\"lineno\"> 1126</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01127\"></a><span class=\"lineno\"> 1127</span>&#160;</div>\n<div class=\"line\"><a name=\"l01128\"></a><span class=\"lineno\"> 1128</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01129\"></a><span class=\"lineno\"> 1129</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01130\"></a><span class=\"lineno\"> 1130</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01131\"></a><span class=\"lineno\"> 1131</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01132\"></a><span class=\"lineno\"> 1132</span>&#160;</div>\n<div class=\"line\"><a name=\"l01133\"></a><span class=\"lineno\"> 1133</span>&#160;        <span class=\"comment\">// xzyy</span></div>\n<div class=\"line\"><a name=\"l01134\"></a><span class=\"lineno\"> 1134</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01135\"></a><span class=\"lineno\"> 1135</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01136\"></a><span class=\"lineno\"> 1136</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01137\"></a><span class=\"lineno\"> 1137</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01138\"></a><span class=\"lineno\"> 1138</span>&#160;</div>\n<div class=\"line\"><a name=\"l01139\"></a><span class=\"lineno\"> 1139</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01140\"></a><span class=\"lineno\"> 1140</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01141\"></a><span class=\"lineno\"> 1141</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01142\"></a><span class=\"lineno\"> 1142</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01143\"></a><span class=\"lineno\"> 1143</span>&#160;</div>\n<div class=\"line\"><a name=\"l01144\"></a><span class=\"lineno\"> 1144</span>&#160;        <span class=\"comment\">// xzyz</span></div>\n<div class=\"line\"><a name=\"l01145\"></a><span class=\"lineno\"> 1145</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01146\"></a><span class=\"lineno\"> 1146</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01147\"></a><span class=\"lineno\"> 1147</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01148\"></a><span class=\"lineno\"> 1148</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01149\"></a><span class=\"lineno\"> 1149</span>&#160;</div>\n<div class=\"line\"><a name=\"l01150\"></a><span class=\"lineno\"> 1150</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01151\"></a><span class=\"lineno\"> 1151</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01152\"></a><span class=\"lineno\"> 1152</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01153\"></a><span class=\"lineno\"> 1153</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01154\"></a><span class=\"lineno\"> 1154</span>&#160;</div>\n<div class=\"line\"><a name=\"l01155\"></a><span class=\"lineno\"> 1155</span>&#160;        <span class=\"comment\">// xzyw</span></div>\n<div class=\"line\"><a name=\"l01156\"></a><span class=\"lineno\"> 1156</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01157\"></a><span class=\"lineno\"> 1157</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01158\"></a><span class=\"lineno\"> 1158</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l01159\"></a><span class=\"lineno\"> 1159</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01160\"></a><span class=\"lineno\"> 1160</span>&#160;</div>\n<div class=\"line\"><a name=\"l01161\"></a><span class=\"lineno\"> 1161</span>&#160;        <span class=\"comment\">// xzzx</span></div>\n<div class=\"line\"><a name=\"l01162\"></a><span class=\"lineno\"> 1162</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01163\"></a><span class=\"lineno\"> 1163</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01164\"></a><span class=\"lineno\"> 1164</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01165\"></a><span class=\"lineno\"> 1165</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01166\"></a><span class=\"lineno\"> 1166</span>&#160;</div>\n<div class=\"line\"><a name=\"l01167\"></a><span class=\"lineno\"> 1167</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01168\"></a><span class=\"lineno\"> 1168</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01169\"></a><span class=\"lineno\"> 1169</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01170\"></a><span class=\"lineno\"> 1170</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01171\"></a><span class=\"lineno\"> 1171</span>&#160;</div>\n<div class=\"line\"><a name=\"l01172\"></a><span class=\"lineno\"> 1172</span>&#160;        <span class=\"comment\">// xzzy</span></div>\n<div class=\"line\"><a name=\"l01173\"></a><span class=\"lineno\"> 1173</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01174\"></a><span class=\"lineno\"> 1174</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01175\"></a><span class=\"lineno\"> 1175</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01176\"></a><span class=\"lineno\"> 1176</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01177\"></a><span class=\"lineno\"> 1177</span>&#160;</div>\n<div class=\"line\"><a name=\"l01178\"></a><span class=\"lineno\"> 1178</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01179\"></a><span class=\"lineno\"> 1179</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01180\"></a><span class=\"lineno\"> 1180</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01181\"></a><span class=\"lineno\"> 1181</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01182\"></a><span class=\"lineno\"> 1182</span>&#160;</div>\n<div class=\"line\"><a name=\"l01183\"></a><span class=\"lineno\"> 1183</span>&#160;        <span class=\"comment\">// xzzz</span></div>\n<div class=\"line\"><a name=\"l01184\"></a><span class=\"lineno\"> 1184</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01185\"></a><span class=\"lineno\"> 1185</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01186\"></a><span class=\"lineno\"> 1186</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01187\"></a><span class=\"lineno\"> 1187</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01188\"></a><span class=\"lineno\"> 1188</span>&#160;</div>\n<div class=\"line\"><a name=\"l01189\"></a><span class=\"lineno\"> 1189</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01190\"></a><span class=\"lineno\"> 1190</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01191\"></a><span class=\"lineno\"> 1191</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01192\"></a><span class=\"lineno\"> 1192</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01193\"></a><span class=\"lineno\"> 1193</span>&#160;</div>\n<div class=\"line\"><a name=\"l01194\"></a><span class=\"lineno\"> 1194</span>&#160;        <span class=\"comment\">// xzzw</span></div>\n<div class=\"line\"><a name=\"l01195\"></a><span class=\"lineno\"> 1195</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01196\"></a><span class=\"lineno\"> 1196</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01197\"></a><span class=\"lineno\"> 1197</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l01198\"></a><span class=\"lineno\"> 1198</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01199\"></a><span class=\"lineno\"> 1199</span>&#160;</div>\n<div class=\"line\"><a name=\"l01200\"></a><span class=\"lineno\"> 1200</span>&#160;        <span class=\"comment\">// xzwx</span></div>\n<div class=\"line\"><a name=\"l01201\"></a><span class=\"lineno\"> 1201</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01202\"></a><span class=\"lineno\"> 1202</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01203\"></a><span class=\"lineno\"> 1203</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l01204\"></a><span class=\"lineno\"> 1204</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01205\"></a><span class=\"lineno\"> 1205</span>&#160;</div>\n<div class=\"line\"><a name=\"l01206\"></a><span class=\"lineno\"> 1206</span>&#160;        <span class=\"comment\">// xzwy</span></div>\n<div class=\"line\"><a name=\"l01207\"></a><span class=\"lineno\"> 1207</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01208\"></a><span class=\"lineno\"> 1208</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01209\"></a><span class=\"lineno\"> 1209</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l01210\"></a><span class=\"lineno\"> 1210</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01211\"></a><span class=\"lineno\"> 1211</span>&#160;</div>\n<div class=\"line\"><a name=\"l01212\"></a><span class=\"lineno\"> 1212</span>&#160;        <span class=\"comment\">// xzwz</span></div>\n<div class=\"line\"><a name=\"l01213\"></a><span class=\"lineno\"> 1213</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01214\"></a><span class=\"lineno\"> 1214</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01215\"></a><span class=\"lineno\"> 1215</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l01216\"></a><span class=\"lineno\"> 1216</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01217\"></a><span class=\"lineno\"> 1217</span>&#160;</div>\n<div class=\"line\"><a name=\"l01218\"></a><span class=\"lineno\"> 1218</span>&#160;        <span class=\"comment\">// xzww</span></div>\n<div class=\"line\"><a name=\"l01219\"></a><span class=\"lineno\"> 1219</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01220\"></a><span class=\"lineno\"> 1220</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xzww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01221\"></a><span class=\"lineno\"> 1221</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.z, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l01222\"></a><span class=\"lineno\"> 1222</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01223\"></a><span class=\"lineno\"> 1223</span>&#160;</div>\n<div class=\"line\"><a name=\"l01224\"></a><span class=\"lineno\"> 1224</span>&#160;        <span class=\"comment\">// xwxx</span></div>\n<div class=\"line\"><a name=\"l01225\"></a><span class=\"lineno\"> 1225</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01226\"></a><span class=\"lineno\"> 1226</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01227\"></a><span class=\"lineno\"> 1227</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01228\"></a><span class=\"lineno\"> 1228</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01229\"></a><span class=\"lineno\"> 1229</span>&#160;</div>\n<div class=\"line\"><a name=\"l01230\"></a><span class=\"lineno\"> 1230</span>&#160;        <span class=\"comment\">// xwxy</span></div>\n<div class=\"line\"><a name=\"l01231\"></a><span class=\"lineno\"> 1231</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01232\"></a><span class=\"lineno\"> 1232</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01233\"></a><span class=\"lineno\"> 1233</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01234\"></a><span class=\"lineno\"> 1234</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01235\"></a><span class=\"lineno\"> 1235</span>&#160;</div>\n<div class=\"line\"><a name=\"l01236\"></a><span class=\"lineno\"> 1236</span>&#160;        <span class=\"comment\">// xwxz</span></div>\n<div class=\"line\"><a name=\"l01237\"></a><span class=\"lineno\"> 1237</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01238\"></a><span class=\"lineno\"> 1238</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01239\"></a><span class=\"lineno\"> 1239</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01240\"></a><span class=\"lineno\"> 1240</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01241\"></a><span class=\"lineno\"> 1241</span>&#160;</div>\n<div class=\"line\"><a name=\"l01242\"></a><span class=\"lineno\"> 1242</span>&#160;        <span class=\"comment\">// xwxw</span></div>\n<div class=\"line\"><a name=\"l01243\"></a><span class=\"lineno\"> 1243</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01244\"></a><span class=\"lineno\"> 1244</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01245\"></a><span class=\"lineno\"> 1245</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l01246\"></a><span class=\"lineno\"> 1246</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01247\"></a><span class=\"lineno\"> 1247</span>&#160;</div>\n<div class=\"line\"><a name=\"l01248\"></a><span class=\"lineno\"> 1248</span>&#160;        <span class=\"comment\">// xwyx</span></div>\n<div class=\"line\"><a name=\"l01249\"></a><span class=\"lineno\"> 1249</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01250\"></a><span class=\"lineno\"> 1250</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01251\"></a><span class=\"lineno\"> 1251</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01252\"></a><span class=\"lineno\"> 1252</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01253\"></a><span class=\"lineno\"> 1253</span>&#160;</div>\n<div class=\"line\"><a name=\"l01254\"></a><span class=\"lineno\"> 1254</span>&#160;        <span class=\"comment\">// xwyy</span></div>\n<div class=\"line\"><a name=\"l01255\"></a><span class=\"lineno\"> 1255</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01256\"></a><span class=\"lineno\"> 1256</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01257\"></a><span class=\"lineno\"> 1257</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01258\"></a><span class=\"lineno\"> 1258</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01259\"></a><span class=\"lineno\"> 1259</span>&#160;</div>\n<div class=\"line\"><a name=\"l01260\"></a><span class=\"lineno\"> 1260</span>&#160;        <span class=\"comment\">// xwyz</span></div>\n<div class=\"line\"><a name=\"l01261\"></a><span class=\"lineno\"> 1261</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01262\"></a><span class=\"lineno\"> 1262</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01263\"></a><span class=\"lineno\"> 1263</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01264\"></a><span class=\"lineno\"> 1264</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01265\"></a><span class=\"lineno\"> 1265</span>&#160;</div>\n<div class=\"line\"><a name=\"l01266\"></a><span class=\"lineno\"> 1266</span>&#160;        <span class=\"comment\">// xwyw</span></div>\n<div class=\"line\"><a name=\"l01267\"></a><span class=\"lineno\"> 1267</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01268\"></a><span class=\"lineno\"> 1268</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01269\"></a><span class=\"lineno\"> 1269</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l01270\"></a><span class=\"lineno\"> 1270</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01271\"></a><span class=\"lineno\"> 1271</span>&#160;</div>\n<div class=\"line\"><a name=\"l01272\"></a><span class=\"lineno\"> 1272</span>&#160;        <span class=\"comment\">// xwzx</span></div>\n<div class=\"line\"><a name=\"l01273\"></a><span class=\"lineno\"> 1273</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01274\"></a><span class=\"lineno\"> 1274</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01275\"></a><span class=\"lineno\"> 1275</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01276\"></a><span class=\"lineno\"> 1276</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01277\"></a><span class=\"lineno\"> 1277</span>&#160;</div>\n<div class=\"line\"><a name=\"l01278\"></a><span class=\"lineno\"> 1278</span>&#160;        <span class=\"comment\">// xwzy</span></div>\n<div class=\"line\"><a name=\"l01279\"></a><span class=\"lineno\"> 1279</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01280\"></a><span class=\"lineno\"> 1280</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01281\"></a><span class=\"lineno\"> 1281</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01282\"></a><span class=\"lineno\"> 1282</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01283\"></a><span class=\"lineno\"> 1283</span>&#160;</div>\n<div class=\"line\"><a name=\"l01284\"></a><span class=\"lineno\"> 1284</span>&#160;        <span class=\"comment\">// xwzz</span></div>\n<div class=\"line\"><a name=\"l01285\"></a><span class=\"lineno\"> 1285</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01286\"></a><span class=\"lineno\"> 1286</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01287\"></a><span class=\"lineno\"> 1287</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01288\"></a><span class=\"lineno\"> 1288</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01289\"></a><span class=\"lineno\"> 1289</span>&#160;</div>\n<div class=\"line\"><a name=\"l01290\"></a><span class=\"lineno\"> 1290</span>&#160;        <span class=\"comment\">// xwzw</span></div>\n<div class=\"line\"><a name=\"l01291\"></a><span class=\"lineno\"> 1291</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01292\"></a><span class=\"lineno\"> 1292</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01293\"></a><span class=\"lineno\"> 1293</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l01294\"></a><span class=\"lineno\"> 1294</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01295\"></a><span class=\"lineno\"> 1295</span>&#160;</div>\n<div class=\"line\"><a name=\"l01296\"></a><span class=\"lineno\"> 1296</span>&#160;        <span class=\"comment\">// xwwx</span></div>\n<div class=\"line\"><a name=\"l01297\"></a><span class=\"lineno\"> 1297</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01298\"></a><span class=\"lineno\"> 1298</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01299\"></a><span class=\"lineno\"> 1299</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l01300\"></a><span class=\"lineno\"> 1300</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01301\"></a><span class=\"lineno\"> 1301</span>&#160;</div>\n<div class=\"line\"><a name=\"l01302\"></a><span class=\"lineno\"> 1302</span>&#160;        <span class=\"comment\">// xwwy</span></div>\n<div class=\"line\"><a name=\"l01303\"></a><span class=\"lineno\"> 1303</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01304\"></a><span class=\"lineno\"> 1304</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01305\"></a><span class=\"lineno\"> 1305</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l01306\"></a><span class=\"lineno\"> 1306</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01307\"></a><span class=\"lineno\"> 1307</span>&#160;</div>\n<div class=\"line\"><a name=\"l01308\"></a><span class=\"lineno\"> 1308</span>&#160;        <span class=\"comment\">// xwwz</span></div>\n<div class=\"line\"><a name=\"l01309\"></a><span class=\"lineno\"> 1309</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01310\"></a><span class=\"lineno\"> 1310</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01311\"></a><span class=\"lineno\"> 1311</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l01312\"></a><span class=\"lineno\"> 1312</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01313\"></a><span class=\"lineno\"> 1313</span>&#160;</div>\n<div class=\"line\"><a name=\"l01314\"></a><span class=\"lineno\"> 1314</span>&#160;        <span class=\"comment\">// xwww</span></div>\n<div class=\"line\"><a name=\"l01315\"></a><span class=\"lineno\"> 1315</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01316\"></a><span class=\"lineno\"> 1316</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; xwww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01317\"></a><span class=\"lineno\"> 1317</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.x, v.w, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l01318\"></a><span class=\"lineno\"> 1318</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01319\"></a><span class=\"lineno\"> 1319</span>&#160;</div>\n<div class=\"line\"><a name=\"l01320\"></a><span class=\"lineno\"> 1320</span>&#160;        <span class=\"comment\">// yxxx</span></div>\n<div class=\"line\"><a name=\"l01321\"></a><span class=\"lineno\"> 1321</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01322\"></a><span class=\"lineno\"> 1322</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01323\"></a><span class=\"lineno\"> 1323</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01324\"></a><span class=\"lineno\"> 1324</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01325\"></a><span class=\"lineno\"> 1325</span>&#160;</div>\n<div class=\"line\"><a name=\"l01326\"></a><span class=\"lineno\"> 1326</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01327\"></a><span class=\"lineno\"> 1327</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01328\"></a><span class=\"lineno\"> 1328</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01329\"></a><span class=\"lineno\"> 1329</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01330\"></a><span class=\"lineno\"> 1330</span>&#160;</div>\n<div class=\"line\"><a name=\"l01331\"></a><span class=\"lineno\"> 1331</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01332\"></a><span class=\"lineno\"> 1332</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01333\"></a><span class=\"lineno\"> 1333</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01334\"></a><span class=\"lineno\"> 1334</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01335\"></a><span class=\"lineno\"> 1335</span>&#160;</div>\n<div class=\"line\"><a name=\"l01336\"></a><span class=\"lineno\"> 1336</span>&#160;        <span class=\"comment\">// yxxy</span></div>\n<div class=\"line\"><a name=\"l01337\"></a><span class=\"lineno\"> 1337</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01338\"></a><span class=\"lineno\"> 1338</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01339\"></a><span class=\"lineno\"> 1339</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01340\"></a><span class=\"lineno\"> 1340</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01341\"></a><span class=\"lineno\"> 1341</span>&#160;</div>\n<div class=\"line\"><a name=\"l01342\"></a><span class=\"lineno\"> 1342</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01343\"></a><span class=\"lineno\"> 1343</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01344\"></a><span class=\"lineno\"> 1344</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01345\"></a><span class=\"lineno\"> 1345</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01346\"></a><span class=\"lineno\"> 1346</span>&#160;</div>\n<div class=\"line\"><a name=\"l01347\"></a><span class=\"lineno\"> 1347</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01348\"></a><span class=\"lineno\"> 1348</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01349\"></a><span class=\"lineno\"> 1349</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01350\"></a><span class=\"lineno\"> 1350</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01351\"></a><span class=\"lineno\"> 1351</span>&#160;</div>\n<div class=\"line\"><a name=\"l01352\"></a><span class=\"lineno\"> 1352</span>&#160;        <span class=\"comment\">// yxxz</span></div>\n<div class=\"line\"><a name=\"l01353\"></a><span class=\"lineno\"> 1353</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01354\"></a><span class=\"lineno\"> 1354</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01355\"></a><span class=\"lineno\"> 1355</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01356\"></a><span class=\"lineno\"> 1356</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01357\"></a><span class=\"lineno\"> 1357</span>&#160;</div>\n<div class=\"line\"><a name=\"l01358\"></a><span class=\"lineno\"> 1358</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01359\"></a><span class=\"lineno\"> 1359</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01360\"></a><span class=\"lineno\"> 1360</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01361\"></a><span class=\"lineno\"> 1361</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01362\"></a><span class=\"lineno\"> 1362</span>&#160;</div>\n<div class=\"line\"><a name=\"l01363\"></a><span class=\"lineno\"> 1363</span>&#160;        <span class=\"comment\">// yxxw</span></div>\n<div class=\"line\"><a name=\"l01364\"></a><span class=\"lineno\"> 1364</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01365\"></a><span class=\"lineno\"> 1365</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01366\"></a><span class=\"lineno\"> 1366</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l01367\"></a><span class=\"lineno\"> 1367</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01368\"></a><span class=\"lineno\"> 1368</span>&#160;</div>\n<div class=\"line\"><a name=\"l01369\"></a><span class=\"lineno\"> 1369</span>&#160;        <span class=\"comment\">// yxyx</span></div>\n<div class=\"line\"><a name=\"l01370\"></a><span class=\"lineno\"> 1370</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01371\"></a><span class=\"lineno\"> 1371</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01372\"></a><span class=\"lineno\"> 1372</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01373\"></a><span class=\"lineno\"> 1373</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01374\"></a><span class=\"lineno\"> 1374</span>&#160;</div>\n<div class=\"line\"><a name=\"l01375\"></a><span class=\"lineno\"> 1375</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01376\"></a><span class=\"lineno\"> 1376</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01377\"></a><span class=\"lineno\"> 1377</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01378\"></a><span class=\"lineno\"> 1378</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01379\"></a><span class=\"lineno\"> 1379</span>&#160;</div>\n<div class=\"line\"><a name=\"l01380\"></a><span class=\"lineno\"> 1380</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01381\"></a><span class=\"lineno\"> 1381</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01382\"></a><span class=\"lineno\"> 1382</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01383\"></a><span class=\"lineno\"> 1383</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01384\"></a><span class=\"lineno\"> 1384</span>&#160;</div>\n<div class=\"line\"><a name=\"l01385\"></a><span class=\"lineno\"> 1385</span>&#160;        <span class=\"comment\">// yxyy</span></div>\n<div class=\"line\"><a name=\"l01386\"></a><span class=\"lineno\"> 1386</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01387\"></a><span class=\"lineno\"> 1387</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01388\"></a><span class=\"lineno\"> 1388</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01389\"></a><span class=\"lineno\"> 1389</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01390\"></a><span class=\"lineno\"> 1390</span>&#160;</div>\n<div class=\"line\"><a name=\"l01391\"></a><span class=\"lineno\"> 1391</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01392\"></a><span class=\"lineno\"> 1392</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01393\"></a><span class=\"lineno\"> 1393</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01394\"></a><span class=\"lineno\"> 1394</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01395\"></a><span class=\"lineno\"> 1395</span>&#160;</div>\n<div class=\"line\"><a name=\"l01396\"></a><span class=\"lineno\"> 1396</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01397\"></a><span class=\"lineno\"> 1397</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01398\"></a><span class=\"lineno\"> 1398</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01399\"></a><span class=\"lineno\"> 1399</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01400\"></a><span class=\"lineno\"> 1400</span>&#160;</div>\n<div class=\"line\"><a name=\"l01401\"></a><span class=\"lineno\"> 1401</span>&#160;        <span class=\"comment\">// yxyz</span></div>\n<div class=\"line\"><a name=\"l01402\"></a><span class=\"lineno\"> 1402</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01403\"></a><span class=\"lineno\"> 1403</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01404\"></a><span class=\"lineno\"> 1404</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01405\"></a><span class=\"lineno\"> 1405</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01406\"></a><span class=\"lineno\"> 1406</span>&#160;</div>\n<div class=\"line\"><a name=\"l01407\"></a><span class=\"lineno\"> 1407</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01408\"></a><span class=\"lineno\"> 1408</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01409\"></a><span class=\"lineno\"> 1409</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01410\"></a><span class=\"lineno\"> 1410</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01411\"></a><span class=\"lineno\"> 1411</span>&#160;</div>\n<div class=\"line\"><a name=\"l01412\"></a><span class=\"lineno\"> 1412</span>&#160;        <span class=\"comment\">// yxyw</span></div>\n<div class=\"line\"><a name=\"l01413\"></a><span class=\"lineno\"> 1413</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01414\"></a><span class=\"lineno\"> 1414</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01415\"></a><span class=\"lineno\"> 1415</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l01416\"></a><span class=\"lineno\"> 1416</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01417\"></a><span class=\"lineno\"> 1417</span>&#160;</div>\n<div class=\"line\"><a name=\"l01418\"></a><span class=\"lineno\"> 1418</span>&#160;        <span class=\"comment\">// yxzx</span></div>\n<div class=\"line\"><a name=\"l01419\"></a><span class=\"lineno\"> 1419</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01420\"></a><span class=\"lineno\"> 1420</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01421\"></a><span class=\"lineno\"> 1421</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01422\"></a><span class=\"lineno\"> 1422</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01423\"></a><span class=\"lineno\"> 1423</span>&#160;</div>\n<div class=\"line\"><a name=\"l01424\"></a><span class=\"lineno\"> 1424</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01425\"></a><span class=\"lineno\"> 1425</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01426\"></a><span class=\"lineno\"> 1426</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01427\"></a><span class=\"lineno\"> 1427</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01428\"></a><span class=\"lineno\"> 1428</span>&#160;</div>\n<div class=\"line\"><a name=\"l01429\"></a><span class=\"lineno\"> 1429</span>&#160;        <span class=\"comment\">// yxzy</span></div>\n<div class=\"line\"><a name=\"l01430\"></a><span class=\"lineno\"> 1430</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01431\"></a><span class=\"lineno\"> 1431</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01432\"></a><span class=\"lineno\"> 1432</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01433\"></a><span class=\"lineno\"> 1433</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01434\"></a><span class=\"lineno\"> 1434</span>&#160;</div>\n<div class=\"line\"><a name=\"l01435\"></a><span class=\"lineno\"> 1435</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01436\"></a><span class=\"lineno\"> 1436</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01437\"></a><span class=\"lineno\"> 1437</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01438\"></a><span class=\"lineno\"> 1438</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01439\"></a><span class=\"lineno\"> 1439</span>&#160;</div>\n<div class=\"line\"><a name=\"l01440\"></a><span class=\"lineno\"> 1440</span>&#160;        <span class=\"comment\">// yxzz</span></div>\n<div class=\"line\"><a name=\"l01441\"></a><span class=\"lineno\"> 1441</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01442\"></a><span class=\"lineno\"> 1442</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01443\"></a><span class=\"lineno\"> 1443</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01444\"></a><span class=\"lineno\"> 1444</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01445\"></a><span class=\"lineno\"> 1445</span>&#160;</div>\n<div class=\"line\"><a name=\"l01446\"></a><span class=\"lineno\"> 1446</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01447\"></a><span class=\"lineno\"> 1447</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01448\"></a><span class=\"lineno\"> 1448</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01449\"></a><span class=\"lineno\"> 1449</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01450\"></a><span class=\"lineno\"> 1450</span>&#160;</div>\n<div class=\"line\"><a name=\"l01451\"></a><span class=\"lineno\"> 1451</span>&#160;        <span class=\"comment\">// yxzw</span></div>\n<div class=\"line\"><a name=\"l01452\"></a><span class=\"lineno\"> 1452</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01453\"></a><span class=\"lineno\"> 1453</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01454\"></a><span class=\"lineno\"> 1454</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l01455\"></a><span class=\"lineno\"> 1455</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01456\"></a><span class=\"lineno\"> 1456</span>&#160;</div>\n<div class=\"line\"><a name=\"l01457\"></a><span class=\"lineno\"> 1457</span>&#160;        <span class=\"comment\">// yxwx</span></div>\n<div class=\"line\"><a name=\"l01458\"></a><span class=\"lineno\"> 1458</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01459\"></a><span class=\"lineno\"> 1459</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01460\"></a><span class=\"lineno\"> 1460</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l01461\"></a><span class=\"lineno\"> 1461</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01462\"></a><span class=\"lineno\"> 1462</span>&#160;</div>\n<div class=\"line\"><a name=\"l01463\"></a><span class=\"lineno\"> 1463</span>&#160;        <span class=\"comment\">// yxwy</span></div>\n<div class=\"line\"><a name=\"l01464\"></a><span class=\"lineno\"> 1464</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01465\"></a><span class=\"lineno\"> 1465</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01466\"></a><span class=\"lineno\"> 1466</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l01467\"></a><span class=\"lineno\"> 1467</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01468\"></a><span class=\"lineno\"> 1468</span>&#160;</div>\n<div class=\"line\"><a name=\"l01469\"></a><span class=\"lineno\"> 1469</span>&#160;        <span class=\"comment\">// yxwz</span></div>\n<div class=\"line\"><a name=\"l01470\"></a><span class=\"lineno\"> 1470</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01471\"></a><span class=\"lineno\"> 1471</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01472\"></a><span class=\"lineno\"> 1472</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l01473\"></a><span class=\"lineno\"> 1473</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01474\"></a><span class=\"lineno\"> 1474</span>&#160;</div>\n<div class=\"line\"><a name=\"l01475\"></a><span class=\"lineno\"> 1475</span>&#160;        <span class=\"comment\">// yxww</span></div>\n<div class=\"line\"><a name=\"l01476\"></a><span class=\"lineno\"> 1476</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01477\"></a><span class=\"lineno\"> 1477</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yxww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01478\"></a><span class=\"lineno\"> 1478</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.x, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l01479\"></a><span class=\"lineno\"> 1479</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01480\"></a><span class=\"lineno\"> 1480</span>&#160;</div>\n<div class=\"line\"><a name=\"l01481\"></a><span class=\"lineno\"> 1481</span>&#160;        <span class=\"comment\">// yyxx</span></div>\n<div class=\"line\"><a name=\"l01482\"></a><span class=\"lineno\"> 1482</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01483\"></a><span class=\"lineno\"> 1483</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01484\"></a><span class=\"lineno\"> 1484</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01485\"></a><span class=\"lineno\"> 1485</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01486\"></a><span class=\"lineno\"> 1486</span>&#160;</div>\n<div class=\"line\"><a name=\"l01487\"></a><span class=\"lineno\"> 1487</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01488\"></a><span class=\"lineno\"> 1488</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01489\"></a><span class=\"lineno\"> 1489</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01490\"></a><span class=\"lineno\"> 1490</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01491\"></a><span class=\"lineno\"> 1491</span>&#160;</div>\n<div class=\"line\"><a name=\"l01492\"></a><span class=\"lineno\"> 1492</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01493\"></a><span class=\"lineno\"> 1493</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01494\"></a><span class=\"lineno\"> 1494</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01495\"></a><span class=\"lineno\"> 1495</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01496\"></a><span class=\"lineno\"> 1496</span>&#160;</div>\n<div class=\"line\"><a name=\"l01497\"></a><span class=\"lineno\"> 1497</span>&#160;        <span class=\"comment\">// yyxy</span></div>\n<div class=\"line\"><a name=\"l01498\"></a><span class=\"lineno\"> 1498</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01499\"></a><span class=\"lineno\"> 1499</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01500\"></a><span class=\"lineno\"> 1500</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01501\"></a><span class=\"lineno\"> 1501</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01502\"></a><span class=\"lineno\"> 1502</span>&#160;</div>\n<div class=\"line\"><a name=\"l01503\"></a><span class=\"lineno\"> 1503</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01504\"></a><span class=\"lineno\"> 1504</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01505\"></a><span class=\"lineno\"> 1505</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01506\"></a><span class=\"lineno\"> 1506</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01507\"></a><span class=\"lineno\"> 1507</span>&#160;</div>\n<div class=\"line\"><a name=\"l01508\"></a><span class=\"lineno\"> 1508</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01509\"></a><span class=\"lineno\"> 1509</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01510\"></a><span class=\"lineno\"> 1510</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01511\"></a><span class=\"lineno\"> 1511</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01512\"></a><span class=\"lineno\"> 1512</span>&#160;</div>\n<div class=\"line\"><a name=\"l01513\"></a><span class=\"lineno\"> 1513</span>&#160;        <span class=\"comment\">// yyxz</span></div>\n<div class=\"line\"><a name=\"l01514\"></a><span class=\"lineno\"> 1514</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01515\"></a><span class=\"lineno\"> 1515</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01516\"></a><span class=\"lineno\"> 1516</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01517\"></a><span class=\"lineno\"> 1517</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01518\"></a><span class=\"lineno\"> 1518</span>&#160;</div>\n<div class=\"line\"><a name=\"l01519\"></a><span class=\"lineno\"> 1519</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01520\"></a><span class=\"lineno\"> 1520</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01521\"></a><span class=\"lineno\"> 1521</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01522\"></a><span class=\"lineno\"> 1522</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01523\"></a><span class=\"lineno\"> 1523</span>&#160;</div>\n<div class=\"line\"><a name=\"l01524\"></a><span class=\"lineno\"> 1524</span>&#160;        <span class=\"comment\">// yyxw</span></div>\n<div class=\"line\"><a name=\"l01525\"></a><span class=\"lineno\"> 1525</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01526\"></a><span class=\"lineno\"> 1526</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01527\"></a><span class=\"lineno\"> 1527</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l01528\"></a><span class=\"lineno\"> 1528</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01529\"></a><span class=\"lineno\"> 1529</span>&#160;</div>\n<div class=\"line\"><a name=\"l01530\"></a><span class=\"lineno\"> 1530</span>&#160;        <span class=\"comment\">// yyyx</span></div>\n<div class=\"line\"><a name=\"l01531\"></a><span class=\"lineno\"> 1531</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01532\"></a><span class=\"lineno\"> 1532</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyx(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01533\"></a><span class=\"lineno\"> 1533</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01534\"></a><span class=\"lineno\"> 1534</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01535\"></a><span class=\"lineno\"> 1535</span>&#160;</div>\n<div class=\"line\"><a name=\"l01536\"></a><span class=\"lineno\"> 1536</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01537\"></a><span class=\"lineno\"> 1537</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01538\"></a><span class=\"lineno\"> 1538</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01539\"></a><span class=\"lineno\"> 1539</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01540\"></a><span class=\"lineno\"> 1540</span>&#160;</div>\n<div class=\"line\"><a name=\"l01541\"></a><span class=\"lineno\"> 1541</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01542\"></a><span class=\"lineno\"> 1542</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01543\"></a><span class=\"lineno\"> 1543</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01544\"></a><span class=\"lineno\"> 1544</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01545\"></a><span class=\"lineno\"> 1545</span>&#160;</div>\n<div class=\"line\"><a name=\"l01546\"></a><span class=\"lineno\"> 1546</span>&#160;        <span class=\"comment\">// yyyy</span></div>\n<div class=\"line\"><a name=\"l01547\"></a><span class=\"lineno\"> 1547</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01548\"></a><span class=\"lineno\"> 1548</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyy(<span class=\"keyword\">const</span> glm::vec&lt;2, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01549\"></a><span class=\"lineno\"> 1549</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01550\"></a><span class=\"lineno\"> 1550</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01551\"></a><span class=\"lineno\"> 1551</span>&#160;</div>\n<div class=\"line\"><a name=\"l01552\"></a><span class=\"lineno\"> 1552</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01553\"></a><span class=\"lineno\"> 1553</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01554\"></a><span class=\"lineno\"> 1554</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01555\"></a><span class=\"lineno\"> 1555</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01556\"></a><span class=\"lineno\"> 1556</span>&#160;</div>\n<div class=\"line\"><a name=\"l01557\"></a><span class=\"lineno\"> 1557</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01558\"></a><span class=\"lineno\"> 1558</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01559\"></a><span class=\"lineno\"> 1559</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01560\"></a><span class=\"lineno\"> 1560</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01561\"></a><span class=\"lineno\"> 1561</span>&#160;</div>\n<div class=\"line\"><a name=\"l01562\"></a><span class=\"lineno\"> 1562</span>&#160;        <span class=\"comment\">// yyyz</span></div>\n<div class=\"line\"><a name=\"l01563\"></a><span class=\"lineno\"> 1563</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01564\"></a><span class=\"lineno\"> 1564</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01565\"></a><span class=\"lineno\"> 1565</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01566\"></a><span class=\"lineno\"> 1566</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01567\"></a><span class=\"lineno\"> 1567</span>&#160;</div>\n<div class=\"line\"><a name=\"l01568\"></a><span class=\"lineno\"> 1568</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01569\"></a><span class=\"lineno\"> 1569</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01570\"></a><span class=\"lineno\"> 1570</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01571\"></a><span class=\"lineno\"> 1571</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01572\"></a><span class=\"lineno\"> 1572</span>&#160;</div>\n<div class=\"line\"><a name=\"l01573\"></a><span class=\"lineno\"> 1573</span>&#160;        <span class=\"comment\">// yyyw</span></div>\n<div class=\"line\"><a name=\"l01574\"></a><span class=\"lineno\"> 1574</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01575\"></a><span class=\"lineno\"> 1575</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01576\"></a><span class=\"lineno\"> 1576</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l01577\"></a><span class=\"lineno\"> 1577</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01578\"></a><span class=\"lineno\"> 1578</span>&#160;</div>\n<div class=\"line\"><a name=\"l01579\"></a><span class=\"lineno\"> 1579</span>&#160;        <span class=\"comment\">// yyzx</span></div>\n<div class=\"line\"><a name=\"l01580\"></a><span class=\"lineno\"> 1580</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01581\"></a><span class=\"lineno\"> 1581</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01582\"></a><span class=\"lineno\"> 1582</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01583\"></a><span class=\"lineno\"> 1583</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01584\"></a><span class=\"lineno\"> 1584</span>&#160;</div>\n<div class=\"line\"><a name=\"l01585\"></a><span class=\"lineno\"> 1585</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01586\"></a><span class=\"lineno\"> 1586</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01587\"></a><span class=\"lineno\"> 1587</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01588\"></a><span class=\"lineno\"> 1588</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01589\"></a><span class=\"lineno\"> 1589</span>&#160;</div>\n<div class=\"line\"><a name=\"l01590\"></a><span class=\"lineno\"> 1590</span>&#160;        <span class=\"comment\">// yyzy</span></div>\n<div class=\"line\"><a name=\"l01591\"></a><span class=\"lineno\"> 1591</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01592\"></a><span class=\"lineno\"> 1592</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01593\"></a><span class=\"lineno\"> 1593</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01594\"></a><span class=\"lineno\"> 1594</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01595\"></a><span class=\"lineno\"> 1595</span>&#160;</div>\n<div class=\"line\"><a name=\"l01596\"></a><span class=\"lineno\"> 1596</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01597\"></a><span class=\"lineno\"> 1597</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01598\"></a><span class=\"lineno\"> 1598</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01599\"></a><span class=\"lineno\"> 1599</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01600\"></a><span class=\"lineno\"> 1600</span>&#160;</div>\n<div class=\"line\"><a name=\"l01601\"></a><span class=\"lineno\"> 1601</span>&#160;        <span class=\"comment\">// yyzz</span></div>\n<div class=\"line\"><a name=\"l01602\"></a><span class=\"lineno\"> 1602</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01603\"></a><span class=\"lineno\"> 1603</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01604\"></a><span class=\"lineno\"> 1604</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01605\"></a><span class=\"lineno\"> 1605</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01606\"></a><span class=\"lineno\"> 1606</span>&#160;</div>\n<div class=\"line\"><a name=\"l01607\"></a><span class=\"lineno\"> 1607</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01608\"></a><span class=\"lineno\"> 1608</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01609\"></a><span class=\"lineno\"> 1609</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01610\"></a><span class=\"lineno\"> 1610</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01611\"></a><span class=\"lineno\"> 1611</span>&#160;</div>\n<div class=\"line\"><a name=\"l01612\"></a><span class=\"lineno\"> 1612</span>&#160;        <span class=\"comment\">// yyzw</span></div>\n<div class=\"line\"><a name=\"l01613\"></a><span class=\"lineno\"> 1613</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01614\"></a><span class=\"lineno\"> 1614</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01615\"></a><span class=\"lineno\"> 1615</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l01616\"></a><span class=\"lineno\"> 1616</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01617\"></a><span class=\"lineno\"> 1617</span>&#160;</div>\n<div class=\"line\"><a name=\"l01618\"></a><span class=\"lineno\"> 1618</span>&#160;        <span class=\"comment\">// yywx</span></div>\n<div class=\"line\"><a name=\"l01619\"></a><span class=\"lineno\"> 1619</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01620\"></a><span class=\"lineno\"> 1620</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yywx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01621\"></a><span class=\"lineno\"> 1621</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l01622\"></a><span class=\"lineno\"> 1622</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01623\"></a><span class=\"lineno\"> 1623</span>&#160;</div>\n<div class=\"line\"><a name=\"l01624\"></a><span class=\"lineno\"> 1624</span>&#160;        <span class=\"comment\">// yywy</span></div>\n<div class=\"line\"><a name=\"l01625\"></a><span class=\"lineno\"> 1625</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01626\"></a><span class=\"lineno\"> 1626</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yywy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01627\"></a><span class=\"lineno\"> 1627</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l01628\"></a><span class=\"lineno\"> 1628</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01629\"></a><span class=\"lineno\"> 1629</span>&#160;</div>\n<div class=\"line\"><a name=\"l01630\"></a><span class=\"lineno\"> 1630</span>&#160;        <span class=\"comment\">// yywz</span></div>\n<div class=\"line\"><a name=\"l01631\"></a><span class=\"lineno\"> 1631</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01632\"></a><span class=\"lineno\"> 1632</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yywz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01633\"></a><span class=\"lineno\"> 1633</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l01634\"></a><span class=\"lineno\"> 1634</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01635\"></a><span class=\"lineno\"> 1635</span>&#160;</div>\n<div class=\"line\"><a name=\"l01636\"></a><span class=\"lineno\"> 1636</span>&#160;        <span class=\"comment\">// yyww</span></div>\n<div class=\"line\"><a name=\"l01637\"></a><span class=\"lineno\"> 1637</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01638\"></a><span class=\"lineno\"> 1638</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yyww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01639\"></a><span class=\"lineno\"> 1639</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.y, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l01640\"></a><span class=\"lineno\"> 1640</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01641\"></a><span class=\"lineno\"> 1641</span>&#160;</div>\n<div class=\"line\"><a name=\"l01642\"></a><span class=\"lineno\"> 1642</span>&#160;        <span class=\"comment\">// yzxx</span></div>\n<div class=\"line\"><a name=\"l01643\"></a><span class=\"lineno\"> 1643</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01644\"></a><span class=\"lineno\"> 1644</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01645\"></a><span class=\"lineno\"> 1645</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01646\"></a><span class=\"lineno\"> 1646</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01647\"></a><span class=\"lineno\"> 1647</span>&#160;</div>\n<div class=\"line\"><a name=\"l01648\"></a><span class=\"lineno\"> 1648</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01649\"></a><span class=\"lineno\"> 1649</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01650\"></a><span class=\"lineno\"> 1650</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01651\"></a><span class=\"lineno\"> 1651</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01652\"></a><span class=\"lineno\"> 1652</span>&#160;</div>\n<div class=\"line\"><a name=\"l01653\"></a><span class=\"lineno\"> 1653</span>&#160;        <span class=\"comment\">// yzxy</span></div>\n<div class=\"line\"><a name=\"l01654\"></a><span class=\"lineno\"> 1654</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01655\"></a><span class=\"lineno\"> 1655</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01656\"></a><span class=\"lineno\"> 1656</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01657\"></a><span class=\"lineno\"> 1657</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01658\"></a><span class=\"lineno\"> 1658</span>&#160;</div>\n<div class=\"line\"><a name=\"l01659\"></a><span class=\"lineno\"> 1659</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01660\"></a><span class=\"lineno\"> 1660</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01661\"></a><span class=\"lineno\"> 1661</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01662\"></a><span class=\"lineno\"> 1662</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01663\"></a><span class=\"lineno\"> 1663</span>&#160;</div>\n<div class=\"line\"><a name=\"l01664\"></a><span class=\"lineno\"> 1664</span>&#160;        <span class=\"comment\">// yzxz</span></div>\n<div class=\"line\"><a name=\"l01665\"></a><span class=\"lineno\"> 1665</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01666\"></a><span class=\"lineno\"> 1666</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01667\"></a><span class=\"lineno\"> 1667</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01668\"></a><span class=\"lineno\"> 1668</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01669\"></a><span class=\"lineno\"> 1669</span>&#160;</div>\n<div class=\"line\"><a name=\"l01670\"></a><span class=\"lineno\"> 1670</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01671\"></a><span class=\"lineno\"> 1671</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01672\"></a><span class=\"lineno\"> 1672</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01673\"></a><span class=\"lineno\"> 1673</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01674\"></a><span class=\"lineno\"> 1674</span>&#160;</div>\n<div class=\"line\"><a name=\"l01675\"></a><span class=\"lineno\"> 1675</span>&#160;        <span class=\"comment\">// yzxw</span></div>\n<div class=\"line\"><a name=\"l01676\"></a><span class=\"lineno\"> 1676</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01677\"></a><span class=\"lineno\"> 1677</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01678\"></a><span class=\"lineno\"> 1678</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l01679\"></a><span class=\"lineno\"> 1679</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01680\"></a><span class=\"lineno\"> 1680</span>&#160;</div>\n<div class=\"line\"><a name=\"l01681\"></a><span class=\"lineno\"> 1681</span>&#160;        <span class=\"comment\">// yzyx</span></div>\n<div class=\"line\"><a name=\"l01682\"></a><span class=\"lineno\"> 1682</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01683\"></a><span class=\"lineno\"> 1683</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01684\"></a><span class=\"lineno\"> 1684</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01685\"></a><span class=\"lineno\"> 1685</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01686\"></a><span class=\"lineno\"> 1686</span>&#160;</div>\n<div class=\"line\"><a name=\"l01687\"></a><span class=\"lineno\"> 1687</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01688\"></a><span class=\"lineno\"> 1688</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01689\"></a><span class=\"lineno\"> 1689</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01690\"></a><span class=\"lineno\"> 1690</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01691\"></a><span class=\"lineno\"> 1691</span>&#160;</div>\n<div class=\"line\"><a name=\"l01692\"></a><span class=\"lineno\"> 1692</span>&#160;        <span class=\"comment\">// yzyy</span></div>\n<div class=\"line\"><a name=\"l01693\"></a><span class=\"lineno\"> 1693</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01694\"></a><span class=\"lineno\"> 1694</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01695\"></a><span class=\"lineno\"> 1695</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01696\"></a><span class=\"lineno\"> 1696</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01697\"></a><span class=\"lineno\"> 1697</span>&#160;</div>\n<div class=\"line\"><a name=\"l01698\"></a><span class=\"lineno\"> 1698</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01699\"></a><span class=\"lineno\"> 1699</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01700\"></a><span class=\"lineno\"> 1700</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01701\"></a><span class=\"lineno\"> 1701</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01702\"></a><span class=\"lineno\"> 1702</span>&#160;</div>\n<div class=\"line\"><a name=\"l01703\"></a><span class=\"lineno\"> 1703</span>&#160;        <span class=\"comment\">// yzyz</span></div>\n<div class=\"line\"><a name=\"l01704\"></a><span class=\"lineno\"> 1704</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01705\"></a><span class=\"lineno\"> 1705</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01706\"></a><span class=\"lineno\"> 1706</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01707\"></a><span class=\"lineno\"> 1707</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01708\"></a><span class=\"lineno\"> 1708</span>&#160;</div>\n<div class=\"line\"><a name=\"l01709\"></a><span class=\"lineno\"> 1709</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01710\"></a><span class=\"lineno\"> 1710</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01711\"></a><span class=\"lineno\"> 1711</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01712\"></a><span class=\"lineno\"> 1712</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01713\"></a><span class=\"lineno\"> 1713</span>&#160;</div>\n<div class=\"line\"><a name=\"l01714\"></a><span class=\"lineno\"> 1714</span>&#160;        <span class=\"comment\">// yzyw</span></div>\n<div class=\"line\"><a name=\"l01715\"></a><span class=\"lineno\"> 1715</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01716\"></a><span class=\"lineno\"> 1716</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01717\"></a><span class=\"lineno\"> 1717</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l01718\"></a><span class=\"lineno\"> 1718</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01719\"></a><span class=\"lineno\"> 1719</span>&#160;</div>\n<div class=\"line\"><a name=\"l01720\"></a><span class=\"lineno\"> 1720</span>&#160;        <span class=\"comment\">// yzzx</span></div>\n<div class=\"line\"><a name=\"l01721\"></a><span class=\"lineno\"> 1721</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01722\"></a><span class=\"lineno\"> 1722</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01723\"></a><span class=\"lineno\"> 1723</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01724\"></a><span class=\"lineno\"> 1724</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01725\"></a><span class=\"lineno\"> 1725</span>&#160;</div>\n<div class=\"line\"><a name=\"l01726\"></a><span class=\"lineno\"> 1726</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01727\"></a><span class=\"lineno\"> 1727</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01728\"></a><span class=\"lineno\"> 1728</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01729\"></a><span class=\"lineno\"> 1729</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01730\"></a><span class=\"lineno\"> 1730</span>&#160;</div>\n<div class=\"line\"><a name=\"l01731\"></a><span class=\"lineno\"> 1731</span>&#160;        <span class=\"comment\">// yzzy</span></div>\n<div class=\"line\"><a name=\"l01732\"></a><span class=\"lineno\"> 1732</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01733\"></a><span class=\"lineno\"> 1733</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01734\"></a><span class=\"lineno\"> 1734</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01735\"></a><span class=\"lineno\"> 1735</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01736\"></a><span class=\"lineno\"> 1736</span>&#160;</div>\n<div class=\"line\"><a name=\"l01737\"></a><span class=\"lineno\"> 1737</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01738\"></a><span class=\"lineno\"> 1738</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01739\"></a><span class=\"lineno\"> 1739</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01740\"></a><span class=\"lineno\"> 1740</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01741\"></a><span class=\"lineno\"> 1741</span>&#160;</div>\n<div class=\"line\"><a name=\"l01742\"></a><span class=\"lineno\"> 1742</span>&#160;        <span class=\"comment\">// yzzz</span></div>\n<div class=\"line\"><a name=\"l01743\"></a><span class=\"lineno\"> 1743</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01744\"></a><span class=\"lineno\"> 1744</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01745\"></a><span class=\"lineno\"> 1745</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01746\"></a><span class=\"lineno\"> 1746</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01747\"></a><span class=\"lineno\"> 1747</span>&#160;</div>\n<div class=\"line\"><a name=\"l01748\"></a><span class=\"lineno\"> 1748</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01749\"></a><span class=\"lineno\"> 1749</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01750\"></a><span class=\"lineno\"> 1750</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01751\"></a><span class=\"lineno\"> 1751</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01752\"></a><span class=\"lineno\"> 1752</span>&#160;</div>\n<div class=\"line\"><a name=\"l01753\"></a><span class=\"lineno\"> 1753</span>&#160;        <span class=\"comment\">// yzzw</span></div>\n<div class=\"line\"><a name=\"l01754\"></a><span class=\"lineno\"> 1754</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01755\"></a><span class=\"lineno\"> 1755</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01756\"></a><span class=\"lineno\"> 1756</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l01757\"></a><span class=\"lineno\"> 1757</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01758\"></a><span class=\"lineno\"> 1758</span>&#160;</div>\n<div class=\"line\"><a name=\"l01759\"></a><span class=\"lineno\"> 1759</span>&#160;        <span class=\"comment\">// yzwx</span></div>\n<div class=\"line\"><a name=\"l01760\"></a><span class=\"lineno\"> 1760</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01761\"></a><span class=\"lineno\"> 1761</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01762\"></a><span class=\"lineno\"> 1762</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l01763\"></a><span class=\"lineno\"> 1763</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01764\"></a><span class=\"lineno\"> 1764</span>&#160;</div>\n<div class=\"line\"><a name=\"l01765\"></a><span class=\"lineno\"> 1765</span>&#160;        <span class=\"comment\">// yzwy</span></div>\n<div class=\"line\"><a name=\"l01766\"></a><span class=\"lineno\"> 1766</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01767\"></a><span class=\"lineno\"> 1767</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01768\"></a><span class=\"lineno\"> 1768</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l01769\"></a><span class=\"lineno\"> 1769</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01770\"></a><span class=\"lineno\"> 1770</span>&#160;</div>\n<div class=\"line\"><a name=\"l01771\"></a><span class=\"lineno\"> 1771</span>&#160;        <span class=\"comment\">// yzwz</span></div>\n<div class=\"line\"><a name=\"l01772\"></a><span class=\"lineno\"> 1772</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01773\"></a><span class=\"lineno\"> 1773</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01774\"></a><span class=\"lineno\"> 1774</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l01775\"></a><span class=\"lineno\"> 1775</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01776\"></a><span class=\"lineno\"> 1776</span>&#160;</div>\n<div class=\"line\"><a name=\"l01777\"></a><span class=\"lineno\"> 1777</span>&#160;        <span class=\"comment\">// yzww</span></div>\n<div class=\"line\"><a name=\"l01778\"></a><span class=\"lineno\"> 1778</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01779\"></a><span class=\"lineno\"> 1779</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; yzww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01780\"></a><span class=\"lineno\"> 1780</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.z, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l01781\"></a><span class=\"lineno\"> 1781</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01782\"></a><span class=\"lineno\"> 1782</span>&#160;</div>\n<div class=\"line\"><a name=\"l01783\"></a><span class=\"lineno\"> 1783</span>&#160;        <span class=\"comment\">// ywxx</span></div>\n<div class=\"line\"><a name=\"l01784\"></a><span class=\"lineno\"> 1784</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01785\"></a><span class=\"lineno\"> 1785</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01786\"></a><span class=\"lineno\"> 1786</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01787\"></a><span class=\"lineno\"> 1787</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01788\"></a><span class=\"lineno\"> 1788</span>&#160;</div>\n<div class=\"line\"><a name=\"l01789\"></a><span class=\"lineno\"> 1789</span>&#160;        <span class=\"comment\">// ywxy</span></div>\n<div class=\"line\"><a name=\"l01790\"></a><span class=\"lineno\"> 1790</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01791\"></a><span class=\"lineno\"> 1791</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01792\"></a><span class=\"lineno\"> 1792</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01793\"></a><span class=\"lineno\"> 1793</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01794\"></a><span class=\"lineno\"> 1794</span>&#160;</div>\n<div class=\"line\"><a name=\"l01795\"></a><span class=\"lineno\"> 1795</span>&#160;        <span class=\"comment\">// ywxz</span></div>\n<div class=\"line\"><a name=\"l01796\"></a><span class=\"lineno\"> 1796</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01797\"></a><span class=\"lineno\"> 1797</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01798\"></a><span class=\"lineno\"> 1798</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01799\"></a><span class=\"lineno\"> 1799</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01800\"></a><span class=\"lineno\"> 1800</span>&#160;</div>\n<div class=\"line\"><a name=\"l01801\"></a><span class=\"lineno\"> 1801</span>&#160;        <span class=\"comment\">// ywxw</span></div>\n<div class=\"line\"><a name=\"l01802\"></a><span class=\"lineno\"> 1802</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01803\"></a><span class=\"lineno\"> 1803</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01804\"></a><span class=\"lineno\"> 1804</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l01805\"></a><span class=\"lineno\"> 1805</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01806\"></a><span class=\"lineno\"> 1806</span>&#160;</div>\n<div class=\"line\"><a name=\"l01807\"></a><span class=\"lineno\"> 1807</span>&#160;        <span class=\"comment\">// ywyx</span></div>\n<div class=\"line\"><a name=\"l01808\"></a><span class=\"lineno\"> 1808</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01809\"></a><span class=\"lineno\"> 1809</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01810\"></a><span class=\"lineno\"> 1810</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01811\"></a><span class=\"lineno\"> 1811</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01812\"></a><span class=\"lineno\"> 1812</span>&#160;</div>\n<div class=\"line\"><a name=\"l01813\"></a><span class=\"lineno\"> 1813</span>&#160;        <span class=\"comment\">// ywyy</span></div>\n<div class=\"line\"><a name=\"l01814\"></a><span class=\"lineno\"> 1814</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01815\"></a><span class=\"lineno\"> 1815</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01816\"></a><span class=\"lineno\"> 1816</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01817\"></a><span class=\"lineno\"> 1817</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01818\"></a><span class=\"lineno\"> 1818</span>&#160;</div>\n<div class=\"line\"><a name=\"l01819\"></a><span class=\"lineno\"> 1819</span>&#160;        <span class=\"comment\">// ywyz</span></div>\n<div class=\"line\"><a name=\"l01820\"></a><span class=\"lineno\"> 1820</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01821\"></a><span class=\"lineno\"> 1821</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01822\"></a><span class=\"lineno\"> 1822</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01823\"></a><span class=\"lineno\"> 1823</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01824\"></a><span class=\"lineno\"> 1824</span>&#160;</div>\n<div class=\"line\"><a name=\"l01825\"></a><span class=\"lineno\"> 1825</span>&#160;        <span class=\"comment\">// ywyw</span></div>\n<div class=\"line\"><a name=\"l01826\"></a><span class=\"lineno\"> 1826</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01827\"></a><span class=\"lineno\"> 1827</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01828\"></a><span class=\"lineno\"> 1828</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l01829\"></a><span class=\"lineno\"> 1829</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01830\"></a><span class=\"lineno\"> 1830</span>&#160;</div>\n<div class=\"line\"><a name=\"l01831\"></a><span class=\"lineno\"> 1831</span>&#160;        <span class=\"comment\">// ywzx</span></div>\n<div class=\"line\"><a name=\"l01832\"></a><span class=\"lineno\"> 1832</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01833\"></a><span class=\"lineno\"> 1833</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01834\"></a><span class=\"lineno\"> 1834</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01835\"></a><span class=\"lineno\"> 1835</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01836\"></a><span class=\"lineno\"> 1836</span>&#160;</div>\n<div class=\"line\"><a name=\"l01837\"></a><span class=\"lineno\"> 1837</span>&#160;        <span class=\"comment\">// ywzy</span></div>\n<div class=\"line\"><a name=\"l01838\"></a><span class=\"lineno\"> 1838</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01839\"></a><span class=\"lineno\"> 1839</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01840\"></a><span class=\"lineno\"> 1840</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01841\"></a><span class=\"lineno\"> 1841</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01842\"></a><span class=\"lineno\"> 1842</span>&#160;</div>\n<div class=\"line\"><a name=\"l01843\"></a><span class=\"lineno\"> 1843</span>&#160;        <span class=\"comment\">// ywzz</span></div>\n<div class=\"line\"><a name=\"l01844\"></a><span class=\"lineno\"> 1844</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01845\"></a><span class=\"lineno\"> 1845</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01846\"></a><span class=\"lineno\"> 1846</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01847\"></a><span class=\"lineno\"> 1847</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01848\"></a><span class=\"lineno\"> 1848</span>&#160;</div>\n<div class=\"line\"><a name=\"l01849\"></a><span class=\"lineno\"> 1849</span>&#160;        <span class=\"comment\">// ywzw</span></div>\n<div class=\"line\"><a name=\"l01850\"></a><span class=\"lineno\"> 1850</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01851\"></a><span class=\"lineno\"> 1851</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01852\"></a><span class=\"lineno\"> 1852</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l01853\"></a><span class=\"lineno\"> 1853</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01854\"></a><span class=\"lineno\"> 1854</span>&#160;</div>\n<div class=\"line\"><a name=\"l01855\"></a><span class=\"lineno\"> 1855</span>&#160;        <span class=\"comment\">// ywwx</span></div>\n<div class=\"line\"><a name=\"l01856\"></a><span class=\"lineno\"> 1856</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01857\"></a><span class=\"lineno\"> 1857</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01858\"></a><span class=\"lineno\"> 1858</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l01859\"></a><span class=\"lineno\"> 1859</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01860\"></a><span class=\"lineno\"> 1860</span>&#160;</div>\n<div class=\"line\"><a name=\"l01861\"></a><span class=\"lineno\"> 1861</span>&#160;        <span class=\"comment\">// ywwy</span></div>\n<div class=\"line\"><a name=\"l01862\"></a><span class=\"lineno\"> 1862</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01863\"></a><span class=\"lineno\"> 1863</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01864\"></a><span class=\"lineno\"> 1864</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l01865\"></a><span class=\"lineno\"> 1865</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01866\"></a><span class=\"lineno\"> 1866</span>&#160;</div>\n<div class=\"line\"><a name=\"l01867\"></a><span class=\"lineno\"> 1867</span>&#160;        <span class=\"comment\">// ywwz</span></div>\n<div class=\"line\"><a name=\"l01868\"></a><span class=\"lineno\"> 1868</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01869\"></a><span class=\"lineno\"> 1869</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01870\"></a><span class=\"lineno\"> 1870</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l01871\"></a><span class=\"lineno\"> 1871</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01872\"></a><span class=\"lineno\"> 1872</span>&#160;</div>\n<div class=\"line\"><a name=\"l01873\"></a><span class=\"lineno\"> 1873</span>&#160;        <span class=\"comment\">// ywww</span></div>\n<div class=\"line\"><a name=\"l01874\"></a><span class=\"lineno\"> 1874</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01875\"></a><span class=\"lineno\"> 1875</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; ywww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01876\"></a><span class=\"lineno\"> 1876</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.y, v.w, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l01877\"></a><span class=\"lineno\"> 1877</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01878\"></a><span class=\"lineno\"> 1878</span>&#160;</div>\n<div class=\"line\"><a name=\"l01879\"></a><span class=\"lineno\"> 1879</span>&#160;        <span class=\"comment\">// zxxx</span></div>\n<div class=\"line\"><a name=\"l01880\"></a><span class=\"lineno\"> 1880</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01881\"></a><span class=\"lineno\"> 1881</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01882\"></a><span class=\"lineno\"> 1882</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01883\"></a><span class=\"lineno\"> 1883</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01884\"></a><span class=\"lineno\"> 1884</span>&#160;</div>\n<div class=\"line\"><a name=\"l01885\"></a><span class=\"lineno\"> 1885</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01886\"></a><span class=\"lineno\"> 1886</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01887\"></a><span class=\"lineno\"> 1887</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l01888\"></a><span class=\"lineno\"> 1888</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01889\"></a><span class=\"lineno\"> 1889</span>&#160;</div>\n<div class=\"line\"><a name=\"l01890\"></a><span class=\"lineno\"> 1890</span>&#160;        <span class=\"comment\">// zxxy</span></div>\n<div class=\"line\"><a name=\"l01891\"></a><span class=\"lineno\"> 1891</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01892\"></a><span class=\"lineno\"> 1892</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01893\"></a><span class=\"lineno\"> 1893</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01894\"></a><span class=\"lineno\"> 1894</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01895\"></a><span class=\"lineno\"> 1895</span>&#160;</div>\n<div class=\"line\"><a name=\"l01896\"></a><span class=\"lineno\"> 1896</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01897\"></a><span class=\"lineno\"> 1897</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01898\"></a><span class=\"lineno\"> 1898</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l01899\"></a><span class=\"lineno\"> 1899</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01900\"></a><span class=\"lineno\"> 1900</span>&#160;</div>\n<div class=\"line\"><a name=\"l01901\"></a><span class=\"lineno\"> 1901</span>&#160;        <span class=\"comment\">// zxxz</span></div>\n<div class=\"line\"><a name=\"l01902\"></a><span class=\"lineno\"> 1902</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01903\"></a><span class=\"lineno\"> 1903</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01904\"></a><span class=\"lineno\"> 1904</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01905\"></a><span class=\"lineno\"> 1905</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01906\"></a><span class=\"lineno\"> 1906</span>&#160;</div>\n<div class=\"line\"><a name=\"l01907\"></a><span class=\"lineno\"> 1907</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01908\"></a><span class=\"lineno\"> 1908</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01909\"></a><span class=\"lineno\"> 1909</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l01910\"></a><span class=\"lineno\"> 1910</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01911\"></a><span class=\"lineno\"> 1911</span>&#160;</div>\n<div class=\"line\"><a name=\"l01912\"></a><span class=\"lineno\"> 1912</span>&#160;        <span class=\"comment\">// zxxw</span></div>\n<div class=\"line\"><a name=\"l01913\"></a><span class=\"lineno\"> 1913</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01914\"></a><span class=\"lineno\"> 1914</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01915\"></a><span class=\"lineno\"> 1915</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l01916\"></a><span class=\"lineno\"> 1916</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01917\"></a><span class=\"lineno\"> 1917</span>&#160;</div>\n<div class=\"line\"><a name=\"l01918\"></a><span class=\"lineno\"> 1918</span>&#160;        <span class=\"comment\">// zxyx</span></div>\n<div class=\"line\"><a name=\"l01919\"></a><span class=\"lineno\"> 1919</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01920\"></a><span class=\"lineno\"> 1920</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01921\"></a><span class=\"lineno\"> 1921</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01922\"></a><span class=\"lineno\"> 1922</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01923\"></a><span class=\"lineno\"> 1923</span>&#160;</div>\n<div class=\"line\"><a name=\"l01924\"></a><span class=\"lineno\"> 1924</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01925\"></a><span class=\"lineno\"> 1925</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01926\"></a><span class=\"lineno\"> 1926</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l01927\"></a><span class=\"lineno\"> 1927</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01928\"></a><span class=\"lineno\"> 1928</span>&#160;</div>\n<div class=\"line\"><a name=\"l01929\"></a><span class=\"lineno\"> 1929</span>&#160;        <span class=\"comment\">// zxyy</span></div>\n<div class=\"line\"><a name=\"l01930\"></a><span class=\"lineno\"> 1930</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01931\"></a><span class=\"lineno\"> 1931</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01932\"></a><span class=\"lineno\"> 1932</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01933\"></a><span class=\"lineno\"> 1933</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01934\"></a><span class=\"lineno\"> 1934</span>&#160;</div>\n<div class=\"line\"><a name=\"l01935\"></a><span class=\"lineno\"> 1935</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01936\"></a><span class=\"lineno\"> 1936</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01937\"></a><span class=\"lineno\"> 1937</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l01938\"></a><span class=\"lineno\"> 1938</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01939\"></a><span class=\"lineno\"> 1939</span>&#160;</div>\n<div class=\"line\"><a name=\"l01940\"></a><span class=\"lineno\"> 1940</span>&#160;        <span class=\"comment\">// zxyz</span></div>\n<div class=\"line\"><a name=\"l01941\"></a><span class=\"lineno\"> 1941</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01942\"></a><span class=\"lineno\"> 1942</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01943\"></a><span class=\"lineno\"> 1943</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01944\"></a><span class=\"lineno\"> 1944</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01945\"></a><span class=\"lineno\"> 1945</span>&#160;</div>\n<div class=\"line\"><a name=\"l01946\"></a><span class=\"lineno\"> 1946</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01947\"></a><span class=\"lineno\"> 1947</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01948\"></a><span class=\"lineno\"> 1948</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l01949\"></a><span class=\"lineno\"> 1949</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01950\"></a><span class=\"lineno\"> 1950</span>&#160;</div>\n<div class=\"line\"><a name=\"l01951\"></a><span class=\"lineno\"> 1951</span>&#160;        <span class=\"comment\">// zxyw</span></div>\n<div class=\"line\"><a name=\"l01952\"></a><span class=\"lineno\"> 1952</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01953\"></a><span class=\"lineno\"> 1953</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01954\"></a><span class=\"lineno\"> 1954</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l01955\"></a><span class=\"lineno\"> 1955</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01956\"></a><span class=\"lineno\"> 1956</span>&#160;</div>\n<div class=\"line\"><a name=\"l01957\"></a><span class=\"lineno\"> 1957</span>&#160;        <span class=\"comment\">// zxzx</span></div>\n<div class=\"line\"><a name=\"l01958\"></a><span class=\"lineno\"> 1958</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01959\"></a><span class=\"lineno\"> 1959</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01960\"></a><span class=\"lineno\"> 1960</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01961\"></a><span class=\"lineno\"> 1961</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01962\"></a><span class=\"lineno\"> 1962</span>&#160;</div>\n<div class=\"line\"><a name=\"l01963\"></a><span class=\"lineno\"> 1963</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01964\"></a><span class=\"lineno\"> 1964</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01965\"></a><span class=\"lineno\"> 1965</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l01966\"></a><span class=\"lineno\"> 1966</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01967\"></a><span class=\"lineno\"> 1967</span>&#160;</div>\n<div class=\"line\"><a name=\"l01968\"></a><span class=\"lineno\"> 1968</span>&#160;        <span class=\"comment\">// zxzy</span></div>\n<div class=\"line\"><a name=\"l01969\"></a><span class=\"lineno\"> 1969</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01970\"></a><span class=\"lineno\"> 1970</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01971\"></a><span class=\"lineno\"> 1971</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01972\"></a><span class=\"lineno\"> 1972</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01973\"></a><span class=\"lineno\"> 1973</span>&#160;</div>\n<div class=\"line\"><a name=\"l01974\"></a><span class=\"lineno\"> 1974</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01975\"></a><span class=\"lineno\"> 1975</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01976\"></a><span class=\"lineno\"> 1976</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l01977\"></a><span class=\"lineno\"> 1977</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01978\"></a><span class=\"lineno\"> 1978</span>&#160;</div>\n<div class=\"line\"><a name=\"l01979\"></a><span class=\"lineno\"> 1979</span>&#160;        <span class=\"comment\">// zxzz</span></div>\n<div class=\"line\"><a name=\"l01980\"></a><span class=\"lineno\"> 1980</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01981\"></a><span class=\"lineno\"> 1981</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01982\"></a><span class=\"lineno\"> 1982</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01983\"></a><span class=\"lineno\"> 1983</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01984\"></a><span class=\"lineno\"> 1984</span>&#160;</div>\n<div class=\"line\"><a name=\"l01985\"></a><span class=\"lineno\"> 1985</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01986\"></a><span class=\"lineno\"> 1986</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01987\"></a><span class=\"lineno\"> 1987</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l01988\"></a><span class=\"lineno\"> 1988</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01989\"></a><span class=\"lineno\"> 1989</span>&#160;</div>\n<div class=\"line\"><a name=\"l01990\"></a><span class=\"lineno\"> 1990</span>&#160;        <span class=\"comment\">// zxzw</span></div>\n<div class=\"line\"><a name=\"l01991\"></a><span class=\"lineno\"> 1991</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01992\"></a><span class=\"lineno\"> 1992</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01993\"></a><span class=\"lineno\"> 1993</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l01994\"></a><span class=\"lineno\"> 1994</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l01995\"></a><span class=\"lineno\"> 1995</span>&#160;</div>\n<div class=\"line\"><a name=\"l01996\"></a><span class=\"lineno\"> 1996</span>&#160;        <span class=\"comment\">// zxwx</span></div>\n<div class=\"line\"><a name=\"l01997\"></a><span class=\"lineno\"> 1997</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l01998\"></a><span class=\"lineno\"> 1998</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l01999\"></a><span class=\"lineno\"> 1999</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l02000\"></a><span class=\"lineno\"> 2000</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02001\"></a><span class=\"lineno\"> 2001</span>&#160;</div>\n<div class=\"line\"><a name=\"l02002\"></a><span class=\"lineno\"> 2002</span>&#160;        <span class=\"comment\">// zxwy</span></div>\n<div class=\"line\"><a name=\"l02003\"></a><span class=\"lineno\"> 2003</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02004\"></a><span class=\"lineno\"> 2004</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02005\"></a><span class=\"lineno\"> 2005</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l02006\"></a><span class=\"lineno\"> 2006</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02007\"></a><span class=\"lineno\"> 2007</span>&#160;</div>\n<div class=\"line\"><a name=\"l02008\"></a><span class=\"lineno\"> 2008</span>&#160;        <span class=\"comment\">// zxwz</span></div>\n<div class=\"line\"><a name=\"l02009\"></a><span class=\"lineno\"> 2009</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02010\"></a><span class=\"lineno\"> 2010</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02011\"></a><span class=\"lineno\"> 2011</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l02012\"></a><span class=\"lineno\"> 2012</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02013\"></a><span class=\"lineno\"> 2013</span>&#160;</div>\n<div class=\"line\"><a name=\"l02014\"></a><span class=\"lineno\"> 2014</span>&#160;        <span class=\"comment\">// zxww</span></div>\n<div class=\"line\"><a name=\"l02015\"></a><span class=\"lineno\"> 2015</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02016\"></a><span class=\"lineno\"> 2016</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zxww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02017\"></a><span class=\"lineno\"> 2017</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.x, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l02018\"></a><span class=\"lineno\"> 2018</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02019\"></a><span class=\"lineno\"> 2019</span>&#160;</div>\n<div class=\"line\"><a name=\"l02020\"></a><span class=\"lineno\"> 2020</span>&#160;        <span class=\"comment\">// zyxx</span></div>\n<div class=\"line\"><a name=\"l02021\"></a><span class=\"lineno\"> 2021</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02022\"></a><span class=\"lineno\"> 2022</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02023\"></a><span class=\"lineno\"> 2023</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02024\"></a><span class=\"lineno\"> 2024</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02025\"></a><span class=\"lineno\"> 2025</span>&#160;</div>\n<div class=\"line\"><a name=\"l02026\"></a><span class=\"lineno\"> 2026</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02027\"></a><span class=\"lineno\"> 2027</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02028\"></a><span class=\"lineno\"> 2028</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02029\"></a><span class=\"lineno\"> 2029</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02030\"></a><span class=\"lineno\"> 2030</span>&#160;</div>\n<div class=\"line\"><a name=\"l02031\"></a><span class=\"lineno\"> 2031</span>&#160;        <span class=\"comment\">// zyxy</span></div>\n<div class=\"line\"><a name=\"l02032\"></a><span class=\"lineno\"> 2032</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02033\"></a><span class=\"lineno\"> 2033</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02034\"></a><span class=\"lineno\"> 2034</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02035\"></a><span class=\"lineno\"> 2035</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02036\"></a><span class=\"lineno\"> 2036</span>&#160;</div>\n<div class=\"line\"><a name=\"l02037\"></a><span class=\"lineno\"> 2037</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02038\"></a><span class=\"lineno\"> 2038</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02039\"></a><span class=\"lineno\"> 2039</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02040\"></a><span class=\"lineno\"> 2040</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02041\"></a><span class=\"lineno\"> 2041</span>&#160;</div>\n<div class=\"line\"><a name=\"l02042\"></a><span class=\"lineno\"> 2042</span>&#160;        <span class=\"comment\">// zyxz</span></div>\n<div class=\"line\"><a name=\"l02043\"></a><span class=\"lineno\"> 2043</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02044\"></a><span class=\"lineno\"> 2044</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02045\"></a><span class=\"lineno\"> 2045</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02046\"></a><span class=\"lineno\"> 2046</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02047\"></a><span class=\"lineno\"> 2047</span>&#160;</div>\n<div class=\"line\"><a name=\"l02048\"></a><span class=\"lineno\"> 2048</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02049\"></a><span class=\"lineno\"> 2049</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02050\"></a><span class=\"lineno\"> 2050</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02051\"></a><span class=\"lineno\"> 2051</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02052\"></a><span class=\"lineno\"> 2052</span>&#160;</div>\n<div class=\"line\"><a name=\"l02053\"></a><span class=\"lineno\"> 2053</span>&#160;        <span class=\"comment\">// zyxw</span></div>\n<div class=\"line\"><a name=\"l02054\"></a><span class=\"lineno\"> 2054</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02055\"></a><span class=\"lineno\"> 2055</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02056\"></a><span class=\"lineno\"> 2056</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l02057\"></a><span class=\"lineno\"> 2057</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02058\"></a><span class=\"lineno\"> 2058</span>&#160;</div>\n<div class=\"line\"><a name=\"l02059\"></a><span class=\"lineno\"> 2059</span>&#160;        <span class=\"comment\">// zyyx</span></div>\n<div class=\"line\"><a name=\"l02060\"></a><span class=\"lineno\"> 2060</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02061\"></a><span class=\"lineno\"> 2061</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02062\"></a><span class=\"lineno\"> 2062</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02063\"></a><span class=\"lineno\"> 2063</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02064\"></a><span class=\"lineno\"> 2064</span>&#160;</div>\n<div class=\"line\"><a name=\"l02065\"></a><span class=\"lineno\"> 2065</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02066\"></a><span class=\"lineno\"> 2066</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02067\"></a><span class=\"lineno\"> 2067</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02068\"></a><span class=\"lineno\"> 2068</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02069\"></a><span class=\"lineno\"> 2069</span>&#160;</div>\n<div class=\"line\"><a name=\"l02070\"></a><span class=\"lineno\"> 2070</span>&#160;        <span class=\"comment\">// zyyy</span></div>\n<div class=\"line\"><a name=\"l02071\"></a><span class=\"lineno\"> 2071</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02072\"></a><span class=\"lineno\"> 2072</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02073\"></a><span class=\"lineno\"> 2073</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02074\"></a><span class=\"lineno\"> 2074</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02075\"></a><span class=\"lineno\"> 2075</span>&#160;</div>\n<div class=\"line\"><a name=\"l02076\"></a><span class=\"lineno\"> 2076</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02077\"></a><span class=\"lineno\"> 2077</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02078\"></a><span class=\"lineno\"> 2078</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02079\"></a><span class=\"lineno\"> 2079</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02080\"></a><span class=\"lineno\"> 2080</span>&#160;</div>\n<div class=\"line\"><a name=\"l02081\"></a><span class=\"lineno\"> 2081</span>&#160;        <span class=\"comment\">// zyyz</span></div>\n<div class=\"line\"><a name=\"l02082\"></a><span class=\"lineno\"> 2082</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02083\"></a><span class=\"lineno\"> 2083</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02084\"></a><span class=\"lineno\"> 2084</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02085\"></a><span class=\"lineno\"> 2085</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02086\"></a><span class=\"lineno\"> 2086</span>&#160;</div>\n<div class=\"line\"><a name=\"l02087\"></a><span class=\"lineno\"> 2087</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02088\"></a><span class=\"lineno\"> 2088</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02089\"></a><span class=\"lineno\"> 2089</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02090\"></a><span class=\"lineno\"> 2090</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02091\"></a><span class=\"lineno\"> 2091</span>&#160;</div>\n<div class=\"line\"><a name=\"l02092\"></a><span class=\"lineno\"> 2092</span>&#160;        <span class=\"comment\">// zyyw</span></div>\n<div class=\"line\"><a name=\"l02093\"></a><span class=\"lineno\"> 2093</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02094\"></a><span class=\"lineno\"> 2094</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02095\"></a><span class=\"lineno\"> 2095</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l02096\"></a><span class=\"lineno\"> 2096</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02097\"></a><span class=\"lineno\"> 2097</span>&#160;</div>\n<div class=\"line\"><a name=\"l02098\"></a><span class=\"lineno\"> 2098</span>&#160;        <span class=\"comment\">// zyzx</span></div>\n<div class=\"line\"><a name=\"l02099\"></a><span class=\"lineno\"> 2099</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02100\"></a><span class=\"lineno\"> 2100</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02101\"></a><span class=\"lineno\"> 2101</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02102\"></a><span class=\"lineno\"> 2102</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02103\"></a><span class=\"lineno\"> 2103</span>&#160;</div>\n<div class=\"line\"><a name=\"l02104\"></a><span class=\"lineno\"> 2104</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02105\"></a><span class=\"lineno\"> 2105</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02106\"></a><span class=\"lineno\"> 2106</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02107\"></a><span class=\"lineno\"> 2107</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02108\"></a><span class=\"lineno\"> 2108</span>&#160;</div>\n<div class=\"line\"><a name=\"l02109\"></a><span class=\"lineno\"> 2109</span>&#160;        <span class=\"comment\">// zyzy</span></div>\n<div class=\"line\"><a name=\"l02110\"></a><span class=\"lineno\"> 2110</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02111\"></a><span class=\"lineno\"> 2111</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02112\"></a><span class=\"lineno\"> 2112</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02113\"></a><span class=\"lineno\"> 2113</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02114\"></a><span class=\"lineno\"> 2114</span>&#160;</div>\n<div class=\"line\"><a name=\"l02115\"></a><span class=\"lineno\"> 2115</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02116\"></a><span class=\"lineno\"> 2116</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02117\"></a><span class=\"lineno\"> 2117</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02118\"></a><span class=\"lineno\"> 2118</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02119\"></a><span class=\"lineno\"> 2119</span>&#160;</div>\n<div class=\"line\"><a name=\"l02120\"></a><span class=\"lineno\"> 2120</span>&#160;        <span class=\"comment\">// zyzz</span></div>\n<div class=\"line\"><a name=\"l02121\"></a><span class=\"lineno\"> 2121</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02122\"></a><span class=\"lineno\"> 2122</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02123\"></a><span class=\"lineno\"> 2123</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02124\"></a><span class=\"lineno\"> 2124</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02125\"></a><span class=\"lineno\"> 2125</span>&#160;</div>\n<div class=\"line\"><a name=\"l02126\"></a><span class=\"lineno\"> 2126</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02127\"></a><span class=\"lineno\"> 2127</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02128\"></a><span class=\"lineno\"> 2128</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02129\"></a><span class=\"lineno\"> 2129</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02130\"></a><span class=\"lineno\"> 2130</span>&#160;</div>\n<div class=\"line\"><a name=\"l02131\"></a><span class=\"lineno\"> 2131</span>&#160;        <span class=\"comment\">// zyzw</span></div>\n<div class=\"line\"><a name=\"l02132\"></a><span class=\"lineno\"> 2132</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02133\"></a><span class=\"lineno\"> 2133</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02134\"></a><span class=\"lineno\"> 2134</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l02135\"></a><span class=\"lineno\"> 2135</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02136\"></a><span class=\"lineno\"> 2136</span>&#160;</div>\n<div class=\"line\"><a name=\"l02137\"></a><span class=\"lineno\"> 2137</span>&#160;        <span class=\"comment\">// zywx</span></div>\n<div class=\"line\"><a name=\"l02138\"></a><span class=\"lineno\"> 2138</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02139\"></a><span class=\"lineno\"> 2139</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zywx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02140\"></a><span class=\"lineno\"> 2140</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l02141\"></a><span class=\"lineno\"> 2141</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02142\"></a><span class=\"lineno\"> 2142</span>&#160;</div>\n<div class=\"line\"><a name=\"l02143\"></a><span class=\"lineno\"> 2143</span>&#160;        <span class=\"comment\">// zywy</span></div>\n<div class=\"line\"><a name=\"l02144\"></a><span class=\"lineno\"> 2144</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02145\"></a><span class=\"lineno\"> 2145</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zywy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02146\"></a><span class=\"lineno\"> 2146</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l02147\"></a><span class=\"lineno\"> 2147</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02148\"></a><span class=\"lineno\"> 2148</span>&#160;</div>\n<div class=\"line\"><a name=\"l02149\"></a><span class=\"lineno\"> 2149</span>&#160;        <span class=\"comment\">// zywz</span></div>\n<div class=\"line\"><a name=\"l02150\"></a><span class=\"lineno\"> 2150</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02151\"></a><span class=\"lineno\"> 2151</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zywz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02152\"></a><span class=\"lineno\"> 2152</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l02153\"></a><span class=\"lineno\"> 2153</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02154\"></a><span class=\"lineno\"> 2154</span>&#160;</div>\n<div class=\"line\"><a name=\"l02155\"></a><span class=\"lineno\"> 2155</span>&#160;        <span class=\"comment\">// zyww</span></div>\n<div class=\"line\"><a name=\"l02156\"></a><span class=\"lineno\"> 2156</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02157\"></a><span class=\"lineno\"> 2157</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zyww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02158\"></a><span class=\"lineno\"> 2158</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.y, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l02159\"></a><span class=\"lineno\"> 2159</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02160\"></a><span class=\"lineno\"> 2160</span>&#160;</div>\n<div class=\"line\"><a name=\"l02161\"></a><span class=\"lineno\"> 2161</span>&#160;        <span class=\"comment\">// zzxx</span></div>\n<div class=\"line\"><a name=\"l02162\"></a><span class=\"lineno\"> 2162</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02163\"></a><span class=\"lineno\"> 2163</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzxx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02164\"></a><span class=\"lineno\"> 2164</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02165\"></a><span class=\"lineno\"> 2165</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02166\"></a><span class=\"lineno\"> 2166</span>&#160;</div>\n<div class=\"line\"><a name=\"l02167\"></a><span class=\"lineno\"> 2167</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02168\"></a><span class=\"lineno\"> 2168</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02169\"></a><span class=\"lineno\"> 2169</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02170\"></a><span class=\"lineno\"> 2170</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02171\"></a><span class=\"lineno\"> 2171</span>&#160;</div>\n<div class=\"line\"><a name=\"l02172\"></a><span class=\"lineno\"> 2172</span>&#160;        <span class=\"comment\">// zzxy</span></div>\n<div class=\"line\"><a name=\"l02173\"></a><span class=\"lineno\"> 2173</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02174\"></a><span class=\"lineno\"> 2174</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzxy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02175\"></a><span class=\"lineno\"> 2175</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02176\"></a><span class=\"lineno\"> 2176</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02177\"></a><span class=\"lineno\"> 2177</span>&#160;</div>\n<div class=\"line\"><a name=\"l02178\"></a><span class=\"lineno\"> 2178</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02179\"></a><span class=\"lineno\"> 2179</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02180\"></a><span class=\"lineno\"> 2180</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02181\"></a><span class=\"lineno\"> 2181</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02182\"></a><span class=\"lineno\"> 2182</span>&#160;</div>\n<div class=\"line\"><a name=\"l02183\"></a><span class=\"lineno\"> 2183</span>&#160;        <span class=\"comment\">// zzxz</span></div>\n<div class=\"line\"><a name=\"l02184\"></a><span class=\"lineno\"> 2184</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02185\"></a><span class=\"lineno\"> 2185</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzxz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02186\"></a><span class=\"lineno\"> 2186</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02187\"></a><span class=\"lineno\"> 2187</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02188\"></a><span class=\"lineno\"> 2188</span>&#160;</div>\n<div class=\"line\"><a name=\"l02189\"></a><span class=\"lineno\"> 2189</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02190\"></a><span class=\"lineno\"> 2190</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02191\"></a><span class=\"lineno\"> 2191</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02192\"></a><span class=\"lineno\"> 2192</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02193\"></a><span class=\"lineno\"> 2193</span>&#160;</div>\n<div class=\"line\"><a name=\"l02194\"></a><span class=\"lineno\"> 2194</span>&#160;        <span class=\"comment\">// zzxw</span></div>\n<div class=\"line\"><a name=\"l02195\"></a><span class=\"lineno\"> 2195</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02196\"></a><span class=\"lineno\"> 2196</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02197\"></a><span class=\"lineno\"> 2197</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l02198\"></a><span class=\"lineno\"> 2198</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02199\"></a><span class=\"lineno\"> 2199</span>&#160;</div>\n<div class=\"line\"><a name=\"l02200\"></a><span class=\"lineno\"> 2200</span>&#160;        <span class=\"comment\">// zzyx</span></div>\n<div class=\"line\"><a name=\"l02201\"></a><span class=\"lineno\"> 2201</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02202\"></a><span class=\"lineno\"> 2202</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzyx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02203\"></a><span class=\"lineno\"> 2203</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02204\"></a><span class=\"lineno\"> 2204</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02205\"></a><span class=\"lineno\"> 2205</span>&#160;</div>\n<div class=\"line\"><a name=\"l02206\"></a><span class=\"lineno\"> 2206</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02207\"></a><span class=\"lineno\"> 2207</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02208\"></a><span class=\"lineno\"> 2208</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02209\"></a><span class=\"lineno\"> 2209</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02210\"></a><span class=\"lineno\"> 2210</span>&#160;</div>\n<div class=\"line\"><a name=\"l02211\"></a><span class=\"lineno\"> 2211</span>&#160;        <span class=\"comment\">// zzyy</span></div>\n<div class=\"line\"><a name=\"l02212\"></a><span class=\"lineno\"> 2212</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02213\"></a><span class=\"lineno\"> 2213</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzyy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02214\"></a><span class=\"lineno\"> 2214</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02215\"></a><span class=\"lineno\"> 2215</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02216\"></a><span class=\"lineno\"> 2216</span>&#160;</div>\n<div class=\"line\"><a name=\"l02217\"></a><span class=\"lineno\"> 2217</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02218\"></a><span class=\"lineno\"> 2218</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02219\"></a><span class=\"lineno\"> 2219</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02220\"></a><span class=\"lineno\"> 2220</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02221\"></a><span class=\"lineno\"> 2221</span>&#160;</div>\n<div class=\"line\"><a name=\"l02222\"></a><span class=\"lineno\"> 2222</span>&#160;        <span class=\"comment\">// zzyz</span></div>\n<div class=\"line\"><a name=\"l02223\"></a><span class=\"lineno\"> 2223</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02224\"></a><span class=\"lineno\"> 2224</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzyz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02225\"></a><span class=\"lineno\"> 2225</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02226\"></a><span class=\"lineno\"> 2226</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02227\"></a><span class=\"lineno\"> 2227</span>&#160;</div>\n<div class=\"line\"><a name=\"l02228\"></a><span class=\"lineno\"> 2228</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02229\"></a><span class=\"lineno\"> 2229</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02230\"></a><span class=\"lineno\"> 2230</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02231\"></a><span class=\"lineno\"> 2231</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02232\"></a><span class=\"lineno\"> 2232</span>&#160;</div>\n<div class=\"line\"><a name=\"l02233\"></a><span class=\"lineno\"> 2233</span>&#160;        <span class=\"comment\">// zzyw</span></div>\n<div class=\"line\"><a name=\"l02234\"></a><span class=\"lineno\"> 2234</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02235\"></a><span class=\"lineno\"> 2235</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02236\"></a><span class=\"lineno\"> 2236</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l02237\"></a><span class=\"lineno\"> 2237</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02238\"></a><span class=\"lineno\"> 2238</span>&#160;</div>\n<div class=\"line\"><a name=\"l02239\"></a><span class=\"lineno\"> 2239</span>&#160;        <span class=\"comment\">// zzzx</span></div>\n<div class=\"line\"><a name=\"l02240\"></a><span class=\"lineno\"> 2240</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02241\"></a><span class=\"lineno\"> 2241</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzzx(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02242\"></a><span class=\"lineno\"> 2242</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02243\"></a><span class=\"lineno\"> 2243</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02244\"></a><span class=\"lineno\"> 2244</span>&#160;</div>\n<div class=\"line\"><a name=\"l02245\"></a><span class=\"lineno\"> 2245</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02246\"></a><span class=\"lineno\"> 2246</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02247\"></a><span class=\"lineno\"> 2247</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02248\"></a><span class=\"lineno\"> 2248</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02249\"></a><span class=\"lineno\"> 2249</span>&#160;</div>\n<div class=\"line\"><a name=\"l02250\"></a><span class=\"lineno\"> 2250</span>&#160;        <span class=\"comment\">// zzzy</span></div>\n<div class=\"line\"><a name=\"l02251\"></a><span class=\"lineno\"> 2251</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02252\"></a><span class=\"lineno\"> 2252</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzzy(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02253\"></a><span class=\"lineno\"> 2253</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02254\"></a><span class=\"lineno\"> 2254</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02255\"></a><span class=\"lineno\"> 2255</span>&#160;</div>\n<div class=\"line\"><a name=\"l02256\"></a><span class=\"lineno\"> 2256</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02257\"></a><span class=\"lineno\"> 2257</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02258\"></a><span class=\"lineno\"> 2258</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02259\"></a><span class=\"lineno\"> 2259</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02260\"></a><span class=\"lineno\"> 2260</span>&#160;</div>\n<div class=\"line\"><a name=\"l02261\"></a><span class=\"lineno\"> 2261</span>&#160;        <span class=\"comment\">// zzzz</span></div>\n<div class=\"line\"><a name=\"l02262\"></a><span class=\"lineno\"> 2262</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02263\"></a><span class=\"lineno\"> 2263</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzzz(<span class=\"keyword\">const</span> glm::vec&lt;3, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02264\"></a><span class=\"lineno\"> 2264</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02265\"></a><span class=\"lineno\"> 2265</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02266\"></a><span class=\"lineno\"> 2266</span>&#160;</div>\n<div class=\"line\"><a name=\"l02267\"></a><span class=\"lineno\"> 2267</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02268\"></a><span class=\"lineno\"> 2268</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02269\"></a><span class=\"lineno\"> 2269</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02270\"></a><span class=\"lineno\"> 2270</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02271\"></a><span class=\"lineno\"> 2271</span>&#160;</div>\n<div class=\"line\"><a name=\"l02272\"></a><span class=\"lineno\"> 2272</span>&#160;        <span class=\"comment\">// zzzw</span></div>\n<div class=\"line\"><a name=\"l02273\"></a><span class=\"lineno\"> 2273</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02274\"></a><span class=\"lineno\"> 2274</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02275\"></a><span class=\"lineno\"> 2275</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l02276\"></a><span class=\"lineno\"> 2276</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02277\"></a><span class=\"lineno\"> 2277</span>&#160;</div>\n<div class=\"line\"><a name=\"l02278\"></a><span class=\"lineno\"> 2278</span>&#160;        <span class=\"comment\">// zzwx</span></div>\n<div class=\"line\"><a name=\"l02279\"></a><span class=\"lineno\"> 2279</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02280\"></a><span class=\"lineno\"> 2280</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02281\"></a><span class=\"lineno\"> 2281</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l02282\"></a><span class=\"lineno\"> 2282</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02283\"></a><span class=\"lineno\"> 2283</span>&#160;</div>\n<div class=\"line\"><a name=\"l02284\"></a><span class=\"lineno\"> 2284</span>&#160;        <span class=\"comment\">// zzwy</span></div>\n<div class=\"line\"><a name=\"l02285\"></a><span class=\"lineno\"> 2285</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02286\"></a><span class=\"lineno\"> 2286</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02287\"></a><span class=\"lineno\"> 2287</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l02288\"></a><span class=\"lineno\"> 2288</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02289\"></a><span class=\"lineno\"> 2289</span>&#160;</div>\n<div class=\"line\"><a name=\"l02290\"></a><span class=\"lineno\"> 2290</span>&#160;        <span class=\"comment\">// zzwz</span></div>\n<div class=\"line\"><a name=\"l02291\"></a><span class=\"lineno\"> 2291</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02292\"></a><span class=\"lineno\"> 2292</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02293\"></a><span class=\"lineno\"> 2293</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l02294\"></a><span class=\"lineno\"> 2294</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02295\"></a><span class=\"lineno\"> 2295</span>&#160;</div>\n<div class=\"line\"><a name=\"l02296\"></a><span class=\"lineno\"> 2296</span>&#160;        <span class=\"comment\">// zzww</span></div>\n<div class=\"line\"><a name=\"l02297\"></a><span class=\"lineno\"> 2297</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02298\"></a><span class=\"lineno\"> 2298</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zzww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02299\"></a><span class=\"lineno\"> 2299</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.z, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l02300\"></a><span class=\"lineno\"> 2300</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02301\"></a><span class=\"lineno\"> 2301</span>&#160;</div>\n<div class=\"line\"><a name=\"l02302\"></a><span class=\"lineno\"> 2302</span>&#160;        <span class=\"comment\">// zwxx</span></div>\n<div class=\"line\"><a name=\"l02303\"></a><span class=\"lineno\"> 2303</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02304\"></a><span class=\"lineno\"> 2304</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02305\"></a><span class=\"lineno\"> 2305</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02306\"></a><span class=\"lineno\"> 2306</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02307\"></a><span class=\"lineno\"> 2307</span>&#160;</div>\n<div class=\"line\"><a name=\"l02308\"></a><span class=\"lineno\"> 2308</span>&#160;        <span class=\"comment\">// zwxy</span></div>\n<div class=\"line\"><a name=\"l02309\"></a><span class=\"lineno\"> 2309</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02310\"></a><span class=\"lineno\"> 2310</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02311\"></a><span class=\"lineno\"> 2311</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02312\"></a><span class=\"lineno\"> 2312</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02313\"></a><span class=\"lineno\"> 2313</span>&#160;</div>\n<div class=\"line\"><a name=\"l02314\"></a><span class=\"lineno\"> 2314</span>&#160;        <span class=\"comment\">// zwxz</span></div>\n<div class=\"line\"><a name=\"l02315\"></a><span class=\"lineno\"> 2315</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02316\"></a><span class=\"lineno\"> 2316</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02317\"></a><span class=\"lineno\"> 2317</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02318\"></a><span class=\"lineno\"> 2318</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02319\"></a><span class=\"lineno\"> 2319</span>&#160;</div>\n<div class=\"line\"><a name=\"l02320\"></a><span class=\"lineno\"> 2320</span>&#160;        <span class=\"comment\">// zwxw</span></div>\n<div class=\"line\"><a name=\"l02321\"></a><span class=\"lineno\"> 2321</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02322\"></a><span class=\"lineno\"> 2322</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02323\"></a><span class=\"lineno\"> 2323</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l02324\"></a><span class=\"lineno\"> 2324</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02325\"></a><span class=\"lineno\"> 2325</span>&#160;</div>\n<div class=\"line\"><a name=\"l02326\"></a><span class=\"lineno\"> 2326</span>&#160;        <span class=\"comment\">// zwyx</span></div>\n<div class=\"line\"><a name=\"l02327\"></a><span class=\"lineno\"> 2327</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02328\"></a><span class=\"lineno\"> 2328</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02329\"></a><span class=\"lineno\"> 2329</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02330\"></a><span class=\"lineno\"> 2330</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02331\"></a><span class=\"lineno\"> 2331</span>&#160;</div>\n<div class=\"line\"><a name=\"l02332\"></a><span class=\"lineno\"> 2332</span>&#160;        <span class=\"comment\">// zwyy</span></div>\n<div class=\"line\"><a name=\"l02333\"></a><span class=\"lineno\"> 2333</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02334\"></a><span class=\"lineno\"> 2334</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02335\"></a><span class=\"lineno\"> 2335</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02336\"></a><span class=\"lineno\"> 2336</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02337\"></a><span class=\"lineno\"> 2337</span>&#160;</div>\n<div class=\"line\"><a name=\"l02338\"></a><span class=\"lineno\"> 2338</span>&#160;        <span class=\"comment\">// zwyz</span></div>\n<div class=\"line\"><a name=\"l02339\"></a><span class=\"lineno\"> 2339</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02340\"></a><span class=\"lineno\"> 2340</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02341\"></a><span class=\"lineno\"> 2341</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02342\"></a><span class=\"lineno\"> 2342</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02343\"></a><span class=\"lineno\"> 2343</span>&#160;</div>\n<div class=\"line\"><a name=\"l02344\"></a><span class=\"lineno\"> 2344</span>&#160;        <span class=\"comment\">// zwyw</span></div>\n<div class=\"line\"><a name=\"l02345\"></a><span class=\"lineno\"> 2345</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02346\"></a><span class=\"lineno\"> 2346</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02347\"></a><span class=\"lineno\"> 2347</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l02348\"></a><span class=\"lineno\"> 2348</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02349\"></a><span class=\"lineno\"> 2349</span>&#160;</div>\n<div class=\"line\"><a name=\"l02350\"></a><span class=\"lineno\"> 2350</span>&#160;        <span class=\"comment\">// zwzx</span></div>\n<div class=\"line\"><a name=\"l02351\"></a><span class=\"lineno\"> 2351</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02352\"></a><span class=\"lineno\"> 2352</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02353\"></a><span class=\"lineno\"> 2353</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02354\"></a><span class=\"lineno\"> 2354</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02355\"></a><span class=\"lineno\"> 2355</span>&#160;</div>\n<div class=\"line\"><a name=\"l02356\"></a><span class=\"lineno\"> 2356</span>&#160;        <span class=\"comment\">// zwzy</span></div>\n<div class=\"line\"><a name=\"l02357\"></a><span class=\"lineno\"> 2357</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02358\"></a><span class=\"lineno\"> 2358</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02359\"></a><span class=\"lineno\"> 2359</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02360\"></a><span class=\"lineno\"> 2360</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02361\"></a><span class=\"lineno\"> 2361</span>&#160;</div>\n<div class=\"line\"><a name=\"l02362\"></a><span class=\"lineno\"> 2362</span>&#160;        <span class=\"comment\">// zwzz</span></div>\n<div class=\"line\"><a name=\"l02363\"></a><span class=\"lineno\"> 2363</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02364\"></a><span class=\"lineno\"> 2364</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02365\"></a><span class=\"lineno\"> 2365</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02366\"></a><span class=\"lineno\"> 2366</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02367\"></a><span class=\"lineno\"> 2367</span>&#160;</div>\n<div class=\"line\"><a name=\"l02368\"></a><span class=\"lineno\"> 2368</span>&#160;        <span class=\"comment\">// zwzw</span></div>\n<div class=\"line\"><a name=\"l02369\"></a><span class=\"lineno\"> 2369</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02370\"></a><span class=\"lineno\"> 2370</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02371\"></a><span class=\"lineno\"> 2371</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l02372\"></a><span class=\"lineno\"> 2372</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02373\"></a><span class=\"lineno\"> 2373</span>&#160;</div>\n<div class=\"line\"><a name=\"l02374\"></a><span class=\"lineno\"> 2374</span>&#160;        <span class=\"comment\">// zwwx</span></div>\n<div class=\"line\"><a name=\"l02375\"></a><span class=\"lineno\"> 2375</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02376\"></a><span class=\"lineno\"> 2376</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02377\"></a><span class=\"lineno\"> 2377</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l02378\"></a><span class=\"lineno\"> 2378</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02379\"></a><span class=\"lineno\"> 2379</span>&#160;</div>\n<div class=\"line\"><a name=\"l02380\"></a><span class=\"lineno\"> 2380</span>&#160;        <span class=\"comment\">// zwwy</span></div>\n<div class=\"line\"><a name=\"l02381\"></a><span class=\"lineno\"> 2381</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02382\"></a><span class=\"lineno\"> 2382</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02383\"></a><span class=\"lineno\"> 2383</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l02384\"></a><span class=\"lineno\"> 2384</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02385\"></a><span class=\"lineno\"> 2385</span>&#160;</div>\n<div class=\"line\"><a name=\"l02386\"></a><span class=\"lineno\"> 2386</span>&#160;        <span class=\"comment\">// zwwz</span></div>\n<div class=\"line\"><a name=\"l02387\"></a><span class=\"lineno\"> 2387</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02388\"></a><span class=\"lineno\"> 2388</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02389\"></a><span class=\"lineno\"> 2389</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l02390\"></a><span class=\"lineno\"> 2390</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02391\"></a><span class=\"lineno\"> 2391</span>&#160;</div>\n<div class=\"line\"><a name=\"l02392\"></a><span class=\"lineno\"> 2392</span>&#160;        <span class=\"comment\">// zwww</span></div>\n<div class=\"line\"><a name=\"l02393\"></a><span class=\"lineno\"> 2393</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02394\"></a><span class=\"lineno\"> 2394</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; zwww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02395\"></a><span class=\"lineno\"> 2395</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.z, v.w, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l02396\"></a><span class=\"lineno\"> 2396</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02397\"></a><span class=\"lineno\"> 2397</span>&#160;</div>\n<div class=\"line\"><a name=\"l02398\"></a><span class=\"lineno\"> 2398</span>&#160;        <span class=\"comment\">// wxxx</span></div>\n<div class=\"line\"><a name=\"l02399\"></a><span class=\"lineno\"> 2399</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02400\"></a><span class=\"lineno\"> 2400</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02401\"></a><span class=\"lineno\"> 2401</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02402\"></a><span class=\"lineno\"> 2402</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02403\"></a><span class=\"lineno\"> 2403</span>&#160;</div>\n<div class=\"line\"><a name=\"l02404\"></a><span class=\"lineno\"> 2404</span>&#160;        <span class=\"comment\">// wxxy</span></div>\n<div class=\"line\"><a name=\"l02405\"></a><span class=\"lineno\"> 2405</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02406\"></a><span class=\"lineno\"> 2406</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02407\"></a><span class=\"lineno\"> 2407</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02408\"></a><span class=\"lineno\"> 2408</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02409\"></a><span class=\"lineno\"> 2409</span>&#160;</div>\n<div class=\"line\"><a name=\"l02410\"></a><span class=\"lineno\"> 2410</span>&#160;        <span class=\"comment\">// wxxz</span></div>\n<div class=\"line\"><a name=\"l02411\"></a><span class=\"lineno\"> 2411</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02412\"></a><span class=\"lineno\"> 2412</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02413\"></a><span class=\"lineno\"> 2413</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02414\"></a><span class=\"lineno\"> 2414</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02415\"></a><span class=\"lineno\"> 2415</span>&#160;</div>\n<div class=\"line\"><a name=\"l02416\"></a><span class=\"lineno\"> 2416</span>&#160;        <span class=\"comment\">// wxxw</span></div>\n<div class=\"line\"><a name=\"l02417\"></a><span class=\"lineno\"> 2417</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02418\"></a><span class=\"lineno\"> 2418</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02419\"></a><span class=\"lineno\"> 2419</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l02420\"></a><span class=\"lineno\"> 2420</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02421\"></a><span class=\"lineno\"> 2421</span>&#160;</div>\n<div class=\"line\"><a name=\"l02422\"></a><span class=\"lineno\"> 2422</span>&#160;        <span class=\"comment\">// wxyx</span></div>\n<div class=\"line\"><a name=\"l02423\"></a><span class=\"lineno\"> 2423</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02424\"></a><span class=\"lineno\"> 2424</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02425\"></a><span class=\"lineno\"> 2425</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02426\"></a><span class=\"lineno\"> 2426</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02427\"></a><span class=\"lineno\"> 2427</span>&#160;</div>\n<div class=\"line\"><a name=\"l02428\"></a><span class=\"lineno\"> 2428</span>&#160;        <span class=\"comment\">// wxyy</span></div>\n<div class=\"line\"><a name=\"l02429\"></a><span class=\"lineno\"> 2429</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02430\"></a><span class=\"lineno\"> 2430</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02431\"></a><span class=\"lineno\"> 2431</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02432\"></a><span class=\"lineno\"> 2432</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02433\"></a><span class=\"lineno\"> 2433</span>&#160;</div>\n<div class=\"line\"><a name=\"l02434\"></a><span class=\"lineno\"> 2434</span>&#160;        <span class=\"comment\">// wxyz</span></div>\n<div class=\"line\"><a name=\"l02435\"></a><span class=\"lineno\"> 2435</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02436\"></a><span class=\"lineno\"> 2436</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02437\"></a><span class=\"lineno\"> 2437</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02438\"></a><span class=\"lineno\"> 2438</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02439\"></a><span class=\"lineno\"> 2439</span>&#160;</div>\n<div class=\"line\"><a name=\"l02440\"></a><span class=\"lineno\"> 2440</span>&#160;        <span class=\"comment\">// wxyw</span></div>\n<div class=\"line\"><a name=\"l02441\"></a><span class=\"lineno\"> 2441</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02442\"></a><span class=\"lineno\"> 2442</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02443\"></a><span class=\"lineno\"> 2443</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l02444\"></a><span class=\"lineno\"> 2444</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02445\"></a><span class=\"lineno\"> 2445</span>&#160;</div>\n<div class=\"line\"><a name=\"l02446\"></a><span class=\"lineno\"> 2446</span>&#160;        <span class=\"comment\">// wxzx</span></div>\n<div class=\"line\"><a name=\"l02447\"></a><span class=\"lineno\"> 2447</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02448\"></a><span class=\"lineno\"> 2448</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02449\"></a><span class=\"lineno\"> 2449</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02450\"></a><span class=\"lineno\"> 2450</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02451\"></a><span class=\"lineno\"> 2451</span>&#160;</div>\n<div class=\"line\"><a name=\"l02452\"></a><span class=\"lineno\"> 2452</span>&#160;        <span class=\"comment\">// wxzy</span></div>\n<div class=\"line\"><a name=\"l02453\"></a><span class=\"lineno\"> 2453</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02454\"></a><span class=\"lineno\"> 2454</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02455\"></a><span class=\"lineno\"> 2455</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02456\"></a><span class=\"lineno\"> 2456</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02457\"></a><span class=\"lineno\"> 2457</span>&#160;</div>\n<div class=\"line\"><a name=\"l02458\"></a><span class=\"lineno\"> 2458</span>&#160;        <span class=\"comment\">// wxzz</span></div>\n<div class=\"line\"><a name=\"l02459\"></a><span class=\"lineno\"> 2459</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02460\"></a><span class=\"lineno\"> 2460</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02461\"></a><span class=\"lineno\"> 2461</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02462\"></a><span class=\"lineno\"> 2462</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02463\"></a><span class=\"lineno\"> 2463</span>&#160;</div>\n<div class=\"line\"><a name=\"l02464\"></a><span class=\"lineno\"> 2464</span>&#160;        <span class=\"comment\">// wxzw</span></div>\n<div class=\"line\"><a name=\"l02465\"></a><span class=\"lineno\"> 2465</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02466\"></a><span class=\"lineno\"> 2466</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02467\"></a><span class=\"lineno\"> 2467</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l02468\"></a><span class=\"lineno\"> 2468</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02469\"></a><span class=\"lineno\"> 2469</span>&#160;</div>\n<div class=\"line\"><a name=\"l02470\"></a><span class=\"lineno\"> 2470</span>&#160;        <span class=\"comment\">// wxwx</span></div>\n<div class=\"line\"><a name=\"l02471\"></a><span class=\"lineno\"> 2471</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02472\"></a><span class=\"lineno\"> 2472</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02473\"></a><span class=\"lineno\"> 2473</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l02474\"></a><span class=\"lineno\"> 2474</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02475\"></a><span class=\"lineno\"> 2475</span>&#160;</div>\n<div class=\"line\"><a name=\"l02476\"></a><span class=\"lineno\"> 2476</span>&#160;        <span class=\"comment\">// wxwy</span></div>\n<div class=\"line\"><a name=\"l02477\"></a><span class=\"lineno\"> 2477</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02478\"></a><span class=\"lineno\"> 2478</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02479\"></a><span class=\"lineno\"> 2479</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l02480\"></a><span class=\"lineno\"> 2480</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02481\"></a><span class=\"lineno\"> 2481</span>&#160;</div>\n<div class=\"line\"><a name=\"l02482\"></a><span class=\"lineno\"> 2482</span>&#160;        <span class=\"comment\">// wxwz</span></div>\n<div class=\"line\"><a name=\"l02483\"></a><span class=\"lineno\"> 2483</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02484\"></a><span class=\"lineno\"> 2484</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02485\"></a><span class=\"lineno\"> 2485</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l02486\"></a><span class=\"lineno\"> 2486</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02487\"></a><span class=\"lineno\"> 2487</span>&#160;</div>\n<div class=\"line\"><a name=\"l02488\"></a><span class=\"lineno\"> 2488</span>&#160;        <span class=\"comment\">// wxww</span></div>\n<div class=\"line\"><a name=\"l02489\"></a><span class=\"lineno\"> 2489</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02490\"></a><span class=\"lineno\"> 2490</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wxww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02491\"></a><span class=\"lineno\"> 2491</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.x, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l02492\"></a><span class=\"lineno\"> 2492</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02493\"></a><span class=\"lineno\"> 2493</span>&#160;</div>\n<div class=\"line\"><a name=\"l02494\"></a><span class=\"lineno\"> 2494</span>&#160;        <span class=\"comment\">// wyxx</span></div>\n<div class=\"line\"><a name=\"l02495\"></a><span class=\"lineno\"> 2495</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02496\"></a><span class=\"lineno\"> 2496</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02497\"></a><span class=\"lineno\"> 2497</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02498\"></a><span class=\"lineno\"> 2498</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02499\"></a><span class=\"lineno\"> 2499</span>&#160;</div>\n<div class=\"line\"><a name=\"l02500\"></a><span class=\"lineno\"> 2500</span>&#160;        <span class=\"comment\">// wyxy</span></div>\n<div class=\"line\"><a name=\"l02501\"></a><span class=\"lineno\"> 2501</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02502\"></a><span class=\"lineno\"> 2502</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02503\"></a><span class=\"lineno\"> 2503</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02504\"></a><span class=\"lineno\"> 2504</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02505\"></a><span class=\"lineno\"> 2505</span>&#160;</div>\n<div class=\"line\"><a name=\"l02506\"></a><span class=\"lineno\"> 2506</span>&#160;        <span class=\"comment\">// wyxz</span></div>\n<div class=\"line\"><a name=\"l02507\"></a><span class=\"lineno\"> 2507</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02508\"></a><span class=\"lineno\"> 2508</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02509\"></a><span class=\"lineno\"> 2509</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02510\"></a><span class=\"lineno\"> 2510</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02511\"></a><span class=\"lineno\"> 2511</span>&#160;</div>\n<div class=\"line\"><a name=\"l02512\"></a><span class=\"lineno\"> 2512</span>&#160;        <span class=\"comment\">// wyxw</span></div>\n<div class=\"line\"><a name=\"l02513\"></a><span class=\"lineno\"> 2513</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02514\"></a><span class=\"lineno\"> 2514</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02515\"></a><span class=\"lineno\"> 2515</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l02516\"></a><span class=\"lineno\"> 2516</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02517\"></a><span class=\"lineno\"> 2517</span>&#160;</div>\n<div class=\"line\"><a name=\"l02518\"></a><span class=\"lineno\"> 2518</span>&#160;        <span class=\"comment\">// wyyx</span></div>\n<div class=\"line\"><a name=\"l02519\"></a><span class=\"lineno\"> 2519</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02520\"></a><span class=\"lineno\"> 2520</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02521\"></a><span class=\"lineno\"> 2521</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02522\"></a><span class=\"lineno\"> 2522</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02523\"></a><span class=\"lineno\"> 2523</span>&#160;</div>\n<div class=\"line\"><a name=\"l02524\"></a><span class=\"lineno\"> 2524</span>&#160;        <span class=\"comment\">// wyyy</span></div>\n<div class=\"line\"><a name=\"l02525\"></a><span class=\"lineno\"> 2525</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02526\"></a><span class=\"lineno\"> 2526</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02527\"></a><span class=\"lineno\"> 2527</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02528\"></a><span class=\"lineno\"> 2528</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02529\"></a><span class=\"lineno\"> 2529</span>&#160;</div>\n<div class=\"line\"><a name=\"l02530\"></a><span class=\"lineno\"> 2530</span>&#160;        <span class=\"comment\">// wyyz</span></div>\n<div class=\"line\"><a name=\"l02531\"></a><span class=\"lineno\"> 2531</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02532\"></a><span class=\"lineno\"> 2532</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02533\"></a><span class=\"lineno\"> 2533</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02534\"></a><span class=\"lineno\"> 2534</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02535\"></a><span class=\"lineno\"> 2535</span>&#160;</div>\n<div class=\"line\"><a name=\"l02536\"></a><span class=\"lineno\"> 2536</span>&#160;        <span class=\"comment\">// wyyw</span></div>\n<div class=\"line\"><a name=\"l02537\"></a><span class=\"lineno\"> 2537</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02538\"></a><span class=\"lineno\"> 2538</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02539\"></a><span class=\"lineno\"> 2539</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l02540\"></a><span class=\"lineno\"> 2540</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02541\"></a><span class=\"lineno\"> 2541</span>&#160;</div>\n<div class=\"line\"><a name=\"l02542\"></a><span class=\"lineno\"> 2542</span>&#160;        <span class=\"comment\">// wyzx</span></div>\n<div class=\"line\"><a name=\"l02543\"></a><span class=\"lineno\"> 2543</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02544\"></a><span class=\"lineno\"> 2544</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02545\"></a><span class=\"lineno\"> 2545</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02546\"></a><span class=\"lineno\"> 2546</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02547\"></a><span class=\"lineno\"> 2547</span>&#160;</div>\n<div class=\"line\"><a name=\"l02548\"></a><span class=\"lineno\"> 2548</span>&#160;        <span class=\"comment\">// wyzy</span></div>\n<div class=\"line\"><a name=\"l02549\"></a><span class=\"lineno\"> 2549</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02550\"></a><span class=\"lineno\"> 2550</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02551\"></a><span class=\"lineno\"> 2551</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02552\"></a><span class=\"lineno\"> 2552</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02553\"></a><span class=\"lineno\"> 2553</span>&#160;</div>\n<div class=\"line\"><a name=\"l02554\"></a><span class=\"lineno\"> 2554</span>&#160;        <span class=\"comment\">// wyzz</span></div>\n<div class=\"line\"><a name=\"l02555\"></a><span class=\"lineno\"> 2555</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02556\"></a><span class=\"lineno\"> 2556</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02557\"></a><span class=\"lineno\"> 2557</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02558\"></a><span class=\"lineno\"> 2558</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02559\"></a><span class=\"lineno\"> 2559</span>&#160;</div>\n<div class=\"line\"><a name=\"l02560\"></a><span class=\"lineno\"> 2560</span>&#160;        <span class=\"comment\">// wyzw</span></div>\n<div class=\"line\"><a name=\"l02561\"></a><span class=\"lineno\"> 2561</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02562\"></a><span class=\"lineno\"> 2562</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02563\"></a><span class=\"lineno\"> 2563</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l02564\"></a><span class=\"lineno\"> 2564</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02565\"></a><span class=\"lineno\"> 2565</span>&#160;</div>\n<div class=\"line\"><a name=\"l02566\"></a><span class=\"lineno\"> 2566</span>&#160;        <span class=\"comment\">// wywx</span></div>\n<div class=\"line\"><a name=\"l02567\"></a><span class=\"lineno\"> 2567</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02568\"></a><span class=\"lineno\"> 2568</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wywx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02569\"></a><span class=\"lineno\"> 2569</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l02570\"></a><span class=\"lineno\"> 2570</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02571\"></a><span class=\"lineno\"> 2571</span>&#160;</div>\n<div class=\"line\"><a name=\"l02572\"></a><span class=\"lineno\"> 2572</span>&#160;        <span class=\"comment\">// wywy</span></div>\n<div class=\"line\"><a name=\"l02573\"></a><span class=\"lineno\"> 2573</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02574\"></a><span class=\"lineno\"> 2574</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wywy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02575\"></a><span class=\"lineno\"> 2575</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l02576\"></a><span class=\"lineno\"> 2576</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02577\"></a><span class=\"lineno\"> 2577</span>&#160;</div>\n<div class=\"line\"><a name=\"l02578\"></a><span class=\"lineno\"> 2578</span>&#160;        <span class=\"comment\">// wywz</span></div>\n<div class=\"line\"><a name=\"l02579\"></a><span class=\"lineno\"> 2579</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02580\"></a><span class=\"lineno\"> 2580</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wywz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02581\"></a><span class=\"lineno\"> 2581</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l02582\"></a><span class=\"lineno\"> 2582</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02583\"></a><span class=\"lineno\"> 2583</span>&#160;</div>\n<div class=\"line\"><a name=\"l02584\"></a><span class=\"lineno\"> 2584</span>&#160;        <span class=\"comment\">// wyww</span></div>\n<div class=\"line\"><a name=\"l02585\"></a><span class=\"lineno\"> 2585</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02586\"></a><span class=\"lineno\"> 2586</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wyww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02587\"></a><span class=\"lineno\"> 2587</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.y, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l02588\"></a><span class=\"lineno\"> 2588</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02589\"></a><span class=\"lineno\"> 2589</span>&#160;</div>\n<div class=\"line\"><a name=\"l02590\"></a><span class=\"lineno\"> 2590</span>&#160;        <span class=\"comment\">// wzxx</span></div>\n<div class=\"line\"><a name=\"l02591\"></a><span class=\"lineno\"> 2591</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02592\"></a><span class=\"lineno\"> 2592</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02593\"></a><span class=\"lineno\"> 2593</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02594\"></a><span class=\"lineno\"> 2594</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02595\"></a><span class=\"lineno\"> 2595</span>&#160;</div>\n<div class=\"line\"><a name=\"l02596\"></a><span class=\"lineno\"> 2596</span>&#160;        <span class=\"comment\">// wzxy</span></div>\n<div class=\"line\"><a name=\"l02597\"></a><span class=\"lineno\"> 2597</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02598\"></a><span class=\"lineno\"> 2598</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02599\"></a><span class=\"lineno\"> 2599</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02600\"></a><span class=\"lineno\"> 2600</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02601\"></a><span class=\"lineno\"> 2601</span>&#160;</div>\n<div class=\"line\"><a name=\"l02602\"></a><span class=\"lineno\"> 2602</span>&#160;        <span class=\"comment\">// wzxz</span></div>\n<div class=\"line\"><a name=\"l02603\"></a><span class=\"lineno\"> 2603</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02604\"></a><span class=\"lineno\"> 2604</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02605\"></a><span class=\"lineno\"> 2605</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02606\"></a><span class=\"lineno\"> 2606</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02607\"></a><span class=\"lineno\"> 2607</span>&#160;</div>\n<div class=\"line\"><a name=\"l02608\"></a><span class=\"lineno\"> 2608</span>&#160;        <span class=\"comment\">// wzxw</span></div>\n<div class=\"line\"><a name=\"l02609\"></a><span class=\"lineno\"> 2609</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02610\"></a><span class=\"lineno\"> 2610</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02611\"></a><span class=\"lineno\"> 2611</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l02612\"></a><span class=\"lineno\"> 2612</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02613\"></a><span class=\"lineno\"> 2613</span>&#160;</div>\n<div class=\"line\"><a name=\"l02614\"></a><span class=\"lineno\"> 2614</span>&#160;        <span class=\"comment\">// wzyx</span></div>\n<div class=\"line\"><a name=\"l02615\"></a><span class=\"lineno\"> 2615</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02616\"></a><span class=\"lineno\"> 2616</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02617\"></a><span class=\"lineno\"> 2617</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02618\"></a><span class=\"lineno\"> 2618</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02619\"></a><span class=\"lineno\"> 2619</span>&#160;</div>\n<div class=\"line\"><a name=\"l02620\"></a><span class=\"lineno\"> 2620</span>&#160;        <span class=\"comment\">// wzyy</span></div>\n<div class=\"line\"><a name=\"l02621\"></a><span class=\"lineno\"> 2621</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02622\"></a><span class=\"lineno\"> 2622</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02623\"></a><span class=\"lineno\"> 2623</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02624\"></a><span class=\"lineno\"> 2624</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02625\"></a><span class=\"lineno\"> 2625</span>&#160;</div>\n<div class=\"line\"><a name=\"l02626\"></a><span class=\"lineno\"> 2626</span>&#160;        <span class=\"comment\">// wzyz</span></div>\n<div class=\"line\"><a name=\"l02627\"></a><span class=\"lineno\"> 2627</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02628\"></a><span class=\"lineno\"> 2628</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02629\"></a><span class=\"lineno\"> 2629</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02630\"></a><span class=\"lineno\"> 2630</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02631\"></a><span class=\"lineno\"> 2631</span>&#160;</div>\n<div class=\"line\"><a name=\"l02632\"></a><span class=\"lineno\"> 2632</span>&#160;        <span class=\"comment\">// wzyw</span></div>\n<div class=\"line\"><a name=\"l02633\"></a><span class=\"lineno\"> 2633</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02634\"></a><span class=\"lineno\"> 2634</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02635\"></a><span class=\"lineno\"> 2635</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l02636\"></a><span class=\"lineno\"> 2636</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02637\"></a><span class=\"lineno\"> 2637</span>&#160;</div>\n<div class=\"line\"><a name=\"l02638\"></a><span class=\"lineno\"> 2638</span>&#160;        <span class=\"comment\">// wzzx</span></div>\n<div class=\"line\"><a name=\"l02639\"></a><span class=\"lineno\"> 2639</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02640\"></a><span class=\"lineno\"> 2640</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02641\"></a><span class=\"lineno\"> 2641</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02642\"></a><span class=\"lineno\"> 2642</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02643\"></a><span class=\"lineno\"> 2643</span>&#160;</div>\n<div class=\"line\"><a name=\"l02644\"></a><span class=\"lineno\"> 2644</span>&#160;        <span class=\"comment\">// wzzy</span></div>\n<div class=\"line\"><a name=\"l02645\"></a><span class=\"lineno\"> 2645</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02646\"></a><span class=\"lineno\"> 2646</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02647\"></a><span class=\"lineno\"> 2647</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02648\"></a><span class=\"lineno\"> 2648</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02649\"></a><span class=\"lineno\"> 2649</span>&#160;</div>\n<div class=\"line\"><a name=\"l02650\"></a><span class=\"lineno\"> 2650</span>&#160;        <span class=\"comment\">// wzzz</span></div>\n<div class=\"line\"><a name=\"l02651\"></a><span class=\"lineno\"> 2651</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02652\"></a><span class=\"lineno\"> 2652</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02653\"></a><span class=\"lineno\"> 2653</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02654\"></a><span class=\"lineno\"> 2654</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02655\"></a><span class=\"lineno\"> 2655</span>&#160;</div>\n<div class=\"line\"><a name=\"l02656\"></a><span class=\"lineno\"> 2656</span>&#160;        <span class=\"comment\">// wzzw</span></div>\n<div class=\"line\"><a name=\"l02657\"></a><span class=\"lineno\"> 2657</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02658\"></a><span class=\"lineno\"> 2658</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02659\"></a><span class=\"lineno\"> 2659</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l02660\"></a><span class=\"lineno\"> 2660</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02661\"></a><span class=\"lineno\"> 2661</span>&#160;</div>\n<div class=\"line\"><a name=\"l02662\"></a><span class=\"lineno\"> 2662</span>&#160;        <span class=\"comment\">// wzwx</span></div>\n<div class=\"line\"><a name=\"l02663\"></a><span class=\"lineno\"> 2663</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02664\"></a><span class=\"lineno\"> 2664</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02665\"></a><span class=\"lineno\"> 2665</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l02666\"></a><span class=\"lineno\"> 2666</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02667\"></a><span class=\"lineno\"> 2667</span>&#160;</div>\n<div class=\"line\"><a name=\"l02668\"></a><span class=\"lineno\"> 2668</span>&#160;        <span class=\"comment\">// wzwy</span></div>\n<div class=\"line\"><a name=\"l02669\"></a><span class=\"lineno\"> 2669</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02670\"></a><span class=\"lineno\"> 2670</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02671\"></a><span class=\"lineno\"> 2671</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l02672\"></a><span class=\"lineno\"> 2672</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02673\"></a><span class=\"lineno\"> 2673</span>&#160;</div>\n<div class=\"line\"><a name=\"l02674\"></a><span class=\"lineno\"> 2674</span>&#160;        <span class=\"comment\">// wzwz</span></div>\n<div class=\"line\"><a name=\"l02675\"></a><span class=\"lineno\"> 2675</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02676\"></a><span class=\"lineno\"> 2676</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02677\"></a><span class=\"lineno\"> 2677</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l02678\"></a><span class=\"lineno\"> 2678</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02679\"></a><span class=\"lineno\"> 2679</span>&#160;</div>\n<div class=\"line\"><a name=\"l02680\"></a><span class=\"lineno\"> 2680</span>&#160;        <span class=\"comment\">// wzww</span></div>\n<div class=\"line\"><a name=\"l02681\"></a><span class=\"lineno\"> 2681</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02682\"></a><span class=\"lineno\"> 2682</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wzww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02683\"></a><span class=\"lineno\"> 2683</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.z, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l02684\"></a><span class=\"lineno\"> 2684</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02685\"></a><span class=\"lineno\"> 2685</span>&#160;</div>\n<div class=\"line\"><a name=\"l02686\"></a><span class=\"lineno\"> 2686</span>&#160;        <span class=\"comment\">// wwxx</span></div>\n<div class=\"line\"><a name=\"l02687\"></a><span class=\"lineno\"> 2687</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02688\"></a><span class=\"lineno\"> 2688</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwxx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02689\"></a><span class=\"lineno\"> 2689</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.x, v.x);</div>\n<div class=\"line\"><a name=\"l02690\"></a><span class=\"lineno\"> 2690</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02691\"></a><span class=\"lineno\"> 2691</span>&#160;</div>\n<div class=\"line\"><a name=\"l02692\"></a><span class=\"lineno\"> 2692</span>&#160;        <span class=\"comment\">// wwxy</span></div>\n<div class=\"line\"><a name=\"l02693\"></a><span class=\"lineno\"> 2693</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02694\"></a><span class=\"lineno\"> 2694</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwxy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02695\"></a><span class=\"lineno\"> 2695</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.x, v.y);</div>\n<div class=\"line\"><a name=\"l02696\"></a><span class=\"lineno\"> 2696</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02697\"></a><span class=\"lineno\"> 2697</span>&#160;</div>\n<div class=\"line\"><a name=\"l02698\"></a><span class=\"lineno\"> 2698</span>&#160;        <span class=\"comment\">// wwxz</span></div>\n<div class=\"line\"><a name=\"l02699\"></a><span class=\"lineno\"> 2699</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02700\"></a><span class=\"lineno\"> 2700</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwxz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02701\"></a><span class=\"lineno\"> 2701</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.x, v.z);</div>\n<div class=\"line\"><a name=\"l02702\"></a><span class=\"lineno\"> 2702</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02703\"></a><span class=\"lineno\"> 2703</span>&#160;</div>\n<div class=\"line\"><a name=\"l02704\"></a><span class=\"lineno\"> 2704</span>&#160;        <span class=\"comment\">// wwxw</span></div>\n<div class=\"line\"><a name=\"l02705\"></a><span class=\"lineno\"> 2705</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02706\"></a><span class=\"lineno\"> 2706</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwxw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02707\"></a><span class=\"lineno\"> 2707</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.x, v.w);</div>\n<div class=\"line\"><a name=\"l02708\"></a><span class=\"lineno\"> 2708</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02709\"></a><span class=\"lineno\"> 2709</span>&#160;</div>\n<div class=\"line\"><a name=\"l02710\"></a><span class=\"lineno\"> 2710</span>&#160;        <span class=\"comment\">// wwyx</span></div>\n<div class=\"line\"><a name=\"l02711\"></a><span class=\"lineno\"> 2711</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02712\"></a><span class=\"lineno\"> 2712</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwyx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02713\"></a><span class=\"lineno\"> 2713</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.y, v.x);</div>\n<div class=\"line\"><a name=\"l02714\"></a><span class=\"lineno\"> 2714</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02715\"></a><span class=\"lineno\"> 2715</span>&#160;</div>\n<div class=\"line\"><a name=\"l02716\"></a><span class=\"lineno\"> 2716</span>&#160;        <span class=\"comment\">// wwyy</span></div>\n<div class=\"line\"><a name=\"l02717\"></a><span class=\"lineno\"> 2717</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02718\"></a><span class=\"lineno\"> 2718</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwyy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02719\"></a><span class=\"lineno\"> 2719</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.y, v.y);</div>\n<div class=\"line\"><a name=\"l02720\"></a><span class=\"lineno\"> 2720</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02721\"></a><span class=\"lineno\"> 2721</span>&#160;</div>\n<div class=\"line\"><a name=\"l02722\"></a><span class=\"lineno\"> 2722</span>&#160;        <span class=\"comment\">// wwyz</span></div>\n<div class=\"line\"><a name=\"l02723\"></a><span class=\"lineno\"> 2723</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02724\"></a><span class=\"lineno\"> 2724</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwyz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02725\"></a><span class=\"lineno\"> 2725</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.y, v.z);</div>\n<div class=\"line\"><a name=\"l02726\"></a><span class=\"lineno\"> 2726</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02727\"></a><span class=\"lineno\"> 2727</span>&#160;</div>\n<div class=\"line\"><a name=\"l02728\"></a><span class=\"lineno\"> 2728</span>&#160;        <span class=\"comment\">// wwyw</span></div>\n<div class=\"line\"><a name=\"l02729\"></a><span class=\"lineno\"> 2729</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02730\"></a><span class=\"lineno\"> 2730</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwyw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02731\"></a><span class=\"lineno\"> 2731</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.y, v.w);</div>\n<div class=\"line\"><a name=\"l02732\"></a><span class=\"lineno\"> 2732</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02733\"></a><span class=\"lineno\"> 2733</span>&#160;</div>\n<div class=\"line\"><a name=\"l02734\"></a><span class=\"lineno\"> 2734</span>&#160;        <span class=\"comment\">// wwzx</span></div>\n<div class=\"line\"><a name=\"l02735\"></a><span class=\"lineno\"> 2735</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02736\"></a><span class=\"lineno\"> 2736</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwzx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02737\"></a><span class=\"lineno\"> 2737</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.z, v.x);</div>\n<div class=\"line\"><a name=\"l02738\"></a><span class=\"lineno\"> 2738</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02739\"></a><span class=\"lineno\"> 2739</span>&#160;</div>\n<div class=\"line\"><a name=\"l02740\"></a><span class=\"lineno\"> 2740</span>&#160;        <span class=\"comment\">// wwzy</span></div>\n<div class=\"line\"><a name=\"l02741\"></a><span class=\"lineno\"> 2741</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02742\"></a><span class=\"lineno\"> 2742</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwzy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02743\"></a><span class=\"lineno\"> 2743</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.z, v.y);</div>\n<div class=\"line\"><a name=\"l02744\"></a><span class=\"lineno\"> 2744</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02745\"></a><span class=\"lineno\"> 2745</span>&#160;</div>\n<div class=\"line\"><a name=\"l02746\"></a><span class=\"lineno\"> 2746</span>&#160;        <span class=\"comment\">// wwzz</span></div>\n<div class=\"line\"><a name=\"l02747\"></a><span class=\"lineno\"> 2747</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02748\"></a><span class=\"lineno\"> 2748</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwzz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02749\"></a><span class=\"lineno\"> 2749</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.z, v.z);</div>\n<div class=\"line\"><a name=\"l02750\"></a><span class=\"lineno\"> 2750</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02751\"></a><span class=\"lineno\"> 2751</span>&#160;</div>\n<div class=\"line\"><a name=\"l02752\"></a><span class=\"lineno\"> 2752</span>&#160;        <span class=\"comment\">// wwzw</span></div>\n<div class=\"line\"><a name=\"l02753\"></a><span class=\"lineno\"> 2753</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02754\"></a><span class=\"lineno\"> 2754</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwzw(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02755\"></a><span class=\"lineno\"> 2755</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.z, v.w);</div>\n<div class=\"line\"><a name=\"l02756\"></a><span class=\"lineno\"> 2756</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02757\"></a><span class=\"lineno\"> 2757</span>&#160;</div>\n<div class=\"line\"><a name=\"l02758\"></a><span class=\"lineno\"> 2758</span>&#160;        <span class=\"comment\">// wwwx</span></div>\n<div class=\"line\"><a name=\"l02759\"></a><span class=\"lineno\"> 2759</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02760\"></a><span class=\"lineno\"> 2760</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwwx(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02761\"></a><span class=\"lineno\"> 2761</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.w, v.x);</div>\n<div class=\"line\"><a name=\"l02762\"></a><span class=\"lineno\"> 2762</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02763\"></a><span class=\"lineno\"> 2763</span>&#160;</div>\n<div class=\"line\"><a name=\"l02764\"></a><span class=\"lineno\"> 2764</span>&#160;        <span class=\"comment\">// wwwy</span></div>\n<div class=\"line\"><a name=\"l02765\"></a><span class=\"lineno\"> 2765</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02766\"></a><span class=\"lineno\"> 2766</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwwy(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02767\"></a><span class=\"lineno\"> 2767</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.w, v.y);</div>\n<div class=\"line\"><a name=\"l02768\"></a><span class=\"lineno\"> 2768</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02769\"></a><span class=\"lineno\"> 2769</span>&#160;</div>\n<div class=\"line\"><a name=\"l02770\"></a><span class=\"lineno\"> 2770</span>&#160;        <span class=\"comment\">// wwwz</span></div>\n<div class=\"line\"><a name=\"l02771\"></a><span class=\"lineno\"> 2771</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02772\"></a><span class=\"lineno\"> 2772</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwwz(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02773\"></a><span class=\"lineno\"> 2773</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.w, v.z);</div>\n<div class=\"line\"><a name=\"l02774\"></a><span class=\"lineno\"> 2774</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02775\"></a><span class=\"lineno\"> 2775</span>&#160;</div>\n<div class=\"line\"><a name=\"l02776\"></a><span class=\"lineno\"> 2776</span>&#160;        <span class=\"comment\">// wwww</span></div>\n<div class=\"line\"><a name=\"l02777\"></a><span class=\"lineno\"> 2777</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l02778\"></a><span class=\"lineno\"> 2778</span>&#160;        GLM_INLINE glm::vec&lt;4, T, Q&gt; wwww(<span class=\"keyword\">const</span> glm::vec&lt;4, T, Q&gt; &amp;v) {</div>\n<div class=\"line\"><a name=\"l02779\"></a><span class=\"lineno\"> 2779</span>&#160;                <span class=\"keywordflow\">return</span> glm::vec&lt;4, T, Q&gt;(v.w, v.w, v.w, v.w);</div>\n<div class=\"line\"><a name=\"l02780\"></a><span class=\"lineno\"> 2780</span>&#160;        }</div>\n<div class=\"line\"><a name=\"l02781\"></a><span class=\"lineno\"> 2781</span>&#160;</div>\n<div class=\"line\"><a name=\"l02782\"></a><span class=\"lineno\"> 2782</span>&#160;}</div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00188.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_angle.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_angle.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00367.html\">GLM_GTX_vector_angle</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00188_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2e2917b4cb75ca3d043ac15ff88f14e1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2e2917b4cb75ca3d043ac15ff88f14e1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1\">angle</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga2e2917b4cb75ca3d043ac15ff88f14e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the absolute angle between two vectors.  <a href=\"a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e2917b4cb75ca3d043ac15ff88f14e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9556a803dce87fe0f42fdabe4ebba1d5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9556a803dce87fe0f42fdabe4ebba1d5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00367.html#ga9556a803dce87fe0f42fdabe4ebba1d5\">orientedAngle</a> (vec&lt; 2, T, Q &gt; const &amp;x, vec&lt; 2, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga9556a803dce87fe0f42fdabe4ebba1d5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the oriented angle between two 2d vectors.  <a href=\"a00367.html#ga9556a803dce87fe0f42fdabe4ebba1d5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9556a803dce87fe0f42fdabe4ebba1d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga706fce3d111f485839756a64f5a48553\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga706fce3d111f485839756a64f5a48553\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00367.html#ga706fce3d111f485839756a64f5a48553\">orientedAngle</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, vec&lt; 3, T, Q &gt; const &amp;ref)</td></tr>\n<tr class=\"memdesc:ga706fce3d111f485839756a64f5a48553\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the oriented angle between two 3d vectors based from a reference axis.  <a href=\"a00367.html#ga706fce3d111f485839756a64f5a48553\">More...</a><br /></td></tr>\n<tr class=\"separator:ga706fce3d111f485839756a64f5a48553\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00367.html\">GLM_GTX_vector_angle</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> (dependence) </dd>\n<dd>\ngtx_epsilon (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00188_source.html\">vector_angle.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00188_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_angle.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_angle.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00188.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/epsilon.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/quaternion.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../gtx/rotate_vector.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_vector_angle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_vector_angle extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1\">angle</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00367.html#ga706fce3d111f485839756a64f5a48553\">orientedAngle</a>(vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;2, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;        GLM_FUNC_DECL T <a class=\"code\" href=\"a00367.html#ga706fce3d111f485839756a64f5a48553\">orientedAngle</a>(vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;3, T, Q&gt; <span class=\"keyword\">const</span>&amp; ref);</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;<span class=\"preprocessor\">#include &quot;vector_angle.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00367_html_ga706fce3d111f485839756a64f5a48553\"><div class=\"ttname\"><a href=\"a00367.html#ga706fce3d111f485839756a64f5a48553\">glm::orientedAngle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T orientedAngle(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, vec&lt; 3, T, Q &gt; const &amp;ref)</div><div class=\"ttdoc\">Returns the oriented angle between two 3d vectors based from a reference axis. </div></div>\n<div class=\"ttc\" id=\"a00367_html_ga2e2917b4cb75ca3d043ac15ff88f14e1\"><div class=\"ttname\"><a href=\"a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1\">glm::angle</a></div><div class=\"ttdeci\">GLM_FUNC_DECL T angle(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the absolute angle between two vectors. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00189.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool1.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool1.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00265.html\">GLM_EXT_vector_bool1</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00189_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga067af382616d93f8e850baae5154cdcc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga067af382616d93f8e850baae5154cdcc\"></a>\ntypedef vec&lt; 1, bool, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00265.html#ga067af382616d93f8e850baae5154cdcc\">bvec1</a></td></tr>\n<tr class=\"memdesc:ga067af382616d93f8e850baae5154cdcc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 components vector of boolean. <br /></td></tr>\n<tr class=\"separator:ga067af382616d93f8e850baae5154cdcc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00265.html\">GLM_EXT_vector_bool1</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00189_source.html\">vector_bool1.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00189_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool1.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool1.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00189.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_bool1 extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00265.html#ga067af382616d93f8e850baae5154cdcc\">   27</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, defaultp&gt;          <a class=\"code\" href=\"a00265.html#ga067af382616d93f8e850baae5154cdcc\">bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00265_html_ga067af382616d93f8e850baae5154cdcc\"><div class=\"ttname\"><a href=\"a00265.html#ga067af382616d93f8e850baae5154cdcc\">glm::bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, defaultp &gt; bvec1</div><div class=\"ttdoc\">1 components vector of boolean. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00189_source.html#l00027\">vector_bool1.hpp:27</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00190.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool1_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool1_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00266.html\">GLM_EXT_vector_bool1_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00190_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gae8a1e14abae1387274f57741750c06a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae8a1e14abae1387274f57741750c06a2\"></a>\ntypedef vec&lt; 1, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00266.html#gae8a1e14abae1387274f57741750c06a2\">highp_bvec1</a></td></tr>\n<tr class=\"memdesc:gae8a1e14abae1387274f57741750c06a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of bool values. <br /></td></tr>\n<tr class=\"separator:gae8a1e14abae1387274f57741750c06a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24a3d364e2ddd444f5b9e7975bbef8f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga24a3d364e2ddd444f5b9e7975bbef8f9\"></a>\ntypedef vec&lt; 1, bool, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9\">lowp_bvec1</a></td></tr>\n<tr class=\"memdesc:ga24a3d364e2ddd444f5b9e7975bbef8f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of bool values. <br /></td></tr>\n<tr class=\"separator:ga24a3d364e2ddd444f5b9e7975bbef8f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b4ccb989ba179fa44f7b0879c782621\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7b4ccb989ba179fa44f7b0879c782621\"></a>\ntypedef vec&lt; 1, bool, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00266.html#ga7b4ccb989ba179fa44f7b0879c782621\">mediump_bvec1</a></td></tr>\n<tr class=\"memdesc:ga7b4ccb989ba179fa44f7b0879c782621\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of bool values. <br /></td></tr>\n<tr class=\"separator:ga7b4ccb989ba179fa44f7b0879c782621\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00266.html\">GLM_EXT_vector_bool1_precision</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00190_source.html\">vector_bool1_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00190_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool1_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool1_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00190.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_bool1_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00266.html#gae8a1e14abae1387274f57741750c06a2\">   25</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, highp&gt;                     <a class=\"code\" href=\"a00266.html#gae8a1e14abae1387274f57741750c06a2\">highp_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00266.html#ga7b4ccb989ba179fa44f7b0879c782621\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, mediump&gt;           <a class=\"code\" href=\"a00266.html#ga7b4ccb989ba179fa44f7b0879c782621\">mediump_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9\">   31</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, bool, lowp&gt;                      <a class=\"code\" href=\"a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9\">lowp_bvec1</a>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00266_html_gae8a1e14abae1387274f57741750c06a2\"><div class=\"ttname\"><a href=\"a00266.html#gae8a1e14abae1387274f57741750c06a2\">glm::highp_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, highp &gt; highp_bvec1</div><div class=\"ttdoc\">1 component vector of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00190_source.html#l00025\">vector_bool1_precision.hpp:25</a></div></div>\n<div class=\"ttc\" id=\"a00266_html_ga7b4ccb989ba179fa44f7b0879c782621\"><div class=\"ttname\"><a href=\"a00266.html#ga7b4ccb989ba179fa44f7b0879c782621\">glm::mediump_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, mediump &gt; mediump_bvec1</div><div class=\"ttdoc\">1 component vector of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00190_source.html#l00028\">vector_bool1_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00266_html_ga24a3d364e2ddd444f5b9e7975bbef8f9\"><div class=\"ttname\"><a href=\"a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9\">glm::lowp_bvec1</a></div><div class=\"ttdeci\">vec&lt; 1, bool, lowp &gt; lowp_bvec1</div><div class=\"ttdoc\">1 component vector of bool values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00190_source.html#l00031\">vector_bool1_precision.hpp:31</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00191.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00191_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga0b6123e03653cc1bbe366fc55238a934\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, bool, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">bvec2</a></td></tr>\n<tr class=\"memdesc:ga0b6123e03653cc1bbe366fc55238a934\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of boolean.  <a href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b6123e03653cc1bbe366fc55238a934\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00191_source.html\">vector_bool2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00191_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00191.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, defaultp&gt;          <a class=\"code\" href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga0b6123e03653cc1bbe366fc55238a934\"><div class=\"ttname\"><a href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">glm::bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, defaultp &gt; bvec2</div><div class=\"ttdoc\">2 components vector of boolean. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00191_source.html#l00015\">vector_bool2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00192.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00192_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gac6c781a85f012d77a75310a3058702c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">highp_bvec2</a></td></tr>\n<tr class=\"memdesc:gac6c781a85f012d77a75310a3058702c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high qualifier bool numbers.  <a href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">More...</a><br /></td></tr>\n<tr class=\"separator:gac6c781a85f012d77a75310a3058702c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a5452140650988b94d5716e4d872465\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, bool, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">lowp_bvec2</a></td></tr>\n<tr class=\"memdesc:ga5a5452140650988b94d5716e4d872465\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low qualifier bool numbers.  <a href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5a5452140650988b94d5716e4d872465\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1e743764869efa9223c2bcefccedaddc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, bool, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">mediump_bvec2</a></td></tr>\n<tr class=\"memdesc:ga1e743764869efa9223c2bcefccedaddc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium qualifier bool numbers.  <a href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e743764869efa9223c2bcefccedaddc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00192_source.html\">vector_bool2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00192_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00192.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, highp&gt;             <a class=\"code\" href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">highp_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, mediump&gt;   <a class=\"code\" href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">mediump_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, bool, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">lowp_bvec2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_gac6c781a85f012d77a75310a3058702c2\"><div class=\"ttname\"><a href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">glm::highp_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, highp &gt; highp_bvec2</div><div class=\"ttdoc\">2 components vector of high qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00192_source.html#l00016\">vector_bool2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga1e743764869efa9223c2bcefccedaddc\"><div class=\"ttname\"><a href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">glm::mediump_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, mediump &gt; mediump_bvec2</div><div class=\"ttdoc\">2 components vector of medium qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00192_source.html#l00022\">vector_bool2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga5a5452140650988b94d5716e4d872465\"><div class=\"ttname\"><a href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">glm::lowp_bvec2</a></div><div class=\"ttdeci\">vec&lt; 2, bool, lowp &gt; lowp_bvec2</div><div class=\"ttdoc\">2 components vector of low qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00192_source.html#l00028\">vector_bool2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00193.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00193_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga197151b72dfaf289daf98b361760ffe7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, bool, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">bvec3</a></td></tr>\n<tr class=\"memdesc:ga197151b72dfaf289daf98b361760ffe7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of boolean.  <a href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga197151b72dfaf289daf98b361760ffe7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00193_source.html\">vector_bool3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00193_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00193.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, defaultp&gt;          <a class=\"code\" href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga197151b72dfaf289daf98b361760ffe7\"><div class=\"ttname\"><a href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">glm::bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, defaultp &gt; bvec3</div><div class=\"ttdoc\">3 components vector of boolean. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00193_source.html#l00015\">vector_bool3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00194.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00194_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaedb70027d89a0a405046aefda4eabaa6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">highp_bvec3</a></td></tr>\n<tr class=\"memdesc:gaedb70027d89a0a405046aefda4eabaa6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high qualifier bool numbers.  <a href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaedb70027d89a0a405046aefda4eabaa6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga79e0922a977662a8fd39d7829be3908b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, bool, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">lowp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga79e0922a977662a8fd39d7829be3908b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low qualifier bool numbers.  <a href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga79e0922a977662a8fd39d7829be3908b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50c783c25082882ef00fe2e5cddba4aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, bool, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">mediump_bvec3</a></td></tr>\n<tr class=\"memdesc:ga50c783c25082882ef00fe2e5cddba4aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium qualifier bool numbers.  <a href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50c783c25082882ef00fe2e5cddba4aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00194_source.html\">vector_bool3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00194_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00194.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, highp&gt;             <a class=\"code\" href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">highp_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, mediump&gt;   <a class=\"code\" href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">mediump_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, bool, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">lowp_bvec3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga50c783c25082882ef00fe2e5cddba4aa\"><div class=\"ttname\"><a href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">glm::mediump_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, mediump &gt; mediump_bvec3</div><div class=\"ttdoc\">3 components vector of medium qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00194_source.html#l00022\">vector_bool3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaedb70027d89a0a405046aefda4eabaa6\"><div class=\"ttname\"><a href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">glm::highp_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, highp &gt; highp_bvec3</div><div class=\"ttdoc\">3 components vector of high qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00194_source.html#l00016\">vector_bool3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga79e0922a977662a8fd39d7829be3908b\"><div class=\"ttname\"><a href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">glm::lowp_bvec3</a></div><div class=\"ttdeci\">vec&lt; 3, bool, lowp &gt; lowp_bvec3</div><div class=\"ttdoc\">3 components vector of low qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00194_source.html#l00028\">vector_bool3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00195.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00195_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga9f7b9712373ff4342d9114619b55f5e3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, bool, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">bvec4</a></td></tr>\n<tr class=\"memdesc:ga9f7b9712373ff4342d9114619b55f5e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of boolean.  <a href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9f7b9712373ff4342d9114619b55f5e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00195_source.html\">vector_bool4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00195_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00195.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, defaultp&gt;          <a class=\"code\" href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga9f7b9712373ff4342d9114619b55f5e3\"><div class=\"ttname\"><a href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">glm::bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, defaultp &gt; bvec4</div><div class=\"ttdoc\">4 components vector of boolean. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00195_source.html#l00015\">vector_bool4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00196.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00196_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaee663ff64429443ab07a5327074192f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">highp_bvec4</a></td></tr>\n<tr class=\"memdesc:gaee663ff64429443ab07a5327074192f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high qualifier bool numbers.  <a href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee663ff64429443ab07a5327074192f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga15ac87724048ab7169bb5d3572939dd3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, bool, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">lowp_bvec4</a></td></tr>\n<tr class=\"memdesc:ga15ac87724048ab7169bb5d3572939dd3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low qualifier bool numbers.  <a href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga15ac87724048ab7169bb5d3572939dd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0be2c682258604a35004f088782a9645\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, bool, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">mediump_bvec4</a></td></tr>\n<tr class=\"memdesc:ga0be2c682258604a35004f088782a9645\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium qualifier bool numbers.  <a href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0be2c682258604a35004f088782a9645\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00196_source.html\">vector_bool4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00196_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_bool4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_bool4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00196.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, highp&gt;             <a class=\"code\" href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">highp_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, mediump&gt;   <a class=\"code\" href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">mediump_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, bool, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">lowp_bvec4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga15ac87724048ab7169bb5d3572939dd3\"><div class=\"ttname\"><a href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">glm::lowp_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, lowp &gt; lowp_bvec4</div><div class=\"ttdoc\">4 components vector of low qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00196_source.html#l00028\">vector_bool4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga0be2c682258604a35004f088782a9645\"><div class=\"ttname\"><a href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">glm::mediump_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, mediump &gt; mediump_bvec4</div><div class=\"ttdoc\">4 components vector of medium qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00196_source.html#l00022\">vector_bool4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaee663ff64429443ab07a5327074192f6\"><div class=\"ttname\"><a href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">glm::highp_bvec4</a></div><div class=\"ttdeci\">vec&lt; 4, bool, highp &gt; highp_bvec4</div><div class=\"ttdoc\">4 components vector of high qualifier bool numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00196_source.html#l00016\">vector_bool4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00197.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_common.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_common.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00267.html\">GLM_EXT_vector_common</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00197_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad66b6441f7200db16c9f341711733c56\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad66b6441f7200db16c9f341711733c56\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#gad66b6441f7200db16c9f341711733c56\">fmax</a> (vec&lt; L, T, Q &gt; const &amp;a, T b)</td></tr>\n<tr class=\"memdesc:gad66b6441f7200db16c9f341711733c56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00267.html#gad66b6441f7200db16c9f341711733c56\">More...</a><br /></td></tr>\n<tr class=\"separator:gad66b6441f7200db16c9f341711733c56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8df4be3f48d6717c40ea788fd30deebf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8df4be3f48d6717c40ea788fd30deebf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga8df4be3f48d6717c40ea788fd30deebf\">fmax</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga8df4be3f48d6717c40ea788fd30deebf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00267.html#ga8df4be3f48d6717c40ea788fd30deebf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8df4be3f48d6717c40ea788fd30deebf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0f04ba924294dae4234ca93ede23229a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0f04ba924294dae4234ca93ede23229a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga0f04ba924294dae4234ca93ede23229a\">fmax</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:ga0f04ba924294dae4234ca93ede23229a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00267.html#ga0f04ba924294dae4234ca93ede23229a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0f04ba924294dae4234ca93ede23229a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">fmax</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae989203363cff9eab5093630df4fe071\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae989203363cff9eab5093630df4fe071\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#gae989203363cff9eab5093630df4fe071\">fmin</a> (vec&lt; L, T, Q &gt; const &amp;x, T y)</td></tr>\n<tr class=\"memdesc:gae989203363cff9eab5093630df4fe071\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00267.html#gae989203363cff9eab5093630df4fe071\">More...</a><br /></td></tr>\n<tr class=\"separator:gae989203363cff9eab5093630df4fe071\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c42e93cd778c9181d1cdeea4d3e43bd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7c42e93cd778c9181d1cdeea4d3e43bd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga7c42e93cd778c9181d1cdeea4d3e43bd\">fmin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga7c42e93cd778c9181d1cdeea4d3e43bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00267.html#ga7c42e93cd778c9181d1cdeea4d3e43bd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c42e93cd778c9181d1cdeea4d3e43bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7e62739055b49189d9355471f78fe000\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7e62739055b49189d9355471f78fe000\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga7e62739055b49189d9355471f78fe000\">fmin</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:ga7e62739055b49189d9355471f78fe000\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00267.html#ga7e62739055b49189d9355471f78fe000\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7e62739055b49189d9355471f78fe000\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a543dd7d22ad1f3b8b839f808a9d93c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4a543dd7d22ad1f3b8b839f808a9d93c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">fmin</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga4a543dd7d22ad1f3b8b839f808a9d93c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a543dd7d22ad1f3b8b839f808a9d93c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa45d34f6a2906f8bf58ab2ba5429234d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa45d34f6a2906f8bf58ab2ba5429234d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#gaa45d34f6a2906f8bf58ab2ba5429234d\">max</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z)</td></tr>\n<tr class=\"memdesc:gaa45d34f6a2906f8bf58ab2ba5429234d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 3 inputs.  <a href=\"a00267.html#gaa45d34f6a2906f8bf58ab2ba5429234d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa45d34f6a2906f8bf58ab2ba5429234d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10\">max</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, T, Q &gt; const &amp;w)</td></tr>\n<tr class=\"memdesc:ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 4 inputs.  <a href=\"a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3cd83d80fd4f433d8e333593ec56dddf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3cd83d80fd4f433d8e333593ec56dddf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga3cd83d80fd4f433d8e333593ec56dddf\">min</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:ga3cd83d80fd4f433d8e333593ec56dddf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 3 inputs.  <a href=\"a00267.html#ga3cd83d80fd4f433d8e333593ec56dddf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3cd83d80fd4f433d8e333593ec56dddf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab66920ed064ab518d6859c5a889c4be4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab66920ed064ab518d6859c5a889c4be4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#gab66920ed064ab518d6859c5a889c4be4\">min</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:gab66920ed064ab518d6859c5a889c4be4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 4 inputs.  <a href=\"a00267.html#gab66920ed064ab518d6859c5a889c4be4\">More...</a><br /></td></tr>\n<tr class=\"separator:gab66920ed064ab518d6859c5a889c4be4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00267.html\">GLM_EXT_vector_common</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00197_source.html\">vector_common.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00197_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_common.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_common.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00197.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_common extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#gab66920ed064ab518d6859c5a889c4be4\">min</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; b, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; c);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00043\"></a><span class=\"lineno\">   43</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#gab66920ed064ab518d6859c5a889c4be4\">min</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; b, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; c, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; d);</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10\">max</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10\">max</a>( vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; z, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; w);</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">fmin</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, T y);</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">fmin</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">fmin</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; b, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; c);</div>\n<div class=\"line\"><a name=\"l00090\"></a><span class=\"lineno\">   90</span>&#160;</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00099\"></a><span class=\"lineno\">   99</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">fmin</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; b, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; c, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; d);</div>\n<div class=\"line\"><a name=\"l00100\"></a><span class=\"lineno\">  100</span>&#160;</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">fmax</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, T b);</div>\n<div class=\"line\"><a name=\"l00110\"></a><span class=\"lineno\">  110</span>&#160;</div>\n<div class=\"line\"><a name=\"l00118\"></a><span class=\"lineno\">  118</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">fmax</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; b);</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00128\"></a><span class=\"lineno\">  128</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00129\"></a><span class=\"lineno\">  129</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">fmax</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; b, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; c);</div>\n<div class=\"line\"><a name=\"l00130\"></a><span class=\"lineno\">  130</span>&#160;</div>\n<div class=\"line\"><a name=\"l00138\"></a><span class=\"lineno\">  138</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00139\"></a><span class=\"lineno\">  139</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">fmax</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; a, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; b, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; c, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; d);</div>\n<div class=\"line\"><a name=\"l00140\"></a><span class=\"lineno\">  140</span>&#160;</div>\n<div class=\"line\"><a name=\"l00142\"></a><span class=\"lineno\">  142</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;<span class=\"preprocessor\">#include &quot;vector_common.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00267_html_ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><div class=\"ttname\"><a href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">glm::fmax</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fmax(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</div><div class=\"ttdoc\">Returns y if x < y; otherwise, it returns x. </div></div>\n<div class=\"ttc\" id=\"a00267_html_ga4a543dd7d22ad1f3b8b839f808a9d93c\"><div class=\"ttname\"><a href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">glm::fmin</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; fmin(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</div><div class=\"ttdoc\">Returns y if y < x; otherwise, it returns x. </div></div>\n<div class=\"ttc\" id=\"a00267_html_ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><div class=\"ttname\"><a href=\"a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10\">glm::max</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; max(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, T, Q &gt; const &amp;w)</div><div class=\"ttdoc\">Return the maximum component-wise values of 4 inputs. </div></div>\n<div class=\"ttc\" id=\"a00267_html_gab66920ed064ab518d6859c5a889c4be4\"><div class=\"ttname\"><a href=\"a00267.html#gab66920ed064ab518d6859c5a889c4be4\">glm::min</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt; min(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</div><div class=\"ttdoc\">Return the minimum component-wise values of 4 inputs. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00198.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double1.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double1.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00268.html\">GLM_EXT_vector_double1</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00198_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga6221af17edc2d4477a4583d2cd53e569\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6221af17edc2d4477a4583d2cd53e569\"></a>\ntypedef vec&lt; 1, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">dvec1</a></td></tr>\n<tr class=\"memdesc:ga6221af17edc2d4477a4583d2cd53e569\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 components vector of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga6221af17edc2d4477a4583d2cd53e569\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00268.html\">GLM_EXT_vector_double1</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00198_source.html\">vector_double1.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00198_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double1.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double1.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00198.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_double1 extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, defaultp&gt;                <a class=\"code\" href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00268_html_ga6221af17edc2d4477a4583d2cd53e569\"><div class=\"ttname\"><a href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">glm::dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, defaultp &gt; dvec1</div><div class=\"ttdoc\">1 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00198_source.html#l00028\">vector_double1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00199.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double1_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double1_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00269.html\">GLM_EXT_vector_double1_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00199_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga77c22c4426da3a6865c88d3fc907e3fe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga77c22c4426da3a6865c88d3fc907e3fe\"></a>\ntypedef vec&lt; 1, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe\">highp_dvec1</a></td></tr>\n<tr class=\"memdesc:ga77c22c4426da3a6865c88d3fc907e3fe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga77c22c4426da3a6865c88d3fc907e3fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf906eb86b6e96c35138d0e4928e1435a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf906eb86b6e96c35138d0e4928e1435a\"></a>\ntypedef vec&lt; 1, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00269.html#gaf906eb86b6e96c35138d0e4928e1435a\">lowp_dvec1</a></td></tr>\n<tr class=\"memdesc:gaf906eb86b6e96c35138d0e4928e1435a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf906eb86b6e96c35138d0e4928e1435a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga79a789ebb176b37a45848f7ccdd3b3dd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga79a789ebb176b37a45848f7ccdd3b3dd\"></a>\ntypedef vec&lt; 1, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd\">mediump_dvec1</a></td></tr>\n<tr class=\"memdesc:ga79a789ebb176b37a45848f7ccdd3b3dd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga79a789ebb176b37a45848f7ccdd3b3dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00269.html\">GLM_EXT_vector_double1_precision</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00199_source.html\">vector_double1_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00199_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double1_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double1_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00199.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_double1_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe\">   27</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, highp&gt;           <a class=\"code\" href=\"a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe\">highp_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd\">   30</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, mediump&gt;         <a class=\"code\" href=\"a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd\">mediump_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00269.html#gaf906eb86b6e96c35138d0e4928e1435a\">   33</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, double, lowp&gt;            <a class=\"code\" href=\"a00269.html#gaf906eb86b6e96c35138d0e4928e1435a\">lowp_dvec1</a>;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00269_html_gaf906eb86b6e96c35138d0e4928e1435a\"><div class=\"ttname\"><a href=\"a00269.html#gaf906eb86b6e96c35138d0e4928e1435a\">glm::lowp_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, lowp &gt; lowp_dvec1</div><div class=\"ttdoc\">1 component vector of double-precision floating-point numbers using low precision arithmetic in term ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00199_source.html#l00033\">vector_double1_precision.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00269_html_ga77c22c4426da3a6865c88d3fc907e3fe\"><div class=\"ttname\"><a href=\"a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe\">glm::highp_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, highp &gt; highp_dvec1</div><div class=\"ttdoc\">1 component vector of double-precision floating-point numbers using high precision arithmetic in term...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00199_source.html#l00027\">vector_double1_precision.hpp:27</a></div></div>\n<div class=\"ttc\" id=\"a00269_html_ga79a789ebb176b37a45848f7ccdd3b3dd\"><div class=\"ttname\"><a href=\"a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd\">glm::mediump_dvec1</a></div><div class=\"ttdeci\">vec&lt; 1, double, mediump &gt; mediump_dvec1</div><div class=\"ttdoc\">1 component vector of double-precision floating-point numbers using medium precision arithmetic in te...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00199_source.html#l00030\">vector_double1_precision.hpp:30</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00200.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00200_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga8b09c71aaac7da7867ae58377fe219a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">dvec2</a></td></tr>\n<tr class=\"memdesc:ga8b09c71aaac7da7867ae58377fe219a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of double-precision floating-point numbers.  <a href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b09c71aaac7da7867ae58377fe219a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00200_source.html\">vector_double2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00200_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00200.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, defaultp&gt;                <a class=\"code\" href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga8b09c71aaac7da7867ae58377fe219a8\"><div class=\"ttname\"><a href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">glm::dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, defaultp &gt; dvec2</div><div class=\"ttdoc\">2 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00200_source.html#l00015\">vector_double2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00201.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00201_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gab98d77cca255914f5e29697fcbc2d975\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">highp_dvec2</a></td></tr>\n<tr class=\"memdesc:gab98d77cca255914f5e29697fcbc2d975\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high double-qualifier floating-point numbers.  <a href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">More...</a><br /></td></tr>\n<tr class=\"separator:gab98d77cca255914f5e29697fcbc2d975\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga108086730d086b7f6f7a033955dfb9c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">lowp_dvec2</a></td></tr>\n<tr class=\"memdesc:ga108086730d086b7f6f7a033955dfb9c3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low double-qualifier floating-point numbers.  <a href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga108086730d086b7f6f7a033955dfb9c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f4f6e9a69a0281d06940fd0990cafc3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">mediump_dvec2</a></td></tr>\n<tr class=\"memdesc:ga2f4f6e9a69a0281d06940fd0990cafc3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium double-qualifier floating-point numbers.  <a href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f4f6e9a69a0281d06940fd0990cafc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00201_source.html\">vector_double2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00201_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00201.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, highp&gt;           <a class=\"code\" href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">highp_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, mediump&gt;         <a class=\"code\" href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">mediump_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, double, lowp&gt;            <a class=\"code\" href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">lowp_dvec2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga108086730d086b7f6f7a033955dfb9c3\"><div class=\"ttname\"><a href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">glm::lowp_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, lowp &gt; lowp_dvec2</div><div class=\"ttdoc\">2 components vector of low double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00201_source.html#l00028\">vector_double2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga2f4f6e9a69a0281d06940fd0990cafc3\"><div class=\"ttname\"><a href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">glm::mediump_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, mediump &gt; mediump_dvec2</div><div class=\"ttdoc\">2 components vector of medium double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00201_source.html#l00022\">vector_double2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gab98d77cca255914f5e29697fcbc2d975\"><div class=\"ttname\"><a href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">glm::highp_dvec2</a></div><div class=\"ttdeci\">vec&lt; 2, double, highp &gt; highp_dvec2</div><div class=\"ttdoc\">2 components vector of high double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00201_source.html#l00016\">vector_double2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00202.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00202_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga5b83ae3d0fdec519c038e4d2cf967cf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">dvec3</a></td></tr>\n<tr class=\"memdesc:ga5b83ae3d0fdec519c038e4d2cf967cf0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of double-precision floating-point numbers.  <a href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b83ae3d0fdec519c038e4d2cf967cf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00202_source.html\">vector_double3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00202_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00202.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, defaultp&gt;                <a class=\"code\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga5b83ae3d0fdec519c038e4d2cf967cf0\"><div class=\"ttname\"><a href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">glm::dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, defaultp &gt; dvec3</div><div class=\"ttdoc\">3 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00202_source.html#l00015\">vector_double3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00203.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00203_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gab24dc20dcdc5b71282634bdbf6b70105\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">highp_dvec3</a></td></tr>\n<tr class=\"memdesc:gab24dc20dcdc5b71282634bdbf6b70105\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high double-qualifier floating-point numbers.  <a href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">More...</a><br /></td></tr>\n<tr class=\"separator:gab24dc20dcdc5b71282634bdbf6b70105\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42c518b2917e19ce6946a84c64a3a4b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">lowp_dvec3</a></td></tr>\n<tr class=\"memdesc:ga42c518b2917e19ce6946a84c64a3a4b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low double-qualifier floating-point numbers.  <a href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42c518b2917e19ce6946a84c64a3a4b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga61c3b1dff4ec7c878af80503141b9f37\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">mediump_dvec3</a></td></tr>\n<tr class=\"memdesc:ga61c3b1dff4ec7c878af80503141b9f37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium double-qualifier floating-point numbers.  <a href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga61c3b1dff4ec7c878af80503141b9f37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00203_source.html\">vector_double3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00203_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00203.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">   17</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, highp&gt;           <a class=\"code\" href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">highp_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">   24</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, mediump&gt;         <a class=\"code\" href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">mediump_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">   31</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, double, lowp&gt;            <a class=\"code\" href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">lowp_dvec3</a>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga61c3b1dff4ec7c878af80503141b9f37\"><div class=\"ttname\"><a href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">glm::mediump_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, mediump &gt; mediump_dvec3</div><div class=\"ttdoc\">3 components vector of medium double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00203_source.html#l00024\">vector_double3_precision.hpp:24</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga42c518b2917e19ce6946a84c64a3a4b2\"><div class=\"ttname\"><a href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">glm::lowp_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, lowp &gt; lowp_dvec3</div><div class=\"ttdoc\">3 components vector of low double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00203_source.html#l00031\">vector_double3_precision.hpp:31</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gab24dc20dcdc5b71282634bdbf6b70105\"><div class=\"ttname\"><a href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">glm::highp_dvec3</a></div><div class=\"ttdeci\">vec&lt; 3, double, highp &gt; highp_dvec3</div><div class=\"ttdoc\">3 components vector of high double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00203_source.html#l00017\">vector_double3_precision.hpp:17</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00204.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00204_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga57debab5d98ce618f7b2a97fe26eb3ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">dvec4</a></td></tr>\n<tr class=\"memdesc:ga57debab5d98ce618f7b2a97fe26eb3ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of double-precision floating-point numbers.  <a href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga57debab5d98ce618f7b2a97fe26eb3ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00204_source.html\">vector_double4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00204_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00204.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, defaultp&gt;                <a class=\"code\" href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga57debab5d98ce618f7b2a97fe26eb3ac\"><div class=\"ttname\"><a href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">glm::dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, defaultp &gt; dvec4</div><div class=\"ttdoc\">4 components vector of double-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00204_source.html#l00015\">vector_double4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00205.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00205_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gab654f4ed4a99d64a6cfc65320c2a7590\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">highp_dvec4</a></td></tr>\n<tr class=\"memdesc:gab654f4ed4a99d64a6cfc65320c2a7590\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high double-qualifier floating-point numbers.  <a href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">More...</a><br /></td></tr>\n<tr class=\"separator:gab654f4ed4a99d64a6cfc65320c2a7590\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b4432cb8d910e406576d10d802e190d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">lowp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga0b4432cb8d910e406576d10d802e190d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low double-qualifier floating-point numbers.  <a href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b4432cb8d910e406576d10d802e190d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga23a8bca00914a51542bfea13a4778186\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">mediump_dvec4</a></td></tr>\n<tr class=\"memdesc:ga23a8bca00914a51542bfea13a4778186\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium double-qualifier floating-point numbers.  <a href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">More...</a><br /></td></tr>\n<tr class=\"separator:ga23a8bca00914a51542bfea13a4778186\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00205_source.html\">vector_double4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00205_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_double4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_double4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00205.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;</div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00009\"></a><span class=\"lineno\">    9</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">   18</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, highp&gt;           <a class=\"code\" href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">highp_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">   25</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, mediump&gt;         <a class=\"code\" href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">mediump_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">   32</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, double, lowp&gt;            <a class=\"code\" href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">lowp_dvec4</a>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga23a8bca00914a51542bfea13a4778186\"><div class=\"ttname\"><a href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">glm::mediump_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, mediump &gt; mediump_dvec4</div><div class=\"ttdoc\">4 components vector of medium double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00205_source.html#l00025\">vector_double4_precision.hpp:25</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gab654f4ed4a99d64a6cfc65320c2a7590\"><div class=\"ttname\"><a href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">glm::highp_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, highp &gt; highp_dvec4</div><div class=\"ttdoc\">4 components vector of high double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00205_source.html#l00018\">vector_double4_precision.hpp:18</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga0b4432cb8d910e406576d10d802e190d\"><div class=\"ttname\"><a href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">glm::lowp_dvec4</a></div><div class=\"ttdeci\">vec&lt; 4, double, lowp &gt; lowp_dvec4</div><div class=\"ttdoc\">4 components vector of low double-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00205_source.html#l00032\">vector_double4_precision.hpp:32</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00206.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float1.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float1.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00270.html\">GLM_EXT_vector_float1</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00206_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gadfc071d934d8dae7955a1d530a3cf656\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadfc071d934d8dae7955a1d530a3cf656\"></a>\ntypedef vec&lt; 1, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">vec1</a></td></tr>\n<tr class=\"memdesc:gadfc071d934d8dae7955a1d530a3cf656\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 components vector of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadfc071d934d8dae7955a1d530a3cf656\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00270.html\">GLM_EXT_vector_float1</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00206_source.html\">vector_float1.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00206_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float1.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float1.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00206.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_float1 extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, defaultp&gt;         <a class=\"code\" href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">vec1</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00270_html_gadfc071d934d8dae7955a1d530a3cf656\"><div class=\"ttname\"><a href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">glm::vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, defaultp &gt; vec1</div><div class=\"ttdoc\">1 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00206_source.html#l00028\">vector_float1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00207.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float1_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float1_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00271.html\">GLM_EXT_vector_float1_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00207_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga9e8ed21862a897c156c0b2abca70b1e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9e8ed21862a897c156c0b2abca70b1e9\"></a>\ntypedef vec&lt; 1, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9\">highp_vec1</a></td></tr>\n<tr class=\"memdesc:ga9e8ed21862a897c156c0b2abca70b1e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9e8ed21862a897c156c0b2abca70b1e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0a57630f03031706b1d26a7d70d9184c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0a57630f03031706b1d26a7d70d9184c\"></a>\ntypedef vec&lt; 1, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga0a57630f03031706b1d26a7d70d9184c\">lowp_vec1</a></td></tr>\n<tr class=\"memdesc:ga0a57630f03031706b1d26a7d70d9184c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0a57630f03031706b1d26a7d70d9184c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga645f53e6b8056609023a894b4e2beef4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga645f53e6b8056609023a894b4e2beef4\"></a>\ntypedef vec&lt; 1, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga645f53e6b8056609023a894b4e2beef4\">mediump_vec1</a></td></tr>\n<tr class=\"memdesc:ga645f53e6b8056609023a894b4e2beef4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga645f53e6b8056609023a894b4e2beef4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00271.html\">GLM_EXT_vector_float1_precision</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00207_source.html\">vector_float1_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00207_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float1_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float1_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00207.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_float1_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;</div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9\">   27</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, highp&gt;            <a class=\"code\" href=\"a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9\">highp_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00271.html#ga645f53e6b8056609023a894b4e2beef4\">   30</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, mediump&gt;          <a class=\"code\" href=\"a00271.html#ga645f53e6b8056609023a894b4e2beef4\">mediump_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00271.html#ga0a57630f03031706b1d26a7d70d9184c\">   33</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, float, lowp&gt;                     <a class=\"code\" href=\"a00271.html#ga0a57630f03031706b1d26a7d70d9184c\">lowp_vec1</a>;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00271_html_ga0a57630f03031706b1d26a7d70d9184c\"><div class=\"ttname\"><a href=\"a00271.html#ga0a57630f03031706b1d26a7d70d9184c\">glm::lowp_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, lowp &gt; lowp_vec1</div><div class=\"ttdoc\">1 component vector of single-precision floating-point numbers using low precision arithmetic in term ...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00207_source.html#l00033\">vector_float1_precision.hpp:33</a></div></div>\n<div class=\"ttc\" id=\"a00271_html_ga645f53e6b8056609023a894b4e2beef4\"><div class=\"ttname\"><a href=\"a00271.html#ga645f53e6b8056609023a894b4e2beef4\">glm::mediump_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, mediump &gt; mediump_vec1</div><div class=\"ttdoc\">1 component vector of single-precision floating-point numbers using medium precision arithmetic in te...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00207_source.html#l00030\">vector_float1_precision.hpp:30</a></div></div>\n<div class=\"ttc\" id=\"a00271_html_ga9e8ed21862a897c156c0b2abca70b1e9\"><div class=\"ttname\"><a href=\"a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9\">glm::highp_vec1</a></div><div class=\"ttdeci\">vec&lt; 1, float, highp &gt; highp_vec1</div><div class=\"ttdoc\">1 component vector of single-precision floating-point numbers using high precision arithmetic in term...</div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00207_source.html#l00027\">vector_float1_precision.hpp:27</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00208.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00208_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gabe65c061834f61b4f7cb6037b19006a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a></td></tr>\n<tr class=\"memdesc:gabe65c061834f61b4f7cb6037b19006a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of single-precision floating-point numbers.  <a href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">More...</a><br /></td></tr>\n<tr class=\"separator:gabe65c061834f61b4f7cb6037b19006a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00208_source.html\">vector_float2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00208_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00208.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, defaultp&gt; <a class=\"code\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_gabe65c061834f61b4f7cb6037b19006a4\"><div class=\"ttname\"><a href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">glm::vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, defaultp &gt; vec2</div><div class=\"ttdoc\">2 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00208_source.html#l00015\">vector_float2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00209.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00209_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaa92c1954d71b1e7914874bd787b43d1c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">highp_vec2</a></td></tr>\n<tr class=\"memdesc:gaa92c1954d71b1e7914874bd787b43d1c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high single-qualifier floating-point numbers.  <a href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa92c1954d71b1e7914874bd787b43d1c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30e8baef5d56d5c166872a2bc00f36e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">lowp_vec2</a></td></tr>\n<tr class=\"memdesc:ga30e8baef5d56d5c166872a2bc00f36e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low single-qualifier floating-point numbers.  <a href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga30e8baef5d56d5c166872a2bc00f36e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc61976261c406520c7a8e4d946dc3f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">mediump_vec2</a></td></tr>\n<tr class=\"memdesc:gabc61976261c406520c7a8e4d946dc3f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium single-qualifier floating-point numbers.  <a href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">More...</a><br /></td></tr>\n<tr class=\"separator:gabc61976261c406520c7a8e4d946dc3f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00209_source.html\">vector_float2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00209_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00209.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, highp&gt;            <a class=\"code\" href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">highp_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, mediump&gt;          <a class=\"code\" href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">mediump_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, float, lowp&gt;                     <a class=\"code\" href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">lowp_vec2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_gaa92c1954d71b1e7914874bd787b43d1c\"><div class=\"ttname\"><a href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">glm::highp_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, highp &gt; highp_vec2</div><div class=\"ttdoc\">2 components vector of high single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00209_source.html#l00016\">vector_float2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga30e8baef5d56d5c166872a2bc00f36e9\"><div class=\"ttname\"><a href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">glm::lowp_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, lowp &gt; lowp_vec2</div><div class=\"ttdoc\">2 components vector of low single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00209_source.html#l00028\">vector_float2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gabc61976261c406520c7a8e4d946dc3f0\"><div class=\"ttname\"><a href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">glm::mediump_vec2</a></div><div class=\"ttdeci\">vec&lt; 2, float, mediump &gt; mediump_vec2</div><div class=\"ttdoc\">2 components vector of medium single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00209_source.html#l00022\">vector_float2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00210.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00210_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga9c3019b13faf179e4ad3626ea66df334\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a></td></tr>\n<tr class=\"memdesc:ga9c3019b13faf179e4ad3626ea66df334\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of single-precision floating-point numbers.  <a href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9c3019b13faf179e4ad3626ea66df334\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00210_source.html\">vector_float3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00210_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00210.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, defaultp&gt;         <a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga9c3019b13faf179e4ad3626ea66df334\"><div class=\"ttname\"><a href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">glm::vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, defaultp &gt; vec3</div><div class=\"ttdoc\">3 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00210_source.html#l00015\">vector_float3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00211.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00211_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaca61dfaccbf2f58f2d8063a4e76b44a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">highp_vec3</a></td></tr>\n<tr class=\"memdesc:gaca61dfaccbf2f58f2d8063a4e76b44a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high single-qualifier floating-point numbers.  <a href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaca61dfaccbf2f58f2d8063a4e76b44a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga868e8e4470a3ef97c7ee3032bf90dc79\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">lowp_vec3</a></td></tr>\n<tr class=\"memdesc:ga868e8e4470a3ef97c7ee3032bf90dc79\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low single-qualifier floating-point numbers.  <a href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">More...</a><br /></td></tr>\n<tr class=\"separator:ga868e8e4470a3ef97c7ee3032bf90dc79\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2384e263df19f1404b733016eff78fca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">mediump_vec3</a></td></tr>\n<tr class=\"memdesc:ga2384e263df19f1404b733016eff78fca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium single-qualifier floating-point numbers.  <a href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2384e263df19f1404b733016eff78fca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00211_source.html\">vector_float3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00211_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00211.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, highp&gt;            <a class=\"code\" href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">highp_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, mediump&gt;          <a class=\"code\" href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">mediump_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, float, lowp&gt;                     <a class=\"code\" href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">lowp_vec3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_gaca61dfaccbf2f58f2d8063a4e76b44a9\"><div class=\"ttname\"><a href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">glm::highp_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, highp &gt; highp_vec3</div><div class=\"ttdoc\">3 components vector of high single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00211_source.html#l00016\">vector_float3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga868e8e4470a3ef97c7ee3032bf90dc79\"><div class=\"ttname\"><a href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">glm::lowp_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, lowp &gt; lowp_vec3</div><div class=\"ttdoc\">3 components vector of low single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00211_source.html#l00028\">vector_float3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga2384e263df19f1404b733016eff78fca\"><div class=\"ttname\"><a href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">glm::mediump_vec3</a></div><div class=\"ttdeci\">vec&lt; 3, float, mediump &gt; mediump_vec3</div><div class=\"ttdoc\">3 components vector of medium single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00211_source.html#l00022\">vector_float3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00212.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00212_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gac215a35481a6597d1bf622a382e9d6e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a></td></tr>\n<tr class=\"memdesc:gac215a35481a6597d1bf622a382e9d6e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of single-precision floating-point numbers.  <a href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">More...</a><br /></td></tr>\n<tr class=\"separator:gac215a35481a6597d1bf622a382e9d6e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00212_source.html\">vector_float4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00212_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00212.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, defaultp&gt;         <a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_gac215a35481a6597d1bf622a382e9d6e2\"><div class=\"ttname\"><a href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, defaultp &gt; vec4</div><div class=\"ttdoc\">4 components vector of single-precision floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00212_source.html#l00015\">vector_float4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00213.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00213_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gad281decae52948b82feb3a9db8f63a7b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">highp_vec4</a></td></tr>\n<tr class=\"memdesc:gad281decae52948b82feb3a9db8f63a7b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high single-qualifier floating-point numbers.  <a href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">More...</a><br /></td></tr>\n<tr class=\"separator:gad281decae52948b82feb3a9db8f63a7b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace3acb313c800552a9411953eb8b2ed7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">lowp_vec4</a></td></tr>\n<tr class=\"memdesc:gace3acb313c800552a9411953eb8b2ed7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low single-qualifier floating-point numbers.  <a href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">More...</a><br /></td></tr>\n<tr class=\"separator:gace3acb313c800552a9411953eb8b2ed7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c6978d3ffba06738416a33083853fc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">mediump_vec4</a></td></tr>\n<tr class=\"memdesc:ga5c6978d3ffba06738416a33083853fc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium single-qualifier floating-point numbers.  <a href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c6978d3ffba06738416a33083853fc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00213_source.html\">vector_float4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00213_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_float4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_float4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00213.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, highp&gt;            <a class=\"code\" href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">highp_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, mediump&gt;          <a class=\"code\" href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">mediump_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, float, lowp&gt;                     <a class=\"code\" href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">lowp_vec4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_gace3acb313c800552a9411953eb8b2ed7\"><div class=\"ttname\"><a href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">glm::lowp_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, lowp &gt; lowp_vec4</div><div class=\"ttdoc\">4 components vector of low single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00213_source.html#l00028\">vector_float4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga5c6978d3ffba06738416a33083853fc0\"><div class=\"ttname\"><a href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">glm::mediump_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, mediump &gt; mediump_vec4</div><div class=\"ttdoc\">4 components vector of medium single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00213_source.html#l00022\">vector_float4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gad281decae52948b82feb3a9db8f63a7b\"><div class=\"ttname\"><a href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">glm::highp_vec4</a></div><div class=\"ttdeci\">vec&lt; 4, float, highp &gt; highp_vec4</div><div class=\"ttdoc\">4 components vector of high single-qualifier floating-point numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00213_source.html#l00016\">vector_float4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00214.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int1.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int1.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00272.html\">GLM_EXT_vector_int1</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00214_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaedd0562c2e77714929d7723a7e2e0dba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaedd0562c2e77714929d7723a7e2e0dba\"></a>\ntypedef vec&lt; 1, int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">ivec1</a></td></tr>\n<tr class=\"memdesc:gaedd0562c2e77714929d7723a7e2e0dba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaedd0562c2e77714929d7723a7e2e0dba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00272.html\">GLM_EXT_vector_int1</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00214_source.html\">vector_int1.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00214_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int1.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int1.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00214.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_int1 extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, defaultp&gt;                   <a class=\"code\" href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"ttc\" id=\"a00272_html_gaedd0562c2e77714929d7723a7e2e0dba\"><div class=\"ttname\"><a href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">glm::ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, defaultp &gt; ivec1</div><div class=\"ttdoc\">1 component vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00214_source.html#l00028\">vector_int1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00215.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int1_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int1_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00273.html\">GLM_EXT_vector_int1_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00215_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga7e02566f2bd2caa68e61be45a477c77e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7e02566f2bd2caa68e61be45a477c77e\"></a>\ntypedef vec&lt; 1, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga7e02566f2bd2caa68e61be45a477c77e\">highp_ivec1</a></td></tr>\n<tr class=\"memdesc:ga7e02566f2bd2caa68e61be45a477c77e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of signed integer values. <br /></td></tr>\n<tr class=\"separator:ga7e02566f2bd2caa68e61be45a477c77e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga836dbb1dc516c233b7f5fe9763bc15dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga836dbb1dc516c233b7f5fe9763bc15dc\"></a>\ntypedef vec&lt; 1, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc\">lowp_ivec1</a></td></tr>\n<tr class=\"memdesc:ga836dbb1dc516c233b7f5fe9763bc15dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of signed integer values. <br /></td></tr>\n<tr class=\"separator:ga836dbb1dc516c233b7f5fe9763bc15dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad628c608970b3d0aa6cfb63ce6e53e56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad628c608970b3d0aa6cfb63ce6e53e56\"></a>\ntypedef vec&lt; 1, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56\">mediump_ivec1</a></td></tr>\n<tr class=\"memdesc:gad628c608970b3d0aa6cfb63ce6e53e56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of signed integer values. <br /></td></tr>\n<tr class=\"separator:gad628c608970b3d0aa6cfb63ce6e53e56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00273.html\">GLM_EXT_vector_int1_precision</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00215_source.html\">vector_int1_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00215_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int1_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int1_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00215.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_int1_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00273.html#ga7e02566f2bd2caa68e61be45a477c77e\">   25</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, highp&gt;                      <a class=\"code\" href=\"a00273.html#ga7e02566f2bd2caa68e61be45a477c77e\">highp_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, mediump&gt;            <a class=\"code\" href=\"a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56\">mediump_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc\">   31</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, int, lowp&gt;                       <a class=\"code\" href=\"a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc\">lowp_ivec1</a>;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00273_html_gad628c608970b3d0aa6cfb63ce6e53e56\"><div class=\"ttname\"><a href=\"a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56\">glm::mediump_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, mediump &gt; mediump_ivec1</div><div class=\"ttdoc\">1 component vector of signed integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00215_source.html#l00028\">vector_int1_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00273_html_ga7e02566f2bd2caa68e61be45a477c77e\"><div class=\"ttname\"><a href=\"a00273.html#ga7e02566f2bd2caa68e61be45a477c77e\">glm::highp_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, highp &gt; highp_ivec1</div><div class=\"ttdoc\">1 component vector of signed integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00215_source.html#l00025\">vector_int1_precision.hpp:25</a></div></div>\n<div class=\"ttc\" id=\"a00273_html_ga836dbb1dc516c233b7f5fe9763bc15dc\"><div class=\"ttname\"><a href=\"a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc\">glm::lowp_ivec1</a></div><div class=\"ttdeci\">vec&lt; 1, int, lowp &gt; lowp_ivec1</div><div class=\"ttdoc\">1 component vector of signed integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00215_source.html#l00031\">vector_int1_precision.hpp:31</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00216.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00216_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga6f9269106d91b2d2b91bcf27cd5f5560\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">ivec2</a></td></tr>\n<tr class=\"memdesc:ga6f9269106d91b2d2b91bcf27cd5f5560\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of signed integer numbers.  <a href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6f9269106d91b2d2b91bcf27cd5f5560\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00216_source.html\">vector_int2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00216_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00216.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, defaultp&gt;           <a class=\"code\" href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga6f9269106d91b2d2b91bcf27cd5f5560\"><div class=\"ttname\"><a href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">glm::ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, defaultp &gt; ivec2</div><div class=\"ttdoc\">2 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00216_source.html#l00015\">vector_int2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00217.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00217_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaa18f6b80b41c214f10666948539c1f93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">highp_ivec2</a></td></tr>\n<tr class=\"memdesc:gaa18f6b80b41c214f10666948539c1f93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high qualifier signed integer numbers.  <a href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa18f6b80b41c214f10666948539c1f93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8433c6c1fdd80c0a83941d94aff73fa0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">lowp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga8433c6c1fdd80c0a83941d94aff73fa0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low qualifier signed integer numbers.  <a href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8433c6c1fdd80c0a83941d94aff73fa0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac57496299d276ed97044074097bd5e2c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">mediump_ivec2</a></td></tr>\n<tr class=\"memdesc:gac57496299d276ed97044074097bd5e2c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium qualifier signed integer numbers.  <a href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac57496299d276ed97044074097bd5e2c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00217_source.html\">vector_int2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00217_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00217.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, highp&gt;              <a class=\"code\" href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">highp_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, mediump&gt;    <a class=\"code\" href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">mediump_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, int, lowp&gt;               <a class=\"code\" href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">lowp_ivec2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_gaa18f6b80b41c214f10666948539c1f93\"><div class=\"ttname\"><a href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">glm::highp_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, highp &gt; highp_ivec2</div><div class=\"ttdoc\">2 components vector of high qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00217_source.html#l00016\">vector_int2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gac57496299d276ed97044074097bd5e2c\"><div class=\"ttname\"><a href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">glm::mediump_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, mediump &gt; mediump_ivec2</div><div class=\"ttdoc\">2 components vector of medium qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00217_source.html#l00022\">vector_int2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga8433c6c1fdd80c0a83941d94aff73fa0\"><div class=\"ttname\"><a href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">glm::lowp_ivec2</a></div><div class=\"ttdeci\">vec&lt; 2, int, lowp &gt; lowp_ivec2</div><div class=\"ttdoc\">2 components vector of low qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00217_source.html#l00028\">vector_int2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00218.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00218_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gad0d784d8eee201aca362484d2daee46c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">ivec3</a></td></tr>\n<tr class=\"memdesc:gad0d784d8eee201aca362484d2daee46c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of signed integer numbers.  <a href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">More...</a><br /></td></tr>\n<tr class=\"separator:gad0d784d8eee201aca362484d2daee46c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00218_source.html\">vector_int3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00218_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00218.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, defaultp&gt;           <a class=\"code\" href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_gad0d784d8eee201aca362484d2daee46c\"><div class=\"ttname\"><a href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">glm::ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, defaultp &gt; ivec3</div><div class=\"ttdoc\">3 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00218_source.html#l00015\">vector_int3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00219.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00219_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga7dd782c3ef5719bc6d5c3ca826b8ad18\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">highp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga7dd782c3ef5719bc6d5c3ca826b8ad18\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high qualifier signed integer numbers.  <a href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7dd782c3ef5719bc6d5c3ca826b8ad18\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac1a86a75b3c68ebb704d7094043669d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">lowp_ivec3</a></td></tr>\n<tr class=\"memdesc:gac1a86a75b3c68ebb704d7094043669d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low qualifier signed integer numbers.  <a href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">More...</a><br /></td></tr>\n<tr class=\"separator:gac1a86a75b3c68ebb704d7094043669d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27cfb51e0dbe15bba27a14a8590e8466\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">mediump_ivec3</a></td></tr>\n<tr class=\"memdesc:ga27cfb51e0dbe15bba27a14a8590e8466\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium qualifier signed integer numbers.  <a href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27cfb51e0dbe15bba27a14a8590e8466\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00219_source.html\">vector_int3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00219_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00219.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, highp&gt;              <a class=\"code\" href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">highp_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, mediump&gt;    <a class=\"code\" href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">mediump_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, int, lowp&gt;               <a class=\"code\" href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">lowp_ivec3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_gac1a86a75b3c68ebb704d7094043669d6\"><div class=\"ttname\"><a href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">glm::lowp_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, lowp &gt; lowp_ivec3</div><div class=\"ttdoc\">3 components vector of low qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00219_source.html#l00028\">vector_int3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga27cfb51e0dbe15bba27a14a8590e8466\"><div class=\"ttname\"><a href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">glm::mediump_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, mediump &gt; mediump_ivec3</div><div class=\"ttdoc\">3 components vector of medium qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00219_source.html#l00022\">vector_int3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga7dd782c3ef5719bc6d5c3ca826b8ad18\"><div class=\"ttname\"><a href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">glm::highp_ivec3</a></div><div class=\"ttdeci\">vec&lt; 3, int, highp &gt; highp_ivec3</div><div class=\"ttdoc\">3 components vector of high qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00219_source.html#l00016\">vector_int3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00220.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00220_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga5abb4603dae0ce58c595e66d9123d812\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a></td></tr>\n<tr class=\"memdesc:ga5abb4603dae0ce58c595e66d9123d812\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of signed integer numbers.  <a href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5abb4603dae0ce58c595e66d9123d812\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00220_source.html\">vector_int4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00220_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00220.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, defaultp&gt;           <a class=\"code\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga5abb4603dae0ce58c595e66d9123d812\"><div class=\"ttname\"><a href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">glm::ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, defaultp &gt; ivec4</div><div class=\"ttdoc\">4 components vector of signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00220_source.html#l00015\">vector_int4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00221.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00221_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gafb84dccdf5d82443df3ffc8428dcaf3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">highp_ivec4</a></td></tr>\n<tr class=\"memdesc:gafb84dccdf5d82443df3ffc8428dcaf3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high qualifier signed integer numbers.  <a href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">More...</a><br /></td></tr>\n<tr class=\"separator:gafb84dccdf5d82443df3ffc8428dcaf3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27fc23da61859cd6356326c5f1c796de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">lowp_ivec4</a></td></tr>\n<tr class=\"memdesc:ga27fc23da61859cd6356326c5f1c796de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low qualifier signed integer numbers.  <a href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27fc23da61859cd6356326c5f1c796de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92a204c37e66ac6c1dc7ae91142f2ea5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">mediump_ivec4</a></td></tr>\n<tr class=\"memdesc:ga92a204c37e66ac6c1dc7ae91142f2ea5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium qualifier signed integer numbers.  <a href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga92a204c37e66ac6c1dc7ae91142f2ea5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00221_source.html\">vector_int4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00221_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_int4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_int4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00221.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, highp&gt;              <a class=\"code\" href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">highp_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, mediump&gt;    <a class=\"code\" href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">mediump_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, int, lowp&gt;               <a class=\"code\" href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">lowp_ivec4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga27fc23da61859cd6356326c5f1c796de\"><div class=\"ttname\"><a href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">glm::lowp_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, lowp &gt; lowp_ivec4</div><div class=\"ttdoc\">4 components vector of low qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00221_source.html#l00028\">vector_int4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gafb84dccdf5d82443df3ffc8428dcaf3e\"><div class=\"ttname\"><a href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">glm::highp_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, highp &gt; highp_ivec4</div><div class=\"ttdoc\">4 components vector of high qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00221_source.html#l00016\">vector_int4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga92a204c37e66ac6c1dc7ae91142f2ea5\"><div class=\"ttname\"><a href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">glm::mediump_ivec4</a></div><div class=\"ttdeci\">vec&lt; 4, int, mediump &gt; mediump_ivec4</div><div class=\"ttdoc\">4 components vector of medium qualifier signed integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00221_source.html#l00022\">vector_int4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00222.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_integer.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_integer.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00274.html\">GLM_EXT_vector_integer</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00222_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaff61eca266da315002a3db92ff0dd604\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaff61eca266da315002a3db92ff0dd604\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gaff61eca266da315002a3db92ff0dd604\">findNSB</a> (vec&lt; L, T, Q &gt; const &amp;Source, vec&lt; L, int, Q &gt; SignificantBitCount)</td></tr>\n<tr class=\"memdesc:gaff61eca266da315002a3db92ff0dd604\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the Nth significant bit set to 1 in the binary representation of value.  <a href=\"a00274.html#gaff61eca266da315002a3db92ff0dd604\">More...</a><br /></td></tr>\n<tr class=\"separator:gaff61eca266da315002a3db92ff0dd604\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga354caf634ef333d9cb4844407416256a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga354caf634ef333d9cb4844407416256a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga354caf634ef333d9cb4844407416256a\">isMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, T Multiple)</td></tr>\n<tr class=\"memdesc:ga354caf634ef333d9cb4844407416256a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the 'Value' is a multiple of 'Multiple'.  <a href=\"a00274.html#ga354caf634ef333d9cb4844407416256a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga354caf634ef333d9cb4844407416256a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabb4360e38c0943d8981ba965dead519d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabb4360e38c0943d8981ba965dead519d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gabb4360e38c0943d8981ba965dead519d\">isMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:gabb4360e38c0943d8981ba965dead519d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the 'Value' is a multiple of 'Multiple'.  <a href=\"a00274.html#gabb4360e38c0943d8981ba965dead519d\">More...</a><br /></td></tr>\n<tr class=\"separator:gabb4360e38c0943d8981ba965dead519d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf2b61ded7049bcb13e25164f832a290\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabf2b61ded7049bcb13e25164f832a290\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gabf2b61ded7049bcb13e25164f832a290\">isPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gabf2b61ded7049bcb13e25164f832a290\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the value is a power of two number.  <a href=\"a00274.html#gabf2b61ded7049bcb13e25164f832a290\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf2b61ded7049bcb13e25164f832a290\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace38d00601cbf49cd4dc03f003ab42b7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gace38d00601cbf49cd4dc03f003ab42b7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gace38d00601cbf49cd4dc03f003ab42b7\">nextMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, T Multiple)</td></tr>\n<tr class=\"memdesc:gace38d00601cbf49cd4dc03f003ab42b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00274.html#gace38d00601cbf49cd4dc03f003ab42b7\">More...</a><br /></td></tr>\n<tr class=\"separator:gace38d00601cbf49cd4dc03f003ab42b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacda365edad320c7aff19cc283a3b8ca2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacda365edad320c7aff19cc283a3b8ca2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gacda365edad320c7aff19cc283a3b8ca2\">nextMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:gacda365edad320c7aff19cc283a3b8ca2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00274.html#gacda365edad320c7aff19cc283a3b8ca2\">More...</a><br /></td></tr>\n<tr class=\"separator:gacda365edad320c7aff19cc283a3b8ca2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabba67f8aac9915e10fca727277274502\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabba67f8aac9915e10fca727277274502\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gabba67f8aac9915e10fca727277274502\">nextPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gabba67f8aac9915e10fca727277274502\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value, round up to a power of two.  <a href=\"a00274.html#gabba67f8aac9915e10fca727277274502\">More...</a><br /></td></tr>\n<tr class=\"separator:gabba67f8aac9915e10fca727277274502\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b3915a7cd3d50ff4976ab7a75a6880a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7b3915a7cd3d50ff4976ab7a75a6880a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga7b3915a7cd3d50ff4976ab7a75a6880a\">prevMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, T Multiple)</td></tr>\n<tr class=\"memdesc:ga7b3915a7cd3d50ff4976ab7a75a6880a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00274.html#ga7b3915a7cd3d50ff4976ab7a75a6880a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b3915a7cd3d50ff4976ab7a75a6880a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga51e04379e8aebbf83e2e5ab094578ee9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga51e04379e8aebbf83e2e5ab094578ee9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9\">prevMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:ga51e04379e8aebbf83e2e5ab094578ee9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga51e04379e8aebbf83e2e5ab094578ee9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga759db73f14d79f63612bd2398b577e7a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga759db73f14d79f63612bd2398b577e7a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga759db73f14d79f63612bd2398b577e7a\">prevPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga759db73f14d79f63612bd2398b577e7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value, round down to a power of two.  <a href=\"a00274.html#ga759db73f14d79f63612bd2398b577e7a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga759db73f14d79f63612bd2398b577e7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00274.html\">GLM_EXT_vector_integer</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00222_source.html\">vector_integer.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00222_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_integer.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_integer.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00222.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/_vectorize.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &quot;../vector_relational.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#include &quot;../common.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_integer extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00030\"></a><span class=\"lineno\">   30</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00274.html#gabf2b61ded7049bcb13e25164f832a290\">isPowerOfTwo</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00274.html#gabba67f8aac9915e10fca727277274502\">nextPowerOfTwo</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00274.html#ga759db73f14d79f63612bd2398b577e7a\">prevPowerOfTwo</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00070\"></a><span class=\"lineno\">   70</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00071\"></a><span class=\"lineno\">   71</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00274.html#gabb4360e38c0943d8981ba965dead519d\">isMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T Multiple);</div>\n<div class=\"line\"><a name=\"l00072\"></a><span class=\"lineno\">   72</span>&#160;</div>\n<div class=\"line\"><a name=\"l00080\"></a><span class=\"lineno\">   80</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00081\"></a><span class=\"lineno\">   81</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00274.html#gabb4360e38c0943d8981ba965dead519d\">isMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Multiple);</div>\n<div class=\"line\"><a name=\"l00082\"></a><span class=\"lineno\">   82</span>&#160;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00274.html#gacda365edad320c7aff19cc283a3b8ca2\">nextMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T Multiple);</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00274.html#gacda365edad320c7aff19cc283a3b8ca2\">nextMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Multiple);</div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9\">prevMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T Multiple);</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;</div>\n<div class=\"line\"><a name=\"l00132\"></a><span class=\"lineno\">  132</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00133\"></a><span class=\"lineno\">  133</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; <a class=\"code\" href=\"a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9\">prevMultiple</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Multiple);</div>\n<div class=\"line\"><a name=\"l00134\"></a><span class=\"lineno\">  134</span>&#160;</div>\n<div class=\"line\"><a name=\"l00143\"></a><span class=\"lineno\">  143</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00144\"></a><span class=\"lineno\">  144</span>&#160;        GLM_FUNC_DECL vec&lt;L, int, Q&gt; <a class=\"code\" href=\"a00274.html#gaff61eca266da315002a3db92ff0dd604\">findNSB</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; Source, vec&lt;L, int, Q&gt; SignificantBitCount);</div>\n<div class=\"line\"><a name=\"l00145\"></a><span class=\"lineno\">  145</span>&#160;</div>\n<div class=\"line\"><a name=\"l00147\"></a><span class=\"lineno\">  147</span>&#160;} <span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00148\"></a><span class=\"lineno\">  148</span>&#160;</div>\n<div class=\"line\"><a name=\"l00149\"></a><span class=\"lineno\">  149</span>&#160;<span class=\"preprocessor\">#include &quot;vector_integer.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00274_html_gabf2b61ded7049bcb13e25164f832a290\"><div class=\"ttname\"><a href=\"a00274.html#gabf2b61ded7049bcb13e25164f832a290\">glm::isPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt; isPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Return true if the value is a power of two number. </div></div>\n<div class=\"ttc\" id=\"a00274_html_gabba67f8aac9915e10fca727277274502\"><div class=\"ttname\"><a href=\"a00274.html#gabba67f8aac9915e10fca727277274502\">glm::nextPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; nextPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Return the power of two number which value is just higher the input value, round up to a power of two...</div></div>\n<div class=\"ttc\" id=\"a00274_html_gacda365edad320c7aff19cc283a3b8ca2\"><div class=\"ttname\"><a href=\"a00274.html#gacda365edad320c7aff19cc283a3b8ca2\">glm::nextMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; nextMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</div><div class=\"ttdoc\">Higher multiple number of Source. </div></div>\n<div class=\"ttc\" id=\"a00274_html_ga759db73f14d79f63612bd2398b577e7a\"><div class=\"ttname\"><a href=\"a00274.html#ga759db73f14d79f63612bd2398b577e7a\">glm::prevPowerOfTwo</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; prevPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Return the power of two number which value is just lower the input value, round down to a power of tw...</div></div>\n<div class=\"ttc\" id=\"a00274_html_gaff61eca266da315002a3db92ff0dd604\"><div class=\"ttname\"><a href=\"a00274.html#gaff61eca266da315002a3db92ff0dd604\">glm::findNSB</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, int, Q &gt; findNSB(vec&lt; L, T, Q &gt; const &amp;Source, vec&lt; L, int, Q &gt; SignificantBitCount)</div><div class=\"ttdoc\">Returns the bit number of the Nth significant bit set to 1 in the binary representation of value...</div></div>\n<div class=\"ttc\" id=\"a00274_html_ga51e04379e8aebbf83e2e5ab094578ee9\"><div class=\"ttname\"><a href=\"a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9\">glm::prevMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, T, Q &gt; prevMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</div><div class=\"ttdoc\">Lower multiple number of Source. </div></div>\n<div class=\"ttc\" id=\"a00274_html_gabb4360e38c0943d8981ba965dead519d\"><div class=\"ttname\"><a href=\"a00274.html#gabb4360e38c0943d8981ba965dead519d\">glm::isMultiple</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt; isMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</div><div class=\"ttdoc\">Return true if the &#39;Value&#39; is a multiple of &#39;Multiple&#39;. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00223.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_query.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_query.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00368.html\">GLM_GTX_vector_query</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00223_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga13da4a787a2ff70e95d561fb19ff91b4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga13da4a787a2ff70e95d561fb19ff91b4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4\">areCollinear</a> (vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga13da4a787a2ff70e95d561fb19ff91b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether two vectors are collinears.  <a href=\"a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga13da4a787a2ff70e95d561fb19ff91b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7b95b3f798e3c293262b2bdaad47c57\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac7b95b3f798e3c293262b2bdaad47c57\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#gac7b95b3f798e3c293262b2bdaad47c57\">areOrthogonal</a> (vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gac7b95b3f798e3c293262b2bdaad47c57\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether two vectors are orthogonals.  <a href=\"a00368.html#gac7b95b3f798e3c293262b2bdaad47c57\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7b95b3f798e3c293262b2bdaad47c57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b091c3d7f9ee3b0708311c001c293e3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1b091c3d7f9ee3b0708311c001c293e3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3\">areOrthonormal</a> (vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga1b091c3d7f9ee3b0708311c001c293e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether two vectors are orthonormal.  <a href=\"a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1b091c3d7f9ee3b0708311c001c293e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6ec1688eab7442fe96fe4941d5d4e76\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf6ec1688eab7442fe96fe4941d5d4e76\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76\">isCompNull</a> (vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaf6ec1688eab7442fe96fe4941d5d4e76\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether a each component of a vector is null.  <a href=\"a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6ec1688eab7442fe96fe4941d5d4e76\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3c974f459fd75453134fad7ae89a39e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac3c974f459fd75453134fad7ae89a39e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#gac3c974f459fd75453134fad7ae89a39e\">isNormalized</a> (vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gac3c974f459fd75453134fad7ae89a39e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether a vector is normalized.  <a href=\"a00368.html#gac3c974f459fd75453134fad7ae89a39e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac3c974f459fd75453134fad7ae89a39e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4a3637dbcb4bb42dc55caea7a1e0495\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab4a3637dbcb4bb42dc55caea7a1e0495\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495\">isNull</a> (vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gab4a3637dbcb4bb42dc55caea7a1e0495\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether a vector is null.  <a href=\"a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495\">More...</a><br /></td></tr>\n<tr class=\"separator:gab4a3637dbcb4bb42dc55caea7a1e0495\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00368.html\">GLM_GTX_vector_query</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00223_source.html\">vector_query.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00223_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_query.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_query.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00223.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &lt;cfloat&gt;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#include &lt;limits&gt;</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_vector_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_vector_query extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4\">areCollinear</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v0, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00368.html#gac7b95b3f798e3c293262b2bdaad47c57\">areOrthogonal</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v0, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00042\"></a><span class=\"lineno\">   42</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00368.html#gac3c974f459fd75453134fad7ae89a39e\">isNormalized</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495\">isNull</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00052\"></a><span class=\"lineno\">   52</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_DECL vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76\">isCompNull</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00060\"></a><span class=\"lineno\">   60</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00061\"></a><span class=\"lineno\">   61</span>&#160;        GLM_FUNC_DECL <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3\">areOrthonormal</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v0, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; v1, T <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00062\"></a><span class=\"lineno\">   62</span>&#160;</div>\n<div class=\"line\"><a name=\"l00064\"></a><span class=\"lineno\">   64</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;<span class=\"preprocessor\">#include &quot;vector_query.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00368_html_gab4a3637dbcb4bb42dc55caea7a1e0495\"><div class=\"ttname\"><a href=\"a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495\">glm::isNull</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool isNull(vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</div><div class=\"ttdoc\">Check whether a vector is null. </div></div>\n<div class=\"ttc\" id=\"a00368_html_ga13da4a787a2ff70e95d561fb19ff91b4\"><div class=\"ttname\"><a href=\"a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4\">glm::areCollinear</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool areCollinear(vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</div><div class=\"ttdoc\">Check whether two vectors are collinears. </div></div>\n<div class=\"ttc\" id=\"a00368_html_gac3c974f459fd75453134fad7ae89a39e\"><div class=\"ttname\"><a href=\"a00368.html#gac3c974f459fd75453134fad7ae89a39e\">glm::isNormalized</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool isNormalized(vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</div><div class=\"ttdoc\">Check whether a vector is normalized. </div></div>\n<div class=\"ttc\" id=\"a00368_html_ga1b091c3d7f9ee3b0708311c001c293e3\"><div class=\"ttname\"><a href=\"a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3\">glm::areOrthonormal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool areOrthonormal(vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</div><div class=\"ttdoc\">Check whether two vectors are orthonormal. </div></div>\n<div class=\"ttc\" id=\"a00368_html_gaf6ec1688eab7442fe96fe4941d5d4e76\"><div class=\"ttname\"><a href=\"a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76\">glm::isCompNull</a></div><div class=\"ttdeci\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt; isCompNull(vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</div><div class=\"ttdoc\">Check whether a each component of a vector is null. </div></div>\n<div class=\"ttc\" id=\"a00368_html_gac7b95b3f798e3c293262b2bdaad47c57\"><div class=\"ttname\"><a href=\"a00368.html#gac7b95b3f798e3c293262b2bdaad47c57\">glm::areOrthogonal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL bool areOrthogonal(vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</div><div class=\"ttdoc\">Check whether two vectors are orthogonals. </div></div>\n<div class=\"ttc\" id=\"a00259_html_ga2a1e57fc5592b69cfae84174cbfc9429\"><div class=\"ttname\"><a href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">glm::epsilon</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class=\"ttdoc\">Return the epsilon constant for floating point types. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00224.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_relational.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">ext/vector_relational.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00275.html\">GLM_EXT_vector_relational</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00224_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2ac7651a2fa7354f2da610dbd50d28e2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2ac7651a2fa7354f2da610dbd50d28e2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga2ac7651a2fa7354f2da610dbd50d28e2\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:ga2ac7651a2fa7354f2da610dbd50d28e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00275.html#ga2ac7651a2fa7354f2da610dbd50d28e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ac7651a2fa7354f2da610dbd50d28e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga37d261a65f69babc82cec2ae1af7145f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga37d261a65f69babc82cec2ae1af7145f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga37d261a65f69babc82cec2ae1af7145f\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga37d261a65f69babc82cec2ae1af7145f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00275.html#ga37d261a65f69babc82cec2ae1af7145f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga37d261a65f69babc82cec2ae1af7145f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b46cb50911e97b32f4cd743c2c69771\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2b46cb50911e97b32f4cd743c2c69771\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga2b46cb50911e97b32f4cd743c2c69771\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:ga2b46cb50911e97b32f4cd743c2c69771\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00275.html#ga2b46cb50911e97b32f4cd743c2c69771\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b46cb50911e97b32f4cd743c2c69771\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7da2b8605be7f245b39cb6fbf6d9d581\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7da2b8605be7f245b39cb6fbf6d9d581\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:ga7da2b8605be7f245b39cb6fbf6d9d581\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7da2b8605be7f245b39cb6fbf6d9d581\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a99cc41341567567a608719449c1fac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4a99cc41341567567a608719449c1fac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga4a99cc41341567567a608719449c1fac\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:ga4a99cc41341567567a608719449c1fac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00275.html#ga4a99cc41341567567a608719449c1fac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a99cc41341567567a608719449c1fac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga417cf51304359db18e819dda9bce5767\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga417cf51304359db18e819dda9bce5767\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga417cf51304359db18e819dda9bce5767\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga417cf51304359db18e819dda9bce5767\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00275.html#ga417cf51304359db18e819dda9bce5767\">More...</a><br /></td></tr>\n<tr class=\"separator:ga417cf51304359db18e819dda9bce5767\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b5c2c3f83422ae5b71fa960d03b0339\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8b5c2c3f83422ae5b71fa960d03b0339\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga8b5c2c3f83422ae5b71fa960d03b0339\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:ga8b5c2c3f83422ae5b71fa960d03b0339\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00275.html#ga8b5c2c3f83422ae5b71fa960d03b0339\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b5c2c3f83422ae5b71fa960d03b0339\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b15ffe32987a6029b14398eb0def01a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0b15ffe32987a6029b14398eb0def01a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:ga0b15ffe32987a6029b14398eb0def01a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b15ffe32987a6029b14398eb0def01a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00275.html\">GLM_EXT_vector_relational</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd>\n<dd>\n<a class=\"el\" href=\"a00261.html\" title=\"Include <glm/ext/scalar_integer.hpp> to use the features of this extension. \">GLM_EXT_scalar_integer</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00224_source.html\">ext/vector_relational.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00224_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_relational.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ext/vector_relational.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00224.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_relational extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">equal</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">equal</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">notEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, T <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">notEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; <a class=\"code\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a>);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00074\"></a><span class=\"lineno\">   74</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">equal</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;</div>\n<div class=\"line\"><a name=\"l00083\"></a><span class=\"lineno\">   83</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00084\"></a><span class=\"lineno\">   84</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">equal</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; ULPs);</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;</div>\n<div class=\"line\"><a name=\"l00092\"></a><span class=\"lineno\">   92</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00093\"></a><span class=\"lineno\">   93</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">notEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;</div>\n<div class=\"line\"><a name=\"l00101\"></a><span class=\"lineno\">  101</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00102\"></a><span class=\"lineno\">  102</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">notEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y, vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; ULPs);</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;<span class=\"preprocessor\">#include &quot;vector_relational.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00275_html_ga0b15ffe32987a6029b14398eb0def01a\"><div class=\"ttname\"><a href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">glm::notEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)</div><div class=\"ttdoc\">Returns the component-wise comparison between two vectors in term of ULPs. </div></div>\n<div class=\"ttc\" id=\"a00275_html_ga7da2b8605be7f245b39cb6fbf6d9d581\"><div class=\"ttname\"><a href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">glm::equal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)</div><div class=\"ttdoc\">Returns the component-wise comparison between two vectors in term of ULPs. </div></div>\n<div class=\"ttc\" id=\"a00259_html_ga2a1e57fc5592b69cfae84174cbfc9429\"><div class=\"ttname\"><a href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">glm::epsilon</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon()</div><div class=\"ttdoc\">Return the epsilon constant for floating point types. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00225.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_relational.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_relational.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00225_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga87e53f50b679f5f95c5cb4780311b3dd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga87e53f50b679f5f95c5cb4780311b3dd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd\">all</a> (vec&lt; L, bool, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga87e53f50b679f5f95c5cb4780311b3dd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if all components of x are true.  <a href=\"a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga87e53f50b679f5f95c5cb4780311b3dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga911b3f8e41459dd551ccb6d385d91061\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga911b3f8e41459dd551ccb6d385d91061\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga911b3f8e41459dd551ccb6d385d91061\">any</a> (vec&lt; L, bool, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga911b3f8e41459dd551ccb6d385d91061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if any component of x is true.  <a href=\"a00374.html#ga911b3f8e41459dd551ccb6d385d91061\">More...</a><br /></td></tr>\n<tr class=\"separator:ga911b3f8e41459dd551ccb6d385d91061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4c5cfdaa70834421397a85aa83ad946\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab4c5cfdaa70834421397a85aa83ad946\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#gab4c5cfdaa70834421397a85aa83ad946\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gab4c5cfdaa70834421397a85aa83ad946\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x == y.  <a href=\"a00374.html#gab4c5cfdaa70834421397a85aa83ad946\">More...</a><br /></td></tr>\n<tr class=\"separator:gab4c5cfdaa70834421397a85aa83ad946\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadfdb8ea82deca869ddc7e63ea5a63ae4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadfdb8ea82deca869ddc7e63ea5a63ae4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4\">greaterThan</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gadfdb8ea82deca869ddc7e63ea5a63ae4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &gt; y.  <a href=\"a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4\">More...</a><br /></td></tr>\n<tr class=\"separator:gadfdb8ea82deca869ddc7e63ea5a63ae4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga859975f538940f8d18fe62f916b9abd7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga859975f538940f8d18fe62f916b9abd7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga859975f538940f8d18fe62f916b9abd7\">greaterThanEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga859975f538940f8d18fe62f916b9abd7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &gt;= y.  <a href=\"a00374.html#ga859975f538940f8d18fe62f916b9abd7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga859975f538940f8d18fe62f916b9abd7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae90ed1592c395f93e3f3dfce6b2f39c6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae90ed1592c395f93e3f3dfce6b2f39c6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6\">lessThan</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gae90ed1592c395f93e3f3dfce6b2f39c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison result of x &lt; y.  <a href=\"a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6\">More...</a><br /></td></tr>\n<tr class=\"separator:gae90ed1592c395f93e3f3dfce6b2f39c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0bdafc019d227257ff73fb5bcca1718\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab0bdafc019d227257ff73fb5bcca1718\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#gab0bdafc019d227257ff73fb5bcca1718\">lessThanEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gab0bdafc019d227257ff73fb5bcca1718\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &lt;= y.  <a href=\"a00374.html#gab0bdafc019d227257ff73fb5bcca1718\">More...</a><br /></td></tr>\n<tr class=\"separator:gab0bdafc019d227257ff73fb5bcca1718\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga610fcd175791fd246e328ffee10dbf1e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga610fcd175791fd246e328ffee10dbf1e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga610fcd175791fd246e328ffee10dbf1e\">not_</a> (vec&lt; L, bool, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga610fcd175791fd246e328ffee10dbf1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise logical complement of x.  <a href=\"a00374.html#ga610fcd175791fd246e328ffee10dbf1e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga610fcd175791fd246e328ffee10dbf1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x != y.  <a href=\"a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27\">More...</a><br /></td></tr>\n<tr class=\"separator:ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00225_source.html\">vector_relational.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00225_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_relational.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_relational.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00225.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#include &quot;detail/qualifier.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#include &quot;detail/setup.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;</div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6\">lessThan</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00048\"></a><span class=\"lineno\">   48</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00374.html#gab0bdafc019d227257ff73fb5bcca1718\">lessThanEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00058\"></a><span class=\"lineno\">   58</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4\">greaterThan</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00059\"></a><span class=\"lineno\">   59</span>&#160;</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00068\"></a><span class=\"lineno\">   68</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00374.html#ga859975f538940f8d18fe62f916b9abd7\">greaterThanEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00069\"></a><span class=\"lineno\">   69</span>&#160;</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00078\"></a><span class=\"lineno\">   78</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00374.html#gab4c5cfdaa70834421397a85aa83ad946\">equal</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00079\"></a><span class=\"lineno\">   79</span>&#160;</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00088\"></a><span class=\"lineno\">   88</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27\">notEqual</a>(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00089\"></a><span class=\"lineno\">   89</span>&#160;</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00097\"></a><span class=\"lineno\">   97</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00374.html#ga911b3f8e41459dd551ccb6d385d91061\">any</a>(vec&lt;L, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00098\"></a><span class=\"lineno\">   98</span>&#160;</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00106\"></a><span class=\"lineno\">  106</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR <span class=\"keywordtype\">bool</span> <a class=\"code\" href=\"a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd\">all</a>(vec&lt;L, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;</div>\n<div class=\"line\"><a name=\"l00115\"></a><span class=\"lineno\">  115</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00116\"></a><span class=\"lineno\">  116</span>&#160;        GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; <a class=\"code\" href=\"a00374.html#ga610fcd175791fd246e328ffee10dbf1e\">not_</a>(vec&lt;L, bool, Q&gt; <span class=\"keyword\">const</span>&amp; v);</div>\n<div class=\"line\"><a name=\"l00117\"></a><span class=\"lineno\">  117</span>&#160;</div>\n<div class=\"line\"><a name=\"l00119\"></a><span class=\"lineno\">  119</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00120\"></a><span class=\"lineno\">  120</span>&#160;</div>\n<div class=\"line\"><a name=\"l00121\"></a><span class=\"lineno\">  121</span>&#160;<span class=\"preprocessor\">#include &quot;detail/func_vector_relational.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00374_html_ga87e53f50b679f5f95c5cb4780311b3dd\"><div class=\"ttname\"><a href=\"a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd\">glm::all</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR bool all(vec&lt; L, bool, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns true if all components of x are true. </div></div>\n<div class=\"ttc\" id=\"a00374_html_gadfdb8ea82deca869ddc7e63ea5a63ae4\"><div class=\"ttname\"><a href=\"a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4\">glm::greaterThan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; greaterThan(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison of result x > y. </div></div>\n<div class=\"ttc\" id=\"a00374_html_ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><div class=\"ttname\"><a href=\"a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27\">glm::notEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison of result x != y. </div></div>\n<div class=\"ttc\" id=\"a00374_html_gab0bdafc019d227257ff73fb5bcca1718\"><div class=\"ttname\"><a href=\"a00374.html#gab0bdafc019d227257ff73fb5bcca1718\">glm::lessThanEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; lessThanEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison of result x <= y. </div></div>\n<div class=\"ttc\" id=\"a00374_html_ga610fcd175791fd246e328ffee10dbf1e\"><div class=\"ttname\"><a href=\"a00374.html#ga610fcd175791fd246e328ffee10dbf1e\">glm::not_</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; not_(vec&lt; L, bool, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns the component-wise logical complement of x. </div></div>\n<div class=\"ttc\" id=\"a00374_html_ga911b3f8e41459dd551ccb6d385d91061\"><div class=\"ttname\"><a href=\"a00374.html#ga911b3f8e41459dd551ccb6d385d91061\">glm::any</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR bool any(vec&lt; L, bool, Q &gt; const &amp;v)</div><div class=\"ttdoc\">Returns true if any component of x is true. </div></div>\n<div class=\"ttc\" id=\"a00374_html_gab4c5cfdaa70834421397a85aa83ad946\"><div class=\"ttname\"><a href=\"a00374.html#gab4c5cfdaa70834421397a85aa83ad946\">glm::equal</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison of result x == y. </div></div>\n<div class=\"ttc\" id=\"a00374_html_ga859975f538940f8d18fe62f916b9abd7\"><div class=\"ttname\"><a href=\"a00374.html#ga859975f538940f8d18fe62f916b9abd7\">glm::greaterThanEqual</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; greaterThanEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison of result x >= y. </div></div>\n<div class=\"ttc\" id=\"a00374_html_gae90ed1592c395f93e3f3dfce6b2f39c6\"><div class=\"ttname\"><a href=\"a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6\">glm::lessThan</a></div><div class=\"ttdeci\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt; lessThan(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</div><div class=\"ttdoc\">Returns the component-wise comparison result of x < y. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00226.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint1.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint1.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00276.html\">GLM_EXT_vector_uint1</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00226_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gac3bdd96183d23876c58a1424585fefe7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac3bdd96183d23876c58a1424585fefe7\"></a>\ntypedef vec&lt; 1, unsigned int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">uvec1</a></td></tr>\n<tr class=\"memdesc:gac3bdd96183d23876c58a1424585fefe7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gac3bdd96183d23876c58a1424585fefe7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00276.html\">GLM_EXT_vector_uint1</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00226_source.html\">vector_uint1.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00226_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint1.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint1.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00226.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_uint1 extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, unsigned int, defaultp&gt;                  <a class=\"code\" href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\">   32</span>&#160;</div>\n<div class=\"ttc\" id=\"a00276_html_gac3bdd96183d23876c58a1424585fefe7\"><div class=\"ttname\"><a href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">glm::uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, defaultp &gt; uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00226_source.html#l00028\">vector_uint1.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00227.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint1_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint1_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00277.html\">GLM_EXT_vector_uint1_precision</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00227_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gacda57dd8c2bff4934c7f09ddd87c0f39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, unsigned int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">highp_uvec1</a></td></tr>\n<tr class=\"memdesc:gacda57dd8c2bff4934c7f09ddd87c0f39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of unsigned integer values.  <a href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">More...</a><br /></td></tr>\n<tr class=\"separator:gacda57dd8c2bff4934c7f09ddd87c0f39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8bf3fc8a7863d140f48b29341c750402\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, unsigned int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">lowp_uvec1</a></td></tr>\n<tr class=\"memdesc:ga8bf3fc8a7863d140f48b29341c750402\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of unsigned integer values.  <a href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8bf3fc8a7863d140f48b29341c750402\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga38fde73aaf1420175ece8d4882558a3f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, unsigned int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">mediump_uvec1</a></td></tr>\n<tr class=\"memdesc:ga38fde73aaf1420175ece8d4882558a3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of unsigned integer values.  <a href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga38fde73aaf1420175ece8d4882558a3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00277.html\">GLM_EXT_vector_uint1_precision</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00227_source.html\">vector_uint1_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00227_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint1_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint1_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00227.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00012\"></a><span class=\"lineno\">   12</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_uint1_precision extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">   27</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, unsigned int, highp&gt;                     <a class=\"code\" href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">highp_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;</div>\n<div class=\"line\"><a name=\"l00032\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">   32</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, unsigned int, mediump&gt;           <a class=\"code\" href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">mediump_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00033\"></a><span class=\"lineno\">   33</span>&#160;</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">   37</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;1, unsigned int, lowp&gt;                      <a class=\"code\" href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">lowp_uvec1</a>;</div>\n<div class=\"line\"><a name=\"l00038\"></a><span class=\"lineno\">   38</span>&#160;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00277_html_ga38fde73aaf1420175ece8d4882558a3f\"><div class=\"ttname\"><a href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">glm::mediump_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, mediump &gt; mediump_uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00227_source.html#l00032\">vector_uint1_precision.hpp:32</a></div></div>\n<div class=\"ttc\" id=\"a00277_html_gacda57dd8c2bff4934c7f09ddd87c0f39\"><div class=\"ttname\"><a href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">glm::highp_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, highp &gt; highp_uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00227_source.html#l00027\">vector_uint1_precision.hpp:27</a></div></div>\n<div class=\"ttc\" id=\"a00277_html_ga8bf3fc8a7863d140f48b29341c750402\"><div class=\"ttname\"><a href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">glm::lowp_uvec1</a></div><div class=\"ttdeci\">vec&lt; 1, unsigned int, lowp &gt; lowp_uvec1</div><div class=\"ttdoc\">1 component vector of unsigned integer values. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00227_source.html#l00037\">vector_uint1_precision.hpp:37</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00228.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint2.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint2.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00228_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga2f6d9ec3ae14813ade37d6aee3715fdb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, unsigned int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a></td></tr>\n<tr class=\"memdesc:ga2f6d9ec3ae14813ade37d6aee3715fdb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of unsigned integer numbers.  <a href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f6d9ec3ae14813ade37d6aee3715fdb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00228_source.html\">vector_uint2.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00228_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint2.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint2.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00228.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, unsigned int, defaultp&gt;          <a class=\"code\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga2f6d9ec3ae14813ade37d6aee3715fdb\"><div class=\"ttname\"><a href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">glm::uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, defaultp &gt; uvec2</div><div class=\"ttdoc\">2 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00228_source.html#l00015\">vector_uint2.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00229.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint2_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint2_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00229_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gad5dd50da9e37387ca6b4e6f9c80fe6f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, unsigned int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">highp_uvec2</a></td></tr>\n<tr class=\"memdesc:gad5dd50da9e37387ca6b4e6f9c80fe6f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high qualifier unsigned integer numbers.  <a href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">More...</a><br /></td></tr>\n<tr class=\"separator:gad5dd50da9e37387ca6b4e6f9c80fe6f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga752ee45136011301b64afd8c310c47a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, unsigned int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">lowp_uvec2</a></td></tr>\n<tr class=\"memdesc:ga752ee45136011301b64afd8c310c47a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low qualifier unsigned integer numbers.  <a href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga752ee45136011301b64afd8c310c47a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa3b4f7806dad03d83bb3da0baa1e3b9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, unsigned int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">mediump_uvec2</a></td></tr>\n<tr class=\"memdesc:gaa3b4f7806dad03d83bb3da0baa1e3b9b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium qualifier unsigned integer numbers.  <a href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3b4f7806dad03d83bb3da0baa1e3b9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00229_source.html\">vector_uint2_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00229_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint2_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint2_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00229.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec2.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, unsigned int, highp&gt;             <a class=\"code\" href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">highp_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, unsigned int, mediump&gt;   <a class=\"code\" href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">mediump_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;2, unsigned int, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">lowp_uvec2</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga752ee45136011301b64afd8c310c47a4\"><div class=\"ttname\"><a href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">glm::lowp_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, lowp &gt; lowp_uvec2</div><div class=\"ttdoc\">2 components vector of low qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00229_source.html#l00028\">vector_uint2_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gad5dd50da9e37387ca6b4e6f9c80fe6f8\"><div class=\"ttname\"><a href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">glm::highp_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, highp &gt; highp_uvec2</div><div class=\"ttdoc\">2 components vector of high qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00229_source.html#l00016\">vector_uint2_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaa3b4f7806dad03d83bb3da0baa1e3b9b\"><div class=\"ttname\"><a href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">glm::mediump_uvec2</a></div><div class=\"ttdeci\">vec&lt; 2, unsigned int, mediump &gt; mediump_uvec2</div><div class=\"ttdoc\">2 components vector of medium qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00229_source.html#l00022\">vector_uint2_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00230.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint3.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint3.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00230_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga3d3e55874babd4bf93baa7bbc83ae418\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, unsigned int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">uvec3</a></td></tr>\n<tr class=\"memdesc:ga3d3e55874babd4bf93baa7bbc83ae418\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of unsigned integer numbers.  <a href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3d3e55874babd4bf93baa7bbc83ae418\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00230_source.html\">vector_uint3.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00230_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint3.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint3.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00230.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, unsigned int, defaultp&gt;          <a class=\"code\" href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_ga3d3e55874babd4bf93baa7bbc83ae418\"><div class=\"ttname\"><a href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">glm::uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, defaultp &gt; uvec3</div><div class=\"ttdoc\">3 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00230_source.html#l00015\">vector_uint3.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00231.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint3_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint3_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00231_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaef61508dd40ec523416697982f9ceaae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, unsigned int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">highp_uvec3</a></td></tr>\n<tr class=\"memdesc:gaef61508dd40ec523416697982f9ceaae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high qualifier unsigned integer numbers.  <a href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">More...</a><br /></td></tr>\n<tr class=\"separator:gaef61508dd40ec523416697982f9ceaae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, unsigned int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">lowp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low qualifier unsigned integer numbers.  <a href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83b7df38feefbb357f3673d950fafef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, unsigned int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">mediump_uvec3</a></td></tr>\n<tr class=\"memdesc:ga83b7df38feefbb357f3673d950fafef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium qualifier unsigned integer numbers.  <a href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga83b7df38feefbb357f3673d950fafef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00231_source.html\">vector_uint3_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00231_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint3_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint3_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00231.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec3.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, unsigned int, highp&gt;             <a class=\"code\" href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">highp_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, unsigned int, mediump&gt;   <a class=\"code\" href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">mediump_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;3, unsigned int, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">lowp_uvec3</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga83b7df38feefbb357f3673d950fafef7\"><div class=\"ttname\"><a href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">glm::mediump_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, mediump &gt; mediump_uvec3</div><div class=\"ttdoc\">3 components vector of medium qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00231_source.html#l00022\">vector_uint3_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaef61508dd40ec523416697982f9ceaae\"><div class=\"ttname\"><a href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">glm::highp_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, highp &gt; highp_uvec3</div><div class=\"ttdoc\">3 components vector of high qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00231_source.html#l00016\">vector_uint3_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"><div class=\"ttname\"><a href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">glm::lowp_uvec3</a></div><div class=\"ttdeci\">vec&lt; 3, unsigned int, lowp &gt; lowp_uvec3</div><div class=\"ttdoc\">3 components vector of low qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00231_source.html#l00028\">vector_uint3_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00232.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint4.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint4.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00232_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaa57e96bb337867329d5f43bcc27c1095\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, unsigned int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a></td></tr>\n<tr class=\"memdesc:gaa57e96bb337867329d5f43bcc27c1095\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of unsigned integer numbers.  <a href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa57e96bb337867329d5f43bcc27c1095\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00232_source.html\">vector_uint4.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00232_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint4.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint4.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00232.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">   15</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, unsigned int, defaultp&gt;          <a class=\"code\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;</div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00281_html_gaa57e96bb337867329d5f43bcc27c1095\"><div class=\"ttname\"><a href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">glm::uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, defaultp &gt; uvec4</div><div class=\"ttdoc\">4 components vector of unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00232_source.html#l00015\">vector_uint4.hpp:15</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00233.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint4_precision.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint4_precision.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00280.html\">Core features</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00233_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaeebd7dd9f3e678691f8620241e5f9221\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, unsigned int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">highp_uvec4</a></td></tr>\n<tr class=\"memdesc:gaeebd7dd9f3e678691f8620241e5f9221\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high qualifier unsigned integer numbers.  <a href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeebd7dd9f3e678691f8620241e5f9221\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, unsigned int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">lowp_uvec4</a></td></tr>\n<tr class=\"memdesc:ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low qualifier unsigned integer numbers.  <a href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga64ed0deb6573375b7016daf82ffd53a7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, unsigned int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">mediump_uvec4</a></td></tr>\n<tr class=\"memdesc:ga64ed0deb6573375b7016daf82ffd53a7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium qualifier unsigned integer numbers.  <a href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga64ed0deb6573375b7016daf82ffd53a7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00280.html\">Core features</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00233_source.html\">vector_uint4_precision.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00233_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_uint4_precision.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_uint4_precision.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00233.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00004\"></a><span class=\"lineno\">    4</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00005\"></a><span class=\"lineno\">    5</span>&#160;<span class=\"preprocessor\">#include &quot;../detail/type_vec4.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00006\"></a><span class=\"lineno\">    6</span>&#160;</div>\n<div class=\"line\"><a name=\"l00007\"></a><span class=\"lineno\">    7</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00008\"></a><span class=\"lineno\">    8</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00011\"></a><span class=\"lineno\">   11</span>&#160;</div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">   16</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, unsigned int, highp&gt;             <a class=\"code\" href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">highp_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">   22</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, unsigned int, mediump&gt;   <a class=\"code\" href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">mediump_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;</div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\"><a class=\"line\" href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">   28</a></span>&#160;        <span class=\"keyword\">typedef</span> vec&lt;4, unsigned int, lowp&gt;              <a class=\"code\" href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">lowp_uvec4</a>;</div>\n<div class=\"line\"><a name=\"l00029\"></a><span class=\"lineno\">   29</span>&#160;</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"ttc\" id=\"a00282_html_ga64ed0deb6573375b7016daf82ffd53a7\"><div class=\"ttname\"><a href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">glm::mediump_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, mediump &gt; mediump_uvec4</div><div class=\"ttdoc\">4 components vector of medium qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00233_source.html#l00022\">vector_uint4_precision.hpp:22</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_gaeebd7dd9f3e678691f8620241e5f9221\"><div class=\"ttname\"><a href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">glm::highp_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, highp &gt; highp_uvec4</div><div class=\"ttdoc\">4 components vector of high qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00233_source.html#l00016\">vector_uint4_precision.hpp:16</a></div></div>\n<div class=\"ttc\" id=\"a00282_html_ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"><div class=\"ttname\"><a href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">glm::lowp_uvec4</a></div><div class=\"ttdeci\">vec&lt; 4, unsigned int, lowp &gt; lowp_uvec4</div><div class=\"ttdoc\">4 components vector of low qualifier unsigned integer numbers. </div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00233_source.html#l00028\">vector_uint4_precision.hpp:28</a></div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00234.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_ulp.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">vector_ulp.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00278.html\">GLM_EXT_vector_ulp</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00234_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:a03f464c6a03a725ea18e72cf1ed31417\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a03f464c6a03a725ea18e72cf1ed31417\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>floatDistance</b> (vec&lt; L, float, Q &gt; const &amp;x, vec&lt; L, float, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:a03f464c6a03a725ea18e72cf1ed31417\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the distance in the number of ULP between 2 single-precision floating-point scalars.  <a href=\"a00236.html#a03f464c6a03a725ea18e72cf1ed31417\">More...</a><br /></td></tr>\n<tr class=\"separator:a03f464c6a03a725ea18e72cf1ed31417\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:abe2040cbbe66a60cafb37f6155f78e4c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:abe2040cbbe66a60cafb37f6155f78e4c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int64, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>floatDistance</b> (vec&lt; L, double, Q &gt; const &amp;x, vec&lt; L, double, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:abe2040cbbe66a60cafb37f6155f78e4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the distance in the number of ULP between 2 double-precision floating-point scalars.  <a href=\"a00236.html#abe2040cbbe66a60cafb37f6155f78e4c\">More...</a><br /></td></tr>\n<tr class=\"separator:abe2040cbbe66a60cafb37f6155f78e4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:adbd6e5dff9c0ae4567b3edd9019c1bee\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:adbd6e5dff9c0ae4567b3edd9019c1bee\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>nextFloat</b> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:adbd6e5dff9c0ae4567b3edd9019c1bee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the next ULP value(s) after the input value(s).  <a href=\"a00236.html#adbd6e5dff9c0ae4567b3edd9019c1bee\">More...</a><br /></td></tr>\n<tr class=\"separator:adbd6e5dff9c0ae4567b3edd9019c1bee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a92f82c4f45b5b43ccc29533990db079d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a92f82c4f45b5b43ccc29533990db079d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>nextFloat</b> (vec&lt; L, T, Q &gt; const &amp;x, int ULPs)</td></tr>\n<tr class=\"memdesc:a92f82c4f45b5b43ccc29533990db079d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance after the input value(s).  <a href=\"a00236.html#a92f82c4f45b5b43ccc29533990db079d\">More...</a><br /></td></tr>\n<tr class=\"separator:a92f82c4f45b5b43ccc29533990db079d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a48e9b73c50fcf589e0032b8dbed9a3f9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a48e9b73c50fcf589e0032b8dbed9a3f9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>nextFloat</b> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:a48e9b73c50fcf589e0032b8dbed9a3f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance after the input value(s).  <a href=\"a00236.html#a48e9b73c50fcf589e0032b8dbed9a3f9\">More...</a><br /></td></tr>\n<tr class=\"separator:a48e9b73c50fcf589e0032b8dbed9a3f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a82d4ce132256c1a70d0e7100e6eae2e1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a82d4ce132256c1a70d0e7100e6eae2e1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prevFloat</b> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:a82d4ce132256c1a70d0e7100e6eae2e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the previous ULP value(s) before the input value(s).  <a href=\"a00236.html#a82d4ce132256c1a70d0e7100e6eae2e1\">More...</a><br /></td></tr>\n<tr class=\"separator:a82d4ce132256c1a70d0e7100e6eae2e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a4ab818050036d40994346defe41a05b9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a4ab818050036d40994346defe41a05b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prevFloat</b> (vec&lt; L, T, Q &gt; const &amp;x, int ULPs)</td></tr>\n<tr class=\"memdesc:a4ab818050036d40994346defe41a05b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance before the input value(s).  <a href=\"a00236.html#a4ab818050036d40994346defe41a05b9\">More...</a><br /></td></tr>\n<tr class=\"separator:a4ab818050036d40994346defe41a05b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a569e3ce6771e1e4f9e425ec6d859d9f9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:a569e3ce6771e1e4f9e425ec6d859d9f9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><b>prevFloat</b> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:a569e3ce6771e1e4f9e425ec6d859d9f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the value(s) ULP distance before the input value(s).  <a href=\"a00236.html#a569e3ce6771e1e4f9e425ec6d859d9f9\">More...</a><br /></td></tr>\n<tr class=\"separator:a569e3ce6771e1e4f9e425ec6d859d9f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00278.html\">GLM_EXT_vector_ulp</a> </p>\n\n<p>Definition in file <a class=\"el\" href=\"a00234_source.html\">vector_ulp.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00234_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: vector_ulp.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">vector_ulp.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00234.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"comment\">// Dependencies</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#include &quot;../ext/scalar_ulp.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;</div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#       pragma message(&quot;GLM: GLM_EXT_vector_ulp extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;</div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; nextFloat(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00037\"></a><span class=\"lineno\">   37</span>&#160;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; nextFloat(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00047\"></a><span class=\"lineno\">   47</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00056\"></a><span class=\"lineno\">   56</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; nextFloat(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; ULPs);</div>\n<div class=\"line\"><a name=\"l00057\"></a><span class=\"lineno\">   57</span>&#160;</div>\n<div class=\"line\"><a name=\"l00065\"></a><span class=\"lineno\">   65</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00066\"></a><span class=\"lineno\">   66</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; prevFloat(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x);</div>\n<div class=\"line\"><a name=\"l00067\"></a><span class=\"lineno\">   67</span>&#160;</div>\n<div class=\"line\"><a name=\"l00075\"></a><span class=\"lineno\">   75</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00076\"></a><span class=\"lineno\">   76</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; prevFloat(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, <span class=\"keywordtype\">int</span> ULPs);</div>\n<div class=\"line\"><a name=\"l00077\"></a><span class=\"lineno\">   77</span>&#160;</div>\n<div class=\"line\"><a name=\"l00085\"></a><span class=\"lineno\">   85</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00086\"></a><span class=\"lineno\">   86</span>&#160;        GLM_FUNC_DECL vec&lt;L, T, Q&gt; prevFloat(vec&lt;L, T, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, int, Q&gt; <span class=\"keyword\">const</span>&amp; ULPs);</div>\n<div class=\"line\"><a name=\"l00087\"></a><span class=\"lineno\">   87</span>&#160;</div>\n<div class=\"line\"><a name=\"l00094\"></a><span class=\"lineno\">   94</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00095\"></a><span class=\"lineno\">   95</span>&#160;        GLM_FUNC_DECL vec&lt;L, int, Q&gt; floatDistance(vec&lt;L, float, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, float, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00096\"></a><span class=\"lineno\">   96</span>&#160;</div>\n<div class=\"line\"><a name=\"l00103\"></a><span class=\"lineno\">  103</span>&#160;        <span class=\"keyword\">template</span>&lt;length_t L, <span class=\"keyword\">typename</span> T, qualifier Q&gt;</div>\n<div class=\"line\"><a name=\"l00104\"></a><span class=\"lineno\">  104</span>&#160;        GLM_FUNC_DECL vec&lt;L, int64, Q&gt; floatDistance(vec&lt;L, double, Q&gt; <span class=\"keyword\">const</span>&amp; x, vec&lt;L, double, Q&gt; <span class=\"keyword\">const</span>&amp; y);</div>\n<div class=\"line\"><a name=\"l00105\"></a><span class=\"lineno\">  105</span>&#160;</div>\n<div class=\"line\"><a name=\"l00107\"></a><span class=\"lineno\">  107</span>&#160;}<span class=\"comment\">//namespace glm</span></div>\n<div class=\"line\"><a name=\"l00108\"></a><span class=\"lineno\">  108</span>&#160;</div>\n<div class=\"line\"><a name=\"l00109\"></a><span class=\"lineno\">  109</span>&#160;<span class=\"preprocessor\">#include &quot;vector_ulp.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00235.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: wrap.hpp File Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">wrap.hpp File Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p><a class=\"el\" href=\"a00369.html\">GLM_GTX_wrap</a>  \n<a href=\"#details\">More...</a></p>\n\n<p><a href=\"a00235_source.html\">Go to the source code of this file.</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga6c0cc6bd1d67ea1008d2592e998bad33\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6c0cc6bd1d67ea1008d2592e998bad33\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33\">clamp</a> (genType const &amp;Texcoord)</td></tr>\n<tr class=\"memdesc:ga6c0cc6bd1d67ea1008d2592e998bad33\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simulate GL_CLAMP OpenGL wrap mode.  <a href=\"a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6c0cc6bd1d67ea1008d2592e998bad33\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa6856a0a048d2749252848da35e10c8b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa6856a0a048d2749252848da35e10c8b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html#gaa6856a0a048d2749252848da35e10c8b\">mirrorClamp</a> (genType const &amp;Texcoord)</td></tr>\n<tr class=\"memdesc:gaa6856a0a048d2749252848da35e10c8b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simulate GL_MIRRORED_REPEAT OpenGL wrap mode.  <a href=\"a00369.html#gaa6856a0a048d2749252848da35e10c8b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa6856a0a048d2749252848da35e10c8b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16a89b0661b60d5bea85137bbae74d73\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga16a89b0661b60d5bea85137bbae74d73\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html#ga16a89b0661b60d5bea85137bbae74d73\">mirrorRepeat</a> (genType const &amp;Texcoord)</td></tr>\n<tr class=\"memdesc:ga16a89b0661b60d5bea85137bbae74d73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simulate GL_MIRROR_REPEAT OpenGL wrap mode.  <a href=\"a00369.html#ga16a89b0661b60d5bea85137bbae74d73\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16a89b0661b60d5bea85137bbae74d73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga809650c6310ea7c42666e918c117fb6f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga809650c6310ea7c42666e918c117fb6f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html#ga809650c6310ea7c42666e918c117fb6f\">repeat</a> (genType const &amp;Texcoord)</td></tr>\n<tr class=\"memdesc:ga809650c6310ea7c42666e918c117fb6f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simulate GL_REPEAT OpenGL wrap mode.  <a href=\"a00369.html#ga809650c6310ea7c42666e918c117fb6f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga809650c6310ea7c42666e918c117fb6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<div class=\"textblock\"><p><a class=\"el\" href=\"a00369.html\">GLM_GTX_wrap</a> </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00280.html\" title=\"Features that implement in C++ the GLSL specification as closely as possible. \">Core features</a> (dependence) </dd></dl>\n\n<p>Definition in file <a class=\"el\" href=\"a00235_source.html\">wrap.hpp</a>.</p>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00235_source.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: wrap.hpp Source File</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">wrap.hpp</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<a href=\"a00235.html\">Go to the documentation of this file.</a><div class=\"fragment\"><div class=\"line\"><a name=\"l00001\"></a><span class=\"lineno\">    1</span>&#160;</div>\n<div class=\"line\"><a name=\"l00013\"></a><span class=\"lineno\">   13</span>&#160;<span class=\"preprocessor\">#pragma once</span></div>\n<div class=\"line\"><a name=\"l00014\"></a><span class=\"lineno\">   14</span>&#160;</div>\n<div class=\"line\"><a name=\"l00015\"></a><span class=\"lineno\">   15</span>&#160;<span class=\"comment\">// Dependency:</span></div>\n<div class=\"line\"><a name=\"l00016\"></a><span class=\"lineno\">   16</span>&#160;<span class=\"preprocessor\">#include &quot;../glm.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00017\"></a><span class=\"lineno\">   17</span>&#160;<span class=\"preprocessor\">#include &quot;../gtc/vec1.hpp&quot;</span></div>\n<div class=\"line\"><a name=\"l00018\"></a><span class=\"lineno\">   18</span>&#160;</div>\n<div class=\"line\"><a name=\"l00019\"></a><span class=\"lineno\">   19</span>&#160;<span class=\"preprocessor\">#if GLM_MESSAGES == GLM_ENABLE &amp;&amp; !defined(GLM_EXT_INCLUDED)</span></div>\n<div class=\"line\"><a name=\"l00020\"></a><span class=\"lineno\">   20</span>&#160;<span class=\"preprocessor\">#       ifndef GLM_ENABLE_EXPERIMENTAL</span></div>\n<div class=\"line\"><a name=\"l00021\"></a><span class=\"lineno\">   21</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_wrap is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.&quot;)</span></div>\n<div class=\"line\"><a name=\"l00022\"></a><span class=\"lineno\">   22</span>&#160;<span class=\"preprocessor\">#       else</span></div>\n<div class=\"line\"><a name=\"l00023\"></a><span class=\"lineno\">   23</span>&#160;<span class=\"preprocessor\">#               pragma message(&quot;GLM: GLM_GTX_wrap extension included&quot;)</span></div>\n<div class=\"line\"><a name=\"l00024\"></a><span class=\"lineno\">   24</span>&#160;<span class=\"preprocessor\">#       endif</span></div>\n<div class=\"line\"><a name=\"l00025\"></a><span class=\"lineno\">   25</span>&#160;<span class=\"preprocessor\">#endif</span></div>\n<div class=\"line\"><a name=\"l00026\"></a><span class=\"lineno\">   26</span>&#160;</div>\n<div class=\"line\"><a name=\"l00027\"></a><span class=\"lineno\">   27</span>&#160;<span class=\"keyword\">namespace </span><a class=\"code\" href=\"a00236.html\">glm</a></div>\n<div class=\"line\"><a name=\"l00028\"></a><span class=\"lineno\">   28</span>&#160;{</div>\n<div class=\"line\"><a name=\"l00031\"></a><span class=\"lineno\">   31</span>&#160;</div>\n<div class=\"line\"><a name=\"l00034\"></a><span class=\"lineno\">   34</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00035\"></a><span class=\"lineno\">   35</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33\">clamp</a>(genType <span class=\"keyword\">const</span>&amp; Texcoord);</div>\n<div class=\"line\"><a name=\"l00036\"></a><span class=\"lineno\">   36</span>&#160;</div>\n<div class=\"line\"><a name=\"l00039\"></a><span class=\"lineno\">   39</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00040\"></a><span class=\"lineno\">   40</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00369.html#ga809650c6310ea7c42666e918c117fb6f\">repeat</a>(genType <span class=\"keyword\">const</span>&amp; Texcoord);</div>\n<div class=\"line\"><a name=\"l00041\"></a><span class=\"lineno\">   41</span>&#160;</div>\n<div class=\"line\"><a name=\"l00044\"></a><span class=\"lineno\">   44</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00045\"></a><span class=\"lineno\">   45</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00369.html#gaa6856a0a048d2749252848da35e10c8b\">mirrorClamp</a>(genType <span class=\"keyword\">const</span>&amp; Texcoord);</div>\n<div class=\"line\"><a name=\"l00046\"></a><span class=\"lineno\">   46</span>&#160;</div>\n<div class=\"line\"><a name=\"l00049\"></a><span class=\"lineno\">   49</span>&#160;        <span class=\"keyword\">template</span>&lt;<span class=\"keyword\">typename</span> genType&gt;</div>\n<div class=\"line\"><a name=\"l00050\"></a><span class=\"lineno\">   50</span>&#160;        GLM_FUNC_DECL genType <a class=\"code\" href=\"a00369.html#ga16a89b0661b60d5bea85137bbae74d73\">mirrorRepeat</a>(genType <span class=\"keyword\">const</span>&amp; Texcoord);</div>\n<div class=\"line\"><a name=\"l00051\"></a><span class=\"lineno\">   51</span>&#160;</div>\n<div class=\"line\"><a name=\"l00053\"></a><span class=\"lineno\">   53</span>&#160;}<span class=\"comment\">// namespace glm</span></div>\n<div class=\"line\"><a name=\"l00054\"></a><span class=\"lineno\">   54</span>&#160;</div>\n<div class=\"line\"><a name=\"l00055\"></a><span class=\"lineno\">   55</span>&#160;<span class=\"preprocessor\">#include &quot;wrap.inl&quot;</span></div>\n<div class=\"ttc\" id=\"a00369_html_ga16a89b0661b60d5bea85137bbae74d73\"><div class=\"ttname\"><a href=\"a00369.html#ga16a89b0661b60d5bea85137bbae74d73\">glm::mirrorRepeat</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType mirrorRepeat(genType const &amp;Texcoord)</div><div class=\"ttdoc\">Simulate GL_MIRROR_REPEAT OpenGL wrap mode. </div></div>\n<div class=\"ttc\" id=\"a00369_html_ga809650c6310ea7c42666e918c117fb6f\"><div class=\"ttname\"><a href=\"a00369.html#ga809650c6310ea7c42666e918c117fb6f\">glm::repeat</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType repeat(genType const &amp;Texcoord)</div><div class=\"ttdoc\">Simulate GL_REPEAT OpenGL wrap mode. </div></div>\n<div class=\"ttc\" id=\"a00369_html_gaa6856a0a048d2749252848da35e10c8b\"><div class=\"ttname\"><a href=\"a00369.html#gaa6856a0a048d2749252848da35e10c8b\">glm::mirrorClamp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType mirrorClamp(genType const &amp;Texcoord)</div><div class=\"ttdoc\">Simulate GL_MIRRORED_REPEAT OpenGL wrap mode. </div></div>\n<div class=\"ttc\" id=\"a00369_html_ga6c0cc6bd1d67ea1008d2592e998bad33\"><div class=\"ttname\"><a href=\"a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33\">glm::clamp</a></div><div class=\"ttdeci\">GLM_FUNC_DECL genType clamp(genType const &amp;Texcoord)</div><div class=\"ttdoc\">Simulate GL_CLAMP OpenGL wrap mode. </div></div>\n<div class=\"ttc\" id=\"a00236_html\"><div class=\"ttname\"><a href=\"a00236.html\">glm</a></div><div class=\"ttdef\"><b>Definition:</b> <a href=\"a00015_source.html#l00020\">common.hpp:20</a></div></div>\n</div><!-- fragment --></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00241.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Common functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Common functions<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides GLSL common functions.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga439e60a72eadecfeda2df5449c613a64\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga439e60a72eadecfeda2df5449c613a64\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga439e60a72eadecfeda2df5449c613a64\">abs</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga439e60a72eadecfeda2df5449c613a64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x if x &gt;= 0; otherwise, it returns -x.  <a href=\"a00241.html#ga439e60a72eadecfeda2df5449c613a64\">More...</a><br /></td></tr>\n<tr class=\"separator:ga439e60a72eadecfeda2df5449c613a64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81d3abddd0ef0c8de579bc541ecadab6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga81d3abddd0ef0c8de579bc541ecadab6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6\">abs</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga81d3abddd0ef0c8de579bc541ecadab6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x if x &gt;= 0; otherwise, it returns -x.  <a href=\"a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga81d3abddd0ef0c8de579bc541ecadab6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafb9d2a645a23aca12d4d6de0104b7657\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafb9d2a645a23aca12d4d6de0104b7657\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gafb9d2a645a23aca12d4d6de0104b7657\">ceil</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gafb9d2a645a23aca12d4d6de0104b7657\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer that is greater than or equal to x.  <a href=\"a00241.html#gafb9d2a645a23aca12d4d6de0104b7657\">More...</a><br /></td></tr>\n<tr class=\"separator:gafb9d2a645a23aca12d4d6de0104b7657\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cd77683da6361e297c56443fc70806d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7cd77683da6361e297c56443fc70806d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">clamp</a> (genType x, genType minVal, genType maxVal)</td></tr>\n<tr class=\"memdesc:ga7cd77683da6361e297c56443fc70806d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.  <a href=\"a00241.html#ga7cd77683da6361e297c56443fc70806d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7cd77683da6361e297c56443fc70806d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafba2e0674deb5953878d89483cd6323d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafba2e0674deb5953878d89483cd6323d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gafba2e0674deb5953878d89483cd6323d\">clamp</a> (vec&lt; L, T, Q &gt; const &amp;x, T minVal, T maxVal)</td></tr>\n<tr class=\"memdesc:gafba2e0674deb5953878d89483cd6323d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.  <a href=\"a00241.html#gafba2e0674deb5953878d89483cd6323d\">More...</a><br /></td></tr>\n<tr class=\"separator:gafba2e0674deb5953878d89483cd6323d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d\">clamp</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)</td></tr>\n<tr class=\"memdesc:gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal.  <a href=\"a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0f2f12e9108b09e22a3f0b2008a0b5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1425c1c3160ec51214b03a0469a3013d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga1425c1c3160ec51214b03a0469a3013d\">floatBitsToInt</a> (float const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1425c1c3160ec51214b03a0469a3013d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a signed integer value representing the encoding of a floating-point value.  <a href=\"a00241.html#ga1425c1c3160ec51214b03a0469a3013d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1425c1c3160ec51214b03a0469a3013d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99f7d62f78ac5ea3b49bae715c9488ed\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga99f7d62f78ac5ea3b49bae715c9488ed\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed\">floatBitsToInt</a> (vec&lt; L, float, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga99f7d62f78ac5ea3b49bae715c9488ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a signed integer value representing the encoding of a floating-point value.  <a href=\"a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99f7d62f78ac5ea3b49bae715c9488ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70e0271c34af52f3100c7960e18c3f2b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga70e0271c34af52f3100c7960e18c3f2b\">floatBitsToUint</a> (float const &amp;v)</td></tr>\n<tr class=\"memdesc:ga70e0271c34af52f3100c7960e18c3f2b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a unsigned integer value representing the encoding of a floating-point value.  <a href=\"a00241.html#ga70e0271c34af52f3100c7960e18c3f2b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga70e0271c34af52f3100c7960e18c3f2b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga49418ba4c8a60fbbb5d57b705f3e26db\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga49418ba4c8a60fbbb5d57b705f3e26db\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db\">floatBitsToUint</a> (vec&lt; L, float, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga49418ba4c8a60fbbb5d57b705f3e26db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a unsigned integer value representing the encoding of a floating-point value.  <a href=\"a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db\">More...</a><br /></td></tr>\n<tr class=\"separator:ga49418ba4c8a60fbbb5d57b705f3e26db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9d0742639e85b29c7c5de11cfd6840d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa9d0742639e85b29c7c5de11cfd6840d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d\">floor</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaa9d0742639e85b29c7c5de11cfd6840d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer that is less then or equal to x.  <a href=\"a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9d0742639e85b29c7c5de11cfd6840d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad0f444d4b81cc53c3b6edf5aa25078c2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gad0f444d4b81cc53c3b6edf5aa25078c2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2\">fma</a> (genType const &amp;a, genType const &amp;b, genType const &amp;c)</td></tr>\n<tr class=\"memdesc:gad0f444d4b81cc53c3b6edf5aa25078c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Computes and returns a * b + c.  <a href=\"a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2\">More...</a><br /></td></tr>\n<tr class=\"separator:gad0f444d4b81cc53c3b6edf5aa25078c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8ba89e40e55ae5cdf228548f9b7639c7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8ba89e40e55ae5cdf228548f9b7639c7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7\">fract</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga8ba89e40e55ae5cdf228548f9b7639c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return x - floor(x).  <a href=\"a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8ba89e40e55ae5cdf228548f9b7639c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2df623004f634b440d61e018d62c751b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2df623004f634b440d61e018d62c751b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga2df623004f634b440d61e018d62c751b\">fract</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga2df623004f634b440d61e018d62c751b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return x - floor(x).  <a href=\"a00241.html#ga2df623004f634b440d61e018d62c751b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2df623004f634b440d61e018d62c751b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaddf5ef73283c171730e0bcc11833fa81\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaddf5ef73283c171730e0bcc11833fa81\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaddf5ef73283c171730e0bcc11833fa81\">frexp</a> (genType x, int &amp;exp)</td></tr>\n<tr class=\"memdesc:gaddf5ef73283c171730e0bcc11833fa81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two, such that: x = significand * exp(2, exponent)  <a href=\"a00241.html#gaddf5ef73283c171730e0bcc11833fa81\">More...</a><br /></td></tr>\n<tr class=\"separator:gaddf5ef73283c171730e0bcc11833fa81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4fb7c21c2dce064b26fd9ccdaf9adcd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4\">intBitsToFloat</a> (int const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4fb7c21c2dce064b26fd9ccdaf9adcd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value.  <a href=\"a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4fb7c21c2dce064b26fd9ccdaf9adcd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, float, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0\">intBitsToFloat</a> (vec&lt; L, int, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point value corresponding to a signed integer encoding of a floating-point value.  <a href=\"a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2885587c23a106301f20443896365b62\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2885587c23a106301f20443896365b62\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga2885587c23a106301f20443896365b62\">isinf</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga2885587c23a106301f20443896365b62\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations.  <a href=\"a00241.html#ga2885587c23a106301f20443896365b62\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2885587c23a106301f20443896365b62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29ef934c00306490de837b4746b4e14d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga29ef934c00306490de837b4746b4e14d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga29ef934c00306490de837b4746b4e14d\">isnan</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga29ef934c00306490de837b4746b4e14d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations.  <a href=\"a00241.html#ga29ef934c00306490de837b4746b4e14d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29ef934c00306490de837b4746b4e14d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3010e0a0c35a1b514540f2fb579c58c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gac3010e0a0c35a1b514540f2fb579c58c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gac3010e0a0c35a1b514540f2fb579c58c\">ldexp</a> (genType const &amp;x, int const &amp;exp)</td></tr>\n<tr class=\"memdesc:gac3010e0a0c35a1b514540f2fb579c58c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a floating-point number from x and the corresponding integral exponent of two in exp, returning: significand * exp(2, exponent)  <a href=\"a00241.html#gac3010e0a0c35a1b514540f2fb579c58c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac3010e0a0c35a1b514540f2fb579c58c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae02d42887fc5570451f880e3c624b9ac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae02d42887fc5570451f880e3c624b9ac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gae02d42887fc5570451f880e3c624b9ac\">max</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:gae02d42887fc5570451f880e3c624b9ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00241.html#gae02d42887fc5570451f880e3c624b9ac\">More...</a><br /></td></tr>\n<tr class=\"separator:gae02d42887fc5570451f880e3c624b9ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03e45d6e60d1c36edb00c52edeea0f31\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga03e45d6e60d1c36edb00c52edeea0f31\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31\">max</a> (vec&lt; L, T, Q &gt; const &amp;x, T y)</td></tr>\n<tr class=\"memdesc:ga03e45d6e60d1c36edb00c52edeea0f31\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31\">More...</a><br /></td></tr>\n<tr class=\"separator:ga03e45d6e60d1c36edb00c52edeea0f31\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac1fec0c3303b572a6d4697a637213870\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac1fec0c3303b572a6d4697a637213870\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gac1fec0c3303b572a6d4697a637213870\">max</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gac1fec0c3303b572a6d4697a637213870\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00241.html#gac1fec0c3303b572a6d4697a637213870\">More...</a><br /></td></tr>\n<tr class=\"separator:gac1fec0c3303b572a6d4697a637213870\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6cf8098827054a270ee36b18e30d471d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6cf8098827054a270ee36b18e30d471d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga6cf8098827054a270ee36b18e30d471d\">min</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:ga6cf8098827054a270ee36b18e30d471d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00241.html#ga6cf8098827054a270ee36b18e30d471d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6cf8098827054a270ee36b18e30d471d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7d015eba1f9f48519251f4abe69b14d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa7d015eba1f9f48519251f4abe69b14d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaa7d015eba1f9f48519251f4abe69b14d\">min</a> (vec&lt; L, T, Q &gt; const &amp;x, T y)</td></tr>\n<tr class=\"memdesc:gaa7d015eba1f9f48519251f4abe69b14d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00241.html#gaa7d015eba1f9f48519251f4abe69b14d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7d015eba1f9f48519251f4abe69b14d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31f49ef9e7d1beb003160c5e009b0c48\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga31f49ef9e7d1beb003160c5e009b0c48\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48\">min</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga31f49ef9e7d1beb003160c5e009b0c48\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48\">More...</a><br /></td></tr>\n<tr class=\"separator:ga31f49ef9e7d1beb003160c5e009b0c48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e93f374aae27d1a88b921860351f8d4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genTypeT , typename genTypeU &gt; </td></tr>\n<tr class=\"memitem:ga8e93f374aae27d1a88b921860351f8d4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genTypeT&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">mix</a> (genTypeT x, genTypeT y, genTypeU a)</td></tr>\n<tr class=\"memdesc:ga8e93f374aae27d1a88b921860351f8d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a.  <a href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8e93f374aae27d1a88b921860351f8d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9b197a452cd52db3c5c18bac72bd7798\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9b197a452cd52db3c5c18bac72bd7798\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga9b197a452cd52db3c5c18bac72bd7798\">mod</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga9b197a452cd52db3c5c18bac72bd7798\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modulus.  <a href=\"a00241.html#ga9b197a452cd52db3c5c18bac72bd7798\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9b197a452cd52db3c5c18bac72bd7798\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85e33f139b8db1b39b590a5713b9e679\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga85e33f139b8db1b39b590a5713b9e679\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga85e33f139b8db1b39b590a5713b9e679\">modf</a> (genType x, genType &amp;i)</td></tr>\n<tr class=\"memdesc:ga85e33f139b8db1b39b590a5713b9e679\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the fractional part of x and sets i to the integer part (as a whole number floating point value).  <a href=\"a00241.html#ga85e33f139b8db1b39b590a5713b9e679\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85e33f139b8db1b39b590a5713b9e679\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafa03aca8c4713e1cc892aa92ca135a7e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafa03aca8c4713e1cc892aa92ca135a7e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e\">round</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gafa03aca8c4713e1cc892aa92ca135a7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x.  <a href=\"a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e\">More...</a><br /></td></tr>\n<tr class=\"separator:gafa03aca8c4713e1cc892aa92ca135a7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga76b81785045a057989a84d99aeeb1578\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga76b81785045a057989a84d99aeeb1578\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga76b81785045a057989a84d99aeeb1578\">roundEven</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga76b81785045a057989a84d99aeeb1578\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x.  <a href=\"a00241.html#ga76b81785045a057989a84d99aeeb1578\">More...</a><br /></td></tr>\n<tr class=\"separator:ga76b81785045a057989a84d99aeeb1578\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1e2e5cfff800056540e32f6c9b604b28\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1e2e5cfff800056540e32f6c9b604b28\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga1e2e5cfff800056540e32f6c9b604b28\">sign</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1e2e5cfff800056540e32f6c9b604b28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 1.0 if x &gt; 0, 0.0 if x == 0, or -1.0 if x &lt; 0.  <a href=\"a00241.html#ga1e2e5cfff800056540e32f6c9b604b28\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e2e5cfff800056540e32f6c9b604b28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga562edf7eca082cc5b7a0aaf180436daf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga562edf7eca082cc5b7a0aaf180436daf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga562edf7eca082cc5b7a0aaf180436daf\">smoothstep</a> (genType edge0, genType edge1, genType x)</td></tr>\n<tr class=\"memdesc:ga562edf7eca082cc5b7a0aaf180436daf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 0.0 if x &lt;= edge0 and 1.0 if x &gt;= edge1 and performs smooth Hermite interpolation between 0 and 1 when edge0 &lt; x &lt; edge1.  <a href=\"a00241.html#ga562edf7eca082cc5b7a0aaf180436daf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga562edf7eca082cc5b7a0aaf180436daf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga015a1261ff23e12650211aa872863cce\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga015a1261ff23e12650211aa872863cce\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga015a1261ff23e12650211aa872863cce\">step</a> (genType edge, genType x)</td></tr>\n<tr class=\"memdesc:ga015a1261ff23e12650211aa872863cce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 0.0 if x &lt; edge, otherwise it returns 1.0 for each component of a genType.  <a href=\"a00241.html#ga015a1261ff23e12650211aa872863cce\">More...</a><br /></td></tr>\n<tr class=\"separator:ga015a1261ff23e12650211aa872863cce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f9a911a48ef244b51654eaefc81c551\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8f9a911a48ef244b51654eaefc81c551\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga8f9a911a48ef244b51654eaefc81c551\">step</a> (T edge, vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8f9a911a48ef244b51654eaefc81c551\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 0.0 if x &lt; edge, otherwise it returns 1.0.  <a href=\"a00241.html#ga8f9a911a48ef244b51654eaefc81c551\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f9a911a48ef244b51654eaefc81c551\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f\">step</a> (vec&lt; L, T, Q &gt; const &amp;edge, vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 0.0 if x &lt; edge, otherwise it returns 1.0.  <a href=\"a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4a5fc81619c7d3e8b22f53d4a098c7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf9375e3e06173271d49e6ffa3a334259\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf9375e3e06173271d49e6ffa3a334259\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gaf9375e3e06173271d49e6ffa3a334259\">trunc</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf9375e3e06173271d49e6ffa3a334259\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolute value of x.  <a href=\"a00241.html#gaf9375e3e06173271d49e6ffa3a334259\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf9375e3e06173271d49e6ffa3a334259\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab2bae0d15dcdca6093f88f76b3975d97\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#gab2bae0d15dcdca6093f88f76b3975d97\">uintBitsToFloat</a> (uint const &amp;v)</td></tr>\n<tr class=\"memdesc:gab2bae0d15dcdca6093f88f76b3975d97\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value.  <a href=\"a00241.html#gab2bae0d15dcdca6093f88f76b3975d97\">More...</a><br /></td></tr>\n<tr class=\"separator:gab2bae0d15dcdca6093f88f76b3975d97\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga97f46b5f7b42fe44482e13356eb394ae\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga97f46b5f7b42fe44482e13356eb394ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, float, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html#ga97f46b5f7b42fe44482e13356eb394ae\">uintBitsToFloat</a> (vec&lt; L, uint, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga97f46b5f7b42fe44482e13356eb394ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value.  <a href=\"a00241.html#ga97f46b5f7b42fe44482e13356eb394ae\">More...</a><br /></td></tr>\n<tr class=\"separator:ga97f46b5f7b42fe44482e13356eb394ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides GLSL common functions. </p>\n<p>These all operate component-wise. The description is per component.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00015.html\" title=\"Core features \">glm/common.hpp</a>&gt; to use these core features. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga439e60a72eadecfeda2df5449c613a64\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::abs </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns x if x &gt;= 0; otherwise, it returns -x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>floating-point or signed integer; scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml\">GLSL abs man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga81d3abddd0ef0c8de579bc541ecadab6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::abs </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns x if x &gt;= 0; otherwise, it returns -x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or signed integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml\">GLSL abs man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafb9d2a645a23aca12d4d6de0104b7657\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::ceil </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a value equal to the nearest integer that is greater than or equal to x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/ceil.xml\">GLSL ceil man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7cd77683da6361e297c56443fc70806d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::clamp </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>minVal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>maxVal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point or integer; scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml\">GLSL clamp man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n<p>Referenced by <a class=\"el\" href=\"a00017_source.html#l00050\">glm::saturate()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafba2e0674deb5953878d89483cd6323d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::clamp </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>minVal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>maxVal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml\">GLSL clamp man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa0f2f12e9108b09e22a3f0b2008a0b5d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::clamp </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>minVal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>maxVal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns min(max(x, minVal), maxVal) for each component in x using the floating-point values minVal and maxVal. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml\">GLSL clamp man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1425c1c3160ec51214b03a0469a3013d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::floatBitsToInt </td>\n          <td>(</td>\n          <td class=\"paramtype\">float const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a signed integer value representing the encoding of a floating-point value. </p>\n<p>The floating-point value's bit-level representation is preserved.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml\">GLSL floatBitsToInt man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga99f7d62f78ac5ea3b49bae715c9488ed\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, int, Q&gt; glm::floatBitsToInt </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, float, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a signed integer value representing the encoding of a floating-point value. </p>\n<p>The floatingpoint value's bit-level representation is preserved.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml\">GLSL floatBitsToInt man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga70e0271c34af52f3100c7960e18c3f2b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::floatBitsToUint </td>\n          <td>(</td>\n          <td class=\"paramtype\">float const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a unsigned integer value representing the encoding of a floating-point value. </p>\n<p>The floatingpoint value's bit-level representation is preserved.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml\">GLSL floatBitsToUint man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga49418ba4c8a60fbbb5d57b705f3e26db\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, uint, Q&gt; glm::floatBitsToUint </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, float, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a unsigned integer value representing the encoding of a floating-point value. </p>\n<p>The floatingpoint value's bit-level representation is preserved.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml\">GLSL floatBitsToUint man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa9d0742639e85b29c7c5de11cfd6840d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::floor </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a value equal to the nearest integer that is less then or equal to x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floor.xml\">GLSL floor man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad0f444d4b81cc53c3b6edf5aa25078c2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fma </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Computes and returns a * b + c. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/fma.xml\">GLSL fma man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8ba89e40e55ae5cdf228548f9b7639c7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fract </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return x - floor(x). </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml\">GLSL fract man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2df623004f634b440d61e018d62c751b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fract </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return x - floor(x). </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml\">GLSL fract man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaddf5ef73283c171730e0bcc11833fa81\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::frexp </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int &amp;&#160;</td>\n          <td class=\"paramname\"><em>exp</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Splits x into a floating-point significand in the range [0.5, 1.0) and an integral exponent of two, such that: x = significand * exp(2, exponent) </p>\n<p>The significand is returned by the function and the exponent is returned in the parameter exp. For a floating-point value of zero, the significant and exponent are both zero. For a floating-point value that is an infinity or is not a number, the results are undefined.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/frexp.xml\">GLSL frexp man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4fb7c21c2dce064b26fd9ccdaf9adcd4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL float glm::intBitsToFloat </td>\n          <td>(</td>\n          <td class=\"paramtype\">int const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. </p>\n<p>If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml\">GLSL intBitsToFloat man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7a0a8291a1cf3e1c2aee33030a1bd7b0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, float, Q&gt; glm::intBitsToFloat </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, int, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a floating-point value corresponding to a signed integer encoding of a floating-point value. </p>\n<p>If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml\">GLSL intBitsToFloat man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2885587c23a106301f20443896365b62\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::isinf </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations. </p>\n<p>Returns false otherwise, including for implementations with no infinity representations.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/isinf.xml\">GLSL isinf man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga29ef934c00306490de837b4746b4e14d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::isnan </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations. </p>\n<p>Returns false otherwise, including for implementations with no NaN representations.</p>\n<p>/!\\ When using compiler fast math, this function may fail.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml\">GLSL isnan man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac3010e0a0c35a1b514540f2fb579c58c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::ldexp </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int const &amp;&#160;</td>\n          <td class=\"paramname\"><em>exp</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a floating-point number from x and the corresponding integral exponent of two in exp, returning: significand * exp(2, exponent) </p>\n<p>If this product is too large to be represented in the floating-point type, the result is undefined.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/ldexp.xml\">GLSL ldexp man page</a>; </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae02d42887fc5570451f880e3c624b9ac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if x &lt; y; otherwise, it returns x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point or integer; scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml\">GLSL max man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga03e45d6e60d1c36edb00c52edeea0f31\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if x &lt; y; otherwise, it returns x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml\">GLSL max man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac1fec0c3303b572a6d4697a637213870\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if x &lt; y; otherwise, it returns x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml\">GLSL max man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6cf8098827054a270ee36b18e30d471d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if y &lt; x; otherwise, it returns x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point or integer; scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml\">GLSL min man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa7d015eba1f9f48519251f4abe69b14d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if y &lt; x; otherwise, it returns x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml\">GLSL min man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga31f49ef9e7d1beb003160c5e009b0c48\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if y &lt; x; otherwise, it returns x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml\">GLSL min man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8e93f374aae27d1a88b921860351f8d4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genTypeT glm::mix </td>\n          <td>(</td>\n          <td class=\"paramtype\">genTypeT&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genTypeT&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genTypeU&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>If genTypeU is a floating scalar or vector: Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. </p>\n<p>The value for a is not restricted to the range [0, 1].</p>\n<p>If genTypeU is a boolean scalar or vector: Selects which vector each returned component comes from. For a component of 'a' that is false, the corresponding component of 'x' is returned. For a component of 'a' that is true, the corresponding component of 'y' is returned. Components of 'x' and 'y' that are not selected are allowed to be invalid floating point values and will have no effect on the results. Thus, this provides different functionality than genType mix(genType x, genType y, genType(a)) where a is a Boolean vector.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/mix.xml\">GLSL mix man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a></dd></dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramdir\">[in]</td><td class=\"paramname\">x</td><td>Value to interpolate. </td></tr>\n    <tr><td class=\"paramdir\">[in]</td><td class=\"paramname\">y</td><td>Value to interpolate. </td></tr>\n    <tr><td class=\"paramdir\">[in]</td><td class=\"paramname\">a</td><td>Interpolant.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genTypeT</td><td>Floating point scalar or vector. </td></tr>\n    <tr><td class=\"paramname\">genTypeU</td><td>Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT.</td></tr>\n  </table>\n  </dd>\n</dl>\n<div class=\"fragment\"><div class=\"line\"><span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"a00037.html\">glm/glm.hpp</a>&gt;</span></div>\n<div class=\"line\">...</div>\n<div class=\"line\">float a;</div>\n<div class=\"line\"><span class=\"keywordtype\">bool</span> b;</div>\n<div class=\"line\"><a class=\"code\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">glm::dvec3</a> <a class=\"code\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a>;</div>\n<div class=\"line\"><a class=\"code\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">glm::dvec3</a> f;</div>\n<div class=\"line\"><a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a> g;</div>\n<div class=\"line\"><a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a> h;</div>\n<div class=\"line\">...</div>\n<div class=\"line\">glm::vec4 r = <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">glm::mix</a>(g, h, a); <span class=\"comment\">// Interpolate with a floating-point scalar two vectors.</span></div>\n<div class=\"line\"><a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a> s = <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">glm::mix</a>(g, h, b); <span class=\"comment\">// Returns g or h;</span></div>\n<div class=\"line\"><a class=\"code\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">glm::dvec3</a> t = <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">glm::mix</a>(<a class=\"code\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a>, f, a); <span class=\"comment\">// Types of the third parameter is not required to match with the first and the second.</span></div>\n<div class=\"line\"><a class=\"code\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">glm::vec4</a> u = <a class=\"code\" href=\"a00241.html#ga8e93f374aae27d1a88b921860351f8d4\">glm::mix</a>(g, h, r); <span class=\"comment\">// Interpolations can be perform per component with a vector for the last parameter.</span></div>\n</div><!-- fragment --> \n<p>Referenced by <a class=\"el\" href=\"a00017_source.html#l00041\">glm::lerp()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9b197a452cd52db3c5c18bac72bd7798\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::mod </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modulus. </p>\n<p>Returns x - y * floor(x / y) for each component in x using the floating point value y.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types, include glm/gtc/integer for integer scalar types support </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml\">GLSL mod man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga85e33f139b8db1b39b590a5713b9e679\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::modf </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType &amp;&#160;</td>\n          <td class=\"paramname\"><em>i</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the fractional part of x and sets i to the integer part (as a whole number floating point value). </p>\n<p>Both the return value and the output parameter will have the same sign as x.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/modf.xml\">GLSL modf man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafa03aca8c4713e1cc892aa92ca135a7e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::round </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a value equal to the nearest integer to x. </p>\n<p>The fraction 0.5 will round in a direction chosen by the implementation, presumably the direction that is fastest. This includes the possibility that round(x) returns the same value as roundEven(x) for all values of x.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml\">GLSL round man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga76b81785045a057989a84d99aeeb1578\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::roundEven </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a value equal to the nearest integer to x. </p>\n<p>A fractional part of 0.5 will round toward the nearest even integer. (Both 3.5 and 4.5 for x will return 4.0.)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/roundEven.xml\">GLSL roundEven man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd>\n<dd>\n<a href=\"http://developer.amd.com/documentation/articles/pages/New-Round-to-Even-Technique.aspx\">New round to even technique</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1e2e5cfff800056540e32f6c9b604b28\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::sign </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns 1.0 if x &gt; 0, 0.0 if x == 0, or -1.0 if x &lt; 0. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/sign.xml\">GLSL sign man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga562edf7eca082cc5b7a0aaf180436daf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::smoothstep </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>edge0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>edge1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns 0.0 if x &lt;= edge0 and 1.0 if x &gt;= edge1 and performs smooth Hermite interpolation between 0 and 1 when edge0 &lt; x &lt; edge1. </p>\n<p>This is useful in cases where you would want a threshold function with a smooth transition. This is equivalent to: genType t; t = clamp ((x - edge0) / (edge1 - edge0), 0, 1); return t * t * (3 - 2 * t); Results are undefined if edge0 &gt;= edge1.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/smoothstep.xml\">GLSL smoothstep man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga015a1261ff23e12650211aa872863cce\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::step </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>edge</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns 0.0 if x &lt; edge, otherwise it returns 1.0 for each component of a genType. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml\">GLSL step man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8f9a911a48ef244b51654eaefc81c551\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::step </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>edge</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns 0.0 if x &lt; edge, otherwise it returns 1.0. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml\">GLSL step man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf4a5fc81619c7d3e8b22f53d4a098c7f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::step </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>edge</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns 0.0 if x &lt; edge, otherwise it returns 1.0. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml\">GLSL step man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf9375e3e06173271d49e6ffa3a334259\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::trunc </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a value equal to the nearest integer to x whose absolute value is not larger than the absolute value of x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/trunc.xml\">GLSL trunc man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab2bae0d15dcdca6093f88f76b3975d97\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL float glm::uintBitsToFloat </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. </p>\n<p>If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml\">GLSL uintBitsToFloat man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga97f46b5f7b42fe44482e13356eb394ae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, float, Q&gt; glm::uintBitsToFloat </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a floating-point value corresponding to a unsigned integer encoding of a floating-point value. </p>\n<p>If an inf or NaN is passed in, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit-level representation is preserved.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml\">GLSL uintBitsToFloat man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00242.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Exponential functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Exponential functions<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides GLSL exponential functions.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga071566cadc7505455e611f2a0353f4d4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga071566cadc7505455e611f2a0353f4d4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">exp</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga071566cadc7505455e611f2a0353f4d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the natural exponentiation of v, i.e., e^v.  <a href=\"a00242.html#ga071566cadc7505455e611f2a0353f4d4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga071566cadc7505455e611f2a0353f4d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaff17ace6b579a03bf223ed4d1ed2cd16\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaff17ace6b579a03bf223ed4d1ed2cd16\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16\">exp2</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaff17ace6b579a03bf223ed4d1ed2cd16\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 2 raised to the v power.  <a href=\"a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16\">More...</a><br /></td></tr>\n<tr class=\"separator:gaff17ace6b579a03bf223ed4d1ed2cd16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a\">inversesqrt</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the reciprocal of the positive square root of v.  <a href=\"a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga918c9f3fd086ce20e6760c903bd30fa9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga918c9f3fd086ce20e6760c903bd30fa9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9\">log</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga918c9f3fd086ce20e6760c903bd30fa9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the natural logarithm of v, i.e., returns the value y which satisfies the equation x = e^y.  <a href=\"a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga918c9f3fd086ce20e6760c903bd30fa9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga82831c7d9cca777cebedfe03a19c8d75\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga82831c7d9cca777cebedfe03a19c8d75\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga82831c7d9cca777cebedfe03a19c8d75\">log2</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga82831c7d9cca777cebedfe03a19c8d75\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y.  <a href=\"a00242.html#ga82831c7d9cca777cebedfe03a19c8d75\">More...</a><br /></td></tr>\n<tr class=\"separator:ga82831c7d9cca777cebedfe03a19c8d75\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2254981952d4f333b900a6bf5167a6c4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2254981952d4f333b900a6bf5167a6c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#ga2254981952d4f333b900a6bf5167a6c4\">pow</a> (vec&lt; L, T, Q &gt; const &amp;base, vec&lt; L, T, Q &gt; const &amp;exponent)</td></tr>\n<tr class=\"memdesc:ga2254981952d4f333b900a6bf5167a6c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns 'base' raised to the power 'exponent'.  <a href=\"a00242.html#ga2254981952d4f333b900a6bf5167a6c4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2254981952d4f333b900a6bf5167a6c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa83e5f1648b7ccdf33b87c07c76cb77c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa83e5f1648b7ccdf33b87c07c76cb77c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c\">sqrt</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa83e5f1648b7ccdf33b87c07c76cb77c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the positive square root of v.  <a href=\"a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa83e5f1648b7ccdf33b87c07c76cb77c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides GLSL exponential functions. </p>\n<p>These all operate component-wise. The description is per component.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00026.html\" title=\"Core features \">glm/exponential.hpp</a>&gt; to use these core features. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga071566cadc7505455e611f2a0353f4d4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::exp </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the natural exponentiation of x, i.e., e^x. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>exp function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/exp.xml\">GLSL exp man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaff17ace6b579a03bf223ed4d1ed2cd16\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::exp2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns 2 raised to the v power. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>exp2 function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/exp2.xml\">GLSL exp2 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga523dd6bd0ad9f75ae2d24c8e4b017b7a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::inversesqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the reciprocal of the positive square root of v. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>inversesqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/inversesqrt.xml\">GLSL inversesqrt man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga918c9f3fd086ce20e6760c903bd30fa9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::log </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the natural logarithm of v, i.e., returns the value y which satisfies the equation x = e^y. </p>\n<p>Results are undefined if v &lt;= 0.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>log function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/log.xml\">GLSL log man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga82831c7d9cca777cebedfe03a19c8d75\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::log2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the base 2 log of x, i.e., returns the value y, which satisfies the equation x = 2 ^ y. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>log2 function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/log2.xml\">GLSL log2 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2254981952d4f333b900a6bf5167a6c4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::pow </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>base</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>exponent</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns 'base' raised to the power 'exponent'. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">base</td><td>Floating point value. pow function is defined for input values of 'base' defined in the range (inf-, inf+) in the limit of the type qualifier. </td></tr>\n    <tr><td class=\"paramname\">exponent</td><td>Floating point value representing the 'exponent'.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/pow.xml\">GLSL pow man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa83e5f1648b7ccdf33b87c07c76cb77c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::sqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the positive square root of v. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>sqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/sqrt.xml\">GLSL sqrt man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00243.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_matrix_clip_space</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_matrix_clip_space<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Defines functions that generate clip space transformation matrices.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0bcd4542e0affc63a0b8c08fcb839ea9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0bcd4542e0affc63a0b8c08fcb839ea9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9\">frustum</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga0bcd4542e0affc63a0b8c08fcb839ea9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a frustum matrix with default handedness, using the default handedness and default near and far clip planes definition.  <a href=\"a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0bcd4542e0affc63a0b8c08fcb839ea9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4277c37f61d81da01bc9db14ea90296\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae4277c37f61d81da01bc9db14ea90296\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gae4277c37f61d81da01bc9db14ea90296\">frustumLH</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:gae4277c37f61d81da01bc9db14ea90296\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a left handed frustum matrix.  <a href=\"a00243.html#gae4277c37f61d81da01bc9db14ea90296\">More...</a><br /></td></tr>\n<tr class=\"separator:gae4277c37f61d81da01bc9db14ea90296\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga259520cad03b3f8bca9417920035ed01\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga259520cad03b3f8bca9417920035ed01\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga259520cad03b3f8bca9417920035ed01\">frustumLH_NO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga259520cad03b3f8bca9417920035ed01\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a left handed frustum matrix.  <a href=\"a00243.html#ga259520cad03b3f8bca9417920035ed01\">More...</a><br /></td></tr>\n<tr class=\"separator:ga259520cad03b3f8bca9417920035ed01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94218b094862d17798370242680b9030\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga94218b094862d17798370242680b9030\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga94218b094862d17798370242680b9030\">frustumLH_ZO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga94218b094862d17798370242680b9030\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a left handed frustum matrix.  <a href=\"a00243.html#ga94218b094862d17798370242680b9030\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94218b094862d17798370242680b9030\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae34ec664ad44860bf4b5ba631f0e0e90\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae34ec664ad44860bf4b5ba631f0e0e90\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90\">frustumNO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:gae34ec664ad44860bf4b5ba631f0e0e90\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90\">More...</a><br /></td></tr>\n<tr class=\"separator:gae34ec664ad44860bf4b5ba631f0e0e90\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4366ab45880c6c5f8b3e8c371ca4b136\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga4366ab45880c6c5f8b3e8c371ca4b136\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136\">frustumRH</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga4366ab45880c6c5f8b3e8c371ca4b136\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a right handed frustum matrix.  <a href=\"a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4366ab45880c6c5f8b3e8c371ca4b136\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9236c8439f21be186b79c97b588836b9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9236c8439f21be186b79c97b588836b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga9236c8439f21be186b79c97b588836b9\">frustumRH_NO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga9236c8439f21be186b79c97b588836b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a right handed frustum matrix.  <a href=\"a00243.html#ga9236c8439f21be186b79c97b588836b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9236c8439f21be186b79c97b588836b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7654a9227f14d5382786b9fc0eb5692d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7654a9227f14d5382786b9fc0eb5692d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga7654a9227f14d5382786b9fc0eb5692d\">frustumRH_ZO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:ga7654a9227f14d5382786b9fc0eb5692d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a right handed frustum matrix.  <a href=\"a00243.html#ga7654a9227f14d5382786b9fc0eb5692d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7654a9227f14d5382786b9fc0eb5692d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa73322e152edf50cf30a6edac342a757\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa73322e152edf50cf30a6edac342a757\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaa73322e152edf50cf30a6edac342a757\">frustumZO</a> (T left, T right, T bottom, T top, T near, T far)</td></tr>\n<tr class=\"memdesc:gaa73322e152edf50cf30a6edac342a757\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gaa73322e152edf50cf30a6edac342a757\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa73322e152edf50cf30a6edac342a757\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga44fa38a18349450325cae2661bb115ca\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga44fa38a18349450325cae2661bb115ca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga44fa38a18349450325cae2661bb115ca\">infinitePerspective</a> (T fovy, T aspect, T near)</td></tr>\n<tr class=\"memdesc:ga44fa38a18349450325cae2661bb115ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness.  <a href=\"a00243.html#ga44fa38a18349450325cae2661bb115ca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga44fa38a18349450325cae2661bb115ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3201b30f5b3ea0f933246d87bfb992a9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga3201b30f5b3ea0f933246d87bfb992a9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9\">infinitePerspectiveLH</a> (T fovy, T aspect, T near)</td></tr>\n<tr class=\"memdesc:ga3201b30f5b3ea0f933246d87bfb992a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite.  <a href=\"a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3201b30f5b3ea0f933246d87bfb992a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99672ffe5714ef478dab2437255fe7e1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga99672ffe5714ef478dab2437255fe7e1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga99672ffe5714ef478dab2437255fe7e1\">infinitePerspectiveRH</a> (T fovy, T aspect, T near)</td></tr>\n<tr class=\"memdesc:ga99672ffe5714ef478dab2437255fe7e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite.  <a href=\"a00243.html#ga99672ffe5714ef478dab2437255fe7e1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99672ffe5714ef478dab2437255fe7e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5b6b40ed882cd56cd7cb97701909c06\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae5b6b40ed882cd56cd7cb97701909c06\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gae5b6b40ed882cd56cd7cb97701909c06\">ortho</a> (T left, T right, T bottom, T top)</td></tr>\n<tr class=\"memdesc:gae5b6b40ed882cd56cd7cb97701909c06\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for projecting two-dimensional coordinates onto the screen.  <a href=\"a00243.html#gae5b6b40ed882cd56cd7cb97701909c06\">More...</a><br /></td></tr>\n<tr class=\"separator:gae5b6b40ed882cd56cd7cb97701909c06\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6615d8a9d39432e279c4575313ecb456\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga6615d8a9d39432e279c4575313ecb456\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga6615d8a9d39432e279c4575313ecb456\">ortho</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:ga6615d8a9d39432e279c4575313ecb456\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using the default handedness and default near and far clip planes definition.  <a href=\"a00243.html#ga6615d8a9d39432e279c4575313ecb456\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6615d8a9d39432e279c4575313ecb456\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad122a79aadaa5529cec4ac197203db7f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gad122a79aadaa5529cec4ac197203db7f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gad122a79aadaa5529cec4ac197203db7f\">orthoLH</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gad122a79aadaa5529cec4ac197203db7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.  <a href=\"a00243.html#gad122a79aadaa5529cec4ac197203db7f\">More...</a><br /></td></tr>\n<tr class=\"separator:gad122a79aadaa5529cec4ac197203db7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga526416735ea7c5c5cd255bf99d051bd8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga526416735ea7c5c5cd255bf99d051bd8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga526416735ea7c5c5cd255bf99d051bd8\">orthoLH_NO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:ga526416735ea7c5c5cd255bf99d051bd8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume using right-handed coordinates.  <a href=\"a00243.html#ga526416735ea7c5c5cd255bf99d051bd8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga526416735ea7c5c5cd255bf99d051bd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab37ac3eec8d61f22fceda7775e836afa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab37ac3eec8d61f22fceda7775e836afa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gab37ac3eec8d61f22fceda7775e836afa\">orthoLH_ZO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gab37ac3eec8d61f22fceda7775e836afa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.  <a href=\"a00243.html#gab37ac3eec8d61f22fceda7775e836afa\">More...</a><br /></td></tr>\n<tr class=\"separator:gab37ac3eec8d61f22fceda7775e836afa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab219d28a8f178d4517448fcd6395a073\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab219d28a8f178d4517448fcd6395a073\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gab219d28a8f178d4517448fcd6395a073\">orthoNO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gab219d28a8f178d4517448fcd6395a073\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gab219d28a8f178d4517448fcd6395a073\">More...</a><br /></td></tr>\n<tr class=\"separator:gab219d28a8f178d4517448fcd6395a073\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16264c9b838edeb9dd1de7a1010a13a4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga16264c9b838edeb9dd1de7a1010a13a4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4\">orthoRH</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:ga16264c9b838edeb9dd1de7a1010a13a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.  <a href=\"a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16264c9b838edeb9dd1de7a1010a13a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa2f7a1373170bf0a4a2ddef9b0706780\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa2f7a1373170bf0a4a2ddef9b0706780\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780\">orthoRH_NO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gaa2f7a1373170bf0a4a2ddef9b0706780\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.  <a href=\"a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa2f7a1373170bf0a4a2ddef9b0706780\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9aea2e515b08fd7dce47b7b6ec34d588\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9aea2e515b08fd7dce47b7b6ec34d588\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588\">orthoRH_ZO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:ga9aea2e515b08fd7dce47b7b6ec34d588\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.  <a href=\"a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9aea2e515b08fd7dce47b7b6ec34d588\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea11a70817af2c0801c869dea0b7a5bc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaea11a70817af2c0801c869dea0b7a5bc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaea11a70817af2c0801c869dea0b7a5bc\">orthoZO</a> (T left, T right, T bottom, T top, T zNear, T zFar)</td></tr>\n<tr class=\"memdesc:gaea11a70817af2c0801c869dea0b7a5bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.  <a href=\"a00243.html#gaea11a70817af2c0801c869dea0b7a5bc\">More...</a><br /></td></tr>\n<tr class=\"separator:gaea11a70817af2c0801c869dea0b7a5bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga747c8cf99458663dd7ad1bb3a2f07787\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga747c8cf99458663dd7ad1bb3a2f07787\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787\">perspective</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:ga747c8cf99458663dd7ad1bb3a2f07787\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symetric perspective-view frustum based on the default handedness and default near and far clip planes definition.  <a href=\"a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787\">More...</a><br /></td></tr>\n<tr class=\"separator:ga747c8cf99458663dd7ad1bb3a2f07787\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebd02240fd36e85ad754f02ddd9a560d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaebd02240fd36e85ad754f02ddd9a560d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaebd02240fd36e85ad754f02ddd9a560d\">perspectiveFov</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gaebd02240fd36e85ad754f02ddd9a560d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view and the default handedness and default near and far clip planes definition.  <a href=\"a00243.html#gaebd02240fd36e85ad754f02ddd9a560d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaebd02240fd36e85ad754f02ddd9a560d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6aebe16c164bd8e52554cbe0304ef4aa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga6aebe16c164bd8e52554cbe0304ef4aa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa\">perspectiveFovLH</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:ga6aebe16c164bd8e52554cbe0304ef4aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a left handed perspective projection matrix based on a field of view.  <a href=\"a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6aebe16c164bd8e52554cbe0304ef4aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad18a4495b77530317327e8d466488c1a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gad18a4495b77530317327e8d466488c1a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gad18a4495b77530317327e8d466488c1a\">perspectiveFovLH_NO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gad18a4495b77530317327e8d466488c1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using left-handed coordinates.  <a href=\"a00243.html#gad18a4495b77530317327e8d466488c1a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad18a4495b77530317327e8d466488c1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabdd37014f529e25b2fa1b3ba06c10d5c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gabdd37014f529e25b2fa1b3ba06c10d5c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c\">perspectiveFovLH_ZO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gabdd37014f529e25b2fa1b3ba06c10d5c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using left-handed coordinates.  <a href=\"a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c\">More...</a><br /></td></tr>\n<tr class=\"separator:gabdd37014f529e25b2fa1b3ba06c10d5c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf30e7bd3b1387a6776433dd5383e6633\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf30e7bd3b1387a6776433dd5383e6633\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaf30e7bd3b1387a6776433dd5383e6633\">perspectiveFovNO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gaf30e7bd3b1387a6776433dd5383e6633\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gaf30e7bd3b1387a6776433dd5383e6633\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf30e7bd3b1387a6776433dd5383e6633\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf32bf563f28379c68554a44ee60c6a85\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf32bf563f28379c68554a44ee60c6a85\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaf32bf563f28379c68554a44ee60c6a85\">perspectiveFovRH</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:gaf32bf563f28379c68554a44ee60c6a85\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a right handed perspective projection matrix based on a field of view.  <a href=\"a00243.html#gaf32bf563f28379c68554a44ee60c6a85\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf32bf563f28379c68554a44ee60c6a85\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga257b733ff883c9a065801023cf243eb2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga257b733ff883c9a065801023cf243eb2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga257b733ff883c9a065801023cf243eb2\">perspectiveFovRH_NO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:ga257b733ff883c9a065801023cf243eb2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using right-handed coordinates.  <a href=\"a00243.html#ga257b733ff883c9a065801023cf243eb2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga257b733ff883c9a065801023cf243eb2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dcbb25331676f5b0795aced1a905c44\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7dcbb25331676f5b0795aced1a905c44\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga7dcbb25331676f5b0795aced1a905c44\">perspectiveFovRH_ZO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:ga7dcbb25331676f5b0795aced1a905c44\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using right-handed coordinates.  <a href=\"a00243.html#ga7dcbb25331676f5b0795aced1a905c44\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7dcbb25331676f5b0795aced1a905c44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4bc69fa1d1f95128430aa3d2a712390b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga4bc69fa1d1f95128430aa3d2a712390b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b\">perspectiveFovZO</a> (T fov, T width, T height, T near, T far)</td></tr>\n<tr class=\"memdesc:ga4bc69fa1d1f95128430aa3d2a712390b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4bc69fa1d1f95128430aa3d2a712390b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bd34951dc7022ac256fcb51d7f6fc2f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9bd34951dc7022ac256fcb51d7f6fc2f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f\">perspectiveLH</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:ga9bd34951dc7022ac256fcb51d7f6fc2f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a left handed, symetric perspective-view frustum.  <a href=\"a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9bd34951dc7022ac256fcb51d7f6fc2f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaead4d049d1feab463b700b5641aa590e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaead4d049d1feab463b700b5641aa590e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaead4d049d1feab463b700b5641aa590e\">perspectiveLH_NO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gaead4d049d1feab463b700b5641aa590e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a left handed, symetric perspective-view frustum.  <a href=\"a00243.html#gaead4d049d1feab463b700b5641aa590e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaead4d049d1feab463b700b5641aa590e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaca32af88c2719005c02817ad1142986c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaca32af88c2719005c02817ad1142986c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaca32af88c2719005c02817ad1142986c\">perspectiveLH_ZO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gaca32af88c2719005c02817ad1142986c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a left handed, symetric perspective-view frustum.  <a href=\"a00243.html#gaca32af88c2719005c02817ad1142986c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaca32af88c2719005c02817ad1142986c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf497e6bca61e7c87088370b126a93758\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf497e6bca61e7c87088370b126a93758\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaf497e6bca61e7c87088370b126a93758\">perspectiveNO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gaf497e6bca61e7c87088370b126a93758\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gaf497e6bca61e7c87088370b126a93758\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf497e6bca61e7c87088370b126a93758\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26b88757fbd90601b80768a7e1ad3aa1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga26b88757fbd90601b80768a7e1ad3aa1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1\">perspectiveRH</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:ga26b88757fbd90601b80768a7e1ad3aa1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a right handed, symetric perspective-view frustum.  <a href=\"a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga26b88757fbd90601b80768a7e1ad3aa1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1526cb2cbe796095284e8f34b01c582\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gad1526cb2cbe796095284e8f34b01c582\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gad1526cb2cbe796095284e8f34b01c582\">perspectiveRH_NO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gad1526cb2cbe796095284e8f34b01c582\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a right handed, symetric perspective-view frustum.  <a href=\"a00243.html#gad1526cb2cbe796095284e8f34b01c582\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1526cb2cbe796095284e8f34b01c582\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\">perspectiveRH_ZO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a right handed, symetric perspective-view frustum.  <a href=\"a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9dfba5c2322da54f72b1eb7c7c11b47\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa9dfba5c2322da54f72b1eb7c7c11b47\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47\">perspectiveZO</a> (T fovy, T aspect, T near, T far)</td></tr>\n<tr class=\"memdesc:gaa9dfba5c2322da54f72b1eb7c7c11b47\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.  <a href=\"a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9dfba5c2322da54f72b1eb7c7c11b47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaaeacc04a2a6f4b18c5899d37e7bb3ef9\">tweakedInfinitePerspective</a> (T fovy, T aspect, T near)</td></tr>\n<tr class=\"memdesc:gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.  <a href=\"a00243.html#gaaeacc04a2a6f4b18c5899d37e7bb3ef9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5b3c85ff6737030a1d2214474ffa7a8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf5b3c85ff6737030a1d2214474ffa7a8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8\">tweakedInfinitePerspective</a> (T fovy, T aspect, T near, T ep)</td></tr>\n<tr class=\"memdesc:gaf5b3c85ff6737030a1d2214474ffa7a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.  <a href=\"a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5b3c85ff6737030a1d2214474ffa7a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Defines functions that generate clip space transformation matrices. </p>\n<p>The matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the lookAt function generates a transform from world space into the specific eye space that the projective matrix functions (perspective, ortho, etc) are designed to expect. The OpenGL compatibility specifications defines the particular layout of this eye space.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00059.html\" title=\"GLM_EXT_matrix_clip_space \">glm/ext/matrix_clip_space.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00247.html\" title=\"Defines functions that generate common transformation matrices. \">GLM_EXT_matrix_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00245.html\" title=\"Functions that generate common projection transformation matrices. \">GLM_EXT_matrix_projection</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga0bcd4542e0affc63a0b8c08fcb839ea9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustum </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a frustum matrix with default handedness, using the default handedness and default near and far clip planes definition. </p>\n<p>To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glFrustum.xml\">glFrustum man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae4277c37f61d81da01bc9db14ea90296\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustumLH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a left handed frustum matrix. </p>\n<p>If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga259520cad03b3f8bca9417920035ed01\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustumLH_NO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a left handed frustum matrix. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga94218b094862d17798370242680b9030\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustumLH_ZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a left handed frustum matrix. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae34ec664ad44860bf4b5ba631f0e0e90\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustumNO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4366ab45880c6c5f8b3e8c371ca4b136\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustumRH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a right handed frustum matrix. </p>\n<p>If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9236c8439f21be186b79c97b588836b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustumRH_NO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a right handed frustum matrix. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7654a9227f14d5382786b9fc0eb5692d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustumRH_ZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a right handed frustum matrix. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa73322e152edf50cf30a6edac342a757\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::frustumZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga44fa38a18349450325cae2661bb115ca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::infinitePerspective </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3201b30f5b3ea0f933246d87bfb992a9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::infinitePerspectiveLH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga99672ffe5714ef478dab2437255fe7e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::infinitePerspectiveRH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae5b6b40ed882cd56cd7cb97701909c06\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::ortho </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for projecting two-dimensional coordinates onto the screen. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top, T const&amp; zNear, T const&amp; zFar) </dd>\n<dd>\n<a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluOrtho2D.xml\">gluOrtho2D man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6615d8a9d39432e279c4575313ecb456\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::ortho </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume, using the default handedness and default near and far clip planes definition. </p>\n<p>To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd>\n<dd>\n<a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glOrtho.xml\">glOrtho man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad122a79aadaa5529cec4ac197203db7f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::orthoLH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. </p>\n<p>If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga526416735ea7c5c5cd255bf99d051bd8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::orthoLH_NO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume using right-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab37ac3eec8d61f22fceda7775e836afa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::orthoLH_ZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab219d28a8f178d4517448fcd6395a073\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::orthoNO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga16264c9b838edeb9dd1de7a1010a13a4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::orthoRH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. </p>\n<p>If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa2f7a1373170bf0a4a2ddef9b0706780\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::orthoRH_NO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9aea2e515b08fd7dce47b7b6ec34d588\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::orthoRH_ZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaea11a70817af2c0801c869dea0b7a5bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::orthoZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>left</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>right</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bottom</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>top</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zNear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>zFar</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- glm::ortho(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga747c8cf99458663dd7ad1bb3a2f07787\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspective </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a symetric perspective-view frustum based on the default handedness and default near and far clip planes definition. </p>\n<p>To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluPerspective.xml\">gluPerspective man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaebd02240fd36e85ad754f02ddd9a560d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFov </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a perspective projection matrix based on a field of view and the default handedness and default near and far clip planes definition. </p>\n<p>To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6aebe16c164bd8e52554cbe0304ef4aa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFovLH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a left handed perspective projection matrix based on a field of view. </p>\n<p>If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad18a4495b77530317327e8d466488c1a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFovLH_NO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a perspective projection matrix based on a field of view using left-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabdd37014f529e25b2fa1b3ba06c10d5c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFovLH_ZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a perspective projection matrix based on a field of view using left-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf30e7bd3b1387a6776433dd5383e6633\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFovNO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf32bf563f28379c68554a44ee60c6a85\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFovRH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a right handed perspective projection matrix based on a field of view. </p>\n<p>If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga257b733ff883c9a065801023cf243eb2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFovRH_NO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a perspective projection matrix based on a field of view using right-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7dcbb25331676f5b0795aced1a905c44\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFovRH_ZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a perspective projection matrix based on a field of view using right-handed coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4bc69fa1d1f95128430aa3d2a712390b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveFovZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fov</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>width</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>height</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fov</td><td>Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">width</td><td>Width of the viewport </td></tr>\n    <tr><td class=\"paramname\">height</td><td>Height of the viewport </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9bd34951dc7022ac256fcb51d7f6fc2f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveLH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a left handed, symetric perspective-view frustum. </p>\n<p>If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaead4d049d1feab463b700b5641aa590e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveLH_NO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a left handed, symetric perspective-view frustum. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaca32af88c2719005c02817ad1142986c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveLH_ZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a left handed, symetric perspective-view frustum. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf497e6bca61e7c87088370b126a93758\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveNO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga26b88757fbd90601b80768a7e1ad3aa1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveRH </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a right handed, symetric perspective-view frustum. </p>\n<p>If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad1526cb2cbe796095284e8f34b01c582\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveRH_NO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a right handed, symetric perspective-view frustum. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveRH_ZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a right handed, symetric perspective-view frustum. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa9dfba5c2322da54f72b1eb7c7c11b47\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::perspectiveZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>far</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">far</td><td>Specifies the distance from the viewer to the far clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaeacc04a2a6f4b18c5899d37e7bb3ef9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::tweakedInfinitePerspective </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive).</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf5b3c85ff6737030a1d2214474ffa7a8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::tweakedInfinitePerspective </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>fovy</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>aspect</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>near</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>ep</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">fovy</td><td>Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">aspect</td><td>Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). </td></tr>\n    <tr><td class=\"paramname\">near</td><td>Specifies the distance from the viewer to the near clipping plane (always positive). </td></tr>\n    <tr><td class=\"paramname\">ep</td><td>Epsilon</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00244.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_matrix_common</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_matrix_common<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Defines functions for common matrix operations.  \n<a href=\"#details\">More...</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Defines functions for common matrix operations. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00060.html\" title=\"GLM_EXT_matrix_common \">glm/ext/matrix_common.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00244.html\" title=\"Defines functions for common matrix operations. \">GLM_EXT_matrix_common</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00245.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_matrix_projection</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_matrix_projection<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Functions that generate common projection transformation matrices.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q, typename U &gt; </td></tr>\n<tr class=\"memitem:gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82\">pickMatrix</a> (vec&lt; 2, T, Q &gt; const &amp;center, vec&lt; 2, T, Q &gt; const &amp;delta, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Define a picking region.  <a href=\"a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6b21eadb7ac2ecbbe258a9a233b4c82\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf36e96033f456659e6705472a06b6e11\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf36e96033f456659e6705472a06b6e11\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#gaf36e96033f456659e6705472a06b6e11\">project</a> (vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:gaf36e96033f456659e6705472a06b6e11\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near and far clip planes definition.  <a href=\"a00245.html#gaf36e96033f456659e6705472a06b6e11\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf36e96033f456659e6705472a06b6e11\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05249751f48d14cb282e4979802b8111\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga05249751f48d14cb282e4979802b8111\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#ga05249751f48d14cb282e4979802b8111\">projectNO</a> (vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:ga05249751f48d14cb282e4979802b8111\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.  <a href=\"a00245.html#ga05249751f48d14cb282e4979802b8111\">More...</a><br /></td></tr>\n<tr class=\"separator:ga05249751f48d14cb282e4979802b8111\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga77d157525063dec83a557186873ee080\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga77d157525063dec83a557186873ee080\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#ga77d157525063dec83a557186873ee080\">projectZO</a> (vec&lt; 3, T, Q &gt; const &amp;obj, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:ga77d157525063dec83a557186873ee080\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.  <a href=\"a00245.html#ga77d157525063dec83a557186873ee080\">More...</a><br /></td></tr>\n<tr class=\"separator:ga77d157525063dec83a557186873ee080\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga36641e5d60f994e01c3d8f56b10263d2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga36641e5d60f994e01c3d8f56b10263d2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#ga36641e5d60f994e01c3d8f56b10263d2\">unProject</a> (vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:ga36641e5d60f994e01c3d8f56b10263d2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near and far clip planes definition.  <a href=\"a00245.html#ga36641e5d60f994e01c3d8f56b10263d2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga36641e5d60f994e01c3d8f56b10263d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae089ba9fc150ff69c252a20e508857b5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae089ba9fc150ff69c252a20e508857b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#gae089ba9fc150ff69c252a20e508857b5\">unProjectNO</a> (vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:gae089ba9fc150ff69c252a20e508857b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.  <a href=\"a00245.html#gae089ba9fc150ff69c252a20e508857b5\">More...</a><br /></td></tr>\n<tr class=\"separator:gae089ba9fc150ff69c252a20e508857b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade5136413ce530f8e606124d570fba32\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gade5136413ce530f8e606124d570fba32\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html#gade5136413ce530f8e606124d570fba32\">unProjectZO</a> (vec&lt; 3, T, Q &gt; const &amp;win, mat&lt; 4, 4, T, Q &gt; const &amp;model, mat&lt; 4, 4, T, Q &gt; const &amp;proj, vec&lt; 4, U, Q &gt; const &amp;viewport)</td></tr>\n<tr class=\"memdesc:gade5136413ce530f8e606124d570fba32\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.  <a href=\"a00245.html#gade5136413ce530f8e606124d570fba32\">More...</a><br /></td></tr>\n<tr class=\"separator:gade5136413ce530f8e606124d570fba32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Functions that generate common projection transformation matrices. </p>\n<p>The matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the lookAt function generates a transform from world space into the specific eye space that the projective matrix functions (perspective, ortho, etc) are designed to expect. The OpenGL compatibility specifications defines the particular layout of this eye space.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00105.html\" title=\"GLM_EXT_matrix_projection \">glm/ext/matrix_projection.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00247.html\" title=\"Defines functions that generate common transformation matrices. \">GLM_EXT_matrix_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00243.html\" title=\"Defines functions that generate clip space transformation matrices. \">GLM_EXT_matrix_clip_space</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaf6b21eadb7ac2ecbbe258a9a233b4c82\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::pickMatrix </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>center</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>delta</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>viewport</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Define a picking region. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">center</td><td>Specify the center of a picking region in window coordinates. </td></tr>\n    <tr><td class=\"paramname\">delta</td><td>Specify the width and height, respectively, of the picking region in window coordinates. </td></tr>\n    <tr><td class=\"paramname\">viewport</td><td>Rendering viewport </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Native type used for the computation. Currently supported: half (not recommended), float or double. </td></tr>\n    <tr><td class=\"paramname\">U</td><td>Currently supported: Floating-point types and integer types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluPickMatrix.xml\">gluPickMatrix man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf36e96033f456659e6705472a06b6e11\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::project </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>obj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>model</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>proj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>viewport</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near and far clip planes definition. </p>\n<p>To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">obj</td><td>Specify the object coordinates. </td></tr>\n    <tr><td class=\"paramname\">model</td><td>Specifies the current modelview matrix </td></tr>\n    <tr><td class=\"paramname\">proj</td><td>Specifies the current projection matrix </td></tr>\n    <tr><td class=\"paramname\">viewport</td><td>Specifies the current viewport </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return the computed window coordinates. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Native type used for the computation. Currently supported: half (not recommended), float or double. </td></tr>\n    <tr><td class=\"paramname\">U</td><td>Currently supported: Floating-point types and integer types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluProject.xml\">gluProject man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga05249751f48d14cb282e4979802b8111\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::projectNO </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>obj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>model</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>proj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>viewport</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">obj</td><td>Specify the object coordinates. </td></tr>\n    <tr><td class=\"paramname\">model</td><td>Specifies the current modelview matrix </td></tr>\n    <tr><td class=\"paramname\">proj</td><td>Specifies the current projection matrix </td></tr>\n    <tr><td class=\"paramname\">viewport</td><td>Specifies the current viewport </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return the computed window coordinates. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Native type used for the computation. Currently supported: half (not recommended), float or double. </td></tr>\n    <tr><td class=\"paramname\">U</td><td>Currently supported: Floating-point types and integer types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluProject.xml\">gluProject man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga77d157525063dec83a557186873ee080\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::projectZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>obj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>model</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>proj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>viewport</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">obj</td><td>Specify the object coordinates. </td></tr>\n    <tr><td class=\"paramname\">model</td><td>Specifies the current modelview matrix </td></tr>\n    <tr><td class=\"paramname\">proj</td><td>Specifies the current projection matrix </td></tr>\n    <tr><td class=\"paramname\">viewport</td><td>Specifies the current viewport </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return the computed window coordinates. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Native type used for the computation. Currently supported: half (not recommended), float or double. </td></tr>\n    <tr><td class=\"paramname\">U</td><td>Currently supported: Floating-point types and integer types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluProject.xml\">gluProject man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga36641e5d60f994e01c3d8f56b10263d2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::unProject </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>win</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>model</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>proj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>viewport</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near and far clip planes definition. </p>\n<p>To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">win</td><td>Specify the window coordinates to be mapped. </td></tr>\n    <tr><td class=\"paramname\">model</td><td>Specifies the modelview matrix </td></tr>\n    <tr><td class=\"paramname\">proj</td><td>Specifies the projection matrix </td></tr>\n    <tr><td class=\"paramname\">viewport</td><td>Specifies the viewport </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns the computed object coordinates. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Native type used for the computation. Currently supported: half (not recommended), float or double. </td></tr>\n    <tr><td class=\"paramname\">U</td><td>Currently supported: Floating-point types and integer types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluUnProject.xml\">gluUnProject man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae089ba9fc150ff69c252a20e508857b5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::unProjectNO </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>win</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>model</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>proj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>viewport</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">win</td><td>Specify the window coordinates to be mapped. </td></tr>\n    <tr><td class=\"paramname\">model</td><td>Specifies the modelview matrix </td></tr>\n    <tr><td class=\"paramname\">proj</td><td>Specifies the projection matrix </td></tr>\n    <tr><td class=\"paramname\">viewport</td><td>Specifies the viewport </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns the computed object coordinates. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Native type used for the computation. Currently supported: half (not recommended), float or double. </td></tr>\n    <tr><td class=\"paramname\">U</td><td>Currently supported: Floating-point types and integer types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluUnProject.xml\">gluUnProject man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gade5136413ce530f8e606124d570fba32\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::unProjectZO </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>win</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>model</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>proj</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>viewport</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. </p>\n<p>The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">win</td><td>Specify the window coordinates to be mapped. </td></tr>\n    <tr><td class=\"paramname\">model</td><td>Specifies the modelview matrix </td></tr>\n    <tr><td class=\"paramname\">proj</td><td>Specifies the projection matrix </td></tr>\n    <tr><td class=\"paramname\">viewport</td><td>Specifies the viewport </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section return\"><dt>Returns</dt><dd>Returns the computed object coordinates. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Native type used for the computation. Currently supported: half (not recommended), float or double. </td></tr>\n    <tr><td class=\"paramname\">U</td><td>Currently supported: Floating-point types and integer types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluUnProject.xml\">gluUnProject man page</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00246.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_matrix_relational</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_matrix_relational<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes comparison functions for matrix types that take a user defined epsilon values.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga27e90dcb7941c9b70e295dc3f6f6369f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga27e90dcb7941c9b70e295dc3f6f6369f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga27e90dcb7941c9b70e295dc3f6f6369f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Perform a component-wise equal-to comparison of two matrices.  <a href=\"a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27e90dcb7941c9b70e295dc3f6f6369f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5d687d70d11708b68c36c6db5777040\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf5d687d70d11708b68c36c6db5777040\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gaf5d687d70d11708b68c36c6db5777040\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:gaf5d687d70d11708b68c36c6db5777040\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00246.html#gaf5d687d70d11708b68c36c6db5777040\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5d687d70d11708b68c36c6db5777040\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafa6a053e81179fa4292b35651c83c3fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafa6a053e81179fa4292b35651c83c3fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gafa6a053e81179fa4292b35651c83c3fb\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, T, Q &gt; const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gafa6a053e81179fa4292b35651c83c3fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00246.html#gafa6a053e81179fa4292b35651c83c3fb\">More...</a><br /></td></tr>\n<tr class=\"separator:gafa6a053e81179fa4292b35651c83c3fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3a93f19e72e9141f50527c9de21d0c0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab3a93f19e72e9141f50527c9de21d0c0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gab3a93f19e72e9141f50527c9de21d0c0\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:gab3a93f19e72e9141f50527c9de21d0c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00246.html#gab3a93f19e72e9141f50527c9de21d0c0\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3a93f19e72e9141f50527c9de21d0c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5305af376173f1902719fa309bbae671\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5305af376173f1902719fa309bbae671\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">equal</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:ga5305af376173f1902719fa309bbae671\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00246.html#ga5305af376173f1902719fa309bbae671\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5305af376173f1902719fa309bbae671\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8504f18a7e2bf315393032c2137dad83\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8504f18a7e2bf315393032c2137dad83\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#ga8504f18a7e2bf315393032c2137dad83\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga8504f18a7e2bf315393032c2137dad83\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Perform a component-wise not-equal-to comparison of two matrices.  <a href=\"a00246.html#ga8504f18a7e2bf315393032c2137dad83\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8504f18a7e2bf315393032c2137dad83\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29071147d118569344d10944b7d5c378\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga29071147d118569344d10944b7d5c378\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#ga29071147d118569344d10944b7d5c378\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:ga29071147d118569344d10944b7d5c378\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00246.html#ga29071147d118569344d10944b7d5c378\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29071147d118569344d10944b7d5c378\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7959e14fbc35b4ed2617daf4d67f6cd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad7959e14fbc35b4ed2617daf4d67f6cd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gad7959e14fbc35b4ed2617daf4d67f6cd\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, T, Q &gt; const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gad7959e14fbc35b4ed2617daf4d67f6cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00246.html#gad7959e14fbc35b4ed2617daf4d67f6cd\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7959e14fbc35b4ed2617daf4d67f6cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1cd7fc228ef6e26c73583fd0d9c6552\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa1cd7fc228ef6e26c73583fd0d9c6552\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gaa1cd7fc228ef6e26c73583fd0d9c6552\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:gaa1cd7fc228ef6e26c73583fd0d9c6552\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00246.html#gaa1cd7fc228ef6e26c73583fd0d9c6552\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa1cd7fc228ef6e26c73583fd0d9c6552\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa5517341754149ffba742d230afd1f32\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa5517341754149ffba742d230afd1f32\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; C, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">notEqual</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:gaa5517341754149ffba742d230afd1f32\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00246.html#gaa5517341754149ffba742d230afd1f32\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa5517341754149ffba742d230afd1f32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes comparison functions for matrix types that take a user defined epsilon values. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00107.html\" title=\"GLM_EXT_matrix_relational \">glm/ext/matrix_relational.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00275.html\" title=\"Exposes comparison functions for vector types that take a user defined epsilon values. \">GLM_EXT_vector_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00262.html\" title=\"Exposes comparison functions for scalar types that take a user defined epsilon values. \">GLM_EXT_scalar_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga27e90dcb7941c9b70e295dc3f6f6369f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Perform a component-wise equal-to comparison of two matrices. </p>\n<p>Return a boolean vector which components value is True if this expression is satisfied per column of the matrices.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf5d687d70d11708b68c36c6db5777040\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafa6a053e81179fa4292b35651c83c3fb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; C, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab3a93f19e72e9141f50527c9de21d0c0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>ULPs</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison between two vectors in term of ULPs. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5305af376173f1902719fa309bbae671\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; C, int, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ULPs</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison between two vectors in term of ULPs. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8504f18a7e2bf315393032c2137dad83\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Perform a component-wise not-equal-to comparison of two matrices. </p>\n<p>Return a boolean vector which components value is True if this expression is satisfied per column of the matrices.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga29071147d118569344d10944b7d5c378\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad7959e14fbc35b4ed2617daf4d67f6cd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; C, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &gt;= epsilon. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa1cd7fc228ef6e26c73583fd0d9c6552\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>ULPs</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison between two vectors in term of ULPs. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa5517341754149ffba742d230afd1f32\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;C, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; C, int, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ULPs</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison between two vectors in term of ULPs. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number of columns of the matrix </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number of rows of the matrix </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00247.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_matrix_transform</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_matrix_transform<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Defines functions that generate common transformation matrices.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga81696f2b8d1db02ea1aff8da8f269314\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga81696f2b8d1db02ea1aff8da8f269314\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga81696f2b8d1db02ea1aff8da8f269314\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#ga81696f2b8d1db02ea1aff8da8f269314\">identity</a> ()</td></tr>\n<tr class=\"memdesc:ga81696f2b8d1db02ea1aff8da8f269314\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds an identity matrix. <br /></td></tr>\n<tr class=\"separator:ga81696f2b8d1db02ea1aff8da8f269314\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa64aa951a0e99136bba9008d2b59c78e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa64aa951a0e99136bba9008d2b59c78e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#gaa64aa951a0e99136bba9008d2b59c78e\">lookAt</a> (vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gaa64aa951a0e99136bba9008d2b59c78e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a look at view matrix based on the default handedness.  <a href=\"a00247.html#gaa64aa951a0e99136bba9008d2b59c78e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa64aa951a0e99136bba9008d2b59c78e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab2c09e25b0a16d3a9d89cc85bbae41b0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab2c09e25b0a16d3a9d89cc85bbae41b0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0\">lookAtLH</a> (vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gab2c09e25b0a16d3a9d89cc85bbae41b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a left handed look at view matrix.  <a href=\"a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0\">More...</a><br /></td></tr>\n<tr class=\"separator:gab2c09e25b0a16d3a9d89cc85bbae41b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacfa12c8889c754846bc20c65d9b5c701\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacfa12c8889c754846bc20c65d9b5c701\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#gacfa12c8889c754846bc20c65d9b5c701\">lookAtRH</a> (vec&lt; 3, T, Q &gt; const &amp;eye, vec&lt; 3, T, Q &gt; const &amp;center, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gacfa12c8889c754846bc20c65d9b5c701\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a right handed look at view matrix.  <a href=\"a00247.html#gacfa12c8889c754846bc20c65d9b5c701\">More...</a><br /></td></tr>\n<tr class=\"separator:gacfa12c8889c754846bc20c65d9b5c701\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee9e865eaa9776370996da2940873fd4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaee9e865eaa9776370996da2940873fd4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#gaee9e865eaa9776370996da2940873fd4\">rotate</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:gaee9e865eaa9776370996da2940873fd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a rotation 4 * 4 matrix created from an axis vector and an angle.  <a href=\"a00247.html#gaee9e865eaa9776370996da2940873fd4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee9e865eaa9776370996da2940873fd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05051adbee603fb3c5095d8cf5cc229b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga05051adbee603fb3c5095d8cf5cc229b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">scale</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga05051adbee603fb3c5095d8cf5cc229b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a scale 4 * 4 matrix created from 3 scalars.  <a href=\"a00247.html#ga05051adbee603fb3c5095d8cf5cc229b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga05051adbee603fb3c5095d8cf5cc229b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a4ecc4ad82652b8fb14dcb087879284\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1a4ecc4ad82652b8fb14dcb087879284\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284\">translate</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1a4ecc4ad82652b8fb14dcb087879284\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a translation 4 * 4 matrix created from a vector of 3 components.  <a href=\"a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a4ecc4ad82652b8fb14dcb087879284\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Defines functions that generate common transformation matrices. </p>\n<p>The matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the lookAt function generates a transform from world space into the specific eye space that the projective matrix functions (perspective, ortho, etc) are designed to expect. The OpenGL compatibility specifications defines the particular layout of this eye space.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00108.html\" title=\"GLM_EXT_matrix_transform \">glm/ext/matrix_transform.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00245.html\" title=\"Functions that generate common projection transformation matrices. \">GLM_EXT_matrix_projection</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00243.html\" title=\"Defines functions that generate clip space transformation matrices. \">GLM_EXT_matrix_clip_space</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaa64aa951a0e99136bba9008d2b59c78e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::lookAt </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>eye</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>center</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>up</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a look at view matrix based on the default handedness. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">eye</td><td>Position of the camera </td></tr>\n    <tr><td class=\"paramname\">center</td><td>Position where the camera is looking at </td></tr>\n    <tr><td class=\"paramname\">up</td><td>Normalized up vector, how the camera is oriented. Typically (0, 0, 1)</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- frustum(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top, T const&amp; nearVal, T const&amp; farVal) frustum(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top, T const&amp; nearVal, T const&amp; farVal) </dd>\n<dd>\n<a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluLookAt.xml\">gluLookAt man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab2c09e25b0a16d3a9d89cc85bbae41b0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::lookAtLH </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>eye</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>center</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>up</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a left handed look at view matrix. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">eye</td><td>Position of the camera </td></tr>\n    <tr><td class=\"paramname\">center</td><td>Position where the camera is looking at </td></tr>\n    <tr><td class=\"paramname\">up</td><td>Normalized up vector, how the camera is oriented. Typically (0, 0, 1)</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- frustum(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top, T const&amp; nearVal, T const&amp; farVal) frustum(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top, T const&amp; nearVal, T const&amp; farVal) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacfa12c8889c754846bc20c65d9b5c701\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::lookAtRH </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>eye</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>center</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>up</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a right handed look at view matrix. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">eye</td><td>Position of the camera </td></tr>\n    <tr><td class=\"paramname\">center</td><td>Position where the camera is looking at </td></tr>\n    <tr><td class=\"paramname\">up</td><td>Normalized up vector, how the camera is oriented. Typically (0, 0, 1)</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- frustum(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top, T const&amp; nearVal, T const&amp; farVal) frustum(T const&amp; left, T const&amp; right, T const&amp; bottom, T const&amp; top, T const&amp; nearVal, T const&amp; farVal) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaee9e865eaa9776370996da2940873fd4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>axis</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a rotation 4 * 4 matrix created from an axis vector and an angle. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this rotation matrix. </td></tr>\n    <tr><td class=\"paramname\">angle</td><td>Rotation angle expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">axis</td><td>Rotation axis, recommended to be normalized.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- rotate(mat&lt;4, 4, T, Q&gt; const&amp; m, T angle, T x, T y, T z) </dd>\n<dd>\n- rotate(T angle, vec&lt;3, T, Q&gt; const&amp; v) </dd>\n<dd>\n<a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glRotate.xml\">glRotate man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga05051adbee603fb3c5095d8cf5cc229b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::scale </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a scale 4 * 4 matrix created from 3 scalars. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this scale matrix. </td></tr>\n    <tr><td class=\"paramname\">v</td><td>Ratio of scaling for each axis.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- scale(mat&lt;4, 4, T, Q&gt; const&amp; m, T x, T y, T z) </dd>\n<dd>\n- scale(vec&lt;3, T, Q&gt; const&amp; v) </dd>\n<dd>\n<a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glScale.xml\">glScale man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1a4ecc4ad82652b8fb14dcb087879284\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::translate </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a translation 4 * 4 matrix created from a vector of 3 components. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>\n    <tr><td class=\"paramname\">v</td><td>Coordinates of a translation vector.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<div class=\"fragment\"><div class=\"line\"><span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"a00037.html\">glm/glm.hpp</a>&gt;</span></div>\n<div class=\"line\"><span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"a00109.html\">glm/gtc/matrix_transform.hpp</a>&gt;</span></div>\n<div class=\"line\">...</div>\n<div class=\"line\">glm::mat4 m = <a class=\"code\" href=\"a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284\">glm::translate</a>(<a class=\"code\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">glm::mat4</a>(1.0f), <a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">glm::vec3</a>(1.0f));</div>\n<div class=\"line\"><span class=\"comment\">// m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f</span></div>\n<div class=\"line\"><span class=\"comment\">// m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f</span></div>\n<div class=\"line\"><span class=\"comment\">// m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f</span></div>\n<div class=\"line\"><span class=\"comment\">// m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f</span></div>\n</div><!-- fragment --><dl class=\"section see\"><dt>See also</dt><dd>- translate(mat&lt;4, 4, T, Q&gt; const&amp; m, T x, T y, T z) </dd>\n<dd>\n- translate(vec&lt;3, T, Q&gt; const&amp; v) </dd>\n<dd>\n<a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glTranslate.xml\">glTranslate man page</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00248.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_common</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_common<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides common functions for quaternion types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga10d7bda73201788ac2ab28cd8d0d409b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga10d7bda73201788ac2ab28cd8d0d409b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b\">conjugate</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga10d7bda73201788ac2ab28cd8d0d409b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the q conjugate.  <a href=\"a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga10d7bda73201788ac2ab28cd8d0d409b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab41da854ae678e23e114b598cbca4065\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab41da854ae678e23e114b598cbca4065\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#gab41da854ae678e23e114b598cbca4065\">inverse</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gab41da854ae678e23e114b598cbca4065\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the q inverse.  <a href=\"a00248.html#gab41da854ae678e23e114b598cbca4065\">More...</a><br /></td></tr>\n<tr class=\"separator:gab41da854ae678e23e114b598cbca4065\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45722741ea266b4e861938b365c5f362\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga45722741ea266b4e861938b365c5f362\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#ga45722741ea266b4e861938b365c5f362\">isinf</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga45722741ea266b4e861938b365c5f362\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations.  <a href=\"a00248.html#ga45722741ea266b4e861938b365c5f362\">More...</a><br /></td></tr>\n<tr class=\"separator:ga45722741ea266b4e861938b365c5f362\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1bb55f8963616502e96dc564384d8a03\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1bb55f8963616502e96dc564384d8a03\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#ga1bb55f8963616502e96dc564384d8a03\">isnan</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1bb55f8963616502e96dc564384d8a03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations.  <a href=\"a00248.html#ga1bb55f8963616502e96dc564384d8a03\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1bb55f8963616502e96dc564384d8a03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6033dc0741051fa463a0a147ba29f293\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6033dc0741051fa463a0a147ba29f293\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#ga6033dc0741051fa463a0a147ba29f293\">lerp</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</td></tr>\n<tr class=\"memdesc:ga6033dc0741051fa463a0a147ba29f293\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Linear interpolation of two quaternions.  <a href=\"a00248.html#ga6033dc0741051fa463a0a147ba29f293\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6033dc0741051fa463a0a147ba29f293\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafbfe587b8da11fb89a30c3d67dd5ccc2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafbfe587b8da11fb89a30c3d67dd5ccc2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2\">mix</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</td></tr>\n<tr class=\"memdesc:gafbfe587b8da11fb89a30c3d67dd5ccc2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Spherical linear interpolation of two quaternions.  <a href=\"a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2\">More...</a><br /></td></tr>\n<tr class=\"separator:gafbfe587b8da11fb89a30c3d67dd5ccc2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7fc3c945be366b9942b842f55da428a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae7fc3c945be366b9942b842f55da428a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html#gae7fc3c945be366b9942b842f55da428a\">slerp</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)</td></tr>\n<tr class=\"memdesc:gae7fc3c945be366b9942b842f55da428a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Spherical linear interpolation of two quaternions.  <a href=\"a00248.html#gae7fc3c945be366b9942b842f55da428a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7fc3c945be366b9942b842f55da428a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides common functions for quaternion types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00127.html\" title=\"GLM_EXT_quaternion_common \">glm/ext/quaternion_common.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00258.html\" title=\"Exposes min and max functions for 3 to 4 scalar parameters. \">GLM_EXT_scalar_common</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00267.html\" title=\"Exposes min and max functions for 3 to 4 vector parameters. \">GLM_EXT_vector_common</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00252.html\" title=\"Exposes single-precision floating point quaternion type. \">GLM_EXT_quaternion_float</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00249.html\" title=\"Exposes double-precision floating point quaternion type. \">GLM_EXT_quaternion_double</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00251.html\" title=\"Provides exponential functions for quaternion types. \">GLM_EXT_quaternion_exponential</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00257.html\" title=\"Provides trigonometric functions for quaternion types. \">GLM_EXT_quaternion_trigonometric</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00256.html\" title=\"Provides transformation functions for quaternion types. \">GLM_EXT_quaternion_transform</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga10d7bda73201788ac2ab28cd8d0d409b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::conjugate </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the q conjugate. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab41da854ae678e23e114b598cbca4065\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::inverse </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the q inverse. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga45722741ea266b4e861938b365c5f362\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::isinf </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns true if x holds a positive infinity or negative infinity representation in the underlying implementation's set of floating point representations. </p>\n<p>Returns false otherwise, including for implementations with no infinity representations.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1bb55f8963616502e96dc564384d8a03\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::isnan </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns true if x holds a NaN (not a number) representation in the underlying implementation's set of floating point representations. </p>\n<p>Returns false otherwise, including for implementations with no NaN representations.</p>\n<p>/!\\ When using compiler fast math, this function may fail.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6033dc0741051fa463a0a147ba29f293\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::lerp </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Linear interpolation of two quaternions. </p>\n<p>The interpolation is oriented.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">x</td><td>A quaternion </td></tr>\n    <tr><td class=\"paramname\">y</td><td>A quaternion </td></tr>\n    <tr><td class=\"paramname\">a</td><td>Interpolation factor. The interpolation is defined in the range [0, 1].</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafbfe587b8da11fb89a30c3d67dd5ccc2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::mix </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Spherical linear interpolation of two quaternions. </p>\n<p>The interpolation is oriented and the rotation is performed at constant speed. For short path spherical linear interpolation, use the slerp function.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">x</td><td>A quaternion </td></tr>\n    <tr><td class=\"paramname\">y</td><td>A quaternion </td></tr>\n    <tr><td class=\"paramname\">a</td><td>Interpolation factor. The interpolation is defined beyond the range [0, 1].</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>- slerp(qua&lt;T, Q&gt; const&amp; x, qua&lt;T, Q&gt; const&amp; y, T const&amp; a) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae7fc3c945be366b9942b842f55da428a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::slerp </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Spherical linear interpolation of two quaternions. </p>\n<p>The interpolation always take the short path and the rotation is performed at constant speed.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">x</td><td>A quaternion </td></tr>\n    <tr><td class=\"paramname\">y</td><td>A quaternion </td></tr>\n    <tr><td class=\"paramname\">a</td><td>Interpolation factor. The interpolation is defined beyond the range [0, 1].</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00249.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_double</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_double<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes double-precision floating point quaternion type.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga1181459aa5d640a3ea43861b118f3f0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1181459aa5d640a3ea43861b118f3f0b\"></a>\ntypedef qua&lt; double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">dquat</a></td></tr>\n<tr class=\"memdesc:ga1181459aa5d640a3ea43861b118f3f0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga1181459aa5d640a3ea43861b118f3f0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes double-precision floating point quaternion type. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00128.html\" title=\"GLM_EXT_quaternion_double \">glm/ext/quaternion_double.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00252.html\" title=\"Exposes single-precision floating point quaternion type. \">GLM_EXT_quaternion_float</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00250.html\" title=\"Exposes double-precision floating point quaternion type with various precision in term of ULPs...\">GLM_EXT_quaternion_double_precision</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00248.html\" title=\"Provides common functions for quaternion types. \">GLM_EXT_quaternion_common</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00251.html\" title=\"Provides exponential functions for quaternion types. \">GLM_EXT_quaternion_exponential</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00256.html\" title=\"Provides transformation functions for quaternion types. \">GLM_EXT_quaternion_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00257.html\" title=\"Provides trigonometric functions for quaternion types. \">GLM_EXT_quaternion_trigonometric</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00250.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_double_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_double_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes double-precision floating point quaternion type with various precision in term of ULPs.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaf13a25f41afc03480b40fc71bd249cec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">highp_dquat</a></td></tr>\n<tr class=\"memdesc:gaf13a25f41afc03480b40fc71bd249cec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00250.html#gaf13a25f41afc03480b40fc71bd249cec\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf13a25f41afc03480b40fc71bd249cec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9e6e5f42e67dd5877350ba485c191f1c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">lowp_dquat</a></td></tr>\n<tr class=\"memdesc:ga9e6e5f42e67dd5877350ba485c191f1c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9e6e5f42e67dd5877350ba485c191f1c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacdf73b1f7fd8f5a0c79a3934e99c1a14\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">mediump_dquat</a></td></tr>\n<tr class=\"memdesc:gacdf73b1f7fd8f5a0c79a3934e99c1a14\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14\">More...</a><br /></td></tr>\n<tr class=\"separator:gacdf73b1f7fd8f5a0c79a3934e99c1a14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes double-precision floating point quaternion type with various precision in term of ULPs. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00129.html\" title=\"GLM_EXT_quaternion_double_precision \">glm/ext/quaternion_double_precision.hpp</a>&gt; to use the features of this extension. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"gaf13a25f41afc03480b40fc71bd249cec\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; double, highp &gt; highp_dquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00250.html\" title=\"Exposes double-precision floating point quaternion type with various precision in term of ULPs...\">GLM_EXT_quaternion_double_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00129_source.html#l00038\">38</a> of file <a class=\"el\" href=\"a00129_source.html\">quaternion_double_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9e6e5f42e67dd5877350ba485c191f1c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; double, lowp &gt; lowp_dquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00250.html\" title=\"Exposes double-precision floating point quaternion type with various precision in term of ULPs...\">GLM_EXT_quaternion_double_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00129_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00129_source.html\">quaternion_double_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacdf73b1f7fd8f5a0c79a3934e99c1a14\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; double, mediump &gt; mediump_dquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00250.html\" title=\"Exposes double-precision floating point quaternion type with various precision in term of ULPs...\">GLM_EXT_quaternion_double_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00129_source.html#l00033\">33</a> of file <a class=\"el\" href=\"a00129_source.html\">quaternion_double_precision.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00251.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_exponential</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_exponential<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides exponential functions for quaternion types.  \n<a href=\"#details\">More...</a></p>\n<p>Provides exponential functions for quaternion types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00130.html\" title=\"GLM_EXT_quaternion_exponential \">glm/ext/quaternion_exponential.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_exponential </dd>\n<dd>\n<a class=\"el\" href=\"a00252.html\" title=\"Exposes single-precision floating point quaternion type. \">GLM_EXT_quaternion_float</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00249.html\" title=\"Exposes double-precision floating point quaternion type. \">GLM_EXT_quaternion_double</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00252.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_float</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_float<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes single-precision floating point quaternion type.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gab0b441adb4509bc58d2946c2239a8942\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0b441adb4509bc58d2946c2239a8942\"></a>\ntypedef qua&lt; float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">quat</a></td></tr>\n<tr class=\"memdesc:gab0b441adb4509bc58d2946c2239a8942\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gab0b441adb4509bc58d2946c2239a8942\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes single-precision floating point quaternion type. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00131.html\" title=\"GLM_EXT_quaternion_float \">glm/ext/quaternion_float.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00249.html\" title=\"Exposes double-precision floating point quaternion type. \">GLM_EXT_quaternion_double</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00253.html\" title=\"Exposes single-precision floating point quaternion type with various precision in term of ULPs...\">GLM_EXT_quaternion_float_precision</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00248.html\" title=\"Provides common functions for quaternion types. \">GLM_EXT_quaternion_common</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00251.html\" title=\"Provides exponential functions for quaternion types. \">GLM_EXT_quaternion_exponential</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00256.html\" title=\"Provides transformation functions for quaternion types. \">GLM_EXT_quaternion_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00257.html\" title=\"Provides trigonometric functions for quaternion types. \">GLM_EXT_quaternion_trigonometric</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00253.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_float_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_float_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes single-precision floating point quaternion type with various precision in term of ULPs.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaa2fd8085774376310aeb80588e0eab6e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa2fd8085774376310aeb80588e0eab6e\"></a>\ntypedef qua&lt; float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00253.html#gaa2fd8085774376310aeb80588e0eab6e\">highp_quat</a></td></tr>\n<tr class=\"memdesc:gaa2fd8085774376310aeb80588e0eab6e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa2fd8085774376310aeb80588e0eab6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade62c5316c1c11a79c34c00c189558eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gade62c5316c1c11a79c34c00c189558eb\"></a>\ntypedef qua&lt; float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00253.html#gade62c5316c1c11a79c34c00c189558eb\">lowp_quat</a></td></tr>\n<tr class=\"memdesc:gade62c5316c1c11a79c34c00c189558eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gade62c5316c1c11a79c34c00c189558eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad2a59409de1bb12ccb6eb692ee7e9d8d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad2a59409de1bb12ccb6eb692ee7e9d8d\"></a>\ntypedef qua&lt; float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d\">mediump_quat</a></td></tr>\n<tr class=\"memdesc:gad2a59409de1bb12ccb6eb692ee7e9d8d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad2a59409de1bb12ccb6eb692ee7e9d8d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes single-precision floating point quaternion type with various precision in term of ULPs. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00132.html\" title=\"GLM_EXT_quaternion_float_precision \">glm/ext/quaternion_float_precision.hpp</a>&gt; to use the features of this extension. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00254.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_geometric</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_geometric<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides geometric functions for quaternion types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga755beaa929c75751dee646cccba37e4c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga755beaa929c75751dee646cccba37e4c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html#ga755beaa929c75751dee646cccba37e4c\">cross</a> (qua&lt; T, Q &gt; const &amp;q1, qua&lt; T, Q &gt; const &amp;q2)</td></tr>\n<tr class=\"memdesc:ga755beaa929c75751dee646cccba37e4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute a cross product.  <a href=\"a00254.html#ga755beaa929c75751dee646cccba37e4c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga755beaa929c75751dee646cccba37e4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc\">dot</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...  <a href=\"a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga84865a56acb8fbd7bc4f5c0b928e3cfc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab703732449be6c7199369b3f9a91ed38\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab703732449be6c7199369b3f9a91ed38\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">length</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gab703732449be6c7199369b3f9a91ed38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the norm of a quaternions.  <a href=\"a00254.html#gab703732449be6c7199369b3f9a91ed38\">More...</a><br /></td></tr>\n<tr class=\"separator:gab703732449be6c7199369b3f9a91ed38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf30e3263fffe8dcc6659aea76ae8927\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabf30e3263fffe8dcc6659aea76ae8927\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html#gabf30e3263fffe8dcc6659aea76ae8927\">normalize</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gabf30e3263fffe8dcc6659aea76ae8927\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the normalized quaternion.  <a href=\"a00254.html#gabf30e3263fffe8dcc6659aea76ae8927\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf30e3263fffe8dcc6659aea76ae8927\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides geometric functions for quaternion types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00133.html\" title=\"GLM_EXT_quaternion_geometric \">glm/ext/quaternion_geometric.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_geometric </dd>\n<dd>\n<a class=\"el\" href=\"a00252.html\" title=\"Exposes single-precision floating point quaternion type. \">GLM_EXT_quaternion_float</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00249.html\" title=\"Exposes double-precision floating point quaternion type. \">GLM_EXT_quaternion_double</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga755beaa929c75751dee646cccba37e4c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_QUALIFIER qua&lt;T, Q&gt; glm::cross </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q2</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute a cross product. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga84865a56acb8fbd7bc4f5c0b928e3cfc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::dot </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ... </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab703732449be6c7199369b3f9a91ed38\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::length </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the norm of a quaternions. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabf30e3263fffe8dcc6659aea76ae8927\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::normalize </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the normalized quaternion. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00255.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_relational</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_relational<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes comparison functions for quaternion types that take a user defined epsilon values.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad7827af0549504ff1cd6a359786acc7a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad7827af0549504ff1cd6a359786acc7a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html#gad7827af0549504ff1cd6a359786acc7a\">equal</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gad7827af0549504ff1cd6a359786acc7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x == y.  <a href=\"a00255.html#gad7827af0549504ff1cd6a359786acc7a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7827af0549504ff1cd6a359786acc7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa001eecb91106463169a8e5ef1577b39\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa001eecb91106463169a8e5ef1577b39\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html#gaa001eecb91106463169a8e5ef1577b39\">equal</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:gaa001eecb91106463169a8e5ef1577b39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00255.html#gaa001eecb91106463169a8e5ef1577b39\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa001eecb91106463169a8e5ef1577b39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab441cee0de5867a868f3a586ee68cfe1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab441cee0de5867a868f3a586ee68cfe1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html#gab441cee0de5867a868f3a586ee68cfe1\">notEqual</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gab441cee0de5867a868f3a586ee68cfe1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x != y.  <a href=\"a00255.html#gab441cee0de5867a868f3a586ee68cfe1\">More...</a><br /></td></tr>\n<tr class=\"separator:gab441cee0de5867a868f3a586ee68cfe1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5117a44c1bf21af857cd23e44a96d313\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5117a44c1bf21af857cd23e44a96d313\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html#ga5117a44c1bf21af857cd23e44a96d313\">notEqual</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:ga5117a44c1bf21af857cd23e44a96d313\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00255.html#ga5117a44c1bf21af857cd23e44a96d313\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5117a44c1bf21af857cd23e44a96d313\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes comparison functions for quaternion types that take a user defined epsilon values. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00134.html\" title=\"GLM_EXT_quaternion_relational \">glm/ext/quaternion_relational.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_vector_relational </dd>\n<dd>\n<a class=\"el\" href=\"a00275.html\" title=\"Exposes comparison functions for vector types that take a user defined epsilon values. \">GLM_EXT_vector_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00246.html\" title=\"Exposes comparison functions for matrix types that take a user defined epsilon values. \">GLM_EXT_matrix_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00252.html\" title=\"Exposes single-precision floating point quaternion type. \">GLM_EXT_quaternion_float</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00249.html\" title=\"Exposes double-precision floating point quaternion type. \">GLM_EXT_quaternion_double</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gad7827af0549504ff1cd6a359786acc7a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x == y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa001eecb91106463169a8e5ef1577b39\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab441cee0de5867a868f3a586ee68cfe1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x != y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5117a44c1bf21af857cd23e44a96d313\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &gt;= epsilon. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00256.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_transform</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_transform<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides transformation functions for quaternion types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaab2d37ef7265819f1d2939b9dc2c52ac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaab2d37ef7265819f1d2939b9dc2c52ac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac\">exp</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gaab2d37ef7265819f1d2939b9dc2c52ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a exponential of a quaternion.  <a href=\"a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab2d37ef7265819f1d2939b9dc2c52ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa5f7b20e296671b16ce25a2ab7ad5473\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa5f7b20e296671b16ce25a2ab7ad5473\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473\">log</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:gaa5f7b20e296671b16ce25a2ab7ad5473\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a logarithm of a quaternion.  <a href=\"a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa5f7b20e296671b16ce25a2ab7ad5473\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4975ffcacd312a8c0bbd046a76c5607e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4975ffcacd312a8c0bbd046a76c5607e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e\">pow</a> (qua&lt; T, Q &gt; const &amp;q, T y)</td></tr>\n<tr class=\"memdesc:ga4975ffcacd312a8c0bbd046a76c5607e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a quaternion raised to a power.  <a href=\"a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4975ffcacd312a8c0bbd046a76c5607e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabfc57de6d4d2e11970f54119c5ccf0f5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabfc57de6d4d2e11970f54119c5ccf0f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5\">rotate</a> (qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:gabfc57de6d4d2e11970f54119c5ccf0f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotates a quaternion from a vector of 3 components axis and an angle.  <a href=\"a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5\">More...</a><br /></td></tr>\n<tr class=\"separator:gabfc57de6d4d2e11970f54119c5ccf0f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga64b7b255ed7bcba616fe6b44470b022e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga64b7b255ed7bcba616fe6b44470b022e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html#ga64b7b255ed7bcba616fe6b44470b022e\">sqrt</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga64b7b255ed7bcba616fe6b44470b022e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the square root of a quaternion.  <a href=\"a00256.html#ga64b7b255ed7bcba616fe6b44470b022e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga64b7b255ed7bcba616fe6b44470b022e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides transformation functions for quaternion types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00135.html\" title=\"GLM_EXT_quaternion_transform \">glm/ext/quaternion_transform.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00252.html\" title=\"Exposes single-precision floating point quaternion type. \">GLM_EXT_quaternion_float</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00249.html\" title=\"Exposes double-precision floating point quaternion type. \">GLM_EXT_quaternion_double</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00251.html\" title=\"Provides exponential functions for quaternion types. \">GLM_EXT_quaternion_exponential</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00257.html\" title=\"Provides trigonometric functions for quaternion types. \">GLM_EXT_quaternion_trigonometric</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaab2d37ef7265819f1d2939b9dc2c52ac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::exp </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a exponential of a quaternion. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa5f7b20e296671b16ce25a2ab7ad5473\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::log </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a logarithm of a quaternion. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4975ffcacd312a8c0bbd046a76c5607e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::pow </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a quaternion raised to a power. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabfc57de6d4d2e11970f54119c5ccf0f5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>axis</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotates a quaternion from a vector of 3 components axis and an angle. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">q</td><td>Source orientation </td></tr>\n    <tr><td class=\"paramname\">angle</td><td>Angle expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">axis</td><td>Axis of the rotation</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga64b7b255ed7bcba616fe6b44470b022e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::sqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the square root of a quaternion. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00257.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_quaternion_trigonometric</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_quaternion_trigonometric<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides trigonometric functions for quaternion types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8aa248b31d5ade470c87304df5eb7bd8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8aa248b31d5ade470c87304df5eb7bd8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">angle</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8aa248b31d5ade470c87304df5eb7bd8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the quaternion rotation angle.  <a href=\"a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8aa248b31d5ade470c87304df5eb7bd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c0095cfcb218c75a4b79d7687950036\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5c0095cfcb218c75a4b79d7687950036\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00257.html#ga5c0095cfcb218c75a4b79d7687950036\">angleAxis</a> (T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:ga5c0095cfcb218c75a4b79d7687950036\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a quaternion from an angle and a normalized axis.  <a href=\"a00257.html#ga5c0095cfcb218c75a4b79d7687950036\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c0095cfcb218c75a4b79d7687950036\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga764254f10248b505e936e5309a88c23d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga764254f10248b505e936e5309a88c23d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">axis</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga764254f10248b505e936e5309a88c23d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the q rotation axis.  <a href=\"a00257.html#ga764254f10248b505e936e5309a88c23d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga764254f10248b505e936e5309a88c23d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides trigonometric functions for quaternion types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00136.html\" title=\"GLM_EXT_quaternion_trigonometric \">glm/ext/quaternion_trigonometric.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00252.html\" title=\"Exposes single-precision floating point quaternion type. \">GLM_EXT_quaternion_float</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00249.html\" title=\"Exposes double-precision floating point quaternion type. \">GLM_EXT_quaternion_double</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00251.html\" title=\"Provides exponential functions for quaternion types. \">GLM_EXT_quaternion_exponential</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00254.html\" title=\"Provides geometric functions for quaternion types. \">GLM_EXT_quaternion_geometric</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00256.html\" title=\"Provides transformation functions for quaternion types. \">GLM_EXT_quaternion_transform</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga8aa248b31d5ade470c87304df5eb7bd8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::angle </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the quaternion rotation angle. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5c0095cfcb218c75a4b79d7687950036\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::angleAxis </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>axis</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a quaternion from an angle and a normalized axis. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">angle</td><td>Angle expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">axis</td><td>Axis of the quaternion, must be normalized.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga764254f10248b505e936e5309a88c23d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::axis </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the q rotation axis. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>A value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00258.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_scalar_common</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_scalar_common<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes min and max functions for 3 to 4 scalar parameters.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga36920478565cf608e93064283ce06421\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga36920478565cf608e93064283ce06421\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga36920478565cf608e93064283ce06421\">fmax</a> (T a, T b)</td></tr>\n<tr class=\"memdesc:ga36920478565cf608e93064283ce06421\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 2 inputs.  <a href=\"a00258.html#ga36920478565cf608e93064283ce06421\">More...</a><br /></td></tr>\n<tr class=\"separator:ga36920478565cf608e93064283ce06421\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0007bba71ca451ac70e99d28dfbeaab9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0007bba71ca451ac70e99d28dfbeaab9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga0007bba71ca451ac70e99d28dfbeaab9\">fmax</a> (T a, T b, T C)</td></tr>\n<tr class=\"memdesc:ga0007bba71ca451ac70e99d28dfbeaab9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 3 inputs.  <a href=\"a00258.html#ga0007bba71ca451ac70e99d28dfbeaab9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0007bba71ca451ac70e99d28dfbeaab9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27e260b1ff4d04c3ad4b864d26cbaf08\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga27e260b1ff4d04c3ad4b864d26cbaf08\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08\">fmax</a> (T a, T b, T C, T D)</td></tr>\n<tr class=\"memdesc:ga27e260b1ff4d04c3ad4b864d26cbaf08\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 4 inputs.  <a href=\"a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27e260b1ff4d04c3ad4b864d26cbaf08\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b2b438a765e2a62098c79eb212f28f0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7b2b438a765e2a62098c79eb212f28f0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga7b2b438a765e2a62098c79eb212f28f0\">fmin</a> (T a, T b)</td></tr>\n<tr class=\"memdesc:ga7b2b438a765e2a62098c79eb212f28f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 2 inputs.  <a href=\"a00258.html#ga7b2b438a765e2a62098c79eb212f28f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b2b438a765e2a62098c79eb212f28f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a95fe4cf5437e8133f1093fe9726a64\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga1a95fe4cf5437e8133f1093fe9726a64\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga1a95fe4cf5437e8133f1093fe9726a64\">fmin</a> (T a, T b, T c)</td></tr>\n<tr class=\"memdesc:ga1a95fe4cf5437e8133f1093fe9726a64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 3 inputs.  <a href=\"a00258.html#ga1a95fe4cf5437e8133f1093fe9726a64\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a95fe4cf5437e8133f1093fe9726a64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661\">fmin</a> (T a, T b, T c, T d)</td></tr>\n<tr class=\"memdesc:ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 4 inputs.  <a href=\"a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa20839d9ab14514f8966f69877ea0de8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa20839d9ab14514f8966f69877ea0de8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#gaa20839d9ab14514f8966f69877ea0de8\">max</a> (T a, T b, T c)</td></tr>\n<tr class=\"memdesc:gaa20839d9ab14514f8966f69877ea0de8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 3 inputs.  <a href=\"a00258.html#gaa20839d9ab14514f8966f69877ea0de8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa20839d9ab14514f8966f69877ea0de8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67\">max</a> (T a, T b, T c, T d)</td></tr>\n<tr class=\"memdesc:ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the maximum component-wise values of 4 inputs.  <a href=\"a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2274b5e75ed84b0b1e50d8d22f1f2f67\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga420b37cbd98c395b93dab0278305cd46\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga420b37cbd98c395b93dab0278305cd46\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga420b37cbd98c395b93dab0278305cd46\">min</a> (T a, T b, T c)</td></tr>\n<tr class=\"memdesc:ga420b37cbd98c395b93dab0278305cd46\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 3 inputs.  <a href=\"a00258.html#ga420b37cbd98c395b93dab0278305cd46\">More...</a><br /></td></tr>\n<tr class=\"separator:ga420b37cbd98c395b93dab0278305cd46\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0d24a9acb8178df77e4aff90cbb2010d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0d24a9acb8178df77e4aff90cbb2010d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d\">min</a> (T a, T b, T c, T d)</td></tr>\n<tr class=\"memdesc:ga0d24a9acb8178df77e4aff90cbb2010d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the minimum component-wise values of 4 inputs.  <a href=\"a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0d24a9acb8178df77e4aff90cbb2010d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes min and max functions for 3 to 4 scalar parameters. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00144.html\" title=\"GLM_EXT_scalar_common \">glm/ext/scalar_common.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00241.html\" title=\"Provides GLSL common functions. \">Common functions</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00267.html\" title=\"Exposes min and max functions for 3 to 4 vector parameters. \">GLM_EXT_vector_common</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga36920478565cf608e93064283ce06421\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fmax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the maximum component-wise values of 2 inputs. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0007bba71ca451ac70e99d28dfbeaab9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fmax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>C</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the maximum component-wise values of 3 inputs. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga27e260b1ff4d04c3ad4b864d26cbaf08\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fmax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>C</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>D</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the maximum component-wise values of 4 inputs. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7b2b438a765e2a62098c79eb212f28f0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fmin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the minimum component-wise values of 2 inputs. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1a95fe4cf5437e8133f1093fe9726a64\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fmin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the minimum component-wise values of 3 inputs. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3d6f9c6c16bfd6f38f2c4f8076e8b661\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fmin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the minimum component-wise values of 4 inputs. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa20839d9ab14514f8966f69877ea0de8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the maximum component-wise values of 3 inputs. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2274b5e75ed84b0b1e50d8d22f1f2f67\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the maximum component-wise values of 4 inputs. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga420b37cbd98c395b93dab0278305cd46\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the minimum component-wise values of 3 inputs. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0d24a9acb8178df77e4aff90cbb2010d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the minimum component-wise values of 4 inputs. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>A floating-point scalar type. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00259.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_scalar_constants</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_scalar_constants<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides a list of constants and precomputed useful values.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2a1e57fc5592b69cfae84174cbfc9429\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga2a1e57fc5592b69cfae84174cbfc9429\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2a1e57fc5592b69cfae84174cbfc9429\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429\">epsilon</a> ()</td></tr>\n<tr class=\"memdesc:ga2a1e57fc5592b69cfae84174cbfc9429\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the epsilon constant for floating point types. <br /></td></tr>\n<tr class=\"separator:ga2a1e57fc5592b69cfae84174cbfc9429\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94bafeb2a0f23ab6450fed1f98ee4e45\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga94bafeb2a0f23ab6450fed1f98ee4e45\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga94bafeb2a0f23ab6450fed1f98ee4e45\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00259.html#ga94bafeb2a0f23ab6450fed1f98ee4e45\">pi</a> ()</td></tr>\n<tr class=\"memdesc:ga94bafeb2a0f23ab6450fed1f98ee4e45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the pi constant for floating point types. <br /></td></tr>\n<tr class=\"separator:ga94bafeb2a0f23ab6450fed1f98ee4e45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides a list of constants and precomputed useful values. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00145.html\" title=\"GLM_EXT_scalar_constants \">glm/ext/scalar_constants.hpp</a>&gt; to use the features of this extension. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00260.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_scalar_int_sized</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_scalar_int_sized<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes sized signed integer scalar types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga259fa4834387bd68627ddf37bb3ebdb9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga259fa4834387bd68627ddf37bb3ebdb9\"></a>\ntypedef detail::int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a></td></tr>\n<tr class=\"memdesc:ga259fa4834387bd68627ddf37bb3ebdb9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit signed integer type. <br /></td></tr>\n<tr class=\"separator:ga259fa4834387bd68627ddf37bb3ebdb9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43d43196463bde49cb067f5c20ab8481\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga43d43196463bde49cb067f5c20ab8481\"></a>\ntypedef detail::int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a></td></tr>\n<tr class=\"memdesc:ga43d43196463bde49cb067f5c20ab8481\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer type. <br /></td></tr>\n<tr class=\"separator:ga43d43196463bde49cb067f5c20ab8481\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaff5189f97f9e842d9636a0f240001b2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaff5189f97f9e842d9636a0f240001b2e\"></a>\ntypedef detail::int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a></td></tr>\n<tr class=\"memdesc:gaff5189f97f9e842d9636a0f240001b2e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit signed integer type. <br /></td></tr>\n<tr class=\"separator:gaff5189f97f9e842d9636a0f240001b2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b956fe1df85f3c132b21edb4e116458\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1b956fe1df85f3c132b21edb4e116458\"></a>\ntypedef detail::int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a></td></tr>\n<tr class=\"memdesc:ga1b956fe1df85f3c132b21edb4e116458\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit signed integer type. <br /></td></tr>\n<tr class=\"separator:ga1b956fe1df85f3c132b21edb4e116458\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes sized signed integer scalar types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00146.html\" title=\"GLM_EXT_scalar_int_sized \">glm/ext/scalar_int_sized.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00263.html\" title=\"Exposes sized unsigned integer scalar types. \">GLM_EXT_scalar_uint_sized</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00261.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_scalar_integer</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_scalar_integer<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00147.html\" title=\"GLM_EXT_scalar_integer \">glm/ext/scalar_integer.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2777901e41ad6e1e9d0ad6cc855d1075\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga2777901e41ad6e1e9d0ad6cc855d1075\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075\">findNSB</a> (genIUType x, int significantBitCount)</td></tr>\n<tr class=\"memdesc:ga2777901e41ad6e1e9d0ad6cc855d1075\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the Nth significant bit set to 1 in the binary representation of value.  <a href=\"a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2777901e41ad6e1e9d0ad6cc855d1075\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec593d33956a8fe43f78fccc63ddde9a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gaec593d33956a8fe43f78fccc63ddde9a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gaec593d33956a8fe43f78fccc63ddde9a\">isMultiple</a> (genIUType v, genIUType Multiple)</td></tr>\n<tr class=\"memdesc:gaec593d33956a8fe43f78fccc63ddde9a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the 'Value' is a multiple of 'Multiple'.  <a href=\"a00261.html#gaec593d33956a8fe43f78fccc63ddde9a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec593d33956a8fe43f78fccc63ddde9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadf491730354aa7da67fbe23d4d688763\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gadf491730354aa7da67fbe23d4d688763\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gadf491730354aa7da67fbe23d4d688763\">isPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:gadf491730354aa7da67fbe23d4d688763\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the value is a power of two number.  <a href=\"a00261.html#gadf491730354aa7da67fbe23d4d688763\">More...</a><br /></td></tr>\n<tr class=\"separator:gadf491730354aa7da67fbe23d4d688763\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab770a3835c44c8a6fd225be4f4e6b317\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gab770a3835c44c8a6fd225be4f4e6b317\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gab770a3835c44c8a6fd225be4f4e6b317\">nextMultiple</a> (genIUType v, genIUType Multiple)</td></tr>\n<tr class=\"memdesc:gab770a3835c44c8a6fd225be4f4e6b317\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00261.html#gab770a3835c44c8a6fd225be4f4e6b317\">More...</a><br /></td></tr>\n<tr class=\"separator:gab770a3835c44c8a6fd225be4f4e6b317\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a37c2f2fd347886c9af6a3ca3db04dc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga3a37c2f2fd347886c9af6a3ca3db04dc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc\">nextPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:ga3a37c2f2fd347886c9af6a3ca3db04dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value, round up to a power of two.  <a href=\"a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a37c2f2fd347886c9af6a3ca3db04dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada3bdd871ffe31f2d484aa668362f636\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gada3bdd871ffe31f2d484aa668362f636\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gada3bdd871ffe31f2d484aa668362f636\">prevMultiple</a> (genIUType v, genIUType Multiple)</td></tr>\n<tr class=\"memdesc:gada3bdd871ffe31f2d484aa668362f636\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00261.html#gada3bdd871ffe31f2d484aa668362f636\">More...</a><br /></td></tr>\n<tr class=\"separator:gada3bdd871ffe31f2d484aa668362f636\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab21902a0e7e5a8451a7ad80333618727\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gab21902a0e7e5a8451a7ad80333618727\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html#gab21902a0e7e5a8451a7ad80333618727\">prevPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:gab21902a0e7e5a8451a7ad80333618727\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value, round down to a power of two.  <a href=\"a00261.html#gab21902a0e7e5a8451a7ad80333618727\">More...</a><br /></td></tr>\n<tr class=\"separator:gab21902a0e7e5a8451a7ad80333618727\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00147.html\" title=\"GLM_EXT_scalar_integer \">glm/ext/scalar_integer.hpp</a>&gt; to use the features of this extension. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga2777901e41ad6e1e9d0ad6cc855d1075\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::findNSB </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>significantBitCount</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the bit number of the Nth significant bit set to 1 in the binary representation of value. </p>\n<p>If value bitcount is less than the Nth significant bit, -1 will be returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genIUType</td><td>Signed or unsigned integer scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00261.html\" title=\"Include <glm/ext/scalar_integer.hpp> to use the features of this extension. \">GLM_EXT_scalar_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaec593d33956a8fe43f78fccc63ddde9a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return true if the 'Value' is a multiple of 'Multiple'. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00261.html\" title=\"Include <glm/ext/scalar_integer.hpp> to use the features of this extension. \">GLM_EXT_scalar_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadf491730354aa7da67fbe23d4d688763\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return true if the value is a power of two number. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00261.html\" title=\"Include <glm/ext/scalar_integer.hpp> to use the features of this extension. \">GLM_EXT_scalar_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab770a3835c44c8a6fd225be4f4e6b317\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::nextMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Higher multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genIUType</td><td>Integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source value to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00261.html\" title=\"Include <glm/ext/scalar_integer.hpp> to use the features of this extension. \">GLM_EXT_scalar_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3a37c2f2fd347886c9af6a3ca3db04dc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::nextPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just higher the input value, round up to a power of two. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00261.html\" title=\"Include <glm/ext/scalar_integer.hpp> to use the features of this extension. \">GLM_EXT_scalar_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gada3bdd871ffe31f2d484aa668362f636\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::prevMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Lower multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genIUType</td><td>Integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source value to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00261.html\" title=\"Include <glm/ext/scalar_integer.hpp> to use the features of this extension. \">GLM_EXT_scalar_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab21902a0e7e5a8451a7ad80333618727\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::prevPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just lower the input value, round down to a power of two. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00261.html\" title=\"Include <glm/ext/scalar_integer.hpp> to use the features of this extension. \">GLM_EXT_scalar_integer</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00262.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_scalar_relational</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_scalar_relational<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes comparison functions for scalar types that take a user defined epsilon values.  \n<a href=\"#details\">More...</a></p>\n<p>Exposes comparison functions for scalar types that take a user defined epsilon values. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00149.html\" title=\"GLM_EXT_scalar_relational \">glm/ext/scalar_relational.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_vector_relational </dd>\n<dd>\n<a class=\"el\" href=\"a00275.html\" title=\"Exposes comparison functions for vector types that take a user defined epsilon values. \">GLM_EXT_vector_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00246.html\" title=\"Exposes comparison functions for matrix types that take a user defined epsilon values. \">GLM_EXT_matrix_relational</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00263.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_scalar_uint_sized</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_scalar_uint_sized<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes sized unsigned integer scalar types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"></a>\ntypedef detail::uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a></td></tr>\n<tr class=\"memdesc:ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit unsigned integer type. <br /></td></tr>\n<tr class=\"separator:ga05f6b0ae8f6a6e135b0e290c25fe0e4e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1134b580f8da4de94ca6b1de4d37975e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1134b580f8da4de94ca6b1de4d37975e\"></a>\ntypedef detail::uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a></td></tr>\n<tr class=\"memdesc:ga1134b580f8da4de94ca6b1de4d37975e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit unsigned integer type. <br /></td></tr>\n<tr class=\"separator:ga1134b580f8da4de94ca6b1de4d37975e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab630f76c26b50298187f7889104d4b9c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab630f76c26b50298187f7889104d4b9c\"></a>\ntypedef detail::uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a></td></tr>\n<tr class=\"memdesc:gab630f76c26b50298187f7889104d4b9c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit unsigned integer type. <br /></td></tr>\n<tr class=\"separator:gab630f76c26b50298187f7889104d4b9c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadde6aaee8457bee49c2a92621fe22b79\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadde6aaee8457bee49c2a92621fe22b79\"></a>\ntypedef detail::uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a></td></tr>\n<tr class=\"memdesc:gadde6aaee8457bee49c2a92621fe22b79\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit unsigned integer type. <br /></td></tr>\n<tr class=\"separator:gadde6aaee8457bee49c2a92621fe22b79\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes sized unsigned integer scalar types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00151.html\" title=\"GLM_EXT_scalar_uint_sized \">glm/ext/scalar_uint_sized.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00260.html\" title=\"Exposes sized signed integer scalar types. \">GLM_EXT_scalar_int_sized</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00264.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_scalar_ulp</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_scalar_ulp<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Allow the measurement of the accuracy of a function against a reference implementation.  \n<a href=\"#details\">More...</a></p>\n<p>Allow the measurement of the accuracy of a function against a reference implementation. </p>\n<p>This extension works on floating-point data and provide results in ULP.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00152.html\" title=\"GLM_EXT_scalar_ulp \">glm/ext/scalar_ulp.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00278.html\" title=\"Allow the measurement of the accuracy of a function against a reference implementation. \">GLM_EXT_vector_ulp</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00262.html\" title=\"Exposes comparison functions for scalar types that take a user defined epsilon values. \">GLM_EXT_scalar_relational</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00265.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_bool1</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_bool1<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes bvec1 vector type.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga067af382616d93f8e850baae5154cdcc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga067af382616d93f8e850baae5154cdcc\"></a>\ntypedef vec&lt; 1, bool, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00265.html#ga067af382616d93f8e850baae5154cdcc\">bvec1</a></td></tr>\n<tr class=\"memdesc:ga067af382616d93f8e850baae5154cdcc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 components vector of boolean. <br /></td></tr>\n<tr class=\"separator:ga067af382616d93f8e850baae5154cdcc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes bvec1 vector type. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00189.html\" title=\"GLM_EXT_vector_bool1 \">glm/ext/vector_bool1.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00266.html\" title=\"Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types. \">GLM_EXT_vector_bool1_precision</a> extension. </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00266.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_bool1_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_bool1_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gae8a1e14abae1387274f57741750c06a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae8a1e14abae1387274f57741750c06a2\"></a>\ntypedef vec&lt; 1, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00266.html#gae8a1e14abae1387274f57741750c06a2\">highp_bvec1</a></td></tr>\n<tr class=\"memdesc:gae8a1e14abae1387274f57741750c06a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of bool values. <br /></td></tr>\n<tr class=\"separator:gae8a1e14abae1387274f57741750c06a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24a3d364e2ddd444f5b9e7975bbef8f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga24a3d364e2ddd444f5b9e7975bbef8f9\"></a>\ntypedef vec&lt; 1, bool, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9\">lowp_bvec1</a></td></tr>\n<tr class=\"memdesc:ga24a3d364e2ddd444f5b9e7975bbef8f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of bool values. <br /></td></tr>\n<tr class=\"separator:ga24a3d364e2ddd444f5b9e7975bbef8f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b4ccb989ba179fa44f7b0879c782621\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7b4ccb989ba179fa44f7b0879c782621\"></a>\ntypedef vec&lt; 1, bool, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00266.html#ga7b4ccb989ba179fa44f7b0879c782621\">mediump_bvec1</a></td></tr>\n<tr class=\"memdesc:ga7b4ccb989ba179fa44f7b0879c782621\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of bool values. <br /></td></tr>\n<tr class=\"separator:ga7b4ccb989ba179fa44f7b0879c782621\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00190.html\" title=\"GLM_EXT_vector_bool1_precision \">glm/ext/vector_bool1_precision.hpp</a>&gt; to use the features of this extension. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00267.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_common</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_common<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes min and max functions for 3 to 4 vector parameters.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad66b6441f7200db16c9f341711733c56\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad66b6441f7200db16c9f341711733c56\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#gad66b6441f7200db16c9f341711733c56\">fmax</a> (vec&lt; L, T, Q &gt; const &amp;a, T b)</td></tr>\n<tr class=\"memdesc:gad66b6441f7200db16c9f341711733c56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00267.html#gad66b6441f7200db16c9f341711733c56\">More...</a><br /></td></tr>\n<tr class=\"separator:gad66b6441f7200db16c9f341711733c56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8df4be3f48d6717c40ea788fd30deebf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8df4be3f48d6717c40ea788fd30deebf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga8df4be3f48d6717c40ea788fd30deebf\">fmax</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga8df4be3f48d6717c40ea788fd30deebf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00267.html#ga8df4be3f48d6717c40ea788fd30deebf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8df4be3f48d6717c40ea788fd30deebf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0f04ba924294dae4234ca93ede23229a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0f04ba924294dae4234ca93ede23229a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga0f04ba924294dae4234ca93ede23229a\">fmax</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:ga0f04ba924294dae4234ca93ede23229a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00267.html#ga0f04ba924294dae4234ca93ede23229a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0f04ba924294dae4234ca93ede23229a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">fmax</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4ed3eb250ccbe17bfe8ded8a6b72d230\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae989203363cff9eab5093630df4fe071\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae989203363cff9eab5093630df4fe071\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#gae989203363cff9eab5093630df4fe071\">fmin</a> (vec&lt; L, T, Q &gt; const &amp;x, T y)</td></tr>\n<tr class=\"memdesc:gae989203363cff9eab5093630df4fe071\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00267.html#gae989203363cff9eab5093630df4fe071\">More...</a><br /></td></tr>\n<tr class=\"separator:gae989203363cff9eab5093630df4fe071\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c42e93cd778c9181d1cdeea4d3e43bd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7c42e93cd778c9181d1cdeea4d3e43bd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga7c42e93cd778c9181d1cdeea4d3e43bd\">fmin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga7c42e93cd778c9181d1cdeea4d3e43bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00267.html#ga7c42e93cd778c9181d1cdeea4d3e43bd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c42e93cd778c9181d1cdeea4d3e43bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7e62739055b49189d9355471f78fe000\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7e62739055b49189d9355471f78fe000\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga7e62739055b49189d9355471f78fe000\">fmin</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:ga7e62739055b49189d9355471f78fe000\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00267.html#ga7e62739055b49189d9355471f78fe000\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7e62739055b49189d9355471f78fe000\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a543dd7d22ad1f3b8b839f808a9d93c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4a543dd7d22ad1f3b8b839f808a9d93c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">fmin</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga4a543dd7d22ad1f3b8b839f808a9d93c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a543dd7d22ad1f3b8b839f808a9d93c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa45d34f6a2906f8bf58ab2ba5429234d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa45d34f6a2906f8bf58ab2ba5429234d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#gaa45d34f6a2906f8bf58ab2ba5429234d\">max</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z)</td></tr>\n<tr class=\"memdesc:gaa45d34f6a2906f8bf58ab2ba5429234d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 3 inputs.  <a href=\"a00267.html#gaa45d34f6a2906f8bf58ab2ba5429234d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa45d34f6a2906f8bf58ab2ba5429234d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10\">max</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, T, Q &gt; const &amp;w)</td></tr>\n<tr class=\"memdesc:ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 4 inputs.  <a href=\"a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94d42b8da2b4ded5ddf7504fbdc6bf10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3cd83d80fd4f433d8e333593ec56dddf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3cd83d80fd4f433d8e333593ec56dddf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#ga3cd83d80fd4f433d8e333593ec56dddf\">min</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:ga3cd83d80fd4f433d8e333593ec56dddf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 3 inputs.  <a href=\"a00267.html#ga3cd83d80fd4f433d8e333593ec56dddf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3cd83d80fd4f433d8e333593ec56dddf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab66920ed064ab518d6859c5a889c4be4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab66920ed064ab518d6859c5a889c4be4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html#gab66920ed064ab518d6859c5a889c4be4\">min</a> (vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:gab66920ed064ab518d6859c5a889c4be4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 4 inputs.  <a href=\"a00267.html#gab66920ed064ab518d6859c5a889c4be4\">More...</a><br /></td></tr>\n<tr class=\"separator:gab66920ed064ab518d6859c5a889c4be4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes min and max functions for 3 to 4 vector parameters. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00197.html\" title=\"GLM_EXT_vector_common \">glm/ext/vector_common.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_common </dd>\n<dd>\n<a class=\"el\" href=\"a00258.html\" title=\"Exposes min and max functions for 3 to 4 scalar parameters. \">GLM_EXT_scalar_common</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gad66b6441f7200db16c9f341711733c56\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if x &lt; y; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8df4be3f48d6717c40ea788fd30deebf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if x &lt; y; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0f04ba924294dae4234ca93ede23229a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if x &lt; y; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4ed3eb250ccbe17bfe8ded8a6b72d230\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if x &lt; y; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae989203363cff9eab5093630df4fe071\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if y &lt; x; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7c42e93cd778c9181d1cdeea4d3e43bd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if y &lt; x; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7e62739055b49189d9355471f78fe000\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if y &lt; x; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4a543dd7d22ad1f3b8b839f808a9d93c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if y &lt; x; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa45d34f6a2906f8bf58ab2ba5429234d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the maximum component-wise values of 3 inputs. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga94d42b8da2b4ded5ddf7504fbdc6bf10\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the maximum component-wise values of 4 inputs. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3cd83d80fd4f433d8e333593ec56dddf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the minimum component-wise values of 3 inputs. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab66920ed064ab518d6859c5a889c4be4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the minimum component-wise values of 4 inputs. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00268.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_double1</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_double1<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes double-precision floating point vector type with one component.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga6221af17edc2d4477a4583d2cd53e569\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6221af17edc2d4477a4583d2cd53e569\"></a>\ntypedef vec&lt; 1, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">dvec1</a></td></tr>\n<tr class=\"memdesc:ga6221af17edc2d4477a4583d2cd53e569\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 components vector of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga6221af17edc2d4477a4583d2cd53e569\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes double-precision floating point vector type with one component. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00198.html\" title=\"GLM_EXT_vector_double1 \">glm/ext/vector_double1.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00269.html\" title=\"Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types. \">GLM_EXT_vector_double1_precision</a> extension. </dd>\n<dd>\n<a class=\"el\" href=\"a00270.html\" title=\"Exposes single-precision floating point vector type with one component. \">GLM_EXT_vector_float1</a> extension. </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00269.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_double1_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_double1_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga77c22c4426da3a6865c88d3fc907e3fe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga77c22c4426da3a6865c88d3fc907e3fe\"></a>\ntypedef vec&lt; 1, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe\">highp_dvec1</a></td></tr>\n<tr class=\"memdesc:ga77c22c4426da3a6865c88d3fc907e3fe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga77c22c4426da3a6865c88d3fc907e3fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf906eb86b6e96c35138d0e4928e1435a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf906eb86b6e96c35138d0e4928e1435a\"></a>\ntypedef vec&lt; 1, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00269.html#gaf906eb86b6e96c35138d0e4928e1435a\">lowp_dvec1</a></td></tr>\n<tr class=\"memdesc:gaf906eb86b6e96c35138d0e4928e1435a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf906eb86b6e96c35138d0e4928e1435a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga79a789ebb176b37a45848f7ccdd3b3dd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga79a789ebb176b37a45848f7ccdd3b3dd\"></a>\ntypedef vec&lt; 1, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd\">mediump_dvec1</a></td></tr>\n<tr class=\"memdesc:ga79a789ebb176b37a45848f7ccdd3b3dd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga79a789ebb176b37a45848f7ccdd3b3dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00199.html\" title=\"GLM_EXT_vector_double1_precision \">glm/ext/vector_double1_precision.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00268.html\" title=\"Exposes double-precision floating point vector type with one component. \">GLM_EXT_vector_double1</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00270.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_float1</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_float1<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes single-precision floating point vector type with one component.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gadfc071d934d8dae7955a1d530a3cf656\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadfc071d934d8dae7955a1d530a3cf656\"></a>\ntypedef vec&lt; 1, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">vec1</a></td></tr>\n<tr class=\"memdesc:gadfc071d934d8dae7955a1d530a3cf656\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 components vector of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadfc071d934d8dae7955a1d530a3cf656\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes single-precision floating point vector type with one component. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00206.html\" title=\"GLM_EXT_vector_float1 \">glm/ext/vector_float1.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00271.html\" title=\"Exposes highp_vec1, mediump_vec1 and lowp_vec1 types. \">GLM_EXT_vector_float1_precision</a> extension. </dd>\n<dd>\n<a class=\"el\" href=\"a00268.html\" title=\"Exposes double-precision floating point vector type with one component. \">GLM_EXT_vector_double1</a> extension. </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00271.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_float1_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_float1_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes highp_vec1, mediump_vec1 and lowp_vec1 types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga9e8ed21862a897c156c0b2abca70b1e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9e8ed21862a897c156c0b2abca70b1e9\"></a>\ntypedef vec&lt; 1, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9\">highp_vec1</a></td></tr>\n<tr class=\"memdesc:ga9e8ed21862a897c156c0b2abca70b1e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9e8ed21862a897c156c0b2abca70b1e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0a57630f03031706b1d26a7d70d9184c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0a57630f03031706b1d26a7d70d9184c\"></a>\ntypedef vec&lt; 1, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga0a57630f03031706b1d26a7d70d9184c\">lowp_vec1</a></td></tr>\n<tr class=\"memdesc:ga0a57630f03031706b1d26a7d70d9184c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0a57630f03031706b1d26a7d70d9184c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga645f53e6b8056609023a894b4e2beef4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga645f53e6b8056609023a894b4e2beef4\"></a>\ntypedef vec&lt; 1, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html#ga645f53e6b8056609023a894b4e2beef4\">mediump_vec1</a></td></tr>\n<tr class=\"memdesc:ga645f53e6b8056609023a894b4e2beef4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga645f53e6b8056609023a894b4e2beef4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes highp_vec1, mediump_vec1 and lowp_vec1 types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00207.html\" title=\"GLM_EXT_vector_float1_precision \">glm/ext/vector_float1_precision.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00270.html\" title=\"Exposes single-precision floating point vector type with one component. \">GLM_EXT_vector_float1</a> extension. </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00272.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_int1</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_int1<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes ivec1 vector type.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaedd0562c2e77714929d7723a7e2e0dba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaedd0562c2e77714929d7723a7e2e0dba\"></a>\ntypedef vec&lt; 1, int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">ivec1</a></td></tr>\n<tr class=\"memdesc:gaedd0562c2e77714929d7723a7e2e0dba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaedd0562c2e77714929d7723a7e2e0dba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes ivec1 vector type. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00214.html\" title=\"GLM_EXT_vector_int1 \">glm/ext/vector_int1.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00276.html\" title=\"Exposes uvec1 vector type. \">GLM_EXT_vector_uint1</a> extension. </dd>\n<dd>\n<a class=\"el\" href=\"a00273.html\" title=\"Exposes highp_ivec1, mediump_ivec1 and lowp_ivec1 types. \">GLM_EXT_vector_int1_precision</a> extension. </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00273.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_int1_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_int1_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes highp_ivec1, mediump_ivec1 and lowp_ivec1 types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga7e02566f2bd2caa68e61be45a477c77e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7e02566f2bd2caa68e61be45a477c77e\"></a>\ntypedef vec&lt; 1, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga7e02566f2bd2caa68e61be45a477c77e\">highp_ivec1</a></td></tr>\n<tr class=\"memdesc:ga7e02566f2bd2caa68e61be45a477c77e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of signed integer values. <br /></td></tr>\n<tr class=\"separator:ga7e02566f2bd2caa68e61be45a477c77e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga836dbb1dc516c233b7f5fe9763bc15dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga836dbb1dc516c233b7f5fe9763bc15dc\"></a>\ntypedef vec&lt; 1, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc\">lowp_ivec1</a></td></tr>\n<tr class=\"memdesc:ga836dbb1dc516c233b7f5fe9763bc15dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of signed integer values. <br /></td></tr>\n<tr class=\"separator:ga836dbb1dc516c233b7f5fe9763bc15dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad628c608970b3d0aa6cfb63ce6e53e56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad628c608970b3d0aa6cfb63ce6e53e56\"></a>\ntypedef vec&lt; 1, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56\">mediump_ivec1</a></td></tr>\n<tr class=\"memdesc:gad628c608970b3d0aa6cfb63ce6e53e56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of signed integer values. <br /></td></tr>\n<tr class=\"separator:gad628c608970b3d0aa6cfb63ce6e53e56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes highp_ivec1, mediump_ivec1 and lowp_ivec1 types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00215.html\" title=\"GLM_EXT_vector_int1_precision \">glm/ext/vector_int1_precision.hpp</a>&gt; to use the features of this extension. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00274.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_integer</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_integer<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00222.html\" title=\"GLM_EXT_vector_integer \">glm/ext/vector_integer.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaff61eca266da315002a3db92ff0dd604\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaff61eca266da315002a3db92ff0dd604\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gaff61eca266da315002a3db92ff0dd604\">findNSB</a> (vec&lt; L, T, Q &gt; const &amp;Source, vec&lt; L, int, Q &gt; SignificantBitCount)</td></tr>\n<tr class=\"memdesc:gaff61eca266da315002a3db92ff0dd604\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the Nth significant bit set to 1 in the binary representation of value.  <a href=\"a00274.html#gaff61eca266da315002a3db92ff0dd604\">More...</a><br /></td></tr>\n<tr class=\"separator:gaff61eca266da315002a3db92ff0dd604\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga354caf634ef333d9cb4844407416256a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga354caf634ef333d9cb4844407416256a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga354caf634ef333d9cb4844407416256a\">isMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, T Multiple)</td></tr>\n<tr class=\"memdesc:ga354caf634ef333d9cb4844407416256a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the 'Value' is a multiple of 'Multiple'.  <a href=\"a00274.html#ga354caf634ef333d9cb4844407416256a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga354caf634ef333d9cb4844407416256a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabb4360e38c0943d8981ba965dead519d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabb4360e38c0943d8981ba965dead519d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gabb4360e38c0943d8981ba965dead519d\">isMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:gabb4360e38c0943d8981ba965dead519d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the 'Value' is a multiple of 'Multiple'.  <a href=\"a00274.html#gabb4360e38c0943d8981ba965dead519d\">More...</a><br /></td></tr>\n<tr class=\"separator:gabb4360e38c0943d8981ba965dead519d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf2b61ded7049bcb13e25164f832a290\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabf2b61ded7049bcb13e25164f832a290\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gabf2b61ded7049bcb13e25164f832a290\">isPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gabf2b61ded7049bcb13e25164f832a290\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return true if the value is a power of two number.  <a href=\"a00274.html#gabf2b61ded7049bcb13e25164f832a290\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf2b61ded7049bcb13e25164f832a290\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace38d00601cbf49cd4dc03f003ab42b7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gace38d00601cbf49cd4dc03f003ab42b7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gace38d00601cbf49cd4dc03f003ab42b7\">nextMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, T Multiple)</td></tr>\n<tr class=\"memdesc:gace38d00601cbf49cd4dc03f003ab42b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00274.html#gace38d00601cbf49cd4dc03f003ab42b7\">More...</a><br /></td></tr>\n<tr class=\"separator:gace38d00601cbf49cd4dc03f003ab42b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacda365edad320c7aff19cc283a3b8ca2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacda365edad320c7aff19cc283a3b8ca2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gacda365edad320c7aff19cc283a3b8ca2\">nextMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:gacda365edad320c7aff19cc283a3b8ca2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00274.html#gacda365edad320c7aff19cc283a3b8ca2\">More...</a><br /></td></tr>\n<tr class=\"separator:gacda365edad320c7aff19cc283a3b8ca2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabba67f8aac9915e10fca727277274502\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabba67f8aac9915e10fca727277274502\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#gabba67f8aac9915e10fca727277274502\">nextPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gabba67f8aac9915e10fca727277274502\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value, round up to a power of two.  <a href=\"a00274.html#gabba67f8aac9915e10fca727277274502\">More...</a><br /></td></tr>\n<tr class=\"separator:gabba67f8aac9915e10fca727277274502\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b3915a7cd3d50ff4976ab7a75a6880a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7b3915a7cd3d50ff4976ab7a75a6880a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga7b3915a7cd3d50ff4976ab7a75a6880a\">prevMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, T Multiple)</td></tr>\n<tr class=\"memdesc:ga7b3915a7cd3d50ff4976ab7a75a6880a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00274.html#ga7b3915a7cd3d50ff4976ab7a75a6880a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b3915a7cd3d50ff4976ab7a75a6880a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga51e04379e8aebbf83e2e5ab094578ee9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga51e04379e8aebbf83e2e5ab094578ee9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9\">prevMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:ga51e04379e8aebbf83e2e5ab094578ee9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga51e04379e8aebbf83e2e5ab094578ee9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga759db73f14d79f63612bd2398b577e7a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga759db73f14d79f63612bd2398b577e7a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html#ga759db73f14d79f63612bd2398b577e7a\">prevPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga759db73f14d79f63612bd2398b577e7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value, round down to a power of two.  <a href=\"a00274.html#ga759db73f14d79f63612bd2398b577e7a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga759db73f14d79f63612bd2398b577e7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00222.html\" title=\"GLM_EXT_vector_integer \">glm/ext/vector_integer.hpp</a>&gt; to use the features of this extension. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaff61eca266da315002a3db92ff0dd604\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, int, Q&gt; glm::findNSB </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Source</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, int, Q &gt;&#160;</td>\n          <td class=\"paramname\"><em>SignificantBitCount</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the bit number of the Nth significant bit set to 1 in the binary representation of value. </p>\n<p>If value bitcount is less than the Nth significant bit, -1 will be returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga354caf634ef333d9cb4844407416256a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::isMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return true if the 'Value' is a multiple of 'Multiple'. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabb4360e38c0943d8981ba965dead519d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::isMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return true if the 'Value' is a multiple of 'Multiple'. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabf2b61ded7049bcb13e25164f832a290\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::isPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return true if the value is a power of two number. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gace38d00601cbf49cd4dc03f003ab42b7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::nextMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Higher multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source values to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacda365edad320c7aff19cc283a3b8ca2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::nextMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Higher multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source values to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabba67f8aac9915e10fca727277274502\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::nextPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just higher the input value, round up to a power of two. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7b3915a7cd3d50ff4976ab7a75a6880a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::prevMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Lower multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source values to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga51e04379e8aebbf83e2e5ab094578ee9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::prevMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Lower multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source values to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga759db73f14d79f63612bd2398b577e7a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::prevPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just lower the input value, round down to a power of two. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types. </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00274.html\" title=\"Include <glm/ext/vector_integer.hpp> to use the features of this extension. \">GLM_EXT_vector_integer</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00275.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_relational</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_relational<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes comparison functions for vector types that take a user defined epsilon values.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2ac7651a2fa7354f2da610dbd50d28e2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2ac7651a2fa7354f2da610dbd50d28e2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga2ac7651a2fa7354f2da610dbd50d28e2\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:ga2ac7651a2fa7354f2da610dbd50d28e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00275.html#ga2ac7651a2fa7354f2da610dbd50d28e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ac7651a2fa7354f2da610dbd50d28e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga37d261a65f69babc82cec2ae1af7145f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga37d261a65f69babc82cec2ae1af7145f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga37d261a65f69babc82cec2ae1af7145f\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga37d261a65f69babc82cec2ae1af7145f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00275.html#ga37d261a65f69babc82cec2ae1af7145f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga37d261a65f69babc82cec2ae1af7145f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b46cb50911e97b32f4cd743c2c69771\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2b46cb50911e97b32f4cd743c2c69771\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga2b46cb50911e97b32f4cd743c2c69771\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:ga2b46cb50911e97b32f4cd743c2c69771\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00275.html#ga2b46cb50911e97b32f4cd743c2c69771\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b46cb50911e97b32f4cd743c2c69771\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7da2b8605be7f245b39cb6fbf6d9d581\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7da2b8605be7f245b39cb6fbf6d9d581\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:ga7da2b8605be7f245b39cb6fbf6d9d581\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7da2b8605be7f245b39cb6fbf6d9d581\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a99cc41341567567a608719449c1fac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4a99cc41341567567a608719449c1fac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga4a99cc41341567567a608719449c1fac\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T epsilon)</td></tr>\n<tr class=\"memdesc:ga4a99cc41341567567a608719449c1fac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00275.html#ga4a99cc41341567567a608719449c1fac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a99cc41341567567a608719449c1fac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga417cf51304359db18e819dda9bce5767\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga417cf51304359db18e819dda9bce5767\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga417cf51304359db18e819dda9bce5767\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga417cf51304359db18e819dda9bce5767\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00275.html#ga417cf51304359db18e819dda9bce5767\">More...</a><br /></td></tr>\n<tr class=\"separator:ga417cf51304359db18e819dda9bce5767\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b5c2c3f83422ae5b71fa960d03b0339\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8b5c2c3f83422ae5b71fa960d03b0339\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga8b5c2c3f83422ae5b71fa960d03b0339\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, int ULPs)</td></tr>\n<tr class=\"memdesc:ga8b5c2c3f83422ae5b71fa960d03b0339\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00275.html#ga8b5c2c3f83422ae5b71fa960d03b0339\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b5c2c3f83422ae5b71fa960d03b0339\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b15ffe32987a6029b14398eb0def01a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0b15ffe32987a6029b14398eb0def01a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)</td></tr>\n<tr class=\"memdesc:ga0b15ffe32987a6029b14398eb0def01a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison between two vectors in term of ULPs.  <a href=\"a00275.html#ga0b15ffe32987a6029b14398eb0def01a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b15ffe32987a6029b14398eb0def01a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes comparison functions for vector types that take a user defined epsilon values. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00224.html\" title=\"GLM_EXT_vector_relational \">glm/ext/vector_relational.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_vector_relational </dd>\n<dd>\n<a class=\"el\" href=\"a00262.html\" title=\"Exposes comparison functions for scalar types that take a user defined epsilon values. \">GLM_EXT_scalar_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00246.html\" title=\"Exposes comparison functions for matrix types that take a user defined epsilon values. \">GLM_EXT_matrix_relational</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga2ac7651a2fa7354f2da610dbd50d28e2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga37d261a65f69babc82cec2ae1af7145f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2b46cb50911e97b32f4cd743c2c69771\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>ULPs</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison between two vectors in term of ULPs. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7da2b8605be7f245b39cb6fbf6d9d581\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, int, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ULPs</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison between two vectors in term of ULPs. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4a99cc41341567567a608719449c1fac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &gt;= epsilon. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga417cf51304359db18e819dda9bce5767\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &gt;= epsilon. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b5c2c3f83422ae5b71fa960d03b0339\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>ULPs</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison between two vectors in term of ULPs. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0b15ffe32987a6029b14398eb0def01a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, int, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ULPs</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison between two vectors in term of ULPs. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00276.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_uint1</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_uint1<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes uvec1 vector type.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gac3bdd96183d23876c58a1424585fefe7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac3bdd96183d23876c58a1424585fefe7\"></a>\ntypedef vec&lt; 1, unsigned int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">uvec1</a></td></tr>\n<tr class=\"memdesc:gac3bdd96183d23876c58a1424585fefe7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gac3bdd96183d23876c58a1424585fefe7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes uvec1 vector type. </p>\n<p>Include &lt;glm/ext/vector_uvec1.hpp&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00272.html\" title=\"Exposes ivec1 vector type. \">GLM_EXT_vector_int1</a> extension. </dd>\n<dd>\n<a class=\"el\" href=\"a00277.html\" title=\"Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types. \">GLM_EXT_vector_uint1_precision</a> extension. </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00277.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_uint1_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_uint1_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gacda57dd8c2bff4934c7f09ddd87c0f39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, unsigned int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">highp_uvec1</a></td></tr>\n<tr class=\"memdesc:gacda57dd8c2bff4934c7f09ddd87c0f39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of unsigned integer values.  <a href=\"a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39\">More...</a><br /></td></tr>\n<tr class=\"separator:gacda57dd8c2bff4934c7f09ddd87c0f39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8bf3fc8a7863d140f48b29341c750402\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, unsigned int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">lowp_uvec1</a></td></tr>\n<tr class=\"memdesc:ga8bf3fc8a7863d140f48b29341c750402\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of unsigned integer values.  <a href=\"a00277.html#ga8bf3fc8a7863d140f48b29341c750402\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8bf3fc8a7863d140f48b29341c750402\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga38fde73aaf1420175ece8d4882558a3f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, unsigned int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">mediump_uvec1</a></td></tr>\n<tr class=\"memdesc:ga38fde73aaf1420175ece8d4882558a3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector of unsigned integer values.  <a href=\"a00277.html#ga38fde73aaf1420175ece8d4882558a3f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga38fde73aaf1420175ece8d4882558a3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00227.html\" title=\"GLM_EXT_vector_uint1_precision \">glm/ext/vector_uint1_precision.hpp</a>&gt; to use the features of this extension. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"gacda57dd8c2bff4934c7f09ddd87c0f39\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u32, highp &gt; highp_uvec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>1 component vector of unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00277.html\" title=\"Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types. \">GLM_EXT_vector_uint1_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00227_source.html#l00027\">27</a> of file <a class=\"el\" href=\"a00227_source.html\">vector_uint1_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8bf3fc8a7863d140f48b29341c750402\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u32, lowp &gt; lowp_uvec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>1 component vector of unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00277.html\" title=\"Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types. \">GLM_EXT_vector_uint1_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00227_source.html#l00037\">37</a> of file <a class=\"el\" href=\"a00227_source.html\">vector_uint1_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga38fde73aaf1420175ece8d4882558a3f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u32, mediump &gt; mediump_uvec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>1 component vector of unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00277.html\" title=\"Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types. \">GLM_EXT_vector_uint1_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00227_source.html#l00032\">32</a> of file <a class=\"el\" href=\"a00227_source.html\">vector_uint1_precision.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00278.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_EXT_vector_ulp</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_EXT_vector_ulp<div class=\"ingroups\"><a class=\"el\" href=\"a00285.html\">Stable extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Allow the measurement of the accuracy of a function against a reference implementation.  \n<a href=\"#details\">More...</a></p>\n<p>Allow the measurement of the accuracy of a function against a reference implementation. </p>\n<p>This extension works on floating-point data and provide results in ULP.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00234.html\" title=\"GLM_EXT_vector_ulp \">glm/ext/vector_ulp.hpp</a>&gt; to use the features of this extension.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00264.html\" title=\"Allow the measurement of the accuracy of a function against a reference implementation. \">GLM_EXT_scalar_ulp</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00262.html\" title=\"Exposes comparison functions for scalar types that take a user defined epsilon values. \">GLM_EXT_scalar_relational</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00275.html\" title=\"Exposes comparison functions for vector types that take a user defined epsilon values. \">GLM_EXT_vector_relational</a> </dd></dl>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00279.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Geometric functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Geometric functions<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>These operate on vectors as vectors, not component-wise.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaeeec0794212fe84fc9d261de067c9587\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaeeec0794212fe84fc9d261de067c9587\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#gaeeec0794212fe84fc9d261de067c9587\">cross</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gaeeec0794212fe84fc9d261de067c9587\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the cross product of x and y.  <a href=\"a00279.html#gaeeec0794212fe84fc9d261de067c9587\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeeec0794212fe84fc9d261de067c9587\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa68de6c53e20dfb2dac2d20197562e3f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa68de6c53e20dfb2dac2d20197562e3f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f\">distance</a> (vec&lt; L, T, Q &gt; const &amp;p0, vec&lt; L, T, Q &gt; const &amp;p1)</td></tr>\n<tr class=\"memdesc:gaa68de6c53e20dfb2dac2d20197562e3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).  <a href=\"a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa68de6c53e20dfb2dac2d20197562e3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a\">dot</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the dot product of x and y, i.e., result = x * y.  <a href=\"a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaad6c5d9d39bdc0bf43baf1b22e147a0a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7aed0a36c738169402404a3a5d54e43b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7aed0a36c738169402404a3a5d54e43b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga7aed0a36c738169402404a3a5d54e43b\">faceforward</a> (vec&lt; L, T, Q &gt; const &amp;N, vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;Nref)</td></tr>\n<tr class=\"memdesc:ga7aed0a36c738169402404a3a5d54e43b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">If dot(Nref, I) &lt; 0.0, return N, otherwise, return -N.  <a href=\"a00279.html#ga7aed0a36c738169402404a3a5d54e43b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7aed0a36c738169402404a3a5d54e43b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0cdabbb000834d994a1d6dc56f8f5263\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0cdabbb000834d994a1d6dc56f8f5263\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263\">length</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga0cdabbb000834d994a1d6dc56f8f5263\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the length of x, i.e., sqrt(x * x).  <a href=\"a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0cdabbb000834d994a1d6dc56f8f5263\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b8d3dcae77870781392ed2902cce597\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3b8d3dcae77870781392ed2902cce597\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga3b8d3dcae77870781392ed2902cce597\">normalize</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga3b8d3dcae77870781392ed2902cce597\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a vector in the same direction as x but with length of 1.  <a href=\"a00279.html#ga3b8d3dcae77870781392ed2902cce597\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3b8d3dcae77870781392ed2902cce597\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5631dd1d5618de5450b1ea3cf3e94905\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5631dd1d5618de5450b1ea3cf3e94905\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905\">reflect</a> (vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;N)</td></tr>\n<tr class=\"memdesc:ga5631dd1d5618de5450b1ea3cf3e94905\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">For the incident vector I and surface orientation N, returns the reflection direction : result = I - 2.0 * dot(N, I) * N.  <a href=\"a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5631dd1d5618de5450b1ea3cf3e94905\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga01da3dff9e2ef6b9d4915c3047e22b74\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga01da3dff9e2ef6b9d4915c3047e22b74\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74\">refract</a> (vec&lt; L, T, Q &gt; const &amp;I, vec&lt; L, T, Q &gt; const &amp;N, T eta)</td></tr>\n<tr class=\"memdesc:ga01da3dff9e2ef6b9d4915c3047e22b74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">For the incident vector I and surface normal N, and the ratio of indices of refraction eta, return the refraction vector.  <a href=\"a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74\">More...</a><br /></td></tr>\n<tr class=\"separator:ga01da3dff9e2ef6b9d4915c3047e22b74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>These operate on vectors as vectors, not component-wise. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00036.html\" title=\"Core features \">glm/geometric.hpp</a>&gt; to use these core features. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaeeec0794212fe84fc9d261de067c9587\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::cross </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the cross product of x and y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/cross.xml\">GLSL cross man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa68de6c53e20dfb2dac2d20197562e3f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::distance </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p1</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/distance.xml\">GLSL distance man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaad6c5d9d39bdc0bf43baf1b22e147a0a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::dot </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the dot product of x and y, i.e., result = x * y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/dot.xml\">GLSL dot man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7aed0a36c738169402404a3a5d54e43b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::faceforward </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>N</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>I</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Nref</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>If dot(Nref, I) &lt; 0.0, return N, otherwise, return -N. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/faceforward.xml\">GLSL faceforward man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0cdabbb000834d994a1d6dc56f8f5263\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::length </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the length of x, i.e., sqrt(x * x). </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/length.xml\">GLSL length man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3b8d3dcae77870781392ed2902cce597\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::normalize </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a vector in the same direction as x but with length of 1. </p>\n<p>According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefined and generate an error.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/normalize.xml\">GLSL normalize man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5631dd1d5618de5450b1ea3cf3e94905\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::reflect </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>I</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>N</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>For the incident vector I and surface orientation N, returns the reflection direction : result = I - 2.0 * dot(N, I) * N. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/reflect.xml\">GLSL reflect man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga01da3dff9e2ef6b9d4915c3047e22b74\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::refract </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>I</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>N</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>eta</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>For the incident vector I and surface normal N, and the ratio of indices of refraction eta, return the refraction vector. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/refract.xml\">GLSL refract man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00280.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Core features</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#groups\">Modules</a> &#124;\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Core features</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Features that implement in C++ the GLSL specification as closely as possible.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"groups\"></a>\nModules</h2></td></tr>\n<tr class=\"memitem:a00241\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00241.html\">Common functions</a></td></tr>\n<tr class=\"memdesc:a00241\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides GLSL common functions. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00242\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00242.html\">Exponential functions</a></td></tr>\n<tr class=\"memdesc:a00242\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides GLSL exponential functions. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00279\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00279.html\">Geometric functions</a></td></tr>\n<tr class=\"memdesc:a00279\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">These operate on vectors as vectors, not component-wise. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00281\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html\">Vector types</a></td></tr>\n<tr class=\"memdesc:a00281\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector types of two to four components with an exhaustive set of operators. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00282\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html\">Vector types with precision qualifiers</a></td></tr>\n<tr class=\"memdesc:a00282\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector types with precision qualifiers which may result in various precision in term of ULPs. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00283\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html\">Matrix types</a></td></tr>\n<tr class=\"memdesc:a00283\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Matrix types of with C columns and R rows where C and R are values between 2 to 4 included. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00284\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html\">Matrix types with precision qualifiers</a></td></tr>\n<tr class=\"memdesc:a00284\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Matrix types with precision qualifiers which may result in various precision in term of ULPs. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00370\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html\">Integer functions</a></td></tr>\n<tr class=\"memdesc:a00370\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides GLSL functions on integer types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00371\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html\">Matrix functions</a></td></tr>\n<tr class=\"memdesc:a00371\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides GLSL matrix functions. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00372\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html\">Floating-Point Pack and Unpack Functions</a></td></tr>\n<tr class=\"memdesc:a00372\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00373\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html\">Angle and Trigonometry Functions</a></td></tr>\n<tr class=\"memdesc:a00373\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Function parameters specified as angle are assumed to be in units of radians. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00374\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html\">Vector Relational Functions</a></td></tr>\n<tr class=\"memdesc:a00374\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Relational and equality operators (&lt;, &lt;=, &gt;, &gt;=, ==, !=) are defined to operate on scalars and produce scalar Boolean results. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga2c27aea32de57d58aec8e92d5d2181e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">mat3x2</a></td></tr>\n<tr class=\"memdesc:ga2c27aea32de57d58aec8e92d5d2181e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of single-precision floating-point numbers.  <a href=\"a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c27aea32de57d58aec8e92d5d2181e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Features that implement in C++ the GLSL specification as closely as possible. </p>\n<p>The GLM core consists of C++ types that mirror GLSL types and C++ functions that mirror the GLSL functions.</p>\n<p>The best documentation for GLM Core is the current GLSL specification, <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.clean.pdf\">version 4.2 (pdf file)</a>.</p>\n<p>GLM core functionalities require &lt;<a class=\"el\" href=\"a00037.html\" title=\"Core features \">glm/glm.hpp</a>&gt; to be included to be used. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga2c27aea32de57d58aec8e92d5d2181e2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, defaultp &gt; mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 2 components matrix of single-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00088_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00088_source.html\">matrix_float3x2.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00281.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Vector types</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Vector types<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Vector types of two to four components with an exhaustive set of operators.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga0b6123e03653cc1bbe366fc55238a934\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, bool, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">bvec2</a></td></tr>\n<tr class=\"memdesc:ga0b6123e03653cc1bbe366fc55238a934\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of boolean.  <a href=\"a00281.html#ga0b6123e03653cc1bbe366fc55238a934\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b6123e03653cc1bbe366fc55238a934\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga197151b72dfaf289daf98b361760ffe7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, bool, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">bvec3</a></td></tr>\n<tr class=\"memdesc:ga197151b72dfaf289daf98b361760ffe7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of boolean.  <a href=\"a00281.html#ga197151b72dfaf289daf98b361760ffe7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga197151b72dfaf289daf98b361760ffe7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9f7b9712373ff4342d9114619b55f5e3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, bool, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">bvec4</a></td></tr>\n<tr class=\"memdesc:ga9f7b9712373ff4342d9114619b55f5e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of boolean.  <a href=\"a00281.html#ga9f7b9712373ff4342d9114619b55f5e3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9f7b9712373ff4342d9114619b55f5e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b09c71aaac7da7867ae58377fe219a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">dvec2</a></td></tr>\n<tr class=\"memdesc:ga8b09c71aaac7da7867ae58377fe219a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of double-precision floating-point numbers.  <a href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b09c71aaac7da7867ae58377fe219a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b83ae3d0fdec519c038e4d2cf967cf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">dvec3</a></td></tr>\n<tr class=\"memdesc:ga5b83ae3d0fdec519c038e4d2cf967cf0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of double-precision floating-point numbers.  <a href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b83ae3d0fdec519c038e4d2cf967cf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga57debab5d98ce618f7b2a97fe26eb3ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">dvec4</a></td></tr>\n<tr class=\"memdesc:ga57debab5d98ce618f7b2a97fe26eb3ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of double-precision floating-point numbers.  <a href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga57debab5d98ce618f7b2a97fe26eb3ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6f9269106d91b2d2b91bcf27cd5f5560\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">ivec2</a></td></tr>\n<tr class=\"memdesc:ga6f9269106d91b2d2b91bcf27cd5f5560\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of signed integer numbers.  <a href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6f9269106d91b2d2b91bcf27cd5f5560\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad0d784d8eee201aca362484d2daee46c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">ivec3</a></td></tr>\n<tr class=\"memdesc:gad0d784d8eee201aca362484d2daee46c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of signed integer numbers.  <a href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">More...</a><br /></td></tr>\n<tr class=\"separator:gad0d784d8eee201aca362484d2daee46c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5abb4603dae0ce58c595e66d9123d812\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a></td></tr>\n<tr class=\"memdesc:ga5abb4603dae0ce58c595e66d9123d812\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of signed integer numbers.  <a href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5abb4603dae0ce58c595e66d9123d812\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f6d9ec3ae14813ade37d6aee3715fdb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, unsigned int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a></td></tr>\n<tr class=\"memdesc:ga2f6d9ec3ae14813ade37d6aee3715fdb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of unsigned integer numbers.  <a href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f6d9ec3ae14813ade37d6aee3715fdb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3d3e55874babd4bf93baa7bbc83ae418\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, unsigned int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">uvec3</a></td></tr>\n<tr class=\"memdesc:ga3d3e55874babd4bf93baa7bbc83ae418\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of unsigned integer numbers.  <a href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3d3e55874babd4bf93baa7bbc83ae418\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa57e96bb337867329d5f43bcc27c1095\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, unsigned int, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a></td></tr>\n<tr class=\"memdesc:gaa57e96bb337867329d5f43bcc27c1095\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of unsigned integer numbers.  <a href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa57e96bb337867329d5f43bcc27c1095\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabe65c061834f61b4f7cb6037b19006a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a></td></tr>\n<tr class=\"memdesc:gabe65c061834f61b4f7cb6037b19006a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of single-precision floating-point numbers.  <a href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">More...</a><br /></td></tr>\n<tr class=\"separator:gabe65c061834f61b4f7cb6037b19006a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9c3019b13faf179e4ad3626ea66df334\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a></td></tr>\n<tr class=\"memdesc:ga9c3019b13faf179e4ad3626ea66df334\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of single-precision floating-point numbers.  <a href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9c3019b13faf179e4ad3626ea66df334\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac215a35481a6597d1bf622a382e9d6e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a></td></tr>\n<tr class=\"memdesc:gac215a35481a6597d1bf622a382e9d6e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of single-precision floating-point numbers.  <a href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">More...</a><br /></td></tr>\n<tr class=\"separator:gac215a35481a6597d1bf622a382e9d6e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Vector types of two to four components with an exhaustive set of operators. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga0b6123e03653cc1bbe366fc55238a934\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, bool, defaultp &gt; bvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of boolean. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00191_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00191_source.html\">vector_bool2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga197151b72dfaf289daf98b361760ffe7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, bool, defaultp &gt; bvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of boolean. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00193_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00193_source.html\">vector_bool3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9f7b9712373ff4342d9114619b55f5e3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, bool, defaultp &gt; bvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of boolean. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00195_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00195_source.html\">vector_bool4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b09c71aaac7da7867ae58377fe219a8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f64, defaultp &gt; dvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of double-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00200_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00200_source.html\">vector_double2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5b83ae3d0fdec519c038e4d2cf967cf0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f64, defaultp &gt; dvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of double-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00202_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00202_source.html\">vector_double3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga57debab5d98ce618f7b2a97fe26eb3ac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f64, defaultp &gt; dvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of double-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00204_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00204_source.html\">vector_double4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6f9269106d91b2d2b91bcf27cd5f5560\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i32, defaultp &gt; ivec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of signed integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00216_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00216_source.html\">vector_int2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad0d784d8eee201aca362484d2daee46c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i32, defaultp &gt; ivec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of signed integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00218_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00218_source.html\">vector_int3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5abb4603dae0ce58c595e66d9123d812\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i32, defaultp &gt; ivec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of signed integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00220_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00220_source.html\">vector_int4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2f6d9ec3ae14813ade37d6aee3715fdb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u32, defaultp &gt; uvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of unsigned integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00228_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00228_source.html\">vector_uint2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3d3e55874babd4bf93baa7bbc83ae418\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u32, defaultp &gt; uvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of unsigned integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00230_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00230_source.html\">vector_uint3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa57e96bb337867329d5f43bcc27c1095\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u32, defaultp &gt; uvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of unsigned integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00232_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00232_source.html\">vector_uint4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabe65c061834f61b4f7cb6037b19006a4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, float, defaultp &gt; vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of single-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00208_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00208_source.html\">vector_float2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9c3019b13faf179e4ad3626ea66df334\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, float, defaultp &gt; vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of single-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00210_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00210_source.html\">vector_float3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac215a35481a6597d1bf622a382e9d6e2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, float, defaultp &gt; vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of single-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00212_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00212_source.html\">vector_float4.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00282.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Vector types with precision qualifiers</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Vector types with precision qualifiers<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Vector types with precision qualifiers which may result in various precision in term of ULPs.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gac6c781a85f012d77a75310a3058702c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">highp_bvec2</a></td></tr>\n<tr class=\"memdesc:gac6c781a85f012d77a75310a3058702c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high qualifier bool numbers.  <a href=\"a00282.html#gac6c781a85f012d77a75310a3058702c2\">More...</a><br /></td></tr>\n<tr class=\"separator:gac6c781a85f012d77a75310a3058702c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaedb70027d89a0a405046aefda4eabaa6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">highp_bvec3</a></td></tr>\n<tr class=\"memdesc:gaedb70027d89a0a405046aefda4eabaa6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high qualifier bool numbers.  <a href=\"a00282.html#gaedb70027d89a0a405046aefda4eabaa6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaedb70027d89a0a405046aefda4eabaa6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee663ff64429443ab07a5327074192f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">highp_bvec4</a></td></tr>\n<tr class=\"memdesc:gaee663ff64429443ab07a5327074192f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high qualifier bool numbers.  <a href=\"a00282.html#gaee663ff64429443ab07a5327074192f6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee663ff64429443ab07a5327074192f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab98d77cca255914f5e29697fcbc2d975\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">highp_dvec2</a></td></tr>\n<tr class=\"memdesc:gab98d77cca255914f5e29697fcbc2d975\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high double-qualifier floating-point numbers.  <a href=\"a00282.html#gab98d77cca255914f5e29697fcbc2d975\">More...</a><br /></td></tr>\n<tr class=\"separator:gab98d77cca255914f5e29697fcbc2d975\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab24dc20dcdc5b71282634bdbf6b70105\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">highp_dvec3</a></td></tr>\n<tr class=\"memdesc:gab24dc20dcdc5b71282634bdbf6b70105\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high double-qualifier floating-point numbers.  <a href=\"a00282.html#gab24dc20dcdc5b71282634bdbf6b70105\">More...</a><br /></td></tr>\n<tr class=\"separator:gab24dc20dcdc5b71282634bdbf6b70105\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab654f4ed4a99d64a6cfc65320c2a7590\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">highp_dvec4</a></td></tr>\n<tr class=\"memdesc:gab654f4ed4a99d64a6cfc65320c2a7590\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high double-qualifier floating-point numbers.  <a href=\"a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590\">More...</a><br /></td></tr>\n<tr class=\"separator:gab654f4ed4a99d64a6cfc65320c2a7590\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa18f6b80b41c214f10666948539c1f93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">highp_ivec2</a></td></tr>\n<tr class=\"memdesc:gaa18f6b80b41c214f10666948539c1f93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high qualifier signed integer numbers.  <a href=\"a00282.html#gaa18f6b80b41c214f10666948539c1f93\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa18f6b80b41c214f10666948539c1f93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dd782c3ef5719bc6d5c3ca826b8ad18\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">highp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga7dd782c3ef5719bc6d5c3ca826b8ad18\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high qualifier signed integer numbers.  <a href=\"a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7dd782c3ef5719bc6d5c3ca826b8ad18\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafb84dccdf5d82443df3ffc8428dcaf3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">highp_ivec4</a></td></tr>\n<tr class=\"memdesc:gafb84dccdf5d82443df3ffc8428dcaf3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high qualifier signed integer numbers.  <a href=\"a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e\">More...</a><br /></td></tr>\n<tr class=\"separator:gafb84dccdf5d82443df3ffc8428dcaf3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad5dd50da9e37387ca6b4e6f9c80fe6f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, unsigned int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">highp_uvec2</a></td></tr>\n<tr class=\"memdesc:gad5dd50da9e37387ca6b4e6f9c80fe6f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high qualifier unsigned integer numbers.  <a href=\"a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8\">More...</a><br /></td></tr>\n<tr class=\"separator:gad5dd50da9e37387ca6b4e6f9c80fe6f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaef61508dd40ec523416697982f9ceaae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, unsigned int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">highp_uvec3</a></td></tr>\n<tr class=\"memdesc:gaef61508dd40ec523416697982f9ceaae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high qualifier unsigned integer numbers.  <a href=\"a00282.html#gaef61508dd40ec523416697982f9ceaae\">More...</a><br /></td></tr>\n<tr class=\"separator:gaef61508dd40ec523416697982f9ceaae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeebd7dd9f3e678691f8620241e5f9221\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, unsigned int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">highp_uvec4</a></td></tr>\n<tr class=\"memdesc:gaeebd7dd9f3e678691f8620241e5f9221\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high qualifier unsigned integer numbers.  <a href=\"a00282.html#gaeebd7dd9f3e678691f8620241e5f9221\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeebd7dd9f3e678691f8620241e5f9221\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa92c1954d71b1e7914874bd787b43d1c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">highp_vec2</a></td></tr>\n<tr class=\"memdesc:gaa92c1954d71b1e7914874bd787b43d1c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of high single-qualifier floating-point numbers.  <a href=\"a00282.html#gaa92c1954d71b1e7914874bd787b43d1c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa92c1954d71b1e7914874bd787b43d1c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaca61dfaccbf2f58f2d8063a4e76b44a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">highp_vec3</a></td></tr>\n<tr class=\"memdesc:gaca61dfaccbf2f58f2d8063a4e76b44a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of high single-qualifier floating-point numbers.  <a href=\"a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaca61dfaccbf2f58f2d8063a4e76b44a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad281decae52948b82feb3a9db8f63a7b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">highp_vec4</a></td></tr>\n<tr class=\"memdesc:gad281decae52948b82feb3a9db8f63a7b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of high single-qualifier floating-point numbers.  <a href=\"a00282.html#gad281decae52948b82feb3a9db8f63a7b\">More...</a><br /></td></tr>\n<tr class=\"separator:gad281decae52948b82feb3a9db8f63a7b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a5452140650988b94d5716e4d872465\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, bool, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">lowp_bvec2</a></td></tr>\n<tr class=\"memdesc:ga5a5452140650988b94d5716e4d872465\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low qualifier bool numbers.  <a href=\"a00282.html#ga5a5452140650988b94d5716e4d872465\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5a5452140650988b94d5716e4d872465\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga79e0922a977662a8fd39d7829be3908b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, bool, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">lowp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga79e0922a977662a8fd39d7829be3908b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low qualifier bool numbers.  <a href=\"a00282.html#ga79e0922a977662a8fd39d7829be3908b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga79e0922a977662a8fd39d7829be3908b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga15ac87724048ab7169bb5d3572939dd3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, bool, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">lowp_bvec4</a></td></tr>\n<tr class=\"memdesc:ga15ac87724048ab7169bb5d3572939dd3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low qualifier bool numbers.  <a href=\"a00282.html#ga15ac87724048ab7169bb5d3572939dd3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga15ac87724048ab7169bb5d3572939dd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga108086730d086b7f6f7a033955dfb9c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">lowp_dvec2</a></td></tr>\n<tr class=\"memdesc:ga108086730d086b7f6f7a033955dfb9c3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low double-qualifier floating-point numbers.  <a href=\"a00282.html#ga108086730d086b7f6f7a033955dfb9c3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga108086730d086b7f6f7a033955dfb9c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42c518b2917e19ce6946a84c64a3a4b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">lowp_dvec3</a></td></tr>\n<tr class=\"memdesc:ga42c518b2917e19ce6946a84c64a3a4b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low double-qualifier floating-point numbers.  <a href=\"a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42c518b2917e19ce6946a84c64a3a4b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b4432cb8d910e406576d10d802e190d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">lowp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga0b4432cb8d910e406576d10d802e190d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low double-qualifier floating-point numbers.  <a href=\"a00282.html#ga0b4432cb8d910e406576d10d802e190d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b4432cb8d910e406576d10d802e190d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8433c6c1fdd80c0a83941d94aff73fa0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">lowp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga8433c6c1fdd80c0a83941d94aff73fa0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low qualifier signed integer numbers.  <a href=\"a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8433c6c1fdd80c0a83941d94aff73fa0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac1a86a75b3c68ebb704d7094043669d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">lowp_ivec3</a></td></tr>\n<tr class=\"memdesc:gac1a86a75b3c68ebb704d7094043669d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low qualifier signed integer numbers.  <a href=\"a00282.html#gac1a86a75b3c68ebb704d7094043669d6\">More...</a><br /></td></tr>\n<tr class=\"separator:gac1a86a75b3c68ebb704d7094043669d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27fc23da61859cd6356326c5f1c796de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">lowp_ivec4</a></td></tr>\n<tr class=\"memdesc:ga27fc23da61859cd6356326c5f1c796de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low qualifier signed integer numbers.  <a href=\"a00282.html#ga27fc23da61859cd6356326c5f1c796de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27fc23da61859cd6356326c5f1c796de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga752ee45136011301b64afd8c310c47a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, unsigned int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">lowp_uvec2</a></td></tr>\n<tr class=\"memdesc:ga752ee45136011301b64afd8c310c47a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low qualifier unsigned integer numbers.  <a href=\"a00282.html#ga752ee45136011301b64afd8c310c47a4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga752ee45136011301b64afd8c310c47a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, unsigned int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">lowp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low qualifier unsigned integer numbers.  <a href=\"a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, unsigned int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">lowp_uvec4</a></td></tr>\n<tr class=\"memdesc:ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low qualifier unsigned integer numbers.  <a href=\"a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30e8baef5d56d5c166872a2bc00f36e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">lowp_vec2</a></td></tr>\n<tr class=\"memdesc:ga30e8baef5d56d5c166872a2bc00f36e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of low single-qualifier floating-point numbers.  <a href=\"a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga30e8baef5d56d5c166872a2bc00f36e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga868e8e4470a3ef97c7ee3032bf90dc79\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">lowp_vec3</a></td></tr>\n<tr class=\"memdesc:ga868e8e4470a3ef97c7ee3032bf90dc79\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of low single-qualifier floating-point numbers.  <a href=\"a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79\">More...</a><br /></td></tr>\n<tr class=\"separator:ga868e8e4470a3ef97c7ee3032bf90dc79\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace3acb313c800552a9411953eb8b2ed7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">lowp_vec4</a></td></tr>\n<tr class=\"memdesc:gace3acb313c800552a9411953eb8b2ed7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of low single-qualifier floating-point numbers.  <a href=\"a00282.html#gace3acb313c800552a9411953eb8b2ed7\">More...</a><br /></td></tr>\n<tr class=\"separator:gace3acb313c800552a9411953eb8b2ed7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1e743764869efa9223c2bcefccedaddc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, bool, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">mediump_bvec2</a></td></tr>\n<tr class=\"memdesc:ga1e743764869efa9223c2bcefccedaddc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium qualifier bool numbers.  <a href=\"a00282.html#ga1e743764869efa9223c2bcefccedaddc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e743764869efa9223c2bcefccedaddc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50c783c25082882ef00fe2e5cddba4aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, bool, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">mediump_bvec3</a></td></tr>\n<tr class=\"memdesc:ga50c783c25082882ef00fe2e5cddba4aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium qualifier bool numbers.  <a href=\"a00282.html#ga50c783c25082882ef00fe2e5cddba4aa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50c783c25082882ef00fe2e5cddba4aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0be2c682258604a35004f088782a9645\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, bool, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">mediump_bvec4</a></td></tr>\n<tr class=\"memdesc:ga0be2c682258604a35004f088782a9645\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium qualifier bool numbers.  <a href=\"a00282.html#ga0be2c682258604a35004f088782a9645\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0be2c682258604a35004f088782a9645\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f4f6e9a69a0281d06940fd0990cafc3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">mediump_dvec2</a></td></tr>\n<tr class=\"memdesc:ga2f4f6e9a69a0281d06940fd0990cafc3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium double-qualifier floating-point numbers.  <a href=\"a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f4f6e9a69a0281d06940fd0990cafc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga61c3b1dff4ec7c878af80503141b9f37\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">mediump_dvec3</a></td></tr>\n<tr class=\"memdesc:ga61c3b1dff4ec7c878af80503141b9f37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium double-qualifier floating-point numbers.  <a href=\"a00282.html#ga61c3b1dff4ec7c878af80503141b9f37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga61c3b1dff4ec7c878af80503141b9f37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga23a8bca00914a51542bfea13a4778186\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">mediump_dvec4</a></td></tr>\n<tr class=\"memdesc:ga23a8bca00914a51542bfea13a4778186\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium double-qualifier floating-point numbers.  <a href=\"a00282.html#ga23a8bca00914a51542bfea13a4778186\">More...</a><br /></td></tr>\n<tr class=\"separator:ga23a8bca00914a51542bfea13a4778186\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac57496299d276ed97044074097bd5e2c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">mediump_ivec2</a></td></tr>\n<tr class=\"memdesc:gac57496299d276ed97044074097bd5e2c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium qualifier signed integer numbers.  <a href=\"a00282.html#gac57496299d276ed97044074097bd5e2c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac57496299d276ed97044074097bd5e2c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27cfb51e0dbe15bba27a14a8590e8466\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">mediump_ivec3</a></td></tr>\n<tr class=\"memdesc:ga27cfb51e0dbe15bba27a14a8590e8466\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium qualifier signed integer numbers.  <a href=\"a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27cfb51e0dbe15bba27a14a8590e8466\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92a204c37e66ac6c1dc7ae91142f2ea5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">mediump_ivec4</a></td></tr>\n<tr class=\"memdesc:ga92a204c37e66ac6c1dc7ae91142f2ea5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium qualifier signed integer numbers.  <a href=\"a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga92a204c37e66ac6c1dc7ae91142f2ea5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa3b4f7806dad03d83bb3da0baa1e3b9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, unsigned int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">mediump_uvec2</a></td></tr>\n<tr class=\"memdesc:gaa3b4f7806dad03d83bb3da0baa1e3b9b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium qualifier unsigned integer numbers.  <a href=\"a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3b4f7806dad03d83bb3da0baa1e3b9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83b7df38feefbb357f3673d950fafef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, unsigned int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">mediump_uvec3</a></td></tr>\n<tr class=\"memdesc:ga83b7df38feefbb357f3673d950fafef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium qualifier unsigned integer numbers.  <a href=\"a00282.html#ga83b7df38feefbb357f3673d950fafef7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga83b7df38feefbb357f3673d950fafef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga64ed0deb6573375b7016daf82ffd53a7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, unsigned int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">mediump_uvec4</a></td></tr>\n<tr class=\"memdesc:ga64ed0deb6573375b7016daf82ffd53a7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium qualifier unsigned integer numbers.  <a href=\"a00282.html#ga64ed0deb6573375b7016daf82ffd53a7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga64ed0deb6573375b7016daf82ffd53a7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc61976261c406520c7a8e4d946dc3f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">mediump_vec2</a></td></tr>\n<tr class=\"memdesc:gabc61976261c406520c7a8e4d946dc3f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector of medium single-qualifier floating-point numbers.  <a href=\"a00282.html#gabc61976261c406520c7a8e4d946dc3f0\">More...</a><br /></td></tr>\n<tr class=\"separator:gabc61976261c406520c7a8e4d946dc3f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2384e263df19f1404b733016eff78fca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">mediump_vec3</a></td></tr>\n<tr class=\"memdesc:ga2384e263df19f1404b733016eff78fca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector of medium single-qualifier floating-point numbers.  <a href=\"a00282.html#ga2384e263df19f1404b733016eff78fca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2384e263df19f1404b733016eff78fca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c6978d3ffba06738416a33083853fc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">mediump_vec4</a></td></tr>\n<tr class=\"memdesc:ga5c6978d3ffba06738416a33083853fc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector of medium single-qualifier floating-point numbers.  <a href=\"a00282.html#ga5c6978d3ffba06738416a33083853fc0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c6978d3ffba06738416a33083853fc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Vector types with precision qualifiers which may result in various precision in term of ULPs. </p>\n<p>GLSL allows defining qualifiers for particular variables. With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility, with OpenGL ES's GLSL, these qualifiers do have an effect.</p>\n<p>C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing: a number of typedefs that use a particular qualifier.</p>\n<p>None of these types make any guarantees about the actual qualifier used. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"gac6c781a85f012d77a75310a3058702c2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, bool, highp &gt; highp_bvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of high qualifier bool numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00192_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00192_source.html\">vector_bool2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaedb70027d89a0a405046aefda4eabaa6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, bool, highp &gt; highp_bvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of high qualifier bool numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00194_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00194_source.html\">vector_bool3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaee663ff64429443ab07a5327074192f6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, bool, highp &gt; highp_bvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of high qualifier bool numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00196_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00196_source.html\">vector_bool4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab98d77cca255914f5e29697fcbc2d975\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f64, highp &gt; highp_dvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of high double-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00201_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00201_source.html\">vector_double2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab24dc20dcdc5b71282634bdbf6b70105\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f64, highp &gt; highp_dvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of high double-qualifier floating-point numbers. </p>\n<p>There is no guarantee on the actual qualifier.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00203_source.html#l00017\">17</a> of file <a class=\"el\" href=\"a00203_source.html\">vector_double3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab654f4ed4a99d64a6cfc65320c2a7590\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f64, highp &gt; highp_dvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of high double-qualifier floating-point numbers. </p>\n<p>There is no guarantee on the actual qualifier.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00205_source.html#l00018\">18</a> of file <a class=\"el\" href=\"a00205_source.html\">vector_double4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa18f6b80b41c214f10666948539c1f93\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i32, highp &gt; highp_ivec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of high qualifier signed integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00217_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00217_source.html\">vector_int2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7dd782c3ef5719bc6d5c3ca826b8ad18\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i32, highp &gt; highp_ivec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of high qualifier signed integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00219_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00219_source.html\">vector_int3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafb84dccdf5d82443df3ffc8428dcaf3e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i32, highp &gt; highp_ivec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of high qualifier signed integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00221_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00221_source.html\">vector_int4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad5dd50da9e37387ca6b4e6f9c80fe6f8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u32, highp &gt; highp_uvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of high qualifier unsigned integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00229_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00229_source.html\">vector_uint2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaef61508dd40ec523416697982f9ceaae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u32, highp &gt; highp_uvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of high qualifier unsigned integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00231_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00231_source.html\">vector_uint3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaeebd7dd9f3e678691f8620241e5f9221\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u32, highp &gt; highp_uvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of high qualifier unsigned integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00233_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00233_source.html\">vector_uint4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa92c1954d71b1e7914874bd787b43d1c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, float, highp &gt; highp_vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of high single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00209_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00209_source.html\">vector_float2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaca61dfaccbf2f58f2d8063a4e76b44a9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, float, highp &gt; highp_vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of high single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00211_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00211_source.html\">vector_float3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad281decae52948b82feb3a9db8f63a7b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, float, highp &gt; highp_vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of high single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00213_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00213_source.html\">vector_float4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5a5452140650988b94d5716e4d872465\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, bool, lowp &gt; lowp_bvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of low qualifier bool numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00192_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00192_source.html\">vector_bool2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga79e0922a977662a8fd39d7829be3908b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, bool, lowp &gt; lowp_bvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of low qualifier bool numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00194_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00194_source.html\">vector_bool3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga15ac87724048ab7169bb5d3572939dd3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, bool, lowp &gt; lowp_bvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of low qualifier bool numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00196_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00196_source.html\">vector_bool4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga108086730d086b7f6f7a033955dfb9c3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f64, lowp &gt; lowp_dvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of low double-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00201_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00201_source.html\">vector_double2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga42c518b2917e19ce6946a84c64a3a4b2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f64, lowp &gt; lowp_dvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of low double-qualifier floating-point numbers. </p>\n<p>There is no guarantee on the actual qualifier.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00203_source.html#l00031\">31</a> of file <a class=\"el\" href=\"a00203_source.html\">vector_double3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0b4432cb8d910e406576d10d802e190d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f64, lowp &gt; lowp_dvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of low double-qualifier floating-point numbers. </p>\n<p>There is no guarantee on the actual qualifier.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00205_source.html#l00032\">32</a> of file <a class=\"el\" href=\"a00205_source.html\">vector_double4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8433c6c1fdd80c0a83941d94aff73fa0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i32, lowp &gt; lowp_ivec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of low qualifier signed integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00217_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00217_source.html\">vector_int2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac1a86a75b3c68ebb704d7094043669d6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i32, lowp &gt; lowp_ivec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of low qualifier signed integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00219_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00219_source.html\">vector_int3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga27fc23da61859cd6356326c5f1c796de\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i32, lowp &gt; lowp_ivec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of low qualifier signed integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00221_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00221_source.html\">vector_int4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga752ee45136011301b64afd8c310c47a4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u32, lowp &gt; lowp_uvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of low qualifier unsigned integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00229_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00229_source.html\">vector_uint2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7b2efbdd6bdc2f8250c57f3e5dc9a292\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u32, lowp &gt; lowp_uvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of low qualifier unsigned integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00231_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00231_source.html\">vector_uint3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5e6a632ec1165cf9f54ceeaa5e9b2b1e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u32, lowp &gt; lowp_uvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of low qualifier unsigned integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00233_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00233_source.html\">vector_uint4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga30e8baef5d56d5c166872a2bc00f36e9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, float, lowp &gt; lowp_vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of low single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00209_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00209_source.html\">vector_float2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga868e8e4470a3ef97c7ee3032bf90dc79\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, float, lowp &gt; lowp_vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of low single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00211_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00211_source.html\">vector_float3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gace3acb313c800552a9411953eb8b2ed7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, float, lowp &gt; lowp_vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of low single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00213_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00213_source.html\">vector_float4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1e743764869efa9223c2bcefccedaddc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, bool, mediump &gt; mediump_bvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of medium qualifier bool numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00192_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00192_source.html\">vector_bool2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga50c783c25082882ef00fe2e5cddba4aa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, bool, mediump &gt; mediump_bvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of medium qualifier bool numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00194_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00194_source.html\">vector_bool3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0be2c682258604a35004f088782a9645\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, bool, mediump &gt; mediump_bvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of medium qualifier bool numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00196_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00196_source.html\">vector_bool4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2f4f6e9a69a0281d06940fd0990cafc3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f64, mediump &gt; mediump_dvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of medium double-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00201_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00201_source.html\">vector_double2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga61c3b1dff4ec7c878af80503141b9f37\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f64, mediump &gt; mediump_dvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of medium double-qualifier floating-point numbers. </p>\n<p>There is no guarantee on the actual qualifier.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00203_source.html#l00024\">24</a> of file <a class=\"el\" href=\"a00203_source.html\">vector_double3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga23a8bca00914a51542bfea13a4778186\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f64, mediump &gt; mediump_dvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of medium double-qualifier floating-point numbers. </p>\n<p>There is no guarantee on the actual qualifier.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00205_source.html#l00025\">25</a> of file <a class=\"el\" href=\"a00205_source.html\">vector_double4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac57496299d276ed97044074097bd5e2c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i32, mediump &gt; mediump_ivec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of medium qualifier signed integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00217_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00217_source.html\">vector_int2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga27cfb51e0dbe15bba27a14a8590e8466\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i32, mediump &gt; mediump_ivec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of medium qualifier signed integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00219_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00219_source.html\">vector_int3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga92a204c37e66ac6c1dc7ae91142f2ea5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i32, mediump &gt; mediump_ivec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of medium qualifier signed integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00221_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00221_source.html\">vector_int4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa3b4f7806dad03d83bb3da0baa1e3b9b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u32, mediump &gt; mediump_uvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of medium qualifier unsigned integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00229_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00229_source.html\">vector_uint2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga83b7df38feefbb357f3673d950fafef7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u32, mediump &gt; mediump_uvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of medium qualifier unsigned integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00231_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00231_source.html\">vector_uint3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga64ed0deb6573375b7016daf82ffd53a7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u32, mediump &gt; mediump_uvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of medium qualifier unsigned integer numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00233_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00233_source.html\">vector_uint4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabc61976261c406520c7a8e4d946dc3f0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, float, mediump &gt; mediump_vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 components vector of medium single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00209_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00209_source.html\">vector_float2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2384e263df19f1404b733016eff78fca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, float, mediump &gt; mediump_vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 components vector of medium single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00211_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00211_source.html\">vector_float3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5c6978d3ffba06738416a33083853fc0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, float, mediump &gt; mediump_vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 components vector of medium single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00213_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00213_source.html\">vector_float4_precision.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00283.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Matrix types</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Matrix types<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Matrix types of with C columns and R rows where C and R are values between 2 to 4 included.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga21dbd1f987775d7cc7607c139531c7e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">dmat2</a></td></tr>\n<tr class=\"memdesc:ga21dbd1f987775d7cc7607c139531c7e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga21dbd1f987775d7cc7607c139531c7e6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga21dbd1f987775d7cc7607c139531c7e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66b6a9af787e468a46dfe24189e87f9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga66b6a9af787e468a46dfe24189e87f9b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga66b6a9af787e468a46dfe24189e87f9b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66b6a9af787e468a46dfe24189e87f9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92cd388753d48e20de69ea2dbedf826a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga92cd388753d48e20de69ea2dbedf826a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga92cd388753d48e20de69ea2dbedf826a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga92cd388753d48e20de69ea2dbedf826a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaef2198807e937072803ae0ae45e1965e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">dmat2x4</a></td></tr>\n<tr class=\"memdesc:gaef2198807e937072803ae0ae45e1965e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#gaef2198807e937072803ae0ae45e1965e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaef2198807e937072803ae0ae45e1965e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6f40aa56265b4b0ccad41b86802efe33\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">dmat3</a></td></tr>\n<tr class=\"memdesc:ga6f40aa56265b4b0ccad41b86802efe33\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga6f40aa56265b4b0ccad41b86802efe33\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6f40aa56265b4b0ccad41b86802efe33\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga001e3e0638fbf8719788fc64c5b8cf39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga001e3e0638fbf8719788fc64c5b8cf39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39\">More...</a><br /></td></tr>\n<tr class=\"separator:ga001e3e0638fbf8719788fc64c5b8cf39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga970cb3306be25a5ca5db5a9456831228\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga970cb3306be25a5ca5db5a9456831228\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga970cb3306be25a5ca5db5a9456831228\">More...</a><br /></td></tr>\n<tr class=\"separator:ga970cb3306be25a5ca5db5a9456831228\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0412a634d183587e6188e9b11869f8f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga0412a634d183587e6188e9b11869f8f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga0412a634d183587e6188e9b11869f8f4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0412a634d183587e6188e9b11869f8f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0f34486bb7fec8e5a5b3830b6a6cbeca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">dmat4</a></td></tr>\n<tr class=\"memdesc:ga0f34486bb7fec8e5a5b3830b6a6cbeca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0f34486bb7fec8e5a5b3830b6a6cbeca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd18864049f8c83799babe7e596ca05b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">dmat4x3</a></td></tr>\n<tr class=\"memdesc:gacd18864049f8c83799babe7e596ca05b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#gacd18864049f8c83799babe7e596ca05b\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd18864049f8c83799babe7e596ca05b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad5a6484b983b74f9d801cab8bc4e6a10\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">dmat4x4</a></td></tr>\n<tr class=\"memdesc:gad5a6484b983b74f9d801cab8bc4e6a10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers.  <a href=\"a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10\">More...</a><br /></td></tr>\n<tr class=\"separator:gad5a6484b983b74f9d801cab8bc4e6a10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8dd59e7fc6913ac5d61b86553e9148ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">mat2</a></td></tr>\n<tr class=\"memdesc:ga8dd59e7fc6913ac5d61b86553e9148ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8dd59e7fc6913ac5d61b86553e9148ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa17ef6bfa4e4f2692348b1460c8efcb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">mat2x2</a></td></tr>\n<tr class=\"memdesc:gaaa17ef6bfa4e4f2692348b1460c8efcb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaa17ef6bfa4e4f2692348b1460c8efcb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga493ab21243abe564b3f7d381e677d29a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">mat2x3</a></td></tr>\n<tr class=\"memdesc:ga493ab21243abe564b3f7d381e677d29a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#ga493ab21243abe564b3f7d381e677d29a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga493ab21243abe564b3f7d381e677d29a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e879b57ddd81e5bf5a88929844e8b40\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">mat2x4</a></td></tr>\n<tr class=\"memdesc:ga8e879b57ddd81e5bf5a88929844e8b40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8e879b57ddd81e5bf5a88929844e8b40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaefb0fc7a4960b782c18708bb6b655262\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">mat3</a></td></tr>\n<tr class=\"memdesc:gaefb0fc7a4960b782c18708bb6b655262\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">More...</a><br /></td></tr>\n<tr class=\"separator:gaefb0fc7a4960b782c18708bb6b655262\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab91887d7565059dac640e3a1921c914a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">mat3x3</a></td></tr>\n<tr class=\"memdesc:gab91887d7565059dac640e3a1921c914a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gab91887d7565059dac640e3a1921c914a\">More...</a><br /></td></tr>\n<tr class=\"separator:gab91887d7565059dac640e3a1921c914a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf991cad0b34f64e33af186326dbc4d66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">mat3x4</a></td></tr>\n<tr class=\"memdesc:gaf991cad0b34f64e33af186326dbc4d66\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gaf991cad0b34f64e33af186326dbc4d66\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf991cad0b34f64e33af186326dbc4d66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad941c947ad6cdd117a0e8554a4754983\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">mat4x2</a></td></tr>\n<tr class=\"memdesc:gad941c947ad6cdd117a0e8554a4754983\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gad941c947ad6cdd117a0e8554a4754983\">More...</a><br /></td></tr>\n<tr class=\"separator:gad941c947ad6cdd117a0e8554a4754983\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7574544bb94777bdbd2eb224eb72fd0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">mat4x3</a></td></tr>\n<tr class=\"memdesc:gac7574544bb94777bdbd2eb224eb72fd0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gac7574544bb94777bdbd2eb224eb72fd0\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7574544bb94777bdbd2eb224eb72fd0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab2d35cc2655f44d60958d60a1de34e81\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">mat4x4</a></td></tr>\n<tr class=\"memdesc:gab2d35cc2655f44d60958d60a1de34e81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#gab2d35cc2655f44d60958d60a1de34e81\">More...</a><br /></td></tr>\n<tr class=\"separator:gab2d35cc2655f44d60958d60a1de34e81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0db98d836c5549d31cf64ecd043b7af7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">mat4</a></td></tr>\n<tr class=\"memdesc:ga0db98d836c5549d31cf64ecd043b7af7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers.  <a href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0db98d836c5549d31cf64ecd043b7af7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Matrix types of with C columns and R rows where C and R are values between 2 to 4 included. </p>\n<p>These types have exhaustive sets of operators. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga21dbd1f987775d7cc7607c139531c7e6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, defaultp &gt; dmat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of double-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00063_source.html#l00020\">20</a> of file <a class=\"el\" href=\"a00063_source.html\">matrix_double2x2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga66b6a9af787e468a46dfe24189e87f9b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, double, defaultp &gt; dmat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of double-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00063_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00063_source.html\">matrix_double2x2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga92cd388753d48e20de69ea2dbedf826a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, double, defaultp &gt; dmat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 3 components matrix of double-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00065_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00065_source.html\">matrix_double2x3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaef2198807e937072803ae0ae45e1965e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, double, defaultp &gt; dmat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 4 components matrix of double-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00067_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00067_source.html\">matrix_double2x4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6f40aa56265b4b0ccad41b86802efe33\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, defaultp &gt; dmat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of double-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00071_source.html#l00020\">20</a> of file <a class=\"el\" href=\"a00071_source.html\">matrix_double3x3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga001e3e0638fbf8719788fc64c5b8cf39\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, double, defaultp &gt; dmat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 2 components matrix of double-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00069_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00069_source.html\">matrix_double3x2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga970cb3306be25a5ca5db5a9456831228\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, double, defaultp &gt; dmat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of double-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00071_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00071_source.html\">matrix_double3x3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0412a634d183587e6188e9b11869f8f4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, double, defaultp &gt; dmat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 4 components matrix of double-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00073_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00073_source.html\">matrix_double3x4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0f34486bb7fec8e5a5b3830b6a6cbeca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, defaultp &gt; dmat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of double-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00079_source.html#l00020\">20</a> of file <a class=\"el\" href=\"a00079_source.html\">matrix_double4x4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9bc0b3ab8b6ba2cb6782e179ad7ad156\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, double, defaultp &gt; dmat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 2 components matrix of double-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00075_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00075_source.html\">matrix_double4x2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacd18864049f8c83799babe7e596ca05b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, double, defaultp &gt; dmat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 3 components matrix of double-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00077_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00077_source.html\">matrix_double4x3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad5a6484b983b74f9d801cab8bc4e6a10\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, double, defaultp &gt; dmat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of double-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00079_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00079_source.html\">matrix_double4x4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8dd59e7fc6913ac5d61b86553e9148ba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, defaultp &gt; mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of single-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00082_source.html#l00020\">20</a> of file <a class=\"el\" href=\"a00082_source.html\">matrix_float2x2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaa17ef6bfa4e4f2692348b1460c8efcb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, defaultp &gt; mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of single-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00082_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00082_source.html\">matrix_float2x2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga493ab21243abe564b3f7d381e677d29a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, defaultp &gt; mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 3 components matrix of single-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00084_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00084_source.html\">matrix_float2x3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8e879b57ddd81e5bf5a88929844e8b40\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, defaultp &gt; mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 4 components matrix of single-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00086_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00086_source.html\">matrix_float2x4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaefb0fc7a4960b782c18708bb6b655262\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, defaultp &gt; mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of single-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00090_source.html#l00020\">20</a> of file <a class=\"el\" href=\"a00090_source.html\">matrix_float3x3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab91887d7565059dac640e3a1921c914a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, defaultp &gt; mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of single-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00090_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00090_source.html\">matrix_float3x3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf991cad0b34f64e33af186326dbc4d66\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, defaultp &gt; mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 4 components matrix of single-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00092_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00092_source.html\">matrix_float3x4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0db98d836c5549d31cf64ecd043b7af7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, defaultp &gt; mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of single-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00098_source.html#l00020\">20</a> of file <a class=\"el\" href=\"a00098_source.html\">matrix_float4x4.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad941c947ad6cdd117a0e8554a4754983\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, defaultp &gt; mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 2 components matrix of single-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00094_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00094_source.html\">matrix_float4x2.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac7574544bb94777bdbd2eb224eb72fd0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, defaultp &gt; mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 3 components matrix of single-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00096_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00096_source.html\">matrix_float4x3.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab2d35cc2655f44d60958d60a1de34e81\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, defaultp &gt; mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of single-precision floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00098_source.html#l00015\">15</a> of file <a class=\"el\" href=\"a00098_source.html\">matrix_float4x4.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00284.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Matrix types with precision qualifiers</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Matrix types with precision qualifiers<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Matrix types with precision qualifiers which may result in various precision in term of ULPs.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga369b447bb1b312449b679ea1f90f3cea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">highp_dmat2</a></td></tr>\n<tr class=\"memdesc:ga369b447bb1b312449b679ea1f90f3cea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga369b447bb1b312449b679ea1f90f3cea\">More...</a><br /></td></tr>\n<tr class=\"separator:ga369b447bb1b312449b679ea1f90f3cea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae27ac20302c2e39b6c78e7fe18e62ef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">highp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gae27ac20302c2e39b6c78e7fe18e62ef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7\">More...</a><br /></td></tr>\n<tr class=\"separator:gae27ac20302c2e39b6c78e7fe18e62ef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad4689ec33bc2c26e10132b174b49001a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">highp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gad4689ec33bc2c26e10132b174b49001a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gad4689ec33bc2c26e10132b174b49001a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad4689ec33bc2c26e10132b174b49001a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ceeb46670fdc000a0701910cc5061c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">highp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga5ceeb46670fdc000a0701910cc5061c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga5ceeb46670fdc000a0701910cc5061c9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5ceeb46670fdc000a0701910cc5061c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga86d6d4dbad92ffdcc759773340e15a97\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">highp_dmat3</a></td></tr>\n<tr class=\"memdesc:ga86d6d4dbad92ffdcc759773340e15a97\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga86d6d4dbad92ffdcc759773340e15a97\">More...</a><br /></td></tr>\n<tr class=\"separator:ga86d6d4dbad92ffdcc759773340e15a97\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3647309010a2160e9ec89bc6f7c95c35\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">highp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga3647309010a2160e9ec89bc6f7c95c35\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3647309010a2160e9ec89bc6f7c95c35\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3647309010a2160e9ec89bc6f7c95c35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae367ea93c4ad8a7c101dd27b8b2b04ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">highp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:gae367ea93c4ad8a7c101dd27b8b2b04ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce\">More...</a><br /></td></tr>\n<tr class=\"separator:gae367ea93c4ad8a7c101dd27b8b2b04ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6543eeeb64f48d79a0b96484308c50f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">highp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga6543eeeb64f48d79a0b96484308c50f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga6543eeeb64f48d79a0b96484308c50f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6543eeeb64f48d79a0b96484308c50f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga945254f459860741138bceb74da496b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga945254f459860741138bceb74da496b9\">highp_dmat4</a></td></tr>\n<tr class=\"memdesc:ga945254f459860741138bceb74da496b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga945254f459860741138bceb74da496b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga945254f459860741138bceb74da496b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeda1f474c668eaecc443bea85a4a4eca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">highp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gaeda1f474c668eaecc443bea85a4a4eca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaeda1f474c668eaecc443bea85a4a4eca\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeda1f474c668eaecc443bea85a4a4eca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacf237c2d8832fe8db2d7e187585d34bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">highp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gacf237c2d8832fe8db2d7e187585d34bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gacf237c2d8832fe8db2d7e187585d34bd\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf237c2d8832fe8db2d7e187585d34bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga118d24a3d12c034e7cccef7bf2f01b8a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">highp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga118d24a3d12c034e7cccef7bf2f01b8a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga118d24a3d12c034e7cccef7bf2f01b8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d5a0055544a516237dcdace049b143d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">highp_mat2</a></td></tr>\n<tr class=\"memdesc:ga4d5a0055544a516237dcdace049b143d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga4d5a0055544a516237dcdace049b143d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4d5a0055544a516237dcdace049b143d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2352ae43b284c9f71446674c0208c05d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">highp_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga2352ae43b284c9f71446674c0208c05d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2352ae43b284c9f71446674c0208c05d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2352ae43b284c9f71446674c0208c05d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a0e3fe41512b0494e598f5c58722f19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">highp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga7a0e3fe41512b0494e598f5c58722f19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga7a0e3fe41512b0494e598f5c58722f19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a0e3fe41512b0494e598f5c58722f19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">highp_mat2x4</a></td></tr>\n<tr class=\"memdesc:ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3fd9849f3da5ed6e3decc3fb10a20b3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">highp_mat3</a></td></tr>\n<tr class=\"memdesc:ga3fd9849f3da5ed6e3decc3fb10a20b3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3fd9849f3da5ed6e3decc3fb10a20b3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1eda47a00027ec440eac05d63739c71b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">highp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga1eda47a00027ec440eac05d63739c71b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga1eda47a00027ec440eac05d63739c71b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1eda47a00027ec440eac05d63739c71b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ea82e12f4d7afcfce8f59894d400230\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">highp_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga2ea82e12f4d7afcfce8f59894d400230\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2ea82e12f4d7afcfce8f59894d400230\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ea82e12f4d7afcfce8f59894d400230\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6454b3a26ea30f69de8e44c08a63d1b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">highp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga6454b3a26ea30f69de8e44c08a63d1b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6454b3a26ea30f69de8e44c08a63d1b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad72e13d669d039f12ae5afa23148adc1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">highp_mat4</a></td></tr>\n<tr class=\"memdesc:gad72e13d669d039f12ae5afa23148adc1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#gad72e13d669d039f12ae5afa23148adc1\">More...</a><br /></td></tr>\n<tr class=\"separator:gad72e13d669d039f12ae5afa23148adc1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab68b66e6d2c37b804d0baf970fa4f0e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5\">highp_mat4x2</a></td></tr>\n<tr class=\"memdesc:gab68b66e6d2c37b804d0baf970fa4f0e5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5\">More...</a><br /></td></tr>\n<tr class=\"separator:gab68b66e6d2c37b804d0baf970fa4f0e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8d5a4e65fb976e4553b84995b95ecb38\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">highp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga8d5a4e65fb976e4553b84995b95ecb38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8d5a4e65fb976e4553b84995b95ecb38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58cc504be0e3b61c48bc91554a767b9f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">highp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga58cc504be0e3b61c48bc91554a767b9f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga58cc504be0e3b61c48bc91554a767b9f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58cc504be0e3b61c48bc91554a767b9f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8e2727a6e7aa68280245bb0022118e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">lowp_dmat2</a></td></tr>\n<tr class=\"memdesc:gad8e2727a6e7aa68280245bb0022118e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gad8e2727a6e7aa68280245bb0022118e1\">More...</a><br /></td></tr>\n<tr class=\"separator:gad8e2727a6e7aa68280245bb0022118e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac61b94f5d9775f83f321bac899322fe2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">lowp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gac61b94f5d9775f83f321bac899322fe2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gac61b94f5d9775f83f321bac899322fe2\">More...</a><br /></td></tr>\n<tr class=\"separator:gac61b94f5d9775f83f321bac899322fe2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6bf2f5bde7ad5b9c289f777b93094af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">lowp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gaf6bf2f5bde7ad5b9c289f777b93094af\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6bf2f5bde7ad5b9c289f777b93094af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga97507a31ecee8609887d0f23bbde92c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">lowp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga97507a31ecee8609887d0f23bbde92c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga97507a31ecee8609887d0f23bbde92c7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga97507a31ecee8609887d0f23bbde92c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0cab80beee64a5f8d2ae4e823983063a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">lowp_dmat3</a></td></tr>\n<tr class=\"memdesc:ga0cab80beee64a5f8d2ae4e823983063a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga0cab80beee64a5f8d2ae4e823983063a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0cab80beee64a5f8d2ae4e823983063a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1e0ea3fba496bc7c6f620d2590acb66b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">lowp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga1e0ea3fba496bc7c6f620d2590acb66b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e0ea3fba496bc7c6f620d2590acb66b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac017848a9df570f60916a21a297b1e8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">lowp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:gac017848a9df570f60916a21a297b1e8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gac017848a9df570f60916a21a297b1e8e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac017848a9df570f60916a21a297b1e8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga93add35d2a44c5830978b827e8c295e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">lowp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga93add35d2a44c5830978b827e8c295e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga93add35d2a44c5830978b827e8c295e8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga93add35d2a44c5830978b827e8c295e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga708bc5b91bbfedd21debac8dcf2a64cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">lowp_dmat4</a></td></tr>\n<tr class=\"memdesc:ga708bc5b91bbfedd21debac8dcf2a64cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga708bc5b91bbfedd21debac8dcf2a64cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga382dc5295cead78766239a8457abfa98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">lowp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga382dc5295cead78766239a8457abfa98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga382dc5295cead78766239a8457abfa98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga382dc5295cead78766239a8457abfa98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">lowp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b0413198b7e9f061f7534a221c9dac9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">lowp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga5b0413198b7e9f061f7534a221c9dac9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga5b0413198b7e9f061f7534a221c9dac9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b0413198b7e9f061f7534a221c9dac9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae400c4ce1f5f3e1fa12861b2baed331a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">lowp_mat2</a></td></tr>\n<tr class=\"memdesc:gae400c4ce1f5f3e1fa12861b2baed331a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae400c4ce1f5f3e1fa12861b2baed331a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2df7cdaf9a571ce7a1b09435f502c694\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">lowp_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga2df7cdaf9a571ce7a1b09435f502c694\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2df7cdaf9a571ce7a1b09435f502c694\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3eee3a74d0f1de8635d846dfb29ec4bb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">lowp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga3eee3a74d0f1de8635d846dfb29ec4bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3eee3a74d0f1de8635d846dfb29ec4bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade27f8324a16626cbce5d3e7da66b070\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">lowp_mat2x4</a></td></tr>\n<tr class=\"memdesc:gade27f8324a16626cbce5d3e7da66b070\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gade27f8324a16626cbce5d3e7da66b070\">More...</a><br /></td></tr>\n<tr class=\"separator:gade27f8324a16626cbce5d3e7da66b070\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6271ebc85ed778ccc15458c3d86fc854\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">lowp_mat3</a></td></tr>\n<tr class=\"memdesc:ga6271ebc85ed778ccc15458c3d86fc854\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga6271ebc85ed778ccc15458c3d86fc854\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6271ebc85ed778ccc15458c3d86fc854\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaabf6cf90fd31efe25c94965507e98390\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">lowp_mat3x2</a></td></tr>\n<tr class=\"memdesc:gaabf6cf90fd31efe25c94965507e98390\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaabf6cf90fd31efe25c94965507e98390\">More...</a><br /></td></tr>\n<tr class=\"separator:gaabf6cf90fd31efe25c94965507e98390\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63362cb4a63fc1be7d2e49cd5d574c84\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">lowp_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga63362cb4a63fc1be7d2e49cd5d574c84\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84\">More...</a><br /></td></tr>\n<tr class=\"separator:ga63362cb4a63fc1be7d2e49cd5d574c84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac5fc6786688eff02904ca5e7d6960092\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">lowp_mat3x4</a></td></tr>\n<tr class=\"memdesc:gac5fc6786688eff02904ca5e7d6960092\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gac5fc6786688eff02904ca5e7d6960092\">More...</a><br /></td></tr>\n<tr class=\"separator:gac5fc6786688eff02904ca5e7d6960092\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2dedee030500865267cd5851c00c139d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">lowp_mat4</a></td></tr>\n<tr class=\"memdesc:ga2dedee030500865267cd5851c00c139d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2dedee030500865267cd5851c00c139d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2dedee030500865267cd5851c00c139d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafa3cdb8f24d09d761ec9ae2a4c7e5e21\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21\">lowp_mat4x2</a></td></tr>\n<tr class=\"memdesc:gafa3cdb8f24d09d761ec9ae2a4c7e5e21\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21\">More...</a><br /></td></tr>\n<tr class=\"separator:gafa3cdb8f24d09d761ec9ae2a4c7e5e21\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga534c3ef5c3b8fdd8656b6afc205b4b77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">lowp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga534c3ef5c3b8fdd8656b6afc205b4b77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77\">More...</a><br /></td></tr>\n<tr class=\"separator:ga534c3ef5c3b8fdd8656b6afc205b4b77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga686468a9a815bd4db8cddae42a6d6b87\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">lowp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga686468a9a815bd4db8cddae42a6d6b87\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga686468a9a815bd4db8cddae42a6d6b87\">More...</a><br /></td></tr>\n<tr class=\"separator:ga686468a9a815bd4db8cddae42a6d6b87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6205fd19be355600334edef6af0b27cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">mediump_dmat2</a></td></tr>\n<tr class=\"memdesc:ga6205fd19be355600334edef6af0b27cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga6205fd19be355600334edef6af0b27cb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6205fd19be355600334edef6af0b27cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga51dc36a7719cb458fa5114831c20d64f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">mediump_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga51dc36a7719cb458fa5114831c20d64f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga51dc36a7719cb458fa5114831c20d64f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga51dc36a7719cb458fa5114831c20d64f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga741e05adf1f12d5d913f67088db1009a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">mediump_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga741e05adf1f12d5d913f67088db1009a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga741e05adf1f12d5d913f67088db1009a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga741e05adf1f12d5d913f67088db1009a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga685bda24922d112786af385deb4deb43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">mediump_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga685bda24922d112786af385deb4deb43\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga685bda24922d112786af385deb4deb43\">More...</a><br /></td></tr>\n<tr class=\"separator:ga685bda24922d112786af385deb4deb43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga939fbf9c53008a8e84c7dd7cf8de29e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">mediump_dmat3</a></td></tr>\n<tr class=\"memdesc:ga939fbf9c53008a8e84c7dd7cf8de29e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga939fbf9c53008a8e84c7dd7cf8de29e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2076157df85e49b8c021e03e46a376c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">mediump_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga2076157df85e49b8c021e03e46a376c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga2076157df85e49b8c021e03e46a376c1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2076157df85e49b8c021e03e46a376c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga47bd2aae4701ee2fc865674a9df3d7a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">mediump_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga47bd2aae4701ee2fc865674a9df3d7a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga47bd2aae4701ee2fc865674a9df3d7a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a132bd05675c2e46556f67cf738600b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">mediump_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga3a132bd05675c2e46556f67cf738600b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga3a132bd05675c2e46556f67cf738600b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a132bd05675c2e46556f67cf738600b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf650bc667bf2a0e496b5a9182bc8d378\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">mediump_dmat4</a></td></tr>\n<tr class=\"memdesc:gaf650bc667bf2a0e496b5a9182bc8d378\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf650bc667bf2a0e496b5a9182bc8d378\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae220fa4c5a7b13ef2ab0420340de645c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">mediump_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gae220fa4c5a7b13ef2ab0420340de645c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae220fa4c5a7b13ef2ab0420340de645c\">More...</a><br /></td></tr>\n<tr class=\"separator:gae220fa4c5a7b13ef2ab0420340de645c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43ef60e4d996db15c9c8f069a96ff763\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">mediump_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga43ef60e4d996db15c9c8f069a96ff763\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga43ef60e4d996db15c9c8f069a96ff763\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43ef60e4d996db15c9c8f069a96ff763\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5389b3ab32dc0d72bea00057ab6d1dd3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">mediump_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga5389b3ab32dc0d72bea00057ab6d1dd3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5389b3ab32dc0d72bea00057ab6d1dd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga745452bd9c89f5ad948203e4fb4b4ea3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">mediump_mat2</a></td></tr>\n<tr class=\"memdesc:ga745452bd9c89f5ad948203e4fb4b4ea3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga745452bd9c89f5ad948203e4fb4b4ea3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0cdf57d29f9448864237b2fb3e39aa1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">mediump_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga0cdf57d29f9448864237b2fb3e39aa1d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0cdf57d29f9448864237b2fb3e39aa1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga497d513d552d927537d61fa11e3701ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">mediump_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga497d513d552d927537d61fa11e3701ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga497d513d552d927537d61fa11e3701ab\">More...</a><br /></td></tr>\n<tr class=\"separator:ga497d513d552d927537d61fa11e3701ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7b75ea2e09fa686a79bbe9b6ca68ee5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">mediump_mat2x4</a></td></tr>\n<tr class=\"memdesc:gae7b75ea2e09fa686a79bbe9b6ca68ee5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7b75ea2e09fa686a79bbe9b6ca68ee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5aae49834d02732942f44e61d7bce136\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">mediump_mat3</a></td></tr>\n<tr class=\"memdesc:ga5aae49834d02732942f44e61d7bce136\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga5aae49834d02732942f44e61d7bce136\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5aae49834d02732942f44e61d7bce136\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9e1c9ee65fef547bde793e69723e24eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">mediump_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga9e1c9ee65fef547bde793e69723e24eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga9e1c9ee65fef547bde793e69723e24eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9e1c9ee65fef547bde793e69723e24eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc0f2f4ad21c90b341881cf056f8650e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">mediump_mat3x3</a></td></tr>\n<tr class=\"memdesc:gabc0f2f4ad21c90b341881cf056f8650e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gabc0f2f4ad21c90b341881cf056f8650e\">More...</a><br /></td></tr>\n<tr class=\"separator:gabc0f2f4ad21c90b341881cf056f8650e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa669c6675c3405f76c0b14020d1c0d61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">mediump_mat3x4</a></td></tr>\n<tr class=\"memdesc:gaa669c6675c3405f76c0b14020d1c0d61\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gaa669c6675c3405f76c0b14020d1c0d61\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa669c6675c3405f76c0b14020d1c0d61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab8531bc3f269aa45835cd6e1972b7fc7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">mediump_mat4</a></td></tr>\n<tr class=\"memdesc:gab8531bc3f269aa45835cd6e1972b7fc7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7\">More...</a><br /></td></tr>\n<tr class=\"separator:gab8531bc3f269aa45835cd6e1972b7fc7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad75706b70545412ba9ac27d5ee210f66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#gad75706b70545412ba9ac27d5ee210f66\">mediump_mat4x2</a></td></tr>\n<tr class=\"memdesc:gad75706b70545412ba9ac27d5ee210f66\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#gad75706b70545412ba9ac27d5ee210f66\">More...</a><br /></td></tr>\n<tr class=\"separator:gad75706b70545412ba9ac27d5ee210f66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a1440b5ea3cf84d5b06c79b534bd770\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">mediump_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga4a1440b5ea3cf84d5b06c79b534bd770\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a1440b5ea3cf84d5b06c79b534bd770\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga15bca2b70917d9752231160d9da74b01\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">mediump_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga15bca2b70917d9752231160d9da74b01\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.  <a href=\"a00284.html#ga15bca2b70917d9752231160d9da74b01\">More...</a><br /></td></tr>\n<tr class=\"separator:ga15bca2b70917d9752231160d9da74b01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Matrix types with precision qualifiers which may result in various precision in term of ULPs. </p>\n<p>GLSL allows defining qualifiers for particular variables. With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility, with OpenGL ES's GLSL, these qualifiers do have an effect.</p>\n<p>C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing: a number of typedefs that use a particular qualifier.</p>\n<p>None of these types make any guarantees about the actual qualifier used. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga369b447bb1b312449b679ea1f90f3cea\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, highp &gt; highp_dmat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00064_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00064_source.html\">matrix_double2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae27ac20302c2e39b6c78e7fe18e62ef7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, double, highp &gt; highp_dmat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00064_source.html#l00046\">46</a> of file <a class=\"el\" href=\"a00064_source.html\">matrix_double2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad4689ec33bc2c26e10132b174b49001a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, double, highp &gt; highp_dmat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00066_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00066_source.html\">matrix_double2x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5ceeb46670fdc000a0701910cc5061c9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, double, highp &gt; highp_dmat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00068_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00068_source.html\">matrix_double2x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga86d6d4dbad92ffdcc759773340e15a97\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, highp &gt; highp_dmat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00072_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00072_source.html\">matrix_double3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3647309010a2160e9ec89bc6f7c95c35\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, double, highp &gt; highp_dmat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00070_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00070_source.html\">matrix_double3x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae367ea93c4ad8a7c101dd27b8b2b04ce\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, double, highp &gt; highp_dmat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00072_source.html#l00046\">46</a> of file <a class=\"el\" href=\"a00072_source.html\">matrix_double3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6543eeeb64f48d79a0b96484308c50f0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, double, highp &gt; highp_dmat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00074_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00074_source.html\">matrix_double3x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga945254f459860741138bceb74da496b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, highp &gt; highp_dmat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00080_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00080_source.html\">matrix_double4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaeda1f474c668eaecc443bea85a4a4eca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, double, highp &gt; highp_dmat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00076_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00076_source.html\">matrix_double4x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacf237c2d8832fe8db2d7e187585d34bd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, double, highp &gt; highp_dmat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00078_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00078_source.html\">matrix_double4x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga118d24a3d12c034e7cccef7bf2f01b8a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, double, highp &gt; highp_dmat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00080_source.html#l00046\">46</a> of file <a class=\"el\" href=\"a00080_source.html\">matrix_double4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4d5a0055544a516237dcdace049b143d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, highp &gt; highp_mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00083_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00083_source.html\">matrix_float2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2352ae43b284c9f71446674c0208c05d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, highp &gt; highp_mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00083_source.html#l00046\">46</a> of file <a class=\"el\" href=\"a00083_source.html\">matrix_float2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7a0e3fe41512b0494e598f5c58722f19\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, highp &gt; highp_mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00085_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00085_source.html\">matrix_float2x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga61f36a81f2ed1b5f9fc8bc3b26faec8f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, highp &gt; highp_mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00087_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00087_source.html\">matrix_float2x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3fd9849f3da5ed6e3decc3fb10a20b3e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, highp &gt; highp_mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00091_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00091_source.html\">matrix_float3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1eda47a00027ec440eac05d63739c71b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, highp &gt; highp_mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00089_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00089_source.html\">matrix_float3x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2ea82e12f4d7afcfce8f59894d400230\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, highp &gt; highp_mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00091_source.html#l00046\">46</a> of file <a class=\"el\" href=\"a00091_source.html\">matrix_float3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6454b3a26ea30f69de8e44c08a63d1b7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, highp &gt; highp_mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00093_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00093_source.html\">matrix_float3x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad72e13d669d039f12ae5afa23148adc1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, highp &gt; highp_mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00099_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00099_source.html\">matrix_float4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab68b66e6d2c37b804d0baf970fa4f0e5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, highp &gt; highp_mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00095_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00095_source.html\">matrix_float4x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8d5a4e65fb976e4553b84995b95ecb38\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, highp &gt; highp_mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00097_source.html#l00028\">28</a> of file <a class=\"el\" href=\"a00097_source.html\">matrix_float4x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga58cc504be0e3b61c48bc91554a767b9f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, highp &gt; highp_mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00099_source.html#l00046\">46</a> of file <a class=\"el\" href=\"a00099_source.html\">matrix_float4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad8e2727a6e7aa68280245bb0022118e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, lowp &gt; lowp_dmat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00064_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00064_source.html\">matrix_double2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac61b94f5d9775f83f321bac899322fe2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, double, lowp &gt; lowp_dmat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00064_source.html#l00034\">34</a> of file <a class=\"el\" href=\"a00064_source.html\">matrix_double2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf6bf2f5bde7ad5b9c289f777b93094af\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, double, lowp &gt; lowp_dmat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00066_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00066_source.html\">matrix_double2x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga97507a31ecee8609887d0f23bbde92c7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, double, lowp &gt; lowp_dmat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00068_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00068_source.html\">matrix_double2x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0cab80beee64a5f8d2ae4e823983063a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, lowp &gt; lowp_dmat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00072_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00072_source.html\">matrix_double3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1e0ea3fba496bc7c6f620d2590acb66b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, double, lowp &gt; lowp_dmat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00070_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00070_source.html\">matrix_double3x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac017848a9df570f60916a21a297b1e8e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, double, lowp &gt; lowp_dmat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00072_source.html#l00034\">34</a> of file <a class=\"el\" href=\"a00072_source.html\">matrix_double3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga93add35d2a44c5830978b827e8c295e8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, double, lowp &gt; lowp_dmat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00074_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00074_source.html\">matrix_double3x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga708bc5b91bbfedd21debac8dcf2a64cd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, lowp &gt; lowp_dmat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00080_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00080_source.html\">matrix_double4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga382dc5295cead78766239a8457abfa98\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, double, lowp &gt; lowp_dmat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00076_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00076_source.html\">matrix_double4x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3d7ea07da7c6e5c81a3f4c8b3d44056e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, double, lowp &gt; lowp_dmat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00078_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00078_source.html\">matrix_double4x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5b0413198b7e9f061f7534a221c9dac9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, double, lowp &gt; lowp_dmat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00080_source.html#l00034\">34</a> of file <a class=\"el\" href=\"a00080_source.html\">matrix_double4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae400c4ce1f5f3e1fa12861b2baed331a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, lowp &gt; lowp_mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00083_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00083_source.html\">matrix_float2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2df7cdaf9a571ce7a1b09435f502c694\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, lowp &gt; lowp_mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00083_source.html#l00034\">34</a> of file <a class=\"el\" href=\"a00083_source.html\">matrix_float2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3eee3a74d0f1de8635d846dfb29ec4bb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, lowp &gt; lowp_mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00085_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00085_source.html\">matrix_float2x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gade27f8324a16626cbce5d3e7da66b070\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, lowp &gt; lowp_mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00087_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00087_source.html\">matrix_float2x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6271ebc85ed778ccc15458c3d86fc854\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, lowp &gt; lowp_mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00091_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00091_source.html\">matrix_float3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaabf6cf90fd31efe25c94965507e98390\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, lowp &gt; lowp_mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00089_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00089_source.html\">matrix_float3x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga63362cb4a63fc1be7d2e49cd5d574c84\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, lowp &gt; lowp_mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00091_source.html#l00034\">34</a> of file <a class=\"el\" href=\"a00091_source.html\">matrix_float3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac5fc6786688eff02904ca5e7d6960092\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, lowp &gt; lowp_mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00093_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00093_source.html\">matrix_float3x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2dedee030500865267cd5851c00c139d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, lowp &gt; lowp_mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00099_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00099_source.html\">matrix_float4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafa3cdb8f24d09d761ec9ae2a4c7e5e21\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, lowp &gt; lowp_mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00095_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00095_source.html\">matrix_float4x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga534c3ef5c3b8fdd8656b6afc205b4b77\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, lowp &gt; lowp_mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00097_source.html#l00016\">16</a> of file <a class=\"el\" href=\"a00097_source.html\">matrix_float4x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga686468a9a815bd4db8cddae42a6d6b87\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, lowp &gt; lowp_mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00099_source.html#l00034\">34</a> of file <a class=\"el\" href=\"a00099_source.html\">matrix_float4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6205fd19be355600334edef6af0b27cb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, mediump &gt; mediump_dmat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00064_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00064_source.html\">matrix_double2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga51dc36a7719cb458fa5114831c20d64f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, double, mediump &gt; mediump_dmat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00064_source.html#l00040\">40</a> of file <a class=\"el\" href=\"a00064_source.html\">matrix_double2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga741e05adf1f12d5d913f67088db1009a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, double, mediump &gt; mediump_dmat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00066_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00066_source.html\">matrix_double2x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga685bda24922d112786af385deb4deb43\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, double, mediump &gt; mediump_dmat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00068_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00068_source.html\">matrix_double2x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga939fbf9c53008a8e84c7dd7cf8de29e2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, mediump &gt; mediump_dmat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00072_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00072_source.html\">matrix_double3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2076157df85e49b8c021e03e46a376c1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, double, mediump &gt; mediump_dmat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00070_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00070_source.html\">matrix_double3x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga47bd2aae4701ee2fc865674a9df3d7a6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, double, mediump &gt; mediump_dmat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00072_source.html#l00040\">40</a> of file <a class=\"el\" href=\"a00072_source.html\">matrix_double3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3a132bd05675c2e46556f67cf738600b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, double, mediump &gt; mediump_dmat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00074_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00074_source.html\">matrix_double3x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf650bc667bf2a0e496b5a9182bc8d378\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, mediump &gt; mediump_dmat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00080_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00080_source.html\">matrix_double4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae220fa4c5a7b13ef2ab0420340de645c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, double, mediump &gt; mediump_dmat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00076_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00076_source.html\">matrix_double4x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga43ef60e4d996db15c9c8f069a96ff763\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, double, mediump &gt; mediump_dmat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00078_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00078_source.html\">matrix_double4x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5389b3ab32dc0d72bea00057ab6d1dd3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, double, mediump &gt; mediump_dmat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00080_source.html#l00040\">40</a> of file <a class=\"el\" href=\"a00080_source.html\">matrix_double4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga745452bd9c89f5ad948203e4fb4b4ea3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, mediump &gt; mediump_mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00083_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00083_source.html\">matrix_float2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0cdf57d29f9448864237b2fb3e39aa1d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, mediump &gt; mediump_mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00083_source.html#l00040\">40</a> of file <a class=\"el\" href=\"a00083_source.html\">matrix_float2x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga497d513d552d927537d61fa11e3701ab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, mediump &gt; mediump_mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00085_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00085_source.html\">matrix_float2x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae7b75ea2e09fa686a79bbe9b6ca68ee5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, mediump &gt; mediump_mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00087_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00087_source.html\">matrix_float2x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5aae49834d02732942f44e61d7bce136\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, mediump &gt; mediump_mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00091_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00091_source.html\">matrix_float3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9e1c9ee65fef547bde793e69723e24eb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, mediump &gt; mediump_mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00089_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00089_source.html\">matrix_float3x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabc0f2f4ad21c90b341881cf056f8650e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, mediump &gt; mediump_mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00091_source.html#l00040\">40</a> of file <a class=\"el\" href=\"a00091_source.html\">matrix_float3x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa669c6675c3405f76c0b14020d1c0d61\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, mediump &gt; mediump_mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>3 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00093_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00093_source.html\">matrix_float3x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab8531bc3f269aa45835cd6e1972b7fc7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, mediump &gt; mediump_mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00099_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00099_source.html\">matrix_float4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad75706b70545412ba9ac27d5ee210f66\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, mediump &gt; mediump_mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00095_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00095_source.html\">matrix_float4x2_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4a1440b5ea3cf84d5b06c79b534bd770\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, mediump &gt; mediump_mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00097_source.html#l00022\">22</a> of file <a class=\"el\" href=\"a00097_source.html\">matrix_float4x3_precision.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga15bca2b70917d9752231160d9da74b01\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, mediump &gt; mediump_mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00099_source.html#l00040\">40</a> of file <a class=\"el\" href=\"a00099_source.html\">matrix_float4x4_precision.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00285.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Stable extensions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#groups\">Modules</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Stable extensions</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Additional features not specified by GLSL specification.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"groups\"></a>\nModules</h2></td></tr>\n<tr class=\"memitem:a00243\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00243.html\">GLM_EXT_matrix_clip_space</a></td></tr>\n<tr class=\"memdesc:a00243\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines functions that generate clip space transformation matrices. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00244\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00244.html\">GLM_EXT_matrix_common</a></td></tr>\n<tr class=\"memdesc:a00244\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines functions for common matrix operations. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00245\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00245.html\">GLM_EXT_matrix_projection</a></td></tr>\n<tr class=\"memdesc:a00245\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Functions that generate common projection transformation matrices. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00246\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00246.html\">GLM_EXT_matrix_relational</a></td></tr>\n<tr class=\"memdesc:a00246\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes comparison functions for matrix types that take a user defined epsilon values. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00247\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00247.html\">GLM_EXT_matrix_transform</a></td></tr>\n<tr class=\"memdesc:a00247\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Defines functions that generate common transformation matrices. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00248\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00248.html\">GLM_EXT_quaternion_common</a></td></tr>\n<tr class=\"memdesc:a00248\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides common functions for quaternion types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00249\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00249.html\">GLM_EXT_quaternion_double</a></td></tr>\n<tr class=\"memdesc:a00249\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes double-precision floating point quaternion type. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00250\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00250.html\">GLM_EXT_quaternion_double_precision</a></td></tr>\n<tr class=\"memdesc:a00250\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes double-precision floating point quaternion type with various precision in term of ULPs. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00251\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00251.html\">GLM_EXT_quaternion_exponential</a></td></tr>\n<tr class=\"memdesc:a00251\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides exponential functions for quaternion types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00252\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00252.html\">GLM_EXT_quaternion_float</a></td></tr>\n<tr class=\"memdesc:a00252\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes single-precision floating point quaternion type. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00253\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00253.html\">GLM_EXT_quaternion_float_precision</a></td></tr>\n<tr class=\"memdesc:a00253\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes single-precision floating point quaternion type with various precision in term of ULPs. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00254\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00254.html\">GLM_EXT_quaternion_geometric</a></td></tr>\n<tr class=\"memdesc:a00254\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides geometric functions for quaternion types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00255\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00255.html\">GLM_EXT_quaternion_relational</a></td></tr>\n<tr class=\"memdesc:a00255\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes comparison functions for quaternion types that take a user defined epsilon values. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00256\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00256.html\">GLM_EXT_quaternion_transform</a></td></tr>\n<tr class=\"memdesc:a00256\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides transformation functions for quaternion types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00257\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00257.html\">GLM_EXT_quaternion_trigonometric</a></td></tr>\n<tr class=\"memdesc:a00257\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides trigonometric functions for quaternion types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00258\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00258.html\">GLM_EXT_scalar_common</a></td></tr>\n<tr class=\"memdesc:a00258\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes min and max functions for 3 to 4 scalar parameters. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00259\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00259.html\">GLM_EXT_scalar_constants</a></td></tr>\n<tr class=\"memdesc:a00259\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Provides a list of constants and precomputed useful values. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00260\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00260.html\">GLM_EXT_scalar_int_sized</a></td></tr>\n<tr class=\"memdesc:a00260\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes sized signed integer scalar types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00261\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00261.html\">GLM_EXT_scalar_integer</a></td></tr>\n<tr class=\"memdesc:a00261\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00147.html\" title=\"GLM_EXT_scalar_integer \">glm/ext/scalar_integer.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00262\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00262.html\">GLM_EXT_scalar_relational</a></td></tr>\n<tr class=\"memdesc:a00262\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes comparison functions for scalar types that take a user defined epsilon values. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00263\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00263.html\">GLM_EXT_scalar_uint_sized</a></td></tr>\n<tr class=\"memdesc:a00263\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes sized unsigned integer scalar types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00264\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00264.html\">GLM_EXT_scalar_ulp</a></td></tr>\n<tr class=\"memdesc:a00264\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allow the measurement of the accuracy of a function against a reference implementation. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00265\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00265.html\">GLM_EXT_vector_bool1</a></td></tr>\n<tr class=\"memdesc:a00265\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes bvec1 vector type. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00266\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00266.html\">GLM_EXT_vector_bool1_precision</a></td></tr>\n<tr class=\"memdesc:a00266\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00267\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00267.html\">GLM_EXT_vector_common</a></td></tr>\n<tr class=\"memdesc:a00267\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes min and max functions for 3 to 4 vector parameters. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00268\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00268.html\">GLM_EXT_vector_double1</a></td></tr>\n<tr class=\"memdesc:a00268\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes double-precision floating point vector type with one component. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00269\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00269.html\">GLM_EXT_vector_double1_precision</a></td></tr>\n<tr class=\"memdesc:a00269\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00270\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00270.html\">GLM_EXT_vector_float1</a></td></tr>\n<tr class=\"memdesc:a00270\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes single-precision floating point vector type with one component. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00271\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00271.html\">GLM_EXT_vector_float1_precision</a></td></tr>\n<tr class=\"memdesc:a00271\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes highp_vec1, mediump_vec1 and lowp_vec1 types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00272\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00272.html\">GLM_EXT_vector_int1</a></td></tr>\n<tr class=\"memdesc:a00272\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes ivec1 vector type. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00273\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00273.html\">GLM_EXT_vector_int1_precision</a></td></tr>\n<tr class=\"memdesc:a00273\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes highp_ivec1, mediump_ivec1 and lowp_ivec1 types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00274\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00274.html\">GLM_EXT_vector_integer</a></td></tr>\n<tr class=\"memdesc:a00274\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00222.html\" title=\"GLM_EXT_vector_integer \">glm/ext/vector_integer.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00275\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00275.html\">GLM_EXT_vector_relational</a></td></tr>\n<tr class=\"memdesc:a00275\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes comparison functions for vector types that take a user defined epsilon values. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00276\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00276.html\">GLM_EXT_vector_uint1</a></td></tr>\n<tr class=\"memdesc:a00276\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes uvec1 vector type. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00277\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00277.html\">GLM_EXT_vector_uint1_precision</a></td></tr>\n<tr class=\"memdesc:a00277\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00278\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00278.html\">GLM_EXT_vector_ulp</a></td></tr>\n<tr class=\"memdesc:a00278\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Allow the measurement of the accuracy of a function against a reference implementation. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Additional features not specified by GLSL specification. </p>\n<p>EXT extensions are fully tested and documented.</p>\n<p>Even if it's highly unrecommended, it's possible to include all the extensions at once by including &lt;<a class=\"el\" href=\"a00027.html\" title=\"Core features (Dependence) \">glm/ext.hpp</a>&gt;. Otherwise, each extension needs to be included a specific file. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00286.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Recommended extensions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#groups\">Modules</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Recommended extensions</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Additional features not specified by GLSL specification.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"groups\"></a>\nModules</h2></td></tr>\n<tr class=\"memitem:a00288\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html\">GLM_GTC_bitfield</a></td></tr>\n<tr class=\"memdesc:a00288\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00009.html\" title=\"GLM_GTC_bitfield \">glm/gtc/bitfield.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00289\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html\">GLM_GTC_color_space</a></td></tr>\n<tr class=\"memdesc:a00289\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00012.html\" title=\"GLM_GTC_color_space \">glm/gtc/color_space.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00290\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html\">GLM_GTC_constants</a></td></tr>\n<tr class=\"memdesc:a00290\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00021.html\" title=\"GLM_GTC_constants \">glm/gtc/constants.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00291\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html\">GLM_GTC_epsilon</a></td></tr>\n<tr class=\"memdesc:a00291\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00024.html\" title=\"GLM_GTC_epsilon \">glm/gtc/epsilon.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00292\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00292.html\">GLM_GTC_integer</a></td></tr>\n<tr class=\"memdesc:a00292\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00041.html\" title=\"GLM_GTC_integer \">glm/gtc/integer.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00293\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html\">GLM_GTC_matrix_access</a></td></tr>\n<tr class=\"memdesc:a00293\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00058.html\" title=\"GLM_GTC_matrix_access \">glm/gtc/matrix_access.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00294\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html\">GLM_GTC_matrix_integer</a></td></tr>\n<tr class=\"memdesc:a00294\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00100.html\" title=\"GLM_GTC_matrix_integer \">glm/gtc/matrix_integer.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00295\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00295.html\">GLM_GTC_matrix_inverse</a></td></tr>\n<tr class=\"memdesc:a00295\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00100.html\" title=\"GLM_GTC_matrix_integer \">glm/gtc/matrix_integer.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00296\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00296.html\">GLM_GTC_matrix_transform</a></td></tr>\n<tr class=\"memdesc:a00296\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00109.html\" title=\"GLM_GTC_matrix_transform \">glm/gtc/matrix_transform.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00297\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00297.html\">GLM_GTC_noise</a></td></tr>\n<tr class=\"memdesc:a00297\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00112.html\" title=\"GLM_GTC_noise \">glm/gtc/noise.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00298\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html\">GLM_GTC_packing</a></td></tr>\n<tr class=\"memdesc:a00298\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00119.html\" title=\"GLM_GTC_packing \">glm/gtc/packing.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00299\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html\">GLM_GTC_quaternion</a></td></tr>\n<tr class=\"memdesc:a00299\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00125.html\" title=\"GLM_GTC_quaternion \">glm/gtc/quaternion.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00300\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html\">GLM_GTC_random</a></td></tr>\n<tr class=\"memdesc:a00300\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00137.html\" title=\"GLM_GTC_random \">glm/gtc/random.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00301\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html\">GLM_GTC_reciprocal</a></td></tr>\n<tr class=\"memdesc:a00301\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00140.html\" title=\"GLM_GTC_reciprocal \">glm/gtc/reciprocal.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00302\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html\">GLM_GTC_round</a></td></tr>\n<tr class=\"memdesc:a00302\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00143.html\" title=\"GLM_GTC_round \">glm/gtc/round.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00303\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html\">GLM_GTC_type_aligned</a></td></tr>\n<tr class=\"memdesc:a00303\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00161.html\" title=\"GLM_GTC_type_aligned \">glm/gtc/type_aligned.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00304\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html\">GLM_GTC_type_precision</a></td></tr>\n<tr class=\"memdesc:a00304\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00174.html\" title=\"GLM_GTC_type_precision \">glm/gtc/type_precision.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00305\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html\">GLM_GTC_type_ptr</a></td></tr>\n<tr class=\"memdesc:a00305\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00175.html\" title=\"GLM_GTC_type_ptr \">glm/gtc/type_ptr.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00306\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00306.html\">GLM_GTC_ulp</a></td></tr>\n<tr class=\"memdesc:a00306\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00182.html\" title=\"GLM_GTC_ulp \">glm/gtc/ulp.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00307\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00307.html\">GLM_GTC_vec1</a></td></tr>\n<tr class=\"memdesc:a00307\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00183.html\" title=\"GLM_GTC_vec1 \">glm/gtc/vec1.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Additional features not specified by GLSL specification. </p>\n<p>GTC extensions aim to be stable with tests and documentation.</p>\n<p>Even if it's highly unrecommended, it's possible to include all the extensions at once by including &lt;<a class=\"el\" href=\"a00027.html\" title=\"Core features (Dependence) \">glm/ext.hpp</a>&gt;. Otherwise, each extension needs to be included a specific file. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00287.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Experimental extensions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#groups\">Modules</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Experimental extensions</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Experimental features not specified by GLSL specification.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"groups\"></a>\nModules</h2></td></tr>\n<tr class=\"memitem:a00308\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html\">GLM_GTX_associated_min_max</a></td></tr>\n<tr class=\"memdesc:a00308\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00007.html\" title=\"GLM_GTX_associated_min_max \">glm/gtx/associated_min_max.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00309\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html\">GLM_GTX_bit</a></td></tr>\n<tr class=\"memdesc:a00309\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00008.html\" title=\"GLM_GTX_bit \">glm/gtx/bit.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00310\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00310.html\">GLM_GTX_closest_point</a></td></tr>\n<tr class=\"memdesc:a00310\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00010.html\" title=\"GLM_GTX_closest_point \">glm/gtx/closest_point.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00311\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html\">GLM_GTX_color_encoding</a></td></tr>\n<tr class=\"memdesc:a00311\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00011.html\" title=\"GLM_GTX_color_encoding \">glm/gtx/color_encoding.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00312\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html\">GLM_GTX_color_space</a></td></tr>\n<tr class=\"memdesc:a00312\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00013.html\" title=\"GLM_GTX_color_space \">glm/gtx/color_space.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00313\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html\">GLM_GTX_color_space_YCoCg</a></td></tr>\n<tr class=\"memdesc:a00313\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00014.html\" title=\"GLM_GTX_color_space_YCoCg \">glm/gtx/color_space_YCoCg.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00314\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html\">GLM_GTX_common</a></td></tr>\n<tr class=\"memdesc:a00314\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00016.html\" title=\"GLM_GTX_common \">glm/gtx/common.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00315\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html\">GLM_GTX_compatibility</a></td></tr>\n<tr class=\"memdesc:a00315\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00017.html\" title=\"GLM_GTX_compatibility \">glm/gtx/compatibility.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00316\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html\">GLM_GTX_component_wise</a></td></tr>\n<tr class=\"memdesc:a00316\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00018.html\" title=\"GLM_GTX_component_wise \">glm/gtx/component_wise.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00317\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html\">GLM_GTX_dual_quaternion</a></td></tr>\n<tr class=\"memdesc:a00317\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00022.html\" title=\"GLM_GTX_dual_quaternion \">glm/gtx/dual_quaternion.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00318\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html\">GLM_GTX_easing</a></td></tr>\n<tr class=\"memdesc:a00318\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00023.html\" title=\"GLM_GTX_easing \">glm/gtx/easing.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00319\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html\">GLM_GTX_euler_angles</a></td></tr>\n<tr class=\"memdesc:a00319\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00025.html\" title=\"GLM_GTX_euler_angles \">glm/gtx/euler_angles.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00320\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00320.html\">GLM_GTX_extend</a></td></tr>\n<tr class=\"memdesc:a00320\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00028.html\" title=\"GLM_GTX_extend \">glm/gtx/extend.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00321\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html\">GLM_GTX_extented_min_max</a></td></tr>\n<tr class=\"memdesc:a00321\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;glm/gtx/extented_min_max.hpp&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00322\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00322.html\">GLM_GTX_exterior_product</a></td></tr>\n<tr class=\"memdesc:a00322\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00030.html\" title=\"GLM_GTX_exterior_product \">glm/gtx/exterior_product.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00323\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html\">GLM_GTX_fast_exponential</a></td></tr>\n<tr class=\"memdesc:a00323\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00031.html\" title=\"GLM_GTX_fast_exponential \">glm/gtx/fast_exponential.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00324\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html\">GLM_GTX_fast_square_root</a></td></tr>\n<tr class=\"memdesc:a00324\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00032.html\" title=\"GLM_GTX_fast_square_root \">glm/gtx/fast_square_root.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00325\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html\">GLM_GTX_fast_trigonometry</a></td></tr>\n<tr class=\"memdesc:a00325\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00033.html\" title=\"GLM_GTX_fast_trigonometry \">glm/gtx/fast_trigonometry.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00326\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00326.html\">GLM_GTX_functions</a></td></tr>\n<tr class=\"memdesc:a00326\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00034.html\" title=\"GLM_GTX_functions \">glm/gtx/functions.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00327\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00327.html\">GLM_GTX_gradient_paint</a></td></tr>\n<tr class=\"memdesc:a00327\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00038.html\" title=\"GLM_GTX_gradient_paint \">glm/gtx/gradient_paint.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00328\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00328.html\">GLM_GTX_handed_coordinate_space</a></td></tr>\n<tr class=\"memdesc:a00328\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;glm/gtx/handed_coordinate_system.hpp&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00329\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00329.html\">GLM_GTX_hash</a></td></tr>\n<tr class=\"memdesc:a00329\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00040.html\" title=\"GLM_GTX_hash \">glm/gtx/hash.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00330\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html\">GLM_GTX_integer</a></td></tr>\n<tr class=\"memdesc:a00330\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00042.html\" title=\"GLM_GTX_integer \">glm/gtx/integer.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00331\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html\">GLM_GTX_intersect</a></td></tr>\n<tr class=\"memdesc:a00331\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00044.html\" title=\"GLM_GTX_intersect \">glm/gtx/intersect.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00332\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00332.html\">GLM_GTX_io</a></td></tr>\n<tr class=\"memdesc:a00332\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00045.html\" title=\"GLM_GTX_io \">glm/gtx/io.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00333\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00333.html\">GLM_GTX_log_base</a></td></tr>\n<tr class=\"memdesc:a00333\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00046.html\" title=\"GLM_GTX_log_base \">glm/gtx/log_base.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00334\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00334.html\">GLM_GTX_matrix_cross_product</a></td></tr>\n<tr class=\"memdesc:a00334\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00061.html\" title=\"GLM_GTX_matrix_cross_product \">glm/gtx/matrix_cross_product.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00335\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00335.html\">GLM_GTX_matrix_decompose</a></td></tr>\n<tr class=\"memdesc:a00335\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00062.html\" title=\"GLM_GTX_matrix_decompose \">glm/gtx/matrix_decompose.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00336\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html\">GLM_GTX_matrix_factorisation</a></td></tr>\n<tr class=\"memdesc:a00336\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00081.html\" title=\"GLM_GTX_matrix_factorisation \">glm/gtx/matrix_factorisation.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00337\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html\">GLM_GTX_matrix_interpolation</a></td></tr>\n<tr class=\"memdesc:a00337\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00101.html\" title=\"GLM_GTX_matrix_interpolation \">glm/gtx/matrix_interpolation.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00338\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html\">GLM_GTX_matrix_major_storage</a></td></tr>\n<tr class=\"memdesc:a00338\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00103.html\" title=\"GLM_GTX_matrix_major_storage \">glm/gtx/matrix_major_storage.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00339\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html\">GLM_GTX_matrix_operation</a></td></tr>\n<tr class=\"memdesc:a00339\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00104.html\" title=\"GLM_GTX_matrix_operation \">glm/gtx/matrix_operation.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00340\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html\">GLM_GTX_matrix_query</a></td></tr>\n<tr class=\"memdesc:a00340\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00106.html\" title=\"GLM_GTX_matrix_query \">glm/gtx/matrix_query.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00341\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html\">GLM_GTX_matrix_transform_2d</a></td></tr>\n<tr class=\"memdesc:a00341\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00110.html\" title=\"GLM_GTX_matrix_transform_2d \">glm/gtx/matrix_transform_2d.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00342\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00342.html\">GLM_GTX_mixed_producte</a></td></tr>\n<tr class=\"memdesc:a00342\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00111.html\" title=\"GLM_GTX_mixed_producte \">glm/gtx/mixed_product.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00343\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html\">GLM_GTX_norm</a></td></tr>\n<tr class=\"memdesc:a00343\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00113.html\" title=\"GLM_GTX_norm \">glm/gtx/norm.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00344\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00344.html\">GLM_GTX_normal</a></td></tr>\n<tr class=\"memdesc:a00344\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00114.html\" title=\"GLM_GTX_normal \">glm/gtx/normal.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00345\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00345.html\">GLM_GTX_normalize_dot</a></td></tr>\n<tr class=\"memdesc:a00345\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;glm/gtx/normalized_dot.hpp&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00346\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html\">GLM_GTX_number_precision</a></td></tr>\n<tr class=\"memdesc:a00346\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00116.html\" title=\"GLM_GTX_number_precision \">glm/gtx/number_precision.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00347\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00347.html\">GLM_GTX_optimum_pow</a></td></tr>\n<tr class=\"memdesc:a00347\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00117.html\" title=\"GLM_GTX_optimum_pow \">glm/gtx/optimum_pow.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00348\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00348.html\">GLM_GTX_orthonormalize</a></td></tr>\n<tr class=\"memdesc:a00348\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00118.html\" title=\"GLM_GTX_orthonormalize \">glm/gtx/orthonormalize.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00349\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00349.html\">GLM_GTX_perpendicular</a></td></tr>\n<tr class=\"memdesc:a00349\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00121.html\" title=\"GLM_GTX_perpendicular \">glm/gtx/perpendicular.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00350\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00350.html\">GLM_GTX_polar_coordinates</a></td></tr>\n<tr class=\"memdesc:a00350\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00122.html\" title=\"GLM_GTX_polar_coordinates \">glm/gtx/polar_coordinates.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00351\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00351.html\">GLM_GTX_projection</a></td></tr>\n<tr class=\"memdesc:a00351\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00123.html\" title=\"GLM_GTX_projection \">glm/gtx/projection.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00352\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html\">GLM_GTX_quaternion</a></td></tr>\n<tr class=\"memdesc:a00352\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00126.html\" title=\"GLM_GTX_quaternion \">glm/gtx/quaternion.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00353\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00353.html\">GLM_GTX_range</a></td></tr>\n<tr class=\"memdesc:a00353\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00138.html\" title=\"GLM_GTX_range \">glm/gtx/range.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00354\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html\">GLM_GTX_raw_data</a></td></tr>\n<tr class=\"memdesc:a00354\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00139.html\" title=\"GLM_GTX_raw_data \">glm/gtx/raw_data.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00355\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00355.html\">GLM_GTX_rotate_normalized_axis</a></td></tr>\n<tr class=\"memdesc:a00355\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00141.html\" title=\"GLM_GTX_rotate_normalized_axis \">glm/gtx/rotate_normalized_axis.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00356\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html\">GLM_GTX_rotate_vector</a></td></tr>\n<tr class=\"memdesc:a00356\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00142.html\" title=\"GLM_GTX_rotate_vector \">glm/gtx/rotate_vector.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00357\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00357.html\">GLM_GTX_scalar_relational</a></td></tr>\n<tr class=\"memdesc:a00357\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00150.html\" title=\"GLM_GTX_scalar_relational \">glm/gtx/scalar_relational.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00358\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00358.html\">GLM_GTX_spline</a></td></tr>\n<tr class=\"memdesc:a00358\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00154.html\" title=\"GLM_GTX_spline \">glm/gtx/spline.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00359\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html\">GLM_GTX_std_based_type</a></td></tr>\n<tr class=\"memdesc:a00359\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00155.html\" title=\"GLM_GTX_std_based_type \">glm/gtx/std_based_type.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00360\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00360.html\">GLM_GTX_string_cast</a></td></tr>\n<tr class=\"memdesc:a00360\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00156.html\" title=\"GLM_GTX_string_cast \">glm/gtx/string_cast.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00361\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00361.html\">GLM_GTX_texture</a></td></tr>\n<tr class=\"memdesc:a00361\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00157.html\" title=\"GLM_GTX_texture \">glm/gtx/texture.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00362\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00362.html\">GLM_GTX_transform</a></td></tr>\n<tr class=\"memdesc:a00362\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00158.html\" title=\"GLM_GTX_transform \">glm/gtx/transform.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00363\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html\">GLM_GTX_transform2</a></td></tr>\n<tr class=\"memdesc:a00363\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00159.html\" title=\"GLM_GTX_transform2 \">glm/gtx/transform2.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00364\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html\">GLM_GTX_type_aligned</a></td></tr>\n<tr class=\"memdesc:a00364\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00162.html\" title=\"GLM_GTX_type_aligned \">glm/gtx/type_aligned.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00365\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00365.html\">GLM_GTX_type_trait</a></td></tr>\n<tr class=\"memdesc:a00365\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00177.html\" title=\"GLM_GTX_type_trait \">glm/gtx/type_trait.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00366\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00366.html\">GLM_GTX_vec_swizzle</a></td></tr>\n<tr class=\"memdesc:a00366\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00187.html\" title=\"GLM_GTX_vec_swizzle \">glm/gtx/vec_swizzle.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00367\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00367.html\">GLM_GTX_vector_angle</a></td></tr>\n<tr class=\"memdesc:a00367\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00188.html\" title=\"GLM_GTX_vector_angle \">glm/gtx/vector_angle.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00368\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html\">GLM_GTX_vector_query</a></td></tr>\n<tr class=\"memdesc:a00368\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00223.html\" title=\"GLM_GTX_vector_query \">glm/gtx/vector_query.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00369\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html\">GLM_GTX_wrap</a></td></tr>\n<tr class=\"memdesc:a00369\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Include &lt;<a class=\"el\" href=\"a00235.html\" title=\"GLM_GTX_wrap \">glm/gtx/wrap.hpp</a>&gt; to use the features of this extension. <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Experimental features not specified by GLSL specification. </p>\n<p>Experimental extensions are useful functions and types, but the development of their API and functionality is not necessarily stable. They can change substantially between versions. Backwards compatibility is not much of an issue for them.</p>\n<p>Even if it's highly unrecommended, it's possible to include all the extensions at once by including &lt;<a class=\"el\" href=\"a00027.html\" title=\"Core features (Dependence) \">glm/ext.hpp</a>&gt;. Otherwise, each extension needs to be included a specific file. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00288.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_bitfield</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_bitfield<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00009.html\" title=\"GLM_GTC_bitfield \">glm/gtc/bitfield.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga091d934233a2e121df91b8c7230357c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga091d934233a2e121df91b8c7230357c8\">bitfieldDeinterleave</a> (<a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">glm::uint16</a> x)</td></tr>\n<tr class=\"memdesc:ga091d934233a2e121df91b8c7230357c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Deinterleaves the bits of x.  <a href=\"a00288.html#ga091d934233a2e121df91b8c7230357c8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga091d934233a2e121df91b8c7230357c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7d1cc24dfbcdd932c3a2abbb76235f98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98\">bitfieldDeinterleave</a> (<a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">glm::uint32</a> x)</td></tr>\n<tr class=\"memdesc:ga7d1cc24dfbcdd932c3a2abbb76235f98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Deinterleaves the bits of x.  <a href=\"a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7d1cc24dfbcdd932c3a2abbb76235f98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8dbb8c87092f33bd815dd8a840be5d60\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a>&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60\">bitfieldDeinterleave</a> (<a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">glm::uint64</a> x)</td></tr>\n<tr class=\"memdesc:ga8dbb8c87092f33bd815dd8a840be5d60\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Deinterleaves the bits of x.  <a href=\"a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8dbb8c87092f33bd815dd8a840be5d60\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46f9295abe3b5c7658f5b13c7f819f0a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga46f9295abe3b5c7658f5b13c7f819f0a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga46f9295abe3b5c7658f5b13c7f819f0a\">bitfieldFillOne</a> (genIUType Value, int FirstBit, int BitCount)</td></tr>\n<tr class=\"memdesc:ga46f9295abe3b5c7658f5b13c7f819f0a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 1 a range of bits.  <a href=\"a00288.html#ga46f9295abe3b5c7658f5b13c7f819f0a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga46f9295abe3b5c7658f5b13c7f819f0a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e96dd1f0a4bc892f063251ed118c0c1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3e96dd1f0a4bc892f063251ed118c0c1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1\">bitfieldFillOne</a> (vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)</td></tr>\n<tr class=\"memdesc:ga3e96dd1f0a4bc892f063251ed118c0c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 1 a range of bits.  <a href=\"a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e96dd1f0a4bc892f063251ed118c0c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga697b86998b7d74ee0a69d8e9f8819fee\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga697b86998b7d74ee0a69d8e9f8819fee\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga697b86998b7d74ee0a69d8e9f8819fee\">bitfieldFillZero</a> (genIUType Value, int FirstBit, int BitCount)</td></tr>\n<tr class=\"memdesc:ga697b86998b7d74ee0a69d8e9f8819fee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 0 a range of bits.  <a href=\"a00288.html#ga697b86998b7d74ee0a69d8e9f8819fee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga697b86998b7d74ee0a69d8e9f8819fee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0d16c9acef4be79ea9b47c082a0cf7c2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0d16c9acef4be79ea9b47c082a0cf7c2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2\">bitfieldFillZero</a> (vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)</td></tr>\n<tr class=\"memdesc:ga0d16c9acef4be79ea9b47c082a0cf7c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set to 0 a range of bits.  <a href=\"a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0d16c9acef4be79ea9b47c082a0cf7c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24cad0069f9a0450abd80b3e89501adf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga24cad0069f9a0450abd80b3e89501adf\">bitfieldInterleave</a> (int8 x, int8 y)</td></tr>\n<tr class=\"memdesc:ga24cad0069f9a0450abd80b3e89501adf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga24cad0069f9a0450abd80b3e89501adf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga24cad0069f9a0450abd80b3e89501adf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a4976a529aec2cee56525e1165da484\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga9a4976a529aec2cee56525e1165da484\">bitfieldInterleave</a> (uint8 x, uint8 y)</td></tr>\n<tr class=\"memdesc:ga9a4976a529aec2cee56525e1165da484\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga9a4976a529aec2cee56525e1165da484\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9a4976a529aec2cee56525e1165da484\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a76bbca39c40153f3203d0a1926e142\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga4a76bbca39c40153f3203d0a1926e142\">bitfieldInterleave</a> (u8vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4a76bbca39c40153f3203d0a1926e142\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga4a76bbca39c40153f3203d0a1926e142\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a76bbca39c40153f3203d0a1926e142\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac51c33a394593f0631fa3aa5bb778809\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gac51c33a394593f0631fa3aa5bb778809\">bitfieldInterleave</a> (int16 x, int16 y)</td></tr>\n<tr class=\"memdesc:gac51c33a394593f0631fa3aa5bb778809\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#gac51c33a394593f0631fa3aa5bb778809\">More...</a><br /></td></tr>\n<tr class=\"separator:gac51c33a394593f0631fa3aa5bb778809\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94f3646a5667f4be56f8dcf3310e963f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga94f3646a5667f4be56f8dcf3310e963f\">bitfieldInterleave</a> (uint16 x, uint16 y)</td></tr>\n<tr class=\"memdesc:ga94f3646a5667f4be56f8dcf3310e963f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga94f3646a5667f4be56f8dcf3310e963f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94f3646a5667f4be56f8dcf3310e963f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga406c4ee56af4ca37a73f449f154eca3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga406c4ee56af4ca37a73f449f154eca3e\">bitfieldInterleave</a> (u16vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga406c4ee56af4ca37a73f449f154eca3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga406c4ee56af4ca37a73f449f154eca3e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga406c4ee56af4ca37a73f449f154eca3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebb756a24a0784e3d6fba8bd011ab77a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gaebb756a24a0784e3d6fba8bd011ab77a\">bitfieldInterleave</a> (int32 x, int32 y)</td></tr>\n<tr class=\"memdesc:gaebb756a24a0784e3d6fba8bd011ab77a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#gaebb756a24a0784e3d6fba8bd011ab77a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaebb756a24a0784e3d6fba8bd011ab77a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f1e2b3fe699e7d897ae38b2115ddcbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd\">bitfieldInterleave</a> (uint32 x, uint32 y)</td></tr>\n<tr class=\"memdesc:ga2f1e2b3fe699e7d897ae38b2115ddcbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f1e2b3fe699e7d897ae38b2115ddcbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8cb17574d60abd6ade84bc57c10e8f78\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78\">bitfieldInterleave</a> (u32vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8cb17574d60abd6ade84bc57c10e8f78\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x and y.  <a href=\"a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8cb17574d60abd6ade84bc57c10e8f78\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8fdb724dccd4a07d57efc01147102137\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga8fdb724dccd4a07d57efc01147102137\">bitfieldInterleave</a> (int8 x, int8 y, int8 z)</td></tr>\n<tr class=\"memdesc:ga8fdb724dccd4a07d57efc01147102137\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#ga8fdb724dccd4a07d57efc01147102137\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8fdb724dccd4a07d57efc01147102137\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9fc2a0dd5dcf8b00e113f272a5feca93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga9fc2a0dd5dcf8b00e113f272a5feca93\">bitfieldInterleave</a> (uint8 x, uint8 y, uint8 z)</td></tr>\n<tr class=\"memdesc:ga9fc2a0dd5dcf8b00e113f272a5feca93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#ga9fc2a0dd5dcf8b00e113f272a5feca93\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9fc2a0dd5dcf8b00e113f272a5feca93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa901c36a842fa5d126ea650549f17b24\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gaa901c36a842fa5d126ea650549f17b24\">bitfieldInterleave</a> (int16 x, int16 y, int16 z)</td></tr>\n<tr class=\"memdesc:gaa901c36a842fa5d126ea650549f17b24\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#gaa901c36a842fa5d126ea650549f17b24\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa901c36a842fa5d126ea650549f17b24\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3afd6d38881fe3948c53d4214d2197fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga3afd6d38881fe3948c53d4214d2197fd\">bitfieldInterleave</a> (uint16 x, uint16 y, uint16 z)</td></tr>\n<tr class=\"memdesc:ga3afd6d38881fe3948c53d4214d2197fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#ga3afd6d38881fe3948c53d4214d2197fd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3afd6d38881fe3948c53d4214d2197fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad2075d96a6640121edaa98ea534102ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gad2075d96a6640121edaa98ea534102ca\">bitfieldInterleave</a> (int32 x, int32 y, int32 z)</td></tr>\n<tr class=\"memdesc:gad2075d96a6640121edaa98ea534102ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#gad2075d96a6640121edaa98ea534102ca\">More...</a><br /></td></tr>\n<tr class=\"separator:gad2075d96a6640121edaa98ea534102ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab19fbc739fc0cf7247978602c36f7da8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gab19fbc739fc0cf7247978602c36f7da8\">bitfieldInterleave</a> (uint32 x, uint32 y, uint32 z)</td></tr>\n<tr class=\"memdesc:gab19fbc739fc0cf7247978602c36f7da8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y and z.  <a href=\"a00288.html#gab19fbc739fc0cf7247978602c36f7da8\">More...</a><br /></td></tr>\n<tr class=\"separator:gab19fbc739fc0cf7247978602c36f7da8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a44ae22f5c953b296c42d067dccbe6d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga8a44ae22f5c953b296c42d067dccbe6d\">bitfieldInterleave</a> (int8 x, int8 y, int8 z, int8 w)</td></tr>\n<tr class=\"memdesc:ga8a44ae22f5c953b296c42d067dccbe6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y, z and w.  <a href=\"a00288.html#ga8a44ae22f5c953b296c42d067dccbe6d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8a44ae22f5c953b296c42d067dccbe6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14bb274d54a3c26f4919dd7ed0dd0c36\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga14bb274d54a3c26f4919dd7ed0dd0c36\">bitfieldInterleave</a> (uint8 x, uint8 y, uint8 z, uint8 w)</td></tr>\n<tr class=\"memdesc:ga14bb274d54a3c26f4919dd7ed0dd0c36\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y, z and w.  <a href=\"a00288.html#ga14bb274d54a3c26f4919dd7ed0dd0c36\">More...</a><br /></td></tr>\n<tr class=\"separator:ga14bb274d54a3c26f4919dd7ed0dd0c36\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga180a63161e1319fbd5a53c84d0429c7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga180a63161e1319fbd5a53c84d0429c7a\">bitfieldInterleave</a> (int16 x, int16 y, int16 z, int16 w)</td></tr>\n<tr class=\"memdesc:ga180a63161e1319fbd5a53c84d0429c7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y, z and w.  <a href=\"a00288.html#ga180a63161e1319fbd5a53c84d0429c7a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga180a63161e1319fbd5a53c84d0429c7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafca8768671a14c8016facccb66a89f26\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">bitfieldInterleave</a> (uint16 x, uint16 y, uint16 z, uint16 w)</td></tr>\n<tr class=\"memdesc:gafca8768671a14c8016facccb66a89f26\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Interleaves the bits of x, y, z and w.  <a href=\"a00288.html#gafca8768671a14c8016facccb66a89f26\">More...</a><br /></td></tr>\n<tr class=\"separator:gafca8768671a14c8016facccb66a89f26\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2eb49678a344ce1495bdb5586d9896b9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga2eb49678a344ce1495bdb5586d9896b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga2eb49678a344ce1495bdb5586d9896b9\">bitfieldRotateLeft</a> (genIUType In, int Shift)</td></tr>\n<tr class=\"memdesc:ga2eb49678a344ce1495bdb5586d9896b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate all bits to the left.  <a href=\"a00288.html#ga2eb49678a344ce1495bdb5586d9896b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2eb49678a344ce1495bdb5586d9896b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae186317091b1a39214ebf79008d44a1e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae186317091b1a39214ebf79008d44a1e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gae186317091b1a39214ebf79008d44a1e\">bitfieldRotateLeft</a> (vec&lt; L, T, Q &gt; const &amp;In, int Shift)</td></tr>\n<tr class=\"memdesc:gae186317091b1a39214ebf79008d44a1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate all bits to the left.  <a href=\"a00288.html#gae186317091b1a39214ebf79008d44a1e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae186317091b1a39214ebf79008d44a1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1c33d075c5fb8bd8dbfd5092bfc851ca\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga1c33d075c5fb8bd8dbfd5092bfc851ca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca\">bitfieldRotateRight</a> (genIUType In, int Shift)</td></tr>\n<tr class=\"memdesc:ga1c33d075c5fb8bd8dbfd5092bfc851ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate all bits to the right.  <a href=\"a00288.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1c33d075c5fb8bd8dbfd5092bfc851ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88\">bitfieldRotateRight</a> (vec&lt; L, T, Q &gt; const &amp;In, int Shift)</td></tr>\n<tr class=\"memdesc:ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate all bits to the right.  <a href=\"a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88\">More...</a><br /></td></tr>\n<tr class=\"separator:ga590488e1fc00a6cfe5d3bcaf93fbfe88\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7eba518a0b71662114571ee76939f8a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gad7eba518a0b71662114571ee76939f8a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#gad7eba518a0b71662114571ee76939f8a\">mask</a> (genIUType Bits)</td></tr>\n<tr class=\"memdesc:gad7eba518a0b71662114571ee76939f8a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a mask of 'count' bits.  <a href=\"a00288.html#gad7eba518a0b71662114571ee76939f8a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7eba518a0b71662114571ee76939f8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e64e3b922a296033b825311e7f5fff1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2e64e3b922a296033b825311e7f5fff1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00288.html#ga2e64e3b922a296033b825311e7f5fff1\">mask</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2e64e3b922a296033b825311e7f5fff1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a mask of 'count' bits.  <a href=\"a00288.html#ga2e64e3b922a296033b825311e7f5fff1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e64e3b922a296033b825311e7f5fff1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00009.html\" title=\"GLM_GTC_bitfield \">glm/gtc/bitfield.hpp</a>&gt; to use the features of this extension. </p>\n<p>Allow to perform bit operations on integer values </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga091d934233a2e121df91b8c7230357c8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">glm::u8vec2</a> glm::bitfieldDeinterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">glm::uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Deinterleaves the bits of x. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7d1cc24dfbcdd932c3a2abbb76235f98\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">glm::u16vec2</a> glm::bitfieldDeinterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">glm::uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Deinterleaves the bits of x. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8dbb8c87092f33bd815dd8a840be5d60\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL <a class=\"el\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">glm::u32vec2</a> glm::bitfieldDeinterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">glm::uint64</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Deinterleaves the bits of x. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga46f9295abe3b5c7658f5b13c7f819f0a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::bitfieldFillOne </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>FirstBit</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>BitCount</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Set to 1 a range of bits. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3e96dd1f0a4bc892f063251ed118c0c1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::bitfieldFillOne </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>FirstBit</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>BitCount</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Set to 1 a range of bits. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed and unsigned integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga697b86998b7d74ee0a69d8e9f8819fee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::bitfieldFillZero </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>FirstBit</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>BitCount</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Set to 0 a range of bits. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0d16c9acef4be79ea9b47c082a0cf7c2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::bitfieldFillZero </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>FirstBit</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>BitCount</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Set to 0 a range of bits. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed and unsigned integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga24cad0069f9a0450abd80b3e89501adf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int16 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9a4976a529aec2cee56525e1165da484\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4a76bbca39c40153f3203d0a1926e142\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of v.x followed by the first bit of v.y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac51c33a394593f0631fa3aa5bb778809\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int32 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga94f3646a5667f4be56f8dcf3310e963f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga406c4ee56af4ca37a73f449f154eca3e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of v.x followed by the first bit of v.y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaebb756a24a0784e3d6fba8bd011ab77a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2f1e2b3fe699e7d897ae38b2115ddcbd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of x followed by the first bit of y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8cb17574d60abd6ade84bc57c10e8f78\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x and y. </p>\n<p>The first bit is the first bit of v.x followed by the first bit of v.y. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8fdb724dccd4a07d57efc01147102137\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int32 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y and z. </p>\n<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9fc2a0dd5dcf8b00e113f272a5feca93\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y and z. </p>\n<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa901c36a842fa5d126ea650549f17b24\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y and z. </p>\n<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3afd6d38881fe3948c53d4214d2197fd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y and z. </p>\n<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad2075d96a6640121edaa98ea534102ca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y and z. </p>\n<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab19fbc739fc0cf7247978602c36f7da8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y and z. </p>\n<p>The first bit is the first bit of x followed by the first bit of y and the first bit of z. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8a44ae22f5c953b296c42d067dccbe6d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int32 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y, z and w. </p>\n<p>The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga14bb274d54a3c26f4919dd7ed0dd0c36\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y, z and w. </p>\n<p>The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga180a63161e1319fbd5a53c84d0429c7a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y, z and w. </p>\n<p>The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafca8768671a14c8016facccb66a89f26\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::bitfieldInterleave </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Interleaves the bits of x, y, z and w. </p>\n<p>The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. The other bits are interleaved following the previous sequence.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2eb49678a344ce1495bdb5586d9896b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::bitfieldRotateLeft </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>In</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>Shift</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate all bits to the left. </p>\n<p>All the bits dropped in the left side are inserted back on the right side.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae186317091b1a39214ebf79008d44a1e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::bitfieldRotateLeft </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>In</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>Shift</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate all bits to the left. </p>\n<p>All the bits dropped in the left side are inserted back on the right side.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed and unsigned integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1c33d075c5fb8bd8dbfd5092bfc851ca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::bitfieldRotateRight </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>In</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>Shift</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate all bits to the right. </p>\n<p>All the bits dropped in the right side are inserted back on the left side.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga590488e1fc00a6cfe5d3bcaf93fbfe88\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::bitfieldRotateRight </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>In</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>Shift</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate all bits to the right. </p>\n<p>All the bits dropped in the right side are inserted back on the left side.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed and unsigned integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad7eba518a0b71662114571ee76939f8a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::mask </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Bits</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a mask of 'count' bits. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2e64e3b922a296033b825311e7f5fff1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::mask </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a mask of 'count' bits. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed and unsigned integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00288.html\" title=\"Include <glm/gtc/bitfield.hpp> to use the features of this extension. \">GLM_GTC_bitfield</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00289.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_color_space</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_color_space<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00012.html\" title=\"GLM_GTC_color_space \">glm/gtc/color_space.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga42239e7b3da900f7ef37cec7e2476579\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga42239e7b3da900f7ef37cec7e2476579\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html#ga42239e7b3da900f7ef37cec7e2476579\">convertLinearToSRGB</a> (vec&lt; L, T, Q &gt; const &amp;ColorLinear)</td></tr>\n<tr class=\"memdesc:ga42239e7b3da900f7ef37cec7e2476579\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a linear color to sRGB color using a standard gamma correction.  <a href=\"a00289.html#ga42239e7b3da900f7ef37cec7e2476579\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42239e7b3da900f7ef37cec7e2476579\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaace0a21167d13d26116c283009af57f6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaace0a21167d13d26116c283009af57f6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html#gaace0a21167d13d26116c283009af57f6\">convertLinearToSRGB</a> (vec&lt; L, T, Q &gt; const &amp;ColorLinear, T Gamma)</td></tr>\n<tr class=\"memdesc:gaace0a21167d13d26116c283009af57f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a linear color to sRGB color using a custom gamma correction.  <a href=\"a00289.html#gaace0a21167d13d26116c283009af57f6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaace0a21167d13d26116c283009af57f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16c798b7a226b2c3079dedc55083d187\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga16c798b7a226b2c3079dedc55083d187\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html#ga16c798b7a226b2c3079dedc55083d187\">convertSRGBToLinear</a> (vec&lt; L, T, Q &gt; const &amp;ColorSRGB)</td></tr>\n<tr class=\"memdesc:ga16c798b7a226b2c3079dedc55083d187\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a sRGB color to linear color using a standard gamma correction.  <a href=\"a00289.html#ga16c798b7a226b2c3079dedc55083d187\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16c798b7a226b2c3079dedc55083d187\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1b91f27a9726c9cb403f9fee6e2e200\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gad1b91f27a9726c9cb403f9fee6e2e200\"></a>\ntemplate&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad1b91f27a9726c9cb403f9fee6e2e200\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200\">convertSRGBToLinear</a> (vec&lt; L, T, Q &gt; const &amp;ColorSRGB, T Gamma)</td></tr>\n<tr class=\"memdesc:gad1b91f27a9726c9cb403f9fee6e2e200\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a sRGB color to linear color using a custom gamma correction. <br /></td></tr>\n<tr class=\"separator:gad1b91f27a9726c9cb403f9fee6e2e200\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00012.html\" title=\"GLM_GTC_color_space \">glm/gtc/color_space.hpp</a>&gt; to use the features of this extension. </p>\n<p>Allow to perform bit operations on integer values </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga42239e7b3da900f7ef37cec7e2476579\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::convertLinearToSRGB </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ColorLinear</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a linear color to sRGB color using a standard gamma correction. </p>\n<p>IEC 61966-2-1:1999 / Rec. 709 specification <a href=\"https://www.w3.org/Graphics/Color/srgb\">https://www.w3.org/Graphics/Color/srgb</a> </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaace0a21167d13d26116c283009af57f6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::convertLinearToSRGB </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ColorLinear</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>Gamma</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a linear color to sRGB color using a custom gamma correction. </p>\n<p>IEC 61966-2-1:1999 / Rec. 709 specification <a href=\"https://www.w3.org/Graphics/Color/srgb\">https://www.w3.org/Graphics/Color/srgb</a> </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga16c798b7a226b2c3079dedc55083d187\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::convertSRGBToLinear </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ColorSRGB</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a sRGB color to linear color using a standard gamma correction. </p>\n<p>IEC 61966-2-1:1999 / Rec. 709 specification <a href=\"https://www.w3.org/Graphics/Color/srgb\">https://www.w3.org/Graphics/Color/srgb</a> </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00290.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_constants</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_constants<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00021.html\" title=\"GLM_GTC_constants \">glm/gtc/constants.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">e</a> ()</td></tr>\n<tr class=\"memdesc:ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return e constant.  <a href=\"a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b7956eb6e2fbedfc7cf2e46e85c5139\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8fe2e6f90bce9d829e9723b649fbd42\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gad8fe2e6f90bce9d829e9723b649fbd42\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42\">euler</a> ()</td></tr>\n<tr class=\"memdesc:gad8fe2e6f90bce9d829e9723b649fbd42\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return Euler's constant.  <a href=\"a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42\">More...</a><br /></td></tr>\n<tr class=\"separator:gad8fe2e6f90bce9d829e9723b649fbd42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga753950e5140e4ea6a88e4a18ba61dc09\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga753950e5140e4ea6a88e4a18ba61dc09\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09\">four_over_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga753950e5140e4ea6a88e4a18ba61dc09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 4 / pi.  <a href=\"a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09\">More...</a><br /></td></tr>\n<tr class=\"separator:ga753950e5140e4ea6a88e4a18ba61dc09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga748cf8642830657c5b7eae04d0a80899\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga748cf8642830657c5b7eae04d0a80899\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga748cf8642830657c5b7eae04d0a80899\">golden_ratio</a> ()</td></tr>\n<tr class=\"memdesc:ga748cf8642830657c5b7eae04d0a80899\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the golden ratio constant.  <a href=\"a00290.html#ga748cf8642830657c5b7eae04d0a80899\">More...</a><br /></td></tr>\n<tr class=\"separator:ga748cf8642830657c5b7eae04d0a80899\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c36b41d462e45641faf7d7938948bac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga0c36b41d462e45641faf7d7938948bac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga0c36b41d462e45641faf7d7938948bac\">half_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga0c36b41d462e45641faf7d7938948bac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pi / 2.  <a href=\"a00290.html#ga0c36b41d462e45641faf7d7938948bac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0c36b41d462e45641faf7d7938948bac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaca94292c839ed31a405ab7a81ae7e850\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaca94292c839ed31a405ab7a81ae7e850\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gaca94292c839ed31a405ab7a81ae7e850\">ln_ln_two</a> ()</td></tr>\n<tr class=\"memdesc:gaca94292c839ed31a405ab7a81ae7e850\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return ln(ln(2)).  <a href=\"a00290.html#gaca94292c839ed31a405ab7a81ae7e850\">More...</a><br /></td></tr>\n<tr class=\"separator:gaca94292c839ed31a405ab7a81ae7e850\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf97ebc6c059ffd788e6c4946f71ef66c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaf97ebc6c059ffd788e6c4946f71ef66c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c\">ln_ten</a> ()</td></tr>\n<tr class=\"memdesc:gaf97ebc6c059ffd788e6c4946f71ef66c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return ln(10).  <a href=\"a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf97ebc6c059ffd788e6c4946f71ef66c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24f4d27765678116f41a2f336ab7975c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga24f4d27765678116f41a2f336ab7975c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga24f4d27765678116f41a2f336ab7975c\">ln_two</a> ()</td></tr>\n<tr class=\"memdesc:ga24f4d27765678116f41a2f336ab7975c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return ln(2).  <a href=\"a00290.html#ga24f4d27765678116f41a2f336ab7975c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga24f4d27765678116f41a2f336ab7975c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39c2fb227631ca25894326529bdd1ee5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga39c2fb227631ca25894326529bdd1ee5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga39c2fb227631ca25894326529bdd1ee5\">one</a> ()</td></tr>\n<tr class=\"memdesc:ga39c2fb227631ca25894326529bdd1ee5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1.  <a href=\"a00290.html#ga39c2fb227631ca25894326529bdd1ee5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga39c2fb227631ca25894326529bdd1ee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga555150da2b06d23c8738981d5013e0eb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga555150da2b06d23c8738981d5013e0eb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga555150da2b06d23c8738981d5013e0eb\">one_over_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga555150da2b06d23c8738981d5013e0eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1 / pi.  <a href=\"a00290.html#ga555150da2b06d23c8738981d5013e0eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga555150da2b06d23c8738981d5013e0eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga788fa23a0939bac4d1d0205fb4f35818\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga788fa23a0939bac4d1d0205fb4f35818\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga788fa23a0939bac4d1d0205fb4f35818\">one_over_root_two</a> ()</td></tr>\n<tr class=\"memdesc:ga788fa23a0939bac4d1d0205fb4f35818\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1 / sqrt(2).  <a href=\"a00290.html#ga788fa23a0939bac4d1d0205fb4f35818\">More...</a><br /></td></tr>\n<tr class=\"separator:ga788fa23a0939bac4d1d0205fb4f35818\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c922b427986cbb2e4c6ac69874eefbc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7c922b427986cbb2e4c6ac69874eefbc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc\">one_over_two_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga7c922b427986cbb2e4c6ac69874eefbc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1 / (pi * 2).  <a href=\"a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c922b427986cbb2e4c6ac69874eefbc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3c9df42bd73c519a995c43f0f99e77e0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga3c9df42bd73c519a995c43f0f99e77e0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0\">quarter_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga3c9df42bd73c519a995c43f0f99e77e0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pi / 4.  <a href=\"a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3c9df42bd73c519a995c43f0f99e77e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae9ebbded75b53d4faeb1e4ef8b3347a2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae9ebbded75b53d4faeb1e4ef8b3347a2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2\">root_five</a> ()</td></tr>\n<tr class=\"memdesc:gae9ebbded75b53d4faeb1e4ef8b3347a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(5).  <a href=\"a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2\">More...</a><br /></td></tr>\n<tr class=\"separator:gae9ebbded75b53d4faeb1e4ef8b3347a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e276cb823cc5e612d4f89ed99c75039\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4e276cb823cc5e612d4f89ed99c75039\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga4e276cb823cc5e612d4f89ed99c75039\">root_half_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga4e276cb823cc5e612d4f89ed99c75039\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(pi / 2).  <a href=\"a00290.html#ga4e276cb823cc5e612d4f89ed99c75039\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e276cb823cc5e612d4f89ed99c75039\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4129412e96b33707a77c1a07652e23e2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4129412e96b33707a77c1a07652e23e2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga4129412e96b33707a77c1a07652e23e2\">root_ln_four</a> ()</td></tr>\n<tr class=\"memdesc:ga4129412e96b33707a77c1a07652e23e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(ln(4)).  <a href=\"a00290.html#ga4129412e96b33707a77c1a07652e23e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4129412e96b33707a77c1a07652e23e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga261380796b2cd496f68d2cf1d08b8eb9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga261380796b2cd496f68d2cf1d08b8eb9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9\">root_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga261380796b2cd496f68d2cf1d08b8eb9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return square root of pi.  <a href=\"a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga261380796b2cd496f68d2cf1d08b8eb9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f286be4abe88be1eed7d2a9f6cb193e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4f286be4abe88be1eed7d2a9f6cb193e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e\">root_three</a> ()</td></tr>\n<tr class=\"memdesc:ga4f286be4abe88be1eed7d2a9f6cb193e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(3).  <a href=\"a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f286be4abe88be1eed7d2a9f6cb193e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74e607d29020f100c0d0dc46ce2ca950\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga74e607d29020f100c0d0dc46ce2ca950\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga74e607d29020f100c0d0dc46ce2ca950\">root_two</a> ()</td></tr>\n<tr class=\"memdesc:ga74e607d29020f100c0d0dc46ce2ca950\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(2).  <a href=\"a00290.html#ga74e607d29020f100c0d0dc46ce2ca950\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74e607d29020f100c0d0dc46ce2ca950\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2bcedc575039fe0cd765742f8bbb0bd3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2bcedc575039fe0cd765742f8bbb0bd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3\">root_two_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga2bcedc575039fe0cd765742f8bbb0bd3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return sqrt(2 * pi).  <a href=\"a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2bcedc575039fe0cd765742f8bbb0bd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3077c6311010a214b69ddc8214ec13b5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga3077c6311010a214b69ddc8214ec13b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga3077c6311010a214b69ddc8214ec13b5\">third</a> ()</td></tr>\n<tr class=\"memdesc:ga3077c6311010a214b69ddc8214ec13b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 1 / 3.  <a href=\"a00290.html#ga3077c6311010a214b69ddc8214ec13b5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3077c6311010a214b69ddc8214ec13b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae94950df74b0ce382b1fc1d978ef7394\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae94950df74b0ce382b1fc1d978ef7394\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gae94950df74b0ce382b1fc1d978ef7394\">three_over_two_pi</a> ()</td></tr>\n<tr class=\"memdesc:gae94950df74b0ce382b1fc1d978ef7394\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pi / 2 * 3.  <a href=\"a00290.html#gae94950df74b0ce382b1fc1d978ef7394\">More...</a><br /></td></tr>\n<tr class=\"separator:gae94950df74b0ce382b1fc1d978ef7394\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74eadc8a211253079683219a3ea0462a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga74eadc8a211253079683219a3ea0462a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga74eadc8a211253079683219a3ea0462a\">two_over_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga74eadc8a211253079683219a3ea0462a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 2 / pi.  <a href=\"a00290.html#ga74eadc8a211253079683219a3ea0462a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74eadc8a211253079683219a3ea0462a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5827301817640843cf02026a8d493894\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga5827301817640843cf02026a8d493894\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga5827301817640843cf02026a8d493894\">two_over_root_pi</a> ()</td></tr>\n<tr class=\"memdesc:ga5827301817640843cf02026a8d493894\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 2 / sqrt(pi).  <a href=\"a00290.html#ga5827301817640843cf02026a8d493894\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5827301817640843cf02026a8d493894\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa5276a4617566abcfe49286f40e3a256\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa5276a4617566abcfe49286f40e3a256\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#gaa5276a4617566abcfe49286f40e3a256\">two_pi</a> ()</td></tr>\n<tr class=\"memdesc:gaa5276a4617566abcfe49286f40e3a256\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return pi * 2.  <a href=\"a00290.html#gaa5276a4617566abcfe49286f40e3a256\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa5276a4617566abcfe49286f40e3a256\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9b4d2f4322edcf63a6737b92a29dd1f5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9b4d2f4322edcf63a6737b92a29dd1f5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5\">two_thirds</a> ()</td></tr>\n<tr class=\"memdesc:ga9b4d2f4322edcf63a6737b92a29dd1f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 2 / 3.  <a href=\"a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9b4d2f4322edcf63a6737b92a29dd1f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga788f5a421fc0f40a1296ebc094cbaa8a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga788f5a421fc0f40a1296ebc094cbaa8a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a\">zero</a> ()</td></tr>\n<tr class=\"memdesc:ga788f5a421fc0f40a1296ebc094cbaa8a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return 0.  <a href=\"a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga788f5a421fc0f40a1296ebc094cbaa8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00021.html\" title=\"GLM_GTC_constants \">glm/gtc/constants.hpp</a>&gt; to use the features of this extension. </p>\n<p>Provide a list of constants and precomputed useful values. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga4b7956eb6e2fbedfc7cf2e46e85c5139\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::e </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return e constant. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad8fe2e6f90bce9d829e9723b649fbd42\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::euler </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return Euler's constant. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga753950e5140e4ea6a88e4a18ba61dc09\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::four_over_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 4 / pi. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga748cf8642830657c5b7eae04d0a80899\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::golden_ratio </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the golden ratio constant. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0c36b41d462e45641faf7d7938948bac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::half_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return pi / 2. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaca94292c839ed31a405ab7a81ae7e850\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::ln_ln_two </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return ln(ln(2)). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf97ebc6c059ffd788e6c4946f71ef66c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::ln_ten </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return ln(10). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga24f4d27765678116f41a2f336ab7975c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::ln_two </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return ln(2). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga39c2fb227631ca25894326529bdd1ee5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::one </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 1. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga555150da2b06d23c8738981d5013e0eb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::one_over_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 1 / pi. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga788fa23a0939bac4d1d0205fb4f35818\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::one_over_root_two </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 1 / sqrt(2). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7c922b427986cbb2e4c6ac69874eefbc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::one_over_two_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 1 / (pi * 2). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3c9df42bd73c519a995c43f0f99e77e0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::quarter_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return pi / 4. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae9ebbded75b53d4faeb1e4ef8b3347a2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_five </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return sqrt(5). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4e276cb823cc5e612d4f89ed99c75039\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_half_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return sqrt(pi / 2). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4129412e96b33707a77c1a07652e23e2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_ln_four </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return sqrt(ln(4)). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga261380796b2cd496f68d2cf1d08b8eb9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return square root of pi. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4f286be4abe88be1eed7d2a9f6cb193e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_three </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return sqrt(3). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga74e607d29020f100c0d0dc46ce2ca950\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_two </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return sqrt(2). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2bcedc575039fe0cd765742f8bbb0bd3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::root_two_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return sqrt(2 * pi). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3077c6311010a214b69ddc8214ec13b5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::third </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 1 / 3. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae94950df74b0ce382b1fc1d978ef7394\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::three_over_two_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return pi / 2 * 3. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga74eadc8a211253079683219a3ea0462a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::two_over_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 2 / pi. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5827301817640843cf02026a8d493894\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::two_over_root_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 2 / sqrt(pi). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa5276a4617566abcfe49286f40e3a256\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::two_pi </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return pi * 2. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9b4d2f4322edcf63a6737b92a29dd1f5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::two_thirds </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 2 / 3. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga788f5a421fc0f40a1296ebc094cbaa8a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR genType glm::zero </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return 0. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00290.html\" title=\"Include <glm/gtc/constants.hpp> to use the features of this extension. \">GLM_GTC_constants</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00291.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_epsilon</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_epsilon<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00024.html\" title=\"GLM_GTC_epsilon \">glm/gtc/epsilon.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga91b417866cafadd076004778217a1844\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga91b417866cafadd076004778217a1844\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html#ga91b417866cafadd076004778217a1844\">epsilonEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga91b417866cafadd076004778217a1844\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00291.html#ga91b417866cafadd076004778217a1844\">More...</a><br /></td></tr>\n<tr class=\"separator:ga91b417866cafadd076004778217a1844\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7f227999ca09e7ca994e8b35aba47bb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa7f227999ca09e7ca994e8b35aba47bb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb\">epsilonEqual</a> (genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaa7f227999ca09e7ca994e8b35aba47bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7f227999ca09e7ca994e8b35aba47bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf840d33b9a5261ec78dcd5125743b025\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf840d33b9a5261ec78dcd5125743b025\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html#gaf840d33b9a5261ec78dcd5125743b025\">epsilonNotEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaf840d33b9a5261ec78dcd5125743b025\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &lt; epsilon.  <a href=\"a00291.html#gaf840d33b9a5261ec78dcd5125743b025\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf840d33b9a5261ec78dcd5125743b025\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50a92103fb0cbd796908e1bf20c79aaf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga50a92103fb0cbd796908e1bf20c79aaf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf\">epsilonNotEqual</a> (genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga50a92103fb0cbd796908e1bf20c79aaf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of |x - y| &gt;= epsilon.  <a href=\"a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50a92103fb0cbd796908e1bf20c79aaf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00024.html\" title=\"GLM_GTC_epsilon \">glm/gtc/epsilon.hpp</a>&gt; to use the features of this extension. </p>\n<p>Comparison functions for a user defined epsilon values. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga91b417866cafadd076004778217a1844\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::epsilonEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00291.html\" title=\"Include <glm/gtc/epsilon.hpp> to use the features of this extension. \">GLM_GTC_epsilon</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa7f227999ca09e7ca994e8b35aba47bb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::epsilonEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<p>True if this expression is satisfied.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00291.html\" title=\"Include <glm/gtc/epsilon.hpp> to use the features of this extension. \">GLM_GTC_epsilon</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf840d33b9a5261ec78dcd5125743b025\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::epsilonNotEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &lt; epsilon. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00291.html\" title=\"Include <glm/gtc/epsilon.hpp> to use the features of this extension. \">GLM_GTC_epsilon</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga50a92103fb0cbd796908e1bf20c79aaf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::epsilonNotEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of |x - y| &gt;= epsilon. </p>\n<p>True if this expression is not satisfied.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00291.html\" title=\"Include <glm/gtc/epsilon.hpp> to use the features of this extension. \">GLM_GTC_epsilon</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00292.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_integer</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_integer<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00041.html\" title=\"GLM_GTC_integer \">glm/gtc/integer.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga57824268ebe13a922f1d69a5d37f637f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga57824268ebe13a922f1d69a5d37f637f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00292.html#ga57824268ebe13a922f1d69a5d37f637f\">iround</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga57824268ebe13a922f1d69a5d37f637f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x.  <a href=\"a00292.html#ga57824268ebe13a922f1d69a5d37f637f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga57824268ebe13a922f1d69a5d37f637f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bd682e74bfacb005c735305207ec417\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga9bd682e74bfacb005c735305207ec417\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00292.html#ga9bd682e74bfacb005c735305207ec417\">log2</a> (genIUType x)</td></tr>\n<tr class=\"memdesc:ga9bd682e74bfacb005c735305207ec417\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the log2 of x for integer values.  <a href=\"a00292.html#ga9bd682e74bfacb005c735305207ec417\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9bd682e74bfacb005c735305207ec417\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6715b9d573972a0f7763d30d45bcaec4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6715b9d573972a0f7763d30d45bcaec4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00292.html#ga6715b9d573972a0f7763d30d45bcaec4\">uround</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga6715b9d573972a0f7763d30d45bcaec4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a value equal to the nearest integer to x.  <a href=\"a00292.html#ga6715b9d573972a0f7763d30d45bcaec4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6715b9d573972a0f7763d30d45bcaec4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00041.html\" title=\"GLM_GTC_integer \">glm/gtc/integer.hpp</a>&gt; to use the features of this extension. </p>\n<p>Allow to perform bit operations on integer values </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga57824268ebe13a922f1d69a5d37f637f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, int, Q&gt; glm::iround </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a value equal to the nearest integer to x. </p>\n<p>The fraction 0.5 will round in a direction chosen by the implementation, presumably the direction that is fastest.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">x</td><td>The values of the argument must be greater or equal to zero. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>floating point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml\">GLSL round man page</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00292.html\" title=\"Include <glm/gtc/integer.hpp> to use the features of this extension. \">GLM_GTC_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9bd682e74bfacb005c735305207ec417\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::log2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the log2 of x for integer values. </p>\n<p>Usefull to compute mipmap count from the texture size. </p><dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00292.html\" title=\"Include <glm/gtc/integer.hpp> to use the features of this extension. \">GLM_GTC_integer</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6715b9d573972a0f7763d30d45bcaec4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, uint, Q&gt; glm::uround </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a value equal to the nearest integer to x. </p>\n<p>The fraction 0.5 will round in a direction chosen by the implementation, presumably the direction that is fastest.</p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">x</td><td>The values of the argument must be greater or equal to zero. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>floating point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml\">GLSL round man page</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00292.html\" title=\"Include <glm/gtc/integer.hpp> to use the features of this extension. \">GLM_GTC_integer</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00293.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_matrix_access</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_matrix_access<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00058.html\" title=\"GLM_GTC_matrix_access \">glm/gtc/matrix_access.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga96022eb0d3fae39d89fc7a954e59b374\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga96022eb0d3fae39d89fc7a954e59b374\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::col_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html#ga96022eb0d3fae39d89fc7a954e59b374\">column</a> (genType const &amp;m, length_t index)</td></tr>\n<tr class=\"memdesc:ga96022eb0d3fae39d89fc7a954e59b374\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get a specific column of a matrix.  <a href=\"a00293.html#ga96022eb0d3fae39d89fc7a954e59b374\">More...</a><br /></td></tr>\n<tr class=\"separator:ga96022eb0d3fae39d89fc7a954e59b374\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9e757377523890e8b80c5843dbe4dd15\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9e757377523890e8b80c5843dbe4dd15\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html#ga9e757377523890e8b80c5843dbe4dd15\">column</a> (genType const &amp;m, length_t index, typename genType::col_type const &amp;x)</td></tr>\n<tr class=\"memdesc:ga9e757377523890e8b80c5843dbe4dd15\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set a specific column to a matrix.  <a href=\"a00293.html#ga9e757377523890e8b80c5843dbe4dd15\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9e757377523890e8b80c5843dbe4dd15\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga259e5ebd0f31ec3f83440f8cae7f5dba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga259e5ebd0f31ec3f83440f8cae7f5dba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::row_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html#ga259e5ebd0f31ec3f83440f8cae7f5dba\">row</a> (genType const &amp;m, length_t index)</td></tr>\n<tr class=\"memdesc:ga259e5ebd0f31ec3f83440f8cae7f5dba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get a specific row of a matrix.  <a href=\"a00293.html#ga259e5ebd0f31ec3f83440f8cae7f5dba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga259e5ebd0f31ec3f83440f8cae7f5dba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaadcc64829aadf4103477679e48c7594f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaadcc64829aadf4103477679e48c7594f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00293.html#gaadcc64829aadf4103477679e48c7594f\">row</a> (genType const &amp;m, length_t index, typename genType::row_type const &amp;x)</td></tr>\n<tr class=\"memdesc:gaadcc64829aadf4103477679e48c7594f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Set a specific row to a matrix.  <a href=\"a00293.html#gaadcc64829aadf4103477679e48c7594f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaadcc64829aadf4103477679e48c7594f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00058.html\" title=\"GLM_GTC_matrix_access \">glm/gtc/matrix_access.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines functions to access rows or columns of a matrix easily. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga96022eb0d3fae39d89fc7a954e59b374\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType::col_type glm::column </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">length_t&#160;</td>\n          <td class=\"paramname\"><em>index</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Get a specific column of a matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00293.html\" title=\"Include <glm/gtc/matrix_access.hpp> to use the features of this extension. \">GLM_GTC_matrix_access</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9e757377523890e8b80c5843dbe4dd15\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::column </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">length_t&#160;</td>\n          <td class=\"paramname\"><em>index</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::col_type const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Set a specific column to a matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00293.html\" title=\"Include <glm/gtc/matrix_access.hpp> to use the features of this extension. \">GLM_GTC_matrix_access</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga259e5ebd0f31ec3f83440f8cae7f5dba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType::row_type glm::row </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">length_t&#160;</td>\n          <td class=\"paramname\"><em>index</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Get a specific row of a matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00293.html\" title=\"Include <glm/gtc/matrix_access.hpp> to use the features of this extension. \">GLM_GTC_matrix_access</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaadcc64829aadf4103477679e48c7594f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::row </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">length_t&#160;</td>\n          <td class=\"paramname\"><em>index</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::row_type const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Set a specific row to a matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00293.html\" title=\"Include <glm/gtc/matrix_access.hpp> to use the features of this extension. \">GLM_GTC_matrix_access</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00294.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_matrix_integer</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_matrix_integer<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00100.html\" title=\"GLM_GTC_matrix_integer \">glm/gtc/matrix_integer.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga8499cc3b016003f835314c1c756e9db9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8499cc3b016003f835314c1c756e9db9\">highp_imat2</a></td></tr>\n<tr class=\"memdesc:ga8499cc3b016003f835314c1c756e9db9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#ga8499cc3b016003f835314c1c756e9db9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8499cc3b016003f835314c1c756e9db9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa389e2d1c3b10941cae870bc0aeba5b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3\">highp_imat2x2</a></td></tr>\n<tr class=\"memdesc:gaa389e2d1c3b10941cae870bc0aeba5b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa389e2d1c3b10941cae870bc0aeba5b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaba49d890e06c9444795f5a133fbf1336\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaba49d890e06c9444795f5a133fbf1336\">highp_imat2x3</a></td></tr>\n<tr class=\"memdesc:gaba49d890e06c9444795f5a133fbf1336\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 2x3 matrix.  <a href=\"a00294.html#gaba49d890e06c9444795f5a133fbf1336\">More...</a><br /></td></tr>\n<tr class=\"separator:gaba49d890e06c9444795f5a133fbf1336\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05a970fd4366dad6c8a0be676b1eae5b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b\">highp_imat2x4</a></td></tr>\n<tr class=\"memdesc:ga05a970fd4366dad6c8a0be676b1eae5b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 2x4 matrix.  <a href=\"a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga05a970fd4366dad6c8a0be676b1eae5b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaca4506a3efa679eff7c006d9826291fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaca4506a3efa679eff7c006d9826291fd\">highp_imat3</a></td></tr>\n<tr class=\"memdesc:gaca4506a3efa679eff7c006d9826291fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#gaca4506a3efa679eff7c006d9826291fd\">More...</a><br /></td></tr>\n<tr class=\"separator:gaca4506a3efa679eff7c006d9826291fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga91c671c3ff9706c2393e78b22fd84bcb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb\">highp_imat3x2</a></td></tr>\n<tr class=\"memdesc:ga91c671c3ff9706c2393e78b22fd84bcb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 3x2 matrix.  <a href=\"a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga91c671c3ff9706c2393e78b22fd84bcb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07d7b7173e2a6f843ff5f1c615a95b41\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41\">highp_imat3x3</a></td></tr>\n<tr class=\"memdesc:ga07d7b7173e2a6f843ff5f1c615a95b41\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41\">More...</a><br /></td></tr>\n<tr class=\"separator:ga07d7b7173e2a6f843ff5f1c615a95b41\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga53008f580be99018a17b357b5a4ffc0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga53008f580be99018a17b357b5a4ffc0d\">highp_imat3x4</a></td></tr>\n<tr class=\"memdesc:ga53008f580be99018a17b357b5a4ffc0d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 3x4 matrix.  <a href=\"a00294.html#ga53008f580be99018a17b357b5a4ffc0d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga53008f580be99018a17b357b5a4ffc0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cfb09b34e0fcf73eaf6512d6483ef56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56\">highp_imat4</a></td></tr>\n<tr class=\"memdesc:ga7cfb09b34e0fcf73eaf6512d6483ef56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7cfb09b34e0fcf73eaf6512d6483ef56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1858820fb292cae396408b2034407f72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1858820fb292cae396408b2034407f72\">highp_imat4x2</a></td></tr>\n<tr class=\"memdesc:ga1858820fb292cae396408b2034407f72\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 4x2 matrix.  <a href=\"a00294.html#ga1858820fb292cae396408b2034407f72\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1858820fb292cae396408b2034407f72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6be0b80ae74bb309bc5b964d93d68fc5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5\">highp_imat4x3</a></td></tr>\n<tr class=\"memdesc:ga6be0b80ae74bb309bc5b964d93d68fc5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 4x3 matrix.  <a href=\"a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6be0b80ae74bb309bc5b964d93d68fc5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c783ee6f8f040ab37df2f70392c8b44\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44\">highp_imat4x4</a></td></tr>\n<tr class=\"memdesc:ga2c783ee6f8f040ab37df2f70392c8b44\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c783ee6f8f040ab37df2f70392c8b44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42cbce64c4c1cd121b8437daa6e110de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga42cbce64c4c1cd121b8437daa6e110de\">highp_umat2</a></td></tr>\n<tr class=\"memdesc:ga42cbce64c4c1cd121b8437daa6e110de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga42cbce64c4c1cd121b8437daa6e110de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42cbce64c4c1cd121b8437daa6e110de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5337b7bc95f9cbac08a0c00b3f936b28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28\">highp_umat2x2</a></td></tr>\n<tr class=\"memdesc:ga5337b7bc95f9cbac08a0c00b3f936b28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5337b7bc95f9cbac08a0c00b3f936b28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga90718c7128320b24b52f9ea70e643ad4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga90718c7128320b24b52f9ea70e643ad4\">highp_umat2x3</a></td></tr>\n<tr class=\"memdesc:ga90718c7128320b24b52f9ea70e643ad4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 2x3 matrix.  <a href=\"a00294.html#ga90718c7128320b24b52f9ea70e643ad4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga90718c7128320b24b52f9ea70e643ad4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadca0a4724b4a6f56a2355b6f6e19248b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b\">highp_umat2x4</a></td></tr>\n<tr class=\"memdesc:gadca0a4724b4a6f56a2355b6f6e19248b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 2x4 matrix.  <a href=\"a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b\">More...</a><br /></td></tr>\n<tr class=\"separator:gadca0a4724b4a6f56a2355b6f6e19248b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1143120339b7d2d469d327662e8a172\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa1143120339b7d2d469d327662e8a172\">highp_umat3</a></td></tr>\n<tr class=\"memdesc:gaa1143120339b7d2d469d327662e8a172\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#gaa1143120339b7d2d469d327662e8a172\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa1143120339b7d2d469d327662e8a172\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga844a5da2e7fc03fc7cccc7f1b70809c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4\">highp_umat3x2</a></td></tr>\n<tr class=\"memdesc:ga844a5da2e7fc03fc7cccc7f1b70809c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 3x2 matrix.  <a href=\"a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga844a5da2e7fc03fc7cccc7f1b70809c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f7d41c36b980774a4d2e7c1647fb4b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2\">highp_umat3x3</a></td></tr>\n<tr class=\"memdesc:ga1f7d41c36b980774a4d2e7c1647fb4b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f7d41c36b980774a4d2e7c1647fb4b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga25ee15c323924f2d0fe9896d329e5086\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga25ee15c323924f2d0fe9896d329e5086\">highp_umat3x4</a></td></tr>\n<tr class=\"memdesc:ga25ee15c323924f2d0fe9896d329e5086\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 3x4 matrix.  <a href=\"a00294.html#ga25ee15c323924f2d0fe9896d329e5086\">More...</a><br /></td></tr>\n<tr class=\"separator:ga25ee15c323924f2d0fe9896d329e5086\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf665e4e78c2cc32a54ab40325738f9c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9\">highp_umat4</a></td></tr>\n<tr class=\"memdesc:gaf665e4e78c2cc32a54ab40325738f9c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf665e4e78c2cc32a54ab40325738f9c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae69eb82ec08b0dc9bf2ead2a339ff801\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801\">highp_umat4x2</a></td></tr>\n<tr class=\"memdesc:gae69eb82ec08b0dc9bf2ead2a339ff801\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 4x2 matrix.  <a href=\"a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801\">More...</a><br /></td></tr>\n<tr class=\"separator:gae69eb82ec08b0dc9bf2ead2a339ff801\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45a8163d02c43216252056b0c120f3a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga45a8163d02c43216252056b0c120f3a5\">highp_umat4x3</a></td></tr>\n<tr class=\"memdesc:ga45a8163d02c43216252056b0c120f3a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 4x3 matrix.  <a href=\"a00294.html#ga45a8163d02c43216252056b0c120f3a5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga45a8163d02c43216252056b0c120f3a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6a56cbb769aed334c95241664415f9ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6a56cbb769aed334c95241664415f9ba\">highp_umat4x4</a></td></tr>\n<tr class=\"memdesc:ga6a56cbb769aed334c95241664415f9ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#ga6a56cbb769aed334c95241664415f9ba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6a56cbb769aed334c95241664415f9ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaabe04f9948d4a213bb1c20137de03e01\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">imat2</a></td></tr>\n<tr class=\"memdesc:gaabe04f9948d4a213bb1c20137de03e01\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 2x2 matrix.  <a href=\"a00294.html#gaabe04f9948d4a213bb1c20137de03e01\">More...</a><br /></td></tr>\n<tr class=\"separator:gaabe04f9948d4a213bb1c20137de03e01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4732a240522ad9bc28144fda2fc14ec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">imat2x2</a></td></tr>\n<tr class=\"memdesc:gaa4732a240522ad9bc28144fda2fc14ec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 2x2 matrix.  <a href=\"a00294.html#gaa4732a240522ad9bc28144fda2fc14ec\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4732a240522ad9bc28144fda2fc14ec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3f42dd3d5d94a0fd5706f7ec8dd0c605\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">imat2x3</a></td></tr>\n<tr class=\"memdesc:ga3f42dd3d5d94a0fd5706f7ec8dd0c605\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 2x3 matrix.  <a href=\"a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3f42dd3d5d94a0fd5706f7ec8dd0c605\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9d8faafdca42583d67e792dd038fc668\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">imat2x4</a></td></tr>\n<tr class=\"memdesc:ga9d8faafdca42583d67e792dd038fc668\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 2x4 matrix.  <a href=\"a00294.html#ga9d8faafdca42583d67e792dd038fc668\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9d8faafdca42583d67e792dd038fc668\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga038f68437155ffa3c2583a15264a8195\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">imat3</a></td></tr>\n<tr class=\"memdesc:ga038f68437155ffa3c2583a15264a8195\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 3x3 matrix.  <a href=\"a00294.html#ga038f68437155ffa3c2583a15264a8195\">More...</a><br /></td></tr>\n<tr class=\"separator:ga038f68437155ffa3c2583a15264a8195\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b33bbe4f12c060892bd3cc8d4cd737f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">imat3x2</a></td></tr>\n<tr class=\"memdesc:ga7b33bbe4f12c060892bd3cc8d4cd737f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 3x2 matrix.  <a href=\"a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b33bbe4f12c060892bd3cc8d4cd737f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6aacc960f62e8f7d2fe9d32d5050e7a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">imat3x3</a></td></tr>\n<tr class=\"memdesc:ga6aacc960f62e8f7d2fe9d32d5050e7a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 3x3 matrix.  <a href=\"a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6aacc960f62e8f7d2fe9d32d5050e7a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e9ce23496d8b08dfc302d4039694b58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">imat3x4</a></td></tr>\n<tr class=\"memdesc:ga6e9ce23496d8b08dfc302d4039694b58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 3x4 matrix.  <a href=\"a00294.html#ga6e9ce23496d8b08dfc302d4039694b58\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e9ce23496d8b08dfc302d4039694b58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga96b0d26a33b81bb6a60ca0f39682f7eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">imat4</a></td></tr>\n<tr class=\"memdesc:ga96b0d26a33b81bb6a60ca0f39682f7eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 4x4 matrix.  <a href=\"a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga96b0d26a33b81bb6a60ca0f39682f7eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8ce7ef51d8b2c1901fa5414deccbc3fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">imat4x2</a></td></tr>\n<tr class=\"memdesc:ga8ce7ef51d8b2c1901fa5414deccbc3fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 4x2 matrix.  <a href=\"a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8ce7ef51d8b2c1901fa5414deccbc3fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga705ee0bf49d6c3de4404ce2481bf0df5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">imat4x3</a></td></tr>\n<tr class=\"memdesc:ga705ee0bf49d6c3de4404ce2481bf0df5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 4x3 matrix.  <a href=\"a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga705ee0bf49d6c3de4404ce2481bf0df5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43ed5e4f475b6f4cad7cba78f29c405b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_imat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">imat4x4</a></td></tr>\n<tr class=\"memdesc:ga43ed5e4f475b6f4cad7cba78f29c405b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Signed integer 4x4 matrix.  <a href=\"a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43ed5e4f475b6f4cad7cba78f29c405b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0bff0be804142bb16d441aec0a7962e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa0bff0be804142bb16d441aec0a7962e\">lowp_imat2</a></td></tr>\n<tr class=\"memdesc:gaa0bff0be804142bb16d441aec0a7962e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#gaa0bff0be804142bb16d441aec0a7962e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0bff0be804142bb16d441aec0a7962e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92b95b679975d408645547ab45a8dcd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga92b95b679975d408645547ab45a8dcd8\">lowp_imat2x2</a></td></tr>\n<tr class=\"memdesc:ga92b95b679975d408645547ab45a8dcd8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#ga92b95b679975d408645547ab45a8dcd8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga92b95b679975d408645547ab45a8dcd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8c9e7a388f8e7c52f1e6857dee8afb65\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65\">lowp_imat2x3</a></td></tr>\n<tr class=\"memdesc:ga8c9e7a388f8e7c52f1e6857dee8afb65\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 2x3 matrix.  <a href=\"a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8c9e7a388f8e7c52f1e6857dee8afb65\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9cc13bd1f8dd2933e9fa31fe3f70e16e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e\">lowp_imat2x4</a></td></tr>\n<tr class=\"memdesc:ga9cc13bd1f8dd2933e9fa31fe3f70e16e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 2x4 matrix.  <a href=\"a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9cc13bd1f8dd2933e9fa31fe3f70e16e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga69bfe668f4170379fc1f35d82b060c43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga69bfe668f4170379fc1f35d82b060c43\">lowp_imat3</a></td></tr>\n<tr class=\"memdesc:ga69bfe668f4170379fc1f35d82b060c43\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#ga69bfe668f4170379fc1f35d82b060c43\">More...</a><br /></td></tr>\n<tr class=\"separator:ga69bfe668f4170379fc1f35d82b060c43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga33db8f27491d30906cd37c0d86b3f432\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga33db8f27491d30906cd37c0d86b3f432\">lowp_imat3x2</a></td></tr>\n<tr class=\"memdesc:ga33db8f27491d30906cd37c0d86b3f432\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 3x2 matrix.  <a href=\"a00294.html#ga33db8f27491d30906cd37c0d86b3f432\">More...</a><br /></td></tr>\n<tr class=\"separator:ga33db8f27491d30906cd37c0d86b3f432\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga664f061df00020048c3f8530329ace45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga664f061df00020048c3f8530329ace45\">lowp_imat3x3</a></td></tr>\n<tr class=\"memdesc:ga664f061df00020048c3f8530329ace45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#ga664f061df00020048c3f8530329ace45\">More...</a><br /></td></tr>\n<tr class=\"separator:ga664f061df00020048c3f8530329ace45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9273faab33623d944af4080befbb2c80\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga9273faab33623d944af4080befbb2c80\">lowp_imat3x4</a></td></tr>\n<tr class=\"memdesc:ga9273faab33623d944af4080befbb2c80\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 3x4 matrix.  <a href=\"a00294.html#ga9273faab33623d944af4080befbb2c80\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9273faab33623d944af4080befbb2c80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1e77f7270cad461ca4fcb4c3ec2e98c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c\">lowp_imat4</a></td></tr>\n<tr class=\"memdesc:gad1e77f7270cad461ca4fcb4c3ec2e98c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1e77f7270cad461ca4fcb4c3ec2e98c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26ec1a2ba08a1488f5f05336858a0f09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09\">lowp_imat4x2</a></td></tr>\n<tr class=\"memdesc:ga26ec1a2ba08a1488f5f05336858a0f09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 4x2 matrix.  <a href=\"a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09\">More...</a><br /></td></tr>\n<tr class=\"separator:ga26ec1a2ba08a1488f5f05336858a0f09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f40483a3ae634ead8ad22272c543a33\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8f40483a3ae634ead8ad22272c543a33\">lowp_imat4x3</a></td></tr>\n<tr class=\"memdesc:ga8f40483a3ae634ead8ad22272c543a33\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 4x3 matrix.  <a href=\"a00294.html#ga8f40483a3ae634ead8ad22272c543a33\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f40483a3ae634ead8ad22272c543a33\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf65677e53ac8e31a107399340d5e2451\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf65677e53ac8e31a107399340d5e2451\">lowp_imat4x4</a></td></tr>\n<tr class=\"memdesc:gaf65677e53ac8e31a107399340d5e2451\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#gaf65677e53ac8e31a107399340d5e2451\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf65677e53ac8e31a107399340d5e2451\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2fba702d990437fc88ff3f3a76846ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf2fba702d990437fc88ff3f3a76846ee\">lowp_umat2</a></td></tr>\n<tr class=\"memdesc:gaf2fba702d990437fc88ff3f3a76846ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#gaf2fba702d990437fc88ff3f3a76846ee\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2fba702d990437fc88ff3f3a76846ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b2e9d89745f7175051284e54c81d81c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga7b2e9d89745f7175051284e54c81d81c\">lowp_umat2x2</a></td></tr>\n<tr class=\"memdesc:ga7b2e9d89745f7175051284e54c81d81c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga7b2e9d89745f7175051284e54c81d81c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b2e9d89745f7175051284e54c81d81c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3072f90fd86f17a862e21589fbb14c0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga3072f90fd86f17a862e21589fbb14c0f\">lowp_umat2x3</a></td></tr>\n<tr class=\"memdesc:ga3072f90fd86f17a862e21589fbb14c0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 2x3 matrix.  <a href=\"a00294.html#ga3072f90fd86f17a862e21589fbb14c0f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3072f90fd86f17a862e21589fbb14c0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8bb45fec4bd77bd81b4ae7eb961a270d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d\">lowp_umat2x4</a></td></tr>\n<tr class=\"memdesc:ga8bb45fec4bd77bd81b4ae7eb961a270d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 2x4 matrix.  <a href=\"a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8bb45fec4bd77bd81b4ae7eb961a270d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1145f72bcdd590f5808c4bc170c2924\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf1145f72bcdd590f5808c4bc170c2924\">lowp_umat3</a></td></tr>\n<tr class=\"memdesc:gaf1145f72bcdd590f5808c4bc170c2924\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#gaf1145f72bcdd590f5808c4bc170c2924\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf1145f72bcdd590f5808c4bc170c2924\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga56ea68c6a6cba8d8c21d17bb14e69c6b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b\">lowp_umat3x2</a></td></tr>\n<tr class=\"memdesc:ga56ea68c6a6cba8d8c21d17bb14e69c6b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 3x2 matrix.  <a href=\"a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga56ea68c6a6cba8d8c21d17bb14e69c6b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f660a39a395cc14f018f985e7dfbeb5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5\">lowp_umat3x3</a></td></tr>\n<tr class=\"memdesc:ga4f660a39a395cc14f018f985e7dfbeb5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f660a39a395cc14f018f985e7dfbeb5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec3d624306bd59649f021864709d56b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaec3d624306bd59649f021864709d56b5\">lowp_umat3x4</a></td></tr>\n<tr class=\"memdesc:gaec3d624306bd59649f021864709d56b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 3x4 matrix.  <a href=\"a00294.html#gaec3d624306bd59649f021864709d56b5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec3d624306bd59649f021864709d56b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac092c6105827bf9ea080db38074b78eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gac092c6105827bf9ea080db38074b78eb\">lowp_umat4</a></td></tr>\n<tr class=\"memdesc:gac092c6105827bf9ea080db38074b78eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#gac092c6105827bf9ea080db38074b78eb\">More...</a><br /></td></tr>\n<tr class=\"separator:gac092c6105827bf9ea080db38074b78eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7716c2b210d141846f1ac4e774adef5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga7716c2b210d141846f1ac4e774adef5e\">lowp_umat4x2</a></td></tr>\n<tr class=\"memdesc:ga7716c2b210d141846f1ac4e774adef5e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 4x2 matrix.  <a href=\"a00294.html#ga7716c2b210d141846f1ac4e774adef5e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7716c2b210d141846f1ac4e774adef5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09ab33a2636f5f43f7fae29cfbc20fff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff\">lowp_umat4x3</a></td></tr>\n<tr class=\"memdesc:ga09ab33a2636f5f43f7fae29cfbc20fff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 4x3 matrix.  <a href=\"a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga09ab33a2636f5f43f7fae29cfbc20fff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga10aafc66cf1a0ece336b1c5ae13d0cc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0\">lowp_umat4x4</a></td></tr>\n<tr class=\"memdesc:ga10aafc66cf1a0ece336b1c5ae13d0cc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga10aafc66cf1a0ece336b1c5ae13d0cc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20f4cc7ab23e2aa1f4db9fdb5496d378\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378\">mediump_imat2</a></td></tr>\n<tr class=\"memdesc:ga20f4cc7ab23e2aa1f4db9fdb5496d378\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378\">More...</a><br /></td></tr>\n<tr class=\"separator:ga20f4cc7ab23e2aa1f4db9fdb5496d378\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b2aeb11a329940721dda9583e71f856\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga4b2aeb11a329940721dda9583e71f856\">mediump_imat2x2</a></td></tr>\n<tr class=\"memdesc:ga4b2aeb11a329940721dda9583e71f856\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 2x2 matrix.  <a href=\"a00294.html#ga4b2aeb11a329940721dda9583e71f856\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b2aeb11a329940721dda9583e71f856\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74362470ba99843ac70aee5ac38cc674\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga74362470ba99843ac70aee5ac38cc674\">mediump_imat2x3</a></td></tr>\n<tr class=\"memdesc:ga74362470ba99843ac70aee5ac38cc674\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 2x3 matrix.  <a href=\"a00294.html#ga74362470ba99843ac70aee5ac38cc674\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74362470ba99843ac70aee5ac38cc674\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8da25cd380ba30fc5b68a4687deb3e09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09\">mediump_imat2x4</a></td></tr>\n<tr class=\"memdesc:ga8da25cd380ba30fc5b68a4687deb3e09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 2x4 matrix.  <a href=\"a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8da25cd380ba30fc5b68a4687deb3e09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6c63bdc736efd3466e0730de0251cb71\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga6c63bdc736efd3466e0730de0251cb71\">mediump_imat3</a></td></tr>\n<tr class=\"memdesc:ga6c63bdc736efd3466e0730de0251cb71\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#ga6c63bdc736efd3466e0730de0251cb71\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6c63bdc736efd3466e0730de0251cb71\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0b4e42d648fb3eaf4bb88da82ecc809\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809\">mediump_imat3x2</a></td></tr>\n<tr class=\"memdesc:gac0b4e42d648fb3eaf4bb88da82ecc809\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 3x2 matrix.  <a href=\"a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809\">More...</a><br /></td></tr>\n<tr class=\"separator:gac0b4e42d648fb3eaf4bb88da82ecc809\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad99cc2aad8fc57f068cfa7719dbbea12\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12\">mediump_imat3x3</a></td></tr>\n<tr class=\"memdesc:gad99cc2aad8fc57f068cfa7719dbbea12\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 3x3 matrix.  <a href=\"a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12\">More...</a><br /></td></tr>\n<tr class=\"separator:gad99cc2aad8fc57f068cfa7719dbbea12\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga67689a518b181a26540bc44a163525cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga67689a518b181a26540bc44a163525cd\">mediump_imat3x4</a></td></tr>\n<tr class=\"memdesc:ga67689a518b181a26540bc44a163525cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 3x4 matrix.  <a href=\"a00294.html#ga67689a518b181a26540bc44a163525cd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga67689a518b181a26540bc44a163525cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf348552978553630d2a00b78eb887ced\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf348552978553630d2a00b78eb887ced\">mediump_imat4</a></td></tr>\n<tr class=\"memdesc:gaf348552978553630d2a00b78eb887ced\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#gaf348552978553630d2a00b78eb887ced\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf348552978553630d2a00b78eb887ced\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b2d35816f7103f0f4c82dd2f27571fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc\">mediump_imat4x2</a></td></tr>\n<tr class=\"memdesc:ga8b2d35816f7103f0f4c82dd2f27571fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 4x2 matrix.  <a href=\"a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b2d35816f7103f0f4c82dd2f27571fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b10acc696759e03f6ab918f4467e94c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga5b10acc696759e03f6ab918f4467e94c\">mediump_imat4x3</a></td></tr>\n<tr class=\"memdesc:ga5b10acc696759e03f6ab918f4467e94c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 4x3 matrix.  <a href=\"a00294.html#ga5b10acc696759e03f6ab918f4467e94c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b10acc696759e03f6ab918f4467e94c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2596869d154dec1180beadbb9df80501\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, int, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga2596869d154dec1180beadbb9df80501\">mediump_imat4x4</a></td></tr>\n<tr class=\"memdesc:ga2596869d154dec1180beadbb9df80501\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier signed integer 4x4 matrix.  <a href=\"a00294.html#ga2596869d154dec1180beadbb9df80501\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2596869d154dec1180beadbb9df80501\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43041378b3410ea951b7de0dfd2bc7ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee\">mediump_umat2</a></td></tr>\n<tr class=\"memdesc:ga43041378b3410ea951b7de0dfd2bc7ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43041378b3410ea951b7de0dfd2bc7ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b209b1b751f041422137e3c065dfa98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga3b209b1b751f041422137e3c065dfa98\">mediump_umat2x2</a></td></tr>\n<tr class=\"memdesc:ga3b209b1b751f041422137e3c065dfa98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga3b209b1b751f041422137e3c065dfa98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3b209b1b751f041422137e3c065dfa98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee2c1f13b41f4c92ea5b3efe367a1306\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306\">mediump_umat2x3</a></td></tr>\n<tr class=\"memdesc:gaee2c1f13b41f4c92ea5b3efe367a1306\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 2x3 matrix.  <a href=\"a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee2c1f13b41f4c92ea5b3efe367a1306\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1317ddca16d01e119a40b7f0ee85f95\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gae1317ddca16d01e119a40b7f0ee85f95\">mediump_umat2x4</a></td></tr>\n<tr class=\"memdesc:gae1317ddca16d01e119a40b7f0ee85f95\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 2x4 matrix.  <a href=\"a00294.html#gae1317ddca16d01e119a40b7f0ee85f95\">More...</a><br /></td></tr>\n<tr class=\"separator:gae1317ddca16d01e119a40b7f0ee85f95\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1730dbe3c67801f53520b06d1aa0a34a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a\">mediump_umat3</a></td></tr>\n<tr class=\"memdesc:ga1730dbe3c67801f53520b06d1aa0a34a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1730dbe3c67801f53520b06d1aa0a34a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaadc28bfdc8ebca81ae85121b11994970\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaadc28bfdc8ebca81ae85121b11994970\">mediump_umat3x2</a></td></tr>\n<tr class=\"memdesc:gaadc28bfdc8ebca81ae85121b11994970\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 3x2 matrix.  <a href=\"a00294.html#gaadc28bfdc8ebca81ae85121b11994970\">More...</a><br /></td></tr>\n<tr class=\"separator:gaadc28bfdc8ebca81ae85121b11994970\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga48f2fc38d3f7fab3cfbc961278ced53d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d\">mediump_umat3x3</a></td></tr>\n<tr class=\"memdesc:ga48f2fc38d3f7fab3cfbc961278ced53d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga48f2fc38d3f7fab3cfbc961278ced53d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78009a1e4ca64217e46b418535e52546\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga78009a1e4ca64217e46b418535e52546\">mediump_umat3x4</a></td></tr>\n<tr class=\"memdesc:ga78009a1e4ca64217e46b418535e52546\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 3x4 matrix.  <a href=\"a00294.html#ga78009a1e4ca64217e46b418535e52546\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78009a1e4ca64217e46b418535e52546\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5087c2beb26a11d9af87432e554cf9d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga5087c2beb26a11d9af87432e554cf9d1\">mediump_umat4</a></td></tr>\n<tr class=\"memdesc:ga5087c2beb26a11d9af87432e554cf9d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#ga5087c2beb26a11d9af87432e554cf9d1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5087c2beb26a11d9af87432e554cf9d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf35aefd81cc13718f6b059623f7425fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf35aefd81cc13718f6b059623f7425fa\">mediump_umat4x2</a></td></tr>\n<tr class=\"memdesc:gaf35aefd81cc13718f6b059623f7425fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 4x2 matrix.  <a href=\"a00294.html#gaf35aefd81cc13718f6b059623f7425fa\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf35aefd81cc13718f6b059623f7425fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e1bed14fbc7f4b376aaed064f89f0fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb\">mediump_umat4x3</a></td></tr>\n<tr class=\"memdesc:ga4e1bed14fbc7f4b376aaed064f89f0fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 4x3 matrix.  <a href=\"a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e1bed14fbc7f4b376aaed064f89f0fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9428fc8430dc552aad920653f822ef3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, uint, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaa9428fc8430dc552aad920653f822ef3\">mediump_umat4x4</a></td></tr>\n<tr class=\"memdesc:gaa9428fc8430dc552aad920653f822ef3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium-qualifier unsigned integer 4x4 matrix.  <a href=\"a00294.html#gaa9428fc8430dc552aad920653f822ef3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9428fc8430dc552aad920653f822ef3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4cae85566f900debf930c41944b64691\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">umat2</a></td></tr>\n<tr class=\"memdesc:ga4cae85566f900debf930c41944b64691\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 2x2 matrix.  <a href=\"a00294.html#ga4cae85566f900debf930c41944b64691\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4cae85566f900debf930c41944b64691\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf8acdd33ce8951051edbca5200898aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">umat2x2</a></td></tr>\n<tr class=\"memdesc:gabf8acdd33ce8951051edbca5200898aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 2x2 matrix.  <a href=\"a00294.html#gabf8acdd33ce8951051edbca5200898aa\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf8acdd33ce8951051edbca5200898aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1870da7578d5022b973a83155d386ab3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">umat2x3</a></td></tr>\n<tr class=\"memdesc:ga1870da7578d5022b973a83155d386ab3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 2x3 matrix.  <a href=\"a00294.html#ga1870da7578d5022b973a83155d386ab3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1870da7578d5022b973a83155d386ab3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga57936a3998e992370e59a223e0ee4fd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">umat2x4</a></td></tr>\n<tr class=\"memdesc:ga57936a3998e992370e59a223e0ee4fd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 2x4 matrix.  <a href=\"a00294.html#ga57936a3998e992370e59a223e0ee4fd4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga57936a3998e992370e59a223e0ee4fd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5085e3ff02abbac5e537eb7b89ab63b6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">umat3</a></td></tr>\n<tr class=\"memdesc:ga5085e3ff02abbac5e537eb7b89ab63b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5085e3ff02abbac5e537eb7b89ab63b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9cd7fa637a4a6788337f45231fad9e1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">umat3x2</a></td></tr>\n<tr class=\"memdesc:ga9cd7fa637a4a6788337f45231fad9e1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 3x2 matrix.  <a href=\"a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9cd7fa637a4a6788337f45231fad9e1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f2cfcf3357db0cdf31fcb15e3c6bafb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">umat3x3</a></td></tr>\n<tr class=\"memdesc:ga1f2cfcf3357db0cdf31fcb15e3c6bafb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 3x3 matrix.  <a href=\"a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f2cfcf3357db0cdf31fcb15e3c6bafb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7c78ff3fc4309605ab0fa186c8d48ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">umat3x4</a></td></tr>\n<tr class=\"memdesc:gae7c78ff3fc4309605ab0fa186c8d48ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 3x4 matrix.  <a href=\"a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7c78ff3fc4309605ab0fa186c8d48ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga38bc7bb6494e344185df596deeb4544c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">umat4</a></td></tr>\n<tr class=\"memdesc:ga38bc7bb6494e344185df596deeb4544c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 4x4 matrix.  <a href=\"a00294.html#ga38bc7bb6494e344185df596deeb4544c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga38bc7bb6494e344185df596deeb4544c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70fa2d05896aa83cbc8c07672a429b53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">umat4x2</a></td></tr>\n<tr class=\"memdesc:ga70fa2d05896aa83cbc8c07672a429b53\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 4x2 matrix.  <a href=\"a00294.html#ga70fa2d05896aa83cbc8c07672a429b53\">More...</a><br /></td></tr>\n<tr class=\"separator:ga70fa2d05896aa83cbc8c07672a429b53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga87581417945411f75cb31dd6ca1dba98\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">umat4x3</a></td></tr>\n<tr class=\"memdesc:ga87581417945411f75cb31dd6ca1dba98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 4x3 matrix.  <a href=\"a00294.html#ga87581417945411f75cb31dd6ca1dba98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga87581417945411f75cb31dd6ca1dba98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf72e6d399c42985db6872c50f53d7eb8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mediump_umat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">umat4x4</a></td></tr>\n<tr class=\"memdesc:gaf72e6d399c42985db6872c50f53d7eb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unsigned integer 4x4 matrix.  <a href=\"a00294.html#gaf72e6d399c42985db6872c50f53d7eb8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf72e6d399c42985db6872c50f53d7eb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00100.html\" title=\"GLM_GTC_matrix_integer \">glm/gtc/matrix_integer.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines a number of matrices with integer types. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga8499cc3b016003f835314c1c756e9db9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, int, highp&gt; highp_imat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00037\">37</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa389e2d1c3b10941cae870bc0aeba5b3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, int, highp&gt; highp_imat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00049\">49</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaba49d890e06c9444795f5a133fbf1336\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 3, int, highp&gt; highp_imat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00053\">53</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga05a970fd4366dad6c8a0be676b1eae5b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 4, int, highp&gt; highp_imat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00057\">57</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaca4506a3efa679eff7c006d9826291fd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, int, highp&gt; highp_imat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00041\">41</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga91c671c3ff9706c2393e78b22fd84bcb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 2, int, highp&gt; highp_imat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00061\">61</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga07d7b7173e2a6f843ff5f1c615a95b41\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, int, highp&gt; highp_imat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00065\">65</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga53008f580be99018a17b357b5a4ffc0d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 4, int, highp&gt; highp_imat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00069\">69</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7cfb09b34e0fcf73eaf6512d6483ef56\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, int, highp&gt; highp_imat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00045\">45</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1858820fb292cae396408b2034407f72\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 2, int, highp&gt; highp_imat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00073\">73</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6be0b80ae74bb309bc5b964d93d68fc5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 3, int, highp&gt; highp_imat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00077\">77</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2c783ee6f8f040ab37df2f70392c8b44\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, int, highp&gt; highp_imat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier signed integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00081\">81</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga42cbce64c4c1cd121b8437daa6e110de\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, uint, highp&gt; highp_umat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00186\">186</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5337b7bc95f9cbac08a0c00b3f936b28\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, uint, highp&gt; highp_umat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00198\">198</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga90718c7128320b24b52f9ea70e643ad4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 3, uint, highp&gt; highp_umat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00202\">202</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadca0a4724b4a6f56a2355b6f6e19248b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 4, uint, highp&gt; highp_umat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00206\">206</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa1143120339b7d2d469d327662e8a172\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, uint, highp&gt; highp_umat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00190\">190</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga844a5da2e7fc03fc7cccc7f1b70809c4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 2, uint, highp&gt; highp_umat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00210\">210</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1f7d41c36b980774a4d2e7c1647fb4b2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, uint, highp&gt; highp_umat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00214\">214</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga25ee15c323924f2d0fe9896d329e5086\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 4, uint, highp&gt; highp_umat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00218\">218</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf665e4e78c2cc32a54ab40325738f9c9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, uint, highp&gt; highp_umat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00194\">194</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae69eb82ec08b0dc9bf2ead2a339ff801\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 2, uint, highp&gt; highp_umat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00222\">222</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga45a8163d02c43216252056b0c120f3a5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 3, uint, highp&gt; highp_umat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00226\">226</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6a56cbb769aed334c95241664415f9ba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, uint, highp&gt; highp_umat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High-qualifier unsigned integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00230\">230</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaabe04f9948d4a213bb1c20137de03e01\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat2 imat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00362\">362</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa4732a240522ad9bc28144fda2fc14ec\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat2x2 imat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00374\">374</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3f42dd3d5d94a0fd5706f7ec8dd0c605\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat2x3 imat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00378\">378</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9d8faafdca42583d67e792dd038fc668\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat2x4 imat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00382\">382</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga038f68437155ffa3c2583a15264a8195\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat3 imat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00366\">366</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7b33bbe4f12c060892bd3cc8d4cd737f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat3x2 imat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00386\">386</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6aacc960f62e8f7d2fe9d32d5050e7a4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat3x3 imat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00390\">390</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6e9ce23496d8b08dfc302d4039694b58\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat3x4 imat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00394\">394</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga96b0d26a33b81bb6a60ca0f39682f7eb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat4 imat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00370\">370</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8ce7ef51d8b2c1901fa5414deccbc3fa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat4x2 imat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00398\">398</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga705ee0bf49d6c3de4404ce2481bf0df5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat4x3 imat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00402\">402</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga43ed5e4f475b6f4cad7cba78f29c405b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_imat4x4 imat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Signed integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00406\">406</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa0bff0be804142bb16d441aec0a7962e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, int, lowp&gt; lowp_imat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00136\">136</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga92b95b679975d408645547ab45a8dcd8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, int, lowp&gt; lowp_imat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00149\">149</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8c9e7a388f8e7c52f1e6857dee8afb65\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 3, int, lowp&gt; lowp_imat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00153\">153</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9cc13bd1f8dd2933e9fa31fe3f70e16e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 4, int, lowp&gt; lowp_imat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00157\">157</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga69bfe668f4170379fc1f35d82b060c43\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, int, lowp&gt; lowp_imat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00140\">140</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga33db8f27491d30906cd37c0d86b3f432\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 2, int, lowp&gt; lowp_imat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00161\">161</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga664f061df00020048c3f8530329ace45\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, int, lowp&gt; lowp_imat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00165\">165</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9273faab33623d944af4080befbb2c80\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 4, int, lowp&gt; lowp_imat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00169\">169</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad1e77f7270cad461ca4fcb4c3ec2e98c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, int, lowp&gt; lowp_imat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00144\">144</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga26ec1a2ba08a1488f5f05336858a0f09\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 2, int, lowp&gt; lowp_imat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00173\">173</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8f40483a3ae634ead8ad22272c543a33\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 3, int, lowp&gt; lowp_imat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00177\">177</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf65677e53ac8e31a107399340d5e2451\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, int, lowp&gt; lowp_imat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier signed integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00181\">181</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf2fba702d990437fc88ff3f3a76846ee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, uint, lowp&gt; lowp_umat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00285\">285</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7b2e9d89745f7175051284e54c81d81c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, uint, lowp&gt; lowp_umat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00298\">298</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3072f90fd86f17a862e21589fbb14c0f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 3, uint, lowp&gt; lowp_umat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00302\">302</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8bb45fec4bd77bd81b4ae7eb961a270d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 4, uint, lowp&gt; lowp_umat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00306\">306</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf1145f72bcdd590f5808c4bc170c2924\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, uint, lowp&gt; lowp_umat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00289\">289</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga56ea68c6a6cba8d8c21d17bb14e69c6b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 2, uint, lowp&gt; lowp_umat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00310\">310</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4f660a39a395cc14f018f985e7dfbeb5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, uint, lowp&gt; lowp_umat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00314\">314</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaec3d624306bd59649f021864709d56b5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 4, uint, lowp&gt; lowp_umat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00318\">318</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac092c6105827bf9ea080db38074b78eb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, uint, lowp&gt; lowp_umat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00293\">293</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7716c2b210d141846f1ac4e774adef5e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 2, uint, lowp&gt; lowp_umat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00322\">322</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga09ab33a2636f5f43f7fae29cfbc20fff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 3, uint, lowp&gt; lowp_umat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00326\">326</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga10aafc66cf1a0ece336b1c5ae13d0cc0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, uint, lowp&gt; lowp_umat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low-qualifier unsigned integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00330\">330</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga20f4cc7ab23e2aa1f4db9fdb5496d378\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, int, mediump&gt; mediump_imat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00086\">86</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4b2aeb11a329940721dda9583e71f856\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, int, mediump&gt; mediump_imat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00099\">99</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga74362470ba99843ac70aee5ac38cc674\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 3, int, mediump&gt; mediump_imat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00103\">103</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8da25cd380ba30fc5b68a4687deb3e09\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 4, int, mediump&gt; mediump_imat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00107\">107</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6c63bdc736efd3466e0730de0251cb71\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, int, mediump&gt; mediump_imat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00090\">90</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac0b4e42d648fb3eaf4bb88da82ecc809\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 2, int, mediump&gt; mediump_imat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00111\">111</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad99cc2aad8fc57f068cfa7719dbbea12\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, int, mediump&gt; mediump_imat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00115\">115</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga67689a518b181a26540bc44a163525cd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 4, int, mediump&gt; mediump_imat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00119\">119</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf348552978553630d2a00b78eb887ced\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, int, mediump&gt; mediump_imat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00094\">94</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b2d35816f7103f0f4c82dd2f27571fc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 2, int, mediump&gt; mediump_imat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00123\">123</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5b10acc696759e03f6ab918f4467e94c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 3, int, mediump&gt; mediump_imat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00127\">127</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2596869d154dec1180beadbb9df80501\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, int, mediump&gt; mediump_imat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier signed integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00131\">131</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga43041378b3410ea951b7de0dfd2bc7ee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, uint, mediump&gt; mediump_umat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00235\">235</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3b209b1b751f041422137e3c065dfa98\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 2, uint, mediump&gt; mediump_umat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00248\">248</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaee2c1f13b41f4c92ea5b3efe367a1306\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 3, uint, mediump&gt; mediump_umat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00252\">252</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae1317ddca16d01e119a40b7f0ee85f95\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;2, 4, uint, mediump&gt; mediump_umat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00256\">256</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1730dbe3c67801f53520b06d1aa0a34a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, uint, mediump&gt; mediump_umat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00239\">239</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaadc28bfdc8ebca81ae85121b11994970\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 2, uint, mediump&gt; mediump_umat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00260\">260</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga48f2fc38d3f7fab3cfbc961278ced53d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 3, uint, mediump&gt; mediump_umat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00264\">264</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga78009a1e4ca64217e46b418535e52546\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;3, 4, uint, mediump&gt; mediump_umat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00268\">268</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5087c2beb26a11d9af87432e554cf9d1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, uint, mediump&gt; mediump_umat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00243\">243</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf35aefd81cc13718f6b059623f7425fa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 2, uint, mediump&gt; mediump_umat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00272\">272</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4e1bed14fbc7f4b376aaed064f89f0fb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 3, uint, mediump&gt; mediump_umat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00276\">276</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa9428fc8430dc552aad920653f822ef3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt;4, 4, uint, mediump&gt; mediump_umat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium-qualifier unsigned integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00280\">280</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4cae85566f900debf930c41944b64691\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat2 umat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00439\">439</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabf8acdd33ce8951051edbca5200898aa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat2x2 umat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 2x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00451\">451</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1870da7578d5022b973a83155d386ab3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat2x3 umat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00455\">455</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga57936a3998e992370e59a223e0ee4fd4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat2x4 umat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00459\">459</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5085e3ff02abbac5e537eb7b89ab63b6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat3 umat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00443\">443</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9cd7fa637a4a6788337f45231fad9e1a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat3x2 umat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00463\">463</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1f2cfcf3357db0cdf31fcb15e3c6bafb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat3x3 umat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00467\">467</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae7c78ff3fc4309605ab0fa186c8d48ba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat3x4 umat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00471\">471</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga38bc7bb6494e344185df596deeb4544c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat4 umat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00447\">447</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga70fa2d05896aa83cbc8c07672a429b53\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat4x2 umat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00475\">475</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga87581417945411f75cb31dd6ca1dba98\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat4x3 umat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00479\">479</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf72e6d399c42985db6872c50f53d7eb8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_umat4x4 umat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unsigned integer 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00294.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_integer</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00100_source.html#l00483\">483</a> of file <a class=\"el\" href=\"a00100_source.html\">matrix_integer.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00295.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_matrix_inverse</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_matrix_inverse<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00100.html\" title=\"GLM_GTC_matrix_integer \">glm/gtc/matrix_integer.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gae0fcc5fc8783291f9702272de428fa0e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae0fcc5fc8783291f9702272de428fa0e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00295.html#gae0fcc5fc8783291f9702272de428fa0e\">affineInverse</a> (genType const &amp;m)</td></tr>\n<tr class=\"memdesc:gae0fcc5fc8783291f9702272de428fa0e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Fast matrix inverse for affine matrix.  <a href=\"a00295.html#gae0fcc5fc8783291f9702272de428fa0e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae0fcc5fc8783291f9702272de428fa0e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab213cd0e3ead5f316d583f99d6312008\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gab213cd0e3ead5f316d583f99d6312008\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00295.html#gab213cd0e3ead5f316d583f99d6312008\">inverseTranspose</a> (genType const &amp;m)</td></tr>\n<tr class=\"memdesc:gab213cd0e3ead5f316d583f99d6312008\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the inverse transpose of a matrix.  <a href=\"a00295.html#gab213cd0e3ead5f316d583f99d6312008\">More...</a><br /></td></tr>\n<tr class=\"separator:gab213cd0e3ead5f316d583f99d6312008\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00100.html\" title=\"GLM_GTC_matrix_integer \">glm/gtc/matrix_integer.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines additional matrix inverting functions. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gae0fcc5fc8783291f9702272de428fa0e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::affineInverse </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Fast matrix inverse for affine matrix. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix to invert. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly innacurate. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00295.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_inverse</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab213cd0e3ead5f316d583f99d6312008\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::inverseTranspose </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the inverse transpose of a matrix. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix to invert transpose. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly innacurate. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00295.html\" title=\"Include <glm/gtc/matrix_integer.hpp> to use the features of this extension. \">GLM_GTC_matrix_inverse</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00296.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_matrix_transform</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_matrix_transform<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00109.html\" title=\"GLM_GTC_matrix_transform \">glm/gtc/matrix_transform.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<p>Include &lt;<a class=\"el\" href=\"a00109.html\" title=\"GLM_GTC_matrix_transform \">glm/gtc/matrix_transform.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines functions that generate common transformation matrices.</p>\n<p>The matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the lookAt function generates a transform from world space into the specific eye space that the projective matrix functions (perspective, ortho, etc) are designed to expect. The OpenGL compatibility specifications defines the particular layout of this eye space. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00297.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_noise</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_noise<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00112.html\" title=\"GLM_GTC_noise \">glm/gtc/noise.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1e043ce3b51510e9bc4469227cefc38a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1e043ce3b51510e9bc4469227cefc38a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00297.html#ga1e043ce3b51510e9bc4469227cefc38a\">perlin</a> (vec&lt; L, T, Q &gt; const &amp;p)</td></tr>\n<tr class=\"memdesc:ga1e043ce3b51510e9bc4469227cefc38a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Classic perlin noise.  <a href=\"a00297.html#ga1e043ce3b51510e9bc4469227cefc38a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e043ce3b51510e9bc4469227cefc38a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac270edc54c5fc52f5985a45f940bb103\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac270edc54c5fc52f5985a45f940bb103\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00297.html#gac270edc54c5fc52f5985a45f940bb103\">perlin</a> (vec&lt; L, T, Q &gt; const &amp;p, vec&lt; L, T, Q &gt; const &amp;rep)</td></tr>\n<tr class=\"memdesc:gac270edc54c5fc52f5985a45f940bb103\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Periodic perlin noise.  <a href=\"a00297.html#gac270edc54c5fc52f5985a45f940bb103\">More...</a><br /></td></tr>\n<tr class=\"separator:gac270edc54c5fc52f5985a45f940bb103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8122468c69015ff397349a7dcc638b27\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8122468c69015ff397349a7dcc638b27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00297.html#ga8122468c69015ff397349a7dcc638b27\">simplex</a> (vec&lt; L, T, Q &gt; const &amp;p)</td></tr>\n<tr class=\"memdesc:ga8122468c69015ff397349a7dcc638b27\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simplex noise.  <a href=\"a00297.html#ga8122468c69015ff397349a7dcc638b27\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8122468c69015ff397349a7dcc638b27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00112.html\" title=\"GLM_GTC_noise \">glm/gtc/noise.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines 2D, 3D and 4D procedural noise functions Based on the work of Stefan Gustavson and Ashima Arts on \"webgl-noise\": <a href=\"https://github.com/ashima/webgl-noise\">https://github.com/ashima/webgl-noise</a> Following Stefan Gustavson's paper \"Simplex noise demystified\": <a href=\"http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf\">http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf</a> </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga1e043ce3b51510e9bc4469227cefc38a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::perlin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Classic perlin noise. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00297.html\" title=\"Include <glm/gtc/noise.hpp> to use the features of this extension. \">GLM_GTC_noise</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac270edc54c5fc52f5985a45f940bb103\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::perlin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rep</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Periodic perlin noise. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00297.html\" title=\"Include <glm/gtc/noise.hpp> to use the features of this extension. \">GLM_GTC_noise</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8122468c69015ff397349a7dcc638b27\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::simplex </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Simplex noise. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00297.html\" title=\"Include <glm/gtc/noise.hpp> to use the features of this extension. \">GLM_GTC_noise</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00298.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_packing</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_packing<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00119.html\" title=\"GLM_GTC_packing \">glm/gtc/packing.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga4944ad465ff950e926d49621f916c78d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga4944ad465ff950e926d49621f916c78d\">packF2x11_1x10</a> (vec3 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4944ad465ff950e926d49621f916c78d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.  <a href=\"a00298.html#ga4944ad465ff950e926d49621f916c78d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4944ad465ff950e926d49621f916c78d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3f648fc205467792dc6d8c59c748f8a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga3f648fc205467792dc6d8c59c748f8a6\">packF3x9_E1x5</a> (vec3 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3f648fc205467792dc6d8c59c748f8a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.  <a href=\"a00298.html#ga3f648fc205467792dc6d8c59c748f8a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3f648fc205467792dc6d8c59c748f8a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2d8bbce673ebc04831c1fb05c47f5251\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2d8bbce673ebc04831c1fb05c47f5251\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint16, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251\">packHalf</a> (vec&lt; L, float, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2d8bbce673ebc04831c1fb05c47f5251\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification.  <a href=\"a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2d8bbce673ebc04831c1fb05c47f5251\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43f2093b6ff192a79058ff7834fc3528\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga43f2093b6ff192a79058ff7834fc3528\">packHalf1x16</a> (float v)</td></tr>\n<tr class=\"memdesc:ga43f2093b6ff192a79058ff7834fc3528\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 16-bit floating-point representation found in the OpenGL Specification, and then packing this 16-bit value into a 16-bit unsigned integer.  <a href=\"a00298.html#ga43f2093b6ff192a79058ff7834fc3528\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43f2093b6ff192a79058ff7834fc3528\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe2f7b39caf8f5ec555e1c059ec530e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6\">packHalf4x16</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gafe2f7b39caf8f5ec555e1c059ec530e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a four-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these four 16-bit values into a 64-bit unsigned integer.  <a href=\"a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6\">More...</a><br /></td></tr>\n<tr class=\"separator:gafe2f7b39caf8f5ec555e1c059ec530e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga06ecb6afb902dba45419008171db9023\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga06ecb6afb902dba45419008171db9023\">packI3x10_1x2</a> (ivec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga06ecb6afb902dba45419008171db9023\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a four-component signed integer vector to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer.  <a href=\"a00298.html#ga06ecb6afb902dba45419008171db9023\">More...</a><br /></td></tr>\n<tr class=\"separator:ga06ecb6afb902dba45419008171db9023\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3644163cf3a47bf1d4af1f4b03013a7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e\">packInt2x16</a> (i16vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3644163cf3a47bf1d4af1f4b03013a7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3644163cf3a47bf1d4af1f4b03013a7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1e4c8a9e67d86b61a6eec86703a827a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a\">packInt2x32</a> (i32vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:gad1e4c8a9e67d86b61a6eec86703a827a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1e4c8a9e67d86b61a6eec86703a827a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8884b1f2292414f36d59ef3be5d62914\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga8884b1f2292414f36d59ef3be5d62914\">packInt2x8</a> (i8vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8884b1f2292414f36d59ef3be5d62914\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#ga8884b1f2292414f36d59ef3be5d62914\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8884b1f2292414f36d59ef3be5d62914\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1989f093a27ae69cf9207145be48b3d7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga1989f093a27ae69cf9207145be48b3d7\">packInt4x16</a> (i16vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1989f093a27ae69cf9207145be48b3d7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#ga1989f093a27ae69cf9207145be48b3d7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1989f093a27ae69cf9207145be48b3d7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2238401d5ce2aaade1a44ba19709072\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaf2238401d5ce2aaade1a44ba19709072\">packInt4x8</a> (i8vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf2238401d5ce2aaade1a44ba19709072\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed integer.  <a href=\"a00298.html#gaf2238401d5ce2aaade1a44ba19709072\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2238401d5ce2aaade1a44ba19709072\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0466daf4c90f76cc64b3f105ce727295\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0466daf4c90f76cc64b3f105ce727295\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga0466daf4c90f76cc64b3f105ce727295\">packRGBM</a> (vec&lt; 3, T, Q &gt; const &amp;rgb)</td></tr>\n<tr class=\"memdesc:ga0466daf4c90f76cc64b3f105ce727295\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification.  <a href=\"a00298.html#ga0466daf4c90f76cc64b3f105ce727295\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0466daf4c90f76cc64b3f105ce727295\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa54b5855a750d6aeb12c1c902f5939b8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename intType , length_t L, typename floatType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa54b5855a750d6aeb12c1c902f5939b8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, intType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8\">packSnorm</a> (vec&lt; L, floatType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa54b5855a750d6aeb12c1c902f5939b8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into signed integer values.  <a href=\"a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa54b5855a750d6aeb12c1c902f5939b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab22f8bcfdb5fc65af4701b25f143c1af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af\">packSnorm1x16</a> (float v)</td></tr>\n<tr class=\"memdesc:gab22f8bcfdb5fc65af4701b25f143c1af\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the normalized floating-point value v into 16-bit integer value.  <a href=\"a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af\">More...</a><br /></td></tr>\n<tr class=\"separator:gab22f8bcfdb5fc65af4701b25f143c1af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae3592e0795e62aaa1865b3a10496a7a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gae3592e0795e62aaa1865b3a10496a7a1\">packSnorm1x8</a> (float s)</td></tr>\n<tr class=\"memdesc:gae3592e0795e62aaa1865b3a10496a7a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the normalized floating-point value v into 8-bit integer value.  <a href=\"a00298.html#gae3592e0795e62aaa1865b3a10496a7a1\">More...</a><br /></td></tr>\n<tr class=\"separator:gae3592e0795e62aaa1865b3a10496a7a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6be3cfb2cce3702f03e91bbeb5286d7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e\">packSnorm2x8</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga6be3cfb2cce3702f03e91bbeb5286d7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8-bit integer values.  <a href=\"a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6be3cfb2cce3702f03e91bbeb5286d7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab997545661877d2c7362a5084d3897d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab997545661877d2c7362a5084d3897d3\">packSnorm3x10_1x2</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gab997545661877d2c7362a5084d3897d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values.  <a href=\"a00298.html#gab997545661877d2c7362a5084d3897d3\">More...</a><br /></td></tr>\n<tr class=\"separator:gab997545661877d2c7362a5084d3897d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga358943934d21da947d5bcc88c2ab7832\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga358943934d21da947d5bcc88c2ab7832\">packSnorm4x16</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga358943934d21da947d5bcc88c2ab7832\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 16-bit integer values.  <a href=\"a00298.html#ga358943934d21da947d5bcc88c2ab7832\">More...</a><br /></td></tr>\n<tr class=\"separator:ga358943934d21da947d5bcc88c2ab7832\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada3d88d59f0f458f9c51a9fd359a4bc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0\">packU3x10_1x2</a> (uvec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gada3d88d59f0f458f9c51a9fd359a4bc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer.  <a href=\"a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0\">More...</a><br /></td></tr>\n<tr class=\"separator:gada3d88d59f0f458f9c51a9fd359a4bc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5eecc9e8cbaf51ac6cf57501e670ee19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19\">packUint2x16</a> (u16vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga5eecc9e8cbaf51ac6cf57501e670ee19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5eecc9e8cbaf51ac6cf57501e670ee19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa864081097b86e83d8e4a4d79c382b22\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaa864081097b86e83d8e4a4d79c382b22\">packUint2x32</a> (u32vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa864081097b86e83d8e4a4d79c382b22\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#gaa864081097b86e83d8e4a4d79c382b22\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa864081097b86e83d8e4a4d79c382b22\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3c3c9fb53ae7823b10fa083909357590\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga3c3c9fb53ae7823b10fa083909357590\">packUint2x8</a> (u8vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3c3c9fb53ae7823b10fa083909357590\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#ga3c3c9fb53ae7823b10fa083909357590\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3c3c9fb53ae7823b10fa083909357590\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ceb62cca347d8ace42ee90317a3f1f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9\">packUint4x16</a> (u16vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2ceb62cca347d8ace42ee90317a3f1f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ceb62cca347d8ace42ee90317a3f1f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0fe2f09aeb403cd66c1a062f58861ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab\">packUint4x8</a> (u8vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa0fe2f09aeb403cd66c1a062f58861ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component from an integer vector into a packed unsigned integer.  <a href=\"a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0fe2f09aeb403cd66c1a062f58861ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename uintType , length_t L, typename floatType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uintType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a\">packUnorm</a> (vec&lt; L, floatType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaccd3f27e6ba5163eb7aa9bc8ff96251a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9f82737bf2a44bedff1d286b76837886\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga9f82737bf2a44bedff1d286b76837886\">packUnorm1x16</a> (float v)</td></tr>\n<tr class=\"memdesc:ga9f82737bf2a44bedff1d286b76837886\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the normalized floating-point value v into a 16-bit integer value.  <a href=\"a00298.html#ga9f82737bf2a44bedff1d286b76837886\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9f82737bf2a44bedff1d286b76837886\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga768e0337dd6246773f14aa0a421fe9a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga768e0337dd6246773f14aa0a421fe9a8\">packUnorm1x5_1x6_1x5</a> (vec3 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga768e0337dd6246773f14aa0a421fe9a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#ga768e0337dd6246773f14aa0a421fe9a8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga768e0337dd6246773f14aa0a421fe9a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b2fa60df3460403817d28b082ee0736\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga4b2fa60df3460403817d28b082ee0736\">packUnorm1x8</a> (float v)</td></tr>\n<tr class=\"memdesc:ga4b2fa60df3460403817d28b082ee0736\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the normalized floating-point value v into a 8-bit integer value.  <a href=\"a00298.html#ga4b2fa60df3460403817d28b082ee0736\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b2fa60df3460403817d28b082ee0736\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f9abdb50f9be1aa1c14912504a0d98d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d\">packUnorm2x3_1x2</a> (vec3 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga7f9abdb50f9be1aa1c14912504a0d98d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f9abdb50f9be1aa1c14912504a0d98d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab6bbd5be3b8e6db538ecb33a7844481c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c\">packUnorm2x4</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:gab6bbd5be3b8e6db538ecb33a7844481c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c\">More...</a><br /></td></tr>\n<tr class=\"separator:gab6bbd5be3b8e6db538ecb33a7844481c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a666b1c688ab54100061ed06526de6e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga9a666b1c688ab54100061ed06526de6e\">packUnorm2x8</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga9a666b1c688ab54100061ed06526de6e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8-bit integer values.  <a href=\"a00298.html#ga9a666b1c688ab54100061ed06526de6e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9a666b1c688ab54100061ed06526de6e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a1ee625d2707c60530fb3fca2980b19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga8a1ee625d2707c60530fb3fca2980b19\">packUnorm3x10_1x2</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8a1ee625d2707c60530fb3fca2980b19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values.  <a href=\"a00298.html#ga8a1ee625d2707c60530fb3fca2980b19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8a1ee625d2707c60530fb3fca2980b19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec4112086d7fb133bea104a7c237de52\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaec4112086d7fb133bea104a7c237de52\">packUnorm3x5_1x1</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaec4112086d7fb133bea104a7c237de52\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#gaec4112086d7fb133bea104a7c237de52\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec4112086d7fb133bea104a7c237de52\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f63c264e7ab63264e2b2a99fd393897\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga1f63c264e7ab63264e2b2a99fd393897\">packUnorm4x16</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1f63c264e7ab63264e2b2a99fd393897\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 16-bit integer values.  <a href=\"a00298.html#ga1f63c264e7ab63264e2b2a99fd393897\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f63c264e7ab63264e2b2a99fd393897\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad3e7e3ce521513584a53aedc5f9765c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gad3e7e3ce521513584a53aedc5f9765c1\">packUnorm4x4</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gad3e7e3ce521513584a53aedc5f9765c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert each component of the normalized floating-point vector into unsigned integer values.  <a href=\"a00298.html#gad3e7e3ce521513584a53aedc5f9765c1\">More...</a><br /></td></tr>\n<tr class=\"separator:gad3e7e3ce521513584a53aedc5f9765c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b1fd1e854705b1345e98409e0a25e50\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2b1fd1e854705b1345e98409e0a25e50\">unpackF2x11_1x10</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga2b1fd1e854705b1345e98409e0a25e50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .  <a href=\"a00298.html#ga2b1fd1e854705b1345e98409e0a25e50\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b1fd1e854705b1345e98409e0a25e50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab9e60ebe3ad3eeced6a9ec6eb876d74e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e\">unpackF3x9_E1x5</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:gab9e60ebe3ad3eeced6a9ec6eb876d74e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .  <a href=\"a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e\">More...</a><br /></td></tr>\n<tr class=\"separator:gab9e60ebe3ad3eeced6a9ec6eb876d74e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30d6b2f1806315bcd6047131f547d33b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga30d6b2f1806315bcd6047131f547d33b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, float, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga30d6b2f1806315bcd6047131f547d33b\">unpackHalf</a> (vec&lt; L, uint16, Q &gt; const &amp;p)</td></tr>\n<tr class=\"memdesc:ga30d6b2f1806315bcd6047131f547d33b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values.  <a href=\"a00298.html#ga30d6b2f1806315bcd6047131f547d33b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga30d6b2f1806315bcd6047131f547d33b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac37dedaba24b00adb4ec6e8f92c19dbf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf\">unpackHalf1x16</a> (uint16 v)</td></tr>\n<tr class=\"memdesc:gac37dedaba24b00adb4ec6e8f92c19dbf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value, interpreted as a 16-bit floating-point number according to the OpenGL Specification, and converting it to 32-bit floating-point values.  <a href=\"a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf\">More...</a><br /></td></tr>\n<tr class=\"separator:gac37dedaba24b00adb4ec6e8f92c19dbf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga57dfc41b2eb20b0ac00efae7d9c49dcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd\">unpackHalf4x16</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:ga57dfc41b2eb20b0ac00efae7d9c49dcd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values.  <a href=\"a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga57dfc41b2eb20b0ac00efae7d9c49dcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a05330e5490be0908d3b117d82aff56\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL ivec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga9a05330e5490be0908d3b117d82aff56\">unpackI3x10_1x2</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga9a05330e5490be0908d3b117d82aff56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers.  <a href=\"a00298.html#ga9a05330e5490be0908d3b117d82aff56\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9a05330e5490be0908d3b117d82aff56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaccde055882918a3175de82f4ca8b7d8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i16vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaccde055882918a3175de82f4ca8b7d8e\">unpackInt2x16</a> (int p)</td></tr>\n<tr class=\"memdesc:gaccde055882918a3175de82f4ca8b7d8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gaccde055882918a3175de82f4ca8b7d8e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaccde055882918a3175de82f4ca8b7d8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab297c0bfd38433524791eb0584d8f08d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i32vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab297c0bfd38433524791eb0584d8f08d\">unpackInt2x32</a> (int64 p)</td></tr>\n<tr class=\"memdesc:gab297c0bfd38433524791eb0584d8f08d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gab297c0bfd38433524791eb0584d8f08d\">More...</a><br /></td></tr>\n<tr class=\"separator:gab297c0bfd38433524791eb0584d8f08d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0c59f1e259fca9e68adb2207a6b665e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i8vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab0c59f1e259fca9e68adb2207a6b665e\">unpackInt2x8</a> (int16 p)</td></tr>\n<tr class=\"memdesc:gab0c59f1e259fca9e68adb2207a6b665e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gab0c59f1e259fca9e68adb2207a6b665e\">More...</a><br /></td></tr>\n<tr class=\"separator:gab0c59f1e259fca9e68adb2207a6b665e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52c154a9b232b62c22517a700cc0c78c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i16vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga52c154a9b232b62c22517a700cc0c78c\">unpackInt4x16</a> (int64 p)</td></tr>\n<tr class=\"memdesc:ga52c154a9b232b62c22517a700cc0c78c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#ga52c154a9b232b62c22517a700cc0c78c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga52c154a9b232b62c22517a700cc0c78c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1cd8d2038cdd33a860801aa155a26221\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL i8vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga1cd8d2038cdd33a860801aa155a26221\">unpackInt4x8</a> (int32 p)</td></tr>\n<tr class=\"memdesc:ga1cd8d2038cdd33a860801aa155a26221\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#ga1cd8d2038cdd33a860801aa155a26221\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1cd8d2038cdd33a860801aa155a26221\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c1ec97894b05ea21a05aea4f0204a02\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5c1ec97894b05ea21a05aea4f0204a02\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02\">unpackRGBM</a> (vec&lt; 4, T, Q &gt; const &amp;rgbm)</td></tr>\n<tr class=\"memdesc:ga5c1ec97894b05ea21a05aea4f0204a02\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values.  <a href=\"a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c1ec97894b05ea21a05aea4f0204a02\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d49b31e5c3f9df8e1f99ab62b999482\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename floatType , length_t L, typename intType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6d49b31e5c3f9df8e1f99ab62b999482\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482\">unpackSnorm</a> (vec&lt; L, intType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga6d49b31e5c3f9df8e1f99ab62b999482\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d49b31e5c3f9df8e1f99ab62b999482\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga96dd15002370627a443c835ab03a766c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga96dd15002370627a443c835ab03a766c\">unpackSnorm1x16</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga96dd15002370627a443c835ab03a766c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers.  <a href=\"a00298.html#ga96dd15002370627a443c835ab03a766c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga96dd15002370627a443c835ab03a766c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4851ff86678aa1c7ace9d67846894285\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga4851ff86678aa1c7ace9d67846894285\">unpackSnorm1x8</a> (uint8 p)</td></tr>\n<tr class=\"memdesc:ga4851ff86678aa1c7ace9d67846894285\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers.  <a href=\"a00298.html#ga4851ff86678aa1c7ace9d67846894285\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4851ff86678aa1c7ace9d67846894285\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b128e89be449fc71336968a66bf6e1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga8b128e89be449fc71336968a66bf6e1a\">unpackSnorm2x8</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga8b128e89be449fc71336968a66bf6e1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers.  <a href=\"a00298.html#ga8b128e89be449fc71336968a66bf6e1a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b128e89be449fc71336968a66bf6e1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a4fbf79be9740e3c57737bc2af05e5b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b\">unpackSnorm3x10_1x2</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga7a4fbf79be9740e3c57737bc2af05e5b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.  <a href=\"a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a4fbf79be9740e3c57737bc2af05e5b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaddf9c353528fe896106f7181219c7f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaaddf9c353528fe896106f7181219c7f4\">unpackSnorm4x16</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:gaaddf9c353528fe896106f7181219c7f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers.  <a href=\"a00298.html#gaaddf9c353528fe896106f7181219c7f4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaddf9c353528fe896106f7181219c7f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga48df3042a7d079767f5891a1bfd8a60a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga48df3042a7d079767f5891a1bfd8a60a\">unpackU3x10_1x2</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga48df3042a7d079767f5891a1bfd8a60a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers.  <a href=\"a00298.html#ga48df3042a7d079767f5891a1bfd8a60a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga48df3042a7d079767f5891a1bfd8a60a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga035bbbeab7ec2b28c0529757395b645b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u16vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga035bbbeab7ec2b28c0529757395b645b\">unpackUint2x16</a> (uint p)</td></tr>\n<tr class=\"memdesc:ga035bbbeab7ec2b28c0529757395b645b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#ga035bbbeab7ec2b28c0529757395b645b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga035bbbeab7ec2b28c0529757395b645b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf942ff11b65e83eb5f77e68329ebc6ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u32vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab\">unpackUint2x32</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:gaf942ff11b65e83eb5f77e68329ebc6ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf942ff11b65e83eb5f77e68329ebc6ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7600a6c71784b637a410869d2a5adcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u8vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaa7600a6c71784b637a410869d2a5adcd\">unpackUint2x8</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:gaa7600a6c71784b637a410869d2a5adcd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gaa7600a6c71784b637a410869d2a5adcd\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7600a6c71784b637a410869d2a5adcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab173834ef14cfc23a96a959f3ff4b8dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u16vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc\">unpackUint4x16</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:gab173834ef14cfc23a96a959f3ff4b8dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc\">More...</a><br /></td></tr>\n<tr class=\"separator:gab173834ef14cfc23a96a959f3ff4b8dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6dc0e4341810a641c7ed08f10e335d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL u8vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1\">unpackUint4x8</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:gaf6dc0e4341810a641c7ed08f10e335d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer into an integer vector.  <a href=\"a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6dc0e4341810a641c7ed08f10e335d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename floatType , length_t L, typename uintType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f\">unpackUnorm</a> (vec&lt; L, uintType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e6ac9178b59f0b1b2f7599f2183eb7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83d34160a5cb7bcb5339823210fc7501\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga83d34160a5cb7bcb5339823210fc7501\">unpackUnorm1x16</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga83d34160a5cb7bcb5339823210fc7501\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers.  <a href=\"a00298.html#ga83d34160a5cb7bcb5339823210fc7501\">More...</a><br /></td></tr>\n<tr class=\"separator:ga83d34160a5cb7bcb5339823210fc7501\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3bc08ecfc0f3339be93fb2b3b56d88a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a\">unpackUnorm1x5_1x6_1x5</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:gab3bc08ecfc0f3339be93fb2b3b56d88a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3bc08ecfc0f3339be93fb2b3b56d88a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1319207e30874fb4931a9ee913983ee1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga1319207e30874fb4931a9ee913983ee1\">unpackUnorm1x8</a> (uint8 p)</td></tr>\n<tr class=\"memdesc:ga1319207e30874fb4931a9ee913983ee1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a single 8-bit integer to a normalized floating-point value.  <a href=\"a00298.html#ga1319207e30874fb4931a9ee913983ee1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1319207e30874fb4931a9ee913983ee1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6abd5a9014df3b5ce4059008d2491260\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga6abd5a9014df3b5ce4059008d2491260\">unpackUnorm2x3_1x2</a> (uint8 p)</td></tr>\n<tr class=\"memdesc:ga6abd5a9014df3b5ce4059008d2491260\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga6abd5a9014df3b5ce4059008d2491260\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6abd5a9014df3b5ce4059008d2491260\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e50476132fe5f27f08e273d9c70d85b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2e50476132fe5f27f08e273d9c70d85b\">unpackUnorm2x4</a> (uint8 p)</td></tr>\n<tr class=\"memdesc:ga2e50476132fe5f27f08e273d9c70d85b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga2e50476132fe5f27f08e273d9c70d85b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e50476132fe5f27f08e273d9c70d85b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga637cbe3913dd95c6e7b4c99c61bd611f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f\">unpackUnorm2x8</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga637cbe3913dd95c6e7b4c99c61bd611f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers.  <a href=\"a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga637cbe3913dd95c6e7b4c99c61bd611f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5156d3060355fe332865da2c7f78815f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga5156d3060355fe332865da2c7f78815f\">unpackUnorm3x10_1x2</a> (uint32 p)</td></tr>\n<tr class=\"memdesc:ga5156d3060355fe332865da2c7f78815f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.  <a href=\"a00298.html#ga5156d3060355fe332865da2c7f78815f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5156d3060355fe332865da2c7f78815f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ff95ff5bc16f396432ab67243dbae4d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d\">unpackUnorm3x5_1x1</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:ga5ff95ff5bc16f396432ab67243dbae4d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5ff95ff5bc16f396432ab67243dbae4d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ae149c5d2473ac1e5f347bb654a242d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d\">unpackUnorm4x16</a> (uint64 p)</td></tr>\n<tr class=\"memdesc:ga2ae149c5d2473ac1e5f347bb654a242d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers.  <a href=\"a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ae149c5d2473ac1e5f347bb654a242d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac58ee89d0e224bb6df5e8bbb18843a2d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d\">unpackUnorm4x4</a> (uint16 p)</td></tr>\n<tr class=\"memdesc:gac58ee89d0e224bb6df5e8bbb18843a2d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a packed integer to a normalized floating-point vector.  <a href=\"a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d\">More...</a><br /></td></tr>\n<tr class=\"separator:gac58ee89d0e224bb6df5e8bbb18843a2d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00119.html\" title=\"GLM_GTC_packing \">glm/gtc/packing.hpp</a>&gt; to use the features of this extension. </p>\n<p>This extension provides a set of function to convert vertors to packed formats. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga4944ad465ff950e926d49621f916c78d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::packF2x11_1x10 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. </p>\n<p>Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. Then, the results are packed into the returned 32-bit unsigned integer.</p>\n<p>The first vector component specifies the 11 least-significant bits of the result; the last component specifies the 10 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec3 unpackF2x11_1x10(uint32 const&amp; p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3f648fc205467792dc6d8c59c748f8a6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::packF3x9_E1x5 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. </p>\n<p>Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. Then, the results are packed into the returned 32-bit unsigned integer.</p>\n<p>The first vector component specifies the 11 least-significant bits of the result; the last component specifies the 10 most-significant bits.</p>\n<p>packF3x9_E1x5 allows encoding into RGBE / RGB9E5 format</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec3 unpackF3x9_E1x5(uint32 const&amp; p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2d8bbce673ebc04831c1fb05c47f5251\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, uint16, Q&gt; glm::packHalf </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, float, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification. </p>\n<p>The first vector component specifies the 16 least-significant bits of the result; the forth component specifies the 16 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec&lt;L, float, Q&gt; unpackHalf(vec&lt;L, uint16, Q&gt; const&amp; p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga43f2093b6ff192a79058ff7834fc3528\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packHalf1x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\">float&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns an unsigned integer obtained by converting the components of a floating-point scalar to the 16-bit floating-point representation found in the OpenGL Specification, and then packing this 16-bit value into a 16-bit unsigned integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packHalf2x16(vec2 const&amp; v) </dd>\n<dd>\nuint64 packHalf4x16(vec4 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml\">GLSL packHalf2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafe2f7b39caf8f5ec555e1c059ec530e6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::packHalf4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns an unsigned integer obtained by converting the components of a four-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these four 16-bit values into a 64-bit unsigned integer. </p>\n<p>The first vector component specifies the 16 least-significant bits of the result; the forth component specifies the 16 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packHalf1x16(float const&amp; v) </dd>\n<dd>\nuint32 packHalf2x16(vec2 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml\">GLSL packHalf2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga06ecb6afb902dba45419008171db9023\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::packI3x10_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns an unsigned integer obtained by converting the components of a four-component signed integer vector to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer. </p>\n<p>The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packI3x10_1x2(uvec4 const&amp; v) </dd>\n<dd>\nuint32 packSnorm3x10_1x2(vec4 const&amp; v) </dd>\n<dd>\nuint32 packUnorm3x10_1x2(vec4 const&amp; v) </dd>\n<dd>\nivec4 unpackI3x10_1x2(uint32 const&amp; p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3644163cf3a47bf1d4af1f4b03013a7e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::packInt2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">i16vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\ni16vec2 unpackInt2x16(int p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad1e4c8a9e67d86b61a6eec86703a827a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int64 glm::packInt2x32 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">i32vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\ni32vec2 unpackInt2x32(int p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8884b1f2292414f36d59ef3be5d62914\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int16 glm::packInt2x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">i8vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\ni8vec2 unpackInt2x8(int16 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1989f093a27ae69cf9207145be48b3d7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int64 glm::packInt4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">i16vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\ni16vec4 unpackInt4x16(int64 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf2238401d5ce2aaade1a44ba19709072\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int32 glm::packInt4x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">i8vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\ni8vec4 unpackInt4x8(int32 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0466daf4c90f76cc64b3f105ce727295\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::packRGBM </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rgb</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns an unsigned integer vector obtained by converting the components of a floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification. </p>\n<p>The first vector component specifies the 16 least-significant bits of the result; the forth component specifies the 16 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec&lt;3, T, Q&gt; unpackRGBM(vec&lt;4, T, Q&gt; const&amp; p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa54b5855a750d6aeb12c1c902f5939b8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, intType, Q&gt; glm::packSnorm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, floatType, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component of the normalized floating-point vector into signed integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec&lt;L, floatType, Q&gt; unpackSnorm(vec&lt;L, intType, Q&gt; const&amp; p); </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab22f8bcfdb5fc65af4701b25f143c1af\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packSnorm1x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\">float&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts the normalized floating-point value v into 16-bit integer value. </p>\n<p>Then, the results are packed into the returned 16-bit unsigned integer.</p>\n<p>The conversion to fixed point is done as follows: packSnorm1x8: round(clamp(s, -1, +1) * 32767.0)</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packSnorm2x16(vec2 const&amp; v) </dd>\n<dd>\nuint64 packSnorm4x16(vec4 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae3592e0795e62aaa1865b3a10496a7a1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint8 glm::packSnorm1x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\">float&#160;</td>\n          <td class=\"paramname\"><em>s</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts the normalized floating-point value v into 8-bit integer value. </p>\n<p>Then, the results are packed into the returned 8-bit unsigned integer.</p>\n<p>The conversion to fixed point is done as follows: packSnorm1x8: round(clamp(s, -1, +1) * 127.0)</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packSnorm2x8(vec2 const&amp; v) </dd>\n<dd>\nuint32 packSnorm4x8(vec4 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6be3cfb2cce3702f03e91bbeb5286d7e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packSnorm2x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts each component of the normalized floating-point value v into 8-bit integer values. </p>\n<p>Then, the results are packed into the returned 16-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packSnorm2x8: round(clamp(c, -1, +1) * 127.0)</p>\n<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint8 packSnorm1x8(float const&amp; v) </dd>\n<dd>\nuint32 packSnorm4x8(vec4 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab997545661877d2c7362a5084d3897d3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::packSnorm3x10_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values. </p>\n<p>Then, converts the forth component of the normalized floating-point value v into 2-bit signed integer values. Then, the results are packed into the returned 32-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packSnorm3x10_1x2(xyz): round(clamp(c, -1, +1) * 511.0) packSnorm3x10_1x2(w): round(clamp(c, -1, +1) * 1.0)</p>\n<p>The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec4 unpackSnorm3x10_1x2(uint32 const&amp; p) </dd>\n<dd>\nuint32 packUnorm3x10_1x2(vec4 const&amp; v) </dd>\n<dd>\nuint32 packU3x10_1x2(uvec4 const&amp; v) </dd>\n<dd>\nuint32 packI3x10_1x2(ivec4 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga358943934d21da947d5bcc88c2ab7832\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::packSnorm4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts each component of the normalized floating-point value v into 16-bit integer values. </p>\n<p>Then, the results are packed into the returned 64-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packSnorm2x8: round(clamp(c, -1, +1) * 32767.0)</p>\n<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packSnorm1x16(float const&amp; v) </dd>\n<dd>\nuint32 packSnorm2x16(vec2 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gada3d88d59f0f458f9c51a9fd359a4bc0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::packU3x10_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification, and then packing these four values into a 32-bit unsigned integer. </p>\n<p>The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packI3x10_1x2(ivec4 const&amp; v) </dd>\n<dd>\nuint32 packSnorm3x10_1x2(vec4 const&amp; v) </dd>\n<dd>\nuint32 packUnorm3x10_1x2(vec4 const&amp; v) </dd>\n<dd>\nivec4 unpackU3x10_1x2(uint32 const&amp; p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5eecc9e8cbaf51ac6cf57501e670ee19\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::packUint2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed unsigned integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nu16vec2 unpackUint2x16(uint p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa864081097b86e83d8e4a4d79c382b22\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::packUint2x32 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed unsigned integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nu32vec2 unpackUint2x32(int p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3c3c9fb53ae7823b10fa083909357590\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packUint2x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed unsigned integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nu8vec2 unpackInt2x8(uint16 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2ceb62cca347d8ace42ee90317a3f1f9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::packUint4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">u16vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed unsigned integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nu16vec4 unpackUint4x16(uint64 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa0fe2f09aeb403cd66c1a062f58861ab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::packUint4x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">u8vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component from an integer vector into a packed unsigned integer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nu8vec4 unpackUint4x8(uint32 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaccd3f27e6ba5163eb7aa9bc8ff96251a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, uintType, Q&gt; glm::packUnorm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, floatType, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec&lt;L, floatType, Q&gt; unpackUnorm(vec&lt;L, intType, Q&gt; const&amp; p); </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9f82737bf2a44bedff1d286b76837886\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packUnorm1x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\">float&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts the normalized floating-point value v into a 16-bit integer value. </p>\n<p>Then, the results are packed into the returned 16-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packUnorm1x16: round(clamp(c, 0, +1) * 65535.0)</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packSnorm1x16(float const&amp; v) </dd>\n<dd>\nuint64 packSnorm4x16(vec4 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga768e0337dd6246773f14aa0a421fe9a8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packUnorm1x5_1x6_1x5 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec3 unpackUnorm1x5_1x6_1x5(uint16 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4b2fa60df3460403817d28b082ee0736\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint8 glm::packUnorm1x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\">float&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts the normalized floating-point value v into a 8-bit integer value. </p>\n<p>Then, the results are packed into the returned 8-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packUnorm1x8: round(clamp(c, 0, +1) * 255.0)</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packUnorm2x8(vec2 const&amp; v) </dd>\n<dd>\nuint32 packUnorm4x8(vec4 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7f9abdb50f9be1aa1c14912504a0d98d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint8 glm::packUnorm2x3_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec3 unpackUnorm2x3_1x2(uint8 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab6bbd5be3b8e6db538ecb33a7844481c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint8 glm::packUnorm2x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec2 unpackUnorm2x4(uint8 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9a666b1c688ab54100061ed06526de6e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packUnorm2x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts each component of the normalized floating-point value v into 8-bit integer values. </p>\n<p>Then, the results are packed into the returned 16-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packUnorm2x8: round(clamp(c, 0, +1) * 255.0)</p>\n<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint8 packUnorm1x8(float const&amp; v) </dd>\n<dd>\nuint32 packUnorm4x8(vec4 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8a1ee625d2707c60530fb3fca2980b19\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint32 glm::packUnorm3x10_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values. </p>\n<p>Then, converts the forth component of the normalized floating-point value v into 2-bit signed uninteger values. Then, the results are packed into the returned 32-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packUnorm3x10_1x2(xyz): round(clamp(c, 0, +1) * 1023.0) packUnorm3x10_1x2(w): round(clamp(c, 0, +1) * 3.0)</p>\n<p>The first vector component specifies the 10 least-significant bits of the result; the forth component specifies the 2 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec4 unpackUnorm3x10_1x2(uint32 const&amp; p) </dd>\n<dd>\nuint32 packUnorm3x10_1x2(vec4 const&amp; v) </dd>\n<dd>\nuint32 packU3x10_1x2(uvec4 const&amp; v) </dd>\n<dd>\nuint32 packI3x10_1x2(ivec4 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaec4112086d7fb133bea104a7c237de52\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packUnorm3x5_1x1 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec4 unpackUnorm3x5_1x1(uint16 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1f63c264e7ab63264e2b2a99fd393897\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint64 glm::packUnorm4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts each component of the normalized floating-point value v into 16-bit integer values. </p>\n<p>Then, the results are packed into the returned 64-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packUnorm4x16: round(clamp(c, 0, +1) * 65535.0)</p>\n<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packUnorm1x16(float const&amp; v) </dd>\n<dd>\nuint32 packUnorm2x16(vec2 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad3e7e3ce521513584a53aedc5f9765c1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint16 glm::packUnorm4x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert each component of the normalized floating-point vector into unsigned integer values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec4 unpackUnorm4x4(uint16 p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2b1fd1e854705b1345e98409e0a25e50\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec3 glm::unpackF2x11_1x10 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned three-component vector.</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packF2x11_1x10(vec3 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab9e60ebe3ad3eeced6a9ec6eb876d74e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec3 glm::unpackF3x9_E1x5 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned three-component vector.</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<p>unpackF3x9_E1x5 allows decoding RGBE / RGB9E5 data</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packF3x9_E1x5(vec3 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga30d6b2f1806315bcd6047131f547d33b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, float, Q&gt; glm::unpackHalf </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, <a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. </p>\n<p>The first component of the vector is obtained from the 16 least-significant bits of v; the forth component is obtained from the 16 most-significant bits of v.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec&lt;L, uint16, Q&gt; packHalf(vec&lt;L, float, Q&gt; const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac37dedaba24b00adb4ec6e8f92c19dbf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL float glm::unpackHalf1x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value, interpreted as a 16-bit floating-point number according to the OpenGL Specification, and converting it to 32-bit floating-point values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec2 unpackHalf2x16(uint32 const&amp; v) </dd>\n<dd>\nvec4 unpackHalf4x16(uint64 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml\">GLSL unpackHalf2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga57dfc41b2eb20b0ac00efae7d9c49dcd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackHalf4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values. </p>\n<p>The first component of the vector is obtained from the 16 least-significant bits of v; the forth component is obtained from the 16 most-significant bits of v.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nfloat unpackHalf1x16(uint16 const&amp; v) </dd>\n<dd>\nvec2 unpackHalf2x16(uint32 const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml\">GLSL unpackHalf2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9a05330e5490be0908d3b117d82aff56\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL ivec4 glm::unpackI3x10_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers. </p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packU3x10_1x2(uvec4 const&amp; v) </dd>\n<dd>\nvec4 unpackSnorm3x10_1x2(uint32 const&amp; p); </dd>\n<dd>\nuvec4 unpackI3x10_1x2(uint32 const&amp; p); </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaccde055882918a3175de82f4ca8b7d8e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL i16vec2 glm::unpackInt2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nint packInt2x16(i16vec2 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab297c0bfd38433524791eb0584d8f08d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL i32vec2 glm::unpackInt2x32 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nint packInt2x16(i32vec2 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab0c59f1e259fca9e68adb2207a6b665e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL i8vec2 glm::unpackInt2x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nint16 packInt2x8(i8vec2 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga52c154a9b232b62c22517a700cc0c78c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL i16vec4 glm::unpackInt4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nint64 packInt4x16(i16vec4 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1cd8d2038cdd33a860801aa155a26221\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL i8vec4 glm::unpackInt4x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nint32 packInt2x8(i8vec4 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5c1ec97894b05ea21a05aea4f0204a02\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::unpackRGBM </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rgbm</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. </p>\n<p>The first component of the vector is obtained from the 16 least-significant bits of v; the forth component is obtained from the 16 most-significant bits of v.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec&lt;4, T, Q&gt; packRGBM(vec&lt;3, float, Q&gt; const&amp; v) </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6d49b31e5c3f9df8e1f99ab62b999482\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, floatType, Q&gt; glm::unpackSnorm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, intType, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer to a normalized floating-point vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec&lt;L, intType, Q&gt; packSnorm(vec&lt;L, floatType, Q&gt; const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga96dd15002370627a443c835ab03a766c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL float glm::unpackSnorm1x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned scalar.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm1x16: clamp(f / 32767.0, -1, +1)</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec2 unpackSnorm2x16(uint32 p) </dd>\n<dd>\nvec4 unpackSnorm4x16(uint64 p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm1x16.xml\">GLSL unpackSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4851ff86678aa1c7ace9d67846894285\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL float glm::unpackSnorm1x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers. </p>\n<p>Then, the value is converted to a normalized floating-point value to generate the returned scalar.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm1x8: clamp(f / 127.0, -1, +1)</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec2 unpackSnorm2x8(uint16 p) </dd>\n<dd>\nvec4 unpackSnorm4x8(uint32 p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml\">GLSL unpackSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b128e89be449fc71336968a66bf6e1a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec2 glm::unpackSnorm2x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm2x8: clamp(f / 127.0, -1, +1)</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nfloat unpackSnorm1x8(uint8 p) </dd>\n<dd>\nvec4 unpackSnorm4x8(uint32 p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml\">GLSL unpackSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7a4fbf79be9740e3c57737bc2af05e5b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackSnorm3x10_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm3x10_1x2(xyz): clamp(f / 511.0, -1, +1) unpackSnorm3x10_1x2(w): clamp(f / 511.0, -1, +1)</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packSnorm3x10_1x2(vec4 const&amp; v) </dd>\n<dd>\nvec4 unpackUnorm3x10_1x2(uint32 const&amp; p)) </dd>\n<dd>\nuvec4 unpackI3x10_1x2(uint32 const&amp; p) </dd>\n<dd>\nuvec4 unpackU3x10_1x2(uint32 const&amp; p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaddf9c353528fe896106f7181219c7f4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackSnorm4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm4x16: clamp(f / 32767.0, -1, +1)</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nfloat unpackSnorm1x16(uint16 p) </dd>\n<dd>\nvec2 unpackSnorm2x16(uint32 p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm2x16.xml\">GLSL unpackSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga48df3042a7d079767f5891a1bfd8a60a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uvec4 glm::unpackU3x10_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers. </p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packU3x10_1x2(uvec4 const&amp; v) </dd>\n<dd>\nvec4 unpackSnorm3x10_1x2(uint32 const&amp; p); </dd>\n<dd>\nuvec4 unpackI3x10_1x2(uint32 const&amp; p); </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga035bbbeab7ec2b28c0529757395b645b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL u16vec2 glm::unpackUint2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint packUint2x16(u16vec2 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf942ff11b65e83eb5f77e68329ebc6ab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL u32vec2 glm::unpackUint2x32 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nint packUint2x16(u32vec2 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa7600a6c71784b637a410869d2a5adcd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL u8vec2 glm::unpackUint2x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packInt2x8(u8vec2 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab173834ef14cfc23a96a959f3ff4b8dc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL u16vec4 glm::unpackUint4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint64 packUint4x16(u16vec4 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf6dc0e4341810a641c7ed08f10e335d1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL u8vec4 glm::unpackUint4x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer into an integer vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packUint4x8(u8vec2 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3e6ac9178b59f0b1b2f7599f2183eb7f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, floatType, Q&gt; glm::unpackUnorm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, uintType, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer to a normalized floating-point vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec&lt;L, intType, Q&gt; packUnorm(vec&lt;L, floatType, Q&gt; const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga83d34160a5cb7bcb5339823210fc7501\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL float glm::unpackUnorm1x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers. </p>\n<p>Then, the value is converted to a normalized floating-point value to generate the returned scalar.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm1x16: f / 65535.0</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec2 unpackUnorm2x16(uint32 p) </dd>\n<dd>\nvec4 unpackUnorm4x16(uint64 p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml\">GLSL unpackUnorm2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab3bc08ecfc0f3339be93fb2b3b56d88a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec3 glm::unpackUnorm1x5_1x6_1x5 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer to a normalized floating-point vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packUnorm1x5_1x6_1x5(vec3 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1319207e30874fb4931a9ee913983ee1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL float glm::unpackUnorm1x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a single 8-bit integer to a normalized floating-point value. </p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nvec2 unpackUnorm2x8(uint16 p) </dd>\n<dd>\nvec4 unpackUnorm4x8(uint32 p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml\">GLSL unpackUnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6abd5a9014df3b5ce4059008d2491260\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec3 glm::unpackUnorm2x3_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer to a normalized floating-point vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint8 packUnorm2x3_1x2(vec3 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2e50476132fe5f27f08e273d9c70d85b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec2 glm::unpackUnorm2x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer to a normalized floating-point vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint8 packUnorm2x4(vec2 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga637cbe3913dd95c6e7b4c99c61bd611f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec2 glm::unpackUnorm2x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nfloat unpackUnorm1x8(uint8 v) </dd>\n<dd>\nvec4 unpackUnorm4x8(uint32 p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml\">GLSL unpackUnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5156d3060355fe332865da2c7f78815f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackUnorm3x10_1x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm3x10_1x2(xyz): clamp(f / 1023.0, 0, +1) unpackSnorm3x10_1x2(w): clamp(f / 3.0, 0, +1)</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint32 packSnorm3x10_1x2(vec4 const&amp; v) </dd>\n<dd>\nvec4 unpackInorm3x10_1x2(uint32 const&amp; p)) </dd>\n<dd>\nuvec4 unpackI3x10_1x2(uint32 const&amp; p) </dd>\n<dd>\nuvec4 unpackU3x10_1x2(uint32 const&amp; p) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5ff95ff5bc16f396432ab67243dbae4d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackUnorm3x5_1x1 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer to a normalized floating-point vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packUnorm3x5_1x1(vec4 const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2ae149c5d2473ac1e5f347bb654a242d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackUnorm4x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnormx4x16: f / 65535.0</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nfloat unpackUnorm1x16(uint16 p) </dd>\n<dd>\nvec2 unpackUnorm2x16(uint32 p) </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml\">GLSL unpackUnorm2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac58ee89d0e224bb6df5e8bbb18843a2d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackUnorm4x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a packed integer to a normalized floating-point vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00298.html\" title=\"Include <glm/gtc/packing.hpp> to use the features of this extension. \">GLM_GTC_packing</a> </dd>\n<dd>\nuint16 packUnorm4x4(vec4 const&amp; v) </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00299.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_quaternion</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_quaternion<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00125.html\" title=\"GLM_GTC_quaternion \">glm/gtc/quaternion.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf4dd967dead22dd932fc7460ceecb03f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf4dd967dead22dd932fc7460ceecb03f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gaf4dd967dead22dd932fc7460ceecb03f\">eulerAngles</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf4dd967dead22dd932fc7460ceecb03f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns euler angles, pitch as x, yaw as y, roll as z.  <a href=\"a00299.html#gaf4dd967dead22dd932fc7460ceecb03f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4dd967dead22dd932fc7460ceecb03f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f7fa76e06c417b757ddfd438f3f677b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8f7fa76e06c417b757ddfd438f3f677b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b\">greaterThan</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga8f7fa76e06c417b757ddfd438f3f677b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &gt; y.  <a href=\"a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f7fa76e06c417b757ddfd438f3f677b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga388cbeba987dae7b5937f742efa49a5a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga388cbeba987dae7b5937f742efa49a5a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga388cbeba987dae7b5937f742efa49a5a\">greaterThanEqual</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga388cbeba987dae7b5937f742efa49a5a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &gt;= y.  <a href=\"a00299.html#ga388cbeba987dae7b5937f742efa49a5a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga388cbeba987dae7b5937f742efa49a5a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad091a2d22c8acfebfa92bcfca1dfe9c4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad091a2d22c8acfebfa92bcfca1dfe9c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4\">lessThan</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gad091a2d22c8acfebfa92bcfca1dfe9c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison result of x &lt; y.  <a href=\"a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4\">More...</a><br /></td></tr>\n<tr class=\"separator:gad091a2d22c8acfebfa92bcfca1dfe9c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac00012eea281800d2403f4ea8443134d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac00012eea281800d2403f4ea8443134d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gac00012eea281800d2403f4ea8443134d\">lessThanEqual</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gac00012eea281800d2403f4ea8443134d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &lt;= y.  <a href=\"a00299.html#gac00012eea281800d2403f4ea8443134d\">More...</a><br /></td></tr>\n<tr class=\"separator:gac00012eea281800d2403f4ea8443134d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga333ab70047fbe4132406100c292dbc89\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga333ab70047fbe4132406100c292dbc89\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">mat3_cast</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga333ab70047fbe4132406100c292dbc89\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 3 * 3 matrix.  <a href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">More...</a><br /></td></tr>\n<tr class=\"separator:ga333ab70047fbe4132406100c292dbc89\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1113212d9bdefc2e31ad40e5bbb506f3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1113212d9bdefc2e31ad40e5bbb506f3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">mat4_cast</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1113212d9bdefc2e31ad40e5bbb506f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 4 * 4 matrix.  <a href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1113212d9bdefc2e31ad40e5bbb506f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7603e81477b46ddb448896909bc04928\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7603e81477b46ddb448896909bc04928\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">pitch</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga7603e81477b46ddb448896909bc04928\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns pitch value of euler angles expressed in radians.  <a href=\"a00299.html#ga7603e81477b46ddb448896909bc04928\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7603e81477b46ddb448896909bc04928\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1108a4ab88ca87bac321454eea7702f8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1108a4ab88ca87bac321454eea7702f8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">quat_cast</a> (mat&lt; 3, 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1108a4ab88ca87bac321454eea7702f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a pure rotation 3 * 3 matrix to a quaternion.  <a href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1108a4ab88ca87bac321454eea7702f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4524810f07f72e8c7bdc7764fa11cb58\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4524810f07f72e8c7bdc7764fa11cb58\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58\">quat_cast</a> (mat&lt; 4, 4, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga4524810f07f72e8c7bdc7764fa11cb58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a pure rotation 4 * 4 matrix to a quaternion.  <a href=\"a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4524810f07f72e8c7bdc7764fa11cb58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabe7fc5ec5feb41ab234d5d2b6254697f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabe7fc5ec5feb41ab234d5d2b6254697f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f\">quatLookAt</a> (vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gabe7fc5ec5feb41ab234d5d2b6254697f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a look at quaternion based on the default handedness.  <a href=\"a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f\">More...</a><br /></td></tr>\n<tr class=\"separator:gabe7fc5ec5feb41ab234d5d2b6254697f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2da350c73411be3bb19441b226b81a74\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2da350c73411be3bb19441b226b81a74\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga2da350c73411be3bb19441b226b81a74\">quatLookAtLH</a> (vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:ga2da350c73411be3bb19441b226b81a74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a left-handed look at quaternion.  <a href=\"a00299.html#ga2da350c73411be3bb19441b226b81a74\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2da350c73411be3bb19441b226b81a74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6529ac8c04a57fcc35865b5c9437cc8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf6529ac8c04a57fcc35865b5c9437cc8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8\">quatLookAtRH</a> (vec&lt; 3, T, Q &gt; const &amp;direction, vec&lt; 3, T, Q &gt; const &amp;up)</td></tr>\n<tr class=\"memdesc:gaf6529ac8c04a57fcc35865b5c9437cc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a right-handed look at quaternion.  <a href=\"a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6529ac8c04a57fcc35865b5c9437cc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0cc5ad970d0b00829b139fe0fe5a1e13\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0cc5ad970d0b00829b139fe0fe5a1e13\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">roll</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga0cc5ad970d0b00829b139fe0fe5a1e13\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns roll value of euler angles expressed in radians.  <a href=\"a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0cc5ad970d0b00829b139fe0fe5a1e13\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8da38cdfdc452dafa660c2f46506bad5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8da38cdfdc452dafa660c2f46506bad5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">yaw</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8da38cdfdc452dafa660c2f46506bad5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns yaw value of euler angles expressed in radians.  <a href=\"a00299.html#ga8da38cdfdc452dafa660c2f46506bad5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8da38cdfdc452dafa660c2f46506bad5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00125.html\" title=\"GLM_GTC_quaternion \">glm/gtc/quaternion.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines a templated quaternion type and several quaternion operations. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaf4dd967dead22dd932fc7460ceecb03f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::eulerAngles </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns euler angles, pitch as x, yaw as y, roll as z. </p>\n<p>The result is expressed in radians.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8f7fa76e06c417b757ddfd438f3f677b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::greaterThan </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x &gt; y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga388cbeba987dae7b5937f742efa49a5a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::greaterThanEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x &gt;= y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad091a2d22c8acfebfa92bcfca1dfe9c4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::lessThan </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison result of x &lt; y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac00012eea281800d2403f4ea8443134d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, bool, Q&gt; glm::lessThanEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x &lt;= y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00255.html\" title=\"Exposes comparison functions for quaternion types that take a user defined epsilon values...\">GLM_EXT_quaternion_relational</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga333ab70047fbe4132406100c292dbc89\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::mat3_cast </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a quaternion to a 3 * 3 matrix. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n<p>Referenced by <a class=\"el\" href=\"a00126_source.html#l00113\">glm::toMat3()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1113212d9bdefc2e31ad40e5bbb506f3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::mat4_cast </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a quaternion to a 4 * 4 matrix. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n<p>Referenced by <a class=\"el\" href=\"a00126_source.html#l00120\">glm::toMat4()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7603e81477b46ddb448896909bc04928\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::pitch </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns pitch value of euler angles expressed in radians. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1108a4ab88ca87bac321454eea7702f8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::quat_cast </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a pure rotation 3 * 3 matrix to a quaternion. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n<p>Referenced by <a class=\"el\" href=\"a00126_source.html#l00127\">glm::toQuat()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4524810f07f72e8c7bdc7764fa11cb58\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::quat_cast </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a pure rotation 4 * 4 matrix to a quaternion. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabe7fc5ec5feb41ab234d5d2b6254697f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::quatLookAt </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>direction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>up</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a look at quaternion based on the default handedness. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">direction</td><td>Desired forward direction. Needs to be normalized. </td></tr>\n    <tr><td class=\"paramname\">up</td><td>Up vector, how the camera is oriented. Typically (0, 1, 0). </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2da350c73411be3bb19441b226b81a74\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::quatLookAtLH </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>direction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>up</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a left-handed look at quaternion. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">direction</td><td>Desired forward direction onto which the +z-axis gets mapped. Needs to be normalized. </td></tr>\n    <tr><td class=\"paramname\">up</td><td>Up vector, how the camera is oriented. Typically (0, 1, 0). </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf6529ac8c04a57fcc35865b5c9437cc8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::quatLookAtRH </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>direction</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>up</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a right-handed look at quaternion. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">direction</td><td>Desired forward direction onto which the -z-axis gets mapped. Needs to be normalized. </td></tr>\n    <tr><td class=\"paramname\">up</td><td>Up vector, how the camera is oriented. Typically (0, 1, 0). </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0cc5ad970d0b00829b139fe0fe5a1e13\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::roll </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns roll value of euler angles expressed in radians. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8da38cdfdc452dafa660c2f46506bad5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::yaw </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns yaw value of euler angles expressed in radians. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00299.html\" title=\"Include <glm/gtc/quaternion.hpp> to use the features of this extension. \">GLM_GTC_quaternion</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00300.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_random</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_random<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00137.html\" title=\"GLM_GTC_random \">glm/gtc/random.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga7c53b7797f3147af68a11c767679fa3f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7c53b7797f3147af68a11c767679fa3f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga7c53b7797f3147af68a11c767679fa3f\">ballRand</a> (T Radius)</td></tr>\n<tr class=\"memdesc:ga7c53b7797f3147af68a11c767679fa3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius.  <a href=\"a00300.html#ga7c53b7797f3147af68a11c767679fa3f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c53b7797f3147af68a11c767679fa3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9dd05c36025088fae25b97c869e88517\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9dd05c36025088fae25b97c869e88517\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga9dd05c36025088fae25b97c869e88517\">circularRand</a> (T Radius)</td></tr>\n<tr class=\"memdesc:ga9dd05c36025088fae25b97c869e88517\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius.  <a href=\"a00300.html#ga9dd05c36025088fae25b97c869e88517\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9dd05c36025088fae25b97c869e88517\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73\">diskRand</a> (T Radius)</td></tr>\n<tr class=\"memdesc:gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius.  <a href=\"a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5193a83e49e4fdc5652c084711083574\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga5193a83e49e4fdc5652c084711083574\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga5193a83e49e4fdc5652c084711083574\">gaussRand</a> (genType Mean, genType Deviation)</td></tr>\n<tr class=\"memdesc:ga5193a83e49e4fdc5652c084711083574\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate random numbers in the interval [Min, Max], according a gaussian distribution.  <a href=\"a00300.html#ga5193a83e49e4fdc5652c084711083574\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5193a83e49e4fdc5652c084711083574\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04e241ab88374a477a2c2ceadd2fa03d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga04e241ab88374a477a2c2ceadd2fa03d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga04e241ab88374a477a2c2ceadd2fa03d\">linearRand</a> (genType Min, genType Max)</td></tr>\n<tr class=\"memdesc:ga04e241ab88374a477a2c2ceadd2fa03d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate random numbers in the interval [Min, Max], according a linear distribution.  <a href=\"a00300.html#ga04e241ab88374a477a2c2ceadd2fa03d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04e241ab88374a477a2c2ceadd2fa03d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94731130c298a9ff5e5025fdee6d97a0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga94731130c298a9ff5e5025fdee6d97a0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga94731130c298a9ff5e5025fdee6d97a0\">linearRand</a> (vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</td></tr>\n<tr class=\"memdesc:ga94731130c298a9ff5e5025fdee6d97a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate random numbers in the interval [Min, Max], according a linear distribution.  <a href=\"a00300.html#ga94731130c298a9ff5e5025fdee6d97a0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94731130c298a9ff5e5025fdee6d97a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga22f90fcaccdf001c516ca90f6428e138\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga22f90fcaccdf001c516ca90f6428e138\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00300.html#ga22f90fcaccdf001c516ca90f6428e138\">sphericalRand</a> (T Radius)</td></tr>\n<tr class=\"memdesc:ga22f90fcaccdf001c516ca90f6428e138\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius.  <a href=\"a00300.html#ga22f90fcaccdf001c516ca90f6428e138\">More...</a><br /></td></tr>\n<tr class=\"separator:ga22f90fcaccdf001c516ca90f6428e138\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00137.html\" title=\"GLM_GTC_random \">glm/gtc/random.hpp</a>&gt; to use the features of this extension. </p>\n<p>Generate random number from various distribution methods. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga7c53b7797f3147af68a11c767679fa3f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, defaultp&gt; glm::ballRand </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>Radius</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00300.html\" title=\"Include <glm/gtc/random.hpp> to use the features of this extension. \">GLM_GTC_random</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9dd05c36025088fae25b97c869e88517\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, T, defaultp&gt; glm::circularRand </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>Radius</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00300.html\" title=\"Include <glm/gtc/random.hpp> to use the features of this extension. \">GLM_GTC_random</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa0b18071f3f97dbf8bcf6f53c6fe5f73\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, T, defaultp&gt; glm::diskRand </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>Radius</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00300.html\" title=\"Include <glm/gtc/random.hpp> to use the features of this extension. \">GLM_GTC_random</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5193a83e49e4fdc5652c084711083574\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::gaussRand </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>Mean</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>Deviation</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Generate random numbers in the interval [Min, Max], according a gaussian distribution. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00300.html\" title=\"Include <glm/gtc/random.hpp> to use the features of this extension. \">GLM_GTC_random</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga04e241ab88374a477a2c2ceadd2fa03d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::linearRand </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>Min</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>Max</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Generate random numbers in the interval [Min, Max], according a linear distribution. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">Min</td><td>Minimum value included in the sampling </td></tr>\n    <tr><td class=\"paramname\">Max</td><td>Maximum value included in the sampling </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Value type. Currently supported: float or double scalars. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00300.html\" title=\"Include <glm/gtc/random.hpp> to use the features of this extension. \">GLM_GTC_random</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga94731130c298a9ff5e5025fdee6d97a0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::linearRand </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Min</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Max</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Generate random numbers in the interval [Min, Max], according a linear distribution. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">Min</td><td>Minimum value included in the sampling </td></tr>\n    <tr><td class=\"paramname\">Max</td><td>Maximum value included in the sampling </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Value type. Currently supported: float or double.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00300.html\" title=\"Include <glm/gtc/random.hpp> to use the features of this extension. \">GLM_GTC_random</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga22f90fcaccdf001c516ca90f6428e138\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, defaultp&gt; glm::sphericalRand </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>Radius</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00300.html\" title=\"Include <glm/gtc/random.hpp> to use the features of this extension. \">GLM_GTC_random</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00301.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_reciprocal</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_reciprocal<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00140.html\" title=\"GLM_GTC_reciprocal \">glm/gtc/reciprocal.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaeadfb9c9d71093f7865b2ba2ca8d104d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaeadfb9c9d71093f7865b2ba2ca8d104d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d\">acot</a> (genType x)</td></tr>\n<tr class=\"memdesc:gaeadfb9c9d71093f7865b2ba2ca8d104d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse cotangent function.  <a href=\"a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeadfb9c9d71093f7865b2ba2ca8d104d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafaca98a7100170db8841f446282debfa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gafaca98a7100170db8841f446282debfa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#gafaca98a7100170db8841f446282debfa\">acoth</a> (genType x)</td></tr>\n<tr class=\"memdesc:gafaca98a7100170db8841f446282debfa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse cotangent hyperbolic function.  <a href=\"a00301.html#gafaca98a7100170db8841f446282debfa\">More...</a><br /></td></tr>\n<tr class=\"separator:gafaca98a7100170db8841f446282debfa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b4bed91476b9b915e76b4a30236d330\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga1b4bed91476b9b915e76b4a30236d330\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga1b4bed91476b9b915e76b4a30236d330\">acsc</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga1b4bed91476b9b915e76b4a30236d330\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse cosecant function.  <a href=\"a00301.html#ga1b4bed91476b9b915e76b4a30236d330\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1b4bed91476b9b915e76b4a30236d330\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b50aa5e5afc7e19ec113ab91596c576\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4b50aa5e5afc7e19ec113ab91596c576\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576\">acsch</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga4b50aa5e5afc7e19ec113ab91596c576\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse cosecant hyperbolic function.  <a href=\"a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b50aa5e5afc7e19ec113ab91596c576\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c5b7f962c2c9ff684e6d2de48db1f10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2c5b7f962c2c9ff684e6d2de48db1f10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10\">asec</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga2c5b7f962c2c9ff684e6d2de48db1f10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse secant function.  <a href=\"a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c5b7f962c2c9ff684e6d2de48db1f10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec7586dccfe431f850d006f3824b8ca6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaec7586dccfe431f850d006f3824b8ca6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#gaec7586dccfe431f850d006f3824b8ca6\">asech</a> (genType x)</td></tr>\n<tr class=\"memdesc:gaec7586dccfe431f850d006f3824b8ca6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Inverse secant hyperbolic function.  <a href=\"a00301.html#gaec7586dccfe431f850d006f3824b8ca6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec7586dccfe431f850d006f3824b8ca6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a7b517a95bbd3ad74da3aea87a66314\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga3a7b517a95bbd3ad74da3aea87a66314\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314\">cot</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga3a7b517a95bbd3ad74da3aea87a66314\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Cotangent function.  <a href=\"a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a7b517a95bbd3ad74da3aea87a66314\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b8b770eb7198e4dea59d52e6db81442\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6b8b770eb7198e4dea59d52e6db81442\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga6b8b770eb7198e4dea59d52e6db81442\">coth</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga6b8b770eb7198e4dea59d52e6db81442\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Cotangent hyperbolic function.  <a href=\"a00301.html#ga6b8b770eb7198e4dea59d52e6db81442\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6b8b770eb7198e4dea59d52e6db81442\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga59dd0005b6474eea48af743b4f14ebbb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga59dd0005b6474eea48af743b4f14ebbb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga59dd0005b6474eea48af743b4f14ebbb\">csc</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga59dd0005b6474eea48af743b4f14ebbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Cosecant function.  <a href=\"a00301.html#ga59dd0005b6474eea48af743b4f14ebbb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga59dd0005b6474eea48af743b4f14ebbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d95843ff3ca6472ab399ba171d290a0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6d95843ff3ca6472ab399ba171d290a0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga6d95843ff3ca6472ab399ba171d290a0\">csch</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga6d95843ff3ca6472ab399ba171d290a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Cosecant hyperbolic function.  <a href=\"a00301.html#ga6d95843ff3ca6472ab399ba171d290a0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d95843ff3ca6472ab399ba171d290a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4bcbebee670c5ea155f0777b3acbd84\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae4bcbebee670c5ea155f0777b3acbd84\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#gae4bcbebee670c5ea155f0777b3acbd84\">sec</a> (genType angle)</td></tr>\n<tr class=\"memdesc:gae4bcbebee670c5ea155f0777b3acbd84\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Secant function.  <a href=\"a00301.html#gae4bcbebee670c5ea155f0777b3acbd84\">More...</a><br /></td></tr>\n<tr class=\"separator:gae4bcbebee670c5ea155f0777b3acbd84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a5cfd1e7170104a7b33863b1b75e5ae\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9a5cfd1e7170104a7b33863b1b75e5ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae\">sech</a> (genType angle)</td></tr>\n<tr class=\"memdesc:ga9a5cfd1e7170104a7b33863b1b75e5ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Secant hyperbolic function.  <a href=\"a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9a5cfd1e7170104a7b33863b1b75e5ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00140.html\" title=\"GLM_GTC_reciprocal \">glm/gtc/reciprocal.hpp</a>&gt; to use the features of this extension. </p>\n<p>Define secant, cosecant and cotangent functions. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaeadfb9c9d71093f7865b2ba2ca8d104d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::acot </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Inverse cotangent function. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafaca98a7100170db8841f446282debfa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::acoth </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Inverse cotangent hyperbolic function. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1b4bed91476b9b915e76b4a30236d330\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::acsc </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Inverse cosecant function. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4b50aa5e5afc7e19ec113ab91596c576\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::acsch </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Inverse cosecant hyperbolic function. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2c5b7f962c2c9ff684e6d2de48db1f10\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::asec </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Inverse secant function. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaec7586dccfe431f850d006f3824b8ca6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::asech </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Inverse secant hyperbolic function. </p>\n<dl class=\"section return\"><dt>Returns</dt><dd>Return an angle expressed in radians. </dd></dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3a7b517a95bbd3ad74da3aea87a66314\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::cot </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Cotangent function. </p>\n<p>adjacent / opposite or 1 / tan(x)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6b8b770eb7198e4dea59d52e6db81442\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::coth </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Cotangent hyperbolic function. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga59dd0005b6474eea48af743b4f14ebbb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::csc </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Cosecant function. </p>\n<p>hypotenuse / opposite or 1 / sin(x)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6d95843ff3ca6472ab399ba171d290a0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::csch </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Cosecant hyperbolic function. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae4bcbebee670c5ea155f0777b3acbd84\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::sec </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Secant function. </p>\n<p>hypotenuse / adjacent or 1 / cos(x)</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9a5cfd1e7170104a7b33863b1b75e5ae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::sech </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Secant hyperbolic function. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00301.html\" title=\"Include <glm/gtc/reciprocal.hpp> to use the features of this extension. \">GLM_GTC_reciprocal</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00302.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_round</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_round<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00143.html\" title=\"GLM_GTC_round \">glm/gtc/round.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1d89ac88582aaf4d5dfa5feb4a376fd4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga1d89ac88582aaf4d5dfa5feb4a376fd4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga1d89ac88582aaf4d5dfa5feb4a376fd4\">ceilMultiple</a> (genType v, genType Multiple)</td></tr>\n<tr class=\"memdesc:ga1d89ac88582aaf4d5dfa5feb4a376fd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00302.html#ga1d89ac88582aaf4d5dfa5feb4a376fd4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1d89ac88582aaf4d5dfa5feb4a376fd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\">ceilMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Higher multiple number of Source.  <a href=\"a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\">More...</a><br /></td></tr>\n<tr class=\"separator:gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c3ef36ae32aa4271f1544f92bd578b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga5c3ef36ae32aa4271f1544f92bd578b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga5c3ef36ae32aa4271f1544f92bd578b6\">ceilPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:ga5c3ef36ae32aa4271f1544f92bd578b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value, round up to a power of two.  <a href=\"a00302.html#ga5c3ef36ae32aa4271f1544f92bd578b6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c3ef36ae32aa4271f1544f92bd578b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab53d4a97c0d3e297be5f693cdfdfe5d2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab53d4a97c0d3e297be5f693cdfdfe5d2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2\">ceilPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gab53d4a97c0d3e297be5f693cdfdfe5d2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value, round up to a power of two.  <a href=\"a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2\">More...</a><br /></td></tr>\n<tr class=\"separator:gab53d4a97c0d3e297be5f693cdfdfe5d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ffa3cd5f2ea746ee1bf57c46da6315e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2ffa3cd5f2ea746ee1bf57c46da6315e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga2ffa3cd5f2ea746ee1bf57c46da6315e\">floorMultiple</a> (genType v, genType Multiple)</td></tr>\n<tr class=\"memdesc:ga2ffa3cd5f2ea746ee1bf57c46da6315e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00302.html#ga2ffa3cd5f2ea746ee1bf57c46da6315e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ffa3cd5f2ea746ee1bf57c46da6315e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacdd8901448f51f0b192380e422fae3e4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacdd8901448f51f0b192380e422fae3e4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gacdd8901448f51f0b192380e422fae3e4\">floorMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:gacdd8901448f51f0b192380e422fae3e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00302.html#gacdd8901448f51f0b192380e422fae3e4\">More...</a><br /></td></tr>\n<tr class=\"separator:gacdd8901448f51f0b192380e422fae3e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe273a57935d04c9db677bf67f9a71f4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gafe273a57935d04c9db677bf67f9a71f4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gafe273a57935d04c9db677bf67f9a71f4\">floorPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:gafe273a57935d04c9db677bf67f9a71f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value, round down to a power of two.  <a href=\"a00302.html#gafe273a57935d04c9db677bf67f9a71f4\">More...</a><br /></td></tr>\n<tr class=\"separator:gafe273a57935d04c9db677bf67f9a71f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf0d591a8fca8ddb9289cdeb44b989c2d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf0d591a8fca8ddb9289cdeb44b989c2d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d\">floorPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf0d591a8fca8ddb9289cdeb44b989c2d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value, round down to a power of two.  <a href=\"a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf0d591a8fca8ddb9289cdeb44b989c2d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab892defcc9c0b0618df7251253dc0fbb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gab892defcc9c0b0618df7251253dc0fbb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gab892defcc9c0b0618df7251253dc0fbb\">roundMultiple</a> (genType v, genType Multiple)</td></tr>\n<tr class=\"memdesc:gab892defcc9c0b0618df7251253dc0fbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00302.html#gab892defcc9c0b0618df7251253dc0fbb\">More...</a><br /></td></tr>\n<tr class=\"separator:gab892defcc9c0b0618df7251253dc0fbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f1a68332d761804c054460a612e3a4b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2f1a68332d761804c054460a612e3a4b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga2f1a68332d761804c054460a612e3a4b\">roundMultiple</a> (vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)</td></tr>\n<tr class=\"memdesc:ga2f1a68332d761804c054460a612e3a4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Lower multiple number of Source.  <a href=\"a00302.html#ga2f1a68332d761804c054460a612e3a4b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f1a68332d761804c054460a612e3a4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4e1bf5d1cd179f59261a7342bdcafca\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gae4e1bf5d1cd179f59261a7342bdcafca\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#gae4e1bf5d1cd179f59261a7342bdcafca\">roundPowerOfTwo</a> (genIUType v)</td></tr>\n<tr class=\"memdesc:gae4e1bf5d1cd179f59261a7342bdcafca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is the closet to the input value.  <a href=\"a00302.html#gae4e1bf5d1cd179f59261a7342bdcafca\">More...</a><br /></td></tr>\n<tr class=\"separator:gae4e1bf5d1cd179f59261a7342bdcafca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga258802a7d55c03c918f28cf4d241c4d0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga258802a7d55c03c918f28cf4d241c4d0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00302.html#ga258802a7d55c03c918f28cf4d241c4d0\">roundPowerOfTwo</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga258802a7d55c03c918f28cf4d241c4d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is the closet to the input value.  <a href=\"a00302.html#ga258802a7d55c03c918f28cf4d241c4d0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga258802a7d55c03c918f28cf4d241c4d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00143.html\" title=\"GLM_GTC_round \">glm/gtc/round.hpp</a>&gt; to use the features of this extension. </p>\n<p>Rounding value to specific boundings </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga1d89ac88582aaf4d5dfa5feb4a376fd4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::ceilMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Higher multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point or integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source value to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab77fdcc13f8e92d2e0b1b7d7aeab8e9d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::ceilMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Higher multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source values to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5c3ef36ae32aa4271f1544f92bd578b6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::ceilPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just higher the input value, round up to a power of two. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab53d4a97c0d3e297be5f693cdfdfe5d2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::ceilPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just higher the input value, round up to a power of two. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2ffa3cd5f2ea746ee1bf57c46da6315e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::floorMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Lower multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point or integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source value to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacdd8901448f51f0b192380e422fae3e4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::floorMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Lower multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source values to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafe273a57935d04c9db677bf67f9a71f4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::floorPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just lower the input value, round down to a power of two. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf0d591a8fca8ddb9289cdeb44b989c2d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::floorPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just lower the input value, round down to a power of two. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab892defcc9c0b0618df7251253dc0fbb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::roundMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Lower multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point or integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source value to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2f1a68332d761804c054460a612e3a4b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::roundMultiple </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Multiple</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Lower multiple number of Source. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">v</td><td>Source values to which is applied the function </td></tr>\n    <tr><td class=\"paramname\">Multiple</td><td>Must be a null or positive value</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae4e1bf5d1cd179f59261a7342bdcafca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::roundPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is the closet to the input value. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga258802a7d55c03c918f28cf4d241c4d0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::roundPowerOfTwo </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is the closet to the input value. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00303.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_type_aligned</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_type_aligned<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00161.html\" title=\"GLM_GTC_type_aligned \">glm/gtc/type_aligned.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga780a35f764020f553a9601a3fcdcd059\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga780a35f764020f553a9601a3fcdcd059\"></a>\ntypedef aligned_highp_bvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga780a35f764020f553a9601a3fcdcd059\">aligned_bvec1</a></td></tr>\n<tr class=\"memdesc:ga780a35f764020f553a9601a3fcdcd059\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga780a35f764020f553a9601a3fcdcd059\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae766b317c5afec852bfb3d74a3c54bc8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae766b317c5afec852bfb3d74a3c54bc8\"></a>\ntypedef aligned_highp_bvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae766b317c5afec852bfb3d74a3c54bc8\">aligned_bvec2</a></td></tr>\n<tr class=\"memdesc:gae766b317c5afec852bfb3d74a3c54bc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae766b317c5afec852bfb3d74a3c54bc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1964ba70d15915e5b710926decbb3cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae1964ba70d15915e5b710926decbb3cb\"></a>\ntypedef aligned_highp_bvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae1964ba70d15915e5b710926decbb3cb\">aligned_bvec3</a></td></tr>\n<tr class=\"memdesc:gae1964ba70d15915e5b710926decbb3cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae1964ba70d15915e5b710926decbb3cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae164a1f7879f828bc35e50b79d786b05\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae164a1f7879f828bc35e50b79d786b05\"></a>\ntypedef aligned_highp_bvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae164a1f7879f828bc35e50b79d786b05\">aligned_bvec4</a></td></tr>\n<tr class=\"memdesc:gae164a1f7879f828bc35e50b79d786b05\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae164a1f7879f828bc35e50b79d786b05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6783859382677d35fcd5dac7dcbefdbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6783859382677d35fcd5dac7dcbefdbd\"></a>\ntypedef aligned_highp_dmat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6783859382677d35fcd5dac7dcbefdbd\">aligned_dmat2</a></td></tr>\n<tr class=\"memdesc:ga6783859382677d35fcd5dac7dcbefdbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga6783859382677d35fcd5dac7dcbefdbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga449a3ec2dde6b6bb4bb94c49a6aad388\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga449a3ec2dde6b6bb4bb94c49a6aad388\"></a>\ntypedef aligned_highp_dmat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388\">aligned_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga449a3ec2dde6b6bb4bb94c49a6aad388\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga449a3ec2dde6b6bb4bb94c49a6aad388\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga53d519a7b1bfb69076b3ec206a6b3bd1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga53d519a7b1bfb69076b3ec206a6b3bd1\"></a>\ntypedef aligned_highp_dmat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1\">aligned_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga53d519a7b1bfb69076b3ec206a6b3bd1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga53d519a7b1bfb69076b3ec206a6b3bd1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ccb2baeb0ab57b818c24e0d486c59d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5ccb2baeb0ab57b818c24e0d486c59d0\"></a>\ntypedef aligned_highp_dmat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0\">aligned_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga5ccb2baeb0ab57b818c24e0d486c59d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5ccb2baeb0ab57b818c24e0d486c59d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19aa695ffdb45ce29f7ea0b5029627de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga19aa695ffdb45ce29f7ea0b5029627de\"></a>\ntypedef aligned_highp_dmat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de\">aligned_dmat3</a></td></tr>\n<tr class=\"memdesc:ga19aa695ffdb45ce29f7ea0b5029627de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga19aa695ffdb45ce29f7ea0b5029627de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f5123d834bd1170edf8c386834e112c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5f5123d834bd1170edf8c386834e112c\"></a>\ntypedef aligned_highp_dmat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5f5123d834bd1170edf8c386834e112c\">aligned_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga5f5123d834bd1170edf8c386834e112c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5f5123d834bd1170edf8c386834e112c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga635bf3732281a2c2ca54d8f9d33d178f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga635bf3732281a2c2ca54d8f9d33d178f\"></a>\ntypedef aligned_highp_dmat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f\">aligned_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga635bf3732281a2c2ca54d8f9d33d178f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga635bf3732281a2c2ca54d8f9d33d178f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf488c6ad88c185054595d4d5c7ba5b9d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf488c6ad88c185054595d4d5c7ba5b9d\"></a>\ntypedef aligned_highp_dmat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d\">aligned_dmat3x4</a></td></tr>\n<tr class=\"memdesc:gaf488c6ad88c185054595d4d5c7ba5b9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaf488c6ad88c185054595d4d5c7ba5b9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga001bb387ae8192fa94dbd8b23b600439\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga001bb387ae8192fa94dbd8b23b600439\"></a>\ntypedef aligned_highp_dmat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga001bb387ae8192fa94dbd8b23b600439\">aligned_dmat4</a></td></tr>\n<tr class=\"memdesc:ga001bb387ae8192fa94dbd8b23b600439\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga001bb387ae8192fa94dbd8b23b600439\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa409cfb737bd59b68dc683e9b03930cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa409cfb737bd59b68dc683e9b03930cc\"></a>\ntypedef aligned_highp_dmat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa409cfb737bd59b68dc683e9b03930cc\">aligned_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gaa409cfb737bd59b68dc683e9b03930cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaa409cfb737bd59b68dc683e9b03930cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga621e89ca1dbdcb7b5a3e7de237c44121\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga621e89ca1dbdcb7b5a3e7de237c44121\"></a>\ntypedef aligned_highp_dmat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121\">aligned_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga621e89ca1dbdcb7b5a3e7de237c44121\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga621e89ca1dbdcb7b5a3e7de237c44121\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac9bda778d0b7ad82f656dab99b71857a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac9bda778d0b7ad82f656dab99b71857a\"></a>\ntypedef aligned_highp_dmat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac9bda778d0b7ad82f656dab99b71857a\">aligned_dmat4x4</a></td></tr>\n<tr class=\"memdesc:gac9bda778d0b7ad82f656dab99b71857a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gac9bda778d0b7ad82f656dab99b71857a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4974f46ae5a19415d91316960a53617a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4974f46ae5a19415d91316960a53617a\"></a>\ntypedef aligned_highp_dvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">aligned_dvec1</a></td></tr>\n<tr class=\"memdesc:ga4974f46ae5a19415d91316960a53617a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga4974f46ae5a19415d91316960a53617a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga18d859f87122b2b3b2992ffe86dbebc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga18d859f87122b2b3b2992ffe86dbebc0\"></a>\ntypedef aligned_highp_dvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">aligned_dvec2</a></td></tr>\n<tr class=\"memdesc:ga18d859f87122b2b3b2992ffe86dbebc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga18d859f87122b2b3b2992ffe86dbebc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa37869eea77d28419b2fb0ff70b69bf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa37869eea77d28419b2fb0ff70b69bf0\"></a>\ntypedef aligned_highp_dvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">aligned_dvec3</a></td></tr>\n<tr class=\"memdesc:gaa37869eea77d28419b2fb0ff70b69bf0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaa37869eea77d28419b2fb0ff70b69bf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a9f0a4795ccc442fa9901845026f9f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8a9f0a4795ccc442fa9901845026f9f5\"></a>\ntypedef aligned_highp_dvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">aligned_dvec4</a></td></tr>\n<tr class=\"memdesc:ga8a9f0a4795ccc442fa9901845026f9f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga8a9f0a4795ccc442fa9901845026f9f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga862843a45b01c35ffe4d44c47ea774ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga862843a45b01c35ffe4d44c47ea774ad\"></a>\ntypedef vec&lt; 1, bool, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga862843a45b01c35ffe4d44c47ea774ad\">aligned_highp_bvec1</a></td></tr>\n<tr class=\"memdesc:ga862843a45b01c35ffe4d44c47ea774ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga862843a45b01c35ffe4d44c47ea774ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0731b593c5e33559954c80f8687e76c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0731b593c5e33559954c80f8687e76c6\"></a>\ntypedef vec&lt; 2, bool, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0731b593c5e33559954c80f8687e76c6\">aligned_highp_bvec2</a></td></tr>\n<tr class=\"memdesc:ga0731b593c5e33559954c80f8687e76c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga0731b593c5e33559954c80f8687e76c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0913bdf048d0cb74af1d2512aec675bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0913bdf048d0cb74af1d2512aec675bc\"></a>\ntypedef vec&lt; 3, bool, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0913bdf048d0cb74af1d2512aec675bc\">aligned_highp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga0913bdf048d0cb74af1d2512aec675bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga0913bdf048d0cb74af1d2512aec675bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9df1d0c425852cf63a57e533b7a83f4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9df1d0c425852cf63a57e533b7a83f4f\"></a>\ntypedef vec&lt; 4, bool, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9df1d0c425852cf63a57e533b7a83f4f\">aligned_highp_bvec4</a></td></tr>\n<tr class=\"memdesc:ga9df1d0c425852cf63a57e533b7a83f4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga9df1d0c425852cf63a57e533b7a83f4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a7eeae43cb7673e14cc89bf02f7dd45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3a7eeae43cb7673e14cc89bf02f7dd45\"></a>\ntypedef mat&lt; 2, 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3a7eeae43cb7673e14cc89bf02f7dd45\">aligned_highp_dmat2</a></td></tr>\n<tr class=\"memdesc:ga3a7eeae43cb7673e14cc89bf02f7dd45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3a7eeae43cb7673e14cc89bf02f7dd45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaef26dfe3855a91644665b55c9096a8c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaef26dfe3855a91644665b55c9096a8c8\"></a>\ntypedef mat&lt; 2, 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaef26dfe3855a91644665b55c9096a8c8\">aligned_highp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gaef26dfe3855a91644665b55c9096a8c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaef26dfe3855a91644665b55c9096a8c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7c9d4ab7ab651cdf8001fe7843e238b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa7c9d4ab7ab651cdf8001fe7843e238b\"></a>\ntypedef mat&lt; 2, 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa7c9d4ab7ab651cdf8001fe7843e238b\">aligned_highp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gaa7c9d4ab7ab651cdf8001fe7843e238b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa7c9d4ab7ab651cdf8001fe7843e238b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0d2b8a75f1908dcf32c27f8524bdced\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa0d2b8a75f1908dcf32c27f8524bdced\"></a>\ntypedef mat&lt; 2, 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa0d2b8a75f1908dcf32c27f8524bdced\">aligned_highp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gaa0d2b8a75f1908dcf32c27f8524bdced\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa0d2b8a75f1908dcf32c27f8524bdced\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8f6abb2c9994850b5d5c04a5f979ed8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad8f6abb2c9994850b5d5c04a5f979ed8\"></a>\ntypedef mat&lt; 3, 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad8f6abb2c9994850b5d5c04a5f979ed8\">aligned_highp_dmat3</a></td></tr>\n<tr class=\"memdesc:gad8f6abb2c9994850b5d5c04a5f979ed8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad8f6abb2c9994850b5d5c04a5f979ed8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab069b2fc2ec785fc4e193cf26c022679\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab069b2fc2ec785fc4e193cf26c022679\"></a>\ntypedef mat&lt; 3, 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab069b2fc2ec785fc4e193cf26c022679\">aligned_highp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:gab069b2fc2ec785fc4e193cf26c022679\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab069b2fc2ec785fc4e193cf26c022679\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66073b1ddef34b681741f572338ddb8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga66073b1ddef34b681741f572338ddb8e\"></a>\ntypedef mat&lt; 3, 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga66073b1ddef34b681741f572338ddb8e\">aligned_highp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga66073b1ddef34b681741f572338ddb8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga66073b1ddef34b681741f572338ddb8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga683c8ca66de323ea533a760abedd0efc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga683c8ca66de323ea533a760abedd0efc\"></a>\ntypedef mat&lt; 3, 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga683c8ca66de323ea533a760abedd0efc\">aligned_highp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga683c8ca66de323ea533a760abedd0efc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga683c8ca66de323ea533a760abedd0efc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacaa7407ea00ffdd322ce86a57adb547e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacaa7407ea00ffdd322ce86a57adb547e\"></a>\ntypedef mat&lt; 4, 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacaa7407ea00ffdd322ce86a57adb547e\">aligned_highp_dmat4</a></td></tr>\n<tr class=\"memdesc:gacaa7407ea00ffdd322ce86a57adb547e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gacaa7407ea00ffdd322ce86a57adb547e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga93a23ca3d42818d56e0702213c66354b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga93a23ca3d42818d56e0702213c66354b\"></a>\ntypedef mat&lt; 4, 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga93a23ca3d42818d56e0702213c66354b\">aligned_highp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga93a23ca3d42818d56e0702213c66354b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga93a23ca3d42818d56e0702213c66354b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacab7374b560745cb1d0a306a90353f58\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacab7374b560745cb1d0a306a90353f58\"></a>\ntypedef mat&lt; 4, 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacab7374b560745cb1d0a306a90353f58\">aligned_highp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gacab7374b560745cb1d0a306a90353f58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gacab7374b560745cb1d0a306a90353f58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fbfba14368b742972d3b58a0a303682\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1fbfba14368b742972d3b58a0a303682\"></a>\ntypedef mat&lt; 4, 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1fbfba14368b742972d3b58a0a303682\">aligned_highp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga1fbfba14368b742972d3b58a0a303682\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga1fbfba14368b742972d3b58a0a303682\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf0448b0f7ceb8273f7eda3a92205eefc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf0448b0f7ceb8273f7eda3a92205eefc\"></a>\ntypedef vec&lt; 1, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf0448b0f7ceb8273f7eda3a92205eefc\">aligned_highp_dvec1</a></td></tr>\n<tr class=\"memdesc:gaf0448b0f7ceb8273f7eda3a92205eefc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf0448b0f7ceb8273f7eda3a92205eefc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab173a333e6b7ce153ceba66ac4a321cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab173a333e6b7ce153ceba66ac4a321cf\"></a>\ntypedef vec&lt; 2, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab173a333e6b7ce153ceba66ac4a321cf\">aligned_highp_dvec2</a></td></tr>\n<tr class=\"memdesc:gab173a333e6b7ce153ceba66ac4a321cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab173a333e6b7ce153ceba66ac4a321cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae94ef61edfa047d05bc69b6065fc42ba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae94ef61edfa047d05bc69b6065fc42ba\"></a>\ntypedef vec&lt; 3, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae94ef61edfa047d05bc69b6065fc42ba\">aligned_highp_dvec3</a></td></tr>\n<tr class=\"memdesc:gae94ef61edfa047d05bc69b6065fc42ba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae94ef61edfa047d05bc69b6065fc42ba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8fad35c5677f228e261fe541f15363a4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8fad35c5677f228e261fe541f15363a4\"></a>\ntypedef vec&lt; 4, double, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8fad35c5677f228e261fe541f15363a4\">aligned_highp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga8fad35c5677f228e261fe541f15363a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8fad35c5677f228e261fe541f15363a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad63b8c5b4dc0500d54d7414ef555178f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad63b8c5b4dc0500d54d7414ef555178f\"></a>\ntypedef vec&lt; 1, int, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad63b8c5b4dc0500d54d7414ef555178f\">aligned_highp_ivec1</a></td></tr>\n<tr class=\"memdesc:gad63b8c5b4dc0500d54d7414ef555178f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gad63b8c5b4dc0500d54d7414ef555178f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41563650f36cb7f479e080de21e08418\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga41563650f36cb7f479e080de21e08418\"></a>\ntypedef vec&lt; 2, int, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga41563650f36cb7f479e080de21e08418\">aligned_highp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga41563650f36cb7f479e080de21e08418\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga41563650f36cb7f479e080de21e08418\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6eca5170bb35eac90b4972590fd31a06\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6eca5170bb35eac90b4972590fd31a06\"></a>\ntypedef vec&lt; 3, int, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6eca5170bb35eac90b4972590fd31a06\">aligned_highp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga6eca5170bb35eac90b4972590fd31a06\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga6eca5170bb35eac90b4972590fd31a06\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31bfa801e1579fdba752ec3f7a45ec91\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga31bfa801e1579fdba752ec3f7a45ec91\"></a>\ntypedef vec&lt; 4, int, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga31bfa801e1579fdba752ec3f7a45ec91\">aligned_highp_ivec4</a></td></tr>\n<tr class=\"memdesc:ga31bfa801e1579fdba752ec3f7a45ec91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga31bfa801e1579fdba752ec3f7a45ec91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf9db5e8a929c317da5aa12cc53741b63\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf9db5e8a929c317da5aa12cc53741b63\"></a>\ntypedef mat&lt; 2, 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf9db5e8a929c317da5aa12cc53741b63\">aligned_highp_mat2</a></td></tr>\n<tr class=\"memdesc:gaf9db5e8a929c317da5aa12cc53741b63\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf9db5e8a929c317da5aa12cc53741b63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab559d943abf92bc588bcd3f4c0e4664b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab559d943abf92bc588bcd3f4c0e4664b\"></a>\ntypedef mat&lt; 2, 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab559d943abf92bc588bcd3f4c0e4664b\">aligned_highp_mat2x2</a></td></tr>\n<tr class=\"memdesc:gab559d943abf92bc588bcd3f4c0e4664b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab559d943abf92bc588bcd3f4c0e4664b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50c9af5aa3a848956d625fc64dc8488e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga50c9af5aa3a848956d625fc64dc8488e\"></a>\ntypedef mat&lt; 2, 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga50c9af5aa3a848956d625fc64dc8488e\">aligned_highp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga50c9af5aa3a848956d625fc64dc8488e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga50c9af5aa3a848956d625fc64dc8488e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0edcfdd179f8a158342eead48a4d0c2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0edcfdd179f8a158342eead48a4d0c2a\"></a>\ntypedef mat&lt; 2, 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0edcfdd179f8a158342eead48a4d0c2a\">aligned_highp_mat2x4</a></td></tr>\n<tr class=\"memdesc:ga0edcfdd179f8a158342eead48a4d0c2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0edcfdd179f8a158342eead48a4d0c2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabab3afcc04459c7b123604ae5dc663f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabab3afcc04459c7b123604ae5dc663f6\"></a>\ntypedef mat&lt; 3, 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabab3afcc04459c7b123604ae5dc663f6\">aligned_highp_mat3</a></td></tr>\n<tr class=\"memdesc:gabab3afcc04459c7b123604ae5dc663f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gabab3afcc04459c7b123604ae5dc663f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9fc2167b47c9be9295f2d8eea7f0ca75\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9fc2167b47c9be9295f2d8eea7f0ca75\"></a>\ntypedef mat&lt; 3, 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9fc2167b47c9be9295f2d8eea7f0ca75\">aligned_highp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga9fc2167b47c9be9295f2d8eea7f0ca75\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9fc2167b47c9be9295f2d8eea7f0ca75\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f7b8c99ba6f2d07c73a195a8143c259\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2f7b8c99ba6f2d07c73a195a8143c259\"></a>\ntypedef mat&lt; 3, 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2f7b8c99ba6f2d07c73a195a8143c259\">aligned_highp_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga2f7b8c99ba6f2d07c73a195a8143c259\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2f7b8c99ba6f2d07c73a195a8143c259\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52e00afd0eb181e6738f40cf41787049\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga52e00afd0eb181e6738f40cf41787049\"></a>\ntypedef mat&lt; 3, 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga52e00afd0eb181e6738f40cf41787049\">aligned_highp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga52e00afd0eb181e6738f40cf41787049\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga52e00afd0eb181e6738f40cf41787049\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga058ae939bfdbcbb80521dd4a3b01afba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga058ae939bfdbcbb80521dd4a3b01afba\"></a>\ntypedef mat&lt; 4, 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga058ae939bfdbcbb80521dd4a3b01afba\">aligned_highp_mat4</a></td></tr>\n<tr class=\"memdesc:ga058ae939bfdbcbb80521dd4a3b01afba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga058ae939bfdbcbb80521dd4a3b01afba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga84e1f5e0718952a079b748825c03f956\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga84e1f5e0718952a079b748825c03f956\"></a>\ntypedef mat&lt; 4, 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga84e1f5e0718952a079b748825c03f956\">aligned_highp_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga84e1f5e0718952a079b748825c03f956\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga84e1f5e0718952a079b748825c03f956\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafff1684c4ff19b4a818138ccacc1e78d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafff1684c4ff19b4a818138ccacc1e78d\"></a>\ntypedef mat&lt; 4, 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gafff1684c4ff19b4a818138ccacc1e78d\">aligned_highp_mat4x3</a></td></tr>\n<tr class=\"memdesc:gafff1684c4ff19b4a818138ccacc1e78d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gafff1684c4ff19b4a818138ccacc1e78d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga40d49648083a0498a12a4bb41ae6ece8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga40d49648083a0498a12a4bb41ae6ece8\"></a>\ntypedef mat&lt; 4, 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga40d49648083a0498a12a4bb41ae6ece8\">aligned_highp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga40d49648083a0498a12a4bb41ae6ece8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga40d49648083a0498a12a4bb41ae6ece8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b80e28396c6ef7d32c6fd18df498451\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5b80e28396c6ef7d32c6fd18df498451\"></a>\ntypedef vec&lt; 1, uint, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5b80e28396c6ef7d32c6fd18df498451\">aligned_highp_uvec1</a></td></tr>\n<tr class=\"memdesc:ga5b80e28396c6ef7d32c6fd18df498451\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga5b80e28396c6ef7d32c6fd18df498451\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04db692662a4908beeaf5a5ba6e19483\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga04db692662a4908beeaf5a5ba6e19483\"></a>\ntypedef vec&lt; 2, uint, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga04db692662a4908beeaf5a5ba6e19483\">aligned_highp_uvec2</a></td></tr>\n<tr class=\"memdesc:ga04db692662a4908beeaf5a5ba6e19483\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga04db692662a4908beeaf5a5ba6e19483\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga073fd6e8b241afade6d8afbd676b2667\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga073fd6e8b241afade6d8afbd676b2667\"></a>\ntypedef vec&lt; 3, uint, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga073fd6e8b241afade6d8afbd676b2667\">aligned_highp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga073fd6e8b241afade6d8afbd676b2667\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga073fd6e8b241afade6d8afbd676b2667\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabdd60462042859f876c17c7346c732a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabdd60462042859f876c17c7346c732a5\"></a>\ntypedef vec&lt; 4, uint, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabdd60462042859f876c17c7346c732a5\">aligned_highp_uvec4</a></td></tr>\n<tr class=\"memdesc:gabdd60462042859f876c17c7346c732a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gabdd60462042859f876c17c7346c732a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d0bd70d5fac49b800546d608b707513\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4d0bd70d5fac49b800546d608b707513\"></a>\ntypedef vec&lt; 1, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4d0bd70d5fac49b800546d608b707513\">aligned_highp_vec1</a></td></tr>\n<tr class=\"memdesc:ga4d0bd70d5fac49b800546d608b707513\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4d0bd70d5fac49b800546d608b707513\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac9f8482dde741fb6bab7248b81a45465\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac9f8482dde741fb6bab7248b81a45465\"></a>\ntypedef vec&lt; 2, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac9f8482dde741fb6bab7248b81a45465\">aligned_highp_vec2</a></td></tr>\n<tr class=\"memdesc:gac9f8482dde741fb6bab7248b81a45465\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac9f8482dde741fb6bab7248b81a45465\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65415d2d68c9cc0ca554524a8f5510b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga65415d2d68c9cc0ca554524a8f5510b2\"></a>\ntypedef vec&lt; 3, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga65415d2d68c9cc0ca554524a8f5510b2\">aligned_highp_vec3</a></td></tr>\n<tr class=\"memdesc:ga65415d2d68c9cc0ca554524a8f5510b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga65415d2d68c9cc0ca554524a8f5510b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cb26d354dd69d23849c34c4fba88da9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7cb26d354dd69d23849c34c4fba88da9\"></a>\ntypedef vec&lt; 4, float, aligned_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7cb26d354dd69d23849c34c4fba88da9\">aligned_highp_vec4</a></td></tr>\n<tr class=\"memdesc:ga7cb26d354dd69d23849c34c4fba88da9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7cb26d354dd69d23849c34c4fba88da9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga76298aed82a439063c3d55980c84aa0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga76298aed82a439063c3d55980c84aa0b\"></a>\ntypedef aligned_highp_ivec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">aligned_ivec1</a></td></tr>\n<tr class=\"memdesc:ga76298aed82a439063c3d55980c84aa0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga76298aed82a439063c3d55980c84aa0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4f38fd2c86cee6940986197777b3ca4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae4f38fd2c86cee6940986197777b3ca4\"></a>\ntypedef aligned_highp_ivec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">aligned_ivec2</a></td></tr>\n<tr class=\"memdesc:gae4f38fd2c86cee6940986197777b3ca4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gae4f38fd2c86cee6940986197777b3ca4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga32794322d294e5ace7fed4a61896f270\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga32794322d294e5ace7fed4a61896f270\"></a>\ntypedef aligned_highp_ivec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">aligned_ivec3</a></td></tr>\n<tr class=\"memdesc:ga32794322d294e5ace7fed4a61896f270\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga32794322d294e5ace7fed4a61896f270\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f79eae5927c9033d84617e49f6f34e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7f79eae5927c9033d84617e49f6f34e4\"></a>\ntypedef aligned_highp_ivec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">aligned_ivec4</a></td></tr>\n<tr class=\"memdesc:ga7f79eae5927c9033d84617e49f6f34e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga7f79eae5927c9033d84617e49f6f34e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac6036449ab1c4abf8efe1ea00fcdd1c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac6036449ab1c4abf8efe1ea00fcdd1c9\"></a>\ntypedef vec&lt; 1, bool, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac6036449ab1c4abf8efe1ea00fcdd1c9\">aligned_lowp_bvec1</a></td></tr>\n<tr class=\"memdesc:gac6036449ab1c4abf8efe1ea00fcdd1c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gac6036449ab1c4abf8efe1ea00fcdd1c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga59fadcd3835646e419372ae8b43c5d37\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga59fadcd3835646e419372ae8b43c5d37\"></a>\ntypedef vec&lt; 2, bool, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga59fadcd3835646e419372ae8b43c5d37\">aligned_lowp_bvec2</a></td></tr>\n<tr class=\"memdesc:ga59fadcd3835646e419372ae8b43c5d37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga59fadcd3835646e419372ae8b43c5d37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83aab4d191053f169c93a3e364f2e118\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga83aab4d191053f169c93a3e364f2e118\"></a>\ntypedef vec&lt; 3, bool, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga83aab4d191053f169c93a3e364f2e118\">aligned_lowp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga83aab4d191053f169c93a3e364f2e118\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga83aab4d191053f169c93a3e364f2e118\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7a76555ee4853614e5755181a8dd54e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa7a76555ee4853614e5755181a8dd54e\"></a>\ntypedef vec&lt; 4, bool, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa7a76555ee4853614e5755181a8dd54e\">aligned_lowp_bvec4</a></td></tr>\n<tr class=\"memdesc:gaa7a76555ee4853614e5755181a8dd54e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gaa7a76555ee4853614e5755181a8dd54e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga79a90173d8faa9816dc852ce447d66ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga79a90173d8faa9816dc852ce447d66ca\"></a>\ntypedef mat&lt; 2, 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga79a90173d8faa9816dc852ce447d66ca\">aligned_lowp_dmat2</a></td></tr>\n<tr class=\"memdesc:ga79a90173d8faa9816dc852ce447d66ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga79a90173d8faa9816dc852ce447d66ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07cb8e846666cbf56045b064fb553d2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga07cb8e846666cbf56045b064fb553d2e\"></a>\ntypedef mat&lt; 2, 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga07cb8e846666cbf56045b064fb553d2e\">aligned_lowp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga07cb8e846666cbf56045b064fb553d2e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga07cb8e846666cbf56045b064fb553d2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a4536b6e1f2ebb690f63816b5d7e48b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7a4536b6e1f2ebb690f63816b5d7e48b\"></a>\ntypedef mat&lt; 2, 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7a4536b6e1f2ebb690f63816b5d7e48b\">aligned_lowp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga7a4536b6e1f2ebb690f63816b5d7e48b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7a4536b6e1f2ebb690f63816b5d7e48b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0cf4f7c9a264941519acad286e055ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0cf4f7c9a264941519acad286e055ea\"></a>\ntypedef mat&lt; 2, 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab0cf4f7c9a264941519acad286e055ea\">aligned_lowp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gab0cf4f7c9a264941519acad286e055ea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab0cf4f7c9a264941519acad286e055ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac00e15efded8a57c9dec3aed0fb547e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac00e15efded8a57c9dec3aed0fb547e7\"></a>\ntypedef mat&lt; 3, 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac00e15efded8a57c9dec3aed0fb547e7\">aligned_lowp_dmat3</a></td></tr>\n<tr class=\"memdesc:gac00e15efded8a57c9dec3aed0fb547e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac00e15efded8a57c9dec3aed0fb547e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa281a47d5d627313984d0f8df993b648\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa281a47d5d627313984d0f8df993b648\"></a>\ntypedef mat&lt; 3, 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa281a47d5d627313984d0f8df993b648\">aligned_lowp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:gaa281a47d5d627313984d0f8df993b648\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa281a47d5d627313984d0f8df993b648\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f3148a72355e39932d6855baca42ebc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7f3148a72355e39932d6855baca42ebc\"></a>\ntypedef mat&lt; 3, 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7f3148a72355e39932d6855baca42ebc\">aligned_lowp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga7f3148a72355e39932d6855baca42ebc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7f3148a72355e39932d6855baca42ebc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea3ccc5ef5b178e6e49b4fa1427605d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaea3ccc5ef5b178e6e49b4fa1427605d3\"></a>\ntypedef mat&lt; 3, 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaea3ccc5ef5b178e6e49b4fa1427605d3\">aligned_lowp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:gaea3ccc5ef5b178e6e49b4fa1427605d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaea3ccc5ef5b178e6e49b4fa1427605d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab92c6d7d58d43dfb8147e9aedfe8351b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab92c6d7d58d43dfb8147e9aedfe8351b\"></a>\ntypedef mat&lt; 4, 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab92c6d7d58d43dfb8147e9aedfe8351b\">aligned_lowp_dmat4</a></td></tr>\n<tr class=\"memdesc:gab92c6d7d58d43dfb8147e9aedfe8351b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab92c6d7d58d43dfb8147e9aedfe8351b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf806dfdaffb2e9f7681b1cd2825898ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf806dfdaffb2e9f7681b1cd2825898ce\"></a>\ntypedef mat&lt; 4, 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf806dfdaffb2e9f7681b1cd2825898ce\">aligned_lowp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gaf806dfdaffb2e9f7681b1cd2825898ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf806dfdaffb2e9f7681b1cd2825898ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0931ac7807fa1428c7bbf249efcdf0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0931ac7807fa1428c7bbf249efcdf0d\"></a>\ntypedef mat&lt; 4, 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab0931ac7807fa1428c7bbf249efcdf0d\">aligned_lowp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gab0931ac7807fa1428c7bbf249efcdf0d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab0931ac7807fa1428c7bbf249efcdf0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8220a93d2fca2dd707821b4ab6f809e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad8220a93d2fca2dd707821b4ab6f809e\"></a>\ntypedef mat&lt; 4, 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad8220a93d2fca2dd707821b4ab6f809e\">aligned_lowp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:gad8220a93d2fca2dd707821b4ab6f809e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad8220a93d2fca2dd707821b4ab6f809e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f8a2cc5a686e52b1615761f4978ca62\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7f8a2cc5a686e52b1615761f4978ca62\"></a>\ntypedef vec&lt; 1, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7f8a2cc5a686e52b1615761f4978ca62\">aligned_lowp_dvec1</a></td></tr>\n<tr class=\"memdesc:ga7f8a2cc5a686e52b1615761f4978ca62\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7f8a2cc5a686e52b1615761f4978ca62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0e37cff4a43cca866101f0a35f01db6d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0e37cff4a43cca866101f0a35f01db6d\"></a>\ntypedef vec&lt; 2, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0e37cff4a43cca866101f0a35f01db6d\">aligned_lowp_dvec2</a></td></tr>\n<tr class=\"memdesc:ga0e37cff4a43cca866101f0a35f01db6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0e37cff4a43cca866101f0a35f01db6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab9e669c4efd52d3347fc6d5f6b20fd59\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab9e669c4efd52d3347fc6d5f6b20fd59\"></a>\ntypedef vec&lt; 3, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab9e669c4efd52d3347fc6d5f6b20fd59\">aligned_lowp_dvec3</a></td></tr>\n<tr class=\"memdesc:gab9e669c4efd52d3347fc6d5f6b20fd59\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab9e669c4efd52d3347fc6d5f6b20fd59\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga226f5ec7a953cea559c16fe3aff9924f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga226f5ec7a953cea559c16fe3aff9924f\"></a>\ntypedef vec&lt; 4, double, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga226f5ec7a953cea559c16fe3aff9924f\">aligned_lowp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga226f5ec7a953cea559c16fe3aff9924f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga226f5ec7a953cea559c16fe3aff9924f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1101d3a82b2e3f5f8828bd8f3adab3e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1101d3a82b2e3f5f8828bd8f3adab3e1\"></a>\ntypedef vec&lt; 1, int, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1101d3a82b2e3f5f8828bd8f3adab3e1\">aligned_lowp_ivec1</a></td></tr>\n<tr class=\"memdesc:ga1101d3a82b2e3f5f8828bd8f3adab3e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga1101d3a82b2e3f5f8828bd8f3adab3e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga44c4accad582cfbd7226a19b83b0cadc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga44c4accad582cfbd7226a19b83b0cadc\"></a>\ntypedef vec&lt; 2, int, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga44c4accad582cfbd7226a19b83b0cadc\">aligned_lowp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga44c4accad582cfbd7226a19b83b0cadc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga44c4accad582cfbd7226a19b83b0cadc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65663f10a02e52cedcddbcfe36ddf38d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga65663f10a02e52cedcddbcfe36ddf38d\"></a>\ntypedef vec&lt; 3, int, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga65663f10a02e52cedcddbcfe36ddf38d\">aligned_lowp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga65663f10a02e52cedcddbcfe36ddf38d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga65663f10a02e52cedcddbcfe36ddf38d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaae92fcec8b2e0328ffbeac31cc4fc419\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaae92fcec8b2e0328ffbeac31cc4fc419\"></a>\ntypedef vec&lt; 4, int, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaae92fcec8b2e0328ffbeac31cc4fc419\">aligned_lowp_ivec4</a></td></tr>\n<tr class=\"memdesc:gaae92fcec8b2e0328ffbeac31cc4fc419\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaae92fcec8b2e0328ffbeac31cc4fc419\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga17c424412207b00dba1cf587b099eea3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga17c424412207b00dba1cf587b099eea3\"></a>\ntypedef mat&lt; 2, 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga17c424412207b00dba1cf587b099eea3\">aligned_lowp_mat2</a></td></tr>\n<tr class=\"memdesc:ga17c424412207b00dba1cf587b099eea3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga17c424412207b00dba1cf587b099eea3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0e44aeb930a47f9cbf2db15b56433b0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0e44aeb930a47f9cbf2db15b56433b0f\"></a>\ntypedef mat&lt; 2, 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0e44aeb930a47f9cbf2db15b56433b0f\">aligned_lowp_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga0e44aeb930a47f9cbf2db15b56433b0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0e44aeb930a47f9cbf2db15b56433b0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dec6d96bc61312b1e56d137c9c74030\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7dec6d96bc61312b1e56d137c9c74030\"></a>\ntypedef mat&lt; 2, 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7dec6d96bc61312b1e56d137c9c74030\">aligned_lowp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga7dec6d96bc61312b1e56d137c9c74030\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7dec6d96bc61312b1e56d137c9c74030\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa694fab1f8df5f658846573ba8ffc563\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa694fab1f8df5f658846573ba8ffc563\"></a>\ntypedef mat&lt; 2, 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa694fab1f8df5f658846573ba8ffc563\">aligned_lowp_mat2x4</a></td></tr>\n<tr class=\"memdesc:gaa694fab1f8df5f658846573ba8ffc563\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa694fab1f8df5f658846573ba8ffc563\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1eb9076cc28ead5020fd3029fd0472c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1eb9076cc28ead5020fd3029fd0472c5\"></a>\ntypedef mat&lt; 3, 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1eb9076cc28ead5020fd3029fd0472c5\">aligned_lowp_mat3</a></td></tr>\n<tr class=\"memdesc:ga1eb9076cc28ead5020fd3029fd0472c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga1eb9076cc28ead5020fd3029fd0472c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2d6639f0bd777bae1ee0eba71cd7bfdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2d6639f0bd777bae1ee0eba71cd7bfdc\"></a>\ntypedef mat&lt; 3, 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2d6639f0bd777bae1ee0eba71cd7bfdc\">aligned_lowp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga2d6639f0bd777bae1ee0eba71cd7bfdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2d6639f0bd777bae1ee0eba71cd7bfdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeaab04e378a90956eec8d68a99d777ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaeaab04e378a90956eec8d68a99d777ed\"></a>\ntypedef mat&lt; 3, 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaeaab04e378a90956eec8d68a99d777ed\">aligned_lowp_mat3x3</a></td></tr>\n<tr class=\"memdesc:gaeaab04e378a90956eec8d68a99d777ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaeaab04e378a90956eec8d68a99d777ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f03696ab066572c6c044e63edf635a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1f03696ab066572c6c044e63edf635a2\"></a>\ntypedef mat&lt; 3, 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1f03696ab066572c6c044e63edf635a2\">aligned_lowp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga1f03696ab066572c6c044e63edf635a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga1f03696ab066572c6c044e63edf635a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga25ea2f684e36aa5e978b4f2f86593824\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga25ea2f684e36aa5e978b4f2f86593824\"></a>\ntypedef mat&lt; 4, 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga25ea2f684e36aa5e978b4f2f86593824\">aligned_lowp_mat4</a></td></tr>\n<tr class=\"memdesc:ga25ea2f684e36aa5e978b4f2f86593824\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga25ea2f684e36aa5e978b4f2f86593824\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2cb16c3fdfb15e0719d942ee3b548bc4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2cb16c3fdfb15e0719d942ee3b548bc4\"></a>\ntypedef mat&lt; 4, 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2cb16c3fdfb15e0719d942ee3b548bc4\">aligned_lowp_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga2cb16c3fdfb15e0719d942ee3b548bc4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2cb16c3fdfb15e0719d942ee3b548bc4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7e96981e872f17a780d9f1c22dc1f512\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7e96981e872f17a780d9f1c22dc1f512\"></a>\ntypedef mat&lt; 4, 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7e96981e872f17a780d9f1c22dc1f512\">aligned_lowp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga7e96981e872f17a780d9f1c22dc1f512\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7e96981e872f17a780d9f1c22dc1f512\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadae3dcfc22d28c64d0548cbfd9d08719\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadae3dcfc22d28c64d0548cbfd9d08719\"></a>\ntypedef mat&lt; 4, 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadae3dcfc22d28c64d0548cbfd9d08719\">aligned_lowp_mat4x4</a></td></tr>\n<tr class=\"memdesc:gadae3dcfc22d28c64d0548cbfd9d08719\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gadae3dcfc22d28c64d0548cbfd9d08719\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad09b93acc43c43423408d17a64f6d7ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad09b93acc43c43423408d17a64f6d7ca\"></a>\ntypedef vec&lt; 1, uint, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad09b93acc43c43423408d17a64f6d7ca\">aligned_lowp_uvec1</a></td></tr>\n<tr class=\"memdesc:gad09b93acc43c43423408d17a64f6d7ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gad09b93acc43c43423408d17a64f6d7ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6f94fcd28dde906fc6cad5f742b55c1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6f94fcd28dde906fc6cad5f742b55c1a\"></a>\ntypedef vec&lt; 2, uint, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6f94fcd28dde906fc6cad5f742b55c1a\">aligned_lowp_uvec2</a></td></tr>\n<tr class=\"memdesc:ga6f94fcd28dde906fc6cad5f742b55c1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga6f94fcd28dde906fc6cad5f742b55c1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9e9f006970b1a00862e3e6e599eedd4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9e9f006970b1a00862e3e6e599eedd4c\"></a>\ntypedef vec&lt; 3, uint, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9e9f006970b1a00862e3e6e599eedd4c\">aligned_lowp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga9e9f006970b1a00862e3e6e599eedd4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga9e9f006970b1a00862e3e6e599eedd4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46b1b0b9eb8625a5d69137bd66cd13dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga46b1b0b9eb8625a5d69137bd66cd13dc\"></a>\ntypedef vec&lt; 4, uint, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga46b1b0b9eb8625a5d69137bd66cd13dc\">aligned_lowp_uvec4</a></td></tr>\n<tr class=\"memdesc:ga46b1b0b9eb8625a5d69137bd66cd13dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga46b1b0b9eb8625a5d69137bd66cd13dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab34aee3d5e121c543fea11d2c50ecc43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab34aee3d5e121c543fea11d2c50ecc43\"></a>\ntypedef vec&lt; 1, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab34aee3d5e121c543fea11d2c50ecc43\">aligned_lowp_vec1</a></td></tr>\n<tr class=\"memdesc:gab34aee3d5e121c543fea11d2c50ecc43\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab34aee3d5e121c543fea11d2c50ecc43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga53ac5d252317f1fa43c2ef921857bf13\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga53ac5d252317f1fa43c2ef921857bf13\"></a>\ntypedef vec&lt; 2, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga53ac5d252317f1fa43c2ef921857bf13\">aligned_lowp_vec2</a></td></tr>\n<tr class=\"memdesc:ga53ac5d252317f1fa43c2ef921857bf13\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga53ac5d252317f1fa43c2ef921857bf13\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga98f0b5cd65fce164ff1367c2a3b3aa1e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga98f0b5cd65fce164ff1367c2a3b3aa1e\"></a>\ntypedef vec&lt; 3, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga98f0b5cd65fce164ff1367c2a3b3aa1e\">aligned_lowp_vec3</a></td></tr>\n<tr class=\"memdesc:ga98f0b5cd65fce164ff1367c2a3b3aa1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga98f0b5cd65fce164ff1367c2a3b3aa1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga82f7275d6102593a69ce38cdad680409\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga82f7275d6102593a69ce38cdad680409\"></a>\ntypedef vec&lt; 4, float, aligned_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga82f7275d6102593a69ce38cdad680409\">aligned_lowp_vec4</a></td></tr>\n<tr class=\"memdesc:ga82f7275d6102593a69ce38cdad680409\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga82f7275d6102593a69ce38cdad680409\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a8a5f8c47cd7d5502dd9932f83472b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5a8a5f8c47cd7d5502dd9932f83472b9\"></a>\ntypedef aligned_highp_mat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">aligned_mat2</a></td></tr>\n<tr class=\"memdesc:ga5a8a5f8c47cd7d5502dd9932f83472b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5a8a5f8c47cd7d5502dd9932f83472b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabb04f459d81d753d278b2072e2375e8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabb04f459d81d753d278b2072e2375e8e\"></a>\ntypedef aligned_highp_mat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabb04f459d81d753d278b2072e2375e8e\">aligned_mat2x2</a></td></tr>\n<tr class=\"memdesc:gabb04f459d81d753d278b2072e2375e8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gabb04f459d81d753d278b2072e2375e8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga832476bb1c59ef673db37433ff34e399\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga832476bb1c59ef673db37433ff34e399\"></a>\ntypedef aligned_highp_mat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga832476bb1c59ef673db37433ff34e399\">aligned_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga832476bb1c59ef673db37433ff34e399\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga832476bb1c59ef673db37433ff34e399\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadab11a7504430825b648ff7c7e36b725\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadab11a7504430825b648ff7c7e36b725\"></a>\ntypedef aligned_highp_mat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadab11a7504430825b648ff7c7e36b725\">aligned_mat2x4</a></td></tr>\n<tr class=\"memdesc:gadab11a7504430825b648ff7c7e36b725\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadab11a7504430825b648ff7c7e36b725\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43a92a24ca863e0e0f3b65834b3cf714\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga43a92a24ca863e0e0f3b65834b3cf714\"></a>\ntypedef aligned_highp_mat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">aligned_mat3</a></td></tr>\n<tr class=\"memdesc:ga43a92a24ca863e0e0f3b65834b3cf714\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga43a92a24ca863e0e0f3b65834b3cf714\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c0df24ba85eafafc0eb0c90690510ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5c0df24ba85eafafc0eb0c90690510ed\"></a>\ntypedef aligned_highp_mat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed\">aligned_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga5c0df24ba85eafafc0eb0c90690510ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5c0df24ba85eafafc0eb0c90690510ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadb065dbe5c11271fef8cf2ea8608f187\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadb065dbe5c11271fef8cf2ea8608f187\"></a>\ntypedef aligned_highp_mat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadb065dbe5c11271fef8cf2ea8608f187\">aligned_mat3x3</a></td></tr>\n<tr class=\"memdesc:gadb065dbe5c11271fef8cf2ea8608f187\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadb065dbe5c11271fef8cf2ea8608f187\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga88061c72c997b94c420f2b0a60d9df26\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga88061c72c997b94c420f2b0a60d9df26\"></a>\ntypedef aligned_highp_mat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga88061c72c997b94c420f2b0a60d9df26\">aligned_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga88061c72c997b94c420f2b0a60d9df26\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga88061c72c997b94c420f2b0a60d9df26\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0fddcf95dd51cbcbf624ea7c40dfeb8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0fddcf95dd51cbcbf624ea7c40dfeb8\"></a>\ntypedef aligned_highp_mat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">aligned_mat4</a></td></tr>\n<tr class=\"memdesc:gab0fddcf95dd51cbcbf624ea7c40dfeb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gab0fddcf95dd51cbcbf624ea7c40dfeb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac9a2d0fb815fd5c2bd58b869c55e32d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac9a2d0fb815fd5c2bd58b869c55e32d3\"></a>\ntypedef aligned_highp_mat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3\">aligned_mat4x2</a></td></tr>\n<tr class=\"memdesc:gac9a2d0fb815fd5c2bd58b869c55e32d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gac9a2d0fb815fd5c2bd58b869c55e32d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga452bbbfd26e244de216e4d004d50bb74\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga452bbbfd26e244de216e4d004d50bb74\"></a>\ntypedef aligned_highp_mat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga452bbbfd26e244de216e4d004d50bb74\">aligned_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga452bbbfd26e244de216e4d004d50bb74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga452bbbfd26e244de216e4d004d50bb74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b8fb86973a0b768c5bd802c92fac1a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8b8fb86973a0b768c5bd802c92fac1a1\"></a>\ntypedef aligned_highp_mat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1\">aligned_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga8b8fb86973a0b768c5bd802c92fac1a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga8b8fb86973a0b768c5bd802c92fac1a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd3b8bd71a758f7fb0da8e525156f34e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadd3b8bd71a758f7fb0da8e525156f34e\"></a>\ntypedef vec&lt; 1, bool, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadd3b8bd71a758f7fb0da8e525156f34e\">aligned_mediump_bvec1</a></td></tr>\n<tr class=\"memdesc:gadd3b8bd71a758f7fb0da8e525156f34e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gadd3b8bd71a758f7fb0da8e525156f34e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb183eb5e67ec0d0ea5a016cba962810\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacb183eb5e67ec0d0ea5a016cba962810\"></a>\ntypedef vec&lt; 2, bool, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacb183eb5e67ec0d0ea5a016cba962810\">aligned_mediump_bvec2</a></td></tr>\n<tr class=\"memdesc:gacb183eb5e67ec0d0ea5a016cba962810\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gacb183eb5e67ec0d0ea5a016cba962810\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacfa4a542f1b20a5b63ad702dfb6fd587\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacfa4a542f1b20a5b63ad702dfb6fd587\"></a>\ntypedef vec&lt; 3, bool, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacfa4a542f1b20a5b63ad702dfb6fd587\">aligned_mediump_bvec3</a></td></tr>\n<tr class=\"memdesc:gacfa4a542f1b20a5b63ad702dfb6fd587\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gacfa4a542f1b20a5b63ad702dfb6fd587\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga91bc1f513bb9b0fd60281d57ded9a48c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga91bc1f513bb9b0fd60281d57ded9a48c\"></a>\ntypedef vec&lt; 4, bool, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga91bc1f513bb9b0fd60281d57ded9a48c\">aligned_mediump_bvec4</a></td></tr>\n<tr class=\"memdesc:ga91bc1f513bb9b0fd60281d57ded9a48c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga91bc1f513bb9b0fd60281d57ded9a48c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62a2dfd668c91072b72c3109fc6cda28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga62a2dfd668c91072b72c3109fc6cda28\"></a>\ntypedef mat&lt; 2, 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga62a2dfd668c91072b72c3109fc6cda28\">aligned_mediump_dmat2</a></td></tr>\n<tr class=\"memdesc:ga62a2dfd668c91072b72c3109fc6cda28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga62a2dfd668c91072b72c3109fc6cda28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9b7feec247d378dd407ba81f56ea96c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9b7feec247d378dd407ba81f56ea96c8\"></a>\ntypedef mat&lt; 2, 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9b7feec247d378dd407ba81f56ea96c8\">aligned_mediump_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga9b7feec247d378dd407ba81f56ea96c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9b7feec247d378dd407ba81f56ea96c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafcb189f4f93648fe7ca802ca4aca2eb8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafcb189f4f93648fe7ca802ca4aca2eb8\"></a>\ntypedef mat&lt; 2, 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gafcb189f4f93648fe7ca802ca4aca2eb8\">aligned_mediump_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gafcb189f4f93648fe7ca802ca4aca2eb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gafcb189f4f93648fe7ca802ca4aca2eb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92f8873e3bbd5ca1323c8bbe5725cc5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga92f8873e3bbd5ca1323c8bbe5725cc5e\"></a>\ntypedef mat&lt; 2, 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga92f8873e3bbd5ca1323c8bbe5725cc5e\">aligned_mediump_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga92f8873e3bbd5ca1323c8bbe5725cc5e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga92f8873e3bbd5ca1323c8bbe5725cc5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6dc2832b747c00e0a0df621aba196960\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6dc2832b747c00e0a0df621aba196960\"></a>\ntypedef mat&lt; 3, 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6dc2832b747c00e0a0df621aba196960\">aligned_mediump_dmat3</a></td></tr>\n<tr class=\"memdesc:ga6dc2832b747c00e0a0df621aba196960\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6dc2832b747c00e0a0df621aba196960\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a97f0355d801de3444d42c1d5b40438\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5a97f0355d801de3444d42c1d5b40438\"></a>\ntypedef mat&lt; 3, 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5a97f0355d801de3444d42c1d5b40438\">aligned_mediump_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga5a97f0355d801de3444d42c1d5b40438\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga5a97f0355d801de3444d42c1d5b40438\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga649d0acf01054b17e679cf00e150e025\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga649d0acf01054b17e679cf00e150e025\"></a>\ntypedef mat&lt; 3, 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga649d0acf01054b17e679cf00e150e025\">aligned_mediump_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga649d0acf01054b17e679cf00e150e025\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga649d0acf01054b17e679cf00e150e025\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45e155a4840f69b2fa4ed8047a676860\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga45e155a4840f69b2fa4ed8047a676860\"></a>\ntypedef mat&lt; 3, 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga45e155a4840f69b2fa4ed8047a676860\">aligned_mediump_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga45e155a4840f69b2fa4ed8047a676860\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga45e155a4840f69b2fa4ed8047a676860\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a9376d82f0e946e25137eb55543e6ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8a9376d82f0e946e25137eb55543e6ce\"></a>\ntypedef mat&lt; 4, 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8a9376d82f0e946e25137eb55543e6ce\">aligned_mediump_dmat4</a></td></tr>\n<tr class=\"memdesc:ga8a9376d82f0e946e25137eb55543e6ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8a9376d82f0e946e25137eb55543e6ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc25e547f4de4af62403492532cd1b6d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabc25e547f4de4af62403492532cd1b6d\"></a>\ntypedef mat&lt; 4, 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabc25e547f4de4af62403492532cd1b6d\">aligned_mediump_dmat4x2</a></td></tr>\n<tr class=\"memdesc:gabc25e547f4de4af62403492532cd1b6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gabc25e547f4de4af62403492532cd1b6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae84f4763ecdc7457ecb7930bad12057c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae84f4763ecdc7457ecb7930bad12057c\"></a>\ntypedef mat&lt; 4, 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae84f4763ecdc7457ecb7930bad12057c\">aligned_mediump_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gae84f4763ecdc7457ecb7930bad12057c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae84f4763ecdc7457ecb7930bad12057c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa292ebaa907afdecb2d5967fb4fb1247\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa292ebaa907afdecb2d5967fb4fb1247\"></a>\ntypedef mat&lt; 4, 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa292ebaa907afdecb2d5967fb4fb1247\">aligned_mediump_dmat4x4</a></td></tr>\n<tr class=\"memdesc:gaa292ebaa907afdecb2d5967fb4fb1247\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa292ebaa907afdecb2d5967fb4fb1247\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7180b685c581adb224406a7f831608e3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7180b685c581adb224406a7f831608e3\"></a>\ntypedef vec&lt; 1, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7180b685c581adb224406a7f831608e3\">aligned_mediump_dvec1</a></td></tr>\n<tr class=\"memdesc:ga7180b685c581adb224406a7f831608e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7180b685c581adb224406a7f831608e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9af1eabe22f569e70d9893be72eda0f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9af1eabe22f569e70d9893be72eda0f5\"></a>\ntypedef vec&lt; 2, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9af1eabe22f569e70d9893be72eda0f5\">aligned_mediump_dvec2</a></td></tr>\n<tr class=\"memdesc:ga9af1eabe22f569e70d9893be72eda0f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9af1eabe22f569e70d9893be72eda0f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga058e7ddab1428e47f2197bdd3a5a6953\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga058e7ddab1428e47f2197bdd3a5a6953\"></a>\ntypedef vec&lt; 3, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga058e7ddab1428e47f2197bdd3a5a6953\">aligned_mediump_dvec3</a></td></tr>\n<tr class=\"memdesc:ga058e7ddab1428e47f2197bdd3a5a6953\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga058e7ddab1428e47f2197bdd3a5a6953\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaffd747ea2aea1e69c2ecb04e68521b21\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaffd747ea2aea1e69c2ecb04e68521b21\"></a>\ntypedef vec&lt; 4, double, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaffd747ea2aea1e69c2ecb04e68521b21\">aligned_mediump_dvec4</a></td></tr>\n<tr class=\"memdesc:gaffd747ea2aea1e69c2ecb04e68521b21\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaffd747ea2aea1e69c2ecb04e68521b21\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20e63dd980b81af10cadbbe219316650\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga20e63dd980b81af10cadbbe219316650\"></a>\ntypedef vec&lt; 1, int, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga20e63dd980b81af10cadbbe219316650\">aligned_mediump_ivec1</a></td></tr>\n<tr class=\"memdesc:ga20e63dd980b81af10cadbbe219316650\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga20e63dd980b81af10cadbbe219316650\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea13d89d49daca2c796aeaa82fc2c2f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaea13d89d49daca2c796aeaa82fc2c2f2\"></a>\ntypedef vec&lt; 2, int, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaea13d89d49daca2c796aeaa82fc2c2f2\">aligned_mediump_ivec2</a></td></tr>\n<tr class=\"memdesc:gaea13d89d49daca2c796aeaa82fc2c2f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaea13d89d49daca2c796aeaa82fc2c2f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabbf0f15e9c3d9868e43241ad018f82bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabbf0f15e9c3d9868e43241ad018f82bd\"></a>\ntypedef vec&lt; 3, int, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabbf0f15e9c3d9868e43241ad018f82bd\">aligned_mediump_ivec3</a></td></tr>\n<tr class=\"memdesc:gabbf0f15e9c3d9868e43241ad018f82bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gabbf0f15e9c3d9868e43241ad018f82bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6099dd7878d0a78101a4250d8cd2d736\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6099dd7878d0a78101a4250d8cd2d736\"></a>\ntypedef vec&lt; 4, int, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6099dd7878d0a78101a4250d8cd2d736\">aligned_mediump_ivec4</a></td></tr>\n<tr class=\"memdesc:ga6099dd7878d0a78101a4250d8cd2d736\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga6099dd7878d0a78101a4250d8cd2d736\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6f041b212c57664d88bc6aefb7e36f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf6f041b212c57664d88bc6aefb7e36f3\"></a>\ntypedef mat&lt; 2, 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf6f041b212c57664d88bc6aefb7e36f3\">aligned_mediump_mat2</a></td></tr>\n<tr class=\"memdesc:gaf6f041b212c57664d88bc6aefb7e36f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf6f041b212c57664d88bc6aefb7e36f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04bf49316ee777d42fcfe681ee37d7be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga04bf49316ee777d42fcfe681ee37d7be\"></a>\ntypedef mat&lt; 2, 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga04bf49316ee777d42fcfe681ee37d7be\">aligned_mediump_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga04bf49316ee777d42fcfe681ee37d7be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga04bf49316ee777d42fcfe681ee37d7be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26a0b61e444a51a37b9737cf4d84291b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga26a0b61e444a51a37b9737cf4d84291b\"></a>\ntypedef mat&lt; 2, 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga26a0b61e444a51a37b9737cf4d84291b\">aligned_mediump_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga26a0b61e444a51a37b9737cf4d84291b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga26a0b61e444a51a37b9737cf4d84291b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga163facc9ed2692ea1300ed57c5d12b17\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga163facc9ed2692ea1300ed57c5d12b17\"></a>\ntypedef mat&lt; 2, 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga163facc9ed2692ea1300ed57c5d12b17\">aligned_mediump_mat2x4</a></td></tr>\n<tr class=\"memdesc:ga163facc9ed2692ea1300ed57c5d12b17\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga163facc9ed2692ea1300ed57c5d12b17\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b76ba17ae5d53debeb6f7e55919a57c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3b76ba17ae5d53debeb6f7e55919a57c\"></a>\ntypedef mat&lt; 3, 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3b76ba17ae5d53debeb6f7e55919a57c\">aligned_mediump_mat3</a></td></tr>\n<tr class=\"memdesc:ga3b76ba17ae5d53debeb6f7e55919a57c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3b76ba17ae5d53debeb6f7e55919a57c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga80dee705d714300378e0847f45059097\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga80dee705d714300378e0847f45059097\"></a>\ntypedef mat&lt; 3, 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga80dee705d714300378e0847f45059097\">aligned_mediump_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga80dee705d714300378e0847f45059097\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga80dee705d714300378e0847f45059097\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga721f5404caf40d68962dcc0529de71d9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga721f5404caf40d68962dcc0529de71d9\"></a>\ntypedef mat&lt; 3, 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga721f5404caf40d68962dcc0529de71d9\">aligned_mediump_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga721f5404caf40d68962dcc0529de71d9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga721f5404caf40d68962dcc0529de71d9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga98f4dc6722a2541a990918c074075359\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga98f4dc6722a2541a990918c074075359\"></a>\ntypedef mat&lt; 3, 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga98f4dc6722a2541a990918c074075359\">aligned_mediump_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga98f4dc6722a2541a990918c074075359\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga98f4dc6722a2541a990918c074075359\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeefee8317192174596852ce19b602720\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaeefee8317192174596852ce19b602720\"></a>\ntypedef mat&lt; 4, 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaeefee8317192174596852ce19b602720\">aligned_mediump_mat4</a></td></tr>\n<tr class=\"memdesc:gaeefee8317192174596852ce19b602720\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaeefee8317192174596852ce19b602720\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46f372a006345c252a41267657cc22c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga46f372a006345c252a41267657cc22c0\"></a>\ntypedef mat&lt; 4, 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga46f372a006345c252a41267657cc22c0\">aligned_mediump_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga46f372a006345c252a41267657cc22c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga46f372a006345c252a41267657cc22c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0effece4545acdebdc2a5512a303110e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0effece4545acdebdc2a5512a303110e\"></a>\ntypedef mat&lt; 4, 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0effece4545acdebdc2a5512a303110e\">aligned_mediump_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga0effece4545acdebdc2a5512a303110e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0effece4545acdebdc2a5512a303110e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga312864244cae4e8f10f478cffd0f76de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga312864244cae4e8f10f478cffd0f76de\"></a>\ntypedef mat&lt; 4, 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga312864244cae4e8f10f478cffd0f76de\">aligned_mediump_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga312864244cae4e8f10f478cffd0f76de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga312864244cae4e8f10f478cffd0f76de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb78126ea2eb779b41c7511128ff1283\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacb78126ea2eb779b41c7511128ff1283\"></a>\ntypedef vec&lt; 1, uint, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gacb78126ea2eb779b41c7511128ff1283\">aligned_mediump_uvec1</a></td></tr>\n<tr class=\"memdesc:gacb78126ea2eb779b41c7511128ff1283\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gacb78126ea2eb779b41c7511128ff1283\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga081d53e0a71443d0b68ea61c870f9adc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga081d53e0a71443d0b68ea61c870f9adc\"></a>\ntypedef vec&lt; 2, uint, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga081d53e0a71443d0b68ea61c870f9adc\">aligned_mediump_uvec2</a></td></tr>\n<tr class=\"memdesc:ga081d53e0a71443d0b68ea61c870f9adc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga081d53e0a71443d0b68ea61c870f9adc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6fc921bdde2bdbc7e09b028e1e9b379\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad6fc921bdde2bdbc7e09b028e1e9b379\"></a>\ntypedef vec&lt; 3, uint, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad6fc921bdde2bdbc7e09b028e1e9b379\">aligned_mediump_uvec3</a></td></tr>\n<tr class=\"memdesc:gad6fc921bdde2bdbc7e09b028e1e9b379\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gad6fc921bdde2bdbc7e09b028e1e9b379\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73ea0c1ba31580e107d21270883f51fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga73ea0c1ba31580e107d21270883f51fc\"></a>\ntypedef vec&lt; 4, uint, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga73ea0c1ba31580e107d21270883f51fc\">aligned_mediump_uvec4</a></td></tr>\n<tr class=\"memdesc:ga73ea0c1ba31580e107d21270883f51fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga73ea0c1ba31580e107d21270883f51fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b797eec76fa471e300158f3453b3b2e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6b797eec76fa471e300158f3453b3b2e\"></a>\ntypedef vec&lt; 1, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6b797eec76fa471e300158f3453b3b2e\">aligned_mediump_vec1</a></td></tr>\n<tr class=\"memdesc:ga6b797eec76fa471e300158f3453b3b2e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6b797eec76fa471e300158f3453b3b2e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga026a55ddbf2bafb1432f1157a2708616\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga026a55ddbf2bafb1432f1157a2708616\"></a>\ntypedef vec&lt; 2, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga026a55ddbf2bafb1432f1157a2708616\">aligned_mediump_vec2</a></td></tr>\n<tr class=\"memdesc:ga026a55ddbf2bafb1432f1157a2708616\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga026a55ddbf2bafb1432f1157a2708616\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a25e494173f6a64637b08a1b50a2132\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3a25e494173f6a64637b08a1b50a2132\"></a>\ntypedef vec&lt; 3, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3a25e494173f6a64637b08a1b50a2132\">aligned_mediump_vec3</a></td></tr>\n<tr class=\"memdesc:ga3a25e494173f6a64637b08a1b50a2132\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3a25e494173f6a64637b08a1b50a2132\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga320d1c661cff2ef214eb50241f2928b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga320d1c661cff2ef214eb50241f2928b2\"></a>\ntypedef vec&lt; 4, float, aligned_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga320d1c661cff2ef214eb50241f2928b2\">aligned_mediump_vec4</a></td></tr>\n<tr class=\"memdesc:ga320d1c661cff2ef214eb50241f2928b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga320d1c661cff2ef214eb50241f2928b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ff8ed402c93d280ff0597c1c5e7c548\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1ff8ed402c93d280ff0597c1c5e7c548\"></a>\ntypedef aligned_highp_uvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">aligned_uvec1</a></td></tr>\n<tr class=\"memdesc:ga1ff8ed402c93d280ff0597c1c5e7c548\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga1ff8ed402c93d280ff0597c1c5e7c548\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga074137e3be58528d67041c223d49f398\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga074137e3be58528d67041c223d49f398\"></a>\ntypedef aligned_highp_uvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">aligned_uvec2</a></td></tr>\n<tr class=\"memdesc:ga074137e3be58528d67041c223d49f398\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga074137e3be58528d67041c223d49f398\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a8d9c3046f89d854eb758adfa0811c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2a8d9c3046f89d854eb758adfa0811c0\"></a>\ntypedef aligned_highp_uvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">aligned_uvec3</a></td></tr>\n<tr class=\"memdesc:ga2a8d9c3046f89d854eb758adfa0811c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga2a8d9c3046f89d854eb758adfa0811c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf842c45eea186170c267a328e3f3b7d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabf842c45eea186170c267a328e3f3b7d\"></a>\ntypedef aligned_highp_uvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">aligned_uvec4</a></td></tr>\n<tr class=\"memdesc:gabf842c45eea186170c267a328e3f3b7d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gabf842c45eea186170c267a328e3f3b7d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05e6d4c908965d04191c2070a8d0a65e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga05e6d4c908965d04191c2070a8d0a65e\"></a>\ntypedef aligned_highp_vec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">aligned_vec1</a></td></tr>\n<tr class=\"memdesc:ga05e6d4c908965d04191c2070a8d0a65e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga05e6d4c908965d04191c2070a8d0a65e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0682462f8096a226773e20fac993cde5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0682462f8096a226773e20fac993cde5\"></a>\ntypedef aligned_highp_vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">aligned_vec2</a></td></tr>\n<tr class=\"memdesc:ga0682462f8096a226773e20fac993cde5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga0682462f8096a226773e20fac993cde5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cf643b66664e0cd3c48759ae66c2bd0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7cf643b66664e0cd3c48759ae66c2bd0\"></a>\ntypedef aligned_highp_vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">aligned_vec3</a></td></tr>\n<tr class=\"memdesc:ga7cf643b66664e0cd3c48759ae66c2bd0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga7cf643b66664e0cd3c48759ae66c2bd0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85d89e83cb8137e1be1446de8c3b643a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga85d89e83cb8137e1be1446de8c3b643a\"></a>\ntypedef aligned_highp_vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">aligned_vec4</a></td></tr>\n<tr class=\"memdesc:ga85d89e83cb8137e1be1446de8c3b643a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector aligned in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga85d89e83cb8137e1be1446de8c3b643a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga88632cea9008ac0ac1388e94e804a53c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga88632cea9008ac0ac1388e94e804a53c\"></a>\ntypedef packed_highp_bvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga88632cea9008ac0ac1388e94e804a53c\">packed_bvec1</a></td></tr>\n<tr class=\"memdesc:ga88632cea9008ac0ac1388e94e804a53c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga88632cea9008ac0ac1388e94e804a53c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab85245913eaa40ab82adabcae37086cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab85245913eaa40ab82adabcae37086cb\"></a>\ntypedef packed_highp_bvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab85245913eaa40ab82adabcae37086cb\">packed_bvec2</a></td></tr>\n<tr class=\"memdesc:gab85245913eaa40ab82adabcae37086cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gab85245913eaa40ab82adabcae37086cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c48f9417f649e27f3fb0c9f733a18bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0c48f9417f649e27f3fb0c9f733a18bd\"></a>\ntypedef packed_highp_bvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0c48f9417f649e27f3fb0c9f733a18bd\">packed_bvec3</a></td></tr>\n<tr class=\"memdesc:ga0c48f9417f649e27f3fb0c9f733a18bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga0c48f9417f649e27f3fb0c9f733a18bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3180d7db84a74c402157df3bbc0ae3ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3180d7db84a74c402157df3bbc0ae3ed\"></a>\ntypedef packed_highp_bvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3180d7db84a74c402157df3bbc0ae3ed\">packed_bvec4</a></td></tr>\n<tr class=\"memdesc:ga3180d7db84a74c402157df3bbc0ae3ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga3180d7db84a74c402157df3bbc0ae3ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad87408a8350918711f845f071bbe43fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad87408a8350918711f845f071bbe43fb\"></a>\ntypedef packed_highp_dmat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad87408a8350918711f845f071bbe43fb\">packed_dmat2</a></td></tr>\n<tr class=\"memdesc:gad87408a8350918711f845f071bbe43fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gad87408a8350918711f845f071bbe43fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa33d8e06657a777efb0c72c44ce87a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaa33d8e06657a777efb0c72c44ce87a9\"></a>\ntypedef packed_highp_dmat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9\">packed_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gaaa33d8e06657a777efb0c72c44ce87a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaaa33d8e06657a777efb0c72c44ce87a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3a5315f588ba04ad255188071ec4e22\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac3a5315f588ba04ad255188071ec4e22\"></a>\ntypedef packed_highp_dmat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac3a5315f588ba04ad255188071ec4e22\">packed_dmat2x3</a></td></tr>\n<tr class=\"memdesc:gac3a5315f588ba04ad255188071ec4e22\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gac3a5315f588ba04ad255188071ec4e22\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae398fc3156f51d3684b08f62c1a5a6d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae398fc3156f51d3684b08f62c1a5a6d4\"></a>\ntypedef packed_highp_dmat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4\">packed_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gae398fc3156f51d3684b08f62c1a5a6d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gae398fc3156f51d3684b08f62c1a5a6d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03dfc90d539cc87ea3a15a9caa5d2245\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga03dfc90d539cc87ea3a15a9caa5d2245\"></a>\ntypedef packed_highp_dmat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245\">packed_dmat3</a></td></tr>\n<tr class=\"memdesc:ga03dfc90d539cc87ea3a15a9caa5d2245\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga03dfc90d539cc87ea3a15a9caa5d2245\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae36de20a4c0e0b1444b7903ae811d94e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae36de20a4c0e0b1444b7903ae811d94e\"></a>\ntypedef packed_highp_dmat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae36de20a4c0e0b1444b7903ae811d94e\">packed_dmat3x2</a></td></tr>\n<tr class=\"memdesc:gae36de20a4c0e0b1444b7903ae811d94e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gae36de20a4c0e0b1444b7903ae811d94e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab9b909f1392d86854334350efcae85f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab9b909f1392d86854334350efcae85f5\"></a>\ntypedef packed_highp_dmat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab9b909f1392d86854334350efcae85f5\">packed_dmat3x3</a></td></tr>\n<tr class=\"memdesc:gab9b909f1392d86854334350efcae85f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gab9b909f1392d86854334350efcae85f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga199131fd279c92c2ac12df6d978f1dd6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga199131fd279c92c2ac12df6d978f1dd6\"></a>\ntypedef packed_highp_dmat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga199131fd279c92c2ac12df6d978f1dd6\">packed_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga199131fd279c92c2ac12df6d978f1dd6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga199131fd279c92c2ac12df6d978f1dd6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada980a3485640aa8151f368f17ad3086\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gada980a3485640aa8151f368f17ad3086\"></a>\ntypedef packed_highp_dmat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gada980a3485640aa8151f368f17ad3086\">packed_dmat4</a></td></tr>\n<tr class=\"memdesc:gada980a3485640aa8151f368f17ad3086\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gada980a3485640aa8151f368f17ad3086\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6dc65249730698d3cc9ac5d7e1bc4d72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6dc65249730698d3cc9ac5d7e1bc4d72\"></a>\ntypedef packed_highp_dmat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72\">packed_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga6dc65249730698d3cc9ac5d7e1bc4d72\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga6dc65249730698d3cc9ac5d7e1bc4d72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadf202aaa9ed71c09f9bbe347e43f8764\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadf202aaa9ed71c09f9bbe347e43f8764\"></a>\ntypedef packed_highp_dmat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764\">packed_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gadf202aaa9ed71c09f9bbe347e43f8764\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadf202aaa9ed71c09f9bbe347e43f8764\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae20617435a6d042d7c38da2badd64a09\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae20617435a6d042d7c38da2badd64a09\"></a>\ntypedef packed_highp_dmat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae20617435a6d042d7c38da2badd64a09\">packed_dmat4x4</a></td></tr>\n<tr class=\"memdesc:gae20617435a6d042d7c38da2badd64a09\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gae20617435a6d042d7c38da2badd64a09\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga532f0c940649b1ee303acd572fc35531\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga532f0c940649b1ee303acd572fc35531\"></a>\ntypedef packed_highp_dvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga532f0c940649b1ee303acd572fc35531\">packed_dvec1</a></td></tr>\n<tr class=\"memdesc:ga532f0c940649b1ee303acd572fc35531\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga532f0c940649b1ee303acd572fc35531\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c194b11fbda636f2ab20c3bd0079196\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5c194b11fbda636f2ab20c3bd0079196\"></a>\ntypedef packed_highp_dvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5c194b11fbda636f2ab20c3bd0079196\">packed_dvec2</a></td></tr>\n<tr class=\"memdesc:ga5c194b11fbda636f2ab20c3bd0079196\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga5c194b11fbda636f2ab20c3bd0079196\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0581ea552d86b2b5de7a2804bed80e72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0581ea552d86b2b5de7a2804bed80e72\"></a>\ntypedef packed_highp_dvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0581ea552d86b2b5de7a2804bed80e72\">packed_dvec3</a></td></tr>\n<tr class=\"memdesc:ga0581ea552d86b2b5de7a2804bed80e72\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga0581ea552d86b2b5de7a2804bed80e72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae8a9b181f9dc813ad6e125a52b14b935\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae8a9b181f9dc813ad6e125a52b14b935\"></a>\ntypedef packed_highp_dvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae8a9b181f9dc813ad6e125a52b14b935\">packed_dvec4</a></td></tr>\n<tr class=\"memdesc:gae8a9b181f9dc813ad6e125a52b14b935\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of double-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gae8a9b181f9dc813ad6e125a52b14b935\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga439e97795314b81cd15abd4e5c2e6e7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga439e97795314b81cd15abd4e5c2e6e7a\"></a>\ntypedef vec&lt; 1, bool, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga439e97795314b81cd15abd4e5c2e6e7a\">packed_highp_bvec1</a></td></tr>\n<tr class=\"memdesc:ga439e97795314b81cd15abd4e5c2e6e7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga439e97795314b81cd15abd4e5c2e6e7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad791d671f4fcf1ed1ea41f752916b70a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad791d671f4fcf1ed1ea41f752916b70a\"></a>\ntypedef vec&lt; 2, bool, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad791d671f4fcf1ed1ea41f752916b70a\">packed_highp_bvec2</a></td></tr>\n<tr class=\"memdesc:gad791d671f4fcf1ed1ea41f752916b70a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gad791d671f4fcf1ed1ea41f752916b70a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6a5a3250b57dfadc66735bc72911437f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6a5a3250b57dfadc66735bc72911437f\"></a>\ntypedef vec&lt; 3, bool, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6a5a3250b57dfadc66735bc72911437f\">packed_highp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga6a5a3250b57dfadc66735bc72911437f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga6a5a3250b57dfadc66735bc72911437f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09f517d88b996ef1b2f42fd54222b82d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga09f517d88b996ef1b2f42fd54222b82d\"></a>\ntypedef vec&lt; 4, bool, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga09f517d88b996ef1b2f42fd54222b82d\">packed_highp_bvec4</a></td></tr>\n<tr class=\"memdesc:ga09f517d88b996ef1b2f42fd54222b82d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga09f517d88b996ef1b2f42fd54222b82d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae29686632fd05efac0675d9a6370d77b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae29686632fd05efac0675d9a6370d77b\"></a>\ntypedef mat&lt; 2, 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae29686632fd05efac0675d9a6370d77b\">packed_highp_dmat2</a></td></tr>\n<tr class=\"memdesc:gae29686632fd05efac0675d9a6370d77b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae29686632fd05efac0675d9a6370d77b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga22bd6382b16052e301edbfc031b9f37a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga22bd6382b16052e301edbfc031b9f37a\"></a>\ntypedef mat&lt; 2, 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga22bd6382b16052e301edbfc031b9f37a\">packed_highp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga22bd6382b16052e301edbfc031b9f37a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga22bd6382b16052e301edbfc031b9f37a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga999d82719696d4c59f4d236dd08f273d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga999d82719696d4c59f4d236dd08f273d\"></a>\ntypedef mat&lt; 2, 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga999d82719696d4c59f4d236dd08f273d\">packed_highp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga999d82719696d4c59f4d236dd08f273d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga999d82719696d4c59f4d236dd08f273d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6998ac2a8d7fe456b651a6336ed26bb0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6998ac2a8d7fe456b651a6336ed26bb0\"></a>\ntypedef mat&lt; 2, 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6998ac2a8d7fe456b651a6336ed26bb0\">packed_highp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:ga6998ac2a8d7fe456b651a6336ed26bb0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6998ac2a8d7fe456b651a6336ed26bb0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadac7c040c4810dd52b36fcd09d097400\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadac7c040c4810dd52b36fcd09d097400\"></a>\ntypedef mat&lt; 3, 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadac7c040c4810dd52b36fcd09d097400\">packed_highp_dmat3</a></td></tr>\n<tr class=\"memdesc:gadac7c040c4810dd52b36fcd09d097400\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gadac7c040c4810dd52b36fcd09d097400\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab462744977beb85fb5c782bc2eea7b15\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab462744977beb85fb5c782bc2eea7b15\"></a>\ntypedef mat&lt; 3, 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab462744977beb85fb5c782bc2eea7b15\">packed_highp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:gab462744977beb85fb5c782bc2eea7b15\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab462744977beb85fb5c782bc2eea7b15\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga49e5a709d098523823b2f824e48672a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga49e5a709d098523823b2f824e48672a6\"></a>\ntypedef mat&lt; 3, 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga49e5a709d098523823b2f824e48672a6\">packed_highp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga49e5a709d098523823b2f824e48672a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga49e5a709d098523823b2f824e48672a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c67b3b0adab71c8680c3d819f1fa9b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2c67b3b0adab71c8680c3d819f1fa9b7\"></a>\ntypedef mat&lt; 3, 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2c67b3b0adab71c8680c3d819f1fa9b7\">packed_highp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga2c67b3b0adab71c8680c3d819f1fa9b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2c67b3b0adab71c8680c3d819f1fa9b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6718822cd7af005a9b5bd6ee282f6ba6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6718822cd7af005a9b5bd6ee282f6ba6\"></a>\ntypedef mat&lt; 4, 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6718822cd7af005a9b5bd6ee282f6ba6\">packed_highp_dmat4</a></td></tr>\n<tr class=\"memdesc:ga6718822cd7af005a9b5bd6ee282f6ba6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6718822cd7af005a9b5bd6ee282f6ba6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga12e39e797fb724a5b51fcbea2513a7da\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga12e39e797fb724a5b51fcbea2513a7da\"></a>\ntypedef mat&lt; 4, 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga12e39e797fb724a5b51fcbea2513a7da\">packed_highp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga12e39e797fb724a5b51fcbea2513a7da\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga12e39e797fb724a5b51fcbea2513a7da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga79c2e9f82e67963c1ecad0ad6d0ec72e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga79c2e9f82e67963c1ecad0ad6d0ec72e\"></a>\ntypedef mat&lt; 4, 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga79c2e9f82e67963c1ecad0ad6d0ec72e\">packed_highp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga79c2e9f82e67963c1ecad0ad6d0ec72e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga79c2e9f82e67963c1ecad0ad6d0ec72e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2df58e03e5afded28707b4f7d077afb4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2df58e03e5afded28707b4f7d077afb4\"></a>\ntypedef mat&lt; 4, 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2df58e03e5afded28707b4f7d077afb4\">packed_highp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga2df58e03e5afded28707b4f7d077afb4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2df58e03e5afded28707b4f7d077afb4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab472b2d917b5e6efd76e8c7dbfbbf9f1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab472b2d917b5e6efd76e8c7dbfbbf9f1\"></a>\ntypedef vec&lt; 1, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab472b2d917b5e6efd76e8c7dbfbbf9f1\">packed_highp_dvec1</a></td></tr>\n<tr class=\"memdesc:gab472b2d917b5e6efd76e8c7dbfbbf9f1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab472b2d917b5e6efd76e8c7dbfbbf9f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b2dc48fa19b684d207d69c6b145eb63\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5b2dc48fa19b684d207d69c6b145eb63\"></a>\ntypedef vec&lt; 2, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5b2dc48fa19b684d207d69c6b145eb63\">packed_highp_dvec2</a></td></tr>\n<tr class=\"memdesc:ga5b2dc48fa19b684d207d69c6b145eb63\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga5b2dc48fa19b684d207d69c6b145eb63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaac6b356ef00154da41aaae7d1549193\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaac6b356ef00154da41aaae7d1549193\"></a>\ntypedef vec&lt; 3, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaac6b356ef00154da41aaae7d1549193\">packed_highp_dvec3</a></td></tr>\n<tr class=\"memdesc:gaaac6b356ef00154da41aaae7d1549193\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaaac6b356ef00154da41aaae7d1549193\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81b5368fe485e2630aa9b44832d592e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga81b5368fe485e2630aa9b44832d592e7\"></a>\ntypedef vec&lt; 4, double, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga81b5368fe485e2630aa9b44832d592e7\">packed_highp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga81b5368fe485e2630aa9b44832d592e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga81b5368fe485e2630aa9b44832d592e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7245acc887a5438f46fd85fdf076bb3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7245acc887a5438f46fd85fdf076bb3b\"></a>\ntypedef vec&lt; 1, int, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7245acc887a5438f46fd85fdf076bb3b\">packed_highp_ivec1</a></td></tr>\n<tr class=\"memdesc:ga7245acc887a5438f46fd85fdf076bb3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga7245acc887a5438f46fd85fdf076bb3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga54f368ec6b514a5aa4f28d40e6f93ef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga54f368ec6b514a5aa4f28d40e6f93ef7\"></a>\ntypedef vec&lt; 2, int, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga54f368ec6b514a5aa4f28d40e6f93ef7\">packed_highp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga54f368ec6b514a5aa4f28d40e6f93ef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga54f368ec6b514a5aa4f28d40e6f93ef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga865a9c7bb22434b1b8c5ac31e164b628\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga865a9c7bb22434b1b8c5ac31e164b628\"></a>\ntypedef vec&lt; 3, int, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga865a9c7bb22434b1b8c5ac31e164b628\">packed_highp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga865a9c7bb22434b1b8c5ac31e164b628\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga865a9c7bb22434b1b8c5ac31e164b628\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6f1b4e3a51c2c051814b60d5d1b8895\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad6f1b4e3a51c2c051814b60d5d1b8895\"></a>\ntypedef vec&lt; 4, int, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad6f1b4e3a51c2c051814b60d5d1b8895\">packed_highp_ivec4</a></td></tr>\n<tr class=\"memdesc:gad6f1b4e3a51c2c051814b60d5d1b8895\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gad6f1b4e3a51c2c051814b60d5d1b8895\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f2d913d8cca2f935b2522964408c0b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2f2d913d8cca2f935b2522964408c0b2\"></a>\ntypedef mat&lt; 2, 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2f2d913d8cca2f935b2522964408c0b2\">packed_highp_mat2</a></td></tr>\n<tr class=\"memdesc:ga2f2d913d8cca2f935b2522964408c0b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2f2d913d8cca2f935b2522964408c0b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga245c12d2daf67feecaa2d3277c8f6661\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga245c12d2daf67feecaa2d3277c8f6661\"></a>\ntypedef mat&lt; 2, 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga245c12d2daf67feecaa2d3277c8f6661\">packed_highp_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga245c12d2daf67feecaa2d3277c8f6661\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga245c12d2daf67feecaa2d3277c8f6661\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga069cc8892aadae144c00f35297617d44\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga069cc8892aadae144c00f35297617d44\"></a>\ntypedef mat&lt; 2, 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga069cc8892aadae144c00f35297617d44\">packed_highp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga069cc8892aadae144c00f35297617d44\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga069cc8892aadae144c00f35297617d44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6904d09b62141d09712b76983892f95b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6904d09b62141d09712b76983892f95b\"></a>\ntypedef mat&lt; 2, 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6904d09b62141d09712b76983892f95b\">packed_highp_mat2x4</a></td></tr>\n<tr class=\"memdesc:ga6904d09b62141d09712b76983892f95b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6904d09b62141d09712b76983892f95b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabdd5fbffe8b8b8a7b33523f25b120dbe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabdd5fbffe8b8b8a7b33523f25b120dbe\"></a>\ntypedef mat&lt; 3, 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabdd5fbffe8b8b8a7b33523f25b120dbe\">packed_highp_mat3</a></td></tr>\n<tr class=\"memdesc:gabdd5fbffe8b8b8a7b33523f25b120dbe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gabdd5fbffe8b8b8a7b33523f25b120dbe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2624719cb251d8de8cad1beaefc3a3f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2624719cb251d8de8cad1beaefc3a3f9\"></a>\ntypedef mat&lt; 3, 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2624719cb251d8de8cad1beaefc3a3f9\">packed_highp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga2624719cb251d8de8cad1beaefc3a3f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2624719cb251d8de8cad1beaefc3a3f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2e07527d678440bf0c20adbeb9177c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf2e07527d678440bf0c20adbeb9177c5\"></a>\ntypedef mat&lt; 3, 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf2e07527d678440bf0c20adbeb9177c5\">packed_highp_mat3x3</a></td></tr>\n<tr class=\"memdesc:gaf2e07527d678440bf0c20adbeb9177c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf2e07527d678440bf0c20adbeb9177c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga72102fa6ac2445aa3bb203128ad52449\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga72102fa6ac2445aa3bb203128ad52449\"></a>\ntypedef mat&lt; 3, 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga72102fa6ac2445aa3bb203128ad52449\">packed_highp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga72102fa6ac2445aa3bb203128ad52449\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga72102fa6ac2445aa3bb203128ad52449\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga253e8379b08d2dc6fe2800b2fb913203\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga253e8379b08d2dc6fe2800b2fb913203\"></a>\ntypedef mat&lt; 4, 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga253e8379b08d2dc6fe2800b2fb913203\">packed_highp_mat4</a></td></tr>\n<tr class=\"memdesc:ga253e8379b08d2dc6fe2800b2fb913203\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga253e8379b08d2dc6fe2800b2fb913203\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae389c2071cf3cdb33e7812c6fd156710\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae389c2071cf3cdb33e7812c6fd156710\"></a>\ntypedef mat&lt; 4, 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae389c2071cf3cdb33e7812c6fd156710\">packed_highp_mat4x2</a></td></tr>\n<tr class=\"memdesc:gae389c2071cf3cdb33e7812c6fd156710\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae389c2071cf3cdb33e7812c6fd156710\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4584f64394bd7123b7a8534741e4916c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4584f64394bd7123b7a8534741e4916c\"></a>\ntypedef mat&lt; 4, 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4584f64394bd7123b7a8534741e4916c\">packed_highp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga4584f64394bd7123b7a8534741e4916c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4584f64394bd7123b7a8534741e4916c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0149fe15668925147e07c94fd2c2d6ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0149fe15668925147e07c94fd2c2d6ae\"></a>\ntypedef mat&lt; 4, 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0149fe15668925147e07c94fd2c2d6ae\">packed_highp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga0149fe15668925147e07c94fd2c2d6ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0149fe15668925147e07c94fd2c2d6ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8c32b53f628a3616aa5061e58d66fe74\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8c32b53f628a3616aa5061e58d66fe74\"></a>\ntypedef vec&lt; 1, uint, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8c32b53f628a3616aa5061e58d66fe74\">packed_highp_uvec1</a></td></tr>\n<tr class=\"memdesc:ga8c32b53f628a3616aa5061e58d66fe74\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga8c32b53f628a3616aa5061e58d66fe74\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab704d4fb15f6f96d70e363d5db7060cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab704d4fb15f6f96d70e363d5db7060cd\"></a>\ntypedef vec&lt; 2, uint, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab704d4fb15f6f96d70e363d5db7060cd\">packed_highp_uvec2</a></td></tr>\n<tr class=\"memdesc:gab704d4fb15f6f96d70e363d5db7060cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gab704d4fb15f6f96d70e363d5db7060cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b570da473fec4619db5aa0dce5133b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0b570da473fec4619db5aa0dce5133b0\"></a>\ntypedef vec&lt; 3, uint, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0b570da473fec4619db5aa0dce5133b0\">packed_highp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga0b570da473fec4619db5aa0dce5133b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga0b570da473fec4619db5aa0dce5133b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa582f38c82aef61dea7aaedf15bb06a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa582f38c82aef61dea7aaedf15bb06a6\"></a>\ntypedef vec&lt; 4, uint, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa582f38c82aef61dea7aaedf15bb06a6\">packed_highp_uvec4</a></td></tr>\n<tr class=\"memdesc:gaa582f38c82aef61dea7aaedf15bb06a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gaa582f38c82aef61dea7aaedf15bb06a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga56473759d2702ee19ab7f91d0017fa70\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga56473759d2702ee19ab7f91d0017fa70\"></a>\ntypedef vec&lt; 1, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga56473759d2702ee19ab7f91d0017fa70\">packed_highp_vec1</a></td></tr>\n<tr class=\"memdesc:ga56473759d2702ee19ab7f91d0017fa70\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga56473759d2702ee19ab7f91d0017fa70\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b8b9475e7c3b16aed13edbc460bbc4d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6b8b9475e7c3b16aed13edbc460bbc4d\"></a>\ntypedef vec&lt; 2, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6b8b9475e7c3b16aed13edbc460bbc4d\">packed_highp_vec2</a></td></tr>\n<tr class=\"memdesc:ga6b8b9475e7c3b16aed13edbc460bbc4d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6b8b9475e7c3b16aed13edbc460bbc4d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3815661df0e2de79beff8168c09adf1e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3815661df0e2de79beff8168c09adf1e\"></a>\ntypedef vec&lt; 3, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3815661df0e2de79beff8168c09adf1e\">packed_highp_vec3</a></td></tr>\n<tr class=\"memdesc:ga3815661df0e2de79beff8168c09adf1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3815661df0e2de79beff8168c09adf1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4015f36bf5a5adb6ac5d45beed959867\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4015f36bf5a5adb6ac5d45beed959867\"></a>\ntypedef vec&lt; 4, float, packed_highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4015f36bf5a5adb6ac5d45beed959867\">packed_highp_vec4</a></td></tr>\n<tr class=\"memdesc:ga4015f36bf5a5adb6ac5d45beed959867\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4015f36bf5a5adb6ac5d45beed959867\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga11581a06fc7bf941fa4d4b6aca29812c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga11581a06fc7bf941fa4d4b6aca29812c\"></a>\ntypedef packed_highp_ivec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga11581a06fc7bf941fa4d4b6aca29812c\">packed_ivec1</a></td></tr>\n<tr class=\"memdesc:ga11581a06fc7bf941fa4d4b6aca29812c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga11581a06fc7bf941fa4d4b6aca29812c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fe4c5f56b8087d773aa90dc88a257a7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1fe4c5f56b8087d773aa90dc88a257a7\"></a>\ntypedef packed_highp_ivec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1fe4c5f56b8087d773aa90dc88a257a7\">packed_ivec2</a></td></tr>\n<tr class=\"memdesc:ga1fe4c5f56b8087d773aa90dc88a257a7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga1fe4c5f56b8087d773aa90dc88a257a7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae157682a7847161787951ba1db4cf325\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae157682a7847161787951ba1db4cf325\"></a>\ntypedef packed_highp_ivec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae157682a7847161787951ba1db4cf325\">packed_ivec3</a></td></tr>\n<tr class=\"memdesc:gae157682a7847161787951ba1db4cf325\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gae157682a7847161787951ba1db4cf325\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac228b70372abd561340d5f926a7c1778\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac228b70372abd561340d5f926a7c1778\"></a>\ntypedef packed_highp_ivec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac228b70372abd561340d5f926a7c1778\">packed_ivec4</a></td></tr>\n<tr class=\"memdesc:gac228b70372abd561340d5f926a7c1778\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gac228b70372abd561340d5f926a7c1778\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae3c8750f53259ece334d3aa3b3649a40\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae3c8750f53259ece334d3aa3b3649a40\"></a>\ntypedef vec&lt; 1, bool, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae3c8750f53259ece334d3aa3b3649a40\">packed_lowp_bvec1</a></td></tr>\n<tr class=\"memdesc:gae3c8750f53259ece334d3aa3b3649a40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae3c8750f53259ece334d3aa3b3649a40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac969befedbda69eb78d4e23f751fdbee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac969befedbda69eb78d4e23f751fdbee\"></a>\ntypedef vec&lt; 2, bool, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac969befedbda69eb78d4e23f751fdbee\">packed_lowp_bvec2</a></td></tr>\n<tr class=\"memdesc:gac969befedbda69eb78d4e23f751fdbee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gac969befedbda69eb78d4e23f751fdbee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c20adbe1409e3fe4544677a7f6fe954\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7c20adbe1409e3fe4544677a7f6fe954\"></a>\ntypedef vec&lt; 3, bool, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7c20adbe1409e3fe4544677a7f6fe954\">packed_lowp_bvec3</a></td></tr>\n<tr class=\"memdesc:ga7c20adbe1409e3fe4544677a7f6fe954\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga7c20adbe1409e3fe4544677a7f6fe954\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae473587cff3092edc0877fc691c26a0b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae473587cff3092edc0877fc691c26a0b\"></a>\ntypedef vec&lt; 4, bool, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae473587cff3092edc0877fc691c26a0b\">packed_lowp_bvec4</a></td></tr>\n<tr class=\"memdesc:gae473587cff3092edc0877fc691c26a0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gae473587cff3092edc0877fc691c26a0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac93f9b1a35b9de4f456b9f2dfeaf1097\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac93f9b1a35b9de4f456b9f2dfeaf1097\"></a>\ntypedef mat&lt; 2, 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac93f9b1a35b9de4f456b9f2dfeaf1097\">packed_lowp_dmat2</a></td></tr>\n<tr class=\"memdesc:gac93f9b1a35b9de4f456b9f2dfeaf1097\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac93f9b1a35b9de4f456b9f2dfeaf1097\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeeaff6c132ec91ebd21da3a2399548ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaeeaff6c132ec91ebd21da3a2399548ea\"></a>\ntypedef mat&lt; 2, 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaeeaff6c132ec91ebd21da3a2399548ea\">packed_lowp_dmat2x2</a></td></tr>\n<tr class=\"memdesc:gaeeaff6c132ec91ebd21da3a2399548ea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaeeaff6c132ec91ebd21da3a2399548ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ccdcd4846775cbe4f9d12e71d55b5d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2ccdcd4846775cbe4f9d12e71d55b5d2\"></a>\ntypedef mat&lt; 2, 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2ccdcd4846775cbe4f9d12e71d55b5d2\">packed_lowp_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga2ccdcd4846775cbe4f9d12e71d55b5d2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2ccdcd4846775cbe4f9d12e71d55b5d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac870c47d2d9d48503f6c9ee3baec8ce1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac870c47d2d9d48503f6c9ee3baec8ce1\"></a>\ntypedef mat&lt; 2, 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac870c47d2d9d48503f6c9ee3baec8ce1\">packed_lowp_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gac870c47d2d9d48503f6c9ee3baec8ce1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac870c47d2d9d48503f6c9ee3baec8ce1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3894a059eeaacec8791c25de398d9955\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3894a059eeaacec8791c25de398d9955\"></a>\ntypedef mat&lt; 3, 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3894a059eeaacec8791c25de398d9955\">packed_lowp_dmat3</a></td></tr>\n<tr class=\"memdesc:ga3894a059eeaacec8791c25de398d9955\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3894a059eeaacec8791c25de398d9955\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga23ec236950f5859f59197663266b535d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga23ec236950f5859f59197663266b535d\"></a>\ntypedef mat&lt; 3, 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga23ec236950f5859f59197663266b535d\">packed_lowp_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga23ec236950f5859f59197663266b535d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga23ec236950f5859f59197663266b535d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"></a>\ntypedef mat&lt; 3, 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4a7c7d8c3a663d0ec2a858cbfa14e54c\">packed_lowp_dmat3x3</a></td></tr>\n<tr class=\"memdesc:ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4a7c7d8c3a663d0ec2a858cbfa14e54c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8fc0e66da83599071b7ec17510686cd9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8fc0e66da83599071b7ec17510686cd9\"></a>\ntypedef mat&lt; 3, 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8fc0e66da83599071b7ec17510686cd9\">packed_lowp_dmat3x4</a></td></tr>\n<tr class=\"memdesc:ga8fc0e66da83599071b7ec17510686cd9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8fc0e66da83599071b7ec17510686cd9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03e1edf5666c40affe39aee35c87956f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga03e1edf5666c40affe39aee35c87956f\"></a>\ntypedef mat&lt; 4, 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga03e1edf5666c40affe39aee35c87956f\">packed_lowp_dmat4</a></td></tr>\n<tr class=\"memdesc:ga03e1edf5666c40affe39aee35c87956f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga03e1edf5666c40affe39aee35c87956f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39658fb13369db869d363684bd8399c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga39658fb13369db869d363684bd8399c0\"></a>\ntypedef mat&lt; 4, 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga39658fb13369db869d363684bd8399c0\">packed_lowp_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga39658fb13369db869d363684bd8399c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga39658fb13369db869d363684bd8399c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30b0351eebc18c6056101359bdd3a359\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga30b0351eebc18c6056101359bdd3a359\"></a>\ntypedef mat&lt; 4, 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga30b0351eebc18c6056101359bdd3a359\">packed_lowp_dmat4x3</a></td></tr>\n<tr class=\"memdesc:ga30b0351eebc18c6056101359bdd3a359\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga30b0351eebc18c6056101359bdd3a359\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0294d4c45151425c86a11deee7693c0e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0294d4c45151425c86a11deee7693c0e\"></a>\ntypedef mat&lt; 4, 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0294d4c45151425c86a11deee7693c0e\">packed_lowp_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga0294d4c45151425c86a11deee7693c0e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0294d4c45151425c86a11deee7693c0e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga054050e9d4e78d81db0e6d1573b1c624\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga054050e9d4e78d81db0e6d1573b1c624\"></a>\ntypedef vec&lt; 1, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga054050e9d4e78d81db0e6d1573b1c624\">packed_lowp_dvec1</a></td></tr>\n<tr class=\"memdesc:ga054050e9d4e78d81db0e6d1573b1c624\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga054050e9d4e78d81db0e6d1573b1c624\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc19938ddb204bfcb4d9ef35b1e2bf93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadc19938ddb204bfcb4d9ef35b1e2bf93\"></a>\ntypedef vec&lt; 2, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadc19938ddb204bfcb4d9ef35b1e2bf93\">packed_lowp_dvec2</a></td></tr>\n<tr class=\"memdesc:gadc19938ddb204bfcb4d9ef35b1e2bf93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gadc19938ddb204bfcb4d9ef35b1e2bf93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9189210cabd6651a5e14a4c46fb20598\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9189210cabd6651a5e14a4c46fb20598\"></a>\ntypedef vec&lt; 3, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9189210cabd6651a5e14a4c46fb20598\">packed_lowp_dvec3</a></td></tr>\n<tr class=\"memdesc:ga9189210cabd6651a5e14a4c46fb20598\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9189210cabd6651a5e14a4c46fb20598\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga262dafd0c001c3a38d1cc91d024ca738\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga262dafd0c001c3a38d1cc91d024ca738\"></a>\ntypedef vec&lt; 4, double, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga262dafd0c001c3a38d1cc91d024ca738\">packed_lowp_dvec4</a></td></tr>\n<tr class=\"memdesc:ga262dafd0c001c3a38d1cc91d024ca738\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga262dafd0c001c3a38d1cc91d024ca738\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf22b77f1cf3e73b8b1dddfe7f959357c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf22b77f1cf3e73b8b1dddfe7f959357c\"></a>\ntypedef vec&lt; 1, int, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf22b77f1cf3e73b8b1dddfe7f959357c\">packed_lowp_ivec1</a></td></tr>\n<tr class=\"memdesc:gaf22b77f1cf3e73b8b1dddfe7f959357c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaf22b77f1cf3e73b8b1dddfe7f959357c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52635859f5ef660ab999d22c11b7867f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga52635859f5ef660ab999d22c11b7867f\"></a>\ntypedef vec&lt; 2, int, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga52635859f5ef660ab999d22c11b7867f\">packed_lowp_ivec2</a></td></tr>\n<tr class=\"memdesc:ga52635859f5ef660ab999d22c11b7867f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga52635859f5ef660ab999d22c11b7867f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga98c9d122a959e9f3ce10a5623c310f5d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga98c9d122a959e9f3ce10a5623c310f5d\"></a>\ntypedef vec&lt; 3, int, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga98c9d122a959e9f3ce10a5623c310f5d\">packed_lowp_ivec3</a></td></tr>\n<tr class=\"memdesc:ga98c9d122a959e9f3ce10a5623c310f5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga98c9d122a959e9f3ce10a5623c310f5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga931731b8ae3b54c7ecc221509dae96bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga931731b8ae3b54c7ecc221509dae96bc\"></a>\ntypedef vec&lt; 4, int, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga931731b8ae3b54c7ecc221509dae96bc\">packed_lowp_ivec4</a></td></tr>\n<tr class=\"memdesc:ga931731b8ae3b54c7ecc221509dae96bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga931731b8ae3b54c7ecc221509dae96bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70dcb9ef0b24e832772a7405efa9669a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga70dcb9ef0b24e832772a7405efa9669a\"></a>\ntypedef mat&lt; 2, 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga70dcb9ef0b24e832772a7405efa9669a\">packed_lowp_mat2</a></td></tr>\n<tr class=\"memdesc:ga70dcb9ef0b24e832772a7405efa9669a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga70dcb9ef0b24e832772a7405efa9669a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac70667c7642ec8d50245e6e6936a3927\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac70667c7642ec8d50245e6e6936a3927\"></a>\ntypedef mat&lt; 2, 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac70667c7642ec8d50245e6e6936a3927\">packed_lowp_mat2x2</a></td></tr>\n<tr class=\"memdesc:gac70667c7642ec8d50245e6e6936a3927\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gac70667c7642ec8d50245e6e6936a3927\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e7df5a11e1be27bc29a4c0d3956f234\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3e7df5a11e1be27bc29a4c0d3956f234\"></a>\ntypedef mat&lt; 2, 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3e7df5a11e1be27bc29a4c0d3956f234\">packed_lowp_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga3e7df5a11e1be27bc29a4c0d3956f234\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3e7df5a11e1be27bc29a4c0d3956f234\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea9c555e669dc56c45d95dcc75d59bf3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaea9c555e669dc56c45d95dcc75d59bf3\"></a>\ntypedef mat&lt; 2, 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaea9c555e669dc56c45d95dcc75d59bf3\">packed_lowp_mat2x4</a></td></tr>\n<tr class=\"memdesc:gaea9c555e669dc56c45d95dcc75d59bf3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaea9c555e669dc56c45d95dcc75d59bf3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0d22400969dd223465b2900fecfb4f53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0d22400969dd223465b2900fecfb4f53\"></a>\ntypedef mat&lt; 3, 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0d22400969dd223465b2900fecfb4f53\">packed_lowp_mat3</a></td></tr>\n<tr class=\"memdesc:ga0d22400969dd223465b2900fecfb4f53\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0d22400969dd223465b2900fecfb4f53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga128cd52649621861635fab746df91735\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga128cd52649621861635fab746df91735\"></a>\ntypedef mat&lt; 3, 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga128cd52649621861635fab746df91735\">packed_lowp_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga128cd52649621861635fab746df91735\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga128cd52649621861635fab746df91735\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5adf1802c5375a9dfb1729691bedd94e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5adf1802c5375a9dfb1729691bedd94e\"></a>\ntypedef mat&lt; 3, 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5adf1802c5375a9dfb1729691bedd94e\">packed_lowp_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga5adf1802c5375a9dfb1729691bedd94e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga5adf1802c5375a9dfb1729691bedd94e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92247ca09fa03c4013ba364f3a0fca7f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga92247ca09fa03c4013ba364f3a0fca7f\"></a>\ntypedef mat&lt; 3, 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga92247ca09fa03c4013ba364f3a0fca7f\">packed_lowp_mat3x4</a></td></tr>\n<tr class=\"memdesc:ga92247ca09fa03c4013ba364f3a0fca7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga92247ca09fa03c4013ba364f3a0fca7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a1dd2387725a335413d4c4fee8609c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2a1dd2387725a335413d4c4fee8609c4\"></a>\ntypedef mat&lt; 4, 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2a1dd2387725a335413d4c4fee8609c4\">packed_lowp_mat4</a></td></tr>\n<tr class=\"memdesc:ga2a1dd2387725a335413d4c4fee8609c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2a1dd2387725a335413d4c4fee8609c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f22607dcd090cd280071ccc689f4079\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8f22607dcd090cd280071ccc689f4079\"></a>\ntypedef mat&lt; 4, 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8f22607dcd090cd280071ccc689f4079\">packed_lowp_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga8f22607dcd090cd280071ccc689f4079\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8f22607dcd090cd280071ccc689f4079\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7661d759d6ad218e132e3d051e7b2c6c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7661d759d6ad218e132e3d051e7b2c6c\"></a>\ntypedef mat&lt; 4, 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7661d759d6ad218e132e3d051e7b2c6c\">packed_lowp_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga7661d759d6ad218e132e3d051e7b2c6c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga7661d759d6ad218e132e3d051e7b2c6c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga776f18d1a6e7d399f05d386167dc60f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga776f18d1a6e7d399f05d386167dc60f5\"></a>\ntypedef mat&lt; 4, 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga776f18d1a6e7d399f05d386167dc60f5\">packed_lowp_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga776f18d1a6e7d399f05d386167dc60f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga776f18d1a6e7d399f05d386167dc60f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf111fed760ecce16cb1988807569bee5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf111fed760ecce16cb1988807569bee5\"></a>\ntypedef vec&lt; 1, uint, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf111fed760ecce16cb1988807569bee5\">packed_lowp_uvec1</a></td></tr>\n<tr class=\"memdesc:gaf111fed760ecce16cb1988807569bee5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gaf111fed760ecce16cb1988807569bee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga958210fe245a75b058325d367c951132\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga958210fe245a75b058325d367c951132\"></a>\ntypedef vec&lt; 2, uint, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga958210fe245a75b058325d367c951132\">packed_lowp_uvec2</a></td></tr>\n<tr class=\"memdesc:ga958210fe245a75b058325d367c951132\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga958210fe245a75b058325d367c951132\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga576a3f8372197a56a79dee1c8280f485\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga576a3f8372197a56a79dee1c8280f485\"></a>\ntypedef vec&lt; 3, uint, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga576a3f8372197a56a79dee1c8280f485\">packed_lowp_uvec3</a></td></tr>\n<tr class=\"memdesc:ga576a3f8372197a56a79dee1c8280f485\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga576a3f8372197a56a79dee1c8280f485\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafdd97922b4a2a42cd0c99a13877ff4da\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafdd97922b4a2a42cd0c99a13877ff4da\"></a>\ntypedef vec&lt; 4, uint, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gafdd97922b4a2a42cd0c99a13877ff4da\">packed_lowp_uvec4</a></td></tr>\n<tr class=\"memdesc:gafdd97922b4a2a42cd0c99a13877ff4da\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gafdd97922b4a2a42cd0c99a13877ff4da\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0a6198fe64166a6a61084d43c71518a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0a6198fe64166a6a61084d43c71518a9\"></a>\ntypedef vec&lt; 1, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0a6198fe64166a6a61084d43c71518a9\">packed_lowp_vec1</a></td></tr>\n<tr class=\"memdesc:ga0a6198fe64166a6a61084d43c71518a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0a6198fe64166a6a61084d43c71518a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafbf1c2cce307c5594b165819ed83bf5d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafbf1c2cce307c5594b165819ed83bf5d\"></a>\ntypedef vec&lt; 2, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gafbf1c2cce307c5594b165819ed83bf5d\">packed_lowp_vec2</a></td></tr>\n<tr class=\"memdesc:gafbf1c2cce307c5594b165819ed83bf5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gafbf1c2cce307c5594b165819ed83bf5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a30c137c1f8cce478c28eab0427a570\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3a30c137c1f8cce478c28eab0427a570\"></a>\ntypedef vec&lt; 3, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3a30c137c1f8cce478c28eab0427a570\">packed_lowp_vec3</a></td></tr>\n<tr class=\"memdesc:ga3a30c137c1f8cce478c28eab0427a570\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3a30c137c1f8cce478c28eab0427a570\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3cc94fb8de80bbd8a4aa7a5b206d304a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3cc94fb8de80bbd8a4aa7a5b206d304a\"></a>\ntypedef vec&lt; 4, float, packed_lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3cc94fb8de80bbd8a4aa7a5b206d304a\">packed_lowp_vec4</a></td></tr>\n<tr class=\"memdesc:ga3cc94fb8de80bbd8a4aa7a5b206d304a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga3cc94fb8de80bbd8a4aa7a5b206d304a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd019b43fcf42e1590d45dddaa504a1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadd019b43fcf42e1590d45dddaa504a1a\"></a>\ntypedef packed_highp_mat2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gadd019b43fcf42e1590d45dddaa504a1a\">packed_mat2</a></td></tr>\n<tr class=\"memdesc:gadd019b43fcf42e1590d45dddaa504a1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gadd019b43fcf42e1590d45dddaa504a1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga51eaadcdc292c8750f746a5dc3e6c517\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga51eaadcdc292c8750f746a5dc3e6c517\"></a>\ntypedef packed_highp_mat2x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517\">packed_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga51eaadcdc292c8750f746a5dc3e6c517\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga51eaadcdc292c8750f746a5dc3e6c517\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga301b76a89b8a9625501ca58815017f20\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga301b76a89b8a9625501ca58815017f20\"></a>\ntypedef packed_highp_mat2x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga301b76a89b8a9625501ca58815017f20\">packed_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga301b76a89b8a9625501ca58815017f20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga301b76a89b8a9625501ca58815017f20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac401da1dd9177ad81d7618a2a5541e23\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac401da1dd9177ad81d7618a2a5541e23\"></a>\ntypedef packed_highp_mat2x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gac401da1dd9177ad81d7618a2a5541e23\">packed_mat2x4</a></td></tr>\n<tr class=\"memdesc:gac401da1dd9177ad81d7618a2a5541e23\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gac401da1dd9177ad81d7618a2a5541e23\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bc12b0ab7be8448836711b77cc7b83a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9bc12b0ab7be8448836711b77cc7b83a\"></a>\ntypedef packed_highp_mat3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a\">packed_mat3</a></td></tr>\n<tr class=\"memdesc:ga9bc12b0ab7be8448836711b77cc7b83a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga9bc12b0ab7be8448836711b77cc7b83a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga134f0d99fbd2459c13cd9ebd056509fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga134f0d99fbd2459c13cd9ebd056509fa\"></a>\ntypedef packed_highp_mat3x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa\">packed_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga134f0d99fbd2459c13cd9ebd056509fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga134f0d99fbd2459c13cd9ebd056509fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6c1dbe8cde9fbb231284b01f8aeaaa99\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6c1dbe8cde9fbb231284b01f8aeaaa99\"></a>\ntypedef packed_highp_mat3x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99\">packed_mat3x3</a></td></tr>\n<tr class=\"memdesc:ga6c1dbe8cde9fbb231284b01f8aeaaa99\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga6c1dbe8cde9fbb231284b01f8aeaaa99\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad63515526cccfe88ffa8fe5ed64f95f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad63515526cccfe88ffa8fe5ed64f95f8\"></a>\ntypedef packed_highp_mat3x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8\">packed_mat3x4</a></td></tr>\n<tr class=\"memdesc:gad63515526cccfe88ffa8fe5ed64f95f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gad63515526cccfe88ffa8fe5ed64f95f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c139854e5b04cf08a957dee3b510441\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2c139854e5b04cf08a957dee3b510441\"></a>\ntypedef packed_highp_mat4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2c139854e5b04cf08a957dee3b510441\">packed_mat4</a></td></tr>\n<tr class=\"memdesc:ga2c139854e5b04cf08a957dee3b510441\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga2c139854e5b04cf08a957dee3b510441\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga379c1153f1339bdeaefd592bebf538e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga379c1153f1339bdeaefd592bebf538e8\"></a>\ntypedef packed_highp_mat4x2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga379c1153f1339bdeaefd592bebf538e8\">packed_mat4x2</a></td></tr>\n<tr class=\"memdesc:ga379c1153f1339bdeaefd592bebf538e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga379c1153f1339bdeaefd592bebf538e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab286466e19f7399c8d25089da9400d43\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab286466e19f7399c8d25089da9400d43\"></a>\ntypedef packed_highp_mat4x3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab286466e19f7399c8d25089da9400d43\">packed_mat4x3</a></td></tr>\n<tr class=\"memdesc:gab286466e19f7399c8d25089da9400d43\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gab286466e19f7399c8d25089da9400d43\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga67e7102557d6067bb6ac00d4ad0e1374\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga67e7102557d6067bb6ac00d4ad0e1374\"></a>\ntypedef packed_highp_mat4x4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374\">packed_mat4x4</a></td></tr>\n<tr class=\"memdesc:ga67e7102557d6067bb6ac00d4ad0e1374\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga67e7102557d6067bb6ac00d4ad0e1374\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5546d828d63010a8f9cf81161ad0275a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5546d828d63010a8f9cf81161ad0275a\"></a>\ntypedef vec&lt; 1, bool, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5546d828d63010a8f9cf81161ad0275a\">packed_mediump_bvec1</a></td></tr>\n<tr class=\"memdesc:ga5546d828d63010a8f9cf81161ad0275a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga5546d828d63010a8f9cf81161ad0275a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4c6414a59539e66a242ad4cf4b476b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab4c6414a59539e66a242ad4cf4b476b4\"></a>\ntypedef vec&lt; 2, bool, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab4c6414a59539e66a242ad4cf4b476b4\">packed_mediump_bvec2</a></td></tr>\n<tr class=\"memdesc:gab4c6414a59539e66a242ad4cf4b476b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:gab4c6414a59539e66a242ad4cf4b476b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70147763edff3fe96b03a0b98d6339a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga70147763edff3fe96b03a0b98d6339a2\"></a>\ntypedef vec&lt; 3, bool, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga70147763edff3fe96b03a0b98d6339a2\">packed_mediump_bvec3</a></td></tr>\n<tr class=\"memdesc:ga70147763edff3fe96b03a0b98d6339a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga70147763edff3fe96b03a0b98d6339a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b1620f259595b9da47a6374fc44588a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7b1620f259595b9da47a6374fc44588a\"></a>\ntypedef vec&lt; 4, bool, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga7b1620f259595b9da47a6374fc44588a\">packed_mediump_bvec4</a></td></tr>\n<tr class=\"memdesc:ga7b1620f259595b9da47a6374fc44588a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of bool values. <br /></td></tr>\n<tr class=\"separator:ga7b1620f259595b9da47a6374fc44588a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9d60e32d3fcb51f817046cd881fdbf57\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9d60e32d3fcb51f817046cd881fdbf57\"></a>\ntypedef mat&lt; 2, 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9d60e32d3fcb51f817046cd881fdbf57\">packed_mediump_dmat2</a></td></tr>\n<tr class=\"memdesc:ga9d60e32d3fcb51f817046cd881fdbf57\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9d60e32d3fcb51f817046cd881fdbf57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39e8bb9b70e5694964e8266a21ba534e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga39e8bb9b70e5694964e8266a21ba534e\"></a>\ntypedef mat&lt; 2, 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga39e8bb9b70e5694964e8266a21ba534e\">packed_mediump_dmat2x2</a></td></tr>\n<tr class=\"memdesc:ga39e8bb9b70e5694964e8266a21ba534e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga39e8bb9b70e5694964e8266a21ba534e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8897c6d9adb4140b1c3b0a07b8f0a430\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8897c6d9adb4140b1c3b0a07b8f0a430\"></a>\ntypedef mat&lt; 2, 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8897c6d9adb4140b1c3b0a07b8f0a430\">packed_mediump_dmat2x3</a></td></tr>\n<tr class=\"memdesc:ga8897c6d9adb4140b1c3b0a07b8f0a430\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8897c6d9adb4140b1c3b0a07b8f0a430\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa4126969c765e7faa2ebf6951c22ffb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaa4126969c765e7faa2ebf6951c22ffb\"></a>\ntypedef mat&lt; 2, 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaa4126969c765e7faa2ebf6951c22ffb\">packed_mediump_dmat2x4</a></td></tr>\n<tr class=\"memdesc:gaaa4126969c765e7faa2ebf6951c22ffb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaaa4126969c765e7faa2ebf6951c22ffb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf969eb879c76a5f4576e4a1e10095cf6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf969eb879c76a5f4576e4a1e10095cf6\"></a>\ntypedef mat&lt; 3, 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf969eb879c76a5f4576e4a1e10095cf6\">packed_mediump_dmat3</a></td></tr>\n<tr class=\"memdesc:gaf969eb879c76a5f4576e4a1e10095cf6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf969eb879c76a5f4576e4a1e10095cf6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga86efe91cdaa2864c828a5d6d46356c6a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga86efe91cdaa2864c828a5d6d46356c6a\"></a>\ntypedef mat&lt; 3, 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga86efe91cdaa2864c828a5d6d46356c6a\">packed_mediump_dmat3x2</a></td></tr>\n<tr class=\"memdesc:ga86efe91cdaa2864c828a5d6d46356c6a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga86efe91cdaa2864c828a5d6d46356c6a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf85877d38d8cfbc21d59d939afd72375\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf85877d38d8cfbc21d59d939afd72375\"></a>\ntypedef mat&lt; 3, 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf85877d38d8cfbc21d59d939afd72375\">packed_mediump_dmat3x3</a></td></tr>\n<tr class=\"memdesc:gaf85877d38d8cfbc21d59d939afd72375\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf85877d38d8cfbc21d59d939afd72375\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad5dcaf93df267bc3029174e430e0907f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad5dcaf93df267bc3029174e430e0907f\"></a>\ntypedef mat&lt; 3, 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad5dcaf93df267bc3029174e430e0907f\">packed_mediump_dmat3x4</a></td></tr>\n<tr class=\"memdesc:gad5dcaf93df267bc3029174e430e0907f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad5dcaf93df267bc3029174e430e0907f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b0ee7996651ddd04eaa0c4cdbb66332\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4b0ee7996651ddd04eaa0c4cdbb66332\"></a>\ntypedef mat&lt; 4, 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga4b0ee7996651ddd04eaa0c4cdbb66332\">packed_mediump_dmat4</a></td></tr>\n<tr class=\"memdesc:ga4b0ee7996651ddd04eaa0c4cdbb66332\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga4b0ee7996651ddd04eaa0c4cdbb66332\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9a15514a0631f700de6312b9d5db3a73\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9a15514a0631f700de6312b9d5db3a73\"></a>\ntypedef mat&lt; 4, 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga9a15514a0631f700de6312b9d5db3a73\">packed_mediump_dmat4x2</a></td></tr>\n<tr class=\"memdesc:ga9a15514a0631f700de6312b9d5db3a73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga9a15514a0631f700de6312b9d5db3a73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab5b36cc9caee1bb1c5178fe191bf5713\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab5b36cc9caee1bb1c5178fe191bf5713\"></a>\ntypedef mat&lt; 4, 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab5b36cc9caee1bb1c5178fe191bf5713\">packed_mediump_dmat4x3</a></td></tr>\n<tr class=\"memdesc:gab5b36cc9caee1bb1c5178fe191bf5713\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab5b36cc9caee1bb1c5178fe191bf5713\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga21e86cf2f6c126bacf31b8985db06bd4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga21e86cf2f6c126bacf31b8985db06bd4\"></a>\ntypedef mat&lt; 4, 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga21e86cf2f6c126bacf31b8985db06bd4\">packed_mediump_dmat4x4</a></td></tr>\n<tr class=\"memdesc:ga21e86cf2f6c126bacf31b8985db06bd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga21e86cf2f6c126bacf31b8985db06bd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8920e90ea9c01d9c97e604a938ce2cbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8920e90ea9c01d9c97e604a938ce2cbd\"></a>\ntypedef vec&lt; 1, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8920e90ea9c01d9c97e604a938ce2cbd\">packed_mediump_dvec1</a></td></tr>\n<tr class=\"memdesc:ga8920e90ea9c01d9c97e604a938ce2cbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga8920e90ea9c01d9c97e604a938ce2cbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c754a783b6fcf80374c013371c4dae9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0c754a783b6fcf80374c013371c4dae9\"></a>\ntypedef vec&lt; 2, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga0c754a783b6fcf80374c013371c4dae9\">packed_mediump_dvec2</a></td></tr>\n<tr class=\"memdesc:ga0c754a783b6fcf80374c013371c4dae9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga0c754a783b6fcf80374c013371c4dae9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f18ada6f7cdd8c46db33ba987280fc4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1f18ada6f7cdd8c46db33ba987280fc4\"></a>\ntypedef vec&lt; 3, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1f18ada6f7cdd8c46db33ba987280fc4\">packed_mediump_dvec3</a></td></tr>\n<tr class=\"memdesc:ga1f18ada6f7cdd8c46db33ba987280fc4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga1f18ada6f7cdd8c46db33ba987280fc4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga568b850f1116b667043533cf77826968\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga568b850f1116b667043533cf77826968\"></a>\ntypedef vec&lt; 4, double, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga568b850f1116b667043533cf77826968\">packed_mediump_dvec4</a></td></tr>\n<tr class=\"memdesc:ga568b850f1116b667043533cf77826968\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga568b850f1116b667043533cf77826968\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09507ef020a49517a7bcd50438f05056\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga09507ef020a49517a7bcd50438f05056\"></a>\ntypedef vec&lt; 1, int, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga09507ef020a49517a7bcd50438f05056\">packed_mediump_ivec1</a></td></tr>\n<tr class=\"memdesc:ga09507ef020a49517a7bcd50438f05056\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga09507ef020a49517a7bcd50438f05056\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa891048dddef4627df33809ec726219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaa891048dddef4627df33809ec726219\"></a>\ntypedef vec&lt; 2, int, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaa891048dddef4627df33809ec726219\">packed_mediump_ivec2</a></td></tr>\n<tr class=\"memdesc:gaaa891048dddef4627df33809ec726219\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:gaaa891048dddef4627df33809ec726219\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga06f26d54dca30994eb1fdadb8e69f4a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga06f26d54dca30994eb1fdadb8e69f4a2\"></a>\ntypedef vec&lt; 3, int, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga06f26d54dca30994eb1fdadb8e69f4a2\">packed_mediump_ivec3</a></td></tr>\n<tr class=\"memdesc:ga06f26d54dca30994eb1fdadb8e69f4a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga06f26d54dca30994eb1fdadb8e69f4a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70130dc8ed9c966ec2a221ce586d45d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga70130dc8ed9c966ec2a221ce586d45d8\"></a>\ntypedef vec&lt; 4, int, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga70130dc8ed9c966ec2a221ce586d45d8\">packed_mediump_ivec4</a></td></tr>\n<tr class=\"memdesc:ga70130dc8ed9c966ec2a221ce586d45d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of signed integer numbers. <br /></td></tr>\n<tr class=\"separator:ga70130dc8ed9c966ec2a221ce586d45d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43cd36d430c5187bfdca34a23cb41581\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga43cd36d430c5187bfdca34a23cb41581\"></a>\ntypedef mat&lt; 2, 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga43cd36d430c5187bfdca34a23cb41581\">packed_mediump_mat2</a></td></tr>\n<tr class=\"memdesc:ga43cd36d430c5187bfdca34a23cb41581\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga43cd36d430c5187bfdca34a23cb41581\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2d2a73e662759e301c22b8931ff6a526\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2d2a73e662759e301c22b8931ff6a526\"></a>\ntypedef mat&lt; 2, 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2d2a73e662759e301c22b8931ff6a526\">packed_mediump_mat2x2</a></td></tr>\n<tr class=\"memdesc:ga2d2a73e662759e301c22b8931ff6a526\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga2d2a73e662759e301c22b8931ff6a526\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99049db01faf1e95ed9fb875a47dffe2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga99049db01faf1e95ed9fb875a47dffe2\"></a>\ntypedef mat&lt; 2, 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga99049db01faf1e95ed9fb875a47dffe2\">packed_mediump_mat2x3</a></td></tr>\n<tr class=\"memdesc:ga99049db01faf1e95ed9fb875a47dffe2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga99049db01faf1e95ed9fb875a47dffe2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad43a240533f388ce0504b495d9df3d52\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad43a240533f388ce0504b495d9df3d52\"></a>\ntypedef mat&lt; 2, 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gad43a240533f388ce0504b495d9df3d52\">packed_mediump_mat2x4</a></td></tr>\n<tr class=\"memdesc:gad43a240533f388ce0504b495d9df3d52\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gad43a240533f388ce0504b495d9df3d52\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13a75c6cbd0a411f694bc82486cd1e55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga13a75c6cbd0a411f694bc82486cd1e55\"></a>\ntypedef mat&lt; 3, 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga13a75c6cbd0a411f694bc82486cd1e55\">packed_mediump_mat3</a></td></tr>\n<tr class=\"memdesc:ga13a75c6cbd0a411f694bc82486cd1e55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga13a75c6cbd0a411f694bc82486cd1e55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04cfaf1421284df3c24ea0985dab24e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga04cfaf1421284df3c24ea0985dab24e7\"></a>\ntypedef mat&lt; 3, 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga04cfaf1421284df3c24ea0985dab24e7\">packed_mediump_mat3x2</a></td></tr>\n<tr class=\"memdesc:ga04cfaf1421284df3c24ea0985dab24e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga04cfaf1421284df3c24ea0985dab24e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaa9cea174d342dd9650e3436823cab23\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaaa9cea174d342dd9650e3436823cab23\"></a>\ntypedef mat&lt; 3, 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaaa9cea174d342dd9650e3436823cab23\">packed_mediump_mat3x3</a></td></tr>\n<tr class=\"memdesc:gaaa9cea174d342dd9650e3436823cab23\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaaa9cea174d342dd9650e3436823cab23\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc93a9560593bd32e099c908531305f5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabc93a9560593bd32e099c908531305f5\"></a>\ntypedef mat&lt; 3, 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabc93a9560593bd32e099c908531305f5\">packed_mediump_mat3x4</a></td></tr>\n<tr class=\"memdesc:gabc93a9560593bd32e099c908531305f5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gabc93a9560593bd32e099c908531305f5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae89d72ffc149147f61df701bbc8755bf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae89d72ffc149147f61df701bbc8755bf\"></a>\ntypedef mat&lt; 4, 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gae89d72ffc149147f61df701bbc8755bf\">packed_mediump_mat4</a></td></tr>\n<tr class=\"memdesc:gae89d72ffc149147f61df701bbc8755bf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gae89d72ffc149147f61df701bbc8755bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa458f9d9e0934bae3097e2a373b24707\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa458f9d9e0934bae3097e2a373b24707\"></a>\ntypedef mat&lt; 4, 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa458f9d9e0934bae3097e2a373b24707\">packed_mediump_mat4x2</a></td></tr>\n<tr class=\"memdesc:gaa458f9d9e0934bae3097e2a373b24707\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaa458f9d9e0934bae3097e2a373b24707\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga02ca6255394aa778abaeb0f733c4d2b6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga02ca6255394aa778abaeb0f733c4d2b6\"></a>\ntypedef mat&lt; 4, 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga02ca6255394aa778abaeb0f733c4d2b6\">packed_mediump_mat4x3</a></td></tr>\n<tr class=\"memdesc:ga02ca6255394aa778abaeb0f733c4d2b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga02ca6255394aa778abaeb0f733c4d2b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf304f64c06743c1571401504d3f50259\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf304f64c06743c1571401504d3f50259\"></a>\ntypedef mat&lt; 4, 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaf304f64c06743c1571401504d3f50259\">packed_mediump_mat4x4</a></td></tr>\n<tr class=\"memdesc:gaf304f64c06743c1571401504d3f50259\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gaf304f64c06743c1571401504d3f50259\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c29fb42bab9a4f9b66bc60b2e514a34\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2c29fb42bab9a4f9b66bc60b2e514a34\"></a>\ntypedef vec&lt; 1, uint, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga2c29fb42bab9a4f9b66bc60b2e514a34\">packed_mediump_uvec1</a></td></tr>\n<tr class=\"memdesc:ga2c29fb42bab9a4f9b66bc60b2e514a34\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga2c29fb42bab9a4f9b66bc60b2e514a34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1f95690a78dc12e39da32943243aeef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa1f95690a78dc12e39da32943243aeef\"></a>\ntypedef vec&lt; 2, uint, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaa1f95690a78dc12e39da32943243aeef\">packed_mediump_uvec2</a></td></tr>\n<tr class=\"memdesc:gaa1f95690a78dc12e39da32943243aeef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gaa1f95690a78dc12e39da32943243aeef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ea2bbdbcb0a69242f6d884663c1b0ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga1ea2bbdbcb0a69242f6d884663c1b0ab\"></a>\ntypedef vec&lt; 3, uint, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga1ea2bbdbcb0a69242f6d884663c1b0ab\">packed_mediump_uvec3</a></td></tr>\n<tr class=\"memdesc:ga1ea2bbdbcb0a69242f6d884663c1b0ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga1ea2bbdbcb0a69242f6d884663c1b0ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63a73be86a4f07ea7a7499ab0bfebe45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga63a73be86a4f07ea7a7499ab0bfebe45\"></a>\ntypedef vec&lt; 4, uint, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga63a73be86a4f07ea7a7499ab0bfebe45\">packed_mediump_uvec4</a></td></tr>\n<tr class=\"memdesc:ga63a73be86a4f07ea7a7499ab0bfebe45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga63a73be86a4f07ea7a7499ab0bfebe45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga71d63cead1e113fca0bcdaaa33aad050\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga71d63cead1e113fca0bcdaaa33aad050\"></a>\ntypedef vec&lt; 1, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga71d63cead1e113fca0bcdaaa33aad050\">packed_mediump_vec1</a></td></tr>\n<tr class=\"memdesc:ga71d63cead1e113fca0bcdaaa33aad050\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga71d63cead1e113fca0bcdaaa33aad050\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6844c6f4691d1bf67673240850430948\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6844c6f4691d1bf67673240850430948\"></a>\ntypedef vec&lt; 2, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga6844c6f4691d1bf67673240850430948\">packed_mediump_vec2</a></td></tr>\n<tr class=\"memdesc:ga6844c6f4691d1bf67673240850430948\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga6844c6f4691d1bf67673240850430948\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0eb771b708c5b2205d9b14dd1434fd8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab0eb771b708c5b2205d9b14dd1434fd8\"></a>\ntypedef vec&lt; 3, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab0eb771b708c5b2205d9b14dd1434fd8\">packed_mediump_vec3</a></td></tr>\n<tr class=\"memdesc:gab0eb771b708c5b2205d9b14dd1434fd8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:gab0eb771b708c5b2205d9b14dd1434fd8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga68c9bb24f387b312bae6a0a68e74d95e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga68c9bb24f387b312bae6a0a68e74d95e\"></a>\ntypedef vec&lt; 4, float, packed_mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga68c9bb24f387b312bae6a0a68e74d95e\">packed_mediump_vec4</a></td></tr>\n<tr class=\"memdesc:ga68c9bb24f387b312bae6a0a68e74d95e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. <br /></td></tr>\n<tr class=\"separator:ga68c9bb24f387b312bae6a0a68e74d95e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5621493caac01bdd22ab6be4416b0314\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5621493caac01bdd22ab6be4416b0314\"></a>\ntypedef packed_highp_uvec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga5621493caac01bdd22ab6be4416b0314\">packed_uvec1</a></td></tr>\n<tr class=\"memdesc:ga5621493caac01bdd22ab6be4416b0314\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga5621493caac01bdd22ab6be4416b0314\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabcc33efb4d5e83b8fe4706360e75b932\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabcc33efb4d5e83b8fe4706360e75b932\"></a>\ntypedef packed_highp_uvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gabcc33efb4d5e83b8fe4706360e75b932\">packed_uvec2</a></td></tr>\n<tr class=\"memdesc:gabcc33efb4d5e83b8fe4706360e75b932\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gabcc33efb4d5e83b8fe4706360e75b932\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab96804e99e3a72a35740fec690c79617\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gab96804e99e3a72a35740fec690c79617\"></a>\ntypedef packed_highp_uvec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gab96804e99e3a72a35740fec690c79617\">packed_uvec3</a></td></tr>\n<tr class=\"memdesc:gab96804e99e3a72a35740fec690c79617\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:gab96804e99e3a72a35740fec690c79617\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"></a>\ntypedef packed_highp_uvec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga8e5d92e84ebdbe2480cf96bc17d6e2f2\">packed_uvec4</a></td></tr>\n<tr class=\"memdesc:ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of unsigned integer numbers. <br /></td></tr>\n<tr class=\"separator:ga8e5d92e84ebdbe2480cf96bc17d6e2f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14741e3d9da9ae83765389927f837331\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga14741e3d9da9ae83765389927f837331\"></a>\ntypedef packed_highp_vec1&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga14741e3d9da9ae83765389927f837331\">packed_vec1</a></td></tr>\n<tr class=\"memdesc:ga14741e3d9da9ae83765389927f837331\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1 component vector tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga14741e3d9da9ae83765389927f837331\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3254defa5a8f0ae4b02b45fedba84a66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3254defa5a8f0ae4b02b45fedba84a66\"></a>\ntypedef packed_highp_vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66\">packed_vec2</a></td></tr>\n<tr class=\"memdesc:ga3254defa5a8f0ae4b02b45fedba84a66\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2 components vector tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga3254defa5a8f0ae4b02b45fedba84a66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaccccd090e185450caa28b5b63ad4e8f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaccccd090e185450caa28b5b63ad4e8f0\"></a>\ntypedef packed_highp_vec3&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#gaccccd090e185450caa28b5b63ad4e8f0\">packed_vec3</a></td></tr>\n<tr class=\"memdesc:gaccccd090e185450caa28b5b63ad4e8f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">3 components vector tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:gaccccd090e185450caa28b5b63ad4e8f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga37a0e0bf653169b581c5eea3d547fa5d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga37a0e0bf653169b581c5eea3d547fa5d\"></a>\ntypedef packed_highp_vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d\">packed_vec4</a></td></tr>\n<tr class=\"memdesc:ga37a0e0bf653169b581c5eea3d547fa5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">4 components vector tightly packed in memory of single-precision floating-point numbers. <br /></td></tr>\n<tr class=\"separator:ga37a0e0bf653169b581c5eea3d547fa5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00161.html\" title=\"GLM_GTC_type_aligned \">glm/gtc/type_aligned.hpp</a>&gt; to use the features of this extension. </p>\n<p>Aligned types allowing SIMD optimizations of vectors and matrices types </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00304.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_type_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_type_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00174.html\" title=\"GLM_GTC_type_precision \">glm/gtc/type_precision.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">f32</a></td></tr>\n<tr class=\"memdesc:gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\">More...</a><br /></td></tr>\n<tr class=\"separator:gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab12383ed6ac7595ed6fde4d266c58425\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab12383ed6ac7595ed6fde4d266c58425\">f32mat2</a></td></tr>\n<tr class=\"memdesc:gab12383ed6ac7595ed6fde4d266c58425\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gab12383ed6ac7595ed6fde4d266c58425\">More...</a><br /></td></tr>\n<tr class=\"separator:gab12383ed6ac7595ed6fde4d266c58425\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04100c76f7d55a0dd0983ccf05142bff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">f32mat2x2</a></td></tr>\n<tr class=\"memdesc:ga04100c76f7d55a0dd0983ccf05142bff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04100c76f7d55a0dd0983ccf05142bff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab256cdab5eb582e426d749ae77b5b566\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">f32mat2x3</a></td></tr>\n<tr class=\"memdesc:gab256cdab5eb582e426d749ae77b5b566\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">More...</a><br /></td></tr>\n<tr class=\"separator:gab256cdab5eb582e426d749ae77b5b566\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf512b74c4400b68f9fdf9388b3d6aac8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">f32mat2x4</a></td></tr>\n<tr class=\"memdesc:gaf512b74c4400b68f9fdf9388b3d6aac8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf512b74c4400b68f9fdf9388b3d6aac8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga856f3905ee7cc2e4890a8a1d56c150be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be\">f32mat3</a></td></tr>\n<tr class=\"memdesc:ga856f3905ee7cc2e4890a8a1d56c150be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be\">More...</a><br /></td></tr>\n<tr class=\"separator:ga856f3905ee7cc2e4890a8a1d56c150be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1320a08e14fdff3821241eefab6947e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">f32mat3x2</a></td></tr>\n<tr class=\"memdesc:ga1320a08e14fdff3821241eefab6947e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1320a08e14fdff3821241eefab6947e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65261fa8a21045c8646ddff114a56174\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">f32mat3x3</a></td></tr>\n<tr class=\"memdesc:ga65261fa8a21045c8646ddff114a56174\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">More...</a><br /></td></tr>\n<tr class=\"separator:ga65261fa8a21045c8646ddff114a56174\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab90ade28222f8b861d5ceaf81a3a7f5d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">f32mat3x4</a></td></tr>\n<tr class=\"memdesc:gab90ade28222f8b861d5ceaf81a3a7f5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">More...</a><br /></td></tr>\n<tr class=\"separator:gab90ade28222f8b861d5ceaf81a3a7f5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99d1b85ff99956b33da7e9992aad129a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga99d1b85ff99956b33da7e9992aad129a\">f32mat4</a></td></tr>\n<tr class=\"memdesc:ga99d1b85ff99956b33da7e9992aad129a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga99d1b85ff99956b33da7e9992aad129a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99d1b85ff99956b33da7e9992aad129a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b32ca1e57a4ef91babbc3d35a34ea20\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">f32mat4x2</a></td></tr>\n<tr class=\"memdesc:ga3b32ca1e57a4ef91babbc3d35a34ea20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3b32ca1e57a4ef91babbc3d35a34ea20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga239b96198771b7add8eea7e6b59840c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">f32mat4x3</a></td></tr>\n<tr class=\"memdesc:ga239b96198771b7add8eea7e6b59840c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga239b96198771b7add8eea7e6b59840c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee4da0e9fbd8cfa2f89cb80889719dc3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">f32mat4x4</a></td></tr>\n<tr class=\"memdesc:gaee4da0e9fbd8cfa2f89cb80889719dc3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee4da0e9fbd8cfa2f89cb80889719dc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga38e674196ba411d642be40c47bf33939\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">f32quat</a></td></tr>\n<tr class=\"memdesc:ga38e674196ba411d642be40c47bf33939\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point quaternion.  <a href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">More...</a><br /></td></tr>\n<tr class=\"separator:ga38e674196ba411d642be40c47bf33939\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga701f32ab5b3fb06996b41f5c0d643805\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">f32vec1</a></td></tr>\n<tr class=\"memdesc:ga701f32ab5b3fb06996b41f5c0d643805\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">More...</a><br /></td></tr>\n<tr class=\"separator:ga701f32ab5b3fb06996b41f5c0d643805\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5d6c70e080409a76a257dc55bd8ea2c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">f32vec2</a></td></tr>\n<tr class=\"memdesc:ga5d6c70e080409a76a257dc55bd8ea2c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5d6c70e080409a76a257dc55bd8ea2c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea5c4518e175162e306d2c2b5ef5ac79\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">f32vec3</a></td></tr>\n<tr class=\"memdesc:gaea5c4518e175162e306d2c2b5ef5ac79\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">More...</a><br /></td></tr>\n<tr class=\"separator:gaea5c4518e175162e306d2c2b5ef5ac79\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31c6ca0e074a44007f49a9a3720b18c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">f32vec4</a></td></tr>\n<tr class=\"memdesc:ga31c6ca0e074a44007f49a9a3720b18c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga31c6ca0e074a44007f49a9a3720b18c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1d794d240091678f602e8de225b8d8c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">f64</a></td></tr>\n<tr class=\"memdesc:ga1d794d240091678f602e8de225b8d8c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#ga1d794d240091678f602e8de225b8d8c9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1d794d240091678f602e8de225b8d8c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9771450a54785d13080cdde0fe20c1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad9771450a54785d13080cdde0fe20c1d\">f64mat2</a></td></tr>\n<tr class=\"memdesc:gad9771450a54785d13080cdde0fe20c1d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gad9771450a54785d13080cdde0fe20c1d\">More...</a><br /></td></tr>\n<tr class=\"separator:gad9771450a54785d13080cdde0fe20c1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ec7c4c79e303c053e30729a95fb2c37\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">f64mat2x2</a></td></tr>\n<tr class=\"memdesc:ga9ec7c4c79e303c053e30729a95fb2c37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9ec7c4c79e303c053e30729a95fb2c37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae3ab5719fc4c1e966631dbbcba8d412a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">f64mat2x3</a></td></tr>\n<tr class=\"memdesc:gae3ab5719fc4c1e966631dbbcba8d412a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae3ab5719fc4c1e966631dbbcba8d412a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac87278e0c702ba8afff76316d4eeb769\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">f64mat2x4</a></td></tr>\n<tr class=\"memdesc:gac87278e0c702ba8afff76316d4eeb769\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">More...</a><br /></td></tr>\n<tr class=\"separator:gac87278e0c702ba8afff76316d4eeb769\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9b69181efbf8f37ae934f135137b29c0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga9b69181efbf8f37ae934f135137b29c0\">f64mat3</a></td></tr>\n<tr class=\"memdesc:ga9b69181efbf8f37ae934f135137b29c0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga9b69181efbf8f37ae934f135137b29c0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9b69181efbf8f37ae934f135137b29c0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2473d8bf3f4abf967c4d0e18175be6f7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">f64mat3x2</a></td></tr>\n<tr class=\"memdesc:ga2473d8bf3f4abf967c4d0e18175be6f7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2473d8bf3f4abf967c4d0e18175be6f7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga916c1aed91cf91f7b41399ebe7c6e185\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">f64mat3x3</a></td></tr>\n<tr class=\"memdesc:ga916c1aed91cf91f7b41399ebe7c6e185\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">More...</a><br /></td></tr>\n<tr class=\"separator:ga916c1aed91cf91f7b41399ebe7c6e185\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab239fa9e35b65a67cbaa6ac082f3675\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">f64mat3x4</a></td></tr>\n<tr class=\"memdesc:gaab239fa9e35b65a67cbaa6ac082f3675\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab239fa9e35b65a67cbaa6ac082f3675\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0ecd3f4952536e5ef12702b44d2626fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc\">f64mat4</a></td></tr>\n<tr class=\"memdesc:ga0ecd3f4952536e5ef12702b44d2626fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0ecd3f4952536e5ef12702b44d2626fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab7daf79d6bc06a68bea1c6f5e11b5512\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">f64mat4x2</a></td></tr>\n<tr class=\"memdesc:gab7daf79d6bc06a68bea1c6f5e11b5512\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">More...</a><br /></td></tr>\n<tr class=\"separator:gab7daf79d6bc06a68bea1c6f5e11b5512\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e2e66ffbe341a80bc005ba2b9552110\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">f64mat4x3</a></td></tr>\n<tr class=\"memdesc:ga3e2e66ffbe341a80bc005ba2b9552110\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e2e66ffbe341a80bc005ba2b9552110\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae52e2b7077a9ff928a06ab5ce600b81e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">f64mat4x4</a></td></tr>\n<tr class=\"memdesc:gae52e2b7077a9ff928a06ab5ce600b81e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae52e2b7077a9ff928a06ab5ce600b81e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b114a2f2af0fe1dfeb569c767822940\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">f64quat</a></td></tr>\n<tr class=\"memdesc:ga2b114a2f2af0fe1dfeb569c767822940\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point quaternion.  <a href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b114a2f2af0fe1dfeb569c767822940\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade502df1ce14f837fae7f60a03ddb9b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">f64vec1</a></td></tr>\n<tr class=\"memdesc:gade502df1ce14f837fae7f60a03ddb9b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">More...</a><br /></td></tr>\n<tr class=\"separator:gade502df1ce14f837fae7f60a03ddb9b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc4e1594f9555d919131ee02b17822a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">f64vec2</a></td></tr>\n<tr class=\"memdesc:gadc4e1594f9555d919131ee02b17822a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">More...</a><br /></td></tr>\n<tr class=\"separator:gadc4e1594f9555d919131ee02b17822a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7a1ddca75c5f629173bf4772db7a635\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">f64vec3</a></td></tr>\n<tr class=\"memdesc:gaa7a1ddca75c5f629173bf4772db7a635\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7a1ddca75c5f629173bf4772db7a635\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66e92e57260bdb910609b9a56bf83e97\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">f64vec4</a></td></tr>\n<tr class=\"memdesc:ga66e92e57260bdb910609b9a56bf83e97\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66e92e57260bdb910609b9a56bf83e97\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaacdc525d6f7bddb3ae95d5c311bd06a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">float32</a></td></tr>\n<tr class=\"memdesc:gaacdc525d6f7bddb3ae95d5c311bd06a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar.  <a href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaacdc525d6f7bddb3ae95d5c311bd06a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4947bc8b47c72fceea9bda730ecf603\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">float32_t</a></td></tr>\n<tr class=\"memdesc:gaa4947bc8b47c72fceea9bda730ecf603\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4947bc8b47c72fceea9bda730ecf603\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga232fad1b0d6dcc7c16aabde98b2e2a80\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">float64</a></td></tr>\n<tr class=\"memdesc:ga232fad1b0d6dcc7c16aabde98b2e2a80\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point scalar.  <a href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">More...</a><br /></td></tr>\n<tr class=\"separator:ga232fad1b0d6dcc7c16aabde98b2e2a80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga728366fef72cd96f0a5fa6429f05469e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">float64_t</a></td></tr>\n<tr class=\"memdesc:ga728366fef72cd96f0a5fa6429f05469e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga728366fef72cd96f0a5fa6429f05469e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4541dc2feb2a31d6ecb5a303f3dd3280\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280\">fmat2</a></td></tr>\n<tr class=\"memdesc:ga4541dc2feb2a31d6ecb5a303f3dd3280\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4541dc2feb2a31d6ecb5a303f3dd3280\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3350c93c3275298f940a42875388e4b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">fmat2x2</a></td></tr>\n<tr class=\"memdesc:ga3350c93c3275298f940a42875388e4b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3350c93c3275298f940a42875388e4b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga55a2d2a8eb09b5633668257eb3cad453\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">fmat2x3</a></td></tr>\n<tr class=\"memdesc:ga55a2d2a8eb09b5633668257eb3cad453\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">More...</a><br /></td></tr>\n<tr class=\"separator:ga55a2d2a8eb09b5633668257eb3cad453\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga681381f19f11c9e5ee45cda2c56937ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">fmat2x4</a></td></tr>\n<tr class=\"memdesc:ga681381f19f11c9e5ee45cda2c56937ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga681381f19f11c9e5ee45cda2c56937ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga253d453c20e037730023fea0215cb6f6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga253d453c20e037730023fea0215cb6f6\">fmat3</a></td></tr>\n<tr class=\"memdesc:ga253d453c20e037730023fea0215cb6f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga253d453c20e037730023fea0215cb6f6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga253d453c20e037730023fea0215cb6f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6af54d70d9beb0a7ef992a879e86b04f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">fmat3x2</a></td></tr>\n<tr class=\"memdesc:ga6af54d70d9beb0a7ef992a879e86b04f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6af54d70d9beb0a7ef992a879e86b04f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa07c86650253672a19dbfb898f3265b8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">fmat3x3</a></td></tr>\n<tr class=\"memdesc:gaa07c86650253672a19dbfb898f3265b8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa07c86650253672a19dbfb898f3265b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga44e158af77a670ee1b58c03cda9e1619\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">fmat3x4</a></td></tr>\n<tr class=\"memdesc:ga44e158af77a670ee1b58c03cda9e1619\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">More...</a><br /></td></tr>\n<tr class=\"separator:ga44e158af77a670ee1b58c03cda9e1619\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8cb400c0f4438f2640035d7b9824a0ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca\">fmat4</a></td></tr>\n<tr class=\"memdesc:ga8cb400c0f4438f2640035d7b9824a0ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8cb400c0f4438f2640035d7b9824a0ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8c8aa45aafcc23238edb1d5aeb801774\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">fmat4x2</a></td></tr>\n<tr class=\"memdesc:ga8c8aa45aafcc23238edb1d5aeb801774\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8c8aa45aafcc23238edb1d5aeb801774\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4295048a78bdf46b8a7de77ec665b497\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">fmat4x3</a></td></tr>\n<tr class=\"memdesc:ga4295048a78bdf46b8a7de77ec665b497\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4295048a78bdf46b8a7de77ec665b497\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad01cc6479bde1fd1870f13d3ed9530b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">fmat4x4</a></td></tr>\n<tr class=\"memdesc:gad01cc6479bde1fd1870f13d3ed9530b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">More...</a><br /></td></tr>\n<tr class=\"separator:gad01cc6479bde1fd1870f13d3ed9530b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga98b9ed43cf8c5cf1d354b23c7df9119f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">fvec1</a></td></tr>\n<tr class=\"memdesc:ga98b9ed43cf8c5cf1d354b23c7df9119f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga98b9ed43cf8c5cf1d354b23c7df9119f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24273aa02abaecaab7f160bac437a339\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">fvec2</a></td></tr>\n<tr class=\"memdesc:ga24273aa02abaecaab7f160bac437a339\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">More...</a><br /></td></tr>\n<tr class=\"separator:ga24273aa02abaecaab7f160bac437a339\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga89930533646b30d021759298aa6bf04a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">fvec3</a></td></tr>\n<tr class=\"memdesc:ga89930533646b30d021759298aa6bf04a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga89930533646b30d021759298aa6bf04a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga713c796c54875cf4092d42ff9d9096b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">fvec4</a></td></tr>\n<tr class=\"memdesc:ga713c796c54875cf4092d42ff9d9096b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga713c796c54875cf4092d42ff9d9096b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6906e1ef0b34064b4b675489c5c38725\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6906e1ef0b34064b4b675489c5c38725\">highp_f32</a></td></tr>\n<tr class=\"memdesc:ga6906e1ef0b34064b4b675489c5c38725\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#ga6906e1ef0b34064b4b675489c5c38725\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6906e1ef0b34064b4b675489c5c38725\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga298f7d4d273678d0282812368da27fda\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga298f7d4d273678d0282812368da27fda\">highp_f32mat2</a></td></tr>\n<tr class=\"memdesc:ga298f7d4d273678d0282812368da27fda\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga298f7d4d273678d0282812368da27fda\">More...</a><br /></td></tr>\n<tr class=\"separator:ga298f7d4d273678d0282812368da27fda\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5eb02d92b7d4605a4b7f37ae5cb2968\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968\">highp_f32mat2x2</a></td></tr>\n<tr class=\"memdesc:gae5eb02d92b7d4605a4b7f37ae5cb2968\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968\">More...</a><br /></td></tr>\n<tr class=\"separator:gae5eb02d92b7d4605a4b7f37ae5cb2968\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0aeb5cb001473b08c88175012708a379\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga0aeb5cb001473b08c88175012708a379\">highp_f32mat2x3</a></td></tr>\n<tr class=\"memdesc:ga0aeb5cb001473b08c88175012708a379\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#ga0aeb5cb001473b08c88175012708a379\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0aeb5cb001473b08c88175012708a379\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga88938ee1e7981fa3402e88da6ad74531\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga88938ee1e7981fa3402e88da6ad74531\">highp_f32mat2x4</a></td></tr>\n<tr class=\"memdesc:ga88938ee1e7981fa3402e88da6ad74531\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#ga88938ee1e7981fa3402e88da6ad74531\">More...</a><br /></td></tr>\n<tr class=\"separator:ga88938ee1e7981fa3402e88da6ad74531\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga24f9ef3263b1638564713892cc37981f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga24f9ef3263b1638564713892cc37981f\">highp_f32mat3</a></td></tr>\n<tr class=\"memdesc:ga24f9ef3263b1638564713892cc37981f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga24f9ef3263b1638564713892cc37981f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga24f9ef3263b1638564713892cc37981f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga36537e701456f12c20e73f469cac4967\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga36537e701456f12c20e73f469cac4967\">highp_f32mat3x2</a></td></tr>\n<tr class=\"memdesc:ga36537e701456f12c20e73f469cac4967\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#ga36537e701456f12c20e73f469cac4967\">More...</a><br /></td></tr>\n<tr class=\"separator:ga36537e701456f12c20e73f469cac4967\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab691ae40c37976d268d8cac0096e0e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaab691ae40c37976d268d8cac0096e0e1\">highp_f32mat3x3</a></td></tr>\n<tr class=\"memdesc:gaab691ae40c37976d268d8cac0096e0e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gaab691ae40c37976d268d8cac0096e0e1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab691ae40c37976d268d8cac0096e0e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa5086dbd6efb272d13fc88829330861d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa5086dbd6efb272d13fc88829330861d\">highp_f32mat3x4</a></td></tr>\n<tr class=\"memdesc:gaa5086dbd6efb272d13fc88829330861d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#gaa5086dbd6efb272d13fc88829330861d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa5086dbd6efb272d13fc88829330861d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14c90ca49885723f51d06e295587236f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga14c90ca49885723f51d06e295587236f\">highp_f32mat4</a></td></tr>\n<tr class=\"memdesc:ga14c90ca49885723f51d06e295587236f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga14c90ca49885723f51d06e295587236f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga14c90ca49885723f51d06e295587236f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga602e119c6b246b4f6edcf66845f2aa0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f\">highp_f32mat4x2</a></td></tr>\n<tr class=\"memdesc:ga602e119c6b246b4f6edcf66845f2aa0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga602e119c6b246b4f6edcf66845f2aa0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66bffdd8e5c0d3ef9958bbab9ca1ba59\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59\">highp_f32mat4x3</a></td></tr>\n<tr class=\"memdesc:ga66bffdd8e5c0d3ef9958bbab9ca1ba59\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66bffdd8e5c0d3ef9958bbab9ca1ba59\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1b712b97b2322685fbbed28febe5f84\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf1b712b97b2322685fbbed28febe5f84\">highp_f32mat4x4</a></td></tr>\n<tr class=\"memdesc:gaf1b712b97b2322685fbbed28febe5f84\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gaf1b712b97b2322685fbbed28febe5f84\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf1b712b97b2322685fbbed28febe5f84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4252cf7f5b0e3cd47c3d3badf0ef43b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3\">highp_f32quat</a></td></tr>\n<tr class=\"memdesc:ga4252cf7f5b0e3cd47c3d3badf0ef43b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point quaternion.  <a href=\"a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4252cf7f5b0e3cd47c3d3badf0ef43b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab1b1c9e8667902b78b2c330e4d383a61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab1b1c9e8667902b78b2c330e4d383a61\">highp_f32vec1</a></td></tr>\n<tr class=\"memdesc:gab1b1c9e8667902b78b2c330e4d383a61\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#gab1b1c9e8667902b78b2c330e4d383a61\">More...</a><br /></td></tr>\n<tr class=\"separator:gab1b1c9e8667902b78b2c330e4d383a61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b8ebd4262331e139ff257d7cf2a4b77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77\">highp_f32vec2</a></td></tr>\n<tr class=\"memdesc:ga0b8ebd4262331e139ff257d7cf2a4b77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b8ebd4262331e139ff257d7cf2a4b77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga522775dbcc6d96246a1c5cf02344fd8c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c\">highp_f32vec3</a></td></tr>\n<tr class=\"memdesc:ga522775dbcc6d96246a1c5cf02344fd8c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga522775dbcc6d96246a1c5cf02344fd8c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0f038d4e09862a74f03d102c59eda73e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga0f038d4e09862a74f03d102c59eda73e\">highp_f32vec4</a></td></tr>\n<tr class=\"memdesc:ga0f038d4e09862a74f03d102c59eda73e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga0f038d4e09862a74f03d102c59eda73e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0f038d4e09862a74f03d102c59eda73e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga51d5266017d88f62737c1973923a7cf4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga51d5266017d88f62737c1973923a7cf4\">highp_f64</a></td></tr>\n<tr class=\"memdesc:ga51d5266017d88f62737c1973923a7cf4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#ga51d5266017d88f62737c1973923a7cf4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga51d5266017d88f62737c1973923a7cf4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf7adb92ce8de0afaff01436b039fd924\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf7adb92ce8de0afaff01436b039fd924\">highp_f64mat2</a></td></tr>\n<tr class=\"memdesc:gaf7adb92ce8de0afaff01436b039fd924\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gaf7adb92ce8de0afaff01436b039fd924\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf7adb92ce8de0afaff01436b039fd924\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga773ea237a051827cfc20de960bc73ff0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga773ea237a051827cfc20de960bc73ff0\">highp_f64mat2x2</a></td></tr>\n<tr class=\"memdesc:ga773ea237a051827cfc20de960bc73ff0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga773ea237a051827cfc20de960bc73ff0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga773ea237a051827cfc20de960bc73ff0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8342c7469384c6d769cacc9e309278d9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8342c7469384c6d769cacc9e309278d9\">highp_f64mat2x3</a></td></tr>\n<tr class=\"memdesc:ga8342c7469384c6d769cacc9e309278d9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#ga8342c7469384c6d769cacc9e309278d9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8342c7469384c6d769cacc9e309278d9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a67a7440b9c0d1538533540f99036a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5a67a7440b9c0d1538533540f99036a5\">highp_f64mat2x4</a></td></tr>\n<tr class=\"memdesc:ga5a67a7440b9c0d1538533540f99036a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#ga5a67a7440b9c0d1538533540f99036a5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5a67a7440b9c0d1538533540f99036a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga609bf0ace941d6ab1bb2f9522a04e546\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546\">highp_f64mat3</a></td></tr>\n<tr class=\"memdesc:ga609bf0ace941d6ab1bb2f9522a04e546\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546\">More...</a><br /></td></tr>\n<tr class=\"separator:ga609bf0ace941d6ab1bb2f9522a04e546\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5bdbfb4ce7d05ce1e1b663f50be17e8a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a\">highp_f64mat3x2</a></td></tr>\n<tr class=\"memdesc:ga5bdbfb4ce7d05ce1e1b663f50be17e8a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5bdbfb4ce7d05ce1e1b663f50be17e8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c2cadb9b85cc7e0d125db21ca19dea4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4\">highp_f64mat3x3</a></td></tr>\n<tr class=\"memdesc:ga7c2cadb9b85cc7e0d125db21ca19dea4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c2cadb9b85cc7e0d125db21ca19dea4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad310b1dddeec9ec837a104e7db8de580\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad310b1dddeec9ec837a104e7db8de580\">highp_f64mat3x4</a></td></tr>\n<tr class=\"memdesc:gad310b1dddeec9ec837a104e7db8de580\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#gad310b1dddeec9ec837a104e7db8de580\">More...</a><br /></td></tr>\n<tr class=\"separator:gad310b1dddeec9ec837a104e7db8de580\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad308e0ed27d64daa4213fb257fcbd5a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5\">highp_f64mat4</a></td></tr>\n<tr class=\"memdesc:gad308e0ed27d64daa4213fb257fcbd5a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5\">More...</a><br /></td></tr>\n<tr class=\"separator:gad308e0ed27d64daa4213fb257fcbd5a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58c4631421e323e252fc716b6103e38c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga58c4631421e323e252fc716b6103e38c\">highp_f64mat4x2</a></td></tr>\n<tr class=\"memdesc:ga58c4631421e323e252fc716b6103e38c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#ga58c4631421e323e252fc716b6103e38c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58c4631421e323e252fc716b6103e38c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae94823d65648e44d972863c6caa13103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae94823d65648e44d972863c6caa13103\">highp_f64mat4x3</a></td></tr>\n<tr class=\"memdesc:gae94823d65648e44d972863c6caa13103\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#gae94823d65648e44d972863c6caa13103\">More...</a><br /></td></tr>\n<tr class=\"separator:gae94823d65648e44d972863c6caa13103\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09a2374b725c4246d263ee36fb66434c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga09a2374b725c4246d263ee36fb66434c\">highp_f64mat4x4</a></td></tr>\n<tr class=\"memdesc:ga09a2374b725c4246d263ee36fb66434c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga09a2374b725c4246d263ee36fb66434c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga09a2374b725c4246d263ee36fb66434c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafcfdd74a115163af2ce1093551747352\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gafcfdd74a115163af2ce1093551747352\">highp_f64quat</a></td></tr>\n<tr class=\"memdesc:gafcfdd74a115163af2ce1093551747352\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point quaternion.  <a href=\"a00304.html#gafcfdd74a115163af2ce1093551747352\">More...</a><br /></td></tr>\n<tr class=\"separator:gafcfdd74a115163af2ce1093551747352\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62c31b133ceee9984fbee05ac4c434a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga62c31b133ceee9984fbee05ac4c434a9\">highp_f64vec1</a></td></tr>\n<tr class=\"memdesc:ga62c31b133ceee9984fbee05ac4c434a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#ga62c31b133ceee9984fbee05ac4c434a9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga62c31b133ceee9984fbee05ac4c434a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga670ea1b0a1172bc73b1d7c1e0c26cce2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2\">highp_f64vec2</a></td></tr>\n<tr class=\"memdesc:ga670ea1b0a1172bc73b1d7c1e0c26cce2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga670ea1b0a1172bc73b1d7c1e0c26cce2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd1196090ece7a69fb5c3e43a7d4d851\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851\">highp_f64vec3</a></td></tr>\n<tr class=\"memdesc:gacd1196090ece7a69fb5c3e43a7d4d851\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd1196090ece7a69fb5c3e43a7d4d851\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga61185c44c8cc0b25d9a0f67d8a267444\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444\">highp_f64vec4</a></td></tr>\n<tr class=\"memdesc:ga61185c44c8cc0b25d9a0f67d8a267444\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High double-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444\">More...</a><br /></td></tr>\n<tr class=\"separator:ga61185c44c8cc0b25d9a0f67d8a267444\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac5a7f21136e0a78d0a1b9f60ef2f8aea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea\">highp_float32</a></td></tr>\n<tr class=\"memdesc:gac5a7f21136e0a78d0a1b9f60ef2f8aea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea\">More...</a><br /></td></tr>\n<tr class=\"separator:gac5a7f21136e0a78d0a1b9f60ef2f8aea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5376ef18dca9d248897c3363ef5a06b2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5376ef18dca9d248897c3363ef5a06b2\">highp_float32_t</a></td></tr>\n<tr class=\"memdesc:ga5376ef18dca9d248897c3363ef5a06b2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#ga5376ef18dca9d248897c3363ef5a06b2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5376ef18dca9d248897c3363ef5a06b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadbb198a4d7aad82a0f4dc466ef6f6215\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215\">highp_float64</a></td></tr>\n<tr class=\"memdesc:gadbb198a4d7aad82a0f4dc466ef6f6215\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215\">More...</a><br /></td></tr>\n<tr class=\"separator:gadbb198a4d7aad82a0f4dc466ef6f6215\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaeeb0077198cff40e3f48b1108ece139\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaaeeb0077198cff40e3f48b1108ece139\">highp_float64_t</a></td></tr>\n<tr class=\"memdesc:gaaeeb0077198cff40e3f48b1108ece139\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#gaaeeb0077198cff40e3f48b1108ece139\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaeeb0077198cff40e3f48b1108ece139\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae98c88d9a7befa9b5877f49176225535\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae98c88d9a7befa9b5877f49176225535\">highp_fmat2</a></td></tr>\n<tr class=\"memdesc:gae98c88d9a7befa9b5877f49176225535\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gae98c88d9a7befa9b5877f49176225535\">More...</a><br /></td></tr>\n<tr class=\"separator:gae98c88d9a7befa9b5877f49176225535\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga28635abcddb2f3e92c33c3f0fcc682ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad\">highp_fmat2x2</a></td></tr>\n<tr class=\"memdesc:ga28635abcddb2f3e92c33c3f0fcc682ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga28635abcddb2f3e92c33c3f0fcc682ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacf111095594996fef29067b2454fccad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacf111095594996fef29067b2454fccad\">highp_fmat2x3</a></td></tr>\n<tr class=\"memdesc:gacf111095594996fef29067b2454fccad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#gacf111095594996fef29067b2454fccad\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf111095594996fef29067b2454fccad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4920a1536f161f7ded1d6909b7fef0d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2\">highp_fmat2x4</a></td></tr>\n<tr class=\"memdesc:ga4920a1536f161f7ded1d6909b7fef0d2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4920a1536f161f7ded1d6909b7fef0d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaed2dc69e0d507d4191092dbd44b3eb75\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75\">highp_fmat3</a></td></tr>\n<tr class=\"memdesc:gaed2dc69e0d507d4191092dbd44b3eb75\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75\">More...</a><br /></td></tr>\n<tr class=\"separator:gaed2dc69e0d507d4191092dbd44b3eb75\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae54e4d1aeb5a0f0c64822e6f1b299e19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19\">highp_fmat3x2</a></td></tr>\n<tr class=\"memdesc:gae54e4d1aeb5a0f0c64822e6f1b299e19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19\">More...</a><br /></td></tr>\n<tr class=\"separator:gae54e4d1aeb5a0f0c64822e6f1b299e19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa5b44d3ef6efcf33f44876673a7a936e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e\">highp_fmat3x3</a></td></tr>\n<tr class=\"memdesc:gaa5b44d3ef6efcf33f44876673a7a936e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa5b44d3ef6efcf33f44876673a7a936e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga961fac2a885907ffcf4d40daac6615c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga961fac2a885907ffcf4d40daac6615c5\">highp_fmat3x4</a></td></tr>\n<tr class=\"memdesc:ga961fac2a885907ffcf4d40daac6615c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#ga961fac2a885907ffcf4d40daac6615c5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga961fac2a885907ffcf4d40daac6615c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf28443ce0cc0959077ec39b21f32c39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gabf28443ce0cc0959077ec39b21f32c39\">highp_fmat4</a></td></tr>\n<tr class=\"memdesc:gabf28443ce0cc0959077ec39b21f32c39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gabf28443ce0cc0959077ec39b21f32c39\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf28443ce0cc0959077ec39b21f32c39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga076961cf2d120c7168b957cb2ed107b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga076961cf2d120c7168b957cb2ed107b3\">highp_fmat4x2</a></td></tr>\n<tr class=\"memdesc:ga076961cf2d120c7168b957cb2ed107b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#ga076961cf2d120c7168b957cb2ed107b3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga076961cf2d120c7168b957cb2ed107b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae406ec670f64170a7437b5e302eeb2cb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae406ec670f64170a7437b5e302eeb2cb\">highp_fmat4x3</a></td></tr>\n<tr class=\"memdesc:gae406ec670f64170a7437b5e302eeb2cb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#gae406ec670f64170a7437b5e302eeb2cb\">More...</a><br /></td></tr>\n<tr class=\"separator:gae406ec670f64170a7437b5e302eeb2cb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee80c7cd3caa0f2635058656755f6f69\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaee80c7cd3caa0f2635058656755f6f69\">highp_fmat4x4</a></td></tr>\n<tr class=\"memdesc:gaee80c7cd3caa0f2635058656755f6f69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gaee80c7cd3caa0f2635058656755f6f69\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee80c7cd3caa0f2635058656755f6f69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1040342c4efdedc8f90e6267db8d41c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa1040342c4efdedc8f90e6267db8d41c\">highp_fvec1</a></td></tr>\n<tr class=\"memdesc:gaa1040342c4efdedc8f90e6267db8d41c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#gaa1040342c4efdedc8f90e6267db8d41c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa1040342c4efdedc8f90e6267db8d41c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c0d196f5fa79f7e892a2f323a0be1ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae\">highp_fvec2</a></td></tr>\n<tr class=\"memdesc:ga7c0d196f5fa79f7e892a2f323a0be1ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High Single-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c0d196f5fa79f7e892a2f323a0be1ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6ef77413883f48d6b53b4169b25edbd0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6ef77413883f48d6b53b4169b25edbd0\">highp_fvec3</a></td></tr>\n<tr class=\"memdesc:ga6ef77413883f48d6b53b4169b25edbd0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High Single-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#ga6ef77413883f48d6b53b4169b25edbd0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6ef77413883f48d6b53b4169b25edbd0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b839abbb44f5102609eed89f6ed61f7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8b839abbb44f5102609eed89f6ed61f7\">highp_fvec4</a></td></tr>\n<tr class=\"memdesc:ga8b839abbb44f5102609eed89f6ed61f7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High Single-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga8b839abbb44f5102609eed89f6ed61f7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b839abbb44f5102609eed89f6ed61f7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0336abc2604dd2c20c30e036454b64f8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">highp_i16</a></td></tr>\n<tr class=\"memdesc:ga0336abc2604dd2c20c30e036454b64f8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer type.  <a href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0336abc2604dd2c20c30e036454b64f8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70fdfcc1fd38084bde83c3f06a8b9f19\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i16, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19\">highp_i16vec1</a></td></tr>\n<tr class=\"memdesc:ga70fdfcc1fd38084bde83c3f06a8b9f19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer scalar type.  <a href=\"a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga70fdfcc1fd38084bde83c3f06a8b9f19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7db3ad10947cf70cae6474d05ebd227\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i16, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa7db3ad10947cf70cae6474d05ebd227\">highp_i16vec2</a></td></tr>\n<tr class=\"memdesc:gaa7db3ad10947cf70cae6474d05ebd227\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer vector of 2 components type.  <a href=\"a00304.html#gaa7db3ad10947cf70cae6474d05ebd227\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7db3ad10947cf70cae6474d05ebd227\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5609c8fa2b7eac3dec337d321cb0ca96\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i16, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96\">highp_i16vec3</a></td></tr>\n<tr class=\"memdesc:ga5609c8fa2b7eac3dec337d321cb0ca96\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5609c8fa2b7eac3dec337d321cb0ca96\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a18659438828f91ccca28f1a1e067b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i16, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7a18659438828f91ccca28f1a1e067b4\">highp_i16vec4</a></td></tr>\n<tr class=\"memdesc:ga7a18659438828f91ccca28f1a1e067b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer vector of 4 components type.  <a href=\"a00304.html#ga7a18659438828f91ccca28f1a1e067b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a18659438828f91ccca28f1a1e067b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga727675ac6b5d2fc699520e0059735e25\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">highp_i32</a></td></tr>\n<tr class=\"memdesc:ga727675ac6b5d2fc699520e0059735e25\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer type.  <a href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">More...</a><br /></td></tr>\n<tr class=\"separator:ga727675ac6b5d2fc699520e0059735e25\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6a9d71cc62745302f70422b7dc98755c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6a9d71cc62745302f70422b7dc98755c\">highp_i32vec1</a></td></tr>\n<tr class=\"memdesc:ga6a9d71cc62745302f70422b7dc98755c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer scalar type.  <a href=\"a00304.html#ga6a9d71cc62745302f70422b7dc98755c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6a9d71cc62745302f70422b7dc98755c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9b4579f8e6f3d9b649a965bcb785530\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530\">highp_i32vec2</a></td></tr>\n<tr class=\"memdesc:gaa9b4579f8e6f3d9b649a965bcb785530\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer vector of 2 components type.  <a href=\"a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9b4579f8e6f3d9b649a965bcb785530\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31e070ea3bdee623e6e18a61ba5718b1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1\">highp_i32vec3</a></td></tr>\n<tr class=\"memdesc:ga31e070ea3bdee623e6e18a61ba5718b1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga31e070ea3bdee623e6e18a61ba5718b1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadf70eaaa230aeed5a4c9f4c9c5c55902\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902\">highp_i32vec4</a></td></tr>\n<tr class=\"memdesc:gadf70eaaa230aeed5a4c9f4c9c5c55902\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer vector of 4 components type.  <a href=\"a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902\">More...</a><br /></td></tr>\n<tr class=\"separator:gadf70eaaa230aeed5a4c9f4c9c5c55902\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac25db6d2b1e2a0f351b77ba3409ac4cd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">highp_i64</a></td></tr>\n<tr class=\"memdesc:gac25db6d2b1e2a0f351b77ba3409ac4cd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer type.  <a href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">More...</a><br /></td></tr>\n<tr class=\"separator:gac25db6d2b1e2a0f351b77ba3409ac4cd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabd2fda3cd208acf5a370ec9b5b3c58d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4\">highp_i64vec1</a></td></tr>\n<tr class=\"memdesc:gabd2fda3cd208acf5a370ec9b5b3c58d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer scalar type.  <a href=\"a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4\">More...</a><br /></td></tr>\n<tr class=\"separator:gabd2fda3cd208acf5a370ec9b5b3c58d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9d1903cb20899966e8ebe0670889a5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad9d1903cb20899966e8ebe0670889a5f\">highp_i64vec2</a></td></tr>\n<tr class=\"memdesc:gad9d1903cb20899966e8ebe0670889a5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer vector of 2 components type.  <a href=\"a00304.html#gad9d1903cb20899966e8ebe0670889a5f\">More...</a><br /></td></tr>\n<tr class=\"separator:gad9d1903cb20899966e8ebe0670889a5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62324224b9c6cce9c6b4db96bb704a8a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a\">highp_i64vec3</a></td></tr>\n<tr class=\"memdesc:ga62324224b9c6cce9c6b4db96bb704a8a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga62324224b9c6cce9c6b4db96bb704a8a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad23b1be9b3bf20352089a6b738f0ebba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad23b1be9b3bf20352089a6b738f0ebba\">highp_i64vec4</a></td></tr>\n<tr class=\"memdesc:gad23b1be9b3bf20352089a6b738f0ebba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer vector of 4 components type.  <a href=\"a00304.html#gad23b1be9b3bf20352089a6b738f0ebba\">More...</a><br /></td></tr>\n<tr class=\"separator:gad23b1be9b3bf20352089a6b738f0ebba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb88796f2d08ef253d0345aff20c3aee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">highp_i8</a></td></tr>\n<tr class=\"memdesc:gacb88796f2d08ef253d0345aff20c3aee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer type.  <a href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">More...</a><br /></td></tr>\n<tr class=\"separator:gacb88796f2d08ef253d0345aff20c3aee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1d8c10949691b0fd990253476f47beb3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i8, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1d8c10949691b0fd990253476f47beb3\">highp_i8vec1</a></td></tr>\n<tr class=\"memdesc:ga1d8c10949691b0fd990253476f47beb3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer scalar type.  <a href=\"a00304.html#ga1d8c10949691b0fd990253476f47beb3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1d8c10949691b0fd990253476f47beb3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50542e4cb9b2f9bec213b66e06145d07\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i8, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga50542e4cb9b2f9bec213b66e06145d07\">highp_i8vec2</a></td></tr>\n<tr class=\"memdesc:ga50542e4cb9b2f9bec213b66e06145d07\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga50542e4cb9b2f9bec213b66e06145d07\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50542e4cb9b2f9bec213b66e06145d07\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8396bfdc081d9113190d0c39c9f67084\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i8, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8396bfdc081d9113190d0c39c9f67084\">highp_i8vec3</a></td></tr>\n<tr class=\"memdesc:ga8396bfdc081d9113190d0c39c9f67084\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga8396bfdc081d9113190d0c39c9f67084\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8396bfdc081d9113190d0c39c9f67084\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4824e3ddf6e608117dfe4809430737b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i8, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4824e3ddf6e608117dfe4809430737b4\">highp_i8vec4</a></td></tr>\n<tr class=\"memdesc:ga4824e3ddf6e608117dfe4809430737b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer vector of 4 components type.  <a href=\"a00304.html#ga4824e3ddf6e608117dfe4809430737b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4824e3ddf6e608117dfe4809430737b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5fde0fa4a3852a9dd5d637a92ee74718\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">highp_int16</a></td></tr>\n<tr class=\"memdesc:ga5fde0fa4a3852a9dd5d637a92ee74718\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer type.  <a href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5fde0fa4a3852a9dd5d637a92ee74718\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacaea06d0a79ef3172e887a7a6ba434ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">highp_int16_t</a></td></tr>\n<tr class=\"memdesc:gacaea06d0a79ef3172e887a7a6ba434ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer type.  <a href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">More...</a><br /></td></tr>\n<tr class=\"separator:gacaea06d0a79ef3172e887a7a6ba434ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga84ed04b4e0de18c977e932d617e7c223\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">highp_int32</a></td></tr>\n<tr class=\"memdesc:ga84ed04b4e0de18c977e932d617e7c223\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer type.  <a href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">More...</a><br /></td></tr>\n<tr class=\"separator:ga84ed04b4e0de18c977e932d617e7c223\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c71c8bd9e2fe7d2e93ca250d8b6157f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">highp_int32_t</a></td></tr>\n<tr class=\"memdesc:ga2c71c8bd9e2fe7d2e93ca250d8b6157f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer type.  <a href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c71c8bd9e2fe7d2e93ca250d8b6157f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga226a8d52b4e3f77aaa6231135e886aac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">highp_int64</a></td></tr>\n<tr class=\"memdesc:ga226a8d52b4e3f77aaa6231135e886aac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer type.  <a href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga226a8d52b4e3f77aaa6231135e886aac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73c6abb280a45feeff60f9accaee91f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">highp_int64_t</a></td></tr>\n<tr class=\"memdesc:ga73c6abb280a45feeff60f9accaee91f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer type.  <a href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga73c6abb280a45feeff60f9accaee91f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad0549c902a96a7164e4ac858d5f39dbf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">highp_int8</a></td></tr>\n<tr class=\"memdesc:gad0549c902a96a7164e4ac858d5f39dbf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer type.  <a href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">More...</a><br /></td></tr>\n<tr class=\"separator:gad0549c902a96a7164e4ac858d5f39dbf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1085c50dd8fbeb5e7e609b1c127492a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">highp_int8_t</a></td></tr>\n<tr class=\"memdesc:ga1085c50dd8fbeb5e7e609b1c127492a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer type.  <a href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1085c50dd8fbeb5e7e609b1c127492a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e62c883d13f47015f3b70ed88751369\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">highp_u16</a></td></tr>\n<tr class=\"memdesc:ga8e62c883d13f47015f3b70ed88751369\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8e62c883d13f47015f3b70ed88751369\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad064202b4cf9a2972475c03de657cb39\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u16, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad064202b4cf9a2972475c03de657cb39\">highp_u16vec1</a></td></tr>\n<tr class=\"memdesc:gad064202b4cf9a2972475c03de657cb39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer scalar type.  <a href=\"a00304.html#gad064202b4cf9a2972475c03de657cb39\">More...</a><br /></td></tr>\n<tr class=\"separator:gad064202b4cf9a2972475c03de657cb39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga791b15ceb3f1e09d1a0ec6f3057ca159\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u16, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159\">highp_u16vec2</a></td></tr>\n<tr class=\"memdesc:ga791b15ceb3f1e09d1a0ec6f3057ca159\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159\">More...</a><br /></td></tr>\n<tr class=\"separator:ga791b15ceb3f1e09d1a0ec6f3057ca159\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacfd806749008f0ade6ac4bb9dd91082f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u16, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacfd806749008f0ade6ac4bb9dd91082f\">highp_u16vec3</a></td></tr>\n<tr class=\"memdesc:gacfd806749008f0ade6ac4bb9dd91082f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#gacfd806749008f0ade6ac4bb9dd91082f\">More...</a><br /></td></tr>\n<tr class=\"separator:gacfd806749008f0ade6ac4bb9dd91082f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a85a3d54a8a9e14fe7a1f96196c4f61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u16, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61\">highp_u16vec4</a></td></tr>\n<tr class=\"memdesc:ga8a85a3d54a8a9e14fe7a1f96196c4f61\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8a85a3d54a8a9e14fe7a1f96196c4f61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a6f1929464dcc680b16381a4ee5f2cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">highp_u32</a></td></tr>\n<tr class=\"memdesc:ga7a6f1929464dcc680b16381a4ee5f2cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a6f1929464dcc680b16381a4ee5f2cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0e35a565b9036bfc3989f5e23a0792e3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3\">highp_u32vec1</a></td></tr>\n<tr class=\"memdesc:ga0e35a565b9036bfc3989f5e23a0792e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer scalar type.  <a href=\"a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0e35a565b9036bfc3989f5e23a0792e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f256334f83fba4c2d219e414b51df6c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2f256334f83fba4c2d219e414b51df6c\">highp_u32vec2</a></td></tr>\n<tr class=\"memdesc:ga2f256334f83fba4c2d219e414b51df6c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga2f256334f83fba4c2d219e414b51df6c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f256334f83fba4c2d219e414b51df6c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf14d7a50502464e7cbfa074f24684cb1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf14d7a50502464e7cbfa074f24684cb1\">highp_u32vec3</a></td></tr>\n<tr class=\"memdesc:gaf14d7a50502464e7cbfa074f24684cb1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#gaf14d7a50502464e7cbfa074f24684cb1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf14d7a50502464e7cbfa074f24684cb1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga22166f0da65038b447f3c5e534fff1c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u32, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga22166f0da65038b447f3c5e534fff1c2\">highp_u32vec4</a></td></tr>\n<tr class=\"memdesc:ga22166f0da65038b447f3c5e534fff1c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga22166f0da65038b447f3c5e534fff1c2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga22166f0da65038b447f3c5e534fff1c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c181fdf06a309691999926b6690c969\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">highp_u64</a></td></tr>\n<tr class=\"memdesc:ga0c181fdf06a309691999926b6690c969\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0c181fdf06a309691999926b6690c969\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4fe774744852c4d7d069be2e05257ab\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae4fe774744852c4d7d069be2e05257ab\">highp_u64vec1</a></td></tr>\n<tr class=\"memdesc:gae4fe774744852c4d7d069be2e05257ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer scalar type.  <a href=\"a00304.html#gae4fe774744852c4d7d069be2e05257ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gae4fe774744852c4d7d069be2e05257ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78f77b8b2d17b431ac5a68c0b5d7050d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d\">highp_u64vec2</a></td></tr>\n<tr class=\"memdesc:ga78f77b8b2d17b431ac5a68c0b5d7050d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78f77b8b2d17b431ac5a68c0b5d7050d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41bdabea6e589029659331ba47eb78c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga41bdabea6e589029659331ba47eb78c1\">highp_u64vec3</a></td></tr>\n<tr class=\"memdesc:ga41bdabea6e589029659331ba47eb78c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#ga41bdabea6e589029659331ba47eb78c1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga41bdabea6e589029659331ba47eb78c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f15b41aa24b11cc42ad5798c04a2325\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u64, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325\">highp_u64vec4</a></td></tr>\n<tr class=\"memdesc:ga4f15b41aa24b11cc42ad5798c04a2325\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f15b41aa24b11cc42ad5798c04a2325\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd1259f3a9e8d2a9df5be2d74322ef9c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">highp_u8</a></td></tr>\n<tr class=\"memdesc:gacd1259f3a9e8d2a9df5be2d74322ef9c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd1259f3a9e8d2a9df5be2d74322ef9c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8408cb76b6550ff01fa0a3024e7b68d2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u8, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2\">highp_u8vec1</a></td></tr>\n<tr class=\"memdesc:ga8408cb76b6550ff01fa0a3024e7b68d2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer scalar type.  <a href=\"a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8408cb76b6550ff01fa0a3024e7b68d2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27585b7c3ab300059f11fcba465f6fd2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u8, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga27585b7c3ab300059f11fcba465f6fd2\">highp_u8vec2</a></td></tr>\n<tr class=\"memdesc:ga27585b7c3ab300059f11fcba465f6fd2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga27585b7c3ab300059f11fcba465f6fd2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27585b7c3ab300059f11fcba465f6fd2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45721c13b956eb691cbd6c6c1429167a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u8, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga45721c13b956eb691cbd6c6c1429167a\">highp_u8vec3</a></td></tr>\n<tr class=\"memdesc:ga45721c13b956eb691cbd6c6c1429167a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#ga45721c13b956eb691cbd6c6c1429167a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga45721c13b956eb691cbd6c6c1429167a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae0b75ad0fed8c00ddc0b5ce335d31060\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u8, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060\">highp_u8vec4</a></td></tr>\n<tr class=\"memdesc:gae0b75ad0fed8c00ddc0b5ce335d31060\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060\">More...</a><br /></td></tr>\n<tr class=\"separator:gae0b75ad0fed8c00ddc0b5ce335d31060\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga746dc6da204f5622e395f492997dbf57\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">highp_uint16</a></td></tr>\n<tr class=\"memdesc:ga746dc6da204f5622e395f492997dbf57\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">More...</a><br /></td></tr>\n<tr class=\"separator:ga746dc6da204f5622e395f492997dbf57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacf54c3330ef60aa3d16cb676c7bcb8c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">highp_uint16_t</a></td></tr>\n<tr class=\"memdesc:gacf54c3330ef60aa3d16cb676c7bcb8c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf54c3330ef60aa3d16cb676c7bcb8c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga256b12b650c3f2fb86878fd1c5db8bc3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">highp_uint32</a></td></tr>\n<tr class=\"memdesc:ga256b12b650c3f2fb86878fd1c5db8bc3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga256b12b650c3f2fb86878fd1c5db8bc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae978599c9711ac263ba732d4ac225b0e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">highp_uint32_t</a></td></tr>\n<tr class=\"memdesc:gae978599c9711ac263ba732d4ac225b0e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae978599c9711ac263ba732d4ac225b0e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa38d732f5d4a7bc42a1b43b9d3c141ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">highp_uint64</a></td></tr>\n<tr class=\"memdesc:gaa38d732f5d4a7bc42a1b43b9d3c141ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa38d732f5d4a7bc42a1b43b9d3c141ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa46172d7dc1c7ffe3e78107ff88adf08\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">highp_uint64_t</a></td></tr>\n<tr class=\"memdesc:gaa46172d7dc1c7ffe3e78107ff88adf08\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa46172d7dc1c7ffe3e78107ff88adf08\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga97432f9979e73e66567361fd01e4cffb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">highp_uint8</a></td></tr>\n<tr class=\"memdesc:ga97432f9979e73e66567361fd01e4cffb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga97432f9979e73e66567361fd01e4cffb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac4e00a26a2adb5f2c0a7096810df29e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">highp_uint8_t</a></td></tr>\n<tr class=\"memdesc:gac4e00a26a2adb5f2c0a7096810df29e5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">More...</a><br /></td></tr>\n<tr class=\"separator:gac4e00a26a2adb5f2c0a7096810df29e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3ab5fe184343d394fb6c2723c3ee3699\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">i16</a></td></tr>\n<tr class=\"memdesc:ga3ab5fe184343d394fb6c2723c3ee3699\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit signed integer type.  <a href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3ab5fe184343d394fb6c2723c3ee3699\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe730798732aa7b0647096a004db1b1c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i16, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">i16vec1</a></td></tr>\n<tr class=\"memdesc:gafe730798732aa7b0647096a004db1b1c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit signed integer scalar type.  <a href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">More...</a><br /></td></tr>\n<tr class=\"separator:gafe730798732aa7b0647096a004db1b1c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2996630ba7b10535af8e065cf326f761\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i16, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">i16vec2</a></td></tr>\n<tr class=\"memdesc:ga2996630ba7b10535af8e065cf326f761\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2996630ba7b10535af8e065cf326f761\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae9c90a867a6026b1f6eab00456f3fb8b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i16, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">i16vec3</a></td></tr>\n<tr class=\"memdesc:gae9c90a867a6026b1f6eab00456f3fb8b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit signed integer vector of 3 components type.  <a href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">More...</a><br /></td></tr>\n<tr class=\"separator:gae9c90a867a6026b1f6eab00456f3fb8b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga550831bfc26d1e0101c1cb3d79938c06\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i16, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">i16vec4</a></td></tr>\n<tr class=\"memdesc:ga550831bfc26d1e0101c1cb3d79938c06\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit signed integer vector of 4 components type.  <a href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">More...</a><br /></td></tr>\n<tr class=\"separator:ga550831bfc26d1e0101c1cb3d79938c06\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga96faea43ac5f875d2d3ffbf8d213e3eb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">i32</a></td></tr>\n<tr class=\"memdesc:ga96faea43ac5f875d2d3ffbf8d213e3eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer type.  <a href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga96faea43ac5f875d2d3ffbf8d213e3eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga54b8a4e0f5a7203a821bf8e9c1265bcf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">i32vec1</a></td></tr>\n<tr class=\"memdesc:ga54b8a4e0f5a7203a821bf8e9c1265bcf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer scalar type.  <a href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga54b8a4e0f5a7203a821bf8e9c1265bcf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b44026374982dcd1e52d22bac99247e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">i32vec2</a></td></tr>\n<tr class=\"memdesc:ga8b44026374982dcd1e52d22bac99247e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b44026374982dcd1e52d22bac99247e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f526b5cccef126a2ebcf9bdd890394e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">i32vec3</a></td></tr>\n<tr class=\"memdesc:ga7f526b5cccef126a2ebcf9bdd890394e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f526b5cccef126a2ebcf9bdd890394e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga866a05905c49912309ed1fa5f5980e61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">i32vec4</a></td></tr>\n<tr class=\"memdesc:ga866a05905c49912309ed1fa5f5980e61\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer vector of 4 components type.  <a href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">More...</a><br /></td></tr>\n<tr class=\"separator:ga866a05905c49912309ed1fa5f5980e61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadb997e409103d4da18abd837e636a496\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">i64</a></td></tr>\n<tr class=\"memdesc:gadb997e409103d4da18abd837e636a496\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit signed integer type.  <a href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">More...</a><br /></td></tr>\n<tr class=\"separator:gadb997e409103d4da18abd837e636a496\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b65767f8b5aed1bd1cf86c541662b50\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">i64vec1</a></td></tr>\n<tr class=\"memdesc:ga2b65767f8b5aed1bd1cf86c541662b50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit signed integer scalar type.  <a href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b65767f8b5aed1bd1cf86c541662b50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga48310188e1d0c616bf8d78c92447523b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">i64vec2</a></td></tr>\n<tr class=\"memdesc:ga48310188e1d0c616bf8d78c92447523b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga48310188e1d0c616bf8d78c92447523b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga667948cfe6fb3d6606c750729ec49f77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">i64vec3</a></td></tr>\n<tr class=\"memdesc:ga667948cfe6fb3d6606c750729ec49f77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">More...</a><br /></td></tr>\n<tr class=\"separator:ga667948cfe6fb3d6606c750729ec49f77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4e31c3d9de067029efeb161a44b0232\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">i64vec4</a></td></tr>\n<tr class=\"memdesc:gaa4e31c3d9de067029efeb161a44b0232\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit signed integer vector of 4 components type.  <a href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4e31c3d9de067029efeb161a44b0232\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga302ec977b0c0c3ea245b6c9275495355\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">i8</a></td></tr>\n<tr class=\"memdesc:ga302ec977b0c0c3ea245b6c9275495355\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit signed integer type.  <a href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">More...</a><br /></td></tr>\n<tr class=\"separator:ga302ec977b0c0c3ea245b6c9275495355\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7e80d927ff0a3861ced68dfff8a4020b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i8, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">i8vec1</a></td></tr>\n<tr class=\"memdesc:ga7e80d927ff0a3861ced68dfff8a4020b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit signed integer scalar type.  <a href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7e80d927ff0a3861ced68dfff8a4020b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad06935764d78f43f9d542c784c2212ec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i8, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">i8vec2</a></td></tr>\n<tr class=\"memdesc:gad06935764d78f43f9d542c784c2212ec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit signed integer vector of 2 components type.  <a href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">More...</a><br /></td></tr>\n<tr class=\"separator:gad06935764d78f43f9d542c784c2212ec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a08d36cf7917cd19d081a603d0eae3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i8, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">i8vec3</a></td></tr>\n<tr class=\"memdesc:ga5a08d36cf7917cd19d081a603d0eae3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5a08d36cf7917cd19d081a603d0eae3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4177a44206121dabc8c4ff1c0f544574\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i8, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">i8vec4</a></td></tr>\n<tr class=\"memdesc:ga4177a44206121dabc8c4ff1c0f544574\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit signed integer vector of 4 components type.  <a href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4177a44206121dabc8c4ff1c0f544574\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae8f5e3e964ca2ae240adc2c0d74adede\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">int16_t</a></td></tr>\n<tr class=\"memdesc:gae8f5e3e964ca2ae240adc2c0d74adede\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16 bit signed integer type.  <a href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">More...</a><br /></td></tr>\n<tr class=\"separator:gae8f5e3e964ca2ae240adc2c0d74adede\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga042ef09ff2f0cb24a36f541bcb3a3710\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">int32_t</a></td></tr>\n<tr class=\"memdesc:ga042ef09ff2f0cb24a36f541bcb3a3710\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit signed integer type.  <a href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">More...</a><br /></td></tr>\n<tr class=\"separator:ga042ef09ff2f0cb24a36f541bcb3a3710\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga322a7d7d2c2c68994dc872a33de63c61\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">int64_t</a></td></tr>\n<tr class=\"memdesc:ga322a7d7d2c2c68994dc872a33de63c61\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit signed integer type.  <a href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">More...</a><br /></td></tr>\n<tr class=\"separator:ga322a7d7d2c2c68994dc872a33de63c61\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4bf09d8838a86866b39ee6e109341645\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">int8_t</a></td></tr>\n<tr class=\"memdesc:ga4bf09d8838a86866b39ee6e109341645\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8 bit signed integer type.  <a href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4bf09d8838a86866b39ee6e109341645\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaeea53879fc327293cf3352a409b7867b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">lowp_f32</a></td></tr>\n<tr class=\"memdesc:gaeea53879fc327293cf3352a409b7867b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#gaeea53879fc327293cf3352a409b7867b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeea53879fc327293cf3352a409b7867b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52409bc6d4a2ce3421526c069220d685\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga52409bc6d4a2ce3421526c069220d685\">lowp_f32mat2</a></td></tr>\n<tr class=\"memdesc:ga52409bc6d4a2ce3421526c069220d685\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga52409bc6d4a2ce3421526c069220d685\">More...</a><br /></td></tr>\n<tr class=\"separator:ga52409bc6d4a2ce3421526c069220d685\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1d091b6abfba1772450e1745a06525bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1d091b6abfba1772450e1745a06525bc\">lowp_f32mat2x2</a></td></tr>\n<tr class=\"memdesc:ga1d091b6abfba1772450e1745a06525bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga1d091b6abfba1772450e1745a06525bc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1d091b6abfba1772450e1745a06525bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga961ccb34cd1a5654c772c8709e001dc5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga961ccb34cd1a5654c772c8709e001dc5\">lowp_f32mat2x3</a></td></tr>\n<tr class=\"memdesc:ga961ccb34cd1a5654c772c8709e001dc5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#ga961ccb34cd1a5654c772c8709e001dc5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga961ccb34cd1a5654c772c8709e001dc5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacc6bf0209dda0c7c14851a646071c974\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacc6bf0209dda0c7c14851a646071c974\">lowp_f32mat2x4</a></td></tr>\n<tr class=\"memdesc:gacc6bf0209dda0c7c14851a646071c974\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#gacc6bf0209dda0c7c14851a646071c974\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc6bf0209dda0c7c14851a646071c974\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4187f89f196505b40e63f516139511e5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4187f89f196505b40e63f516139511e5\">lowp_f32mat3</a></td></tr>\n<tr class=\"memdesc:ga4187f89f196505b40e63f516139511e5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga4187f89f196505b40e63f516139511e5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4187f89f196505b40e63f516139511e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac53f9d7ab04eace67adad026092fb1e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac53f9d7ab04eace67adad026092fb1e8\">lowp_f32mat3x2</a></td></tr>\n<tr class=\"memdesc:gac53f9d7ab04eace67adad026092fb1e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#gac53f9d7ab04eace67adad026092fb1e8\">More...</a><br /></td></tr>\n<tr class=\"separator:gac53f9d7ab04eace67adad026092fb1e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga841211b641cff1fcf861bdb14e5e4abc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga841211b641cff1fcf861bdb14e5e4abc\">lowp_f32mat3x3</a></td></tr>\n<tr class=\"memdesc:ga841211b641cff1fcf861bdb14e5e4abc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga841211b641cff1fcf861bdb14e5e4abc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga841211b641cff1fcf861bdb14e5e4abc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga21b1b22dec013a72656e3644baf8a1e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga21b1b22dec013a72656e3644baf8a1e1\">lowp_f32mat3x4</a></td></tr>\n<tr class=\"memdesc:ga21b1b22dec013a72656e3644baf8a1e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#ga21b1b22dec013a72656e3644baf8a1e1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga21b1b22dec013a72656e3644baf8a1e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga766aed2871e6173a81011a877f398f04\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga766aed2871e6173a81011a877f398f04\">lowp_f32mat4</a></td></tr>\n<tr class=\"memdesc:ga766aed2871e6173a81011a877f398f04\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga766aed2871e6173a81011a877f398f04\">More...</a><br /></td></tr>\n<tr class=\"separator:ga766aed2871e6173a81011a877f398f04\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae6f3fcb702a666de07650c149cfa845a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae6f3fcb702a666de07650c149cfa845a\">lowp_f32mat4x2</a></td></tr>\n<tr class=\"memdesc:gae6f3fcb702a666de07650c149cfa845a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#gae6f3fcb702a666de07650c149cfa845a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae6f3fcb702a666de07650c149cfa845a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac21eda58a1475449a5709b412ebd776c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac21eda58a1475449a5709b412ebd776c\">lowp_f32mat4x3</a></td></tr>\n<tr class=\"memdesc:gac21eda58a1475449a5709b412ebd776c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#gac21eda58a1475449a5709b412ebd776c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac21eda58a1475449a5709b412ebd776c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4143d129898f91545948c46859adce44\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4143d129898f91545948c46859adce44\">lowp_f32mat4x4</a></td></tr>\n<tr class=\"memdesc:ga4143d129898f91545948c46859adce44\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga4143d129898f91545948c46859adce44\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4143d129898f91545948c46859adce44\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa3ba60ef8f69c6aeb1629594eaa95347\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347\">lowp_f32quat</a></td></tr>\n<tr class=\"memdesc:gaa3ba60ef8f69c6aeb1629594eaa95347\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point quaternion.  <a href=\"a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3ba60ef8f69c6aeb1629594eaa95347\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga43e5b41c834fcaf4db5a831c0e28128e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e\">lowp_f32vec1</a></td></tr>\n<tr class=\"memdesc:ga43e5b41c834fcaf4db5a831c0e28128e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga43e5b41c834fcaf4db5a831c0e28128e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf3b694b2b8ded7e0b9f07b061917e1a0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0\">lowp_f32vec2</a></td></tr>\n<tr class=\"memdesc:gaf3b694b2b8ded7e0b9f07b061917e1a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf3b694b2b8ded7e0b9f07b061917e1a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf739a2cd7b81783a43148b53e40d983b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf739a2cd7b81783a43148b53e40d983b\">lowp_f32vec3</a></td></tr>\n<tr class=\"memdesc:gaf739a2cd7b81783a43148b53e40d983b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#gaf739a2cd7b81783a43148b53e40d983b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf739a2cd7b81783a43148b53e40d983b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e2e1debe022074ab224c9faf856d374\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4e2e1debe022074ab224c9faf856d374\">lowp_f32vec4</a></td></tr>\n<tr class=\"memdesc:ga4e2e1debe022074ab224c9faf856d374\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga4e2e1debe022074ab224c9faf856d374\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e2e1debe022074ab224c9faf856d374\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc7a97c07cbfac8e35eb5e63beb4b679\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">lowp_f64</a></td></tr>\n<tr class=\"memdesc:gabc7a97c07cbfac8e35eb5e63beb4b679\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679\">More...</a><br /></td></tr>\n<tr class=\"separator:gabc7a97c07cbfac8e35eb5e63beb4b679\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafc730f6b4242763b0eda0ffa25150292\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gafc730f6b4242763b0eda0ffa25150292\">lowp_f64mat2</a></td></tr>\n<tr class=\"memdesc:gafc730f6b4242763b0eda0ffa25150292\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gafc730f6b4242763b0eda0ffa25150292\">More...</a><br /></td></tr>\n<tr class=\"separator:gafc730f6b4242763b0eda0ffa25150292\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga771fda9109933db34f808d92b9b84d7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga771fda9109933db34f808d92b9b84d7e\">lowp_f64mat2x2</a></td></tr>\n<tr class=\"memdesc:ga771fda9109933db34f808d92b9b84d7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga771fda9109933db34f808d92b9b84d7e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga771fda9109933db34f808d92b9b84d7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39e90adcffe33264bd608fa9c6bd184b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga39e90adcffe33264bd608fa9c6bd184b\">lowp_f64mat2x3</a></td></tr>\n<tr class=\"memdesc:ga39e90adcffe33264bd608fa9c6bd184b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#ga39e90adcffe33264bd608fa9c6bd184b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga39e90adcffe33264bd608fa9c6bd184b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50265a202fbfe0a25fc70066c31d9336\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga50265a202fbfe0a25fc70066c31d9336\">lowp_f64mat2x4</a></td></tr>\n<tr class=\"memdesc:ga50265a202fbfe0a25fc70066c31d9336\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#ga50265a202fbfe0a25fc70066c31d9336\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50265a202fbfe0a25fc70066c31d9336\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58119a41d143ebaea0df70fe882e8a40\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga58119a41d143ebaea0df70fe882e8a40\">lowp_f64mat3</a></td></tr>\n<tr class=\"memdesc:ga58119a41d143ebaea0df70fe882e8a40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga58119a41d143ebaea0df70fe882e8a40\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58119a41d143ebaea0df70fe882e8a40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0eb2d65514ee3e49905aa2caad8c0ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad\">lowp_f64mat3x2</a></td></tr>\n<tr class=\"memdesc:gab0eb2d65514ee3e49905aa2caad8c0ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad\">More...</a><br /></td></tr>\n<tr class=\"separator:gab0eb2d65514ee3e49905aa2caad8c0ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac8f8a12ee03105ef8861dc652434e3b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac8f8a12ee03105ef8861dc652434e3b7\">lowp_f64mat3x3</a></td></tr>\n<tr class=\"memdesc:gac8f8a12ee03105ef8861dc652434e3b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gac8f8a12ee03105ef8861dc652434e3b7\">More...</a><br /></td></tr>\n<tr class=\"separator:gac8f8a12ee03105ef8861dc652434e3b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade8d1edfb23996ab6c622e65e3893271\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gade8d1edfb23996ab6c622e65e3893271\">lowp_f64mat3x4</a></td></tr>\n<tr class=\"memdesc:gade8d1edfb23996ab6c622e65e3893271\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#gade8d1edfb23996ab6c622e65e3893271\">More...</a><br /></td></tr>\n<tr class=\"separator:gade8d1edfb23996ab6c622e65e3893271\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7451266e67794bd1125163502bc4a570\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7451266e67794bd1125163502bc4a570\">lowp_f64mat4</a></td></tr>\n<tr class=\"memdesc:ga7451266e67794bd1125163502bc4a570\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga7451266e67794bd1125163502bc4a570\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7451266e67794bd1125163502bc4a570\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0cecb80fd106bc369b9e46a165815ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab0cecb80fd106bc369b9e46a165815ce\">lowp_f64mat4x2</a></td></tr>\n<tr class=\"memdesc:gab0cecb80fd106bc369b9e46a165815ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#gab0cecb80fd106bc369b9e46a165815ce\">More...</a><br /></td></tr>\n<tr class=\"separator:gab0cecb80fd106bc369b9e46a165815ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae731613b25db3a5ef5a05d21e57a57d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae731613b25db3a5ef5a05d21e57a57d3\">lowp_f64mat4x3</a></td></tr>\n<tr class=\"memdesc:gae731613b25db3a5ef5a05d21e57a57d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#gae731613b25db3a5ef5a05d21e57a57d3\">More...</a><br /></td></tr>\n<tr class=\"separator:gae731613b25db3a5ef5a05d21e57a57d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8c9cd734e03cd49674f3e287aa4a6f95\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95\">lowp_f64mat4x4</a></td></tr>\n<tr class=\"memdesc:ga8c9cd734e03cd49674f3e287aa4a6f95\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8c9cd734e03cd49674f3e287aa4a6f95\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa3ee2bc4af03cc06578b66b3e3f878ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae\">lowp_f64quat</a></td></tr>\n<tr class=\"memdesc:gaa3ee2bc4af03cc06578b66b3e3f878ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point quaternion.  <a href=\"a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3ee2bc4af03cc06578b66b3e3f878ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2d02c5f4d59135b9bc524fe317fd26b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b\">lowp_f64vec1</a></td></tr>\n<tr class=\"memdesc:gaf2d02c5f4d59135b9bc524fe317fd26b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2d02c5f4d59135b9bc524fe317fd26b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e641a54d70c81eabf56c25c966d04bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4e641a54d70c81eabf56c25c966d04bd\">lowp_f64vec2</a></td></tr>\n<tr class=\"memdesc:ga4e641a54d70c81eabf56c25c966d04bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga4e641a54d70c81eabf56c25c966d04bd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e641a54d70c81eabf56c25c966d04bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7a4711107b7d078fc5f03ce2227b90b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae7a4711107b7d078fc5f03ce2227b90b\">lowp_f64vec3</a></td></tr>\n<tr class=\"memdesc:gae7a4711107b7d078fc5f03ce2227b90b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#gae7a4711107b7d078fc5f03ce2227b90b\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7a4711107b7d078fc5f03ce2227b90b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa666bb9e6d204d3bea0b3a39a3a335f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4\">lowp_f64vec4</a></td></tr>\n<tr class=\"memdesc:gaa666bb9e6d204d3bea0b3a39a3a335f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low double-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa666bb9e6d204d3bea0b3a39a3a335f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41b0d390bd8cc827323b1b3816ff4bf8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">lowp_float32</a></td></tr>\n<tr class=\"memdesc:ga41b0d390bd8cc827323b1b3816ff4bf8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga41b0d390bd8cc827323b1b3816ff4bf8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaea881cae4ddc6c0fbf7cc5b08177ca5b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">lowp_float32_t</a></td></tr>\n<tr class=\"memdesc:gaea881cae4ddc6c0fbf7cc5b08177ca5b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaea881cae4ddc6c0fbf7cc5b08177ca5b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3714dab2c16a6545a405cb0c3b3aaa6f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">lowp_float64</a></td></tr>\n<tr class=\"memdesc:ga3714dab2c16a6545a405cb0c3b3aaa6f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3714dab2c16a6545a405cb0c3b3aaa6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7286a37076a09da140df18bfa75d4e38\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">lowp_float64_t</a></td></tr>\n<tr class=\"memdesc:ga7286a37076a09da140df18bfa75d4e38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#ga7286a37076a09da140df18bfa75d4e38\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7286a37076a09da140df18bfa75d4e38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5bba0ce31210e274f73efacd3364c03f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5bba0ce31210e274f73efacd3364c03f\">lowp_fmat2</a></td></tr>\n<tr class=\"memdesc:ga5bba0ce31210e274f73efacd3364c03f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga5bba0ce31210e274f73efacd3364c03f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5bba0ce31210e274f73efacd3364c03f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0feb11edd0d3ab3e8ed996d349a5066\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066\">lowp_fmat2x2</a></td></tr>\n<tr class=\"memdesc:gab0feb11edd0d3ab3e8ed996d349a5066\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066\">More...</a><br /></td></tr>\n<tr class=\"separator:gab0feb11edd0d3ab3e8ed996d349a5066\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga71cdb53801ed4c3aadb3603c04723210\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga71cdb53801ed4c3aadb3603c04723210\">lowp_fmat2x3</a></td></tr>\n<tr class=\"memdesc:ga71cdb53801ed4c3aadb3603c04723210\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#ga71cdb53801ed4c3aadb3603c04723210\">More...</a><br /></td></tr>\n<tr class=\"separator:ga71cdb53801ed4c3aadb3603c04723210\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab217601c74974a84acbca428123ecf7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaab217601c74974a84acbca428123ecf7\">lowp_fmat2x4</a></td></tr>\n<tr class=\"memdesc:gaab217601c74974a84acbca428123ecf7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#gaab217601c74974a84acbca428123ecf7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab217601c74974a84acbca428123ecf7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83079315e230e8f39728f4bf0d2f9a9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b\">lowp_fmat3</a></td></tr>\n<tr class=\"memdesc:ga83079315e230e8f39728f4bf0d2f9a9b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga83079315e230e8f39728f4bf0d2f9a9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga49b98e7d71804af45d86886a489e633c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga49b98e7d71804af45d86886a489e633c\">lowp_fmat3x2</a></td></tr>\n<tr class=\"memdesc:ga49b98e7d71804af45d86886a489e633c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#ga49b98e7d71804af45d86886a489e633c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga49b98e7d71804af45d86886a489e633c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaba56275dd04a7a61560b0e8fa5d365b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4\">lowp_fmat3x3</a></td></tr>\n<tr class=\"memdesc:gaba56275dd04a7a61560b0e8fa5d365b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaba56275dd04a7a61560b0e8fa5d365b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga28733aec7288191b314d42154fd0b690\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga28733aec7288191b314d42154fd0b690\">lowp_fmat3x4</a></td></tr>\n<tr class=\"memdesc:ga28733aec7288191b314d42154fd0b690\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#ga28733aec7288191b314d42154fd0b690\">More...</a><br /></td></tr>\n<tr class=\"separator:ga28733aec7288191b314d42154fd0b690\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5803cb9ae26399762d8bba9e0b2fc09f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f\">lowp_fmat4</a></td></tr>\n<tr class=\"memdesc:ga5803cb9ae26399762d8bba9e0b2fc09f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5803cb9ae26399762d8bba9e0b2fc09f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5868c2dcce41cc3ea5edcaeae239f62c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c\">lowp_fmat4x2</a></td></tr>\n<tr class=\"memdesc:ga5868c2dcce41cc3ea5edcaeae239f62c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5868c2dcce41cc3ea5edcaeae239f62c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5e649bbdb135fbcb4bfe950f4c73a444\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444\">lowp_fmat4x3</a></td></tr>\n<tr class=\"memdesc:ga5e649bbdb135fbcb4bfe950f4c73a444\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5e649bbdb135fbcb4bfe950f4c73a444\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac2f5263708ac847b361a9841e74ddf9f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac2f5263708ac847b361a9841e74ddf9f\">lowp_fmat4x4</a></td></tr>\n<tr class=\"memdesc:gac2f5263708ac847b361a9841e74ddf9f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gac2f5263708ac847b361a9841e74ddf9f\">More...</a><br /></td></tr>\n<tr class=\"separator:gac2f5263708ac847b361a9841e74ddf9f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga346b2336fff168a7e0df1583aae3e5a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga346b2336fff168a7e0df1583aae3e5a5\">lowp_fvec1</a></td></tr>\n<tr class=\"memdesc:ga346b2336fff168a7e0df1583aae3e5a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#ga346b2336fff168a7e0df1583aae3e5a5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga346b2336fff168a7e0df1583aae3e5a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62a32c31f4e2e8ca859663b6e3289a2d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d\">lowp_fvec2</a></td></tr>\n<tr class=\"memdesc:ga62a32c31f4e2e8ca859663b6e3289a2d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga62a32c31f4e2e8ca859663b6e3289a2d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga40b5c557efebb5bb99d6b9aa81095afa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa\">lowp_fvec3</a></td></tr>\n<tr class=\"memdesc:ga40b5c557efebb5bb99d6b9aa81095afa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga40b5c557efebb5bb99d6b9aa81095afa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga755484ffbe39ae3db2875953ed04e7b7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga755484ffbe39ae3db2875953ed04e7b7\">lowp_fvec4</a></td></tr>\n<tr class=\"memdesc:ga755484ffbe39ae3db2875953ed04e7b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low single-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga755484ffbe39ae3db2875953ed04e7b7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga755484ffbe39ae3db2875953ed04e7b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga392b673fd10847bfb78fb808c6cf8ff7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">lowp_i16</a></td></tr>\n<tr class=\"memdesc:ga392b673fd10847bfb78fb808c6cf8ff7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer type.  <a href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga392b673fd10847bfb78fb808c6cf8ff7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga501a2f313f1c220eef4ab02bdabdc3c6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i16, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6\">lowp_i16vec1</a></td></tr>\n<tr class=\"memdesc:ga501a2f313f1c220eef4ab02bdabdc3c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer scalar type.  <a href=\"a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga501a2f313f1c220eef4ab02bdabdc3c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cac84b520a6b57f2fbd880d3d63c51b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i16, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b\">lowp_i16vec2</a></td></tr>\n<tr class=\"memdesc:ga7cac84b520a6b57f2fbd880d3d63c51b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7cac84b520a6b57f2fbd880d3d63c51b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab69ef9cbc2a9214bf5596c528c801b72\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i16, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab69ef9cbc2a9214bf5596c528c801b72\">lowp_i16vec3</a></td></tr>\n<tr class=\"memdesc:gab69ef9cbc2a9214bf5596c528c801b72\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer vector of 3 components type.  <a href=\"a00304.html#gab69ef9cbc2a9214bf5596c528c801b72\">More...</a><br /></td></tr>\n<tr class=\"separator:gab69ef9cbc2a9214bf5596c528c801b72\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1d47d94d17c2406abdd1f087a816e387\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i16, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1d47d94d17c2406abdd1f087a816e387\">lowp_i16vec4</a></td></tr>\n<tr class=\"memdesc:ga1d47d94d17c2406abdd1f087a816e387\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer vector of 4 components type.  <a href=\"a00304.html#ga1d47d94d17c2406abdd1f087a816e387\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1d47d94d17c2406abdd1f087a816e387\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ff73a45cea9613ebf1a9fad0b9f82ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">lowp_i32</a></td></tr>\n<tr class=\"memdesc:ga7ff73a45cea9613ebf1a9fad0b9f82ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer type.  <a href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ff73a45cea9613ebf1a9fad0b9f82ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae31ac3608cf643ceffd6554874bec4a0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae31ac3608cf643ceffd6554874bec4a0\">lowp_i32vec1</a></td></tr>\n<tr class=\"memdesc:gae31ac3608cf643ceffd6554874bec4a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer scalar type.  <a href=\"a00304.html#gae31ac3608cf643ceffd6554874bec4a0\">More...</a><br /></td></tr>\n<tr class=\"separator:gae31ac3608cf643ceffd6554874bec4a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga867a3c2d99ab369a454167d2c0a24dbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd\">lowp_i32vec2</a></td></tr>\n<tr class=\"memdesc:ga867a3c2d99ab369a454167d2c0a24dbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga867a3c2d99ab369a454167d2c0a24dbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5fe17c87ede1b1b4d92454cff4da076d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d\">lowp_i32vec3</a></td></tr>\n<tr class=\"memdesc:ga5fe17c87ede1b1b4d92454cff4da076d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5fe17c87ede1b1b4d92454cff4da076d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac9b2eb4296ffe50a32eacca9ed932c08\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08\">lowp_i32vec4</a></td></tr>\n<tr class=\"memdesc:gac9b2eb4296ffe50a32eacca9ed932c08\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer vector of 4 components type.  <a href=\"a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08\">More...</a><br /></td></tr>\n<tr class=\"separator:gac9b2eb4296ffe50a32eacca9ed932c08\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga354736e0c645099cd44c42fb2f87c2b8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">lowp_i64</a></td></tr>\n<tr class=\"memdesc:ga354736e0c645099cd44c42fb2f87c2b8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer type.  <a href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga354736e0c645099cd44c42fb2f87c2b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0f7d875db5f3cc9f3168c5a0ed56437\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437\">lowp_i64vec1</a></td></tr>\n<tr class=\"memdesc:gab0f7d875db5f3cc9f3168c5a0ed56437\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer scalar type.  <a href=\"a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437\">More...</a><br /></td></tr>\n<tr class=\"separator:gab0f7d875db5f3cc9f3168c5a0ed56437\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab485c48f06a4fdd6b8d58d343bb49f3c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c\">lowp_i64vec2</a></td></tr>\n<tr class=\"memdesc:gab485c48f06a4fdd6b8d58d343bb49f3c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer vector of 2 components type.  <a href=\"a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c\">More...</a><br /></td></tr>\n<tr class=\"separator:gab485c48f06a4fdd6b8d58d343bb49f3c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\">lowp_i64vec3</a></td></tr>\n<tr class=\"memdesc:ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabb4229a4c1488bf063eed0c45355bb9c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gabb4229a4c1488bf063eed0c45355bb9c\">lowp_i64vec4</a></td></tr>\n<tr class=\"memdesc:gabb4229a4c1488bf063eed0c45355bb9c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer vector of 4 components type.  <a href=\"a00304.html#gabb4229a4c1488bf063eed0c45355bb9c\">More...</a><br /></td></tr>\n<tr class=\"separator:gabb4229a4c1488bf063eed0c45355bb9c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga552a6bde5e75984efb0f863278da2e54\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">lowp_i8</a></td></tr>\n<tr class=\"memdesc:ga552a6bde5e75984efb0f863278da2e54\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer type.  <a href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">More...</a><br /></td></tr>\n<tr class=\"separator:ga552a6bde5e75984efb0f863278da2e54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga036d6c7ca9fbbdc5f3871bfcb937c85c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i8, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c\">lowp_i8vec1</a></td></tr>\n<tr class=\"memdesc:ga036d6c7ca9fbbdc5f3871bfcb937c85c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer scalar type.  <a href=\"a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga036d6c7ca9fbbdc5f3871bfcb937c85c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac03e5099d27eeaa74b6016ea435a1df2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i8, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac03e5099d27eeaa74b6016ea435a1df2\">lowp_i8vec2</a></td></tr>\n<tr class=\"memdesc:gac03e5099d27eeaa74b6016ea435a1df2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer vector of 2 components type.  <a href=\"a00304.html#gac03e5099d27eeaa74b6016ea435a1df2\">More...</a><br /></td></tr>\n<tr class=\"separator:gac03e5099d27eeaa74b6016ea435a1df2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae2f43ace6b5b33ab49516d9e40af1845\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i8, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae2f43ace6b5b33ab49516d9e40af1845\">lowp_i8vec3</a></td></tr>\n<tr class=\"memdesc:gae2f43ace6b5b33ab49516d9e40af1845\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer vector of 3 components type.  <a href=\"a00304.html#gae2f43ace6b5b33ab49516d9e40af1845\">More...</a><br /></td></tr>\n<tr class=\"separator:gae2f43ace6b5b33ab49516d9e40af1845\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d388e9b9aa1b389f0672d9c7dfc61c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i8, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5\">lowp_i8vec4</a></td></tr>\n<tr class=\"memdesc:ga6d388e9b9aa1b389f0672d9c7dfc61c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer vector of 4 components type.  <a href=\"a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d388e9b9aa1b389f0672d9c7dfc61c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga698e36b01167fc0f037889334dce8def\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">lowp_int16</a></td></tr>\n<tr class=\"memdesc:ga698e36b01167fc0f037889334dce8def\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer type.  <a href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">More...</a><br /></td></tr>\n<tr class=\"separator:ga698e36b01167fc0f037889334dce8def\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b2cd8d31eb345b2d641d9261c38db1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">lowp_int16_t</a></td></tr>\n<tr class=\"memdesc:ga8b2cd8d31eb345b2d641d9261c38db1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer type.  <a href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b2cd8d31eb345b2d641d9261c38db1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga864aabca5f3296e176e0c3ed9cc16b02\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">lowp_int32</a></td></tr>\n<tr class=\"memdesc:ga864aabca5f3296e176e0c3ed9cc16b02\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer type.  <a href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">More...</a><br /></td></tr>\n<tr class=\"separator:ga864aabca5f3296e176e0c3ed9cc16b02\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0350631d35ff800e6133ac6243b13cbc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">lowp_int32_t</a></td></tr>\n<tr class=\"memdesc:ga0350631d35ff800e6133ac6243b13cbc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer type.  <a href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0350631d35ff800e6133ac6243b13cbc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf645b1a60203b39c0207baff5e3d8c3c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">lowp_int64</a></td></tr>\n<tr class=\"memdesc:gaf645b1a60203b39c0207baff5e3d8c3c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer type.  <a href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf645b1a60203b39c0207baff5e3d8c3c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebf341fc4a5be233f7dde962c2e33847\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">lowp_int64_t</a></td></tr>\n<tr class=\"memdesc:gaebf341fc4a5be233f7dde962c2e33847\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer type.  <a href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">More...</a><br /></td></tr>\n<tr class=\"separator:gaebf341fc4a5be233f7dde962c2e33847\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga760bcf26fdb23a2c3ecad3c928a19ae6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">lowp_int8</a></td></tr>\n<tr class=\"memdesc:ga760bcf26fdb23a2c3ecad3c928a19ae6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer type.  <a href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga760bcf26fdb23a2c3ecad3c928a19ae6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga119c41d73fe9977358174eb3ac1035a3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">lowp_int8_t</a></td></tr>\n<tr class=\"memdesc:ga119c41d73fe9977358174eb3ac1035a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer type.  <a href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga119c41d73fe9977358174eb3ac1035a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga504ce1631cb2ac02fcf1d44d8c2aa126\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">lowp_u16</a></td></tr>\n<tr class=\"memdesc:ga504ce1631cb2ac02fcf1d44d8c2aa126\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">More...</a><br /></td></tr>\n<tr class=\"separator:ga504ce1631cb2ac02fcf1d44d8c2aa126\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa6aab4ee7189b86716f5d7015d43021d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u16, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa6aab4ee7189b86716f5d7015d43021d\">lowp_u16vec1</a></td></tr>\n<tr class=\"memdesc:gaa6aab4ee7189b86716f5d7015d43021d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer scalar type.  <a href=\"a00304.html#gaa6aab4ee7189b86716f5d7015d43021d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa6aab4ee7189b86716f5d7015d43021d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a7d997da9ac29cb931e35bd399f58df\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u16, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2a7d997da9ac29cb931e35bd399f58df\">lowp_u16vec2</a></td></tr>\n<tr class=\"memdesc:ga2a7d997da9ac29cb931e35bd399f58df\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga2a7d997da9ac29cb931e35bd399f58df\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2a7d997da9ac29cb931e35bd399f58df\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0253db6c3d3bae1f591676307a9dd8c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u16, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac0253db6c3d3bae1f591676307a9dd8c\">lowp_u16vec3</a></td></tr>\n<tr class=\"memdesc:gac0253db6c3d3bae1f591676307a9dd8c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#gac0253db6c3d3bae1f591676307a9dd8c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac0253db6c3d3bae1f591676307a9dd8c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7f00459b9a2e5b2757e70afc0c189e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u16, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1\">lowp_u16vec4</a></td></tr>\n<tr class=\"memdesc:gaa7f00459b9a2e5b2757e70afc0c189e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7f00459b9a2e5b2757e70afc0c189e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f072ada9552e1e480bbb3b1acde5250\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">lowp_u32</a></td></tr>\n<tr class=\"memdesc:ga4f072ada9552e1e480bbb3b1acde5250\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f072ada9552e1e480bbb3b1acde5250\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabed3be8dfdc4a0df4bf3271dbd7344c4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4\">lowp_u32vec1</a></td></tr>\n<tr class=\"memdesc:gabed3be8dfdc4a0df4bf3271dbd7344c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer scalar type.  <a href=\"a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4\">More...</a><br /></td></tr>\n<tr class=\"separator:gabed3be8dfdc4a0df4bf3271dbd7344c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf7e286e81347011e257ee779524e73b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf7e286e81347011e257ee779524e73b9\">lowp_u32vec2</a></td></tr>\n<tr class=\"memdesc:gaf7e286e81347011e257ee779524e73b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#gaf7e286e81347011e257ee779524e73b9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf7e286e81347011e257ee779524e73b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad3ad390560a671b1f676fbf03cd3aa15\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad3ad390560a671b1f676fbf03cd3aa15\">lowp_u32vec3</a></td></tr>\n<tr class=\"memdesc:gad3ad390560a671b1f676fbf03cd3aa15\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#gad3ad390560a671b1f676fbf03cd3aa15\">More...</a><br /></td></tr>\n<tr class=\"separator:gad3ad390560a671b1f676fbf03cd3aa15\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4502885718742aa238c36a312c3f3f20\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u32, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4502885718742aa238c36a312c3f3f20\">lowp_u32vec4</a></td></tr>\n<tr class=\"memdesc:ga4502885718742aa238c36a312c3f3f20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga4502885718742aa238c36a312c3f3f20\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4502885718742aa238c36a312c3f3f20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30069d1f02b19599cbfadf98c23ac6ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">lowp_u64</a></td></tr>\n<tr class=\"memdesc:ga30069d1f02b19599cbfadf98c23ac6ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">More...</a><br /></td></tr>\n<tr class=\"separator:ga30069d1f02b19599cbfadf98c23ac6ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga859be7b9d3a3765c1cafc14dbcf249a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6\">lowp_u64vec1</a></td></tr>\n<tr class=\"memdesc:ga859be7b9d3a3765c1cafc14dbcf249a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer scalar type.  <a href=\"a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga859be7b9d3a3765c1cafc14dbcf249a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga581485db4ba6ddb501505ee711fd8e42\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga581485db4ba6ddb501505ee711fd8e42\">lowp_u64vec2</a></td></tr>\n<tr class=\"memdesc:ga581485db4ba6ddb501505ee711fd8e42\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga581485db4ba6ddb501505ee711fd8e42\">More...</a><br /></td></tr>\n<tr class=\"separator:ga581485db4ba6ddb501505ee711fd8e42\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4a8682bec7ec8af666ef87fae38d5d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1\">lowp_u64vec3</a></td></tr>\n<tr class=\"memdesc:gaa4a8682bec7ec8af666ef87fae38d5d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4a8682bec7ec8af666ef87fae38d5d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6fccc89c34045c86339f6fa781ce96de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u64, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6fccc89c34045c86339f6fa781ce96de\">lowp_u64vec4</a></td></tr>\n<tr class=\"memdesc:ga6fccc89c34045c86339f6fa781ce96de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga6fccc89c34045c86339f6fa781ce96de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6fccc89c34045c86339f6fa781ce96de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b09f03da7ac43055c68a349d5445083\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">lowp_u8</a></td></tr>\n<tr class=\"memdesc:ga1b09f03da7ac43055c68a349d5445083\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1b09f03da7ac43055c68a349d5445083\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b2e0e10d8d154fec9cab50e216588ec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u8, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec\">lowp_u8vec1</a></td></tr>\n<tr class=\"memdesc:ga4b2e0e10d8d154fec9cab50e216588ec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer scalar type.  <a href=\"a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b2e0e10d8d154fec9cab50e216588ec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae6f63fa38635431e51a8f2602f15c566\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u8, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae6f63fa38635431e51a8f2602f15c566\">lowp_u8vec2</a></td></tr>\n<tr class=\"memdesc:gae6f63fa38635431e51a8f2602f15c566\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#gae6f63fa38635431e51a8f2602f15c566\">More...</a><br /></td></tr>\n<tr class=\"separator:gae6f63fa38635431e51a8f2602f15c566\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga150dc47e31c6b8cf8461803c8d56f7bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u8, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd\">lowp_u8vec3</a></td></tr>\n<tr class=\"memdesc:ga150dc47e31c6b8cf8461803c8d56f7bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga150dc47e31c6b8cf8461803c8d56f7bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9910927f3a4d1addb3da6a82542a8287\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u8, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga9910927f3a4d1addb3da6a82542a8287\">lowp_u8vec4</a></td></tr>\n<tr class=\"memdesc:ga9910927f3a4d1addb3da6a82542a8287\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga9910927f3a4d1addb3da6a82542a8287\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9910927f3a4d1addb3da6a82542a8287\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad68bfd9f881856fc863a6ebca0b67f78\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">lowp_uint16</a></td></tr>\n<tr class=\"memdesc:gad68bfd9f881856fc863a6ebca0b67f78\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">More...</a><br /></td></tr>\n<tr class=\"separator:gad68bfd9f881856fc863a6ebca0b67f78\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga91c4815f93177eb423362fd296a87e9f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">lowp_uint16_t</a></td></tr>\n<tr class=\"memdesc:ga91c4815f93177eb423362fd296a87e9f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga91c4815f93177eb423362fd296a87e9f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa6a5b461bbf5fe20982472aa51896d4b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">lowp_uint32</a></td></tr>\n<tr class=\"memdesc:gaa6a5b461bbf5fe20982472aa51896d4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa6a5b461bbf5fe20982472aa51896d4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1b735b4b1145174f4e4167d13778f9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">lowp_uint32_t</a></td></tr>\n<tr class=\"memdesc:gaf1b735b4b1145174f4e4167d13778f9b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf1b735b4b1145174f4e4167d13778f9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa212b805736a759998e312cbdd550fae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">lowp_uint64</a></td></tr>\n<tr class=\"memdesc:gaa212b805736a759998e312cbdd550fae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa212b805736a759998e312cbdd550fae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8dd3a3281ae5c970ffe0c41d538aa153\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">lowp_uint64_t</a></td></tr>\n<tr class=\"memdesc:ga8dd3a3281ae5c970ffe0c41d538aa153\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8dd3a3281ae5c970ffe0c41d538aa153\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf49470869e9be2c059629b250619804e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">lowp_uint8</a></td></tr>\n<tr class=\"memdesc:gaf49470869e9be2c059629b250619804e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf49470869e9be2c059629b250619804e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga667b2ece2b258be898812dc2177995d1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">lowp_uint8_t</a></td></tr>\n<tr class=\"memdesc:ga667b2ece2b258be898812dc2177995d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga667b2ece2b258be898812dc2177995d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\">mediump_f32</a></td></tr>\n<tr class=\"memdesc:ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf9020c6176a75bc84828ab01ea7dac25\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf9020c6176a75bc84828ab01ea7dac25\">mediump_f32mat2</a></td></tr>\n<tr class=\"memdesc:gaf9020c6176a75bc84828ab01ea7dac25\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gaf9020c6176a75bc84828ab01ea7dac25\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf9020c6176a75bc84828ab01ea7dac25\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa3ca74a44102035b3ffb5c9c52dfdd3f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f\">mediump_f32mat2x2</a></td></tr>\n<tr class=\"memdesc:gaa3ca74a44102035b3ffb5c9c52dfdd3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3ca74a44102035b3ffb5c9c52dfdd3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad4cc829ab1ad3e05ac0a24828a3c95cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf\">mediump_f32mat2x3</a></td></tr>\n<tr class=\"memdesc:gad4cc829ab1ad3e05ac0a24828a3c95cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf\">More...</a><br /></td></tr>\n<tr class=\"separator:gad4cc829ab1ad3e05ac0a24828a3c95cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae71445ac6cd0b9fba3e5c905cd030fb1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1\">mediump_f32mat2x4</a></td></tr>\n<tr class=\"memdesc:gae71445ac6cd0b9fba3e5c905cd030fb1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1\">More...</a><br /></td></tr>\n<tr class=\"separator:gae71445ac6cd0b9fba3e5c905cd030fb1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaaf878d0d7bfc0aac054fe269a886ca8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8\">mediump_f32mat3</a></td></tr>\n<tr class=\"memdesc:gaaaf878d0d7bfc0aac054fe269a886ca8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaaf878d0d7bfc0aac054fe269a886ca8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaab39454f56cf9fc6d940358ce5e6a0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f\">mediump_f32mat3x2</a></td></tr>\n<tr class=\"memdesc:gaaab39454f56cf9fc6d940358ce5e6a0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaab39454f56cf9fc6d940358ce5e6a0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd80ad7640e9e32f2edcb8330b1ffe4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f\">mediump_f32mat3x3</a></td></tr>\n<tr class=\"memdesc:gacd80ad7640e9e32f2edcb8330b1ffe4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd80ad7640e9e32f2edcb8330b1ffe4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8df705d775b776f5ae6b39e2ab892899\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8df705d775b776f5ae6b39e2ab892899\">mediump_f32mat3x4</a></td></tr>\n<tr class=\"memdesc:ga8df705d775b776f5ae6b39e2ab892899\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#ga8df705d775b776f5ae6b39e2ab892899\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8df705d775b776f5ae6b39e2ab892899\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4491baaebbc46a20f1cb5da985576bf4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4491baaebbc46a20f1cb5da985576bf4\">mediump_f32mat4</a></td></tr>\n<tr class=\"memdesc:ga4491baaebbc46a20f1cb5da985576bf4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga4491baaebbc46a20f1cb5da985576bf4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4491baaebbc46a20f1cb5da985576bf4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab005efe0fa4de1a928e8ddec4bc2c43f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f\">mediump_f32mat4x2</a></td></tr>\n<tr class=\"memdesc:gab005efe0fa4de1a928e8ddec4bc2c43f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f\">More...</a><br /></td></tr>\n<tr class=\"separator:gab005efe0fa4de1a928e8ddec4bc2c43f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade108f16633cf95fa500b5b8c36c8b00\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gade108f16633cf95fa500b5b8c36c8b00\">mediump_f32mat4x3</a></td></tr>\n<tr class=\"memdesc:gade108f16633cf95fa500b5b8c36c8b00\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#gade108f16633cf95fa500b5b8c36c8b00\">More...</a><br /></td></tr>\n<tr class=\"separator:gade108f16633cf95fa500b5b8c36c8b00\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga936e95b881ecd2d109459ca41913fa99\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga936e95b881ecd2d109459ca41913fa99\">mediump_f32mat4x4</a></td></tr>\n<tr class=\"memdesc:ga936e95b881ecd2d109459ca41913fa99\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga936e95b881ecd2d109459ca41913fa99\">More...</a><br /></td></tr>\n<tr class=\"separator:ga936e95b881ecd2d109459ca41913fa99\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa40c03d52dbfbfaf03e75773b9606ff3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3\">mediump_f32quat</a></td></tr>\n<tr class=\"memdesc:gaa40c03d52dbfbfaf03e75773b9606ff3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point quaternion.  <a href=\"a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa40c03d52dbfbfaf03e75773b9606ff3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabb33cab7d7c74cc14aa95455d0690865\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gabb33cab7d7c74cc14aa95455d0690865\">mediump_f32vec1</a></td></tr>\n<tr class=\"memdesc:gabb33cab7d7c74cc14aa95455d0690865\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#gabb33cab7d7c74cc14aa95455d0690865\">More...</a><br /></td></tr>\n<tr class=\"separator:gabb33cab7d7c74cc14aa95455d0690865\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6eb11412a3161ca8dc1d63b2a307c4b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b\">mediump_f32vec2</a></td></tr>\n<tr class=\"memdesc:gad6eb11412a3161ca8dc1d63b2a307c4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b\">More...</a><br /></td></tr>\n<tr class=\"separator:gad6eb11412a3161ca8dc1d63b2a307c4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga062ffef2973bd8241df993c3b30b327c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga062ffef2973bd8241df993c3b30b327c\">mediump_f32vec3</a></td></tr>\n<tr class=\"memdesc:ga062ffef2973bd8241df993c3b30b327c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#ga062ffef2973bd8241df993c3b30b327c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga062ffef2973bd8241df993c3b30b327c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad80c84bcd5f585840faa6179f6fd446c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad80c84bcd5f585840faa6179f6fd446c\">mediump_f32vec4</a></td></tr>\n<tr class=\"memdesc:gad80c84bcd5f585840faa6179f6fd446c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#gad80c84bcd5f585840faa6179f6fd446c\">More...</a><br /></td></tr>\n<tr class=\"separator:gad80c84bcd5f585840faa6179f6fd446c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d40381d78472553f878f66e443feeef\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6d40381d78472553f878f66e443feeef\">mediump_f64</a></td></tr>\n<tr class=\"memdesc:ga6d40381d78472553f878f66e443feeef\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#ga6d40381d78472553f878f66e443feeef\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d40381d78472553f878f66e443feeef\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac1281da5ded55047e8892b0e1f1ae965\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac1281da5ded55047e8892b0e1f1ae965\">mediump_f64mat2</a></td></tr>\n<tr class=\"memdesc:gac1281da5ded55047e8892b0e1f1ae965\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#gac1281da5ded55047e8892b0e1f1ae965\">More...</a><br /></td></tr>\n<tr class=\"separator:gac1281da5ded55047e8892b0e1f1ae965\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4fd527644cccbca4cb205320eab026f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4fd527644cccbca4cb205320eab026f3\">mediump_f64mat2x2</a></td></tr>\n<tr class=\"memdesc:ga4fd527644cccbca4cb205320eab026f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga4fd527644cccbca4cb205320eab026f3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4fd527644cccbca4cb205320eab026f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafd9a6ebc0c7b95f5c581d00d16a17c54\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54\">mediump_f64mat2x3</a></td></tr>\n<tr class=\"memdesc:gafd9a6ebc0c7b95f5c581d00d16a17c54\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54\">More...</a><br /></td></tr>\n<tr class=\"separator:gafd9a6ebc0c7b95f5c581d00d16a17c54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf306dd69e53633636aee38cea79d4cb7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf306dd69e53633636aee38cea79d4cb7\">mediump_f64mat2x4</a></td></tr>\n<tr class=\"memdesc:gaf306dd69e53633636aee38cea79d4cb7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#gaf306dd69e53633636aee38cea79d4cb7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf306dd69e53633636aee38cea79d4cb7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad35fb67eb1d03c5a514f0bd7aed1c776\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776\">mediump_f64mat3</a></td></tr>\n<tr class=\"memdesc:gad35fb67eb1d03c5a514f0bd7aed1c776\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776\">More...</a><br /></td></tr>\n<tr class=\"separator:gad35fb67eb1d03c5a514f0bd7aed1c776\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd926d36a72433f6cac51dd60fa13107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacd926d36a72433f6cac51dd60fa13107\">mediump_f64mat3x2</a></td></tr>\n<tr class=\"memdesc:gacd926d36a72433f6cac51dd60fa13107\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#gacd926d36a72433f6cac51dd60fa13107\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd926d36a72433f6cac51dd60fa13107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga84d88a6e3a54ccd2b67e195af4a4c23e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e\">mediump_f64mat3x3</a></td></tr>\n<tr class=\"memdesc:ga84d88a6e3a54ccd2b67e195af4a4c23e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga84d88a6e3a54ccd2b67e195af4a4c23e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad38c544d332b8c4bd0b70b1bd9feccc2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2\">mediump_f64mat3x4</a></td></tr>\n<tr class=\"memdesc:gad38c544d332b8c4bd0b70b1bd9feccc2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2\">More...</a><br /></td></tr>\n<tr class=\"separator:gad38c544d332b8c4bd0b70b1bd9feccc2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa805ef691c711dc41e2776cfb67f5cf5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5\">mediump_f64mat4</a></td></tr>\n<tr class=\"memdesc:gaa805ef691c711dc41e2776cfb67f5cf5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa805ef691c711dc41e2776cfb67f5cf5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga17d36f0ea22314117e1cec9594b33945\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga17d36f0ea22314117e1cec9594b33945\">mediump_f64mat4x2</a></td></tr>\n<tr class=\"memdesc:ga17d36f0ea22314117e1cec9594b33945\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#ga17d36f0ea22314117e1cec9594b33945\">More...</a><br /></td></tr>\n<tr class=\"separator:ga17d36f0ea22314117e1cec9594b33945\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga54697a78f9a4643af6a57fc2e626ec0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d\">mediump_f64mat4x3</a></td></tr>\n<tr class=\"memdesc:ga54697a78f9a4643af6a57fc2e626ec0d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga54697a78f9a4643af6a57fc2e626ec0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66edb8de17b9235029472f043ae107e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga66edb8de17b9235029472f043ae107e9\">mediump_f64mat4x4</a></td></tr>\n<tr class=\"memdesc:ga66edb8de17b9235029472f043ae107e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga66edb8de17b9235029472f043ae107e9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66edb8de17b9235029472f043ae107e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5e52f485059ce6e3010c590b882602c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef qua&lt; f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5e52f485059ce6e3010c590b882602c9\">mediump_f64quat</a></td></tr>\n<tr class=\"memdesc:ga5e52f485059ce6e3010c590b882602c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point quaternion.  <a href=\"a00304.html#ga5e52f485059ce6e3010c590b882602c9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5e52f485059ce6e3010c590b882602c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac30fdf8afa489400053275b6a3350127\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac30fdf8afa489400053275b6a3350127\">mediump_f64vec1</a></td></tr>\n<tr class=\"memdesc:gac30fdf8afa489400053275b6a3350127\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#gac30fdf8afa489400053275b6a3350127\">More...</a><br /></td></tr>\n<tr class=\"separator:gac30fdf8afa489400053275b6a3350127\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8ebc04ecf6440c4ee24718a16600ce6b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b\">mediump_f64vec2</a></td></tr>\n<tr class=\"memdesc:ga8ebc04ecf6440c4ee24718a16600ce6b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8ebc04ecf6440c4ee24718a16600ce6b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga461c4c7d0757404dd0dba931760b25cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga461c4c7d0757404dd0dba931760b25cf\">mediump_f64vec3</a></td></tr>\n<tr class=\"memdesc:ga461c4c7d0757404dd0dba931760b25cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#ga461c4c7d0757404dd0dba931760b25cf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga461c4c7d0757404dd0dba931760b25cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacfea053bd6bb3eddb996a4f94de22a3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, f64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e\">mediump_f64vec4</a></td></tr>\n<tr class=\"memdesc:gacfea053bd6bb3eddb996a4f94de22a3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium double-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e\">More...</a><br /></td></tr>\n<tr class=\"separator:gacfea053bd6bb3eddb996a4f94de22a3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7812bf00676fb1a86dcd62cca354d2c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7\">mediump_float32</a></td></tr>\n<tr class=\"memdesc:ga7812bf00676fb1a86dcd62cca354d2c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7812bf00676fb1a86dcd62cca354d2c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4dee61f8fe1caccec309fbed02faf12\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae4dee61f8fe1caccec309fbed02faf12\">mediump_float32_t</a></td></tr>\n<tr class=\"memdesc:gae4dee61f8fe1caccec309fbed02faf12\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium 32 bit single-qualifier floating-point scalar.  <a href=\"a00304.html#gae4dee61f8fe1caccec309fbed02faf12\">More...</a><br /></td></tr>\n<tr class=\"separator:gae4dee61f8fe1caccec309fbed02faf12\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab83d8aae6e4f115e97a785e8574a115f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gab83d8aae6e4f115e97a785e8574a115f\">mediump_float64</a></td></tr>\n<tr class=\"memdesc:gab83d8aae6e4f115e97a785e8574a115f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#gab83d8aae6e4f115e97a785e8574a115f\">More...</a><br /></td></tr>\n<tr class=\"separator:gab83d8aae6e4f115e97a785e8574a115f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac61843e4fa96c1f4e9d8316454f32a8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e\">mediump_float64_t</a></td></tr>\n<tr class=\"memdesc:gac61843e4fa96c1f4e9d8316454f32a8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium 64 bit double-qualifier floating-point scalar.  <a href=\"a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac61843e4fa96c1f4e9d8316454f32a8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74e9133378fd0b4da8ac0bc0876702ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff\">mediump_fmat2</a></td></tr>\n<tr class=\"memdesc:ga74e9133378fd0b4da8ac0bc0876702ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74e9133378fd0b4da8ac0bc0876702ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga98a687c17b174ea316b5f397b64f44bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga98a687c17b174ea316b5f397b64f44bc\">mediump_fmat2x2</a></td></tr>\n<tr class=\"memdesc:ga98a687c17b174ea316b5f397b64f44bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 1x1 matrix.  <a href=\"a00304.html#ga98a687c17b174ea316b5f397b64f44bc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga98a687c17b174ea316b5f397b64f44bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa03f939d90d5ef157df957d93f0b9a64\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa03f939d90d5ef157df957d93f0b9a64\">mediump_fmat2x3</a></td></tr>\n<tr class=\"memdesc:gaa03f939d90d5ef157df957d93f0b9a64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 2x3 matrix.  <a href=\"a00304.html#gaa03f939d90d5ef157df957d93f0b9a64\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa03f939d90d5ef157df957d93f0b9a64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga35223623e9ccebd8a281873b71b7d213\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 2, 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga35223623e9ccebd8a281873b71b7d213\">mediump_fmat2x4</a></td></tr>\n<tr class=\"memdesc:ga35223623e9ccebd8a281873b71b7d213\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 2x4 matrix.  <a href=\"a00304.html#ga35223623e9ccebd8a281873b71b7d213\">More...</a><br /></td></tr>\n<tr class=\"separator:ga35223623e9ccebd8a281873b71b7d213\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga80823dfad5dba98512c76af498343847\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga80823dfad5dba98512c76af498343847\">mediump_fmat3</a></td></tr>\n<tr class=\"memdesc:ga80823dfad5dba98512c76af498343847\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#ga80823dfad5dba98512c76af498343847\">More...</a><br /></td></tr>\n<tr class=\"separator:ga80823dfad5dba98512c76af498343847\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42569e5b92f8635cedeadb1457ee1467\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga42569e5b92f8635cedeadb1457ee1467\">mediump_fmat3x2</a></td></tr>\n<tr class=\"memdesc:ga42569e5b92f8635cedeadb1457ee1467\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 3x2 matrix.  <a href=\"a00304.html#ga42569e5b92f8635cedeadb1457ee1467\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42569e5b92f8635cedeadb1457ee1467\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa6f526388c74a66b3d52315a14d434ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa6f526388c74a66b3d52315a14d434ae\">mediump_fmat3x3</a></td></tr>\n<tr class=\"memdesc:gaa6f526388c74a66b3d52315a14d434ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 3x3 matrix.  <a href=\"a00304.html#gaa6f526388c74a66b3d52315a14d434ae\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa6f526388c74a66b3d52315a14d434ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaefe8ef520c6cb78590ebbefe648da4d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 3, 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4\">mediump_fmat3x4</a></td></tr>\n<tr class=\"memdesc:gaefe8ef520c6cb78590ebbefe648da4d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 3x4 matrix.  <a href=\"a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaefe8ef520c6cb78590ebbefe648da4d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac1c38778c0b5a1263f07753c05a4f7b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9\">mediump_fmat4</a></td></tr>\n<tr class=\"memdesc:gac1c38778c0b5a1263f07753c05a4f7b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9\">More...</a><br /></td></tr>\n<tr class=\"separator:gac1c38778c0b5a1263f07753c05a4f7b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacea38a85893e17e6834b6cb09a9ad0cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 2, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf\">mediump_fmat4x2</a></td></tr>\n<tr class=\"memdesc:gacea38a85893e17e6834b6cb09a9ad0cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 4x2 matrix.  <a href=\"a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf\">More...</a><br /></td></tr>\n<tr class=\"separator:gacea38a85893e17e6834b6cb09a9ad0cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41ad497f7eae211556aefd783cb02b90\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 3, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga41ad497f7eae211556aefd783cb02b90\">mediump_fmat4x3</a></td></tr>\n<tr class=\"memdesc:ga41ad497f7eae211556aefd783cb02b90\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 4x3 matrix.  <a href=\"a00304.html#ga41ad497f7eae211556aefd783cb02b90\">More...</a><br /></td></tr>\n<tr class=\"separator:ga41ad497f7eae211556aefd783cb02b90\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga22e27beead07bff4d5ce9d6065a57279\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef mat&lt; 4, 4, f32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga22e27beead07bff4d5ce9d6065a57279\">mediump_fmat4x4</a></td></tr>\n<tr class=\"memdesc:ga22e27beead07bff4d5ce9d6065a57279\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point 4x4 matrix.  <a href=\"a00304.html#ga22e27beead07bff4d5ce9d6065a57279\">More...</a><br /></td></tr>\n<tr class=\"separator:ga22e27beead07bff4d5ce9d6065a57279\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga367964fc2133d3f1b5b3755ff9cf6c9b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b\">mediump_fvec1</a></td></tr>\n<tr class=\"memdesc:ga367964fc2133d3f1b5b3755ff9cf6c9b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium single-qualifier floating-point vector of 1 component.  <a href=\"a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga367964fc2133d3f1b5b3755ff9cf6c9b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga44bfa55cda5dbf53f24a1fb7610393d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6\">mediump_fvec2</a></td></tr>\n<tr class=\"memdesc:ga44bfa55cda5dbf53f24a1fb7610393d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium Single-qualifier floating-point vector of 2 components.  <a href=\"a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga44bfa55cda5dbf53f24a1fb7610393d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga999dc6703ad16e3d3c26b74ea8083f07\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07\">mediump_fvec3</a></td></tr>\n<tr class=\"memdesc:ga999dc6703ad16e3d3c26b74ea8083f07\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium Single-qualifier floating-point vector of 3 components.  <a href=\"a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07\">More...</a><br /></td></tr>\n<tr class=\"separator:ga999dc6703ad16e3d3c26b74ea8083f07\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1bed890513c0f50b7e7ba4f7f359dbfb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb\">mediump_fvec4</a></td></tr>\n<tr class=\"memdesc:ga1bed890513c0f50b7e7ba4f7f359dbfb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium Single-qualifier floating-point vector of 4 components.  <a href=\"a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1bed890513c0f50b7e7ba4f7f359dbfb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62a17cddeb4dffb4e18fe3aea23f051a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">mediump_i16</a></td></tr>\n<tr class=\"memdesc:ga62a17cddeb4dffb4e18fe3aea23f051a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer type.  <a href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga62a17cddeb4dffb4e18fe3aea23f051a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacc44265ed440bf5e6e566782570de842\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i16, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacc44265ed440bf5e6e566782570de842\">mediump_i16vec1</a></td></tr>\n<tr class=\"memdesc:gacc44265ed440bf5e6e566782570de842\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer scalar type.  <a href=\"a00304.html#gacc44265ed440bf5e6e566782570de842\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc44265ed440bf5e6e566782570de842\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b5e2c9aaa5d7717bf71179aefa12e88\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i16, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88\">mediump_i16vec2</a></td></tr>\n<tr class=\"memdesc:ga4b5e2c9aaa5d7717bf71179aefa12e88\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b5e2c9aaa5d7717bf71179aefa12e88\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3be6c7fc5fe08fa2274bdb001d5f2633\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i16, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633\">mediump_i16vec3</a></td></tr>\n<tr class=\"memdesc:ga3be6c7fc5fe08fa2274bdb001d5f2633\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3be6c7fc5fe08fa2274bdb001d5f2633\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf52982bb23e3a3772649b2c5bb84b107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i16, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf52982bb23e3a3772649b2c5bb84b107\">mediump_i16vec4</a></td></tr>\n<tr class=\"memdesc:gaf52982bb23e3a3772649b2c5bb84b107\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer vector of 4 components type.  <a href=\"a00304.html#gaf52982bb23e3a3772649b2c5bb84b107\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf52982bb23e3a3772649b2c5bb84b107\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5e94bf2a20af7601787c154751dc2e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">mediump_i32</a></td></tr>\n<tr class=\"memdesc:gaf5e94bf2a20af7601787c154751dc2e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer type.  <a href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5e94bf2a20af7601787c154751dc2e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46a57f71e430637559097a732b550a7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga46a57f71e430637559097a732b550a7e\">mediump_i32vec1</a></td></tr>\n<tr class=\"memdesc:ga46a57f71e430637559097a732b550a7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer scalar type.  <a href=\"a00304.html#ga46a57f71e430637559097a732b550a7e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga46a57f71e430637559097a732b550a7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20bf224bd4f8a24ecc4ed2004a40c219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219\">mediump_i32vec2</a></td></tr>\n<tr class=\"memdesc:ga20bf224bd4f8a24ecc4ed2004a40c219\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219\">More...</a><br /></td></tr>\n<tr class=\"separator:ga20bf224bd4f8a24ecc4ed2004a40c219\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13a221b910aa9eb1b04ca1c86e81015a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a\">mediump_i32vec3</a></td></tr>\n<tr class=\"memdesc:ga13a221b910aa9eb1b04ca1c86e81015a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga13a221b910aa9eb1b04ca1c86e81015a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6addd4dfee87fc09ab9525e3d07db4c8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8\">mediump_i32vec4</a></td></tr>\n<tr class=\"memdesc:ga6addd4dfee87fc09ab9525e3d07db4c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer vector of 4 components type.  <a href=\"a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6addd4dfee87fc09ab9525e3d07db4c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3ebcb1f6d8d8387253de8bccb058d77f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">mediump_i64</a></td></tr>\n<tr class=\"memdesc:ga3ebcb1f6d8d8387253de8bccb058d77f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer type.  <a href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3ebcb1f6d8d8387253de8bccb058d77f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8343e9d244fb17a5bbf0d94d36b3695e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e\">mediump_i64vec1</a></td></tr>\n<tr class=\"memdesc:ga8343e9d244fb17a5bbf0d94d36b3695e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer scalar type.  <a href=\"a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8343e9d244fb17a5bbf0d94d36b3695e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c94aeae3457325944ca1059b0b68330\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2c94aeae3457325944ca1059b0b68330\">mediump_i64vec2</a></td></tr>\n<tr class=\"memdesc:ga2c94aeae3457325944ca1059b0b68330\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga2c94aeae3457325944ca1059b0b68330\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c94aeae3457325944ca1059b0b68330\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8089722ffdf868cdfe721dea1fb6a90e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e\">mediump_i64vec3</a></td></tr>\n<tr class=\"memdesc:ga8089722ffdf868cdfe721dea1fb6a90e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8089722ffdf868cdfe721dea1fb6a90e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf1f16c5ab8cb0484bd1e846ae4368f1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1\">mediump_i64vec4</a></td></tr>\n<tr class=\"memdesc:gabf1f16c5ab8cb0484bd1e846ae4368f1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer vector of 4 components type.  <a href=\"a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf1f16c5ab8cb0484bd1e846ae4368f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacf1ded173e1e2d049c511d095b259e21\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">mediump_i8</a></td></tr>\n<tr class=\"memdesc:gacf1ded173e1e2d049c511d095b259e21\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer type.  <a href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf1ded173e1e2d049c511d095b259e21\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85e8893f4ae3630065690a9000c0c483\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, i8, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga85e8893f4ae3630065690a9000c0c483\">mediump_i8vec1</a></td></tr>\n<tr class=\"memdesc:ga85e8893f4ae3630065690a9000c0c483\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer scalar type.  <a href=\"a00304.html#ga85e8893f4ae3630065690a9000c0c483\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85e8893f4ae3630065690a9000c0c483\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a8bdc32184ea0a522ef7bd90640cf67\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, i8, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67\">mediump_i8vec2</a></td></tr>\n<tr class=\"memdesc:ga2a8bdc32184ea0a522ef7bd90640cf67\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer vector of 2 components type.  <a href=\"a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2a8bdc32184ea0a522ef7bd90640cf67\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6dd1c1618378c6f94d522a61c28773c9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, i8, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6dd1c1618378c6f94d522a61c28773c9\">mediump_i8vec3</a></td></tr>\n<tr class=\"memdesc:ga6dd1c1618378c6f94d522a61c28773c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer vector of 3 components type.  <a href=\"a00304.html#ga6dd1c1618378c6f94d522a61c28773c9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6dd1c1618378c6f94d522a61c28773c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7bb04fb857ef7b520e49f6c381432be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, i8, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac7bb04fb857ef7b520e49f6c381432be\">mediump_i8vec4</a></td></tr>\n<tr class=\"memdesc:gac7bb04fb857ef7b520e49f6c381432be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer vector of 4 components type.  <a href=\"a00304.html#gac7bb04fb857ef7b520e49f6c381432be\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7bb04fb857ef7b520e49f6c381432be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadff3608baa4b5bd3ed28f95c1c2c345d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">mediump_int16</a></td></tr>\n<tr class=\"memdesc:gadff3608baa4b5bd3ed28f95c1c2c345d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer type.  <a href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">More...</a><br /></td></tr>\n<tr class=\"separator:gadff3608baa4b5bd3ed28f95c1c2c345d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga80e72fe94c88498537e8158ba7591c54\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">mediump_int16_t</a></td></tr>\n<tr class=\"memdesc:ga80e72fe94c88498537e8158ba7591c54\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer type.  <a href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">More...</a><br /></td></tr>\n<tr class=\"separator:ga80e72fe94c88498537e8158ba7591c54\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5244cef85d6e870e240c76428a262ae8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">mediump_int32</a></td></tr>\n<tr class=\"memdesc:ga5244cef85d6e870e240c76428a262ae8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer type.  <a href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5244cef85d6e870e240c76428a262ae8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26fc7ced1ad7ca5024f1c973c8dc9180\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">mediump_int32_t</a></td></tr>\n<tr class=\"memdesc:ga26fc7ced1ad7ca5024f1c973c8dc9180\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer type.  <a href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">More...</a><br /></td></tr>\n<tr class=\"separator:ga26fc7ced1ad7ca5024f1c973c8dc9180\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b968f2b86a0442a89c7359171e1d866\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">mediump_int64</a></td></tr>\n<tr class=\"memdesc:ga7b968f2b86a0442a89c7359171e1d866\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer type.  <a href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b968f2b86a0442a89c7359171e1d866\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3bc41bcac61d1ba8f02a6f68ce23f64\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">mediump_int64_t</a></td></tr>\n<tr class=\"memdesc:gac3bc41bcac61d1ba8f02a6f68ce23f64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer type.  <a href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">More...</a><br /></td></tr>\n<tr class=\"separator:gac3bc41bcac61d1ba8f02a6f68ce23f64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6fbd69cbdaa44345bff923a2cf63de7e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">mediump_int8</a></td></tr>\n<tr class=\"memdesc:ga6fbd69cbdaa44345bff923a2cf63de7e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer type.  <a href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6fbd69cbdaa44345bff923a2cf63de7e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d7b3789ecb932c26430009478cac7ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef int8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">mediump_int8_t</a></td></tr>\n<tr class=\"memdesc:ga6d7b3789ecb932c26430009478cac7ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer type.  <a href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d7b3789ecb932c26430009478cac7ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9df98857be695d5a30cb30f5bfa38a80\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">mediump_u16</a></td></tr>\n<tr class=\"memdesc:ga9df98857be695d5a30cb30f5bfa38a80\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9df98857be695d5a30cb30f5bfa38a80\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga400ce8cc566de093a9b28e59e220d6e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u16, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga400ce8cc566de093a9b28e59e220d6e4\">mediump_u16vec1</a></td></tr>\n<tr class=\"memdesc:ga400ce8cc566de093a9b28e59e220d6e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer scalar type.  <a href=\"a00304.html#ga400ce8cc566de093a9b28e59e220d6e4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga400ce8cc566de093a9b28e59e220d6e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga429c201b3e92c90b4ef4356f2be52ee1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u16, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1\">mediump_u16vec2</a></td></tr>\n<tr class=\"memdesc:ga429c201b3e92c90b4ef4356f2be52ee1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga429c201b3e92c90b4ef4356f2be52ee1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac9ba20234b0c3751d45ce575fc71e551\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u16, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gac9ba20234b0c3751d45ce575fc71e551\">mediump_u16vec3</a></td></tr>\n<tr class=\"memdesc:gac9ba20234b0c3751d45ce575fc71e551\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#gac9ba20234b0c3751d45ce575fc71e551\">More...</a><br /></td></tr>\n<tr class=\"separator:gac9ba20234b0c3751d45ce575fc71e551\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5793393686ce5bd2d5968ff9144762b8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u16, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5793393686ce5bd2d5968ff9144762b8\">mediump_u16vec4</a></td></tr>\n<tr class=\"memdesc:ga5793393686ce5bd2d5968ff9144762b8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga5793393686ce5bd2d5968ff9144762b8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5793393686ce5bd2d5968ff9144762b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1bd0e914158bf03135f8a317de6debe9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">mediump_u32</a></td></tr>\n<tr class=\"memdesc:ga1bd0e914158bf03135f8a317de6debe9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1bd0e914158bf03135f8a317de6debe9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8a11ccd2e38f674bbf3c2d1afc232aee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee\">mediump_u32vec1</a></td></tr>\n<tr class=\"memdesc:ga8a11ccd2e38f674bbf3c2d1afc232aee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer scalar type.  <a href=\"a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8a11ccd2e38f674bbf3c2d1afc232aee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94f74851fce338549c705b5f0d601c4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga94f74851fce338549c705b5f0d601c4f\">mediump_u32vec2</a></td></tr>\n<tr class=\"memdesc:ga94f74851fce338549c705b5f0d601c4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga94f74851fce338549c705b5f0d601c4f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94f74851fce338549c705b5f0d601c4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga012c24c8fc69707b90260474c70275a2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga012c24c8fc69707b90260474c70275a2\">mediump_u32vec3</a></td></tr>\n<tr class=\"memdesc:ga012c24c8fc69707b90260474c70275a2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#ga012c24c8fc69707b90260474c70275a2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga012c24c8fc69707b90260474c70275a2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5d43ee8b5dbaa06c327b03b83682598a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u32, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a\">mediump_u32vec4</a></td></tr>\n<tr class=\"memdesc:ga5d43ee8b5dbaa06c327b03b83682598a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5d43ee8b5dbaa06c327b03b83682598a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2af9490085ae3bdf36a544e9dd073610\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">mediump_u64</a></td></tr>\n<tr class=\"memdesc:ga2af9490085ae3bdf36a544e9dd073610\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2af9490085ae3bdf36a544e9dd073610\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga659f372ccb8307d5db5beca942cde5e8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga659f372ccb8307d5db5beca942cde5e8\">mediump_u64vec1</a></td></tr>\n<tr class=\"memdesc:ga659f372ccb8307d5db5beca942cde5e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer scalar type.  <a href=\"a00304.html#ga659f372ccb8307d5db5beca942cde5e8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga659f372ccb8307d5db5beca942cde5e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73a08ef5a74798f3a1a99250b5f86a7d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d\">mediump_u64vec2</a></td></tr>\n<tr class=\"memdesc:ga73a08ef5a74798f3a1a99250b5f86a7d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga73a08ef5a74798f3a1a99250b5f86a7d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1900c6ab74acd392809425953359ef52\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1900c6ab74acd392809425953359ef52\">mediump_u64vec3</a></td></tr>\n<tr class=\"memdesc:ga1900c6ab74acd392809425953359ef52\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#ga1900c6ab74acd392809425953359ef52\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1900c6ab74acd392809425953359ef52\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec7ee455cb379ec2993e81482123e1cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u64, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaec7ee455cb379ec2993e81482123e1cc\">mediump_u64vec4</a></td></tr>\n<tr class=\"memdesc:gaec7ee455cb379ec2993e81482123e1cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#gaec7ee455cb379ec2993e81482123e1cc\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec7ee455cb379ec2993e81482123e1cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1213a22bbb9e4107f07eaa4956f8281\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">mediump_u8</a></td></tr>\n<tr class=\"memdesc:gad1213a22bbb9e4107f07eaa4956f8281\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1213a22bbb9e4107f07eaa4956f8281\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a43050843b141bdc7e85437faef6f55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u8, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga4a43050843b141bdc7e85437faef6f55\">mediump_u8vec1</a></td></tr>\n<tr class=\"memdesc:ga4a43050843b141bdc7e85437faef6f55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer scalar type.  <a href=\"a00304.html#ga4a43050843b141bdc7e85437faef6f55\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a43050843b141bdc7e85437faef6f55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga907f85d4a0eac3d8aaf571e5c2647194\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u8, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194\">mediump_u8vec2</a></td></tr>\n<tr class=\"memdesc:ga907f85d4a0eac3d8aaf571e5c2647194\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194\">More...</a><br /></td></tr>\n<tr class=\"separator:ga907f85d4a0eac3d8aaf571e5c2647194\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaddc6f7748b699254942c5216b68f8f7f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u8, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaddc6f7748b699254942c5216b68f8f7f\">mediump_u8vec3</a></td></tr>\n<tr class=\"memdesc:gaddc6f7748b699254942c5216b68f8f7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#gaddc6f7748b699254942c5216b68f8f7f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaddc6f7748b699254942c5216b68f8f7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaf4ee3b76d43d98da02ec399b99bda4b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u8, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b\">mediump_u8vec4</a></td></tr>\n<tr class=\"memdesc:gaaf4ee3b76d43d98da02ec399b99bda4b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaf4ee3b76d43d98da02ec399b99bda4b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2885a6c89916911e418c06bb76b9bdbb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">mediump_uint16</a></td></tr>\n<tr class=\"memdesc:ga2885a6c89916911e418c06bb76b9bdbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2885a6c89916911e418c06bb76b9bdbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3963b1050fc65a383ee28e3f827b6e3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">mediump_uint16_t</a></td></tr>\n<tr class=\"memdesc:ga3963b1050fc65a383ee28e3f827b6e3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3963b1050fc65a383ee28e3f827b6e3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga34dd5ec1988c443bae80f1b20a8ade5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">mediump_uint32</a></td></tr>\n<tr class=\"memdesc:ga34dd5ec1988c443bae80f1b20a8ade5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga34dd5ec1988c443bae80f1b20a8ade5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4dae276fd29623950de14a6ca2586b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">mediump_uint32_t</a></td></tr>\n<tr class=\"memdesc:gaf4dae276fd29623950de14a6ca2586b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4dae276fd29623950de14a6ca2586b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30652709815ad9404272a31957daa59e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">mediump_uint64</a></td></tr>\n<tr class=\"memdesc:ga30652709815ad9404272a31957daa59e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga30652709815ad9404272a31957daa59e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9b170dd4a8f38448a2dc93987c7875e9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">mediump_uint64_t</a></td></tr>\n<tr class=\"memdesc:ga9b170dd4a8f38448a2dc93987c7875e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9b170dd4a8f38448a2dc93987c7875e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fa92a233b9110861cdbc8c2ccf0b5a3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">mediump_uint8</a></td></tr>\n<tr class=\"memdesc:ga1fa92a233b9110861cdbc8c2ccf0b5a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1fa92a233b9110861cdbc8c2ccf0b5a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadfe65c78231039e90507770db50c98c7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">mediump_uint8_t</a></td></tr>\n<tr class=\"memdesc:gadfe65c78231039e90507770db50c98c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">More...</a><br /></td></tr>\n<tr class=\"separator:gadfe65c78231039e90507770db50c98c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa2d7acc0adb536fab71fe261232a40ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">u16</a></td></tr>\n<tr class=\"memdesc:gaa2d7acc0adb536fab71fe261232a40ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa2d7acc0adb536fab71fe261232a40ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga08c05ba8ffb19f5d14ab584e1e9e9ee5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u16, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">u16vec1</a></td></tr>\n<tr class=\"memdesc:ga08c05ba8ffb19f5d14ab584e1e9e9ee5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer scalar type.  <a href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga08c05ba8ffb19f5d14ab584e1e9e9ee5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a78447eb9d66a114b193f4a25899c16\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u16, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a></td></tr>\n<tr class=\"memdesc:ga2a78447eb9d66a114b193f4a25899c16\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2a78447eb9d66a114b193f4a25899c16\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1c522ca821c27b862fe51cf4024b064b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u16, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">u16vec3</a></td></tr>\n<tr class=\"memdesc:ga1c522ca821c27b862fe51cf4024b064b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1c522ca821c27b862fe51cf4024b064b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga529496d75775fb656a07993ea9af2450\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u16, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">u16vec4</a></td></tr>\n<tr class=\"memdesc:ga529496d75775fb656a07993ea9af2450\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">More...</a><br /></td></tr>\n<tr class=\"separator:ga529496d75775fb656a07993ea9af2450\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8165913e068444f7842302d40ba897b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">u32</a></td></tr>\n<tr class=\"memdesc:ga8165913e068444f7842302d40ba897b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8165913e068444f7842302d40ba897b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae627372cfd5f20dd87db490387b71195\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">u32vec1</a></td></tr>\n<tr class=\"memdesc:gae627372cfd5f20dd87db490387b71195\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer scalar type.  <a href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">More...</a><br /></td></tr>\n<tr class=\"separator:gae627372cfd5f20dd87db490387b71195\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a266e46ee218d0c680f12b35c500cc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a></td></tr>\n<tr class=\"memdesc:ga2a266e46ee218d0c680f12b35c500cc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2a266e46ee218d0c680f12b35c500cc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae267358ff2a41d156d97f5762630235a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">u32vec3</a></td></tr>\n<tr class=\"memdesc:gae267358ff2a41d156d97f5762630235a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae267358ff2a41d156d97f5762630235a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31cef34e4cd04840c54741ff2f7005f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u32, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">u32vec4</a></td></tr>\n<tr class=\"memdesc:ga31cef34e4cd04840c54741ff2f7005f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga31cef34e4cd04840c54741ff2f7005f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf3f312156984c365e9f65620354da70b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">u64</a></td></tr>\n<tr class=\"memdesc:gaf3f312156984c365e9f65620354da70b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf3f312156984c365e9f65620354da70b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf09f3ca4b671a4a4f84505eb4cc865fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">u64vec1</a></td></tr>\n<tr class=\"memdesc:gaf09f3ca4b671a4a4f84505eb4cc865fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer scalar type.  <a href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf09f3ca4b671a4a4f84505eb4cc865fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaef3824ed4fe435a019c5b9dddf53fec5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">u64vec2</a></td></tr>\n<tr class=\"memdesc:gaef3824ed4fe435a019c5b9dddf53fec5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaef3824ed4fe435a019c5b9dddf53fec5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga489b89ba93d4f7b3934df78debc52276\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">u64vec3</a></td></tr>\n<tr class=\"memdesc:ga489b89ba93d4f7b3934df78debc52276\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">More...</a><br /></td></tr>\n<tr class=\"separator:ga489b89ba93d4f7b3934df78debc52276\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3945dd6515d4498cb603e65ff867ab03\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u64, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">u64vec4</a></td></tr>\n<tr class=\"memdesc:ga3945dd6515d4498cb603e65ff867ab03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3945dd6515d4498cb603e65ff867ab03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaecc7082561fc9028b844b6cf3d305d36\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">u8</a></td></tr>\n<tr class=\"memdesc:gaecc7082561fc9028b844b6cf3d305d36\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">More...</a><br /></td></tr>\n<tr class=\"separator:gaecc7082561fc9028b844b6cf3d305d36\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29b349e037f0b24320b4548a143daee2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, u8, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">u8vec1</a></td></tr>\n<tr class=\"memdesc:ga29b349e037f0b24320b4548a143daee2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer scalar type.  <a href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29b349e037f0b24320b4548a143daee2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga518b8d948a6b4ddb72f84d5c3b7b6611\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, u8, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a></td></tr>\n<tr class=\"memdesc:ga518b8d948a6b4ddb72f84d5c3b7b6611\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer vector of 2 components type.  <a href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">More...</a><br /></td></tr>\n<tr class=\"separator:ga518b8d948a6b4ddb72f84d5c3b7b6611\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c5706f6bbe5282e5598acf7e7b377e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, u8, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">u8vec3</a></td></tr>\n<tr class=\"memdesc:ga7c5706f6bbe5282e5598acf7e7b377e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer vector of 3 components type.  <a href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c5706f6bbe5282e5598acf7e7b377e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20779a61de2fd526a17f12fe53ec46b1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, u8, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">u8vec4</a></td></tr>\n<tr class=\"memdesc:ga20779a61de2fd526a17f12fe53ec46b1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer vector of 4 components type.  <a href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga20779a61de2fd526a17f12fe53ec46b1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga91f91f411080c37730856ff5887f5bcf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">uint16_t</a></td></tr>\n<tr class=\"memdesc:ga91f91f411080c37730856ff5887f5bcf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer type.  <a href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga91f91f411080c37730856ff5887f5bcf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2171d9dc1fefb1c82e2817f45b622eac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">uint32_t</a></td></tr>\n<tr class=\"memdesc:ga2171d9dc1fefb1c82e2817f45b622eac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer type.  <a href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2171d9dc1fefb1c82e2817f45b622eac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3999d3e7ff22025c16ddb601e14dfdee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">uint64_t</a></td></tr>\n<tr class=\"memdesc:ga3999d3e7ff22025c16ddb601e14dfdee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer type.  <a href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3999d3e7ff22025c16ddb601e14dfdee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga28d97808322d3c92186e4a0c067d7e8e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">uint8_t</a></td></tr>\n<tr class=\"memdesc:ga28d97808322d3c92186e4a0c067d7e8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer type.  <a href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga28d97808322d3c92186e4a0c067d7e8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00174.html\" title=\"GLM_GTC_type_precision \">glm/gtc/type_precision.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines specific C++-based qualifier types. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"gabe6a542dd6c1d5ffd847f1b9b4c9c9b7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 f32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default 32 bit single-qualifier floating-point scalar. </p>\n<p>32 bit single-qualifier floating-point scalar.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00150\">150</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab12383ed6ac7595ed6fde4d266c58425\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, defaultp &gt; f32mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00552\">552</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga04100c76f7d55a0dd0983ccf05142bff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, defaultp &gt; f32mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00700\">700</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab256cdab5eb582e426d749ae77b5b566\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, defaultp &gt; f32mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00703\">703</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf512b74c4400b68f9fdf9388b3d6aac8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, defaultp &gt; f32mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00706\">706</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga856f3905ee7cc2e4890a8a1d56c150be\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, defaultp &gt; f32mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00553\">553</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1320a08e14fdff3821241eefab6947e9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, defaultp &gt; f32mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00701\">701</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga65261fa8a21045c8646ddff114a56174\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, defaultp &gt; f32mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00704\">704</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab90ade28222f8b861d5ceaf81a3a7f5d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, defaultp &gt; f32mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00707\">707</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga99d1b85ff99956b33da7e9992aad129a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, defaultp &gt; f32mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00554\">554</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3b32ca1e57a4ef91babbc3d35a34ea20\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, defaultp &gt; f32mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00702\">702</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga239b96198771b7add8eea7e6b59840c0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, defaultp &gt; f32mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00705\">705</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaee4da0e9fbd8cfa2f89cb80889719dc3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, defaultp &gt; f32mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00708\">708</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga38e674196ba411d642be40c47bf33939\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; f32, defaultp &gt; f32quat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00805\">805</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga701f32ab5b3fb06996b41f5c0d643805\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, f32, defaultp &gt; f32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00461\">461</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5d6c70e080409a76a257dc55bd8ea2c8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f32, defaultp &gt; f32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00462\">462</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaea5c4518e175162e306d2c2b5ef5ac79\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f32, defaultp &gt; f32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00463\">463</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga31c6ca0e074a44007f49a9a3720b18c8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f32, defaultp &gt; f32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00464\">464</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1d794d240091678f602e8de225b8d8c9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 f64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default 64 bit double-qualifier floating-point scalar. </p>\n<p>64 bit double-qualifier floating-point scalar.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00166\">166</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad9771450a54785d13080cdde0fe20c1d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, defaultp &gt; f64mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Double-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00584\">584</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9ec7c4c79e303c053e30729a95fb2c37\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, defaultp &gt; f64mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Double-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00780\">780</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae3ab5719fc4c1e966631dbbcba8d412a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f64, defaultp &gt; f64mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00783\">783</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac87278e0c702ba8afff76316d4eeb769\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f64, defaultp &gt; f64mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00786\">786</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9b69181efbf8f37ae934f135137b29c0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, defaultp &gt; f64mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00585\">585</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2473d8bf3f4abf967c4d0e18175be6f7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f64, defaultp &gt; f64mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00781\">781</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga916c1aed91cf91f7b41399ebe7c6e185\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, defaultp &gt; f64mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00784\">784</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaab239fa9e35b65a67cbaa6ac082f3675\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f64, defaultp &gt; f64mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00787\">787</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0ecd3f4952536e5ef12702b44d2626fc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, defaultp &gt; f64mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00586\">586</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab7daf79d6bc06a68bea1c6f5e11b5512\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f64, defaultp &gt; f64mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00782\">782</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3e2e66ffbe341a80bc005ba2b9552110\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f64, defaultp &gt; f64mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00785\">785</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae52e2b7077a9ff928a06ab5ce600b81e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, defaultp &gt; f64mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00788\">788</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2b114a2f2af0fe1dfeb569c767822940\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; f64, defaultp &gt; f64quat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00815\">815</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gade502df1ce14f837fae7f60a03ddb9b0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, f64, defaultp &gt; f64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00501\">501</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadc4e1594f9555d919131ee02b17822a2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f64, defaultp &gt; f64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00502\">502</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa7a1ddca75c5f629173bf4772db7a635\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f64, defaultp &gt; f64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00503\">503</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga66e92e57260bdb910609b9a56bf83e97\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f64, defaultp &gt; f64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00504\">504</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaacdc525d6f7bddb3ae95d5c311bd06a1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float float32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00155\">155</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa4947bc8b47c72fceea9bda730ecf603\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 float32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default 32 bit single-qualifier floating-point scalar. </p>\n<p>32 bit single-qualifier floating-point scalar.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00160\">160</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga232fad1b0d6dcc7c16aabde98b2e2a80\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef double float64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00171\">171</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga728366fef72cd96f0a5fa6429f05469e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 float64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default 64 bit double-qualifier floating-point scalar. </p>\n<p>64 bit double-qualifier floating-point scalar.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00176\">176</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4541dc2feb2a31d6ecb5a303f3dd3280\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, defaultp &gt; fmat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00536\">536</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3350c93c3275298f940a42875388e4b4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, defaultp &gt; fmat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00660\">660</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga55a2d2a8eb09b5633668257eb3cad453\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, defaultp &gt; fmat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00663\">663</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga681381f19f11c9e5ee45cda2c56937ff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, defaultp &gt; fmat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00666\">666</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga253d453c20e037730023fea0215cb6f6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, defaultp &gt; fmat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00537\">537</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6af54d70d9beb0a7ef992a879e86b04f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, defaultp &gt; fmat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00661\">661</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa07c86650253672a19dbfb898f3265b8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, defaultp &gt; fmat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00664\">664</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga44e158af77a670ee1b58c03cda9e1619\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, defaultp &gt; fmat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00667\">667</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8cb400c0f4438f2640035d7b9824a0ca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, defaultp &gt; fmat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00538\">538</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8c8aa45aafcc23238edb1d5aeb801774\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, defaultp &gt; fmat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00662\">662</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4295048a78bdf46b8a7de77ec665b497\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, defaultp &gt; fmat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00665\">665</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad01cc6479bde1fd1870f13d3ed9530b3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, defaultp &gt; fmat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00668\">668</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga98b9ed43cf8c5cf1d354b23c7df9119f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, float, defaultp &gt; fvec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00441\">441</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga24273aa02abaecaab7f160bac437a339\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, float, defaultp &gt; fvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00442\">442</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga89930533646b30d021759298aa6bf04a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, float, defaultp &gt; fvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00443\">443</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga713c796c54875cf4092d42ff9d9096b0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, float, defaultp &gt; fvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00444\">444</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6906e1ef0b34064b4b675489c5c38725\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 highp_f32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00149\">149</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga298f7d4d273678d0282812368da27fda\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_f32mat2x2 highp_f32mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> High single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00548\">548</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae5eb02d92b7d4605a4b7f37ae5cb2968\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, highp &gt; highp_f32mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> High single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00690\">690</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0aeb5cb001473b08c88175012708a379\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, highp &gt; highp_f32mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00691\">691</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga88938ee1e7981fa3402e88da6ad74531\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, highp &gt; highp_f32mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00692\">692</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga24f9ef3263b1638564713892cc37981f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_f32mat3x3 highp_f32mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00549\">549</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga36537e701456f12c20e73f469cac4967\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, highp &gt; highp_f32mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00693\">693</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaab691ae40c37976d268d8cac0096e0e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, highp &gt; highp_f32mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00694\">694</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa5086dbd6efb272d13fc88829330861d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, highp &gt; highp_f32mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00695\">695</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga14c90ca49885723f51d06e295587236f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_f32mat4x4 highp_f32mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00550\">550</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga602e119c6b246b4f6edcf66845f2aa0f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, highp &gt; highp_f32mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00696\">696</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga66bffdd8e5c0d3ef9958bbab9ca1ba59\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, highp &gt; highp_f32mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00697\">697</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf1b712b97b2322685fbbed28febe5f84\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, highp &gt; highp_f32mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00698\">698</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4252cf7f5b0e3cd47c3d3badf0ef43b3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; f32, highp &gt; highp_f32quat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00804\">804</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab1b1c9e8667902b78b2c330e4d383a61\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, f32, highp &gt; highp_f32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00456\">456</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0b8ebd4262331e139ff257d7cf2a4b77\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f32, highp &gt; highp_f32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00457\">457</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga522775dbcc6d96246a1c5cf02344fd8c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f32, highp &gt; highp_f32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00458\">458</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0f038d4e09862a74f03d102c59eda73e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f32, highp &gt; highp_f32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00459\">459</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga51d5266017d88f62737c1973923a7cf4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 highp_f64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00165\">165</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf7adb92ce8de0afaff01436b039fd924\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_f64mat2x2 highp_f64mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> High double-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00580\">580</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga773ea237a051827cfc20de960bc73ff0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, highp &gt; highp_f64mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> High double-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00770\">770</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8342c7469384c6d769cacc9e309278d9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f64, highp &gt; highp_f64mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00771\">771</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5a67a7440b9c0d1538533540f99036a5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f64, highp &gt; highp_f64mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00772\">772</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga609bf0ace941d6ab1bb2f9522a04e546\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_f64mat3x3 highp_f64mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00581\">581</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5bdbfb4ce7d05ce1e1b663f50be17e8a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f64, highp &gt; highp_f64mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00773\">773</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7c2cadb9b85cc7e0d125db21ca19dea4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, highp &gt; highp_f64mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00774\">774</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad310b1dddeec9ec837a104e7db8de580\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f64, highp &gt; highp_f64mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00775\">775</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad308e0ed27d64daa4213fb257fcbd5a5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_f64mat4x4 highp_f64mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00582\">582</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga58c4631421e323e252fc716b6103e38c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f64, highp &gt; highp_f64mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00776\">776</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae94823d65648e44d972863c6caa13103\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f64, highp &gt; highp_f64mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00777\">777</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga09a2374b725c4246d263ee36fb66434c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, highp &gt; highp_f64mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00778\">778</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafcfdd74a115163af2ce1093551747352\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; f64, highp &gt; highp_f64quat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00814\">814</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga62c31b133ceee9984fbee05ac4c434a9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, f64, highp &gt; highp_f64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00496\">496</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga670ea1b0a1172bc73b1d7c1e0c26cce2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f64, highp &gt; highp_f64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00497\">497</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacd1196090ece7a69fb5c3e43a7d4d851\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f64, highp &gt; highp_f64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00498\">498</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga61185c44c8cc0b25d9a0f67d8a267444\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f64, highp &gt; highp_f64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High double-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00499\">499</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac5a7f21136e0a78d0a1b9f60ef2f8aea\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 highp_float32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00154\">154</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5376ef18dca9d248897c3363ef5a06b2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 highp_float32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00159\">159</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadbb198a4d7aad82a0f4dc466ef6f6215\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 highp_float64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00170\">170</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaeeb0077198cff40e3f48b1108ece139\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 highp_float64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00175\">175</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae98c88d9a7befa9b5877f49176225535\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_fmat2x2 highp_fmat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> High single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00532\">532</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga28635abcddb2f3e92c33c3f0fcc682ad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, highp &gt; highp_fmat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> High single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00650\">650</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacf111095594996fef29067b2454fccad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, highp &gt; highp_fmat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00651\">651</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4920a1536f161f7ded1d6909b7fef0d2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, highp &gt; highp_fmat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00652\">652</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaed2dc69e0d507d4191092dbd44b3eb75\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_fmat3x3 highp_fmat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00533\">533</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae54e4d1aeb5a0f0c64822e6f1b299e19\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, highp &gt; highp_fmat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00653\">653</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa5b44d3ef6efcf33f44876673a7a936e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, highp &gt; highp_fmat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00654\">654</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga961fac2a885907ffcf4d40daac6615c5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, highp &gt; highp_fmat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00655\">655</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabf28443ce0cc0959077ec39b21f32c39\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_fmat4x4 highp_fmat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00534\">534</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga076961cf2d120c7168b957cb2ed107b3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, highp &gt; highp_fmat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00656\">656</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae406ec670f64170a7437b5e302eeb2cb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, highp &gt; highp_fmat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00657\">657</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaee80c7cd3caa0f2635058656755f6f69\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, highp &gt; highp_fmat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00658\">658</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa1040342c4efdedc8f90e6267db8d41c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, float, highp &gt; highp_fvec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00436\">436</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7c0d196f5fa79f7e892a2f323a0be1ae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, float, highp &gt; highp_fvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High Single-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00437\">437</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6ef77413883f48d6b53b4169b25edbd0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, float, highp &gt; highp_fvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High Single-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00438\">438</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b839abbb44f5102609eed89f6ed61f7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, float, highp &gt; highp_fvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High Single-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00439\">439</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0336abc2604dd2c20c30e036454b64f8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 highp_i16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00047\">47</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga70fdfcc1fd38084bde83c3f06a8b9f19\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i16, highp &gt; highp_i16vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00252\">252</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa7db3ad10947cf70cae6474d05ebd227\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i16, highp &gt; highp_i16vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00253\">253</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5609c8fa2b7eac3dec337d321cb0ca96\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i16, highp &gt; highp_i16vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00254\">254</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7a18659438828f91ccca28f1a1e067b4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i16, highp &gt; highp_i16vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00255\">255</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga727675ac6b5d2fc699520e0059735e25\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 highp_i32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00061\">61</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6a9d71cc62745302f70422b7dc98755c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i32, highp &gt; highp_i32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00272\">272</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa9b4579f8e6f3d9b649a965bcb785530\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i32, highp &gt; highp_i32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00273\">273</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga31e070ea3bdee623e6e18a61ba5718b1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i32, highp &gt; highp_i32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00274\">274</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadf70eaaa230aeed5a4c9f4c9c5c55902\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i32, highp &gt; highp_i32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00275\">275</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac25db6d2b1e2a0f351b77ba3409ac4cd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 highp_i64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00075\">75</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabd2fda3cd208acf5a370ec9b5b3c58d4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i64, highp &gt; highp_i64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00292\">292</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad9d1903cb20899966e8ebe0670889a5f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i64, highp &gt; highp_i64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00293\">293</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga62324224b9c6cce9c6b4db96bb704a8a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i64, highp &gt; highp_i64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00294\">294</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad23b1be9b3bf20352089a6b738f0ebba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i64, highp &gt; highp_i64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00295\">295</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacb88796f2d08ef253d0345aff20c3aee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 highp_i8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00033\">33</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1d8c10949691b0fd990253476f47beb3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i8, highp &gt; highp_i8vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00232\">232</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga50542e4cb9b2f9bec213b66e06145d07\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i8, highp &gt; highp_i8vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00233\">233</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8396bfdc081d9113190d0c39c9f67084\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i8, highp &gt; highp_i8vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00234\">234</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4824e3ddf6e608117dfe4809430737b4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i8, highp &gt; highp_i8vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00235\">235</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5fde0fa4a3852a9dd5d637a92ee74718\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 highp_int16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00052\">52</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacaea06d0a79ef3172e887a7a6ba434ff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 highp_int16_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00056\">56</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga84ed04b4e0de18c977e932d617e7c223\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 highp_int32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00066\">66</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2c71c8bd9e2fe7d2e93ca250d8b6157f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 highp_int32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00070\">70</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga226a8d52b4e3f77aaa6231135e886aac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 highp_int64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00080\">80</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga73c6abb280a45feeff60f9accaee91f3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 highp_int64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00084\">84</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad0549c902a96a7164e4ac858d5f39dbf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 highp_int8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00038\">38</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1085c50dd8fbeb5e7e609b1c127492a5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 highp_int8_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00042\">42</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8e62c883d13f47015f3b70ed88751369\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 highp_u16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00105\">105</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad064202b4cf9a2972475c03de657cb39\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u16, highp &gt; highp_u16vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00354\">354</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga791b15ceb3f1e09d1a0ec6f3057ca159\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u16, highp &gt; highp_u16vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00355\">355</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacfd806749008f0ade6ac4bb9dd91082f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u16, highp &gt; highp_u16vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00356\">356</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8a85a3d54a8a9e14fe7a1f96196c4f61\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u16, highp &gt; highp_u16vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00357\">357</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7a6f1929464dcc680b16381a4ee5f2cf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 highp_u32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00119\">119</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0e35a565b9036bfc3989f5e23a0792e3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u32, highp &gt; highp_u32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00374\">374</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2f256334f83fba4c2d219e414b51df6c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u32, highp &gt; highp_u32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00375\">375</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf14d7a50502464e7cbfa074f24684cb1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u32, highp &gt; highp_u32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00376\">376</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga22166f0da65038b447f3c5e534fff1c2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u32, highp &gt; highp_u32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00377\">377</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0c181fdf06a309691999926b6690c969\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 highp_u64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00133\">133</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae4fe774744852c4d7d069be2e05257ab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u64, highp &gt; highp_u64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00394\">394</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga78f77b8b2d17b431ac5a68c0b5d7050d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u64, highp &gt; highp_u64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00395\">395</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga41bdabea6e589029659331ba47eb78c1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u64, highp &gt; highp_u64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00396\">396</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4f15b41aa24b11cc42ad5798c04a2325\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u64, highp &gt; highp_u64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00397\">397</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacd1259f3a9e8d2a9df5be2d74322ef9c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 highp_u8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00091\">91</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8408cb76b6550ff01fa0a3024e7b68d2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u8, highp &gt; highp_u8vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00334\">334</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga27585b7c3ab300059f11fcba465f6fd2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u8, highp &gt; highp_u8vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00335\">335</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga45721c13b956eb691cbd6c6c1429167a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u8, highp &gt; highp_u8vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00336\">336</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae0b75ad0fed8c00ddc0b5ce335d31060\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u8, highp &gt; highp_u8vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00337\">337</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga746dc6da204f5622e395f492997dbf57\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 highp_uint16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00110\">110</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacf54c3330ef60aa3d16cb676c7bcb8c7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 highp_uint16_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00114\">114</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga256b12b650c3f2fb86878fd1c5db8bc3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 highp_uint32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00124\">124</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae978599c9711ac263ba732d4ac225b0e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 highp_uint32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00128\">128</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa38d732f5d4a7bc42a1b43b9d3c141ce\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 highp_uint64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00138\">138</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa46172d7dc1c7ffe3e78107ff88adf08\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 highp_uint64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00142\">142</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga97432f9979e73e66567361fd01e4cffb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 highp_uint8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00096\">96</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac4e00a26a2adb5f2c0a7096810df29e5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 highp_uint8_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00100\">100</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3ab5fe184343d394fb6c2723c3ee3699\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 i16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00048\">48</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafe730798732aa7b0647096a004db1b1c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i16, defaultp &gt; i16vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>16 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00257\">257</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2996630ba7b10535af8e065cf326f761\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i16, defaultp &gt; i16vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>16 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00258\">258</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae9c90a867a6026b1f6eab00456f3fb8b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i16, defaultp &gt; i16vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>16 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00259\">259</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga550831bfc26d1e0101c1cb3d79938c06\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i16, defaultp &gt; i16vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>16 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00260\">260</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga96faea43ac5f875d2d3ffbf8d213e3eb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 i32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00062\">62</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga54b8a4e0f5a7203a821bf8e9c1265bcf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i32, defaultp &gt; i32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00277\">277</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b44026374982dcd1e52d22bac99247e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i32, defaultp &gt; i32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00278\">278</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7f526b5cccef126a2ebcf9bdd890394e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i32, defaultp &gt; i32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00279\">279</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga866a05905c49912309ed1fa5f5980e61\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i32, defaultp &gt; i32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00280\">280</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadb997e409103d4da18abd837e636a496\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 i64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00076\">76</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2b65767f8b5aed1bd1cf86c541662b50\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i64, defaultp &gt; i64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00297\">297</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga48310188e1d0c616bf8d78c92447523b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i64, defaultp &gt; i64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00298\">298</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga667948cfe6fb3d6606c750729ec49f77\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i64, defaultp &gt; i64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00299\">299</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa4e31c3d9de067029efeb161a44b0232\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i64, defaultp &gt; i64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00300\">300</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga302ec977b0c0c3ea245b6c9275495355\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 i8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00034\">34</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7e80d927ff0a3861ced68dfff8a4020b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i8, defaultp &gt; i8vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>8 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00237\">237</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad06935764d78f43f9d542c784c2212ec\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i8, defaultp &gt; i8vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>8 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00238\">238</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5a08d36cf7917cd19d081a603d0eae3e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i8, defaultp &gt; i8vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>8 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00239\">239</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4177a44206121dabc8c4ff1c0f544574\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i8, defaultp &gt; i8vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>8 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00240\">240</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae8f5e3e964ca2ae240adc2c0d74adede\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 int16_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00057\">57</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga042ef09ff2f0cb24a36f541bcb3a3710\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 int32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00071\">71</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga322a7d7d2c2c68994dc872a33de63c61\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 int64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00085\">85</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4bf09d8838a86866b39ee6e109341645\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 int8_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00043\">43</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaeea53879fc327293cf3352a409b7867b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 lowp_f32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00147\">147</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga52409bc6d4a2ce3421526c069220d685\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_f32mat2x2 lowp_f32mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Low single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00540\">540</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1d091b6abfba1772450e1745a06525bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, lowp &gt; lowp_f32mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Low single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00670\">670</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga961ccb34cd1a5654c772c8709e001dc5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, lowp &gt; lowp_f32mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00671\">671</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacc6bf0209dda0c7c14851a646071c974\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, lowp &gt; lowp_f32mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00672\">672</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4187f89f196505b40e63f516139511e5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_f32mat3x3 lowp_f32mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00541\">541</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac53f9d7ab04eace67adad026092fb1e8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, lowp &gt; lowp_f32mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00673\">673</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga841211b641cff1fcf861bdb14e5e4abc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, lowp &gt; lowp_f32mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00674\">674</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga21b1b22dec013a72656e3644baf8a1e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, lowp &gt; lowp_f32mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00675\">675</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga766aed2871e6173a81011a877f398f04\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_f32mat4x4 lowp_f32mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00542\">542</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae6f3fcb702a666de07650c149cfa845a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, lowp &gt; lowp_f32mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00676\">676</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac21eda58a1475449a5709b412ebd776c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, lowp &gt; lowp_f32mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00677\">677</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4143d129898f91545948c46859adce44\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, lowp &gt; lowp_f32mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00678\">678</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa3ba60ef8f69c6aeb1629594eaa95347\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; f32, lowp &gt; lowp_f32quat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00802\">802</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga43e5b41c834fcaf4db5a831c0e28128e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, f32, lowp &gt; lowp_f32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00446\">446</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf3b694b2b8ded7e0b9f07b061917e1a0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f32, lowp &gt; lowp_f32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00447\">447</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf739a2cd7b81783a43148b53e40d983b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f32, lowp &gt; lowp_f32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00448\">448</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4e2e1debe022074ab224c9faf856d374\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f32, lowp &gt; lowp_f32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00449\">449</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabc7a97c07cbfac8e35eb5e63beb4b679\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 lowp_f64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00163\">163</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafc730f6b4242763b0eda0ffa25150292\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_f64mat2x2 lowp_f64mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Low double-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00572\">572</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga771fda9109933db34f808d92b9b84d7e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, lowp &gt; lowp_f64mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Low double-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00750\">750</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga39e90adcffe33264bd608fa9c6bd184b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f64, lowp &gt; lowp_f64mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00751\">751</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga50265a202fbfe0a25fc70066c31d9336\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f64, lowp &gt; lowp_f64mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00752\">752</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga58119a41d143ebaea0df70fe882e8a40\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_f64mat3x3 lowp_f64mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00573\">573</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab0eb2d65514ee3e49905aa2caad8c0ad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f64, lowp &gt; lowp_f64mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00753\">753</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac8f8a12ee03105ef8861dc652434e3b7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, lowp &gt; lowp_f64mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00754\">754</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gade8d1edfb23996ab6c622e65e3893271\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f64, lowp &gt; lowp_f64mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00755\">755</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7451266e67794bd1125163502bc4a570\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_f64mat4x4 lowp_f64mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00574\">574</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab0cecb80fd106bc369b9e46a165815ce\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f64, lowp &gt; lowp_f64mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00756\">756</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae731613b25db3a5ef5a05d21e57a57d3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f64, lowp &gt; lowp_f64mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00757\">757</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8c9cd734e03cd49674f3e287aa4a6f95\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, lowp &gt; lowp_f64mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00758\">758</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa3ee2bc4af03cc06578b66b3e3f878ae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; f64, lowp &gt; lowp_f64quat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00812\">812</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf2d02c5f4d59135b9bc524fe317fd26b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, f64, lowp &gt; lowp_f64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00486\">486</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4e641a54d70c81eabf56c25c966d04bd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f64, lowp &gt; lowp_f64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00487\">487</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae7a4711107b7d078fc5f03ce2227b90b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f64, lowp &gt; lowp_f64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00488\">488</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa666bb9e6d204d3bea0b3a39a3a335f4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f64, lowp &gt; lowp_f64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low double-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00489\">489</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga41b0d390bd8cc827323b1b3816ff4bf8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 lowp_float32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00152\">152</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaea881cae4ddc6c0fbf7cc5b08177ca5b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 lowp_float32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00157\">157</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3714dab2c16a6545a405cb0c3b3aaa6f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 lowp_float64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00168\">168</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7286a37076a09da140df18bfa75d4e38\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 lowp_float64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00173\">173</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5bba0ce31210e274f73efacd3364c03f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_fmat2x2 lowp_fmat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Low single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00524\">524</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab0feb11edd0d3ab3e8ed996d349a5066\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, lowp &gt; lowp_fmat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Low single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00630\">630</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga71cdb53801ed4c3aadb3603c04723210\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, lowp &gt; lowp_fmat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00631\">631</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaab217601c74974a84acbca428123ecf7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, lowp &gt; lowp_fmat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00632\">632</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga83079315e230e8f39728f4bf0d2f9a9b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_fmat3x3 lowp_fmat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00525\">525</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga49b98e7d71804af45d86886a489e633c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, lowp &gt; lowp_fmat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00633\">633</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaba56275dd04a7a61560b0e8fa5d365b4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, lowp &gt; lowp_fmat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00634\">634</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga28733aec7288191b314d42154fd0b690\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, lowp &gt; lowp_fmat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00635\">635</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5803cb9ae26399762d8bba9e0b2fc09f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef lowp_fmat4x4 lowp_fmat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00526\">526</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5868c2dcce41cc3ea5edcaeae239f62c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, lowp &gt; lowp_fmat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00636\">636</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5e649bbdb135fbcb4bfe950f4c73a444\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, lowp &gt; lowp_fmat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00637\">637</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac2f5263708ac847b361a9841e74ddf9f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, lowp &gt; lowp_fmat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00638\">638</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga346b2336fff168a7e0df1583aae3e5a5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, float, lowp &gt; lowp_fvec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00426\">426</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga62a32c31f4e2e8ca859663b6e3289a2d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, float, lowp &gt; lowp_fvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00427\">427</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga40b5c557efebb5bb99d6b9aa81095afa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, float, lowp &gt; lowp_fvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00428\">428</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga755484ffbe39ae3db2875953ed04e7b7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, float, lowp &gt; lowp_fvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low single-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00429\">429</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga392b673fd10847bfb78fb808c6cf8ff7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 lowp_i16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00045\">45</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga501a2f313f1c220eef4ab02bdabdc3c6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i16, lowp &gt; lowp_i16vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00242\">242</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7cac84b520a6b57f2fbd880d3d63c51b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i16, lowp &gt; lowp_i16vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00243\">243</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab69ef9cbc2a9214bf5596c528c801b72\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i16, lowp &gt; lowp_i16vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00244\">244</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1d47d94d17c2406abdd1f087a816e387\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i16, lowp &gt; lowp_i16vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00245\">245</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7ff73a45cea9613ebf1a9fad0b9f82ac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 lowp_i32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00059\">59</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae31ac3608cf643ceffd6554874bec4a0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i32, lowp &gt; lowp_i32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00262\">262</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga867a3c2d99ab369a454167d2c0a24dbd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i32, lowp &gt; lowp_i32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00263\">263</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5fe17c87ede1b1b4d92454cff4da076d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i32, lowp &gt; lowp_i32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00264\">264</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac9b2eb4296ffe50a32eacca9ed932c08\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i32, lowp &gt; lowp_i32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00265\">265</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga354736e0c645099cd44c42fb2f87c2b8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 lowp_i64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00073\">73</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab0f7d875db5f3cc9f3168c5a0ed56437\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i64, lowp &gt; lowp_i64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00282\">282</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab485c48f06a4fdd6b8d58d343bb49f3c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i64, lowp &gt; lowp_i64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00283\">283</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5cb1dc9e8d300c2cdb0d7ff2308fa36c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i64, lowp &gt; lowp_i64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00284\">284</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabb4229a4c1488bf063eed0c45355bb9c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i64, lowp &gt; lowp_i64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00285\">285</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga552a6bde5e75984efb0f863278da2e54\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 lowp_i8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00031\">31</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga036d6c7ca9fbbdc5f3871bfcb937c85c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i8, lowp &gt; lowp_i8vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00222\">222</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac03e5099d27eeaa74b6016ea435a1df2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i8, lowp &gt; lowp_i8vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00223\">223</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae2f43ace6b5b33ab49516d9e40af1845\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i8, lowp &gt; lowp_i8vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00224\">224</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6d388e9b9aa1b389f0672d9c7dfc61c5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i8, lowp &gt; lowp_i8vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00225\">225</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga698e36b01167fc0f037889334dce8def\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 lowp_int16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00050\">50</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b2cd8d31eb345b2d641d9261c38db1a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 lowp_int16_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00054\">54</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga864aabca5f3296e176e0c3ed9cc16b02\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 lowp_int32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00064\">64</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0350631d35ff800e6133ac6243b13cbc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 lowp_int32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00068\">68</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf645b1a60203b39c0207baff5e3d8c3c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 lowp_int64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00078\">78</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaebf341fc4a5be233f7dde962c2e33847\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 lowp_int64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00082\">82</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga760bcf26fdb23a2c3ecad3c928a19ae6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 lowp_int8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00036\">36</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga119c41d73fe9977358174eb3ac1035a3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 lowp_int8_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00040\">40</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga504ce1631cb2ac02fcf1d44d8c2aa126\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 lowp_u16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00103\">103</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa6aab4ee7189b86716f5d7015d43021d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u16, lowp &gt; lowp_u16vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00344\">344</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2a7d997da9ac29cb931e35bd399f58df\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u16, lowp &gt; lowp_u16vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00345\">345</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac0253db6c3d3bae1f591676307a9dd8c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u16, lowp &gt; lowp_u16vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00346\">346</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa7f00459b9a2e5b2757e70afc0c189e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u16, lowp &gt; lowp_u16vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00347\">347</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4f072ada9552e1e480bbb3b1acde5250\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 lowp_u32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00117\">117</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabed3be8dfdc4a0df4bf3271dbd7344c4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u32, lowp &gt; lowp_u32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00364\">364</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf7e286e81347011e257ee779524e73b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u32, lowp &gt; lowp_u32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00365\">365</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad3ad390560a671b1f676fbf03cd3aa15\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u32, lowp &gt; lowp_u32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00366\">366</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4502885718742aa238c36a312c3f3f20\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u32, lowp &gt; lowp_u32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00367\">367</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga30069d1f02b19599cbfadf98c23ac6ed\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 lowp_u64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00131\">131</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga859be7b9d3a3765c1cafc14dbcf249a6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u64, lowp &gt; lowp_u64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00384\">384</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga581485db4ba6ddb501505ee711fd8e42\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u64, lowp &gt; lowp_u64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00385\">385</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa4a8682bec7ec8af666ef87fae38d5d1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u64, lowp &gt; lowp_u64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00386\">386</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6fccc89c34045c86339f6fa781ce96de\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u64, lowp &gt; lowp_u64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00387\">387</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1b09f03da7ac43055c68a349d5445083\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 lowp_u8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00089\">89</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4b2e0e10d8d154fec9cab50e216588ec\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u8, lowp &gt; lowp_u8vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00324\">324</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae6f63fa38635431e51a8f2602f15c566\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u8, lowp &gt; lowp_u8vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00325\">325</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga150dc47e31c6b8cf8461803c8d56f7bd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u8, lowp &gt; lowp_u8vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00326\">326</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9910927f3a4d1addb3da6a82542a8287\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u8, lowp &gt; lowp_u8vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00327\">327</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad68bfd9f881856fc863a6ebca0b67f78\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 lowp_uint16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00108\">108</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga91c4815f93177eb423362fd296a87e9f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 lowp_uint16_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00112\">112</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa6a5b461bbf5fe20982472aa51896d4b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 lowp_uint32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00122\">122</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf1b735b4b1145174f4e4167d13778f9b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 lowp_uint32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00126\">126</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa212b805736a759998e312cbdd550fae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 lowp_uint64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00136\">136</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8dd3a3281ae5c970ffe0c41d538aa153\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 lowp_uint64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00140\">140</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf49470869e9be2c059629b250619804e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 lowp_uint8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00094\">94</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga667b2ece2b258be898812dc2177995d1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 lowp_uint8_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00098\">98</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3b27fcd9eaa2757f0aaf6b0ce0d85c80\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 mediump_f32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00148\">148</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf9020c6176a75bc84828ab01ea7dac25\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_f32mat2x2 mediump_f32mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Medium single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00544\">544</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa3ca74a44102035b3ffb5c9c52dfdd3f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, mediump &gt; mediump_f32mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Low single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00680\">680</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad4cc829ab1ad3e05ac0a24828a3c95cf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, mediump &gt; mediump_f32mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00681\">681</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae71445ac6cd0b9fba3e5c905cd030fb1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, mediump &gt; mediump_f32mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00682\">682</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaaf878d0d7bfc0aac054fe269a886ca8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_f32mat3x3 mediump_f32mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00545\">545</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaab39454f56cf9fc6d940358ce5e6a0f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, mediump &gt; mediump_f32mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00683\">683</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacd80ad7640e9e32f2edcb8330b1ffe4f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, mediump &gt; mediump_f32mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00684\">684</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8df705d775b776f5ae6b39e2ab892899\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, mediump &gt; mediump_f32mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00685\">685</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4491baaebbc46a20f1cb5da985576bf4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_f32mat4x4 mediump_f32mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00546\">546</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab005efe0fa4de1a928e8ddec4bc2c43f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, mediump &gt; mediump_f32mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00686\">686</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gade108f16633cf95fa500b5b8c36c8b00\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, mediump &gt; mediump_f32mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00687\">687</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga936e95b881ecd2d109459ca41913fa99\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, mediump &gt; mediump_f32mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00688\">688</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa40c03d52dbfbfaf03e75773b9606ff3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; f32, mediump &gt; mediump_f32quat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00803\">803</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabb33cab7d7c74cc14aa95455d0690865\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, f32, mediump &gt; mediump_f32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00451\">451</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad6eb11412a3161ca8dc1d63b2a307c4b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f32, mediump &gt; mediump_f32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00452\">452</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga062ffef2973bd8241df993c3b30b327c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f32, mediump &gt; mediump_f32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00453\">453</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad80c84bcd5f585840faa6179f6fd446c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f32, mediump &gt; mediump_f32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>core_precision </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00454\">454</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6d40381d78472553f878f66e443feeef\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 mediump_f64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00164\">164</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac1281da5ded55047e8892b0e1f1ae965\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_f64mat2x2 mediump_f64mat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Medium double-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00576\">576</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4fd527644cccbca4cb205320eab026f3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f64, mediump &gt; mediump_f64mat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Medium double-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00760\">760</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafd9a6ebc0c7b95f5c581d00d16a17c54\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f64, mediump &gt; mediump_f64mat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00761\">761</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf306dd69e53633636aee38cea79d4cb7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f64, mediump &gt; mediump_f64mat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00762\">762</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad35fb67eb1d03c5a514f0bd7aed1c776\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_f64mat3x3 mediump_f64mat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00577\">577</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacd926d36a72433f6cac51dd60fa13107\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f64, mediump &gt; mediump_f64mat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00763\">763</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga84d88a6e3a54ccd2b67e195af4a4c23e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f64, mediump &gt; mediump_f64mat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00764\">764</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad38c544d332b8c4bd0b70b1bd9feccc2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f64, mediump &gt; mediump_f64mat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00765\">765</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa805ef691c711dc41e2776cfb67f5cf5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_f64mat4x4 mediump_f64mat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00578\">578</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga17d36f0ea22314117e1cec9594b33945\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f64, mediump &gt; mediump_f64mat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00766\">766</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga54697a78f9a4643af6a57fc2e626ec0d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f64, mediump &gt; mediump_f64mat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00767\">767</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga66edb8de17b9235029472f043ae107e9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f64, mediump &gt; mediump_f64mat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00768\">768</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5e52f485059ce6e3010c590b882602c9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef qua&lt; f64, mediump &gt; mediump_f64quat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00813\">813</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac30fdf8afa489400053275b6a3350127\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, f64, mediump &gt; mediump_f64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00491\">491</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8ebc04ecf6440c4ee24718a16600ce6b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, f64, mediump &gt; mediump_f64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00492\">492</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga461c4c7d0757404dd0dba931760b25cf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, f64, mediump &gt; mediump_f64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00493\">493</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacfea053bd6bb3eddb996a4f94de22a3e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, f64, mediump &gt; mediump_f64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium double-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00494\">494</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7812bf00676fb1a86dcd62cca354d2c7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 mediump_float32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00153\">153</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae4dee61f8fe1caccec309fbed02faf12\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float32 mediump_float32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium 32 bit single-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00158\">158</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab83d8aae6e4f115e97a785e8574a115f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 mediump_float64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00169\">169</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac61843e4fa96c1f4e9d8316454f32a8e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef float64 mediump_float64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium 64 bit double-qualifier floating-point scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00174\">174</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga74e9133378fd0b4da8ac0bc0876702ff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_fmat2x2 mediump_fmat2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Medium single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00528\">528</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga98a687c17b174ea316b5f397b64f44bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 2, f32, mediump &gt; mediump_fmat2x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> Medium single-qualifier floating-point 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00640\">640</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa03f939d90d5ef157df957d93f0b9a64\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 3, f32, mediump &gt; mediump_fmat2x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00641\">641</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga35223623e9ccebd8a281873b71b7d213\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 2, 4, f32, mediump &gt; mediump_fmat2x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00642\">642</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga80823dfad5dba98512c76af498343847\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_fmat3x3 mediump_fmat3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00529\">529</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga42569e5b92f8635cedeadb1457ee1467\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 2, f32, mediump &gt; mediump_fmat3x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00643\">643</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa6f526388c74a66b3d52315a14d434ae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 3, f32, mediump &gt; mediump_fmat3x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00644\">644</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaefe8ef520c6cb78590ebbefe648da4d4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 3, 4, f32, mediump &gt; mediump_fmat3x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00645\">645</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac1c38778c0b5a1263f07753c05a4f7b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mediump_fmat4x4 mediump_fmat4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00530\">530</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacea38a85893e17e6834b6cb09a9ad0cf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 2, f32, mediump &gt; mediump_fmat4x2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00646\">646</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga41ad497f7eae211556aefd783cb02b90\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 3, f32, mediump &gt; mediump_fmat4x3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00647\">647</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga22e27beead07bff4d5ce9d6065a57279\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef mat&lt; 4, 4, f32, mediump &gt; mediump_fmat4x4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00648\">648</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga367964fc2133d3f1b5b3755ff9cf6c9b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, float, mediump &gt; mediump_fvec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium single-qualifier floating-point vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00431\">431</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga44bfa55cda5dbf53f24a1fb7610393d6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, float, mediump &gt; mediump_fvec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium Single-qualifier floating-point vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00432\">432</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga999dc6703ad16e3d3c26b74ea8083f07\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, float, mediump &gt; mediump_fvec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium Single-qualifier floating-point vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00433\">433</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1bed890513c0f50b7e7ba4f7f359dbfb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, float, mediump &gt; mediump_fvec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium Single-qualifier floating-point vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00434\">434</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga62a17cddeb4dffb4e18fe3aea23f051a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 mediump_i16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00046\">46</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacc44265ed440bf5e6e566782570de842\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i16, mediump &gt; mediump_i16vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00247\">247</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4b5e2c9aaa5d7717bf71179aefa12e88\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i16, mediump &gt; mediump_i16vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00248\">248</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3be6c7fc5fe08fa2274bdb001d5f2633\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i16, mediump &gt; mediump_i16vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00249\">249</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf52982bb23e3a3772649b2c5bb84b107\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i16, mediump &gt; mediump_i16vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00250\">250</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf5e94bf2a20af7601787c154751dc2e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 mediump_i32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00060\">60</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga46a57f71e430637559097a732b550a7e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i32, mediump &gt; mediump_i32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00267\">267</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga20bf224bd4f8a24ecc4ed2004a40c219\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i32, mediump &gt; mediump_i32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00268\">268</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga13a221b910aa9eb1b04ca1c86e81015a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i32, mediump &gt; mediump_i32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00269\">269</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6addd4dfee87fc09ab9525e3d07db4c8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i32, mediump &gt; mediump_i32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00270\">270</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3ebcb1f6d8d8387253de8bccb058d77f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 mediump_i64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00074\">74</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8343e9d244fb17a5bbf0d94d36b3695e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i64, mediump &gt; mediump_i64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00287\">287</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2c94aeae3457325944ca1059b0b68330\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i64, mediump &gt; mediump_i64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00288\">288</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8089722ffdf868cdfe721dea1fb6a90e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i64, mediump &gt; mediump_i64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00289\">289</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabf1f16c5ab8cb0484bd1e846ae4368f1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i64, mediump &gt; mediump_i64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00290\">290</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacf1ded173e1e2d049c511d095b259e21\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 mediump_i8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00032\">32</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga85e8893f4ae3630065690a9000c0c483\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, i8, mediump &gt; mediump_i8vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00227\">227</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2a8bdc32184ea0a522ef7bd90640cf67\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, i8, mediump &gt; mediump_i8vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00228\">228</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6dd1c1618378c6f94d522a61c28773c9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, i8, mediump &gt; mediump_i8vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00229\">229</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac7bb04fb857ef7b520e49f6c381432be\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, i8, mediump &gt; mediump_i8vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00230\">230</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadff3608baa4b5bd3ed28f95c1c2c345d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 mediump_int16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00051\">51</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga80e72fe94c88498537e8158ba7591c54\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int16 mediump_int16_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00055\">55</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5244cef85d6e870e240c76428a262ae8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 mediump_int32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00065\">65</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga26fc7ced1ad7ca5024f1c973c8dc9180\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int32 mediump_int32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00069\">69</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7b968f2b86a0442a89c7359171e1d866\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 mediump_int64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00079\">79</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac3bc41bcac61d1ba8f02a6f68ce23f64\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int64 mediump_int64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00083\">83</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6fbd69cbdaa44345bff923a2cf63de7e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 mediump_int8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00037\">37</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6d7b3789ecb932c26430009478cac7ae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::int8 mediump_int8_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00041\">41</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9df98857be695d5a30cb30f5bfa38a80\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 mediump_u16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00104\">104</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga400ce8cc566de093a9b28e59e220d6e4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u16, mediump &gt; mediump_u16vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00349\">349</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga429c201b3e92c90b4ef4356f2be52ee1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u16, mediump &gt; mediump_u16vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00350\">350</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac9ba20234b0c3751d45ce575fc71e551\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u16, mediump &gt; mediump_u16vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00351\">351</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5793393686ce5bd2d5968ff9144762b8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u16, mediump &gt; mediump_u16vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00352\">352</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1bd0e914158bf03135f8a317de6debe9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 mediump_u32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00118\">118</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8a11ccd2e38f674bbf3c2d1afc232aee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u32, mediump &gt; mediump_u32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00369\">369</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga94f74851fce338549c705b5f0d601c4f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u32, mediump &gt; mediump_u32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00370\">370</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga012c24c8fc69707b90260474c70275a2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u32, mediump &gt; mediump_u32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00371\">371</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5d43ee8b5dbaa06c327b03b83682598a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u32, mediump &gt; mediump_u32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00372\">372</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2af9490085ae3bdf36a544e9dd073610\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 mediump_u64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00132\">132</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga659f372ccb8307d5db5beca942cde5e8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u64, mediump &gt; mediump_u64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00389\">389</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga73a08ef5a74798f3a1a99250b5f86a7d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u64, mediump &gt; mediump_u64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00390\">390</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1900c6ab74acd392809425953359ef52\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u64, mediump &gt; mediump_u64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00391\">391</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaec7ee455cb379ec2993e81482123e1cc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u64, mediump &gt; mediump_u64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00392\">392</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad1213a22bbb9e4107f07eaa4956f8281\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 mediump_u8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00090\">90</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4a43050843b141bdc7e85437faef6f55\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u8, mediump &gt; mediump_u8vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00329\">329</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga907f85d4a0eac3d8aaf571e5c2647194\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u8, mediump &gt; mediump_u8vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00330\">330</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaddc6f7748b699254942c5216b68f8f7f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u8, mediump &gt; mediump_u8vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00331\">331</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaf4ee3b76d43d98da02ec399b99bda4b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u8, mediump &gt; mediump_u8vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00332\">332</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2885a6c89916911e418c06bb76b9bdbb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 mediump_uint16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00109\">109</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3963b1050fc65a383ee28e3f827b6e3e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 mediump_uint16_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00113\">113</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga34dd5ec1988c443bae80f1b20a8ade5f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 mediump_uint32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00123\">123</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf4dae276fd29623950de14a6ca2586b5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 mediump_uint32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00127\">127</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga30652709815ad9404272a31957daa59e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 mediump_uint64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00137\">137</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9b170dd4a8f38448a2dc93987c7875e9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 mediump_uint64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00141\">141</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1fa92a233b9110861cdbc8c2ccf0b5a3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 mediump_uint8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00095\">95</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadfe65c78231039e90507770db50c98c7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 mediump_uint8_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00099\">99</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa2d7acc0adb536fab71fe261232a40ff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 u16</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00106\">106</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga08c05ba8ffb19f5d14ab584e1e9e9ee5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u16, defaultp &gt; u16vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00359\">359</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2a78447eb9d66a114b193f4a25899c16\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u16, defaultp &gt; u16vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00360\">360</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1c522ca821c27b862fe51cf4024b064b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u16, defaultp &gt; u16vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00361\">361</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga529496d75775fb656a07993ea9af2450\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u16, defaultp &gt; u16vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00362\">362</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8165913e068444f7842302d40ba897b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 u32</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00120\">120</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae627372cfd5f20dd87db490387b71195\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u32, defaultp &gt; u32vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00379\">379</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2a266e46ee218d0c680f12b35c500cc0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u32, defaultp &gt; u32vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00380\">380</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae267358ff2a41d156d97f5762630235a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u32, defaultp &gt; u32vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00381\">381</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga31cef34e4cd04840c54741ff2f7005f0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u32, defaultp &gt; u32vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00382\">382</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf3f312156984c365e9f65620354da70b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 u64</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00134\">134</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf09f3ca4b671a4a4f84505eb4cc865fd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u64, defaultp &gt; u64vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00399\">399</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaef3824ed4fe435a019c5b9dddf53fec5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u64, defaultp &gt; u64vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00400\">400</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga489b89ba93d4f7b3934df78debc52276\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u64, defaultp &gt; u64vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00401\">401</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3945dd6515d4498cb603e65ff867ab03\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u64, defaultp &gt; u64vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00402\">402</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaecc7082561fc9028b844b6cf3d305d36\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 u8</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00092\">92</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga29b349e037f0b24320b4548a143daee2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 1, u8, defaultp &gt; u8vec1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00339\">339</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga518b8d948a6b4ddb72f84d5c3b7b6611\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 2, u8, defaultp &gt; u8vec2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00340\">340</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7c5706f6bbe5282e5598acf7e7b377e2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 3, u8, defaultp &gt; u8vec3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00341\">341</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga20779a61de2fd526a17f12fe53ec46b1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt; 4, u8, defaultp &gt; u8vec4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00342\">342</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga91f91f411080c37730856ff5887f5bcf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 uint16_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00115\">115</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2171d9dc1fefb1c82e2817f45b622eac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 uint32_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00129\">129</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3999d3e7ff22025c16ddb601e14dfdee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 uint64_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00143\">143</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga28d97808322d3c92186e4a0c067d7e8e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 uint8_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00304.html\" title=\"Include <glm/gtc/type_precision.hpp> to use the features of this extension. \">GLM_GTC_type_precision</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00035_source.html#l00101\">101</a> of file <a class=\"el\" href=\"a00035_source.html\">fwd.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00305.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_type_ptr</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_type_ptr<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00175.html\" title=\"GLM_GTC_type_ptr \">glm/gtc/type_ptr.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga04409e74dc3da251d2501acf5b4b546c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga04409e74dc3da251d2501acf5b4b546c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga04409e74dc3da251d2501acf5b4b546c\">make_mat2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga04409e74dc3da251d2501acf5b4b546c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga04409e74dc3da251d2501acf5b4b546c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04409e74dc3da251d2501acf5b4b546c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae49e1c7bcd5abec74d1c34155031f663\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae49e1c7bcd5abec74d1c34155031f663\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gae49e1c7bcd5abec74d1c34155031f663\">make_mat2x2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:gae49e1c7bcd5abec74d1c34155031f663\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#gae49e1c7bcd5abec74d1c34155031f663\">More...</a><br /></td></tr>\n<tr class=\"separator:gae49e1c7bcd5abec74d1c34155031f663\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga21982104164789cf8985483aaefc25e8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga21982104164789cf8985483aaefc25e8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga21982104164789cf8985483aaefc25e8\">make_mat2x3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga21982104164789cf8985483aaefc25e8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga21982104164789cf8985483aaefc25e8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga21982104164789cf8985483aaefc25e8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga078b862c90b0e9a79ed43a58997d8388\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga078b862c90b0e9a79ed43a58997d8388\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga078b862c90b0e9a79ed43a58997d8388\">make_mat2x4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga078b862c90b0e9a79ed43a58997d8388\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga078b862c90b0e9a79ed43a58997d8388\">More...</a><br /></td></tr>\n<tr class=\"separator:ga078b862c90b0e9a79ed43a58997d8388\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f\">make_mat3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga611ee7c4d4cadfc83a8fa8e1d10a170f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27a24e121dc39e6857620e0f85b6e1a8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga27a24e121dc39e6857620e0f85b6e1a8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8\">make_mat3x2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga27a24e121dc39e6857620e0f85b6e1a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27a24e121dc39e6857620e0f85b6e1a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2e8337b15c3362aaeb6e5849e1c0536\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf2e8337b15c3362aaeb6e5849e1c0536\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536\">make_mat3x3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:gaf2e8337b15c3362aaeb6e5849e1c0536\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2e8337b15c3362aaeb6e5849e1c0536\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga05dd66232aedb993e3b8e7b35eaf932b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga05dd66232aedb993e3b8e7b35eaf932b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b\">make_mat3x4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga05dd66232aedb993e3b8e7b35eaf932b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga05dd66232aedb993e3b8e7b35eaf932b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7bcedb710d1446c87fd1fc93ed8ee9a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae7bcedb710d1446c87fd1fc93ed8ee9a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a\">make_mat4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:gae7bcedb710d1446c87fd1fc93ed8ee9a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae7bcedb710d1446c87fd1fc93ed8ee9a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c\">make_mat4x2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b34c9b25bf3310d8ff9c828c7e2d97c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0330bf6640092d7985fac92927bbd42b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0330bf6640092d7985fac92927bbd42b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga0330bf6640092d7985fac92927bbd42b\">make_mat4x3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga0330bf6640092d7985fac92927bbd42b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga0330bf6640092d7985fac92927bbd42b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0330bf6640092d7985fac92927bbd42b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f084be30e404844bfbb4a551ac2728c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga8f084be30e404844bfbb4a551ac2728c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga8f084be30e404844bfbb4a551ac2728c\">make_mat4x4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga8f084be30e404844bfbb4a551ac2728c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from a pointer.  <a href=\"a00305.html#ga8f084be30e404844bfbb4a551ac2728c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f084be30e404844bfbb4a551ac2728c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58110d7d81cf7d029e2bab7f8cd9b246\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga58110d7d81cf7d029e2bab7f8cd9b246\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246\">make_quat</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga58110d7d81cf7d029e2bab7f8cd9b246\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a quaternion from a pointer.  <a href=\"a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58110d7d81cf7d029e2bab7f8cd9b246\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4135f03f3049f0a4eb76545c4967957c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4135f03f3049f0a4eb76545c4967957c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga4135f03f3049f0a4eb76545c4967957c\">make_vec1</a> (vec&lt; 1, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4135f03f3049f0a4eb76545c4967957c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga4135f03f3049f0a4eb76545c4967957c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4135f03f3049f0a4eb76545c4967957c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13c92b81e55f201b052a6404d57da220\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga13c92b81e55f201b052a6404d57da220\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga13c92b81e55f201b052a6404d57da220\">make_vec1</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga13c92b81e55f201b052a6404d57da220\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga13c92b81e55f201b052a6404d57da220\">More...</a><br /></td></tr>\n<tr class=\"separator:ga13c92b81e55f201b052a6404d57da220\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3c23cc74086d361e22bbd5e91a334e03\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3c23cc74086d361e22bbd5e91a334e03\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga3c23cc74086d361e22bbd5e91a334e03\">make_vec1</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga3c23cc74086d361e22bbd5e91a334e03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga3c23cc74086d361e22bbd5e91a334e03\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3c23cc74086d361e22bbd5e91a334e03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6af06bb60d64ca8bcd169e3c93bc2419\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6af06bb60d64ca8bcd169e3c93bc2419\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">make_vec1</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga6af06bb60d64ca8bcd169e3c93bc2419\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6af06bb60d64ca8bcd169e3c93bc2419\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8476d0e6f1b9b4a6193cc25f59d8a896\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8476d0e6f1b9b4a6193cc25f59d8a896\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga8476d0e6f1b9b4a6193cc25f59d8a896\">make_vec2</a> (vec&lt; 1, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8476d0e6f1b9b4a6193cc25f59d8a896\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga8476d0e6f1b9b4a6193cc25f59d8a896\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8476d0e6f1b9b4a6193cc25f59d8a896\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae54bd325a08ad26edf63929201adebc7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae54bd325a08ad26edf63929201adebc7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gae54bd325a08ad26edf63929201adebc7\">make_vec2</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gae54bd325a08ad26edf63929201adebc7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gae54bd325a08ad26edf63929201adebc7\">More...</a><br /></td></tr>\n<tr class=\"separator:gae54bd325a08ad26edf63929201adebc7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0084fea4694cf47276e9cccbe7b1015a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0084fea4694cf47276e9cccbe7b1015a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga0084fea4694cf47276e9cccbe7b1015a\">make_vec2</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga0084fea4694cf47276e9cccbe7b1015a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga0084fea4694cf47276e9cccbe7b1015a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0084fea4694cf47276e9cccbe7b1015a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b81f71f3a222fe5bba81e3983751249\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2b81f71f3a222fe5bba81e3983751249\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga2b81f71f3a222fe5bba81e3983751249\">make_vec2</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2b81f71f3a222fe5bba81e3983751249\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga2b81f71f3a222fe5bba81e3983751249\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b81f71f3a222fe5bba81e3983751249\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81253cf7b0ebfbb1e70540c5774e6824\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga81253cf7b0ebfbb1e70540c5774e6824\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">make_vec2</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga81253cf7b0ebfbb1e70540c5774e6824\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824\">More...</a><br /></td></tr>\n<tr class=\"separator:ga81253cf7b0ebfbb1e70540c5774e6824\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9147e4b3a5d0f4772edfbfd179d7ea0b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9147e4b3a5d0f4772edfbfd179d7ea0b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga9147e4b3a5d0f4772edfbfd179d7ea0b\">make_vec3</a> (vec&lt; 1, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga9147e4b3a5d0f4772edfbfd179d7ea0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga9147e4b3a5d0f4772edfbfd179d7ea0b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9147e4b3a5d0f4772edfbfd179d7ea0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga482b60a842a5b154d3eed392417a9511\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga482b60a842a5b154d3eed392417a9511\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga482b60a842a5b154d3eed392417a9511\">make_vec3</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga482b60a842a5b154d3eed392417a9511\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga482b60a842a5b154d3eed392417a9511\">More...</a><br /></td></tr>\n<tr class=\"separator:ga482b60a842a5b154d3eed392417a9511\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd57046034df557b8b1c457f58613623\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacd57046034df557b8b1c457f58613623\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gacd57046034df557b8b1c457f58613623\">make_vec3</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gacd57046034df557b8b1c457f58613623\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gacd57046034df557b8b1c457f58613623\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd57046034df557b8b1c457f58613623\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b589ed7d41a298b516d2a69169248f1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8b589ed7d41a298b516d2a69169248f1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga8b589ed7d41a298b516d2a69169248f1\">make_vec3</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8b589ed7d41a298b516d2a69169248f1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga8b589ed7d41a298b516d2a69169248f1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b589ed7d41a298b516d2a69169248f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9e0d36ff489cb30c65ad1fa40351651\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gad9e0d36ff489cb30c65ad1fa40351651\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">make_vec3</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:gad9e0d36ff489cb30c65ad1fa40351651\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gad9e0d36ff489cb30c65ad1fa40351651\">More...</a><br /></td></tr>\n<tr class=\"separator:gad9e0d36ff489cb30c65ad1fa40351651\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga600cb97f70c5d50d3a4a145e1cafbf37\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga600cb97f70c5d50d3a4a145e1cafbf37\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga600cb97f70c5d50d3a4a145e1cafbf37\">make_vec4</a> (vec&lt; 1, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga600cb97f70c5d50d3a4a145e1cafbf37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga600cb97f70c5d50d3a4a145e1cafbf37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga600cb97f70c5d50d3a4a145e1cafbf37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9bd116caf28196fd1cf00b278286fa7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa9bd116caf28196fd1cf00b278286fa7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gaa9bd116caf28196fd1cf00b278286fa7\">make_vec4</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa9bd116caf28196fd1cf00b278286fa7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gaa9bd116caf28196fd1cf00b278286fa7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9bd116caf28196fd1cf00b278286fa7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4036328ba4702c74cbdfad1fc03d1b8f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4036328ba4702c74cbdfad1fc03d1b8f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga4036328ba4702c74cbdfad1fc03d1b8f\">make_vec4</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4036328ba4702c74cbdfad1fc03d1b8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga4036328ba4702c74cbdfad1fc03d1b8f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4036328ba4702c74cbdfad1fc03d1b8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa95cb15732f708f613e65a0578895ae5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa95cb15732f708f613e65a0578895ae5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#gaa95cb15732f708f613e65a0578895ae5\">make_vec4</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa95cb15732f708f613e65a0578895ae5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#gaa95cb15732f708f613e65a0578895ae5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa95cb15732f708f613e65a0578895ae5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63f576518993efc22a969f18f80e29bb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga63f576518993efc22a969f18f80e29bb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">make_vec4</a> (T const *const ptr)</td></tr>\n<tr class=\"memdesc:ga63f576518993efc22a969f18f80e29bb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a vector from a pointer.  <a href=\"a00305.html#ga63f576518993efc22a969f18f80e29bb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga63f576518993efc22a969f18f80e29bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1c64669e1ba1160ad9386e43dc57569a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga1c64669e1ba1160ad9386e43dc57569a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type const *&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">value_ptr</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1c64669e1ba1160ad9386e43dc57569a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the constant address to the data of the input parameter.  <a href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1c64669e1ba1160ad9386e43dc57569a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00175.html\" title=\"GLM_GTC_type_ptr \">glm/gtc/type_ptr.hpp</a>&gt; to use the features of this extension. </p>\n<p>Handles the interaction between pointers and vector, matrix types.</p>\n<p>This extension defines an overloaded function, glm::value_ptr. It returns a pointer to the memory layout of the object. Matrix types store their values in column-major order.</p>\n<p>This is useful for uploading data to matrices or copying data to buffer objects.</p>\n<p>Example: </p><div class=\"fragment\"><div class=\"line\"><span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"a00037.html\">glm/glm.hpp</a>&gt;</span></div>\n<div class=\"line\"><span class=\"preprocessor\">#include &lt;<a class=\"code\" href=\"a00175.html\">glm/gtc/type_ptr.hpp</a>&gt;</span></div>\n<div class=\"line\"></div>\n<div class=\"line\"><a class=\"code\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">glm::vec3</a> aVector(3);</div>\n<div class=\"line\"><a class=\"code\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">glm::mat4</a> someMatrix(1.0);</div>\n<div class=\"line\"></div>\n<div class=\"line\">glUniform3fv(uniformLoc, 1, <a class=\"code\" href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">glm::value_ptr</a>(aVector));</div>\n<div class=\"line\">glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, <a class=\"code\" href=\"a00305.html#ga1c64669e1ba1160ad9386e43dc57569a\">glm::value_ptr</a>(someMatrix));</div>\n</div><!-- fragment --><p>&lt;<a class=\"el\" href=\"a00175.html\" title=\"GLM_GTC_type_ptr \">glm/gtc/type_ptr.hpp</a>&gt; need to be included to use the features of this extension. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga04409e74dc3da251d2501acf5b4b546c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, defaultp&gt; glm::make_mat2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae49e1c7bcd5abec74d1c34155031f663\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, defaultp&gt; glm::make_mat2x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga21982104164789cf8985483aaefc25e8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 3, T, defaultp&gt; glm::make_mat2x3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga078b862c90b0e9a79ed43a58997d8388\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 4, T, defaultp&gt; glm::make_mat2x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga611ee7c4d4cadfc83a8fa8e1d10a170f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, defaultp&gt; glm::make_mat3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga27a24e121dc39e6857620e0f85b6e1a8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 2, T, defaultp&gt; glm::make_mat3x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf2e8337b15c3362aaeb6e5849e1c0536\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, defaultp&gt; glm::make_mat3x3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga05dd66232aedb993e3b8e7b35eaf932b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 4, T, defaultp&gt; glm::make_mat3x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae7bcedb710d1446c87fd1fc93ed8ee9a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::make_mat4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b34c9b25bf3310d8ff9c828c7e2d97c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 2, T, defaultp&gt; glm::make_mat4x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0330bf6640092d7985fac92927bbd42b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 3, T, defaultp&gt; glm::make_mat4x3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8f084be30e404844bfbb4a551ac2728c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::make_mat4x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga58110d7d81cf7d029e2bab7f8cd9b246\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, defaultp&gt; glm::make_quat </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a quaternion from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4135f03f3049f0a4eb76545c4967957c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;1, T, Q&gt; glm::make_vec1 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 1, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga13c92b81e55f201b052a6404d57da220\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;1, T, Q&gt; glm::make_vec1 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3c23cc74086d361e22bbd5e91a334e03\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;1, T, Q&gt; glm::make_vec1 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6af06bb60d64ca8bcd169e3c93bc2419\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;1, T, Q&gt; glm::make_vec1 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8476d0e6f1b9b4a6193cc25f59d8a896\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, T, Q&gt; glm::make_vec2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 1, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae54bd325a08ad26edf63929201adebc7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, T, Q&gt; glm::make_vec2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0084fea4694cf47276e9cccbe7b1015a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, T, Q&gt; glm::make_vec2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2b81f71f3a222fe5bba81e3983751249\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, T, Q&gt; glm::make_vec2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga81253cf7b0ebfbb1e70540c5774e6824\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, T, defaultp&gt; glm::make_vec2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9147e4b3a5d0f4772edfbfd179d7ea0b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::make_vec3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 1, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga482b60a842a5b154d3eed392417a9511\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::make_vec3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacd57046034df557b8b1c457f58613623\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::make_vec3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b589ed7d41a298b516d2a69169248f1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::make_vec3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad9e0d36ff489cb30c65ad1fa40351651\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, defaultp&gt; glm::make_vec3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga600cb97f70c5d50d3a4a145e1cafbf37\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::make_vec4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 1, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa9bd116caf28196fd1cf00b278286fa7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::make_vec4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4036328ba4702c74cbdfad1fc03d1b8f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::make_vec4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa95cb15732f708f613e65a0578895ae5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::make_vec4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga63f576518993efc22a969f18f80e29bb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, defaultp&gt; glm::make_vec4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const *const&#160;</td>\n          <td class=\"paramname\"><em>ptr</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a vector from a pointer. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1c64669e1ba1160ad9386e43dc57569a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType::value_type const* glm::value_ptr </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the constant address to the data of the input parameter. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00305.html\" title=\"Include <glm/gtc/type_ptr.hpp> to use the features of this extension. \">GLM_GTC_type_ptr</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00306.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_ulp</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_ulp<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00182.html\" title=\"GLM_GTC_ulp \">glm/gtc/ulp.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<p>Include &lt;<a class=\"el\" href=\"a00182.html\" title=\"GLM_GTC_ulp \">glm/gtc/ulp.hpp</a>&gt; to use the features of this extension. </p>\n<p>Allow the measurement of the accuracy of a function against a reference implementation. This extension works on floating-point data and provide results in ULP. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00307.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTC_vec1</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTC_vec1<div class=\"ingroups\"><a class=\"el\" href=\"a00286.html\">Recommended extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00183.html\" title=\"GLM_GTC_vec1 \">glm/gtc/vec1.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<p>Include &lt;<a class=\"el\" href=\"a00183.html\" title=\"GLM_GTC_vec1 \">glm/gtc/vec1.hpp</a>&gt; to use the features of this extension. </p>\n<p>Add vec1, ivec1, uvec1 and bvec1 types. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00308.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_associated_min_max</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_associated_min_max<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00007.html\" title=\"GLM_GTX_associated_min_max \">glm/gtx/associated_min_max.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga7d9c8785230c8db60f72ec8975f1ba45\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:ga7d9c8785230c8db60f72ec8975f1ba45\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga7d9c8785230c8db60f72ec8975f1ba45\">associatedMax</a> (T x, U a, T y, U b)</td></tr>\n<tr class=\"memdesc:ga7d9c8785230c8db60f72ec8975f1ba45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga7d9c8785230c8db60f72ec8975f1ba45\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7d9c8785230c8db60f72ec8975f1ba45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c6758bc50aa7fbe700f87123a045aad\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5c6758bc50aa7fbe700f87123a045aad\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga5c6758bc50aa7fbe700f87123a045aad\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga5c6758bc50aa7fbe700f87123a045aad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga5c6758bc50aa7fbe700f87123a045aad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c6758bc50aa7fbe700f87123a045aad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0d169d6ce26b03248df175f39005d77f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0d169d6ce26b03248df175f39005d77f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga0d169d6ce26b03248df175f39005d77f\">associatedMax</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga0d169d6ce26b03248df175f39005d77f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga0d169d6ce26b03248df175f39005d77f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0d169d6ce26b03248df175f39005d77f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4086269afabcb81dd7ded33cb3448653\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4086269afabcb81dd7ded33cb3448653\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga4086269afabcb81dd7ded33cb3448653\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)</td></tr>\n<tr class=\"memdesc:ga4086269afabcb81dd7ded33cb3448653\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga4086269afabcb81dd7ded33cb3448653\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4086269afabcb81dd7ded33cb3448653\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaec891e363d91abbf3a4443cf2f652209\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:gaec891e363d91abbf3a4443cf2f652209\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gaec891e363d91abbf3a4443cf2f652209\">associatedMax</a> (T x, U a, T y, U b, T z, U c)</td></tr>\n<tr class=\"memdesc:gaec891e363d91abbf3a4443cf2f652209\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#gaec891e363d91abbf3a4443cf2f652209\">More...</a><br /></td></tr>\n<tr class=\"separator:gaec891e363d91abbf3a4443cf2f652209\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab84fdc35016a31e8cd0cbb8296bddf7c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab84fdc35016a31e8cd0cbb8296bddf7c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:gab84fdc35016a31e8cd0cbb8296bddf7c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c\">More...</a><br /></td></tr>\n<tr class=\"separator:gab84fdc35016a31e8cd0cbb8296bddf7c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd2a2002f4f2144bbc39eb2336dd2fba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadd2a2002f4f2144bbc39eb2336dd2fba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba\">associatedMax</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:gadd2a2002f4f2144bbc39eb2336dd2fba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba\">More...</a><br /></td></tr>\n<tr class=\"separator:gadd2a2002f4f2144bbc39eb2336dd2fba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19f59d1141a51a3b2108a9807af78f7f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga19f59d1141a51a3b2108a9807af78f7f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga19f59d1141a51a3b2108a9807af78f7f\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c)</td></tr>\n<tr class=\"memdesc:ga19f59d1141a51a3b2108a9807af78f7f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#ga19f59d1141a51a3b2108a9807af78f7f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga19f59d1141a51a3b2108a9807af78f7f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3038ffcb43eaa6af75897a99a5047ccc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:ga3038ffcb43eaa6af75897a99a5047ccc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga3038ffcb43eaa6af75897a99a5047ccc\">associatedMax</a> (T x, U a, T y, U b, T z, U c, T w, U d)</td></tr>\n<tr class=\"memdesc:ga3038ffcb43eaa6af75897a99a5047ccc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga3038ffcb43eaa6af75897a99a5047ccc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3038ffcb43eaa6af75897a99a5047ccc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga11477c2c4b5b0bfd1b72b29df3725a9d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga11477c2c4b5b0bfd1b72b29df3725a9d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d\">associatedMax</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga11477c2c4b5b0bfd1b72b29df3725a9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga11477c2c4b5b0bfd1b72b29df3725a9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab9c3dd74cac899d2c625b5767ea3b3fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab9c3dd74cac899d2c625b5767ea3b3fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">associatedMax</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)</td></tr>\n<tr class=\"memdesc:gab9c3dd74cac899d2c625b5767ea3b3fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Maximum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb\">More...</a><br /></td></tr>\n<tr class=\"separator:gab9c3dd74cac899d2c625b5767ea3b3fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacc01bd272359572fc28437ae214a02df\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacc01bd272359572fc28437ae214a02df\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gacc01bd272359572fc28437ae214a02df\">associatedMin</a> (T x, U a, T y, U b)</td></tr>\n<tr class=\"memdesc:gacc01bd272359572fc28437ae214a02df\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#gacc01bd272359572fc28437ae214a02df\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc01bd272359572fc28437ae214a02df\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac2f0dff90948f2e44386a5eafd941d1c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac2f0dff90948f2e44386a5eafd941d1c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gac2f0dff90948f2e44386a5eafd941d1c\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:gac2f0dff90948f2e44386a5eafd941d1c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#gac2f0dff90948f2e44386a5eafd941d1c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac2f0dff90948f2e44386a5eafd941d1c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacfec519c820331d023ef53a511749319\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacfec519c820331d023ef53a511749319\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gacfec519c820331d023ef53a511749319\">associatedMin</a> (T x, const vec&lt; L, U, Q &gt; &amp;a, T y, const vec&lt; L, U, Q &gt; &amp;b)</td></tr>\n<tr class=\"memdesc:gacfec519c820331d023ef53a511749319\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#gacfec519c820331d023ef53a511749319\">More...</a><br /></td></tr>\n<tr class=\"separator:gacfec519c820331d023ef53a511749319\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4757c7cab2d809124a8525d0a9deeb37\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4757c7cab2d809124a8525d0a9deeb37\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga4757c7cab2d809124a8525d0a9deeb37\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)</td></tr>\n<tr class=\"memdesc:ga4757c7cab2d809124a8525d0a9deeb37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 2 variables and returns 2 associated variable values.  <a href=\"a00308.html#ga4757c7cab2d809124a8525d0a9deeb37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4757c7cab2d809124a8525d0a9deeb37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad0aa8f86259a26d839d34a3577a923fc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:gad0aa8f86259a26d839d34a3577a923fc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#gad0aa8f86259a26d839d34a3577a923fc\">associatedMin</a> (T x, U a, T y, U b, T z, U c)</td></tr>\n<tr class=\"memdesc:gad0aa8f86259a26d839d34a3577a923fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#gad0aa8f86259a26d839d34a3577a923fc\">More...</a><br /></td></tr>\n<tr class=\"separator:gad0aa8f86259a26d839d34a3577a923fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga723e5411cebc7ffbd5c81ffeec61127d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga723e5411cebc7ffbd5c81ffeec61127d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)</td></tr>\n<tr class=\"memdesc:ga723e5411cebc7ffbd5c81ffeec61127d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 3 variables and returns 3 associated variable values.  <a href=\"a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga723e5411cebc7ffbd5c81ffeec61127d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga432224ebe2085eaa2b63a077ecbbbff6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , typename U &gt; </td></tr>\n<tr class=\"memitem:ga432224ebe2085eaa2b63a077ecbbbff6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL U&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga432224ebe2085eaa2b63a077ecbbbff6\">associatedMin</a> (T x, U a, T y, U b, T z, U c, T w, U d)</td></tr>\n<tr class=\"memdesc:ga432224ebe2085eaa2b63a077ecbbbff6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga432224ebe2085eaa2b63a077ecbbbff6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga432224ebe2085eaa2b63a077ecbbbff6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66b08118bc88f0494bcacb7cdb940556\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga66b08118bc88f0494bcacb7cdb940556\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga66b08118bc88f0494bcacb7cdb940556\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga66b08118bc88f0494bcacb7cdb940556\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga66b08118bc88f0494bcacb7cdb940556\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66b08118bc88f0494bcacb7cdb940556\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78c28fde1a7080fb7420bd88e68c6c68\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga78c28fde1a7080fb7420bd88e68c6c68\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68\">associatedMin</a> (T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)</td></tr>\n<tr class=\"memdesc:ga78c28fde1a7080fb7420bd88e68c6c68\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78c28fde1a7080fb7420bd88e68c6c68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2db7e351994baee78540a562d4bb6d3b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename U , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2db7e351994baee78540a562d4bb6d3b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, U, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">associatedMin</a> (vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)</td></tr>\n<tr class=\"memdesc:ga2db7e351994baee78540a562d4bb6d3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Minimum comparison between 4 variables and returns 4 associated variable values.  <a href=\"a00308.html#ga2db7e351994baee78540a562d4bb6d3b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2db7e351994baee78540a562d4bb6d3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00007.html\" title=\"GLM_GTX_associated_min_max \">glm/gtx/associated_min_max.hpp</a>&gt; to use the features of this extension. </p>\n<p>Min and max functions that return associated values not the compared onces. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga7d9c8785230c8db60f72ec8975f1ba45\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL U glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 2 variables and returns 2 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5c6758bc50aa7fbe700f87123a045aad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, U, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 2 variables and returns 2 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0d169d6ce26b03248df175f39005d77f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 2 variables and returns 2 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4086269afabcb81dd7ded33cb3448653\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 2 variables and returns 2 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaec891e363d91abbf3a4443cf2f652209\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL U glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 3 variables and returns 3 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab84fdc35016a31e8cd0cbb8296bddf7c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 3 variables and returns 3 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadd2a2002f4f2144bbc39eb2336dd2fba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 3 variables and returns 3 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga19f59d1141a51a3b2108a9807af78f7f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 3 variables and returns 3 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3038ffcb43eaa6af75897a99a5047ccc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL U glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>w</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 4 variables and returns 4 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf5ab0c428f8d1cd9e3b45fcfbf6423a6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 4 variables and returns 4 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga11477c2c4b5b0bfd1b72b29df3725a9d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>w</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 4 variables and returns 4 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab9c3dd74cac899d2c625b5767ea3b3fb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Maximum comparison between 4 variables and returns 4 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacc01bd272359572fc28437ae214a02df\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL U glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 2 variables and returns 2 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac2f0dff90948f2e44386a5eafd941d1c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, U, Q&gt; glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 2 variables and returns 2 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacfec519c820331d023ef53a511749319\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const vec&lt; L, U, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const vec&lt; L, U, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 2 variables and returns 2 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4757c7cab2d809124a8525d0a9deeb37\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 2 variables and returns 2 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad0aa8f86259a26d839d34a3577a923fc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL U glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 3 variables and returns 3 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga723e5411cebc7ffbd5c81ffeec61127d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 3 variables and returns 3 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga432224ebe2085eaa2b63a077ecbbbff6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL U glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>w</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 4 variables and returns 4 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga66b08118bc88f0494bcacb7cdb940556\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 4 variables and returns 4 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga78c28fde1a7080fb7420bd88e68c6c68\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>w</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, U, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 4 variables and returns 4 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2db7e351994baee78540a562d4bb6d3b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, U, Q&gt; glm::associatedMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>b</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">U&#160;</td>\n          <td class=\"paramname\"><em>d</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Minimum comparison between 4 variables and returns 4 associated variable values. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00308.html\" title=\"Include <glm/gtx/associated_min_max.hpp> to use the features of this extension. \">GLM_GTX_associated_min_max</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00309.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_bit</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_bit<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00008.html\" title=\"GLM_GTX_bit \">glm/gtx/bit.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0dcc8fe7c3d3ad60dea409281efa3d05\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga0dcc8fe7c3d3ad60dea409281efa3d05\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga0dcc8fe7c3d3ad60dea409281efa3d05\">highestBitValue</a> (genIUType Value)</td></tr>\n<tr class=\"separator:ga0dcc8fe7c3d3ad60dea409281efa3d05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga898ef075ccf809a1e480faab48fe96bf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga898ef075ccf809a1e480faab48fe96bf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga898ef075ccf809a1e480faab48fe96bf\">highestBitValue</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>\n<tr class=\"memdesc:ga898ef075ccf809a1e480faab48fe96bf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find the highest bit set to 1 in a integer variable and return its value.  <a href=\"a00309.html#ga898ef075ccf809a1e480faab48fe96bf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga898ef075ccf809a1e480faab48fe96bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ff6568089f3a9b67f5c30918855fc6f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga2ff6568089f3a9b67f5c30918855fc6f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga2ff6568089f3a9b67f5c30918855fc6f\">lowestBitValue</a> (genIUType Value)</td></tr>\n<tr class=\"separator:ga2ff6568089f3a9b67f5c30918855fc6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8cda2459871f574a0aecbe702ac93291\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga8cda2459871f574a0aecbe702ac93291\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga8cda2459871f574a0aecbe702ac93291\">powerOfTwoAbove</a> (genIUType Value)</td></tr>\n<tr class=\"memdesc:ga8cda2459871f574a0aecbe702ac93291\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value.  <a href=\"a00309.html#ga8cda2459871f574a0aecbe702ac93291\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8cda2459871f574a0aecbe702ac93291\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2bbded187c5febfefc1e524ba31b3fab\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2bbded187c5febfefc1e524ba31b3fab\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga2bbded187c5febfefc1e524ba31b3fab\">powerOfTwoAbove</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>\n<tr class=\"memdesc:ga2bbded187c5febfefc1e524ba31b3fab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just higher the input value.  <a href=\"a00309.html#ga2bbded187c5febfefc1e524ba31b3fab\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2bbded187c5febfefc1e524ba31b3fab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3de7df63c589325101a2817a56f8e29d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga3de7df63c589325101a2817a56f8e29d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga3de7df63c589325101a2817a56f8e29d\">powerOfTwoBelow</a> (genIUType Value)</td></tr>\n<tr class=\"memdesc:ga3de7df63c589325101a2817a56f8e29d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value.  <a href=\"a00309.html#ga3de7df63c589325101a2817a56f8e29d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3de7df63c589325101a2817a56f8e29d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf78ddcc4152c051b2a21e68fecb10980\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf78ddcc4152c051b2a21e68fecb10980\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#gaf78ddcc4152c051b2a21e68fecb10980\">powerOfTwoBelow</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>\n<tr class=\"memdesc:gaf78ddcc4152c051b2a21e68fecb10980\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is just lower the input value.  <a href=\"a00309.html#gaf78ddcc4152c051b2a21e68fecb10980\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf78ddcc4152c051b2a21e68fecb10980\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f65973a5d2ea38c719e6a663149ead9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga5f65973a5d2ea38c719e6a663149ead9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL genIUType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#ga5f65973a5d2ea38c719e6a663149ead9\">powerOfTwoNearest</a> (genIUType Value)</td></tr>\n<tr class=\"memdesc:ga5f65973a5d2ea38c719e6a663149ead9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is the closet to the input value.  <a href=\"a00309.html#ga5f65973a5d2ea38c719e6a663149ead9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5f65973a5d2ea38c719e6a663149ead9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac87e65d11e16c3d6b91c3bcfaef7da0b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac87e65d11e16c3d6b91c3bcfaef7da0b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b\">powerOfTwoNearest</a> (vec&lt; L, T, Q &gt; const &amp;value)</td></tr>\n<tr class=\"memdesc:gac87e65d11e16c3d6b91c3bcfaef7da0b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the power of two number which value is the closet to the input value.  <a href=\"a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b\">More...</a><br /></td></tr>\n<tr class=\"separator:gac87e65d11e16c3d6b91c3bcfaef7da0b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00008.html\" title=\"GLM_GTX_bit \">glm/gtx/bit.hpp</a>&gt; to use the features of this extension. </p>\n<p>Allow to perform bit operations on integer values </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga0dcc8fe7c3d3ad60dea409281efa3d05\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::highestBitValue </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga898ef075ccf809a1e480faab48fe96bf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::highestBitValue </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Find the highest bit set to 1 in a integer variable and return its value. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2ff6568089f3a9b67f5c30918855fc6f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genIUType glm::lowestBitValue </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8cda2459871f574a0aecbe702ac93291\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_DEPRECATED GLM_FUNC_DECL genIUType glm::powerOfTwoAbove </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just higher the input value. </p>\n<p>Deprecated, use ceilPowerOfTwo from GTC_round instead</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2bbded187c5febfefc1e524ba31b3fab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::powerOfTwoAbove </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just higher the input value. </p>\n<p>Deprecated, use ceilPowerOfTwo from GTC_round instead</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3de7df63c589325101a2817a56f8e29d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_DEPRECATED GLM_FUNC_DECL genIUType glm::powerOfTwoBelow </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just lower the input value. </p>\n<p>Deprecated, use floorPowerOfTwo from GTC_round instead</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf78ddcc4152c051b2a21e68fecb10980\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::powerOfTwoBelow </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is just lower the input value. </p>\n<p>Deprecated, use floorPowerOfTwo from GTC_round instead</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5f65973a5d2ea38c719e6a663149ead9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_DEPRECATED GLM_FUNC_DECL genIUType glm::powerOfTwoNearest </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>Value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is the closet to the input value. </p>\n<p>Deprecated, use roundPowerOfTwo from GTC_round instead</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac87e65d11e16c3d6b91c3bcfaef7da0b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_DEPRECATED GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::powerOfTwoNearest </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>value</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the power of two number which value is the closet to the input value. </p>\n<p>Deprecated, use roundPowerOfTwo from GTC_round instead</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00302.html\" title=\"Include <glm/gtc/round.hpp> to use the features of this extension. \">GLM_GTC_round</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00309.html\" title=\"Include <glm/gtx/bit.hpp> to use the features of this extension. \">GLM_GTX_bit</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00310.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_closest_point</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_closest_point<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00010.html\" title=\"GLM_GTX_closest_point \">glm/gtx/closest_point.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga36529c278ef716986151d58d151d697d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga36529c278ef716986151d58d151d697d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00310.html#ga36529c278ef716986151d58d151d697d\">closestPointOnLine</a> (vec&lt; 3, T, Q &gt; const &amp;point, vec&lt; 3, T, Q &gt; const &amp;a, vec&lt; 3, T, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga36529c278ef716986151d58d151d697d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find the point on a straight line which is the closet of a point.  <a href=\"a00310.html#ga36529c278ef716986151d58d151d697d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga36529c278ef716986151d58d151d697d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\">closestPointOnLine</a> (vec&lt; 2, T, Q &gt; const &amp;point, vec&lt; 2, T, Q &gt; const &amp;a, vec&lt; 2, T, Q &gt; const &amp;b)</td></tr>\n<tr class=\"memdesc:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2d lines work as well <br /></td></tr>\n<tr class=\"separator:ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00010.html\" title=\"GLM_GTX_closest_point \">glm/gtx/closest_point.hpp</a>&gt; to use the features of this extension. </p>\n<p>Find the point on a straight line which is the closet of a point. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga36529c278ef716986151d58d151d697d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::closestPointOnLine </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>point</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>b</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Find the point on a straight line which is the closet of a point. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00310.html\" title=\"Include <glm/gtx/closest_point.hpp> to use the features of this extension. \">GLM_GTX_closest_point</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00311.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_color_encoding</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_color_encoding<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00011.html\" title=\"GLM_GTX_color_encoding \">glm/gtx/color_encoding.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad12f4f65022b2c80e33fcba2ced0dc48\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gad12f4f65022b2c80e33fcba2ced0dc48\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad12f4f65022b2c80e33fcba2ced0dc48\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48\">convertD65XYZToD50XYZ</a> (vec&lt; 3, T, Q &gt; const &amp;ColorD65XYZ)</td></tr>\n<tr class=\"memdesc:gad12f4f65022b2c80e33fcba2ced0dc48\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a D65 YUV color to D50 YUV. <br /></td></tr>\n<tr class=\"separator:gad12f4f65022b2c80e33fcba2ced0dc48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5265386fc3ac29e4c580d37ed470859c\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga5265386fc3ac29e4c580d37ed470859c\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5265386fc3ac29e4c580d37ed470859c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html#ga5265386fc3ac29e4c580d37ed470859c\">convertD65XYZToLinearSRGB</a> (vec&lt; 3, T, Q &gt; const &amp;ColorD65XYZ)</td></tr>\n<tr class=\"memdesc:ga5265386fc3ac29e4c580d37ed470859c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a D65 YUV color to linear sRGB. <br /></td></tr>\n<tr class=\"separator:ga5265386fc3ac29e4c580d37ed470859c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1522ba180e3d83d554a734056da031f9\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga1522ba180e3d83d554a734056da031f9\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1522ba180e3d83d554a734056da031f9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html#ga1522ba180e3d83d554a734056da031f9\">convertLinearSRGBToD50XYZ</a> (vec&lt; 3, T, Q &gt; const &amp;ColorLinearSRGB)</td></tr>\n<tr class=\"memdesc:ga1522ba180e3d83d554a734056da031f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a linear sRGB color to D50 YUV. <br /></td></tr>\n<tr class=\"separator:ga1522ba180e3d83d554a734056da031f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf9e130d9d4ccf51cc99317de7449f369\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaf9e130d9d4ccf51cc99317de7449f369\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf9e130d9d4ccf51cc99317de7449f369\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00311.html#gaf9e130d9d4ccf51cc99317de7449f369\">convertLinearSRGBToD65XYZ</a> (vec&lt; 3, T, Q &gt; const &amp;ColorLinearSRGB)</td></tr>\n<tr class=\"memdesc:gaf9e130d9d4ccf51cc99317de7449f369\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a linear sRGB color to D65 YUV. <br /></td></tr>\n<tr class=\"separator:gaf9e130d9d4ccf51cc99317de7449f369\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00011.html\" title=\"GLM_GTX_color_encoding \">glm/gtx/color_encoding.hpp</a>&gt; to use the features of this extension. </p>\n<p>Allow to perform bit operations on integer values </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00312.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_color_space</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_color_space<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00013.html\" title=\"GLM_GTX_color_space \">glm/gtx/color_space.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga789802bec2d4fe0f9741c731b4a8a7d8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga789802bec2d4fe0f9741c731b4a8a7d8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8\">hsvColor</a> (vec&lt; 3, T, Q &gt; const &amp;rgbValue)</td></tr>\n<tr class=\"memdesc:ga789802bec2d4fe0f9741c731b4a8a7d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a color from RGB color space to its color in HSV color space.  <a href=\"a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga789802bec2d4fe0f9741c731b4a8a7d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad028e0a4f1a9c812b39439b746295b34\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad028e0a4f1a9c812b39439b746295b34\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#gad028e0a4f1a9c812b39439b746295b34\">luminosity</a> (vec&lt; 3, T, Q &gt; const &amp;color)</td></tr>\n<tr class=\"memdesc:gad028e0a4f1a9c812b39439b746295b34\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals.  <a href=\"a00312.html#gad028e0a4f1a9c812b39439b746295b34\">More...</a><br /></td></tr>\n<tr class=\"separator:gad028e0a4f1a9c812b39439b746295b34\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f9193be46f45f0655c05a0cdca006db\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5f9193be46f45f0655c05a0cdca006db\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">rgbColor</a> (vec&lt; 3, T, Q &gt; const &amp;hsvValue)</td></tr>\n<tr class=\"memdesc:ga5f9193be46f45f0655c05a0cdca006db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a color from HSV color space to its color in RGB color space.  <a href=\"a00312.html#ga5f9193be46f45f0655c05a0cdca006db\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5f9193be46f45f0655c05a0cdca006db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga01a97152b44e1550edcac60bd849e884\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga01a97152b44e1550edcac60bd849e884\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#ga01a97152b44e1550edcac60bd849e884\">saturation</a> (T const s)</td></tr>\n<tr class=\"memdesc:ga01a97152b44e1550edcac60bd849e884\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a saturation matrix.  <a href=\"a00312.html#ga01a97152b44e1550edcac60bd849e884\">More...</a><br /></td></tr>\n<tr class=\"separator:ga01a97152b44e1550edcac60bd849e884\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2156cea600e90148ece5bc96fd6db43a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2156cea600e90148ece5bc96fd6db43a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#ga2156cea600e90148ece5bc96fd6db43a\">saturation</a> (T const s, vec&lt; 3, T, Q &gt; const &amp;color)</td></tr>\n<tr class=\"memdesc:ga2156cea600e90148ece5bc96fd6db43a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modify the saturation of a color.  <a href=\"a00312.html#ga2156cea600e90148ece5bc96fd6db43a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2156cea600e90148ece5bc96fd6db43a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaba0eacee0736dae860e9371cc1ae4785\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaba0eacee0736dae860e9371cc1ae4785\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00312.html#gaba0eacee0736dae860e9371cc1ae4785\">saturation</a> (T const s, vec&lt; 4, T, Q &gt; const &amp;color)</td></tr>\n<tr class=\"memdesc:gaba0eacee0736dae860e9371cc1ae4785\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modify the saturation of a color.  <a href=\"a00312.html#gaba0eacee0736dae860e9371cc1ae4785\">More...</a><br /></td></tr>\n<tr class=\"separator:gaba0eacee0736dae860e9371cc1ae4785\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00013.html\" title=\"GLM_GTX_color_space \">glm/gtx/color_space.hpp</a>&gt; to use the features of this extension. </p>\n<p>Related to RGB to HSV conversions and operations. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga789802bec2d4fe0f9741c731b4a8a7d8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::hsvColor </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rgbValue</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a color from RGB color space to its color in HSV color space. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00312.html\" title=\"Include <glm/gtx/color_space.hpp> to use the features of this extension. \">GLM_GTX_color_space</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad028e0a4f1a9c812b39439b746295b34\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::luminosity </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>color</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00312.html\" title=\"Include <glm/gtx/color_space.hpp> to use the features of this extension. \">GLM_GTX_color_space</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5f9193be46f45f0655c05a0cdca006db\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::rgbColor </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>hsvValue</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a color from HSV color space to its color in RGB color space. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00312.html\" title=\"Include <glm/gtx/color_space.hpp> to use the features of this extension. \">GLM_GTX_color_space</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga01a97152b44e1550edcac60bd849e884\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::saturation </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const&#160;</td>\n          <td class=\"paramname\"><em>s</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a saturation matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00312.html\" title=\"Include <glm/gtx/color_space.hpp> to use the features of this extension. \">GLM_GTX_color_space</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2156cea600e90148ece5bc96fd6db43a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::saturation </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const&#160;</td>\n          <td class=\"paramname\"><em>s</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>color</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modify the saturation of a color. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00312.html\" title=\"Include <glm/gtx/color_space.hpp> to use the features of this extension. \">GLM_GTX_color_space</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaba0eacee0736dae860e9371cc1ae4785\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::saturation </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const&#160;</td>\n          <td class=\"paramname\"><em>s</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>color</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modify the saturation of a color. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00312.html\" title=\"Include <glm/gtx/color_space.hpp> to use the features of this extension. \">GLM_GTX_color_space</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00313.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_color_space_YCoCg</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_color_space_YCoCg<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00014.html\" title=\"GLM_GTX_color_space_YCoCg \">glm/gtx/color_space_YCoCg.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0606353ec2a9b9eaa84f1b02ec391bc5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0606353ec2a9b9eaa84f1b02ec391bc5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5\">rgb2YCoCg</a> (vec&lt; 3, T, Q &gt; const &amp;rgbColor)</td></tr>\n<tr class=\"memdesc:ga0606353ec2a9b9eaa84f1b02ec391bc5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a color from RGB color space to YCoCg color space.  <a href=\"a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0606353ec2a9b9eaa84f1b02ec391bc5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0389772e44ca0fd2ba4a79bdd8efe898\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0389772e44ca0fd2ba4a79bdd8efe898\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898\">rgb2YCoCgR</a> (vec&lt; 3, T, Q &gt; const &amp;rgbColor)</td></tr>\n<tr class=\"memdesc:ga0389772e44ca0fd2ba4a79bdd8efe898\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a color from RGB color space to YCoCgR color space.  <a href=\"a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0389772e44ca0fd2ba4a79bdd8efe898\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga163596b804c7241810b2534a99eb1343\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga163596b804c7241810b2534a99eb1343\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html#ga163596b804c7241810b2534a99eb1343\">YCoCg2rgb</a> (vec&lt; 3, T, Q &gt; const &amp;YCoCgColor)</td></tr>\n<tr class=\"memdesc:ga163596b804c7241810b2534a99eb1343\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a color from YCoCg color space to RGB color space.  <a href=\"a00313.html#ga163596b804c7241810b2534a99eb1343\">More...</a><br /></td></tr>\n<tr class=\"separator:ga163596b804c7241810b2534a99eb1343\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf8d30574c8576838097d8e20c295384a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf8d30574c8576838097d8e20c295384a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00313.html#gaf8d30574c8576838097d8e20c295384a\">YCoCgR2rgb</a> (vec&lt; 3, T, Q &gt; const &amp;YCoCgColor)</td></tr>\n<tr class=\"memdesc:gaf8d30574c8576838097d8e20c295384a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a color from YCoCgR color space to RGB color space.  <a href=\"a00313.html#gaf8d30574c8576838097d8e20c295384a\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf8d30574c8576838097d8e20c295384a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00014.html\" title=\"GLM_GTX_color_space_YCoCg \">glm/gtx/color_space_YCoCg.hpp</a>&gt; to use the features of this extension. </p>\n<p>RGB to YCoCg conversions and operations </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga0606353ec2a9b9eaa84f1b02ec391bc5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::rgb2YCoCg </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rgbColor</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a color from RGB color space to YCoCg color space. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00313.html\" title=\"Include <glm/gtx/color_space_YCoCg.hpp> to use the features of this extension. \">GLM_GTX_color_space_YCoCg</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0389772e44ca0fd2ba4a79bdd8efe898\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::rgb2YCoCgR </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rgbColor</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a color from RGB color space to YCoCgR color space. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>\"YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range\" </dd>\n<dd>\n<a class=\"el\" href=\"a00313.html\" title=\"Include <glm/gtx/color_space_YCoCg.hpp> to use the features of this extension. \">GLM_GTX_color_space_YCoCg</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga163596b804c7241810b2534a99eb1343\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::YCoCg2rgb </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>YCoCgColor</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a color from YCoCg color space to RGB color space. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00313.html\" title=\"Include <glm/gtx/color_space_YCoCg.hpp> to use the features of this extension. \">GLM_GTX_color_space_YCoCg</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf8d30574c8576838097d8e20c295384a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::YCoCgR2rgb </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>YCoCgColor</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a color from YCoCgR color space to RGB color space. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>\"YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range\" </dd>\n<dd>\n<a class=\"el\" href=\"a00313.html\" title=\"Include <glm/gtx/color_space_YCoCg.hpp> to use the features of this extension. \">GLM_GTX_color_space_YCoCg</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00314.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_common</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_common<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00016.html\" title=\"GLM_GTX_common \">glm/gtx/common.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gab7d89c14c48ad01f720fb5daf8813161\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab7d89c14c48ad01f720fb5daf8813161\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html#gab7d89c14c48ad01f720fb5daf8813161\">closeBounded</a> (vec&lt; L, T, Q &gt; const &amp;Value, vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</td></tr>\n<tr class=\"memdesc:gab7d89c14c48ad01f720fb5daf8813161\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns whether vector components values are within an interval.  <a href=\"a00314.html#gab7d89c14c48ad01f720fb5daf8813161\">More...</a><br /></td></tr>\n<tr class=\"separator:gab7d89c14c48ad01f720fb5daf8813161\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5e80425df9833164ad469e83b475fb4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae5e80425df9833164ad469e83b475fb4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html#gae5e80425df9833164ad469e83b475fb4\">fmod</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gae5e80425df9833164ad469e83b475fb4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Similar to 'mod' but with a different rounding and integer support.  <a href=\"a00314.html#gae5e80425df9833164ad469e83b475fb4\">More...</a><br /></td></tr>\n<tr class=\"separator:gae5e80425df9833164ad469e83b475fb4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74aa7c7462245d83bd5a9edf9c6c2d91\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga74aa7c7462245d83bd5a9edf9c6c2d91\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::bool_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91\">isdenormal</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga74aa7c7462245d83bd5a9edf9c6c2d91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if x is a denormalized number Numbers whose absolute value is too small to be represented in the normal format are represented in an alternate, denormalized format.  <a href=\"a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74aa7c7462245d83bd5a9edf9c6c2d91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafd303042ba2ba695bf53b2315f53f93f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafd303042ba2ba695bf53b2315f53f93f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00314.html#gafd303042ba2ba695bf53b2315f53f93f\">openBounded</a> (vec&lt; L, T, Q &gt; const &amp;Value, vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)</td></tr>\n<tr class=\"memdesc:gafd303042ba2ba695bf53b2315f53f93f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns whether vector components values are within an interval.  <a href=\"a00314.html#gafd303042ba2ba695bf53b2315f53f93f\">More...</a><br /></td></tr>\n<tr class=\"separator:gafd303042ba2ba695bf53b2315f53f93f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00016.html\" title=\"GLM_GTX_common \">glm/gtx/common.hpp</a>&gt; to use the features of this extension. </p>\n<p>Provide functions to increase the compatibility with Cg and HLSL languages </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gab7d89c14c48ad01f720fb5daf8813161\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::closeBounded </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Min</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Max</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns whether vector components values are within an interval. </p>\n<p>A closed interval includes its endpoints, and is denoted with square brackets.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00275.html\" title=\"Exposes comparison functions for vector types that take a user defined epsilon values. \">GLM_EXT_vector_relational</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae5e80425df9833164ad469e83b475fb4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fmod </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Similar to 'mod' but with a different rounding and integer support. </p>\n<p>Returns 'x - y * trunc(x/y)' instead of 'x - y * floor(x/y)'</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://stackoverflow.com/questions/7610631/glsl-mod-vs-hlsl-fmod\">GLSL mod vs HLSL fmod</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml\">GLSL mod man page</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga74aa7c7462245d83bd5a9edf9c6c2d91\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType::bool_type glm::isdenormal </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns true if x is a denormalized number Numbers whose absolute value is too small to be represented in the normal format are represented in an alternate, denormalized format. </p>\n<p>This format is less precise but can represent values closer to zero.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml\">GLSL isnan man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafd303042ba2ba695bf53b2315f53f93f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::openBounded </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Min</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Max</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns whether vector components values are within an interval. </p>\n<p>A open interval excludes its endpoints, and is denoted with square brackets.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00275.html\" title=\"Exposes comparison functions for vector types that take a user defined epsilon values. \">GLM_EXT_vector_relational</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00315.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_compatibility</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_compatibility<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00017.html\" title=\"GLM_GTX_compatibility \">glm/gtx/compatibility.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaddcd7aa2e30e61af5b38660613d3979e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaddcd7aa2e30e61af5b38660613d3979e\"></a>\ntypedef bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaddcd7aa2e30e61af5b38660613d3979e\">bool1</a></td></tr>\n<tr class=\"memdesc:gaddcd7aa2e30e61af5b38660613d3979e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean type with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaddcd7aa2e30e61af5b38660613d3979e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f895c936f0c29c8729afbbf22806090\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7f895c936f0c29c8729afbbf22806090\"></a>\ntypedef bool&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga7f895c936f0c29c8729afbbf22806090\">bool1x1</a></td></tr>\n<tr class=\"memdesc:ga7f895c936f0c29c8729afbbf22806090\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga7f895c936f0c29c8729afbbf22806090\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa09ab65ec9c3c54305ff502e2b1fe6d9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa09ab65ec9c3c54305ff502e2b1fe6d9\"></a>\ntypedef vec&lt; 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9\">bool2</a></td></tr>\n<tr class=\"memdesc:gaa09ab65ec9c3c54305ff502e2b1fe6d9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean type with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaa09ab65ec9c3c54305ff502e2b1fe6d9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadb3703955e513632f98ba12fe051ba3e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gadb3703955e513632f98ba12fe051ba3e\"></a>\ntypedef mat&lt; 2, 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gadb3703955e513632f98ba12fe051ba3e\">bool2x2</a></td></tr>\n<tr class=\"memdesc:gadb3703955e513632f98ba12fe051ba3e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gadb3703955e513632f98ba12fe051ba3e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ae6ee155d0f90cb1ae5b6c4546738a0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9ae6ee155d0f90cb1ae5b6c4546738a0\"></a>\ntypedef mat&lt; 2, 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0\">bool2x3</a></td></tr>\n<tr class=\"memdesc:ga9ae6ee155d0f90cb1ae5b6c4546738a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga9ae6ee155d0f90cb1ae5b6c4546738a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d7fa65be8e8e4ad6d920b45c44e471f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4d7fa65be8e8e4ad6d920b45c44e471f\"></a>\ntypedef mat&lt; 2, 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f\">bool2x4</a></td></tr>\n<tr class=\"memdesc:ga4d7fa65be8e8e4ad6d920b45c44e471f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga4d7fa65be8e8e4ad6d920b45c44e471f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99629f818737f342204071ef8296b2ed\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga99629f818737f342204071ef8296b2ed\"></a>\ntypedef vec&lt; 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga99629f818737f342204071ef8296b2ed\">bool3</a></td></tr>\n<tr class=\"memdesc:ga99629f818737f342204071ef8296b2ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean type with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga99629f818737f342204071ef8296b2ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7d7311f7e0fa8b6163d96dab033a755\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac7d7311f7e0fa8b6163d96dab033a755\"></a>\ntypedef mat&lt; 3, 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac7d7311f7e0fa8b6163d96dab033a755\">bool3x2</a></td></tr>\n<tr class=\"memdesc:gac7d7311f7e0fa8b6163d96dab033a755\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gac7d7311f7e0fa8b6163d96dab033a755\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6c97b99aac3e302053ffb58aace9033c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6c97b99aac3e302053ffb58aace9033c\"></a>\ntypedef mat&lt; 3, 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga6c97b99aac3e302053ffb58aace9033c\">bool3x3</a></td></tr>\n<tr class=\"memdesc:ga6c97b99aac3e302053ffb58aace9033c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga6c97b99aac3e302053ffb58aace9033c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae7d6b679463d37d6c527d478fb470fdf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae7d6b679463d37d6c527d478fb470fdf\"></a>\ntypedef mat&lt; 3, 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gae7d6b679463d37d6c527d478fb470fdf\">bool3x4</a></td></tr>\n<tr class=\"memdesc:gae7d6b679463d37d6c527d478fb470fdf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gae7d6b679463d37d6c527d478fb470fdf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13c3200b82708f73faac6d7f09ec91a3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga13c3200b82708f73faac6d7f09ec91a3\"></a>\ntypedef vec&lt; 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga13c3200b82708f73faac6d7f09ec91a3\">bool4</a></td></tr>\n<tr class=\"memdesc:ga13c3200b82708f73faac6d7f09ec91a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean type with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga13c3200b82708f73faac6d7f09ec91a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ed830f52408b2f83c085063a3eaf1d0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9ed830f52408b2f83c085063a3eaf1d0\"></a>\ntypedef mat&lt; 4, 2, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0\">bool4x2</a></td></tr>\n<tr class=\"memdesc:ga9ed830f52408b2f83c085063a3eaf1d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga9ed830f52408b2f83c085063a3eaf1d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad0f5dc7f22c2065b1b06d57f1c0658fe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad0f5dc7f22c2065b1b06d57f1c0658fe\"></a>\ntypedef mat&lt; 4, 3, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe\">bool4x3</a></td></tr>\n<tr class=\"memdesc:gad0f5dc7f22c2065b1b06d57f1c0658fe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gad0f5dc7f22c2065b1b06d57f1c0658fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7d2a7d13986602ae2896bfaa394235d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga7d2a7d13986602ae2896bfaa394235d4\"></a>\ntypedef mat&lt; 4, 4, bool, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga7d2a7d13986602ae2896bfaa394235d4\">bool4x4</a></td></tr>\n<tr class=\"memdesc:ga7d2a7d13986602ae2896bfaa394235d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga7d2a7d13986602ae2896bfaa394235d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20b861a9b6e2a300323671c57a02525b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga20b861a9b6e2a300323671c57a02525b\"></a>\ntypedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga20b861a9b6e2a300323671c57a02525b\">double1</a></td></tr>\n<tr class=\"memdesc:ga20b861a9b6e2a300323671c57a02525b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga20b861a9b6e2a300323671c57a02525b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45f16a4dd0db1f199afaed9fd12fe9a8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga45f16a4dd0db1f199afaed9fd12fe9a8\"></a>\ntypedef double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8\">double1x1</a></td></tr>\n<tr class=\"memdesc:ga45f16a4dd0db1f199afaed9fd12fe9a8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga45f16a4dd0db1f199afaed9fd12fe9a8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31b729b04facccda73f07ed26958b3c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga31b729b04facccda73f07ed26958b3c2\"></a>\ntypedef vec&lt; 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga31b729b04facccda73f07ed26958b3c2\">double2</a></td></tr>\n<tr class=\"memdesc:ga31b729b04facccda73f07ed26958b3c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga31b729b04facccda73f07ed26958b3c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae57d0201096834d25f2b91b319e7cdbd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae57d0201096834d25f2b91b319e7cdbd\"></a>\ntypedef mat&lt; 2, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gae57d0201096834d25f2b91b319e7cdbd\">double2x2</a></td></tr>\n<tr class=\"memdesc:gae57d0201096834d25f2b91b319e7cdbd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gae57d0201096834d25f2b91b319e7cdbd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3655bc324008553ca61f39952d0b2d08\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3655bc324008553ca61f39952d0b2d08\"></a>\ntypedef mat&lt; 2, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga3655bc324008553ca61f39952d0b2d08\">double2x3</a></td></tr>\n<tr class=\"memdesc:ga3655bc324008553ca61f39952d0b2d08\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga3655bc324008553ca61f39952d0b2d08\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd33061fc64a7b2dcfd7322c49d9557a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gacd33061fc64a7b2dcfd7322c49d9557a\"></a>\ntypedef mat&lt; 2, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a\">double2x4</a></td></tr>\n<tr class=\"memdesc:gacd33061fc64a7b2dcfd7322c49d9557a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gacd33061fc64a7b2dcfd7322c49d9557a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3d8b9028a1053a44a98902cd1c389472\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga3d8b9028a1053a44a98902cd1c389472\"></a>\ntypedef vec&lt; 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga3d8b9028a1053a44a98902cd1c389472\">double3</a></td></tr>\n<tr class=\"memdesc:ga3d8b9028a1053a44a98902cd1c389472\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga3d8b9028a1053a44a98902cd1c389472\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ec08fc39c9d783dfcc488be240fe975\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5ec08fc39c9d783dfcc488be240fe975\"></a>\ntypedef mat&lt; 3, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga5ec08fc39c9d783dfcc488be240fe975\">double3x2</a></td></tr>\n<tr class=\"memdesc:ga5ec08fc39c9d783dfcc488be240fe975\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga5ec08fc39c9d783dfcc488be240fe975\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4bad5bb20c6ddaecfe4006c93841d180\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4bad5bb20c6ddaecfe4006c93841d180\"></a>\ntypedef mat&lt; 3, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180\">double3x3</a></td></tr>\n<tr class=\"memdesc:ga4bad5bb20c6ddaecfe4006c93841d180\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga4bad5bb20c6ddaecfe4006c93841d180\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ef022e453d663d70aec414b2a80f756\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2ef022e453d663d70aec414b2a80f756\"></a>\ntypedef mat&lt; 3, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga2ef022e453d663d70aec414b2a80f756\">double3x4</a></td></tr>\n<tr class=\"memdesc:ga2ef022e453d663d70aec414b2a80f756\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga2ef022e453d663d70aec414b2a80f756\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf92f58af24f35617518aeb3d4f63fda6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf92f58af24f35617518aeb3d4f63fda6\"></a>\ntypedef vec&lt; 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaf92f58af24f35617518aeb3d4f63fda6\">double4</a></td></tr>\n<tr class=\"memdesc:gaf92f58af24f35617518aeb3d4f63fda6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaf92f58af24f35617518aeb3d4f63fda6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabca29ccceea53669618b751aae0ba83d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gabca29ccceea53669618b751aae0ba83d\"></a>\ntypedef mat&lt; 4, 2, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gabca29ccceea53669618b751aae0ba83d\">double4x2</a></td></tr>\n<tr class=\"memdesc:gabca29ccceea53669618b751aae0ba83d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gabca29ccceea53669618b751aae0ba83d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafad66a02ccd360c86d6ab9ff9cfbc19c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafad66a02ccd360c86d6ab9ff9cfbc19c\"></a>\ntypedef mat&lt; 4, 3, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c\">double4x3</a></td></tr>\n<tr class=\"memdesc:gafad66a02ccd360c86d6ab9ff9cfbc19c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gafad66a02ccd360c86d6ab9ff9cfbc19c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab541bed2e788e4537852a2492860806\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaab541bed2e788e4537852a2492860806\"></a>\ntypedef mat&lt; 4, 4, double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaab541bed2e788e4537852a2492860806\">double4x4</a></td></tr>\n<tr class=\"memdesc:gaab541bed2e788e4537852a2492860806\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaab541bed2e788e4537852a2492860806\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5208d01f6c6fbcb7bb55d610b9c0ead\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaf5208d01f6c6fbcb7bb55d610b9c0ead\"></a>\ntypedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead\">float1</a></td></tr>\n<tr class=\"memdesc:gaf5208d01f6c6fbcb7bb55d610b9c0ead\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaf5208d01f6c6fbcb7bb55d610b9c0ead\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73720b8dc4620835b17f74d428f98c0c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga73720b8dc4620835b17f74d428f98c0c\"></a>\ntypedef float&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga73720b8dc4620835b17f74d428f98c0c\">float1x1</a></td></tr>\n<tr class=\"memdesc:ga73720b8dc4620835b17f74d428f98c0c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga73720b8dc4620835b17f74d428f98c0c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga02d3c013982c183906c61d74aa3166ce\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga02d3c013982c183906c61d74aa3166ce\"></a>\ntypedef vec&lt; 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga02d3c013982c183906c61d74aa3166ce\">float2</a></td></tr>\n<tr class=\"memdesc:ga02d3c013982c183906c61d74aa3166ce\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga02d3c013982c183906c61d74aa3166ce\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga33d43ecbb60a85a1366ff83f8a0ec85f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga33d43ecbb60a85a1366ff83f8a0ec85f\"></a>\ntypedef mat&lt; 2, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f\">float2x2</a></td></tr>\n<tr class=\"memdesc:ga33d43ecbb60a85a1366ff83f8a0ec85f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga33d43ecbb60a85a1366ff83f8a0ec85f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga939b0cff15cee3030f75c1b2e36f89fe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga939b0cff15cee3030f75c1b2e36f89fe\"></a>\ntypedef mat&lt; 2, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe\">float2x3</a></td></tr>\n<tr class=\"memdesc:ga939b0cff15cee3030f75c1b2e36f89fe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga939b0cff15cee3030f75c1b2e36f89fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafec3cfd901ab334a92e0242b8f2269b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafec3cfd901ab334a92e0242b8f2269b4\"></a>\ntypedef mat&lt; 2, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gafec3cfd901ab334a92e0242b8f2269b4\">float2x4</a></td></tr>\n<tr class=\"memdesc:gafec3cfd901ab334a92e0242b8f2269b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gafec3cfd901ab334a92e0242b8f2269b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga821ff110fc8533a053cbfcc93e078cc0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga821ff110fc8533a053cbfcc93e078cc0\"></a>\ntypedef vec&lt; 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga821ff110fc8533a053cbfcc93e078cc0\">float3</a></td></tr>\n<tr class=\"memdesc:ga821ff110fc8533a053cbfcc93e078cc0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga821ff110fc8533a053cbfcc93e078cc0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa6c69f04ba95f3faedf95dae874de576\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa6c69f04ba95f3faedf95dae874de576\"></a>\ntypedef mat&lt; 3, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaa6c69f04ba95f3faedf95dae874de576\">float3x2</a></td></tr>\n<tr class=\"memdesc:gaa6c69f04ba95f3faedf95dae874de576\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaa6c69f04ba95f3faedf95dae874de576\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6ceb5d38a58becdf420026e12a6562f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga6ceb5d38a58becdf420026e12a6562f3\"></a>\ntypedef mat&lt; 3, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga6ceb5d38a58becdf420026e12a6562f3\">float3x3</a></td></tr>\n<tr class=\"memdesc:ga6ceb5d38a58becdf420026e12a6562f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga6ceb5d38a58becdf420026e12a6562f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d2679c321b793ca3784fe0315bb5332\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4d2679c321b793ca3784fe0315bb5332\"></a>\ntypedef mat&lt; 3, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4d2679c321b793ca3784fe0315bb5332\">float3x4</a></td></tr>\n<tr class=\"memdesc:ga4d2679c321b793ca3784fe0315bb5332\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga4d2679c321b793ca3784fe0315bb5332\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae2da7345087db3815a25d8837a727ef1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae2da7345087db3815a25d8837a727ef1\"></a>\ntypedef vec&lt; 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gae2da7345087db3815a25d8837a727ef1\">float4</a></td></tr>\n<tr class=\"memdesc:gae2da7345087db3815a25d8837a727ef1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gae2da7345087db3815a25d8837a727ef1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga308b9af0c221145bcfe9bfc129d9098e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga308b9af0c221145bcfe9bfc129d9098e\"></a>\ntypedef mat&lt; 4, 2, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga308b9af0c221145bcfe9bfc129d9098e\">float4x2</a></td></tr>\n<tr class=\"memdesc:ga308b9af0c221145bcfe9bfc129d9098e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga308b9af0c221145bcfe9bfc129d9098e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0a51b4812038aa81d73ffcc37f741ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac0a51b4812038aa81d73ffcc37f741ac\"></a>\ntypedef mat&lt; 4, 3, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac0a51b4812038aa81d73ffcc37f741ac\">float4x3</a></td></tr>\n<tr class=\"memdesc:gac0a51b4812038aa81d73ffcc37f741ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gac0a51b4812038aa81d73ffcc37f741ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad3051649b3715d828a4ab92cdae7c3bf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gad3051649b3715d828a4ab92cdae7c3bf\"></a>\ntypedef mat&lt; 4, 4, float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gad3051649b3715d828a4ab92cdae7c3bf\">float4x4</a></td></tr>\n<tr class=\"memdesc:gad3051649b3715d828a4ab92cdae7c3bf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gad3051649b3715d828a4ab92cdae7c3bf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0670a2111b5e4a6410bd027fa0232fc3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga0670a2111b5e4a6410bd027fa0232fc3\"></a>\ntypedef int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3\">int1</a></td></tr>\n<tr class=\"memdesc:ga0670a2111b5e4a6410bd027fa0232fc3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer vector with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga0670a2111b5e4a6410bd027fa0232fc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga056ffe02d3a45af626f8e62221881c7a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga056ffe02d3a45af626f8e62221881c7a\"></a>\ntypedef int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga056ffe02d3a45af626f8e62221881c7a\">int1x1</a></td></tr>\n<tr class=\"memdesc:ga056ffe02d3a45af626f8e62221881c7a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 1 component. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga056ffe02d3a45af626f8e62221881c7a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe3a8fd56354caafe24bfe1b1e3ad22a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gafe3a8fd56354caafe24bfe1b1e3ad22a\"></a>\ntypedef vec&lt; 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a\">int2</a></td></tr>\n<tr class=\"memdesc:gafe3a8fd56354caafe24bfe1b1e3ad22a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer vector with 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gafe3a8fd56354caafe24bfe1b1e3ad22a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e5ce477c15836b21e3c42daac68554d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga4e5ce477c15836b21e3c42daac68554d\"></a>\ntypedef mat&lt; 2, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4e5ce477c15836b21e3c42daac68554d\">int2x2</a></td></tr>\n<tr class=\"memdesc:ga4e5ce477c15836b21e3c42daac68554d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga4e5ce477c15836b21e3c42daac68554d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga197ded5ad8354f6b6fb91189d7a269b3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga197ded5ad8354f6b6fb91189d7a269b3\"></a>\ntypedef mat&lt; 2, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3\">int2x3</a></td></tr>\n<tr class=\"memdesc:ga197ded5ad8354f6b6fb91189d7a269b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga197ded5ad8354f6b6fb91189d7a269b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2749d59a7fddbac44f34ba78e57ef807\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga2749d59a7fddbac44f34ba78e57ef807\"></a>\ntypedef mat&lt; 2, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga2749d59a7fddbac44f34ba78e57ef807\">int2x4</a></td></tr>\n<tr class=\"memdesc:ga2749d59a7fddbac44f34ba78e57ef807\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga2749d59a7fddbac44f34ba78e57ef807\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga909c38a425f215a50c847145d7da09f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga909c38a425f215a50c847145d7da09f0\"></a>\ntypedef vec&lt; 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga909c38a425f215a50c847145d7da09f0\">int3</a></td></tr>\n<tr class=\"memdesc:ga909c38a425f215a50c847145d7da09f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer vector with 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga909c38a425f215a50c847145d7da09f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4cbe16a92cf3664376c7a2fc5126aa8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaa4cbe16a92cf3664376c7a2fc5126aa8\"></a>\ntypedef mat&lt; 3, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8\">int3x2</a></td></tr>\n<tr class=\"memdesc:gaa4cbe16a92cf3664376c7a2fc5126aa8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaa4cbe16a92cf3664376c7a2fc5126aa8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga15c9649286f0bf431bdf9b3509580048\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga15c9649286f0bf431bdf9b3509580048\"></a>\ntypedef mat&lt; 3, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga15c9649286f0bf431bdf9b3509580048\">int3x3</a></td></tr>\n<tr class=\"memdesc:ga15c9649286f0bf431bdf9b3509580048\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga15c9649286f0bf431bdf9b3509580048\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaacac46ddc7d15d0f9529d05c92946a0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaacac46ddc7d15d0f9529d05c92946a0f\"></a>\ntypedef mat&lt; 3, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f\">int3x4</a></td></tr>\n<tr class=\"memdesc:gaacac46ddc7d15d0f9529d05c92946a0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaacac46ddc7d15d0f9529d05c92946a0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaecdef18c819c205aeee9f94dc93de56a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gaecdef18c819c205aeee9f94dc93de56a\"></a>\ntypedef vec&lt; 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaecdef18c819c205aeee9f94dc93de56a\">int4</a></td></tr>\n<tr class=\"memdesc:gaecdef18c819c205aeee9f94dc93de56a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer vector with 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gaecdef18c819c205aeee9f94dc93de56a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga97a39dd9bc7d572810d80b8467cbffa1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga97a39dd9bc7d572810d80b8467cbffa1\"></a>\ntypedef mat&lt; 4, 2, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1\">int4x2</a></td></tr>\n<tr class=\"memdesc:ga97a39dd9bc7d572810d80b8467cbffa1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga97a39dd9bc7d572810d80b8467cbffa1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae4a2c53f14aeec9a17c2b81142b7e82d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae4a2c53f14aeec9a17c2b81142b7e82d\"></a>\ntypedef mat&lt; 4, 3, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d\">int4x3</a></td></tr>\n<tr class=\"memdesc:gae4a2c53f14aeec9a17c2b81142b7e82d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:gae4a2c53f14aeec9a17c2b81142b7e82d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04dee1552424198b8f58b377c2ee00d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga04dee1552424198b8f58b377c2ee00d8\"></a>\ntypedef mat&lt; 4, 4, int, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga04dee1552424198b8f58b377c2ee00d8\">int4x4</a></td></tr>\n<tr class=\"memdesc:ga04dee1552424198b8f58b377c2ee00d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) <br /></td></tr>\n<tr class=\"separator:ga04dee1552424198b8f58b377c2ee00d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gac63011205bf6d0be82589dc56dd26708\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gac63011205bf6d0be82589dc56dd26708\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac63011205bf6d0be82589dc56dd26708\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac63011205bf6d0be82589dc56dd26708\">atan2</a> (T x, T y)</td></tr>\n<tr class=\"memdesc:gac63011205bf6d0be82589dc56dd26708\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gac63011205bf6d0be82589dc56dd26708\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga83bc41bd6f89113ee8006576b12bfc50\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga83bc41bd6f89113ee8006576b12bfc50\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga83bc41bd6f89113ee8006576b12bfc50\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga83bc41bd6f89113ee8006576b12bfc50\">atan2</a> (const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y)</td></tr>\n<tr class=\"memdesc:ga83bc41bd6f89113ee8006576b12bfc50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga83bc41bd6f89113ee8006576b12bfc50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac39314f5087e7e51e592897cabbc1927\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gac39314f5087e7e51e592897cabbc1927\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac39314f5087e7e51e592897cabbc1927\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac39314f5087e7e51e592897cabbc1927\">atan2</a> (const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y)</td></tr>\n<tr class=\"memdesc:gac39314f5087e7e51e592897cabbc1927\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gac39314f5087e7e51e592897cabbc1927\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaba86c28da7bf5bdac64fecf7d56e8ff3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaba86c28da7bf5bdac64fecf7d56e8ff3\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaba86c28da7bf5bdac64fecf7d56e8ff3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3\">atan2</a> (const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y)</td></tr>\n<tr class=\"memdesc:gaba86c28da7bf5bdac64fecf7d56e8ff3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaba86c28da7bf5bdac64fecf7d56e8ff3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4b04dcd3526996d68c1bfe17bfc8657\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaf4b04dcd3526996d68c1bfe17bfc8657\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaf4b04dcd3526996d68c1bfe17bfc8657\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaf4b04dcd3526996d68c1bfe17bfc8657\">isfinite</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf4b04dcd3526996d68c1bfe17bfc8657\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaf4b04dcd3526996d68c1bfe17bfc8657\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3b12b8ac3014418fe53c299478b6603\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gac3b12b8ac3014418fe53c299478b6603\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac3b12b8ac3014418fe53c299478b6603\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 1, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gac3b12b8ac3014418fe53c299478b6603\">isfinite</a> (const vec&lt; 1, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:gac3b12b8ac3014418fe53c299478b6603\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gac3b12b8ac3014418fe53c299478b6603\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e76dc3e406ce6a4155c2b12a2e4b084\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga8e76dc3e406ce6a4155c2b12a2e4b084\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8e76dc3e406ce6a4155c2b12a2e4b084\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga8e76dc3e406ce6a4155c2b12a2e4b084\">isfinite</a> (const vec&lt; 2, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga8e76dc3e406ce6a4155c2b12a2e4b084\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga8e76dc3e406ce6a4155c2b12a2e4b084\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga929ef27f896d902c1771a2e5e150fc97\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga929ef27f896d902c1771a2e5e150fc97\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga929ef27f896d902c1771a2e5e150fc97\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga929ef27f896d902c1771a2e5e150fc97\">isfinite</a> (const vec&lt; 3, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga929ef27f896d902c1771a2e5e150fc97\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga929ef27f896d902c1771a2e5e150fc97\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19925badbe10ce61df1d0de00be0b5ad\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga19925badbe10ce61df1d0de00be0b5ad\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga19925badbe10ce61df1d0de00be0b5ad\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga19925badbe10ce61df1d0de00be0b5ad\">isfinite</a> (const vec&lt; 4, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga19925badbe10ce61df1d0de00be0b5ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga19925badbe10ce61df1d0de00be0b5ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5494ba3a95ea6594c86fc75236886864\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga5494ba3a95ea6594c86fc75236886864\"></a>\ntemplate&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga5494ba3a95ea6594c86fc75236886864\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga5494ba3a95ea6594c86fc75236886864\">lerp</a> (T x, T y, T a)</td></tr>\n<tr class=\"memdesc:ga5494ba3a95ea6594c86fc75236886864\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga5494ba3a95ea6594c86fc75236886864\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa551c0a0e16d2d4608e49f7696df897f\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaa551c0a0e16d2d4608e49f7696df897f\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa551c0a0e16d2d4608e49f7696df897f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaa551c0a0e16d2d4608e49f7696df897f\">lerp</a> (const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y, T a)</td></tr>\n<tr class=\"memdesc:gaa551c0a0e16d2d4608e49f7696df897f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaa551c0a0e16d2d4608e49f7696df897f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga44a8b5fd776320f1713413dec959b32a\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga44a8b5fd776320f1713413dec959b32a\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga44a8b5fd776320f1713413dec959b32a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga44a8b5fd776320f1713413dec959b32a\">lerp</a> (const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y, T a)</td></tr>\n<tr class=\"memdesc:ga44a8b5fd776320f1713413dec959b32a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga44a8b5fd776320f1713413dec959b32a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga89ac8e000199292ec7875519d27e214b\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga89ac8e000199292ec7875519d27e214b\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga89ac8e000199292ec7875519d27e214b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga89ac8e000199292ec7875519d27e214b\">lerp</a> (const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, T a)</td></tr>\n<tr class=\"memdesc:ga89ac8e000199292ec7875519d27e214b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga89ac8e000199292ec7875519d27e214b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf68de5baf72d16135368b8ef4f841604\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaf68de5baf72d16135368b8ef4f841604\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf68de5baf72d16135368b8ef4f841604\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaf68de5baf72d16135368b8ef4f841604\">lerp</a> (const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y, const vec&lt; 2, T, Q &gt; &amp;a)</td></tr>\n<tr class=\"memdesc:gaf68de5baf72d16135368b8ef4f841604\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaf68de5baf72d16135368b8ef4f841604\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4ae1a616c8540a2649eab8e0cd051bb3\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga4ae1a616c8540a2649eab8e0cd051bb3\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4ae1a616c8540a2649eab8e0cd051bb3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga4ae1a616c8540a2649eab8e0cd051bb3\">lerp</a> (const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y, const vec&lt; 3, T, Q &gt; &amp;a)</td></tr>\n<tr class=\"memdesc:ga4ae1a616c8540a2649eab8e0cd051bb3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga4ae1a616c8540a2649eab8e0cd051bb3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab5477ab69c40de4db5d58d3359529724\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gab5477ab69c40de4db5d58d3359529724\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab5477ab69c40de4db5d58d3359529724\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gab5477ab69c40de4db5d58d3359529724\">lerp</a> (const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, const vec&lt; 4, T, Q &gt; &amp;a)</td></tr>\n<tr class=\"memdesc:gab5477ab69c40de4db5d58d3359529724\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gab5477ab69c40de4db5d58d3359529724\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0fd09e616d122bc2ed9726682ffd44b7\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga0fd09e616d122bc2ed9726682ffd44b7\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0fd09e616d122bc2ed9726682ffd44b7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga0fd09e616d122bc2ed9726682ffd44b7\">saturate</a> (T x)</td></tr>\n<tr class=\"memdesc:ga0fd09e616d122bc2ed9726682ffd44b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga0fd09e616d122bc2ed9726682ffd44b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaee97b8001c794a78a44f5d59f62a8aba\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaee97b8001c794a78a44f5d59f62a8aba\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaee97b8001c794a78a44f5d59f62a8aba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#gaee97b8001c794a78a44f5d59f62a8aba\">saturate</a> (const vec&lt; 2, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:gaee97b8001c794a78a44f5d59f62a8aba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:gaee97b8001c794a78a44f5d59f62a8aba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39bfe3a421286ee31680d45c31ccc161\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga39bfe3a421286ee31680d45c31ccc161\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga39bfe3a421286ee31680d45c31ccc161\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga39bfe3a421286ee31680d45c31ccc161\">saturate</a> (const vec&lt; 3, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga39bfe3a421286ee31680d45c31ccc161\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga39bfe3a421286ee31680d45c31ccc161\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga356f8c3a7e7d6376d3d4b0a026407183\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"ga356f8c3a7e7d6376d3d4b0a026407183\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga356f8c3a7e7d6376d3d4b0a026407183\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183\">saturate</a> (const vec&lt; 4, T, Q &gt; &amp;x)</td></tr>\n<tr class=\"memdesc:ga356f8c3a7e7d6376d3d4b0a026407183\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) <br /></td></tr>\n<tr class=\"separator:ga356f8c3a7e7d6376d3d4b0a026407183\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00017.html\" title=\"GLM_GTX_compatibility \">glm/gtx/compatibility.hpp</a>&gt; to use the features of this extension. </p>\n<p>Provide functions to increase the compatibility with Cg and HLSL languages </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00316.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_component_wise</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_component_wise<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00018.html\" title=\"GLM_GTX_component_wise \">glm/gtx/component_wise.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf71833350e15e74d31cbf8a3e7f27051\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaf71833350e15e74d31cbf8a3e7f27051\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#gaf71833350e15e74d31cbf8a3e7f27051\">compAdd</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf71833350e15e74d31cbf8a3e7f27051\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Add all vector components together.  <a href=\"a00316.html#gaf71833350e15e74d31cbf8a3e7f27051\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf71833350e15e74d31cbf8a3e7f27051\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabfa4bb19298c8c73d4217ba759c496b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gabfa4bb19298c8c73d4217ba759c496b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#gabfa4bb19298c8c73d4217ba759c496b6\">compMax</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:gabfa4bb19298c8c73d4217ba759c496b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find the maximum value between single vector components.  <a href=\"a00316.html#gabfa4bb19298c8c73d4217ba759c496b6\">More...</a><br /></td></tr>\n<tr class=\"separator:gabfa4bb19298c8c73d4217ba759c496b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab5d0832b5c7bb01b8d7395973bfb1425\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gab5d0832b5c7bb01b8d7395973bfb1425\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425\">compMin</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:gab5d0832b5c7bb01b8d7395973bfb1425\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Find the minimum value between single vector components.  <a href=\"a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425\">More...</a><br /></td></tr>\n<tr class=\"separator:gab5d0832b5c7bb01b8d7395973bfb1425\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae8ab88024197202c9479d33bdc5a8a5d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae8ab88024197202c9479d33bdc5a8a5d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType::value_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#gae8ab88024197202c9479d33bdc5a8a5d\">compMul</a> (genType const &amp;v)</td></tr>\n<tr class=\"memdesc:gae8ab88024197202c9479d33bdc5a8a5d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Multiply all vector components together.  <a href=\"a00316.html#gae8ab88024197202c9479d33bdc5a8a5d\">More...</a><br /></td></tr>\n<tr class=\"separator:gae8ab88024197202c9479d33bdc5a8a5d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f2b81ada8515875e58cb1667b6b9908\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename floatType , length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8f2b81ada8515875e58cb1667b6b9908\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, floatType, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#ga8f2b81ada8515875e58cb1667b6b9908\">compNormalize</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga8f2b81ada8515875e58cb1667b6b9908\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert an integer vector to a normalized float vector.  <a href=\"a00316.html#ga8f2b81ada8515875e58cb1667b6b9908\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f2b81ada8515875e58cb1667b6b9908\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga80abc2980d65d675f435d178c36880eb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , typename floatType , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga80abc2980d65d675f435d178c36880eb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00316.html#ga80abc2980d65d675f435d178c36880eb\">compScale</a> (vec&lt; L, floatType, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga80abc2980d65d675f435d178c36880eb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert a normalized float vector to an integer vector.  <a href=\"a00316.html#ga80abc2980d65d675f435d178c36880eb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga80abc2980d65d675f435d178c36880eb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00018.html\" title=\"GLM_GTX_component_wise \">glm/gtx/component_wise.hpp</a>&gt; to use the features of this extension. </p>\n<p>Operations between components of a type </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaf71833350e15e74d31cbf8a3e7f27051\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType::value_type glm::compAdd </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Add all vector components together. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00316.html\" title=\"Include <glm/gtx/component_wise.hpp> to use the features of this extension. \">GLM_GTX_component_wise</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabfa4bb19298c8c73d4217ba759c496b6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType::value_type glm::compMax </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Find the maximum value between single vector components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00316.html\" title=\"Include <glm/gtx/component_wise.hpp> to use the features of this extension. \">GLM_GTX_component_wise</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab5d0832b5c7bb01b8d7395973bfb1425\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType::value_type glm::compMin </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Find the minimum value between single vector components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00316.html\" title=\"Include <glm/gtx/component_wise.hpp> to use the features of this extension. \">GLM_GTX_component_wise</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae8ab88024197202c9479d33bdc5a8a5d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType::value_type glm::compMul </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Multiply all vector components together. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00316.html\" title=\"Include <glm/gtx/component_wise.hpp> to use the features of this extension. \">GLM_GTX_component_wise</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8f2b81ada8515875e58cb1667b6b9908\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, floatType, Q&gt; glm::compNormalize </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert an integer vector to a normalized float vector. </p>\n<p>If the parameter value type is already a floating qualifier type, the value is passed through. </p><dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00316.html\" title=\"Include <glm/gtx/component_wise.hpp> to use the features of this extension. \">GLM_GTX_component_wise</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga80abc2980d65d675f435d178c36880eb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::compScale </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, floatType, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert a normalized float vector to an integer vector. </p>\n<p>If the parameter value type is already a floating qualifier type, the value is passed through. </p><dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00316.html\" title=\"Include <glm/gtx/component_wise.hpp> to use the features of this extension. \">GLM_GTX_component_wise</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00317.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_dual_quaternion</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_dual_quaternion<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00022.html\" title=\"GLM_GTX_dual_quaternion \">glm/gtx/dual_quaternion.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga3d71f98d84ba59dfe4e369fde4714cd6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef highp_ddualquat&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">ddualquat</a></td></tr>\n<tr class=\"memdesc:ga3d71f98d84ba59dfe4e369fde4714cd6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of default double-qualifier floating-point numbers.  <a href=\"a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3d71f98d84ba59dfe4e369fde4714cd6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae93abee0c979902fbec6a7bee0f6fae1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef highp_fdualquat&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">dualquat</a></td></tr>\n<tr class=\"memdesc:gae93abee0c979902fbec6a7bee0f6fae1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of floating-point numbers.  <a href=\"a00317.html#gae93abee0c979902fbec6a7bee0f6fae1\">More...</a><br /></td></tr>\n<tr class=\"separator:gae93abee0c979902fbec6a7bee0f6fae1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga237c2b9b42c9a930e49de5840ae0f930\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef highp_fdualquat&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">fdualquat</a></td></tr>\n<tr class=\"memdesc:ga237c2b9b42c9a930e49de5840ae0f930\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of single-qualifier floating-point numbers.  <a href=\"a00317.html#ga237c2b9b42c9a930e49de5840ae0f930\">More...</a><br /></td></tr>\n<tr class=\"separator:ga237c2b9b42c9a930e49de5840ae0f930\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8f67eafa7197d7a668dad5105a463d2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; double, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga8f67eafa7197d7a668dad5105a463d2a\">highp_ddualquat</a></td></tr>\n<tr class=\"memdesc:ga8f67eafa7197d7a668dad5105a463d2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of high double-qualifier floating-point numbers.  <a href=\"a00317.html#ga8f67eafa7197d7a668dad5105a463d2a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f67eafa7197d7a668dad5105a463d2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ef5bf1da52a9d4932335a517086ceaf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf\">highp_dualquat</a></td></tr>\n<tr class=\"memdesc:ga9ef5bf1da52a9d4932335a517086ceaf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of high single-qualifier floating-point numbers.  <a href=\"a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9ef5bf1da52a9d4932335a517086ceaf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4c4e55e9c99dc57b299ed590968da564\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, highp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga4c4e55e9c99dc57b299ed590968da564\">highp_fdualquat</a></td></tr>\n<tr class=\"memdesc:ga4c4e55e9c99dc57b299ed590968da564\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of high single-qualifier floating-point numbers.  <a href=\"a00317.html#ga4c4e55e9c99dc57b299ed590968da564\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4c4e55e9c99dc57b299ed590968da564\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4c5103338af3dac7e0fbc86895a3f1a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; double, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a\">lowp_ddualquat</a></td></tr>\n<tr class=\"memdesc:gab4c5103338af3dac7e0fbc86895a3f1a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of low double-qualifier floating-point numbers.  <a href=\"a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a\">More...</a><br /></td></tr>\n<tr class=\"separator:gab4c5103338af3dac7e0fbc86895a3f1a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade05d29ebd4deea0f883d0e1bb4169aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa\">lowp_dualquat</a></td></tr>\n<tr class=\"memdesc:gade05d29ebd4deea0f883d0e1bb4169aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of low single-qualifier floating-point numbers.  <a href=\"a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa\">More...</a><br /></td></tr>\n<tr class=\"separator:gade05d29ebd4deea0f883d0e1bb4169aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa38f671be25a7f3b136a452a8bb42860\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, lowp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gaa38f671be25a7f3b136a452a8bb42860\">lowp_fdualquat</a></td></tr>\n<tr class=\"memdesc:gaa38f671be25a7f3b136a452a8bb42860\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of low single-qualifier floating-point numbers.  <a href=\"a00317.html#gaa38f671be25a7f3b136a452a8bb42860\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa38f671be25a7f3b136a452a8bb42860\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0fb11e48e2d16348ccb06a25213641b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; double, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga0fb11e48e2d16348ccb06a25213641b4\">mediump_ddualquat</a></td></tr>\n<tr class=\"memdesc:ga0fb11e48e2d16348ccb06a25213641b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of medium double-qualifier floating-point numbers.  <a href=\"a00317.html#ga0fb11e48e2d16348ccb06a25213641b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0fb11e48e2d16348ccb06a25213641b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa7aeb54c167712b38f2178a1be2360ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gaa7aeb54c167712b38f2178a1be2360ad\">mediump_dualquat</a></td></tr>\n<tr class=\"memdesc:gaa7aeb54c167712b38f2178a1be2360ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of medium single-qualifier floating-point numbers.  <a href=\"a00317.html#gaa7aeb54c167712b38f2178a1be2360ad\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa7aeb54c167712b38f2178a1be2360ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a6b594ff7e81150d8143001367a9431\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef tdualquat&lt; float, mediump &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga4a6b594ff7e81150d8143001367a9431\">mediump_fdualquat</a></td></tr>\n<tr class=\"memdesc:ga4a6b594ff7e81150d8143001367a9431\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Dual-quaternion of medium single-qualifier floating-point numbers.  <a href=\"a00317.html#ga4a6b594ff7e81150d8143001367a9431\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a6b594ff7e81150d8143001367a9431\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0b35c0e30df8a875dbaa751e0bd800e0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0b35c0e30df8a875dbaa751e0bd800e0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0\">dual_quat_identity</a> ()</td></tr>\n<tr class=\"memdesc:ga0b35c0e30df8a875dbaa751e0bd800e0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates an identity dual quaternion.  <a href=\"a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b35c0e30df8a875dbaa751e0bd800e0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac4064ff813759740201765350eac4236\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac4064ff813759740201765350eac4236\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gac4064ff813759740201765350eac4236\">dualquat_cast</a> (mat&lt; 2, 4, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gac4064ff813759740201765350eac4236\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion.  <a href=\"a00317.html#gac4064ff813759740201765350eac4236\">More...</a><br /></td></tr>\n<tr class=\"separator:gac4064ff813759740201765350eac4236\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga91025ebdca0f4ea54da08497b00e8c84\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga91025ebdca0f4ea54da08497b00e8c84\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga91025ebdca0f4ea54da08497b00e8c84\">dualquat_cast</a> (mat&lt; 3, 4, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga91025ebdca0f4ea54da08497b00e8c84\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion.  <a href=\"a00317.html#ga91025ebdca0f4ea54da08497b00e8c84\">More...</a><br /></td></tr>\n<tr class=\"separator:ga91025ebdca0f4ea54da08497b00e8c84\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga070f521a953f6461af4ab4cf8ccbf27e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga070f521a953f6461af4ab4cf8ccbf27e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e\">inverse</a> (tdualquat&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga070f521a953f6461af4ab4cf8ccbf27e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the q inverse.  <a href=\"a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga070f521a953f6461af4ab4cf8ccbf27e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace8380112d16d33f520839cb35a4d173\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gace8380112d16d33f520839cb35a4d173\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gace8380112d16d33f520839cb35a4d173\">lerp</a> (tdualquat&lt; T, Q &gt; const &amp;x, tdualquat&lt; T, Q &gt; const &amp;y, T const &amp;a)</td></tr>\n<tr class=\"memdesc:gace8380112d16d33f520839cb35a4d173\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the linear interpolation of two dual quaternion.  <a href=\"a00317.html#gace8380112d16d33f520839cb35a4d173\">More...</a><br /></td></tr>\n<tr class=\"separator:gace8380112d16d33f520839cb35a4d173\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae99d143b37f9cad4cd9285571aab685a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae99d143b37f9cad4cd9285571aab685a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gae99d143b37f9cad4cd9285571aab685a\">mat2x4_cast</a> (tdualquat&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gae99d143b37f9cad4cd9285571aab685a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 2 * 4 matrix.  <a href=\"a00317.html#gae99d143b37f9cad4cd9285571aab685a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae99d143b37f9cad4cd9285571aab685a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf59f5bb69620d2891c3795c6f2639179\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf59f5bb69620d2891c3795c6f2639179\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#gaf59f5bb69620d2891c3795c6f2639179\">mat3x4_cast</a> (tdualquat&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaf59f5bb69620d2891c3795c6f2639179\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 3 * 4 matrix.  <a href=\"a00317.html#gaf59f5bb69620d2891c3795c6f2639179\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf59f5bb69620d2891c3795c6f2639179\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga299b8641509606b1958ffa104a162cfe\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga299b8641509606b1958ffa104a162cfe\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL tdualquat&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00317.html#ga299b8641509606b1958ffa104a162cfe\">normalize</a> (tdualquat&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga299b8641509606b1958ffa104a162cfe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the normalized quaternion.  <a href=\"a00317.html#ga299b8641509606b1958ffa104a162cfe\">More...</a><br /></td></tr>\n<tr class=\"separator:ga299b8641509606b1958ffa104a162cfe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00022.html\" title=\"GLM_GTX_dual_quaternion \">glm/gtx/dual_quaternion.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines a templated dual-quaternion type and several dual-quaternion operations. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga3d71f98d84ba59dfe4e369fde4714cd6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_ddualquat ddualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of default double-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00260\">260</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae93abee0c979902fbec6a7bee0f6fae1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_fdualquat dualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00236\">236</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga237c2b9b42c9a930e49de5840ae0f930\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef highp_fdualquat fdualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00241\">241</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8f67eafa7197d7a668dad5105a463d2a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;double, highp&gt; highp_ddualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of high double-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00229\">229</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9ef5bf1da52a9d4932335a517086ceaf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;float, highp&gt; highp_dualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of high single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00197\">197</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4c4e55e9c99dc57b299ed590968da564\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;float, highp&gt; highp_fdualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of high single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00213\">213</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab4c5103338af3dac7e0fbc86895a3f1a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;double, lowp&gt; lowp_ddualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of low double-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00219\">219</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gade05d29ebd4deea0f883d0e1bb4169aa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;float, lowp&gt; lowp_dualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of low single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00187\">187</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa38f671be25a7f3b136a452a8bb42860\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;float, lowp&gt; lowp_fdualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of low single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00203\">203</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0fb11e48e2d16348ccb06a25213641b4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;double, mediump&gt; mediump_ddualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of medium double-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00224\">224</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa7aeb54c167712b38f2178a1be2360ad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;float, mediump&gt; mediump_dualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of medium single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00192\">192</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4a6b594ff7e81150d8143001367a9431\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef tdualquat&lt;float, mediump&gt; mediump_fdualquat</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Dual-quaternion of medium single-qualifier floating-point numbers. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00022_source.html#l00208\">208</a> of file <a class=\"el\" href=\"a00022_source.html\">dual_quaternion.hpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga0b35c0e30df8a875dbaa751e0bd800e0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL tdualquat&lt;T, Q&gt; glm::dual_quat_identity </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates an identity dual quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac4064ff813759740201765350eac4236\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL tdualquat&lt;T, Q&gt; glm::dualquat_cast </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 2, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga91025ebdca0f4ea54da08497b00e8c84\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL tdualquat&lt;T, Q&gt; glm::dualquat_cast </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga070f521a953f6461af4ab4cf8ccbf27e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL tdualquat&lt;T, Q&gt; glm::inverse </td>\n          <td>(</td>\n          <td class=\"paramtype\">tdualquat&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the q inverse. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gace8380112d16d33f520839cb35a4d173\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL tdualquat&lt;T, Q&gt; glm::lerp </td>\n          <td>(</td>\n          <td class=\"paramtype\">tdualquat&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">tdualquat&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the linear interpolation of two dual quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtc_dual_quaternion </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae99d143b37f9cad4cd9285571aab685a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; glm::mat2x4_cast </td>\n          <td>(</td>\n          <td class=\"paramtype\">tdualquat&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a quaternion to a 2 * 4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf59f5bb69620d2891c3795c6f2639179\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; glm::mat3x4_cast </td>\n          <td>(</td>\n          <td class=\"paramtype\">tdualquat&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a quaternion to a 3 * 4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga299b8641509606b1958ffa104a162cfe\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL tdualquat&lt;T, Q&gt; glm::normalize </td>\n          <td>(</td>\n          <td class=\"paramtype\">tdualquat&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the normalized quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00317.html\" title=\"Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension. \">GLM_GTX_dual_quaternion</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00318.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_easing</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_easing<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00023.html\" title=\"GLM_GTX_easing \">glm/gtx/easing.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga93cddcdb6347a44d5927cc2bf2570816\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga93cddcdb6347a44d5927cc2bf2570816\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga93cddcdb6347a44d5927cc2bf2570816\">backEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:ga93cddcdb6347a44d5927cc2bf2570816\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga33777c9dd98f61d9472f96aafdf2bd36\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga33777c9dd98f61d9472f96aafdf2bd36\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga33777c9dd98f61d9472f96aafdf2bd36\">backEaseIn</a> (genType const &amp;a, genType const &amp;o)</td></tr>\n<tr class=\"separator:ga33777c9dd98f61d9472f96aafdf2bd36\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace6d24722a2f6722b56398206eb810bb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gace6d24722a2f6722b56398206eb810bb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gace6d24722a2f6722b56398206eb810bb\">backEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:gace6d24722a2f6722b56398206eb810bb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga68a7b760f2afdfab298d5cd6d7611fb1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga68a7b760f2afdfab298d5cd6d7611fb1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga68a7b760f2afdfab298d5cd6d7611fb1\">backEaseInOut</a> (genType const &amp;a, genType const &amp;o)</td></tr>\n<tr class=\"separator:ga68a7b760f2afdfab298d5cd6d7611fb1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf25069fa906413c858fd46903d520b9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gabf25069fa906413c858fd46903d520b9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gabf25069fa906413c858fd46903d520b9\">backEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:gabf25069fa906413c858fd46903d520b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga640c1ac6fe9d277a197da69daf60ee4f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga640c1ac6fe9d277a197da69daf60ee4f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga640c1ac6fe9d277a197da69daf60ee4f\">backEaseOut</a> (genType const &amp;a, genType const &amp;o)</td></tr>\n<tr class=\"separator:ga640c1ac6fe9d277a197da69daf60ee4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaac30767f2e430b0c3fc859a4d59c7b5b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaac30767f2e430b0c3fc859a4d59c7b5b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gaac30767f2e430b0c3fc859a4d59c7b5b\">bounceEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:gaac30767f2e430b0c3fc859a4d59c7b5b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadf9f38eff1e5f4c2fa5b629a25ae413e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gadf9f38eff1e5f4c2fa5b629a25ae413e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gadf9f38eff1e5f4c2fa5b629a25ae413e\">bounceEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:gadf9f38eff1e5f4c2fa5b629a25ae413e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94007005ff0dcfa0749ebfa2aec540b2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga94007005ff0dcfa0749ebfa2aec540b2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga94007005ff0dcfa0749ebfa2aec540b2\">bounceEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"separator:ga94007005ff0dcfa0749ebfa2aec540b2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga34508d4b204a321ec26d6086aa047997\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga34508d4b204a321ec26d6086aa047997\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga34508d4b204a321ec26d6086aa047997\">circularEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga34508d4b204a321ec26d6086aa047997\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after shifted quadrant IV of unit circle.  <a href=\"a00318.html#ga34508d4b204a321ec26d6086aa047997\">More...</a><br /></td></tr>\n<tr class=\"separator:ga34508d4b204a321ec26d6086aa047997\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0c1027637a5b02d4bb3612aa12599d69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga0c1027637a5b02d4bb3612aa12599d69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga0c1027637a5b02d4bb3612aa12599d69\">circularEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga0c1027637a5b02d4bb3612aa12599d69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise circular function y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1].  <a href=\"a00318.html#ga0c1027637a5b02d4bb3612aa12599d69\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0c1027637a5b02d4bb3612aa12599d69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga26fefde9ced9b72745fe21f1a3fe8da7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga26fefde9ced9b72745fe21f1a3fe8da7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7\">circularEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga26fefde9ced9b72745fe21f1a3fe8da7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after shifted quadrant II of unit circle.  <a href=\"a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga26fefde9ced9b72745fe21f1a3fe8da7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaff52f746102b94864d105563ba8895ae\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gaff52f746102b94864d105563ba8895ae\"></a>\ntemplate&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaff52f746102b94864d105563ba8895ae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gaff52f746102b94864d105563ba8895ae\">cubicEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gaff52f746102b94864d105563ba8895ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the cubic y = x^3. <br /></td></tr>\n<tr class=\"separator:gaff52f746102b94864d105563ba8895ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga55134072b42d75452189321d4a2ad91c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga55134072b42d75452189321d4a2ad91c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga55134072b42d75452189321d4a2ad91c\">cubicEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga55134072b42d75452189321d4a2ad91c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise cubic y = (1/2)((2x)^3) ; [0, 0.5) y = (1/2)((2x-2)^3 + 2) ; [0.5, 1].  <a href=\"a00318.html#ga55134072b42d75452189321d4a2ad91c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga55134072b42d75452189321d4a2ad91c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga40d746385d8bcc5973f5bc6a2340ca91\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga40d746385d8bcc5973f5bc6a2340ca91\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91\">cubicEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga40d746385d8bcc5973f5bc6a2340ca91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the cubic y = (x - 1)^3 + 1.  <a href=\"a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91\">More...</a><br /></td></tr>\n<tr class=\"separator:ga40d746385d8bcc5973f5bc6a2340ca91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga230918eccee4e113d10ec5b8cdc58695\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga230918eccee4e113d10ec5b8cdc58695\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga230918eccee4e113d10ec5b8cdc58695\">elasticEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga230918eccee4e113d10ec5b8cdc58695\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1))  <a href=\"a00318.html#ga230918eccee4e113d10ec5b8cdc58695\">More...</a><br /></td></tr>\n<tr class=\"separator:ga230918eccee4e113d10ec5b8cdc58695\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2db4ac8959559b11b4029e54812908d6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2db4ac8959559b11b4029e54812908d6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga2db4ac8959559b11b4029e54812908d6\">elasticEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga2db4ac8959559b11b4029e54812908d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise exponentially-damped sine wave: y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1].  <a href=\"a00318.html#ga2db4ac8959559b11b4029e54812908d6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2db4ac8959559b11b4029e54812908d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365\">elasticEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1.  <a href=\"a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365\">More...</a><br /></td></tr>\n<tr class=\"separator:gace9c9d1bdf88bf2ab1e7cdefa54c7365\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f24ee9219ab4c84dc8de24be84c1e3c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7f24ee9219ab4c84dc8de24be84c1e3c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c\">exponentialEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga7f24ee9219ab4c84dc8de24be84c1e3c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the exponential function y = 2^(10(x - 1))  <a href=\"a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f24ee9219ab4c84dc8de24be84c1e3c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga232fb6dc093c5ce94bee105ff2947501\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga232fb6dc093c5ce94bee105ff2947501\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga232fb6dc093c5ce94bee105ff2947501\">exponentialEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga232fb6dc093c5ce94bee105ff2947501\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise exponential y = (1/2)2^(10(2x - 1)) ; [0,0.5) y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1].  <a href=\"a00318.html#ga232fb6dc093c5ce94bee105ff2947501\">More...</a><br /></td></tr>\n<tr class=\"separator:ga232fb6dc093c5ce94bee105ff2947501\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga517f2bcfd15bc2c25c466ae50808efc3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga517f2bcfd15bc2c25c466ae50808efc3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3\">exponentialEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga517f2bcfd15bc2c25c466ae50808efc3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the exponential function y = -2^(-10x) + 1.  <a href=\"a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga517f2bcfd15bc2c25c466ae50808efc3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga290c3e47cb0a49f2e8abe90b1872b649\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga290c3e47cb0a49f2e8abe90b1872b649\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649\">linearInterpolation</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga290c3e47cb0a49f2e8abe90b1872b649\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the line y = x.  <a href=\"a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649\">More...</a><br /></td></tr>\n<tr class=\"separator:ga290c3e47cb0a49f2e8abe90b1872b649\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf42089d35855695132d217cd902304a0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaf42089d35855695132d217cd902304a0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gaf42089d35855695132d217cd902304a0\">quadraticEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gaf42089d35855695132d217cd902304a0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the parabola y = x^2.  <a href=\"a00318.html#gaf42089d35855695132d217cd902304a0\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf42089d35855695132d217cd902304a0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03e8fc2d7945a4e63ee33b2159c14cea\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga03e8fc2d7945a4e63ee33b2159c14cea\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea\">quadraticEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga03e8fc2d7945a4e63ee33b2159c14cea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise quadratic y = (1/2)((2x)^2) ; [0, 0.5) y = -(1/2)((2x-1)*(2x-3) - 1) ; [0.5, 1].  <a href=\"a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea\">More...</a><br /></td></tr>\n<tr class=\"separator:ga03e8fc2d7945a4e63ee33b2159c14cea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga283717bc2d937547ad34ec0472234ee3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga283717bc2d937547ad34ec0472234ee3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga283717bc2d937547ad34ec0472234ee3\">quadraticEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga283717bc2d937547ad34ec0472234ee3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the parabola y = -x^2 + 2x.  <a href=\"a00318.html#ga283717bc2d937547ad34ec0472234ee3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga283717bc2d937547ad34ec0472234ee3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga808b41f14514f47dad5dcc69eb924afd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga808b41f14514f47dad5dcc69eb924afd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga808b41f14514f47dad5dcc69eb924afd\">quarticEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga808b41f14514f47dad5dcc69eb924afd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the quartic x^4.  <a href=\"a00318.html#ga808b41f14514f47dad5dcc69eb924afd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga808b41f14514f47dad5dcc69eb924afd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6d000f852de12b197e154f234b20c505\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6d000f852de12b197e154f234b20c505\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga6d000f852de12b197e154f234b20c505\">quarticEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga6d000f852de12b197e154f234b20c505\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise quartic y = (1/2)((2x)^4) ; [0, 0.5) y = -(1/2)((2x-2)^4 - 2) ; [0.5, 1].  <a href=\"a00318.html#ga6d000f852de12b197e154f234b20c505\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6d000f852de12b197e154f234b20c505\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4dfb33fa7664aa888eb647999d329b98\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga4dfb33fa7664aa888eb647999d329b98\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga4dfb33fa7664aa888eb647999d329b98\">quarticEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga4dfb33fa7664aa888eb647999d329b98\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the quartic y = 1 - (x - 1)^4.  <a href=\"a00318.html#ga4dfb33fa7664aa888eb647999d329b98\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4dfb33fa7664aa888eb647999d329b98\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga097579d8e087dcf48037588140a21640\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga097579d8e087dcf48037588140a21640\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga097579d8e087dcf48037588140a21640\">quinticEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga097579d8e087dcf48037588140a21640\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the quintic y = x^5.  <a href=\"a00318.html#ga097579d8e087dcf48037588140a21640\">More...</a><br /></td></tr>\n<tr class=\"separator:ga097579d8e087dcf48037588140a21640\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a82d5c46df7e2d21cc0108eb7b83934\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga2a82d5c46df7e2d21cc0108eb7b83934\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934\">quinticEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga2a82d5c46df7e2d21cc0108eb7b83934\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the piecewise quintic y = (1/2)((2x)^5) ; [0, 0.5) y = (1/2)((2x-2)^5 + 2) ; [0.5, 1].  <a href=\"a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2a82d5c46df7e2d21cc0108eb7b83934\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7dbd4d5c8da3f5353121f615e7b591d7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7dbd4d5c8da3f5353121f615e7b591d7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7\">quinticEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:ga7dbd4d5c8da3f5353121f615e7b591d7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after the quintic y = (x - 1)^5 + 1.  <a href=\"a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7dbd4d5c8da3f5353121f615e7b591d7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafb338ac6f6b2bcafee50e3dca5201dbf\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gafb338ac6f6b2bcafee50e3dca5201dbf\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf\">sineEaseIn</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gafb338ac6f6b2bcafee50e3dca5201dbf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after quarter-cycle of sine wave.  <a href=\"a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf\">More...</a><br /></td></tr>\n<tr class=\"separator:gafb338ac6f6b2bcafee50e3dca5201dbf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7\">sineEaseInOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after half sine wave.  <a href=\"a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa46e3d5fbf7a15caa28eff9ef192d7c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3e454f883afc1606ef91363881bf5a3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gab3e454f883afc1606ef91363881bf5a3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00318.html#gab3e454f883afc1606ef91363881bf5a3\">sineEaseOut</a> (genType const &amp;a)</td></tr>\n<tr class=\"memdesc:gab3e454f883afc1606ef91363881bf5a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modelled after quarter-cycle of sine wave (different phase)  <a href=\"a00318.html#gab3e454f883afc1606ef91363881bf5a3\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3e454f883afc1606ef91363881bf5a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00023.html\" title=\"GLM_GTX_easing \">glm/gtx/easing.hpp</a>&gt; to use the features of this extension. </p>\n<p>Easing functions for animations and transitons All functions take a parameter x in the range [0.0,1.0]</p>\n<p>Based on the AHEasing project of Warren Moore (<a href=\"https://github.com/warrenm/AHEasing\">https://github.com/warrenm/AHEasing</a>) </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga93cddcdb6347a44d5927cc2bf2570816\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::backEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga33777c9dd98f61d9472f96aafdf2bd36\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::backEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>o</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">a</td><td>parameter </td></tr>\n    <tr><td class=\"paramname\">o</td><td>Optional overshoot modifier </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gace6d24722a2f6722b56398206eb810bb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::backEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga68a7b760f2afdfab298d5cd6d7611fb1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::backEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>o</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">a</td><td>parameter </td></tr>\n    <tr><td class=\"paramname\">o</td><td>Optional overshoot modifier </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabf25069fa906413c858fd46903d520b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::backEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga640c1ac6fe9d277a197da69daf60ee4f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::backEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>o</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">a</td><td>parameter </td></tr>\n    <tr><td class=\"paramname\">o</td><td>Optional overshoot modifier </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaac30767f2e430b0c3fc859a4d59c7b5b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::bounceEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadf9f38eff1e5f4c2fa5b629a25ae413e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::bounceEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga94007005ff0dcfa0749ebfa2aec540b2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::bounceEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga34508d4b204a321ec26d6086aa047997\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::circularEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after shifted quadrant IV of unit circle. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0c1027637a5b02d4bb3612aa12599d69\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::circularEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the piecewise circular function y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1]. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga26fefde9ced9b72745fe21f1a3fe8da7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::circularEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after shifted quadrant II of unit circle. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga55134072b42d75452189321d4a2ad91c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::cubicEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the piecewise cubic y = (1/2)((2x)^3) ; [0, 0.5) y = (1/2)((2x-2)^3 + 2) ; [0.5, 1]. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga40d746385d8bcc5973f5bc6a2340ca91\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::cubicEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the cubic y = (x - 1)^3 + 1. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga230918eccee4e113d10ec5b8cdc58695\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::elasticEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1)) </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2db4ac8959559b11b4029e54812908d6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::elasticEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the piecewise exponentially-damped sine wave: y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1]. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gace9c9d1bdf88bf2ab1e7cdefa54c7365\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::elasticEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7f24ee9219ab4c84dc8de24be84c1e3c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::exponentialEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the exponential function y = 2^(10(x - 1)) </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga232fb6dc093c5ce94bee105ff2947501\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::exponentialEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the piecewise exponential y = (1/2)2^(10(2x - 1)) ; [0,0.5) y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1]. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga517f2bcfd15bc2c25c466ae50808efc3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::exponentialEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the exponential function y = -2^(-10x) + 1. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga290c3e47cb0a49f2e8abe90b1872b649\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::linearInterpolation </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the line y = x. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf42089d35855695132d217cd902304a0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quadraticEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the parabola y = x^2. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga03e8fc2d7945a4e63ee33b2159c14cea\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quadraticEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the piecewise quadratic y = (1/2)((2x)^2) ; [0, 0.5) y = -(1/2)((2x-1)*(2x-3) - 1) ; [0.5, 1]. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga283717bc2d937547ad34ec0472234ee3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quadraticEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the parabola y = -x^2 + 2x. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga808b41f14514f47dad5dcc69eb924afd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quarticEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the quartic x^4. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6d000f852de12b197e154f234b20c505\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quarticEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the piecewise quartic y = (1/2)((2x)^4) ; [0, 0.5) y = -(1/2)((2x-2)^4 - 2) ; [0.5, 1]. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4dfb33fa7664aa888eb647999d329b98\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quarticEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the quartic y = 1 - (x - 1)^4. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga097579d8e087dcf48037588140a21640\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quinticEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the quintic y = x^5. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2a82d5c46df7e2d21cc0108eb7b83934\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quinticEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the piecewise quintic y = (1/2)((2x)^5) ; [0, 0.5) y = (1/2)((2x-2)^5 + 2) ; [0.5, 1]. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7dbd4d5c8da3f5353121f615e7b591d7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::quinticEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after the quintic y = (x - 1)^5 + 1. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafb338ac6f6b2bcafee50e3dca5201dbf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::sineEaseIn </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after quarter-cycle of sine wave. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa46e3d5fbf7a15caa28eff9ef192d7c7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::sineEaseInOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after half sine wave. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab3e454f883afc1606ef91363881bf5a3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::sineEaseOut </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modelled after quarter-cycle of sine wave (different phase) </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00318.html\" title=\"Include <glm/gtx/easing.hpp> to use the features of this extension. \">GLM_GTX_easing</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00319.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_euler_angles</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_euler_angles<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00025.html\" title=\"GLM_GTX_euler_angles \">glm/gtx/euler_angles.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga994b8186b3b80d91cf90bc403164692f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga994b8186b3b80d91cf90bc403164692f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga994b8186b3b80d91cf90bc403164692f\">derivedEulerAngleX</a> (T const &amp;angleX, T const &amp;angularVelocityX)</td></tr>\n<tr class=\"memdesc:ga994b8186b3b80d91cf90bc403164692f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis.  <a href=\"a00319.html#ga994b8186b3b80d91cf90bc403164692f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga994b8186b3b80d91cf90bc403164692f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0a4c56ecce7abcb69508ebe6313e9d10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0a4c56ecce7abcb69508ebe6313e9d10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10\">derivedEulerAngleY</a> (T const &amp;angleY, T const &amp;angularVelocityY)</td></tr>\n<tr class=\"memdesc:ga0a4c56ecce7abcb69508ebe6313e9d10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis.  <a href=\"a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0a4c56ecce7abcb69508ebe6313e9d10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae8b397348201c42667be983ba3f344df\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae8b397348201c42667be983ba3f344df\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gae8b397348201c42667be983ba3f344df\">derivedEulerAngleZ</a> (T const &amp;angleZ, T const &amp;angularVelocityZ)</td></tr>\n<tr class=\"memdesc:gae8b397348201c42667be983ba3f344df\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis.  <a href=\"a00319.html#gae8b397348201c42667be983ba3f344df\">More...</a><br /></td></tr>\n<tr class=\"separator:gae8b397348201c42667be983ba3f344df\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafba6282e4ed3ff8b5c75331abfba3489\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gafba6282e4ed3ff8b5c75331abfba3489\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gafba6282e4ed3ff8b5c75331abfba3489\">eulerAngleX</a> (T const &amp;angleX)</td></tr>\n<tr class=\"memdesc:gafba6282e4ed3ff8b5c75331abfba3489\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.  <a href=\"a00319.html#gafba6282e4ed3ff8b5c75331abfba3489\">More...</a><br /></td></tr>\n<tr class=\"separator:gafba6282e4ed3ff8b5c75331abfba3489\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga64036577ee17a2d24be0dbc05881d4e2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga64036577ee17a2d24be0dbc05881d4e2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga64036577ee17a2d24be0dbc05881d4e2\">eulerAngleXY</a> (T const &amp;angleX, T const &amp;angleY)</td></tr>\n<tr class=\"memdesc:ga64036577ee17a2d24be0dbc05881d4e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).  <a href=\"a00319.html#ga64036577ee17a2d24be0dbc05881d4e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga64036577ee17a2d24be0dbc05881d4e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29bd0787a28a6648159c0d6e69706066\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga29bd0787a28a6648159c0d6e69706066\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga29bd0787a28a6648159c0d6e69706066\">eulerAngleXYX</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga29bd0787a28a6648159c0d6e69706066\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X).  <a href=\"a00319.html#ga29bd0787a28a6648159c0d6e69706066\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29bd0787a28a6648159c0d6e69706066\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1975e0f0e9bed7f716dc9946da2ab645\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga1975e0f0e9bed7f716dc9946da2ab645\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645\">eulerAngleXYZ</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga1975e0f0e9bed7f716dc9946da2ab645\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z).  <a href=\"a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1975e0f0e9bed7f716dc9946da2ab645\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa39bd323c65c2fc0a1508be33a237ce9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa39bd323c65c2fc0a1508be33a237ce9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9\">eulerAngleXZ</a> (T const &amp;angleX, T const &amp;angleZ)</td></tr>\n<tr class=\"memdesc:gaa39bd323c65c2fc0a1508be33a237ce9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).  <a href=\"a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa39bd323c65c2fc0a1508be33a237ce9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga60171c79a17aec85d7891ae1d1533ec9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga60171c79a17aec85d7891ae1d1533ec9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga60171c79a17aec85d7891ae1d1533ec9\">eulerAngleXZX</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga60171c79a17aec85d7891ae1d1533ec9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X).  <a href=\"a00319.html#ga60171c79a17aec85d7891ae1d1533ec9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga60171c79a17aec85d7891ae1d1533ec9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga996dce12a60d8a674ba6737a535fa910\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga996dce12a60d8a674ba6737a535fa910\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga996dce12a60d8a674ba6737a535fa910\">eulerAngleXZY</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga996dce12a60d8a674ba6737a535fa910\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y).  <a href=\"a00319.html#ga996dce12a60d8a674ba6737a535fa910\">More...</a><br /></td></tr>\n<tr class=\"separator:ga996dce12a60d8a674ba6737a535fa910\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab84bf4746805fd69b8ecbb230e3974c5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab84bf4746805fd69b8ecbb230e3974c5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gab84bf4746805fd69b8ecbb230e3974c5\">eulerAngleY</a> (T const &amp;angleY)</td></tr>\n<tr class=\"memdesc:gab84bf4746805fd69b8ecbb230e3974c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.  <a href=\"a00319.html#gab84bf4746805fd69b8ecbb230e3974c5\">More...</a><br /></td></tr>\n<tr class=\"separator:gab84bf4746805fd69b8ecbb230e3974c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d\">eulerAngleYX</a> (T const &amp;angleY, T const &amp;angleX)</td></tr>\n<tr class=\"memdesc:ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).  <a href=\"a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga750fba9894117f87bcc529d7349d11de\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga750fba9894117f87bcc529d7349d11de\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga750fba9894117f87bcc529d7349d11de\">eulerAngleYXY</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga750fba9894117f87bcc529d7349d11de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y).  <a href=\"a00319.html#ga750fba9894117f87bcc529d7349d11de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga750fba9894117f87bcc529d7349d11de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab8ba99a9814f6d9edf417b6c6d5b0c10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab8ba99a9814f6d9edf417b6c6d5b0c10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10\">eulerAngleYXZ</a> (T const &amp;yaw, T const &amp;pitch, T const &amp;roll)</td></tr>\n<tr class=\"memdesc:gab8ba99a9814f6d9edf417b6c6d5b0c10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).  <a href=\"a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10\">More...</a><br /></td></tr>\n<tr class=\"separator:gab8ba99a9814f6d9edf417b6c6d5b0c10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga220379e10ac8cca55e275f0c9018fed9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga220379e10ac8cca55e275f0c9018fed9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga220379e10ac8cca55e275f0c9018fed9\">eulerAngleYZ</a> (T const &amp;angleY, T const &amp;angleZ)</td></tr>\n<tr class=\"memdesc:ga220379e10ac8cca55e275f0c9018fed9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).  <a href=\"a00319.html#ga220379e10ac8cca55e275f0c9018fed9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga220379e10ac8cca55e275f0c9018fed9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga08bef16357b8f9b3051b3dcaec4b7848\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga08bef16357b8f9b3051b3dcaec4b7848\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848\">eulerAngleYZX</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga08bef16357b8f9b3051b3dcaec4b7848\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X).  <a href=\"a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848\">More...</a><br /></td></tr>\n<tr class=\"separator:ga08bef16357b8f9b3051b3dcaec4b7848\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5e5e40abc27630749b42b3327c76d6e4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga5e5e40abc27630749b42b3327c76d6e4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga5e5e40abc27630749b42b3327c76d6e4\">eulerAngleYZY</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga5e5e40abc27630749b42b3327c76d6e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y).  <a href=\"a00319.html#ga5e5e40abc27630749b42b3327c76d6e4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5e5e40abc27630749b42b3327c76d6e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5b3935248bb6c3ec6b0d9297d406e251\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga5b3935248bb6c3ec6b0d9297d406e251\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251\">eulerAngleZ</a> (T const &amp;angleZ)</td></tr>\n<tr class=\"memdesc:ga5b3935248bb6c3ec6b0d9297d406e251\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.  <a href=\"a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b3935248bb6c3ec6b0d9297d406e251\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga483903115cd4059228961046a28d69b5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga483903115cd4059228961046a28d69b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga483903115cd4059228961046a28d69b5\">eulerAngleZX</a> (T const &amp;angle, T const &amp;angleX)</td></tr>\n<tr class=\"memdesc:ga483903115cd4059228961046a28d69b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).  <a href=\"a00319.html#ga483903115cd4059228961046a28d69b5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga483903115cd4059228961046a28d69b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4505c54d2dd654df4569fd1f04c43aa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab4505c54d2dd654df4569fd1f04c43aa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gab4505c54d2dd654df4569fd1f04c43aa\">eulerAngleZXY</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:gab4505c54d2dd654df4569fd1f04c43aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y).  <a href=\"a00319.html#gab4505c54d2dd654df4569fd1f04c43aa\">More...</a><br /></td></tr>\n<tr class=\"separator:gab4505c54d2dd654df4569fd1f04c43aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga178f966c52b01e4d65e31ebd007e3247\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga178f966c52b01e4d65e31ebd007e3247\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga178f966c52b01e4d65e31ebd007e3247\">eulerAngleZXZ</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga178f966c52b01e4d65e31ebd007e3247\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z).  <a href=\"a00319.html#ga178f966c52b01e4d65e31ebd007e3247\">More...</a><br /></td></tr>\n<tr class=\"separator:ga178f966c52b01e4d65e31ebd007e3247\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga400b2bd5984999efab663f3a68e1d020\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga400b2bd5984999efab663f3a68e1d020\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga400b2bd5984999efab663f3a68e1d020\">eulerAngleZY</a> (T const &amp;angleZ, T const &amp;angleY)</td></tr>\n<tr class=\"memdesc:ga400b2bd5984999efab663f3a68e1d020\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).  <a href=\"a00319.html#ga400b2bd5984999efab663f3a68e1d020\">More...</a><br /></td></tr>\n<tr class=\"separator:ga400b2bd5984999efab663f3a68e1d020\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e61f1e39069c47530acab9167852dd6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga2e61f1e39069c47530acab9167852dd6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga2e61f1e39069c47530acab9167852dd6\">eulerAngleZYX</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:ga2e61f1e39069c47530acab9167852dd6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X).  <a href=\"a00319.html#ga2e61f1e39069c47530acab9167852dd6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e61f1e39069c47530acab9167852dd6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd795f1dbecaf74974f9c76bbcca6830\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gacd795f1dbecaf74974f9c76bbcca6830\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gacd795f1dbecaf74974f9c76bbcca6830\">eulerAngleZYZ</a> (T const &amp;t1, T const &amp;t2, T const &amp;t3)</td></tr>\n<tr class=\"memdesc:gacd795f1dbecaf74974f9c76bbcca6830\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z).  <a href=\"a00319.html#gacd795f1dbecaf74974f9c76bbcca6830\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd795f1dbecaf74974f9c76bbcca6830\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf1077a72171d0f3b08f022ab5ff88af7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf1077a72171d0f3b08f022ab5ff88af7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7\">extractEulerAngleXYX</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gaf1077a72171d0f3b08f022ab5ff88af7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (X * Y * X) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf1077a72171d0f3b08f022ab5ff88af7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacea701562f778c1da4d3a0a1cf091000\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gacea701562f778c1da4d3a0a1cf091000\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gacea701562f778c1da4d3a0a1cf091000\">extractEulerAngleXYZ</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gacea701562f778c1da4d3a0a1cf091000\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (X * Y * Z) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gacea701562f778c1da4d3a0a1cf091000\">More...</a><br /></td></tr>\n<tr class=\"separator:gacea701562f778c1da4d3a0a1cf091000\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacf0bc6c031f25fa3ee0055b62c8260d0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gacf0bc6c031f25fa3ee0055b62c8260d0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0\">extractEulerAngleXZX</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gacf0bc6c031f25fa3ee0055b62c8260d0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (X * Z * X) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf0bc6c031f25fa3ee0055b62c8260d0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabe5a65d8eb1cd873c8de121cce1a15ed\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gabe5a65d8eb1cd873c8de121cce1a15ed\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed\">extractEulerAngleXZY</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gabe5a65d8eb1cd873c8de121cce1a15ed\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (X * Z * Y) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed\">More...</a><br /></td></tr>\n<tr class=\"separator:gabe5a65d8eb1cd873c8de121cce1a15ed\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab8868556361a190db94374e9983ed39\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaab8868556361a190db94374e9983ed39\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gaab8868556361a190db94374e9983ed39\">extractEulerAngleYXY</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gaab8868556361a190db94374e9983ed39\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Y * X * Y) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gaab8868556361a190db94374e9983ed39\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab8868556361a190db94374e9983ed39\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf0937518e63037335a0e8358b6f053c5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf0937518e63037335a0e8358b6f053c5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gaf0937518e63037335a0e8358b6f053c5\">extractEulerAngleYXZ</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gaf0937518e63037335a0e8358b6f053c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Y * X * Z) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gaf0937518e63037335a0e8358b6f053c5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf0937518e63037335a0e8358b6f053c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9049b78466796c0de2971756e25b93d3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9049b78466796c0de2971756e25b93d3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga9049b78466796c0de2971756e25b93d3\">extractEulerAngleYZX</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga9049b78466796c0de2971756e25b93d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Y * Z * X) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga9049b78466796c0de2971756e25b93d3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9049b78466796c0de2971756e25b93d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga11dad972c109e4bf8694c915017c44a6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga11dad972c109e4bf8694c915017c44a6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga11dad972c109e4bf8694c915017c44a6\">extractEulerAngleYZY</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga11dad972c109e4bf8694c915017c44a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Y * Z * Y) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga11dad972c109e4bf8694c915017c44a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga11dad972c109e4bf8694c915017c44a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81fbbca2ba0c778b9662d5355b4e2363\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga81fbbca2ba0c778b9662d5355b4e2363\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363\">extractEulerAngleZXY</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga81fbbca2ba0c778b9662d5355b4e2363\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Z * X * Y) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363\">More...</a><br /></td></tr>\n<tr class=\"separator:ga81fbbca2ba0c778b9662d5355b4e2363\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga59359fef9bad92afaca55e193f91e702\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga59359fef9bad92afaca55e193f91e702\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga59359fef9bad92afaca55e193f91e702\">extractEulerAngleZXZ</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga59359fef9bad92afaca55e193f91e702\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Z * X * Z) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga59359fef9bad92afaca55e193f91e702\">More...</a><br /></td></tr>\n<tr class=\"separator:ga59359fef9bad92afaca55e193f91e702\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2d6c11a4abfa60c565483cee2d3f7665\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga2d6c11a4abfa60c565483cee2d3f7665\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665\">extractEulerAngleZYX</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:ga2d6c11a4abfa60c565483cee2d3f7665\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Z * Y * X) Euler angles from the rotation matrix M.  <a href=\"a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2d6c11a4abfa60c565483cee2d3f7665\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafdfa880a64b565223550c2d3938b1aeb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gafdfa880a64b565223550c2d3938b1aeb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gafdfa880a64b565223550c2d3938b1aeb\">extractEulerAngleZYZ</a> (mat&lt; 4, 4, T, defaultp &gt; const &amp;M, T &amp;t1, T &amp;t2, T &amp;t3)</td></tr>\n<tr class=\"memdesc:gafdfa880a64b565223550c2d3938b1aeb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the (Z * Y * Z) Euler angles from the rotation matrix M.  <a href=\"a00319.html#gafdfa880a64b565223550c2d3938b1aeb\">More...</a><br /></td></tr>\n<tr class=\"separator:gafdfa880a64b565223550c2d3938b1aeb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae16738a9f1887cf4e4db6a124637608d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae16738a9f1887cf4e4db6a124637608d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gae16738a9f1887cf4e4db6a124637608d\">orientate2</a> (T const &amp;angle)</td></tr>\n<tr class=\"memdesc:gae16738a9f1887cf4e4db6a124637608d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 2D 2 * 2 rotation matrix from an euler angle.  <a href=\"a00319.html#gae16738a9f1887cf4e4db6a124637608d\">More...</a><br /></td></tr>\n<tr class=\"separator:gae16738a9f1887cf4e4db6a124637608d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ca98668a5786f19c7b38299ebbc9b4c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga7ca98668a5786f19c7b38299ebbc9b4c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga7ca98668a5786f19c7b38299ebbc9b4c\">orientate3</a> (T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga7ca98668a5786f19c7b38299ebbc9b4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle.  <a href=\"a00319.html#ga7ca98668a5786f19c7b38299ebbc9b4c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ca98668a5786f19c7b38299ebbc9b4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7238c8e15c7720e3ca6a45ab151eeabb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7238c8e15c7720e3ca6a45ab151eeabb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb\">orientate3</a> (vec&lt; 3, T, Q &gt; const &amp;angles)</td></tr>\n<tr class=\"memdesc:ga7238c8e15c7720e3ca6a45ab151eeabb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z).  <a href=\"a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7238c8e15c7720e3ca6a45ab151eeabb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4a044653f71a4ecec68e0b623382b48a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4a044653f71a4ecec68e0b623382b48a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#ga4a044653f71a4ecec68e0b623382b48a\">orientate4</a> (vec&lt; 3, T, Q &gt; const &amp;angles)</td></tr>\n<tr class=\"memdesc:ga4a044653f71a4ecec68e0b623382b48a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).  <a href=\"a00319.html#ga4a044653f71a4ecec68e0b623382b48a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4a044653f71a4ecec68e0b623382b48a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae6aa26ccb020d281b449619e419a609e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae6aa26ccb020d281b449619e419a609e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, defaultp &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00319.html#gae6aa26ccb020d281b449619e419a609e\">yawPitchRoll</a> (T const &amp;yaw, T const &amp;pitch, T const &amp;roll)</td></tr>\n<tr class=\"memdesc:gae6aa26ccb020d281b449619e419a609e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).  <a href=\"a00319.html#gae6aa26ccb020d281b449619e419a609e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae6aa26ccb020d281b449619e419a609e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00025.html\" title=\"GLM_GTX_euler_angles \">glm/gtx/euler_angles.hpp</a>&gt; to use the features of this extension. </p>\n<p>Build matrices from Euler angles.</p>\n<p>Extraction of Euler angles from rotation matrix. Based on the original paper 2014 Mike Day - Extracting Euler Angles from a Rotation Matrix. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga994b8186b3b80d91cf90bc403164692f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::derivedEulerAngleX </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleX</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angularVelocityX</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0a4c56ecce7abcb69508ebe6313e9d10\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::derivedEulerAngleY </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleY</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angularVelocityY</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae8b397348201c42667be983ba3f344df\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::derivedEulerAngleZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleZ</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angularVelocityZ</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafba6282e4ed3ff8b5c75331abfba3489\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleX </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleX</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga64036577ee17a2d24be0dbc05881d4e2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleXY </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleX</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleY</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga29bd0787a28a6648159c0d6e69706066\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleXYX </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1975e0f0e9bed7f716dc9946da2ab645\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleXYZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa39bd323c65c2fc0a1508be33a237ce9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleXZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleX</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleZ</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga60171c79a17aec85d7891ae1d1533ec9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleXZX </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga996dce12a60d8a674ba6737a535fa910\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleXZY </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab84bf4746805fd69b8ecbb230e3974c5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleY </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleY</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4f57e6dd25c3cffbbd4daa6ef3f4486d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleYX </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleY</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleX</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga750fba9894117f87bcc529d7349d11de\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleYXY </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab8ba99a9814f6d9edf417b6c6d5b0c10\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleYXZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>yaw</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>pitch</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>roll</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga220379e10ac8cca55e275f0c9018fed9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleYZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleY</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleZ</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga08bef16357b8f9b3051b3dcaec4b7848\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleYZX </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5e5e40abc27630749b42b3327c76d6e4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleYZY </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5b3935248bb6c3ec6b0d9297d406e251\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleZ</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga483903115cd4059228961046a28d69b5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleZX </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleX</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab4505c54d2dd654df4569fd1f04c43aa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleZXY </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga178f966c52b01e4d65e31ebd007e3247\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleZXZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga400b2bd5984999efab663f3a68e1d020\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleZY </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleZ</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angleY</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2e61f1e39069c47530acab9167852dd6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleZYX </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacd795f1dbecaf74974f9c76bbcca6830\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::eulerAngleZYZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf1077a72171d0f3b08f022ab5ff88af7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleXYX </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (X * Y * X) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacea701562f778c1da4d3a0a1cf091000\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleXYZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (X * Y * Z) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacf0bc6c031f25fa3ee0055b62c8260d0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleXZX </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (X * Z * X) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabe5a65d8eb1cd873c8de121cce1a15ed\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleXZY </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (X * Z * Y) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaab8868556361a190db94374e9983ed39\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleYXY </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (Y * X * Y) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf0937518e63037335a0e8358b6f053c5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleYXZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (Y * X * Z) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9049b78466796c0de2971756e25b93d3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleYZX </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (Y * Z * X) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga11dad972c109e4bf8694c915017c44a6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleYZY </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (Y * Z * Y) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga81fbbca2ba0c778b9662d5355b4e2363\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleZXY </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (Z * X * Y) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga59359fef9bad92afaca55e193f91e702\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleZXZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (Z * X * Z) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2d6c11a4abfa60c565483cee2d3f7665\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleZYX </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (Z * Y * X) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafdfa880a64b565223550c2d3938b1aeb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::extractEulerAngleZYZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, defaultp &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>M</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>t3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the (Z * Y * Z) Euler angles from the rotation matrix M. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae16738a9f1887cf4e4db6a124637608d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, defaultp&gt; glm::orientate2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 2D 2 * 2 rotation matrix from an euler angle. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7ca98668a5786f19c7b38299ebbc9b4c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, defaultp&gt; glm::orientate3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7238c8e15c7720e3ca6a45ab151eeabb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::orientate3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angles</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4a044653f71a4ecec68e0b623382b48a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::orientate4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angles</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae6aa26ccb020d281b449619e419a609e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, defaultp&gt; glm::yawPitchRoll </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>yaw</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>pitch</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>roll</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00319.html\" title=\"Include <glm/gtx/euler_angles.hpp> to use the features of this extension. \">GLM_GTX_euler_angles</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00320.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_extend</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_extend<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00028.html\" title=\"GLM_GTX_extend \">glm/gtx/extend.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8140caae613b0f847ab0d7175dc03a37\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8140caae613b0f847ab0d7175dc03a37\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00320.html#ga8140caae613b0f847ab0d7175dc03a37\">extend</a> (genType const &amp;Origin, genType const &amp;Source, typename genType::value_type const Length)</td></tr>\n<tr class=\"memdesc:ga8140caae613b0f847ab0d7175dc03a37\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extends of Length the Origin position using the (Source - Origin) direction.  <a href=\"a00320.html#ga8140caae613b0f847ab0d7175dc03a37\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8140caae613b0f847ab0d7175dc03a37\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00028.html\" title=\"GLM_GTX_extend \">glm/gtx/extend.hpp</a>&gt; to use the features of this extension. </p>\n<p>Extend a position from a source to a position at a defined length. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga8140caae613b0f847ab0d7175dc03a37\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::extend </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Origin</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Source</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::value_type const&#160;</td>\n          <td class=\"paramname\"><em>Length</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extends of Length the Origin position using the (Source - Origin) direction. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00320.html\" title=\"Include <glm/gtx/extend.hpp> to use the features of this extension. \">GLM_GTX_extend</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00321.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_extented_min_max</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_extented_min_max<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;glm/gtx/extented_min_max.hpp&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1e28539d3a46965ed9ef92ec7cb3b18a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga1e28539d3a46965ed9ef92ec7cb3b18a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga1e28539d3a46965ed9ef92ec7cb3b18a\">fclamp</a> (genType x, genType minVal, genType maxVal)</td></tr>\n<tr class=\"memdesc:ga1e28539d3a46965ed9ef92ec7cb3b18a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x.  <a href=\"a00321.html#ga1e28539d3a46965ed9ef92ec7cb3b18a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e28539d3a46965ed9ef92ec7cb3b18a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga60796d08903489ee185373593bc16b9d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga60796d08903489ee185373593bc16b9d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga60796d08903489ee185373593bc16b9d\">fclamp</a> (vec&lt; L, T, Q &gt; const &amp;x, T minVal, T maxVal)</td></tr>\n<tr class=\"memdesc:ga60796d08903489ee185373593bc16b9d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x.  <a href=\"a00321.html#ga60796d08903489ee185373593bc16b9d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga60796d08903489ee185373593bc16b9d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5c15fa4709763c269c86c0b8b3aa2297\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5c15fa4709763c269c86c0b8b3aa2297\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297\">fclamp</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)</td></tr>\n<tr class=\"memdesc:ga5c15fa4709763c269c86c0b8b3aa2297\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns min(max(x, minVal), maxVal) for each component in x.  <a href=\"a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5c15fa4709763c269c86c0b8b3aa2297\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5792cb2b51190057e4aea027eb56f81\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gae5792cb2b51190057e4aea027eb56f81\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gae5792cb2b51190057e4aea027eb56f81\">fmax</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:gae5792cb2b51190057e4aea027eb56f81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if x &lt; y; otherwise, it returns x.  <a href=\"a00321.html#gae5792cb2b51190057e4aea027eb56f81\">More...</a><br /></td></tr>\n<tr class=\"separator:gae5792cb2b51190057e4aea027eb56f81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa3200559611ac5b9b9ae7283547916a7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa3200559611ac5b9b9ae7283547916a7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gaa3200559611ac5b9b9ae7283547916a7\">fmin</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:gaa3200559611ac5b9b9ae7283547916a7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns y if y &lt; x; otherwise, it returns x.  <a href=\"a00321.html#gaa3200559611ac5b9b9ae7283547916a7\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3200559611ac5b9b9ae7283547916a7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04991ccb9865c4c4e58488cfb209ce69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga04991ccb9865c4c4e58488cfb209ce69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga04991ccb9865c4c4e58488cfb209ce69\">max</a> (T const &amp;x, T const &amp;y, T const &amp;z)</td></tr>\n<tr class=\"memdesc:ga04991ccb9865c4c4e58488cfb209ce69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 3 inputs.  <a href=\"a00321.html#ga04991ccb9865c4c4e58488cfb209ce69\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04991ccb9865c4c4e58488cfb209ce69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1b7bbe5c91de4924835ea3e14530744\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:gae1b7bbe5c91de4924835ea3e14530744\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gae1b7bbe5c91de4924835ea3e14530744\">max</a> (C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z)</td></tr>\n<tr class=\"memdesc:gae1b7bbe5c91de4924835ea3e14530744\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 3 inputs.  <a href=\"a00321.html#gae1b7bbe5c91de4924835ea3e14530744\">More...</a><br /></td></tr>\n<tr class=\"separator:gae1b7bbe5c91de4924835ea3e14530744\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf832e9d4ab4826b2dda2fda25935a3a4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:gaf832e9d4ab4826b2dda2fda25935a3a4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gaf832e9d4ab4826b2dda2fda25935a3a4\">max</a> (C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z)</td></tr>\n<tr class=\"memdesc:gaf832e9d4ab4826b2dda2fda25935a3a4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 3 inputs.  <a href=\"a00321.html#gaf832e9d4ab4826b2dda2fda25935a3a4\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf832e9d4ab4826b2dda2fda25935a3a4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78e04a0cef1c4863fcae1a2130500d87\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga78e04a0cef1c4863fcae1a2130500d87\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga78e04a0cef1c4863fcae1a2130500d87\">max</a> (T const &amp;x, T const &amp;y, T const &amp;z, T const &amp;w)</td></tr>\n<tr class=\"memdesc:ga78e04a0cef1c4863fcae1a2130500d87\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 4 inputs.  <a href=\"a00321.html#ga78e04a0cef1c4863fcae1a2130500d87\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78e04a0cef1c4863fcae1a2130500d87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7cca8b53cfda402040494cdf40fbdf4a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga7cca8b53cfda402040494cdf40fbdf4a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga7cca8b53cfda402040494cdf40fbdf4a\">max</a> (C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z, typename C&lt; T &gt;::T const &amp;w)</td></tr>\n<tr class=\"memdesc:ga7cca8b53cfda402040494cdf40fbdf4a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 4 inputs.  <a href=\"a00321.html#ga7cca8b53cfda402040494cdf40fbdf4a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7cca8b53cfda402040494cdf40fbdf4a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaacffbc466c2d08c140b181e7fd8a4858\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:gaacffbc466c2d08c140b181e7fd8a4858\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">max</a> (C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)</td></tr>\n<tr class=\"memdesc:gaacffbc466c2d08c140b181e7fd8a4858\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the maximum component-wise values of 4 inputs.  <a href=\"a00321.html#gaacffbc466c2d08c140b181e7fd8a4858\">More...</a><br /></td></tr>\n<tr class=\"separator:gaacffbc466c2d08c140b181e7fd8a4858\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga713d3f9b3e76312c0d314e0c8611a6a6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga713d3f9b3e76312c0d314e0c8611a6a6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga713d3f9b3e76312c0d314e0c8611a6a6\">min</a> (T const &amp;x, T const &amp;y, T const &amp;z)</td></tr>\n<tr class=\"memdesc:ga713d3f9b3e76312c0d314e0c8611a6a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 3 inputs.  <a href=\"a00321.html#ga713d3f9b3e76312c0d314e0c8611a6a6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga713d3f9b3e76312c0d314e0c8611a6a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga74d1a96e7cdbac40f6d35142d3bcbbd4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga74d1a96e7cdbac40f6d35142d3bcbbd4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga74d1a96e7cdbac40f6d35142d3bcbbd4\">min</a> (C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z)</td></tr>\n<tr class=\"memdesc:ga74d1a96e7cdbac40f6d35142d3bcbbd4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 3 inputs.  <a href=\"a00321.html#ga74d1a96e7cdbac40f6d35142d3bcbbd4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga74d1a96e7cdbac40f6d35142d3bcbbd4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga42b5c3fc027fd3d9a50d2ccc9126d9f0\">min</a> (C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z)</td></tr>\n<tr class=\"memdesc:ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 3 inputs.  <a href=\"a00321.html#ga42b5c3fc027fd3d9a50d2ccc9126d9f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga95466987024d03039607f09e69813d69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga95466987024d03039607f09e69813d69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga95466987024d03039607f09e69813d69\">min</a> (T const &amp;x, T const &amp;y, T const &amp;z, T const &amp;w)</td></tr>\n<tr class=\"memdesc:ga95466987024d03039607f09e69813d69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 4 inputs.  <a href=\"a00321.html#ga95466987024d03039607f09e69813d69\">More...</a><br /></td></tr>\n<tr class=\"separator:ga95466987024d03039607f09e69813d69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4fe35dd31dd0c45693c9b60b830b8d47\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga4fe35dd31dd0c45693c9b60b830b8d47\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga4fe35dd31dd0c45693c9b60b830b8d47\">min</a> (C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z, typename C&lt; T &gt;::T const &amp;w)</td></tr>\n<tr class=\"memdesc:ga4fe35dd31dd0c45693c9b60b830b8d47\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 4 inputs.  <a href=\"a00321.html#ga4fe35dd31dd0c45693c9b60b830b8d47\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4fe35dd31dd0c45693c9b60b830b8d47\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7471ea4159eed8dd9ea4ac5d46c2fead\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , template&lt; typename &gt; class C&gt; </td></tr>\n<tr class=\"memitem:ga7471ea4159eed8dd9ea4ac5d46c2fead\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL C&lt; T &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">min</a> (C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)</td></tr>\n<tr class=\"memdesc:ga7471ea4159eed8dd9ea4ac5d46c2fead\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the minimum component-wise values of 4 inputs.  <a href=\"a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7471ea4159eed8dd9ea4ac5d46c2fead\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;glm/gtx/extented_min_max.hpp&gt; to use the features of this extension. </p>\n<p>Min and max functions for 3 to 4 parameters. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga1e28539d3a46965ed9ef92ec7cb3b18a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fclamp </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>minVal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>maxVal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns min(max(x, minVal), maxVal) for each component in x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga60796d08903489ee185373593bc16b9d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fclamp </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>minVal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>maxVal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns min(max(x, minVal), maxVal) for each component in x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5c15fa4709763c269c86c0b8b3aa2297\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fclamp </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>minVal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>maxVal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns min(max(x, minVal), maxVal) for each component in x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae5792cb2b51190057e4aea027eb56f81\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fmax </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if x &lt; y; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point; scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd>\n<dd>\n<a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa3200559611ac5b9b9ae7283547916a7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fmin </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns y if y &lt; x; otherwise, it returns x. </p>\n<p>If one of the two arguments is NaN, the value of the other argument is returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Floating-point or integer; scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga04991ccb9865c4c4e58488cfb209ce69\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the maximum component-wise values of 3 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae1b7bbe5c91de4924835ea3e14530744\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL C&lt;T&gt; glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the maximum component-wise values of 3 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf832e9d4ab4826b2dda2fda25935a3a4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL C&lt;T&gt; glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the maximum component-wise values of 3 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga78e04a0cef1c4863fcae1a2130500d87\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the maximum component-wise values of 4 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7cca8b53cfda402040494cdf40fbdf4a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL C&lt;T&gt; glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the maximum component-wise values of 4 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaacffbc466c2d08c140b181e7fd8a4858\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL C&lt;T&gt; glm::max </td>\n          <td>(</td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the maximum component-wise values of 4 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga713d3f9b3e76312c0d314e0c8611a6a6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the minimum component-wise values of 3 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga74d1a96e7cdbac40f6d35142d3bcbbd4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL C&lt;T&gt; glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the minimum component-wise values of 3 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga42b5c3fc027fd3d9a50d2ccc9126d9f0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL C&lt;T&gt; glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the minimum component-wise values of 3 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga95466987024d03039607f09e69813d69\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the minimum component-wise values of 4 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4fe35dd31dd0c45693c9b60b830b8d47\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL C&lt;T&gt; glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename C&lt; T &gt;::T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the minimum component-wise values of 4 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7471ea4159eed8dd9ea4ac5d46c2fead\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL C&lt;T&gt; glm::min </td>\n          <td>(</td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>z</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">C&lt; T &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>w</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the minimum component-wise values of 4 inputs. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>gtx_extented_min_max </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00322.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_exterior_product</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_exterior_product<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00030.html\" title=\"GLM_GTX_exterior_product \">glm/gtx/exterior_product.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gac36e72b934ea6a9dd313772d7e78fa93\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac36e72b934ea6a9dd313772d7e78fa93\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00322.html#gac36e72b934ea6a9dd313772d7e78fa93\">cross</a> (vec&lt; 2, T, Q &gt; const &amp;v, vec&lt; 2, T, Q &gt; const &amp;u)</td></tr>\n<tr class=\"memdesc:gac36e72b934ea6a9dd313772d7e78fa93\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the cross product of x and y.  <a href=\"a00322.html#gac36e72b934ea6a9dd313772d7e78fa93\">More...</a><br /></td></tr>\n<tr class=\"separator:gac36e72b934ea6a9dd313772d7e78fa93\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00030.html\" title=\"GLM_GTX_exterior_product \">glm/gtx/exterior_product.hpp</a>&gt; to use the features of this extension. </p>\n<p>Allow to perform bit operations on integer values </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gac36e72b934ea6a9dd313772d7e78fa93\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::cross </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>u</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the cross product of x and y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"https://en.wikipedia.org/wiki/Exterior_algebra#Cross_and_triple_products\">Exterior product</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00323.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_fast_exponential</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_fast_exponential<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00031.html\" title=\"GLM_GTX_fast_exponential \">glm/gtx/fast_exponential.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaa3180ac8f96ab37ab96e0cacaf608e10\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaa3180ac8f96ab37ab96e0cacaf608e10\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#gaa3180ac8f96ab37ab96e0cacaf608e10\">fastExp</a> (T x)</td></tr>\n<tr class=\"memdesc:gaa3180ac8f96ab37ab96e0cacaf608e10\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp function but less accurate.  <a href=\"a00323.html#gaa3180ac8f96ab37ab96e0cacaf608e10\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa3180ac8f96ab37ab96e0cacaf608e10\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3ba6153aec6bd74628f8b00530aa8d58\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3ba6153aec6bd74628f8b00530aa8d58\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58\">fastExp</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga3ba6153aec6bd74628f8b00530aa8d58\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp function but less accurate.  <a href=\"a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3ba6153aec6bd74628f8b00530aa8d58\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0af50585955eb14c60bb286297fabab2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0af50585955eb14c60bb286297fabab2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga0af50585955eb14c60bb286297fabab2\">fastExp2</a> (T x)</td></tr>\n<tr class=\"memdesc:ga0af50585955eb14c60bb286297fabab2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp2 function but less accurate.  <a href=\"a00323.html#ga0af50585955eb14c60bb286297fabab2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0af50585955eb14c60bb286297fabab2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacaaed8b67d20d244b7de217e7816c1b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacaaed8b67d20d244b7de217e7816c1b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#gacaaed8b67d20d244b7de217e7816c1b6\">fastExp2</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gacaaed8b67d20d244b7de217e7816c1b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp2 function but less accurate.  <a href=\"a00323.html#gacaaed8b67d20d244b7de217e7816c1b6\">More...</a><br /></td></tr>\n<tr class=\"separator:gacaaed8b67d20d244b7de217e7816c1b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1bdc97b7f96a600e29c753f1cd4388a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae1bdc97b7f96a600e29c753f1cd4388a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#gae1bdc97b7f96a600e29c753f1cd4388a\">fastLog</a> (T x)</td></tr>\n<tr class=\"memdesc:gae1bdc97b7f96a600e29c753f1cd4388a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common log function but less accurate.  <a href=\"a00323.html#gae1bdc97b7f96a600e29c753f1cd4388a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae1bdc97b7f96a600e29c753f1cd4388a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga937256993a7219e73f186bb348fe6be8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga937256993a7219e73f186bb348fe6be8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga937256993a7219e73f186bb348fe6be8\">fastLog</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga937256993a7219e73f186bb348fe6be8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common exp2 function but less accurate.  <a href=\"a00323.html#ga937256993a7219e73f186bb348fe6be8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga937256993a7219e73f186bb348fe6be8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e98118685f6dc9e05fbb13dd5e5234e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga6e98118685f6dc9e05fbb13dd5e5234e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga6e98118685f6dc9e05fbb13dd5e5234e\">fastLog2</a> (T x)</td></tr>\n<tr class=\"memdesc:ga6e98118685f6dc9e05fbb13dd5e5234e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common log2 function but less accurate.  <a href=\"a00323.html#ga6e98118685f6dc9e05fbb13dd5e5234e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e98118685f6dc9e05fbb13dd5e5234e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7562043539194ccc24649f8475bc5584\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga7562043539194ccc24649f8475bc5584\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga7562043539194ccc24649f8475bc5584\">fastLog2</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga7562043539194ccc24649f8475bc5584\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common log2 function but less accurate.  <a href=\"a00323.html#ga7562043539194ccc24649f8475bc5584\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7562043539194ccc24649f8475bc5584\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5340e98a11fcbbd936ba6e983a154d50\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga5340e98a11fcbbd936ba6e983a154d50\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga5340e98a11fcbbd936ba6e983a154d50\">fastPow</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:ga5340e98a11fcbbd936ba6e983a154d50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common pow function but less accurate.  <a href=\"a00323.html#ga5340e98a11fcbbd936ba6e983a154d50\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5340e98a11fcbbd936ba6e983a154d50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga15325a8ed2d1c4ed2412c4b3b3927aa2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga15325a8ed2d1c4ed2412c4b3b3927aa2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga15325a8ed2d1c4ed2412c4b3b3927aa2\">fastPow</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga15325a8ed2d1c4ed2412c4b3b3927aa2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common pow function but less accurate.  <a href=\"a00323.html#ga15325a8ed2d1c4ed2412c4b3b3927aa2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga15325a8ed2d1c4ed2412c4b3b3927aa2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f2562db9c3e02ae76169c36b086c3f6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genTypeT , typename genTypeU &gt; </td></tr>\n<tr class=\"memitem:ga7f2562db9c3e02ae76169c36b086c3f6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genTypeT&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga7f2562db9c3e02ae76169c36b086c3f6\">fastPow</a> (genTypeT x, genTypeU y)</td></tr>\n<tr class=\"memdesc:ga7f2562db9c3e02ae76169c36b086c3f6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common pow function but less accurate.  <a href=\"a00323.html#ga7f2562db9c3e02ae76169c36b086c3f6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f2562db9c3e02ae76169c36b086c3f6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1abe488c0829da5b9de70ac64aeaa7e5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1abe488c0829da5b9de70ac64aeaa7e5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">fastPow</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga1abe488c0829da5b9de70ac64aeaa7e5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common pow function but less accurate.  <a href=\"a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1abe488c0829da5b9de70ac64aeaa7e5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00031.html\" title=\"GLM_GTX_fast_exponential \">glm/gtx/fast_exponential.hpp</a>&gt; to use the features of this extension. </p>\n<p>Fast but less accurate implementations of exponential based functions. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaa3180ac8f96ab37ab96e0cacaf608e10\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastExp </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common exp function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3ba6153aec6bd74628f8b00530aa8d58\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fastExp </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common exp function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0af50585955eb14c60bb286297fabab2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastExp2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common exp2 function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacaaed8b67d20d244b7de217e7816c1b6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fastExp2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common exp2 function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae1bdc97b7f96a600e29c753f1cd4388a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastLog </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common log function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga937256993a7219e73f186bb348fe6be8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fastLog </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common exp2 function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6e98118685f6dc9e05fbb13dd5e5234e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastLog2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common log2 function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7562043539194ccc24649f8475bc5584\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fastLog2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common log2 function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5340e98a11fcbbd936ba6e983a154d50\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fastPow </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common pow function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga15325a8ed2d1c4ed2412c4b3b3927aa2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fastPow </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common pow function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7f2562db9c3e02ae76169c36b086c3f6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genTypeT glm::fastPow </td>\n          <td>(</td>\n          <td class=\"paramtype\">genTypeT&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genTypeU&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common pow function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1abe488c0829da5b9de70ac64aeaa7e5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fastPow </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common pow function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00323.html\" title=\"Include <glm/gtx/fast_exponential.hpp> to use the features of this extension. \">GLM_GTX_fast_exponential</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00324.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_fast_square_root</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_fast_square_root<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00032.html\" title=\"GLM_GTX_fast_square_root \">glm/gtx/fast_square_root.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaac333418d0c4e0cc6d3d219ed606c238\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaac333418d0c4e0cc6d3d219ed606c238\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#gaac333418d0c4e0cc6d3d219ed606c238\">fastDistance</a> (genType x, genType y)</td></tr>\n<tr class=\"memdesc:gaac333418d0c4e0cc6d3d219ed606c238\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common distance function but less accurate.  <a href=\"a00324.html#gaac333418d0c4e0cc6d3d219ed606c238\">More...</a><br /></td></tr>\n<tr class=\"separator:gaac333418d0c4e0cc6d3d219ed606c238\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga42d3e771fa7cb3c60d828e315829df19\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga42d3e771fa7cb3c60d828e315829df19\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga42d3e771fa7cb3c60d828e315829df19\">fastDistance</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga42d3e771fa7cb3c60d828e315829df19\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common distance function but less accurate.  <a href=\"a00324.html#ga42d3e771fa7cb3c60d828e315829df19\">More...</a><br /></td></tr>\n<tr class=\"separator:ga42d3e771fa7cb3c60d828e315829df19\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f081b14d9c7035c8714eba5f7f75a8f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga7f081b14d9c7035c8714eba5f7f75a8f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga7f081b14d9c7035c8714eba5f7f75a8f\">fastInverseSqrt</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga7f081b14d9c7035c8714eba5f7f75a8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common inversesqrt function but less accurate.  <a href=\"a00324.html#ga7f081b14d9c7035c8714eba5f7f75a8f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f081b14d9c7035c8714eba5f7f75a8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadcd7be12b1e5ee182141359d4c45dd24\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadcd7be12b1e5ee182141359d4c45dd24\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#gadcd7be12b1e5ee182141359d4c45dd24\">fastInverseSqrt</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gadcd7be12b1e5ee182141359d4c45dd24\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common inversesqrt function but less accurate.  <a href=\"a00324.html#gadcd7be12b1e5ee182141359d4c45dd24\">More...</a><br /></td></tr>\n<tr class=\"separator:gadcd7be12b1e5ee182141359d4c45dd24\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafe697d6287719538346bbdf8b1367c59\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gafe697d6287719538346bbdf8b1367c59\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#gafe697d6287719538346bbdf8b1367c59\">fastLength</a> (genType x)</td></tr>\n<tr class=\"memdesc:gafe697d6287719538346bbdf8b1367c59\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common length function but less accurate.  <a href=\"a00324.html#gafe697d6287719538346bbdf8b1367c59\">More...</a><br /></td></tr>\n<tr class=\"separator:gafe697d6287719538346bbdf8b1367c59\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga90f66be92ef61e705c005e7b3209edb8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga90f66be92ef61e705c005e7b3209edb8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga90f66be92ef61e705c005e7b3209edb8\">fastLength</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga90f66be92ef61e705c005e7b3209edb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common length function but less accurate.  <a href=\"a00324.html#ga90f66be92ef61e705c005e7b3209edb8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga90f66be92ef61e705c005e7b3209edb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3b02c1d6e0c754144e2f1e110bf9f16c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga3b02c1d6e0c754144e2f1e110bf9f16c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c\">fastNormalize</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga3b02c1d6e0c754144e2f1e110bf9f16c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common normalize function but less accurate.  <a href=\"a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3b02c1d6e0c754144e2f1e110bf9f16c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6c460e9414a50b2fc455c8f64c86cdc9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6c460e9414a50b2fc455c8f64c86cdc9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#ga6c460e9414a50b2fc455c8f64c86cdc9\">fastSqrt</a> (genType x)</td></tr>\n<tr class=\"memdesc:ga6c460e9414a50b2fc455c8f64c86cdc9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common sqrt function but less accurate.  <a href=\"a00324.html#ga6c460e9414a50b2fc455c8f64c86cdc9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6c460e9414a50b2fc455c8f64c86cdc9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae83f0c03614f73eae5478c5b6274ee6d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae83f0c03614f73eae5478c5b6274ee6d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00324.html#gae83f0c03614f73eae5478c5b6274ee6d\">fastSqrt</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gae83f0c03614f73eae5478c5b6274ee6d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common sqrt function but less accurate.  <a href=\"a00324.html#gae83f0c03614f73eae5478c5b6274ee6d\">More...</a><br /></td></tr>\n<tr class=\"separator:gae83f0c03614f73eae5478c5b6274ee6d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00032.html\" title=\"GLM_GTX_fast_square_root \">glm/gtx/fast_square_root.hpp</a>&gt; to use the features of this extension. </p>\n<p>Fast but less accurate implementations of square root based functions.</p><ul>\n<li>Sqrt optimisation based on Newton's method, www.gamedev.net/community/forums/topic.asp?topic id=139956 </li>\n</ul>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaac333418d0c4e0cc6d3d219ed606c238\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fastDistance </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common distance function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga42d3e771fa7cb3c60d828e315829df19\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastDistance </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common distance function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7f081b14d9c7035c8714eba5f7f75a8f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fastInverseSqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common inversesqrt function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadcd7be12b1e5ee182141359d4c45dd24\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fastInverseSqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common inversesqrt function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafe697d6287719538346bbdf8b1367c59\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fastLength </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common length function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga90f66be92ef61e705c005e7b3209edb8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastLength </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common length function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3b02c1d6e0c754144e2f1e110bf9f16c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fastNormalize </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common normalize function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6c460e9414a50b2fc455c8f64c86cdc9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::fastSqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common sqrt function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae83f0c03614f73eae5478c5b6274ee6d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::fastSqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common sqrt function but less accurate. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00324.html\" title=\"Include <glm/gtx/fast_square_root.hpp> to use the features of this extension. \">GLM_GTX_fast_square_root</a> extension. </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00325.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_fast_trigonometry</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_fast_trigonometry<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00033.html\" title=\"GLM_GTX_fast_trigonometry \">glm/gtx/fast_trigonometry.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga9721d63356e5d94fdc4b393a426ab26b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga9721d63356e5d94fdc4b393a426ab26b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga9721d63356e5d94fdc4b393a426ab26b\">fastAcos</a> (T angle)</td></tr>\n<tr class=\"memdesc:ga9721d63356e5d94fdc4b393a426ab26b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common acos function but less accurate.  <a href=\"a00325.html#ga9721d63356e5d94fdc4b393a426ab26b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9721d63356e5d94fdc4b393a426ab26b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga562cb62c51fbfe7fac7db0bce706b81f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga562cb62c51fbfe7fac7db0bce706b81f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f\">fastAsin</a> (T angle)</td></tr>\n<tr class=\"memdesc:ga562cb62c51fbfe7fac7db0bce706b81f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common asin function but less accurate.  <a href=\"a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga562cb62c51fbfe7fac7db0bce706b81f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8d197c6ef564f5e5d59af3b3f8adcc2c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga8d197c6ef564f5e5d59af3b3f8adcc2c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga8d197c6ef564f5e5d59af3b3f8adcc2c\">fastAtan</a> (T y, T x)</td></tr>\n<tr class=\"memdesc:ga8d197c6ef564f5e5d59af3b3f8adcc2c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common atan function but less accurate.  <a href=\"a00325.html#ga8d197c6ef564f5e5d59af3b3f8adcc2c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8d197c6ef564f5e5d59af3b3f8adcc2c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae25de86a968490ff56856fa425ec9d30\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gae25de86a968490ff56856fa425ec9d30\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#gae25de86a968490ff56856fa425ec9d30\">fastAtan</a> (T angle)</td></tr>\n<tr class=\"memdesc:gae25de86a968490ff56856fa425ec9d30\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common atan function but less accurate.  <a href=\"a00325.html#gae25de86a968490ff56856fa425ec9d30\">More...</a><br /></td></tr>\n<tr class=\"separator:gae25de86a968490ff56856fa425ec9d30\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab34c8b45c23c0165a64dcecfcc3b302a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gab34c8b45c23c0165a64dcecfcc3b302a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a\">fastCos</a> (T angle)</td></tr>\n<tr class=\"memdesc:gab34c8b45c23c0165a64dcecfcc3b302a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common cos function but less accurate.  <a href=\"a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a\">More...</a><br /></td></tr>\n<tr class=\"separator:gab34c8b45c23c0165a64dcecfcc3b302a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0aab3257bb3b628d10a1e0483e2c6915\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0aab3257bb3b628d10a1e0483e2c6915\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915\">fastSin</a> (T angle)</td></tr>\n<tr class=\"memdesc:ga0aab3257bb3b628d10a1e0483e2c6915\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common sin function but less accurate.  <a href=\"a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0aab3257bb3b628d10a1e0483e2c6915\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf29b9c1101a10007b4f79ee89df27ba2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:gaf29b9c1101a10007b4f79ee89df27ba2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2\">fastTan</a> (T angle)</td></tr>\n<tr class=\"memdesc:gaf29b9c1101a10007b4f79ee89df27ba2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Faster than the common tan function but less accurate.  <a href=\"a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf29b9c1101a10007b4f79ee89df27ba2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga069527c6dbd64f53435b8ebc4878b473\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga069527c6dbd64f53435b8ebc4878b473\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00325.html#ga069527c6dbd64f53435b8ebc4878b473\">wrapAngle</a> (T angle)</td></tr>\n<tr class=\"memdesc:ga069527c6dbd64f53435b8ebc4878b473\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Wrap an angle to [0 2pi[ From GLM_GTX_fast_trigonometry extension.  <a href=\"a00325.html#ga069527c6dbd64f53435b8ebc4878b473\">More...</a><br /></td></tr>\n<tr class=\"separator:ga069527c6dbd64f53435b8ebc4878b473\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00033.html\" title=\"GLM_GTX_fast_trigonometry \">glm/gtx/fast_trigonometry.hpp</a>&gt; to use the features of this extension. </p>\n<p>Fast but less accurate implementations of trigonometric functions. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga9721d63356e5d94fdc4b393a426ab26b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastAcos </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common acos function but less accurate. </p>\n<p>Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga562cb62c51fbfe7fac7db0bce706b81f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastAsin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common asin function but less accurate. </p>\n<p>Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8d197c6ef564f5e5d59af3b3f8adcc2c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastAtan </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common atan function but less accurate. </p>\n<p>Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae25de86a968490ff56856fa425ec9d30\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastAtan </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common atan function but less accurate. </p>\n<p>Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab34c8b45c23c0165a64dcecfcc3b302a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastCos </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common cos function but less accurate. </p>\n<p>From GLM_GTX_fast_trigonometry extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0aab3257bb3b628d10a1e0483e2c6915\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastSin </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common sin function but less accurate. </p>\n<p>From GLM_GTX_fast_trigonometry extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf29b9c1101a10007b4f79ee89df27ba2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastTan </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Faster than the common tan function but less accurate. </p>\n<p>Defined between -2pi and 2pi. From GLM_GTX_fast_trigonometry extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga069527c6dbd64f53435b8ebc4878b473\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::wrapAngle </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Wrap an angle to [0 2pi[ From GLM_GTX_fast_trigonometry extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00326.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_functions<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00034.html\" title=\"GLM_GTX_functions \">glm/gtx/functions.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga0b50b197ff74261a0fad90f4b8d24702\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T &gt; </td></tr>\n<tr class=\"memitem:ga0b50b197ff74261a0fad90f4b8d24702\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00326.html#ga0b50b197ff74261a0fad90f4b8d24702\">gauss</a> (T x, T ExpectedValue, T StandardDeviation)</td></tr>\n<tr class=\"memdesc:ga0b50b197ff74261a0fad90f4b8d24702\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">1D gauss function  <a href=\"a00326.html#ga0b50b197ff74261a0fad90f4b8d24702\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b50b197ff74261a0fad90f4b8d24702\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad19ec8754a83c0b9a8dc16b7e60705ab\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad19ec8754a83c0b9a8dc16b7e60705ab\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab\">gauss</a> (vec&lt; 2, T, Q &gt; const &amp;Coord, vec&lt; 2, T, Q &gt; const &amp;ExpectedValue, vec&lt; 2, T, Q &gt; const &amp;StandardDeviation)</td></tr>\n<tr class=\"memdesc:gad19ec8754a83c0b9a8dc16b7e60705ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">2D gauss function  <a href=\"a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gad19ec8754a83c0b9a8dc16b7e60705ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00034.html\" title=\"GLM_GTX_functions \">glm/gtx/functions.hpp</a>&gt; to use the features of this extension. </p>\n<p>List of useful common functions. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga0b50b197ff74261a0fad90f4b8d24702\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::gauss </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>ExpectedValue</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>StandardDeviation</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>1D gauss function </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00291.html\" title=\"Include <glm/gtc/epsilon.hpp> to use the features of this extension. \">GLM_GTC_epsilon</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad19ec8754a83c0b9a8dc16b7e60705ab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::gauss </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Coord</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ExpectedValue</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>StandardDeviation</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>2D gauss function </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00291.html\" title=\"Include <glm/gtc/epsilon.hpp> to use the features of this extension. \">GLM_GTC_epsilon</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00327.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_gradient_paint</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_gradient_paint<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00038.html\" title=\"GLM_GTX_gradient_paint \">glm/gtx/gradient_paint.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga849241df1e55129b8ce9476200307419\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga849241df1e55129b8ce9476200307419\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00327.html#ga849241df1e55129b8ce9476200307419\">linearGradient</a> (vec&lt; 2, T, Q &gt; const &amp;Point0, vec&lt; 2, T, Q &gt; const &amp;Point1, vec&lt; 2, T, Q &gt; const &amp;Position)</td></tr>\n<tr class=\"memdesc:ga849241df1e55129b8ce9476200307419\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a color from a linear gradient.  <a href=\"a00327.html#ga849241df1e55129b8ce9476200307419\">More...</a><br /></td></tr>\n<tr class=\"separator:ga849241df1e55129b8ce9476200307419\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaecb1e93de4cbe0758b882812d4da294\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaaecb1e93de4cbe0758b882812d4da294\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00327.html#gaaecb1e93de4cbe0758b882812d4da294\">radialGradient</a> (vec&lt; 2, T, Q &gt; const &amp;Center, T const &amp;Radius, vec&lt; 2, T, Q &gt; const &amp;Focal, vec&lt; 2, T, Q &gt; const &amp;Position)</td></tr>\n<tr class=\"memdesc:gaaecb1e93de4cbe0758b882812d4da294\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a color from a radial gradient.  <a href=\"a00327.html#gaaecb1e93de4cbe0758b882812d4da294\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaecb1e93de4cbe0758b882812d4da294\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00038.html\" title=\"GLM_GTX_gradient_paint \">glm/gtx/gradient_paint.hpp</a>&gt; to use the features of this extension. </p>\n<p>Functions that return the color of procedural gradient for specific coordinates. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga849241df1e55129b8ce9476200307419\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::linearGradient </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Point0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Point1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Position</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return a color from a linear gradient. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>- <a class=\"el\" href=\"a00327.html\" title=\"Include <glm/gtx/gradient_paint.hpp> to use the features of this extension. \">GLM_GTX_gradient_paint</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaecb1e93de4cbe0758b882812d4da294\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::radialGradient </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Center</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Radius</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Focal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Position</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return a color from a radial gradient. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>- <a class=\"el\" href=\"a00327.html\" title=\"Include <glm/gtx/gradient_paint.hpp> to use the features of this extension. \">GLM_GTX_gradient_paint</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00328.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_handed_coordinate_space</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_handed_coordinate_space<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;glm/gtx/handed_coordinate_system.hpp&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga6f1bad193b9a3b048543d1935cf04dd3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6f1bad193b9a3b048543d1935cf04dd3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3\">leftHanded</a> (vec&lt; 3, T, Q &gt; const &amp;tangent, vec&lt; 3, T, Q &gt; const &amp;binormal, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga6f1bad193b9a3b048543d1935cf04dd3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return if a trihedron left handed or not.  <a href=\"a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6f1bad193b9a3b048543d1935cf04dd3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99386a5ab5491871b947076e21699cc8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga99386a5ab5491871b947076e21699cc8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00328.html#ga99386a5ab5491871b947076e21699cc8\">rightHanded</a> (vec&lt; 3, T, Q &gt; const &amp;tangent, vec&lt; 3, T, Q &gt; const &amp;binormal, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga99386a5ab5491871b947076e21699cc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return if a trihedron right handed or not.  <a href=\"a00328.html#ga99386a5ab5491871b947076e21699cc8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99386a5ab5491871b947076e21699cc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;glm/gtx/handed_coordinate_system.hpp&gt; to use the features of this extension. </p>\n<p>To know if a set of three basis vectors defines a right or left-handed coordinate system. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga6f1bad193b9a3b048543d1935cf04dd3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::leftHanded </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>tangent</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>binormal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>normal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return if a trihedron left handed or not. </p>\n<p>From GLM_GTX_handed_coordinate_space extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga99386a5ab5491871b947076e21699cc8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::rightHanded </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>tangent</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>binormal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>normal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return if a trihedron right handed or not. </p>\n<p>From GLM_GTX_handed_coordinate_space extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00329.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_hash</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_hash<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00040.html\" title=\"GLM_GTX_hash \">glm/gtx/hash.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<p>Include &lt;<a class=\"el\" href=\"a00040.html\" title=\"GLM_GTX_hash \">glm/gtx/hash.hpp</a>&gt; to use the features of this extension. </p>\n<p>Add std::hash support for glm types </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00330.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_integer</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a> &#124;\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_integer<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00042.html\" title=\"GLM_GTX_integer \">glm/gtx/integer.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gada7e83fdfe943aba4f1d5bf80cb66f40\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef signed int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40\">sint</a></td></tr>\n<tr class=\"memdesc:gada7e83fdfe943aba4f1d5bf80cb66f40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32bit signed integer.  <a href=\"a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40\">More...</a><br /></td></tr>\n<tr class=\"separator:gada7e83fdfe943aba4f1d5bf80cb66f40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8cbd3120905f398ec321b5d1836e08fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8cbd3120905f398ec321b5d1836e08fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga8cbd3120905f398ec321b5d1836e08fb\">factorial</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8cbd3120905f398ec321b5d1836e08fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension.  <a href=\"a00330.html#ga8cbd3120905f398ec321b5d1836e08fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8cbd3120905f398ec321b5d1836e08fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7011b4e1c1e1ed492149b028feacc00e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL unsigned int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga7011b4e1c1e1ed492149b028feacc00e\">floor_log2</a> (unsigned int x)</td></tr>\n<tr class=\"memdesc:ga7011b4e1c1e1ed492149b028feacc00e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the floor log2 of x.  <a href=\"a00330.html#ga7011b4e1c1e1ed492149b028feacc00e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7011b4e1c1e1ed492149b028feacc00e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaabfbb41531ab7ad8d06fc176edfba785\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#gaabfbb41531ab7ad8d06fc176edfba785\">mod</a> (int x, int y)</td></tr>\n<tr class=\"memdesc:gaabfbb41531ab7ad8d06fc176edfba785\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modulus.  <a href=\"a00330.html#gaabfbb41531ab7ad8d06fc176edfba785\">More...</a><br /></td></tr>\n<tr class=\"separator:gaabfbb41531ab7ad8d06fc176edfba785\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63fc8d63e7da1706439233b386ba8b6f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga63fc8d63e7da1706439233b386ba8b6f\">mod</a> (uint x, uint y)</td></tr>\n<tr class=\"memdesc:ga63fc8d63e7da1706439233b386ba8b6f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Modulus.  <a href=\"a00330.html#ga63fc8d63e7da1706439233b386ba8b6f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga63fc8d63e7da1706439233b386ba8b6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78dff8bdb361bf0061194c93e003d189\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga78dff8bdb361bf0061194c93e003d189\">nlz</a> (uint x)</td></tr>\n<tr class=\"memdesc:ga78dff8bdb361bf0061194c93e003d189\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the number of leading zeros.  <a href=\"a00330.html#ga78dff8bdb361bf0061194c93e003d189\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78dff8bdb361bf0061194c93e003d189\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga465016030a81d513fa2fac881ebdaa83\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga465016030a81d513fa2fac881ebdaa83\">pow</a> (int x, uint y)</td></tr>\n<tr class=\"memdesc:ga465016030a81d513fa2fac881ebdaa83\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the y power.  <a href=\"a00330.html#ga465016030a81d513fa2fac881ebdaa83\">More...</a><br /></td></tr>\n<tr class=\"separator:ga465016030a81d513fa2fac881ebdaa83\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga998e5ee915d3769255519e2fbaa2bbf0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0\">pow</a> (uint x, uint y)</td></tr>\n<tr class=\"memdesc:ga998e5ee915d3769255519e2fbaa2bbf0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the y power.  <a href=\"a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga998e5ee915d3769255519e2fbaa2bbf0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ce36693a75879ccd9bb10167cfa722d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga7ce36693a75879ccd9bb10167cfa722d\">sqrt</a> (int x)</td></tr>\n<tr class=\"memdesc:ga7ce36693a75879ccd9bb10167cfa722d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the positive square root of x.  <a href=\"a00330.html#ga7ce36693a75879ccd9bb10167cfa722d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ce36693a75879ccd9bb10167cfa722d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1975d318978d6dacf78b6444fa5ed7bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc\">sqrt</a> (uint x)</td></tr>\n<tr class=\"memdesc:ga1975d318978d6dacf78b6444fa5ed7bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the positive square root of x.  <a href=\"a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1975d318978d6dacf78b6444fa5ed7bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00042.html\" title=\"GLM_GTX_integer \">glm/gtx/integer.hpp</a>&gt; to use the features of this extension. </p>\n<p>Add support for integer for core functions </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"gada7e83fdfe943aba4f1d5bf80cb66f40\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef signed int sint</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32bit signed integer. </p>\n<p>From GLM_GTX_integer extension. </p>\n\n<p>Definition at line <a class=\"el\" href=\"a00042_source.html#l00055\">55</a> of file <a class=\"el\" href=\"a00042_source.html\">gtx/integer.hpp</a>.</p>\n\n</div>\n</div>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga8cbd3120905f398ec321b5d1836e08fb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::factorial </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the factorial value of a number (!12 max, integer only) From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7011b4e1c1e1ed492149b028feacc00e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL unsigned int glm::floor_log2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">unsigned int&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the floor log2 of x. </p>\n<p>From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaabfbb41531ab7ad8d06fc176edfba785\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::mod </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modulus. </p>\n<p>Returns x - y * floor(x / y) for each component in x using the floating point value y. From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga63fc8d63e7da1706439233b386ba8b6f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::mod </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Modulus. </p>\n<p>Returns x - y * floor(x / y) for each component in x using the floating point value y. From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga78dff8bdb361bf0061194c93e003d189\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::nlz </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the number of leading zeros. </p>\n<p>From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga465016030a81d513fa2fac881ebdaa83\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::pow </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns x raised to the y power. </p>\n<p>From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga998e5ee915d3769255519e2fbaa2bbf0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::pow </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns x raised to the y power. </p>\n<p>From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7ce36693a75879ccd9bb10167cfa722d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::sqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the positive square root of x. </p>\n<p>From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1975d318978d6dacf78b6444fa5ed7bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::sqrt </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the positive square root of x. </p>\n<p>From GLM_GTX_integer extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00331.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_intersect</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_intersect<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00044.html\" title=\"GLM_GTX_intersect \">glm/gtx/intersect.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\">intersectLineSphere</a> (genType const &amp;point0, genType const &amp;point1, genType const &amp;sphereCenter, typename genType::value_type sphereRadius, genType &amp;intersectionPosition1, genType &amp;intersectionNormal1, genType &amp;intersectionPosition2=genType(), genType &amp;intersectionNormal2=genType())</td></tr>\n<tr class=\"memdesc:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a line and a sphere.  <a href=\"a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9d29b9b3acb504d43986502f42740df4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga9d29b9b3acb504d43986502f42740df4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#ga9d29b9b3acb504d43986502f42740df4\">intersectLineTriangle</a> (genType const &amp;orig, genType const &amp;dir, genType const &amp;vert0, genType const &amp;vert1, genType const &amp;vert2, genType &amp;position)</td></tr>\n<tr class=\"memdesc:ga9d29b9b3acb504d43986502f42740df4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a line and a triangle.  <a href=\"a00331.html#ga9d29b9b3acb504d43986502f42740df4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9d29b9b3acb504d43986502f42740df4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad3697a9700ea379739a667ea02573488\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gad3697a9700ea379739a667ea02573488\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#gad3697a9700ea379739a667ea02573488\">intersectRayPlane</a> (genType const &amp;orig, genType const &amp;dir, genType const &amp;planeOrig, genType const &amp;planeNormal, typename genType::value_type &amp;intersectionDistance)</td></tr>\n<tr class=\"memdesc:gad3697a9700ea379739a667ea02573488\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a ray and a plane.  <a href=\"a00331.html#gad3697a9700ea379739a667ea02573488\">More...</a><br /></td></tr>\n<tr class=\"separator:gad3697a9700ea379739a667ea02573488\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac88f8cd84c4bcb5b947d56acbbcfa56e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gac88f8cd84c4bcb5b947d56acbbcfa56e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#gac88f8cd84c4bcb5b947d56acbbcfa56e\">intersectRaySphere</a> (genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, typename genType::value_type const sphereRadiusSquared, typename genType::value_type &amp;intersectionDistance)</td></tr>\n<tr class=\"memdesc:gac88f8cd84c4bcb5b947d56acbbcfa56e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection distance of a ray and a sphere.  <a href=\"a00331.html#gac88f8cd84c4bcb5b947d56acbbcfa56e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac88f8cd84c4bcb5b947d56acbbcfa56e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad28c00515b823b579c608aafa1100c1d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gad28c00515b823b579c608aafa1100c1d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#gad28c00515b823b579c608aafa1100c1d\">intersectRaySphere</a> (genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, const typename genType::value_type sphereRadius, genType &amp;intersectionPosition, genType &amp;intersectionNormal)</td></tr>\n<tr class=\"memdesc:gad28c00515b823b579c608aafa1100c1d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a ray and a sphere.  <a href=\"a00331.html#gad28c00515b823b579c608aafa1100c1d\">More...</a><br /></td></tr>\n<tr class=\"separator:gad28c00515b823b579c608aafa1100c1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65bf2c594482f04881c36bc761f9e946\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga65bf2c594482f04881c36bc761f9e946\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00331.html#ga65bf2c594482f04881c36bc761f9e946\">intersectRayTriangle</a> (vec&lt; 3, T, Q &gt; const &amp;orig, vec&lt; 3, T, Q &gt; const &amp;dir, vec&lt; 3, T, Q &gt; const &amp;v0, vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 2, T, Q &gt; &amp;baryPosition, T &amp;distance)</td></tr>\n<tr class=\"memdesc:ga65bf2c594482f04881c36bc761f9e946\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the intersection of a ray and a triangle.  <a href=\"a00331.html#ga65bf2c594482f04881c36bc761f9e946\">More...</a><br /></td></tr>\n<tr class=\"separator:ga65bf2c594482f04881c36bc761f9e946\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00044.html\" title=\"GLM_GTX_intersect \">glm/gtx/intersect.hpp</a>&gt; to use the features of this extension. </p>\n<p>Add intersection functions </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga9c68139f3d8a4f3d7fe45f9dbc0de5b7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::intersectLineSphere </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>point0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>point1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>sphereCenter</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::value_type&#160;</td>\n          <td class=\"paramname\"><em>sphereRadius</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType &amp;&#160;</td>\n          <td class=\"paramname\"><em>intersectionPosition1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType &amp;&#160;</td>\n          <td class=\"paramname\"><em>intersectionNormal1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType &amp;&#160;</td>\n          <td class=\"paramname\"><em>intersectionPosition2</em> = <code>genType()</code>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType &amp;&#160;</td>\n          <td class=\"paramname\"><em>intersectionNormal2</em> = <code>genType()</code>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the intersection of a line and a sphere. </p>\n<p>From GLM_GTX_intersect extension </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9d29b9b3acb504d43986502f42740df4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::intersectLineTriangle </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>orig</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>dir</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>vert0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>vert1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>vert2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType &amp;&#160;</td>\n          <td class=\"paramname\"><em>position</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the intersection of a line and a triangle. </p>\n<p>From GLM_GTX_intersect extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad3697a9700ea379739a667ea02573488\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::intersectRayPlane </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>orig</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>dir</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>planeOrig</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>planeNormal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::value_type &amp;&#160;</td>\n          <td class=\"paramname\"><em>intersectionDistance</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the intersection of a ray and a plane. </p>\n<p>Ray direction and plane normal must be unit length. From GLM_GTX_intersect extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac88f8cd84c4bcb5b947d56acbbcfa56e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::intersectRaySphere </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rayStarting</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rayNormalizedDirection</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>sphereCenter</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::value_type const&#160;</td>\n          <td class=\"paramname\"><em>sphereRadiusSquared</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::value_type &amp;&#160;</td>\n          <td class=\"paramname\"><em>intersectionDistance</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the intersection distance of a ray and a sphere. </p>\n<p>The ray direction vector is unit length. From GLM_GTX_intersect extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad28c00515b823b579c608aafa1100c1d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::intersectRaySphere </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rayStarting</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>rayNormalizedDirection</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>sphereCenter</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">const typename genType::value_type&#160;</td>\n          <td class=\"paramname\"><em>sphereRadius</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType &amp;&#160;</td>\n          <td class=\"paramname\"><em>intersectionPosition</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType &amp;&#160;</td>\n          <td class=\"paramname\"><em>intersectionNormal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the intersection of a ray and a sphere. </p>\n<p>From GLM_GTX_intersect extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga65bf2c594482f04881c36bc761f9e946\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::intersectRayTriangle </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>orig</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>dir</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>baryPosition</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>distance</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the intersection of a ray and a triangle. </p>\n<p>Based om Tomas Möller implementation <a href=\"http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/raytri/\">http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/raytri/</a> From GLM_GTX_intersect extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00332.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_io</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_io<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00045.html\" title=\"GLM_GTX_io \">glm/gtx/io.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00045.html\" title=\"GLM_GTX_io \">glm/gtx/io.hpp</a>&gt; to use the features of this extension. </p>\n<p>std::[w]ostream support for glm types</p>\n<p>std::[w]ostream support for glm types + qualifier/width/etc. manipulators based on howard hinnant's std::chrono io proposal [<a href=\"http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html\">http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html</a>] </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00333.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_log_base</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_log_base<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00046.html\" title=\"GLM_GTX_log_base \">glm/gtx/log_base.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga60a7b0a401da660869946b2b77c710c9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga60a7b0a401da660869946b2b77c710c9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00333.html#ga60a7b0a401da660869946b2b77c710c9\">log</a> (genType const &amp;x, genType const &amp;base)</td></tr>\n<tr class=\"memdesc:ga60a7b0a401da660869946b2b77c710c9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Logarithm for any base.  <a href=\"a00333.html#ga60a7b0a401da660869946b2b77c710c9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga60a7b0a401da660869946b2b77c710c9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga04ef803a24f3d4f8c67dbccb33b0fce0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga04ef803a24f3d4f8c67dbccb33b0fce0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0\">sign</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;base)</td></tr>\n<tr class=\"memdesc:ga04ef803a24f3d4f8c67dbccb33b0fce0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Logarithm for any base.  <a href=\"a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga04ef803a24f3d4f8c67dbccb33b0fce0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00046.html\" title=\"GLM_GTX_log_base \">glm/gtx/log_base.hpp</a>&gt; to use the features of this extension. </p>\n<p>Logarithm for any base. base can be a vector or a scalar. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga60a7b0a401da660869946b2b77c710c9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::log </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>base</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Logarithm for any base. </p>\n<p>From GLM_GTX_log_base. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga04ef803a24f3d4f8c67dbccb33b0fce0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::sign </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>base</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Logarithm for any base. </p>\n<p>From GLM_GTX_log_base. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00334.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_matrix_cross_product</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_matrix_cross_product<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00061.html\" title=\"GLM_GTX_matrix_cross_product \">glm/gtx/matrix_cross_product.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga5802386bb4c37b3332a3b6fd8b6960ff\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5802386bb4c37b3332a3b6fd8b6960ff\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff\">matrixCross3</a> (vec&lt; 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga5802386bb4c37b3332a3b6fd8b6960ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a cross product matrix.  <a href=\"a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5802386bb4c37b3332a3b6fd8b6960ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20057fff91ddafa102934adb25458cde\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga20057fff91ddafa102934adb25458cde\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00334.html#ga20057fff91ddafa102934adb25458cde\">matrixCross4</a> (vec&lt; 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga20057fff91ddafa102934adb25458cde\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a cross product matrix.  <a href=\"a00334.html#ga20057fff91ddafa102934adb25458cde\">More...</a><br /></td></tr>\n<tr class=\"separator:ga20057fff91ddafa102934adb25458cde\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00061.html\" title=\"GLM_GTX_matrix_cross_product \">glm/gtx/matrix_cross_product.hpp</a>&gt; to use the features of this extension. </p>\n<p>Build cross product matrices </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga5802386bb4c37b3332a3b6fd8b6960ff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::matrixCross3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a cross product matrix. </p>\n<p>From GLM_GTX_matrix_cross_product extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga20057fff91ddafa102934adb25458cde\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::matrixCross4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a cross product matrix. </p>\n<p>From GLM_GTX_matrix_cross_product extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00335.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_matrix_decompose</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_matrix_decompose<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00062.html\" title=\"GLM_GTX_matrix_decompose \">glm/gtx/matrix_decompose.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gac0e342656ba09a9bc97c57182ba73124\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac0e342656ba09a9bc97c57182ba73124\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00335.html#gac0e342656ba09a9bc97c57182ba73124\">decompose</a> (mat&lt; 4, 4, T, Q &gt; const &amp;modelMatrix, vec&lt; 3, T, Q &gt; &amp;scale, qua&lt; T, Q &gt; &amp;orientation, vec&lt; 3, T, Q &gt; &amp;translation, vec&lt; 3, T, Q &gt; &amp;skew, vec&lt; 4, T, Q &gt; &amp;perspective)</td></tr>\n<tr class=\"memdesc:gac0e342656ba09a9bc97c57182ba73124\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Decomposes a model matrix to translations, rotation and scale components.  <a href=\"a00335.html#gac0e342656ba09a9bc97c57182ba73124\">More...</a><br /></td></tr>\n<tr class=\"separator:gac0e342656ba09a9bc97c57182ba73124\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00062.html\" title=\"GLM_GTX_matrix_decompose \">glm/gtx/matrix_decompose.hpp</a>&gt; to use the features of this extension. </p>\n<p>Decomposes a model matrix to translations, rotation and scale components </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gac0e342656ba09a9bc97c57182ba73124\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::decompose </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>modelMatrix</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>scale</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>orientation</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>translation</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>skew</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>perspective</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Decomposes a model matrix to translations, rotation and scale components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00335.html\" title=\"Include <glm/gtx/matrix_decompose.hpp> to use the features of this extension. \">GLM_GTX_matrix_decompose</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00336.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_matrix_factorisation</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_matrix_factorisation<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00081.html\" title=\"GLM_GTX_matrix_factorisation \">glm/gtx/matrix_factorisation.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf39f4e5f78eb29c1a90277d45b9b3feb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf39f4e5f78eb29c1a90277d45b9b3feb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb\">fliplr</a> (mat&lt; C, R, T, Q &gt; const &amp;in)</td></tr>\n<tr class=\"memdesc:gaf39f4e5f78eb29c1a90277d45b9b3feb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Flips the matrix columns right and left.  <a href=\"a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf39f4e5f78eb29c1a90277d45b9b3feb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85003371f0ba97380dd25e8905de1870\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga85003371f0ba97380dd25e8905de1870\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html#ga85003371f0ba97380dd25e8905de1870\">flipud</a> (mat&lt; C, R, T, Q &gt; const &amp;in)</td></tr>\n<tr class=\"memdesc:ga85003371f0ba97380dd25e8905de1870\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Flips the matrix rows up and down.  <a href=\"a00336.html#ga85003371f0ba97380dd25e8905de1870\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85003371f0ba97380dd25e8905de1870\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac62d7bfc8dc661e616620d70552cd566\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac62d7bfc8dc661e616620d70552cd566\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html#gac62d7bfc8dc661e616620d70552cd566\">qr_decompose</a> (mat&lt; C, R, T, Q &gt; const &amp;in, mat&lt;(C&lt; R?C:R), R, T, Q &gt; &amp;q, mat&lt; C,(C&lt; R?C:R), T, Q &gt; &amp;r)</td></tr>\n<tr class=\"memdesc:gac62d7bfc8dc661e616620d70552cd566\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Performs QR factorisation of a matrix.  <a href=\"a00336.html#gac62d7bfc8dc661e616620d70552cd566\">More...</a><br /></td></tr>\n<tr class=\"separator:gac62d7bfc8dc661e616620d70552cd566\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga82874e2ebe891ba35ac21d9993873758\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga82874e2ebe891ba35ac21d9993873758\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00336.html#ga82874e2ebe891ba35ac21d9993873758\">rq_decompose</a> (mat&lt; C, R, T, Q &gt; const &amp;in, mat&lt;(C&lt; R?C:R), R, T, Q &gt; &amp;r, mat&lt; C,(C&lt; R?C:R), T, Q &gt; &amp;q)</td></tr>\n<tr class=\"memdesc:ga82874e2ebe891ba35ac21d9993873758\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Performs RQ factorisation of a matrix.  <a href=\"a00336.html#ga82874e2ebe891ba35ac21d9993873758\">More...</a><br /></td></tr>\n<tr class=\"separator:ga82874e2ebe891ba35ac21d9993873758\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00081.html\" title=\"GLM_GTX_matrix_factorisation \">glm/gtx/matrix_factorisation.hpp</a>&gt; to use the features of this extension. </p>\n<p>Functions to factor matrices in various forms </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaf39f4e5f78eb29c1a90277d45b9b3feb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; glm::fliplr </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>in</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Flips the matrix columns right and left. </p>\n<p>From GLM_GTX_matrix_factorisation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga85003371f0ba97380dd25e8905de1870\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; glm::flipud </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>in</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Flips the matrix rows up and down. </p>\n<p>From GLM_GTX_matrix_factorisation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac62d7bfc8dc661e616620d70552cd566\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::qr_decompose </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>in</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Performs QR factorisation of a matrix. </p>\n<p>Returns 2 matrices, q and r, such that the columns of q are orthonormal and span the same subspace than those of the input matrix, r is an upper triangular matrix, and q*r=in. Given an n-by-m input matrix, q has dimensions min(n,m)-by-m, and r has dimensions n-by-min(n,m).</p>\n<p>From GLM_GTX_matrix_factorisation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga82874e2ebe891ba35ac21d9993873758\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::rq_decompose </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>in</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Performs RQ factorisation of a matrix. </p>\n<p>Returns 2 matrices, r and q, such that r is an upper triangular matrix, the rows of q are orthonormal and span the same subspace than those of the input matrix, and r*q=in. Note that in the context of RQ factorisation, the diagonal is seen as starting in the lower-right corner of the matrix, instead of the usual upper-left. Given an n-by-m input matrix, r has dimensions min(n,m)-by-m, and q has dimensions n-by-min(n,m).</p>\n<p>From GLM_GTX_matrix_factorisation extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00337.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_matrix_interpolation</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_matrix_interpolation<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00101.html\" title=\"GLM_GTX_matrix_interpolation \">glm/gtx/matrix_interpolation.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gafefe32ce5a90a135287ba34fac3623bc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafefe32ce5a90a135287ba34fac3623bc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html#gafefe32ce5a90a135287ba34fac3623bc\">axisAngle</a> (mat&lt; 4, 4, T, Q &gt; const &amp;Mat, vec&lt; 3, T, Q &gt; &amp;Axis, T &amp;Angle)</td></tr>\n<tr class=\"memdesc:gafefe32ce5a90a135287ba34fac3623bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Get the axis and angle of the rotation from a matrix.  <a href=\"a00337.html#gafefe32ce5a90a135287ba34fac3623bc\">More...</a><br /></td></tr>\n<tr class=\"separator:gafefe32ce5a90a135287ba34fac3623bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a788e2f5223397df5c426413ecc2f6b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3a788e2f5223397df5c426413ecc2f6b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html#ga3a788e2f5223397df5c426413ecc2f6b\">axisAngleMatrix</a> (vec&lt; 3, T, Q &gt; const &amp;Axis, T const Angle)</td></tr>\n<tr class=\"memdesc:ga3a788e2f5223397df5c426413ecc2f6b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a matrix from axis and angle.  <a href=\"a00337.html#ga3a788e2f5223397df5c426413ecc2f6b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a788e2f5223397df5c426413ecc2f6b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabbc1c7385a145f04b5c54228965df145\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabbc1c7385a145f04b5c54228965df145\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html#gabbc1c7385a145f04b5c54228965df145\">extractMatrixRotation</a> (mat&lt; 4, 4, T, Q &gt; const &amp;Mat)</td></tr>\n<tr class=\"memdesc:gabbc1c7385a145f04b5c54228965df145\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts the rotation part of a matrix.  <a href=\"a00337.html#gabbc1c7385a145f04b5c54228965df145\">More...</a><br /></td></tr>\n<tr class=\"separator:gabbc1c7385a145f04b5c54228965df145\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e67863d150724b10c1ac00972dc958c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4e67863d150724b10c1ac00972dc958c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00337.html#ga4e67863d150724b10c1ac00972dc958c\">interpolate</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m1, mat&lt; 4, 4, T, Q &gt; const &amp;m2, T const Delta)</td></tr>\n<tr class=\"memdesc:ga4e67863d150724b10c1ac00972dc958c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a interpolation of 4 * 4 matrixes.  <a href=\"a00337.html#ga4e67863d150724b10c1ac00972dc958c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e67863d150724b10c1ac00972dc958c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00101.html\" title=\"GLM_GTX_matrix_interpolation \">glm/gtx/matrix_interpolation.hpp</a>&gt; to use the features of this extension. </p>\n<p>Allows to directly interpolate two matrices. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gafefe32ce5a90a135287ba34fac3623bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::axisAngle </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Mat</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>Axis</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T &amp;&#160;</td>\n          <td class=\"paramname\"><em>Angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Get the axis and angle of the rotation from a matrix. </p>\n<p>From GLM_GTX_matrix_interpolation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3a788e2f5223397df5c426413ecc2f6b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::axisAngleMatrix </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Axis</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const&#160;</td>\n          <td class=\"paramname\"><em>Angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a matrix from axis and angle. </p>\n<p>From GLM_GTX_matrix_interpolation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabbc1c7385a145f04b5c54228965df145\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::extractMatrixRotation </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Mat</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts the rotation part of a matrix. </p>\n<p>From GLM_GTX_matrix_interpolation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4e67863d150724b10c1ac00972dc958c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::interpolate </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const&#160;</td>\n          <td class=\"paramname\"><em>Delta</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a interpolation of 4 * 4 matrixes. </p>\n<p>From GLM_GTX_matrix_interpolation extension. Warning! works only with rotation and/or translation matrixes, scale will generate unexpected results. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00338.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_matrix_major_storage</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_matrix_major_storage<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00103.html\" title=\"GLM_GTX_matrix_major_storage \">glm/gtx/matrix_major_storage.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaaff72f11286e59a4a88ed21a347f284c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaaff72f11286e59a4a88ed21a347f284c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaaff72f11286e59a4a88ed21a347f284c\">colMajor2</a> (vec&lt; 2, T, Q &gt; const &amp;v1, vec&lt; 2, T, Q &gt; const &amp;v2)</td></tr>\n<tr class=\"memdesc:gaaff72f11286e59a4a88ed21a347f284c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from column vectors.  <a href=\"a00338.html#gaaff72f11286e59a4a88ed21a347f284c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaff72f11286e59a4a88ed21a347f284c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafc25fd44196c92b1397b127aec1281ab\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafc25fd44196c92b1397b127aec1281ab\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gafc25fd44196c92b1397b127aec1281ab\">colMajor2</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gafc25fd44196c92b1397b127aec1281ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from other matrix.  <a href=\"a00338.html#gafc25fd44196c92b1397b127aec1281ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gafc25fd44196c92b1397b127aec1281ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1e25b72b085087740c92f5c70f3b051f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1e25b72b085087740c92f5c70f3b051f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#ga1e25b72b085087740c92f5c70f3b051f\">colMajor3</a> (vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)</td></tr>\n<tr class=\"memdesc:ga1e25b72b085087740c92f5c70f3b051f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from column vectors.  <a href=\"a00338.html#ga1e25b72b085087740c92f5c70f3b051f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1e25b72b085087740c92f5c70f3b051f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga86bd0656e787bb7f217607572590af27\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga86bd0656e787bb7f217607572590af27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#ga86bd0656e787bb7f217607572590af27\">colMajor3</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:ga86bd0656e787bb7f217607572590af27\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from other matrix.  <a href=\"a00338.html#ga86bd0656e787bb7f217607572590af27\">More...</a><br /></td></tr>\n<tr class=\"separator:ga86bd0656e787bb7f217607572590af27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4aa6c7e17bfce41a6c13bf6469fab05\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf4aa6c7e17bfce41a6c13bf6469fab05\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaf4aa6c7e17bfce41a6c13bf6469fab05\">colMajor4</a> (vec&lt; 4, T, Q &gt; const &amp;v1, vec&lt; 4, T, Q &gt; const &amp;v2, vec&lt; 4, T, Q &gt; const &amp;v3, vec&lt; 4, T, Q &gt; const &amp;v4)</td></tr>\n<tr class=\"memdesc:gaf4aa6c7e17bfce41a6c13bf6469fab05\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from column vectors.  <a href=\"a00338.html#gaf4aa6c7e17bfce41a6c13bf6469fab05\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4aa6c7e17bfce41a6c13bf6469fab05\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3\">colMajor4</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a column major matrix from other matrix.  <a href=\"a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf3f9511c366c20ba2e4a64c9e4cec2b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\">rowMajor2</a> (vec&lt; 2, T, Q &gt; const &amp;v1, vec&lt; 2, T, Q &gt; const &amp;v2)</td></tr>\n<tr class=\"memdesc:gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from row vectors.  <a href=\"a00338.html#gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf66c75ed69ca9e87462550708c2c6726\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf66c75ed69ca9e87462550708c2c6726\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gaf66c75ed69ca9e87462550708c2c6726\">rowMajor2</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gaf66c75ed69ca9e87462550708c2c6726\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from other matrix.  <a href=\"a00338.html#gaf66c75ed69ca9e87462550708c2c6726\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf66c75ed69ca9e87462550708c2c6726\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2ae46497493339f745754e40f438442e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2ae46497493339f745754e40f438442e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#ga2ae46497493339f745754e40f438442e\">rowMajor3</a> (vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)</td></tr>\n<tr class=\"memdesc:ga2ae46497493339f745754e40f438442e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from row vectors.  <a href=\"a00338.html#ga2ae46497493339f745754e40f438442e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2ae46497493339f745754e40f438442e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77\">rowMajor3</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from other matrix.  <a href=\"a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77\">More...</a><br /></td></tr>\n<tr class=\"separator:gad8a3a50ab47bbe8d36cdb81d90dfcf77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#ga9636cd6bbe2c32a8d0c03ffb8b1ef284\">rowMajor4</a> (vec&lt; 4, T, Q &gt; const &amp;v1, vec&lt; 4, T, Q &gt; const &amp;v2, vec&lt; 4, T, Q &gt; const &amp;v3, vec&lt; 4, T, Q &gt; const &amp;v4)</td></tr>\n<tr class=\"memdesc:ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from row vectors.  <a href=\"a00338.html#ga9636cd6bbe2c32a8d0c03ffb8b1ef284\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac92ad1c2acdf18d3eb7be45a32f9566b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac92ad1c2acdf18d3eb7be45a32f9566b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b\">rowMajor4</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gac92ad1c2acdf18d3eb7be45a32f9566b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a row major matrix from other matrix.  <a href=\"a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b\">More...</a><br /></td></tr>\n<tr class=\"separator:gac92ad1c2acdf18d3eb7be45a32f9566b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00103.html\" title=\"GLM_GTX_matrix_major_storage \">glm/gtx/matrix_major_storage.hpp</a>&gt; to use the features of this extension. </p>\n<p>Build matrices with specific matrix order, row or column </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaaff72f11286e59a4a88ed21a347f284c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; glm::colMajor2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a column major matrix from column vectors. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafc25fd44196c92b1397b127aec1281ab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; glm::colMajor2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 2, 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a column major matrix from other matrix. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1e25b72b085087740c92f5c70f3b051f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::colMajor3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a column major matrix from column vectors. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga86bd0656e787bb7f217607572590af27\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::colMajor3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a column major matrix from other matrix. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf4aa6c7e17bfce41a6c13bf6469fab05\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::colMajor4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v3</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v4</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a column major matrix from column vectors. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf3f9511c366c20ba2e4a64c9e4cec2b3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::colMajor4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a column major matrix from other matrix. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; glm::rowMajor2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a row major matrix from row vectors. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf66c75ed69ca9e87462550708c2c6726\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; glm::rowMajor2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 2, 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a row major matrix from other matrix. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2ae46497493339f745754e40f438442e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::rowMajor3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a row major matrix from row vectors. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad8a3a50ab47bbe8d36cdb81d90dfcf77\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::rowMajor3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a row major matrix from other matrix. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9636cd6bbe2c32a8d0c03ffb8b1ef284\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::rowMajor4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v3</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v4</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a row major matrix from row vectors. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac92ad1c2acdf18d3eb7be45a32f9566b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::rowMajor4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a row major matrix from other matrix. </p>\n<p>From GLM_GTX_matrix_major_storage extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00339.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_matrix_operation</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_matrix_operation<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00104.html\" title=\"GLM_GTX_matrix_operation \">glm/gtx/matrix_operation.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga40a38402a30860af6e508fe76211e659\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga40a38402a30860af6e508fe76211e659\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga40a38402a30860af6e508fe76211e659\">adjugate</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:ga40a38402a30860af6e508fe76211e659\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build an adjugate matrix.  <a href=\"a00339.html#ga40a38402a30860af6e508fe76211e659\">More...</a><br /></td></tr>\n<tr class=\"separator:ga40a38402a30860af6e508fe76211e659\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaddb09f7abc1a9c56a243d32ff3538be6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaddb09f7abc1a9c56a243d32ff3538be6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gaddb09f7abc1a9c56a243d32ff3538be6\">adjugate</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gaddb09f7abc1a9c56a243d32ff3538be6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build an adjugate matrix.  <a href=\"a00339.html#gaddb09f7abc1a9c56a243d32ff3538be6\">More...</a><br /></td></tr>\n<tr class=\"separator:gaddb09f7abc1a9c56a243d32ff3538be6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9aaa7d1f40391b0b5cacccb60e104ba8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9aaa7d1f40391b0b5cacccb60e104ba8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8\">adjugate</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:ga9aaa7d1f40391b0b5cacccb60e104ba8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build an adjugate matrix.  <a href=\"a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9aaa7d1f40391b0b5cacccb60e104ba8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58a32a2beeb2478dae2a721368cdd4ac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga58a32a2beeb2478dae2a721368cdd4ac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac\">diagonal2x2</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga58a32a2beeb2478dae2a721368cdd4ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58a32a2beeb2478dae2a721368cdd4ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab69f900206a430e2875a5a073851e175\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab69f900206a430e2875a5a073851e175\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gab69f900206a430e2875a5a073851e175\">diagonal2x3</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gab69f900206a430e2875a5a073851e175\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#gab69f900206a430e2875a5a073851e175\">More...</a><br /></td></tr>\n<tr class=\"separator:gab69f900206a430e2875a5a073851e175\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga30b4dbfed60a919d66acc8a63bcdc549\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga30b4dbfed60a919d66acc8a63bcdc549\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 2, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549\">diagonal2x4</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga30b4dbfed60a919d66acc8a63bcdc549\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549\">More...</a><br /></td></tr>\n<tr class=\"separator:ga30b4dbfed60a919d66acc8a63bcdc549\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga832c805d5130d28ad76236958d15b47d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga832c805d5130d28ad76236958d15b47d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga832c805d5130d28ad76236958d15b47d\">diagonal3x2</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga832c805d5130d28ad76236958d15b47d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga832c805d5130d28ad76236958d15b47d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga832c805d5130d28ad76236958d15b47d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5487ff9cdbc8e04d594adef1bcb16ee0\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5487ff9cdbc8e04d594adef1bcb16ee0\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0\">diagonal3x3</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga5487ff9cdbc8e04d594adef1bcb16ee0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5487ff9cdbc8e04d594adef1bcb16ee0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7551139cff0c4208d27f0ad3437833e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad7551139cff0c4208d27f0ad3437833e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gad7551139cff0c4208d27f0ad3437833e\">diagonal3x4</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gad7551139cff0c4208d27f0ad3437833e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#gad7551139cff0c4208d27f0ad3437833e\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7551139cff0c4208d27f0ad3437833e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb8969e6543ba775c6638161a37ac330\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacb8969e6543ba775c6638161a37ac330\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gacb8969e6543ba775c6638161a37ac330\">diagonal4x2</a> (vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gacb8969e6543ba775c6638161a37ac330\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#gacb8969e6543ba775c6638161a37ac330\">More...</a><br /></td></tr>\n<tr class=\"separator:gacb8969e6543ba775c6638161a37ac330\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae235def5049d6740f0028433f5e13f90\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae235def5049d6740f0028433f5e13f90\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#gae235def5049d6740f0028433f5e13f90\">diagonal4x3</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gae235def5049d6740f0028433f5e13f90\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#gae235def5049d6740f0028433f5e13f90\">More...</a><br /></td></tr>\n<tr class=\"separator:gae235def5049d6740f0028433f5e13f90\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b4cd8dea436791b072356231ee8578f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0b4cd8dea436791b072356231ee8578f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00339.html#ga0b4cd8dea436791b072356231ee8578f\">diagonal4x4</a> (vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga0b4cd8dea436791b072356231ee8578f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a diagonal matrix.  <a href=\"a00339.html#ga0b4cd8dea436791b072356231ee8578f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b4cd8dea436791b072356231ee8578f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00104.html\" title=\"GLM_GTX_matrix_operation \">glm/gtx/matrix_operation.hpp</a>&gt; to use the features of this extension. </p>\n<p>Build diagonal matrices from vectors. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga40a38402a30860af6e508fe76211e659\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; glm::adjugate </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 2, 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build an adjugate matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaddb09f7abc1a9c56a243d32ff3538be6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::adjugate </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build an adjugate matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9aaa7d1f40391b0b5cacccb60e104ba8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::adjugate </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build an adjugate matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga58a32a2beeb2478dae2a721368cdd4ac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 2, T, Q&gt; glm::diagonal2x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab69f900206a430e2875a5a073851e175\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 3, T, Q&gt; glm::diagonal2x3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga30b4dbfed60a919d66acc8a63bcdc549\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;2, 4, T, Q&gt; glm::diagonal2x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga832c805d5130d28ad76236958d15b47d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 2, T, Q&gt; glm::diagonal3x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5487ff9cdbc8e04d594adef1bcb16ee0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::diagonal3x3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad7551139cff0c4208d27f0ad3437833e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 4, T, Q&gt; glm::diagonal3x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacb8969e6543ba775c6638161a37ac330\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 2, T, Q&gt; glm::diagonal4x2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae235def5049d6740f0028433f5e13f90\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 3, T, Q&gt; glm::diagonal4x3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0b4cd8dea436791b072356231ee8578f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::diagonal4x4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a diagonal matrix. </p>\n<p>From GLM_GTX_matrix_operation extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00340.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_matrix_query</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_matrix_query<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00106.html\" title=\"GLM_GTX_matrix_query \">glm/gtx/matrix_query.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaee935d145581c82e82b154ccfd78ad91\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q, template&lt; length_t, length_t, typename, qualifier &gt; class matType&gt; </td></tr>\n<tr class=\"memitem:gaee935d145581c82e82b154ccfd78ad91\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#gaee935d145581c82e82b154ccfd78ad91\">isIdentity</a> (matType&lt; C, R, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaee935d145581c82e82b154ccfd78ad91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is an identity matrix.  <a href=\"a00340.html#gaee935d145581c82e82b154ccfd78ad91\">More...</a><br /></td></tr>\n<tr class=\"separator:gaee935d145581c82e82b154ccfd78ad91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae785af56f47ce220a1609f7f84aa077a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae785af56f47ce220a1609f7f84aa077a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#gae785af56f47ce220a1609f7f84aa077a\">isNormalized</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gae785af56f47ce220a1609f7f84aa077a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is a normalized matrix.  <a href=\"a00340.html#gae785af56f47ce220a1609f7f84aa077a\">More...</a><br /></td></tr>\n<tr class=\"separator:gae785af56f47ce220a1609f7f84aa077a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa068311695f28f5f555f5f746a6a66fb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa068311695f28f5f555f5f746a6a66fb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#gaa068311695f28f5f555f5f746a6a66fb\">isNormalized</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaa068311695f28f5f555f5f746a6a66fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is a normalized matrix.  <a href=\"a00340.html#gaa068311695f28f5f555f5f746a6a66fb\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa068311695f28f5f555f5f746a6a66fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4d9bb4d0465df49fedfad79adc6ce4ad\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4d9bb4d0465df49fedfad79adc6ce4ad\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad\">isNormalized</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga4d9bb4d0465df49fedfad79adc6ce4ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is a normalized matrix.  <a href=\"a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4d9bb4d0465df49fedfad79adc6ce4ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9790ec222ce948c0ff0d8ce927340dba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9790ec222ce948c0ff0d8ce927340dba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#ga9790ec222ce948c0ff0d8ce927340dba\">isNull</a> (mat&lt; 2, 2, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga9790ec222ce948c0ff0d8ce927340dba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix a null matrix.  <a href=\"a00340.html#ga9790ec222ce948c0ff0d8ce927340dba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9790ec222ce948c0ff0d8ce927340dba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae14501c6b14ccda6014cc5350080103d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae14501c6b14ccda6014cc5350080103d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#gae14501c6b14ccda6014cc5350080103d\">isNull</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gae14501c6b14ccda6014cc5350080103d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix a null matrix.  <a href=\"a00340.html#gae14501c6b14ccda6014cc5350080103d\">More...</a><br /></td></tr>\n<tr class=\"separator:gae14501c6b14ccda6014cc5350080103d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2b98bb30a9fefa7cdea5f1dcddba677b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2b98bb30a9fefa7cdea5f1dcddba677b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b\">isNull</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga2b98bb30a9fefa7cdea5f1dcddba677b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is a null matrix.  <a href=\"a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2b98bb30a9fefa7cdea5f1dcddba677b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58f3289f74dcab653387dd78ad93ca40\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q, template&lt; length_t, length_t, typename, qualifier &gt; class matType&gt; </td></tr>\n<tr class=\"memitem:ga58f3289f74dcab653387dd78ad93ca40\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00340.html#ga58f3289f74dcab653387dd78ad93ca40\">isOrthogonal</a> (matType&lt; C, R, T, Q &gt; const &amp;m, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga58f3289f74dcab653387dd78ad93ca40\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return whether a matrix is an orthonormalized matrix.  <a href=\"a00340.html#ga58f3289f74dcab653387dd78ad93ca40\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58f3289f74dcab653387dd78ad93ca40\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00106.html\" title=\"GLM_GTX_matrix_query \">glm/gtx/matrix_query.hpp</a>&gt; to use the features of this extension. </p>\n<p>Query to evaluate matrix properties </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaee935d145581c82e82b154ccfd78ad91\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isIdentity </td>\n          <td>(</td>\n          <td class=\"paramtype\">matType&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return whether a matrix is an identity matrix. </p>\n<p>From GLM_GTX_matrix_query extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae785af56f47ce220a1609f7f84aa077a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isNormalized </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 2, 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return whether a matrix is a normalized matrix. </p>\n<p>From GLM_GTX_matrix_query extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa068311695f28f5f555f5f746a6a66fb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isNormalized </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return whether a matrix is a normalized matrix. </p>\n<p>From GLM_GTX_matrix_query extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4d9bb4d0465df49fedfad79adc6ce4ad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isNormalized </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return whether a matrix is a normalized matrix. </p>\n<p>From GLM_GTX_matrix_query extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9790ec222ce948c0ff0d8ce927340dba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isNull </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 2, 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return whether a matrix a null matrix. </p>\n<p>From GLM_GTX_matrix_query extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae14501c6b14ccda6014cc5350080103d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isNull </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return whether a matrix a null matrix. </p>\n<p>From GLM_GTX_matrix_query extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2b98bb30a9fefa7cdea5f1dcddba677b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isNull </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return whether a matrix is a null matrix. </p>\n<p>From GLM_GTX_matrix_query extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga58f3289f74dcab653387dd78ad93ca40\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isOrthogonal </td>\n          <td>(</td>\n          <td class=\"paramtype\">matType&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return whether a matrix is an orthonormalized matrix. </p>\n<p>From GLM_GTX_matrix_query extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00341.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_matrix_transform_2d</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_matrix_transform_2d<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00110.html\" title=\"GLM_GTX_matrix_transform_2d \">glm/gtx/matrix_transform_2d.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad5c84a4932a758f385a87098ce1b1660\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad5c84a4932a758f385a87098ce1b1660\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#gad5c84a4932a758f385a87098ce1b1660\">rotate</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T angle)</td></tr>\n<tr class=\"memdesc:gad5c84a4932a758f385a87098ce1b1660\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a rotation 3 * 3 matrix created from an angle.  <a href=\"a00341.html#gad5c84a4932a758f385a87098ce1b1660\">More...</a><br /></td></tr>\n<tr class=\"separator:gad5c84a4932a758f385a87098ce1b1660\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadb47d2ad2bd984b213e8ff7d9cd8154e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadb47d2ad2bd984b213e8ff7d9cd8154e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e\">scale</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gadb47d2ad2bd984b213e8ff7d9cd8154e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a scale 3 * 3 matrix created from a vector of 2 components.  <a href=\"a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e\">More...</a><br /></td></tr>\n<tr class=\"separator:gadb47d2ad2bd984b213e8ff7d9cd8154e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2a118ece5db1e2022112b954846012af\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2a118ece5db1e2022112b954846012af\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#ga2a118ece5db1e2022112b954846012af\">shearX</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T y)</td></tr>\n<tr class=\"memdesc:ga2a118ece5db1e2022112b954846012af\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix.  <a href=\"a00341.html#ga2a118ece5db1e2022112b954846012af\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2a118ece5db1e2022112b954846012af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga717f1833369c1ac4a40e4ac015af885e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga717f1833369c1ac4a40e4ac015af885e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#ga717f1833369c1ac4a40e4ac015af885e\">shearY</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T x)</td></tr>\n<tr class=\"memdesc:ga717f1833369c1ac4a40e4ac015af885e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a vertical (parallel to the y axis) shear 3 * 3 matrix.  <a href=\"a00341.html#ga717f1833369c1ac4a40e4ac015af885e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga717f1833369c1ac4a40e4ac015af885e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf4573ae47c80938aa9053ef6a33755ab\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf4573ae47c80938aa9053ef6a33755ab\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_QUALIFIER mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00341.html#gaf4573ae47c80938aa9053ef6a33755ab\">translate</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf4573ae47c80938aa9053ef6a33755ab\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a translation 3 * 3 matrix created from a vector of 2 components.  <a href=\"a00341.html#gaf4573ae47c80938aa9053ef6a33755ab\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf4573ae47c80938aa9053ef6a33755ab\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00110.html\" title=\"GLM_GTX_matrix_transform_2d \">glm/gtx/matrix_transform_2d.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines functions that generate common 2d transformation matrices. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gad5c84a4932a758f385a87098ce1b1660\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a rotation 3 * 3 matrix created from an angle. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>\n    <tr><td class=\"paramname\">angle</td><td>Rotation angle expressed in radians. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadb47d2ad2bd984b213e8ff7d9cd8154e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; glm::scale </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a scale 3 * 3 matrix created from a vector of 2 components. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>\n    <tr><td class=\"paramname\">v</td><td>Coordinates of a scale vector. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2a118ece5db1e2022112b954846012af\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; glm::shearX </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>\n    <tr><td class=\"paramname\">y</td><td>Shear factor. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga717f1833369c1ac4a40e4ac015af885e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; glm::shearY </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a vertical (parallel to the y axis) shear 3 * 3 matrix. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>\n    <tr><td class=\"paramname\">x</td><td>Shear factor. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf4573ae47c80938aa9053ef6a33755ab\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_QUALIFIER mat&lt;3, 3, T, Q&gt; glm::translate </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a translation 3 * 3 matrix created from a vector of 2 components. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this translation matrix. </td></tr>\n    <tr><td class=\"paramname\">v</td><td>Coordinates of a translation vector. </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00342.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_mixed_producte</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_mixed_producte<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00111.html\" title=\"GLM_GTX_mixed_producte \">glm/gtx/mixed_product.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gab3c6048fbb67f7243b088a4fee48d020\"><td class=\"memTemplParams\" colspan=\"2\"><a class=\"anchor\" id=\"gab3c6048fbb67f7243b088a4fee48d020\"></a>\ntemplate&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab3c6048fbb67f7243b088a4fee48d020\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00342.html#gab3c6048fbb67f7243b088a4fee48d020\">mixedProduct</a> (vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)</td></tr>\n<tr class=\"memdesc:gab3c6048fbb67f7243b088a4fee48d020\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Mixed product of 3 vectors (from GLM_GTX_mixed_product extension) <br /></td></tr>\n<tr class=\"separator:gab3c6048fbb67f7243b088a4fee48d020\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00111.html\" title=\"GLM_GTX_mixed_producte \">glm/gtx/mixed_product.hpp</a>&gt; to use the features of this extension. </p>\n<p>Mixed product of 3 vectors. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00343.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_norm</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_norm<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00113.html\" title=\"GLM_GTX_norm \">glm/gtx/norm.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga85660f1b79f66c09c7b5a6f80e68c89f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga85660f1b79f66c09c7b5a6f80e68c89f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f\">distance2</a> (vec&lt; L, T, Q &gt; const &amp;p0, vec&lt; L, T, Q &gt; const &amp;p1)</td></tr>\n<tr class=\"memdesc:ga85660f1b79f66c09c7b5a6f80e68c89f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the squared distance between p0 and p1, i.e., length2(p0 - p1).  <a href=\"a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85660f1b79f66c09c7b5a6f80e68c89f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae2fc0b2aa967bebfd6a244700bff6997\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae2fc0b2aa967bebfd6a244700bff6997\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gae2fc0b2aa967bebfd6a244700bff6997\">l1Norm</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gae2fc0b2aa967bebfd6a244700bff6997\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L1 norm between x and y.  <a href=\"a00343.html#gae2fc0b2aa967bebfd6a244700bff6997\">More...</a><br /></td></tr>\n<tr class=\"separator:gae2fc0b2aa967bebfd6a244700bff6997\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a7491e2037ceeb37f83ce41addfc0be\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1a7491e2037ceeb37f83ce41addfc0be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be\">l1Norm</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga1a7491e2037ceeb37f83ce41addfc0be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L1 norm of v.  <a href=\"a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a7491e2037ceeb37f83ce41addfc0be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41340b2ef40a9307ab0f137181565168\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga41340b2ef40a9307ab0f137181565168\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga41340b2ef40a9307ab0f137181565168\">l2Norm</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga41340b2ef40a9307ab0f137181565168\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L2 norm between x and y.  <a href=\"a00343.html#ga41340b2ef40a9307ab0f137181565168\">More...</a><br /></td></tr>\n<tr class=\"separator:ga41340b2ef40a9307ab0f137181565168\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae288bde8f0e41fb4ed62e65137b18cba\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae288bde8f0e41fb4ed62e65137b18cba\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gae288bde8f0e41fb4ed62e65137b18cba\">l2Norm</a> (vec&lt; 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gae288bde8f0e41fb4ed62e65137b18cba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L2 norm of v.  <a href=\"a00343.html#gae288bde8f0e41fb4ed62e65137b18cba\">More...</a><br /></td></tr>\n<tr class=\"separator:gae288bde8f0e41fb4ed62e65137b18cba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8d1789651050adb7024917984b41c3de\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8d1789651050adb7024917984b41c3de\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga8d1789651050adb7024917984b41c3de\">length2</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8d1789651050adb7024917984b41c3de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the squared length of x.  <a href=\"a00343.html#ga8d1789651050adb7024917984b41c3de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8d1789651050adb7024917984b41c3de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad58a8231fc32e38104a9e1c4d3c0cb64\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad58a8231fc32e38104a9e1c4d3c0cb64\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gad58a8231fc32e38104a9e1c4d3c0cb64\">lMaxNorm</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gad58a8231fc32e38104a9e1c4d3c0cb64\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the LMax norm between x and y.  <a href=\"a00343.html#gad58a8231fc32e38104a9e1c4d3c0cb64\">More...</a><br /></td></tr>\n<tr class=\"separator:gad58a8231fc32e38104a9e1c4d3c0cb64\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6968a324837a8e899396d44de23d5aae\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6968a324837a8e899396d44de23d5aae\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#ga6968a324837a8e899396d44de23d5aae\">lMaxNorm</a> (vec&lt; 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga6968a324837a8e899396d44de23d5aae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the LMax norm of v.  <a href=\"a00343.html#ga6968a324837a8e899396d44de23d5aae\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6968a324837a8e899396d44de23d5aae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacad23d30497eb16f67709f2375d1f66a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacad23d30497eb16f67709f2375d1f66a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gacad23d30497eb16f67709f2375d1f66a\">lxNorm</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, unsigned int Depth)</td></tr>\n<tr class=\"memdesc:gacad23d30497eb16f67709f2375d1f66a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L norm between x and y.  <a href=\"a00343.html#gacad23d30497eb16f67709f2375d1f66a\">More...</a><br /></td></tr>\n<tr class=\"separator:gacad23d30497eb16f67709f2375d1f66a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac61b6d81d796d6eb4d4183396a19ab91\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac61b6d81d796d6eb4d4183396a19ab91\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00343.html#gac61b6d81d796d6eb4d4183396a19ab91\">lxNorm</a> (vec&lt; 3, T, Q &gt; const &amp;x, unsigned int Depth)</td></tr>\n<tr class=\"memdesc:gac61b6d81d796d6eb4d4183396a19ab91\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the L norm of v.  <a href=\"a00343.html#gac61b6d81d796d6eb4d4183396a19ab91\">More...</a><br /></td></tr>\n<tr class=\"separator:gac61b6d81d796d6eb4d4183396a19ab91\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00113.html\" title=\"GLM_GTX_norm \">glm/gtx/norm.hpp</a>&gt; to use the features of this extension. </p>\n<p>Various ways to compute vector norms. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga85660f1b79f66c09c7b5a6f80e68c89f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::distance2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p1</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the squared distance between p0 and p1, i.e., length2(p0 - p1). </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae2fc0b2aa967bebfd6a244700bff6997\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::l1Norm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the L1 norm between x and y. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1a7491e2037ceeb37f83ce41addfc0be\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::l1Norm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the L1 norm of v. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga41340b2ef40a9307ab0f137181565168\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::l2Norm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the L2 norm between x and y. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae288bde8f0e41fb4ed62e65137b18cba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::l2Norm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the L2 norm of v. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8d1789651050adb7024917984b41c3de\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::length2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the squared length of x. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad58a8231fc32e38104a9e1c4d3c0cb64\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::lMaxNorm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the LMax norm between x and y. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6968a324837a8e899396d44de23d5aae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::lMaxNorm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the LMax norm of v. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacad23d30497eb16f67709f2375d1f66a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::lxNorm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int&#160;</td>\n          <td class=\"paramname\"><em>Depth</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the L norm between x and y. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac61b6d81d796d6eb4d4183396a19ab91\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::lxNorm </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">unsigned int&#160;</td>\n          <td class=\"paramname\"><em>Depth</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the L norm of v. </p>\n<p>From GLM_GTX_norm extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00344.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_normal</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_normal<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00114.html\" title=\"GLM_GTX_normal \">glm/gtx/normal.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaff1cb5496925dfa7962df457772a7f35\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaff1cb5496925dfa7962df457772a7f35\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00344.html#gaff1cb5496925dfa7962df457772a7f35\">triangleNormal</a> (vec&lt; 3, T, Q &gt; const &amp;p1, vec&lt; 3, T, Q &gt; const &amp;p2, vec&lt; 3, T, Q &gt; const &amp;p3)</td></tr>\n<tr class=\"memdesc:gaff1cb5496925dfa7962df457772a7f35\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Computes triangle normal from triangle points.  <a href=\"a00344.html#gaff1cb5496925dfa7962df457772a7f35\">More...</a><br /></td></tr>\n<tr class=\"separator:gaff1cb5496925dfa7962df457772a7f35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00114.html\" title=\"GLM_GTX_normal \">glm/gtx/normal.hpp</a>&gt; to use the features of this extension. </p>\n<p>Compute the normal of a triangle. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaff1cb5496925dfa7962df457772a7f35\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::triangleNormal </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>p3</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Computes triangle normal from triangle points. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00344.html\" title=\"Include <glm/gtx/normal.hpp> to use the features of this extension. \">GLM_GTX_normal</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00345.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_normalize_dot</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_normalize_dot<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;glm/gtx/normalized_dot.hpp&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2746fb9b5bd22b06b2f7c8babba5de9e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2746fb9b5bd22b06b2f7c8babba5de9e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e\">fastNormalizeDot</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga2746fb9b5bd22b06b2f7c8babba5de9e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Normalize parameters and returns the dot product of x and y.  <a href=\"a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2746fb9b5bd22b06b2f7c8babba5de9e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacb140a2b903115d318c8b0a2fb5a5daa\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacb140a2b903115d318c8b0a2fb5a5daa\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa\">normalizeDot</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gacb140a2b903115d318c8b0a2fb5a5daa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Normalize parameters and returns the dot product of x and y.  <a href=\"a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa\">More...</a><br /></td></tr>\n<tr class=\"separator:gacb140a2b903115d318c8b0a2fb5a5daa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;glm/gtx/normalized_dot.hpp&gt; to use the features of this extension. </p>\n<p>Dot product of vectors that need to be normalize with a single square root. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga2746fb9b5bd22b06b2f7c8babba5de9e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::fastNormalizeDot </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Normalize parameters and returns the dot product of x and y. </p>\n<p>Faster that dot(fastNormalize(x), fastNormalize(y)).</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00345.html\" title=\"Include <glm/gtx/normalized_dot.hpp> to use the features of this extension. \">GLM_GTX_normalize_dot</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacb140a2b903115d318c8b0a2fb5a5daa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::normalizeDot </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Normalize parameters and returns the dot product of x and y. </p>\n<p>It's faster that dot(normalize(x), normalize(y)).</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00345.html\" title=\"Include <glm/gtx/normalized_dot.hpp> to use the features of this extension. \">GLM_GTX_normalize_dot</a> extension. </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00346.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_number_precision</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_number_precision<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00116.html\" title=\"GLM_GTX_number_precision \">glm/gtx/number_precision.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga145ad477a2a3e152855511c3b52469a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga145ad477a2a3e152855511c3b52469a6\"></a>\ntypedef f32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga145ad477a2a3e152855511c3b52469a6\">f32mat1</a></td></tr>\n<tr class=\"memdesc:ga145ad477a2a3e152855511c3b52469a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga145ad477a2a3e152855511c3b52469a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac88c6a4dbfc380aa26e3adbbade36348\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gac88c6a4dbfc380aa26e3adbbade36348\"></a>\ntypedef f32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#gac88c6a4dbfc380aa26e3adbbade36348\">f32mat1x1</a></td></tr>\n<tr class=\"memdesc:gac88c6a4dbfc380aa26e3adbbade36348\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:gac88c6a4dbfc380aa26e3adbbade36348\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07f8d7348eb7ae059a84c118fdfeb943\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga07f8d7348eb7ae059a84c118fdfeb943\"></a>\ntypedef f32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga07f8d7348eb7ae059a84c118fdfeb943\">f32vec1</a></td></tr>\n<tr class=\"memdesc:ga07f8d7348eb7ae059a84c118fdfeb943\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga07f8d7348eb7ae059a84c118fdfeb943\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga59bfa589419b5265d01314fcecd33435\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga59bfa589419b5265d01314fcecd33435\"></a>\ntypedef f64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga59bfa589419b5265d01314fcecd33435\">f64mat1</a></td></tr>\n<tr class=\"memdesc:ga59bfa589419b5265d01314fcecd33435\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga59bfa589419b5265d01314fcecd33435\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga448eeb08d0b7d8c43a8b292c981955fd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga448eeb08d0b7d8c43a8b292c981955fd\"></a>\ntypedef f64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga448eeb08d0b7d8c43a8b292c981955fd\">f64mat1x1</a></td></tr>\n<tr class=\"memdesc:ga448eeb08d0b7d8c43a8b292c981955fd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga448eeb08d0b7d8c43a8b292c981955fd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5987a61b8c03d5c432a9e62f0b3efe1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"gae5987a61b8c03d5c432a9e62f0b3efe1\"></a>\ntypedef f64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#gae5987a61b8c03d5c432a9e62f0b3efe1\">f64vec1</a></td></tr>\n<tr class=\"memdesc:gae5987a61b8c03d5c432a9e62f0b3efe1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:gae5987a61b8c03d5c432a9e62f0b3efe1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga52cc069a92e126c3a8dcde93424d2ef0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga52cc069a92e126c3a8dcde93424d2ef0\"></a>\ntypedef u16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga52cc069a92e126c3a8dcde93424d2ef0\">u16vec1</a></td></tr>\n<tr class=\"memdesc:ga52cc069a92e126c3a8dcde93424d2ef0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">16bit unsigned integer scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga52cc069a92e126c3a8dcde93424d2ef0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"></a>\ntypedef u32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3\">u32vec1</a></td></tr>\n<tr class=\"memdesc:ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32bit unsigned integer scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga9bbc1e14aea65cba5e2dcfef6a67d9f3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga818de170e2584ab037130f2881925974\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga818de170e2584ab037130f2881925974\"></a>\ntypedef u64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga818de170e2584ab037130f2881925974\">u64vec1</a></td></tr>\n<tr class=\"memdesc:ga818de170e2584ab037130f2881925974\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64bit unsigned integer scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga818de170e2584ab037130f2881925974\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5853fe457f4c8a6bc09343d0e9833980\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\"><a class=\"anchor\" id=\"ga5853fe457f4c8a6bc09343d0e9833980\"></a>\ntypedef u8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00346.html#ga5853fe457f4c8a6bc09343d0e9833980\">u8vec1</a></td></tr>\n<tr class=\"memdesc:ga5853fe457f4c8a6bc09343d0e9833980\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">8bit unsigned integer scalar. (from GLM_GTX_number_precision extension) <br /></td></tr>\n<tr class=\"separator:ga5853fe457f4c8a6bc09343d0e9833980\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00116.html\" title=\"GLM_GTX_number_precision \">glm/gtx/number_precision.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defined size types. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00347.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_optimum_pow</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_optimum_pow<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00117.html\" title=\"GLM_GTX_optimum_pow \">glm/gtx/optimum_pow.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga19aaff3213bf23bdec3ef124ace237e9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga19aaff3213bf23bdec3ef124ace237e9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00347.html#ga19aaff3213bf23bdec3ef124ace237e9\">pow2</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga19aaff3213bf23bdec3ef124ace237e9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the power of 2.  <a href=\"a00347.html#ga19aaff3213bf23bdec3ef124ace237e9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga19aaff3213bf23bdec3ef124ace237e9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga35689d03cd434d6ea819f1942d3bf82e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga35689d03cd434d6ea819f1942d3bf82e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00347.html#ga35689d03cd434d6ea819f1942d3bf82e\">pow3</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga35689d03cd434d6ea819f1942d3bf82e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the power of 3.  <a href=\"a00347.html#ga35689d03cd434d6ea819f1942d3bf82e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga35689d03cd434d6ea819f1942d3bf82e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacef0968763026e180e53e735007dbf5a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gacef0968763026e180e53e735007dbf5a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00347.html#gacef0968763026e180e53e735007dbf5a\">pow4</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:gacef0968763026e180e53e735007dbf5a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns x raised to the power of 4.  <a href=\"a00347.html#gacef0968763026e180e53e735007dbf5a\">More...</a><br /></td></tr>\n<tr class=\"separator:gacef0968763026e180e53e735007dbf5a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00117.html\" title=\"GLM_GTX_optimum_pow \">glm/gtx/optimum_pow.hpp</a>&gt; to use the features of this extension. </p>\n<p>Integer exponentiation of power functions. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga19aaff3213bf23bdec3ef124ace237e9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::gtx::pow2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns x raised to the power of 2. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00347.html\" title=\"Include <glm/gtx/optimum_pow.hpp> to use the features of this extension. \">GLM_GTX_optimum_pow</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga35689d03cd434d6ea819f1942d3bf82e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::gtx::pow3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns x raised to the power of 3. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00347.html\" title=\"Include <glm/gtx/optimum_pow.hpp> to use the features of this extension. \">GLM_GTX_optimum_pow</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacef0968763026e180e53e735007dbf5a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::gtx::pow4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns x raised to the power of 4. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00347.html\" title=\"Include <glm/gtx/optimum_pow.hpp> to use the features of this extension. \">GLM_GTX_optimum_pow</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00348.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_orthonormalize</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_orthonormalize<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00118.html\" title=\"GLM_GTX_orthonormalize \">glm/gtx/orthonormalize.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga4cab5d698e6e2eccea30c8e81c74371f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4cab5d698e6e2eccea30c8e81c74371f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00348.html#ga4cab5d698e6e2eccea30c8e81c74371f\">orthonormalize</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:ga4cab5d698e6e2eccea30c8e81c74371f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the orthonormalized matrix of m.  <a href=\"a00348.html#ga4cab5d698e6e2eccea30c8e81c74371f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4cab5d698e6e2eccea30c8e81c74371f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3bc7ef498815026bc3d361ae0b7138e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac3bc7ef498815026bc3d361ae0b7138e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00348.html#gac3bc7ef498815026bc3d361ae0b7138e\">orthonormalize</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gac3bc7ef498815026bc3d361ae0b7138e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Orthonormalizes x according y.  <a href=\"a00348.html#gac3bc7ef498815026bc3d361ae0b7138e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac3bc7ef498815026bc3d361ae0b7138e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00118.html\" title=\"GLM_GTX_orthonormalize \">glm/gtx/orthonormalize.hpp</a>&gt; to use the features of this extension. </p>\n<p>Orthonormalize matrices. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga4cab5d698e6e2eccea30c8e81c74371f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::orthonormalize </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the orthonormalized matrix of m. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00348.html\" title=\"Include <glm/gtx/orthonormalize.hpp> to use the features of this extension. \">GLM_GTX_orthonormalize</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac3bc7ef498815026bc3d361ae0b7138e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::orthonormalize </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Orthonormalizes x according y. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00348.html\" title=\"Include <glm/gtx/orthonormalize.hpp> to use the features of this extension. \">GLM_GTX_orthonormalize</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00349.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_perpendicular</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_perpendicular<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00121.html\" title=\"GLM_GTX_perpendicular \">glm/gtx/perpendicular.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga264cfc4e180cf9b852e943b35089003c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga264cfc4e180cf9b852e943b35089003c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00349.html#ga264cfc4e180cf9b852e943b35089003c\">perp</a> (genType const &amp;x, genType const &amp;Normal)</td></tr>\n<tr class=\"memdesc:ga264cfc4e180cf9b852e943b35089003c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Projects x a perpendicular axis of Normal.  <a href=\"a00349.html#ga264cfc4e180cf9b852e943b35089003c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga264cfc4e180cf9b852e943b35089003c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00121.html\" title=\"GLM_GTX_perpendicular \">glm/gtx/perpendicular.hpp</a>&gt; to use the features of this extension. </p>\n<p>Perpendicular of a vector from other one </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga264cfc4e180cf9b852e943b35089003c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::perp </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Normal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Projects x a perpendicular axis of Normal. </p>\n<p>From GLM_GTX_perpendicular extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00350.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_polar_coordinates</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_polar_coordinates<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00122.html\" title=\"GLM_GTX_polar_coordinates \">glm/gtx/polar_coordinates.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1821d5b3324201e60a9e2823d0b5d0c8\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1821d5b3324201e60a9e2823d0b5d0c8\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8\">euclidean</a> (vec&lt; 2, T, Q &gt; const &amp;polar)</td></tr>\n<tr class=\"memdesc:ga1821d5b3324201e60a9e2823d0b5d0c8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert Polar to Euclidean coordinates.  <a href=\"a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1821d5b3324201e60a9e2823d0b5d0c8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab83ac2c0e55b684b06b6c46c28b1590d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab83ac2c0e55b684b06b6c46c28b1590d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d\">polar</a> (vec&lt; 3, T, Q &gt; const &amp;euclidean)</td></tr>\n<tr class=\"memdesc:gab83ac2c0e55b684b06b6c46c28b1590d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude.  <a href=\"a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d\">More...</a><br /></td></tr>\n<tr class=\"separator:gab83ac2c0e55b684b06b6c46c28b1590d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00122.html\" title=\"GLM_GTX_polar_coordinates \">glm/gtx/polar_coordinates.hpp</a>&gt; to use the features of this extension. </p>\n<p>Conversion from Euclidean space to polar space and revert. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga1821d5b3324201e60a9e2823d0b5d0c8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::euclidean </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>polar</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert Polar to Euclidean coordinates. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00350.html\" title=\"Include <glm/gtx/polar_coordinates.hpp> to use the features of this extension. \">GLM_GTX_polar_coordinates</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab83ac2c0e55b684b06b6c46c28b1590d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::polar </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>euclidean</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Convert Euclidean to Polar coordinates, x is the xz distance, y, the latitude and z the longitude. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00350.html\" title=\"Include <glm/gtx/polar_coordinates.hpp> to use the features of this extension. \">GLM_GTX_polar_coordinates</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00351.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_projection</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_projection<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00123.html\" title=\"GLM_GTX_projection \">glm/gtx/projection.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga58384b7170801dd513de46f87c7fb00e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga58384b7170801dd513de46f87c7fb00e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">proj</a> (genType const &amp;x, genType const &amp;Normal)</td></tr>\n<tr class=\"memdesc:ga58384b7170801dd513de46f87c7fb00e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Projects x on Normal.  <a href=\"a00351.html#ga58384b7170801dd513de46f87c7fb00e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58384b7170801dd513de46f87c7fb00e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00123.html\" title=\"GLM_GTX_projection \">glm/gtx/projection.hpp</a>&gt; to use the features of this extension. </p>\n<p>Projection of a vector to other one </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga58384b7170801dd513de46f87c7fb00e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::proj </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Normal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Projects x on Normal. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramdir\">[in]</td><td class=\"paramname\">x</td><td>A vector to project </td></tr>\n    <tr><td class=\"paramdir\">[in]</td><td class=\"paramname\">Normal</td><td>A normal that doesn't need to be of unit length.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00351.html\" title=\"Include <glm/gtx/projection.hpp> to use the features of this extension. \">GLM_GTX_projection</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00352.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_quaternion</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_quaternion<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00126.html\" title=\"GLM_GTX_quaternion \">glm/gtx/quaternion.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2f32f970411c44cdd38bb98960198385\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2f32f970411c44cdd38bb98960198385\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga2f32f970411c44cdd38bb98960198385\">cross</a> (qua&lt; T, Q &gt; const &amp;q, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga2f32f970411c44cdd38bb98960198385\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute a cross product between a quaternion and a vector.  <a href=\"a00352.html#ga2f32f970411c44cdd38bb98960198385\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f32f970411c44cdd38bb98960198385\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9f5f77255756e5668dfee7f0d07ed021\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9f5f77255756e5668dfee7f0d07ed021\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga9f5f77255756e5668dfee7f0d07ed021\">cross</a> (vec&lt; 3, T, Q &gt; const &amp;v, qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga9f5f77255756e5668dfee7f0d07ed021\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute a cross product between a vector and a quaternion.  <a href=\"a00352.html#ga9f5f77255756e5668dfee7f0d07ed021\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9f5f77255756e5668dfee7f0d07ed021\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga321953c1b2e7befe6f5dcfddbfc6b76b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga321953c1b2e7befe6f5dcfddbfc6b76b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b\">extractRealComponent</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga321953c1b2e7befe6f5dcfddbfc6b76b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extract the real component of a quaternion.  <a href=\"a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga321953c1b2e7befe6f5dcfddbfc6b76b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga264e10708d58dd0ff53b7902a2bd2561\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga264e10708d58dd0ff53b7902a2bd2561\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga264e10708d58dd0ff53b7902a2bd2561\">fastMix</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T const &amp;a)</td></tr>\n<tr class=\"memdesc:ga264e10708d58dd0ff53b7902a2bd2561\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion normalized linear interpolation.  <a href=\"a00352.html#ga264e10708d58dd0ff53b7902a2bd2561\">More...</a><br /></td></tr>\n<tr class=\"separator:ga264e10708d58dd0ff53b7902a2bd2561\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacc5cd5f3e78de61d141c2355417424de\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacc5cd5f3e78de61d141c2355417424de\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gacc5cd5f3e78de61d141c2355417424de\">intermediate</a> (qua&lt; T, Q &gt; const &amp;prev, qua&lt; T, Q &gt; const &amp;curr, qua&lt; T, Q &gt; const &amp;next)</td></tr>\n<tr class=\"memdesc:gacc5cd5f3e78de61d141c2355417424de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an intermediate control point for squad interpolation.  <a href=\"a00352.html#gacc5cd5f3e78de61d141c2355417424de\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc5cd5f3e78de61d141c2355417424de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga58a609b1b8ab965f5df2702e8ca4e75b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga58a609b1b8ab965f5df2702e8ca4e75b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b\">length2</a> (qua&lt; T, Q &gt; const &amp;q)</td></tr>\n<tr class=\"memdesc:ga58a609b1b8ab965f5df2702e8ca4e75b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the squared length of x.  <a href=\"a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga58a609b1b8ab965f5df2702e8ca4e75b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5ee8332600b2aca3a77622a28d857b55\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5ee8332600b2aca3a77622a28d857b55\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga5ee8332600b2aca3a77622a28d857b55\">quat_identity</a> ()</td></tr>\n<tr class=\"memdesc:ga5ee8332600b2aca3a77622a28d857b55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Create an identity quaternion.  <a href=\"a00352.html#ga5ee8332600b2aca3a77622a28d857b55\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5ee8332600b2aca3a77622a28d857b55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07da6ef58646442efe93b0c273d73776\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga07da6ef58646442efe93b0c273d73776\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga07da6ef58646442efe93b0c273d73776\">rotate</a> (qua&lt; T, Q &gt; const &amp;q, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga07da6ef58646442efe93b0c273d73776\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns quarternion square root.  <a href=\"a00352.html#ga07da6ef58646442efe93b0c273d73776\">More...</a><br /></td></tr>\n<tr class=\"separator:ga07da6ef58646442efe93b0c273d73776\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafcb78dfff45fbf19a7fcb2bd03fbf196\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafcb78dfff45fbf19a7fcb2bd03fbf196\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196\">rotate</a> (qua&lt; T, Q &gt; const &amp;q, vec&lt; 4, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gafcb78dfff45fbf19a7fcb2bd03fbf196\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotates a 4 components vector by a quaternion.  <a href=\"a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196\">More...</a><br /></td></tr>\n<tr class=\"separator:gafcb78dfff45fbf19a7fcb2bd03fbf196\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga03e61282831cc3f52cc76f72f52ad2c5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga03e61282831cc3f52cc76f72f52ad2c5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5\">rotation</a> (vec&lt; 3, T, Q &gt; const &amp;orig, vec&lt; 3, T, Q &gt; const &amp;dest)</td></tr>\n<tr class=\"memdesc:ga03e61282831cc3f52cc76f72f52ad2c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the rotation between two vectors.  <a href=\"a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga03e61282831cc3f52cc76f72f52ad2c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc576cc957adc2a568cdcbc3799175bc\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadc576cc957adc2a568cdcbc3799175bc\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gadc576cc957adc2a568cdcbc3799175bc\">shortMix</a> (qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T const &amp;a)</td></tr>\n<tr class=\"memdesc:gadc576cc957adc2a568cdcbc3799175bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Quaternion interpolation using the rotation short path.  <a href=\"a00352.html#gadc576cc957adc2a568cdcbc3799175bc\">More...</a><br /></td></tr>\n<tr class=\"separator:gadc576cc957adc2a568cdcbc3799175bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0b9bf3459e132ad8a18fe970669e3e35\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0b9bf3459e132ad8a18fe970669e3e35\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35\">squad</a> (qua&lt; T, Q &gt; const &amp;q1, qua&lt; T, Q &gt; const &amp;q2, qua&lt; T, Q &gt; const &amp;s1, qua&lt; T, Q &gt; const &amp;s2, T const &amp;h)</td></tr>\n<tr class=\"memdesc:ga0b9bf3459e132ad8a18fe970669e3e35\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute a point on a path according squad equation.  <a href=\"a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0b9bf3459e132ad8a18fe970669e3e35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab0afabb894b28a983fb8ec610409d56\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaab0afabb894b28a983fb8ec610409d56\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gaab0afabb894b28a983fb8ec610409d56\">toMat3</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gaab0afabb894b28a983fb8ec610409d56\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 3 * 3 matrix.  <a href=\"a00352.html#gaab0afabb894b28a983fb8ec610409d56\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab0afabb894b28a983fb8ec610409d56\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadfa2c77094e8cc9adad321d938855ffb\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadfa2c77094e8cc9adad321d938855ffb\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#gadfa2c77094e8cc9adad321d938855ffb\">toMat4</a> (qua&lt; T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gadfa2c77094e8cc9adad321d938855ffb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a quaternion to a 4 * 4 matrix.  <a href=\"a00352.html#gadfa2c77094e8cc9adad321d938855ffb\">More...</a><br /></td></tr>\n<tr class=\"separator:gadfa2c77094e8cc9adad321d938855ffb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga798de5d186499c9a9231cd92c8afaef1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga798de5d186499c9a9231cd92c8afaef1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga798de5d186499c9a9231cd92c8afaef1\">toQuat</a> (mat&lt; 3, 3, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga798de5d186499c9a9231cd92c8afaef1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a 3 * 3 matrix to a quaternion.  <a href=\"a00352.html#ga798de5d186499c9a9231cd92c8afaef1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga798de5d186499c9a9231cd92c8afaef1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5eb36f51e1638e710451eba194dbc011\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5eb36f51e1638e710451eba194dbc011\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00352.html#ga5eb36f51e1638e710451eba194dbc011\">toQuat</a> (mat&lt; 4, 4, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga5eb36f51e1638e710451eba194dbc011\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts a 4 * 4 matrix to a quaternion.  <a href=\"a00352.html#ga5eb36f51e1638e710451eba194dbc011\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5eb36f51e1638e710451eba194dbc011\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00126.html\" title=\"GLM_GTX_quaternion \">glm/gtx/quaternion.hpp</a>&gt; to use the features of this extension. </p>\n<p>Extented quaternion types and functions </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga2f32f970411c44cdd38bb98960198385\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::cross </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute a cross product between a quaternion and a vector. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9f5f77255756e5668dfee7f0d07ed021\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::cross </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute a cross product between a vector and a quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga321953c1b2e7befe6f5dcfddbfc6b76b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::extractRealComponent </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extract the real component of a quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga264e10708d58dd0ff53b7902a2bd2561\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::fastMix </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Quaternion normalized linear interpolation. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacc5cd5f3e78de61d141c2355417424de\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::intermediate </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>prev</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>curr</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>next</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns an intermediate control point for squad interpolation. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga58a609b1b8ab965f5df2702e8ca4e75b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::length2 </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the squared length of x. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5ee8332600b2aca3a77622a28d857b55\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::quat_identity </td>\n          <td>(</td>\n          <td class=\"paramname\"></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Create an identity quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga07da6ef58646442efe93b0c273d73776\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns quarternion square root. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> Rotates a 3 components vector by a quaternion.</dd>\n<dd>\n<a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafcb78dfff45fbf19a7fcb2bd03fbf196\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotates a 4 components vector by a quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga03e61282831cc3f52cc76f72f52ad2c5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::rotation </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>orig</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>dest</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the rotation between two vectors. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">orig</td><td>vector, needs to be normalized </td></tr>\n    <tr><td class=\"paramname\">dest</td><td>vector, needs to be normalized</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadc576cc957adc2a568cdcbc3799175bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::shortMix </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Quaternion interpolation using the rotation short path. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0b9bf3459e132ad8a18fe970669e3e35\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::squad </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>s1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>s2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>h</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute a point on a path according squad equation. </p>\n<p>q1 and q2 are control points; s1 and s2 are intermediate control points.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaab0afabb894b28a983fb8ec610409d56\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::toMat3 </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a quaternion to a 3 * 3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00126_source.html#l00113\">113</a> of file <a class=\"el\" href=\"a00126_source.html\">gtx/quaternion.hpp</a>.</p>\n\n<p>References <a class=\"el\" href=\"a00299.html#ga333ab70047fbe4132406100c292dbc89\">glm::mat3_cast()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadfa2c77094e8cc9adad321d938855ffb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::toMat4 </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a quaternion to a 4 * 4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00126_source.html#l00120\">120</a> of file <a class=\"el\" href=\"a00126_source.html\">gtx/quaternion.hpp</a>.</p>\n\n<p>References <a class=\"el\" href=\"a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3\">glm::mat4_cast()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga798de5d186499c9a9231cd92c8afaef1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::toQuat </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a 3 * 3 matrix to a quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00126_source.html#l00127\">127</a> of file <a class=\"el\" href=\"a00126_source.html\">gtx/quaternion.hpp</a>.</p>\n\n<p>References <a class=\"el\" href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">glm::quat_cast()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5eb36f51e1638e710451eba194dbc011\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::toQuat </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts a 4 * 4 matrix to a quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00352.html\" title=\"Include <glm/gtx/quaternion.hpp> to use the features of this extension. \">GLM_GTX_quaternion</a> </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00126_source.html#l00134\">134</a> of file <a class=\"el\" href=\"a00126_source.html\">gtx/quaternion.hpp</a>.</p>\n\n<p>References <a class=\"el\" href=\"a00299.html#ga1108a4ab88ca87bac321454eea7702f8\">glm::quat_cast()</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00353.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_range</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_range<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00138.html\" title=\"GLM_GTX_range \">glm/gtx/range.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00138.html\" title=\"GLM_GTX_range \">glm/gtx/range.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines begin and end for vectors and matrices. Useful for range-based for loop. The range is defined over the elements, not over columns or rows (e.g. mat4 has 16 elements). </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00354.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_raw_data</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_raw_data<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00139.html\" title=\"GLM_GTX_raw_data \">glm/gtx/raw_data.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:ga3005cb0d839d546c616becfa6602c607\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef detail::uint8&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html#ga3005cb0d839d546c616becfa6602c607\">byte</a></td></tr>\n<tr class=\"memdesc:ga3005cb0d839d546c616becfa6602c607\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for byte numbers.  <a href=\"a00354.html#ga3005cb0d839d546c616becfa6602c607\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3005cb0d839d546c616becfa6602c607\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga86e46fff9f80ae33893d8d697f2ca98a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef detail::uint32&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a\">dword</a></td></tr>\n<tr class=\"memdesc:ga86e46fff9f80ae33893d8d697f2ca98a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for dword numbers.  <a href=\"a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga86e46fff9f80ae33893d8d697f2ca98a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4021754ffb8e5ef14c75802b15657714\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef detail::uint64&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html#ga4021754ffb8e5ef14c75802b15657714\">qword</a></td></tr>\n<tr class=\"memdesc:ga4021754ffb8e5ef14c75802b15657714\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for qword numbers.  <a href=\"a00354.html#ga4021754ffb8e5ef14c75802b15657714\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4021754ffb8e5ef14c75802b15657714\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16e9fea0ef1e6c4ef472d3d1731c49a5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef detail::uint16&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5\">word</a></td></tr>\n<tr class=\"memdesc:ga16e9fea0ef1e6c4ef472d3d1731c49a5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Type for word numbers.  <a href=\"a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16e9fea0ef1e6c4ef472d3d1731c49a5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00139.html\" title=\"GLM_GTX_raw_data \">glm/gtx/raw_data.hpp</a>&gt; to use the features of this extension. </p>\n<p>Projection of a vector to other one </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"ga3005cb0d839d546c616becfa6602c607\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint8 byte</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Type for byte numbers. </p>\n<p>From GLM_GTX_raw_data extension. </p>\n\n<p>Definition at line <a class=\"el\" href=\"a00139_source.html#l00034\">34</a> of file <a class=\"el\" href=\"a00139_source.html\">raw_data.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga86e46fff9f80ae33893d8d697f2ca98a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint32 dword</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Type for dword numbers. </p>\n<p>From GLM_GTX_raw_data extension. </p>\n\n<p>Definition at line <a class=\"el\" href=\"a00139_source.html#l00042\">42</a> of file <a class=\"el\" href=\"a00139_source.html\">raw_data.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4021754ffb8e5ef14c75802b15657714\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint64 qword</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Type for qword numbers. </p>\n<p>From GLM_GTX_raw_data extension. </p>\n\n<p>Definition at line <a class=\"el\" href=\"a00139_source.html#l00046\">46</a> of file <a class=\"el\" href=\"a00139_source.html\">raw_data.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga16e9fea0ef1e6c4ef472d3d1731c49a5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef detail::uint16 word</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Type for word numbers. </p>\n<p>From GLM_GTX_raw_data extension. </p>\n\n<p>Definition at line <a class=\"el\" href=\"a00139_source.html#l00038\">38</a> of file <a class=\"el\" href=\"a00139_source.html\">raw_data.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00355.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_rotate_normalized_axis</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_rotate_normalized_axis<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00141.html\" title=\"GLM_GTX_rotate_normalized_axis \">glm/gtx/rotate_normalized_axis.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga50efd7ebca0f7a603bb3cc11e34c708d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga50efd7ebca0f7a603bb3cc11e34c708d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00355.html#ga50efd7ebca0f7a603bb3cc11e34c708d\">rotateNormalizedAxis</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:ga50efd7ebca0f7a603bb3cc11e34c708d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a rotation 4 * 4 matrix created from a normalized axis and an angle.  <a href=\"a00355.html#ga50efd7ebca0f7a603bb3cc11e34c708d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50efd7ebca0f7a603bb3cc11e34c708d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga08f9c5411437d528019a25bfc01473d1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga08f9c5411437d528019a25bfc01473d1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL qua&lt; T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00355.html#ga08f9c5411437d528019a25bfc01473d1\">rotateNormalizedAxis</a> (qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)</td></tr>\n<tr class=\"memdesc:ga08f9c5411437d528019a25bfc01473d1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotates a quaternion from a vector of 3 components normalized axis and an angle.  <a href=\"a00355.html#ga08f9c5411437d528019a25bfc01473d1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga08f9c5411437d528019a25bfc01473d1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00141.html\" title=\"GLM_GTX_rotate_normalized_axis \">glm/gtx/rotate_normalized_axis.hpp</a>&gt; to use the features of this extension. </p>\n<p>Quaternions and matrices rotations around normalized axis. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga50efd7ebca0f7a603bb3cc11e34c708d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::rotateNormalizedAxis </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>axis</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a rotation 4 * 4 matrix created from a normalized axis and an angle. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">m</td><td>Input matrix multiplied by this rotation matrix. </td></tr>\n    <tr><td class=\"paramname\">angle</td><td>Rotation angle expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">axis</td><td>Rotation axis, must be normalized. </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">T</td><td>Value type used to build the matrix. Currently supported: half (not recommended), float or double.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00355.html\" title=\"Include <glm/gtx/rotate_normalized_axis.hpp> to use the features of this extension. \">GLM_GTX_rotate_normalized_axis</a> </dd>\n<dd>\n- rotate(T angle, T x, T y, T z) </dd>\n<dd>\n- rotate(mat&lt;4, 4, T, Q&gt; const&amp; m, T angle, T x, T y, T z) </dd>\n<dd>\n- rotate(T angle, vec&lt;3, T, Q&gt; const&amp; v) </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga08f9c5411437d528019a25bfc01473d1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL qua&lt;T, Q&gt; glm::rotateNormalizedAxis </td>\n          <td>(</td>\n          <td class=\"paramtype\">qua&lt; T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>q</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>axis</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotates a quaternion from a vector of 3 components normalized axis and an angle. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">q</td><td>Source orientation </td></tr>\n    <tr><td class=\"paramname\">angle</td><td>Angle expressed in radians. </td></tr>\n    <tr><td class=\"paramname\">axis</td><td>Normalized axis of the rotation, must be normalized.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00355.html\" title=\"Include <glm/gtx/rotate_normalized_axis.hpp> to use the features of this extension. \">GLM_GTX_rotate_normalized_axis</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00356.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_rotate_vector</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_rotate_vector<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00142.html\" title=\"GLM_GTX_rotate_vector \">glm/gtx/rotate_vector.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga1a32fceb71962e6160e8af295c91930a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1a32fceb71962e6160e8af295c91930a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">orientation</a> (vec&lt; 3, T, Q &gt; const &amp;Normal, vec&lt; 3, T, Q &gt; const &amp;Up)</td></tr>\n<tr class=\"memdesc:ga1a32fceb71962e6160e8af295c91930a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a rotation matrix from a normal and a up vector.  <a href=\"a00356.html#ga1a32fceb71962e6160e8af295c91930a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a32fceb71962e6160e8af295c91930a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab64a67b52ff4f86c3ba16595a5a25af6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab64a67b52ff4f86c3ba16595a5a25af6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 2, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#gab64a67b52ff4f86c3ba16595a5a25af6\">rotate</a> (vec&lt; 2, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:gab64a67b52ff4f86c3ba16595a5a25af6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a two dimensional vector.  <a href=\"a00356.html#gab64a67b52ff4f86c3ba16595a5a25af6\">More...</a><br /></td></tr>\n<tr class=\"separator:gab64a67b52ff4f86c3ba16595a5a25af6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ba501ef83d1a009a17ac774cc560f21\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1ba501ef83d1a009a17ac774cc560f21\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga1ba501ef83d1a009a17ac774cc560f21\">rotate</a> (vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga1ba501ef83d1a009a17ac774cc560f21\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a three dimensional vector around an axis.  <a href=\"a00356.html#ga1ba501ef83d1a009a17ac774cc560f21\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1ba501ef83d1a009a17ac774cc560f21\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1005f1267ed9c57faa3f24cf6873b961\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1005f1267ed9c57faa3f24cf6873b961\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga1005f1267ed9c57faa3f24cf6873b961\">rotate</a> (vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga1005f1267ed9c57faa3f24cf6873b961\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a four dimensional vector around an axis.  <a href=\"a00356.html#ga1005f1267ed9c57faa3f24cf6873b961\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1005f1267ed9c57faa3f24cf6873b961\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga059fdbdba4cca35cdff172a9d0d0afc9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga059fdbdba4cca35cdff172a9d0d0afc9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga059fdbdba4cca35cdff172a9d0d0afc9\">rotateX</a> (vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga059fdbdba4cca35cdff172a9d0d0afc9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a three dimensional vector around the X axis.  <a href=\"a00356.html#ga059fdbdba4cca35cdff172a9d0d0afc9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga059fdbdba4cca35cdff172a9d0d0afc9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4333b1ea8ebf1bd52bc3801a7617398a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4333b1ea8ebf1bd52bc3801a7617398a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a\">rotateX</a> (vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga4333b1ea8ebf1bd52bc3801a7617398a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a four dimensional vector around the X axis.  <a href=\"a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4333b1ea8ebf1bd52bc3801a7617398a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaebdc8b054ace27d9f62e054531c6f44d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaebdc8b054ace27d9f62e054531c6f44d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#gaebdc8b054ace27d9f62e054531c6f44d\">rotateY</a> (vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:gaebdc8b054ace27d9f62e054531c6f44d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a three dimensional vector around the Y axis.  <a href=\"a00356.html#gaebdc8b054ace27d9f62e054531c6f44d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaebdc8b054ace27d9f62e054531c6f44d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3ce3db0867b7f8efd878ee34f95a623b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3ce3db0867b7f8efd878ee34f95a623b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b\">rotateY</a> (vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga3ce3db0867b7f8efd878ee34f95a623b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a four dimensional vector around the Y axis.  <a href=\"a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3ce3db0867b7f8efd878ee34f95a623b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5a048838a03f6249acbacb4dbacf79c4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5a048838a03f6249acbacb4dbacf79c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga5a048838a03f6249acbacb4dbacf79c4\">rotateZ</a> (vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga5a048838a03f6249acbacb4dbacf79c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a three dimensional vector around the Z axis.  <a href=\"a00356.html#ga5a048838a03f6249acbacb4dbacf79c4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5a048838a03f6249acbacb4dbacf79c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga923b75c6448161053768822d880702e6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga923b75c6448161053768822d880702e6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga923b75c6448161053768822d880702e6\">rotateZ</a> (vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga923b75c6448161053768822d880702e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Rotate a four dimensional vector around the Z axis.  <a href=\"a00356.html#ga923b75c6448161053768822d880702e6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga923b75c6448161053768822d880702e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b11b18ce824174ea1a5a69ea14e2cee\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8b11b18ce824174ea1a5a69ea14e2cee\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee\">slerp</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, T const &amp;a)</td></tr>\n<tr class=\"memdesc:ga8b11b18ce824174ea1a5a69ea14e2cee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns Spherical interpolation between two vectors.  <a href=\"a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b11b18ce824174ea1a5a69ea14e2cee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00142.html\" title=\"GLM_GTX_rotate_vector \">glm/gtx/rotate_vector.hpp</a>&gt; to use the features of this extension. </p>\n<p>Function to directly rotate a vector </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga1a32fceb71962e6160e8af295c91930a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::orientation </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Normal</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Up</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a rotation matrix from a normal and a up vector. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab64a67b52ff4f86c3ba16595a5a25af6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;2, T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a two dimensional vector. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1ba501ef83d1a009a17ac774cc560f21\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>normal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a three dimensional vector around an axis. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1005f1267ed9c57faa3f24cf6873b961\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>normal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a four dimensional vector around an axis. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga059fdbdba4cca35cdff172a9d0d0afc9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::rotateX </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a three dimensional vector around the X axis. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4333b1ea8ebf1bd52bc3801a7617398a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::rotateX </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a four dimensional vector around the X axis. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaebdc8b054ace27d9f62e054531c6f44d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::rotateY </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a three dimensional vector around the Y axis. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3ce3db0867b7f8efd878ee34f95a623b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::rotateY </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a four dimensional vector around the Y axis. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5a048838a03f6249acbacb4dbacf79c4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::rotateZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a three dimensional vector around the Z axis. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga923b75c6448161053768822d880702e6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;4, T, Q&gt; glm::rotateZ </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Rotate a four dimensional vector around the Z axis. </p>\n<p>From GLM_GTX_rotate_vector extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b11b18ce824174ea1a5a69ea14e2cee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;3, T, Q&gt; glm::slerp </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>a</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns Spherical interpolation between two vectors. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">x</td><td>A first vector </td></tr>\n    <tr><td class=\"paramname\">y</td><td>A second vector </td></tr>\n    <tr><td class=\"paramname\">a</td><td>Interpolation factor. The interpolation is defined beyond the range [0, 1].</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00356.html\" title=\"Include <glm/gtx/rotate_vector.hpp> to use the features of this extension. \">GLM_GTX_rotate_vector</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00357.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_scalar_relational</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_scalar_relational<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00150.html\" title=\"GLM_GTX_scalar_relational \">glm/gtx/scalar_relational.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<p>Include &lt;<a class=\"el\" href=\"a00150.html\" title=\"GLM_GTX_scalar_relational \">glm/gtx/scalar_relational.hpp</a>&gt; to use the features of this extension. </p>\n<p>Extend a position from a source to a position at a defined length. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00358.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_spline</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_spline<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00154.html\" title=\"GLM_GTX_spline \">glm/gtx/spline.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8119c04f8210fd0d292757565cd6918d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8119c04f8210fd0d292757565cd6918d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00358.html#ga8119c04f8210fd0d292757565cd6918d\">catmullRom</a> (genType const &amp;v1, genType const &amp;v2, genType const &amp;v3, genType const &amp;v4, typename genType::value_type const &amp;s)</td></tr>\n<tr class=\"memdesc:ga8119c04f8210fd0d292757565cd6918d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a point from a catmull rom curve.  <a href=\"a00358.html#ga8119c04f8210fd0d292757565cd6918d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8119c04f8210fd0d292757565cd6918d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6b867eb52e2fc933d2e0bf26aabc9a70\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6b867eb52e2fc933d2e0bf26aabc9a70\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70\">cubic</a> (genType const &amp;v1, genType const &amp;v2, genType const &amp;v3, genType const &amp;v4, typename genType::value_type const &amp;s)</td></tr>\n<tr class=\"memdesc:ga6b867eb52e2fc933d2e0bf26aabc9a70\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a point from a cubic curve.  <a href=\"a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6b867eb52e2fc933d2e0bf26aabc9a70\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa69e143f6374d32f934a8edeaa50bac9\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa69e143f6374d32f934a8edeaa50bac9\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00358.html#gaa69e143f6374d32f934a8edeaa50bac9\">hermite</a> (genType const &amp;v1, genType const &amp;t1, genType const &amp;v2, genType const &amp;t2, typename genType::value_type const &amp;s)</td></tr>\n<tr class=\"memdesc:gaa69e143f6374d32f934a8edeaa50bac9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return a point from a hermite curve.  <a href=\"a00358.html#gaa69e143f6374d32f934a8edeaa50bac9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa69e143f6374d32f934a8edeaa50bac9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00154.html\" title=\"GLM_GTX_spline \">glm/gtx/spline.hpp</a>&gt; to use the features of this extension. </p>\n<p>Spline functions </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga8119c04f8210fd0d292757565cd6918d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::catmullRom </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v3</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v4</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::value_type const &amp;&#160;</td>\n          <td class=\"paramname\"><em>s</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return a point from a catmull rom curve. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00358.html\" title=\"Include <glm/gtx/spline.hpp> to use the features of this extension. \">GLM_GTX_spline</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6b867eb52e2fc933d2e0bf26aabc9a70\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::cubic </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v3</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v4</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::value_type const &amp;&#160;</td>\n          <td class=\"paramname\"><em>s</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return a point from a cubic curve. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00358.html\" title=\"Include <glm/gtx/spline.hpp> to use the features of this extension. \">GLM_GTX_spline</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa69e143f6374d32f934a8edeaa50bac9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::hermite </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>t2</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">typename genType::value_type const &amp;&#160;</td>\n          <td class=\"paramname\"><em>s</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return a point from a hermite curve. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00358.html\" title=\"Include <glm/gtx/spline.hpp> to use the features of this extension. \">GLM_GTX_spline</a> extension. </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00359.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_std_based_type</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#typedef-members\">Typedefs</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_std_based_type<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00155.html\" title=\"GLM_GTX_std_based_type \">glm/gtx/std_based_type.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"typedef-members\"></a>\nTypedefs</h2></td></tr>\n<tr class=\"memitem:gaeb877ac8f9a3703961736c1c5072cf68\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gaeb877ac8f9a3703961736c1c5072cf68\">size1</a></td></tr>\n<tr class=\"memdesc:gaeb877ac8f9a3703961736c1c5072cf68\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of one std::size_t component.  <a href=\"a00359.html#gaeb877ac8f9a3703961736c1c5072cf68\">More...</a><br /></td></tr>\n<tr class=\"separator:gaeb877ac8f9a3703961736c1c5072cf68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaf6accc57f5aa50447ba7310ce3f0d6f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 1, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f\">size1_t</a></td></tr>\n<tr class=\"memdesc:gaaf6accc57f5aa50447ba7310ce3f0d6f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of one std::size_t component.  <a href=\"a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaf6accc57f5aa50447ba7310ce3f0d6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1bfe8c4975ff282bce41be2bacd524fe\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe\">size2</a></td></tr>\n<tr class=\"memdesc:ga1bfe8c4975ff282bce41be2bacd524fe\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of two std::size_t components.  <a href=\"a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1bfe8c4975ff282bce41be2bacd524fe\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5976c25657d4e2b5f73f39364c3845d6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 2, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#ga5976c25657d4e2b5f73f39364c3845d6\">size2_t</a></td></tr>\n<tr class=\"memdesc:ga5976c25657d4e2b5f73f39364c3845d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of two std::size_t components.  <a href=\"a00359.html#ga5976c25657d4e2b5f73f39364c3845d6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5976c25657d4e2b5f73f39364c3845d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae1c72956d0359b0db332c6c8774d3b04\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gae1c72956d0359b0db332c6c8774d3b04\">size3</a></td></tr>\n<tr class=\"memdesc:gae1c72956d0359b0db332c6c8774d3b04\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of three std::size_t components.  <a href=\"a00359.html#gae1c72956d0359b0db332c6c8774d3b04\">More...</a><br /></td></tr>\n<tr class=\"separator:gae1c72956d0359b0db332c6c8774d3b04\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2654983c60d641fd3808e65a8dfad8d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 3, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gaf2654983c60d641fd3808e65a8dfad8d\">size3_t</a></td></tr>\n<tr class=\"memdesc:gaf2654983c60d641fd3808e65a8dfad8d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of three std::size_t components.  <a href=\"a00359.html#gaf2654983c60d641fd3808e65a8dfad8d\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2654983c60d641fd3808e65a8dfad8d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3a19dde617beaf8ce3cfc2ac5064e9aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa\">size4</a></td></tr>\n<tr class=\"memdesc:ga3a19dde617beaf8ce3cfc2ac5064e9aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of four std::size_t components.  <a href=\"a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3a19dde617beaf8ce3cfc2ac5064e9aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa423efcea63675a2df26990dbcb58656\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">typedef vec&lt; 4, std::size_t, defaultp &gt;&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00359.html#gaa423efcea63675a2df26990dbcb58656\">size4_t</a></td></tr>\n<tr class=\"memdesc:gaa423efcea63675a2df26990dbcb58656\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Vector type based of four std::size_t components.  <a href=\"a00359.html#gaa423efcea63675a2df26990dbcb58656\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa423efcea63675a2df26990dbcb58656\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00155.html\" title=\"GLM_GTX_std_based_type \">glm/gtx/std_based_type.hpp</a>&gt; to use the features of this extension. </p>\n<p>Adds vector types based on STL value types. </p>\n<h2 class=\"groupheader\">Typedef Documentation</h2>\n<a class=\"anchor\" id=\"gaeb877ac8f9a3703961736c1c5072cf68\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt;1, std::size_t, defaultp&gt; size1</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Vector type based of one std::size_t component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00155_source.html#l00035\">35</a> of file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaf6accc57f5aa50447ba7310ce3f0d6f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt;1, std::size_t, defaultp&gt; size1_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Vector type based of one std::size_t component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00155_source.html#l00051\">51</a> of file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1bfe8c4975ff282bce41be2bacd524fe\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt;2, std::size_t, defaultp&gt; size2</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Vector type based of two std::size_t components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00155_source.html#l00039\">39</a> of file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5976c25657d4e2b5f73f39364c3845d6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt;2, std::size_t, defaultp&gt; size2_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Vector type based of two std::size_t components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00155_source.html#l00055\">55</a> of file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae1c72956d0359b0db332c6c8774d3b04\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt;3, std::size_t, defaultp&gt; size3</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Vector type based of three std::size_t components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00155_source.html#l00043\">43</a> of file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf2654983c60d641fd3808e65a8dfad8d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt;3, std::size_t, defaultp&gt; size3_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Vector type based of three std::size_t components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00155_source.html#l00059\">59</a> of file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3a19dde617beaf8ce3cfc2ac5064e9aa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt;4, std::size_t, defaultp&gt; size4</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Vector type based of four std::size_t components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00155_source.html#l00047\">47</a> of file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa423efcea63675a2df26990dbcb58656\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">typedef vec&lt;4, std::size_t, defaultp&gt; size4_t</td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Vector type based of four std::size_t components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd>GLM_GTX_std_based_type </dd></dl>\n\n<p>Definition at line <a class=\"el\" href=\"a00155_source.html#l00063\">63</a> of file <a class=\"el\" href=\"a00155_source.html\">std_based_type.hpp</a>.</p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00360.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_string_cast</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_string_cast<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00156.html\" title=\"GLM_GTX_string_cast \">glm/gtx/string_cast.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga8f0dced1fd45e67e2d77e80ab93c7af5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga8f0dced1fd45e67e2d77e80ab93c7af5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL std::string&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5\">to_string</a> (genType const &amp;x)</td></tr>\n<tr class=\"memdesc:ga8f0dced1fd45e67e2d77e80ab93c7af5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Create a string from a GLM vector or matrix typed variable.  <a href=\"a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8f0dced1fd45e67e2d77e80ab93c7af5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00156.html\" title=\"GLM_GTX_string_cast \">glm/gtx/string_cast.hpp</a>&gt; to use the features of this extension. </p>\n<p>Setup strings for GLM type values</p>\n<p>This extension is not supported with CUDA </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga8f0dced1fd45e67e2d77e80ab93c7af5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL std::string glm::to_string </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Create a string from a GLM vector or matrix typed variable. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00360.html\" title=\"Include <glm/gtx/string_cast.hpp> to use the features of this extension. \">GLM_GTX_string_cast</a> extension. </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00361.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_texture</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_texture<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00157.html\" title=\"GLM_GTX_texture \">glm/gtx/texture.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaa8c377f4e63486db4fa872d77880da73\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa8c377f4e63486db4fa872d77880da73\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00361.html#gaa8c377f4e63486db4fa872d77880da73\">levels</a> (vec&lt; L, T, Q &gt; const &amp;Extent)</td></tr>\n<tr class=\"memdesc:gaa8c377f4e63486db4fa872d77880da73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Compute the number of mipmaps levels necessary to create a mipmap complete texture.  <a href=\"a00361.html#gaa8c377f4e63486db4fa872d77880da73\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa8c377f4e63486db4fa872d77880da73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00157.html\" title=\"GLM_GTX_texture \">glm/gtx/texture.hpp</a>&gt; to use the features of this extension. </p>\n<p>Wrapping mode of texture coordinates. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaa8c377f4e63486db4fa872d77880da73\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">T glm::levels </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Extent</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Compute the number of mipmaps levels necessary to create a mipmap complete texture. </p>\n<dl class=\"params\"><dt>Parameters</dt><dd>\n  <table class=\"params\">\n    <tr><td class=\"paramname\">Extent</td><td>Extent of the texture base level mipmap </td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or signed integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum </td></tr>\n  </table>\n  </dd>\n</dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00362.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_transform</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_transform<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00158.html\" title=\"GLM_GTX_transform \">glm/gtx/transform.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaf599be4c0e9d99be1f9cddba79b6018b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf599be4c0e9d99be1f9cddba79b6018b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b\">rotate</a> (T angle, vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf599be4c0e9d99be1f9cddba79b6018b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians.  <a href=\"a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf599be4c0e9d99be1f9cddba79b6018b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafbeefee8fec884d566e4ada0049174d7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gafbeefee8fec884d566e4ada0049174d7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00362.html#gafbeefee8fec884d566e4ada0049174d7\">scale</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gafbeefee8fec884d566e4ada0049174d7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components.  <a href=\"a00362.html#gafbeefee8fec884d566e4ada0049174d7\">More...</a><br /></td></tr>\n<tr class=\"separator:gafbeefee8fec884d566e4ada0049174d7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga309a30e652e58c396e2c3d4db3ee7658\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga309a30e652e58c396e2c3d4db3ee7658\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00362.html#ga309a30e652e58c396e2c3d4db3ee7658\">translate</a> (vec&lt; 3, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga309a30e652e58c396e2c3d4db3ee7658\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.  <a href=\"a00362.html#ga309a30e652e58c396e2c3d4db3ee7658\">More...</a><br /></td></tr>\n<tr class=\"separator:ga309a30e652e58c396e2c3d4db3ee7658\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00158.html\" title=\"GLM_GTX_transform \">glm/gtx/transform.hpp</a>&gt; to use the features of this extension. </p>\n<p>Add transformation matrices </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaf599be4c0e9d99be1f9cddba79b6018b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::rotate </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>angle</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00296.html\" title=\"Include <glm/gtc/matrix_transform.hpp> to use the features of this extension. \">GLM_GTC_matrix_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00362.html\" title=\"Include <glm/gtx/transform.hpp> to use the features of this extension. \">GLM_GTX_transform</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafbeefee8fec884d566e4ada0049174d7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::scale </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00296.html\" title=\"Include <glm/gtc/matrix_transform.hpp> to use the features of this extension. \">GLM_GTC_matrix_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00362.html\" title=\"Include <glm/gtx/transform.hpp> to use the features of this extension. \">GLM_GTX_transform</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga309a30e652e58c396e2c3d4db3ee7658\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::translate </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00296.html\" title=\"Include <glm/gtc/matrix_transform.hpp> to use the features of this extension. \">GLM_GTC_matrix_transform</a> </dd>\n<dd>\n<a class=\"el\" href=\"a00362.html\" title=\"Include <glm/gtx/transform.hpp> to use the features of this extension. \">GLM_GTX_transform</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00363.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_transform2</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_transform2<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00159.html\" title=\"GLM_GTX_transform2 \">glm/gtx/transform2.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga5b992a0cdc8298054edb68e228f0d93e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5b992a0cdc8298054edb68e228f0d93e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#ga5b992a0cdc8298054edb68e228f0d93e\">proj2D</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:ga5b992a0cdc8298054edb68e228f0d93e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build planar projection matrix along normal axis.  <a href=\"a00363.html#ga5b992a0cdc8298054edb68e228f0d93e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5b992a0cdc8298054edb68e228f0d93e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa2b7f4f15b98f697caede11bef50509e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa2b7f4f15b98f697caede11bef50509e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gaa2b7f4f15b98f697caede11bef50509e\">proj3D</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;normal)</td></tr>\n<tr class=\"memdesc:gaa2b7f4f15b98f697caede11bef50509e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build planar projection matrix along normal axis.  <a href=\"a00363.html#gaa2b7f4f15b98f697caede11bef50509e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa2b7f4f15b98f697caede11bef50509e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf249498b236e62c983d90d30d63c99c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabf249498b236e62c983d90d30d63c99c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gabf249498b236e62c983d90d30d63c99c\">scaleBias</a> (T scale, T bias)</td></tr>\n<tr class=\"memdesc:gabf249498b236e62c983d90d30d63c99c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a scale bias matrix.  <a href=\"a00363.html#gabf249498b236e62c983d90d30d63c99c\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf249498b236e62c983d90d30d63c99c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae2bdd91a76759fecfbaef97e3020aa8e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae2bdd91a76759fecfbaef97e3020aa8e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e\">scaleBias</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T scale, T bias)</td></tr>\n<tr class=\"memdesc:gae2bdd91a76759fecfbaef97e3020aa8e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Build a scale bias matrix.  <a href=\"a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae2bdd91a76759fecfbaef97e3020aa8e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabf714b8a358181572b32a45555f71948\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabf714b8a358181572b32a45555f71948\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gabf714b8a358181572b32a45555f71948\">shearX2D</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T y)</td></tr>\n<tr class=\"memdesc:gabf714b8a358181572b32a45555f71948\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on X axis.  <a href=\"a00363.html#gabf714b8a358181572b32a45555f71948\">More...</a><br /></td></tr>\n<tr class=\"separator:gabf714b8a358181572b32a45555f71948\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73e867c6cd4d700fe2054437e56106c4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga73e867c6cd4d700fe2054437e56106c4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#ga73e867c6cd4d700fe2054437e56106c4\">shearX3D</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T y, T z)</td></tr>\n<tr class=\"memdesc:ga73e867c6cd4d700fe2054437e56106c4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension.  <a href=\"a00363.html#ga73e867c6cd4d700fe2054437e56106c4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga73e867c6cd4d700fe2054437e56106c4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7998d0763d9181550c77e8af09a182c\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac7998d0763d9181550c77e8af09a182c\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 3, 3, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gac7998d0763d9181550c77e8af09a182c\">shearY2D</a> (mat&lt; 3, 3, T, Q &gt; const &amp;m, T x)</td></tr>\n<tr class=\"memdesc:gac7998d0763d9181550c77e8af09a182c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on Y axis.  <a href=\"a00363.html#gac7998d0763d9181550c77e8af09a182c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7998d0763d9181550c77e8af09a182c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade5bb65ffcb513973db1a1314fb5cfac\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gade5bb65ffcb513973db1a1314fb5cfac\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#gade5bb65ffcb513973db1a1314fb5cfac\">shearY3D</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T x, T z)</td></tr>\n<tr class=\"memdesc:gade5bb65ffcb513973db1a1314fb5cfac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on Y axis.  <a href=\"a00363.html#gade5bb65ffcb513973db1a1314fb5cfac\">More...</a><br /></td></tr>\n<tr class=\"separator:gade5bb65ffcb513973db1a1314fb5cfac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6591e0a3a9d2c9c0b6577bb4dace0255\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6591e0a3a9d2c9c0b6577bb4dace0255\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; 4, 4, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255\">shearZ3D</a> (mat&lt; 4, 4, T, Q &gt; const &amp;m, T x, T y)</td></tr>\n<tr class=\"memdesc:ga6591e0a3a9d2c9c0b6577bb4dace0255\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Transforms a matrix with a shearing on Z axis.  <a href=\"a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6591e0a3a9d2c9c0b6577bb4dace0255\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00159.html\" title=\"GLM_GTX_transform2 \">glm/gtx/transform2.hpp</a>&gt; to use the features of this extension. </p>\n<p>Add extra transformation matrices </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga5b992a0cdc8298054edb68e228f0d93e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::proj2D </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>normal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build planar projection matrix along normal axis. </p>\n<p>From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa2b7f4f15b98f697caede11bef50509e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::proj3D </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>normal</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build planar projection matrix along normal axis. </p>\n<p>From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabf249498b236e62c983d90d30d63c99c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::scaleBias </td>\n          <td>(</td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>scale</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bias</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a scale bias matrix. </p>\n<p>From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae2bdd91a76759fecfbaef97e3020aa8e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::scaleBias </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>scale</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>bias</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Build a scale bias matrix. </p>\n<p>From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabf714b8a358181572b32a45555f71948\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::shearX2D </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Transforms a matrix with a shearing on X axis. </p>\n<p>From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga73e867c6cd4d700fe2054437e56106c4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::shearX3D </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Transforms a matrix with a shearing on X axis From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac7998d0763d9181550c77e8af09a182c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;3, 3, T, Q&gt; glm::shearY2D </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 3, 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Transforms a matrix with a shearing on Y axis. </p>\n<p>From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gade5bb65ffcb513973db1a1314fb5cfac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::shearY3D </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>z</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Transforms a matrix with a shearing on Y axis. </p>\n<p>From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6591e0a3a9d2c9c0b6577bb4dace0255\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;4, 4, T, Q&gt; glm::shearZ3D </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; 4, 4, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Transforms a matrix with a shearing on Z axis. </p>\n<p>From GLM_GTX_transform2 extension. </p>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00364.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_type_aligned</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_type_aligned<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00162.html\" title=\"GLM_GTX_type_aligned \">glm/gtx/type_aligned.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gab5cd5c5fad228b25c782084f1cc30114\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab5cd5c5fad228b25c782084f1cc30114\">GLM_ALIGNED_TYPEDEF</a> (lowp_int8, aligned_lowp_int8, 1)</td></tr>\n<tr class=\"memdesc:gab5cd5c5fad228b25c782084f1cc30114\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gab5cd5c5fad228b25c782084f1cc30114\">More...</a><br /></td></tr>\n<tr class=\"separator:gab5cd5c5fad228b25c782084f1cc30114\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5bb5dd895ef625c1b113f2cf400186b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5bb5dd895ef625c1b113f2cf400186b0\">GLM_ALIGNED_TYPEDEF</a> (lowp_int16, aligned_lowp_int16, 2)</td></tr>\n<tr class=\"memdesc:ga5bb5dd895ef625c1b113f2cf400186b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga5bb5dd895ef625c1b113f2cf400186b0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5bb5dd895ef625c1b113f2cf400186b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac6efa54cf7c6c86f7158922abdb1a430\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac6efa54cf7c6c86f7158922abdb1a430\">GLM_ALIGNED_TYPEDEF</a> (lowp_int32, aligned_lowp_int32, 4)</td></tr>\n<tr class=\"memdesc:gac6efa54cf7c6c86f7158922abdb1a430\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gac6efa54cf7c6c86f7158922abdb1a430\">More...</a><br /></td></tr>\n<tr class=\"separator:gac6efa54cf7c6c86f7158922abdb1a430\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6612eb77c8607048e7552279a11eeb5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6612eb77c8607048e7552279a11eeb5f\">GLM_ALIGNED_TYPEDEF</a> (lowp_int64, aligned_lowp_int64, 8)</td></tr>\n<tr class=\"memdesc:ga6612eb77c8607048e7552279a11eeb5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga6612eb77c8607048e7552279a11eeb5f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6612eb77c8607048e7552279a11eeb5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ddc1848ff2223026db8968ce0c97497\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7ddc1848ff2223026db8968ce0c97497\">GLM_ALIGNED_TYPEDEF</a> (lowp_int8_t, aligned_lowp_int8_t, 1)</td></tr>\n<tr class=\"memdesc:ga7ddc1848ff2223026db8968ce0c97497\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga7ddc1848ff2223026db8968ce0c97497\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ddc1848ff2223026db8968ce0c97497\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga22240dd9458b0f8c11fbcc4f48714f68\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga22240dd9458b0f8c11fbcc4f48714f68\">GLM_ALIGNED_TYPEDEF</a> (lowp_int16_t, aligned_lowp_int16_t, 2)</td></tr>\n<tr class=\"memdesc:ga22240dd9458b0f8c11fbcc4f48714f68\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga22240dd9458b0f8c11fbcc4f48714f68\">More...</a><br /></td></tr>\n<tr class=\"separator:ga22240dd9458b0f8c11fbcc4f48714f68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8130ea381d76a2cc34a93ccbb6cf487d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8130ea381d76a2cc34a93ccbb6cf487d\">GLM_ALIGNED_TYPEDEF</a> (lowp_int32_t, aligned_lowp_int32_t, 4)</td></tr>\n<tr class=\"memdesc:ga8130ea381d76a2cc34a93ccbb6cf487d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga8130ea381d76a2cc34a93ccbb6cf487d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8130ea381d76a2cc34a93ccbb6cf487d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7ccb60f3215d293fd62b33b31ed0e7be\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7ccb60f3215d293fd62b33b31ed0e7be\">GLM_ALIGNED_TYPEDEF</a> (lowp_int64_t, aligned_lowp_int64_t, 8)</td></tr>\n<tr class=\"memdesc:ga7ccb60f3215d293fd62b33b31ed0e7be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga7ccb60f3215d293fd62b33b31ed0e7be\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7ccb60f3215d293fd62b33b31ed0e7be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac20d508d2ef5cc95ad3daf083c57ec2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac20d508d2ef5cc95ad3daf083c57ec2a\">GLM_ALIGNED_TYPEDEF</a> (lowp_i8, aligned_lowp_i8, 1)</td></tr>\n<tr class=\"memdesc:gac20d508d2ef5cc95ad3daf083c57ec2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gac20d508d2ef5cc95ad3daf083c57ec2a\">More...</a><br /></td></tr>\n<tr class=\"separator:gac20d508d2ef5cc95ad3daf083c57ec2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50257b48069a31d0c8d9c1f644d267de\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga50257b48069a31d0c8d9c1f644d267de\">GLM_ALIGNED_TYPEDEF</a> (lowp_i16, aligned_lowp_i16, 2)</td></tr>\n<tr class=\"memdesc:ga50257b48069a31d0c8d9c1f644d267de\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga50257b48069a31d0c8d9c1f644d267de\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50257b48069a31d0c8d9c1f644d267de\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa07e98e67b7a3435c0746018c7a2a839\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa07e98e67b7a3435c0746018c7a2a839\">GLM_ALIGNED_TYPEDEF</a> (lowp_i32, aligned_lowp_i32, 4)</td></tr>\n<tr class=\"memdesc:gaa07e98e67b7a3435c0746018c7a2a839\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gaa07e98e67b7a3435c0746018c7a2a839\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa07e98e67b7a3435c0746018c7a2a839\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga62601fc6f8ca298b77285bedf03faffd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga62601fc6f8ca298b77285bedf03faffd\">GLM_ALIGNED_TYPEDEF</a> (lowp_i64, aligned_lowp_i64, 8)</td></tr>\n<tr class=\"memdesc:ga62601fc6f8ca298b77285bedf03faffd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga62601fc6f8ca298b77285bedf03faffd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga62601fc6f8ca298b77285bedf03faffd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac8cff825951aeb54dd846037113c72db\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac8cff825951aeb54dd846037113c72db\">GLM_ALIGNED_TYPEDEF</a> (mediump_int8, aligned_mediump_int8, 1)</td></tr>\n<tr class=\"memdesc:gac8cff825951aeb54dd846037113c72db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gac8cff825951aeb54dd846037113c72db\">More...</a><br /></td></tr>\n<tr class=\"separator:gac8cff825951aeb54dd846037113c72db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78f443d88f438575a62b5df497cdf66b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga78f443d88f438575a62b5df497cdf66b\">GLM_ALIGNED_TYPEDEF</a> (mediump_int16, aligned_mediump_int16, 2)</td></tr>\n<tr class=\"memdesc:ga78f443d88f438575a62b5df497cdf66b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga78f443d88f438575a62b5df497cdf66b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78f443d88f438575a62b5df497cdf66b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0680cd3b5d4e8006985fb41a4f9b57af\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0680cd3b5d4e8006985fb41a4f9b57af\">GLM_ALIGNED_TYPEDEF</a> (mediump_int32, aligned_mediump_int32, 4)</td></tr>\n<tr class=\"memdesc:ga0680cd3b5d4e8006985fb41a4f9b57af\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga0680cd3b5d4e8006985fb41a4f9b57af\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0680cd3b5d4e8006985fb41a4f9b57af\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad9e5babb1dd3e3531b42c37bf25dd951\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad9e5babb1dd3e3531b42c37bf25dd951\">GLM_ALIGNED_TYPEDEF</a> (mediump_int64, aligned_mediump_int64, 8)</td></tr>\n<tr class=\"memdesc:gad9e5babb1dd3e3531b42c37bf25dd951\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#gad9e5babb1dd3e3531b42c37bf25dd951\">More...</a><br /></td></tr>\n<tr class=\"separator:gad9e5babb1dd3e3531b42c37bf25dd951\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga353fd9fa8a9ad952fcabd0d53ad9a6dd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga353fd9fa8a9ad952fcabd0d53ad9a6dd\">GLM_ALIGNED_TYPEDEF</a> (mediump_int8_t, aligned_mediump_int8_t, 1)</td></tr>\n<tr class=\"memdesc:ga353fd9fa8a9ad952fcabd0d53ad9a6dd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga353fd9fa8a9ad952fcabd0d53ad9a6dd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga353fd9fa8a9ad952fcabd0d53ad9a6dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2196442c0e5c5e8c77842de388c42521\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2196442c0e5c5e8c77842de388c42521\">GLM_ALIGNED_TYPEDEF</a> (mediump_int16_t, aligned_mediump_int16_t, 2)</td></tr>\n<tr class=\"memdesc:ga2196442c0e5c5e8c77842de388c42521\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga2196442c0e5c5e8c77842de388c42521\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2196442c0e5c5e8c77842de388c42521\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1284488189daf897cf095c5eefad9744\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1284488189daf897cf095c5eefad9744\">GLM_ALIGNED_TYPEDEF</a> (mediump_int32_t, aligned_mediump_int32_t, 4)</td></tr>\n<tr class=\"memdesc:ga1284488189daf897cf095c5eefad9744\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga1284488189daf897cf095c5eefad9744\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1284488189daf897cf095c5eefad9744\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga73fdc86a539808af58808b7c60a1c4d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga73fdc86a539808af58808b7c60a1c4d8\">GLM_ALIGNED_TYPEDEF</a> (mediump_int64_t, aligned_mediump_int64_t, 8)</td></tr>\n<tr class=\"memdesc:ga73fdc86a539808af58808b7c60a1c4d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga73fdc86a539808af58808b7c60a1c4d8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga73fdc86a539808af58808b7c60a1c4d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafafeea923e1983262c972e2b83922d3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gafafeea923e1983262c972e2b83922d3b\">GLM_ALIGNED_TYPEDEF</a> (mediump_i8, aligned_mediump_i8, 1)</td></tr>\n<tr class=\"memdesc:gafafeea923e1983262c972e2b83922d3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gafafeea923e1983262c972e2b83922d3b\">More...</a><br /></td></tr>\n<tr class=\"separator:gafafeea923e1983262c972e2b83922d3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\">GLM_ALIGNED_TYPEDEF</a> (mediump_i16, aligned_mediump_i16, 2)</td></tr>\n<tr class=\"memdesc:ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga63b882e29170d428463d99c3d630acc6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga63b882e29170d428463d99c3d630acc6\">GLM_ALIGNED_TYPEDEF</a> (mediump_i32, aligned_mediump_i32, 4)</td></tr>\n<tr class=\"memdesc:ga63b882e29170d428463d99c3d630acc6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga63b882e29170d428463d99c3d630acc6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga63b882e29170d428463d99c3d630acc6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b20507bb048c1edea2d441cc953e6f0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8b20507bb048c1edea2d441cc953e6f0\">GLM_ALIGNED_TYPEDEF</a> (mediump_i64, aligned_mediump_i64, 8)</td></tr>\n<tr class=\"memdesc:ga8b20507bb048c1edea2d441cc953e6f0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga8b20507bb048c1edea2d441cc953e6f0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b20507bb048c1edea2d441cc953e6f0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga56c5ca60813027b603c7b61425a0479d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga56c5ca60813027b603c7b61425a0479d\">GLM_ALIGNED_TYPEDEF</a> (highp_int8, aligned_highp_int8, 1)</td></tr>\n<tr class=\"memdesc:ga56c5ca60813027b603c7b61425a0479d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga56c5ca60813027b603c7b61425a0479d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga56c5ca60813027b603c7b61425a0479d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a751b3aff24c0259f4a7357c2969089\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7a751b3aff24c0259f4a7357c2969089\">GLM_ALIGNED_TYPEDEF</a> (highp_int16, aligned_highp_int16, 2)</td></tr>\n<tr class=\"memdesc:ga7a751b3aff24c0259f4a7357c2969089\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga7a751b3aff24c0259f4a7357c2969089\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a751b3aff24c0259f4a7357c2969089\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga70cd2144351c556469ee6119e59971fc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga70cd2144351c556469ee6119e59971fc\">GLM_ALIGNED_TYPEDEF</a> (highp_int32, aligned_highp_int32, 4)</td></tr>\n<tr class=\"memdesc:ga70cd2144351c556469ee6119e59971fc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga70cd2144351c556469ee6119e59971fc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga70cd2144351c556469ee6119e59971fc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga46bbf08dc004d8c433041e0b5018a5d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga46bbf08dc004d8c433041e0b5018a5d3\">GLM_ALIGNED_TYPEDEF</a> (highp_int64, aligned_highp_int64, 8)</td></tr>\n<tr class=\"memdesc:ga46bbf08dc004d8c433041e0b5018a5d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga46bbf08dc004d8c433041e0b5018a5d3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga46bbf08dc004d8c433041e0b5018a5d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3e10c77a20d1abad2de1c561c7a5c18\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab3e10c77a20d1abad2de1c561c7a5c18\">GLM_ALIGNED_TYPEDEF</a> (highp_int8_t, aligned_highp_int8_t, 1)</td></tr>\n<tr class=\"memdesc:gab3e10c77a20d1abad2de1c561c7a5c18\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gab3e10c77a20d1abad2de1c561c7a5c18\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3e10c77a20d1abad2de1c561c7a5c18\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga968f30319ebeaca9ebcd3a25a8e139fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga968f30319ebeaca9ebcd3a25a8e139fb\">GLM_ALIGNED_TYPEDEF</a> (highp_int16_t, aligned_highp_int16_t, 2)</td></tr>\n<tr class=\"memdesc:ga968f30319ebeaca9ebcd3a25a8e139fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga968f30319ebeaca9ebcd3a25a8e139fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga968f30319ebeaca9ebcd3a25a8e139fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaae773c28e6390c6aa76f5b678b7098a3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaae773c28e6390c6aa76f5b678b7098a3\">GLM_ALIGNED_TYPEDEF</a> (highp_int32_t, aligned_highp_int32_t, 4)</td></tr>\n<tr class=\"memdesc:gaae773c28e6390c6aa76f5b678b7098a3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gaae773c28e6390c6aa76f5b678b7098a3\">More...</a><br /></td></tr>\n<tr class=\"separator:gaae773c28e6390c6aa76f5b678b7098a3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga790cfff1ca39d0ed696ffed980809311\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga790cfff1ca39d0ed696ffed980809311\">GLM_ALIGNED_TYPEDEF</a> (highp_int64_t, aligned_highp_int64_t, 8)</td></tr>\n<tr class=\"memdesc:ga790cfff1ca39d0ed696ffed980809311\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga790cfff1ca39d0ed696ffed980809311\">More...</a><br /></td></tr>\n<tr class=\"separator:ga790cfff1ca39d0ed696ffed980809311\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8265b91eb23c120a9b0c3e381bc37b96\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8265b91eb23c120a9b0c3e381bc37b96\">GLM_ALIGNED_TYPEDEF</a> (highp_i8, aligned_highp_i8, 1)</td></tr>\n<tr class=\"memdesc:ga8265b91eb23c120a9b0c3e381bc37b96\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga8265b91eb23c120a9b0c3e381bc37b96\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8265b91eb23c120a9b0c3e381bc37b96\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae6d384de17588d8edb894fbe06e0d410\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gae6d384de17588d8edb894fbe06e0d410\">GLM_ALIGNED_TYPEDEF</a> (highp_i16, aligned_highp_i16, 2)</td></tr>\n<tr class=\"memdesc:gae6d384de17588d8edb894fbe06e0d410\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#gae6d384de17588d8edb894fbe06e0d410\">More...</a><br /></td></tr>\n<tr class=\"separator:gae6d384de17588d8edb894fbe06e0d410\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9c8172b745ee03fc5b2b91c350c2922f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9c8172b745ee03fc5b2b91c350c2922f\">GLM_ALIGNED_TYPEDEF</a> (highp_i32, aligned_highp_i32, 4)</td></tr>\n<tr class=\"memdesc:ga9c8172b745ee03fc5b2b91c350c2922f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga9c8172b745ee03fc5b2b91c350c2922f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9c8172b745ee03fc5b2b91c350c2922f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga77e0dff12aa4020ddc3f8cabbea7b2e6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga77e0dff12aa4020ddc3f8cabbea7b2e6\">GLM_ALIGNED_TYPEDEF</a> (highp_i64, aligned_highp_i64, 8)</td></tr>\n<tr class=\"memdesc:ga77e0dff12aa4020ddc3f8cabbea7b2e6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga77e0dff12aa4020ddc3f8cabbea7b2e6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga77e0dff12aa4020ddc3f8cabbea7b2e6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabd82b9faa9d4d618dbbe0fc8a1efee63\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gabd82b9faa9d4d618dbbe0fc8a1efee63\">GLM_ALIGNED_TYPEDEF</a> (int8, aligned_int8, 1)</td></tr>\n<tr class=\"memdesc:gabd82b9faa9d4d618dbbe0fc8a1efee63\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#gabd82b9faa9d4d618dbbe0fc8a1efee63\">More...</a><br /></td></tr>\n<tr class=\"separator:gabd82b9faa9d4d618dbbe0fc8a1efee63\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga285649744560be21000cfd81bbb5d507\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga285649744560be21000cfd81bbb5d507\">GLM_ALIGNED_TYPEDEF</a> (int16, aligned_int16, 2)</td></tr>\n<tr class=\"memdesc:ga285649744560be21000cfd81bbb5d507\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga285649744560be21000cfd81bbb5d507\">More...</a><br /></td></tr>\n<tr class=\"separator:ga285649744560be21000cfd81bbb5d507\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07732da630b2deda428ce95c0ecaf3ff\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga07732da630b2deda428ce95c0ecaf3ff\">GLM_ALIGNED_TYPEDEF</a> (int32, aligned_int32, 4)</td></tr>\n<tr class=\"memdesc:ga07732da630b2deda428ce95c0ecaf3ff\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga07732da630b2deda428ce95c0ecaf3ff\">More...</a><br /></td></tr>\n<tr class=\"separator:ga07732da630b2deda428ce95c0ecaf3ff\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a8da2a8c51f69c07a2e7f473aa420f4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1a8da2a8c51f69c07a2e7f473aa420f4\">GLM_ALIGNED_TYPEDEF</a> (int64, aligned_int64, 8)</td></tr>\n<tr class=\"memdesc:ga1a8da2a8c51f69c07a2e7f473aa420f4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga1a8da2a8c51f69c07a2e7f473aa420f4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a8da2a8c51f69c07a2e7f473aa420f4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga848aedf13e2d9738acf0bb482c590174\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga848aedf13e2d9738acf0bb482c590174\">GLM_ALIGNED_TYPEDEF</a> (int8_t, aligned_int8_t, 1)</td></tr>\n<tr class=\"memdesc:ga848aedf13e2d9738acf0bb482c590174\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga848aedf13e2d9738acf0bb482c590174\">More...</a><br /></td></tr>\n<tr class=\"separator:ga848aedf13e2d9738acf0bb482c590174\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafd2803d39049dd45a37a63931e25d943\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gafd2803d39049dd45a37a63931e25d943\">GLM_ALIGNED_TYPEDEF</a> (int16_t, aligned_int16_t, 2)</td></tr>\n<tr class=\"memdesc:gafd2803d39049dd45a37a63931e25d943\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#gafd2803d39049dd45a37a63931e25d943\">More...</a><br /></td></tr>\n<tr class=\"separator:gafd2803d39049dd45a37a63931e25d943\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae553b33349d6da832cf0724f1e024094\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gae553b33349d6da832cf0724f1e024094\">GLM_ALIGNED_TYPEDEF</a> (int32_t, aligned_int32_t, 4)</td></tr>\n<tr class=\"memdesc:gae553b33349d6da832cf0724f1e024094\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gae553b33349d6da832cf0724f1e024094\">More...</a><br /></td></tr>\n<tr class=\"separator:gae553b33349d6da832cf0724f1e024094\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16d223a2b3409e812e1d3bd87f0e9e5c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga16d223a2b3409e812e1d3bd87f0e9e5c\">GLM_ALIGNED_TYPEDEF</a> (int64_t, aligned_int64_t, 8)</td></tr>\n<tr class=\"memdesc:ga16d223a2b3409e812e1d3bd87f0e9e5c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga16d223a2b3409e812e1d3bd87f0e9e5c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16d223a2b3409e812e1d3bd87f0e9e5c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2de065d2ddfdb366bcd0febca79ae2ad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2de065d2ddfdb366bcd0febca79ae2ad\">GLM_ALIGNED_TYPEDEF</a> (i8, aligned_i8, 1)</td></tr>\n<tr class=\"memdesc:ga2de065d2ddfdb366bcd0febca79ae2ad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga2de065d2ddfdb366bcd0febca79ae2ad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2de065d2ddfdb366bcd0febca79ae2ad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabd786bdc20a11c8cb05c92c8212e28d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gabd786bdc20a11c8cb05c92c8212e28d3\">GLM_ALIGNED_TYPEDEF</a> (i16, aligned_i16, 2)</td></tr>\n<tr class=\"memdesc:gabd786bdc20a11c8cb05c92c8212e28d3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#gabd786bdc20a11c8cb05c92c8212e28d3\">More...</a><br /></td></tr>\n<tr class=\"separator:gabd786bdc20a11c8cb05c92c8212e28d3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad4aefe56691cdb640c72f0d46d3fb532\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad4aefe56691cdb640c72f0d46d3fb532\">GLM_ALIGNED_TYPEDEF</a> (i32, aligned_i32, 4)</td></tr>\n<tr class=\"memdesc:gad4aefe56691cdb640c72f0d46d3fb532\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gad4aefe56691cdb640c72f0d46d3fb532\">More...</a><br /></td></tr>\n<tr class=\"separator:gad4aefe56691cdb640c72f0d46d3fb532\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8fe9745f7de24a8394518152ff9fccdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8fe9745f7de24a8394518152ff9fccdc\">GLM_ALIGNED_TYPEDEF</a> (i64, aligned_i64, 8)</td></tr>\n<tr class=\"memdesc:ga8fe9745f7de24a8394518152ff9fccdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga8fe9745f7de24a8394518152ff9fccdc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8fe9745f7de24a8394518152ff9fccdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaad735483450099f7f882d4e3a3569bd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaaad735483450099f7f882d4e3a3569bd\">GLM_ALIGNED_TYPEDEF</a> (ivec1, aligned_ivec1, 4)</td></tr>\n<tr class=\"memdesc:gaaad735483450099f7f882d4e3a3569bd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#gaaad735483450099f7f882d4e3a3569bd\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaad735483450099f7f882d4e3a3569bd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7b6f823802edbd6edbaf70ea25bf068\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac7b6f823802edbd6edbaf70ea25bf068\">GLM_ALIGNED_TYPEDEF</a> (ivec2, aligned_ivec2, 8)</td></tr>\n<tr class=\"memdesc:gac7b6f823802edbd6edbaf70ea25bf068\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#gac7b6f823802edbd6edbaf70ea25bf068\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7b6f823802edbd6edbaf70ea25bf068\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e235bcd2b8029613f25b8d40a2d3ef7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga3e235bcd2b8029613f25b8d40a2d3ef7\">GLM_ALIGNED_TYPEDEF</a> (ivec3, aligned_ivec3, 16)</td></tr>\n<tr class=\"memdesc:ga3e235bcd2b8029613f25b8d40a2d3ef7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#ga3e235bcd2b8029613f25b8d40a2d3ef7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e235bcd2b8029613f25b8d40a2d3ef7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga50d8a9523968c77f8325b4c9bfbff41e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga50d8a9523968c77f8325b4c9bfbff41e\">GLM_ALIGNED_TYPEDEF</a> (ivec4, aligned_ivec4, 16)</td></tr>\n<tr class=\"memdesc:ga50d8a9523968c77f8325b4c9bfbff41e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#ga50d8a9523968c77f8325b4c9bfbff41e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga50d8a9523968c77f8325b4c9bfbff41e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ec20fdfb729c702032da9378c79679f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9ec20fdfb729c702032da9378c79679f\">GLM_ALIGNED_TYPEDEF</a> (i8vec1, aligned_i8vec1, 1)</td></tr>\n<tr class=\"memdesc:ga9ec20fdfb729c702032da9378c79679f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga9ec20fdfb729c702032da9378c79679f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9ec20fdfb729c702032da9378c79679f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga25b3fe1d9e8d0a5e86c1949c1acd8131\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga25b3fe1d9e8d0a5e86c1949c1acd8131\">GLM_ALIGNED_TYPEDEF</a> (i8vec2, aligned_i8vec2, 2)</td></tr>\n<tr class=\"memdesc:ga25b3fe1d9e8d0a5e86c1949c1acd8131\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#ga25b3fe1d9e8d0a5e86c1949c1acd8131\">More...</a><br /></td></tr>\n<tr class=\"separator:ga25b3fe1d9e8d0a5e86c1949c1acd8131\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2958f907719d94d8109b562540c910e2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2958f907719d94d8109b562540c910e2\">GLM_ALIGNED_TYPEDEF</a> (i8vec3, aligned_i8vec3, 4)</td></tr>\n<tr class=\"memdesc:ga2958f907719d94d8109b562540c910e2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#ga2958f907719d94d8109b562540c910e2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2958f907719d94d8109b562540c910e2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fe6fc032a978f1c845fac9aa0668714\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1fe6fc032a978f1c845fac9aa0668714\">GLM_ALIGNED_TYPEDEF</a> (i8vec4, aligned_i8vec4, 4)</td></tr>\n<tr class=\"memdesc:ga1fe6fc032a978f1c845fac9aa0668714\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#ga1fe6fc032a978f1c845fac9aa0668714\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1fe6fc032a978f1c845fac9aa0668714\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4161e7a496dc96972254143fe873e55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa4161e7a496dc96972254143fe873e55\">GLM_ALIGNED_TYPEDEF</a> (i16vec1, aligned_i16vec1, 2)</td></tr>\n<tr class=\"memdesc:gaa4161e7a496dc96972254143fe873e55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned scalar type.  <a href=\"a00364.html#gaa4161e7a496dc96972254143fe873e55\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4161e7a496dc96972254143fe873e55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9d7cb211ccda69b1c22ddeeb0f3e7aba\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9d7cb211ccda69b1c22ddeeb0f3e7aba\">GLM_ALIGNED_TYPEDEF</a> (i16vec2, aligned_i16vec2, 4)</td></tr>\n<tr class=\"memdesc:ga9d7cb211ccda69b1c22ddeeb0f3e7aba\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#ga9d7cb211ccda69b1c22ddeeb0f3e7aba\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9d7cb211ccda69b1c22ddeeb0f3e7aba\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaee91dd2ab34423bcc11072ef6bd0f02\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaaee91dd2ab34423bcc11072ef6bd0f02\">GLM_ALIGNED_TYPEDEF</a> (i16vec3, aligned_i16vec3, 8)</td></tr>\n<tr class=\"memdesc:gaaee91dd2ab34423bcc11072ef6bd0f02\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#gaaee91dd2ab34423bcc11072ef6bd0f02\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaee91dd2ab34423bcc11072ef6bd0f02\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga49f047ccaa8b31fad9f26c67bf9b3510\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga49f047ccaa8b31fad9f26c67bf9b3510\">GLM_ALIGNED_TYPEDEF</a> (i16vec4, aligned_i16vec4, 8)</td></tr>\n<tr class=\"memdesc:ga49f047ccaa8b31fad9f26c67bf9b3510\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#ga49f047ccaa8b31fad9f26c67bf9b3510\">More...</a><br /></td></tr>\n<tr class=\"separator:ga49f047ccaa8b31fad9f26c67bf9b3510\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga904e9c2436bb099397c0823506a0771f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga904e9c2436bb099397c0823506a0771f\">GLM_ALIGNED_TYPEDEF</a> (i32vec1, aligned_i32vec1, 4)</td></tr>\n<tr class=\"memdesc:ga904e9c2436bb099397c0823506a0771f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga904e9c2436bb099397c0823506a0771f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga904e9c2436bb099397c0823506a0771f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf90651cf2f5e7ee2b11cfdc5a6749534\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf90651cf2f5e7ee2b11cfdc5a6749534\">GLM_ALIGNED_TYPEDEF</a> (i32vec2, aligned_i32vec2, 8)</td></tr>\n<tr class=\"memdesc:gaf90651cf2f5e7ee2b11cfdc5a6749534\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#gaf90651cf2f5e7ee2b11cfdc5a6749534\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf90651cf2f5e7ee2b11cfdc5a6749534\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7354a4ead8cb17868aec36b9c30d6010\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7354a4ead8cb17868aec36b9c30d6010\">GLM_ALIGNED_TYPEDEF</a> (i32vec3, aligned_i32vec3, 16)</td></tr>\n<tr class=\"memdesc:ga7354a4ead8cb17868aec36b9c30d6010\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#ga7354a4ead8cb17868aec36b9c30d6010\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7354a4ead8cb17868aec36b9c30d6010\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad2ecbdea18732163e2636e27b37981ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad2ecbdea18732163e2636e27b37981ee\">GLM_ALIGNED_TYPEDEF</a> (i32vec4, aligned_i32vec4, 16)</td></tr>\n<tr class=\"memdesc:gad2ecbdea18732163e2636e27b37981ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#gad2ecbdea18732163e2636e27b37981ee\">More...</a><br /></td></tr>\n<tr class=\"separator:gad2ecbdea18732163e2636e27b37981ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga965b1c9aa1800e93d4abc2eb2b5afcbf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga965b1c9aa1800e93d4abc2eb2b5afcbf\">GLM_ALIGNED_TYPEDEF</a> (i64vec1, aligned_i64vec1, 8)</td></tr>\n<tr class=\"memdesc:ga965b1c9aa1800e93d4abc2eb2b5afcbf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned scalar type.  <a href=\"a00364.html#ga965b1c9aa1800e93d4abc2eb2b5afcbf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga965b1c9aa1800e93d4abc2eb2b5afcbf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f9e9c2ea2768675dff9bae5cde2d829\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1f9e9c2ea2768675dff9bae5cde2d829\">GLM_ALIGNED_TYPEDEF</a> (i64vec2, aligned_i64vec2, 16)</td></tr>\n<tr class=\"memdesc:ga1f9e9c2ea2768675dff9bae5cde2d829\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned vector of 2 components type.  <a href=\"a00364.html#ga1f9e9c2ea2768675dff9bae5cde2d829\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f9e9c2ea2768675dff9bae5cde2d829\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad77c317b7d942322cd5be4c8127b3187\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad77c317b7d942322cd5be4c8127b3187\">GLM_ALIGNED_TYPEDEF</a> (i64vec3, aligned_i64vec3, 32)</td></tr>\n<tr class=\"memdesc:gad77c317b7d942322cd5be4c8127b3187\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned vector of 3 components type.  <a href=\"a00364.html#gad77c317b7d942322cd5be4c8127b3187\">More...</a><br /></td></tr>\n<tr class=\"separator:gad77c317b7d942322cd5be4c8127b3187\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga716f8ea809bdb11b5b542d8b71aeb04f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga716f8ea809bdb11b5b542d8b71aeb04f\">GLM_ALIGNED_TYPEDEF</a> (i64vec4, aligned_i64vec4, 32)</td></tr>\n<tr class=\"memdesc:ga716f8ea809bdb11b5b542d8b71aeb04f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit signed integer aligned vector of 4 components type.  <a href=\"a00364.html#ga716f8ea809bdb11b5b542d8b71aeb04f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga716f8ea809bdb11b5b542d8b71aeb04f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad46f8e9082d5878b1bc04f9c1471cdaa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad46f8e9082d5878b1bc04f9c1471cdaa\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint8, aligned_lowp_uint8, 1)</td></tr>\n<tr class=\"memdesc:gad46f8e9082d5878b1bc04f9c1471cdaa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gad46f8e9082d5878b1bc04f9c1471cdaa\">More...</a><br /></td></tr>\n<tr class=\"separator:gad46f8e9082d5878b1bc04f9c1471cdaa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1246094581af624aca6c7499aaabf801\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1246094581af624aca6c7499aaabf801\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint16, aligned_lowp_uint16, 2)</td></tr>\n<tr class=\"memdesc:ga1246094581af624aca6c7499aaabf801\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga1246094581af624aca6c7499aaabf801\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1246094581af624aca6c7499aaabf801\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7a5009a1d0196bbf21dd7518f61f0249\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7a5009a1d0196bbf21dd7518f61f0249\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint32, aligned_lowp_uint32, 4)</td></tr>\n<tr class=\"memdesc:ga7a5009a1d0196bbf21dd7518f61f0249\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga7a5009a1d0196bbf21dd7518f61f0249\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7a5009a1d0196bbf21dd7518f61f0249\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga45213fd18b3bb1df391671afefe4d1e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga45213fd18b3bb1df391671afefe4d1e7\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint64, aligned_lowp_uint64, 8)</td></tr>\n<tr class=\"memdesc:ga45213fd18b3bb1df391671afefe4d1e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga45213fd18b3bb1df391671afefe4d1e7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga45213fd18b3bb1df391671afefe4d1e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0ba26b4e3fd9ecbc25358efd68d8a4ca\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0ba26b4e3fd9ecbc25358efd68d8a4ca\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint8_t, aligned_lowp_uint8_t, 1)</td></tr>\n<tr class=\"memdesc:ga0ba26b4e3fd9ecbc25358efd68d8a4ca\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga0ba26b4e3fd9ecbc25358efd68d8a4ca\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0ba26b4e3fd9ecbc25358efd68d8a4ca\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf2b58f5fb6d4ec8ce7b76221d3af43e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf2b58f5fb6d4ec8ce7b76221d3af43e1\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint16_t, aligned_lowp_uint16_t, 2)</td></tr>\n<tr class=\"memdesc:gaf2b58f5fb6d4ec8ce7b76221d3af43e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaf2b58f5fb6d4ec8ce7b76221d3af43e1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf2b58f5fb6d4ec8ce7b76221d3af43e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadc246401847dcba155f0699425e49dcd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gadc246401847dcba155f0699425e49dcd\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint32_t, aligned_lowp_uint32_t, 4)</td></tr>\n<tr class=\"memdesc:gadc246401847dcba155f0699425e49dcd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gadc246401847dcba155f0699425e49dcd\">More...</a><br /></td></tr>\n<tr class=\"separator:gadc246401847dcba155f0699425e49dcd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaace64bddf51a9def01498da9a94fb01c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaace64bddf51a9def01498da9a94fb01c\">GLM_ALIGNED_TYPEDEF</a> (lowp_uint64_t, aligned_lowp_uint64_t, 8)</td></tr>\n<tr class=\"memdesc:gaace64bddf51a9def01498da9a94fb01c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaace64bddf51a9def01498da9a94fb01c\">More...</a><br /></td></tr>\n<tr class=\"separator:gaace64bddf51a9def01498da9a94fb01c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad7bb97c29d664bd86ffb1bed4abc5534\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad7bb97c29d664bd86ffb1bed4abc5534\">GLM_ALIGNED_TYPEDEF</a> (lowp_u8, aligned_lowp_u8, 1)</td></tr>\n<tr class=\"memdesc:gad7bb97c29d664bd86ffb1bed4abc5534\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gad7bb97c29d664bd86ffb1bed4abc5534\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7bb97c29d664bd86ffb1bed4abc5534\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga404bba7785130e0b1384d695a9450b28\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga404bba7785130e0b1384d695a9450b28\">GLM_ALIGNED_TYPEDEF</a> (lowp_u16, aligned_lowp_u16, 2)</td></tr>\n<tr class=\"memdesc:ga404bba7785130e0b1384d695a9450b28\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga404bba7785130e0b1384d695a9450b28\">More...</a><br /></td></tr>\n<tr class=\"separator:ga404bba7785130e0b1384d695a9450b28\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga31ba41fd896257536958ec6080203d2a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga31ba41fd896257536958ec6080203d2a\">GLM_ALIGNED_TYPEDEF</a> (lowp_u32, aligned_lowp_u32, 4)</td></tr>\n<tr class=\"memdesc:ga31ba41fd896257536958ec6080203d2a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga31ba41fd896257536958ec6080203d2a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga31ba41fd896257536958ec6080203d2a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacca5f13627f57b3505676e40a6e43e5e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gacca5f13627f57b3505676e40a6e43e5e\">GLM_ALIGNED_TYPEDEF</a> (lowp_u64, aligned_lowp_u64, 8)</td></tr>\n<tr class=\"memdesc:gacca5f13627f57b3505676e40a6e43e5e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Low qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gacca5f13627f57b3505676e40a6e43e5e\">More...</a><br /></td></tr>\n<tr class=\"separator:gacca5f13627f57b3505676e40a6e43e5e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5faf1d3e70bf33174dd7f3d01d5b883b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5faf1d3e70bf33174dd7f3d01d5b883b\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint8, aligned_mediump_uint8, 1)</td></tr>\n<tr class=\"memdesc:ga5faf1d3e70bf33174dd7f3d01d5b883b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga5faf1d3e70bf33174dd7f3d01d5b883b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5faf1d3e70bf33174dd7f3d01d5b883b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga727e2bf2c433bb3b0182605860a48363\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga727e2bf2c433bb3b0182605860a48363\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint16, aligned_mediump_uint16, 2)</td></tr>\n<tr class=\"memdesc:ga727e2bf2c433bb3b0182605860a48363\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga727e2bf2c433bb3b0182605860a48363\">More...</a><br /></td></tr>\n<tr class=\"separator:ga727e2bf2c433bb3b0182605860a48363\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga12566ca66d5962dadb4a5eb4c74e891e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga12566ca66d5962dadb4a5eb4c74e891e\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint32, aligned_mediump_uint32, 4)</td></tr>\n<tr class=\"memdesc:ga12566ca66d5962dadb4a5eb4c74e891e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga12566ca66d5962dadb4a5eb4c74e891e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga12566ca66d5962dadb4a5eb4c74e891e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7b66a97a8acaa35c5a377b947318c6bc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7b66a97a8acaa35c5a377b947318c6bc\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint64, aligned_mediump_uint64, 8)</td></tr>\n<tr class=\"memdesc:ga7b66a97a8acaa35c5a377b947318c6bc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga7b66a97a8acaa35c5a377b947318c6bc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7b66a97a8acaa35c5a377b947318c6bc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa9cde002439b74fa66120a16a9f55fcc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa9cde002439b74fa66120a16a9f55fcc\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint8_t, aligned_mediump_uint8_t, 1)</td></tr>\n<tr class=\"memdesc:gaa9cde002439b74fa66120a16a9f55fcc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaa9cde002439b74fa66120a16a9f55fcc\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa9cde002439b74fa66120a16a9f55fcc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ca98c67f7d1e975f7c5202f1da1df1f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1ca98c67f7d1e975f7c5202f1da1df1f\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint16_t, aligned_mediump_uint16_t, 2)</td></tr>\n<tr class=\"memdesc:ga1ca98c67f7d1e975f7c5202f1da1df1f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga1ca98c67f7d1e975f7c5202f1da1df1f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1ca98c67f7d1e975f7c5202f1da1df1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1dc8bc6199d785f235576948d80a597c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1dc8bc6199d785f235576948d80a597c\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint32_t, aligned_mediump_uint32_t, 4)</td></tr>\n<tr class=\"memdesc:ga1dc8bc6199d785f235576948d80a597c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga1dc8bc6199d785f235576948d80a597c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1dc8bc6199d785f235576948d80a597c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad14a0f2ec93519682b73d70b8e401d81\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad14a0f2ec93519682b73d70b8e401d81\">GLM_ALIGNED_TYPEDEF</a> (mediump_uint64_t, aligned_mediump_uint64_t, 8)</td></tr>\n<tr class=\"memdesc:gad14a0f2ec93519682b73d70b8e401d81\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gad14a0f2ec93519682b73d70b8e401d81\">More...</a><br /></td></tr>\n<tr class=\"separator:gad14a0f2ec93519682b73d70b8e401d81\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada8b996eb6526dc1ead813bd49539d1b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gada8b996eb6526dc1ead813bd49539d1b\">GLM_ALIGNED_TYPEDEF</a> (mediump_u8, aligned_mediump_u8, 1)</td></tr>\n<tr class=\"memdesc:gada8b996eb6526dc1ead813bd49539d1b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gada8b996eb6526dc1ead813bd49539d1b\">More...</a><br /></td></tr>\n<tr class=\"separator:gada8b996eb6526dc1ead813bd49539d1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga28948f6bfb52b42deb9d73ae1ea8d8b0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga28948f6bfb52b42deb9d73ae1ea8d8b0\">GLM_ALIGNED_TYPEDEF</a> (mediump_u16, aligned_mediump_u16, 2)</td></tr>\n<tr class=\"memdesc:ga28948f6bfb52b42deb9d73ae1ea8d8b0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga28948f6bfb52b42deb9d73ae1ea8d8b0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga28948f6bfb52b42deb9d73ae1ea8d8b0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad6a7c0b5630f89d3f1c5b4ef2919bb4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad6a7c0b5630f89d3f1c5b4ef2919bb4c\">GLM_ALIGNED_TYPEDEF</a> (mediump_u32, aligned_mediump_u32, 4)</td></tr>\n<tr class=\"memdesc:gad6a7c0b5630f89d3f1c5b4ef2919bb4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gad6a7c0b5630f89d3f1c5b4ef2919bb4c\">More...</a><br /></td></tr>\n<tr class=\"separator:gad6a7c0b5630f89d3f1c5b4ef2919bb4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa0fc531cbaa972ac3a0b86d21ef4a7fa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa0fc531cbaa972ac3a0b86d21ef4a7fa\">GLM_ALIGNED_TYPEDEF</a> (mediump_u64, aligned_mediump_u64, 8)</td></tr>\n<tr class=\"memdesc:gaa0fc531cbaa972ac3a0b86d21ef4a7fa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Medium qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaa0fc531cbaa972ac3a0b86d21ef4a7fa\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa0fc531cbaa972ac3a0b86d21ef4a7fa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0ee829f7b754b262bbfe6317c0d678ac\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0ee829f7b754b262bbfe6317c0d678ac\">GLM_ALIGNED_TYPEDEF</a> (highp_uint8, aligned_highp_uint8, 1)</td></tr>\n<tr class=\"memdesc:ga0ee829f7b754b262bbfe6317c0d678ac\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga0ee829f7b754b262bbfe6317c0d678ac\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0ee829f7b754b262bbfe6317c0d678ac\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga447848a817a626cae08cedc9778b331c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga447848a817a626cae08cedc9778b331c\">GLM_ALIGNED_TYPEDEF</a> (highp_uint16, aligned_highp_uint16, 2)</td></tr>\n<tr class=\"memdesc:ga447848a817a626cae08cedc9778b331c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga447848a817a626cae08cedc9778b331c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga447848a817a626cae08cedc9778b331c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6027ae13b2734f542a6e7beee11b8820\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6027ae13b2734f542a6e7beee11b8820\">GLM_ALIGNED_TYPEDEF</a> (highp_uint32, aligned_highp_uint32, 4)</td></tr>\n<tr class=\"memdesc:ga6027ae13b2734f542a6e7beee11b8820\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga6027ae13b2734f542a6e7beee11b8820\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6027ae13b2734f542a6e7beee11b8820\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2aca46c8608c95ef991ee4c332acde5f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2aca46c8608c95ef991ee4c332acde5f\">GLM_ALIGNED_TYPEDEF</a> (highp_uint64, aligned_highp_uint64, 8)</td></tr>\n<tr class=\"memdesc:ga2aca46c8608c95ef991ee4c332acde5f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga2aca46c8608c95ef991ee4c332acde5f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2aca46c8608c95ef991ee4c332acde5f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaff50b10dd1c48be324fdaffd18e2c7ea\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaff50b10dd1c48be324fdaffd18e2c7ea\">GLM_ALIGNED_TYPEDEF</a> (highp_uint8_t, aligned_highp_uint8_t, 1)</td></tr>\n<tr class=\"memdesc:gaff50b10dd1c48be324fdaffd18e2c7ea\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaff50b10dd1c48be324fdaffd18e2c7ea\">More...</a><br /></td></tr>\n<tr class=\"separator:gaff50b10dd1c48be324fdaffd18e2c7ea\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9fc4421dbb833d5461e6d4e59dcfde55\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9fc4421dbb833d5461e6d4e59dcfde55\">GLM_ALIGNED_TYPEDEF</a> (highp_uint16_t, aligned_highp_uint16_t, 2)</td></tr>\n<tr class=\"memdesc:ga9fc4421dbb833d5461e6d4e59dcfde55\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga9fc4421dbb833d5461e6d4e59dcfde55\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9fc4421dbb833d5461e6d4e59dcfde55\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga329f1e2b94b33ba5e3918197030bcf03\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga329f1e2b94b33ba5e3918197030bcf03\">GLM_ALIGNED_TYPEDEF</a> (highp_uint32_t, aligned_highp_uint32_t, 4)</td></tr>\n<tr class=\"memdesc:ga329f1e2b94b33ba5e3918197030bcf03\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga329f1e2b94b33ba5e3918197030bcf03\">More...</a><br /></td></tr>\n<tr class=\"separator:ga329f1e2b94b33ba5e3918197030bcf03\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga71e646f7e301aa422328194162c9c998\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga71e646f7e301aa422328194162c9c998\">GLM_ALIGNED_TYPEDEF</a> (highp_uint64_t, aligned_highp_uint64_t, 8)</td></tr>\n<tr class=\"memdesc:ga71e646f7e301aa422328194162c9c998\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga71e646f7e301aa422328194162c9c998\">More...</a><br /></td></tr>\n<tr class=\"separator:ga71e646f7e301aa422328194162c9c998\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8942e09f479489441a7a5004c6d8cb66\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8942e09f479489441a7a5004c6d8cb66\">GLM_ALIGNED_TYPEDEF</a> (highp_u8, aligned_highp_u8, 1)</td></tr>\n<tr class=\"memdesc:ga8942e09f479489441a7a5004c6d8cb66\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga8942e09f479489441a7a5004c6d8cb66\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8942e09f479489441a7a5004c6d8cb66\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaab32497d6e4db16ee439dbedd64c5865\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaab32497d6e4db16ee439dbedd64c5865\">GLM_ALIGNED_TYPEDEF</a> (highp_u16, aligned_highp_u16, 2)</td></tr>\n<tr class=\"memdesc:gaab32497d6e4db16ee439dbedd64c5865\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaab32497d6e4db16ee439dbedd64c5865\">More...</a><br /></td></tr>\n<tr class=\"separator:gaab32497d6e4db16ee439dbedd64c5865\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaaadbb34952eca8e3d7fe122c3e167742\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaaadbb34952eca8e3d7fe122c3e167742\">GLM_ALIGNED_TYPEDEF</a> (highp_u32, aligned_highp_u32, 4)</td></tr>\n<tr class=\"memdesc:gaaadbb34952eca8e3d7fe122c3e167742\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaaadbb34952eca8e3d7fe122c3e167742\">More...</a><br /></td></tr>\n<tr class=\"separator:gaaadbb34952eca8e3d7fe122c3e167742\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga92024d27c74a3650afb55ec8e024ed25\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga92024d27c74a3650afb55ec8e024ed25\">GLM_ALIGNED_TYPEDEF</a> (highp_u64, aligned_highp_u64, 8)</td></tr>\n<tr class=\"memdesc:ga92024d27c74a3650afb55ec8e024ed25\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">High qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga92024d27c74a3650afb55ec8e024ed25\">More...</a><br /></td></tr>\n<tr class=\"separator:ga92024d27c74a3650afb55ec8e024ed25\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabde1d0b4072df35453db76075ab896a6\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gabde1d0b4072df35453db76075ab896a6\">GLM_ALIGNED_TYPEDEF</a> (uint8, aligned_uint8, 1)</td></tr>\n<tr class=\"memdesc:gabde1d0b4072df35453db76075ab896a6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gabde1d0b4072df35453db76075ab896a6\">More...</a><br /></td></tr>\n<tr class=\"separator:gabde1d0b4072df35453db76075ab896a6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga06c296c9e398b294c8c9dd2a7693dcbb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga06c296c9e398b294c8c9dd2a7693dcbb\">GLM_ALIGNED_TYPEDEF</a> (uint16, aligned_uint16, 2)</td></tr>\n<tr class=\"memdesc:ga06c296c9e398b294c8c9dd2a7693dcbb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga06c296c9e398b294c8c9dd2a7693dcbb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga06c296c9e398b294c8c9dd2a7693dcbb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacf1744488c96ebd33c9f36ad33b2010a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gacf1744488c96ebd33c9f36ad33b2010a\">GLM_ALIGNED_TYPEDEF</a> (uint32, aligned_uint32, 4)</td></tr>\n<tr class=\"memdesc:gacf1744488c96ebd33c9f36ad33b2010a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gacf1744488c96ebd33c9f36ad33b2010a\">More...</a><br /></td></tr>\n<tr class=\"separator:gacf1744488c96ebd33c9f36ad33b2010a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3328061a64c20ba59d5f9da24c2cd059\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga3328061a64c20ba59d5f9da24c2cd059\">GLM_ALIGNED_TYPEDEF</a> (uint64, aligned_uint64, 8)</td></tr>\n<tr class=\"memdesc:ga3328061a64c20ba59d5f9da24c2cd059\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga3328061a64c20ba59d5f9da24c2cd059\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3328061a64c20ba59d5f9da24c2cd059\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6ced36f13bae57f377bafa6f5fcc299\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf6ced36f13bae57f377bafa6f5fcc299\">GLM_ALIGNED_TYPEDEF</a> (uint8_t, aligned_uint8_t, 1)</td></tr>\n<tr class=\"memdesc:gaf6ced36f13bae57f377bafa6f5fcc299\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaf6ced36f13bae57f377bafa6f5fcc299\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6ced36f13bae57f377bafa6f5fcc299\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafbc7fb7847bfc78a339d1d371c915c73\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gafbc7fb7847bfc78a339d1d371c915c73\">GLM_ALIGNED_TYPEDEF</a> (uint16_t, aligned_uint16_t, 2)</td></tr>\n<tr class=\"memdesc:gafbc7fb7847bfc78a339d1d371c915c73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gafbc7fb7847bfc78a339d1d371c915c73\">More...</a><br /></td></tr>\n<tr class=\"separator:gafbc7fb7847bfc78a339d1d371c915c73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa86bc56a73fd8120b1121b5f5e6245ae\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa86bc56a73fd8120b1121b5f5e6245ae\">GLM_ALIGNED_TYPEDEF</a> (uint32_t, aligned_uint32_t, 4)</td></tr>\n<tr class=\"memdesc:gaa86bc56a73fd8120b1121b5f5e6245ae\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gaa86bc56a73fd8120b1121b5f5e6245ae\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa86bc56a73fd8120b1121b5f5e6245ae\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga68c0b9e669060d0eb5ab8c3ddeb483d8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga68c0b9e669060d0eb5ab8c3ddeb483d8\">GLM_ALIGNED_TYPEDEF</a> (uint64_t, aligned_uint64_t, 8)</td></tr>\n<tr class=\"memdesc:ga68c0b9e669060d0eb5ab8c3ddeb483d8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga68c0b9e669060d0eb5ab8c3ddeb483d8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga68c0b9e669060d0eb5ab8c3ddeb483d8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4f3bab577daf3343e99cc005134bce86\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga4f3bab577daf3343e99cc005134bce86\">GLM_ALIGNED_TYPEDEF</a> (u8, aligned_u8, 1)</td></tr>\n<tr class=\"memdesc:ga4f3bab577daf3343e99cc005134bce86\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga4f3bab577daf3343e99cc005134bce86\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4f3bab577daf3343e99cc005134bce86\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga13a2391339d0790d43b76d00a7611c4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga13a2391339d0790d43b76d00a7611c4f\">GLM_ALIGNED_TYPEDEF</a> (u16, aligned_u16, 2)</td></tr>\n<tr class=\"memdesc:ga13a2391339d0790d43b76d00a7611c4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga13a2391339d0790d43b76d00a7611c4f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga13a2391339d0790d43b76d00a7611c4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga197570e03acbc3d18ab698e342971e8f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga197570e03acbc3d18ab698e342971e8f\">GLM_ALIGNED_TYPEDEF</a> (u32, aligned_u32, 4)</td></tr>\n<tr class=\"memdesc:ga197570e03acbc3d18ab698e342971e8f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga197570e03acbc3d18ab698e342971e8f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga197570e03acbc3d18ab698e342971e8f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0f033b21e145a1faa32c62ede5878993\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0f033b21e145a1faa32c62ede5878993\">GLM_ALIGNED_TYPEDEF</a> (u64, aligned_u64, 8)</td></tr>\n<tr class=\"memdesc:ga0f033b21e145a1faa32c62ede5878993\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga0f033b21e145a1faa32c62ede5878993\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0f033b21e145a1faa32c62ede5878993\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga509af83527f5cd512e9a7873590663aa\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga509af83527f5cd512e9a7873590663aa\">GLM_ALIGNED_TYPEDEF</a> (uvec1, aligned_uvec1, 4)</td></tr>\n<tr class=\"memdesc:ga509af83527f5cd512e9a7873590663aa\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga509af83527f5cd512e9a7873590663aa\">More...</a><br /></td></tr>\n<tr class=\"separator:ga509af83527f5cd512e9a7873590663aa\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga94e86186978c502c6dc0c0d9c4a30679\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga94e86186978c502c6dc0c0d9c4a30679\">GLM_ALIGNED_TYPEDEF</a> (uvec2, aligned_uvec2, 8)</td></tr>\n<tr class=\"memdesc:ga94e86186978c502c6dc0c0d9c4a30679\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#ga94e86186978c502c6dc0c0d9c4a30679\">More...</a><br /></td></tr>\n<tr class=\"separator:ga94e86186978c502c6dc0c0d9c4a30679\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5cec574686a7f3c8ed24bb195c5e2d0a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5cec574686a7f3c8ed24bb195c5e2d0a\">GLM_ALIGNED_TYPEDEF</a> (uvec3, aligned_uvec3, 16)</td></tr>\n<tr class=\"memdesc:ga5cec574686a7f3c8ed24bb195c5e2d0a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#ga5cec574686a7f3c8ed24bb195c5e2d0a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5cec574686a7f3c8ed24bb195c5e2d0a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga47edfdcee9c89b1ebdaf20450323b1d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga47edfdcee9c89b1ebdaf20450323b1d4\">GLM_ALIGNED_TYPEDEF</a> (uvec4, aligned_uvec4, 16)</td></tr>\n<tr class=\"memdesc:ga47edfdcee9c89b1ebdaf20450323b1d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#ga47edfdcee9c89b1ebdaf20450323b1d4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga47edfdcee9c89b1ebdaf20450323b1d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5611d6718e3a00096918a64192e73a45\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5611d6718e3a00096918a64192e73a45\">GLM_ALIGNED_TYPEDEF</a> (u8vec1, aligned_u8vec1, 1)</td></tr>\n<tr class=\"memdesc:ga5611d6718e3a00096918a64192e73a45\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga5611d6718e3a00096918a64192e73a45\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5611d6718e3a00096918a64192e73a45\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19837e6f72b60d994a805ef564c6c326\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga19837e6f72b60d994a805ef564c6c326\">GLM_ALIGNED_TYPEDEF</a> (u8vec2, aligned_u8vec2, 2)</td></tr>\n<tr class=\"memdesc:ga19837e6f72b60d994a805ef564c6c326\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#ga19837e6f72b60d994a805ef564c6c326\">More...</a><br /></td></tr>\n<tr class=\"separator:ga19837e6f72b60d994a805ef564c6c326\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9740cf8e34f068049b42a2753f9601c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9740cf8e34f068049b42a2753f9601c2\">GLM_ALIGNED_TYPEDEF</a> (u8vec3, aligned_u8vec3, 4)</td></tr>\n<tr class=\"memdesc:ga9740cf8e34f068049b42a2753f9601c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#ga9740cf8e34f068049b42a2753f9601c2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9740cf8e34f068049b42a2753f9601c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8b8588bb221448f5541a858903822a57\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8b8588bb221448f5541a858903822a57\">GLM_ALIGNED_TYPEDEF</a> (u8vec4, aligned_u8vec4, 4)</td></tr>\n<tr class=\"memdesc:ga8b8588bb221448f5541a858903822a57\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 8 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#ga8b8588bb221448f5541a858903822a57\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8b8588bb221448f5541a858903822a57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga991abe990c16de26b2129d6bc2f4c051\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga991abe990c16de26b2129d6bc2f4c051\">GLM_ALIGNED_TYPEDEF</a> (u16vec1, aligned_u16vec1, 2)</td></tr>\n<tr class=\"memdesc:ga991abe990c16de26b2129d6bc2f4c051\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#ga991abe990c16de26b2129d6bc2f4c051\">More...</a><br /></td></tr>\n<tr class=\"separator:ga991abe990c16de26b2129d6bc2f4c051\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac01bb9fc32a1cd76c2b80d030f71df4c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac01bb9fc32a1cd76c2b80d030f71df4c\">GLM_ALIGNED_TYPEDEF</a> (u16vec2, aligned_u16vec2, 4)</td></tr>\n<tr class=\"memdesc:gac01bb9fc32a1cd76c2b80d030f71df4c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#gac01bb9fc32a1cd76c2b80d030f71df4c\">More...</a><br /></td></tr>\n<tr class=\"separator:gac01bb9fc32a1cd76c2b80d030f71df4c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga09540dbca093793a36a8997e0d4bee77\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga09540dbca093793a36a8997e0d4bee77\">GLM_ALIGNED_TYPEDEF</a> (u16vec3, aligned_u16vec3, 8)</td></tr>\n<tr class=\"memdesc:ga09540dbca093793a36a8997e0d4bee77\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#ga09540dbca093793a36a8997e0d4bee77\">More...</a><br /></td></tr>\n<tr class=\"separator:ga09540dbca093793a36a8997e0d4bee77\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaecafb5996f5a44f57e34d29c8670741e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaecafb5996f5a44f57e34d29c8670741e\">GLM_ALIGNED_TYPEDEF</a> (u16vec4, aligned_u16vec4, 8)</td></tr>\n<tr class=\"memdesc:gaecafb5996f5a44f57e34d29c8670741e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 16 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#gaecafb5996f5a44f57e34d29c8670741e\">More...</a><br /></td></tr>\n<tr class=\"separator:gaecafb5996f5a44f57e34d29c8670741e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac6b161a04d2f8408fe1c9d857e8daac0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac6b161a04d2f8408fe1c9d857e8daac0\">GLM_ALIGNED_TYPEDEF</a> (u32vec1, aligned_u32vec1, 4)</td></tr>\n<tr class=\"memdesc:gac6b161a04d2f8408fe1c9d857e8daac0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gac6b161a04d2f8408fe1c9d857e8daac0\">More...</a><br /></td></tr>\n<tr class=\"separator:gac6b161a04d2f8408fe1c9d857e8daac0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1fa0dfc8feb0fa17dab2acd43e05342b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1fa0dfc8feb0fa17dab2acd43e05342b\">GLM_ALIGNED_TYPEDEF</a> (u32vec2, aligned_u32vec2, 8)</td></tr>\n<tr class=\"memdesc:ga1fa0dfc8feb0fa17dab2acd43e05342b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#ga1fa0dfc8feb0fa17dab2acd43e05342b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1fa0dfc8feb0fa17dab2acd43e05342b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0019500abbfa9c66eff61ca75eaaed94\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0019500abbfa9c66eff61ca75eaaed94\">GLM_ALIGNED_TYPEDEF</a> (u32vec3, aligned_u32vec3, 16)</td></tr>\n<tr class=\"memdesc:ga0019500abbfa9c66eff61ca75eaaed94\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#ga0019500abbfa9c66eff61ca75eaaed94\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0019500abbfa9c66eff61ca75eaaed94\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga14fd29d01dae7b08a04e9facbcc18824\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga14fd29d01dae7b08a04e9facbcc18824\">GLM_ALIGNED_TYPEDEF</a> (u32vec4, aligned_u32vec4, 16)</td></tr>\n<tr class=\"memdesc:ga14fd29d01dae7b08a04e9facbcc18824\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 32 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#ga14fd29d01dae7b08a04e9facbcc18824\">More...</a><br /></td></tr>\n<tr class=\"separator:ga14fd29d01dae7b08a04e9facbcc18824\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab253845f534a67136f9619843cade903\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab253845f534a67136f9619843cade903\">GLM_ALIGNED_TYPEDEF</a> (u64vec1, aligned_u64vec1, 8)</td></tr>\n<tr class=\"memdesc:gab253845f534a67136f9619843cade903\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned scalar type.  <a href=\"a00364.html#gab253845f534a67136f9619843cade903\">More...</a><br /></td></tr>\n<tr class=\"separator:gab253845f534a67136f9619843cade903\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga929427a7627940cdf3304f9c050b677d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga929427a7627940cdf3304f9c050b677d\">GLM_ALIGNED_TYPEDEF</a> (u64vec2, aligned_u64vec2, 16)</td></tr>\n<tr class=\"memdesc:ga929427a7627940cdf3304f9c050b677d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned vector of 2 components type.  <a href=\"a00364.html#ga929427a7627940cdf3304f9c050b677d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga929427a7627940cdf3304f9c050b677d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae373b6c04fdf9879f33d63e6949c037e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gae373b6c04fdf9879f33d63e6949c037e\">GLM_ALIGNED_TYPEDEF</a> (u64vec3, aligned_u64vec3, 32)</td></tr>\n<tr class=\"memdesc:gae373b6c04fdf9879f33d63e6949c037e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned vector of 3 components type.  <a href=\"a00364.html#gae373b6c04fdf9879f33d63e6949c037e\">More...</a><br /></td></tr>\n<tr class=\"separator:gae373b6c04fdf9879f33d63e6949c037e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga53a8a03dca2015baec4584f45b8e9cdc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga53a8a03dca2015baec4584f45b8e9cdc\">GLM_ALIGNED_TYPEDEF</a> (u64vec4, aligned_u64vec4, 32)</td></tr>\n<tr class=\"memdesc:ga53a8a03dca2015baec4584f45b8e9cdc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Default qualifier 64 bit unsigned integer aligned vector of 4 components type.  <a href=\"a00364.html#ga53a8a03dca2015baec4584f45b8e9cdc\">More...</a><br /></td></tr>\n<tr class=\"separator:ga53a8a03dca2015baec4584f45b8e9cdc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab3301bae94ef5bf59fbdd9a24e7d2a01\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab3301bae94ef5bf59fbdd9a24e7d2a01\">GLM_ALIGNED_TYPEDEF</a> (float32, aligned_float32, 4)</td></tr>\n<tr class=\"memdesc:gab3301bae94ef5bf59fbdd9a24e7d2a01\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit single-qualifier floating-point aligned scalar.  <a href=\"a00364.html#gab3301bae94ef5bf59fbdd9a24e7d2a01\">More...</a><br /></td></tr>\n<tr class=\"separator:gab3301bae94ef5bf59fbdd9a24e7d2a01\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada9b0bea273d3ae0286f891533b9568f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gada9b0bea273d3ae0286f891533b9568f\">GLM_ALIGNED_TYPEDEF</a> (float32_t, aligned_float32_t, 4)</td></tr>\n<tr class=\"memdesc:gada9b0bea273d3ae0286f891533b9568f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit single-qualifier floating-point aligned scalar.  <a href=\"a00364.html#gada9b0bea273d3ae0286f891533b9568f\">More...</a><br /></td></tr>\n<tr class=\"separator:gada9b0bea273d3ae0286f891533b9568f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadbce23b9f23d77bb3884e289a574ebd5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gadbce23b9f23d77bb3884e289a574ebd5\">GLM_ALIGNED_TYPEDEF</a> (float32, aligned_f32, 4)</td></tr>\n<tr class=\"memdesc:gadbce23b9f23d77bb3884e289a574ebd5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">32 bit single-qualifier floating-point aligned scalar.  <a href=\"a00364.html#gadbce23b9f23d77bb3884e289a574ebd5\">More...</a><br /></td></tr>\n<tr class=\"separator:gadbce23b9f23d77bb3884e289a574ebd5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga75930684ff2233171c573e603f216162\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga75930684ff2233171c573e603f216162\">GLM_ALIGNED_TYPEDEF</a> (float64, aligned_float64, 8)</td></tr>\n<tr class=\"memdesc:ga75930684ff2233171c573e603f216162\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit double-qualifier floating-point aligned scalar.  <a href=\"a00364.html#ga75930684ff2233171c573e603f216162\">More...</a><br /></td></tr>\n<tr class=\"separator:ga75930684ff2233171c573e603f216162\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e3a2d83b131336219a0f4c7cbba2a48\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6e3a2d83b131336219a0f4c7cbba2a48\">GLM_ALIGNED_TYPEDEF</a> (float64_t, aligned_float64_t, 8)</td></tr>\n<tr class=\"memdesc:ga6e3a2d83b131336219a0f4c7cbba2a48\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit double-qualifier floating-point aligned scalar.  <a href=\"a00364.html#ga6e3a2d83b131336219a0f4c7cbba2a48\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e3a2d83b131336219a0f4c7cbba2a48\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa4deaa0dea930c393d55e7a4352b0a20\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa4deaa0dea930c393d55e7a4352b0a20\">GLM_ALIGNED_TYPEDEF</a> (float64, aligned_f64, 8)</td></tr>\n<tr class=\"memdesc:gaa4deaa0dea930c393d55e7a4352b0a20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">64 bit double-qualifier floating-point aligned scalar.  <a href=\"a00364.html#gaa4deaa0dea930c393d55e7a4352b0a20\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa4deaa0dea930c393d55e7a4352b0a20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga81bc497b2bfc6f80bab690c6ee28f0f9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga81bc497b2bfc6f80bab690c6ee28f0f9\">GLM_ALIGNED_TYPEDEF</a> (vec1, aligned_vec1, 4)</td></tr>\n<tr class=\"memdesc:ga81bc497b2bfc6f80bab690c6ee28f0f9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#ga81bc497b2bfc6f80bab690c6ee28f0f9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga81bc497b2bfc6f80bab690c6ee28f0f9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gada3e8f783e9d4b90006695a16c39d4d4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gada3e8f783e9d4b90006695a16c39d4d4\">GLM_ALIGNED_TYPEDEF</a> (vec2, aligned_vec2, 8)</td></tr>\n<tr class=\"memdesc:gada3e8f783e9d4b90006695a16c39d4d4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#gada3e8f783e9d4b90006695a16c39d4d4\">More...</a><br /></td></tr>\n<tr class=\"separator:gada3e8f783e9d4b90006695a16c39d4d4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab8d081fac3a38d6f55fa552f32168d32\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab8d081fac3a38d6f55fa552f32168d32\">GLM_ALIGNED_TYPEDEF</a> (vec3, aligned_vec3, 16)</td></tr>\n<tr class=\"memdesc:gab8d081fac3a38d6f55fa552f32168d32\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#gab8d081fac3a38d6f55fa552f32168d32\">More...</a><br /></td></tr>\n<tr class=\"separator:gab8d081fac3a38d6f55fa552f32168d32\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga12fe7b9769c964c5b48dcfd8b7f40198\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga12fe7b9769c964c5b48dcfd8b7f40198\">GLM_ALIGNED_TYPEDEF</a> (vec4, aligned_vec4, 16)</td></tr>\n<tr class=\"memdesc:ga12fe7b9769c964c5b48dcfd8b7f40198\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga12fe7b9769c964c5b48dcfd8b7f40198\">More...</a><br /></td></tr>\n<tr class=\"separator:ga12fe7b9769c964c5b48dcfd8b7f40198\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaefab04611c7f8fe1fd9be3071efea6cc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaefab04611c7f8fe1fd9be3071efea6cc\">GLM_ALIGNED_TYPEDEF</a> (fvec1, aligned_fvec1, 4)</td></tr>\n<tr class=\"memdesc:gaefab04611c7f8fe1fd9be3071efea6cc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#gaefab04611c7f8fe1fd9be3071efea6cc\">More...</a><br /></td></tr>\n<tr class=\"separator:gaefab04611c7f8fe1fd9be3071efea6cc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2543c05ba19b3bd19d45b1227390c5b4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2543c05ba19b3bd19d45b1227390c5b4\">GLM_ALIGNED_TYPEDEF</a> (fvec2, aligned_fvec2, 8)</td></tr>\n<tr class=\"memdesc:ga2543c05ba19b3bd19d45b1227390c5b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#ga2543c05ba19b3bd19d45b1227390c5b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2543c05ba19b3bd19d45b1227390c5b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga009afd727fd657ef33a18754d6d28f60\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga009afd727fd657ef33a18754d6d28f60\">GLM_ALIGNED_TYPEDEF</a> (fvec3, aligned_fvec3, 16)</td></tr>\n<tr class=\"memdesc:ga009afd727fd657ef33a18754d6d28f60\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#ga009afd727fd657ef33a18754d6d28f60\">More...</a><br /></td></tr>\n<tr class=\"separator:ga009afd727fd657ef33a18754d6d28f60\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2f26177e74bfb301a3d0e02ec3c3ef53\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2f26177e74bfb301a3d0e02ec3c3ef53\">GLM_ALIGNED_TYPEDEF</a> (fvec4, aligned_fvec4, 16)</td></tr>\n<tr class=\"memdesc:ga2f26177e74bfb301a3d0e02ec3c3ef53\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga2f26177e74bfb301a3d0e02ec3c3ef53\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2f26177e74bfb301a3d0e02ec3c3ef53\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga309f495a1d6b75ddf195b674b65cb1e4\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga309f495a1d6b75ddf195b674b65cb1e4\">GLM_ALIGNED_TYPEDEF</a> (f32vec1, aligned_f32vec1, 4)</td></tr>\n<tr class=\"memdesc:ga309f495a1d6b75ddf195b674b65cb1e4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#ga309f495a1d6b75ddf195b674b65cb1e4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga309f495a1d6b75ddf195b674b65cb1e4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5e185865a2217d0cd47187644683a8c3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5e185865a2217d0cd47187644683a8c3\">GLM_ALIGNED_TYPEDEF</a> (f32vec2, aligned_f32vec2, 8)</td></tr>\n<tr class=\"memdesc:ga5e185865a2217d0cd47187644683a8c3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#ga5e185865a2217d0cd47187644683a8c3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5e185865a2217d0cd47187644683a8c3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gade4458b27b039b9ca34f8ec049f3115a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gade4458b27b039b9ca34f8ec049f3115a\">GLM_ALIGNED_TYPEDEF</a> (f32vec3, aligned_f32vec3, 16)</td></tr>\n<tr class=\"memdesc:gade4458b27b039b9ca34f8ec049f3115a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#gade4458b27b039b9ca34f8ec049f3115a\">More...</a><br /></td></tr>\n<tr class=\"separator:gade4458b27b039b9ca34f8ec049f3115a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\">GLM_ALIGNED_TYPEDEF</a> (f32vec4, aligned_f32vec4, 16)</td></tr>\n<tr class=\"memdesc:ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3e0f35fa0c626285a8bad41707e7316c\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga3e0f35fa0c626285a8bad41707e7316c\">GLM_ALIGNED_TYPEDEF</a> (dvec1, aligned_dvec1, 8)</td></tr>\n<tr class=\"memdesc:ga3e0f35fa0c626285a8bad41707e7316c\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#ga3e0f35fa0c626285a8bad41707e7316c\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3e0f35fa0c626285a8bad41707e7316c\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga78bfec2f185d1d365ea0a9ef1e3d45b8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga78bfec2f185d1d365ea0a9ef1e3d45b8\">GLM_ALIGNED_TYPEDEF</a> (dvec2, aligned_dvec2, 16)</td></tr>\n<tr class=\"memdesc:ga78bfec2f185d1d365ea0a9ef1e3d45b8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#ga78bfec2f185d1d365ea0a9ef1e3d45b8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga78bfec2f185d1d365ea0a9ef1e3d45b8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga01fe6fee6db5df580b6724a7e681f069\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga01fe6fee6db5df580b6724a7e681f069\">GLM_ALIGNED_TYPEDEF</a> (dvec3, aligned_dvec3, 32)</td></tr>\n<tr class=\"memdesc:ga01fe6fee6db5df580b6724a7e681f069\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#ga01fe6fee6db5df580b6724a7e681f069\">More...</a><br /></td></tr>\n<tr class=\"separator:ga01fe6fee6db5df580b6724a7e681f069\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga687d5b8f551d5af32425c0b2fba15e99\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga687d5b8f551d5af32425c0b2fba15e99\">GLM_ALIGNED_TYPEDEF</a> (dvec4, aligned_dvec4, 32)</td></tr>\n<tr class=\"memdesc:ga687d5b8f551d5af32425c0b2fba15e99\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga687d5b8f551d5af32425c0b2fba15e99\">More...</a><br /></td></tr>\n<tr class=\"separator:ga687d5b8f551d5af32425c0b2fba15e99\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8e842371d46842ff8f1813419ba49d0f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga8e842371d46842ff8f1813419ba49d0f\">GLM_ALIGNED_TYPEDEF</a> (f64vec1, aligned_f64vec1, 8)</td></tr>\n<tr class=\"memdesc:ga8e842371d46842ff8f1813419ba49d0f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 1 component.  <a href=\"a00364.html#ga8e842371d46842ff8f1813419ba49d0f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8e842371d46842ff8f1813419ba49d0f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga32814aa0f19316b43134fc25f2aad2b9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga32814aa0f19316b43134fc25f2aad2b9\">GLM_ALIGNED_TYPEDEF</a> (f64vec2, aligned_f64vec2, 16)</td></tr>\n<tr class=\"memdesc:ga32814aa0f19316b43134fc25f2aad2b9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 2 components.  <a href=\"a00364.html#ga32814aa0f19316b43134fc25f2aad2b9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga32814aa0f19316b43134fc25f2aad2b9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf3d3bbc1e93909b689123b085e177a14\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf3d3bbc1e93909b689123b085e177a14\">GLM_ALIGNED_TYPEDEF</a> (f64vec3, aligned_f64vec3, 32)</td></tr>\n<tr class=\"memdesc:gaf3d3bbc1e93909b689123b085e177a14\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 3 components.  <a href=\"a00364.html#gaf3d3bbc1e93909b689123b085e177a14\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf3d3bbc1e93909b689123b085e177a14\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga804c654cead1139bd250f90f9bb01fad\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga804c654cead1139bd250f90f9bb01fad\">GLM_ALIGNED_TYPEDEF</a> (f64vec4, aligned_f64vec4, 32)</td></tr>\n<tr class=\"memdesc:ga804c654cead1139bd250f90f9bb01fad\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned vector of 4 components.  <a href=\"a00364.html#ga804c654cead1139bd250f90f9bb01fad\">More...</a><br /></td></tr>\n<tr class=\"separator:ga804c654cead1139bd250f90f9bb01fad\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacce4ac532880b8c7469d3c31974420a1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gacce4ac532880b8c7469d3c31974420a1\">GLM_ALIGNED_TYPEDEF</a> (mat2, aligned_mat2, 16)</td></tr>\n<tr class=\"memdesc:gacce4ac532880b8c7469d3c31974420a1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#gacce4ac532880b8c7469d3c31974420a1\">More...</a><br /></td></tr>\n<tr class=\"separator:gacce4ac532880b8c7469d3c31974420a1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0498e0e249a6faddaf96aa55d7f81c3b\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0498e0e249a6faddaf96aa55d7f81c3b\">GLM_ALIGNED_TYPEDEF</a> (mat3, aligned_mat3, 16)</td></tr>\n<tr class=\"memdesc:ga0498e0e249a6faddaf96aa55d7f81c3b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#ga0498e0e249a6faddaf96aa55d7f81c3b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0498e0e249a6faddaf96aa55d7f81c3b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7435d87de82a0d652b35dc5b9cc718d5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7435d87de82a0d652b35dc5b9cc718d5\">GLM_ALIGNED_TYPEDEF</a> (mat4, aligned_mat4, 16)</td></tr>\n<tr class=\"memdesc:ga7435d87de82a0d652b35dc5b9cc718d5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#ga7435d87de82a0d652b35dc5b9cc718d5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7435d87de82a0d652b35dc5b9cc718d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga719da577361541a4c43a2dd1d0e361e1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga719da577361541a4c43a2dd1d0e361e1\">GLM_ALIGNED_TYPEDEF</a> (fmat2x2, aligned_fmat2, 16)</td></tr>\n<tr class=\"memdesc:ga719da577361541a4c43a2dd1d0e361e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga719da577361541a4c43a2dd1d0e361e1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga719da577361541a4c43a2dd1d0e361e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e7ee4f541e1d7db66cd1a224caacafb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6e7ee4f541e1d7db66cd1a224caacafb\">GLM_ALIGNED_TYPEDEF</a> (fmat3x3, aligned_fmat3, 16)</td></tr>\n<tr class=\"memdesc:ga6e7ee4f541e1d7db66cd1a224caacafb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#ga6e7ee4f541e1d7db66cd1a224caacafb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e7ee4f541e1d7db66cd1a224caacafb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae5d672d359f2a39f63f98c7975057486\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gae5d672d359f2a39f63f98c7975057486\">GLM_ALIGNED_TYPEDEF</a> (fmat4x4, aligned_fmat4, 16)</td></tr>\n<tr class=\"memdesc:gae5d672d359f2a39f63f98c7975057486\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#gae5d672d359f2a39f63f98c7975057486\">More...</a><br /></td></tr>\n<tr class=\"separator:gae5d672d359f2a39f63f98c7975057486\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6fa2df037dbfc5fe8c8e0b4db8a34953\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6fa2df037dbfc5fe8c8e0b4db8a34953\">GLM_ALIGNED_TYPEDEF</a> (fmat2x2, aligned_fmat2x2, 16)</td></tr>\n<tr class=\"memdesc:ga6fa2df037dbfc5fe8c8e0b4db8a34953\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga6fa2df037dbfc5fe8c8e0b4db8a34953\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6fa2df037dbfc5fe8c8e0b4db8a34953\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0743b4f4f69a3227b82ff58f6abbad62\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0743b4f4f69a3227b82ff58f6abbad62\">GLM_ALIGNED_TYPEDEF</a> (fmat2x3, aligned_fmat2x3, 16)</td></tr>\n<tr class=\"memdesc:ga0743b4f4f69a3227b82ff58f6abbad62\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 2x3 matrix.  <a href=\"a00364.html#ga0743b4f4f69a3227b82ff58f6abbad62\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0743b4f4f69a3227b82ff58f6abbad62\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1a76b325fdf70f961d835edd182c63dd\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1a76b325fdf70f961d835edd182c63dd\">GLM_ALIGNED_TYPEDEF</a> (fmat2x4, aligned_fmat2x4, 16)</td></tr>\n<tr class=\"memdesc:ga1a76b325fdf70f961d835edd182c63dd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 2x4 matrix.  <a href=\"a00364.html#ga1a76b325fdf70f961d835edd182c63dd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1a76b325fdf70f961d835edd182c63dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4b4e181cd041ba28c3163e7b8074aef0\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga4b4e181cd041ba28c3163e7b8074aef0\">GLM_ALIGNED_TYPEDEF</a> (fmat3x2, aligned_fmat3x2, 16)</td></tr>\n<tr class=\"memdesc:ga4b4e181cd041ba28c3163e7b8074aef0\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x2 matrix.  <a href=\"a00364.html#ga4b4e181cd041ba28c3163e7b8074aef0\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4b4e181cd041ba28c3163e7b8074aef0\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga27b13f465abc8a40705698145e222c3f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga27b13f465abc8a40705698145e222c3f\">GLM_ALIGNED_TYPEDEF</a> (fmat3x3, aligned_fmat3x3, 16)</td></tr>\n<tr class=\"memdesc:ga27b13f465abc8a40705698145e222c3f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#ga27b13f465abc8a40705698145e222c3f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga27b13f465abc8a40705698145e222c3f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2608d19cc275830a6f8c0b6405625a4f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2608d19cc275830a6f8c0b6405625a4f\">GLM_ALIGNED_TYPEDEF</a> (fmat3x4, aligned_fmat3x4, 16)</td></tr>\n<tr class=\"memdesc:ga2608d19cc275830a6f8c0b6405625a4f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x4 matrix.  <a href=\"a00364.html#ga2608d19cc275830a6f8c0b6405625a4f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2608d19cc275830a6f8c0b6405625a4f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga93f09768241358a287c4cca538f1f7e7\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga93f09768241358a287c4cca538f1f7e7\">GLM_ALIGNED_TYPEDEF</a> (fmat4x2, aligned_fmat4x2, 16)</td></tr>\n<tr class=\"memdesc:ga93f09768241358a287c4cca538f1f7e7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x2 matrix.  <a href=\"a00364.html#ga93f09768241358a287c4cca538f1f7e7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga93f09768241358a287c4cca538f1f7e7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7c117e3ecca089e10247b1d41d88aff9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga7c117e3ecca089e10247b1d41d88aff9\">GLM_ALIGNED_TYPEDEF</a> (fmat4x3, aligned_fmat4x3, 16)</td></tr>\n<tr class=\"memdesc:ga7c117e3ecca089e10247b1d41d88aff9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x3 matrix.  <a href=\"a00364.html#ga7c117e3ecca089e10247b1d41d88aff9\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7c117e3ecca089e10247b1d41d88aff9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga07c75cd04ba42dc37fa3e105f89455c5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga07c75cd04ba42dc37fa3e105f89455c5\">GLM_ALIGNED_TYPEDEF</a> (fmat4x4, aligned_fmat4x4, 16)</td></tr>\n<tr class=\"memdesc:ga07c75cd04ba42dc37fa3e105f89455c5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#ga07c75cd04ba42dc37fa3e105f89455c5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga07c75cd04ba42dc37fa3e105f89455c5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga65ff0d690a34a4d7f46f9b2eb51525ee\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga65ff0d690a34a4d7f46f9b2eb51525ee\">GLM_ALIGNED_TYPEDEF</a> (f32mat2x2, aligned_f32mat2, 16)</td></tr>\n<tr class=\"memdesc:ga65ff0d690a34a4d7f46f9b2eb51525ee\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga65ff0d690a34a4d7f46f9b2eb51525ee\">More...</a><br /></td></tr>\n<tr class=\"separator:ga65ff0d690a34a4d7f46f9b2eb51525ee\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadd8ddbe2bf65ccede865ba2f510176dc\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gadd8ddbe2bf65ccede865ba2f510176dc\">GLM_ALIGNED_TYPEDEF</a> (f32mat3x3, aligned_f32mat3, 16)</td></tr>\n<tr class=\"memdesc:gadd8ddbe2bf65ccede865ba2f510176dc\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#gadd8ddbe2bf65ccede865ba2f510176dc\">More...</a><br /></td></tr>\n<tr class=\"separator:gadd8ddbe2bf65ccede865ba2f510176dc\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf18dbff14bf13d3ff540c517659ec045\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaf18dbff14bf13d3ff540c517659ec045\">GLM_ALIGNED_TYPEDEF</a> (f32mat4x4, aligned_f32mat4, 16)</td></tr>\n<tr class=\"memdesc:gaf18dbff14bf13d3ff540c517659ec045\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#gaf18dbff14bf13d3ff540c517659ec045\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf18dbff14bf13d3ff540c517659ec045\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga66339f6139bf7ff19e245beb33f61cc8\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga66339f6139bf7ff19e245beb33f61cc8\">GLM_ALIGNED_TYPEDEF</a> (f32mat2x2, aligned_f32mat2x2, 16)</td></tr>\n<tr class=\"memdesc:ga66339f6139bf7ff19e245beb33f61cc8\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga66339f6139bf7ff19e245beb33f61cc8\">More...</a><br /></td></tr>\n<tr class=\"separator:ga66339f6139bf7ff19e245beb33f61cc8\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1558a48b3934011b52612809f443e46d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1558a48b3934011b52612809f443e46d\">GLM_ALIGNED_TYPEDEF</a> (f32mat2x3, aligned_f32mat2x3, 16)</td></tr>\n<tr class=\"memdesc:ga1558a48b3934011b52612809f443e46d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 2x3 matrix.  <a href=\"a00364.html#ga1558a48b3934011b52612809f443e46d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1558a48b3934011b52612809f443e46d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa52e5732daa62851627021ad551c7680\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaa52e5732daa62851627021ad551c7680\">GLM_ALIGNED_TYPEDEF</a> (f32mat2x4, aligned_f32mat2x4, 16)</td></tr>\n<tr class=\"memdesc:gaa52e5732daa62851627021ad551c7680\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 2x4 matrix.  <a href=\"a00364.html#gaa52e5732daa62851627021ad551c7680\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa52e5732daa62851627021ad551c7680\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac09663c42566bcb58d23c6781ac4e85a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gac09663c42566bcb58d23c6781ac4e85a\">GLM_ALIGNED_TYPEDEF</a> (f32mat3x2, aligned_f32mat3x2, 16)</td></tr>\n<tr class=\"memdesc:gac09663c42566bcb58d23c6781ac4e85a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x2 matrix.  <a href=\"a00364.html#gac09663c42566bcb58d23c6781ac4e85a\">More...</a><br /></td></tr>\n<tr class=\"separator:gac09663c42566bcb58d23c6781ac4e85a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3f510999e59e1b309113e1d561162b29\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga3f510999e59e1b309113e1d561162b29\">GLM_ALIGNED_TYPEDEF</a> (f32mat3x3, aligned_f32mat3x3, 16)</td></tr>\n<tr class=\"memdesc:ga3f510999e59e1b309113e1d561162b29\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#ga3f510999e59e1b309113e1d561162b29\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3f510999e59e1b309113e1d561162b29\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2c9c94f0c89cd71ce56551db6cf4aaec\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga2c9c94f0c89cd71ce56551db6cf4aaec\">GLM_ALIGNED_TYPEDEF</a> (f32mat3x4, aligned_f32mat3x4, 16)</td></tr>\n<tr class=\"memdesc:ga2c9c94f0c89cd71ce56551db6cf4aaec\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 3x4 matrix.  <a href=\"a00364.html#ga2c9c94f0c89cd71ce56551db6cf4aaec\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2c9c94f0c89cd71ce56551db6cf4aaec\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga99ce8274c750fbfdf0e70c95946a2875\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga99ce8274c750fbfdf0e70c95946a2875\">GLM_ALIGNED_TYPEDEF</a> (f32mat4x2, aligned_f32mat4x2, 16)</td></tr>\n<tr class=\"memdesc:ga99ce8274c750fbfdf0e70c95946a2875\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x2 matrix.  <a href=\"a00364.html#ga99ce8274c750fbfdf0e70c95946a2875\">More...</a><br /></td></tr>\n<tr class=\"separator:ga99ce8274c750fbfdf0e70c95946a2875\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9476ef66790239df53dbe66f3989c3b5\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9476ef66790239df53dbe66f3989c3b5\">GLM_ALIGNED_TYPEDEF</a> (f32mat4x3, aligned_f32mat4x3, 16)</td></tr>\n<tr class=\"memdesc:ga9476ef66790239df53dbe66f3989c3b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x3 matrix.  <a href=\"a00364.html#ga9476ef66790239df53dbe66f3989c3b5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9476ef66790239df53dbe66f3989c3b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacc429b3b0b49921e12713b6d31e14e1d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gacc429b3b0b49921e12713b6d31e14e1d\">GLM_ALIGNED_TYPEDEF</a> (f32mat4x4, aligned_f32mat4x4, 16)</td></tr>\n<tr class=\"memdesc:gacc429b3b0b49921e12713b6d31e14e1d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#gacc429b3b0b49921e12713b6d31e14e1d\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc429b3b0b49921e12713b6d31e14e1d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga88f6c6fa06e6e64479763e69444669cf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga88f6c6fa06e6e64479763e69444669cf\">GLM_ALIGNED_TYPEDEF</a> (f64mat2x2, aligned_f64mat2, 32)</td></tr>\n<tr class=\"memdesc:ga88f6c6fa06e6e64479763e69444669cf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#ga88f6c6fa06e6e64479763e69444669cf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga88f6c6fa06e6e64479763e69444669cf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaae8e4639c991e64754145ab8e4c32083\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaae8e4639c991e64754145ab8e4c32083\">GLM_ALIGNED_TYPEDEF</a> (f64mat3x3, aligned_f64mat3, 32)</td></tr>\n<tr class=\"memdesc:gaae8e4639c991e64754145ab8e4c32083\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#gaae8e4639c991e64754145ab8e4c32083\">More...</a><br /></td></tr>\n<tr class=\"separator:gaae8e4639c991e64754145ab8e4c32083\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e9094f3feb3b5b49d0f83683a101fde\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga6e9094f3feb3b5b49d0f83683a101fde\">GLM_ALIGNED_TYPEDEF</a> (f64mat4x4, aligned_f64mat4, 32)</td></tr>\n<tr class=\"memdesc:ga6e9094f3feb3b5b49d0f83683a101fde\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#ga6e9094f3feb3b5b49d0f83683a101fde\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e9094f3feb3b5b49d0f83683a101fde\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadbd2c639c03de1c3e9591b5a39f65559\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gadbd2c639c03de1c3e9591b5a39f65559\">GLM_ALIGNED_TYPEDEF</a> (f64mat2x2, aligned_f64mat2x2, 32)</td></tr>\n<tr class=\"memdesc:gadbd2c639c03de1c3e9591b5a39f65559\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 1x1 matrix.  <a href=\"a00364.html#gadbd2c639c03de1c3e9591b5a39f65559\">More...</a><br /></td></tr>\n<tr class=\"separator:gadbd2c639c03de1c3e9591b5a39f65559\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab059d7b9fe2094acc563b7223987499f\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gab059d7b9fe2094acc563b7223987499f\">GLM_ALIGNED_TYPEDEF</a> (f64mat2x3, aligned_f64mat2x3, 32)</td></tr>\n<tr class=\"memdesc:gab059d7b9fe2094acc563b7223987499f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 2x3 matrix.  <a href=\"a00364.html#gab059d7b9fe2094acc563b7223987499f\">More...</a><br /></td></tr>\n<tr class=\"separator:gab059d7b9fe2094acc563b7223987499f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabbc811d1c52ed2b8cfcaff1378f75c69\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gabbc811d1c52ed2b8cfcaff1378f75c69\">GLM_ALIGNED_TYPEDEF</a> (f64mat2x4, aligned_f64mat2x4, 32)</td></tr>\n<tr class=\"memdesc:gabbc811d1c52ed2b8cfcaff1378f75c69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 2x4 matrix.  <a href=\"a00364.html#gabbc811d1c52ed2b8cfcaff1378f75c69\">More...</a><br /></td></tr>\n<tr class=\"separator:gabbc811d1c52ed2b8cfcaff1378f75c69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9ddf5212777734d2fd841a84439f3bdf\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga9ddf5212777734d2fd841a84439f3bdf\">GLM_ALIGNED_TYPEDEF</a> (f64mat3x2, aligned_f64mat3x2, 32)</td></tr>\n<tr class=\"memdesc:ga9ddf5212777734d2fd841a84439f3bdf\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 3x2 matrix.  <a href=\"a00364.html#ga9ddf5212777734d2fd841a84439f3bdf\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9ddf5212777734d2fd841a84439f3bdf\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gad1dda32ed09f94bfcf0a7d8edfb6cf13\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gad1dda32ed09f94bfcf0a7d8edfb6cf13\">GLM_ALIGNED_TYPEDEF</a> (f64mat3x3, aligned_f64mat3x3, 32)</td></tr>\n<tr class=\"memdesc:gad1dda32ed09f94bfcf0a7d8edfb6cf13\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 3x3 matrix.  <a href=\"a00364.html#gad1dda32ed09f94bfcf0a7d8edfb6cf13\">More...</a><br /></td></tr>\n<tr class=\"separator:gad1dda32ed09f94bfcf0a7d8edfb6cf13\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5875e0fa72f07e271e7931811cbbf31a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga5875e0fa72f07e271e7931811cbbf31a\">GLM_ALIGNED_TYPEDEF</a> (f64mat3x4, aligned_f64mat3x4, 32)</td></tr>\n<tr class=\"memdesc:ga5875e0fa72f07e271e7931811cbbf31a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 3x4 matrix.  <a href=\"a00364.html#ga5875e0fa72f07e271e7931811cbbf31a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5875e0fa72f07e271e7931811cbbf31a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga41e82cd6ac07f912ba2a2d45799dcf0d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga41e82cd6ac07f912ba2a2d45799dcf0d\">GLM_ALIGNED_TYPEDEF</a> (f64mat4x2, aligned_f64mat4x2, 32)</td></tr>\n<tr class=\"memdesc:ga41e82cd6ac07f912ba2a2d45799dcf0d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 4x2 matrix.  <a href=\"a00364.html#ga41e82cd6ac07f912ba2a2d45799dcf0d\">More...</a><br /></td></tr>\n<tr class=\"separator:ga41e82cd6ac07f912ba2a2d45799dcf0d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0892638d6ba773043b3d63d1d092622e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga0892638d6ba773043b3d63d1d092622e\">GLM_ALIGNED_TYPEDEF</a> (f64mat4x3, aligned_f64mat4x3, 32)</td></tr>\n<tr class=\"memdesc:ga0892638d6ba773043b3d63d1d092622e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 4x3 matrix.  <a href=\"a00364.html#ga0892638d6ba773043b3d63d1d092622e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0892638d6ba773043b3d63d1d092622e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga912a16432608b822f1e13607529934c1\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga912a16432608b822f1e13607529934c1\">GLM_ALIGNED_TYPEDEF</a> (f64mat4x4, aligned_f64mat4x4, 32)</td></tr>\n<tr class=\"memdesc:ga912a16432608b822f1e13607529934c1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned 4x4 matrix.  <a href=\"a00364.html#ga912a16432608b822f1e13607529934c1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga912a16432608b822f1e13607529934c1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gafd945a8ea86b042aba410e0560df9a3d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gafd945a8ea86b042aba410e0560df9a3d\">GLM_ALIGNED_TYPEDEF</a> (quat, aligned_quat, 16)</td></tr>\n<tr class=\"memdesc:gafd945a8ea86b042aba410e0560df9a3d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#gafd945a8ea86b042aba410e0560df9a3d\">More...</a><br /></td></tr>\n<tr class=\"separator:gafd945a8ea86b042aba410e0560df9a3d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga19c2ba545d1f2f36bcb7b60c9a228622\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga19c2ba545d1f2f36bcb7b60c9a228622\">GLM_ALIGNED_TYPEDEF</a> (quat, aligned_fquat, 16)</td></tr>\n<tr class=\"memdesc:ga19c2ba545d1f2f36bcb7b60c9a228622\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#ga19c2ba545d1f2f36bcb7b60c9a228622\">More...</a><br /></td></tr>\n<tr class=\"separator:ga19c2ba545d1f2f36bcb7b60c9a228622\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaabc28c84a3288b697605d4688686f9a9\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#gaabc28c84a3288b697605d4688686f9a9\">GLM_ALIGNED_TYPEDEF</a> (dquat, aligned_dquat, 32)</td></tr>\n<tr class=\"memdesc:gaabc28c84a3288b697605d4688686f9a9\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#gaabc28c84a3288b697605d4688686f9a9\">More...</a><br /></td></tr>\n<tr class=\"separator:gaabc28c84a3288b697605d4688686f9a9\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1ed8aeb5ca67fade269a46105f1bf273\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga1ed8aeb5ca67fade269a46105f1bf273\">GLM_ALIGNED_TYPEDEF</a> (f32quat, aligned_f32quat, 16)</td></tr>\n<tr class=\"memdesc:ga1ed8aeb5ca67fade269a46105f1bf273\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Single-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#ga1ed8aeb5ca67fade269a46105f1bf273\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1ed8aeb5ca67fade269a46105f1bf273\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga95cc03b8b475993fa50e05e38e203303\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">GLM_ALIGNED_TYPEDEF</a> (f64quat, aligned_f64quat, 32)</td></tr>\n<tr class=\"memdesc:ga95cc03b8b475993fa50e05e38e203303\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Double-qualifier floating-point aligned quaternion.  <a href=\"a00364.html#ga95cc03b8b475993fa50e05e38e203303\">More...</a><br /></td></tr>\n<tr class=\"separator:ga95cc03b8b475993fa50e05e38e203303\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00162.html\" title=\"GLM_GTX_type_aligned \">glm/gtx/type_aligned.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines aligned types. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gab5cd5c5fad228b25c782084f1cc30114\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6\">lowp_int8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_int8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5bb5dd895ef625c1b113f2cf400186b0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga698e36b01167fc0f037889334dce8def\">lowp_int16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_int16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac6efa54cf7c6c86f7158922abdb1a430\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02\">lowp_int32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_int32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6612eb77c8607048e7552279a11eeb5f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c\">lowp_int64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_int64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7ddc1848ff2223026db8968ce0c97497\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga119c41d73fe9977358174eb3ac1035a3\">lowp_int8_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_int8_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga22240dd9458b0f8c11fbcc4f48714f68\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a\">lowp_int16_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_int16_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8130ea381d76a2cc34a93ccbb6cf487d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga0350631d35ff800e6133ac6243b13cbc\">lowp_int32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_int32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7ccb60f3215d293fd62b33b31ed0e7be\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaebf341fc4a5be233f7dde962c2e33847\">lowp_int64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_int64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac20d508d2ef5cc95ad3daf083c57ec2a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga552a6bde5e75984efb0f863278da2e54\">lowp_i8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_i8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga50257b48069a31d0c8d9c1f644d267de\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7\">lowp_i16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_i16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa07e98e67b7a3435c0746018c7a2a839\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac\">lowp_i32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_i32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga62601fc6f8ca298b77285bedf03faffd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga354736e0c645099cd44c42fb2f87c2b8\">lowp_i64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_i64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac8cff825951aeb54dd846037113c72db\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e\">mediump_int8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_int8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga78f443d88f438575a62b5df497cdf66b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d\">mediump_int16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_int16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0680cd3b5d4e8006985fb41a4f9b57af\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga5244cef85d6e870e240c76428a262ae8\">mediump_int32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_int32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad9e5babb1dd3e3531b42c37bf25dd951\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga7b968f2b86a0442a89c7359171e1d866\">mediump_int64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_int64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga353fd9fa8a9ad952fcabd0d53ad9a6dd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga6d7b3789ecb932c26430009478cac7ae\">mediump_int8_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_int8_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2196442c0e5c5e8c77842de388c42521\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga80e72fe94c88498537e8158ba7591c54\">mediump_int16_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_int16_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1284488189daf897cf095c5eefad9744\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180\">mediump_int32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_int32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga73fdc86a539808af58808b7c60a1c4d8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64\">mediump_int64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_int64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafafeea923e1983262c972e2b83922d3b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gacf1ded173e1e2d049c511d095b259e21\">mediump_i8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_i8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4b35ca5fe8f55c9d2fe54fdb8d8896f4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a\">mediump_i16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_i16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga63b882e29170d428463d99c3d630acc6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaf5e94bf2a20af7601787c154751dc2e1\">mediump_i32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_i32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b20507bb048c1edea2d441cc953e6f0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f\">mediump_i64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_i64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga56c5ca60813027b603c7b61425a0479d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gad0549c902a96a7164e4ac858d5f39dbf\">highp_int8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_int8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7a751b3aff24c0259f4a7357c2969089\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718\">highp_int16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_int16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga70cd2144351c556469ee6119e59971fc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga84ed04b4e0de18c977e932d617e7c223\">highp_int32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_int32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga46bbf08dc004d8c433041e0b5018a5d3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga226a8d52b4e3f77aaa6231135e886aac\">highp_int64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_int64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab3e10c77a20d1abad2de1c561c7a5c18\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5\">highp_int8_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_int8_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga968f30319ebeaca9ebcd3a25a8e139fb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff\">highp_int16_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_int16_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaae773c28e6390c6aa76f5b678b7098a3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f\">highp_int32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_int32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga790cfff1ca39d0ed696ffed980809311\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga73c6abb280a45feeff60f9accaee91f3\">highp_int64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_int64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8265b91eb23c120a9b0c3e381bc37b96\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gacb88796f2d08ef253d0345aff20c3aee\">highp_i8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_i8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae6d384de17588d8edb894fbe06e0d410\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga0336abc2604dd2c20c30e036454b64f8\">highp_i16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_i16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9c8172b745ee03fc5b2b91c350c2922f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga727675ac6b5d2fc699520e0059735e25\">highp_i32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_i32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga77e0dff12aa4020ddc3f8cabbea7b2e6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd\">highp_i64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_i64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabd82b9faa9d4d618dbbe0fc8a1efee63\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga1b956fe1df85f3c132b21edb4e116458\">int8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_int8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga285649744560be21000cfd81bbb5d507\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9\">int16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_int16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga07732da630b2deda428ce95c0ecaf3ff\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#ga43d43196463bde49cb067f5c20ab8481\">int32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_int32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1a8da2a8c51f69c07a2e7f473aa420f4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00260.html#gaff5189f97f9e842d9636a0f240001b2e\">int64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_int64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga848aedf13e2d9738acf0bb482c590174\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga4bf09d8838a86866b39ee6e109341645\">int8_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_int8_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafd2803d39049dd45a37a63931e25d943\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede\">int16_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_int16_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae553b33349d6da832cf0724f1e024094\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710\">int32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_int32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga16d223a2b3409e812e1d3bd87f0e9e5c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga322a7d7d2c2c68994dc872a33de63c61\">int64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_int64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2de065d2ddfdb366bcd0febca79ae2ad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga302ec977b0c0c3ea245b6c9275495355\">i8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabd786bdc20a11c8cb05c92c8212e28d3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699\">i16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad4aefe56691cdb640c72f0d46d3fb532\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb\">i32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8fe9745f7de24a8394518152ff9fccdc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gadb997e409103d4da18abd837e636a496\">i64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaad735483450099f7f882d4e3a3569bd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00272.html#gaedd0562c2e77714929d7723a7e2e0dba\">ivec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga76298aed82a439063c3d55980c84aa0b\">aligned_ivec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac7b6f823802edbd6edbaf70ea25bf068\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560\">ivec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#gae4f38fd2c86cee6940986197777b3ca4\">aligned_ivec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3e235bcd2b8029613f25b8d40a2d3ef7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gad0d784d8eee201aca362484d2daee46c\">ivec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga32794322d294e5ace7fed4a61896f270\">aligned_ivec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga50d8a9523968c77f8325b4c9bfbff41e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga5abb4603dae0ce58c595e66d9123d812\">ivec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga7f79eae5927c9033d84617e49f6f34e4\">aligned_ivec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9ec20fdfb729c702032da9378c79679f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b\">i8vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i8vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga25b3fe1d9e8d0a5e86c1949c1acd8131\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gad06935764d78f43f9d542c784c2212ec\">i8vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i8vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit signed integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2958f907719d94d8109b562540c910e2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e\">i8vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i8vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit signed integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1fe6fc032a978f1c845fac9aa0668714\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga4177a44206121dabc8c4ff1c0f544574\">i8vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i8vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit signed integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa4161e7a496dc96972254143fe873e55\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gafe730798732aa7b0647096a004db1b1c\">i16vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i16vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9d7cb211ccda69b1c22ddeeb0f3e7aba\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2996630ba7b10535af8e065cf326f761\">i16vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i16vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit signed integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaee91dd2ab34423bcc11072ef6bd0f02\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b\">i16vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i16vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit signed integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga49f047ccaa8b31fad9f26c67bf9b3510\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga550831bfc26d1e0101c1cb3d79938c06\">i16vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i16vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit signed integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga904e9c2436bb099397c0823506a0771f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf\">i32vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i32vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf90651cf2f5e7ee2b11cfdc5a6749534\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga8b44026374982dcd1e52d22bac99247e\">i32vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i32vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7354a4ead8cb17868aec36b9c30d6010\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e\">i32vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i32vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad2ecbdea18732163e2636e27b37981ee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga866a05905c49912309ed1fa5f5980e61\">i32vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i32vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit signed integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga965b1c9aa1800e93d4abc2eb2b5afcbf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50\">i64vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i64vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit signed integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1f9e9c2ea2768675dff9bae5cde2d829\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga48310188e1d0c616bf8d78c92447523b\">i64vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i64vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit signed integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad77c317b7d942322cd5be4c8127b3187\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga667948cfe6fb3d6606c750729ec49f77\">i64vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i64vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit signed integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga716f8ea809bdb11b5b542d8b71aeb04f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa4e31c3d9de067029efeb161a44b0232\">i64vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_i64vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit signed integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad46f8e9082d5878b1bc04f9c1471cdaa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaf49470869e9be2c059629b250619804e\">lowp_uint8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_uint8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1246094581af624aca6c7499aaabf801\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gad68bfd9f881856fc863a6ebca0b67f78\">lowp_uint16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_uint16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7a5009a1d0196bbf21dd7518f61f0249\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b\">lowp_uint32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_uint32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga45213fd18b3bb1df391671afefe4d1e7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa212b805736a759998e312cbdd550fae\">lowp_uint64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_uint64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0ba26b4e3fd9ecbc25358efd68d8a4ca\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga667b2ece2b258be898812dc2177995d1\">lowp_uint8_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_uint8_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf2b58f5fb6d4ec8ce7b76221d3af43e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga91c4815f93177eb423362fd296a87e9f\">lowp_uint16_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_uint16_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadc246401847dcba155f0699425e49dcd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaf1b735b4b1145174f4e4167d13778f9b\">lowp_uint32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_uint32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaace64bddf51a9def01498da9a94fb01c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153\">lowp_uint64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_uint64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad7bb97c29d664bd86ffb1bed4abc5534\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga1b09f03da7ac43055c68a349d5445083\">lowp_u8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_u8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga404bba7785130e0b1384d695a9450b28\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126\">lowp_u16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_u16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga31ba41fd896257536958ec6080203d2a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga4f072ada9552e1e480bbb3b1acde5250\">lowp_u32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_u32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacca5f13627f57b3505676e40a6e43e5e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed\">lowp_u64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_lowp_u64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Low qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5faf1d3e70bf33174dd7f3d01d5b883b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3\">mediump_uint8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_uint8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga727e2bf2c433bb3b0182605860a48363\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2885a6c89916911e418c06bb76b9bdbb\">mediump_uint16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_uint16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga12566ca66d5962dadb4a5eb4c74e891e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f\">mediump_uint32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_uint32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7b66a97a8acaa35c5a377b947318c6bc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga30652709815ad9404272a31957daa59e\">mediump_uint64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_uint64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa9cde002439b74fa66120a16a9f55fcc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gadfe65c78231039e90507770db50c98c7\">mediump_uint8_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_uint8_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1ca98c67f7d1e975f7c5202f1da1df1f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e\">mediump_uint16_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_uint16_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1dc8bc6199d785f235576948d80a597c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaf4dae276fd29623950de14a6ca2586b5\">mediump_uint32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_uint32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad14a0f2ec93519682b73d70b8e401d81\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9\">mediump_uint64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_uint64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gada8b996eb6526dc1ead813bd49539d1b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gad1213a22bbb9e4107f07eaa4956f8281\">mediump_u8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_u8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga28948f6bfb52b42deb9d73ae1ea8d8b0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga9df98857be695d5a30cb30f5bfa38a80\">mediump_u16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_u16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad6a7c0b5630f89d3f1c5b4ef2919bb4c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga1bd0e914158bf03135f8a317de6debe9\">mediump_u32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_u32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa0fc531cbaa972ac3a0b86d21ef4a7fa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2af9490085ae3bdf36a544e9dd073610\">mediump_u64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_mediump_u64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Medium qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0ee829f7b754b262bbfe6317c0d678ac\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga97432f9979e73e66567361fd01e4cffb\">highp_uint8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_uint8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga447848a817a626cae08cedc9778b331c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga746dc6da204f5622e395f492997dbf57\">highp_uint16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_uint16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6027ae13b2734f542a6e7beee11b8820\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3\">highp_uint32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_uint32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2aca46c8608c95ef991ee4c332acde5f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce\">highp_uint64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_uint64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaff50b10dd1c48be324fdaffd18e2c7ea\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5\">highp_uint8_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_uint8_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9fc4421dbb833d5461e6d4e59dcfde55\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7\">highp_uint16_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_uint16_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga329f1e2b94b33ba5e3918197030bcf03\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gae978599c9711ac263ba732d4ac225b0e\">highp_uint32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_uint32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga71e646f7e301aa422328194162c9c998\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08\">highp_uint64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_uint64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8942e09f479489441a7a5004c6d8cb66\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c\">highp_u8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_u8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaab32497d6e4db16ee439dbedd64c5865\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga8e62c883d13f47015f3b70ed88751369\">highp_u16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_u16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaaadbb34952eca8e3d7fe122c3e167742\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf\">highp_u32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_u32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga92024d27c74a3650afb55ec8e024ed25\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga0c181fdf06a309691999926b6690c969\">highp_u64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_highp_u64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>High qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabde1d0b4072df35453db76075ab896a6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gadde6aaee8457bee49c2a92621fe22b79\">uint8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_uint8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga06c296c9e398b294c8c9dd2a7693dcbb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e\">uint16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_uint16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacf1744488c96ebd33c9f36ad33b2010a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#ga1134b580f8da4de94ca6b1de4d37975e\">uint32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_uint32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3328061a64c20ba59d5f9da24c2cd059\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00263.html#gab630f76c26b50298187f7889104d4b9c\">uint64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_uint64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf6ced36f13bae57f377bafa6f5fcc299\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga28d97808322d3c92186e4a0c067d7e8e\">uint8_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_uint8_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafbc7fb7847bfc78a339d1d371c915c73\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga91f91f411080c37730856ff5887f5bcf\">uint16_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_uint16_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa86bc56a73fd8120b1121b5f5e6245ae\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac\">uint32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_uint32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga68c0b9e669060d0eb5ab8c3ddeb483d8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee\">uint64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_uint64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4f3bab577daf3343e99cc005134bce86\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaecc7082561fc9028b844b6cf3d305d36\">u8</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u8&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga13a2391339d0790d43b76d00a7611c4f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa2d7acc0adb536fab71fe261232a40ff\">u16</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u16&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga197570e03acbc3d18ab698e342971e8f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga8165913e068444f7842302d40ba897b9\">u32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0f033b21e145a1faa32c62ede5878993\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaf3f312156984c365e9f65620354da70b\">u64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga509af83527f5cd512e9a7873590663aa\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00276.html#gac3bdd96183d23876c58a1424585fefe7\">uvec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548\">aligned_uvec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga94e86186978c502c6dc0c0d9c4a30679\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga074137e3be58528d67041c223d49f398\">aligned_uvec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5cec574686a7f3c8ed24bb195c5e2d0a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418\">uvec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0\">aligned_uvec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga47edfdcee9c89b1ebdaf20450323b1d4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gaa57e96bb337867329d5f43bcc27c1095\">uvec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#gabf842c45eea186170c267a328e3f3b7d\">aligned_uvec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5611d6718e3a00096918a64192e73a45\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga29b349e037f0b24320b4548a143daee2\">u8vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u8vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">1&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga19837e6f72b60d994a805ef564c6c326\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611\">u8vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u8vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9740cf8e34f068049b42a2753f9601c2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2\">u8vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u8vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8b8588bb221448f5541a858903822a57\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga20779a61de2fd526a17f12fe53ec46b1\">u8vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u8vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 8 bit unsigned integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga991abe990c16de26b2129d6bc2f4c051\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5\">u16vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u16vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">2&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac01bb9fc32a1cd76c2b80d030f71df4c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2a78447eb9d66a114b193f4a25899c16\">u16vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u16vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga09540dbca093793a36a8997e0d4bee77\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga1c522ca821c27b862fe51cf4024b064b\">u16vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u16vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaecafb5996f5a44f57e34d29c8670741e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga529496d75775fb656a07993ea9af2450\">u16vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u16vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 16 bit unsigned integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac6b161a04d2f8408fe1c9d857e8daac0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gae627372cfd5f20dd87db490387b71195\">u32vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u32vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1fa0dfc8feb0fa17dab2acd43e05342b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2a266e46ee218d0c680f12b35c500cc0\">u32vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u32vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0019500abbfa9c66eff61ca75eaaed94\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gae267358ff2a41d156d97f5762630235a\">u32vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u32vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga14fd29d01dae7b08a04e9facbcc18824\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga31cef34e4cd04840c54741ff2f7005f0\">u32vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u32vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 32 bit unsigned integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab253845f534a67136f9619843cade903\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd\">u64vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u64vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer aligned scalar type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga929427a7627940cdf3304f9c050b677d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5\">u64vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u64vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer aligned vector of 2 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae373b6c04fdf9879f33d63e6949c037e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga489b89ba93d4f7b3934df78debc52276\">u64vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u64vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer aligned vector of 3 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga53a8a03dca2015baec4584f45b8e9cdc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3945dd6515d4498cb603e65ff867ab03\">u64vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_u64vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Default qualifier 64 bit unsigned integer aligned vector of 4 components type. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab3301bae94ef5bf59fbdd9a24e7d2a01\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">float32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_float32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit single-qualifier floating-point aligned scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gada9b0bea273d3ae0286f891533b9568f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa4947bc8b47c72fceea9bda730ecf603\">float32_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_float32_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit single-qualifier floating-point aligned scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadbce23b9f23d77bb3884e289a574ebd5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1\">float32</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>32 bit single-qualifier floating-point aligned scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga75930684ff2233171c573e603f216162\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">float64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_float64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit double-qualifier floating-point aligned scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6e3a2d83b131336219a0f4c7cbba2a48\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga728366fef72cd96f0a5fa6429f05469e\">float64_t</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_float64_t&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit double-qualifier floating-point aligned scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa4deaa0dea930c393d55e7a4352b0a20\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80\">float64</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>64 bit double-qualifier floating-point aligned scalar. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga81bc497b2bfc6f80bab690c6ee28f0f9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00270.html#gadfc071d934d8dae7955a1d530a3cf656\">vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga05e6d4c908965d04191c2070a8d0a65e\">aligned_vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gada3e8f783e9d4b90006695a16c39d4d4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga0682462f8096a226773e20fac993cde5\">aligned_vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab8d081fac3a38d6f55fa552f32168d32\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga9c3019b13faf179e4ad3626ea66df334\">vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0\">aligned_vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga12fe7b9769c964c5b48dcfd8b7f40198\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga85d89e83cb8137e1be1446de8c3b643a\">aligned_vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaefab04611c7f8fe1fd9be3071efea6cc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f\">fvec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fvec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2543c05ba19b3bd19d45b1227390c5b4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga24273aa02abaecaab7f160bac437a339\">fvec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fvec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga009afd727fd657ef33a18754d6d28f60\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga89930533646b30d021759298aa6bf04a\">fvec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fvec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2f26177e74bfb301a3d0e02ec3c3ef53\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga713c796c54875cf4092d42ff9d9096b0\">fvec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fvec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga309f495a1d6b75ddf195b674b65cb1e4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga701f32ab5b3fb06996b41f5c0d643805\">f32vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">4&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5e185865a2217d0cd47187644683a8c3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8\">f32vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gade4458b27b039b9ca34f8ec049f3115a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79\">f32vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8\">f32vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3e0f35fa0c626285a8bad41707e7316c\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00268.html#ga6221af17edc2d4477a4583d2cd53e569\">dvec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga4974f46ae5a19415d91316960a53617a\">aligned_dvec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga78bfec2f185d1d365ea0a9ef1e3d45b8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga8b09c71aaac7da7867ae58377fe219a8\">dvec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0\">aligned_dvec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga01fe6fee6db5df580b6724a7e681f069\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0\">dvec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0\">aligned_dvec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga687d5b8f551d5af32425c0b2fba15e99\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac\">dvec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5\">aligned_dvec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8e842371d46842ff8f1813419ba49d0f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gade502df1ce14f837fae7f60a03ddb9b0\">f64vec1</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64vec1&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">8&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned vector of 1 component. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga32814aa0f19316b43134fc25f2aad2b9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gadc4e1594f9555d919131ee02b17822a2\">f64vec2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64vec2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned vector of 2 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf3d3bbc1e93909b689123b085e177a14\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa7a1ddca75c5f629173bf4772db7a635\">f64vec3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64vec3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned vector of 3 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga804c654cead1139bd250f90f9bb01fad\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga66e92e57260bdb910609b9a56bf83e97\">f64vec4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64vec4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned vector of 4 components. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacce4ac532880b8c7469d3c31974420a1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba\">mat2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9\">aligned_mat2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> Single-qualifier floating-point aligned 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0498e0e249a6faddaf96aa55d7f81c3b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00283.html#gaefb0fc7a4960b782c18708bb6b655262\">mat3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714\">aligned_mat3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7435d87de82a0d652b35dc5b9cc718d5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00283.html#ga0db98d836c5549d31cf64ecd043b7af7\">mat4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8\">aligned_mat4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga719da577361541a4c43a2dd1d0e361e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">fmat2x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> Single-qualifier floating-point aligned 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6e7ee4f541e1d7db66cd1a224caacafb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">fmat3x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae5d672d359f2a39f63f98c7975057486\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">fmat4x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6fa2df037dbfc5fe8c8e0b4db8a34953\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3350c93c3275298f940a42875388e4b4\">fmat2x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat2x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> Single-qualifier floating-point aligned 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0743b4f4f69a3227b82ff58f6abbad62\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga55a2d2a8eb09b5633668257eb3cad453\">fmat2x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat2x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1a76b325fdf70f961d835edd182c63dd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga681381f19f11c9e5ee45cda2c56937ff\">fmat2x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat2x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4b4e181cd041ba28c3163e7b8074aef0\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f\">fmat3x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat3x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga27b13f465abc8a40705698145e222c3f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaa07c86650253672a19dbfb898f3265b8\">fmat3x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat3x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2608d19cc275830a6f8c0b6405625a4f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga44e158af77a670ee1b58c03cda9e1619\">fmat3x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat3x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga93f09768241358a287c4cca538f1f7e7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774\">fmat4x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat4x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7c117e3ecca089e10247b1d41d88aff9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga4295048a78bdf46b8a7de77ec665b497\">fmat4x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat4x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga07c75cd04ba42dc37fa3e105f89455c5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3\">fmat4x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fmat4x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga65ff0d690a34a4d7f46f9b2eb51525ee\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">f32mat2x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> Single-qualifier floating-point aligned 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadd8ddbe2bf65ccede865ba2f510176dc\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">f32mat3x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf18dbff14bf13d3ff540c517659ec045\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">f32mat4x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga66339f6139bf7ff19e245beb33f61cc8\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga04100c76f7d55a0dd0983ccf05142bff\">f32mat2x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat2x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> Single-qualifier floating-point aligned 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1558a48b3934011b52612809f443e46d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gab256cdab5eb582e426d749ae77b5b566\">f32mat2x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat2x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa52e5732daa62851627021ad551c7680\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8\">f32mat2x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat2x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac09663c42566bcb58d23c6781ac4e85a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga1320a08e14fdff3821241eefab6947e9\">f32mat3x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat3x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3f510999e59e1b309113e1d561162b29\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga65261fa8a21045c8646ddff114a56174\">f32mat3x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat3x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2c9c94f0c89cd71ce56551db6cf4aaec\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d\">f32mat3x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat3x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga99ce8274c750fbfdf0e70c95946a2875\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20\">f32mat4x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat4x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9476ef66790239df53dbe66f3989c3b5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga239b96198771b7add8eea7e6b59840c0\">f32mat4x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat4x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacc429b3b0b49921e12713b6d31e14e1d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3\">f32mat4x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32mat4x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga88f6c6fa06e6e64479763e69444669cf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">f64mat2x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> Double-qualifier floating-point aligned 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaae8e4639c991e64754145ab8e4c32083\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">f64mat3x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6e9094f3feb3b5b49d0f83683a101fde\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">f64mat4x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadbd2c639c03de1c3e9591b5a39f65559\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37\">f64mat2x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat2x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 1x1 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> Double-qualifier floating-point aligned 2x2 matrix. </dd>\n<dd>\n<a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab059d7b9fe2094acc563b7223987499f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a\">f64mat2x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat2x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 2x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabbc811d1c52ed2b8cfcaff1378f75c69\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gac87278e0c702ba8afff76316d4eeb769\">f64mat2x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat2x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 2x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9ddf5212777734d2fd841a84439f3bdf\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7\">f64mat3x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat3x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 3x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gad1dda32ed09f94bfcf0a7d8edfb6cf13\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185\">f64mat3x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat3x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 3x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5875e0fa72f07e271e7931811cbbf31a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675\">f64mat3x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat3x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 3x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga41e82cd6ac07f912ba2a2d45799dcf0d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512\">f64mat4x2</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat4x2&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 4x2 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0892638d6ba773043b3d63d1d092622e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110\">f64mat4x3</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat4x3&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 4x3 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga912a16432608b822f1e13607529934c1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e\">f64mat4x4</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64mat4x4&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned 4x4 matrix. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gafd945a8ea86b042aba410e0560df9a3d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">quat</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_quat&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga19c2ba545d1f2f36bcb7b60c9a228622\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00252.html#gab0b441adb4509bc58d2946c2239a8942\">quat</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_fquat&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaabc28c84a3288b697605d4688686f9a9\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00249.html#ga1181459aa5d640a3ea43861b118f3f0b\">dquat</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_dquat&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1ed8aeb5ca67fade269a46105f1bf273\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga38e674196ba411d642be40c47bf33939\">f32quat</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f32quat&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">16&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Single-qualifier floating-point aligned quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga95cc03b8b475993fa50e05e38e203303\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">glm::GLM_ALIGNED_TYPEDEF </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00304.html#ga2b114a2f2af0fe1dfeb569c767822940\">f64quat</a>&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">aligned_f64quat&#160;</td>\n          <td class=\"paramname\">, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">32&#160;</td>\n          <td class=\"paramname\">&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Double-qualifier floating-point aligned quaternion. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00364.html\" title=\"Include <glm/gtx/type_aligned.hpp> to use the features of this extension. \">GLM_GTX_type_aligned</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00365.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_type_trait</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_type_trait<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00177.html\" title=\"GLM_GTX_type_trait \">glm/gtx/type_trait.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00177.html\" title=\"GLM_GTX_type_trait \">glm/gtx/type_trait.hpp</a>&gt; to use the features of this extension. </p>\n<p>Defines traits for each type. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00366.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_vec_swizzle</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_vec_swizzle<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00187.html\" title=\"GLM_GTX_vec_swizzle \">glm/gtx/vec_swizzle.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<p>Include &lt;<a class=\"el\" href=\"a00187.html\" title=\"GLM_GTX_vec_swizzle \">glm/gtx/vec_swizzle.hpp</a>&gt; to use the features of this extension. </p>\n<p>Functions to perform swizzle operation. </p>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00367.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_vector_angle</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_vector_angle<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00188.html\" title=\"GLM_GTX_vector_angle \">glm/gtx/vector_angle.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga2e2917b4cb75ca3d043ac15ff88f14e1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2e2917b4cb75ca3d043ac15ff88f14e1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1\">angle</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga2e2917b4cb75ca3d043ac15ff88f14e1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the absolute angle between two vectors.  <a href=\"a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e2917b4cb75ca3d043ac15ff88f14e1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga9556a803dce87fe0f42fdabe4ebba1d5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga9556a803dce87fe0f42fdabe4ebba1d5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00367.html#ga9556a803dce87fe0f42fdabe4ebba1d5\">orientedAngle</a> (vec&lt; 2, T, Q &gt; const &amp;x, vec&lt; 2, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga9556a803dce87fe0f42fdabe4ebba1d5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the oriented angle between two 2d vectors.  <a href=\"a00367.html#ga9556a803dce87fe0f42fdabe4ebba1d5\">More...</a><br /></td></tr>\n<tr class=\"separator:ga9556a803dce87fe0f42fdabe4ebba1d5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga706fce3d111f485839756a64f5a48553\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga706fce3d111f485839756a64f5a48553\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00367.html#ga706fce3d111f485839756a64f5a48553\">orientedAngle</a> (vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, vec&lt; 3, T, Q &gt; const &amp;ref)</td></tr>\n<tr class=\"memdesc:ga706fce3d111f485839756a64f5a48553\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the oriented angle between two 3d vectors based from a reference axis.  <a href=\"a00367.html#ga706fce3d111f485839756a64f5a48553\">More...</a><br /></td></tr>\n<tr class=\"separator:ga706fce3d111f485839756a64f5a48553\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00188.html\" title=\"GLM_GTX_vector_angle \">glm/gtx/vector_angle.hpp</a>&gt; to use the features of this extension. </p>\n<p>Compute angle between vectors </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga2e2917b4cb75ca3d043ac15ff88f14e1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::angle </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the absolute angle between two vectors. </p>\n<p>Parameters need to be normalized. </p><dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00367.html\" title=\"Include <glm/gtx/vector_angle.hpp> to use the features of this extension. \">GLM_GTX_vector_angle</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga9556a803dce87fe0f42fdabe4ebba1d5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::orientedAngle </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 2, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the oriented angle between two 2d vectors. </p>\n<p>Parameters need to be normalized. </p><dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00367.html\" title=\"Include <glm/gtx/vector_angle.hpp> to use the features of this extension. \">GLM_GTX_vector_angle</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga706fce3d111f485839756a64f5a48553\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::orientedAngle </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; 3, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>ref</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the oriented angle between two 3d vectors based from a reference axis. </p>\n<p>Parameters need to be normalized. </p><dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00367.html\" title=\"Include <glm/gtx/vector_angle.hpp> to use the features of this extension. \">GLM_GTX_vector_angle</a> extension. </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00368.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_vector_query</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_vector_query<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00223.html\" title=\"GLM_GTX_vector_query \">glm/gtx/vector_query.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga13da4a787a2ff70e95d561fb19ff91b4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga13da4a787a2ff70e95d561fb19ff91b4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4\">areCollinear</a> (vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga13da4a787a2ff70e95d561fb19ff91b4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether two vectors are collinears.  <a href=\"a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4\">More...</a><br /></td></tr>\n<tr class=\"separator:ga13da4a787a2ff70e95d561fb19ff91b4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7b95b3f798e3c293262b2bdaad47c57\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac7b95b3f798e3c293262b2bdaad47c57\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#gac7b95b3f798e3c293262b2bdaad47c57\">areOrthogonal</a> (vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gac7b95b3f798e3c293262b2bdaad47c57\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether two vectors are orthogonals.  <a href=\"a00368.html#gac7b95b3f798e3c293262b2bdaad47c57\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7b95b3f798e3c293262b2bdaad47c57\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1b091c3d7f9ee3b0708311c001c293e3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga1b091c3d7f9ee3b0708311c001c293e3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3\">areOrthonormal</a> (vec&lt; L, T, Q &gt; const &amp;v0, vec&lt; L, T, Q &gt; const &amp;v1, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:ga1b091c3d7f9ee3b0708311c001c293e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether two vectors are orthonormal.  <a href=\"a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1b091c3d7f9ee3b0708311c001c293e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf6ec1688eab7442fe96fe4941d5d4e76\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf6ec1688eab7442fe96fe4941d5d4e76\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76\">isCompNull</a> (vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gaf6ec1688eab7442fe96fe4941d5d4e76\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether a each component of a vector is null.  <a href=\"a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf6ec1688eab7442fe96fe4941d5d4e76\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac3c974f459fd75453134fad7ae89a39e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac3c974f459fd75453134fad7ae89a39e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#gac3c974f459fd75453134fad7ae89a39e\">isNormalized</a> (vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gac3c974f459fd75453134fad7ae89a39e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether a vector is normalized.  <a href=\"a00368.html#gac3c974f459fd75453134fad7ae89a39e\">More...</a><br /></td></tr>\n<tr class=\"separator:gac3c974f459fd75453134fad7ae89a39e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4a3637dbcb4bb42dc55caea7a1e0495\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab4a3637dbcb4bb42dc55caea7a1e0495\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495\">isNull</a> (vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)</td></tr>\n<tr class=\"memdesc:gab4a3637dbcb4bb42dc55caea7a1e0495\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Check whether a vector is null.  <a href=\"a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495\">More...</a><br /></td></tr>\n<tr class=\"separator:gab4a3637dbcb4bb42dc55caea7a1e0495\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00223.html\" title=\"GLM_GTX_vector_query \">glm/gtx/vector_query.hpp</a>&gt; to use the features of this extension. </p>\n<p>Query informations of vector types </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga13da4a787a2ff70e95d561fb19ff91b4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::areCollinear </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Check whether two vectors are collinears. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00368.html\" title=\"Include <glm/gtx/vector_query.hpp> to use the features of this extension. \">GLM_GTX_vector_query</a> extensions. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac7b95b3f798e3c293262b2bdaad47c57\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::areOrthogonal </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Check whether two vectors are orthogonals. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00368.html\" title=\"Include <glm/gtx/vector_query.hpp> to use the features of this extension. \">GLM_GTX_vector_query</a> extensions. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1b091c3d7f9ee3b0708311c001c293e3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::areOrthonormal </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v0</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v1</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Check whether two vectors are orthonormal. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00368.html\" title=\"Include <glm/gtx/vector_query.hpp> to use the features of this extension. \">GLM_GTX_vector_query</a> extensions. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf6ec1688eab7442fe96fe4941d5d4e76\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, bool, Q&gt; glm::isCompNull </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Check whether a each component of a vector is null. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00368.html\" title=\"Include <glm/gtx/vector_query.hpp> to use the features of this extension. \">GLM_GTX_vector_query</a> extensions. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac3c974f459fd75453134fad7ae89a39e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isNormalized </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Check whether a vector is normalized. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00368.html\" title=\"Include <glm/gtx/vector_query.hpp> to use the features of this extension. \">GLM_GTX_vector_query</a> extensions. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab4a3637dbcb4bb42dc55caea7a1e0495\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL bool glm::isNull </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">T const &amp;&#160;</td>\n          <td class=\"paramname\"><em>epsilon</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Check whether a vector is null. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00368.html\" title=\"Include <glm/gtx/vector_query.hpp> to use the features of this extension. \">GLM_GTX_vector_query</a> extensions. </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00369.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: GLM_GTX_wrap</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">GLM_GTX_wrap<div class=\"ingroups\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Include &lt;<a class=\"el\" href=\"a00235.html\" title=\"GLM_GTX_wrap \">glm/gtx/wrap.hpp</a>&gt; to use the features of this extension.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga6c0cc6bd1d67ea1008d2592e998bad33\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga6c0cc6bd1d67ea1008d2592e998bad33\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33\">clamp</a> (genType const &amp;Texcoord)</td></tr>\n<tr class=\"memdesc:ga6c0cc6bd1d67ea1008d2592e998bad33\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simulate GL_CLAMP OpenGL wrap mode.  <a href=\"a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6c0cc6bd1d67ea1008d2592e998bad33\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa6856a0a048d2749252848da35e10c8b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:gaa6856a0a048d2749252848da35e10c8b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html#gaa6856a0a048d2749252848da35e10c8b\">mirrorClamp</a> (genType const &amp;Texcoord)</td></tr>\n<tr class=\"memdesc:gaa6856a0a048d2749252848da35e10c8b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simulate GL_MIRRORED_REPEAT OpenGL wrap mode.  <a href=\"a00369.html#gaa6856a0a048d2749252848da35e10c8b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa6856a0a048d2749252848da35e10c8b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga16a89b0661b60d5bea85137bbae74d73\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga16a89b0661b60d5bea85137bbae74d73\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html#ga16a89b0661b60d5bea85137bbae74d73\">mirrorRepeat</a> (genType const &amp;Texcoord)</td></tr>\n<tr class=\"memdesc:ga16a89b0661b60d5bea85137bbae74d73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simulate GL_MIRROR_REPEAT OpenGL wrap mode.  <a href=\"a00369.html#ga16a89b0661b60d5bea85137bbae74d73\">More...</a><br /></td></tr>\n<tr class=\"separator:ga16a89b0661b60d5bea85137bbae74d73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga809650c6310ea7c42666e918c117fb6f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga809650c6310ea7c42666e918c117fb6f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL genType&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00369.html#ga809650c6310ea7c42666e918c117fb6f\">repeat</a> (genType const &amp;Texcoord)</td></tr>\n<tr class=\"memdesc:ga809650c6310ea7c42666e918c117fb6f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Simulate GL_REPEAT OpenGL wrap mode.  <a href=\"a00369.html#ga809650c6310ea7c42666e918c117fb6f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga809650c6310ea7c42666e918c117fb6f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Include &lt;<a class=\"el\" href=\"a00235.html\" title=\"GLM_GTX_wrap \">glm/gtx/wrap.hpp</a>&gt; to use the features of this extension. </p>\n<p>Wrapping mode of texture coordinates. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga6c0cc6bd1d67ea1008d2592e998bad33\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::clamp </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Texcoord</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Simulate GL_CLAMP OpenGL wrap mode. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00369.html\" title=\"Include <glm/gtx/wrap.hpp> to use the features of this extension. \">GLM_GTX_wrap</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa6856a0a048d2749252848da35e10c8b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::mirrorClamp </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Texcoord</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Simulate GL_MIRRORED_REPEAT OpenGL wrap mode. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00369.html\" title=\"Include <glm/gtx/wrap.hpp> to use the features of this extension. \">GLM_GTX_wrap</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga16a89b0661b60d5bea85137bbae74d73\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::mirrorRepeat </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Texcoord</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Simulate GL_MIRROR_REPEAT OpenGL wrap mode. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00369.html\" title=\"Include <glm/gtx/wrap.hpp> to use the features of this extension. \">GLM_GTX_wrap</a> extension. </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga809650c6310ea7c42666e918c117fb6f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL genType glm::repeat </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Texcoord</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Simulate GL_REPEAT OpenGL wrap mode. </p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00369.html\" title=\"Include <glm/gtx/wrap.hpp> to use the features of this extension. \">GLM_GTX_wrap</a> extension. </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00370.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Integer functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Integer functions<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides GLSL functions on integer types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga44abfe3379e11cbd29425a843420d0d6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genType &gt; </td></tr>\n<tr class=\"memitem:ga44abfe3379e11cbd29425a843420d0d6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga44abfe3379e11cbd29425a843420d0d6\">bitCount</a> (genType v)</td></tr>\n<tr class=\"memdesc:ga44abfe3379e11cbd29425a843420d0d6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the number of bits set to 1 in the binary representation of value.  <a href=\"a00370.html#ga44abfe3379e11cbd29425a843420d0d6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga44abfe3379e11cbd29425a843420d0d6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5\">bitCount</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the number of bits set to 1 in the binary representation of value.  <a href=\"a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5\">More...</a><br /></td></tr>\n<tr class=\"separator:gaac7b15e40bdea8d9aa4c4cb34049f7b5\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga346b25ab11e793e91a4a69c8aa6819f2\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga346b25ab11e793e91a4a69c8aa6819f2\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2\">bitfieldExtract</a> (vec&lt; L, T, Q &gt; const &amp;Value, int Offset, int Bits)</td></tr>\n<tr class=\"memdesc:ga346b25ab11e793e91a4a69c8aa6819f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of the result.  <a href=\"a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga346b25ab11e793e91a4a69c8aa6819f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2e82992340d421fadb61a473df699b20\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga2e82992340d421fadb61a473df699b20\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga2e82992340d421fadb61a473df699b20\">bitfieldInsert</a> (vec&lt; L, T, Q &gt; const &amp;Base, vec&lt; L, T, Q &gt; const &amp;Insert, int Offset, int Bits)</td></tr>\n<tr class=\"memdesc:ga2e82992340d421fadb61a473df699b20\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the insertion the bits least-significant bits of insert into base.  <a href=\"a00370.html#ga2e82992340d421fadb61a473df699b20\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2e82992340d421fadb61a473df699b20\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga750a1d92464489b7711dee67aa3441b6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga750a1d92464489b7711dee67aa3441b6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga750a1d92464489b7711dee67aa3441b6\">bitfieldReverse</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga750a1d92464489b7711dee67aa3441b6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the reversal of the bits of value.  <a href=\"a00370.html#ga750a1d92464489b7711dee67aa3441b6\">More...</a><br /></td></tr>\n<tr class=\"separator:ga750a1d92464489b7711dee67aa3441b6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf74c4d969fa34ab8acb9d390f5ca5274\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:gaf74c4d969fa34ab8acb9d390f5ca5274\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gaf74c4d969fa34ab8acb9d390f5ca5274\">findLSB</a> (genIUType x)</td></tr>\n<tr class=\"memdesc:gaf74c4d969fa34ab8acb9d390f5ca5274\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the least significant bit set to 1 in the binary representation of value.  <a href=\"a00370.html#gaf74c4d969fa34ab8acb9d390f5ca5274\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf74c4d969fa34ab8acb9d390f5ca5274\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4454c0331d6369888c28ab677f4810c7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4454c0331d6369888c28ab677f4810c7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga4454c0331d6369888c28ab677f4810c7\">findLSB</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga4454c0331d6369888c28ab677f4810c7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the least significant bit set to 1 in the binary representation of value.  <a href=\"a00370.html#ga4454c0331d6369888c28ab677f4810c7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4454c0331d6369888c28ab677f4810c7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7e4a794d766861c70bc961630f8ef621\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;typename genIUType &gt; </td></tr>\n<tr class=\"memitem:ga7e4a794d766861c70bc961630f8ef621\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL int&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga7e4a794d766861c70bc961630f8ef621\">findMSB</a> (genIUType x)</td></tr>\n<tr class=\"memdesc:ga7e4a794d766861c70bc961630f8ef621\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the most significant bit in the binary representation of value.  <a href=\"a00370.html#ga7e4a794d766861c70bc961630f8ef621\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7e4a794d766861c70bc961630f8ef621\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga39ac4d52028bb6ab08db5ad6562c2872\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga39ac4d52028bb6ab08db5ad6562c2872\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, int, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872\">findMSB</a> (vec&lt; L, T, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga39ac4d52028bb6ab08db5ad6562c2872\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the bit number of the most significant bit in the binary representation of value.  <a href=\"a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872\">More...</a><br /></td></tr>\n<tr class=\"separator:ga39ac4d52028bb6ab08db5ad6562c2872\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac0c510a70e852f57594a9141848642e3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac0c510a70e852f57594a9141848642e3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gac0c510a70e852f57594a9141848642e3\">imulExtended</a> (vec&lt; L, int, Q &gt; const &amp;x, vec&lt; L, int, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; &amp;msb, vec&lt; L, int, Q &gt; &amp;lsb)</td></tr>\n<tr class=\"memdesc:gac0c510a70e852f57594a9141848642e3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Multiplies 32-bit integers x and y, producing a 64-bit result.  <a href=\"a00370.html#gac0c510a70e852f57594a9141848642e3\">More...</a><br /></td></tr>\n<tr class=\"separator:gac0c510a70e852f57594a9141848642e3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaedcec48743632dff6786bcc492074b1b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaedcec48743632dff6786bcc492074b1b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gaedcec48743632dff6786bcc492074b1b\">uaddCarry</a> (vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;carry)</td></tr>\n<tr class=\"memdesc:gaedcec48743632dff6786bcc492074b1b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32).  <a href=\"a00370.html#gaedcec48743632dff6786bcc492074b1b\">More...</a><br /></td></tr>\n<tr class=\"separator:gaedcec48743632dff6786bcc492074b1b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga732e2fb56db57ea541c7e5c92b7121be\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga732e2fb56db57ea541c7e5c92b7121be\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL void&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#ga732e2fb56db57ea541c7e5c92b7121be\">umulExtended</a> (vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;msb, vec&lt; L, uint, Q &gt; &amp;lsb)</td></tr>\n<tr class=\"memdesc:ga732e2fb56db57ea541c7e5c92b7121be\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Multiplies 32-bit integers x and y, producing a 64-bit result.  <a href=\"a00370.html#ga732e2fb56db57ea541c7e5c92b7121be\">More...</a><br /></td></tr>\n<tr class=\"separator:ga732e2fb56db57ea541c7e5c92b7121be\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae3316ba1229ad9b9f09480833321b053\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae3316ba1229ad9b9f09480833321b053\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, uint, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00370.html#gae3316ba1229ad9b9f09480833321b053\">usubBorrow</a> (vec&lt; L, uint, Q &gt; const &amp;x, vec&lt; L, uint, Q &gt; const &amp;y, vec&lt; L, uint, Q &gt; &amp;borrow)</td></tr>\n<tr class=\"memdesc:gae3316ba1229ad9b9f09480833321b053\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise.  <a href=\"a00370.html#gae3316ba1229ad9b9f09480833321b053\">More...</a><br /></td></tr>\n<tr class=\"separator:gae3316ba1229ad9b9f09480833321b053\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides GLSL functions on integer types. </p>\n<p>These all operate component-wise. The description is per component. The notation [a, b] means the set of bits from bit-number a through bit-number b, inclusive. The lowest-order bit is bit 0.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00043.html\" title=\"Core features \">glm/integer.hpp</a>&gt; to use these core features. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga44abfe3379e11cbd29425a843420d0d6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::bitCount </td>\n          <td>(</td>\n          <td class=\"paramtype\">genType&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the number of bits set to 1 in the binary representation of value. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genType</td><td>Signed or unsigned integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml\">GLSL bitCount man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaac7b15e40bdea8d9aa4c4cb34049f7b5\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, int, Q&gt; glm::bitCount </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the number of bits set to 1 in the binary representation of value. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml\">GLSL bitCount man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga346b25ab11e793e91a4a69c8aa6819f2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::bitfieldExtract </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Value</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>Offset</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>Bits</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Extracts bits [offset, offset + bits - 1] from value, returning them in the least significant bits of the result. </p>\n<p>For unsigned data types, the most significant bits of the result will be set to zero. For signed data types, the most significant bits will be set to the value of bit offset + base - 1.</p>\n<p>If bits is zero, the result will be zero. The result will be undefined if offset or bits is negative, or if the sum of offset and bits is greater than the number of bits used to store the operand.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldExtract.xml\">GLSL bitfieldExtract man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2e82992340d421fadb61a473df699b20\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::bitfieldInsert </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Base</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>Insert</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>Offset</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">int&#160;</td>\n          <td class=\"paramname\"><em>Bits</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the insertion the bits least-significant bits of insert into base. </p>\n<p>The result will have bits [offset, offset + bits - 1] taken from bits [0, bits - 1] of insert, and all other bits taken directly from the corresponding bits of base. If bits is zero, the result will simply be base. The result will be undefined if offset or bits is negative, or if the sum of offset and bits is greater than the number of bits used to store the operand.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldInsert.xml\">GLSL bitfieldInsert man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga750a1d92464489b7711dee67aa3441b6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::bitfieldReverse </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the reversal of the bits of value. </p>\n<p>The bit numbered n of the result will be taken from bit (bits - 1) - n of value, where bits is the total number of bits used to represent value.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar or vector types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldReverse.xml\">GLSL bitfieldReverse man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf74c4d969fa34ab8acb9d390f5ca5274\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::findLSB </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the bit number of the least significant bit set to 1 in the binary representation of value. </p>\n<p>If value is zero, -1 will be returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genIUType</td><td>Signed or unsigned integer scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml\">GLSL findLSB man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4454c0331d6369888c28ab677f4810c7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, int, Q&gt; glm::findLSB </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the bit number of the least significant bit set to 1 in the binary representation of value. </p>\n<p>If value is zero, -1 will be returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml\">GLSL findLSB man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7e4a794d766861c70bc961630f8ef621\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL int glm::findMSB </td>\n          <td>(</td>\n          <td class=\"paramtype\">genIUType&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the bit number of the most significant bit in the binary representation of value. </p>\n<p>For positive integers, the result will be the bit number of the most significant bit set to 1. For negative integers, the result will be the bit number of the most significant bit set to 0. For a value of zero or negative one, -1 will be returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">genIUType</td><td>Signed or unsigned integer scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml\">GLSL findMSB man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga39ac4d52028bb6ab08db5ad6562c2872\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, int, Q&gt; glm::findMSB </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the bit number of the most significant bit in the binary representation of value. </p>\n<p>For positive integers, the result will be the bit number of the most significant bit set to 1. For negative integers, the result will be the bit number of the most significant bit set to 0. For a value of zero or negative one, -1 will be returned.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Signed or unsigned integer scalar types.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml\">GLSL findMSB man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac0c510a70e852f57594a9141848642e3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::imulExtended </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, int, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, int, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, int, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>msb</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, int, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>lsb</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Multiplies 32-bit integers x and y, producing a 64-bit result. </p>\n<p>The 32 least-significant bits are returned in lsb. The 32 most-significant bits are returned in msb.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/imulExtended.xml\">GLSL imulExtended man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaedcec48743632dff6786bcc492074b1b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, uint, Q&gt; glm::uaddCarry </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>carry</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Adds 32-bit unsigned integer x and y, returning the sum modulo pow(2, 32). </p>\n<p>The value carry is set to 0 if the sum was less than pow(2, 32), or to 1 otherwise.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/uaddCarry.xml\">GLSL uaddCarry man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga732e2fb56db57ea541c7e5c92b7121be\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL void glm::umulExtended </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>msb</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>lsb</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Multiplies 32-bit integers x and y, producing a 64-bit result. </p>\n<p>The 32 least-significant bits are returned in lsb. The 32 most-significant bits are returned in msb.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/umulExtended.xml\">GLSL umulExtended man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae3316ba1229ad9b9f09480833321b053\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, uint, Q&gt; glm::usubBorrow </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, uint, Q &gt; &amp;&#160;</td>\n          <td class=\"paramname\"><em>borrow</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Subtracts the 32-bit unsigned integer y from x, returning the difference if non-negative, or pow(2, 32) plus the difference otherwise. </p>\n<p>The value borrow is set to 0 if x &gt;= y, or to 1 otherwise.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/usubBorrow.xml\">GLSL usubBorrow man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00371.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Matrix functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Matrix functions<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides GLSL matrix functions.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gad7928795124768e058f99dce270f5c8d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gad7928795124768e058f99dce270f5c8d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL T&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gad7928795124768e058f99dce270f5c8d\">determinant</a> (mat&lt; C, R, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gad7928795124768e058f99dce270f5c8d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the determinant of a squared matrix.  <a href=\"a00371.html#gad7928795124768e058f99dce270f5c8d\">More...</a><br /></td></tr>\n<tr class=\"separator:gad7928795124768e058f99dce270f5c8d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaed509fe8129b01e4f20a6d0de5690091\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaed509fe8129b01e4f20a6d0de5690091\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gaed509fe8129b01e4f20a6d0de5690091\">inverse</a> (mat&lt; C, R, T, Q &gt; const &amp;m)</td></tr>\n<tr class=\"memdesc:gaed509fe8129b01e4f20a6d0de5690091\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Return the inverse of a squared matrix.  <a href=\"a00371.html#gaed509fe8129b01e4f20a6d0de5690091\">More...</a><br /></td></tr>\n<tr class=\"separator:gaed509fe8129b01e4f20a6d0de5690091\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf14569404c779fedca98d0b9b8e58c1f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaf14569404c779fedca98d0b9b8e58c1f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gaf14569404c779fedca98d0b9b8e58c1f\">matrixCompMult</a> (mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gaf14569404c779fedca98d0b9b8e58c1f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and y[i][j].  <a href=\"a00371.html#gaf14569404c779fedca98d0b9b8e58c1f\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf14569404c779fedca98d0b9b8e58c1f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac29fb7bae75a8e4c1b74cbbf85520e50\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac29fb7bae75a8e4c1b74cbbf85520e50\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL detail::outerProduct_trait&lt; C, R, T, Q &gt;::type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50\">outerProduct</a> (vec&lt; C, T, Q &gt; const &amp;c, vec&lt; R, T, Q &gt; const &amp;r)</td></tr>\n<tr class=\"memdesc:gac29fb7bae75a8e4c1b74cbbf85520e50\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Treats the first parameter c as a column vector and the second parameter r as a row vector and does a linear algebraic matrix multiply c * r.  <a href=\"a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50\">More...</a><br /></td></tr>\n<tr class=\"separator:gac29fb7bae75a8e4c1b74cbbf85520e50\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae679d841da8ce9dbcc6c2d454f15bc35\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t C, length_t R, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae679d841da8ce9dbcc6c2d454f15bc35\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL mat&lt; C, R, T, Q &gt;::transpose_type&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35\">transpose</a> (mat&lt; C, R, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gae679d841da8ce9dbcc6c2d454f15bc35\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the transposed matrix of x.  <a href=\"a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35\">More...</a><br /></td></tr>\n<tr class=\"separator:gae679d841da8ce9dbcc6c2d454f15bc35\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides GLSL matrix functions. </p>\n<p>Include &lt;<a class=\"el\" href=\"a00057.html\" title=\"Core features \">glm/matrix.hpp</a>&gt; to use these core features. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gad7928795124768e058f99dce270f5c8d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL T glm::determinant </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the determinant of a squared matrix. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number a column </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number a row </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or signed integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml\">GLSL determinant man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaed509fe8129b01e4f20a6d0de5690091\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; glm::inverse </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>m</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Return the inverse of a squared matrix. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number a column </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number a row </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or signed integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/inverse.xml\">GLSL inverse man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf14569404c779fedca98d0b9b8e58c1f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;C, R, T, Q&gt; glm::matrixCompMult </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Multiply matrix x by matrix y component-wise, i.e., result[i][j] is the scalar product of x[i][j] and y[i][j]. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number a column </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number a row </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or signed integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/matrixCompMult.xml\">GLSL matrixCompMult man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac29fb7bae75a8e4c1b74cbbf85520e50\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL detail::outerProduct_trait&lt;C, R, T, Q&gt;::type glm::outerProduct </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; C, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>c</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>r</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Treats the first parameter c as a column vector and the second parameter r as a row vector and does a linear algebraic matrix multiply c * r. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number a column </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number a row </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or signed integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/outerProduct.xml\">GLSL outerProduct man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae679d841da8ce9dbcc6c2d454f15bc35\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL mat&lt;C, R, T, Q&gt;::transpose_type glm::transpose </td>\n          <td>(</td>\n          <td class=\"paramtype\">mat&lt; C, R, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the transposed matrix of x. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">C</td><td>Integer between 1 and 4 included that qualify the number a column </td></tr>\n    <tr><td class=\"paramname\">R</td><td>Integer between 1 and 4 included that qualify the number a row </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point or signed integer scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/transpose.xml\">GLSL transpose man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00372.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Floating-Point Pack and Unpack Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Floating-Point Pack and Unpack Functions<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gaa916ca426b2bb0343ba17e3753e245c2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL double&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#gaa916ca426b2bb0343ba17e3753e245c2\">packDouble2x32</a> (uvec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaa916ca426b2bb0343ba17e3753e245c2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a double-qualifier value obtained by packing the components of v into a 64-bit value.  <a href=\"a00372.html#gaa916ca426b2bb0343ba17e3753e245c2\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa916ca426b2bb0343ba17e3753e245c2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga20f134b07db3a3d3a38efb2617388c92\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga20f134b07db3a3d3a38efb2617388c92\">packHalf2x16</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga20f134b07db3a3d3a38efb2617388c92\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns an unsigned integer obtained by converting the components of a two-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these two 16- bit integers into a 32-bit unsigned integer.  <a href=\"a00372.html#ga20f134b07db3a3d3a38efb2617388c92\">More...</a><br /></td></tr>\n<tr class=\"separator:ga20f134b07db3a3d3a38efb2617388c92\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga977ab172da5494e5ac63e952afacfbe2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga977ab172da5494e5ac63e952afacfbe2\">packSnorm2x16</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga977ab172da5494e5ac63e952afacfbe2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.  <a href=\"a00372.html#ga977ab172da5494e5ac63e952afacfbe2\">More...</a><br /></td></tr>\n<tr class=\"separator:ga977ab172da5494e5ac63e952afacfbe2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga85e8f17627516445026ab7a9c2e3531a\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga85e8f17627516445026ab7a9c2e3531a\">packSnorm4x8</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga85e8f17627516445026ab7a9c2e3531a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.  <a href=\"a00372.html#ga85e8f17627516445026ab7a9c2e3531a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga85e8f17627516445026ab7a9c2e3531a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0e2d107039fe608a209497af867b85fb\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga0e2d107039fe608a209497af867b85fb\">packUnorm2x16</a> (vec2 const &amp;v)</td></tr>\n<tr class=\"memdesc:ga0e2d107039fe608a209497af867b85fb\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.  <a href=\"a00372.html#ga0e2d107039fe608a209497af867b85fb\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0e2d107039fe608a209497af867b85fb\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf7d2f7341a9eeb4a436929d6f9ad08f2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uint&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2\">packUnorm4x8</a> (vec4 const &amp;v)</td></tr>\n<tr class=\"memdesc:gaf7d2f7341a9eeb4a436929d6f9ad08f2\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.  <a href=\"a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf7d2f7341a9eeb4a436929d6f9ad08f2\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5f4296dc5f12f0aa67ac05b8bb322483\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL uvec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483\">unpackDouble2x32</a> (double v)</td></tr>\n<tr class=\"memdesc:ga5f4296dc5f12f0aa67ac05b8bb322483\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a two-component unsigned integer vector representation of v.  <a href=\"a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5f4296dc5f12f0aa67ac05b8bb322483\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaf59b52e6b28da9335322c4ae19b5d745\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#gaf59b52e6b28da9335322c4ae19b5d745\">unpackHalf2x16</a> (uint v)</td></tr>\n<tr class=\"memdesc:gaf59b52e6b28da9335322c4ae19b5d745\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values.  <a href=\"a00372.html#gaf59b52e6b28da9335322c4ae19b5d745\">More...</a><br /></td></tr>\n<tr class=\"separator:gaf59b52e6b28da9335322c4ae19b5d745\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gacd8f8971a3fe28418be0d0fa1f786b38\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38\">unpackSnorm2x16</a> (uint p)</td></tr>\n<tr class=\"memdesc:gacd8f8971a3fe28418be0d0fa1f786b38\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.  <a href=\"a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38\">More...</a><br /></td></tr>\n<tr class=\"separator:gacd8f8971a3fe28418be0d0fa1f786b38\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga2db488646d48b7c43d3218954523fe82\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga2db488646d48b7c43d3218954523fe82\">unpackSnorm4x8</a> (uint p)</td></tr>\n<tr class=\"memdesc:ga2db488646d48b7c43d3218954523fe82\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.  <a href=\"a00372.html#ga2db488646d48b7c43d3218954523fe82\">More...</a><br /></td></tr>\n<tr class=\"separator:ga2db488646d48b7c43d3218954523fe82\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga1f66188e5d65afeb9ffba1ad971e4007\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec2&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007\">unpackUnorm2x16</a> (uint p)</td></tr>\n<tr class=\"memdesc:ga1f66188e5d65afeb9ffba1ad971e4007\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.  <a href=\"a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007\">More...</a><br /></td></tr>\n<tr class=\"separator:ga1f66188e5d65afeb9ffba1ad971e4007\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga7f903259150b67e9466f5f8edffcd197\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec4&#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00372.html#ga7f903259150b67e9466f5f8edffcd197\">unpackUnorm4x8</a> (uint p)</td></tr>\n<tr class=\"memdesc:ga7f903259150b67e9466f5f8edffcd197\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.  <a href=\"a00372.html#ga7f903259150b67e9466f5f8edffcd197\">More...</a><br /></td></tr>\n<tr class=\"separator:ga7f903259150b67e9466f5f8edffcd197\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types. </p>\n<p>These functions do not operate component-wise, rather as described in each case.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00120.html\" title=\"Core features \">glm/packing.hpp</a>&gt; to use these core features. </p>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gaa916ca426b2bb0343ba17e3753e245c2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL double glm::packDouble2x32 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb\">uvec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a double-qualifier value obtained by packing the components of v into a 64-bit value. </p>\n<p>If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. Otherwise, the bit- level representation of v is preserved. The first vector component specifies the 32 least significant bits; the second component specifies the 32 most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packDouble2x32.xml\">GLSL packDouble2x32 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga20f134b07db3a3d3a38efb2617388c92\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::packHalf2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns an unsigned integer obtained by converting the components of a two-component floating-point vector to the 16-bit floating-point representation found in the OpenGL Specification, and then packing these two 16- bit integers into a 32-bit unsigned integer. </p>\n<p>The first vector component specifies the 16 least-significant bits of the result; the second component specifies the 16 most-significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml\">GLSL packHalf2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga977ab172da5494e5ac63e952afacfbe2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::packSnorm2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. </p>\n<p>Then, the results are packed into the returned 32-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packSnorm2x16: round(clamp(v, -1, +1) * 32767.0)</p>\n<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm2x16.xml\">GLSL packSnorm2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga85e8f17627516445026ab7a9c2e3531a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::packSnorm4x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. </p>\n<p>Then, the results are packed into the returned 32-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packSnorm4x8: round(clamp(c, -1, +1) * 127.0)</p>\n<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0e2d107039fe608a209497af867b85fb\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::packUnorm2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gabe65c061834f61b4f7cb6037b19006a4\">vec2</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. </p>\n<p>Then, the results are packed into the returned 32-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packUnorm2x16: round(clamp(c, 0, +1) * 65535.0)</p>\n<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm2x16.xml\">GLSL packUnorm2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf7d2f7341a9eeb4a436929d6f9ad08f2\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uint glm::packUnorm4x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\"><a class=\"el\" href=\"a00281.html#gac215a35481a6597d1bf622a382e9d6e2\">vec4</a> const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. </p>\n<p>Then, the results are packed into the returned 32-bit unsigned integer.</p>\n<p>The conversion for component c of v to fixed point is done as follows: packUnorm4x8: round(clamp(c, 0, +1) * 255.0)</p>\n<p>The first component of the vector will be written to the least significant bits of the output; the last component will be written to the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5f4296dc5f12f0aa67ac05b8bb322483\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL uvec2 glm::unpackDouble2x32 </td>\n          <td>(</td>\n          <td class=\"paramtype\">double&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a two-component unsigned integer vector representation of v. </p>\n<p>The bit-level representation of v is preserved. The first component of the vector contains the 32 least significant bits of the double; the second component consists the 32 most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackDouble2x32.xml\">GLSL unpackDouble2x32 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaf59b52e6b28da9335322c4ae19b5d745\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec2 glm::unpackHalf2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, and converting them to 32-bit floating-point values. </p>\n<p>The first component of the vector is obtained from the 16 least-significant bits of v; the second component is obtained from the 16 most-significant bits of v.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml\">GLSL unpackHalf2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gacd8f8971a3fe28418be0d0fa1f786b38\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec2 glm::unpackSnorm2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm2x16: clamp(f / 32767.0, -1, +1)</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm2x16.xml\">GLSL unpackSnorm2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga2db488646d48b7c43d3218954523fe82\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackSnorm4x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackSnorm4x8: clamp(f / 127.0, -1, +1)</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml\">GLSL unpackSnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga1f66188e5d65afeb9ffba1ad971e4007\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec2 glm::unpackUnorm2x16 </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm2x16: f / 65535.0</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml\">GLSL unpackUnorm2x16 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga7f903259150b67e9466f5f8edffcd197\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec4 glm::unpackUnorm4x8 </td>\n          <td>(</td>\n          <td class=\"paramtype\">uint&#160;</td>\n          <td class=\"paramname\"><em>p</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. </p>\n<p>Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.</p>\n<p>The conversion for unpacked fixed-point value f to floating point is done as follows: unpackUnorm4x8: f / 255.0</p>\n<p>The first component of the returned vector will be extracted from the least significant bits of the input; the last component will be extracted from the most significant bits.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml\">GLSL unpackUnorm4x8 man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00373.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Angle and Trigonometry Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Angle and Trigonometry Functions<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Function parameters specified as angle are assumed to be in units of radians.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:gacc9b092df8257c68f19c9053703e2563\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gacc9b092df8257c68f19c9053703e2563\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gacc9b092df8257c68f19c9053703e2563\">acos</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gacc9b092df8257c68f19c9053703e2563\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc cosine.  <a href=\"a00373.html#gacc9b092df8257c68f19c9053703e2563\">More...</a><br /></td></tr>\n<tr class=\"separator:gacc9b092df8257c68f19c9053703e2563\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga858f35dc66fd2688f20c52b5f25be76a\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga858f35dc66fd2688f20c52b5f25be76a\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga858f35dc66fd2688f20c52b5f25be76a\">acosh</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga858f35dc66fd2688f20c52b5f25be76a\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc hyperbolic cosine; returns the non-negative inverse of cosh.  <a href=\"a00373.html#ga858f35dc66fd2688f20c52b5f25be76a\">More...</a><br /></td></tr>\n<tr class=\"separator:ga858f35dc66fd2688f20c52b5f25be76a\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga0552d2df4865fa8c3d7cfc3ec2caac73\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga0552d2df4865fa8c3d7cfc3ec2caac73\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73\">asin</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga0552d2df4865fa8c3d7cfc3ec2caac73\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc sine.  <a href=\"a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73\">More...</a><br /></td></tr>\n<tr class=\"separator:ga0552d2df4865fa8c3d7cfc3ec2caac73\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga3ef16b501ee859fddde88e22192a5950\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga3ef16b501ee859fddde88e22192a5950\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga3ef16b501ee859fddde88e22192a5950\">asinh</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:ga3ef16b501ee859fddde88e22192a5950\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc hyperbolic sine; returns the inverse of sinh.  <a href=\"a00373.html#ga3ef16b501ee859fddde88e22192a5950\">More...</a><br /></td></tr>\n<tr class=\"separator:ga3ef16b501ee859fddde88e22192a5950\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac61629f3a4aa14057e7a8cae002291db\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac61629f3a4aa14057e7a8cae002291db\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">atan</a> (vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gac61629f3a4aa14057e7a8cae002291db\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent.  <a href=\"a00373.html#gac61629f3a4aa14057e7a8cae002291db\">More...</a><br /></td></tr>\n<tr class=\"separator:gac61629f3a4aa14057e7a8cae002291db\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga5229f087eaccbc466f1c609ce3107b95\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga5229f087eaccbc466f1c609ce3107b95\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga5229f087eaccbc466f1c609ce3107b95\">atan</a> (vec&lt; L, T, Q &gt; const &amp;y_over_x)</td></tr>\n<tr class=\"memdesc:ga5229f087eaccbc466f1c609ce3107b95\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc tangent.  <a href=\"a00373.html#ga5229f087eaccbc466f1c609ce3107b95\">More...</a><br /></td></tr>\n<tr class=\"separator:ga5229f087eaccbc466f1c609ce3107b95\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gabc925650e618357d07da255531658b87\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gabc925650e618357d07da255531658b87\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gabc925650e618357d07da255531658b87\">atanh</a> (vec&lt; L, T, Q &gt; const &amp;x)</td></tr>\n<tr class=\"memdesc:gabc925650e618357d07da255531658b87\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Arc hyperbolic tangent; returns the inverse of tanh.  <a href=\"a00373.html#gabc925650e618357d07da255531658b87\">More...</a><br /></td></tr>\n<tr class=\"separator:gabc925650e618357d07da255531658b87\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6a41efc740e3b3c937447d3a6284130e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6a41efc740e3b3c937447d3a6284130e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga6a41efc740e3b3c937447d3a6284130e\">cos</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga6a41efc740e3b3c937447d3a6284130e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The standard trigonometric cosine function.  <a href=\"a00373.html#ga6a41efc740e3b3c937447d3a6284130e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6a41efc740e3b3c937447d3a6284130e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga4e260e372742c5f517aca196cf1e62b3\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga4e260e372742c5f517aca196cf1e62b3\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga4e260e372742c5f517aca196cf1e62b3\">cosh</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga4e260e372742c5f517aca196cf1e62b3\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2.  <a href=\"a00373.html#ga4e260e372742c5f517aca196cf1e62b3\">More...</a><br /></td></tr>\n<tr class=\"separator:ga4e260e372742c5f517aca196cf1e62b3\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga8faec9e303538065911ba8b3caf7326b\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga8faec9e303538065911ba8b3caf7326b\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga8faec9e303538065911ba8b3caf7326b\">degrees</a> (vec&lt; L, T, Q &gt; const &amp;radians)</td></tr>\n<tr class=\"memdesc:ga8faec9e303538065911ba8b3caf7326b\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts radians to degrees and returns the result.  <a href=\"a00373.html#ga8faec9e303538065911ba8b3caf7326b\">More...</a><br /></td></tr>\n<tr class=\"separator:ga8faec9e303538065911ba8b3caf7326b\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga6e1db4862c5e25afd553930e2fdd6a68\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga6e1db4862c5e25afd553930e2fdd6a68\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68\">radians</a> (vec&lt; L, T, Q &gt; const &amp;degrees)</td></tr>\n<tr class=\"memdesc:ga6e1db4862c5e25afd553930e2fdd6a68\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Converts degrees to radians and returns the result.  <a href=\"a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68\">More...</a><br /></td></tr>\n<tr class=\"separator:ga6e1db4862c5e25afd553930e2fdd6a68\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga29747fd108cb7292ae5a284f69691a69\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga29747fd108cb7292ae5a284f69691a69\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga29747fd108cb7292ae5a284f69691a69\">sin</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga29747fd108cb7292ae5a284f69691a69\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The standard trigonometric sine function.  <a href=\"a00373.html#ga29747fd108cb7292ae5a284f69691a69\">More...</a><br /></td></tr>\n<tr class=\"separator:ga29747fd108cb7292ae5a284f69691a69\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gac7c39ff21809e281552b4dbe46f4a39d\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gac7c39ff21809e281552b4dbe46f4a39d\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gac7c39ff21809e281552b4dbe46f4a39d\">sinh</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:gac7c39ff21809e281552b4dbe46f4a39d\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2.  <a href=\"a00373.html#gac7c39ff21809e281552b4dbe46f4a39d\">More...</a><br /></td></tr>\n<tr class=\"separator:gac7c39ff21809e281552b4dbe46f4a39d\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga293a34cfb9f0115cc606b4a97c84f11f\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga293a34cfb9f0115cc606b4a97c84f11f\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f\">tan</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:ga293a34cfb9f0115cc606b4a97c84f11f\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">The standard trigonometric tangent function.  <a href=\"a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f\">More...</a><br /></td></tr>\n<tr class=\"separator:ga293a34cfb9f0115cc606b4a97c84f11f\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL vec&lt; L, T, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\">tanh</a> (vec&lt; L, T, Q &gt; const &amp;angle)</td></tr>\n<tr class=\"memdesc:gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)  <a href=\"a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\">More...</a><br /></td></tr>\n<tr class=\"separator:gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Function parameters specified as angle are assumed to be in units of radians. </p>\n<p>In no case will any of these functions result in a divide by zero error. If the divisor of a ratio is 0, then results will be undefined.</p>\n<p>These all operate component-wise. The description is per component.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00160.html\" title=\"Core features \">glm/trigonometric.hpp</a>&gt; to use these core features.</p>\n<dl class=\"section see\"><dt>See also</dt><dd>ext_vector_trigonometric </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"gacc9b092df8257c68f19c9053703e2563\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::acos </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Arc cosine. </p>\n<p>Returns an angle whose sine is x. The range of values returned by this function is [0, PI]. Results are undefined if |x| &gt; 1.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/acos.xml\">GLSL acos man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga858f35dc66fd2688f20c52b5f25be76a\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::acosh </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Arc hyperbolic cosine; returns the non-negative inverse of cosh. </p>\n<p>Results are undefined if x &lt; 1.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/acosh.xml\">GLSL acosh man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga0552d2df4865fa8c3d7cfc3ec2caac73\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::asin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Arc sine. </p>\n<p>Returns an angle whose sine is x. The range of values returned by this function is [-PI/2, PI/2]. Results are undefined if |x| &gt; 1.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/asin.xml\">GLSL asin man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga3ef16b501ee859fddde88e22192a5950\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::asinh </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Arc hyperbolic sine; returns the inverse of sinh. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/asinh.xml\">GLSL asinh man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac61629f3a4aa14057e7a8cae002291db\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::atan </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Arc tangent. </p>\n<p>Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml\">GLSL atan man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n<p>Referenced by <a class=\"el\" href=\"a00017_source.html#l00055\">glm::atan2()</a>.</p>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga5229f087eaccbc466f1c609ce3107b95\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::atan </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y_over_x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Arc tangent. </p>\n<p>Returns an angle whose tangent is y_over_x. The range of values returned by this function is [-PI/2, PI/2].</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml\">GLSL atan man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gabc925650e618357d07da255531658b87\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::atanh </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Arc hyperbolic tangent; returns the inverse of tanh. </p>\n<p>Results are undefined if abs(x) &gt;= 1.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/atanh.xml\">GLSL atanh man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6a41efc740e3b3c937447d3a6284130e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::cos </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The standard trigonometric cosine function. </p>\n<p>The values returned by this function will range from [-1, 1].</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/cos.xml\">GLSL cos man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga4e260e372742c5f517aca196cf1e62b3\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::cosh </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/cosh.xml\">GLSL cosh man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga8faec9e303538065911ba8b3caf7326b\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::degrees </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>radians</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts radians to degrees and returns the result. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/degrees.xml\">GLSL degrees man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga6e1db4862c5e25afd553930e2fdd6a68\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, T, Q&gt; glm::radians </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>degrees</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Converts degrees to radians and returns the result. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/radians.xml\">GLSL radians man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga29747fd108cb7292ae5a284f69691a69\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::sin </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The standard trigonometric sine function. </p>\n<p>The values returned by this function will range from [-1, 1].</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/sin.xml\">GLSL sin man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gac7c39ff21809e281552b4dbe46f4a39d\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::sinh </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/sinh.xml\">GLSL sinh man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga293a34cfb9f0115cc606b4a97c84f11f\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::tan </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>The standard trigonometric tangent function. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/tan.xml\">GLSL tan man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL vec&lt;L, T, Q&gt; glm::tanh </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>angle</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>Integer between 1 and 4 included that qualify the dimension of the vector </td></tr>\n    <tr><td class=\"paramname\">T</td><td>Floating-point scalar types </td></tr>\n    <tr><td class=\"paramname\">Q</td><td>Value from qualifier enum</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/tanh.xml\">GLSL tanh man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/a00374.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Vector Relational Functions</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"summary\">\n<a href=\"#func-members\">Functions</a>  </div>\n  <div class=\"headertitle\">\n<div class=\"title\">Vector Relational Functions<div class=\"ingroups\"><a class=\"el\" href=\"a00280.html\">Core features</a></div></div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n\n<p>Relational and equality operators (&lt;, &lt;=, &gt;, &gt;=, ==, !=) are defined to operate on scalars and produce scalar Boolean results.  \n<a href=\"#details\">More...</a></p>\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"func-members\"></a>\nFunctions</h2></td></tr>\n<tr class=\"memitem:ga87e53f50b679f5f95c5cb4780311b3dd\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga87e53f50b679f5f95c5cb4780311b3dd\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd\">all</a> (vec&lt; L, bool, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga87e53f50b679f5f95c5cb4780311b3dd\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if all components of x are true.  <a href=\"a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd\">More...</a><br /></td></tr>\n<tr class=\"separator:ga87e53f50b679f5f95c5cb4780311b3dd\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga911b3f8e41459dd551ccb6d385d91061\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga911b3f8e41459dd551ccb6d385d91061\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR bool&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga911b3f8e41459dd551ccb6d385d91061\">any</a> (vec&lt; L, bool, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga911b3f8e41459dd551ccb6d385d91061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns true if any component of x is true.  <a href=\"a00374.html#ga911b3f8e41459dd551ccb6d385d91061\">More...</a><br /></td></tr>\n<tr class=\"separator:ga911b3f8e41459dd551ccb6d385d91061\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab4c5cfdaa70834421397a85aa83ad946\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab4c5cfdaa70834421397a85aa83ad946\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#gab4c5cfdaa70834421397a85aa83ad946\">equal</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gab4c5cfdaa70834421397a85aa83ad946\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x == y.  <a href=\"a00374.html#gab4c5cfdaa70834421397a85aa83ad946\">More...</a><br /></td></tr>\n<tr class=\"separator:gab4c5cfdaa70834421397a85aa83ad946\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gadfdb8ea82deca869ddc7e63ea5a63ae4\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gadfdb8ea82deca869ddc7e63ea5a63ae4\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4\">greaterThan</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gadfdb8ea82deca869ddc7e63ea5a63ae4\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &gt; y.  <a href=\"a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4\">More...</a><br /></td></tr>\n<tr class=\"separator:gadfdb8ea82deca869ddc7e63ea5a63ae4\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga859975f538940f8d18fe62f916b9abd7\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga859975f538940f8d18fe62f916b9abd7\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga859975f538940f8d18fe62f916b9abd7\">greaterThanEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga859975f538940f8d18fe62f916b9abd7\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &gt;= y.  <a href=\"a00374.html#ga859975f538940f8d18fe62f916b9abd7\">More...</a><br /></td></tr>\n<tr class=\"separator:ga859975f538940f8d18fe62f916b9abd7\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gae90ed1592c395f93e3f3dfce6b2f39c6\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gae90ed1592c395f93e3f3dfce6b2f39c6\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6\">lessThan</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gae90ed1592c395f93e3f3dfce6b2f39c6\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison result of x &lt; y.  <a href=\"a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6\">More...</a><br /></td></tr>\n<tr class=\"separator:gae90ed1592c395f93e3f3dfce6b2f39c6\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:gab0bdafc019d227257ff73fb5bcca1718\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:gab0bdafc019d227257ff73fb5bcca1718\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#gab0bdafc019d227257ff73fb5bcca1718\">lessThanEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:gab0bdafc019d227257ff73fb5bcca1718\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x &lt;= y.  <a href=\"a00374.html#gab0bdafc019d227257ff73fb5bcca1718\">More...</a><br /></td></tr>\n<tr class=\"separator:gab0bdafc019d227257ff73fb5bcca1718\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga610fcd175791fd246e328ffee10dbf1e\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga610fcd175791fd246e328ffee10dbf1e\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga610fcd175791fd246e328ffee10dbf1e\">not_</a> (vec&lt; L, bool, Q &gt; const &amp;v)</td></tr>\n<tr class=\"memdesc:ga610fcd175791fd246e328ffee10dbf1e\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise logical complement of x.  <a href=\"a00374.html#ga610fcd175791fd246e328ffee10dbf1e\">More...</a><br /></td></tr>\n<tr class=\"separator:ga610fcd175791fd246e328ffee10dbf1e\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><td class=\"memTemplParams\" colspan=\"2\">template&lt;length_t L, typename T , qualifier Q&gt; </td></tr>\n<tr class=\"memitem:ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><td class=\"memTemplItemLeft\" align=\"right\" valign=\"top\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt; L, bool, Q &gt;&#160;</td><td class=\"memTemplItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27\">notEqual</a> (vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)</td></tr>\n<tr class=\"memdesc:ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\">Returns the component-wise comparison of result x != y.  <a href=\"a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27\">More...</a><br /></td></tr>\n<tr class=\"separator:ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n<a name=\"details\" id=\"details\"></a><h2 class=\"groupheader\">Detailed Description</h2>\n<p>Relational and equality operators (&lt;, &lt;=, &gt;, &gt;=, ==, !=) are defined to operate on scalars and produce scalar Boolean results. </p>\n<p>For vector results, use the following built-in functions.</p>\n<p>In all cases, the sizes of all the input and return vectors for any particular call must match.</p>\n<p>Include &lt;<a class=\"el\" href=\"a00225.html\" title=\"Core features \">glm/vector_relational.hpp</a>&gt; to use these core features.</p>\n<dl class=\"section see\"><dt>See also</dt><dd><a class=\"el\" href=\"a00275.html\" title=\"Exposes comparison functions for vector types that take a user defined epsilon values. \">GLM_EXT_vector_relational</a> </dd></dl>\n<h2 class=\"groupheader\">Function Documentation</h2>\n<a class=\"anchor\" id=\"ga87e53f50b679f5f95c5cb4780311b3dd\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR bool glm::all </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, bool, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns true if all components of x are true. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/all.xml\">GLSL all man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga911b3f8e41459dd551ccb6d385d91061\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR bool glm::any </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, bool, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns true if any component of x is true. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/any.xml\">GLSL any man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab4c5cfdaa70834421397a85aa83ad946\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::equal </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x == y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>A floating-point, integer or bool scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/equal.xml\">GLSL equal man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gadfdb8ea82deca869ddc7e63ea5a63ae4\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::greaterThan </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x &gt; y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>A floating-point or integer scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThan.xml\">GLSL greaterThan man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga859975f538940f8d18fe62f916b9abd7\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::greaterThanEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x &gt;= y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>A floating-point or integer scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThanEqual.xml\">GLSL greaterThanEqual man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gae90ed1592c395f93e3f3dfce6b2f39c6\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::lessThan </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison result of x &lt; y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>A floating-point or integer scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThan.xml\">GLSL lessThan man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"gab0bdafc019d227257ff73fb5bcca1718\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::lessThanEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x &lt;= y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>A floating-point or integer scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThanEqual.xml\">GLSL lessThanEqual man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga610fcd175791fd246e328ffee10dbf1e\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::not_ </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, bool, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>v</em></td><td>)</td>\n          <td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise logical complement of x. </p>\n<p>/!\\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead.</p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/not.xml\">GLSL not man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n<a class=\"anchor\" id=\"ga17c19dc1b76cd5aef63e9e7ff3aa3c27\"></a>\n<div class=\"memitem\">\n<div class=\"memproto\">\n      <table class=\"memname\">\n        <tr>\n          <td class=\"memname\">GLM_FUNC_DECL GLM_CONSTEXPR vec&lt;L, bool, Q&gt; glm::notEqual </td>\n          <td>(</td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>x</em>, </td>\n        </tr>\n        <tr>\n          <td class=\"paramkey\"></td>\n          <td></td>\n          <td class=\"paramtype\">vec&lt; L, T, Q &gt; const &amp;&#160;</td>\n          <td class=\"paramname\"><em>y</em>&#160;</td>\n        </tr>\n        <tr>\n          <td></td>\n          <td>)</td>\n          <td></td><td></td>\n        </tr>\n      </table>\n</div><div class=\"memdoc\">\n\n<p>Returns the component-wise comparison of result x != y. </p>\n<dl class=\"tparams\"><dt>Template Parameters</dt><dd>\n  <table class=\"tparams\">\n    <tr><td class=\"paramname\">L</td><td>An integer between 1 and 4 included that qualify the dimension of the vector. </td></tr>\n    <tr><td class=\"paramname\">T</td><td>A floating-point, integer or bool scalar type.</td></tr>\n  </table>\n  </dd>\n</dl>\n<dl class=\"section see\"><dt>See also</dt><dd><a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/notEqual.xml\">GLSL notEqual man page</a> </dd>\n<dd>\n<a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a> </dd></dl>\n\n</div>\n</div>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/dir_033f5edb0915b828d2c46ed4804e5503.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: detail Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">detail Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:a00001\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>_features.hpp</b> <a href=\"a00001_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00002\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>_fixes.hpp</b> <a href=\"a00002_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00003\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>_noise.hpp</b> <a href=\"a00003_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00004\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>_swizzle.hpp</b> <a href=\"a00004_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00005\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>_swizzle_func.hpp</b> <a href=\"a00005_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00006\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>_vectorize.hpp</b> <a href=\"a00006_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00019\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>compute_common.hpp</b> <a href=\"a00019_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00020\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>compute_vector_relational.hpp</b> <a href=\"a00020_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00124\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>qualifier.hpp</b> <a href=\"a00124_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00153\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>setup.hpp</b> <a href=\"a00153_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00163\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>type_float.hpp</b> <a href=\"a00163_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00164\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>type_half.hpp</b> <a href=\"a00164_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00165\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00165.html\">type_mat2x2.hpp</a> <a href=\"a00165_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00165\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00166\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00166.html\">type_mat2x3.hpp</a> <a href=\"a00166_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00166\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00167\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00167.html\">type_mat2x4.hpp</a> <a href=\"a00167_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00167\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00168\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00168.html\">type_mat3x2.hpp</a> <a href=\"a00168_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00168\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00169\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00169.html\">type_mat3x3.hpp</a> <a href=\"a00169_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00169\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00170\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00170.html\">type_mat3x4.hpp</a> <a href=\"a00170_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00170\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00171\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00171.html\">type_mat4x2.hpp</a> <a href=\"a00171_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00171\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00172\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00172.html\">type_mat4x3.hpp</a> <a href=\"a00172_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00172\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00173\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00173.html\">type_mat4x4.hpp</a> <a href=\"a00173_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00173\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00176\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00176.html\">type_quat.hpp</a> <a href=\"a00176_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00176\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00178\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00178.html\">type_vec1.hpp</a> <a href=\"a00178_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00178\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00179\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00179.html\">type_vec2.hpp</a> <a href=\"a00179_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00179\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00180\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00180.html\">type_vec3.hpp</a> <a href=\"a00180_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00180\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00181\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00181.html\">type_vec4.hpp</a> <a href=\"a00181_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00181\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/dir_3a581ba30d25676e4b797b1f96d53b45.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: F: Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">F: Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_9e5fe034a00e89334fd5186c3e7db156\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/dir_44e5e654415abd9ca6fdeaddaff8565e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: glm Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">glm Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_5189610d3ba09ec39b766fb99b34cd93\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_5189610d3ba09ec39b766fb99b34cd93.html\">doc</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_cef2d71d502cb69a9252bca2297d9549\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/dir_4c6bd29c73fa4e5a2509e1c15f846751.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: gtc Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtc Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:a00009\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00009.html\">bitfield.hpp</a> <a href=\"a00009_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00009\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00288.html\">GLM_GTC_bitfield</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00012\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00012.html\">gtc/color_space.hpp</a> <a href=\"a00012_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00012\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00289.html\">GLM_GTC_color_space</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00021\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00021.html\">constants.hpp</a> <a href=\"a00021_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00021\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00290.html\">GLM_GTC_constants</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00024\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00024.html\">epsilon.hpp</a> <a href=\"a00024_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00024\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00291.html\">GLM_GTC_epsilon</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00041\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00041.html\">gtc/integer.hpp</a> <a href=\"a00041_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00041\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00292.html\">GLM_GTC_integer</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00058\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00058.html\">matrix_access.hpp</a> <a href=\"a00058_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00058\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00293.html\">GLM_GTC_matrix_access</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00100\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00100.html\">matrix_integer.hpp</a> <a href=\"a00100_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00100\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00294.html\">GLM_GTC_matrix_integer</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00102\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00102.html\">matrix_inverse.hpp</a> <a href=\"a00102_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00102\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00295.html\">GLM_GTC_matrix_inverse</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00109\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00109.html\">gtc/matrix_transform.hpp</a> <a href=\"a00109_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00109\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00296.html\">GLM_GTC_matrix_transform</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00112\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00112.html\">noise.hpp</a> <a href=\"a00112_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00112\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00297.html\">GLM_GTC_noise</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00119\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00119.html\">gtc/packing.hpp</a> <a href=\"a00119_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00119\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00298.html\">GLM_GTC_packing</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00125\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00125.html\">gtc/quaternion.hpp</a> <a href=\"a00125_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00125\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00299.html\">GLM_GTC_quaternion</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00137\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00137.html\">random.hpp</a> <a href=\"a00137_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00137\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00300.html\">GLM_GTC_random</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00140\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00140.html\">reciprocal.hpp</a> <a href=\"a00140_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00140\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00301.html\">GLM_GTC_reciprocal</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00143\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00143.html\">round.hpp</a> <a href=\"a00143_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00143\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00302.html\">GLM_GTC_round</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00161\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00161.html\">gtc/type_aligned.hpp</a> <a href=\"a00161_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00161\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00303.html\">GLM_GTC_type_aligned</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00174\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00174.html\">type_precision.hpp</a> <a href=\"a00174_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00174\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00304.html\">GLM_GTC_type_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00175\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00175.html\">type_ptr.hpp</a> <a href=\"a00175_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00175\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00305.html\">GLM_GTC_type_ptr</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00182\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00182.html\">ulp.hpp</a> <a href=\"a00182_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00182\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00306.html\">GLM_GTC_ulp</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00183\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00183.html\">vec1.hpp</a> <a href=\"a00183_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00183\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00307.html\">GLM_GTC_vec1</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/dir_5189610d3ba09ec39b766fb99b34cd93.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: doc Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_5189610d3ba09ec39b766fb99b34cd93.html\">doc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">doc Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:a00047\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>man.doxy</b> <a href=\"a00047_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/dir_6b66465792d005310484819a0eb0b0d3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: ext Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">ext Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:a00059\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00059.html\">matrix_clip_space.hpp</a> <a href=\"a00059_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00059\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00243.html\">GLM_EXT_matrix_clip_space</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00060\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00060.html\">matrix_common.hpp</a> <a href=\"a00060_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00060\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00244.html\">GLM_EXT_matrix_common</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00063\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00063.html\">matrix_double2x2.hpp</a> <a href=\"a00063_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00063\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00064\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00064.html\">matrix_double2x2_precision.hpp</a> <a href=\"a00064_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00064\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00065\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00065.html\">matrix_double2x3.hpp</a> <a href=\"a00065_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00065\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00066\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00066.html\">matrix_double2x3_precision.hpp</a> <a href=\"a00066_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00066\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00067\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00067.html\">matrix_double2x4.hpp</a> <a href=\"a00067_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00067\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00068\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00068.html\">matrix_double2x4_precision.hpp</a> <a href=\"a00068_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00068\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00069\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00069.html\">matrix_double3x2.hpp</a> <a href=\"a00069_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00069\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00070\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00070.html\">matrix_double3x2_precision.hpp</a> <a href=\"a00070_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00070\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00071\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00071.html\">matrix_double3x3.hpp</a> <a href=\"a00071_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00071\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00072\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00072.html\">matrix_double3x3_precision.hpp</a> <a href=\"a00072_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00072\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00073\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00073.html\">matrix_double3x4.hpp</a> <a href=\"a00073_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00073\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00074\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00074.html\">matrix_double3x4_precision.hpp</a> <a href=\"a00074_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00074\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00075\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00075.html\">matrix_double4x2.hpp</a> <a href=\"a00075_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00075\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00076\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00076.html\">matrix_double4x2_precision.hpp</a> <a href=\"a00076_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00076\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00077\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00077.html\">matrix_double4x3.hpp</a> <a href=\"a00077_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00077\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00078\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00078.html\">matrix_double4x3_precision.hpp</a> <a href=\"a00078_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00078\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00079\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00079.html\">matrix_double4x4.hpp</a> <a href=\"a00079_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00079\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00080\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00080.html\">matrix_double4x4_precision.hpp</a> <a href=\"a00080_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00080\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00082\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00082.html\">matrix_float2x2.hpp</a> <a href=\"a00082_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00082\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00083\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00083.html\">matrix_float2x2_precision.hpp</a> <a href=\"a00083_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00083\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00084\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00084.html\">matrix_float2x3.hpp</a> <a href=\"a00084_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00084\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00085\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00085.html\">matrix_float2x3_precision.hpp</a> <a href=\"a00085_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00085\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00086\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00086.html\">matrix_float2x4.hpp</a> <a href=\"a00086_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00086\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00087\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00087.html\">matrix_float2x4_precision.hpp</a> <a href=\"a00087_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00087\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00088\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00088.html\">matrix_float3x2.hpp</a> <a href=\"a00088_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00088\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00089\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00089.html\">matrix_float3x2_precision.hpp</a> <a href=\"a00089_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00089\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00090\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00090.html\">matrix_float3x3.hpp</a> <a href=\"a00090_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00090\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00091\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00091.html\">matrix_float3x3_precision.hpp</a> <a href=\"a00091_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00091\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00092\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00092.html\">matrix_float3x4.hpp</a> <a href=\"a00092_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00092\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00093\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00093.html\">matrix_float3x4_precision.hpp</a> <a href=\"a00093_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00093\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00094\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00094.html\">matrix_float4x2.hpp</a> <a href=\"a00094_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00094\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00095\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>matrix_float4x2_precision.hpp</b> <a href=\"a00095_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00096\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00096.html\">matrix_float4x3.hpp</a> <a href=\"a00096_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00096\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00097\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00097.html\">matrix_float4x3_precision.hpp</a> <a href=\"a00097_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00097\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00098\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00098.html\">matrix_float4x4.hpp</a> <a href=\"a00098_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00098\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00099\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00099.html\">matrix_float4x4_precision.hpp</a> <a href=\"a00099_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00099\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00105\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00105.html\">matrix_projection.hpp</a> <a href=\"a00105_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00105\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00245.html\">GLM_EXT_matrix_projection</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00107\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00107.html\">matrix_relational.hpp</a> <a href=\"a00107_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00107\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00246.html\">GLM_EXT_matrix_relational</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00108\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00108.html\">ext/matrix_transform.hpp</a> <a href=\"a00108_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00108\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00247.html\">GLM_EXT_matrix_transform</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00127\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00127.html\">quaternion_common.hpp</a> <a href=\"a00127_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00127\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00248.html\">GLM_EXT_quaternion_common</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00128\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00128.html\">quaternion_double.hpp</a> <a href=\"a00128_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00128\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00249.html\">GLM_EXT_quaternion_double</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00129\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00129.html\">quaternion_double_precision.hpp</a> <a href=\"a00129_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00129\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00250.html\">GLM_EXT_quaternion_double_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00130\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00130.html\">quaternion_exponential.hpp</a> <a href=\"a00130_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00130\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00251.html\">GLM_EXT_quaternion_exponential</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00131\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00131.html\">quaternion_float.hpp</a> <a href=\"a00131_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00131\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00252.html\">GLM_EXT_quaternion_float</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00132\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00132.html\">quaternion_float_precision.hpp</a> <a href=\"a00132_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00132\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00253.html\">GLM_EXT_quaternion_float_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00133\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00133.html\">quaternion_geometric.hpp</a> <a href=\"a00133_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00133\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00254.html\">GLM_EXT_quaternion_geometric</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00134\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00134.html\">quaternion_relational.hpp</a> <a href=\"a00134_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00134\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00255.html\">GLM_EXT_quaternion_relational</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00135\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00135.html\">quaternion_transform.hpp</a> <a href=\"a00135_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00135\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00256.html\">GLM_EXT_quaternion_transform</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00136\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00136.html\">quaternion_trigonometric.hpp</a> <a href=\"a00136_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00136\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00257.html\">GLM_EXT_quaternion_trigonometric</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00144\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00144.html\">scalar_common.hpp</a> <a href=\"a00144_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00144\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00258.html\">GLM_EXT_scalar_common</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00145\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00145.html\">scalar_constants.hpp</a> <a href=\"a00145_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00145\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00259.html\">GLM_EXT_scalar_constants</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00146\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00146.html\">scalar_int_sized.hpp</a> <a href=\"a00146_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00146\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00260.html\">GLM_EXT_scalar_int_sized</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00147\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00147.html\">scalar_integer.hpp</a> <a href=\"a00147_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00147\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00261.html\">GLM_EXT_scalar_integer</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00149\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00149.html\">ext/scalar_relational.hpp</a> <a href=\"a00149_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00149\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00262.html\">GLM_EXT_scalar_relational</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00151\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00151.html\">scalar_uint_sized.hpp</a> <a href=\"a00151_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00151\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00263.html\">GLM_EXT_scalar_uint_sized</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00152\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00152.html\">scalar_ulp.hpp</a> <a href=\"a00152_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00152\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00264.html\">GLM_EXT_scalar_ulp</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00189\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00189.html\">vector_bool1.hpp</a> <a href=\"a00189_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00189\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00265.html\">GLM_EXT_vector_bool1</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00190\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00190.html\">vector_bool1_precision.hpp</a> <a href=\"a00190_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00190\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00266.html\">GLM_EXT_vector_bool1_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00191\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00191.html\">vector_bool2.hpp</a> <a href=\"a00191_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00191\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00192\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00192.html\">vector_bool2_precision.hpp</a> <a href=\"a00192_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00192\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00193\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00193.html\">vector_bool3.hpp</a> <a href=\"a00193_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00193\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00194\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00194.html\">vector_bool3_precision.hpp</a> <a href=\"a00194_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00194\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00195\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00195.html\">vector_bool4.hpp</a> <a href=\"a00195_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00195\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00196\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00196.html\">vector_bool4_precision.hpp</a> <a href=\"a00196_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00196\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00197\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00197.html\">vector_common.hpp</a> <a href=\"a00197_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00197\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00267.html\">GLM_EXT_vector_common</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00198\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00198.html\">vector_double1.hpp</a> <a href=\"a00198_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00198\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00268.html\">GLM_EXT_vector_double1</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00199\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00199.html\">vector_double1_precision.hpp</a> <a href=\"a00199_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00199\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00269.html\">GLM_EXT_vector_double1_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00200\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00200.html\">vector_double2.hpp</a> <a href=\"a00200_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00200\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00201\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00201.html\">vector_double2_precision.hpp</a> <a href=\"a00201_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00201\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00202\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00202.html\">vector_double3.hpp</a> <a href=\"a00202_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00202\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00203\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00203.html\">vector_double3_precision.hpp</a> <a href=\"a00203_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00203\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00204\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00204.html\">vector_double4.hpp</a> <a href=\"a00204_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00204\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00205\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00205.html\">vector_double4_precision.hpp</a> <a href=\"a00205_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00205\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00206\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00206.html\">vector_float1.hpp</a> <a href=\"a00206_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00206\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00270.html\">GLM_EXT_vector_float1</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00207\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00207.html\">vector_float1_precision.hpp</a> <a href=\"a00207_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00207\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00271.html\">GLM_EXT_vector_float1_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00208\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00208.html\">vector_float2.hpp</a> <a href=\"a00208_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00208\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00209\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00209.html\">vector_float2_precision.hpp</a> <a href=\"a00209_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00209\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00210\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00210.html\">vector_float3.hpp</a> <a href=\"a00210_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00210\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00211\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00211.html\">vector_float3_precision.hpp</a> <a href=\"a00211_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00211\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00212\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00212.html\">vector_float4.hpp</a> <a href=\"a00212_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00212\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00213\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00213.html\">vector_float4_precision.hpp</a> <a href=\"a00213_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00213\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00214\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00214.html\">vector_int1.hpp</a> <a href=\"a00214_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00214\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00272.html\">GLM_EXT_vector_int1</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00215\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00215.html\">vector_int1_precision.hpp</a> <a href=\"a00215_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00215\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00273.html\">GLM_EXT_vector_int1_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00216\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00216.html\">vector_int2.hpp</a> <a href=\"a00216_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00216\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00217\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00217.html\">vector_int2_precision.hpp</a> <a href=\"a00217_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00217\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00218\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00218.html\">vector_int3.hpp</a> <a href=\"a00218_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00218\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00219\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00219.html\">vector_int3_precision.hpp</a> <a href=\"a00219_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00219\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00220\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00220.html\">vector_int4.hpp</a> <a href=\"a00220_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00220\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00221\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00221.html\">vector_int4_precision.hpp</a> <a href=\"a00221_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00221\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00222\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00222.html\">vector_integer.hpp</a> <a href=\"a00222_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00222\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00274.html\">GLM_EXT_vector_integer</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00224\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00224.html\">ext/vector_relational.hpp</a> <a href=\"a00224_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00224\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00275.html\">GLM_EXT_vector_relational</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00226\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00226.html\">vector_uint1.hpp</a> <a href=\"a00226_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00226\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00276.html\">GLM_EXT_vector_uint1</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00227\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00227.html\">vector_uint1_precision.hpp</a> <a href=\"a00227_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00227\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00277.html\">GLM_EXT_vector_uint1_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00228\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00228.html\">vector_uint2.hpp</a> <a href=\"a00228_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00228\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00229\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00229.html\">vector_uint2_precision.hpp</a> <a href=\"a00229_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00229\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00230\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00230.html\">vector_uint3.hpp</a> <a href=\"a00230_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00230\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00231\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00231.html\">vector_uint3_precision.hpp</a> <a href=\"a00231_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00231\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00232\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00232.html\">vector_uint4.hpp</a> <a href=\"a00232_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00232\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00233\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00233.html\">vector_uint4_precision.hpp</a> <a href=\"a00233_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00233\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00234\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00234.html\">vector_ulp.hpp</a> <a href=\"a00234_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00234\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00278.html\">GLM_EXT_vector_ulp</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/dir_9e5fe034a00e89334fd5186c3e7db156.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: G-Truc Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">G-Truc Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_d9496f0844b48bc7e53b5af8c99b9ab2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/dir_a8bee7be44182a33f3820393ae0b105d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: G-Truc Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">G-Truc Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_44e5e654415abd9ca6fdeaddaff8565e\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/dir_cef2d71d502cb69a9252bca2297d9549.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: glm Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">glm Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_033f5edb0915b828d2c46ed4804e5503\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_033f5edb0915b828d2c46ed4804e5503.html\">detail</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_6b66465792d005310484819a0eb0b0d3\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_6b66465792d005310484819a0eb0b0d3.html\">ext</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_4c6bd29c73fa4e5a2509e1c15f846751\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_4c6bd29c73fa4e5a2509e1c15f846751.html\">gtc</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:dir_f35778ec600a1b9bbc4524e62e226aa2\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table><table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:a00015\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00015.html\">common.hpp</a> <a href=\"a00015_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00015\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00026\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00026.html\">exponential.hpp</a> <a href=\"a00026_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00026\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00027\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00027.html\">ext.hpp</a> <a href=\"a00027_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00027\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> (Dependence) <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00035\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><b>fwd.hpp</b> <a href=\"a00035_source.html\">[code]</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00036\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00036.html\">geometric.hpp</a> <a href=\"a00036_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00036\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00037\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00037.html\">glm.hpp</a> <a href=\"a00037_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00037\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00043\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00043.html\">integer.hpp</a> <a href=\"a00043_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00043\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00048\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00048.html\">mat2x2.hpp</a> <a href=\"a00048_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00048\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00049\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00049.html\">mat2x3.hpp</a> <a href=\"a00049_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00049\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00050\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00050.html\">mat2x4.hpp</a> <a href=\"a00050_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00050\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00051\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00051.html\">mat3x2.hpp</a> <a href=\"a00051_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00051\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00052\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00052.html\">mat3x3.hpp</a> <a href=\"a00052_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00052\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00053\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00053.html\">mat3x4.hpp</a> <a href=\"a00053_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00053\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00054\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00054.html\">mat4x2.hpp</a> <a href=\"a00054_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00054\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00055\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00055.html\">mat4x3.hpp</a> <a href=\"a00055_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00055\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00056\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00056.html\">mat4x4.hpp</a> <a href=\"a00056_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00056\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00057\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00057.html\">matrix.hpp</a> <a href=\"a00057_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00057\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00120\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00120.html\">packing.hpp</a> <a href=\"a00120_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00120\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00160\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00160.html\">trigonometric.hpp</a> <a href=\"a00160_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00160\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00184\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00184.html\">vec2.hpp</a> <a href=\"a00184_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00184\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00185\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00185.html\">vec3.hpp</a> <a href=\"a00185_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00185\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00186\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00186.html\">vec4.hpp</a> <a href=\"a00186_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00186\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00225\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00225.html\">vector_relational.hpp</a> <a href=\"a00225_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00225\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00280.html\">Core features</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/dir_d9496f0844b48bc7e53b5af8c99b9ab2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Source Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Source Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"subdirs\"></a>\nDirectories</h2></td></tr>\n<tr class=\"memitem:dir_a8bee7be44182a33f3820393ae0b105d\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">directory &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/dir_f35778ec600a1b9bbc4524e62e226aa2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: gtx Directory Reference</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div id=\"nav-path\" class=\"navpath\">\n  <ul>\n<li class=\"navelem\"><a class=\"el\" href=\"dir_3a581ba30d25676e4b797b1f96d53b45.html\">F:</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_9e5fe034a00e89334fd5186c3e7db156.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_d9496f0844b48bc7e53b5af8c99b9ab2.html\">Source</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_a8bee7be44182a33f3820393ae0b105d.html\">G-Truc</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_44e5e654415abd9ca6fdeaddaff8565e.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_cef2d71d502cb69a9252bca2297d9549.html\">glm</a></li><li class=\"navelem\"><a class=\"el\" href=\"dir_f35778ec600a1b9bbc4524e62e226aa2.html\">gtx</a></li>  </ul>\n</div>\n</div><!-- top -->\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">gtx Directory Reference</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<table class=\"memberdecls\">\n<tr class=\"heading\"><td colspan=\"2\"><h2 class=\"groupheader\"><a name=\"files\"></a>\nFiles</h2></td></tr>\n<tr class=\"memitem:a00007\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00007.html\">associated_min_max.hpp</a> <a href=\"a00007_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00007\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00308.html\">GLM_GTX_associated_min_max</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00008\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00008.html\">bit.hpp</a> <a href=\"a00008_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00008\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00309.html\">GLM_GTX_bit</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00010\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00010.html\">closest_point.hpp</a> <a href=\"a00010_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00010\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00310.html\">GLM_GTX_closest_point</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00011\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00011.html\">color_encoding.hpp</a> <a href=\"a00011_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00011\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00311.html\">GLM_GTX_color_encoding</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00013\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00013.html\">gtx/color_space.hpp</a> <a href=\"a00013_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00013\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00312.html\">GLM_GTX_color_space</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00014\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00014.html\">color_space_YCoCg.hpp</a> <a href=\"a00014_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00014\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00313.html\">GLM_GTX_color_space_YCoCg</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00016\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00016.html\">gtx/common.hpp</a> <a href=\"a00016_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00016\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00314.html\">GLM_GTX_common</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00017\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00017.html\">compatibility.hpp</a> <a href=\"a00017_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00017\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00315.html\">GLM_GTX_compatibility</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00018\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00018.html\">component_wise.hpp</a> <a href=\"a00018_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00018\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00316.html\">GLM_GTX_component_wise</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00022\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00022.html\">dual_quaternion.hpp</a> <a href=\"a00022_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00022\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00317.html\">GLM_GTX_dual_quaternion</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00023\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00023.html\">easing.hpp</a> <a href=\"a00023_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00023\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00318.html\">GLM_GTX_easing</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00025\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00025.html\">euler_angles.hpp</a> <a href=\"a00025_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00025\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00319.html\">GLM_GTX_euler_angles</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00028\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00028.html\">extend.hpp</a> <a href=\"a00028_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00028\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00320.html\">GLM_GTX_extend</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00029\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00029.html\">extended_min_max.hpp</a> <a href=\"a00029_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00029\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00321.html\">GLM_GTX_extented_min_max</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00030\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00030.html\">exterior_product.hpp</a> <a href=\"a00030_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00030\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00322.html\">GLM_GTX_exterior_product</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00031\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00031.html\">fast_exponential.hpp</a> <a href=\"a00031_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00031\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00323.html\">GLM_GTX_fast_exponential</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00032\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00032.html\">fast_square_root.hpp</a> <a href=\"a00032_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00032\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00324.html\">GLM_GTX_fast_square_root</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00033\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00033.html\">fast_trigonometry.hpp</a> <a href=\"a00033_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00033\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00325.html\">GLM_GTX_fast_trigonometry</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00034\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00034.html\">functions.hpp</a> <a href=\"a00034_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00034\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00326.html\">GLM_GTX_functions</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00038\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00038.html\">gradient_paint.hpp</a> <a href=\"a00038_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00038\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00327.html\">GLM_GTX_gradient_paint</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00039\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00039.html\">handed_coordinate_space.hpp</a> <a href=\"a00039_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00039\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00328.html\">GLM_GTX_handed_coordinate_space</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00040\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00040.html\">hash.hpp</a> <a href=\"a00040_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00040\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00329.html\">GLM_GTX_hash</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00042\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00042.html\">gtx/integer.hpp</a> <a href=\"a00042_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00042\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00330.html\">GLM_GTX_integer</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00044\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00044.html\">intersect.hpp</a> <a href=\"a00044_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00044\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00331.html\">GLM_GTX_intersect</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00045\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00045.html\">io.hpp</a> <a href=\"a00045_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00045\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00332.html\">GLM_GTX_io</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00046\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00046.html\">log_base.hpp</a> <a href=\"a00046_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00046\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00333.html\">GLM_GTX_log_base</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00061\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00061.html\">matrix_cross_product.hpp</a> <a href=\"a00061_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00061\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00334.html\">GLM_GTX_matrix_cross_product</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00062\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00062.html\">matrix_decompose.hpp</a> <a href=\"a00062_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00062\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00335.html\">GLM_GTX_matrix_decompose</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00081\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00081.html\">matrix_factorisation.hpp</a> <a href=\"a00081_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00081\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00336.html\">GLM_GTX_matrix_factorisation</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00101\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00101.html\">matrix_interpolation.hpp</a> <a href=\"a00101_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00101\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00337.html\">GLM_GTX_matrix_interpolation</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00103\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00103.html\">matrix_major_storage.hpp</a> <a href=\"a00103_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00103\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00338.html\">GLM_GTX_matrix_major_storage</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00104\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00104.html\">matrix_operation.hpp</a> <a href=\"a00104_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00104\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00339.html\">GLM_GTX_matrix_operation</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00106\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00106.html\">matrix_query.hpp</a> <a href=\"a00106_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00106\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00340.html\">GLM_GTX_matrix_query</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00110\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00110.html\">matrix_transform_2d.hpp</a> <a href=\"a00110_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00110\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00341.html\">GLM_GTX_matrix_transform_2d</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00111\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00111.html\">mixed_product.hpp</a> <a href=\"a00111_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00111\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00342.html\">GLM_GTX_mixed_producte</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00113\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00113.html\">norm.hpp</a> <a href=\"a00113_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00113\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00343.html\">GLM_GTX_norm</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00114\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00114.html\">normal.hpp</a> <a href=\"a00114_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00114\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00344.html\">GLM_GTX_normal</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00115\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00115.html\">normalize_dot.hpp</a> <a href=\"a00115_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00115\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00345.html\">GLM_GTX_normalize_dot</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00116\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00116.html\">number_precision.hpp</a> <a href=\"a00116_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00116\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00346.html\">GLM_GTX_number_precision</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00117\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00117.html\">optimum_pow.hpp</a> <a href=\"a00117_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00117\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00347.html\">GLM_GTX_optimum_pow</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00118\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00118.html\">orthonormalize.hpp</a> <a href=\"a00118_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00118\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00348.html\">GLM_GTX_orthonormalize</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00121\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00121.html\">perpendicular.hpp</a> <a href=\"a00121_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00121\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00349.html\">GLM_GTX_perpendicular</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00122\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00122.html\">polar_coordinates.hpp</a> <a href=\"a00122_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00122\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00350.html\">GLM_GTX_polar_coordinates</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00123\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00123.html\">projection.hpp</a> <a href=\"a00123_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00123\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00351.html\">GLM_GTX_projection</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00126\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00126.html\">gtx/quaternion.hpp</a> <a href=\"a00126_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00126\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00352.html\">GLM_GTX_quaternion</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00138\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00138.html\">range.hpp</a> <a href=\"a00138_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00138\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00353.html\">GLM_GTX_range</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00139\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00139.html\">raw_data.hpp</a> <a href=\"a00139_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00139\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00354.html\">GLM_GTX_raw_data</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00141\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00141.html\">rotate_normalized_axis.hpp</a> <a href=\"a00141_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00141\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00355.html\">GLM_GTX_rotate_normalized_axis</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00142\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00142.html\">rotate_vector.hpp</a> <a href=\"a00142_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00142\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00356.html\">GLM_GTX_rotate_vector</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00148\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00148.html\">scalar_multiplication.hpp</a> <a href=\"a00148_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00148\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00150\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00150.html\">gtx/scalar_relational.hpp</a> <a href=\"a00150_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00150\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00357.html\">GLM_GTX_scalar_relational</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00154\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00154.html\">spline.hpp</a> <a href=\"a00154_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00154\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00358.html\">GLM_GTX_spline</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00155\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00155.html\">std_based_type.hpp</a> <a href=\"a00155_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00155\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00359.html\">GLM_GTX_std_based_type</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00156\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00156.html\">string_cast.hpp</a> <a href=\"a00156_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00156\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00360.html\">GLM_GTX_string_cast</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00157\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00157.html\">texture.hpp</a> <a href=\"a00157_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00157\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00361.html\">GLM_GTX_texture</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00158\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00158.html\">transform.hpp</a> <a href=\"a00158_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00158\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00362.html\">GLM_GTX_transform</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00159\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00159.html\">transform2.hpp</a> <a href=\"a00159_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00159\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00363.html\">GLM_GTX_transform2</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00162\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00162.html\">gtx/type_aligned.hpp</a> <a href=\"a00162_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00162\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00364.html\">GLM_GTX_type_aligned</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00177\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00177.html\">type_trait.hpp</a> <a href=\"a00177_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00177\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00365.html\">GLM_GTX_type_trait</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00187\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00187.html\">vec_swizzle.hpp</a> <a href=\"a00187_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00187\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00366.html\">GLM_GTX_vec_swizzle</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00188\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00188.html\">vector_angle.hpp</a> <a href=\"a00188_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00188\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00367.html\">GLM_GTX_vector_angle</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00223\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00223.html\">vector_query.hpp</a> <a href=\"a00223_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00223\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00368.html\">GLM_GTX_vector_query</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n<tr class=\"memitem:a00235\"><td class=\"memItemLeft\" align=\"right\" valign=\"top\">file &#160;</td><td class=\"memItemRight\" valign=\"bottom\"><a class=\"el\" href=\"a00235.html\">wrap.hpp</a> <a href=\"a00235_source.html\">[code]</a></td></tr>\n<tr class=\"memdesc:a00235\"><td class=\"mdescLeft\">&#160;</td><td class=\"mdescRight\"><a class=\"el\" href=\"a00369.html\">GLM_GTX_wrap</a> <br /></td></tr>\n<tr class=\"separator:\"><td class=\"memSeparator\" colspan=\"2\">&#160;</td></tr>\n</table>\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/doxygen.css",
    "content": "/* The standard CSS for doxygen 1.8.10 */\n\nbody, table, div, p, dl {\n\tfont: 400 14px/22px Roboto,sans-serif;\n}\n\nbody\n{\n\tmargin:0px;\n\tpadding:0px;\n\tbackground-color:#bf6000;\n\tbackground-repeat:no-repeat;\n\tbackground-position:center center;\n\tbackground-attachment:fixed;\n\tmin-height:1200px;\n\toverflow:auto;\n}\n\n/* @group Heading Levels */\n\nh1.groupheader {\n\tcolor:#bf6000;\n\tfont-size: 150%;\n}\n\n.title {\n\tcolor:#bf6000;\n\tfont: 400 14px/28px Roboto,sans-serif;\n\tfont-size: 150%;\n\tfont-weight: bold;\n\tmargin: 10px 2px;\n}\n\nh2.groupheader {\n\tborder-bottom: 1px solid #bf6000;\n\tcolor:#bf6000;\n\tfont-size: 150%;\n\tfont-weight: normal;\n\tmargin-top: 1.75em;\n\tpadding-top: 8px;\n\tpadding-bottom: 4px;\n\twidth: 100%;\n}\n\nh3.groupheader {\n\tfont-size: 100%;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\t-webkit-transition: text-shadow 0.5s linear;\n\t-moz-transition: text-shadow 0.5s linear;\n\t-ms-transition: text-shadow 0.5s linear;\n\t-o-transition: text-shadow 0.5s linear;\n\ttransition: text-shadow 0.5s linear;\n\tmargin-right: 15px;\n}\n\nh1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {\n\ttext-shadow: 0 0 15px cyan;\n}\n\ndt {\n\tfont-weight: bold;\n}\n\ndiv.multicol {\n\t-moz-column-gap: 1em;\n\t-webkit-column-gap: 1em;\n\t-moz-column-count: 3;\n\t-webkit-column-count: 3;\n}\n\np.startli, p.startdd {\n\tmargin-top: 2px;\n}\n\np.starttd {\n\tmargin-top: 0px;\n}\n\np.endli {\n\tmargin-bottom: 0px;\n}\n\np.enddd {\n\tmargin-bottom: 4px;\n}\n\np.endtd {\n\tmargin-bottom: 2px;\n}\n\n/* @end */\n\ncaption {\n\tfont-weight: bold;\n}\n\nspan.legend {\n        font-size: 70%;\n        text-align: center;\n}\n\nh3.version {\n        font-size: 90%;\n        text-align: center;\n}\n\ndiv.qindex, div.navtab{\n\tbackground-color: #FFF8F0;\n\tborder: 1px solid #FF8000;\n\ttext-align: center;\n}\n\ndiv.qindex, div.navpath {\n\twidth: 100%;\n\tline-height: 140%;\n}\n\ndiv.navtab {\n\tmargin-right: 15px;\n}\n\n/* @group Link Styling */\n\na {\n\tcolor: #000000;\n\tfont-weight: normal;\n\ttext-decoration: none;\n}\n\n.contents a:visited {\n\tcolor: #606060;\n}\n\n.contents{\n\tbackground-color: #FFFFFF;\n\tpadding-top:8px;\n\tpadding-bottom:8px;\n\tpadding-left:32px; \n\tpadding-right:32px;\n\tmargin:0px;\n\tmargin-left:auto; \n\tmargin-right:auto;\n\twidth:1216px;\n\tborder-bottom-left-radius: 8px;\n\tborder-bottom-right-radius: 8px;\n}\n\na:hover {\n\ttext-decoration: underline;\n}\n\na.qindex {\n\tfont-weight: bold;\n}\n\na.qindexHL {\n\tfont-weight: bold;\n\tbackground-color: #9CAFD4;\n\tcolor: #ffffff;\n\tborder: 1px double #869DCA;\n}\n\n.contents a.qindexHL:visited {\n        color: #ffffff;\n}\n\na.el {\n\tfont-weight: bold;\n}\n\na.elRef {\n}\n\na.code, a.code:visited, a.line, a.line:visited {\n\tcolor: #4665A2; \n}\n\na.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {\n\tcolor: #4665A2; \n}\n\n/* @end */\n\ndl.el {\n\tmargin-left: -1cm;\n}\n\npre.fragment {\n        border: 1px solid #FF8000;\n        background-color: #FFF8F0;\n        padding: 4px 6px;\n        margin: 4px 8px 4px 2px;\n        overflow: auto;\n        word-wrap: break-word;\n        font-size:  9pt;\n        line-height: 125%;\n        font-family: monospace, fixed;\n        font-size: 105%;\n}\n\ndiv.fragment {\n\tpadding: 4px 6px;\n\tmargin: 4px 8px 4px 2px;\n\tbackground-color: #FFF8F0;\n\tborder: 1px solid #FF8000;\n}\n\ndiv.line {\n\tfont-family: monospace, fixed;\n\tfont-size: 13px;\n\tmin-height: 13px;\n\tline-height: 1.0;\n\ttext-wrap: unrestricted;\n\twhite-space: -moz-pre-wrap; /* Moz */\n\twhite-space: -pre-wrap;     /* Opera 4-6 */\n\twhite-space: -o-pre-wrap;   /* Opera 7 */\n\twhite-space: pre-wrap;      /* CSS3  */\n\tword-wrap: break-word;      /* IE 5.5+ */\n\ttext-indent: -53px;\n\tpadding-left: 53px;\n\tpadding-bottom: 0px;\n\tmargin: 0px;\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\ndiv.line.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 10px cyan;\n}\n\n\nspan.lineno {\n\tpadding-right: 4px;\n\ttext-align: right;\n\tborder-right: 2px solid #0F0;\n\tbackground-color: #E8E8E8;\n\twhite-space: pre;\n}\nspan.lineno a {\n\tbackground-color: #D8D8D8;\n}\n\nspan.lineno a:hover {\n\tbackground-color: #C8C8C8;\n}\n\ndiv.ah, span.ah {\n\tbackground-color: black;\n\tfont-weight: bold;\n\tcolor: #ffffff;\n\tmargin-bottom: 3px;\n\tmargin-top: 3px;\n\tpadding: 0.2em;\n\tborder: solid thin #333;\n\tborder-radius: 0.5em;\n\t-webkit-border-radius: .5em;\n\t-moz-border-radius: .5em;\n\tbox-shadow: 2px 2px 3px #999;\n\t-webkit-box-shadow: 2px 2px 3px #999;\n\t-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n\tbackground-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));\n\tbackground-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);\n}\n\ndiv.classindex ul {\n        list-style: none;\n        padding-left: 0;\n}\n\ndiv.classindex span.ai {\n        display: inline-block;\n}\n\ndiv.groupHeader {\n\tmargin-left: 16px;\n\tmargin-top: 12px;\n\tfont-weight: bold;\n}\n\ndiv.groupText {\n\tmargin-left: 16px;\n\tfont-style: italic;\n}\n\nbody {\n\tcolor: black;\n\tmargin: 0;\n}\n\ntd.indexkey {\n\tbackground-color: #FFF8F0;\n\tfont-weight: bold;\n\tborder: 1px solid #C4CFE5;\n\tmargin: 2px 0px 2px 0;\n\tpadding: 2px 10px;\n\twhite-space: nowrap;\n\tvertical-align: top;\n}\n\ntd.indexvalue {\n\tbackground-color: #FFF8F0;\n\tborder: 1px solid #C4CFE5;\n\tpadding: 2px 10px;\n\tmargin: 2px 0px;\n}\n\ntr.memlist {\n\tbackground-color: #FFF8F0;\n}\n\np.formulaDsp {\n\ttext-align: center;\n}\n\nimg.formulaDsp {\n\t\n}\n\nimg.formulaInl {\n\tvertical-align: middle;\n}\n\ndiv.center {\n\ttext-align: center;\n\tmargin-top: 0px;\n\tmargin-bottom: 0px;\n\tpadding: 0px;\n}\n\ndiv.center img {\n\tborder: 0px;\n}\n\naddress.footer {\n\tdisplay: none;\n}\n\nimg.footer {\n\tborder: 0px;\n\tvertical-align: middle;\n}\n\n/* @group Code Colorization */\n\nspan.keyword {\n\tcolor: #008000\n}\n\nspan.keywordtype {\n\tcolor: #604020\n}\n\nspan.keywordflow {\n\tcolor: #e08000\n}\n\nspan.comment {\n\tcolor: #800000\n}\n\nspan.preprocessor {\n\tcolor: #806020\n}\n\nspan.stringliteral {\n\tcolor: #002080\n}\n\nspan.charliteral {\n\tcolor: #008080\n}\n\nspan.vhdldigit { \n\tcolor: #ff00ff \n}\n\nspan.vhdlchar { \n\tcolor: #000000 \n}\n\nspan.vhdlkeyword { \n\tcolor: #700070 \n}\n\nspan.vhdllogic { \n\tcolor: #ff0000 \n}\n\nblockquote {\n        background-color: #F7F8FB;\n        border-left: 2px solid #9CAFD4;\n        margin: 0 24px 0 4px;\n        padding: 0 12px 0 16px;\n}\n\n/* @end */\n\n/*\n.search {\n\tcolor: #003399;\n\tfont-weight: bold;\n}\n\nform.search {\n\tmargin-bottom: 0px;\n\tmargin-top: 0px;\n}\n\ninput.search {\n\tfont-size: 75%;\n\tcolor: #000080;\n\tfont-weight: normal;\n\tbackground-color: #e8eef2;\n}\n*/\n\ntd.tiny {\n\tfont-size: 75%;\n}\n\n.dirtab {\n\tpadding: 4px;\n\tborder-collapse: collapse;\n\tborder: 1px solid #FF8000;\n}\n\nth.dirtab {\n\tbackground: #EBEFF6;\n\tfont-weight: bold;\n}\n\nhr {\n\theight: 0px;\n\tborder: none;\n\tborder-top: 1px solid #4A6AAA;\n}\n\nhr.footer {\n\tdisplay: none;\n}\n\n/* @group Member Descriptions */\n\ntable.memberdecls {\n\tborder-spacing: 0px;\n\tpadding: 0px;\n}\n\n.memberdecls td, .fieldtable tr {\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\n.memberdecls td.glow, .fieldtable tr.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 15px cyan;\n}\n\n.mdescLeft, .mdescRight,\n.memItemLeft, .memItemRight,\n.memTemplItemLeft, .memTemplItemRight, .memTemplParams {\n\tbackground-color: #FFFCF8;\n\tborder: none;\n\tmargin: 4px;\n\tpadding: 1px 0 0 8px;\n}\n\n.mdescLeft, .mdescRight {\n\tpadding: 0px 8px 4px 8px;\n\tcolor: #555;\n}\n\n.memSeparator {\n        border-bottom: 1px solid #FFF8F0;\n        line-height: 1px;\n        margin: 0px;\n        padding: 0px;\n}\n\n.memItemLeft, .memTemplItemLeft {\n        white-space: nowrap;\n}\n\n.memItemRight {\n\twidth: 100%;\n}\n\n.memTemplParams {\n\tcolor: #bf6000;\n        white-space: nowrap;\n\tfont-size: 80%;\n}\n\n/* @end */\n\n/* @group Member Details */\n\n/* Styles for detailed member documentation */\n\n.memtemplate {\n\tfont-size: 80%;\n\tcolor: #4665A2;\n\tfont-weight: normal;\n\tmargin-left: 9px;\n}\n\n.memnav {\n\tbackground-color: #FFF8F0;\n\tborder: 1px solid #FF8000;\n\ttext-align: center;\n\tmargin: 2px;\n\tmargin-right: 15px;\n\tpadding: 2px;\n}\n\n.mempage {\n\twidth: 100%;\n}\n\n.memitem {\n\tpadding: 0;\n\tmargin-bottom: 10px;\n\tmargin-right: 5px;\n        -webkit-transition: box-shadow 0.5s linear;\n        -moz-transition: box-shadow 0.5s linear;\n        -ms-transition: box-shadow 0.5s linear;\n        -o-transition: box-shadow 0.5s linear;\n        transition: box-shadow 0.5s linear;\n        display: table !important;\n        width: 100%;\n}\n\n.memitem.glow {\n         box-shadow: 0 0 15px cyan;\n}\n\n.memname {\n        font-weight: bold;\n        margin-left: 6px;\n}\n\n.memname td {\n\tvertical-align: bottom;\n}\n\n.memproto, dl.reflist dt {\n        border-top: 1px solid #bf6000;\n        border-left: 1px solid #bf6000;\n        border-right: 1px solid #bf6000;\n        padding: 6px 0px 6px 0px;\n        /*color: #253555;*/\n        font-weight: bold;\n        /*text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);*/\n        /*background-image:url('nav_f.png');*/\n        background-repeat:repeat-x;\n        background-color: #FFF8F0;\n        /* opera specific markup */\n        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        border-top-right-radius: 4px;\n        border-top-left-radius: 4px;\n        /* firefox specific markup */\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        -moz-border-radius-topright: 4px;\n        -moz-border-radius-topleft: 4px;\n        /* webkit specific markup */\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        -webkit-border-top-right-radius: 4px;\n        -webkit-border-top-left-radius: 4px;\n\n}\n\n.memdoc, dl.reflist dd {\n        border-bottom: 1px solid #bf6000;      \n        border-left: 1px solid #bf6000;      \n        border-right: 1px solid #bf6000; \n        padding: 6px 10px 2px 10px;\n        border-top-width: 0;\n        background-image:url('nav_g.png');\n        background-repeat:repeat-x;\n        background-color: #FFFDFB;\n        /* opera specific markup */\n        border-bottom-left-radius: 4px;\n        border-bottom-right-radius: 4px;\n        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        /* firefox specific markup */\n        -moz-border-radius-bottomleft: 4px;\n        -moz-border-radius-bottomright: 4px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        /* webkit specific markup */\n        -webkit-border-bottom-left-radius: 4px;\n        -webkit-border-bottom-right-radius: 4px;\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n}\n\ndl.reflist dt {\n        padding: 5px;\n}\n\ndl.reflist dd {\n        margin: 0px 0px 10px 0px;\n        padding: 5px;\n}\n\n.paramkey {\n\ttext-align: right;\n}\n\n.paramtype {\n\twhite-space: nowrap;\n}\n\n.paramname {\n\tcolor: #602020;\n\twhite-space: nowrap;\n}\n.paramname em {\n\tfont-style: normal;\n}\n.paramname code {\n        line-height: 14px;\n}\n\n.params, .retval, .exception, .tparams {\n        margin-left: 0px;\n        padding-left: 0px;\n}       \n\n.params .paramname, .retval .paramname {\n        font-weight: bold;\n        vertical-align: top;\n}\n        \n.params .paramtype {\n        font-style: italic;\n        vertical-align: top;\n}       \n        \n.params .paramdir {\n        font-family: \"courier new\",courier,monospace;\n        vertical-align: top;\n}\n\ntable.mlabels {\n\tborder-spacing: 0px;\n}\n\ntd.mlabels-left {\n\twidth: 100%;\n\tpadding: 0px;\n}\n\ntd.mlabels-right {\n\tvertical-align: bottom;\n\tpadding: 0px;\n\twhite-space: nowrap;\n}\n\nspan.mlabels {\n        margin-left: 8px;\n}\n\nspan.mlabel {\n\tbackground-color: #728DC1;\n\tborder-top:1px solid #5373B4;\n\tborder-left:1px solid #5373B4;\n\tborder-right:1px solid #C4CFE5;\n\tborder-bottom:1px solid #C4CFE5;\n\ttext-shadow: none;\n\tcolor: white;\n\tmargin-right: 4px;\n\tpadding: 2px 3px;\n\tborder-radius: 3px;\n\tfont-size: 7pt;\n\twhite-space: nowrap;\n\tvertical-align: middle;\n}\n\n\n\n/* @end */\n\n/* these are for tree view inside a (index) page */\n\ndiv.directory {\n        margin: 10px 0px;\n        border-top: 1px solid #bf6000;\n        border-bottom: 1px solid #bf6000;\n        width: 100%;\n}\n\n.directory table {\n        border-collapse:collapse;\n}\n\n.directory td {\n\tmargin: 0px;\n\tpadding: 0px;\n\tvertical-align: top;\n}\n\n.directory td.entry {\n\twhite-space: nowrap;\n\tpadding-right: 6px;\n\tpadding-top: 3px;\n}\n\n.directory td.entry a {\n        outline:none;\n}\n\n.directory td.entry a img {\n        border: none;\n}\n\n.directory td.desc {\n\twidth: 100%;\n\tpadding-left: 6px;\n\tpadding-right: 6px;\n\tpadding-top: 3px;\n\tborder-left: 1px solid rgba(0,0,0,0.05);\n}\n\n.directory tr.even {\n\tpadding-left: 6px;\n\tbackground-color: #FFFDFB;\n}\n\n.directory img {\n\tvertical-align: -30%;\n}\n\n.directory .levels {\n        white-space: nowrap;\n        width: 100%;\n        text-align: right;\n        font-size: 9pt;\n}\n\n.directory .levels span {\n\tcursor: pointer;\n\tpadding-left: 2px;\n\tpadding-right: 2px;\n\tcolor: #bf6000;\n}\n\n.arrow {\n    color: #bf6000;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    cursor: pointer;\n    font-size: 80%;\n    display: inline-block;\n    width: 16px;\n    height: 22px;\n}\n\n.icon {\n    font-family: Arial, Helvetica;\n    font-weight: bold;\n    font-size: 12px;\n    height: 14px;\n    width: 16px;\n    display: inline-block;\n    background-color: #bf6000;\n    color: white;\n    text-align: center;\n    border-radius: 4px;\n    margin-left: 2px;\n    margin-right: 2px;\n}\n\n.icona {\n    width: 24px;\n    height: 22px;\n    display: inline-block;\n}\n\n.iconfopen {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('folderopen.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\n.iconfclosed {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('folderclosed.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\n.icondoc {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('doc.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\ntable.directory {\n    font: 400 14px Roboto,sans-serif;\n}\n\n/* @end */\n\ndiv.dynheader {\n\tmargin-top: 8px;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\naddress {\n\tfont-style: normal;\n\tcolor: #2A3D61;\n}\n\ntable.doxtable {\n\tborder-collapse:collapse;\n\tmargin-top: 4px;\n\tmargin-bottom: 4px;\n}\n\ntable.doxtable td, table.doxtable th {\n\tborder: 1px solid #2D4068;\n\tpadding: 3px 7px 2px;\n}\n\ntable.doxtable th {\n\tbackground-color: #374F7F;\n\tcolor: #FFFFFF;\n\tfont-size: 110%;\n\tpadding-bottom: 4px;\n\tpadding-top: 5px;\n}\n\ntable.fieldtable {\n        /*width: 100%;*/\n        margin-bottom: 10px;\n        border: 1px solid #A8B8D9;\n        border-spacing: 0px;\n        -moz-border-radius: 4px;\n        -webkit-border-radius: 4px;\n        border-radius: 4px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n}\n\n.fieldtable td, .fieldtable th {\n        padding: 3px 7px 2px;\n}\n\n.fieldtable td.fieldtype, .fieldtable td.fieldname {\n        white-space: nowrap;\n        border-right: 1px solid #A8B8D9;\n        border-bottom: 1px solid #A8B8D9;\n        vertical-align: top;\n}\n\n.fieldtable td.fieldname {\n        padding-top: 3px;\n}\n\n.fieldtable td.fielddoc {\n        border-bottom: 1px solid #A8B8D9;\n        /*width: 100%;*/\n}\n\n.fieldtable td.fielddoc p:first-child {\n        margin-top: 0px;\n}       \n        \n.fieldtable td.fielddoc p:last-child {\n        margin-bottom: 2px;\n}\n\n.fieldtable tr:last-child td {\n        border-bottom: none;\n}\n\n.fieldtable th {\n        background-image:url('nav_f.png');\n        background-repeat:repeat-x;\n        background-color: #E2E8F2;\n        font-size: 90%;\n        color: #253555;\n        padding-bottom: 4px;\n        padding-top: 5px;\n        text-align:left;\n        -moz-border-radius-topleft: 4px;\n        -moz-border-radius-topright: 4px;\n        -webkit-border-top-left-radius: 4px;\n        -webkit-border-top-right-radius: 4px;\n        border-top-left-radius: 4px;\n        border-top-right-radius: 4px;\n        border-bottom: 1px solid #A8B8D9;\n}\n\n\n.tabsearch {\n\ttop: 0px;\n\tleft: 10px;\n\theight: 36px;\n\tbackground-image: url('tab_b.png');\n\tz-index: 101;\n\toverflow: hidden;\n\tfont-size: 13px;\n}\n\n.navpath ul\n{\n\tfont-size: 11px;\n\t/*background-image:url('tab_b.png');*/\n\tbackground-color: #FFF8F0;\n\tbackground-repeat:repeat-x;\n\tbackground-position: 0 -5px;\n\theight:30px;\n\tline-height:30px;\n\tcolor:#bf6000;\n\tborder:solid 0px #C2CDE4;\n\toverflow:hidden;\n\tmargin:0px;\n\tpadding:0px;\n}\n\n.navpath li\n{\n\tlist-style-type:none;\n\tfloat:left;\n\tpadding-left:10px;\n\tpadding-right:15px;\n\tbackground-image:url('bc_s.png');\n\tbackground-repeat:no-repeat;\n\tbackground-position:right;\n\tcolor:#bf6000;\n}\n\n.navpath li.navelem a\n{\n\theight:32px;\n\tdisplay:block;\n\ttext-decoration: none;\n\toutline: none;\n\tcolor: #bf6000;\n\tfont-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n\ttext-decoration: none;        \n}\n\n.navpath li.navelem a:hover\n{\n\tcolor:#6884BD;\n}\n\n.navpath li.footer\n{\n        list-style-type:none;\n        float:right;\n        padding-left:10px;\n        padding-right:15px;\n        background-image:none;\n        background-repeat:no-repeat;\n        background-position:right;\n        color:#bf6000;\n        font-size: 8pt;\n}\n\ndiv.summary\n{\n\tfloat: right;\n\tfont-size: 8pt;\n\tpadding-right: 5px;\n\twidth: 50%;\n\ttext-align: right;\n}\n\ndiv.summary a\n{\n\twhite-space: nowrap;\n}\n\ndiv.ingroups\n{\n\tfont-size: 8pt;\n\twidth: 50%;\n\ttext-align: left;\n}\n\ndiv.ingroups a\n{\n\twhite-space: nowrap;\n}\n\ndiv.header\n{\n\tbackground-repeat:repeat-x;\n\tbackground-color: #FFFCF8;\n\n\tpadding:0px;\n\tmargin:0px;\n\tmargin-left:auto; \n\tmargin-right:auto;\n\twidth:1280px;\n}\n\ndiv.headertitle\n{\n\tpadding: 5px 5px 5px 10px;\n}\n\ndl\n{\n        padding: 0 0 0 10px;\n}\n\n/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */\ndl.section\n{\n\tmargin-left: 0px;\n\tpadding-left: 0px;\n}\n\ndl.note\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #D0C000;\n}\n\ndl.warning, dl.attention\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #FF0000;\n}\n\ndl.pre, dl.post, dl.invariant\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #00D000;\n}\n\ndl.deprecated\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #505050;\n}\n\ndl.todo\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #E0C000;\n}\n\ndl.test\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #3030E0;\n}\n\ndl.bug\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #C08050;\n}\n\ndl.section dd {\n\tmargin-bottom: 6px;\n}\n\n\n#projectlogo\n{\n\ttext-align: center;\n\tvertical-align: bottom;\n\tborder-collapse: separate;\n}\n \n#projectlogo img\n{ \n\tborder: 0px none;\n}\n \n#projectalign\n{\n        vertical-align: middle;\n}\n\n#projectname\n{\n\tfont: 300% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 2px 0px;\n\tcolor: #FF8000;\n}\n    \n#projectbrief\n{\n\tfont: 120% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#projectnumber\n{\n\tfont: 50% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#titlearea\n{\n\tpadding: 0px;\n\tmargin: 0px;\n\twidth: 100%;\n\tborder-bottom: 1px solid #5373B4;\n}\n\n.image\n{\n        text-align: center;\n}\n\n.dotgraph\n{\n        text-align: center;\n}\n\n.mscgraph\n{\n        text-align: center;\n}\n\n.diagraph\n{\n        text-align: center;\n}\n\n.caption\n{\n\tfont-weight: bold;\n}\n\ndiv.zoom\n{\n\tborder: 1px solid #90A5CE;\n}\n\ndl.citelist {\n        margin-bottom:50px;\n}\n\ndl.citelist dt {\n        color:#334975;\n        float:left;\n        font-weight:bold;\n        margin-right:10px;\n        padding:5px;\n}\n\ndl.citelist dd {\n        margin:2px 0;\n        padding:5px 0;\n}\n\ndiv.toc {\n        padding: 14px 25px;\n        background-color: #F4F6FA;\n        border: 1px solid #D8DFEE;\n        border-radius: 7px 7px 7px 7px;\n        float: right;\n        height: auto;\n        margin: 0 20px 10px 10px;\n        width: 200px;\n}\n\ndiv.toc li {\n        background: url(\"bdwn.png\") no-repeat scroll 0 5px transparent;\n        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;\n        margin-top: 5px;\n        padding-left: 10px;\n        padding-top: 2px;\n}\n\ndiv.toc h3 {\n        font: bold 12px/1.2 Arial,FreeSans,sans-serif;\n\tcolor: #4665A2;\n        border-bottom: 0 none;\n        margin: 0;\n}\n\ndiv.toc ul {\n        list-style: none outside none;\n        border: medium none;\n        padding: 0px;\n}       \n\ndiv.toc li.level1 {\n        margin-left: 0px;\n}\n\ndiv.toc li.level2 {\n        margin-left: 15px;\n}\n\ndiv.toc li.level3 {\n        margin-left: 30px;\n}\n\ndiv.toc li.level4 {\n        margin-left: 45px;\n}\n\n.inherit_header {\n\tfont-weight: bold;\n\tcolor: gray;\n\tcursor: pointer;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n.inherit_header td {\n        padding: 6px 0px 2px 5px;\n}\n\n.inherit {\n        display: none;\n}\n\ntr.heading h2 {\n        margin-top: 12px;\n        margin-bottom: 4px;\n}\n\n/* tooltip related style info */\n\n.ttc {\n        position: absolute;\n        display: none;\n}\n\n#powerTip {\n\tcursor: default;\n\twhite-space: nowrap;\n\tbackground-color: white;\n\tborder: 1px solid gray;\n\tborder-radius: 4px 4px 4px 4px;\n\tbox-shadow: 1px 1px 7px gray;\n\tdisplay: none;\n\tfont-size: smaller;\n\tmax-width: 80%;\n\topacity: 0.9;\n\tpadding: 1ex 1em 1em;\n\tposition: absolute;\n\tz-index: 2147483647;\n}\n\n#powerTip div.ttdoc {\n        color: grey;\n\tfont-style: italic;\n}\n\n#powerTip div.ttname a {\n        font-weight: bold;\n}\n\n#powerTip div.ttname {\n        font-weight: bold;\n}\n\n#powerTip div.ttdeci {\n        color: #006318;\n}\n\n#powerTip div {\n        margin: 0px;\n        padding: 0px;\n        font: 12px/16px Roboto,sans-serif;\n}\n\n#powerTip:before, #powerTip:after {\n\tcontent: \"\";\n\tposition: absolute;\n\tmargin: 0px;\n}\n\n#powerTip.n:after,  #powerTip.n:before,\n#powerTip.s:after,  #powerTip.s:before,\n#powerTip.w:after,  #powerTip.w:before,\n#powerTip.e:after,  #powerTip.e:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.nw:after, #powerTip.nw:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n}\n\n#powerTip.n:after,  #powerTip.s:after,\n#powerTip.w:after,  #powerTip.e:after,\n#powerTip.nw:after, #powerTip.ne:after,\n#powerTip.sw:after, #powerTip.se:after {\n\tborder-color: rgba(255, 255, 255, 0);\n}\n\n#powerTip.n:before,  #powerTip.s:before,\n#powerTip.w:before,  #powerTip.e:before,\n#powerTip.nw:before, #powerTip.ne:before,\n#powerTip.sw:before, #powerTip.se:before {\n\tborder-color: rgba(128, 128, 128, 0);\n}\n\n#powerTip.n:after,  #powerTip.n:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.nw:after, #powerTip.nw:before {\n\ttop: 100%;\n}\n\n#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {\n\tborder-top-color: #ffffff;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n#powerTip.n:before {\n\tborder-top-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n#powerTip.n:after, #powerTip.n:before {\n\tleft: 50%;\n}\n\n#powerTip.nw:after, #powerTip.nw:before {\n\tright: 14px;\n}\n\n#powerTip.ne:after, #powerTip.ne:before {\n\tleft: 14px;\n}\n\n#powerTip.s:after,  #powerTip.s:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tbottom: 100%;\n}\n\n#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {\n\tborder-bottom-color: #ffffff;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n\n#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {\n\tborder-bottom-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n\n#powerTip.s:after, #powerTip.s:before {\n\tleft: 50%;\n}\n\n#powerTip.sw:after, #powerTip.sw:before {\n\tright: 14px;\n}\n\n#powerTip.se:after, #powerTip.se:before {\n\tleft: 14px;\n}\n\n#powerTip.e:after, #powerTip.e:before {\n\tleft: 100%;\n}\n#powerTip.e:after {\n\tborder-left-color: #ffffff;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.e:before {\n\tborder-left-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n#powerTip.w:after, #powerTip.w:before {\n\tright: 100%;\n}\n#powerTip.w:after {\n\tborder-right-color: #ffffff;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.w:before {\n\tborder-right-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n#titlearea\n{\n\tmargin: 0px;\n\tpadding-top: 8px;\n\tpadding-bottom: 8px;\n\tmargin-top: 32px;\n\twidth: 100%;\n\tborder-bottom: 0px solid #FF8000;\n\tborder-top-left-radius: 8px;\n\tborder-top-right-radius: 8px;\n\tbackground-color:#FFFFFF;\n}\n\n#top\n{\n\tmargin-left:auto; \n\tmargin-right:auto;\n\twidth:1280px;\n}\n\n@media print\n{\n  #top { display: none; }\n  #side-nav { display: none; }\n  #nav-path { display: none; }\n  body { overflow:visible; }\n  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }\n  .summary { display: none; }\n  .memitem { page-break-inside: avoid; }\n  #doc-content\n  {\n    margin-left:0 !important;\n    height:auto !important;\n    width:auto !important;\n    overflow:inherit;\n    display:inline;\n  }\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/dynsections.js",
    "content": "function toggleVisibility(linkObj)\n{\n var base = $(linkObj).attr('id');\n var summary = $('#'+base+'-summary');\n var content = $('#'+base+'-content');\n var trigger = $('#'+base+'-trigger');\n var src=$(trigger).attr('src');\n if (content.is(':visible')===true) {\n   content.hide();\n   summary.show();\n   $(linkObj).addClass('closed').removeClass('opened');\n   $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png');\n } else {\n   content.show();\n   summary.hide();\n   $(linkObj).removeClass('closed').addClass('opened');\n   $(trigger).attr('src',src.substring(0,src.length-10)+'open.png');\n } \n return false;\n}\n\nfunction updateStripes()\n{\n  $('table.directory tr').\n       removeClass('even').filter(':visible:even').addClass('even');\n}\n\nfunction toggleLevel(level)\n{\n  $('table.directory tr').each(function() {\n    var l = this.id.split('_').length-1;\n    var i = $('#img'+this.id.substring(3));\n    var a = $('#arr'+this.id.substring(3));\n    if (l<level+1) {\n      i.removeClass('iconfopen iconfclosed').addClass('iconfopen');\n      a.html('&#9660;');\n      $(this).show();\n    } else if (l==level+1) {\n      i.removeClass('iconfclosed iconfopen').addClass('iconfclosed');\n      a.html('&#9658;');\n      $(this).show();\n    } else {\n      $(this).hide();\n    }\n  });\n  updateStripes();\n}\n\nfunction toggleFolder(id)\n{\n  // the clicked row\n  var currentRow = $('#row_'+id);\n\n  // all rows after the clicked row\n  var rows = currentRow.nextAll(\"tr\");\n\n  var re = new RegExp('^row_'+id+'\\\\d+_$', \"i\"); //only one sub\n\n  // only match elements AFTER this one (can't hide elements before)\n  var childRows = rows.filter(function() { return this.id.match(re); });\n\n  // first row is visible we are HIDING\n  if (childRows.filter(':first').is(':visible')===true) {\n    // replace down arrow by right arrow for current row\n    var currentRowSpans = currentRow.find(\"span\");\n    currentRowSpans.filter(\".iconfopen\").removeClass(\"iconfopen\").addClass(\"iconfclosed\");\n    currentRowSpans.filter(\".arrow\").html('&#9658;');\n    rows.filter(\"[id^=row_\"+id+\"]\").hide(); // hide all children\n  } else { // we are SHOWING\n    // replace right arrow by down arrow for current row\n    var currentRowSpans = currentRow.find(\"span\");\n    currentRowSpans.filter(\".iconfclosed\").removeClass(\"iconfclosed\").addClass(\"iconfopen\");\n    currentRowSpans.filter(\".arrow\").html('&#9660;');\n    // replace down arrows by right arrows for child rows\n    var childRowsSpans = childRows.find(\"span\");\n    childRowsSpans.filter(\".iconfopen\").removeClass(\"iconfopen\").addClass(\"iconfclosed\");\n    childRowsSpans.filter(\".arrow\").html('&#9658;');\n    childRows.show(); //show all children\n  }\n  updateStripes();\n}\n\n\nfunction toggleInherit(id)\n{\n  var rows = $('tr.inherit.'+id);\n  var img = $('tr.inherit_header.'+id+' img');\n  var src = $(img).attr('src');\n  if (rows.filter(':first').is(':visible')===true) {\n    rows.css('display','none');\n    $(img).attr('src',src.substring(0,src.length-8)+'closed.png');\n  } else {\n    rows.css('display','table-row'); // using show() causes jump in firefox\n    $(img).attr('src',src.substring(0,src.length-10)+'open.png');\n  }\n}\n\n\n$(document).ready(function() {\n  $('.code,.codeRef').each(function() {\n    $(this).data('powertip',$('#'+$(this).attr('href').replace(/.*\\//,'').replace(/[^a-z_A-Z0-9]/g,'_')).html());\n    $(this).powerTip({ placement: 's', smartPlacement: true, mouseOnToPopup: true });\n  });\n});\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/files.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: File List</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li class=\"current\"><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n  <div id=\"navrow2\" class=\"tabs2\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"files.html\"><span>File&#160;List</span></a></li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">File List</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all documented files with brief descriptions:</div><div class=\"directory\">\n<table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00001_source.html\"><span class=\"icondoc\"></span></a><b>_features.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_1_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00002_source.html\"><span class=\"icondoc\"></span></a><b>_fixes.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_2_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00003_source.html\"><span class=\"icondoc\"></span></a><b>_noise.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_3_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00004_source.html\"><span class=\"icondoc\"></span></a><b>_swizzle.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_4_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00005_source.html\"><span class=\"icondoc\"></span></a><b>_swizzle_func.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_5_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00006_source.html\"><span class=\"icondoc\"></span></a><b>_vectorize.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_6_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00007_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00007.html\" target=\"_self\">associated_min_max.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00308.html\">GLM_GTX_associated_min_max</a> </td></tr>\n<tr id=\"row_7_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00008_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00008.html\" target=\"_self\">bit.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00309.html\">GLM_GTX_bit</a> </td></tr>\n<tr id=\"row_8_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00009_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00009.html\" target=\"_self\">bitfield.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00288.html\">GLM_GTC_bitfield</a> </td></tr>\n<tr id=\"row_9_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00010_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00010.html\" target=\"_self\">closest_point.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00310.html\">GLM_GTX_closest_point</a> </td></tr>\n<tr id=\"row_10_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00011_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00011.html\" target=\"_self\">color_encoding.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00311.html\">GLM_GTX_color_encoding</a> </td></tr>\n<tr id=\"row_11_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00012_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00012.html\" target=\"_self\">gtc/color_space.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00289.html\">GLM_GTC_color_space</a> </td></tr>\n<tr id=\"row_12_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00013_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00013.html\" target=\"_self\">gtx/color_space.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00312.html\">GLM_GTX_color_space</a> </td></tr>\n<tr id=\"row_13_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00014_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00014.html\" target=\"_self\">color_space_YCoCg.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00313.html\">GLM_GTX_color_space_YCoCg</a> </td></tr>\n<tr id=\"row_14_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00015_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00015.html\" target=\"_self\">common.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_15_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00016_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00016.html\" target=\"_self\">gtx/common.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00314.html\">GLM_GTX_common</a> </td></tr>\n<tr id=\"row_16_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00017_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00017.html\" target=\"_self\">compatibility.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00315.html\">GLM_GTX_compatibility</a> </td></tr>\n<tr id=\"row_17_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00018_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00018.html\" target=\"_self\">component_wise.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00316.html\">GLM_GTX_component_wise</a> </td></tr>\n<tr id=\"row_18_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00019_source.html\"><span class=\"icondoc\"></span></a><b>compute_common.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_19_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00020_source.html\"><span class=\"icondoc\"></span></a><b>compute_vector_relational.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_20_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00021_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00021.html\" target=\"_self\">constants.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00290.html\">GLM_GTC_constants</a> </td></tr>\n<tr id=\"row_21_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00022_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00022.html\" target=\"_self\">dual_quaternion.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00317.html\">GLM_GTX_dual_quaternion</a> </td></tr>\n<tr id=\"row_22_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00023_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00023.html\" target=\"_self\">easing.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00318.html\">GLM_GTX_easing</a> </td></tr>\n<tr id=\"row_23_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00024_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00024.html\" target=\"_self\">epsilon.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00291.html\">GLM_GTC_epsilon</a> </td></tr>\n<tr id=\"row_24_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00025_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00025.html\" target=\"_self\">euler_angles.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00319.html\">GLM_GTX_euler_angles</a> </td></tr>\n<tr id=\"row_25_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00026_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00026.html\" target=\"_self\">exponential.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_26_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00027_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00027.html\" target=\"_self\">ext.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> (Dependence) </td></tr>\n<tr id=\"row_27_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00028_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00028.html\" target=\"_self\">extend.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00320.html\">GLM_GTX_extend</a> </td></tr>\n<tr id=\"row_28_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00029_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00029.html\" target=\"_self\">extended_min_max.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00321.html\">GLM_GTX_extented_min_max</a> </td></tr>\n<tr id=\"row_29_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00030_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00030.html\" target=\"_self\">exterior_product.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00322.html\">GLM_GTX_exterior_product</a> </td></tr>\n<tr id=\"row_30_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00031_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00031.html\" target=\"_self\">fast_exponential.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00323.html\">GLM_GTX_fast_exponential</a> </td></tr>\n<tr id=\"row_31_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00032_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00032.html\" target=\"_self\">fast_square_root.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00324.html\">GLM_GTX_fast_square_root</a> </td></tr>\n<tr id=\"row_32_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00033_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00033.html\" target=\"_self\">fast_trigonometry.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00325.html\">GLM_GTX_fast_trigonometry</a> </td></tr>\n<tr id=\"row_33_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00034_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00034.html\" target=\"_self\">functions.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00326.html\">GLM_GTX_functions</a> </td></tr>\n<tr id=\"row_34_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00035_source.html\"><span class=\"icondoc\"></span></a><b>fwd.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_35_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00036_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00036.html\" target=\"_self\">geometric.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_36_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00037_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00037.html\" target=\"_self\">glm.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_37_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00038_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00038.html\" target=\"_self\">gradient_paint.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00327.html\">GLM_GTX_gradient_paint</a> </td></tr>\n<tr id=\"row_38_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00039_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00039.html\" target=\"_self\">handed_coordinate_space.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00328.html\">GLM_GTX_handed_coordinate_space</a> </td></tr>\n<tr id=\"row_39_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00040_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00040.html\" target=\"_self\">hash.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00329.html\">GLM_GTX_hash</a> </td></tr>\n<tr id=\"row_40_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00041_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00041.html\" target=\"_self\">gtc/integer.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00292.html\">GLM_GTC_integer</a> </td></tr>\n<tr id=\"row_41_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00042_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00042.html\" target=\"_self\">gtx/integer.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00330.html\">GLM_GTX_integer</a> </td></tr>\n<tr id=\"row_42_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00043_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00043.html\" target=\"_self\">integer.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_43_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00044_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00044.html\" target=\"_self\">intersect.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00331.html\">GLM_GTX_intersect</a> </td></tr>\n<tr id=\"row_44_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00045_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00045.html\" target=\"_self\">io.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00332.html\">GLM_GTX_io</a> </td></tr>\n<tr id=\"row_45_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00046_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00046.html\" target=\"_self\">log_base.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00333.html\">GLM_GTX_log_base</a> </td></tr>\n<tr id=\"row_46_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00047_source.html\"><span class=\"icondoc\"></span></a><b>man.doxy</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_47_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00048_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00048.html\" target=\"_self\">mat2x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_48_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00049_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00049.html\" target=\"_self\">mat2x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_49_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00050_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00050.html\" target=\"_self\">mat2x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_50_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00051_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00051.html\" target=\"_self\">mat3x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_51_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00052_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00052.html\" target=\"_self\">mat3x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_52_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00053_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00053.html\" target=\"_self\">mat3x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_53_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00054_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00054.html\" target=\"_self\">mat4x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_54_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00055_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00055.html\" target=\"_self\">mat4x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_55_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00056_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00056.html\" target=\"_self\">mat4x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_56_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00057_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00057.html\" target=\"_self\">matrix.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_57_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00058_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00058.html\" target=\"_self\">matrix_access.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00293.html\">GLM_GTC_matrix_access</a> </td></tr>\n<tr id=\"row_58_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00059_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00059.html\" target=\"_self\">matrix_clip_space.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00243.html\">GLM_EXT_matrix_clip_space</a> </td></tr>\n<tr id=\"row_59_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00060_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00060.html\" target=\"_self\">matrix_common.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00244.html\">GLM_EXT_matrix_common</a> </td></tr>\n<tr id=\"row_60_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00061_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00061.html\" target=\"_self\">matrix_cross_product.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00334.html\">GLM_GTX_matrix_cross_product</a> </td></tr>\n<tr id=\"row_61_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00062_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00062.html\" target=\"_self\">matrix_decompose.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00335.html\">GLM_GTX_matrix_decompose</a> </td></tr>\n<tr id=\"row_62_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00063_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00063.html\" target=\"_self\">matrix_double2x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_63_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00064_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00064.html\" target=\"_self\">matrix_double2x2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_64_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00065_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00065.html\" target=\"_self\">matrix_double2x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_65_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00066_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00066.html\" target=\"_self\">matrix_double2x3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_66_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00067_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00067.html\" target=\"_self\">matrix_double2x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_67_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00068_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00068.html\" target=\"_self\">matrix_double2x4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_68_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00069_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00069.html\" target=\"_self\">matrix_double3x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_69_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00070_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00070.html\" target=\"_self\">matrix_double3x2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_70_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00071_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00071.html\" target=\"_self\">matrix_double3x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_71_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00072_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00072.html\" target=\"_self\">matrix_double3x3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_72_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00073_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00073.html\" target=\"_self\">matrix_double3x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_73_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00074_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00074.html\" target=\"_self\">matrix_double3x4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_74_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00075_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00075.html\" target=\"_self\">matrix_double4x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_75_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00076_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00076.html\" target=\"_self\">matrix_double4x2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_76_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00077_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00077.html\" target=\"_self\">matrix_double4x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_77_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00078_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00078.html\" target=\"_self\">matrix_double4x3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_78_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00079_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00079.html\" target=\"_self\">matrix_double4x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_79_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00080_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00080.html\" target=\"_self\">matrix_double4x4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_80_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00081_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00081.html\" target=\"_self\">matrix_factorisation.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00336.html\">GLM_GTX_matrix_factorisation</a> </td></tr>\n<tr id=\"row_81_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00082_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00082.html\" target=\"_self\">matrix_float2x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_82_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00083_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00083.html\" target=\"_self\">matrix_float2x2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_83_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00084_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00084.html\" target=\"_self\">matrix_float2x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_84_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00085_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00085.html\" target=\"_self\">matrix_float2x3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_85_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00086_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00086.html\" target=\"_self\">matrix_float2x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_86_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00087_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00087.html\" target=\"_self\">matrix_float2x4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_87_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00088_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00088.html\" target=\"_self\">matrix_float3x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_88_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00089_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00089.html\" target=\"_self\">matrix_float3x2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_89_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00090_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00090.html\" target=\"_self\">matrix_float3x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_90_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00091_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00091.html\" target=\"_self\">matrix_float3x3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_91_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00092_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00092.html\" target=\"_self\">matrix_float3x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_92_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00093_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00093.html\" target=\"_self\">matrix_float3x4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_93_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00094_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00094.html\" target=\"_self\">matrix_float4x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_94_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00095_source.html\"><span class=\"icondoc\"></span></a><b>matrix_float4x2_precision.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_95_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00096_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00096.html\" target=\"_self\">matrix_float4x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_96_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00097_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00097.html\" target=\"_self\">matrix_float4x3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_97_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00098_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00098.html\" target=\"_self\">matrix_float4x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_98_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00099_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00099.html\" target=\"_self\">matrix_float4x4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_99_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00100_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00100.html\" target=\"_self\">matrix_integer.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00294.html\">GLM_GTC_matrix_integer</a> </td></tr>\n<tr id=\"row_100_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00101_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00101.html\" target=\"_self\">matrix_interpolation.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00337.html\">GLM_GTX_matrix_interpolation</a> </td></tr>\n<tr id=\"row_101_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00102_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00102.html\" target=\"_self\">matrix_inverse.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00295.html\">GLM_GTC_matrix_inverse</a> </td></tr>\n<tr id=\"row_102_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00103_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00103.html\" target=\"_self\">matrix_major_storage.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00338.html\">GLM_GTX_matrix_major_storage</a> </td></tr>\n<tr id=\"row_103_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00104_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00104.html\" target=\"_self\">matrix_operation.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00339.html\">GLM_GTX_matrix_operation</a> </td></tr>\n<tr id=\"row_104_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00105_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00105.html\" target=\"_self\">matrix_projection.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00245.html\">GLM_EXT_matrix_projection</a> </td></tr>\n<tr id=\"row_105_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00106_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00106.html\" target=\"_self\">matrix_query.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00340.html\">GLM_GTX_matrix_query</a> </td></tr>\n<tr id=\"row_106_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00107_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00107.html\" target=\"_self\">matrix_relational.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00246.html\">GLM_EXT_matrix_relational</a> </td></tr>\n<tr id=\"row_107_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00108_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00108.html\" target=\"_self\">ext/matrix_transform.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00247.html\">GLM_EXT_matrix_transform</a> </td></tr>\n<tr id=\"row_108_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00109_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00109.html\" target=\"_self\">gtc/matrix_transform.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00296.html\">GLM_GTC_matrix_transform</a> </td></tr>\n<tr id=\"row_109_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00110_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00110.html\" target=\"_self\">matrix_transform_2d.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00341.html\">GLM_GTX_matrix_transform_2d</a> </td></tr>\n<tr id=\"row_110_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00111_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00111.html\" target=\"_self\">mixed_product.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00342.html\">GLM_GTX_mixed_producte</a> </td></tr>\n<tr id=\"row_111_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00112_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00112.html\" target=\"_self\">noise.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00297.html\">GLM_GTC_noise</a> </td></tr>\n<tr id=\"row_112_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00113_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00113.html\" target=\"_self\">norm.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00343.html\">GLM_GTX_norm</a> </td></tr>\n<tr id=\"row_113_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00114_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00114.html\" target=\"_self\">normal.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00344.html\">GLM_GTX_normal</a> </td></tr>\n<tr id=\"row_114_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00115_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00115.html\" target=\"_self\">normalize_dot.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00345.html\">GLM_GTX_normalize_dot</a> </td></tr>\n<tr id=\"row_115_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00116_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00116.html\" target=\"_self\">number_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00346.html\">GLM_GTX_number_precision</a> </td></tr>\n<tr id=\"row_116_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00117_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00117.html\" target=\"_self\">optimum_pow.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00347.html\">GLM_GTX_optimum_pow</a> </td></tr>\n<tr id=\"row_117_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00118_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00118.html\" target=\"_self\">orthonormalize.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00348.html\">GLM_GTX_orthonormalize</a> </td></tr>\n<tr id=\"row_118_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00119_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00119.html\" target=\"_self\">gtc/packing.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00298.html\">GLM_GTC_packing</a> </td></tr>\n<tr id=\"row_119_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00120_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00120.html\" target=\"_self\">packing.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_120_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00121_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00121.html\" target=\"_self\">perpendicular.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00349.html\">GLM_GTX_perpendicular</a> </td></tr>\n<tr id=\"row_121_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00122_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00122.html\" target=\"_self\">polar_coordinates.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00350.html\">GLM_GTX_polar_coordinates</a> </td></tr>\n<tr id=\"row_122_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00123_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00123.html\" target=\"_self\">projection.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00351.html\">GLM_GTX_projection</a> </td></tr>\n<tr id=\"row_123_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00124_source.html\"><span class=\"icondoc\"></span></a><b>qualifier.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_124_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00125_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00125.html\" target=\"_self\">gtc/quaternion.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00299.html\">GLM_GTC_quaternion</a> </td></tr>\n<tr id=\"row_125_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00126_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00126.html\" target=\"_self\">gtx/quaternion.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00352.html\">GLM_GTX_quaternion</a> </td></tr>\n<tr id=\"row_126_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00127_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00127.html\" target=\"_self\">quaternion_common.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00248.html\">GLM_EXT_quaternion_common</a> </td></tr>\n<tr id=\"row_127_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00128_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00128.html\" target=\"_self\">quaternion_double.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00249.html\">GLM_EXT_quaternion_double</a> </td></tr>\n<tr id=\"row_128_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00129_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00129.html\" target=\"_self\">quaternion_double_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00250.html\">GLM_EXT_quaternion_double_precision</a> </td></tr>\n<tr id=\"row_129_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00130_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00130.html\" target=\"_self\">quaternion_exponential.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00251.html\">GLM_EXT_quaternion_exponential</a> </td></tr>\n<tr id=\"row_130_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00131_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00131.html\" target=\"_self\">quaternion_float.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00252.html\">GLM_EXT_quaternion_float</a> </td></tr>\n<tr id=\"row_131_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00132_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00132.html\" target=\"_self\">quaternion_float_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00253.html\">GLM_EXT_quaternion_float_precision</a> </td></tr>\n<tr id=\"row_132_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00133_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00133.html\" target=\"_self\">quaternion_geometric.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00254.html\">GLM_EXT_quaternion_geometric</a> </td></tr>\n<tr id=\"row_133_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00134_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00134.html\" target=\"_self\">quaternion_relational.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00255.html\">GLM_EXT_quaternion_relational</a> </td></tr>\n<tr id=\"row_134_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00135_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00135.html\" target=\"_self\">quaternion_transform.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00256.html\">GLM_EXT_quaternion_transform</a> </td></tr>\n<tr id=\"row_135_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00136_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00136.html\" target=\"_self\">quaternion_trigonometric.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00257.html\">GLM_EXT_quaternion_trigonometric</a> </td></tr>\n<tr id=\"row_136_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00137_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00137.html\" target=\"_self\">random.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00300.html\">GLM_GTC_random</a> </td></tr>\n<tr id=\"row_137_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00138_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00138.html\" target=\"_self\">range.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00353.html\">GLM_GTX_range</a> </td></tr>\n<tr id=\"row_138_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00139_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00139.html\" target=\"_self\">raw_data.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00354.html\">GLM_GTX_raw_data</a> </td></tr>\n<tr id=\"row_139_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00140_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00140.html\" target=\"_self\">reciprocal.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00301.html\">GLM_GTC_reciprocal</a> </td></tr>\n<tr id=\"row_140_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00141_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00141.html\" target=\"_self\">rotate_normalized_axis.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00355.html\">GLM_GTX_rotate_normalized_axis</a> </td></tr>\n<tr id=\"row_141_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00142_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00142.html\" target=\"_self\">rotate_vector.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00356.html\">GLM_GTX_rotate_vector</a> </td></tr>\n<tr id=\"row_142_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00143_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00143.html\" target=\"_self\">round.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00302.html\">GLM_GTC_round</a> </td></tr>\n<tr id=\"row_143_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00144_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00144.html\" target=\"_self\">scalar_common.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00258.html\">GLM_EXT_scalar_common</a> </td></tr>\n<tr id=\"row_144_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00145_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00145.html\" target=\"_self\">scalar_constants.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00259.html\">GLM_EXT_scalar_constants</a> </td></tr>\n<tr id=\"row_145_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00146_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00146.html\" target=\"_self\">scalar_int_sized.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00260.html\">GLM_EXT_scalar_int_sized</a> </td></tr>\n<tr id=\"row_146_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00147_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00147.html\" target=\"_self\">scalar_integer.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00261.html\">GLM_EXT_scalar_integer</a> </td></tr>\n<tr id=\"row_147_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00148_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00148.html\" target=\"_self\">scalar_multiplication.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00287.html\">Experimental extensions</a> </td></tr>\n<tr id=\"row_148_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00149_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00149.html\" target=\"_self\">ext/scalar_relational.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00262.html\">GLM_EXT_scalar_relational</a> </td></tr>\n<tr id=\"row_149_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00150_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00150.html\" target=\"_self\">gtx/scalar_relational.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00357.html\">GLM_GTX_scalar_relational</a> </td></tr>\n<tr id=\"row_150_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00151_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00151.html\" target=\"_self\">scalar_uint_sized.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00263.html\">GLM_EXT_scalar_uint_sized</a> </td></tr>\n<tr id=\"row_151_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00152_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00152.html\" target=\"_self\">scalar_ulp.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00264.html\">GLM_EXT_scalar_ulp</a> </td></tr>\n<tr id=\"row_152_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00153_source.html\"><span class=\"icondoc\"></span></a><b>setup.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_153_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00154_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00154.html\" target=\"_self\">spline.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00358.html\">GLM_GTX_spline</a> </td></tr>\n<tr id=\"row_154_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00155_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00155.html\" target=\"_self\">std_based_type.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00359.html\">GLM_GTX_std_based_type</a> </td></tr>\n<tr id=\"row_155_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00156_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00156.html\" target=\"_self\">string_cast.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00360.html\">GLM_GTX_string_cast</a> </td></tr>\n<tr id=\"row_156_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00157_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00157.html\" target=\"_self\">texture.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00361.html\">GLM_GTX_texture</a> </td></tr>\n<tr id=\"row_157_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00158_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00158.html\" target=\"_self\">transform.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00362.html\">GLM_GTX_transform</a> </td></tr>\n<tr id=\"row_158_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00159_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00159.html\" target=\"_self\">transform2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00363.html\">GLM_GTX_transform2</a> </td></tr>\n<tr id=\"row_159_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00160_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00160.html\" target=\"_self\">trigonometric.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_160_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00161_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00161.html\" target=\"_self\">gtc/type_aligned.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00303.html\">GLM_GTC_type_aligned</a> </td></tr>\n<tr id=\"row_161_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00162_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00162.html\" target=\"_self\">gtx/type_aligned.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00364.html\">GLM_GTX_type_aligned</a> </td></tr>\n<tr id=\"row_162_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00163_source.html\"><span class=\"icondoc\"></span></a><b>type_float.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_163_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00164_source.html\"><span class=\"icondoc\"></span></a><b>type_half.hpp</b></td><td class=\"desc\"></td></tr>\n<tr id=\"row_164_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00165_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00165.html\" target=\"_self\">type_mat2x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_165_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00166_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00166.html\" target=\"_self\">type_mat2x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_166_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00167_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00167.html\" target=\"_self\">type_mat2x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_167_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00168_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00168.html\" target=\"_self\">type_mat3x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_168_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00169_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00169.html\" target=\"_self\">type_mat3x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_169_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00170_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00170.html\" target=\"_self\">type_mat3x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_170_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00171_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00171.html\" target=\"_self\">type_mat4x2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_171_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00172_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00172.html\" target=\"_self\">type_mat4x3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_172_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00173_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00173.html\" target=\"_self\">type_mat4x4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_173_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00174_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00174.html\" target=\"_self\">type_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00304.html\">GLM_GTC_type_precision</a> </td></tr>\n<tr id=\"row_174_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00175_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00175.html\" target=\"_self\">type_ptr.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00305.html\">GLM_GTC_type_ptr</a> </td></tr>\n<tr id=\"row_175_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00176_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00176.html\" target=\"_self\">type_quat.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_176_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00177_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00177.html\" target=\"_self\">type_trait.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00365.html\">GLM_GTX_type_trait</a> </td></tr>\n<tr id=\"row_177_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00178_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00178.html\" target=\"_self\">type_vec1.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_178_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00179_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00179.html\" target=\"_self\">type_vec2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_179_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00180_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00180.html\" target=\"_self\">type_vec3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_180_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00181_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00181.html\" target=\"_self\">type_vec4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_181_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00182_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00182.html\" target=\"_self\">ulp.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00306.html\">GLM_GTC_ulp</a> </td></tr>\n<tr id=\"row_182_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00183_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00183.html\" target=\"_self\">vec1.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00307.html\">GLM_GTC_vec1</a> </td></tr>\n<tr id=\"row_183_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00184_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00184.html\" target=\"_self\">vec2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_184_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00185_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00185.html\" target=\"_self\">vec3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_185_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00186_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00186.html\" target=\"_self\">vec4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_186_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00187_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00187.html\" target=\"_self\">vec_swizzle.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00366.html\">GLM_GTX_vec_swizzle</a> </td></tr>\n<tr id=\"row_187_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00188_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00188.html\" target=\"_self\">vector_angle.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00367.html\">GLM_GTX_vector_angle</a> </td></tr>\n<tr id=\"row_188_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00189_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00189.html\" target=\"_self\">vector_bool1.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00265.html\">GLM_EXT_vector_bool1</a> </td></tr>\n<tr id=\"row_189_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00190_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00190.html\" target=\"_self\">vector_bool1_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00266.html\">GLM_EXT_vector_bool1_precision</a> </td></tr>\n<tr id=\"row_190_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00191_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00191.html\" target=\"_self\">vector_bool2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_191_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00192_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00192.html\" target=\"_self\">vector_bool2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_192_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00193_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00193.html\" target=\"_self\">vector_bool3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_193_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00194_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00194.html\" target=\"_self\">vector_bool3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_194_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00195_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00195.html\" target=\"_self\">vector_bool4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_195_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00196_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00196.html\" target=\"_self\">vector_bool4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_196_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00197_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00197.html\" target=\"_self\">vector_common.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00267.html\">GLM_EXT_vector_common</a> </td></tr>\n<tr id=\"row_197_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00198_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00198.html\" target=\"_self\">vector_double1.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00268.html\">GLM_EXT_vector_double1</a> </td></tr>\n<tr id=\"row_198_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00199_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00199.html\" target=\"_self\">vector_double1_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00269.html\">GLM_EXT_vector_double1_precision</a> </td></tr>\n<tr id=\"row_199_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00200_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00200.html\" target=\"_self\">vector_double2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_200_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00201_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00201.html\" target=\"_self\">vector_double2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_201_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00202_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00202.html\" target=\"_self\">vector_double3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_202_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00203_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00203.html\" target=\"_self\">vector_double3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_203_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00204_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00204.html\" target=\"_self\">vector_double4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_204_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00205_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00205.html\" target=\"_self\">vector_double4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_205_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00206_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00206.html\" target=\"_self\">vector_float1.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00270.html\">GLM_EXT_vector_float1</a> </td></tr>\n<tr id=\"row_206_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00207_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00207.html\" target=\"_self\">vector_float1_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00271.html\">GLM_EXT_vector_float1_precision</a> </td></tr>\n<tr id=\"row_207_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00208_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00208.html\" target=\"_self\">vector_float2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_208_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00209_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00209.html\" target=\"_self\">vector_float2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_209_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00210_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00210.html\" target=\"_self\">vector_float3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_210_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00211_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00211.html\" target=\"_self\">vector_float3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_211_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00212_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00212.html\" target=\"_self\">vector_float4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_212_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00213_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00213.html\" target=\"_self\">vector_float4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_213_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00214_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00214.html\" target=\"_self\">vector_int1.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00272.html\">GLM_EXT_vector_int1</a> </td></tr>\n<tr id=\"row_214_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00215_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00215.html\" target=\"_self\">vector_int1_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00273.html\">GLM_EXT_vector_int1_precision</a> </td></tr>\n<tr id=\"row_215_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00216_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00216.html\" target=\"_self\">vector_int2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_216_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00217_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00217.html\" target=\"_self\">vector_int2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_217_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00218_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00218.html\" target=\"_self\">vector_int3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_218_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00219_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00219.html\" target=\"_self\">vector_int3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_219_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00220_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00220.html\" target=\"_self\">vector_int4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_220_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00221_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00221.html\" target=\"_self\">vector_int4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_221_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00222_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00222.html\" target=\"_self\">vector_integer.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00274.html\">GLM_EXT_vector_integer</a> </td></tr>\n<tr id=\"row_222_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00223_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00223.html\" target=\"_self\">vector_query.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00368.html\">GLM_GTX_vector_query</a> </td></tr>\n<tr id=\"row_223_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00224_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00224.html\" target=\"_self\">ext/vector_relational.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00275.html\">GLM_EXT_vector_relational</a> </td></tr>\n<tr id=\"row_224_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00225_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00225.html\" target=\"_self\">vector_relational.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_225_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00226_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00226.html\" target=\"_self\">vector_uint1.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00276.html\">GLM_EXT_vector_uint1</a> </td></tr>\n<tr id=\"row_226_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00227_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00227.html\" target=\"_self\">vector_uint1_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00277.html\">GLM_EXT_vector_uint1_precision</a> </td></tr>\n<tr id=\"row_227_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00228_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00228.html\" target=\"_self\">vector_uint2.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_228_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00229_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00229.html\" target=\"_self\">vector_uint2_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_229_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00230_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00230.html\" target=\"_self\">vector_uint3.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_230_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00231_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00231.html\" target=\"_self\">vector_uint3_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_231_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00232_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00232.html\" target=\"_self\">vector_uint4.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_232_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00233_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00233.html\" target=\"_self\">vector_uint4_precision.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00280.html\">Core features</a> </td></tr>\n<tr id=\"row_233_\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00234_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00234.html\" target=\"_self\">vector_ulp.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00278.html\">GLM_EXT_vector_ulp</a> </td></tr>\n<tr id=\"row_234_\" class=\"even\"><td class=\"entry\"><span style=\"width:16px;display:inline-block;\">&#160;</span><a href=\"a00235_source.html\"><span class=\"icondoc\"></span></a><a class=\"el\" href=\"a00235.html\" target=\"_self\">wrap.hpp</a></td><td class=\"desc\"><a class=\"el\" href=\"a00369.html\">GLM_GTX_wrap</a> </td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/index.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: OpenGL Mathematics (GLM)</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li class=\"current\"><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">OpenGL Mathematics (GLM) </div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\"><ul>\n<li>Website: <a href=\"https://glm.g-truc.net\">glm.g-truc.net</a></li>\n<li><a href=\"modules.html\">GLM API documentation</a></li>\n<li><a href=\"https://github.com/g-truc/glm/blob/master/manual.md\">GLM Manual</a> </li>\n</ul>\n</div></div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v1.7.1\n * http://jquery.com/\n *\n * Copyright 2011, John Resig\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n * Copyright 2011, The Dojo Foundation\n * Released under the MIT, BSD, and GPL Licenses.\n *\n * Date: Mon Nov 21 21:11:03 2011 -0500\n */\n(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\\w\\W]+>)[^>]*$|#([\\w\\-]*)$)/,bM=/\\S/,bI=/^\\s+/,bE=/\\s+$/,bA=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/,bN=/^[\\],:{}\\s]*$/,bW=/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g,bJ=/(?:^|:|,)(?:\\s*\\[)+/g,by=/(webkit)[ \\/]([\\w.]+)/,bR=/(opera)(?:.*version)?[ \\/]([\\w.]+)/,bQ=/(msie) ([\\w.]+)/,bS=/(mozilla)(?:.*? rv:([\\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+\"\").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0===\"body\"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0===\"string\"){if(b0.charAt(0)===\"<\"&&b0.charAt(b0.length-1)===\">\"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:\"\",jquery:\"1.7.1\",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3===\"find\"){b2.selector=this.selector+(this.selector?\" \":\"\")+b0}else{if(b3){b2.selector=this.selector+\".\"+b3+\"(\"+b0+\")\"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),\"slice\",bK.call(arguments).join(\",\"))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5===\"boolean\"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!==\"object\"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b4<b3;b4++){if((b9=arguments[b4])!=null){for(b2 in b9){b0=b5[b2];b1=b9[b2];if(b5===b1){continue}if(b8&&b1&&(bF.isPlainObject(b1)||(b6=bF.isArray(b1)))){if(b6){b6=false;b7=b0&&bF.isArray(b0)?b0:[]}else{b7=b0&&bF.isPlainObject(b0)?b0:{}}b5[b2]=bF.extend(b8,b7,b1)}else{if(b1!==L){b5[b2]=b1}}}}}return b5};bF.extend({noConflict:function(b0){if(bb.$===bF){bb.$=bH}if(b0&&bb.jQuery===bF){bb.jQuery=bU}return bF},isReady:false,readyWait:1,holdReady:function(b0){if(b0){bF.readyWait++}else{bF.ready(true)}},ready:function(b0){if((b0===true&&!--bF.readyWait)||(b0!==true&&!bF.isReady)){if(!av.body){return setTimeout(bF.ready,1)}bF.isReady=true;if(b0!==true&&--bF.readyWait>0){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger(\"ready\").off(\"ready\")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks(\"once memory\");if(av.readyState===\"complete\"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener(\"DOMContentLoaded\",e,false);bb.addEventListener(\"load\",bF.ready,false)}else{if(av.attachEvent){av.attachEvent(\"onreadystatechange\",e);bb.attachEvent(\"onload\",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)===\"function\"},isArray:Array.isArray||function(b0){return bF.type(b0)===\"array\"},isWindow:function(b0){return b0&&typeof b0===\"object\"&&\"setInterval\" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||\"object\"},isPlainObject:function(b2){if(!b2||bF.type(b2)!==\"object\"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,\"constructor\")&&!bG.call(b2.constructor.prototype,\"isPrototypeOf\")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!==\"string\"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,\"@\").replace(bP,\"]\").replace(bJ,\"\"))){return(new Function(\"return \"+b0))()}bF.error(\"Invalid JSON: \"+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,\"text/xml\")}else{b0=new ActiveXObject(\"Microsoft.XMLDOM\");b0.async=\"false\";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName(\"parsererror\").length){bF.error(\"Invalid XML: \"+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb[\"eval\"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,\"ms-\").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b4<b5;){if(b6.apply(b3[b4++],b2)===false){break}}}}else{if(b0){for(b1 in b3){if(b6.call(b3[b1],b1,b3[b1])===false){break}}}else{for(;b4<b5;){if(b6.call(b3[b4],b4,b3[b4++])===false){break}}}}return b3},trim:bO?function(b0){return b0==null?\"\":bO.call(b0)}:function(b0){return b0==null?\"\":b0.toString().replace(bI,\"\").replace(bE,\"\")},makeArray:function(b3,b1){var b0=b1||[];if(b3!=null){var b2=bF.type(b3);if(b3.length==null||b2===\"string\"||b2===\"function\"||b2===\"regexp\"||bF.isWindow(b3)){bz.call(b0,b3)}else{bF.merge(b0,b3)}}return b0},inArray:function(b2,b3,b1){var b0;if(b3){if(bv){return bv.call(b3,b2,b1)}b0=b3.length;b1=b1?b1<0?Math.max(0,b0+b1):b1:0;for(;b1<b0;b1++){if(b1 in b3&&b3[b1]===b2){return b1}}}return -1},merge:function(b4,b2){var b3=b4.length,b1=0;if(typeof b2.length===\"number\"){for(var b0=b2.length;b1<b0;b1++){b4[b3++]=b2[b1]}}else{while(b2[b1]!==L){b4[b3++]=b2[b1++]}}b4.length=b3;return b4},grep:function(b1,b6,b0){var b2=[],b5;b0=!!b0;for(var b3=0,b4=b1.length;b3<b4;b3++){b5=!!b6(b1[b3],b3);if(b0!==b5){b2.push(b1[b3])}}return b2},map:function(b0,b7,b8){var b5,b6,b4=[],b2=0,b1=b0.length,b3=b0 instanceof bF||b1!==L&&typeof b1===\"number\"&&((b1>0&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b2<b1;b2++){b5=b7(b0[b2],b2,b8);if(b5!=null){b4[b4.length]=b5}}}else{for(b6 in b0){b5=b7(b0[b6],b6,b8);if(b5!=null){b4[b4.length]=b5}}}return b4.concat.apply([],b4)},guid:1,proxy:function(b4,b3){if(typeof b3===\"string\"){var b2=b4[b3];b3=b4;b4=b2}if(!bF.isFunction(b4)){return L}var b0=bK.call(arguments,2),b1=function(){return b4.apply(b3,b0.concat(bK.call(arguments)))};b1.guid=b4.guid=b4.guid||b1.guid||bF.guid++;return b1},access:function(b0,b8,b6,b2,b5,b7){var b1=b0.length;if(typeof b8===\"object\"){for(var b3 in b8){bF.access(b0,b3,b8[b3],b2,b5,b6)}return b0}if(b6!==L){b2=!b7&&b2&&bF.isFunction(b6);for(var b4=0;b4<b1;b4++){b5(b0[b4],b8,b2?b6.call(b0[b4],b4,b5(b0[b4],b8)):b6,b7)}return b0}return b1?b5(b0[0],b8):L},now:function(){return(new Date()).getTime()},uaMatch:function(b1){b1=b1.toLowerCase();var b0=by.exec(b1)||bR.exec(b1)||bQ.exec(b1)||b1.indexOf(\"compatible\")<0&&bS.exec(b1)||[];return{browser:b0[1]||\"\",version:b0[2]||\"0\"}},sub:function(){function b0(b3,b4){return new b0.fn.init(b3,b4)}bF.extend(true,b0,this);b0.superclass=this;b0.fn=b0.prototype=this();b0.fn.constructor=b0;b0.sub=this.sub;b0.fn.init=function b2(b3,b4){if(b4&&b4 instanceof bF&&!(b4 instanceof b0)){b4=b0(b4)}return bF.fn.init.call(this,b3,b4,b1)};b0.fn.init.prototype=b0.fn;var b1=b0(av);return b0},browser:{}});bF.each(\"Boolean Number String Function Array Date RegExp Object\".split(\" \"),function(b1,b0){bx[\"[object \"+b0+\"]\"]=b0.toLowerCase()});bV=bF.uaMatch(bX);if(bV.browser){bF.browser[bV.browser]=true;bF.browser.version=bV.version}if(bF.browser.webkit){bF.browser.safari=true}if(bM.test(\"\\xA0\")){bI=/^[\\s\\xA0]+/;bE=/[\\s\\xA0]+$/}bD=bF(av);if(av.addEventListener){e=function(){av.removeEventListener(\"DOMContentLoaded\",e,false);bF.ready()}}else{if(av.attachEvent){e=function(){if(av.readyState===\"complete\"){av.detachEvent(\"onreadystatechange\",e);bF.ready()}}}}function bw(){if(bF.isReady){return}try{av.documentElement.doScroll(\"left\")}catch(b0){setTimeout(bw,1);return}bF.ready()}return bF})();var a2={};function X(e){var bv=a2[e]={},bw,bx;e=e.split(/\\s+/);for(bw=0,bx=e.length;bw<bx;bw++){bv[e[bw]]=true}return bv}b.Callbacks=function(bw){bw=bw?(a2[bw]||X(bw)):{};var bB=[],bC=[],bx,by,bv,bz,bA,bE=function(bF){var bG,bJ,bI,bH,bK;for(bG=0,bJ=bF.length;bG<bJ;bG++){bI=bF[bG];bH=b.type(bI);if(bH===\"array\"){bE(bI)}else{if(bH===\"function\"){if(!bw.unique||!bD.has(bI)){bB.push(bI)}}}}},e=function(bG,bF){bF=bF||[];bx=!bw.memory||[bG,bF];by=true;bA=bv||0;bv=0;bz=bB.length;for(;bB&&bA<bz;bA++){if(bB[bA].apply(bG,bF)===false&&bw.stopOnFalse){bx=true;break}}by=false;if(bB){if(!bw.once){if(bC&&bC.length){bx=bC.shift();bD.fireWith(bx[0],bx[1])}}else{if(bx===true){bD.disable()}else{bB=[]}}}},bD={add:function(){if(bB){var bF=bB.length;bE(arguments);if(by){bz=bB.length}else{if(bx&&bx!==true){bv=bF;e(bx[0],bx[1])}}}return this},remove:function(){if(bB){var bF=arguments,bH=0,bI=bF.length;for(;bH<bI;bH++){for(var bG=0;bG<bB.length;bG++){if(bF[bH]===bB[bG]){if(by){if(bG<=bz){bz--;if(bG<=bA){bA--}}}bB.splice(bG--,1);if(bw.unique){break}}}}}return this},has:function(bG){if(bB){var bF=0,bH=bB.length;for(;bF<bH;bF++){if(bG===bB[bF]){return true}}}return false},empty:function(){bB=[];return this},disable:function(){bB=bC=bx=L;return this},disabled:function(){return !bB},lock:function(){bC=L;if(!bx||bx===true){bD.disable()}return this},locked:function(){return !bC},fireWith:function(bG,bF){if(bC){if(by){if(!bw.once){bC.push([bG,bF])}}else{if(!(bw.once&&bx)){e(bG,bF)}}}return this},fire:function(){bD.fireWith(this,arguments);return this},fired:function(){return !!bx}};return bD};var aJ=[].slice;b.extend({Deferred:function(by){var bx=b.Callbacks(\"once memory\"),bw=b.Callbacks(\"once memory\"),bv=b.Callbacks(\"memory\"),e=\"pending\",bA={resolve:bx,reject:bw,notify:bv},bC={done:bx.add,fail:bw.add,progress:bv.add,state:function(){return e},isResolved:bx.fired,isRejected:bw.fired,then:function(bE,bD,bF){bB.done(bE).fail(bD).progress(bF);return this},always:function(){bB.done.apply(bB,arguments).fail.apply(bB,arguments);return this},pipe:function(bF,bE,bD){return b.Deferred(function(bG){b.each({done:[bF,\"resolve\"],fail:[bE,\"reject\"],progress:[bD,\"notify\"]},function(bI,bL){var bH=bL[0],bK=bL[1],bJ;if(b.isFunction(bH)){bB[bI](function(){bJ=bH.apply(this,arguments);if(bJ&&b.isFunction(bJ.promise)){bJ.promise().then(bG.resolve,bG.reject,bG.notify)}else{bG[bK+\"With\"](this===bB?bG:this,[bJ])}})}else{bB[bI](bG[bK])}})}).promise()},promise:function(bE){if(bE==null){bE=bC}else{for(var bD in bC){bE[bD]=bC[bD]}}return bE}},bB=bC.promise({}),bz;for(bz in bA){bB[bz]=bA[bz].fire;bB[bz+\"With\"]=bA[bz].fireWith}bB.done(function(){e=\"resolved\"},bw.disable,bv.lock).fail(function(){e=\"rejected\"},bx.disable,bv.lock);if(by){by.call(bB,bB)}return bB},when:function(bA){var bx=aJ.call(arguments,0),bv=0,e=bx.length,bB=new Array(e),bw=e,by=e,bC=e<=1&&bA&&b.isFunction(bA.promise)?bA:b.Deferred(),bE=bC.promise();function bD(bF){return function(bG){bx[bF]=arguments.length>1?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv<e;bv++){if(bx[bv]&&bx[bv].promise&&b.isFunction(bx[bv].promise)){bx[bv].promise().then(bD(bv),bC.reject,bz(bv))}else{--bw}}if(!bw){bC.resolveWith(bC,bx)}}else{if(bC!==bA){bC.resolveWith(bC,e?[bA]:[])}}return bE}});b.support=(function(){var bJ,bI,bF,bG,bx,bE,bA,bD,bz,bK,bB,by,bw,bv=av.createElement(\"div\"),bH=av.documentElement;bv.setAttribute(\"className\",\"t\");bv.innerHTML=\"   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>\";bI=bv.getElementsByTagName(\"*\");bF=bv.getElementsByTagName(\"a\")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement(\"select\");bx=bG.appendChild(av.createElement(\"option\"));bE=bv.getElementsByTagName(\"input\")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName(\"tbody\").length,htmlSerialize:!!bv.getElementsByTagName(\"link\").length,style:/top/.test(bF.getAttribute(\"style\")),hrefNormalized:(bF.getAttribute(\"href\")===\"/a\"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value===\"on\"),optSelected:bx.selected,getSetAttribute:bv.className!==\"t\",enctype:!!av.createElement(\"form\").enctype,html5Clone:av.createElement(\"nav\").cloneNode(true).outerHTML!==\"<:nav></:nav>\",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent(\"onclick\",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent(\"onclick\")}bE=av.createElement(\"input\");bE.value=\"t\";bE.setAttribute(\"type\",\"radio\");bJ.radioValue=bE.value===\"t\";bE.setAttribute(\"checked\",\"checked\");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML=\"\";if(bb.getComputedStyle){bA=av.createElement(\"div\");bA.style.width=\"0\";bA.style.marginRight=\"0\";bv.style.width=\"2px\";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB=\"on\"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,\"return;\");bw=(typeof bv[bB]===\"function\")}bJ[by+\"Bubbles\"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName(\"body\")[0];if(!bQ){return}bL=1;bS=\"position:absolute;top:0;left:0;width:1px;height:1px;margin:0;\";bR=\"visibility:hidden;border:0;\";e=\"style='\"+bS+\"border:5px solid #000;padding:0;'\";bP=\"<div \"+e+\"><div></div></div><table \"+e+\" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>\";bM=av.createElement(\"div\");bM.style.cssText=bR+\"width:0;height:0;position:static;top:0;margin-top:\"+bL+\"px\";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement(\"div\");bM.appendChild(bv);bv.innerHTML=\"<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>\";bz=bv.getElementsByTagName(\"td\");bw=(bz[0].offsetHeight===0);bz[0].style.display=\"\";bz[1].style.display=\"none\";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML=\"\";bv.style.width=bv.style.paddingLeft=\"1px\";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!==\"undefined\"){bv.style.display=\"inline\";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display=\"\";bv.innerHTML=\"<div style='width:4px;'></div>\";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position=\"fixed\";bV.style.top=\"20px\";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top=\"\";bU.style.overflow=\"hidden\";bU.style.position=\"relative\";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\\{.*\\}|\\[.*\\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:\"jQuery\"+(b.fn.jquery+Math.random()).replace(/\\D/g,\"\"),noData:{embed:true,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv===\"string\",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv===\"events\";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv===\"object\"||typeof bv===\"function\"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(\" \")}}}for(bA=0,bz=bv.length;bA<bz;bA++){delete bB[bv[bA]]}if(!(by?S:b.isEmptyObject)(bB)){return}}}if(!by){delete e[bw].data;if(!S(e[bw])){return}}if(b.support.deleteExpando||!e.setInterval){delete e[bw]}else{e[bw]=null}if(bD){if(b.support.deleteExpando){delete bx[bC]}else{if(bx.removeAttribute){bx.removeAttribute(bC)}else{bx[bC]=null}}}},_data:function(bv,e,bw){return b.data(bv,e,bw,true)},acceptData:function(bv){if(bv.nodeName){var e=b.noData[bv.nodeName.toLowerCase()];if(e){return !(e===true||bv.getAttribute(\"classid\")!==e)}}return true}});b.fn.extend({data:function(by,bA){var bB,e,bw,bz=null;if(typeof by===\"undefined\"){if(this.length){bz=b.data(this[0]);if(this[0].nodeType===1&&!b._data(this[0],\"parsedAttrs\")){e=this[0].attributes;for(var bx=0,bv=e.length;bx<bv;bx++){bw=e[bx].name;if(bw.indexOf(\"data-\")===0){bw=b.camelCase(bw.substring(5));a5(this[0],bw,bz[bw])}}b._data(this[0],\"parsedAttrs\",true)}}return bz}else{if(typeof by===\"object\"){return this.each(function(){b.data(this,by)})}}bB=by.split(\".\");bB[1]=bB[1]?\".\"+bB[1]:\"\";if(bA===L){bz=this.triggerHandler(\"getData\"+bB[1]+\"!\",[bB[0]]);if(bz===L&&this.length){bz=b.data(this[0],by);bz=a5(this[0],by,bz)}return bz===L&&bB[1]?this.data(bB[0]):bz}else{return this.each(function(){var bC=b(this),bD=[bB[0],bA];bC.triggerHandler(\"setData\"+bB[1]+\"!\",bD);b.data(this,by,bA);bC.triggerHandler(\"changeData\"+bB[1]+\"!\",bD)})}},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function a5(bx,bw,by){if(by===L&&bx.nodeType===1){var bv=\"data-\"+bw.replace(aA,\"-$1\").toLowerCase();by=bx.getAttribute(bv);if(typeof by===\"string\"){try{by=by===\"true\"?true:by===\"false\"?false:by===\"null\"?null:b.isNumeric(by)?parseFloat(by):aS.test(by)?b.parseJSON(by):by}catch(bz){}b.data(bx,bw,by)}else{by=L}}return by}function S(bv){for(var e in bv){if(e===\"data\"&&b.isEmptyObject(bv[e])){continue}if(e!==\"toJSON\"){return false}}return true}function bi(by,bx,bA){var bw=bx+\"defer\",bv=bx+\"queue\",e=bx+\"mark\",bz=b._data(by,bw);if(bz&&(bA===\"queue\"||!b._data(by,bv))&&(bA===\"mark\"||!b._data(by,e))){setTimeout(function(){if(!b._data(by,bv)&&!b._data(by,e)){b.removeData(by,bw,true);bz.fire()}},0)}}b.extend({_mark:function(bv,e){if(bv){e=(e||\"fx\")+\"mark\";b._data(bv,e,(b._data(bv,e)||0)+1)}},_unmark:function(by,bx,bv){if(by!==true){bv=bx;bx=by;by=false}if(bx){bv=bv||\"fx\";var e=bv+\"mark\",bw=by?0:((b._data(bx,e)||1)-1);if(bw){b._data(bx,e,bw)}else{b.removeData(bx,e,true);bi(bx,bv,\"mark\")}}},queue:function(bv,e,bx){var bw;if(bv){e=(e||\"fx\")+\"queue\";bw=b._data(bv,e);if(bx){if(!bw||b.isArray(bx)){bw=b._data(bv,e,b.makeArray(bx))}else{bw.push(bx)}}return bw||[]}},dequeue:function(by,bx){bx=bx||\"fx\";var bv=b.queue(by,bx),bw=bv.shift(),e={};if(bw===\"inprogress\"){bw=bv.shift()}if(bw){if(bx===\"fx\"){bv.unshift(\"inprogress\")}b._data(by,bx+\".run\",e);bw.call(by,function(){b.dequeue(by,bx)},e)}if(!bv.length){b.removeData(by,bx+\"queue \"+bx+\".run\",true);bi(by,bx,\"queue\")}}});b.fn.extend({queue:function(e,bv){if(typeof e!==\"string\"){bv=e;e=\"fx\"}if(bv===L){return b.queue(this[0],e)}return this.each(function(){var bw=b.queue(this,e,bv);if(e===\"fx\"&&bw[0]!==\"inprogress\"){b.dequeue(this,e)}})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(bv,e){bv=b.fx?b.fx.speeds[bv]||bv:bv;e=e||\"fx\";return this.queue(e,function(bx,bw){var by=setTimeout(bx,bv);bw.stop=function(){clearTimeout(by)}})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(bD,bw){if(typeof bD!==\"string\"){bw=bD;bD=L}bD=bD||\"fx\";var e=b.Deferred(),bv=this,by=bv.length,bB=1,bz=bD+\"defer\",bA=bD+\"queue\",bC=bD+\"mark\",bx;function bE(){if(!(--bB)){e.resolveWith(bv,[bv])}}while(by--){if((bx=b.data(bv[by],bz,L,true)||(b.data(bv[by],bA,L,true)||b.data(bv[by],bC,L,true))&&b.data(bv[by],bz,b.Callbacks(\"once memory\"),true))){bB++;bx.add(bE)}}bE();return e.promise()}});var aP=/[\\n\\t\\r]/g,af=/\\s+/,aU=/\\r/g,g=/^(?:button|input)$/i,D=/^(?:button|input|object|select|textarea)$/i,l=/^a(?:rea)?$/i,ao=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,F=b.support.getSetAttribute,be,aY,aF;b.fn.extend({attr:function(e,bv){return b.access(this,e,bv,true,b.attr)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,bv){return b.access(this,e,bv,true,b.prop)},removeProp:function(e){e=b.propFix[e]||e;return this.each(function(){try{this[e]=L;delete this[e]}catch(bv){}})},addClass:function(by){var bA,bw,bv,bx,bz,bB,e;if(b.isFunction(by)){return this.each(function(bC){b(this).addClass(by.call(this,bC,this.className))})}if(by&&typeof by===\"string\"){bA=by.split(af);for(bw=0,bv=this.length;bw<bv;bw++){bx=this[bw];if(bx.nodeType===1){if(!bx.className&&bA.length===1){bx.className=by}else{bz=\" \"+bx.className+\" \";for(bB=0,e=bA.length;bB<e;bB++){if(!~bz.indexOf(\" \"+bA[bB]+\" \")){bz+=bA[bB]+\" \"}}bx.className=b.trim(bz)}}}}return this},removeClass:function(bz){var bA,bw,bv,by,bx,bB,e;if(b.isFunction(bz)){return this.each(function(bC){b(this).removeClass(bz.call(this,bC,this.className))})}if((bz&&typeof bz===\"string\")||bz===L){bA=(bz||\"\").split(af);for(bw=0,bv=this.length;bw<bv;bw++){by=this[bw];if(by.nodeType===1&&by.className){if(bz){bx=(\" \"+by.className+\" \").replace(aP,\" \");for(bB=0,e=bA.length;bB<e;bB++){bx=bx.replace(\" \"+bA[bB]+\" \",\" \")}by.className=b.trim(bx)}else{by.className=\"\"}}}}return this},toggleClass:function(bx,bv){var bw=typeof bx,e=typeof bv===\"boolean\";if(b.isFunction(bx)){return this.each(function(by){b(this).toggleClass(bx.call(this,by,this.className,bv),bv)})}return this.each(function(){if(bw===\"string\"){var bA,bz=0,by=b(this),bB=bv,bC=bx.split(af);while((bA=bC[bz++])){bB=e?bB:!by.hasClass(bA);by[bB?\"addClass\":\"removeClass\"](bA)}}else{if(bw===\"undefined\"||bw===\"boolean\"){if(this.className){b._data(this,\"__className__\",this.className)}this.className=this.className||bx===false?\"\":b._data(this,\"__className__\")||\"\"}}})},hasClass:function(e){var bx=\" \"+e+\" \",bw=0,bv=this.length;for(;bw<bv;bw++){if(this[bw].nodeType===1&&(\" \"+this[bw].className+\" \").replace(aP,\" \").indexOf(bx)>-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&\"get\" in e&&(bv=e.get(bw,\"value\"))!==L){return bv}bv=bw.value;return typeof bv===\"string\"?bv.replace(aU,\"\"):bv==null?\"\":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=\"\"}else{if(typeof bB===\"number\"){bB+=\"\"}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?\"\":bC+\"\"})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!(\"set\" in e)||e.set(this,bB,\"value\")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type===\"select-one\";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv<bz;bv++){bx=bC[bv];if(bx.selected&&(b.support.optDisabled?!bx.disabled:bx.getAttribute(\"disabled\")===null)&&(!bx.parentNode.disabled||!b.nodeName(bx.parentNode,\"optgroup\"))){bA=b(bx).val();if(bw){return bA}bB.push(bA)}}if(bw&&!bB.length&&bC.length){return b(bC[by]).val()}return bB},set:function(bv,bw){var e=b.makeArray(bw);b(bv).find(\"option\").each(function(){this.selected=b.inArray(b(this).val(),e)>=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute===\"undefined\"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&\"set\" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,\"\"+bB);return bB}}}else{if(e&&\"get\" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw<e;bw++){bv=bA[bw];if(bv){by=b.propFix[bv]||bv;b.attr(bx,bv,\"\");bx.removeAttribute(F?bv:by);if(ao.test(bv)&&by in bx){bx[by]=false}}}}},attrHooks:{type:{set:function(e,bv){if(g.test(e.nodeName)&&e.parentNode){b.error(\"type property can't be changed\")}else{if(!b.support.radioValue&&bv===\"radio\"&&b.nodeName(e,\"input\")){var bw=e.value;e.setAttribute(\"type\",bv);if(bw){e.value=bw}return bv}}}},value:{get:function(bv,e){if(be&&b.nodeName(bv,\"button\")){return be.get(bv,e)}return e in bv?bv.value:null},set:function(bv,bw,e){if(be&&b.nodeName(bv,\"button\")){return be.set(bv,bw,e)}bv.value=bw}}},propFix:{tabindex:\"tabIndex\",readonly:\"readOnly\",\"for\":\"htmlFor\",\"class\":\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\",contenteditable:\"contentEditable\"},prop:function(bz,bx,bA){var bw,e,by,bv=bz.nodeType;if(!bz||bv===3||bv===8||bv===2){return}by=bv!==1||!b.isXMLDoc(bz);if(by){bx=b.propFix[bx]||bx;e=b.propHooks[bx]}if(bA!==L){if(e&&\"set\" in e&&(bw=e.set(bz,bA,bx))!==L){return bw}else{return(bz[bx]=bA)}}else{if(e&&\"get\" in e&&(bw=e.get(bz,bx))!==null){return bw}else{return bz[bx]}}},propHooks:{tabIndex:{get:function(bv){var e=bv.getAttributeNode(\"tabindex\");return e&&e.specified?parseInt(e.value,10):D.test(bv.nodeName)||l.test(bv.nodeName)&&bv.href?0:L}}}});b.attrHooks.tabindex=b.propHooks.tabIndex;aY={get:function(bv,e){var bx,bw=b.prop(bv,e);return bw===true||typeof bw!==\"boolean\"&&(bx=bv.getAttributeNode(e))&&bx.nodeValue!==false?e.toLowerCase():L},set:function(bv,bx,e){var bw;if(bx===false){b.removeAttr(bv,e)}else{bw=b.propFix[e]||e;if(bw in bv){bv[bw]=true}bv.setAttribute(e,e.toLowerCase())}return e}};if(!F){aF={name:true,id:true};be=b.valHooks.button={get:function(bw,bv){var e;e=bw.getAttributeNode(bv);return e&&(aF[bv]?e.nodeValue!==\"\":e.specified)?e.nodeValue:L},set:function(bw,bx,bv){var e=bw.getAttributeNode(bv);if(!e){e=av.createAttribute(bv);bw.setAttributeNode(e)}return(e.nodeValue=bx+\"\")}};b.attrHooks.tabindex.set=be.set;b.each([\"width\",\"height\"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{set:function(bw,bx){if(bx===\"\"){bw.setAttribute(e,\"auto\");return bx}}})});b.attrHooks.contenteditable={get:be.get,set:function(bv,bw,e){if(bw===\"\"){bw=\"false\"}be.set(bv,bw,e)}}}if(!b.support.hrefNormalized){b.each([\"href\",\"src\",\"width\",\"height\"],function(bv,e){b.attrHooks[e]=b.extend(b.attrHooks[e],{get:function(bx){var bw=bx.getAttribute(e,2);return bw===null?L:bw}})})}if(!b.support.style){b.attrHooks.style={get:function(e){return e.style.cssText.toLowerCase()||L},set:function(e,bv){return(e.style.cssText=\"\"+bv)}}}if(!b.support.optSelected){b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(bv){var e=bv.parentNode;if(e){e.selectedIndex;if(e.parentNode){e.parentNode.selectedIndex}}return null}})}if(!b.support.enctype){b.propFix.enctype=\"encoding\"}if(!b.support.checkOn){b.each([\"radio\",\"checkbox\"],function(){b.valHooks[this]={get:function(e){return e.getAttribute(\"value\")===null?\"on\":e.value}}})}b.each([\"radio\",\"checkbox\"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,bv){if(b.isArray(bv)){return(e.checked=b.inArray(b(e).val(),bv)>=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\\.]*)?(?:\\.(.+))?$/,J=/\\bhover(\\.\\S+)?\\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\\w*)(?:#([\\w\\-]+))?(?:\\.([\\w\\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||\"\").toLowerCase();bv[3]=bv[3]&&new RegExp(\"(?:^|\\\\s)\"+bv[3]+\"(?:\\\\s|$)\")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv[\"class\"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,\"mouseenter$1 mouseleave$1\")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!==\"undefined\"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(\" \");for(bI=0;bI<bC.length;bI++){bH=n.exec(bC[bI])||[];bF=bH[1];e=(bH[2]||\"\").split(\".\").sort();bE=b.event.special[bF]||{};bF=(by?bE.delegateType:bE.bindType)||bF;bE=b.event.special[bF]||{};bG=b.extend({type:bF,origType:bH[1],data:bA,handler:bJ,guid:bJ.guid,selector:by,quick:Y(by),namespace:e.join(\".\")},bv);bw=bK[bF];if(!bw){bw=bK[bF]=[];bw.delegateCount=0;if(!bE.setup||bE.setup.call(bx,bA,e,bB)===false){if(bx.addEventListener){bx.addEventListener(bF,bB,false)}else{if(bx.attachEvent){bx.attachEvent(\"on\"+bF,bB)}}}}if(bE.add){bE.add.call(bx,bG);if(!bG.handler.guid){bG.handler.guid=bJ.guid}}if(by){bw.splice(bw.delegateCount++,0,bG)}else{bw.push(bG)}b.event.global[bF]=true}bx=null},global:{},remove:function(bJ,bE,bv,bH,bB){var bI=b.hasData(bJ)&&b._data(bJ),bF,bx,bz,bL,bC,bA,bG,bw,by,bK,bD,e;if(!bI||!(bw=bI.events)){return}bE=b.trim(bt(bE||\"\")).split(\" \");for(bF=0;bF<bE.length;bF++){bx=n.exec(bE[bF])||[];bz=bL=bx[1];bC=bx[2];if(!bz){for(bz in bw){b.event.remove(bJ,bz+bE[bF],bv,bH,true)}continue}by=b.event.special[bz]||{};bz=(bH?by.delegateType:by.bindType)||bz;bD=bw[bz]||[];bA=bD.length;bC=bC?new RegExp(\"(^|\\\\.)\"+bC.split(\".\").sort().join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;for(bG=0;bG<bD.length;bG++){e=bD[bG];if((bB||bL===e.origType)&&(!bv||bv.guid===e.guid)&&(!bC||bC.test(e.namespace))&&(!bH||bH===e.selector||bH===\"**\"&&e.selector)){bD.splice(bG--,1);if(e.selector){bD.delegateCount--}if(by.remove){by.remove.call(bJ,e)}}}if(bD.length===0&&bA!==bD.length){if(!by.teardown||by.teardown.call(bJ,bC)===false){b.removeEvent(bJ,bz,bI.handle)}delete bw[bz]}}if(b.isEmptyObject(bw)){bK=bI.handle;if(bK){bK.elem=null}b.removeData(bJ,[\"events\",\"handle\"],true)}},customEvent:{getData:true,setData:true,changeData:true},trigger:function(bv,bD,bA,bJ){if(bA&&(bA.nodeType===3||bA.nodeType===8)){return}var bG=bv.type||bv,bx=[],e,bw,bC,bH,bz,by,bF,bE,bB,bI;if(T.test(bG+b.event.triggered)){return}if(bG.indexOf(\"!\")>=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(\".\")>=0){bx=bG.split(\".\");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv===\"object\"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(\".\");bv.namespace_re=bv.namespace?new RegExp(\"(^|\\\\.)\"+bx.join(\"\\\\.(?:.*\\\\.)?\")+\"(\\\\.|$)\"):null;by=bG.indexOf(\":\")<0?\"on\"+bG:\"\";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bC<bB.length&&!bv.isPropagationStopped();bC++){bH=bB[bC][0];bv.type=bB[bC][1];bE=(b._data(bH,\"events\")||{})[bv.type]&&b._data(bH,\"handle\");if(bE){bE.apply(bH,bD)}bE=by&&bH[by];if(bE&&b.acceptData(bH)&&bE.apply(bH,bD)===false){bv.preventDefault()}}bv.type=bG;if(!bJ&&!bv.isDefaultPrevented()){if((!bF._default||bF._default.apply(bA.ownerDocument,bD)===false)&&!(bG===\"click\"&&b.nodeName(bA,\"a\"))&&b.acceptData(bA)){if(by&&bA[bG]&&((bG!==\"focus\"&&bG!==\"blur\")||bv.target.offsetWidth!==0)&&!b.isWindow(bA)){bz=bA[by];if(bz){bA[by]=null}b.event.triggered=bG;bA[bG]();b.event.triggered=L;if(bz){bA[by]=bz}}}}return bv.result},dispatch:function(e){e=b.event.fix(e||bb.event);var bz=((b._data(this,\"events\")||{})[e.type]||[]),bA=bz.delegateCount,bG=[].slice.call(arguments,0),by=!e.exclusive&&!e.namespace,bH=[],bC,bB,bK,bx,bF,bE,bv,bD,bI,bw,bJ;bG[0]=e;e.delegateTarget=this;if(bA&&!e.target.disabled&&!(e.button&&e.type===\"click\")){bx=b(this);bx.context=this.ownerDocument||this;for(bK=e.target;bK!=this;bK=bK.parentNode||this){bE={};bD=[];bx[0]=bK;for(bC=0;bC<bA;bC++){bI=bz[bC];bw=bI.selector;if(bE[bw]===L){bE[bw]=(bI.quick?j(bK,bI.quick):bx.is(bw))}if(bE[bw]){bD.push(bI)}}if(bD.length){bH.push({elem:bK,matches:bD})}}}if(bz.length>bA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC<bH.length&&!e.isPropagationStopped();bC++){bv=bH[bC];e.currentTarget=bv.elem;for(bB=0;bB<bv.matches.length&&!e.isImmediatePropagationStopped();bB++){bI=bv.matches[bB];if(by||(!e.namespace&&!bI.namespace)||e.namespace_re&&e.namespace_re.test(bI.namespace)){e.data=bI.data;e.handleObj=bI;bF=((b.event.special[bI.origType]||{}).handle||bI.handler).apply(bv.elem,bG);if(bF!==L){e.result=bF;if(bF===false){e.preventDefault();e.stopPropagation()}}}}}return e.result},props:\"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(bv,e){if(bv.which==null){bv.which=e.charCode!=null?e.charCode:e.keyCode}return bv}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(bx,bw){var by,bz,e,bv=bw.button,bA=bw.fromElement;if(bx.pageX==null&&bw.clientX!=null){by=bx.target.ownerDocument||av;bz=by.documentElement;e=by.body;bx.pageX=bw.clientX+(bz&&bz.scrollLeft||e&&e.scrollLeft||0)-(bz&&bz.clientLeft||e&&e.clientLeft||0);bx.pageY=bw.clientY+(bz&&bz.scrollTop||e&&e.scrollTop||0)-(bz&&bz.clientTop||e&&e.clientTop||0)}if(!bx.relatedTarget&&bA){bx.relatedTarget=bA===bx.target?bw.toElement:bA}if(!bx.which&&bv!==L){bx.which=(bv&1?1:(bv&2?3:(bv&4?2:0)))}return bx}},fix:function(bw){if(bw[b.expando]){return bw}var bv,bz,e=bw,bx=b.event.fixHooks[bw.type]||{},by=bx.props?this.props.concat(bx.props):this.props;bw=b.Event(e);for(bv=by.length;bv;){bz=by[--bv];bw[bz]=e[bz]}if(!bw.target){bw.target=e.srcElement||av}if(bw.target.nodeType===3){bw.target=bw.target.parentNode}if(bw.metaKey===L){bw.metaKey=bw.ctrlKey}return bx.filter?bx.filter(bw,e):bw},special:{ready:{setup:b.bindReady},load:{noBubble:true},focus:{delegateType:\"focusin\"},blur:{delegateType:\"focusout\"},beforeunload:{setup:function(bw,bv,e){if(b.isWindow(this)){this.onbeforeunload=e}},teardown:function(bv,e){if(this.onbeforeunload===e){this.onbeforeunload=null}}}},simulate:function(bw,by,bx,bv){var bz=b.extend(new b.Event(),bx,{type:bw,isSimulated:true,originalEvent:{}});if(bv){b.event.trigger(bz,null,by)}else{b.event.dispatch.call(by,bz)}if(bz.isDefaultPrevented()){bx.preventDefault()}}};b.event.handle=b.event.dispatch;b.removeEvent=av.removeEventListener?function(bv,e,bw){if(bv.removeEventListener){bv.removeEventListener(e,bw,false)}}:function(bv,e,bw){if(bv.detachEvent){bv.detachEvent(\"on\"+e,bw)}};b.Event=function(bv,e){if(!(this instanceof b.Event)){return new b.Event(bv,e)}if(bv&&bv.type){this.originalEvent=bv;this.type=bv.type;this.isDefaultPrevented=(bv.defaultPrevented||bv.returnValue===false||bv.getPreventDefault&&bv.getPreventDefault())?i:bk}else{this.type=bv}if(e){b.extend(this,e)}this.timeStamp=bv&&bv.timeStamp||b.now();this[b.expando]=true};function bk(){return false}function i(){return true}b.Event.prototype={preventDefault:function(){this.isDefaultPrevented=i;var bv=this.originalEvent;if(!bv){return}if(bv.preventDefault){bv.preventDefault()}else{bv.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=i;var bv=this.originalEvent;if(!bv){return}if(bv.stopPropagation){bv.stopPropagation()}bv.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i;this.stopPropagation()},isDefaultPrevented:bk,isPropagationStopped:bk,isImmediatePropagationStopped:bk};b.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(bv,e){b.event.special[bv]={delegateType:e,bindType:e,handle:function(bz){var bB=this,bA=bz.relatedTarget,by=bz.handleObj,bw=by.selector,bx;if(!bA||(bA!==bB&&!b.contains(bB,bA))){bz.type=by.origType;bx=by.handler.apply(this,arguments);bz.type=e}return bx}}});if(!b.support.submitBubbles){b.event.special.submit={setup:function(){if(b.nodeName(this,\"form\")){return false}b.event.add(this,\"click._submit keypress._submit\",function(bx){var bw=bx.target,bv=b.nodeName(bw,\"input\")||b.nodeName(bw,\"button\")?bw.form:L;if(bv&&!bv._submit_attached){b.event.add(bv,\"submit._submit\",function(e){if(this.parentNode&&!e.isTrigger){b.event.simulate(\"submit\",this.parentNode,e,true)}});bv._submit_attached=true}})},teardown:function(){if(b.nodeName(this,\"form\")){return false}b.event.remove(this,\"._submit\")}}}if(!b.support.changeBubbles){b.event.special.change={setup:function(){if(bd.test(this.nodeName)){if(this.type===\"checkbox\"||this.type===\"radio\"){b.event.add(this,\"propertychange._change\",function(e){if(e.originalEvent.propertyName===\"checked\"){this._just_changed=true}});b.event.add(this,\"click._change\",function(e){if(this._just_changed&&!e.isTrigger){this._just_changed=false;b.event.simulate(\"change\",this,e,true)}})}return false}b.event.add(this,\"beforeactivate._change\",function(bw){var bv=bw.target;if(bd.test(bv.nodeName)&&!bv._change_attached){b.event.add(bv,\"change._change\",function(e){if(this.parentNode&&!e.isSimulated&&!e.isTrigger){b.event.simulate(\"change\",this.parentNode,e,true)}});bv._change_attached=true}})},handle:function(bv){var e=bv.target;if(this!==e||bv.isSimulated||bv.isTrigger||(e.type!==\"radio\"&&e.type!==\"checkbox\")){return bv.handleObj.handler.apply(this,arguments)}},teardown:function(){b.event.remove(this,\"._change\");return bd.test(this.nodeName)}}}if(!b.support.focusinBubbles){b.each({focus:\"focusin\",blur:\"focusout\"},function(bx,e){var bv=0,bw=function(by){b.event.simulate(e,by.target,b.event.fix(by),true)};b.event.special[e]={setup:function(){if(bv++===0){av.addEventListener(bx,bw,true)}},teardown:function(){if(--bv===0){av.removeEventListener(bx,bw,true)}}}})}b.fn.extend({on:function(bw,e,bz,by,bv){var bA,bx;if(typeof bw===\"object\"){if(typeof e!==\"string\"){bz=e;e=L}for(bx in bw){this.on(bx,e,bz,bw[bx],bv)}return this}if(bz==null&&by==null){by=e;bz=e=L}else{if(by==null){if(typeof e===\"string\"){by=bz;bz=L}else{by=bz;bz=e;e=L}}}if(by===false){by=bk}else{if(!by){return this}}if(bv===1){bA=by;by=function(bB){b().off(bB);return bA.apply(this,arguments)};by.guid=bA.guid||(bA.guid=b.guid++)}return this.each(function(){b.event.add(this,bw,by,bz,e)})},one:function(bv,e,bx,bw){return this.on.call(this,bv,e,bx,bw,1)},off:function(bw,e,by){if(bw&&bw.preventDefault&&bw.handleObj){var bv=bw.handleObj;b(bw.delegateTarget).off(bv.namespace?bv.type+\".\"+bv.namespace:bv.type,bv.selector,bv.handler);return this}if(typeof bw===\"object\"){for(var bx in bw){this.off(bx,e,bw[bx])}return this}if(e===false||typeof e===\"function\"){by=e;e=L}if(by===false){by=bk}return this.each(function(){b.event.remove(this,bw,by,e)})},bind:function(e,bw,bv){return this.on(e,null,bw,bv)},unbind:function(e,bv){return this.off(e,null,bv)},live:function(e,bw,bv){b(this.context).on(e,this.selector,bw,bv);return this},die:function(e,bv){b(this.context).off(e,this.selector||\"**\",bv);return this},delegate:function(e,bv,bx,bw){return this.on(bv,e,bx,bw)},undelegate:function(e,bv,bw){return arguments.length==1?this.off(e,\"**\"):this.off(bv,e,bw)},trigger:function(e,bv){return this.each(function(){b.event.trigger(e,bv,this)})},triggerHandler:function(e,bv){if(this[0]){return b.event.trigger(e,bv,this[0],true)}},toggle:function(bx){var bv=arguments,e=bx.guid||b.guid++,bw=0,by=function(bz){var bA=(b._data(this,\"lastToggle\"+bx.guid)||0)%bw;b._data(this,\"lastToggle\"+bx.guid,bA+1);bz.preventDefault();return bv[bA].apply(this,arguments)||false};by.guid=e;while(bw<bv.length){bv[bw++].guid=e}return this.click(by)},hover:function(e,bv){return this.mouseenter(e).mouseleave(bv||e)}});b.each((\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\").split(\" \"),function(bv,e){b.fn[e]=function(bx,bw){if(bw==null){bw=bx;bx=null}return arguments.length>0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}});\n/*!\n * Sizzle CSS Selector Engine\n *  Copyright 2011, The Dojo Foundation\n *  Released under the MIT, BSD, and GPL Licenses.\n *  More information: http://sizzlejs.com/\n */\n(function(){var bH=/((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^\\[\\]]*\\]|['\"][^'\"]*['\"]|[^\\[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,bC=\"sizcache\"+(Math.random()+\"\").replace(\".\",\"\"),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\\\/g,bO=/\\r\\n/g,bQ=/\\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!==\"string\"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec(\"\");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]===\"~\"||bW[0]===\"+\")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=\"\"}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)===\"[object Array]\"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e<bR.length;e++){if(bR[e]===bR[e-1]){bR.splice(e--,1)}}}}return bR};by.matches=function(e,bR){return by(e,null,null,bR)};by.matchesSelector=function(e,bR){return by(bR,null,null,[e]).length>0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS<bU;bS++){bV=bE.order[bS];if((bT=bE.leftMatch[bV].exec(bX))){bR=bT[1];bT.splice(1,1);if(bR.substr(bR.length-1)!==\"\\\\\"){bT[1]=(bT[1]||\"\").replace(bK,\"\");bW=bE.find[bV](bT,e,bY);if(bW!=null){bX=bX.replace(bE.match[bV],\"\");break}}}}if(!bW){bW=typeof e.getElementsByTagName!==\"undefined\"?e.getElementsByTagName(\"*\"):[]}return{set:bW,expr:bX}};by.filter=function(b1,b0,b4,bU){var bW,e,bZ,b6,b3,bR,bT,bV,b2,bS=b1,b5=[],bY=b0,bX=b0&&b0[0]&&by.isXML(b0[0]);while(b1&&b0.length){for(bZ in bE.filter){if((bW=bE.leftMatch[bZ].exec(b1))!=null&&bW[2]){bR=bE.filter[bZ];bT=bW[1];e=false;bW.splice(1,1);if(bT.substr(bT.length-1)===\"\\\\\"){continue}if(bY===b5){b5=[]}if(bE.preFilter[bZ]){bW=bE.preFilter[bZ](bW,bY,b4,b5,bU,bX);if(!bW){e=b6=true}else{if(bW===true){continue}}}if(bW){for(bV=0;(b3=bY[bV])!=null;bV++){if(b3){b6=bR(b3,bW,bV,bY);b2=bU^b6;if(b4&&b6!=null){if(b2){e=true}else{bY[bV]=false}}else{if(b2){b5.push(b3);e=true}}}}}if(b6!==L){if(!b4){bY=b5}b1=b1.replace(bE.match[bZ],\"\");if(!e){return[]}break}}}if(b1===bS){if(e==null){by.error(b1)}else{break}}bS=b1}return bY};by.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)};var bw=by.getText=function(bU){var bS,bT,e=bU.nodeType,bR=\"\";if(e){if(e===1||e===9){if(typeof bU.textContent===\"string\"){return bU.textContent}else{if(typeof bU.innerText===\"string\"){return bU.innerText.replace(bO,\"\")}else{for(bU=bU.firstChild;bU;bU=bU.nextSibling){bR+=bw(bU)}}}}else{if(e===3||e===4){return bU.nodeValue}}}else{for(bS=0;(bT=bU[bS]);bS++){if(bT.nodeType!==8){bR+=bw(bT)}}}return bR};var bE=by.selectors={order:[\"ID\",\"NAME\",\"TAG\"],match:{ID:/#((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,CLASS:/\\.((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)/,NAME:/\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)['\"]*\\]/,ATTR:/\\[\\s*((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(?:(['\"])(.*?)\\3|(#?(?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)*)|)|)\\s*\\]/,TAG:/^((?:[\\w\\u00c0-\\uFFFF\\*\\-]|\\\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\\(\\s*(even|odd|(?:[+\\-]?\\d+|(?:[+\\-]?\\d*)?n\\s*(?:[+\\-]\\s*\\d+)?))\\s*\\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^\\-]|$)/,PSEUDO:/:((?:[\\w\\u00c0-\\uFFFF\\-]|\\\\.)+)(?:\\((['\"]?)((?:\\([^\\)]+\\)|[^\\(\\)]*)+)\\2\\))?/},leftMatch:{},attrMap:{\"class\":\"className\",\"for\":\"htmlFor\"},attrHandle:{href:function(e){return e.getAttribute(\"href\")},type:function(e){return e.getAttribute(\"type\")}},relative:{\"+\":function(bW,bR){var bT=typeof bR===\"string\",bV=bT&&!bQ.test(bR),bX=bT&&!bV;if(bV){bR=bR.toLowerCase()}for(var bS=0,e=bW.length,bU;bS<e;bS++){if((bU=bW[bS])){while((bU=bU.previousSibling)&&bU.nodeType!==1){}bW[bS]=bX||bU&&bU.nodeName.toLowerCase()===bR?bU||false:bU===bR}}if(bX){by.filter(bR,bW,true)}},\">\":function(bW,bR){var bV,bU=typeof bR===\"string\",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS<e;bS++){bV=bW[bS];if(bV){var bT=bV.parentNode;bW[bS]=bT.nodeName.toLowerCase()===bR?bT:false}}}else{for(;bS<e;bS++){bV=bW[bS];if(bV){bW[bS]=bU?bV.parentNode:bV.parentNode===bR}}if(bU){by.filter(bR,bW,true)}}},\"\":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR===\"string\"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e(\"parentNode\",bR,bS,bT,bU,bV)},\"~\":function(bT,bR,bV){var bU,bS=bI++,e=bN;if(typeof bR===\"string\"&&!bQ.test(bR)){bR=bR.toLowerCase();bU=bR;e=bv}e(\"previousSibling\",bR,bS,bT,bU,bV)}},find:{ID:function(bR,bS,bT){if(typeof bS.getElementById!==\"undefined\"&&!bT){var e=bS.getElementById(bR[1]);return e&&e.parentNode?[e]:[]}},NAME:function(bS,bV){if(typeof bV.getElementsByName!==\"undefined\"){var bR=[],bU=bV.getElementsByName(bS[1]);for(var bT=0,e=bU.length;bT<e;bT++){if(bU[bT].getAttribute(\"name\")===bS[1]){bR.push(bU[bT])}}return bR.length===0?null:bR}},TAG:function(e,bR){if(typeof bR.getElementsByTagName!==\"undefined\"){return bR.getElementsByTagName(e[1])}}},preFilter:{CLASS:function(bT,bR,bS,e,bW,bX){bT=\" \"+bT[1].replace(bK,\"\")+\" \";if(bX){return bT}for(var bU=0,bV;(bV=bR[bU])!=null;bU++){if(bV){if(bW^(bV.className&&(\" \"+bV.className+\" \").replace(/[\\t\\n\\r]/g,\" \").indexOf(bT)>=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,\"\")},TAG:function(bR,e){return bR[1].replace(bK,\"\").toLowerCase()},CHILD:function(e){if(e[1]===\"nth\"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\\+|\\s*/g,\"\");var bR=/(-?)(\\d*)(?:n([+\\-]?\\d*))?/.exec(e[2]===\"even\"&&\"2n\"||e[2]===\"odd\"&&\"2n+1\"||!/\\D/.test(e[2])&&\"0n+\"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,\"\");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||\"\").replace(bK,\"\");if(bU[2]===\"~=\"){bU[4]=\" \"+bU[4]+\" \"}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]===\"not\"){if((bH.exec(bU[3])||\"\").length>1||/^\\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!==\"hidden\"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute(\"type\"),bR=bS.type;return bS.nodeName.toLowerCase()===\"input\"&&\"text\"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"radio\"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"checkbox\"===e.type},file:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"file\"===e.type},password:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"password\"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e===\"input\"||e===\"button\")&&\"submit\"===bR.type},image:function(e){return e.nodeName.toLowerCase()===\"input\"&&\"image\"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e===\"input\"||e===\"button\")&&\"reset\"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e===\"input\"&&\"button\"===bR.type||e===\"button\"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bR<e[3]-0},gt:function(bS,bR,e){return bR>e[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e===\"contains\"){return(bS.textContent||bS.innerText||bw([bS])||\"\").indexOf(bX[3])>=0}else{if(e===\"not\"){var bT=bX[3];for(var bV=0,bU=bT.length;bV<bU;bV++){if(bT[bV]===bS){return false}}return true}else{by.error(e)}}}},CHILD:function(bS,bU){var bT,b0,bW,bZ,e,bV,bY,bX=bU[1],bR=bS;switch(bX){case\"only\":case\"first\":while((bR=bR.previousSibling)){if(bR.nodeType===1){return false}}if(bX===\"first\"){return true}bR=bS;case\"last\":while((bR=bR.nextSibling)){if(bR.nodeType===1){return false}}return true;case\"nth\":bT=bU[2];b0=bU[3];if(bT===1&&b0===0){return true}bW=bU[0];bZ=bS.parentNode;if(bZ&&(bZ[bC]!==bW||!bS.nodeIndex)){bV=0;for(bR=bZ.firstChild;bR;bR=bR.nextSibling){if(bR.nodeType===1){bR.nodeIndex=++bV}}bZ[bC]=bW}bY=bS.nodeIndex-b0;if(bT===0){return bY===0}else{return(bY%bT===0&&bY/bT>=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute(\"id\")===e},TAG:function(bR,e){return(e===\"*\"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(\" \"+(bR.className||bR.getAttribute(\"class\"))+\" \").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+\"\",bU=bT[2],bR=bT[4];return e==null?bU===\"!=\":!bU&&by.attr?e!=null:bU===\"=\"?bW===bR:bU===\"*=\"?bW.indexOf(bR)>=0:bU===\"~=\"?(\" \"+bW+\" \").indexOf(bR)>=0:!bR?bW&&e!==false:bU===\"!=\"?bW!==bR:bU===\"^=\"?bW.indexOf(bR)===0:bU===\"$=\"?bW.substr(bW.length-bR.length)===bR:bU===\"|=\"?bW===bR||bW.substr(0,bR.length+1)===bR+\"-\":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return\"\\\\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\\[]*\\])(?![^\\(]*\\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\\r|\\n)*?)/.source+bE.match[bz].source.replace(/\\\\(\\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)===\"[object Array]\"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length===\"number\"){for(var e=bU.length;bS<e;bS++){bR.push(bU[bS])}}else{for(;bU[bS];bS++){bR.push(bU[bS])}}}return bR}}var bJ,bG;if(av.documentElement.compareDocumentPosition){bJ=function(bR,e){if(bR===e){bB=true;return 0}if(!bR.compareDocumentPosition||!e.compareDocumentPosition){return bR.compareDocumentPosition?-1:1}return bR.compareDocumentPosition(e)&4?-1:1}}else{bJ=function(bY,bX){if(bY===bX){bB=true;return 0}else{if(bY.sourceIndex&&bX.sourceIndex){return bY.sourceIndex-bX.sourceIndex}}var bV,bR,bS=[],e=[],bU=bY.parentNode,bW=bX.parentNode,bZ=bU;if(bU===bW){return bG(bY,bX)}else{if(!bU){return -1}else{if(!bW){return 1}}}while(bZ){bS.unshift(bZ);bZ=bZ.parentNode}bZ=bW;while(bZ){e.unshift(bZ);bZ=bZ.parentNode}bV=bS.length;bR=e.length;for(var bT=0;bT<bV&&bT<bR;bT++){if(bS[bT]!==e[bT]){return bG(bS[bT],e[bT])}}return bT===bV?bG(bY,e[bT],-1):bG(bS[bT],bX,1)};bG=function(bR,e,bS){if(bR===e){return bS}var bT=bR.nextSibling;while(bT){if(bT===e){return -1}bT=bT.nextSibling}return 1}}(function(){var bR=av.createElement(\"div\"),bS=\"script\"+(new Date()).getTime(),e=av.documentElement;bR.innerHTML=\"<a name='\"+bS+\"'/>\";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!==\"undefined\"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!==\"undefined\"&&bT.getAttributeNode(\"id\").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!==\"undefined\"&&bV.getAttributeNode(\"id\");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement(\"div\");e.appendChild(av.createComment(\"\"));if(e.getElementsByTagName(\"*\").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]===\"*\"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML=\"<a href='#'></a>\";if(e.firstChild&&typeof e.firstChild.getAttribute!==\"undefined\"&&e.firstChild.getAttribute(\"href\")!==\"#\"){bE.attrHandle.href=function(bR){return bR.getAttribute(\"href\",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement(\"div\"),bS=\"__sizzle__\";bT.innerHTML=\"<p class='TEST'></p>\";if(bT.querySelectorAll&&bT.querySelectorAll(\".TEST\").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\\w+$)|^\\.([\\w\\-]+$)|^#([\\w\\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4===\"body\"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!==\"object\"){var bW=bV,bX=bV.getAttribute(\"id\"),bU=bX||bS,b6=bV.parentNode,b5=/^\\s*[+~]/.test(b4);if(!bX){bV.setAttribute(\"id\",bU)}else{bU=bU.replace(/'/g,\"\\\\$&\")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll(\"[id='\"+bU+\"'] \"+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute(\"id\")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement(\"div\"),\"div\"),bR=false;try{bS.call(av.documentElement,\"[test!='']:sizzle\")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\\=\\s*([^'\"\\]]*)\\s*\\]/g,\"='$1']\");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement(\"div\");e.innerHTML=\"<div class='test e'></div><div class='test'></div>\";if(!e.getElementsByClassName||e.getElementsByClassName(\"e\").length===0){return}e.lastChild.className=\"e\";if(e.getElementsByClassName(\"e\").length===1){return}bE.order.splice(1,0,\"CLASS\");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!==\"undefined\"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1&&!bY){e[bC]=bV;e.sizset=bT}if(e.nodeName.toLowerCase()===bW){bU=e;break}e=e[bR]}bZ[bT]=bU}}}function bN(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT<bS;bT++){var e=bZ[bT];if(e){var bU=false;e=e[bR];while(e){if(e[bC]===bV){bU=bZ[e.sizset];break}if(e.nodeType===1){if(!bY){e[bC]=bV;e.sizset=bT}if(typeof bW!==\"string\"){if(e===bW){bU=true;break}}else{if(by.filter(bW,[e]).length>0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!==\"HTML\":false};var bM=function(bS,e,bW){var bV,bX=[],bU=\"\",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,\"\")}bS=bE.relative[bS]?bS+\"*\":bS;for(var bT=0,bR=bY.length;bT<bR;bT++){by(bS,bY[bT],bX,bW)}return by.filter(bU,bX)};by.attr=b.attr;by.selectors.attrMap={};b.find=by;b.expr=by.selectors;b.expr[\":\"]=b.expr.filters;b.unique=by.uniqueSort;b.text=by.getText;b.isXMLDoc=by.isXML;b.contains=by.contains})();var ab=/Until$/,aq=/^(?:parents|prevUntil|prevAll)/,a9=/,/,bp=/^.[^:#\\[\\.,]*$/,P=Array.prototype.slice,H=b.expr.match.POS,ay={children:true,contents:true,next:true,prev:true};b.fn.extend({find:function(e){var bw=this,by,bv;if(typeof e!==\"string\"){return b(e).filter(function(){for(by=0,bv=bw.length;by<bv;by++){if(b.contains(bw[by],this)){return true}}})}var bx=this.pushStack(\"\",\"find\",e),bA,bB,bz;for(by=0,bv=this.length;by<bv;by++){bA=bx.length;b.find(e,this[by],bx);if(by>0){for(bB=bA;bB<bx.length;bB++){for(bz=0;bz<bA;bz++){if(bx[bz]===bx[bB]){bx.splice(bB--,1);break}}}}}return bx},has:function(bv){var e=b(bv);return this.filter(function(){for(var bx=0,bw=e.length;bx<bw;bx++){if(b.contains(this,e[bx])){return true}}})},not:function(e){return this.pushStack(aG(this,e,false),\"not\",e)},filter:function(e){return this.pushStack(aG(this,e,true),\"filter\",e)},is:function(e){return !!e&&(typeof e===\"string\"?H.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw<by.length;bw++){if(b(bz).is(by[bw])){bv.push({selector:by[bw],elem:bz,level:bB})}}bz=bz.parentNode;bB++}return bv}var bA=H.test(by)||typeof by!==\"string\"?b(by,bx||this.context):0;for(bw=0,e=this.length;bw<e;bw++){bz=this[bw];while(bz){if(bA?bA.index(bz)>-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,\"closest\",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e===\"string\"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e===\"string\"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,\"parentNode\")},parentsUntil:function(bv,e,bw){return b.dir(bv,\"parentNode\",bw)},next:function(e){return b.nth(e,2,\"nextSibling\")},prev:function(e){return b.nth(e,2,\"previousSibling\")},nextAll:function(e){return b.dir(e,\"nextSibling\")},prevAll:function(e){return b.dir(e,\"previousSibling\")},nextUntil:function(bv,e,bw){return b.dir(bv,\"nextSibling\",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,\"previousSibling\",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,\"iframe\")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw===\"string\"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(\",\"))}});b.extend({filter:function(bw,e,bv){if(bv){bw=\":not(\"+bw+\")\"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw===\"string\"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split(\"|\"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR=\"abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",ag=/ jQuery\\d+=\"(?:\\d+|null)\"/g,ar=/^\\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/ig,d=/<([\\w:]+)/,w=/<tbody/i,W=/<|&#?\\w+;/,ae=/<(?:script|style)/i,O=/<(?:script|object|embed|option|style)/i,ah=new RegExp(\"<(?:\"+aR+\")\",\"i\"),o=/checked\\s*(?:[^=]|=\\s*.checked.)/i,bm=/\\/(java|ecma)script/i,aN=/^\\s*<!(?:\\[CDATA\\[|\\-\\-)/,ax={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],area:[1,\"<map>\",\"</map>\"],_default:[0,\"\",\"\"]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,\"div<div>\",\"</div>\"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!==\"object\"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,\"body\")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,\"before\",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,\"after\",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName(\"*\"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName(\"*\"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,\"\"):null}else{if(typeof bx===\"string\"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||[\"\",\"\"])[1].toLowerCase()]){bx=bx.replace(R,\"<$1></$2>\");try{for(var bw=0,bv=this.length;bw<bv;bw++){if(this[bw].nodeType===1){b.cleanData(this[bw].getElementsByTagName(\"*\"));this[bw].innerHTML=bx}}}catch(by){this.empty().append(bx)}}else{if(b.isFunction(bx)){this.each(function(bz){var e=b(this);e.html(bx.call(this,bz,e.html()))})}else{this.empty().append(bx)}}}return this},replaceWith:function(e){if(this[0]&&this[0].parentNode){if(b.isFunction(e)){return this.each(function(bx){var bw=b(this),bv=bw.html();bw.replaceWith(e.call(this,bx,bv))})}if(typeof e!==\"string\"){e=b(e).detach()}return this.each(function(){var bw=this.nextSibling,bv=this.parentNode;b(this).remove();if(bw){b(bw).before(e)}else{b(bv).append(e)}})}else{return this.length?this.pushStack(b(b.isFunction(e)?e():e),\"replaceWith\",e):this}},detach:function(e){return this.remove(e,true)},domManip:function(bB,bF,bE){var bx,by,bA,bD,bC=bB[0],bv=[];if(!b.support.checkClone&&arguments.length===3&&typeof bC===\"string\"&&o.test(bC)){return this.each(function(){b(this).domManip(bB,bF,bE,true)})}if(b.isFunction(bC)){return this.each(function(bH){var bG=b(this);bB[0]=bC.call(this,bH,bF?bG.html():L);bG.domManip(bB,bF,bE)})}if(this[0]){bD=bC&&bC.parentNode;if(b.support.parentNode&&bD&&bD.nodeType===11&&bD.childNodes.length===this.length){bx={fragment:bD}}else{bx=b.buildFragment(bB,this,bv)}bA=bx.fragment;if(bA.childNodes.length===1){by=bA=bA.firstChild}else{by=bA.firstChild}if(by){bF=bF&&b.nodeName(by,\"tr\");for(var bw=0,e=this.length,bz=e-1;bw<e;bw++){bE.call(bF?ba(this[bw],by):this[bw],bx.cacheable||(e>1&&bw<bz)?b.clone(bA,true,true):bA)}}if(bv.length){b.each(bv,bo)}}return this}});function ba(e,bv){return b.nodeName(e,\"table\")?(e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\"))):e}function t(bB,bv){if(bv.nodeType!==1||!b.hasData(bB)){return}var by,bx,e,bA=b._data(bB),bz=b._data(bv,bA),bw=bA.events;if(bw){delete bz.handle;bz.events={};for(by in bw){for(bx=0,e=bw[by].length;bx<e;bx++){b.event.add(bv,by+(bw[by][bx].namespace?\".\":\"\")+bw[by][bx].namespace,bw[by][bx],bw[by][bx].data)}}}if(bz.data){bz.data=b.extend({},bz.data)}}function ai(bv,e){var bw;if(e.nodeType!==1){return}if(e.clearAttributes){e.clearAttributes()}if(e.mergeAttributes){e.mergeAttributes(bv)}bw=e.nodeName.toLowerCase();if(bw===\"object\"){e.outerHTML=bv.outerHTML}else{if(bw===\"input\"&&(bv.type===\"checkbox\"||bv.type===\"radio\")){if(bv.checked){e.defaultChecked=e.checked=bv.checked}if(e.value!==bv.value){e.value=bv.value}}else{if(bw===\"option\"){e.selected=bv.defaultSelected}else{if(bw===\"input\"||bw===\"textarea\"){e.defaultValue=bv.defaultValue}}}}e.removeAttribute(b.expando)}b.buildFragment=function(bz,bx,bv){var by,e,bw,bA,bB=bz[0];if(bx&&bx[0]){bA=bx[0].ownerDocument||bx[0]}if(!bA.createDocumentFragment){bA=av}if(bz.length===1&&typeof bB===\"string\"&&bB.length<512&&bA===av&&bB.charAt(0)===\"<\"&&!O.test(bB)&&(b.support.checkClone||!o.test(bB))&&(b.support.html5Clone||!ah.test(bB))){e=true;bw=b.fragments[bB];if(bw&&bw!==1){by=bw}}if(!by){by=bA.createDocumentFragment();b.clean(bz,bA,by,bv)}if(e){b.fragments[bB]=bw?by:1}return{fragment:by,cacheable:e}};b.fragments={};b.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,bv){b.fn[e]=function(bw){var bz=[],bC=b(bw),bB=this.length===1&&this[0].parentNode;if(bB&&bB.nodeType===11&&bB.childNodes.length===1&&bC.length===1){bC[bv](this[0]);return this}else{for(var bA=0,bx=bC.length;bA<bx;bA++){var by=(bA>0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!==\"undefined\"){return e.getElementsByTagName(\"*\")}else{if(typeof e.querySelectorAll!==\"undefined\"){return e.querySelectorAll(\"*\")}else{return[]}}}function az(e){if(e.type===\"checkbox\"||e.type===\"radio\"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||\"\").toLowerCase();if(bv===\"input\"){az(e)}else{if(bv!==\"script\"&&typeof e.getElementsByTagName!==\"undefined\"){b.grep(e.getElementsByTagName(\"input\"),az)}}}function al(e){var bv=av.createElement(\"div\");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test(\"<\"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement===\"undefined\"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz===\"number\"){bz+=\"\"}if(!bz){continue}if(typeof bz===\"string\"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,\"<$1></$2>\");var bK=(d.exec(bz)||[\"\",\"\"])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement(\"div\");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK===\"table\"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===\"<table>\"&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],\"tbody\")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)===\"number\"){for(bB=0;bB<bG;bB++){E(bz[bB])}}else{E(bz)}}if(bz.nodeType){bI.push(bz)}else{bI=b.merge(bI,bz)}}if(bH){bF=function(bL){return !bL.type||bm.test(bL.type)};for(bE=0;bI[bE];bE++){if(bA&&b.nodeName(bI[bE],\"script\")&&(!bI[bE].type||bI[bE].type.toLowerCase()===\"text/javascript\")){bA.push(bI[bE].parentNode?bI[bE].parentNode.removeChild(bI[bE]):bI[bE])}else{if(bI[bE].nodeType===1){var bJ=b.grep(bI[bE].getElementsByTagName(\"script\"),bF);bI.splice.apply(bI,[bE+1,0].concat(bJ))}bH.appendChild(bI[bE])}}}return bI},cleanData:function(bv){var by,bw,e=b.cache,bB=b.event.special,bA=b.support.deleteExpando;for(var bz=0,bx;(bx=bv[bz])!=null;bz++){if(bx.nodeName&&b.noData[bx.nodeName.toLowerCase()]){continue}bw=bx[b.expando];if(bw){by=e[bw];if(by&&by.events){for(var bC in by.events){if(bB[bC]){b.event.remove(bx,bC)}else{b.removeEvent(bx,bC,by.handle)}}if(by.handle){by.handle.elem=null}}if(bA){delete bx[b.expando]}else{if(bx.removeAttribute){bx.removeAttribute(b.expando)}}delete e[bw]}}}});function bo(e,bv){if(bv.src){b.ajax({url:bv.src,async:false,dataType:\"script\"})}else{b.globalEval((bv.text||bv.textContent||bv.innerHTML||\"\").replace(aN,\"/*$0*/\"))}if(bv.parentNode){bv.parentNode.removeChild(bv)}}var ak=/alpha\\([^)]*\\)/i,au=/opacity=([^)]*)/,z=/([A-Z]|^ms)/g,bc=/^-?\\d+(?:px)?$/i,bn=/^-?\\d/,I=/^([\\-+])=([\\-+.\\de]+)/,a7={position:\"absolute\",visibility:\"hidden\",display:\"block\"},an=[\"Left\",\"Right\"],a1=[\"Top\",\"Bottom\"],Z,aI,aX;b.fn.css=function(e,bv){if(arguments.length===2&&bv===L){return this}return b.access(this,e,bv,true,function(bx,bw,by){return by!==L?b.style(bx,bw,by):b.css(bx,bw)})};b.extend({cssHooks:{opacity:{get:function(bw,bv){if(bv){var e=Z(bw,\"opacity\",\"opacity\");return e===\"\"?\"1\":e}else{return bw.style.opacity}}}},cssNumber:{fillOpacity:true,fontWeight:true,lineHeight:true,opacity:true,orphans:true,widows:true,zIndex:true,zoom:true},cssProps:{\"float\":b.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(bx,bw,bD,by){if(!bx||bx.nodeType===3||bx.nodeType===8||!bx.style){return}var bB,bC,bz=b.camelCase(bw),bv=bx.style,bE=b.cssHooks[bz];bw=b.cssProps[bz]||bz;if(bD!==L){bC=typeof bD;if(bC===\"string\"&&(bB=I.exec(bD))){bD=(+(bB[1]+1)*+bB[2])+parseFloat(b.css(bx,bw));bC=\"number\"}if(bD==null||bC===\"number\"&&isNaN(bD)){return}if(bC===\"number\"&&!b.cssNumber[bz]){bD+=\"px\"}if(!bE||!(\"set\" in bE)||(bD=bE.set(bx,bD))!==L){try{bv[bw]=bD}catch(bA){}}}else{if(bE&&\"get\" in bE&&(bB=bE.get(bx,false,by))!==L){return bB}return bv[bw]}},css:function(by,bx,bv){var bw,e;bx=b.camelCase(bx);e=b.cssHooks[bx];bx=b.cssProps[bx]||bx;if(bx===\"cssFloat\"){bx=\"float\"}if(e&&\"get\" in e&&(bw=e.get(by,true,bv))!==L){return bw}else{if(Z){return Z(by,bx)}}},swap:function(bx,bw,by){var e={};for(var bv in bw){e[bv]=bx.style[bv];bx.style[bv]=bw[bv]}by.call(bx);for(bv in bw){bx.style[bv]=e[bv]}}});b.curCSS=b.css;b.each([\"height\",\"width\"],function(bv,e){b.cssHooks[e]={get:function(by,bx,bw){var bz;if(bx){if(by.offsetWidth!==0){return p(by,e,bw)}else{b.swap(by,a7,function(){bz=p(by,e,bw)})}return bz}},set:function(bw,bx){if(bc.test(bx)){bx=parseFloat(bx);if(bx>=0){return bx+\"px\"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||\"\")?(parseFloat(RegExp.$1)/100)+\"\":e?\"1\":\"\"},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?\"alpha(opacity=\"+bz*100+\")\":\"\",bw=bv&&bv.filter||bx.filter||\"\";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,\"\"))===\"\"){bx.removeAttribute(\"filter\");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+\" \"+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:\"inline-block\"},function(){if(bv){e=Z(bw,\"margin-right\",\"marginRight\")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,\"-$1\").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===\"\"&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw===\"fontSize\"?\"1em\":(bv||0);bv=bx.pixelLeft+\"px\";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===\"\"?\"auto\":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw===\"width\"?by.offsetWidth:by.offsetHeight,bz=bw===\"width\"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!==\"border\"){for(;bx<e;bx++){if(!bv){bA-=parseFloat(b.css(by,\"padding\"+bz[bx]))||0}if(bv===\"margin\"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}else{bA-=parseFloat(b.css(by,\"border\"+bz[bx]+\"Width\"))||0}}}return bA+\"px\"}bA=Z(by,bw,bw);if(bA<0||bA==null){bA=by.style[bw]||0}bA=parseFloat(bA)||0;if(bv){for(;bx<e;bx++){bA+=parseFloat(b.css(by,\"padding\"+bz[bx]))||0;if(bv!==\"padding\"){bA+=parseFloat(b.css(by,\"border\"+bz[bx]+\"Width\"))||0}if(bv===\"margin\"){bA+=parseFloat(b.css(by,bv+bz[bx]))||0}}}return bA+\"px\"}if(b.expr&&b.expr.filters){b.expr.filters.hidden=function(bw){var bv=bw.offsetWidth,e=bw.offsetHeight;return(bv===0&&e===0)||(!b.support.reliableHiddenOffsets&&((bw.style&&bw.style.display)||b.css(bw,\"display\"))===\"none\")};b.expr.filters.visible=function(e){return !b.expr.filters.hidden(e)}}var k=/%20/g,ap=/\\[\\]$/,bs=/\\r?\\n/g,bq=/#.*$/,aD=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,aZ=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,aM=/^(?:about|app|app\\-storage|.+\\-extension|file|res|widget):$/,aQ=/^(?:GET|HEAD)$/,c=/^\\/\\//,M=/\\?/,a6=/<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,q=/^(?:select|textarea)/i,h=/\\s+/,br=/([?&])_=[^&]*/,K=/^([\\w\\+\\.\\-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=[\"*/\"]+[\"*\"];try{aE=bl.href}catch(aw){aE=av.createElement(\"a\");aE.href=\"\";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!==\"string\"){bA=by;by=\"*\"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw<bz;bw++){bv=bx[bw];bC=/^\\+/.test(bv);if(bC){bv=bv.substr(1)||\"*\"}bB=e[bv]=e[bv]||[];bB[bC?\"unshift\":\"push\"](bA)}}}}function aW(bv,bE,bz,bD,bB,bx){bB=bB||bE.dataTypes[0];bx=bx||{};bx[bB]=true;var bA=bv[bB],bw=0,e=bA?bA.length:0,by=(bv===aa),bC;for(;bw<e&&(by||!bC);bw++){bC=bA[bw](bE,bz,bD);if(typeof bC===\"string\"){if(!by||bx[bC]){bC=L}else{bE.dataTypes.unshift(bC);bC=aW(bv,bE,bz,bD,bC,bx)}}}if((by||!bC)&&!bx[\"*\"]){bC=aW(bv,bE,bz,bD,\"*\",bx)}return bC}function am(bw,bx){var bv,e,by=b.ajaxSettings.flatOptions||{};for(bv in bx){if(bx[bv]!==L){(by[bv]?bw:(e||(e={})))[bv]=bx[bv]}}if(e){b.extend(true,bw,e)}}b.fn.extend({load:function(bw,bz,bA){if(typeof bw!==\"string\"&&A){return A.apply(this,arguments)}else{if(!this.length){return this}}var by=bw.indexOf(\" \");if(by>=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx=\"GET\";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz===\"object\"){bz=b.param(bz,b.ajaxSettings.traditional);bx=\"POST\"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:\"html\",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b(\"<div>\").append(bD.replace(a6,\"\")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,\"\\r\\n\")}}):{name:bv.name,value:bw.replace(bs,\"\\r\\n\")}}).get()}});b.each(\"ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend\".split(\" \"),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each([\"get\",\"post\"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,\"script\")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,\"json\")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:\"GET\",contentType:\"application/x-www-form-urlencoded\",processData:true,async:true,accepts:{xml:\"application/xml, text/xml\",html:\"text/html\",text:\"text/plain\",json:\"application/json, text/javascript\",\"*\":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\"},converters:{\"* text\":bb.String,\"text html\":true,\"text json\":b.parseJSON,\"text xml\":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz===\"object\"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks(\"once memory\"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||\"abort\";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||\"\";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader(\"Last-Modified\"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader(\"Etag\"))){b.etag[bC]=b2}}if(bZ===304){bX=\"notmodified\";bT=true}else{try{b4=G(bD,bY);bX=\"success\";bT=true}catch(b1){bX=\"parsererror\";b3=b1}}}else{b3=bX;if(!bX||bZ){bX=\"error\";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=\"\"+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger(\"ajax\"+(bT?\"Success\":\"Error\"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger(\"ajaxComplete\",[bJ,bD]);if(!(--b.active)){b.event.trigger(\"ajaxStop\")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+\"\").replace(bq,\"\").replace(c,s[1]+\"//\");bD.dataTypes=b.trim(bD.dataType||\"*\").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]===\"http:\"?80:443))!=(s[3]||(s[1]===\"http:\"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!==\"string\"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger(\"ajaxStart\")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?\"&\":\"?\")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,\"$1_=\"+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?\"&\":\"?\")+\"_=\"+bv:\"\")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader(\"Content-Type\",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader(\"If-Modified-Since\",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader(\"If-None-Match\",b.etag[bC])}}bJ.setRequestHeader(\"Accept\",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!==\"*\"?\", \"+aV+\"; q=0.01\":\"\"):bD.accepts[\"*\"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,\"No Transport\")}else{bJ.readyState=1;if(bw){bG.trigger(\"ajaxSend\",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort(\"timeout\")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+\"=\"+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join(\"&\").replace(k,\"+\")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+\"[\"+(typeof bz===\"object\"||b.isArray(bz)?bA:\"\")+\"]\",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by===\"object\"){for(var e in by){v(bw+\"[\"+e+\"]\",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]===\"*\"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader(\"content-type\")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+\" \"+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA<bw;bA++){if(bA===1){for(bE in bH.converters){if(typeof bE===\"string\"){bG[bE.toLowerCase()]=bH.converters[bE]}}}bx=bC;bC=bD[bA];if(bC===\"*\"){bC=bx}else{if(bx!==\"*\"&&bx!==bC){by=bx+\" \"+bC;bF=bG[by]||bG[\"* \"+bC];if(!bF){e=L;for(bv in bG){bB=bv.split(\" \");if(bB[0]===bx||bB[0]===\"*\"){e=bG[bB[1]+\" \"+bC];if(e){bv=bG[bv];if(bv===true){bF=e}else{if(e===true){bF=bv}}break}}}}if(!(bF||e)){b.error(\"No conversion from \"+by.replace(\" \",\" to \"))}if(bF!==true){bz=bF?bF(bz):e(bv(bz))}}}}return bz}var aC=b.now(),u=/(\\=)\\?(&|$)|\\?\\?/i;b.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){return b.expando+\"_\"+(aC++)}});b.ajaxPrefilter(\"json jsonp\",function(bD,bA,bC){var bx=bD.contentType===\"application/x-www-form-urlencoded\"&&(typeof bD.data===\"string\");if(bD.dataTypes[0]===\"jsonp\"||bD.jsonp!==false&&(u.test(bD.url)||bx&&u.test(bD.data))){var bB,bw=bD.jsonpCallback=b.isFunction(bD.jsonpCallback)?bD.jsonpCallback():bD.jsonpCallback,bz=bb[bw],e=bD.url,by=bD.data,bv=\"$1\"+bw+\"$2\";if(bD.jsonp!==false){e=e.replace(u,bv);if(bD.url===e){if(bx){by=by.replace(u,bv)}if(bD.data===by){e+=(/\\?/.test(e)?\"&\":\"?\")+bD.jsonp+\"=\"+bw}}}bD.url=e;bD.data=by;bb[bw]=function(bE){bB=[bE]};bC.always(function(){bb[bw]=bz;if(bB&&b.isFunction(bz)){bb[bw](bB[0])}});bD.converters[\"script json\"]=function(){if(!bB){b.error(bw+\" was not called\")}return bB[0]};bD.dataTypes[0]=\"json\";return\"script\"}});b.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/javascript|ecmascript/},converters:{\"text script\":function(e){b.globalEval(e);return e}}});b.ajaxPrefilter(\"script\",function(e){if(e.cache===L){e.cache=false}if(e.crossDomain){e.type=\"GET\";e.global=false}});b.ajaxTransport(\"script\",function(bw){if(bw.crossDomain){var e,bv=av.head||av.getElementsByTagName(\"head\")[0]||av.documentElement;return{send:function(bx,by){e=av.createElement(\"script\");e.async=\"async\";if(bw.scriptCharset){e.charset=bw.scriptCharset}e.src=bw.url;e.onload=e.onreadystatechange=function(bA,bz){if(bz||!e.readyState||/loaded|complete/.test(e.readyState)){e.onload=e.onreadystatechange=null;if(bv&&e.parentNode){bv.removeChild(e)}e=L;if(!bz){by(200,\"success\")}}};bv.insertBefore(e,bv.firstChild)},abort:function(){if(e){e.onload(0,1)}}}}});var B=bb.ActiveXObject?function(){for(var e in N){N[e](0,1)}}:false,y=0,N;function aL(){try{return new bb.XMLHttpRequest()}catch(bv){}}function aj(){try{return new bb.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(bv){}}b.ajaxSettings.xhr=bb.ActiveXObject?function(){return !this.isLocal&&aL()||aj()}:aL;(function(e){b.extend(b.support,{ajax:!!e,cors:!!e&&(\"withCredentials\" in e)})})(b.ajaxSettings.xhr());if(b.support.ajax){b.ajaxTransport(function(e){if(!e.crossDomain||b.support.cors){var bv;return{send:function(bB,bw){var bA=e.xhr(),bz,by;if(e.username){bA.open(e.type,e.url,e.async,e.username,e.password)}else{bA.open(e.type,e.url,e.async)}if(e.xhrFields){for(by in e.xhrFields){bA[by]=e.xhrFields[by]}}if(e.mimeType&&bA.overrideMimeType){bA.overrideMimeType(e.mimeType)}if(!e.crossDomain&&!bB[\"X-Requested-With\"]){bB[\"X-Requested-With\"]=\"XMLHttpRequest\"}try{for(by in bB){bA.setRequestHeader(by,bB[by])}}catch(bx){}bA.send((e.hasContent&&e.data)||null);bv=function(bK,bE){var bF,bD,bC,bI,bH;try{if(bv&&(bE||bA.readyState===4)){bv=L;if(bz){bA.onreadystatechange=b.noop;if(B){delete N[bz]}}if(bE){if(bA.readyState!==4){bA.abort()}}else{bF=bA.status;bC=bA.getAllResponseHeaders();bI={};bH=bA.responseXML;if(bH&&bH.documentElement){bI.xml=bH}bI.text=bA.responseText;try{bD=bA.statusText}catch(bJ){bD=\"\"}if(!bF&&e.isLocal&&!e.crossDomain){bF=bI.text?200:404}else{if(bF===1223){bF=204}}}}}catch(bG){if(!bE){bw(-1,bG)}}if(bI){bw(bF,bD,bI,bC)}};if(!e.async||bA.readyState===4){bv()}else{bz=++y;if(B){if(!N){N={};b(bb).unload(B)}N[bz]=bv}bA.onreadystatechange=bv}},abort:function(){if(bv){bv(0,1)}}}}})}var Q={},a8,m,aB=/^(?:toggle|show|hide)$/,aT=/^([+\\-]=)?([\\d+.\\-]+)([a-z%]*)$/i,a3,aH=[[\"height\",\"marginTop\",\"marginBottom\",\"paddingTop\",\"paddingBottom\"],[\"width\",\"marginLeft\",\"marginRight\",\"paddingLeft\",\"paddingRight\"],[\"opacity\"]],a4;b.fn.extend({show:function(bx,bA,bz){var bw,by;if(bx||bx===0){return this.animate(a0(\"show\",3),bx,bA,bz)}else{for(var bv=0,e=this.length;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(!b._data(bw,\"olddisplay\")&&by===\"none\"){by=bw.style.display=\"\"}if(by===\"\"&&b.css(bw,\"display\")===\"none\"){b._data(bw,\"olddisplay\",x(bw.nodeName))}}}for(bv=0;bv<e;bv++){bw=this[bv];if(bw.style){by=bw.style.display;if(by===\"\"||by===\"none\"){bw.style.display=b._data(bw,\"olddisplay\")||\"\"}}}return this}},hide:function(bx,bA,bz){if(bx||bx===0){return this.animate(a0(\"hide\",3),bx,bA,bz)}else{var bw,by,bv=0,e=this.length;for(;bv<e;bv++){bw=this[bv];if(bw.style){by=b.css(bw,\"display\");if(by!==\"none\"&&!b._data(bw,\"olddisplay\")){b._data(bw,\"olddisplay\",by)}}}for(bv=0;bv<e;bv++){if(this[bv].style){this[bv].style.display=\"none\"}}return this}},_toggle:b.fn.toggle,toggle:function(bw,bv,bx){var e=typeof bw===\"boolean\";if(b.isFunction(bw)&&b.isFunction(bv)){this._toggle.apply(this,arguments)}else{if(bw==null||e){this.each(function(){var by=e?bw:b(this).is(\":hidden\");b(this)[by?\"show\":\"hide\"]()})}else{this.animate(a0(\"toggle\",3),bw,bv,bx)}}return this},fadeTo:function(e,bx,bw,bv){return this.filter(\":hidden\").css(\"opacity\",0).show().end().animate({opacity:bx},e,bw,bv)},animate:function(bz,bw,by,bx){var e=b.speed(bw,by,bx);if(b.isEmptyObject(bz)){return this.each(e.complete,[false])}bz=b.extend({},bz);function bv(){if(e.queue===false){b._mark(this)}var bE=b.extend({},e),bK=this.nodeType===1,bI=bK&&b(this).is(\":hidden\"),bB,bF,bD,bJ,bH,bC,bG,bL,bA;bE.animatedProperties={};for(bD in bz){bB=b.camelCase(bD);if(bD!==bB){bz[bB]=bz[bD];delete bz[bD]}bF=bz[bB];if(b.isArray(bF)){bE.animatedProperties[bB]=bF[1];bF=bz[bB]=bF[0]}else{bE.animatedProperties[bB]=bE.specialEasing&&bE.specialEasing[bB]||bE.easing||\"swing\"}if(bF===\"hide\"&&bI||bF===\"show\"&&!bI){return bE.complete.call(this)}if(bK&&(bB===\"height\"||bB===\"width\")){bE.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(b.css(this,\"display\")===\"inline\"&&b.css(this,\"float\")===\"none\"){if(!b.support.inlineBlockNeedsLayout||x(this.nodeName)===\"inline\"){this.style.display=\"inline-block\"}else{this.style.zoom=1}}}}if(bE.overflow!=null){this.style.overflow=\"hidden\"}for(bD in bz){bJ=new b.fx(this,bE,bD);bF=bz[bD];if(aB.test(bF)){bA=b._data(this,\"toggle\"+bD)||(bF===\"toggle\"?bI?\"show\":\"hide\":0);if(bA){b._data(this,\"toggle\"+bD,bA===\"show\"?\"hide\":\"show\");bJ[bA]()}else{bJ[bF]()}}else{bH=aT.exec(bF);bC=bJ.cur();if(bH){bG=parseFloat(bH[2]);bL=bH[3]||(b.cssNumber[bD]?\"\":\"px\");if(bL!==\"px\"){b.style(this,bD,(bG||1)+bL);bC=((bG||1)/bJ.cur())*bC;b.style(this,bD,bC+bL)}if(bH[1]){bG=((bH[1]===\"-=\"?-1:1)*bG)+bC}bJ.custom(bC,bG,bL)}else{bJ.custom(bC,bF,\"\")}}}return true}return e.queue===false?this.each(bv):this.queue(e.queue,bv)},stop:function(bw,bv,e){if(typeof bw!==\"string\"){e=bv;bv=bw;bw=L}if(bv&&bw!==false){this.queue(bw||\"fx\",[])}return this.each(function(){var bx,by=false,bA=b.timers,bz=b._data(this);if(!e){b._unmark(true,this)}function bB(bE,bF,bD){var bC=bF[bD];b.removeData(bE,bD,true);bC.stop(e)}if(bw==null){for(bx in bz){if(bz[bx]&&bz[bx].stop&&bx.indexOf(\".run\")===bx.length-4){bB(this,bz,bx)}}}else{if(bz[bx=bw+\".run\"]&&bz[bx].stop){bB(this,bz,bx)}}for(bx=bA.length;bx--;){if(bA[bx].elem===this&&(bw==null||bA[bx].queue===bw)){if(e){bA[bx](true)}else{bA[bx].saveState()}by=true;bA.splice(bx,1)}}if(!(e&&by)){b.dequeue(this,bw)}})}});function bh(){setTimeout(at,0);return(a4=b.now())}function at(){a4=L}function a0(bv,e){var bw={};b.each(aH.concat.apply([],aH.slice(0,e)),function(){bw[this]=bv});return bw}b.each({slideDown:a0(\"show\",1),slideUp:a0(\"hide\",1),slideToggle:a0(\"toggle\",1),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,bv){b.fn[e]=function(bw,by,bx){return this.animate(bv,bw,by,bx)}});b.extend({speed:function(bw,bx,bv){var e=bw&&typeof bw===\"object\"?b.extend({},bw):{complete:bv||!bv&&bx||b.isFunction(bw)&&bw,duration:bw,easing:bv&&bx||bx&&!b.isFunction(bx)&&bx};e.duration=b.fx.off?0:typeof e.duration===\"number\"?e.duration:e.duration in b.fx.speeds?b.fx.speeds[e.duration]:b.fx.speeds._default;if(e.queue==null||e.queue===true){e.queue=\"fx\"}e.old=e.complete;e.complete=function(by){if(b.isFunction(e.old)){e.old.call(this)}if(e.queue){b.dequeue(this,e.queue)}else{if(by!==false){b._unmark(this)}}};return e},easing:{linear:function(bw,bx,e,bv){return e+bv*bw},swing:function(bw,bx,e,bv){return((-Math.cos(bw*Math.PI)/2)+0.5)*bv+e}},timers:[],fx:function(bv,e,bw){this.options=e;this.elem=bv;this.prop=bw;e.orig=e.orig||{}}});b.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(b.fx.step[this.prop]||b.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var e,bv=b.css(this.elem,this.prop);return isNaN(e=parseFloat(bv))?!bv||bv===\"auto\"?0:bv:e},custom:function(bz,by,bx){var e=this,bw=b.fx;this.startTime=a4||bh();this.end=by;this.now=this.start=bz;this.pos=this.state=0;this.unit=bx||this.unit||(b.cssNumber[this.prop]?\"\":\"px\");function bv(bA){return e.step(bA)}bv.queue=this.options.queue;bv.elem=this.elem;bv.saveState=function(){if(e.options.hide&&b._data(e.elem,\"fxshow\"+e.prop)===L){b._data(e.elem,\"fxshow\"+e.prop,e.start)}};if(bv()&&b.timers.push(bv)&&!a3){a3=setInterval(bw.tick,bw.interval)}},show:function(){var e=b._data(this.elem,\"fxshow\"+this.prop);this.options.orig[this.prop]=e||b.style(this.elem,this.prop);this.options.show=true;if(e!==L){this.custom(this.cur(),e)}else{this.custom(this.prop===\"width\"||this.prop===\"height\"?1:0,this.cur())}b(this.elem).show()},hide:function(){this.options.orig[this.prop]=b._data(this.elem,\"fxshow\"+this.prop)||b.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(by){var bA,bB,bv,bx=a4||bh(),e=true,bz=this.elem,bw=this.options;if(by||bx>=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each([\"\",\"X\",\"Y\"],function(bC,bD){bz.style[\"overflow\"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,\"fxshow\"+bA,true);b.removeData(bz,\"toggle\"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e<bv.length;e++){bw=bv[e];if(!bw()&&bv[e]===bw){bv.splice(e--,1)}}if(!bv.length){b.fx.stop()}},interval:13,stop:function(){clearInterval(a3);a3=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(e){b.style(e.elem,\"opacity\",e.now)},_default:function(e){if(e.elem.style&&e.elem.style[e.prop]!=null){e.elem.style[e.prop]=e.now+e.unit}else{e.elem[e.prop]=e.now}}}});b.each([\"width\",\"height\"],function(e,bv){b.fx.step[bv]=function(bw){b.style(bw.elem,bv,Math.max(0,bw.now)+bw.unit)}});if(b.expr&&b.expr.filters){b.expr.filters.animated=function(e){return b.grep(b.timers,function(bv){return e===bv.elem}).length}}function x(bx){if(!Q[bx]){var e=av.body,bv=b(\"<\"+bx+\">\").appendTo(e),bw=bv.css(\"display\");bv.remove();if(bw===\"none\"||bw===\"\"){if(!a8){a8=av.createElement(\"iframe\");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode===\"CSS1Compat\"?\"<!doctype html>\":\"\")+\"<html><body>\");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,\"display\");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if(\"getBoundingClientRect\" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position===\"fixed\"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!==\"visible\"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position===\"relative\"||e.position===\"static\"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position===\"fixed\"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,\"marginTop\"))||0;bv+=parseFloat(b.css(e,\"marginLeft\"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,\"position\");if(bB===\"static\"){bx.style.position=\"relative\"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,\"top\"),bE=b.css(bx,\"left\"),bF=(bB===\"absolute\"||bB===\"fixed\")&&b.inArray(\"auto\",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if(\"using\" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,\"marginTop\"))||0;bx.left-=parseFloat(b.css(bw,\"marginLeft\"))||0;e.top+=parseFloat(b.css(bv[0],\"borderTopWidth\"))||0;e.left+=parseFloat(b.css(bv[0],\"borderLeftWidth\"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,\"position\")===\"static\")){e=e.offsetParent}return e})}});b.each([\"Left\",\"Top\"],function(bv,e){var bw=\"scroll\"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?(\"pageXOffset\" in by)?by[bv?\"pageYOffset\":\"pageXOffset\"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each([\"Height\",\"Width\"],function(bv,e){var bw=e.toLowerCase();b.fn[\"inner\"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,\"padding\")):this[bw]():null};b.fn[\"outer\"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?\"margin\":\"border\")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement[\"client\"+e],bx=bA.document.body;return bA.document.compatMode===\"CSS1Compat\"&&bB||bx&&bx[\"client\"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement[\"client\"+e],bA.body[\"scroll\"+e],bA.documentElement[\"scroll\"+e],bA.body[\"offset\"+e],bA.documentElement[\"offset\"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz===\"string\"?bz:bz+\"px\")}}}}});bb.jQuery=bb.$=b;if(typeof define===\"function\"&&define.amd&&define.amd.jQuery){define(\"jquery\",[],function(){return b})}})(window);/*!\n * jQuery UI 1.8.18\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI\n */\n(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:\"1.8.18\",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e===\"number\"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css(\"position\")))||(/absolute/).test(this.css(\"position\"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,\"position\",1))&&(/(auto|scroll)/).test(a.curCSS(this,\"overflow\",1)+a.curCSS(this,\"overflow-y\",1)+a.curCSS(this,\"overflow-x\",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,\"overflow\",1)+a.curCSS(this,\"overflow-y\",1)+a.curCSS(this,\"overflow-x\",1))}).eq(0)}return(/fixed/).test(this.css(\"position\"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css(\"zIndex\",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css(\"position\");if(e===\"absolute\"||e===\"relative\"||e===\"fixed\"){g=parseInt(f.css(\"zIndex\"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?\"selectstart\":\"mousedown\")+\".ui-disableSelection\",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(\".ui-disableSelection\")}});a.each([\"Width\",\"Height\"],function(g,e){var f=e===\"Width\"?[\"Left\",\"Right\"]:[\"Top\",\"Bottom\"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,\"padding\"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,\"border\"+this+\"Width\",true))||0}if(n){l-=parseFloat(a.curCSS(m,\"margin\"+this,true))||0}});return l}a.fn[\"inner\"+e]=function(i){if(i===d){return k[\"inner\"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+\"px\")})};a.fn[\"outer\"+e]=function(i,l){if(typeof i!==\"number\"){return k[\"outer\"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+\"px\")})}});function c(g,e){var j=g.nodeName.toLowerCase();if(\"area\"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!==\"map\"){return false}f=a(\"img[usemap=#\"+h+\"]\")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:\"a\"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,\"visibility\")===\"hidden\"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[\":\"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,\"tabindex\")))},tabbable:function(g){var e=a.attr(g,\"tabindex\"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement(\"div\"));f.offsetHeight;a.extend(f.style,{minHeight:\"100px\",height:\"auto\",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart=\"onselectstart\" in f;e.removeChild(f).style.display=\"none\"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h<j.length;h++){if(e.options[j[h][0]]){j[h][1].apply(e.element,f)}}}},contains:function(f,e){return document.compareDocumentPosition?f.compareDocumentPosition(e)&16:f!==e&&f.contains(e)},hasScroll:function(h,f){if(a(h).css(\"overflow\")===\"hidden\"){return false}var e=(f&&f===\"left\")?\"scrollLeft\":\"scrollTop\",g=false;if(h[e]>0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*!\n * jQuery UI Widget 1.8.18\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Widget\n */\n(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler(\"remove\")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b(\"*\",this).add([this]).each(function(){try{b(this).triggerHandler(\"remove\")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(\".\")[0],j;f=f.split(\".\")[1];j=g+\"-\"+f;if(!e){e=h;h=b.Widget}b.expr[\":\"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i===\"string\",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)===\"_\"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:\"widget\",widgetEventPrefix:\"\",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind(\"remove.\"+this.widgetName,function(){e.destroy()});this._create();this._trigger(\"create\");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind(\".\"+this.widgetName).removeData(this.widgetName);this.widget().unbind(\".\"+this.widgetName).removeAttr(\"aria-disabled\").removeClass(this.widgetBaseClass+\"-disabled ui-state-disabled\")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f===\"string\"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e===\"disabled\"){this.widget()[f?\"addClass\":\"removeClass\"](this.widgetBaseClass+\"-disabled ui-state-disabled\").attr(\"aria-disabled\",f)}return this},enable:function(){return this._setOption(\"disabled\",false)},disable:function(){return this._setOption(\"disabled\",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*!\n * jQuery UI Mouse 1.8.18\n *\n * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)\n * Dual licensed under the MIT or GPL Version 2 licenses.\n * http://jquery.org/license\n *\n * http://docs.jquery.com/UI/Mouse\n *\n * Depends:\n *\tjquery.ui.widget.js\n */\n(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget(\"ui.mouse\",{options:{cancel:\":input,option\",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind(\"mousedown.\"+this.widgetName,function(e){return d._mouseDown(e)}).bind(\"click.\"+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+\".preventClickEvent\")){b.removeData(e.target,d.widgetName+\".preventClickEvent\");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind(\".\"+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel==\"string\"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+\".preventClickEvent\")){b.removeData(f.target,this.widgetName+\".preventClickEvent\")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).bind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind(\"mousemove.\"+this.widgetName,this._mouseMoveDelegate).unbind(\"mouseup.\"+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+\".preventClickEvent\",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget(\"ui.resizable\",c.ui.mouse,{widgetEventPrefix:\"resize\",options:{alsoResize:false,animate:false,animateDuration:\"slow\",animateEasing:\"swing\",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:\"e,s,se\",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass(\"ui-resizable\");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||\"ui-resizable-helper\":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('<div class=\"ui-wrapper\" style=\"overflow: hidden;\"></div>').css({position:this.element.css(\"position\"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css(\"top\"),left:this.element.css(\"left\")}));this.element=this.element.parent().data(\"resizable\",this.element.data(\"resizable\"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css(\"marginLeft\"),marginTop:this.originalElement.css(\"marginTop\"),marginRight:this.originalElement.css(\"marginRight\"),marginBottom:this.originalElement.css(\"marginBottom\")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css(\"resize\");this.originalElement.css(\"resize\",\"none\");this._proportionallyResizeElements.push(this.originalElement.css({position:\"static\",zoom:1,display:\"block\"}));this.originalElement.css({margin:this.originalElement.css(\"margin\")});this._proportionallyResize()}this.handles=k.handles||(!c(\".ui-resizable-handle\",this.element).length?\"e,s,se\":{n:\".ui-resizable-n\",e:\".ui-resizable-e\",s:\".ui-resizable-s\",w:\".ui-resizable-w\",se:\".ui-resizable-se\",sw:\".ui-resizable-sw\",ne:\".ui-resizable-ne\",nw:\".ui-resizable-nw\"});if(this.handles.constructor==String){if(this.handles==\"all\"){this.handles=\"n,e,s,w,se,sw,ne,nw\"}var l=this.handles.split(\",\");this.handles={};for(var g=0;g<l.length;g++){var j=c.trim(l[g]),e=\"ui-resizable-\"+j;var h=c('<div class=\"ui-resizable-handle '+e+'\"></div>');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if(\"se\"==j){h.addClass(\"ui-icon ui-icon-gripsmall-diagonal-se\")}this.handles[j]=\".ui-resizable-\"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=[\"padding\",/ne|nw|n/.test(n)?\"Top\":/se|sw|s/.test(n)?\"Bottom\":/^e$/.test(n)?\"Right\":\"Left\"].join(\"\");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(\".ui-resizable-handle\",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:\"se\"}});if(k.autoHide){this._handles.hide();c(this.element).addClass(\"ui-resizable-autohide\").hover(function(){if(k.disabled){return}c(this).removeClass(\"ui-resizable-autohide\");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass(\"ui-resizable-autohide\");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass(\"ui-resizable ui-resizable-disabled ui-resizable-resizing\").removeData(\"resizable\").unbind(\".resizable\").find(\".ui-resizable-handle\").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css(\"position\"),width:f.outerWidth(),height:f.outerHeight(),top:f.css(\"top\"),left:f.css(\"left\")})).remove()}this.originalElement.css(\"resize\",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(\".ui-draggable\")||(/absolute/).test(e.css(\"position\"))){e.css({position:\"absolute\",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css(\"left\")),h=b(this.helper.css(\"top\"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio==\"number\")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(\".ui-resizable-\"+this.axis).css(\"cursor\");c(\"body\").css(\"cursor\",i==\"auto\"?this.axis+\"-resize\":i);e.addClass(\"ui-resizable-resizing\");this._propagate(\"start\",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate(\"resize\",e);h.css({top:this.position.top+\"px\",left:this.position.left+\"px\",width:this.size.width+\"px\",height:this.size.height+\"px\"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger(\"resize\",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],\"left\")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css(\"left\"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css(\"top\"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c(\"body\").css(\"cursor\",\"auto\");this.element.removeClass(\"ui-resizable-resizing\");this._propagate(\"stop\",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(h<e.maxWidth){e.maxWidth=h}if(k<e.maxHeight){e.maxHeight=k}}this._vBoundaries=e},_updateCache:function(e){var f=this.options;this.offset=this.helper.offset();if(a(e.left)){this.position.left=e.left}if(a(e.top)){this.position.top=e.top}if(a(e.height)){this.size.height=e.height}if(a(e.width)){this.size.width=e.width}},_updateRatio:function(h,g){var i=this.options,j=this.position,f=this.size,e=this.axis;if(a(h.height)){h.width=(h.height*this.aspectRatio)}else{if(a(h.width)){h.height=(h.width/this.aspectRatio)}}if(e==\"sw\"){h.left=j.left+(f.width-h.width);h.top=null}if(e==\"nw\"){h.top=j.top+(f.height-h.height);h.left=j.left+(f.width-h.width)}return h},_respectSize:function(l,g){var j=this.helper,i=this._vBoundaries,r=this._aspectRatio||g.shiftKey,q=this.axis,t=a(l.width)&&i.maxWidth&&(i.maxWidth<l.width),m=a(l.height)&&i.maxHeight&&(i.maxHeight<l.height),h=a(l.width)&&i.minWidth&&(i.minWidth>l.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f<this._proportionallyResizeElements.length;f++){var h=this._proportionallyResizeElements[f];if(!this.borderDif){var e=[h.css(\"borderTopWidth\"),h.css(\"borderRightWidth\"),h.css(\"borderBottomWidth\"),h.css(\"borderLeftWidth\")],j=[h.css(\"paddingTop\"),h.css(\"paddingRight\"),h.css(\"paddingBottom\"),h.css(\"paddingLeft\")];this.borderDif=c.map(e,function(l,n){var m=parseInt(l,10)||0,o=parseInt(j[n],10)||0;return m+o})}if(c.browser.msie&&!(!(c(g).is(\":hidden\")||c(g).parents(\":hidden\").length))){continue}h.css({height:(g.height()-this.borderDif[0]-this.borderDif[2])||0,width:(g.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var f=this.element,i=this.options;this.elementOffset=f.offset();if(this._helper){this.helper=this.helper||c('<div style=\"overflow:hidden;\"></div>');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:\"absolute\",left:this.elementOffset.left-g+\"px\",top:this.elementOffset.top-g+\"px\",zIndex:++i.zIndex});this.helper.appendTo(\"body\").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!=\"resize\"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:\"1.8.18\"});c.ui.plugin.add(\"resizable\",\"alsoResize\",{start:function(f,g){var e=c(this).data(\"resizable\"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data(\"resizable-alsoresize\",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css(\"left\"),10),top:parseInt(k.css(\"top\"),10)})})};if(typeof(i.alsoResize)==\"object\"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data(\"resizable\"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data(\"resizable-alsoresize\"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?[\"width\",\"height\"]:[\"width\",\"height\",\"top\",\"left\"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)==\"object\"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData(\"resizable-alsoresize\")}});c.ui.plugin.add(\"resizable\",\"animate\",{stop:function(i,n){var p=c(this).data(\"resizable\"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],\"left\")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css(\"left\"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css(\"top\"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css(\"width\"),10),height:parseInt(p.element.css(\"height\"),10),top:parseInt(p.element.css(\"top\"),10),left:parseInt(p.element.css(\"left\"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate(\"resize\",i)}})}});c.ui.plugin.add(\"resizable\",\"containment\",{start:function(f,r){var t=c(this).data(\"resizable\"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c([\"Top\",\"Right\",\"Left\",\"Bottom\"]).each(function(p,o){i[p]=b(n.css(\"padding\"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,\"left\")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data(\"resizable\"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css(\"position\"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css(\"position\"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data(\"resizable\"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css(\"position\"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css(\"position\"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add(\"resizable\",\"ghost\",{start:function(g,h){var e=c(this).data(\"resizable\"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:\"block\",position:\"relative\",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass(\"ui-resizable-ghost\").addClass(typeof i.ghost==\"string\"?i.ghost:\"\");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data(\"resizable\"),h=e.options;if(e.ghost){e.ghost.css({position:\"relative\",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data(\"resizable\"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add(\"resizable\",\"grid\",{resize:function(e,m){var p=c(this).data(\"resizable\"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid==\"number\"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*!\n * jQuery hashchange event - v1.3 - 7/21/2010\n * http://benalman.com/projects/jquery-hashchange-plugin/\n * \n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n */\n(function($,e,b){var c=\"hashchange\",h=document,f,g=$.event.special,i=h.documentMode,d=\"on\"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return\"#\"+j.replace(/^[^#]*#?(.*)$/,\"$1\")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,\"\")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$('<iframe tabindex=\"-1\" title=\"empty\"/>').hide().one(\"load\",function(){r||l(a());n()}).attr(\"src\",r||\"javascript:0\").insertAfter(\"body\")[0].contentWindow;h.onpropertychange=function(){try{if(event.propertyName===\"title\"){q.document.title=h.title}}catch(s){}}}};j.stop=k;o=function(){return a(q.location.href)};l=function(v,s){var u=q.document,t=$.fn[c].domain;if(v!==s){u.title=h.title;u.open();t&&u.write('<script>document.domain=\"'+t+'\"<\\/script>');u.close();q.location.hash=v}}})();return j})()})(jQuery,this);(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:\"xy\",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),[\"iframe\",\"#document\",\"html\",\"body\"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode==\"BackCompat\"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e==\"object\"){d=e;e=0}if(typeof d==\"function\"){d={onAfter:d}}if(f==\"max\"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is(\"html,body\");switch(typeof k){case\"number\":case\"string\":if(/^([+-]=)?\\d+(\\.\\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case\"object\":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(\"\"),function(q,r){var s=r==\"x\"?\"Left\":\"Top\",u=s.toLowerCase(),p=\"scroll\"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css(\"margin\"+s))||0;g[p]-=parseInt(k.css(\"border\"+s+\"Width\"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r==\"x\"?\"width\":\"height\"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)==\"%\"?parseFloat(t)/100*n:t}if(/^\\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i==\"x\"?\"Width\":\"Height\",e=\"scroll\"+h;if(!c(j).is(\"html,body\")){return j[e]-c(j)[h.toLowerCase()]()}var g=\"client\"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d==\"object\"?d:{top:d,left:d}}})(jQuery);/*!\n PowerTip - v1.2.0 - 2013-04-03\n http://stevenbenner.github.com/jquery-powertip/\n Copyright (c) 2013 Steven Benner (http://stevenbenner.com/).\n Released under MIT license.\n https://raw.github.com/stevenbenner/jquery-powertip/master/LICENSE.txt\n*/\n(function(a){if(typeof define===\"function\"&&define.amd){define([\"jquery\"],a)}else{a(jQuery)}}(function(k){var A=k(document),s=k(window),w=k(\"body\");var n=\"displayController\",e=\"hasActiveHover\",d=\"forcedOpen\",u=\"hasMouseMove\",f=\"mouseOnToPopup\",g=\"originalTitle\",y=\"powertip\",o=\"powertipjq\",l=\"powertiptarget\",E=180/Math.PI;var c={isTipOpen:false,isFixedTipOpen:false,isClosing:false,tipOpenImminent:false,activeHover:null,currentX:0,currentY:0,previousX:0,previousY:0,desyncTimeout:null,mouseTrackingActive:false,delayInProgress:false,windowWidth:0,windowHeight:0,scrollTop:0,scrollLeft:0};var p={none:0,top:1,bottom:2,left:4,right:8};k.fn.powerTip=function(F,N){if(!this.length){return this}if(k.type(F)===\"string\"&&k.powerTip[F]){return k.powerTip[F].call(this,this,N)}var O=k.extend({},k.fn.powerTip.defaults,F),G=new x(O);h();this.each(function M(){var R=k(this),Q=R.data(y),P=R.data(o),T=R.data(l),S;if(R.data(n)){k.powerTip.destroy(R)}S=R.attr(\"title\");if(!Q&&!T&&!P&&S){R.data(y,S);R.data(g,S);R.removeAttr(\"title\")}R.data(n,new t(R,O,G))});if(!O.manual){this.on({\"mouseenter.powertip\":function J(P){k.powerTip.show(this,P)},\"mouseleave.powertip\":function L(){k.powerTip.hide(this)},\"focus.powertip\":function K(){k.powerTip.show(this)},\"blur.powertip\":function H(){k.powerTip.hide(this,true)},\"keydown.powertip\":function I(P){if(P.keyCode===27){k.powerTip.hide(this,true)}}})}return this};k.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:\"powerTip\",intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:\"n\",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false};k.fn.powerTip.smartPlacementLists={n:[\"n\",\"ne\",\"nw\",\"s\"],e:[\"e\",\"ne\",\"se\",\"w\",\"nw\",\"sw\",\"n\",\"s\",\"e\"],s:[\"s\",\"se\",\"sw\",\"n\"],w:[\"w\",\"nw\",\"sw\",\"e\",\"ne\",\"se\",\"n\",\"s\",\"w\"],nw:[\"nw\",\"w\",\"sw\",\"n\",\"s\",\"se\",\"nw\"],ne:[\"ne\",\"e\",\"se\",\"n\",\"s\",\"sw\",\"ne\"],sw:[\"sw\",\"w\",\"nw\",\"s\",\"n\",\"ne\",\"sw\"],se:[\"se\",\"e\",\"ne\",\"s\",\"n\",\"nw\",\"se\"],\"nw-alt\":[\"nw-alt\",\"n\",\"ne-alt\",\"sw-alt\",\"s\",\"se-alt\",\"w\",\"e\"],\"ne-alt\":[\"ne-alt\",\"n\",\"nw-alt\",\"se-alt\",\"s\",\"sw-alt\",\"e\",\"w\"],\"sw-alt\":[\"sw-alt\",\"s\",\"se-alt\",\"nw-alt\",\"n\",\"ne-alt\",\"w\",\"e\"],\"se-alt\":[\"se-alt\",\"s\",\"sw-alt\",\"ne-alt\",\"n\",\"nw-alt\",\"e\",\"w\"]};k.powerTip={show:function z(F,G){if(G){i(G);c.previousX=G.pageX;c.previousY=G.pageY;k(F).data(n).show()}else{k(F).first().data(n).show(true,true)}return F},reposition:function r(F){k(F).first().data(n).resetPosition();return F},hide:function D(G,F){if(G){k(G).first().data(n).hide(F)}else{if(c.activeHover){c.activeHover.data(n).hide(true)}}return G},destroy:function C(G){k(G).off(\".powertip\").each(function F(){var I=k(this),H=[g,n,e,d];if(I.data(g)){I.attr(\"title\",I.data(g));H.push(y)}I.removeData(H)});return G}};k.powerTip.showTip=k.powerTip.show;k.powerTip.closeTip=k.powerTip.hide;function b(){var F=this;F.top=\"auto\";F.left=\"auto\";F.right=\"auto\";F.bottom=\"auto\";F.set=function(H,G){if(k.isNumeric(G)){F[H]=Math.round(G)}}}function t(K,N,F){var J=null;function L(P,Q){M();if(!K.data(e)){if(!P){c.tipOpenImminent=true;J=setTimeout(function O(){J=null;I()},N.intentPollInterval)}else{if(Q){K.data(d,true)}F.showTip(K)}}}function G(P){M();c.tipOpenImminent=false;if(K.data(e)){K.data(d,false);if(!P){c.delayInProgress=true;J=setTimeout(function O(){J=null;F.hideTip(K);c.delayInProgress=false},N.closeDelay)}else{F.hideTip(K)}}}function I(){var Q=Math.abs(c.previousX-c.currentX),O=Math.abs(c.previousY-c.currentY),P=Q+O;if(P<N.intentSensitivity){F.showTip(K)}else{c.previousX=c.currentX;c.previousY=c.currentY;L()}}function M(){J=clearTimeout(J);c.delayInProgress=false}function H(){F.resetPosition(K)}this.show=L;this.hide=G;this.cancel=M;this.resetPosition=H}function j(){function G(M,L,J,O,P){var K=L.split(\"-\")[0],N=new b(),I;if(q(M)){I=H(M,K)}else{I=F(M,K)}switch(L){case\"n\":N.set(\"left\",I.left-(J/2));N.set(\"bottom\",c.windowHeight-I.top+P);break;case\"e\":N.set(\"left\",I.left+P);N.set(\"top\",I.top-(O/2));break;case\"s\":N.set(\"left\",I.left-(J/2));N.set(\"top\",I.top+P);break;case\"w\":N.set(\"top\",I.top-(O/2));N.set(\"right\",c.windowWidth-I.left+P);break;case\"nw\":N.set(\"bottom\",c.windowHeight-I.top+P);N.set(\"right\",c.windowWidth-I.left-20);break;case\"nw-alt\":N.set(\"left\",I.left);N.set(\"bottom\",c.windowHeight-I.top+P);break;case\"ne\":N.set(\"left\",I.left-20);N.set(\"bottom\",c.windowHeight-I.top+P);break;case\"ne-alt\":N.set(\"bottom\",c.windowHeight-I.top+P);N.set(\"right\",c.windowWidth-I.left);break;case\"sw\":N.set(\"top\",I.top+P);N.set(\"right\",c.windowWidth-I.left-20);break;case\"sw-alt\":N.set(\"left\",I.left);N.set(\"top\",I.top+P);break;case\"se\":N.set(\"left\",I.left-20);N.set(\"top\",I.top+P);break;case\"se-alt\":N.set(\"top\",I.top+P);N.set(\"right\",c.windowWidth-I.left);break}return N}function F(K,J){var O=K.offset(),N=K.outerWidth(),I=K.outerHeight(),M,L;switch(J){case\"n\":M=O.left+N/2;L=O.top;break;case\"e\":M=O.left+N;L=O.top+I/2;break;case\"s\":M=O.left+N/2;L=O.top+I;break;case\"w\":M=O.left;L=O.top+I/2;break;case\"nw\":M=O.left;L=O.top;break;case\"ne\":M=O.left+N;L=O.top;break;case\"sw\":M=O.left;L=O.top+I;break;case\"se\":M=O.left+N;L=O.top+I;break}return{top:L,left:M}}function H(O,K){var S=O.closest(\"svg\")[0],N=O[0],W=S.createSVGPoint(),L=N.getBBox(),V=N.getScreenCTM(),M=L.width/2,Q=L.height/2,P=[],I=[\"nw\",\"n\",\"ne\",\"e\",\"se\",\"s\",\"sw\",\"w\"],U,X,R,T;function J(){P.push(W.matrixTransform(V))}W.x=L.x;W.y=L.y;J();W.x+=M;J();W.x+=M;J();W.y+=Q;J();W.y+=Q;J();W.x-=M;J();W.x-=M;J();W.y-=Q;J();if(P[0].y!==P[1].y||P[0].x!==P[7].x){X=Math.atan2(V.b,V.a)*E;R=Math.ceil(((X%360)-22.5)/45);if(R<1){R+=8}while(R--){I.push(I.shift())}}for(T=0;T<P.length;T++){if(I[T]===K){U=P[T];break}}return{top:U.y+c.scrollTop,left:U.x+c.scrollLeft}}this.compute=G}function x(Q){var P=new j(),O=k(\"#\"+Q.popupId);if(O.length===0){O=k(\"<div/>\",{id:Q.popupId});if(w.length===0){w=k(\"body\")}w.append(O)}if(Q.followMouse){if(!O.data(u)){A.on(\"mousemove\",M);s.on(\"scroll\",M);O.data(u,true)}}if(Q.mouseOnToPopup){O.on({mouseenter:function L(){if(O.data(f)){if(c.activeHover){c.activeHover.data(n).cancel()}}},mouseleave:function N(){if(c.activeHover){c.activeHover.data(n).hide()}}})}function I(S){S.data(e,true);O.queue(function R(T){H(S);T()})}function H(S){var U;if(!S.data(e)){return}if(c.isTipOpen){if(!c.isClosing){K(c.activeHover)}O.delay(100).queue(function R(V){H(S);V()});return}S.trigger(\"powerTipPreRender\");U=B(S);if(U){O.empty().append(U)}else{return}S.trigger(\"powerTipRender\");c.activeHover=S;c.isTipOpen=true;O.data(f,Q.mouseOnToPopup);if(!Q.followMouse){G(S);c.isFixedTipOpen=true}else{M()}O.fadeIn(Q.fadeInTime,function T(){if(!c.desyncTimeout){c.desyncTimeout=setInterval(J,500)}S.trigger(\"powerTipOpen\")})}function K(R){c.isClosing=true;c.activeHover=null;c.isTipOpen=false;c.desyncTimeout=clearInterval(c.desyncTimeout);R.data(e,false);R.data(d,false);O.fadeOut(Q.fadeOutTime,function S(){var T=new b();c.isClosing=false;c.isFixedTipOpen=false;O.removeClass();T.set(\"top\",c.currentY+Q.offset);T.set(\"left\",c.currentX+Q.offset);O.css(T);R.trigger(\"powerTipClose\")})}function M(){if(!c.isFixedTipOpen&&(c.isTipOpen||(c.tipOpenImminent&&O.data(u)))){var R=O.outerWidth(),V=O.outerHeight(),U=new b(),S,T;U.set(\"top\",c.currentY+Q.offset);U.set(\"left\",c.currentX+Q.offset);S=m(U,R,V);if(S!==p.none){T=a(S);if(T===1){if(S===p.right){U.set(\"left\",c.windowWidth-R)}else{if(S===p.bottom){U.set(\"top\",c.scrollTop+c.windowHeight-V)}}}else{U.set(\"left\",c.currentX-R-Q.offset);U.set(\"top\",c.currentY-V-Q.offset)}}O.css(U)}}function G(S){var R,T;if(Q.smartPlacement){R=k.fn.powerTip.smartPlacementLists[Q.placement];k.each(R,function(U,W){var V=m(F(S,W),O.outerWidth(),O.outerHeight());T=W;if(V===p.none){return false}})}else{F(S,Q.placement);T=Q.placement}O.addClass(T)}function F(U,T){var R=0,S,W,V=new b();V.set(\"top\",0);V.set(\"left\",0);O.css(V);do{S=O.outerWidth();W=O.outerHeight();V=P.compute(U,T,S,W,Q.offset);O.css(V)}while(++R<=5&&(S!==O.outerWidth()||W!==O.outerHeight()));return V}function J(){var R=false;if(c.isTipOpen&&!c.isClosing&&!c.delayInProgress){if(c.activeHover.data(e)===false||c.activeHover.is(\":disabled\")){R=true}else{if(!v(c.activeHover)&&!c.activeHover.is(\":focus\")&&!c.activeHover.data(d)){if(O.data(f)){if(!v(O)){R=true}}else{R=true}}}if(R){K(c.activeHover)}}}this.showTip=I;this.hideTip=K;this.resetPosition=G}function q(F){return window.SVGElement&&F[0] instanceof SVGElement}function h(){if(!c.mouseTrackingActive){c.mouseTrackingActive=true;k(function H(){c.scrollLeft=s.scrollLeft();c.scrollTop=s.scrollTop();c.windowWidth=s.width();c.windowHeight=s.height()});A.on(\"mousemove\",i);s.on({resize:function G(){c.windowWidth=s.width();c.windowHeight=s.height()},scroll:function F(){var I=s.scrollLeft(),J=s.scrollTop();if(I!==c.scrollLeft){c.currentX+=I-c.scrollLeft;c.scrollLeft=I}if(J!==c.scrollTop){c.currentY+=J-c.scrollTop;c.scrollTop=J}}})}}function i(F){c.currentX=F.pageX;c.currentY=F.pageY}function v(F){var H=F.offset(),J=F[0].getBoundingClientRect(),I=J.right-J.left,G=J.bottom-J.top;return c.currentX>=H.left&&c.currentX<=H.left+I&&c.currentY>=H.top&&c.currentY<=H.top+G}function B(I){var G=I.data(y),F=I.data(o),K=I.data(l),H,J;if(G){if(k.isFunction(G)){G=G.call(I[0])}J=G}else{if(F){if(k.isFunction(F)){F=F.call(I[0])}if(F.length>0){J=F.clone(true,true)}}else{if(K){H=k(\"#\"+K);if(H.length>0){J=H.html()}}}}return J}function m(M,L,K){var G=c.scrollTop,J=c.scrollLeft,I=G+c.windowHeight,F=J+c.windowWidth,H=p.none;if(M.top<G||Math.abs(M.bottom-c.windowHeight)-K<G){H|=p.top}if(M.top+K>I||Math.abs(M.bottom-c.windowHeight)>I){H|=p.bottom}if(M.left<J||M.right+L>F){H|=p.left}if(M.left+L>F||M.right<J){H|=p.right}return H}function a(G){var F=0;while(G){G&=G-1;F++}return F}}));"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/modules.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=9\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<title>0.9.9 API documentation: Modules</title>\n<link href=\"tabs.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"jquery.js\"></script>\n<script type=\"text/javascript\" src=\"dynsections.js\"></script>\n<link href=\"search/search.css\" rel=\"stylesheet\" type=\"text/css\"/>\n<script type=\"text/javascript\" src=\"search/searchdata.js\"></script>\n<script type=\"text/javascript\" src=\"search/search.js\"></script>\n<script type=\"text/javascript\">\n  $(document).ready(function() { init_search(); });\n</script>\n<link href=\"doxygen.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n<body>\n<div id=\"top\"><!-- do not remove this div, it is closed by doxygen! -->\n<div id=\"titlearea\">\n<table cellspacing=\"0\" cellpadding=\"0\">\n <tbody>\n <tr style=\"height: 56px;\">\n  <td id=\"projectlogo\"><img alt=\"Logo\" src=\"logo-mini.png\"/></td>\n  <td id=\"projectalign\" style=\"padding-left: 0.5em;\">\n   <div id=\"projectname\">0.9.9 API documentation\n   </div>\n  </td>\n </tr>\n </tbody>\n</table>\n</div>\n<!-- end header part -->\n<!-- Generated by Doxygen 1.8.10 -->\n<script type=\"text/javascript\">\nvar searchBox = new SearchBox(\"searchBox\", \"search\",false,'Search');\n</script>\n  <div id=\"navrow1\" class=\"tabs\">\n    <ul class=\"tablist\">\n      <li><a href=\"index.html\"><span>Main&#160;Page</span></a></li>\n      <li class=\"current\"><a href=\"modules.html\"><span>Modules</span></a></li>\n      <li><a href=\"files.html\"><span>Files</span></a></li>\n      <li>\n        <div id=\"MSearchBox\" class=\"MSearchBoxInactive\">\n        <span class=\"left\">\n          <img id=\"MSearchSelect\" src=\"search/mag_sel.png\"\n               onmouseover=\"return searchBox.OnSearchSelectShow()\"\n               onmouseout=\"return searchBox.OnSearchSelectHide()\"\n               alt=\"\"/>\n          <input type=\"text\" id=\"MSearchField\" value=\"Search\" accesskey=\"S\"\n               onfocus=\"searchBox.OnSearchFieldFocus(true)\" \n               onblur=\"searchBox.OnSearchFieldFocus(false)\" \n               onkeyup=\"searchBox.OnSearchFieldChange(event)\"/>\n          </span><span class=\"right\">\n            <a id=\"MSearchClose\" href=\"javascript:searchBox.CloseResultsWindow()\"><img id=\"MSearchCloseImg\" border=\"0\" src=\"search/close.png\" alt=\"\"/></a>\n          </span>\n        </div>\n      </li>\n    </ul>\n  </div>\n</div><!-- top -->\n<!-- window showing the filter options -->\n<div id=\"MSearchSelectWindow\"\n     onmouseover=\"return searchBox.OnSearchSelectShow()\"\n     onmouseout=\"return searchBox.OnSearchSelectHide()\"\n     onkeydown=\"return searchBox.OnSearchSelectKey(event)\">\n</div>\n\n<!-- iframe showing the search results (closed by default) -->\n<div id=\"MSearchResultsWindow\">\n<iframe src=\"javascript:void(0)\" frameborder=\"0\" \n        name=\"MSearchResults\" id=\"MSearchResults\">\n</iframe>\n</div>\n\n<div class=\"header\">\n  <div class=\"headertitle\">\n<div class=\"title\">Modules</div>  </div>\n</div><!--header-->\n<div class=\"contents\">\n<div class=\"textblock\">Here is a list of all modules:</div><div class=\"directory\">\n<div class=\"levels\">[detail level <span onclick=\"javascript:toggleLevel(1);\">1</span><span onclick=\"javascript:toggleLevel(2);\">2</span>]</div><table class=\"directory\">\n<tr id=\"row_0_\" class=\"even\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\">&#160;</span><span id=\"arr_0_\" class=\"arrow\" onclick=\"toggleFolder('0_')\">&#9658;</span><a class=\"el\" href=\"a00280.html\" target=\"_self\">Core features</a></td><td class=\"desc\">Features that implement in C++ the GLSL specification as closely as possible </td></tr>\n<tr id=\"row_0_0_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00241.html\" target=\"_self\">Common functions</a></td><td class=\"desc\">Provides GLSL common functions </td></tr>\n<tr id=\"row_0_1_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00242.html\" target=\"_self\">Exponential functions</a></td><td class=\"desc\">Provides GLSL exponential functions </td></tr>\n<tr id=\"row_0_2_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00279.html\" target=\"_self\">Geometric functions</a></td><td class=\"desc\">These operate on vectors as vectors, not component-wise </td></tr>\n<tr id=\"row_0_3_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00281.html\" target=\"_self\">Vector types</a></td><td class=\"desc\">Vector types of two to four components with an exhaustive set of operators </td></tr>\n<tr id=\"row_0_4_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00282.html\" target=\"_self\">Vector types with precision qualifiers</a></td><td class=\"desc\">Vector types with precision qualifiers which may result in various precision in term of ULPs </td></tr>\n<tr id=\"row_0_5_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00283.html\" target=\"_self\">Matrix types</a></td><td class=\"desc\">Matrix types of with C columns and R rows where C and R are values between 2 to 4 included </td></tr>\n<tr id=\"row_0_6_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00284.html\" target=\"_self\">Matrix types with precision qualifiers</a></td><td class=\"desc\">Matrix types with precision qualifiers which may result in various precision in term of ULPs </td></tr>\n<tr id=\"row_0_7_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00370.html\" target=\"_self\">Integer functions</a></td><td class=\"desc\">Provides GLSL functions on integer types </td></tr>\n<tr id=\"row_0_8_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00371.html\" target=\"_self\">Matrix functions</a></td><td class=\"desc\">Provides GLSL matrix functions </td></tr>\n<tr id=\"row_0_9_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00372.html\" target=\"_self\">Floating-Point Pack and Unpack Functions</a></td><td class=\"desc\">Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types </td></tr>\n<tr id=\"row_0_10_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00373.html\" target=\"_self\">Angle and Trigonometry Functions</a></td><td class=\"desc\">Function parameters specified as angle are assumed to be in units of radians </td></tr>\n<tr id=\"row_0_11_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00374.html\" target=\"_self\">Vector Relational Functions</a></td><td class=\"desc\">Relational and equality operators (&lt;, &lt;=, &gt;, &gt;=, ==, !=) are defined to operate on scalars and produce scalar Boolean results </td></tr>\n<tr id=\"row_1_\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\">&#160;</span><span id=\"arr_1_\" class=\"arrow\" onclick=\"toggleFolder('1_')\">&#9658;</span><a class=\"el\" href=\"a00285.html\" target=\"_self\">Stable extensions</a></td><td class=\"desc\">Additional features not specified by GLSL specification </td></tr>\n<tr id=\"row_1_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00243.html\" target=\"_self\">GLM_EXT_matrix_clip_space</a></td><td class=\"desc\">Defines functions that generate clip space transformation matrices </td></tr>\n<tr id=\"row_1_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00244.html\" target=\"_self\">GLM_EXT_matrix_common</a></td><td class=\"desc\">Defines functions for common matrix operations </td></tr>\n<tr id=\"row_1_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00245.html\" target=\"_self\">GLM_EXT_matrix_projection</a></td><td class=\"desc\">Functions that generate common projection transformation matrices </td></tr>\n<tr id=\"row_1_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00246.html\" target=\"_self\">GLM_EXT_matrix_relational</a></td><td class=\"desc\">Exposes comparison functions for matrix types that take a user defined epsilon values </td></tr>\n<tr id=\"row_1_4_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00247.html\" target=\"_self\">GLM_EXT_matrix_transform</a></td><td class=\"desc\">Defines functions that generate common transformation matrices </td></tr>\n<tr id=\"row_1_5_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00248.html\" target=\"_self\">GLM_EXT_quaternion_common</a></td><td class=\"desc\">Provides common functions for quaternion types </td></tr>\n<tr id=\"row_1_6_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00249.html\" target=\"_self\">GLM_EXT_quaternion_double</a></td><td class=\"desc\">Exposes double-precision floating point quaternion type </td></tr>\n<tr id=\"row_1_7_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00250.html\" target=\"_self\">GLM_EXT_quaternion_double_precision</a></td><td class=\"desc\">Exposes double-precision floating point quaternion type with various precision in term of ULPs </td></tr>\n<tr id=\"row_1_8_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00251.html\" target=\"_self\">GLM_EXT_quaternion_exponential</a></td><td class=\"desc\">Provides exponential functions for quaternion types </td></tr>\n<tr id=\"row_1_9_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00252.html\" target=\"_self\">GLM_EXT_quaternion_float</a></td><td class=\"desc\">Exposes single-precision floating point quaternion type </td></tr>\n<tr id=\"row_1_10_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00253.html\" target=\"_self\">GLM_EXT_quaternion_float_precision</a></td><td class=\"desc\">Exposes single-precision floating point quaternion type with various precision in term of ULPs </td></tr>\n<tr id=\"row_1_11_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00254.html\" target=\"_self\">GLM_EXT_quaternion_geometric</a></td><td class=\"desc\">Provides geometric functions for quaternion types </td></tr>\n<tr id=\"row_1_12_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00255.html\" target=\"_self\">GLM_EXT_quaternion_relational</a></td><td class=\"desc\">Exposes comparison functions for quaternion types that take a user defined epsilon values </td></tr>\n<tr id=\"row_1_13_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00256.html\" target=\"_self\">GLM_EXT_quaternion_transform</a></td><td class=\"desc\">Provides transformation functions for quaternion types </td></tr>\n<tr id=\"row_1_14_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00257.html\" target=\"_self\">GLM_EXT_quaternion_trigonometric</a></td><td class=\"desc\">Provides trigonometric functions for quaternion types </td></tr>\n<tr id=\"row_1_15_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00258.html\" target=\"_self\">GLM_EXT_scalar_common</a></td><td class=\"desc\">Exposes min and max functions for 3 to 4 scalar parameters </td></tr>\n<tr id=\"row_1_16_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00259.html\" target=\"_self\">GLM_EXT_scalar_constants</a></td><td class=\"desc\">Provides a list of constants and precomputed useful values </td></tr>\n<tr id=\"row_1_17_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00260.html\" target=\"_self\">GLM_EXT_scalar_int_sized</a></td><td class=\"desc\">Exposes sized signed integer scalar types </td></tr>\n<tr id=\"row_1_18_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00261.html\" target=\"_self\">GLM_EXT_scalar_integer</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00147.html\" title=\"GLM_EXT_scalar_integer \">glm/ext/scalar_integer.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_1_19_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00262.html\" target=\"_self\">GLM_EXT_scalar_relational</a></td><td class=\"desc\">Exposes comparison functions for scalar types that take a user defined epsilon values </td></tr>\n<tr id=\"row_1_20_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00263.html\" target=\"_self\">GLM_EXT_scalar_uint_sized</a></td><td class=\"desc\">Exposes sized unsigned integer scalar types </td></tr>\n<tr id=\"row_1_21_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00264.html\" target=\"_self\">GLM_EXT_scalar_ulp</a></td><td class=\"desc\">Allow the measurement of the accuracy of a function against a reference implementation </td></tr>\n<tr id=\"row_1_22_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00265.html\" target=\"_self\">GLM_EXT_vector_bool1</a></td><td class=\"desc\">Exposes bvec1 vector type </td></tr>\n<tr id=\"row_1_23_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00266.html\" target=\"_self\">GLM_EXT_vector_bool1_precision</a></td><td class=\"desc\">Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types </td></tr>\n<tr id=\"row_1_24_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00267.html\" target=\"_self\">GLM_EXT_vector_common</a></td><td class=\"desc\">Exposes min and max functions for 3 to 4 vector parameters </td></tr>\n<tr id=\"row_1_25_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00268.html\" target=\"_self\">GLM_EXT_vector_double1</a></td><td class=\"desc\">Exposes double-precision floating point vector type with one component </td></tr>\n<tr id=\"row_1_26_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00269.html\" target=\"_self\">GLM_EXT_vector_double1_precision</a></td><td class=\"desc\">Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types </td></tr>\n<tr id=\"row_1_27_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00270.html\" target=\"_self\">GLM_EXT_vector_float1</a></td><td class=\"desc\">Exposes single-precision floating point vector type with one component </td></tr>\n<tr id=\"row_1_28_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00271.html\" target=\"_self\">GLM_EXT_vector_float1_precision</a></td><td class=\"desc\">Exposes highp_vec1, mediump_vec1 and lowp_vec1 types </td></tr>\n<tr id=\"row_1_29_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00272.html\" target=\"_self\">GLM_EXT_vector_int1</a></td><td class=\"desc\">Exposes ivec1 vector type </td></tr>\n<tr id=\"row_1_30_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00273.html\" target=\"_self\">GLM_EXT_vector_int1_precision</a></td><td class=\"desc\">Exposes highp_ivec1, mediump_ivec1 and lowp_ivec1 types </td></tr>\n<tr id=\"row_1_31_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00274.html\" target=\"_self\">GLM_EXT_vector_integer</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00222.html\" title=\"GLM_EXT_vector_integer \">glm/ext/vector_integer.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_1_32_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00275.html\" target=\"_self\">GLM_EXT_vector_relational</a></td><td class=\"desc\">Exposes comparison functions for vector types that take a user defined epsilon values </td></tr>\n<tr id=\"row_1_33_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00276.html\" target=\"_self\">GLM_EXT_vector_uint1</a></td><td class=\"desc\">Exposes uvec1 vector type </td></tr>\n<tr id=\"row_1_34_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00277.html\" target=\"_self\">GLM_EXT_vector_uint1_precision</a></td><td class=\"desc\">Exposes highp_uvec1, mediump_uvec1 and lowp_uvec1 types </td></tr>\n<tr id=\"row_1_35_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00278.html\" target=\"_self\">GLM_EXT_vector_ulp</a></td><td class=\"desc\">Allow the measurement of the accuracy of a function against a reference implementation </td></tr>\n<tr id=\"row_2_\" class=\"even\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\">&#160;</span><span id=\"arr_2_\" class=\"arrow\" onclick=\"toggleFolder('2_')\">&#9658;</span><a class=\"el\" href=\"a00286.html\" target=\"_self\">Recommended extensions</a></td><td class=\"desc\">Additional features not specified by GLSL specification </td></tr>\n<tr id=\"row_2_0_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00288.html\" target=\"_self\">GLM_GTC_bitfield</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00009.html\" title=\"GLM_GTC_bitfield \">glm/gtc/bitfield.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_1_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00289.html\" target=\"_self\">GLM_GTC_color_space</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00012.html\" title=\"GLM_GTC_color_space \">glm/gtc/color_space.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_2_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00290.html\" target=\"_self\">GLM_GTC_constants</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00021.html\" title=\"GLM_GTC_constants \">glm/gtc/constants.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_3_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00291.html\" target=\"_self\">GLM_GTC_epsilon</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00024.html\" title=\"GLM_GTC_epsilon \">glm/gtc/epsilon.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_4_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00292.html\" target=\"_self\">GLM_GTC_integer</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00041.html\" title=\"GLM_GTC_integer \">glm/gtc/integer.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_5_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00293.html\" target=\"_self\">GLM_GTC_matrix_access</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00058.html\" title=\"GLM_GTC_matrix_access \">glm/gtc/matrix_access.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_6_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00294.html\" target=\"_self\">GLM_GTC_matrix_integer</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00100.html\" title=\"GLM_GTC_matrix_integer \">glm/gtc/matrix_integer.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_7_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00295.html\" target=\"_self\">GLM_GTC_matrix_inverse</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00100.html\" title=\"GLM_GTC_matrix_integer \">glm/gtc/matrix_integer.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_8_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00296.html\" target=\"_self\">GLM_GTC_matrix_transform</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00109.html\" title=\"GLM_GTC_matrix_transform \">glm/gtc/matrix_transform.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_9_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00297.html\" target=\"_self\">GLM_GTC_noise</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00112.html\" title=\"GLM_GTC_noise \">glm/gtc/noise.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_10_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00298.html\" target=\"_self\">GLM_GTC_packing</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00119.html\" title=\"GLM_GTC_packing \">glm/gtc/packing.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_11_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00299.html\" target=\"_self\">GLM_GTC_quaternion</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00125.html\" title=\"GLM_GTC_quaternion \">glm/gtc/quaternion.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_12_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00300.html\" target=\"_self\">GLM_GTC_random</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00137.html\" title=\"GLM_GTC_random \">glm/gtc/random.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_13_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00301.html\" target=\"_self\">GLM_GTC_reciprocal</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00140.html\" title=\"GLM_GTC_reciprocal \">glm/gtc/reciprocal.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_14_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00302.html\" target=\"_self\">GLM_GTC_round</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00143.html\" title=\"GLM_GTC_round \">glm/gtc/round.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_15_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00303.html\" target=\"_self\">GLM_GTC_type_aligned</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00161.html\" title=\"GLM_GTC_type_aligned \">glm/gtc/type_aligned.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_16_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00304.html\" target=\"_self\">GLM_GTC_type_precision</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00174.html\" title=\"GLM_GTC_type_precision \">glm/gtc/type_precision.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_17_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00305.html\" target=\"_self\">GLM_GTC_type_ptr</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00175.html\" title=\"GLM_GTC_type_ptr \">glm/gtc/type_ptr.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_18_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00306.html\" target=\"_self\">GLM_GTC_ulp</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00182.html\" title=\"GLM_GTC_ulp \">glm/gtc/ulp.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_2_19_\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00307.html\" target=\"_self\">GLM_GTC_vec1</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00183.html\" title=\"GLM_GTC_vec1 \">glm/gtc/vec1.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_\"><td class=\"entry\"><span style=\"width:0px;display:inline-block;\">&#160;</span><span id=\"arr_3_\" class=\"arrow\" onclick=\"toggleFolder('3_')\">&#9658;</span><a class=\"el\" href=\"a00287.html\" target=\"_self\">Experimental extensions</a></td><td class=\"desc\">Experimental features not specified by GLSL specification </td></tr>\n<tr id=\"row_3_0_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00308.html\" target=\"_self\">GLM_GTX_associated_min_max</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00007.html\" title=\"GLM_GTX_associated_min_max \">glm/gtx/associated_min_max.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_1_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00309.html\" target=\"_self\">GLM_GTX_bit</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00008.html\" title=\"GLM_GTX_bit \">glm/gtx/bit.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_2_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00310.html\" target=\"_self\">GLM_GTX_closest_point</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00010.html\" title=\"GLM_GTX_closest_point \">glm/gtx/closest_point.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_3_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00311.html\" target=\"_self\">GLM_GTX_color_encoding</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00011.html\" title=\"GLM_GTX_color_encoding \">glm/gtx/color_encoding.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_4_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00312.html\" target=\"_self\">GLM_GTX_color_space</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00013.html\" title=\"GLM_GTX_color_space \">glm/gtx/color_space.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_5_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00313.html\" target=\"_self\">GLM_GTX_color_space_YCoCg</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00014.html\" title=\"GLM_GTX_color_space_YCoCg \">glm/gtx/color_space_YCoCg.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_6_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00314.html\" target=\"_self\">GLM_GTX_common</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00016.html\" title=\"GLM_GTX_common \">glm/gtx/common.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_7_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00315.html\" target=\"_self\">GLM_GTX_compatibility</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00017.html\" title=\"GLM_GTX_compatibility \">glm/gtx/compatibility.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_8_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00316.html\" target=\"_self\">GLM_GTX_component_wise</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00018.html\" title=\"GLM_GTX_component_wise \">glm/gtx/component_wise.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_9_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00317.html\" target=\"_self\">GLM_GTX_dual_quaternion</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00022.html\" title=\"GLM_GTX_dual_quaternion \">glm/gtx/dual_quaternion.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_10_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00318.html\" target=\"_self\">GLM_GTX_easing</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00023.html\" title=\"GLM_GTX_easing \">glm/gtx/easing.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_11_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00319.html\" target=\"_self\">GLM_GTX_euler_angles</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00025.html\" title=\"GLM_GTX_euler_angles \">glm/gtx/euler_angles.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_12_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00320.html\" target=\"_self\">GLM_GTX_extend</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00028.html\" title=\"GLM_GTX_extend \">glm/gtx/extend.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_13_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00321.html\" target=\"_self\">GLM_GTX_extented_min_max</a></td><td class=\"desc\">Include &lt;glm/gtx/extented_min_max.hpp&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_14_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00322.html\" target=\"_self\">GLM_GTX_exterior_product</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00030.html\" title=\"GLM_GTX_exterior_product \">glm/gtx/exterior_product.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_15_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00323.html\" target=\"_self\">GLM_GTX_fast_exponential</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00031.html\" title=\"GLM_GTX_fast_exponential \">glm/gtx/fast_exponential.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_16_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00324.html\" target=\"_self\">GLM_GTX_fast_square_root</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00032.html\" title=\"GLM_GTX_fast_square_root \">glm/gtx/fast_square_root.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_17_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00325.html\" target=\"_self\">GLM_GTX_fast_trigonometry</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00033.html\" title=\"GLM_GTX_fast_trigonometry \">glm/gtx/fast_trigonometry.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_18_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00326.html\" target=\"_self\">GLM_GTX_functions</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00034.html\" title=\"GLM_GTX_functions \">glm/gtx/functions.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_19_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00327.html\" target=\"_self\">GLM_GTX_gradient_paint</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00038.html\" title=\"GLM_GTX_gradient_paint \">glm/gtx/gradient_paint.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_20_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00328.html\" target=\"_self\">GLM_GTX_handed_coordinate_space</a></td><td class=\"desc\">Include &lt;glm/gtx/handed_coordinate_system.hpp&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_21_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00329.html\" target=\"_self\">GLM_GTX_hash</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00040.html\" title=\"GLM_GTX_hash \">glm/gtx/hash.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_22_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00330.html\" target=\"_self\">GLM_GTX_integer</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00042.html\" title=\"GLM_GTX_integer \">glm/gtx/integer.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_23_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00331.html\" target=\"_self\">GLM_GTX_intersect</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00044.html\" title=\"GLM_GTX_intersect \">glm/gtx/intersect.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_24_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00332.html\" target=\"_self\">GLM_GTX_io</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00045.html\" title=\"GLM_GTX_io \">glm/gtx/io.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_25_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00333.html\" target=\"_self\">GLM_GTX_log_base</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00046.html\" title=\"GLM_GTX_log_base \">glm/gtx/log_base.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_26_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00334.html\" target=\"_self\">GLM_GTX_matrix_cross_product</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00061.html\" title=\"GLM_GTX_matrix_cross_product \">glm/gtx/matrix_cross_product.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_27_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00335.html\" target=\"_self\">GLM_GTX_matrix_decompose</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00062.html\" title=\"GLM_GTX_matrix_decompose \">glm/gtx/matrix_decompose.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_28_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00336.html\" target=\"_self\">GLM_GTX_matrix_factorisation</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00081.html\" title=\"GLM_GTX_matrix_factorisation \">glm/gtx/matrix_factorisation.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_29_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00337.html\" target=\"_self\">GLM_GTX_matrix_interpolation</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00101.html\" title=\"GLM_GTX_matrix_interpolation \">glm/gtx/matrix_interpolation.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_30_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00338.html\" target=\"_self\">GLM_GTX_matrix_major_storage</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00103.html\" title=\"GLM_GTX_matrix_major_storage \">glm/gtx/matrix_major_storage.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_31_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00339.html\" target=\"_self\">GLM_GTX_matrix_operation</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00104.html\" title=\"GLM_GTX_matrix_operation \">glm/gtx/matrix_operation.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_32_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00340.html\" target=\"_self\">GLM_GTX_matrix_query</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00106.html\" title=\"GLM_GTX_matrix_query \">glm/gtx/matrix_query.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_33_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00341.html\" target=\"_self\">GLM_GTX_matrix_transform_2d</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00110.html\" title=\"GLM_GTX_matrix_transform_2d \">glm/gtx/matrix_transform_2d.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_34_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00342.html\" target=\"_self\">GLM_GTX_mixed_producte</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00111.html\" title=\"GLM_GTX_mixed_producte \">glm/gtx/mixed_product.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_35_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00343.html\" target=\"_self\">GLM_GTX_norm</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00113.html\" title=\"GLM_GTX_norm \">glm/gtx/norm.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_36_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00344.html\" target=\"_self\">GLM_GTX_normal</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00114.html\" title=\"GLM_GTX_normal \">glm/gtx/normal.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_37_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00345.html\" target=\"_self\">GLM_GTX_normalize_dot</a></td><td class=\"desc\">Include &lt;glm/gtx/normalized_dot.hpp&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_38_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00346.html\" target=\"_self\">GLM_GTX_number_precision</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00116.html\" title=\"GLM_GTX_number_precision \">glm/gtx/number_precision.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_39_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00347.html\" target=\"_self\">GLM_GTX_optimum_pow</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00117.html\" title=\"GLM_GTX_optimum_pow \">glm/gtx/optimum_pow.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_40_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00348.html\" target=\"_self\">GLM_GTX_orthonormalize</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00118.html\" title=\"GLM_GTX_orthonormalize \">glm/gtx/orthonormalize.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_41_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00349.html\" target=\"_self\">GLM_GTX_perpendicular</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00121.html\" title=\"GLM_GTX_perpendicular \">glm/gtx/perpendicular.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_42_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00350.html\" target=\"_self\">GLM_GTX_polar_coordinates</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00122.html\" title=\"GLM_GTX_polar_coordinates \">glm/gtx/polar_coordinates.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_43_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00351.html\" target=\"_self\">GLM_GTX_projection</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00123.html\" title=\"GLM_GTX_projection \">glm/gtx/projection.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_44_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00352.html\" target=\"_self\">GLM_GTX_quaternion</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00126.html\" title=\"GLM_GTX_quaternion \">glm/gtx/quaternion.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_45_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00353.html\" target=\"_self\">GLM_GTX_range</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00138.html\" title=\"GLM_GTX_range \">glm/gtx/range.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_46_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00354.html\" target=\"_self\">GLM_GTX_raw_data</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00139.html\" title=\"GLM_GTX_raw_data \">glm/gtx/raw_data.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_47_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00355.html\" target=\"_self\">GLM_GTX_rotate_normalized_axis</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00141.html\" title=\"GLM_GTX_rotate_normalized_axis \">glm/gtx/rotate_normalized_axis.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_48_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00356.html\" target=\"_self\">GLM_GTX_rotate_vector</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00142.html\" title=\"GLM_GTX_rotate_vector \">glm/gtx/rotate_vector.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_49_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00357.html\" target=\"_self\">GLM_GTX_scalar_relational</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00150.html\" title=\"GLM_GTX_scalar_relational \">glm/gtx/scalar_relational.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_50_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00358.html\" target=\"_self\">GLM_GTX_spline</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00154.html\" title=\"GLM_GTX_spline \">glm/gtx/spline.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_51_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00359.html\" target=\"_self\">GLM_GTX_std_based_type</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00155.html\" title=\"GLM_GTX_std_based_type \">glm/gtx/std_based_type.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_52_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00360.html\" target=\"_self\">GLM_GTX_string_cast</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00156.html\" title=\"GLM_GTX_string_cast \">glm/gtx/string_cast.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_53_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00361.html\" target=\"_self\">GLM_GTX_texture</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00157.html\" title=\"GLM_GTX_texture \">glm/gtx/texture.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_54_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00362.html\" target=\"_self\">GLM_GTX_transform</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00158.html\" title=\"GLM_GTX_transform \">glm/gtx/transform.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_55_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00363.html\" target=\"_self\">GLM_GTX_transform2</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00159.html\" title=\"GLM_GTX_transform2 \">glm/gtx/transform2.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_56_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00364.html\" target=\"_self\">GLM_GTX_type_aligned</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00162.html\" title=\"GLM_GTX_type_aligned \">glm/gtx/type_aligned.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_57_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00365.html\" target=\"_self\">GLM_GTX_type_trait</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00177.html\" title=\"GLM_GTX_type_trait \">glm/gtx/type_trait.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_58_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00366.html\" target=\"_self\">GLM_GTX_vec_swizzle</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00187.html\" title=\"GLM_GTX_vec_swizzle \">glm/gtx/vec_swizzle.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_59_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00367.html\" target=\"_self\">GLM_GTX_vector_angle</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00188.html\" title=\"GLM_GTX_vector_angle \">glm/gtx/vector_angle.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_60_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00368.html\" target=\"_self\">GLM_GTX_vector_query</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00223.html\" title=\"GLM_GTX_vector_query \">glm/gtx/vector_query.hpp</a>&gt; to use the features of this extension </td></tr>\n<tr id=\"row_3_61_\" class=\"even\" style=\"display:none;\"><td class=\"entry\"><span style=\"width:32px;display:inline-block;\">&#160;</span><a class=\"el\" href=\"a00369.html\" target=\"_self\">GLM_GTX_wrap</a></td><td class=\"desc\">Include &lt;<a class=\"el\" href=\"a00235.html\" title=\"GLM_GTX_wrap \">glm/gtx/wrap.hpp</a>&gt; to use the features of this extension </td></tr>\n</table>\n</div><!-- directory -->\n</div><!-- contents -->\n<!-- start footer part -->\n<hr class=\"footer\"/><address class=\"footer\"><small>\nGenerated by &#160;<a href=\"http://www.doxygen.org/index.html\">\n<img class=\"footer\" src=\"doxygen.png\" alt=\"doxygen\"/>\n</a> 1.8.10\n</small></address>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_0.js",
    "content": "var searchData=\n[\n  ['abs',['abs',['../a00241.html#ga439e60a72eadecfeda2df5449c613a64',1,'glm::abs(genType x)'],['../a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6',1,'glm::abs(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['acos',['acos',['../a00373.html#gacc9b092df8257c68f19c9053703e2563',1,'glm']]],\n  ['acosh',['acosh',['../a00373.html#ga858f35dc66fd2688f20c52b5f25be76a',1,'glm']]],\n  ['acot',['acot',['../a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d',1,'glm']]],\n  ['acoth',['acoth',['../a00301.html#gafaca98a7100170db8841f446282debfa',1,'glm']]],\n  ['acsc',['acsc',['../a00301.html#ga1b4bed91476b9b915e76b4a30236d330',1,'glm']]],\n  ['acsch',['acsch',['../a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576',1,'glm']]],\n  ['adjugate',['adjugate',['../a00339.html#ga40a38402a30860af6e508fe76211e659',1,'glm::adjugate(mat&lt; 2, 2, T, Q &gt; const &amp;m)'],['../a00339.html#gaddb09f7abc1a9c56a243d32ff3538be6',1,'glm::adjugate(mat&lt; 3, 3, T, Q &gt; const &amp;m)'],['../a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8',1,'glm::adjugate(mat&lt; 4, 4, T, Q &gt; const &amp;m)']]],\n  ['affineinverse',['affineInverse',['../a00295.html#gae0fcc5fc8783291f9702272de428fa0e',1,'glm']]],\n  ['aligned_5fbvec1',['aligned_bvec1',['../a00303.html#ga780a35f764020f553a9601a3fcdcd059',1,'glm']]],\n  ['aligned_5fbvec2',['aligned_bvec2',['../a00303.html#gae766b317c5afec852bfb3d74a3c54bc8',1,'glm']]],\n  ['aligned_5fbvec3',['aligned_bvec3',['../a00303.html#gae1964ba70d15915e5b710926decbb3cb',1,'glm']]],\n  ['aligned_5fbvec4',['aligned_bvec4',['../a00303.html#gae164a1f7879f828bc35e50b79d786b05',1,'glm']]],\n  ['aligned_5fdmat2',['aligned_dmat2',['../a00303.html#ga6783859382677d35fcd5dac7dcbefdbd',1,'glm']]],\n  ['aligned_5fdmat2x2',['aligned_dmat2x2',['../a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388',1,'glm']]],\n  ['aligned_5fdmat2x3',['aligned_dmat2x3',['../a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1',1,'glm']]],\n  ['aligned_5fdmat2x4',['aligned_dmat2x4',['../a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0',1,'glm']]],\n  ['aligned_5fdmat3',['aligned_dmat3',['../a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de',1,'glm']]],\n  ['aligned_5fdmat3x2',['aligned_dmat3x2',['../a00303.html#ga5f5123d834bd1170edf8c386834e112c',1,'glm']]],\n  ['aligned_5fdmat3x3',['aligned_dmat3x3',['../a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f',1,'glm']]],\n  ['aligned_5fdmat3x4',['aligned_dmat3x4',['../a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d',1,'glm']]],\n  ['aligned_5fdmat4',['aligned_dmat4',['../a00303.html#ga001bb387ae8192fa94dbd8b23b600439',1,'glm']]],\n  ['aligned_5fdmat4x2',['aligned_dmat4x2',['../a00303.html#gaa409cfb737bd59b68dc683e9b03930cc',1,'glm']]],\n  ['aligned_5fdmat4x3',['aligned_dmat4x3',['../a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121',1,'glm']]],\n  ['aligned_5fdmat4x4',['aligned_dmat4x4',['../a00303.html#gac9bda778d0b7ad82f656dab99b71857a',1,'glm']]],\n  ['aligned_5fdvec1',['aligned_dvec1',['../a00303.html#ga4974f46ae5a19415d91316960a53617a',1,'glm']]],\n  ['aligned_5fdvec2',['aligned_dvec2',['../a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0',1,'glm']]],\n  ['aligned_5fdvec3',['aligned_dvec3',['../a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0',1,'glm']]],\n  ['aligned_5fdvec4',['aligned_dvec4',['../a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5',1,'glm']]],\n  ['aligned_5fhighp_5fbvec1',['aligned_highp_bvec1',['../a00303.html#ga862843a45b01c35ffe4d44c47ea774ad',1,'glm']]],\n  ['aligned_5fhighp_5fbvec2',['aligned_highp_bvec2',['../a00303.html#ga0731b593c5e33559954c80f8687e76c6',1,'glm']]],\n  ['aligned_5fhighp_5fbvec3',['aligned_highp_bvec3',['../a00303.html#ga0913bdf048d0cb74af1d2512aec675bc',1,'glm']]],\n  ['aligned_5fhighp_5fbvec4',['aligned_highp_bvec4',['../a00303.html#ga9df1d0c425852cf63a57e533b7a83f4f',1,'glm']]],\n  ['aligned_5fhighp_5fdmat2',['aligned_highp_dmat2',['../a00303.html#ga3a7eeae43cb7673e14cc89bf02f7dd45',1,'glm']]],\n  ['aligned_5fhighp_5fdmat2x2',['aligned_highp_dmat2x2',['../a00303.html#gaef26dfe3855a91644665b55c9096a8c8',1,'glm']]],\n  ['aligned_5fhighp_5fdmat2x3',['aligned_highp_dmat2x3',['../a00303.html#gaa7c9d4ab7ab651cdf8001fe7843e238b',1,'glm']]],\n  ['aligned_5fhighp_5fdmat2x4',['aligned_highp_dmat2x4',['../a00303.html#gaa0d2b8a75f1908dcf32c27f8524bdced',1,'glm']]],\n  ['aligned_5fhighp_5fdmat3',['aligned_highp_dmat3',['../a00303.html#gad8f6abb2c9994850b5d5c04a5f979ed8',1,'glm']]],\n  ['aligned_5fhighp_5fdmat3x2',['aligned_highp_dmat3x2',['../a00303.html#gab069b2fc2ec785fc4e193cf26c022679',1,'glm']]],\n  ['aligned_5fhighp_5fdmat3x3',['aligned_highp_dmat3x3',['../a00303.html#ga66073b1ddef34b681741f572338ddb8e',1,'glm']]],\n  ['aligned_5fhighp_5fdmat3x4',['aligned_highp_dmat3x4',['../a00303.html#ga683c8ca66de323ea533a760abedd0efc',1,'glm']]],\n  ['aligned_5fhighp_5fdmat4',['aligned_highp_dmat4',['../a00303.html#gacaa7407ea00ffdd322ce86a57adb547e',1,'glm']]],\n  ['aligned_5fhighp_5fdmat4x2',['aligned_highp_dmat4x2',['../a00303.html#ga93a23ca3d42818d56e0702213c66354b',1,'glm']]],\n  ['aligned_5fhighp_5fdmat4x3',['aligned_highp_dmat4x3',['../a00303.html#gacab7374b560745cb1d0a306a90353f58',1,'glm']]],\n  ['aligned_5fhighp_5fdmat4x4',['aligned_highp_dmat4x4',['../a00303.html#ga1fbfba14368b742972d3b58a0a303682',1,'glm']]],\n  ['aligned_5fhighp_5fdvec1',['aligned_highp_dvec1',['../a00303.html#gaf0448b0f7ceb8273f7eda3a92205eefc',1,'glm']]],\n  ['aligned_5fhighp_5fdvec2',['aligned_highp_dvec2',['../a00303.html#gab173a333e6b7ce153ceba66ac4a321cf',1,'glm']]],\n  ['aligned_5fhighp_5fdvec3',['aligned_highp_dvec3',['../a00303.html#gae94ef61edfa047d05bc69b6065fc42ba',1,'glm']]],\n  ['aligned_5fhighp_5fdvec4',['aligned_highp_dvec4',['../a00303.html#ga8fad35c5677f228e261fe541f15363a4',1,'glm']]],\n  ['aligned_5fhighp_5fivec1',['aligned_highp_ivec1',['../a00303.html#gad63b8c5b4dc0500d54d7414ef555178f',1,'glm']]],\n  ['aligned_5fhighp_5fivec2',['aligned_highp_ivec2',['../a00303.html#ga41563650f36cb7f479e080de21e08418',1,'glm']]],\n  ['aligned_5fhighp_5fivec3',['aligned_highp_ivec3',['../a00303.html#ga6eca5170bb35eac90b4972590fd31a06',1,'glm']]],\n  ['aligned_5fhighp_5fivec4',['aligned_highp_ivec4',['../a00303.html#ga31bfa801e1579fdba752ec3f7a45ec91',1,'glm']]],\n  ['aligned_5fhighp_5fmat2',['aligned_highp_mat2',['../a00303.html#gaf9db5e8a929c317da5aa12cc53741b63',1,'glm']]],\n  ['aligned_5fhighp_5fmat2x2',['aligned_highp_mat2x2',['../a00303.html#gab559d943abf92bc588bcd3f4c0e4664b',1,'glm']]],\n  ['aligned_5fhighp_5fmat2x3',['aligned_highp_mat2x3',['../a00303.html#ga50c9af5aa3a848956d625fc64dc8488e',1,'glm']]],\n  ['aligned_5fhighp_5fmat2x4',['aligned_highp_mat2x4',['../a00303.html#ga0edcfdd179f8a158342eead48a4d0c2a',1,'glm']]],\n  ['aligned_5fhighp_5fmat3',['aligned_highp_mat3',['../a00303.html#gabab3afcc04459c7b123604ae5dc663f6',1,'glm']]],\n  ['aligned_5fhighp_5fmat3x2',['aligned_highp_mat3x2',['../a00303.html#ga9fc2167b47c9be9295f2d8eea7f0ca75',1,'glm']]],\n  ['aligned_5fhighp_5fmat3x3',['aligned_highp_mat3x3',['../a00303.html#ga2f7b8c99ba6f2d07c73a195a8143c259',1,'glm']]],\n  ['aligned_5fhighp_5fmat3x4',['aligned_highp_mat3x4',['../a00303.html#ga52e00afd0eb181e6738f40cf41787049',1,'glm']]],\n  ['aligned_5fhighp_5fmat4',['aligned_highp_mat4',['../a00303.html#ga058ae939bfdbcbb80521dd4a3b01afba',1,'glm']]],\n  ['aligned_5fhighp_5fmat4x2',['aligned_highp_mat4x2',['../a00303.html#ga84e1f5e0718952a079b748825c03f956',1,'glm']]],\n  ['aligned_5fhighp_5fmat4x3',['aligned_highp_mat4x3',['../a00303.html#gafff1684c4ff19b4a818138ccacc1e78d',1,'glm']]],\n  ['aligned_5fhighp_5fmat4x4',['aligned_highp_mat4x4',['../a00303.html#ga40d49648083a0498a12a4bb41ae6ece8',1,'glm']]],\n  ['aligned_5fhighp_5fuvec1',['aligned_highp_uvec1',['../a00303.html#ga5b80e28396c6ef7d32c6fd18df498451',1,'glm']]],\n  ['aligned_5fhighp_5fuvec2',['aligned_highp_uvec2',['../a00303.html#ga04db692662a4908beeaf5a5ba6e19483',1,'glm']]],\n  ['aligned_5fhighp_5fuvec3',['aligned_highp_uvec3',['../a00303.html#ga073fd6e8b241afade6d8afbd676b2667',1,'glm']]],\n  ['aligned_5fhighp_5fuvec4',['aligned_highp_uvec4',['../a00303.html#gabdd60462042859f876c17c7346c732a5',1,'glm']]],\n  ['aligned_5fhighp_5fvec1',['aligned_highp_vec1',['../a00303.html#ga4d0bd70d5fac49b800546d608b707513',1,'glm']]],\n  ['aligned_5fhighp_5fvec2',['aligned_highp_vec2',['../a00303.html#gac9f8482dde741fb6bab7248b81a45465',1,'glm']]],\n  ['aligned_5fhighp_5fvec3',['aligned_highp_vec3',['../a00303.html#ga65415d2d68c9cc0ca554524a8f5510b2',1,'glm']]],\n  ['aligned_5fhighp_5fvec4',['aligned_highp_vec4',['../a00303.html#ga7cb26d354dd69d23849c34c4fba88da9',1,'glm']]],\n  ['aligned_5fivec1',['aligned_ivec1',['../a00303.html#ga76298aed82a439063c3d55980c84aa0b',1,'glm']]],\n  ['aligned_5fivec2',['aligned_ivec2',['../a00303.html#gae4f38fd2c86cee6940986197777b3ca4',1,'glm']]],\n  ['aligned_5fivec3',['aligned_ivec3',['../a00303.html#ga32794322d294e5ace7fed4a61896f270',1,'glm']]],\n  ['aligned_5fivec4',['aligned_ivec4',['../a00303.html#ga7f79eae5927c9033d84617e49f6f34e4',1,'glm']]],\n  ['aligned_5flowp_5fbvec1',['aligned_lowp_bvec1',['../a00303.html#gac6036449ab1c4abf8efe1ea00fcdd1c9',1,'glm']]],\n  ['aligned_5flowp_5fbvec2',['aligned_lowp_bvec2',['../a00303.html#ga59fadcd3835646e419372ae8b43c5d37',1,'glm']]],\n  ['aligned_5flowp_5fbvec3',['aligned_lowp_bvec3',['../a00303.html#ga83aab4d191053f169c93a3e364f2e118',1,'glm']]],\n  ['aligned_5flowp_5fbvec4',['aligned_lowp_bvec4',['../a00303.html#gaa7a76555ee4853614e5755181a8dd54e',1,'glm']]],\n  ['aligned_5flowp_5fdmat2',['aligned_lowp_dmat2',['../a00303.html#ga79a90173d8faa9816dc852ce447d66ca',1,'glm']]],\n  ['aligned_5flowp_5fdmat2x2',['aligned_lowp_dmat2x2',['../a00303.html#ga07cb8e846666cbf56045b064fb553d2e',1,'glm']]],\n  ['aligned_5flowp_5fdmat2x3',['aligned_lowp_dmat2x3',['../a00303.html#ga7a4536b6e1f2ebb690f63816b5d7e48b',1,'glm']]],\n  ['aligned_5flowp_5fdmat2x4',['aligned_lowp_dmat2x4',['../a00303.html#gab0cf4f7c9a264941519acad286e055ea',1,'glm']]],\n  ['aligned_5flowp_5fdmat3',['aligned_lowp_dmat3',['../a00303.html#gac00e15efded8a57c9dec3aed0fb547e7',1,'glm']]],\n  ['aligned_5flowp_5fdmat3x2',['aligned_lowp_dmat3x2',['../a00303.html#gaa281a47d5d627313984d0f8df993b648',1,'glm']]],\n  ['aligned_5flowp_5fdmat3x3',['aligned_lowp_dmat3x3',['../a00303.html#ga7f3148a72355e39932d6855baca42ebc',1,'glm']]],\n  ['aligned_5flowp_5fdmat3x4',['aligned_lowp_dmat3x4',['../a00303.html#gaea3ccc5ef5b178e6e49b4fa1427605d3',1,'glm']]],\n  ['aligned_5flowp_5fdmat4',['aligned_lowp_dmat4',['../a00303.html#gab92c6d7d58d43dfb8147e9aedfe8351b',1,'glm']]],\n  ['aligned_5flowp_5fdmat4x2',['aligned_lowp_dmat4x2',['../a00303.html#gaf806dfdaffb2e9f7681b1cd2825898ce',1,'glm']]],\n  ['aligned_5flowp_5fdmat4x3',['aligned_lowp_dmat4x3',['../a00303.html#gab0931ac7807fa1428c7bbf249efcdf0d',1,'glm']]],\n  ['aligned_5flowp_5fdmat4x4',['aligned_lowp_dmat4x4',['../a00303.html#gad8220a93d2fca2dd707821b4ab6f809e',1,'glm']]],\n  ['aligned_5flowp_5fdvec1',['aligned_lowp_dvec1',['../a00303.html#ga7f8a2cc5a686e52b1615761f4978ca62',1,'glm']]],\n  ['aligned_5flowp_5fdvec2',['aligned_lowp_dvec2',['../a00303.html#ga0e37cff4a43cca866101f0a35f01db6d',1,'glm']]],\n  ['aligned_5flowp_5fdvec3',['aligned_lowp_dvec3',['../a00303.html#gab9e669c4efd52d3347fc6d5f6b20fd59',1,'glm']]],\n  ['aligned_5flowp_5fdvec4',['aligned_lowp_dvec4',['../a00303.html#ga226f5ec7a953cea559c16fe3aff9924f',1,'glm']]],\n  ['aligned_5flowp_5fivec1',['aligned_lowp_ivec1',['../a00303.html#ga1101d3a82b2e3f5f8828bd8f3adab3e1',1,'glm']]],\n  ['aligned_5flowp_5fivec2',['aligned_lowp_ivec2',['../a00303.html#ga44c4accad582cfbd7226a19b83b0cadc',1,'glm']]],\n  ['aligned_5flowp_5fivec3',['aligned_lowp_ivec3',['../a00303.html#ga65663f10a02e52cedcddbcfe36ddf38d',1,'glm']]],\n  ['aligned_5flowp_5fivec4',['aligned_lowp_ivec4',['../a00303.html#gaae92fcec8b2e0328ffbeac31cc4fc419',1,'glm']]],\n  ['aligned_5flowp_5fmat2',['aligned_lowp_mat2',['../a00303.html#ga17c424412207b00dba1cf587b099eea3',1,'glm']]],\n  ['aligned_5flowp_5fmat2x2',['aligned_lowp_mat2x2',['../a00303.html#ga0e44aeb930a47f9cbf2db15b56433b0f',1,'glm']]],\n  ['aligned_5flowp_5fmat2x3',['aligned_lowp_mat2x3',['../a00303.html#ga7dec6d96bc61312b1e56d137c9c74030',1,'glm']]],\n  ['aligned_5flowp_5fmat2x4',['aligned_lowp_mat2x4',['../a00303.html#gaa694fab1f8df5f658846573ba8ffc563',1,'glm']]],\n  ['aligned_5flowp_5fmat3',['aligned_lowp_mat3',['../a00303.html#ga1eb9076cc28ead5020fd3029fd0472c5',1,'glm']]],\n  ['aligned_5flowp_5fmat3x2',['aligned_lowp_mat3x2',['../a00303.html#ga2d6639f0bd777bae1ee0eba71cd7bfdc',1,'glm']]],\n  ['aligned_5flowp_5fmat3x3',['aligned_lowp_mat3x3',['../a00303.html#gaeaab04e378a90956eec8d68a99d777ed',1,'glm']]],\n  ['aligned_5flowp_5fmat3x4',['aligned_lowp_mat3x4',['../a00303.html#ga1f03696ab066572c6c044e63edf635a2',1,'glm']]],\n  ['aligned_5flowp_5fmat4',['aligned_lowp_mat4',['../a00303.html#ga25ea2f684e36aa5e978b4f2f86593824',1,'glm']]],\n  ['aligned_5flowp_5fmat4x2',['aligned_lowp_mat4x2',['../a00303.html#ga2cb16c3fdfb15e0719d942ee3b548bc4',1,'glm']]],\n  ['aligned_5flowp_5fmat4x3',['aligned_lowp_mat4x3',['../a00303.html#ga7e96981e872f17a780d9f1c22dc1f512',1,'glm']]],\n  ['aligned_5flowp_5fmat4x4',['aligned_lowp_mat4x4',['../a00303.html#gadae3dcfc22d28c64d0548cbfd9d08719',1,'glm']]],\n  ['aligned_5flowp_5fuvec1',['aligned_lowp_uvec1',['../a00303.html#gad09b93acc43c43423408d17a64f6d7ca',1,'glm']]],\n  ['aligned_5flowp_5fuvec2',['aligned_lowp_uvec2',['../a00303.html#ga6f94fcd28dde906fc6cad5f742b55c1a',1,'glm']]],\n  ['aligned_5flowp_5fuvec3',['aligned_lowp_uvec3',['../a00303.html#ga9e9f006970b1a00862e3e6e599eedd4c',1,'glm']]],\n  ['aligned_5flowp_5fuvec4',['aligned_lowp_uvec4',['../a00303.html#ga46b1b0b9eb8625a5d69137bd66cd13dc',1,'glm']]],\n  ['aligned_5flowp_5fvec1',['aligned_lowp_vec1',['../a00303.html#gab34aee3d5e121c543fea11d2c50ecc43',1,'glm']]],\n  ['aligned_5flowp_5fvec2',['aligned_lowp_vec2',['../a00303.html#ga53ac5d252317f1fa43c2ef921857bf13',1,'glm']]],\n  ['aligned_5flowp_5fvec3',['aligned_lowp_vec3',['../a00303.html#ga98f0b5cd65fce164ff1367c2a3b3aa1e',1,'glm']]],\n  ['aligned_5flowp_5fvec4',['aligned_lowp_vec4',['../a00303.html#ga82f7275d6102593a69ce38cdad680409',1,'glm']]],\n  ['aligned_5fmat2',['aligned_mat2',['../a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9',1,'glm']]],\n  ['aligned_5fmat2x2',['aligned_mat2x2',['../a00303.html#gabb04f459d81d753d278b2072e2375e8e',1,'glm']]],\n  ['aligned_5fmat2x3',['aligned_mat2x3',['../a00303.html#ga832476bb1c59ef673db37433ff34e399',1,'glm']]],\n  ['aligned_5fmat2x4',['aligned_mat2x4',['../a00303.html#gadab11a7504430825b648ff7c7e36b725',1,'glm']]],\n  ['aligned_5fmat3',['aligned_mat3',['../a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714',1,'glm']]],\n  ['aligned_5fmat3x2',['aligned_mat3x2',['../a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed',1,'glm']]],\n  ['aligned_5fmat3x3',['aligned_mat3x3',['../a00303.html#gadb065dbe5c11271fef8cf2ea8608f187',1,'glm']]],\n  ['aligned_5fmat3x4',['aligned_mat3x4',['../a00303.html#ga88061c72c997b94c420f2b0a60d9df26',1,'glm']]],\n  ['aligned_5fmat4',['aligned_mat4',['../a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8',1,'glm']]],\n  ['aligned_5fmat4x2',['aligned_mat4x2',['../a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3',1,'glm']]],\n  ['aligned_5fmat4x3',['aligned_mat4x3',['../a00303.html#ga452bbbfd26e244de216e4d004d50bb74',1,'glm']]],\n  ['aligned_5fmat4x4',['aligned_mat4x4',['../a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1',1,'glm']]],\n  ['aligned_5fmediump_5fbvec1',['aligned_mediump_bvec1',['../a00303.html#gadd3b8bd71a758f7fb0da8e525156f34e',1,'glm']]],\n  ['aligned_5fmediump_5fbvec2',['aligned_mediump_bvec2',['../a00303.html#gacb183eb5e67ec0d0ea5a016cba962810',1,'glm']]],\n  ['aligned_5fmediump_5fbvec3',['aligned_mediump_bvec3',['../a00303.html#gacfa4a542f1b20a5b63ad702dfb6fd587',1,'glm']]],\n  ['aligned_5fmediump_5fbvec4',['aligned_mediump_bvec4',['../a00303.html#ga91bc1f513bb9b0fd60281d57ded9a48c',1,'glm']]],\n  ['aligned_5fmediump_5fdmat2',['aligned_mediump_dmat2',['../a00303.html#ga62a2dfd668c91072b72c3109fc6cda28',1,'glm']]],\n  ['aligned_5fmediump_5fdmat2x2',['aligned_mediump_dmat2x2',['../a00303.html#ga9b7feec247d378dd407ba81f56ea96c8',1,'glm']]],\n  ['aligned_5fmediump_5fdmat2x3',['aligned_mediump_dmat2x3',['../a00303.html#gafcb189f4f93648fe7ca802ca4aca2eb8',1,'glm']]],\n  ['aligned_5fmediump_5fdmat2x4',['aligned_mediump_dmat2x4',['../a00303.html#ga92f8873e3bbd5ca1323c8bbe5725cc5e',1,'glm']]],\n  ['aligned_5fmediump_5fdmat3',['aligned_mediump_dmat3',['../a00303.html#ga6dc2832b747c00e0a0df621aba196960',1,'glm']]],\n  ['aligned_5fmediump_5fdmat3x2',['aligned_mediump_dmat3x2',['../a00303.html#ga5a97f0355d801de3444d42c1d5b40438',1,'glm']]],\n  ['aligned_5fmediump_5fdmat3x3',['aligned_mediump_dmat3x3',['../a00303.html#ga649d0acf01054b17e679cf00e150e025',1,'glm']]],\n  ['aligned_5fmediump_5fdmat3x4',['aligned_mediump_dmat3x4',['../a00303.html#ga45e155a4840f69b2fa4ed8047a676860',1,'glm']]],\n  ['aligned_5fmediump_5fdmat4',['aligned_mediump_dmat4',['../a00303.html#ga8a9376d82f0e946e25137eb55543e6ce',1,'glm']]],\n  ['aligned_5fmediump_5fdmat4x2',['aligned_mediump_dmat4x2',['../a00303.html#gabc25e547f4de4af62403492532cd1b6d',1,'glm']]],\n  ['aligned_5fmediump_5fdmat4x3',['aligned_mediump_dmat4x3',['../a00303.html#gae84f4763ecdc7457ecb7930bad12057c',1,'glm']]],\n  ['aligned_5fmediump_5fdmat4x4',['aligned_mediump_dmat4x4',['../a00303.html#gaa292ebaa907afdecb2d5967fb4fb1247',1,'glm']]],\n  ['aligned_5fmediump_5fdvec1',['aligned_mediump_dvec1',['../a00303.html#ga7180b685c581adb224406a7f831608e3',1,'glm']]],\n  ['aligned_5fmediump_5fdvec2',['aligned_mediump_dvec2',['../a00303.html#ga9af1eabe22f569e70d9893be72eda0f5',1,'glm']]],\n  ['aligned_5fmediump_5fdvec3',['aligned_mediump_dvec3',['../a00303.html#ga058e7ddab1428e47f2197bdd3a5a6953',1,'glm']]],\n  ['aligned_5fmediump_5fdvec4',['aligned_mediump_dvec4',['../a00303.html#gaffd747ea2aea1e69c2ecb04e68521b21',1,'glm']]],\n  ['aligned_5fmediump_5fivec1',['aligned_mediump_ivec1',['../a00303.html#ga20e63dd980b81af10cadbbe219316650',1,'glm']]],\n  ['aligned_5fmediump_5fivec2',['aligned_mediump_ivec2',['../a00303.html#gaea13d89d49daca2c796aeaa82fc2c2f2',1,'glm']]],\n  ['aligned_5fmediump_5fivec3',['aligned_mediump_ivec3',['../a00303.html#gabbf0f15e9c3d9868e43241ad018f82bd',1,'glm']]],\n  ['aligned_5fmediump_5fivec4',['aligned_mediump_ivec4',['../a00303.html#ga6099dd7878d0a78101a4250d8cd2d736',1,'glm']]],\n  ['aligned_5fmediump_5fmat2',['aligned_mediump_mat2',['../a00303.html#gaf6f041b212c57664d88bc6aefb7e36f3',1,'glm']]],\n  ['aligned_5fmediump_5fmat2x2',['aligned_mediump_mat2x2',['../a00303.html#ga04bf49316ee777d42fcfe681ee37d7be',1,'glm']]],\n  ['aligned_5fmediump_5fmat2x3',['aligned_mediump_mat2x3',['../a00303.html#ga26a0b61e444a51a37b9737cf4d84291b',1,'glm']]],\n  ['aligned_5fmediump_5fmat2x4',['aligned_mediump_mat2x4',['../a00303.html#ga163facc9ed2692ea1300ed57c5d12b17',1,'glm']]],\n  ['aligned_5fmediump_5fmat3',['aligned_mediump_mat3',['../a00303.html#ga3b76ba17ae5d53debeb6f7e55919a57c',1,'glm']]],\n  ['aligned_5fmediump_5fmat3x2',['aligned_mediump_mat3x2',['../a00303.html#ga80dee705d714300378e0847f45059097',1,'glm']]],\n  ['aligned_5fmediump_5fmat3x3',['aligned_mediump_mat3x3',['../a00303.html#ga721f5404caf40d68962dcc0529de71d9',1,'glm']]],\n  ['aligned_5fmediump_5fmat3x4',['aligned_mediump_mat3x4',['../a00303.html#ga98f4dc6722a2541a990918c074075359',1,'glm']]],\n  ['aligned_5fmediump_5fmat4',['aligned_mediump_mat4',['../a00303.html#gaeefee8317192174596852ce19b602720',1,'glm']]],\n  ['aligned_5fmediump_5fmat4x2',['aligned_mediump_mat4x2',['../a00303.html#ga46f372a006345c252a41267657cc22c0',1,'glm']]],\n  ['aligned_5fmediump_5fmat4x3',['aligned_mediump_mat4x3',['../a00303.html#ga0effece4545acdebdc2a5512a303110e',1,'glm']]],\n  ['aligned_5fmediump_5fmat4x4',['aligned_mediump_mat4x4',['../a00303.html#ga312864244cae4e8f10f478cffd0f76de',1,'glm']]],\n  ['aligned_5fmediump_5fuvec1',['aligned_mediump_uvec1',['../a00303.html#gacb78126ea2eb779b41c7511128ff1283',1,'glm']]],\n  ['aligned_5fmediump_5fuvec2',['aligned_mediump_uvec2',['../a00303.html#ga081d53e0a71443d0b68ea61c870f9adc',1,'glm']]],\n  ['aligned_5fmediump_5fuvec3',['aligned_mediump_uvec3',['../a00303.html#gad6fc921bdde2bdbc7e09b028e1e9b379',1,'glm']]],\n  ['aligned_5fmediump_5fuvec4',['aligned_mediump_uvec4',['../a00303.html#ga73ea0c1ba31580e107d21270883f51fc',1,'glm']]],\n  ['aligned_5fmediump_5fvec1',['aligned_mediump_vec1',['../a00303.html#ga6b797eec76fa471e300158f3453b3b2e',1,'glm']]],\n  ['aligned_5fmediump_5fvec2',['aligned_mediump_vec2',['../a00303.html#ga026a55ddbf2bafb1432f1157a2708616',1,'glm']]],\n  ['aligned_5fmediump_5fvec3',['aligned_mediump_vec3',['../a00303.html#ga3a25e494173f6a64637b08a1b50a2132',1,'glm']]],\n  ['aligned_5fmediump_5fvec4',['aligned_mediump_vec4',['../a00303.html#ga320d1c661cff2ef214eb50241f2928b2',1,'glm']]],\n  ['aligned_5fuvec1',['aligned_uvec1',['../a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548',1,'glm']]],\n  ['aligned_5fuvec2',['aligned_uvec2',['../a00303.html#ga074137e3be58528d67041c223d49f398',1,'glm']]],\n  ['aligned_5fuvec3',['aligned_uvec3',['../a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0',1,'glm']]],\n  ['aligned_5fuvec4',['aligned_uvec4',['../a00303.html#gabf842c45eea186170c267a328e3f3b7d',1,'glm']]],\n  ['aligned_5fvec1',['aligned_vec1',['../a00303.html#ga05e6d4c908965d04191c2070a8d0a65e',1,'glm']]],\n  ['aligned_5fvec2',['aligned_vec2',['../a00303.html#ga0682462f8096a226773e20fac993cde5',1,'glm']]],\n  ['aligned_5fvec3',['aligned_vec3',['../a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0',1,'glm']]],\n  ['aligned_5fvec4',['aligned_vec4',['../a00303.html#ga85d89e83cb8137e1be1446de8c3b643a',1,'glm']]],\n  ['all',['all',['../a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd',1,'glm']]],\n  ['angle',['angle',['../a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8',1,'glm::angle(qua&lt; T, Q &gt; const &amp;x)'],['../a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1',1,'glm::angle(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['angleaxis',['angleAxis',['../a00257.html#ga5c0095cfcb218c75a4b79d7687950036',1,'glm']]],\n  ['any',['any',['../a00374.html#ga911b3f8e41459dd551ccb6d385d91061',1,'glm']]],\n  ['arecollinear',['areCollinear',['../a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4',1,'glm']]],\n  ['areorthogonal',['areOrthogonal',['../a00368.html#gac7b95b3f798e3c293262b2bdaad47c57',1,'glm']]],\n  ['areorthonormal',['areOrthonormal',['../a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3',1,'glm']]],\n  ['asec',['asec',['../a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10',1,'glm']]],\n  ['asech',['asech',['../a00301.html#gaec7586dccfe431f850d006f3824b8ca6',1,'glm']]],\n  ['asin',['asin',['../a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73',1,'glm']]],\n  ['asinh',['asinh',['../a00373.html#ga3ef16b501ee859fddde88e22192a5950',1,'glm']]],\n  ['associated_5fmin_5fmax_2ehpp',['associated_min_max.hpp',['../a00007.html',1,'']]],\n  ['associatedmax',['associatedMax',['../a00308.html#ga7d9c8785230c8db60f72ec8975f1ba45',1,'glm::associatedMax(T x, U a, T y, U b)'],['../a00308.html#ga5c6758bc50aa7fbe700f87123a045aad',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)'],['../a00308.html#ga0d169d6ce26b03248df175f39005d77f',1,'glm::associatedMax(T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b)'],['../a00308.html#ga4086269afabcb81dd7ded33cb3448653',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)'],['../a00308.html#gaec891e363d91abbf3a4443cf2f652209',1,'glm::associatedMax(T x, U a, T y, U b, T z, U c)'],['../a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)'],['../a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba',1,'glm::associatedMax(T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c)'],['../a00308.html#ga19f59d1141a51a3b2108a9807af78f7f',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c)'],['../a00308.html#ga3038ffcb43eaa6af75897a99a5047ccc',1,'glm::associatedMax(T x, U a, T y, U b, T z, U c, T w, U d)'],['../a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)'],['../a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d',1,'glm::associatedMax(T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)'],['../a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)']]],\n  ['associatedmin',['associatedMin',['../a00308.html#gacc01bd272359572fc28437ae214a02df',1,'glm::associatedMin(T x, U a, T y, U b)'],['../a00308.html#gac2f0dff90948f2e44386a5eafd941d1c',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)'],['../a00308.html#gacfec519c820331d023ef53a511749319',1,'glm::associatedMin(T x, const vec&lt; L, U, Q &gt; &amp;a, T y, const vec&lt; L, U, Q &gt; &amp;b)'],['../a00308.html#ga4757c7cab2d809124a8525d0a9deeb37',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)'],['../a00308.html#gad0aa8f86259a26d839d34a3577a923fc',1,'glm::associatedMin(T x, U a, T y, U b, T z, U c)'],['../a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)'],['../a00308.html#ga432224ebe2085eaa2b63a077ecbbbff6',1,'glm::associatedMin(T x, U a, T y, U b, T z, U c, T w, U d)'],['../a00308.html#ga66b08118bc88f0494bcacb7cdb940556',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)'],['../a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68',1,'glm::associatedMin(T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)'],['../a00308.html#ga2db7e351994baee78540a562d4bb6d3b',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)']]],\n  ['atan',['atan',['../a00373.html#gac61629f3a4aa14057e7a8cae002291db',1,'glm::atan(vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;x)'],['../a00373.html#ga5229f087eaccbc466f1c609ce3107b95',1,'glm::atan(vec&lt; L, T, Q &gt; const &amp;y_over_x)']]],\n  ['atan2',['atan2',['../a00315.html#gac63011205bf6d0be82589dc56dd26708',1,'glm::atan2(T x, T y)'],['../a00315.html#ga83bc41bd6f89113ee8006576b12bfc50',1,'glm::atan2(const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y)'],['../a00315.html#gac39314f5087e7e51e592897cabbc1927',1,'glm::atan2(const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y)'],['../a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3',1,'glm::atan2(const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y)']]],\n  ['atanh',['atanh',['../a00373.html#gabc925650e618357d07da255531658b87',1,'glm']]],\n  ['axis',['axis',['../a00257.html#ga764254f10248b505e936e5309a88c23d',1,'glm']]],\n  ['axisangle',['axisAngle',['../a00337.html#gafefe32ce5a90a135287ba34fac3623bc',1,'glm']]],\n  ['axisanglematrix',['axisAngleMatrix',['../a00337.html#ga3a788e2f5223397df5c426413ecc2f6b',1,'glm']]],\n  ['angle_20and_20trigonometry_20functions',['Angle and Trigonometry Functions',['../a00373.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_1.js",
    "content": "var searchData=\n[\n  ['backeasein',['backEaseIn',['../a00318.html#ga93cddcdb6347a44d5927cc2bf2570816',1,'glm::backEaseIn(genType const &amp;a)'],['../a00318.html#ga33777c9dd98f61d9472f96aafdf2bd36',1,'glm::backEaseIn(genType const &amp;a, genType const &amp;o)']]],\n  ['backeaseinout',['backEaseInOut',['../a00318.html#gace6d24722a2f6722b56398206eb810bb',1,'glm::backEaseInOut(genType const &amp;a)'],['../a00318.html#ga68a7b760f2afdfab298d5cd6d7611fb1',1,'glm::backEaseInOut(genType const &amp;a, genType const &amp;o)']]],\n  ['backeaseout',['backEaseOut',['../a00318.html#gabf25069fa906413c858fd46903d520b9',1,'glm::backEaseOut(genType const &amp;a)'],['../a00318.html#ga640c1ac6fe9d277a197da69daf60ee4f',1,'glm::backEaseOut(genType const &amp;a, genType const &amp;o)']]],\n  ['ballrand',['ballRand',['../a00300.html#ga7c53b7797f3147af68a11c767679fa3f',1,'glm']]],\n  ['bit_2ehpp',['bit.hpp',['../a00008.html',1,'']]],\n  ['bitcount',['bitCount',['../a00370.html#ga44abfe3379e11cbd29425a843420d0d6',1,'glm::bitCount(genType v)'],['../a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5',1,'glm::bitCount(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['bitfield_2ehpp',['bitfield.hpp',['../a00009.html',1,'']]],\n  ['bitfielddeinterleave',['bitfieldDeinterleave',['../a00288.html#ga091d934233a2e121df91b8c7230357c8',1,'glm::bitfieldDeinterleave(glm::uint16 x)'],['../a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98',1,'glm::bitfieldDeinterleave(glm::uint32 x)'],['../a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60',1,'glm::bitfieldDeinterleave(glm::uint64 x)']]],\n  ['bitfieldextract',['bitfieldExtract',['../a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2',1,'glm']]],\n  ['bitfieldfillone',['bitfieldFillOne',['../a00288.html#ga46f9295abe3b5c7658f5b13c7f819f0a',1,'glm::bitfieldFillOne(genIUType Value, int FirstBit, int BitCount)'],['../a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1',1,'glm::bitfieldFillOne(vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)']]],\n  ['bitfieldfillzero',['bitfieldFillZero',['../a00288.html#ga697b86998b7d74ee0a69d8e9f8819fee',1,'glm::bitfieldFillZero(genIUType Value, int FirstBit, int BitCount)'],['../a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2',1,'glm::bitfieldFillZero(vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)']]],\n  ['bitfieldinsert',['bitfieldInsert',['../a00370.html#ga2e82992340d421fadb61a473df699b20',1,'glm']]],\n  ['bitfieldinterleave',['bitfieldInterleave',['../a00288.html#ga24cad0069f9a0450abd80b3e89501adf',1,'glm::bitfieldInterleave(int8 x, int8 y)'],['../a00288.html#ga9a4976a529aec2cee56525e1165da484',1,'glm::bitfieldInterleave(uint8 x, uint8 y)'],['../a00288.html#ga4a76bbca39c40153f3203d0a1926e142',1,'glm::bitfieldInterleave(u8vec2 const &amp;v)'],['../a00288.html#gac51c33a394593f0631fa3aa5bb778809',1,'glm::bitfieldInterleave(int16 x, int16 y)'],['../a00288.html#ga94f3646a5667f4be56f8dcf3310e963f',1,'glm::bitfieldInterleave(uint16 x, uint16 y)'],['../a00288.html#ga406c4ee56af4ca37a73f449f154eca3e',1,'glm::bitfieldInterleave(u16vec2 const &amp;v)'],['../a00288.html#gaebb756a24a0784e3d6fba8bd011ab77a',1,'glm::bitfieldInterleave(int32 x, int32 y)'],['../a00288.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd',1,'glm::bitfieldInterleave(uint32 x, uint32 y)'],['../a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78',1,'glm::bitfieldInterleave(u32vec2 const &amp;v)'],['../a00288.html#ga8fdb724dccd4a07d57efc01147102137',1,'glm::bitfieldInterleave(int8 x, int8 y, int8 z)'],['../a00288.html#ga9fc2a0dd5dcf8b00e113f272a5feca93',1,'glm::bitfieldInterleave(uint8 x, uint8 y, uint8 z)'],['../a00288.html#gaa901c36a842fa5d126ea650549f17b24',1,'glm::bitfieldInterleave(int16 x, int16 y, int16 z)'],['../a00288.html#ga3afd6d38881fe3948c53d4214d2197fd',1,'glm::bitfieldInterleave(uint16 x, uint16 y, uint16 z)'],['../a00288.html#gad2075d96a6640121edaa98ea534102ca',1,'glm::bitfieldInterleave(int32 x, int32 y, int32 z)'],['../a00288.html#gab19fbc739fc0cf7247978602c36f7da8',1,'glm::bitfieldInterleave(uint32 x, uint32 y, uint32 z)'],['../a00288.html#ga8a44ae22f5c953b296c42d067dccbe6d',1,'glm::bitfieldInterleave(int8 x, int8 y, int8 z, int8 w)'],['../a00288.html#ga14bb274d54a3c26f4919dd7ed0dd0c36',1,'glm::bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w)'],['../a00288.html#ga180a63161e1319fbd5a53c84d0429c7a',1,'glm::bitfieldInterleave(int16 x, int16 y, int16 z, int16 w)'],['../a00288.html#gafca8768671a14c8016facccb66a89f26',1,'glm::bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w)']]],\n  ['bitfieldreverse',['bitfieldReverse',['../a00370.html#ga750a1d92464489b7711dee67aa3441b6',1,'glm']]],\n  ['bitfieldrotateleft',['bitfieldRotateLeft',['../a00288.html#ga2eb49678a344ce1495bdb5586d9896b9',1,'glm::bitfieldRotateLeft(genIUType In, int Shift)'],['../a00288.html#gae186317091b1a39214ebf79008d44a1e',1,'glm::bitfieldRotateLeft(vec&lt; L, T, Q &gt; const &amp;In, int Shift)']]],\n  ['bitfieldrotateright',['bitfieldRotateRight',['../a00288.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca',1,'glm::bitfieldRotateRight(genIUType In, int Shift)'],['../a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88',1,'glm::bitfieldRotateRight(vec&lt; L, T, Q &gt; const &amp;In, int Shift)']]],\n  ['bool1',['bool1',['../a00315.html#gaddcd7aa2e30e61af5b38660613d3979e',1,'glm']]],\n  ['bool1x1',['bool1x1',['../a00315.html#ga7f895c936f0c29c8729afbbf22806090',1,'glm']]],\n  ['bool2',['bool2',['../a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9',1,'glm']]],\n  ['bool2x2',['bool2x2',['../a00315.html#gadb3703955e513632f98ba12fe051ba3e',1,'glm']]],\n  ['bool2x3',['bool2x3',['../a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0',1,'glm']]],\n  ['bool2x4',['bool2x4',['../a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f',1,'glm']]],\n  ['bool3',['bool3',['../a00315.html#ga99629f818737f342204071ef8296b2ed',1,'glm']]],\n  ['bool3x2',['bool3x2',['../a00315.html#gac7d7311f7e0fa8b6163d96dab033a755',1,'glm']]],\n  ['bool3x3',['bool3x3',['../a00315.html#ga6c97b99aac3e302053ffb58aace9033c',1,'glm']]],\n  ['bool3x4',['bool3x4',['../a00315.html#gae7d6b679463d37d6c527d478fb470fdf',1,'glm']]],\n  ['bool4',['bool4',['../a00315.html#ga13c3200b82708f73faac6d7f09ec91a3',1,'glm']]],\n  ['bool4x2',['bool4x2',['../a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0',1,'glm']]],\n  ['bool4x3',['bool4x3',['../a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe',1,'glm']]],\n  ['bool4x4',['bool4x4',['../a00315.html#ga7d2a7d13986602ae2896bfaa394235d4',1,'glm']]],\n  ['bounceeasein',['bounceEaseIn',['../a00318.html#gaac30767f2e430b0c3fc859a4d59c7b5b',1,'glm']]],\n  ['bounceeaseinout',['bounceEaseInOut',['../a00318.html#gadf9f38eff1e5f4c2fa5b629a25ae413e',1,'glm']]],\n  ['bounceeaseout',['bounceEaseOut',['../a00318.html#ga94007005ff0dcfa0749ebfa2aec540b2',1,'glm']]],\n  ['bvec1',['bvec1',['../a00265.html#ga067af382616d93f8e850baae5154cdcc',1,'glm']]],\n  ['bvec2',['bvec2',['../a00281.html#ga0b6123e03653cc1bbe366fc55238a934',1,'glm']]],\n  ['bvec3',['bvec3',['../a00281.html#ga197151b72dfaf289daf98b361760ffe7',1,'glm']]],\n  ['bvec4',['bvec4',['../a00281.html#ga9f7b9712373ff4342d9114619b55f5e3',1,'glm']]],\n  ['byte',['byte',['../a00354.html#ga3005cb0d839d546c616becfa6602c607',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_10.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_10.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_10.js",
    "content": "var searchData=\n[\n  ['stable_20extensions',['Stable extensions',['../a00285.html',1,'']]],\n  ['saturate',['saturate',['../a00315.html#ga0fd09e616d122bc2ed9726682ffd44b7',1,'glm::saturate(T x)'],['../a00315.html#gaee97b8001c794a78a44f5d59f62a8aba',1,'glm::saturate(const vec&lt; 2, T, Q &gt; &amp;x)'],['../a00315.html#ga39bfe3a421286ee31680d45c31ccc161',1,'glm::saturate(const vec&lt; 3, T, Q &gt; &amp;x)'],['../a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183',1,'glm::saturate(const vec&lt; 4, T, Q &gt; &amp;x)']]],\n  ['saturation',['saturation',['../a00312.html#ga01a97152b44e1550edcac60bd849e884',1,'glm::saturation(T const s)'],['../a00312.html#ga2156cea600e90148ece5bc96fd6db43a',1,'glm::saturation(T const s, vec&lt; 3, T, Q &gt; const &amp;color)'],['../a00312.html#gaba0eacee0736dae860e9371cc1ae4785',1,'glm::saturation(T const s, vec&lt; 4, T, Q &gt; const &amp;color)']]],\n  ['scalar_5fcommon_2ehpp',['scalar_common.hpp',['../a00144.html',1,'']]],\n  ['scalar_5fconstants_2ehpp',['scalar_constants.hpp',['../a00145.html',1,'']]],\n  ['scalar_5fint_5fsized_2ehpp',['scalar_int_sized.hpp',['../a00146.html',1,'']]],\n  ['scalar_5finteger_2ehpp',['scalar_integer.hpp',['../a00147.html',1,'']]],\n  ['scalar_5fmultiplication_2ehpp',['scalar_multiplication.hpp',['../a00148.html',1,'']]],\n  ['scalar_5fuint_5fsized_2ehpp',['scalar_uint_sized.hpp',['../a00151.html',1,'']]],\n  ['scalar_5fulp_2ehpp',['scalar_ulp.hpp',['../a00152.html',1,'']]],\n  ['scale',['scale',['../a00247.html#ga05051adbee603fb3c5095d8cf5cc229b',1,'glm::scale(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e',1,'glm::scale(mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00362.html#gafbeefee8fec884d566e4ada0049174d7',1,'glm::scale(vec&lt; 3, T, Q &gt; const &amp;v)']]],\n  ['scalebias',['scaleBias',['../a00363.html#gabf249498b236e62c983d90d30d63c99c',1,'glm::scaleBias(T scale, T bias)'],['../a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e',1,'glm::scaleBias(mat&lt; 4, 4, T, Q &gt; const &amp;m, T scale, T bias)']]],\n  ['sec',['sec',['../a00301.html#gae4bcbebee670c5ea155f0777b3acbd84',1,'glm']]],\n  ['sech',['sech',['../a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae',1,'glm']]],\n  ['shearx',['shearX',['../a00341.html#ga2a118ece5db1e2022112b954846012af',1,'glm']]],\n  ['shearx2d',['shearX2D',['../a00363.html#gabf714b8a358181572b32a45555f71948',1,'glm']]],\n  ['shearx3d',['shearX3D',['../a00363.html#ga73e867c6cd4d700fe2054437e56106c4',1,'glm']]],\n  ['sheary',['shearY',['../a00341.html#ga717f1833369c1ac4a40e4ac015af885e',1,'glm']]],\n  ['sheary2d',['shearY2D',['../a00363.html#gac7998d0763d9181550c77e8af09a182c',1,'glm']]],\n  ['sheary3d',['shearY3D',['../a00363.html#gade5bb65ffcb513973db1a1314fb5cfac',1,'glm']]],\n  ['shearz3d',['shearZ3D',['../a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255',1,'glm']]],\n  ['shortmix',['shortMix',['../a00352.html#gadc576cc957adc2a568cdcbc3799175bc',1,'glm']]],\n  ['sign',['sign',['../a00241.html#ga1e2e5cfff800056540e32f6c9b604b28',1,'glm::sign(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0',1,'glm::sign(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;base)']]],\n  ['simplex',['simplex',['../a00297.html#ga8122468c69015ff397349a7dcc638b27',1,'glm']]],\n  ['sin',['sin',['../a00373.html#ga29747fd108cb7292ae5a284f69691a69',1,'glm']]],\n  ['sineeasein',['sineEaseIn',['../a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf',1,'glm']]],\n  ['sineeaseinout',['sineEaseInOut',['../a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7',1,'glm']]],\n  ['sineeaseout',['sineEaseOut',['../a00318.html#gab3e454f883afc1606ef91363881bf5a3',1,'glm']]],\n  ['sinh',['sinh',['../a00373.html#gac7c39ff21809e281552b4dbe46f4a39d',1,'glm']]],\n  ['sint',['sint',['../a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40',1,'glm']]],\n  ['size1',['size1',['../a00359.html#gaeb877ac8f9a3703961736c1c5072cf68',1,'glm']]],\n  ['size1_5ft',['size1_t',['../a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f',1,'glm']]],\n  ['size2',['size2',['../a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe',1,'glm']]],\n  ['size2_5ft',['size2_t',['../a00359.html#ga5976c25657d4e2b5f73f39364c3845d6',1,'glm']]],\n  ['size3',['size3',['../a00359.html#gae1c72956d0359b0db332c6c8774d3b04',1,'glm']]],\n  ['size3_5ft',['size3_t',['../a00359.html#gaf2654983c60d641fd3808e65a8dfad8d',1,'glm']]],\n  ['size4',['size4',['../a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa',1,'glm']]],\n  ['size4_5ft',['size4_t',['../a00359.html#gaa423efcea63675a2df26990dbcb58656',1,'glm']]],\n  ['slerp',['slerp',['../a00248.html#gae7fc3c945be366b9942b842f55da428a',1,'glm::slerp(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)'],['../a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee',1,'glm::slerp(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, T const &amp;a)']]],\n  ['smoothstep',['smoothstep',['../a00241.html#ga562edf7eca082cc5b7a0aaf180436daf',1,'glm']]],\n  ['sphericalrand',['sphericalRand',['../a00300.html#ga22f90fcaccdf001c516ca90f6428e138',1,'glm']]],\n  ['spline_2ehpp',['spline.hpp',['../a00154.html',1,'']]],\n  ['sqrt',['sqrt',['../a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c',1,'glm::sqrt(vec&lt; L, T, Q &gt; const &amp;v)'],['../a00256.html#ga64b7b255ed7bcba616fe6b44470b022e',1,'glm::sqrt(qua&lt; T, Q &gt; const &amp;q)'],['../a00330.html#ga7ce36693a75879ccd9bb10167cfa722d',1,'glm::sqrt(int x)'],['../a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc',1,'glm::sqrt(uint x)']]],\n  ['squad',['squad',['../a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35',1,'glm']]],\n  ['std_5fbased_5ftype_2ehpp',['std_based_type.hpp',['../a00155.html',1,'']]],\n  ['step',['step',['../a00241.html#ga015a1261ff23e12650211aa872863cce',1,'glm::step(genType edge, genType x)'],['../a00241.html#ga8f9a911a48ef244b51654eaefc81c551',1,'glm::step(T edge, vec&lt; L, T, Q &gt; const &amp;x)'],['../a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f',1,'glm::step(vec&lt; L, T, Q &gt; const &amp;edge, vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['string_5fcast_2ehpp',['string_cast.hpp',['../a00156.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_11.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_11.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_11.js",
    "content": "var searchData=\n[\n  ['tan',['tan',['../a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f',1,'glm']]],\n  ['tanh',['tanh',['../a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1',1,'glm']]],\n  ['texture_2ehpp',['texture.hpp',['../a00157.html',1,'']]],\n  ['third',['third',['../a00290.html#ga3077c6311010a214b69ddc8214ec13b5',1,'glm']]],\n  ['three_5fover_5ftwo_5fpi',['three_over_two_pi',['../a00290.html#gae94950df74b0ce382b1fc1d978ef7394',1,'glm']]],\n  ['to_5fstring',['to_string',['../a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5',1,'glm']]],\n  ['tomat3',['toMat3',['../a00352.html#gaab0afabb894b28a983fb8ec610409d56',1,'glm']]],\n  ['tomat4',['toMat4',['../a00352.html#gadfa2c77094e8cc9adad321d938855ffb',1,'glm']]],\n  ['toquat',['toQuat',['../a00352.html#ga798de5d186499c9a9231cd92c8afaef1',1,'glm::toQuat(mat&lt; 3, 3, T, Q &gt; const &amp;x)'],['../a00352.html#ga5eb36f51e1638e710451eba194dbc011',1,'glm::toQuat(mat&lt; 4, 4, T, Q &gt; const &amp;x)']]],\n  ['transform_2ehpp',['transform.hpp',['../a00158.html',1,'']]],\n  ['transform2_2ehpp',['transform2.hpp',['../a00159.html',1,'']]],\n  ['translate',['translate',['../a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284',1,'glm::translate(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00341.html#gaf4573ae47c80938aa9053ef6a33755ab',1,'glm::translate(mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00362.html#ga309a30e652e58c396e2c3d4db3ee7658',1,'glm::translate(vec&lt; 3, T, Q &gt; const &amp;v)']]],\n  ['transpose',['transpose',['../a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35',1,'glm']]],\n  ['trianglenormal',['triangleNormal',['../a00344.html#gaff1cb5496925dfa7962df457772a7f35',1,'glm']]],\n  ['trigonometric_2ehpp',['trigonometric.hpp',['../a00160.html',1,'']]],\n  ['trunc',['trunc',['../a00241.html#gaf9375e3e06173271d49e6ffa3a334259',1,'glm']]],\n  ['tweakedinfiniteperspective',['tweakedInfinitePerspective',['../a00243.html#gaaeacc04a2a6f4b18c5899d37e7bb3ef9',1,'glm::tweakedInfinitePerspective(T fovy, T aspect, T near)'],['../a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8',1,'glm::tweakedInfinitePerspective(T fovy, T aspect, T near, T ep)']]],\n  ['two_5fover_5fpi',['two_over_pi',['../a00290.html#ga74eadc8a211253079683219a3ea0462a',1,'glm']]],\n  ['two_5fover_5froot_5fpi',['two_over_root_pi',['../a00290.html#ga5827301817640843cf02026a8d493894',1,'glm']]],\n  ['two_5fpi',['two_pi',['../a00290.html#gaa5276a4617566abcfe49286f40e3a256',1,'glm']]],\n  ['two_5fthirds',['two_thirds',['../a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5',1,'glm']]],\n  ['type_5fmat2x2_2ehpp',['type_mat2x2.hpp',['../a00165.html',1,'']]],\n  ['type_5fmat2x3_2ehpp',['type_mat2x3.hpp',['../a00166.html',1,'']]],\n  ['type_5fmat2x4_2ehpp',['type_mat2x4.hpp',['../a00167.html',1,'']]],\n  ['type_5fmat3x2_2ehpp',['type_mat3x2.hpp',['../a00168.html',1,'']]],\n  ['type_5fmat3x3_2ehpp',['type_mat3x3.hpp',['../a00169.html',1,'']]],\n  ['type_5fmat3x4_2ehpp',['type_mat3x4.hpp',['../a00170.html',1,'']]],\n  ['type_5fmat4x2_2ehpp',['type_mat4x2.hpp',['../a00171.html',1,'']]],\n  ['type_5fmat4x3_2ehpp',['type_mat4x3.hpp',['../a00172.html',1,'']]],\n  ['type_5fmat4x4_2ehpp',['type_mat4x4.hpp',['../a00173.html',1,'']]],\n  ['type_5fprecision_2ehpp',['type_precision.hpp',['../a00174.html',1,'']]],\n  ['type_5fptr_2ehpp',['type_ptr.hpp',['../a00175.html',1,'']]],\n  ['type_5fquat_2ehpp',['type_quat.hpp',['../a00176.html',1,'']]],\n  ['type_5ftrait_2ehpp',['type_trait.hpp',['../a00177.html',1,'']]],\n  ['type_5fvec1_2ehpp',['type_vec1.hpp',['../a00178.html',1,'']]],\n  ['type_5fvec2_2ehpp',['type_vec2.hpp',['../a00179.html',1,'']]],\n  ['type_5fvec3_2ehpp',['type_vec3.hpp',['../a00180.html',1,'']]],\n  ['type_5fvec4_2ehpp',['type_vec4.hpp',['../a00181.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_12.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_12.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_12.js",
    "content": "var searchData=\n[\n  ['u16',['u16',['../a00304.html#gaa2d7acc0adb536fab71fe261232a40ff',1,'glm']]],\n  ['u16vec1',['u16vec1',['../a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5',1,'glm::u16vec1()'],['../a00346.html#ga52cc069a92e126c3a8dcde93424d2ef0',1,'glm::gtx::u16vec1()']]],\n  ['u16vec2',['u16vec2',['../a00304.html#ga2a78447eb9d66a114b193f4a25899c16',1,'glm']]],\n  ['u16vec3',['u16vec3',['../a00304.html#ga1c522ca821c27b862fe51cf4024b064b',1,'glm']]],\n  ['u16vec4',['u16vec4',['../a00304.html#ga529496d75775fb656a07993ea9af2450',1,'glm']]],\n  ['u32',['u32',['../a00304.html#ga8165913e068444f7842302d40ba897b9',1,'glm']]],\n  ['u32vec1',['u32vec1',['../a00304.html#gae627372cfd5f20dd87db490387b71195',1,'glm::u32vec1()'],['../a00346.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3',1,'glm::gtx::u32vec1()']]],\n  ['u32vec2',['u32vec2',['../a00304.html#ga2a266e46ee218d0c680f12b35c500cc0',1,'glm']]],\n  ['u32vec3',['u32vec3',['../a00304.html#gae267358ff2a41d156d97f5762630235a',1,'glm']]],\n  ['u32vec4',['u32vec4',['../a00304.html#ga31cef34e4cd04840c54741ff2f7005f0',1,'glm']]],\n  ['u64',['u64',['../a00304.html#gaf3f312156984c365e9f65620354da70b',1,'glm']]],\n  ['u64vec1',['u64vec1',['../a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd',1,'glm::u64vec1()'],['../a00346.html#ga818de170e2584ab037130f2881925974',1,'glm::gtx::u64vec1()']]],\n  ['u64vec2',['u64vec2',['../a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5',1,'glm']]],\n  ['u64vec3',['u64vec3',['../a00304.html#ga489b89ba93d4f7b3934df78debc52276',1,'glm']]],\n  ['u64vec4',['u64vec4',['../a00304.html#ga3945dd6515d4498cb603e65ff867ab03',1,'glm']]],\n  ['u8',['u8',['../a00304.html#gaecc7082561fc9028b844b6cf3d305d36',1,'glm']]],\n  ['u8vec1',['u8vec1',['../a00304.html#ga29b349e037f0b24320b4548a143daee2',1,'glm::u8vec1()'],['../a00346.html#ga5853fe457f4c8a6bc09343d0e9833980',1,'glm::gtx::u8vec1()']]],\n  ['u8vec2',['u8vec2',['../a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611',1,'glm']]],\n  ['u8vec3',['u8vec3',['../a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2',1,'glm']]],\n  ['u8vec4',['u8vec4',['../a00304.html#ga20779a61de2fd526a17f12fe53ec46b1',1,'glm']]],\n  ['uaddcarry',['uaddCarry',['../a00370.html#gaedcec48743632dff6786bcc492074b1b',1,'glm']]],\n  ['uint16',['uint16',['../a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e',1,'glm']]],\n  ['uint16_5ft',['uint16_t',['../a00304.html#ga91f91f411080c37730856ff5887f5bcf',1,'glm']]],\n  ['uint32',['uint32',['../a00263.html#ga1134b580f8da4de94ca6b1de4d37975e',1,'glm']]],\n  ['uint32_5ft',['uint32_t',['../a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac',1,'glm']]],\n  ['uint64',['uint64',['../a00263.html#gab630f76c26b50298187f7889104d4b9c',1,'glm']]],\n  ['uint64_5ft',['uint64_t',['../a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee',1,'glm']]],\n  ['uint8',['uint8',['../a00263.html#gadde6aaee8457bee49c2a92621fe22b79',1,'glm']]],\n  ['uint8_5ft',['uint8_t',['../a00304.html#ga28d97808322d3c92186e4a0c067d7e8e',1,'glm']]],\n  ['uintbitstofloat',['uintBitsToFloat',['../a00241.html#gab2bae0d15dcdca6093f88f76b3975d97',1,'glm::uintBitsToFloat(uint const &amp;v)'],['../a00241.html#ga97f46b5f7b42fe44482e13356eb394ae',1,'glm::uintBitsToFloat(vec&lt; L, uint, Q &gt; const &amp;v)']]],\n  ['ulp_2ehpp',['ulp.hpp',['../a00182.html',1,'']]],\n  ['umat2',['umat2',['../a00294.html#ga4cae85566f900debf930c41944b64691',1,'glm']]],\n  ['umat2x2',['umat2x2',['../a00294.html#gabf8acdd33ce8951051edbca5200898aa',1,'glm']]],\n  ['umat2x3',['umat2x3',['../a00294.html#ga1870da7578d5022b973a83155d386ab3',1,'glm']]],\n  ['umat2x4',['umat2x4',['../a00294.html#ga57936a3998e992370e59a223e0ee4fd4',1,'glm']]],\n  ['umat3',['umat3',['../a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6',1,'glm']]],\n  ['umat3x2',['umat3x2',['../a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a',1,'glm']]],\n  ['umat3x3',['umat3x3',['../a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb',1,'glm']]],\n  ['umat3x4',['umat3x4',['../a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba',1,'glm']]],\n  ['umat4',['umat4',['../a00294.html#ga38bc7bb6494e344185df596deeb4544c',1,'glm']]],\n  ['umat4x2',['umat4x2',['../a00294.html#ga70fa2d05896aa83cbc8c07672a429b53',1,'glm']]],\n  ['umat4x3',['umat4x3',['../a00294.html#ga87581417945411f75cb31dd6ca1dba98',1,'glm']]],\n  ['umat4x4',['umat4x4',['../a00294.html#gaf72e6d399c42985db6872c50f53d7eb8',1,'glm']]],\n  ['umulextended',['umulExtended',['../a00370.html#ga732e2fb56db57ea541c7e5c92b7121be',1,'glm']]],\n  ['unpackdouble2x32',['unpackDouble2x32',['../a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483',1,'glm']]],\n  ['unpackf2x11_5f1x10',['unpackF2x11_1x10',['../a00298.html#ga2b1fd1e854705b1345e98409e0a25e50',1,'glm']]],\n  ['unpackf3x9_5fe1x5',['unpackF3x9_E1x5',['../a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e',1,'glm']]],\n  ['unpackhalf',['unpackHalf',['../a00298.html#ga30d6b2f1806315bcd6047131f547d33b',1,'glm']]],\n  ['unpackhalf1x16',['unpackHalf1x16',['../a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf',1,'glm']]],\n  ['unpackhalf2x16',['unpackHalf2x16',['../a00372.html#gaf59b52e6b28da9335322c4ae19b5d745',1,'glm']]],\n  ['unpackhalf4x16',['unpackHalf4x16',['../a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd',1,'glm']]],\n  ['unpacki3x10_5f1x2',['unpackI3x10_1x2',['../a00298.html#ga9a05330e5490be0908d3b117d82aff56',1,'glm']]],\n  ['unpackint2x16',['unpackInt2x16',['../a00298.html#gaccde055882918a3175de82f4ca8b7d8e',1,'glm']]],\n  ['unpackint2x32',['unpackInt2x32',['../a00298.html#gab297c0bfd38433524791eb0584d8f08d',1,'glm']]],\n  ['unpackint2x8',['unpackInt2x8',['../a00298.html#gab0c59f1e259fca9e68adb2207a6b665e',1,'glm']]],\n  ['unpackint4x16',['unpackInt4x16',['../a00298.html#ga52c154a9b232b62c22517a700cc0c78c',1,'glm']]],\n  ['unpackint4x8',['unpackInt4x8',['../a00298.html#ga1cd8d2038cdd33a860801aa155a26221',1,'glm']]],\n  ['unpackrgbm',['unpackRGBM',['../a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02',1,'glm']]],\n  ['unpacksnorm',['unpackSnorm',['../a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482',1,'glm']]],\n  ['unpacksnorm1x16',['unpackSnorm1x16',['../a00298.html#ga96dd15002370627a443c835ab03a766c',1,'glm']]],\n  ['unpacksnorm1x8',['unpackSnorm1x8',['../a00298.html#ga4851ff86678aa1c7ace9d67846894285',1,'glm']]],\n  ['unpacksnorm2x16',['unpackSnorm2x16',['../a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38',1,'glm']]],\n  ['unpacksnorm2x8',['unpackSnorm2x8',['../a00298.html#ga8b128e89be449fc71336968a66bf6e1a',1,'glm']]],\n  ['unpacksnorm3x10_5f1x2',['unpackSnorm3x10_1x2',['../a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b',1,'glm']]],\n  ['unpacksnorm4x16',['unpackSnorm4x16',['../a00298.html#gaaddf9c353528fe896106f7181219c7f4',1,'glm']]],\n  ['unpacksnorm4x8',['unpackSnorm4x8',['../a00372.html#ga2db488646d48b7c43d3218954523fe82',1,'glm']]],\n  ['unpacku3x10_5f1x2',['unpackU3x10_1x2',['../a00298.html#ga48df3042a7d079767f5891a1bfd8a60a',1,'glm']]],\n  ['unpackuint2x16',['unpackUint2x16',['../a00298.html#ga035bbbeab7ec2b28c0529757395b645b',1,'glm']]],\n  ['unpackuint2x32',['unpackUint2x32',['../a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab',1,'glm']]],\n  ['unpackuint2x8',['unpackUint2x8',['../a00298.html#gaa7600a6c71784b637a410869d2a5adcd',1,'glm']]],\n  ['unpackuint4x16',['unpackUint4x16',['../a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc',1,'glm']]],\n  ['unpackuint4x8',['unpackUint4x8',['../a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1',1,'glm']]],\n  ['unpackunorm',['unpackUnorm',['../a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f',1,'glm']]],\n  ['unpackunorm1x16',['unpackUnorm1x16',['../a00298.html#ga83d34160a5cb7bcb5339823210fc7501',1,'glm']]],\n  ['unpackunorm1x5_5f1x6_5f1x5',['unpackUnorm1x5_1x6_1x5',['../a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a',1,'glm']]],\n  ['unpackunorm1x8',['unpackUnorm1x8',['../a00298.html#ga1319207e30874fb4931a9ee913983ee1',1,'glm']]],\n  ['unpackunorm2x16',['unpackUnorm2x16',['../a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007',1,'glm']]],\n  ['unpackunorm2x3_5f1x2',['unpackUnorm2x3_1x2',['../a00298.html#ga6abd5a9014df3b5ce4059008d2491260',1,'glm']]],\n  ['unpackunorm2x4',['unpackUnorm2x4',['../a00298.html#ga2e50476132fe5f27f08e273d9c70d85b',1,'glm']]],\n  ['unpackunorm2x8',['unpackUnorm2x8',['../a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f',1,'glm']]],\n  ['unpackunorm3x10_5f1x2',['unpackUnorm3x10_1x2',['../a00298.html#ga5156d3060355fe332865da2c7f78815f',1,'glm']]],\n  ['unpackunorm3x5_5f1x1',['unpackUnorm3x5_1x1',['../a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d',1,'glm']]],\n  ['unpackunorm4x16',['unpackUnorm4x16',['../a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d',1,'glm']]],\n  ['unpackunorm4x4',['unpackUnorm4x4',['../a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d',1,'glm']]],\n  ['unpackunorm4x8',['unpackUnorm4x8',['../a00372.html#ga7f903259150b67e9466f5f8edffcd197',1,'glm']]],\n  ['unproject',['unProject',['../a00245.html#ga36641e5d60f994e01c3d8f56b10263d2',1,'glm']]],\n  ['unprojectno',['unProjectNO',['../a00245.html#gae089ba9fc150ff69c252a20e508857b5',1,'glm']]],\n  ['unprojectzo',['unProjectZO',['../a00245.html#gade5136413ce530f8e606124d570fba32',1,'glm']]],\n  ['uround',['uround',['../a00292.html#ga6715b9d573972a0f7763d30d45bcaec4',1,'glm']]],\n  ['usubborrow',['usubBorrow',['../a00370.html#gae3316ba1229ad9b9f09480833321b053',1,'glm']]],\n  ['uvec1',['uvec1',['../a00276.html#gac3bdd96183d23876c58a1424585fefe7',1,'glm']]],\n  ['uvec2',['uvec2',['../a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb',1,'glm']]],\n  ['uvec3',['uvec3',['../a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418',1,'glm']]],\n  ['uvec4',['uvec4',['../a00281.html#gaa57e96bb337867329d5f43bcc27c1095',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_13.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_13.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_13.js",
    "content": "var searchData=\n[\n  ['vector_20relational_20functions',['Vector Relational Functions',['../a00374.html',1,'']]],\n  ['vector_20types',['Vector types',['../a00281.html',1,'']]],\n  ['vector_20types_20with_20precision_20qualifiers',['Vector types with precision qualifiers',['../a00282.html',1,'']]],\n  ['value_5fptr',['value_ptr',['../a00305.html#ga1c64669e1ba1160ad9386e43dc57569a',1,'glm']]],\n  ['vec1',['vec1',['../a00270.html#gadfc071d934d8dae7955a1d530a3cf656',1,'glm']]],\n  ['vec1_2ehpp',['vec1.hpp',['../a00183.html',1,'']]],\n  ['vec2',['vec2',['../a00281.html#gabe65c061834f61b4f7cb6037b19006a4',1,'glm']]],\n  ['vec2_2ehpp',['vec2.hpp',['../a00184.html',1,'']]],\n  ['vec3',['vec3',['../a00281.html#ga9c3019b13faf179e4ad3626ea66df334',1,'glm']]],\n  ['vec3_2ehpp',['vec3.hpp',['../a00185.html',1,'']]],\n  ['vec4',['vec4',['../a00281.html#gac215a35481a6597d1bf622a382e9d6e2',1,'glm']]],\n  ['vec4_2ehpp',['vec4.hpp',['../a00186.html',1,'']]],\n  ['vec_5fswizzle_2ehpp',['vec_swizzle.hpp',['../a00187.html',1,'']]],\n  ['vector_5fangle_2ehpp',['vector_angle.hpp',['../a00188.html',1,'']]],\n  ['vector_5fbool1_2ehpp',['vector_bool1.hpp',['../a00189.html',1,'']]],\n  ['vector_5fbool1_5fprecision_2ehpp',['vector_bool1_precision.hpp',['../a00190.html',1,'']]],\n  ['vector_5fbool2_2ehpp',['vector_bool2.hpp',['../a00191.html',1,'']]],\n  ['vector_5fbool2_5fprecision_2ehpp',['vector_bool2_precision.hpp',['../a00192.html',1,'']]],\n  ['vector_5fbool3_2ehpp',['vector_bool3.hpp',['../a00193.html',1,'']]],\n  ['vector_5fbool3_5fprecision_2ehpp',['vector_bool3_precision.hpp',['../a00194.html',1,'']]],\n  ['vector_5fbool4_2ehpp',['vector_bool4.hpp',['../a00195.html',1,'']]],\n  ['vector_5fbool4_5fprecision_2ehpp',['vector_bool4_precision.hpp',['../a00196.html',1,'']]],\n  ['vector_5fcommon_2ehpp',['vector_common.hpp',['../a00197.html',1,'']]],\n  ['vector_5fdouble1_2ehpp',['vector_double1.hpp',['../a00198.html',1,'']]],\n  ['vector_5fdouble1_5fprecision_2ehpp',['vector_double1_precision.hpp',['../a00199.html',1,'']]],\n  ['vector_5fdouble2_2ehpp',['vector_double2.hpp',['../a00200.html',1,'']]],\n  ['vector_5fdouble2_5fprecision_2ehpp',['vector_double2_precision.hpp',['../a00201.html',1,'']]],\n  ['vector_5fdouble3_2ehpp',['vector_double3.hpp',['../a00202.html',1,'']]],\n  ['vector_5fdouble3_5fprecision_2ehpp',['vector_double3_precision.hpp',['../a00203.html',1,'']]],\n  ['vector_5fdouble4_2ehpp',['vector_double4.hpp',['../a00204.html',1,'']]],\n  ['vector_5fdouble4_5fprecision_2ehpp',['vector_double4_precision.hpp',['../a00205.html',1,'']]],\n  ['vector_5ffloat1_2ehpp',['vector_float1.hpp',['../a00206.html',1,'']]],\n  ['vector_5ffloat1_5fprecision_2ehpp',['vector_float1_precision.hpp',['../a00207.html',1,'']]],\n  ['vector_5ffloat2_2ehpp',['vector_float2.hpp',['../a00208.html',1,'']]],\n  ['vector_5ffloat2_5fprecision_2ehpp',['vector_float2_precision.hpp',['../a00209.html',1,'']]],\n  ['vector_5ffloat3_2ehpp',['vector_float3.hpp',['../a00210.html',1,'']]],\n  ['vector_5ffloat3_5fprecision_2ehpp',['vector_float3_precision.hpp',['../a00211.html',1,'']]],\n  ['vector_5ffloat4_2ehpp',['vector_float4.hpp',['../a00212.html',1,'']]],\n  ['vector_5ffloat4_5fprecision_2ehpp',['vector_float4_precision.hpp',['../a00213.html',1,'']]],\n  ['vector_5fint1_2ehpp',['vector_int1.hpp',['../a00214.html',1,'']]],\n  ['vector_5fint1_5fprecision_2ehpp',['vector_int1_precision.hpp',['../a00215.html',1,'']]],\n  ['vector_5fint2_2ehpp',['vector_int2.hpp',['../a00216.html',1,'']]],\n  ['vector_5fint2_5fprecision_2ehpp',['vector_int2_precision.hpp',['../a00217.html',1,'']]],\n  ['vector_5fint3_2ehpp',['vector_int3.hpp',['../a00218.html',1,'']]],\n  ['vector_5fint3_5fprecision_2ehpp',['vector_int3_precision.hpp',['../a00219.html',1,'']]],\n  ['vector_5fint4_2ehpp',['vector_int4.hpp',['../a00220.html',1,'']]],\n  ['vector_5fint4_5fprecision_2ehpp',['vector_int4_precision.hpp',['../a00221.html',1,'']]],\n  ['vector_5finteger_2ehpp',['vector_integer.hpp',['../a00222.html',1,'']]],\n  ['vector_5fquery_2ehpp',['vector_query.hpp',['../a00223.html',1,'']]],\n  ['vector_5frelational_2ehpp',['vector_relational.hpp',['../a00225.html',1,'']]],\n  ['vector_5fuint1_2ehpp',['vector_uint1.hpp',['../a00226.html',1,'']]],\n  ['vector_5fuint1_5fprecision_2ehpp',['vector_uint1_precision.hpp',['../a00227.html',1,'']]],\n  ['vector_5fuint2_2ehpp',['vector_uint2.hpp',['../a00228.html',1,'']]],\n  ['vector_5fuint2_5fprecision_2ehpp',['vector_uint2_precision.hpp',['../a00229.html',1,'']]],\n  ['vector_5fuint3_2ehpp',['vector_uint3.hpp',['../a00230.html',1,'']]],\n  ['vector_5fuint3_5fprecision_2ehpp',['vector_uint3_precision.hpp',['../a00231.html',1,'']]],\n  ['vector_5fuint4_2ehpp',['vector_uint4.hpp',['../a00232.html',1,'']]],\n  ['vector_5fuint4_5fprecision_2ehpp',['vector_uint4_precision.hpp',['../a00233.html',1,'']]],\n  ['vector_5fulp_2ehpp',['vector_ulp.hpp',['../a00234.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_14.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_14.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_14.js",
    "content": "var searchData=\n[\n  ['word',['word',['../a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5',1,'glm']]],\n  ['wrap_2ehpp',['wrap.hpp',['../a00235.html',1,'']]],\n  ['wrapangle',['wrapAngle',['../a00325.html#ga069527c6dbd64f53435b8ebc4878b473',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_15.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_15.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_15.js",
    "content": "var searchData=\n[\n  ['yaw',['yaw',['../a00299.html#ga8da38cdfdc452dafa660c2f46506bad5',1,'glm']]],\n  ['yawpitchroll',['yawPitchRoll',['../a00319.html#gae6aa26ccb020d281b449619e419a609e',1,'glm']]],\n  ['ycocg2rgb',['YCoCg2rgb',['../a00313.html#ga163596b804c7241810b2534a99eb1343',1,'glm']]],\n  ['ycocgr2rgb',['YCoCgR2rgb',['../a00313.html#gaf8d30574c8576838097d8e20c295384a',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_16.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_16.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_16.js",
    "content": "var searchData=\n[\n  ['zero',['zero',['../a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_2.js",
    "content": "var searchData=\n[\n  ['catmullrom',['catmullRom',['../a00358.html#ga8119c04f8210fd0d292757565cd6918d',1,'glm']]],\n  ['ceil',['ceil',['../a00241.html#gafb9d2a645a23aca12d4d6de0104b7657',1,'glm']]],\n  ['ceilmultiple',['ceilMultiple',['../a00302.html#ga1d89ac88582aaf4d5dfa5feb4a376fd4',1,'glm::ceilMultiple(genType v, genType Multiple)'],['../a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d',1,'glm::ceilMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['ceilpoweroftwo',['ceilPowerOfTwo',['../a00302.html#ga5c3ef36ae32aa4271f1544f92bd578b6',1,'glm::ceilPowerOfTwo(genIUType v)'],['../a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2',1,'glm::ceilPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['circulareasein',['circularEaseIn',['../a00318.html#ga34508d4b204a321ec26d6086aa047997',1,'glm']]],\n  ['circulareaseinout',['circularEaseInOut',['../a00318.html#ga0c1027637a5b02d4bb3612aa12599d69',1,'glm']]],\n  ['circulareaseout',['circularEaseOut',['../a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7',1,'glm']]],\n  ['circularrand',['circularRand',['../a00300.html#ga9dd05c36025088fae25b97c869e88517',1,'glm']]],\n  ['clamp',['clamp',['../a00241.html#ga7cd77683da6361e297c56443fc70806d',1,'glm::clamp(genType x, genType minVal, genType maxVal)'],['../a00241.html#gafba2e0674deb5953878d89483cd6323d',1,'glm::clamp(vec&lt; L, T, Q &gt; const &amp;x, T minVal, T maxVal)'],['../a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d',1,'glm::clamp(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)'],['../a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33',1,'glm::clamp(genType const &amp;Texcoord)']]],\n  ['closebounded',['closeBounded',['../a00314.html#gab7d89c14c48ad01f720fb5daf8813161',1,'glm']]],\n  ['closest_5fpoint_2ehpp',['closest_point.hpp',['../a00010.html',1,'']]],\n  ['closestpointonline',['closestPointOnLine',['../a00310.html#ga36529c278ef716986151d58d151d697d',1,'glm::closestPointOnLine(vec&lt; 3, T, Q &gt; const &amp;point, vec&lt; 3, T, Q &gt; const &amp;a, vec&lt; 3, T, Q &gt; const &amp;b)'],['../a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0',1,'glm::closestPointOnLine(vec&lt; 2, T, Q &gt; const &amp;point, vec&lt; 2, T, Q &gt; const &amp;a, vec&lt; 2, T, Q &gt; const &amp;b)']]],\n  ['colmajor2',['colMajor2',['../a00338.html#gaaff72f11286e59a4a88ed21a347f284c',1,'glm::colMajor2(vec&lt; 2, T, Q &gt; const &amp;v1, vec&lt; 2, T, Q &gt; const &amp;v2)'],['../a00338.html#gafc25fd44196c92b1397b127aec1281ab',1,'glm::colMajor2(mat&lt; 2, 2, T, Q &gt; const &amp;m)']]],\n  ['colmajor3',['colMajor3',['../a00338.html#ga1e25b72b085087740c92f5c70f3b051f',1,'glm::colMajor3(vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)'],['../a00338.html#ga86bd0656e787bb7f217607572590af27',1,'glm::colMajor3(mat&lt; 3, 3, T, Q &gt; const &amp;m)']]],\n  ['colmajor4',['colMajor4',['../a00338.html#gaf4aa6c7e17bfce41a6c13bf6469fab05',1,'glm::colMajor4(vec&lt; 4, T, Q &gt; const &amp;v1, vec&lt; 4, T, Q &gt; const &amp;v2, vec&lt; 4, T, Q &gt; const &amp;v3, vec&lt; 4, T, Q &gt; const &amp;v4)'],['../a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3',1,'glm::colMajor4(mat&lt; 4, 4, T, Q &gt; const &amp;m)']]],\n  ['color_5fencoding_2ehpp',['color_encoding.hpp',['../a00011.html',1,'']]],\n  ['color_5fspace_5fycocg_2ehpp',['color_space_YCoCg.hpp',['../a00014.html',1,'']]],\n  ['column',['column',['../a00293.html#ga96022eb0d3fae39d89fc7a954e59b374',1,'glm::column(genType const &amp;m, length_t index)'],['../a00293.html#ga9e757377523890e8b80c5843dbe4dd15',1,'glm::column(genType const &amp;m, length_t index, typename genType::col_type const &amp;x)']]],\n  ['common_2ehpp',['common.hpp',['../a00015.html',1,'']]],\n  ['compadd',['compAdd',['../a00316.html#gaf71833350e15e74d31cbf8a3e7f27051',1,'glm']]],\n  ['compatibility_2ehpp',['compatibility.hpp',['../a00017.html',1,'']]],\n  ['compmax',['compMax',['../a00316.html#gabfa4bb19298c8c73d4217ba759c496b6',1,'glm']]],\n  ['compmin',['compMin',['../a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425',1,'glm']]],\n  ['compmul',['compMul',['../a00316.html#gae8ab88024197202c9479d33bdc5a8a5d',1,'glm']]],\n  ['compnormalize',['compNormalize',['../a00316.html#ga8f2b81ada8515875e58cb1667b6b9908',1,'glm']]],\n  ['component_5fwise_2ehpp',['component_wise.hpp',['../a00018.html',1,'']]],\n  ['compscale',['compScale',['../a00316.html#ga80abc2980d65d675f435d178c36880eb',1,'glm']]],\n  ['conjugate',['conjugate',['../a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b',1,'glm']]],\n  ['constants_2ehpp',['constants.hpp',['../a00021.html',1,'']]],\n  ['convertd65xyztod50xyz',['convertD65XYZToD50XYZ',['../a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48',1,'glm']]],\n  ['convertd65xyztolinearsrgb',['convertD65XYZToLinearSRGB',['../a00311.html#ga5265386fc3ac29e4c580d37ed470859c',1,'glm']]],\n  ['convertlinearsrgbtod50xyz',['convertLinearSRGBToD50XYZ',['../a00311.html#ga1522ba180e3d83d554a734056da031f9',1,'glm']]],\n  ['convertlinearsrgbtod65xyz',['convertLinearSRGBToD65XYZ',['../a00311.html#gaf9e130d9d4ccf51cc99317de7449f369',1,'glm']]],\n  ['convertlineartosrgb',['convertLinearToSRGB',['../a00289.html#ga42239e7b3da900f7ef37cec7e2476579',1,'glm::convertLinearToSRGB(vec&lt; L, T, Q &gt; const &amp;ColorLinear)'],['../a00289.html#gaace0a21167d13d26116c283009af57f6',1,'glm::convertLinearToSRGB(vec&lt; L, T, Q &gt; const &amp;ColorLinear, T Gamma)']]],\n  ['convertsrgbtolinear',['convertSRGBToLinear',['../a00289.html#ga16c798b7a226b2c3079dedc55083d187',1,'glm::convertSRGBToLinear(vec&lt; L, T, Q &gt; const &amp;ColorSRGB)'],['../a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200',1,'glm::convertSRGBToLinear(vec&lt; L, T, Q &gt; const &amp;ColorSRGB, T Gamma)']]],\n  ['core_20features',['Core features',['../a00280.html',1,'']]],\n  ['common_20functions',['Common functions',['../a00241.html',1,'']]],\n  ['cos',['cos',['../a00373.html#ga6a41efc740e3b3c937447d3a6284130e',1,'glm']]],\n  ['cosh',['cosh',['../a00373.html#ga4e260e372742c5f517aca196cf1e62b3',1,'glm']]],\n  ['cot',['cot',['../a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314',1,'glm']]],\n  ['coth',['coth',['../a00301.html#ga6b8b770eb7198e4dea59d52e6db81442',1,'glm']]],\n  ['cross',['cross',['../a00254.html#ga755beaa929c75751dee646cccba37e4c',1,'glm::cross(qua&lt; T, Q &gt; const &amp;q1, qua&lt; T, Q &gt; const &amp;q2)'],['../a00279.html#gaeeec0794212fe84fc9d261de067c9587',1,'glm::cross(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)'],['../a00322.html#gac36e72b934ea6a9dd313772d7e78fa93',1,'glm::cross(vec&lt; 2, T, Q &gt; const &amp;v, vec&lt; 2, T, Q &gt; const &amp;u)'],['../a00352.html#ga2f32f970411c44cdd38bb98960198385',1,'glm::cross(qua&lt; T, Q &gt; const &amp;q, vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00352.html#ga9f5f77255756e5668dfee7f0d07ed021',1,'glm::cross(vec&lt; 3, T, Q &gt; const &amp;v, qua&lt; T, Q &gt; const &amp;q)']]],\n  ['csc',['csc',['../a00301.html#ga59dd0005b6474eea48af743b4f14ebbb',1,'glm']]],\n  ['csch',['csch',['../a00301.html#ga6d95843ff3ca6472ab399ba171d290a0',1,'glm']]],\n  ['cubic',['cubic',['../a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70',1,'glm']]],\n  ['cubiceasein',['cubicEaseIn',['../a00318.html#gaff52f746102b94864d105563ba8895ae',1,'glm']]],\n  ['cubiceaseinout',['cubicEaseInOut',['../a00318.html#ga55134072b42d75452189321d4a2ad91c',1,'glm']]],\n  ['cubiceaseout',['cubicEaseOut',['../a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_3.js",
    "content": "var searchData=\n[\n  ['ddualquat',['ddualquat',['../a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6',1,'glm']]],\n  ['decompose',['decompose',['../a00335.html#gac0e342656ba09a9bc97c57182ba73124',1,'glm']]],\n  ['degrees',['degrees',['../a00373.html#ga8faec9e303538065911ba8b3caf7326b',1,'glm']]],\n  ['derivedeuleranglex',['derivedEulerAngleX',['../a00319.html#ga994b8186b3b80d91cf90bc403164692f',1,'glm']]],\n  ['derivedeulerangley',['derivedEulerAngleY',['../a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10',1,'glm']]],\n  ['derivedeuleranglez',['derivedEulerAngleZ',['../a00319.html#gae8b397348201c42667be983ba3f344df',1,'glm']]],\n  ['determinant',['determinant',['../a00371.html#gad7928795124768e058f99dce270f5c8d',1,'glm']]],\n  ['diagonal2x2',['diagonal2x2',['../a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac',1,'glm']]],\n  ['diagonal2x3',['diagonal2x3',['../a00339.html#gab69f900206a430e2875a5a073851e175',1,'glm']]],\n  ['diagonal2x4',['diagonal2x4',['../a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549',1,'glm']]],\n  ['diagonal3x2',['diagonal3x2',['../a00339.html#ga832c805d5130d28ad76236958d15b47d',1,'glm']]],\n  ['diagonal3x3',['diagonal3x3',['../a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0',1,'glm']]],\n  ['diagonal3x4',['diagonal3x4',['../a00339.html#gad7551139cff0c4208d27f0ad3437833e',1,'glm']]],\n  ['diagonal4x2',['diagonal4x2',['../a00339.html#gacb8969e6543ba775c6638161a37ac330',1,'glm']]],\n  ['diagonal4x3',['diagonal4x3',['../a00339.html#gae235def5049d6740f0028433f5e13f90',1,'glm']]],\n  ['diagonal4x4',['diagonal4x4',['../a00339.html#ga0b4cd8dea436791b072356231ee8578f',1,'glm']]],\n  ['diskrand',['diskRand',['../a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73',1,'glm']]],\n  ['distance',['distance',['../a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f',1,'glm']]],\n  ['distance2',['distance2',['../a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f',1,'glm']]],\n  ['dmat2',['dmat2',['../a00283.html#ga21dbd1f987775d7cc7607c139531c7e6',1,'glm']]],\n  ['dmat2x2',['dmat2x2',['../a00283.html#ga66b6a9af787e468a46dfe24189e87f9b',1,'glm']]],\n  ['dmat2x3',['dmat2x3',['../a00283.html#ga92cd388753d48e20de69ea2dbedf826a',1,'glm']]],\n  ['dmat2x4',['dmat2x4',['../a00283.html#gaef2198807e937072803ae0ae45e1965e',1,'glm']]],\n  ['dmat3',['dmat3',['../a00283.html#ga6f40aa56265b4b0ccad41b86802efe33',1,'glm']]],\n  ['dmat3x2',['dmat3x2',['../a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39',1,'glm']]],\n  ['dmat3x3',['dmat3x3',['../a00283.html#ga970cb3306be25a5ca5db5a9456831228',1,'glm']]],\n  ['dmat3x4',['dmat3x4',['../a00283.html#ga0412a634d183587e6188e9b11869f8f4',1,'glm']]],\n  ['dmat4',['dmat4',['../a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca',1,'glm']]],\n  ['dmat4x2',['dmat4x2',['../a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156',1,'glm']]],\n  ['dmat4x3',['dmat4x3',['../a00283.html#gacd18864049f8c83799babe7e596ca05b',1,'glm']]],\n  ['dmat4x4',['dmat4x4',['../a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10',1,'glm']]],\n  ['dot',['dot',['../a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc',1,'glm::dot(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a',1,'glm::dot(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['double1',['double1',['../a00315.html#ga20b861a9b6e2a300323671c57a02525b',1,'glm']]],\n  ['double1x1',['double1x1',['../a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8',1,'glm']]],\n  ['double2',['double2',['../a00315.html#ga31b729b04facccda73f07ed26958b3c2',1,'glm']]],\n  ['double2x2',['double2x2',['../a00315.html#gae57d0201096834d25f2b91b319e7cdbd',1,'glm']]],\n  ['double2x3',['double2x3',['../a00315.html#ga3655bc324008553ca61f39952d0b2d08',1,'glm']]],\n  ['double2x4',['double2x4',['../a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a',1,'glm']]],\n  ['double3',['double3',['../a00315.html#ga3d8b9028a1053a44a98902cd1c389472',1,'glm']]],\n  ['double3x2',['double3x2',['../a00315.html#ga5ec08fc39c9d783dfcc488be240fe975',1,'glm']]],\n  ['double3x3',['double3x3',['../a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180',1,'glm']]],\n  ['double3x4',['double3x4',['../a00315.html#ga2ef022e453d663d70aec414b2a80f756',1,'glm']]],\n  ['double4',['double4',['../a00315.html#gaf92f58af24f35617518aeb3d4f63fda6',1,'glm']]],\n  ['double4x2',['double4x2',['../a00315.html#gabca29ccceea53669618b751aae0ba83d',1,'glm']]],\n  ['double4x3',['double4x3',['../a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c',1,'glm']]],\n  ['double4x4',['double4x4',['../a00315.html#gaab541bed2e788e4537852a2492860806',1,'glm']]],\n  ['dquat',['dquat',['../a00249.html#ga1181459aa5d640a3ea43861b118f3f0b',1,'glm']]],\n  ['dual_5fquat_5fidentity',['dual_quat_identity',['../a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0',1,'glm']]],\n  ['dual_5fquaternion_2ehpp',['dual_quaternion.hpp',['../a00022.html',1,'']]],\n  ['dualquat',['dualquat',['../a00317.html#gae93abee0c979902fbec6a7bee0f6fae1',1,'glm']]],\n  ['dualquat_5fcast',['dualquat_cast',['../a00317.html#gac4064ff813759740201765350eac4236',1,'glm::dualquat_cast(mat&lt; 2, 4, T, Q &gt; const &amp;x)'],['../a00317.html#ga91025ebdca0f4ea54da08497b00e8c84',1,'glm::dualquat_cast(mat&lt; 3, 4, T, Q &gt; const &amp;x)']]],\n  ['dvec1',['dvec1',['../a00268.html#ga6221af17edc2d4477a4583d2cd53e569',1,'glm']]],\n  ['dvec2',['dvec2',['../a00281.html#ga8b09c71aaac7da7867ae58377fe219a8',1,'glm']]],\n  ['dvec3',['dvec3',['../a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0',1,'glm']]],\n  ['dvec4',['dvec4',['../a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac',1,'glm']]],\n  ['dword',['dword',['../a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_4.js",
    "content": "var searchData=\n[\n  ['exponential_20functions',['Exponential functions',['../a00242.html',1,'']]],\n  ['e',['e',['../a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139',1,'glm']]],\n  ['easing_2ehpp',['easing.hpp',['../a00023.html',1,'']]],\n  ['elasticeasein',['elasticEaseIn',['../a00318.html#ga230918eccee4e113d10ec5b8cdc58695',1,'glm']]],\n  ['elasticeaseinout',['elasticEaseInOut',['../a00318.html#ga2db4ac8959559b11b4029e54812908d6',1,'glm']]],\n  ['elasticeaseout',['elasticEaseOut',['../a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365',1,'glm']]],\n  ['epsilon',['epsilon',['../a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429',1,'glm']]],\n  ['epsilon_2ehpp',['epsilon.hpp',['../a00024.html',1,'']]],\n  ['epsilonequal',['epsilonEqual',['../a00291.html#ga91b417866cafadd076004778217a1844',1,'glm::epsilonEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T const &amp;epsilon)'],['../a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb',1,'glm::epsilonEqual(genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)']]],\n  ['epsilonnotequal',['epsilonNotEqual',['../a00291.html#gaf840d33b9a5261ec78dcd5125743b025',1,'glm::epsilonNotEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T const &amp;epsilon)'],['../a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf',1,'glm::epsilonNotEqual(genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)']]],\n  ['equal',['equal',['../a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)'],['../a00246.html#gaf5d687d70d11708b68c36c6db5777040',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, T epsilon)'],['../a00246.html#gafa6a053e81179fa4292b35651c83c3fb',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, T, Q &gt; const &amp;epsilon)'],['../a00246.html#gab3a93f19e72e9141f50527c9de21d0c0',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, int ULPs)'],['../a00246.html#ga5305af376173f1902719fa309bbae671',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)'],['../a00255.html#gad7827af0549504ff1cd6a359786acc7a',1,'glm::equal(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00255.html#gaa001eecb91106463169a8e5ef1577b39',1,'glm::equal(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)'],['../a00275.html#ga2ac7651a2fa7354f2da610dbd50d28e2',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T epsilon)'],['../a00275.html#ga37d261a65f69babc82cec2ae1af7145f',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;epsilon)'],['../a00275.html#ga2b46cb50911e97b32f4cd743c2c69771',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, int ULPs)'],['../a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)'],['../a00374.html#gab4c5cfdaa70834421397a85aa83ad946',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['euclidean',['euclidean',['../a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8',1,'glm']]],\n  ['euler',['euler',['../a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42',1,'glm']]],\n  ['euler_5fangles_2ehpp',['euler_angles.hpp',['../a00025.html',1,'']]],\n  ['eulerangles',['eulerAngles',['../a00299.html#gaf4dd967dead22dd932fc7460ceecb03f',1,'glm']]],\n  ['euleranglex',['eulerAngleX',['../a00319.html#gafba6282e4ed3ff8b5c75331abfba3489',1,'glm']]],\n  ['euleranglexy',['eulerAngleXY',['../a00319.html#ga64036577ee17a2d24be0dbc05881d4e2',1,'glm']]],\n  ['euleranglexyx',['eulerAngleXYX',['../a00319.html#ga29bd0787a28a6648159c0d6e69706066',1,'glm']]],\n  ['euleranglexyz',['eulerAngleXYZ',['../a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645',1,'glm']]],\n  ['euleranglexz',['eulerAngleXZ',['../a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9',1,'glm']]],\n  ['euleranglexzx',['eulerAngleXZX',['../a00319.html#ga60171c79a17aec85d7891ae1d1533ec9',1,'glm']]],\n  ['euleranglexzy',['eulerAngleXZY',['../a00319.html#ga996dce12a60d8a674ba6737a535fa910',1,'glm']]],\n  ['eulerangley',['eulerAngleY',['../a00319.html#gab84bf4746805fd69b8ecbb230e3974c5',1,'glm']]],\n  ['eulerangleyx',['eulerAngleYX',['../a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d',1,'glm']]],\n  ['eulerangleyxy',['eulerAngleYXY',['../a00319.html#ga750fba9894117f87bcc529d7349d11de',1,'glm']]],\n  ['eulerangleyxz',['eulerAngleYXZ',['../a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10',1,'glm']]],\n  ['eulerangleyz',['eulerAngleYZ',['../a00319.html#ga220379e10ac8cca55e275f0c9018fed9',1,'glm']]],\n  ['eulerangleyzx',['eulerAngleYZX',['../a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848',1,'glm']]],\n  ['eulerangleyzy',['eulerAngleYZY',['../a00319.html#ga5e5e40abc27630749b42b3327c76d6e4',1,'glm']]],\n  ['euleranglez',['eulerAngleZ',['../a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251',1,'glm']]],\n  ['euleranglezx',['eulerAngleZX',['../a00319.html#ga483903115cd4059228961046a28d69b5',1,'glm']]],\n  ['euleranglezxy',['eulerAngleZXY',['../a00319.html#gab4505c54d2dd654df4569fd1f04c43aa',1,'glm']]],\n  ['euleranglezxz',['eulerAngleZXZ',['../a00319.html#ga178f966c52b01e4d65e31ebd007e3247',1,'glm']]],\n  ['euleranglezy',['eulerAngleZY',['../a00319.html#ga400b2bd5984999efab663f3a68e1d020',1,'glm']]],\n  ['euleranglezyx',['eulerAngleZYX',['../a00319.html#ga2e61f1e39069c47530acab9167852dd6',1,'glm']]],\n  ['euleranglezyz',['eulerAngleZYZ',['../a00319.html#gacd795f1dbecaf74974f9c76bbcca6830',1,'glm']]],\n  ['exp',['exp',['../a00242.html#ga071566cadc7505455e611f2a0353f4d4',1,'glm::exp(vec&lt; L, T, Q &gt; const &amp;v)'],['../a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac',1,'glm::exp(qua&lt; T, Q &gt; const &amp;q)']]],\n  ['exp2',['exp2',['../a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16',1,'glm']]],\n  ['exponential_2ehpp',['exponential.hpp',['../a00026.html',1,'']]],\n  ['exponentialeasein',['exponentialEaseIn',['../a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c',1,'glm']]],\n  ['exponentialeaseinout',['exponentialEaseInOut',['../a00318.html#ga232fb6dc093c5ce94bee105ff2947501',1,'glm']]],\n  ['exponentialeaseout',['exponentialEaseOut',['../a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3',1,'glm']]],\n  ['ext_2ehpp',['ext.hpp',['../a00027.html',1,'']]],\n  ['extend',['extend',['../a00320.html#ga8140caae613b0f847ab0d7175dc03a37',1,'glm']]],\n  ['extend_2ehpp',['extend.hpp',['../a00028.html',1,'']]],\n  ['extended_5fmin_5fmax_2ehpp',['extended_min_max.hpp',['../a00029.html',1,'']]],\n  ['exterior_5fproduct_2ehpp',['exterior_product.hpp',['../a00030.html',1,'']]],\n  ['extracteuleranglexyx',['extractEulerAngleXYX',['../a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7',1,'glm']]],\n  ['extracteuleranglexyz',['extractEulerAngleXYZ',['../a00319.html#gacea701562f778c1da4d3a0a1cf091000',1,'glm']]],\n  ['extracteuleranglexzx',['extractEulerAngleXZX',['../a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0',1,'glm']]],\n  ['extracteuleranglexzy',['extractEulerAngleXZY',['../a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed',1,'glm']]],\n  ['extracteulerangleyxy',['extractEulerAngleYXY',['../a00319.html#gaab8868556361a190db94374e9983ed39',1,'glm']]],\n  ['extracteulerangleyxz',['extractEulerAngleYXZ',['../a00319.html#gaf0937518e63037335a0e8358b6f053c5',1,'glm']]],\n  ['extracteulerangleyzx',['extractEulerAngleYZX',['../a00319.html#ga9049b78466796c0de2971756e25b93d3',1,'glm']]],\n  ['extracteulerangleyzy',['extractEulerAngleYZY',['../a00319.html#ga11dad972c109e4bf8694c915017c44a6',1,'glm']]],\n  ['extracteuleranglezxy',['extractEulerAngleZXY',['../a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363',1,'glm']]],\n  ['extracteuleranglezxz',['extractEulerAngleZXZ',['../a00319.html#ga59359fef9bad92afaca55e193f91e702',1,'glm']]],\n  ['extracteuleranglezyx',['extractEulerAngleZYX',['../a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665',1,'glm']]],\n  ['extracteuleranglezyz',['extractEulerAngleZYZ',['../a00319.html#gafdfa880a64b565223550c2d3938b1aeb',1,'glm']]],\n  ['extractmatrixrotation',['extractMatrixRotation',['../a00337.html#gabbc1c7385a145f04b5c54228965df145',1,'glm']]],\n  ['extractrealcomponent',['extractRealComponent',['../a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b',1,'glm']]],\n  ['experimental_20extensions',['Experimental extensions',['../a00287.html',1,'']]],\n  ['matrix_5ftransform_2ehpp',['matrix_transform.hpp',['../a00108.html',1,'']]],\n  ['scalar_5frelational_2ehpp',['scalar_relational.hpp',['../a00149.html',1,'']]],\n  ['vector_5frelational_2ehpp',['vector_relational.hpp',['../a00224.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_5.js",
    "content": "var searchData=\n[\n  ['floating_2dpoint_20pack_20and_20unpack_20functions',['Floating-Point Pack and Unpack Functions',['../a00372.html',1,'']]],\n  ['f32',['f32',['../a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7',1,'glm']]],\n  ['f32mat1',['f32mat1',['../a00346.html#ga145ad477a2a3e152855511c3b52469a6',1,'glm::gtx']]],\n  ['f32mat1x1',['f32mat1x1',['../a00346.html#gac88c6a4dbfc380aa26e3adbbade36348',1,'glm::gtx']]],\n  ['f32mat2',['f32mat2',['../a00304.html#gab12383ed6ac7595ed6fde4d266c58425',1,'glm']]],\n  ['f32mat2x2',['f32mat2x2',['../a00304.html#ga04100c76f7d55a0dd0983ccf05142bff',1,'glm']]],\n  ['f32mat2x3',['f32mat2x3',['../a00304.html#gab256cdab5eb582e426d749ae77b5b566',1,'glm']]],\n  ['f32mat2x4',['f32mat2x4',['../a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8',1,'glm']]],\n  ['f32mat3',['f32mat3',['../a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be',1,'glm']]],\n  ['f32mat3x2',['f32mat3x2',['../a00304.html#ga1320a08e14fdff3821241eefab6947e9',1,'glm']]],\n  ['f32mat3x3',['f32mat3x3',['../a00304.html#ga65261fa8a21045c8646ddff114a56174',1,'glm']]],\n  ['f32mat3x4',['f32mat3x4',['../a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d',1,'glm']]],\n  ['f32mat4',['f32mat4',['../a00304.html#ga99d1b85ff99956b33da7e9992aad129a',1,'glm']]],\n  ['f32mat4x2',['f32mat4x2',['../a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20',1,'glm']]],\n  ['f32mat4x3',['f32mat4x3',['../a00304.html#ga239b96198771b7add8eea7e6b59840c0',1,'glm']]],\n  ['f32mat4x4',['f32mat4x4',['../a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3',1,'glm']]],\n  ['f32quat',['f32quat',['../a00304.html#ga38e674196ba411d642be40c47bf33939',1,'glm']]],\n  ['f32vec1',['f32vec1',['../a00304.html#ga701f32ab5b3fb06996b41f5c0d643805',1,'glm::f32vec1()'],['../a00346.html#ga07f8d7348eb7ae059a84c118fdfeb943',1,'glm::gtx::f32vec1()']]],\n  ['f32vec2',['f32vec2',['../a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8',1,'glm']]],\n  ['f32vec3',['f32vec3',['../a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79',1,'glm']]],\n  ['f32vec4',['f32vec4',['../a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8',1,'glm']]],\n  ['f64',['f64',['../a00304.html#ga1d794d240091678f602e8de225b8d8c9',1,'glm']]],\n  ['f64mat1',['f64mat1',['../a00346.html#ga59bfa589419b5265d01314fcecd33435',1,'glm::gtx']]],\n  ['f64mat1x1',['f64mat1x1',['../a00346.html#ga448eeb08d0b7d8c43a8b292c981955fd',1,'glm::gtx']]],\n  ['f64mat2',['f64mat2',['../a00304.html#gad9771450a54785d13080cdde0fe20c1d',1,'glm']]],\n  ['f64mat2x2',['f64mat2x2',['../a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37',1,'glm']]],\n  ['f64mat2x3',['f64mat2x3',['../a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a',1,'glm']]],\n  ['f64mat2x4',['f64mat2x4',['../a00304.html#gac87278e0c702ba8afff76316d4eeb769',1,'glm']]],\n  ['f64mat3',['f64mat3',['../a00304.html#ga9b69181efbf8f37ae934f135137b29c0',1,'glm']]],\n  ['f64mat3x2',['f64mat3x2',['../a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7',1,'glm']]],\n  ['f64mat3x3',['f64mat3x3',['../a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185',1,'glm']]],\n  ['f64mat3x4',['f64mat3x4',['../a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675',1,'glm']]],\n  ['f64mat4',['f64mat4',['../a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc',1,'glm']]],\n  ['f64mat4x2',['f64mat4x2',['../a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512',1,'glm']]],\n  ['f64mat4x3',['f64mat4x3',['../a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110',1,'glm']]],\n  ['f64mat4x4',['f64mat4x4',['../a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e',1,'glm']]],\n  ['f64quat',['f64quat',['../a00304.html#ga2b114a2f2af0fe1dfeb569c767822940',1,'glm']]],\n  ['f64vec1',['f64vec1',['../a00304.html#gade502df1ce14f837fae7f60a03ddb9b0',1,'glm::f64vec1()'],['../a00346.html#gae5987a61b8c03d5c432a9e62f0b3efe1',1,'glm::gtx::f64vec1()']]],\n  ['f64vec2',['f64vec2',['../a00304.html#gadc4e1594f9555d919131ee02b17822a2',1,'glm']]],\n  ['f64vec3',['f64vec3',['../a00304.html#gaa7a1ddca75c5f629173bf4772db7a635',1,'glm']]],\n  ['f64vec4',['f64vec4',['../a00304.html#ga66e92e57260bdb910609b9a56bf83e97',1,'glm']]],\n  ['faceforward',['faceforward',['../a00279.html#ga7aed0a36c738169402404a3a5d54e43b',1,'glm']]],\n  ['factorial',['factorial',['../a00330.html#ga8cbd3120905f398ec321b5d1836e08fb',1,'glm']]],\n  ['fast_5fexponential_2ehpp',['fast_exponential.hpp',['../a00031.html',1,'']]],\n  ['fast_5fsquare_5froot_2ehpp',['fast_square_root.hpp',['../a00032.html',1,'']]],\n  ['fast_5ftrigonometry_2ehpp',['fast_trigonometry.hpp',['../a00033.html',1,'']]],\n  ['fastacos',['fastAcos',['../a00325.html#ga9721d63356e5d94fdc4b393a426ab26b',1,'glm']]],\n  ['fastasin',['fastAsin',['../a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f',1,'glm']]],\n  ['fastatan',['fastAtan',['../a00325.html#ga8d197c6ef564f5e5d59af3b3f8adcc2c',1,'glm::fastAtan(T y, T x)'],['../a00325.html#gae25de86a968490ff56856fa425ec9d30',1,'glm::fastAtan(T angle)']]],\n  ['fastcos',['fastCos',['../a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a',1,'glm']]],\n  ['fastdistance',['fastDistance',['../a00324.html#gaac333418d0c4e0cc6d3d219ed606c238',1,'glm::fastDistance(genType x, genType y)'],['../a00324.html#ga42d3e771fa7cb3c60d828e315829df19',1,'glm::fastDistance(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['fastexp',['fastExp',['../a00323.html#gaa3180ac8f96ab37ab96e0cacaf608e10',1,'glm::fastExp(T x)'],['../a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58',1,'glm::fastExp(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastexp2',['fastExp2',['../a00323.html#ga0af50585955eb14c60bb286297fabab2',1,'glm::fastExp2(T x)'],['../a00323.html#gacaaed8b67d20d244b7de217e7816c1b6',1,'glm::fastExp2(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastinversesqrt',['fastInverseSqrt',['../a00324.html#ga7f081b14d9c7035c8714eba5f7f75a8f',1,'glm::fastInverseSqrt(genType x)'],['../a00324.html#gadcd7be12b1e5ee182141359d4c45dd24',1,'glm::fastInverseSqrt(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastlength',['fastLength',['../a00324.html#gafe697d6287719538346bbdf8b1367c59',1,'glm::fastLength(genType x)'],['../a00324.html#ga90f66be92ef61e705c005e7b3209edb8',1,'glm::fastLength(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastlog',['fastLog',['../a00323.html#gae1bdc97b7f96a600e29c753f1cd4388a',1,'glm::fastLog(T x)'],['../a00323.html#ga937256993a7219e73f186bb348fe6be8',1,'glm::fastLog(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastlog2',['fastLog2',['../a00323.html#ga6e98118685f6dc9e05fbb13dd5e5234e',1,'glm::fastLog2(T x)'],['../a00323.html#ga7562043539194ccc24649f8475bc5584',1,'glm::fastLog2(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastmix',['fastMix',['../a00352.html#ga264e10708d58dd0ff53b7902a2bd2561',1,'glm']]],\n  ['fastnormalize',['fastNormalize',['../a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c',1,'glm']]],\n  ['fastnormalizedot',['fastNormalizeDot',['../a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e',1,'glm']]],\n  ['fastpow',['fastPow',['../a00323.html#ga5340e98a11fcbbd936ba6e983a154d50',1,'glm::fastPow(genType x, genType y)'],['../a00323.html#ga15325a8ed2d1c4ed2412c4b3b3927aa2',1,'glm::fastPow(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00323.html#ga7f2562db9c3e02ae76169c36b086c3f6',1,'glm::fastPow(genTypeT x, genTypeU y)'],['../a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5',1,'glm::fastPow(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastsin',['fastSin',['../a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915',1,'glm']]],\n  ['fastsqrt',['fastSqrt',['../a00324.html#ga6c460e9414a50b2fc455c8f64c86cdc9',1,'glm::fastSqrt(genType x)'],['../a00324.html#gae83f0c03614f73eae5478c5b6274ee6d',1,'glm::fastSqrt(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fasttan',['fastTan',['../a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2',1,'glm']]],\n  ['fclamp',['fclamp',['../a00321.html#ga1e28539d3a46965ed9ef92ec7cb3b18a',1,'glm::fclamp(genType x, genType minVal, genType maxVal)'],['../a00321.html#ga60796d08903489ee185373593bc16b9d',1,'glm::fclamp(vec&lt; L, T, Q &gt; const &amp;x, T minVal, T maxVal)'],['../a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297',1,'glm::fclamp(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)']]],\n  ['fdualquat',['fdualquat',['../a00317.html#ga237c2b9b42c9a930e49de5840ae0f930',1,'glm']]],\n  ['findlsb',['findLSB',['../a00370.html#gaf74c4d969fa34ab8acb9d390f5ca5274',1,'glm::findLSB(genIUType x)'],['../a00370.html#ga4454c0331d6369888c28ab677f4810c7',1,'glm::findLSB(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['findmsb',['findMSB',['../a00370.html#ga7e4a794d766861c70bc961630f8ef621',1,'glm::findMSB(genIUType x)'],['../a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872',1,'glm::findMSB(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['findnsb',['findNSB',['../a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075',1,'glm::findNSB(genIUType x, int significantBitCount)'],['../a00274.html#gaff61eca266da315002a3db92ff0dd604',1,'glm::findNSB(vec&lt; L, T, Q &gt; const &amp;Source, vec&lt; L, int, Q &gt; SignificantBitCount)']]],\n  ['fliplr',['fliplr',['../a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb',1,'glm']]],\n  ['flipud',['flipud',['../a00336.html#ga85003371f0ba97380dd25e8905de1870',1,'glm']]],\n  ['float1',['float1',['../a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead',1,'glm']]],\n  ['float1x1',['float1x1',['../a00315.html#ga73720b8dc4620835b17f74d428f98c0c',1,'glm']]],\n  ['float2',['float2',['../a00315.html#ga02d3c013982c183906c61d74aa3166ce',1,'glm']]],\n  ['float2x2',['float2x2',['../a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f',1,'glm']]],\n  ['float2x3',['float2x3',['../a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe',1,'glm']]],\n  ['float2x4',['float2x4',['../a00315.html#gafec3cfd901ab334a92e0242b8f2269b4',1,'glm']]],\n  ['float3',['float3',['../a00315.html#ga821ff110fc8533a053cbfcc93e078cc0',1,'glm']]],\n  ['float32',['float32',['../a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1',1,'glm']]],\n  ['float32_5ft',['float32_t',['../a00304.html#gaa4947bc8b47c72fceea9bda730ecf603',1,'glm']]],\n  ['float3x2',['float3x2',['../a00315.html#gaa6c69f04ba95f3faedf95dae874de576',1,'glm']]],\n  ['float3x3',['float3x3',['../a00315.html#ga6ceb5d38a58becdf420026e12a6562f3',1,'glm']]],\n  ['float3x4',['float3x4',['../a00315.html#ga4d2679c321b793ca3784fe0315bb5332',1,'glm']]],\n  ['float4',['float4',['../a00315.html#gae2da7345087db3815a25d8837a727ef1',1,'glm']]],\n  ['float4x2',['float4x2',['../a00315.html#ga308b9af0c221145bcfe9bfc129d9098e',1,'glm']]],\n  ['float4x3',['float4x3',['../a00315.html#gac0a51b4812038aa81d73ffcc37f741ac',1,'glm']]],\n  ['float4x4',['float4x4',['../a00315.html#gad3051649b3715d828a4ab92cdae7c3bf',1,'glm']]],\n  ['float64',['float64',['../a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80',1,'glm']]],\n  ['float64_5ft',['float64_t',['../a00304.html#ga728366fef72cd96f0a5fa6429f05469e',1,'glm']]],\n  ['floatbitstoint',['floatBitsToInt',['../a00241.html#ga1425c1c3160ec51214b03a0469a3013d',1,'glm::floatBitsToInt(float const &amp;v)'],['../a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed',1,'glm::floatBitsToInt(vec&lt; L, float, Q &gt; const &amp;v)']]],\n  ['floatbitstouint',['floatBitsToUint',['../a00241.html#ga70e0271c34af52f3100c7960e18c3f2b',1,'glm::floatBitsToUint(float const &amp;v)'],['../a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db',1,'glm::floatBitsToUint(vec&lt; L, float, Q &gt; const &amp;v)']]],\n  ['floor',['floor',['../a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d',1,'glm']]],\n  ['floor_5flog2',['floor_log2',['../a00330.html#ga7011b4e1c1e1ed492149b028feacc00e',1,'glm']]],\n  ['floormultiple',['floorMultiple',['../a00302.html#ga2ffa3cd5f2ea746ee1bf57c46da6315e',1,'glm::floorMultiple(genType v, genType Multiple)'],['../a00302.html#gacdd8901448f51f0b192380e422fae3e4',1,'glm::floorMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['floorpoweroftwo',['floorPowerOfTwo',['../a00302.html#gafe273a57935d04c9db677bf67f9a71f4',1,'glm::floorPowerOfTwo(genIUType v)'],['../a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d',1,'glm::floorPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['fma',['fma',['../a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2',1,'glm']]],\n  ['fmat2',['fmat2',['../a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280',1,'glm']]],\n  ['fmat2x2',['fmat2x2',['../a00304.html#ga3350c93c3275298f940a42875388e4b4',1,'glm']]],\n  ['fmat2x3',['fmat2x3',['../a00304.html#ga55a2d2a8eb09b5633668257eb3cad453',1,'glm']]],\n  ['fmat2x4',['fmat2x4',['../a00304.html#ga681381f19f11c9e5ee45cda2c56937ff',1,'glm']]],\n  ['fmat3',['fmat3',['../a00304.html#ga253d453c20e037730023fea0215cb6f6',1,'glm']]],\n  ['fmat3x2',['fmat3x2',['../a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f',1,'glm']]],\n  ['fmat3x3',['fmat3x3',['../a00304.html#gaa07c86650253672a19dbfb898f3265b8',1,'glm']]],\n  ['fmat3x4',['fmat3x4',['../a00304.html#ga44e158af77a670ee1b58c03cda9e1619',1,'glm']]],\n  ['fmat4',['fmat4',['../a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca',1,'glm']]],\n  ['fmat4x2',['fmat4x2',['../a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774',1,'glm']]],\n  ['fmat4x3',['fmat4x3',['../a00304.html#ga4295048a78bdf46b8a7de77ec665b497',1,'glm']]],\n  ['fmat4x4',['fmat4x4',['../a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3',1,'glm']]],\n  ['fmax',['fmax',['../a00258.html#ga36920478565cf608e93064283ce06421',1,'glm::fmax(T a, T b)'],['../a00258.html#ga0007bba71ca451ac70e99d28dfbeaab9',1,'glm::fmax(T a, T b, T C)'],['../a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08',1,'glm::fmax(T a, T b, T C, T D)'],['../a00267.html#gad66b6441f7200db16c9f341711733c56',1,'glm::fmax(vec&lt; L, T, Q &gt; const &amp;a, T b)'],['../a00267.html#ga8df4be3f48d6717c40ea788fd30deebf',1,'glm::fmax(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b)'],['../a00267.html#ga0f04ba924294dae4234ca93ede23229a',1,'glm::fmax(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)'],['../a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230',1,'glm::fmax(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)'],['../a00321.html#gae5792cb2b51190057e4aea027eb56f81',1,'glm::fmax(genType x, genType y)']]],\n  ['fmin',['fmin',['../a00258.html#ga7b2b438a765e2a62098c79eb212f28f0',1,'glm::fmin(T a, T b)'],['../a00258.html#ga1a95fe4cf5437e8133f1093fe9726a64',1,'glm::fmin(T a, T b, T c)'],['../a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661',1,'glm::fmin(T a, T b, T c, T d)'],['../a00267.html#gae989203363cff9eab5093630df4fe071',1,'glm::fmin(vec&lt; L, T, Q &gt; const &amp;x, T y)'],['../a00267.html#ga7c42e93cd778c9181d1cdeea4d3e43bd',1,'glm::fmin(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00267.html#ga7e62739055b49189d9355471f78fe000',1,'glm::fmin(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)'],['../a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c',1,'glm::fmin(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)'],['../a00321.html#gaa3200559611ac5b9b9ae7283547916a7',1,'glm::fmin(genType x, genType y)']]],\n  ['fmod',['fmod',['../a00314.html#gae5e80425df9833164ad469e83b475fb4',1,'glm']]],\n  ['four_5fover_5fpi',['four_over_pi',['../a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09',1,'glm']]],\n  ['fract',['fract',['../a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7',1,'glm::fract(genType x)'],['../a00241.html#ga2df623004f634b440d61e018d62c751b',1,'glm::fract(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['frexp',['frexp',['../a00241.html#gaddf5ef73283c171730e0bcc11833fa81',1,'glm']]],\n  ['frustum',['frustum',['../a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9',1,'glm']]],\n  ['frustumlh',['frustumLH',['../a00243.html#gae4277c37f61d81da01bc9db14ea90296',1,'glm']]],\n  ['frustumlh_5fno',['frustumLH_NO',['../a00243.html#ga259520cad03b3f8bca9417920035ed01',1,'glm']]],\n  ['frustumlh_5fzo',['frustumLH_ZO',['../a00243.html#ga94218b094862d17798370242680b9030',1,'glm']]],\n  ['frustumno',['frustumNO',['../a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90',1,'glm']]],\n  ['frustumrh',['frustumRH',['../a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136',1,'glm']]],\n  ['frustumrh_5fno',['frustumRH_NO',['../a00243.html#ga9236c8439f21be186b79c97b588836b9',1,'glm']]],\n  ['frustumrh_5fzo',['frustumRH_ZO',['../a00243.html#ga7654a9227f14d5382786b9fc0eb5692d',1,'glm']]],\n  ['frustumzo',['frustumZO',['../a00243.html#gaa73322e152edf50cf30a6edac342a757',1,'glm']]],\n  ['functions_2ehpp',['functions.hpp',['../a00034.html',1,'']]],\n  ['fvec1',['fvec1',['../a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f',1,'glm']]],\n  ['fvec2',['fvec2',['../a00304.html#ga24273aa02abaecaab7f160bac437a339',1,'glm']]],\n  ['fvec3',['fvec3',['../a00304.html#ga89930533646b30d021759298aa6bf04a',1,'glm']]],\n  ['fvec4',['fvec4',['../a00304.html#ga713c796c54875cf4092d42ff9d9096b0',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_6.js",
    "content": "var searchData=\n[\n  ['color_5fspace_2ehpp',['color_space.hpp',['../a00012.html',1,'']]],\n  ['color_5fspace_2ehpp',['color_space.hpp',['../a00013.html',1,'']]],\n  ['common_2ehpp',['common.hpp',['../a00016.html',1,'']]],\n  ['geometric_20functions',['Geometric functions',['../a00279.html',1,'']]],\n  ['glm_5fext_5fmatrix_5fclip_5fspace',['GLM_EXT_matrix_clip_space',['../a00243.html',1,'']]],\n  ['glm_5fext_5fmatrix_5fcommon',['GLM_EXT_matrix_common',['../a00244.html',1,'']]],\n  ['glm_5fext_5fmatrix_5fprojection',['GLM_EXT_matrix_projection',['../a00245.html',1,'']]],\n  ['glm_5fext_5fmatrix_5frelational',['GLM_EXT_matrix_relational',['../a00246.html',1,'']]],\n  ['glm_5fext_5fmatrix_5ftransform',['GLM_EXT_matrix_transform',['../a00247.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fcommon',['GLM_EXT_quaternion_common',['../a00248.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fdouble',['GLM_EXT_quaternion_double',['../a00249.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fdouble_5fprecision',['GLM_EXT_quaternion_double_precision',['../a00250.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fexponential',['GLM_EXT_quaternion_exponential',['../a00251.html',1,'']]],\n  ['glm_5fext_5fquaternion_5ffloat',['GLM_EXT_quaternion_float',['../a00252.html',1,'']]],\n  ['glm_5fext_5fquaternion_5ffloat_5fprecision',['GLM_EXT_quaternion_float_precision',['../a00253.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fgeometric',['GLM_EXT_quaternion_geometric',['../a00254.html',1,'']]],\n  ['glm_5fext_5fquaternion_5frelational',['GLM_EXT_quaternion_relational',['../a00255.html',1,'']]],\n  ['glm_5fext_5fquaternion_5ftransform',['GLM_EXT_quaternion_transform',['../a00256.html',1,'']]],\n  ['glm_5fext_5fquaternion_5ftrigonometric',['GLM_EXT_quaternion_trigonometric',['../a00257.html',1,'']]],\n  ['glm_5fext_5fscalar_5fcommon',['GLM_EXT_scalar_common',['../a00258.html',1,'']]],\n  ['glm_5fext_5fscalar_5fconstants',['GLM_EXT_scalar_constants',['../a00259.html',1,'']]],\n  ['glm_5fext_5fscalar_5fint_5fsized',['GLM_EXT_scalar_int_sized',['../a00260.html',1,'']]],\n  ['glm_5fext_5fscalar_5finteger',['GLM_EXT_scalar_integer',['../a00261.html',1,'']]],\n  ['glm_5fext_5fscalar_5frelational',['GLM_EXT_scalar_relational',['../a00262.html',1,'']]],\n  ['glm_5fext_5fscalar_5fuint_5fsized',['GLM_EXT_scalar_uint_sized',['../a00263.html',1,'']]],\n  ['glm_5fext_5fscalar_5fulp',['GLM_EXT_scalar_ulp',['../a00264.html',1,'']]],\n  ['glm_5fext_5fvector_5fbool1',['GLM_EXT_vector_bool1',['../a00265.html',1,'']]],\n  ['glm_5fext_5fvector_5fbool1_5fprecision',['GLM_EXT_vector_bool1_precision',['../a00266.html',1,'']]],\n  ['glm_5fext_5fvector_5fcommon',['GLM_EXT_vector_common',['../a00267.html',1,'']]],\n  ['glm_5fext_5fvector_5fdouble1',['GLM_EXT_vector_double1',['../a00268.html',1,'']]],\n  ['glm_5fext_5fvector_5fdouble1_5fprecision',['GLM_EXT_vector_double1_precision',['../a00269.html',1,'']]],\n  ['glm_5fext_5fvector_5ffloat1',['GLM_EXT_vector_float1',['../a00270.html',1,'']]],\n  ['glm_5fext_5fvector_5ffloat1_5fprecision',['GLM_EXT_vector_float1_precision',['../a00271.html',1,'']]],\n  ['glm_5fext_5fvector_5fint1',['GLM_EXT_vector_int1',['../a00272.html',1,'']]],\n  ['glm_5fext_5fvector_5fint1_5fprecision',['GLM_EXT_vector_int1_precision',['../a00273.html',1,'']]],\n  ['glm_5fext_5fvector_5finteger',['GLM_EXT_vector_integer',['../a00274.html',1,'']]],\n  ['glm_5fext_5fvector_5frelational',['GLM_EXT_vector_relational',['../a00275.html',1,'']]],\n  ['glm_5fext_5fvector_5fuint1',['GLM_EXT_vector_uint1',['../a00276.html',1,'']]],\n  ['glm_5fext_5fvector_5fuint1_5fprecision',['GLM_EXT_vector_uint1_precision',['../a00277.html',1,'']]],\n  ['glm_5fext_5fvector_5fulp',['GLM_EXT_vector_ulp',['../a00278.html',1,'']]],\n  ['gauss',['gauss',['../a00326.html#ga0b50b197ff74261a0fad90f4b8d24702',1,'glm::gauss(T x, T ExpectedValue, T StandardDeviation)'],['../a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab',1,'glm::gauss(vec&lt; 2, T, Q &gt; const &amp;Coord, vec&lt; 2, T, Q &gt; const &amp;ExpectedValue, vec&lt; 2, T, Q &gt; const &amp;StandardDeviation)']]],\n  ['gaussrand',['gaussRand',['../a00300.html#ga5193a83e49e4fdc5652c084711083574',1,'glm']]],\n  ['geometric_2ehpp',['geometric.hpp',['../a00036.html',1,'']]],\n  ['glm_2ehpp',['glm.hpp',['../a00037.html',1,'']]],\n  ['glm_5faligned_5ftypedef',['GLM_ALIGNED_TYPEDEF',['../a00364.html#gab5cd5c5fad228b25c782084f1cc30114',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1)'],['../a00364.html#ga5bb5dd895ef625c1b113f2cf400186b0',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2)'],['../a00364.html#gac6efa54cf7c6c86f7158922abdb1a430',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4)'],['../a00364.html#ga6612eb77c8607048e7552279a11eeb5f',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8)'],['../a00364.html#ga7ddc1848ff2223026db8968ce0c97497',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1)'],['../a00364.html#ga22240dd9458b0f8c11fbcc4f48714f68',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2)'],['../a00364.html#ga8130ea381d76a2cc34a93ccbb6cf487d',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4)'],['../a00364.html#ga7ccb60f3215d293fd62b33b31ed0e7be',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8)'],['../a00364.html#gac20d508d2ef5cc95ad3daf083c57ec2a',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1)'],['../a00364.html#ga50257b48069a31d0c8d9c1f644d267de',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2)'],['../a00364.html#gaa07e98e67b7a3435c0746018c7a2a839',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4)'],['../a00364.html#ga62601fc6f8ca298b77285bedf03faffd',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8)'],['../a00364.html#gac8cff825951aeb54dd846037113c72db',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1)'],['../a00364.html#ga78f443d88f438575a62b5df497cdf66b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2)'],['../a00364.html#ga0680cd3b5d4e8006985fb41a4f9b57af',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4)'],['../a00364.html#gad9e5babb1dd3e3531b42c37bf25dd951',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8)'],['../a00364.html#ga353fd9fa8a9ad952fcabd0d53ad9a6dd',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1)'],['../a00364.html#ga2196442c0e5c5e8c77842de388c42521',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2)'],['../a00364.html#ga1284488189daf897cf095c5eefad9744',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4)'],['../a00364.html#ga73fdc86a539808af58808b7c60a1c4d8',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8)'],['../a00364.html#gafafeea923e1983262c972e2b83922d3b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1)'],['../a00364.html#ga4b35ca5fe8f55c9d2fe54fdb8d8896f4',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2)'],['../a00364.html#ga63b882e29170d428463d99c3d630acc6',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4)'],['../a00364.html#ga8b20507bb048c1edea2d441cc953e6f0',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8)'],['../a00364.html#ga56c5ca60813027b603c7b61425a0479d',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1)'],['../a00364.html#ga7a751b3aff24c0259f4a7357c2969089',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2)'],['../a00364.html#ga70cd2144351c556469ee6119e59971fc',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4)'],['../a00364.html#ga46bbf08dc004d8c433041e0b5018a5d3',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8)'],['../a00364.html#gab3e10c77a20d1abad2de1c561c7a5c18',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1)'],['../a00364.html#ga968f30319ebeaca9ebcd3a25a8e139fb',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2)'],['../a00364.html#gaae773c28e6390c6aa76f5b678b7098a3',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4)'],['../a00364.html#ga790cfff1ca39d0ed696ffed980809311',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8)'],['../a00364.html#ga8265b91eb23c120a9b0c3e381bc37b96',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1)'],['../a00364.html#gae6d384de17588d8edb894fbe06e0d410',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2)'],['../a00364.html#ga9c8172b745ee03fc5b2b91c350c2922f',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4)'],['../a00364.html#ga77e0dff12aa4020ddc3f8cabbea7b2e6',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8)'],['../a00364.html#gabd82b9faa9d4d618dbbe0fc8a1efee63',1,'glm::GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1)'],['../a00364.html#ga285649744560be21000cfd81bbb5d507',1,'glm::GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2)'],['../a00364.html#ga07732da630b2deda428ce95c0ecaf3ff',1,'glm::GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4)'],['../a00364.html#ga1a8da2a8c51f69c07a2e7f473aa420f4',1,'glm::GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8)'],['../a00364.html#ga848aedf13e2d9738acf0bb482c590174',1,'glm::GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1)'],['../a00364.html#gafd2803d39049dd45a37a63931e25d943',1,'glm::GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2)'],['../a00364.html#gae553b33349d6da832cf0724f1e024094',1,'glm::GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4)'],['../a00364.html#ga16d223a2b3409e812e1d3bd87f0e9e5c',1,'glm::GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8)'],['../a00364.html#ga2de065d2ddfdb366bcd0febca79ae2ad',1,'glm::GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1)'],['../a00364.html#gabd786bdc20a11c8cb05c92c8212e28d3',1,'glm::GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2)'],['../a00364.html#gad4aefe56691cdb640c72f0d46d3fb532',1,'glm::GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4)'],['../a00364.html#ga8fe9745f7de24a8394518152ff9fccdc',1,'glm::GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8)'],['../a00364.html#gaaad735483450099f7f882d4e3a3569bd',1,'glm::GLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4)'],['../a00364.html#gac7b6f823802edbd6edbaf70ea25bf068',1,'glm::GLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8)'],['../a00364.html#ga3e235bcd2b8029613f25b8d40a2d3ef7',1,'glm::GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16)'],['../a00364.html#ga50d8a9523968c77f8325b4c9bfbff41e',1,'glm::GLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16)'],['../a00364.html#ga9ec20fdfb729c702032da9378c79679f',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1)'],['../a00364.html#ga25b3fe1d9e8d0a5e86c1949c1acd8131',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2)'],['../a00364.html#ga2958f907719d94d8109b562540c910e2',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4)'],['../a00364.html#ga1fe6fc032a978f1c845fac9aa0668714',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4)'],['../a00364.html#gaa4161e7a496dc96972254143fe873e55',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2)'],['../a00364.html#ga9d7cb211ccda69b1c22ddeeb0f3e7aba',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4)'],['../a00364.html#gaaee91dd2ab34423bcc11072ef6bd0f02',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8)'],['../a00364.html#ga49f047ccaa8b31fad9f26c67bf9b3510',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8)'],['../a00364.html#ga904e9c2436bb099397c0823506a0771f',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4)'],['../a00364.html#gaf90651cf2f5e7ee2b11cfdc5a6749534',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8)'],['../a00364.html#ga7354a4ead8cb17868aec36b9c30d6010',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16)'],['../a00364.html#gad2ecbdea18732163e2636e27b37981ee',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16)'],['../a00364.html#ga965b1c9aa1800e93d4abc2eb2b5afcbf',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8)'],['../a00364.html#ga1f9e9c2ea2768675dff9bae5cde2d829',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16)'],['../a00364.html#gad77c317b7d942322cd5be4c8127b3187',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32)'],['../a00364.html#ga716f8ea809bdb11b5b542d8b71aeb04f',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32)'],['../a00364.html#gad46f8e9082d5878b1bc04f9c1471cdaa',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1)'],['../a00364.html#ga1246094581af624aca6c7499aaabf801',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2)'],['../a00364.html#ga7a5009a1d0196bbf21dd7518f61f0249',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4)'],['../a00364.html#ga45213fd18b3bb1df391671afefe4d1e7',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8)'],['../a00364.html#ga0ba26b4e3fd9ecbc25358efd68d8a4ca',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1)'],['../a00364.html#gaf2b58f5fb6d4ec8ce7b76221d3af43e1',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2)'],['../a00364.html#gadc246401847dcba155f0699425e49dcd',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4)'],['../a00364.html#gaace64bddf51a9def01498da9a94fb01c',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8)'],['../a00364.html#gad7bb97c29d664bd86ffb1bed4abc5534',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1)'],['../a00364.html#ga404bba7785130e0b1384d695a9450b28',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2)'],['../a00364.html#ga31ba41fd896257536958ec6080203d2a',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4)'],['../a00364.html#gacca5f13627f57b3505676e40a6e43e5e',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8)'],['../a00364.html#ga5faf1d3e70bf33174dd7f3d01d5b883b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1)'],['../a00364.html#ga727e2bf2c433bb3b0182605860a48363',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2)'],['../a00364.html#ga12566ca66d5962dadb4a5eb4c74e891e',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4)'],['../a00364.html#ga7b66a97a8acaa35c5a377b947318c6bc',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8)'],['../a00364.html#gaa9cde002439b74fa66120a16a9f55fcc',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1)'],['../a00364.html#ga1ca98c67f7d1e975f7c5202f1da1df1f',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2)'],['../a00364.html#ga1dc8bc6199d785f235576948d80a597c',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4)'],['../a00364.html#gad14a0f2ec93519682b73d70b8e401d81',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8)'],['../a00364.html#gada8b996eb6526dc1ead813bd49539d1b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1)'],['../a00364.html#ga28948f6bfb52b42deb9d73ae1ea8d8b0',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2)'],['../a00364.html#gad6a7c0b5630f89d3f1c5b4ef2919bb4c',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4)'],['../a00364.html#gaa0fc531cbaa972ac3a0b86d21ef4a7fa',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8)'],['../a00364.html#ga0ee829f7b754b262bbfe6317c0d678ac',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1)'],['../a00364.html#ga447848a817a626cae08cedc9778b331c',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2)'],['../a00364.html#ga6027ae13b2734f542a6e7beee11b8820',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4)'],['../a00364.html#ga2aca46c8608c95ef991ee4c332acde5f',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8)'],['../a00364.html#gaff50b10dd1c48be324fdaffd18e2c7ea',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1)'],['../a00364.html#ga9fc4421dbb833d5461e6d4e59dcfde55',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2)'],['../a00364.html#ga329f1e2b94b33ba5e3918197030bcf03',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4)'],['../a00364.html#ga71e646f7e301aa422328194162c9c998',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8)'],['../a00364.html#ga8942e09f479489441a7a5004c6d8cb66',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1)'],['../a00364.html#gaab32497d6e4db16ee439dbedd64c5865',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2)'],['../a00364.html#gaaadbb34952eca8e3d7fe122c3e167742',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4)'],['../a00364.html#ga92024d27c74a3650afb55ec8e024ed25',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8)'],['../a00364.html#gabde1d0b4072df35453db76075ab896a6',1,'glm::GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1)'],['../a00364.html#ga06c296c9e398b294c8c9dd2a7693dcbb',1,'glm::GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2)'],['../a00364.html#gacf1744488c96ebd33c9f36ad33b2010a',1,'glm::GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4)'],['../a00364.html#ga3328061a64c20ba59d5f9da24c2cd059',1,'glm::GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8)'],['../a00364.html#gaf6ced36f13bae57f377bafa6f5fcc299',1,'glm::GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1)'],['../a00364.html#gafbc7fb7847bfc78a339d1d371c915c73',1,'glm::GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2)'],['../a00364.html#gaa86bc56a73fd8120b1121b5f5e6245ae',1,'glm::GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4)'],['../a00364.html#ga68c0b9e669060d0eb5ab8c3ddeb483d8',1,'glm::GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8)'],['../a00364.html#ga4f3bab577daf3343e99cc005134bce86',1,'glm::GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1)'],['../a00364.html#ga13a2391339d0790d43b76d00a7611c4f',1,'glm::GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2)'],['../a00364.html#ga197570e03acbc3d18ab698e342971e8f',1,'glm::GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4)'],['../a00364.html#ga0f033b21e145a1faa32c62ede5878993',1,'glm::GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8)'],['../a00364.html#ga509af83527f5cd512e9a7873590663aa',1,'glm::GLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4)'],['../a00364.html#ga94e86186978c502c6dc0c0d9c4a30679',1,'glm::GLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8)'],['../a00364.html#ga5cec574686a7f3c8ed24bb195c5e2d0a',1,'glm::GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16)'],['../a00364.html#ga47edfdcee9c89b1ebdaf20450323b1d4',1,'glm::GLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16)'],['../a00364.html#ga5611d6718e3a00096918a64192e73a45',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1)'],['../a00364.html#ga19837e6f72b60d994a805ef564c6c326',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2)'],['../a00364.html#ga9740cf8e34f068049b42a2753f9601c2',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4)'],['../a00364.html#ga8b8588bb221448f5541a858903822a57',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4)'],['../a00364.html#ga991abe990c16de26b2129d6bc2f4c051',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2)'],['../a00364.html#gac01bb9fc32a1cd76c2b80d030f71df4c',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4)'],['../a00364.html#ga09540dbca093793a36a8997e0d4bee77',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8)'],['../a00364.html#gaecafb5996f5a44f57e34d29c8670741e',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8)'],['../a00364.html#gac6b161a04d2f8408fe1c9d857e8daac0',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4)'],['../a00364.html#ga1fa0dfc8feb0fa17dab2acd43e05342b',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8)'],['../a00364.html#ga0019500abbfa9c66eff61ca75eaaed94',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16)'],['../a00364.html#ga14fd29d01dae7b08a04e9facbcc18824',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16)'],['../a00364.html#gab253845f534a67136f9619843cade903',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8)'],['../a00364.html#ga929427a7627940cdf3304f9c050b677d',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16)'],['../a00364.html#gae373b6c04fdf9879f33d63e6949c037e',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32)'],['../a00364.html#ga53a8a03dca2015baec4584f45b8e9cdc',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32)'],['../a00364.html#gab3301bae94ef5bf59fbdd9a24e7d2a01',1,'glm::GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4)'],['../a00364.html#gada9b0bea273d3ae0286f891533b9568f',1,'glm::GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4)'],['../a00364.html#gadbce23b9f23d77bb3884e289a574ebd5',1,'glm::GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4)'],['../a00364.html#ga75930684ff2233171c573e603f216162',1,'glm::GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8)'],['../a00364.html#ga6e3a2d83b131336219a0f4c7cbba2a48',1,'glm::GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8)'],['../a00364.html#gaa4deaa0dea930c393d55e7a4352b0a20',1,'glm::GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8)'],['../a00364.html#ga81bc497b2bfc6f80bab690c6ee28f0f9',1,'glm::GLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4)'],['../a00364.html#gada3e8f783e9d4b90006695a16c39d4d4',1,'glm::GLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8)'],['../a00364.html#gab8d081fac3a38d6f55fa552f32168d32',1,'glm::GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16)'],['../a00364.html#ga12fe7b9769c964c5b48dcfd8b7f40198',1,'glm::GLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16)'],['../a00364.html#gaefab04611c7f8fe1fd9be3071efea6cc',1,'glm::GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4)'],['../a00364.html#ga2543c05ba19b3bd19d45b1227390c5b4',1,'glm::GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8)'],['../a00364.html#ga009afd727fd657ef33a18754d6d28f60',1,'glm::GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16)'],['../a00364.html#ga2f26177e74bfb301a3d0e02ec3c3ef53',1,'glm::GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16)'],['../a00364.html#ga309f495a1d6b75ddf195b674b65cb1e4',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4)'],['../a00364.html#ga5e185865a2217d0cd47187644683a8c3',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8)'],['../a00364.html#gade4458b27b039b9ca34f8ec049f3115a',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16)'],['../a00364.html#ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16)'],['../a00364.html#ga3e0f35fa0c626285a8bad41707e7316c',1,'glm::GLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8)'],['../a00364.html#ga78bfec2f185d1d365ea0a9ef1e3d45b8',1,'glm::GLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16)'],['../a00364.html#ga01fe6fee6db5df580b6724a7e681f069',1,'glm::GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32)'],['../a00364.html#ga687d5b8f551d5af32425c0b2fba15e99',1,'glm::GLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32)'],['../a00364.html#ga8e842371d46842ff8f1813419ba49d0f',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8)'],['../a00364.html#ga32814aa0f19316b43134fc25f2aad2b9',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16)'],['../a00364.html#gaf3d3bbc1e93909b689123b085e177a14',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32)'],['../a00364.html#ga804c654cead1139bd250f90f9bb01fad',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32)'],['../a00364.html#gacce4ac532880b8c7469d3c31974420a1',1,'glm::GLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16)'],['../a00364.html#ga0498e0e249a6faddaf96aa55d7f81c3b',1,'glm::GLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16)'],['../a00364.html#ga7435d87de82a0d652b35dc5b9cc718d5',1,'glm::GLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16)'],['../a00364.html#ga719da577361541a4c43a2dd1d0e361e1',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16)'],['../a00364.html#ga6e7ee4f541e1d7db66cd1a224caacafb',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16)'],['../a00364.html#gae5d672d359f2a39f63f98c7975057486',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16)'],['../a00364.html#ga6fa2df037dbfc5fe8c8e0b4db8a34953',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16)'],['../a00364.html#ga0743b4f4f69a3227b82ff58f6abbad62',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16)'],['../a00364.html#ga1a76b325fdf70f961d835edd182c63dd',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16)'],['../a00364.html#ga4b4e181cd041ba28c3163e7b8074aef0',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16)'],['../a00364.html#ga27b13f465abc8a40705698145e222c3f',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16)'],['../a00364.html#ga2608d19cc275830a6f8c0b6405625a4f',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16)'],['../a00364.html#ga93f09768241358a287c4cca538f1f7e7',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16)'],['../a00364.html#ga7c117e3ecca089e10247b1d41d88aff9',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16)'],['../a00364.html#ga07c75cd04ba42dc37fa3e105f89455c5',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16)'],['../a00364.html#ga65ff0d690a34a4d7f46f9b2eb51525ee',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16)'],['../a00364.html#gadd8ddbe2bf65ccede865ba2f510176dc',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16)'],['../a00364.html#gaf18dbff14bf13d3ff540c517659ec045',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16)'],['../a00364.html#ga66339f6139bf7ff19e245beb33f61cc8',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16)'],['../a00364.html#ga1558a48b3934011b52612809f443e46d',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16)'],['../a00364.html#gaa52e5732daa62851627021ad551c7680',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16)'],['../a00364.html#gac09663c42566bcb58d23c6781ac4e85a',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16)'],['../a00364.html#ga3f510999e59e1b309113e1d561162b29',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16)'],['../a00364.html#ga2c9c94f0c89cd71ce56551db6cf4aaec',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16)'],['../a00364.html#ga99ce8274c750fbfdf0e70c95946a2875',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16)'],['../a00364.html#ga9476ef66790239df53dbe66f3989c3b5',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16)'],['../a00364.html#gacc429b3b0b49921e12713b6d31e14e1d',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16)'],['../a00364.html#ga88f6c6fa06e6e64479763e69444669cf',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32)'],['../a00364.html#gaae8e4639c991e64754145ab8e4c32083',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32)'],['../a00364.html#ga6e9094f3feb3b5b49d0f83683a101fde',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32)'],['../a00364.html#gadbd2c639c03de1c3e9591b5a39f65559',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32)'],['../a00364.html#gab059d7b9fe2094acc563b7223987499f',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32)'],['../a00364.html#gabbc811d1c52ed2b8cfcaff1378f75c69',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32)'],['../a00364.html#ga9ddf5212777734d2fd841a84439f3bdf',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32)'],['../a00364.html#gad1dda32ed09f94bfcf0a7d8edfb6cf13',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32)'],['../a00364.html#ga5875e0fa72f07e271e7931811cbbf31a',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32)'],['../a00364.html#ga41e82cd6ac07f912ba2a2d45799dcf0d',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32)'],['../a00364.html#ga0892638d6ba773043b3d63d1d092622e',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32)'],['../a00364.html#ga912a16432608b822f1e13607529934c1',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32)'],['../a00364.html#gafd945a8ea86b042aba410e0560df9a3d',1,'glm::GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16)'],['../a00364.html#ga19c2ba545d1f2f36bcb7b60c9a228622',1,'glm::GLM_ALIGNED_TYPEDEF(quat, aligned_fquat, 16)'],['../a00364.html#gaabc28c84a3288b697605d4688686f9a9',1,'glm::GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32)'],['../a00364.html#ga1ed8aeb5ca67fade269a46105f1bf273',1,'glm::GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16)'],['../a00364.html#ga95cc03b8b475993fa50e05e38e203303',1,'glm::GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32)']]],\n  ['golden_5fratio',['golden_ratio',['../a00290.html#ga748cf8642830657c5b7eae04d0a80899',1,'glm']]],\n  ['gradient_5fpaint_2ehpp',['gradient_paint.hpp',['../a00038.html',1,'']]],\n  ['greaterthan',['greaterThan',['../a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b',1,'glm::greaterThan(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4',1,'glm::greaterThan(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['greaterthanequal',['greaterThanEqual',['../a00299.html#ga388cbeba987dae7b5937f742efa49a5a',1,'glm::greaterThanEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00374.html#ga859975f538940f8d18fe62f916b9abd7',1,'glm::greaterThanEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['glm_5fgtc_5fbitfield',['GLM_GTC_bitfield',['../a00288.html',1,'']]],\n  ['glm_5fgtc_5fcolor_5fspace',['GLM_GTC_color_space',['../a00289.html',1,'']]],\n  ['glm_5fgtc_5fconstants',['GLM_GTC_constants',['../a00290.html',1,'']]],\n  ['glm_5fgtc_5fepsilon',['GLM_GTC_epsilon',['../a00291.html',1,'']]],\n  ['glm_5fgtc_5finteger',['GLM_GTC_integer',['../a00292.html',1,'']]],\n  ['glm_5fgtc_5fmatrix_5faccess',['GLM_GTC_matrix_access',['../a00293.html',1,'']]],\n  ['glm_5fgtc_5fmatrix_5finteger',['GLM_GTC_matrix_integer',['../a00294.html',1,'']]],\n  ['glm_5fgtc_5fmatrix_5finverse',['GLM_GTC_matrix_inverse',['../a00295.html',1,'']]],\n  ['glm_5fgtc_5fmatrix_5ftransform',['GLM_GTC_matrix_transform',['../a00296.html',1,'']]],\n  ['glm_5fgtc_5fnoise',['GLM_GTC_noise',['../a00297.html',1,'']]],\n  ['glm_5fgtc_5fpacking',['GLM_GTC_packing',['../a00298.html',1,'']]],\n  ['glm_5fgtc_5fquaternion',['GLM_GTC_quaternion',['../a00299.html',1,'']]],\n  ['glm_5fgtc_5frandom',['GLM_GTC_random',['../a00300.html',1,'']]],\n  ['glm_5fgtc_5freciprocal',['GLM_GTC_reciprocal',['../a00301.html',1,'']]],\n  ['glm_5fgtc_5fround',['GLM_GTC_round',['../a00302.html',1,'']]],\n  ['glm_5fgtc_5ftype_5faligned',['GLM_GTC_type_aligned',['../a00303.html',1,'']]],\n  ['glm_5fgtc_5ftype_5fprecision',['GLM_GTC_type_precision',['../a00304.html',1,'']]],\n  ['glm_5fgtc_5ftype_5fptr',['GLM_GTC_type_ptr',['../a00305.html',1,'']]],\n  ['glm_5fgtc_5fulp',['GLM_GTC_ulp',['../a00306.html',1,'']]],\n  ['glm_5fgtc_5fvec1',['GLM_GTC_vec1',['../a00307.html',1,'']]],\n  ['glm_5fgtx_5fassociated_5fmin_5fmax',['GLM_GTX_associated_min_max',['../a00308.html',1,'']]],\n  ['glm_5fgtx_5fbit',['GLM_GTX_bit',['../a00309.html',1,'']]],\n  ['glm_5fgtx_5fclosest_5fpoint',['GLM_GTX_closest_point',['../a00310.html',1,'']]],\n  ['glm_5fgtx_5fcolor_5fencoding',['GLM_GTX_color_encoding',['../a00311.html',1,'']]],\n  ['glm_5fgtx_5fcolor_5fspace',['GLM_GTX_color_space',['../a00312.html',1,'']]],\n  ['glm_5fgtx_5fcolor_5fspace_5fycocg',['GLM_GTX_color_space_YCoCg',['../a00313.html',1,'']]],\n  ['glm_5fgtx_5fcommon',['GLM_GTX_common',['../a00314.html',1,'']]],\n  ['glm_5fgtx_5fcompatibility',['GLM_GTX_compatibility',['../a00315.html',1,'']]],\n  ['glm_5fgtx_5fcomponent_5fwise',['GLM_GTX_component_wise',['../a00316.html',1,'']]],\n  ['glm_5fgtx_5fdual_5fquaternion',['GLM_GTX_dual_quaternion',['../a00317.html',1,'']]],\n  ['glm_5fgtx_5feasing',['GLM_GTX_easing',['../a00318.html',1,'']]],\n  ['glm_5fgtx_5feuler_5fangles',['GLM_GTX_euler_angles',['../a00319.html',1,'']]],\n  ['glm_5fgtx_5fextend',['GLM_GTX_extend',['../a00320.html',1,'']]],\n  ['glm_5fgtx_5fextented_5fmin_5fmax',['GLM_GTX_extented_min_max',['../a00321.html',1,'']]],\n  ['glm_5fgtx_5fexterior_5fproduct',['GLM_GTX_exterior_product',['../a00322.html',1,'']]],\n  ['glm_5fgtx_5ffast_5fexponential',['GLM_GTX_fast_exponential',['../a00323.html',1,'']]],\n  ['glm_5fgtx_5ffast_5fsquare_5froot',['GLM_GTX_fast_square_root',['../a00324.html',1,'']]],\n  ['glm_5fgtx_5ffast_5ftrigonometry',['GLM_GTX_fast_trigonometry',['../a00325.html',1,'']]],\n  ['glm_5fgtx_5ffunctions',['GLM_GTX_functions',['../a00326.html',1,'']]],\n  ['glm_5fgtx_5fgradient_5fpaint',['GLM_GTX_gradient_paint',['../a00327.html',1,'']]],\n  ['glm_5fgtx_5fhanded_5fcoordinate_5fspace',['GLM_GTX_handed_coordinate_space',['../a00328.html',1,'']]],\n  ['glm_5fgtx_5fhash',['GLM_GTX_hash',['../a00329.html',1,'']]],\n  ['glm_5fgtx_5finteger',['GLM_GTX_integer',['../a00330.html',1,'']]],\n  ['glm_5fgtx_5fintersect',['GLM_GTX_intersect',['../a00331.html',1,'']]],\n  ['glm_5fgtx_5fio',['GLM_GTX_io',['../a00332.html',1,'']]],\n  ['glm_5fgtx_5flog_5fbase',['GLM_GTX_log_base',['../a00333.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5fcross_5fproduct',['GLM_GTX_matrix_cross_product',['../a00334.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5fdecompose',['GLM_GTX_matrix_decompose',['../a00335.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5ffactorisation',['GLM_GTX_matrix_factorisation',['../a00336.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5finterpolation',['GLM_GTX_matrix_interpolation',['../a00337.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5fmajor_5fstorage',['GLM_GTX_matrix_major_storage',['../a00338.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5foperation',['GLM_GTX_matrix_operation',['../a00339.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5fquery',['GLM_GTX_matrix_query',['../a00340.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5ftransform_5f2d',['GLM_GTX_matrix_transform_2d',['../a00341.html',1,'']]],\n  ['glm_5fgtx_5fmixed_5fproducte',['GLM_GTX_mixed_producte',['../a00342.html',1,'']]],\n  ['glm_5fgtx_5fnorm',['GLM_GTX_norm',['../a00343.html',1,'']]],\n  ['glm_5fgtx_5fnormal',['GLM_GTX_normal',['../a00344.html',1,'']]],\n  ['glm_5fgtx_5fnormalize_5fdot',['GLM_GTX_normalize_dot',['../a00345.html',1,'']]],\n  ['glm_5fgtx_5fnumber_5fprecision',['GLM_GTX_number_precision',['../a00346.html',1,'']]],\n  ['glm_5fgtx_5foptimum_5fpow',['GLM_GTX_optimum_pow',['../a00347.html',1,'']]],\n  ['glm_5fgtx_5forthonormalize',['GLM_GTX_orthonormalize',['../a00348.html',1,'']]],\n  ['glm_5fgtx_5fperpendicular',['GLM_GTX_perpendicular',['../a00349.html',1,'']]],\n  ['glm_5fgtx_5fpolar_5fcoordinates',['GLM_GTX_polar_coordinates',['../a00350.html',1,'']]],\n  ['glm_5fgtx_5fprojection',['GLM_GTX_projection',['../a00351.html',1,'']]],\n  ['glm_5fgtx_5fquaternion',['GLM_GTX_quaternion',['../a00352.html',1,'']]],\n  ['glm_5fgtx_5frange',['GLM_GTX_range',['../a00353.html',1,'']]],\n  ['glm_5fgtx_5fraw_5fdata',['GLM_GTX_raw_data',['../a00354.html',1,'']]],\n  ['glm_5fgtx_5frotate_5fnormalized_5faxis',['GLM_GTX_rotate_normalized_axis',['../a00355.html',1,'']]],\n  ['glm_5fgtx_5frotate_5fvector',['GLM_GTX_rotate_vector',['../a00356.html',1,'']]],\n  ['glm_5fgtx_5fscalar_5frelational',['GLM_GTX_scalar_relational',['../a00357.html',1,'']]],\n  ['glm_5fgtx_5fspline',['GLM_GTX_spline',['../a00358.html',1,'']]],\n  ['glm_5fgtx_5fstd_5fbased_5ftype',['GLM_GTX_std_based_type',['../a00359.html',1,'']]],\n  ['glm_5fgtx_5fstring_5fcast',['GLM_GTX_string_cast',['../a00360.html',1,'']]],\n  ['glm_5fgtx_5ftexture',['GLM_GTX_texture',['../a00361.html',1,'']]],\n  ['glm_5fgtx_5ftransform',['GLM_GTX_transform',['../a00362.html',1,'']]],\n  ['glm_5fgtx_5ftransform2',['GLM_GTX_transform2',['../a00363.html',1,'']]],\n  ['glm_5fgtx_5ftype_5faligned',['GLM_GTX_type_aligned',['../a00364.html',1,'']]],\n  ['glm_5fgtx_5ftype_5ftrait',['GLM_GTX_type_trait',['../a00365.html',1,'']]],\n  ['glm_5fgtx_5fvec_5fswizzle',['GLM_GTX_vec_swizzle',['../a00366.html',1,'']]],\n  ['glm_5fgtx_5fvector_5fangle',['GLM_GTX_vector_angle',['../a00367.html',1,'']]],\n  ['glm_5fgtx_5fvector_5fquery',['GLM_GTX_vector_query',['../a00368.html',1,'']]],\n  ['glm_5fgtx_5fwrap',['GLM_GTX_wrap',['../a00369.html',1,'']]],\n  ['integer_2ehpp',['integer.hpp',['../a00042.html',1,'']]],\n  ['integer_2ehpp',['integer.hpp',['../a00041.html',1,'']]],\n  ['matrix_5ftransform_2ehpp',['matrix_transform.hpp',['../a00109.html',1,'']]],\n  ['packing_2ehpp',['packing.hpp',['../a00119.html',1,'']]],\n  ['quaternion_2ehpp',['quaternion.hpp',['../a00126.html',1,'']]],\n  ['quaternion_2ehpp',['quaternion.hpp',['../a00125.html',1,'']]],\n  ['scalar_5frelational_2ehpp',['scalar_relational.hpp',['../a00150.html',1,'']]],\n  ['type_5faligned_2ehpp',['type_aligned.hpp',['../a00161.html',1,'']]],\n  ['type_5faligned_2ehpp',['type_aligned.hpp',['../a00162.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_7.js",
    "content": "var searchData=\n[\n  ['half_5fpi',['half_pi',['../a00290.html#ga0c36b41d462e45641faf7d7938948bac',1,'glm']]],\n  ['handed_5fcoordinate_5fspace_2ehpp',['handed_coordinate_space.hpp',['../a00039.html',1,'']]],\n  ['hash_2ehpp',['hash.hpp',['../a00040.html',1,'']]],\n  ['hermite',['hermite',['../a00358.html#gaa69e143f6374d32f934a8edeaa50bac9',1,'glm']]],\n  ['highestbitvalue',['highestBitValue',['../a00309.html#ga0dcc8fe7c3d3ad60dea409281efa3d05',1,'glm::highestBitValue(genIUType Value)'],['../a00309.html#ga898ef075ccf809a1e480faab48fe96bf',1,'glm::highestBitValue(vec&lt; L, T, Q &gt; const &amp;value)']]],\n  ['highp_5fbvec1',['highp_bvec1',['../a00266.html#gae8a1e14abae1387274f57741750c06a2',1,'glm']]],\n  ['highp_5fbvec2',['highp_bvec2',['../a00282.html#gac6c781a85f012d77a75310a3058702c2',1,'glm']]],\n  ['highp_5fbvec3',['highp_bvec3',['../a00282.html#gaedb70027d89a0a405046aefda4eabaa6',1,'glm']]],\n  ['highp_5fbvec4',['highp_bvec4',['../a00282.html#gaee663ff64429443ab07a5327074192f6',1,'glm']]],\n  ['highp_5fddualquat',['highp_ddualquat',['../a00317.html#ga8f67eafa7197d7a668dad5105a463d2a',1,'glm']]],\n  ['highp_5fdmat2',['highp_dmat2',['../a00284.html#ga369b447bb1b312449b679ea1f90f3cea',1,'glm']]],\n  ['highp_5fdmat2x2',['highp_dmat2x2',['../a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7',1,'glm']]],\n  ['highp_5fdmat2x3',['highp_dmat2x3',['../a00284.html#gad4689ec33bc2c26e10132b174b49001a',1,'glm']]],\n  ['highp_5fdmat2x4',['highp_dmat2x4',['../a00284.html#ga5ceeb46670fdc000a0701910cc5061c9',1,'glm']]],\n  ['highp_5fdmat3',['highp_dmat3',['../a00284.html#ga86d6d4dbad92ffdcc759773340e15a97',1,'glm']]],\n  ['highp_5fdmat3x2',['highp_dmat3x2',['../a00284.html#ga3647309010a2160e9ec89bc6f7c95c35',1,'glm']]],\n  ['highp_5fdmat3x3',['highp_dmat3x3',['../a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce',1,'glm']]],\n  ['highp_5fdmat3x4',['highp_dmat3x4',['../a00284.html#ga6543eeeb64f48d79a0b96484308c50f0',1,'glm']]],\n  ['highp_5fdmat4',['highp_dmat4',['../a00284.html#ga945254f459860741138bceb74da496b9',1,'glm']]],\n  ['highp_5fdmat4x2',['highp_dmat4x2',['../a00284.html#gaeda1f474c668eaecc443bea85a4a4eca',1,'glm']]],\n  ['highp_5fdmat4x3',['highp_dmat4x3',['../a00284.html#gacf237c2d8832fe8db2d7e187585d34bd',1,'glm']]],\n  ['highp_5fdmat4x4',['highp_dmat4x4',['../a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a',1,'glm']]],\n  ['highp_5fdquat',['highp_dquat',['../a00250.html#gaf13a25f41afc03480b40fc71bd249cec',1,'glm']]],\n  ['highp_5fdualquat',['highp_dualquat',['../a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf',1,'glm']]],\n  ['highp_5fdvec1',['highp_dvec1',['../a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe',1,'glm']]],\n  ['highp_5fdvec2',['highp_dvec2',['../a00282.html#gab98d77cca255914f5e29697fcbc2d975',1,'glm']]],\n  ['highp_5fdvec3',['highp_dvec3',['../a00282.html#gab24dc20dcdc5b71282634bdbf6b70105',1,'glm']]],\n  ['highp_5fdvec4',['highp_dvec4',['../a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590',1,'glm']]],\n  ['highp_5ff32',['highp_f32',['../a00304.html#ga6906e1ef0b34064b4b675489c5c38725',1,'glm']]],\n  ['highp_5ff32mat2',['highp_f32mat2',['../a00304.html#ga298f7d4d273678d0282812368da27fda',1,'glm']]],\n  ['highp_5ff32mat2x2',['highp_f32mat2x2',['../a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968',1,'glm']]],\n  ['highp_5ff32mat2x3',['highp_f32mat2x3',['../a00304.html#ga0aeb5cb001473b08c88175012708a379',1,'glm']]],\n  ['highp_5ff32mat2x4',['highp_f32mat2x4',['../a00304.html#ga88938ee1e7981fa3402e88da6ad74531',1,'glm']]],\n  ['highp_5ff32mat3',['highp_f32mat3',['../a00304.html#ga24f9ef3263b1638564713892cc37981f',1,'glm']]],\n  ['highp_5ff32mat3x2',['highp_f32mat3x2',['../a00304.html#ga36537e701456f12c20e73f469cac4967',1,'glm']]],\n  ['highp_5ff32mat3x3',['highp_f32mat3x3',['../a00304.html#gaab691ae40c37976d268d8cac0096e0e1',1,'glm']]],\n  ['highp_5ff32mat3x4',['highp_f32mat3x4',['../a00304.html#gaa5086dbd6efb272d13fc88829330861d',1,'glm']]],\n  ['highp_5ff32mat4',['highp_f32mat4',['../a00304.html#ga14c90ca49885723f51d06e295587236f',1,'glm']]],\n  ['highp_5ff32mat4x2',['highp_f32mat4x2',['../a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f',1,'glm']]],\n  ['highp_5ff32mat4x3',['highp_f32mat4x3',['../a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59',1,'glm']]],\n  ['highp_5ff32mat4x4',['highp_f32mat4x4',['../a00304.html#gaf1b712b97b2322685fbbed28febe5f84',1,'glm']]],\n  ['highp_5ff32quat',['highp_f32quat',['../a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3',1,'glm']]],\n  ['highp_5ff32vec1',['highp_f32vec1',['../a00304.html#gab1b1c9e8667902b78b2c330e4d383a61',1,'glm']]],\n  ['highp_5ff32vec2',['highp_f32vec2',['../a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77',1,'glm']]],\n  ['highp_5ff32vec3',['highp_f32vec3',['../a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c',1,'glm']]],\n  ['highp_5ff32vec4',['highp_f32vec4',['../a00304.html#ga0f038d4e09862a74f03d102c59eda73e',1,'glm']]],\n  ['highp_5ff64',['highp_f64',['../a00304.html#ga51d5266017d88f62737c1973923a7cf4',1,'glm']]],\n  ['highp_5ff64mat2',['highp_f64mat2',['../a00304.html#gaf7adb92ce8de0afaff01436b039fd924',1,'glm']]],\n  ['highp_5ff64mat2x2',['highp_f64mat2x2',['../a00304.html#ga773ea237a051827cfc20de960bc73ff0',1,'glm']]],\n  ['highp_5ff64mat2x3',['highp_f64mat2x3',['../a00304.html#ga8342c7469384c6d769cacc9e309278d9',1,'glm']]],\n  ['highp_5ff64mat2x4',['highp_f64mat2x4',['../a00304.html#ga5a67a7440b9c0d1538533540f99036a5',1,'glm']]],\n  ['highp_5ff64mat3',['highp_f64mat3',['../a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546',1,'glm']]],\n  ['highp_5ff64mat3x2',['highp_f64mat3x2',['../a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a',1,'glm']]],\n  ['highp_5ff64mat3x3',['highp_f64mat3x3',['../a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4',1,'glm']]],\n  ['highp_5ff64mat3x4',['highp_f64mat3x4',['../a00304.html#gad310b1dddeec9ec837a104e7db8de580',1,'glm']]],\n  ['highp_5ff64mat4',['highp_f64mat4',['../a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5',1,'glm']]],\n  ['highp_5ff64mat4x2',['highp_f64mat4x2',['../a00304.html#ga58c4631421e323e252fc716b6103e38c',1,'glm']]],\n  ['highp_5ff64mat4x3',['highp_f64mat4x3',['../a00304.html#gae94823d65648e44d972863c6caa13103',1,'glm']]],\n  ['highp_5ff64mat4x4',['highp_f64mat4x4',['../a00304.html#ga09a2374b725c4246d263ee36fb66434c',1,'glm']]],\n  ['highp_5ff64quat',['highp_f64quat',['../a00304.html#gafcfdd74a115163af2ce1093551747352',1,'glm']]],\n  ['highp_5ff64vec1',['highp_f64vec1',['../a00304.html#ga62c31b133ceee9984fbee05ac4c434a9',1,'glm']]],\n  ['highp_5ff64vec2',['highp_f64vec2',['../a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2',1,'glm']]],\n  ['highp_5ff64vec3',['highp_f64vec3',['../a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851',1,'glm']]],\n  ['highp_5ff64vec4',['highp_f64vec4',['../a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444',1,'glm']]],\n  ['highp_5ffdualquat',['highp_fdualquat',['../a00317.html#ga4c4e55e9c99dc57b299ed590968da564',1,'glm']]],\n  ['highp_5ffloat32',['highp_float32',['../a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea',1,'glm']]],\n  ['highp_5ffloat32_5ft',['highp_float32_t',['../a00304.html#ga5376ef18dca9d248897c3363ef5a06b2',1,'glm']]],\n  ['highp_5ffloat64',['highp_float64',['../a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215',1,'glm']]],\n  ['highp_5ffloat64_5ft',['highp_float64_t',['../a00304.html#gaaeeb0077198cff40e3f48b1108ece139',1,'glm']]],\n  ['highp_5ffmat2',['highp_fmat2',['../a00304.html#gae98c88d9a7befa9b5877f49176225535',1,'glm']]],\n  ['highp_5ffmat2x2',['highp_fmat2x2',['../a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad',1,'glm']]],\n  ['highp_5ffmat2x3',['highp_fmat2x3',['../a00304.html#gacf111095594996fef29067b2454fccad',1,'glm']]],\n  ['highp_5ffmat2x4',['highp_fmat2x4',['../a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2',1,'glm']]],\n  ['highp_5ffmat3',['highp_fmat3',['../a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75',1,'glm']]],\n  ['highp_5ffmat3x2',['highp_fmat3x2',['../a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19',1,'glm']]],\n  ['highp_5ffmat3x3',['highp_fmat3x3',['../a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e',1,'glm']]],\n  ['highp_5ffmat3x4',['highp_fmat3x4',['../a00304.html#ga961fac2a885907ffcf4d40daac6615c5',1,'glm']]],\n  ['highp_5ffmat4',['highp_fmat4',['../a00304.html#gabf28443ce0cc0959077ec39b21f32c39',1,'glm']]],\n  ['highp_5ffmat4x2',['highp_fmat4x2',['../a00304.html#ga076961cf2d120c7168b957cb2ed107b3',1,'glm']]],\n  ['highp_5ffmat4x3',['highp_fmat4x3',['../a00304.html#gae406ec670f64170a7437b5e302eeb2cb',1,'glm']]],\n  ['highp_5ffmat4x4',['highp_fmat4x4',['../a00304.html#gaee80c7cd3caa0f2635058656755f6f69',1,'glm']]],\n  ['highp_5ffvec1',['highp_fvec1',['../a00304.html#gaa1040342c4efdedc8f90e6267db8d41c',1,'glm']]],\n  ['highp_5ffvec2',['highp_fvec2',['../a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae',1,'glm']]],\n  ['highp_5ffvec3',['highp_fvec3',['../a00304.html#ga6ef77413883f48d6b53b4169b25edbd0',1,'glm']]],\n  ['highp_5ffvec4',['highp_fvec4',['../a00304.html#ga8b839abbb44f5102609eed89f6ed61f7',1,'glm']]],\n  ['highp_5fi16',['highp_i16',['../a00304.html#ga0336abc2604dd2c20c30e036454b64f8',1,'glm']]],\n  ['highp_5fi16vec1',['highp_i16vec1',['../a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19',1,'glm']]],\n  ['highp_5fi16vec2',['highp_i16vec2',['../a00304.html#gaa7db3ad10947cf70cae6474d05ebd227',1,'glm']]],\n  ['highp_5fi16vec3',['highp_i16vec3',['../a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96',1,'glm']]],\n  ['highp_5fi16vec4',['highp_i16vec4',['../a00304.html#ga7a18659438828f91ccca28f1a1e067b4',1,'glm']]],\n  ['highp_5fi32',['highp_i32',['../a00304.html#ga727675ac6b5d2fc699520e0059735e25',1,'glm']]],\n  ['highp_5fi32vec1',['highp_i32vec1',['../a00304.html#ga6a9d71cc62745302f70422b7dc98755c',1,'glm']]],\n  ['highp_5fi32vec2',['highp_i32vec2',['../a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530',1,'glm']]],\n  ['highp_5fi32vec3',['highp_i32vec3',['../a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1',1,'glm']]],\n  ['highp_5fi32vec4',['highp_i32vec4',['../a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902',1,'glm']]],\n  ['highp_5fi64',['highp_i64',['../a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd',1,'glm']]],\n  ['highp_5fi64vec1',['highp_i64vec1',['../a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4',1,'glm']]],\n  ['highp_5fi64vec2',['highp_i64vec2',['../a00304.html#gad9d1903cb20899966e8ebe0670889a5f',1,'glm']]],\n  ['highp_5fi64vec3',['highp_i64vec3',['../a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a',1,'glm']]],\n  ['highp_5fi64vec4',['highp_i64vec4',['../a00304.html#gad23b1be9b3bf20352089a6b738f0ebba',1,'glm']]],\n  ['highp_5fi8',['highp_i8',['../a00304.html#gacb88796f2d08ef253d0345aff20c3aee',1,'glm']]],\n  ['highp_5fi8vec1',['highp_i8vec1',['../a00304.html#ga1d8c10949691b0fd990253476f47beb3',1,'glm']]],\n  ['highp_5fi8vec2',['highp_i8vec2',['../a00304.html#ga50542e4cb9b2f9bec213b66e06145d07',1,'glm']]],\n  ['highp_5fi8vec3',['highp_i8vec3',['../a00304.html#ga8396bfdc081d9113190d0c39c9f67084',1,'glm']]],\n  ['highp_5fi8vec4',['highp_i8vec4',['../a00304.html#ga4824e3ddf6e608117dfe4809430737b4',1,'glm']]],\n  ['highp_5fimat2',['highp_imat2',['../a00294.html#ga8499cc3b016003f835314c1c756e9db9',1,'glm']]],\n  ['highp_5fimat2x2',['highp_imat2x2',['../a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3',1,'glm']]],\n  ['highp_5fimat2x3',['highp_imat2x3',['../a00294.html#gaba49d890e06c9444795f5a133fbf1336',1,'glm']]],\n  ['highp_5fimat2x4',['highp_imat2x4',['../a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b',1,'glm']]],\n  ['highp_5fimat3',['highp_imat3',['../a00294.html#gaca4506a3efa679eff7c006d9826291fd',1,'glm']]],\n  ['highp_5fimat3x2',['highp_imat3x2',['../a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb',1,'glm']]],\n  ['highp_5fimat3x3',['highp_imat3x3',['../a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41',1,'glm']]],\n  ['highp_5fimat3x4',['highp_imat3x4',['../a00294.html#ga53008f580be99018a17b357b5a4ffc0d',1,'glm']]],\n  ['highp_5fimat4',['highp_imat4',['../a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56',1,'glm']]],\n  ['highp_5fimat4x2',['highp_imat4x2',['../a00294.html#ga1858820fb292cae396408b2034407f72',1,'glm']]],\n  ['highp_5fimat4x3',['highp_imat4x3',['../a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5',1,'glm']]],\n  ['highp_5fimat4x4',['highp_imat4x4',['../a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44',1,'glm']]],\n  ['highp_5fint16',['highp_int16',['../a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718',1,'glm']]],\n  ['highp_5fint16_5ft',['highp_int16_t',['../a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff',1,'glm']]],\n  ['highp_5fint32',['highp_int32',['../a00304.html#ga84ed04b4e0de18c977e932d617e7c223',1,'glm']]],\n  ['highp_5fint32_5ft',['highp_int32_t',['../a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f',1,'glm']]],\n  ['highp_5fint64',['highp_int64',['../a00304.html#ga226a8d52b4e3f77aaa6231135e886aac',1,'glm']]],\n  ['highp_5fint64_5ft',['highp_int64_t',['../a00304.html#ga73c6abb280a45feeff60f9accaee91f3',1,'glm']]],\n  ['highp_5fint8',['highp_int8',['../a00304.html#gad0549c902a96a7164e4ac858d5f39dbf',1,'glm']]],\n  ['highp_5fint8_5ft',['highp_int8_t',['../a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5',1,'glm']]],\n  ['highp_5fivec1',['highp_ivec1',['../a00273.html#ga7e02566f2bd2caa68e61be45a477c77e',1,'glm']]],\n  ['highp_5fivec2',['highp_ivec2',['../a00282.html#gaa18f6b80b41c214f10666948539c1f93',1,'glm']]],\n  ['highp_5fivec3',['highp_ivec3',['../a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18',1,'glm']]],\n  ['highp_5fivec4',['highp_ivec4',['../a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e',1,'glm']]],\n  ['highp_5fmat2',['highp_mat2',['../a00284.html#ga4d5a0055544a516237dcdace049b143d',1,'glm']]],\n  ['highp_5fmat2x2',['highp_mat2x2',['../a00284.html#ga2352ae43b284c9f71446674c0208c05d',1,'glm']]],\n  ['highp_5fmat2x3',['highp_mat2x3',['../a00284.html#ga7a0e3fe41512b0494e598f5c58722f19',1,'glm']]],\n  ['highp_5fmat2x4',['highp_mat2x4',['../a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f',1,'glm']]],\n  ['highp_5fmat3',['highp_mat3',['../a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e',1,'glm']]],\n  ['highp_5fmat3x2',['highp_mat3x2',['../a00284.html#ga1eda47a00027ec440eac05d63739c71b',1,'glm']]],\n  ['highp_5fmat3x3',['highp_mat3x3',['../a00284.html#ga2ea82e12f4d7afcfce8f59894d400230',1,'glm']]],\n  ['highp_5fmat3x4',['highp_mat3x4',['../a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7',1,'glm']]],\n  ['highp_5fmat4',['highp_mat4',['../a00284.html#gad72e13d669d039f12ae5afa23148adc1',1,'glm']]],\n  ['highp_5fmat4x2',['highp_mat4x2',['../a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5',1,'glm']]],\n  ['highp_5fmat4x3',['highp_mat4x3',['../a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38',1,'glm']]],\n  ['highp_5fmat4x4',['highp_mat4x4',['../a00284.html#ga58cc504be0e3b61c48bc91554a767b9f',1,'glm']]],\n  ['highp_5fquat',['highp_quat',['../a00253.html#gaa2fd8085774376310aeb80588e0eab6e',1,'glm']]],\n  ['highp_5fu16',['highp_u16',['../a00304.html#ga8e62c883d13f47015f3b70ed88751369',1,'glm']]],\n  ['highp_5fu16vec1',['highp_u16vec1',['../a00304.html#gad064202b4cf9a2972475c03de657cb39',1,'glm']]],\n  ['highp_5fu16vec2',['highp_u16vec2',['../a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159',1,'glm']]],\n  ['highp_5fu16vec3',['highp_u16vec3',['../a00304.html#gacfd806749008f0ade6ac4bb9dd91082f',1,'glm']]],\n  ['highp_5fu16vec4',['highp_u16vec4',['../a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61',1,'glm']]],\n  ['highp_5fu32',['highp_u32',['../a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf',1,'glm']]],\n  ['highp_5fu32vec1',['highp_u32vec1',['../a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3',1,'glm']]],\n  ['highp_5fu32vec2',['highp_u32vec2',['../a00304.html#ga2f256334f83fba4c2d219e414b51df6c',1,'glm']]],\n  ['highp_5fu32vec3',['highp_u32vec3',['../a00304.html#gaf14d7a50502464e7cbfa074f24684cb1',1,'glm']]],\n  ['highp_5fu32vec4',['highp_u32vec4',['../a00304.html#ga22166f0da65038b447f3c5e534fff1c2',1,'glm']]],\n  ['highp_5fu64',['highp_u64',['../a00304.html#ga0c181fdf06a309691999926b6690c969',1,'glm']]],\n  ['highp_5fu64vec1',['highp_u64vec1',['../a00304.html#gae4fe774744852c4d7d069be2e05257ab',1,'glm']]],\n  ['highp_5fu64vec2',['highp_u64vec2',['../a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d',1,'glm']]],\n  ['highp_5fu64vec3',['highp_u64vec3',['../a00304.html#ga41bdabea6e589029659331ba47eb78c1',1,'glm']]],\n  ['highp_5fu64vec4',['highp_u64vec4',['../a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325',1,'glm']]],\n  ['highp_5fu8',['highp_u8',['../a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c',1,'glm']]],\n  ['highp_5fu8vec1',['highp_u8vec1',['../a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2',1,'glm']]],\n  ['highp_5fu8vec2',['highp_u8vec2',['../a00304.html#ga27585b7c3ab300059f11fcba465f6fd2',1,'glm']]],\n  ['highp_5fu8vec3',['highp_u8vec3',['../a00304.html#ga45721c13b956eb691cbd6c6c1429167a',1,'glm']]],\n  ['highp_5fu8vec4',['highp_u8vec4',['../a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060',1,'glm']]],\n  ['highp_5fuint16',['highp_uint16',['../a00304.html#ga746dc6da204f5622e395f492997dbf57',1,'glm']]],\n  ['highp_5fuint16_5ft',['highp_uint16_t',['../a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7',1,'glm']]],\n  ['highp_5fuint32',['highp_uint32',['../a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3',1,'glm']]],\n  ['highp_5fuint32_5ft',['highp_uint32_t',['../a00304.html#gae978599c9711ac263ba732d4ac225b0e',1,'glm']]],\n  ['highp_5fuint64',['highp_uint64',['../a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce',1,'glm']]],\n  ['highp_5fuint64_5ft',['highp_uint64_t',['../a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08',1,'glm']]],\n  ['highp_5fuint8',['highp_uint8',['../a00304.html#ga97432f9979e73e66567361fd01e4cffb',1,'glm']]],\n  ['highp_5fuint8_5ft',['highp_uint8_t',['../a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5',1,'glm']]],\n  ['highp_5fumat2',['highp_umat2',['../a00294.html#ga42cbce64c4c1cd121b8437daa6e110de',1,'glm']]],\n  ['highp_5fumat2x2',['highp_umat2x2',['../a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28',1,'glm']]],\n  ['highp_5fumat2x3',['highp_umat2x3',['../a00294.html#ga90718c7128320b24b52f9ea70e643ad4',1,'glm']]],\n  ['highp_5fumat2x4',['highp_umat2x4',['../a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b',1,'glm']]],\n  ['highp_5fumat3',['highp_umat3',['../a00294.html#gaa1143120339b7d2d469d327662e8a172',1,'glm']]],\n  ['highp_5fumat3x2',['highp_umat3x2',['../a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4',1,'glm']]],\n  ['highp_5fumat3x3',['highp_umat3x3',['../a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2',1,'glm']]],\n  ['highp_5fumat3x4',['highp_umat3x4',['../a00294.html#ga25ee15c323924f2d0fe9896d329e5086',1,'glm']]],\n  ['highp_5fumat4',['highp_umat4',['../a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9',1,'glm']]],\n  ['highp_5fumat4x2',['highp_umat4x2',['../a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801',1,'glm']]],\n  ['highp_5fumat4x3',['highp_umat4x3',['../a00294.html#ga45a8163d02c43216252056b0c120f3a5',1,'glm']]],\n  ['highp_5fumat4x4',['highp_umat4x4',['../a00294.html#ga6a56cbb769aed334c95241664415f9ba',1,'glm']]],\n  ['highp_5fuvec1',['highp_uvec1',['../a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39',1,'glm']]],\n  ['highp_5fuvec2',['highp_uvec2',['../a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8',1,'glm']]],\n  ['highp_5fuvec3',['highp_uvec3',['../a00282.html#gaef61508dd40ec523416697982f9ceaae',1,'glm']]],\n  ['highp_5fuvec4',['highp_uvec4',['../a00282.html#gaeebd7dd9f3e678691f8620241e5f9221',1,'glm']]],\n  ['highp_5fvec1',['highp_vec1',['../a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9',1,'glm']]],\n  ['highp_5fvec2',['highp_vec2',['../a00282.html#gaa92c1954d71b1e7914874bd787b43d1c',1,'glm']]],\n  ['highp_5fvec3',['highp_vec3',['../a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9',1,'glm']]],\n  ['highp_5fvec4',['highp_vec4',['../a00282.html#gad281decae52948b82feb3a9db8f63a7b',1,'glm']]],\n  ['hsvcolor',['hsvColor',['../a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_8.js",
    "content": "var searchData=\n[\n  ['integer_20functions',['Integer functions',['../a00370.html',1,'']]],\n  ['i16',['i16',['../a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699',1,'glm']]],\n  ['i16vec1',['i16vec1',['../a00304.html#gafe730798732aa7b0647096a004db1b1c',1,'glm']]],\n  ['i16vec2',['i16vec2',['../a00304.html#ga2996630ba7b10535af8e065cf326f761',1,'glm']]],\n  ['i16vec3',['i16vec3',['../a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b',1,'glm']]],\n  ['i16vec4',['i16vec4',['../a00304.html#ga550831bfc26d1e0101c1cb3d79938c06',1,'glm']]],\n  ['i32',['i32',['../a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb',1,'glm']]],\n  ['i32vec1',['i32vec1',['../a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf',1,'glm']]],\n  ['i32vec2',['i32vec2',['../a00304.html#ga8b44026374982dcd1e52d22bac99247e',1,'glm']]],\n  ['i32vec3',['i32vec3',['../a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e',1,'glm']]],\n  ['i32vec4',['i32vec4',['../a00304.html#ga866a05905c49912309ed1fa5f5980e61',1,'glm']]],\n  ['i64',['i64',['../a00304.html#gadb997e409103d4da18abd837e636a496',1,'glm']]],\n  ['i64vec1',['i64vec1',['../a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50',1,'glm']]],\n  ['i64vec2',['i64vec2',['../a00304.html#ga48310188e1d0c616bf8d78c92447523b',1,'glm']]],\n  ['i64vec3',['i64vec3',['../a00304.html#ga667948cfe6fb3d6606c750729ec49f77',1,'glm']]],\n  ['i64vec4',['i64vec4',['../a00304.html#gaa4e31c3d9de067029efeb161a44b0232',1,'glm']]],\n  ['i8',['i8',['../a00304.html#ga302ec977b0c0c3ea245b6c9275495355',1,'glm']]],\n  ['i8vec1',['i8vec1',['../a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b',1,'glm']]],\n  ['i8vec2',['i8vec2',['../a00304.html#gad06935764d78f43f9d542c784c2212ec',1,'glm']]],\n  ['i8vec3',['i8vec3',['../a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e',1,'glm']]],\n  ['i8vec4',['i8vec4',['../a00304.html#ga4177a44206121dabc8c4ff1c0f544574',1,'glm']]],\n  ['identity',['identity',['../a00247.html#ga81696f2b8d1db02ea1aff8da8f269314',1,'glm']]],\n  ['imat2',['imat2',['../a00294.html#gaabe04f9948d4a213bb1c20137de03e01',1,'glm']]],\n  ['imat2x2',['imat2x2',['../a00294.html#gaa4732a240522ad9bc28144fda2fc14ec',1,'glm']]],\n  ['imat2x3',['imat2x3',['../a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605',1,'glm']]],\n  ['imat2x4',['imat2x4',['../a00294.html#ga9d8faafdca42583d67e792dd038fc668',1,'glm']]],\n  ['imat3',['imat3',['../a00294.html#ga038f68437155ffa3c2583a15264a8195',1,'glm']]],\n  ['imat3x2',['imat3x2',['../a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f',1,'glm']]],\n  ['imat3x3',['imat3x3',['../a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4',1,'glm']]],\n  ['imat3x4',['imat3x4',['../a00294.html#ga6e9ce23496d8b08dfc302d4039694b58',1,'glm']]],\n  ['imat4',['imat4',['../a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb',1,'glm']]],\n  ['imat4x2',['imat4x2',['../a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa',1,'glm']]],\n  ['imat4x3',['imat4x3',['../a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5',1,'glm']]],\n  ['imat4x4',['imat4x4',['../a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b',1,'glm']]],\n  ['imulextended',['imulExtended',['../a00370.html#gac0c510a70e852f57594a9141848642e3',1,'glm']]],\n  ['infiniteperspective',['infinitePerspective',['../a00243.html#ga44fa38a18349450325cae2661bb115ca',1,'glm']]],\n  ['infiniteperspectivelh',['infinitePerspectiveLH',['../a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9',1,'glm']]],\n  ['infiniteperspectiverh',['infinitePerspectiveRH',['../a00243.html#ga99672ffe5714ef478dab2437255fe7e1',1,'glm']]],\n  ['int1',['int1',['../a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3',1,'glm']]],\n  ['int16',['int16',['../a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9',1,'glm']]],\n  ['int16_5ft',['int16_t',['../a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede',1,'glm']]],\n  ['int1x1',['int1x1',['../a00315.html#ga056ffe02d3a45af626f8e62221881c7a',1,'glm']]],\n  ['int2',['int2',['../a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a',1,'glm']]],\n  ['int2x2',['int2x2',['../a00315.html#ga4e5ce477c15836b21e3c42daac68554d',1,'glm']]],\n  ['int2x3',['int2x3',['../a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3',1,'glm']]],\n  ['int2x4',['int2x4',['../a00315.html#ga2749d59a7fddbac44f34ba78e57ef807',1,'glm']]],\n  ['int3',['int3',['../a00315.html#ga909c38a425f215a50c847145d7da09f0',1,'glm']]],\n  ['int32',['int32',['../a00260.html#ga43d43196463bde49cb067f5c20ab8481',1,'glm']]],\n  ['int32_5ft',['int32_t',['../a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710',1,'glm']]],\n  ['int3x2',['int3x2',['../a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8',1,'glm']]],\n  ['int3x3',['int3x3',['../a00315.html#ga15c9649286f0bf431bdf9b3509580048',1,'glm']]],\n  ['int3x4',['int3x4',['../a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f',1,'glm']]],\n  ['int4',['int4',['../a00315.html#gaecdef18c819c205aeee9f94dc93de56a',1,'glm']]],\n  ['int4x2',['int4x2',['../a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1',1,'glm']]],\n  ['int4x3',['int4x3',['../a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d',1,'glm']]],\n  ['int4x4',['int4x4',['../a00315.html#ga04dee1552424198b8f58b377c2ee00d8',1,'glm']]],\n  ['int64',['int64',['../a00260.html#gaff5189f97f9e842d9636a0f240001b2e',1,'glm']]],\n  ['int64_5ft',['int64_t',['../a00304.html#ga322a7d7d2c2c68994dc872a33de63c61',1,'glm']]],\n  ['int8',['int8',['../a00260.html#ga1b956fe1df85f3c132b21edb4e116458',1,'glm']]],\n  ['int8_5ft',['int8_t',['../a00304.html#ga4bf09d8838a86866b39ee6e109341645',1,'glm']]],\n  ['intbitstofloat',['intBitsToFloat',['../a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4',1,'glm::intBitsToFloat(int const &amp;v)'],['../a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0',1,'glm::intBitsToFloat(vec&lt; L, int, Q &gt; const &amp;v)']]],\n  ['integer_2ehpp',['integer.hpp',['../a00043.html',1,'']]],\n  ['intermediate',['intermediate',['../a00352.html#gacc5cd5f3e78de61d141c2355417424de',1,'glm']]],\n  ['interpolate',['interpolate',['../a00337.html#ga4e67863d150724b10c1ac00972dc958c',1,'glm']]],\n  ['intersect_2ehpp',['intersect.hpp',['../a00044.html',1,'']]],\n  ['intersectlinesphere',['intersectLineSphere',['../a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7',1,'glm']]],\n  ['intersectlinetriangle',['intersectLineTriangle',['../a00331.html#ga9d29b9b3acb504d43986502f42740df4',1,'glm']]],\n  ['intersectrayplane',['intersectRayPlane',['../a00331.html#gad3697a9700ea379739a667ea02573488',1,'glm']]],\n  ['intersectraysphere',['intersectRaySphere',['../a00331.html#gac88f8cd84c4bcb5b947d56acbbcfa56e',1,'glm::intersectRaySphere(genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, typename genType::value_type const sphereRadiusSquared, typename genType::value_type &amp;intersectionDistance)'],['../a00331.html#gad28c00515b823b579c608aafa1100c1d',1,'glm::intersectRaySphere(genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, const typename genType::value_type sphereRadius, genType &amp;intersectionPosition, genType &amp;intersectionNormal)']]],\n  ['intersectraytriangle',['intersectRayTriangle',['../a00331.html#ga65bf2c594482f04881c36bc761f9e946',1,'glm']]],\n  ['inverse',['inverse',['../a00248.html#gab41da854ae678e23e114b598cbca4065',1,'glm::inverse(qua&lt; T, Q &gt; const &amp;q)'],['../a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e',1,'glm::inverse(tdualquat&lt; T, Q &gt; const &amp;q)'],['../a00371.html#gaed509fe8129b01e4f20a6d0de5690091',1,'glm::inverse(mat&lt; C, R, T, Q &gt; const &amp;m)']]],\n  ['inversesqrt',['inversesqrt',['../a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a',1,'glm']]],\n  ['inversetranspose',['inverseTranspose',['../a00295.html#gab213cd0e3ead5f316d583f99d6312008',1,'glm']]],\n  ['io_2ehpp',['io.hpp',['../a00045.html',1,'']]],\n  ['iround',['iround',['../a00292.html#ga57824268ebe13a922f1d69a5d37f637f',1,'glm']]],\n  ['iscompnull',['isCompNull',['../a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76',1,'glm']]],\n  ['isdenormal',['isdenormal',['../a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91',1,'glm']]],\n  ['isfinite',['isfinite',['../a00315.html#gaf4b04dcd3526996d68c1bfe17bfc8657',1,'glm::isfinite(genType const &amp;x)'],['../a00315.html#gac3b12b8ac3014418fe53c299478b6603',1,'glm::isfinite(const vec&lt; 1, T, Q &gt; &amp;x)'],['../a00315.html#ga8e76dc3e406ce6a4155c2b12a2e4b084',1,'glm::isfinite(const vec&lt; 2, T, Q &gt; &amp;x)'],['../a00315.html#ga929ef27f896d902c1771a2e5e150fc97',1,'glm::isfinite(const vec&lt; 3, T, Q &gt; &amp;x)'],['../a00315.html#ga19925badbe10ce61df1d0de00be0b5ad',1,'glm::isfinite(const vec&lt; 4, T, Q &gt; &amp;x)']]],\n  ['isidentity',['isIdentity',['../a00340.html#gaee935d145581c82e82b154ccfd78ad91',1,'glm']]],\n  ['isinf',['isinf',['../a00241.html#ga2885587c23a106301f20443896365b62',1,'glm::isinf(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00248.html#ga45722741ea266b4e861938b365c5f362',1,'glm::isinf(qua&lt; T, Q &gt; const &amp;x)']]],\n  ['ismultiple',['isMultiple',['../a00261.html#gaec593d33956a8fe43f78fccc63ddde9a',1,'glm::isMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#ga354caf634ef333d9cb4844407416256a',1,'glm::isMultiple(vec&lt; L, T, Q &gt; const &amp;v, T Multiple)'],['../a00274.html#gabb4360e38c0943d8981ba965dead519d',1,'glm::isMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['isnan',['isnan',['../a00241.html#ga29ef934c00306490de837b4746b4e14d',1,'glm::isnan(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00248.html#ga1bb55f8963616502e96dc564384d8a03',1,'glm::isnan(qua&lt; T, Q &gt; const &amp;x)']]],\n  ['isnormalized',['isNormalized',['../a00340.html#gae785af56f47ce220a1609f7f84aa077a',1,'glm::isNormalized(mat&lt; 2, 2, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00340.html#gaa068311695f28f5f555f5f746a6a66fb',1,'glm::isNormalized(mat&lt; 3, 3, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad',1,'glm::isNormalized(mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00368.html#gac3c974f459fd75453134fad7ae89a39e',1,'glm::isNormalized(vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)']]],\n  ['isnull',['isNull',['../a00340.html#ga9790ec222ce948c0ff0d8ce927340dba',1,'glm::isNull(mat&lt; 2, 2, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00340.html#gae14501c6b14ccda6014cc5350080103d',1,'glm::isNull(mat&lt; 3, 3, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b',1,'glm::isNull(mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495',1,'glm::isNull(vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)']]],\n  ['isorthogonal',['isOrthogonal',['../a00340.html#ga58f3289f74dcab653387dd78ad93ca40',1,'glm']]],\n  ['ispoweroftwo',['isPowerOfTwo',['../a00261.html#gadf491730354aa7da67fbe23d4d688763',1,'glm::isPowerOfTwo(genIUType v)'],['../a00274.html#gabf2b61ded7049bcb13e25164f832a290',1,'glm::isPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['ivec1',['ivec1',['../a00272.html#gaedd0562c2e77714929d7723a7e2e0dba',1,'glm']]],\n  ['ivec2',['ivec2',['../a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560',1,'glm']]],\n  ['ivec3',['ivec3',['../a00281.html#gad0d784d8eee201aca362484d2daee46c',1,'glm']]],\n  ['ivec4',['ivec4',['../a00281.html#ga5abb4603dae0ce58c595e66d9123d812',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_9.js",
    "content": "var searchData=\n[\n  ['l1norm',['l1Norm',['../a00343.html#gae2fc0b2aa967bebfd6a244700bff6997',1,'glm::l1Norm(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)'],['../a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be',1,'glm::l1Norm(vec&lt; 3, T, Q &gt; const &amp;v)']]],\n  ['l2norm',['l2Norm',['../a00343.html#ga41340b2ef40a9307ab0f137181565168',1,'glm::l2Norm(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)'],['../a00343.html#gae288bde8f0e41fb4ed62e65137b18cba',1,'glm::l2Norm(vec&lt; 3, T, Q &gt; const &amp;x)']]],\n  ['ldexp',['ldexp',['../a00241.html#gac3010e0a0c35a1b514540f2fb579c58c',1,'glm']]],\n  ['lefthanded',['leftHanded',['../a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3',1,'glm']]],\n  ['length',['length',['../a00254.html#gab703732449be6c7199369b3f9a91ed38',1,'glm::length(qua&lt; T, Q &gt; const &amp;q)'],['../a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263',1,'glm::length(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['length2',['length2',['../a00343.html#ga8d1789651050adb7024917984b41c3de',1,'glm::length2(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b',1,'glm::length2(qua&lt; T, Q &gt; const &amp;q)']]],\n  ['lerp',['lerp',['../a00248.html#ga6033dc0741051fa463a0a147ba29f293',1,'glm::lerp(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)'],['../a00315.html#ga5494ba3a95ea6594c86fc75236886864',1,'glm::lerp(T x, T y, T a)'],['../a00315.html#gaa551c0a0e16d2d4608e49f7696df897f',1,'glm::lerp(const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y, T a)'],['../a00315.html#ga44a8b5fd776320f1713413dec959b32a',1,'glm::lerp(const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y, T a)'],['../a00315.html#ga89ac8e000199292ec7875519d27e214b',1,'glm::lerp(const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, T a)'],['../a00315.html#gaf68de5baf72d16135368b8ef4f841604',1,'glm::lerp(const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y, const vec&lt; 2, T, Q &gt; &amp;a)'],['../a00315.html#ga4ae1a616c8540a2649eab8e0cd051bb3',1,'glm::lerp(const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y, const vec&lt; 3, T, Q &gt; &amp;a)'],['../a00315.html#gab5477ab69c40de4db5d58d3359529724',1,'glm::lerp(const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, const vec&lt; 4, T, Q &gt; &amp;a)'],['../a00317.html#gace8380112d16d33f520839cb35a4d173',1,'glm::lerp(tdualquat&lt; T, Q &gt; const &amp;x, tdualquat&lt; T, Q &gt; const &amp;y, T const &amp;a)']]],\n  ['lessthan',['lessThan',['../a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4',1,'glm::lessThan(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6',1,'glm::lessThan(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['lessthanequal',['lessThanEqual',['../a00299.html#gac00012eea281800d2403f4ea8443134d',1,'glm::lessThanEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00374.html#gab0bdafc019d227257ff73fb5bcca1718',1,'glm::lessThanEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['levels',['levels',['../a00361.html#gaa8c377f4e63486db4fa872d77880da73',1,'glm']]],\n  ['lineargradient',['linearGradient',['../a00327.html#ga849241df1e55129b8ce9476200307419',1,'glm']]],\n  ['linearinterpolation',['linearInterpolation',['../a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649',1,'glm']]],\n  ['linearrand',['linearRand',['../a00300.html#ga04e241ab88374a477a2c2ceadd2fa03d',1,'glm::linearRand(genType Min, genType Max)'],['../a00300.html#ga94731130c298a9ff5e5025fdee6d97a0',1,'glm::linearRand(vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)']]],\n  ['lmaxnorm',['lMaxNorm',['../a00343.html#gad58a8231fc32e38104a9e1c4d3c0cb64',1,'glm::lMaxNorm(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)'],['../a00343.html#ga6968a324837a8e899396d44de23d5aae',1,'glm::lMaxNorm(vec&lt; 3, T, Q &gt; const &amp;x)']]],\n  ['ln_5fln_5ftwo',['ln_ln_two',['../a00290.html#gaca94292c839ed31a405ab7a81ae7e850',1,'glm']]],\n  ['ln_5ften',['ln_ten',['../a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c',1,'glm']]],\n  ['ln_5ftwo',['ln_two',['../a00290.html#ga24f4d27765678116f41a2f336ab7975c',1,'glm']]],\n  ['log',['log',['../a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9',1,'glm::log(vec&lt; L, T, Q &gt; const &amp;v)'],['../a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473',1,'glm::log(qua&lt; T, Q &gt; const &amp;q)'],['../a00333.html#ga60a7b0a401da660869946b2b77c710c9',1,'glm::log(genType const &amp;x, genType const &amp;base)']]],\n  ['log2',['log2',['../a00242.html#ga82831c7d9cca777cebedfe03a19c8d75',1,'glm::log2(vec&lt; L, T, Q &gt; const &amp;v)'],['../a00292.html#ga9bd682e74bfacb005c735305207ec417',1,'glm::log2(genIUType x)']]],\n  ['log_5fbase_2ehpp',['log_base.hpp',['../a00046.html',1,'']]],\n  ['lookat',['lookAt',['../a00247.html#gaa64aa951a0e99136bba9008d2b59c78e',1,'glm']]],\n  ['lookatlh',['lookAtLH',['../a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0',1,'glm']]],\n  ['lookatrh',['lookAtRH',['../a00247.html#gacfa12c8889c754846bc20c65d9b5c701',1,'glm']]],\n  ['lowestbitvalue',['lowestBitValue',['../a00309.html#ga2ff6568089f3a9b67f5c30918855fc6f',1,'glm']]],\n  ['lowp_5fbvec1',['lowp_bvec1',['../a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9',1,'glm']]],\n  ['lowp_5fbvec2',['lowp_bvec2',['../a00282.html#ga5a5452140650988b94d5716e4d872465',1,'glm']]],\n  ['lowp_5fbvec3',['lowp_bvec3',['../a00282.html#ga79e0922a977662a8fd39d7829be3908b',1,'glm']]],\n  ['lowp_5fbvec4',['lowp_bvec4',['../a00282.html#ga15ac87724048ab7169bb5d3572939dd3',1,'glm']]],\n  ['lowp_5fddualquat',['lowp_ddualquat',['../a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a',1,'glm']]],\n  ['lowp_5fdmat2',['lowp_dmat2',['../a00284.html#gad8e2727a6e7aa68280245bb0022118e1',1,'glm']]],\n  ['lowp_5fdmat2x2',['lowp_dmat2x2',['../a00284.html#gac61b94f5d9775f83f321bac899322fe2',1,'glm']]],\n  ['lowp_5fdmat2x3',['lowp_dmat2x3',['../a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af',1,'glm']]],\n  ['lowp_5fdmat2x4',['lowp_dmat2x4',['../a00284.html#ga97507a31ecee8609887d0f23bbde92c7',1,'glm']]],\n  ['lowp_5fdmat3',['lowp_dmat3',['../a00284.html#ga0cab80beee64a5f8d2ae4e823983063a',1,'glm']]],\n  ['lowp_5fdmat3x2',['lowp_dmat3x2',['../a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b',1,'glm']]],\n  ['lowp_5fdmat3x3',['lowp_dmat3x3',['../a00284.html#gac017848a9df570f60916a21a297b1e8e',1,'glm']]],\n  ['lowp_5fdmat3x4',['lowp_dmat3x4',['../a00284.html#ga93add35d2a44c5830978b827e8c295e8',1,'glm']]],\n  ['lowp_5fdmat4',['lowp_dmat4',['../a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd',1,'glm']]],\n  ['lowp_5fdmat4x2',['lowp_dmat4x2',['../a00284.html#ga382dc5295cead78766239a8457abfa98',1,'glm']]],\n  ['lowp_5fdmat4x3',['lowp_dmat4x3',['../a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e',1,'glm']]],\n  ['lowp_5fdmat4x4',['lowp_dmat4x4',['../a00284.html#ga5b0413198b7e9f061f7534a221c9dac9',1,'glm']]],\n  ['lowp_5fdquat',['lowp_dquat',['../a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c',1,'glm']]],\n  ['lowp_5fdualquat',['lowp_dualquat',['../a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa',1,'glm']]],\n  ['lowp_5fdvec1',['lowp_dvec1',['../a00269.html#gaf906eb86b6e96c35138d0e4928e1435a',1,'glm']]],\n  ['lowp_5fdvec2',['lowp_dvec2',['../a00282.html#ga108086730d086b7f6f7a033955dfb9c3',1,'glm']]],\n  ['lowp_5fdvec3',['lowp_dvec3',['../a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2',1,'glm']]],\n  ['lowp_5fdvec4',['lowp_dvec4',['../a00282.html#ga0b4432cb8d910e406576d10d802e190d',1,'glm']]],\n  ['lowp_5ff32',['lowp_f32',['../a00304.html#gaeea53879fc327293cf3352a409b7867b',1,'glm']]],\n  ['lowp_5ff32mat2',['lowp_f32mat2',['../a00304.html#ga52409bc6d4a2ce3421526c069220d685',1,'glm']]],\n  ['lowp_5ff32mat2x2',['lowp_f32mat2x2',['../a00304.html#ga1d091b6abfba1772450e1745a06525bc',1,'glm']]],\n  ['lowp_5ff32mat2x3',['lowp_f32mat2x3',['../a00304.html#ga961ccb34cd1a5654c772c8709e001dc5',1,'glm']]],\n  ['lowp_5ff32mat2x4',['lowp_f32mat2x4',['../a00304.html#gacc6bf0209dda0c7c14851a646071c974',1,'glm']]],\n  ['lowp_5ff32mat3',['lowp_f32mat3',['../a00304.html#ga4187f89f196505b40e63f516139511e5',1,'glm']]],\n  ['lowp_5ff32mat3x2',['lowp_f32mat3x2',['../a00304.html#gac53f9d7ab04eace67adad026092fb1e8',1,'glm']]],\n  ['lowp_5ff32mat3x3',['lowp_f32mat3x3',['../a00304.html#ga841211b641cff1fcf861bdb14e5e4abc',1,'glm']]],\n  ['lowp_5ff32mat3x4',['lowp_f32mat3x4',['../a00304.html#ga21b1b22dec013a72656e3644baf8a1e1',1,'glm']]],\n  ['lowp_5ff32mat4',['lowp_f32mat4',['../a00304.html#ga766aed2871e6173a81011a877f398f04',1,'glm']]],\n  ['lowp_5ff32mat4x2',['lowp_f32mat4x2',['../a00304.html#gae6f3fcb702a666de07650c149cfa845a',1,'glm']]],\n  ['lowp_5ff32mat4x3',['lowp_f32mat4x3',['../a00304.html#gac21eda58a1475449a5709b412ebd776c',1,'glm']]],\n  ['lowp_5ff32mat4x4',['lowp_f32mat4x4',['../a00304.html#ga4143d129898f91545948c46859adce44',1,'glm']]],\n  ['lowp_5ff32quat',['lowp_f32quat',['../a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347',1,'glm']]],\n  ['lowp_5ff32vec1',['lowp_f32vec1',['../a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e',1,'glm']]],\n  ['lowp_5ff32vec2',['lowp_f32vec2',['../a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0',1,'glm']]],\n  ['lowp_5ff32vec3',['lowp_f32vec3',['../a00304.html#gaf739a2cd7b81783a43148b53e40d983b',1,'glm']]],\n  ['lowp_5ff32vec4',['lowp_f32vec4',['../a00304.html#ga4e2e1debe022074ab224c9faf856d374',1,'glm']]],\n  ['lowp_5ff64',['lowp_f64',['../a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679',1,'glm']]],\n  ['lowp_5ff64mat2',['lowp_f64mat2',['../a00304.html#gafc730f6b4242763b0eda0ffa25150292',1,'glm']]],\n  ['lowp_5ff64mat2x2',['lowp_f64mat2x2',['../a00304.html#ga771fda9109933db34f808d92b9b84d7e',1,'glm']]],\n  ['lowp_5ff64mat2x3',['lowp_f64mat2x3',['../a00304.html#ga39e90adcffe33264bd608fa9c6bd184b',1,'glm']]],\n  ['lowp_5ff64mat2x4',['lowp_f64mat2x4',['../a00304.html#ga50265a202fbfe0a25fc70066c31d9336',1,'glm']]],\n  ['lowp_5ff64mat3',['lowp_f64mat3',['../a00304.html#ga58119a41d143ebaea0df70fe882e8a40',1,'glm']]],\n  ['lowp_5ff64mat3x2',['lowp_f64mat3x2',['../a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad',1,'glm']]],\n  ['lowp_5ff64mat3x3',['lowp_f64mat3x3',['../a00304.html#gac8f8a12ee03105ef8861dc652434e3b7',1,'glm']]],\n  ['lowp_5ff64mat3x4',['lowp_f64mat3x4',['../a00304.html#gade8d1edfb23996ab6c622e65e3893271',1,'glm']]],\n  ['lowp_5ff64mat4',['lowp_f64mat4',['../a00304.html#ga7451266e67794bd1125163502bc4a570',1,'glm']]],\n  ['lowp_5ff64mat4x2',['lowp_f64mat4x2',['../a00304.html#gab0cecb80fd106bc369b9e46a165815ce',1,'glm']]],\n  ['lowp_5ff64mat4x3',['lowp_f64mat4x3',['../a00304.html#gae731613b25db3a5ef5a05d21e57a57d3',1,'glm']]],\n  ['lowp_5ff64mat4x4',['lowp_f64mat4x4',['../a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95',1,'glm']]],\n  ['lowp_5ff64quat',['lowp_f64quat',['../a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae',1,'glm']]],\n  ['lowp_5ff64vec1',['lowp_f64vec1',['../a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b',1,'glm']]],\n  ['lowp_5ff64vec2',['lowp_f64vec2',['../a00304.html#ga4e641a54d70c81eabf56c25c966d04bd',1,'glm']]],\n  ['lowp_5ff64vec3',['lowp_f64vec3',['../a00304.html#gae7a4711107b7d078fc5f03ce2227b90b',1,'glm']]],\n  ['lowp_5ff64vec4',['lowp_f64vec4',['../a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4',1,'glm']]],\n  ['lowp_5ffdualquat',['lowp_fdualquat',['../a00317.html#gaa38f671be25a7f3b136a452a8bb42860',1,'glm']]],\n  ['lowp_5ffloat32',['lowp_float32',['../a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8',1,'glm']]],\n  ['lowp_5ffloat32_5ft',['lowp_float32_t',['../a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b',1,'glm']]],\n  ['lowp_5ffloat64',['lowp_float64',['../a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f',1,'glm']]],\n  ['lowp_5ffloat64_5ft',['lowp_float64_t',['../a00304.html#ga7286a37076a09da140df18bfa75d4e38',1,'glm']]],\n  ['lowp_5ffmat2',['lowp_fmat2',['../a00304.html#ga5bba0ce31210e274f73efacd3364c03f',1,'glm']]],\n  ['lowp_5ffmat2x2',['lowp_fmat2x2',['../a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066',1,'glm']]],\n  ['lowp_5ffmat2x3',['lowp_fmat2x3',['../a00304.html#ga71cdb53801ed4c3aadb3603c04723210',1,'glm']]],\n  ['lowp_5ffmat2x4',['lowp_fmat2x4',['../a00304.html#gaab217601c74974a84acbca428123ecf7',1,'glm']]],\n  ['lowp_5ffmat3',['lowp_fmat3',['../a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b',1,'glm']]],\n  ['lowp_5ffmat3x2',['lowp_fmat3x2',['../a00304.html#ga49b98e7d71804af45d86886a489e633c',1,'glm']]],\n  ['lowp_5ffmat3x3',['lowp_fmat3x3',['../a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4',1,'glm']]],\n  ['lowp_5ffmat3x4',['lowp_fmat3x4',['../a00304.html#ga28733aec7288191b314d42154fd0b690',1,'glm']]],\n  ['lowp_5ffmat4',['lowp_fmat4',['../a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f',1,'glm']]],\n  ['lowp_5ffmat4x2',['lowp_fmat4x2',['../a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c',1,'glm']]],\n  ['lowp_5ffmat4x3',['lowp_fmat4x3',['../a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444',1,'glm']]],\n  ['lowp_5ffmat4x4',['lowp_fmat4x4',['../a00304.html#gac2f5263708ac847b361a9841e74ddf9f',1,'glm']]],\n  ['lowp_5ffvec1',['lowp_fvec1',['../a00304.html#ga346b2336fff168a7e0df1583aae3e5a5',1,'glm']]],\n  ['lowp_5ffvec2',['lowp_fvec2',['../a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d',1,'glm']]],\n  ['lowp_5ffvec3',['lowp_fvec3',['../a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa',1,'glm']]],\n  ['lowp_5ffvec4',['lowp_fvec4',['../a00304.html#ga755484ffbe39ae3db2875953ed04e7b7',1,'glm']]],\n  ['lowp_5fi16',['lowp_i16',['../a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7',1,'glm']]],\n  ['lowp_5fi16vec1',['lowp_i16vec1',['../a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6',1,'glm']]],\n  ['lowp_5fi16vec2',['lowp_i16vec2',['../a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b',1,'glm']]],\n  ['lowp_5fi16vec3',['lowp_i16vec3',['../a00304.html#gab69ef9cbc2a9214bf5596c528c801b72',1,'glm']]],\n  ['lowp_5fi16vec4',['lowp_i16vec4',['../a00304.html#ga1d47d94d17c2406abdd1f087a816e387',1,'glm']]],\n  ['lowp_5fi32',['lowp_i32',['../a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac',1,'glm']]],\n  ['lowp_5fi32vec1',['lowp_i32vec1',['../a00304.html#gae31ac3608cf643ceffd6554874bec4a0',1,'glm']]],\n  ['lowp_5fi32vec2',['lowp_i32vec2',['../a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd',1,'glm']]],\n  ['lowp_5fi32vec3',['lowp_i32vec3',['../a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d',1,'glm']]],\n  ['lowp_5fi32vec4',['lowp_i32vec4',['../a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08',1,'glm']]],\n  ['lowp_5fi64',['lowp_i64',['../a00304.html#ga354736e0c645099cd44c42fb2f87c2b8',1,'glm']]],\n  ['lowp_5fi64vec1',['lowp_i64vec1',['../a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437',1,'glm']]],\n  ['lowp_5fi64vec2',['lowp_i64vec2',['../a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c',1,'glm']]],\n  ['lowp_5fi64vec3',['lowp_i64vec3',['../a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c',1,'glm']]],\n  ['lowp_5fi64vec4',['lowp_i64vec4',['../a00304.html#gabb4229a4c1488bf063eed0c45355bb9c',1,'glm']]],\n  ['lowp_5fi8',['lowp_i8',['../a00304.html#ga552a6bde5e75984efb0f863278da2e54',1,'glm']]],\n  ['lowp_5fi8vec1',['lowp_i8vec1',['../a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c',1,'glm']]],\n  ['lowp_5fi8vec2',['lowp_i8vec2',['../a00304.html#gac03e5099d27eeaa74b6016ea435a1df2',1,'glm']]],\n  ['lowp_5fi8vec3',['lowp_i8vec3',['../a00304.html#gae2f43ace6b5b33ab49516d9e40af1845',1,'glm']]],\n  ['lowp_5fi8vec4',['lowp_i8vec4',['../a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5',1,'glm']]],\n  ['lowp_5fimat2',['lowp_imat2',['../a00294.html#gaa0bff0be804142bb16d441aec0a7962e',1,'glm']]],\n  ['lowp_5fimat2x2',['lowp_imat2x2',['../a00294.html#ga92b95b679975d408645547ab45a8dcd8',1,'glm']]],\n  ['lowp_5fimat2x3',['lowp_imat2x3',['../a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65',1,'glm']]],\n  ['lowp_5fimat2x4',['lowp_imat2x4',['../a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e',1,'glm']]],\n  ['lowp_5fimat3',['lowp_imat3',['../a00294.html#ga69bfe668f4170379fc1f35d82b060c43',1,'glm']]],\n  ['lowp_5fimat3x2',['lowp_imat3x2',['../a00294.html#ga33db8f27491d30906cd37c0d86b3f432',1,'glm']]],\n  ['lowp_5fimat3x3',['lowp_imat3x3',['../a00294.html#ga664f061df00020048c3f8530329ace45',1,'glm']]],\n  ['lowp_5fimat3x4',['lowp_imat3x4',['../a00294.html#ga9273faab33623d944af4080befbb2c80',1,'glm']]],\n  ['lowp_5fimat4',['lowp_imat4',['../a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c',1,'glm']]],\n  ['lowp_5fimat4x2',['lowp_imat4x2',['../a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09',1,'glm']]],\n  ['lowp_5fimat4x3',['lowp_imat4x3',['../a00294.html#ga8f40483a3ae634ead8ad22272c543a33',1,'glm']]],\n  ['lowp_5fimat4x4',['lowp_imat4x4',['../a00294.html#gaf65677e53ac8e31a107399340d5e2451',1,'glm']]],\n  ['lowp_5fint16',['lowp_int16',['../a00304.html#ga698e36b01167fc0f037889334dce8def',1,'glm']]],\n  ['lowp_5fint16_5ft',['lowp_int16_t',['../a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a',1,'glm']]],\n  ['lowp_5fint32',['lowp_int32',['../a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02',1,'glm']]],\n  ['lowp_5fint32_5ft',['lowp_int32_t',['../a00304.html#ga0350631d35ff800e6133ac6243b13cbc',1,'glm']]],\n  ['lowp_5fint64',['lowp_int64',['../a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c',1,'glm']]],\n  ['lowp_5fint64_5ft',['lowp_int64_t',['../a00304.html#gaebf341fc4a5be233f7dde962c2e33847',1,'glm']]],\n  ['lowp_5fint8',['lowp_int8',['../a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6',1,'glm']]],\n  ['lowp_5fint8_5ft',['lowp_int8_t',['../a00304.html#ga119c41d73fe9977358174eb3ac1035a3',1,'glm']]],\n  ['lowp_5fivec1',['lowp_ivec1',['../a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc',1,'glm']]],\n  ['lowp_5fivec2',['lowp_ivec2',['../a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0',1,'glm']]],\n  ['lowp_5fivec3',['lowp_ivec3',['../a00282.html#gac1a86a75b3c68ebb704d7094043669d6',1,'glm']]],\n  ['lowp_5fivec4',['lowp_ivec4',['../a00282.html#ga27fc23da61859cd6356326c5f1c796de',1,'glm']]],\n  ['lowp_5fmat2',['lowp_mat2',['../a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a',1,'glm']]],\n  ['lowp_5fmat2x2',['lowp_mat2x2',['../a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694',1,'glm']]],\n  ['lowp_5fmat2x3',['lowp_mat2x3',['../a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb',1,'glm']]],\n  ['lowp_5fmat2x4',['lowp_mat2x4',['../a00284.html#gade27f8324a16626cbce5d3e7da66b070',1,'glm']]],\n  ['lowp_5fmat3',['lowp_mat3',['../a00284.html#ga6271ebc85ed778ccc15458c3d86fc854',1,'glm']]],\n  ['lowp_5fmat3x2',['lowp_mat3x2',['../a00284.html#gaabf6cf90fd31efe25c94965507e98390',1,'glm']]],\n  ['lowp_5fmat3x3',['lowp_mat3x3',['../a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84',1,'glm']]],\n  ['lowp_5fmat3x4',['lowp_mat3x4',['../a00284.html#gac5fc6786688eff02904ca5e7d6960092',1,'glm']]],\n  ['lowp_5fmat4',['lowp_mat4',['../a00284.html#ga2dedee030500865267cd5851c00c139d',1,'glm']]],\n  ['lowp_5fmat4x2',['lowp_mat4x2',['../a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21',1,'glm']]],\n  ['lowp_5fmat4x3',['lowp_mat4x3',['../a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77',1,'glm']]],\n  ['lowp_5fmat4x4',['lowp_mat4x4',['../a00284.html#ga686468a9a815bd4db8cddae42a6d6b87',1,'glm']]],\n  ['lowp_5fquat',['lowp_quat',['../a00253.html#gade62c5316c1c11a79c34c00c189558eb',1,'glm']]],\n  ['lowp_5fu16',['lowp_u16',['../a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126',1,'glm']]],\n  ['lowp_5fu16vec1',['lowp_u16vec1',['../a00304.html#gaa6aab4ee7189b86716f5d7015d43021d',1,'glm']]],\n  ['lowp_5fu16vec2',['lowp_u16vec2',['../a00304.html#ga2a7d997da9ac29cb931e35bd399f58df',1,'glm']]],\n  ['lowp_5fu16vec3',['lowp_u16vec3',['../a00304.html#gac0253db6c3d3bae1f591676307a9dd8c',1,'glm']]],\n  ['lowp_5fu16vec4',['lowp_u16vec4',['../a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1',1,'glm']]],\n  ['lowp_5fu32',['lowp_u32',['../a00304.html#ga4f072ada9552e1e480bbb3b1acde5250',1,'glm']]],\n  ['lowp_5fu32vec1',['lowp_u32vec1',['../a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4',1,'glm']]],\n  ['lowp_5fu32vec2',['lowp_u32vec2',['../a00304.html#gaf7e286e81347011e257ee779524e73b9',1,'glm']]],\n  ['lowp_5fu32vec3',['lowp_u32vec3',['../a00304.html#gad3ad390560a671b1f676fbf03cd3aa15',1,'glm']]],\n  ['lowp_5fu32vec4',['lowp_u32vec4',['../a00304.html#ga4502885718742aa238c36a312c3f3f20',1,'glm']]],\n  ['lowp_5fu64',['lowp_u64',['../a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed',1,'glm']]],\n  ['lowp_5fu64vec1',['lowp_u64vec1',['../a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6',1,'glm']]],\n  ['lowp_5fu64vec2',['lowp_u64vec2',['../a00304.html#ga581485db4ba6ddb501505ee711fd8e42',1,'glm']]],\n  ['lowp_5fu64vec3',['lowp_u64vec3',['../a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1',1,'glm']]],\n  ['lowp_5fu64vec4',['lowp_u64vec4',['../a00304.html#ga6fccc89c34045c86339f6fa781ce96de',1,'glm']]],\n  ['lowp_5fu8',['lowp_u8',['../a00304.html#ga1b09f03da7ac43055c68a349d5445083',1,'glm']]],\n  ['lowp_5fu8vec1',['lowp_u8vec1',['../a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec',1,'glm']]],\n  ['lowp_5fu8vec2',['lowp_u8vec2',['../a00304.html#gae6f63fa38635431e51a8f2602f15c566',1,'glm']]],\n  ['lowp_5fu8vec3',['lowp_u8vec3',['../a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd',1,'glm']]],\n  ['lowp_5fu8vec4',['lowp_u8vec4',['../a00304.html#ga9910927f3a4d1addb3da6a82542a8287',1,'glm']]],\n  ['lowp_5fuint16',['lowp_uint16',['../a00304.html#gad68bfd9f881856fc863a6ebca0b67f78',1,'glm']]],\n  ['lowp_5fuint16_5ft',['lowp_uint16_t',['../a00304.html#ga91c4815f93177eb423362fd296a87e9f',1,'glm']]],\n  ['lowp_5fuint32',['lowp_uint32',['../a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b',1,'glm']]],\n  ['lowp_5fuint32_5ft',['lowp_uint32_t',['../a00304.html#gaf1b735b4b1145174f4e4167d13778f9b',1,'glm']]],\n  ['lowp_5fuint64',['lowp_uint64',['../a00304.html#gaa212b805736a759998e312cbdd550fae',1,'glm']]],\n  ['lowp_5fuint64_5ft',['lowp_uint64_t',['../a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153',1,'glm']]],\n  ['lowp_5fuint8',['lowp_uint8',['../a00304.html#gaf49470869e9be2c059629b250619804e',1,'glm']]],\n  ['lowp_5fuint8_5ft',['lowp_uint8_t',['../a00304.html#ga667b2ece2b258be898812dc2177995d1',1,'glm']]],\n  ['lowp_5fumat2',['lowp_umat2',['../a00294.html#gaf2fba702d990437fc88ff3f3a76846ee',1,'glm']]],\n  ['lowp_5fumat2x2',['lowp_umat2x2',['../a00294.html#ga7b2e9d89745f7175051284e54c81d81c',1,'glm']]],\n  ['lowp_5fumat2x3',['lowp_umat2x3',['../a00294.html#ga3072f90fd86f17a862e21589fbb14c0f',1,'glm']]],\n  ['lowp_5fumat2x4',['lowp_umat2x4',['../a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d',1,'glm']]],\n  ['lowp_5fumat3',['lowp_umat3',['../a00294.html#gaf1145f72bcdd590f5808c4bc170c2924',1,'glm']]],\n  ['lowp_5fumat3x2',['lowp_umat3x2',['../a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b',1,'glm']]],\n  ['lowp_5fumat3x3',['lowp_umat3x3',['../a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5',1,'glm']]],\n  ['lowp_5fumat3x4',['lowp_umat3x4',['../a00294.html#gaec3d624306bd59649f021864709d56b5',1,'glm']]],\n  ['lowp_5fumat4',['lowp_umat4',['../a00294.html#gac092c6105827bf9ea080db38074b78eb',1,'glm']]],\n  ['lowp_5fumat4x2',['lowp_umat4x2',['../a00294.html#ga7716c2b210d141846f1ac4e774adef5e',1,'glm']]],\n  ['lowp_5fumat4x3',['lowp_umat4x3',['../a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff',1,'glm']]],\n  ['lowp_5fumat4x4',['lowp_umat4x4',['../a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0',1,'glm']]],\n  ['lowp_5fuvec1',['lowp_uvec1',['../a00277.html#ga8bf3fc8a7863d140f48b29341c750402',1,'glm']]],\n  ['lowp_5fuvec2',['lowp_uvec2',['../a00282.html#ga752ee45136011301b64afd8c310c47a4',1,'glm']]],\n  ['lowp_5fuvec3',['lowp_uvec3',['../a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292',1,'glm']]],\n  ['lowp_5fuvec4',['lowp_uvec4',['../a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e',1,'glm']]],\n  ['lowp_5fvec1',['lowp_vec1',['../a00271.html#ga0a57630f03031706b1d26a7d70d9184c',1,'glm']]],\n  ['lowp_5fvec2',['lowp_vec2',['../a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9',1,'glm']]],\n  ['lowp_5fvec3',['lowp_vec3',['../a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79',1,'glm']]],\n  ['lowp_5fvec4',['lowp_vec4',['../a00282.html#gace3acb313c800552a9411953eb8b2ed7',1,'glm']]],\n  ['luminosity',['luminosity',['../a00312.html#gad028e0a4f1a9c812b39439b746295b34',1,'glm']]],\n  ['lxnorm',['lxNorm',['../a00343.html#gacad23d30497eb16f67709f2375d1f66a',1,'glm::lxNorm(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, unsigned int Depth)'],['../a00343.html#gac61b6d81d796d6eb4d4183396a19ab91',1,'glm::lxNorm(vec&lt; 3, T, Q &gt; const &amp;x, unsigned int Depth)']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_a.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_a.js",
    "content": "var searchData=\n[\n  ['matrix_20functions',['Matrix functions',['../a00371.html',1,'']]],\n  ['matrix_20types',['Matrix types',['../a00283.html',1,'']]],\n  ['matrix_20types_20with_20precision_20qualifiers',['Matrix types with precision qualifiers',['../a00284.html',1,'']]],\n  ['make_5fmat2',['make_mat2',['../a00305.html#ga04409e74dc3da251d2501acf5b4b546c',1,'glm']]],\n  ['make_5fmat2x2',['make_mat2x2',['../a00305.html#gae49e1c7bcd5abec74d1c34155031f663',1,'glm']]],\n  ['make_5fmat2x3',['make_mat2x3',['../a00305.html#ga21982104164789cf8985483aaefc25e8',1,'glm']]],\n  ['make_5fmat2x4',['make_mat2x4',['../a00305.html#ga078b862c90b0e9a79ed43a58997d8388',1,'glm']]],\n  ['make_5fmat3',['make_mat3',['../a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f',1,'glm']]],\n  ['make_5fmat3x2',['make_mat3x2',['../a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8',1,'glm']]],\n  ['make_5fmat3x3',['make_mat3x3',['../a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536',1,'glm']]],\n  ['make_5fmat3x4',['make_mat3x4',['../a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b',1,'glm']]],\n  ['make_5fmat4',['make_mat4',['../a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a',1,'glm']]],\n  ['make_5fmat4x2',['make_mat4x2',['../a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c',1,'glm']]],\n  ['make_5fmat4x3',['make_mat4x3',['../a00305.html#ga0330bf6640092d7985fac92927bbd42b',1,'glm']]],\n  ['make_5fmat4x4',['make_mat4x4',['../a00305.html#ga8f084be30e404844bfbb4a551ac2728c',1,'glm']]],\n  ['make_5fquat',['make_quat',['../a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246',1,'glm']]],\n  ['make_5fvec1',['make_vec1',['../a00305.html#ga4135f03f3049f0a4eb76545c4967957c',1,'glm::make_vec1(vec&lt; 1, T, Q &gt; const &amp;v)'],['../a00305.html#ga13c92b81e55f201b052a6404d57da220',1,'glm::make_vec1(vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00305.html#ga3c23cc74086d361e22bbd5e91a334e03',1,'glm::make_vec1(vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419',1,'glm::make_vec1(vec&lt; 4, T, Q &gt; const &amp;v)']]],\n  ['make_5fvec2',['make_vec2',['../a00305.html#ga8476d0e6f1b9b4a6193cc25f59d8a896',1,'glm::make_vec2(vec&lt; 1, T, Q &gt; const &amp;v)'],['../a00305.html#gae54bd325a08ad26edf63929201adebc7',1,'glm::make_vec2(vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00305.html#ga0084fea4694cf47276e9cccbe7b1015a',1,'glm::make_vec2(vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00305.html#ga2b81f71f3a222fe5bba81e3983751249',1,'glm::make_vec2(vec&lt; 4, T, Q &gt; const &amp;v)'],['../a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824',1,'glm::make_vec2(T const *const ptr)']]],\n  ['make_5fvec3',['make_vec3',['../a00305.html#ga9147e4b3a5d0f4772edfbfd179d7ea0b',1,'glm::make_vec3(vec&lt; 1, T, Q &gt; const &amp;v)'],['../a00305.html#ga482b60a842a5b154d3eed392417a9511',1,'glm::make_vec3(vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00305.html#gacd57046034df557b8b1c457f58613623',1,'glm::make_vec3(vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00305.html#ga8b589ed7d41a298b516d2a69169248f1',1,'glm::make_vec3(vec&lt; 4, T, Q &gt; const &amp;v)'],['../a00305.html#gad9e0d36ff489cb30c65ad1fa40351651',1,'glm::make_vec3(T const *const ptr)']]],\n  ['make_5fvec4',['make_vec4',['../a00305.html#ga600cb97f70c5d50d3a4a145e1cafbf37',1,'glm::make_vec4(vec&lt; 1, T, Q &gt; const &amp;v)'],['../a00305.html#gaa9bd116caf28196fd1cf00b278286fa7',1,'glm::make_vec4(vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00305.html#ga4036328ba4702c74cbdfad1fc03d1b8f',1,'glm::make_vec4(vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00305.html#gaa95cb15732f708f613e65a0578895ae5',1,'glm::make_vec4(vec&lt; 4, T, Q &gt; const &amp;v)'],['../a00305.html#ga63f576518993efc22a969f18f80e29bb',1,'glm::make_vec4(T const *const ptr)']]],\n  ['mask',['mask',['../a00288.html#gad7eba518a0b71662114571ee76939f8a',1,'glm::mask(genIUType Bits)'],['../a00288.html#ga2e64e3b922a296033b825311e7f5fff1',1,'glm::mask(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['mat2',['mat2',['../a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba',1,'glm']]],\n  ['mat2x2',['mat2x2',['../a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb',1,'glm']]],\n  ['mat2x2_2ehpp',['mat2x2.hpp',['../a00048.html',1,'']]],\n  ['mat2x3',['mat2x3',['../a00283.html#ga493ab21243abe564b3f7d381e677d29a',1,'glm']]],\n  ['mat2x3_2ehpp',['mat2x3.hpp',['../a00049.html',1,'']]],\n  ['mat2x4',['mat2x4',['../a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40',1,'glm']]],\n  ['mat2x4_2ehpp',['mat2x4.hpp',['../a00050.html',1,'']]],\n  ['mat2x4_5fcast',['mat2x4_cast',['../a00317.html#gae99d143b37f9cad4cd9285571aab685a',1,'glm']]],\n  ['mat3',['mat3',['../a00283.html#gaefb0fc7a4960b782c18708bb6b655262',1,'glm']]],\n  ['mat3_5fcast',['mat3_cast',['../a00299.html#ga333ab70047fbe4132406100c292dbc89',1,'glm']]],\n  ['mat3x2',['mat3x2',['../a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2',1,'glm']]],\n  ['mat3x2_2ehpp',['mat3x2.hpp',['../a00051.html',1,'']]],\n  ['mat3x3',['mat3x3',['../a00283.html#gab91887d7565059dac640e3a1921c914a',1,'glm']]],\n  ['mat3x3_2ehpp',['mat3x3.hpp',['../a00052.html',1,'']]],\n  ['mat3x4',['mat3x4',['../a00283.html#gaf991cad0b34f64e33af186326dbc4d66',1,'glm']]],\n  ['mat3x4_2ehpp',['mat3x4.hpp',['../a00053.html',1,'']]],\n  ['mat3x4_5fcast',['mat3x4_cast',['../a00317.html#gaf59f5bb69620d2891c3795c6f2639179',1,'glm']]],\n  ['mat4',['mat4',['../a00283.html#ga0db98d836c5549d31cf64ecd043b7af7',1,'glm']]],\n  ['mat4_5fcast',['mat4_cast',['../a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3',1,'glm']]],\n  ['mat4x2',['mat4x2',['../a00283.html#gad941c947ad6cdd117a0e8554a4754983',1,'glm']]],\n  ['mat4x2_2ehpp',['mat4x2.hpp',['../a00054.html',1,'']]],\n  ['mat4x3',['mat4x3',['../a00283.html#gac7574544bb94777bdbd2eb224eb72fd0',1,'glm']]],\n  ['mat4x3_2ehpp',['mat4x3.hpp',['../a00055.html',1,'']]],\n  ['mat4x4',['mat4x4',['../a00283.html#gab2d35cc2655f44d60958d60a1de34e81',1,'glm']]],\n  ['mat4x4_2ehpp',['mat4x4.hpp',['../a00056.html',1,'']]],\n  ['matrix_2ehpp',['matrix.hpp',['../a00057.html',1,'']]],\n  ['matrix_5faccess_2ehpp',['matrix_access.hpp',['../a00058.html',1,'']]],\n  ['matrix_5fclip_5fspace_2ehpp',['matrix_clip_space.hpp',['../a00059.html',1,'']]],\n  ['matrix_5fcommon_2ehpp',['matrix_common.hpp',['../a00060.html',1,'']]],\n  ['matrix_5fcross_5fproduct_2ehpp',['matrix_cross_product.hpp',['../a00061.html',1,'']]],\n  ['matrix_5fdecompose_2ehpp',['matrix_decompose.hpp',['../a00062.html',1,'']]],\n  ['matrix_5fdouble2x2_2ehpp',['matrix_double2x2.hpp',['../a00063.html',1,'']]],\n  ['matrix_5fdouble2x2_5fprecision_2ehpp',['matrix_double2x2_precision.hpp',['../a00064.html',1,'']]],\n  ['matrix_5fdouble2x3_2ehpp',['matrix_double2x3.hpp',['../a00065.html',1,'']]],\n  ['matrix_5fdouble2x3_5fprecision_2ehpp',['matrix_double2x3_precision.hpp',['../a00066.html',1,'']]],\n  ['matrix_5fdouble2x4_2ehpp',['matrix_double2x4.hpp',['../a00067.html',1,'']]],\n  ['matrix_5fdouble2x4_5fprecision_2ehpp',['matrix_double2x4_precision.hpp',['../a00068.html',1,'']]],\n  ['matrix_5fdouble3x2_2ehpp',['matrix_double3x2.hpp',['../a00069.html',1,'']]],\n  ['matrix_5fdouble3x2_5fprecision_2ehpp',['matrix_double3x2_precision.hpp',['../a00070.html',1,'']]],\n  ['matrix_5fdouble3x3_2ehpp',['matrix_double3x3.hpp',['../a00071.html',1,'']]],\n  ['matrix_5fdouble3x3_5fprecision_2ehpp',['matrix_double3x3_precision.hpp',['../a00072.html',1,'']]],\n  ['matrix_5fdouble3x4_2ehpp',['matrix_double3x4.hpp',['../a00073.html',1,'']]],\n  ['matrix_5fdouble3x4_5fprecision_2ehpp',['matrix_double3x4_precision.hpp',['../a00074.html',1,'']]],\n  ['matrix_5fdouble4x2_2ehpp',['matrix_double4x2.hpp',['../a00075.html',1,'']]],\n  ['matrix_5fdouble4x2_5fprecision_2ehpp',['matrix_double4x2_precision.hpp',['../a00076.html',1,'']]],\n  ['matrix_5fdouble4x3_2ehpp',['matrix_double4x3.hpp',['../a00077.html',1,'']]],\n  ['matrix_5fdouble4x3_5fprecision_2ehpp',['matrix_double4x3_precision.hpp',['../a00078.html',1,'']]],\n  ['matrix_5fdouble4x4_2ehpp',['matrix_double4x4.hpp',['../a00079.html',1,'']]],\n  ['matrix_5fdouble4x4_5fprecision_2ehpp',['matrix_double4x4_precision.hpp',['../a00080.html',1,'']]],\n  ['matrix_5ffactorisation_2ehpp',['matrix_factorisation.hpp',['../a00081.html',1,'']]],\n  ['matrix_5ffloat2x2_2ehpp',['matrix_float2x2.hpp',['../a00082.html',1,'']]],\n  ['matrix_5ffloat2x2_5fprecision_2ehpp',['matrix_float2x2_precision.hpp',['../a00083.html',1,'']]],\n  ['matrix_5ffloat2x3_2ehpp',['matrix_float2x3.hpp',['../a00084.html',1,'']]],\n  ['matrix_5ffloat2x3_5fprecision_2ehpp',['matrix_float2x3_precision.hpp',['../a00085.html',1,'']]],\n  ['matrix_5ffloat2x4_2ehpp',['matrix_float2x4.hpp',['../a00086.html',1,'']]],\n  ['matrix_5ffloat2x4_5fprecision_2ehpp',['matrix_float2x4_precision.hpp',['../a00087.html',1,'']]],\n  ['matrix_5ffloat3x2_2ehpp',['matrix_float3x2.hpp',['../a00088.html',1,'']]],\n  ['matrix_5ffloat3x2_5fprecision_2ehpp',['matrix_float3x2_precision.hpp',['../a00089.html',1,'']]],\n  ['matrix_5ffloat3x3_2ehpp',['matrix_float3x3.hpp',['../a00090.html',1,'']]],\n  ['matrix_5ffloat3x3_5fprecision_2ehpp',['matrix_float3x3_precision.hpp',['../a00091.html',1,'']]],\n  ['matrix_5ffloat3x4_2ehpp',['matrix_float3x4.hpp',['../a00092.html',1,'']]],\n  ['matrix_5ffloat3x4_5fprecision_2ehpp',['matrix_float3x4_precision.hpp',['../a00093.html',1,'']]],\n  ['matrix_5ffloat4x2_2ehpp',['matrix_float4x2.hpp',['../a00094.html',1,'']]],\n  ['matrix_5ffloat4x3_2ehpp',['matrix_float4x3.hpp',['../a00096.html',1,'']]],\n  ['matrix_5ffloat4x3_5fprecision_2ehpp',['matrix_float4x3_precision.hpp',['../a00097.html',1,'']]],\n  ['matrix_5ffloat4x4_2ehpp',['matrix_float4x4.hpp',['../a00098.html',1,'']]],\n  ['matrix_5ffloat4x4_5fprecision_2ehpp',['matrix_float4x4_precision.hpp',['../a00099.html',1,'']]],\n  ['matrix_5finteger_2ehpp',['matrix_integer.hpp',['../a00100.html',1,'']]],\n  ['matrix_5finterpolation_2ehpp',['matrix_interpolation.hpp',['../a00101.html',1,'']]],\n  ['matrix_5finverse_2ehpp',['matrix_inverse.hpp',['../a00102.html',1,'']]],\n  ['matrix_5fmajor_5fstorage_2ehpp',['matrix_major_storage.hpp',['../a00103.html',1,'']]],\n  ['matrix_5foperation_2ehpp',['matrix_operation.hpp',['../a00104.html',1,'']]],\n  ['matrix_5fprojection_2ehpp',['matrix_projection.hpp',['../a00105.html',1,'']]],\n  ['matrix_5fquery_2ehpp',['matrix_query.hpp',['../a00106.html',1,'']]],\n  ['matrix_5frelational_2ehpp',['matrix_relational.hpp',['../a00107.html',1,'']]],\n  ['matrix_5ftransform_5f2d_2ehpp',['matrix_transform_2d.hpp',['../a00110.html',1,'']]],\n  ['matrixcompmult',['matrixCompMult',['../a00371.html#gaf14569404c779fedca98d0b9b8e58c1f',1,'glm']]],\n  ['matrixcross3',['matrixCross3',['../a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff',1,'glm']]],\n  ['matrixcross4',['matrixCross4',['../a00334.html#ga20057fff91ddafa102934adb25458cde',1,'glm']]],\n  ['max',['max',['../a00241.html#gae02d42887fc5570451f880e3c624b9ac',1,'glm::max(genType x, genType y)'],['../a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31',1,'glm::max(vec&lt; L, T, Q &gt; const &amp;x, T y)'],['../a00241.html#gac1fec0c3303b572a6d4697a637213870',1,'glm::max(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00258.html#gaa20839d9ab14514f8966f69877ea0de8',1,'glm::max(T a, T b, T c)'],['../a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67',1,'glm::max(T a, T b, T c, T d)'],['../a00267.html#gaa45d34f6a2906f8bf58ab2ba5429234d',1,'glm::max(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z)'],['../a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10',1,'glm::max(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, T, Q &gt; const &amp;w)'],['../a00321.html#ga04991ccb9865c4c4e58488cfb209ce69',1,'glm::max(T const &amp;x, T const &amp;y, T const &amp;z)'],['../a00321.html#gae1b7bbe5c91de4924835ea3e14530744',1,'glm::max(C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z)'],['../a00321.html#gaf832e9d4ab4826b2dda2fda25935a3a4',1,'glm::max(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z)'],['../a00321.html#ga78e04a0cef1c4863fcae1a2130500d87',1,'glm::max(T const &amp;x, T const &amp;y, T const &amp;z, T const &amp;w)'],['../a00321.html#ga7cca8b53cfda402040494cdf40fbdf4a',1,'glm::max(C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z, typename C&lt; T &gt;::T const &amp;w)'],['../a00321.html#gaacffbc466c2d08c140b181e7fd8a4858',1,'glm::max(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)']]],\n  ['mediump_5fbvec1',['mediump_bvec1',['../a00266.html#ga7b4ccb989ba179fa44f7b0879c782621',1,'glm']]],\n  ['mediump_5fbvec2',['mediump_bvec2',['../a00282.html#ga1e743764869efa9223c2bcefccedaddc',1,'glm']]],\n  ['mediump_5fbvec3',['mediump_bvec3',['../a00282.html#ga50c783c25082882ef00fe2e5cddba4aa',1,'glm']]],\n  ['mediump_5fbvec4',['mediump_bvec4',['../a00282.html#ga0be2c682258604a35004f088782a9645',1,'glm']]],\n  ['mediump_5fddualquat',['mediump_ddualquat',['../a00317.html#ga0fb11e48e2d16348ccb06a25213641b4',1,'glm']]],\n  ['mediump_5fdmat2',['mediump_dmat2',['../a00284.html#ga6205fd19be355600334edef6af0b27cb',1,'glm']]],\n  ['mediump_5fdmat2x2',['mediump_dmat2x2',['../a00284.html#ga51dc36a7719cb458fa5114831c20d64f',1,'glm']]],\n  ['mediump_5fdmat2x3',['mediump_dmat2x3',['../a00284.html#ga741e05adf1f12d5d913f67088db1009a',1,'glm']]],\n  ['mediump_5fdmat2x4',['mediump_dmat2x4',['../a00284.html#ga685bda24922d112786af385deb4deb43',1,'glm']]],\n  ['mediump_5fdmat3',['mediump_dmat3',['../a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2',1,'glm']]],\n  ['mediump_5fdmat3x2',['mediump_dmat3x2',['../a00284.html#ga2076157df85e49b8c021e03e46a376c1',1,'glm']]],\n  ['mediump_5fdmat3x3',['mediump_dmat3x3',['../a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6',1,'glm']]],\n  ['mediump_5fdmat3x4',['mediump_dmat3x4',['../a00284.html#ga3a132bd05675c2e46556f67cf738600b',1,'glm']]],\n  ['mediump_5fdmat4',['mediump_dmat4',['../a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378',1,'glm']]],\n  ['mediump_5fdmat4x2',['mediump_dmat4x2',['../a00284.html#gae220fa4c5a7b13ef2ab0420340de645c',1,'glm']]],\n  ['mediump_5fdmat4x3',['mediump_dmat4x3',['../a00284.html#ga43ef60e4d996db15c9c8f069a96ff763',1,'glm']]],\n  ['mediump_5fdmat4x4',['mediump_dmat4x4',['../a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3',1,'glm']]],\n  ['mediump_5fdquat',['mediump_dquat',['../a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14',1,'glm']]],\n  ['mediump_5fdualquat',['mediump_dualquat',['../a00317.html#gaa7aeb54c167712b38f2178a1be2360ad',1,'glm']]],\n  ['mediump_5fdvec1',['mediump_dvec1',['../a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd',1,'glm']]],\n  ['mediump_5fdvec2',['mediump_dvec2',['../a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3',1,'glm']]],\n  ['mediump_5fdvec3',['mediump_dvec3',['../a00282.html#ga61c3b1dff4ec7c878af80503141b9f37',1,'glm']]],\n  ['mediump_5fdvec4',['mediump_dvec4',['../a00282.html#ga23a8bca00914a51542bfea13a4778186',1,'glm']]],\n  ['mediump_5ff32',['mediump_f32',['../a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80',1,'glm']]],\n  ['mediump_5ff32mat2',['mediump_f32mat2',['../a00304.html#gaf9020c6176a75bc84828ab01ea7dac25',1,'glm']]],\n  ['mediump_5ff32mat2x2',['mediump_f32mat2x2',['../a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f',1,'glm']]],\n  ['mediump_5ff32mat2x3',['mediump_f32mat2x3',['../a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf',1,'glm']]],\n  ['mediump_5ff32mat2x4',['mediump_f32mat2x4',['../a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1',1,'glm']]],\n  ['mediump_5ff32mat3',['mediump_f32mat3',['../a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8',1,'glm']]],\n  ['mediump_5ff32mat3x2',['mediump_f32mat3x2',['../a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f',1,'glm']]],\n  ['mediump_5ff32mat3x3',['mediump_f32mat3x3',['../a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f',1,'glm']]],\n  ['mediump_5ff32mat3x4',['mediump_f32mat3x4',['../a00304.html#ga8df705d775b776f5ae6b39e2ab892899',1,'glm']]],\n  ['mediump_5ff32mat4',['mediump_f32mat4',['../a00304.html#ga4491baaebbc46a20f1cb5da985576bf4',1,'glm']]],\n  ['mediump_5ff32mat4x2',['mediump_f32mat4x2',['../a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f',1,'glm']]],\n  ['mediump_5ff32mat4x3',['mediump_f32mat4x3',['../a00304.html#gade108f16633cf95fa500b5b8c36c8b00',1,'glm']]],\n  ['mediump_5ff32mat4x4',['mediump_f32mat4x4',['../a00304.html#ga936e95b881ecd2d109459ca41913fa99',1,'glm']]],\n  ['mediump_5ff32quat',['mediump_f32quat',['../a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3',1,'glm']]],\n  ['mediump_5ff32vec1',['mediump_f32vec1',['../a00304.html#gabb33cab7d7c74cc14aa95455d0690865',1,'glm']]],\n  ['mediump_5ff32vec2',['mediump_f32vec2',['../a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b',1,'glm']]],\n  ['mediump_5ff32vec3',['mediump_f32vec3',['../a00304.html#ga062ffef2973bd8241df993c3b30b327c',1,'glm']]],\n  ['mediump_5ff32vec4',['mediump_f32vec4',['../a00304.html#gad80c84bcd5f585840faa6179f6fd446c',1,'glm']]],\n  ['mediump_5ff64',['mediump_f64',['../a00304.html#ga6d40381d78472553f878f66e443feeef',1,'glm']]],\n  ['mediump_5ff64mat2',['mediump_f64mat2',['../a00304.html#gac1281da5ded55047e8892b0e1f1ae965',1,'glm']]],\n  ['mediump_5ff64mat2x2',['mediump_f64mat2x2',['../a00304.html#ga4fd527644cccbca4cb205320eab026f3',1,'glm']]],\n  ['mediump_5ff64mat2x3',['mediump_f64mat2x3',['../a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54',1,'glm']]],\n  ['mediump_5ff64mat2x4',['mediump_f64mat2x4',['../a00304.html#gaf306dd69e53633636aee38cea79d4cb7',1,'glm']]],\n  ['mediump_5ff64mat3',['mediump_f64mat3',['../a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776',1,'glm']]],\n  ['mediump_5ff64mat3x2',['mediump_f64mat3x2',['../a00304.html#gacd926d36a72433f6cac51dd60fa13107',1,'glm']]],\n  ['mediump_5ff64mat3x3',['mediump_f64mat3x3',['../a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e',1,'glm']]],\n  ['mediump_5ff64mat3x4',['mediump_f64mat3x4',['../a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2',1,'glm']]],\n  ['mediump_5ff64mat4',['mediump_f64mat4',['../a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5',1,'glm']]],\n  ['mediump_5ff64mat4x2',['mediump_f64mat4x2',['../a00304.html#ga17d36f0ea22314117e1cec9594b33945',1,'glm']]],\n  ['mediump_5ff64mat4x3',['mediump_f64mat4x3',['../a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d',1,'glm']]],\n  ['mediump_5ff64mat4x4',['mediump_f64mat4x4',['../a00304.html#ga66edb8de17b9235029472f043ae107e9',1,'glm']]],\n  ['mediump_5ff64quat',['mediump_f64quat',['../a00304.html#ga5e52f485059ce6e3010c590b882602c9',1,'glm']]],\n  ['mediump_5ff64vec1',['mediump_f64vec1',['../a00304.html#gac30fdf8afa489400053275b6a3350127',1,'glm']]],\n  ['mediump_5ff64vec2',['mediump_f64vec2',['../a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b',1,'glm']]],\n  ['mediump_5ff64vec3',['mediump_f64vec3',['../a00304.html#ga461c4c7d0757404dd0dba931760b25cf',1,'glm']]],\n  ['mediump_5ff64vec4',['mediump_f64vec4',['../a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e',1,'glm']]],\n  ['mediump_5ffdualquat',['mediump_fdualquat',['../a00317.html#ga4a6b594ff7e81150d8143001367a9431',1,'glm']]],\n  ['mediump_5ffloat32',['mediump_float32',['../a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7',1,'glm']]],\n  ['mediump_5ffloat32_5ft',['mediump_float32_t',['../a00304.html#gae4dee61f8fe1caccec309fbed02faf12',1,'glm']]],\n  ['mediump_5ffloat64',['mediump_float64',['../a00304.html#gab83d8aae6e4f115e97a785e8574a115f',1,'glm']]],\n  ['mediump_5ffloat64_5ft',['mediump_float64_t',['../a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e',1,'glm']]],\n  ['mediump_5ffmat2',['mediump_fmat2',['../a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff',1,'glm']]],\n  ['mediump_5ffmat2x2',['mediump_fmat2x2',['../a00304.html#ga98a687c17b174ea316b5f397b64f44bc',1,'glm']]],\n  ['mediump_5ffmat2x3',['mediump_fmat2x3',['../a00304.html#gaa03f939d90d5ef157df957d93f0b9a64',1,'glm']]],\n  ['mediump_5ffmat2x4',['mediump_fmat2x4',['../a00304.html#ga35223623e9ccebd8a281873b71b7d213',1,'glm']]],\n  ['mediump_5ffmat3',['mediump_fmat3',['../a00304.html#ga80823dfad5dba98512c76af498343847',1,'glm']]],\n  ['mediump_5ffmat3x2',['mediump_fmat3x2',['../a00304.html#ga42569e5b92f8635cedeadb1457ee1467',1,'glm']]],\n  ['mediump_5ffmat3x3',['mediump_fmat3x3',['../a00304.html#gaa6f526388c74a66b3d52315a14d434ae',1,'glm']]],\n  ['mediump_5ffmat3x4',['mediump_fmat3x4',['../a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4',1,'glm']]],\n  ['mediump_5ffmat4',['mediump_fmat4',['../a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9',1,'glm']]],\n  ['mediump_5ffmat4x2',['mediump_fmat4x2',['../a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf',1,'glm']]],\n  ['mediump_5ffmat4x3',['mediump_fmat4x3',['../a00304.html#ga41ad497f7eae211556aefd783cb02b90',1,'glm']]],\n  ['mediump_5ffmat4x4',['mediump_fmat4x4',['../a00304.html#ga22e27beead07bff4d5ce9d6065a57279',1,'glm']]],\n  ['mediump_5ffvec1',['mediump_fvec1',['../a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b',1,'glm']]],\n  ['mediump_5ffvec2',['mediump_fvec2',['../a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6',1,'glm']]],\n  ['mediump_5ffvec3',['mediump_fvec3',['../a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07',1,'glm']]],\n  ['mediump_5ffvec4',['mediump_fvec4',['../a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb',1,'glm']]],\n  ['mediump_5fi16',['mediump_i16',['../a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a',1,'glm']]],\n  ['mediump_5fi16vec1',['mediump_i16vec1',['../a00304.html#gacc44265ed440bf5e6e566782570de842',1,'glm']]],\n  ['mediump_5fi16vec2',['mediump_i16vec2',['../a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88',1,'glm']]],\n  ['mediump_5fi16vec3',['mediump_i16vec3',['../a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633',1,'glm']]],\n  ['mediump_5fi16vec4',['mediump_i16vec4',['../a00304.html#gaf52982bb23e3a3772649b2c5bb84b107',1,'glm']]],\n  ['mediump_5fi32',['mediump_i32',['../a00304.html#gaf5e94bf2a20af7601787c154751dc2e1',1,'glm']]],\n  ['mediump_5fi32vec1',['mediump_i32vec1',['../a00304.html#ga46a57f71e430637559097a732b550a7e',1,'glm']]],\n  ['mediump_5fi32vec2',['mediump_i32vec2',['../a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219',1,'glm']]],\n  ['mediump_5fi32vec3',['mediump_i32vec3',['../a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a',1,'glm']]],\n  ['mediump_5fi32vec4',['mediump_i32vec4',['../a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8',1,'glm']]],\n  ['mediump_5fi64',['mediump_i64',['../a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f',1,'glm']]],\n  ['mediump_5fi64vec1',['mediump_i64vec1',['../a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e',1,'glm']]],\n  ['mediump_5fi64vec2',['mediump_i64vec2',['../a00304.html#ga2c94aeae3457325944ca1059b0b68330',1,'glm']]],\n  ['mediump_5fi64vec3',['mediump_i64vec3',['../a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e',1,'glm']]],\n  ['mediump_5fi64vec4',['mediump_i64vec4',['../a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1',1,'glm']]],\n  ['mediump_5fi8',['mediump_i8',['../a00304.html#gacf1ded173e1e2d049c511d095b259e21',1,'glm']]],\n  ['mediump_5fi8vec1',['mediump_i8vec1',['../a00304.html#ga85e8893f4ae3630065690a9000c0c483',1,'glm']]],\n  ['mediump_5fi8vec2',['mediump_i8vec2',['../a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67',1,'glm']]],\n  ['mediump_5fi8vec3',['mediump_i8vec3',['../a00304.html#ga6dd1c1618378c6f94d522a61c28773c9',1,'glm']]],\n  ['mediump_5fi8vec4',['mediump_i8vec4',['../a00304.html#gac7bb04fb857ef7b520e49f6c381432be',1,'glm']]],\n  ['mediump_5fimat2',['mediump_imat2',['../a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378',1,'glm']]],\n  ['mediump_5fimat2x2',['mediump_imat2x2',['../a00294.html#ga4b2aeb11a329940721dda9583e71f856',1,'glm']]],\n  ['mediump_5fimat2x3',['mediump_imat2x3',['../a00294.html#ga74362470ba99843ac70aee5ac38cc674',1,'glm']]],\n  ['mediump_5fimat2x4',['mediump_imat2x4',['../a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09',1,'glm']]],\n  ['mediump_5fimat3',['mediump_imat3',['../a00294.html#ga6c63bdc736efd3466e0730de0251cb71',1,'glm']]],\n  ['mediump_5fimat3x2',['mediump_imat3x2',['../a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809',1,'glm']]],\n  ['mediump_5fimat3x3',['mediump_imat3x3',['../a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12',1,'glm']]],\n  ['mediump_5fimat3x4',['mediump_imat3x4',['../a00294.html#ga67689a518b181a26540bc44a163525cd',1,'glm']]],\n  ['mediump_5fimat4',['mediump_imat4',['../a00294.html#gaf348552978553630d2a00b78eb887ced',1,'glm']]],\n  ['mediump_5fimat4x2',['mediump_imat4x2',['../a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc',1,'glm']]],\n  ['mediump_5fimat4x3',['mediump_imat4x3',['../a00294.html#ga5b10acc696759e03f6ab918f4467e94c',1,'glm']]],\n  ['mediump_5fimat4x4',['mediump_imat4x4',['../a00294.html#ga2596869d154dec1180beadbb9df80501',1,'glm']]],\n  ['mediump_5fint16',['mediump_int16',['../a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d',1,'glm']]],\n  ['mediump_5fint16_5ft',['mediump_int16_t',['../a00304.html#ga80e72fe94c88498537e8158ba7591c54',1,'glm']]],\n  ['mediump_5fint32',['mediump_int32',['../a00304.html#ga5244cef85d6e870e240c76428a262ae8',1,'glm']]],\n  ['mediump_5fint32_5ft',['mediump_int32_t',['../a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180',1,'glm']]],\n  ['mediump_5fint64',['mediump_int64',['../a00304.html#ga7b968f2b86a0442a89c7359171e1d866',1,'glm']]],\n  ['mediump_5fint64_5ft',['mediump_int64_t',['../a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64',1,'glm']]],\n  ['mediump_5fint8',['mediump_int8',['../a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e',1,'glm']]],\n  ['mediump_5fint8_5ft',['mediump_int8_t',['../a00304.html#ga6d7b3789ecb932c26430009478cac7ae',1,'glm']]],\n  ['mediump_5fivec1',['mediump_ivec1',['../a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56',1,'glm']]],\n  ['mediump_5fivec2',['mediump_ivec2',['../a00282.html#gac57496299d276ed97044074097bd5e2c',1,'glm']]],\n  ['mediump_5fivec3',['mediump_ivec3',['../a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466',1,'glm']]],\n  ['mediump_5fivec4',['mediump_ivec4',['../a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5',1,'glm']]],\n  ['mediump_5fmat2',['mediump_mat2',['../a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3',1,'glm']]],\n  ['mediump_5fmat2x2',['mediump_mat2x2',['../a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d',1,'glm']]],\n  ['mediump_5fmat2x3',['mediump_mat2x3',['../a00284.html#ga497d513d552d927537d61fa11e3701ab',1,'glm']]],\n  ['mediump_5fmat2x4',['mediump_mat2x4',['../a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5',1,'glm']]],\n  ['mediump_5fmat3',['mediump_mat3',['../a00284.html#ga5aae49834d02732942f44e61d7bce136',1,'glm']]],\n  ['mediump_5fmat3x2',['mediump_mat3x2',['../a00284.html#ga9e1c9ee65fef547bde793e69723e24eb',1,'glm']]],\n  ['mediump_5fmat3x3',['mediump_mat3x3',['../a00284.html#gabc0f2f4ad21c90b341881cf056f8650e',1,'glm']]],\n  ['mediump_5fmat3x4',['mediump_mat3x4',['../a00284.html#gaa669c6675c3405f76c0b14020d1c0d61',1,'glm']]],\n  ['mediump_5fmat4',['mediump_mat4',['../a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7',1,'glm']]],\n  ['mediump_5fmat4x2',['mediump_mat4x2',['../a00284.html#gad75706b70545412ba9ac27d5ee210f66',1,'glm']]],\n  ['mediump_5fmat4x3',['mediump_mat4x3',['../a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770',1,'glm']]],\n  ['mediump_5fmat4x4',['mediump_mat4x4',['../a00284.html#ga15bca2b70917d9752231160d9da74b01',1,'glm']]],\n  ['mediump_5fquat',['mediump_quat',['../a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d',1,'glm']]],\n  ['mediump_5fu16',['mediump_u16',['../a00304.html#ga9df98857be695d5a30cb30f5bfa38a80',1,'glm']]],\n  ['mediump_5fu16vec1',['mediump_u16vec1',['../a00304.html#ga400ce8cc566de093a9b28e59e220d6e4',1,'glm']]],\n  ['mediump_5fu16vec2',['mediump_u16vec2',['../a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1',1,'glm']]],\n  ['mediump_5fu16vec3',['mediump_u16vec3',['../a00304.html#gac9ba20234b0c3751d45ce575fc71e551',1,'glm']]],\n  ['mediump_5fu16vec4',['mediump_u16vec4',['../a00304.html#ga5793393686ce5bd2d5968ff9144762b8',1,'glm']]],\n  ['mediump_5fu32',['mediump_u32',['../a00304.html#ga1bd0e914158bf03135f8a317de6debe9',1,'glm']]],\n  ['mediump_5fu32vec1',['mediump_u32vec1',['../a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee',1,'glm']]],\n  ['mediump_5fu32vec2',['mediump_u32vec2',['../a00304.html#ga94f74851fce338549c705b5f0d601c4f',1,'glm']]],\n  ['mediump_5fu32vec3',['mediump_u32vec3',['../a00304.html#ga012c24c8fc69707b90260474c70275a2',1,'glm']]],\n  ['mediump_5fu32vec4',['mediump_u32vec4',['../a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a',1,'glm']]],\n  ['mediump_5fu64',['mediump_u64',['../a00304.html#ga2af9490085ae3bdf36a544e9dd073610',1,'glm']]],\n  ['mediump_5fu64vec1',['mediump_u64vec1',['../a00304.html#ga659f372ccb8307d5db5beca942cde5e8',1,'glm']]],\n  ['mediump_5fu64vec2',['mediump_u64vec2',['../a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d',1,'glm']]],\n  ['mediump_5fu64vec3',['mediump_u64vec3',['../a00304.html#ga1900c6ab74acd392809425953359ef52',1,'glm']]],\n  ['mediump_5fu64vec4',['mediump_u64vec4',['../a00304.html#gaec7ee455cb379ec2993e81482123e1cc',1,'glm']]],\n  ['mediump_5fu8',['mediump_u8',['../a00304.html#gad1213a22bbb9e4107f07eaa4956f8281',1,'glm']]],\n  ['mediump_5fu8vec1',['mediump_u8vec1',['../a00304.html#ga4a43050843b141bdc7e85437faef6f55',1,'glm']]],\n  ['mediump_5fu8vec2',['mediump_u8vec2',['../a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194',1,'glm']]],\n  ['mediump_5fu8vec3',['mediump_u8vec3',['../a00304.html#gaddc6f7748b699254942c5216b68f8f7f',1,'glm']]],\n  ['mediump_5fu8vec4',['mediump_u8vec4',['../a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b',1,'glm']]],\n  ['mediump_5fuint16',['mediump_uint16',['../a00304.html#ga2885a6c89916911e418c06bb76b9bdbb',1,'glm']]],\n  ['mediump_5fuint16_5ft',['mediump_uint16_t',['../a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e',1,'glm']]],\n  ['mediump_5fuint32',['mediump_uint32',['../a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f',1,'glm']]],\n  ['mediump_5fuint32_5ft',['mediump_uint32_t',['../a00304.html#gaf4dae276fd29623950de14a6ca2586b5',1,'glm']]],\n  ['mediump_5fuint64',['mediump_uint64',['../a00304.html#ga30652709815ad9404272a31957daa59e',1,'glm']]],\n  ['mediump_5fuint64_5ft',['mediump_uint64_t',['../a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9',1,'glm']]],\n  ['mediump_5fuint8',['mediump_uint8',['../a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3',1,'glm']]],\n  ['mediump_5fuint8_5ft',['mediump_uint8_t',['../a00304.html#gadfe65c78231039e90507770db50c98c7',1,'glm']]],\n  ['mediump_5fumat2',['mediump_umat2',['../a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee',1,'glm']]],\n  ['mediump_5fumat2x2',['mediump_umat2x2',['../a00294.html#ga3b209b1b751f041422137e3c065dfa98',1,'glm']]],\n  ['mediump_5fumat2x3',['mediump_umat2x3',['../a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306',1,'glm']]],\n  ['mediump_5fumat2x4',['mediump_umat2x4',['../a00294.html#gae1317ddca16d01e119a40b7f0ee85f95',1,'glm']]],\n  ['mediump_5fumat3',['mediump_umat3',['../a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a',1,'glm']]],\n  ['mediump_5fumat3x2',['mediump_umat3x2',['../a00294.html#gaadc28bfdc8ebca81ae85121b11994970',1,'glm']]],\n  ['mediump_5fumat3x3',['mediump_umat3x3',['../a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d',1,'glm']]],\n  ['mediump_5fumat3x4',['mediump_umat3x4',['../a00294.html#ga78009a1e4ca64217e46b418535e52546',1,'glm']]],\n  ['mediump_5fumat4',['mediump_umat4',['../a00294.html#ga5087c2beb26a11d9af87432e554cf9d1',1,'glm']]],\n  ['mediump_5fumat4x2',['mediump_umat4x2',['../a00294.html#gaf35aefd81cc13718f6b059623f7425fa',1,'glm']]],\n  ['mediump_5fumat4x3',['mediump_umat4x3',['../a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb',1,'glm']]],\n  ['mediump_5fumat4x4',['mediump_umat4x4',['../a00294.html#gaa9428fc8430dc552aad920653f822ef3',1,'glm']]],\n  ['mediump_5fuvec1',['mediump_uvec1',['../a00277.html#ga38fde73aaf1420175ece8d4882558a3f',1,'glm']]],\n  ['mediump_5fuvec2',['mediump_uvec2',['../a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b',1,'glm']]],\n  ['mediump_5fuvec3',['mediump_uvec3',['../a00282.html#ga83b7df38feefbb357f3673d950fafef7',1,'glm']]],\n  ['mediump_5fuvec4',['mediump_uvec4',['../a00282.html#ga64ed0deb6573375b7016daf82ffd53a7',1,'glm']]],\n  ['mediump_5fvec1',['mediump_vec1',['../a00271.html#ga645f53e6b8056609023a894b4e2beef4',1,'glm']]],\n  ['mediump_5fvec2',['mediump_vec2',['../a00282.html#gabc61976261c406520c7a8e4d946dc3f0',1,'glm']]],\n  ['mediump_5fvec3',['mediump_vec3',['../a00282.html#ga2384e263df19f1404b733016eff78fca',1,'glm']]],\n  ['mediump_5fvec4',['mediump_vec4',['../a00282.html#ga5c6978d3ffba06738416a33083853fc0',1,'glm']]],\n  ['min',['min',['../a00241.html#ga6cf8098827054a270ee36b18e30d471d',1,'glm::min(genType x, genType y)'],['../a00241.html#gaa7d015eba1f9f48519251f4abe69b14d',1,'glm::min(vec&lt; L, T, Q &gt; const &amp;x, T y)'],['../a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48',1,'glm::min(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00258.html#ga420b37cbd98c395b93dab0278305cd46',1,'glm::min(T a, T b, T c)'],['../a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d',1,'glm::min(T a, T b, T c, T d)'],['../a00267.html#ga3cd83d80fd4f433d8e333593ec56dddf',1,'glm::min(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)'],['../a00267.html#gab66920ed064ab518d6859c5a889c4be4',1,'glm::min(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)'],['../a00321.html#ga713d3f9b3e76312c0d314e0c8611a6a6',1,'glm::min(T const &amp;x, T const &amp;y, T const &amp;z)'],['../a00321.html#ga74d1a96e7cdbac40f6d35142d3bcbbd4',1,'glm::min(C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z)'],['../a00321.html#ga42b5c3fc027fd3d9a50d2ccc9126d9f0',1,'glm::min(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z)'],['../a00321.html#ga95466987024d03039607f09e69813d69',1,'glm::min(T const &amp;x, T const &amp;y, T const &amp;z, T const &amp;w)'],['../a00321.html#ga4fe35dd31dd0c45693c9b60b830b8d47',1,'glm::min(C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z, typename C&lt; T &gt;::T const &amp;w)'],['../a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead',1,'glm::min(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)']]],\n  ['mirrorclamp',['mirrorClamp',['../a00369.html#gaa6856a0a048d2749252848da35e10c8b',1,'glm']]],\n  ['mirrorrepeat',['mirrorRepeat',['../a00369.html#ga16a89b0661b60d5bea85137bbae74d73',1,'glm']]],\n  ['mix',['mix',['../a00241.html#ga8e93f374aae27d1a88b921860351f8d4',1,'glm::mix(genTypeT x, genTypeT y, genTypeU a)'],['../a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2',1,'glm::mix(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)']]],\n  ['mixed_5fproduct_2ehpp',['mixed_product.hpp',['../a00111.html',1,'']]],\n  ['mixedproduct',['mixedProduct',['../a00342.html#gab3c6048fbb67f7243b088a4fee48d020',1,'glm']]],\n  ['mod',['mod',['../a00241.html#ga9b197a452cd52db3c5c18bac72bd7798',1,'glm::mod(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00330.html#gaabfbb41531ab7ad8d06fc176edfba785',1,'glm::mod(int x, int y)'],['../a00330.html#ga63fc8d63e7da1706439233b386ba8b6f',1,'glm::mod(uint x, uint y)']]],\n  ['modf',['modf',['../a00241.html#ga85e33f139b8db1b39b590a5713b9e679',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_b.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_b.js",
    "content": "var searchData=\n[\n  ['nextmultiple',['nextMultiple',['../a00261.html#gab770a3835c44c8a6fd225be4f4e6b317',1,'glm::nextMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#gace38d00601cbf49cd4dc03f003ab42b7',1,'glm::nextMultiple(vec&lt; L, T, Q &gt; const &amp;v, T Multiple)'],['../a00274.html#gacda365edad320c7aff19cc283a3b8ca2',1,'glm::nextMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['nextpoweroftwo',['nextPowerOfTwo',['../a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc',1,'glm::nextPowerOfTwo(genIUType v)'],['../a00274.html#gabba67f8aac9915e10fca727277274502',1,'glm::nextPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['nlz',['nlz',['../a00330.html#ga78dff8bdb361bf0061194c93e003d189',1,'glm']]],\n  ['noise_2ehpp',['noise.hpp',['../a00112.html',1,'']]],\n  ['norm_2ehpp',['norm.hpp',['../a00113.html',1,'']]],\n  ['normal_2ehpp',['normal.hpp',['../a00114.html',1,'']]],\n  ['normalize',['normalize',['../a00254.html#gabf30e3263fffe8dcc6659aea76ae8927',1,'glm::normalize(qua&lt; T, Q &gt; const &amp;q)'],['../a00279.html#ga3b8d3dcae77870781392ed2902cce597',1,'glm::normalize(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00317.html#ga299b8641509606b1958ffa104a162cfe',1,'glm::normalize(tdualquat&lt; T, Q &gt; const &amp;q)']]],\n  ['normalize_5fdot_2ehpp',['normalize_dot.hpp',['../a00115.html',1,'']]],\n  ['normalizedot',['normalizeDot',['../a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa',1,'glm']]],\n  ['not_5f',['not_',['../a00374.html#ga610fcd175791fd246e328ffee10dbf1e',1,'glm']]],\n  ['notequal',['notEqual',['../a00246.html#ga8504f18a7e2bf315393032c2137dad83',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)'],['../a00246.html#ga29071147d118569344d10944b7d5c378',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, T epsilon)'],['../a00246.html#gad7959e14fbc35b4ed2617daf4d67f6cd',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, T, Q &gt; const &amp;epsilon)'],['../a00246.html#gaa1cd7fc228ef6e26c73583fd0d9c6552',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, int ULPs)'],['../a00246.html#gaa5517341754149ffba742d230afd1f32',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)'],['../a00255.html#gab441cee0de5867a868f3a586ee68cfe1',1,'glm::notEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00255.html#ga5117a44c1bf21af857cd23e44a96d313',1,'glm::notEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)'],['../a00275.html#ga4a99cc41341567567a608719449c1fac',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T epsilon)'],['../a00275.html#ga417cf51304359db18e819dda9bce5767',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;epsilon)'],['../a00275.html#ga8b5c2c3f83422ae5b71fa960d03b0339',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, int ULPs)'],['../a00275.html#ga0b15ffe32987a6029b14398eb0def01a',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)'],['../a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['number_5fprecision_2ehpp',['number_precision.hpp',['../a00116.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_c.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_c.js",
    "content": "var searchData=\n[\n  ['opengl_20mathematics_20_28glm_29',['OpenGL Mathematics (GLM)',['../index.html',1,'']]],\n  ['one',['one',['../a00290.html#ga39c2fb227631ca25894326529bdd1ee5',1,'glm']]],\n  ['one_5fover_5fpi',['one_over_pi',['../a00290.html#ga555150da2b06d23c8738981d5013e0eb',1,'glm']]],\n  ['one_5fover_5froot_5ftwo',['one_over_root_two',['../a00290.html#ga788fa23a0939bac4d1d0205fb4f35818',1,'glm']]],\n  ['one_5fover_5ftwo_5fpi',['one_over_two_pi',['../a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc',1,'glm']]],\n  ['openbounded',['openBounded',['../a00314.html#gafd303042ba2ba695bf53b2315f53f93f',1,'glm']]],\n  ['optimum_5fpow_2ehpp',['optimum_pow.hpp',['../a00117.html',1,'']]],\n  ['orientate2',['orientate2',['../a00319.html#gae16738a9f1887cf4e4db6a124637608d',1,'glm']]],\n  ['orientate3',['orientate3',['../a00319.html#ga7ca98668a5786f19c7b38299ebbc9b4c',1,'glm::orientate3(T const &amp;angle)'],['../a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb',1,'glm::orientate3(vec&lt; 3, T, Q &gt; const &amp;angles)']]],\n  ['orientate4',['orientate4',['../a00319.html#ga4a044653f71a4ecec68e0b623382b48a',1,'glm']]],\n  ['orientation',['orientation',['../a00356.html#ga1a32fceb71962e6160e8af295c91930a',1,'glm']]],\n  ['orientedangle',['orientedAngle',['../a00367.html#ga9556a803dce87fe0f42fdabe4ebba1d5',1,'glm::orientedAngle(vec&lt; 2, T, Q &gt; const &amp;x, vec&lt; 2, T, Q &gt; const &amp;y)'],['../a00367.html#ga706fce3d111f485839756a64f5a48553',1,'glm::orientedAngle(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, vec&lt; 3, T, Q &gt; const &amp;ref)']]],\n  ['ortho',['ortho',['../a00243.html#gae5b6b40ed882cd56cd7cb97701909c06',1,'glm::ortho(T left, T right, T bottom, T top)'],['../a00243.html#ga6615d8a9d39432e279c4575313ecb456',1,'glm::ortho(T left, T right, T bottom, T top, T zNear, T zFar)']]],\n  ['ortholh',['orthoLH',['../a00243.html#gad122a79aadaa5529cec4ac197203db7f',1,'glm']]],\n  ['ortholh_5fno',['orthoLH_NO',['../a00243.html#ga526416735ea7c5c5cd255bf99d051bd8',1,'glm']]],\n  ['ortholh_5fzo',['orthoLH_ZO',['../a00243.html#gab37ac3eec8d61f22fceda7775e836afa',1,'glm']]],\n  ['orthono',['orthoNO',['../a00243.html#gab219d28a8f178d4517448fcd6395a073',1,'glm']]],\n  ['orthonormalize',['orthonormalize',['../a00348.html#ga4cab5d698e6e2eccea30c8e81c74371f',1,'glm::orthonormalize(mat&lt; 3, 3, T, Q &gt; const &amp;m)'],['../a00348.html#gac3bc7ef498815026bc3d361ae0b7138e',1,'glm::orthonormalize(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)']]],\n  ['orthonormalize_2ehpp',['orthonormalize.hpp',['../a00118.html',1,'']]],\n  ['orthorh',['orthoRH',['../a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4',1,'glm']]],\n  ['orthorh_5fno',['orthoRH_NO',['../a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780',1,'glm']]],\n  ['orthorh_5fzo',['orthoRH_ZO',['../a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588',1,'glm']]],\n  ['orthozo',['orthoZO',['../a00243.html#gaea11a70817af2c0801c869dea0b7a5bc',1,'glm']]],\n  ['outerproduct',['outerProduct',['../a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_d.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_d.js",
    "content": "var searchData=\n[\n  ['packdouble2x32',['packDouble2x32',['../a00372.html#gaa916ca426b2bb0343ba17e3753e245c2',1,'glm']]],\n  ['packed_5fbvec1',['packed_bvec1',['../a00303.html#ga88632cea9008ac0ac1388e94e804a53c',1,'glm']]],\n  ['packed_5fbvec2',['packed_bvec2',['../a00303.html#gab85245913eaa40ab82adabcae37086cb',1,'glm']]],\n  ['packed_5fbvec3',['packed_bvec3',['../a00303.html#ga0c48f9417f649e27f3fb0c9f733a18bd',1,'glm']]],\n  ['packed_5fbvec4',['packed_bvec4',['../a00303.html#ga3180d7db84a74c402157df3bbc0ae3ed',1,'glm']]],\n  ['packed_5fdmat2',['packed_dmat2',['../a00303.html#gad87408a8350918711f845f071bbe43fb',1,'glm']]],\n  ['packed_5fdmat2x2',['packed_dmat2x2',['../a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9',1,'glm']]],\n  ['packed_5fdmat2x3',['packed_dmat2x3',['../a00303.html#gac3a5315f588ba04ad255188071ec4e22',1,'glm']]],\n  ['packed_5fdmat2x4',['packed_dmat2x4',['../a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4',1,'glm']]],\n  ['packed_5fdmat3',['packed_dmat3',['../a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245',1,'glm']]],\n  ['packed_5fdmat3x2',['packed_dmat3x2',['../a00303.html#gae36de20a4c0e0b1444b7903ae811d94e',1,'glm']]],\n  ['packed_5fdmat3x3',['packed_dmat3x3',['../a00303.html#gab9b909f1392d86854334350efcae85f5',1,'glm']]],\n  ['packed_5fdmat3x4',['packed_dmat3x4',['../a00303.html#ga199131fd279c92c2ac12df6d978f1dd6',1,'glm']]],\n  ['packed_5fdmat4',['packed_dmat4',['../a00303.html#gada980a3485640aa8151f368f17ad3086',1,'glm']]],\n  ['packed_5fdmat4x2',['packed_dmat4x2',['../a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72',1,'glm']]],\n  ['packed_5fdmat4x3',['packed_dmat4x3',['../a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764',1,'glm']]],\n  ['packed_5fdmat4x4',['packed_dmat4x4',['../a00303.html#gae20617435a6d042d7c38da2badd64a09',1,'glm']]],\n  ['packed_5fdvec1',['packed_dvec1',['../a00303.html#ga532f0c940649b1ee303acd572fc35531',1,'glm']]],\n  ['packed_5fdvec2',['packed_dvec2',['../a00303.html#ga5c194b11fbda636f2ab20c3bd0079196',1,'glm']]],\n  ['packed_5fdvec3',['packed_dvec3',['../a00303.html#ga0581ea552d86b2b5de7a2804bed80e72',1,'glm']]],\n  ['packed_5fdvec4',['packed_dvec4',['../a00303.html#gae8a9b181f9dc813ad6e125a52b14b935',1,'glm']]],\n  ['packed_5fhighp_5fbvec1',['packed_highp_bvec1',['../a00303.html#ga439e97795314b81cd15abd4e5c2e6e7a',1,'glm']]],\n  ['packed_5fhighp_5fbvec2',['packed_highp_bvec2',['../a00303.html#gad791d671f4fcf1ed1ea41f752916b70a',1,'glm']]],\n  ['packed_5fhighp_5fbvec3',['packed_highp_bvec3',['../a00303.html#ga6a5a3250b57dfadc66735bc72911437f',1,'glm']]],\n  ['packed_5fhighp_5fbvec4',['packed_highp_bvec4',['../a00303.html#ga09f517d88b996ef1b2f42fd54222b82d',1,'glm']]],\n  ['packed_5fhighp_5fdmat2',['packed_highp_dmat2',['../a00303.html#gae29686632fd05efac0675d9a6370d77b',1,'glm']]],\n  ['packed_5fhighp_5fdmat2x2',['packed_highp_dmat2x2',['../a00303.html#ga22bd6382b16052e301edbfc031b9f37a',1,'glm']]],\n  ['packed_5fhighp_5fdmat2x3',['packed_highp_dmat2x3',['../a00303.html#ga999d82719696d4c59f4d236dd08f273d',1,'glm']]],\n  ['packed_5fhighp_5fdmat2x4',['packed_highp_dmat2x4',['../a00303.html#ga6998ac2a8d7fe456b651a6336ed26bb0',1,'glm']]],\n  ['packed_5fhighp_5fdmat3',['packed_highp_dmat3',['../a00303.html#gadac7c040c4810dd52b36fcd09d097400',1,'glm']]],\n  ['packed_5fhighp_5fdmat3x2',['packed_highp_dmat3x2',['../a00303.html#gab462744977beb85fb5c782bc2eea7b15',1,'glm']]],\n  ['packed_5fhighp_5fdmat3x3',['packed_highp_dmat3x3',['../a00303.html#ga49e5a709d098523823b2f824e48672a6',1,'glm']]],\n  ['packed_5fhighp_5fdmat3x4',['packed_highp_dmat3x4',['../a00303.html#ga2c67b3b0adab71c8680c3d819f1fa9b7',1,'glm']]],\n  ['packed_5fhighp_5fdmat4',['packed_highp_dmat4',['../a00303.html#ga6718822cd7af005a9b5bd6ee282f6ba6',1,'glm']]],\n  ['packed_5fhighp_5fdmat4x2',['packed_highp_dmat4x2',['../a00303.html#ga12e39e797fb724a5b51fcbea2513a7da',1,'glm']]],\n  ['packed_5fhighp_5fdmat4x3',['packed_highp_dmat4x3',['../a00303.html#ga79c2e9f82e67963c1ecad0ad6d0ec72e',1,'glm']]],\n  ['packed_5fhighp_5fdmat4x4',['packed_highp_dmat4x4',['../a00303.html#ga2df58e03e5afded28707b4f7d077afb4',1,'glm']]],\n  ['packed_5fhighp_5fdvec1',['packed_highp_dvec1',['../a00303.html#gab472b2d917b5e6efd76e8c7dbfbbf9f1',1,'glm']]],\n  ['packed_5fhighp_5fdvec2',['packed_highp_dvec2',['../a00303.html#ga5b2dc48fa19b684d207d69c6b145eb63',1,'glm']]],\n  ['packed_5fhighp_5fdvec3',['packed_highp_dvec3',['../a00303.html#gaaac6b356ef00154da41aaae7d1549193',1,'glm']]],\n  ['packed_5fhighp_5fdvec4',['packed_highp_dvec4',['../a00303.html#ga81b5368fe485e2630aa9b44832d592e7',1,'glm']]],\n  ['packed_5fhighp_5fivec1',['packed_highp_ivec1',['../a00303.html#ga7245acc887a5438f46fd85fdf076bb3b',1,'glm']]],\n  ['packed_5fhighp_5fivec2',['packed_highp_ivec2',['../a00303.html#ga54f368ec6b514a5aa4f28d40e6f93ef7',1,'glm']]],\n  ['packed_5fhighp_5fivec3',['packed_highp_ivec3',['../a00303.html#ga865a9c7bb22434b1b8c5ac31e164b628',1,'glm']]],\n  ['packed_5fhighp_5fivec4',['packed_highp_ivec4',['../a00303.html#gad6f1b4e3a51c2c051814b60d5d1b8895',1,'glm']]],\n  ['packed_5fhighp_5fmat2',['packed_highp_mat2',['../a00303.html#ga2f2d913d8cca2f935b2522964408c0b2',1,'glm']]],\n  ['packed_5fhighp_5fmat2x2',['packed_highp_mat2x2',['../a00303.html#ga245c12d2daf67feecaa2d3277c8f6661',1,'glm']]],\n  ['packed_5fhighp_5fmat2x3',['packed_highp_mat2x3',['../a00303.html#ga069cc8892aadae144c00f35297617d44',1,'glm']]],\n  ['packed_5fhighp_5fmat2x4',['packed_highp_mat2x4',['../a00303.html#ga6904d09b62141d09712b76983892f95b',1,'glm']]],\n  ['packed_5fhighp_5fmat3',['packed_highp_mat3',['../a00303.html#gabdd5fbffe8b8b8a7b33523f25b120dbe',1,'glm']]],\n  ['packed_5fhighp_5fmat3x2',['packed_highp_mat3x2',['../a00303.html#ga2624719cb251d8de8cad1beaefc3a3f9',1,'glm']]],\n  ['packed_5fhighp_5fmat3x3',['packed_highp_mat3x3',['../a00303.html#gaf2e07527d678440bf0c20adbeb9177c5',1,'glm']]],\n  ['packed_5fhighp_5fmat3x4',['packed_highp_mat3x4',['../a00303.html#ga72102fa6ac2445aa3bb203128ad52449',1,'glm']]],\n  ['packed_5fhighp_5fmat4',['packed_highp_mat4',['../a00303.html#ga253e8379b08d2dc6fe2800b2fb913203',1,'glm']]],\n  ['packed_5fhighp_5fmat4x2',['packed_highp_mat4x2',['../a00303.html#gae389c2071cf3cdb33e7812c6fd156710',1,'glm']]],\n  ['packed_5fhighp_5fmat4x3',['packed_highp_mat4x3',['../a00303.html#ga4584f64394bd7123b7a8534741e4916c',1,'glm']]],\n  ['packed_5fhighp_5fmat4x4',['packed_highp_mat4x4',['../a00303.html#ga0149fe15668925147e07c94fd2c2d6ae',1,'glm']]],\n  ['packed_5fhighp_5fuvec1',['packed_highp_uvec1',['../a00303.html#ga8c32b53f628a3616aa5061e58d66fe74',1,'glm']]],\n  ['packed_5fhighp_5fuvec2',['packed_highp_uvec2',['../a00303.html#gab704d4fb15f6f96d70e363d5db7060cd',1,'glm']]],\n  ['packed_5fhighp_5fuvec3',['packed_highp_uvec3',['../a00303.html#ga0b570da473fec4619db5aa0dce5133b0',1,'glm']]],\n  ['packed_5fhighp_5fuvec4',['packed_highp_uvec4',['../a00303.html#gaa582f38c82aef61dea7aaedf15bb06a6',1,'glm']]],\n  ['packed_5fhighp_5fvec1',['packed_highp_vec1',['../a00303.html#ga56473759d2702ee19ab7f91d0017fa70',1,'glm']]],\n  ['packed_5fhighp_5fvec2',['packed_highp_vec2',['../a00303.html#ga6b8b9475e7c3b16aed13edbc460bbc4d',1,'glm']]],\n  ['packed_5fhighp_5fvec3',['packed_highp_vec3',['../a00303.html#ga3815661df0e2de79beff8168c09adf1e',1,'glm']]],\n  ['packed_5fhighp_5fvec4',['packed_highp_vec4',['../a00303.html#ga4015f36bf5a5adb6ac5d45beed959867',1,'glm']]],\n  ['packed_5fivec1',['packed_ivec1',['../a00303.html#ga11581a06fc7bf941fa4d4b6aca29812c',1,'glm']]],\n  ['packed_5fivec2',['packed_ivec2',['../a00303.html#ga1fe4c5f56b8087d773aa90dc88a257a7',1,'glm']]],\n  ['packed_5fivec3',['packed_ivec3',['../a00303.html#gae157682a7847161787951ba1db4cf325',1,'glm']]],\n  ['packed_5fivec4',['packed_ivec4',['../a00303.html#gac228b70372abd561340d5f926a7c1778',1,'glm']]],\n  ['packed_5flowp_5fbvec1',['packed_lowp_bvec1',['../a00303.html#gae3c8750f53259ece334d3aa3b3649a40',1,'glm']]],\n  ['packed_5flowp_5fbvec2',['packed_lowp_bvec2',['../a00303.html#gac969befedbda69eb78d4e23f751fdbee',1,'glm']]],\n  ['packed_5flowp_5fbvec3',['packed_lowp_bvec3',['../a00303.html#ga7c20adbe1409e3fe4544677a7f6fe954',1,'glm']]],\n  ['packed_5flowp_5fbvec4',['packed_lowp_bvec4',['../a00303.html#gae473587cff3092edc0877fc691c26a0b',1,'glm']]],\n  ['packed_5flowp_5fdmat2',['packed_lowp_dmat2',['../a00303.html#gac93f9b1a35b9de4f456b9f2dfeaf1097',1,'glm']]],\n  ['packed_5flowp_5fdmat2x2',['packed_lowp_dmat2x2',['../a00303.html#gaeeaff6c132ec91ebd21da3a2399548ea',1,'glm']]],\n  ['packed_5flowp_5fdmat2x3',['packed_lowp_dmat2x3',['../a00303.html#ga2ccdcd4846775cbe4f9d12e71d55b5d2',1,'glm']]],\n  ['packed_5flowp_5fdmat2x4',['packed_lowp_dmat2x4',['../a00303.html#gac870c47d2d9d48503f6c9ee3baec8ce1',1,'glm']]],\n  ['packed_5flowp_5fdmat3',['packed_lowp_dmat3',['../a00303.html#ga3894a059eeaacec8791c25de398d9955',1,'glm']]],\n  ['packed_5flowp_5fdmat3x2',['packed_lowp_dmat3x2',['../a00303.html#ga23ec236950f5859f59197663266b535d',1,'glm']]],\n  ['packed_5flowp_5fdmat3x3',['packed_lowp_dmat3x3',['../a00303.html#ga4a7c7d8c3a663d0ec2a858cbfa14e54c',1,'glm']]],\n  ['packed_5flowp_5fdmat3x4',['packed_lowp_dmat3x4',['../a00303.html#ga8fc0e66da83599071b7ec17510686cd9',1,'glm']]],\n  ['packed_5flowp_5fdmat4',['packed_lowp_dmat4',['../a00303.html#ga03e1edf5666c40affe39aee35c87956f',1,'glm']]],\n  ['packed_5flowp_5fdmat4x2',['packed_lowp_dmat4x2',['../a00303.html#ga39658fb13369db869d363684bd8399c0',1,'glm']]],\n  ['packed_5flowp_5fdmat4x3',['packed_lowp_dmat4x3',['../a00303.html#ga30b0351eebc18c6056101359bdd3a359',1,'glm']]],\n  ['packed_5flowp_5fdmat4x4',['packed_lowp_dmat4x4',['../a00303.html#ga0294d4c45151425c86a11deee7693c0e',1,'glm']]],\n  ['packed_5flowp_5fdvec1',['packed_lowp_dvec1',['../a00303.html#ga054050e9d4e78d81db0e6d1573b1c624',1,'glm']]],\n  ['packed_5flowp_5fdvec2',['packed_lowp_dvec2',['../a00303.html#gadc19938ddb204bfcb4d9ef35b1e2bf93',1,'glm']]],\n  ['packed_5flowp_5fdvec3',['packed_lowp_dvec3',['../a00303.html#ga9189210cabd6651a5e14a4c46fb20598',1,'glm']]],\n  ['packed_5flowp_5fdvec4',['packed_lowp_dvec4',['../a00303.html#ga262dafd0c001c3a38d1cc91d024ca738',1,'glm']]],\n  ['packed_5flowp_5fivec1',['packed_lowp_ivec1',['../a00303.html#gaf22b77f1cf3e73b8b1dddfe7f959357c',1,'glm']]],\n  ['packed_5flowp_5fivec2',['packed_lowp_ivec2',['../a00303.html#ga52635859f5ef660ab999d22c11b7867f',1,'glm']]],\n  ['packed_5flowp_5fivec3',['packed_lowp_ivec3',['../a00303.html#ga98c9d122a959e9f3ce10a5623c310f5d',1,'glm']]],\n  ['packed_5flowp_5fivec4',['packed_lowp_ivec4',['../a00303.html#ga931731b8ae3b54c7ecc221509dae96bc',1,'glm']]],\n  ['packed_5flowp_5fmat2',['packed_lowp_mat2',['../a00303.html#ga70dcb9ef0b24e832772a7405efa9669a',1,'glm']]],\n  ['packed_5flowp_5fmat2x2',['packed_lowp_mat2x2',['../a00303.html#gac70667c7642ec8d50245e6e6936a3927',1,'glm']]],\n  ['packed_5flowp_5fmat2x3',['packed_lowp_mat2x3',['../a00303.html#ga3e7df5a11e1be27bc29a4c0d3956f234',1,'glm']]],\n  ['packed_5flowp_5fmat2x4',['packed_lowp_mat2x4',['../a00303.html#gaea9c555e669dc56c45d95dcc75d59bf3',1,'glm']]],\n  ['packed_5flowp_5fmat3',['packed_lowp_mat3',['../a00303.html#ga0d22400969dd223465b2900fecfb4f53',1,'glm']]],\n  ['packed_5flowp_5fmat3x2',['packed_lowp_mat3x2',['../a00303.html#ga128cd52649621861635fab746df91735',1,'glm']]],\n  ['packed_5flowp_5fmat3x3',['packed_lowp_mat3x3',['../a00303.html#ga5adf1802c5375a9dfb1729691bedd94e',1,'glm']]],\n  ['packed_5flowp_5fmat3x4',['packed_lowp_mat3x4',['../a00303.html#ga92247ca09fa03c4013ba364f3a0fca7f',1,'glm']]],\n  ['packed_5flowp_5fmat4',['packed_lowp_mat4',['../a00303.html#ga2a1dd2387725a335413d4c4fee8609c4',1,'glm']]],\n  ['packed_5flowp_5fmat4x2',['packed_lowp_mat4x2',['../a00303.html#ga8f22607dcd090cd280071ccc689f4079',1,'glm']]],\n  ['packed_5flowp_5fmat4x3',['packed_lowp_mat4x3',['../a00303.html#ga7661d759d6ad218e132e3d051e7b2c6c',1,'glm']]],\n  ['packed_5flowp_5fmat4x4',['packed_lowp_mat4x4',['../a00303.html#ga776f18d1a6e7d399f05d386167dc60f5',1,'glm']]],\n  ['packed_5flowp_5fuvec1',['packed_lowp_uvec1',['../a00303.html#gaf111fed760ecce16cb1988807569bee5',1,'glm']]],\n  ['packed_5flowp_5fuvec2',['packed_lowp_uvec2',['../a00303.html#ga958210fe245a75b058325d367c951132',1,'glm']]],\n  ['packed_5flowp_5fuvec3',['packed_lowp_uvec3',['../a00303.html#ga576a3f8372197a56a79dee1c8280f485',1,'glm']]],\n  ['packed_5flowp_5fuvec4',['packed_lowp_uvec4',['../a00303.html#gafdd97922b4a2a42cd0c99a13877ff4da',1,'glm']]],\n  ['packed_5flowp_5fvec1',['packed_lowp_vec1',['../a00303.html#ga0a6198fe64166a6a61084d43c71518a9',1,'glm']]],\n  ['packed_5flowp_5fvec2',['packed_lowp_vec2',['../a00303.html#gafbf1c2cce307c5594b165819ed83bf5d',1,'glm']]],\n  ['packed_5flowp_5fvec3',['packed_lowp_vec3',['../a00303.html#ga3a30c137c1f8cce478c28eab0427a570',1,'glm']]],\n  ['packed_5flowp_5fvec4',['packed_lowp_vec4',['../a00303.html#ga3cc94fb8de80bbd8a4aa7a5b206d304a',1,'glm']]],\n  ['packed_5fmat2',['packed_mat2',['../a00303.html#gadd019b43fcf42e1590d45dddaa504a1a',1,'glm']]],\n  ['packed_5fmat2x2',['packed_mat2x2',['../a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517',1,'glm']]],\n  ['packed_5fmat2x3',['packed_mat2x3',['../a00303.html#ga301b76a89b8a9625501ca58815017f20',1,'glm']]],\n  ['packed_5fmat2x4',['packed_mat2x4',['../a00303.html#gac401da1dd9177ad81d7618a2a5541e23',1,'glm']]],\n  ['packed_5fmat3',['packed_mat3',['../a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a',1,'glm']]],\n  ['packed_5fmat3x2',['packed_mat3x2',['../a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa',1,'glm']]],\n  ['packed_5fmat3x3',['packed_mat3x3',['../a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99',1,'glm']]],\n  ['packed_5fmat3x4',['packed_mat3x4',['../a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8',1,'glm']]],\n  ['packed_5fmat4',['packed_mat4',['../a00303.html#ga2c139854e5b04cf08a957dee3b510441',1,'glm']]],\n  ['packed_5fmat4x2',['packed_mat4x2',['../a00303.html#ga379c1153f1339bdeaefd592bebf538e8',1,'glm']]],\n  ['packed_5fmat4x3',['packed_mat4x3',['../a00303.html#gab286466e19f7399c8d25089da9400d43',1,'glm']]],\n  ['packed_5fmat4x4',['packed_mat4x4',['../a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374',1,'glm']]],\n  ['packed_5fmediump_5fbvec1',['packed_mediump_bvec1',['../a00303.html#ga5546d828d63010a8f9cf81161ad0275a',1,'glm']]],\n  ['packed_5fmediump_5fbvec2',['packed_mediump_bvec2',['../a00303.html#gab4c6414a59539e66a242ad4cf4b476b4',1,'glm']]],\n  ['packed_5fmediump_5fbvec3',['packed_mediump_bvec3',['../a00303.html#ga70147763edff3fe96b03a0b98d6339a2',1,'glm']]],\n  ['packed_5fmediump_5fbvec4',['packed_mediump_bvec4',['../a00303.html#ga7b1620f259595b9da47a6374fc44588a',1,'glm']]],\n  ['packed_5fmediump_5fdmat2',['packed_mediump_dmat2',['../a00303.html#ga9d60e32d3fcb51f817046cd881fdbf57',1,'glm']]],\n  ['packed_5fmediump_5fdmat2x2',['packed_mediump_dmat2x2',['../a00303.html#ga39e8bb9b70e5694964e8266a21ba534e',1,'glm']]],\n  ['packed_5fmediump_5fdmat2x3',['packed_mediump_dmat2x3',['../a00303.html#ga8897c6d9adb4140b1c3b0a07b8f0a430',1,'glm']]],\n  ['packed_5fmediump_5fdmat2x4',['packed_mediump_dmat2x4',['../a00303.html#gaaa4126969c765e7faa2ebf6951c22ffb',1,'glm']]],\n  ['packed_5fmediump_5fdmat3',['packed_mediump_dmat3',['../a00303.html#gaf969eb879c76a5f4576e4a1e10095cf6',1,'glm']]],\n  ['packed_5fmediump_5fdmat3x2',['packed_mediump_dmat3x2',['../a00303.html#ga86efe91cdaa2864c828a5d6d46356c6a',1,'glm']]],\n  ['packed_5fmediump_5fdmat3x3',['packed_mediump_dmat3x3',['../a00303.html#gaf85877d38d8cfbc21d59d939afd72375',1,'glm']]],\n  ['packed_5fmediump_5fdmat3x4',['packed_mediump_dmat3x4',['../a00303.html#gad5dcaf93df267bc3029174e430e0907f',1,'glm']]],\n  ['packed_5fmediump_5fdmat4',['packed_mediump_dmat4',['../a00303.html#ga4b0ee7996651ddd04eaa0c4cdbb66332',1,'glm']]],\n  ['packed_5fmediump_5fdmat4x2',['packed_mediump_dmat4x2',['../a00303.html#ga9a15514a0631f700de6312b9d5db3a73',1,'glm']]],\n  ['packed_5fmediump_5fdmat4x3',['packed_mediump_dmat4x3',['../a00303.html#gab5b36cc9caee1bb1c5178fe191bf5713',1,'glm']]],\n  ['packed_5fmediump_5fdmat4x4',['packed_mediump_dmat4x4',['../a00303.html#ga21e86cf2f6c126bacf31b8985db06bd4',1,'glm']]],\n  ['packed_5fmediump_5fdvec1',['packed_mediump_dvec1',['../a00303.html#ga8920e90ea9c01d9c97e604a938ce2cbd',1,'glm']]],\n  ['packed_5fmediump_5fdvec2',['packed_mediump_dvec2',['../a00303.html#ga0c754a783b6fcf80374c013371c4dae9',1,'glm']]],\n  ['packed_5fmediump_5fdvec3',['packed_mediump_dvec3',['../a00303.html#ga1f18ada6f7cdd8c46db33ba987280fc4',1,'glm']]],\n  ['packed_5fmediump_5fdvec4',['packed_mediump_dvec4',['../a00303.html#ga568b850f1116b667043533cf77826968',1,'glm']]],\n  ['packed_5fmediump_5fivec1',['packed_mediump_ivec1',['../a00303.html#ga09507ef020a49517a7bcd50438f05056',1,'glm']]],\n  ['packed_5fmediump_5fivec2',['packed_mediump_ivec2',['../a00303.html#gaaa891048dddef4627df33809ec726219',1,'glm']]],\n  ['packed_5fmediump_5fivec3',['packed_mediump_ivec3',['../a00303.html#ga06f26d54dca30994eb1fdadb8e69f4a2',1,'glm']]],\n  ['packed_5fmediump_5fivec4',['packed_mediump_ivec4',['../a00303.html#ga70130dc8ed9c966ec2a221ce586d45d8',1,'glm']]],\n  ['packed_5fmediump_5fmat2',['packed_mediump_mat2',['../a00303.html#ga43cd36d430c5187bfdca34a23cb41581',1,'glm']]],\n  ['packed_5fmediump_5fmat2x2',['packed_mediump_mat2x2',['../a00303.html#ga2d2a73e662759e301c22b8931ff6a526',1,'glm']]],\n  ['packed_5fmediump_5fmat2x3',['packed_mediump_mat2x3',['../a00303.html#ga99049db01faf1e95ed9fb875a47dffe2',1,'glm']]],\n  ['packed_5fmediump_5fmat2x4',['packed_mediump_mat2x4',['../a00303.html#gad43a240533f388ce0504b495d9df3d52',1,'glm']]],\n  ['packed_5fmediump_5fmat3',['packed_mediump_mat3',['../a00303.html#ga13a75c6cbd0a411f694bc82486cd1e55',1,'glm']]],\n  ['packed_5fmediump_5fmat3x2',['packed_mediump_mat3x2',['../a00303.html#ga04cfaf1421284df3c24ea0985dab24e7',1,'glm']]],\n  ['packed_5fmediump_5fmat3x3',['packed_mediump_mat3x3',['../a00303.html#gaaa9cea174d342dd9650e3436823cab23',1,'glm']]],\n  ['packed_5fmediump_5fmat3x4',['packed_mediump_mat3x4',['../a00303.html#gabc93a9560593bd32e099c908531305f5',1,'glm']]],\n  ['packed_5fmediump_5fmat4',['packed_mediump_mat4',['../a00303.html#gae89d72ffc149147f61df701bbc8755bf',1,'glm']]],\n  ['packed_5fmediump_5fmat4x2',['packed_mediump_mat4x2',['../a00303.html#gaa458f9d9e0934bae3097e2a373b24707',1,'glm']]],\n  ['packed_5fmediump_5fmat4x3',['packed_mediump_mat4x3',['../a00303.html#ga02ca6255394aa778abaeb0f733c4d2b6',1,'glm']]],\n  ['packed_5fmediump_5fmat4x4',['packed_mediump_mat4x4',['../a00303.html#gaf304f64c06743c1571401504d3f50259',1,'glm']]],\n  ['packed_5fmediump_5fuvec1',['packed_mediump_uvec1',['../a00303.html#ga2c29fb42bab9a4f9b66bc60b2e514a34',1,'glm']]],\n  ['packed_5fmediump_5fuvec2',['packed_mediump_uvec2',['../a00303.html#gaa1f95690a78dc12e39da32943243aeef',1,'glm']]],\n  ['packed_5fmediump_5fuvec3',['packed_mediump_uvec3',['../a00303.html#ga1ea2bbdbcb0a69242f6d884663c1b0ab',1,'glm']]],\n  ['packed_5fmediump_5fuvec4',['packed_mediump_uvec4',['../a00303.html#ga63a73be86a4f07ea7a7499ab0bfebe45',1,'glm']]],\n  ['packed_5fmediump_5fvec1',['packed_mediump_vec1',['../a00303.html#ga71d63cead1e113fca0bcdaaa33aad050',1,'glm']]],\n  ['packed_5fmediump_5fvec2',['packed_mediump_vec2',['../a00303.html#ga6844c6f4691d1bf67673240850430948',1,'glm']]],\n  ['packed_5fmediump_5fvec3',['packed_mediump_vec3',['../a00303.html#gab0eb771b708c5b2205d9b14dd1434fd8',1,'glm']]],\n  ['packed_5fmediump_5fvec4',['packed_mediump_vec4',['../a00303.html#ga68c9bb24f387b312bae6a0a68e74d95e',1,'glm']]],\n  ['packed_5fuvec1',['packed_uvec1',['../a00303.html#ga5621493caac01bdd22ab6be4416b0314',1,'glm']]],\n  ['packed_5fuvec2',['packed_uvec2',['../a00303.html#gabcc33efb4d5e83b8fe4706360e75b932',1,'glm']]],\n  ['packed_5fuvec3',['packed_uvec3',['../a00303.html#gab96804e99e3a72a35740fec690c79617',1,'glm']]],\n  ['packed_5fuvec4',['packed_uvec4',['../a00303.html#ga8e5d92e84ebdbe2480cf96bc17d6e2f2',1,'glm']]],\n  ['packed_5fvec1',['packed_vec1',['../a00303.html#ga14741e3d9da9ae83765389927f837331',1,'glm']]],\n  ['packed_5fvec2',['packed_vec2',['../a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66',1,'glm']]],\n  ['packed_5fvec3',['packed_vec3',['../a00303.html#gaccccd090e185450caa28b5b63ad4e8f0',1,'glm']]],\n  ['packed_5fvec4',['packed_vec4',['../a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d',1,'glm']]],\n  ['packf2x11_5f1x10',['packF2x11_1x10',['../a00298.html#ga4944ad465ff950e926d49621f916c78d',1,'glm']]],\n  ['packf3x9_5fe1x5',['packF3x9_E1x5',['../a00298.html#ga3f648fc205467792dc6d8c59c748f8a6',1,'glm']]],\n  ['packhalf',['packHalf',['../a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251',1,'glm']]],\n  ['packhalf1x16',['packHalf1x16',['../a00298.html#ga43f2093b6ff192a79058ff7834fc3528',1,'glm']]],\n  ['packhalf2x16',['packHalf2x16',['../a00372.html#ga20f134b07db3a3d3a38efb2617388c92',1,'glm']]],\n  ['packhalf4x16',['packHalf4x16',['../a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6',1,'glm']]],\n  ['packi3x10_5f1x2',['packI3x10_1x2',['../a00298.html#ga06ecb6afb902dba45419008171db9023',1,'glm']]],\n  ['packing_2ehpp',['packing.hpp',['../a00120.html',1,'']]],\n  ['packint2x16',['packInt2x16',['../a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e',1,'glm']]],\n  ['packint2x32',['packInt2x32',['../a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a',1,'glm']]],\n  ['packint2x8',['packInt2x8',['../a00298.html#ga8884b1f2292414f36d59ef3be5d62914',1,'glm']]],\n  ['packint4x16',['packInt4x16',['../a00298.html#ga1989f093a27ae69cf9207145be48b3d7',1,'glm']]],\n  ['packint4x8',['packInt4x8',['../a00298.html#gaf2238401d5ce2aaade1a44ba19709072',1,'glm']]],\n  ['packrgbm',['packRGBM',['../a00298.html#ga0466daf4c90f76cc64b3f105ce727295',1,'glm']]],\n  ['packsnorm',['packSnorm',['../a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8',1,'glm']]],\n  ['packsnorm1x16',['packSnorm1x16',['../a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af',1,'glm']]],\n  ['packsnorm1x8',['packSnorm1x8',['../a00298.html#gae3592e0795e62aaa1865b3a10496a7a1',1,'glm']]],\n  ['packsnorm2x16',['packSnorm2x16',['../a00372.html#ga977ab172da5494e5ac63e952afacfbe2',1,'glm']]],\n  ['packsnorm2x8',['packSnorm2x8',['../a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e',1,'glm']]],\n  ['packsnorm3x10_5f1x2',['packSnorm3x10_1x2',['../a00298.html#gab997545661877d2c7362a5084d3897d3',1,'glm']]],\n  ['packsnorm4x16',['packSnorm4x16',['../a00298.html#ga358943934d21da947d5bcc88c2ab7832',1,'glm']]],\n  ['packsnorm4x8',['packSnorm4x8',['../a00372.html#ga85e8f17627516445026ab7a9c2e3531a',1,'glm']]],\n  ['packu3x10_5f1x2',['packU3x10_1x2',['../a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0',1,'glm']]],\n  ['packuint2x16',['packUint2x16',['../a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19',1,'glm']]],\n  ['packuint2x32',['packUint2x32',['../a00298.html#gaa864081097b86e83d8e4a4d79c382b22',1,'glm']]],\n  ['packuint2x8',['packUint2x8',['../a00298.html#ga3c3c9fb53ae7823b10fa083909357590',1,'glm']]],\n  ['packuint4x16',['packUint4x16',['../a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9',1,'glm']]],\n  ['packuint4x8',['packUint4x8',['../a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab',1,'glm']]],\n  ['packunorm',['packUnorm',['../a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a',1,'glm']]],\n  ['packunorm1x16',['packUnorm1x16',['../a00298.html#ga9f82737bf2a44bedff1d286b76837886',1,'glm']]],\n  ['packunorm1x5_5f1x6_5f1x5',['packUnorm1x5_1x6_1x5',['../a00298.html#ga768e0337dd6246773f14aa0a421fe9a8',1,'glm']]],\n  ['packunorm1x8',['packUnorm1x8',['../a00298.html#ga4b2fa60df3460403817d28b082ee0736',1,'glm']]],\n  ['packunorm2x16',['packUnorm2x16',['../a00372.html#ga0e2d107039fe608a209497af867b85fb',1,'glm']]],\n  ['packunorm2x3_5f1x2',['packUnorm2x3_1x2',['../a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d',1,'glm']]],\n  ['packunorm2x4',['packUnorm2x4',['../a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c',1,'glm']]],\n  ['packunorm2x8',['packUnorm2x8',['../a00298.html#ga9a666b1c688ab54100061ed06526de6e',1,'glm']]],\n  ['packunorm3x10_5f1x2',['packUnorm3x10_1x2',['../a00298.html#ga8a1ee625d2707c60530fb3fca2980b19',1,'glm']]],\n  ['packunorm3x5_5f1x1',['packUnorm3x5_1x1',['../a00298.html#gaec4112086d7fb133bea104a7c237de52',1,'glm']]],\n  ['packunorm4x16',['packUnorm4x16',['../a00298.html#ga1f63c264e7ab63264e2b2a99fd393897',1,'glm']]],\n  ['packunorm4x4',['packUnorm4x4',['../a00298.html#gad3e7e3ce521513584a53aedc5f9765c1',1,'glm']]],\n  ['packunorm4x8',['packUnorm4x8',['../a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2',1,'glm']]],\n  ['perlin',['perlin',['../a00297.html#ga1e043ce3b51510e9bc4469227cefc38a',1,'glm::perlin(vec&lt; L, T, Q &gt; const &amp;p)'],['../a00297.html#gac270edc54c5fc52f5985a45f940bb103',1,'glm::perlin(vec&lt; L, T, Q &gt; const &amp;p, vec&lt; L, T, Q &gt; const &amp;rep)']]],\n  ['perp',['perp',['../a00349.html#ga264cfc4e180cf9b852e943b35089003c',1,'glm']]],\n  ['perpendicular_2ehpp',['perpendicular.hpp',['../a00121.html',1,'']]],\n  ['perspective',['perspective',['../a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787',1,'glm']]],\n  ['perspectivefov',['perspectiveFov',['../a00243.html#gaebd02240fd36e85ad754f02ddd9a560d',1,'glm']]],\n  ['perspectivefovlh',['perspectiveFovLH',['../a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa',1,'glm']]],\n  ['perspectivefovlh_5fno',['perspectiveFovLH_NO',['../a00243.html#gad18a4495b77530317327e8d466488c1a',1,'glm']]],\n  ['perspectivefovlh_5fzo',['perspectiveFovLH_ZO',['../a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c',1,'glm']]],\n  ['perspectivefovno',['perspectiveFovNO',['../a00243.html#gaf30e7bd3b1387a6776433dd5383e6633',1,'glm']]],\n  ['perspectivefovrh',['perspectiveFovRH',['../a00243.html#gaf32bf563f28379c68554a44ee60c6a85',1,'glm']]],\n  ['perspectivefovrh_5fno',['perspectiveFovRH_NO',['../a00243.html#ga257b733ff883c9a065801023cf243eb2',1,'glm']]],\n  ['perspectivefovrh_5fzo',['perspectiveFovRH_ZO',['../a00243.html#ga7dcbb25331676f5b0795aced1a905c44',1,'glm']]],\n  ['perspectivefovzo',['perspectiveFovZO',['../a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b',1,'glm']]],\n  ['perspectivelh',['perspectiveLH',['../a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f',1,'glm']]],\n  ['perspectivelh_5fno',['perspectiveLH_NO',['../a00243.html#gaead4d049d1feab463b700b5641aa590e',1,'glm']]],\n  ['perspectivelh_5fzo',['perspectiveLH_ZO',['../a00243.html#gaca32af88c2719005c02817ad1142986c',1,'glm']]],\n  ['perspectiveno',['perspectiveNO',['../a00243.html#gaf497e6bca61e7c87088370b126a93758',1,'glm']]],\n  ['perspectiverh',['perspectiveRH',['../a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1',1,'glm']]],\n  ['perspectiverh_5fno',['perspectiveRH_NO',['../a00243.html#gad1526cb2cbe796095284e8f34b01c582',1,'glm']]],\n  ['perspectiverh_5fzo',['perspectiveRH_ZO',['../a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a',1,'glm']]],\n  ['perspectivezo',['perspectiveZO',['../a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47',1,'glm']]],\n  ['pi',['pi',['../a00259.html#ga94bafeb2a0f23ab6450fed1f98ee4e45',1,'glm']]],\n  ['pickmatrix',['pickMatrix',['../a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82',1,'glm']]],\n  ['pitch',['pitch',['../a00299.html#ga7603e81477b46ddb448896909bc04928',1,'glm']]],\n  ['polar',['polar',['../a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d',1,'glm']]],\n  ['polar_5fcoordinates_2ehpp',['polar_coordinates.hpp',['../a00122.html',1,'']]],\n  ['pow',['pow',['../a00242.html#ga2254981952d4f333b900a6bf5167a6c4',1,'glm::pow(vec&lt; L, T, Q &gt; const &amp;base, vec&lt; L, T, Q &gt; const &amp;exponent)'],['../a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e',1,'glm::pow(qua&lt; T, Q &gt; const &amp;q, T y)'],['../a00330.html#ga465016030a81d513fa2fac881ebdaa83',1,'glm::pow(int x, uint y)'],['../a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0',1,'glm::pow(uint x, uint y)']]],\n  ['pow2',['pow2',['../a00347.html#ga19aaff3213bf23bdec3ef124ace237e9',1,'glm::gtx']]],\n  ['pow3',['pow3',['../a00347.html#ga35689d03cd434d6ea819f1942d3bf82e',1,'glm::gtx']]],\n  ['pow4',['pow4',['../a00347.html#gacef0968763026e180e53e735007dbf5a',1,'glm::gtx']]],\n  ['poweroftwoabove',['powerOfTwoAbove',['../a00309.html#ga8cda2459871f574a0aecbe702ac93291',1,'glm::powerOfTwoAbove(genIUType Value)'],['../a00309.html#ga2bbded187c5febfefc1e524ba31b3fab',1,'glm::powerOfTwoAbove(vec&lt; L, T, Q &gt; const &amp;value)']]],\n  ['poweroftwobelow',['powerOfTwoBelow',['../a00309.html#ga3de7df63c589325101a2817a56f8e29d',1,'glm::powerOfTwoBelow(genIUType Value)'],['../a00309.html#gaf78ddcc4152c051b2a21e68fecb10980',1,'glm::powerOfTwoBelow(vec&lt; L, T, Q &gt; const &amp;value)']]],\n  ['poweroftwonearest',['powerOfTwoNearest',['../a00309.html#ga5f65973a5d2ea38c719e6a663149ead9',1,'glm::powerOfTwoNearest(genIUType Value)'],['../a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b',1,'glm::powerOfTwoNearest(vec&lt; L, T, Q &gt; const &amp;value)']]],\n  ['prevmultiple',['prevMultiple',['../a00261.html#gada3bdd871ffe31f2d484aa668362f636',1,'glm::prevMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#ga7b3915a7cd3d50ff4976ab7a75a6880a',1,'glm::prevMultiple(vec&lt; L, T, Q &gt; const &amp;v, T Multiple)'],['../a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9',1,'glm::prevMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['prevpoweroftwo',['prevPowerOfTwo',['../a00261.html#gab21902a0e7e5a8451a7ad80333618727',1,'glm::prevPowerOfTwo(genIUType v)'],['../a00274.html#ga759db73f14d79f63612bd2398b577e7a',1,'glm::prevPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['proj',['proj',['../a00351.html#ga58384b7170801dd513de46f87c7fb00e',1,'glm']]],\n  ['proj2d',['proj2D',['../a00363.html#ga5b992a0cdc8298054edb68e228f0d93e',1,'glm']]],\n  ['proj3d',['proj3D',['../a00363.html#gaa2b7f4f15b98f697caede11bef50509e',1,'glm']]],\n  ['project',['project',['../a00245.html#gaf36e96033f456659e6705472a06b6e11',1,'glm']]],\n  ['projection_2ehpp',['projection.hpp',['../a00123.html',1,'']]],\n  ['projectno',['projectNO',['../a00245.html#ga05249751f48d14cb282e4979802b8111',1,'glm']]],\n  ['projectzo',['projectZO',['../a00245.html#ga77d157525063dec83a557186873ee080',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_e.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_e.js",
    "content": "var searchData=\n[\n  ['qr_5fdecompose',['qr_decompose',['../a00336.html#gac62d7bfc8dc661e616620d70552cd566',1,'glm']]],\n  ['quadraticeasein',['quadraticEaseIn',['../a00318.html#gaf42089d35855695132d217cd902304a0',1,'glm']]],\n  ['quadraticeaseinout',['quadraticEaseInOut',['../a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea',1,'glm']]],\n  ['quadraticeaseout',['quadraticEaseOut',['../a00318.html#ga283717bc2d937547ad34ec0472234ee3',1,'glm']]],\n  ['quarter_5fpi',['quarter_pi',['../a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0',1,'glm']]],\n  ['quarticeasein',['quarticEaseIn',['../a00318.html#ga808b41f14514f47dad5dcc69eb924afd',1,'glm']]],\n  ['quarticeaseinout',['quarticEaseInOut',['../a00318.html#ga6d000f852de12b197e154f234b20c505',1,'glm']]],\n  ['quarticeaseout',['quarticEaseOut',['../a00318.html#ga4dfb33fa7664aa888eb647999d329b98',1,'glm']]],\n  ['quat',['quat',['../a00252.html#gab0b441adb4509bc58d2946c2239a8942',1,'glm']]],\n  ['quat_5fcast',['quat_cast',['../a00299.html#ga1108a4ab88ca87bac321454eea7702f8',1,'glm::quat_cast(mat&lt; 3, 3, T, Q &gt; const &amp;x)'],['../a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58',1,'glm::quat_cast(mat&lt; 4, 4, T, Q &gt; const &amp;x)']]],\n  ['quat_5fidentity',['quat_identity',['../a00352.html#ga5ee8332600b2aca3a77622a28d857b55',1,'glm']]],\n  ['quaternion_5fcommon_2ehpp',['quaternion_common.hpp',['../a00127.html',1,'']]],\n  ['quaternion_5fdouble_2ehpp',['quaternion_double.hpp',['../a00128.html',1,'']]],\n  ['quaternion_5fdouble_5fprecision_2ehpp',['quaternion_double_precision.hpp',['../a00129.html',1,'']]],\n  ['quaternion_5fexponential_2ehpp',['quaternion_exponential.hpp',['../a00130.html',1,'']]],\n  ['quaternion_5ffloat_2ehpp',['quaternion_float.hpp',['../a00131.html',1,'']]],\n  ['quaternion_5ffloat_5fprecision_2ehpp',['quaternion_float_precision.hpp',['../a00132.html',1,'']]],\n  ['quaternion_5fgeometric_2ehpp',['quaternion_geometric.hpp',['../a00133.html',1,'']]],\n  ['quaternion_5frelational_2ehpp',['quaternion_relational.hpp',['../a00134.html',1,'']]],\n  ['quaternion_5ftransform_2ehpp',['quaternion_transform.hpp',['../a00135.html',1,'']]],\n  ['quaternion_5ftrigonometric_2ehpp',['quaternion_trigonometric.hpp',['../a00136.html',1,'']]],\n  ['quatlookat',['quatLookAt',['../a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f',1,'glm']]],\n  ['quatlookatlh',['quatLookAtLH',['../a00299.html#ga2da350c73411be3bb19441b226b81a74',1,'glm']]],\n  ['quatlookatrh',['quatLookAtRH',['../a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8',1,'glm']]],\n  ['quinticeasein',['quinticEaseIn',['../a00318.html#ga097579d8e087dcf48037588140a21640',1,'glm']]],\n  ['quinticeaseinout',['quinticEaseInOut',['../a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934',1,'glm']]],\n  ['quinticeaseout',['quinticEaseOut',['../a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7',1,'glm']]],\n  ['qword',['qword',['../a00354.html#ga4021754ffb8e5ef14c75802b15657714',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"all_f.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/all_f.js",
    "content": "var searchData=\n[\n  ['recommended_20extensions',['Recommended extensions',['../a00286.html',1,'']]],\n  ['radialgradient',['radialGradient',['../a00327.html#gaaecb1e93de4cbe0758b882812d4da294',1,'glm']]],\n  ['radians',['radians',['../a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68',1,'glm']]],\n  ['random_2ehpp',['random.hpp',['../a00137.html',1,'']]],\n  ['range_2ehpp',['range.hpp',['../a00138.html',1,'']]],\n  ['raw_5fdata_2ehpp',['raw_data.hpp',['../a00139.html',1,'']]],\n  ['reciprocal_2ehpp',['reciprocal.hpp',['../a00140.html',1,'']]],\n  ['reflect',['reflect',['../a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905',1,'glm']]],\n  ['refract',['refract',['../a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74',1,'glm']]],\n  ['repeat',['repeat',['../a00369.html#ga809650c6310ea7c42666e918c117fb6f',1,'glm']]],\n  ['rgb2ycocg',['rgb2YCoCg',['../a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5',1,'glm']]],\n  ['rgb2ycocgr',['rgb2YCoCgR',['../a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898',1,'glm']]],\n  ['rgbcolor',['rgbColor',['../a00312.html#ga5f9193be46f45f0655c05a0cdca006db',1,'glm']]],\n  ['righthanded',['rightHanded',['../a00328.html#ga99386a5ab5491871b947076e21699cc8',1,'glm']]],\n  ['roll',['roll',['../a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13',1,'glm']]],\n  ['root_5ffive',['root_five',['../a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2',1,'glm']]],\n  ['root_5fhalf_5fpi',['root_half_pi',['../a00290.html#ga4e276cb823cc5e612d4f89ed99c75039',1,'glm']]],\n  ['root_5fln_5ffour',['root_ln_four',['../a00290.html#ga4129412e96b33707a77c1a07652e23e2',1,'glm']]],\n  ['root_5fpi',['root_pi',['../a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9',1,'glm']]],\n  ['root_5fthree',['root_three',['../a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e',1,'glm']]],\n  ['root_5ftwo',['root_two',['../a00290.html#ga74e607d29020f100c0d0dc46ce2ca950',1,'glm']]],\n  ['root_5ftwo_5fpi',['root_two_pi',['../a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3',1,'glm']]],\n  ['rotate',['rotate',['../a00247.html#gaee9e865eaa9776370996da2940873fd4',1,'glm::rotate(mat&lt; 4, 4, T, Q &gt; const &amp;m, T angle, vec&lt; 3, T, Q &gt; const &amp;axis)'],['../a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5',1,'glm::rotate(qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)'],['../a00341.html#gad5c84a4932a758f385a87098ce1b1660',1,'glm::rotate(mat&lt; 3, 3, T, Q &gt; const &amp;m, T angle)'],['../a00352.html#ga07da6ef58646442efe93b0c273d73776',1,'glm::rotate(qua&lt; T, Q &gt; const &amp;q, vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196',1,'glm::rotate(qua&lt; T, Q &gt; const &amp;q, vec&lt; 4, T, Q &gt; const &amp;v)'],['../a00356.html#gab64a67b52ff4f86c3ba16595a5a25af6',1,'glm::rotate(vec&lt; 2, T, Q &gt; const &amp;v, T const &amp;angle)'],['../a00356.html#ga1ba501ef83d1a009a17ac774cc560f21',1,'glm::rotate(vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)'],['../a00356.html#ga1005f1267ed9c57faa3f24cf6873b961',1,'glm::rotate(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)'],['../a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b',1,'glm::rotate(T angle, vec&lt; 3, T, Q &gt; const &amp;v)']]],\n  ['rotate_5fnormalized_5faxis_2ehpp',['rotate_normalized_axis.hpp',['../a00141.html',1,'']]],\n  ['rotate_5fvector_2ehpp',['rotate_vector.hpp',['../a00142.html',1,'']]],\n  ['rotatenormalizedaxis',['rotateNormalizedAxis',['../a00355.html#ga50efd7ebca0f7a603bb3cc11e34c708d',1,'glm::rotateNormalizedAxis(mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)'],['../a00355.html#ga08f9c5411437d528019a25bfc01473d1',1,'glm::rotateNormalizedAxis(qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)']]],\n  ['rotatex',['rotateX',['../a00356.html#ga059fdbdba4cca35cdff172a9d0d0afc9',1,'glm::rotateX(vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)'],['../a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a',1,'glm::rotateX(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)']]],\n  ['rotatey',['rotateY',['../a00356.html#gaebdc8b054ace27d9f62e054531c6f44d',1,'glm::rotateY(vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)'],['../a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b',1,'glm::rotateY(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)']]],\n  ['rotatez',['rotateZ',['../a00356.html#ga5a048838a03f6249acbacb4dbacf79c4',1,'glm::rotateZ(vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)'],['../a00356.html#ga923b75c6448161053768822d880702e6',1,'glm::rotateZ(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)']]],\n  ['rotation',['rotation',['../a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5',1,'glm']]],\n  ['round',['round',['../a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e',1,'glm']]],\n  ['round_2ehpp',['round.hpp',['../a00143.html',1,'']]],\n  ['roundeven',['roundEven',['../a00241.html#ga76b81785045a057989a84d99aeeb1578',1,'glm']]],\n  ['roundmultiple',['roundMultiple',['../a00302.html#gab892defcc9c0b0618df7251253dc0fbb',1,'glm::roundMultiple(genType v, genType Multiple)'],['../a00302.html#ga2f1a68332d761804c054460a612e3a4b',1,'glm::roundMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['roundpoweroftwo',['roundPowerOfTwo',['../a00302.html#gae4e1bf5d1cd179f59261a7342bdcafca',1,'glm::roundPowerOfTwo(genIUType v)'],['../a00302.html#ga258802a7d55c03c918f28cf4d241c4d0',1,'glm::roundPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['row',['row',['../a00293.html#ga259e5ebd0f31ec3f83440f8cae7f5dba',1,'glm::row(genType const &amp;m, length_t index)'],['../a00293.html#gaadcc64829aadf4103477679e48c7594f',1,'glm::row(genType const &amp;m, length_t index, typename genType::row_type const &amp;x)']]],\n  ['rowmajor2',['rowMajor2',['../a00338.html#gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8',1,'glm::rowMajor2(vec&lt; 2, T, Q &gt; const &amp;v1, vec&lt; 2, T, Q &gt; const &amp;v2)'],['../a00338.html#gaf66c75ed69ca9e87462550708c2c6726',1,'glm::rowMajor2(mat&lt; 2, 2, T, Q &gt; const &amp;m)']]],\n  ['rowmajor3',['rowMajor3',['../a00338.html#ga2ae46497493339f745754e40f438442e',1,'glm::rowMajor3(vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)'],['../a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77',1,'glm::rowMajor3(mat&lt; 3, 3, T, Q &gt; const &amp;m)']]],\n  ['rowmajor4',['rowMajor4',['../a00338.html#ga9636cd6bbe2c32a8d0c03ffb8b1ef284',1,'glm::rowMajor4(vec&lt; 4, T, Q &gt; const &amp;v1, vec&lt; 4, T, Q &gt; const &amp;v2, vec&lt; 4, T, Q &gt; const &amp;v3, vec&lt; 4, T, Q &gt; const &amp;v4)'],['../a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b',1,'glm::rowMajor4(mat&lt; 4, 4, T, Q &gt; const &amp;m)']]],\n  ['rq_5fdecompose',['rq_decompose',['../a00336.html#ga82874e2ebe891ba35ac21d9993873758',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_0.js",
    "content": "var searchData=\n[\n  ['associated_5fmin_5fmax_2ehpp',['associated_min_max.hpp',['../a00007.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_1.js",
    "content": "var searchData=\n[\n  ['bit_2ehpp',['bit.hpp',['../a00008.html',1,'']]],\n  ['bitfield_2ehpp',['bitfield.hpp',['../a00009.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_10.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_10.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_10.js",
    "content": "var searchData=\n[\n  ['scalar_5fcommon_2ehpp',['scalar_common.hpp',['../a00144.html',1,'']]],\n  ['scalar_5fconstants_2ehpp',['scalar_constants.hpp',['../a00145.html',1,'']]],\n  ['scalar_5fint_5fsized_2ehpp',['scalar_int_sized.hpp',['../a00146.html',1,'']]],\n  ['scalar_5finteger_2ehpp',['scalar_integer.hpp',['../a00147.html',1,'']]],\n  ['scalar_5fmultiplication_2ehpp',['scalar_multiplication.hpp',['../a00148.html',1,'']]],\n  ['scalar_5fuint_5fsized_2ehpp',['scalar_uint_sized.hpp',['../a00151.html',1,'']]],\n  ['scalar_5fulp_2ehpp',['scalar_ulp.hpp',['../a00152.html',1,'']]],\n  ['spline_2ehpp',['spline.hpp',['../a00154.html',1,'']]],\n  ['std_5fbased_5ftype_2ehpp',['std_based_type.hpp',['../a00155.html',1,'']]],\n  ['string_5fcast_2ehpp',['string_cast.hpp',['../a00156.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_11.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_11.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_11.js",
    "content": "var searchData=\n[\n  ['texture_2ehpp',['texture.hpp',['../a00157.html',1,'']]],\n  ['transform_2ehpp',['transform.hpp',['../a00158.html',1,'']]],\n  ['transform2_2ehpp',['transform2.hpp',['../a00159.html',1,'']]],\n  ['trigonometric_2ehpp',['trigonometric.hpp',['../a00160.html',1,'']]],\n  ['type_5fmat2x2_2ehpp',['type_mat2x2.hpp',['../a00165.html',1,'']]],\n  ['type_5fmat2x3_2ehpp',['type_mat2x3.hpp',['../a00166.html',1,'']]],\n  ['type_5fmat2x4_2ehpp',['type_mat2x4.hpp',['../a00167.html',1,'']]],\n  ['type_5fmat3x2_2ehpp',['type_mat3x2.hpp',['../a00168.html',1,'']]],\n  ['type_5fmat3x3_2ehpp',['type_mat3x3.hpp',['../a00169.html',1,'']]],\n  ['type_5fmat3x4_2ehpp',['type_mat3x4.hpp',['../a00170.html',1,'']]],\n  ['type_5fmat4x2_2ehpp',['type_mat4x2.hpp',['../a00171.html',1,'']]],\n  ['type_5fmat4x3_2ehpp',['type_mat4x3.hpp',['../a00172.html',1,'']]],\n  ['type_5fmat4x4_2ehpp',['type_mat4x4.hpp',['../a00173.html',1,'']]],\n  ['type_5fprecision_2ehpp',['type_precision.hpp',['../a00174.html',1,'']]],\n  ['type_5fptr_2ehpp',['type_ptr.hpp',['../a00175.html',1,'']]],\n  ['type_5fquat_2ehpp',['type_quat.hpp',['../a00176.html',1,'']]],\n  ['type_5ftrait_2ehpp',['type_trait.hpp',['../a00177.html',1,'']]],\n  ['type_5fvec1_2ehpp',['type_vec1.hpp',['../a00178.html',1,'']]],\n  ['type_5fvec2_2ehpp',['type_vec2.hpp',['../a00179.html',1,'']]],\n  ['type_5fvec3_2ehpp',['type_vec3.hpp',['../a00180.html',1,'']]],\n  ['type_5fvec4_2ehpp',['type_vec4.hpp',['../a00181.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_12.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_12.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_12.js",
    "content": "var searchData=\n[\n  ['ulp_2ehpp',['ulp.hpp',['../a00182.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_13.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_13.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_13.js",
    "content": "var searchData=\n[\n  ['vec1_2ehpp',['vec1.hpp',['../a00183.html',1,'']]],\n  ['vec2_2ehpp',['vec2.hpp',['../a00184.html',1,'']]],\n  ['vec3_2ehpp',['vec3.hpp',['../a00185.html',1,'']]],\n  ['vec4_2ehpp',['vec4.hpp',['../a00186.html',1,'']]],\n  ['vec_5fswizzle_2ehpp',['vec_swizzle.hpp',['../a00187.html',1,'']]],\n  ['vector_5fangle_2ehpp',['vector_angle.hpp',['../a00188.html',1,'']]],\n  ['vector_5fbool1_2ehpp',['vector_bool1.hpp',['../a00189.html',1,'']]],\n  ['vector_5fbool1_5fprecision_2ehpp',['vector_bool1_precision.hpp',['../a00190.html',1,'']]],\n  ['vector_5fbool2_2ehpp',['vector_bool2.hpp',['../a00191.html',1,'']]],\n  ['vector_5fbool2_5fprecision_2ehpp',['vector_bool2_precision.hpp',['../a00192.html',1,'']]],\n  ['vector_5fbool3_2ehpp',['vector_bool3.hpp',['../a00193.html',1,'']]],\n  ['vector_5fbool3_5fprecision_2ehpp',['vector_bool3_precision.hpp',['../a00194.html',1,'']]],\n  ['vector_5fbool4_2ehpp',['vector_bool4.hpp',['../a00195.html',1,'']]],\n  ['vector_5fbool4_5fprecision_2ehpp',['vector_bool4_precision.hpp',['../a00196.html',1,'']]],\n  ['vector_5fcommon_2ehpp',['vector_common.hpp',['../a00197.html',1,'']]],\n  ['vector_5fdouble1_2ehpp',['vector_double1.hpp',['../a00198.html',1,'']]],\n  ['vector_5fdouble1_5fprecision_2ehpp',['vector_double1_precision.hpp',['../a00199.html',1,'']]],\n  ['vector_5fdouble2_2ehpp',['vector_double2.hpp',['../a00200.html',1,'']]],\n  ['vector_5fdouble2_5fprecision_2ehpp',['vector_double2_precision.hpp',['../a00201.html',1,'']]],\n  ['vector_5fdouble3_2ehpp',['vector_double3.hpp',['../a00202.html',1,'']]],\n  ['vector_5fdouble3_5fprecision_2ehpp',['vector_double3_precision.hpp',['../a00203.html',1,'']]],\n  ['vector_5fdouble4_2ehpp',['vector_double4.hpp',['../a00204.html',1,'']]],\n  ['vector_5fdouble4_5fprecision_2ehpp',['vector_double4_precision.hpp',['../a00205.html',1,'']]],\n  ['vector_5ffloat1_2ehpp',['vector_float1.hpp',['../a00206.html',1,'']]],\n  ['vector_5ffloat1_5fprecision_2ehpp',['vector_float1_precision.hpp',['../a00207.html',1,'']]],\n  ['vector_5ffloat2_2ehpp',['vector_float2.hpp',['../a00208.html',1,'']]],\n  ['vector_5ffloat2_5fprecision_2ehpp',['vector_float2_precision.hpp',['../a00209.html',1,'']]],\n  ['vector_5ffloat3_2ehpp',['vector_float3.hpp',['../a00210.html',1,'']]],\n  ['vector_5ffloat3_5fprecision_2ehpp',['vector_float3_precision.hpp',['../a00211.html',1,'']]],\n  ['vector_5ffloat4_2ehpp',['vector_float4.hpp',['../a00212.html',1,'']]],\n  ['vector_5ffloat4_5fprecision_2ehpp',['vector_float4_precision.hpp',['../a00213.html',1,'']]],\n  ['vector_5fint1_2ehpp',['vector_int1.hpp',['../a00214.html',1,'']]],\n  ['vector_5fint1_5fprecision_2ehpp',['vector_int1_precision.hpp',['../a00215.html',1,'']]],\n  ['vector_5fint2_2ehpp',['vector_int2.hpp',['../a00216.html',1,'']]],\n  ['vector_5fint2_5fprecision_2ehpp',['vector_int2_precision.hpp',['../a00217.html',1,'']]],\n  ['vector_5fint3_2ehpp',['vector_int3.hpp',['../a00218.html',1,'']]],\n  ['vector_5fint3_5fprecision_2ehpp',['vector_int3_precision.hpp',['../a00219.html',1,'']]],\n  ['vector_5fint4_2ehpp',['vector_int4.hpp',['../a00220.html',1,'']]],\n  ['vector_5fint4_5fprecision_2ehpp',['vector_int4_precision.hpp',['../a00221.html',1,'']]],\n  ['vector_5finteger_2ehpp',['vector_integer.hpp',['../a00222.html',1,'']]],\n  ['vector_5fquery_2ehpp',['vector_query.hpp',['../a00223.html',1,'']]],\n  ['vector_5frelational_2ehpp',['vector_relational.hpp',['../a00225.html',1,'']]],\n  ['vector_5fuint1_2ehpp',['vector_uint1.hpp',['../a00226.html',1,'']]],\n  ['vector_5fuint1_5fprecision_2ehpp',['vector_uint1_precision.hpp',['../a00227.html',1,'']]],\n  ['vector_5fuint2_2ehpp',['vector_uint2.hpp',['../a00228.html',1,'']]],\n  ['vector_5fuint2_5fprecision_2ehpp',['vector_uint2_precision.hpp',['../a00229.html',1,'']]],\n  ['vector_5fuint3_2ehpp',['vector_uint3.hpp',['../a00230.html',1,'']]],\n  ['vector_5fuint3_5fprecision_2ehpp',['vector_uint3_precision.hpp',['../a00231.html',1,'']]],\n  ['vector_5fuint4_2ehpp',['vector_uint4.hpp',['../a00232.html',1,'']]],\n  ['vector_5fuint4_5fprecision_2ehpp',['vector_uint4_precision.hpp',['../a00233.html',1,'']]],\n  ['vector_5fulp_2ehpp',['vector_ulp.hpp',['../a00234.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_14.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_14.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_14.js",
    "content": "var searchData=\n[\n  ['wrap_2ehpp',['wrap.hpp',['../a00235.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_2.js",
    "content": "var searchData=\n[\n  ['closest_5fpoint_2ehpp',['closest_point.hpp',['../a00010.html',1,'']]],\n  ['color_5fencoding_2ehpp',['color_encoding.hpp',['../a00011.html',1,'']]],\n  ['color_5fspace_5fycocg_2ehpp',['color_space_YCoCg.hpp',['../a00014.html',1,'']]],\n  ['common_2ehpp',['common.hpp',['../a00015.html',1,'']]],\n  ['compatibility_2ehpp',['compatibility.hpp',['../a00017.html',1,'']]],\n  ['component_5fwise_2ehpp',['component_wise.hpp',['../a00018.html',1,'']]],\n  ['constants_2ehpp',['constants.hpp',['../a00021.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_3.js",
    "content": "var searchData=\n[\n  ['dual_5fquaternion_2ehpp',['dual_quaternion.hpp',['../a00022.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_4.js",
    "content": "var searchData=\n[\n  ['easing_2ehpp',['easing.hpp',['../a00023.html',1,'']]],\n  ['epsilon_2ehpp',['epsilon.hpp',['../a00024.html',1,'']]],\n  ['euler_5fangles_2ehpp',['euler_angles.hpp',['../a00025.html',1,'']]],\n  ['exponential_2ehpp',['exponential.hpp',['../a00026.html',1,'']]],\n  ['ext_2ehpp',['ext.hpp',['../a00027.html',1,'']]],\n  ['extend_2ehpp',['extend.hpp',['../a00028.html',1,'']]],\n  ['extended_5fmin_5fmax_2ehpp',['extended_min_max.hpp',['../a00029.html',1,'']]],\n  ['exterior_5fproduct_2ehpp',['exterior_product.hpp',['../a00030.html',1,'']]],\n  ['matrix_5ftransform_2ehpp',['matrix_transform.hpp',['../a00108.html',1,'']]],\n  ['scalar_5frelational_2ehpp',['scalar_relational.hpp',['../a00149.html',1,'']]],\n  ['vector_5frelational_2ehpp',['vector_relational.hpp',['../a00224.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_5.js",
    "content": "var searchData=\n[\n  ['fast_5fexponential_2ehpp',['fast_exponential.hpp',['../a00031.html',1,'']]],\n  ['fast_5fsquare_5froot_2ehpp',['fast_square_root.hpp',['../a00032.html',1,'']]],\n  ['fast_5ftrigonometry_2ehpp',['fast_trigonometry.hpp',['../a00033.html',1,'']]],\n  ['functions_2ehpp',['functions.hpp',['../a00034.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_6.js",
    "content": "var searchData=\n[\n  ['color_5fspace_2ehpp',['color_space.hpp',['../a00012.html',1,'']]],\n  ['color_5fspace_2ehpp',['color_space.hpp',['../a00013.html',1,'']]],\n  ['common_2ehpp',['common.hpp',['../a00016.html',1,'']]],\n  ['geometric_2ehpp',['geometric.hpp',['../a00036.html',1,'']]],\n  ['glm_2ehpp',['glm.hpp',['../a00037.html',1,'']]],\n  ['gradient_5fpaint_2ehpp',['gradient_paint.hpp',['../a00038.html',1,'']]],\n  ['integer_2ehpp',['integer.hpp',['../a00042.html',1,'']]],\n  ['integer_2ehpp',['integer.hpp',['../a00041.html',1,'']]],\n  ['matrix_5ftransform_2ehpp',['matrix_transform.hpp',['../a00109.html',1,'']]],\n  ['packing_2ehpp',['packing.hpp',['../a00119.html',1,'']]],\n  ['quaternion_2ehpp',['quaternion.hpp',['../a00125.html',1,'']]],\n  ['quaternion_2ehpp',['quaternion.hpp',['../a00126.html',1,'']]],\n  ['scalar_5frelational_2ehpp',['scalar_relational.hpp',['../a00150.html',1,'']]],\n  ['type_5faligned_2ehpp',['type_aligned.hpp',['../a00162.html',1,'']]],\n  ['type_5faligned_2ehpp',['type_aligned.hpp',['../a00161.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_7.js",
    "content": "var searchData=\n[\n  ['handed_5fcoordinate_5fspace_2ehpp',['handed_coordinate_space.hpp',['../a00039.html',1,'']]],\n  ['hash_2ehpp',['hash.hpp',['../a00040.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_8.js",
    "content": "var searchData=\n[\n  ['integer_2ehpp',['integer.hpp',['../a00043.html',1,'']]],\n  ['intersect_2ehpp',['intersect.hpp',['../a00044.html',1,'']]],\n  ['io_2ehpp',['io.hpp',['../a00045.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_9.js",
    "content": "var searchData=\n[\n  ['log_5fbase_2ehpp',['log_base.hpp',['../a00046.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_a.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_a.js",
    "content": "var searchData=\n[\n  ['mat2x2_2ehpp',['mat2x2.hpp',['../a00048.html',1,'']]],\n  ['mat2x3_2ehpp',['mat2x3.hpp',['../a00049.html',1,'']]],\n  ['mat2x4_2ehpp',['mat2x4.hpp',['../a00050.html',1,'']]],\n  ['mat3x2_2ehpp',['mat3x2.hpp',['../a00051.html',1,'']]],\n  ['mat3x3_2ehpp',['mat3x3.hpp',['../a00052.html',1,'']]],\n  ['mat3x4_2ehpp',['mat3x4.hpp',['../a00053.html',1,'']]],\n  ['mat4x2_2ehpp',['mat4x2.hpp',['../a00054.html',1,'']]],\n  ['mat4x3_2ehpp',['mat4x3.hpp',['../a00055.html',1,'']]],\n  ['mat4x4_2ehpp',['mat4x4.hpp',['../a00056.html',1,'']]],\n  ['matrix_2ehpp',['matrix.hpp',['../a00057.html',1,'']]],\n  ['matrix_5faccess_2ehpp',['matrix_access.hpp',['../a00058.html',1,'']]],\n  ['matrix_5fclip_5fspace_2ehpp',['matrix_clip_space.hpp',['../a00059.html',1,'']]],\n  ['matrix_5fcommon_2ehpp',['matrix_common.hpp',['../a00060.html',1,'']]],\n  ['matrix_5fcross_5fproduct_2ehpp',['matrix_cross_product.hpp',['../a00061.html',1,'']]],\n  ['matrix_5fdecompose_2ehpp',['matrix_decompose.hpp',['../a00062.html',1,'']]],\n  ['matrix_5fdouble2x2_2ehpp',['matrix_double2x2.hpp',['../a00063.html',1,'']]],\n  ['matrix_5fdouble2x2_5fprecision_2ehpp',['matrix_double2x2_precision.hpp',['../a00064.html',1,'']]],\n  ['matrix_5fdouble2x3_2ehpp',['matrix_double2x3.hpp',['../a00065.html',1,'']]],\n  ['matrix_5fdouble2x3_5fprecision_2ehpp',['matrix_double2x3_precision.hpp',['../a00066.html',1,'']]],\n  ['matrix_5fdouble2x4_2ehpp',['matrix_double2x4.hpp',['../a00067.html',1,'']]],\n  ['matrix_5fdouble2x4_5fprecision_2ehpp',['matrix_double2x4_precision.hpp',['../a00068.html',1,'']]],\n  ['matrix_5fdouble3x2_2ehpp',['matrix_double3x2.hpp',['../a00069.html',1,'']]],\n  ['matrix_5fdouble3x2_5fprecision_2ehpp',['matrix_double3x2_precision.hpp',['../a00070.html',1,'']]],\n  ['matrix_5fdouble3x3_2ehpp',['matrix_double3x3.hpp',['../a00071.html',1,'']]],\n  ['matrix_5fdouble3x3_5fprecision_2ehpp',['matrix_double3x3_precision.hpp',['../a00072.html',1,'']]],\n  ['matrix_5fdouble3x4_2ehpp',['matrix_double3x4.hpp',['../a00073.html',1,'']]],\n  ['matrix_5fdouble3x4_5fprecision_2ehpp',['matrix_double3x4_precision.hpp',['../a00074.html',1,'']]],\n  ['matrix_5fdouble4x2_2ehpp',['matrix_double4x2.hpp',['../a00075.html',1,'']]],\n  ['matrix_5fdouble4x2_5fprecision_2ehpp',['matrix_double4x2_precision.hpp',['../a00076.html',1,'']]],\n  ['matrix_5fdouble4x3_2ehpp',['matrix_double4x3.hpp',['../a00077.html',1,'']]],\n  ['matrix_5fdouble4x3_5fprecision_2ehpp',['matrix_double4x3_precision.hpp',['../a00078.html',1,'']]],\n  ['matrix_5fdouble4x4_2ehpp',['matrix_double4x4.hpp',['../a00079.html',1,'']]],\n  ['matrix_5fdouble4x4_5fprecision_2ehpp',['matrix_double4x4_precision.hpp',['../a00080.html',1,'']]],\n  ['matrix_5ffactorisation_2ehpp',['matrix_factorisation.hpp',['../a00081.html',1,'']]],\n  ['matrix_5ffloat2x2_2ehpp',['matrix_float2x2.hpp',['../a00082.html',1,'']]],\n  ['matrix_5ffloat2x2_5fprecision_2ehpp',['matrix_float2x2_precision.hpp',['../a00083.html',1,'']]],\n  ['matrix_5ffloat2x3_2ehpp',['matrix_float2x3.hpp',['../a00084.html',1,'']]],\n  ['matrix_5ffloat2x3_5fprecision_2ehpp',['matrix_float2x3_precision.hpp',['../a00085.html',1,'']]],\n  ['matrix_5ffloat2x4_2ehpp',['matrix_float2x4.hpp',['../a00086.html',1,'']]],\n  ['matrix_5ffloat2x4_5fprecision_2ehpp',['matrix_float2x4_precision.hpp',['../a00087.html',1,'']]],\n  ['matrix_5ffloat3x2_2ehpp',['matrix_float3x2.hpp',['../a00088.html',1,'']]],\n  ['matrix_5ffloat3x2_5fprecision_2ehpp',['matrix_float3x2_precision.hpp',['../a00089.html',1,'']]],\n  ['matrix_5ffloat3x3_2ehpp',['matrix_float3x3.hpp',['../a00090.html',1,'']]],\n  ['matrix_5ffloat3x3_5fprecision_2ehpp',['matrix_float3x3_precision.hpp',['../a00091.html',1,'']]],\n  ['matrix_5ffloat3x4_2ehpp',['matrix_float3x4.hpp',['../a00092.html',1,'']]],\n  ['matrix_5ffloat3x4_5fprecision_2ehpp',['matrix_float3x4_precision.hpp',['../a00093.html',1,'']]],\n  ['matrix_5ffloat4x2_2ehpp',['matrix_float4x2.hpp',['../a00094.html',1,'']]],\n  ['matrix_5ffloat4x3_2ehpp',['matrix_float4x3.hpp',['../a00096.html',1,'']]],\n  ['matrix_5ffloat4x3_5fprecision_2ehpp',['matrix_float4x3_precision.hpp',['../a00097.html',1,'']]],\n  ['matrix_5ffloat4x4_2ehpp',['matrix_float4x4.hpp',['../a00098.html',1,'']]],\n  ['matrix_5ffloat4x4_5fprecision_2ehpp',['matrix_float4x4_precision.hpp',['../a00099.html',1,'']]],\n  ['matrix_5finteger_2ehpp',['matrix_integer.hpp',['../a00100.html',1,'']]],\n  ['matrix_5finterpolation_2ehpp',['matrix_interpolation.hpp',['../a00101.html',1,'']]],\n  ['matrix_5finverse_2ehpp',['matrix_inverse.hpp',['../a00102.html',1,'']]],\n  ['matrix_5fmajor_5fstorage_2ehpp',['matrix_major_storage.hpp',['../a00103.html',1,'']]],\n  ['matrix_5foperation_2ehpp',['matrix_operation.hpp',['../a00104.html',1,'']]],\n  ['matrix_5fprojection_2ehpp',['matrix_projection.hpp',['../a00105.html',1,'']]],\n  ['matrix_5fquery_2ehpp',['matrix_query.hpp',['../a00106.html',1,'']]],\n  ['matrix_5frelational_2ehpp',['matrix_relational.hpp',['../a00107.html',1,'']]],\n  ['matrix_5ftransform_5f2d_2ehpp',['matrix_transform_2d.hpp',['../a00110.html',1,'']]],\n  ['mixed_5fproduct_2ehpp',['mixed_product.hpp',['../a00111.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_b.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_b.js",
    "content": "var searchData=\n[\n  ['noise_2ehpp',['noise.hpp',['../a00112.html',1,'']]],\n  ['norm_2ehpp',['norm.hpp',['../a00113.html',1,'']]],\n  ['normal_2ehpp',['normal.hpp',['../a00114.html',1,'']]],\n  ['normalize_5fdot_2ehpp',['normalize_dot.hpp',['../a00115.html',1,'']]],\n  ['number_5fprecision_2ehpp',['number_precision.hpp',['../a00116.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_c.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_c.js",
    "content": "var searchData=\n[\n  ['optimum_5fpow_2ehpp',['optimum_pow.hpp',['../a00117.html',1,'']]],\n  ['orthonormalize_2ehpp',['orthonormalize.hpp',['../a00118.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_d.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_d.js",
    "content": "var searchData=\n[\n  ['packing_2ehpp',['packing.hpp',['../a00120.html',1,'']]],\n  ['perpendicular_2ehpp',['perpendicular.hpp',['../a00121.html',1,'']]],\n  ['polar_5fcoordinates_2ehpp',['polar_coordinates.hpp',['../a00122.html',1,'']]],\n  ['projection_2ehpp',['projection.hpp',['../a00123.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_e.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_e.js",
    "content": "var searchData=\n[\n  ['quaternion_5fcommon_2ehpp',['quaternion_common.hpp',['../a00127.html',1,'']]],\n  ['quaternion_5fdouble_2ehpp',['quaternion_double.hpp',['../a00128.html',1,'']]],\n  ['quaternion_5fdouble_5fprecision_2ehpp',['quaternion_double_precision.hpp',['../a00129.html',1,'']]],\n  ['quaternion_5fexponential_2ehpp',['quaternion_exponential.hpp',['../a00130.html',1,'']]],\n  ['quaternion_5ffloat_2ehpp',['quaternion_float.hpp',['../a00131.html',1,'']]],\n  ['quaternion_5ffloat_5fprecision_2ehpp',['quaternion_float_precision.hpp',['../a00132.html',1,'']]],\n  ['quaternion_5fgeometric_2ehpp',['quaternion_geometric.hpp',['../a00133.html',1,'']]],\n  ['quaternion_5frelational_2ehpp',['quaternion_relational.hpp',['../a00134.html',1,'']]],\n  ['quaternion_5ftransform_2ehpp',['quaternion_transform.hpp',['../a00135.html',1,'']]],\n  ['quaternion_5ftrigonometric_2ehpp',['quaternion_trigonometric.hpp',['../a00136.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"files_f.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/files_f.js",
    "content": "var searchData=\n[\n  ['random_2ehpp',['random.hpp',['../a00137.html',1,'']]],\n  ['range_2ehpp',['range.hpp',['../a00138.html',1,'']]],\n  ['raw_5fdata_2ehpp',['raw_data.hpp',['../a00139.html',1,'']]],\n  ['reciprocal_2ehpp',['reciprocal.hpp',['../a00140.html',1,'']]],\n  ['rotate_5fnormalized_5faxis_2ehpp',['rotate_normalized_axis.hpp',['../a00141.html',1,'']]],\n  ['rotate_5fvector_2ehpp',['rotate_vector.hpp',['../a00142.html',1,'']]],\n  ['round_2ehpp',['round.hpp',['../a00143.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_0.js",
    "content": "var searchData=\n[\n  ['abs',['abs',['../a00241.html#ga439e60a72eadecfeda2df5449c613a64',1,'glm::abs(genType x)'],['../a00241.html#ga81d3abddd0ef0c8de579bc541ecadab6',1,'glm::abs(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['acos',['acos',['../a00373.html#gacc9b092df8257c68f19c9053703e2563',1,'glm']]],\n  ['acosh',['acosh',['../a00373.html#ga858f35dc66fd2688f20c52b5f25be76a',1,'glm']]],\n  ['acot',['acot',['../a00301.html#gaeadfb9c9d71093f7865b2ba2ca8d104d',1,'glm']]],\n  ['acoth',['acoth',['../a00301.html#gafaca98a7100170db8841f446282debfa',1,'glm']]],\n  ['acsc',['acsc',['../a00301.html#ga1b4bed91476b9b915e76b4a30236d330',1,'glm']]],\n  ['acsch',['acsch',['../a00301.html#ga4b50aa5e5afc7e19ec113ab91596c576',1,'glm']]],\n  ['adjugate',['adjugate',['../a00339.html#ga40a38402a30860af6e508fe76211e659',1,'glm::adjugate(mat&lt; 2, 2, T, Q &gt; const &amp;m)'],['../a00339.html#gaddb09f7abc1a9c56a243d32ff3538be6',1,'glm::adjugate(mat&lt; 3, 3, T, Q &gt; const &amp;m)'],['../a00339.html#ga9aaa7d1f40391b0b5cacccb60e104ba8',1,'glm::adjugate(mat&lt; 4, 4, T, Q &gt; const &amp;m)']]],\n  ['affineinverse',['affineInverse',['../a00295.html#gae0fcc5fc8783291f9702272de428fa0e',1,'glm']]],\n  ['all',['all',['../a00374.html#ga87e53f50b679f5f95c5cb4780311b3dd',1,'glm']]],\n  ['angle',['angle',['../a00257.html#ga8aa248b31d5ade470c87304df5eb7bd8',1,'glm::angle(qua&lt; T, Q &gt; const &amp;x)'],['../a00367.html#ga2e2917b4cb75ca3d043ac15ff88f14e1',1,'glm::angle(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['angleaxis',['angleAxis',['../a00257.html#ga5c0095cfcb218c75a4b79d7687950036',1,'glm']]],\n  ['any',['any',['../a00374.html#ga911b3f8e41459dd551ccb6d385d91061',1,'glm']]],\n  ['arecollinear',['areCollinear',['../a00368.html#ga13da4a787a2ff70e95d561fb19ff91b4',1,'glm']]],\n  ['areorthogonal',['areOrthogonal',['../a00368.html#gac7b95b3f798e3c293262b2bdaad47c57',1,'glm']]],\n  ['areorthonormal',['areOrthonormal',['../a00368.html#ga1b091c3d7f9ee3b0708311c001c293e3',1,'glm']]],\n  ['asec',['asec',['../a00301.html#ga2c5b7f962c2c9ff684e6d2de48db1f10',1,'glm']]],\n  ['asech',['asech',['../a00301.html#gaec7586dccfe431f850d006f3824b8ca6',1,'glm']]],\n  ['asin',['asin',['../a00373.html#ga0552d2df4865fa8c3d7cfc3ec2caac73',1,'glm']]],\n  ['asinh',['asinh',['../a00373.html#ga3ef16b501ee859fddde88e22192a5950',1,'glm']]],\n  ['associatedmax',['associatedMax',['../a00308.html#ga7d9c8785230c8db60f72ec8975f1ba45',1,'glm::associatedMax(T x, U a, T y, U b)'],['../a00308.html#ga5c6758bc50aa7fbe700f87123a045aad',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)'],['../a00308.html#ga0d169d6ce26b03248df175f39005d77f',1,'glm::associatedMax(T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b)'],['../a00308.html#ga4086269afabcb81dd7ded33cb3448653',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)'],['../a00308.html#gaec891e363d91abbf3a4443cf2f652209',1,'glm::associatedMax(T x, U a, T y, U b, T z, U c)'],['../a00308.html#gab84fdc35016a31e8cd0cbb8296bddf7c',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)'],['../a00308.html#gadd2a2002f4f2144bbc39eb2336dd2fba',1,'glm::associatedMax(T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c)'],['../a00308.html#ga19f59d1141a51a3b2108a9807af78f7f',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c)'],['../a00308.html#ga3038ffcb43eaa6af75897a99a5047ccc',1,'glm::associatedMax(T x, U a, T y, U b, T z, U c, T w, U d)'],['../a00308.html#gaf5ab0c428f8d1cd9e3b45fcfbf6423a6',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)'],['../a00308.html#ga11477c2c4b5b0bfd1b72b29df3725a9d',1,'glm::associatedMax(T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)'],['../a00308.html#gab9c3dd74cac899d2c625b5767ea3b3fb',1,'glm::associatedMax(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)']]],\n  ['associatedmin',['associatedMin',['../a00308.html#gacc01bd272359572fc28437ae214a02df',1,'glm::associatedMin(T x, U a, T y, U b)'],['../a00308.html#gac2f0dff90948f2e44386a5eafd941d1c',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b)'],['../a00308.html#gacfec519c820331d023ef53a511749319',1,'glm::associatedMin(T x, const vec&lt; L, U, Q &gt; &amp;a, T y, const vec&lt; L, U, Q &gt; &amp;b)'],['../a00308.html#ga4757c7cab2d809124a8525d0a9deeb37',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b)'],['../a00308.html#gad0aa8f86259a26d839d34a3577a923fc',1,'glm::associatedMin(T x, U a, T y, U b, T z, U c)'],['../a00308.html#ga723e5411cebc7ffbd5c81ffeec61127d',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c)'],['../a00308.html#ga432224ebe2085eaa2b63a077ecbbbff6',1,'glm::associatedMin(T x, U a, T y, U b, T z, U c, T w, U d)'],['../a00308.html#ga66b08118bc88f0494bcacb7cdb940556',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, U, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, U, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, U, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;w, vec&lt; L, U, Q &gt; const &amp;d)'],['../a00308.html#ga78c28fde1a7080fb7420bd88e68c6c68',1,'glm::associatedMin(T x, vec&lt; L, U, Q &gt; const &amp;a, T y, vec&lt; L, U, Q &gt; const &amp;b, T z, vec&lt; L, U, Q &gt; const &amp;c, T w, vec&lt; L, U, Q &gt; const &amp;d)'],['../a00308.html#ga2db7e351994baee78540a562d4bb6d3b',1,'glm::associatedMin(vec&lt; L, T, Q &gt; const &amp;x, U a, vec&lt; L, T, Q &gt; const &amp;y, U b, vec&lt; L, T, Q &gt; const &amp;z, U c, vec&lt; L, T, Q &gt; const &amp;w, U d)']]],\n  ['atan',['atan',['../a00373.html#gac61629f3a4aa14057e7a8cae002291db',1,'glm::atan(vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;x)'],['../a00373.html#ga5229f087eaccbc466f1c609ce3107b95',1,'glm::atan(vec&lt; L, T, Q &gt; const &amp;y_over_x)']]],\n  ['atan2',['atan2',['../a00315.html#gac63011205bf6d0be82589dc56dd26708',1,'glm::atan2(T x, T y)'],['../a00315.html#ga83bc41bd6f89113ee8006576b12bfc50',1,'glm::atan2(const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y)'],['../a00315.html#gac39314f5087e7e51e592897cabbc1927',1,'glm::atan2(const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y)'],['../a00315.html#gaba86c28da7bf5bdac64fecf7d56e8ff3',1,'glm::atan2(const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y)']]],\n  ['atanh',['atanh',['../a00373.html#gabc925650e618357d07da255531658b87',1,'glm']]],\n  ['axis',['axis',['../a00257.html#ga764254f10248b505e936e5309a88c23d',1,'glm']]],\n  ['axisangle',['axisAngle',['../a00337.html#gafefe32ce5a90a135287ba34fac3623bc',1,'glm']]],\n  ['axisanglematrix',['axisAngleMatrix',['../a00337.html#ga3a788e2f5223397df5c426413ecc2f6b',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_1.js",
    "content": "var searchData=\n[\n  ['backeasein',['backEaseIn',['../a00318.html#ga93cddcdb6347a44d5927cc2bf2570816',1,'glm::backEaseIn(genType const &amp;a)'],['../a00318.html#ga33777c9dd98f61d9472f96aafdf2bd36',1,'glm::backEaseIn(genType const &amp;a, genType const &amp;o)']]],\n  ['backeaseinout',['backEaseInOut',['../a00318.html#gace6d24722a2f6722b56398206eb810bb',1,'glm::backEaseInOut(genType const &amp;a)'],['../a00318.html#ga68a7b760f2afdfab298d5cd6d7611fb1',1,'glm::backEaseInOut(genType const &amp;a, genType const &amp;o)']]],\n  ['backeaseout',['backEaseOut',['../a00318.html#gabf25069fa906413c858fd46903d520b9',1,'glm::backEaseOut(genType const &amp;a)'],['../a00318.html#ga640c1ac6fe9d277a197da69daf60ee4f',1,'glm::backEaseOut(genType const &amp;a, genType const &amp;o)']]],\n  ['ballrand',['ballRand',['../a00300.html#ga7c53b7797f3147af68a11c767679fa3f',1,'glm']]],\n  ['bitcount',['bitCount',['../a00370.html#ga44abfe3379e11cbd29425a843420d0d6',1,'glm::bitCount(genType v)'],['../a00370.html#gaac7b15e40bdea8d9aa4c4cb34049f7b5',1,'glm::bitCount(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['bitfielddeinterleave',['bitfieldDeinterleave',['../a00288.html#ga091d934233a2e121df91b8c7230357c8',1,'glm::bitfieldDeinterleave(glm::uint16 x)'],['../a00288.html#ga7d1cc24dfbcdd932c3a2abbb76235f98',1,'glm::bitfieldDeinterleave(glm::uint32 x)'],['../a00288.html#ga8dbb8c87092f33bd815dd8a840be5d60',1,'glm::bitfieldDeinterleave(glm::uint64 x)']]],\n  ['bitfieldextract',['bitfieldExtract',['../a00370.html#ga346b25ab11e793e91a4a69c8aa6819f2',1,'glm']]],\n  ['bitfieldfillone',['bitfieldFillOne',['../a00288.html#ga46f9295abe3b5c7658f5b13c7f819f0a',1,'glm::bitfieldFillOne(genIUType Value, int FirstBit, int BitCount)'],['../a00288.html#ga3e96dd1f0a4bc892f063251ed118c0c1',1,'glm::bitfieldFillOne(vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)']]],\n  ['bitfieldfillzero',['bitfieldFillZero',['../a00288.html#ga697b86998b7d74ee0a69d8e9f8819fee',1,'glm::bitfieldFillZero(genIUType Value, int FirstBit, int BitCount)'],['../a00288.html#ga0d16c9acef4be79ea9b47c082a0cf7c2',1,'glm::bitfieldFillZero(vec&lt; L, T, Q &gt; const &amp;Value, int FirstBit, int BitCount)']]],\n  ['bitfieldinsert',['bitfieldInsert',['../a00370.html#ga2e82992340d421fadb61a473df699b20',1,'glm']]],\n  ['bitfieldinterleave',['bitfieldInterleave',['../a00288.html#ga24cad0069f9a0450abd80b3e89501adf',1,'glm::bitfieldInterleave(int8 x, int8 y)'],['../a00288.html#ga9a4976a529aec2cee56525e1165da484',1,'glm::bitfieldInterleave(uint8 x, uint8 y)'],['../a00288.html#ga4a76bbca39c40153f3203d0a1926e142',1,'glm::bitfieldInterleave(u8vec2 const &amp;v)'],['../a00288.html#gac51c33a394593f0631fa3aa5bb778809',1,'glm::bitfieldInterleave(int16 x, int16 y)'],['../a00288.html#ga94f3646a5667f4be56f8dcf3310e963f',1,'glm::bitfieldInterleave(uint16 x, uint16 y)'],['../a00288.html#ga406c4ee56af4ca37a73f449f154eca3e',1,'glm::bitfieldInterleave(u16vec2 const &amp;v)'],['../a00288.html#gaebb756a24a0784e3d6fba8bd011ab77a',1,'glm::bitfieldInterleave(int32 x, int32 y)'],['../a00288.html#ga2f1e2b3fe699e7d897ae38b2115ddcbd',1,'glm::bitfieldInterleave(uint32 x, uint32 y)'],['../a00288.html#ga8cb17574d60abd6ade84bc57c10e8f78',1,'glm::bitfieldInterleave(u32vec2 const &amp;v)'],['../a00288.html#ga8fdb724dccd4a07d57efc01147102137',1,'glm::bitfieldInterleave(int8 x, int8 y, int8 z)'],['../a00288.html#ga9fc2a0dd5dcf8b00e113f272a5feca93',1,'glm::bitfieldInterleave(uint8 x, uint8 y, uint8 z)'],['../a00288.html#gaa901c36a842fa5d126ea650549f17b24',1,'glm::bitfieldInterleave(int16 x, int16 y, int16 z)'],['../a00288.html#ga3afd6d38881fe3948c53d4214d2197fd',1,'glm::bitfieldInterleave(uint16 x, uint16 y, uint16 z)'],['../a00288.html#gad2075d96a6640121edaa98ea534102ca',1,'glm::bitfieldInterleave(int32 x, int32 y, int32 z)'],['../a00288.html#gab19fbc739fc0cf7247978602c36f7da8',1,'glm::bitfieldInterleave(uint32 x, uint32 y, uint32 z)'],['../a00288.html#ga8a44ae22f5c953b296c42d067dccbe6d',1,'glm::bitfieldInterleave(int8 x, int8 y, int8 z, int8 w)'],['../a00288.html#ga14bb274d54a3c26f4919dd7ed0dd0c36',1,'glm::bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w)'],['../a00288.html#ga180a63161e1319fbd5a53c84d0429c7a',1,'glm::bitfieldInterleave(int16 x, int16 y, int16 z, int16 w)'],['../a00288.html#gafca8768671a14c8016facccb66a89f26',1,'glm::bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w)']]],\n  ['bitfieldreverse',['bitfieldReverse',['../a00370.html#ga750a1d92464489b7711dee67aa3441b6',1,'glm']]],\n  ['bitfieldrotateleft',['bitfieldRotateLeft',['../a00288.html#ga2eb49678a344ce1495bdb5586d9896b9',1,'glm::bitfieldRotateLeft(genIUType In, int Shift)'],['../a00288.html#gae186317091b1a39214ebf79008d44a1e',1,'glm::bitfieldRotateLeft(vec&lt; L, T, Q &gt; const &amp;In, int Shift)']]],\n  ['bitfieldrotateright',['bitfieldRotateRight',['../a00288.html#ga1c33d075c5fb8bd8dbfd5092bfc851ca',1,'glm::bitfieldRotateRight(genIUType In, int Shift)'],['../a00288.html#ga590488e1fc00a6cfe5d3bcaf93fbfe88',1,'glm::bitfieldRotateRight(vec&lt; L, T, Q &gt; const &amp;In, int Shift)']]],\n  ['bounceeasein',['bounceEaseIn',['../a00318.html#gaac30767f2e430b0c3fc859a4d59c7b5b',1,'glm']]],\n  ['bounceeaseinout',['bounceEaseInOut',['../a00318.html#gadf9f38eff1e5f4c2fa5b629a25ae413e',1,'glm']]],\n  ['bounceeaseout',['bounceEaseOut',['../a00318.html#ga94007005ff0dcfa0749ebfa2aec540b2',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_10.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_10.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_10.js",
    "content": "var searchData=\n[\n  ['saturate',['saturate',['../a00315.html#ga0fd09e616d122bc2ed9726682ffd44b7',1,'glm::saturate(T x)'],['../a00315.html#gaee97b8001c794a78a44f5d59f62a8aba',1,'glm::saturate(const vec&lt; 2, T, Q &gt; &amp;x)'],['../a00315.html#ga39bfe3a421286ee31680d45c31ccc161',1,'glm::saturate(const vec&lt; 3, T, Q &gt; &amp;x)'],['../a00315.html#ga356f8c3a7e7d6376d3d4b0a026407183',1,'glm::saturate(const vec&lt; 4, T, Q &gt; &amp;x)']]],\n  ['saturation',['saturation',['../a00312.html#ga01a97152b44e1550edcac60bd849e884',1,'glm::saturation(T const s)'],['../a00312.html#ga2156cea600e90148ece5bc96fd6db43a',1,'glm::saturation(T const s, vec&lt; 3, T, Q &gt; const &amp;color)'],['../a00312.html#gaba0eacee0736dae860e9371cc1ae4785',1,'glm::saturation(T const s, vec&lt; 4, T, Q &gt; const &amp;color)']]],\n  ['scale',['scale',['../a00247.html#ga05051adbee603fb3c5095d8cf5cc229b',1,'glm::scale(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00341.html#gadb47d2ad2bd984b213e8ff7d9cd8154e',1,'glm::scale(mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00362.html#gafbeefee8fec884d566e4ada0049174d7',1,'glm::scale(vec&lt; 3, T, Q &gt; const &amp;v)']]],\n  ['scalebias',['scaleBias',['../a00363.html#gabf249498b236e62c983d90d30d63c99c',1,'glm::scaleBias(T scale, T bias)'],['../a00363.html#gae2bdd91a76759fecfbaef97e3020aa8e',1,'glm::scaleBias(mat&lt; 4, 4, T, Q &gt; const &amp;m, T scale, T bias)']]],\n  ['sec',['sec',['../a00301.html#gae4bcbebee670c5ea155f0777b3acbd84',1,'glm']]],\n  ['sech',['sech',['../a00301.html#ga9a5cfd1e7170104a7b33863b1b75e5ae',1,'glm']]],\n  ['shearx',['shearX',['../a00341.html#ga2a118ece5db1e2022112b954846012af',1,'glm']]],\n  ['shearx2d',['shearX2D',['../a00363.html#gabf714b8a358181572b32a45555f71948',1,'glm']]],\n  ['shearx3d',['shearX3D',['../a00363.html#ga73e867c6cd4d700fe2054437e56106c4',1,'glm']]],\n  ['sheary',['shearY',['../a00341.html#ga717f1833369c1ac4a40e4ac015af885e',1,'glm']]],\n  ['sheary2d',['shearY2D',['../a00363.html#gac7998d0763d9181550c77e8af09a182c',1,'glm']]],\n  ['sheary3d',['shearY3D',['../a00363.html#gade5bb65ffcb513973db1a1314fb5cfac',1,'glm']]],\n  ['shearz3d',['shearZ3D',['../a00363.html#ga6591e0a3a9d2c9c0b6577bb4dace0255',1,'glm']]],\n  ['shortmix',['shortMix',['../a00352.html#gadc576cc957adc2a568cdcbc3799175bc',1,'glm']]],\n  ['sign',['sign',['../a00241.html#ga1e2e5cfff800056540e32f6c9b604b28',1,'glm::sign(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00333.html#ga04ef803a24f3d4f8c67dbccb33b0fce0',1,'glm::sign(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;base)']]],\n  ['simplex',['simplex',['../a00297.html#ga8122468c69015ff397349a7dcc638b27',1,'glm']]],\n  ['sin',['sin',['../a00373.html#ga29747fd108cb7292ae5a284f69691a69',1,'glm']]],\n  ['sineeasein',['sineEaseIn',['../a00318.html#gafb338ac6f6b2bcafee50e3dca5201dbf',1,'glm']]],\n  ['sineeaseinout',['sineEaseInOut',['../a00318.html#gaa46e3d5fbf7a15caa28eff9ef192d7c7',1,'glm']]],\n  ['sineeaseout',['sineEaseOut',['../a00318.html#gab3e454f883afc1606ef91363881bf5a3',1,'glm']]],\n  ['sinh',['sinh',['../a00373.html#gac7c39ff21809e281552b4dbe46f4a39d',1,'glm']]],\n  ['slerp',['slerp',['../a00248.html#gae7fc3c945be366b9942b842f55da428a',1,'glm::slerp(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)'],['../a00356.html#ga8b11b18ce824174ea1a5a69ea14e2cee',1,'glm::slerp(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, T const &amp;a)']]],\n  ['smoothstep',['smoothstep',['../a00241.html#ga562edf7eca082cc5b7a0aaf180436daf',1,'glm']]],\n  ['sphericalrand',['sphericalRand',['../a00300.html#ga22f90fcaccdf001c516ca90f6428e138',1,'glm']]],\n  ['sqrt',['sqrt',['../a00242.html#gaa83e5f1648b7ccdf33b87c07c76cb77c',1,'glm::sqrt(vec&lt; L, T, Q &gt; const &amp;v)'],['../a00256.html#ga64b7b255ed7bcba616fe6b44470b022e',1,'glm::sqrt(qua&lt; T, Q &gt; const &amp;q)'],['../a00330.html#ga7ce36693a75879ccd9bb10167cfa722d',1,'glm::sqrt(int x)'],['../a00330.html#ga1975d318978d6dacf78b6444fa5ed7bc',1,'glm::sqrt(uint x)']]],\n  ['squad',['squad',['../a00352.html#ga0b9bf3459e132ad8a18fe970669e3e35',1,'glm']]],\n  ['step',['step',['../a00241.html#ga015a1261ff23e12650211aa872863cce',1,'glm::step(genType edge, genType x)'],['../a00241.html#ga8f9a911a48ef244b51654eaefc81c551',1,'glm::step(T edge, vec&lt; L, T, Q &gt; const &amp;x)'],['../a00241.html#gaf4a5fc81619c7d3e8b22f53d4a098c7f',1,'glm::step(vec&lt; L, T, Q &gt; const &amp;edge, vec&lt; L, T, Q &gt; const &amp;x)']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_11.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_11.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_11.js",
    "content": "var searchData=\n[\n  ['tan',['tan',['../a00373.html#ga293a34cfb9f0115cc606b4a97c84f11f',1,'glm']]],\n  ['tanh',['tanh',['../a00373.html#gaa1bccbfdcbe40ed2ffcddc2aa8bfd0f1',1,'glm']]],\n  ['third',['third',['../a00290.html#ga3077c6311010a214b69ddc8214ec13b5',1,'glm']]],\n  ['three_5fover_5ftwo_5fpi',['three_over_two_pi',['../a00290.html#gae94950df74b0ce382b1fc1d978ef7394',1,'glm']]],\n  ['to_5fstring',['to_string',['../a00360.html#ga8f0dced1fd45e67e2d77e80ab93c7af5',1,'glm']]],\n  ['tomat3',['toMat3',['../a00352.html#gaab0afabb894b28a983fb8ec610409d56',1,'glm']]],\n  ['tomat4',['toMat4',['../a00352.html#gadfa2c77094e8cc9adad321d938855ffb',1,'glm']]],\n  ['toquat',['toQuat',['../a00352.html#ga798de5d186499c9a9231cd92c8afaef1',1,'glm::toQuat(mat&lt; 3, 3, T, Q &gt; const &amp;x)'],['../a00352.html#ga5eb36f51e1638e710451eba194dbc011',1,'glm::toQuat(mat&lt; 4, 4, T, Q &gt; const &amp;x)']]],\n  ['translate',['translate',['../a00247.html#ga1a4ecc4ad82652b8fb14dcb087879284',1,'glm::translate(mat&lt; 4, 4, T, Q &gt; const &amp;m, vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00341.html#gaf4573ae47c80938aa9053ef6a33755ab',1,'glm::translate(mat&lt; 3, 3, T, Q &gt; const &amp;m, vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00362.html#ga309a30e652e58c396e2c3d4db3ee7658',1,'glm::translate(vec&lt; 3, T, Q &gt; const &amp;v)']]],\n  ['transpose',['transpose',['../a00371.html#gae679d841da8ce9dbcc6c2d454f15bc35',1,'glm']]],\n  ['trianglenormal',['triangleNormal',['../a00344.html#gaff1cb5496925dfa7962df457772a7f35',1,'glm']]],\n  ['trunc',['trunc',['../a00241.html#gaf9375e3e06173271d49e6ffa3a334259',1,'glm']]],\n  ['tweakedinfiniteperspective',['tweakedInfinitePerspective',['../a00243.html#gaaeacc04a2a6f4b18c5899d37e7bb3ef9',1,'glm::tweakedInfinitePerspective(T fovy, T aspect, T near)'],['../a00243.html#gaf5b3c85ff6737030a1d2214474ffa7a8',1,'glm::tweakedInfinitePerspective(T fovy, T aspect, T near, T ep)']]],\n  ['two_5fover_5fpi',['two_over_pi',['../a00290.html#ga74eadc8a211253079683219a3ea0462a',1,'glm']]],\n  ['two_5fover_5froot_5fpi',['two_over_root_pi',['../a00290.html#ga5827301817640843cf02026a8d493894',1,'glm']]],\n  ['two_5fpi',['two_pi',['../a00290.html#gaa5276a4617566abcfe49286f40e3a256',1,'glm']]],\n  ['two_5fthirds',['two_thirds',['../a00290.html#ga9b4d2f4322edcf63a6737b92a29dd1f5',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_12.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_12.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_12.js",
    "content": "var searchData=\n[\n  ['uaddcarry',['uaddCarry',['../a00370.html#gaedcec48743632dff6786bcc492074b1b',1,'glm']]],\n  ['uintbitstofloat',['uintBitsToFloat',['../a00241.html#gab2bae0d15dcdca6093f88f76b3975d97',1,'glm::uintBitsToFloat(uint const &amp;v)'],['../a00241.html#ga97f46b5f7b42fe44482e13356eb394ae',1,'glm::uintBitsToFloat(vec&lt; L, uint, Q &gt; const &amp;v)']]],\n  ['umulextended',['umulExtended',['../a00370.html#ga732e2fb56db57ea541c7e5c92b7121be',1,'glm']]],\n  ['unpackdouble2x32',['unpackDouble2x32',['../a00372.html#ga5f4296dc5f12f0aa67ac05b8bb322483',1,'glm']]],\n  ['unpackf2x11_5f1x10',['unpackF2x11_1x10',['../a00298.html#ga2b1fd1e854705b1345e98409e0a25e50',1,'glm']]],\n  ['unpackf3x9_5fe1x5',['unpackF3x9_E1x5',['../a00298.html#gab9e60ebe3ad3eeced6a9ec6eb876d74e',1,'glm']]],\n  ['unpackhalf',['unpackHalf',['../a00298.html#ga30d6b2f1806315bcd6047131f547d33b',1,'glm']]],\n  ['unpackhalf1x16',['unpackHalf1x16',['../a00298.html#gac37dedaba24b00adb4ec6e8f92c19dbf',1,'glm']]],\n  ['unpackhalf2x16',['unpackHalf2x16',['../a00372.html#gaf59b52e6b28da9335322c4ae19b5d745',1,'glm']]],\n  ['unpackhalf4x16',['unpackHalf4x16',['../a00298.html#ga57dfc41b2eb20b0ac00efae7d9c49dcd',1,'glm']]],\n  ['unpacki3x10_5f1x2',['unpackI3x10_1x2',['../a00298.html#ga9a05330e5490be0908d3b117d82aff56',1,'glm']]],\n  ['unpackint2x16',['unpackInt2x16',['../a00298.html#gaccde055882918a3175de82f4ca8b7d8e',1,'glm']]],\n  ['unpackint2x32',['unpackInt2x32',['../a00298.html#gab297c0bfd38433524791eb0584d8f08d',1,'glm']]],\n  ['unpackint2x8',['unpackInt2x8',['../a00298.html#gab0c59f1e259fca9e68adb2207a6b665e',1,'glm']]],\n  ['unpackint4x16',['unpackInt4x16',['../a00298.html#ga52c154a9b232b62c22517a700cc0c78c',1,'glm']]],\n  ['unpackint4x8',['unpackInt4x8',['../a00298.html#ga1cd8d2038cdd33a860801aa155a26221',1,'glm']]],\n  ['unpackrgbm',['unpackRGBM',['../a00298.html#ga5c1ec97894b05ea21a05aea4f0204a02',1,'glm']]],\n  ['unpacksnorm',['unpackSnorm',['../a00298.html#ga6d49b31e5c3f9df8e1f99ab62b999482',1,'glm']]],\n  ['unpacksnorm1x16',['unpackSnorm1x16',['../a00298.html#ga96dd15002370627a443c835ab03a766c',1,'glm']]],\n  ['unpacksnorm1x8',['unpackSnorm1x8',['../a00298.html#ga4851ff86678aa1c7ace9d67846894285',1,'glm']]],\n  ['unpacksnorm2x16',['unpackSnorm2x16',['../a00372.html#gacd8f8971a3fe28418be0d0fa1f786b38',1,'glm']]],\n  ['unpacksnorm2x8',['unpackSnorm2x8',['../a00298.html#ga8b128e89be449fc71336968a66bf6e1a',1,'glm']]],\n  ['unpacksnorm3x10_5f1x2',['unpackSnorm3x10_1x2',['../a00298.html#ga7a4fbf79be9740e3c57737bc2af05e5b',1,'glm']]],\n  ['unpacksnorm4x16',['unpackSnorm4x16',['../a00298.html#gaaddf9c353528fe896106f7181219c7f4',1,'glm']]],\n  ['unpacksnorm4x8',['unpackSnorm4x8',['../a00372.html#ga2db488646d48b7c43d3218954523fe82',1,'glm']]],\n  ['unpacku3x10_5f1x2',['unpackU3x10_1x2',['../a00298.html#ga48df3042a7d079767f5891a1bfd8a60a',1,'glm']]],\n  ['unpackuint2x16',['unpackUint2x16',['../a00298.html#ga035bbbeab7ec2b28c0529757395b645b',1,'glm']]],\n  ['unpackuint2x32',['unpackUint2x32',['../a00298.html#gaf942ff11b65e83eb5f77e68329ebc6ab',1,'glm']]],\n  ['unpackuint2x8',['unpackUint2x8',['../a00298.html#gaa7600a6c71784b637a410869d2a5adcd',1,'glm']]],\n  ['unpackuint4x16',['unpackUint4x16',['../a00298.html#gab173834ef14cfc23a96a959f3ff4b8dc',1,'glm']]],\n  ['unpackuint4x8',['unpackUint4x8',['../a00298.html#gaf6dc0e4341810a641c7ed08f10e335d1',1,'glm']]],\n  ['unpackunorm',['unpackUnorm',['../a00298.html#ga3e6ac9178b59f0b1b2f7599f2183eb7f',1,'glm']]],\n  ['unpackunorm1x16',['unpackUnorm1x16',['../a00298.html#ga83d34160a5cb7bcb5339823210fc7501',1,'glm']]],\n  ['unpackunorm1x5_5f1x6_5f1x5',['unpackUnorm1x5_1x6_1x5',['../a00298.html#gab3bc08ecfc0f3339be93fb2b3b56d88a',1,'glm']]],\n  ['unpackunorm1x8',['unpackUnorm1x8',['../a00298.html#ga1319207e30874fb4931a9ee913983ee1',1,'glm']]],\n  ['unpackunorm2x16',['unpackUnorm2x16',['../a00372.html#ga1f66188e5d65afeb9ffba1ad971e4007',1,'glm']]],\n  ['unpackunorm2x3_5f1x2',['unpackUnorm2x3_1x2',['../a00298.html#ga6abd5a9014df3b5ce4059008d2491260',1,'glm']]],\n  ['unpackunorm2x4',['unpackUnorm2x4',['../a00298.html#ga2e50476132fe5f27f08e273d9c70d85b',1,'glm']]],\n  ['unpackunorm2x8',['unpackUnorm2x8',['../a00298.html#ga637cbe3913dd95c6e7b4c99c61bd611f',1,'glm']]],\n  ['unpackunorm3x10_5f1x2',['unpackUnorm3x10_1x2',['../a00298.html#ga5156d3060355fe332865da2c7f78815f',1,'glm']]],\n  ['unpackunorm3x5_5f1x1',['unpackUnorm3x5_1x1',['../a00298.html#ga5ff95ff5bc16f396432ab67243dbae4d',1,'glm']]],\n  ['unpackunorm4x16',['unpackUnorm4x16',['../a00298.html#ga2ae149c5d2473ac1e5f347bb654a242d',1,'glm']]],\n  ['unpackunorm4x4',['unpackUnorm4x4',['../a00298.html#gac58ee89d0e224bb6df5e8bbb18843a2d',1,'glm']]],\n  ['unpackunorm4x8',['unpackUnorm4x8',['../a00372.html#ga7f903259150b67e9466f5f8edffcd197',1,'glm']]],\n  ['unproject',['unProject',['../a00245.html#ga36641e5d60f994e01c3d8f56b10263d2',1,'glm']]],\n  ['unprojectno',['unProjectNO',['../a00245.html#gae089ba9fc150ff69c252a20e508857b5',1,'glm']]],\n  ['unprojectzo',['unProjectZO',['../a00245.html#gade5136413ce530f8e606124d570fba32',1,'glm']]],\n  ['uround',['uround',['../a00292.html#ga6715b9d573972a0f7763d30d45bcaec4',1,'glm']]],\n  ['usubborrow',['usubBorrow',['../a00370.html#gae3316ba1229ad9b9f09480833321b053',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_13.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_13.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_13.js",
    "content": "var searchData=\n[\n  ['value_5fptr',['value_ptr',['../a00305.html#ga1c64669e1ba1160ad9386e43dc57569a',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_14.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_14.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_14.js",
    "content": "var searchData=\n[\n  ['wrapangle',['wrapAngle',['../a00325.html#ga069527c6dbd64f53435b8ebc4878b473',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_15.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_15.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_15.js",
    "content": "var searchData=\n[\n  ['yaw',['yaw',['../a00299.html#ga8da38cdfdc452dafa660c2f46506bad5',1,'glm']]],\n  ['yawpitchroll',['yawPitchRoll',['../a00319.html#gae6aa26ccb020d281b449619e419a609e',1,'glm']]],\n  ['ycocg2rgb',['YCoCg2rgb',['../a00313.html#ga163596b804c7241810b2534a99eb1343',1,'glm']]],\n  ['ycocgr2rgb',['YCoCgR2rgb',['../a00313.html#gaf8d30574c8576838097d8e20c295384a',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_16.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_16.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_16.js",
    "content": "var searchData=\n[\n  ['zero',['zero',['../a00290.html#ga788f5a421fc0f40a1296ebc094cbaa8a',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_2.js",
    "content": "var searchData=\n[\n  ['catmullrom',['catmullRom',['../a00358.html#ga8119c04f8210fd0d292757565cd6918d',1,'glm']]],\n  ['ceil',['ceil',['../a00241.html#gafb9d2a645a23aca12d4d6de0104b7657',1,'glm']]],\n  ['ceilmultiple',['ceilMultiple',['../a00302.html#ga1d89ac88582aaf4d5dfa5feb4a376fd4',1,'glm::ceilMultiple(genType v, genType Multiple)'],['../a00302.html#gab77fdcc13f8e92d2e0b1b7d7aeab8e9d',1,'glm::ceilMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['ceilpoweroftwo',['ceilPowerOfTwo',['../a00302.html#ga5c3ef36ae32aa4271f1544f92bd578b6',1,'glm::ceilPowerOfTwo(genIUType v)'],['../a00302.html#gab53d4a97c0d3e297be5f693cdfdfe5d2',1,'glm::ceilPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['circulareasein',['circularEaseIn',['../a00318.html#ga34508d4b204a321ec26d6086aa047997',1,'glm']]],\n  ['circulareaseinout',['circularEaseInOut',['../a00318.html#ga0c1027637a5b02d4bb3612aa12599d69',1,'glm']]],\n  ['circulareaseout',['circularEaseOut',['../a00318.html#ga26fefde9ced9b72745fe21f1a3fe8da7',1,'glm']]],\n  ['circularrand',['circularRand',['../a00300.html#ga9dd05c36025088fae25b97c869e88517',1,'glm']]],\n  ['clamp',['clamp',['../a00241.html#ga7cd77683da6361e297c56443fc70806d',1,'glm::clamp(genType x, genType minVal, genType maxVal)'],['../a00241.html#gafba2e0674deb5953878d89483cd6323d',1,'glm::clamp(vec&lt; L, T, Q &gt; const &amp;x, T minVal, T maxVal)'],['../a00241.html#gaa0f2f12e9108b09e22a3f0b2008a0b5d',1,'glm::clamp(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)'],['../a00369.html#ga6c0cc6bd1d67ea1008d2592e998bad33',1,'glm::clamp(genType const &amp;Texcoord)']]],\n  ['closebounded',['closeBounded',['../a00314.html#gab7d89c14c48ad01f720fb5daf8813161',1,'glm']]],\n  ['closestpointonline',['closestPointOnLine',['../a00310.html#ga36529c278ef716986151d58d151d697d',1,'glm::closestPointOnLine(vec&lt; 3, T, Q &gt; const &amp;point, vec&lt; 3, T, Q &gt; const &amp;a, vec&lt; 3, T, Q &gt; const &amp;b)'],['../a00310.html#ga55bcbcc5fc06cb7ff7bc7a6e0e155eb0',1,'glm::closestPointOnLine(vec&lt; 2, T, Q &gt; const &amp;point, vec&lt; 2, T, Q &gt; const &amp;a, vec&lt; 2, T, Q &gt; const &amp;b)']]],\n  ['colmajor2',['colMajor2',['../a00338.html#gaaff72f11286e59a4a88ed21a347f284c',1,'glm::colMajor2(vec&lt; 2, T, Q &gt; const &amp;v1, vec&lt; 2, T, Q &gt; const &amp;v2)'],['../a00338.html#gafc25fd44196c92b1397b127aec1281ab',1,'glm::colMajor2(mat&lt; 2, 2, T, Q &gt; const &amp;m)']]],\n  ['colmajor3',['colMajor3',['../a00338.html#ga1e25b72b085087740c92f5c70f3b051f',1,'glm::colMajor3(vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)'],['../a00338.html#ga86bd0656e787bb7f217607572590af27',1,'glm::colMajor3(mat&lt; 3, 3, T, Q &gt; const &amp;m)']]],\n  ['colmajor4',['colMajor4',['../a00338.html#gaf4aa6c7e17bfce41a6c13bf6469fab05',1,'glm::colMajor4(vec&lt; 4, T, Q &gt; const &amp;v1, vec&lt; 4, T, Q &gt; const &amp;v2, vec&lt; 4, T, Q &gt; const &amp;v3, vec&lt; 4, T, Q &gt; const &amp;v4)'],['../a00338.html#gaf3f9511c366c20ba2e4a64c9e4cec2b3',1,'glm::colMajor4(mat&lt; 4, 4, T, Q &gt; const &amp;m)']]],\n  ['column',['column',['../a00293.html#ga96022eb0d3fae39d89fc7a954e59b374',1,'glm::column(genType const &amp;m, length_t index)'],['../a00293.html#ga9e757377523890e8b80c5843dbe4dd15',1,'glm::column(genType const &amp;m, length_t index, typename genType::col_type const &amp;x)']]],\n  ['compadd',['compAdd',['../a00316.html#gaf71833350e15e74d31cbf8a3e7f27051',1,'glm']]],\n  ['compmax',['compMax',['../a00316.html#gabfa4bb19298c8c73d4217ba759c496b6',1,'glm']]],\n  ['compmin',['compMin',['../a00316.html#gab5d0832b5c7bb01b8d7395973bfb1425',1,'glm']]],\n  ['compmul',['compMul',['../a00316.html#gae8ab88024197202c9479d33bdc5a8a5d',1,'glm']]],\n  ['compnormalize',['compNormalize',['../a00316.html#ga8f2b81ada8515875e58cb1667b6b9908',1,'glm']]],\n  ['compscale',['compScale',['../a00316.html#ga80abc2980d65d675f435d178c36880eb',1,'glm']]],\n  ['conjugate',['conjugate',['../a00248.html#ga10d7bda73201788ac2ab28cd8d0d409b',1,'glm']]],\n  ['convertd65xyztod50xyz',['convertD65XYZToD50XYZ',['../a00311.html#gad12f4f65022b2c80e33fcba2ced0dc48',1,'glm']]],\n  ['convertd65xyztolinearsrgb',['convertD65XYZToLinearSRGB',['../a00311.html#ga5265386fc3ac29e4c580d37ed470859c',1,'glm']]],\n  ['convertlinearsrgbtod50xyz',['convertLinearSRGBToD50XYZ',['../a00311.html#ga1522ba180e3d83d554a734056da031f9',1,'glm']]],\n  ['convertlinearsrgbtod65xyz',['convertLinearSRGBToD65XYZ',['../a00311.html#gaf9e130d9d4ccf51cc99317de7449f369',1,'glm']]],\n  ['convertlineartosrgb',['convertLinearToSRGB',['../a00289.html#ga42239e7b3da900f7ef37cec7e2476579',1,'glm::convertLinearToSRGB(vec&lt; L, T, Q &gt; const &amp;ColorLinear)'],['../a00289.html#gaace0a21167d13d26116c283009af57f6',1,'glm::convertLinearToSRGB(vec&lt; L, T, Q &gt; const &amp;ColorLinear, T Gamma)']]],\n  ['convertsrgbtolinear',['convertSRGBToLinear',['../a00289.html#ga16c798b7a226b2c3079dedc55083d187',1,'glm::convertSRGBToLinear(vec&lt; L, T, Q &gt; const &amp;ColorSRGB)'],['../a00289.html#gad1b91f27a9726c9cb403f9fee6e2e200',1,'glm::convertSRGBToLinear(vec&lt; L, T, Q &gt; const &amp;ColorSRGB, T Gamma)']]],\n  ['cos',['cos',['../a00373.html#ga6a41efc740e3b3c937447d3a6284130e',1,'glm']]],\n  ['cosh',['cosh',['../a00373.html#ga4e260e372742c5f517aca196cf1e62b3',1,'glm']]],\n  ['cot',['cot',['../a00301.html#ga3a7b517a95bbd3ad74da3aea87a66314',1,'glm']]],\n  ['coth',['coth',['../a00301.html#ga6b8b770eb7198e4dea59d52e6db81442',1,'glm']]],\n  ['cross',['cross',['../a00254.html#ga755beaa929c75751dee646cccba37e4c',1,'glm::cross(qua&lt; T, Q &gt; const &amp;q1, qua&lt; T, Q &gt; const &amp;q2)'],['../a00279.html#gaeeec0794212fe84fc9d261de067c9587',1,'glm::cross(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)'],['../a00322.html#gac36e72b934ea6a9dd313772d7e78fa93',1,'glm::cross(vec&lt; 2, T, Q &gt; const &amp;v, vec&lt; 2, T, Q &gt; const &amp;u)'],['../a00352.html#ga2f32f970411c44cdd38bb98960198385',1,'glm::cross(qua&lt; T, Q &gt; const &amp;q, vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00352.html#ga9f5f77255756e5668dfee7f0d07ed021',1,'glm::cross(vec&lt; 3, T, Q &gt; const &amp;v, qua&lt; T, Q &gt; const &amp;q)']]],\n  ['csc',['csc',['../a00301.html#ga59dd0005b6474eea48af743b4f14ebbb',1,'glm']]],\n  ['csch',['csch',['../a00301.html#ga6d95843ff3ca6472ab399ba171d290a0',1,'glm']]],\n  ['cubic',['cubic',['../a00358.html#ga6b867eb52e2fc933d2e0bf26aabc9a70',1,'glm']]],\n  ['cubiceasein',['cubicEaseIn',['../a00318.html#gaff52f746102b94864d105563ba8895ae',1,'glm']]],\n  ['cubiceaseinout',['cubicEaseInOut',['../a00318.html#ga55134072b42d75452189321d4a2ad91c',1,'glm']]],\n  ['cubiceaseout',['cubicEaseOut',['../a00318.html#ga40d746385d8bcc5973f5bc6a2340ca91',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_3.js",
    "content": "var searchData=\n[\n  ['decompose',['decompose',['../a00335.html#gac0e342656ba09a9bc97c57182ba73124',1,'glm']]],\n  ['degrees',['degrees',['../a00373.html#ga8faec9e303538065911ba8b3caf7326b',1,'glm']]],\n  ['derivedeuleranglex',['derivedEulerAngleX',['../a00319.html#ga994b8186b3b80d91cf90bc403164692f',1,'glm']]],\n  ['derivedeulerangley',['derivedEulerAngleY',['../a00319.html#ga0a4c56ecce7abcb69508ebe6313e9d10',1,'glm']]],\n  ['derivedeuleranglez',['derivedEulerAngleZ',['../a00319.html#gae8b397348201c42667be983ba3f344df',1,'glm']]],\n  ['determinant',['determinant',['../a00371.html#gad7928795124768e058f99dce270f5c8d',1,'glm']]],\n  ['diagonal2x2',['diagonal2x2',['../a00339.html#ga58a32a2beeb2478dae2a721368cdd4ac',1,'glm']]],\n  ['diagonal2x3',['diagonal2x3',['../a00339.html#gab69f900206a430e2875a5a073851e175',1,'glm']]],\n  ['diagonal2x4',['diagonal2x4',['../a00339.html#ga30b4dbfed60a919d66acc8a63bcdc549',1,'glm']]],\n  ['diagonal3x2',['diagonal3x2',['../a00339.html#ga832c805d5130d28ad76236958d15b47d',1,'glm']]],\n  ['diagonal3x3',['diagonal3x3',['../a00339.html#ga5487ff9cdbc8e04d594adef1bcb16ee0',1,'glm']]],\n  ['diagonal3x4',['diagonal3x4',['../a00339.html#gad7551139cff0c4208d27f0ad3437833e',1,'glm']]],\n  ['diagonal4x2',['diagonal4x2',['../a00339.html#gacb8969e6543ba775c6638161a37ac330',1,'glm']]],\n  ['diagonal4x3',['diagonal4x3',['../a00339.html#gae235def5049d6740f0028433f5e13f90',1,'glm']]],\n  ['diagonal4x4',['diagonal4x4',['../a00339.html#ga0b4cd8dea436791b072356231ee8578f',1,'glm']]],\n  ['diskrand',['diskRand',['../a00300.html#gaa0b18071f3f97dbf8bcf6f53c6fe5f73',1,'glm']]],\n  ['distance',['distance',['../a00279.html#gaa68de6c53e20dfb2dac2d20197562e3f',1,'glm']]],\n  ['distance2',['distance2',['../a00343.html#ga85660f1b79f66c09c7b5a6f80e68c89f',1,'glm']]],\n  ['dot',['dot',['../a00254.html#ga84865a56acb8fbd7bc4f5c0b928e3cfc',1,'glm::dot(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00279.html#gaad6c5d9d39bdc0bf43baf1b22e147a0a',1,'glm::dot(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['dual_5fquat_5fidentity',['dual_quat_identity',['../a00317.html#ga0b35c0e30df8a875dbaa751e0bd800e0',1,'glm']]],\n  ['dualquat_5fcast',['dualquat_cast',['../a00317.html#gac4064ff813759740201765350eac4236',1,'glm::dualquat_cast(mat&lt; 2, 4, T, Q &gt; const &amp;x)'],['../a00317.html#ga91025ebdca0f4ea54da08497b00e8c84',1,'glm::dualquat_cast(mat&lt; 3, 4, T, Q &gt; const &amp;x)']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_4.js",
    "content": "var searchData=\n[\n  ['e',['e',['../a00290.html#ga4b7956eb6e2fbedfc7cf2e46e85c5139',1,'glm']]],\n  ['elasticeasein',['elasticEaseIn',['../a00318.html#ga230918eccee4e113d10ec5b8cdc58695',1,'glm']]],\n  ['elasticeaseinout',['elasticEaseInOut',['../a00318.html#ga2db4ac8959559b11b4029e54812908d6',1,'glm']]],\n  ['elasticeaseout',['elasticEaseOut',['../a00318.html#gace9c9d1bdf88bf2ab1e7cdefa54c7365',1,'glm']]],\n  ['epsilon',['epsilon',['../a00259.html#ga2a1e57fc5592b69cfae84174cbfc9429',1,'glm']]],\n  ['epsilonequal',['epsilonEqual',['../a00291.html#ga91b417866cafadd076004778217a1844',1,'glm::epsilonEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T const &amp;epsilon)'],['../a00291.html#gaa7f227999ca09e7ca994e8b35aba47bb',1,'glm::epsilonEqual(genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)']]],\n  ['epsilonnotequal',['epsilonNotEqual',['../a00291.html#gaf840d33b9a5261ec78dcd5125743b025',1,'glm::epsilonNotEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T const &amp;epsilon)'],['../a00291.html#ga50a92103fb0cbd796908e1bf20c79aaf',1,'glm::epsilonNotEqual(genType const &amp;x, genType const &amp;y, genType const &amp;epsilon)']]],\n  ['equal',['equal',['../a00246.html#ga27e90dcb7941c9b70e295dc3f6f6369f',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)'],['../a00246.html#gaf5d687d70d11708b68c36c6db5777040',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, T epsilon)'],['../a00246.html#gafa6a053e81179fa4292b35651c83c3fb',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, T, Q &gt; const &amp;epsilon)'],['../a00246.html#gab3a93f19e72e9141f50527c9de21d0c0',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, int ULPs)'],['../a00246.html#ga5305af376173f1902719fa309bbae671',1,'glm::equal(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)'],['../a00255.html#gad7827af0549504ff1cd6a359786acc7a',1,'glm::equal(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00255.html#gaa001eecb91106463169a8e5ef1577b39',1,'glm::equal(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)'],['../a00275.html#ga2ac7651a2fa7354f2da610dbd50d28e2',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T epsilon)'],['../a00275.html#ga37d261a65f69babc82cec2ae1af7145f',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;epsilon)'],['../a00275.html#ga2b46cb50911e97b32f4cd743c2c69771',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, int ULPs)'],['../a00275.html#ga7da2b8605be7f245b39cb6fbf6d9d581',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)'],['../a00374.html#gab4c5cfdaa70834421397a85aa83ad946',1,'glm::equal(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['euclidean',['euclidean',['../a00350.html#ga1821d5b3324201e60a9e2823d0b5d0c8',1,'glm']]],\n  ['euler',['euler',['../a00290.html#gad8fe2e6f90bce9d829e9723b649fbd42',1,'glm']]],\n  ['eulerangles',['eulerAngles',['../a00299.html#gaf4dd967dead22dd932fc7460ceecb03f',1,'glm']]],\n  ['euleranglex',['eulerAngleX',['../a00319.html#gafba6282e4ed3ff8b5c75331abfba3489',1,'glm']]],\n  ['euleranglexy',['eulerAngleXY',['../a00319.html#ga64036577ee17a2d24be0dbc05881d4e2',1,'glm']]],\n  ['euleranglexyx',['eulerAngleXYX',['../a00319.html#ga29bd0787a28a6648159c0d6e69706066',1,'glm']]],\n  ['euleranglexyz',['eulerAngleXYZ',['../a00319.html#ga1975e0f0e9bed7f716dc9946da2ab645',1,'glm']]],\n  ['euleranglexz',['eulerAngleXZ',['../a00319.html#gaa39bd323c65c2fc0a1508be33a237ce9',1,'glm']]],\n  ['euleranglexzx',['eulerAngleXZX',['../a00319.html#ga60171c79a17aec85d7891ae1d1533ec9',1,'glm']]],\n  ['euleranglexzy',['eulerAngleXZY',['../a00319.html#ga996dce12a60d8a674ba6737a535fa910',1,'glm']]],\n  ['eulerangley',['eulerAngleY',['../a00319.html#gab84bf4746805fd69b8ecbb230e3974c5',1,'glm']]],\n  ['eulerangleyx',['eulerAngleYX',['../a00319.html#ga4f57e6dd25c3cffbbd4daa6ef3f4486d',1,'glm']]],\n  ['eulerangleyxy',['eulerAngleYXY',['../a00319.html#ga750fba9894117f87bcc529d7349d11de',1,'glm']]],\n  ['eulerangleyxz',['eulerAngleYXZ',['../a00319.html#gab8ba99a9814f6d9edf417b6c6d5b0c10',1,'glm']]],\n  ['eulerangleyz',['eulerAngleYZ',['../a00319.html#ga220379e10ac8cca55e275f0c9018fed9',1,'glm']]],\n  ['eulerangleyzx',['eulerAngleYZX',['../a00319.html#ga08bef16357b8f9b3051b3dcaec4b7848',1,'glm']]],\n  ['eulerangleyzy',['eulerAngleYZY',['../a00319.html#ga5e5e40abc27630749b42b3327c76d6e4',1,'glm']]],\n  ['euleranglez',['eulerAngleZ',['../a00319.html#ga5b3935248bb6c3ec6b0d9297d406e251',1,'glm']]],\n  ['euleranglezx',['eulerAngleZX',['../a00319.html#ga483903115cd4059228961046a28d69b5',1,'glm']]],\n  ['euleranglezxy',['eulerAngleZXY',['../a00319.html#gab4505c54d2dd654df4569fd1f04c43aa',1,'glm']]],\n  ['euleranglezxz',['eulerAngleZXZ',['../a00319.html#ga178f966c52b01e4d65e31ebd007e3247',1,'glm']]],\n  ['euleranglezy',['eulerAngleZY',['../a00319.html#ga400b2bd5984999efab663f3a68e1d020',1,'glm']]],\n  ['euleranglezyx',['eulerAngleZYX',['../a00319.html#ga2e61f1e39069c47530acab9167852dd6',1,'glm']]],\n  ['euleranglezyz',['eulerAngleZYZ',['../a00319.html#gacd795f1dbecaf74974f9c76bbcca6830',1,'glm']]],\n  ['exp',['exp',['../a00242.html#ga071566cadc7505455e611f2a0353f4d4',1,'glm::exp(vec&lt; L, T, Q &gt; const &amp;v)'],['../a00256.html#gaab2d37ef7265819f1d2939b9dc2c52ac',1,'glm::exp(qua&lt; T, Q &gt; const &amp;q)']]],\n  ['exp2',['exp2',['../a00242.html#gaff17ace6b579a03bf223ed4d1ed2cd16',1,'glm']]],\n  ['exponentialeasein',['exponentialEaseIn',['../a00318.html#ga7f24ee9219ab4c84dc8de24be84c1e3c',1,'glm']]],\n  ['exponentialeaseinout',['exponentialEaseInOut',['../a00318.html#ga232fb6dc093c5ce94bee105ff2947501',1,'glm']]],\n  ['exponentialeaseout',['exponentialEaseOut',['../a00318.html#ga517f2bcfd15bc2c25c466ae50808efc3',1,'glm']]],\n  ['extend',['extend',['../a00320.html#ga8140caae613b0f847ab0d7175dc03a37',1,'glm']]],\n  ['extracteuleranglexyx',['extractEulerAngleXYX',['../a00319.html#gaf1077a72171d0f3b08f022ab5ff88af7',1,'glm']]],\n  ['extracteuleranglexyz',['extractEulerAngleXYZ',['../a00319.html#gacea701562f778c1da4d3a0a1cf091000',1,'glm']]],\n  ['extracteuleranglexzx',['extractEulerAngleXZX',['../a00319.html#gacf0bc6c031f25fa3ee0055b62c8260d0',1,'glm']]],\n  ['extracteuleranglexzy',['extractEulerAngleXZY',['../a00319.html#gabe5a65d8eb1cd873c8de121cce1a15ed',1,'glm']]],\n  ['extracteulerangleyxy',['extractEulerAngleYXY',['../a00319.html#gaab8868556361a190db94374e9983ed39',1,'glm']]],\n  ['extracteulerangleyxz',['extractEulerAngleYXZ',['../a00319.html#gaf0937518e63037335a0e8358b6f053c5',1,'glm']]],\n  ['extracteulerangleyzx',['extractEulerAngleYZX',['../a00319.html#ga9049b78466796c0de2971756e25b93d3',1,'glm']]],\n  ['extracteulerangleyzy',['extractEulerAngleYZY',['../a00319.html#ga11dad972c109e4bf8694c915017c44a6',1,'glm']]],\n  ['extracteuleranglezxy',['extractEulerAngleZXY',['../a00319.html#ga81fbbca2ba0c778b9662d5355b4e2363',1,'glm']]],\n  ['extracteuleranglezxz',['extractEulerAngleZXZ',['../a00319.html#ga59359fef9bad92afaca55e193f91e702',1,'glm']]],\n  ['extracteuleranglezyx',['extractEulerAngleZYX',['../a00319.html#ga2d6c11a4abfa60c565483cee2d3f7665',1,'glm']]],\n  ['extracteuleranglezyz',['extractEulerAngleZYZ',['../a00319.html#gafdfa880a64b565223550c2d3938b1aeb',1,'glm']]],\n  ['extractmatrixrotation',['extractMatrixRotation',['../a00337.html#gabbc1c7385a145f04b5c54228965df145',1,'glm']]],\n  ['extractrealcomponent',['extractRealComponent',['../a00352.html#ga321953c1b2e7befe6f5dcfddbfc6b76b',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_5.js",
    "content": "var searchData=\n[\n  ['faceforward',['faceforward',['../a00279.html#ga7aed0a36c738169402404a3a5d54e43b',1,'glm']]],\n  ['factorial',['factorial',['../a00330.html#ga8cbd3120905f398ec321b5d1836e08fb',1,'glm']]],\n  ['fastacos',['fastAcos',['../a00325.html#ga9721d63356e5d94fdc4b393a426ab26b',1,'glm']]],\n  ['fastasin',['fastAsin',['../a00325.html#ga562cb62c51fbfe7fac7db0bce706b81f',1,'glm']]],\n  ['fastatan',['fastAtan',['../a00325.html#ga8d197c6ef564f5e5d59af3b3f8adcc2c',1,'glm::fastAtan(T y, T x)'],['../a00325.html#gae25de86a968490ff56856fa425ec9d30',1,'glm::fastAtan(T angle)']]],\n  ['fastcos',['fastCos',['../a00325.html#gab34c8b45c23c0165a64dcecfcc3b302a',1,'glm']]],\n  ['fastdistance',['fastDistance',['../a00324.html#gaac333418d0c4e0cc6d3d219ed606c238',1,'glm::fastDistance(genType x, genType y)'],['../a00324.html#ga42d3e771fa7cb3c60d828e315829df19',1,'glm::fastDistance(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['fastexp',['fastExp',['../a00323.html#gaa3180ac8f96ab37ab96e0cacaf608e10',1,'glm::fastExp(T x)'],['../a00323.html#ga3ba6153aec6bd74628f8b00530aa8d58',1,'glm::fastExp(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastexp2',['fastExp2',['../a00323.html#ga0af50585955eb14c60bb286297fabab2',1,'glm::fastExp2(T x)'],['../a00323.html#gacaaed8b67d20d244b7de217e7816c1b6',1,'glm::fastExp2(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastinversesqrt',['fastInverseSqrt',['../a00324.html#ga7f081b14d9c7035c8714eba5f7f75a8f',1,'glm::fastInverseSqrt(genType x)'],['../a00324.html#gadcd7be12b1e5ee182141359d4c45dd24',1,'glm::fastInverseSqrt(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastlength',['fastLength',['../a00324.html#gafe697d6287719538346bbdf8b1367c59',1,'glm::fastLength(genType x)'],['../a00324.html#ga90f66be92ef61e705c005e7b3209edb8',1,'glm::fastLength(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastlog',['fastLog',['../a00323.html#gae1bdc97b7f96a600e29c753f1cd4388a',1,'glm::fastLog(T x)'],['../a00323.html#ga937256993a7219e73f186bb348fe6be8',1,'glm::fastLog(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastlog2',['fastLog2',['../a00323.html#ga6e98118685f6dc9e05fbb13dd5e5234e',1,'glm::fastLog2(T x)'],['../a00323.html#ga7562043539194ccc24649f8475bc5584',1,'glm::fastLog2(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastmix',['fastMix',['../a00352.html#ga264e10708d58dd0ff53b7902a2bd2561',1,'glm']]],\n  ['fastnormalize',['fastNormalize',['../a00324.html#ga3b02c1d6e0c754144e2f1e110bf9f16c',1,'glm']]],\n  ['fastnormalizedot',['fastNormalizeDot',['../a00345.html#ga2746fb9b5bd22b06b2f7c8babba5de9e',1,'glm']]],\n  ['fastpow',['fastPow',['../a00323.html#ga5340e98a11fcbbd936ba6e983a154d50',1,'glm::fastPow(genType x, genType y)'],['../a00323.html#ga15325a8ed2d1c4ed2412c4b3b3927aa2',1,'glm::fastPow(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00323.html#ga7f2562db9c3e02ae76169c36b086c3f6',1,'glm::fastPow(genTypeT x, genTypeU y)'],['../a00323.html#ga1abe488c0829da5b9de70ac64aeaa7e5',1,'glm::fastPow(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fastsin',['fastSin',['../a00325.html#ga0aab3257bb3b628d10a1e0483e2c6915',1,'glm']]],\n  ['fastsqrt',['fastSqrt',['../a00324.html#ga6c460e9414a50b2fc455c8f64c86cdc9',1,'glm::fastSqrt(genType x)'],['../a00324.html#gae83f0c03614f73eae5478c5b6274ee6d',1,'glm::fastSqrt(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['fasttan',['fastTan',['../a00325.html#gaf29b9c1101a10007b4f79ee89df27ba2',1,'glm']]],\n  ['fclamp',['fclamp',['../a00321.html#ga1e28539d3a46965ed9ef92ec7cb3b18a',1,'glm::fclamp(genType x, genType minVal, genType maxVal)'],['../a00321.html#ga60796d08903489ee185373593bc16b9d',1,'glm::fclamp(vec&lt; L, T, Q &gt; const &amp;x, T minVal, T maxVal)'],['../a00321.html#ga5c15fa4709763c269c86c0b8b3aa2297',1,'glm::fclamp(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;minVal, vec&lt; L, T, Q &gt; const &amp;maxVal)']]],\n  ['findlsb',['findLSB',['../a00370.html#gaf74c4d969fa34ab8acb9d390f5ca5274',1,'glm::findLSB(genIUType x)'],['../a00370.html#ga4454c0331d6369888c28ab677f4810c7',1,'glm::findLSB(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['findmsb',['findMSB',['../a00370.html#ga7e4a794d766861c70bc961630f8ef621',1,'glm::findMSB(genIUType x)'],['../a00370.html#ga39ac4d52028bb6ab08db5ad6562c2872',1,'glm::findMSB(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['findnsb',['findNSB',['../a00261.html#ga2777901e41ad6e1e9d0ad6cc855d1075',1,'glm::findNSB(genIUType x, int significantBitCount)'],['../a00274.html#gaff61eca266da315002a3db92ff0dd604',1,'glm::findNSB(vec&lt; L, T, Q &gt; const &amp;Source, vec&lt; L, int, Q &gt; SignificantBitCount)']]],\n  ['fliplr',['fliplr',['../a00336.html#gaf39f4e5f78eb29c1a90277d45b9b3feb',1,'glm']]],\n  ['flipud',['flipud',['../a00336.html#ga85003371f0ba97380dd25e8905de1870',1,'glm']]],\n  ['floatbitstoint',['floatBitsToInt',['../a00241.html#ga1425c1c3160ec51214b03a0469a3013d',1,'glm::floatBitsToInt(float const &amp;v)'],['../a00241.html#ga99f7d62f78ac5ea3b49bae715c9488ed',1,'glm::floatBitsToInt(vec&lt; L, float, Q &gt; const &amp;v)']]],\n  ['floatbitstouint',['floatBitsToUint',['../a00241.html#ga70e0271c34af52f3100c7960e18c3f2b',1,'glm::floatBitsToUint(float const &amp;v)'],['../a00241.html#ga49418ba4c8a60fbbb5d57b705f3e26db',1,'glm::floatBitsToUint(vec&lt; L, float, Q &gt; const &amp;v)']]],\n  ['floor',['floor',['../a00241.html#gaa9d0742639e85b29c7c5de11cfd6840d',1,'glm']]],\n  ['floor_5flog2',['floor_log2',['../a00330.html#ga7011b4e1c1e1ed492149b028feacc00e',1,'glm']]],\n  ['floormultiple',['floorMultiple',['../a00302.html#ga2ffa3cd5f2ea746ee1bf57c46da6315e',1,'glm::floorMultiple(genType v, genType Multiple)'],['../a00302.html#gacdd8901448f51f0b192380e422fae3e4',1,'glm::floorMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['floorpoweroftwo',['floorPowerOfTwo',['../a00302.html#gafe273a57935d04c9db677bf67f9a71f4',1,'glm::floorPowerOfTwo(genIUType v)'],['../a00302.html#gaf0d591a8fca8ddb9289cdeb44b989c2d',1,'glm::floorPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['fma',['fma',['../a00241.html#gad0f444d4b81cc53c3b6edf5aa25078c2',1,'glm']]],\n  ['fmax',['fmax',['../a00258.html#ga36920478565cf608e93064283ce06421',1,'glm::fmax(T a, T b)'],['../a00258.html#ga0007bba71ca451ac70e99d28dfbeaab9',1,'glm::fmax(T a, T b, T C)'],['../a00258.html#ga27e260b1ff4d04c3ad4b864d26cbaf08',1,'glm::fmax(T a, T b, T C, T D)'],['../a00267.html#gad66b6441f7200db16c9f341711733c56',1,'glm::fmax(vec&lt; L, T, Q &gt; const &amp;a, T b)'],['../a00267.html#ga8df4be3f48d6717c40ea788fd30deebf',1,'glm::fmax(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b)'],['../a00267.html#ga0f04ba924294dae4234ca93ede23229a',1,'glm::fmax(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)'],['../a00267.html#ga4ed3eb250ccbe17bfe8ded8a6b72d230',1,'glm::fmax(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)'],['../a00321.html#gae5792cb2b51190057e4aea027eb56f81',1,'glm::fmax(genType x, genType y)']]],\n  ['fmin',['fmin',['../a00258.html#ga7b2b438a765e2a62098c79eb212f28f0',1,'glm::fmin(T a, T b)'],['../a00258.html#ga1a95fe4cf5437e8133f1093fe9726a64',1,'glm::fmin(T a, T b, T c)'],['../a00258.html#ga3d6f9c6c16bfd6f38f2c4f8076e8b661',1,'glm::fmin(T a, T b, T c, T d)'],['../a00267.html#gae989203363cff9eab5093630df4fe071',1,'glm::fmin(vec&lt; L, T, Q &gt; const &amp;x, T y)'],['../a00267.html#ga7c42e93cd778c9181d1cdeea4d3e43bd',1,'glm::fmin(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00267.html#ga7e62739055b49189d9355471f78fe000',1,'glm::fmin(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)'],['../a00267.html#ga4a543dd7d22ad1f3b8b839f808a9d93c',1,'glm::fmin(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)'],['../a00321.html#gaa3200559611ac5b9b9ae7283547916a7',1,'glm::fmin(genType x, genType y)']]],\n  ['fmod',['fmod',['../a00314.html#gae5e80425df9833164ad469e83b475fb4',1,'glm']]],\n  ['four_5fover_5fpi',['four_over_pi',['../a00290.html#ga753950e5140e4ea6a88e4a18ba61dc09',1,'glm']]],\n  ['fract',['fract',['../a00241.html#ga8ba89e40e55ae5cdf228548f9b7639c7',1,'glm::fract(genType x)'],['../a00241.html#ga2df623004f634b440d61e018d62c751b',1,'glm::fract(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['frexp',['frexp',['../a00241.html#gaddf5ef73283c171730e0bcc11833fa81',1,'glm']]],\n  ['frustum',['frustum',['../a00243.html#ga0bcd4542e0affc63a0b8c08fcb839ea9',1,'glm']]],\n  ['frustumlh',['frustumLH',['../a00243.html#gae4277c37f61d81da01bc9db14ea90296',1,'glm']]],\n  ['frustumlh_5fno',['frustumLH_NO',['../a00243.html#ga259520cad03b3f8bca9417920035ed01',1,'glm']]],\n  ['frustumlh_5fzo',['frustumLH_ZO',['../a00243.html#ga94218b094862d17798370242680b9030',1,'glm']]],\n  ['frustumno',['frustumNO',['../a00243.html#gae34ec664ad44860bf4b5ba631f0e0e90',1,'glm']]],\n  ['frustumrh',['frustumRH',['../a00243.html#ga4366ab45880c6c5f8b3e8c371ca4b136',1,'glm']]],\n  ['frustumrh_5fno',['frustumRH_NO',['../a00243.html#ga9236c8439f21be186b79c97b588836b9',1,'glm']]],\n  ['frustumrh_5fzo',['frustumRH_ZO',['../a00243.html#ga7654a9227f14d5382786b9fc0eb5692d',1,'glm']]],\n  ['frustumzo',['frustumZO',['../a00243.html#gaa73322e152edf50cf30a6edac342a757',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_6.js",
    "content": "var searchData=\n[\n  ['gauss',['gauss',['../a00326.html#ga0b50b197ff74261a0fad90f4b8d24702',1,'glm::gauss(T x, T ExpectedValue, T StandardDeviation)'],['../a00326.html#gad19ec8754a83c0b9a8dc16b7e60705ab',1,'glm::gauss(vec&lt; 2, T, Q &gt; const &amp;Coord, vec&lt; 2, T, Q &gt; const &amp;ExpectedValue, vec&lt; 2, T, Q &gt; const &amp;StandardDeviation)']]],\n  ['gaussrand',['gaussRand',['../a00300.html#ga5193a83e49e4fdc5652c084711083574',1,'glm']]],\n  ['glm_5faligned_5ftypedef',['GLM_ALIGNED_TYPEDEF',['../a00364.html#gab5cd5c5fad228b25c782084f1cc30114',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1)'],['../a00364.html#ga5bb5dd895ef625c1b113f2cf400186b0',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2)'],['../a00364.html#gac6efa54cf7c6c86f7158922abdb1a430',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4)'],['../a00364.html#ga6612eb77c8607048e7552279a11eeb5f',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8)'],['../a00364.html#ga7ddc1848ff2223026db8968ce0c97497',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1)'],['../a00364.html#ga22240dd9458b0f8c11fbcc4f48714f68',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2)'],['../a00364.html#ga8130ea381d76a2cc34a93ccbb6cf487d',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4)'],['../a00364.html#ga7ccb60f3215d293fd62b33b31ed0e7be',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8)'],['../a00364.html#gac20d508d2ef5cc95ad3daf083c57ec2a',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1)'],['../a00364.html#ga50257b48069a31d0c8d9c1f644d267de',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2)'],['../a00364.html#gaa07e98e67b7a3435c0746018c7a2a839',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4)'],['../a00364.html#ga62601fc6f8ca298b77285bedf03faffd',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8)'],['../a00364.html#gac8cff825951aeb54dd846037113c72db',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1)'],['../a00364.html#ga78f443d88f438575a62b5df497cdf66b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2)'],['../a00364.html#ga0680cd3b5d4e8006985fb41a4f9b57af',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4)'],['../a00364.html#gad9e5babb1dd3e3531b42c37bf25dd951',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8)'],['../a00364.html#ga353fd9fa8a9ad952fcabd0d53ad9a6dd',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1)'],['../a00364.html#ga2196442c0e5c5e8c77842de388c42521',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2)'],['../a00364.html#ga1284488189daf897cf095c5eefad9744',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4)'],['../a00364.html#ga73fdc86a539808af58808b7c60a1c4d8',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8)'],['../a00364.html#gafafeea923e1983262c972e2b83922d3b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1)'],['../a00364.html#ga4b35ca5fe8f55c9d2fe54fdb8d8896f4',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2)'],['../a00364.html#ga63b882e29170d428463d99c3d630acc6',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4)'],['../a00364.html#ga8b20507bb048c1edea2d441cc953e6f0',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8)'],['../a00364.html#ga56c5ca60813027b603c7b61425a0479d',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1)'],['../a00364.html#ga7a751b3aff24c0259f4a7357c2969089',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2)'],['../a00364.html#ga70cd2144351c556469ee6119e59971fc',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4)'],['../a00364.html#ga46bbf08dc004d8c433041e0b5018a5d3',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8)'],['../a00364.html#gab3e10c77a20d1abad2de1c561c7a5c18',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1)'],['../a00364.html#ga968f30319ebeaca9ebcd3a25a8e139fb',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2)'],['../a00364.html#gaae773c28e6390c6aa76f5b678b7098a3',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4)'],['../a00364.html#ga790cfff1ca39d0ed696ffed980809311',1,'glm::GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8)'],['../a00364.html#ga8265b91eb23c120a9b0c3e381bc37b96',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1)'],['../a00364.html#gae6d384de17588d8edb894fbe06e0d410',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2)'],['../a00364.html#ga9c8172b745ee03fc5b2b91c350c2922f',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4)'],['../a00364.html#ga77e0dff12aa4020ddc3f8cabbea7b2e6',1,'glm::GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8)'],['../a00364.html#gabd82b9faa9d4d618dbbe0fc8a1efee63',1,'glm::GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1)'],['../a00364.html#ga285649744560be21000cfd81bbb5d507',1,'glm::GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2)'],['../a00364.html#ga07732da630b2deda428ce95c0ecaf3ff',1,'glm::GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4)'],['../a00364.html#ga1a8da2a8c51f69c07a2e7f473aa420f4',1,'glm::GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8)'],['../a00364.html#ga848aedf13e2d9738acf0bb482c590174',1,'glm::GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1)'],['../a00364.html#gafd2803d39049dd45a37a63931e25d943',1,'glm::GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2)'],['../a00364.html#gae553b33349d6da832cf0724f1e024094',1,'glm::GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4)'],['../a00364.html#ga16d223a2b3409e812e1d3bd87f0e9e5c',1,'glm::GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8)'],['../a00364.html#ga2de065d2ddfdb366bcd0febca79ae2ad',1,'glm::GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1)'],['../a00364.html#gabd786bdc20a11c8cb05c92c8212e28d3',1,'glm::GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2)'],['../a00364.html#gad4aefe56691cdb640c72f0d46d3fb532',1,'glm::GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4)'],['../a00364.html#ga8fe9745f7de24a8394518152ff9fccdc',1,'glm::GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8)'],['../a00364.html#gaaad735483450099f7f882d4e3a3569bd',1,'glm::GLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4)'],['../a00364.html#gac7b6f823802edbd6edbaf70ea25bf068',1,'glm::GLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8)'],['../a00364.html#ga3e235bcd2b8029613f25b8d40a2d3ef7',1,'glm::GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16)'],['../a00364.html#ga50d8a9523968c77f8325b4c9bfbff41e',1,'glm::GLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16)'],['../a00364.html#ga9ec20fdfb729c702032da9378c79679f',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1)'],['../a00364.html#ga25b3fe1d9e8d0a5e86c1949c1acd8131',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2)'],['../a00364.html#ga2958f907719d94d8109b562540c910e2',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4)'],['../a00364.html#ga1fe6fc032a978f1c845fac9aa0668714',1,'glm::GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4)'],['../a00364.html#gaa4161e7a496dc96972254143fe873e55',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2)'],['../a00364.html#ga9d7cb211ccda69b1c22ddeeb0f3e7aba',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4)'],['../a00364.html#gaaee91dd2ab34423bcc11072ef6bd0f02',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8)'],['../a00364.html#ga49f047ccaa8b31fad9f26c67bf9b3510',1,'glm::GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8)'],['../a00364.html#ga904e9c2436bb099397c0823506a0771f',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4)'],['../a00364.html#gaf90651cf2f5e7ee2b11cfdc5a6749534',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8)'],['../a00364.html#ga7354a4ead8cb17868aec36b9c30d6010',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16)'],['../a00364.html#gad2ecbdea18732163e2636e27b37981ee',1,'glm::GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16)'],['../a00364.html#ga965b1c9aa1800e93d4abc2eb2b5afcbf',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8)'],['../a00364.html#ga1f9e9c2ea2768675dff9bae5cde2d829',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16)'],['../a00364.html#gad77c317b7d942322cd5be4c8127b3187',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32)'],['../a00364.html#ga716f8ea809bdb11b5b542d8b71aeb04f',1,'glm::GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32)'],['../a00364.html#gad46f8e9082d5878b1bc04f9c1471cdaa',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1)'],['../a00364.html#ga1246094581af624aca6c7499aaabf801',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2)'],['../a00364.html#ga7a5009a1d0196bbf21dd7518f61f0249',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4)'],['../a00364.html#ga45213fd18b3bb1df391671afefe4d1e7',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8)'],['../a00364.html#ga0ba26b4e3fd9ecbc25358efd68d8a4ca',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1)'],['../a00364.html#gaf2b58f5fb6d4ec8ce7b76221d3af43e1',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2)'],['../a00364.html#gadc246401847dcba155f0699425e49dcd',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4)'],['../a00364.html#gaace64bddf51a9def01498da9a94fb01c',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8)'],['../a00364.html#gad7bb97c29d664bd86ffb1bed4abc5534',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1)'],['../a00364.html#ga404bba7785130e0b1384d695a9450b28',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2)'],['../a00364.html#ga31ba41fd896257536958ec6080203d2a',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4)'],['../a00364.html#gacca5f13627f57b3505676e40a6e43e5e',1,'glm::GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8)'],['../a00364.html#ga5faf1d3e70bf33174dd7f3d01d5b883b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1)'],['../a00364.html#ga727e2bf2c433bb3b0182605860a48363',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2)'],['../a00364.html#ga12566ca66d5962dadb4a5eb4c74e891e',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4)'],['../a00364.html#ga7b66a97a8acaa35c5a377b947318c6bc',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8)'],['../a00364.html#gaa9cde002439b74fa66120a16a9f55fcc',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1)'],['../a00364.html#ga1ca98c67f7d1e975f7c5202f1da1df1f',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2)'],['../a00364.html#ga1dc8bc6199d785f235576948d80a597c',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4)'],['../a00364.html#gad14a0f2ec93519682b73d70b8e401d81',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8)'],['../a00364.html#gada8b996eb6526dc1ead813bd49539d1b',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1)'],['../a00364.html#ga28948f6bfb52b42deb9d73ae1ea8d8b0',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2)'],['../a00364.html#gad6a7c0b5630f89d3f1c5b4ef2919bb4c',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4)'],['../a00364.html#gaa0fc531cbaa972ac3a0b86d21ef4a7fa',1,'glm::GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8)'],['../a00364.html#ga0ee829f7b754b262bbfe6317c0d678ac',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1)'],['../a00364.html#ga447848a817a626cae08cedc9778b331c',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2)'],['../a00364.html#ga6027ae13b2734f542a6e7beee11b8820',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4)'],['../a00364.html#ga2aca46c8608c95ef991ee4c332acde5f',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8)'],['../a00364.html#gaff50b10dd1c48be324fdaffd18e2c7ea',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1)'],['../a00364.html#ga9fc4421dbb833d5461e6d4e59dcfde55',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2)'],['../a00364.html#ga329f1e2b94b33ba5e3918197030bcf03',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4)'],['../a00364.html#ga71e646f7e301aa422328194162c9c998',1,'glm::GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8)'],['../a00364.html#ga8942e09f479489441a7a5004c6d8cb66',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1)'],['../a00364.html#gaab32497d6e4db16ee439dbedd64c5865',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2)'],['../a00364.html#gaaadbb34952eca8e3d7fe122c3e167742',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4)'],['../a00364.html#ga92024d27c74a3650afb55ec8e024ed25',1,'glm::GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8)'],['../a00364.html#gabde1d0b4072df35453db76075ab896a6',1,'glm::GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1)'],['../a00364.html#ga06c296c9e398b294c8c9dd2a7693dcbb',1,'glm::GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2)'],['../a00364.html#gacf1744488c96ebd33c9f36ad33b2010a',1,'glm::GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4)'],['../a00364.html#ga3328061a64c20ba59d5f9da24c2cd059',1,'glm::GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8)'],['../a00364.html#gaf6ced36f13bae57f377bafa6f5fcc299',1,'glm::GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1)'],['../a00364.html#gafbc7fb7847bfc78a339d1d371c915c73',1,'glm::GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2)'],['../a00364.html#gaa86bc56a73fd8120b1121b5f5e6245ae',1,'glm::GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4)'],['../a00364.html#ga68c0b9e669060d0eb5ab8c3ddeb483d8',1,'glm::GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8)'],['../a00364.html#ga4f3bab577daf3343e99cc005134bce86',1,'glm::GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1)'],['../a00364.html#ga13a2391339d0790d43b76d00a7611c4f',1,'glm::GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2)'],['../a00364.html#ga197570e03acbc3d18ab698e342971e8f',1,'glm::GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4)'],['../a00364.html#ga0f033b21e145a1faa32c62ede5878993',1,'glm::GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8)'],['../a00364.html#ga509af83527f5cd512e9a7873590663aa',1,'glm::GLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4)'],['../a00364.html#ga94e86186978c502c6dc0c0d9c4a30679',1,'glm::GLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8)'],['../a00364.html#ga5cec574686a7f3c8ed24bb195c5e2d0a',1,'glm::GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16)'],['../a00364.html#ga47edfdcee9c89b1ebdaf20450323b1d4',1,'glm::GLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16)'],['../a00364.html#ga5611d6718e3a00096918a64192e73a45',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1)'],['../a00364.html#ga19837e6f72b60d994a805ef564c6c326',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2)'],['../a00364.html#ga9740cf8e34f068049b42a2753f9601c2',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4)'],['../a00364.html#ga8b8588bb221448f5541a858903822a57',1,'glm::GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4)'],['../a00364.html#ga991abe990c16de26b2129d6bc2f4c051',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2)'],['../a00364.html#gac01bb9fc32a1cd76c2b80d030f71df4c',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4)'],['../a00364.html#ga09540dbca093793a36a8997e0d4bee77',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8)'],['../a00364.html#gaecafb5996f5a44f57e34d29c8670741e',1,'glm::GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8)'],['../a00364.html#gac6b161a04d2f8408fe1c9d857e8daac0',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4)'],['../a00364.html#ga1fa0dfc8feb0fa17dab2acd43e05342b',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8)'],['../a00364.html#ga0019500abbfa9c66eff61ca75eaaed94',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16)'],['../a00364.html#ga14fd29d01dae7b08a04e9facbcc18824',1,'glm::GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16)'],['../a00364.html#gab253845f534a67136f9619843cade903',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8)'],['../a00364.html#ga929427a7627940cdf3304f9c050b677d',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16)'],['../a00364.html#gae373b6c04fdf9879f33d63e6949c037e',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32)'],['../a00364.html#ga53a8a03dca2015baec4584f45b8e9cdc',1,'glm::GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32)'],['../a00364.html#gab3301bae94ef5bf59fbdd9a24e7d2a01',1,'glm::GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4)'],['../a00364.html#gada9b0bea273d3ae0286f891533b9568f',1,'glm::GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4)'],['../a00364.html#gadbce23b9f23d77bb3884e289a574ebd5',1,'glm::GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4)'],['../a00364.html#ga75930684ff2233171c573e603f216162',1,'glm::GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8)'],['../a00364.html#ga6e3a2d83b131336219a0f4c7cbba2a48',1,'glm::GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8)'],['../a00364.html#gaa4deaa0dea930c393d55e7a4352b0a20',1,'glm::GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8)'],['../a00364.html#ga81bc497b2bfc6f80bab690c6ee28f0f9',1,'glm::GLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4)'],['../a00364.html#gada3e8f783e9d4b90006695a16c39d4d4',1,'glm::GLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8)'],['../a00364.html#gab8d081fac3a38d6f55fa552f32168d32',1,'glm::GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16)'],['../a00364.html#ga12fe7b9769c964c5b48dcfd8b7f40198',1,'glm::GLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16)'],['../a00364.html#gaefab04611c7f8fe1fd9be3071efea6cc',1,'glm::GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4)'],['../a00364.html#ga2543c05ba19b3bd19d45b1227390c5b4',1,'glm::GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8)'],['../a00364.html#ga009afd727fd657ef33a18754d6d28f60',1,'glm::GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16)'],['../a00364.html#ga2f26177e74bfb301a3d0e02ec3c3ef53',1,'glm::GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16)'],['../a00364.html#ga309f495a1d6b75ddf195b674b65cb1e4',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4)'],['../a00364.html#ga5e185865a2217d0cd47187644683a8c3',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8)'],['../a00364.html#gade4458b27b039b9ca34f8ec049f3115a',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16)'],['../a00364.html#ga2e8a12c5e6a9c4ae4ddaeda1d1cffe3b',1,'glm::GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16)'],['../a00364.html#ga3e0f35fa0c626285a8bad41707e7316c',1,'glm::GLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8)'],['../a00364.html#ga78bfec2f185d1d365ea0a9ef1e3d45b8',1,'glm::GLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16)'],['../a00364.html#ga01fe6fee6db5df580b6724a7e681f069',1,'glm::GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32)'],['../a00364.html#ga687d5b8f551d5af32425c0b2fba15e99',1,'glm::GLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32)'],['../a00364.html#ga8e842371d46842ff8f1813419ba49d0f',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8)'],['../a00364.html#ga32814aa0f19316b43134fc25f2aad2b9',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16)'],['../a00364.html#gaf3d3bbc1e93909b689123b085e177a14',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32)'],['../a00364.html#ga804c654cead1139bd250f90f9bb01fad',1,'glm::GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32)'],['../a00364.html#gacce4ac532880b8c7469d3c31974420a1',1,'glm::GLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16)'],['../a00364.html#ga0498e0e249a6faddaf96aa55d7f81c3b',1,'glm::GLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16)'],['../a00364.html#ga7435d87de82a0d652b35dc5b9cc718d5',1,'glm::GLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16)'],['../a00364.html#ga719da577361541a4c43a2dd1d0e361e1',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16)'],['../a00364.html#ga6e7ee4f541e1d7db66cd1a224caacafb',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16)'],['../a00364.html#gae5d672d359f2a39f63f98c7975057486',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16)'],['../a00364.html#ga6fa2df037dbfc5fe8c8e0b4db8a34953',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16)'],['../a00364.html#ga0743b4f4f69a3227b82ff58f6abbad62',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16)'],['../a00364.html#ga1a76b325fdf70f961d835edd182c63dd',1,'glm::GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16)'],['../a00364.html#ga4b4e181cd041ba28c3163e7b8074aef0',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16)'],['../a00364.html#ga27b13f465abc8a40705698145e222c3f',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16)'],['../a00364.html#ga2608d19cc275830a6f8c0b6405625a4f',1,'glm::GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16)'],['../a00364.html#ga93f09768241358a287c4cca538f1f7e7',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16)'],['../a00364.html#ga7c117e3ecca089e10247b1d41d88aff9',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16)'],['../a00364.html#ga07c75cd04ba42dc37fa3e105f89455c5',1,'glm::GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16)'],['../a00364.html#ga65ff0d690a34a4d7f46f9b2eb51525ee',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16)'],['../a00364.html#gadd8ddbe2bf65ccede865ba2f510176dc',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16)'],['../a00364.html#gaf18dbff14bf13d3ff540c517659ec045',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16)'],['../a00364.html#ga66339f6139bf7ff19e245beb33f61cc8',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16)'],['../a00364.html#ga1558a48b3934011b52612809f443e46d',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16)'],['../a00364.html#gaa52e5732daa62851627021ad551c7680',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16)'],['../a00364.html#gac09663c42566bcb58d23c6781ac4e85a',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16)'],['../a00364.html#ga3f510999e59e1b309113e1d561162b29',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16)'],['../a00364.html#ga2c9c94f0c89cd71ce56551db6cf4aaec',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16)'],['../a00364.html#ga99ce8274c750fbfdf0e70c95946a2875',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16)'],['../a00364.html#ga9476ef66790239df53dbe66f3989c3b5',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16)'],['../a00364.html#gacc429b3b0b49921e12713b6d31e14e1d',1,'glm::GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16)'],['../a00364.html#ga88f6c6fa06e6e64479763e69444669cf',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32)'],['../a00364.html#gaae8e4639c991e64754145ab8e4c32083',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32)'],['../a00364.html#ga6e9094f3feb3b5b49d0f83683a101fde',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32)'],['../a00364.html#gadbd2c639c03de1c3e9591b5a39f65559',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32)'],['../a00364.html#gab059d7b9fe2094acc563b7223987499f',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32)'],['../a00364.html#gabbc811d1c52ed2b8cfcaff1378f75c69',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32)'],['../a00364.html#ga9ddf5212777734d2fd841a84439f3bdf',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32)'],['../a00364.html#gad1dda32ed09f94bfcf0a7d8edfb6cf13',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32)'],['../a00364.html#ga5875e0fa72f07e271e7931811cbbf31a',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32)'],['../a00364.html#ga41e82cd6ac07f912ba2a2d45799dcf0d',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32)'],['../a00364.html#ga0892638d6ba773043b3d63d1d092622e',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32)'],['../a00364.html#ga912a16432608b822f1e13607529934c1',1,'glm::GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32)'],['../a00364.html#gafd945a8ea86b042aba410e0560df9a3d',1,'glm::GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16)'],['../a00364.html#ga19c2ba545d1f2f36bcb7b60c9a228622',1,'glm::GLM_ALIGNED_TYPEDEF(quat, aligned_fquat, 16)'],['../a00364.html#gaabc28c84a3288b697605d4688686f9a9',1,'glm::GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32)'],['../a00364.html#ga1ed8aeb5ca67fade269a46105f1bf273',1,'glm::GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16)'],['../a00364.html#ga95cc03b8b475993fa50e05e38e203303',1,'glm::GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32)']]],\n  ['golden_5fratio',['golden_ratio',['../a00290.html#ga748cf8642830657c5b7eae04d0a80899',1,'glm']]],\n  ['greaterthan',['greaterThan',['../a00299.html#ga8f7fa76e06c417b757ddfd438f3f677b',1,'glm::greaterThan(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00374.html#gadfdb8ea82deca869ddc7e63ea5a63ae4',1,'glm::greaterThan(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['greaterthanequal',['greaterThanEqual',['../a00299.html#ga388cbeba987dae7b5937f742efa49a5a',1,'glm::greaterThanEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00374.html#ga859975f538940f8d18fe62f916b9abd7',1,'glm::greaterThanEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_7.js",
    "content": "var searchData=\n[\n  ['half_5fpi',['half_pi',['../a00290.html#ga0c36b41d462e45641faf7d7938948bac',1,'glm']]],\n  ['hermite',['hermite',['../a00358.html#gaa69e143f6374d32f934a8edeaa50bac9',1,'glm']]],\n  ['highestbitvalue',['highestBitValue',['../a00309.html#ga0dcc8fe7c3d3ad60dea409281efa3d05',1,'glm::highestBitValue(genIUType Value)'],['../a00309.html#ga898ef075ccf809a1e480faab48fe96bf',1,'glm::highestBitValue(vec&lt; L, T, Q &gt; const &amp;value)']]],\n  ['hsvcolor',['hsvColor',['../a00312.html#ga789802bec2d4fe0f9741c731b4a8a7d8',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_8.js",
    "content": "var searchData=\n[\n  ['identity',['identity',['../a00247.html#ga81696f2b8d1db02ea1aff8da8f269314',1,'glm']]],\n  ['imulextended',['imulExtended',['../a00370.html#gac0c510a70e852f57594a9141848642e3',1,'glm']]],\n  ['infiniteperspective',['infinitePerspective',['../a00243.html#ga44fa38a18349450325cae2661bb115ca',1,'glm']]],\n  ['infiniteperspectivelh',['infinitePerspectiveLH',['../a00243.html#ga3201b30f5b3ea0f933246d87bfb992a9',1,'glm']]],\n  ['infiniteperspectiverh',['infinitePerspectiveRH',['../a00243.html#ga99672ffe5714ef478dab2437255fe7e1',1,'glm']]],\n  ['intbitstofloat',['intBitsToFloat',['../a00241.html#ga4fb7c21c2dce064b26fd9ccdaf9adcd4',1,'glm::intBitsToFloat(int const &amp;v)'],['../a00241.html#ga7a0a8291a1cf3e1c2aee33030a1bd7b0',1,'glm::intBitsToFloat(vec&lt; L, int, Q &gt; const &amp;v)']]],\n  ['intermediate',['intermediate',['../a00352.html#gacc5cd5f3e78de61d141c2355417424de',1,'glm']]],\n  ['interpolate',['interpolate',['../a00337.html#ga4e67863d150724b10c1ac00972dc958c',1,'glm']]],\n  ['intersectlinesphere',['intersectLineSphere',['../a00331.html#ga9c68139f3d8a4f3d7fe45f9dbc0de5b7',1,'glm']]],\n  ['intersectlinetriangle',['intersectLineTriangle',['../a00331.html#ga9d29b9b3acb504d43986502f42740df4',1,'glm']]],\n  ['intersectrayplane',['intersectRayPlane',['../a00331.html#gad3697a9700ea379739a667ea02573488',1,'glm']]],\n  ['intersectraysphere',['intersectRaySphere',['../a00331.html#gac88f8cd84c4bcb5b947d56acbbcfa56e',1,'glm::intersectRaySphere(genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, typename genType::value_type const sphereRadiusSquared, typename genType::value_type &amp;intersectionDistance)'],['../a00331.html#gad28c00515b823b579c608aafa1100c1d',1,'glm::intersectRaySphere(genType const &amp;rayStarting, genType const &amp;rayNormalizedDirection, genType const &amp;sphereCenter, const typename genType::value_type sphereRadius, genType &amp;intersectionPosition, genType &amp;intersectionNormal)']]],\n  ['intersectraytriangle',['intersectRayTriangle',['../a00331.html#ga65bf2c594482f04881c36bc761f9e946',1,'glm']]],\n  ['inverse',['inverse',['../a00248.html#gab41da854ae678e23e114b598cbca4065',1,'glm::inverse(qua&lt; T, Q &gt; const &amp;q)'],['../a00317.html#ga070f521a953f6461af4ab4cf8ccbf27e',1,'glm::inverse(tdualquat&lt; T, Q &gt; const &amp;q)'],['../a00371.html#gaed509fe8129b01e4f20a6d0de5690091',1,'glm::inverse(mat&lt; C, R, T, Q &gt; const &amp;m)']]],\n  ['inversesqrt',['inversesqrt',['../a00242.html#ga523dd6bd0ad9f75ae2d24c8e4b017b7a',1,'glm']]],\n  ['inversetranspose',['inverseTranspose',['../a00295.html#gab213cd0e3ead5f316d583f99d6312008',1,'glm']]],\n  ['iround',['iround',['../a00292.html#ga57824268ebe13a922f1d69a5d37f637f',1,'glm']]],\n  ['iscompnull',['isCompNull',['../a00368.html#gaf6ec1688eab7442fe96fe4941d5d4e76',1,'glm']]],\n  ['isdenormal',['isdenormal',['../a00314.html#ga74aa7c7462245d83bd5a9edf9c6c2d91',1,'glm']]],\n  ['isfinite',['isfinite',['../a00315.html#gaf4b04dcd3526996d68c1bfe17bfc8657',1,'glm::isfinite(genType const &amp;x)'],['../a00315.html#gac3b12b8ac3014418fe53c299478b6603',1,'glm::isfinite(const vec&lt; 1, T, Q &gt; &amp;x)'],['../a00315.html#ga8e76dc3e406ce6a4155c2b12a2e4b084',1,'glm::isfinite(const vec&lt; 2, T, Q &gt; &amp;x)'],['../a00315.html#ga929ef27f896d902c1771a2e5e150fc97',1,'glm::isfinite(const vec&lt; 3, T, Q &gt; &amp;x)'],['../a00315.html#ga19925badbe10ce61df1d0de00be0b5ad',1,'glm::isfinite(const vec&lt; 4, T, Q &gt; &amp;x)']]],\n  ['isidentity',['isIdentity',['../a00340.html#gaee935d145581c82e82b154ccfd78ad91',1,'glm']]],\n  ['isinf',['isinf',['../a00241.html#ga2885587c23a106301f20443896365b62',1,'glm::isinf(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00248.html#ga45722741ea266b4e861938b365c5f362',1,'glm::isinf(qua&lt; T, Q &gt; const &amp;x)']]],\n  ['ismultiple',['isMultiple',['../a00261.html#gaec593d33956a8fe43f78fccc63ddde9a',1,'glm::isMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#ga354caf634ef333d9cb4844407416256a',1,'glm::isMultiple(vec&lt; L, T, Q &gt; const &amp;v, T Multiple)'],['../a00274.html#gabb4360e38c0943d8981ba965dead519d',1,'glm::isMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['isnan',['isnan',['../a00241.html#ga29ef934c00306490de837b4746b4e14d',1,'glm::isnan(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00248.html#ga1bb55f8963616502e96dc564384d8a03',1,'glm::isnan(qua&lt; T, Q &gt; const &amp;x)']]],\n  ['isnormalized',['isNormalized',['../a00340.html#gae785af56f47ce220a1609f7f84aa077a',1,'glm::isNormalized(mat&lt; 2, 2, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00340.html#gaa068311695f28f5f555f5f746a6a66fb',1,'glm::isNormalized(mat&lt; 3, 3, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00340.html#ga4d9bb4d0465df49fedfad79adc6ce4ad',1,'glm::isNormalized(mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00368.html#gac3c974f459fd75453134fad7ae89a39e',1,'glm::isNormalized(vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)']]],\n  ['isnull',['isNull',['../a00340.html#ga9790ec222ce948c0ff0d8ce927340dba',1,'glm::isNull(mat&lt; 2, 2, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00340.html#gae14501c6b14ccda6014cc5350080103d',1,'glm::isNull(mat&lt; 3, 3, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00340.html#ga2b98bb30a9fefa7cdea5f1dcddba677b',1,'glm::isNull(mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;epsilon)'],['../a00368.html#gab4a3637dbcb4bb42dc55caea7a1e0495',1,'glm::isNull(vec&lt; L, T, Q &gt; const &amp;v, T const &amp;epsilon)']]],\n  ['isorthogonal',['isOrthogonal',['../a00340.html#ga58f3289f74dcab653387dd78ad93ca40',1,'glm']]],\n  ['ispoweroftwo',['isPowerOfTwo',['../a00261.html#gadf491730354aa7da67fbe23d4d688763',1,'glm::isPowerOfTwo(genIUType v)'],['../a00274.html#gabf2b61ded7049bcb13e25164f832a290',1,'glm::isPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_9.js",
    "content": "var searchData=\n[\n  ['l1norm',['l1Norm',['../a00343.html#gae2fc0b2aa967bebfd6a244700bff6997',1,'glm::l1Norm(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)'],['../a00343.html#ga1a7491e2037ceeb37f83ce41addfc0be',1,'glm::l1Norm(vec&lt; 3, T, Q &gt; const &amp;v)']]],\n  ['l2norm',['l2Norm',['../a00343.html#ga41340b2ef40a9307ab0f137181565168',1,'glm::l2Norm(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)'],['../a00343.html#gae288bde8f0e41fb4ed62e65137b18cba',1,'glm::l2Norm(vec&lt; 3, T, Q &gt; const &amp;x)']]],\n  ['ldexp',['ldexp',['../a00241.html#gac3010e0a0c35a1b514540f2fb579c58c',1,'glm']]],\n  ['lefthanded',['leftHanded',['../a00328.html#ga6f1bad193b9a3b048543d1935cf04dd3',1,'glm']]],\n  ['length',['length',['../a00254.html#gab703732449be6c7199369b3f9a91ed38',1,'glm::length(qua&lt; T, Q &gt; const &amp;q)'],['../a00279.html#ga0cdabbb000834d994a1d6dc56f8f5263',1,'glm::length(vec&lt; L, T, Q &gt; const &amp;x)']]],\n  ['length2',['length2',['../a00343.html#ga8d1789651050adb7024917984b41c3de',1,'glm::length2(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00352.html#ga58a609b1b8ab965f5df2702e8ca4e75b',1,'glm::length2(qua&lt; T, Q &gt; const &amp;q)']]],\n  ['lerp',['lerp',['../a00248.html#ga6033dc0741051fa463a0a147ba29f293',1,'glm::lerp(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)'],['../a00315.html#ga5494ba3a95ea6594c86fc75236886864',1,'glm::lerp(T x, T y, T a)'],['../a00315.html#gaa551c0a0e16d2d4608e49f7696df897f',1,'glm::lerp(const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y, T a)'],['../a00315.html#ga44a8b5fd776320f1713413dec959b32a',1,'glm::lerp(const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y, T a)'],['../a00315.html#ga89ac8e000199292ec7875519d27e214b',1,'glm::lerp(const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, T a)'],['../a00315.html#gaf68de5baf72d16135368b8ef4f841604',1,'glm::lerp(const vec&lt; 2, T, Q &gt; &amp;x, const vec&lt; 2, T, Q &gt; &amp;y, const vec&lt; 2, T, Q &gt; &amp;a)'],['../a00315.html#ga4ae1a616c8540a2649eab8e0cd051bb3',1,'glm::lerp(const vec&lt; 3, T, Q &gt; &amp;x, const vec&lt; 3, T, Q &gt; &amp;y, const vec&lt; 3, T, Q &gt; &amp;a)'],['../a00315.html#gab5477ab69c40de4db5d58d3359529724',1,'glm::lerp(const vec&lt; 4, T, Q &gt; &amp;x, const vec&lt; 4, T, Q &gt; &amp;y, const vec&lt; 4, T, Q &gt; &amp;a)'],['../a00317.html#gace8380112d16d33f520839cb35a4d173',1,'glm::lerp(tdualquat&lt; T, Q &gt; const &amp;x, tdualquat&lt; T, Q &gt; const &amp;y, T const &amp;a)']]],\n  ['lessthan',['lessThan',['../a00299.html#gad091a2d22c8acfebfa92bcfca1dfe9c4',1,'glm::lessThan(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00374.html#gae90ed1592c395f93e3f3dfce6b2f39c6',1,'glm::lessThan(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['lessthanequal',['lessThanEqual',['../a00299.html#gac00012eea281800d2403f4ea8443134d',1,'glm::lessThanEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00374.html#gab0bdafc019d227257ff73fb5bcca1718',1,'glm::lessThanEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]],\n  ['levels',['levels',['../a00361.html#gaa8c377f4e63486db4fa872d77880da73',1,'glm']]],\n  ['lineargradient',['linearGradient',['../a00327.html#ga849241df1e55129b8ce9476200307419',1,'glm']]],\n  ['linearinterpolation',['linearInterpolation',['../a00318.html#ga290c3e47cb0a49f2e8abe90b1872b649',1,'glm']]],\n  ['linearrand',['linearRand',['../a00300.html#ga04e241ab88374a477a2c2ceadd2fa03d',1,'glm::linearRand(genType Min, genType Max)'],['../a00300.html#ga94731130c298a9ff5e5025fdee6d97a0',1,'glm::linearRand(vec&lt; L, T, Q &gt; const &amp;Min, vec&lt; L, T, Q &gt; const &amp;Max)']]],\n  ['lmaxnorm',['lMaxNorm',['../a00343.html#gad58a8231fc32e38104a9e1c4d3c0cb64',1,'glm::lMaxNorm(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)'],['../a00343.html#ga6968a324837a8e899396d44de23d5aae',1,'glm::lMaxNorm(vec&lt; 3, T, Q &gt; const &amp;x)']]],\n  ['ln_5fln_5ftwo',['ln_ln_two',['../a00290.html#gaca94292c839ed31a405ab7a81ae7e850',1,'glm']]],\n  ['ln_5ften',['ln_ten',['../a00290.html#gaf97ebc6c059ffd788e6c4946f71ef66c',1,'glm']]],\n  ['ln_5ftwo',['ln_two',['../a00290.html#ga24f4d27765678116f41a2f336ab7975c',1,'glm']]],\n  ['log',['log',['../a00242.html#ga918c9f3fd086ce20e6760c903bd30fa9',1,'glm::log(vec&lt; L, T, Q &gt; const &amp;v)'],['../a00256.html#gaa5f7b20e296671b16ce25a2ab7ad5473',1,'glm::log(qua&lt; T, Q &gt; const &amp;q)'],['../a00333.html#ga60a7b0a401da660869946b2b77c710c9',1,'glm::log(genType const &amp;x, genType const &amp;base)']]],\n  ['log2',['log2',['../a00242.html#ga82831c7d9cca777cebedfe03a19c8d75',1,'glm::log2(vec&lt; L, T, Q &gt; const &amp;v)'],['../a00292.html#ga9bd682e74bfacb005c735305207ec417',1,'glm::log2(genIUType x)']]],\n  ['lookat',['lookAt',['../a00247.html#gaa64aa951a0e99136bba9008d2b59c78e',1,'glm']]],\n  ['lookatlh',['lookAtLH',['../a00247.html#gab2c09e25b0a16d3a9d89cc85bbae41b0',1,'glm']]],\n  ['lookatrh',['lookAtRH',['../a00247.html#gacfa12c8889c754846bc20c65d9b5c701',1,'glm']]],\n  ['lowestbitvalue',['lowestBitValue',['../a00309.html#ga2ff6568089f3a9b67f5c30918855fc6f',1,'glm']]],\n  ['luminosity',['luminosity',['../a00312.html#gad028e0a4f1a9c812b39439b746295b34',1,'glm']]],\n  ['lxnorm',['lxNorm',['../a00343.html#gacad23d30497eb16f67709f2375d1f66a',1,'glm::lxNorm(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, unsigned int Depth)'],['../a00343.html#gac61b6d81d796d6eb4d4183396a19ab91',1,'glm::lxNorm(vec&lt; 3, T, Q &gt; const &amp;x, unsigned int Depth)']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_a.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_a.js",
    "content": "var searchData=\n[\n  ['make_5fmat2',['make_mat2',['../a00305.html#ga04409e74dc3da251d2501acf5b4b546c',1,'glm']]],\n  ['make_5fmat2x2',['make_mat2x2',['../a00305.html#gae49e1c7bcd5abec74d1c34155031f663',1,'glm']]],\n  ['make_5fmat2x3',['make_mat2x3',['../a00305.html#ga21982104164789cf8985483aaefc25e8',1,'glm']]],\n  ['make_5fmat2x4',['make_mat2x4',['../a00305.html#ga078b862c90b0e9a79ed43a58997d8388',1,'glm']]],\n  ['make_5fmat3',['make_mat3',['../a00305.html#ga611ee7c4d4cadfc83a8fa8e1d10a170f',1,'glm']]],\n  ['make_5fmat3x2',['make_mat3x2',['../a00305.html#ga27a24e121dc39e6857620e0f85b6e1a8',1,'glm']]],\n  ['make_5fmat3x3',['make_mat3x3',['../a00305.html#gaf2e8337b15c3362aaeb6e5849e1c0536',1,'glm']]],\n  ['make_5fmat3x4',['make_mat3x4',['../a00305.html#ga05dd66232aedb993e3b8e7b35eaf932b',1,'glm']]],\n  ['make_5fmat4',['make_mat4',['../a00305.html#gae7bcedb710d1446c87fd1fc93ed8ee9a',1,'glm']]],\n  ['make_5fmat4x2',['make_mat4x2',['../a00305.html#ga8b34c9b25bf3310d8ff9c828c7e2d97c',1,'glm']]],\n  ['make_5fmat4x3',['make_mat4x3',['../a00305.html#ga0330bf6640092d7985fac92927bbd42b',1,'glm']]],\n  ['make_5fmat4x4',['make_mat4x4',['../a00305.html#ga8f084be30e404844bfbb4a551ac2728c',1,'glm']]],\n  ['make_5fquat',['make_quat',['../a00305.html#ga58110d7d81cf7d029e2bab7f8cd9b246',1,'glm']]],\n  ['make_5fvec1',['make_vec1',['../a00305.html#ga4135f03f3049f0a4eb76545c4967957c',1,'glm::make_vec1(vec&lt; 1, T, Q &gt; const &amp;v)'],['../a00305.html#ga13c92b81e55f201b052a6404d57da220',1,'glm::make_vec1(vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00305.html#ga3c23cc74086d361e22bbd5e91a334e03',1,'glm::make_vec1(vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00305.html#ga6af06bb60d64ca8bcd169e3c93bc2419',1,'glm::make_vec1(vec&lt; 4, T, Q &gt; const &amp;v)']]],\n  ['make_5fvec2',['make_vec2',['../a00305.html#ga8476d0e6f1b9b4a6193cc25f59d8a896',1,'glm::make_vec2(vec&lt; 1, T, Q &gt; const &amp;v)'],['../a00305.html#gae54bd325a08ad26edf63929201adebc7',1,'glm::make_vec2(vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00305.html#ga0084fea4694cf47276e9cccbe7b1015a',1,'glm::make_vec2(vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00305.html#ga2b81f71f3a222fe5bba81e3983751249',1,'glm::make_vec2(vec&lt; 4, T, Q &gt; const &amp;v)'],['../a00305.html#ga81253cf7b0ebfbb1e70540c5774e6824',1,'glm::make_vec2(T const *const ptr)']]],\n  ['make_5fvec3',['make_vec3',['../a00305.html#ga9147e4b3a5d0f4772edfbfd179d7ea0b',1,'glm::make_vec3(vec&lt; 1, T, Q &gt; const &amp;v)'],['../a00305.html#ga482b60a842a5b154d3eed392417a9511',1,'glm::make_vec3(vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00305.html#gacd57046034df557b8b1c457f58613623',1,'glm::make_vec3(vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00305.html#ga8b589ed7d41a298b516d2a69169248f1',1,'glm::make_vec3(vec&lt; 4, T, Q &gt; const &amp;v)'],['../a00305.html#gad9e0d36ff489cb30c65ad1fa40351651',1,'glm::make_vec3(T const *const ptr)']]],\n  ['make_5fvec4',['make_vec4',['../a00305.html#ga600cb97f70c5d50d3a4a145e1cafbf37',1,'glm::make_vec4(vec&lt; 1, T, Q &gt; const &amp;v)'],['../a00305.html#gaa9bd116caf28196fd1cf00b278286fa7',1,'glm::make_vec4(vec&lt; 2, T, Q &gt; const &amp;v)'],['../a00305.html#ga4036328ba4702c74cbdfad1fc03d1b8f',1,'glm::make_vec4(vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00305.html#gaa95cb15732f708f613e65a0578895ae5',1,'glm::make_vec4(vec&lt; 4, T, Q &gt; const &amp;v)'],['../a00305.html#ga63f576518993efc22a969f18f80e29bb',1,'glm::make_vec4(T const *const ptr)']]],\n  ['mask',['mask',['../a00288.html#gad7eba518a0b71662114571ee76939f8a',1,'glm::mask(genIUType Bits)'],['../a00288.html#ga2e64e3b922a296033b825311e7f5fff1',1,'glm::mask(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['mat2x4_5fcast',['mat2x4_cast',['../a00317.html#gae99d143b37f9cad4cd9285571aab685a',1,'glm']]],\n  ['mat3_5fcast',['mat3_cast',['../a00299.html#ga333ab70047fbe4132406100c292dbc89',1,'glm']]],\n  ['mat3x4_5fcast',['mat3x4_cast',['../a00317.html#gaf59f5bb69620d2891c3795c6f2639179',1,'glm']]],\n  ['mat4_5fcast',['mat4_cast',['../a00299.html#ga1113212d9bdefc2e31ad40e5bbb506f3',1,'glm']]],\n  ['matrixcompmult',['matrixCompMult',['../a00371.html#gaf14569404c779fedca98d0b9b8e58c1f',1,'glm']]],\n  ['matrixcross3',['matrixCross3',['../a00334.html#ga5802386bb4c37b3332a3b6fd8b6960ff',1,'glm']]],\n  ['matrixcross4',['matrixCross4',['../a00334.html#ga20057fff91ddafa102934adb25458cde',1,'glm']]],\n  ['max',['max',['../a00241.html#gae02d42887fc5570451f880e3c624b9ac',1,'glm::max(genType x, genType y)'],['../a00241.html#ga03e45d6e60d1c36edb00c52edeea0f31',1,'glm::max(vec&lt; L, T, Q &gt; const &amp;x, T y)'],['../a00241.html#gac1fec0c3303b572a6d4697a637213870',1,'glm::max(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00258.html#gaa20839d9ab14514f8966f69877ea0de8',1,'glm::max(T a, T b, T c)'],['../a00258.html#ga2274b5e75ed84b0b1e50d8d22f1f2f67',1,'glm::max(T a, T b, T c, T d)'],['../a00267.html#gaa45d34f6a2906f8bf58ab2ba5429234d',1,'glm::max(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z)'],['../a00267.html#ga94d42b8da2b4ded5ddf7504fbdc6bf10',1,'glm::max(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;z, vec&lt; L, T, Q &gt; const &amp;w)'],['../a00321.html#ga04991ccb9865c4c4e58488cfb209ce69',1,'glm::max(T const &amp;x, T const &amp;y, T const &amp;z)'],['../a00321.html#gae1b7bbe5c91de4924835ea3e14530744',1,'glm::max(C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z)'],['../a00321.html#gaf832e9d4ab4826b2dda2fda25935a3a4',1,'glm::max(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z)'],['../a00321.html#ga78e04a0cef1c4863fcae1a2130500d87',1,'glm::max(T const &amp;x, T const &amp;y, T const &amp;z, T const &amp;w)'],['../a00321.html#ga7cca8b53cfda402040494cdf40fbdf4a',1,'glm::max(C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z, typename C&lt; T &gt;::T const &amp;w)'],['../a00321.html#gaacffbc466c2d08c140b181e7fd8a4858',1,'glm::max(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)']]],\n  ['min',['min',['../a00241.html#ga6cf8098827054a270ee36b18e30d471d',1,'glm::min(genType x, genType y)'],['../a00241.html#gaa7d015eba1f9f48519251f4abe69b14d',1,'glm::min(vec&lt; L, T, Q &gt; const &amp;x, T y)'],['../a00241.html#ga31f49ef9e7d1beb003160c5e009b0c48',1,'glm::min(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00258.html#ga420b37cbd98c395b93dab0278305cd46',1,'glm::min(T a, T b, T c)'],['../a00258.html#ga0d24a9acb8178df77e4aff90cbb2010d',1,'glm::min(T a, T b, T c, T d)'],['../a00267.html#ga3cd83d80fd4f433d8e333593ec56dddf',1,'glm::min(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c)'],['../a00267.html#gab66920ed064ab518d6859c5a889c4be4',1,'glm::min(vec&lt; L, T, Q &gt; const &amp;a, vec&lt; L, T, Q &gt; const &amp;b, vec&lt; L, T, Q &gt; const &amp;c, vec&lt; L, T, Q &gt; const &amp;d)'],['../a00321.html#ga713d3f9b3e76312c0d314e0c8611a6a6',1,'glm::min(T const &amp;x, T const &amp;y, T const &amp;z)'],['../a00321.html#ga74d1a96e7cdbac40f6d35142d3bcbbd4',1,'glm::min(C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z)'],['../a00321.html#ga42b5c3fc027fd3d9a50d2ccc9126d9f0',1,'glm::min(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z)'],['../a00321.html#ga95466987024d03039607f09e69813d69',1,'glm::min(T const &amp;x, T const &amp;y, T const &amp;z, T const &amp;w)'],['../a00321.html#ga4fe35dd31dd0c45693c9b60b830b8d47',1,'glm::min(C&lt; T &gt; const &amp;x, typename C&lt; T &gt;::T const &amp;y, typename C&lt; T &gt;::T const &amp;z, typename C&lt; T &gt;::T const &amp;w)'],['../a00321.html#ga7471ea4159eed8dd9ea4ac5d46c2fead',1,'glm::min(C&lt; T &gt; const &amp;x, C&lt; T &gt; const &amp;y, C&lt; T &gt; const &amp;z, C&lt; T &gt; const &amp;w)']]],\n  ['mirrorclamp',['mirrorClamp',['../a00369.html#gaa6856a0a048d2749252848da35e10c8b',1,'glm']]],\n  ['mirrorrepeat',['mirrorRepeat',['../a00369.html#ga16a89b0661b60d5bea85137bbae74d73',1,'glm']]],\n  ['mix',['mix',['../a00241.html#ga8e93f374aae27d1a88b921860351f8d4',1,'glm::mix(genTypeT x, genTypeT y, genTypeU a)'],['../a00248.html#gafbfe587b8da11fb89a30c3d67dd5ccc2',1,'glm::mix(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T a)']]],\n  ['mixedproduct',['mixedProduct',['../a00342.html#gab3c6048fbb67f7243b088a4fee48d020',1,'glm']]],\n  ['mod',['mod',['../a00241.html#ga9b197a452cd52db3c5c18bac72bd7798',1,'glm::mod(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)'],['../a00330.html#gaabfbb41531ab7ad8d06fc176edfba785',1,'glm::mod(int x, int y)'],['../a00330.html#ga63fc8d63e7da1706439233b386ba8b6f',1,'glm::mod(uint x, uint y)']]],\n  ['modf',['modf',['../a00241.html#ga85e33f139b8db1b39b590a5713b9e679',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_b.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_b.js",
    "content": "var searchData=\n[\n  ['nextmultiple',['nextMultiple',['../a00261.html#gab770a3835c44c8a6fd225be4f4e6b317',1,'glm::nextMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#gace38d00601cbf49cd4dc03f003ab42b7',1,'glm::nextMultiple(vec&lt; L, T, Q &gt; const &amp;v, T Multiple)'],['../a00274.html#gacda365edad320c7aff19cc283a3b8ca2',1,'glm::nextMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['nextpoweroftwo',['nextPowerOfTwo',['../a00261.html#ga3a37c2f2fd347886c9af6a3ca3db04dc',1,'glm::nextPowerOfTwo(genIUType v)'],['../a00274.html#gabba67f8aac9915e10fca727277274502',1,'glm::nextPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['nlz',['nlz',['../a00330.html#ga78dff8bdb361bf0061194c93e003d189',1,'glm']]],\n  ['normalize',['normalize',['../a00254.html#gabf30e3263fffe8dcc6659aea76ae8927',1,'glm::normalize(qua&lt; T, Q &gt; const &amp;q)'],['../a00279.html#ga3b8d3dcae77870781392ed2902cce597',1,'glm::normalize(vec&lt; L, T, Q &gt; const &amp;x)'],['../a00317.html#ga299b8641509606b1958ffa104a162cfe',1,'glm::normalize(tdualquat&lt; T, Q &gt; const &amp;q)']]],\n  ['normalizedot',['normalizeDot',['../a00345.html#gacb140a2b903115d318c8b0a2fb5a5daa',1,'glm']]],\n  ['not_5f',['not_',['../a00374.html#ga610fcd175791fd246e328ffee10dbf1e',1,'glm']]],\n  ['notequal',['notEqual',['../a00246.html#ga8504f18a7e2bf315393032c2137dad83',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y)'],['../a00246.html#ga29071147d118569344d10944b7d5c378',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, T epsilon)'],['../a00246.html#gad7959e14fbc35b4ed2617daf4d67f6cd',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, T, Q &gt; const &amp;epsilon)'],['../a00246.html#gaa1cd7fc228ef6e26c73583fd0d9c6552',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, int ULPs)'],['../a00246.html#gaa5517341754149ffba742d230afd1f32',1,'glm::notEqual(mat&lt; C, R, T, Q &gt; const &amp;x, mat&lt; C, R, T, Q &gt; const &amp;y, vec&lt; C, int, Q &gt; const &amp;ULPs)'],['../a00255.html#gab441cee0de5867a868f3a586ee68cfe1',1,'glm::notEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y)'],['../a00255.html#ga5117a44c1bf21af857cd23e44a96d313',1,'glm::notEqual(qua&lt; T, Q &gt; const &amp;x, qua&lt; T, Q &gt; const &amp;y, T epsilon)'],['../a00275.html#ga4a99cc41341567567a608719449c1fac',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, T epsilon)'],['../a00275.html#ga417cf51304359db18e819dda9bce5767',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, T, Q &gt; const &amp;epsilon)'],['../a00275.html#ga8b5c2c3f83422ae5b71fa960d03b0339',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, int ULPs)'],['../a00275.html#ga0b15ffe32987a6029b14398eb0def01a',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y, vec&lt; L, int, Q &gt; const &amp;ULPs)'],['../a00374.html#ga17c19dc1b76cd5aef63e9e7ff3aa3c27',1,'glm::notEqual(vec&lt; L, T, Q &gt; const &amp;x, vec&lt; L, T, Q &gt; const &amp;y)']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_c.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_c.js",
    "content": "var searchData=\n[\n  ['one',['one',['../a00290.html#ga39c2fb227631ca25894326529bdd1ee5',1,'glm']]],\n  ['one_5fover_5fpi',['one_over_pi',['../a00290.html#ga555150da2b06d23c8738981d5013e0eb',1,'glm']]],\n  ['one_5fover_5froot_5ftwo',['one_over_root_two',['../a00290.html#ga788fa23a0939bac4d1d0205fb4f35818',1,'glm']]],\n  ['one_5fover_5ftwo_5fpi',['one_over_two_pi',['../a00290.html#ga7c922b427986cbb2e4c6ac69874eefbc',1,'glm']]],\n  ['openbounded',['openBounded',['../a00314.html#gafd303042ba2ba695bf53b2315f53f93f',1,'glm']]],\n  ['orientate2',['orientate2',['../a00319.html#gae16738a9f1887cf4e4db6a124637608d',1,'glm']]],\n  ['orientate3',['orientate3',['../a00319.html#ga7ca98668a5786f19c7b38299ebbc9b4c',1,'glm::orientate3(T const &amp;angle)'],['../a00319.html#ga7238c8e15c7720e3ca6a45ab151eeabb',1,'glm::orientate3(vec&lt; 3, T, Q &gt; const &amp;angles)']]],\n  ['orientate4',['orientate4',['../a00319.html#ga4a044653f71a4ecec68e0b623382b48a',1,'glm']]],\n  ['orientation',['orientation',['../a00356.html#ga1a32fceb71962e6160e8af295c91930a',1,'glm']]],\n  ['orientedangle',['orientedAngle',['../a00367.html#ga9556a803dce87fe0f42fdabe4ebba1d5',1,'glm::orientedAngle(vec&lt; 2, T, Q &gt; const &amp;x, vec&lt; 2, T, Q &gt; const &amp;y)'],['../a00367.html#ga706fce3d111f485839756a64f5a48553',1,'glm::orientedAngle(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y, vec&lt; 3, T, Q &gt; const &amp;ref)']]],\n  ['ortho',['ortho',['../a00243.html#gae5b6b40ed882cd56cd7cb97701909c06',1,'glm::ortho(T left, T right, T bottom, T top)'],['../a00243.html#ga6615d8a9d39432e279c4575313ecb456',1,'glm::ortho(T left, T right, T bottom, T top, T zNear, T zFar)']]],\n  ['ortholh',['orthoLH',['../a00243.html#gad122a79aadaa5529cec4ac197203db7f',1,'glm']]],\n  ['ortholh_5fno',['orthoLH_NO',['../a00243.html#ga526416735ea7c5c5cd255bf99d051bd8',1,'glm']]],\n  ['ortholh_5fzo',['orthoLH_ZO',['../a00243.html#gab37ac3eec8d61f22fceda7775e836afa',1,'glm']]],\n  ['orthono',['orthoNO',['../a00243.html#gab219d28a8f178d4517448fcd6395a073',1,'glm']]],\n  ['orthonormalize',['orthonormalize',['../a00348.html#ga4cab5d698e6e2eccea30c8e81c74371f',1,'glm::orthonormalize(mat&lt; 3, 3, T, Q &gt; const &amp;m)'],['../a00348.html#gac3bc7ef498815026bc3d361ae0b7138e',1,'glm::orthonormalize(vec&lt; 3, T, Q &gt; const &amp;x, vec&lt; 3, T, Q &gt; const &amp;y)']]],\n  ['orthorh',['orthoRH',['../a00243.html#ga16264c9b838edeb9dd1de7a1010a13a4',1,'glm']]],\n  ['orthorh_5fno',['orthoRH_NO',['../a00243.html#gaa2f7a1373170bf0a4a2ddef9b0706780',1,'glm']]],\n  ['orthorh_5fzo',['orthoRH_ZO',['../a00243.html#ga9aea2e515b08fd7dce47b7b6ec34d588',1,'glm']]],\n  ['orthozo',['orthoZO',['../a00243.html#gaea11a70817af2c0801c869dea0b7a5bc',1,'glm']]],\n  ['outerproduct',['outerProduct',['../a00371.html#gac29fb7bae75a8e4c1b74cbbf85520e50',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_d.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_d.js",
    "content": "var searchData=\n[\n  ['packdouble2x32',['packDouble2x32',['../a00372.html#gaa916ca426b2bb0343ba17e3753e245c2',1,'glm']]],\n  ['packf2x11_5f1x10',['packF2x11_1x10',['../a00298.html#ga4944ad465ff950e926d49621f916c78d',1,'glm']]],\n  ['packf3x9_5fe1x5',['packF3x9_E1x5',['../a00298.html#ga3f648fc205467792dc6d8c59c748f8a6',1,'glm']]],\n  ['packhalf',['packHalf',['../a00298.html#ga2d8bbce673ebc04831c1fb05c47f5251',1,'glm']]],\n  ['packhalf1x16',['packHalf1x16',['../a00298.html#ga43f2093b6ff192a79058ff7834fc3528',1,'glm']]],\n  ['packhalf2x16',['packHalf2x16',['../a00372.html#ga20f134b07db3a3d3a38efb2617388c92',1,'glm']]],\n  ['packhalf4x16',['packHalf4x16',['../a00298.html#gafe2f7b39caf8f5ec555e1c059ec530e6',1,'glm']]],\n  ['packi3x10_5f1x2',['packI3x10_1x2',['../a00298.html#ga06ecb6afb902dba45419008171db9023',1,'glm']]],\n  ['packint2x16',['packInt2x16',['../a00298.html#ga3644163cf3a47bf1d4af1f4b03013a7e',1,'glm']]],\n  ['packint2x32',['packInt2x32',['../a00298.html#gad1e4c8a9e67d86b61a6eec86703a827a',1,'glm']]],\n  ['packint2x8',['packInt2x8',['../a00298.html#ga8884b1f2292414f36d59ef3be5d62914',1,'glm']]],\n  ['packint4x16',['packInt4x16',['../a00298.html#ga1989f093a27ae69cf9207145be48b3d7',1,'glm']]],\n  ['packint4x8',['packInt4x8',['../a00298.html#gaf2238401d5ce2aaade1a44ba19709072',1,'glm']]],\n  ['packrgbm',['packRGBM',['../a00298.html#ga0466daf4c90f76cc64b3f105ce727295',1,'glm']]],\n  ['packsnorm',['packSnorm',['../a00298.html#gaa54b5855a750d6aeb12c1c902f5939b8',1,'glm']]],\n  ['packsnorm1x16',['packSnorm1x16',['../a00298.html#gab22f8bcfdb5fc65af4701b25f143c1af',1,'glm']]],\n  ['packsnorm1x8',['packSnorm1x8',['../a00298.html#gae3592e0795e62aaa1865b3a10496a7a1',1,'glm']]],\n  ['packsnorm2x16',['packSnorm2x16',['../a00372.html#ga977ab172da5494e5ac63e952afacfbe2',1,'glm']]],\n  ['packsnorm2x8',['packSnorm2x8',['../a00298.html#ga6be3cfb2cce3702f03e91bbeb5286d7e',1,'glm']]],\n  ['packsnorm3x10_5f1x2',['packSnorm3x10_1x2',['../a00298.html#gab997545661877d2c7362a5084d3897d3',1,'glm']]],\n  ['packsnorm4x16',['packSnorm4x16',['../a00298.html#ga358943934d21da947d5bcc88c2ab7832',1,'glm']]],\n  ['packsnorm4x8',['packSnorm4x8',['../a00372.html#ga85e8f17627516445026ab7a9c2e3531a',1,'glm']]],\n  ['packu3x10_5f1x2',['packU3x10_1x2',['../a00298.html#gada3d88d59f0f458f9c51a9fd359a4bc0',1,'glm']]],\n  ['packuint2x16',['packUint2x16',['../a00298.html#ga5eecc9e8cbaf51ac6cf57501e670ee19',1,'glm']]],\n  ['packuint2x32',['packUint2x32',['../a00298.html#gaa864081097b86e83d8e4a4d79c382b22',1,'glm']]],\n  ['packuint2x8',['packUint2x8',['../a00298.html#ga3c3c9fb53ae7823b10fa083909357590',1,'glm']]],\n  ['packuint4x16',['packUint4x16',['../a00298.html#ga2ceb62cca347d8ace42ee90317a3f1f9',1,'glm']]],\n  ['packuint4x8',['packUint4x8',['../a00298.html#gaa0fe2f09aeb403cd66c1a062f58861ab',1,'glm']]],\n  ['packunorm',['packUnorm',['../a00298.html#gaccd3f27e6ba5163eb7aa9bc8ff96251a',1,'glm']]],\n  ['packunorm1x16',['packUnorm1x16',['../a00298.html#ga9f82737bf2a44bedff1d286b76837886',1,'glm']]],\n  ['packunorm1x5_5f1x6_5f1x5',['packUnorm1x5_1x6_1x5',['../a00298.html#ga768e0337dd6246773f14aa0a421fe9a8',1,'glm']]],\n  ['packunorm1x8',['packUnorm1x8',['../a00298.html#ga4b2fa60df3460403817d28b082ee0736',1,'glm']]],\n  ['packunorm2x16',['packUnorm2x16',['../a00372.html#ga0e2d107039fe608a209497af867b85fb',1,'glm']]],\n  ['packunorm2x3_5f1x2',['packUnorm2x3_1x2',['../a00298.html#ga7f9abdb50f9be1aa1c14912504a0d98d',1,'glm']]],\n  ['packunorm2x4',['packUnorm2x4',['../a00298.html#gab6bbd5be3b8e6db538ecb33a7844481c',1,'glm']]],\n  ['packunorm2x8',['packUnorm2x8',['../a00298.html#ga9a666b1c688ab54100061ed06526de6e',1,'glm']]],\n  ['packunorm3x10_5f1x2',['packUnorm3x10_1x2',['../a00298.html#ga8a1ee625d2707c60530fb3fca2980b19',1,'glm']]],\n  ['packunorm3x5_5f1x1',['packUnorm3x5_1x1',['../a00298.html#gaec4112086d7fb133bea104a7c237de52',1,'glm']]],\n  ['packunorm4x16',['packUnorm4x16',['../a00298.html#ga1f63c264e7ab63264e2b2a99fd393897',1,'glm']]],\n  ['packunorm4x4',['packUnorm4x4',['../a00298.html#gad3e7e3ce521513584a53aedc5f9765c1',1,'glm']]],\n  ['packunorm4x8',['packUnorm4x8',['../a00372.html#gaf7d2f7341a9eeb4a436929d6f9ad08f2',1,'glm']]],\n  ['perlin',['perlin',['../a00297.html#ga1e043ce3b51510e9bc4469227cefc38a',1,'glm::perlin(vec&lt; L, T, Q &gt; const &amp;p)'],['../a00297.html#gac270edc54c5fc52f5985a45f940bb103',1,'glm::perlin(vec&lt; L, T, Q &gt; const &amp;p, vec&lt; L, T, Q &gt; const &amp;rep)']]],\n  ['perp',['perp',['../a00349.html#ga264cfc4e180cf9b852e943b35089003c',1,'glm']]],\n  ['perspective',['perspective',['../a00243.html#ga747c8cf99458663dd7ad1bb3a2f07787',1,'glm']]],\n  ['perspectivefov',['perspectiveFov',['../a00243.html#gaebd02240fd36e85ad754f02ddd9a560d',1,'glm']]],\n  ['perspectivefovlh',['perspectiveFovLH',['../a00243.html#ga6aebe16c164bd8e52554cbe0304ef4aa',1,'glm']]],\n  ['perspectivefovlh_5fno',['perspectiveFovLH_NO',['../a00243.html#gad18a4495b77530317327e8d466488c1a',1,'glm']]],\n  ['perspectivefovlh_5fzo',['perspectiveFovLH_ZO',['../a00243.html#gabdd37014f529e25b2fa1b3ba06c10d5c',1,'glm']]],\n  ['perspectivefovno',['perspectiveFovNO',['../a00243.html#gaf30e7bd3b1387a6776433dd5383e6633',1,'glm']]],\n  ['perspectivefovrh',['perspectiveFovRH',['../a00243.html#gaf32bf563f28379c68554a44ee60c6a85',1,'glm']]],\n  ['perspectivefovrh_5fno',['perspectiveFovRH_NO',['../a00243.html#ga257b733ff883c9a065801023cf243eb2',1,'glm']]],\n  ['perspectivefovrh_5fzo',['perspectiveFovRH_ZO',['../a00243.html#ga7dcbb25331676f5b0795aced1a905c44',1,'glm']]],\n  ['perspectivefovzo',['perspectiveFovZO',['../a00243.html#ga4bc69fa1d1f95128430aa3d2a712390b',1,'glm']]],\n  ['perspectivelh',['perspectiveLH',['../a00243.html#ga9bd34951dc7022ac256fcb51d7f6fc2f',1,'glm']]],\n  ['perspectivelh_5fno',['perspectiveLH_NO',['../a00243.html#gaead4d049d1feab463b700b5641aa590e',1,'glm']]],\n  ['perspectivelh_5fzo',['perspectiveLH_ZO',['../a00243.html#gaca32af88c2719005c02817ad1142986c',1,'glm']]],\n  ['perspectiveno',['perspectiveNO',['../a00243.html#gaf497e6bca61e7c87088370b126a93758',1,'glm']]],\n  ['perspectiverh',['perspectiveRH',['../a00243.html#ga26b88757fbd90601b80768a7e1ad3aa1',1,'glm']]],\n  ['perspectiverh_5fno',['perspectiveRH_NO',['../a00243.html#gad1526cb2cbe796095284e8f34b01c582',1,'glm']]],\n  ['perspectiverh_5fzo',['perspectiveRH_ZO',['../a00243.html#ga4da358d6e1b8e5b9ae35d1f3f2dc3b9a',1,'glm']]],\n  ['perspectivezo',['perspectiveZO',['../a00243.html#gaa9dfba5c2322da54f72b1eb7c7c11b47',1,'glm']]],\n  ['pi',['pi',['../a00259.html#ga94bafeb2a0f23ab6450fed1f98ee4e45',1,'glm']]],\n  ['pickmatrix',['pickMatrix',['../a00245.html#gaf6b21eadb7ac2ecbbe258a9a233b4c82',1,'glm']]],\n  ['pitch',['pitch',['../a00299.html#ga7603e81477b46ddb448896909bc04928',1,'glm']]],\n  ['polar',['polar',['../a00350.html#gab83ac2c0e55b684b06b6c46c28b1590d',1,'glm']]],\n  ['pow',['pow',['../a00242.html#ga2254981952d4f333b900a6bf5167a6c4',1,'glm::pow(vec&lt; L, T, Q &gt; const &amp;base, vec&lt; L, T, Q &gt; const &amp;exponent)'],['../a00256.html#ga4975ffcacd312a8c0bbd046a76c5607e',1,'glm::pow(qua&lt; T, Q &gt; const &amp;q, T y)'],['../a00330.html#ga465016030a81d513fa2fac881ebdaa83',1,'glm::pow(int x, uint y)'],['../a00330.html#ga998e5ee915d3769255519e2fbaa2bbf0',1,'glm::pow(uint x, uint y)']]],\n  ['pow2',['pow2',['../a00347.html#ga19aaff3213bf23bdec3ef124ace237e9',1,'glm::gtx']]],\n  ['pow3',['pow3',['../a00347.html#ga35689d03cd434d6ea819f1942d3bf82e',1,'glm::gtx']]],\n  ['pow4',['pow4',['../a00347.html#gacef0968763026e180e53e735007dbf5a',1,'glm::gtx']]],\n  ['poweroftwoabove',['powerOfTwoAbove',['../a00309.html#ga8cda2459871f574a0aecbe702ac93291',1,'glm::powerOfTwoAbove(genIUType Value)'],['../a00309.html#ga2bbded187c5febfefc1e524ba31b3fab',1,'glm::powerOfTwoAbove(vec&lt; L, T, Q &gt; const &amp;value)']]],\n  ['poweroftwobelow',['powerOfTwoBelow',['../a00309.html#ga3de7df63c589325101a2817a56f8e29d',1,'glm::powerOfTwoBelow(genIUType Value)'],['../a00309.html#gaf78ddcc4152c051b2a21e68fecb10980',1,'glm::powerOfTwoBelow(vec&lt; L, T, Q &gt; const &amp;value)']]],\n  ['poweroftwonearest',['powerOfTwoNearest',['../a00309.html#ga5f65973a5d2ea38c719e6a663149ead9',1,'glm::powerOfTwoNearest(genIUType Value)'],['../a00309.html#gac87e65d11e16c3d6b91c3bcfaef7da0b',1,'glm::powerOfTwoNearest(vec&lt; L, T, Q &gt; const &amp;value)']]],\n  ['prevmultiple',['prevMultiple',['../a00261.html#gada3bdd871ffe31f2d484aa668362f636',1,'glm::prevMultiple(genIUType v, genIUType Multiple)'],['../a00274.html#ga7b3915a7cd3d50ff4976ab7a75a6880a',1,'glm::prevMultiple(vec&lt; L, T, Q &gt; const &amp;v, T Multiple)'],['../a00274.html#ga51e04379e8aebbf83e2e5ab094578ee9',1,'glm::prevMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['prevpoweroftwo',['prevPowerOfTwo',['../a00261.html#gab21902a0e7e5a8451a7ad80333618727',1,'glm::prevPowerOfTwo(genIUType v)'],['../a00274.html#ga759db73f14d79f63612bd2398b577e7a',1,'glm::prevPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['proj',['proj',['../a00351.html#ga58384b7170801dd513de46f87c7fb00e',1,'glm']]],\n  ['proj2d',['proj2D',['../a00363.html#ga5b992a0cdc8298054edb68e228f0d93e',1,'glm']]],\n  ['proj3d',['proj3D',['../a00363.html#gaa2b7f4f15b98f697caede11bef50509e',1,'glm']]],\n  ['project',['project',['../a00245.html#gaf36e96033f456659e6705472a06b6e11',1,'glm']]],\n  ['projectno',['projectNO',['../a00245.html#ga05249751f48d14cb282e4979802b8111',1,'glm']]],\n  ['projectzo',['projectZO',['../a00245.html#ga77d157525063dec83a557186873ee080',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_e.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_e.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_e.js",
    "content": "var searchData=\n[\n  ['qr_5fdecompose',['qr_decompose',['../a00336.html#gac62d7bfc8dc661e616620d70552cd566',1,'glm']]],\n  ['quadraticeasein',['quadraticEaseIn',['../a00318.html#gaf42089d35855695132d217cd902304a0',1,'glm']]],\n  ['quadraticeaseinout',['quadraticEaseInOut',['../a00318.html#ga03e8fc2d7945a4e63ee33b2159c14cea',1,'glm']]],\n  ['quadraticeaseout',['quadraticEaseOut',['../a00318.html#ga283717bc2d937547ad34ec0472234ee3',1,'glm']]],\n  ['quarter_5fpi',['quarter_pi',['../a00290.html#ga3c9df42bd73c519a995c43f0f99e77e0',1,'glm']]],\n  ['quarticeasein',['quarticEaseIn',['../a00318.html#ga808b41f14514f47dad5dcc69eb924afd',1,'glm']]],\n  ['quarticeaseinout',['quarticEaseInOut',['../a00318.html#ga6d000f852de12b197e154f234b20c505',1,'glm']]],\n  ['quarticeaseout',['quarticEaseOut',['../a00318.html#ga4dfb33fa7664aa888eb647999d329b98',1,'glm']]],\n  ['quat_5fcast',['quat_cast',['../a00299.html#ga1108a4ab88ca87bac321454eea7702f8',1,'glm::quat_cast(mat&lt; 3, 3, T, Q &gt; const &amp;x)'],['../a00299.html#ga4524810f07f72e8c7bdc7764fa11cb58',1,'glm::quat_cast(mat&lt; 4, 4, T, Q &gt; const &amp;x)']]],\n  ['quat_5fidentity',['quat_identity',['../a00352.html#ga5ee8332600b2aca3a77622a28d857b55',1,'glm']]],\n  ['quatlookat',['quatLookAt',['../a00299.html#gabe7fc5ec5feb41ab234d5d2b6254697f',1,'glm']]],\n  ['quatlookatlh',['quatLookAtLH',['../a00299.html#ga2da350c73411be3bb19441b226b81a74',1,'glm']]],\n  ['quatlookatrh',['quatLookAtRH',['../a00299.html#gaf6529ac8c04a57fcc35865b5c9437cc8',1,'glm']]],\n  ['quinticeasein',['quinticEaseIn',['../a00318.html#ga097579d8e087dcf48037588140a21640',1,'glm']]],\n  ['quinticeaseinout',['quinticEaseInOut',['../a00318.html#ga2a82d5c46df7e2d21cc0108eb7b83934',1,'glm']]],\n  ['quinticeaseout',['quinticEaseOut',['../a00318.html#ga7dbd4d5c8da3f5353121f615e7b591d7',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_f.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"functions_f.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/functions_f.js",
    "content": "var searchData=\n[\n  ['radialgradient',['radialGradient',['../a00327.html#gaaecb1e93de4cbe0758b882812d4da294',1,'glm']]],\n  ['radians',['radians',['../a00373.html#ga6e1db4862c5e25afd553930e2fdd6a68',1,'glm']]],\n  ['reflect',['reflect',['../a00279.html#ga5631dd1d5618de5450b1ea3cf3e94905',1,'glm']]],\n  ['refract',['refract',['../a00279.html#ga01da3dff9e2ef6b9d4915c3047e22b74',1,'glm']]],\n  ['repeat',['repeat',['../a00369.html#ga809650c6310ea7c42666e918c117fb6f',1,'glm']]],\n  ['rgb2ycocg',['rgb2YCoCg',['../a00313.html#ga0606353ec2a9b9eaa84f1b02ec391bc5',1,'glm']]],\n  ['rgb2ycocgr',['rgb2YCoCgR',['../a00313.html#ga0389772e44ca0fd2ba4a79bdd8efe898',1,'glm']]],\n  ['rgbcolor',['rgbColor',['../a00312.html#ga5f9193be46f45f0655c05a0cdca006db',1,'glm']]],\n  ['righthanded',['rightHanded',['../a00328.html#ga99386a5ab5491871b947076e21699cc8',1,'glm']]],\n  ['roll',['roll',['../a00299.html#ga0cc5ad970d0b00829b139fe0fe5a1e13',1,'glm']]],\n  ['root_5ffive',['root_five',['../a00290.html#gae9ebbded75b53d4faeb1e4ef8b3347a2',1,'glm']]],\n  ['root_5fhalf_5fpi',['root_half_pi',['../a00290.html#ga4e276cb823cc5e612d4f89ed99c75039',1,'glm']]],\n  ['root_5fln_5ffour',['root_ln_four',['../a00290.html#ga4129412e96b33707a77c1a07652e23e2',1,'glm']]],\n  ['root_5fpi',['root_pi',['../a00290.html#ga261380796b2cd496f68d2cf1d08b8eb9',1,'glm']]],\n  ['root_5fthree',['root_three',['../a00290.html#ga4f286be4abe88be1eed7d2a9f6cb193e',1,'glm']]],\n  ['root_5ftwo',['root_two',['../a00290.html#ga74e607d29020f100c0d0dc46ce2ca950',1,'glm']]],\n  ['root_5ftwo_5fpi',['root_two_pi',['../a00290.html#ga2bcedc575039fe0cd765742f8bbb0bd3',1,'glm']]],\n  ['rotate',['rotate',['../a00247.html#gaee9e865eaa9776370996da2940873fd4',1,'glm::rotate(mat&lt; 4, 4, T, Q &gt; const &amp;m, T angle, vec&lt; 3, T, Q &gt; const &amp;axis)'],['../a00256.html#gabfc57de6d4d2e11970f54119c5ccf0f5',1,'glm::rotate(qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)'],['../a00341.html#gad5c84a4932a758f385a87098ce1b1660',1,'glm::rotate(mat&lt; 3, 3, T, Q &gt; const &amp;m, T angle)'],['../a00352.html#ga07da6ef58646442efe93b0c273d73776',1,'glm::rotate(qua&lt; T, Q &gt; const &amp;q, vec&lt; 3, T, Q &gt; const &amp;v)'],['../a00352.html#gafcb78dfff45fbf19a7fcb2bd03fbf196',1,'glm::rotate(qua&lt; T, Q &gt; const &amp;q, vec&lt; 4, T, Q &gt; const &amp;v)'],['../a00356.html#gab64a67b52ff4f86c3ba16595a5a25af6',1,'glm::rotate(vec&lt; 2, T, Q &gt; const &amp;v, T const &amp;angle)'],['../a00356.html#ga1ba501ef83d1a009a17ac774cc560f21',1,'glm::rotate(vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)'],['../a00356.html#ga1005f1267ed9c57faa3f24cf6873b961',1,'glm::rotate(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;normal)'],['../a00362.html#gaf599be4c0e9d99be1f9cddba79b6018b',1,'glm::rotate(T angle, vec&lt; 3, T, Q &gt; const &amp;v)']]],\n  ['rotatenormalizedaxis',['rotateNormalizedAxis',['../a00355.html#ga50efd7ebca0f7a603bb3cc11e34c708d',1,'glm::rotateNormalizedAxis(mat&lt; 4, 4, T, Q &gt; const &amp;m, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)'],['../a00355.html#ga08f9c5411437d528019a25bfc01473d1',1,'glm::rotateNormalizedAxis(qua&lt; T, Q &gt; const &amp;q, T const &amp;angle, vec&lt; 3, T, Q &gt; const &amp;axis)']]],\n  ['rotatex',['rotateX',['../a00356.html#ga059fdbdba4cca35cdff172a9d0d0afc9',1,'glm::rotateX(vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)'],['../a00356.html#ga4333b1ea8ebf1bd52bc3801a7617398a',1,'glm::rotateX(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)']]],\n  ['rotatey',['rotateY',['../a00356.html#gaebdc8b054ace27d9f62e054531c6f44d',1,'glm::rotateY(vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)'],['../a00356.html#ga3ce3db0867b7f8efd878ee34f95a623b',1,'glm::rotateY(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)']]],\n  ['rotatez',['rotateZ',['../a00356.html#ga5a048838a03f6249acbacb4dbacf79c4',1,'glm::rotateZ(vec&lt; 3, T, Q &gt; const &amp;v, T const &amp;angle)'],['../a00356.html#ga923b75c6448161053768822d880702e6',1,'glm::rotateZ(vec&lt; 4, T, Q &gt; const &amp;v, T const &amp;angle)']]],\n  ['rotation',['rotation',['../a00352.html#ga03e61282831cc3f52cc76f72f52ad2c5',1,'glm']]],\n  ['round',['round',['../a00241.html#gafa03aca8c4713e1cc892aa92ca135a7e',1,'glm']]],\n  ['roundeven',['roundEven',['../a00241.html#ga76b81785045a057989a84d99aeeb1578',1,'glm']]],\n  ['roundmultiple',['roundMultiple',['../a00302.html#gab892defcc9c0b0618df7251253dc0fbb',1,'glm::roundMultiple(genType v, genType Multiple)'],['../a00302.html#ga2f1a68332d761804c054460a612e3a4b',1,'glm::roundMultiple(vec&lt; L, T, Q &gt; const &amp;v, vec&lt; L, T, Q &gt; const &amp;Multiple)']]],\n  ['roundpoweroftwo',['roundPowerOfTwo',['../a00302.html#gae4e1bf5d1cd179f59261a7342bdcafca',1,'glm::roundPowerOfTwo(genIUType v)'],['../a00302.html#ga258802a7d55c03c918f28cf4d241c4d0',1,'glm::roundPowerOfTwo(vec&lt; L, T, Q &gt; const &amp;v)']]],\n  ['row',['row',['../a00293.html#ga259e5ebd0f31ec3f83440f8cae7f5dba',1,'glm::row(genType const &amp;m, length_t index)'],['../a00293.html#gaadcc64829aadf4103477679e48c7594f',1,'glm::row(genType const &amp;m, length_t index, typename genType::row_type const &amp;x)']]],\n  ['rowmajor2',['rowMajor2',['../a00338.html#gaf5b1aee9e3eb1acf9d6c3c8be1e73bb8',1,'glm::rowMajor2(vec&lt; 2, T, Q &gt; const &amp;v1, vec&lt; 2, T, Q &gt; const &amp;v2)'],['../a00338.html#gaf66c75ed69ca9e87462550708c2c6726',1,'glm::rowMajor2(mat&lt; 2, 2, T, Q &gt; const &amp;m)']]],\n  ['rowmajor3',['rowMajor3',['../a00338.html#ga2ae46497493339f745754e40f438442e',1,'glm::rowMajor3(vec&lt; 3, T, Q &gt; const &amp;v1, vec&lt; 3, T, Q &gt; const &amp;v2, vec&lt; 3, T, Q &gt; const &amp;v3)'],['../a00338.html#gad8a3a50ab47bbe8d36cdb81d90dfcf77',1,'glm::rowMajor3(mat&lt; 3, 3, T, Q &gt; const &amp;m)']]],\n  ['rowmajor4',['rowMajor4',['../a00338.html#ga9636cd6bbe2c32a8d0c03ffb8b1ef284',1,'glm::rowMajor4(vec&lt; 4, T, Q &gt; const &amp;v1, vec&lt; 4, T, Q &gt; const &amp;v2, vec&lt; 4, T, Q &gt; const &amp;v3, vec&lt; 4, T, Q &gt; const &amp;v4)'],['../a00338.html#gac92ad1c2acdf18d3eb7be45a32f9566b',1,'glm::rowMajor4(mat&lt; 4, 4, T, Q &gt; const &amp;m)']]],\n  ['rq_5fdecompose',['rq_decompose',['../a00336.html#ga82874e2ebe891ba35ac21d9993873758',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_0.js",
    "content": "var searchData=\n[\n  ['angle_20and_20trigonometry_20functions',['Angle and Trigonometry Functions',['../a00373.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_1.js",
    "content": "var searchData=\n[\n  ['core_20features',['Core features',['../a00280.html',1,'']]],\n  ['common_20functions',['Common functions',['../a00241.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_2.js",
    "content": "var searchData=\n[\n  ['exponential_20functions',['Exponential functions',['../a00242.html',1,'']]],\n  ['experimental_20extensions',['Experimental extensions',['../a00287.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_3.js",
    "content": "var searchData=\n[\n  ['floating_2dpoint_20pack_20and_20unpack_20functions',['Floating-Point Pack and Unpack Functions',['../a00372.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_4.js",
    "content": "var searchData=\n[\n  ['geometric_20functions',['Geometric functions',['../a00279.html',1,'']]],\n  ['glm_5fext_5fmatrix_5fclip_5fspace',['GLM_EXT_matrix_clip_space',['../a00243.html',1,'']]],\n  ['glm_5fext_5fmatrix_5fcommon',['GLM_EXT_matrix_common',['../a00244.html',1,'']]],\n  ['glm_5fext_5fmatrix_5fprojection',['GLM_EXT_matrix_projection',['../a00245.html',1,'']]],\n  ['glm_5fext_5fmatrix_5frelational',['GLM_EXT_matrix_relational',['../a00246.html',1,'']]],\n  ['glm_5fext_5fmatrix_5ftransform',['GLM_EXT_matrix_transform',['../a00247.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fcommon',['GLM_EXT_quaternion_common',['../a00248.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fdouble',['GLM_EXT_quaternion_double',['../a00249.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fdouble_5fprecision',['GLM_EXT_quaternion_double_precision',['../a00250.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fexponential',['GLM_EXT_quaternion_exponential',['../a00251.html',1,'']]],\n  ['glm_5fext_5fquaternion_5ffloat',['GLM_EXT_quaternion_float',['../a00252.html',1,'']]],\n  ['glm_5fext_5fquaternion_5ffloat_5fprecision',['GLM_EXT_quaternion_float_precision',['../a00253.html',1,'']]],\n  ['glm_5fext_5fquaternion_5fgeometric',['GLM_EXT_quaternion_geometric',['../a00254.html',1,'']]],\n  ['glm_5fext_5fquaternion_5frelational',['GLM_EXT_quaternion_relational',['../a00255.html',1,'']]],\n  ['glm_5fext_5fquaternion_5ftransform',['GLM_EXT_quaternion_transform',['../a00256.html',1,'']]],\n  ['glm_5fext_5fquaternion_5ftrigonometric',['GLM_EXT_quaternion_trigonometric',['../a00257.html',1,'']]],\n  ['glm_5fext_5fscalar_5fcommon',['GLM_EXT_scalar_common',['../a00258.html',1,'']]],\n  ['glm_5fext_5fscalar_5fconstants',['GLM_EXT_scalar_constants',['../a00259.html',1,'']]],\n  ['glm_5fext_5fscalar_5fint_5fsized',['GLM_EXT_scalar_int_sized',['../a00260.html',1,'']]],\n  ['glm_5fext_5fscalar_5finteger',['GLM_EXT_scalar_integer',['../a00261.html',1,'']]],\n  ['glm_5fext_5fscalar_5frelational',['GLM_EXT_scalar_relational',['../a00262.html',1,'']]],\n  ['glm_5fext_5fscalar_5fuint_5fsized',['GLM_EXT_scalar_uint_sized',['../a00263.html',1,'']]],\n  ['glm_5fext_5fscalar_5fulp',['GLM_EXT_scalar_ulp',['../a00264.html',1,'']]],\n  ['glm_5fext_5fvector_5fbool1',['GLM_EXT_vector_bool1',['../a00265.html',1,'']]],\n  ['glm_5fext_5fvector_5fbool1_5fprecision',['GLM_EXT_vector_bool1_precision',['../a00266.html',1,'']]],\n  ['glm_5fext_5fvector_5fcommon',['GLM_EXT_vector_common',['../a00267.html',1,'']]],\n  ['glm_5fext_5fvector_5fdouble1',['GLM_EXT_vector_double1',['../a00268.html',1,'']]],\n  ['glm_5fext_5fvector_5fdouble1_5fprecision',['GLM_EXT_vector_double1_precision',['../a00269.html',1,'']]],\n  ['glm_5fext_5fvector_5ffloat1',['GLM_EXT_vector_float1',['../a00270.html',1,'']]],\n  ['glm_5fext_5fvector_5ffloat1_5fprecision',['GLM_EXT_vector_float1_precision',['../a00271.html',1,'']]],\n  ['glm_5fext_5fvector_5fint1',['GLM_EXT_vector_int1',['../a00272.html',1,'']]],\n  ['glm_5fext_5fvector_5fint1_5fprecision',['GLM_EXT_vector_int1_precision',['../a00273.html',1,'']]],\n  ['glm_5fext_5fvector_5finteger',['GLM_EXT_vector_integer',['../a00274.html',1,'']]],\n  ['glm_5fext_5fvector_5frelational',['GLM_EXT_vector_relational',['../a00275.html',1,'']]],\n  ['glm_5fext_5fvector_5fuint1',['GLM_EXT_vector_uint1',['../a00276.html',1,'']]],\n  ['glm_5fext_5fvector_5fuint1_5fprecision',['GLM_EXT_vector_uint1_precision',['../a00277.html',1,'']]],\n  ['glm_5fext_5fvector_5fulp',['GLM_EXT_vector_ulp',['../a00278.html',1,'']]],\n  ['glm_5fgtc_5fbitfield',['GLM_GTC_bitfield',['../a00288.html',1,'']]],\n  ['glm_5fgtc_5fcolor_5fspace',['GLM_GTC_color_space',['../a00289.html',1,'']]],\n  ['glm_5fgtc_5fconstants',['GLM_GTC_constants',['../a00290.html',1,'']]],\n  ['glm_5fgtc_5fepsilon',['GLM_GTC_epsilon',['../a00291.html',1,'']]],\n  ['glm_5fgtc_5finteger',['GLM_GTC_integer',['../a00292.html',1,'']]],\n  ['glm_5fgtc_5fmatrix_5faccess',['GLM_GTC_matrix_access',['../a00293.html',1,'']]],\n  ['glm_5fgtc_5fmatrix_5finteger',['GLM_GTC_matrix_integer',['../a00294.html',1,'']]],\n  ['glm_5fgtc_5fmatrix_5finverse',['GLM_GTC_matrix_inverse',['../a00295.html',1,'']]],\n  ['glm_5fgtc_5fmatrix_5ftransform',['GLM_GTC_matrix_transform',['../a00296.html',1,'']]],\n  ['glm_5fgtc_5fnoise',['GLM_GTC_noise',['../a00297.html',1,'']]],\n  ['glm_5fgtc_5fpacking',['GLM_GTC_packing',['../a00298.html',1,'']]],\n  ['glm_5fgtc_5fquaternion',['GLM_GTC_quaternion',['../a00299.html',1,'']]],\n  ['glm_5fgtc_5frandom',['GLM_GTC_random',['../a00300.html',1,'']]],\n  ['glm_5fgtc_5freciprocal',['GLM_GTC_reciprocal',['../a00301.html',1,'']]],\n  ['glm_5fgtc_5fround',['GLM_GTC_round',['../a00302.html',1,'']]],\n  ['glm_5fgtc_5ftype_5faligned',['GLM_GTC_type_aligned',['../a00303.html',1,'']]],\n  ['glm_5fgtc_5ftype_5fprecision',['GLM_GTC_type_precision',['../a00304.html',1,'']]],\n  ['glm_5fgtc_5ftype_5fptr',['GLM_GTC_type_ptr',['../a00305.html',1,'']]],\n  ['glm_5fgtc_5fulp',['GLM_GTC_ulp',['../a00306.html',1,'']]],\n  ['glm_5fgtc_5fvec1',['GLM_GTC_vec1',['../a00307.html',1,'']]],\n  ['glm_5fgtx_5fassociated_5fmin_5fmax',['GLM_GTX_associated_min_max',['../a00308.html',1,'']]],\n  ['glm_5fgtx_5fbit',['GLM_GTX_bit',['../a00309.html',1,'']]],\n  ['glm_5fgtx_5fclosest_5fpoint',['GLM_GTX_closest_point',['../a00310.html',1,'']]],\n  ['glm_5fgtx_5fcolor_5fencoding',['GLM_GTX_color_encoding',['../a00311.html',1,'']]],\n  ['glm_5fgtx_5fcolor_5fspace',['GLM_GTX_color_space',['../a00312.html',1,'']]],\n  ['glm_5fgtx_5fcolor_5fspace_5fycocg',['GLM_GTX_color_space_YCoCg',['../a00313.html',1,'']]],\n  ['glm_5fgtx_5fcommon',['GLM_GTX_common',['../a00314.html',1,'']]],\n  ['glm_5fgtx_5fcompatibility',['GLM_GTX_compatibility',['../a00315.html',1,'']]],\n  ['glm_5fgtx_5fcomponent_5fwise',['GLM_GTX_component_wise',['../a00316.html',1,'']]],\n  ['glm_5fgtx_5fdual_5fquaternion',['GLM_GTX_dual_quaternion',['../a00317.html',1,'']]],\n  ['glm_5fgtx_5feasing',['GLM_GTX_easing',['../a00318.html',1,'']]],\n  ['glm_5fgtx_5feuler_5fangles',['GLM_GTX_euler_angles',['../a00319.html',1,'']]],\n  ['glm_5fgtx_5fextend',['GLM_GTX_extend',['../a00320.html',1,'']]],\n  ['glm_5fgtx_5fextented_5fmin_5fmax',['GLM_GTX_extented_min_max',['../a00321.html',1,'']]],\n  ['glm_5fgtx_5fexterior_5fproduct',['GLM_GTX_exterior_product',['../a00322.html',1,'']]],\n  ['glm_5fgtx_5ffast_5fexponential',['GLM_GTX_fast_exponential',['../a00323.html',1,'']]],\n  ['glm_5fgtx_5ffast_5fsquare_5froot',['GLM_GTX_fast_square_root',['../a00324.html',1,'']]],\n  ['glm_5fgtx_5ffast_5ftrigonometry',['GLM_GTX_fast_trigonometry',['../a00325.html',1,'']]],\n  ['glm_5fgtx_5ffunctions',['GLM_GTX_functions',['../a00326.html',1,'']]],\n  ['glm_5fgtx_5fgradient_5fpaint',['GLM_GTX_gradient_paint',['../a00327.html',1,'']]],\n  ['glm_5fgtx_5fhanded_5fcoordinate_5fspace',['GLM_GTX_handed_coordinate_space',['../a00328.html',1,'']]],\n  ['glm_5fgtx_5fhash',['GLM_GTX_hash',['../a00329.html',1,'']]],\n  ['glm_5fgtx_5finteger',['GLM_GTX_integer',['../a00330.html',1,'']]],\n  ['glm_5fgtx_5fintersect',['GLM_GTX_intersect',['../a00331.html',1,'']]],\n  ['glm_5fgtx_5fio',['GLM_GTX_io',['../a00332.html',1,'']]],\n  ['glm_5fgtx_5flog_5fbase',['GLM_GTX_log_base',['../a00333.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5fcross_5fproduct',['GLM_GTX_matrix_cross_product',['../a00334.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5fdecompose',['GLM_GTX_matrix_decompose',['../a00335.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5ffactorisation',['GLM_GTX_matrix_factorisation',['../a00336.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5finterpolation',['GLM_GTX_matrix_interpolation',['../a00337.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5fmajor_5fstorage',['GLM_GTX_matrix_major_storage',['../a00338.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5foperation',['GLM_GTX_matrix_operation',['../a00339.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5fquery',['GLM_GTX_matrix_query',['../a00340.html',1,'']]],\n  ['glm_5fgtx_5fmatrix_5ftransform_5f2d',['GLM_GTX_matrix_transform_2d',['../a00341.html',1,'']]],\n  ['glm_5fgtx_5fmixed_5fproducte',['GLM_GTX_mixed_producte',['../a00342.html',1,'']]],\n  ['glm_5fgtx_5fnorm',['GLM_GTX_norm',['../a00343.html',1,'']]],\n  ['glm_5fgtx_5fnormal',['GLM_GTX_normal',['../a00344.html',1,'']]],\n  ['glm_5fgtx_5fnormalize_5fdot',['GLM_GTX_normalize_dot',['../a00345.html',1,'']]],\n  ['glm_5fgtx_5fnumber_5fprecision',['GLM_GTX_number_precision',['../a00346.html',1,'']]],\n  ['glm_5fgtx_5foptimum_5fpow',['GLM_GTX_optimum_pow',['../a00347.html',1,'']]],\n  ['glm_5fgtx_5forthonormalize',['GLM_GTX_orthonormalize',['../a00348.html',1,'']]],\n  ['glm_5fgtx_5fperpendicular',['GLM_GTX_perpendicular',['../a00349.html',1,'']]],\n  ['glm_5fgtx_5fpolar_5fcoordinates',['GLM_GTX_polar_coordinates',['../a00350.html',1,'']]],\n  ['glm_5fgtx_5fprojection',['GLM_GTX_projection',['../a00351.html',1,'']]],\n  ['glm_5fgtx_5fquaternion',['GLM_GTX_quaternion',['../a00352.html',1,'']]],\n  ['glm_5fgtx_5frange',['GLM_GTX_range',['../a00353.html',1,'']]],\n  ['glm_5fgtx_5fraw_5fdata',['GLM_GTX_raw_data',['../a00354.html',1,'']]],\n  ['glm_5fgtx_5frotate_5fnormalized_5faxis',['GLM_GTX_rotate_normalized_axis',['../a00355.html',1,'']]],\n  ['glm_5fgtx_5frotate_5fvector',['GLM_GTX_rotate_vector',['../a00356.html',1,'']]],\n  ['glm_5fgtx_5fscalar_5frelational',['GLM_GTX_scalar_relational',['../a00357.html',1,'']]],\n  ['glm_5fgtx_5fspline',['GLM_GTX_spline',['../a00358.html',1,'']]],\n  ['glm_5fgtx_5fstd_5fbased_5ftype',['GLM_GTX_std_based_type',['../a00359.html',1,'']]],\n  ['glm_5fgtx_5fstring_5fcast',['GLM_GTX_string_cast',['../a00360.html',1,'']]],\n  ['glm_5fgtx_5ftexture',['GLM_GTX_texture',['../a00361.html',1,'']]],\n  ['glm_5fgtx_5ftransform',['GLM_GTX_transform',['../a00362.html',1,'']]],\n  ['glm_5fgtx_5ftransform2',['GLM_GTX_transform2',['../a00363.html',1,'']]],\n  ['glm_5fgtx_5ftype_5faligned',['GLM_GTX_type_aligned',['../a00364.html',1,'']]],\n  ['glm_5fgtx_5ftype_5ftrait',['GLM_GTX_type_trait',['../a00365.html',1,'']]],\n  ['glm_5fgtx_5fvec_5fswizzle',['GLM_GTX_vec_swizzle',['../a00366.html',1,'']]],\n  ['glm_5fgtx_5fvector_5fangle',['GLM_GTX_vector_angle',['../a00367.html',1,'']]],\n  ['glm_5fgtx_5fvector_5fquery',['GLM_GTX_vector_query',['../a00368.html',1,'']]],\n  ['glm_5fgtx_5fwrap',['GLM_GTX_wrap',['../a00369.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_5.js",
    "content": "var searchData=\n[\n  ['integer_20functions',['Integer functions',['../a00370.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_6.js",
    "content": "var searchData=\n[\n  ['matrix_20functions',['Matrix functions',['../a00371.html',1,'']]],\n  ['matrix_20types',['Matrix types',['../a00283.html',1,'']]],\n  ['matrix_20types_20with_20precision_20qualifiers',['Matrix types with precision qualifiers',['../a00284.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_7.js",
    "content": "var searchData=\n[\n  ['recommended_20extensions',['Recommended extensions',['../a00286.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_8.js",
    "content": "var searchData=\n[\n  ['stable_20extensions',['Stable extensions',['../a00285.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"groups_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/groups_9.js",
    "content": "var searchData=\n[\n  ['vector_20relational_20functions',['Vector Relational Functions',['../a00374.html',1,'']]],\n  ['vector_20types',['Vector types',['../a00281.html',1,'']]],\n  ['vector_20types_20with_20precision_20qualifiers',['Vector types with precision qualifiers',['../a00282.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/nomatches.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/pages_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"pages_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/pages_0.js",
    "content": "var searchData=\n[\n  ['opengl_20mathematics_20_28glm_29',['OpenGL Mathematics (GLM)',['../index.html',1,'']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/search.css",
    "content": "/*---------------- Search Box */\n\n#FSearchBox {\n    float: left;\n}\n\n#MSearchBox {\n    white-space : nowrap;\n    position: absolute;\n    float: none;\n    display: inline;\n    margin-top: 8px;\n    right: 0px;\n    width: 170px;\n    z-index: 102;\n    background-color: white;\n}\n\n#MSearchBox .left\n{\n    display:block;\n    position:absolute;\n    left:10px;\n    width:20px;\n    height:19px;\n    background:url('search_l.png') no-repeat;\n    background-position:right;\n}\n\n#MSearchSelect {\n    display:block;\n    position:absolute;\n    width:20px;\n    height:19px;\n}\n\n.left #MSearchSelect {\n    left:4px;\n}\n\n.right #MSearchSelect {\n    right:5px;\n}\n\n#MSearchField {\n    display:block;\n    position:absolute;\n    height:19px;\n    background:url('search_m.png') repeat-x;\n    border:none;\n    width:111px;\n    margin-left:20px;\n    padding-left:4px;\n    color: #909090;\n    outline: none;\n    font: 9pt Arial, Verdana, sans-serif;\n}\n\n#FSearchBox #MSearchField {\n    margin-left:15px;\n}\n\n#MSearchBox .right {\n    display:block;\n    position:absolute;\n    right:10px;\n    top:0px;\n    width:20px;\n    height:19px;\n    background:url('search_r.png') no-repeat;\n    background-position:left;\n}\n\n#MSearchClose {\n    display: none;\n    position: absolute;\n    top: 4px;\n    background : none;\n    border: none;\n    margin: 0px 4px 0px 0px;\n    padding: 0px 0px;\n    outline: none;\n}\n\n.left #MSearchClose {\n    left: 6px;\n}\n\n.right #MSearchClose {\n    right: 2px;\n}\n\n.MSearchBoxActive #MSearchField {\n    color: #000000;\n}\n\n/*---------------- Search filter selection */\n\n#MSearchSelectWindow {\n    display: none;\n    position: absolute;\n    left: 0; top: 0;\n    border: 1px solid #90A5CE;\n    background-color: #F9FAFC;\n    z-index: 1;\n    padding-top: 4px;\n    padding-bottom: 4px;\n    -moz-border-radius: 4px;\n    -webkit-border-top-left-radius: 4px;\n    -webkit-border-top-right-radius: 4px;\n    -webkit-border-bottom-left-radius: 4px;\n    -webkit-border-bottom-right-radius: 4px;\n    -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n}\n\n.SelectItem {\n    font: 8pt Arial, Verdana, sans-serif;\n    padding-left:  2px;\n    padding-right: 12px;\n    border: 0px;\n}\n\nspan.SelectionMark {\n    margin-right: 4px;\n    font-family: monospace;\n    outline-style: none;\n    text-decoration: none;\n}\n\na.SelectItem {\n    display: block;\n    outline-style: none;\n    color: #000000; \n    text-decoration: none;\n    padding-left:   6px;\n    padding-right: 12px;\n}\n\na.SelectItem:focus,\na.SelectItem:active {\n    color: #000000; \n    outline-style: none;\n    text-decoration: none;\n}\n\na.SelectItem:hover {\n    color: #FFFFFF;\n    background-color: #3D578C;\n    outline-style: none;\n    text-decoration: none;\n    cursor: pointer;\n    display: block;\n}\n\n/*---------------- Search results window */\n\niframe#MSearchResults {\n    width: 60ex;\n    height: 15em;\n}\n\n#MSearchResultsWindow {\n    display: none;\n    position: absolute;\n    left: 0; top: 0;\n    border: 1px solid #000;\n    background-color: #EEF1F7;\n}\n\n/* ----------------------------------- */\n\n\n#SRIndex {\n    clear:both; \n    padding-bottom: 15px;\n}\n\n.SREntry {\n    font-size: 10pt;\n    padding-left: 1ex;\n}\n\n.SRPage .SREntry {\n    font-size: 8pt;\n    padding: 1px 5px;\n}\n\nbody.SRPage {\n    margin: 5px 2px;\n}\n\n.SRChildren {\n    padding-left: 3ex; padding-bottom: .5em \n}\n\n.SRPage .SRChildren {\n    display: none;\n}\n\n.SRSymbol {\n    font-weight: bold; \n    color: #425E97;\n    font-family: Arial, Verdana, sans-serif;\n    text-decoration: none;\n    outline: none;\n}\n\na.SRScope {\n    display: block;\n    color: #425E97; \n    font-family: Arial, Verdana, sans-serif;\n    text-decoration: none;\n    outline: none;\n}\n\na.SRSymbol:focus, a.SRSymbol:active,\na.SRScope:focus, a.SRScope:active {\n    text-decoration: underline;\n}\n\nspan.SRScope {\n    padding-left: 4px;\n}\n\n.SRPage .SRStatus {\n    padding: 2px 5px;\n    font-size: 8pt;\n    font-style: italic;\n}\n\n.SRResult {\n    display: none;\n}\n\nDIV.searchresults {\n    margin-left: 10px;\n    margin-right: 10px;\n}\n\n/*---------------- External search page results */\n\n.searchresult {\n    background-color: #F0F3F8;\n}\n\n.pages b {\n   color: white;\n   padding: 5px 5px 3px 5px;\n   background-image: url(\"../tab_a.png\");\n   background-repeat: repeat-x;\n   text-shadow: 0 1px 1px #000000;\n}\n\n.pages {\n    line-height: 17px;\n    margin-left: 4px;\n    text-decoration: none;\n}\n\n.hl {\n    font-weight: bold;\n}\n\n#searchresults {\n    margin-bottom: 20px;\n}\n\n.searchpages {\n    margin-top: 10px;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/search.js",
    "content": "function convertToId(search)\n{\n  var result = '';\n  for (i=0;i<search.length;i++)\n  {\n    var c = search.charAt(i);\n    var cn = c.charCodeAt(0);\n    if (c.match(/[a-z0-9\\u0080-\\uFFFF]/))\n    {\n      result+=c;\n    }\n    else if (cn<16)\n    {\n      result+=\"_0\"+cn.toString(16);\n    }\n    else\n    {\n      result+=\"_\"+cn.toString(16);\n    }\n  }\n  return result;\n}\n\nfunction getXPos(item)\n{\n  var x = 0;\n  if (item.offsetWidth)\n  {\n    while (item && item!=document.body)\n    {\n      x   += item.offsetLeft;\n      item = item.offsetParent;\n    }\n  }\n  return x;\n}\n\nfunction getYPos(item)\n{\n  var y = 0;\n  if (item.offsetWidth)\n  {\n     while (item && item!=document.body)\n     {\n       y   += item.offsetTop;\n       item = item.offsetParent;\n     }\n  }\n  return y;\n}\n\n/* A class handling everything associated with the search panel.\n\n   Parameters:\n   name - The name of the global variable that will be\n          storing this instance.  Is needed to be able to set timeouts.\n   resultPath - path to use for external files\n*/\nfunction SearchBox(name, resultsPath, inFrame, label)\n{\n  if (!name || !resultsPath) {  alert(\"Missing parameters to SearchBox.\"); }\n\n  // ---------- Instance variables\n  this.name                  = name;\n  this.resultsPath           = resultsPath;\n  this.keyTimeout            = 0;\n  this.keyTimeoutLength      = 500;\n  this.closeSelectionTimeout = 300;\n  this.lastSearchValue       = \"\";\n  this.lastResultsPage       = \"\";\n  this.hideTimeout           = 0;\n  this.searchIndex           = 0;\n  this.searchActive          = false;\n  this.insideFrame           = inFrame;\n  this.searchLabel           = label;\n\n  // ----------- DOM Elements\n\n  this.DOMSearchField = function()\n  {  return document.getElementById(\"MSearchField\");  }\n\n  this.DOMSearchSelect = function()\n  {  return document.getElementById(\"MSearchSelect\");  }\n\n  this.DOMSearchSelectWindow = function()\n  {  return document.getElementById(\"MSearchSelectWindow\");  }\n\n  this.DOMPopupSearchResults = function()\n  {  return document.getElementById(\"MSearchResults\");  }\n\n  this.DOMPopupSearchResultsWindow = function()\n  {  return document.getElementById(\"MSearchResultsWindow\");  }\n\n  this.DOMSearchClose = function()\n  {  return document.getElementById(\"MSearchClose\"); }\n\n  this.DOMSearchBox = function()\n  {  return document.getElementById(\"MSearchBox\");  }\n\n  // ------------ Event Handlers\n\n  // Called when focus is added or removed from the search field.\n  this.OnSearchFieldFocus = function(isActive)\n  {\n    this.Activate(isActive);\n  }\n\n  this.OnSearchSelectShow = function()\n  {\n    var searchSelectWindow = this.DOMSearchSelectWindow();\n    var searchField        = this.DOMSearchSelect();\n\n    if (this.insideFrame)\n    {\n      var left = getXPos(searchField);\n      var top  = getYPos(searchField);\n      left += searchField.offsetWidth + 6;\n      top += searchField.offsetHeight;\n\n      // show search selection popup\n      searchSelectWindow.style.display='block';\n      left -= searchSelectWindow.offsetWidth;\n      searchSelectWindow.style.left =  left + 'px';\n      searchSelectWindow.style.top  =  top  + 'px';\n    }\n    else\n    {\n      var left = getXPos(searchField);\n      var top  = getYPos(searchField);\n      top += searchField.offsetHeight;\n\n      // show search selection popup\n      searchSelectWindow.style.display='block';\n      searchSelectWindow.style.left =  left + 'px';\n      searchSelectWindow.style.top  =  top  + 'px';\n    }\n\n    // stop selection hide timer\n    if (this.hideTimeout)\n    {\n      clearTimeout(this.hideTimeout);\n      this.hideTimeout=0;\n    }\n    return false; // to avoid \"image drag\" default event\n  }\n\n  this.OnSearchSelectHide = function()\n  {\n    this.hideTimeout = setTimeout(this.name +\".CloseSelectionWindow()\",\n                                  this.closeSelectionTimeout);\n  }\n\n  // Called when the content of the search field is changed.\n  this.OnSearchFieldChange = function(evt)\n  {\n    if (this.keyTimeout) // kill running timer\n    {\n      clearTimeout(this.keyTimeout);\n      this.keyTimeout = 0;\n    }\n\n    var e  = (evt) ? evt : window.event; // for IE\n    if (e.keyCode==40 || e.keyCode==13)\n    {\n      if (e.shiftKey==1)\n      {\n        this.OnSearchSelectShow();\n        var win=this.DOMSearchSelectWindow();\n        for (i=0;i<win.childNodes.length;i++)\n        {\n          var child = win.childNodes[i]; // get span within a\n          if (child.className=='SelectItem')\n          {\n            child.focus();\n            return;\n          }\n        }\n        return;\n      }\n      else if (window.frames.MSearchResults.searchResults)\n      {\n        var elem = window.frames.MSearchResults.searchResults.NavNext(0);\n        if (elem) elem.focus();\n      }\n    }\n    else if (e.keyCode==27) // Escape out of the search field\n    {\n      this.DOMSearchField().blur();\n      this.DOMPopupSearchResultsWindow().style.display = 'none';\n      this.DOMSearchClose().style.display = 'none';\n      this.lastSearchValue = '';\n      this.Activate(false);\n      return;\n    }\n\n    // strip whitespaces\n    var searchValue = this.DOMSearchField().value.replace(/ +/g, \"\");\n\n    if (searchValue != this.lastSearchValue) // search value has changed\n    {\n      if (searchValue != \"\") // non-empty search\n      {\n        // set timer for search update\n        this.keyTimeout = setTimeout(this.name + '.Search()',\n                                     this.keyTimeoutLength);\n      }\n      else // empty search field\n      {\n        this.DOMPopupSearchResultsWindow().style.display = 'none';\n        this.DOMSearchClose().style.display = 'none';\n        this.lastSearchValue = '';\n      }\n    }\n  }\n\n  this.SelectItemCount = function(id)\n  {\n    var count=0;\n    var win=this.DOMSearchSelectWindow();\n    for (i=0;i<win.childNodes.length;i++)\n    {\n      var child = win.childNodes[i]; // get span within a\n      if (child.className=='SelectItem')\n      {\n        count++;\n      }\n    }\n    return count;\n  }\n\n  this.SelectItemSet = function(id)\n  {\n    var i,j=0;\n    var win=this.DOMSearchSelectWindow();\n    for (i=0;i<win.childNodes.length;i++)\n    {\n      var child = win.childNodes[i]; // get span within a\n      if (child.className=='SelectItem')\n      {\n        var node = child.firstChild;\n        if (j==id)\n        {\n          node.innerHTML='&#8226;';\n        }\n        else\n        {\n          node.innerHTML='&#160;';\n        }\n        j++;\n      }\n    }\n  }\n\n  // Called when an search filter selection is made.\n  // set item with index id as the active item\n  this.OnSelectItem = function(id)\n  {\n    this.searchIndex = id;\n    this.SelectItemSet(id);\n    var searchValue = this.DOMSearchField().value.replace(/ +/g, \"\");\n    if (searchValue!=\"\" && this.searchActive) // something was found -> do a search\n    {\n      this.Search();\n    }\n  }\n\n  this.OnSearchSelectKey = function(evt)\n  {\n    var e = (evt) ? evt : window.event; // for IE\n    if (e.keyCode==40 && this.searchIndex<this.SelectItemCount()) // Down\n    {\n      this.searchIndex++;\n      this.OnSelectItem(this.searchIndex);\n    }\n    else if (e.keyCode==38 && this.searchIndex>0) // Up\n    {\n      this.searchIndex--;\n      this.OnSelectItem(this.searchIndex);\n    }\n    else if (e.keyCode==13 || e.keyCode==27)\n    {\n      this.OnSelectItem(this.searchIndex);\n      this.CloseSelectionWindow();\n      this.DOMSearchField().focus();\n    }\n    return false;\n  }\n\n  // --------- Actions\n\n  // Closes the results window.\n  this.CloseResultsWindow = function()\n  {\n    this.DOMPopupSearchResultsWindow().style.display = 'none';\n    this.DOMSearchClose().style.display = 'none';\n    this.Activate(false);\n  }\n\n  this.CloseSelectionWindow = function()\n  {\n    this.DOMSearchSelectWindow().style.display = 'none';\n  }\n\n  // Performs a search.\n  this.Search = function()\n  {\n    this.keyTimeout = 0;\n\n    // strip leading whitespace\n    var searchValue = this.DOMSearchField().value.replace(/^ +/, \"\");\n\n    var code = searchValue.toLowerCase().charCodeAt(0);\n    var idxChar = searchValue.substr(0, 1).toLowerCase();\n    if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair\n    {\n      idxChar = searchValue.substr(0, 2);\n    }\n\n    var resultsPage;\n    var resultsPageWithSearch;\n    var hasResultsPage;\n\n    var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar);\n    if (idx!=-1)\n    {\n       var hexCode=idx.toString(16);\n       resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html';\n       resultsPageWithSearch = resultsPage+'?'+escape(searchValue);\n       hasResultsPage = true;\n    }\n    else // nothing available for this search term\n    {\n       resultsPage = this.resultsPath + '/nomatches.html';\n       resultsPageWithSearch = resultsPage;\n       hasResultsPage = false;\n    }\n\n    window.frames.MSearchResults.location = resultsPageWithSearch;\n    var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow();\n\n    if (domPopupSearchResultsWindow.style.display!='block')\n    {\n       var domSearchBox = this.DOMSearchBox();\n       this.DOMSearchClose().style.display = 'inline';\n       if (this.insideFrame)\n       {\n         var domPopupSearchResults = this.DOMPopupSearchResults();\n         domPopupSearchResultsWindow.style.position = 'relative';\n         domPopupSearchResultsWindow.style.display  = 'block';\n         var width = document.body.clientWidth - 8; // the -8 is for IE :-(\n         domPopupSearchResultsWindow.style.width    = width + 'px';\n         domPopupSearchResults.style.width          = width + 'px';\n       }\n       else\n       {\n         var domPopupSearchResults = this.DOMPopupSearchResults();\n         var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth;\n         var top  = getYPos(domSearchBox) + 20;  // domSearchBox.offsetHeight + 1;\n         domPopupSearchResultsWindow.style.display = 'block';\n         left -= domPopupSearchResults.offsetWidth;\n         domPopupSearchResultsWindow.style.top     = top  + 'px';\n         domPopupSearchResultsWindow.style.left    = left + 'px';\n       }\n    }\n\n    this.lastSearchValue = searchValue;\n    this.lastResultsPage = resultsPage;\n  }\n\n  // -------- Activation Functions\n\n  // Activates or deactivates the search panel, resetting things to\n  // their default values if necessary.\n  this.Activate = function(isActive)\n  {\n    if (isActive || // open it\n        this.DOMPopupSearchResultsWindow().style.display == 'block'\n       )\n    {\n      this.DOMSearchBox().className = 'MSearchBoxActive';\n\n      var searchField = this.DOMSearchField();\n\n      if (searchField.value == this.searchLabel) // clear \"Search\" term upon entry\n      {\n        searchField.value = '';\n        this.searchActive = true;\n      }\n    }\n    else if (!isActive) // directly remove the panel\n    {\n      this.DOMSearchBox().className = 'MSearchBoxInactive';\n      this.DOMSearchField().value   = this.searchLabel;\n      this.searchActive             = false;\n      this.lastSearchValue          = ''\n      this.lastResultsPage          = '';\n    }\n  }\n}\n\n// -----------------------------------------------------------------------\n\n// The class that handles everything on the search results page.\nfunction SearchResults(name)\n{\n    // The number of matches from the last run of <Search()>.\n    this.lastMatchCount = 0;\n    this.lastKey = 0;\n    this.repeatOn = false;\n\n    // Toggles the visibility of the passed element ID.\n    this.FindChildElement = function(id)\n    {\n      var parentElement = document.getElementById(id);\n      var element = parentElement.firstChild;\n\n      while (element && element!=parentElement)\n      {\n        if (element.nodeName == 'DIV' && element.className == 'SRChildren')\n        {\n          return element;\n        }\n\n        if (element.nodeName == 'DIV' && element.hasChildNodes())\n        {\n           element = element.firstChild;\n        }\n        else if (element.nextSibling)\n        {\n           element = element.nextSibling;\n        }\n        else\n        {\n          do\n          {\n            element = element.parentNode;\n          }\n          while (element && element!=parentElement && !element.nextSibling);\n\n          if (element && element!=parentElement)\n          {\n            element = element.nextSibling;\n          }\n        }\n      }\n    }\n\n    this.Toggle = function(id)\n    {\n      var element = this.FindChildElement(id);\n      if (element)\n      {\n        if (element.style.display == 'block')\n        {\n          element.style.display = 'none';\n        }\n        else\n        {\n          element.style.display = 'block';\n        }\n      }\n    }\n\n    // Searches for the passed string.  If there is no parameter,\n    // it takes it from the URL query.\n    //\n    // Always returns true, since other documents may try to call it\n    // and that may or may not be possible.\n    this.Search = function(search)\n    {\n      if (!search) // get search word from URL\n      {\n        search = window.location.search;\n        search = search.substring(1);  // Remove the leading '?'\n        search = unescape(search);\n      }\n\n      search = search.replace(/^ +/, \"\"); // strip leading spaces\n      search = search.replace(/ +$/, \"\"); // strip trailing spaces\n      search = search.toLowerCase();\n      search = convertToId(search);\n\n      var resultRows = document.getElementsByTagName(\"div\");\n      var matches = 0;\n\n      var i = 0;\n      while (i < resultRows.length)\n      {\n        var row = resultRows.item(i);\n        if (row.className == \"SRResult\")\n        {\n          var rowMatchName = row.id.toLowerCase();\n          rowMatchName = rowMatchName.replace(/^sr\\d*_/, ''); // strip 'sr123_'\n\n          if (search.length<=rowMatchName.length &&\n             rowMatchName.substr(0, search.length)==search)\n          {\n            row.style.display = 'block';\n            matches++;\n          }\n          else\n          {\n            row.style.display = 'none';\n          }\n        }\n        i++;\n      }\n      document.getElementById(\"Searching\").style.display='none';\n      if (matches == 0) // no results\n      {\n        document.getElementById(\"NoMatches\").style.display='block';\n      }\n      else // at least one result\n      {\n        document.getElementById(\"NoMatches\").style.display='none';\n      }\n      this.lastMatchCount = matches;\n      return true;\n    }\n\n    // return the first item with index index or higher that is visible\n    this.NavNext = function(index)\n    {\n      var focusItem;\n      while (1)\n      {\n        var focusName = 'Item'+index;\n        focusItem = document.getElementById(focusName);\n        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')\n        {\n          break;\n        }\n        else if (!focusItem) // last element\n        {\n          break;\n        }\n        focusItem=null;\n        index++;\n      }\n      return focusItem;\n    }\n\n    this.NavPrev = function(index)\n    {\n      var focusItem;\n      while (1)\n      {\n        var focusName = 'Item'+index;\n        focusItem = document.getElementById(focusName);\n        if (focusItem && focusItem.parentNode.parentNode.style.display=='block')\n        {\n          break;\n        }\n        else if (!focusItem) // last element\n        {\n          break;\n        }\n        focusItem=null;\n        index--;\n      }\n      return focusItem;\n    }\n\n    this.ProcessKeys = function(e)\n    {\n      if (e.type == \"keydown\")\n      {\n        this.repeatOn = false;\n        this.lastKey = e.keyCode;\n      }\n      else if (e.type == \"keypress\")\n      {\n        if (!this.repeatOn)\n        {\n          if (this.lastKey) this.repeatOn = true;\n          return false; // ignore first keypress after keydown\n        }\n      }\n      else if (e.type == \"keyup\")\n      {\n        this.lastKey = 0;\n        this.repeatOn = false;\n      }\n      return this.lastKey!=0;\n    }\n\n    this.Nav = function(evt,itemIndex)\n    {\n      var e  = (evt) ? evt : window.event; // for IE\n      if (e.keyCode==13) return true;\n      if (!this.ProcessKeys(e)) return false;\n\n      if (this.lastKey==38) // Up\n      {\n        var newIndex = itemIndex-1;\n        var focusItem = this.NavPrev(newIndex);\n        if (focusItem)\n        {\n          var child = this.FindChildElement(focusItem.parentNode.parentNode.id);\n          if (child && child.style.display == 'block') // children visible\n          {\n            var n=0;\n            var tmpElem;\n            while (1) // search for last child\n            {\n              tmpElem = document.getElementById('Item'+newIndex+'_c'+n);\n              if (tmpElem)\n              {\n                focusItem = tmpElem;\n              }\n              else // found it!\n              {\n                break;\n              }\n              n++;\n            }\n          }\n        }\n        if (focusItem)\n        {\n          focusItem.focus();\n        }\n        else // return focus to search field\n        {\n           parent.document.getElementById(\"MSearchField\").focus();\n        }\n      }\n      else if (this.lastKey==40) // Down\n      {\n        var newIndex = itemIndex+1;\n        var focusItem;\n        var item = document.getElementById('Item'+itemIndex);\n        var elem = this.FindChildElement(item.parentNode.parentNode.id);\n        if (elem && elem.style.display == 'block') // children visible\n        {\n          focusItem = document.getElementById('Item'+itemIndex+'_c0');\n        }\n        if (!focusItem) focusItem = this.NavNext(newIndex);\n        if (focusItem)  focusItem.focus();\n      }\n      else if (this.lastKey==39) // Right\n      {\n        var item = document.getElementById('Item'+itemIndex);\n        var elem = this.FindChildElement(item.parentNode.parentNode.id);\n        if (elem) elem.style.display = 'block';\n      }\n      else if (this.lastKey==37) // Left\n      {\n        var item = document.getElementById('Item'+itemIndex);\n        var elem = this.FindChildElement(item.parentNode.parentNode.id);\n        if (elem) elem.style.display = 'none';\n      }\n      else if (this.lastKey==27) // Escape\n      {\n        parent.searchBox.CloseResultsWindow();\n        parent.document.getElementById(\"MSearchField\").focus();\n      }\n      else if (this.lastKey==13) // Enter\n      {\n        return true;\n      }\n      return false;\n    }\n\n    this.NavChild = function(evt,itemIndex,childIndex)\n    {\n      var e  = (evt) ? evt : window.event; // for IE\n      if (e.keyCode==13) return true;\n      if (!this.ProcessKeys(e)) return false;\n\n      if (this.lastKey==38) // Up\n      {\n        if (childIndex>0)\n        {\n          var newIndex = childIndex-1;\n          document.getElementById('Item'+itemIndex+'_c'+newIndex).focus();\n        }\n        else // already at first child, jump to parent\n        {\n          document.getElementById('Item'+itemIndex).focus();\n        }\n      }\n      else if (this.lastKey==40) // Down\n      {\n        var newIndex = childIndex+1;\n        var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex);\n        if (!elem) // last child, jump to parent next parent\n        {\n          elem = this.NavNext(itemIndex+1);\n        }\n        if (elem)\n        {\n          elem.focus();\n        }\n      }\n      else if (this.lastKey==27) // Escape\n      {\n        parent.searchBox.CloseResultsWindow();\n        parent.document.getElementById(\"MSearchField\").focus();\n      }\n      else if (this.lastKey==13) // Enter\n      {\n        return true;\n      }\n      return false;\n    }\n}\n\nfunction setKeyActions(elem,action)\n{\n  elem.setAttribute('onkeydown',action);\n  elem.setAttribute('onkeypress',action);\n  elem.setAttribute('onkeyup',action);\n}\n\nfunction setClassAttr(elem,attr)\n{\n  elem.setAttribute('class',attr);\n  elem.setAttribute('className',attr);\n}\n\nfunction createResults()\n{\n  var results = document.getElementById(\"SRResults\");\n  for (var e=0; e<searchData.length; e++)\n  {\n    var id = searchData[e][0];\n    var srResult = document.createElement('div');\n    srResult.setAttribute('id','SR_'+id);\n    setClassAttr(srResult,'SRResult');\n    var srEntry = document.createElement('div');\n    setClassAttr(srEntry,'SREntry');\n    var srLink = document.createElement('a');\n    srLink.setAttribute('id','Item'+e);\n    setKeyActions(srLink,'return searchResults.Nav(event,'+e+')');\n    setClassAttr(srLink,'SRSymbol');\n    srLink.innerHTML = searchData[e][1][0];\n    srEntry.appendChild(srLink);\n    if (searchData[e][1].length==2) // single result\n    {\n      srLink.setAttribute('href',searchData[e][1][1][0]);\n      if (searchData[e][1][1][1])\n      {\n       srLink.setAttribute('target','_parent');\n      }\n      var srScope = document.createElement('span');\n      setClassAttr(srScope,'SRScope');\n      srScope.innerHTML = searchData[e][1][1][2];\n      srEntry.appendChild(srScope);\n    }\n    else // multiple results\n    {\n      srLink.setAttribute('href','javascript:searchResults.Toggle(\"SR_'+id+'\")');\n      var srChildren = document.createElement('div');\n      setClassAttr(srChildren,'SRChildren');\n      for (var c=0; c<searchData[e][1].length-1; c++)\n      {\n        var srChild = document.createElement('a');\n        srChild.setAttribute('id','Item'+e+'_c'+c);\n        setKeyActions(srChild,'return searchResults.NavChild(event,'+e+','+c+')');\n        setClassAttr(srChild,'SRScope');\n        srChild.setAttribute('href',searchData[e][1][c+1][0]);\n        if (searchData[e][1][c+1][1])\n        {\n         srChild.setAttribute('target','_parent');\n        }\n        srChild.innerHTML = searchData[e][1][c+1][2];\n        srChildren.appendChild(srChild);\n      }\n      srEntry.appendChild(srChildren);\n    }\n    srResult.appendChild(srEntry);\n    results.appendChild(srResult);\n  }\n}\n\nfunction init_search()\n{\n  var results = document.getElementById(\"MSearchSelectWindow\");\n  for (var key in indexSectionLabels)\n  {\n    var link = document.createElement('a');\n    link.setAttribute('class','SelectItem');\n    link.setAttribute('onclick','searchBox.OnSelectItem('+key+')');\n    link.href='javascript:void(0)';\n    link.innerHTML='<span class=\"SelectionMark\">&#160;</span>'+indexSectionLabels[key];\n    results.appendChild(link);\n  }\n  searchBox.OnSelectItem(0);\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/searchdata.js",
    "content": "var indexSectionsWithContent =\n{\n  0: \"abcdefghilmnopqrstuvwyz\",\n  1: \"abcdefghilmnopqrstuvw\",\n  2: \"abcdefghilmnopqrstuvwyz\",\n  3: \"abdfhilmpqsuvw\",\n  4: \"acefgimrsv\",\n  5: \"o\"\n};\n\nvar indexSectionNames =\n{\n  0: \"all\",\n  1: \"files\",\n  2: \"functions\",\n  3: \"typedefs\",\n  4: \"groups\",\n  5: \"pages\"\n};\n\nvar indexSectionLabels =\n{\n  0: \"All\",\n  1: \"Files\",\n  2: \"Functions\",\n  3: \"Typedefs\",\n  4: \"Modules\",\n  5: \"Pages\"\n};\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_0.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_0.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_0.js",
    "content": "var searchData=\n[\n  ['aligned_5fbvec1',['aligned_bvec1',['../a00303.html#ga780a35f764020f553a9601a3fcdcd059',1,'glm']]],\n  ['aligned_5fbvec2',['aligned_bvec2',['../a00303.html#gae766b317c5afec852bfb3d74a3c54bc8',1,'glm']]],\n  ['aligned_5fbvec3',['aligned_bvec3',['../a00303.html#gae1964ba70d15915e5b710926decbb3cb',1,'glm']]],\n  ['aligned_5fbvec4',['aligned_bvec4',['../a00303.html#gae164a1f7879f828bc35e50b79d786b05',1,'glm']]],\n  ['aligned_5fdmat2',['aligned_dmat2',['../a00303.html#ga6783859382677d35fcd5dac7dcbefdbd',1,'glm']]],\n  ['aligned_5fdmat2x2',['aligned_dmat2x2',['../a00303.html#ga449a3ec2dde6b6bb4bb94c49a6aad388',1,'glm']]],\n  ['aligned_5fdmat2x3',['aligned_dmat2x3',['../a00303.html#ga53d519a7b1bfb69076b3ec206a6b3bd1',1,'glm']]],\n  ['aligned_5fdmat2x4',['aligned_dmat2x4',['../a00303.html#ga5ccb2baeb0ab57b818c24e0d486c59d0',1,'glm']]],\n  ['aligned_5fdmat3',['aligned_dmat3',['../a00303.html#ga19aa695ffdb45ce29f7ea0b5029627de',1,'glm']]],\n  ['aligned_5fdmat3x2',['aligned_dmat3x2',['../a00303.html#ga5f5123d834bd1170edf8c386834e112c',1,'glm']]],\n  ['aligned_5fdmat3x3',['aligned_dmat3x3',['../a00303.html#ga635bf3732281a2c2ca54d8f9d33d178f',1,'glm']]],\n  ['aligned_5fdmat3x4',['aligned_dmat3x4',['../a00303.html#gaf488c6ad88c185054595d4d5c7ba5b9d',1,'glm']]],\n  ['aligned_5fdmat4',['aligned_dmat4',['../a00303.html#ga001bb387ae8192fa94dbd8b23b600439',1,'glm']]],\n  ['aligned_5fdmat4x2',['aligned_dmat4x2',['../a00303.html#gaa409cfb737bd59b68dc683e9b03930cc',1,'glm']]],\n  ['aligned_5fdmat4x3',['aligned_dmat4x3',['../a00303.html#ga621e89ca1dbdcb7b5a3e7de237c44121',1,'glm']]],\n  ['aligned_5fdmat4x4',['aligned_dmat4x4',['../a00303.html#gac9bda778d0b7ad82f656dab99b71857a',1,'glm']]],\n  ['aligned_5fdvec1',['aligned_dvec1',['../a00303.html#ga4974f46ae5a19415d91316960a53617a',1,'glm']]],\n  ['aligned_5fdvec2',['aligned_dvec2',['../a00303.html#ga18d859f87122b2b3b2992ffe86dbebc0',1,'glm']]],\n  ['aligned_5fdvec3',['aligned_dvec3',['../a00303.html#gaa37869eea77d28419b2fb0ff70b69bf0',1,'glm']]],\n  ['aligned_5fdvec4',['aligned_dvec4',['../a00303.html#ga8a9f0a4795ccc442fa9901845026f9f5',1,'glm']]],\n  ['aligned_5fhighp_5fbvec1',['aligned_highp_bvec1',['../a00303.html#ga862843a45b01c35ffe4d44c47ea774ad',1,'glm']]],\n  ['aligned_5fhighp_5fbvec2',['aligned_highp_bvec2',['../a00303.html#ga0731b593c5e33559954c80f8687e76c6',1,'glm']]],\n  ['aligned_5fhighp_5fbvec3',['aligned_highp_bvec3',['../a00303.html#ga0913bdf048d0cb74af1d2512aec675bc',1,'glm']]],\n  ['aligned_5fhighp_5fbvec4',['aligned_highp_bvec4',['../a00303.html#ga9df1d0c425852cf63a57e533b7a83f4f',1,'glm']]],\n  ['aligned_5fhighp_5fdmat2',['aligned_highp_dmat2',['../a00303.html#ga3a7eeae43cb7673e14cc89bf02f7dd45',1,'glm']]],\n  ['aligned_5fhighp_5fdmat2x2',['aligned_highp_dmat2x2',['../a00303.html#gaef26dfe3855a91644665b55c9096a8c8',1,'glm']]],\n  ['aligned_5fhighp_5fdmat2x3',['aligned_highp_dmat2x3',['../a00303.html#gaa7c9d4ab7ab651cdf8001fe7843e238b',1,'glm']]],\n  ['aligned_5fhighp_5fdmat2x4',['aligned_highp_dmat2x4',['../a00303.html#gaa0d2b8a75f1908dcf32c27f8524bdced',1,'glm']]],\n  ['aligned_5fhighp_5fdmat3',['aligned_highp_dmat3',['../a00303.html#gad8f6abb2c9994850b5d5c04a5f979ed8',1,'glm']]],\n  ['aligned_5fhighp_5fdmat3x2',['aligned_highp_dmat3x2',['../a00303.html#gab069b2fc2ec785fc4e193cf26c022679',1,'glm']]],\n  ['aligned_5fhighp_5fdmat3x3',['aligned_highp_dmat3x3',['../a00303.html#ga66073b1ddef34b681741f572338ddb8e',1,'glm']]],\n  ['aligned_5fhighp_5fdmat3x4',['aligned_highp_dmat3x4',['../a00303.html#ga683c8ca66de323ea533a760abedd0efc',1,'glm']]],\n  ['aligned_5fhighp_5fdmat4',['aligned_highp_dmat4',['../a00303.html#gacaa7407ea00ffdd322ce86a57adb547e',1,'glm']]],\n  ['aligned_5fhighp_5fdmat4x2',['aligned_highp_dmat4x2',['../a00303.html#ga93a23ca3d42818d56e0702213c66354b',1,'glm']]],\n  ['aligned_5fhighp_5fdmat4x3',['aligned_highp_dmat4x3',['../a00303.html#gacab7374b560745cb1d0a306a90353f58',1,'glm']]],\n  ['aligned_5fhighp_5fdmat4x4',['aligned_highp_dmat4x4',['../a00303.html#ga1fbfba14368b742972d3b58a0a303682',1,'glm']]],\n  ['aligned_5fhighp_5fdvec1',['aligned_highp_dvec1',['../a00303.html#gaf0448b0f7ceb8273f7eda3a92205eefc',1,'glm']]],\n  ['aligned_5fhighp_5fdvec2',['aligned_highp_dvec2',['../a00303.html#gab173a333e6b7ce153ceba66ac4a321cf',1,'glm']]],\n  ['aligned_5fhighp_5fdvec3',['aligned_highp_dvec3',['../a00303.html#gae94ef61edfa047d05bc69b6065fc42ba',1,'glm']]],\n  ['aligned_5fhighp_5fdvec4',['aligned_highp_dvec4',['../a00303.html#ga8fad35c5677f228e261fe541f15363a4',1,'glm']]],\n  ['aligned_5fhighp_5fivec1',['aligned_highp_ivec1',['../a00303.html#gad63b8c5b4dc0500d54d7414ef555178f',1,'glm']]],\n  ['aligned_5fhighp_5fivec2',['aligned_highp_ivec2',['../a00303.html#ga41563650f36cb7f479e080de21e08418',1,'glm']]],\n  ['aligned_5fhighp_5fivec3',['aligned_highp_ivec3',['../a00303.html#ga6eca5170bb35eac90b4972590fd31a06',1,'glm']]],\n  ['aligned_5fhighp_5fivec4',['aligned_highp_ivec4',['../a00303.html#ga31bfa801e1579fdba752ec3f7a45ec91',1,'glm']]],\n  ['aligned_5fhighp_5fmat2',['aligned_highp_mat2',['../a00303.html#gaf9db5e8a929c317da5aa12cc53741b63',1,'glm']]],\n  ['aligned_5fhighp_5fmat2x2',['aligned_highp_mat2x2',['../a00303.html#gab559d943abf92bc588bcd3f4c0e4664b',1,'glm']]],\n  ['aligned_5fhighp_5fmat2x3',['aligned_highp_mat2x3',['../a00303.html#ga50c9af5aa3a848956d625fc64dc8488e',1,'glm']]],\n  ['aligned_5fhighp_5fmat2x4',['aligned_highp_mat2x4',['../a00303.html#ga0edcfdd179f8a158342eead48a4d0c2a',1,'glm']]],\n  ['aligned_5fhighp_5fmat3',['aligned_highp_mat3',['../a00303.html#gabab3afcc04459c7b123604ae5dc663f6',1,'glm']]],\n  ['aligned_5fhighp_5fmat3x2',['aligned_highp_mat3x2',['../a00303.html#ga9fc2167b47c9be9295f2d8eea7f0ca75',1,'glm']]],\n  ['aligned_5fhighp_5fmat3x3',['aligned_highp_mat3x3',['../a00303.html#ga2f7b8c99ba6f2d07c73a195a8143c259',1,'glm']]],\n  ['aligned_5fhighp_5fmat3x4',['aligned_highp_mat3x4',['../a00303.html#ga52e00afd0eb181e6738f40cf41787049',1,'glm']]],\n  ['aligned_5fhighp_5fmat4',['aligned_highp_mat4',['../a00303.html#ga058ae939bfdbcbb80521dd4a3b01afba',1,'glm']]],\n  ['aligned_5fhighp_5fmat4x2',['aligned_highp_mat4x2',['../a00303.html#ga84e1f5e0718952a079b748825c03f956',1,'glm']]],\n  ['aligned_5fhighp_5fmat4x3',['aligned_highp_mat4x3',['../a00303.html#gafff1684c4ff19b4a818138ccacc1e78d',1,'glm']]],\n  ['aligned_5fhighp_5fmat4x4',['aligned_highp_mat4x4',['../a00303.html#ga40d49648083a0498a12a4bb41ae6ece8',1,'glm']]],\n  ['aligned_5fhighp_5fuvec1',['aligned_highp_uvec1',['../a00303.html#ga5b80e28396c6ef7d32c6fd18df498451',1,'glm']]],\n  ['aligned_5fhighp_5fuvec2',['aligned_highp_uvec2',['../a00303.html#ga04db692662a4908beeaf5a5ba6e19483',1,'glm']]],\n  ['aligned_5fhighp_5fuvec3',['aligned_highp_uvec3',['../a00303.html#ga073fd6e8b241afade6d8afbd676b2667',1,'glm']]],\n  ['aligned_5fhighp_5fuvec4',['aligned_highp_uvec4',['../a00303.html#gabdd60462042859f876c17c7346c732a5',1,'glm']]],\n  ['aligned_5fhighp_5fvec1',['aligned_highp_vec1',['../a00303.html#ga4d0bd70d5fac49b800546d608b707513',1,'glm']]],\n  ['aligned_5fhighp_5fvec2',['aligned_highp_vec2',['../a00303.html#gac9f8482dde741fb6bab7248b81a45465',1,'glm']]],\n  ['aligned_5fhighp_5fvec3',['aligned_highp_vec3',['../a00303.html#ga65415d2d68c9cc0ca554524a8f5510b2',1,'glm']]],\n  ['aligned_5fhighp_5fvec4',['aligned_highp_vec4',['../a00303.html#ga7cb26d354dd69d23849c34c4fba88da9',1,'glm']]],\n  ['aligned_5fivec1',['aligned_ivec1',['../a00303.html#ga76298aed82a439063c3d55980c84aa0b',1,'glm']]],\n  ['aligned_5fivec2',['aligned_ivec2',['../a00303.html#gae4f38fd2c86cee6940986197777b3ca4',1,'glm']]],\n  ['aligned_5fivec3',['aligned_ivec3',['../a00303.html#ga32794322d294e5ace7fed4a61896f270',1,'glm']]],\n  ['aligned_5fivec4',['aligned_ivec4',['../a00303.html#ga7f79eae5927c9033d84617e49f6f34e4',1,'glm']]],\n  ['aligned_5flowp_5fbvec1',['aligned_lowp_bvec1',['../a00303.html#gac6036449ab1c4abf8efe1ea00fcdd1c9',1,'glm']]],\n  ['aligned_5flowp_5fbvec2',['aligned_lowp_bvec2',['../a00303.html#ga59fadcd3835646e419372ae8b43c5d37',1,'glm']]],\n  ['aligned_5flowp_5fbvec3',['aligned_lowp_bvec3',['../a00303.html#ga83aab4d191053f169c93a3e364f2e118',1,'glm']]],\n  ['aligned_5flowp_5fbvec4',['aligned_lowp_bvec4',['../a00303.html#gaa7a76555ee4853614e5755181a8dd54e',1,'glm']]],\n  ['aligned_5flowp_5fdmat2',['aligned_lowp_dmat2',['../a00303.html#ga79a90173d8faa9816dc852ce447d66ca',1,'glm']]],\n  ['aligned_5flowp_5fdmat2x2',['aligned_lowp_dmat2x2',['../a00303.html#ga07cb8e846666cbf56045b064fb553d2e',1,'glm']]],\n  ['aligned_5flowp_5fdmat2x3',['aligned_lowp_dmat2x3',['../a00303.html#ga7a4536b6e1f2ebb690f63816b5d7e48b',1,'glm']]],\n  ['aligned_5flowp_5fdmat2x4',['aligned_lowp_dmat2x4',['../a00303.html#gab0cf4f7c9a264941519acad286e055ea',1,'glm']]],\n  ['aligned_5flowp_5fdmat3',['aligned_lowp_dmat3',['../a00303.html#gac00e15efded8a57c9dec3aed0fb547e7',1,'glm']]],\n  ['aligned_5flowp_5fdmat3x2',['aligned_lowp_dmat3x2',['../a00303.html#gaa281a47d5d627313984d0f8df993b648',1,'glm']]],\n  ['aligned_5flowp_5fdmat3x3',['aligned_lowp_dmat3x3',['../a00303.html#ga7f3148a72355e39932d6855baca42ebc',1,'glm']]],\n  ['aligned_5flowp_5fdmat3x4',['aligned_lowp_dmat3x4',['../a00303.html#gaea3ccc5ef5b178e6e49b4fa1427605d3',1,'glm']]],\n  ['aligned_5flowp_5fdmat4',['aligned_lowp_dmat4',['../a00303.html#gab92c6d7d58d43dfb8147e9aedfe8351b',1,'glm']]],\n  ['aligned_5flowp_5fdmat4x2',['aligned_lowp_dmat4x2',['../a00303.html#gaf806dfdaffb2e9f7681b1cd2825898ce',1,'glm']]],\n  ['aligned_5flowp_5fdmat4x3',['aligned_lowp_dmat4x3',['../a00303.html#gab0931ac7807fa1428c7bbf249efcdf0d',1,'glm']]],\n  ['aligned_5flowp_5fdmat4x4',['aligned_lowp_dmat4x4',['../a00303.html#gad8220a93d2fca2dd707821b4ab6f809e',1,'glm']]],\n  ['aligned_5flowp_5fdvec1',['aligned_lowp_dvec1',['../a00303.html#ga7f8a2cc5a686e52b1615761f4978ca62',1,'glm']]],\n  ['aligned_5flowp_5fdvec2',['aligned_lowp_dvec2',['../a00303.html#ga0e37cff4a43cca866101f0a35f01db6d',1,'glm']]],\n  ['aligned_5flowp_5fdvec3',['aligned_lowp_dvec3',['../a00303.html#gab9e669c4efd52d3347fc6d5f6b20fd59',1,'glm']]],\n  ['aligned_5flowp_5fdvec4',['aligned_lowp_dvec4',['../a00303.html#ga226f5ec7a953cea559c16fe3aff9924f',1,'glm']]],\n  ['aligned_5flowp_5fivec1',['aligned_lowp_ivec1',['../a00303.html#ga1101d3a82b2e3f5f8828bd8f3adab3e1',1,'glm']]],\n  ['aligned_5flowp_5fivec2',['aligned_lowp_ivec2',['../a00303.html#ga44c4accad582cfbd7226a19b83b0cadc',1,'glm']]],\n  ['aligned_5flowp_5fivec3',['aligned_lowp_ivec3',['../a00303.html#ga65663f10a02e52cedcddbcfe36ddf38d',1,'glm']]],\n  ['aligned_5flowp_5fivec4',['aligned_lowp_ivec4',['../a00303.html#gaae92fcec8b2e0328ffbeac31cc4fc419',1,'glm']]],\n  ['aligned_5flowp_5fmat2',['aligned_lowp_mat2',['../a00303.html#ga17c424412207b00dba1cf587b099eea3',1,'glm']]],\n  ['aligned_5flowp_5fmat2x2',['aligned_lowp_mat2x2',['../a00303.html#ga0e44aeb930a47f9cbf2db15b56433b0f',1,'glm']]],\n  ['aligned_5flowp_5fmat2x3',['aligned_lowp_mat2x3',['../a00303.html#ga7dec6d96bc61312b1e56d137c9c74030',1,'glm']]],\n  ['aligned_5flowp_5fmat2x4',['aligned_lowp_mat2x4',['../a00303.html#gaa694fab1f8df5f658846573ba8ffc563',1,'glm']]],\n  ['aligned_5flowp_5fmat3',['aligned_lowp_mat3',['../a00303.html#ga1eb9076cc28ead5020fd3029fd0472c5',1,'glm']]],\n  ['aligned_5flowp_5fmat3x2',['aligned_lowp_mat3x2',['../a00303.html#ga2d6639f0bd777bae1ee0eba71cd7bfdc',1,'glm']]],\n  ['aligned_5flowp_5fmat3x3',['aligned_lowp_mat3x3',['../a00303.html#gaeaab04e378a90956eec8d68a99d777ed',1,'glm']]],\n  ['aligned_5flowp_5fmat3x4',['aligned_lowp_mat3x4',['../a00303.html#ga1f03696ab066572c6c044e63edf635a2',1,'glm']]],\n  ['aligned_5flowp_5fmat4',['aligned_lowp_mat4',['../a00303.html#ga25ea2f684e36aa5e978b4f2f86593824',1,'glm']]],\n  ['aligned_5flowp_5fmat4x2',['aligned_lowp_mat4x2',['../a00303.html#ga2cb16c3fdfb15e0719d942ee3b548bc4',1,'glm']]],\n  ['aligned_5flowp_5fmat4x3',['aligned_lowp_mat4x3',['../a00303.html#ga7e96981e872f17a780d9f1c22dc1f512',1,'glm']]],\n  ['aligned_5flowp_5fmat4x4',['aligned_lowp_mat4x4',['../a00303.html#gadae3dcfc22d28c64d0548cbfd9d08719',1,'glm']]],\n  ['aligned_5flowp_5fuvec1',['aligned_lowp_uvec1',['../a00303.html#gad09b93acc43c43423408d17a64f6d7ca',1,'glm']]],\n  ['aligned_5flowp_5fuvec2',['aligned_lowp_uvec2',['../a00303.html#ga6f94fcd28dde906fc6cad5f742b55c1a',1,'glm']]],\n  ['aligned_5flowp_5fuvec3',['aligned_lowp_uvec3',['../a00303.html#ga9e9f006970b1a00862e3e6e599eedd4c',1,'glm']]],\n  ['aligned_5flowp_5fuvec4',['aligned_lowp_uvec4',['../a00303.html#ga46b1b0b9eb8625a5d69137bd66cd13dc',1,'glm']]],\n  ['aligned_5flowp_5fvec1',['aligned_lowp_vec1',['../a00303.html#gab34aee3d5e121c543fea11d2c50ecc43',1,'glm']]],\n  ['aligned_5flowp_5fvec2',['aligned_lowp_vec2',['../a00303.html#ga53ac5d252317f1fa43c2ef921857bf13',1,'glm']]],\n  ['aligned_5flowp_5fvec3',['aligned_lowp_vec3',['../a00303.html#ga98f0b5cd65fce164ff1367c2a3b3aa1e',1,'glm']]],\n  ['aligned_5flowp_5fvec4',['aligned_lowp_vec4',['../a00303.html#ga82f7275d6102593a69ce38cdad680409',1,'glm']]],\n  ['aligned_5fmat2',['aligned_mat2',['../a00303.html#ga5a8a5f8c47cd7d5502dd9932f83472b9',1,'glm']]],\n  ['aligned_5fmat2x2',['aligned_mat2x2',['../a00303.html#gabb04f459d81d753d278b2072e2375e8e',1,'glm']]],\n  ['aligned_5fmat2x3',['aligned_mat2x3',['../a00303.html#ga832476bb1c59ef673db37433ff34e399',1,'glm']]],\n  ['aligned_5fmat2x4',['aligned_mat2x4',['../a00303.html#gadab11a7504430825b648ff7c7e36b725',1,'glm']]],\n  ['aligned_5fmat3',['aligned_mat3',['../a00303.html#ga43a92a24ca863e0e0f3b65834b3cf714',1,'glm']]],\n  ['aligned_5fmat3x2',['aligned_mat3x2',['../a00303.html#ga5c0df24ba85eafafc0eb0c90690510ed',1,'glm']]],\n  ['aligned_5fmat3x3',['aligned_mat3x3',['../a00303.html#gadb065dbe5c11271fef8cf2ea8608f187',1,'glm']]],\n  ['aligned_5fmat3x4',['aligned_mat3x4',['../a00303.html#ga88061c72c997b94c420f2b0a60d9df26',1,'glm']]],\n  ['aligned_5fmat4',['aligned_mat4',['../a00303.html#gab0fddcf95dd51cbcbf624ea7c40dfeb8',1,'glm']]],\n  ['aligned_5fmat4x2',['aligned_mat4x2',['../a00303.html#gac9a2d0fb815fd5c2bd58b869c55e32d3',1,'glm']]],\n  ['aligned_5fmat4x3',['aligned_mat4x3',['../a00303.html#ga452bbbfd26e244de216e4d004d50bb74',1,'glm']]],\n  ['aligned_5fmat4x4',['aligned_mat4x4',['../a00303.html#ga8b8fb86973a0b768c5bd802c92fac1a1',1,'glm']]],\n  ['aligned_5fmediump_5fbvec1',['aligned_mediump_bvec1',['../a00303.html#gadd3b8bd71a758f7fb0da8e525156f34e',1,'glm']]],\n  ['aligned_5fmediump_5fbvec2',['aligned_mediump_bvec2',['../a00303.html#gacb183eb5e67ec0d0ea5a016cba962810',1,'glm']]],\n  ['aligned_5fmediump_5fbvec3',['aligned_mediump_bvec3',['../a00303.html#gacfa4a542f1b20a5b63ad702dfb6fd587',1,'glm']]],\n  ['aligned_5fmediump_5fbvec4',['aligned_mediump_bvec4',['../a00303.html#ga91bc1f513bb9b0fd60281d57ded9a48c',1,'glm']]],\n  ['aligned_5fmediump_5fdmat2',['aligned_mediump_dmat2',['../a00303.html#ga62a2dfd668c91072b72c3109fc6cda28',1,'glm']]],\n  ['aligned_5fmediump_5fdmat2x2',['aligned_mediump_dmat2x2',['../a00303.html#ga9b7feec247d378dd407ba81f56ea96c8',1,'glm']]],\n  ['aligned_5fmediump_5fdmat2x3',['aligned_mediump_dmat2x3',['../a00303.html#gafcb189f4f93648fe7ca802ca4aca2eb8',1,'glm']]],\n  ['aligned_5fmediump_5fdmat2x4',['aligned_mediump_dmat2x4',['../a00303.html#ga92f8873e3bbd5ca1323c8bbe5725cc5e',1,'glm']]],\n  ['aligned_5fmediump_5fdmat3',['aligned_mediump_dmat3',['../a00303.html#ga6dc2832b747c00e0a0df621aba196960',1,'glm']]],\n  ['aligned_5fmediump_5fdmat3x2',['aligned_mediump_dmat3x2',['../a00303.html#ga5a97f0355d801de3444d42c1d5b40438',1,'glm']]],\n  ['aligned_5fmediump_5fdmat3x3',['aligned_mediump_dmat3x3',['../a00303.html#ga649d0acf01054b17e679cf00e150e025',1,'glm']]],\n  ['aligned_5fmediump_5fdmat3x4',['aligned_mediump_dmat3x4',['../a00303.html#ga45e155a4840f69b2fa4ed8047a676860',1,'glm']]],\n  ['aligned_5fmediump_5fdmat4',['aligned_mediump_dmat4',['../a00303.html#ga8a9376d82f0e946e25137eb55543e6ce',1,'glm']]],\n  ['aligned_5fmediump_5fdmat4x2',['aligned_mediump_dmat4x2',['../a00303.html#gabc25e547f4de4af62403492532cd1b6d',1,'glm']]],\n  ['aligned_5fmediump_5fdmat4x3',['aligned_mediump_dmat4x3',['../a00303.html#gae84f4763ecdc7457ecb7930bad12057c',1,'glm']]],\n  ['aligned_5fmediump_5fdmat4x4',['aligned_mediump_dmat4x4',['../a00303.html#gaa292ebaa907afdecb2d5967fb4fb1247',1,'glm']]],\n  ['aligned_5fmediump_5fdvec1',['aligned_mediump_dvec1',['../a00303.html#ga7180b685c581adb224406a7f831608e3',1,'glm']]],\n  ['aligned_5fmediump_5fdvec2',['aligned_mediump_dvec2',['../a00303.html#ga9af1eabe22f569e70d9893be72eda0f5',1,'glm']]],\n  ['aligned_5fmediump_5fdvec3',['aligned_mediump_dvec3',['../a00303.html#ga058e7ddab1428e47f2197bdd3a5a6953',1,'glm']]],\n  ['aligned_5fmediump_5fdvec4',['aligned_mediump_dvec4',['../a00303.html#gaffd747ea2aea1e69c2ecb04e68521b21',1,'glm']]],\n  ['aligned_5fmediump_5fivec1',['aligned_mediump_ivec1',['../a00303.html#ga20e63dd980b81af10cadbbe219316650',1,'glm']]],\n  ['aligned_5fmediump_5fivec2',['aligned_mediump_ivec2',['../a00303.html#gaea13d89d49daca2c796aeaa82fc2c2f2',1,'glm']]],\n  ['aligned_5fmediump_5fivec3',['aligned_mediump_ivec3',['../a00303.html#gabbf0f15e9c3d9868e43241ad018f82bd',1,'glm']]],\n  ['aligned_5fmediump_5fivec4',['aligned_mediump_ivec4',['../a00303.html#ga6099dd7878d0a78101a4250d8cd2d736',1,'glm']]],\n  ['aligned_5fmediump_5fmat2',['aligned_mediump_mat2',['../a00303.html#gaf6f041b212c57664d88bc6aefb7e36f3',1,'glm']]],\n  ['aligned_5fmediump_5fmat2x2',['aligned_mediump_mat2x2',['../a00303.html#ga04bf49316ee777d42fcfe681ee37d7be',1,'glm']]],\n  ['aligned_5fmediump_5fmat2x3',['aligned_mediump_mat2x3',['../a00303.html#ga26a0b61e444a51a37b9737cf4d84291b',1,'glm']]],\n  ['aligned_5fmediump_5fmat2x4',['aligned_mediump_mat2x4',['../a00303.html#ga163facc9ed2692ea1300ed57c5d12b17',1,'glm']]],\n  ['aligned_5fmediump_5fmat3',['aligned_mediump_mat3',['../a00303.html#ga3b76ba17ae5d53debeb6f7e55919a57c',1,'glm']]],\n  ['aligned_5fmediump_5fmat3x2',['aligned_mediump_mat3x2',['../a00303.html#ga80dee705d714300378e0847f45059097',1,'glm']]],\n  ['aligned_5fmediump_5fmat3x3',['aligned_mediump_mat3x3',['../a00303.html#ga721f5404caf40d68962dcc0529de71d9',1,'glm']]],\n  ['aligned_5fmediump_5fmat3x4',['aligned_mediump_mat3x4',['../a00303.html#ga98f4dc6722a2541a990918c074075359',1,'glm']]],\n  ['aligned_5fmediump_5fmat4',['aligned_mediump_mat4',['../a00303.html#gaeefee8317192174596852ce19b602720',1,'glm']]],\n  ['aligned_5fmediump_5fmat4x2',['aligned_mediump_mat4x2',['../a00303.html#ga46f372a006345c252a41267657cc22c0',1,'glm']]],\n  ['aligned_5fmediump_5fmat4x3',['aligned_mediump_mat4x3',['../a00303.html#ga0effece4545acdebdc2a5512a303110e',1,'glm']]],\n  ['aligned_5fmediump_5fmat4x4',['aligned_mediump_mat4x4',['../a00303.html#ga312864244cae4e8f10f478cffd0f76de',1,'glm']]],\n  ['aligned_5fmediump_5fuvec1',['aligned_mediump_uvec1',['../a00303.html#gacb78126ea2eb779b41c7511128ff1283',1,'glm']]],\n  ['aligned_5fmediump_5fuvec2',['aligned_mediump_uvec2',['../a00303.html#ga081d53e0a71443d0b68ea61c870f9adc',1,'glm']]],\n  ['aligned_5fmediump_5fuvec3',['aligned_mediump_uvec3',['../a00303.html#gad6fc921bdde2bdbc7e09b028e1e9b379',1,'glm']]],\n  ['aligned_5fmediump_5fuvec4',['aligned_mediump_uvec4',['../a00303.html#ga73ea0c1ba31580e107d21270883f51fc',1,'glm']]],\n  ['aligned_5fmediump_5fvec1',['aligned_mediump_vec1',['../a00303.html#ga6b797eec76fa471e300158f3453b3b2e',1,'glm']]],\n  ['aligned_5fmediump_5fvec2',['aligned_mediump_vec2',['../a00303.html#ga026a55ddbf2bafb1432f1157a2708616',1,'glm']]],\n  ['aligned_5fmediump_5fvec3',['aligned_mediump_vec3',['../a00303.html#ga3a25e494173f6a64637b08a1b50a2132',1,'glm']]],\n  ['aligned_5fmediump_5fvec4',['aligned_mediump_vec4',['../a00303.html#ga320d1c661cff2ef214eb50241f2928b2',1,'glm']]],\n  ['aligned_5fuvec1',['aligned_uvec1',['../a00303.html#ga1ff8ed402c93d280ff0597c1c5e7c548',1,'glm']]],\n  ['aligned_5fuvec2',['aligned_uvec2',['../a00303.html#ga074137e3be58528d67041c223d49f398',1,'glm']]],\n  ['aligned_5fuvec3',['aligned_uvec3',['../a00303.html#ga2a8d9c3046f89d854eb758adfa0811c0',1,'glm']]],\n  ['aligned_5fuvec4',['aligned_uvec4',['../a00303.html#gabf842c45eea186170c267a328e3f3b7d',1,'glm']]],\n  ['aligned_5fvec1',['aligned_vec1',['../a00303.html#ga05e6d4c908965d04191c2070a8d0a65e',1,'glm']]],\n  ['aligned_5fvec2',['aligned_vec2',['../a00303.html#ga0682462f8096a226773e20fac993cde5',1,'glm']]],\n  ['aligned_5fvec3',['aligned_vec3',['../a00303.html#ga7cf643b66664e0cd3c48759ae66c2bd0',1,'glm']]],\n  ['aligned_5fvec4',['aligned_vec4',['../a00303.html#ga85d89e83cb8137e1be1446de8c3b643a',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_1.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_1.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_1.js",
    "content": "var searchData=\n[\n  ['bool1',['bool1',['../a00315.html#gaddcd7aa2e30e61af5b38660613d3979e',1,'glm']]],\n  ['bool1x1',['bool1x1',['../a00315.html#ga7f895c936f0c29c8729afbbf22806090',1,'glm']]],\n  ['bool2',['bool2',['../a00315.html#gaa09ab65ec9c3c54305ff502e2b1fe6d9',1,'glm']]],\n  ['bool2x2',['bool2x2',['../a00315.html#gadb3703955e513632f98ba12fe051ba3e',1,'glm']]],\n  ['bool2x3',['bool2x3',['../a00315.html#ga9ae6ee155d0f90cb1ae5b6c4546738a0',1,'glm']]],\n  ['bool2x4',['bool2x4',['../a00315.html#ga4d7fa65be8e8e4ad6d920b45c44e471f',1,'glm']]],\n  ['bool3',['bool3',['../a00315.html#ga99629f818737f342204071ef8296b2ed',1,'glm']]],\n  ['bool3x2',['bool3x2',['../a00315.html#gac7d7311f7e0fa8b6163d96dab033a755',1,'glm']]],\n  ['bool3x3',['bool3x3',['../a00315.html#ga6c97b99aac3e302053ffb58aace9033c',1,'glm']]],\n  ['bool3x4',['bool3x4',['../a00315.html#gae7d6b679463d37d6c527d478fb470fdf',1,'glm']]],\n  ['bool4',['bool4',['../a00315.html#ga13c3200b82708f73faac6d7f09ec91a3',1,'glm']]],\n  ['bool4x2',['bool4x2',['../a00315.html#ga9ed830f52408b2f83c085063a3eaf1d0',1,'glm']]],\n  ['bool4x3',['bool4x3',['../a00315.html#gad0f5dc7f22c2065b1b06d57f1c0658fe',1,'glm']]],\n  ['bool4x4',['bool4x4',['../a00315.html#ga7d2a7d13986602ae2896bfaa394235d4',1,'glm']]],\n  ['bvec1',['bvec1',['../a00265.html#ga067af382616d93f8e850baae5154cdcc',1,'glm']]],\n  ['bvec2',['bvec2',['../a00281.html#ga0b6123e03653cc1bbe366fc55238a934',1,'glm']]],\n  ['bvec3',['bvec3',['../a00281.html#ga197151b72dfaf289daf98b361760ffe7',1,'glm']]],\n  ['bvec4',['bvec4',['../a00281.html#ga9f7b9712373ff4342d9114619b55f5e3',1,'glm']]],\n  ['byte',['byte',['../a00354.html#ga3005cb0d839d546c616becfa6602c607',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_2.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_2.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_2.js",
    "content": "var searchData=\n[\n  ['ddualquat',['ddualquat',['../a00317.html#ga3d71f98d84ba59dfe4e369fde4714cd6',1,'glm']]],\n  ['dmat2',['dmat2',['../a00283.html#ga21dbd1f987775d7cc7607c139531c7e6',1,'glm']]],\n  ['dmat2x2',['dmat2x2',['../a00283.html#ga66b6a9af787e468a46dfe24189e87f9b',1,'glm']]],\n  ['dmat2x3',['dmat2x3',['../a00283.html#ga92cd388753d48e20de69ea2dbedf826a',1,'glm']]],\n  ['dmat2x4',['dmat2x4',['../a00283.html#gaef2198807e937072803ae0ae45e1965e',1,'glm']]],\n  ['dmat3',['dmat3',['../a00283.html#ga6f40aa56265b4b0ccad41b86802efe33',1,'glm']]],\n  ['dmat3x2',['dmat3x2',['../a00283.html#ga001e3e0638fbf8719788fc64c5b8cf39',1,'glm']]],\n  ['dmat3x3',['dmat3x3',['../a00283.html#ga970cb3306be25a5ca5db5a9456831228',1,'glm']]],\n  ['dmat3x4',['dmat3x4',['../a00283.html#ga0412a634d183587e6188e9b11869f8f4',1,'glm']]],\n  ['dmat4',['dmat4',['../a00283.html#ga0f34486bb7fec8e5a5b3830b6a6cbeca',1,'glm']]],\n  ['dmat4x2',['dmat4x2',['../a00283.html#ga9bc0b3ab8b6ba2cb6782e179ad7ad156',1,'glm']]],\n  ['dmat4x3',['dmat4x3',['../a00283.html#gacd18864049f8c83799babe7e596ca05b',1,'glm']]],\n  ['dmat4x4',['dmat4x4',['../a00283.html#gad5a6484b983b74f9d801cab8bc4e6a10',1,'glm']]],\n  ['double1',['double1',['../a00315.html#ga20b861a9b6e2a300323671c57a02525b',1,'glm']]],\n  ['double1x1',['double1x1',['../a00315.html#ga45f16a4dd0db1f199afaed9fd12fe9a8',1,'glm']]],\n  ['double2',['double2',['../a00315.html#ga31b729b04facccda73f07ed26958b3c2',1,'glm']]],\n  ['double2x2',['double2x2',['../a00315.html#gae57d0201096834d25f2b91b319e7cdbd',1,'glm']]],\n  ['double2x3',['double2x3',['../a00315.html#ga3655bc324008553ca61f39952d0b2d08',1,'glm']]],\n  ['double2x4',['double2x4',['../a00315.html#gacd33061fc64a7b2dcfd7322c49d9557a',1,'glm']]],\n  ['double3',['double3',['../a00315.html#ga3d8b9028a1053a44a98902cd1c389472',1,'glm']]],\n  ['double3x2',['double3x2',['../a00315.html#ga5ec08fc39c9d783dfcc488be240fe975',1,'glm']]],\n  ['double3x3',['double3x3',['../a00315.html#ga4bad5bb20c6ddaecfe4006c93841d180',1,'glm']]],\n  ['double3x4',['double3x4',['../a00315.html#ga2ef022e453d663d70aec414b2a80f756',1,'glm']]],\n  ['double4',['double4',['../a00315.html#gaf92f58af24f35617518aeb3d4f63fda6',1,'glm']]],\n  ['double4x2',['double4x2',['../a00315.html#gabca29ccceea53669618b751aae0ba83d',1,'glm']]],\n  ['double4x3',['double4x3',['../a00315.html#gafad66a02ccd360c86d6ab9ff9cfbc19c',1,'glm']]],\n  ['double4x4',['double4x4',['../a00315.html#gaab541bed2e788e4537852a2492860806',1,'glm']]],\n  ['dquat',['dquat',['../a00249.html#ga1181459aa5d640a3ea43861b118f3f0b',1,'glm']]],\n  ['dualquat',['dualquat',['../a00317.html#gae93abee0c979902fbec6a7bee0f6fae1',1,'glm']]],\n  ['dvec1',['dvec1',['../a00268.html#ga6221af17edc2d4477a4583d2cd53e569',1,'glm']]],\n  ['dvec2',['dvec2',['../a00281.html#ga8b09c71aaac7da7867ae58377fe219a8',1,'glm']]],\n  ['dvec3',['dvec3',['../a00281.html#ga5b83ae3d0fdec519c038e4d2cf967cf0',1,'glm']]],\n  ['dvec4',['dvec4',['../a00281.html#ga57debab5d98ce618f7b2a97fe26eb3ac',1,'glm']]],\n  ['dword',['dword',['../a00354.html#ga86e46fff9f80ae33893d8d697f2ca98a',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_3.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_3.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_3.js",
    "content": "var searchData=\n[\n  ['f32',['f32',['../a00304.html#gabe6a542dd6c1d5ffd847f1b9b4c9c9b7',1,'glm']]],\n  ['f32mat1',['f32mat1',['../a00346.html#ga145ad477a2a3e152855511c3b52469a6',1,'glm::gtx']]],\n  ['f32mat1x1',['f32mat1x1',['../a00346.html#gac88c6a4dbfc380aa26e3adbbade36348',1,'glm::gtx']]],\n  ['f32mat2',['f32mat2',['../a00304.html#gab12383ed6ac7595ed6fde4d266c58425',1,'glm']]],\n  ['f32mat2x2',['f32mat2x2',['../a00304.html#ga04100c76f7d55a0dd0983ccf05142bff',1,'glm']]],\n  ['f32mat2x3',['f32mat2x3',['../a00304.html#gab256cdab5eb582e426d749ae77b5b566',1,'glm']]],\n  ['f32mat2x4',['f32mat2x4',['../a00304.html#gaf512b74c4400b68f9fdf9388b3d6aac8',1,'glm']]],\n  ['f32mat3',['f32mat3',['../a00304.html#ga856f3905ee7cc2e4890a8a1d56c150be',1,'glm']]],\n  ['f32mat3x2',['f32mat3x2',['../a00304.html#ga1320a08e14fdff3821241eefab6947e9',1,'glm']]],\n  ['f32mat3x3',['f32mat3x3',['../a00304.html#ga65261fa8a21045c8646ddff114a56174',1,'glm']]],\n  ['f32mat3x4',['f32mat3x4',['../a00304.html#gab90ade28222f8b861d5ceaf81a3a7f5d',1,'glm']]],\n  ['f32mat4',['f32mat4',['../a00304.html#ga99d1b85ff99956b33da7e9992aad129a',1,'glm']]],\n  ['f32mat4x2',['f32mat4x2',['../a00304.html#ga3b32ca1e57a4ef91babbc3d35a34ea20',1,'glm']]],\n  ['f32mat4x3',['f32mat4x3',['../a00304.html#ga239b96198771b7add8eea7e6b59840c0',1,'glm']]],\n  ['f32mat4x4',['f32mat4x4',['../a00304.html#gaee4da0e9fbd8cfa2f89cb80889719dc3',1,'glm']]],\n  ['f32quat',['f32quat',['../a00304.html#ga38e674196ba411d642be40c47bf33939',1,'glm']]],\n  ['f32vec1',['f32vec1',['../a00304.html#ga701f32ab5b3fb06996b41f5c0d643805',1,'glm::f32vec1()'],['../a00346.html#ga07f8d7348eb7ae059a84c118fdfeb943',1,'glm::gtx::f32vec1()']]],\n  ['f32vec2',['f32vec2',['../a00304.html#ga5d6c70e080409a76a257dc55bd8ea2c8',1,'glm']]],\n  ['f32vec3',['f32vec3',['../a00304.html#gaea5c4518e175162e306d2c2b5ef5ac79',1,'glm']]],\n  ['f32vec4',['f32vec4',['../a00304.html#ga31c6ca0e074a44007f49a9a3720b18c8',1,'glm']]],\n  ['f64',['f64',['../a00304.html#ga1d794d240091678f602e8de225b8d8c9',1,'glm']]],\n  ['f64mat1',['f64mat1',['../a00346.html#ga59bfa589419b5265d01314fcecd33435',1,'glm::gtx']]],\n  ['f64mat1x1',['f64mat1x1',['../a00346.html#ga448eeb08d0b7d8c43a8b292c981955fd',1,'glm::gtx']]],\n  ['f64mat2',['f64mat2',['../a00304.html#gad9771450a54785d13080cdde0fe20c1d',1,'glm']]],\n  ['f64mat2x2',['f64mat2x2',['../a00304.html#ga9ec7c4c79e303c053e30729a95fb2c37',1,'glm']]],\n  ['f64mat2x3',['f64mat2x3',['../a00304.html#gae3ab5719fc4c1e966631dbbcba8d412a',1,'glm']]],\n  ['f64mat2x4',['f64mat2x4',['../a00304.html#gac87278e0c702ba8afff76316d4eeb769',1,'glm']]],\n  ['f64mat3',['f64mat3',['../a00304.html#ga9b69181efbf8f37ae934f135137b29c0',1,'glm']]],\n  ['f64mat3x2',['f64mat3x2',['../a00304.html#ga2473d8bf3f4abf967c4d0e18175be6f7',1,'glm']]],\n  ['f64mat3x3',['f64mat3x3',['../a00304.html#ga916c1aed91cf91f7b41399ebe7c6e185',1,'glm']]],\n  ['f64mat3x4',['f64mat3x4',['../a00304.html#gaab239fa9e35b65a67cbaa6ac082f3675',1,'glm']]],\n  ['f64mat4',['f64mat4',['../a00304.html#ga0ecd3f4952536e5ef12702b44d2626fc',1,'glm']]],\n  ['f64mat4x2',['f64mat4x2',['../a00304.html#gab7daf79d6bc06a68bea1c6f5e11b5512',1,'glm']]],\n  ['f64mat4x3',['f64mat4x3',['../a00304.html#ga3e2e66ffbe341a80bc005ba2b9552110',1,'glm']]],\n  ['f64mat4x4',['f64mat4x4',['../a00304.html#gae52e2b7077a9ff928a06ab5ce600b81e',1,'glm']]],\n  ['f64quat',['f64quat',['../a00304.html#ga2b114a2f2af0fe1dfeb569c767822940',1,'glm']]],\n  ['f64vec1',['f64vec1',['../a00304.html#gade502df1ce14f837fae7f60a03ddb9b0',1,'glm::f64vec1()'],['../a00346.html#gae5987a61b8c03d5c432a9e62f0b3efe1',1,'glm::gtx::f64vec1()']]],\n  ['f64vec2',['f64vec2',['../a00304.html#gadc4e1594f9555d919131ee02b17822a2',1,'glm']]],\n  ['f64vec3',['f64vec3',['../a00304.html#gaa7a1ddca75c5f629173bf4772db7a635',1,'glm']]],\n  ['f64vec4',['f64vec4',['../a00304.html#ga66e92e57260bdb910609b9a56bf83e97',1,'glm']]],\n  ['fdualquat',['fdualquat',['../a00317.html#ga237c2b9b42c9a930e49de5840ae0f930',1,'glm']]],\n  ['float1',['float1',['../a00315.html#gaf5208d01f6c6fbcb7bb55d610b9c0ead',1,'glm']]],\n  ['float1x1',['float1x1',['../a00315.html#ga73720b8dc4620835b17f74d428f98c0c',1,'glm']]],\n  ['float2',['float2',['../a00315.html#ga02d3c013982c183906c61d74aa3166ce',1,'glm']]],\n  ['float2x2',['float2x2',['../a00315.html#ga33d43ecbb60a85a1366ff83f8a0ec85f',1,'glm']]],\n  ['float2x3',['float2x3',['../a00315.html#ga939b0cff15cee3030f75c1b2e36f89fe',1,'glm']]],\n  ['float2x4',['float2x4',['../a00315.html#gafec3cfd901ab334a92e0242b8f2269b4',1,'glm']]],\n  ['float3',['float3',['../a00315.html#ga821ff110fc8533a053cbfcc93e078cc0',1,'glm']]],\n  ['float32',['float32',['../a00304.html#gaacdc525d6f7bddb3ae95d5c311bd06a1',1,'glm']]],\n  ['float32_5ft',['float32_t',['../a00304.html#gaa4947bc8b47c72fceea9bda730ecf603',1,'glm']]],\n  ['float3x2',['float3x2',['../a00315.html#gaa6c69f04ba95f3faedf95dae874de576',1,'glm']]],\n  ['float3x3',['float3x3',['../a00315.html#ga6ceb5d38a58becdf420026e12a6562f3',1,'glm']]],\n  ['float3x4',['float3x4',['../a00315.html#ga4d2679c321b793ca3784fe0315bb5332',1,'glm']]],\n  ['float4',['float4',['../a00315.html#gae2da7345087db3815a25d8837a727ef1',1,'glm']]],\n  ['float4x2',['float4x2',['../a00315.html#ga308b9af0c221145bcfe9bfc129d9098e',1,'glm']]],\n  ['float4x3',['float4x3',['../a00315.html#gac0a51b4812038aa81d73ffcc37f741ac',1,'glm']]],\n  ['float4x4',['float4x4',['../a00315.html#gad3051649b3715d828a4ab92cdae7c3bf',1,'glm']]],\n  ['float64',['float64',['../a00304.html#ga232fad1b0d6dcc7c16aabde98b2e2a80',1,'glm']]],\n  ['float64_5ft',['float64_t',['../a00304.html#ga728366fef72cd96f0a5fa6429f05469e',1,'glm']]],\n  ['fmat2',['fmat2',['../a00304.html#ga4541dc2feb2a31d6ecb5a303f3dd3280',1,'glm']]],\n  ['fmat2x2',['fmat2x2',['../a00304.html#ga3350c93c3275298f940a42875388e4b4',1,'glm']]],\n  ['fmat2x3',['fmat2x3',['../a00304.html#ga55a2d2a8eb09b5633668257eb3cad453',1,'glm']]],\n  ['fmat2x4',['fmat2x4',['../a00304.html#ga681381f19f11c9e5ee45cda2c56937ff',1,'glm']]],\n  ['fmat3',['fmat3',['../a00304.html#ga253d453c20e037730023fea0215cb6f6',1,'glm']]],\n  ['fmat3x2',['fmat3x2',['../a00304.html#ga6af54d70d9beb0a7ef992a879e86b04f',1,'glm']]],\n  ['fmat3x3',['fmat3x3',['../a00304.html#gaa07c86650253672a19dbfb898f3265b8',1,'glm']]],\n  ['fmat3x4',['fmat3x4',['../a00304.html#ga44e158af77a670ee1b58c03cda9e1619',1,'glm']]],\n  ['fmat4',['fmat4',['../a00304.html#ga8cb400c0f4438f2640035d7b9824a0ca',1,'glm']]],\n  ['fmat4x2',['fmat4x2',['../a00304.html#ga8c8aa45aafcc23238edb1d5aeb801774',1,'glm']]],\n  ['fmat4x3',['fmat4x3',['../a00304.html#ga4295048a78bdf46b8a7de77ec665b497',1,'glm']]],\n  ['fmat4x4',['fmat4x4',['../a00304.html#gad01cc6479bde1fd1870f13d3ed9530b3',1,'glm']]],\n  ['fvec1',['fvec1',['../a00304.html#ga98b9ed43cf8c5cf1d354b23c7df9119f',1,'glm']]],\n  ['fvec2',['fvec2',['../a00304.html#ga24273aa02abaecaab7f160bac437a339',1,'glm']]],\n  ['fvec3',['fvec3',['../a00304.html#ga89930533646b30d021759298aa6bf04a',1,'glm']]],\n  ['fvec4',['fvec4',['../a00304.html#ga713c796c54875cf4092d42ff9d9096b0',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_4.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_4.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_4.js",
    "content": "var searchData=\n[\n  ['highp_5fbvec1',['highp_bvec1',['../a00266.html#gae8a1e14abae1387274f57741750c06a2',1,'glm']]],\n  ['highp_5fbvec2',['highp_bvec2',['../a00282.html#gac6c781a85f012d77a75310a3058702c2',1,'glm']]],\n  ['highp_5fbvec3',['highp_bvec3',['../a00282.html#gaedb70027d89a0a405046aefda4eabaa6',1,'glm']]],\n  ['highp_5fbvec4',['highp_bvec4',['../a00282.html#gaee663ff64429443ab07a5327074192f6',1,'glm']]],\n  ['highp_5fddualquat',['highp_ddualquat',['../a00317.html#ga8f67eafa7197d7a668dad5105a463d2a',1,'glm']]],\n  ['highp_5fdmat2',['highp_dmat2',['../a00284.html#ga369b447bb1b312449b679ea1f90f3cea',1,'glm']]],\n  ['highp_5fdmat2x2',['highp_dmat2x2',['../a00284.html#gae27ac20302c2e39b6c78e7fe18e62ef7',1,'glm']]],\n  ['highp_5fdmat2x3',['highp_dmat2x3',['../a00284.html#gad4689ec33bc2c26e10132b174b49001a',1,'glm']]],\n  ['highp_5fdmat2x4',['highp_dmat2x4',['../a00284.html#ga5ceeb46670fdc000a0701910cc5061c9',1,'glm']]],\n  ['highp_5fdmat3',['highp_dmat3',['../a00284.html#ga86d6d4dbad92ffdcc759773340e15a97',1,'glm']]],\n  ['highp_5fdmat3x2',['highp_dmat3x2',['../a00284.html#ga3647309010a2160e9ec89bc6f7c95c35',1,'glm']]],\n  ['highp_5fdmat3x3',['highp_dmat3x3',['../a00284.html#gae367ea93c4ad8a7c101dd27b8b2b04ce',1,'glm']]],\n  ['highp_5fdmat3x4',['highp_dmat3x4',['../a00284.html#ga6543eeeb64f48d79a0b96484308c50f0',1,'glm']]],\n  ['highp_5fdmat4',['highp_dmat4',['../a00284.html#ga945254f459860741138bceb74da496b9',1,'glm']]],\n  ['highp_5fdmat4x2',['highp_dmat4x2',['../a00284.html#gaeda1f474c668eaecc443bea85a4a4eca',1,'glm']]],\n  ['highp_5fdmat4x3',['highp_dmat4x3',['../a00284.html#gacf237c2d8832fe8db2d7e187585d34bd',1,'glm']]],\n  ['highp_5fdmat4x4',['highp_dmat4x4',['../a00284.html#ga118d24a3d12c034e7cccef7bf2f01b8a',1,'glm']]],\n  ['highp_5fdquat',['highp_dquat',['../a00250.html#gaf13a25f41afc03480b40fc71bd249cec',1,'glm']]],\n  ['highp_5fdualquat',['highp_dualquat',['../a00317.html#ga9ef5bf1da52a9d4932335a517086ceaf',1,'glm']]],\n  ['highp_5fdvec1',['highp_dvec1',['../a00269.html#ga77c22c4426da3a6865c88d3fc907e3fe',1,'glm']]],\n  ['highp_5fdvec2',['highp_dvec2',['../a00282.html#gab98d77cca255914f5e29697fcbc2d975',1,'glm']]],\n  ['highp_5fdvec3',['highp_dvec3',['../a00282.html#gab24dc20dcdc5b71282634bdbf6b70105',1,'glm']]],\n  ['highp_5fdvec4',['highp_dvec4',['../a00282.html#gab654f4ed4a99d64a6cfc65320c2a7590',1,'glm']]],\n  ['highp_5ff32',['highp_f32',['../a00304.html#ga6906e1ef0b34064b4b675489c5c38725',1,'glm']]],\n  ['highp_5ff32mat2',['highp_f32mat2',['../a00304.html#ga298f7d4d273678d0282812368da27fda',1,'glm']]],\n  ['highp_5ff32mat2x2',['highp_f32mat2x2',['../a00304.html#gae5eb02d92b7d4605a4b7f37ae5cb2968',1,'glm']]],\n  ['highp_5ff32mat2x3',['highp_f32mat2x3',['../a00304.html#ga0aeb5cb001473b08c88175012708a379',1,'glm']]],\n  ['highp_5ff32mat2x4',['highp_f32mat2x4',['../a00304.html#ga88938ee1e7981fa3402e88da6ad74531',1,'glm']]],\n  ['highp_5ff32mat3',['highp_f32mat3',['../a00304.html#ga24f9ef3263b1638564713892cc37981f',1,'glm']]],\n  ['highp_5ff32mat3x2',['highp_f32mat3x2',['../a00304.html#ga36537e701456f12c20e73f469cac4967',1,'glm']]],\n  ['highp_5ff32mat3x3',['highp_f32mat3x3',['../a00304.html#gaab691ae40c37976d268d8cac0096e0e1',1,'glm']]],\n  ['highp_5ff32mat3x4',['highp_f32mat3x4',['../a00304.html#gaa5086dbd6efb272d13fc88829330861d',1,'glm']]],\n  ['highp_5ff32mat4',['highp_f32mat4',['../a00304.html#ga14c90ca49885723f51d06e295587236f',1,'glm']]],\n  ['highp_5ff32mat4x2',['highp_f32mat4x2',['../a00304.html#ga602e119c6b246b4f6edcf66845f2aa0f',1,'glm']]],\n  ['highp_5ff32mat4x3',['highp_f32mat4x3',['../a00304.html#ga66bffdd8e5c0d3ef9958bbab9ca1ba59',1,'glm']]],\n  ['highp_5ff32mat4x4',['highp_f32mat4x4',['../a00304.html#gaf1b712b97b2322685fbbed28febe5f84',1,'glm']]],\n  ['highp_5ff32quat',['highp_f32quat',['../a00304.html#ga4252cf7f5b0e3cd47c3d3badf0ef43b3',1,'glm']]],\n  ['highp_5ff32vec1',['highp_f32vec1',['../a00304.html#gab1b1c9e8667902b78b2c330e4d383a61',1,'glm']]],\n  ['highp_5ff32vec2',['highp_f32vec2',['../a00304.html#ga0b8ebd4262331e139ff257d7cf2a4b77',1,'glm']]],\n  ['highp_5ff32vec3',['highp_f32vec3',['../a00304.html#ga522775dbcc6d96246a1c5cf02344fd8c',1,'glm']]],\n  ['highp_5ff32vec4',['highp_f32vec4',['../a00304.html#ga0f038d4e09862a74f03d102c59eda73e',1,'glm']]],\n  ['highp_5ff64',['highp_f64',['../a00304.html#ga51d5266017d88f62737c1973923a7cf4',1,'glm']]],\n  ['highp_5ff64mat2',['highp_f64mat2',['../a00304.html#gaf7adb92ce8de0afaff01436b039fd924',1,'glm']]],\n  ['highp_5ff64mat2x2',['highp_f64mat2x2',['../a00304.html#ga773ea237a051827cfc20de960bc73ff0',1,'glm']]],\n  ['highp_5ff64mat2x3',['highp_f64mat2x3',['../a00304.html#ga8342c7469384c6d769cacc9e309278d9',1,'glm']]],\n  ['highp_5ff64mat2x4',['highp_f64mat2x4',['../a00304.html#ga5a67a7440b9c0d1538533540f99036a5',1,'glm']]],\n  ['highp_5ff64mat3',['highp_f64mat3',['../a00304.html#ga609bf0ace941d6ab1bb2f9522a04e546',1,'glm']]],\n  ['highp_5ff64mat3x2',['highp_f64mat3x2',['../a00304.html#ga5bdbfb4ce7d05ce1e1b663f50be17e8a',1,'glm']]],\n  ['highp_5ff64mat3x3',['highp_f64mat3x3',['../a00304.html#ga7c2cadb9b85cc7e0d125db21ca19dea4',1,'glm']]],\n  ['highp_5ff64mat3x4',['highp_f64mat3x4',['../a00304.html#gad310b1dddeec9ec837a104e7db8de580',1,'glm']]],\n  ['highp_5ff64mat4',['highp_f64mat4',['../a00304.html#gad308e0ed27d64daa4213fb257fcbd5a5',1,'glm']]],\n  ['highp_5ff64mat4x2',['highp_f64mat4x2',['../a00304.html#ga58c4631421e323e252fc716b6103e38c',1,'glm']]],\n  ['highp_5ff64mat4x3',['highp_f64mat4x3',['../a00304.html#gae94823d65648e44d972863c6caa13103',1,'glm']]],\n  ['highp_5ff64mat4x4',['highp_f64mat4x4',['../a00304.html#ga09a2374b725c4246d263ee36fb66434c',1,'glm']]],\n  ['highp_5ff64quat',['highp_f64quat',['../a00304.html#gafcfdd74a115163af2ce1093551747352',1,'glm']]],\n  ['highp_5ff64vec1',['highp_f64vec1',['../a00304.html#ga62c31b133ceee9984fbee05ac4c434a9',1,'glm']]],\n  ['highp_5ff64vec2',['highp_f64vec2',['../a00304.html#ga670ea1b0a1172bc73b1d7c1e0c26cce2',1,'glm']]],\n  ['highp_5ff64vec3',['highp_f64vec3',['../a00304.html#gacd1196090ece7a69fb5c3e43a7d4d851',1,'glm']]],\n  ['highp_5ff64vec4',['highp_f64vec4',['../a00304.html#ga61185c44c8cc0b25d9a0f67d8a267444',1,'glm']]],\n  ['highp_5ffdualquat',['highp_fdualquat',['../a00317.html#ga4c4e55e9c99dc57b299ed590968da564',1,'glm']]],\n  ['highp_5ffloat32',['highp_float32',['../a00304.html#gac5a7f21136e0a78d0a1b9f60ef2f8aea',1,'glm']]],\n  ['highp_5ffloat32_5ft',['highp_float32_t',['../a00304.html#ga5376ef18dca9d248897c3363ef5a06b2',1,'glm']]],\n  ['highp_5ffloat64',['highp_float64',['../a00304.html#gadbb198a4d7aad82a0f4dc466ef6f6215',1,'glm']]],\n  ['highp_5ffloat64_5ft',['highp_float64_t',['../a00304.html#gaaeeb0077198cff40e3f48b1108ece139',1,'glm']]],\n  ['highp_5ffmat2',['highp_fmat2',['../a00304.html#gae98c88d9a7befa9b5877f49176225535',1,'glm']]],\n  ['highp_5ffmat2x2',['highp_fmat2x2',['../a00304.html#ga28635abcddb2f3e92c33c3f0fcc682ad',1,'glm']]],\n  ['highp_5ffmat2x3',['highp_fmat2x3',['../a00304.html#gacf111095594996fef29067b2454fccad',1,'glm']]],\n  ['highp_5ffmat2x4',['highp_fmat2x4',['../a00304.html#ga4920a1536f161f7ded1d6909b7fef0d2',1,'glm']]],\n  ['highp_5ffmat3',['highp_fmat3',['../a00304.html#gaed2dc69e0d507d4191092dbd44b3eb75',1,'glm']]],\n  ['highp_5ffmat3x2',['highp_fmat3x2',['../a00304.html#gae54e4d1aeb5a0f0c64822e6f1b299e19',1,'glm']]],\n  ['highp_5ffmat3x3',['highp_fmat3x3',['../a00304.html#gaa5b44d3ef6efcf33f44876673a7a936e',1,'glm']]],\n  ['highp_5ffmat3x4',['highp_fmat3x4',['../a00304.html#ga961fac2a885907ffcf4d40daac6615c5',1,'glm']]],\n  ['highp_5ffmat4',['highp_fmat4',['../a00304.html#gabf28443ce0cc0959077ec39b21f32c39',1,'glm']]],\n  ['highp_5ffmat4x2',['highp_fmat4x2',['../a00304.html#ga076961cf2d120c7168b957cb2ed107b3',1,'glm']]],\n  ['highp_5ffmat4x3',['highp_fmat4x3',['../a00304.html#gae406ec670f64170a7437b5e302eeb2cb',1,'glm']]],\n  ['highp_5ffmat4x4',['highp_fmat4x4',['../a00304.html#gaee80c7cd3caa0f2635058656755f6f69',1,'glm']]],\n  ['highp_5ffvec1',['highp_fvec1',['../a00304.html#gaa1040342c4efdedc8f90e6267db8d41c',1,'glm']]],\n  ['highp_5ffvec2',['highp_fvec2',['../a00304.html#ga7c0d196f5fa79f7e892a2f323a0be1ae',1,'glm']]],\n  ['highp_5ffvec3',['highp_fvec3',['../a00304.html#ga6ef77413883f48d6b53b4169b25edbd0',1,'glm']]],\n  ['highp_5ffvec4',['highp_fvec4',['../a00304.html#ga8b839abbb44f5102609eed89f6ed61f7',1,'glm']]],\n  ['highp_5fi16',['highp_i16',['../a00304.html#ga0336abc2604dd2c20c30e036454b64f8',1,'glm']]],\n  ['highp_5fi16vec1',['highp_i16vec1',['../a00304.html#ga70fdfcc1fd38084bde83c3f06a8b9f19',1,'glm']]],\n  ['highp_5fi16vec2',['highp_i16vec2',['../a00304.html#gaa7db3ad10947cf70cae6474d05ebd227',1,'glm']]],\n  ['highp_5fi16vec3',['highp_i16vec3',['../a00304.html#ga5609c8fa2b7eac3dec337d321cb0ca96',1,'glm']]],\n  ['highp_5fi16vec4',['highp_i16vec4',['../a00304.html#ga7a18659438828f91ccca28f1a1e067b4',1,'glm']]],\n  ['highp_5fi32',['highp_i32',['../a00304.html#ga727675ac6b5d2fc699520e0059735e25',1,'glm']]],\n  ['highp_5fi32vec1',['highp_i32vec1',['../a00304.html#ga6a9d71cc62745302f70422b7dc98755c',1,'glm']]],\n  ['highp_5fi32vec2',['highp_i32vec2',['../a00304.html#gaa9b4579f8e6f3d9b649a965bcb785530',1,'glm']]],\n  ['highp_5fi32vec3',['highp_i32vec3',['../a00304.html#ga31e070ea3bdee623e6e18a61ba5718b1',1,'glm']]],\n  ['highp_5fi32vec4',['highp_i32vec4',['../a00304.html#gadf70eaaa230aeed5a4c9f4c9c5c55902',1,'glm']]],\n  ['highp_5fi64',['highp_i64',['../a00304.html#gac25db6d2b1e2a0f351b77ba3409ac4cd',1,'glm']]],\n  ['highp_5fi64vec1',['highp_i64vec1',['../a00304.html#gabd2fda3cd208acf5a370ec9b5b3c58d4',1,'glm']]],\n  ['highp_5fi64vec2',['highp_i64vec2',['../a00304.html#gad9d1903cb20899966e8ebe0670889a5f',1,'glm']]],\n  ['highp_5fi64vec3',['highp_i64vec3',['../a00304.html#ga62324224b9c6cce9c6b4db96bb704a8a',1,'glm']]],\n  ['highp_5fi64vec4',['highp_i64vec4',['../a00304.html#gad23b1be9b3bf20352089a6b738f0ebba',1,'glm']]],\n  ['highp_5fi8',['highp_i8',['../a00304.html#gacb88796f2d08ef253d0345aff20c3aee',1,'glm']]],\n  ['highp_5fi8vec1',['highp_i8vec1',['../a00304.html#ga1d8c10949691b0fd990253476f47beb3',1,'glm']]],\n  ['highp_5fi8vec2',['highp_i8vec2',['../a00304.html#ga50542e4cb9b2f9bec213b66e06145d07',1,'glm']]],\n  ['highp_5fi8vec3',['highp_i8vec3',['../a00304.html#ga8396bfdc081d9113190d0c39c9f67084',1,'glm']]],\n  ['highp_5fi8vec4',['highp_i8vec4',['../a00304.html#ga4824e3ddf6e608117dfe4809430737b4',1,'glm']]],\n  ['highp_5fimat2',['highp_imat2',['../a00294.html#ga8499cc3b016003f835314c1c756e9db9',1,'glm']]],\n  ['highp_5fimat2x2',['highp_imat2x2',['../a00294.html#gaa389e2d1c3b10941cae870bc0aeba5b3',1,'glm']]],\n  ['highp_5fimat2x3',['highp_imat2x3',['../a00294.html#gaba49d890e06c9444795f5a133fbf1336',1,'glm']]],\n  ['highp_5fimat2x4',['highp_imat2x4',['../a00294.html#ga05a970fd4366dad6c8a0be676b1eae5b',1,'glm']]],\n  ['highp_5fimat3',['highp_imat3',['../a00294.html#gaca4506a3efa679eff7c006d9826291fd',1,'glm']]],\n  ['highp_5fimat3x2',['highp_imat3x2',['../a00294.html#ga91c671c3ff9706c2393e78b22fd84bcb',1,'glm']]],\n  ['highp_5fimat3x3',['highp_imat3x3',['../a00294.html#ga07d7b7173e2a6f843ff5f1c615a95b41',1,'glm']]],\n  ['highp_5fimat3x4',['highp_imat3x4',['../a00294.html#ga53008f580be99018a17b357b5a4ffc0d',1,'glm']]],\n  ['highp_5fimat4',['highp_imat4',['../a00294.html#ga7cfb09b34e0fcf73eaf6512d6483ef56',1,'glm']]],\n  ['highp_5fimat4x2',['highp_imat4x2',['../a00294.html#ga1858820fb292cae396408b2034407f72',1,'glm']]],\n  ['highp_5fimat4x3',['highp_imat4x3',['../a00294.html#ga6be0b80ae74bb309bc5b964d93d68fc5',1,'glm']]],\n  ['highp_5fimat4x4',['highp_imat4x4',['../a00294.html#ga2c783ee6f8f040ab37df2f70392c8b44',1,'glm']]],\n  ['highp_5fint16',['highp_int16',['../a00304.html#ga5fde0fa4a3852a9dd5d637a92ee74718',1,'glm']]],\n  ['highp_5fint16_5ft',['highp_int16_t',['../a00304.html#gacaea06d0a79ef3172e887a7a6ba434ff',1,'glm']]],\n  ['highp_5fint32',['highp_int32',['../a00304.html#ga84ed04b4e0de18c977e932d617e7c223',1,'glm']]],\n  ['highp_5fint32_5ft',['highp_int32_t',['../a00304.html#ga2c71c8bd9e2fe7d2e93ca250d8b6157f',1,'glm']]],\n  ['highp_5fint64',['highp_int64',['../a00304.html#ga226a8d52b4e3f77aaa6231135e886aac',1,'glm']]],\n  ['highp_5fint64_5ft',['highp_int64_t',['../a00304.html#ga73c6abb280a45feeff60f9accaee91f3',1,'glm']]],\n  ['highp_5fint8',['highp_int8',['../a00304.html#gad0549c902a96a7164e4ac858d5f39dbf',1,'glm']]],\n  ['highp_5fint8_5ft',['highp_int8_t',['../a00304.html#ga1085c50dd8fbeb5e7e609b1c127492a5',1,'glm']]],\n  ['highp_5fivec1',['highp_ivec1',['../a00273.html#ga7e02566f2bd2caa68e61be45a477c77e',1,'glm']]],\n  ['highp_5fivec2',['highp_ivec2',['../a00282.html#gaa18f6b80b41c214f10666948539c1f93',1,'glm']]],\n  ['highp_5fivec3',['highp_ivec3',['../a00282.html#ga7dd782c3ef5719bc6d5c3ca826b8ad18',1,'glm']]],\n  ['highp_5fivec4',['highp_ivec4',['../a00282.html#gafb84dccdf5d82443df3ffc8428dcaf3e',1,'glm']]],\n  ['highp_5fmat2',['highp_mat2',['../a00284.html#ga4d5a0055544a516237dcdace049b143d',1,'glm']]],\n  ['highp_5fmat2x2',['highp_mat2x2',['../a00284.html#ga2352ae43b284c9f71446674c0208c05d',1,'glm']]],\n  ['highp_5fmat2x3',['highp_mat2x3',['../a00284.html#ga7a0e3fe41512b0494e598f5c58722f19',1,'glm']]],\n  ['highp_5fmat2x4',['highp_mat2x4',['../a00284.html#ga61f36a81f2ed1b5f9fc8bc3b26faec8f',1,'glm']]],\n  ['highp_5fmat3',['highp_mat3',['../a00284.html#ga3fd9849f3da5ed6e3decc3fb10a20b3e',1,'glm']]],\n  ['highp_5fmat3x2',['highp_mat3x2',['../a00284.html#ga1eda47a00027ec440eac05d63739c71b',1,'glm']]],\n  ['highp_5fmat3x3',['highp_mat3x3',['../a00284.html#ga2ea82e12f4d7afcfce8f59894d400230',1,'glm']]],\n  ['highp_5fmat3x4',['highp_mat3x4',['../a00284.html#ga6454b3a26ea30f69de8e44c08a63d1b7',1,'glm']]],\n  ['highp_5fmat4',['highp_mat4',['../a00284.html#gad72e13d669d039f12ae5afa23148adc1',1,'glm']]],\n  ['highp_5fmat4x2',['highp_mat4x2',['../a00284.html#gab68b66e6d2c37b804d0baf970fa4f0e5',1,'glm']]],\n  ['highp_5fmat4x3',['highp_mat4x3',['../a00284.html#ga8d5a4e65fb976e4553b84995b95ecb38',1,'glm']]],\n  ['highp_5fmat4x4',['highp_mat4x4',['../a00284.html#ga58cc504be0e3b61c48bc91554a767b9f',1,'glm']]],\n  ['highp_5fquat',['highp_quat',['../a00253.html#gaa2fd8085774376310aeb80588e0eab6e',1,'glm']]],\n  ['highp_5fu16',['highp_u16',['../a00304.html#ga8e62c883d13f47015f3b70ed88751369',1,'glm']]],\n  ['highp_5fu16vec1',['highp_u16vec1',['../a00304.html#gad064202b4cf9a2972475c03de657cb39',1,'glm']]],\n  ['highp_5fu16vec2',['highp_u16vec2',['../a00304.html#ga791b15ceb3f1e09d1a0ec6f3057ca159',1,'glm']]],\n  ['highp_5fu16vec3',['highp_u16vec3',['../a00304.html#gacfd806749008f0ade6ac4bb9dd91082f',1,'glm']]],\n  ['highp_5fu16vec4',['highp_u16vec4',['../a00304.html#ga8a85a3d54a8a9e14fe7a1f96196c4f61',1,'glm']]],\n  ['highp_5fu32',['highp_u32',['../a00304.html#ga7a6f1929464dcc680b16381a4ee5f2cf',1,'glm']]],\n  ['highp_5fu32vec1',['highp_u32vec1',['../a00304.html#ga0e35a565b9036bfc3989f5e23a0792e3',1,'glm']]],\n  ['highp_5fu32vec2',['highp_u32vec2',['../a00304.html#ga2f256334f83fba4c2d219e414b51df6c',1,'glm']]],\n  ['highp_5fu32vec3',['highp_u32vec3',['../a00304.html#gaf14d7a50502464e7cbfa074f24684cb1',1,'glm']]],\n  ['highp_5fu32vec4',['highp_u32vec4',['../a00304.html#ga22166f0da65038b447f3c5e534fff1c2',1,'glm']]],\n  ['highp_5fu64',['highp_u64',['../a00304.html#ga0c181fdf06a309691999926b6690c969',1,'glm']]],\n  ['highp_5fu64vec1',['highp_u64vec1',['../a00304.html#gae4fe774744852c4d7d069be2e05257ab',1,'glm']]],\n  ['highp_5fu64vec2',['highp_u64vec2',['../a00304.html#ga78f77b8b2d17b431ac5a68c0b5d7050d',1,'glm']]],\n  ['highp_5fu64vec3',['highp_u64vec3',['../a00304.html#ga41bdabea6e589029659331ba47eb78c1',1,'glm']]],\n  ['highp_5fu64vec4',['highp_u64vec4',['../a00304.html#ga4f15b41aa24b11cc42ad5798c04a2325',1,'glm']]],\n  ['highp_5fu8',['highp_u8',['../a00304.html#gacd1259f3a9e8d2a9df5be2d74322ef9c',1,'glm']]],\n  ['highp_5fu8vec1',['highp_u8vec1',['../a00304.html#ga8408cb76b6550ff01fa0a3024e7b68d2',1,'glm']]],\n  ['highp_5fu8vec2',['highp_u8vec2',['../a00304.html#ga27585b7c3ab300059f11fcba465f6fd2',1,'glm']]],\n  ['highp_5fu8vec3',['highp_u8vec3',['../a00304.html#ga45721c13b956eb691cbd6c6c1429167a',1,'glm']]],\n  ['highp_5fu8vec4',['highp_u8vec4',['../a00304.html#gae0b75ad0fed8c00ddc0b5ce335d31060',1,'glm']]],\n  ['highp_5fuint16',['highp_uint16',['../a00304.html#ga746dc6da204f5622e395f492997dbf57',1,'glm']]],\n  ['highp_5fuint16_5ft',['highp_uint16_t',['../a00304.html#gacf54c3330ef60aa3d16cb676c7bcb8c7',1,'glm']]],\n  ['highp_5fuint32',['highp_uint32',['../a00304.html#ga256b12b650c3f2fb86878fd1c5db8bc3',1,'glm']]],\n  ['highp_5fuint32_5ft',['highp_uint32_t',['../a00304.html#gae978599c9711ac263ba732d4ac225b0e',1,'glm']]],\n  ['highp_5fuint64',['highp_uint64',['../a00304.html#gaa38d732f5d4a7bc42a1b43b9d3c141ce',1,'glm']]],\n  ['highp_5fuint64_5ft',['highp_uint64_t',['../a00304.html#gaa46172d7dc1c7ffe3e78107ff88adf08',1,'glm']]],\n  ['highp_5fuint8',['highp_uint8',['../a00304.html#ga97432f9979e73e66567361fd01e4cffb',1,'glm']]],\n  ['highp_5fuint8_5ft',['highp_uint8_t',['../a00304.html#gac4e00a26a2adb5f2c0a7096810df29e5',1,'glm']]],\n  ['highp_5fumat2',['highp_umat2',['../a00294.html#ga42cbce64c4c1cd121b8437daa6e110de',1,'glm']]],\n  ['highp_5fumat2x2',['highp_umat2x2',['../a00294.html#ga5337b7bc95f9cbac08a0c00b3f936b28',1,'glm']]],\n  ['highp_5fumat2x3',['highp_umat2x3',['../a00294.html#ga90718c7128320b24b52f9ea70e643ad4',1,'glm']]],\n  ['highp_5fumat2x4',['highp_umat2x4',['../a00294.html#gadca0a4724b4a6f56a2355b6f6e19248b',1,'glm']]],\n  ['highp_5fumat3',['highp_umat3',['../a00294.html#gaa1143120339b7d2d469d327662e8a172',1,'glm']]],\n  ['highp_5fumat3x2',['highp_umat3x2',['../a00294.html#ga844a5da2e7fc03fc7cccc7f1b70809c4',1,'glm']]],\n  ['highp_5fumat3x3',['highp_umat3x3',['../a00294.html#ga1f7d41c36b980774a4d2e7c1647fb4b2',1,'glm']]],\n  ['highp_5fumat3x4',['highp_umat3x4',['../a00294.html#ga25ee15c323924f2d0fe9896d329e5086',1,'glm']]],\n  ['highp_5fumat4',['highp_umat4',['../a00294.html#gaf665e4e78c2cc32a54ab40325738f9c9',1,'glm']]],\n  ['highp_5fumat4x2',['highp_umat4x2',['../a00294.html#gae69eb82ec08b0dc9bf2ead2a339ff801',1,'glm']]],\n  ['highp_5fumat4x3',['highp_umat4x3',['../a00294.html#ga45a8163d02c43216252056b0c120f3a5',1,'glm']]],\n  ['highp_5fumat4x4',['highp_umat4x4',['../a00294.html#ga6a56cbb769aed334c95241664415f9ba',1,'glm']]],\n  ['highp_5fuvec1',['highp_uvec1',['../a00277.html#gacda57dd8c2bff4934c7f09ddd87c0f39',1,'glm']]],\n  ['highp_5fuvec2',['highp_uvec2',['../a00282.html#gad5dd50da9e37387ca6b4e6f9c80fe6f8',1,'glm']]],\n  ['highp_5fuvec3',['highp_uvec3',['../a00282.html#gaef61508dd40ec523416697982f9ceaae',1,'glm']]],\n  ['highp_5fuvec4',['highp_uvec4',['../a00282.html#gaeebd7dd9f3e678691f8620241e5f9221',1,'glm']]],\n  ['highp_5fvec1',['highp_vec1',['../a00271.html#ga9e8ed21862a897c156c0b2abca70b1e9',1,'glm']]],\n  ['highp_5fvec2',['highp_vec2',['../a00282.html#gaa92c1954d71b1e7914874bd787b43d1c',1,'glm']]],\n  ['highp_5fvec3',['highp_vec3',['../a00282.html#gaca61dfaccbf2f58f2d8063a4e76b44a9',1,'glm']]],\n  ['highp_5fvec4',['highp_vec4',['../a00282.html#gad281decae52948b82feb3a9db8f63a7b',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_5.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_5.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_5.js",
    "content": "var searchData=\n[\n  ['i16',['i16',['../a00304.html#ga3ab5fe184343d394fb6c2723c3ee3699',1,'glm']]],\n  ['i16vec1',['i16vec1',['../a00304.html#gafe730798732aa7b0647096a004db1b1c',1,'glm']]],\n  ['i16vec2',['i16vec2',['../a00304.html#ga2996630ba7b10535af8e065cf326f761',1,'glm']]],\n  ['i16vec3',['i16vec3',['../a00304.html#gae9c90a867a6026b1f6eab00456f3fb8b',1,'glm']]],\n  ['i16vec4',['i16vec4',['../a00304.html#ga550831bfc26d1e0101c1cb3d79938c06',1,'glm']]],\n  ['i32',['i32',['../a00304.html#ga96faea43ac5f875d2d3ffbf8d213e3eb',1,'glm']]],\n  ['i32vec1',['i32vec1',['../a00304.html#ga54b8a4e0f5a7203a821bf8e9c1265bcf',1,'glm']]],\n  ['i32vec2',['i32vec2',['../a00304.html#ga8b44026374982dcd1e52d22bac99247e',1,'glm']]],\n  ['i32vec3',['i32vec3',['../a00304.html#ga7f526b5cccef126a2ebcf9bdd890394e',1,'glm']]],\n  ['i32vec4',['i32vec4',['../a00304.html#ga866a05905c49912309ed1fa5f5980e61',1,'glm']]],\n  ['i64',['i64',['../a00304.html#gadb997e409103d4da18abd837e636a496',1,'glm']]],\n  ['i64vec1',['i64vec1',['../a00304.html#ga2b65767f8b5aed1bd1cf86c541662b50',1,'glm']]],\n  ['i64vec2',['i64vec2',['../a00304.html#ga48310188e1d0c616bf8d78c92447523b',1,'glm']]],\n  ['i64vec3',['i64vec3',['../a00304.html#ga667948cfe6fb3d6606c750729ec49f77',1,'glm']]],\n  ['i64vec4',['i64vec4',['../a00304.html#gaa4e31c3d9de067029efeb161a44b0232',1,'glm']]],\n  ['i8',['i8',['../a00304.html#ga302ec977b0c0c3ea245b6c9275495355',1,'glm']]],\n  ['i8vec1',['i8vec1',['../a00304.html#ga7e80d927ff0a3861ced68dfff8a4020b',1,'glm']]],\n  ['i8vec2',['i8vec2',['../a00304.html#gad06935764d78f43f9d542c784c2212ec',1,'glm']]],\n  ['i8vec3',['i8vec3',['../a00304.html#ga5a08d36cf7917cd19d081a603d0eae3e',1,'glm']]],\n  ['i8vec4',['i8vec4',['../a00304.html#ga4177a44206121dabc8c4ff1c0f544574',1,'glm']]],\n  ['imat2',['imat2',['../a00294.html#gaabe04f9948d4a213bb1c20137de03e01',1,'glm']]],\n  ['imat2x2',['imat2x2',['../a00294.html#gaa4732a240522ad9bc28144fda2fc14ec',1,'glm']]],\n  ['imat2x3',['imat2x3',['../a00294.html#ga3f42dd3d5d94a0fd5706f7ec8dd0c605',1,'glm']]],\n  ['imat2x4',['imat2x4',['../a00294.html#ga9d8faafdca42583d67e792dd038fc668',1,'glm']]],\n  ['imat3',['imat3',['../a00294.html#ga038f68437155ffa3c2583a15264a8195',1,'glm']]],\n  ['imat3x2',['imat3x2',['../a00294.html#ga7b33bbe4f12c060892bd3cc8d4cd737f',1,'glm']]],\n  ['imat3x3',['imat3x3',['../a00294.html#ga6aacc960f62e8f7d2fe9d32d5050e7a4',1,'glm']]],\n  ['imat3x4',['imat3x4',['../a00294.html#ga6e9ce23496d8b08dfc302d4039694b58',1,'glm']]],\n  ['imat4',['imat4',['../a00294.html#ga96b0d26a33b81bb6a60ca0f39682f7eb',1,'glm']]],\n  ['imat4x2',['imat4x2',['../a00294.html#ga8ce7ef51d8b2c1901fa5414deccbc3fa',1,'glm']]],\n  ['imat4x3',['imat4x3',['../a00294.html#ga705ee0bf49d6c3de4404ce2481bf0df5',1,'glm']]],\n  ['imat4x4',['imat4x4',['../a00294.html#ga43ed5e4f475b6f4cad7cba78f29c405b',1,'glm']]],\n  ['int1',['int1',['../a00315.html#ga0670a2111b5e4a6410bd027fa0232fc3',1,'glm']]],\n  ['int16',['int16',['../a00260.html#ga259fa4834387bd68627ddf37bb3ebdb9',1,'glm']]],\n  ['int16_5ft',['int16_t',['../a00304.html#gae8f5e3e964ca2ae240adc2c0d74adede',1,'glm']]],\n  ['int1x1',['int1x1',['../a00315.html#ga056ffe02d3a45af626f8e62221881c7a',1,'glm']]],\n  ['int2',['int2',['../a00315.html#gafe3a8fd56354caafe24bfe1b1e3ad22a',1,'glm']]],\n  ['int2x2',['int2x2',['../a00315.html#ga4e5ce477c15836b21e3c42daac68554d',1,'glm']]],\n  ['int2x3',['int2x3',['../a00315.html#ga197ded5ad8354f6b6fb91189d7a269b3',1,'glm']]],\n  ['int2x4',['int2x4',['../a00315.html#ga2749d59a7fddbac44f34ba78e57ef807',1,'glm']]],\n  ['int3',['int3',['../a00315.html#ga909c38a425f215a50c847145d7da09f0',1,'glm']]],\n  ['int32',['int32',['../a00260.html#ga43d43196463bde49cb067f5c20ab8481',1,'glm']]],\n  ['int32_5ft',['int32_t',['../a00304.html#ga042ef09ff2f0cb24a36f541bcb3a3710',1,'glm']]],\n  ['int3x2',['int3x2',['../a00315.html#gaa4cbe16a92cf3664376c7a2fc5126aa8',1,'glm']]],\n  ['int3x3',['int3x3',['../a00315.html#ga15c9649286f0bf431bdf9b3509580048',1,'glm']]],\n  ['int3x4',['int3x4',['../a00315.html#gaacac46ddc7d15d0f9529d05c92946a0f',1,'glm']]],\n  ['int4',['int4',['../a00315.html#gaecdef18c819c205aeee9f94dc93de56a',1,'glm']]],\n  ['int4x2',['int4x2',['../a00315.html#ga97a39dd9bc7d572810d80b8467cbffa1',1,'glm']]],\n  ['int4x3',['int4x3',['../a00315.html#gae4a2c53f14aeec9a17c2b81142b7e82d',1,'glm']]],\n  ['int4x4',['int4x4',['../a00315.html#ga04dee1552424198b8f58b377c2ee00d8',1,'glm']]],\n  ['int64',['int64',['../a00260.html#gaff5189f97f9e842d9636a0f240001b2e',1,'glm']]],\n  ['int64_5ft',['int64_t',['../a00304.html#ga322a7d7d2c2c68994dc872a33de63c61',1,'glm']]],\n  ['int8',['int8',['../a00260.html#ga1b956fe1df85f3c132b21edb4e116458',1,'glm']]],\n  ['int8_5ft',['int8_t',['../a00304.html#ga4bf09d8838a86866b39ee6e109341645',1,'glm']]],\n  ['ivec1',['ivec1',['../a00272.html#gaedd0562c2e77714929d7723a7e2e0dba',1,'glm']]],\n  ['ivec2',['ivec2',['../a00281.html#ga6f9269106d91b2d2b91bcf27cd5f5560',1,'glm']]],\n  ['ivec3',['ivec3',['../a00281.html#gad0d784d8eee201aca362484d2daee46c',1,'glm']]],\n  ['ivec4',['ivec4',['../a00281.html#ga5abb4603dae0ce58c595e66d9123d812',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_6.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_6.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_6.js",
    "content": "var searchData=\n[\n  ['lowp_5fbvec1',['lowp_bvec1',['../a00266.html#ga24a3d364e2ddd444f5b9e7975bbef8f9',1,'glm']]],\n  ['lowp_5fbvec2',['lowp_bvec2',['../a00282.html#ga5a5452140650988b94d5716e4d872465',1,'glm']]],\n  ['lowp_5fbvec3',['lowp_bvec3',['../a00282.html#ga79e0922a977662a8fd39d7829be3908b',1,'glm']]],\n  ['lowp_5fbvec4',['lowp_bvec4',['../a00282.html#ga15ac87724048ab7169bb5d3572939dd3',1,'glm']]],\n  ['lowp_5fddualquat',['lowp_ddualquat',['../a00317.html#gab4c5103338af3dac7e0fbc86895a3f1a',1,'glm']]],\n  ['lowp_5fdmat2',['lowp_dmat2',['../a00284.html#gad8e2727a6e7aa68280245bb0022118e1',1,'glm']]],\n  ['lowp_5fdmat2x2',['lowp_dmat2x2',['../a00284.html#gac61b94f5d9775f83f321bac899322fe2',1,'glm']]],\n  ['lowp_5fdmat2x3',['lowp_dmat2x3',['../a00284.html#gaf6bf2f5bde7ad5b9c289f777b93094af',1,'glm']]],\n  ['lowp_5fdmat2x4',['lowp_dmat2x4',['../a00284.html#ga97507a31ecee8609887d0f23bbde92c7',1,'glm']]],\n  ['lowp_5fdmat3',['lowp_dmat3',['../a00284.html#ga0cab80beee64a5f8d2ae4e823983063a',1,'glm']]],\n  ['lowp_5fdmat3x2',['lowp_dmat3x2',['../a00284.html#ga1e0ea3fba496bc7c6f620d2590acb66b',1,'glm']]],\n  ['lowp_5fdmat3x3',['lowp_dmat3x3',['../a00284.html#gac017848a9df570f60916a21a297b1e8e',1,'glm']]],\n  ['lowp_5fdmat3x4',['lowp_dmat3x4',['../a00284.html#ga93add35d2a44c5830978b827e8c295e8',1,'glm']]],\n  ['lowp_5fdmat4',['lowp_dmat4',['../a00284.html#ga708bc5b91bbfedd21debac8dcf2a64cd',1,'glm']]],\n  ['lowp_5fdmat4x2',['lowp_dmat4x2',['../a00284.html#ga382dc5295cead78766239a8457abfa98',1,'glm']]],\n  ['lowp_5fdmat4x3',['lowp_dmat4x3',['../a00284.html#ga3d7ea07da7c6e5c81a3f4c8b3d44056e',1,'glm']]],\n  ['lowp_5fdmat4x4',['lowp_dmat4x4',['../a00284.html#ga5b0413198b7e9f061f7534a221c9dac9',1,'glm']]],\n  ['lowp_5fdquat',['lowp_dquat',['../a00250.html#ga9e6e5f42e67dd5877350ba485c191f1c',1,'glm']]],\n  ['lowp_5fdualquat',['lowp_dualquat',['../a00317.html#gade05d29ebd4deea0f883d0e1bb4169aa',1,'glm']]],\n  ['lowp_5fdvec1',['lowp_dvec1',['../a00269.html#gaf906eb86b6e96c35138d0e4928e1435a',1,'glm']]],\n  ['lowp_5fdvec2',['lowp_dvec2',['../a00282.html#ga108086730d086b7f6f7a033955dfb9c3',1,'glm']]],\n  ['lowp_5fdvec3',['lowp_dvec3',['../a00282.html#ga42c518b2917e19ce6946a84c64a3a4b2',1,'glm']]],\n  ['lowp_5fdvec4',['lowp_dvec4',['../a00282.html#ga0b4432cb8d910e406576d10d802e190d',1,'glm']]],\n  ['lowp_5ff32',['lowp_f32',['../a00304.html#gaeea53879fc327293cf3352a409b7867b',1,'glm']]],\n  ['lowp_5ff32mat2',['lowp_f32mat2',['../a00304.html#ga52409bc6d4a2ce3421526c069220d685',1,'glm']]],\n  ['lowp_5ff32mat2x2',['lowp_f32mat2x2',['../a00304.html#ga1d091b6abfba1772450e1745a06525bc',1,'glm']]],\n  ['lowp_5ff32mat2x3',['lowp_f32mat2x3',['../a00304.html#ga961ccb34cd1a5654c772c8709e001dc5',1,'glm']]],\n  ['lowp_5ff32mat2x4',['lowp_f32mat2x4',['../a00304.html#gacc6bf0209dda0c7c14851a646071c974',1,'glm']]],\n  ['lowp_5ff32mat3',['lowp_f32mat3',['../a00304.html#ga4187f89f196505b40e63f516139511e5',1,'glm']]],\n  ['lowp_5ff32mat3x2',['lowp_f32mat3x2',['../a00304.html#gac53f9d7ab04eace67adad026092fb1e8',1,'glm']]],\n  ['lowp_5ff32mat3x3',['lowp_f32mat3x3',['../a00304.html#ga841211b641cff1fcf861bdb14e5e4abc',1,'glm']]],\n  ['lowp_5ff32mat3x4',['lowp_f32mat3x4',['../a00304.html#ga21b1b22dec013a72656e3644baf8a1e1',1,'glm']]],\n  ['lowp_5ff32mat4',['lowp_f32mat4',['../a00304.html#ga766aed2871e6173a81011a877f398f04',1,'glm']]],\n  ['lowp_5ff32mat4x2',['lowp_f32mat4x2',['../a00304.html#gae6f3fcb702a666de07650c149cfa845a',1,'glm']]],\n  ['lowp_5ff32mat4x3',['lowp_f32mat4x3',['../a00304.html#gac21eda58a1475449a5709b412ebd776c',1,'glm']]],\n  ['lowp_5ff32mat4x4',['lowp_f32mat4x4',['../a00304.html#ga4143d129898f91545948c46859adce44',1,'glm']]],\n  ['lowp_5ff32quat',['lowp_f32quat',['../a00304.html#gaa3ba60ef8f69c6aeb1629594eaa95347',1,'glm']]],\n  ['lowp_5ff32vec1',['lowp_f32vec1',['../a00304.html#ga43e5b41c834fcaf4db5a831c0e28128e',1,'glm']]],\n  ['lowp_5ff32vec2',['lowp_f32vec2',['../a00304.html#gaf3b694b2b8ded7e0b9f07b061917e1a0',1,'glm']]],\n  ['lowp_5ff32vec3',['lowp_f32vec3',['../a00304.html#gaf739a2cd7b81783a43148b53e40d983b',1,'glm']]],\n  ['lowp_5ff32vec4',['lowp_f32vec4',['../a00304.html#ga4e2e1debe022074ab224c9faf856d374',1,'glm']]],\n  ['lowp_5ff64',['lowp_f64',['../a00304.html#gabc7a97c07cbfac8e35eb5e63beb4b679',1,'glm']]],\n  ['lowp_5ff64mat2',['lowp_f64mat2',['../a00304.html#gafc730f6b4242763b0eda0ffa25150292',1,'glm']]],\n  ['lowp_5ff64mat2x2',['lowp_f64mat2x2',['../a00304.html#ga771fda9109933db34f808d92b9b84d7e',1,'glm']]],\n  ['lowp_5ff64mat2x3',['lowp_f64mat2x3',['../a00304.html#ga39e90adcffe33264bd608fa9c6bd184b',1,'glm']]],\n  ['lowp_5ff64mat2x4',['lowp_f64mat2x4',['../a00304.html#ga50265a202fbfe0a25fc70066c31d9336',1,'glm']]],\n  ['lowp_5ff64mat3',['lowp_f64mat3',['../a00304.html#ga58119a41d143ebaea0df70fe882e8a40',1,'glm']]],\n  ['lowp_5ff64mat3x2',['lowp_f64mat3x2',['../a00304.html#gab0eb2d65514ee3e49905aa2caad8c0ad',1,'glm']]],\n  ['lowp_5ff64mat3x3',['lowp_f64mat3x3',['../a00304.html#gac8f8a12ee03105ef8861dc652434e3b7',1,'glm']]],\n  ['lowp_5ff64mat3x4',['lowp_f64mat3x4',['../a00304.html#gade8d1edfb23996ab6c622e65e3893271',1,'glm']]],\n  ['lowp_5ff64mat4',['lowp_f64mat4',['../a00304.html#ga7451266e67794bd1125163502bc4a570',1,'glm']]],\n  ['lowp_5ff64mat4x2',['lowp_f64mat4x2',['../a00304.html#gab0cecb80fd106bc369b9e46a165815ce',1,'glm']]],\n  ['lowp_5ff64mat4x3',['lowp_f64mat4x3',['../a00304.html#gae731613b25db3a5ef5a05d21e57a57d3',1,'glm']]],\n  ['lowp_5ff64mat4x4',['lowp_f64mat4x4',['../a00304.html#ga8c9cd734e03cd49674f3e287aa4a6f95',1,'glm']]],\n  ['lowp_5ff64quat',['lowp_f64quat',['../a00304.html#gaa3ee2bc4af03cc06578b66b3e3f878ae',1,'glm']]],\n  ['lowp_5ff64vec1',['lowp_f64vec1',['../a00304.html#gaf2d02c5f4d59135b9bc524fe317fd26b',1,'glm']]],\n  ['lowp_5ff64vec2',['lowp_f64vec2',['../a00304.html#ga4e641a54d70c81eabf56c25c966d04bd',1,'glm']]],\n  ['lowp_5ff64vec3',['lowp_f64vec3',['../a00304.html#gae7a4711107b7d078fc5f03ce2227b90b',1,'glm']]],\n  ['lowp_5ff64vec4',['lowp_f64vec4',['../a00304.html#gaa666bb9e6d204d3bea0b3a39a3a335f4',1,'glm']]],\n  ['lowp_5ffdualquat',['lowp_fdualquat',['../a00317.html#gaa38f671be25a7f3b136a452a8bb42860',1,'glm']]],\n  ['lowp_5ffloat32',['lowp_float32',['../a00304.html#ga41b0d390bd8cc827323b1b3816ff4bf8',1,'glm']]],\n  ['lowp_5ffloat32_5ft',['lowp_float32_t',['../a00304.html#gaea881cae4ddc6c0fbf7cc5b08177ca5b',1,'glm']]],\n  ['lowp_5ffloat64',['lowp_float64',['../a00304.html#ga3714dab2c16a6545a405cb0c3b3aaa6f',1,'glm']]],\n  ['lowp_5ffloat64_5ft',['lowp_float64_t',['../a00304.html#ga7286a37076a09da140df18bfa75d4e38',1,'glm']]],\n  ['lowp_5ffmat2',['lowp_fmat2',['../a00304.html#ga5bba0ce31210e274f73efacd3364c03f',1,'glm']]],\n  ['lowp_5ffmat2x2',['lowp_fmat2x2',['../a00304.html#gab0feb11edd0d3ab3e8ed996d349a5066',1,'glm']]],\n  ['lowp_5ffmat2x3',['lowp_fmat2x3',['../a00304.html#ga71cdb53801ed4c3aadb3603c04723210',1,'glm']]],\n  ['lowp_5ffmat2x4',['lowp_fmat2x4',['../a00304.html#gaab217601c74974a84acbca428123ecf7',1,'glm']]],\n  ['lowp_5ffmat3',['lowp_fmat3',['../a00304.html#ga83079315e230e8f39728f4bf0d2f9a9b',1,'glm']]],\n  ['lowp_5ffmat3x2',['lowp_fmat3x2',['../a00304.html#ga49b98e7d71804af45d86886a489e633c',1,'glm']]],\n  ['lowp_5ffmat3x3',['lowp_fmat3x3',['../a00304.html#gaba56275dd04a7a61560b0e8fa5d365b4',1,'glm']]],\n  ['lowp_5ffmat3x4',['lowp_fmat3x4',['../a00304.html#ga28733aec7288191b314d42154fd0b690',1,'glm']]],\n  ['lowp_5ffmat4',['lowp_fmat4',['../a00304.html#ga5803cb9ae26399762d8bba9e0b2fc09f',1,'glm']]],\n  ['lowp_5ffmat4x2',['lowp_fmat4x2',['../a00304.html#ga5868c2dcce41cc3ea5edcaeae239f62c',1,'glm']]],\n  ['lowp_5ffmat4x3',['lowp_fmat4x3',['../a00304.html#ga5e649bbdb135fbcb4bfe950f4c73a444',1,'glm']]],\n  ['lowp_5ffmat4x4',['lowp_fmat4x4',['../a00304.html#gac2f5263708ac847b361a9841e74ddf9f',1,'glm']]],\n  ['lowp_5ffvec1',['lowp_fvec1',['../a00304.html#ga346b2336fff168a7e0df1583aae3e5a5',1,'glm']]],\n  ['lowp_5ffvec2',['lowp_fvec2',['../a00304.html#ga62a32c31f4e2e8ca859663b6e3289a2d',1,'glm']]],\n  ['lowp_5ffvec3',['lowp_fvec3',['../a00304.html#ga40b5c557efebb5bb99d6b9aa81095afa',1,'glm']]],\n  ['lowp_5ffvec4',['lowp_fvec4',['../a00304.html#ga755484ffbe39ae3db2875953ed04e7b7',1,'glm']]],\n  ['lowp_5fi16',['lowp_i16',['../a00304.html#ga392b673fd10847bfb78fb808c6cf8ff7',1,'glm']]],\n  ['lowp_5fi16vec1',['lowp_i16vec1',['../a00304.html#ga501a2f313f1c220eef4ab02bdabdc3c6',1,'glm']]],\n  ['lowp_5fi16vec2',['lowp_i16vec2',['../a00304.html#ga7cac84b520a6b57f2fbd880d3d63c51b',1,'glm']]],\n  ['lowp_5fi16vec3',['lowp_i16vec3',['../a00304.html#gab69ef9cbc2a9214bf5596c528c801b72',1,'glm']]],\n  ['lowp_5fi16vec4',['lowp_i16vec4',['../a00304.html#ga1d47d94d17c2406abdd1f087a816e387',1,'glm']]],\n  ['lowp_5fi32',['lowp_i32',['../a00304.html#ga7ff73a45cea9613ebf1a9fad0b9f82ac',1,'glm']]],\n  ['lowp_5fi32vec1',['lowp_i32vec1',['../a00304.html#gae31ac3608cf643ceffd6554874bec4a0',1,'glm']]],\n  ['lowp_5fi32vec2',['lowp_i32vec2',['../a00304.html#ga867a3c2d99ab369a454167d2c0a24dbd',1,'glm']]],\n  ['lowp_5fi32vec3',['lowp_i32vec3',['../a00304.html#ga5fe17c87ede1b1b4d92454cff4da076d',1,'glm']]],\n  ['lowp_5fi32vec4',['lowp_i32vec4',['../a00304.html#gac9b2eb4296ffe50a32eacca9ed932c08',1,'glm']]],\n  ['lowp_5fi64',['lowp_i64',['../a00304.html#ga354736e0c645099cd44c42fb2f87c2b8',1,'glm']]],\n  ['lowp_5fi64vec1',['lowp_i64vec1',['../a00304.html#gab0f7d875db5f3cc9f3168c5a0ed56437',1,'glm']]],\n  ['lowp_5fi64vec2',['lowp_i64vec2',['../a00304.html#gab485c48f06a4fdd6b8d58d343bb49f3c',1,'glm']]],\n  ['lowp_5fi64vec3',['lowp_i64vec3',['../a00304.html#ga5cb1dc9e8d300c2cdb0d7ff2308fa36c',1,'glm']]],\n  ['lowp_5fi64vec4',['lowp_i64vec4',['../a00304.html#gabb4229a4c1488bf063eed0c45355bb9c',1,'glm']]],\n  ['lowp_5fi8',['lowp_i8',['../a00304.html#ga552a6bde5e75984efb0f863278da2e54',1,'glm']]],\n  ['lowp_5fi8vec1',['lowp_i8vec1',['../a00304.html#ga036d6c7ca9fbbdc5f3871bfcb937c85c',1,'glm']]],\n  ['lowp_5fi8vec2',['lowp_i8vec2',['../a00304.html#gac03e5099d27eeaa74b6016ea435a1df2',1,'glm']]],\n  ['lowp_5fi8vec3',['lowp_i8vec3',['../a00304.html#gae2f43ace6b5b33ab49516d9e40af1845',1,'glm']]],\n  ['lowp_5fi8vec4',['lowp_i8vec4',['../a00304.html#ga6d388e9b9aa1b389f0672d9c7dfc61c5',1,'glm']]],\n  ['lowp_5fimat2',['lowp_imat2',['../a00294.html#gaa0bff0be804142bb16d441aec0a7962e',1,'glm']]],\n  ['lowp_5fimat2x2',['lowp_imat2x2',['../a00294.html#ga92b95b679975d408645547ab45a8dcd8',1,'glm']]],\n  ['lowp_5fimat2x3',['lowp_imat2x3',['../a00294.html#ga8c9e7a388f8e7c52f1e6857dee8afb65',1,'glm']]],\n  ['lowp_5fimat2x4',['lowp_imat2x4',['../a00294.html#ga9cc13bd1f8dd2933e9fa31fe3f70e16e',1,'glm']]],\n  ['lowp_5fimat3',['lowp_imat3',['../a00294.html#ga69bfe668f4170379fc1f35d82b060c43',1,'glm']]],\n  ['lowp_5fimat3x2',['lowp_imat3x2',['../a00294.html#ga33db8f27491d30906cd37c0d86b3f432',1,'glm']]],\n  ['lowp_5fimat3x3',['lowp_imat3x3',['../a00294.html#ga664f061df00020048c3f8530329ace45',1,'glm']]],\n  ['lowp_5fimat3x4',['lowp_imat3x4',['../a00294.html#ga9273faab33623d944af4080befbb2c80',1,'glm']]],\n  ['lowp_5fimat4',['lowp_imat4',['../a00294.html#gad1e77f7270cad461ca4fcb4c3ec2e98c',1,'glm']]],\n  ['lowp_5fimat4x2',['lowp_imat4x2',['../a00294.html#ga26ec1a2ba08a1488f5f05336858a0f09',1,'glm']]],\n  ['lowp_5fimat4x3',['lowp_imat4x3',['../a00294.html#ga8f40483a3ae634ead8ad22272c543a33',1,'glm']]],\n  ['lowp_5fimat4x4',['lowp_imat4x4',['../a00294.html#gaf65677e53ac8e31a107399340d5e2451',1,'glm']]],\n  ['lowp_5fint16',['lowp_int16',['../a00304.html#ga698e36b01167fc0f037889334dce8def',1,'glm']]],\n  ['lowp_5fint16_5ft',['lowp_int16_t',['../a00304.html#ga8b2cd8d31eb345b2d641d9261c38db1a',1,'glm']]],\n  ['lowp_5fint32',['lowp_int32',['../a00304.html#ga864aabca5f3296e176e0c3ed9cc16b02',1,'glm']]],\n  ['lowp_5fint32_5ft',['lowp_int32_t',['../a00304.html#ga0350631d35ff800e6133ac6243b13cbc',1,'glm']]],\n  ['lowp_5fint64',['lowp_int64',['../a00304.html#gaf645b1a60203b39c0207baff5e3d8c3c',1,'glm']]],\n  ['lowp_5fint64_5ft',['lowp_int64_t',['../a00304.html#gaebf341fc4a5be233f7dde962c2e33847',1,'glm']]],\n  ['lowp_5fint8',['lowp_int8',['../a00304.html#ga760bcf26fdb23a2c3ecad3c928a19ae6',1,'glm']]],\n  ['lowp_5fint8_5ft',['lowp_int8_t',['../a00304.html#ga119c41d73fe9977358174eb3ac1035a3',1,'glm']]],\n  ['lowp_5fivec1',['lowp_ivec1',['../a00273.html#ga836dbb1dc516c233b7f5fe9763bc15dc',1,'glm']]],\n  ['lowp_5fivec2',['lowp_ivec2',['../a00282.html#ga8433c6c1fdd80c0a83941d94aff73fa0',1,'glm']]],\n  ['lowp_5fivec3',['lowp_ivec3',['../a00282.html#gac1a86a75b3c68ebb704d7094043669d6',1,'glm']]],\n  ['lowp_5fivec4',['lowp_ivec4',['../a00282.html#ga27fc23da61859cd6356326c5f1c796de',1,'glm']]],\n  ['lowp_5fmat2',['lowp_mat2',['../a00284.html#gae400c4ce1f5f3e1fa12861b2baed331a',1,'glm']]],\n  ['lowp_5fmat2x2',['lowp_mat2x2',['../a00284.html#ga2df7cdaf9a571ce7a1b09435f502c694',1,'glm']]],\n  ['lowp_5fmat2x3',['lowp_mat2x3',['../a00284.html#ga3eee3a74d0f1de8635d846dfb29ec4bb',1,'glm']]],\n  ['lowp_5fmat2x4',['lowp_mat2x4',['../a00284.html#gade27f8324a16626cbce5d3e7da66b070',1,'glm']]],\n  ['lowp_5fmat3',['lowp_mat3',['../a00284.html#ga6271ebc85ed778ccc15458c3d86fc854',1,'glm']]],\n  ['lowp_5fmat3x2',['lowp_mat3x2',['../a00284.html#gaabf6cf90fd31efe25c94965507e98390',1,'glm']]],\n  ['lowp_5fmat3x3',['lowp_mat3x3',['../a00284.html#ga63362cb4a63fc1be7d2e49cd5d574c84',1,'glm']]],\n  ['lowp_5fmat3x4',['lowp_mat3x4',['../a00284.html#gac5fc6786688eff02904ca5e7d6960092',1,'glm']]],\n  ['lowp_5fmat4',['lowp_mat4',['../a00284.html#ga2dedee030500865267cd5851c00c139d',1,'glm']]],\n  ['lowp_5fmat4x2',['lowp_mat4x2',['../a00284.html#gafa3cdb8f24d09d761ec9ae2a4c7e5e21',1,'glm']]],\n  ['lowp_5fmat4x3',['lowp_mat4x3',['../a00284.html#ga534c3ef5c3b8fdd8656b6afc205b4b77',1,'glm']]],\n  ['lowp_5fmat4x4',['lowp_mat4x4',['../a00284.html#ga686468a9a815bd4db8cddae42a6d6b87',1,'glm']]],\n  ['lowp_5fquat',['lowp_quat',['../a00253.html#gade62c5316c1c11a79c34c00c189558eb',1,'glm']]],\n  ['lowp_5fu16',['lowp_u16',['../a00304.html#ga504ce1631cb2ac02fcf1d44d8c2aa126',1,'glm']]],\n  ['lowp_5fu16vec1',['lowp_u16vec1',['../a00304.html#gaa6aab4ee7189b86716f5d7015d43021d',1,'glm']]],\n  ['lowp_5fu16vec2',['lowp_u16vec2',['../a00304.html#ga2a7d997da9ac29cb931e35bd399f58df',1,'glm']]],\n  ['lowp_5fu16vec3',['lowp_u16vec3',['../a00304.html#gac0253db6c3d3bae1f591676307a9dd8c',1,'glm']]],\n  ['lowp_5fu16vec4',['lowp_u16vec4',['../a00304.html#gaa7f00459b9a2e5b2757e70afc0c189e1',1,'glm']]],\n  ['lowp_5fu32',['lowp_u32',['../a00304.html#ga4f072ada9552e1e480bbb3b1acde5250',1,'glm']]],\n  ['lowp_5fu32vec1',['lowp_u32vec1',['../a00304.html#gabed3be8dfdc4a0df4bf3271dbd7344c4',1,'glm']]],\n  ['lowp_5fu32vec2',['lowp_u32vec2',['../a00304.html#gaf7e286e81347011e257ee779524e73b9',1,'glm']]],\n  ['lowp_5fu32vec3',['lowp_u32vec3',['../a00304.html#gad3ad390560a671b1f676fbf03cd3aa15',1,'glm']]],\n  ['lowp_5fu32vec4',['lowp_u32vec4',['../a00304.html#ga4502885718742aa238c36a312c3f3f20',1,'glm']]],\n  ['lowp_5fu64',['lowp_u64',['../a00304.html#ga30069d1f02b19599cbfadf98c23ac6ed',1,'glm']]],\n  ['lowp_5fu64vec1',['lowp_u64vec1',['../a00304.html#ga859be7b9d3a3765c1cafc14dbcf249a6',1,'glm']]],\n  ['lowp_5fu64vec2',['lowp_u64vec2',['../a00304.html#ga581485db4ba6ddb501505ee711fd8e42',1,'glm']]],\n  ['lowp_5fu64vec3',['lowp_u64vec3',['../a00304.html#gaa4a8682bec7ec8af666ef87fae38d5d1',1,'glm']]],\n  ['lowp_5fu64vec4',['lowp_u64vec4',['../a00304.html#ga6fccc89c34045c86339f6fa781ce96de',1,'glm']]],\n  ['lowp_5fu8',['lowp_u8',['../a00304.html#ga1b09f03da7ac43055c68a349d5445083',1,'glm']]],\n  ['lowp_5fu8vec1',['lowp_u8vec1',['../a00304.html#ga4b2e0e10d8d154fec9cab50e216588ec',1,'glm']]],\n  ['lowp_5fu8vec2',['lowp_u8vec2',['../a00304.html#gae6f63fa38635431e51a8f2602f15c566',1,'glm']]],\n  ['lowp_5fu8vec3',['lowp_u8vec3',['../a00304.html#ga150dc47e31c6b8cf8461803c8d56f7bd',1,'glm']]],\n  ['lowp_5fu8vec4',['lowp_u8vec4',['../a00304.html#ga9910927f3a4d1addb3da6a82542a8287',1,'glm']]],\n  ['lowp_5fuint16',['lowp_uint16',['../a00304.html#gad68bfd9f881856fc863a6ebca0b67f78',1,'glm']]],\n  ['lowp_5fuint16_5ft',['lowp_uint16_t',['../a00304.html#ga91c4815f93177eb423362fd296a87e9f',1,'glm']]],\n  ['lowp_5fuint32',['lowp_uint32',['../a00304.html#gaa6a5b461bbf5fe20982472aa51896d4b',1,'glm']]],\n  ['lowp_5fuint32_5ft',['lowp_uint32_t',['../a00304.html#gaf1b735b4b1145174f4e4167d13778f9b',1,'glm']]],\n  ['lowp_5fuint64',['lowp_uint64',['../a00304.html#gaa212b805736a759998e312cbdd550fae',1,'glm']]],\n  ['lowp_5fuint64_5ft',['lowp_uint64_t',['../a00304.html#ga8dd3a3281ae5c970ffe0c41d538aa153',1,'glm']]],\n  ['lowp_5fuint8',['lowp_uint8',['../a00304.html#gaf49470869e9be2c059629b250619804e',1,'glm']]],\n  ['lowp_5fuint8_5ft',['lowp_uint8_t',['../a00304.html#ga667b2ece2b258be898812dc2177995d1',1,'glm']]],\n  ['lowp_5fumat2',['lowp_umat2',['../a00294.html#gaf2fba702d990437fc88ff3f3a76846ee',1,'glm']]],\n  ['lowp_5fumat2x2',['lowp_umat2x2',['../a00294.html#ga7b2e9d89745f7175051284e54c81d81c',1,'glm']]],\n  ['lowp_5fumat2x3',['lowp_umat2x3',['../a00294.html#ga3072f90fd86f17a862e21589fbb14c0f',1,'glm']]],\n  ['lowp_5fumat2x4',['lowp_umat2x4',['../a00294.html#ga8bb45fec4bd77bd81b4ae7eb961a270d',1,'glm']]],\n  ['lowp_5fumat3',['lowp_umat3',['../a00294.html#gaf1145f72bcdd590f5808c4bc170c2924',1,'glm']]],\n  ['lowp_5fumat3x2',['lowp_umat3x2',['../a00294.html#ga56ea68c6a6cba8d8c21d17bb14e69c6b',1,'glm']]],\n  ['lowp_5fumat3x3',['lowp_umat3x3',['../a00294.html#ga4f660a39a395cc14f018f985e7dfbeb5',1,'glm']]],\n  ['lowp_5fumat3x4',['lowp_umat3x4',['../a00294.html#gaec3d624306bd59649f021864709d56b5',1,'glm']]],\n  ['lowp_5fumat4',['lowp_umat4',['../a00294.html#gac092c6105827bf9ea080db38074b78eb',1,'glm']]],\n  ['lowp_5fumat4x2',['lowp_umat4x2',['../a00294.html#ga7716c2b210d141846f1ac4e774adef5e',1,'glm']]],\n  ['lowp_5fumat4x3',['lowp_umat4x3',['../a00294.html#ga09ab33a2636f5f43f7fae29cfbc20fff',1,'glm']]],\n  ['lowp_5fumat4x4',['lowp_umat4x4',['../a00294.html#ga10aafc66cf1a0ece336b1c5ae13d0cc0',1,'glm']]],\n  ['lowp_5fuvec1',['lowp_uvec1',['../a00277.html#ga8bf3fc8a7863d140f48b29341c750402',1,'glm']]],\n  ['lowp_5fuvec2',['lowp_uvec2',['../a00282.html#ga752ee45136011301b64afd8c310c47a4',1,'glm']]],\n  ['lowp_5fuvec3',['lowp_uvec3',['../a00282.html#ga7b2efbdd6bdc2f8250c57f3e5dc9a292',1,'glm']]],\n  ['lowp_5fuvec4',['lowp_uvec4',['../a00282.html#ga5e6a632ec1165cf9f54ceeaa5e9b2b1e',1,'glm']]],\n  ['lowp_5fvec1',['lowp_vec1',['../a00271.html#ga0a57630f03031706b1d26a7d70d9184c',1,'glm']]],\n  ['lowp_5fvec2',['lowp_vec2',['../a00282.html#ga30e8baef5d56d5c166872a2bc00f36e9',1,'glm']]],\n  ['lowp_5fvec3',['lowp_vec3',['../a00282.html#ga868e8e4470a3ef97c7ee3032bf90dc79',1,'glm']]],\n  ['lowp_5fvec4',['lowp_vec4',['../a00282.html#gace3acb313c800552a9411953eb8b2ed7',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_7.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_7.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_7.js",
    "content": "var searchData=\n[\n  ['mat2',['mat2',['../a00283.html#ga8dd59e7fc6913ac5d61b86553e9148ba',1,'glm']]],\n  ['mat2x2',['mat2x2',['../a00283.html#gaaa17ef6bfa4e4f2692348b1460c8efcb',1,'glm']]],\n  ['mat2x3',['mat2x3',['../a00283.html#ga493ab21243abe564b3f7d381e677d29a',1,'glm']]],\n  ['mat2x4',['mat2x4',['../a00283.html#ga8e879b57ddd81e5bf5a88929844e8b40',1,'glm']]],\n  ['mat3',['mat3',['../a00283.html#gaefb0fc7a4960b782c18708bb6b655262',1,'glm']]],\n  ['mat3x2',['mat3x2',['../a00280.html#ga2c27aea32de57d58aec8e92d5d2181e2',1,'glm']]],\n  ['mat3x3',['mat3x3',['../a00283.html#gab91887d7565059dac640e3a1921c914a',1,'glm']]],\n  ['mat3x4',['mat3x4',['../a00283.html#gaf991cad0b34f64e33af186326dbc4d66',1,'glm']]],\n  ['mat4',['mat4',['../a00283.html#ga0db98d836c5549d31cf64ecd043b7af7',1,'glm']]],\n  ['mat4x2',['mat4x2',['../a00283.html#gad941c947ad6cdd117a0e8554a4754983',1,'glm']]],\n  ['mat4x3',['mat4x3',['../a00283.html#gac7574544bb94777bdbd2eb224eb72fd0',1,'glm']]],\n  ['mat4x4',['mat4x4',['../a00283.html#gab2d35cc2655f44d60958d60a1de34e81',1,'glm']]],\n  ['mediump_5fbvec1',['mediump_bvec1',['../a00266.html#ga7b4ccb989ba179fa44f7b0879c782621',1,'glm']]],\n  ['mediump_5fbvec2',['mediump_bvec2',['../a00282.html#ga1e743764869efa9223c2bcefccedaddc',1,'glm']]],\n  ['mediump_5fbvec3',['mediump_bvec3',['../a00282.html#ga50c783c25082882ef00fe2e5cddba4aa',1,'glm']]],\n  ['mediump_5fbvec4',['mediump_bvec4',['../a00282.html#ga0be2c682258604a35004f088782a9645',1,'glm']]],\n  ['mediump_5fddualquat',['mediump_ddualquat',['../a00317.html#ga0fb11e48e2d16348ccb06a25213641b4',1,'glm']]],\n  ['mediump_5fdmat2',['mediump_dmat2',['../a00284.html#ga6205fd19be355600334edef6af0b27cb',1,'glm']]],\n  ['mediump_5fdmat2x2',['mediump_dmat2x2',['../a00284.html#ga51dc36a7719cb458fa5114831c20d64f',1,'glm']]],\n  ['mediump_5fdmat2x3',['mediump_dmat2x3',['../a00284.html#ga741e05adf1f12d5d913f67088db1009a',1,'glm']]],\n  ['mediump_5fdmat2x4',['mediump_dmat2x4',['../a00284.html#ga685bda24922d112786af385deb4deb43',1,'glm']]],\n  ['mediump_5fdmat3',['mediump_dmat3',['../a00284.html#ga939fbf9c53008a8e84c7dd7cf8de29e2',1,'glm']]],\n  ['mediump_5fdmat3x2',['mediump_dmat3x2',['../a00284.html#ga2076157df85e49b8c021e03e46a376c1',1,'glm']]],\n  ['mediump_5fdmat3x3',['mediump_dmat3x3',['../a00284.html#ga47bd2aae4701ee2fc865674a9df3d7a6',1,'glm']]],\n  ['mediump_5fdmat3x4',['mediump_dmat3x4',['../a00284.html#ga3a132bd05675c2e46556f67cf738600b',1,'glm']]],\n  ['mediump_5fdmat4',['mediump_dmat4',['../a00284.html#gaf650bc667bf2a0e496b5a9182bc8d378',1,'glm']]],\n  ['mediump_5fdmat4x2',['mediump_dmat4x2',['../a00284.html#gae220fa4c5a7b13ef2ab0420340de645c',1,'glm']]],\n  ['mediump_5fdmat4x3',['mediump_dmat4x3',['../a00284.html#ga43ef60e4d996db15c9c8f069a96ff763',1,'glm']]],\n  ['mediump_5fdmat4x4',['mediump_dmat4x4',['../a00284.html#ga5389b3ab32dc0d72bea00057ab6d1dd3',1,'glm']]],\n  ['mediump_5fdquat',['mediump_dquat',['../a00250.html#gacdf73b1f7fd8f5a0c79a3934e99c1a14',1,'glm']]],\n  ['mediump_5fdualquat',['mediump_dualquat',['../a00317.html#gaa7aeb54c167712b38f2178a1be2360ad',1,'glm']]],\n  ['mediump_5fdvec1',['mediump_dvec1',['../a00269.html#ga79a789ebb176b37a45848f7ccdd3b3dd',1,'glm']]],\n  ['mediump_5fdvec2',['mediump_dvec2',['../a00282.html#ga2f4f6e9a69a0281d06940fd0990cafc3',1,'glm']]],\n  ['mediump_5fdvec3',['mediump_dvec3',['../a00282.html#ga61c3b1dff4ec7c878af80503141b9f37',1,'glm']]],\n  ['mediump_5fdvec4',['mediump_dvec4',['../a00282.html#ga23a8bca00914a51542bfea13a4778186',1,'glm']]],\n  ['mediump_5ff32',['mediump_f32',['../a00304.html#ga3b27fcd9eaa2757f0aaf6b0ce0d85c80',1,'glm']]],\n  ['mediump_5ff32mat2',['mediump_f32mat2',['../a00304.html#gaf9020c6176a75bc84828ab01ea7dac25',1,'glm']]],\n  ['mediump_5ff32mat2x2',['mediump_f32mat2x2',['../a00304.html#gaa3ca74a44102035b3ffb5c9c52dfdd3f',1,'glm']]],\n  ['mediump_5ff32mat2x3',['mediump_f32mat2x3',['../a00304.html#gad4cc829ab1ad3e05ac0a24828a3c95cf',1,'glm']]],\n  ['mediump_5ff32mat2x4',['mediump_f32mat2x4',['../a00304.html#gae71445ac6cd0b9fba3e5c905cd030fb1',1,'glm']]],\n  ['mediump_5ff32mat3',['mediump_f32mat3',['../a00304.html#gaaaf878d0d7bfc0aac054fe269a886ca8',1,'glm']]],\n  ['mediump_5ff32mat3x2',['mediump_f32mat3x2',['../a00304.html#gaaab39454f56cf9fc6d940358ce5e6a0f',1,'glm']]],\n  ['mediump_5ff32mat3x3',['mediump_f32mat3x3',['../a00304.html#gacd80ad7640e9e32f2edcb8330b1ffe4f',1,'glm']]],\n  ['mediump_5ff32mat3x4',['mediump_f32mat3x4',['../a00304.html#ga8df705d775b776f5ae6b39e2ab892899',1,'glm']]],\n  ['mediump_5ff32mat4',['mediump_f32mat4',['../a00304.html#ga4491baaebbc46a20f1cb5da985576bf4',1,'glm']]],\n  ['mediump_5ff32mat4x2',['mediump_f32mat4x2',['../a00304.html#gab005efe0fa4de1a928e8ddec4bc2c43f',1,'glm']]],\n  ['mediump_5ff32mat4x3',['mediump_f32mat4x3',['../a00304.html#gade108f16633cf95fa500b5b8c36c8b00',1,'glm']]],\n  ['mediump_5ff32mat4x4',['mediump_f32mat4x4',['../a00304.html#ga936e95b881ecd2d109459ca41913fa99',1,'glm']]],\n  ['mediump_5ff32quat',['mediump_f32quat',['../a00304.html#gaa40c03d52dbfbfaf03e75773b9606ff3',1,'glm']]],\n  ['mediump_5ff32vec1',['mediump_f32vec1',['../a00304.html#gabb33cab7d7c74cc14aa95455d0690865',1,'glm']]],\n  ['mediump_5ff32vec2',['mediump_f32vec2',['../a00304.html#gad6eb11412a3161ca8dc1d63b2a307c4b',1,'glm']]],\n  ['mediump_5ff32vec3',['mediump_f32vec3',['../a00304.html#ga062ffef2973bd8241df993c3b30b327c',1,'glm']]],\n  ['mediump_5ff32vec4',['mediump_f32vec4',['../a00304.html#gad80c84bcd5f585840faa6179f6fd446c',1,'glm']]],\n  ['mediump_5ff64',['mediump_f64',['../a00304.html#ga6d40381d78472553f878f66e443feeef',1,'glm']]],\n  ['mediump_5ff64mat2',['mediump_f64mat2',['../a00304.html#gac1281da5ded55047e8892b0e1f1ae965',1,'glm']]],\n  ['mediump_5ff64mat2x2',['mediump_f64mat2x2',['../a00304.html#ga4fd527644cccbca4cb205320eab026f3',1,'glm']]],\n  ['mediump_5ff64mat2x3',['mediump_f64mat2x3',['../a00304.html#gafd9a6ebc0c7b95f5c581d00d16a17c54',1,'glm']]],\n  ['mediump_5ff64mat2x4',['mediump_f64mat2x4',['../a00304.html#gaf306dd69e53633636aee38cea79d4cb7',1,'glm']]],\n  ['mediump_5ff64mat3',['mediump_f64mat3',['../a00304.html#gad35fb67eb1d03c5a514f0bd7aed1c776',1,'glm']]],\n  ['mediump_5ff64mat3x2',['mediump_f64mat3x2',['../a00304.html#gacd926d36a72433f6cac51dd60fa13107',1,'glm']]],\n  ['mediump_5ff64mat3x3',['mediump_f64mat3x3',['../a00304.html#ga84d88a6e3a54ccd2b67e195af4a4c23e',1,'glm']]],\n  ['mediump_5ff64mat3x4',['mediump_f64mat3x4',['../a00304.html#gad38c544d332b8c4bd0b70b1bd9feccc2',1,'glm']]],\n  ['mediump_5ff64mat4',['mediump_f64mat4',['../a00304.html#gaa805ef691c711dc41e2776cfb67f5cf5',1,'glm']]],\n  ['mediump_5ff64mat4x2',['mediump_f64mat4x2',['../a00304.html#ga17d36f0ea22314117e1cec9594b33945',1,'glm']]],\n  ['mediump_5ff64mat4x3',['mediump_f64mat4x3',['../a00304.html#ga54697a78f9a4643af6a57fc2e626ec0d',1,'glm']]],\n  ['mediump_5ff64mat4x4',['mediump_f64mat4x4',['../a00304.html#ga66edb8de17b9235029472f043ae107e9',1,'glm']]],\n  ['mediump_5ff64quat',['mediump_f64quat',['../a00304.html#ga5e52f485059ce6e3010c590b882602c9',1,'glm']]],\n  ['mediump_5ff64vec1',['mediump_f64vec1',['../a00304.html#gac30fdf8afa489400053275b6a3350127',1,'glm']]],\n  ['mediump_5ff64vec2',['mediump_f64vec2',['../a00304.html#ga8ebc04ecf6440c4ee24718a16600ce6b',1,'glm']]],\n  ['mediump_5ff64vec3',['mediump_f64vec3',['../a00304.html#ga461c4c7d0757404dd0dba931760b25cf',1,'glm']]],\n  ['mediump_5ff64vec4',['mediump_f64vec4',['../a00304.html#gacfea053bd6bb3eddb996a4f94de22a3e',1,'glm']]],\n  ['mediump_5ffdualquat',['mediump_fdualquat',['../a00317.html#ga4a6b594ff7e81150d8143001367a9431',1,'glm']]],\n  ['mediump_5ffloat32',['mediump_float32',['../a00304.html#ga7812bf00676fb1a86dcd62cca354d2c7',1,'glm']]],\n  ['mediump_5ffloat32_5ft',['mediump_float32_t',['../a00304.html#gae4dee61f8fe1caccec309fbed02faf12',1,'glm']]],\n  ['mediump_5ffloat64',['mediump_float64',['../a00304.html#gab83d8aae6e4f115e97a785e8574a115f',1,'glm']]],\n  ['mediump_5ffloat64_5ft',['mediump_float64_t',['../a00304.html#gac61843e4fa96c1f4e9d8316454f32a8e',1,'glm']]],\n  ['mediump_5ffmat2',['mediump_fmat2',['../a00304.html#ga74e9133378fd0b4da8ac0bc0876702ff',1,'glm']]],\n  ['mediump_5ffmat2x2',['mediump_fmat2x2',['../a00304.html#ga98a687c17b174ea316b5f397b64f44bc',1,'glm']]],\n  ['mediump_5ffmat2x3',['mediump_fmat2x3',['../a00304.html#gaa03f939d90d5ef157df957d93f0b9a64',1,'glm']]],\n  ['mediump_5ffmat2x4',['mediump_fmat2x4',['../a00304.html#ga35223623e9ccebd8a281873b71b7d213',1,'glm']]],\n  ['mediump_5ffmat3',['mediump_fmat3',['../a00304.html#ga80823dfad5dba98512c76af498343847',1,'glm']]],\n  ['mediump_5ffmat3x2',['mediump_fmat3x2',['../a00304.html#ga42569e5b92f8635cedeadb1457ee1467',1,'glm']]],\n  ['mediump_5ffmat3x3',['mediump_fmat3x3',['../a00304.html#gaa6f526388c74a66b3d52315a14d434ae',1,'glm']]],\n  ['mediump_5ffmat3x4',['mediump_fmat3x4',['../a00304.html#gaefe8ef520c6cb78590ebbefe648da4d4',1,'glm']]],\n  ['mediump_5ffmat4',['mediump_fmat4',['../a00304.html#gac1c38778c0b5a1263f07753c05a4f7b9',1,'glm']]],\n  ['mediump_5ffmat4x2',['mediump_fmat4x2',['../a00304.html#gacea38a85893e17e6834b6cb09a9ad0cf',1,'glm']]],\n  ['mediump_5ffmat4x3',['mediump_fmat4x3',['../a00304.html#ga41ad497f7eae211556aefd783cb02b90',1,'glm']]],\n  ['mediump_5ffmat4x4',['mediump_fmat4x4',['../a00304.html#ga22e27beead07bff4d5ce9d6065a57279',1,'glm']]],\n  ['mediump_5ffvec1',['mediump_fvec1',['../a00304.html#ga367964fc2133d3f1b5b3755ff9cf6c9b',1,'glm']]],\n  ['mediump_5ffvec2',['mediump_fvec2',['../a00304.html#ga44bfa55cda5dbf53f24a1fb7610393d6',1,'glm']]],\n  ['mediump_5ffvec3',['mediump_fvec3',['../a00304.html#ga999dc6703ad16e3d3c26b74ea8083f07',1,'glm']]],\n  ['mediump_5ffvec4',['mediump_fvec4',['../a00304.html#ga1bed890513c0f50b7e7ba4f7f359dbfb',1,'glm']]],\n  ['mediump_5fi16',['mediump_i16',['../a00304.html#ga62a17cddeb4dffb4e18fe3aea23f051a',1,'glm']]],\n  ['mediump_5fi16vec1',['mediump_i16vec1',['../a00304.html#gacc44265ed440bf5e6e566782570de842',1,'glm']]],\n  ['mediump_5fi16vec2',['mediump_i16vec2',['../a00304.html#ga4b5e2c9aaa5d7717bf71179aefa12e88',1,'glm']]],\n  ['mediump_5fi16vec3',['mediump_i16vec3',['../a00304.html#ga3be6c7fc5fe08fa2274bdb001d5f2633',1,'glm']]],\n  ['mediump_5fi16vec4',['mediump_i16vec4',['../a00304.html#gaf52982bb23e3a3772649b2c5bb84b107',1,'glm']]],\n  ['mediump_5fi32',['mediump_i32',['../a00304.html#gaf5e94bf2a20af7601787c154751dc2e1',1,'glm']]],\n  ['mediump_5fi32vec1',['mediump_i32vec1',['../a00304.html#ga46a57f71e430637559097a732b550a7e',1,'glm']]],\n  ['mediump_5fi32vec2',['mediump_i32vec2',['../a00304.html#ga20bf224bd4f8a24ecc4ed2004a40c219',1,'glm']]],\n  ['mediump_5fi32vec3',['mediump_i32vec3',['../a00304.html#ga13a221b910aa9eb1b04ca1c86e81015a',1,'glm']]],\n  ['mediump_5fi32vec4',['mediump_i32vec4',['../a00304.html#ga6addd4dfee87fc09ab9525e3d07db4c8',1,'glm']]],\n  ['mediump_5fi64',['mediump_i64',['../a00304.html#ga3ebcb1f6d8d8387253de8bccb058d77f',1,'glm']]],\n  ['mediump_5fi64vec1',['mediump_i64vec1',['../a00304.html#ga8343e9d244fb17a5bbf0d94d36b3695e',1,'glm']]],\n  ['mediump_5fi64vec2',['mediump_i64vec2',['../a00304.html#ga2c94aeae3457325944ca1059b0b68330',1,'glm']]],\n  ['mediump_5fi64vec3',['mediump_i64vec3',['../a00304.html#ga8089722ffdf868cdfe721dea1fb6a90e',1,'glm']]],\n  ['mediump_5fi64vec4',['mediump_i64vec4',['../a00304.html#gabf1f16c5ab8cb0484bd1e846ae4368f1',1,'glm']]],\n  ['mediump_5fi8',['mediump_i8',['../a00304.html#gacf1ded173e1e2d049c511d095b259e21',1,'glm']]],\n  ['mediump_5fi8vec1',['mediump_i8vec1',['../a00304.html#ga85e8893f4ae3630065690a9000c0c483',1,'glm']]],\n  ['mediump_5fi8vec2',['mediump_i8vec2',['../a00304.html#ga2a8bdc32184ea0a522ef7bd90640cf67',1,'glm']]],\n  ['mediump_5fi8vec3',['mediump_i8vec3',['../a00304.html#ga6dd1c1618378c6f94d522a61c28773c9',1,'glm']]],\n  ['mediump_5fi8vec4',['mediump_i8vec4',['../a00304.html#gac7bb04fb857ef7b520e49f6c381432be',1,'glm']]],\n  ['mediump_5fimat2',['mediump_imat2',['../a00294.html#ga20f4cc7ab23e2aa1f4db9fdb5496d378',1,'glm']]],\n  ['mediump_5fimat2x2',['mediump_imat2x2',['../a00294.html#ga4b2aeb11a329940721dda9583e71f856',1,'glm']]],\n  ['mediump_5fimat2x3',['mediump_imat2x3',['../a00294.html#ga74362470ba99843ac70aee5ac38cc674',1,'glm']]],\n  ['mediump_5fimat2x4',['mediump_imat2x4',['../a00294.html#ga8da25cd380ba30fc5b68a4687deb3e09',1,'glm']]],\n  ['mediump_5fimat3',['mediump_imat3',['../a00294.html#ga6c63bdc736efd3466e0730de0251cb71',1,'glm']]],\n  ['mediump_5fimat3x2',['mediump_imat3x2',['../a00294.html#gac0b4e42d648fb3eaf4bb88da82ecc809',1,'glm']]],\n  ['mediump_5fimat3x3',['mediump_imat3x3',['../a00294.html#gad99cc2aad8fc57f068cfa7719dbbea12',1,'glm']]],\n  ['mediump_5fimat3x4',['mediump_imat3x4',['../a00294.html#ga67689a518b181a26540bc44a163525cd',1,'glm']]],\n  ['mediump_5fimat4',['mediump_imat4',['../a00294.html#gaf348552978553630d2a00b78eb887ced',1,'glm']]],\n  ['mediump_5fimat4x2',['mediump_imat4x2',['../a00294.html#ga8b2d35816f7103f0f4c82dd2f27571fc',1,'glm']]],\n  ['mediump_5fimat4x3',['mediump_imat4x3',['../a00294.html#ga5b10acc696759e03f6ab918f4467e94c',1,'glm']]],\n  ['mediump_5fimat4x4',['mediump_imat4x4',['../a00294.html#ga2596869d154dec1180beadbb9df80501',1,'glm']]],\n  ['mediump_5fint16',['mediump_int16',['../a00304.html#gadff3608baa4b5bd3ed28f95c1c2c345d',1,'glm']]],\n  ['mediump_5fint16_5ft',['mediump_int16_t',['../a00304.html#ga80e72fe94c88498537e8158ba7591c54',1,'glm']]],\n  ['mediump_5fint32',['mediump_int32',['../a00304.html#ga5244cef85d6e870e240c76428a262ae8',1,'glm']]],\n  ['mediump_5fint32_5ft',['mediump_int32_t',['../a00304.html#ga26fc7ced1ad7ca5024f1c973c8dc9180',1,'glm']]],\n  ['mediump_5fint64',['mediump_int64',['../a00304.html#ga7b968f2b86a0442a89c7359171e1d866',1,'glm']]],\n  ['mediump_5fint64_5ft',['mediump_int64_t',['../a00304.html#gac3bc41bcac61d1ba8f02a6f68ce23f64',1,'glm']]],\n  ['mediump_5fint8',['mediump_int8',['../a00304.html#ga6fbd69cbdaa44345bff923a2cf63de7e',1,'glm']]],\n  ['mediump_5fint8_5ft',['mediump_int8_t',['../a00304.html#ga6d7b3789ecb932c26430009478cac7ae',1,'glm']]],\n  ['mediump_5fivec1',['mediump_ivec1',['../a00273.html#gad628c608970b3d0aa6cfb63ce6e53e56',1,'glm']]],\n  ['mediump_5fivec2',['mediump_ivec2',['../a00282.html#gac57496299d276ed97044074097bd5e2c',1,'glm']]],\n  ['mediump_5fivec3',['mediump_ivec3',['../a00282.html#ga27cfb51e0dbe15bba27a14a8590e8466',1,'glm']]],\n  ['mediump_5fivec4',['mediump_ivec4',['../a00282.html#ga92a204c37e66ac6c1dc7ae91142f2ea5',1,'glm']]],\n  ['mediump_5fmat2',['mediump_mat2',['../a00284.html#ga745452bd9c89f5ad948203e4fb4b4ea3',1,'glm']]],\n  ['mediump_5fmat2x2',['mediump_mat2x2',['../a00284.html#ga0cdf57d29f9448864237b2fb3e39aa1d',1,'glm']]],\n  ['mediump_5fmat2x3',['mediump_mat2x3',['../a00284.html#ga497d513d552d927537d61fa11e3701ab',1,'glm']]],\n  ['mediump_5fmat2x4',['mediump_mat2x4',['../a00284.html#gae7b75ea2e09fa686a79bbe9b6ca68ee5',1,'glm']]],\n  ['mediump_5fmat3',['mediump_mat3',['../a00284.html#ga5aae49834d02732942f44e61d7bce136',1,'glm']]],\n  ['mediump_5fmat3x2',['mediump_mat3x2',['../a00284.html#ga9e1c9ee65fef547bde793e69723e24eb',1,'glm']]],\n  ['mediump_5fmat3x3',['mediump_mat3x3',['../a00284.html#gabc0f2f4ad21c90b341881cf056f8650e',1,'glm']]],\n  ['mediump_5fmat3x4',['mediump_mat3x4',['../a00284.html#gaa669c6675c3405f76c0b14020d1c0d61',1,'glm']]],\n  ['mediump_5fmat4',['mediump_mat4',['../a00284.html#gab8531bc3f269aa45835cd6e1972b7fc7',1,'glm']]],\n  ['mediump_5fmat4x2',['mediump_mat4x2',['../a00284.html#gad75706b70545412ba9ac27d5ee210f66',1,'glm']]],\n  ['mediump_5fmat4x3',['mediump_mat4x3',['../a00284.html#ga4a1440b5ea3cf84d5b06c79b534bd770',1,'glm']]],\n  ['mediump_5fmat4x4',['mediump_mat4x4',['../a00284.html#ga15bca2b70917d9752231160d9da74b01',1,'glm']]],\n  ['mediump_5fquat',['mediump_quat',['../a00253.html#gad2a59409de1bb12ccb6eb692ee7e9d8d',1,'glm']]],\n  ['mediump_5fu16',['mediump_u16',['../a00304.html#ga9df98857be695d5a30cb30f5bfa38a80',1,'glm']]],\n  ['mediump_5fu16vec1',['mediump_u16vec1',['../a00304.html#ga400ce8cc566de093a9b28e59e220d6e4',1,'glm']]],\n  ['mediump_5fu16vec2',['mediump_u16vec2',['../a00304.html#ga429c201b3e92c90b4ef4356f2be52ee1',1,'glm']]],\n  ['mediump_5fu16vec3',['mediump_u16vec3',['../a00304.html#gac9ba20234b0c3751d45ce575fc71e551',1,'glm']]],\n  ['mediump_5fu16vec4',['mediump_u16vec4',['../a00304.html#ga5793393686ce5bd2d5968ff9144762b8',1,'glm']]],\n  ['mediump_5fu32',['mediump_u32',['../a00304.html#ga1bd0e914158bf03135f8a317de6debe9',1,'glm']]],\n  ['mediump_5fu32vec1',['mediump_u32vec1',['../a00304.html#ga8a11ccd2e38f674bbf3c2d1afc232aee',1,'glm']]],\n  ['mediump_5fu32vec2',['mediump_u32vec2',['../a00304.html#ga94f74851fce338549c705b5f0d601c4f',1,'glm']]],\n  ['mediump_5fu32vec3',['mediump_u32vec3',['../a00304.html#ga012c24c8fc69707b90260474c70275a2',1,'glm']]],\n  ['mediump_5fu32vec4',['mediump_u32vec4',['../a00304.html#ga5d43ee8b5dbaa06c327b03b83682598a',1,'glm']]],\n  ['mediump_5fu64',['mediump_u64',['../a00304.html#ga2af9490085ae3bdf36a544e9dd073610',1,'glm']]],\n  ['mediump_5fu64vec1',['mediump_u64vec1',['../a00304.html#ga659f372ccb8307d5db5beca942cde5e8',1,'glm']]],\n  ['mediump_5fu64vec2',['mediump_u64vec2',['../a00304.html#ga73a08ef5a74798f3a1a99250b5f86a7d',1,'glm']]],\n  ['mediump_5fu64vec3',['mediump_u64vec3',['../a00304.html#ga1900c6ab74acd392809425953359ef52',1,'glm']]],\n  ['mediump_5fu64vec4',['mediump_u64vec4',['../a00304.html#gaec7ee455cb379ec2993e81482123e1cc',1,'glm']]],\n  ['mediump_5fu8',['mediump_u8',['../a00304.html#gad1213a22bbb9e4107f07eaa4956f8281',1,'glm']]],\n  ['mediump_5fu8vec1',['mediump_u8vec1',['../a00304.html#ga4a43050843b141bdc7e85437faef6f55',1,'glm']]],\n  ['mediump_5fu8vec2',['mediump_u8vec2',['../a00304.html#ga907f85d4a0eac3d8aaf571e5c2647194',1,'glm']]],\n  ['mediump_5fu8vec3',['mediump_u8vec3',['../a00304.html#gaddc6f7748b699254942c5216b68f8f7f',1,'glm']]],\n  ['mediump_5fu8vec4',['mediump_u8vec4',['../a00304.html#gaaf4ee3b76d43d98da02ec399b99bda4b',1,'glm']]],\n  ['mediump_5fuint16',['mediump_uint16',['../a00304.html#ga2885a6c89916911e418c06bb76b9bdbb',1,'glm']]],\n  ['mediump_5fuint16_5ft',['mediump_uint16_t',['../a00304.html#ga3963b1050fc65a383ee28e3f827b6e3e',1,'glm']]],\n  ['mediump_5fuint32',['mediump_uint32',['../a00304.html#ga34dd5ec1988c443bae80f1b20a8ade5f',1,'glm']]],\n  ['mediump_5fuint32_5ft',['mediump_uint32_t',['../a00304.html#gaf4dae276fd29623950de14a6ca2586b5',1,'glm']]],\n  ['mediump_5fuint64',['mediump_uint64',['../a00304.html#ga30652709815ad9404272a31957daa59e',1,'glm']]],\n  ['mediump_5fuint64_5ft',['mediump_uint64_t',['../a00304.html#ga9b170dd4a8f38448a2dc93987c7875e9',1,'glm']]],\n  ['mediump_5fuint8',['mediump_uint8',['../a00304.html#ga1fa92a233b9110861cdbc8c2ccf0b5a3',1,'glm']]],\n  ['mediump_5fuint8_5ft',['mediump_uint8_t',['../a00304.html#gadfe65c78231039e90507770db50c98c7',1,'glm']]],\n  ['mediump_5fumat2',['mediump_umat2',['../a00294.html#ga43041378b3410ea951b7de0dfd2bc7ee',1,'glm']]],\n  ['mediump_5fumat2x2',['mediump_umat2x2',['../a00294.html#ga3b209b1b751f041422137e3c065dfa98',1,'glm']]],\n  ['mediump_5fumat2x3',['mediump_umat2x3',['../a00294.html#gaee2c1f13b41f4c92ea5b3efe367a1306',1,'glm']]],\n  ['mediump_5fumat2x4',['mediump_umat2x4',['../a00294.html#gae1317ddca16d01e119a40b7f0ee85f95',1,'glm']]],\n  ['mediump_5fumat3',['mediump_umat3',['../a00294.html#ga1730dbe3c67801f53520b06d1aa0a34a',1,'glm']]],\n  ['mediump_5fumat3x2',['mediump_umat3x2',['../a00294.html#gaadc28bfdc8ebca81ae85121b11994970',1,'glm']]],\n  ['mediump_5fumat3x3',['mediump_umat3x3',['../a00294.html#ga48f2fc38d3f7fab3cfbc961278ced53d',1,'glm']]],\n  ['mediump_5fumat3x4',['mediump_umat3x4',['../a00294.html#ga78009a1e4ca64217e46b418535e52546',1,'glm']]],\n  ['mediump_5fumat4',['mediump_umat4',['../a00294.html#ga5087c2beb26a11d9af87432e554cf9d1',1,'glm']]],\n  ['mediump_5fumat4x2',['mediump_umat4x2',['../a00294.html#gaf35aefd81cc13718f6b059623f7425fa',1,'glm']]],\n  ['mediump_5fumat4x3',['mediump_umat4x3',['../a00294.html#ga4e1bed14fbc7f4b376aaed064f89f0fb',1,'glm']]],\n  ['mediump_5fumat4x4',['mediump_umat4x4',['../a00294.html#gaa9428fc8430dc552aad920653f822ef3',1,'glm']]],\n  ['mediump_5fuvec1',['mediump_uvec1',['../a00277.html#ga38fde73aaf1420175ece8d4882558a3f',1,'glm']]],\n  ['mediump_5fuvec2',['mediump_uvec2',['../a00282.html#gaa3b4f7806dad03d83bb3da0baa1e3b9b',1,'glm']]],\n  ['mediump_5fuvec3',['mediump_uvec3',['../a00282.html#ga83b7df38feefbb357f3673d950fafef7',1,'glm']]],\n  ['mediump_5fuvec4',['mediump_uvec4',['../a00282.html#ga64ed0deb6573375b7016daf82ffd53a7',1,'glm']]],\n  ['mediump_5fvec1',['mediump_vec1',['../a00271.html#ga645f53e6b8056609023a894b4e2beef4',1,'glm']]],\n  ['mediump_5fvec2',['mediump_vec2',['../a00282.html#gabc61976261c406520c7a8e4d946dc3f0',1,'glm']]],\n  ['mediump_5fvec3',['mediump_vec3',['../a00282.html#ga2384e263df19f1404b733016eff78fca',1,'glm']]],\n  ['mediump_5fvec4',['mediump_vec4',['../a00282.html#ga5c6978d3ffba06738416a33083853fc0',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_8.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_8.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_8.js",
    "content": "var searchData=\n[\n  ['packed_5fbvec1',['packed_bvec1',['../a00303.html#ga88632cea9008ac0ac1388e94e804a53c',1,'glm']]],\n  ['packed_5fbvec2',['packed_bvec2',['../a00303.html#gab85245913eaa40ab82adabcae37086cb',1,'glm']]],\n  ['packed_5fbvec3',['packed_bvec3',['../a00303.html#ga0c48f9417f649e27f3fb0c9f733a18bd',1,'glm']]],\n  ['packed_5fbvec4',['packed_bvec4',['../a00303.html#ga3180d7db84a74c402157df3bbc0ae3ed',1,'glm']]],\n  ['packed_5fdmat2',['packed_dmat2',['../a00303.html#gad87408a8350918711f845f071bbe43fb',1,'glm']]],\n  ['packed_5fdmat2x2',['packed_dmat2x2',['../a00303.html#gaaa33d8e06657a777efb0c72c44ce87a9',1,'glm']]],\n  ['packed_5fdmat2x3',['packed_dmat2x3',['../a00303.html#gac3a5315f588ba04ad255188071ec4e22',1,'glm']]],\n  ['packed_5fdmat2x4',['packed_dmat2x4',['../a00303.html#gae398fc3156f51d3684b08f62c1a5a6d4',1,'glm']]],\n  ['packed_5fdmat3',['packed_dmat3',['../a00303.html#ga03dfc90d539cc87ea3a15a9caa5d2245',1,'glm']]],\n  ['packed_5fdmat3x2',['packed_dmat3x2',['../a00303.html#gae36de20a4c0e0b1444b7903ae811d94e',1,'glm']]],\n  ['packed_5fdmat3x3',['packed_dmat3x3',['../a00303.html#gab9b909f1392d86854334350efcae85f5',1,'glm']]],\n  ['packed_5fdmat3x4',['packed_dmat3x4',['../a00303.html#ga199131fd279c92c2ac12df6d978f1dd6',1,'glm']]],\n  ['packed_5fdmat4',['packed_dmat4',['../a00303.html#gada980a3485640aa8151f368f17ad3086',1,'glm']]],\n  ['packed_5fdmat4x2',['packed_dmat4x2',['../a00303.html#ga6dc65249730698d3cc9ac5d7e1bc4d72',1,'glm']]],\n  ['packed_5fdmat4x3',['packed_dmat4x3',['../a00303.html#gadf202aaa9ed71c09f9bbe347e43f8764',1,'glm']]],\n  ['packed_5fdmat4x4',['packed_dmat4x4',['../a00303.html#gae20617435a6d042d7c38da2badd64a09',1,'glm']]],\n  ['packed_5fdvec1',['packed_dvec1',['../a00303.html#ga532f0c940649b1ee303acd572fc35531',1,'glm']]],\n  ['packed_5fdvec2',['packed_dvec2',['../a00303.html#ga5c194b11fbda636f2ab20c3bd0079196',1,'glm']]],\n  ['packed_5fdvec3',['packed_dvec3',['../a00303.html#ga0581ea552d86b2b5de7a2804bed80e72',1,'glm']]],\n  ['packed_5fdvec4',['packed_dvec4',['../a00303.html#gae8a9b181f9dc813ad6e125a52b14b935',1,'glm']]],\n  ['packed_5fhighp_5fbvec1',['packed_highp_bvec1',['../a00303.html#ga439e97795314b81cd15abd4e5c2e6e7a',1,'glm']]],\n  ['packed_5fhighp_5fbvec2',['packed_highp_bvec2',['../a00303.html#gad791d671f4fcf1ed1ea41f752916b70a',1,'glm']]],\n  ['packed_5fhighp_5fbvec3',['packed_highp_bvec3',['../a00303.html#ga6a5a3250b57dfadc66735bc72911437f',1,'glm']]],\n  ['packed_5fhighp_5fbvec4',['packed_highp_bvec4',['../a00303.html#ga09f517d88b996ef1b2f42fd54222b82d',1,'glm']]],\n  ['packed_5fhighp_5fdmat2',['packed_highp_dmat2',['../a00303.html#gae29686632fd05efac0675d9a6370d77b',1,'glm']]],\n  ['packed_5fhighp_5fdmat2x2',['packed_highp_dmat2x2',['../a00303.html#ga22bd6382b16052e301edbfc031b9f37a',1,'glm']]],\n  ['packed_5fhighp_5fdmat2x3',['packed_highp_dmat2x3',['../a00303.html#ga999d82719696d4c59f4d236dd08f273d',1,'glm']]],\n  ['packed_5fhighp_5fdmat2x4',['packed_highp_dmat2x4',['../a00303.html#ga6998ac2a8d7fe456b651a6336ed26bb0',1,'glm']]],\n  ['packed_5fhighp_5fdmat3',['packed_highp_dmat3',['../a00303.html#gadac7c040c4810dd52b36fcd09d097400',1,'glm']]],\n  ['packed_5fhighp_5fdmat3x2',['packed_highp_dmat3x2',['../a00303.html#gab462744977beb85fb5c782bc2eea7b15',1,'glm']]],\n  ['packed_5fhighp_5fdmat3x3',['packed_highp_dmat3x3',['../a00303.html#ga49e5a709d098523823b2f824e48672a6',1,'glm']]],\n  ['packed_5fhighp_5fdmat3x4',['packed_highp_dmat3x4',['../a00303.html#ga2c67b3b0adab71c8680c3d819f1fa9b7',1,'glm']]],\n  ['packed_5fhighp_5fdmat4',['packed_highp_dmat4',['../a00303.html#ga6718822cd7af005a9b5bd6ee282f6ba6',1,'glm']]],\n  ['packed_5fhighp_5fdmat4x2',['packed_highp_dmat4x2',['../a00303.html#ga12e39e797fb724a5b51fcbea2513a7da',1,'glm']]],\n  ['packed_5fhighp_5fdmat4x3',['packed_highp_dmat4x3',['../a00303.html#ga79c2e9f82e67963c1ecad0ad6d0ec72e',1,'glm']]],\n  ['packed_5fhighp_5fdmat4x4',['packed_highp_dmat4x4',['../a00303.html#ga2df58e03e5afded28707b4f7d077afb4',1,'glm']]],\n  ['packed_5fhighp_5fdvec1',['packed_highp_dvec1',['../a00303.html#gab472b2d917b5e6efd76e8c7dbfbbf9f1',1,'glm']]],\n  ['packed_5fhighp_5fdvec2',['packed_highp_dvec2',['../a00303.html#ga5b2dc48fa19b684d207d69c6b145eb63',1,'glm']]],\n  ['packed_5fhighp_5fdvec3',['packed_highp_dvec3',['../a00303.html#gaaac6b356ef00154da41aaae7d1549193',1,'glm']]],\n  ['packed_5fhighp_5fdvec4',['packed_highp_dvec4',['../a00303.html#ga81b5368fe485e2630aa9b44832d592e7',1,'glm']]],\n  ['packed_5fhighp_5fivec1',['packed_highp_ivec1',['../a00303.html#ga7245acc887a5438f46fd85fdf076bb3b',1,'glm']]],\n  ['packed_5fhighp_5fivec2',['packed_highp_ivec2',['../a00303.html#ga54f368ec6b514a5aa4f28d40e6f93ef7',1,'glm']]],\n  ['packed_5fhighp_5fivec3',['packed_highp_ivec3',['../a00303.html#ga865a9c7bb22434b1b8c5ac31e164b628',1,'glm']]],\n  ['packed_5fhighp_5fivec4',['packed_highp_ivec4',['../a00303.html#gad6f1b4e3a51c2c051814b60d5d1b8895',1,'glm']]],\n  ['packed_5fhighp_5fmat2',['packed_highp_mat2',['../a00303.html#ga2f2d913d8cca2f935b2522964408c0b2',1,'glm']]],\n  ['packed_5fhighp_5fmat2x2',['packed_highp_mat2x2',['../a00303.html#ga245c12d2daf67feecaa2d3277c8f6661',1,'glm']]],\n  ['packed_5fhighp_5fmat2x3',['packed_highp_mat2x3',['../a00303.html#ga069cc8892aadae144c00f35297617d44',1,'glm']]],\n  ['packed_5fhighp_5fmat2x4',['packed_highp_mat2x4',['../a00303.html#ga6904d09b62141d09712b76983892f95b',1,'glm']]],\n  ['packed_5fhighp_5fmat3',['packed_highp_mat3',['../a00303.html#gabdd5fbffe8b8b8a7b33523f25b120dbe',1,'glm']]],\n  ['packed_5fhighp_5fmat3x2',['packed_highp_mat3x2',['../a00303.html#ga2624719cb251d8de8cad1beaefc3a3f9',1,'glm']]],\n  ['packed_5fhighp_5fmat3x3',['packed_highp_mat3x3',['../a00303.html#gaf2e07527d678440bf0c20adbeb9177c5',1,'glm']]],\n  ['packed_5fhighp_5fmat3x4',['packed_highp_mat3x4',['../a00303.html#ga72102fa6ac2445aa3bb203128ad52449',1,'glm']]],\n  ['packed_5fhighp_5fmat4',['packed_highp_mat4',['../a00303.html#ga253e8379b08d2dc6fe2800b2fb913203',1,'glm']]],\n  ['packed_5fhighp_5fmat4x2',['packed_highp_mat4x2',['../a00303.html#gae389c2071cf3cdb33e7812c6fd156710',1,'glm']]],\n  ['packed_5fhighp_5fmat4x3',['packed_highp_mat4x3',['../a00303.html#ga4584f64394bd7123b7a8534741e4916c',1,'glm']]],\n  ['packed_5fhighp_5fmat4x4',['packed_highp_mat4x4',['../a00303.html#ga0149fe15668925147e07c94fd2c2d6ae',1,'glm']]],\n  ['packed_5fhighp_5fuvec1',['packed_highp_uvec1',['../a00303.html#ga8c32b53f628a3616aa5061e58d66fe74',1,'glm']]],\n  ['packed_5fhighp_5fuvec2',['packed_highp_uvec2',['../a00303.html#gab704d4fb15f6f96d70e363d5db7060cd',1,'glm']]],\n  ['packed_5fhighp_5fuvec3',['packed_highp_uvec3',['../a00303.html#ga0b570da473fec4619db5aa0dce5133b0',1,'glm']]],\n  ['packed_5fhighp_5fuvec4',['packed_highp_uvec4',['../a00303.html#gaa582f38c82aef61dea7aaedf15bb06a6',1,'glm']]],\n  ['packed_5fhighp_5fvec1',['packed_highp_vec1',['../a00303.html#ga56473759d2702ee19ab7f91d0017fa70',1,'glm']]],\n  ['packed_5fhighp_5fvec2',['packed_highp_vec2',['../a00303.html#ga6b8b9475e7c3b16aed13edbc460bbc4d',1,'glm']]],\n  ['packed_5fhighp_5fvec3',['packed_highp_vec3',['../a00303.html#ga3815661df0e2de79beff8168c09adf1e',1,'glm']]],\n  ['packed_5fhighp_5fvec4',['packed_highp_vec4',['../a00303.html#ga4015f36bf5a5adb6ac5d45beed959867',1,'glm']]],\n  ['packed_5fivec1',['packed_ivec1',['../a00303.html#ga11581a06fc7bf941fa4d4b6aca29812c',1,'glm']]],\n  ['packed_5fivec2',['packed_ivec2',['../a00303.html#ga1fe4c5f56b8087d773aa90dc88a257a7',1,'glm']]],\n  ['packed_5fivec3',['packed_ivec3',['../a00303.html#gae157682a7847161787951ba1db4cf325',1,'glm']]],\n  ['packed_5fivec4',['packed_ivec4',['../a00303.html#gac228b70372abd561340d5f926a7c1778',1,'glm']]],\n  ['packed_5flowp_5fbvec1',['packed_lowp_bvec1',['../a00303.html#gae3c8750f53259ece334d3aa3b3649a40',1,'glm']]],\n  ['packed_5flowp_5fbvec2',['packed_lowp_bvec2',['../a00303.html#gac969befedbda69eb78d4e23f751fdbee',1,'glm']]],\n  ['packed_5flowp_5fbvec3',['packed_lowp_bvec3',['../a00303.html#ga7c20adbe1409e3fe4544677a7f6fe954',1,'glm']]],\n  ['packed_5flowp_5fbvec4',['packed_lowp_bvec4',['../a00303.html#gae473587cff3092edc0877fc691c26a0b',1,'glm']]],\n  ['packed_5flowp_5fdmat2',['packed_lowp_dmat2',['../a00303.html#gac93f9b1a35b9de4f456b9f2dfeaf1097',1,'glm']]],\n  ['packed_5flowp_5fdmat2x2',['packed_lowp_dmat2x2',['../a00303.html#gaeeaff6c132ec91ebd21da3a2399548ea',1,'glm']]],\n  ['packed_5flowp_5fdmat2x3',['packed_lowp_dmat2x3',['../a00303.html#ga2ccdcd4846775cbe4f9d12e71d55b5d2',1,'glm']]],\n  ['packed_5flowp_5fdmat2x4',['packed_lowp_dmat2x4',['../a00303.html#gac870c47d2d9d48503f6c9ee3baec8ce1',1,'glm']]],\n  ['packed_5flowp_5fdmat3',['packed_lowp_dmat3',['../a00303.html#ga3894a059eeaacec8791c25de398d9955',1,'glm']]],\n  ['packed_5flowp_5fdmat3x2',['packed_lowp_dmat3x2',['../a00303.html#ga23ec236950f5859f59197663266b535d',1,'glm']]],\n  ['packed_5flowp_5fdmat3x3',['packed_lowp_dmat3x3',['../a00303.html#ga4a7c7d8c3a663d0ec2a858cbfa14e54c',1,'glm']]],\n  ['packed_5flowp_5fdmat3x4',['packed_lowp_dmat3x4',['../a00303.html#ga8fc0e66da83599071b7ec17510686cd9',1,'glm']]],\n  ['packed_5flowp_5fdmat4',['packed_lowp_dmat4',['../a00303.html#ga03e1edf5666c40affe39aee35c87956f',1,'glm']]],\n  ['packed_5flowp_5fdmat4x2',['packed_lowp_dmat4x2',['../a00303.html#ga39658fb13369db869d363684bd8399c0',1,'glm']]],\n  ['packed_5flowp_5fdmat4x3',['packed_lowp_dmat4x3',['../a00303.html#ga30b0351eebc18c6056101359bdd3a359',1,'glm']]],\n  ['packed_5flowp_5fdmat4x4',['packed_lowp_dmat4x4',['../a00303.html#ga0294d4c45151425c86a11deee7693c0e',1,'glm']]],\n  ['packed_5flowp_5fdvec1',['packed_lowp_dvec1',['../a00303.html#ga054050e9d4e78d81db0e6d1573b1c624',1,'glm']]],\n  ['packed_5flowp_5fdvec2',['packed_lowp_dvec2',['../a00303.html#gadc19938ddb204bfcb4d9ef35b1e2bf93',1,'glm']]],\n  ['packed_5flowp_5fdvec3',['packed_lowp_dvec3',['../a00303.html#ga9189210cabd6651a5e14a4c46fb20598',1,'glm']]],\n  ['packed_5flowp_5fdvec4',['packed_lowp_dvec4',['../a00303.html#ga262dafd0c001c3a38d1cc91d024ca738',1,'glm']]],\n  ['packed_5flowp_5fivec1',['packed_lowp_ivec1',['../a00303.html#gaf22b77f1cf3e73b8b1dddfe7f959357c',1,'glm']]],\n  ['packed_5flowp_5fivec2',['packed_lowp_ivec2',['../a00303.html#ga52635859f5ef660ab999d22c11b7867f',1,'glm']]],\n  ['packed_5flowp_5fivec3',['packed_lowp_ivec3',['../a00303.html#ga98c9d122a959e9f3ce10a5623c310f5d',1,'glm']]],\n  ['packed_5flowp_5fivec4',['packed_lowp_ivec4',['../a00303.html#ga931731b8ae3b54c7ecc221509dae96bc',1,'glm']]],\n  ['packed_5flowp_5fmat2',['packed_lowp_mat2',['../a00303.html#ga70dcb9ef0b24e832772a7405efa9669a',1,'glm']]],\n  ['packed_5flowp_5fmat2x2',['packed_lowp_mat2x2',['../a00303.html#gac70667c7642ec8d50245e6e6936a3927',1,'glm']]],\n  ['packed_5flowp_5fmat2x3',['packed_lowp_mat2x3',['../a00303.html#ga3e7df5a11e1be27bc29a4c0d3956f234',1,'glm']]],\n  ['packed_5flowp_5fmat2x4',['packed_lowp_mat2x4',['../a00303.html#gaea9c555e669dc56c45d95dcc75d59bf3',1,'glm']]],\n  ['packed_5flowp_5fmat3',['packed_lowp_mat3',['../a00303.html#ga0d22400969dd223465b2900fecfb4f53',1,'glm']]],\n  ['packed_5flowp_5fmat3x2',['packed_lowp_mat3x2',['../a00303.html#ga128cd52649621861635fab746df91735',1,'glm']]],\n  ['packed_5flowp_5fmat3x3',['packed_lowp_mat3x3',['../a00303.html#ga5adf1802c5375a9dfb1729691bedd94e',1,'glm']]],\n  ['packed_5flowp_5fmat3x4',['packed_lowp_mat3x4',['../a00303.html#ga92247ca09fa03c4013ba364f3a0fca7f',1,'glm']]],\n  ['packed_5flowp_5fmat4',['packed_lowp_mat4',['../a00303.html#ga2a1dd2387725a335413d4c4fee8609c4',1,'glm']]],\n  ['packed_5flowp_5fmat4x2',['packed_lowp_mat4x2',['../a00303.html#ga8f22607dcd090cd280071ccc689f4079',1,'glm']]],\n  ['packed_5flowp_5fmat4x3',['packed_lowp_mat4x3',['../a00303.html#ga7661d759d6ad218e132e3d051e7b2c6c',1,'glm']]],\n  ['packed_5flowp_5fmat4x4',['packed_lowp_mat4x4',['../a00303.html#ga776f18d1a6e7d399f05d386167dc60f5',1,'glm']]],\n  ['packed_5flowp_5fuvec1',['packed_lowp_uvec1',['../a00303.html#gaf111fed760ecce16cb1988807569bee5',1,'glm']]],\n  ['packed_5flowp_5fuvec2',['packed_lowp_uvec2',['../a00303.html#ga958210fe245a75b058325d367c951132',1,'glm']]],\n  ['packed_5flowp_5fuvec3',['packed_lowp_uvec3',['../a00303.html#ga576a3f8372197a56a79dee1c8280f485',1,'glm']]],\n  ['packed_5flowp_5fuvec4',['packed_lowp_uvec4',['../a00303.html#gafdd97922b4a2a42cd0c99a13877ff4da',1,'glm']]],\n  ['packed_5flowp_5fvec1',['packed_lowp_vec1',['../a00303.html#ga0a6198fe64166a6a61084d43c71518a9',1,'glm']]],\n  ['packed_5flowp_5fvec2',['packed_lowp_vec2',['../a00303.html#gafbf1c2cce307c5594b165819ed83bf5d',1,'glm']]],\n  ['packed_5flowp_5fvec3',['packed_lowp_vec3',['../a00303.html#ga3a30c137c1f8cce478c28eab0427a570',1,'glm']]],\n  ['packed_5flowp_5fvec4',['packed_lowp_vec4',['../a00303.html#ga3cc94fb8de80bbd8a4aa7a5b206d304a',1,'glm']]],\n  ['packed_5fmat2',['packed_mat2',['../a00303.html#gadd019b43fcf42e1590d45dddaa504a1a',1,'glm']]],\n  ['packed_5fmat2x2',['packed_mat2x2',['../a00303.html#ga51eaadcdc292c8750f746a5dc3e6c517',1,'glm']]],\n  ['packed_5fmat2x3',['packed_mat2x3',['../a00303.html#ga301b76a89b8a9625501ca58815017f20',1,'glm']]],\n  ['packed_5fmat2x4',['packed_mat2x4',['../a00303.html#gac401da1dd9177ad81d7618a2a5541e23',1,'glm']]],\n  ['packed_5fmat3',['packed_mat3',['../a00303.html#ga9bc12b0ab7be8448836711b77cc7b83a',1,'glm']]],\n  ['packed_5fmat3x2',['packed_mat3x2',['../a00303.html#ga134f0d99fbd2459c13cd9ebd056509fa',1,'glm']]],\n  ['packed_5fmat3x3',['packed_mat3x3',['../a00303.html#ga6c1dbe8cde9fbb231284b01f8aeaaa99',1,'glm']]],\n  ['packed_5fmat3x4',['packed_mat3x4',['../a00303.html#gad63515526cccfe88ffa8fe5ed64f95f8',1,'glm']]],\n  ['packed_5fmat4',['packed_mat4',['../a00303.html#ga2c139854e5b04cf08a957dee3b510441',1,'glm']]],\n  ['packed_5fmat4x2',['packed_mat4x2',['../a00303.html#ga379c1153f1339bdeaefd592bebf538e8',1,'glm']]],\n  ['packed_5fmat4x3',['packed_mat4x3',['../a00303.html#gab286466e19f7399c8d25089da9400d43',1,'glm']]],\n  ['packed_5fmat4x4',['packed_mat4x4',['../a00303.html#ga67e7102557d6067bb6ac00d4ad0e1374',1,'glm']]],\n  ['packed_5fmediump_5fbvec1',['packed_mediump_bvec1',['../a00303.html#ga5546d828d63010a8f9cf81161ad0275a',1,'glm']]],\n  ['packed_5fmediump_5fbvec2',['packed_mediump_bvec2',['../a00303.html#gab4c6414a59539e66a242ad4cf4b476b4',1,'glm']]],\n  ['packed_5fmediump_5fbvec3',['packed_mediump_bvec3',['../a00303.html#ga70147763edff3fe96b03a0b98d6339a2',1,'glm']]],\n  ['packed_5fmediump_5fbvec4',['packed_mediump_bvec4',['../a00303.html#ga7b1620f259595b9da47a6374fc44588a',1,'glm']]],\n  ['packed_5fmediump_5fdmat2',['packed_mediump_dmat2',['../a00303.html#ga9d60e32d3fcb51f817046cd881fdbf57',1,'glm']]],\n  ['packed_5fmediump_5fdmat2x2',['packed_mediump_dmat2x2',['../a00303.html#ga39e8bb9b70e5694964e8266a21ba534e',1,'glm']]],\n  ['packed_5fmediump_5fdmat2x3',['packed_mediump_dmat2x3',['../a00303.html#ga8897c6d9adb4140b1c3b0a07b8f0a430',1,'glm']]],\n  ['packed_5fmediump_5fdmat2x4',['packed_mediump_dmat2x4',['../a00303.html#gaaa4126969c765e7faa2ebf6951c22ffb',1,'glm']]],\n  ['packed_5fmediump_5fdmat3',['packed_mediump_dmat3',['../a00303.html#gaf969eb879c76a5f4576e4a1e10095cf6',1,'glm']]],\n  ['packed_5fmediump_5fdmat3x2',['packed_mediump_dmat3x2',['../a00303.html#ga86efe91cdaa2864c828a5d6d46356c6a',1,'glm']]],\n  ['packed_5fmediump_5fdmat3x3',['packed_mediump_dmat3x3',['../a00303.html#gaf85877d38d8cfbc21d59d939afd72375',1,'glm']]],\n  ['packed_5fmediump_5fdmat3x4',['packed_mediump_dmat3x4',['../a00303.html#gad5dcaf93df267bc3029174e430e0907f',1,'glm']]],\n  ['packed_5fmediump_5fdmat4',['packed_mediump_dmat4',['../a00303.html#ga4b0ee7996651ddd04eaa0c4cdbb66332',1,'glm']]],\n  ['packed_5fmediump_5fdmat4x2',['packed_mediump_dmat4x2',['../a00303.html#ga9a15514a0631f700de6312b9d5db3a73',1,'glm']]],\n  ['packed_5fmediump_5fdmat4x3',['packed_mediump_dmat4x3',['../a00303.html#gab5b36cc9caee1bb1c5178fe191bf5713',1,'glm']]],\n  ['packed_5fmediump_5fdmat4x4',['packed_mediump_dmat4x4',['../a00303.html#ga21e86cf2f6c126bacf31b8985db06bd4',1,'glm']]],\n  ['packed_5fmediump_5fdvec1',['packed_mediump_dvec1',['../a00303.html#ga8920e90ea9c01d9c97e604a938ce2cbd',1,'glm']]],\n  ['packed_5fmediump_5fdvec2',['packed_mediump_dvec2',['../a00303.html#ga0c754a783b6fcf80374c013371c4dae9',1,'glm']]],\n  ['packed_5fmediump_5fdvec3',['packed_mediump_dvec3',['../a00303.html#ga1f18ada6f7cdd8c46db33ba987280fc4',1,'glm']]],\n  ['packed_5fmediump_5fdvec4',['packed_mediump_dvec4',['../a00303.html#ga568b850f1116b667043533cf77826968',1,'glm']]],\n  ['packed_5fmediump_5fivec1',['packed_mediump_ivec1',['../a00303.html#ga09507ef020a49517a7bcd50438f05056',1,'glm']]],\n  ['packed_5fmediump_5fivec2',['packed_mediump_ivec2',['../a00303.html#gaaa891048dddef4627df33809ec726219',1,'glm']]],\n  ['packed_5fmediump_5fivec3',['packed_mediump_ivec3',['../a00303.html#ga06f26d54dca30994eb1fdadb8e69f4a2',1,'glm']]],\n  ['packed_5fmediump_5fivec4',['packed_mediump_ivec4',['../a00303.html#ga70130dc8ed9c966ec2a221ce586d45d8',1,'glm']]],\n  ['packed_5fmediump_5fmat2',['packed_mediump_mat2',['../a00303.html#ga43cd36d430c5187bfdca34a23cb41581',1,'glm']]],\n  ['packed_5fmediump_5fmat2x2',['packed_mediump_mat2x2',['../a00303.html#ga2d2a73e662759e301c22b8931ff6a526',1,'glm']]],\n  ['packed_5fmediump_5fmat2x3',['packed_mediump_mat2x3',['../a00303.html#ga99049db01faf1e95ed9fb875a47dffe2',1,'glm']]],\n  ['packed_5fmediump_5fmat2x4',['packed_mediump_mat2x4',['../a00303.html#gad43a240533f388ce0504b495d9df3d52',1,'glm']]],\n  ['packed_5fmediump_5fmat3',['packed_mediump_mat3',['../a00303.html#ga13a75c6cbd0a411f694bc82486cd1e55',1,'glm']]],\n  ['packed_5fmediump_5fmat3x2',['packed_mediump_mat3x2',['../a00303.html#ga04cfaf1421284df3c24ea0985dab24e7',1,'glm']]],\n  ['packed_5fmediump_5fmat3x3',['packed_mediump_mat3x3',['../a00303.html#gaaa9cea174d342dd9650e3436823cab23',1,'glm']]],\n  ['packed_5fmediump_5fmat3x4',['packed_mediump_mat3x4',['../a00303.html#gabc93a9560593bd32e099c908531305f5',1,'glm']]],\n  ['packed_5fmediump_5fmat4',['packed_mediump_mat4',['../a00303.html#gae89d72ffc149147f61df701bbc8755bf',1,'glm']]],\n  ['packed_5fmediump_5fmat4x2',['packed_mediump_mat4x2',['../a00303.html#gaa458f9d9e0934bae3097e2a373b24707',1,'glm']]],\n  ['packed_5fmediump_5fmat4x3',['packed_mediump_mat4x3',['../a00303.html#ga02ca6255394aa778abaeb0f733c4d2b6',1,'glm']]],\n  ['packed_5fmediump_5fmat4x4',['packed_mediump_mat4x4',['../a00303.html#gaf304f64c06743c1571401504d3f50259',1,'glm']]],\n  ['packed_5fmediump_5fuvec1',['packed_mediump_uvec1',['../a00303.html#ga2c29fb42bab9a4f9b66bc60b2e514a34',1,'glm']]],\n  ['packed_5fmediump_5fuvec2',['packed_mediump_uvec2',['../a00303.html#gaa1f95690a78dc12e39da32943243aeef',1,'glm']]],\n  ['packed_5fmediump_5fuvec3',['packed_mediump_uvec3',['../a00303.html#ga1ea2bbdbcb0a69242f6d884663c1b0ab',1,'glm']]],\n  ['packed_5fmediump_5fuvec4',['packed_mediump_uvec4',['../a00303.html#ga63a73be86a4f07ea7a7499ab0bfebe45',1,'glm']]],\n  ['packed_5fmediump_5fvec1',['packed_mediump_vec1',['../a00303.html#ga71d63cead1e113fca0bcdaaa33aad050',1,'glm']]],\n  ['packed_5fmediump_5fvec2',['packed_mediump_vec2',['../a00303.html#ga6844c6f4691d1bf67673240850430948',1,'glm']]],\n  ['packed_5fmediump_5fvec3',['packed_mediump_vec3',['../a00303.html#gab0eb771b708c5b2205d9b14dd1434fd8',1,'glm']]],\n  ['packed_5fmediump_5fvec4',['packed_mediump_vec4',['../a00303.html#ga68c9bb24f387b312bae6a0a68e74d95e',1,'glm']]],\n  ['packed_5fuvec1',['packed_uvec1',['../a00303.html#ga5621493caac01bdd22ab6be4416b0314',1,'glm']]],\n  ['packed_5fuvec2',['packed_uvec2',['../a00303.html#gabcc33efb4d5e83b8fe4706360e75b932',1,'glm']]],\n  ['packed_5fuvec3',['packed_uvec3',['../a00303.html#gab96804e99e3a72a35740fec690c79617',1,'glm']]],\n  ['packed_5fuvec4',['packed_uvec4',['../a00303.html#ga8e5d92e84ebdbe2480cf96bc17d6e2f2',1,'glm']]],\n  ['packed_5fvec1',['packed_vec1',['../a00303.html#ga14741e3d9da9ae83765389927f837331',1,'glm']]],\n  ['packed_5fvec2',['packed_vec2',['../a00303.html#ga3254defa5a8f0ae4b02b45fedba84a66',1,'glm']]],\n  ['packed_5fvec3',['packed_vec3',['../a00303.html#gaccccd090e185450caa28b5b63ad4e8f0',1,'glm']]],\n  ['packed_5fvec4',['packed_vec4',['../a00303.html#ga37a0e0bf653169b581c5eea3d547fa5d',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_9.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_9.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_9.js",
    "content": "var searchData=\n[\n  ['quat',['quat',['../a00252.html#gab0b441adb4509bc58d2946c2239a8942',1,'glm']]],\n  ['qword',['qword',['../a00354.html#ga4021754ffb8e5ef14c75802b15657714',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_a.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_a.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_a.js",
    "content": "var searchData=\n[\n  ['sint',['sint',['../a00330.html#gada7e83fdfe943aba4f1d5bf80cb66f40',1,'glm']]],\n  ['size1',['size1',['../a00359.html#gaeb877ac8f9a3703961736c1c5072cf68',1,'glm']]],\n  ['size1_5ft',['size1_t',['../a00359.html#gaaf6accc57f5aa50447ba7310ce3f0d6f',1,'glm']]],\n  ['size2',['size2',['../a00359.html#ga1bfe8c4975ff282bce41be2bacd524fe',1,'glm']]],\n  ['size2_5ft',['size2_t',['../a00359.html#ga5976c25657d4e2b5f73f39364c3845d6',1,'glm']]],\n  ['size3',['size3',['../a00359.html#gae1c72956d0359b0db332c6c8774d3b04',1,'glm']]],\n  ['size3_5ft',['size3_t',['../a00359.html#gaf2654983c60d641fd3808e65a8dfad8d',1,'glm']]],\n  ['size4',['size4',['../a00359.html#ga3a19dde617beaf8ce3cfc2ac5064e9aa',1,'glm']]],\n  ['size4_5ft',['size4_t',['../a00359.html#gaa423efcea63675a2df26990dbcb58656',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_b.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_b.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_b.js",
    "content": "var searchData=\n[\n  ['u16',['u16',['../a00304.html#gaa2d7acc0adb536fab71fe261232a40ff',1,'glm']]],\n  ['u16vec1',['u16vec1',['../a00304.html#ga08c05ba8ffb19f5d14ab584e1e9e9ee5',1,'glm::u16vec1()'],['../a00346.html#ga52cc069a92e126c3a8dcde93424d2ef0',1,'glm::gtx::u16vec1()']]],\n  ['u16vec2',['u16vec2',['../a00304.html#ga2a78447eb9d66a114b193f4a25899c16',1,'glm']]],\n  ['u16vec3',['u16vec3',['../a00304.html#ga1c522ca821c27b862fe51cf4024b064b',1,'glm']]],\n  ['u16vec4',['u16vec4',['../a00304.html#ga529496d75775fb656a07993ea9af2450',1,'glm']]],\n  ['u32',['u32',['../a00304.html#ga8165913e068444f7842302d40ba897b9',1,'glm']]],\n  ['u32vec1',['u32vec1',['../a00304.html#gae627372cfd5f20dd87db490387b71195',1,'glm::u32vec1()'],['../a00346.html#ga9bbc1e14aea65cba5e2dcfef6a67d9f3',1,'glm::gtx::u32vec1()']]],\n  ['u32vec2',['u32vec2',['../a00304.html#ga2a266e46ee218d0c680f12b35c500cc0',1,'glm']]],\n  ['u32vec3',['u32vec3',['../a00304.html#gae267358ff2a41d156d97f5762630235a',1,'glm']]],\n  ['u32vec4',['u32vec4',['../a00304.html#ga31cef34e4cd04840c54741ff2f7005f0',1,'glm']]],\n  ['u64',['u64',['../a00304.html#gaf3f312156984c365e9f65620354da70b',1,'glm']]],\n  ['u64vec1',['u64vec1',['../a00304.html#gaf09f3ca4b671a4a4f84505eb4cc865fd',1,'glm::u64vec1()'],['../a00346.html#ga818de170e2584ab037130f2881925974',1,'glm::gtx::u64vec1()']]],\n  ['u64vec2',['u64vec2',['../a00304.html#gaef3824ed4fe435a019c5b9dddf53fec5',1,'glm']]],\n  ['u64vec3',['u64vec3',['../a00304.html#ga489b89ba93d4f7b3934df78debc52276',1,'glm']]],\n  ['u64vec4',['u64vec4',['../a00304.html#ga3945dd6515d4498cb603e65ff867ab03',1,'glm']]],\n  ['u8',['u8',['../a00304.html#gaecc7082561fc9028b844b6cf3d305d36',1,'glm']]],\n  ['u8vec1',['u8vec1',['../a00304.html#ga29b349e037f0b24320b4548a143daee2',1,'glm::u8vec1()'],['../a00346.html#ga5853fe457f4c8a6bc09343d0e9833980',1,'glm::gtx::u8vec1()']]],\n  ['u8vec2',['u8vec2',['../a00304.html#ga518b8d948a6b4ddb72f84d5c3b7b6611',1,'glm']]],\n  ['u8vec3',['u8vec3',['../a00304.html#ga7c5706f6bbe5282e5598acf7e7b377e2',1,'glm']]],\n  ['u8vec4',['u8vec4',['../a00304.html#ga20779a61de2fd526a17f12fe53ec46b1',1,'glm']]],\n  ['uint16',['uint16',['../a00263.html#ga05f6b0ae8f6a6e135b0e290c25fe0e4e',1,'glm']]],\n  ['uint16_5ft',['uint16_t',['../a00304.html#ga91f91f411080c37730856ff5887f5bcf',1,'glm']]],\n  ['uint32',['uint32',['../a00263.html#ga1134b580f8da4de94ca6b1de4d37975e',1,'glm']]],\n  ['uint32_5ft',['uint32_t',['../a00304.html#ga2171d9dc1fefb1c82e2817f45b622eac',1,'glm']]],\n  ['uint64',['uint64',['../a00263.html#gab630f76c26b50298187f7889104d4b9c',1,'glm']]],\n  ['uint64_5ft',['uint64_t',['../a00304.html#ga3999d3e7ff22025c16ddb601e14dfdee',1,'glm']]],\n  ['uint8',['uint8',['../a00263.html#gadde6aaee8457bee49c2a92621fe22b79',1,'glm']]],\n  ['uint8_5ft',['uint8_t',['../a00304.html#ga28d97808322d3c92186e4a0c067d7e8e',1,'glm']]],\n  ['umat2',['umat2',['../a00294.html#ga4cae85566f900debf930c41944b64691',1,'glm']]],\n  ['umat2x2',['umat2x2',['../a00294.html#gabf8acdd33ce8951051edbca5200898aa',1,'glm']]],\n  ['umat2x3',['umat2x3',['../a00294.html#ga1870da7578d5022b973a83155d386ab3',1,'glm']]],\n  ['umat2x4',['umat2x4',['../a00294.html#ga57936a3998e992370e59a223e0ee4fd4',1,'glm']]],\n  ['umat3',['umat3',['../a00294.html#ga5085e3ff02abbac5e537eb7b89ab63b6',1,'glm']]],\n  ['umat3x2',['umat3x2',['../a00294.html#ga9cd7fa637a4a6788337f45231fad9e1a',1,'glm']]],\n  ['umat3x3',['umat3x3',['../a00294.html#ga1f2cfcf3357db0cdf31fcb15e3c6bafb',1,'glm']]],\n  ['umat3x4',['umat3x4',['../a00294.html#gae7c78ff3fc4309605ab0fa186c8d48ba',1,'glm']]],\n  ['umat4',['umat4',['../a00294.html#ga38bc7bb6494e344185df596deeb4544c',1,'glm']]],\n  ['umat4x2',['umat4x2',['../a00294.html#ga70fa2d05896aa83cbc8c07672a429b53',1,'glm']]],\n  ['umat4x3',['umat4x3',['../a00294.html#ga87581417945411f75cb31dd6ca1dba98',1,'glm']]],\n  ['umat4x4',['umat4x4',['../a00294.html#gaf72e6d399c42985db6872c50f53d7eb8',1,'glm']]],\n  ['uvec1',['uvec1',['../a00276.html#gac3bdd96183d23876c58a1424585fefe7',1,'glm']]],\n  ['uvec2',['uvec2',['../a00281.html#ga2f6d9ec3ae14813ade37d6aee3715fdb',1,'glm']]],\n  ['uvec3',['uvec3',['../a00281.html#ga3d3e55874babd4bf93baa7bbc83ae418',1,'glm']]],\n  ['uvec4',['uvec4',['../a00281.html#gaa57e96bb337867329d5f43bcc27c1095',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_c.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_c.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_c.js",
    "content": "var searchData=\n[\n  ['vec1',['vec1',['../a00270.html#gadfc071d934d8dae7955a1d530a3cf656',1,'glm']]],\n  ['vec2',['vec2',['../a00281.html#gabe65c061834f61b4f7cb6037b19006a4',1,'glm']]],\n  ['vec3',['vec3',['../a00281.html#ga9c3019b13faf179e4ad3626ea66df334',1,'glm']]],\n  ['vec4',['vec4',['../a00281.html#gac215a35481a6597d1bf622a382e9d6e2',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_d.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html><head><title></title>\n<meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=UTF-8\"/>\n<meta name=\"generator\" content=\"Doxygen 1.8.10\"/>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"search.css\"/>\n<script type=\"text/javascript\" src=\"typedefs_d.js\"></script>\n<script type=\"text/javascript\" src=\"search.js\"></script>\n</head>\n<body class=\"SRPage\">\n<div id=\"SRIndex\">\n<div class=\"SRStatus\" id=\"Loading\">Loading...</div>\n<div id=\"SRResults\"></div>\n<script type=\"text/javascript\"><!--\ncreateResults();\n--></script>\n<div class=\"SRStatus\" id=\"Searching\">Searching...</div>\n<div class=\"SRStatus\" id=\"NoMatches\">No Matches</div>\n<script type=\"text/javascript\"><!--\ndocument.getElementById(\"Loading\").style.display=\"none\";\ndocument.getElementById(\"NoMatches\").style.display=\"none\";\nvar searchResults = new SearchResults(\"searchResults\");\nsearchResults.Search();\n--></script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/search/typedefs_d.js",
    "content": "var searchData=\n[\n  ['word',['word',['../a00354.html#ga16e9fea0ef1e6c4ef472d3d1731c49a5',1,'glm']]]\n];\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/api/tabs.css",
    "content": ".tabs, .tabs2, .tabs3 {\n    background-image: url('tab_b.png');\n    width: 100%;\n    z-index: 101;\n    font-size: 13px;\n    font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n}\n\n.tabs2 {\n    font-size: 10px;\n}\n.tabs3 {\n    font-size: 9px;\n}\n\n.tablist {\n    margin: 0;\n    padding: 0;\n    display: table;\n}\n\n.tablist li {\n    float: left;\n    display: table-cell;\n    background-image: url('tab_b.png');\n    line-height: 36px;\n    list-style: none;\n}\n\n.tablist a {\n    display: block;\n    padding: 0 20px;\n    font-weight: bold;\n    background-image:url('tab_s.png');\n    background-repeat:no-repeat;\n    background-position:right;\n    color: #283A5D;\n    text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);\n    text-decoration: none;\n    outline: none;\n}\n\n.tabs3 .tablist a {\n    padding: 0 10px;\n}\n\n.tablist a:hover {\n    background-image: url('tab_h.png');\n    background-repeat:repeat-x;\n    color: #fff;\n    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n    text-decoration: none;\n}\n\n.tablist li.current a {\n    background-image: url('tab_a.png');\n    background-repeat:repeat-x;\n    color: #fff;\n    text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0);\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/man.doxy",
    "content": "# Doxyfile 1.8.10\n\n# This file describes the settings to be used by the documentation system\n# doxygen (www.doxygen.org) for a project.\n#\n# All text after a double hash (##) is considered a comment and is placed in\n# front of the TAG it is preceding.\n#\n# All text after a single hash (#) is considered a comment and will be ignored.\n# The format is:\n# TAG = value [value, ...]\n# For lists, items can also be appended using:\n# TAG += value [value, ...]\n# Values that contain spaces should be placed between quotes (\\\" \\\").\n\n#---------------------------------------------------------------------------\n# Project related configuration options\n#---------------------------------------------------------------------------\n\n# This tag specifies the encoding used for all characters in the config file\n# that follow. The default is UTF-8 which is also the encoding used for all text\n# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv\n# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv\n# for the list of possible encodings.\n# The default value is: UTF-8.\n\nDOXYFILE_ENCODING      = UTF-8\n\n# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by\n# double-quotes, unless you are using Doxywizard) that should identify the\n# project for which the documentation is generated. This name is used in the\n# title of most generated pages and in a few other places.\n# The default value is: My Project.\n\nPROJECT_NAME           = \"0.9.9 API documentation\"\n\n# The PROJECT_NUMBER tag can be used to enter a project or revision number. This\n# could be handy for archiving the generated documentation or if some version\n# control system is used.\n\nPROJECT_NUMBER         = \n\n# Using the PROJECT_BRIEF tag one can provide an optional one line description\n# for a project that appears at the top of each page and should give viewer a\n# quick idea about the purpose of the project. Keep the description short.\n\nPROJECT_BRIEF          = \n\n# With the PROJECT_LOGO tag one can specify a logo or an icon that is included\n# in the documentation. The maximum height of the logo should not exceed 55\n# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy\n# the logo to the output directory.\n\nPROJECT_LOGO           = theme/logo-mini.png\n\n# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path\n# into which the generated documentation will be written. If a relative path is\n# entered, it will be relative to the location where doxygen was started. If\n# left blank the current directory will be used.\n\nOUTPUT_DIRECTORY       = .\n\n# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-\n# directories (in 2 levels) under the output directory of each output format and\n# will distribute the generated files over these directories. Enabling this\n# option can be useful when feeding doxygen a huge amount of source files, where\n# putting all generated files in the same directory would otherwise causes\n# performance problems for the file system.\n# The default value is: NO.\n\nCREATE_SUBDIRS         = NO\n\n# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII\n# characters to appear in the names of generated files. If set to NO, non-ASCII\n# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode\n# U+3044.\n# The default value is: NO.\n\nALLOW_UNICODE_NAMES    = NO\n\n# The OUTPUT_LANGUAGE tag is used to specify the language in which all\n# documentation generated by doxygen is written. Doxygen will use this\n# information to generate all constant output in the proper language.\n# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,\n# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),\n# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,\n# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),\n# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,\n# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,\n# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,\n# Ukrainian and Vietnamese.\n# The default value is: English.\n\nOUTPUT_LANGUAGE        = English\n\n# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member\n# descriptions after the members that are listed in the file and class\n# documentation (similar to Javadoc). Set to NO to disable this.\n# The default value is: YES.\n\nBRIEF_MEMBER_DESC      = YES\n\n# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief\n# description of a member or function before the detailed description\n#\n# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the\n# brief descriptions will be completely suppressed.\n# The default value is: YES.\n\nREPEAT_BRIEF           = YES\n\n# This tag implements a quasi-intelligent brief description abbreviator that is\n# used to form the text in various listings. Each string in this list, if found\n# as the leading text of the brief description, will be stripped from the text\n# and the result, after processing the whole list, is used as the annotated\n# text. Otherwise, the brief description is used as-is. If left blank, the\n# following values are used ($name is automatically replaced with the name of\n# the entity):The $name class, The $name widget, The $name file, is, provides,\n# specifies, contains, represents, a, an and the.\n\nABBREVIATE_BRIEF       = \"The $name class       \" \\\n                         \"The $name widget       \" \\\n                         \"The $name file       \" \\\n                         is \\\n                         provides \\\n                         specifies \\\n                         contains \\\n                         represents \\\n                         a \\\n                         an \\\n                         the\n\n# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then\n# doxygen will generate a detailed section even if there is only a brief\n# description.\n# The default value is: NO.\n\nALWAYS_DETAILED_SEC    = NO\n\n# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all\n# inherited members of a class in the documentation of that class as if those\n# members were ordinary class members. Constructors, destructors and assignment\n# operators of the base classes will not be shown.\n# The default value is: NO.\n\nINLINE_INHERITED_MEMB  = NO\n\n# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path\n# before files name in the file list and in the header files. If set to NO the\n# shortest path that makes the file name unique will be used\n# The default value is: YES.\n\nFULL_PATH_NAMES        = NO\n\n# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.\n# Stripping is only done if one of the specified strings matches the left-hand\n# part of the path. The tag can be used to show relative paths in the file list.\n# If left blank the directory from which doxygen is run is used as the path to\n# strip.\n#\n# Note that you can specify absolute paths here, but also relative paths, which\n# will be relative from the directory where doxygen is started.\n# This tag requires that the tag FULL_PATH_NAMES is set to YES.\n\nSTRIP_FROM_PATH        = \"C:/Documents and Settings/Groove/       \"\n\n# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the\n# path mentioned in the documentation of a class, which tells the reader which\n# header file to include in order to use a class. If left blank only the name of\n# the header file containing the class definition is used. Otherwise one should\n# specify the list of include paths that are normally passed to the compiler\n# using the -I flag.\n\nSTRIP_FROM_INC_PATH    = \n\n# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but\n# less readable) file names. This can be useful is your file systems doesn't\n# support long names like on DOS, Mac, or CD-ROM.\n# The default value is: NO.\n\nSHORT_NAMES            = YES\n\n# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the\n# first line (until the first dot) of a Javadoc-style comment as the brief\n# description. If set to NO, the Javadoc-style will behave just like regular Qt-\n# style comments (thus requiring an explicit @brief command for a brief\n# description.)\n# The default value is: NO.\n\nJAVADOC_AUTOBRIEF      = YES\n\n# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first\n# line (until the first dot) of a Qt-style comment as the brief description. If\n# set to NO, the Qt-style will behave just like regular Qt-style comments (thus\n# requiring an explicit \\brief command for a brief description.)\n# The default value is: NO.\n\nQT_AUTOBRIEF           = NO\n\n# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a\n# multi-line C++ special comment block (i.e. a block of //! or /// comments) as\n# a brief description. This used to be the default behavior. The new default is\n# to treat a multi-line C++ comment block as a detailed description. Set this\n# tag to YES if you prefer the old behavior instead.\n#\n# Note that setting this tag to YES also means that rational rose comments are\n# not recognized any more.\n# The default value is: NO.\n\nMULTILINE_CPP_IS_BRIEF = NO\n\n# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the\n# documentation from any documented member that it re-implements.\n# The default value is: YES.\n\nINHERIT_DOCS           = YES\n\n# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new\n# page for each member. If set to NO, the documentation of a member will be part\n# of the file/class/namespace that contains it.\n# The default value is: NO.\n\nSEPARATE_MEMBER_PAGES  = NO\n\n# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen\n# uses this value to replace tabs by spaces in code fragments.\n# Minimum value: 1, maximum value: 16, default value: 4.\n\nTAB_SIZE               = 8\n\n# This tag can be used to specify a number of aliases that act as commands in\n# the documentation. An alias has the form:\n# name=value\n# For example adding\n# \"sideeffect=@par Side Effects:\\n\"\n# will allow you to put the command \\sideeffect (or @sideeffect) in the\n# documentation, which will result in a user-defined paragraph with heading\n# \"Side Effects:\". You can put \\n's in the value part of an alias to insert\n# newlines.\n\nALIASES                = \n\n# This tag can be used to specify a number of word-keyword mappings (TCL only).\n# A mapping has the form \"name=value\". For example adding \"class=itcl::class\"\n# will allow you to use the command class in the itcl::class meaning.\n\nTCL_SUBST              = \n\n# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources\n# only. Doxygen will then generate output that is more tailored for C. For\n# instance, some of the names that are used will be different. The list of all\n# members will be omitted, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_FOR_C  = NO\n\n# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or\n# Python sources only. Doxygen will then generate output that is more tailored\n# for that language. For instance, namespaces will be presented as packages,\n# qualified scopes will look different, etc.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_JAVA   = NO\n\n# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran\n# sources. Doxygen will then generate output that is tailored for Fortran.\n# The default value is: NO.\n\nOPTIMIZE_FOR_FORTRAN   = NO\n\n# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL\n# sources. Doxygen will then generate output that is tailored for VHDL.\n# The default value is: NO.\n\nOPTIMIZE_OUTPUT_VHDL   = NO\n\n# Doxygen selects the parser to use depending on the extension of the files it\n# parses. With this tag you can assign which parser to use for a given\n# extension. Doxygen has a built-in mapping, but you can override or extend it\n# using this tag. The format is ext=language, where ext is a file extension, and\n# language is one of the parsers supported by doxygen: IDL, Java, Javascript,\n# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:\n# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:\n# Fortran. In the later case the parser tries to guess whether the code is fixed\n# or free formatted code, this is the default for Fortran type files), VHDL. For\n# instance to make doxygen treat .inc files as Fortran files (default is PHP),\n# and .f files as C (default is Fortran), use: inc=Fortran f=C.\n#\n# Note: For files without extension you can use no_extension as a placeholder.\n#\n# Note that for custom extensions you also need to set FILE_PATTERNS otherwise\n# the files are not read by doxygen.\n\nEXTENSION_MAPPING      = \n\n# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments\n# according to the Markdown format, which allows for more readable\n# documentation. See http://daringfireball.net/projects/markdown/ for details.\n# The output of markdown processing is further processed by doxygen, so you can\n# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in\n# case of backward compatibilities issues.\n# The default value is: YES.\n\nMARKDOWN_SUPPORT       = YES\n\n# When enabled doxygen tries to link words that correspond to documented\n# classes, or namespaces to their corresponding documentation. Such a link can\n# be prevented in individual cases by putting a % sign in front of the word or\n# globally by setting AUTOLINK_SUPPORT to NO.\n# The default value is: YES.\n\nAUTOLINK_SUPPORT       = YES\n\n# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want\n# to include (a tag file for) the STL sources as input, then you should set this\n# tag to YES in order to let doxygen match functions declarations and\n# definitions whose arguments contain STL classes (e.g. func(std::string);\n# versus func(std::string) {}). This also make the inheritance and collaboration\n# diagrams that involve STL classes more complete and accurate.\n# The default value is: NO.\n\nBUILTIN_STL_SUPPORT    = NO\n\n# If you use Microsoft's C++/CLI language, you should set this option to YES to\n# enable parsing support.\n# The default value is: NO.\n\nCPP_CLI_SUPPORT        = NO\n\n# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:\n# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen\n# will parse them like normal C++ but will assume all classes use public instead\n# of private inheritance when no explicit protection keyword is present.\n# The default value is: NO.\n\nSIP_SUPPORT            = NO\n\n# For Microsoft's IDL there are propget and propput attributes to indicate\n# getter and setter methods for a property. Setting this option to YES will make\n# doxygen to replace the get and set methods by a property in the documentation.\n# This will only work if the methods are indeed getting or setting a simple\n# type. If this is not the case, or you want to show the methods anyway, you\n# should set this option to NO.\n# The default value is: YES.\n\nIDL_PROPERTY_SUPPORT   = YES\n\n# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC\n# tag is set to YES then doxygen will reuse the documentation of the first\n# member in the group (if any) for the other members of the group. By default\n# all members of a group must be documented explicitly.\n# The default value is: NO.\n\nDISTRIBUTE_GROUP_DOC   = NO\n\n# If one adds a struct or class to a group and this option is enabled, then also\n# any nested class or struct is added to the same group. By default this option\n# is disabled and one has to add nested compounds explicitly via \\ingroup.\n# The default value is: NO.\n\nGROUP_NESTED_COMPOUNDS = NO\n\n# Set the SUBGROUPING tag to YES to allow class member groups of the same type\n# (for instance a group of public functions) to be put as a subgroup of that\n# type (e.g. under the Public Functions section). Set it to NO to prevent\n# subgrouping. Alternatively, this can be done per class using the\n# \\nosubgrouping command.\n# The default value is: YES.\n\nSUBGROUPING            = NO\n\n# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions\n# are shown inside the group in which they are included (e.g. using \\ingroup)\n# instead of on a separate page (for HTML and Man pages) or section (for LaTeX\n# and RTF).\n#\n# Note that this feature does not work in combination with\n# SEPARATE_MEMBER_PAGES.\n# The default value is: NO.\n\nINLINE_GROUPED_CLASSES = NO\n\n# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions\n# with only public data fields or simple typedef fields will be shown inline in\n# the documentation of the scope in which they are defined (i.e. file,\n# namespace, or group documentation), provided this scope is documented. If set\n# to NO, structs, classes, and unions are shown on a separate page (for HTML and\n# Man pages) or section (for LaTeX and RTF).\n# The default value is: NO.\n\nINLINE_SIMPLE_STRUCTS  = NO\n\n# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or\n# enum is documented as struct, union, or enum with the name of the typedef. So\n# typedef struct TypeS {} TypeT, will appear in the documentation as a struct\n# with name TypeT. When disabled the typedef will appear as a member of a file,\n# namespace, or class. And the struct will be named TypeS. This can typically be\n# useful for C code in case the coding convention dictates that all compound\n# types are typedef'ed and only the typedef is referenced, never the tag name.\n# The default value is: NO.\n\nTYPEDEF_HIDES_STRUCT   = NO\n\n# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This\n# cache is used to resolve symbols given their name and scope. Since this can be\n# an expensive process and often the same symbol appears multiple times in the\n# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small\n# doxygen will become slower. If the cache is too large, memory is wasted. The\n# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range\n# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536\n# symbols. At the end of a run doxygen will report the cache usage and suggest\n# the optimal cache size from a speed point of view.\n# Minimum value: 0, maximum value: 9, default value: 0.\n\nLOOKUP_CACHE_SIZE      = 0\n\n#---------------------------------------------------------------------------\n# Build related configuration options\n#---------------------------------------------------------------------------\n\n# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in\n# documentation are documented, even if no documentation was available. Private\n# class members and static file members will be hidden unless the\n# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.\n# Note: This will also disable the warnings about undocumented members that are\n# normally produced when WARNINGS is set to YES.\n# The default value is: NO.\n\nEXTRACT_ALL            = NO\n\n# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will\n# be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PRIVATE        = NO\n\n# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal\n# scope will be included in the documentation.\n# The default value is: NO.\n\nEXTRACT_PACKAGE        = NO\n\n# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be\n# included in the documentation.\n# The default value is: NO.\n\nEXTRACT_STATIC         = YES\n\n# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined\n# locally in source files will be included in the documentation. If set to NO,\n# only classes defined in header files are included. Does not have any effect\n# for Java sources.\n# The default value is: YES.\n\nEXTRACT_LOCAL_CLASSES  = NO\n\n# This flag is only useful for Objective-C code. If set to YES, local methods,\n# which are defined in the implementation section but not in the interface are\n# included in the documentation. If set to NO, only methods in the interface are\n# included.\n# The default value is: NO.\n\nEXTRACT_LOCAL_METHODS  = NO\n\n# If this flag is set to YES, the members of anonymous namespaces will be\n# extracted and appear in the documentation as a namespace called\n# 'anonymous_namespace{file}', where file will be replaced with the base name of\n# the file that contains the anonymous namespace. By default anonymous namespace\n# are hidden.\n# The default value is: NO.\n\nEXTRACT_ANON_NSPACES   = NO\n\n# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all\n# undocumented members inside documented classes or files. If set to NO these\n# members will be included in the various overviews, but no documentation\n# section is generated. This option has no effect if EXTRACT_ALL is enabled.\n# The default value is: NO.\n\nHIDE_UNDOC_MEMBERS     = YES\n\n# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all\n# undocumented classes that are normally visible in the class hierarchy. If set\n# to NO, these classes will be included in the various overviews. This option\n# has no effect if EXTRACT_ALL is enabled.\n# The default value is: NO.\n\nHIDE_UNDOC_CLASSES     = YES\n\n# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend\n# (class|struct|union) declarations. If set to NO, these declarations will be\n# included in the documentation.\n# The default value is: NO.\n\nHIDE_FRIEND_COMPOUNDS  = YES\n\n# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any\n# documentation blocks found inside the body of a function. If set to NO, these\n# blocks will be appended to the function's detailed documentation block.\n# The default value is: NO.\n\nHIDE_IN_BODY_DOCS      = YES\n\n# The INTERNAL_DOCS tag determines if documentation that is typed after a\n# \\internal command is included. If the tag is set to NO then the documentation\n# will be excluded. Set it to YES to include the internal documentation.\n# The default value is: NO.\n\nINTERNAL_DOCS          = NO\n\n# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file\n# names in lower-case letters. If set to YES, upper-case letters are also\n# allowed. This is useful if you have classes or files whose names only differ\n# in case and if your file system supports case sensitive file names. Windows\n# and Mac users are advised to set this option to NO.\n# The default value is: system dependent.\n\nCASE_SENSE_NAMES       = YES\n\n# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with\n# their full class and namespace scopes in the documentation. If set to YES, the\n# scope will be hidden.\n# The default value is: NO.\n\nHIDE_SCOPE_NAMES       = YES\n\n# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will\n# append additional text to a page's title, such as Class Reference. If set to\n# YES the compound reference will be hidden.\n# The default value is: NO.\n\nHIDE_COMPOUND_REFERENCE= NO\n\n# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of\n# the files that are included by a file in the documentation of that file.\n# The default value is: YES.\n\nSHOW_INCLUDE_FILES     = NO\n\n# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each\n# grouped member an include statement to the documentation, telling the reader\n# which file to include in order to use the member.\n# The default value is: NO.\n\nSHOW_GROUPED_MEMB_INC  = NO\n\n# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include\n# files with double quotes in the documentation rather than with sharp brackets.\n# The default value is: NO.\n\nFORCE_LOCAL_INCLUDES   = NO\n\n# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the\n# documentation for inline members.\n# The default value is: YES.\n\nINLINE_INFO            = NO\n\n# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the\n# (detailed) documentation of file and class members alphabetically by member\n# name. If set to NO, the members will appear in declaration order.\n# The default value is: YES.\n\nSORT_MEMBER_DOCS       = YES\n\n# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief\n# descriptions of file, namespace and class members alphabetically by member\n# name. If set to NO, the members will appear in declaration order. Note that\n# this will also influence the order of the classes in the class list.\n# The default value is: NO.\n\nSORT_BRIEF_DOCS        = YES\n\n# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the\n# (brief and detailed) documentation of class members so that constructors and\n# destructors are listed first. If set to NO the constructors will appear in the\n# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.\n# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief\n# member documentation.\n# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting\n# detailed member documentation.\n# The default value is: NO.\n\nSORT_MEMBERS_CTORS_1ST = NO\n\n# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy\n# of group names into alphabetical order. If set to NO the group names will\n# appear in their defined order.\n# The default value is: NO.\n\nSORT_GROUP_NAMES       = NO\n\n# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by\n# fully-qualified names, including namespaces. If set to NO, the class list will\n# be sorted only by class name, not including the namespace part.\n# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.\n# Note: This option applies only to the class list, not to the alphabetical\n# list.\n# The default value is: NO.\n\nSORT_BY_SCOPE_NAME     = YES\n\n# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper\n# type resolution of all parameters of a function it will reject a match between\n# the prototype and the implementation of a member function even if there is\n# only one candidate or it is obvious which candidate to choose by doing a\n# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still\n# accept a match between prototype and implementation in such cases.\n# The default value is: NO.\n\nSTRICT_PROTO_MATCHING  = NO\n\n# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo\n# list. This list is created by putting \\todo commands in the documentation.\n# The default value is: YES.\n\nGENERATE_TODOLIST      = YES\n\n# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test\n# list. This list is created by putting \\test commands in the documentation.\n# The default value is: YES.\n\nGENERATE_TESTLIST      = YES\n\n# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug\n# list. This list is created by putting \\bug commands in the documentation.\n# The default value is: YES.\n\nGENERATE_BUGLIST       = YES\n\n# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)\n# the deprecated list. This list is created by putting \\deprecated commands in\n# the documentation.\n# The default value is: YES.\n\nGENERATE_DEPRECATEDLIST= YES\n\n# The ENABLED_SECTIONS tag can be used to enable conditional documentation\n# sections, marked by \\if <section_label> ... \\endif and \\cond <section_label>\n# ... \\endcond blocks.\n\nENABLED_SECTIONS       = \n\n# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the\n# initial value of a variable or macro / define can have for it to appear in the\n# documentation. If the initializer consists of more lines than specified here\n# it will be hidden. Use a value of 0 to hide initializers completely. The\n# appearance of the value of individual variables and macros / defines can be\n# controlled using \\showinitializer or \\hideinitializer command in the\n# documentation regardless of this setting.\n# Minimum value: 0, maximum value: 10000, default value: 30.\n\nMAX_INITIALIZER_LINES  = 30\n\n# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at\n# the bottom of the documentation of classes and structs. If set to YES, the\n# list will mention the files that were used to generate the documentation.\n# The default value is: YES.\n\nSHOW_USED_FILES        = NO\n\n# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This\n# will remove the Files entry from the Quick Index and from the Folder Tree View\n# (if specified).\n# The default value is: YES.\n\nSHOW_FILES             = YES\n\n# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces\n# page. This will remove the Namespaces entry from the Quick Index and from the\n# Folder Tree View (if specified).\n# The default value is: YES.\n\nSHOW_NAMESPACES        = YES\n\n# The FILE_VERSION_FILTER tag can be used to specify a program or script that\n# doxygen should invoke to get the current version for each file (typically from\n# the version control system). Doxygen will invoke the program by executing (via\n# popen()) the command command input-file, where command is the value of the\n# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided\n# by doxygen. Whatever the program writes to standard output is used as the file\n# version. For an example see the documentation.\n\nFILE_VERSION_FILTER    = \n\n# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed\n# by doxygen. The layout file controls the global structure of the generated\n# output files in an output format independent way. To create the layout file\n# that represents doxygen's defaults, run doxygen with the -l option. You can\n# optionally specify a file name after the option, if omitted DoxygenLayout.xml\n# will be used as the name of the layout file.\n#\n# Note that if you run doxygen from a directory containing a file called\n# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE\n# tag is left empty.\n\nLAYOUT_FILE            = \n\n# The CITE_BIB_FILES tag can be used to specify one or more bib files containing\n# the reference definitions. This must be a list of .bib files. The .bib\n# extension is automatically appended if omitted. This requires the bibtex tool\n# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.\n# For LaTeX the style of the bibliography can be controlled using\n# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the\n# search path. See also \\cite for info how to create references.\n\nCITE_BIB_FILES         = \n\n#---------------------------------------------------------------------------\n# Configuration options related to warning and progress messages\n#---------------------------------------------------------------------------\n\n# The QUIET tag can be used to turn on/off the messages that are generated to\n# standard output by doxygen. If QUIET is set to YES this implies that the\n# messages are off.\n# The default value is: NO.\n\nQUIET                  = NO\n\n# The WARNINGS tag can be used to turn on/off the warning messages that are\n# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES\n# this implies that the warnings are on.\n#\n# Tip: Turn warnings on while writing the documentation.\n# The default value is: YES.\n\nWARNINGS               = YES\n\n# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate\n# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag\n# will automatically be disabled.\n# The default value is: YES.\n\nWARN_IF_UNDOCUMENTED   = YES\n\n# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for\n# potential errors in the documentation, such as not documenting some parameters\n# in a documented function, or documenting parameters that don't exist or using\n# markup commands wrongly.\n# The default value is: YES.\n\nWARN_IF_DOC_ERROR      = YES\n\n# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that\n# are documented, but have no documentation for their parameters or return\n# value. If set to NO, doxygen will only warn about wrong or incomplete\n# parameter documentation, but not about the absence of documentation.\n# The default value is: NO.\n\nWARN_NO_PARAMDOC       = NO\n\n# The WARN_FORMAT tag determines the format of the warning messages that doxygen\n# can produce. The string should contain the $file, $line, and $text tags, which\n# will be replaced by the file and line number from which the warning originated\n# and the warning text. Optionally the format may contain $version, which will\n# be replaced by the version of the file (if it could be obtained via\n# FILE_VERSION_FILTER)\n# The default value is: $file:$line: $text.\n\nWARN_FORMAT            = \"$file:$line: $text\"\n\n# The WARN_LOGFILE tag can be used to specify a file to which warning and error\n# messages should be written. If left blank the output is written to standard\n# error (stderr).\n\nWARN_LOGFILE           = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the input files\n#---------------------------------------------------------------------------\n\n# The INPUT tag is used to specify the files and/or directories that contain\n# documented source files. You may enter file names like myfile.cpp or\n# directories like /usr/src/myproject. Separate the files or directories with\n# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING\n# Note: If this tag is empty the current directory is searched.\n\nINPUT                  = ../glm \\\n                         .\n\n# This tag can be used to specify the character encoding of the source files\n# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses\n# libiconv (or the iconv built into libc) for the transcoding. See the libiconv\n# documentation (see: http://www.gnu.org/software/libiconv) for the list of\n# possible encodings.\n# The default value is: UTF-8.\n\nINPUT_ENCODING         = UTF-8\n\n# If the value of the INPUT tag contains directories, you can use the\n# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and\n# *.h) to filter out the source-files in the directories.\n#\n# Note that for custom extensions or not directly supported extensions you also\n# need to set EXTENSION_MAPPING for the extension otherwise the files are not\n# read by doxygen.\n#\n# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,\n# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,\n# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,\n# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd,\n# *.vhdl, *.ucf, *.qsf, *.as and *.js.\n\nFILE_PATTERNS          = *.hpp \\\n                         *.doxy\n\n# The RECURSIVE tag can be used to specify whether or not subdirectories should\n# be searched for input files as well.\n# The default value is: NO.\n\nRECURSIVE              = YES\n\n# The EXCLUDE tag can be used to specify files and/or directories that should be\n# excluded from the INPUT source files. This way you can easily exclude a\n# subdirectory from a directory tree whose root is specified with the INPUT tag.\n#\n# Note that relative paths are relative to the directory from which doxygen is\n# run.\n\nEXCLUDE                = \n\n# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or\n# directories that are symbolic links (a Unix file system feature) are excluded\n# from the input.\n# The default value is: NO.\n\nEXCLUDE_SYMLINKS       = NO\n\n# If the value of the INPUT tag contains directories, you can use the\n# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude\n# certain files from those directories.\n#\n# Note that the wildcards are matched against the file with absolute path, so to\n# exclude all test directories for example use the pattern */test/*\n\nEXCLUDE_PATTERNS       = \n\n# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names\n# (namespaces, classes, functions, etc.) that should be excluded from the\n# output. The symbol name can be a fully qualified name, a word, or if the\n# wildcard * is used, a substring. Examples: ANamespace, AClass,\n# AClass::ANamespace, ANamespace::*Test\n#\n# Note that the wildcards are matched against the file with absolute path, so to\n# exclude all test directories use the pattern */test/*\n\nEXCLUDE_SYMBOLS        = \n\n# The EXAMPLE_PATH tag can be used to specify one or more files or directories\n# that contain example code fragments that are included (see the \\include\n# command).\n\nEXAMPLE_PATH           = \n\n# If the value of the EXAMPLE_PATH tag contains directories, you can use the\n# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and\n# *.h) to filter out the source-files in the directories. If left blank all\n# files are included.\n\nEXAMPLE_PATTERNS       = *\n\n# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be\n# searched for input files to be used with the \\include or \\dontinclude commands\n# irrespective of the value of the RECURSIVE tag.\n# The default value is: NO.\n\nEXAMPLE_RECURSIVE      = NO\n\n# The IMAGE_PATH tag can be used to specify one or more files or directories\n# that contain images that are to be included in the documentation (see the\n# \\image command).\n\nIMAGE_PATH             = \n\n# The INPUT_FILTER tag can be used to specify a program that doxygen should\n# invoke to filter for each input file. Doxygen will invoke the filter program\n# by executing (via popen()) the command:\n#\n# <filter> <input-file>\n#\n# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the\n# name of an input file. Doxygen will then use the output that the filter\n# program writes to standard output. If FILTER_PATTERNS is specified, this tag\n# will be ignored.\n#\n# Note that the filter must not add or remove lines; it is applied before the\n# code is scanned, but not when the output code is generated. If lines are added\n# or removed, the anchors will not be placed correctly.\n\nINPUT_FILTER           = \n\n# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern\n# basis. Doxygen will compare the file name with each pattern and apply the\n# filter if there is a match. The filters are a list of the form: pattern=filter\n# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how\n# filters are used. If the FILTER_PATTERNS tag is empty or if none of the\n# patterns match the file name, INPUT_FILTER is applied.\n\nFILTER_PATTERNS        = \n\n# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using\n# INPUT_FILTER) will also be used to filter the input files that are used for\n# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).\n# The default value is: NO.\n\nFILTER_SOURCE_FILES    = NO\n\n# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file\n# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and\n# it is also possible to disable source filtering for a specific pattern using\n# *.ext= (so without naming a filter).\n# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.\n\nFILTER_SOURCE_PATTERNS = \n\n# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that\n# is part of the input, its contents will be placed on the main page\n# (index.html). This can be useful if you have a project on for instance GitHub\n# and want to reuse the introduction page also for the doxygen output.\n\nUSE_MDFILE_AS_MAINPAGE = \n\n#---------------------------------------------------------------------------\n# Configuration options related to source browsing\n#---------------------------------------------------------------------------\n\n# If the SOURCE_BROWSER tag is set to YES then a list of source files will be\n# generated. Documented entities will be cross-referenced with these sources.\n#\n# Note: To get rid of all source code in the generated output, make sure that\n# also VERBATIM_HEADERS is set to NO.\n# The default value is: NO.\n\nSOURCE_BROWSER         = YES\n\n# Setting the INLINE_SOURCES tag to YES will include the body of functions,\n# classes and enums directly into the documentation.\n# The default value is: NO.\n\nINLINE_SOURCES         = NO\n\n# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any\n# special comment blocks from generated source code fragments. Normal C, C++ and\n# Fortran comments will always remain visible.\n# The default value is: YES.\n\nSTRIP_CODE_COMMENTS    = YES\n\n# If the REFERENCED_BY_RELATION tag is set to YES then for each documented\n# function all documented functions referencing it will be listed.\n# The default value is: NO.\n\nREFERENCED_BY_RELATION = YES\n\n# If the REFERENCES_RELATION tag is set to YES then for each documented function\n# all documented entities called/used by that function will be listed.\n# The default value is: NO.\n\nREFERENCES_RELATION    = YES\n\n# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set\n# to YES then the hyperlinks from functions in REFERENCES_RELATION and\n# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will\n# link to the documentation.\n# The default value is: YES.\n\nREFERENCES_LINK_SOURCE = YES\n\n# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the\n# source code will show a tooltip with additional information such as prototype,\n# brief description and links to the definition and documentation. Since this\n# will make the HTML file larger and loading of large files a bit slower, you\n# can opt to disable this feature.\n# The default value is: YES.\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\n\nSOURCE_TOOLTIPS        = YES\n\n# If the USE_HTAGS tag is set to YES then the references to source code will\n# point to the HTML generated by the htags(1) tool instead of doxygen built-in\n# source browser. The htags tool is part of GNU's global source tagging system\n# (see http://www.gnu.org/software/global/global.html). You will need version\n# 4.8.6 or higher.\n#\n# To use it do the following:\n# - Install the latest version of global\n# - Enable SOURCE_BROWSER and USE_HTAGS in the config file\n# - Make sure the INPUT points to the root of the source tree\n# - Run doxygen as normal\n#\n# Doxygen will invoke htags (and that will in turn invoke gtags), so these\n# tools must be available from the command line (i.e. in the search path).\n#\n# The result: instead of the source browser generated by doxygen, the links to\n# source code will now point to the output of htags.\n# The default value is: NO.\n# This tag requires that the tag SOURCE_BROWSER is set to YES.\n\nUSE_HTAGS              = NO\n\n# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a\n# verbatim copy of the header file for each class for which an include is\n# specified. Set to NO to disable this.\n# See also: Section \\class.\n# The default value is: YES.\n\nVERBATIM_HEADERS       = YES\n\n# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the\n# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the\n# cost of reduced performance. This can be particularly helpful with template\n# rich C++ code for which doxygen's built-in parser lacks the necessary type\n# information.\n# Note: The availability of this option depends on whether or not doxygen was\n# compiled with the --with-libclang option.\n# The default value is: NO.\n\nCLANG_ASSISTED_PARSING = NO\n\n# If clang assisted parsing is enabled you can provide the compiler with command\n# line options that you would normally use when invoking the compiler. Note that\n# the include paths will already be set by doxygen for the files and directories\n# specified with INPUT and INCLUDE_PATH.\n# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.\n\nCLANG_OPTIONS          = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the alphabetical class index\n#---------------------------------------------------------------------------\n\n# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all\n# compounds will be generated. Enable this if the project contains a lot of\n# classes, structs, unions or interfaces.\n# The default value is: YES.\n\nALPHABETICAL_INDEX     = NO\n\n# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in\n# which the alphabetical index list will be split.\n# Minimum value: 1, maximum value: 20, default value: 5.\n# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.\n\nCOLS_IN_ALPHA_INDEX    = 5\n\n# In case all classes in a project start with a common prefix, all classes will\n# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag\n# can be used to specify a prefix (or a list of prefixes) that should be ignored\n# while generating the index headers.\n# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.\n\nIGNORE_PREFIX          = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the HTML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output\n# The default value is: YES.\n\nGENERATE_HTML          = YES\n\n# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: html.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_OUTPUT            = html\n\n# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each\n# generated HTML page (for example: .htm, .php, .asp).\n# The default value is: .html.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FILE_EXTENSION    = .html\n\n# The HTML_HEADER tag can be used to specify a user-defined HTML header file for\n# each generated HTML page. If the tag is left blank doxygen will generate a\n# standard header.\n#\n# To get valid HTML the header file that includes any scripts and style sheets\n# that doxygen needs, which is dependent on the configuration options used (e.g.\n# the setting GENERATE_TREEVIEW). It is highly recommended to start with a\n# default header using\n# doxygen -w html new_header.html new_footer.html new_stylesheet.css\n# YourConfigFile\n# and then modify the file new_header.html. See also section \"Doxygen usage\"\n# for information on how to generate the default header that doxygen normally\n# uses.\n# Note: The header is subject to change so you typically have to regenerate the\n# default header when upgrading to a newer version of doxygen. For a description\n# of the possible markers and block names see the documentation.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_HEADER            = \n\n# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each\n# generated HTML page. If the tag is left blank doxygen will generate a standard\n# footer. See HTML_HEADER for more information on how to generate a default\n# footer and what special commands can be used inside the footer. See also\n# section \"Doxygen usage\" for information on how to generate the default footer\n# that doxygen normally uses.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_FOOTER            = \n\n# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style\n# sheet that is used by each HTML page. It can be used to fine-tune the look of\n# the HTML output. If left blank doxygen will generate a default style sheet.\n# See also section \"Doxygen usage\" for information on how to generate the style\n# sheet that doxygen normally uses.\n# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as\n# it is more robust and this tag (HTML_STYLESHEET) will in the future become\n# obsolete.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_STYLESHEET        = \n\n# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined\n# cascading style sheets that are included after the standard style sheets\n# created by doxygen. Using this option one can overrule certain style aspects.\n# This is preferred over using HTML_STYLESHEET since it does not replace the\n# standard style sheet and is therefore more robust against future updates.\n# Doxygen will copy the style sheet files to the output directory.\n# Note: The order of the extra style sheet files is of importance (e.g. the last\n# style sheet in the list overrules the setting of the previous ones in the\n# list). For an example see the documentation.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_EXTRA_STYLESHEET  = \n\n# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or\n# other source files which should be copied to the HTML output directory. Note\n# that these files will be copied to the base HTML output directory. Use the\n# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these\n# files. In the HTML_STYLESHEET file, use the file name only. Also note that the\n# files will be copied as-is; there are no commands or markers available.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_EXTRA_FILES       = \n\n# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen\n# will adjust the colors in the style sheet and background images according to\n# this color. Hue is specified as an angle on a colorwheel, see\n# http://en.wikipedia.org/wiki/Hue for more information. For instance the value\n# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300\n# purple, and 360 is red again.\n# Minimum value: 0, maximum value: 359, default value: 220.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_HUE    = 220\n\n# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors\n# in the HTML output. For a value of 0 the output will use grayscales only. A\n# value of 255 will produce the most vivid colors.\n# Minimum value: 0, maximum value: 255, default value: 100.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_SAT    = 100\n\n# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the\n# luminance component of the colors in the HTML output. Values below 100\n# gradually make the output lighter, whereas values above 100 make the output\n# darker. The value divided by 100 is the actual gamma applied, so 80 represents\n# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not\n# change the gamma.\n# Minimum value: 40, maximum value: 240, default value: 80.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_COLORSTYLE_GAMMA  = 80\n\n# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML\n# page will contain the date and time when the page was generated. Setting this\n# to YES can help to show when doxygen was last run and thus if the\n# documentation is up to date.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_TIMESTAMP         = NO\n\n# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML\n# documentation will contain sections that can be hidden and shown after the\n# page has loaded.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_DYNAMIC_SECTIONS  = NO\n\n# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries\n# shown in the various tree structured indices initially; the user can expand\n# and collapse entries dynamically later on. Doxygen will expand the tree to\n# such a level that at most the specified number of entries are visible (unless\n# a fully collapsed tree already exceeds this amount). So setting the number of\n# entries 1 will produce a full collapsed tree by default. 0 is a special value\n# representing an infinite number of entries and will result in a full expanded\n# tree by default.\n# Minimum value: 0, maximum value: 9999, default value: 100.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nHTML_INDEX_NUM_ENTRIES = 100\n\n# If the GENERATE_DOCSET tag is set to YES, additional index files will be\n# generated that can be used as input for Apple's Xcode 3 integrated development\n# environment (see: http://developer.apple.com/tools/xcode/), introduced with\n# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a\n# Makefile in the HTML output directory. Running make will produce the docset in\n# that directory and running make install will install the docset in\n# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at\n# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html\n# for more information.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_DOCSET        = NO\n\n# This tag determines the name of the docset feed. A documentation feed provides\n# an umbrella under which multiple documentation sets from a single provider\n# (such as a company or product suite) can be grouped.\n# The default value is: Doxygen generated docs.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_FEEDNAME        = \"Doxygen generated docs\"\n\n# This tag specifies a string that should uniquely identify the documentation\n# set bundle. This should be a reverse domain-name style string, e.g.\n# com.mycompany.MyDocSet. Doxygen will append .docset to the name.\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_BUNDLE_ID       = org.doxygen.Project\n\n# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify\n# the documentation publisher. This should be a reverse domain-name style\n# string, e.g. com.mycompany.MyDocSet.documentation.\n# The default value is: org.doxygen.Publisher.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_PUBLISHER_ID    = org.doxygen.Publisher\n\n# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.\n# The default value is: Publisher.\n# This tag requires that the tag GENERATE_DOCSET is set to YES.\n\nDOCSET_PUBLISHER_NAME  = Publisher\n\n# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three\n# additional HTML index files: index.hhp, index.hhc, and index.hhk. The\n# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop\n# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on\n# Windows.\n#\n# The HTML Help Workshop contains a compiler that can convert all HTML output\n# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML\n# files are now used as the Windows 98 help format, and will replace the old\n# Windows help format (.hlp) on all Windows platforms in the future. Compressed\n# HTML files also contain an index, a table of contents, and you can search for\n# words in the documentation. The HTML workshop also contains a viewer for\n# compressed HTML files.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_HTMLHELP      = NO\n\n# The CHM_FILE tag can be used to specify the file name of the resulting .chm\n# file. You can add a path in front of the file if the result should not be\n# written to the html output directory.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nCHM_FILE               = \n\n# The HHC_LOCATION tag can be used to specify the location (absolute path\n# including file name) of the HTML help compiler (hhc.exe). If non-empty,\n# doxygen will try to run the HTML help compiler on the generated index.hhp.\n# The file has to be specified with full path.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nHHC_LOCATION           = \n\n# The GENERATE_CHI flag controls if a separate .chi index file is generated\n# (YES) or that it should be included in the master .chm file (NO).\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nGENERATE_CHI           = NO\n\n# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)\n# and project file content.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nCHM_INDEX_ENCODING     = \n\n# The BINARY_TOC flag controls whether a binary table of contents is generated\n# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it\n# enables the Previous and Next buttons.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nBINARY_TOC             = NO\n\n# The TOC_EXPAND flag can be set to YES to add extra items for group members to\n# the table of contents of the HTML help documentation and to the tree view.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTMLHELP is set to YES.\n\nTOC_EXPAND             = NO\n\n# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and\n# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that\n# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help\n# (.qch) of the generated HTML documentation.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_QHP           = NO\n\n# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify\n# the file name of the resulting .qch file. The path specified is relative to\n# the HTML output folder.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQCH_FILE               = \n\n# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help\n# Project output. For more information please see Qt Help Project / Namespace\n# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_NAMESPACE          = org.doxygen.Project\n\n# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt\n# Help Project output. For more information please see Qt Help Project / Virtual\n# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-\n# folders).\n# The default value is: doc.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_VIRTUAL_FOLDER     = doc\n\n# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom\n# filter to add. For more information please see Qt Help Project / Custom\n# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-\n# filters).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_CUST_FILTER_NAME   = \n\n# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the\n# custom filter to add. For more information please see Qt Help Project / Custom\n# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-\n# filters).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_CUST_FILTER_ATTRS  = \n\n# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this\n# project's filter section matches. Qt Help Project / Filter Attributes (see:\n# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHP_SECT_FILTER_ATTRS  = \n\n# The QHG_LOCATION tag can be used to specify the location of Qt's\n# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the\n# generated .qhp file.\n# This tag requires that the tag GENERATE_QHP is set to YES.\n\nQHG_LOCATION           = \n\n# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be\n# generated, together with the HTML files, they form an Eclipse help plugin. To\n# install this plugin and make it available under the help contents menu in\n# Eclipse, the contents of the directory containing the HTML and XML files needs\n# to be copied into the plugins directory of eclipse. The name of the directory\n# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.\n# After copying Eclipse needs to be restarted before the help appears.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_ECLIPSEHELP   = NO\n\n# A unique identifier for the Eclipse help plugin. When installing the plugin\n# the directory name containing the HTML and XML files should also have this\n# name. Each documentation set should have its own identifier.\n# The default value is: org.doxygen.Project.\n# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.\n\nECLIPSE_DOC_ID         = org.doxygen.Project\n\n# If you want full control over the layout of the generated HTML pages it might\n# be necessary to disable the index and replace it with your own. The\n# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top\n# of each HTML page. A value of NO enables the index and the value YES disables\n# it. Since the tabs in the index contain the same information as the navigation\n# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nDISABLE_INDEX          = NO\n\n# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index\n# structure should be generated to display hierarchical information. If the tag\n# value is set to YES, a side panel will be generated containing a tree-like\n# index structure (just like the one that is generated for HTML Help). For this\n# to work a browser that supports JavaScript, DHTML, CSS and frames is required\n# (i.e. any modern browser). Windows users are probably better off using the\n# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can\n# further fine-tune the look of the index. As an example, the default style\n# sheet generated by doxygen has an example that shows how to put an image at\n# the root of the tree instead of the PROJECT_NAME. Since the tree basically has\n# the same information as the tab index, you could consider setting\n# DISABLE_INDEX to YES when enabling this option.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nGENERATE_TREEVIEW      = NO\n\n# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that\n# doxygen will group on one line in the generated HTML documentation.\n#\n# Note that a value of 0 will completely suppress the enum values from appearing\n# in the overview section.\n# Minimum value: 0, maximum value: 20, default value: 4.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nENUM_VALUES_PER_LINE   = 4\n\n# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used\n# to set the initial width (in pixels) of the frame in which the tree is shown.\n# Minimum value: 0, maximum value: 1500, default value: 250.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nTREEVIEW_WIDTH         = 250\n\n# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to\n# external symbols imported via tag files in a separate window.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nEXT_LINKS_IN_WINDOW    = NO\n\n# Use this tag to change the font size of LaTeX formulas included as images in\n# the HTML documentation. When you change the font size after a successful\n# doxygen run you need to manually remove any form_*.png images from the HTML\n# output directory to force them to be regenerated.\n# Minimum value: 8, maximum value: 50, default value: 10.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nFORMULA_FONTSIZE       = 10\n\n# Use the FORMULA_TRANPARENT tag to determine whether or not the images\n# generated for formulas are transparent PNGs. Transparent PNGs are not\n# supported properly for IE 6.0, but are supported on all modern browsers.\n#\n# Note that when changing this option you need to delete any form_*.png files in\n# the HTML output directory before the changes have effect.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nFORMULA_TRANSPARENT    = YES\n\n# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see\n# http://www.mathjax.org) which uses client side Javascript for the rendering\n# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX\n# installed or if you want to formulas look prettier in the HTML output. When\n# enabled you may also need to install MathJax separately and configure the path\n# to it using the MATHJAX_RELPATH option.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nUSE_MATHJAX            = NO\n\n# When MathJax is enabled you can set the default output format to be used for\n# the MathJax output. See the MathJax site (see:\n# http://docs.mathjax.org/en/latest/output.html) for more details.\n# Possible values are: HTML-CSS (which is slower, but has the best\n# compatibility), NativeMML (i.e. MathML) and SVG.\n# The default value is: HTML-CSS.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_FORMAT         = HTML-CSS\n\n# When MathJax is enabled you need to specify the location relative to the HTML\n# output directory using the MATHJAX_RELPATH option. The destination directory\n# should contain the MathJax.js script. For instance, if the mathjax directory\n# is located at the same level as the HTML output directory, then\n# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax\n# Content Delivery Network so you can quickly see the result without installing\n# MathJax. However, it is strongly recommended to install a local copy of\n# MathJax from http://www.mathjax.org before deployment.\n# The default value is: http://cdn.mathjax.org/mathjax/latest.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_RELPATH        = http://www.mathjax.org/mathjax\n\n# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax\n# extension names that should be enabled during MathJax rendering. For example\n# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_EXTENSIONS     = \n\n# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces\n# of code that will be used on startup of the MathJax code. See the MathJax site\n# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an\n# example see the documentation.\n# This tag requires that the tag USE_MATHJAX is set to YES.\n\nMATHJAX_CODEFILE       = \n\n# When the SEARCHENGINE tag is enabled doxygen will generate a search box for\n# the HTML output. The underlying search engine uses javascript and DHTML and\n# should work on any modern browser. Note that when using HTML help\n# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)\n# there is already a search function so this one should typically be disabled.\n# For large projects the javascript based search engine can be slow, then\n# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to\n# search using the keyboard; to jump to the search box use <access key> + S\n# (what the <access key> is depends on the OS and browser, but it is typically\n# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down\n# key> to jump into the search results window, the results can be navigated\n# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel\n# the search. The filter options can be selected when the cursor is inside the\n# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>\n# to select a filter and <Enter> or <escape> to activate or cancel the filter\n# option.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_HTML is set to YES.\n\nSEARCHENGINE           = YES\n\n# When the SERVER_BASED_SEARCH tag is enabled the search engine will be\n# implemented using a web server instead of a web client using Javascript. There\n# are two flavors of web server based searching depending on the EXTERNAL_SEARCH\n# setting. When disabled, doxygen will generate a PHP script for searching and\n# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing\n# and searching needs to be provided by external tools. See the section\n# \"External Indexing and Searching\" for details.\n# The default value is: NO.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSERVER_BASED_SEARCH    = NO\n\n# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP\n# script for searching. Instead the search results are written to an XML file\n# which needs to be processed by an external indexer. Doxygen will invoke an\n# external search engine pointed to by the SEARCHENGINE_URL option to obtain the\n# search results.\n#\n# Doxygen ships with an example indexer (doxyindexer) and search engine\n# (doxysearch.cgi) which are based on the open source search engine library\n# Xapian (see: http://xapian.org/).\n#\n# See the section \"External Indexing and Searching\" for details.\n# The default value is: NO.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTERNAL_SEARCH        = NO\n\n# The SEARCHENGINE_URL should point to a search engine hosted by a web server\n# which will return the search results when EXTERNAL_SEARCH is enabled.\n#\n# Doxygen ships with an example indexer (doxyindexer) and search engine\n# (doxysearch.cgi) which are based on the open source search engine library\n# Xapian (see: http://xapian.org/). See the section \"External Indexing and\n# Searching\" for details.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSEARCHENGINE_URL       = \n\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed\n# search data is written to a file for indexing by an external tool. With the\n# SEARCHDATA_FILE tag the name of this file can be specified.\n# The default file is: searchdata.xml.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nSEARCHDATA_FILE        = searchdata.xml\n\n# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the\n# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is\n# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple\n# projects and redirect the results back to the right project.\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTERNAL_SEARCH_ID     = \n\n# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen\n# projects other than the one defined by this configuration file, but that are\n# all added to the same external search index. Each project needs to have a\n# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of\n# to a relative location where the documentation can be found. The format is:\n# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...\n# This tag requires that the tag SEARCHENGINE is set to YES.\n\nEXTRA_SEARCH_MAPPINGS  = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the LaTeX output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.\n# The default value is: YES.\n\nGENERATE_LATEX         = NO\n\n# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: latex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_OUTPUT           = latex\n\n# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be\n# invoked.\n#\n# Note that when enabling USE_PDFLATEX this option is only used for generating\n# bitmaps for formulas in the HTML output, but not in the Makefile that is\n# written to the output directory.\n# The default file is: latex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_CMD_NAME         = latex\n\n# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate\n# index for LaTeX.\n# The default file is: makeindex.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nMAKEINDEX_CMD_NAME     = makeindex\n\n# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX\n# documents. This may be useful for small projects and may help to save some\n# trees in general.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nCOMPACT_LATEX          = NO\n\n# The PAPER_TYPE tag can be used to set the paper type that is used by the\n# printer.\n# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x\n# 14 inches) and executive (7.25 x 10.5 inches).\n# The default value is: a4.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nPAPER_TYPE             = a4wide\n\n# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names\n# that should be included in the LaTeX output. The package can be specified just\n# by its name or with the correct syntax as to be used with the LaTeX\n# \\usepackage command. To get the times font for instance you can specify :\n# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}\n# To use the option intlimits with the amsmath package you can specify:\n# EXTRA_PACKAGES=[intlimits]{amsmath}\n# If left blank no extra packages will be included.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nEXTRA_PACKAGES         = \n\n# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the\n# generated LaTeX document. The header should contain everything until the first\n# chapter. If it is left blank doxygen will generate a standard header. See\n# section \"Doxygen usage\" for information on how to let doxygen write the\n# default header to a separate file.\n#\n# Note: Only use a user-defined header if you know what you are doing! The\n# following commands have a special meaning inside the header: $title,\n# $datetime, $date, $doxygenversion, $projectname, $projectnumber,\n# $projectbrief, $projectlogo. Doxygen will replace $title with the empty\n# string, for the replacement values of the other commands the user is referred\n# to HTML_HEADER.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_HEADER           = \n\n# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the\n# generated LaTeX document. The footer should contain everything after the last\n# chapter. If it is left blank doxygen will generate a standard footer. See\n# LATEX_HEADER for more information on how to generate a default footer and what\n# special commands can be used inside the footer.\n#\n# Note: Only use a user-defined footer if you know what you are doing!\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_FOOTER           = \n\n# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined\n# LaTeX style sheets that are included after the standard style sheets created\n# by doxygen. Using this option one can overrule certain style aspects. Doxygen\n# will copy the style sheet files to the output directory.\n# Note: The order of the extra style sheet files is of importance (e.g. the last\n# style sheet in the list overrules the setting of the previous ones in the\n# list).\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EXTRA_STYLESHEET = \n\n# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or\n# other source files which should be copied to the LATEX_OUTPUT output\n# directory. Note that the files will be copied as-is; there are no commands or\n# markers available.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_EXTRA_FILES      = \n\n# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is\n# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will\n# contain links (just like the HTML output) instead of page references. This\n# makes the output suitable for online browsing using a PDF viewer.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nPDF_HYPERLINKS         = NO\n\n# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate\n# the PDF file directly from the LaTeX files. Set this option to YES, to get a\n# higher quality PDF documentation.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nUSE_PDFLATEX           = YES\n\n# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode\n# command to the generated LaTeX files. This will instruct LaTeX to keep running\n# if errors occur, instead of asking the user for help. This option is also used\n# when generating formulas in HTML.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_BATCHMODE        = NO\n\n# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the\n# index chapters (such as File Index, Compound Index, etc.) in the output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_HIDE_INDICES     = NO\n\n# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source\n# code with syntax highlighting in the LaTeX output.\n#\n# Note that which sources are shown also depends on other settings such as\n# SOURCE_BROWSER.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_SOURCE_CODE      = NO\n\n# The LATEX_BIB_STYLE tag can be used to specify the style to use for the\n# bibliography, e.g. plainnat, or ieeetr. See\n# http://en.wikipedia.org/wiki/BibTeX and \\cite for more info.\n# The default value is: plain.\n# This tag requires that the tag GENERATE_LATEX is set to YES.\n\nLATEX_BIB_STYLE        = plain\n\n#---------------------------------------------------------------------------\n# Configuration options related to the RTF output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The\n# RTF output is optimized for Word 97 and may not look too pretty with other RTF\n# readers/editors.\n# The default value is: NO.\n\nGENERATE_RTF           = NO\n\n# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: rtf.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_OUTPUT             = glm.rtf\n\n# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF\n# documents. This may be useful for small projects and may help to save some\n# trees in general.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nCOMPACT_RTF            = NO\n\n# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will\n# contain hyperlink fields. The RTF file will contain links (just like the HTML\n# output) instead of page references. This makes the output suitable for online\n# browsing using Word or some other Word compatible readers that support those\n# fields.\n#\n# Note: WordPad (write) and others do not support links.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_HYPERLINKS         = YES\n\n# Load stylesheet definitions from file. Syntax is similar to doxygen's config\n# file, i.e. a series of assignments. You only have to provide replacements,\n# missing definitions are set to their default value.\n#\n# See also section \"Doxygen usage\" for information on how to generate the\n# default style sheet that doxygen normally uses.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_STYLESHEET_FILE    = \n\n# Set optional variables used in the generation of an RTF document. Syntax is\n# similar to doxygen's config file. A template extensions file can be generated\n# using doxygen -e rtf extensionFile.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_EXTENSIONS_FILE    = \n\n# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code\n# with syntax highlighting in the RTF output.\n#\n# Note that which sources are shown also depends on other settings such as\n# SOURCE_BROWSER.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_RTF is set to YES.\n\nRTF_SOURCE_CODE        = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the man page output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for\n# classes and files.\n# The default value is: NO.\n\nGENERATE_MAN           = NO\n\n# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it. A directory man3 will be created inside the directory specified by\n# MAN_OUTPUT.\n# The default directory is: man.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_OUTPUT             = man\n\n# The MAN_EXTENSION tag determines the extension that is added to the generated\n# man pages. In case the manual section does not start with a number, the number\n# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is\n# optional.\n# The default value is: .3.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_EXTENSION          = .3\n\n# The MAN_SUBDIR tag determines the name of the directory created within\n# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by\n# MAN_EXTENSION with the initial . removed.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_SUBDIR             = \n\n# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it\n# will generate one additional man file for each entity documented in the real\n# man page(s). These additional files only source the real man page, but without\n# them the man command would be unable to find the correct page.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_MAN is set to YES.\n\nMAN_LINKS              = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the XML output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that\n# captures the structure of the code including all documentation.\n# The default value is: NO.\n\nGENERATE_XML           = NO\n\n# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a\n# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of\n# it.\n# The default directory is: xml.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_OUTPUT             = xml\n\n# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program\n# listings (including syntax highlighting and cross-referencing information) to\n# the XML output. Note that enabling this will significantly increase the size\n# of the XML output.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_XML is set to YES.\n\nXML_PROGRAMLISTING     = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to the DOCBOOK output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files\n# that can be used to generate PDF.\n# The default value is: NO.\n\nGENERATE_DOCBOOK       = NO\n\n# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.\n# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in\n# front of it.\n# The default directory is: docbook.\n# This tag requires that the tag GENERATE_DOCBOOK is set to YES.\n\nDOCBOOK_OUTPUT         = docbook\n\n# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the\n# program listings (including syntax highlighting and cross-referencing\n# information) to the DOCBOOK output. Note that enabling this will significantly\n# increase the size of the DOCBOOK output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_DOCBOOK is set to YES.\n\nDOCBOOK_PROGRAMLISTING = NO\n\n#---------------------------------------------------------------------------\n# Configuration options for the AutoGen Definitions output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an\n# AutoGen Definitions (see http://autogen.sf.net) file that captures the\n# structure of the code including all documentation. Note that this feature is\n# still experimental and incomplete at the moment.\n# The default value is: NO.\n\nGENERATE_AUTOGEN_DEF   = NO\n\n#---------------------------------------------------------------------------\n# Configuration options related to the Perl module output\n#---------------------------------------------------------------------------\n\n# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module\n# file that captures the structure of the code including all documentation.\n#\n# Note that this feature is still experimental and incomplete at the moment.\n# The default value is: NO.\n\nGENERATE_PERLMOD       = NO\n\n# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary\n# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI\n# output from the Perl module output.\n# The default value is: NO.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_LATEX          = NO\n\n# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely\n# formatted so it can be parsed by a human reader. This is useful if you want to\n# understand what is going on. On the other hand, if this tag is set to NO, the\n# size of the Perl module output will be much smaller and Perl will parse it\n# just the same.\n# The default value is: YES.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_PRETTY         = YES\n\n# The names of the make variables in the generated doxyrules.make file are\n# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful\n# so different doxyrules.make files included by the same Makefile don't\n# overwrite each other's variables.\n# This tag requires that the tag GENERATE_PERLMOD is set to YES.\n\nPERLMOD_MAKEVAR_PREFIX = \n\n#---------------------------------------------------------------------------\n# Configuration options related to the preprocessor\n#---------------------------------------------------------------------------\n\n# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all\n# C-preprocessor directives found in the sources and include files.\n# The default value is: YES.\n\nENABLE_PREPROCESSING   = YES\n\n# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names\n# in the source code. If set to NO, only conditional compilation will be\n# performed. Macro expansion can be done in a controlled way by setting\n# EXPAND_ONLY_PREDEF to YES.\n# The default value is: NO.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nMACRO_EXPANSION        = NO\n\n# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then\n# the macro expansion is limited to the macros specified with the PREDEFINED and\n# EXPAND_AS_DEFINED tags.\n# The default value is: NO.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nEXPAND_ONLY_PREDEF     = NO\n\n# If the SEARCH_INCLUDES tag is set to YES, the include files in the\n# INCLUDE_PATH will be searched if a #include is found.\n# The default value is: YES.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nSEARCH_INCLUDES        = YES\n\n# The INCLUDE_PATH tag can be used to specify one or more directories that\n# contain include files that are not input files but should be processed by the\n# preprocessor.\n# This tag requires that the tag SEARCH_INCLUDES is set to YES.\n\nINCLUDE_PATH           = \n\n# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard\n# patterns (like *.h and *.hpp) to filter out the header-files in the\n# directories. If left blank, the patterns specified with FILE_PATTERNS will be\n# used.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nINCLUDE_FILE_PATTERNS  = \n\n# The PREDEFINED tag can be used to specify one or more macro names that are\n# defined before the preprocessor is started (similar to the -D option of e.g.\n# gcc). The argument of the tag is a list of macros of the form: name or\n# name=definition (no spaces). If the definition and the \"=\" are omitted, \"=1\"\n# is assumed. To prevent a macro definition from being undefined via #undef or\n# recursively expanded use the := operator instead of the = operator.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nPREDEFINED             = \n\n# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this\n# tag can be used to specify a list of macro names that should be expanded. The\n# macro definition that is found in the sources will be used. Use the PREDEFINED\n# tag if you want to use a different macro definition that overrules the\n# definition found in the source code.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nEXPAND_AS_DEFINED      = \n\n# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will\n# remove all references to function-like macros that are alone on a line, have\n# an all uppercase name, and do not end with a semicolon. Such function macros\n# are typically used for boiler-plate code, and will confuse the parser if not\n# removed.\n# The default value is: YES.\n# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.\n\nSKIP_FUNCTION_MACROS   = YES\n\n#---------------------------------------------------------------------------\n# Configuration options related to external references\n#---------------------------------------------------------------------------\n\n# The TAGFILES tag can be used to specify one or more tag files. For each tag\n# file the location of the external documentation should be added. The format of\n# a tag file without this location is as follows:\n# TAGFILES = file1 file2 ...\n# Adding location for the tag files is done as follows:\n# TAGFILES = file1=loc1 \"file2 = loc2\" ...\n# where loc1 and loc2 can be relative or absolute paths or URLs. See the\n# section \"Linking to external documentation\" for more information about the use\n# of tag files.\n# Note: Each tag file must have a unique name (where the name does NOT include\n# the path). If a tag file is not located in the directory in which doxygen is\n# run, you must also specify the path to the tagfile here.\n\nTAGFILES               = \n\n# When a file name is specified after GENERATE_TAGFILE, doxygen will create a\n# tag file that is based on the input files it reads. See section \"Linking to\n# external documentation\" for more information about the usage of tag files.\n\nGENERATE_TAGFILE       = \n\n# If the ALLEXTERNALS tag is set to YES, all external class will be listed in\n# the class index. If set to NO, only the inherited external classes will be\n# listed.\n# The default value is: NO.\n\nALLEXTERNALS           = NO\n\n# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed\n# in the modules index. If set to NO, only the current project's groups will be\n# listed.\n# The default value is: YES.\n\nEXTERNAL_GROUPS        = YES\n\n# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in\n# the related pages index. If set to NO, only the current project's pages will\n# be listed.\n# The default value is: YES.\n\nEXTERNAL_PAGES         = YES\n\n# The PERL_PATH should be the absolute path and name of the perl script\n# interpreter (i.e. the result of 'which perl').\n# The default file (with absolute path) is: /usr/bin/perl.\n\nPERL_PATH              = /usr/bin/perl\n\n#---------------------------------------------------------------------------\n# Configuration options related to the dot tool\n#---------------------------------------------------------------------------\n\n# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram\n# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to\n# NO turns the diagrams off. Note that this option also works with HAVE_DOT\n# disabled, but it is recommended to install and use dot, since it yields more\n# powerful graphs.\n# The default value is: YES.\n\nCLASS_DIAGRAMS         = YES\n\n# You can define message sequence charts within doxygen comments using the \\msc\n# command. Doxygen will then run the mscgen tool (see:\n# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the\n# documentation. The MSCGEN_PATH tag allows you to specify the directory where\n# the mscgen tool resides. If left empty the tool is assumed to be found in the\n# default search path.\n\nMSCGEN_PATH            = \n\n# You can include diagrams made with dia in doxygen documentation. Doxygen will\n# then run dia to produce the diagram and insert it in the documentation. The\n# DIA_PATH tag allows you to specify the directory where the dia binary resides.\n# If left empty dia is assumed to be found in the default search path.\n\nDIA_PATH               = \n\n# If set to YES the inheritance and collaboration graphs will hide inheritance\n# and usage relations if the target is undocumented or is not a class.\n# The default value is: YES.\n\nHIDE_UNDOC_RELATIONS   = YES\n\n# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is\n# available from the path. This tool is part of Graphviz (see:\n# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent\n# Bell Labs. The other options in this section have no effect if this option is\n# set to NO\n# The default value is: NO.\n\nHAVE_DOT               = NO\n\n# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed\n# to run in parallel. When set to 0 doxygen will base this on the number of\n# processors available in the system. You can set it explicitly to a value\n# larger than 0 to get control over the balance between CPU load and processing\n# speed.\n# Minimum value: 0, maximum value: 32, default value: 0.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_NUM_THREADS        = 0\n\n# When you want a differently looking font in the dot files that doxygen\n# generates you can specify the font name using DOT_FONTNAME. You need to make\n# sure dot is able to find the font, which can be done by putting it in a\n# standard location or by setting the DOTFONTPATH environment variable or by\n# setting DOT_FONTPATH to the directory containing the font.\n# The default value is: Helvetica.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTNAME           = Helvetica\n\n# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of\n# dot graphs.\n# Minimum value: 4, maximum value: 24, default value: 10.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTSIZE           = 10\n\n# By default doxygen will tell dot to use the default font as specified with\n# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set\n# the path where dot can find it using this tag.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_FONTPATH           = \n\n# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for\n# each documented class showing the direct and indirect inheritance relations.\n# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCLASS_GRAPH            = YES\n\n# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a\n# graph for each documented class showing the direct and indirect implementation\n# dependencies (inheritance, containment, and class references variables) of the\n# class with other documented classes.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCOLLABORATION_GRAPH    = YES\n\n# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for\n# groups, showing the direct groups dependencies.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGROUP_GRAPHS           = YES\n\n# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and\n# collaboration diagrams in a style similar to the OMG's Unified Modeling\n# Language.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nUML_LOOK               = NO\n\n# If the UML_LOOK tag is enabled, the fields and methods are shown inside the\n# class node. If there are many fields or methods and many nodes the graph may\n# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the\n# number of items for each type to make the size more manageable. Set this to 0\n# for no limit. Note that the threshold may be exceeded by 50% before the limit\n# is enforced. So when you set the threshold to 10, up to 15 fields may appear,\n# but if the number exceeds 15, the total amount of fields shown is limited to\n# 10.\n# Minimum value: 0, maximum value: 100, default value: 10.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nUML_LIMIT_NUM_FIELDS   = 10\n\n# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and\n# collaboration graphs will show the relations between templates and their\n# instances.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nTEMPLATE_RELATIONS     = NO\n\n# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to\n# YES then doxygen will generate a graph for each documented file showing the\n# direct and indirect include dependencies of the file with other documented\n# files.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINCLUDE_GRAPH          = YES\n\n# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are\n# set to YES then doxygen will generate a graph for each documented file showing\n# the direct and indirect include dependencies of the file with other documented\n# files.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINCLUDED_BY_GRAPH      = YES\n\n# If the CALL_GRAPH tag is set to YES then doxygen will generate a call\n# dependency graph for every global function or class method.\n#\n# Note that enabling this option will significantly increase the time of a run.\n# So in most cases it will be better to enable call graphs for selected\n# functions only using the \\callgraph command. Disabling a call graph can be\n# accomplished by means of the command \\hidecallgraph.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCALL_GRAPH             = YES\n\n# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller\n# dependency graph for every global function or class method.\n#\n# Note that enabling this option will significantly increase the time of a run.\n# So in most cases it will be better to enable caller graphs for selected\n# functions only using the \\callergraph command. Disabling a caller graph can be\n# accomplished by means of the command \\hidecallergraph.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nCALLER_GRAPH           = YES\n\n# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical\n# hierarchy of all classes instead of a textual one.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGRAPHICAL_HIERARCHY    = YES\n\n# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the\n# dependencies a directory has on other directories in a graphical way. The\n# dependency relations are determined by the #include relations between the\n# files in the directories.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDIRECTORY_GRAPH        = YES\n\n# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images\n# generated by dot. For an explanation of the image formats see the section\n# output formats in the documentation of the dot tool (Graphviz (see:\n# http://www.graphviz.org/)).\n# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order\n# to make the SVG files visible in IE 9+ (other browsers do not have this\n# requirement).\n# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,\n# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and\n# png:gdiplus:gdiplus.\n# The default value is: png.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_IMAGE_FORMAT       = png\n\n# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to\n# enable generation of interactive SVG images that allow zooming and panning.\n#\n# Note that this requires a modern browser other than Internet Explorer. Tested\n# and working are Firefox, Chrome, Safari, and Opera.\n# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make\n# the SVG files visible. Older versions of IE do not have SVG support.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nINTERACTIVE_SVG        = NO\n\n# The DOT_PATH tag can be used to specify the path where the dot tool can be\n# found. If left blank, it is assumed the dot tool can be found in the path.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_PATH               = \n\n# The DOTFILE_DIRS tag can be used to specify one or more directories that\n# contain dot files that are included in the documentation (see the \\dotfile\n# command).\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOTFILE_DIRS           = \n\n# The MSCFILE_DIRS tag can be used to specify one or more directories that\n# contain msc files that are included in the documentation (see the \\mscfile\n# command).\n\nMSCFILE_DIRS           = \n\n# The DIAFILE_DIRS tag can be used to specify one or more directories that\n# contain dia files that are included in the documentation (see the \\diafile\n# command).\n\nDIAFILE_DIRS           = \n\n# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the\n# path where java can find the plantuml.jar file. If left blank, it is assumed\n# PlantUML is not used or called during a preprocessing step. Doxygen will\n# generate a warning when it encounters a \\startuml command in this case and\n# will not generate output for the diagram.\n\nPLANTUML_JAR_PATH      = \n\n# When using plantuml, the specified paths are searched for files specified by\n# the !include statement in a plantuml block.\n\nPLANTUML_INCLUDE_PATH  = \n\n# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes\n# that will be shown in the graph. If the number of nodes in a graph becomes\n# larger than this value, doxygen will truncate the graph, which is visualized\n# by representing a node as a red box. Note that doxygen if the number of direct\n# children of the root node in a graph is already larger than\n# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that\n# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.\n# Minimum value: 0, maximum value: 10000, default value: 50.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_GRAPH_MAX_NODES    = 50\n\n# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs\n# generated by dot. A depth value of 3 means that only nodes reachable from the\n# root by following a path via at most 3 edges will be shown. Nodes that lay\n# further from the root node will be omitted. Note that setting this option to 1\n# or 2 may greatly reduce the computation time needed for large code bases. Also\n# note that the size of a graph can be further restricted by\n# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.\n# Minimum value: 0, maximum value: 1000, default value: 0.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nMAX_DOT_GRAPH_DEPTH    = 1000\n\n# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent\n# background. This is disabled by default, because dot on Windows does not seem\n# to support this out of the box.\n#\n# Warning: Depending on the platform used, enabling this option may lead to\n# badly anti-aliased labels on the edges of a graph (i.e. they become hard to\n# read).\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_TRANSPARENT        = NO\n\n# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output\n# files in one run (i.e. multiple -o and -T options on the command line). This\n# makes dot run faster, but since only newer versions of dot (>1.8.10) support\n# this, this feature is disabled by default.\n# The default value is: NO.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_MULTI_TARGETS      = NO\n\n# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page\n# explaining the meaning of the various boxes and arrows in the dot generated\n# graphs.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nGENERATE_LEGEND        = YES\n\n# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot\n# files that are used to generate the various graphs.\n# The default value is: YES.\n# This tag requires that the tag HAVE_DOT is set to YES.\n\nDOT_CLEANUP            = YES\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/doc/theme/doxygen.css",
    "content": "/* The standard CSS for doxygen 1.8.10 */\n\nbody, table, div, p, dl {\n\tfont: 400 14px/22px Roboto,sans-serif;\n}\n\nbody\n{\n\tmargin:0px;\n\tpadding:0px;\n\tbackground-color:#bf6000;\n\tbackground-repeat:no-repeat;\n\tbackground-position:center center;\n\tbackground-attachment:fixed;\n\tmin-height:1200px;\n\toverflow:auto;\n}\n\n/* @group Heading Levels */\n\nh1.groupheader {\n\tcolor:#bf6000;\n\tfont-size: 150%;\n}\n\n.title {\n\tcolor:#bf6000;\n\tfont: 400 14px/28px Roboto,sans-serif;\n\tfont-size: 150%;\n\tfont-weight: bold;\n\tmargin: 10px 2px;\n}\n\nh2.groupheader {\n\tborder-bottom: 1px solid #bf6000;\n\tcolor:#bf6000;\n\tfont-size: 150%;\n\tfont-weight: normal;\n\tmargin-top: 1.75em;\n\tpadding-top: 8px;\n\tpadding-bottom: 4px;\n\twidth: 100%;\n}\n\nh3.groupheader {\n\tfont-size: 100%;\n}\n\nh1, h2, h3, h4, h5, h6 {\n\t-webkit-transition: text-shadow 0.5s linear;\n\t-moz-transition: text-shadow 0.5s linear;\n\t-ms-transition: text-shadow 0.5s linear;\n\t-o-transition: text-shadow 0.5s linear;\n\ttransition: text-shadow 0.5s linear;\n\tmargin-right: 15px;\n}\n\nh1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow {\n\ttext-shadow: 0 0 15px cyan;\n}\n\ndt {\n\tfont-weight: bold;\n}\n\ndiv.multicol {\n\t-moz-column-gap: 1em;\n\t-webkit-column-gap: 1em;\n\t-moz-column-count: 3;\n\t-webkit-column-count: 3;\n}\n\np.startli, p.startdd {\n\tmargin-top: 2px;\n}\n\np.starttd {\n\tmargin-top: 0px;\n}\n\np.endli {\n\tmargin-bottom: 0px;\n}\n\np.enddd {\n\tmargin-bottom: 4px;\n}\n\np.endtd {\n\tmargin-bottom: 2px;\n}\n\n/* @end */\n\ncaption {\n\tfont-weight: bold;\n}\n\nspan.legend {\n        font-size: 70%;\n        text-align: center;\n}\n\nh3.version {\n        font-size: 90%;\n        text-align: center;\n}\n\ndiv.qindex, div.navtab{\n\tbackground-color: #FFF8F0;\n\tborder: 1px solid #FF8000;\n\ttext-align: center;\n}\n\ndiv.qindex, div.navpath {\n\twidth: 100%;\n\tline-height: 140%;\n}\n\ndiv.navtab {\n\tmargin-right: 15px;\n}\n\n/* @group Link Styling */\n\na {\n\tcolor: #000000;\n\tfont-weight: normal;\n\ttext-decoration: none;\n}\n\n.contents a:visited {\n\tcolor: #606060;\n}\n\n.contents{\n\tbackground-color: #FFFFFF;\n\tpadding-top:8px;\n\tpadding-bottom:8px;\n\tpadding-left:32px; \n\tpadding-right:32px;\n\tmargin:0px;\n\tmargin-left:auto; \n\tmargin-right:auto;\n\twidth:1216px;\n\tborder-bottom-left-radius: 8px;\n\tborder-bottom-right-radius: 8px;\n}\n\na:hover {\n\ttext-decoration: underline;\n}\n\na.qindex {\n\tfont-weight: bold;\n}\n\na.qindexHL {\n\tfont-weight: bold;\n\tbackground-color: #9CAFD4;\n\tcolor: #ffffff;\n\tborder: 1px double #869DCA;\n}\n\n.contents a.qindexHL:visited {\n        color: #ffffff;\n}\n\na.el {\n\tfont-weight: bold;\n}\n\na.elRef {\n}\n\na.code, a.code:visited, a.line, a.line:visited {\n\tcolor: #4665A2; \n}\n\na.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited {\n\tcolor: #4665A2; \n}\n\n/* @end */\n\ndl.el {\n\tmargin-left: -1cm;\n}\n\npre.fragment {\n        border: 1px solid #FF8000;\n        background-color: #FFF8F0;\n        padding: 4px 6px;\n        margin: 4px 8px 4px 2px;\n        overflow: auto;\n        word-wrap: break-word;\n        font-size:  9pt;\n        line-height: 125%;\n        font-family: monospace, fixed;\n        font-size: 105%;\n}\n\ndiv.fragment {\n\tpadding: 4px 6px;\n\tmargin: 4px 8px 4px 2px;\n\tbackground-color: #FFF8F0;\n\tborder: 1px solid #FF8000;\n}\n\ndiv.line {\n\tfont-family: monospace, fixed;\n\tfont-size: 13px;\n\tmin-height: 13px;\n\tline-height: 1.0;\n\ttext-wrap: unrestricted;\n\twhite-space: -moz-pre-wrap; /* Moz */\n\twhite-space: -pre-wrap;     /* Opera 4-6 */\n\twhite-space: -o-pre-wrap;   /* Opera 7 */\n\twhite-space: pre-wrap;      /* CSS3  */\n\tword-wrap: break-word;      /* IE 5.5+ */\n\ttext-indent: -53px;\n\tpadding-left: 53px;\n\tpadding-bottom: 0px;\n\tmargin: 0px;\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\ndiv.line.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 10px cyan;\n}\n\n\nspan.lineno {\n\tpadding-right: 4px;\n\ttext-align: right;\n\tborder-right: 2px solid #0F0;\n\tbackground-color: #E8E8E8;\n\twhite-space: pre;\n}\nspan.lineno a {\n\tbackground-color: #D8D8D8;\n}\n\nspan.lineno a:hover {\n\tbackground-color: #C8C8C8;\n}\n\ndiv.ah, span.ah {\n\tbackground-color: black;\n\tfont-weight: bold;\n\tcolor: #ffffff;\n\tmargin-bottom: 3px;\n\tmargin-top: 3px;\n\tpadding: 0.2em;\n\tborder: solid thin #333;\n\tborder-radius: 0.5em;\n\t-webkit-border-radius: .5em;\n\t-moz-border-radius: .5em;\n\tbox-shadow: 2px 2px 3px #999;\n\t-webkit-box-shadow: 2px 2px 3px #999;\n\t-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n\tbackground-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));\n\tbackground-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);\n}\n\ndiv.classindex ul {\n        list-style: none;\n        padding-left: 0;\n}\n\ndiv.classindex span.ai {\n        display: inline-block;\n}\n\ndiv.groupHeader {\n\tmargin-left: 16px;\n\tmargin-top: 12px;\n\tfont-weight: bold;\n}\n\ndiv.groupText {\n\tmargin-left: 16px;\n\tfont-style: italic;\n}\n\nbody {\n\tcolor: black;\n\tmargin: 0;\n}\n\ntd.indexkey {\n\tbackground-color: #FFF8F0;\n\tfont-weight: bold;\n\tborder: 1px solid #C4CFE5;\n\tmargin: 2px 0px 2px 0;\n\tpadding: 2px 10px;\n\twhite-space: nowrap;\n\tvertical-align: top;\n}\n\ntd.indexvalue {\n\tbackground-color: #FFF8F0;\n\tborder: 1px solid #C4CFE5;\n\tpadding: 2px 10px;\n\tmargin: 2px 0px;\n}\n\ntr.memlist {\n\tbackground-color: #FFF8F0;\n}\n\np.formulaDsp {\n\ttext-align: center;\n}\n\nimg.formulaDsp {\n\t\n}\n\nimg.formulaInl {\n\tvertical-align: middle;\n}\n\ndiv.center {\n\ttext-align: center;\n\tmargin-top: 0px;\n\tmargin-bottom: 0px;\n\tpadding: 0px;\n}\n\ndiv.center img {\n\tborder: 0px;\n}\n\naddress.footer {\n\tdisplay: none;\n}\n\nimg.footer {\n\tborder: 0px;\n\tvertical-align: middle;\n}\n\n/* @group Code Colorization */\n\nspan.keyword {\n\tcolor: #008000\n}\n\nspan.keywordtype {\n\tcolor: #604020\n}\n\nspan.keywordflow {\n\tcolor: #e08000\n}\n\nspan.comment {\n\tcolor: #800000\n}\n\nspan.preprocessor {\n\tcolor: #806020\n}\n\nspan.stringliteral {\n\tcolor: #002080\n}\n\nspan.charliteral {\n\tcolor: #008080\n}\n\nspan.vhdldigit { \n\tcolor: #ff00ff \n}\n\nspan.vhdlchar { \n\tcolor: #000000 \n}\n\nspan.vhdlkeyword { \n\tcolor: #700070 \n}\n\nspan.vhdllogic { \n\tcolor: #ff0000 \n}\n\nblockquote {\n        background-color: #F7F8FB;\n        border-left: 2px solid #9CAFD4;\n        margin: 0 24px 0 4px;\n        padding: 0 12px 0 16px;\n}\n\n/* @end */\n\n/*\n.search {\n\tcolor: #003399;\n\tfont-weight: bold;\n}\n\nform.search {\n\tmargin-bottom: 0px;\n\tmargin-top: 0px;\n}\n\ninput.search {\n\tfont-size: 75%;\n\tcolor: #000080;\n\tfont-weight: normal;\n\tbackground-color: #e8eef2;\n}\n*/\n\ntd.tiny {\n\tfont-size: 75%;\n}\n\n.dirtab {\n\tpadding: 4px;\n\tborder-collapse: collapse;\n\tborder: 1px solid #FF8000;\n}\n\nth.dirtab {\n\tbackground: #EBEFF6;\n\tfont-weight: bold;\n}\n\nhr {\n\theight: 0px;\n\tborder: none;\n\tborder-top: 1px solid #4A6AAA;\n}\n\nhr.footer {\n\tdisplay: none;\n}\n\n/* @group Member Descriptions */\n\ntable.memberdecls {\n\tborder-spacing: 0px;\n\tpadding: 0px;\n}\n\n.memberdecls td, .fieldtable tr {\n\t-webkit-transition-property: background-color, box-shadow;\n\t-webkit-transition-duration: 0.5s;\n\t-moz-transition-property: background-color, box-shadow;\n\t-moz-transition-duration: 0.5s;\n\t-ms-transition-property: background-color, box-shadow;\n\t-ms-transition-duration: 0.5s;\n\t-o-transition-property: background-color, box-shadow;\n\t-o-transition-duration: 0.5s;\n\ttransition-property: background-color, box-shadow;\n\ttransition-duration: 0.5s;\n}\n\n.memberdecls td.glow, .fieldtable tr.glow {\n\tbackground-color: cyan;\n\tbox-shadow: 0 0 15px cyan;\n}\n\n.mdescLeft, .mdescRight,\n.memItemLeft, .memItemRight,\n.memTemplItemLeft, .memTemplItemRight, .memTemplParams {\n\tbackground-color: #FFFCF8;\n\tborder: none;\n\tmargin: 4px;\n\tpadding: 1px 0 0 8px;\n}\n\n.mdescLeft, .mdescRight {\n\tpadding: 0px 8px 4px 8px;\n\tcolor: #555;\n}\n\n.memSeparator {\n        border-bottom: 1px solid #FFF8F0;\n        line-height: 1px;\n        margin: 0px;\n        padding: 0px;\n}\n\n.memItemLeft, .memTemplItemLeft {\n        white-space: nowrap;\n}\n\n.memItemRight {\n\twidth: 100%;\n}\n\n.memTemplParams {\n\tcolor: #bf6000;\n        white-space: nowrap;\n\tfont-size: 80%;\n}\n\n/* @end */\n\n/* @group Member Details */\n\n/* Styles for detailed member documentation */\n\n.memtemplate {\n\tfont-size: 80%;\n\tcolor: #4665A2;\n\tfont-weight: normal;\n\tmargin-left: 9px;\n}\n\n.memnav {\n\tbackground-color: #FFF8F0;\n\tborder: 1px solid #FF8000;\n\ttext-align: center;\n\tmargin: 2px;\n\tmargin-right: 15px;\n\tpadding: 2px;\n}\n\n.mempage {\n\twidth: 100%;\n}\n\n.memitem {\n\tpadding: 0;\n\tmargin-bottom: 10px;\n\tmargin-right: 5px;\n        -webkit-transition: box-shadow 0.5s linear;\n        -moz-transition: box-shadow 0.5s linear;\n        -ms-transition: box-shadow 0.5s linear;\n        -o-transition: box-shadow 0.5s linear;\n        transition: box-shadow 0.5s linear;\n        display: table !important;\n        width: 100%;\n}\n\n.memitem.glow {\n         box-shadow: 0 0 15px cyan;\n}\n\n.memname {\n        font-weight: bold;\n        margin-left: 6px;\n}\n\n.memname td {\n\tvertical-align: bottom;\n}\n\n.memproto, dl.reflist dt {\n        border-top: 1px solid #bf6000;\n        border-left: 1px solid #bf6000;\n        border-right: 1px solid #bf6000;\n        padding: 6px 0px 6px 0px;\n        /*color: #253555;*/\n        font-weight: bold;\n        /*text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);*/\n        /*background-image:url('nav_f.png');*/\n        background-repeat:repeat-x;\n        background-color: #FFF8F0;\n        /* opera specific markup */\n        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        border-top-right-radius: 4px;\n        border-top-left-radius: 4px;\n        /* firefox specific markup */\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        -moz-border-radius-topright: 4px;\n        -moz-border-radius-topleft: 4px;\n        /* webkit specific markup */\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        -webkit-border-top-right-radius: 4px;\n        -webkit-border-top-left-radius: 4px;\n\n}\n\n.memdoc, dl.reflist dd {\n        border-bottom: 1px solid #bf6000;      \n        border-left: 1px solid #bf6000;      \n        border-right: 1px solid #bf6000; \n        padding: 6px 10px 2px 10px;\n        border-top-width: 0;\n        background-image:url('nav_g.png');\n        background-repeat:repeat-x;\n        background-color: #FFFDFB;\n        /* opera specific markup */\n        border-bottom-left-radius: 4px;\n        border-bottom-right-radius: 4px;\n        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n        /* firefox specific markup */\n        -moz-border-radius-bottomleft: 4px;\n        -moz-border-radius-bottomright: 4px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;\n        /* webkit specific markup */\n        -webkit-border-bottom-left-radius: 4px;\n        -webkit-border-bottom-right-radius: 4px;\n        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);\n}\n\ndl.reflist dt {\n        padding: 5px;\n}\n\ndl.reflist dd {\n        margin: 0px 0px 10px 0px;\n        padding: 5px;\n}\n\n.paramkey {\n\ttext-align: right;\n}\n\n.paramtype {\n\twhite-space: nowrap;\n}\n\n.paramname {\n\tcolor: #602020;\n\twhite-space: nowrap;\n}\n.paramname em {\n\tfont-style: normal;\n}\n.paramname code {\n        line-height: 14px;\n}\n\n.params, .retval, .exception, .tparams {\n        margin-left: 0px;\n        padding-left: 0px;\n}       \n\n.params .paramname, .retval .paramname {\n        font-weight: bold;\n        vertical-align: top;\n}\n        \n.params .paramtype {\n        font-style: italic;\n        vertical-align: top;\n}       \n        \n.params .paramdir {\n        font-family: \"courier new\",courier,monospace;\n        vertical-align: top;\n}\n\ntable.mlabels {\n\tborder-spacing: 0px;\n}\n\ntd.mlabels-left {\n\twidth: 100%;\n\tpadding: 0px;\n}\n\ntd.mlabels-right {\n\tvertical-align: bottom;\n\tpadding: 0px;\n\twhite-space: nowrap;\n}\n\nspan.mlabels {\n        margin-left: 8px;\n}\n\nspan.mlabel {\n\tbackground-color: #728DC1;\n\tborder-top:1px solid #5373B4;\n\tborder-left:1px solid #5373B4;\n\tborder-right:1px solid #C4CFE5;\n\tborder-bottom:1px solid #C4CFE5;\n\ttext-shadow: none;\n\tcolor: white;\n\tmargin-right: 4px;\n\tpadding: 2px 3px;\n\tborder-radius: 3px;\n\tfont-size: 7pt;\n\twhite-space: nowrap;\n\tvertical-align: middle;\n}\n\n\n\n/* @end */\n\n/* these are for tree view inside a (index) page */\n\ndiv.directory {\n        margin: 10px 0px;\n        border-top: 1px solid #bf6000;\n        border-bottom: 1px solid #bf6000;\n        width: 100%;\n}\n\n.directory table {\n        border-collapse:collapse;\n}\n\n.directory td {\n\tmargin: 0px;\n\tpadding: 0px;\n\tvertical-align: top;\n}\n\n.directory td.entry {\n\twhite-space: nowrap;\n\tpadding-right: 6px;\n\tpadding-top: 3px;\n}\n\n.directory td.entry a {\n        outline:none;\n}\n\n.directory td.entry a img {\n        border: none;\n}\n\n.directory td.desc {\n\twidth: 100%;\n\tpadding-left: 6px;\n\tpadding-right: 6px;\n\tpadding-top: 3px;\n\tborder-left: 1px solid rgba(0,0,0,0.05);\n}\n\n.directory tr.even {\n\tpadding-left: 6px;\n\tbackground-color: #FFFDFB;\n}\n\n.directory img {\n\tvertical-align: -30%;\n}\n\n.directory .levels {\n        white-space: nowrap;\n        width: 100%;\n        text-align: right;\n        font-size: 9pt;\n}\n\n.directory .levels span {\n\tcursor: pointer;\n\tpadding-left: 2px;\n\tpadding-right: 2px;\n\tcolor: #bf6000;\n}\n\n.arrow {\n    color: #bf6000;\n    -webkit-user-select: none;\n    -khtml-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    cursor: pointer;\n    font-size: 80%;\n    display: inline-block;\n    width: 16px;\n    height: 22px;\n}\n\n.icon {\n    font-family: Arial, Helvetica;\n    font-weight: bold;\n    font-size: 12px;\n    height: 14px;\n    width: 16px;\n    display: inline-block;\n    background-color: #bf6000;\n    color: white;\n    text-align: center;\n    border-radius: 4px;\n    margin-left: 2px;\n    margin-right: 2px;\n}\n\n.icona {\n    width: 24px;\n    height: 22px;\n    display: inline-block;\n}\n\n.iconfopen {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('folderopen.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\n.iconfclosed {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('folderclosed.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\n.icondoc {\n    width: 24px;\n    height: 18px;\n    margin-bottom: 4px;\n    background-image:url('doc.png');\n    background-position: 0px -4px;\n    background-repeat: repeat-y;\n    vertical-align:top;\n    display: inline-block;\n}\n\ntable.directory {\n    font: 400 14px Roboto,sans-serif;\n}\n\n/* @end */\n\ndiv.dynheader {\n\tmargin-top: 8px;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\naddress {\n\tfont-style: normal;\n\tcolor: #2A3D61;\n}\n\ntable.doxtable {\n\tborder-collapse:collapse;\n\tmargin-top: 4px;\n\tmargin-bottom: 4px;\n}\n\ntable.doxtable td, table.doxtable th {\n\tborder: 1px solid #2D4068;\n\tpadding: 3px 7px 2px;\n}\n\ntable.doxtable th {\n\tbackground-color: #374F7F;\n\tcolor: #FFFFFF;\n\tfont-size: 110%;\n\tpadding-bottom: 4px;\n\tpadding-top: 5px;\n}\n\ntable.fieldtable {\n        /*width: 100%;*/\n        margin-bottom: 10px;\n        border: 1px solid #A8B8D9;\n        border-spacing: 0px;\n        -moz-border-radius: 4px;\n        -webkit-border-radius: 4px;\n        border-radius: 4px;\n        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;\n        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);\n}\n\n.fieldtable td, .fieldtable th {\n        padding: 3px 7px 2px;\n}\n\n.fieldtable td.fieldtype, .fieldtable td.fieldname {\n        white-space: nowrap;\n        border-right: 1px solid #A8B8D9;\n        border-bottom: 1px solid #A8B8D9;\n        vertical-align: top;\n}\n\n.fieldtable td.fieldname {\n        padding-top: 3px;\n}\n\n.fieldtable td.fielddoc {\n        border-bottom: 1px solid #A8B8D9;\n        /*width: 100%;*/\n}\n\n.fieldtable td.fielddoc p:first-child {\n        margin-top: 0px;\n}       \n        \n.fieldtable td.fielddoc p:last-child {\n        margin-bottom: 2px;\n}\n\n.fieldtable tr:last-child td {\n        border-bottom: none;\n}\n\n.fieldtable th {\n        background-image:url('nav_f.png');\n        background-repeat:repeat-x;\n        background-color: #E2E8F2;\n        font-size: 90%;\n        color: #253555;\n        padding-bottom: 4px;\n        padding-top: 5px;\n        text-align:left;\n        -moz-border-radius-topleft: 4px;\n        -moz-border-radius-topright: 4px;\n        -webkit-border-top-left-radius: 4px;\n        -webkit-border-top-right-radius: 4px;\n        border-top-left-radius: 4px;\n        border-top-right-radius: 4px;\n        border-bottom: 1px solid #A8B8D9;\n}\n\n\n.tabsearch {\n\ttop: 0px;\n\tleft: 10px;\n\theight: 36px;\n\tbackground-image: url('tab_b.png');\n\tz-index: 101;\n\toverflow: hidden;\n\tfont-size: 13px;\n}\n\n.navpath ul\n{\n\tfont-size: 11px;\n\t/*background-image:url('tab_b.png');*/\n\tbackground-color: #FFF8F0;\n\tbackground-repeat:repeat-x;\n\tbackground-position: 0 -5px;\n\theight:30px;\n\tline-height:30px;\n\tcolor:#bf6000;\n\tborder:solid 0px #C2CDE4;\n\toverflow:hidden;\n\tmargin:0px;\n\tpadding:0px;\n}\n\n.navpath li\n{\n\tlist-style-type:none;\n\tfloat:left;\n\tpadding-left:10px;\n\tpadding-right:15px;\n\tbackground-image:url('bc_s.png');\n\tbackground-repeat:no-repeat;\n\tbackground-position:right;\n\tcolor:#bf6000;\n}\n\n.navpath li.navelem a\n{\n\theight:32px;\n\tdisplay:block;\n\ttext-decoration: none;\n\toutline: none;\n\tcolor: #bf6000;\n\tfont-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;\n\ttext-decoration: none;        \n}\n\n.navpath li.navelem a:hover\n{\n\tcolor:#6884BD;\n}\n\n.navpath li.footer\n{\n        list-style-type:none;\n        float:right;\n        padding-left:10px;\n        padding-right:15px;\n        background-image:none;\n        background-repeat:no-repeat;\n        background-position:right;\n        color:#bf6000;\n        font-size: 8pt;\n}\n\ndiv.summary\n{\n\tfloat: right;\n\tfont-size: 8pt;\n\tpadding-right: 5px;\n\twidth: 50%;\n\ttext-align: right;\n}\n\ndiv.summary a\n{\n\twhite-space: nowrap;\n}\n\ndiv.ingroups\n{\n\tfont-size: 8pt;\n\twidth: 50%;\n\ttext-align: left;\n}\n\ndiv.ingroups a\n{\n\twhite-space: nowrap;\n}\n\ndiv.header\n{\n\tbackground-repeat:repeat-x;\n\tbackground-color: #FFFCF8;\n\n\tpadding:0px;\n\tmargin:0px;\n\tmargin-left:auto; \n\tmargin-right:auto;\n\twidth:1280px;\n}\n\ndiv.headertitle\n{\n\tpadding: 5px 5px 5px 10px;\n}\n\ndl\n{\n        padding: 0 0 0 10px;\n}\n\n/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */\ndl.section\n{\n\tmargin-left: 0px;\n\tpadding-left: 0px;\n}\n\ndl.note\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #D0C000;\n}\n\ndl.warning, dl.attention\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #FF0000;\n}\n\ndl.pre, dl.post, dl.invariant\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #00D000;\n}\n\ndl.deprecated\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #505050;\n}\n\ndl.todo\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #E0C000;\n}\n\ndl.test\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #3030E0;\n}\n\ndl.bug\n{\n        margin-left:-7px;\n        padding-left: 3px;\n        border-left:4px solid;\n        border-color: #C08050;\n}\n\ndl.section dd {\n\tmargin-bottom: 6px;\n}\n\n\n#projectlogo\n{\n\ttext-align: center;\n\tvertical-align: bottom;\n\tborder-collapse: separate;\n}\n \n#projectlogo img\n{ \n\tborder: 0px none;\n}\n \n#projectalign\n{\n        vertical-align: middle;\n}\n\n#projectname\n{\n\tfont: 300% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 2px 0px;\n\tcolor: #FF8000;\n}\n    \n#projectbrief\n{\n\tfont: 120% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#projectnumber\n{\n\tfont: 50% Tahoma, Arial,sans-serif;\n\tmargin: 0px;\n\tpadding: 0px;\n}\n\n#titlearea\n{\n\tpadding: 0px;\n\tmargin: 0px;\n\twidth: 100%;\n\tborder-bottom: 1px solid #5373B4;\n}\n\n.image\n{\n        text-align: center;\n}\n\n.dotgraph\n{\n        text-align: center;\n}\n\n.mscgraph\n{\n        text-align: center;\n}\n\n.diagraph\n{\n        text-align: center;\n}\n\n.caption\n{\n\tfont-weight: bold;\n}\n\ndiv.zoom\n{\n\tborder: 1px solid #90A5CE;\n}\n\ndl.citelist {\n        margin-bottom:50px;\n}\n\ndl.citelist dt {\n        color:#334975;\n        float:left;\n        font-weight:bold;\n        margin-right:10px;\n        padding:5px;\n}\n\ndl.citelist dd {\n        margin:2px 0;\n        padding:5px 0;\n}\n\ndiv.toc {\n        padding: 14px 25px;\n        background-color: #F4F6FA;\n        border: 1px solid #D8DFEE;\n        border-radius: 7px 7px 7px 7px;\n        float: right;\n        height: auto;\n        margin: 0 20px 10px 10px;\n        width: 200px;\n}\n\ndiv.toc li {\n        background: url(\"bdwn.png\") no-repeat scroll 0 5px transparent;\n        font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif;\n        margin-top: 5px;\n        padding-left: 10px;\n        padding-top: 2px;\n}\n\ndiv.toc h3 {\n        font: bold 12px/1.2 Arial,FreeSans,sans-serif;\n\tcolor: #4665A2;\n        border-bottom: 0 none;\n        margin: 0;\n}\n\ndiv.toc ul {\n        list-style: none outside none;\n        border: medium none;\n        padding: 0px;\n}       \n\ndiv.toc li.level1 {\n        margin-left: 0px;\n}\n\ndiv.toc li.level2 {\n        margin-left: 15px;\n}\n\ndiv.toc li.level3 {\n        margin-left: 30px;\n}\n\ndiv.toc li.level4 {\n        margin-left: 45px;\n}\n\n.inherit_header {\n\tfont-weight: bold;\n\tcolor: gray;\n\tcursor: pointer;\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n.inherit_header td {\n        padding: 6px 0px 2px 5px;\n}\n\n.inherit {\n        display: none;\n}\n\ntr.heading h2 {\n        margin-top: 12px;\n        margin-bottom: 4px;\n}\n\n/* tooltip related style info */\n\n.ttc {\n        position: absolute;\n        display: none;\n}\n\n#powerTip {\n\tcursor: default;\n\twhite-space: nowrap;\n\tbackground-color: white;\n\tborder: 1px solid gray;\n\tborder-radius: 4px 4px 4px 4px;\n\tbox-shadow: 1px 1px 7px gray;\n\tdisplay: none;\n\tfont-size: smaller;\n\tmax-width: 80%;\n\topacity: 0.9;\n\tpadding: 1ex 1em 1em;\n\tposition: absolute;\n\tz-index: 2147483647;\n}\n\n#powerTip div.ttdoc {\n        color: grey;\n\tfont-style: italic;\n}\n\n#powerTip div.ttname a {\n        font-weight: bold;\n}\n\n#powerTip div.ttname {\n        font-weight: bold;\n}\n\n#powerTip div.ttdeci {\n        color: #006318;\n}\n\n#powerTip div {\n        margin: 0px;\n        padding: 0px;\n        font: 12px/16px Roboto,sans-serif;\n}\n\n#powerTip:before, #powerTip:after {\n\tcontent: \"\";\n\tposition: absolute;\n\tmargin: 0px;\n}\n\n#powerTip.n:after,  #powerTip.n:before,\n#powerTip.s:after,  #powerTip.s:before,\n#powerTip.w:after,  #powerTip.w:before,\n#powerTip.e:after,  #powerTip.e:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.nw:after, #powerTip.nw:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tborder: solid transparent;\n\tcontent: \" \";\n\theight: 0;\n\twidth: 0;\n\tposition: absolute;\n}\n\n#powerTip.n:after,  #powerTip.s:after,\n#powerTip.w:after,  #powerTip.e:after,\n#powerTip.nw:after, #powerTip.ne:after,\n#powerTip.sw:after, #powerTip.se:after {\n\tborder-color: rgba(255, 255, 255, 0);\n}\n\n#powerTip.n:before,  #powerTip.s:before,\n#powerTip.w:before,  #powerTip.e:before,\n#powerTip.nw:before, #powerTip.ne:before,\n#powerTip.sw:before, #powerTip.se:before {\n\tborder-color: rgba(128, 128, 128, 0);\n}\n\n#powerTip.n:after,  #powerTip.n:before,\n#powerTip.ne:after, #powerTip.ne:before,\n#powerTip.nw:after, #powerTip.nw:before {\n\ttop: 100%;\n}\n\n#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after {\n\tborder-top-color: #ffffff;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n#powerTip.n:before {\n\tborder-top-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n#powerTip.n:after, #powerTip.n:before {\n\tleft: 50%;\n}\n\n#powerTip.nw:after, #powerTip.nw:before {\n\tright: 14px;\n}\n\n#powerTip.ne:after, #powerTip.ne:before {\n\tleft: 14px;\n}\n\n#powerTip.s:after,  #powerTip.s:before,\n#powerTip.se:after, #powerTip.se:before,\n#powerTip.sw:after, #powerTip.sw:before {\n\tbottom: 100%;\n}\n\n#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after {\n\tborder-bottom-color: #ffffff;\n\tborder-width: 10px;\n\tmargin: 0px -10px;\n}\n\n#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before {\n\tborder-bottom-color: #808080;\n\tborder-width: 11px;\n\tmargin: 0px -11px;\n}\n\n#powerTip.s:after, #powerTip.s:before {\n\tleft: 50%;\n}\n\n#powerTip.sw:after, #powerTip.sw:before {\n\tright: 14px;\n}\n\n#powerTip.se:after, #powerTip.se:before {\n\tleft: 14px;\n}\n\n#powerTip.e:after, #powerTip.e:before {\n\tleft: 100%;\n}\n#powerTip.e:after {\n\tborder-left-color: #ffffff;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.e:before {\n\tborder-left-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n#powerTip.w:after, #powerTip.w:before {\n\tright: 100%;\n}\n#powerTip.w:after {\n\tborder-right-color: #ffffff;\n\tborder-width: 10px;\n\ttop: 50%;\n\tmargin-top: -10px;\n}\n#powerTip.w:before {\n\tborder-right-color: #808080;\n\tborder-width: 11px;\n\ttop: 50%;\n\tmargin-top: -11px;\n}\n\n#titlearea\n{\n\tmargin: 0px;\n\tpadding-top: 8px;\n\tpadding-bottom: 8px;\n\tmargin-top: 32px;\n\twidth: 100%;\n\tborder-bottom: 0px solid #FF8000;\n\tborder-top-left-radius: 8px;\n\tborder-top-right-radius: 8px;\n\tbackground-color:#FFFFFF;\n}\n\n#top\n{\n\tmargin-left:auto; \n\tmargin-right:auto;\n\twidth:1280px;\n}\n\n@media print\n{\n  #top { display: none; }\n  #side-nav { display: none; }\n  #nav-path { display: none; }\n  body { overflow:visible; }\n  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }\n  .summary { display: none; }\n  .memitem { page-break-inside: avoid; }\n  #doc-content\n  {\n    margin-left:0 !important;\n    height:auto !important;\n    width:auto !important;\n    overflow:inherit;\n    display:inline;\n  }\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/CMakeLists.txt",
    "content": "file(GLOB ROOT_SOURCE *.cpp)\nfile(GLOB ROOT_INLINE *.inl)\nfile(GLOB ROOT_HEADER *.hpp)\nfile(GLOB ROOT_TEXT ../*.txt)\nfile(GLOB ROOT_MD ../*.md)\nfile(GLOB ROOT_NAT ../util/glm.natvis)\n\nfile(GLOB_RECURSE CORE_SOURCE ./detail/*.cpp)\nfile(GLOB_RECURSE CORE_INLINE ./detail/*.inl)\nfile(GLOB_RECURSE CORE_HEADER ./detail/*.hpp)\n\nfile(GLOB_RECURSE EXT_SOURCE ./ext/*.cpp)\nfile(GLOB_RECURSE EXT_INLINE ./ext/*.inl)\nfile(GLOB_RECURSE EXT_HEADER ./ext/*.hpp)\n\nfile(GLOB_RECURSE GTC_SOURCE ./gtc/*.cpp)\nfile(GLOB_RECURSE GTC_INLINE ./gtc/*.inl)\nfile(GLOB_RECURSE GTC_HEADER ./gtc/*.hpp)\n\nfile(GLOB_RECURSE GTX_SOURCE ./gtx/*.cpp)\nfile(GLOB_RECURSE GTX_INLINE ./gtx/*.inl)\nfile(GLOB_RECURSE GTX_HEADER ./gtx/*.hpp)\n\nfile(GLOB_RECURSE SIMD_SOURCE ./simd/*.cpp)\nfile(GLOB_RECURSE SIMD_INLINE ./simd/*.inl)\nfile(GLOB_RECURSE SIMD_HEADER ./simd/*.h)\n\nsource_group(\"Text Files\" FILES ${ROOT_TEXT} ${ROOT_MD})\nsource_group(\"Core Files\" FILES ${CORE_SOURCE})\nsource_group(\"Core Files\" FILES ${CORE_INLINE})\nsource_group(\"Core Files\" FILES ${CORE_HEADER})\nsource_group(\"EXT Files\" FILES ${EXT_SOURCE})\nsource_group(\"EXT Files\" FILES ${EXT_INLINE})\nsource_group(\"EXT Files\" FILES ${EXT_HEADER})\nsource_group(\"GTC Files\" FILES ${GTC_SOURCE})\nsource_group(\"GTC Files\" FILES ${GTC_INLINE})\nsource_group(\"GTC Files\" FILES ${GTC_HEADER})\nsource_group(\"GTX Files\" FILES ${GTX_SOURCE})\nsource_group(\"GTX Files\" FILES ${GTX_INLINE})\nsource_group(\"GTX Files\" FILES ${GTX_HEADER})\nsource_group(\"SIMD Files\" FILES ${SIMD_SOURCE})\nsource_group(\"SIMD Files\" FILES ${SIMD_INLINE})\nsource_group(\"SIMD Files\" FILES ${SIMD_HEADER})\n\nadd_library(glm INTERFACE)\n\ninclude(GNUInstallDirs)\n\ntarget_include_directories(glm INTERFACE\n\t$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>\n\t$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>\n)\n\ninstall(TARGETS glm EXPORT glm)\n\nif(BUILD_STATIC_LIBS)\nadd_library(glm_static STATIC ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT}\n\t${ROOT_SOURCE}    ${ROOT_INLINE}    ${ROOT_HEADER}\n\t${CORE_SOURCE}    ${CORE_INLINE}    ${CORE_HEADER}\n\t${EXT_SOURCE}     ${EXT_INLINE}     ${EXT_HEADER}\n\t${GTC_SOURCE}     ${GTC_INLINE}     ${GTC_HEADER}\n\t${GTX_SOURCE}     ${GTX_INLINE}     ${GTX_HEADER}\n\t${SIMD_SOURCE}    ${SIMD_INLINE}    ${SIMD_HEADER})\n\ttarget_link_libraries(glm_static PUBLIC glm)\n\tadd_library(glm::glm_static ALIAS glm_static)\nendif()\n\nif(BUILD_SHARED_LIBS)\nadd_library(glm_shared SHARED ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT}\n\t${ROOT_SOURCE}    ${ROOT_INLINE}    ${ROOT_HEADER}\n\t${CORE_SOURCE}    ${CORE_INLINE}    ${CORE_HEADER}\n\t${EXT_SOURCE}     ${EXT_INLINE}     ${EXT_HEADER}\n\t${GTC_SOURCE}     ${GTC_INLINE}     ${GTC_HEADER}\n\t${GTX_SOURCE}     ${GTX_INLINE}     ${GTX_HEADER}\n\t${SIMD_SOURCE}    ${SIMD_INLINE}    ${SIMD_HEADER})\n\ttarget_link_libraries(glm_shared PUBLIC glm)\n\tadd_library(glm::glm_shared ALIAS glm_shared)\nendif()\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/common.hpp",
    "content": "/// @ref core\n/// @file glm/common.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n///\n/// @defgroup core_func_common Common functions\n/// @ingroup core\n///\n/// Provides GLSL common functions\n///\n/// These all operate component-wise. The description is per component.\n///\n/// Include <glm/common.hpp> to use these core features.\n\n#pragma once\n\n#include \"detail/qualifier.hpp\"\n#include \"detail/_fixes.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_func_common\n\t/// @{\n\n\t/// Returns x if x >= 0; otherwise, it returns -x.\n\t///\n\t/// @tparam genType floating-point or signed integer; scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml\">GLSL abs man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType abs(genType x);\n\n\t/// Returns x if x >= 0; otherwise, it returns -x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or signed integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml\">GLSL abs man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> abs(vec<L, T, Q> const& x);\n\n\t/// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/sign.xml\">GLSL sign man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> sign(vec<L, T, Q> const& x);\n\n\t/// Returns a value equal to the nearest integer that is less then or equal to x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floor.xml\">GLSL floor man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> floor(vec<L, T, Q> const& x);\n\n\t/// Returns a value equal to the nearest integer to x\n\t/// whose absolute value is not larger than the absolute value of x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/trunc.xml\">GLSL trunc man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> trunc(vec<L, T, Q> const& x);\n\n\t/// Returns a value equal to the nearest integer to x.\n\t/// The fraction 0.5 will round in a direction chosen by the\n\t/// implementation, presumably the direction that is fastest.\n\t/// This includes the possibility that round(x) returns the\n\t/// same value as roundEven(x) for all values of x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml\">GLSL round man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> round(vec<L, T, Q> const& x);\n\n\t/// Returns a value equal to the nearest integer to x.\n\t/// A fractional part of 0.5 will round toward the nearest even\n\t/// integer. (Both 3.5 and 4.5 for x will return 4.0.)\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/roundEven.xml\">GLSL roundEven man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\t/// @see <a href=\"http://developer.amd.com/documentation/articles/pages/New-Round-to-Even-Technique.aspx\">New round to even technique</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> roundEven(vec<L, T, Q> const& x);\n\n\t/// Returns a value equal to the nearest integer\n\t/// that is greater than or equal to x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/ceil.xml\">GLSL ceil man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> ceil(vec<L, T, Q> const& x);\n\n\t/// Return x - floor(x).\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml\">GLSL fract man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fract(genType x);\n\n\t/// Return x - floor(x).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml\">GLSL fract man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fract(vec<L, T, Q> const& x);\n\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType mod(genType x, genType y);\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> mod(vec<L, T, Q> const& x, T y);\n\n\t/// Modulus. Returns x - y * floor(x / y)\n\t/// for each component in x using the floating point value y.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types, include glm/gtc/integer for integer scalar types support\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml\">GLSL mod man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> mod(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns the fractional part of x and sets i to the integer\n\t/// part (as a whole number floating point value). Both the\n\t/// return value and the output parameter will have the same\n\t/// sign as x.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/modf.xml\">GLSL modf man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType modf(genType x, genType& i);\n\n\t/// Returns y if y < x; otherwise, it returns x.\n\t///\n\t/// @tparam genType Floating-point or integer; scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml\">GLSL min man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType min(genType x, genType y);\n\n\t/// Returns y if y < x; otherwise, it returns x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml\">GLSL min man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, T y);\n\n\t/// Returns y if y < x; otherwise, it returns x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml\">GLSL min man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns y if x < y; otherwise, it returns x.\n\t///\n\t/// @tparam genType Floating-point or integer; scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml\">GLSL max man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType max(genType x, genType y);\n\n\t/// Returns y if x < y; otherwise, it returns x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml\">GLSL max man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, T y);\n\n\t/// Returns y if x < y; otherwise, it returns x.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml\">GLSL max man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns min(max(x, minVal), maxVal) for each component in x\n\t/// using the floating-point values minVal and maxVal.\n\t///\n\t/// @tparam genType Floating-point or integer; scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml\">GLSL clamp man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal);\n\n\t/// Returns min(max(x, minVal), maxVal) for each component in x\n\t/// using the floating-point values minVal and maxVal.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml\">GLSL clamp man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> clamp(vec<L, T, Q> const& x, T minVal, T maxVal);\n\n\t/// Returns min(max(x, minVal), maxVal) for each component in x\n\t/// using the floating-point values minVal and maxVal.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml\">GLSL clamp man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> clamp(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal);\n\n\t/// If genTypeU is a floating scalar or vector:\n\t/// Returns x * (1.0 - a) + y * a, i.e., the linear blend of\n\t/// x and y using the floating-point value a.\n\t/// The value for a is not restricted to the range [0, 1].\n\t///\n\t/// If genTypeU is a boolean scalar or vector:\n\t/// Selects which vector each returned component comes\n\t/// from. For a component of 'a' that is false, the\n\t/// corresponding component of 'x' is returned. For a\n\t/// component of 'a' that is true, the corresponding\n\t/// component of 'y' is returned. Components of 'x' and 'y' that\n\t/// are not selected are allowed to be invalid floating point\n\t/// values and will have no effect on the results. Thus, this\n\t/// provides different functionality than\n\t/// genType mix(genType x, genType y, genType(a))\n\t/// where a is a Boolean vector.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/mix.xml\">GLSL mix man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\t///\n\t/// @param[in]  x Value to interpolate.\n\t/// @param[in]  y Value to interpolate.\n\t/// @param[in]  a Interpolant.\n\t///\n\t/// @tparam\tgenTypeT Floating point scalar or vector.\n\t/// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT.\n\t///\n\t/// @code\n\t/// #include <glm/glm.hpp>\n\t/// ...\n\t/// float a;\n\t/// bool b;\n\t/// glm::dvec3 e;\n\t/// glm::dvec3 f;\n\t/// glm::vec4 g;\n\t/// glm::vec4 h;\n\t/// ...\n\t/// glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors.\n\t/// glm::vec4 s = glm::mix(g, h, b); // Returns g or h;\n\t/// glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second.\n\t/// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter.\n\t/// @endcode\n\ttemplate<typename genTypeT, typename genTypeU>\n\tGLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a);\n\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, U, Q> const& a);\n\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U a);\n\n\t/// Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml\">GLSL step man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType step(genType edge, genType x);\n\n\t/// Returns 0.0 if x < edge, otherwise it returns 1.0.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml\">GLSL step man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> step(T edge, vec<L, T, Q> const& x);\n\n\t/// Returns 0.0 if x < edge, otherwise it returns 1.0.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml\">GLSL step man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> step(vec<L, T, Q> const& edge, vec<L, T, Q> const& x);\n\n\t/// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and\n\t/// performs smooth Hermite interpolation between 0 and 1\n\t/// when edge0 < x < edge1. This is useful in cases where\n\t/// you would want a threshold function with a smooth\n\t/// transition. This is equivalent to:\n\t/// genType t;\n\t/// t = clamp ((x - edge0) / (edge1 - edge0), 0, 1);\n\t/// return t * t * (3 - 2 * t);\n\t/// Results are undefined if edge0 >= edge1.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/smoothstep.xml\">GLSL smoothstep man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x);\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> smoothstep(T edge0, T edge1, vec<L, T, Q> const& x);\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> smoothstep(vec<L, T, Q> const& edge0, vec<L, T, Q> const& edge1, vec<L, T, Q> const& x);\n\n\t/// Returns true if x holds a NaN (not a number)\n\t/// representation in the underlying implementation's set of\n\t/// floating point representations. Returns false otherwise,\n\t/// including for implementations with no NaN\n\t/// representations.\n\t///\n\t/// /!\\ When using compiler fast math, this function may fail.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml\">GLSL isnan man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> isnan(vec<L, T, Q> const& x);\n\n\t/// Returns true if x holds a positive infinity or negative\n\t/// infinity representation in the underlying implementation's\n\t/// set of floating point representations. Returns false\n\t/// otherwise, including for implementations with no infinity\n\t/// representations.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/isinf.xml\">GLSL isinf man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> isinf(vec<L, T, Q> const& x);\n\n\t/// Returns a signed integer value representing\n\t/// the encoding of a floating-point value. The floating-point\n\t/// value's bit-level representation is preserved.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml\">GLSL floatBitsToInt man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\tGLM_FUNC_DECL int floatBitsToInt(float const& v);\n\n\t/// Returns a signed integer value representing\n\t/// the encoding of a floating-point value. The floatingpoint\n\t/// value's bit-level representation is preserved.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml\">GLSL floatBitsToInt man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int, Q> floatBitsToInt(vec<L, float, Q> const& v);\n\n\t/// Returns a unsigned integer value representing\n\t/// the encoding of a floating-point value. The floatingpoint\n\t/// value's bit-level representation is preserved.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml\">GLSL floatBitsToUint man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\tGLM_FUNC_DECL uint floatBitsToUint(float const& v);\n\n\t/// Returns a unsigned integer value representing\n\t/// the encoding of a floating-point value. The floatingpoint\n\t/// value's bit-level representation is preserved.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml\">GLSL floatBitsToUint man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL vec<L, uint, Q> floatBitsToUint(vec<L, float, Q> const& v);\n\n\t/// Returns a floating-point value corresponding to a signed\n\t/// integer encoding of a floating-point value.\n\t/// If an inf or NaN is passed in, it will not signal, and the\n\t/// resulting floating point value is unspecified. Otherwise,\n\t/// the bit-level representation is preserved.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml\">GLSL intBitsToFloat man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\tGLM_FUNC_DECL float intBitsToFloat(int const& v);\n\n\t/// Returns a floating-point value corresponding to a signed\n\t/// integer encoding of a floating-point value.\n\t/// If an inf or NaN is passed in, it will not signal, and the\n\t/// resulting floating point value is unspecified. Otherwise,\n\t/// the bit-level representation is preserved.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml\">GLSL intBitsToFloat man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL vec<L, float, Q> intBitsToFloat(vec<L, int, Q> const& v);\n\n\t/// Returns a floating-point value corresponding to a\n\t/// unsigned integer encoding of a floating-point value.\n\t/// If an inf or NaN is passed in, it will not signal, and the\n\t/// resulting floating point value is unspecified. Otherwise,\n\t/// the bit-level representation is preserved.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml\">GLSL uintBitsToFloat man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\tGLM_FUNC_DECL float uintBitsToFloat(uint const& v);\n\n\t/// Returns a floating-point value corresponding to a\n\t/// unsigned integer encoding of a floating-point value.\n\t/// If an inf or NaN is passed in, it will not signal, and the\n\t/// resulting floating point value is unspecified. Otherwise,\n\t/// the bit-level representation is preserved.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml\">GLSL uintBitsToFloat man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL vec<L, float, Q> uintBitsToFloat(vec<L, uint, Q> const& v);\n\n\t/// Computes and returns a * b + c.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/fma.xml\">GLSL fma man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fma(genType const& a, genType const& b, genType const& c);\n\n\t/// Splits x into a floating-point significand in the range\n\t/// [0.5, 1.0) and an integral exponent of two, such that:\n\t/// x = significand * exp(2, exponent)\n\t///\n\t/// The significand is returned by the function and the\n\t/// exponent is returned in the parameter exp. For a\n\t/// floating-point value of zero, the significant and exponent\n\t/// are both zero. For a floating-point value that is an\n\t/// infinity or is not a number, the results are undefined.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/frexp.xml\">GLSL frexp man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType frexp(genType x, int& exp);\n\t\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> frexp(vec<L, T, Q> const& v, vec<L, int, Q>& exp);\n\n\t/// Builds a floating-point number from x and the\n\t/// corresponding integral exponent of two in exp, returning:\n\t/// significand * exp(2, exponent)\n\t///\n\t/// If this product is too large to be represented in the\n\t/// floating-point type, the result is undefined.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/ldexp.xml\">GLSL ldexp man page</a>;\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType ldexp(genType const& x, int const& exp);\n\t\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> ldexp(vec<L, T, Q> const& v, vec<L, int, Q> const& exp);\n\n\t/// @}\n}//namespace glm\n\n#include \"detail/func_common.inl\"\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/_features.hpp",
    "content": "#pragma once\n\n// #define GLM_CXX98_EXCEPTIONS\n// #define GLM_CXX98_RTTI\n\n// #define GLM_CXX11_RVALUE_REFERENCES\n// Rvalue references - GCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html\n\n// GLM_CXX11_TRAILING_RETURN\n// Rvalue references for *this - GCC not supported\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm\n\n// GLM_CXX11_NONSTATIC_MEMBER_INIT\n// Initialization of class objects by rvalues - GCC any\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html\n\n// GLM_CXX11_NONSTATIC_MEMBER_INIT\n// Non-static data member initializers - GCC 4.7\n// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm\n\n// #define GLM_CXX11_VARIADIC_TEMPLATE\n// Variadic templates - GCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf\n\n//\n// Extending variadic template template parameters - GCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf\n\n// #define GLM_CXX11_GENERALIZED_INITIALIZERS\n// Initializer lists - GCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm\n\n// #define GLM_CXX11_STATIC_ASSERT\n// Static assertions - GCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html\n\n// #define GLM_CXX11_AUTO_TYPE\n// auto-typed variables - GCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf\n\n// #define GLM_CXX11_AUTO_TYPE\n// Multi-declarator auto - GCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf\n\n// #define GLM_CXX11_AUTO_TYPE\n// Removal of auto as a storage-class specifier - GCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm\n\n// #define GLM_CXX11_AUTO_TYPE\n// New function declarator syntax - GCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm\n\n// #define GLM_CXX11_LAMBDAS\n// New wording for C++0x lambdas - GCC 4.5\n// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf\n\n// #define GLM_CXX11_DECLTYPE\n// Declared type of an expression - GCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf\n\n//\n// Right angle brackets - GCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html\n\n//\n// Default template arguments for function templates\tDR226\tGCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226\n\n//\n// Solving the SFINAE problem for expressions\tDR339\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html\n\n// #define GLM_CXX11_ALIAS_TEMPLATE\n// Template aliases\tN2258\tGCC 4.7\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf\n\n//\n// Extern templates\tN1987\tYes\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm\n\n// #define GLM_CXX11_NULLPTR\n// Null pointer constant\tN2431\tGCC 4.6\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf\n\n// #define GLM_CXX11_STRONG_ENUMS\n// Strongly-typed enums\tN2347\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf\n\n//\n// Forward declarations for enums\tN2764\tGCC 4.6\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf\n\n//\n// Generalized attributes\tN2761\tGCC 4.8\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf\n\n//\n// Generalized constant expressions\tN2235\tGCC 4.6\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf\n\n//\n// Alignment support\tN2341\tGCC 4.8\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf\n\n// #define GLM_CXX11_DELEGATING_CONSTRUCTORS\n// Delegating constructors\tN1986\tGCC 4.7\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf\n\n//\n// Inheriting constructors\tN2540\tGCC 4.8\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm\n\n// #define GLM_CXX11_EXPLICIT_CONVERSIONS\n// Explicit conversion operators\tN2437\tGCC 4.5\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf\n\n//\n// New character types\tN2249\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html\n\n//\n// Unicode string literals\tN2442\tGCC 4.5\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm\n\n//\n// Raw string literals\tN2442\tGCC 4.5\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm\n\n//\n// Universal character name literals\tN2170\tGCC 4.5\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html\n\n// #define GLM_CXX11_USER_LITERALS\n// User-defined literals\t\tN2765\tGCC 4.7\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf\n\n//\n// Standard Layout Types\tN2342\tGCC 4.5\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm\n\n// #define GLM_CXX11_DEFAULTED_FUNCTIONS\n// #define GLM_CXX11_DELETED_FUNCTIONS\n// Defaulted and deleted functions\tN2346\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm\n\n//\n// Extended friend declarations\tN1791\tGCC 4.7\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf\n\n//\n// Extending sizeof\tN2253\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html\n\n// #define GLM_CXX11_INLINE_NAMESPACES\n// Inline namespaces\tN2535\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm\n\n// #define GLM_CXX11_UNRESTRICTED_UNIONS\n// Unrestricted unions\tN2544\tGCC 4.6\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf\n\n// #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS\n// Local and unnamed types as template arguments\tN2657\tGCC 4.5\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm\n\n// #define GLM_CXX11_RANGE_FOR\n// Range-based for\tN2930\tGCC 4.6\n// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html\n\n// #define GLM_CXX11_OVERRIDE_CONTROL\n// Explicit virtual overrides\tN2928 N3206 N3272\tGCC 4.7\n// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm\n\n//\n// Minimal support for garbage collection and reachability-based leak detection\tN2670\tNo\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm\n\n// #define GLM_CXX11_NOEXCEPT\n// Allowing move constructors to throw [noexcept]\tN3050\tGCC 4.6 (core language only)\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html\n\n//\n// Defining move special member functions\tN3053\tGCC 4.6\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html\n\n//\n// Sequence points\tN2239\tYes\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html\n\n//\n// Atomic operations\tN2427\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html\n\n//\n// Strong Compare and Exchange\tN2748\tGCC 4.5\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html\n\n//\n// Bidirectional Fences\tN2752\tGCC 4.8\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm\n\n//\n// Memory model\tN2429\tGCC 4.8\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm\n\n//\n// Data-dependency ordering: atomics and memory model\tN2664\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm\n\n//\n// Propagating exceptions\tN2179\tGCC 4.4\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html\n\n//\n// Abandoning a process and at_quick_exit\tN2440\tGCC 4.8\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm\n\n//\n// Allow atomics use in signal handlers\tN2547\tYes\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm\n\n//\n// Thread-local storage\tN2659\tGCC 4.8\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm\n\n//\n// Dynamic initialization and destruction with concurrency\tN2660\tGCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm\n\n//\n// __func__ predefined identifier\tN2340\tGCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm\n\n//\n// C99 preprocessor\tN1653\tGCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm\n\n//\n// long long\tN1811\tGCC 4.3\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf\n\n//\n// Extended integral types\tN1988\tYes\n// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf\n\n#if(GLM_COMPILER & GLM_COMPILER_GCC)\n\n#\tdefine GLM_CXX11_STATIC_ASSERT\n\n#elif(GLM_COMPILER & GLM_COMPILER_CLANG)\n#\tif(__has_feature(cxx_exceptions))\n#\t\tdefine GLM_CXX98_EXCEPTIONS\n#\tendif\n\n#\tif(__has_feature(cxx_rtti))\n#\t\tdefine GLM_CXX98_RTTI\n#\tendif\n\n#\tif(__has_feature(cxx_access_control_sfinae))\n#\t\tdefine GLM_CXX11_ACCESS_CONTROL_SFINAE\n#\tendif\n\n#\tif(__has_feature(cxx_alias_templates))\n#\t\tdefine GLM_CXX11_ALIAS_TEMPLATE\n#\tendif\n\n#\tif(__has_feature(cxx_alignas))\n#\t\tdefine GLM_CXX11_ALIGNAS\n#\tendif\n\n#\tif(__has_feature(cxx_attributes))\n#\t\tdefine GLM_CXX11_ATTRIBUTES\n#\tendif\n\n#\tif(__has_feature(cxx_constexpr))\n#\t\tdefine GLM_CXX11_CONSTEXPR\n#\tendif\n\n#\tif(__has_feature(cxx_decltype))\n#\t\tdefine GLM_CXX11_DECLTYPE\n#\tendif\n\n#\tif(__has_feature(cxx_default_function_template_args))\n#\t\tdefine GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS\n#\tendif\n\n#\tif(__has_feature(cxx_defaulted_functions))\n#\t\tdefine GLM_CXX11_DEFAULTED_FUNCTIONS\n#\tendif\n\n#\tif(__has_feature(cxx_delegating_constructors))\n#\t\tdefine GLM_CXX11_DELEGATING_CONSTRUCTORS\n#\tendif\n\n#\tif(__has_feature(cxx_deleted_functions))\n#\t\tdefine GLM_CXX11_DELETED_FUNCTIONS\n#\tendif\n\n#\tif(__has_feature(cxx_explicit_conversions))\n#\t\tdefine GLM_CXX11_EXPLICIT_CONVERSIONS\n#\tendif\n\n#\tif(__has_feature(cxx_generalized_initializers))\n#\t\tdefine GLM_CXX11_GENERALIZED_INITIALIZERS\n#\tendif\n\n#\tif(__has_feature(cxx_implicit_moves))\n#\t\tdefine GLM_CXX11_IMPLICIT_MOVES\n#\tendif\n\n#\tif(__has_feature(cxx_inheriting_constructors))\n#\t\tdefine GLM_CXX11_INHERITING_CONSTRUCTORS\n#\tendif\n\n#\tif(__has_feature(cxx_inline_namespaces))\n#\t\tdefine GLM_CXX11_INLINE_NAMESPACES\n#\tendif\n\n#\tif(__has_feature(cxx_lambdas))\n#\t\tdefine GLM_CXX11_LAMBDAS\n#\tendif\n\n#\tif(__has_feature(cxx_local_type_template_args))\n#\t\tdefine GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS\n#\tendif\n\n#\tif(__has_feature(cxx_noexcept))\n#\t\tdefine GLM_CXX11_NOEXCEPT\n#\tendif\n\n#\tif(__has_feature(cxx_nonstatic_member_init))\n#\t\tdefine GLM_CXX11_NONSTATIC_MEMBER_INIT\n#\tendif\n\n#\tif(__has_feature(cxx_nullptr))\n#\t\tdefine GLM_CXX11_NULLPTR\n#\tendif\n\n#\tif(__has_feature(cxx_override_control))\n#\t\tdefine GLM_CXX11_OVERRIDE_CONTROL\n#\tendif\n\n#\tif(__has_feature(cxx_reference_qualified_functions))\n#\t\tdefine GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS\n#\tendif\n\n#\tif(__has_feature(cxx_range_for))\n#\t\tdefine GLM_CXX11_RANGE_FOR\n#\tendif\n\n#\tif(__has_feature(cxx_raw_string_literals))\n#\t\tdefine GLM_CXX11_RAW_STRING_LITERALS\n#\tendif\n\n#\tif(__has_feature(cxx_rvalue_references))\n#\t\tdefine GLM_CXX11_RVALUE_REFERENCES\n#\tendif\n\n#\tif(__has_feature(cxx_static_assert))\n#\t\tdefine GLM_CXX11_STATIC_ASSERT\n#\tendif\n\n#\tif(__has_feature(cxx_auto_type))\n#\t\tdefine GLM_CXX11_AUTO_TYPE\n#\tendif\n\n#\tif(__has_feature(cxx_strong_enums))\n#\t\tdefine GLM_CXX11_STRONG_ENUMS\n#\tendif\n\n#\tif(__has_feature(cxx_trailing_return))\n#\t\tdefine GLM_CXX11_TRAILING_RETURN\n#\tendif\n\n#\tif(__has_feature(cxx_unicode_literals))\n#\t\tdefine GLM_CXX11_UNICODE_LITERALS\n#\tendif\n\n#\tif(__has_feature(cxx_unrestricted_unions))\n#\t\tdefine GLM_CXX11_UNRESTRICTED_UNIONS\n#\tendif\n\n#\tif(__has_feature(cxx_user_literals))\n#\t\tdefine GLM_CXX11_USER_LITERALS\n#\tendif\n\n#\tif(__has_feature(cxx_variadic_templates))\n#\t\tdefine GLM_CXX11_VARIADIC_TEMPLATES\n#\tendif\n\n#endif//(GLM_COMPILER & GLM_COMPILER_CLANG)\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/_fixes.hpp",
    "content": "#include <cmath>\n\n//! Workaround for compatibility with other libraries\n#ifdef max\n#undef max\n#endif\n\n//! Workaround for compatibility with other libraries\n#ifdef min\n#undef min\n#endif\n\n//! Workaround for Android\n#ifdef isnan\n#undef isnan\n#endif\n\n//! Workaround for Android\n#ifdef isinf\n#undef isinf\n#endif\n\n//! Workaround for Chrone Native Client\n#ifdef log2\n#undef log2\n#endif\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/_noise.hpp",
    "content": "#pragma once\n\n#include \"../common.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T mod289(T const& x)\n\t{\n\t\treturn x - floor(x * (static_cast<T>(1.0) / static_cast<T>(289.0))) * static_cast<T>(289.0);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T permute(T const& x)\n\t{\n\t\treturn mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, T, Q> permute(vec<2, T, Q> const& x)\n\t{\n\t\treturn mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> permute(vec<3, T, Q> const& x)\n\t{\n\t\treturn mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> permute(vec<4, T, Q> const& x)\n\t{\n\t\treturn mod289(((x * static_cast<T>(34)) + static_cast<T>(1)) * x);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T taylorInvSqrt(T const& r)\n\t{\n\t\treturn static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, T, Q> taylorInvSqrt(vec<2, T, Q> const& r)\n\t{\n\t\treturn static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> taylorInvSqrt(vec<3, T, Q> const& r)\n\t{\n\t\treturn static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> taylorInvSqrt(vec<4, T, Q> const& r)\n\t{\n\t\treturn static_cast<T>(1.79284291400159) - static_cast<T>(0.85373472095314) * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, T, Q> fade(vec<2, T, Q> const& t)\n\t{\n\t\treturn (t * t * t) * (t * (t * static_cast<T>(6) - static_cast<T>(15)) + static_cast<T>(10));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> fade(vec<3, T, Q> const& t)\n\t{\n\t\treturn (t * t * t) * (t * (t * static_cast<T>(6) - static_cast<T>(15)) + static_cast<T>(10));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> fade(vec<4, T, Q> const& t)\n\t{\n\t\treturn (t * t * t) * (t * (t * static_cast<T>(6) - static_cast<T>(15)) + static_cast<T>(10));\n\t}\n}//namespace detail\n}//namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/_swizzle.hpp",
    "content": "#pragma once\n\nnamespace glm{\nnamespace detail\n{\n\t// Internal class for implementing swizzle operators\n\ttemplate<typename T, int N>\n\tstruct _swizzle_base0\n\t{\n\tprotected:\n\t\tGLM_FUNC_QUALIFIER T& elem(size_t i){ return (reinterpret_cast<T*>(_buffer))[i]; }\n\t\tGLM_FUNC_QUALIFIER T const& elem(size_t i) const{ return (reinterpret_cast<const T*>(_buffer))[i]; }\n\n\t\t// Use an opaque buffer to *ensure* the compiler doesn't call a constructor.\n\t\t// The size 1 buffer is assumed to aligned to the actual members so that the\n\t\t// elem()\n\t\tchar    _buffer[1];\n\t};\n\n\ttemplate<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3, bool Aligned>\n\tstruct _swizzle_base1 : public _swizzle_base0<T, N>\n\t{\n\t};\n\n\ttemplate<typename T, qualifier Q, int E0, int E1, bool Aligned>\n\tstruct _swizzle_base1<2, T, Q, E0,E1,-1,-2, Aligned> : public _swizzle_base0<T, 2>\n\t{\n\t\tGLM_FUNC_QUALIFIER vec<2, T, Q> operator ()()  const { return vec<2, T, Q>(this->elem(E0), this->elem(E1)); }\n\t};\n\n\ttemplate<typename T, qualifier Q, int E0, int E1, int E2, bool Aligned>\n\tstruct _swizzle_base1<3, T, Q, E0,E1,E2,-1, Aligned> : public _swizzle_base0<T, 3>\n\t{\n\t\tGLM_FUNC_QUALIFIER vec<3, T, Q> operator ()()  const { return vec<3, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2)); }\n\t};\n\n\ttemplate<typename T, qualifier Q, int E0, int E1, int E2, int E3, bool Aligned>\n\tstruct _swizzle_base1<4, T, Q, E0,E1,E2,E3, Aligned> : public _swizzle_base0<T, 4>\n\t{\n\t\tGLM_FUNC_QUALIFIER vec<4, T, Q> operator ()()  const { return vec<4, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); }\n\t};\n\n\t// Internal class for implementing swizzle operators\n\t/*\n\t\tTemplate parameters:\n\n\t\tT\t\t\t= type of scalar values (e.g. float, double)\n\t\tN\t\t\t= number of components in the vector (e.g. 3)\n\t\tE0...3\t\t= what index the n-th element of this swizzle refers to in the unswizzled vec\n\n\t\tDUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles\n\t\t\tcontaining duplicate elements so that they cannot be used as r-values).\n\t*/\n\ttemplate<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3, int DUPLICATE_ELEMENTS>\n\tstruct _swizzle_base2 : public _swizzle_base1<N, T, Q, E0,E1,E2,E3, detail::is_aligned<Q>::value>\n\t{\n\t\tstruct op_equal\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e = t; }\n\t\t};\n\n\t\tstruct op_minus\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e -= t; }\n\t\t};\n\n\t\tstruct op_plus\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e += t; }\n\t\t};\n\n\t\tstruct op_mul\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e *= t; }\n\t\t};\n\n\t\tstruct op_div\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e /= t; }\n\t\t};\n\n\tpublic:\n\t\tGLM_FUNC_QUALIFIER _swizzle_base2& operator= (const T& t)\n\t\t{\n\t\t\tfor (int i = 0; i < N; ++i)\n\t\t\t\t(*this)[i] = t;\n\t\t\treturn *this;\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER _swizzle_base2& operator= (vec<N, T, Q> const& that)\n\t\t{\n\t\t\t_apply_op(that, op_equal());\n\t\t\treturn *this;\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER void operator -= (vec<N, T, Q> const& that)\n\t\t{\n\t\t\t_apply_op(that, op_minus());\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER void operator += (vec<N, T, Q> const& that)\n\t\t{\n\t\t\t_apply_op(that, op_plus());\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER void operator *= (vec<N, T, Q> const& that)\n\t\t{\n\t\t\t_apply_op(that, op_mul());\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER void operator /= (vec<N, T, Q> const& that)\n\t\t{\n\t\t\t_apply_op(that, op_div());\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER T& operator[](size_t i)\n\t\t{\n\t\t\tconst int offset_dst[4] = { E0, E1, E2, E3 };\n\t\t\treturn this->elem(offset_dst[i]);\n\t\t}\n\t\tGLM_FUNC_QUALIFIER T operator[](size_t i) const\n\t\t{\n\t\t\tconst int offset_dst[4] = { E0, E1, E2, E3 };\n\t\t\treturn this->elem(offset_dst[i]);\n\t\t}\n\n\tprotected:\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_QUALIFIER void _apply_op(vec<N, T, Q> const& that, const U& op)\n\t\t{\n\t\t\t// Make a copy of the data in this == &that.\n\t\t\t// The copier should optimize out the copy in cases where the function is\n\t\t\t// properly inlined and the copy is not necessary.\n\t\t\tT t[N];\n\t\t\tfor (int i = 0; i < N; ++i)\n\t\t\t\tt[i] = that[i];\n\t\t\tfor (int i = 0; i < N; ++i)\n\t\t\t\top( (*this)[i], t[i] );\n\t\t}\n\t};\n\n\t// Specialization for swizzles containing duplicate elements.  These cannot be modified.\n\ttemplate<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3>\n\tstruct _swizzle_base2<N, T, Q, E0,E1,E2,E3, 1> : public _swizzle_base1<N, T, Q, E0,E1,E2,E3, detail::is_aligned<Q>::value>\n\t{\n\t\tstruct Stub {};\n\n\t\tGLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const&) { return *this; }\n\n\t\tGLM_FUNC_QUALIFIER T operator[]  (size_t i) const\n\t\t{\n\t\t\tconst int offset_dst[4] = { E0, E1, E2, E3 };\n\t\t\treturn this->elem(offset_dst[i]);\n\t\t}\n\t};\n\n\ttemplate<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3>\n\tstruct _swizzle : public _swizzle_base2<N, T, Q, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)>\n\t{\n\t\ttypedef _swizzle_base2<N, T, Q, E0, E1, E2, E3, (E0 == E1 || E0 == E2 || E0 == E3 || E1 == E2 || E1 == E3 || E2 == E3)> base_type;\n\n\t\tusing base_type::operator=;\n\n\t\tGLM_FUNC_QUALIFIER operator vec<N, T, Q> () const { return (*this)(); }\n\t};\n\n//\n// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros\n//\n#define GLM_SWIZZLE_TEMPLATE1   template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3>\n#define GLM_SWIZZLE_TEMPLATE2   template<int N, typename T, qualifier Q, int E0, int E1, int E2, int E3, int F0, int F1, int F2, int F3>\n#define GLM_SWIZZLE_TYPE1       _swizzle<N, T, Q, E0, E1, E2, E3>\n#define GLM_SWIZZLE_TYPE2       _swizzle<N, T, Q, F0, F1, F2, F3>\n\n//\n// Wrapper for a binary operator (e.g. u.yy + v.zy)\n//\n#define GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND)                 \\\n\tGLM_SWIZZLE_TEMPLATE2                                                          \\\n\tGLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b)  \\\n\t{                                                                               \\\n\t\treturn a() OPERAND b();                                                     \\\n\t}                                                                               \\\n\tGLM_SWIZZLE_TEMPLATE1                                                          \\\n\tGLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const vec<N, T, Q>& b)                   \\\n\t{                                                                               \\\n\t\treturn a() OPERAND b;                                                       \\\n\t}                                                                               \\\n\tGLM_SWIZZLE_TEMPLATE1                                                          \\\n\tGLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const vec<N, T, Q>& a, const GLM_SWIZZLE_TYPE1& b)                   \\\n\t{                                                                               \\\n\t\treturn a OPERAND b();                                                       \\\n\t}\n\n//\n// Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz)\n//\n#define GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND)\t\t\t\t\t\t\t\t\\\n\tGLM_SWIZZLE_TEMPLATE1\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\tGLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const T& b)\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn a() OPERAND b;\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\tGLM_SWIZZLE_TEMPLATE1\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\tGLM_FUNC_QUALIFIER vec<N, T, Q> operator OPERAND ( const T& a, const GLM_SWIZZLE_TYPE1& b)\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn a OPERAND b();\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t}\n\n//\n// Macro for wrapping a function taking one argument (e.g. abs())\n//\n#define GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION)\t\t\t\t\t\t\t\t\t\t\t\t\\\n\tGLM_SWIZZLE_TEMPLATE1\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a)\t\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn FUNCTION(a());\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t}\n\n//\n// Macro for wrapping a function taking two vector arguments (e.g. dot()).\n//\n#define GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION)                                                       \\\n\tGLM_SWIZZLE_TEMPLATE2                                                                                       \\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \\\n\t{                                                                                                           \\\n\t\treturn FUNCTION(a(), b());                                                                              \\\n\t}                                                                                                           \\\n\tGLM_SWIZZLE_TEMPLATE1                                                                                       \\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b) \\\n\t{                                                                                                           \\\n\t\treturn FUNCTION(a(), b());                                                                              \\\n\t}                                                                                                           \\\n\tGLM_SWIZZLE_TEMPLATE1                                                                                       \\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename V& b)         \\\n\t{                                                                                                           \\\n\t\treturn FUNCTION(a(), b);                                                                                \\\n\t}                                                                                                           \\\n\tGLM_SWIZZLE_TEMPLATE1                                                                                       \\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const GLM_SWIZZLE_TYPE1& b)                  \\\n\t{                                                                                                           \\\n\t\treturn FUNCTION(a, b());                                                                                \\\n\t}\n\n//\n// Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()).\n//\n#define GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION)                                                             \\\n\tGLM_SWIZZLE_TEMPLATE2                                                                                                    \\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b, const T& c)   \\\n\t{                                                                                                                         \\\n\t\treturn FUNCTION(a(), b(), c);                                                                                         \\\n\t}                                                                                                                         \\\n\tGLM_SWIZZLE_TEMPLATE1                                                                                                    \\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b, const T& c)   \\\n\t{                                                                                                                         \\\n\t\treturn FUNCTION(a(), b(), c);                                                                                         \\\n\t}                                                                                                                         \\\n\tGLM_SWIZZLE_TEMPLATE1                                                                                                    \\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\\\n\t{                                                                                                                         \\\n\t\treturn FUNCTION(a(), b, c);                                                                                           \\\n\t}                                                                                                                         \\\n\tGLM_SWIZZLE_TEMPLATE1                                                                                                    \\\n\tGLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const GLM_SWIZZLE_TYPE1& b, const T& c)           \\\n\t{                                                                                                                         \\\n\t\treturn FUNCTION(a, b(), c);                                                                                           \\\n\t}\n\n}//namespace detail\n}//namespace glm\n\nnamespace glm\n{\n\tnamespace detail\n\t{\n\t\tGLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-)\n\t\tGLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*)\n\t\tGLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+)\n\t\tGLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-)\n\t\tGLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*)\n\t\tGLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/)\n\t}\n\n\t//\n\t// Swizzles are distinct types from the unswizzled type.  The below macros will\n\t// provide template specializations for the swizzle types for the given functions\n\t// so that the compiler does not have any ambiguity to choosing how to handle\n\t// the function.\n\t//\n\t// The alternative is to use the operator()() when calling the function in order\n\t// to explicitly convert the swizzled type to the unswizzled type.\n\t//\n\n\t//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    abs);\n\t//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    acos);\n\t//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    acosh);\n\t//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    all);\n\t//GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type,    any);\n\n\t//GLM_SWIZZLE_FUNCTION_2_ARGS(value_type,  dot);\n\t//GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type,    cross);\n\t//GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type,    step);\n\t//GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix);\n}\n\n#define GLM_SWIZZLE2_2_MEMBERS(T, Q, E0,E1) \\\n\tstruct { detail::_swizzle<2, T, Q, 0,0,-1,-2> E0 ## E0; }; \\\n\tstruct { detail::_swizzle<2, T, Q, 0,1,-1,-2> E0 ## E1; }; \\\n\tstruct { detail::_swizzle<2, T, Q, 1,0,-1,-2> E1 ## E0; }; \\\n\tstruct { detail::_swizzle<2, T, Q, 1,1,-1,-2> E1 ## E1; };\n\n#define GLM_SWIZZLE2_3_MEMBERS(T, Q, E0,E1) \\\n\tstruct { detail::_swizzle<3,T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3,T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3,T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3,T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<3,T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3,T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3,T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3,T, Q, 1,1,1,-1> E1 ## E1 ## E1; };\n\n#define GLM_SWIZZLE2_4_MEMBERS(T, Q, E0,E1) \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; };\n\n#define GLM_SWIZZLE3_2_MEMBERS(T, Q, E0,E1,E2) \\\n\tstruct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; };\n\n#define GLM_SWIZZLE3_3_MEMBERS(T, Q ,E0,E1,E2) \\\n\tstruct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; };\n\n#define GLM_SWIZZLE3_4_MEMBERS(T, Q, E0,E1,E2) \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4,T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; };\n\n#define GLM_SWIZZLE4_2_MEMBERS(T, Q, E0,E1,E2,E3) \\\n\tstruct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 0,3,-1,-2> E0 ## E3; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 1,3,-1,-2> E1 ## E3; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 2,3,-1,-2> E2 ## E3; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 3,0,-1,-2> E3 ## E0; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 3,1,-1,-2> E3 ## E1; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 3,2,-1,-2> E3 ## E2; }; \\\n\tstruct { detail::_swizzle<2,T, Q, 3,3,-1,-2> E3 ## E3; };\n\n#define GLM_SWIZZLE4_3_MEMBERS(T, Q, E0,E1,E2,E3) \\\n\tstruct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,0,3,-1> E0 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,1,3,-1> E0 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,2,3,-1> E0 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,3,0,-1> E0 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,3,1,-1> E0 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,3,2,-1> E0 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 0,3,3,-1> E0 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,0,3,-1> E1 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,1,3,-1> E1 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,2,3,-1> E1 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,3,0,-1> E1 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,3,1,-1> E1 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,3,2,-1> E1 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 1,3,3,-1> E1 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,0,3,-1> E2 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,1,3,-1> E2 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,2,3,-1> E2 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,3,0,-1> E2 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,3,1,-1> E2 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,3,2,-1> E2 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 2,3,3,-1> E2 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,0,0,-1> E3 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,0,1,-1> E3 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,0,2,-1> E3 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,0,3,-1> E3 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,1,0,-1> E3 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,1,1,-1> E3 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,1,2,-1> E3 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,1,3,-1> E3 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,2,0,-1> E3 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,2,1,-1> E3 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,2,2,-1> E3 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,2,3,-1> E3 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,3,0,-1> E3 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,3,1,-1> E3 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,3,2,-1> E3 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<3, T, Q, 3,3,3,-1> E3 ## E3 ## E3; };\n\n#define GLM_SWIZZLE4_4_MEMBERS(T, Q, E0,E1,E2,E3) \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \\\n\tstruct { detail::_swizzle<4, T, Q, 3,3,3,3> E3 ## E3 ## E3 ## E3; };\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/_swizzle_func.hpp",
    "content": "#pragma once\n\n#define GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, CONST, A, B)\t\\\n\tvec<2, T, Q> A ## B() CONST\t\t\t\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn vec<2, T, Q>(this->A, this->B);\t\t\t\\\n\t}\n\n#define GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, CONST, A, B, C)\t\t\\\n\tvec<3, T, Q> A ## B ## C() CONST\t\t\t\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn vec<3, T, Q>(this->A, this->B, this->C);\t\t\t\\\n\t}\n\n#define GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, CONST, A, B, C, D)\t\t\t\t\t\\\n\tvec<4, T, Q> A ## B ## C ## D() CONST\t\t\t\t\t\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn vec<4, T, Q>(this->A, this->B, this->C, this->D);\t\t\t\\\n\t}\n\n#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(T, P, L, CONST, A, B)\t\\\n\ttemplate<typename T>\t\t\t\t\t\t\t\t\t\t\\\n\tvec<L, T, Q> vec<L, T, Q>::A ## B() CONST\t\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn vec<2, T, Q>(this->A, this->B);\t\t\t\t\t\\\n\t}\n\n#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(T, P, L, CONST, A, B, C)\t\t\\\n\ttemplate<typename T>\t\t\t\t\t\t\t\t\t\t\t\\\n\tvec<3, T, Q> vec<L, T, Q>::A ## B ## C() CONST\t\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn vec<3, T, Q>(this->A, this->B, this->C);\t\t\t\t\\\n\t}\n\n#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(T, P, L, CONST, A, B, C, D)\t\t\\\n\ttemplate<typename T>\t\t\t\t\t\t\t\t\t\t\t\t\\\n\tvec<4, T, Q> vec<L, T, Q>::A ## B ## C ## D() CONST\t\t\t\t\t\\\n\t{\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\\\n\t\treturn vec<4, T, Q>(this->A, this->B, this->C, this->D);\t\t\\\n\t}\n\n#define GLM_MUTABLE\n\n#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, B, A)\n\n#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(T, P) \\\n\tGLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, x, y) \\\n\tGLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, r, g) \\\n\tGLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, s, t)\n\n#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B)\n\n#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, B, A)\n\n#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C)\n\n#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, P) \\\n\tGLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, x, y, z) \\\n\tGLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, r, g, b) \\\n\tGLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, s, t, p)\n\n#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, C)\n\n#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, B)\n\n#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, C, A)\n\n#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D)\n\n#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, P) \\\n\tGLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, x, y, z, w) \\\n\tGLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, r, g, b, a) \\\n\tGLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, s, t, p, q)\n\n#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B)\n\n#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B)\n\n#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B)\n\n#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B)\n\n#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P)\t\t\t\\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, x, y)\t\\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, r, g)\t\\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, s, t)\n\n#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C)\n\n#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C)\n\n#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C)\n\n#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C)\n\n#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P) \\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, x, y, z) \\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, r, g, b) \\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, s, t, p)\n\n#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, D)\n\n#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, D)\n\n#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, A) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, B) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, C) \\\n\tGLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, D)\n\n#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \\\n\tGLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D)\n\n#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P) \\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, x, y, z, w) \\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, r, g, b, a) \\\n\tGLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, s, t, p, q)\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/_vectorize.hpp",
    "content": "#pragma once\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, length_t L, typename R, typename T, qualifier Q>\n\tstruct functor1{};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q>\n\tstruct functor1<vec, 1, R, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<1, R, Q> call(R (*Func) (T x), vec<1, T, Q> const& v)\n\t\t{\n\t\t\treturn vec<1, R, Q>(Func(v.x));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q>\n\tstruct functor1<vec, 2, R, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<2, R, Q> call(R (*Func) (T x), vec<2, T, Q> const& v)\n\t\t{\n\t\t\treturn vec<2, R, Q>(Func(v.x), Func(v.y));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q>\n\tstruct functor1<vec, 3, R, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<3, R, Q> call(R (*Func) (T x), vec<3, T, Q> const& v)\n\t\t{\n\t\t\treturn vec<3, R, Q>(Func(v.x), Func(v.y), Func(v.z));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename R, typename T, qualifier Q>\n\tstruct functor1<vec, 4, R, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, R, Q> call(R (*Func) (T x), vec<4, T, Q> const& v)\n\t\t{\n\t\t\treturn vec<4, R, Q>(Func(v.x), Func(v.y), Func(v.z), Func(v.w));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, length_t L, typename T, qualifier Q>\n\tstruct functor2{};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>\n\tstruct functor2<vec, 1, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, vec<1, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<1, T, Q>(Func(a.x, b.x));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>\n\tstruct functor2<vec, 2, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, vec<2, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<2, T, Q>(Func(a.x, b.x), Func(a.y, b.y));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>\n\tstruct functor2<vec, 3, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, vec<3, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<3, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>\n\tstruct functor2<vec, 4, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, length_t L, typename T, qualifier Q>\n\tstruct functor2_vec_sca{};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>\n\tstruct functor2_vec_sca<vec, 1, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, T b)\n\t\t{\n\t\t\treturn vec<1, T, Q>(Func(a.x, b));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>\n\tstruct functor2_vec_sca<vec, 2, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, T b)\n\t\t{\n\t\t\treturn vec<2, T, Q>(Func(a.x, b), Func(a.y, b));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>\n\tstruct functor2_vec_sca<vec, 3, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, T b)\n\t\t{\n\t\t\treturn vec<3, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b));\n\t\t}\n\t};\n\n\ttemplate<template<length_t L, typename T, qualifier Q> class vec, typename T, qualifier Q>\n\tstruct functor2_vec_sca<vec, 4, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, T b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b));\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct functor2_vec_int {};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct functor2_vec_int<1, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<1, int, Q> call(int (*Func) (T x, int y), vec<1, T, Q> const& a, vec<1, int, Q> const& b)\n\t\t{\n\t\t\treturn vec<1, int, Q>(Func(a.x, b.x));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct functor2_vec_int<2, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<2, int, Q> call(int (*Func) (T x, int y), vec<2, T, Q> const& a, vec<2, int, Q> const& b)\n\t\t{\n\t\t\treturn vec<2, int, Q>(Func(a.x, b.x), Func(a.y, b.y));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct functor2_vec_int<3, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<3, int, Q> call(int (*Func) (T x, int y), vec<3, T, Q> const& a, vec<3, int, Q> const& b)\n\t\t{\n\t\t\treturn vec<3, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct functor2_vec_int<4, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, int, Q> call(int (*Func) (T x, int y), vec<4, T, Q> const& a, vec<4, int, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w));\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/compute_common.hpp",
    "content": "#pragma once\n\n#include \"setup.hpp\"\n#include <limits>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<typename genFIType, bool /*signed*/>\n\tstruct compute_abs\n\t{};\n\n\ttemplate<typename genFIType>\n\tstruct compute_abs<genFIType, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(\n\t\t\t\tstd::numeric_limits<genFIType>::is_iec559 || std::numeric_limits<genFIType>::is_signed,\n\t\t\t\t\"'abs' only accept floating-point and integer scalar or vector inputs\");\n\n\t\t\treturn x >= genFIType(0) ? x : -x;\n\t\t\t// TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff;\n\t\t}\n\t};\n\n#if (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)\n\ttemplate<>\n\tstruct compute_abs<float, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static float call(float x)\n\t\t{\n\t\t\treturn fabsf(x);\n\t\t}\n\t};\n#endif\n\n\ttemplate<typename genFIType>\n\tstruct compute_abs<genFIType, false>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(\n\t\t\t\t(!std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer),\n\t\t\t\t\"'abs' only accept floating-point and integer scalar or vector inputs\");\n\t\t\treturn x;\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/compute_vector_relational.hpp",
    "content": "#pragma once\n\n//#include \"compute_common.hpp\"\n#include \"setup.hpp\"\n#include <limits>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate <typename T, bool isFloat>\n\tstruct compute_equal\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b)\n\t\t{\n\t\t\treturn a == b;\n\t\t}\n\t};\n/*\n\ttemplate <typename T>\n\tstruct compute_equal<T, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b)\n\t\t{\n\t\t\treturn detail::compute_abs<T, std::numeric_limits<T>::is_signed>::call(b - a) <= static_cast<T>(0);\n\t\t\t//return std::memcmp(&a, &b, sizeof(T)) == 0;\n\t\t}\n\t};\n*/\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/func_common.inl",
    "content": "/// @ref core\n/// @file glm/detail/func_common.inl\n\n#include \"../vector_relational.hpp\"\n#include \"compute_common.hpp\"\n#include \"type_vec1.hpp\"\n#include \"type_vec2.hpp\"\n#include \"type_vec3.hpp\"\n#include \"type_vec4.hpp\"\n#include \"_vectorize.hpp\"\n#include <limits>\n\nnamespace glm\n{\n\t// min\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType min(genType x, genType y)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer, \"'min' only accept floating-point or integer inputs\");\n\t\treturn (y < x) ? y : x;\n\t}\n\n\t// max\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType max(genType x, genType y)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer, \"'max' only accept floating-point or integer inputs\");\n\n\t\treturn (x < y) ? y : x;\n\t}\n\n\t// abs\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR int abs(int x)\n\t{\n\t\tint const y = x >> (sizeof(int) * 8 - 1);\n\t\treturn (x ^ y) - y;\n\t}\n\n\t// round\n#\tif GLM_HAS_CXX11_STL\n\t\tusing ::std::round;\n#\telse\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER genType round(genType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'round' only accept floating-point inputs\");\n\n\t\t\treturn x < static_cast<genType>(0) ? static_cast<genType>(int(x - static_cast<genType>(0.5))) : static_cast<genType>(int(x + static_cast<genType>(0.5)));\n\t\t}\n#\tendif\n\n\t// trunc\n#\tif GLM_HAS_CXX11_STL\n\t\tusing ::std::trunc;\n#\telse\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER genType trunc(genType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'trunc' only accept floating-point inputs\");\n\n\t\t\treturn x < static_cast<genType>(0) ? -std::floor(-x) : std::floor(x);\n\t\t}\n#\tendif\n\n}//namespace glm\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_abs_vector\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn detail::functor1<vec, L, T, T, Q>::call(abs, x);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, typename U, qualifier Q, bool Aligned>\n\tstruct compute_mix_vector\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, U, Q> const& a)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"'mix' only accept floating-point inputs for the interpolator a\");\n\n\t\t\treturn vec<L, T, Q>(vec<L, U, Q>(x) * (static_cast<U>(1) - a) + vec<L, U, Q>(y) * a);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_mix_vector<L, T, bool, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, bool, Q> const& a)\n\t\t{\n\t\t\tvec<L, T, Q> Result;\n\t\t\tfor(length_t i = 0; i < x.length(); ++i)\n\t\t\t\tResult[i] = a[i] ? y[i] : x[i];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, typename U, qualifier Q, bool Aligned>\n\tstruct compute_mix_scalar\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U const& a)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"'mix' only accept floating-point inputs for the interpolator a\");\n\n\t\t\treturn vec<L, T, Q>(vec<L, U, Q>(x) * (static_cast<U>(1) - a) + vec<L, U, Q>(y) * a);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_mix_scalar<L, T, bool, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y, bool const& a)\n\t\t{\n\t\t\treturn a ? y : x;\n\t\t}\n\t};\n\n\ttemplate<typename T, typename U>\n\tstruct compute_mix\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(T const& x, T const& y, U const& a)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<U>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"'mix' only accept floating-point inputs for the interpolator a\");\n\n\t\t\treturn static_cast<T>(static_cast<U>(x) * (static_cast<U>(1) - a) + static_cast<U>(y) * a);\n\t\t}\n\t};\n\n\ttemplate<typename T>\n\tstruct compute_mix<T, bool>\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(T const& x, T const& y, bool const& a)\n\t\t{\n\t\t\treturn a ? y : x;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool isFloat, bool Aligned>\n\tstruct compute_sign\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn vec<L, T, Q>(glm::lessThan(vec<L, T, Q>(0), x)) - vec<L, T, Q>(glm::lessThan(x, vec<L, T, Q>(0)));\n\t\t}\n\t};\n\n#\tif GLM_ARCH == GLM_ARCH_X86\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_sign<L, T, Q, false, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\tT const Shift(static_cast<T>(sizeof(T) * 8 - 1));\n\t\t\tvec<L, T, Q> const y(vec<L, typename detail::make_unsigned<T>::type, Q>(-x) >> typename detail::make_unsigned<T>::type(Shift));\n\n\t\t\treturn (x >> Shift) | y;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_floor\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn detail::functor1<vec, L, T, T, Q>::call(std::floor, x);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_ceil\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn detail::functor1<vec, L, T, T, Q>::call(std::ceil, x);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_fract\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn x - floor(x);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_trunc\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn detail::functor1<vec, L, T, T, Q>::call(trunc, x);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_round\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn detail::functor1<vec, L, T, T, Q>::call(round, x);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_mod\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& a, vec<L, T, Q> const& b)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'mod' only accept floating-point inputs. Include <glm/gtc/integer.hpp> for integer inputs.\");\n\t\t\treturn a - b * floor(a / b);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_min_vector\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t\t{\n\t\t\treturn detail::functor2<vec, L, T, Q>::call(min, x, y);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_max_vector\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t\t{\n\t\t\treturn detail::functor2<vec, L, T, Q>::call(max, x, y);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_clamp_vector\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal)\n\t\t{\n\t\t\treturn min(max(x, minVal), maxVal);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_step_vector\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& edge, vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn mix(vec<L, T, Q>(1), vec<L, T, Q>(0), glm::lessThan(x, edge));\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_smoothstep_vector\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& edge0, vec<L, T, Q> const& edge1, vec<L, T, Q> const& x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"'smoothstep' only accept floating-point inputs\");\n\t\t\tvec<L, T, Q> const tmp(clamp((x - edge0) / (edge1 - edge0), static_cast<T>(0), static_cast<T>(1)));\n\t\t\treturn tmp * tmp * (static_cast<T>(3) - static_cast<T>(2) * tmp);\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<typename genFIType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genFIType abs(genFIType x)\n\t{\n\t\treturn detail::compute_abs<genFIType, std::numeric_limits<genFIType>::is_signed>::call(x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> abs(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::compute_abs_vector<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\t// sign\n\t// fast and works for any type\n\ttemplate<typename genFIType>\n\tGLM_FUNC_QUALIFIER genFIType sign(genFIType x)\n\t{\n\t\tGLM_STATIC_ASSERT(\n\t\t\tstd::numeric_limits<genFIType>::is_iec559 || (std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer),\n\t\t\t\"'sign' only accept signed inputs\");\n\n\t\treturn detail::compute_sign<1, genFIType, defaultp,\n                                    std::numeric_limits<genFIType>::is_iec559, detail::is_aligned<highp>::value>::call(vec<1, genFIType>(x)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> sign(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(\n\t\t\tstd::numeric_limits<T>::is_iec559 || (std::numeric_limits<T>::is_signed && std::numeric_limits<T>::is_integer),\n\t\t\t\"'sign' only accept signed inputs\");\n\n\t\treturn detail::compute_sign<L, T, Q, std::numeric_limits<T>::is_iec559, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\t// floor\n\tusing ::std::floor;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> floor(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'floor' only accept floating-point inputs.\");\n\t\treturn detail::compute_floor<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> trunc(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'trunc' only accept floating-point inputs\");\n\t\treturn detail::compute_trunc<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> round(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'round' only accept floating-point inputs\");\n\t\treturn detail::compute_round<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n/*\n\t// roundEven\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType roundEven(genType const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'roundEven' only accept floating-point inputs\");\n\n\t\treturn genType(int(x + genType(int(x) % 2)));\n\t}\n*/\n\n\t// roundEven\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType roundEven(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'roundEven' only accept floating-point inputs\");\n\n\t\tint Integer = static_cast<int>(x);\n\t\tgenType IntegerPart = static_cast<genType>(Integer);\n\t\tgenType FractionalPart = fract(x);\n\n\t\tif(FractionalPart > static_cast<genType>(0.5) || FractionalPart < static_cast<genType>(0.5))\n\t\t{\n\t\t\treturn round(x);\n\t\t}\n\t\telse if((Integer % 2) == 0)\n\t\t{\n\t\t\treturn IntegerPart;\n\t\t}\n\t\telse if(x <= static_cast<genType>(0)) // Work around...\n\t\t{\n\t\t\treturn IntegerPart - static_cast<genType>(1);\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn IntegerPart + static_cast<genType>(1);\n\t\t}\n\t\t//else // Bug on MinGW 4.5.2\n\t\t//{\n\t\t//\treturn mix(IntegerPart + genType(-1), IntegerPart + genType(1), x <= genType(0));\n\t\t//}\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> roundEven(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'roundEven' only accept floating-point inputs\");\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(roundEven, x);\n\t}\n\n\t// ceil\n\tusing ::std::ceil;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> ceil(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'ceil' only accept floating-point inputs\");\n\t\treturn detail::compute_ceil<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\t// fract\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fract(genType x)\n\t{\n\t\treturn fract(vec<1, genType>(x)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fract(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fract' only accept floating-point inputs\");\n\t\treturn detail::compute_fract<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\t// mod\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType mod(genType x, genType y)\n\t{\n#\t\tif (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)\n\t\t\t// Another Cuda compiler bug https://github.com/g-truc/glm/issues/530\n\t\t\tvec<1, genType, defaultp> Result(mod(vec<1, genType, defaultp>(x), y));\n\t\t\treturn Result.x;\n#\t\telse\n\t\t\treturn mod(vec<1, genType, defaultp>(x), y).x;\n#\t\tendif\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> mod(vec<L, T, Q> const& x, T y)\n\t{\n\t\treturn detail::compute_mod<L, T, Q, detail::is_aligned<Q>::value>::call(x, vec<L, T, Q>(y));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> mod(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\treturn detail::compute_mod<L, T, Q, detail::is_aligned<Q>::value>::call(x, y);\n\t}\n\n\t// modf\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType modf(genType x, genType & i)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'modf' only accept floating-point inputs\");\n\t\treturn std::modf(x, &i);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<1, T, Q> modf(vec<1, T, Q> const& x, vec<1, T, Q> & i)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tmodf(x.x, i.x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, T, Q> modf(vec<2, T, Q> const& x, vec<2, T, Q> & i)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tmodf(x.x, i.x),\n\t\t\tmodf(x.y, i.y));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> modf(vec<3, T, Q> const& x, vec<3, T, Q> & i)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tmodf(x.x, i.x),\n\t\t\tmodf(x.y, i.y),\n\t\t\tmodf(x.z, i.z));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> modf(vec<4, T, Q> const& x, vec<4, T, Q> & i)\n\t{\n\t\treturn vec<4, T, Q>(\n\t\t\tmodf(x.x, i.x),\n\t\t\tmodf(x.y, i.y),\n\t\t\tmodf(x.z, i.z),\n\t\t\tmodf(x.w, i.w));\n\t}\n\n\t//// Only valid if (INT_MIN <= x-y <= INT_MAX)\n\t//// min(x,y)\n\t//r = y + ((x - y) & ((x - y) >> (sizeof(int) *\n\t//CHAR_BIT - 1)));\n\t//// max(x,y)\n\t//r = x - ((x - y) & ((x - y) >> (sizeof(int) *\n\t//CHAR_BIT - 1)));\n\n\t// min\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& a, T b)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, \"'min' only accept floating-point or integer inputs\");\n\t\treturn detail::compute_min_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, vec<L, T, Q>(b));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& a, vec<L, T, Q> const& b)\n\t{\n\t\treturn detail::compute_min_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, b);\n\t}\n\n\t// max\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& a, T b)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, \"'max' only accept floating-point or integer inputs\");\n\t\treturn detail::compute_max_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, vec<L, T, Q>(b));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& a, vec<L, T, Q> const& b)\n\t{\n\t\treturn detail::compute_max_vector<L, T, Q, detail::is_aligned<Q>::value>::call(a, b);\n\t}\n\n\t// clamp\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || std::numeric_limits<genType>::is_integer, \"'clamp' only accept floating-point or integer inputs\");\n\t\treturn min(max(x, minVal), maxVal);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> clamp(vec<L, T, Q> const& x, T minVal, T maxVal)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, \"'clamp' only accept floating-point or integer inputs\");\n\t\treturn detail::compute_clamp_vector<L, T, Q, detail::is_aligned<Q>::value>::call(x, vec<L, T, Q>(minVal), vec<L, T, Q>(maxVal));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> clamp(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, \"'clamp' only accept floating-point or integer inputs\");\n\t\treturn detail::compute_clamp_vector<L, T, Q, detail::is_aligned<Q>::value>::call(x, minVal, maxVal);\n\t}\n\n\ttemplate<typename genTypeT, typename genTypeU>\n\tGLM_FUNC_QUALIFIER genTypeT mix(genTypeT x, genTypeT y, genTypeU a)\n\t{\n\t\treturn detail::compute_mix<genTypeT, genTypeU>::call(x, y, a);\n\t}\n\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, U a)\n\t{\n\t\treturn detail::compute_mix_scalar<L, T, U, Q, detail::is_aligned<Q>::value>::call(x, y, a);\n\t}\n\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> mix(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, U, Q> const& a)\n\t{\n\t\treturn detail::compute_mix_vector<L, T, U, Q, detail::is_aligned<Q>::value>::call(x, y, a);\n\t}\n\n\t// step\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType step(genType edge, genType x)\n\t{\n\t\treturn mix(static_cast<genType>(1), static_cast<genType>(0), x < edge);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> step(T edge, vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::compute_step_vector<L, T, Q, detail::is_aligned<Q>::value>::call(vec<L, T, Q>(edge), x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> step(vec<L, T, Q> const& edge, vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::compute_step_vector<L, T, Q, detail::is_aligned<Q>::value>::call(edge, x);\n\t}\n\n\t// smoothstep\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType smoothstep(genType edge0, genType edge1, genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"'smoothstep' only accept floating-point inputs\");\n\n\t\tgenType const tmp(clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1)));\n\t\treturn tmp * tmp * (genType(3) - genType(2) * tmp);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> smoothstep(T edge0, T edge1, vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::compute_smoothstep_vector<L, T, Q, detail::is_aligned<Q>::value>::call(vec<L, T, Q>(edge0), vec<L, T, Q>(edge1), x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> smoothstep(vec<L, T, Q> const& edge0, vec<L, T, Q> const& edge1, vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::compute_smoothstep_vector<L, T, Q, detail::is_aligned<Q>::value>::call(edge0, edge1, x);\n\t}\n\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::isnan;\n#\telse\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER bool isnan(genType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'isnan' only accept floating-point inputs\");\n\n#\t\t\tif GLM_HAS_CXX11_STL\n\t\t\t\treturn std::isnan(x);\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n\t\t\t\treturn _isnan(x) != 0;\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_INTEL\n#\t\t\t\tif GLM_PLATFORM & GLM_PLATFORM_WINDOWS\n\t\t\t\t\treturn _isnan(x) != 0;\n#\t\t\t\telse\n\t\t\t\t\treturn ::isnan(x) != 0;\n#\t\t\t\tendif\n#\t\t\telif (GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) && (GLM_PLATFORM & GLM_PLATFORM_ANDROID) && __cplusplus < 201103L\n\t\t\t\treturn _isnan(x) != 0;\n#\t\t\telif (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)\n\t\t\t\treturn ::isnan(x) != 0;\n#\t\t\telse\n\t\t\t\treturn std::isnan(x);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> isnan(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isnan' only accept floating-point inputs\");\n\n\t\tvec<L, bool, Q> Result;\n\t\tfor (length_t l = 0; l < v.length(); ++l)\n\t\t\tResult[l] = glm::isnan(v[l]);\n\t\treturn Result;\n\t}\n\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::isinf;\n#\telse\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER bool isinf(genType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'isinf' only accept floating-point inputs\");\n\n#\t\t\tif GLM_HAS_CXX11_STL\n\t\t\t\treturn std::isinf(x);\n#\t\t\telif GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC)\n#\t\t\t\tif(GLM_PLATFORM & GLM_PLATFORM_WINDOWS)\n\t\t\t\t\treturn _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF;\n#\t\t\t\telse\n\t\t\t\t\treturn ::isinf(x);\n#\t\t\t\tendif\n#\t\t\telif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)\n#\t\t\t\tif(GLM_PLATFORM & GLM_PLATFORM_ANDROID && __cplusplus < 201103L)\n\t\t\t\t\treturn _isinf(x) != 0;\n#\t\t\t\telse\n\t\t\t\t\treturn std::isinf(x);\n#\t\t\t\tendif\n#\t\t\telif (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)\n\t\t\t\t// http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/docs/online/group__CUDA__MATH__DOUBLE_g13431dd2b40b51f9139cbb7f50c18fab.html#g13431dd2b40b51f9139cbb7f50c18fab\n\t\t\t\treturn ::isinf(double(x)) != 0;\n#\t\t\telse\n\t\t\t\treturn std::isinf(x);\n#\t\t\tendif\n\t}\n#\tendif\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> isinf(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isinf' only accept floating-point inputs\");\n\n\t\tvec<L, bool, Q> Result;\n\t\tfor (length_t l = 0; l < v.length(); ++l)\n\t\t\tResult[l] = glm::isinf(v[l]);\n\t\treturn Result;\n\t}\n\n\tGLM_FUNC_QUALIFIER int floatBitsToInt(float const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tfloat in;\n\t\t\tint out;\n\t\t} u;\n\n\t\tu.in = v;\n\n\t\treturn u.out;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int, Q> floatBitsToInt(vec<L, float, Q> const& v)\n\t{\n\t\treturn reinterpret_cast<vec<L, int, Q>&>(const_cast<vec<L, float, Q>&>(v));\n\t}\n\n\tGLM_FUNC_QUALIFIER uint floatBitsToUint(float const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tfloat in;\n\t\t\tuint out;\n\t\t} u;\n\n\t\tu.in = v;\n\n\t\treturn u.out;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, uint, Q> floatBitsToUint(vec<L, float, Q> const& v)\n\t{\n\t\treturn reinterpret_cast<vec<L, uint, Q>&>(const_cast<vec<L, float, Q>&>(v));\n\t}\n\n\tGLM_FUNC_QUALIFIER float intBitsToFloat(int const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tint in;\n\t\t\tfloat out;\n\t\t} u;\n\n\t\tu.in = v;\n\n\t\treturn u.out;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, float, Q> intBitsToFloat(vec<L, int, Q> const& v)\n\t{\n\t\treturn reinterpret_cast<vec<L, float, Q>&>(const_cast<vec<L, int, Q>&>(v));\n\t}\n\n\tGLM_FUNC_QUALIFIER float uintBitsToFloat(uint const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tuint in;\n\t\t\tfloat out;\n\t\t} u;\n\n\t\tu.in = v;\n\n\t\treturn u.out;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, float, Q> uintBitsToFloat(vec<L, uint, Q> const& v)\n\t{\n\t\treturn reinterpret_cast<vec<L, float, Q>&>(const_cast<vec<L, uint, Q>&>(v));\n\t}\n\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::fma;\n#\telse\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER genType fma(genType const& a, genType const& b, genType const& c)\n\t\t{\n\t\t\treturn a * b + c;\n\t\t}\n#\tendif\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType frexp(genType x, int& exp)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'frexp' only accept floating-point inputs\");\n\n\t\treturn std::frexp(x, &exp);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> frexp(vec<L, T, Q> const& v, vec<L, int, Q>& exp)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'frexp' only accept floating-point inputs\");\n\n\t\tvec<L, T, Q> Result;\n\t\tfor (length_t l = 0; l < v.length(); ++l)\n\t\t\tResult[l] = std::frexp(v[l], &exp[l]);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType ldexp(genType const& x, int const& exp)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'ldexp' only accept floating-point inputs\");\n\n\t\treturn std::ldexp(x, exp);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> ldexp(vec<L, T, Q> const& v, vec<L, int, Q> const& exp)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'ldexp' only accept floating-point inputs\");\n\n\t\tvec<L, T, Q> Result;\n\t\tfor (length_t l = 0; l < v.length(); ++l)\n\t\t\tResult[l] = std::ldexp(v[l], exp[l]);\n\t\treturn Result;\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"func_common_simd.inl\"\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/func_common_simd.inl",
    "content": "/// @ref core\n/// @file glm/detail/func_common_simd.inl\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n#include \"../simd/common.h\"\n\n#include <immintrin.h>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<qualifier Q>\n\tstruct compute_abs_vector<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = glm_vec4_abs(v.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_abs_vector<4, int, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v)\n\t\t{\n\t\t\tvec<4, int, Q> result;\n\t\t\tresult.data = glm_ivec4_abs(v.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_floor<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = glm_vec4_floor(v.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_ceil<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = glm_vec4_ceil(v.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_fract<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = glm_vec4_fract(v.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_round<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = glm_vec4_round(v.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_mod<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& y)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = glm_vec4_mod(x.data, y.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_min_vector<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = _mm_min_ps(v1.data, v2.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_min_vector<4, int, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2)\n\t\t{\n\t\t\tvec<4, int, Q> result;\n\t\t\tresult.data = _mm_min_epi32(v1.data, v2.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_min_vector<4, uint, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2)\n\t\t{\n\t\t\tvec<4, uint, Q> result;\n\t\t\tresult.data = _mm_min_epu32(v1.data, v2.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_max_vector<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = _mm_max_ps(v1.data, v2.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_max_vector<4, int, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2)\n\t\t{\n\t\t\tvec<4, int, Q> result;\n\t\t\tresult.data = _mm_max_epi32(v1.data, v2.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_max_vector<4, uint, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2)\n\t\t{\n\t\t\tvec<4, uint, Q> result;\n\t\t\tresult.data = _mm_max_epu32(v1.data, v2.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_clamp_vector<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& minVal, vec<4, float, Q> const& maxVal)\n\t\t{\n\t\t\tvec<4, float, Q> result;\n\t\t\tresult.data = _mm_min_ps(_mm_max_ps(x.data, minVal.data), maxVal.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_clamp_vector<4, int, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& x, vec<4, int, Q> const& minVal, vec<4, int, Q> const& maxVal)\n\t\t{\n\t\t\tvec<4, int, Q> result;\n\t\t\tresult.data = _mm_min_epi32(_mm_max_epi32(x.data, minVal.data), maxVal.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_clamp_vector<4, uint, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& x, vec<4, uint, Q> const& minVal, vec<4, uint, Q> const& maxVal)\n\t\t{\n\t\t\tvec<4, uint, Q> result;\n\t\t\tresult.data = _mm_min_epu32(_mm_max_epu32(x.data, minVal.data), maxVal.data);\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_mix_vector<4, float, bool, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& y, vec<4, bool, Q> const& a)\n\t\t{\n\t\t\t__m128i const Load = _mm_set_epi32(-static_cast<int>(a.w), -static_cast<int>(a.z), -static_cast<int>(a.y), -static_cast<int>(a.x));\n\t\t\t__m128 const Mask = _mm_castsi128_ps(Load);\n\n\t\t\tvec<4, float, Q> Result;\n#\t\t\tif 0 && GLM_ARCH & GLM_ARCH_AVX\n\t\t\t\tResult.data = _mm_blendv_ps(x.data, y.data, Mask);\n#\t\t\telse\n\t\t\t\tResult.data = _mm_or_ps(_mm_and_ps(Mask, y.data), _mm_andnot_ps(Mask, x.data));\n#\t\t\tendif\n\t\t\treturn Result;\n\t\t}\n\t};\n/* FIXME\n\ttemplate<qualifier Q>\n\tstruct compute_step_vector<float, Q, tvec4>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& edge, vec<4, float, Q> const& x)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tresult.data = glm_vec4_step(edge.data, x.data);\n\t\t\treturn result;\n\t\t}\n\t};\n*/\n\ttemplate<qualifier Q>\n\tstruct compute_smoothstep_vector<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& edge0, vec<4, float, Q> const& edge1, vec<4, float, Q> const& x)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = glm_vec4_smoothstep(edge0.data, edge1.data, x.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/func_exponential.inl",
    "content": "/// @ref core\n/// @file glm/detail/func_exponential.inl\n\n#include \"../vector_relational.hpp\"\n#include \"_vectorize.hpp\"\n#include <limits>\n#include <cmath>\n#include <cassert>\n\nnamespace glm{\nnamespace detail\n{\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::log2;\n#\telse\n\t\ttemplate<typename genType>\n\t\tgenType log2(genType Value)\n\t\t{\n\t\t\treturn std::log(Value) * static_cast<genType>(1.4426950408889634073599246810019);\n\t\t}\n#\tendif\n\n\ttemplate<length_t L, typename T, qualifier Q, bool isFloat, bool Aligned>\n\tstruct compute_log2\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'log2' only accept floating-point inputs. Include <glm/gtc/integer.hpp> for integer inputs.\");\n\n\t\t\treturn detail::functor1<vec, L, T, T, Q>::call(log2, v);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_sqrt\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn detail::functor1<vec, L, T, T, Q>::call(std::sqrt, x);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_inversesqrt\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\treturn static_cast<T>(1) / sqrt(x);\n\t\t}\n\t};\n\n\ttemplate<length_t L, bool Aligned>\n\tstruct compute_inversesqrt<L, float, lowp, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, float, lowp> call(vec<L, float, lowp> const& x)\n\t\t{\n\t\t\tvec<L, float, lowp> tmp(x);\n\t\t\tvec<L, float, lowp> xhalf(tmp * 0.5f);\n\t\t\tvec<L, uint, lowp>* p = reinterpret_cast<vec<L, uint, lowp>*>(const_cast<vec<L, float, lowp>*>(&x));\n\t\t\tvec<L, uint, lowp> i = vec<L, uint, lowp>(0x5f375a86) - (*p >> vec<L, uint, lowp>(1));\n\t\t\tvec<L, float, lowp>* ptmp = reinterpret_cast<vec<L, float, lowp>*>(&i);\n\t\t\ttmp = *ptmp;\n\t\t\ttmp = tmp * (1.5f - xhalf * tmp * tmp);\n\t\t\treturn tmp;\n\t\t}\n\t};\n}//namespace detail\n\n\t// pow\n\tusing std::pow;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> pow(vec<L, T, Q> const& base, vec<L, T, Q> const& exponent)\n\t{\n\t\treturn detail::functor2<vec, L, T, Q>::call(pow, base, exponent);\n\t}\n\n\t// exp\n\tusing std::exp;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> exp(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(exp, x);\n\t}\n\n\t// log\n\tusing std::log;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> log(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(log, x);\n\t}\n\n#   if GLM_HAS_CXX11_STL\n    using std::exp2;\n#   else\n\t//exp2, ln2 = 0.69314718055994530941723212145818f\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType exp2(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'exp2' only accept floating-point inputs\");\n\n\t\treturn std::exp(static_cast<genType>(0.69314718055994530941723212145818) * x);\n\t}\n#   endif\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> exp2(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(exp2, x);\n\t}\n\n\t// log2, ln2 = 0.69314718055994530941723212145818f\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType log2(genType x)\n\t{\n\t\treturn log2(vec<1, genType>(x)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> log2(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::compute_log2<L, T, Q, std::numeric_limits<T>::is_iec559, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\t// sqrt\n\tusing std::sqrt;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> sqrt(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'sqrt' only accept floating-point inputs\");\n\t\treturn detail::compute_sqrt<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\t// inversesqrt\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType inversesqrt(genType x)\n\t{\n\t\treturn static_cast<genType>(1) / sqrt(x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> inversesqrt(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'inversesqrt' only accept floating-point inputs\");\n\t\treturn detail::compute_inversesqrt<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"func_exponential_simd.inl\"\n#endif\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/func_exponential_simd.inl",
    "content": "/// @ref core\n/// @file glm/detail/func_exponential_simd.inl\n\n#include \"../simd/exponential.h\"\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<qualifier Q>\n\tstruct compute_sqrt<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_sqrt_ps(v.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n\ttemplate<>\n\tstruct compute_sqrt<4, float, aligned_lowp, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, aligned_lowp> call(vec<4, float, aligned_lowp> const& v)\n\t\t{\n\t\t\tvec<4, float, aligned_lowp> Result;\n\t\t\tResult.data = glm_vec4_sqrt_lowp(v.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n}//namespace detail\n}//namespace glm\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/func_geometric.inl",
    "content": "#include \"../exponential.hpp\"\n#include \"../common.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_length\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\treturn sqrt(dot(v, v));\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_distance\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1)\n\t\t{\n\t\t\treturn length(p1 - p0);\n\t\t}\n\t};\n\n\ttemplate<typename V, typename T, bool Aligned>\n\tstruct compute_dot{};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_dot<vec<1, T, Q>, T, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(vec<1, T, Q> const& a, vec<1, T, Q> const& b)\n\t\t{\n\t\t\treturn a.x * b.x;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_dot<vec<2, T, Q>, T, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(vec<2, T, Q> const& a, vec<2, T, Q> const& b)\n\t\t{\n\t\t\tvec<2, T, Q> tmp(a * b);\n\t\t\treturn tmp.x + tmp.y;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_dot<vec<3, T, Q>, T, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(vec<3, T, Q> const& a, vec<3, T, Q> const& b)\n\t\t{\n\t\t\tvec<3, T, Q> tmp(a * b);\n\t\t\treturn tmp.x + tmp.y + tmp.z;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_dot<vec<4, T, Q>, T, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> tmp(a * b);\n\t\t\treturn (tmp.x + tmp.y) + (tmp.z + tmp.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_cross\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<3, T, Q> call(vec<3, T, Q> const& x, vec<3, T, Q> const& y)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'cross' accepts only floating-point inputs\");\n\n\t\t\treturn vec<3, T, Q>(\n\t\t\t\tx.y * y.z - y.y * x.z,\n\t\t\t\tx.z * y.x - y.z * x.x,\n\t\t\t\tx.x * y.y - y.x * x.y);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_normalize\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'normalize' accepts only floating-point inputs\");\n\n\t\t\treturn v * inversesqrt(dot(v, v));\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_faceforward\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& N, vec<L, T, Q> const& I, vec<L, T, Q> const& Nref)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'normalize' accepts only floating-point inputs\");\n\n\t\t\treturn dot(Nref, I) < static_cast<T>(0) ? N : -N;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_reflect\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& I, vec<L, T, Q> const& N)\n\t\t{\n\t\t\treturn I - N * dot(N, I) * static_cast<T>(2);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_refract\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& I, vec<L, T, Q> const& N, T eta)\n\t\t{\n\t\t\tT const dotValue(dot(N, I));\n\t\t\tT const k(static_cast<T>(1) - eta * eta * (static_cast<T>(1) - dotValue * dotValue));\n\t\t\tvec<L, T, Q> const Result =\n                (k >= static_cast<T>(0)) ? (eta * I - (eta * dotValue + std::sqrt(k)) * N) : vec<L, T, Q>(0);\n\t\t\treturn Result;\n\t\t}\n\t};\n}//namespace detail\n\n\t// length\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType length(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'length' accepts only floating-point inputs\");\n\n\t\treturn abs(x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T length(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'length' accepts only floating-point inputs\");\n\n\t\treturn detail::compute_length<L, T, Q, detail::is_aligned<Q>::value>::call(v);\n\t}\n\n\t// distance\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType distance(genType const& p0, genType const& p1)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'distance' accepts only floating-point inputs\");\n\n\t\treturn length(p1 - p0);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T distance(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1)\n\t{\n\t\treturn detail::compute_distance<L, T, Q, detail::is_aligned<Q>::value>::call(p0, p1);\n\t}\n\n\t// dot\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T dot(T x, T y)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'dot' accepts only floating-point inputs\");\n\t\treturn x * y;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T dot(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'dot' accepts only floating-point inputs\");\n\t\treturn detail::compute_dot<vec<L, T, Q>, T, detail::is_aligned<Q>::value>::call(x, y);\n\t}\n\n\t// cross\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y)\n\t{\n\t\treturn detail::compute_cross<T, Q, detail::is_aligned<Q>::value>::call(x, y);\n\t}\n/*\n\t// normalize\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType normalize(genType const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'normalize' accepts only floating-point inputs\");\n\n\t\treturn x < genType(0) ? genType(-1) : genType(1);\n\t}\n*/\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> normalize(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'normalize' accepts only floating-point inputs\");\n\n\t\treturn detail::compute_normalize<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\t// faceforward\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType faceforward(genType const& N, genType const& I, genType const& Nref)\n\t{\n\t\treturn dot(Nref, I) < static_cast<genType>(0) ? N : -N;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> faceforward(vec<L, T, Q> const& N, vec<L, T, Q> const& I, vec<L, T, Q> const& Nref)\n\t{\n\t\treturn detail::compute_faceforward<L, T, Q, detail::is_aligned<Q>::value>::call(N, I, Nref);\n\t}\n\n\t// reflect\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType reflect(genType const& I, genType const& N)\n\t{\n\t\treturn I - N * dot(N, I) * genType(2);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> reflect(vec<L, T, Q> const& I, vec<L, T, Q> const& N)\n\t{\n\t\treturn detail::compute_reflect<L, T, Q, detail::is_aligned<Q>::value>::call(I, N);\n\t}\n\n\t// refract\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType refract(genType const& I, genType const& N, genType eta)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'refract' accepts only floating-point inputs\");\n\t\tgenType const dotValue(dot(N, I));\n\t\tgenType const k(static_cast<genType>(1) - eta * eta * (static_cast<genType>(1) - dotValue * dotValue));\n\t\treturn (eta * I - (eta * dotValue + sqrt(k)) * N) * static_cast<genType>(k >= static_cast<genType>(0));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> refract(vec<L, T, Q> const& I, vec<L, T, Q> const& N, T eta)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'refract' accepts only floating-point inputs\");\n\t\treturn detail::compute_refract<L, T, Q, detail::is_aligned<Q>::value>::call(I, N, eta);\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"func_geometric_simd.inl\"\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/func_geometric_simd.inl",
    "content": "/// @ref core\n/// @file glm/detail/func_geometric_simd.inl\n\n#include \"../simd/geometric.h\"\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<qualifier Q>\n\tstruct compute_length<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\treturn _mm_cvtss_f32(glm_vec4_length(v.data));\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_distance<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& p0, vec<4, float, Q> const& p1)\n\t\t{\n\t\t\treturn _mm_cvtss_f32(glm_vec4_distance(p0.data, p1.data));\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_dot<vec<4, float, Q>, float, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& x, vec<4, float, Q> const& y)\n\t\t{\n\t\t\treturn _mm_cvtss_f32(glm_vec1_dot(x.data, y.data));\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_cross<float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<3, float, Q> call(vec<3, float, Q> const& a, vec<3, float, Q> const& b)\n\t\t{\n\t\t\t__m128 const set0 = _mm_set_ps(0.0f, a.z, a.y, a.x);\n\t\t\t__m128 const set1 = _mm_set_ps(0.0f, b.z, b.y, b.x);\n\t\t\t__m128 const xpd0 = glm_vec4_cross(set0, set1);\n\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = xpd0;\n\t\t\treturn vec<3, float, Q>(Result);\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_normalize<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = glm_vec4_normalize(v.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_faceforward<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& N, vec<4, float, Q> const& I, vec<4, float, Q> const& Nref)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = glm_vec4_faceforward(N.data, I.data, Nref.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_reflect<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& I, vec<4, float, Q> const& N)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = glm_vec4_reflect(I.data, N.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_refract<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& I, vec<4, float, Q> const& N, float eta)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = glm_vec4_refract(I.data, N.data, _mm_set1_ps(eta));\n\t\t\treturn Result;\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n\n#elif GLM_ARCH & GLM_ARCH_NEON_BIT\nnamespace glm{\nnamespace detail\n{\n\ttemplate<qualifier Q>\n\tstruct compute_length<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\treturn sqrt(compute_dot<vec<4, float, Q>, float, true>::call(v, v));\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_distance<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& p0, vec<4, float, Q> const& p1)\n\t\t{\n\t\t\treturn compute_length<4, float, Q, true>::call(p1 - p0);\n\t\t}\n\t};\n\n\n\ttemplate<qualifier Q>\n\tstruct compute_dot<vec<4, float, Q>, float, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& x, vec<4, float, Q> const& y)\n\t\t{\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\tfloat32x4_t v = vmulq_f32(x.data, y.data);\n\t\t\treturn vaddvq_f32(v);\n#else  // Armv7a with Neon\n\t\t\tfloat32x4_t p = vmulq_f32(x.data, y.data);\n\t\t\tfloat32x2_t v = vpadd_f32(vget_low_f32(p), vget_high_f32(p));\n\t\t\tv = vpadd_f32(v, v);\n\t\t\treturn vget_lane_f32(v, 0);\n#endif\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_normalize<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tfloat32x4_t p = vmulq_f32(v.data, v.data);\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\tp = vpaddq_f32(p, p);\n\t\t\tp = vpaddq_f32(p, p);\n#else\n\t\t\tfloat32x2_t t = vpadd_f32(vget_low_f32(p), vget_high_f32(p));\n\t\t\tt = vpadd_f32(t, t);\n\t\t\tp = vcombine_f32(t, t);\n#endif\n\n\t\t\tfloat32x4_t vd = vrsqrteq_f32(p);\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = vmulq_f32(v.data, vd);\n\t\t\treturn Result;\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/func_integer.inl",
    "content": "/// @ref core\n\n#include \"_vectorize.hpp\"\n#if(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC)\n#\tinclude <intrin.h>\n#\tpragma intrinsic(_BitScanReverse)\n#endif//(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC)\n#include <limits>\n\n#if !GLM_HAS_EXTENDED_INTEGER_TYPE\n#\tif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\tpragma GCC diagnostic ignored \"-Wlong-long\"\n#\tendif\n#\tif (GLM_COMPILER & GLM_COMPILER_CLANG)\n#\t\tpragma clang diagnostic ignored \"-Wc++11-long-long\"\n#\tendif\n#endif\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T mask(T Bits)\n\t{\n\t\treturn Bits >= static_cast<T>(sizeof(T) * 8) ? ~static_cast<T>(0) : (static_cast<T>(1) << Bits) - static_cast<T>(1);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned, bool EXEC>\n\tstruct compute_bitfieldReverseStep\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T, T)\n\t\t{\n\t\t\treturn v;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_bitfieldReverseStep<L, T, Q, Aligned, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T Mask, T Shift)\n\t\t{\n\t\t\treturn (v & Mask) << Shift | (v & (~Mask)) >> Shift;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned, bool EXEC>\n\tstruct compute_bitfieldBitCountStep\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T, T)\n\t\t{\n\t\t\treturn v;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_bitfieldBitCountStep<L, T, Q, Aligned, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T Mask, T Shift)\n\t\t{\n\t\t\treturn (v & Mask) + ((v >> Shift) & Mask);\n\t\t}\n\t};\n\n\ttemplate<typename genIUType, size_t Bits>\n\tstruct compute_findLSB\n\t{\n\t\tGLM_FUNC_QUALIFIER static int call(genIUType Value)\n\t\t{\n\t\t\tif(Value == 0)\n\t\t\t\treturn -1;\n\n\t\t\treturn glm::bitCount(~Value & (Value - static_cast<genIUType>(1)));\n\t\t}\n\t};\n\n#\tif GLM_HAS_BITSCAN_WINDOWS\n\t\ttemplate<typename genIUType>\n\t\tstruct compute_findLSB<genIUType, 32>\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER static int call(genIUType Value)\n\t\t\t{\n\t\t\t\tunsigned long Result(0);\n\t\t\t\tunsigned char IsNotNull = _BitScanForward(&Result, *reinterpret_cast<unsigned long*>(&Value));\n\t\t\t\treturn IsNotNull ? int(Result) : -1;\n\t\t\t}\n\t\t};\n\n#\t\tif !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32))\n\t\ttemplate<typename genIUType>\n\t\tstruct compute_findLSB<genIUType, 64>\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER static int call(genIUType Value)\n\t\t\t{\n\t\t\t\tunsigned long Result(0);\n\t\t\t\tunsigned char IsNotNull = _BitScanForward64(&Result, *reinterpret_cast<unsigned __int64*>(&Value));\n\t\t\t\treturn IsNotNull ? int(Result) : -1;\n\t\t\t}\n\t\t};\n#\t\tendif\n#\tendif//GLM_HAS_BITSCAN_WINDOWS\n\n\ttemplate<length_t L, typename T, qualifier Q, bool EXEC = true>\n\tstruct compute_findMSB_step_vec\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, T Shift)\n\t\t{\n\t\t\treturn x | (x >> Shift);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct compute_findMSB_step_vec<L, T, Q, false>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x, T)\n\t\t{\n\t\t\treturn x;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, int>\n\tstruct compute_findMSB_vec\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, int, Q> call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\tvec<L, T, Q> x(v);\n\t\t\tx = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >=  8>::call(x, static_cast<T>( 1));\n\t\t\tx = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >=  8>::call(x, static_cast<T>( 2));\n\t\t\tx = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >=  8>::call(x, static_cast<T>( 4));\n\t\t\tx = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 16>::call(x, static_cast<T>( 8));\n\t\t\tx = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 32>::call(x, static_cast<T>(16));\n\t\t\tx = compute_findMSB_step_vec<L, T, Q, sizeof(T) * 8 >= 64>::call(x, static_cast<T>(32));\n\t\t\treturn vec<L, int, Q>(sizeof(T) * 8 - 1) - glm::bitCount(~x);\n\t\t}\n\t};\n\n#\tif GLM_HAS_BITSCAN_WINDOWS\n\t\ttemplate<typename genIUType>\n\t\tGLM_FUNC_QUALIFIER int compute_findMSB_32(genIUType Value)\n\t\t{\n\t\t\tunsigned long Result(0);\n\t\t\tunsigned char IsNotNull = _BitScanReverse(&Result, *reinterpret_cast<unsigned long*>(&Value));\n\t\t\treturn IsNotNull ? int(Result) : -1;\n\t\t}\n\n\t\ttemplate<length_t L, typename T, qualifier Q>\n\t\tstruct compute_findMSB_vec<L, T, Q, 32>\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER static vec<L, int, Q> call(vec<L, T, Q> const& x)\n\t\t\t{\n\t\t\t\treturn detail::functor1<vec, L, int, T, Q>::call(compute_findMSB_32, x);\n\t\t\t}\n\t\t};\n\n#\t\tif !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32))\n\t\ttemplate<typename genIUType>\n\t\tGLM_FUNC_QUALIFIER int compute_findMSB_64(genIUType Value)\n\t\t{\n\t\t\tunsigned long Result(0);\n\t\t\tunsigned char IsNotNull = _BitScanReverse64(&Result, *reinterpret_cast<unsigned __int64*>(&Value));\n\t\t\treturn IsNotNull ? int(Result) : -1;\n\t\t}\n\n\t\ttemplate<length_t L, typename T, qualifier Q>\n\t\tstruct compute_findMSB_vec<L, T, Q, 64>\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER static vec<L, int, Q> call(vec<L, T, Q> const& x)\n\t\t\t{\n\t\t\t\treturn detail::functor1<vec, L, int, T, Q>::call(compute_findMSB_64, x);\n\t\t\t}\n\t\t};\n#\t\tendif\n#\tendif//GLM_HAS_BITSCAN_WINDOWS\n}//namespace detail\n\n\t// uaddCarry\n\tGLM_FUNC_QUALIFIER uint uaddCarry(uint const& x, uint const& y, uint & Carry)\n\t{\n\t\tdetail::uint64 const Value64(static_cast<detail::uint64>(x) + static_cast<detail::uint64>(y));\n\t\tdetail::uint64 const Max32((static_cast<detail::uint64>(1) << static_cast<detail::uint64>(32)) - static_cast<detail::uint64>(1));\n\t\tCarry = Value64 > Max32 ? 1u : 0u;\n\t\treturn static_cast<uint>(Value64 % (Max32 + static_cast<detail::uint64>(1)));\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, uint, Q> uaddCarry(vec<L, uint, Q> const& x, vec<L, uint, Q> const& y, vec<L, uint, Q>& Carry)\n\t{\n\t\tvec<L, detail::uint64, Q> Value64(vec<L, detail::uint64, Q>(x) + vec<L, detail::uint64, Q>(y));\n\t\tvec<L, detail::uint64, Q> Max32((static_cast<detail::uint64>(1) << static_cast<detail::uint64>(32)) - static_cast<detail::uint64>(1));\n\t\tCarry = mix(vec<L, uint, Q>(0), vec<L, uint, Q>(1), greaterThan(Value64, Max32));\n\t\treturn vec<L, uint, Q>(Value64 % (Max32 + static_cast<detail::uint64>(1)));\n\t}\n\n\t// usubBorrow\n\tGLM_FUNC_QUALIFIER uint usubBorrow(uint const& x, uint const& y, uint & Borrow)\n\t{\n\t\tBorrow = x >= y ? static_cast<uint>(0) : static_cast<uint>(1);\n\t\tif(y >= x)\n\t\t\treturn y - x;\n\t\telse\n\t\t\treturn static_cast<uint>((static_cast<detail::int64>(1) << static_cast<detail::int64>(32)) + (static_cast<detail::int64>(y) - static_cast<detail::int64>(x)));\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, uint, Q> usubBorrow(vec<L, uint, Q> const& x, vec<L, uint, Q> const& y, vec<L, uint, Q>& Borrow)\n\t{\n\t\tBorrow = mix(vec<L, uint, Q>(1), vec<L, uint, Q>(0), greaterThanEqual(x, y));\n\t\tvec<L, uint, Q> const YgeX(y - x);\n\t\tvec<L, uint, Q> const XgeY(vec<L, uint, Q>((static_cast<detail::int64>(1) << static_cast<detail::int64>(32)) + (vec<L, detail::int64, Q>(y) - vec<L, detail::int64, Q>(x))));\n\t\treturn mix(XgeY, YgeX, greaterThanEqual(y, x));\n\t}\n\n\t// umulExtended\n\tGLM_FUNC_QUALIFIER void umulExtended(uint const& x, uint const& y, uint & msb, uint & lsb)\n\t{\n\t\tdetail::uint64 Value64 = static_cast<detail::uint64>(x) * static_cast<detail::uint64>(y);\n\t\tmsb = static_cast<uint>(Value64 >> static_cast<detail::uint64>(32));\n\t\tlsb = static_cast<uint>(Value64);\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER void umulExtended(vec<L, uint, Q> const& x, vec<L, uint, Q> const& y, vec<L, uint, Q>& msb, vec<L, uint, Q>& lsb)\n\t{\n\t\tvec<L, detail::uint64, Q> Value64(vec<L, detail::uint64, Q>(x) * vec<L, detail::uint64, Q>(y));\n\t\tmsb = vec<L, uint, Q>(Value64 >> static_cast<detail::uint64>(32));\n\t\tlsb = vec<L, uint, Q>(Value64);\n\t}\n\n\t// imulExtended\n\tGLM_FUNC_QUALIFIER void imulExtended(int x, int y, int& msb, int& lsb)\n\t{\n\t\tdetail::int64 Value64 = static_cast<detail::int64>(x) * static_cast<detail::int64>(y);\n\t\tmsb = static_cast<int>(Value64 >> static_cast<detail::int64>(32));\n\t\tlsb = static_cast<int>(Value64);\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER void imulExtended(vec<L, int, Q> const& x, vec<L, int, Q> const& y, vec<L, int, Q>& msb, vec<L, int, Q>& lsb)\n\t{\n\t\tvec<L, detail::int64, Q> Value64(vec<L, detail::int64, Q>(x) * vec<L, detail::int64, Q>(y));\n\t\tlsb = vec<L, int, Q>(Value64 & static_cast<detail::int64>(0xFFFFFFFF));\n\t\tmsb = vec<L, int, Q>((Value64 >> static_cast<detail::int64>(32)) & static_cast<detail::int64>(0xFFFFFFFF));\n\t}\n\n\t// bitfieldExtract\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType bitfieldExtract(genIUType Value, int Offset, int Bits)\n\t{\n\t\treturn bitfieldExtract(vec<1, genIUType>(Value), Offset, Bits).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldExtract(vec<L, T, Q> const& Value, int Offset, int Bits)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitfieldExtract' only accept integer inputs\");\n\n\t\treturn (Value >> static_cast<T>(Offset)) & static_cast<T>(detail::mask(Bits));\n\t}\n\n\t// bitfieldInsert\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType bitfieldInsert(genIUType const& Base, genIUType const& Insert, int Offset, int Bits)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'bitfieldInsert' only accept integer values\");\n\n\t\treturn bitfieldInsert(vec<1, genIUType>(Base), vec<1, genIUType>(Insert), Offset, Bits).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldInsert(vec<L, T, Q> const& Base, vec<L, T, Q> const& Insert, int Offset, int Bits)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitfieldInsert' only accept integer values\");\n\n\t\tT const Mask = detail::mask(static_cast<T>(Bits)) << Offset;\n\t\treturn (Base & ~Mask) | ((Insert << static_cast<T>(Offset)) & Mask);\n\t}\n\n\t// bitfieldReverse\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType bitfieldReverse(genIUType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'bitfieldReverse' only accept integer values\");\n\n\t\treturn bitfieldReverse(glm::vec<1, genIUType, glm::defaultp>(x)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldReverse(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitfieldReverse' only accept integer values\");\n\n\t\tvec<L, T, Q> x(v);\n\t\tx = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>=  2>::call(x, static_cast<T>(0x5555555555555555ull), static_cast<T>( 1));\n\t\tx = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>=  4>::call(x, static_cast<T>(0x3333333333333333ull), static_cast<T>( 2));\n\t\tx = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>=  8>::call(x, static_cast<T>(0x0F0F0F0F0F0F0F0Full), static_cast<T>( 4));\n\t\tx = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 16>::call(x, static_cast<T>(0x00FF00FF00FF00FFull), static_cast<T>( 8));\n\t\tx = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 32>::call(x, static_cast<T>(0x0000FFFF0000FFFFull), static_cast<T>(16));\n\t\tx = detail::compute_bitfieldReverseStep<L, T, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 64>::call(x, static_cast<T>(0x00000000FFFFFFFFull), static_cast<T>(32));\n\t\treturn x;\n\t}\n\n\t// bitCount\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER int bitCount(genIUType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'bitCount' only accept integer values\");\n\n\t\treturn bitCount(glm::vec<1, genIUType, glm::defaultp>(x)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int, Q> bitCount(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitCount' only accept integer values\");\n\n#\t\tif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\tpragma warning(push)\n#\t\t\tpragma warning(disable : 4310) //cast truncates constant value\n#\t\tendif\n\n\t\tvec<L, typename detail::make_unsigned<T>::type, Q> x(*reinterpret_cast<vec<L, typename detail::make_unsigned<T>::type, Q> const *>(&v));\n\t\tx = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>=  2>::call(x, typename detail::make_unsigned<T>::type(0x5555555555555555ull), typename detail::make_unsigned<T>::type( 1));\n\t\tx = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>=  4>::call(x, typename detail::make_unsigned<T>::type(0x3333333333333333ull), typename detail::make_unsigned<T>::type( 2));\n\t\tx = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>=  8>::call(x, typename detail::make_unsigned<T>::type(0x0F0F0F0F0F0F0F0Full), typename detail::make_unsigned<T>::type( 4));\n\t\tx = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 16>::call(x, typename detail::make_unsigned<T>::type(0x00FF00FF00FF00FFull), typename detail::make_unsigned<T>::type( 8));\n\t\tx = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 32>::call(x, typename detail::make_unsigned<T>::type(0x0000FFFF0000FFFFull), typename detail::make_unsigned<T>::type(16));\n\t\tx = detail::compute_bitfieldBitCountStep<L, typename detail::make_unsigned<T>::type, Q, detail::is_aligned<Q>::value, sizeof(T) * 8>= 64>::call(x, typename detail::make_unsigned<T>::type(0x00000000FFFFFFFFull), typename detail::make_unsigned<T>::type(32));\n\t\treturn vec<L, int, Q>(x);\n\n#\t\tif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\tpragma warning(pop)\n#\t\tendif\n\t}\n\n\t// findLSB\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER int findLSB(genIUType Value)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findLSB' only accept integer values\");\n\n\t\treturn detail::compute_findLSB<genIUType, sizeof(genIUType) * 8>::call(Value);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int, Q> findLSB(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'findLSB' only accept integer values\");\n\n\t\treturn detail::functor1<vec, L, int, T, Q>::call(findLSB, x);\n\t}\n\n\t// findMSB\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER int findMSB(genIUType v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findMSB' only accept integer values\");\n\n\t\treturn findMSB(vec<1, genIUType>(v)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int, Q> findMSB(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'findMSB' only accept integer values\");\n\n\t\treturn detail::compute_findMSB_vec<L, T, Q, sizeof(T) * 8>::call(v);\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"func_integer_simd.inl\"\n#endif\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/func_integer_simd.inl",
    "content": "#include \"../simd/integer.h\"\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<qualifier Q>\n\tstruct compute_bitfieldReverseStep<4, uint, Q, true, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v, uint Mask, uint Shift)\n\t\t{\n\t\t\t__m128i const set0 = v.data;\n\n\t\t\t__m128i const set1 = _mm_set1_epi32(static_cast<int>(Mask));\n\t\t\t__m128i const and1 = _mm_and_si128(set0, set1);\n\t\t\t__m128i const sft1 = _mm_slli_epi32(and1, Shift);\n\n\t\t\t__m128i const set2 = _mm_andnot_si128(set0, _mm_set1_epi32(-1));\n\t\t\t__m128i const and2 = _mm_and_si128(set0, set2);\n\t\t\t__m128i const sft2 = _mm_srai_epi32(and2, Shift);\n\n\t\t\t__m128i const or0 = _mm_or_si128(sft1, sft2);\n\n\t\t\treturn or0;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_bitfieldBitCountStep<4, uint, Q, true, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v, uint Mask, uint Shift)\n\t\t{\n\t\t\t__m128i const set0 = v.data;\n\n\t\t\t__m128i const set1 = _mm_set1_epi32(static_cast<int>(Mask));\n\t\t\t__m128i const and0 = _mm_and_si128(set0, set1);\n\t\t\t__m128i const sft0 = _mm_slli_epi32(set0, Shift);\n\t\t\t__m128i const and1 = _mm_and_si128(sft0, set1);\n\t\t\t__m128i const add0 = _mm_add_epi32(and0, and1);\n\n\t\t\treturn add0;\n\t\t}\n\t};\n}//namespace detail\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER int bitCount(uint x)\n\t{\n\t\treturn _mm_popcnt_u32(x);\n\t}\n\n#\tif(GLM_MODEL == GLM_MODEL_64)\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER int bitCount(detail::uint64 x)\n\t{\n\t\treturn static_cast<int>(_mm_popcnt_u64(x));\n\t}\n#\tendif//GLM_MODEL\n#\tendif//GLM_ARCH\n\n}//namespace glm\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/func_matrix.inl",
    "content": "#include \"../geometric.hpp\"\n#include <limits>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool Aligned>\n\tstruct compute_matrixCompMult\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<C, R, T, Q> call(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y)\n\t\t{\n\t\t\tmat<C, R, T, Q> Result;\n\t\t\tfor(length_t i = 0; i < Result.length(); ++i)\n\t\t\t\tResult[i] = x[i] * y[i];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool IsFloat, bool Aligned>\n\tstruct compute_matrixCompMult_type {\n\t\tGLM_FUNC_QUALIFIER static mat<C, R, T, Q> call(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \n\t\t\t\t\"'matrixCompMult' only accept floating-point inputs, include <glm/ext/matrix_integer.hpp> to discard this restriction.\");\n\t\t\treturn detail::compute_matrixCompMult<C, R, T, Q, detail::is_aligned<Q>::value>::call(x, y);\n\t\t}\n\t};\n\n\ttemplate<length_t DA, length_t DB, typename T, qualifier Q>\n\tstruct compute_outerProduct {\n\t\tGLM_FUNC_QUALIFIER static typename detail::outerProduct_trait<DA, DB, T, Q>::type call(vec<DA, T, Q> const& c, vec<DB, T, Q> const& r)\n\t\t{\n\t\t\ttypename detail::outerProduct_trait<DA, DB, T, Q>::type m;\n\t\t\tfor(length_t i = 0; i < m.length(); ++i)\n\t\t\t\tm[i] = c * r[i];\n\t\t\treturn m;\n\t\t}\n\t};\n\n\ttemplate<length_t DA, length_t DB, typename T, qualifier Q, bool IsFloat>\n\tstruct compute_outerProduct_type {\n\t\tGLM_FUNC_QUALIFIER static typename detail::outerProduct_trait<DA, DB, T, Q>::type call(vec<DA, T, Q> const& c, vec<DB, T, Q> const& r)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE,\n\t\t\t\t\"'outerProduct' only accept floating-point inputs, include <glm/ext/matrix_integer.hpp> to discard this restriction.\");\n\n\t\t\treturn detail::compute_outerProduct<DA, DB, T, Q>::call(c, r);\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose{};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<2, 2, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m)\n\t\t{\n\t\t\tmat<2, 2, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<2, 3, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<3, 2, T, Q> call(mat<2, 3, T, Q> const& m)\n\t\t{\n\t\t\tmat<3,2, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\tResult[2][0] = m[0][2];\n\t\t\tResult[2][1] = m[1][2];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<2, 4, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<4, 2, T, Q> call(mat<2, 4, T, Q> const& m)\n\t\t{\n\t\t\tmat<4, 2, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\tResult[2][0] = m[0][2];\n\t\t\tResult[2][1] = m[1][2];\n\t\t\tResult[3][0] = m[0][3];\n\t\t\tResult[3][1] = m[1][3];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<3, 2, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<2, 3, T, Q> call(mat<3, 2, T, Q> const& m)\n\t\t{\n\t\t\tmat<2, 3, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[0][2] = m[2][0];\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\tResult[1][2] = m[2][1];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<3, 3, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m)\n\t\t{\n\t\t\tmat<3, 3, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[0][2] = m[2][0];\n\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\tResult[1][2] = m[2][1];\n\n\t\t\tResult[2][0] = m[0][2];\n\t\t\tResult[2][1] = m[1][2];\n\t\t\tResult[2][2] = m[2][2];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<3, 4, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<4, 3, T, Q> call(mat<3, 4, T, Q> const& m)\n\t\t{\n\t\t\tmat<4, 3, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[0][2] = m[2][0];\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\tResult[1][2] = m[2][1];\n\t\t\tResult[2][0] = m[0][2];\n\t\t\tResult[2][1] = m[1][2];\n\t\t\tResult[2][2] = m[2][2];\n\t\t\tResult[3][0] = m[0][3];\n\t\t\tResult[3][1] = m[1][3];\n\t\t\tResult[3][2] = m[2][3];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<4, 2, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<2, 4, T, Q> call(mat<4, 2, T, Q> const& m)\n\t\t{\n\t\t\tmat<2, 4, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[0][2] = m[2][0];\n\t\t\tResult[0][3] = m[3][0];\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\tResult[1][2] = m[2][1];\n\t\t\tResult[1][3] = m[3][1];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<4, 3, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<3, 4, T, Q> call(mat<4, 3, T, Q> const& m)\n\t\t{\n\t\t\tmat<3, 4, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[0][2] = m[2][0];\n\t\t\tResult[0][3] = m[3][0];\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\tResult[1][2] = m[2][1];\n\t\t\tResult[1][3] = m[3][1];\n\t\t\tResult[2][0] = m[0][2];\n\t\t\tResult[2][1] = m[1][2];\n\t\t\tResult[2][2] = m[2][2];\n\t\t\tResult[2][3] = m[3][2];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose<4, 4, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m)\n\t\t{\n\t\t\tmat<4, 4, T, Q> Result;\n\t\t\tResult[0][0] = m[0][0];\n\t\t\tResult[0][1] = m[1][0];\n\t\t\tResult[0][2] = m[2][0];\n\t\t\tResult[0][3] = m[3][0];\n\n\t\t\tResult[1][0] = m[0][1];\n\t\t\tResult[1][1] = m[1][1];\n\t\t\tResult[1][2] = m[2][1];\n\t\t\tResult[1][3] = m[3][1];\n\n\t\t\tResult[2][0] = m[0][2];\n\t\t\tResult[2][1] = m[1][2];\n\t\t\tResult[2][2] = m[2][2];\n\t\t\tResult[2][3] = m[3][2];\n\n\t\t\tResult[3][0] = m[0][3];\n\t\t\tResult[3][1] = m[1][3];\n\t\t\tResult[3][2] = m[2][3];\n\t\t\tResult[3][3] = m[3][3];\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool IsFloat, bool Aligned>\n\tstruct compute_transpose_type {\n\t\tGLM_FUNC_QUALIFIER static mat<R, C, T, Q> call(mat<C, R, T, Q> const& m)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \n\t\t\t\t\"'transpose' only accept floating-point inputs, include <glm/ext/matrix_integer.hpp> to discard this restriction.\");\n\t\t\treturn detail::compute_transpose<C, R, T, Q, detail::is_aligned<Q>::value>::call(m);\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool Aligned>\n\tstruct compute_determinant{};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_determinant<2, 2, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(mat<2, 2, T, Q> const& m)\n\t\t{\n\t\t\treturn m[0][0] * m[1][1] - m[1][0] * m[0][1];\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_determinant<3, 3, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(mat<3, 3, T, Q> const& m)\n\t\t{\n\t\t\treturn\n\t\t\t\t+ m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])\n\t\t\t\t- m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])\n\t\t\t\t+ m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_determinant<4, 4, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(mat<4, 4, T, Q> const& m)\n\t\t{\n\t\t\tT SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t\tT SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t\tT SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t\tT SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t\tT SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t\tT SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\n\t\t\tvec<4, T, Q> DetCof(\n\t\t\t\t+ (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02),\n\t\t\t\t- (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04),\n\t\t\t\t+ (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05),\n\t\t\t\t- (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05));\n\n\t\t\treturn\n\t\t\t\tm[0][0] * DetCof[0] + m[0][1] * DetCof[1] +\n\t\t\t\tm[0][2] * DetCof[2] + m[0][3] * DetCof[3];\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool IsFloat, bool Aligned>\n\tstruct compute_determinant_type{\n\t\n\t\tGLM_FUNC_QUALIFIER static T call(mat<C, R, T, Q> const& m)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \n\t\t\t\t\"'determinant' only accept floating-point inputs, include <glm/ext/matrix_integer.hpp> to discard this restriction.\");\n\t\t\treturn detail::compute_determinant<C, R, T, Q, detail::is_aligned<Q>::value>::call(m);\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool Aligned>\n\tstruct compute_inverse{};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_inverse<2, 2, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m)\n\t\t{\n\t\t\tT OneOverDeterminant = static_cast<T>(1) / (\n\t\t\t\t+ m[0][0] * m[1][1]\n\t\t\t\t- m[1][0] * m[0][1]);\n\n\t\t\tmat<2, 2, T, Q> Inverse(\n\t\t\t\t+ m[1][1] * OneOverDeterminant,\n\t\t\t\t- m[0][1] * OneOverDeterminant,\n\t\t\t\t- m[1][0] * OneOverDeterminant,\n\t\t\t\t+ m[0][0] * OneOverDeterminant);\n\n\t\t\treturn Inverse;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_inverse<3, 3, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m)\n\t\t{\n\t\t\tT OneOverDeterminant = static_cast<T>(1) / (\n\t\t\t\t+ m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])\n\t\t\t\t- m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])\n\t\t\t\t+ m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]));\n\n\t\t\tmat<3, 3, T, Q> Inverse;\n\t\t\tInverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]) * OneOverDeterminant;\n\t\t\tInverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]) * OneOverDeterminant;\n\t\t\tInverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]) * OneOverDeterminant;\n\t\t\tInverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]) * OneOverDeterminant;\n\t\t\tInverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]) * OneOverDeterminant;\n\t\t\tInverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]) * OneOverDeterminant;\n\t\t\tInverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]) * OneOverDeterminant;\n\t\t\tInverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]) * OneOverDeterminant;\n\t\t\tInverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]) * OneOverDeterminant;\n\n\t\t\treturn Inverse;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_inverse<4, 4, T, Q, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m)\n\t\t{\n\t\t\tT Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t\tT Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3];\n\t\t\tT Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3];\n\n\t\t\tT Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t\tT Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3];\n\t\t\tT Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3];\n\n\t\t\tT Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t\tT Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2];\n\t\t\tT Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2];\n\n\t\t\tT Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t\tT Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3];\n\t\t\tT Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3];\n\n\t\t\tT Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t\tT Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2];\n\t\t\tT Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2];\n\n\t\t\tT Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t\tT Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1];\n\t\t\tT Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1];\n\n\t\t\tvec<4, T, Q> Fac0(Coef00, Coef00, Coef02, Coef03);\n\t\t\tvec<4, T, Q> Fac1(Coef04, Coef04, Coef06, Coef07);\n\t\t\tvec<4, T, Q> Fac2(Coef08, Coef08, Coef10, Coef11);\n\t\t\tvec<4, T, Q> Fac3(Coef12, Coef12, Coef14, Coef15);\n\t\t\tvec<4, T, Q> Fac4(Coef16, Coef16, Coef18, Coef19);\n\t\t\tvec<4, T, Q> Fac5(Coef20, Coef20, Coef22, Coef23);\n\n\t\t\tvec<4, T, Q> Vec0(m[1][0], m[0][0], m[0][0], m[0][0]);\n\t\t\tvec<4, T, Q> Vec1(m[1][1], m[0][1], m[0][1], m[0][1]);\n\t\t\tvec<4, T, Q> Vec2(m[1][2], m[0][2], m[0][2], m[0][2]);\n\t\t\tvec<4, T, Q> Vec3(m[1][3], m[0][3], m[0][3], m[0][3]);\n\n\t\t\tvec<4, T, Q> Inv0(Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2);\n\t\t\tvec<4, T, Q> Inv1(Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4);\n\t\t\tvec<4, T, Q> Inv2(Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5);\n\t\t\tvec<4, T, Q> Inv3(Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5);\n\n\t\t\tvec<4, T, Q> SignA(+1, -1, +1, -1);\n\t\t\tvec<4, T, Q> SignB(-1, +1, -1, +1);\n\t\t\tmat<4, 4, T, Q> Inverse(Inv0 * SignA, Inv1 * SignB, Inv2 * SignA, Inv3 * SignB);\n\n\t\t\tvec<4, T, Q> Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]);\n\n\t\t\tvec<4, T, Q> Dot0(m[0] * Row0);\n\t\t\tT Dot1 = (Dot0.x + Dot0.y) + (Dot0.z + Dot0.w);\n\n\t\t\tT OneOverDeterminant = static_cast<T>(1) / Dot1;\n\n\t\t\treturn Inverse * OneOverDeterminant;\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<C, R, T, Q> matrixCompMult(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y)\n\t{\n\t\treturn detail::compute_matrixCompMult_type<C, R, T, Q, std::numeric_limits<T>::is_iec559, detail::is_aligned<Q>::value>::call(x, y);\n\t}\n\n\ttemplate<length_t DA, length_t DB, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename detail::outerProduct_trait<DA, DB, T, Q>::type outerProduct(vec<DA, T, Q> const& c, vec<DB, T, Q> const& r)\n\t{\n\t\treturn detail::compute_outerProduct_type<DA, DB, T, Q, std::numeric_limits<T>::is_iec559>::call(c, r);\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<C, R, T, Q>::transpose_type transpose(mat<C, R, T, Q> const& m)\n\t{\n\t\treturn detail::compute_transpose_type<C, R, T, Q, std::numeric_limits<T>::is_iec559, detail::is_aligned<Q>::value>::call(m);\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T determinant(mat<C, R, T, Q> const& m)\n\t{\n\t\treturn detail::compute_determinant_type<C, R, T, Q, std::numeric_limits<T>::is_iec559, detail::is_aligned<Q>::value>::call(m);\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<C, R, T, Q> inverse(mat<C, R, T, Q> const& m)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"'inverse' only accept floating-point inputs\");\n\t\treturn detail::compute_inverse<C, R, T, Q, detail::is_aligned<Q>::value>::call(m);\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"func_matrix_simd.inl\"\n#endif\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/func_matrix_simd.inl",
    "content": "#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n#include \"type_mat4x4.hpp\"\n#include \"../geometric.hpp\"\n#include \"../simd/matrix.h\"\n#include <cstring>\n\nnamespace glm{\nnamespace detail\n{\n#\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n\ttemplate<qualifier Q>\n\tstruct compute_matrixCompMult<4, 4, float, Q, true>\n\t{\n\t\tGLM_STATIC_ASSERT(detail::is_aligned<Q>::value, \"Specialization requires aligned\");\n\n\t\tGLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& x, mat<4, 4, float, Q> const& y)\n\t\t{\n\t\t\tmat<4, 4, float, Q> Result;\n\t\t\tglm_mat4_matrixCompMult(\n\t\t\t        &x[0].data,\n\t\t\t        &y[0].data,\n\t\t\t        &Result[0].data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_transpose<4, 4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m)\n\t\t{\n\t\t\tmat<4, 4, float, Q> Result;\n\t\t\tglm_mat4_transpose(&m[0].data, &Result[0].data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_determinant<4, 4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static float call(mat<4, 4, float, Q> const& m)\n\t\t{\n\t\t\treturn _mm_cvtss_f32(glm_mat4_determinant(&m[0].data));\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_inverse<4, 4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m)\n\t\t{\n\t\t\tmat<4, 4, float, Q> Result;\n\t\t\tglm_mat4_inverse(&m[0].data, &Result[0].data);\n\t\t\treturn Result;\n\t\t}\n\t};\n}//namespace detail\n\n#\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER mat<4, 4, float, aligned_lowp> outerProduct<4, 4, float, aligned_lowp>(vec<4, float, aligned_lowp> const& c, vec<4, float, aligned_lowp> const& r)\n\t{\n\t\t__m128 NativeResult[4];\n\t\tglm_mat4_outerProduct(c.data, r.data, NativeResult);\n\t\tmat<4, 4, float, aligned_lowp> Result;\n\t\tstd::memcpy(&Result[0], &NativeResult[0], sizeof(Result));\n\t\treturn Result;\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER mat<4, 4, float, aligned_mediump> outerProduct<4, 4, float, aligned_mediump>(vec<4, float, aligned_mediump> const& c, vec<4, float, aligned_mediump> const& r)\n\t{\n\t\t__m128 NativeResult[4];\n\t\tglm_mat4_outerProduct(c.data, r.data, NativeResult);\n\t\tmat<4, 4, float, aligned_mediump> Result;\n\t\tstd::memcpy(&Result[0], &NativeResult[0], sizeof(Result));\n\t\treturn Result;\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER mat<4, 4, float, aligned_highp> outerProduct<4, 4, float, aligned_highp>(vec<4, float, aligned_highp> const& c, vec<4, float, aligned_highp> const& r)\n\t{\n\t\t__m128 NativeResult[4];\n\t\tglm_mat4_outerProduct(c.data, r.data, NativeResult);\n\t\tmat<4, 4, float, aligned_highp> Result;\n\t\tstd::memcpy(&Result[0], &NativeResult[0], sizeof(Result));\n\t\treturn Result;\n\t}\n#\tendif\n}//namespace glm\n\n#elif GLM_ARCH & GLM_ARCH_NEON_BIT\n\nnamespace glm {\n#if GLM_LANG & GLM_LANG_CXX11_FLAG\n\ttemplate <qualifier Q>\n\tGLM_FUNC_QUALIFIER\n\ttypename std::enable_if<detail::is_aligned<Q>::value, mat<4, 4, float, Q>>::type\n\toperator*(mat<4, 4, float, Q> const & m1, mat<4, 4, float, Q> const & m2)\n\t{\n\t\tauto MulRow = [&](int l) {\n\t\t\tfloat32x4_t const SrcA = m2[l].data;\n\n\t\t\tfloat32x4_t r = neon::mul_lane(m1[0].data, SrcA, 0);\n\t\t\tr = neon::madd_lane(r, m1[1].data, SrcA, 1);\n\t\t\tr = neon::madd_lane(r, m1[2].data, SrcA, 2);\n\t\t\tr = neon::madd_lane(r, m1[3].data, SrcA, 3);\n\n\t\t\treturn r;\n\t\t};\n\n\t\tmat<4, 4, float, aligned_highp> Result;\n\t\tResult[0].data = MulRow(0);\n\t\tResult[1].data = MulRow(1);\n\t\tResult[2].data = MulRow(2);\n\t\tResult[3].data = MulRow(3);\n\n\t\treturn Result;\n\t}\n#endif // CXX11\n\nnamespace detail\n{\n\ttemplate<qualifier Q>\n\tstruct compute_inverse<4, 4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m)\n\t\t{\n\t\t\tfloat32x4_t const& m0 = m[0].data;\n\t\t\tfloat32x4_t const& m1 = m[1].data;\n\t\t\tfloat32x4_t const& m2 = m[2].data;\n\t\t\tfloat32x4_t const& m3 = m[3].data;\n\n\t\t\t// m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t\t// m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t\t// m[1][2] * m[3][3] - m[3][2] * m[1][3];\n\t\t\t// m[1][2] * m[2][3] - m[2][2] * m[1][3];\n\n\t\t\tfloat32x4_t Fac0;\n\t\t\t{\n\t\t\t\tfloat32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2));\n\t\t\t\tfloat32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3);\n\t\t\t\tfloat32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2);\n\t\t\t\tfloat32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3));\n\t\t\t\tFac0 = w0 * w1 -  w2 * w3;\n\t\t\t}\n\n\t\t\t// m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t\t// m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t\t// m[1][1] * m[3][3] - m[3][1] * m[1][3];\n\t\t\t// m[1][1] * m[2][3] - m[2][1] * m[1][3];\n\n\t\t\tfloat32x4_t Fac1;\n\t\t\t{\n\t\t\t\tfloat32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1));\n\t\t\t\tfloat32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3);\n\t\t\t\tfloat32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1);\n\t\t\t\tfloat32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3));\n\t\t\t\tFac1 = w0 * w1 - w2 * w3;\n\t\t\t}\n\n\t\t\t// m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t\t// m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t\t// m[1][1] * m[3][2] - m[3][1] * m[1][2];\n\t\t\t// m[1][1] * m[2][2] - m[2][1] * m[1][2];\n\n\t\t\tfloat32x4_t Fac2;\n\t\t\t{\n\t\t\t\tfloat32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1));\n\t\t\t\tfloat32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2);\n\t\t\t\tfloat32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1);\n\t\t\t\tfloat32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2));\n\t\t\t\tFac2 = w0 * w1 - w2 * w3;\n\t\t\t}\n\n\t\t\t// m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t\t// m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t\t// m[1][0] * m[3][3] - m[3][0] * m[1][3];\n\t\t\t// m[1][0] * m[2][3] - m[2][0] * m[1][3];\n\n\t\t\tfloat32x4_t Fac3;\n\t\t\t{\n\t\t\t\tfloat32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0));\n\t\t\t\tfloat32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3);\n\t\t\t\tfloat32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0);\n\t\t\t\tfloat32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3));\n\t\t\t\tFac3 = w0 * w1 - w2 * w3;\n\t\t\t}\n\n\t\t\t// m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t\t// m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t\t// m[1][0] * m[3][2] - m[3][0] * m[1][2];\n\t\t\t// m[1][0] * m[2][2] - m[2][0] * m[1][2];\n\n\t\t\tfloat32x4_t Fac4;\n\t\t\t{\n\t\t\t\tfloat32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0));\n\t\t\t\tfloat32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2);\n\t\t\t\tfloat32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0);\n\t\t\t\tfloat32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2));\n\t\t\t\tFac4 = w0 * w1 - w2 * w3;\n\t\t\t}\n\n\t\t\t// m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t\t// m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t\t// m[1][0] * m[3][1] - m[3][0] * m[1][1];\n\t\t\t// m[1][0] * m[2][1] - m[2][0] * m[1][1];\n\n\t\t\tfloat32x4_t Fac5;\n\t\t\t{\n\t\t\t\tfloat32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0));\n\t\t\t\tfloat32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1);\n\t\t\t\tfloat32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0);\n\t\t\t\tfloat32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1));\n\t\t\t\tFac5 = w0 * w1 - w2 * w3;\n\t\t\t}\n\n\t\t\tfloat32x4_t Vec0 = neon::copy_lane(neon::dupq_lane(m0, 0), 0, m1, 0); // (m[1][0], m[0][0], m[0][0], m[0][0]);\n\t\t\tfloat32x4_t Vec1 = neon::copy_lane(neon::dupq_lane(m0, 1), 0, m1, 1); // (m[1][1], m[0][1], m[0][1], m[0][1]);\n\t\t\tfloat32x4_t Vec2 = neon::copy_lane(neon::dupq_lane(m0, 2), 0, m1, 2); // (m[1][2], m[0][2], m[0][2], m[0][2]);\n\t\t\tfloat32x4_t Vec3 = neon::copy_lane(neon::dupq_lane(m0, 3), 0, m1, 3); // (m[1][3], m[0][3], m[0][3], m[0][3]);\n\n\t\t\tfloat32x4_t Inv0 = Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2;\n\t\t\tfloat32x4_t Inv1 = Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4;\n\t\t\tfloat32x4_t Inv2 = Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5;\n\t\t\tfloat32x4_t Inv3 = Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5;\n\n\t\t\tfloat32x4_t r0 = float32x4_t{-1, +1, -1, +1} * Inv0;\n\t\t\tfloat32x4_t r1 = float32x4_t{+1, -1, +1, -1} * Inv1;\n\t\t\tfloat32x4_t r2 = float32x4_t{-1, +1, -1, +1} * Inv2;\n\t\t\tfloat32x4_t r3 = float32x4_t{+1, -1, +1, -1} * Inv3;\n\n\t\t\tfloat32x4_t det = neon::mul_lane(r0, m0, 0);\n\t\t\tdet = neon::madd_lane(det, r1, m0, 1);\n\t\t\tdet = neon::madd_lane(det, r2, m0, 2);\n\t\t\tdet = neon::madd_lane(det, r3, m0, 3);\n\n\t\t\tfloat32x4_t rdet = vdupq_n_f32(1 / vgetq_lane_f32(det, 0));\n\n\t\t\tmat<4, 4, float, Q> r;\n\t\t\tr[0].data = vmulq_f32(r0, rdet);\n\t\t\tr[1].data = vmulq_f32(r1, rdet);\n\t\t\tr[2].data = vmulq_f32(r2, rdet);\n\t\t\tr[3].data = vmulq_f32(r3, rdet);\n\t\t\treturn r;\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/func_packing.inl",
    "content": "/// @ref core\n/// @file glm/detail/func_packing.inl\n\n#include \"../common.hpp\"\n#include \"type_half.hpp\"\n\nnamespace glm\n{\n\tGLM_FUNC_QUALIFIER uint packUnorm2x16(vec2 const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tunsigned short in[2];\n\t\t\tuint out;\n\t\t} u;\n\n\t\tvec<2, unsigned short, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 65535.0f));\n\n\t\tu.in[0] = result[0];\n\t\tu.in[1] = result[1];\n\n\t\treturn u.out;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec2 unpackUnorm2x16(uint p)\n\t{\n\t\tunion\n\t\t{\n\t\t\tuint in;\n\t\t\tunsigned short out[2];\n\t\t} u;\n\n\t\tu.in = p;\n\n\t\treturn vec2(u.out[0], u.out[1]) * 1.5259021896696421759365224689097e-5f;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint packSnorm2x16(vec2 const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tsigned short in[2];\n\t\t\tuint out;\n\t\t} u;\n \n\t\tvec<2, short, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 32767.0f));\n\n\t\tu.in[0] = result[0];\n\t\tu.in[1] = result[1];\n\n\t\treturn u.out;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec2 unpackSnorm2x16(uint p)\n\t{\n\t\tunion\n\t\t{\n\t\t\tuint in;\n\t\t\tsigned short out[2];\n\t\t} u;\n\n\t\tu.in = p;\n\n\t\treturn clamp(vec2(u.out[0], u.out[1]) * 3.0518509475997192297128208258309e-5f, -1.0f, 1.0f);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint packUnorm4x8(vec4 const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tunsigned char in[4];\n\t\t\tuint out;\n\t\t} u;\n\n\t\tvec<4, unsigned char, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 255.0f));\n\n\t\tu.in[0] = result[0];\n\t\tu.in[1] = result[1];\n\t\tu.in[2] = result[2];\n\t\tu.in[3] = result[3];\n\n\t\treturn u.out;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec4 unpackUnorm4x8(uint p)\n\t{\n\t\tunion\n\t\t{\n\t\t\tuint in;\n\t\t\tunsigned char out[4];\n\t\t} u;\n\n\t\tu.in = p;\n\n\t\treturn vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0039215686274509803921568627451f;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint packSnorm4x8(vec4 const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tsigned char in[4];\n\t\t\tuint out;\n\t\t} u;\n\n\t\tvec<4, signed char, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 127.0f));\n\n\t\tu.in[0] = result[0];\n\t\tu.in[1] = result[1];\n\t\tu.in[2] = result[2];\n\t\tu.in[3] = result[3];\n\n\t\treturn u.out;\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::vec4 unpackSnorm4x8(uint p)\n\t{\n\t\tunion\n\t\t{\n\t\t\tuint in;\n\t\t\tsigned char out[4];\n\t\t} u;\n\n\t\tu.in = p;\n\n\t\treturn clamp(vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0078740157480315f, -1.0f, 1.0f);\n\t}\n\n\tGLM_FUNC_QUALIFIER double packDouble2x32(uvec2 const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tuint   in[2];\n\t\t\tdouble out;\n\t\t} u;\n\n\t\tu.in[0] = v[0];\n\t\tu.in[1] = v[1];\n\n\t\treturn u.out;\n\t}\n\n\tGLM_FUNC_QUALIFIER uvec2 unpackDouble2x32(double v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tdouble in;\n\t\t\tuint   out[2];\n\t\t} u;\n\n\t\tu.in = v;\n\n\t\treturn uvec2(u.out[0], u.out[1]);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint packHalf2x16(vec2 const& v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tsigned short in[2];\n\t\t\tuint out;\n\t\t} u;\n\n\t\tu.in[0] = detail::toFloat16(v.x);\n\t\tu.in[1] = detail::toFloat16(v.y);\n\n\t\treturn u.out;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint v)\n\t{\n\t\tunion\n\t\t{\n\t\t\tuint in;\n\t\t\tsigned short out[2];\n\t\t} u;\n\n\t\tu.in = v;\n\n\t\treturn vec2(\n\t\t\tdetail::toFloat32(u.out[0]),\n\t\t\tdetail::toFloat32(u.out[1]));\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"func_packing_simd.inl\"\n#endif\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/func_packing_simd.inl",
    "content": "namespace glm{\nnamespace detail\n{\n\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/func_trigonometric.inl",
    "content": "#include \"_vectorize.hpp\"\n#include <cmath>\n#include <limits>\n\nnamespace glm\n{\n\t// radians\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType radians(genType degrees)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'radians' only accept floating-point input\");\n\n\t\treturn degrees * static_cast<genType>(0.01745329251994329576923690768489);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> radians(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(radians, v);\n\t}\n\n\t// degrees\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType degrees(genType radians)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'degrees' only accept floating-point input\");\n\n\t\treturn radians * static_cast<genType>(57.295779513082320876798154814105);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> degrees(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(degrees, v);\n\t}\n\n\t// sin\n\tusing ::std::sin;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> sin(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(sin, v);\n\t}\n\n\t// cos\n\tusing std::cos;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> cos(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(cos, v);\n\t}\n\n\t// tan\n\tusing std::tan;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> tan(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(tan, v);\n\t}\n\n\t// asin\n\tusing std::asin;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> asin(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(asin, v);\n\t}\n\n\t// acos\n\tusing std::acos;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> acos(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(acos, v);\n\t}\n\n\t// atan\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType atan(genType y, genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'atan' only accept floating-point input\");\n\n\t\treturn ::std::atan2(y, x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> atan(vec<L, T, Q> const& a, vec<L, T, Q> const& b)\n\t{\n\t\treturn detail::functor2<vec, L, T, Q>::call(::std::atan2, a, b);\n\t}\n\n\tusing std::atan;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> atan(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(atan, v);\n\t}\n\n\t// sinh\n\tusing std::sinh;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> sinh(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(sinh, v);\n\t}\n\n\t// cosh\n\tusing std::cosh;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> cosh(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(cosh, v);\n\t}\n\n\t// tanh\n\tusing std::tanh;\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> tanh(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(tanh, v);\n\t}\n\n\t// asinh\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::asinh;\n#\telse\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER genType asinh(genType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'asinh' only accept floating-point input\");\n\n\t\t\treturn (x < static_cast<genType>(0) ? static_cast<genType>(-1) : (x > static_cast<genType>(0) ? static_cast<genType>(1) : static_cast<genType>(0))) * log(std::abs(x) + sqrt(static_cast<genType>(1) + x * x));\n\t\t}\n#\tendif\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> asinh(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(asinh, v);\n\t}\n\n\t// acosh\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::acosh;\n#\telse\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER genType acosh(genType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'acosh' only accept floating-point input\");\n\n\t\t\tif(x < static_cast<genType>(1))\n\t\t\t\treturn static_cast<genType>(0);\n\t\t\treturn log(x + sqrt(x * x - static_cast<genType>(1)));\n\t\t}\n#\tendif\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> acosh(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(acosh, v);\n\t}\n\n\t// atanh\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::atanh;\n#\telse\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER genType atanh(genType x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'atanh' only accept floating-point input\");\n\n\t\t\tif(std::abs(x) >= static_cast<genType>(1))\n\t\t\t\treturn 0;\n\t\t\treturn static_cast<genType>(0.5) * log((static_cast<genType>(1) + x) / (static_cast<genType>(1) - x));\n\t\t}\n#\tendif\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> atanh(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(atanh, v);\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"func_trigonometric_simd.inl\"\n#endif\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/func_trigonometric_simd.inl",
    "content": ""
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/func_vector_relational.inl",
    "content": "namespace glm\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> lessThan(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\tvec<L, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult[i] = x[i] < y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> lessThanEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\tvec<L, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult[i] = x[i] <= y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> greaterThan(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\tvec<L, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult[i] = x[i] > y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> greaterThanEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\tvec<L, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult[i] = x[i] >= y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\tvec<L, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult[i] = x[i] == y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\tvec<L, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult[i] = x[i] != y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool any(vec<L, bool, Q> const& v)\n\t{\n\t\tbool Result = false;\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult = Result || v[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool all(vec<L, bool, Q> const& v)\n\t{\n\t\tbool Result = true;\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult = Result && v[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> not_(vec<L, bool, Q> const& v)\n\t{\n\t\tvec<L, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t\tResult[i] = !v[i];\n\t\treturn Result;\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"func_vector_relational_simd.inl\"\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/func_vector_relational_simd.inl",
    "content": "namespace glm{\nnamespace detail\n{\n\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/glm.cpp",
    "content": "/// @ref core\n/// @file glm/glm.cpp\n\n#ifndef GLM_ENABLE_EXPERIMENTAL\n#define GLM_ENABLE_EXPERIMENTAL\n#endif\n#include <glm/gtx/dual_quaternion.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/gtc/quaternion.hpp>\n#include <glm/ext/scalar_int_sized.hpp>\n#include <glm/ext/scalar_uint_sized.hpp>\n#include <glm/glm.hpp>\n\nnamespace glm\n{\n// tvec1 type explicit instantiation\ntemplate struct vec<1, uint8, lowp>;\ntemplate struct vec<1, uint16, lowp>;\ntemplate struct vec<1, uint32, lowp>;\ntemplate struct vec<1, uint64, lowp>;\ntemplate struct vec<1, int8, lowp>;\ntemplate struct vec<1, int16, lowp>;\ntemplate struct vec<1, int32, lowp>;\ntemplate struct vec<1, int64, lowp>;\ntemplate struct vec<1, float32, lowp>;\ntemplate struct vec<1, float64, lowp>;\n\ntemplate struct vec<1, uint8, mediump>;\ntemplate struct vec<1, uint16, mediump>;\ntemplate struct vec<1, uint32, mediump>;\ntemplate struct vec<1, uint64, mediump>;\ntemplate struct vec<1, int8, mediump>;\ntemplate struct vec<1, int16, mediump>;\ntemplate struct vec<1, int32, mediump>;\ntemplate struct vec<1, int64, mediump>;\ntemplate struct vec<1, float32, mediump>;\ntemplate struct vec<1, float64, mediump>;\n\ntemplate struct vec<1, uint8, highp>;\ntemplate struct vec<1, uint16, highp>;\ntemplate struct vec<1, uint32, highp>;\ntemplate struct vec<1, uint64, highp>;\ntemplate struct vec<1, int8, highp>;\ntemplate struct vec<1, int16, highp>;\ntemplate struct vec<1, int32, highp>;\ntemplate struct vec<1, int64, highp>;\ntemplate struct vec<1, float32, highp>;\ntemplate struct vec<1, float64, highp>;\n\n// tvec2 type explicit instantiation\ntemplate struct vec<2, uint8, lowp>;\ntemplate struct vec<2, uint16, lowp>;\ntemplate struct vec<2, uint32, lowp>;\ntemplate struct vec<2, uint64, lowp>;\ntemplate struct vec<2, int8, lowp>;\ntemplate struct vec<2, int16, lowp>;\ntemplate struct vec<2, int32, lowp>;\ntemplate struct vec<2, int64, lowp>;\ntemplate struct vec<2, float32, lowp>;\ntemplate struct vec<2, float64, lowp>;\n\ntemplate struct vec<2, uint8, mediump>;\ntemplate struct vec<2, uint16, mediump>;\ntemplate struct vec<2, uint32, mediump>;\ntemplate struct vec<2, uint64, mediump>;\ntemplate struct vec<2, int8, mediump>;\ntemplate struct vec<2, int16, mediump>;\ntemplate struct vec<2, int32, mediump>;\ntemplate struct vec<2, int64, mediump>;\ntemplate struct vec<2, float32, mediump>;\ntemplate struct vec<2, float64, mediump>;\n\ntemplate struct vec<2, uint8, highp>;\ntemplate struct vec<2, uint16, highp>;\ntemplate struct vec<2, uint32, highp>;\ntemplate struct vec<2, uint64, highp>;\ntemplate struct vec<2, int8, highp>;\ntemplate struct vec<2, int16, highp>;\ntemplate struct vec<2, int32, highp>;\ntemplate struct vec<2, int64, highp>;\ntemplate struct vec<2, float32, highp>;\ntemplate struct vec<2, float64, highp>;\n\n// tvec3 type explicit instantiation\ntemplate struct vec<3, uint8, lowp>;\ntemplate struct vec<3, uint16, lowp>;\ntemplate struct vec<3, uint32, lowp>;\ntemplate struct vec<3, uint64, lowp>;\ntemplate struct vec<3, int8, lowp>;\ntemplate struct vec<3, int16, lowp>;\ntemplate struct vec<3, int32, lowp>;\ntemplate struct vec<3, int64, lowp>;\ntemplate struct vec<3, float32, lowp>;\ntemplate struct vec<3, float64, lowp>;\n\ntemplate struct vec<3, uint8, mediump>;\ntemplate struct vec<3, uint16, mediump>;\ntemplate struct vec<3, uint32, mediump>;\ntemplate struct vec<3, uint64, mediump>;\ntemplate struct vec<3, int8, mediump>;\ntemplate struct vec<3, int16, mediump>;\ntemplate struct vec<3, int32, mediump>;\ntemplate struct vec<3, int64, mediump>;\ntemplate struct vec<3, float32, mediump>;\ntemplate struct vec<3, float64, mediump>;\n\ntemplate struct vec<3, uint8, highp>;\ntemplate struct vec<3, uint16, highp>;\ntemplate struct vec<3, uint32, highp>;\ntemplate struct vec<3, uint64, highp>;\ntemplate struct vec<3, int8, highp>;\ntemplate struct vec<3, int16, highp>;\ntemplate struct vec<3, int32, highp>;\ntemplate struct vec<3, int64, highp>;\ntemplate struct vec<3, float32, highp>;\ntemplate struct vec<3, float64, highp>;\n\n// tvec4 type explicit instantiation\ntemplate struct vec<4, uint8, lowp>;\ntemplate struct vec<4, uint16, lowp>;\ntemplate struct vec<4, uint32, lowp>;\ntemplate struct vec<4, uint64, lowp>;\ntemplate struct vec<4, int8, lowp>;\ntemplate struct vec<4, int16, lowp>;\ntemplate struct vec<4, int32, lowp>;\ntemplate struct vec<4, int64, lowp>;\ntemplate struct vec<4, float32, lowp>;\ntemplate struct vec<4, float64, lowp>;\n\ntemplate struct vec<4, uint8, mediump>;\ntemplate struct vec<4, uint16, mediump>;\ntemplate struct vec<4, uint32, mediump>;\ntemplate struct vec<4, uint64, mediump>;\ntemplate struct vec<4, int8, mediump>;\ntemplate struct vec<4, int16, mediump>;\ntemplate struct vec<4, int32, mediump>;\ntemplate struct vec<4, int64, mediump>;\ntemplate struct vec<4, float32, mediump>;\ntemplate struct vec<4, float64, mediump>;\n\ntemplate struct vec<4, uint8, highp>;\ntemplate struct vec<4, uint16, highp>;\ntemplate struct vec<4, uint32, highp>;\ntemplate struct vec<4, uint64, highp>;\ntemplate struct vec<4, int8, highp>;\ntemplate struct vec<4, int16, highp>;\ntemplate struct vec<4, int32, highp>;\ntemplate struct vec<4, int64, highp>;\ntemplate struct vec<4, float32, highp>;\ntemplate struct vec<4, float64, highp>;\n\n// tmat2x2 type explicit instantiation\ntemplate struct mat<2, 2, float32, lowp>;\ntemplate struct mat<2, 2, float64, lowp>;\n\ntemplate struct mat<2, 2, float32, mediump>;\ntemplate struct mat<2, 2, float64, mediump>;\n\ntemplate struct mat<2, 2, float32, highp>;\ntemplate struct mat<2, 2, float64, highp>;\n\n// tmat2x3 type explicit instantiation\ntemplate struct mat<2, 3, float32, lowp>;\ntemplate struct mat<2, 3, float64, lowp>;\n\ntemplate struct mat<2, 3, float32, mediump>;\ntemplate struct mat<2, 3, float64, mediump>;\n\ntemplate struct mat<2, 3, float32, highp>;\ntemplate struct mat<2, 3, float64, highp>;\n\n// tmat2x4 type explicit instantiation\ntemplate struct mat<2, 4, float32, lowp>;\ntemplate struct mat<2, 4, float64, lowp>;\n\ntemplate struct mat<2, 4, float32, mediump>;\ntemplate struct mat<2, 4, float64, mediump>;\n\ntemplate struct mat<2, 4, float32, highp>;\ntemplate struct mat<2, 4, float64, highp>;\n\n// tmat3x2 type explicit instantiation\ntemplate struct mat<3, 2, float32, lowp>;\ntemplate struct mat<3, 2, float64, lowp>;\n\ntemplate struct mat<3, 2, float32, mediump>;\ntemplate struct mat<3, 2, float64, mediump>;\n\ntemplate struct mat<3, 2, float32, highp>;\ntemplate struct mat<3, 2, float64, highp>;\n\n// tmat3x3 type explicit instantiation\ntemplate struct mat<3, 3, float32, lowp>;\ntemplate struct mat<3, 3, float64, lowp>;\n\ntemplate struct mat<3, 3, float32, mediump>;\ntemplate struct mat<3, 3, float64, mediump>;\n\ntemplate struct mat<3, 3, float32, highp>;\ntemplate struct mat<3, 3, float64, highp>;\n\n// tmat3x4 type explicit instantiation\ntemplate struct mat<3, 4, float32, lowp>;\ntemplate struct mat<3, 4, float64, lowp>;\n\ntemplate struct mat<3, 4, float32, mediump>;\ntemplate struct mat<3, 4, float64, mediump>;\n\ntemplate struct mat<3, 4, float32, highp>;\ntemplate struct mat<3, 4, float64, highp>;\n\n// tmat4x2 type explicit instantiation\ntemplate struct mat<4, 2, float32, lowp>;\ntemplate struct mat<4, 2, float64, lowp>;\n\ntemplate struct mat<4, 2, float32, mediump>;\ntemplate struct mat<4, 2, float64, mediump>;\n\ntemplate struct mat<4, 2, float32, highp>;\ntemplate struct mat<4, 2, float64, highp>;\n\n// tmat4x3 type explicit instantiation\ntemplate struct mat<4, 3, float32, lowp>;\ntemplate struct mat<4, 3, float64, lowp>;\n\ntemplate struct mat<4, 3, float32, mediump>;\ntemplate struct mat<4, 3, float64, mediump>;\n\ntemplate struct mat<4, 3, float32, highp>;\ntemplate struct mat<4, 3, float64, highp>;\n\n// tmat4x4 type explicit instantiation\ntemplate struct mat<4, 4, float32, lowp>;\ntemplate struct mat<4, 4, float64, lowp>;\n\ntemplate struct mat<4, 4, float32, mediump>;\ntemplate struct mat<4, 4, float64, mediump>;\n\ntemplate struct mat<4, 4, float32, highp>;\ntemplate struct mat<4, 4, float64, highp>;\n\n// tquat type explicit instantiation\ntemplate struct qua<float32, lowp>;\ntemplate struct qua<float64, lowp>;\n\ntemplate struct qua<float32, mediump>;\ntemplate struct qua<float64, mediump>;\n\ntemplate struct qua<float32, highp>;\ntemplate struct qua<float64, highp>;\n\n//tdualquat type explicit instantiation\ntemplate struct tdualquat<float32, lowp>;\ntemplate struct tdualquat<float64, lowp>;\n\ntemplate struct tdualquat<float32, mediump>;\ntemplate struct tdualquat<float64, mediump>;\n\ntemplate struct tdualquat<float32, highp>;\ntemplate struct tdualquat<float64, highp>;\n\n}//namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/qualifier.hpp",
    "content": "#pragma once\n\n#include \"setup.hpp\"\n\nnamespace glm\n{\n\t/// Qualify GLM types in term of alignment (packed, aligned) and precision in term of ULPs (lowp, mediump, highp)\n\tenum qualifier\n\t{\n\t\tpacked_highp, ///< Typed data is tightly packed in memory and operations are executed with high precision in term of ULPs\n\t\tpacked_mediump, ///< Typed data is tightly packed in memory  and operations are executed with medium precision in term of ULPs for higher performance\n\t\tpacked_lowp, ///< Typed data is tightly packed in memory  and operations are executed with low precision in term of ULPs to maximize performance\n\n#\t\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n\t\t\taligned_highp, ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs\n\t\t\taligned_mediump, ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs for higher performance\n\t\t\taligned_lowp, // ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs to maximize performance\n\t\t\taligned = aligned_highp, ///< By default aligned qualifier is also high precision\n#\t\tendif\n\n\t\thighp = packed_highp, ///< By default highp qualifier is also packed\n\t\tmediump = packed_mediump, ///< By default mediump qualifier is also packed\n\t\tlowp = packed_lowp, ///< By default lowp qualifier is also packed\n\t\tpacked = packed_highp, ///< By default packed qualifier is also high precision\n\n#\t\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE && defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES)\n\t\t\tdefaultp = aligned_highp\n#\t\telse\n\t\t\tdefaultp = highp\n#\t\tendif\n\t};\n\n\ttypedef qualifier precision;\n\n\ttemplate<length_t L, typename T, qualifier Q = defaultp> struct vec;\n\ttemplate<length_t C, length_t R, typename T, qualifier Q = defaultp> struct mat;\n\ttemplate<typename T, qualifier Q = defaultp> struct qua;\n\n#\tif GLM_HAS_TEMPLATE_ALIASES\n\t\ttemplate <typename T, qualifier Q = defaultp> using tvec1 = vec<1, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tvec2 = vec<2, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tvec3 = vec<3, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tvec4 = vec<4, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat2x2 = mat<2, 2, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat2x3 = mat<2, 3, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat2x4 = mat<2, 4, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat3x2 = mat<3, 2, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat3x3 = mat<3, 3, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat3x4 = mat<3, 4, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat4x2 = mat<4, 2, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat4x3 = mat<4, 3, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tmat4x4 = mat<4, 4, T, Q>;\n\t\ttemplate <typename T, qualifier Q = defaultp> using tquat = qua<T, Q>;\n#\tendif\n\nnamespace detail\n{\n\ttemplate<glm::qualifier P>\n\tstruct is_aligned\n\t{\n\t\tstatic const bool value = false;\n\t};\n\n#\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n\t\ttemplate<>\n\t\tstruct is_aligned<glm::aligned_lowp>\n\t\t{\n\t\t\tstatic const bool value = true;\n\t\t};\n\n\t\ttemplate<>\n\t\tstruct is_aligned<glm::aligned_mediump>\n\t\t{\n\t\t\tstatic const bool value = true;\n\t\t};\n\n\t\ttemplate<>\n\t\tstruct is_aligned<glm::aligned_highp>\n\t\t{\n\t\t\tstatic const bool value = true;\n\t\t};\n#\tendif\n\n\ttemplate<length_t L, typename T, bool is_aligned>\n\tstruct storage\n\t{\n\t\ttypedef struct type {\n\t\t\tT data[L];\n\t\t} type;\n\t};\n\n#\tif GLM_HAS_ALIGNOF\n\t\ttemplate<length_t L, typename T>\n\t\tstruct storage<L, T, true>\n\t\t{\n\t\t\ttypedef struct alignas(L * sizeof(T)) type {\n\t\t\t\tT data[L];\n\t\t\t} type;\n\t\t};\n\n\t\ttemplate<typename T>\n\t\tstruct storage<3, T, true>\n\t\t{\n\t\t\ttypedef struct alignas(4 * sizeof(T)) type {\n\t\t\t\tT data[4];\n\t\t\t} type;\n\t\t};\n#\tendif\n\n#\tif GLM_ARCH & GLM_ARCH_SSE2_BIT\n\ttemplate<>\n\tstruct storage<4, float, true>\n\t{\n\t\ttypedef glm_f32vec4 type;\n\t};\n\n\ttemplate<>\n\tstruct storage<4, int, true>\n\t{\n\t\ttypedef glm_i32vec4 type;\n\t};\n\n\ttemplate<>\n\tstruct storage<4, unsigned int, true>\n\t{\n\t\ttypedef glm_u32vec4 type;\n\t};\n\n\ttemplate<>\n\tstruct storage<2, double, true>\n\t{\n\t\ttypedef glm_f64vec2 type;\n\t};\n\n\ttemplate<>\n\tstruct storage<2, detail::int64, true>\n\t{\n\t\ttypedef glm_i64vec2 type;\n\t};\n\n\ttemplate<>\n\tstruct storage<2, detail::uint64, true>\n\t{\n\t\ttypedef glm_u64vec2 type;\n\t};\n#\tendif\n#\tif (GLM_ARCH & GLM_ARCH_AVX_BIT)\n\ttemplate<>\n\tstruct storage<4, double, true>\n\t{\n\t\ttypedef glm_f64vec4 type;\n\t};\n#\tendif\n\n#\tif (GLM_ARCH & GLM_ARCH_AVX2_BIT)\n\ttemplate<>\n\tstruct storage<4, detail::int64, true>\n\t{\n\t\ttypedef glm_i64vec4 type;\n\t};\n\n\ttemplate<>\n\tstruct storage<4, detail::uint64, true>\n\t{\n\t\ttypedef glm_u64vec4 type;\n\t};\n#\tendif\n\n#\tif GLM_ARCH & GLM_ARCH_NEON_BIT\n\ttemplate<>\n\tstruct storage<4, float, true>\n\t{\n\t\ttypedef glm_f32vec4 type;\n\t};\n\n\ttemplate<>\n\tstruct storage<4, int, true>\n\t{\n\t\ttypedef glm_i32vec4 type;\n\t};\n\n\ttemplate<>\n\tstruct storage<4, unsigned int, true>\n\t{\n\t\ttypedef glm_u32vec4 type;\n\t};\n#\tendif\n\n\tenum genTypeEnum\n\t{\n\t\tGENTYPE_VEC,\n\t\tGENTYPE_MAT,\n\t\tGENTYPE_QUAT\n\t};\n\n\ttemplate <typename genType>\n\tstruct genTypeTrait\n\t{};\n\n\ttemplate <length_t C, length_t R, typename T>\n\tstruct genTypeTrait<mat<C, R, T> >\n\t{\n\t\tstatic const genTypeEnum GENTYPE = GENTYPE_MAT;\n\t};\n\n\ttemplate<typename genType, genTypeEnum type>\n\tstruct init_gentype\n\t{\n\t};\n\n\ttemplate<typename genType>\n\tstruct init_gentype<genType, GENTYPE_QUAT>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity()\n\t\t{\n\t\t\treturn genType(1, 0, 0, 0);\n\t\t}\n\t};\n\n\ttemplate<typename genType>\n\tstruct init_gentype<genType, GENTYPE_MAT>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity()\n\t\t{\n\t\t\treturn genType(1);\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/setup.hpp",
    "content": "#ifndef GLM_SETUP_INCLUDED\n\n#include <cassert>\n#include <cstddef>\n\n#define GLM_VERSION_MAJOR 0\n#define GLM_VERSION_MINOR 9\n#define GLM_VERSION_PATCH 9\n#define GLM_VERSION_REVISION 9\n#define GLM_VERSION 999\n#define GLM_VERSION_MESSAGE \"GLM: version 0.9.9.9\"\n\n#define GLM_SETUP_INCLUDED GLM_VERSION\n\n///////////////////////////////////////////////////////////////////////////////////\n// Active states\n\n#define GLM_DISABLE\t\t0\n#define GLM_ENABLE\t\t1\n\n///////////////////////////////////////////////////////////////////////////////////\n// Messages\n\n#if defined(GLM_FORCE_MESSAGES)\n#\tdefine GLM_MESSAGES GLM_ENABLE\n#else\n#\tdefine GLM_MESSAGES GLM_DISABLE\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Detect the platform\n\n#include \"../simd/platform.h\"\n\n///////////////////////////////////////////////////////////////////////////////////\n// Build model\n\n#if defined(_M_ARM64) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__)\n#\tdefine GLM_MODEL\tGLM_MODEL_64\n#elif defined(__i386__) || defined(__ppc__) || defined(__ILP32__) || defined(_M_ARM)\n#\tdefine GLM_MODEL\tGLM_MODEL_32\n#else\n#\tdefine GLM_MODEL\tGLM_MODEL_32\n#endif//\n\n#if !defined(GLM_MODEL) && GLM_COMPILER != 0\n#\terror \"GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message.\"\n#endif//GLM_MODEL\n\n///////////////////////////////////////////////////////////////////////////////////\n// C++ Version\n\n// User defines: GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_FORCE_CXX11, GLM_FORCE_CXX14, GLM_FORCE_CXX17, GLM_FORCE_CXX2A\n\n#define GLM_LANG_CXX98_FLAG\t\t\t(1 << 1)\n#define GLM_LANG_CXX03_FLAG\t\t\t(1 << 2)\n#define GLM_LANG_CXX0X_FLAG\t\t\t(1 << 3)\n#define GLM_LANG_CXX11_FLAG\t\t\t(1 << 4)\n#define GLM_LANG_CXX14_FLAG\t\t\t(1 << 5)\n#define GLM_LANG_CXX17_FLAG\t\t\t(1 << 6)\n#define GLM_LANG_CXX2A_FLAG\t\t\t(1 << 7)\n#define GLM_LANG_CXXMS_FLAG\t\t\t(1 << 8)\n#define GLM_LANG_CXXGNU_FLAG\t\t(1 << 9)\n\n#define GLM_LANG_CXX98\t\t\tGLM_LANG_CXX98_FLAG\n#define GLM_LANG_CXX03\t\t\t(GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG)\n#define GLM_LANG_CXX0X\t\t\t(GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG)\n#define GLM_LANG_CXX11\t\t\t(GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG)\n#define GLM_LANG_CXX14\t\t\t(GLM_LANG_CXX11 | GLM_LANG_CXX14_FLAG)\n#define GLM_LANG_CXX17\t\t\t(GLM_LANG_CXX14 | GLM_LANG_CXX17_FLAG)\n#define GLM_LANG_CXX2A\t\t\t(GLM_LANG_CXX17 | GLM_LANG_CXX2A_FLAG)\n#define GLM_LANG_CXXMS\t\t\tGLM_LANG_CXXMS_FLAG\n#define GLM_LANG_CXXGNU\t\t\tGLM_LANG_CXXGNU_FLAG\n\n#if (defined(_MSC_EXTENSIONS))\n#\tdefine GLM_LANG_EXT GLM_LANG_CXXMS_FLAG\n#elif ((GLM_COMPILER & (GLM_COMPILER_CLANG | GLM_COMPILER_GCC)) && (GLM_ARCH & GLM_ARCH_SIMD_BIT))\n#\tdefine GLM_LANG_EXT GLM_LANG_CXXMS_FLAG\n#else\n#\tdefine GLM_LANG_EXT 0\n#endif\n\n#if (defined(GLM_FORCE_CXX_UNKNOWN))\n#\tdefine GLM_LANG 0\n#elif defined(GLM_FORCE_CXX2A)\n#\tdefine GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT)\n#\tdefine GLM_LANG_STL11_FORCED\n#elif defined(GLM_FORCE_CXX17)\n#\tdefine GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT)\n#\tdefine GLM_LANG_STL11_FORCED\n#elif defined(GLM_FORCE_CXX14)\n#\tdefine GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT)\n#\tdefine GLM_LANG_STL11_FORCED\n#elif defined(GLM_FORCE_CXX11)\n#\tdefine GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT)\n#\tdefine GLM_LANG_STL11_FORCED\n#elif defined(GLM_FORCE_CXX03)\n#\tdefine GLM_LANG (GLM_LANG_CXX03 | GLM_LANG_EXT)\n#elif defined(GLM_FORCE_CXX98)\n#\tdefine GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT)\n#else\n#\tif GLM_COMPILER & GLM_COMPILER_VC && defined(_MSVC_LANG)\n#\t\tif GLM_COMPILER >= GLM_COMPILER_VC15_7\n#\t\t\tdefine GLM_LANG_PLATFORM _MSVC_LANG\n#\t\telif GLM_COMPILER >= GLM_COMPILER_VC15\n#\t\t\tif _MSVC_LANG > 201402L\n#\t\t\t\tdefine GLM_LANG_PLATFORM 201402L\n#\t\t\telse\n#\t\t\t\tdefine GLM_LANG_PLATFORM _MSVC_LANG\n#\t\t\tendif\n#\t\telse\n#\t\t\tdefine GLM_LANG_PLATFORM 0\n#\t\tendif\n#\telse\n#\t\tdefine GLM_LANG_PLATFORM 0\n#\tendif\n\n#\tif __cplusplus > 201703L || GLM_LANG_PLATFORM > 201703L\n#\t\tdefine GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT)\n#\telif __cplusplus == 201703L || GLM_LANG_PLATFORM == 201703L\n#\t\tdefine GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT)\n#\telif __cplusplus == 201402L || __cplusplus == 201406L || __cplusplus == 201500L || GLM_LANG_PLATFORM == 201402L\n#\t\tdefine GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT)\n#\telif __cplusplus == 201103L || GLM_LANG_PLATFORM == 201103L\n#\t\tdefine GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT)\n#\telif defined(__INTEL_CXX11_MODE__) || defined(_MSC_VER) || defined(__GXX_EXPERIMENTAL_CXX0X__)\n#\t\tdefine GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_EXT)\n#\telif __cplusplus == 199711L\n#\t\tdefine GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT)\n#\telse\n#\t\tdefine GLM_LANG (0 | GLM_LANG_EXT)\n#\tendif\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Has of C++ features\n\n// http://clang.llvm.org/cxx_status.html\n// http://gcc.gnu.org/projects/cxx0x.html\n// http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx\n\n// Android has multiple STLs but C++11 STL detection doesn't always work #284 #564\n#if GLM_PLATFORM == GLM_PLATFORM_ANDROID && !defined(GLM_LANG_STL11_FORCED)\n#\tdefine GLM_HAS_CXX11_STL 0\n#elif (GLM_COMPILER & GLM_COMPILER_CUDA_RTC) == GLM_COMPILER_CUDA_RTC\n#\tdefine GLM_HAS_CXX11_STL 0\n#elif (GLM_COMPILER & GLM_COMPILER_HIP)\n#\tdefine GLM_HAS_CXX11_STL 0\n#elif GLM_COMPILER & GLM_COMPILER_CLANG\n#\tif (defined(_LIBCPP_VERSION) || (GLM_LANG & GLM_LANG_CXX11_FLAG) || defined(GLM_LANG_STL11_FORCED))\n#\t\tdefine GLM_HAS_CXX11_STL 1\n#\telse\n#\t\tdefine GLM_HAS_CXX11_STL 0\n#\tendif\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_CXX11_STL 1\n#else\n#\tdefine GLM_HAS_CXX11_STL ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \\\n\t\t((GLM_PLATFORM != GLM_PLATFORM_WINDOWS) && (GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15))))\n#endif\n\n// N1720\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_STATIC_ASSERT __has_feature(cxx_static_assert)\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_STATIC_ASSERT 1\n#else\n#\tdefine GLM_HAS_STATIC_ASSERT ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n// N1988\n#if GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_EXTENDED_INTEGER_TYPE 1\n#else\n#\tdefine GLM_HAS_EXTENDED_INTEGER_TYPE (\\\n\t\t((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC)) || \\\n\t\t((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CLANG)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP)))\n#endif\n\n// N2672 Initializer lists http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_INITIALIZER_LISTS __has_feature(cxx_generalized_initializers)\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_INITIALIZER_LISTS 1\n#else\n#\tdefine GLM_HAS_INITIALIZER_LISTS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n// N2544 Unrestricted unions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions)\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_UNRESTRICTED_UNIONS 1\n#else\n#\tdefine GLM_HAS_UNRESTRICTED_UNIONS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t(GLM_COMPILER & GLM_COMPILER_VC) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP)))\n#endif\n\n// N2346\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_DEFAULTED_FUNCTIONS __has_feature(cxx_defaulted_functions)\n#elif GLM_COMPILER & GLM_COMPILER_CUDA\n\t// Do not use defaulted functions for CUDA compiler when function qualifiers are present\n#\tdefine GLM_HAS_DEFAULTED_FUNCTIONS 0\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_DEFAULTED_FUNCTIONS 1\n#else\n#\tdefine GLM_HAS_DEFAULTED_FUNCTIONS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_INTEL)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n// N2118\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_RVALUE_REFERENCES __has_feature(cxx_rvalue_references)\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_RVALUE_REFERENCES 1\n#else\n#\tdefine GLM_HAS_RVALUE_REFERENCES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n// N2437 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_EXPLICIT_CONVERSION_OPERATORS __has_feature(cxx_explicit_conversions)\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1\n#else\n#\tdefine GLM_HAS_EXPLICIT_CONVERSION_OPERATORS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n// N2258 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_TEMPLATE_ALIASES __has_feature(cxx_alias_templates)\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_TEMPLATE_ALIASES 1\n#else\n#\tdefine GLM_HAS_TEMPLATE_ALIASES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_INTEL)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n// N2930 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_RANGE_FOR __has_feature(cxx_range_for)\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_RANGE_FOR 1\n#else\n#\tdefine GLM_HAS_RANGE_FOR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_INTEL)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n// N2341 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf\n#if GLM_COMPILER & GLM_COMPILER_CLANG\n#\tdefine GLM_HAS_ALIGNOF __has_feature(cxx_alignas)\n#elif GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_ALIGNOF 1\n#else\n#\tdefine GLM_HAS_ALIGNOF ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n// N2235 Generalized Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf\n// N3652 Extended Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html\n#if (GLM_ARCH & GLM_ARCH_SIMD_BIT) // Compiler SIMD intrinsics don't support constexpr...\n#\tdefine GLM_HAS_CONSTEXPR 0\n#elif (GLM_COMPILER & GLM_COMPILER_CLANG)\n#\tdefine GLM_HAS_CONSTEXPR __has_feature(cxx_relaxed_constexpr)\n#elif (GLM_LANG & GLM_LANG_CXX14_FLAG)\n#\tdefine GLM_HAS_CONSTEXPR 1\n#else\n#\tdefine GLM_HAS_CONSTEXPR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && GLM_HAS_INITIALIZER_LISTS && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL17)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15))))\n#endif\n\n#if GLM_HAS_CONSTEXPR\n#\tdefine GLM_CONSTEXPR constexpr\n#else\n#\tdefine GLM_CONSTEXPR\n#endif\n\n//\n#if GLM_HAS_CONSTEXPR\n# if (GLM_COMPILER & GLM_COMPILER_CLANG)\n#\tif __has_feature(cxx_if_constexpr)\n#\t\tdefine GLM_HAS_IF_CONSTEXPR 1\n#\telse\n# \t\tdefine GLM_HAS_IF_CONSTEXPR 0\n#\tendif\n# elif (GLM_LANG & GLM_LANG_CXX17_FLAG)\n# \tdefine GLM_HAS_IF_CONSTEXPR 1\n# else\n# \tdefine GLM_HAS_IF_CONSTEXPR 0\n# endif\n#else\n#\tdefine GLM_HAS_IF_CONSTEXPR 0\n#endif\n\n#if GLM_HAS_IF_CONSTEXPR\n# \tdefine GLM_IF_CONSTEXPR if constexpr\n#else\n#\tdefine GLM_IF_CONSTEXPR if\n#endif\n\n//\n#if GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_ASSIGNABLE 1\n#else\n#\tdefine GLM_HAS_ASSIGNABLE ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49))))\n#endif\n\n//\n#define GLM_HAS_TRIVIAL_QUERIES 0\n\n//\n#if GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_MAKE_SIGNED 1\n#else\n#\tdefine GLM_HAS_MAKE_SIGNED ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_CUDA)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_HIP))))\n#endif\n\n//\n#if defined(GLM_FORCE_INTRINSICS)\n#\tdefine GLM_HAS_BITSCAN_WINDOWS ((GLM_PLATFORM & GLM_PLATFORM_WINDOWS) && (\\\n\t\t((GLM_COMPILER & GLM_COMPILER_INTEL)) || \\\n\t\t((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14) && (GLM_ARCH & GLM_ARCH_X86_BIT))))\n#else\n#\tdefine GLM_HAS_BITSCAN_WINDOWS 0\n#endif\n\n#if GLM_LANG & GLM_LANG_CXX11_FLAG\n#\tdefine GLM_HAS_NOEXCEPT 1\n#else\n#\tdefine GLM_HAS_NOEXCEPT 0\n#endif\n\n#if GLM_HAS_NOEXCEPT\n#\tdefine GLM_NOEXCEPT noexcept\n#else\n#\tdefine GLM_NOEXCEPT\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// OpenMP\n#ifdef _OPENMP\n#\tif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\tif GLM_COMPILER >= GLM_COMPILER_GCC61\n#\t\t\tdefine GLM_HAS_OPENMP 45\n#\t\telif GLM_COMPILER >= GLM_COMPILER_GCC49\n#\t\t\tdefine GLM_HAS_OPENMP 40\n#\t\telif GLM_COMPILER >= GLM_COMPILER_GCC47\n#\t\t\tdefine GLM_HAS_OPENMP 31\n#\t\telse\n#\t\t\tdefine GLM_HAS_OPENMP 0\n#\t\tendif\n#\telif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\tif GLM_COMPILER >= GLM_COMPILER_CLANG38\n#\t\t\tdefine GLM_HAS_OPENMP 31\n#\t\telse\n#\t\t\tdefine GLM_HAS_OPENMP 0\n#\t\tendif\n#\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\tdefine GLM_HAS_OPENMP 20\n#\telif GLM_COMPILER & GLM_COMPILER_INTEL\n#\t\tif GLM_COMPILER >= GLM_COMPILER_INTEL16\n#\t\t\tdefine GLM_HAS_OPENMP 40\n#\t\telse\n#\t\t\tdefine GLM_HAS_OPENMP 0\n#\t\tendif\n#\telse\n#\t\tdefine GLM_HAS_OPENMP 0\n#\tendif\n#else\n#\tdefine GLM_HAS_OPENMP 0\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// nullptr\n\n#if GLM_LANG & GLM_LANG_CXX0X_FLAG\n#\tdefine GLM_CONFIG_NULLPTR GLM_ENABLE\n#else\n#\tdefine GLM_CONFIG_NULLPTR GLM_DISABLE\n#endif\n\n#if GLM_CONFIG_NULLPTR == GLM_ENABLE\n#\tdefine GLM_NULLPTR nullptr\n#else\n#\tdefine GLM_NULLPTR 0\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Static assert\n\n#if GLM_HAS_STATIC_ASSERT\n#\tdefine GLM_STATIC_ASSERT(x, message) static_assert(x, message)\n#elif GLM_COMPILER & GLM_COMPILER_VC\n#\tdefine GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1]\n#else\n#\tdefine GLM_STATIC_ASSERT(x, message) assert(x)\n#endif//GLM_LANG\n\n///////////////////////////////////////////////////////////////////////////////////\n// Qualifiers\n\n// User defines: GLM_CUDA_FORCE_DEVICE_FUNC, GLM_CUDA_FORCE_HOST_FUNC\n\n#if (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)\n#\tif defined(GLM_CUDA_FORCE_DEVICE_FUNC) && defined(GLM_CUDA_FORCE_HOST_FUNC)\n#\t\terror \"GLM error: GLM_CUDA_FORCE_DEVICE_FUNC and GLM_CUDA_FORCE_HOST_FUNC should not be defined at the same time, GLM by default generates both device and host code for CUDA compiler.\"\n#\tendif//defined(GLM_CUDA_FORCE_DEVICE_FUNC) && defined(GLM_CUDA_FORCE_HOST_FUNC)\n\n#\tif defined(GLM_CUDA_FORCE_DEVICE_FUNC)\n#\t\tdefine GLM_CUDA_FUNC_DEF __device__\n#\t\tdefine GLM_CUDA_FUNC_DECL __device__\n#\telif defined(GLM_CUDA_FORCE_HOST_FUNC)\n#\t\tdefine GLM_CUDA_FUNC_DEF __host__\n#\t\tdefine GLM_CUDA_FUNC_DECL __host__\n#\telse\n#\t\tdefine GLM_CUDA_FUNC_DEF __device__ __host__\n#\t\tdefine GLM_CUDA_FUNC_DECL __device__ __host__\n#\tendif//defined(GLM_CUDA_FORCE_XXXX_FUNC)\n#else\n#\tdefine GLM_CUDA_FUNC_DEF\n#\tdefine GLM_CUDA_FUNC_DECL\n#endif\n\n#if defined(GLM_FORCE_INLINE)\n#\tif GLM_COMPILER & GLM_COMPILER_VC\n#\t\tdefine GLM_INLINE __forceinline\n#\t\tdefine GLM_NEVER_INLINE __declspec(noinline)\n#\telif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)\n#\t\tdefine GLM_INLINE inline __attribute__((__always_inline__))\n#\t\tdefine GLM_NEVER_INLINE __attribute__((__noinline__))\n#\telif (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)\n#\t\tdefine GLM_INLINE __forceinline__\n#\t\tdefine GLM_NEVER_INLINE __noinline__\n#\telse\n#\t\tdefine GLM_INLINE inline\n#\t\tdefine GLM_NEVER_INLINE\n#\tendif//GLM_COMPILER\n#else\n#\tdefine GLM_INLINE inline\n#\tdefine GLM_NEVER_INLINE\n#endif//defined(GLM_FORCE_INLINE)\n\n#define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL\n#define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE\n\n///////////////////////////////////////////////////////////////////////////////////\n// Swizzle operators\n\n// User defines: GLM_FORCE_SWIZZLE\n\n#define GLM_SWIZZLE_DISABLED\t\t0\n#define GLM_SWIZZLE_OPERATOR\t\t1\n#define GLM_SWIZZLE_FUNCTION\t\t2\n\n#if defined(GLM_SWIZZLE)\n#\tpragma message(\"GLM: GLM_SWIZZLE is deprecated, use GLM_FORCE_SWIZZLE instead.\")\n#\tdefine GLM_FORCE_SWIZZLE\n#endif\n\n#if defined(GLM_FORCE_SWIZZLE) && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && !defined(GLM_FORCE_XYZW_ONLY)\n#\tdefine GLM_CONFIG_SWIZZLE GLM_SWIZZLE_OPERATOR\n#elif defined(GLM_FORCE_SWIZZLE)\n#\tdefine GLM_CONFIG_SWIZZLE GLM_SWIZZLE_FUNCTION\n#else\n#\tdefine GLM_CONFIG_SWIZZLE GLM_SWIZZLE_DISABLED\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Allows using not basic types as genType\n\n// #define GLM_FORCE_UNRESTRICTED_GENTYPE\n\n#ifdef GLM_FORCE_UNRESTRICTED_GENTYPE\n#\tdefine GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_ENABLE\n#else\n#\tdefine GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_DISABLE\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Clip control, define GLM_FORCE_DEPTH_ZERO_TO_ONE before including GLM\n// to use a clip space between 0 to 1.\n// Coordinate system, define GLM_FORCE_LEFT_HANDED before including GLM\n// to use left handed coordinate system by default.\n\n#define GLM_CLIP_CONTROL_ZO_BIT\t\t(1 << 0) // ZERO_TO_ONE\n#define GLM_CLIP_CONTROL_NO_BIT\t\t(1 << 1) // NEGATIVE_ONE_TO_ONE\n#define GLM_CLIP_CONTROL_LH_BIT\t\t(1 << 2) // LEFT_HANDED, For DirectX, Metal, Vulkan\n#define GLM_CLIP_CONTROL_RH_BIT\t\t(1 << 3) // RIGHT_HANDED, For OpenGL, default in GLM\n\n#define GLM_CLIP_CONTROL_LH_ZO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_ZO_BIT)\n#define GLM_CLIP_CONTROL_LH_NO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_NO_BIT)\n#define GLM_CLIP_CONTROL_RH_ZO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_ZO_BIT)\n#define GLM_CLIP_CONTROL_RH_NO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_NO_BIT)\n\n#ifdef GLM_FORCE_DEPTH_ZERO_TO_ONE\n#\tifdef GLM_FORCE_LEFT_HANDED\n#\t\tdefine GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_ZO\n#\telse\n#\t\tdefine GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_ZO\n#\tendif\n#else\n#\tifdef GLM_FORCE_LEFT_HANDED\n#\t\tdefine GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_NO\n#\telse\n#\t\tdefine GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_NO\n#\tendif\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Qualifiers\n\n#if (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))\n#\tdefine GLM_DEPRECATED __declspec(deprecated)\n#\tdefine GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name\n#elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_INTEL)\n#\tdefine GLM_DEPRECATED __attribute__((__deprecated__))\n#\tdefine GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(alignment)))\n#elif (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)\n#\tdefine GLM_DEPRECATED\n#\tdefine GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __align__(x)\n#else\n#\tdefine GLM_DEPRECATED\n#\tdefine GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n\n#ifdef GLM_FORCE_EXPLICIT_CTOR\n#\tdefine GLM_EXPLICIT explicit\n#else\n#\tdefine GLM_EXPLICIT\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// SYCL\n\n#if GLM_COMPILER==GLM_COMPILER_SYCL\n\n#include <CL/sycl.hpp>\n#include <limits>\n\nnamespace glm {\nnamespace std {\n\t// Import SYCL's functions into the namespace glm::std to force their usages.\n\t// It's important to use the math built-in function (sin, exp, ...)\n\t// of SYCL instead the std ones.\n\tusing namespace cl::sycl;\n\n\t///////////////////////////////////////////////////////////////////////////////\n\t// Import some \"harmless\" std's stuffs used by glm into\n\t// the new glm::std namespace.\n\ttemplate<typename T>\n\tusing numeric_limits = ::std::numeric_limits<T>;\n\n\tusing ::std::size_t;\n\n\tusing ::std::uint8_t;\n\tusing ::std::uint16_t;\n\tusing ::std::uint32_t;\n\tusing ::std::uint64_t;\n\n\tusing ::std::int8_t;\n\tusing ::std::int16_t;\n\tusing ::std::int32_t;\n\tusing ::std::int64_t;\n\n\tusing ::std::make_unsigned;\n\t///////////////////////////////////////////////////////////////////////////////\n} //namespace std\n} //namespace glm\n\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n\n///////////////////////////////////////////////////////////////////////////////////\n// Length type: all length functions returns a length_t type.\n// When GLM_FORCE_SIZE_T_LENGTH is defined, length_t is a typedef of size_t otherwise\n// length_t is a typedef of int like GLSL defines it.\n\n#define GLM_LENGTH_INT\t\t1\n#define GLM_LENGTH_SIZE_T\t2\n\n#ifdef GLM_FORCE_SIZE_T_LENGTH\n#\tdefine GLM_CONFIG_LENGTH_TYPE\t\tGLM_LENGTH_SIZE_T\n#else\n#\tdefine GLM_CONFIG_LENGTH_TYPE\t\tGLM_LENGTH_INT\n#endif\n\nnamespace glm\n{\n\tusing std::size_t;\n#\tif GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T\n\t\ttypedef size_t length_t;\n#\telse\n\t\ttypedef int length_t;\n#\tendif\n}//namespace glm\n\n///////////////////////////////////////////////////////////////////////////////////\n// constexpr\n\n#if GLM_HAS_CONSTEXPR\n#\tdefine GLM_CONFIG_CONSTEXP GLM_ENABLE\n\n\tnamespace glm\n\t{\n\t\ttemplate<typename T, std::size_t N>\n\t\tconstexpr std::size_t countof(T const (&)[N])\n\t\t{\n\t\t\treturn N;\n\t\t}\n\t}//namespace glm\n#\tdefine GLM_COUNTOF(arr) glm::countof(arr)\n#elif defined(_MSC_VER)\n#\tdefine GLM_CONFIG_CONSTEXP GLM_DISABLE\n\n#\tdefine GLM_COUNTOF(arr) _countof(arr)\n#else\n#\tdefine GLM_CONFIG_CONSTEXP GLM_DISABLE\n\n#\tdefine GLM_COUNTOF(arr) sizeof(arr) / sizeof(arr[0])\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// uint\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<typename T>\n\tstruct is_int\n\t{\n\t\tenum test {value = 0};\n\t};\n\n\ttemplate<>\n\tstruct is_int<unsigned int>\n\t{\n\t\tenum test {value = ~0};\n\t};\n\n\ttemplate<>\n\tstruct is_int<signed int>\n\t{\n\t\tenum test {value = ~0};\n\t};\n}//namespace detail\n\n\ttypedef unsigned int\tuint;\n}//namespace glm\n\n///////////////////////////////////////////////////////////////////////////////////\n// 64-bit int\n\n#if GLM_HAS_EXTENDED_INTEGER_TYPE\n#\tinclude <cstdint>\n#endif\n\nnamespace glm{\nnamespace detail\n{\n#\tif GLM_HAS_EXTENDED_INTEGER_TYPE\n\t\ttypedef std::uint64_t\t\t\t\t\t\tuint64;\n\t\ttypedef std::int64_t\t\t\t\t\t\tint64;\n#\telif (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available\n\t\ttypedef uint64_t\t\t\t\t\t\t\tuint64;\n\t\ttypedef int64_t\t\t\t\t\t\t\t\tint64;\n#\telif GLM_COMPILER & GLM_COMPILER_VC\n\t\ttypedef unsigned __int64\t\t\t\t\tuint64;\n\t\ttypedef signed __int64\t\t\t\t\t\tint64;\n#\telif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\tpragma GCC diagnostic ignored \"-Wlong-long\"\n\t\t__extension__ typedef unsigned long long\tuint64;\n\t\t__extension__ typedef signed long long\t\tint64;\n#\telif (GLM_COMPILER & GLM_COMPILER_CLANG)\n#\t\tpragma clang diagnostic ignored \"-Wc++11-long-long\"\n\t\ttypedef unsigned long long\t\t\t\t\tuint64;\n\t\ttypedef signed long long\t\t\t\t\tint64;\n#\telse//unknown compiler\n\t\ttypedef unsigned long long\t\t\t\t\tuint64;\n\t\ttypedef signed long long\t\t\t\t\tint64;\n#\tendif\n}//namespace detail\n}//namespace glm\n\n///////////////////////////////////////////////////////////////////////////////////\n// make_unsigned\n\n#if GLM_HAS_MAKE_SIGNED\n#\tinclude <type_traits>\n\nnamespace glm{\nnamespace detail\n{\n\tusing std::make_unsigned;\n}//namespace detail\n}//namespace glm\n\n#else\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<typename genType>\n\tstruct make_unsigned\n\t{};\n\n\ttemplate<>\n\tstruct make_unsigned<char>\n\t{\n\t\ttypedef unsigned char type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<signed char>\n\t{\n\t\ttypedef unsigned char type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<short>\n\t{\n\t\ttypedef unsigned short type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<int>\n\t{\n\t\ttypedef unsigned int type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<long>\n\t{\n\t\ttypedef unsigned long type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<int64>\n\t{\n\t\ttypedef uint64 type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<unsigned char>\n\t{\n\t\ttypedef unsigned char type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<unsigned short>\n\t{\n\t\ttypedef unsigned short type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<unsigned int>\n\t{\n\t\ttypedef unsigned int type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<unsigned long>\n\t{\n\t\ttypedef unsigned long type;\n\t};\n\n\ttemplate<>\n\tstruct make_unsigned<uint64>\n\t{\n\t\ttypedef uint64 type;\n\t};\n}//namespace detail\n}//namespace glm\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Only use x, y, z, w as vector type components\n\n#ifdef GLM_FORCE_XYZW_ONLY\n#\tdefine GLM_CONFIG_XYZW_ONLY GLM_ENABLE\n#else\n#\tdefine GLM_CONFIG_XYZW_ONLY GLM_DISABLE\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Configure the use of defaulted initialized types\n\n#define GLM_CTOR_INIT_DISABLE\t\t0\n#define GLM_CTOR_INITIALIZER_LIST\t1\n#define GLM_CTOR_INITIALISATION\t\t2\n\n#if defined(GLM_FORCE_CTOR_INIT) && GLM_HAS_INITIALIZER_LISTS\n#\tdefine GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALIZER_LIST\n#elif defined(GLM_FORCE_CTOR_INIT) && !GLM_HAS_INITIALIZER_LISTS\n#\tdefine GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALISATION\n#else\n#\tdefine GLM_CONFIG_CTOR_INIT GLM_CTOR_INIT_DISABLE\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Use SIMD instruction sets\n\n#if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (GLM_ARCH & GLM_ARCH_SIMD_BIT)\n#\tdefine GLM_CONFIG_SIMD GLM_ENABLE\n#else\n#\tdefine GLM_CONFIG_SIMD GLM_DISABLE\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Configure the use of defaulted function\n\n#if GLM_HAS_DEFAULTED_FUNCTIONS\n#\tdefine GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_ENABLE\n#\tdefine GLM_DEFAULT = default\n#else\n#\tdefine GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_DISABLE\n#\tdefine GLM_DEFAULT\n#endif\n\n#if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INIT_DISABLE && GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n#\tdefine GLM_CONFIG_DEFAULTED_DEFAULT_CTOR GLM_ENABLE\n#\tdefine GLM_DEFAULT_CTOR GLM_DEFAULT\n#else\n#\tdefine GLM_CONFIG_DEFAULTED_DEFAULT_CTOR GLM_DISABLE\n#\tdefine GLM_DEFAULT_CTOR\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Configure the use of aligned gentypes\n\n#ifdef GLM_FORCE_ALIGNED // Legacy define\n#\tdefine GLM_FORCE_DEFAULT_ALIGNED_GENTYPES\n#endif\n\n#ifdef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES\n#\tdefine GLM_FORCE_ALIGNED_GENTYPES\n#endif\n\n#if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (defined(GLM_FORCE_ALIGNED_GENTYPES) || (GLM_CONFIG_SIMD == GLM_ENABLE))\n#\tdefine GLM_CONFIG_ALIGNED_GENTYPES GLM_ENABLE\n#else\n#\tdefine GLM_CONFIG_ALIGNED_GENTYPES GLM_DISABLE\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Configure the use of anonymous structure as implementation detail\n\n#if ((GLM_CONFIG_SIMD == GLM_ENABLE) || (GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR) || (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE))\n#\tdefine GLM_CONFIG_ANONYMOUS_STRUCT GLM_ENABLE\n#else\n#\tdefine GLM_CONFIG_ANONYMOUS_STRUCT GLM_DISABLE\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Silent warnings\n\n#ifdef GLM_FORCE_SILENT_WARNINGS\n#\tdefine GLM_SILENT_WARNINGS GLM_ENABLE\n#else\n#\tdefine GLM_SILENT_WARNINGS GLM_DISABLE\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Precision\n\n#define GLM_HIGHP\t\t1\n#define GLM_MEDIUMP\t\t2\n#define GLM_LOWP\t\t3\n\n#if defined(GLM_FORCE_PRECISION_HIGHP_BOOL) || defined(GLM_PRECISION_HIGHP_BOOL)\n#\tdefine GLM_CONFIG_PRECISION_BOOL\t\tGLM_HIGHP\n#elif defined(GLM_FORCE_PRECISION_MEDIUMP_BOOL) || defined(GLM_PRECISION_MEDIUMP_BOOL)\n#\tdefine GLM_CONFIG_PRECISION_BOOL\t\tGLM_MEDIUMP\n#elif defined(GLM_FORCE_PRECISION_LOWP_BOOL) || defined(GLM_PRECISION_LOWP_BOOL)\n#\tdefine GLM_CONFIG_PRECISION_BOOL\t\tGLM_LOWP\n#else\n#\tdefine GLM_CONFIG_PRECISION_BOOL\t\tGLM_HIGHP\n#endif\n\n#if defined(GLM_FORCE_PRECISION_HIGHP_INT) || defined(GLM_PRECISION_HIGHP_INT)\n#\tdefine GLM_CONFIG_PRECISION_INT\t\t\tGLM_HIGHP\n#elif defined(GLM_FORCE_PRECISION_MEDIUMP_INT) || defined(GLM_PRECISION_MEDIUMP_INT)\n#\tdefine GLM_CONFIG_PRECISION_INT\t\t\tGLM_MEDIUMP\n#elif defined(GLM_FORCE_PRECISION_LOWP_INT) || defined(GLM_PRECISION_LOWP_INT)\n#\tdefine GLM_CONFIG_PRECISION_INT\t\t\tGLM_LOWP\n#else\n#\tdefine GLM_CONFIG_PRECISION_INT\t\t\tGLM_HIGHP\n#endif\n\n#if defined(GLM_FORCE_PRECISION_HIGHP_UINT) || defined(GLM_PRECISION_HIGHP_UINT)\n#\tdefine GLM_CONFIG_PRECISION_UINT\t\tGLM_HIGHP\n#elif defined(GLM_FORCE_PRECISION_MEDIUMP_UINT) || defined(GLM_PRECISION_MEDIUMP_UINT)\n#\tdefine GLM_CONFIG_PRECISION_UINT\t\tGLM_MEDIUMP\n#elif defined(GLM_FORCE_PRECISION_LOWP_UINT) || defined(GLM_PRECISION_LOWP_UINT)\n#\tdefine GLM_CONFIG_PRECISION_UINT\t\tGLM_LOWP\n#else\n#\tdefine GLM_CONFIG_PRECISION_UINT\t\tGLM_HIGHP\n#endif\n\n#if defined(GLM_FORCE_PRECISION_HIGHP_FLOAT) || defined(GLM_PRECISION_HIGHP_FLOAT)\n#\tdefine GLM_CONFIG_PRECISION_FLOAT\t\tGLM_HIGHP\n#elif defined(GLM_FORCE_PRECISION_MEDIUMP_FLOAT) || defined(GLM_PRECISION_MEDIUMP_FLOAT)\n#\tdefine GLM_CONFIG_PRECISION_FLOAT\t\tGLM_MEDIUMP\n#elif defined(GLM_FORCE_PRECISION_LOWP_FLOAT) || defined(GLM_PRECISION_LOWP_FLOAT)\n#\tdefine GLM_CONFIG_PRECISION_FLOAT\t\tGLM_LOWP\n#else\n#\tdefine GLM_CONFIG_PRECISION_FLOAT\t\tGLM_HIGHP\n#endif\n\n#if defined(GLM_FORCE_PRECISION_HIGHP_DOUBLE) || defined(GLM_PRECISION_HIGHP_DOUBLE)\n#\tdefine GLM_CONFIG_PRECISION_DOUBLE\t\tGLM_HIGHP\n#elif defined(GLM_FORCE_PRECISION_MEDIUMP_DOUBLE) || defined(GLM_PRECISION_MEDIUMP_DOUBLE)\n#\tdefine GLM_CONFIG_PRECISION_DOUBLE\t\tGLM_MEDIUMP\n#elif defined(GLM_FORCE_PRECISION_LOWP_DOUBLE) || defined(GLM_PRECISION_LOWP_DOUBLE)\n#\tdefine GLM_CONFIG_PRECISION_DOUBLE\t\tGLM_LOWP\n#else\n#\tdefine GLM_CONFIG_PRECISION_DOUBLE\t\tGLM_HIGHP\n#endif\n\n///////////////////////////////////////////////////////////////////////////////////\n// Check inclusions of different versions of GLM\n\n#elif ((GLM_SETUP_INCLUDED != GLM_VERSION) && !defined(GLM_FORCE_IGNORE_VERSION))\n#\terror \"GLM error: A different version of GLM is already included. Define GLM_FORCE_IGNORE_VERSION before including GLM headers to ignore this error.\"\n#elif GLM_SETUP_INCLUDED == GLM_VERSION\n\n///////////////////////////////////////////////////////////////////////////////////\n// Messages\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_DISPLAYED)\n#\tdefine GLM_MESSAGE_DISPLAYED\n#\t\tdefine GLM_STR_HELPER(x) #x\n#\t\tdefine GLM_STR(x) GLM_STR_HELPER(x)\n\n\t// Report GLM version\n#\t\tpragma message (GLM_STR(GLM_VERSION_MESSAGE))\n\n\t// Report C++ language\n#\tif (GLM_LANG & GLM_LANG_CXX2A_FLAG) && (GLM_LANG & GLM_LANG_EXT)\n#\t\tpragma message(\"GLM: C++ 2A with extensions\")\n#\telif (GLM_LANG & GLM_LANG_CXX2A_FLAG)\n#\t\tpragma message(\"GLM: C++ 2A\")\n#\telif (GLM_LANG & GLM_LANG_CXX17_FLAG) && (GLM_LANG & GLM_LANG_EXT)\n#\t\tpragma message(\"GLM: C++ 17 with extensions\")\n#\telif (GLM_LANG & GLM_LANG_CXX17_FLAG)\n#\t\tpragma message(\"GLM: C++ 17\")\n#\telif (GLM_LANG & GLM_LANG_CXX14_FLAG) && (GLM_LANG & GLM_LANG_EXT)\n#\t\tpragma message(\"GLM: C++ 14 with extensions\")\n#\telif (GLM_LANG & GLM_LANG_CXX14_FLAG)\n#\t\tpragma message(\"GLM: C++ 14\")\n#\telif (GLM_LANG & GLM_LANG_CXX11_FLAG) && (GLM_LANG & GLM_LANG_EXT)\n#\t\tpragma message(\"GLM: C++ 11 with extensions\")\n#\telif (GLM_LANG & GLM_LANG_CXX11_FLAG)\n#\t\tpragma message(\"GLM: C++ 11\")\n#\telif (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_LANG & GLM_LANG_EXT)\n#\t\tpragma message(\"GLM: C++ 0x with extensions\")\n#\telif (GLM_LANG & GLM_LANG_CXX0X_FLAG)\n#\t\tpragma message(\"GLM: C++ 0x\")\n#\telif (GLM_LANG & GLM_LANG_CXX03_FLAG) && (GLM_LANG & GLM_LANG_EXT)\n#\t\tpragma message(\"GLM: C++ 03 with extensions\")\n#\telif (GLM_LANG & GLM_LANG_CXX03_FLAG)\n#\t\tpragma message(\"GLM: C++ 03\")\n#\telif (GLM_LANG & GLM_LANG_CXX98_FLAG) && (GLM_LANG & GLM_LANG_EXT)\n#\t\tpragma message(\"GLM: C++ 98 with extensions\")\n#\telif (GLM_LANG & GLM_LANG_CXX98_FLAG)\n#\t\tpragma message(\"GLM: C++ 98\")\n#\telse\n#\t\tpragma message(\"GLM: C++ language undetected\")\n#\tendif//GLM_LANG\n\n\t// Report compiler detection\n#\tif GLM_COMPILER & GLM_COMPILER_CUDA\n#\t\tpragma message(\"GLM: CUDA compiler detected\")\n#\telif GLM_COMPILER & GLM_COMPILER_HIP\n#\t\tpragma message(\"GLM: HIP compiler detected\")\n#\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\tpragma message(\"GLM: Visual C++ compiler detected\")\n#\telif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\tpragma message(\"GLM: Clang compiler detected\")\n#\telif GLM_COMPILER & GLM_COMPILER_INTEL\n#\t\tpragma message(\"GLM: Intel Compiler detected\")\n#\telif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\tpragma message(\"GLM: GCC compiler detected\")\n#\telse\n#\t\tpragma message(\"GLM: Compiler not detected\")\n#\tendif\n\n\t// Report build target\n#\tif (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: x86 64 bits with AVX2 instruction set build target\")\n#\telif (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: x86 32 bits with AVX2 instruction set build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: x86 64 bits with AVX instruction set build target\")\n#\telif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: x86 32 bits with AVX instruction set build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: x86 64 bits with SSE4.2 instruction set build target\")\n#\telif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: x86 32 bits with SSE4.2 instruction set build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: x86 64 bits with SSE4.1 instruction set build target\")\n#\telif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: x86 32 bits with SSE4.1 instruction set build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: x86 64 bits with SSSE3 instruction set build target\")\n#\telif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: x86 32 bits with SSSE3 instruction set build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: x86 64 bits with SSE3 instruction set build target\")\n#\telif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: x86 32 bits with SSE3 instruction set build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: x86 64 bits with SSE2 instruction set build target\")\n#\telif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: x86 32 bits with SSE2 instruction set build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: x86 64 bits build target\")\n#\telif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: x86 32 bits build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: ARM 64 bits with Neon instruction set build target\")\n#\telif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: ARM 32 bits with Neon instruction set build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: ARM 64 bits build target\")\n#\telif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: ARM 32 bits build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: MIPS 64 bits build target\")\n#\telif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: MIPS 32 bits build target\")\n\n#\telif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_64)\n#\t\tpragma message(\"GLM: PowerPC 64 bits build target\")\n#\telif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_32)\n#\t\tpragma message(\"GLM: PowerPC 32 bits build target\")\n#\telse\n#\t\tpragma message(\"GLM: Unknown build target\")\n#\tendif//GLM_ARCH\n\n\t// Report platform name\n#\tif(GLM_PLATFORM & GLM_PLATFORM_QNXNTO)\n#\t\tpragma message(\"GLM: QNX platform detected\")\n//#\telif(GLM_PLATFORM & GLM_PLATFORM_IOS)\n//#\t\tpragma message(\"GLM: iOS platform detected\")\n#\telif(GLM_PLATFORM & GLM_PLATFORM_APPLE)\n#\t\tpragma message(\"GLM: Apple platform detected\")\n#\telif(GLM_PLATFORM & GLM_PLATFORM_WINCE)\n#\t\tpragma message(\"GLM: WinCE platform detected\")\n#\telif(GLM_PLATFORM & GLM_PLATFORM_WINDOWS)\n#\t\tpragma message(\"GLM: Windows platform detected\")\n#\telif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL)\n#\t\tpragma message(\"GLM: Native Client detected\")\n#\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n#\t\tpragma message(\"GLM: Android platform detected\")\n#\telif(GLM_PLATFORM & GLM_PLATFORM_LINUX)\n#\t\tpragma message(\"GLM: Linux platform detected\")\n#\telif(GLM_PLATFORM & GLM_PLATFORM_UNIX)\n#\t\tpragma message(\"GLM: UNIX platform detected\")\n#\telif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN)\n#\t\tpragma message(\"GLM: platform unknown\")\n#\telse\n#\t\tpragma message(\"GLM: platform not detected\")\n#\tendif\n\n\t// Report whether only xyzw component are used\n#\tif defined GLM_FORCE_XYZW_ONLY\n#\t\tpragma message(\"GLM: GLM_FORCE_XYZW_ONLY is defined. Only x, y, z and w component are available in vector type. This define disables swizzle operators and SIMD instruction sets.\")\n#\tendif\n\n\t// Report swizzle operator support\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n#\t\tpragma message(\"GLM: GLM_FORCE_SWIZZLE is defined, swizzling operators enabled.\")\n#\telif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n#\t\tpragma message(\"GLM: GLM_FORCE_SWIZZLE is defined, swizzling functions enabled. Enable compiler C++ language extensions to enable swizzle operators.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled.\")\n#\tendif\n\n\t// Report .length() type\n#\tif GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T\n#\t\tpragma message(\"GLM: GLM_FORCE_SIZE_T_LENGTH is defined. .length() returns a glm::length_t, a typedef of std::size_t.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL.\")\n#\tendif\n\n#\tif GLM_CONFIG_UNRESTRICTED_GENTYPE == GLM_ENABLE\n#\t\tpragma message(\"GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is defined. Removes GLSL restrictions on valid function genTypes.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes.\")\n#\tendif\n\n#\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\tpragma message(\"GLM: GLM_FORCE_SILENT_WARNINGS is defined. Ignores C++ warnings from using C++ language extensions.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_FORCE_SILENT_WARNINGS is undefined. Shows C++ warnings from using C++ language extensions.\")\n#\tendif\n\n#\tifdef GLM_FORCE_SINGLE_ONLY\n#\t\tpragma message(\"GLM: GLM_FORCE_SINGLE_ONLY is defined. Using only single precision floating-point types.\")\n#\tendif\n\n#\tif defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE)\n#\t\tundef GLM_FORCE_ALIGNED_GENTYPES\n#\t\tpragma message(\"GLM: GLM_FORCE_ALIGNED_GENTYPES is defined, allowing aligned types. This prevents the use of C++ constexpr.\")\n#\telif defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE)\n#\t\tundef GLM_FORCE_ALIGNED_GENTYPES\n#\t\tpragma message(\"GLM: GLM_FORCE_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.\")\n#\tendif\n\n#\tif defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES)\n#\t\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE\n#\t\t\tundef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES\n#\t\t\tpragma message(\"GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.\")\n#\t\telif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n#\t\t\tpragma message(\"GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined. All gentypes (e.g. vec3) will be aligned and padded by default.\")\n#\t\tendif\n#\tendif\n\n#\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n#\t\tpragma message(\"GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is defined. Using zero to one depth clip space.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space.\")\n#\tendif\n\n#\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n#\t\tpragma message(\"GLM: GLM_FORCE_LEFT_HANDED is defined. Using left handed coordinate system.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system.\")\n#\tendif\n#endif//GLM_MESSAGES\n\n#endif//GLM_SETUP_INCLUDED\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_float.hpp",
    "content": "#pragma once\n\n#include \"setup.hpp\"\n\n#if GLM_COMPILER == GLM_COMPILER_VC12\n#\tpragma warning(push)\n#\tpragma warning(disable: 4512) // assignment operator could not be generated\n#endif\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate <typename T>\n\tunion float_t\n\t{};\n\n\t// https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/\n\ttemplate <>\n\tunion float_t<float>\n\t{\n\t\ttypedef int int_type;\n\t\ttypedef float float_type;\n\n\t\tGLM_CONSTEXPR float_t(float_type Num = 0.0f) : f(Num) {}\n\n\t\tGLM_CONSTEXPR float_t& operator=(float_t const& x)\n\t\t{\n\t\t\tf = x.f;\n\t\t\treturn *this;\n\t\t}\n\n\t\t// Portable extraction of components.\n\t\tGLM_CONSTEXPR bool negative() const { return i < 0; }\n\t\tGLM_CONSTEXPR int_type mantissa() const { return i & ((1 << 23) - 1); }\n\t\tGLM_CONSTEXPR int_type exponent() const { return (i >> 23) & ((1 << 8) - 1); }\n\n\t\tint_type i;\n\t\tfloat_type f;\n\t};\n\n\ttemplate <>\n\tunion float_t<double>\n\t{\n\t\ttypedef detail::int64 int_type;\n\t\ttypedef double float_type;\n\n\t\tGLM_CONSTEXPR float_t(float_type Num = static_cast<float_type>(0)) : f(Num) {}\n\n\t\tGLM_CONSTEXPR float_t& operator=(float_t const& x)\n\t\t{\n\t\t\tf = x.f;\n\t\t\treturn *this;\n\t\t}\n\n\t\t// Portable extraction of components.\n\t\tGLM_CONSTEXPR bool negative() const { return i < 0; }\n\t\tGLM_CONSTEXPR int_type mantissa() const { return i & ((int_type(1) << 52) - 1); }\n\t\tGLM_CONSTEXPR int_type exponent() const { return (i >> 52) & ((int_type(1) << 11) - 1); }\n\n\t\tint_type i;\n\t\tfloat_type f;\n\t};\n}//namespace detail\n}//namespace glm\n\n#if GLM_COMPILER == GLM_COMPILER_VC12\n#\tpragma warning(pop)\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_half.hpp",
    "content": "#pragma once\n\n#include \"setup.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttypedef short hdata;\n\n\tGLM_FUNC_DECL float toFloat32(hdata value);\n\tGLM_FUNC_DECL hdata toFloat16(float const& value);\n\n}//namespace detail\n}//namespace glm\n\n#include \"type_half.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_half.inl",
    "content": "namespace glm{\nnamespace detail\n{\n\tGLM_FUNC_QUALIFIER float overflow()\n\t{\n\t\tvolatile float f = 1e10;\n\n\t\tfor(int i = 0; i < 10; ++i)\n\t\t\tf = f * f; // this will overflow before the for loop terminates\n\t\treturn f;\n\t}\n\n\tunion uif32\n\t{\n\t\tGLM_FUNC_QUALIFIER uif32() :\n\t\t\ti(0)\n\t\t{}\n\n\t\tGLM_FUNC_QUALIFIER uif32(float f_) :\n\t\t\tf(f_)\n\t\t{}\n\n\t\tGLM_FUNC_QUALIFIER uif32(unsigned int i_) :\n\t\t\ti(i_)\n\t\t{}\n\n\t\tfloat f;\n\t\tunsigned int i;\n\t};\n\n\tGLM_FUNC_QUALIFIER float toFloat32(hdata value)\n\t{\n\t\tint s = (value >> 15) & 0x00000001;\n\t\tint e = (value >> 10) & 0x0000001f;\n\t\tint m =  value        & 0x000003ff;\n\n\t\tif(e == 0)\n\t\t{\n\t\t\tif(m == 0)\n\t\t\t{\n\t\t\t\t//\n\t\t\t\t// Plus or minus zero\n\t\t\t\t//\n\n\t\t\t\tdetail::uif32 result;\n\t\t\t\tresult.i = static_cast<unsigned int>(s << 31);\n\t\t\t\treturn result.f;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t//\n\t\t\t\t// Denormalized number -- renormalize it\n\t\t\t\t//\n\n\t\t\t\twhile(!(m & 0x00000400))\n\t\t\t\t{\n\t\t\t\t\tm <<= 1;\n\t\t\t\t\te -=  1;\n\t\t\t\t}\n\n\t\t\t\te += 1;\n\t\t\t\tm &= ~0x00000400;\n\t\t\t}\n\t\t}\n\t\telse if(e == 31)\n\t\t{\n\t\t\tif(m == 0)\n\t\t\t{\n\t\t\t\t//\n\t\t\t\t// Positive or negative infinity\n\t\t\t\t//\n\n\t\t\t\tuif32 result;\n\t\t\t\tresult.i = static_cast<unsigned int>((s << 31) | 0x7f800000);\n\t\t\t\treturn result.f;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t//\n\t\t\t\t// Nan -- preserve sign and significand bits\n\t\t\t\t//\n\n\t\t\t\tuif32 result;\n\t\t\t\tresult.i = static_cast<unsigned int>((s << 31) | 0x7f800000 | (m << 13));\n\t\t\t\treturn result.f;\n\t\t\t}\n\t\t}\n\n\t\t//\n\t\t// Normalized number\n\t\t//\n\n\t\te = e + (127 - 15);\n\t\tm = m << 13;\n\n\t\t//\n\t\t// Assemble s, e and m.\n\t\t//\n\n\t\tuif32 Result;\n\t\tResult.i = static_cast<unsigned int>((s << 31) | (e << 23) | m);\n\t\treturn Result.f;\n\t}\n\n\tGLM_FUNC_QUALIFIER hdata toFloat16(float const& f)\n\t{\n\t\tuif32 Entry;\n\t\tEntry.f = f;\n\t\tint i = static_cast<int>(Entry.i);\n\n\t\t//\n\t\t// Our floating point number, f, is represented by the bit\n\t\t// pattern in integer i.  Disassemble that bit pattern into\n\t\t// the sign, s, the exponent, e, and the significand, m.\n\t\t// Shift s into the position where it will go in the\n\t\t// resulting half number.\n\t\t// Adjust e, accounting for the different exponent bias\n\t\t// of float and half (127 versus 15).\n\t\t//\n\n\t\tint s =  (i >> 16) & 0x00008000;\n\t\tint e = ((i >> 23) & 0x000000ff) - (127 - 15);\n\t\tint m =   i        & 0x007fffff;\n\n\t\t//\n\t\t// Now reassemble s, e and m into a half:\n\t\t//\n\n\t\tif(e <= 0)\n\t\t{\n\t\t\tif(e < -10)\n\t\t\t{\n\t\t\t\t//\n\t\t\t\t// E is less than -10.  The absolute value of f is\n\t\t\t\t// less than half_MIN (f may be a small normalized\n\t\t\t\t// float, a denormalized float or a zero).\n\t\t\t\t//\n\t\t\t\t// We convert f to a half zero.\n\t\t\t\t//\n\n\t\t\t\treturn hdata(s);\n\t\t\t}\n\n\t\t\t//\n\t\t\t// E is between -10 and 0.  F is a normalized float,\n\t\t\t// whose magnitude is less than __half_NRM_MIN.\n\t\t\t//\n\t\t\t// We convert f to a denormalized half.\n\t\t\t//\n\n\t\t\tm = (m | 0x00800000) >> (1 - e);\n\n\t\t\t//\n\t\t\t// Round to nearest, round \"0.5\" up.\n\t\t\t//\n\t\t\t// Rounding may cause the significand to overflow and make\n\t\t\t// our number normalized.  Because of the way a half's bits\n\t\t\t// are laid out, we don't have to treat this case separately;\n\t\t\t// the code below will handle it correctly.\n\t\t\t//\n\n\t\t\tif(m & 0x00001000)\n\t\t\t\tm += 0x00002000;\n\n\t\t\t//\n\t\t\t// Assemble the half from s, e (zero) and m.\n\t\t\t//\n\n\t\t\treturn hdata(s | (m >> 13));\n\t\t}\n\t\telse if(e == 0xff - (127 - 15))\n\t\t{\n\t\t\tif(m == 0)\n\t\t\t{\n\t\t\t\t//\n\t\t\t\t// F is an infinity; convert f to a half\n\t\t\t\t// infinity with the same sign as f.\n\t\t\t\t//\n\n\t\t\t\treturn hdata(s | 0x7c00);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t//\n\t\t\t\t// F is a NAN; we produce a half NAN that preserves\n\t\t\t\t// the sign bit and the 10 leftmost bits of the\n\t\t\t\t// significand of f, with one exception: If the 10\n\t\t\t\t// leftmost bits are all zero, the NAN would turn\n\t\t\t\t// into an infinity, so we have to set at least one\n\t\t\t\t// bit in the significand.\n\t\t\t\t//\n\n\t\t\t\tm >>= 13;\n\n\t\t\t\treturn hdata(s | 0x7c00 | m | (m == 0));\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t//\n\t\t\t// E is greater than zero.  F is a normalized float.\n\t\t\t// We try to convert f to a normalized half.\n\t\t\t//\n\n\t\t\t//\n\t\t\t// Round to nearest, round \"0.5\" up\n\t\t\t//\n\n\t\t\tif(m &  0x00001000)\n\t\t\t{\n\t\t\t\tm += 0x00002000;\n\n\t\t\t\tif(m & 0x00800000)\n\t\t\t\t{\n\t\t\t\t\tm =  0;     // overflow in significand,\n\t\t\t\t\te += 1;     // adjust exponent\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//\n\t\t\t// Handle exponent overflow\n\t\t\t//\n\n\t\t\tif (e > 30)\n\t\t\t{\n\t\t\t\toverflow();        // Cause a hardware floating point overflow;\n\n\t\t\t\treturn hdata(s | 0x7c00);\n\t\t\t\t// if this returns, the half becomes an\n\t\t\t}   // infinity with the same sign as f.\n\n\t\t\t//\n\t\t\t// Assemble the half from s, e and m.\n\t\t\t//\n\n\t\t\treturn hdata(s | (e << 10) | (m >> 13));\n\t\t}\n\t}\n\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat2x2.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat2x2.hpp\n\n#pragma once\n\n#include \"type_vec2.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<2, 2, T, Q>\n\t{\n\t\ttypedef vec<2, T, Q> col_type;\n\t\ttypedef vec<2, T, Q> row_type;\n\t\ttypedef mat<2, 2, T, Q> type;\n\t\ttypedef mat<2, 2, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[2];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; }\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 2, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT const& x1, T const& y1,\n\t\t\tT const& x2, T const& y2);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v1,\n\t\t\tcol_type const& v2);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<typename U, typename V, typename M, typename N>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tU const& x1, V const& y1,\n\t\t\tM const& x2, N const& y2);\n\n\t\ttemplate<typename U, typename V>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<2, U, Q> const& v1,\n\t\t\tvec<2, V, Q> const& v2);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator=(mat<2, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(mat<2, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(mat<2, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(mat<2, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(mat<2, 2, U, Q> const& m);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator++ ();\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> & operator-- ();\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<2, 2, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator*(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator*(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2);\n} //namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat2x2.inl\"\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat2x2.inl",
    "content": "#include \"../matrix.hpp\"\n\nnamespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0), col_type(0, 1)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\t\tthis->value[0] = col_type(1, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(T scalar)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(scalar, 0), col_type(0, scalar)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(scalar, 0);\n\t\t\tthis->value[1] = col_type(0, scalar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat\n\t(\n\t\tT const& x0, T const& y0,\n\t\tT const& x1, T const& y1\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0), col_type(x1, y1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0);\n\t\t\tthis->value[1] = col_type(x1, y1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(col_type const& v0, col_type const& v1)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{v0, v1}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = v0;\n\t\t\tthis->value[1] = v1;\n#\t\tendif\n\t}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X1, typename Y1, typename X2, typename Y2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat\n\t(\n\t\tX1 const& x1, Y1 const& y1,\n\t\tX2 const& x2, Y2 const& y2\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(static_cast<T>(x1), value_type(y1)), col_type(static_cast<T>(x2), value_type(y2)) }\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(static_cast<T>(x1), value_type(y1));\n\t\t\tthis->value[1] = col_type(static_cast<T>(x2), value_type(y2));\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V1, typename V2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v1), col_type(v2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v1);\n\t\t\tthis->value[1] = col_type(v2);\n#\t\tendif\n\t}\n\n\t// -- mat2x2 matrix conversions --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 2, T, Q>::col_type const& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary updatable operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator=(mat<2, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(U scalar)\n\t{\n\t\tthis->value[0] += scalar;\n\t\tthis->value[1] += scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(mat<2, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(U scalar)\n\t{\n\t\tthis->value[0] -= scalar;\n\t\tthis->value[1] -= scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(mat<2, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(U scalar)\n\t{\n\t\tthis->value[0] *= scalar;\n\t\tthis->value[1] *= scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(mat<2, 2, U, Q> const& m)\n\t{\n\t\treturn (*this = *this * m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(U scalar)\n\t{\n\t\tthis->value[0] /= scalar;\n\t\tthis->value[1] /= scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(mat<2, 2, U, Q> const& m)\n\t{\n\t\treturn *this *= inverse(m);\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator++(int)\n\t{\n\t\tmat<2, 2, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator--(int)\n\t{\n\t\tmat<2, 2, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm[0] - scalar,\n\t\t\tm[1] - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tscalar - m[0],\n\t\t\tscalar - m[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator*\n\t(\n\t\tmat<2, 2, T, Q> const& m,\n\t\ttypename mat<2, 2, T, Q>::row_type const& v\n\t)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tm[0][0] * v.x + m[1][0] * v.y,\n\t\t\tm[0][1] * v.x + m[1][1] * v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator*\n\t(\n\t\ttypename mat<2, 2, T, Q>::col_type const& v,\n\t\tmat<2, 2, T, Q> const& m\n\t)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x * m[0][0] + v.y * m[0][1],\n\t\t\tv.x * m[1][0] + v.y * m[1][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1],\n\t\t\tm1[0][0] * m2[3][0] + m1[1][0] * m2[3][1],\n\t\t\tm1[0][1] * m2[3][0] + m1[1][1] * m2[3][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tm[0] / scalar,\n\t\t\tm[1] / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\tscalar / m[0],\n\t\t\tscalar / m[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v)\n\t{\n\t\treturn inverse(m) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn v *  inverse(m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2)\n\t{\n\t\tmat<2, 2, T, Q> m1_copy(m1);\n\t\treturn m1_copy /= m2;\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat2x3.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat2x3.hpp\n\n#pragma once\n\n#include \"type_vec2.hpp\"\n#include \"type_vec3.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<2, 3, T, Q>\n\t{\n\t\ttypedef vec<3, T, Q> col_type;\n\t\ttypedef vec<2, T, Q> row_type;\n\t\ttypedef mat<2, 3, T, Q> type;\n\t\ttypedef mat<3, 2, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[2];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; }\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 3, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT x0, T y0, T z0,\n\t\t\tT x1, T y1, T z1);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v0,\n\t\t\tcol_type const& v1);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<typename X1, typename Y1, typename Z1, typename X2, typename Y2, typename Z2>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tX1 x1, Y1 y1, Z1 z1,\n\t\t\tX2 x2, Y2 y2, Z2 z2);\n\n\t\ttemplate<typename U, typename V>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<3, U, Q> const& v1,\n\t\t\tvec<3, V, Q> const& v2);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator=(mat<2, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(mat<2, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(mat<2, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator/=(U s);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator++ ();\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> & operator-- ();\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<2, 3, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<2, 3, T, Q>::col_type operator*(mat<2, 3, T, Q> const& m, typename mat<2, 3, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<2, 3, T, Q>::row_type operator*(typename mat<2, 3, T, Q>::col_type const& v, mat<2, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat2x3.inl\"\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat2x3.inl",
    "content": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0, 0), col_type(0, 1, 0)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\t\tthis->value[0] = col_type(1, 0, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1, 0);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 3, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m.value[0];\n\t\t\tthis->value[1] = m.value[1];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(T scalar)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(scalar, 0, 0), col_type(0, scalar, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(scalar, 0, 0);\n\t\t\tthis->value[1] = col_type(0, scalar, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat\n\t(\n\t\tT x0, T y0, T z0,\n\t\tT x1, T y1, T z1\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0, z0), col_type(x1, y1, z1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0, z0);\n\t\t\tthis->value[1] = col_type(x1, y1, z1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(col_type const& v0, col_type const& v1)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v0);\n\t\t\tthis->value[1] = col_type(v1);\n#\t\tendif\n\t}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<\n\t\ttypename X1, typename Y1, typename Z1,\n\t\ttypename X2, typename Y2, typename Z2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat\n\t(\n\t\tX1 x1, Y1 y1, Z1 z1,\n\t\tX2 x2, Y2 y2, Z2 z2\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x1, y1, z1), col_type(x2, y2, z2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x1, y1, z1);\n\t\t\tthis->value[1] = col_type(x2, y2, z2);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V1, typename V2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v1), col_type(v2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v1);\n\t\t\tthis->value[1] = col_type(v2);\n#\t\tendif\n\t}\n\n\t// -- Matrix conversions --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 3, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR  mat<2, 3, T, Q>::mat(mat<3, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type & mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 3, T, Q>::col_type const& mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary updatable operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator=(mat<2, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator+=(U s)\n\t{\n\t\tthis->value[0] += s;\n\t\tthis->value[1] += s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator+=(mat<2, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(U s)\n\t{\n\t\tthis->value[0] -= s;\n\t\tthis->value[1] -= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(mat<2, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator*=(U s)\n\t{\n\t\tthis->value[0] *= s;\n\t\tthis->value[1] *= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator/=(U s)\n\t{\n\t\tthis->value[0] /= s;\n\t\tthis->value[1] /= s;\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator++(int)\n\t{\n\t\tmat<2, 3, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator--(int)\n\t{\n\t\tmat<2, 3, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm[0] - scalar,\n\t\t\tm[1] - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type operator*\n\t(\n\t\tmat<2, 3, T, Q> const& m,\n\t\ttypename mat<2, 3, T, Q>::row_type const& v)\n\t{\n\t\treturn typename mat<2, 3, T, Q>::col_type(\n\t\t\tm[0][0] * v.x + m[1][0] * v.y,\n\t\t\tm[0][1] * v.x + m[1][1] * v.y,\n\t\t\tm[0][2] * v.x + m[1][2] * v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::row_type operator*\n\t(\n\t\ttypename mat<2, 3, T, Q>::col_type const& v,\n\t\tmat<2, 3, T, Q> const& m)\n\t{\n\t\treturn typename mat<2, 3, T, Q>::row_type(\n\t\t\tv.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2],\n\t\t\tv.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2)\n\t{\n\t\tT SrcA00 = m1[0][0];\n\t\tT SrcA01 = m1[0][1];\n\t\tT SrcA02 = m1[0][2];\n\t\tT SrcA10 = m1[1][0];\n\t\tT SrcA11 = m1[1][1];\n\t\tT SrcA12 = m1[1][2];\n\n\t\tT SrcB00 = m2[0][0];\n\t\tT SrcB01 = m2[0][1];\n\t\tT SrcB10 = m2[1][0];\n\t\tT SrcB11 = m2[1][1];\n\t\tT SrcB20 = m2[2][0];\n\t\tT SrcB21 = m2[2][1];\n\n\t\tmat<3, 3, T, Q> Result;\n\t\tResult[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01;\n\t\tResult[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01;\n\t\tResult[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01;\n\t\tResult[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11;\n\t\tResult[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11;\n\t\tResult[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11;\n\t\tResult[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21;\n\t\tResult[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21;\n\t\tResult[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1],\n\t\t\tm1[0][2] * m2[2][0] + m1[1][2] * m2[2][1],\n\t\t\tm1[0][0] * m2[3][0] + m1[1][0] * m2[3][1],\n\t\t\tm1[0][1] * m2[3][0] + m1[1][1] * m2[3][1],\n\t\t\tm1[0][2] * m2[3][0] + m1[1][2] * m2[3][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm[0] / scalar,\n\t\t\tm[1] / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tscalar / m[0],\n\t\t\tscalar / m[1]);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat2x4.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat2x4.hpp\n\n#pragma once\n\n#include \"type_vec2.hpp\"\n#include \"type_vec4.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<2, 4, T, Q>\n\t{\n\t\ttypedef vec<4, T, Q> col_type;\n\t\ttypedef vec<2, T, Q> row_type;\n\t\ttypedef mat<2, 4, T, Q> type;\n\t\ttypedef mat<4, 2, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[2];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; }\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 4, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT x0, T y0, T z0, T w0,\n\t\t\tT x1, T y1, T z1, T w1);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v0,\n\t\t\tcol_type const& v1);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<\n\t\t\ttypename X1, typename Y1, typename Z1, typename W1,\n\t\t\ttypename X2, typename Y2, typename Z2, typename W2>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tX1 x1, Y1 y1, Z1 z1, W1 w1,\n\t\t\tX2 x2, Y2 y2, Z2 z2, W2 w2);\n\n\t\ttemplate<typename U, typename V>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<4, U, Q> const& v1,\n\t\t\tvec<4, V, Q> const& v2);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator=(mat<2, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(mat<2, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(mat<2, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator/=(U s);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator++ ();\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> & operator-- ();\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<2, 4, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat2x4.inl\"\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat2x4.inl",
    "content": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\t\tthis->value[0] = col_type(1, 0, 0, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1, 0, 0);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(T s)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(s, 0, 0, 0);\n\t\t\tthis->value[1] = col_type(0, s, 0, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat\n\t(\n\t\tT x0, T y0, T z0, T w0,\n\t\tT x1, T y1, T z1, T w1\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0, z0, w0), col_type(x1, y1, z1, w1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0, z0, w0);\n\t\t\tthis->value[1] = col_type(x1, y1, z1, w1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(col_type const& v0, col_type const& v1)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = v0;\n\t\t\tthis->value[1] = v1;\n#\t\tendif\n\t}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<\n\t\ttypename X1, typename Y1, typename Z1, typename W1,\n\t\ttypename X2, typename Y2, typename Z2, typename W2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat\n\t(\n\t\tX1 x1, Y1 y1, Z1 z1, W1 w1,\n\t\tX2 x2, Y2 y2, Z2 z2, W2 w2\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{\n\t\t\t\tcol_type(x1, y1, z1, w1),\n\t\t\t\tcol_type(x2, y2, z2, w2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x1, y1, z1, w1);\n\t\t\tthis->value[1] = col_type(x2, y2, z2, w2);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V1, typename V2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v1), col_type(v2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v1);\n\t\t\tthis->value[1] = col_type(v2);\n#\t\tendif\n\t}\n\n\t// -- Matrix conversions --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type & mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 4, T, Q>::col_type const& mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary updatable operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator=(mat<2, 4, U, Q> const& m)\n\t{\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(U s)\n\t{\n\t\tthis->value[0] += s;\n\t\tthis->value[1] += s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(mat<2, 4, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(U s)\n\t{\n\t\tthis->value[0] -= s;\n\t\tthis->value[1] -= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(mat<2, 4, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator*=(U s)\n\t{\n\t\tthis->value[0] *= s;\n\t\tthis->value[1] *= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> & mat<2, 4, T, Q>::operator/=(U s)\n\t{\n\t\tthis->value[0] /= s;\n\t\tthis->value[1] /= s;\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator++(int)\n\t{\n\t\tmat<2, 4, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator--(int)\n\t{\n\t\tmat<2, 4, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm[0] - scalar,\n\t\t\tm[1] - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v)\n\t{\n\t\treturn typename mat<2, 4, T, Q>::col_type(\n\t\t\tm[0][0] * v.x + m[1][0] * v.y,\n\t\t\tm[0][1] * v.x + m[1][1] * v.y,\n\t\t\tm[0][2] * v.x + m[1][2] * v.y,\n\t\t\tm[0][3] * v.x + m[1][3] * v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m)\n\t{\n\t\treturn typename mat<2, 4, T, Q>::row_type(\n\t\t\tv.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3],\n\t\t\tv.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2)\n\t{\n\t\tT SrcA00 = m1[0][0];\n\t\tT SrcA01 = m1[0][1];\n\t\tT SrcA02 = m1[0][2];\n\t\tT SrcA03 = m1[0][3];\n\t\tT SrcA10 = m1[1][0];\n\t\tT SrcA11 = m1[1][1];\n\t\tT SrcA12 = m1[1][2];\n\t\tT SrcA13 = m1[1][3];\n\n\t\tT SrcB00 = m2[0][0];\n\t\tT SrcB01 = m2[0][1];\n\t\tT SrcB10 = m2[1][0];\n\t\tT SrcB11 = m2[1][1];\n\t\tT SrcB20 = m2[2][0];\n\t\tT SrcB21 = m2[2][1];\n\t\tT SrcB30 = m2[3][0];\n\t\tT SrcB31 = m2[3][1];\n\n\t\tmat<4, 4, T, Q> Result;\n\t\tResult[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01;\n\t\tResult[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01;\n\t\tResult[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01;\n\t\tResult[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01;\n\t\tResult[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11;\n\t\tResult[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11;\n\t\tResult[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11;\n\t\tResult[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11;\n\t\tResult[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21;\n\t\tResult[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21;\n\t\tResult[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21;\n\t\tResult[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21;\n\t\tResult[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31;\n\t\tResult[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31;\n\t\tResult[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31;\n\t\tResult[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],\n\t\t\tm1[0][3] * m2[0][0] + m1[1][3] * m2[0][1],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1],\n\t\t\tm1[0][3] * m2[1][0] + m1[1][3] * m2[1][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1],\n\t\t\tm1[0][3] * m2[0][0] + m1[1][3] * m2[0][1],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1],\n\t\t\tm1[0][3] * m2[1][0] + m1[1][3] * m2[1][1],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1],\n\t\t\tm1[0][2] * m2[2][0] + m1[1][2] * m2[2][1],\n\t\t\tm1[0][3] * m2[2][0] + m1[1][3] * m2[2][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm[0] / scalar,\n\t\t\tm[1] / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tscalar / m[0],\n\t\t\tscalar / m[1]);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat3x2.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat3x2.hpp\n\n#pragma once\n\n#include \"type_vec2.hpp\"\n#include \"type_vec3.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<3, 2, T, Q>\n\t{\n\t\ttypedef vec<2, T, Q> col_type;\n\t\ttypedef vec<3, T, Q> row_type;\n\t\ttypedef mat<3, 2, T, Q> type;\n\t\ttypedef mat<2, 3, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[3];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; }\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 2, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT x0, T y0,\n\t\t\tT x1, T y1,\n\t\t\tT x2, T y2);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v0,\n\t\t\tcol_type const& v1,\n\t\t\tcol_type const& v2);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<\n\t\t\ttypename X1, typename Y1,\n\t\t\ttypename X2, typename Y2,\n\t\t\ttypename X3, typename Y3>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tX1 x1, Y1 y1,\n\t\t\tX2 x2, Y2 y2,\n\t\t\tX3 x3, Y3 y3);\n\n\t\ttemplate<typename V1, typename V2, typename V3>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<2, V1, Q> const& v1,\n\t\t\tvec<2, V2, Q> const& v2,\n\t\t\tvec<2, V3, Q> const& v3);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator=(mat<3, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(mat<3, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(mat<3, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator/=(U s);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator++ ();\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> & operator-- ();\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<3, 2, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2);\n\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat3x2.inl\"\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat3x2.inl",
    "content": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0), col_type(0, 1), col_type(0, 0)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\t\tthis->value[0] = col_type(1, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1);\n\t\t\t\tthis->value[2] = col_type(0, 0);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 2, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = m[2];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(T s)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(s, 0), col_type(0, s), col_type(0, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(s, 0);\n\t\t\tthis->value[1] = col_type(0, s);\n\t\t\tthis->value[2] = col_type(0, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat\n\t(\n\t\tT x0, T y0,\n\t\tT x1, T y1,\n\t\tT x2, T y2\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0);\n\t\t\tthis->value[1] = col_type(x1, y1);\n\t\t\tthis->value[2] = col_type(x2, y2);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = v0;\n\t\t\tthis->value[1] = v1;\n\t\t\tthis->value[2] = v2;\n#\t\tendif\n\t}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<\n\t\ttypename X0, typename Y0,\n\t\ttypename X1, typename Y1,\n\t\ttypename X2, typename Y2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat\n\t(\n\t\tX0 x0, Y0 y0,\n\t\tX1 x1, Y1 y1,\n\t\tX2 x2, Y2 y2\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0);\n\t\t\tthis->value[1] = col_type(x1, y1);\n\t\t\tthis->value[2] = col_type(x2, y2);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V0, typename V1, typename V2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(vec<2, V0, Q> const& v0, vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v0);\n\t\t\tthis->value[1] = col_type(v1);\n\t\t\tthis->value[2] = col_type(v2);\n#\t\tendif\n\t}\n\n\t// -- Matrix conversions --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 2, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = m[2];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type & mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 2, T, Q>::col_type const& mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary updatable operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator=(mat<3, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\tthis->value[2] = m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(U s)\n\t{\n\t\tthis->value[0] += s;\n\t\tthis->value[1] += s;\n\t\tthis->value[2] += s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(mat<3, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\tthis->value[2] += m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(U s)\n\t{\n\t\tthis->value[0] -= s;\n\t\tthis->value[1] -= s;\n\t\tthis->value[2] -= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(mat<3, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\tthis->value[2] -= m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator*=(U s)\n\t{\n\t\tthis->value[0] *= s;\n\t\tthis->value[1] *= s;\n\t\tthis->value[2] *= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> & mat<3, 2, T, Q>::operator/=(U s)\n\t{\n\t\tthis->value[0] /= s;\n\t\tthis->value[1] /= s;\n\t\tthis->value[2] /= s;\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\t++this->value[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\t--this->value[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator++(int)\n\t{\n\t\tmat<3, 2, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator--(int)\n\t{\n\t\tmat<3, 2, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1],\n\t\t\t-m[2]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar,\n\t\t\tm[2] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1],\n\t\t\tm1[2] + m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm[0] - scalar,\n\t\t\tm[1] - scalar,\n\t\t\tm[2] - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1],\n\t\t\tm1[2] - m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar,\n\t\t\tm[2] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar,\n\t\t\tm[2] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v)\n\t{\n\t\treturn typename mat<3, 2, T, Q>::col_type(\n\t\t\tm[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z,\n\t\t\tm[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m)\n\t{\n\t\treturn typename mat<3, 2, T, Q>::row_type(\n\t\t\tv.x * m[0][0] + v.y * m[0][1],\n\t\t\tv.x * m[1][0] + v.y * m[1][1],\n\t\t\tv.x * m[2][0] + v.y * m[2][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2)\n\t{\n\t\tconst T SrcA00 = m1[0][0];\n\t\tconst T SrcA01 = m1[0][1];\n\t\tconst T SrcA10 = m1[1][0];\n\t\tconst T SrcA11 = m1[1][1];\n\t\tconst T SrcA20 = m1[2][0];\n\t\tconst T SrcA21 = m1[2][1];\n\n\t\tconst T SrcB00 = m2[0][0];\n\t\tconst T SrcB01 = m2[0][1];\n\t\tconst T SrcB02 = m2[0][2];\n\t\tconst T SrcB10 = m2[1][0];\n\t\tconst T SrcB11 = m2[1][1];\n\t\tconst T SrcB12 = m2[1][2];\n\n\t\tmat<2, 2, T, Q> Result;\n\t\tResult[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02;\n\t\tResult[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02;\n\t\tResult[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12;\n\t\tResult[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2],\n\t\t\tm1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2],\n\t\t\tm1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm[0] / scalar,\n\t\t\tm[1] / scalar,\n\t\t\tm[2] / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tscalar / m[0],\n\t\t\tscalar / m[1],\n\t\t\tscalar / m[2]);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat3x3.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat3x3.hpp\n\n#pragma once\n\n#include \"type_vec3.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<3, 3, T, Q>\n\t{\n\t\ttypedef vec<3, T, Q> col_type;\n\t\ttypedef vec<3, T, Q> row_type;\n\t\ttypedef mat<3, 3, T, Q> type;\n\t\ttypedef mat<3, 3, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[3];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; }\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 3, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT x0, T y0, T z0,\n\t\t\tT x1, T y1, T z1,\n\t\t\tT x2, T y2, T z2);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v0,\n\t\t\tcol_type const& v1,\n\t\t\tcol_type const& v2);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<\n\t\t\ttypename X1, typename Y1, typename Z1,\n\t\t\ttypename X2, typename Y2, typename Z2,\n\t\t\ttypename X3, typename Y3, typename Z3>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tX1 x1, Y1 y1, Z1 z1,\n\t\t\tX2 x2, Y2 y2, Z2 z2,\n\t\t\tX3 x3, Y3 y3, Z3 z3);\n\n\t\ttemplate<typename V1, typename V2, typename V3>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<3, V1, Q> const& v1,\n\t\t\tvec<3, V2, Q> const& v2,\n\t\t\tvec<3, V3, Q> const& v3);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator=(mat<3, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(mat<3, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(mat<3, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(mat<3, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(mat<3, 3, U, Q> const& m);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator++();\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> & operator--();\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<3, 3, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat3x3.inl\"\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat3x3.inl",
    "content": "#include \"../matrix.hpp\"\n\nnamespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0, 0), col_type(0, 1, 0), col_type(0, 0, 1)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\tthis->value[0] = col_type(1, 0, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1, 0);\n\t\t\t\tthis->value[2] = col_type(0, 0, 1);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 3, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(T s)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(s, 0, 0), col_type(0, s, 0), col_type(0, 0, s)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(s, 0, 0);\n\t\t\tthis->value[1] = col_type(0, s, 0);\n\t\t\tthis->value[2] = col_type(0, 0, s);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat\n\t(\n\t\tT x0, T y0, T z0,\n\t\tT x1, T y1, T z1,\n\t\tT x2, T y2, T z2\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0, z0);\n\t\t\tthis->value[1] = col_type(x1, y1, z1);\n\t\t\tthis->value[2] = col_type(x2, y2, z2);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v0);\n\t\t\tthis->value[1] = col_type(v1);\n\t\t\tthis->value[2] = col_type(v2);\n#\t\tendif\n\t}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<\n\t\ttypename X1, typename Y1, typename Z1,\n\t\ttypename X2, typename Y2, typename Z2,\n\t\ttypename X3, typename Y3, typename Z3>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat\n\t(\n\t\tX1 x1, Y1 y1, Z1 z1,\n\t\tX2 x2, Y2 y2, Z2 z2,\n\t\tX3 x3, Y3 y3, Z3 z3\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x1, y1, z1);\n\t\t\tthis->value[1] = col_type(x2, y2, z2);\n\t\t\tthis->value[2] = col_type(x3, y3, z3);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V1, typename V2, typename V3>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v1), col_type(v2), col_type(v3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v1);\n\t\t\tthis->value[1] = col_type(v2);\n\t\t\tthis->value[2] = col_type(v3);\n#\t\tendif\n\t}\n\n\t// -- Matrix conversions --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 3, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(m[2], 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(m[2], 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type & mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 3, T, Q>::col_type const& mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary updatable operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator=(mat<3, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\tthis->value[2] = m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(U s)\n\t{\n\t\tthis->value[0] += s;\n\t\tthis->value[1] += s;\n\t\tthis->value[2] += s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(mat<3, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\tthis->value[2] += m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(U s)\n\t{\n\t\tthis->value[0] -= s;\n\t\tthis->value[1] -= s;\n\t\tthis->value[2] -= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(mat<3, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\tthis->value[2] -= m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(U s)\n\t{\n\t\tthis->value[0] *= s;\n\t\tthis->value[1] *= s;\n\t\tthis->value[2] *= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(mat<3, 3, U, Q> const& m)\n\t{\n\t\treturn (*this = *this * m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(U s)\n\t{\n\t\tthis->value[0] /= s;\n\t\tthis->value[1] /= s;\n\t\tthis->value[2] /= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(mat<3, 3, U, Q> const& m)\n\t{\n\t\treturn *this *= inverse(m);\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\t++this->value[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\t--this->value[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator++(int)\n\t{\n\t\tmat<3, 3, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator--(int)\n\t{\n\t\tmat<3, 3, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1],\n\t\t\t-m[2]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar,\n\t\t\tm[2] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar,\n\t\t\tm[2] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1],\n\t\t\tm1[2] + m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tm[0] - scalar,\n\t\t\tm[1] - scalar,\n\t\t\tm[2] - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tscalar - m[0],\n\t\t\tscalar - m[1],\n\t\t\tscalar - m[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1],\n\t\t\tm1[2] - m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar,\n\t\t\tm[2] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar,\n\t\t\tm[2] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v)\n\t{\n\t\treturn typename mat<3, 3, T, Q>::col_type(\n\t\t\tm[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z,\n\t\t\tm[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z,\n\t\t\tm[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn typename mat<3, 3, T, Q>::row_type(\n\t\t\tm[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z,\n\t\t\tm[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z,\n\t\t\tm[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2)\n\t{\n\t\tT const SrcA00 = m1[0][0];\n\t\tT const SrcA01 = m1[0][1];\n\t\tT const SrcA02 = m1[0][2];\n\t\tT const SrcA10 = m1[1][0];\n\t\tT const SrcA11 = m1[1][1];\n\t\tT const SrcA12 = m1[1][2];\n\t\tT const SrcA20 = m1[2][0];\n\t\tT const SrcA21 = m1[2][1];\n\t\tT const SrcA22 = m1[2][2];\n\n\t\tT const SrcB00 = m2[0][0];\n\t\tT const SrcB01 = m2[0][1];\n\t\tT const SrcB02 = m2[0][2];\n\t\tT const SrcB10 = m2[1][0];\n\t\tT const SrcB11 = m2[1][1];\n\t\tT const SrcB12 = m2[1][2];\n\t\tT const SrcB20 = m2[2][0];\n\t\tT const SrcB21 = m2[2][1];\n\t\tT const SrcB22 = m2[2][2];\n\n\t\tmat<3, 3, T, Q> Result;\n\t\tResult[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02;\n\t\tResult[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02;\n\t\tResult[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02;\n\t\tResult[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12;\n\t\tResult[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12;\n\t\tResult[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12;\n\t\tResult[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22;\n\t\tResult[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22;\n\t\tResult[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2],\n\t\t\tm1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2],\n\t\t\tm1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2],\n\t\t\tm1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2],\n\t\t\tm1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m,\tT scalar)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tm[0] / scalar,\n\t\t\tm[1] / scalar,\n\t\t\tm[2] / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tscalar / m[0],\n\t\t\tscalar / m[1],\n\t\t\tscalar / m[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v)\n\t{\n\t\treturn  inverse(m) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn v * inverse(m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2)\n\t{\n\t\tmat<3, 3, T, Q> m1_copy(m1);\n\t\treturn m1_copy /= m2;\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat3x4.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat3x4.hpp\n\n#pragma once\n\n#include \"type_vec3.hpp\"\n#include \"type_vec4.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<3, 4, T, Q>\n\t{\n\t\ttypedef vec<4, T, Q> col_type;\n\t\ttypedef vec<3, T, Q> row_type;\n\t\ttypedef mat<3, 4, T, Q> type;\n\t\ttypedef mat<4, 3, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[3];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; }\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 4, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT x0, T y0, T z0, T w0,\n\t\t\tT x1, T y1, T z1, T w1,\n\t\t\tT x2, T y2, T z2, T w2);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v0,\n\t\t\tcol_type const& v1,\n\t\t\tcol_type const& v2);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<\n\t\t\ttypename X1, typename Y1, typename Z1, typename W1,\n\t\t\ttypename X2, typename Y2, typename Z2, typename W2,\n\t\t\ttypename X3, typename Y3, typename Z3, typename W3>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tX1 x1, Y1 y1, Z1 z1, W1 w1,\n\t\t\tX2 x2, Y2 y2, Z2 z2, W2 w2,\n\t\t\tX3 x3, Y3 y3, Z3 z3, W3 w3);\n\n\t\ttemplate<typename V1, typename V2, typename V3>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<4, V1, Q> const& v1,\n\t\t\tvec<4, V2, Q> const& v2,\n\t\t\tvec<4, V3, Q> const& v3);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator=(mat<3, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(mat<3, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(mat<3, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator/=(U s);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator++();\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> & operator--();\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<3, 4, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<3, 4, T, Q>::col_type operator*(mat<3, 4, T, Q> const& m, typename mat<3, 4, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<3, 4, T, Q>::row_type operator*(typename mat<3, 4, T, Q>::col_type const& v, mat<3, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1,\tmat<4, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1,\tmat<3, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat3x4.inl\"\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat3x4.inl",
    "content": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\t\tthis->value[0] = col_type(1, 0, 0, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1, 0, 0);\n\t\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 4, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = m[2];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(T s)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0), col_type(0, 0, s, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(s, 0, 0, 0);\n\t\t\tthis->value[1] = col_type(0, s, 0, 0);\n\t\t\tthis->value[2] = col_type(0, 0, s, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat\n\t(\n\t\tT x0, T y0, T z0, T w0,\n\t\tT x1, T y1, T z1, T w1,\n\t\tT x2, T y2, T z2, T w2\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{\n\t\t\t\tcol_type(x0, y0, z0, w0),\n\t\t\t\tcol_type(x1, y1, z1, w1),\n\t\t\t\tcol_type(x2, y2, z2, w2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0, z0, w0);\n\t\t\tthis->value[1] = col_type(x1, y1, z1, w1);\n\t\t\tthis->value[2] = col_type(x2, y2, z2, w2);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = v0;\n\t\t\tthis->value[1] = v1;\n\t\t\tthis->value[2] = v2;\n#\t\tendif\n\t}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<\n\t\ttypename X0, typename Y0, typename Z0, typename W0,\n\t\ttypename X1, typename Y1, typename Z1, typename W1,\n\t\ttypename X2, typename Y2, typename Z2, typename W2>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat\n\t(\n\t\tX0 x0, Y0 y0, Z0 z0, W0 w0,\n\t\tX1 x1, Y1 y1, Z1 z1, W1 w1,\n\t\tX2 x2, Y2 y2, Z2 z2, W2 w2\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{\n\t\t\t\tcol_type(x0, y0, z0, w0),\n\t\t\t\tcol_type(x1, y1, z1, w1),\n\t\t\t\tcol_type(x2, y2, z2, w2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0, z0, w0);\n\t\t\tthis->value[1] = col_type(x1, y1, z1, w1);\n\t\t\tthis->value[2] = col_type(x2, y2, z2, w2);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V1, typename V2, typename V3>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(vec<4, V1, Q> const& v0, vec<4, V2, Q> const& v1, vec<4, V3, Q> const& v2)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v0);\n\t\t\tthis->value[1] = col_type(v1);\n\t\t\tthis->value[2] = col_type(v2);\n#\t\tendif\n\t}\n\n\t// -- Matrix conversions --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 4, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(m[2], 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n\t\t\tthis->value[2] = col_type(m[2], 1, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n\t\t\tthis->value[2] = col_type(m[2], 1, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(m[2], 0);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type & mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 4, T, Q>::col_type const& mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary updatable operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator=(mat<3, 4, U, Q> const& m)\n\t{\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\tthis->value[2] = m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(U s)\n\t{\n\t\tthis->value[0] += s;\n\t\tthis->value[1] += s;\n\t\tthis->value[2] += s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(mat<3, 4, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\tthis->value[2] += m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(U s)\n\t{\n\t\tthis->value[0] -= s;\n\t\tthis->value[1] -= s;\n\t\tthis->value[2] -= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(mat<3, 4, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\tthis->value[2] -= m[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator*=(U s)\n\t{\n\t\tthis->value[0] *= s;\n\t\tthis->value[1] *= s;\n\t\tthis->value[2] *= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> & mat<3, 4, T, Q>::operator/=(U s)\n\t{\n\t\tthis->value[0] /= s;\n\t\tthis->value[1] /= s;\n\t\tthis->value[2] /= s;\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\t++this->value[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\t--this->value[2];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator++(int)\n\t{\n\t\tmat<3, 4, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator--(int)\n\t{\n\t\tmat<3, 4, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1],\n\t\t\t-m[2]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar,\n\t\t\tm[2] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1],\n\t\t\tm1[2] + m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m,\tT scalar)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm[0] - scalar,\n\t\t\tm[1] - scalar,\n\t\t\tm[2] - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1],\n\t\t\tm1[2] - m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar,\n\t\t\tm[2] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar,\n\t\t\tm[2] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type operator*\n\t(\n\t\tmat<3, 4, T, Q> const& m,\n\t\ttypename mat<3, 4, T, Q>::row_type const& v\n\t)\n\t{\n\t\treturn typename mat<3, 4, T, Q>::col_type(\n\t\t\tm[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z,\n\t\t\tm[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z,\n\t\t\tm[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z,\n\t\t\tm[0][3] * v.x + m[1][3] * v.y + m[2][3] * v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::row_type operator*\n\t(\n\t\ttypename mat<3, 4, T, Q>::col_type const& v,\n\t\tmat<3, 4, T, Q> const& m\n\t)\n\t{\n\t\treturn typename mat<3, 4, T, Q>::row_type(\n\t\t\tv.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3],\n\t\t\tv.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3],\n\t\t\tv.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2] + v.w * m[2][3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<4, 3, T, Q> const& m2)\n\t{\n\t\tconst T SrcA00 = m1[0][0];\n\t\tconst T SrcA01 = m1[0][1];\n\t\tconst T SrcA02 = m1[0][2];\n\t\tconst T SrcA03 = m1[0][3];\n\t\tconst T SrcA10 = m1[1][0];\n\t\tconst T SrcA11 = m1[1][1];\n\t\tconst T SrcA12 = m1[1][2];\n\t\tconst T SrcA13 = m1[1][3];\n\t\tconst T SrcA20 = m1[2][0];\n\t\tconst T SrcA21 = m1[2][1];\n\t\tconst T SrcA22 = m1[2][2];\n\t\tconst T SrcA23 = m1[2][3];\n\n\t\tconst T SrcB00 = m2[0][0];\n\t\tconst T SrcB01 = m2[0][1];\n\t\tconst T SrcB02 = m2[0][2];\n\t\tconst T SrcB10 = m2[1][0];\n\t\tconst T SrcB11 = m2[1][1];\n\t\tconst T SrcB12 = m2[1][2];\n\t\tconst T SrcB20 = m2[2][0];\n\t\tconst T SrcB21 = m2[2][1];\n\t\tconst T SrcB22 = m2[2][2];\n\t\tconst T SrcB30 = m2[3][0];\n\t\tconst T SrcB31 = m2[3][1];\n\t\tconst T SrcB32 = m2[3][2];\n\n\t\tmat<4, 4, T, Q> Result;\n\t\tResult[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02;\n\t\tResult[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02;\n\t\tResult[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02;\n\t\tResult[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01 + SrcA23 * SrcB02;\n\t\tResult[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12;\n\t\tResult[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12;\n\t\tResult[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12;\n\t\tResult[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11 + SrcA23 * SrcB12;\n\t\tResult[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22;\n\t\tResult[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22;\n\t\tResult[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22;\n\t\tResult[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21 + SrcA23 * SrcB22;\n\t\tResult[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31 + SrcA20 * SrcB32;\n\t\tResult[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31 + SrcA21 * SrcB32;\n\t\tResult[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31 + SrcA22 * SrcB32;\n\t\tResult[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31 + SrcA23 * SrcB32;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2],\n\t\t\tm1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2],\n\t\t\tm1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<3, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2],\n\t\t\tm1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2],\n\t\t\tm1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2],\n\t\t\tm1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2],\n\t\t\tm1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m,\tT scalar)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm[0] / scalar,\n\t\t\tm[1] / scalar,\n\t\t\tm[2] / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tscalar / m[0],\n\t\t\tscalar / m[1],\n\t\t\tscalar / m[2]);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat4x2.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat4x2.hpp\n\n#pragma once\n\n#include \"type_vec2.hpp\"\n#include \"type_vec4.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<4, 2, T, Q>\n\t{\n\t\ttypedef vec<2, T, Q> col_type;\n\t\ttypedef vec<4, T, Q> row_type;\n\t\ttypedef mat<4, 2, T, Q> type;\n\t\ttypedef mat<2, 4, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[4];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; }\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 2, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT x0, T y0,\n\t\t\tT x1, T y1,\n\t\t\tT x2, T y2,\n\t\t\tT x3, T y3);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v0,\n\t\t\tcol_type const& v1,\n\t\t\tcol_type const& v2,\n\t\t\tcol_type const& v3);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<\n\t\t\ttypename X0, typename Y0,\n\t\t\ttypename X1, typename Y1,\n\t\t\ttypename X2, typename Y2,\n\t\t\ttypename X3, typename Y3>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tX0 x0, Y0 y0,\n\t\t\tX1 x1, Y1 y1,\n\t\t\tX2 x2, Y2 y2,\n\t\t\tX3 x3, Y3 y3);\n\n\t\ttemplate<typename V1, typename V2, typename V3, typename V4>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<2, V1, Q> const& v1,\n\t\t\tvec<2, V2, Q> const& v2,\n\t\t\tvec<2, V3, Q> const& v3,\n\t\t\tvec<2, V4, Q> const& v4);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator=(mat<4, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(mat<4, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(mat<4, 2, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator/=(U s);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator++ ();\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> & operator-- ();\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<4, 2, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1,\tmat<4, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat4x2.inl\"\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat4x2.inl",
    "content": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0), col_type(0, 1), col_type(0, 0), col_type(0, 0)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\t\tthis->value[0] = col_type(1, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1);\n\t\t\t\tthis->value[2] = col_type(0, 0);\n\t\t\t\tthis->value[3] = col_type(0, 0);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = m[2];\n\t\t\tthis->value[3] = m[3];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(T s)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(s, 0), col_type(0, s), col_type(0, 0), col_type(0, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(s, 0);\n\t\t\tthis->value[1] = col_type(0, s);\n\t\t\tthis->value[2] = col_type(0, 0);\n\t\t\tthis->value[3] = col_type(0, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat\n\t(\n\t\tT x0, T y0,\n\t\tT x1, T y1,\n\t\tT x2, T y2,\n\t\tT x3, T y3\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0);\n\t\t\tthis->value[1] = col_type(x1, y1);\n\t\t\tthis->value[2] = col_type(x2, y2);\n\t\t\tthis->value[3] = col_type(x3, y3);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = v0;\n\t\t\tthis->value[1] = v1;\n\t\t\tthis->value[2] = v2;\n\t\t\tthis->value[3] = v3;\n#\t\tendif\n\t}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<\n\t\ttypename X0, typename Y0,\n\t\ttypename X1, typename Y1,\n\t\ttypename X2, typename Y2,\n\t\ttypename X3, typename Y3>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat\n\t(\n\t\tX0 x0, Y0 y0,\n\t\tX1 x1, Y1 y1,\n\t\tX2 x2, Y2 y2,\n\t\tX3 x3, Y3 y3\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0);\n\t\t\tthis->value[1] = col_type(x1, y1);\n\t\t\tthis->value[2] = col_type(x2, y2);\n\t\t\tthis->value[3] = col_type(x3, y3);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V0, typename V1, typename V2, typename V3>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(vec<2, V0, Q> const& v0, vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2, vec<2, V3, Q> const& v3)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v0);\n\t\t\tthis->value[1] = col_type(v1);\n\t\t\tthis->value[2] = col_type(v2);\n\t\t\tthis->value[3] = col_type(v3);\n#\t\tendif\n\t}\n\n\t// -- Conversion --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(m[3]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(m[3]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\t\tthis->value[3] = col_type(m[3]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type & mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 2, T, Q>::col_type const& mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary updatable operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q>& mat<4, 2, T, Q>::operator=(mat<4, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\tthis->value[2] = m[2];\n\t\tthis->value[3] = m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(U s)\n\t{\n\t\tthis->value[0] += s;\n\t\tthis->value[1] += s;\n\t\tthis->value[2] += s;\n\t\tthis->value[3] += s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(mat<4, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\tthis->value[2] += m[2];\n\t\tthis->value[3] += m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(U s)\n\t{\n\t\tthis->value[0] -= s;\n\t\tthis->value[1] -= s;\n\t\tthis->value[2] -= s;\n\t\tthis->value[3] -= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(mat<4, 2, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\tthis->value[2] -= m[2];\n\t\tthis->value[3] -= m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator*=(U s)\n\t{\n\t\tthis->value[0] *= s;\n\t\tthis->value[1] *= s;\n\t\tthis->value[2] *= s;\n\t\tthis->value[3] *= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator/=(U s)\n\t{\n\t\tthis->value[0] /= s;\n\t\tthis->value[1] /= s;\n\t\tthis->value[2] /= s;\n\t\tthis->value[3] /= s;\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\t++this->value[2];\n\t\t++this->value[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\t--this->value[2];\n\t\t--this->value[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator++(int)\n\t{\n\t\tmat<4, 2, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator--(int)\n\t{\n\t\tmat<4, 2, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1],\n\t\t\t-m[2],\n\t\t\t-m[3]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm[0] + scalar,\n\t\t\tm[1] + scalar,\n\t\t\tm[2] + scalar,\n\t\t\tm[3] + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1],\n\t\t\tm1[2] + m2[2],\n\t\t\tm1[3] + m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm[0] - scalar,\n\t\t\tm[1] - scalar,\n\t\t\tm[2] - scalar,\n\t\t\tm[3] - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1],\n\t\t\tm1[2] - m2[2],\n\t\t\tm1[3] - m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar,\n\t\t\tm[2] * scalar,\n\t\t\tm[3] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm[0] * scalar,\n\t\t\tm[1] * scalar,\n\t\t\tm[2] * scalar,\n\t\t\tm[3] * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v)\n\t{\n\t\treturn typename mat<4, 2, T, Q>::col_type(\n\t\t\tm[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w,\n\t\t\tm[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m)\n\t{\n\t\treturn typename mat<4, 2, T, Q>::row_type(\n\t\t\tv.x * m[0][0] + v.y * m[0][1],\n\t\t\tv.x * m[1][0] + v.y * m[1][1],\n\t\t\tv.x * m[2][0] + v.y * m[2][1],\n\t\t\tv.x * m[3][0] + v.y * m[3][1]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2)\n\t{\n\t\tT const SrcA00 = m1[0][0];\n\t\tT const SrcA01 = m1[0][1];\n\t\tT const SrcA10 = m1[1][0];\n\t\tT const SrcA11 = m1[1][1];\n\t\tT const SrcA20 = m1[2][0];\n\t\tT const SrcA21 = m1[2][1];\n\t\tT const SrcA30 = m1[3][0];\n\t\tT const SrcA31 = m1[3][1];\n\n\t\tT const SrcB00 = m2[0][0];\n\t\tT const SrcB01 = m2[0][1];\n\t\tT const SrcB02 = m2[0][2];\n\t\tT const SrcB03 = m2[0][3];\n\t\tT const SrcB10 = m2[1][0];\n\t\tT const SrcB11 = m2[1][1];\n\t\tT const SrcB12 = m2[1][2];\n\t\tT const SrcB13 = m2[1][3];\n\n\t\tmat<2, 2, T, Q> Result;\n\t\tResult[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03;\n\t\tResult[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03;\n\t\tResult[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13;\n\t\tResult[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 2, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3],\n\t\t\tm1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3],\n\t\t\tm1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tm[0] / scalar,\n\t\t\tm[1] / scalar,\n\t\t\tm[2] / scalar,\n\t\t\tm[3] / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m)\n\t{\n\t\treturn mat<4, 2, T, Q>(\n\t\t\tscalar / m[0],\n\t\t\tscalar / m[1],\n\t\t\tscalar / m[2],\n\t\t\tscalar / m[3]);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat4x3.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat4x3.hpp\n\n#pragma once\n\n#include \"type_vec3.hpp\"\n#include \"type_vec4.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<4, 3, T, Q>\n\t{\n\t\ttypedef vec<3, T, Q> col_type;\n\t\ttypedef vec<4, T, Q> row_type;\n\t\ttypedef mat<4, 3, T, Q> type;\n\t\ttypedef mat<3, 4, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[4];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; }\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 3, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT const& x0, T const& y0, T const& z0,\n\t\t\tT const& x1, T const& y1, T const& z1,\n\t\t\tT const& x2, T const& y2, T const& z2,\n\t\t\tT const& x3, T const& y3, T const& z3);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v0,\n\t\t\tcol_type const& v1,\n\t\t\tcol_type const& v2,\n\t\t\tcol_type const& v3);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<\n\t\t\ttypename X1, typename Y1, typename Z1,\n\t\t\ttypename X2, typename Y2, typename Z2,\n\t\t\ttypename X3, typename Y3, typename Z3,\n\t\t\ttypename X4, typename Y4, typename Z4>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tX1 const& x1, Y1 const& y1, Z1 const& z1,\n\t\t\tX2 const& x2, Y2 const& y2, Z2 const& z2,\n\t\t\tX3 const& x3, Y3 const& y3, Z3 const& z3,\n\t\t\tX4 const& x4, Y4 const& y4, Z4 const& z4);\n\n\t\ttemplate<typename V1, typename V2, typename V3, typename V4>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<3, V1, Q> const& v1,\n\t\t\tvec<3, V2, Q> const& v2,\n\t\t\tvec<3, V3, Q> const& v3,\n\t\t\tvec<3, V4, Q> const& v4);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> & operator=(mat<4, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(mat<4, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(mat<4, 3, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> & operator/=(U s);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q>& operator++();\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q>& operator--();\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<4, 3, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<4, 3, T, Q>::col_type operator*(mat<4, 3, T, Q> const& m, typename mat<4, 3, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<4, 3, T, Q>::row_type operator*(typename mat<4, 3, T, Q>::col_type const& v, mat<4, 3, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1,\tmat<3, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat4x3.inl\"\n#endif //GLM_EXTERNAL_TEMPLATE\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat4x3.inl",
    "content": "namespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0, 0), col_type(0, 1, 0), col_type(0, 0, 1), col_type(0, 0, 0)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\t\tthis->value[0] = col_type(1, 0, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1, 0);\n\t\t\t\tthis->value[2] = col_type(0, 0, 1);\n\t\t\t\tthis->value[3] = col_type(0, 0, 0);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 3, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = m[2];\n\t\t\tthis->value[3] = m[3];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(T const& s)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(s, 0, 0), col_type(0, s, 0), col_type(0, 0, s), col_type(0, 0, 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(s, 0, 0);\n\t\t\tthis->value[1] = col_type(0, s, 0);\n\t\t\tthis->value[2] = col_type(0, 0, s);\n\t\t\tthis->value[3] = col_type(0, 0, 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat\n\t(\n\t\tT const& x0, T const& y0, T const& z0,\n\t\tT const& x1, T const& y1, T const& z1,\n\t\tT const& x2, T const& y2, T const& z2,\n\t\tT const& x3, T const& y3, T const& z3\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0, z0);\n\t\t\tthis->value[1] = col_type(x1, y1, z1);\n\t\t\tthis->value[2] = col_type(x2, y2, z2);\n\t\t\tthis->value[3] = col_type(x3, y3, z3);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = v0;\n\t\t\tthis->value[1] = v1;\n\t\t\tthis->value[2] = v2;\n\t\t\tthis->value[3] = v3;\n#\t\tendif\n\t}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<\n\t\ttypename X0, typename Y0, typename Z0,\n\t\ttypename X1, typename Y1, typename Z1,\n\t\ttypename X2, typename Y2, typename Z2,\n\t\ttypename X3, typename Y3, typename Z3>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat\n\t(\n\t\tX0 const& x0, Y0 const& y0, Z0 const& z0,\n\t\tX1 const& x1, Y1 const& y1, Z1 const& z1,\n\t\tX2 const& x2, Y2 const& y2, Z2 const& z2,\n\t\tX3 const& x3, Y3 const& y3, Z3 const& z3\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0, z0);\n\t\t\tthis->value[1] = col_type(x1, y1, z1);\n\t\t\tthis->value[2] = col_type(x2, y2, z2);\n\t\t\tthis->value[3] = col_type(x3, y3, z3);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V1, typename V2, typename V3, typename V4>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3, vec<3, V4, Q> const& v4)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v1), col_type(v2), col_type(v3), col_type(v4)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v1);\n\t\t\tthis->value[1] = col_type(v2);\n\t\t\tthis->value[2] = col_type(v3);\n\t\t\tthis->value[3] = col_type(v4);\n#\t\tendif\n\t}\n\n\t// -- Matrix conversions --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 3, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(m[3]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(0, 0, 1);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(m[3]);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0, 0, 1);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(m[2], 1);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(0, 0, 1);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1), col_type(m[3], 0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(m[2], 1);\n\t\t\tthis->value[3] = col_type(m[3], 0);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(0);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type & mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 3, T, Q>::col_type const& mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary updatable operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q>& mat<4, 3, T, Q>::operator=(mat<4, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\tthis->value[2] = m[2];\n\t\tthis->value[3] = m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(U s)\n\t{\n\t\tthis->value[0] += s;\n\t\tthis->value[1] += s;\n\t\tthis->value[2] += s;\n\t\tthis->value[3] += s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(mat<4, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\tthis->value[2] += m[2];\n\t\tthis->value[3] += m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(U s)\n\t{\n\t\tthis->value[0] -= s;\n\t\tthis->value[1] -= s;\n\t\tthis->value[2] -= s;\n\t\tthis->value[3] -= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(mat<4, 3, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\tthis->value[2] -= m[2];\n\t\tthis->value[3] -= m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator*=(U s)\n\t{\n\t\tthis->value[0] *= s;\n\t\tthis->value[1] *= s;\n\t\tthis->value[2] *= s;\n\t\tthis->value[3] *= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator/=(U s)\n\t{\n\t\tthis->value[0] /= s;\n\t\tthis->value[1] /= s;\n\t\tthis->value[2] /= s;\n\t\tthis->value[3] /= s;\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\t++this->value[2];\n\t\t++this->value[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\t--this->value[2];\n\t\t--this->value[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator++(int)\n\t{\n\t\tmat<4, 3, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator--(int)\n\t{\n\t\tmat<4, 3, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1],\n\t\t\t-m[2],\n\t\t\t-m[3]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm[0] + s,\n\t\t\tm[1] + s,\n\t\t\tm[2] + s,\n\t\t\tm[3] + s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1],\n\t\t\tm1[2] + m2[2],\n\t\t\tm1[3] + m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm[0] - s,\n\t\t\tm[1] - s,\n\t\t\tm[2] - s,\n\t\t\tm[3] - s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1],\n\t\t\tm1[2] - m2[2],\n\t\t\tm1[3] - m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm[0] * s,\n\t\t\tm[1] * s,\n\t\t\tm[2] * s,\n\t\t\tm[3] * s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm[0] * s,\n\t\t\tm[1] * s,\n\t\t\tm[2] * s,\n\t\t\tm[3] * s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type operator*\n\t(\n\t\tmat<4, 3, T, Q> const& m,\n\t\ttypename mat<4, 3, T, Q>::row_type const& v)\n\t{\n\t\treturn typename mat<4, 3, T, Q>::col_type(\n\t\t\tm[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w,\n\t\t\tm[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w,\n\t\t\tm[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z + m[3][2] * v.w);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::row_type operator*\n\t(\n\t\ttypename mat<4, 3, T, Q>::col_type const& v,\n\t\tmat<4, 3, T, Q> const& m)\n\t{\n\t\treturn typename mat<4, 3, T, Q>::row_type(\n\t\t\tv.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2],\n\t\t\tv.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2],\n\t\t\tv.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2],\n\t\t\tv.x * m[3][0] + v.y * m[3][1] + v.z * m[3][2]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 3, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<3, 4, T, Q> const& m2)\n\t{\n\t\tT const SrcA00 = m1[0][0];\n\t\tT const SrcA01 = m1[0][1];\n\t\tT const SrcA02 = m1[0][2];\n\t\tT const SrcA10 = m1[1][0];\n\t\tT const SrcA11 = m1[1][1];\n\t\tT const SrcA12 = m1[1][2];\n\t\tT const SrcA20 = m1[2][0];\n\t\tT const SrcA21 = m1[2][1];\n\t\tT const SrcA22 = m1[2][2];\n\t\tT const SrcA30 = m1[3][0];\n\t\tT const SrcA31 = m1[3][1];\n\t\tT const SrcA32 = m1[3][2];\n\n\t\tT const SrcB00 = m2[0][0];\n\t\tT const SrcB01 = m2[0][1];\n\t\tT const SrcB02 = m2[0][2];\n\t\tT const SrcB03 = m2[0][3];\n\t\tT const SrcB10 = m2[1][0];\n\t\tT const SrcB11 = m2[1][1];\n\t\tT const SrcB12 = m2[1][2];\n\t\tT const SrcB13 = m2[1][3];\n\t\tT const SrcB20 = m2[2][0];\n\t\tT const SrcB21 = m2[2][1];\n\t\tT const SrcB22 = m2[2][2];\n\t\tT const SrcB23 = m2[2][3];\n\n\t\tmat<3, 3, T, Q> Result;\n\t\tResult[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03;\n\t\tResult[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03;\n\t\tResult[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02 + SrcA32 * SrcB03;\n\t\tResult[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13;\n\t\tResult[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13;\n\t\tResult[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12 + SrcA32 * SrcB13;\n\t\tResult[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22 + SrcA30 * SrcB23;\n\t\tResult[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22 + SrcA31 * SrcB23;\n\t\tResult[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22 + SrcA32 * SrcB23;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3],\n\t\t\tm1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3],\n\t\t\tm1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3],\n\t\t\tm1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3],\n\t\t\tm1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2] + m1[3][2] * m2[3][3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\tm[0] / s,\n\t\t\tm[1] / s,\n\t\t\tm[2] / s,\n\t\t\tm[3] / s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m)\n\t{\n\t\treturn mat<4, 3, T, Q>(\n\t\t\ts / m[0],\n\t\t\ts / m[1],\n\t\t\ts / m[2],\n\t\t\ts / m[3]);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat4x4.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_mat4x4.hpp\n\n#pragma once\n\n#include \"type_vec4.hpp\"\n#include <limits>\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct mat<4, 4, T, Q>\n\t{\n\t\ttypedef vec<4, T, Q> col_type;\n\t\ttypedef vec<4, T, Q> row_type;\n\t\ttypedef mat<4, 4, T, Q> type;\n\t\ttypedef mat<4, 4, T, Q> transpose_type;\n\t\ttypedef T value_type;\n\n\tprivate:\n\t\tcol_type value[4];\n\n\tpublic:\n\t\t// -- Accesses --\n\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;}\n\n\t\tGLM_FUNC_DECL col_type & operator[](length_type i) GLM_NOEXCEPT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const GLM_NOEXCEPT;\n\n\t\t// -- Constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 4, T, P> const& m);\n\n\t\tGLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tT const& x0, T const& y0, T const& z0, T const& w0,\n\t\t\tT const& x1, T const& y1, T const& z1, T const& w1,\n\t\t\tT const& x2, T const& y2, T const& z2, T const& w2,\n\t\t\tT const& x3, T const& y3, T const& z3, T const& w3);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tcol_type const& v0,\n\t\t\tcol_type const& v1,\n\t\t\tcol_type const& v2,\n\t\t\tcol_type const& v3);\n\n\t\t// -- Conversions --\n\n\t\ttemplate<\n\t\t\ttypename X1, typename Y1, typename Z1, typename W1,\n\t\t\ttypename X2, typename Y2, typename Z2, typename W2,\n\t\t\ttypename X3, typename Y3, typename Z3, typename W3,\n\t\t\ttypename X4, typename Y4, typename Z4, typename W4>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tX1 const& x1, Y1 const& y1, Z1 const& z1, W1 const& w1,\n\t\t\tX2 const& x2, Y2 const& y2, Z2 const& z2, W2 const& w2,\n\t\t\tX3 const& x3, Y3 const& y3, Z3 const& z3, W3 const& w3,\n\t\t\tX4 const& x4, Y4 const& y4, Z4 const& z4, W4 const& w4);\n\n\t\ttemplate<typename V1, typename V2, typename V3, typename V4>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR mat(\n\t\t\tvec<4, V1, Q> const& v1,\n\t\t\tvec<4, V2, Q> const& v2,\n\t\t\tvec<4, V3, Q> const& v3,\n\t\t\tvec<4, V4, Q> const& v4);\n\n\t\t// -- Matrix conversions --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, U, P> const& m);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator=(mat<4, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(mat<4, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(mat<4, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(mat<4, 4, U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(mat<4, 4, U, Q> const& m);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator++();\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> & operator--();\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL mat<4, 4, T, Q> operator--(int);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1,\tmat<4, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator*(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator*(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator/(T const& s, mat<4, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1,\tmat<4, 4, T, Q> const& m2);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_mat4x4.inl\"\n#endif//GLM_EXTERNAL_TEMPLATE\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat4x4.inl",
    "content": "#include \"../matrix.hpp\"\n\nnamespace glm\n{\n\t// -- Constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat()\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST\n\t\t\t\t: value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)}\n#\t\t\tendif\n\t\t{\n#\t\t\tif GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION\n\t\t\t\tthis->value[0] = col_type(1, 0, 0, 0);\n\t\t\t\tthis->value[1] = col_type(0, 1, 0, 0);\n\t\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n\t\t\t\tthis->value[3] = col_type(0, 0, 0, 1);\n#\t\t\tendif\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 4, T, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = m[2];\n\t\t\tthis->value[3] = m[3];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(T const& s)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0), col_type(0, 0, s, 0), col_type(0, 0, 0, s)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(s, 0, 0, 0);\n\t\t\tthis->value[1] = col_type(0, s, 0, 0);\n\t\t\tthis->value[2] = col_type(0, 0, s, 0);\n\t\t\tthis->value[3] = col_type(0, 0, 0, s);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat\n\t(\n\t\tT const& x0, T const& y0, T const& z0, T const& w0,\n\t\tT const& x1, T const& y1, T const& z1, T const& w1,\n\t\tT const& x2, T const& y2, T const& z2, T const& w2,\n\t\tT const& x3, T const& y3, T const& z3, T const& w3\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{\n\t\t\t\tcol_type(x0, y0, z0, w0),\n\t\t\t\tcol_type(x1, y1, z1, w1),\n\t\t\t\tcol_type(x2, y2, z2, w2),\n\t\t\t\tcol_type(x3, y3, z3, w3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x0, y0, z0, w0);\n\t\t\tthis->value[1] = col_type(x1, y1, z1, w1);\n\t\t\tthis->value[2] = col_type(x2, y2, z2, w2);\n\t\t\tthis->value[3] = col_type(x3, y3, z3, w3);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = v0;\n\t\t\tthis->value[1] = v1;\n\t\t\tthis->value[2] = v2;\n\t\t\tthis->value[3] = v3;\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 4, U, P> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0]);\n\t\t\tthis->value[1] = col_type(m[1]);\n\t\t\tthis->value[2] = col_type(m[2]);\n\t\t\tthis->value[3] = col_type(m[3]);\n#\t\tendif\n\t}\n\n\t// -- Conversions --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<\n\t\ttypename X1, typename Y1, typename Z1, typename W1,\n\t\ttypename X2, typename Y2, typename Z2, typename W2,\n\t\ttypename X3, typename Y3, typename Z3, typename W3,\n\t\ttypename X4, typename Y4, typename Z4, typename W4>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat\n\t(\n\t\tX1 const& x1, Y1 const& y1, Z1 const& z1, W1 const& w1,\n\t\tX2 const& x2, Y2 const& y2, Z2 const& z2, W2 const& w2,\n\t\tX3 const& x3, Y3 const& y3, Z3 const& z3, W3 const& w3,\n\t\tX4 const& x4, Y4 const& y4, Z4 const& z4, W4 const& w4\n\t)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(x1, y1, z1, w1), col_type(x2, y2, z2, w2), col_type(x3, y3, z3, w3), col_type(x4, y4, z4, w4)}\n#\t\tendif\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<X1>::is_iec559 || std::numeric_limits<X1>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 1st parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<Y1>::is_iec559 || std::numeric_limits<Y1>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<Z1>::is_iec559 || std::numeric_limits<Z1>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<W1>::is_iec559 || std::numeric_limits<W1>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 4th parameter type invalid.\");\n\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<X2>::is_iec559 || std::numeric_limits<X2>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 5th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<Y2>::is_iec559 || std::numeric_limits<Y2>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 6th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<Z2>::is_iec559 || std::numeric_limits<Z2>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 7th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<W2>::is_iec559 || std::numeric_limits<W2>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 8th parameter type invalid.\");\n\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<X3>::is_iec559 || std::numeric_limits<X3>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 9th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<Y3>::is_iec559 || std::numeric_limits<Y3>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 10th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<Z3>::is_iec559 || std::numeric_limits<Z3>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 11th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<W3>::is_iec559 || std::numeric_limits<W3>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 12th parameter type invalid.\");\n\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<X4>::is_iec559 || std::numeric_limits<X4>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 13th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<Y4>::is_iec559 || std::numeric_limits<Y4>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 14th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<Z4>::is_iec559 || std::numeric_limits<Z4>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 15th parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<W4>::is_iec559 || std::numeric_limits<W4>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 16th parameter type invalid.\");\n\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(x1, y1, z1, w1);\n\t\t\tthis->value[1] = col_type(x2, y2, z2, w2);\n\t\t\tthis->value[2] = col_type(x3, y3, z3, w3);\n\t\t\tthis->value[3] = col_type(x4, y4, z4, w4);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename V1, typename V2, typename V3, typename V4>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2, vec<4, V3, Q> const& v3, vec<4, V4, Q> const& v4)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(v1), col_type(v2), col_type(v3), col_type(v4)}\n#\t\tendif\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<V1>::is_iec559 || std::numeric_limits<V1>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 1st parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<V2>::is_iec559 || std::numeric_limits<V2>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<V3>::is_iec559 || std::numeric_limits<V3>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid.\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<V4>::is_iec559 || std::numeric_limits<V4>::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, \"*mat4x4 constructor only takes float and integer types, 4th parameter type invalid.\");\n\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(v1);\n\t\t\tthis->value[1] = col_type(v2);\n\t\t\tthis->value[2] = col_type(v3);\n\t\t\tthis->value[3] = col_type(v4);\n#\t\tendif\n\t}\n\n\t// -- Matrix conversions --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n\t\t\tthis->value[3] = col_type(0, 0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0), col_type(0, 0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(m[2], 0);\n\t\t\tthis->value[3] = col_type(0, 0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n\t\t\tthis->value[3] = col_type(0, 0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0), col_type(0, 0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n\t\t\tthis->value[2] = col_type(m[2], 1, 0);\n\t\t\tthis->value[3] = col_type(0, 0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n\t\t\tthis->value[3] = col_type(0, 0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 2, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0, 0);\n\t\t\tthis->value[1] = col_type(m[1], 0, 0);\n\t\t\tthis->value[2] = col_type(0, 0, 1, 0);\n\t\t\tthis->value[3] = col_type(0, 0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 4, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0, 0, 0, 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = m[0];\n\t\t\tthis->value[1] = m[1];\n\t\t\tthis->value[2] = m[2];\n\t\t\tthis->value[3] = col_type(0, 0, 0, 1);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 3, T, Q> const& m)\n#\t\tif GLM_HAS_INITIALIZER_LISTS\n\t\t\t: value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0), col_type(m[3], 1)}\n#\t\tendif\n\t{\n#\t\tif !GLM_HAS_INITIALIZER_LISTS\n\t\t\tthis->value[0] = col_type(m[0], 0);\n\t\t\tthis->value[1] = col_type(m[1], 0);\n\t\t\tthis->value[2] = col_type(m[2], 0);\n\t\t\tthis->value[3] = col_type(m[3], 1);\n#\t\tendif\n\t}\n\n\t// -- Accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type & mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 4, T, Q>::col_type const& mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) const GLM_NOEXCEPT\n\t{\n\t\tassert(i < this->length());\n\t\treturn this->value[i];\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator=(mat<4, 4, U, Q> const& m)\n\t{\n\t\t//memcpy could be faster\n\t\t//memcpy(&this->value, &m.value, 16 * sizeof(valType));\n\t\tthis->value[0] = m[0];\n\t\tthis->value[1] = m[1];\n\t\tthis->value[2] = m[2];\n\t\tthis->value[3] = m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(U s)\n\t{\n\t\tthis->value[0] += s;\n\t\tthis->value[1] += s;\n\t\tthis->value[2] += s;\n\t\tthis->value[3] += s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(mat<4, 4, U, Q> const& m)\n\t{\n\t\tthis->value[0] += m[0];\n\t\tthis->value[1] += m[1];\n\t\tthis->value[2] += m[2];\n\t\tthis->value[3] += m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(U s)\n\t{\n\t\tthis->value[0] -= s;\n\t\tthis->value[1] -= s;\n\t\tthis->value[2] -= s;\n\t\tthis->value[3] -= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(mat<4, 4, U, Q> const& m)\n\t{\n\t\tthis->value[0] -= m[0];\n\t\tthis->value[1] -= m[1];\n\t\tthis->value[2] -= m[2];\n\t\tthis->value[3] -= m[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(U s)\n\t{\n\t\tthis->value[0] *= s;\n\t\tthis->value[1] *= s;\n\t\tthis->value[2] *= s;\n\t\tthis->value[3] *= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(mat<4, 4, U, Q> const& m)\n\t{\n\t\treturn (*this = *this * m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(U s)\n\t{\n\t\tthis->value[0] /= s;\n\t\tthis->value[1] /= s;\n\t\tthis->value[2] /= s;\n\t\tthis->value[3] /= s;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(mat<4, 4, U, Q> const& m)\n\t{\n\t\treturn *this *= inverse(m);\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator++()\n\t{\n\t\t++this->value[0];\n\t\t++this->value[1];\n\t\t++this->value[2];\n\t\t++this->value[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator--()\n\t{\n\t\t--this->value[0];\n\t\t--this->value[1];\n\t\t--this->value[2];\n\t\t--this->value[3];\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator++(int)\n\t{\n\t\tmat<4, 4, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator--(int)\n\t{\n\t\tmat<4, 4, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary constant operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m)\n\t{\n\t\treturn m;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\t-m[0],\n\t\t\t-m[1],\n\t\t\t-m[2],\n\t\t\t-m[3]);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm[0] + s,\n\t\t\tm[1] + s,\n\t\t\tm[2] + s,\n\t\t\tm[3] + s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm[0] + s,\n\t\t\tm[1] + s,\n\t\t\tm[2] + s,\n\t\t\tm[3] + s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm1[0] + m2[0],\n\t\t\tm1[1] + m2[1],\n\t\t\tm1[2] + m2[2],\n\t\t\tm1[3] + m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm[0] - s,\n\t\t\tm[1] - s,\n\t\t\tm[2] - s,\n\t\t\tm[3] - s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\ts - m[0],\n\t\t\ts - m[1],\n\t\t\ts - m[2],\n\t\t\ts - m[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm1[0] - m2[0],\n\t\t\tm1[1] - m2[1],\n\t\t\tm1[2] - m2[2],\n\t\t\tm1[3] - m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const  & s)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm[0] * s,\n\t\t\tm[1] * s,\n\t\t\tm[2] * s,\n\t\t\tm[3] * s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm[0] * s,\n\t\t\tm[1] * s,\n\t\t\tm[2] * s,\n\t\t\tm[3] * s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator*\n\t(\n\t\tmat<4, 4, T, Q> const& m,\n\t\ttypename mat<4, 4, T, Q>::row_type const& v\n\t)\n\t{\n/*\n\t\t__m128 v0 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 v1 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 v2 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 v3 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 m0 = _mm_mul_ps(m[0].data, v0);\n\t\t__m128 m1 = _mm_mul_ps(m[1].data, v1);\n\t\t__m128 a0 = _mm_add_ps(m0, m1);\n\n\t\t__m128 m2 = _mm_mul_ps(m[2].data, v2);\n\t\t__m128 m3 = _mm_mul_ps(m[3].data, v3);\n\t\t__m128 a1 = _mm_add_ps(m2, m3);\n\n\t\t__m128 a2 = _mm_add_ps(a0, a1);\n\n\t\treturn typename mat<4, 4, T, Q>::col_type(a2);\n*/\n\n\t\ttypename mat<4, 4, T, Q>::col_type const Mov0(v[0]);\n\t\ttypename mat<4, 4, T, Q>::col_type const Mov1(v[1]);\n\t\ttypename mat<4, 4, T, Q>::col_type const Mul0 = m[0] * Mov0;\n\t\ttypename mat<4, 4, T, Q>::col_type const Mul1 = m[1] * Mov1;\n\t\ttypename mat<4, 4, T, Q>::col_type const Add0 = Mul0 + Mul1;\n\t\ttypename mat<4, 4, T, Q>::col_type const Mov2(v[2]);\n\t\ttypename mat<4, 4, T, Q>::col_type const Mov3(v[3]);\n\t\ttypename mat<4, 4, T, Q>::col_type const Mul2 = m[2] * Mov2;\n\t\ttypename mat<4, 4, T, Q>::col_type const Mul3 = m[3] * Mov3;\n\t\ttypename mat<4, 4, T, Q>::col_type const Add1 = Mul2 + Mul3;\n\t\ttypename mat<4, 4, T, Q>::col_type const Add2 = Add0 + Add1;\n\t\treturn Add2;\n\n/*\n\t\treturn typename mat<4, 4, T, Q>::col_type(\n\t\t\tm[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2] + m[3][0] * v[3],\n\t\t\tm[0][1] * v[0] + m[1][1] * v[1] + m[2][1] * v[2] + m[3][1] * v[3],\n\t\t\tm[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2] + m[3][2] * v[3],\n\t\t\tm[0][3] * v[0] + m[1][3] * v[1] + m[2][3] * v[2] + m[3][3] * v[3]);\n*/\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator*\n\t(\n\t\ttypename mat<4, 4, T, Q>::col_type const& v,\n\t\tmat<4, 4, T, Q> const& m\n\t)\n\t{\n\t\treturn typename mat<4, 4, T, Q>::row_type(\n\t\t\tm[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2] + m[0][3] * v[3],\n\t\t\tm[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2] + m[1][3] * v[3],\n\t\t\tm[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3] * v[3],\n\t\t\tm[3][0] * v[0] + m[3][1] * v[1] + m[3][2] * v[2] + m[3][3] * v[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<2, 4, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3],\n\t\t\tm1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3],\n\t\t\tm1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2)\n\t{\n\t\treturn mat<3, 4, T, Q>(\n\t\t\tm1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3],\n\t\t\tm1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3],\n\t\t\tm1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3],\n\t\t\tm1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3],\n\t\t\tm1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3],\n\t\t\tm1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3],\n\t\t\tm1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3],\n\t\t\tm1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3],\n\t\t\tm1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3],\n\t\t\tm1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3],\n\t\t\tm1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3],\n\t\t\tm1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2] + m1[3][3] * m2[2][3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2)\n\t{\n\t\ttypename mat<4, 4, T, Q>::col_type const SrcA0 = m1[0];\n\t\ttypename mat<4, 4, T, Q>::col_type const SrcA1 = m1[1];\n\t\ttypename mat<4, 4, T, Q>::col_type const SrcA2 = m1[2];\n\t\ttypename mat<4, 4, T, Q>::col_type const SrcA3 = m1[3];\n\n\t\ttypename mat<4, 4, T, Q>::col_type const SrcB0 = m2[0];\n\t\ttypename mat<4, 4, T, Q>::col_type const SrcB1 = m2[1];\n\t\ttypename mat<4, 4, T, Q>::col_type const SrcB2 = m2[2];\n\t\ttypename mat<4, 4, T, Q>::col_type const SrcB3 = m2[3];\n\n\t\tmat<4, 4, T, Q> Result;\n\t\tResult[0] = SrcA0 * SrcB0[0] + SrcA1 * SrcB0[1] + SrcA2 * SrcB0[2] + SrcA3 * SrcB0[3];\n\t\tResult[1] = SrcA0 * SrcB1[0] + SrcA1 * SrcB1[1] + SrcA2 * SrcB1[2] + SrcA3 * SrcB1[3];\n\t\tResult[2] = SrcA0 * SrcB2[0] + SrcA1 * SrcB2[1] + SrcA2 * SrcB2[2] + SrcA3 * SrcB2[3];\n\t\tResult[3] = SrcA0 * SrcB3[0] + SrcA1 * SrcB3[1] + SrcA2 * SrcB3[2] + SrcA3 * SrcB3[3];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm[0] / s,\n\t\t\tm[1] / s,\n\t\t\tm[2] / s,\n\t\t\tm[3] / s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(T const& s,\tmat<4, 4, T, Q> const& m)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\ts / m[0],\n\t\t\ts / m[1],\n\t\t\ts / m[2],\n\t\t\ts / m[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v)\n\t{\n\t\treturn inverse(m) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m)\n\t{\n\t\treturn v * inverse(m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2)\n\t{\n\t\tmat<4, 4, T, Q> m1_copy(m1);\n\t\treturn m1_copy /= m2;\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2)\n\t{\n\t\treturn (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]);\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"type_mat4x4_simd.inl\"\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_mat4x4_simd.inl",
    "content": "/// @ref core\n\nnamespace glm\n{\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_quat.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_quat.hpp\n\n#pragma once\n\n// Dependency:\n#include \"../detail/type_mat3x3.hpp\"\n#include \"../detail/type_mat4x4.hpp\"\n#include \"../detail/type_vec3.hpp\"\n#include \"../detail/type_vec4.hpp\"\n#include \"../ext/vector_relational.hpp\"\n#include \"../ext/quaternion_relational.hpp\"\n#include \"../gtc/constants.hpp\"\n#include \"../gtc/matrix_transform.hpp\"\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct qua\n\t{\n\t\t// -- Implementation detail --\n\n\t\ttypedef qua<T, Q> type;\n\t\ttypedef T value_type;\n\n\t\t// -- Data --\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic push\n#\t\t\t\tpragma GCC diagnostic ignored \"-Wpedantic\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic push\n#\t\t\t\tpragma clang diagnostic ignored \"-Wgnu-anonymous-struct\"\n#\t\t\t\tpragma clang diagnostic ignored \"-Wnested-anon-types\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(push)\n#\t\t\t\tpragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union\n#\t\t\tendif\n#\t\tendif\n\n#\t\tif GLM_LANG & GLM_LANG_CXXMS_FLAG\n\t\t\tunion\n\t\t\t{\n#\t\t\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\t\t\tstruct { T x, y, z, w; };\n#\t\t\t\telse\n\t\t\t\t\tstruct { T w, x, y, z; };\n#\t\t\t\tendif\n\n\t\t\t\ttypename detail::storage<4, T, detail::is_aligned<Q>::value>::type data;\n\t\t\t};\n#\t\telse\n#\t\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\t\tT x, y, z, w;\n#\t\t\telse\n\t\t\t\tT w, x, y, z;\n#\t\t\tendif\n#\t\tendif\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(pop)\n#\t\t\tendif\n#\t\tendif\n\n\t\t// -- Component accesses --\n\n\t\ttypedef length_t length_type;\n\n\t\t/// Return the count of components of a quaternion\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;}\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const;\n\n\t\t// -- Implicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua() GLM_DEFAULT_CTOR;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua(qua<T, Q> const& q) GLM_DEFAULT;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua(qua<T, P> const& q);\n\n\t\t// -- Explicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua(T s, vec<3, T, Q> const& v);\n\n#\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua(T x, T y, T z, T w);\n#\t\telse\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua(T w, T x, T y, T z);\n#\t\tendif\n\n\t\t// -- Conversion constructors --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(qua<U, P> const& q);\n\n\t\t/// Explicit conversion operators\n#\t\tif GLM_HAS_EXPLICIT_CONVERSION_OPERATORS\n\t\t\tGLM_FUNC_DECL explicit operator mat<3, 3, T, Q>() const;\n\t\t\tGLM_FUNC_DECL explicit operator mat<4, 4, T, Q>() const;\n#\t\tendif\n\n\t\t/// Create a quaternion from two normalized axis\n\t\t///\n\t\t/// @param u A first normalized axis\n\t\t/// @param v A second normalized axis\n\t\t/// @see gtc_quaternion\n\t\t/// @see http://lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors\n\t\tGLM_FUNC_DECL qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v);\n\n\t\t/// Build a quaternion from euler angles (pitch, yaw, roll), in radians.\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(vec<3, T, Q> const& eulerAngles);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT qua(mat<3, 3, T, Q> const& q);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT qua(mat<4, 4, T, Q> const& q);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator=(qua<T, Q> const& q) GLM_DEFAULT;\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator=(qua<U, Q> const& q);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator+=(qua<U, Q> const& q);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator-=(qua<U, Q> const& q);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator*=(qua<U, Q> const& q);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q>& operator/=(U s);\n\t};\n\n\t// -- Unary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator+(qua<T, Q> const& q);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator-(qua<T, Q> const& q);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator+(qua<T, Q> const& q, qua<T, Q> const& p);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator-(qua<T, Q> const& q, qua<T, Q> const& p);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator*(qua<T, Q> const& q, qua<T, Q> const& p);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(qua<T, Q> const& q, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua<T, Q> const& q);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(qua<T, Q> const& q, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua<T, Q> const& q);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator*(qua<T, Q> const& q, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator*(T const& s, qua<T, Q> const& q);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> operator/(qua<T, Q> const& q, T const& s);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator==(qua<T, Q> const& q1, qua<T, Q> const& q2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(qua<T, Q> const& q1, qua<T, Q> const& q2);\n} //namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_quat.inl\"\n#endif//GLM_EXTERNAL_TEMPLATE\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_quat.inl",
    "content": "#include \"../trigonometric.hpp\"\n#include \"../exponential.hpp\"\n#include \"../ext/quaternion_common.hpp\"\n#include \"../ext/quaternion_geometric.hpp\"\n#include <limits>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate <typename T>\n\tstruct genTypeTrait<qua<T> >\n\t{\n\t\tstatic const genTypeEnum GENTYPE = GENTYPE_QUAT;\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_dot<qua<T, Q>, T, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(qua<T, Q> const& a, qua<T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> tmp(a.w * b.w, a.x * b.x, a.y * b.y, a.z * b.z);\n\t\t\treturn (tmp.x + tmp.y) + (tmp.z + tmp.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_quat_add\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua<T, Q> call(qua<T, Q> const& q, qua<T, Q> const& p)\n\t\t{\n\t\t\treturn qua<T, Q>(q.w + p.w, q.x + p.x, q.y + p.y, q.z + p.z);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_quat_sub\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua<T, Q> call(qua<T, Q> const& q, qua<T, Q> const& p)\n\t\t{\n\t\t\treturn qua<T, Q>(q.w - p.w, q.x - p.x, q.y - p.y, q.z - p.z);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_quat_mul_scalar\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua<T, Q> call(qua<T, Q> const& q, T s)\n\t\t{\n\t\t\treturn qua<T, Q>(q.w * s, q.x * s, q.y * s, q.z * s);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_quat_div_scalar\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua<T, Q> call(qua<T, Q> const& q, T s)\n\t\t{\n\t\t\treturn qua<T, Q>(q.w / s, q.x / s, q.y / s, q.z / s);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_quat_mul_vec4\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(qua<T, Q> const& q, vec<4, T, Q> const& v)\n\t\t{\n\t\t\treturn vec<4, T, Q>(q * vec<3, T, Q>(v), v.w);\n\t\t}\n\t};\n}//namespace detail\n\n\t// -- Component accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T & qua<T, Q>::operator[](typename qua<T, Q>::length_type i)\n\t{\n\t\tassert(i >= 0 && i < this->length());\n#\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\treturn (&x)[i];\n#\t\telse\n\t\t\treturn (&w)[i];\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& qua<T, Q>::operator[](typename qua<T, Q>::length_type i) const\n\t{\n\t\tassert(i >= 0 && i < this->length());\n#\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\treturn (&x)[i];\n#\t\telse\n\t\t\treturn (&w)[i];\n#\t\tendif\n\t}\n\n\t// -- Implicit basic constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua()\n#\t\t\tif GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE\n#\t\t\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\t\t\t: x(0), y(0), z(0), w(1)\n#\t\t\t\telse\n\t\t\t\t\t: w(1), x(0), y(0), z(0)\n#\t\t\t\tendif\n#\t\t\tendif\n\t\t{}\n#\tendif\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(qua<T, Q> const& q)\n#\t\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\t\t: x(q.x), y(q.y), z(q.z), w(q.w)\n#\t\t\telse\n\t\t\t\t: w(q.w), x(q.x), y(q.y), z(q.z)\n#\t\t\tendif\n\t\t{}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(qua<T, P> const& q)\n#\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\t: x(q.x), y(q.y), z(q.z), w(q.w)\n#\t\telse\n\t\t\t: w(q.w), x(q.x), y(q.y), z(q.z)\n#\t\tendif\n\t{}\n\n\t// -- Explicit basic constructors --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(T s, vec<3, T, Q> const& v)\n#\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\t: x(v.x), y(v.y), z(v.z), w(s)\n#\t\telse\n\t\t\t: w(s), x(v.x), y(v.y), z(v.z)\n#\t\tendif\n\t{}\n\n\ttemplate <typename T, qualifier Q>\n#\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(T _x, T _y, T _z, T _w)\n\t\t\t: x(_x), y(_y), z(_z), w(_w)\n#\telse\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(T _w, T _x, T _y, T _z)\n\t\t\t: w(_w), x(_x), y(_y), z(_z)\n#\tendif\n\t{}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(qua<U, P> const& q)\n#\t\tifdef GLM_FORCE_QUAT_DATA_XYZW\n\t\t\t: x(static_cast<T>(q.x)), y(static_cast<T>(q.y)), z(static_cast<T>(q.z)), w(static_cast<T>(q.w))\n#\t\telse\n\t\t\t: w(static_cast<T>(q.w)), x(static_cast<T>(q.x)), y(static_cast<T>(q.y)), z(static_cast<T>(q.z))\n#\t\tendif\n\t{}\n\n\t//template<typename valType>\n\t//GLM_FUNC_QUALIFIER qua<valType>::qua\n\t//(\n\t//\tvalType const& pitch,\n\t//\tvalType const& yaw,\n\t//\tvalType const& roll\n\t//)\n\t//{\n\t//\tvec<3, valType> eulerAngle(pitch * valType(0.5), yaw * valType(0.5), roll * valType(0.5));\n\t//\tvec<3, valType> c = glm::cos(eulerAngle * valType(0.5));\n\t//\tvec<3, valType> s = glm::sin(eulerAngle * valType(0.5));\n\t//\n\t//\tthis->w = c.x * c.y * c.z + s.x * s.y * s.z;\n\t//\tthis->x = s.x * c.y * c.z - c.x * s.y * s.z;\n\t//\tthis->y = c.x * s.y * c.z + s.x * c.y * s.z;\n\t//\tthis->z = c.x * c.y * s.z - s.x * s.y * c.z;\n\t//}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q>::qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v)\n\t{\n\t\tT norm_u_norm_v = sqrt(dot(u, u) * dot(v, v));\n\t\tT real_part = norm_u_norm_v + dot(u, v);\n\t\tvec<3, T, Q> t;\n\n\t\tif(real_part < static_cast<T>(1.e-6f) * norm_u_norm_v)\n\t\t{\n\t\t\t// If u and v are exactly opposite, rotate 180 degrees\n\t\t\t// around an arbitrary orthogonal axis. Axis normalisation\n\t\t\t// can happen later, when we normalise the quaternion.\n\t\t\treal_part = static_cast<T>(0);\n\t\t\tt = abs(u.x) > abs(u.z) ? vec<3, T, Q>(-u.y, u.x, static_cast<T>(0)) : vec<3, T, Q>(static_cast<T>(0), -u.z, u.y);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Otherwise, build quaternion the standard way.\n\t\t\tt = cross(u, v);\n\t\t}\n\n\t\t*this = normalize(qua<T, Q>(real_part, t.x, t.y, t.z));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q>::qua(vec<3, T, Q> const& eulerAngle)\n\t{\n\t\tvec<3, T, Q> c = glm::cos(eulerAngle * T(0.5));\n\t\tvec<3, T, Q> s = glm::sin(eulerAngle * T(0.5));\n\n\t\tthis->w = c.x * c.y * c.z + s.x * s.y * s.z;\n\t\tthis->x = s.x * c.y * c.z - c.x * s.y * s.z;\n\t\tthis->y = c.x * s.y * c.z + s.x * c.y * s.z;\n\t\tthis->z = c.x * c.y * s.z - s.x * s.y * c.z;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q>::qua(mat<3, 3, T, Q> const& m)\n\t{\n\t\t*this = quat_cast(m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q>::qua(mat<4, 4, T, Q> const& m)\n\t{\n\t\t*this = quat_cast(m);\n\t}\n\n#\tif GLM_HAS_EXPLICIT_CONVERSION_OPERATORS\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q>::operator mat<3, 3, T, Q>() const\n\t{\n\t\treturn mat3_cast(*this);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q>::operator mat<4, 4, T, Q>() const\n\t{\n\t\treturn mat4_cast(*this);\n\t}\n#\tendif//GLM_HAS_EXPLICIT_CONVERSION_OPERATORS\n\n\t// -- Unary arithmetic operators --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator=(qua<T, Q> const& q)\n\t\t{\n\t\t\tthis->w = q.w;\n\t\t\tthis->x = q.x;\n\t\t\tthis->y = q.y;\n\t\t\tthis->z = q.z;\n\t\t\treturn *this;\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator=(qua<U, Q> const& q)\n\t{\n\t\tthis->w = static_cast<T>(q.w);\n\t\tthis->x = static_cast<T>(q.x);\n\t\tthis->y = static_cast<T>(q.y);\n\t\tthis->z = static_cast<T>(q.z);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator+=(qua<U, Q> const& q)\n\t{\n\t\treturn (*this = detail::compute_quat_add<T, Q, detail::is_aligned<Q>::value>::call(*this, qua<T, Q>(q)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator-=(qua<U, Q> const& q)\n\t{\n\t\treturn (*this = detail::compute_quat_sub<T, Q, detail::is_aligned<Q>::value>::call(*this, qua<T, Q>(q)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator*=(qua<U, Q> const& r)\n\t{\n\t\tqua<T, Q> const p(*this);\n\t\tqua<T, Q> const q(r);\n\n\t\tthis->w = p.w * q.w - p.x * q.x - p.y * q.y - p.z * q.z;\n\t\tthis->x = p.w * q.x + p.x * q.w + p.y * q.z - p.z * q.y;\n\t\tthis->y = p.w * q.y + p.y * q.w + p.z * q.x - p.x * q.z;\n\t\tthis->z = p.w * q.z + p.z * q.w + p.x * q.y - p.y * q.x;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator*=(U s)\n\t{\n\t\treturn (*this = detail::compute_quat_mul_scalar<T, Q, detail::is_aligned<Q>::value>::call(*this, static_cast<U>(s)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> & qua<T, Q>::operator/=(U s)\n\t{\n\t\treturn (*this = detail::compute_quat_div_scalar<T, Q, detail::is_aligned<Q>::value>::call(*this, static_cast<U>(s)));\n\t}\n\n\t// -- Unary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator+(qua<T, Q> const& q)\n\t{\n\t\treturn q;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator-(qua<T, Q> const& q)\n\t{\n\t\treturn qua<T, Q>(-q.w, -q.x, -q.y, -q.z);\n\t}\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator+(qua<T, Q> const& q, qua<T, Q> const& p)\n\t{\n\t\treturn qua<T, Q>(q) += p;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator-(qua<T, Q> const& q, qua<T, Q> const& p)\n\t{\n\t\treturn qua<T, Q>(q) -= p;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator*(qua<T, Q> const& q, qua<T, Q> const& p)\n\t{\n\t\treturn qua<T, Q>(q) *= p;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(qua<T, Q> const& q, vec<3, T, Q> const& v)\n\t{\n\t\tvec<3, T, Q> const QuatVector(q.x, q.y, q.z);\n\t\tvec<3, T, Q> const uv(glm::cross(QuatVector, v));\n\t\tvec<3, T, Q> const uuv(glm::cross(QuatVector, uv));\n\n\t\treturn v + ((uv * q.w) + uuv) * static_cast<T>(2);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua<T, Q> const& q)\n\t{\n\t\treturn glm::inverse(q) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(qua<T, Q> const& q, vec<4, T, Q> const& v)\n\t{\n\t\treturn detail::compute_quat_mul_vec4<T, Q, detail::is_aligned<Q>::value>::call(q, v);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua<T, Q> const& q)\n\t{\n\t\treturn glm::inverse(q) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator*(qua<T, Q> const& q, T const& s)\n\t{\n\t\treturn qua<T, Q>(\n\t\t\tq.w * s, q.x * s, q.y * s, q.z * s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator*(T const& s, qua<T, Q> const& q)\n\t{\n\t\treturn q * s;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> operator/(qua<T, Q> const& q, T const& s)\n\t{\n\t\treturn qua<T, Q>(\n\t\t\tq.w / s, q.x / s, q.y / s, q.z / s);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(qua<T, Q> const& q1, qua<T, Q> const& q2)\n\t{\n\t\treturn q1.x == q2.x && q1.y == q2.y && q1.z == q2.z && q1.w == q2.w;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(qua<T, Q> const& q1, qua<T, Q> const& q2)\n\t{\n\t\treturn q1.x != q2.x || q1.y != q2.y || q1.z != q2.z || q1.w != q2.w;\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"type_quat_simd.inl\"\n#endif\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_quat_simd.inl",
    "content": "/// @ref core\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nnamespace glm{\nnamespace detail\n{\n/*\n\ttemplate<qualifier Q>\n\tstruct compute_quat_mul<float, Q, true>\n\t{\n\t\tstatic qua<float, Q> call(qua<float, Q> const& q1, qua<float, Q> const& q2)\n\t\t{\n\t\t\t// SSE2 STATS: 11 shuffle, 8 mul, 8 add\n\t\t\t// SSE4 STATS: 3 shuffle, 4 mul, 4 dpps\n\n\t\t\t__m128 const mul0 = _mm_mul_ps(q1.data, _mm_shuffle_ps(q2.data, q2.data, _MM_SHUFFLE(0, 1, 2, 3)));\n\t\t\t__m128 const mul1 = _mm_mul_ps(q1.data, _mm_shuffle_ps(q2.data, q2.data, _MM_SHUFFLE(1, 0, 3, 2)));\n\t\t\t__m128 const mul2 = _mm_mul_ps(q1.data, _mm_shuffle_ps(q2.data, q2.data, _MM_SHUFFLE(2, 3, 0, 1)));\n\t\t\t__m128 const mul3 = _mm_mul_ps(q1.data, q2.data);\n\n#\t\t\tif GLM_ARCH & GLM_ARCH_SSE41_BIT\n\t\t\t\t__m128 const add0 = _mm_dp_ps(mul0, _mm_set_ps(1.0f, -1.0f,  1.0f,  1.0f), 0xff);\n\t\t\t\t__m128 const add1 = _mm_dp_ps(mul1, _mm_set_ps(1.0f,  1.0f,  1.0f, -1.0f), 0xff);\n\t\t\t\t__m128 const add2 = _mm_dp_ps(mul2, _mm_set_ps(1.0f,  1.0f, -1.0f,  1.0f), 0xff);\n\t\t\t\t__m128 const add3 = _mm_dp_ps(mul3, _mm_set_ps(1.0f, -1.0f, -1.0f, -1.0f), 0xff);\n#\t\t\telse\n\t\t\t\t__m128 const mul4 = _mm_mul_ps(mul0, _mm_set_ps(1.0f, -1.0f,  1.0f,  1.0f));\n\t\t\t\t__m128 const add0 = _mm_add_ps(mul0, _mm_movehl_ps(mul4, mul4));\n\t\t\t\t__m128 const add4 = _mm_add_ss(add0, _mm_shuffle_ps(add0, add0, 1));\n\n\t\t\t\t__m128 const mul5 = _mm_mul_ps(mul1, _mm_set_ps(1.0f,  1.0f,  1.0f, -1.0f));\n\t\t\t\t__m128 const add1 = _mm_add_ps(mul1, _mm_movehl_ps(mul5, mul5));\n\t\t\t\t__m128 const add5 = _mm_add_ss(add1, _mm_shuffle_ps(add1, add1, 1));\n\n\t\t\t\t__m128 const mul6 = _mm_mul_ps(mul2, _mm_set_ps(1.0f,  1.0f, -1.0f,  1.0f));\n\t\t\t\t__m128 const add2 = _mm_add_ps(mul6, _mm_movehl_ps(mul6, mul6));\n\t\t\t\t__m128 const add6 = _mm_add_ss(add2, _mm_shuffle_ps(add2, add2, 1));\n\n\t\t\t\t__m128 const mul7 = _mm_mul_ps(mul3, _mm_set_ps(1.0f, -1.0f, -1.0f, -1.0f));\n\t\t\t\t__m128 const add3 = _mm_add_ps(mul3, _mm_movehl_ps(mul7, mul7));\n\t\t\t\t__m128 const add7 = _mm_add_ss(add3, _mm_shuffle_ps(add3, add3, 1));\n\t\t#endif\n\n\t\t\t// This SIMD code is a politically correct way of doing this, but in every test I've tried it has been slower than\n\t\t\t// the final code below. I'll keep this here for reference - maybe somebody else can do something better...\n\t\t\t//\n\t\t\t//__m128 xxyy = _mm_shuffle_ps(add4, add5, _MM_SHUFFLE(0, 0, 0, 0));\n\t\t\t//__m128 zzww = _mm_shuffle_ps(add6, add7, _MM_SHUFFLE(0, 0, 0, 0));\n\t\t\t//\n\t\t\t//return _mm_shuffle_ps(xxyy, zzww, _MM_SHUFFLE(2, 0, 2, 0));\n\n\t\t\tqua<float, Q> Result;\n\t\t\t_mm_store_ss(&Result.x, add4);\n\t\t\t_mm_store_ss(&Result.y, add5);\n\t\t\t_mm_store_ss(&Result.z, add6);\n\t\t\t_mm_store_ss(&Result.w, add7);\n\t\t\treturn Result;\n\t\t}\n\t};\n*/\n\n\ttemplate<qualifier Q>\n\tstruct compute_quat_add<float, Q, true>\n\t{\n\t\tstatic qua<float, Q> call(qua<float, Q> const& q, qua<float, Q> const& p)\n\t\t{\n\t\t\tqua<float, Q> Result;\n\t\t\tResult.data = _mm_add_ps(q.data, p.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_quat_add<double, Q, true>\n\t{\n\t\tstatic qua<double, Q> call(qua<double, Q> const& a, qua<double, Q> const& b)\n\t\t{\n\t\t\tqua<double, Q> Result;\n\t\t\tResult.data = _mm256_add_pd(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_quat_sub<float, Q, true>\n\t{\n\t\tstatic qua<float, Q> call(qua<float, Q> const& q, qua<float, Q> const& p)\n\t\t{\n\t\t\tqua<float, Q> Result;\n\t\t\tResult.data = _mm_sub_ps(q.data, p.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_quat_sub<double, Q, true>\n\t{\n\t\tstatic qua<double, Q> call(qua<double, Q> const& a, qua<double, Q> const& b)\n\t\t{\n\t\t\tqua<double, Q> Result;\n\t\t\tResult.data = _mm256_sub_pd(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_quat_mul_scalar<float, Q, true>\n\t{\n\t\tstatic qua<float, Q> call(qua<float, Q> const& q, float s)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_mul_ps(q.data, _mm_set_ps1(s));\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_quat_mul_scalar<double, Q, true>\n\t{\n\t\tstatic qua<double, Q> call(qua<double, Q> const& q, double s)\n\t\t{\n\t\t\tqua<double, Q> Result;\n\t\t\tResult.data = _mm256_mul_pd(q.data, _mm_set_ps1(s));\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_quat_div_scalar<float, Q, true>\n\t{\n\t\tstatic qua<float, Q> call(qua<float, Q> const& q, float s)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_div_ps(q.data, _mm_set_ps1(s));\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_quat_div_scalar<double, Q, true>\n\t{\n\t\tstatic qua<double, Q> call(qua<double, Q> const& q, double s)\n\t\t{\n\t\t\tqua<double, Q> Result;\n\t\t\tResult.data = _mm256_div_pd(q.data, _mm_set_ps1(s));\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_quat_mul_vec4<float, Q, true>\n\t{\n\t\tstatic vec<4, float, Q> call(qua<float, Q> const& q, vec<4, float, Q> const& v)\n\t\t{\n\t\t\t__m128 const q_wwww = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 3, 3, 3));\n\t\t\t__m128 const q_swp0 = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 0, 2, 1));\n\t\t\t__m128 const q_swp1 = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 1, 0, 2));\n\t\t\t__m128 const v_swp0 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 0, 2, 1));\n\t\t\t__m128 const v_swp1 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 1, 0, 2));\n\n\t\t\t__m128 uv      = _mm_sub_ps(_mm_mul_ps(q_swp0, v_swp1), _mm_mul_ps(q_swp1, v_swp0));\n\t\t\t__m128 uv_swp0 = _mm_shuffle_ps(uv, uv, _MM_SHUFFLE(3, 0, 2, 1));\n\t\t\t__m128 uv_swp1 = _mm_shuffle_ps(uv, uv, _MM_SHUFFLE(3, 1, 0, 2));\n\t\t\t__m128 uuv     = _mm_sub_ps(_mm_mul_ps(q_swp0, uv_swp1), _mm_mul_ps(q_swp1, uv_swp0));\n\n\t\t\t__m128 const two = _mm_set1_ps(2.0f);\n\t\t\tuv  = _mm_mul_ps(uv, _mm_mul_ps(q_wwww, two));\n\t\t\tuuv = _mm_mul_ps(uuv, two);\n\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_add_ps(v.data, _mm_add_ps(uv, uuv));\n\t\t\treturn Result;\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_vec1.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_vec1.hpp\n\n#pragma once\n\n#include \"qualifier.hpp\"\n#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n#\tinclude \"_swizzle.hpp\"\n#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n#\tinclude \"_swizzle_func.hpp\"\n#endif\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct vec<1, T, Q>\n\t{\n\t\t// -- Implementation detail --\n\n\t\ttypedef T value_type;\n\t\ttypedef vec<1, T, Q> type;\n\t\ttypedef vec<1, bool, Q> bool_type;\n\n\t\t// -- Data --\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic push\n#\t\t\t\tpragma GCC diagnostic ignored \"-Wpedantic\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic push\n#\t\t\t\tpragma clang diagnostic ignored \"-Wgnu-anonymous-struct\"\n#\t\t\t\tpragma clang diagnostic ignored \"-Wnested-anon-types\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(push)\n#\t\t\t\tpragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union\n#\t\t\tendif\n#\t\tendif\n\n#\t\tif GLM_CONFIG_XYZW_ONLY\n\t\t\tT x;\n#\t\telif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE\n\t\t\tunion\n\t\t\t{\n\t\t\t\tT x;\n\t\t\t\tT r;\n\t\t\t\tT s;\n\n\t\t\t\ttypename detail::storage<1, T, detail::is_aligned<Q>::value>::type data;\n/*\n#\t\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t\t\t\t\t_GLM_SWIZZLE1_2_MEMBERS(T, Q, x)\n\t\t\t\t\t_GLM_SWIZZLE1_2_MEMBERS(T, Q, r)\n\t\t\t\t\t_GLM_SWIZZLE1_2_MEMBERS(T, Q, s)\n\t\t\t\t\t_GLM_SWIZZLE1_3_MEMBERS(T, Q, x)\n\t\t\t\t\t_GLM_SWIZZLE1_3_MEMBERS(T, Q, r)\n\t\t\t\t\t_GLM_SWIZZLE1_3_MEMBERS(T, Q, s)\n\t\t\t\t\t_GLM_SWIZZLE1_4_MEMBERS(T, Q, x)\n\t\t\t\t\t_GLM_SWIZZLE1_4_MEMBERS(T, Q, r)\n\t\t\t\t\t_GLM_SWIZZLE1_4_MEMBERS(T, Q, s)\n#\t\t\t\tendif\n*/\n\t\t\t};\n#\t\telse\n\t\t\tunion {T x, r, s;};\n/*\n#\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t\t\t\tGLM_SWIZZLE_GEN_VEC_FROM_VEC1(T, Q)\n#\t\t\tendif\n*/\n#\t\tendif\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(pop)\n#\t\t\tendif\n#\t\tendif\n\n\t\t// -- Component accesses --\n\n\t\t/// Return the count of components of the vector\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 1;}\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const;\n\n\t\t// -- Implicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT_CTOR;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, T, P> const& v);\n\n\t\t// -- Explicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);\n\n\t\t// -- Conversion vector constructors --\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v);\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<1, U, P> const& v);\n\n\t\t// -- Swizzle constructors --\n/*\n#\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t\t\ttemplate<int E0>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<1, T, Q, E0, -1,-2,-3> const& that)\n\t\t\t{\n\t\t\t\t*this = that();\n\t\t\t}\n#\t\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n*/\n\t\t// -- Unary arithmetic operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec const& v) GLM_DEFAULT;\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(vec<1, U, Q> const& v);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator++();\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator--();\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator--(int);\n\n\t\t// -- Unary bit operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(vec<1, U, Q> const& v);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2);\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_vec1.inl\"\n#endif//GLM_EXTERNAL_TEMPLATE\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_vec1.inl",
    "content": "/// @ref core\n\n#include \"./compute_vector_relational.hpp\"\n\nnamespace glm\n{\n\t// -- Implicit basic constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec()\n#\t\t\tif GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE\n\t\t\t\t: x(0)\n#\t\t\tendif\n\t\t{}\n#\tendif\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, Q> const& v)\n\t\t\t: x(v.x)\n\t\t{}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, P> const& v)\n\t\t: x(v.x)\n\t{}\n\n\t// -- Explicit basic constructors --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(T scalar)\n\t\t: x(scalar)\n\t{}\n\n\t// -- Conversion vector constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<2, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<3, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<4, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t{}\n\n\t// -- Component accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type)\n\t{\n\t\treturn x;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type) const\n\t{\n\t\treturn x;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, T, Q> const& v)\n\t\t{\n\t\t\tthis->x = v.x;\n\t\t\treturn *this;\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x = static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(U scalar)\n\t{\n\t\tthis->x += static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x += static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(U scalar)\n\t{\n\t\tthis->x -= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x -= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(U scalar)\n\t{\n\t\tthis->x *= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x *= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(U scalar)\n\t{\n\t\tthis->x /= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x /= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator++()\n\t{\n\t\t++this->x;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator--()\n\t{\n\t\t--this->x;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator++(int)\n\t{\n\t\tvec<1, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator--(int)\n\t{\n\t\tvec<1, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(U scalar)\n\t{\n\t\tthis->x %= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x %= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(U scalar)\n\t{\n\t\tthis->x &= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x &= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(U scalar)\n\t{\n\t\tthis->x |= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x |= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(U scalar)\n\t{\n\t\tthis->x ^= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x ^= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(U scalar)\n\t{\n\t\tthis->x <<= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x <<= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(U scalar)\n\t{\n\t\tthis->x >>= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x >>= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\t// -- Unary constant operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v)\n\t{\n\t\treturn v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\t-v.x);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv.x + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tscalar + v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv1.x + v2.x);\n\t}\n\n\t//operator-\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv.x - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tscalar - v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv1.x - v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv.x * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tscalar * v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv1.x * v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv.x / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tscalar / v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv1.x / v2.x);\n\t}\n\n\t// -- Binary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv.x % scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tscalar % v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv1.x % v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv.x & scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tscalar & v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv1.x & v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv.x | scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tscalar | v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv1.x | v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv.x ^ scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tscalar ^ v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tv1.x ^ v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tstatic_cast<T>(v.x << scalar));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tstatic_cast<T>(scalar << v.x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tstatic_cast<T>(v1.x << v2.x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tstatic_cast<T>(v.x >> scalar));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tstatic_cast<T>(scalar >> v.x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\tstatic_cast<T>(v1.x >> v2.x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(\n\t\t\t~v.x);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.x, v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn !(v1 == v2);\n\t}\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2)\n\t{\n\t\treturn vec<1, bool, Q>(v1.x && v2.x);\n\t}\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2)\n\t{\n\t\treturn vec<1, bool, Q>(v1.x || v2.x);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_vec2.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_vec2.hpp\n\n#pragma once\n\n#include \"qualifier.hpp\"\n#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n#\tinclude \"_swizzle.hpp\"\n#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n#\tinclude \"_swizzle_func.hpp\"\n#endif\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct vec<2, T, Q>\n\t{\n\t\t// -- Implementation detail --\n\n\t\ttypedef T value_type;\n\t\ttypedef vec<2, T, Q> type;\n\t\ttypedef vec<2, bool, Q> bool_type;\n\n\t\t// -- Data --\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic push\n#\t\t\t\tpragma GCC diagnostic ignored \"-Wpedantic\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic push\n#\t\t\t\tpragma clang diagnostic ignored \"-Wgnu-anonymous-struct\"\n#\t\t\t\tpragma clang diagnostic ignored \"-Wnested-anon-types\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(push)\n#\t\t\t\tpragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union\n#\t\t\tendif\n#\t\tendif\n\n#\t\tif GLM_CONFIG_XYZW_ONLY\n\t\t\tT x, y;\n#\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t\t\tGLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, Q, x, y)\n#\t\t\tendif//GLM_CONFIG_SWIZZLE\n#\t\telif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE\n\t\t\tunion\n\t\t\t{\n\t\t\t\tstruct{ T x, y; };\n\t\t\t\tstruct{ T r, g; };\n\t\t\t\tstruct{ T s, t; };\n\n\t\t\t\ttypename detail::storage<2, T, detail::is_aligned<Q>::value>::type data;\n\n#\t\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t\t\t\t\tGLM_SWIZZLE2_2_MEMBERS(T, Q, x, y)\n\t\t\t\t\tGLM_SWIZZLE2_2_MEMBERS(T, Q, r, g)\n\t\t\t\t\tGLM_SWIZZLE2_2_MEMBERS(T, Q, s, t)\n\t\t\t\t\tGLM_SWIZZLE2_3_MEMBERS(T, Q, x, y)\n\t\t\t\t\tGLM_SWIZZLE2_3_MEMBERS(T, Q, r, g)\n\t\t\t\t\tGLM_SWIZZLE2_3_MEMBERS(T, Q, s, t)\n\t\t\t\t\tGLM_SWIZZLE2_4_MEMBERS(T, Q, x, y)\n\t\t\t\t\tGLM_SWIZZLE2_4_MEMBERS(T, Q, r, g)\n\t\t\t\t\tGLM_SWIZZLE2_4_MEMBERS(T, Q, s, t)\n#\t\t\t\tendif\n\t\t\t};\n#\t\telse\n\t\t\tunion {T x, r, s;};\n\t\t\tunion {T y, g, t;};\n\n#\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t\t\t\tGLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, Q)\n#\t\t\tendif//GLM_CONFIG_SWIZZLE\n#\t\tendif\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(pop)\n#\t\t\tendif\n#\t\tendif\n\n\t\t// -- Component accesses --\n\n\t\t/// Return the count of components of the vector\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;}\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T& operator[](length_type i);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const;\n\n\t\t// -- Implicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT_CTOR;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, T, P> const& v);\n\n\t\t// -- Explicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y);\n\n\t\t// -- Conversion constructors --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v);\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(A x, B y);\n\t\ttemplate<typename A, typename B>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, B y);\n\t\ttemplate<typename A, typename B>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(A x, vec<1, B, Q> const& y);\n\t\ttemplate<typename A, typename B>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, vec<1, B, Q> const& y);\n\n\t\t// -- Conversion vector constructors --\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v);\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v);\n\n\t\t// -- Swizzle constructors --\n#\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t\t\ttemplate<int E0, int E1>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1,-1,-2> const& that)\n\t\t\t{\n\t\t\t\t*this = that();\n\t\t\t}\n#\t\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n\t\t// -- Unary arithmetic operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec const& v) GLM_DEFAULT;\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<2, U, Q> const& v);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator++();\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator--();\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator--(int);\n\n\t\t// -- Unary bit operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<2, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<2, U, Q> const& v);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2);\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2);\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_vec2.inl\"\n#endif//GLM_EXTERNAL_TEMPLATE\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_vec2.inl",
    "content": "/// @ref core\n\n#include \"./compute_vector_relational.hpp\"\n\nnamespace glm\n{\n\t// -- Implicit basic constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec()\n#\t\t\tif GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE\n\t\t\t\t: x(0), y(0)\n#\t\t\tendif\n\t\t{}\n#\tendif\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, Q> const& v)\n\t\t\t: x(v.x), y(v.y)\n\t\t{}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, P> const& v)\n\t\t: x(v.x), y(v.y)\n\t{}\n\n\t// -- Explicit basic constructors --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T scalar)\n\t\t: x(scalar), y(scalar)\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T _x, T _y)\n\t\t: x(_x), y(_y)\n\t{}\n\n\t// -- Conversion scalar constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, B _y)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, B _y)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, vec<1, B, Q> const& _y)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, vec<1, B, Q> const& _y)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y.x))\n\t{}\n\n\t// -- Conversion vector constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<3, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<4, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.y))\n\t{}\n\n\t// -- Component accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i)\n\t{\n\t\tassert(i >= 0 && i < this->length());\n\t\tswitch(i)\n\t\t{\n\t\tdefault:\n\t\tcase 0:\n\t\t\treturn x;\n\t\tcase 1:\n\t\t\treturn y;\n\t\t}\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) const\n\t{\n\t\tassert(i >= 0 && i < this->length());\n\t\tswitch(i)\n\t\t{\n\t\tdefault:\n\t\tcase 0:\n\t\t\treturn x;\n\t\tcase 1:\n\t\t\treturn y;\n\t\t}\n\t}\n\n\t// -- Unary arithmetic operators --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, T, Q> const& v)\n\t\t{\n\t\t\tthis->x = v.x;\n\t\t\tthis->y = v.y;\n\t\t\treturn *this;\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x = static_cast<T>(v.x);\n\t\tthis->y = static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(U scalar)\n\t{\n\t\tthis->x += static_cast<T>(scalar);\n\t\tthis->y += static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x += static_cast<T>(v.x);\n\t\tthis->y += static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x += static_cast<T>(v.x);\n\t\tthis->y += static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(U scalar)\n\t{\n\t\tthis->x -= static_cast<T>(scalar);\n\t\tthis->y -= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x -= static_cast<T>(v.x);\n\t\tthis->y -= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x -= static_cast<T>(v.x);\n\t\tthis->y -= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(U scalar)\n\t{\n\t\tthis->x *= static_cast<T>(scalar);\n\t\tthis->y *= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x *= static_cast<T>(v.x);\n\t\tthis->y *= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x *= static_cast<T>(v.x);\n\t\tthis->y *= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(U scalar)\n\t{\n\t\tthis->x /= static_cast<T>(scalar);\n\t\tthis->y /= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x /= static_cast<T>(v.x);\n\t\tthis->y /= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x /= static_cast<T>(v.x);\n\t\tthis->y /= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator++()\n\t{\n\t\t++this->x;\n\t\t++this->y;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator--()\n\t{\n\t\t--this->x;\n\t\t--this->y;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator++(int)\n\t{\n\t\tvec<2, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator--(int)\n\t{\n\t\tvec<2, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(U scalar)\n\t{\n\t\tthis->x %= static_cast<T>(scalar);\n\t\tthis->y %= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x %= static_cast<T>(v.x);\n\t\tthis->y %= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x %= static_cast<T>(v.x);\n\t\tthis->y %= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(U scalar)\n\t{\n\t\tthis->x &= static_cast<T>(scalar);\n\t\tthis->y &= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x &= static_cast<T>(v.x);\n\t\tthis->y &= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x &= static_cast<T>(v.x);\n\t\tthis->y &= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(U scalar)\n\t{\n\t\tthis->x |= static_cast<T>(scalar);\n\t\tthis->y |= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x |= static_cast<T>(v.x);\n\t\tthis->y |= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x |= static_cast<T>(v.x);\n\t\tthis->y |= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(U scalar)\n\t{\n\t\tthis->x ^= static_cast<T>(scalar);\n\t\tthis->y ^= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x ^= static_cast<T>(v.x);\n\t\tthis->y ^= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x ^= static_cast<T>(v.x);\n\t\tthis->y ^= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(U scalar)\n\t{\n\t\tthis->x <<= static_cast<T>(scalar);\n\t\tthis->y <<= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x <<= static_cast<T>(v.x);\n\t\tthis->y <<= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x <<= static_cast<T>(v.x);\n\t\tthis->y <<= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(U scalar)\n\t{\n\t\tthis->x >>= static_cast<T>(scalar);\n\t\tthis->y >>= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x >>= static_cast<T>(v.x);\n\t\tthis->y >>= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<2, U, Q> const& v)\n\t{\n\t\tthis->x >>= static_cast<T>(v.x);\n\t\tthis->y >>= static_cast<T>(v.y);\n\t\treturn *this;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v)\n\t{\n\t\treturn v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\t-v.x,\n\t\t\t-v.y);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x + scalar,\n\t\t\tv.y + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x + v2.x,\n\t\t\tv1.y + v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar + v.x,\n\t\t\tscalar + v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x + v2.x,\n\t\t\tv1.x + v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x + v2.x,\n\t\t\tv1.y + v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x - scalar,\n\t\t\tv.y - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x - v2.x,\n\t\t\tv1.y - v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar - v.x,\n\t\t\tscalar - v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x - v2.x,\n\t\t\tv1.x - v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x - v2.x,\n\t\t\tv1.y - v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x * scalar,\n\t\t\tv.y * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x * v2.x,\n\t\t\tv1.y * v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar * v.x,\n\t\t\tscalar * v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x * v2.x,\n\t\t\tv1.x * v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x * v2.x,\n\t\t\tv1.y * v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x / scalar,\n\t\t\tv.y / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x / v2.x,\n\t\t\tv1.y / v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar / v.x,\n\t\t\tscalar / v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x / v2.x,\n\t\t\tv1.x / v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x / v2.x,\n\t\t\tv1.y / v2.y);\n\t}\n\n\t// -- Binary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x % scalar,\n\t\t\tv.y % scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x % v2.x,\n\t\t\tv1.y % v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar % v.x,\n\t\t\tscalar % v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x % v2.x,\n\t\t\tv1.x % v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x % v2.x,\n\t\t\tv1.y % v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x & scalar,\n\t\t\tv.y & scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x & v2.x,\n\t\t\tv1.y & v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar & v.x,\n\t\t\tscalar & v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x & v2.x,\n\t\t\tv1.x & v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x & v2.x,\n\t\t\tv1.y & v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x | scalar,\n\t\t\tv.y | scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x | v2.x,\n\t\t\tv1.y | v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar | v.x,\n\t\t\tscalar | v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x | v2.x,\n\t\t\tv1.x | v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x | v2.x,\n\t\t\tv1.y | v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x ^ scalar,\n\t\t\tv.y ^ scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x ^ v2.x,\n\t\t\tv1.y ^ v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar ^ v.x,\n\t\t\tscalar ^ v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x ^ v2.x,\n\t\t\tv1.x ^ v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x ^ v2.x,\n\t\t\tv1.y ^ v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x << scalar,\n\t\t\tv.y << scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x << v2.x,\n\t\t\tv1.y << v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar << v.x,\n\t\t\tscalar << v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x << v2.x,\n\t\t\tv1.x << v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x << v2.x,\n\t\t\tv1.y << v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv.x >> scalar,\n\t\t\tv.y >> scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x >> v2.x,\n\t\t\tv1.y >> v2.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tscalar >> v.x,\n\t\t\tscalar >> v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x >> v2.x,\n\t\t\tv1.x >> v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tv1.x >> v2.x,\n\t\t\tv1.y >> v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\t~v.x,\n\t\t\t~v.y);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn\n\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.x, v2.x) &&\n\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.y, v2.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2)\n\t{\n\t\treturn !(v1 == v2);\n\t}\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2)\n\t{\n\t\treturn vec<2, bool, Q>(v1.x && v2.x, v1.y && v2.y);\n\t}\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2)\n\t{\n\t\treturn vec<2, bool, Q>(v1.x || v2.x, v1.y || v2.y);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_vec3.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_vec3.hpp\n\n#pragma once\n\n#include \"qualifier.hpp\"\n#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n#\tinclude \"_swizzle.hpp\"\n#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n#\tinclude \"_swizzle_func.hpp\"\n#endif\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct vec<3, T, Q>\n\t{\n\t\t// -- Implementation detail --\n\n\t\ttypedef T value_type;\n\t\ttypedef vec<3, T, Q> type;\n\t\ttypedef vec<3, bool, Q> bool_type;\n\n\t\t// -- Data --\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic push\n#\t\t\t\tpragma GCC diagnostic ignored \"-Wpedantic\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic push\n#\t\t\t\tpragma clang diagnostic ignored \"-Wgnu-anonymous-struct\"\n#\t\t\t\tpragma clang diagnostic ignored \"-Wnested-anon-types\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(push)\n#\t\t\t\tpragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union\n#\t\t\t\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n#\t\t\t\t\tpragma warning(disable: 4324)  // structure was padded due to alignment specifier\n#\t\t\t\tendif\n#\t\t\tendif\n#\t\tendif\n\n#\t\tif GLM_CONFIG_XYZW_ONLY\n\t\t\tT x, y, z;\n#\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t\t\tGLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, Q, x, y, z)\n#\t\t\tendif//GLM_CONFIG_SWIZZLE\n#\t\telif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE\n\t\t\tunion\n\t\t\t{\n\t\t\t\tstruct{ T x, y, z; };\n\t\t\t\tstruct{ T r, g, b; };\n\t\t\t\tstruct{ T s, t, p; };\n\n\t\t\t\ttypename detail::storage<3, T, detail::is_aligned<Q>::value>::type data;\n\n#\t\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t\t\t\t\tGLM_SWIZZLE3_2_MEMBERS(T, Q, x, y, z)\n\t\t\t\t\tGLM_SWIZZLE3_2_MEMBERS(T, Q, r, g, b)\n\t\t\t\t\tGLM_SWIZZLE3_2_MEMBERS(T, Q, s, t, p)\n\t\t\t\t\tGLM_SWIZZLE3_3_MEMBERS(T, Q, x, y, z)\n\t\t\t\t\tGLM_SWIZZLE3_3_MEMBERS(T, Q, r, g, b)\n\t\t\t\t\tGLM_SWIZZLE3_3_MEMBERS(T, Q, s, t, p)\n\t\t\t\t\tGLM_SWIZZLE3_4_MEMBERS(T, Q, x, y, z)\n\t\t\t\t\tGLM_SWIZZLE3_4_MEMBERS(T, Q, r, g, b)\n\t\t\t\t\tGLM_SWIZZLE3_4_MEMBERS(T, Q, s, t, p)\n#\t\t\t\tendif\n\t\t\t};\n#\t\telse\n\t\t\tunion { T x, r, s; };\n\t\t\tunion { T y, g, t; };\n\t\t\tunion { T z, b, p; };\n\n#\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t\t\t\tGLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, Q)\n#\t\t\tendif//GLM_CONFIG_SWIZZLE\n#\t\tendif//GLM_LANG\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(pop)\n#\t\t\tendif\n#\t\tendif\n\n\t\t// -- Component accesses --\n\n\t\t/// Return the count of components of the vector\n\t\ttypedef length_t length_type;\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 3;}\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const;\n\n\t\t// -- Implicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT_CTOR;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, T, P> const& v);\n\n\t\t// -- Explicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(T a, T b, T c);\n\n\t\t// -- Conversion scalar constructors --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v);\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename X, typename Y, typename Z>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X x, Y y, Z z);\n\t\ttemplate<typename X, typename Y, typename Z>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z);\n\t\ttemplate<typename X, typename Y, typename Z>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z);\n\t\ttemplate<typename X, typename Y, typename Z>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z);\n\t\ttemplate<typename X, typename Y, typename Z>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z);\n\t\ttemplate<typename X, typename Y, typename Z>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z);\n\t\ttemplate<typename X, typename Y, typename Z>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z);\n\t\ttemplate<typename X, typename Y, typename Z>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z);\n\n\t\t// -- Conversion vector constructors --\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v);\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v);\n\n\t\t// -- Swizzle constructors --\n#\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t\t\ttemplate<int E0, int E1, int E2>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& that)\n\t\t\t{\n\t\t\t\t*this = that();\n\t\t\t}\n\n\t\t\ttemplate<int E0, int E1>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& scalar)\n\t\t\t{\n\t\t\t\t*this = vec(v(), scalar);\n\t\t\t}\n\n\t\t\ttemplate<int E0, int E1>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(T const& scalar, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v)\n\t\t\t{\n\t\t\t\t*this = vec(scalar, v());\n\t\t\t}\n#\t\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n\t\t// -- Unary arithmetic operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q>& operator=(vec<3, T, Q> const& v) GLM_DEFAULT;\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<3, U, Q> const& v);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator++();\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator--();\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator--(int);\n\n\t\t// -- Unary bit operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<3, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<3, U, Q> const& v);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> const& v);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2);\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2);\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_vec3.inl\"\n#endif//GLM_EXTERNAL_TEMPLATE\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_vec3.inl",
    "content": "/// @ref core\n\n#include \"compute_vector_relational.hpp\"\n\nnamespace glm\n{\n\t// -- Implicit basic constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec()\n#\t\t\tif GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE\n\t\t\t\t: x(0), y(0), z(0)\n#\t\t\tendif\n\t\t{}\n#\tendif\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, T, Q> const& v)\n\t\t\t: x(v.x), y(v.y), z(v.z)\n\t\t{}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, T, P> const& v)\n\t\t: x(v.x), y(v.y), z(v.z)\n\t{}\n\n\t// -- Explicit basic constructors --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(T scalar)\n\t\t: x(scalar), y(scalar), z(scalar)\n\t{}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(T _x, T _y, T _z)\n\t\t: x(_x), y(_y), z(_z)\n\t{}\n\n\t// -- Conversion scalar constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.x))\n\t\t, z(static_cast<T>(v.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, Y _y, Z _z)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z.x))\n\t{}\n\n\t// -- Conversion vector constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, B _z)\n\t\t: x(static_cast<T>(_xy.x))\n\t\t, y(static_cast<T>(_xy.y))\n\t\t, z(static_cast<T>(_z))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z)\n\t\t: x(static_cast<T>(_xy.x))\n\t\t, y(static_cast<T>(_xy.y))\n\t\t, z(static_cast<T>(_z.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(A _x, vec<2, B, P> const& _yz)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_yz.x))\n\t\t, z(static_cast<T>(_yz.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_yz.x))\n\t\t, z(static_cast<T>(_yz.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.y))\n\t\t, z(static_cast<T>(v.z))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<4, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.y))\n\t\t, z(static_cast<T>(v.z))\n\t{}\n\n\t// -- Component accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i)\n\t{\n\t\tassert(i >= 0 && i < this->length());\n\t\tswitch(i)\n\t\t{\n\t\tdefault:\n\t\t\tcase 0:\n\t\treturn x;\n\t\t\tcase 1:\n\t\treturn y;\n\t\t\tcase 2:\n\t\treturn z;\n\t\t}\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) const\n\t{\n\t\tassert(i >= 0 && i < this->length());\n\t\tswitch(i)\n\t\t{\n\t\tdefault:\n\t\tcase 0:\n\t\t\treturn x;\n\t\tcase 1:\n\t\t\treturn y;\n\t\tcase 2:\n\t\t\treturn z;\n\t\t}\n\t}\n\n\t// -- Unary arithmetic operators --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, T, Q> const& v)\n\t\t{\n\t\t\tthis->x = v.x;\n\t\t\tthis->y = v.y;\n\t\t\tthis->z = v.z;\n\t\t\treturn *this;\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x = static_cast<T>(v.x);\n\t\tthis->y = static_cast<T>(v.y);\n\t\tthis->z = static_cast<T>(v.z);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(U scalar)\n\t{\n\t\tthis->x += static_cast<T>(scalar);\n\t\tthis->y += static_cast<T>(scalar);\n\t\tthis->z += static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x += static_cast<T>(v.x);\n\t\tthis->y += static_cast<T>(v.x);\n\t\tthis->z += static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x += static_cast<T>(v.x);\n\t\tthis->y += static_cast<T>(v.y);\n\t\tthis->z += static_cast<T>(v.z);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(U scalar)\n\t{\n\t\tthis->x -= static_cast<T>(scalar);\n\t\tthis->y -= static_cast<T>(scalar);\n\t\tthis->z -= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x -= static_cast<T>(v.x);\n\t\tthis->y -= static_cast<T>(v.x);\n\t\tthis->z -= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x -= static_cast<T>(v.x);\n\t\tthis->y -= static_cast<T>(v.y);\n\t\tthis->z -= static_cast<T>(v.z);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(U scalar)\n\t{\n\t\tthis->x *= static_cast<T>(scalar);\n\t\tthis->y *= static_cast<T>(scalar);\n\t\tthis->z *= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x *= static_cast<T>(v.x);\n\t\tthis->y *= static_cast<T>(v.x);\n\t\tthis->z *= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x *= static_cast<T>(v.x);\n\t\tthis->y *= static_cast<T>(v.y);\n\t\tthis->z *= static_cast<T>(v.z);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(U v)\n\t{\n\t\tthis->x /= static_cast<T>(v);\n\t\tthis->y /= static_cast<T>(v);\n\t\tthis->z /= static_cast<T>(v);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x /= static_cast<T>(v.x);\n\t\tthis->y /= static_cast<T>(v.x);\n\t\tthis->z /= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x /= static_cast<T>(v.x);\n\t\tthis->y /= static_cast<T>(v.y);\n\t\tthis->z /= static_cast<T>(v.z);\n\t\treturn *this;\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator++()\n\t{\n\t\t++this->x;\n\t\t++this->y;\n\t\t++this->z;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator--()\n\t{\n\t\t--this->x;\n\t\t--this->y;\n\t\t--this->z;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> vec<3, T, Q>::operator++(int)\n\t{\n\t\tvec<3, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> vec<3, T, Q>::operator--(int)\n\t{\n\t\tvec<3, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(U scalar)\n\t{\n\t\tthis->x %= scalar;\n\t\tthis->y %= scalar;\n\t\tthis->z %= scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x %= v.x;\n\t\tthis->y %= v.x;\n\t\tthis->z %= v.x;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x %= v.x;\n\t\tthis->y %= v.y;\n\t\tthis->z %= v.z;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(U scalar)\n\t{\n\t\tthis->x &= scalar;\n\t\tthis->y &= scalar;\n\t\tthis->z &= scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x &= v.x;\n\t\tthis->y &= v.x;\n\t\tthis->z &= v.x;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x &= v.x;\n\t\tthis->y &= v.y;\n\t\tthis->z &= v.z;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(U scalar)\n\t{\n\t\tthis->x |= scalar;\n\t\tthis->y |= scalar;\n\t\tthis->z |= scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x |= v.x;\n\t\tthis->y |= v.x;\n\t\tthis->z |= v.x;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x |= v.x;\n\t\tthis->y |= v.y;\n\t\tthis->z |= v.z;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(U scalar)\n\t{\n\t\tthis->x ^= scalar;\n\t\tthis->y ^= scalar;\n\t\tthis->z ^= scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x ^= v.x;\n\t\tthis->y ^= v.x;\n\t\tthis->z ^= v.x;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x ^= v.x;\n\t\tthis->y ^= v.y;\n\t\tthis->z ^= v.z;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(U scalar)\n\t{\n\t\tthis->x <<= scalar;\n\t\tthis->y <<= scalar;\n\t\tthis->z <<= scalar;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x <<= static_cast<T>(v.x);\n\t\tthis->y <<= static_cast<T>(v.x);\n\t\tthis->z <<= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x <<= static_cast<T>(v.x);\n\t\tthis->y <<= static_cast<T>(v.y);\n\t\tthis->z <<= static_cast<T>(v.z);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(U scalar)\n\t{\n\t\tthis->x >>= static_cast<T>(scalar);\n\t\tthis->y >>= static_cast<T>(scalar);\n\t\tthis->z >>= static_cast<T>(scalar);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<1, U, Q> const& v)\n\t{\n\t\tthis->x >>= static_cast<T>(v.x);\n\t\tthis->y >>= static_cast<T>(v.x);\n\t\tthis->z >>= static_cast<T>(v.x);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<3, U, Q> const& v)\n\t{\n\t\tthis->x >>= static_cast<T>(v.x);\n\t\tthis->y >>= static_cast<T>(v.y);\n\t\tthis->z >>= static_cast<T>(v.z);\n\t\treturn *this;\n\t}\n\n\t// -- Unary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v)\n\t{\n\t\treturn v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\t-v.x,\n\t\t\t-v.y,\n\t\t\t-v.z);\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x + scalar,\n\t\t\tv.y + scalar,\n\t\t\tv.z + scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x + scalar.x,\n\t\t\tv.y + scalar.x,\n\t\t\tv.z + scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar + v.x,\n\t\t\tscalar + v.y,\n\t\t\tscalar + v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x + v.x,\n\t\t\tscalar.x + v.y,\n\t\t\tscalar.x + v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x + v2.x,\n\t\t\tv1.y + v2.y,\n\t\t\tv1.z + v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x - scalar,\n\t\t\tv.y - scalar,\n\t\t\tv.z - scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x - scalar.x,\n\t\t\tv.y - scalar.x,\n\t\t\tv.z - scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar - v.x,\n\t\t\tscalar - v.y,\n\t\t\tscalar - v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x - v.x,\n\t\t\tscalar.x - v.y,\n\t\t\tscalar.x - v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x - v2.x,\n\t\t\tv1.y - v2.y,\n\t\t\tv1.z - v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x * scalar,\n\t\t\tv.y * scalar,\n\t\t\tv.z * scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x * scalar.x,\n\t\t\tv.y * scalar.x,\n\t\t\tv.z * scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar * v.x,\n\t\t\tscalar * v.y,\n\t\t\tscalar * v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x * v.x,\n\t\t\tscalar.x * v.y,\n\t\t\tscalar.x * v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x * v2.x,\n\t\t\tv1.y * v2.y,\n\t\t\tv1.z * v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x / scalar,\n\t\t\tv.y / scalar,\n\t\t\tv.z / scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x / scalar.x,\n\t\t\tv.y / scalar.x,\n\t\t\tv.z / scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar / v.x,\n\t\t\tscalar / v.y,\n\t\t\tscalar / v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x / v.x,\n\t\t\tscalar.x / v.y,\n\t\t\tscalar.x / v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x / v2.x,\n\t\t\tv1.y / v2.y,\n\t\t\tv1.z / v2.z);\n\t}\n\n\t// -- Binary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x % scalar,\n\t\t\tv.y % scalar,\n\t\t\tv.z % scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x % scalar.x,\n\t\t\tv.y % scalar.x,\n\t\t\tv.z % scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar % v.x,\n\t\t\tscalar % v.y,\n\t\t\tscalar % v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x % v.x,\n\t\t\tscalar.x % v.y,\n\t\t\tscalar.x % v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x % v2.x,\n\t\t\tv1.y % v2.y,\n\t\t\tv1.z % v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x & scalar,\n\t\t\tv.y & scalar,\n\t\t\tv.z & scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x & scalar.x,\n\t\t\tv.y & scalar.x,\n\t\t\tv.z & scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar & v.x,\n\t\t\tscalar & v.y,\n\t\t\tscalar & v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x & v.x,\n\t\t\tscalar.x & v.y,\n\t\t\tscalar.x & v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x & v2.x,\n\t\t\tv1.y & v2.y,\n\t\t\tv1.z & v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x | scalar,\n\t\t\tv.y | scalar,\n\t\t\tv.z | scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x | scalar.x,\n\t\t\tv.y | scalar.x,\n\t\t\tv.z | scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar | v.x,\n\t\t\tscalar | v.y,\n\t\t\tscalar | v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x | v.x,\n\t\t\tscalar.x | v.y,\n\t\t\tscalar.x | v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x | v2.x,\n\t\t\tv1.y | v2.y,\n\t\t\tv1.z | v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x ^ scalar,\n\t\t\tv.y ^ scalar,\n\t\t\tv.z ^ scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x ^ scalar.x,\n\t\t\tv.y ^ scalar.x,\n\t\t\tv.z ^ scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar ^ v.x,\n\t\t\tscalar ^ v.y,\n\t\t\tscalar ^ v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x ^ v.x,\n\t\t\tscalar.x ^ v.y,\n\t\t\tscalar.x ^ v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x ^ v2.x,\n\t\t\tv1.y ^ v2.y,\n\t\t\tv1.z ^ v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x << scalar,\n\t\t\tv.y << scalar,\n\t\t\tv.z << scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x << scalar.x,\n\t\t\tv.y << scalar.x,\n\t\t\tv.z << scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar << v.x,\n\t\t\tscalar << v.y,\n\t\t\tscalar << v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x << v.x,\n\t\t\tscalar.x << v.y,\n\t\t\tscalar.x << v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x << v2.x,\n\t\t\tv1.y << v2.y,\n\t\t\tv1.z << v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x >> scalar,\n\t\t\tv.y >> scalar,\n\t\t\tv.z >> scalar);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv.x >> scalar.x,\n\t\t\tv.y >> scalar.x,\n\t\t\tv.z >> scalar.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar >> v.x,\n\t\t\tscalar >> v.y,\n\t\t\tscalar >> v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tscalar.x >> v.x,\n\t\t\tscalar.x >> v.y,\n\t\t\tscalar.x >> v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tv1.x >> v2.x,\n\t\t\tv1.y >> v2.y,\n\t\t\tv1.z >> v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\t~v.x,\n\t\t\t~v.y,\n\t\t\t~v.z);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn\n\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.x, v2.x) &&\n\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.y, v2.y) &&\n\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.z, v2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2)\n\t{\n\t\treturn !(v1 == v2);\n\t}\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2)\n\t{\n\t\treturn vec<3, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z);\n\t}\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2)\n\t{\n\t\treturn vec<3, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_vec4.hpp",
    "content": "/// @ref core\n/// @file glm/detail/type_vec4.hpp\n\n#pragma once\n\n#include \"qualifier.hpp\"\n#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n#\tinclude \"_swizzle.hpp\"\n#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n#\tinclude \"_swizzle_func.hpp\"\n#endif\n#include <cstddef>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tstruct vec<4, T, Q>\n\t{\n\t\t// -- Implementation detail --\n\n\t\ttypedef T value_type;\n\t\ttypedef vec<4, T, Q> type;\n\t\ttypedef vec<4, bool, Q> bool_type;\n\n\t\t// -- Data --\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic push\n#\t\t\t\tpragma GCC diagnostic ignored \"-Wpedantic\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic push\n#\t\t\t\tpragma clang diagnostic ignored \"-Wgnu-anonymous-struct\"\n#\t\t\t\tpragma clang diagnostic ignored \"-Wnested-anon-types\"\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(push)\n#\t\t\t\tpragma warning(disable: 4201)  // nonstandard extension used : nameless struct/union\n#\t\t\tendif\n#\t\tendif\n\n#\t\tif GLM_CONFIG_XYZW_ONLY\n\t\t\tT x, y, z, w;\n#\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t\t\tGLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, Q, x, y, z, w)\n#\t\t\tendif//GLM_CONFIG_SWIZZLE\n#\t\telif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE\n\t\t\tunion\n\t\t\t{\n\t\t\t\tstruct { T x, y, z, w; };\n\t\t\t\tstruct { T r, g, b, a; };\n\t\t\t\tstruct { T s, t, p, q; };\n\n\t\t\t\ttypename detail::storage<4, T, detail::is_aligned<Q>::value>::type data;\n\n#\t\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t\t\t\t\tGLM_SWIZZLE4_2_MEMBERS(T, Q, x, y, z, w)\n\t\t\t\t\tGLM_SWIZZLE4_2_MEMBERS(T, Q, r, g, b, a)\n\t\t\t\t\tGLM_SWIZZLE4_2_MEMBERS(T, Q, s, t, p, q)\n\t\t\t\t\tGLM_SWIZZLE4_3_MEMBERS(T, Q, x, y, z, w)\n\t\t\t\t\tGLM_SWIZZLE4_3_MEMBERS(T, Q, r, g, b, a)\n\t\t\t\t\tGLM_SWIZZLE4_3_MEMBERS(T, Q, s, t, p, q)\n\t\t\t\t\tGLM_SWIZZLE4_4_MEMBERS(T, Q, x, y, z, w)\n\t\t\t\t\tGLM_SWIZZLE4_4_MEMBERS(T, Q, r, g, b, a)\n\t\t\t\t\tGLM_SWIZZLE4_4_MEMBERS(T, Q, s, t, p, q)\n#\t\t\t\tendif\n\t\t\t};\n#\t\telse\n\t\t\tunion { T x, r, s; };\n\t\t\tunion { T y, g, t; };\n\t\t\tunion { T z, b, p; };\n\t\t\tunion { T w, a, q; };\n\n#\t\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t\t\t\tGLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, Q)\n#\t\t\tendif\n#\t\tendif\n\n#\t\tif GLM_SILENT_WARNINGS == GLM_ENABLE\n#\t\t\tif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\t\t\tpragma clang diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_GCC\n#\t\t\t\tpragma GCC diagnostic pop\n#\t\t\telif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\t\tpragma warning(pop)\n#\t\t\tendif\n#\t\tendif\n\n\t\t// -- Component accesses --\n\n\t\ttypedef length_t length_type;\n\n\t\t/// Return the count of components of the vector\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;}\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const;\n\n\t\t// -- Implicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT_CTOR;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, Q> const& v) GLM_DEFAULT;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, P> const& v);\n\n\t\t// -- Explicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y, T z, T w);\n\n\t\t// -- Conversion scalar constructors --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v);\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, Z _z, W _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, W _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, W _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, W _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, W _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, W _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, vec<1, W, Q> const& _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w);\n\t\ttemplate<typename X, typename Y, typename Z, typename W>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w);\n\n\t\t// -- Conversion vector constructors --\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, C _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, C _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, vec<1, C, P> const& _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, C _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, C _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, B _y, vec<2, C, P> const& _zw);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, B _y, vec<2, C, P> const& _zw);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, typename C, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, B _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<3, B, P> const& _yzw);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw);\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename A, typename B, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw);\n\n\t\t/// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification)\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v);\n\n\t\t// -- Swizzle constructors --\n#\t\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t\t\ttemplate<int E0, int E1, int E2, int E3>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<4, T, Q, E0, E1, E2, E3> const& that)\n\t\t\t{\n\t\t\t\t*this = that();\n\t\t\t}\n\n\t\t\ttemplate<int E0, int E1, int F0, int F1>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, detail::_swizzle<2, T, Q, F0, F1, -1, -2> const& u)\n\t\t\t{\n\t\t\t\t*this = vec<4, T, Q>(v(), u());\n\t\t\t}\n\n\t\t\ttemplate<int E0, int E1>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, T const& y, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v)\n\t\t\t{\n\t\t\t\t*this = vec<4, T, Q>(x, y, v());\n\t\t\t}\n\n\t\t\ttemplate<int E0, int E1>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& w)\n\t\t\t{\n\t\t\t\t*this = vec<4, T, Q>(x, v(), w);\n\t\t\t}\n\n\t\t\ttemplate<int E0, int E1>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& z, T const& w)\n\t\t\t{\n\t\t\t\t*this = vec<4, T, Q>(v(), z, w);\n\t\t\t}\n\n\t\t\ttemplate<int E0, int E1, int E2>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v, T const& w)\n\t\t\t{\n\t\t\t\t*this = vec<4, T, Q>(v(), w);\n\t\t\t}\n\n\t\t\ttemplate<int E0, int E1, int E2>\n\t\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v)\n\t\t\t{\n\t\t\t\t*this = vec<4, T, Q>(x, v());\n\t\t\t}\n#\t\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n\t\t// -- Unary arithmetic operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, T, Q> const& v) GLM_DEFAULT;\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<4, U, Q> const& v);\n\n\t\t// -- Increment and decrement operators --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator++();\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator--();\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator++(int);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator--(int);\n\n\t\t// -- Unary bit operators --\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<4, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(U scalar);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<1, U, Q> const& v);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<4, U, Q> const& v);\n\t};\n\n\t// -- Unary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2);\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2);\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2);\n}//namespace glm\n\n#ifndef GLM_EXTERNAL_TEMPLATE\n#include \"type_vec4.inl\"\n#endif//GLM_EXTERNAL_TEMPLATE\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_vec4.inl",
    "content": "/// @ref core\n\n#include \"compute_vector_relational.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_vec4_add\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_vec4_sub\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_vec4_mul\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_vec4_div\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x / b.x, a.y / b.y, a.z / b.z, a.w / b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_vec4_mod\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x % b.x, a.y % b.y, a.z % b.z, a.w % b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned>\n\tstruct compute_vec4_and\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x & b.x, a.y & b.y, a.z & b.z, a.w & b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned>\n\tstruct compute_vec4_or\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x | b.x, a.y | b.y, a.z | b.z, a.w | b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned>\n\tstruct compute_vec4_xor\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x ^ b.x, a.y ^ b.y, a.z ^ b.z, a.w ^ b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned>\n\tstruct compute_vec4_shift_left\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x << b.x, a.y << b.y, a.z << b.z, a.w << b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned>\n\tstruct compute_vec4_shift_right\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\treturn vec<4, T, Q>(a.x >> b.x, a.y >> b.y, a.z >> b.z, a.w >> b.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned>\n\tstruct compute_vec4_equal\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t\t{\n\t\t\treturn\n\t\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.x, v2.x) &&\n\t\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.y, v2.y) &&\n\t\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.z, v2.z) &&\n\t\t\t\tdetail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(v1.w, v2.w);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned>\n\tstruct compute_vec4_nequal\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t\t{\n\t\t\treturn !compute_vec4_equal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(v1, v2);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q, int IsInt, std::size_t Size, bool Aligned>\n\tstruct compute_vec4_bitwise_not\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& v)\n\t\t{\n\t\t\treturn vec<4, T, Q>(~v.x, ~v.y, ~v.z, ~v.w);\n\t\t}\n\t};\n}//namespace detail\n\n\t// -- Implicit basic constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec()\n#\t\t\tif GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE\n\t\t\t\t: x(0), y(0), z(0), w(0)\n#\t\t\tendif\n\t\t{}\n#\tendif\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, T, Q> const& v)\n\t\t\t: x(v.x), y(v.y), z(v.z), w(v.w)\n\t\t{}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, T, P> const& v)\n\t\t: x(v.x), y(v.y), z(v.z), w(v.w)\n\t{}\n\n\t// -- Explicit basic constructors --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(T scalar)\n\t\t: x(scalar), y(scalar), z(scalar), w(scalar)\n\t{}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(T _x, T _y, T _z, T _w)\n\t\t: x(_x), y(_y), z(_z), w(_w)\n\t{}\n\n\t// -- Conversion scalar constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.x))\n\t\t, z(static_cast<T>(v.x))\n\t\t, w(static_cast<T>(v.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, Z _z, W _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z, W _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z, W _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, W _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z, W _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, W _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z, vec<1, W, Q> const& _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename X, typename Y, typename Z, typename W>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\t// -- Conversion vector constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, B _z, C _w)\n\t\t: x(static_cast<T>(_xy.x))\n\t\t, y(static_cast<T>(_xy.y))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, C _w)\n\t\t: x(static_cast<T>(_xy.x))\n\t\t, y(static_cast<T>(_xy.y))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, B _z, vec<1, C, P> const& _w)\n\t\t: x(static_cast<T>(_xy.x))\n\t\t, y(static_cast<T>(_xy.y))\n\t\t, z(static_cast<T>(_z))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w)\n\t\t: x(static_cast<T>(_xy.x))\n\t\t, y(static_cast<T>(_xy.y))\n\t\t, z(static_cast<T>(_z.x))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<2, B, P> const& _yz, C _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_yz.x))\n\t\t, z(static_cast<T>(_yz.y))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, C _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_yz.x))\n\t\t, z(static_cast<T>(_yz.y))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_yz.x))\n\t\t, z(static_cast<T>(_yz.y))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_yz.x))\n\t\t, z(static_cast<T>(_yz.y))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, B _y, vec<2, C, P> const& _zw)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_zw.x))\n\t\t, w(static_cast<T>(_zw.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, B _y, vec<2, C, P> const& _zw)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y))\n\t\t, z(static_cast<T>(_zw.x))\n\t\t, w(static_cast<T>(_zw.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_zw.x))\n\t\t, w(static_cast<T>(_zw.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, typename C, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_y.x))\n\t\t, z(static_cast<T>(_zw.x))\n\t\t, w(static_cast<T>(_zw.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, B _w)\n\t\t: x(static_cast<T>(_xyz.x))\n\t\t, y(static_cast<T>(_xyz.y))\n\t\t, z(static_cast<T>(_xyz.z))\n\t\t, w(static_cast<T>(_w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w)\n\t\t: x(static_cast<T>(_xyz.x))\n\t\t, y(static_cast<T>(_xyz.y))\n\t\t, z(static_cast<T>(_xyz.z))\n\t\t, w(static_cast<T>(_w.x))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<3, B, P> const& _yzw)\n\t\t: x(static_cast<T>(_x))\n\t\t, y(static_cast<T>(_yzw.x))\n\t\t, z(static_cast<T>(_yzw.y))\n\t\t, w(static_cast<T>(_yzw.z))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw)\n\t\t: x(static_cast<T>(_x.x))\n\t\t, y(static_cast<T>(_yzw.x))\n\t\t, z(static_cast<T>(_yzw.y))\n\t\t, w(static_cast<T>(_yzw.z))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename A, typename B, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw)\n\t\t: x(static_cast<T>(_xy.x))\n\t\t, y(static_cast<T>(_xy.y))\n\t\t, z(static_cast<T>(_zw.x))\n\t\t, w(static_cast<T>(_zw.y))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, U, P> const& v)\n\t\t: x(static_cast<T>(v.x))\n\t\t, y(static_cast<T>(v.y))\n\t\t, z(static_cast<T>(v.z))\n\t\t, w(static_cast<T>(v.w))\n\t{}\n\n\t// -- Component accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i)\n\t{\n\t\tassert(i >= 0 && i < this->length());\n\t\tswitch(i)\n\t\t{\n\t\tdefault:\n\t\tcase 0:\n\t\t\treturn x;\n\t\tcase 1:\n\t\t\treturn y;\n\t\tcase 2:\n\t\t\treturn z;\n\t\tcase 3:\n\t\t\treturn w;\n\t\t}\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) const\n\t{\n\t\tassert(i >= 0 && i < this->length());\n\t\tswitch(i)\n\t\t{\n\t\tdefault:\n\t\tcase 0:\n\t\t\treturn x;\n\t\tcase 1:\n\t\t\treturn y;\n\t\tcase 2:\n\t\t\treturn z;\n\t\tcase 3:\n\t\t\treturn w;\n\t\t}\n\t}\n\n\t// -- Unary arithmetic operators --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, T, Q> const& v)\n\t\t{\n\t\t\tthis->x = v.x;\n\t\t\tthis->y = v.y;\n\t\t\tthis->z = v.z;\n\t\t\tthis->w = v.w;\n\t\t\treturn *this;\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, U, Q> const& v)\n\t{\n\t\tthis->x = static_cast<T>(v.x);\n\t\tthis->y = static_cast<T>(v.y);\n\t\tthis->z = static_cast<T>(v.z);\n\t\tthis->w = static_cast<T>(v.w);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_add<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_add<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v.x)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_add<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_sub<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_sub<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v.x)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_sub<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_mul<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_mul<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v.x)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_mul<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_div<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_div<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v.x)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_div<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\t// -- Increment and decrement operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator++()\n\t{\n\t\t++this->x;\n\t\t++this->y;\n\t\t++this->z;\n\t\t++this->w;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator--()\n\t{\n\t\t--this->x;\n\t\t--this->y;\n\t\t--this->z;\n\t\t--this->w;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> vec<4, T, Q>::operator++(int)\n\t{\n\t\tvec<4, T, Q> Result(*this);\n\t\t++*this;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> vec<4, T, Q>::operator--(int)\n\t{\n\t\tvec<4, T, Q> Result(*this);\n\t\t--*this;\n\t\treturn Result;\n\t}\n\n\t// -- Unary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_mod<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_mod<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_mod<T, Q, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_and<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_or<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_xor<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_shift_left<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(U scalar)\n\t{\n\t\treturn (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(scalar)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<1, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<4, U, Q> const& v)\n\t{\n\t\treturn (*this = detail::compute_vec4_shift_right<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(*this, vec<4, T, Q>(v)));\n\t}\n\n\t// -- Unary constant operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v)\n\t{\n\t\treturn v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(0) -= v;\n\t}\n\n\t// -- Binary arithmetic operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) += scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) += v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(v) += scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v2) += v1;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) += v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) -= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) -= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar) -= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1.x) -= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) -= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) *= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) *= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(v) *= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v2) *= v1;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) *= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) /= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) /= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar) /= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1.x) /= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) /= v2;\n\t}\n\n\t// -- Binary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) %= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) %= v2.x;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar) %= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar.x) %= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) %= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) &= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) &= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar) &= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1.x) &= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) &= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) |= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) |= v2.x;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar) |= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1.x) |= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) |= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) ^= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) ^= v2.x;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar) ^= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1.x) ^= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) ^= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) <<= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) <<= v2.x;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar) <<= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1.x) <<= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) <<= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar)\n\t{\n\t\treturn vec<4, T, Q>(v) >>= scalar;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) >>= v2.x;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(scalar) >>= v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1.x) >>= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn vec<4, T, Q>(v1) >>= v2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v)\n\t{\n\t\treturn detail::compute_vec4_bitwise_not<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(v);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn detail::compute_vec4_equal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(v1, v2);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2)\n\t{\n\t\treturn detail::compute_vec4_nequal<T, Q, detail::is_int<T>::value, sizeof(T) * 8, detail::is_aligned<Q>::value>::call(v1, v2);\n\t}\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2)\n\t{\n\t\treturn vec<4, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z, v1.w && v2.w);\n\t}\n\n\ttemplate<qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2)\n\t{\n\t\treturn vec<4, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z, v1.w || v2.w);\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"type_vec4_simd.inl\"\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/detail/type_vec4_simd.inl",
    "content": "#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nnamespace glm{\nnamespace detail\n{\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\ttemplate<qualifier Q, int E0, int E1, int E2, int E3>\n\tstruct _swizzle_base1<4, float, Q, E0,E1,E2,E3, true> : public _swizzle_base0<float, 4>\n\t{\n\t\tGLM_FUNC_QUALIFIER vec<4, float, Q> operator ()()  const\n\t\t{\n\t\t\t__m128 data = *reinterpret_cast<__m128 const*>(&this->_buffer);\n\n\t\t\tvec<4, float, Q> Result;\n#\t\t\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\t\t\t\tResult.data = _mm_permute_ps(data, _MM_SHUFFLE(E3, E2, E1, E0));\n#\t\t\telse\n\t\t\t\tResult.data = _mm_shuffle_ps(data, data, _MM_SHUFFLE(E3, E2, E1, E0));\n#\t\t\tendif\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q, int E0, int E1, int E2, int E3>\n\tstruct _swizzle_base1<4, int, Q, E0,E1,E2,E3, true> : public _swizzle_base0<int, 4>\n\t{\n\t\tGLM_FUNC_QUALIFIER vec<4, int, Q> operator ()()  const\n\t\t{\n\t\t\t__m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer);\n\n\t\t\tvec<4, int, Q> Result;\n\t\t\tResult.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0));\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q, int E0, int E1, int E2, int E3>\n\tstruct _swizzle_base1<4, uint, Q, E0,E1,E2,E3, true> : public _swizzle_base0<uint, 4>\n\t{\n\t\tGLM_FUNC_QUALIFIER vec<4, uint, Q> operator ()()  const\n\t\t{\n\t\t\t__m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer);\n\n\t\t\tvec<4, uint, Q> Result;\n\t\t\tResult.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0));\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif// GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_add<float, Q, true>\n\t{\n\t\tstatic vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_add_ps(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_add<double, Q, true>\n\t{\n\t\tstatic vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b)\n\t\t{\n\t\t\tvec<4, double, Q> Result;\n\t\t\tResult.data = _mm256_add_pd(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_sub<float, Q, true>\n\t{\n\t\tstatic vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_sub_ps(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_sub<double, Q, true>\n\t{\n\t\tstatic vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b)\n\t\t{\n\t\t\tvec<4, double, Q> Result;\n\t\t\tResult.data = _mm256_sub_pd(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_mul<float, Q, true>\n\t{\n\t\tstatic vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_mul_ps(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_mul<double, Q, true>\n\t{\n\t\tstatic vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b)\n\t\t{\n\t\t\tvec<4, double, Q> Result;\n\t\t\tResult.data = _mm256_mul_pd(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_div<float, Q, true>\n\t{\n\t\tstatic vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_div_ps(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\t#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_div<double, Q, true>\n\t{\n\t\tstatic vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b)\n\t\t{\n\t\t\tvec<4, double, Q> Result;\n\t\t\tResult.data = _mm256_div_pd(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<>\n\tstruct compute_vec4_div<float, aligned_lowp, true>\n\t{\n\t\tstatic vec<4, float, aligned_lowp> call(vec<4, float, aligned_lowp> const& a, vec<4, float, aligned_lowp> const& b)\n\t\t{\n\t\t\tvec<4, float, aligned_lowp> Result;\n\t\t\tResult.data = _mm_mul_ps(a.data, _mm_rcp_ps(b.data));\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_and<T, Q, true, 32, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm_and_si128(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX2_BIT\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_and<T, Q, true, 64, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm256_and_si256(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_or<T, Q, true, 32, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm_or_si128(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX2_BIT\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_or<T, Q, true, 64, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm256_or_si256(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_xor<T, Q, true, 32, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm_xor_si128(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX2_BIT\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_xor<T, Q, true, 64, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm256_xor_si256(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_shift_left<T, Q, true, 32, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm_sll_epi32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX2_BIT\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_shift_left<T, Q, true, 64, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm256_sll_epi64(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_shift_right<T, Q, true, 32, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm_srl_epi32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX2_BIT\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_shift_right<T, Q, true, 64, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm256_srl_epi64(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_bitwise_not<T, Q, true, 32, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& v)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm_xor_si128(v.data, _mm_set1_epi32(-1));\n\t\t\treturn Result;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_AVX2_BIT\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_vec4_bitwise_not<T, Q, true, 64, true>\n\t{\n\t\tstatic vec<4, T, Q> call(vec<4, T, Q> const& v)\n\t\t{\n\t\t\tvec<4, T, Q> Result;\n\t\t\tResult.data = _mm256_xor_si256(v.data, _mm_set1_epi32(-1));\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_equal<float, Q, false, 32, true>\n\t{\n\t\tstatic bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2)\n\t\t{\n\t\t\treturn _mm_movemask_ps(_mm_cmpneq_ps(v1.data, v2.data)) == 0;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_SSE41_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_equal<int, Q, true, 32, true>\n\t{\n\t\tstatic bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2)\n\t\t{\n\t\t\t//return _mm_movemask_epi8(_mm_cmpeq_epi32(v1.data, v2.data)) != 0;\n\t\t\t__m128i neq = _mm_xor_si128(v1.data, v2.data);\n\t\t\treturn _mm_test_all_zeros(neq, neq) == 0;\n\t\t}\n\t};\n#\tendif\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_nequal<float, Q, false, 32, true>\n\t{\n\t\tstatic bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2)\n\t\t{\n\t\t\treturn _mm_movemask_ps(_mm_cmpneq_ps(v1.data, v2.data)) != 0;\n\t\t}\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_SSE41_BIT\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_nequal<int, Q, true, 32, true>\n\t{\n\t\tstatic bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2)\n\t\t{\n\t\t\t//return _mm_movemask_epi8(_mm_cmpneq_epi32(v1.data, v2.data)) != 0;\n\t\t\t__m128i neq = _mm_xor_si128(v1.data, v2.data);\n\t\t\treturn _mm_test_all_zeros(neq, neq) != 0;\n\t\t}\n\t};\n#\tendif\n}//namespace detail\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _s) :\n\t\tdata(_mm_set1_ps(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _s) :\n\t\tdata(_mm_set1_ps(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _s) :\n\t\tdata(_mm_set1_ps(_s))\n\t{}\n\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_lowp>::vec(double _s) :\n\t\tdata(_mm256_set1_pd(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_mediump>::vec(double _s) :\n\t\tdata(_mm256_set1_pd(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_highp>::vec(double _s) :\n\t\tdata(_mm256_set1_pd(_s))\n\t{}\n#\tendif\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _s) :\n\t\tdata(_mm_set1_epi32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _s) :\n\t\tdata(_mm_set1_epi32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _s) :\n\t\tdata(_mm_set1_epi32(_s))\n\t{}\n\n#\tif GLM_ARCH & GLM_ARCH_AVX2_BIT\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_lowp>::vec(detail::int64 _s) :\n\t\tdata(_mm256_set1_epi64x(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_mediump>::vec(detail::int64 _s) :\n\t\tdata(_mm256_set1_epi64x(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_highp>::vec(detail::int64 _s) :\n\t\tdata(_mm256_set1_epi64x(_s))\n\t{}\n#\tendif\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _x, float _y, float _z, float _w) :\n\t\tdata(_mm_set_ps(_w, _z, _y, _x))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _x, float _y, float _z, float _w) :\n\t\tdata(_mm_set_ps(_w, _z, _y, _x))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _x, float _y, float _z, float _w) :\n\t\tdata(_mm_set_ps(_w, _z, _y, _x))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(_mm_set_epi32(_w, _z, _y, _x))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(_mm_set_epi32(_w, _z, _y, _x))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(_mm_set_epi32(_w, _z, _y, _x))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x)))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x)))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x)))\n\t{}\n}//namespace glm\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n#if GLM_ARCH & GLM_ARCH_NEON_BIT\nnamespace glm {\nnamespace detail {\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_add<float, Q, true>\n\t{\n\t\tstatic\n\t\tvec<4, float, Q>\n\t\tcall(vec<4, float, Q> const& a, vec<4, float, Q> const& b)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = vaddq_f32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_add<uint, Q, true>\n\t{\n\t\tstatic\n\t\tvec<4, uint, Q>\n\t\tcall(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b)\n\t\t{\n\t\t\tvec<4, uint, Q> Result;\n\t\t\tResult.data = vaddq_u32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_add<int, Q, true>\n\t{\n\t\tstatic\n\t\tvec<4, int, Q>\n\t\tcall(vec<4, int, Q> const& a, vec<4, int, Q> const& b)\n\t\t{\n\t\t\tvec<4, int, Q> Result;\n\t\t\tResult.data = vaddq_s32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_sub<float, Q, true>\n\t{\n\t\tstatic vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = vsubq_f32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_sub<uint, Q, true>\n\t{\n\t\tstatic vec<4, uint, Q> call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b)\n\t\t{\n\t\t\tvec<4, uint, Q> Result;\n\t\t\tResult.data = vsubq_u32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_sub<int, Q, true>\n\t{\n\t\tstatic vec<4, int, Q> call(vec<4, int, Q> const& a, vec<4, int, Q> const& b)\n\t\t{\n\t\t\tvec<4, int, Q> Result;\n\t\t\tResult.data = vsubq_s32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_mul<float, Q, true>\n\t{\n\t\tstatic vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = vmulq_f32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_mul<uint, Q, true>\n\t{\n\t\tstatic vec<4, uint, Q> call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b)\n\t\t{\n\t\t\tvec<4, uint, Q> Result;\n\t\t\tResult.data = vmulq_u32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_mul<int, Q, true>\n\t{\n\t\tstatic vec<4, int, Q> call(vec<4, int, Q> const& a, vec<4, int, Q> const& b)\n\t\t{\n\t\t\tvec<4, int, Q> Result;\n\t\t\tResult.data = vmulq_s32(a.data, b.data);\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_div<float, Q, true>\n\t{\n\t\tstatic vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\tResult.data = vdivq_f32(a.data, b.data);\n#else\n\t\t\t/* Arm assembler reference:\n\t\t\t *\n\t\t\t * The Newton-Raphson iteration: x[n+1] = x[n] * (2 - d * x[n])\n\t\t\t * converges to (1/d) if x0 is the result of VRECPE applied to d.\n\t\t\t *\n\t\t\t * Note: The precision usually improves with two interactions, but more than two iterations are not helpful. */\n\t\t\tfloat32x4_t x = vrecpeq_f32(b.data);\n\t\t\tx = vmulq_f32(vrecpsq_f32(b.data, x), x);\n\t\t\tx = vmulq_f32(vrecpsq_f32(b.data, x), x);\n\t\t\tResult.data = vmulq_f32(a.data, x);\n#endif\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_equal<float, Q, false, 32, true>\n\t{\n\t\tstatic bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2)\n\t\t{\n\t\t\tuint32x4_t cmp = vceqq_f32(v1.data, v2.data);\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\tcmp = vpminq_u32(cmp, cmp);\n\t\t\tcmp = vpminq_u32(cmp, cmp);\n\t\t\tuint32_t r = cmp[0];\n#else\n\t\t\tuint32x2_t cmpx2 = vpmin_u32(vget_low_u32(cmp), vget_high_u32(cmp));\n\t\t\tcmpx2 = vpmin_u32(cmpx2, cmpx2);\n\t\t\tuint32_t r = cmpx2[0];\n#endif\n\t\t\treturn r == ~0u;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_equal<uint, Q, false, 32, true>\n\t{\n\t\tstatic bool call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2)\n\t\t{\n\t\t\tuint32x4_t cmp = vceqq_u32(v1.data, v2.data);\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\tcmp = vpminq_u32(cmp, cmp);\n\t\t\tcmp = vpminq_u32(cmp, cmp);\n\t\t\tuint32_t r = cmp[0];\n#else\n\t\t\tuint32x2_t cmpx2 = vpmin_u32(vget_low_u32(cmp), vget_high_u32(cmp));\n\t\t\tcmpx2 = vpmin_u32(cmpx2, cmpx2);\n\t\t\tuint32_t r = cmpx2[0];\n#endif\n\t\t\treturn r == ~0u;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_equal<int, Q, false, 32, true>\n\t{\n\t\tstatic bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2)\n\t\t{\n\t\t\tuint32x4_t cmp = vceqq_s32(v1.data, v2.data);\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\tcmp = vpminq_u32(cmp, cmp);\n\t\t\tcmp = vpminq_u32(cmp, cmp);\n\t\t\tuint32_t r = cmp[0];\n#else\n\t\t\tuint32x2_t cmpx2 = vpmin_u32(vget_low_u32(cmp), vget_high_u32(cmp));\n\t\t\tcmpx2 = vpmin_u32(cmpx2, cmpx2);\n\t\t\tuint32_t r = cmpx2[0];\n#endif\n\t\t\treturn r == ~0u;\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_nequal<float, Q, false, 32, true>\n\t{\n\t\tstatic bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2)\n\t\t{\n\t\t\treturn !compute_vec4_equal<float, Q, false, 32, true>::call(v1, v2);\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_nequal<uint, Q, false, 32, true>\n\t{\n\t\tstatic bool call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2)\n\t\t{\n\t\t\treturn !compute_vec4_equal<uint, Q, false, 32, true>::call(v1, v2);\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_vec4_nequal<int, Q, false, 32, true>\n\t{\n\t\tstatic bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2)\n\t\t{\n\t\t\treturn !compute_vec4_equal<int, Q, false, 32, true>::call(v1, v2);\n\t\t}\n\t};\n\n}//namespace detail\n\n#if !GLM_CONFIG_XYZW_ONLY\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _s) :\n\t\tdata(vdupq_n_f32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _s) :\n\t\tdata(vdupq_n_f32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _s) :\n\t\tdata(vdupq_n_f32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _s) :\n\t\tdata(vdupq_n_s32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _s) :\n\t\tdata(vdupq_n_s32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _s) :\n\t\tdata(vdupq_n_s32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_lowp>::vec(uint _s) :\n\t\tdata(vdupq_n_u32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_mediump>::vec(uint _s) :\n\t\tdata(vdupq_n_u32(_s))\n\t{}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_highp>::vec(uint _s) :\n\t\tdata(vdupq_n_u32(_s))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, float, aligned_highp>& rhs) :\n\t\tdata(rhs.data)\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, int, aligned_highp>& rhs) :\n\t\tdata(vcvtq_f32_s32(rhs.data))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, uint, aligned_highp>& rhs) :\n\t\tdata(vcvtq_f32_u32(rhs.data))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(vcvtq_f32_s32(vec<4, int, aligned_lowp>(_x, _y, _z, _w).data))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(vcvtq_f32_s32(vec<4, int, aligned_mediump>(_x, _y, _z, _w).data))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(int _x, int _y, int _z, int _w) :\n\t\tdata(vcvtq_f32_s32(vec<4, int, aligned_highp>(_x, _y, _z, _w).data))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(uint _x, uint _y, uint _z, uint _w) :\n\t\tdata(vcvtq_f32_u32(vec<4, uint, aligned_lowp>(_x, _y, _z, _w).data))\n\t{}\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(uint _x, uint _y, uint _z, uint _w) :\n\t\tdata(vcvtq_f32_u32(vec<4, uint, aligned_mediump>(_x, _y, _z, _w).data))\n\t{}\n\n\n\ttemplate<>\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(uint _x, uint _y, uint _z, uint _w) :\n\t\tdata(vcvtq_f32_u32(vec<4, uint, aligned_highp>(_x, _y, _z, _w).data))\n\t{}\n\n#endif\n}//namespace glm\n\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/exponential.hpp",
    "content": "/// @ref core\n/// @file glm/exponential.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>\n///\n/// @defgroup core_func_exponential Exponential functions\n/// @ingroup core\n///\n/// Provides GLSL exponential functions\n///\n/// These all operate component-wise. The description is per component.\n///\n/// Include <glm/exponential.hpp> to use these core features.\n\n#pragma once\n\n#include \"detail/type_vec1.hpp\"\n#include \"detail/type_vec2.hpp\"\n#include \"detail/type_vec3.hpp\"\n#include \"detail/type_vec4.hpp\"\n#include <cmath>\n\nnamespace glm\n{\n\t/// @addtogroup core_func_exponential\n\t/// @{\n\n\t/// Returns 'base' raised to the power 'exponent'.\n\t///\n\t/// @param base Floating point value. pow function is defined for input values of 'base' defined in the range (inf-, inf+) in the limit of the type qualifier.\n\t/// @param exponent Floating point value representing the 'exponent'.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/pow.xml\">GLSL pow man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> pow(vec<L, T, Q> const& base, vec<L, T, Q> const& exponent);\n\n\t/// Returns the natural exponentiation of v, i.e., e^v.\n\t///\n\t/// @param v exp function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier.\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/exp.xml\">GLSL exp man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> exp(vec<L, T, Q> const& v);\n\n\t/// Returns the natural logarithm of v, i.e.,\n\t/// returns the value y which satisfies the equation x = e^y.\n\t/// Results are undefined if v <= 0.\n\t///\n\t/// @param v log function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier.\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/log.xml\">GLSL log man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> log(vec<L, T, Q> const& v);\n\n\t/// Returns 2 raised to the v power.\n\t///\n\t/// @param v exp2 function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier.\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/exp2.xml\">GLSL exp2 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> exp2(vec<L, T, Q> const& v);\n\n\t/// Returns the base 2 log of x, i.e., returns the value y,\n\t/// which satisfies the equation x = 2 ^ y.\n\t///\n\t/// @param v log2 function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier.\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/log2.xml\">GLSL log2 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> log2(vec<L, T, Q> const& v);\n\n\t/// Returns the positive square root of v.\n\t///\n\t/// @param v sqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier.\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/sqrt.xml\">GLSL sqrt man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> sqrt(vec<L, T, Q> const& v);\n\n\t/// Returns the reciprocal of the positive square root of v.\n\t///\n\t/// @param v inversesqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier.\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/inversesqrt.xml\">GLSL inversesqrt man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.2 Exponential Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> inversesqrt(vec<L, T, Q> const& v);\n\n\t/// @}\n}//namespace glm\n\n#include \"detail/func_exponential.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/_matrix_vectorize.hpp",
    "content": "#pragma once\n\nnamespace glm {\n\n\tnamespace detail {\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, length_t C, length_t R, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1 {\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 2, 2, Ret, T, Q> {\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<2, 2, T, Q> call(Ret (*Func)(T x), mat<2, 2, T, Q> const &x) {\n\t\t\t\treturn mat<2, 2, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1])\n\t\t\t\t);\n\t\t\t}\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 2, 3, Ret, T, Q> {\n\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<2, 3, T, Q> call(Ret (*Func)(T x), mat<2, 3, T, Q> const &x) {\n\t\t\t\treturn mat<2, 3, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]), Func(x[0][2]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1]), Func(x[1][2])\n\t\t\t\t);\n\t\t\t}\n\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 2, 4, Ret, T, Q> {\n\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<2, 4, T, Q> call(Ret (*Func)(T x), mat<2, 4, T, Q> const &x) {\n\t\t\t\treturn mat<2, 4, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]), Func(x[0][2]), Func(x[0][3]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1]), Func(x[1][2]), Func(x[1][3])\n\t\t\t\t);\n\t\t\t}\n\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 3, 2, Ret, T, Q> {\n\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<3, 2, T, Q> call(Ret (*Func)(T x), mat<3, 2, T, Q> const &x) {\n\t\t\t\treturn mat<3, 2, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1]),\n\t\t\t\t\tFunc(x[2][0]), Func(x[2][1])\n\t\t\t\t);\n\t\t\t}\n\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 3, 3, Ret, T, Q> {\n\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<3, 3, T, Q> call(Ret (*Func)(T x), mat<3, 3, T, Q> const &x) {\n\t\t\t\treturn mat<3, 3, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]), Func(x[0][2]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1]), Func(x[1][2]),\n\t\t\t\t\tFunc(x[2][0]), Func(x[2][1]), Func(x[2][2])\n\t\t\t\t);\n\t\t\t}\n\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 3, 4, Ret, T, Q> {\n\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<3, 4, T, Q> call(Ret (*Func)(T x), mat<3, 4, T, Q> const &x) {\n\t\t\t\treturn mat<3, 4, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]), Func(x[0][2]), Func(x[0][3]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1]), Func(x[1][2]), Func(x[1][3]),\n\t\t\t\t\tFunc(x[2][0]), Func(x[2][1]), Func(x[2][2]), Func(x[2][3])\n\t\t\t\t);\n\t\t\t}\n\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 4, 2, Ret, T, Q> {\n\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<4, 2, T, Q> call(Ret (*Func)(T x), mat<4, 2, T, Q> const &x) {\n\t\t\t\treturn mat<4, 2, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1]),\n\t\t\t\t\tFunc(x[2][0]), Func(x[2][1]),\n\t\t\t\t\tFunc(x[3][0]), Func(x[3][1])\n\t\t\t\t);\n\t\t\t}\n\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 4, 3, Ret, T, Q> {\n\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<4, 3, T, Q> call(Ret (*Func)(T x), mat<4, 3, T, Q> const &x) {\n\t\t\t\treturn mat<4, 3, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]), Func(x[0][2]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1]), Func(x[1][2]),\n\t\t\t\t\tFunc(x[2][0]), Func(x[2][1]), Func(x[2][2]),\n\t\t\t\t\tFunc(x[3][0]), Func(x[3][1]), Func(x[3][2])\n\t\t\t\t);\n\t\t\t}\n\n\t\t};\n\n\t\ttemplate<template<length_t C, length_t R, typename T, qualifier Q> class mat, typename Ret, typename T, qualifier Q>\n\t\tstruct matrix_functor_1<mat, 4, 4, Ret, T, Q> {\n\n\t\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<4, 4, T, Q> call(Ret (*Func)(T x), mat<4, 4, T, Q> const &x) {\n\t\t\t\treturn mat<4, 4, Ret, Q>(\n\t\t\t\t\tFunc(x[0][0]), Func(x[0][1]), Func(x[0][2]), Func(x[0][3]),\n\t\t\t\t\tFunc(x[1][0]), Func(x[1][1]), Func(x[1][2]), Func(x[1][3]),\n\t\t\t\t\tFunc(x[2][0]), Func(x[2][1]), Func(x[2][2]), Func(x[2][3]),\n\t\t\t\t\tFunc(x[3][0]), Func(x[3][1]), Func(x[3][2]), Func(x[3][3])\n\t\t\t\t);\n\t\t\t}\n\n\t\t};\n\n\t}\n\n}// namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_clip_space.hpp",
    "content": "/// @ref ext_matrix_clip_space\n/// @file glm/ext/matrix_clip_space.hpp\n///\n/// @defgroup ext_matrix_clip_space GLM_EXT_matrix_clip_space\n/// @ingroup ext\n///\n/// Defines functions that generate clip space transformation matrices.\n///\n/// The matrices generated by this extension use standard OpenGL fixed-function\n/// conventions. For example, the lookAt function generates a transform from world\n/// space into the specific eye space that the projective matrix functions\n/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility\n/// specifications defines the particular layout of this eye space.\n///\n/// Include <glm/ext/matrix_clip_space.hpp> to use the features of this extension.\n///\n/// @see ext_matrix_transform\n/// @see ext_matrix_projection\n\n#pragma once\n\n// Dependencies\n#include \"../ext/scalar_constants.hpp\"\n#include \"../geometric.hpp\"\n#include \"../trigonometric.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_clip_space extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_clip_space\n\t/// @{\n\n\t/// Creates a matrix for projecting two-dimensional coordinates onto the screen.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top, T const& zNear, T const& zFar)\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluOrtho2D.xml\">gluOrtho2D man page</a>\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> ortho(\n\t\tT left, T right, T bottom, T top);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_ZO(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume using left-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_NO(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_ZO(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_NO(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> orthoZO(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> orthoNO(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates.\n\t/// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t/// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates.\n\t/// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t/// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a matrix for an orthographic parallel viewing volume, using the default handedness and default near and far clip planes definition.\n\t/// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t///\n\t/// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top)\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glOrtho.xml\">glOrtho man page</a>\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> ortho(\n\t\tT left, T right, T bottom, T top, T zNear, T zFar);\n\n\t/// Creates a left-handed frustum matrix.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_ZO(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\t/// Creates a left-handed frustum matrix.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_NO(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\t/// Creates a right-handed frustum matrix.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_ZO(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\t/// Creates a right-handed frustum matrix.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_NO(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\t/// Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustumZO(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\t/// Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustumNO(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\t/// Creates a left-handed frustum matrix.\n\t/// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t/// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\t/// Creates a right-handed frustum matrix.\n\t/// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t/// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\t/// Creates a frustum matrix with default handedness, using the default handedness and default near and far clip planes definition.\n\t/// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glFrustum.xml\">glFrustum man page</a>\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> frustum(\n\t\tT left, T right, T bottom, T top, T near, T far);\n\n\n\t/// Creates a matrix for a right-handed, symmetric perspective-view frustum.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_ZO(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Creates a matrix for a right-handed, symmetric perspective-view frustum.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_NO(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Creates a matrix for a left-handed, symmetric perspective-view frustum.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_ZO(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Creates a matrix for a left-handed, symmetric perspective-view frustum.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_NO(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Creates a matrix for a symmetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveZO(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Creates a matrix for a symmetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveNO(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Creates a matrix for a right-handed, symmetric perspective-view frustum.\n\t/// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t/// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Creates a matrix for a left-handed, symmetric perspective-view frustum.\n\t/// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t/// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Creates a matrix for a symmetric perspective-view frustum based on the default handedness and default near and far clip planes definition.\n\t/// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.\n\t///\n\t/// @param fovy Specifies the field of view angle in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluPerspective.xml\">gluPerspective man page</a>\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspective(\n\t\tT fovy, T aspect, T near, T far);\n\n\t/// Builds a perspective projection matrix based on a field of view using right-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_ZO(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Builds a perspective projection matrix based on a field of view using right-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_NO(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Builds a perspective projection matrix based on a field of view using left-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_ZO(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Builds a perspective projection matrix based on a field of view using left-handed coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_NO(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovZO(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovNO(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Builds a right-handed perspective projection matrix based on a field of view.\n\t/// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t/// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Builds a left-handed perspective projection matrix based on a field of view.\n\t/// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t/// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Builds a perspective projection matrix based on a field of view and the default handedness and default near and far clip planes definition.\n\t/// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.\n\t///\n\t/// @param fov Expressed in radians.\n\t/// @param width Width of the viewport\n\t/// @param height Height of the viewport\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param far Specifies the distance from the viewer to the far clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFov(\n\t\tT fov, T width, T height, T near, T far);\n\n\t/// Creates a matrix for a left-handed, symmetric perspective-view frustum with far plane at infinite.\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveLH(\n\t\tT fovy, T aspect, T near);\n\n\t/// Creates a matrix for a right-handed, symmetric perspective-view frustum with far plane at infinite.\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveRH(\n\t\tT fovy, T aspect, T near);\n\n\t/// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness.\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspective(\n\t\tT fovy, T aspect, T near);\n\n\t/// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective(\n\t\tT fovy, T aspect, T near);\n\n\t/// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping.\n\t///\n\t/// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians.\n\t/// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height).\n\t/// @param near Specifies the distance from the viewer to the near clipping plane (always positive).\n\t/// @param ep Epsilon\n\t///\n\t/// @tparam T A floating-point scalar type\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective(\n\t\tT fovy, T aspect, T near, T ep);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_clip_space.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_clip_space.inl",
    "content": "namespace glm\n{\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> ortho(T left, T right, T bottom, T top)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(1));\n\t\tResult[0][0] = static_cast<T>(2) / (right - left);\n\t\tResult[1][1] = static_cast<T>(2) / (top - bottom);\n\t\tResult[2][2] = - static_cast<T>(1);\n\t\tResult[3][0] = - (right + left) / (right - left);\n\t\tResult[3][1] = - (top + bottom) / (top - bottom);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH_ZO(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(1);\n\t\tResult[0][0] = static_cast<T>(2) / (right - left);\n\t\tResult[1][1] = static_cast<T>(2) / (top - bottom);\n\t\tResult[2][2] = static_cast<T>(1) / (zFar - zNear);\n\t\tResult[3][0] = - (right + left) / (right - left);\n\t\tResult[3][1] = - (top + bottom) / (top - bottom);\n\t\tResult[3][2] = - zNear / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH_NO(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(1);\n\t\tResult[0][0] = static_cast<T>(2) / (right - left);\n\t\tResult[1][1] = static_cast<T>(2) / (top - bottom);\n\t\tResult[2][2] = static_cast<T>(2) / (zFar - zNear);\n\t\tResult[3][0] = - (right + left) / (right - left);\n\t\tResult[3][1] = - (top + bottom) / (top - bottom);\n\t\tResult[3][2] = - (zFar + zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH_ZO(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(1);\n\t\tResult[0][0] = static_cast<T>(2) / (right - left);\n\t\tResult[1][1] = static_cast<T>(2) / (top - bottom);\n\t\tResult[2][2] = - static_cast<T>(1) / (zFar - zNear);\n\t\tResult[3][0] = - (right + left) / (right - left);\n\t\tResult[3][1] = - (top + bottom) / (top - bottom);\n\t\tResult[3][2] = - zNear / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH_NO(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(1);\n\t\tResult[0][0] = static_cast<T>(2) / (right - left);\n\t\tResult[1][1] = static_cast<T>(2) / (top - bottom);\n\t\tResult[2][2] = - static_cast<T>(2) / (zFar - zNear);\n\t\tResult[3][0] = - (right + left) / (right - left);\n\t\tResult[3][1] = - (top + bottom) / (top - bottom);\n\t\tResult[3][2] = - (zFar + zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoZO(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn orthoLH_ZO(left, right, bottom, top, zNear, zFar);\n#\t\telse\n\t\t\treturn orthoRH_ZO(left, right, bottom, top, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoNO(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn orthoLH_NO(left, right, bottom, top, zNear, zFar);\n#\t\telse\n\t\t\treturn orthoRH_NO(left, right, bottom, top, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn orthoLH_ZO(left, right, bottom, top, zNear, zFar);\n#\t\telse\n\t\t\treturn orthoLH_NO(left, right, bottom, top, zNear, zFar);\n#\t\tendif\n\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn orthoRH_ZO(left, right, bottom, top, zNear, zFar);\n#\t\telse\n\t\t\treturn orthoRH_NO(left, right, bottom, top, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> ortho(T left, T right, T bottom, T top, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO\n\t\t\treturn orthoLH_ZO(left, right, bottom, top, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO\n\t\t\treturn orthoLH_NO(left, right, bottom, top, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO\n\t\t\treturn orthoRH_ZO(left, right, bottom, top, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO\n\t\t\treturn orthoRH_NO(left, right, bottom, top, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH_ZO(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(0);\n\t\tResult[0][0] = (static_cast<T>(2) * nearVal) / (right - left);\n\t\tResult[1][1] = (static_cast<T>(2) * nearVal) / (top - bottom);\n\t\tResult[2][0] = -(right + left) / (right - left);\n\t\tResult[2][1] = -(top + bottom) / (top - bottom);\n\t\tResult[2][2] = farVal / (farVal - nearVal);\n\t\tResult[2][3] = static_cast<T>(1);\n\t\tResult[3][2] = -(farVal * nearVal) / (farVal - nearVal);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH_NO(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(0);\n\t\tResult[0][0] = (static_cast<T>(2) * nearVal) / (right - left);\n\t\tResult[1][1] = (static_cast<T>(2) * nearVal) / (top - bottom);\n\t\tResult[2][0] = -(right + left) / (right - left);\n\t\tResult[2][1] = -(top + bottom) / (top - bottom);\n\t\tResult[2][2] = (farVal + nearVal) / (farVal - nearVal);\n\t\tResult[2][3] = static_cast<T>(1);\n\t\tResult[3][2] = - (static_cast<T>(2) * farVal * nearVal) / (farVal - nearVal);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH_ZO(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(0);\n\t\tResult[0][0] = (static_cast<T>(2) * nearVal) / (right - left);\n\t\tResult[1][1] = (static_cast<T>(2) * nearVal) / (top - bottom);\n\t\tResult[2][0] = (right + left) / (right - left);\n\t\tResult[2][1] = (top + bottom) / (top - bottom);\n\t\tResult[2][2] = farVal / (nearVal - farVal);\n\t\tResult[2][3] = static_cast<T>(-1);\n\t\tResult[3][2] = -(farVal * nearVal) / (farVal - nearVal);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH_NO(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n\t\tmat<4, 4, T, defaultp> Result(0);\n\t\tResult[0][0] = (static_cast<T>(2) * nearVal) / (right - left);\n\t\tResult[1][1] = (static_cast<T>(2) * nearVal) / (top - bottom);\n\t\tResult[2][0] = (right + left) / (right - left);\n\t\tResult[2][1] = (top + bottom) / (top - bottom);\n\t\tResult[2][2] = - (farVal + nearVal) / (farVal - nearVal);\n\t\tResult[2][3] = static_cast<T>(-1);\n\t\tResult[3][2] = - (static_cast<T>(2) * farVal * nearVal) / (farVal - nearVal);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumZO(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn frustumLH_ZO(left, right, bottom, top, nearVal, farVal);\n#\t\telse\n\t\t\treturn frustumRH_ZO(left, right, bottom, top, nearVal, farVal);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumNO(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn frustumLH_NO(left, right, bottom, top, nearVal, farVal);\n#\t\telse\n\t\t\treturn frustumRH_NO(left, right, bottom, top, nearVal, farVal);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn frustumLH_ZO(left, right, bottom, top, nearVal, farVal);\n#\t\telse\n\t\t\treturn frustumLH_NO(left, right, bottom, top, nearVal, farVal);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn frustumRH_ZO(left, right, bottom, top, nearVal, farVal);\n#\t\telse\n\t\t\treturn frustumRH_NO(left, right, bottom, top, nearVal, farVal);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustum(T left, T right, T bottom, T top, T nearVal, T farVal)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO\n\t\t\treturn frustumLH_ZO(left, right, bottom, top, nearVal, farVal);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO\n\t\t\treturn frustumLH_NO(left, right, bottom, top, nearVal, farVal);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO\n\t\t\treturn frustumRH_ZO(left, right, bottom, top, nearVal, farVal);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO\n\t\t\treturn frustumRH_NO(left, right, bottom, top, nearVal, farVal);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH_ZO(T fovy, T aspect, T zNear, T zFar)\n\t{\n\t\tassert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0));\n\n\t\tT const tanHalfFovy = tan(fovy / static_cast<T>(2));\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = static_cast<T>(1) / (aspect * tanHalfFovy);\n\t\tResult[1][1] = static_cast<T>(1) / (tanHalfFovy);\n\t\tResult[2][2] = zFar / (zNear - zFar);\n\t\tResult[2][3] = - static_cast<T>(1);\n\t\tResult[3][2] = -(zFar * zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH_NO(T fovy, T aspect, T zNear, T zFar)\n\t{\n\t\tassert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0));\n\n\t\tT const tanHalfFovy = tan(fovy / static_cast<T>(2));\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = static_cast<T>(1) / (aspect * tanHalfFovy);\n\t\tResult[1][1] = static_cast<T>(1) / (tanHalfFovy);\n\t\tResult[2][2] = - (zFar + zNear) / (zFar - zNear);\n\t\tResult[2][3] = - static_cast<T>(1);\n\t\tResult[3][2] = - (static_cast<T>(2) * zFar * zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH_ZO(T fovy, T aspect, T zNear, T zFar)\n\t{\n\t\tassert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0));\n\n\t\tT const tanHalfFovy = tan(fovy / static_cast<T>(2));\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = static_cast<T>(1) / (aspect * tanHalfFovy);\n\t\tResult[1][1] = static_cast<T>(1) / (tanHalfFovy);\n\t\tResult[2][2] = zFar / (zFar - zNear);\n\t\tResult[2][3] = static_cast<T>(1);\n\t\tResult[3][2] = -(zFar * zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH_NO(T fovy, T aspect, T zNear, T zFar)\n\t{\n\t\tassert(abs(aspect - std::numeric_limits<T>::epsilon()) > static_cast<T>(0));\n\n\t\tT const tanHalfFovy = tan(fovy / static_cast<T>(2));\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = static_cast<T>(1) / (aspect * tanHalfFovy);\n\t\tResult[1][1] = static_cast<T>(1) / (tanHalfFovy);\n\t\tResult[2][2] = (zFar + zNear) / (zFar - zNear);\n\t\tResult[2][3] = static_cast<T>(1);\n\t\tResult[3][2] = - (static_cast<T>(2) * zFar * zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveZO(T fovy, T aspect, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn perspectiveLH_ZO(fovy, aspect, zNear, zFar);\n#\t\telse\n\t\t\treturn perspectiveRH_ZO(fovy, aspect, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveNO(T fovy, T aspect, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn perspectiveLH_NO(fovy, aspect, zNear, zFar);\n#\t\telse\n\t\t\treturn perspectiveRH_NO(fovy, aspect, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH(T fovy, T aspect, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn perspectiveLH_ZO(fovy, aspect, zNear, zFar);\n#\t\telse\n\t\t\treturn perspectiveLH_NO(fovy, aspect, zNear, zFar);\n#\t\tendif\n\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH(T fovy, T aspect, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn perspectiveRH_ZO(fovy, aspect, zNear, zFar);\n#\t\telse\n\t\t\treturn perspectiveRH_NO(fovy, aspect, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspective(T fovy, T aspect, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO\n\t\t\treturn perspectiveLH_ZO(fovy, aspect, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO\n\t\t\treturn perspectiveLH_NO(fovy, aspect, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO\n\t\t\treturn perspectiveRH_ZO(fovy, aspect, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO\n\t\t\treturn perspectiveRH_NO(fovy, aspect, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH_ZO(T fov, T width, T height, T zNear, T zFar)\n\t{\n\t\tassert(width > static_cast<T>(0));\n\t\tassert(height > static_cast<T>(0));\n\t\tassert(fov > static_cast<T>(0));\n\n\t\tT const rad = fov;\n\t\tT const h = glm::cos(static_cast<T>(0.5) * rad) / glm::sin(static_cast<T>(0.5) * rad);\n\t\tT const w = h * height / width; ///todo max(width , Height) / min(width , Height)?\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = w;\n\t\tResult[1][1] = h;\n\t\tResult[2][2] = zFar / (zNear - zFar);\n\t\tResult[2][3] = - static_cast<T>(1);\n\t\tResult[3][2] = -(zFar * zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH_NO(T fov, T width, T height, T zNear, T zFar)\n\t{\n\t\tassert(width > static_cast<T>(0));\n\t\tassert(height > static_cast<T>(0));\n\t\tassert(fov > static_cast<T>(0));\n\n\t\tT const rad = fov;\n\t\tT const h = glm::cos(static_cast<T>(0.5) * rad) / glm::sin(static_cast<T>(0.5) * rad);\n\t\tT const w = h * height / width; ///todo max(width , Height) / min(width , Height)?\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = w;\n\t\tResult[1][1] = h;\n\t\tResult[2][2] = - (zFar + zNear) / (zFar - zNear);\n\t\tResult[2][3] = - static_cast<T>(1);\n\t\tResult[3][2] = - (static_cast<T>(2) * zFar * zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH_ZO(T fov, T width, T height, T zNear, T zFar)\n\t{\n\t\tassert(width > static_cast<T>(0));\n\t\tassert(height > static_cast<T>(0));\n\t\tassert(fov > static_cast<T>(0));\n\n\t\tT const rad = fov;\n\t\tT const h = glm::cos(static_cast<T>(0.5) * rad) / glm::sin(static_cast<T>(0.5) * rad);\n\t\tT const w = h * height / width; ///todo max(width , Height) / min(width , Height)?\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = w;\n\t\tResult[1][1] = h;\n\t\tResult[2][2] = zFar / (zFar - zNear);\n\t\tResult[2][3] = static_cast<T>(1);\n\t\tResult[3][2] = -(zFar * zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH_NO(T fov, T width, T height, T zNear, T zFar)\n\t{\n\t\tassert(width > static_cast<T>(0));\n\t\tassert(height > static_cast<T>(0));\n\t\tassert(fov > static_cast<T>(0));\n\n\t\tT const rad = fov;\n\t\tT const h = glm::cos(static_cast<T>(0.5) * rad) / glm::sin(static_cast<T>(0.5) * rad);\n\t\tT const w = h * height / width; ///todo max(width , Height) / min(width , Height)?\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = w;\n\t\tResult[1][1] = h;\n\t\tResult[2][2] = (zFar + zNear) / (zFar - zNear);\n\t\tResult[2][3] = static_cast<T>(1);\n\t\tResult[3][2] = - (static_cast<T>(2) * zFar * zNear) / (zFar - zNear);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovZO(T fov, T width, T height, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn perspectiveFovLH_ZO(fov, width, height, zNear, zFar);\n#\t\telse\n\t\t\treturn perspectiveFovRH_ZO(fov, width, height, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovNO(T fov, T width, T height, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn perspectiveFovLH_NO(fov, width, height, zNear, zFar);\n#\t\telse\n\t\t\treturn perspectiveFovRH_NO(fov, width, height, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH(T fov, T width, T height, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn perspectiveFovLH_ZO(fov, width, height, zNear, zFar);\n#\t\telse\n\t\t\treturn perspectiveFovLH_NO(fov, width, height, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH(T fov, T width, T height, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn perspectiveFovRH_ZO(fov, width, height, zNear, zFar);\n#\t\telse\n\t\t\treturn perspectiveFovRH_NO(fov, width, height, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFov(T fov, T width, T height, T zNear, T zFar)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO\n\t\t\treturn perspectiveFovLH_ZO(fov, width, height, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO\n\t\t\treturn perspectiveFovLH_NO(fov, width, height, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO\n\t\t\treturn perspectiveFovRH_ZO(fov, width, height, zNear, zFar);\n#\t\telif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO\n\t\t\treturn perspectiveFovRH_NO(fov, width, height, zNear, zFar);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspectiveRH(T fovy, T aspect, T zNear)\n\t{\n\t\tT const range = tan(fovy / static_cast<T>(2)) * zNear;\n\t\tT const left = -range * aspect;\n\t\tT const right = range * aspect;\n\t\tT const bottom = -range;\n\t\tT const top = range;\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = (static_cast<T>(2) * zNear) / (right - left);\n\t\tResult[1][1] = (static_cast<T>(2) * zNear) / (top - bottom);\n\t\tResult[2][2] = - static_cast<T>(1);\n\t\tResult[2][3] = - static_cast<T>(1);\n\t\tResult[3][2] = - static_cast<T>(2) * zNear;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspectiveLH(T fovy, T aspect, T zNear)\n\t{\n\t\tT const range = tan(fovy / static_cast<T>(2)) * zNear;\n\t\tT const left = -range * aspect;\n\t\tT const right = range * aspect;\n\t\tT const bottom = -range;\n\t\tT const top = range;\n\n\t\tmat<4, 4, T, defaultp> Result(T(0));\n\t\tResult[0][0] = (static_cast<T>(2) * zNear) / (right - left);\n\t\tResult[1][1] = (static_cast<T>(2) * zNear) / (top - bottom);\n\t\tResult[2][2] = static_cast<T>(1);\n\t\tResult[2][3] = static_cast<T>(1);\n\t\tResult[3][2] = - static_cast<T>(2) * zNear;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspective(T fovy, T aspect, T zNear)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn infinitePerspectiveLH(fovy, aspect, zNear);\n#\t\telse\n\t\t\treturn infinitePerspectiveRH(fovy, aspect, zNear);\n#\t\tendif\n\t}\n\n\t// Infinite projection matrix: http://www.terathon.com/gdc07_lengyel.pdf\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear, T ep)\n\t{\n\t\tT const range = tan(fovy / static_cast<T>(2)) * zNear;\n\t\tT const left = -range * aspect;\n\t\tT const right = range * aspect;\n\t\tT const bottom = -range;\n\t\tT const top = range;\n\n\t\tmat<4, 4, T, defaultp> Result(static_cast<T>(0));\n\t\tResult[0][0] = (static_cast<T>(2) * zNear) / (right - left);\n\t\tResult[1][1] = (static_cast<T>(2) * zNear) / (top - bottom);\n\t\tResult[2][2] = ep - static_cast<T>(1);\n\t\tResult[2][3] = static_cast<T>(-1);\n\t\tResult[3][2] = (ep - static_cast<T>(2)) * zNear;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear)\n\t{\n\t\treturn tweakedInfinitePerspective(fovy, aspect, zNear, epsilon<T>());\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_common.hpp",
    "content": "/// @ref ext_matrix_common\n/// @file glm/ext/matrix_common.hpp\n///\n/// @defgroup ext_matrix_common GLM_EXT_matrix_common\n/// @ingroup ext\n///\n/// Defines functions for common matrix operations.\n///\n/// Include <glm/ext/matrix_common.hpp> to use the features of this extension.\n///\n/// @see ext_matrix_common\n\n#pragma once\n\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/_fixes.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_common extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_common\n\t/// @{\n\n\ttemplate<length_t C, length_t R, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL mat<C, R, T, Q> mix(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, mat<C, R, U, Q> const& a);\n\n\ttemplate<length_t C, length_t R, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL mat<C, R, T, Q> mix(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, U a);\n\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR mat<C, R, T, Q> abs(mat<C, R, T, Q> const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_common.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_common.inl",
    "content": "#include \"../matrix.hpp\"\n\n#include \"_matrix_vectorize.hpp\"\n\nnamespace glm\n{\n\ttemplate<length_t C, length_t R, typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<C, R, T, Q> mix(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, U a)\n\t{\n\t\treturn mat<C, R, U, Q>(x) * (static_cast<U>(1) - a) + mat<C, R, U, Q>(y) * a;\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<C, R, T, Q> mix(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, mat<C, R, U, Q> const& a)\n\t{\n\t\treturn matrixCompMult(mat<C, R, U, Q>(x), static_cast<U>(1) - a) + matrixCompMult(mat<C, R, U, Q>(y), a);\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool Aligned>\n\tstruct compute_abs_matrix\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static mat<C, R, T, Q> call(mat<C, R, T, Q> const& x)\n\t\t{\n\t\t\treturn detail::matrix_functor_1<mat, C, R, T, T, Q>::call(abs, x);\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR mat<C, R, T, Q> abs(mat<C, R, T, Q> const& x)\n\t{\n\t\treturn compute_abs_matrix<C, R, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double2x2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double2x2.hpp\n\n#pragma once\n#include \"../detail/type_mat2x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 2 columns of 2 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<2, 2, double, defaultp>\t\tdmat2x2;\n\n\t/// 2 columns of 2 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<2, 2, double, defaultp>\t\tdmat2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double2x2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double2x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, double, lowp>\t\tlowp_dmat2;\n\n\t/// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, double, mediump>\tmediump_dmat2;\n\n\t/// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, double, highp>\thighp_dmat2;\n\n\t/// 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, double, lowp>\t\tlowp_dmat2x2;\n\n\t/// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, double, mediump>\tmediump_dmat2x2;\n\n\t/// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, double, highp>\thighp_dmat2x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double2x3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double2x3.hpp\n\n#pragma once\n#include \"../detail/type_mat2x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 2 columns of 3 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<2, 3, double, defaultp>\t\tdmat2x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double2x3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double2x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 2 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 3, double, lowp>\t\tlowp_dmat2x3;\n\n\t/// 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 3, double, mediump>\tmediump_dmat2x3;\n\n\t/// 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 3, double, highp>\thighp_dmat2x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double2x4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double2x4.hpp\n\n#pragma once\n#include \"../detail/type_mat2x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 2 columns of 4 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<2, 4, double, defaultp>\t\tdmat2x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double2x4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double2x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 2 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 4, double, lowp>\t\tlowp_dmat2x4;\n\n\t/// 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 4, double, mediump>\tmediump_dmat2x4;\n\n\t/// 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 4, double, highp>\thighp_dmat2x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double3x2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double3x2.hpp\n\n#pragma once\n#include \"../detail/type_mat3x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 3 columns of 2 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<3, 2, double, defaultp>\t\tdmat3x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double3x2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double3x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 3 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 2, double, lowp>\t\tlowp_dmat3x2;\n\n\t/// 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 2, double, mediump>\tmediump_dmat3x2;\n\n\t/// 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 2, double, highp>\thighp_dmat3x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double3x3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double3x3.hpp\n\n#pragma once\n#include \"../detail/type_mat3x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 3 columns of 3 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<3, 3, double, defaultp>\t\tdmat3x3;\n\n\t/// 3 columns of 3 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<3, 3, double, defaultp>\t\tdmat3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double3x3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double3x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, double, lowp>\t\tlowp_dmat3;\n\n\t/// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, double, mediump>\tmediump_dmat3;\n\n\t/// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, double, highp>\thighp_dmat3;\n\n\t/// 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, double, lowp>\t\tlowp_dmat3x3;\n\n\t/// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, double, mediump>\tmediump_dmat3x3;\n\n\t/// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, double, highp>\thighp_dmat3x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double3x4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double3x4.hpp\n\n#pragma once\n#include \"../detail/type_mat3x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 3 columns of 4 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<3, 4, double, defaultp>\t\tdmat3x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double3x4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double3x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 4, double, lowp>\t\tlowp_dmat3x4;\n\n\t/// 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 4, double, mediump>\tmediump_dmat3x4;\n\n\t/// 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 4, double, highp>\thighp_dmat3x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double4x2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double4x2.hpp\n\n#pragma once\n#include \"../detail/type_mat4x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 4 columns of 2 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<4, 2, double, defaultp>\t\tdmat4x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double4x2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double4x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat4x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 4 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 2, double, lowp>\t\tlowp_dmat4x2;\n\n\t/// 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 2, double, mediump>\tmediump_dmat4x2;\n\n\t/// 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 2, double, highp>\thighp_dmat4x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double4x3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double4x3.hpp\n\n#pragma once\n#include \"../detail/type_mat4x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 4 columns of 3 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<4, 3, double, defaultp>\t\tdmat4x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double4x3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double4x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat4x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 3, double, lowp>\t\tlowp_dmat4x3;\n\n\t/// 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 3, double, mediump>\tmediump_dmat4x3;\n\n\t/// 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 3, double, highp>\thighp_dmat4x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double4x4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double4x4.hpp\n\n#pragma once\n#include \"../detail/type_mat4x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 4 columns of 4 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<4, 4, double, defaultp>\t\tdmat4x4;\n\n\t/// 4 columns of 4 components matrix of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<4, 4, double, defaultp>\t\tdmat4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_double4x4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_double4x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat4x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, double, lowp>\t\tlowp_dmat4;\n\n\t/// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, double, mediump>\tmediump_dmat4;\n\n\t/// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, double, highp>\thighp_dmat4;\n\n\t/// 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, double, lowp>\t\tlowp_dmat4x4;\n\n\t/// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, double, mediump>\tmediump_dmat4x4;\n\n\t/// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, double, highp>\thighp_dmat4x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float2x2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float2x2.hpp\n\n#pragma once\n#include \"../detail/type_mat2x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 2 columns of 2 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<2, 2, float, defaultp>\t\tmat2x2;\n\n\t/// 2 columns of 2 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<2, 2, float, defaultp>\t\tmat2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float2x2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float2x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, float, lowp>\t\tlowp_mat2;\n\n\t/// 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, float, mediump>\tmediump_mat2;\n\n\t/// 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, float, highp>\t\thighp_mat2;\n\n\t/// 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, float, lowp>\t\tlowp_mat2x2;\n\n\t/// 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, float, mediump>\tmediump_mat2x2;\n\n\t/// 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 2, float, highp>\t\thighp_mat2x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float2x3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float2x3.hpp\n\n#pragma once\n#include \"../detail/type_mat2x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 2 columns of 3 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<2, 3, float, defaultp>\t\tmat2x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float2x3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float2x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 2 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 3, float, lowp>\t\tlowp_mat2x3;\n\n\t/// 2 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 3, float, mediump>\tmediump_mat2x3;\n\n\t/// 2 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 3, float, highp>\t\thighp_mat2x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float2x4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float2x4.hpp\n\n#pragma once\n#include \"../detail/type_mat2x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 2 columns of 4 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<2, 4, float, defaultp>\t\tmat2x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float2x4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float2x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 2 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 4, float, lowp>\t\tlowp_mat2x4;\n\n\t/// 2 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 4, float, mediump>\tmediump_mat2x4;\n\n\t/// 2 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<2, 4, float, highp>\t\thighp_mat2x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float3x2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float3x2.hpp\n\n#pragma once\n#include \"../detail/type_mat3x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 3 columns of 2 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<3, 2, float, defaultp>\t\t\tmat3x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float3x2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float3x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 3 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 2, float, lowp>\t\tlowp_mat3x2;\n\n\t/// 3 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 2, float, mediump>\tmediump_mat3x2;\n\n\t/// 3 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 2, float, highp>\t\thighp_mat3x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float3x3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float3x3.hpp\n\n#pragma once\n#include \"../detail/type_mat3x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 3 columns of 3 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<3, 3, float, defaultp>\t\t\tmat3x3;\n\n\t/// 3 columns of 3 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<3, 3, float, defaultp>\t\t\tmat3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float3x3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float3x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, float, lowp>\t\tlowp_mat3;\n\n\t/// 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, float, mediump>\tmediump_mat3;\n\n\t/// 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, float, highp>\t\thighp_mat3;\n\n\t/// 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, float, lowp>\t\tlowp_mat3x3;\n\n\t/// 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, float, mediump>\tmediump_mat3x3;\n\n\t/// 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 3, float, highp>\t\thighp_mat3x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float3x4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float3x4.hpp\n\n#pragma once\n#include \"../detail/type_mat3x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 3 columns of 4 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<3, 4, float, defaultp>\t\t\tmat3x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float3x4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float3x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat3x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 3 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 4, float, lowp>\t\tlowp_mat3x4;\n\n\t/// 3 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 4, float, mediump>\tmediump_mat3x4;\n\n\t/// 3 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<3, 4, float, highp>\t\thighp_mat3x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float4x2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float4x2.hpp\n\n#pragma once\n#include \"../detail/type_mat4x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 4 columns of 2 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<4, 2, float, defaultp>\t\t\tmat4x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float4x2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float2x2_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat2x2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 4 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 2, float, lowp>\t\tlowp_mat4x2;\n\n\t/// 4 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 2, float, mediump>\tmediump_mat4x2;\n\n\t/// 4 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 2, float, highp>\t\thighp_mat4x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float4x3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float4x3.hpp\n\n#pragma once\n#include \"../detail/type_mat4x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix\n\t/// @{\n\n\t/// 4 columns of 3 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<4, 3, float, defaultp>\t\t\tmat4x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float4x3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float4x3_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat4x3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 4 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 3, float, lowp>\t\tlowp_mat4x3;\n\n\t/// 4 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 3, float, mediump>\tmediump_mat4x3;\n\n\t/// 4 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 3, float, highp>\t\thighp_mat4x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float4x4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float4x4.hpp\n\n#pragma once\n#include \"../detail/type_mat4x4.hpp\"\n\nnamespace glm\n{\n\t/// @ingroup core_matrix\n\t/// @{\n\n\t/// 4 columns of 4 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<4, 4, float, defaultp>\t\t\tmat4x4;\n\n\t/// 4 columns of 4 components matrix of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\ttypedef mat<4, 4, float, defaultp>\t\t\tmat4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_float4x4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/matrix_float4x4_precision.hpp\n\n#pragma once\n#include \"../detail/type_mat4x4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_matrix_precision\n\t/// @{\n\n\t/// 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, float, lowp>\t\tlowp_mat4;\n\n\t/// 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, float, mediump>\tmediump_mat4;\n\n\t/// 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, float, highp>\t\thighp_mat4;\n\n\t/// 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, float, lowp>\t\tlowp_mat4x4;\n\n\t/// 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, float, mediump>\tmediump_mat4x4;\n\n\t/// 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.6 Matrices</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef mat<4, 4, float, highp>\t\thighp_mat4x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int2x2.hpp",
    "content": "/// @ref ext_matrix_int2x2\n/// @file glm/ext/matrix_int2x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int2x2 GLM_EXT_matrix_int2x2\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int2x2.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x2.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int2x2 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int2x2\n\t/// @{\n\n\t/// Signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2\n\ttypedef mat<2, 2, int, defaultp>\timat2x2;\n\n\t/// Signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2\n\ttypedef mat<2, 2, int, defaultp>\timat2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int2x2_sized.hpp",
    "content": "/// @ref ext_matrix_int2x2_sized\n/// @file glm/ext/matrix_int2x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int2x2_sized GLM_EXT_matrix_int2x2_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int2x2_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x2.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int2x2_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int2x2_sized\n\t/// @{\n\n\t/// 8 bit signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2_sized\n\ttypedef mat<2, 2, int8, defaultp>\t\t\t\ti8mat2x2;\n\n\t/// 16 bit signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2_sized\n\ttypedef mat<2, 2, int16, defaultp>\t\t\t\ti16mat2x2;\n\n\t/// 32 bit signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2_sized\n\ttypedef mat<2, 2, int32, defaultp>\t\t\t\ti32mat2x2;\n\n\t/// 64 bit signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2_sized\n\ttypedef mat<2, 2, int64, defaultp>\t\t\t\ti64mat2x2;\n\n\n\t/// 8 bit signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2_sized\n\ttypedef mat<2, 2, int8, defaultp>\t\t\t\ti8mat2;\n\n\t/// 16 bit signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2_sized\n\ttypedef mat<2, 2, int16, defaultp>\t\t\t\ti16mat2;\n\n\t/// 32 bit signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2_sized\n\ttypedef mat<2, 2, int32, defaultp>\t\t\t\ti32mat2;\n\n\t/// 64 bit signed integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_int2x2_sized\n\ttypedef mat<2, 2, int64, defaultp>\t\t\t\ti64mat2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int2x3.hpp",
    "content": "/// @ref ext_matrix_int2x3\n/// @file glm/ext/matrix_int2x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int2x3 GLM_EXT_matrix_int2x3\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int2x3.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x3.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int2x3 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int2x3\n\t/// @{\n\n\t/// Signed integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_int2x3\n\ttypedef mat<2, 3, int, defaultp>\timat2x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int2x3_sized.hpp",
    "content": "/// @ref ext_matrix_int2x3_sized\n/// @file glm/ext/matrix_int2x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int2x3_sized GLM_EXT_matrix_int2x3_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int2x3_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x3.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int2x3_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int2x3_sized\n\t/// @{\n\n\t/// 8 bit signed integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_int2x3_sized\n\ttypedef mat<2, 3, int8, defaultp>\t\t\t\ti8mat2x3;\n\n\t/// 16 bit signed integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_int2x3_sized\n\ttypedef mat<2, 3, int16, defaultp>\t\t\t\ti16mat2x3;\n\n\t/// 32 bit signed integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_int2x3_sized\n\ttypedef mat<2, 3, int32, defaultp>\t\t\t\ti32mat2x3;\n\n\t/// 64 bit signed integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_int2x3_sized\n\ttypedef mat<2, 3, int64, defaultp>\t\t\t\ti64mat2x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int2x4.hpp",
    "content": "/// @ref ext_matrix_int2x4\n/// @file glm/ext/matrix_int2x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int2x4 GLM_EXT_matrix_int2x4\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int2x4.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int2x4 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int2x4\n\t/// @{\n\n\t/// Signed integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_int2x4\n\ttypedef mat<2, 4, int, defaultp>\timat2x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int2x4_sized.hpp",
    "content": "/// @ref ext_matrix_int2x4_sized\n/// @file glm/ext/matrix_int2x4_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int2x4_sized GLM_EXT_matrix_int2x4_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int2x4_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x4.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int2x4_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int2x4_sized\n\t/// @{\n\n\t/// 8 bit signed integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_int2x4_sized\n\ttypedef mat<2, 4, int8, defaultp>\t\t\t\ti8mat2x4;\n\n\t/// 16 bit signed integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_int2x4_sized\n\ttypedef mat<2, 4, int16, defaultp>\t\t\t\ti16mat2x4;\n\n\t/// 32 bit signed integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_int2x4_sized\n\ttypedef mat<2, 4, int32, defaultp>\t\t\t\ti32mat2x4;\n\n\t/// 64 bit signed integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_int2x4_sized\n\ttypedef mat<2, 4, int64, defaultp>\t\t\t\ti64mat2x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int3x2.hpp",
    "content": "/// @ref ext_matrix_int3x2\n/// @file glm/ext/matrix_int3x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int3x2 GLM_EXT_matrix_int3x2\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int3x2.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x2.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int3x2 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int3x2\n\t/// @{\n\n\t/// Signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_int3x2\n\ttypedef mat<3, 2, int, defaultp>\timat3x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int3x2_sized.hpp",
    "content": "/// @ref ext_matrix_int3x2_sized\n/// @file glm/ext/matrix_int3x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int3x2_sized GLM_EXT_matrix_int3x2_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int3x2_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x2.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int3x2_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int3x2_sized\n\t/// @{\n\n\t/// 8 bit signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_int3x2_sized\n\ttypedef mat<3, 2, int8, defaultp>\t\t\t\ti8mat3x2;\n\n\t/// 16 bit signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_int3x2_sized\n\ttypedef mat<3, 2, int16, defaultp>\t\t\t\ti16mat3x2;\n\n\t/// 32 bit signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_int3x2_sized\n\ttypedef mat<3, 2, int32, defaultp>\t\t\t\ti32mat3x2;\n\n\t/// 64 bit signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_int3x2_sized\n\ttypedef mat<3, 2, int64, defaultp>\t\t\t\ti64mat3x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int3x3.hpp",
    "content": "/// @ref ext_matrix_int3x3\n/// @file glm/ext/matrix_int3x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int3x3 GLM_EXT_matrix_int3x3\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int3x3.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x3.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int3x3 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int3x3\n\t/// @{\n\n\t/// Signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3\n\ttypedef mat<3, 3, int, defaultp>\timat3x3;\n\n\t/// Signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3\n\ttypedef mat<3, 3, int, defaultp>\timat3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int3x3_sized.hpp",
    "content": "/// @ref ext_matrix_int3x3_sized\n/// @file glm/ext/matrix_int3x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int3x3_sized GLM_EXT_matrix_int3x3_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int3x3_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x3.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int3x3_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int3x3_sized\n\t/// @{\n\n\t/// 8 bit signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3_sized\n\ttypedef mat<3, 3, int8, defaultp>\t\t\t\ti8mat3x3;\n\n\t/// 16 bit signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3_sized\n\ttypedef mat<3, 3, int16, defaultp>\t\t\t\ti16mat3x3;\n\n\t/// 32 bit signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3_sized\n\ttypedef mat<3, 3, int32, defaultp>\t\t\t\ti32mat3x3;\n\n\t/// 64 bit signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3_sized\n\ttypedef mat<3, 3, int64, defaultp>\t\t\t\ti64mat3x3;\n\n\n\t/// 8 bit signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3_sized\n\ttypedef mat<3, 3, int8, defaultp>\t\t\t\ti8mat3;\n\n\t/// 16 bit signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3_sized\n\ttypedef mat<3, 3, int16, defaultp>\t\t\t\ti16mat3;\n\n\t/// 32 bit signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3_sized\n\ttypedef mat<3, 3, int32, defaultp>\t\t\t\ti32mat3;\n\n\t/// 64 bit signed integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_int3x3_sized\n\ttypedef mat<3, 3, int64, defaultp>\t\t\t\ti64mat3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int3x4.hpp",
    "content": "/// @ref ext_matrix_int3x4\n/// @file glm/ext/matrix_int3x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int3x4 GLM_EXT_matrix_int3x4\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int3x4.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int3x4 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int3x4\n\t/// @{\n\n\t/// Signed integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_int3x4\n\ttypedef mat<3, 4, int, defaultp>\timat3x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int3x4_sized.hpp",
    "content": "/// @ref ext_matrix_int3x4_sized\n/// @file glm/ext/matrix_int3x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int3x4_sized GLM_EXT_matrix_int3x4_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int3x4_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x4.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int3x4_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int3x4_sized\n\t/// @{\n\n\t/// 8 bit signed integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_int3x4_sized\n\ttypedef mat<3, 4, int8, defaultp>\t\t\t\ti8mat3x4;\n\n\t/// 16 bit signed integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_int3x4_sized\n\ttypedef mat<3, 4, int16, defaultp>\t\t\t\ti16mat3x4;\n\n\t/// 32 bit signed integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_int3x4_sized\n\ttypedef mat<3, 4, int32, defaultp>\t\t\t\ti32mat3x4;\n\n\t/// 64 bit signed integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_int3x4_sized\n\ttypedef mat<3, 4, int64, defaultp>\t\t\t\ti64mat3x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int4x2.hpp",
    "content": "/// @ref ext_matrix_int4x2\n/// @file glm/ext/matrix_int4x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int4x2 GLM_EXT_matrix_int4x2\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int4x2.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x2.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int4x2 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int4x2\n\t/// @{\n\n\t/// Signed integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_int4x2\n\ttypedef mat<4, 2, int, defaultp>\timat4x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int4x2_sized.hpp",
    "content": "/// @ref ext_matrix_int4x2_sized\n/// @file glm/ext/matrix_int4x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int4x2_sized GLM_EXT_matrix_int4x2_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int4x2_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x2.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int4x2_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int4x2_sized\n\t/// @{\n\n\t/// 8 bit signed integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_int4x2_sized\n\ttypedef mat<4, 2, int8, defaultp>\t\t\t\ti8mat4x2;\n\n\t/// 16 bit signed integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_int4x2_sized\n\ttypedef mat<4, 2, int16, defaultp>\t\t\t\ti16mat4x2;\n\n\t/// 32 bit signed integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_int4x2_sized\n\ttypedef mat<4, 2, int32, defaultp>\t\t\t\ti32mat4x2;\n\n\t/// 64 bit signed integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_int4x2_sized\n\ttypedef mat<4, 2, int64, defaultp>\t\t\t\ti64mat4x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int4x3.hpp",
    "content": "/// @ref ext_matrix_int4x3\n/// @file glm/ext/matrix_int4x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int4x3 GLM_EXT_matrix_int4x3\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int4x3.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x3.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int4x3 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int4x3\n\t/// @{\n\n\t/// Signed integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_int4x3\n\ttypedef mat<4, 3, int, defaultp>\timat4x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int4x3_sized.hpp",
    "content": "/// @ref ext_matrix_int4x3_sized\n/// @file glm/ext/matrix_int4x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int4x3_sized GLM_EXT_matrix_int4x3_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int4x3_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x3.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int4x3_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int4x3_sized\n\t/// @{\n\n\t/// 8 bit signed integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_int4x3_sized\n\ttypedef mat<4, 3, int8, defaultp>\t\t\t\ti8mat4x3;\n\n\t/// 16 bit signed integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_int4x3_sized\n\ttypedef mat<4, 3, int16, defaultp>\t\t\t\ti16mat4x3;\n\n\t/// 32 bit signed integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_int4x3_sized\n\ttypedef mat<4, 3, int32, defaultp>\t\t\t\ti32mat4x3;\n\n\t/// 64 bit signed integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_int4x3_sized\n\ttypedef mat<4, 3, int64, defaultp>\t\t\t\ti64mat4x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int4x4.hpp",
    "content": "/// @ref ext_matrix_int4x4\n/// @file glm/ext/matrix_int4x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int4x4 GLM_EXT_matrix_int4x4\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int4x4.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int4x4 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int4x4\n\t/// @{\n\n\t/// Signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4\n\ttypedef mat<4, 4, int, defaultp>\timat4x4;\n\n\t/// Signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4\n\ttypedef mat<4, 4, int, defaultp>\timat4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_int4x4_sized.hpp",
    "content": "/// @ref ext_matrix_int4x4_sized\n/// @file glm/ext/matrix_int4x4_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_int4x4_sized GLM_EXT_matrix_int4x4_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_int4x4_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x4.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_int4x4_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_int4x4_sized\n\t/// @{\n\n\t/// 8 bit signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4_sized\n\ttypedef mat<4, 4, int8, defaultp>\t\t\t\ti8mat4x4;\n\n\t/// 16 bit signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4_sized\n\ttypedef mat<4, 4, int16, defaultp>\t\t\t\ti16mat4x4;\n\n\t/// 32 bit signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4_sized\n\ttypedef mat<4, 4, int32, defaultp>\t\t\t\ti32mat4x4;\n\n\t/// 64 bit signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4_sized\n\ttypedef mat<4, 4, int64, defaultp>\t\t\t\ti64mat4x4;\n\n\n\t/// 8 bit signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4_sized\n\ttypedef mat<4, 4, int8, defaultp>\t\t\t\ti8mat4;\n\n\t/// 16 bit signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4_sized\n\ttypedef mat<4, 4, int16, defaultp>\t\t\t\ti16mat4;\n\n\t/// 32 bit signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4_sized\n\ttypedef mat<4, 4, int32, defaultp>\t\t\t\ti32mat4;\n\n\t/// 64 bit signed integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_int4x4_sized\n\ttypedef mat<4, 4, int64, defaultp>\t\t\t\ti64mat4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_integer.hpp",
    "content": "/// @ref ext_matrix_integer\n/// @file glm/ext/matrix_integer.hpp\n///\n/// @defgroup ext_matrix_integer GLM_EXT_matrix_integer\n/// @ingroup ext\n///\n/// Defines functions that generate common transformation matrices.\n///\n/// The matrices generated by this extension use standard OpenGL fixed-function\n/// conventions. For example, the lookAt function generates a transform from world\n/// space into the specific eye space that the projective matrix functions\n/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility\n/// specifications defines the particular layout of this eye space.\n///\n/// Include <glm/ext/matrix_integer.hpp> to use the features of this extension.\n///\n/// @see ext_matrix_projection\n/// @see ext_matrix_clip_space\n\n#pragma once\n\n// Dependencies\n#include \"../gtc/constants.hpp\"\n#include \"../geometric.hpp\"\n#include \"../trigonometric.hpp\"\n#include \"../matrix.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_integer extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_integer\n\t/// @{\n\n\t /// Multiply matrix x by matrix y component-wise, i.e.,\n\t /// result[i][j] is the scalar product of x[i][j] and y[i][j].\n\t ///\n\t /// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t /// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t /// @tparam T Floating-point or signed integer scalar types\n\t /// @tparam Q Value from qualifier enum\n\t ///\n\t /// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/matrixCompMult.xml\">GLSL matrixCompMult man page</a>\n\t /// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<C, R, T, Q> matrixCompMult(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y);\n\n\t/// Treats the first parameter c as a column vector\n\t/// and the second parameter r as a row vector\n\t/// and does a linear algebraic matrix multiply c * r.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t/// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t/// @tparam T Floating-point or signed integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/outerProduct.xml\">GLSL outerProduct man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL typename detail::outerProduct_trait<C, R, T, Q>::type outerProduct(vec<C, T, Q> const& c, vec<R, T, Q> const& r);\n\n\t/// Returns the transposed matrix of x\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t/// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t/// @tparam T Floating-point or signed integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/transpose.xml\">GLSL transpose man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<C, R, T, Q>::transpose_type transpose(mat<C, R, T, Q> const& x);\n\n\t/// Return the determinant of a squared matrix.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t/// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t/// @tparam T Floating-point or signed integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml\">GLSL determinant man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL T determinant(mat<C, R, T, Q> const& m);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_integer.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_integer.inl",
    "content": "namespace glm{\nnamespace detail\n{\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool Aligned>\n\tstruct compute_matrixCompMult_type<C, R, T, Q, false, Aligned> {\n\t\tGLM_FUNC_QUALIFIER static mat<C, R, T, Q> call(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y)\n\t\t{\n\t\t\treturn detail::compute_matrixCompMult<C, R, T, Q, detail::is_aligned<Q>::value>::call(x, y);\n\t\t}\n\t};\n\n\ttemplate<length_t DA, length_t DB, typename T, qualifier Q>\n\tstruct compute_outerProduct_type<DA, DB, T, Q, false> {\n\t\tGLM_FUNC_QUALIFIER static typename detail::outerProduct_trait<DA, DB, T, Q>::type call(vec<DA, T, Q> const& c, vec<DB, T, Q> const& r)\n\t\t{\n\t\t\treturn detail::compute_outerProduct<DA, DB, T, Q>::call(c, r);\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool Aligned>\n\tstruct compute_transpose_type<C, R, T, Q, false, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static mat<R, C, T, Q> call(mat<C, R, T, Q> const& m)\n\t\t{\n\t\t\treturn detail::compute_transpose<C, R, T, Q, detail::is_aligned<Q>::value>::call(m);\n\t\t}\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, bool Aligned>\n\tstruct compute_determinant_type<C, R, T, Q, false, Aligned>{\n\t\n\t\tGLM_FUNC_QUALIFIER static T call(mat<C, R, T, Q> const& m)\n\t\t{\n\t\t\treturn detail::compute_determinant<C, R, T, Q, detail::is_aligned<Q>::value>::call(m);\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_projection.hpp",
    "content": "/// @ref ext_matrix_projection\n/// @file glm/ext/matrix_projection.hpp\n///\n/// @defgroup ext_matrix_projection GLM_EXT_matrix_projection\n/// @ingroup ext\n///\n/// Functions that generate common projection transformation matrices.\n///\n/// The matrices generated by this extension use standard OpenGL fixed-function\n/// conventions. For example, the lookAt function generates a transform from world\n/// space into the specific eye space that the projective matrix functions\n/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility\n/// specifications defines the particular layout of this eye space.\n///\n/// Include <glm/ext/matrix_projection.hpp> to use the features of this extension.\n///\n/// @see ext_matrix_transform\n/// @see ext_matrix_clip_space\n\n#pragma once\n\n// Dependencies\n#include \"../gtc/constants.hpp\"\n#include \"../geometric.hpp\"\n#include \"../trigonometric.hpp\"\n#include \"../matrix.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_projection extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_projection\n\t/// @{\n\n\t/// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @param obj Specify the object coordinates.\n\t/// @param model Specifies the current modelview matrix\n\t/// @param proj Specifies the current projection matrix\n\t/// @param viewport Specifies the current viewport\n\t/// @return Return the computed window coordinates.\n\t/// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double.\n\t/// @tparam U Currently supported: Floating-point types and integer types.\n\t///\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluProject.xml\">gluProject man page</a>\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> projectZO(\n\t\tvec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);\n\n\t/// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param obj Specify the object coordinates.\n\t/// @param model Specifies the current modelview matrix\n\t/// @param proj Specifies the current projection matrix\n\t/// @param viewport Specifies the current viewport\n\t/// @return Return the computed window coordinates.\n\t/// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double.\n\t/// @tparam U Currently supported: Floating-point types and integer types.\n\t///\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluProject.xml\">gluProject man page</a>\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> projectNO(\n\t\tvec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);\n\n\t/// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near and far clip planes definition.\n\t/// To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.\n\t///\n\t/// @param obj Specify the object coordinates.\n\t/// @param model Specifies the current modelview matrix\n\t/// @param proj Specifies the current projection matrix\n\t/// @param viewport Specifies the current viewport\n\t/// @return Return the computed window coordinates.\n\t/// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double.\n\t/// @tparam U Currently supported: Floating-point types and integer types.\n\t///\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluProject.xml\">gluProject man page</a>\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> project(\n\t\tvec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);\n\n\t/// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition)\n\t///\n\t/// @param win Specify the window coordinates to be mapped.\n\t/// @param model Specifies the modelview matrix\n\t/// @param proj Specifies the projection matrix\n\t/// @param viewport Specifies the viewport\n\t/// @return Returns the computed object coordinates.\n\t/// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double.\n\t/// @tparam U Currently supported: Floating-point types and integer types.\n\t///\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluUnProject.xml\">gluUnProject man page</a>\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> unProjectZO(\n\t\tvec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);\n\n\t/// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates.\n\t/// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition)\n\t///\n\t/// @param win Specify the window coordinates to be mapped.\n\t/// @param model Specifies the modelview matrix\n\t/// @param proj Specifies the projection matrix\n\t/// @param viewport Specifies the viewport\n\t/// @return Returns the computed object coordinates.\n\t/// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double.\n\t/// @tparam U Currently supported: Floating-point types and integer types.\n\t///\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluUnProject.xml\">gluUnProject man page</a>\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> unProjectNO(\n\t\tvec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);\n\n\t/// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near and far clip planes definition.\n\t/// To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE.\n\t///\n\t/// @param win Specify the window coordinates to be mapped.\n\t/// @param model Specifies the modelview matrix\n\t/// @param proj Specifies the projection matrix\n\t/// @param viewport Specifies the viewport\n\t/// @return Returns the computed object coordinates.\n\t/// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double.\n\t/// @tparam U Currently supported: Floating-point types and integer types.\n\t///\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluUnProject.xml\">gluUnProject man page</a>\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> unProject(\n\t\tvec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport);\n\n\t/// Define a picking region\n\t///\n\t/// @param center Specify the center of a picking region in window coordinates.\n\t/// @param delta Specify the width and height, respectively, of the picking region in window coordinates.\n\t/// @param viewport Rendering viewport\n\t/// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double.\n\t/// @tparam U Currently supported: Floating-point types and integer types.\n\t///\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluPickMatrix.xml\">gluPickMatrix man page</a>\n\ttemplate<typename T, qualifier Q, typename U>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> pickMatrix(\n\t\tvec<2, T, Q> const& center, vec<2, T, Q> const& delta, vec<4, U, Q> const& viewport);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_projection.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_projection.inl",
    "content": "namespace glm\n{\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> projectZO(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport)\n\t{\n\t\tvec<4, T, Q> tmp = vec<4, T, Q>(obj, static_cast<T>(1));\n\t\ttmp = model * tmp;\n\t\ttmp = proj * tmp;\n\n\t\ttmp /= tmp.w;\n\t\ttmp.x = tmp.x * static_cast<T>(0.5) + static_cast<T>(0.5);\n\t\ttmp.y = tmp.y * static_cast<T>(0.5) + static_cast<T>(0.5);\n\n\t\ttmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]);\n\t\ttmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]);\n\n\t\treturn vec<3, T, Q>(tmp);\n\t}\n\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> projectNO(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport)\n\t{\n\t\tvec<4, T, Q> tmp = vec<4, T, Q>(obj, static_cast<T>(1));\n\t\ttmp = model * tmp;\n\t\ttmp = proj * tmp;\n\n\t\ttmp /= tmp.w;\n\t\ttmp = tmp * static_cast<T>(0.5) + static_cast<T>(0.5);\n\t\ttmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]);\n\t\ttmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]);\n\n\t\treturn vec<3, T, Q>(tmp);\n\t}\n\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> project(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn projectZO(obj, model, proj, viewport);\n#\t\telse\n\t\t\treturn projectNO(obj, model, proj, viewport);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> unProjectZO(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport)\n\t{\n\t\tmat<4, 4, T, Q> Inverse = inverse(proj * model);\n\n\t\tvec<4, T, Q> tmp = vec<4, T, Q>(win, T(1));\n\t\ttmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]);\n\t\ttmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]);\n\t\ttmp.x = tmp.x * static_cast<T>(2) - static_cast<T>(1);\n\t\ttmp.y = tmp.y * static_cast<T>(2) - static_cast<T>(1);\n\n\t\tvec<4, T, Q> obj = Inverse * tmp;\n\t\tobj /= obj.w;\n\n\t\treturn vec<3, T, Q>(obj);\n\t}\n\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> unProjectNO(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport)\n\t{\n\t\tmat<4, 4, T, Q> Inverse = inverse(proj * model);\n\n\t\tvec<4, T, Q> tmp = vec<4, T, Q>(win, T(1));\n\t\ttmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]);\n\t\ttmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]);\n\t\ttmp = tmp * static_cast<T>(2) - static_cast<T>(1);\n\n\t\tvec<4, T, Q> obj = Inverse * tmp;\n\t\tobj /= obj.w;\n\n\t\treturn vec<3, T, Q>(obj);\n\t}\n\n\ttemplate<typename T, typename U, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> unProject(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT\n\t\t\treturn unProjectZO(win, model, proj, viewport);\n#\t\telse\n\t\t\treturn unProjectNO(win, model, proj, viewport);\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q, typename U>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> pickMatrix(vec<2, T, Q> const& center, vec<2, T, Q> const& delta, vec<4, U, Q> const& viewport)\n\t{\n\t\tassert(delta.x > static_cast<T>(0) && delta.y > static_cast<T>(0));\n\t\tmat<4, 4, T, Q> Result(static_cast<T>(1));\n\n\t\tif(!(delta.x > static_cast<T>(0) && delta.y > static_cast<T>(0)))\n\t\t\treturn Result; // Error\n\n\t\tvec<3, T, Q> Temp(\n\t\t\t(static_cast<T>(viewport[2]) - static_cast<T>(2) * (center.x - static_cast<T>(viewport[0]))) / delta.x,\n\t\t\t(static_cast<T>(viewport[3]) - static_cast<T>(2) * (center.y - static_cast<T>(viewport[1]))) / delta.y,\n\t\t\tstatic_cast<T>(0));\n\n\t\t// Translate and scale the picked region to the entire window\n\t\tResult = translate(Result, Temp);\n\t\treturn scale(Result, vec<3, T, Q>(static_cast<T>(viewport[2]) / delta.x, static_cast<T>(viewport[3]) / delta.y, static_cast<T>(1)));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_relational.hpp",
    "content": "/// @ref ext_matrix_relational\n/// @file glm/ext/matrix_relational.hpp\n///\n/// @defgroup ext_matrix_relational GLM_EXT_matrix_relational\n/// @ingroup ext\n///\n/// Exposes comparison functions for matrix types that take a user defined epsilon values.\n///\n/// Include <glm/ext/matrix_relational.hpp> to use the features of this extension.\n///\n/// @see ext_vector_relational\n/// @see ext_scalar_relational\n/// @see ext_quaternion_relational\n\n#pragma once\n\n// Dependencies\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_relational extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_relational\n\t/// @{\n\n\t/// Perform a component-wise equal-to comparison of two matrices.\n\t/// Return a boolean vector which components value is True if this expression is satisfied per column of the matrices.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y);\n\n\t/// Perform a component-wise not-equal-to comparison of two matrices.\n\t/// Return a boolean vector which components value is True if this expression is satisfied per column of the matrices.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y);\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, T epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, vec<C, T, Q> const& epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, T epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| >= epsilon.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, vec<C, T, Q> const& epsilon);\n\n\t/// Returns the component-wise comparison between two vectors in term of ULPs.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, int ULPs);\n\n\t/// Returns the component-wise comparison between two vectors in term of ULPs.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, vec<C, int, Q> const& ULPs);\n\n\t/// Returns the component-wise comparison between two vectors in term of ULPs.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, int ULPs);\n\n\t/// Returns the component-wise comparison between two vectors in term of ULPs.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix\n\t/// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y, vec<C, int, Q> const& ULPs);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_relational.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_relational.inl",
    "content": "/// @ref ext_vector_relational\n/// @file glm/ext/vector_relational.inl\n\n// Dependency:\n#include \"../ext/vector_relational.hpp\"\n#include \"../common.hpp\"\n\nnamespace glm\n{\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b)\n\t{\n\t\tvec<C, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < C; ++i)\n\t\t\tResult[i] = all(equal(a[i], b[i]));\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b, T Epsilon)\n\t{\n\t\treturn equal(a, b, vec<C, T, Q>(Epsilon));\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b, vec<C, T, Q> const& Epsilon)\n\t{\n\t\tvec<C, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < C; ++i)\n\t\t\tResult[i] = all(equal(a[i], b[i], Epsilon[i]));\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b)\n\t{\n\t\tvec<C, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < C; ++i)\n\t\t\tResult[i] = any(notEqual(a[i], b[i]));\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b, T Epsilon)\n\t{\n\t\treturn notEqual(a, b, vec<C, T, Q>(Epsilon));\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b, vec<C, T, Q> const& Epsilon)\n\t{\n\t\tvec<C, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < C; ++i)\n\t\t\tResult[i] = any(notEqual(a[i], b[i], Epsilon[i]));\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b, int MaxULPs)\n\t{\n\t\treturn equal(a, b, vec<C, int, Q>(MaxULPs));\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> equal(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b, vec<C, int, Q> const& MaxULPs)\n\t{\n\t\tvec<C, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < C; ++i)\n\t\t\tResult[i] = all(equal(a[i], b[i], MaxULPs[i]));\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b, int MaxULPs)\n\t{\n\t\treturn notEqual(a, b, vec<C, int, Q>(MaxULPs));\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<C, bool, Q> notEqual(mat<C, R, T, Q> const& a, mat<C, R, T, Q> const& b, vec<C, int, Q> const& MaxULPs)\n\t{\n\t\tvec<C, bool, Q> Result(true);\n\t\tfor(length_t i = 0; i < C; ++i)\n\t\t\tResult[i] = any(notEqual(a[i], b[i], MaxULPs[i]));\n\t\treturn Result;\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_transform.hpp",
    "content": "/// @ref ext_matrix_transform\n/// @file glm/ext/matrix_transform.hpp\n///\n/// @defgroup ext_matrix_transform GLM_EXT_matrix_transform\n/// @ingroup ext\n///\n/// Defines functions that generate common transformation matrices.\n///\n/// The matrices generated by this extension use standard OpenGL fixed-function\n/// conventions. For example, the lookAt function generates a transform from world\n/// space into the specific eye space that the projective matrix functions\n/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility\n/// specifications defines the particular layout of this eye space.\n///\n/// Include <glm/ext/matrix_transform.hpp> to use the features of this extension.\n///\n/// @see ext_matrix_projection\n/// @see ext_matrix_clip_space\n\n#pragma once\n\n// Dependencies\n#include \"../gtc/constants.hpp\"\n#include \"../geometric.hpp\"\n#include \"../trigonometric.hpp\"\n#include \"../matrix.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_transform extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_transform\n\t/// @{\n\n\t/// Builds an identity matrix.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType identity();\n\n\t/// Builds a translation 4 * 4 matrix created from a vector of 3 components.\n\t///\n\t/// @param m Input matrix multiplied by this translation matrix.\n\t/// @param v Coordinates of a translation vector.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\t///\n\t/// @code\n\t/// #include <glm/glm.hpp>\n\t/// #include <glm/gtc/matrix_transform.hpp>\n\t/// ...\n\t/// glm::mat4 m = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f));\n\t/// // m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f\n\t/// // m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f\n\t/// // m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f\n\t/// // m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f\n\t/// @endcode\n\t///\n\t/// @see - translate(mat<4, 4, T, Q> const& m, T x, T y, T z)\n\t/// @see - translate(vec<3, T, Q> const& v)\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glTranslate.xml\">glTranslate man page</a>\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> translate(\n\t\tmat<4, 4, T, Q> const& m, vec<3, T, Q> const& v);\n\n\t/// Builds a rotation 4 * 4 matrix created from an axis vector and an angle.\n\t///\n\t/// @param m Input matrix multiplied by this rotation matrix.\n\t/// @param angle Rotation angle expressed in radians.\n\t/// @param axis Rotation axis, recommended to be normalized.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\t///\n\t/// @see - rotate(mat<4, 4, T, Q> const& m, T angle, T x, T y, T z)\n\t/// @see - rotate(T angle, vec<3, T, Q> const& v)\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glRotate.xml\">glRotate man page</a>\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> rotate(\n\t\tmat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& axis);\n\n\t/// Builds a scale 4 * 4 matrix created from 3 scalars.\n\t///\n\t/// @param m Input matrix multiplied by this scale matrix.\n\t/// @param v Ratio of scaling for each axis.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\t///\n\t/// @see - scale(mat<4, 4, T, Q> const& m, T x, T y, T z)\n\t/// @see - scale(vec<3, T, Q> const& v)\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glScale.xml\">glScale man page</a>\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> scale(\n\t\tmat<4, 4, T, Q> const& m, vec<3, T, Q> const& v);\n\n    /// Builds a scale 4 * 4 matrix created from point referent 3 shearers.\n    ///\n    /// @param m Input matrix multiplied by this shear matrix.\n    /// @param p Point of shearing as reference.\n    /// @param l_x Ratio of matrix.x projection in YZ plane relative to the y-axis/z-axis.\n    /// @param l_y Ratio of matrix.y projection in XZ plane relative to the x-axis/z-axis.\n    /// @param l_z Ratio of matrix.z projection in XY plane relative to the x-axis/y-axis.\n    ///\n    /// as example:\n    ///                                         [1   , l_xy, l_xz, -(l_xy+l_xz) * p_x] [x]  T\n    ///   [x`, y`, z`, w`] = [x`, y`, z`, w`] * [l_yx, 1   , l_yz, -(l_yx+l_yz) * p_y] [y]\n    ///                                         [l_zx, l_zy, 1   , -(l_zx+l_zy) * p_z] [z]\n    ///                                         [0   , 0   , 0   , 1                 ] [w]\n    ///\n    /// @tparam T A floating-point shear type\n    /// @tparam Q A value from qualifier enum\n    ///\n    /// @see - shear(mat<4, 4, T, Q> const& m, T x, T y, T z)\n    /// @see - shear(vec<3, T, Q> const& p)\n    /// @see - shear(vec<2, T, Q> const& l_x)\n    /// @see - shear(vec<2, T, Q> const& l_y)\n    /// @see - shear(vec<2, T, Q> const& l_z)\n    /// @see no resource...\n    template <typename T, qualifier Q>\n    GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shear(\n        mat<4, 4, T, Q> const &m, vec<3, T, Q> const& p, vec<2, T, Q> const &l_x, vec<2, T, Q> const &l_y, vec<2, T, Q> const &l_z);\n\n    /// Build a right handed look at view matrix.\n\t///\n\t/// @param eye Position of the camera\n\t/// @param center Position where the camera is looking at\n\t/// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\t///\n\t/// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal)\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> lookAtRH(\n\t\tvec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up);\n\n\t/// Build a left handed look at view matrix.\n\t///\n\t/// @param eye Position of the camera\n\t/// @param center Position where the camera is looking at\n\t/// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\t///\n\t/// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal)\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> lookAtLH(\n\t\tvec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up);\n\n\t/// Build a look at view matrix based on the default handedness.\n\t///\n\t/// @param eye Position of the camera\n\t/// @param center Position where the camera is looking at\n\t/// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1)\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\t///\n\t/// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal)\n\t/// @see <a href=\"https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/gluLookAt.xml\">gluLookAt man page</a>\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> lookAt(\n\t\tvec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_transform.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_transform.inl",
    "content": "namespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType identity()\n\t{\n\t\treturn detail::init_gentype<genType, detail::genTypeTrait<genType>::GENTYPE>::identity();\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> translate(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v)\n\t{\n\t\tmat<4, 4, T, Q> Result(m);\n\t\tResult[3] = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate(mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& v)\n\t{\n\t\tT const a = angle;\n\t\tT const c = cos(a);\n\t\tT const s = sin(a);\n\n\t\tvec<3, T, Q> axis(normalize(v));\n\t\tvec<3, T, Q> temp((T(1) - c) * axis);\n\n\t\tmat<4, 4, T, Q> Rotate;\n\t\tRotate[0][0] = c + temp[0] * axis[0];\n\t\tRotate[0][1] = temp[0] * axis[1] + s * axis[2];\n\t\tRotate[0][2] = temp[0] * axis[2] - s * axis[1];\n\n\t\tRotate[1][0] = temp[1] * axis[0] - s * axis[2];\n\t\tRotate[1][1] = c + temp[1] * axis[1];\n\t\tRotate[1][2] = temp[1] * axis[2] + s * axis[0];\n\n\t\tRotate[2][0] = temp[2] * axis[0] + s * axis[1];\n\t\tRotate[2][1] = temp[2] * axis[1] - s * axis[0];\n\t\tRotate[2][2] = c + temp[2] * axis[2];\n\n\t\tmat<4, 4, T, Q> Result;\n\t\tResult[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2];\n\t\tResult[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2];\n\t\tResult[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2];\n\t\tResult[3] = m[3];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate_slow(mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& v)\n\t{\n\t\tT const a = angle;\n\t\tT const c = cos(a);\n\t\tT const s = sin(a);\n\t\tmat<4, 4, T, Q> Result;\n\n\t\tvec<3, T, Q> axis = normalize(v);\n\n\t\tResult[0][0] = c + (static_cast<T>(1) - c)      * axis.x     * axis.x;\n\t\tResult[0][1] = (static_cast<T>(1) - c) * axis.x * axis.y + s * axis.z;\n\t\tResult[0][2] = (static_cast<T>(1) - c) * axis.x * axis.z - s * axis.y;\n\t\tResult[0][3] = static_cast<T>(0);\n\n\t\tResult[1][0] = (static_cast<T>(1) - c) * axis.y * axis.x - s * axis.z;\n\t\tResult[1][1] = c + (static_cast<T>(1) - c) * axis.y * axis.y;\n\t\tResult[1][2] = (static_cast<T>(1) - c) * axis.y * axis.z + s * axis.x;\n\t\tResult[1][3] = static_cast<T>(0);\n\n\t\tResult[2][0] = (static_cast<T>(1) - c) * axis.z * axis.x + s * axis.y;\n\t\tResult[2][1] = (static_cast<T>(1) - c) * axis.z * axis.y - s * axis.x;\n\t\tResult[2][2] = c + (static_cast<T>(1) - c) * axis.z * axis.z;\n\t\tResult[2][3] = static_cast<T>(0);\n\n\t\tResult[3] = vec<4, T, Q>(0, 0, 0, 1);\n\t\treturn m * Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v)\n\t{\n\t\tmat<4, 4, T, Q> Result;\n\t\tResult[0] = m[0] * v[0];\n\t\tResult[1] = m[1] * v[1];\n\t\tResult[2] = m[2] * v[2];\n\t\tResult[3] = m[3];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale_slow(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v)\n\t{\n\t\tmat<4, 4, T, Q> Result(T(1));\n\t\tResult[0][0] = v.x;\n\t\tResult[1][1] = v.y;\n\t\tResult[2][2] = v.z;\n\t\treturn m * Result;\n\t}\n\n    template <typename T, qualifier Q>\n    GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shear(mat<4, 4, T, Q> const &m, vec<3, T, Q> const& p, vec<2, T, Q> const &l_x, vec<2, T, Q> const &l_y, vec<2, T, Q> const &l_z)\n    {\n        T const lambda_xy = l_x[0];\n        T const lambda_xz = l_x[1];\n        T const lambda_yx = l_y[0];\n        T const lambda_yz = l_y[1];\n        T const lambda_zx = l_z[0];\n        T const lambda_zy = l_z[1];\n\n        vec<3, T, Q> point_lambda = vec<3, T, Q>(\n            (lambda_xy + lambda_xz), (lambda_yx + lambda_yz), (lambda_zx + lambda_zy)\n        );\n\n        mat<4, 4, T, Q> Shear = mat<4, 4, T, Q>(\n            1                      , lambda_yx              , lambda_zx              , 0,\n            lambda_xy              , 1                      , lambda_zy              , 0,\n            lambda_xz              , lambda_yz              , 1                      , 0,\n            -point_lambda[0] * p[0], -point_lambda[1] * p[1], -point_lambda[2] * p[2], 1\n        );\n\n        mat<4, 4, T, Q> Result;\n        Result[0] = Shear[0] * m[0][0] + Shear[1] * m[0][1] + Shear[2] * m[0][2] + Shear[3] * m[0][3];\n        Result[1] = Shear[0] * m[1][0] + Shear[1] * m[1][1] + Shear[2] * m[1][2] + Shear[3] * m[1][3];\n        Result[2] = Shear[0] * m[2][0] + Shear[1] * m[2][1] + Shear[2] * m[2][2] + Shear[3] * m[2][3];\n        Result[3] = Shear[0] * m[3][0] + Shear[1] * m[3][1] + Shear[2] * m[3][2] + Shear[3] * m[3][3];\n        return Result;\n    }\n\n    template <typename T, qualifier Q>\n    GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shear_slow(mat<4, 4, T, Q> const &m, vec<3, T, Q> const& p, vec<2, T, Q> const &l_x, vec<2, T, Q> const &l_y, vec<2, T, Q> const &l_z)\n    {\n        T const lambda_xy = static_cast<T>(l_x[0]);\n        T const lambda_xz = static_cast<T>(l_x[1]);\n        T const lambda_yx = static_cast<T>(l_y[0]);\n        T const lambda_yz = static_cast<T>(l_y[1]);\n        T const lambda_zx = static_cast<T>(l_z[0]);\n        T const lambda_zy = static_cast<T>(l_z[1]);\n\n        vec<3, T, Q> point_lambda = vec<3, T, Q>(\n            static_cast<T>(lambda_xy + lambda_xz),\n            static_cast<T>(lambda_yx + lambda_yz),\n            static_cast<T>(lambda_zx + lambda_zy)\n        );\n\n        mat<4, 4, T, Q> Shear = mat<4, 4, T, Q>(\n            1                      , lambda_yx              , lambda_zx              , 0,\n            lambda_xy              , 1                      , lambda_zy              , 0,\n            lambda_xz              , lambda_yz              , 1                      , 0,\n            -point_lambda[0] * p[0], -point_lambda[1] * p[1], -point_lambda[2] * p[2], 1\n        );\n        return m * Shear;\n    }\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAtRH(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up)\n\t{\n\t\tvec<3, T, Q> const f(normalize(center - eye));\n\t\tvec<3, T, Q> const s(normalize(cross(f, up)));\n\t\tvec<3, T, Q> const u(cross(s, f));\n\n\t\tmat<4, 4, T, Q> Result(1);\n\t\tResult[0][0] = s.x;\n\t\tResult[1][0] = s.y;\n\t\tResult[2][0] = s.z;\n\t\tResult[0][1] = u.x;\n\t\tResult[1][1] = u.y;\n\t\tResult[2][1] = u.z;\n\t\tResult[0][2] =-f.x;\n\t\tResult[1][2] =-f.y;\n\t\tResult[2][2] =-f.z;\n\t\tResult[3][0] =-dot(s, eye);\n\t\tResult[3][1] =-dot(u, eye);\n\t\tResult[3][2] = dot(f, eye);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAtLH(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up)\n\t{\n\t\tvec<3, T, Q> const f(normalize(center - eye));\n\t\tvec<3, T, Q> const s(normalize(cross(up, f)));\n\t\tvec<3, T, Q> const u(cross(f, s));\n\n\t\tmat<4, 4, T, Q> Result(1);\n\t\tResult[0][0] = s.x;\n\t\tResult[1][0] = s.y;\n\t\tResult[2][0] = s.z;\n\t\tResult[0][1] = u.x;\n\t\tResult[1][1] = u.y;\n\t\tResult[2][1] = u.z;\n\t\tResult[0][2] = f.x;\n\t\tResult[1][2] = f.y;\n\t\tResult[2][2] = f.z;\n\t\tResult[3][0] = -dot(s, eye);\n\t\tResult[3][1] = -dot(u, eye);\n\t\tResult[3][2] = -dot(f, eye);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAt(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up)\n\t{\n#       if (GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT)\n            return lookAtLH(eye, center, up);\n#       else\n            return lookAtRH(eye, center, up);\n#       endif\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint2x2.hpp",
    "content": "/// @ref ext_matrix_uint2x2\n/// @file glm/ext/matrix_uint2x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint2x2 GLM_EXT_matrix_uint2x2\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint2x2.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x2.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint2x2 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint2x2\n\t/// @{\n\n\t/// Unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2\n\ttypedef mat<2, 2, uint, defaultp>\tumat2x2;\n\n\t/// Unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2\n\ttypedef mat<2, 2, uint, defaultp>\tumat2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint2x2_sized.hpp",
    "content": "/// @ref ext_matrix_uint2x2_sized\n/// @file glm/ext/matrix_uint2x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint2x2_sized GLM_EXT_matrix_uint2x2_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint2x2_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x2.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint2x2_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint2x2_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2_sized\n\ttypedef mat<2, 2, uint8, defaultp>\t\t\t\tu8mat2x2;\n\n\t/// 16 bit unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2_sized\n\ttypedef mat<2, 2, uint16, defaultp>\t\t\t\tu16mat2x2;\n\n\t/// 32 bit unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2_sized\n\ttypedef mat<2, 2, uint32, defaultp>\t\t\t\tu32mat2x2;\n\n\t/// 64 bit unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2_sized\n\ttypedef mat<2, 2, uint64, defaultp>\t\t\t\tu64mat2x2;\n\n\n\t/// 8 bit unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2_sized\n\ttypedef mat<2, 2, uint8, defaultp>\t\t\t\tu8mat2;\n\n\t/// 16 bit unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2_sized\n\ttypedef mat<2, 2, uint16, defaultp>\t\t\t\tu16mat2;\n\n\t/// 32 bit unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2_sized\n\ttypedef mat<2, 2, uint32, defaultp>\t\t\t\tu32mat2;\n\n\t/// 64 bit unsigned integer 2x2 matrix.\n\t///\n\t/// @see ext_matrix_uint2x2_sized\n\ttypedef mat<2, 2, uint64, defaultp>\t\t\t\tu64mat2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint2x3.hpp",
    "content": "/// @ref ext_matrix_uint2x3\n/// @file glm/ext/matrix_uint2x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint2x3 GLM_EXT_matrix_uint2x3\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint2x3.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x3.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint2x3 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint2x3\n\t/// @{\n\n\t/// Unsigned integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_uint2x3\n\ttypedef mat<2, 3, uint, defaultp>\tumat2x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint2x3_sized.hpp",
    "content": "/// @ref ext_matrix_uint2x3_sized\n/// @file glm/ext/matrix_uint2x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint2x3_sized GLM_EXT_matrix_uint2x3_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint2x3_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x3.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint2x3_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint2x3_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_uint2x3_sized\n\ttypedef mat<2, 3, uint8, defaultp>\t\t\t\tu8mat2x3;\n\n\t/// 16 bit unsigned integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_uint2x3_sized\n\ttypedef mat<2, 3, uint16, defaultp>\t\t\t\tu16mat2x3;\n\n\t/// 32 bit unsigned integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_uint2x3_sized\n\ttypedef mat<2, 3, uint32, defaultp>\t\t\t\tu32mat2x3;\n\n\t/// 64 bit unsigned integer 2x3 matrix.\n\t///\n\t/// @see ext_matrix_uint2x3_sized\n\ttypedef mat<2, 3, uint64, defaultp>\t\t\t\tu64mat2x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint2x4.hpp",
    "content": "/// @ref ext_matrix_uint2x4\n/// @file glm/ext/matrix_uint2x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint2x4 GLM_EXT_matrix_int2x4\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint2x4.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint2x4 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint2x4\n\t/// @{\n\n\t/// Unsigned integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_uint2x4\n\ttypedef mat<2, 4, uint, defaultp>\tumat2x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint2x4_sized.hpp",
    "content": "/// @ref ext_matrix_uint2x4_sized\n/// @file glm/ext/matrix_uint2x4_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint2x4_sized GLM_EXT_matrix_uint2x4_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint2x4_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x4.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint2x4_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint2x4_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_uint2x4_sized\n\ttypedef mat<2, 4, uint8, defaultp>\t\t\t\tu8mat2x4;\n\n\t/// 16 bit unsigned integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_uint2x4_sized\n\ttypedef mat<2, 4, uint16, defaultp>\t\t\t\tu16mat2x4;\n\n\t/// 32 bit unsigned integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_uint2x4_sized\n\ttypedef mat<2, 4, uint32, defaultp>\t\t\t\tu32mat2x4;\n\n\t/// 64 bit unsigned integer 2x4 matrix.\n\t///\n\t/// @see ext_matrix_uint2x4_sized\n\ttypedef mat<2, 4, uint64, defaultp>\t\t\t\tu64mat2x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint3x2.hpp",
    "content": "/// @ref ext_matrix_uint3x2\n/// @file glm/ext/matrix_uint3x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint3x2 GLM_EXT_matrix_uint3x2\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint3x2.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x2.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint3x2 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint3x2\n\t/// @{\n\n\t/// Unsigned integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_uint3x2\n\ttypedef mat<3, 2, uint, defaultp>\tumat3x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint3x2_sized.hpp",
    "content": "/// @ref ext_matrix_uint3x2_sized\n/// @file glm/ext/matrix_uint3x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint3x2_sized GLM_EXT_matrix_uint3x2_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint3x2_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x2.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint3x2_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint3x2_sized\n\t/// @{\n\n\t/// 8 bit signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_uint3x2_sized\n\ttypedef mat<3, 2, uint8, defaultp>\t\t\t\tu8mat3x2;\n\n\t/// 16 bit signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_uint3x2_sized\n\ttypedef mat<3, 2, uint16, defaultp>\t\t\t\tu16mat3x2;\n\n\t/// 32 bit signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_uint3x2_sized\n\ttypedef mat<3, 2, uint32, defaultp>\t\t\t\tu32mat3x2;\n\n\t/// 64 bit signed integer 3x2 matrix.\n\t///\n\t/// @see ext_matrix_uint3x2_sized\n\ttypedef mat<3, 2, uint64, defaultp>\t\t\t\tu64mat3x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint3x3.hpp",
    "content": "/// @ref ext_matrix_uint3x3\n/// @file glm/ext/matrix_uint3x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint3x3 GLM_EXT_matrix_uint3x3\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint3x3.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x3.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint3x3 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint3x3\n\t/// @{\n\n\t/// Unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3\n\ttypedef mat<3, 3, uint, defaultp>\tumat3x3;\n\n\t/// Unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3\n\ttypedef mat<3, 3, uint, defaultp>\tumat3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint3x3_sized.hpp",
    "content": "/// @ref ext_matrix_uint3x3_sized\n/// @file glm/ext/matrix_uint3x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint3x3_sized GLM_EXT_matrix_uint3x3_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint3x3_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x3.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint3x3_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint3x3_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3_sized\n\ttypedef mat<3, 3, uint8, defaultp>\t\t\t\tu8mat3x3;\n\n\t/// 16 bit unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3_sized\n\ttypedef mat<3, 3, uint16, defaultp>\t\t\t\tu16mat3x3;\n\n\t/// 32 bit unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3_sized\n\ttypedef mat<3, 3, uint32, defaultp>\t\t\t\tu32mat3x3;\n\n\t/// 64 bit unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3_sized\n\ttypedef mat<3, 3, uint64, defaultp>\t\t\t\tu64mat3x3;\n\n\n\t/// 8 bit unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3_sized\n\ttypedef mat<3, 3, uint8, defaultp>\t\t\t\tu8mat3;\n\n\t/// 16 bit unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3_sized\n\ttypedef mat<3, 3, uint16, defaultp>\t\t\t\tu16mat3;\n\n\t/// 32 bit unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3_sized\n\ttypedef mat<3, 3, uint32, defaultp>\t\t\t\tu32mat3;\n\n\t/// 64 bit unsigned integer 3x3 matrix.\n\t///\n\t/// @see ext_matrix_uint3x3_sized\n\ttypedef mat<3, 3, uint64, defaultp>\t\t\t\tu64mat3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint3x4.hpp",
    "content": "/// @ref ext_matrix_uint3x4\n/// @file glm/ext/matrix_uint3x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint3x4 GLM_EXT_matrix_uint3x4\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint3x4.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint3x4 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint3x4\n\t/// @{\n\n\t/// Signed integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_uint3x4\n\ttypedef mat<3, 4, uint, defaultp>\tumat3x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint3x4_sized.hpp",
    "content": "/// @ref ext_matrix_uint3x4_sized\n/// @file glm/ext/matrix_uint3x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint3x4_sized GLM_EXT_matrix_uint3x4_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint3x4_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x4.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint3x4_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint3x4_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_uint3x4_sized\n\ttypedef mat<3, 4, uint8, defaultp>\t\t\t\tu8mat3x4;\n\n\t/// 16 bit unsigned integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_uint3x4_sized\n\ttypedef mat<3, 4, uint16, defaultp>\t\t\t\tu16mat3x4;\n\n\t/// 32 bit unsigned integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_uint3x4_sized\n\ttypedef mat<3, 4, uint32, defaultp>\t\t\t\tu32mat3x4;\n\n\t/// 64 bit unsigned integer 3x4 matrix.\n\t///\n\t/// @see ext_matrix_uint3x4_sized\n\ttypedef mat<3, 4, uint64, defaultp>\t\t\t\tu64mat3x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint4x2.hpp",
    "content": "/// @ref ext_matrix_uint4x2\n/// @file glm/ext/matrix_uint4x2.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint4x2 GLM_EXT_matrix_uint4x2\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint4x2.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x2.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint4x2 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint4x2\n\t/// @{\n\n\t/// Unsigned integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_uint4x2\n\ttypedef mat<4, 2, uint, defaultp>\tumat4x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint4x2_sized.hpp",
    "content": "/// @ref ext_matrix_uint4x2_sized\n/// @file glm/ext/matrix_uint4x2_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint4x2_sized GLM_EXT_matrix_uint4x2_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint4x2_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x2.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint4x2_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint4x2_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_uint4x2_sized\n\ttypedef mat<4, 2, uint8, defaultp>\t\t\t\tu8mat4x2;\n\n\t/// 16 bit unsigned integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_uint4x2_sized\n\ttypedef mat<4, 2, uint16, defaultp>\t\t\t\tu16mat4x2;\n\n\t/// 32 bit unsigned integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_uint4x2_sized\n\ttypedef mat<4, 2, uint32, defaultp>\t\t\t\tu32mat4x2;\n\n\t/// 64 bit unsigned integer 4x2 matrix.\n\t///\n\t/// @see ext_matrix_uint4x2_sized\n\ttypedef mat<4, 2, uint64, defaultp>\t\t\t\tu64mat4x2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint4x3.hpp",
    "content": "/// @ref ext_matrix_uint4x3\n/// @file glm/ext/matrix_uint4x3.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint4x3 GLM_EXT_matrix_uint4x3\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint4x3.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x3.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint4x3 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint4x3\n\t/// @{\n\n\t/// Unsigned integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_uint4x3\n\ttypedef mat<4, 3, uint, defaultp>\tumat4x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint4x3_sized.hpp",
    "content": "/// @ref ext_matrix_uint4x3_sized\n/// @file glm/ext/matrix_uint4x3_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint4x3_sized GLM_EXT_matrix_uint4x3_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint4x3_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x3.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint4x3_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint4x3_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_uint4x3_sized\n\ttypedef mat<4, 3, uint8, defaultp>\t\t\t\tu8mat4x3;\n\n\t/// 16 bit unsigned integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_uint4x3_sized\n\ttypedef mat<4, 3, uint16, defaultp>\t\t\t\tu16mat4x3;\n\n\t/// 32 bit unsigned integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_uint4x3_sized\n\ttypedef mat<4, 3, uint32, defaultp>\t\t\t\tu32mat4x3;\n\n\t/// 64 bit unsigned integer 4x3 matrix.\n\t///\n\t/// @see ext_matrix_uint4x3_sized\n\ttypedef mat<4, 3, uint64, defaultp>\t\t\t\tu64mat4x3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint4x4.hpp",
    "content": "/// @ref ext_matrix_uint4x4\n/// @file glm/ext/matrix_uint4x4.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint4x4 GLM_EXT_matrix_uint4x4\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint4x4.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint4x4 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint4x4\n\t/// @{\n\n\t/// Unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4\n\ttypedef mat<4, 4, uint, defaultp>\tumat4x4;\n\n\t/// Unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4\n\ttypedef mat<4, 4, uint, defaultp>\tumat4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/matrix_uint4x4_sized.hpp",
    "content": "/// @ref ext_matrix_uint4x4_sized\n/// @file glm/ext/matrix_uint4x4_sized.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_matrix_uint4x4_sized GLM_EXT_matrix_uint4x4_sized\n/// @ingroup ext\n///\n/// Include <glm/ext/matrix_uint4x4_sized.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat4x4.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_matrix_uint4x4_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_matrix_uint4x4_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4_sized\n\ttypedef mat<4, 4, uint8, defaultp>\t\t\t\tu8mat4x4;\n\n\t/// 16 bit unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4_sized\n\ttypedef mat<4, 4, uint16, defaultp>\t\t\t\tu16mat4x4;\n\n\t/// 32 bit unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4_sized\n\ttypedef mat<4, 4, uint32, defaultp>\t\t\t\tu32mat4x4;\n\n\t/// 64 bit unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4_sized\n\ttypedef mat<4, 4, uint64, defaultp>\t\t\t\tu64mat4x4;\n\n\n\t/// 8 bit unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4_sized\n\ttypedef mat<4, 4, uint8, defaultp>\t\t\t\tu8mat4;\n\n\t/// 16 bit unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4_sized\n\ttypedef mat<4, 4, uint16, defaultp>\t\t\t\tu16mat4;\n\n\t/// 32 bit unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4_sized\n\ttypedef mat<4, 4, uint32, defaultp>\t\t\t\tu32mat4;\n\n\t/// 64 bit unsigned integer 4x4 matrix.\n\t///\n\t/// @see ext_matrix_uint4x4_sized\n\ttypedef mat<4, 4, uint64, defaultp>\t\t\t\tu64mat4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/quaternion_common.hpp",
    "content": "/// @ref ext_quaternion_common\n/// @file glm/ext/quaternion_common.hpp\n///\n/// @defgroup ext_quaternion_common GLM_EXT_quaternion_common\n/// @ingroup ext\n///\n/// Provides common functions for quaternion types\n///\n/// Include <glm/ext/quaternion_common.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_common\n/// @see ext_vector_common\n/// @see ext_quaternion_float\n/// @see ext_quaternion_double\n/// @see ext_quaternion_exponential\n/// @see ext_quaternion_geometric\n/// @see ext_quaternion_relational\n/// @see ext_quaternion_trigonometric\n/// @see ext_quaternion_transform\n\n#pragma once\n\n// Dependency:\n#include \"../ext/scalar_constants.hpp\"\n#include \"../ext/quaternion_geometric.hpp\"\n#include \"../common.hpp\"\n#include \"../trigonometric.hpp\"\n#include \"../exponential.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_common extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_common\n\t/// @{\n\n\t/// Spherical linear interpolation of two quaternions.\n\t/// The interpolation is oriented and the rotation is performed at constant speed.\n\t/// For short path spherical linear interpolation, use the slerp function.\n\t///\n\t/// @param x A quaternion\n\t/// @param y A quaternion\n\t/// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1].\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\t///\n\t/// @see - slerp(qua<T, Q> const& x, qua<T, Q> const& y, T const& a)\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> mix(qua<T, Q> const& x, qua<T, Q> const& y, T a);\n\n\t/// Linear interpolation of two quaternions.\n\t/// The interpolation is oriented.\n\t///\n\t/// @param x A quaternion\n\t/// @param y A quaternion\n\t/// @param a Interpolation factor. The interpolation is defined in the range [0, 1].\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> lerp(qua<T, Q> const& x, qua<T, Q> const& y, T a);\n\n\t/// Spherical linear interpolation of two quaternions.\n\t/// The interpolation always take the short path and the rotation is performed at constant speed.\n\t///\n\t/// @param x A quaternion\n\t/// @param y A quaternion\n\t/// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1].\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> slerp(qua<T, Q> const& x, qua<T, Q> const& y, T a);\n\n    /// Spherical linear interpolation of two quaternions with multiple spins over rotation axis.\n    /// The interpolation always take the short path when the spin count is positive and long path\n    /// when count is negative. Rotation is performed at constant speed.\n    ///\n    /// @param x A quaternion\n    /// @param y A quaternion\n    /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1].\n    /// @param k Additional spin count. If Value is negative interpolation will be on \"long\" path.\n    ///\n    /// @tparam T A floating-point scalar type\n    /// @tparam S An integer scalar type\n    /// @tparam Q A value from qualifier enum\n    template<typename T, typename S, qualifier Q>\n    GLM_FUNC_DECL qua<T, Q> slerp(qua<T, Q> const& x, qua<T, Q> const& y, T a, S k);\n\n\t/// Returns the q conjugate.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> conjugate(qua<T, Q> const& q);\n\n\t/// Returns the q inverse.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> inverse(qua<T, Q> const& q);\n\n\t/// Returns true if x holds a NaN (not a number)\n\t/// representation in the underlying implementation's set of\n\t/// floating point representations. Returns false otherwise,\n\t/// including for implementations with no NaN\n\t/// representations.\n\t///\n\t/// /!\\ When using compiler fast math, this function may fail.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> isnan(qua<T, Q> const& x);\n\n\t/// Returns true if x holds a positive infinity or negative\n\t/// infinity representation in the underlying implementation's\n\t/// set of floating point representations. Returns false\n\t/// otherwise, including for implementations with no infinity\n\t/// representations.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> isinf(qua<T, Q> const& x);\n\n\t/// @}\n} //namespace glm\n\n#include \"quaternion_common.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/quaternion_common.inl",
    "content": "namespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> mix(qua<T, Q> const& x, qua<T, Q> const& y, T a)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'mix' only accept floating-point inputs\");\n\n\t\tT const cosTheta = dot(x, y);\n\n\t\t// Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator\n\t\tif(cosTheta > static_cast<T>(1) - epsilon<T>())\n\t\t{\n\t\t\t// Linear interpolation\n\t\t\treturn qua<T, Q>(\n\t\t\t\tmix(x.w, y.w, a),\n\t\t\t\tmix(x.x, y.x, a),\n\t\t\t\tmix(x.y, y.y, a),\n\t\t\t\tmix(x.z, y.z, a));\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Essential Mathematics, page 467\n\t\t\tT angle = acos(cosTheta);\n\t\t\treturn (sin((static_cast<T>(1) - a) * angle) * x + sin(a * angle) * y) / sin(angle);\n\t\t}\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> lerp(qua<T, Q> const& x, qua<T, Q> const& y, T a)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'lerp' only accept floating-point inputs\");\n\n\t\t// Lerp is only defined in [0, 1]\n\t\tassert(a >= static_cast<T>(0));\n\t\tassert(a <= static_cast<T>(1));\n\n\t\treturn x * (static_cast<T>(1) - a) + (y * a);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> slerp(qua<T, Q> const& x, qua<T, Q> const& y, T a)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'slerp' only accept floating-point inputs\");\n\n\t\tqua<T, Q> z = y;\n\n\t\tT cosTheta = dot(x, y);\n\n\t\t// If cosTheta < 0, the interpolation will take the long way around the sphere.\n\t\t// To fix this, one quat must be negated.\n\t\tif(cosTheta < static_cast<T>(0))\n\t\t{\n\t\t\tz = -y;\n\t\t\tcosTheta = -cosTheta;\n\t\t}\n\n\t\t// Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator\n\t\tif(cosTheta > static_cast<T>(1) - epsilon<T>())\n\t\t{\n\t\t\t// Linear interpolation\n\t\t\treturn qua<T, Q>(\n\t\t\t\tmix(x.w, z.w, a),\n\t\t\t\tmix(x.x, z.x, a),\n\t\t\t\tmix(x.y, z.y, a),\n\t\t\t\tmix(x.z, z.z, a));\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Essential Mathematics, page 467\n\t\t\tT angle = acos(cosTheta);\n\t\t\treturn (sin((static_cast<T>(1) - a) * angle) * x + sin(a * angle) * z) / sin(angle);\n\t\t}\n\t}\n\n    template<typename T, typename S, qualifier Q>\n    GLM_FUNC_QUALIFIER qua<T, Q> slerp(qua<T, Q> const& x, qua<T, Q> const& y, T a, S k)\n    {\n        GLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'slerp' only accept floating-point inputs\");\n        GLM_STATIC_ASSERT(std::numeric_limits<S>::is_integer, \"'slerp' only accept integer for spin count\");\n\n        qua<T, Q> z = y;\n\n        T cosTheta = dot(x, y);\n\n        // If cosTheta < 0, the interpolation will take the long way around the sphere.\n        // To fix this, one quat must be negated.\n        if (cosTheta < static_cast<T>(0))\n        {\n            z = -y;\n            cosTheta = -cosTheta;\n        }\n\n        // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator\n        if (cosTheta > static_cast<T>(1) - epsilon<T>())\n        {\n            // Linear interpolation\n            return qua<T, Q>(\n                mix(x.w, z.w, a),\n                mix(x.x, z.x, a),\n                mix(x.y, z.y, a),\n                mix(x.z, z.z, a));\n        }\n        else\n        {\n            // Graphics Gems III, page 96\n            T angle = acos(cosTheta);\n            T phi = angle + k * glm::pi<T>();\n            return (sin(angle - a * phi)* x + sin(a * phi) * z) / sin(angle);\n        }\n    }\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> conjugate(qua<T, Q> const& q)\n\t{\n\t\treturn qua<T, Q>(q.w, -q.x, -q.y, -q.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> inverse(qua<T, Q> const& q)\n\t{\n\t\treturn conjugate(q) / dot(q, q);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> isnan(qua<T, Q> const& q)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isnan' only accept floating-point inputs\");\n\n\t\treturn vec<4, bool, Q>(isnan(q.x), isnan(q.y), isnan(q.z), isnan(q.w));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> isinf(qua<T, Q> const& q)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isinf' only accept floating-point inputs\");\n\n\t\treturn vec<4, bool, Q>(isinf(q.x), isinf(q.y), isinf(q.z), isinf(q.w));\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"quaternion_common_simd.inl\"\n#endif\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/quaternion_common_simd.inl",
    "content": "#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<qualifier Q>\n\tstruct compute_dot<qua<float, Q>, float, true>\n\t{\n\t\tstatic GLM_FUNC_QUALIFIER float call(qua<float, Q> const& x, qua<float, Q> const& y)\n\t\t{\n\t\t\treturn _mm_cvtss_f32(glm_vec1_dot(x.data, y.data));\n\t\t}\n\t};\n}//namespace detail\n}//namespace glm\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/quaternion_double.hpp",
    "content": "/// @ref ext_quaternion_double\n/// @file glm/ext/quaternion_double.hpp\n///\n/// @defgroup ext_quaternion_double GLM_EXT_quaternion_double\n/// @ingroup ext\n///\n/// Exposes double-precision floating point quaternion type.\n///\n/// Include <glm/ext/quaternion_double.hpp> to use the features of this extension.\n///\n/// @see ext_quaternion_float\n/// @see ext_quaternion_double_precision\n/// @see ext_quaternion_common\n/// @see ext_quaternion_exponential\n/// @see ext_quaternion_geometric\n/// @see ext_quaternion_relational\n/// @see ext_quaternion_transform\n/// @see ext_quaternion_trigonometric\n\n#pragma once\n\n// Dependency:\n#include \"../detail/type_quat.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_double extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_double\n\t/// @{\n\n\t/// Quaternion of double-precision floating-point numbers.\n\ttypedef qua<double, defaultp>\t\tdquat;\n\n\t/// @}\n} //namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/quaternion_double_precision.hpp",
    "content": "/// @ref ext_quaternion_double_precision\n/// @file glm/ext/quaternion_double_precision.hpp\n///\n/// @defgroup ext_quaternion_double_precision GLM_EXT_quaternion_double_precision\n/// @ingroup ext\n///\n/// Exposes double-precision floating point quaternion type with various precision in term of ULPs.\n///\n/// Include <glm/ext/quaternion_double_precision.hpp> to use the features of this extension.\n\n#pragma once\n\n// Dependency:\n#include \"../detail/type_quat.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_double_precision extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_double_precision\n\t/// @{\n\n\t/// Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see ext_quaternion_double_precision\n\ttypedef qua<double, lowp>\t\tlowp_dquat;\n\n\t/// Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see ext_quaternion_double_precision\n\ttypedef qua<double, mediump>\tmediump_dquat;\n\n\t/// Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of ULPs.\n\t///\n\t/// @see ext_quaternion_double_precision\n\ttypedef qua<double, highp>\t\thighp_dquat;\n\n\t/// @}\n} //namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/quaternion_exponential.hpp",
    "content": "/// @ref ext_quaternion_exponential\n/// @file glm/ext/quaternion_exponential.hpp\n///\n/// @defgroup ext_quaternion_exponential GLM_EXT_quaternion_exponential\n/// @ingroup ext\n///\n/// Provides exponential functions for quaternion types\n///\n/// Include <glm/ext/quaternion_exponential.hpp> to use the features of this extension.\n///\n/// @see core_exponential\n/// @see ext_quaternion_float\n/// @see ext_quaternion_double\n\n#pragma once\n\n// Dependency:\n#include \"../common.hpp\"\n#include \"../trigonometric.hpp\"\n#include \"../geometric.hpp\"\n#include \"../ext/scalar_constants.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_exponential extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_transform\n\t/// @{\n\n\t/// Returns a exponential of a quaternion.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> exp(qua<T, Q> const& q);\n\n\t/// Returns a logarithm of a quaternion\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> log(qua<T, Q> const& q);\n\n\t/// Returns a quaternion raised to a power.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> pow(qua<T, Q> const& q, T y);\n\n\t/// Returns the square root of a quaternion\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> sqrt(qua<T, Q> const& q);\n\n\t/// @}\n} //namespace glm\n\n#include \"quaternion_exponential.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/quaternion_exponential.inl",
    "content": "#include \"scalar_constants.hpp\"\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> exp(qua<T, Q> const& q)\n\t{\n\t\tvec<3, T, Q> u(q.x, q.y, q.z);\n\t\tT const Angle = glm::length(u);\n\t\tif (Angle < epsilon<T>())\n\t\t\treturn qua<T, Q>();\n\n\t\tvec<3, T, Q> const v(u / Angle);\n\t\treturn qua<T, Q>(cos(Angle), sin(Angle) * v);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> log(qua<T, Q> const& q)\n\t{\n\t\tvec<3, T, Q> u(q.x, q.y, q.z);\n\t\tT Vec3Len = length(u);\n\n\t\tif (Vec3Len < epsilon<T>())\n\t\t{\n\t\t\tif(q.w > static_cast<T>(0))\n\t\t\t\treturn qua<T, Q>(log(q.w), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0));\n\t\t\telse if(q.w < static_cast<T>(0))\n\t\t\t\treturn qua<T, Q>(log(-q.w), pi<T>(), static_cast<T>(0), static_cast<T>(0));\n\t\t\telse\n\t\t\t\treturn qua<T, Q>(std::numeric_limits<T>::infinity(), std::numeric_limits<T>::infinity(), std::numeric_limits<T>::infinity(), std::numeric_limits<T>::infinity());\n\t\t}\n\t\telse\n\t\t{\n\t\t\tT t = atan(Vec3Len, T(q.w)) / Vec3Len;\n\t\t\tT QuatLen2 = Vec3Len * Vec3Len + q.w * q.w;\n\t\t\treturn qua<T, Q>(static_cast<T>(0.5) * log(QuatLen2), t * q.x, t * q.y, t * q.z);\n\t\t}\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> pow(qua<T, Q> const& x, T y)\n\t{\n\t\t//Raising to the power of 0 should yield 1\n\t\t//Needed to prevent a division by 0 error later on\n\t\tif(y > -epsilon<T>() && y < epsilon<T>())\n\t\t\treturn qua<T, Q>(1,0,0,0);\n\n\t\t//To deal with non-unit quaternions\n\t\tT magnitude = sqrt(x.x * x.x + x.y * x.y + x.z * x.z + x.w *x.w);\n\n\t\tT Angle;\n\t\tif(abs(x.w / magnitude) > cos_one_over_two<T>())\n\t\t{\n\t\t\t//Scalar component is close to 1; using it to recover angle would lose precision\n\t\t\t//Instead, we use the non-scalar components since sin() is accurate around 0\n\n\t\t\t//Prevent a division by 0 error later on\n\t\t\tT VectorMagnitude = x.x * x.x + x.y * x.y + x.z * x.z;\n\t\t\t//Despite the compiler might say, we actually want to compare\n\t\t\t//VectorMagnitude to 0. here; we could use denorm_int() compiling a\n\t\t\t//project with unsafe maths optimizations might make the comparison\n\t\t\t//always false, even when VectorMagnitude is 0.\n\t\t\tif (VectorMagnitude < std::numeric_limits<T>::min()) {\n\t\t\t\t//Equivalent to raising a real number to a power\n\t\t\t\treturn qua<T, Q>(pow(x.w, y), 0, 0, 0);\n\t\t\t}\n\n\t\t\tAngle = asin(sqrt(VectorMagnitude) / magnitude);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t//Scalar component is small, shouldn't cause loss of precision\n\t\t\tAngle = acos(x.w / magnitude);\n\t\t}\n\n\t\tT NewAngle = Angle * y;\n\t\tT Div = sin(NewAngle) / sin(Angle);\n\t\tT Mag = pow(magnitude, y - static_cast<T>(1));\n\t\treturn qua<T, Q>(cos(NewAngle) * magnitude * Mag, x.x * Div * Mag, x.y * Div * Mag, x.z * Div * Mag);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> sqrt(qua<T, Q> const& x)\n\t{\n\t\treturn pow(x, static_cast<T>(0.5));\n\t}\n}//namespace glm\n\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/quaternion_float.hpp",
    "content": "/// @ref ext_quaternion_float\n/// @file glm/ext/quaternion_float.hpp\n///\n/// @defgroup ext_quaternion_float GLM_EXT_quaternion_float\n/// @ingroup ext\n///\n/// Exposes single-precision floating point quaternion type.\n///\n/// Include <glm/ext/quaternion_float.hpp> to use the features of this extension.\n///\n/// @see ext_quaternion_double\n/// @see ext_quaternion_float_precision\n/// @see ext_quaternion_common\n/// @see ext_quaternion_exponential\n/// @see ext_quaternion_geometric\n/// @see ext_quaternion_relational\n/// @see ext_quaternion_transform\n/// @see ext_quaternion_trigonometric\n\n#pragma once\n\n// Dependency:\n#include \"../detail/type_quat.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_float extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_float\n\t/// @{\n\n\t/// Quaternion of single-precision floating-point numbers.\n\ttypedef qua<float, defaultp>\t\tquat;\n\n\t/// @}\n} //namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/quaternion_float_precision.hpp",
    "content": "/// @ref ext_quaternion_float_precision\n/// @file glm/ext/quaternion_float_precision.hpp\n///\n/// @defgroup ext_quaternion_float_precision GLM_EXT_quaternion_float_precision\n/// @ingroup ext\n///\n/// Exposes single-precision floating point quaternion type with various precision in term of ULPs.\n///\n/// Include <glm/ext/quaternion_float_precision.hpp> to use the features of this extension.\n\n#pragma once\n\n// Dependency:\n#include \"../detail/type_quat.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_float_precision extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_float_precision\n\t/// @{\n\n\t/// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef qua<float, lowp>\t\tlowp_quat;\n\n\t/// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef qua<float, mediump>\t\tmediump_quat;\n\n\t/// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef qua<float, highp>\t\thighp_quat;\n\n\t/// @}\n} //namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/quaternion_geometric.hpp",
    "content": "/// @ref ext_quaternion_geometric\n/// @file glm/ext/quaternion_geometric.hpp\n///\n/// @defgroup ext_quaternion_geometric GLM_EXT_quaternion_geometric\n/// @ingroup ext\n///\n/// Provides geometric functions for quaternion types\n///\n/// Include <glm/ext/quaternion_geometric.hpp> to use the features of this extension.\n///\n/// @see core_func_geometric\n/// @see ext_quaternion_float\n/// @see ext_quaternion_double\n\n#pragma once\n\n// Dependency:\n#include \"../geometric.hpp\"\n#include \"../exponential.hpp\"\n#include \"../ext/vector_relational.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_geometric extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_geometric\n\t/// @{\n\n\t/// Returns the norm of a quaternions\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_quaternion_geometric\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T length(qua<T, Q> const& q);\n\n\t/// Returns the normalized quaternion.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_quaternion_geometric\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> normalize(qua<T, Q> const& q);\n\n\t/// Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ...\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_quaternion_geometric\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T dot(qua<T, Q> const& x, qua<T, Q> const& y);\n\n\t/// Compute a cross product.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_quaternion_geometric\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> cross(qua<T, Q> const& q1, qua<T, Q> const& q2);\n\n\t/// @}\n} //namespace glm\n\n#include \"quaternion_geometric.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/quaternion_geometric.inl",
    "content": "namespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T dot(qua<T, Q> const& x, qua<T, Q> const& y)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'dot' accepts only floating-point inputs\");\n\t\treturn detail::compute_dot<qua<T, Q>, T, detail::is_aligned<Q>::value>::call(x, y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T length(qua<T, Q> const& q)\n\t{\n\t\treturn glm::sqrt(dot(q, q));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> normalize(qua<T, Q> const& q)\n\t{\n\t\tT len = length(q);\n\t\tif(len <= static_cast<T>(0)) // Problem\n\t\t\treturn qua<T, Q>(static_cast<T>(1), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0));\n\t\tT oneOverLen = static_cast<T>(1) / len;\n\t\treturn qua<T, Q>(q.w * oneOverLen, q.x * oneOverLen, q.y * oneOverLen, q.z * oneOverLen);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> cross(qua<T, Q> const& q1, qua<T, Q> const& q2)\n\t{\n\t\treturn qua<T, Q>(\n\t\t\tq1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z,\n\t\t\tq1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y,\n\t\t\tq1.w * q2.y + q1.y * q2.w + q1.z * q2.x - q1.x * q2.z,\n\t\t\tq1.w * q2.z + q1.z * q2.w + q1.x * q2.y - q1.y * q2.x);\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/quaternion_relational.hpp",
    "content": "/// @ref ext_quaternion_relational\n/// @file glm/ext/quaternion_relational.hpp\n///\n/// @defgroup ext_quaternion_relational GLM_EXT_quaternion_relational\n/// @ingroup ext\n///\n/// Exposes comparison functions for quaternion types that take a user defined epsilon values.\n///\n/// Include <glm/ext/quaternion_relational.hpp> to use the features of this extension.\n///\n/// @see core_vector_relational\n/// @see ext_vector_relational\n/// @see ext_matrix_relational\n/// @see ext_quaternion_float\n/// @see ext_quaternion_double\n\n#pragma once\n\n// Dependency:\n#include \"../vector_relational.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_relational extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_relational\n\t/// @{\n\n\t/// Returns the component-wise comparison of result x == y.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> equal(qua<T, Q> const& x, qua<T, Q> const& y);\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> equal(qua<T, Q> const& x, qua<T, Q> const& y, T epsilon);\n\n\t/// Returns the component-wise comparison of result x != y.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> notEqual(qua<T, Q> const& x, qua<T, Q> const& y);\n\n\t/// Returns the component-wise comparison of |x - y| >= epsilon.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> notEqual(qua<T, Q> const& x, qua<T, Q> const& y, T epsilon);\n\n\t/// @}\n} //namespace glm\n\n#include \"quaternion_relational.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/quaternion_relational.inl",
    "content": "namespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> equal(qua<T, Q> const& x, qua<T, Q> const& y)\n\t{\n\t\tvec<4, bool, Q> Result;\n\t\tfor(length_t i = 0; i < x.length(); ++i)\n\t\t\tResult[i] = x[i] == y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> equal(qua<T, Q> const& x, qua<T, Q> const& y, T epsilon)\n\t{\n\t\tvec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w);\n\t\treturn lessThan(abs(v), vec<4, T, Q>(epsilon));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> notEqual(qua<T, Q> const& x, qua<T, Q> const& y)\n\t{\n\t\tvec<4, bool, Q> Result;\n\t\tfor(length_t i = 0; i < x.length(); ++i)\n\t\t\tResult[i] = x[i] != y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> notEqual(qua<T, Q> const& x, qua<T, Q> const& y, T epsilon)\n\t{\n\t\tvec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w);\n\t\treturn greaterThanEqual(abs(v), vec<4, T, Q>(epsilon));\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/quaternion_transform.hpp",
    "content": "/// @ref ext_quaternion_transform\n/// @file glm/ext/quaternion_transform.hpp\n///\n/// @defgroup ext_quaternion_transform GLM_EXT_quaternion_transform\n/// @ingroup ext\n///\n/// Provides transformation functions for quaternion types\n///\n/// Include <glm/ext/quaternion_transform.hpp> to use the features of this extension.\n///\n/// @see ext_quaternion_float\n/// @see ext_quaternion_double\n/// @see ext_quaternion_exponential\n/// @see ext_quaternion_geometric\n/// @see ext_quaternion_relational\n/// @see ext_quaternion_trigonometric\n\n#pragma once\n\n// Dependency:\n#include \"../common.hpp\"\n#include \"../trigonometric.hpp\"\n#include \"../geometric.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_transform extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_transform\n\t/// @{\n\n\t/// Rotates a quaternion from a vector of 3 components axis and an angle.\n\t///\n\t/// @param q Source orientation\n\t/// @param angle Angle expressed in radians.\n\t/// @param axis Axis of the rotation\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> rotate(qua<T, Q> const& q, T const& angle, vec<3, T, Q> const& axis);\n\t/// @}\n} //namespace glm\n\n#include \"quaternion_transform.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/quaternion_transform.inl",
    "content": "namespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> rotate(qua<T, Q> const& q, T const& angle, vec<3, T, Q> const& v)\n\t{\n\t\tvec<3, T, Q> Tmp = v;\n\n\t\t// Axis of rotation must be normalised\n\t\tT len = glm::length(Tmp);\n\t\tif(abs(len - static_cast<T>(1)) > static_cast<T>(0.001))\n\t\t{\n\t\t\tT oneOverLen = static_cast<T>(1) / len;\n\t\t\tTmp.x *= oneOverLen;\n\t\t\tTmp.y *= oneOverLen;\n\t\t\tTmp.z *= oneOverLen;\n\t\t}\n\n\t\tT const AngleRad(angle);\n\t\tT const Sin = sin(AngleRad * static_cast<T>(0.5));\n\n\t\treturn q * qua<T, Q>(cos(AngleRad * static_cast<T>(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin);\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/quaternion_trigonometric.hpp",
    "content": "/// @ref ext_quaternion_trigonometric\n/// @file glm/ext/quaternion_trigonometric.hpp\n///\n/// @defgroup ext_quaternion_trigonometric GLM_EXT_quaternion_trigonometric\n/// @ingroup ext\n///\n/// Provides trigonometric functions for quaternion types\n///\n/// Include <glm/ext/quaternion_trigonometric.hpp> to use the features of this extension.\n///\n/// @see ext_quaternion_float\n/// @see ext_quaternion_double\n/// @see ext_quaternion_exponential\n/// @see ext_quaternion_geometric\n/// @see ext_quaternion_relational\n/// @see ext_quaternion_transform\n\n#pragma once\n\n// Dependency:\n#include \"../trigonometric.hpp\"\n#include \"../exponential.hpp\"\n#include \"scalar_constants.hpp\"\n#include \"vector_relational.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_quaternion_trigonometric extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_quaternion_trigonometric\n\t/// @{\n\n\t/// Returns the quaternion rotation angle.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T angle(qua<T, Q> const& x);\n\n\t/// Returns the q rotation axis.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> axis(qua<T, Q> const& x);\n\n\t/// Build a quaternion from an angle and a normalized axis.\n\t///\n\t/// @param angle Angle expressed in radians.\n\t/// @param axis Axis of the quaternion, must be normalized.\n\t///\n\t/// @tparam T A floating-point scalar type\n\t/// @tparam Q A value from qualifier enum\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> angleAxis(T const& angle, vec<3, T, Q> const& axis);\n\n\t/// @}\n} //namespace glm\n\n#include \"quaternion_trigonometric.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/quaternion_trigonometric.inl",
    "content": "#include \"scalar_constants.hpp\"\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T angle(qua<T, Q> const& x)\n\t{\n\t\tif (abs(x.w) > cos_one_over_two<T>())\n\t\t{\n\t\t\tT const a = asin(sqrt(x.x * x.x + x.y * x.y + x.z * x.z)) * static_cast<T>(2);\n\t\t\tif(x.w < static_cast<T>(0))\n\t\t\t\treturn pi<T>() * static_cast<T>(2) - a;\n\t\t\treturn a;\n\t\t}\n\n\t\treturn acos(x.w) * static_cast<T>(2);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> axis(qua<T, Q> const& x)\n\t{\n\t\tT const tmp1 = static_cast<T>(1) - x.w * x.w;\n\t\tif(tmp1 <= static_cast<T>(0))\n\t\t\treturn vec<3, T, Q>(0, 0, 1);\n\t\tT const tmp2 = static_cast<T>(1) / sqrt(tmp1);\n\t\treturn vec<3, T, Q>(x.x * tmp2, x.y * tmp2, x.z * tmp2);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> angleAxis(T const& angle, vec<3, T, Q> const& v)\n\t{\n\t\tT const a(angle);\n\t\tT const s = glm::sin(a * static_cast<T>(0.5));\n\n\t\treturn qua<T, Q>(glm::cos(a * static_cast<T>(0.5)), v * s);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/scalar_common.hpp",
    "content": "/// @ref ext_scalar_common\n/// @file glm/ext/scalar_common.hpp\n///\n/// @defgroup ext_scalar_common GLM_EXT_scalar_common\n/// @ingroup ext\n///\n/// Exposes min and max functions for 3 to 4 scalar parameters.\n///\n/// Include <glm/ext/scalar_common.hpp> to use the features of this extension.\n///\n/// @see core_func_common\n/// @see ext_vector_common\n\n#pragma once\n\n// Dependency:\n#include \"../common.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_common extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_scalar_common\n\t/// @{\n\n\t/// Returns the minimum component-wise values of 3 inputs\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T min(T a, T b, T c);\n\n\t/// Returns the minimum component-wise values of 4 inputs\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T min(T a, T b, T c, T d);\n\n\t/// Returns the maximum component-wise values of 3 inputs\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T max(T a, T b, T c);\n\n\t/// Returns the maximum component-wise values of 4 inputs\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T max(T a, T b, T c, T d);\n\n\t/// Returns the minimum component-wise values of 2 inputs. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a>\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fmin(T a, T b);\n\n\t/// Returns the minimum component-wise values of 3 inputs. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a>\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fmin(T a, T b, T c);\n\n\t/// Returns the minimum component-wise values of 4 inputs. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a>\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fmin(T a, T b, T c, T d);\n\n\t/// Returns the maximum component-wise values of 2 inputs. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a>\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fmax(T a, T b);\n\n\t/// Returns the maximum component-wise values of 3 inputs. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a>\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fmax(T a, T b, T C);\n\n\t/// Returns the maximum component-wise values of 4 inputs. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam T A floating-point scalar type.\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a>\n\t/// @see ext_scalar_common\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fmax(T a, T b, T C, T D);\n\n\t/// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam genType Floating-point scalar types.\n\t///\n\t/// @see ext_scalar_common\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fclamp(genType x, genType minVal, genType maxVal);\n\n\t/// Simulate GL_CLAMP OpenGL wrap mode\n\t///\n\t/// @tparam genType Floating-point scalar types.\n\t///\n\t/// @see ext_scalar_common extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType clamp(genType const& Texcoord);\n\n\t/// Simulate GL_REPEAT OpenGL wrap mode\n\t///\n\t/// @tparam genType Floating-point scalar types.\n\t///\n\t/// @see ext_scalar_common extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType repeat(genType const& Texcoord);\n\n\t/// Simulate GL_MIRRORED_REPEAT OpenGL wrap mode\n\t///\n\t/// @tparam genType Floating-point scalar types.\n\t///\n\t/// @see ext_scalar_common extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType mirrorClamp(genType const& Texcoord);\n\n\t/// Simulate GL_MIRROR_REPEAT OpenGL wrap mode\n\t///\n\t/// @tparam genType Floating-point scalar types.\n\t///\n\t/// @see ext_scalar_common extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType mirrorRepeat(genType const& Texcoord);\n\n\t/// Returns a value equal to the nearest integer to x.\n\t/// The fraction 0.5 will round in a direction chosen by the\n\t/// implementation, presumably the direction that is fastest.\n\t///\n\t/// @param x The values of the argument must be greater or equal to zero.\n\t/// @tparam genType floating point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml\">GLSL round man page</a>\n\t/// @see ext_scalar_common extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL int iround(genType const& x);\n\n\t/// Returns a value equal to the nearest integer to x.\n\t/// The fraction 0.5 will round in a direction chosen by the\n\t/// implementation, presumably the direction that is fastest.\n\t///\n\t/// @param x The values of the argument must be greater or equal to zero.\n\t/// @tparam genType floating point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml\">GLSL round man page</a>\n\t/// @see ext_scalar_common extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL uint uround(genType const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"scalar_common.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/scalar_common.inl",
    "content": "namespace glm\n{\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T min(T a, T b, T c)\n\t{\n\t\treturn glm::min(glm::min(a, b), c);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T min(T a, T b, T c, T d)\n\t{\n\t\treturn glm::min(glm::min(a, b), glm::min(c, d));\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T max(T a, T b, T c)\n\t{\n\t\treturn glm::max(glm::max(a, b), c);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T max(T a, T b, T c, T d)\n\t{\n\t\treturn glm::max(glm::max(a, b), glm::max(c, d));\n\t}\n\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::fmin;\n#\telse\n\t\ttemplate<typename T>\n\t\tGLM_FUNC_QUALIFIER T fmin(T a, T b)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmin' only accept floating-point input\");\n\n\t\t\tif (isnan(a))\n\t\t\t\treturn b;\n\t\t\treturn min(a, b);\n\t\t}\n#\tendif\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fmin(T a, T b, T c)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmin' only accept floating-point input\");\n\n\t\tif (isnan(a))\n\t\t\treturn fmin(b, c);\n\t\tif (isnan(b))\n\t\t\treturn fmin(a, c);\n\t\tif (isnan(c))\n\t\t\treturn min(a, b);\n\t\treturn min(a, b, c);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fmin(T a, T b, T c, T d)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmin' only accept floating-point input\");\n\n\t\tif (isnan(a))\n\t\t\treturn fmin(b, c, d);\n\t\tif (isnan(b))\n\t\t\treturn min(a, fmin(c, d));\n\t\tif (isnan(c))\n\t\t\treturn fmin(min(a, b), d);\n\t\tif (isnan(d))\n\t\t\treturn min(a, b, c);\n\t\treturn min(a, b, c, d);\n\t}\n\n\n#\tif GLM_HAS_CXX11_STL\n\t\tusing std::fmax;\n#\telse\n\t\ttemplate<typename T>\n\t\tGLM_FUNC_QUALIFIER T fmax(T a, T b)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmax' only accept floating-point input\");\n\n\t\t\tif (isnan(a))\n\t\t\t\treturn b;\n\t\t\treturn max(a, b);\n\t\t}\n#\tendif\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fmax(T a, T b, T c)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmax' only accept floating-point input\");\n\n\t\tif (isnan(a))\n\t\t\treturn fmax(b, c);\n\t\tif (isnan(b))\n\t\t\treturn fmax(a, c);\n\t\tif (isnan(c))\n\t\t\treturn max(a, b);\n\t\treturn max(a, b, c);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fmax(T a, T b, T c, T d)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmax' only accept floating-point input\");\n\n\t\tif (isnan(a))\n\t\t\treturn fmax(b, c, d);\n\t\tif (isnan(b))\n\t\t\treturn max(a, fmax(c, d));\n\t\tif (isnan(c))\n\t\t\treturn fmax(max(a, b), d);\n\t\tif (isnan(d))\n\t\t\treturn max(a, b, c);\n\t\treturn max(a, b, c, d);\n\t}\n\n\t// fclamp\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fclamp(genType x, genType minVal, genType maxVal)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'fclamp' only accept floating-point or integer inputs\");\n\t\treturn fmin(fmax(x, minVal), maxVal);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType clamp(genType const& Texcoord)\n\t{\n\t\treturn glm::clamp(Texcoord, static_cast<genType>(0), static_cast<genType>(1));\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType repeat(genType const& Texcoord)\n\t{\n\t\treturn glm::fract(Texcoord);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType mirrorClamp(genType const& Texcoord)\n\t{\n\t\treturn glm::fract(glm::abs(Texcoord));\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType mirrorRepeat(genType const& Texcoord)\n\t{\n\t\tgenType const Abs = glm::abs(Texcoord);\n\t\tgenType const Clamp = glm::mod(glm::floor(Abs), static_cast<genType>(2));\n\t\tgenType const Floor = glm::floor(Abs);\n\t\tgenType const Rest = Abs - Floor;\n\t\tgenType const Mirror = Clamp + Rest;\n\t\treturn mix(Rest, static_cast<genType>(1) - Rest, Mirror >= static_cast<genType>(1));\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER int iround(genType const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'iround' only accept floating-point inputs\");\n\t\tassert(static_cast<genType>(0.0) <= x);\n\n\t\treturn static_cast<int>(x + static_cast<genType>(0.5));\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER uint uround(genType const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'uround' only accept floating-point inputs\");\n\t\tassert(static_cast<genType>(0.0) <= x);\n\n\t\treturn static_cast<uint>(x + static_cast<genType>(0.5));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/scalar_constants.hpp",
    "content": "/// @ref ext_scalar_constants\n/// @file glm/ext/scalar_constants.hpp\n///\n/// @defgroup ext_scalar_constants GLM_EXT_scalar_constants\n/// @ingroup ext\n///\n/// Provides a list of constants and precomputed useful values.\n///\n/// Include <glm/ext/scalar_constants.hpp> to use the features of this extension.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_constants extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_scalar_constants\n\t/// @{\n\n\t/// Return the epsilon constant for floating point types.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType epsilon();\n\n\t/// Return the pi constant for floating point types.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType pi();\n\n\t/// Return the value of cos(1 / 2) for floating point types.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType cos_one_over_two();\n\n\t/// @}\n} //namespace glm\n\n#include \"scalar_constants.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/scalar_constants.inl",
    "content": "#include <limits>\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType epsilon()\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'epsilon' only accepts floating-point inputs\");\n\t\treturn std::numeric_limits<genType>::epsilon();\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType pi()\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'pi' only accepts floating-point inputs\");\n\t\treturn static_cast<genType>(3.14159265358979323846264338327950288);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType cos_one_over_two()\n\t{\n\t\treturn genType(0.877582561890372716130286068203503191);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/scalar_int_sized.hpp",
    "content": "/// @ref ext_scalar_int_sized\n/// @file glm/ext/scalar_int_sized.hpp\n///\n/// @defgroup ext_scalar_int_sized GLM_EXT_scalar_int_sized\n/// @ingroup ext\n///\n/// Exposes sized signed integer scalar types.\n///\n/// Include <glm/ext/scalar_int_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_uint_sized\n\n#pragma once\n\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_int_sized extension included\")\n#endif\n\nnamespace glm{\nnamespace detail\n{\n#\tif GLM_HAS_EXTENDED_INTEGER_TYPE\n\t\ttypedef std::int8_t\t\t\tint8;\n\t\ttypedef std::int16_t\t\tint16;\n\t\ttypedef std::int32_t\t\tint32;\n#\telse\n\t\ttypedef signed char\t\t\tint8;\n\t\ttypedef signed short\t\tint16;\n\t\ttypedef signed int\t\t\tint32;\n#endif//\n\n\ttemplate<>\n\tstruct is_int<int8>\n\t{\n\t\tenum test {value = ~0};\n\t};\n\n\ttemplate<>\n\tstruct is_int<int16>\n\t{\n\t\tenum test {value = ~0};\n\t};\n\n\ttemplate<>\n\tstruct is_int<int64>\n\t{\n\t\tenum test {value = ~0};\n\t};\n}//namespace detail\n\n\n\t/// @addtogroup ext_scalar_int_sized\n\t/// @{\n\n\t/// 8 bit signed integer type.\n\ttypedef detail::int8\t\tint8;\n\n\t/// 16 bit signed integer type.\n\ttypedef detail::int16\t\tint16;\n\n\t/// 32 bit signed integer type.\n\ttypedef detail::int32\t\tint32;\n\n\t/// 64 bit signed integer type.\n\ttypedef detail::int64\t\tint64;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/scalar_integer.hpp",
    "content": "/// @ref ext_scalar_integer\n/// @file glm/ext/scalar_integer.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_scalar_integer GLM_EXT_scalar_integer\n/// @ingroup ext\n///\n/// Include <glm/ext/scalar_integer.hpp> to use the features of this extension.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/_vectorize.hpp\"\n#include \"../detail/type_float.hpp\"\n#include \"../vector_relational.hpp\"\n#include \"../common.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_integer extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_scalar_integer\n\t/// @{\n\n\t/// Return true if the value is a power of two number.\n\t///\n\t/// @see ext_scalar_integer\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL bool isPowerOfTwo(genIUType v);\n\n\t/// Return the power of two number which value is just higher the input value,\n\t/// round up to a power of two.\n\t///\n\t/// @see ext_scalar_integer\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType nextPowerOfTwo(genIUType v);\n\n\t/// Return the power of two number which value is just lower the input value,\n\t/// round down to a power of two.\n\t///\n\t/// @see ext_scalar_integer\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType prevPowerOfTwo(genIUType v);\n\n\t/// Return true if the 'Value' is a multiple of 'Multiple'.\n\t///\n\t/// @see ext_scalar_integer\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL bool isMultiple(genIUType v, genIUType Multiple);\n\n\t/// Higher multiple number of Source.\n\t///\n\t/// @tparam genIUType Integer scalar or vector types.\n\t///\n\t/// @param v Source value to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see ext_scalar_integer\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType nextMultiple(genIUType v, genIUType Multiple);\n\n\t/// Lower multiple number of Source.\n\t///\n\t/// @tparam genIUType Integer scalar or vector types.\n\t///\n\t/// @param v Source value to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see ext_scalar_integer\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType prevMultiple(genIUType v, genIUType Multiple);\n\n\t/// Returns the bit number of the Nth significant bit set to\n\t/// 1 in the binary representation of value.\n\t/// If value bitcount is less than the Nth significant bit, -1 will be returned.\n\t///\n\t/// @tparam genIUType Signed or unsigned integer scalar types.\n\t///\n\t/// @see ext_scalar_integer\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL int findNSB(genIUType x, int significantBitCount);\n\n\t/// @}\n} //namespace glm\n\n#include \"scalar_integer.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/scalar_integer.inl",
    "content": "#include \"../integer.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q, bool compute = false>\n\tstruct compute_ceilShift\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T)\n\t\t{\n\t\t\treturn v;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct compute_ceilShift<L, T, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v, T Shift)\n\t\t{\n\t\t\treturn v | (v >> Shift);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool isSigned = true>\n\tstruct compute_ceilPowerOfTwo\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(!std::numeric_limits<T>::is_iec559, \"'ceilPowerOfTwo' only accept integer scalar or vector inputs\");\n\n\t\t\tvec<L, T, Q> const Sign(sign(x));\n\n\t\t\tvec<L, T, Q> v(abs(x));\n\n\t\t\tv = v - static_cast<T>(1);\n\t\t\tv = v | (v >> static_cast<T>(1));\n\t\t\tv = v | (v >> static_cast<T>(2));\n\t\t\tv = v | (v >> static_cast<T>(4));\n\t\t\tv = compute_ceilShift<L, T, Q, sizeof(T) >= 2>::call(v, 8);\n\t\t\tv = compute_ceilShift<L, T, Q, sizeof(T) >= 4>::call(v, 16);\n\t\t\tv = compute_ceilShift<L, T, Q, sizeof(T) >= 8>::call(v, 32);\n\t\t\treturn (v + static_cast<T>(1)) * Sign;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct compute_ceilPowerOfTwo<L, T, Q, false>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& x)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(!std::numeric_limits<T>::is_iec559, \"'ceilPowerOfTwo' only accept integer scalar or vector inputs\");\n\n\t\t\tvec<L, T, Q> v(x);\n\n\t\t\tv = v - static_cast<T>(1);\n\t\t\tv = v | (v >> static_cast<T>(1));\n\t\t\tv = v | (v >> static_cast<T>(2));\n\t\t\tv = v | (v >> static_cast<T>(4));\n\t\t\tv = compute_ceilShift<L, T, Q, sizeof(T) >= 2>::call(v, 8);\n\t\t\tv = compute_ceilShift<L, T, Q, sizeof(T) >= 4>::call(v, 16);\n\t\t\tv = compute_ceilShift<L, T, Q, sizeof(T) >= 8>::call(v, 32);\n\t\t\treturn v + static_cast<T>(1);\n\t\t}\n\t};\n\n\ttemplate<bool is_float, bool is_signed>\n\tstruct compute_ceilMultiple{};\n\n\ttemplate<>\n\tstruct compute_ceilMultiple<true, true>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tif(Source > genType(0))\n\t\t\t\treturn Source + (Multiple - std::fmod(Source, Multiple));\n\t\t\telse\n\t\t\t\treturn Source + std::fmod(-Source, Multiple);\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct compute_ceilMultiple<false, false>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tgenType Tmp = Source - genType(1);\n\t\t\treturn Tmp + (Multiple - (Tmp % Multiple));\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct compute_ceilMultiple<false, true>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tassert(Multiple > genType(0));\n\t\t\tif(Source > genType(0))\n\t\t\t{\n\t\t\t\tgenType Tmp = Source - genType(1);\n\t\t\t\treturn Tmp + (Multiple - (Tmp % Multiple));\n\t\t\t}\n\t\t\telse\n\t\t\t\treturn Source + (-Source % Multiple);\n\t\t}\n\t};\n\n\ttemplate<bool is_float, bool is_signed>\n\tstruct compute_floorMultiple{};\n\n\ttemplate<>\n\tstruct compute_floorMultiple<true, true>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tif(Source >= genType(0))\n\t\t\t\treturn Source - std::fmod(Source, Multiple);\n\t\t\telse\n\t\t\t\treturn Source - std::fmod(Source, Multiple) - Multiple;\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct compute_floorMultiple<false, false>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tif(Source >= genType(0))\n\t\t\t\treturn Source - Source % Multiple;\n\t\t\telse\n\t\t\t{\n\t\t\t\tgenType Tmp = Source + genType(1);\n\t\t\t\treturn Tmp - Tmp % Multiple - Multiple;\n\t\t\t}\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct compute_floorMultiple<false, true>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tif(Source >= genType(0))\n\t\t\t\treturn Source - Source % Multiple;\n\t\t\telse\n\t\t\t{\n\t\t\t\tgenType Tmp = Source + genType(1);\n\t\t\t\treturn Tmp - Tmp % Multiple - Multiple;\n\t\t\t}\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER bool isPowerOfTwo(genIUType Value)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'isPowerOfTwo' only accept integer inputs\");\n\n\t\tgenIUType const Result = glm::abs(Value);\n\t\treturn !(Result & (Result - 1));\n\t}\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType nextPowerOfTwo(genIUType value)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'nextPowerOfTwo' only accept integer inputs\");\n\n\t\treturn detail::compute_ceilPowerOfTwo<1, genIUType, defaultp, std::numeric_limits<genIUType>::is_signed>::call(vec<1, genIUType, defaultp>(value)).x;\n\t}\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType prevPowerOfTwo(genIUType value)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'prevPowerOfTwo' only accept integer inputs\");\n\n\t\treturn isPowerOfTwo(value) ? value : static_cast<genIUType>(static_cast<genIUType>(1) << static_cast<genIUType>(findMSB(value)));\n\t}\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER bool isMultiple(genIUType Value, genIUType Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'isMultiple' only accept integer inputs\");\n\n\t\treturn isMultiple(vec<1, genIUType>(Value), vec<1, genIUType>(Multiple)).x;\n\t}\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType nextMultiple(genIUType Source, genIUType Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'nextMultiple' only accept integer inputs\");\n\n\t\treturn detail::compute_ceilMultiple<std::numeric_limits<genIUType>::is_iec559, std::numeric_limits<genIUType>::is_signed>::call(Source, Multiple);\n\t}\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType prevMultiple(genIUType Source, genIUType Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'prevMultiple' only accept integer inputs\");\n\n\t\treturn detail::compute_floorMultiple<std::numeric_limits<genIUType>::is_iec559, std::numeric_limits<genIUType>::is_signed>::call(Source, Multiple);\n\t}\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER int findNSB(genIUType x, int significantBitCount)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findNSB' only accept integer inputs\");\n\n\t\tif(bitCount(x) < significantBitCount)\n\t\t\treturn -1;\n\n\t\tgenIUType const One = static_cast<genIUType>(1);\n\t\tint bitPos = 0;\n\n\t\tgenIUType key = x;\n\t\tint nBitCount = significantBitCount;\n\t\tint Step = sizeof(x) * 8 / 2;\n\t\twhile (key > One)\n\t\t{\n\t\t\tgenIUType Mask = static_cast<genIUType>((One << Step) - One);\n\t\t\tgenIUType currentKey = key & Mask;\n\t\t\tint currentBitCount = bitCount(currentKey);\n\t\t\tif (nBitCount > currentBitCount)\n\t\t\t{\n\t\t\t\tnBitCount -= currentBitCount;\n\t\t\t\tbitPos += Step;\n\t\t\t\tkey >>= static_cast<genIUType>(Step);\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tkey = key & Mask;\n\t\t\t}\n\n\t\t\tStep >>= 1;\n\t\t}\n\n\t\treturn static_cast<int>(bitPos);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/scalar_packing.hpp",
    "content": "/// @ref ext_scalar_packing\n/// @file glm/ext/scalar_packing.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_scalar_packing GLM_EXT_scalar_packing\n/// @ingroup ext\n///\n/// Include <glm/ext/scalar_packing.hpp> to use the features of this extension.\n///\n/// This extension provides a set of function to convert scalar values to packed\n/// formats.\n\n#pragma once\n\n// Dependency:\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_packing extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_scalar_packing\n\t/// @{\n\n\n\t/// @}\n}// namespace glm\n\n#include \"scalar_packing.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/scalar_packing.inl",
    "content": ""
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/scalar_reciprocal.hpp",
    "content": "/// @ref ext_scalar_reciprocal\n/// @file glm/ext/scalar_reciprocal.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_scalar_reciprocal GLM_EXT_scalar_reciprocal\n/// @ingroup ext\n///\n/// Include <glm/ext/scalar_reciprocal.hpp> to use the features of this extension.\n///\n/// Define secant, cosecant and cotangent functions.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_reciprocal extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_scalar_reciprocal\n\t/// @{\n\n\t/// Secant function.\n\t/// hypotenuse / adjacent or 1 / cos(x)\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType sec(genType angle);\n\n\t/// Cosecant function.\n\t/// hypotenuse / opposite or 1 / sin(x)\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType csc(genType angle);\n\n\t/// Cotangent function.\n\t/// adjacent / opposite or 1 / tan(x)\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType cot(genType angle);\n\n\t/// Inverse secant function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType asec(genType x);\n\n\t/// Inverse cosecant function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType acsc(genType x);\n\n\t/// Inverse cotangent function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType acot(genType x);\n\n\t/// Secant hyperbolic function.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType sech(genType angle);\n\n\t/// Cosecant hyperbolic function.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType csch(genType angle);\n\n\t/// Cotangent hyperbolic function.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType coth(genType angle);\n\n\t/// Inverse secant hyperbolic function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType asech(genType x);\n\n\t/// Inverse cosecant hyperbolic function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType acsch(genType x);\n\n\t/// Inverse cotangent hyperbolic function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_scalar_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType acoth(genType x);\n\n\t/// @}\n}//namespace glm\n\n#include \"scalar_reciprocal.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/scalar_reciprocal.inl",
    "content": "/// @ref ext_scalar_reciprocal\n\n#include \"../trigonometric.hpp\"\n#include <limits>\n\nnamespace glm\n{\n\t// sec\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType sec(genType angle)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'sec' only accept floating-point values\");\n\t\treturn genType(1) / glm::cos(angle);\n\t}\n\n\t// csc\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType csc(genType angle)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'csc' only accept floating-point values\");\n\t\treturn genType(1) / glm::sin(angle);\n\t}\n\n\t// cot\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType cot(genType angle)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'cot' only accept floating-point values\");\n\n\t\tgenType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0);\n\t\treturn glm::tan(pi_over_2 - angle);\n\t}\n\n\t// asec\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType asec(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'asec' only accept floating-point values\");\n\t\treturn acos(genType(1) / x);\n\t}\n\n\t// acsc\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType acsc(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'acsc' only accept floating-point values\");\n\t\treturn asin(genType(1) / x);\n\t}\n\n\t// acot\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType acot(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'acot' only accept floating-point values\");\n\n\t\tgenType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0);\n\t\treturn pi_over_2 - atan(x);\n\t}\n\n\t// sech\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType sech(genType angle)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'sech' only accept floating-point values\");\n\t\treturn genType(1) / glm::cosh(angle);\n\t}\n\n\t// csch\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType csch(genType angle)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'csch' only accept floating-point values\");\n\t\treturn genType(1) / glm::sinh(angle);\n\t}\n\n\t// coth\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType coth(genType angle)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'coth' only accept floating-point values\");\n\t\treturn glm::cosh(angle) / glm::sinh(angle);\n\t}\n\n\t// asech\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType asech(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'asech' only accept floating-point values\");\n\t\treturn acosh(genType(1) / x);\n\t}\n\n\t// acsch\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType acsch(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'acsch' only accept floating-point values\");\n\t\treturn asinh(genType(1) / x);\n\t}\n\n\t// acoth\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType acoth(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'acoth' only accept floating-point values\");\n\t\treturn atanh(genType(1) / x);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/scalar_relational.hpp",
    "content": "/// @ref ext_scalar_relational\n/// @file glm/ext/scalar_relational.hpp\n///\n/// @defgroup ext_scalar_relational GLM_EXT_scalar_relational\n/// @ingroup ext\n///\n/// Exposes comparison functions for scalar types that take a user defined epsilon values.\n///\n/// Include <glm/ext/scalar_relational.hpp> to use the features of this extension.\n///\n/// @see core_vector_relational\n/// @see ext_vector_relational\n/// @see ext_matrix_relational\n\n#pragma once\n\n// Dependencies\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_relational extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_scalar_relational\n\t/// @{\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam genType Floating-point or integer scalar types\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool equal(genType const& x, genType const& y, genType const& epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| >= epsilon.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam genType Floating-point or integer scalar types\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, genType const& epsilon);\n\n\t/// Returns the component-wise comparison between two scalars in term of ULPs.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @param x First operand.\n\t/// @param y Second operand.\n\t/// @param ULPs Maximum difference in ULPs between the two operators to consider them equal.\n\t///\n\t/// @tparam genType Floating-point or integer scalar types\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool equal(genType const& x, genType const& y, int ULPs);\n\n\t/// Returns the component-wise comparison between two scalars in term of ULPs.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @param x First operand.\n\t/// @param y Second operand.\n\t/// @param ULPs Maximum difference in ULPs between the two operators to consider them not equal.\n\t///\n\t/// @tparam genType Floating-point or integer scalar types\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, int ULPs);\n\n\t/// @}\n}//namespace glm\n\n#include \"scalar_relational.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/scalar_relational.inl",
    "content": "#include \"../common.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n#include \"../detail/type_float.hpp\"\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool equal(genType const& x, genType const& y, genType const& epsilon)\n\t{\n\t\treturn abs(x - y) <= epsilon;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, genType const& epsilon)\n\t{\n\t\treturn abs(x - y) > epsilon;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool equal(genType const& x, genType const& y, int MaxULPs)\n\t{\n\t\tdetail::float_t<genType> const a(x);\n\t\tdetail::float_t<genType> const b(y);\n\n\t\t// Different signs means they do not match.\n\t\tif(a.negative() != b.negative())\n\t\t\treturn false;\n\n\t\t// Find the difference in ULPs.\n\t\ttypename detail::float_t<genType>::int_type const DiffULPs = abs(a.i - b.i);\n\t\treturn DiffULPs <= MaxULPs;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, int ULPs)\n\t{\n\t\treturn !equal(x, y, ULPs);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/scalar_uint_sized.hpp",
    "content": "/// @ref ext_scalar_uint_sized\n/// @file glm/ext/scalar_uint_sized.hpp\n///\n/// @defgroup ext_scalar_uint_sized GLM_EXT_scalar_uint_sized\n/// @ingroup ext\n///\n/// Exposes sized unsigned integer scalar types.\n///\n/// Include <glm/ext/scalar_uint_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_int_sized\n\n#pragma once\n\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_uint_sized extension included\")\n#endif\n\nnamespace glm{\nnamespace detail\n{\n#\tif GLM_HAS_EXTENDED_INTEGER_TYPE\n\t\ttypedef std::uint8_t\t\tuint8;\n\t\ttypedef std::uint16_t\t\tuint16;\n\t\ttypedef std::uint32_t\t\tuint32;\n#\telse\n\t\ttypedef unsigned char\t\tuint8;\n\t\ttypedef unsigned short\t\tuint16;\n\t\ttypedef unsigned int\t\tuint32;\n#endif\n\n\ttemplate<>\n\tstruct is_int<uint8>\n\t{\n\t\tenum test {value = ~0};\n\t};\n\n\ttemplate<>\n\tstruct is_int<uint16>\n\t{\n\t\tenum test {value = ~0};\n\t};\n\n\ttemplate<>\n\tstruct is_int<uint64>\n\t{\n\t\tenum test {value = ~0};\n\t};\n}//namespace detail\n\n\n\t/// @addtogroup ext_scalar_uint_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer type.\n\ttypedef detail::uint8\t\tuint8;\n\n\t/// 16 bit unsigned integer type.\n\ttypedef detail::uint16\t\tuint16;\n\n\t/// 32 bit unsigned integer type.\n\ttypedef detail::uint32\t\tuint32;\n\n\t/// 64 bit unsigned integer type.\n\ttypedef detail::uint64\t\tuint64;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/scalar_ulp.hpp",
    "content": "/// @ref ext_scalar_ulp\n/// @file glm/ext/scalar_ulp.hpp\n///\n/// @defgroup ext_scalar_ulp GLM_EXT_scalar_ulp\n/// @ingroup ext\n///\n/// Allow the measurement of the accuracy of a function against a reference\n/// implementation. This extension works on floating-point data and provide results\n/// in ULP.\n///\n/// Include <glm/ext/scalar_ulp.hpp> to use the features of this extension.\n///\n/// @see ext_vector_ulp\n/// @see ext_scalar_relational\n\n#pragma once\n\n// Dependencies\n#include \"../ext/scalar_int_sized.hpp\"\n#include \"../common.hpp\"\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_scalar_ulp extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_scalar_ulp\n\t/// @{\n\n\t/// Return the next ULP value(s) after the input value(s).\n\t///\n\t/// @tparam genType A floating-point scalar type.\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType nextFloat(genType x);\n\n\t/// Return the previous ULP value(s) before the input value(s).\n\t///\n\t/// @tparam genType A floating-point scalar type.\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType prevFloat(genType x);\n\n\t/// Return the value(s) ULP distance after the input value(s).\n\t///\n\t/// @tparam genType A floating-point scalar type.\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType nextFloat(genType x, int ULPs);\n\n\t/// Return the value(s) ULP distance before the input value(s).\n\t///\n\t/// @tparam genType A floating-point scalar type.\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType prevFloat(genType x, int ULPs);\n\n\t/// Return the distance in the number of ULP between 2 single-precision floating-point scalars.\n\t///\n\t/// @see ext_scalar_ulp\n\tGLM_FUNC_DECL int floatDistance(float x, float y);\n\n\t/// Return the distance in the number of ULP between 2 double-precision floating-point scalars.\n\t///\n\t/// @see ext_scalar_ulp\n\tGLM_FUNC_DECL int64 floatDistance(double x, double y);\n\n\t/// @}\n}//namespace glm\n\n#include \"scalar_ulp.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/scalar_ulp.inl",
    "content": "/// Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.\n///\n/// Developed at SunPro, a Sun Microsystems, Inc. business.\n/// Permission to use, copy, modify, and distribute this\n/// software is freely granted, provided that this notice\n/// is preserved.\n\n#include \"../detail/type_float.hpp\"\n#include \"../ext/scalar_constants.hpp\"\n#include <cmath>\n#include <cfloat>\n\n#if(GLM_COMPILER & GLM_COMPILER_VC)\n#\tpragma warning(push)\n#\tpragma warning(disable : 4127)\n#endif\n\ntypedef union\n{\n\tfloat value;\n\t/* FIXME: Assumes 32 bit int.  */\n\tunsigned int word;\n} ieee_float_shape_type;\n\ntypedef union\n{\n\tdouble value;\n\tstruct\n\t{\n\t\tint lsw;\n\t\tint msw;\n\t} parts;\n} ieee_double_shape_type;\n\n#define GLM_EXTRACT_WORDS(ix0,ix1,d)\t\t\\\n\tdo {\t\t\t\t\t\t\t\t\t\\\n\t\tieee_double_shape_type ew_u;\t\t\\\n\t\tew_u.value = (d);\t\t\t\t\t\\\n\t\t(ix0) = ew_u.parts.msw;\t\t\t\t\\\n\t\t(ix1) = ew_u.parts.lsw;\t\t\t\t\\\n\t} while (0)\n\n#define GLM_GET_FLOAT_WORD(i,d)\t\t\t\t\\\n\tdo {\t\t\t\t\t\t\t\t\t\\\n\t\tieee_float_shape_type gf_u;\t\t\t\\\n\t\tgf_u.value = (d);\t\t\t\t\t\\\n\t\t(i) = gf_u.word;\t\t\t\t\t\\\n\t} while (0)\n\n#define GLM_SET_FLOAT_WORD(d,i)\t\t\t\t\\\n\tdo {\t\t\t\t\t\t\t\t\t\\\n\t\tieee_float_shape_type sf_u;\t\t\t\\\n\t\tsf_u.word = (i);\t\t\t\t\t\\\n\t\t(d) = sf_u.value;\t\t\t\t\t\\\n\t} while (0)\n\n#define GLM_INSERT_WORDS(d,ix0,ix1)\t\t\t\\\n\tdo {\t\t\t\t\t\t\t\t\t\\\n\t\tieee_double_shape_type iw_u;\t\t\\\n\t\tiw_u.parts.msw = (ix0);\t\t\t\t\\\n\t\tiw_u.parts.lsw = (ix1);\t\t\t\t\\\n\t\t(d) = iw_u.value;\t\t\t\t\t\\\n\t} while (0)\n\nnamespace glm{\nnamespace detail\n{\n\tGLM_FUNC_QUALIFIER float nextafterf(float x, float y)\n\t{\n\t\tvolatile float t;\n\t\tint hx, hy, ix, iy;\n\n\t\tGLM_GET_FLOAT_WORD(hx, x);\n\t\tGLM_GET_FLOAT_WORD(hy, y);\n\t\tix = hx & 0x7fffffff;\t\t// |x|\n\t\tiy = hy & 0x7fffffff;\t\t// |y|\n\n\t\tif((ix > 0x7f800000) ||\t// x is nan\n\t\t\t(iy > 0x7f800000))\t// y is nan\n\t\t\treturn x + y;\n\t\tif(abs(y - x) <= epsilon<float>())\n\t\t\treturn y;\t\t// x=y, return y\n\t\tif(ix == 0)\n\t\t{\t\t\t\t// x == 0\n\t\t\tGLM_SET_FLOAT_WORD(x, (hy & 0x80000000) | 1);// return +-minsubnormal\n\t\t\tt = x * x;\n\t\t\tif(abs(t - x) <= epsilon<float>())\n\t\t\t\treturn t;\n\t\t\telse\n\t\t\t\treturn x;\t// raise underflow flag\n\t\t}\n\t\tif(hx >= 0)\n\t\t{\t\t\t\t\t\t// x > 0\n\t\t\tif(hx > hy)\t\t\t// x > y, x -= ulp\n\t\t\t\thx -= 1;\n\t\t\telse\t\t\t\t// x < y, x += ulp\n\t\t\t\thx += 1;\n\t\t}\n\t\telse\n\t\t{\t\t\t\t\t\t// x < 0\n\t\t\tif(hy >= 0 || hx > hy)\t// x < y, x -= ulp\n\t\t\t\thx -= 1;\n\t\t\telse\t\t\t\t// x > y, x += ulp\n\t\t\t\thx += 1;\n\t\t}\n\t\thy = hx & 0x7f800000;\n\t\tif(hy >= 0x7f800000)\n\t\t\treturn x + x;  \t\t// overflow\n\t\tif(hy < 0x00800000)\t\t// underflow\n\t\t{\n\t\t\tt = x * x;\n\t\t\tif(abs(t - x) > epsilon<float>())\n\t\t\t{\t\t\t\t\t// raise underflow flag\n\t\t\t\tGLM_SET_FLOAT_WORD(y, hx);\n\t\t\t\treturn y;\n\t\t\t}\n\t\t}\n\t\tGLM_SET_FLOAT_WORD(x, hx);\n\t\treturn x;\n\t}\n\n\tGLM_FUNC_QUALIFIER double nextafter(double x, double y)\n\t{\n\t\tvolatile double t;\n\t\tint hx, hy, ix, iy;\n\t\tunsigned int lx, ly;\n\n\t\tGLM_EXTRACT_WORDS(hx, lx, x);\n\t\tGLM_EXTRACT_WORDS(hy, ly, y);\n\t\tix = hx & 0x7fffffff;\t\t\t\t\t\t\t\t// |x|\n\t\tiy = hy & 0x7fffffff;\t\t\t\t\t\t\t\t// |y|\n\n\t\tif(((ix >= 0x7ff00000) && ((ix - 0x7ff00000) | lx) != 0) ||\t// x is nan\n\t\t\t((iy >= 0x7ff00000) && ((iy - 0x7ff00000) | ly) != 0))\t// y is nan\n\t\t\treturn x + y;\n\t\tif(abs(y - x) <= epsilon<double>())\n\t\t\treturn y;\t\t\t\t\t\t\t\t\t// x=y, return y\n\t\tif((ix | lx) == 0)\n\t\t{\t\t\t\t\t\t\t\t\t\t\t\t\t// x == 0\n\t\t\tGLM_INSERT_WORDS(x, hy & 0x80000000, 1);\t\t// return +-minsubnormal\n\t\t\tt = x * x;\n\t\t\tif(abs(t - x) <= epsilon<double>())\n\t\t\t\treturn t;\n\t\t\telse\n\t\t\t\treturn x;   // raise underflow flag\n\t\t}\n\t\tif(hx >= 0) {                             // x > 0\n\t\t\tif(hx > hy || ((hx == hy) && (lx > ly))) {    // x > y, x -= ulp\n\t\t\t\tif(lx == 0) hx -= 1;\n\t\t\t\tlx -= 1;\n\t\t\t}\n\t\t\telse {                            // x < y, x += ulp\n\t\t\t\tlx += 1;\n\t\t\t\tif(lx == 0) hx += 1;\n\t\t\t}\n\t\t}\n\t\telse {                                // x < 0\n\t\t\tif(hy >= 0 || hx > hy || ((hx == hy) && (lx > ly))){// x < y, x -= ulp\n\t\t\t\tif(lx == 0) hx -= 1;\n\t\t\t\tlx -= 1;\n\t\t\t}\n\t\t\telse {                            // x > y, x += ulp\n\t\t\t\tlx += 1;\n\t\t\t\tif(lx == 0) hx += 1;\n\t\t\t}\n\t\t}\n\t\thy = hx & 0x7ff00000;\n\t\tif(hy >= 0x7ff00000)\n\t\t\treturn x + x;\t\t\t// overflow\n\t\tif(hy < 0x00100000)\n\t\t{\t\t\t\t\t\t// underflow\n\t\t\tt = x * x;\n\t\t\tif(abs(t - x) > epsilon<double>())\n\t\t\t{\t\t\t\t\t// raise underflow flag\n\t\t\t\tGLM_INSERT_WORDS(y, hx, lx);\n\t\t\t\treturn y;\n\t\t\t}\n\t\t}\n\t\tGLM_INSERT_WORDS(x, hx, lx);\n\t\treturn x;\n\t}\n}//namespace detail\n}//namespace glm\n\n#if(GLM_COMPILER & GLM_COMPILER_VC)\n#\tpragma warning(pop)\n#endif\n\nnamespace glm\n{\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER float nextFloat(float x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\t\treturn std::nextafter(x, std::numeric_limits<float>::max());\n#\t\telif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))\n\t\t\treturn detail::nextafterf(x, FLT_MAX);\n#\t\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n\t\t\treturn __builtin_nextafterf(x, FLT_MAX);\n#\t\telse\n\t\t\treturn nextafterf(x, FLT_MAX);\n#\t\tendif\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER double nextFloat(double x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\t\treturn std::nextafter(x, std::numeric_limits<double>::max());\n#\t\telif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))\n\t\t\treturn detail::nextafter(x, std::numeric_limits<double>::max());\n#\t\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n\t\t\treturn __builtin_nextafter(x, DBL_MAX);\n#\t\telse\n\t\t\treturn nextafter(x, DBL_MAX);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T nextFloat(T x, int ULPs)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'next_float' only accept floating-point input\");\n\t\tassert(ULPs >= 0);\n\n\t\tT temp = x;\n\t\tfor(int i = 0; i < ULPs; ++i)\n\t\t\ttemp = nextFloat(temp);\n\t\treturn temp;\n\t}\n\n\tGLM_FUNC_QUALIFIER float prevFloat(float x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\t\treturn std::nextafter(x, std::numeric_limits<float>::min());\n#\t\telif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))\n\t\t\treturn detail::nextafterf(x, FLT_MIN);\n#\t\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n\t\t\treturn __builtin_nextafterf(x, FLT_MIN);\n#\t\telse\n\t\t\treturn nextafterf(x, FLT_MIN);\n#\t\tendif\n\t}\n\n\tGLM_FUNC_QUALIFIER double prevFloat(double x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\t\treturn std::nextafter(x, std::numeric_limits<double>::min());\n#\t\telif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))\n\t\t\treturn _nextafter(x, DBL_MIN);\n#\t\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n\t\t\treturn __builtin_nextafter(x, DBL_MIN);\n#\t\telse\n\t\t\treturn nextafter(x, DBL_MIN);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T prevFloat(T x, int ULPs)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'prev_float' only accept floating-point input\");\n\t\tassert(ULPs >= 0);\n\n\t\tT temp = x;\n\t\tfor(int i = 0; i < ULPs; ++i)\n\t\t\ttemp = prevFloat(temp);\n\t\treturn temp;\n\t}\n\n\tGLM_FUNC_QUALIFIER int floatDistance(float x, float y)\n\t{\n\t\tdetail::float_t<float> const a(x);\n\t\tdetail::float_t<float> const b(y);\n\n\t\treturn abs(a.i - b.i);\n\t}\n\n\tGLM_FUNC_QUALIFIER int64 floatDistance(double x, double y)\n\t{\n\t\tdetail::float_t<double> const a(x);\n\t\tdetail::float_t<double> const b(y);\n\n\t\treturn abs(a.i - b.i);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_bool1.hpp",
    "content": "/// @ref ext_vector_bool1\n/// @file glm/ext/vector_bool1.hpp\n///\n/// @defgroup ext_vector_bool1 GLM_EXT_vector_bool1\n/// @ingroup ext\n///\n/// Exposes bvec1 vector type.\n///\n/// Include <glm/ext/vector_bool1.hpp> to use the features of this extension.\n///\n/// @see ext_vector_bool1_precision extension.\n\n#pragma once\n\n#include \"../detail/type_vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_bool1 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_bool1\n\t/// @{\n\n\t/// 1 components vector of boolean.\n\ttypedef vec<1, bool, defaultp>\t\tbvec1;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_bool1_precision.hpp",
    "content": "/// @ref ext_vector_bool1_precision\n/// @file glm/ext/vector_bool1_precision.hpp\n///\n/// @defgroup ext_vector_bool1_precision GLM_EXT_vector_bool1_precision\n/// @ingroup ext\n///\n/// Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types.\n///\n/// Include <glm/ext/vector_bool1_precision.hpp> to use the features of this extension.\n\n#pragma once\n\n#include \"../detail/type_vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_bool1_precision extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_bool1_precision\n\t/// @{\n\n\t/// 1 component vector of bool values.\n\ttypedef vec<1, bool, highp>\t\t\thighp_bvec1;\n\n\t/// 1 component vector of bool values.\n\ttypedef vec<1, bool, mediump>\t\tmediump_bvec1;\n\n\t/// 1 component vector of bool values.\n\ttypedef vec<1, bool, lowp>\t\t\tlowp_bvec1;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_bool2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_bool2.hpp\n\n#pragma once\n#include \"../detail/type_vec2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 2 components vector of boolean.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<2, bool, defaultp>\t\tbvec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_bool2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_bool2_precision.hpp\n\n#pragma once\n#include \"../detail/type_vec2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 2 components vector of high qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, bool, highp>\t\thighp_bvec2;\n\n\t/// 2 components vector of medium qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, bool, mediump>\tmediump_bvec2;\n\n\t/// 2 components vector of low qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, bool, lowp>\t\tlowp_bvec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_bool3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_bool3.hpp\n\n#pragma once\n#include \"../detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 3 components vector of boolean.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<3, bool, defaultp>\t\tbvec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_bool3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_bool3_precision.hpp\n\n#pragma once\n#include \"../detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 3 components vector of high qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, bool, highp>\t\thighp_bvec3;\n\n\t/// 3 components vector of medium qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, bool, mediump>\tmediump_bvec3;\n\n\t/// 3 components vector of low qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, bool, lowp>\t\tlowp_bvec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_bool4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_bool4.hpp\n\n#pragma once\n#include \"../detail/type_vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 4 components vector of boolean.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<4, bool, defaultp>\t\tbvec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_bool4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_bool4_precision.hpp\n\n#pragma once\n#include \"../detail/type_vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 4 components vector of high qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, bool, highp>\t\thighp_bvec4;\n\n\t/// 4 components vector of medium qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, bool, mediump>\tmediump_bvec4;\n\n\t/// 4 components vector of low qualifier bool numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, bool, lowp>\t\tlowp_bvec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_common.hpp",
    "content": "/// @ref ext_vector_common\n/// @file glm/ext/vector_common.hpp\n///\n/// @defgroup ext_vector_common GLM_EXT_vector_common\n/// @ingroup ext\n///\n/// Exposes min and max functions for 3 to 4 vector parameters.\n///\n/// Include <glm/ext/vector_common.hpp> to use the features of this extension.\n///\n/// @see core_common\n/// @see ext_scalar_common\n\n#pragma once\n\n// Dependency:\n#include \"../ext/scalar_common.hpp\"\n#include \"../common.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_common extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_common\n\t/// @{\n\n\t/// Return the minimum component-wise values of 3 inputs\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c);\n\n\t/// Return the minimum component-wise values of 4 inputs\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d);\n\n\t/// Return the maximum component-wise values of 3 inputs\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z);\n\n\t/// Return the maximum component-wise values of 4 inputs\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> max( vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z, vec<L, T, Q> const& w);\n\n\t/// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmin(vec<L, T, Q> const& x, T y);\n\n\t/// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmin(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c);\n\n\t/// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmin\">std::fmin documentation</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d);\n\n\t/// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmax(vec<L, T, Q> const& a, T b);\n\n\t/// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b);\n\n\t/// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c);\n\n\t/// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://en.cppreference.com/w/cpp/numeric/math/fmax\">std::fmax documentation</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d);\n\n\t/// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_common\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fclamp(vec<L, T, Q> const& x, T minVal, T maxVal);\n\n\t/// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_common\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fclamp(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal);\n\n\t/// Simulate GL_CLAMP OpenGL wrap mode\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_common extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> clamp(vec<L, T, Q> const& Texcoord);\n\n\t/// Simulate GL_REPEAT OpenGL wrap mode\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_common extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> repeat(vec<L, T, Q> const& Texcoord);\n\n\t/// Simulate GL_MIRRORED_REPEAT OpenGL wrap mode\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_common extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> mirrorClamp(vec<L, T, Q> const& Texcoord);\n\n\t/// Simulate GL_MIRROR_REPEAT OpenGL wrap mode\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_common extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> mirrorRepeat(vec<L, T, Q> const& Texcoord);\n\n\t/// Returns a value equal to the nearest integer to x.\n\t/// The fraction 0.5 will round in a direction chosen by the\n\t/// implementation, presumably the direction that is fastest.\n\t///\n\t/// @param x The values of the argument must be greater or equal to zero.\n\t/// @tparam T floating point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml\">GLSL round man page</a>\n\t/// @see ext_vector_common extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int, Q> iround(vec<L, T, Q> const& x);\n\n\t/// Returns a value equal to the nearest integer to x.\n\t/// The fraction 0.5 will round in a direction chosen by the\n\t/// implementation, presumably the direction that is fastest.\n\t///\n\t/// @param x The values of the argument must be greater or equal to zero.\n\t/// @tparam T floating point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml\">GLSL round man page</a>\n\t/// @see ext_vector_common extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, uint, Q> uround(vec<L, T, Q> const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"vector_common.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_common.inl",
    "content": "#include \"../detail/_vectorize.hpp\"\n\nnamespace glm\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, \"'min' only accept floating-point or integer inputs\");\n\t\treturn glm::min(glm::min(x, y), z);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> min(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z, vec<L, T, Q> const& w)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, \"'min' only accept floating-point or integer inputs\");\n\t\treturn glm::min(glm::min(x, y), glm::min(z, w));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, \"'max' only accept floating-point or integer inputs\");\n\t\treturn glm::max(glm::max(x, y), z);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, T, Q> max(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& z, vec<L, T, Q> const& w)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559 || std::numeric_limits<T>::is_integer, \"'max' only accept floating-point or integer inputs\");\n\t\treturn glm::max(glm::max(x, y), glm::max(z, w));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmin(vec<L, T, Q> const& a, T b)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmin' only accept floating-point inputs\");\n\t\treturn detail::functor2<vec, L, T, Q>::call(fmin, a, vec<L, T, Q>(b));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmin' only accept floating-point inputs\");\n\t\treturn detail::functor2<vec, L, T, Q>::call(fmin, a, b);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmin' only accept floating-point inputs\");\n\t\treturn fmin(fmin(a, b), c);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmin(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmin' only accept floating-point inputs\");\n\t\treturn fmin(fmin(a, b), fmin(c, d));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmax(vec<L, T, Q> const& a, T b)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmax' only accept floating-point inputs\");\n\t\treturn detail::functor2<vec, L, T, Q>::call(fmax, a, vec<L, T, Q>(b));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmax' only accept floating-point inputs\");\n\t\treturn detail::functor2<vec, L, T, Q>::call(fmax, a, b);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmax' only accept floating-point inputs\");\n\t\treturn fmax(fmax(a, b), c);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmax(vec<L, T, Q> const& a, vec<L, T, Q> const& b, vec<L, T, Q> const& c, vec<L, T, Q> const& d)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fmax' only accept floating-point inputs\");\n\t\treturn fmax(fmax(a, b), fmax(c, d));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fclamp(vec<L, T, Q> const& x, T minVal, T maxVal)\n\t{\n\t\treturn fmin(fmax(x, vec<L, T, Q>(minVal)), vec<L, T, Q>(maxVal));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fclamp(vec<L, T, Q> const& x, vec<L, T, Q> const& minVal, vec<L, T, Q> const& maxVal)\n\t{\n\t\treturn fmin(fmax(x, minVal), maxVal);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> clamp(vec<L, T, Q> const& Texcoord)\n\t{\n\t\treturn glm::clamp(Texcoord, vec<L, T, Q>(0), vec<L, T, Q>(1));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> repeat(vec<L, T, Q> const& Texcoord)\n\t{\n\t\treturn glm::fract(Texcoord);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> mirrorClamp(vec<L, T, Q> const& Texcoord)\n\t{\n\t\treturn glm::fract(glm::abs(Texcoord));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> mirrorRepeat(vec<L, T, Q> const& Texcoord)\n\t{\n\t\tvec<L, T, Q> const Abs = glm::abs(Texcoord);\n\t\tvec<L, T, Q> const Clamp = glm::mod(glm::floor(Abs), vec<L, T, Q>(2));\n\t\tvec<L, T, Q> const Floor = glm::floor(Abs);\n\t\tvec<L, T, Q> const Rest = Abs - Floor;\n\t\tvec<L, T, Q> const Mirror = Clamp + Rest;\n\t\treturn mix(Rest, vec<L, T, Q>(1) - Rest, glm::greaterThanEqual(Mirror, vec<L, T, Q>(1)));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int, Q> iround(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'iround' only accept floating-point inputs\");\n\t\tassert(all(lessThanEqual(vec<L, T, Q>(0), x)));\n\n\t\treturn vec<L, int, Q>(x + static_cast<T>(0.5));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, uint, Q> uround(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'uround' only accept floating-point inputs\");\n\t\tassert(all(lessThanEqual(vec<L, T, Q>(0), x)));\n\n\t\treturn vec<L, uint, Q>(x + static_cast<T>(0.5));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_double1.hpp",
    "content": "/// @ref ext_vector_double1\n/// @file glm/ext/vector_double1.hpp\n///\n/// @defgroup ext_vector_double1 GLM_EXT_vector_double1\n/// @ingroup ext\n///\n/// Exposes double-precision floating point vector type with one component.\n///\n/// Include <glm/ext/vector_double1.hpp> to use the features of this extension.\n///\n/// @see ext_vector_double1_precision extension.\n/// @see ext_vector_float1 extension.\n\n#pragma once\n\n#include \"../detail/type_vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_double1 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_double1\n\t/// @{\n\n\t/// 1 components vector of double-precision floating-point numbers.\n\ttypedef vec<1, double, defaultp>\t\tdvec1;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_double1_precision.hpp",
    "content": "/// @ref ext_vector_double1_precision\n/// @file glm/ext/vector_double1_precision.hpp\n///\n/// @defgroup ext_vector_double1_precision GLM_EXT_vector_double1_precision\n/// @ingroup ext\n///\n/// Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types.\n///\n/// Include <glm/ext/vector_double1_precision.hpp> to use the features of this extension.\n///\n/// @see ext_vector_double1\n\n#pragma once\n\n#include \"../detail/type_vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_double1_precision extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_double1_precision\n\t/// @{\n\n\t/// 1 component vector of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, highp>\t\thighp_dvec1;\n\n\t/// 1 component vector of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, mediump>\t\tmediump_dvec1;\n\n\t/// 1 component vector of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, lowp>\t\tlowp_dvec1;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_double2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_double2.hpp\n\n#pragma once\n#include \"../detail/type_vec2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 2 components vector of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<2, double, defaultp>\t\tdvec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_double2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_double2_precision.hpp\n\n#pragma once\n#include \"../detail/type_vec2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 2 components vector of high double-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, double, highp>\t\thighp_dvec2;\n\n\t/// 2 components vector of medium double-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, double, mediump>\t\tmediump_dvec2;\n\n\t/// 2 components vector of low double-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, double, lowp>\t\tlowp_dvec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_double3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_double3.hpp\n\n#pragma once\n#include \"../detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 3 components vector of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<3, double, defaultp>\t\tdvec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_double3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_double3_precision.hpp\n\n#pragma once\n#include \"../detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 3 components vector of high double-qualifier floating-point numbers.\n\t/// There is no guarantee on the actual qualifier.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, double, highp>\t\thighp_dvec3;\n\n\t/// 3 components vector of medium double-qualifier floating-point numbers.\n\t/// There is no guarantee on the actual qualifier.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, double, mediump>\t\tmediump_dvec3;\n\n\t/// 3 components vector of low double-qualifier floating-point numbers.\n\t/// There is no guarantee on the actual qualifier.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, double, lowp>\t\tlowp_dvec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_double4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_double4.hpp\n\n#pragma once\n#include \"../detail/type_vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 4 components vector of double-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<4, double, defaultp>\t\tdvec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_double4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_double4_precision.hpp\n\n#pragma once\n#include \"../detail/setup.hpp\"\n#include \"../detail/type_vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 4 components vector of high double-qualifier floating-point numbers.\n\t/// There is no guarantee on the actual qualifier.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, double, highp>\t\thighp_dvec4;\n\n\t/// 4 components vector of medium double-qualifier floating-point numbers.\n\t/// There is no guarantee on the actual qualifier.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, double, mediump>\t\tmediump_dvec4;\n\n\t/// 4 components vector of low double-qualifier floating-point numbers.\n\t/// There is no guarantee on the actual qualifier.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, double, lowp>\t\tlowp_dvec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_float1.hpp",
    "content": "/// @ref ext_vector_float1\n/// @file glm/ext/vector_float1.hpp\n///\n/// @defgroup ext_vector_float1 GLM_EXT_vector_float1\n/// @ingroup ext\n///\n/// Exposes single-precision floating point vector type with one component.\n///\n/// Include <glm/ext/vector_float1.hpp> to use the features of this extension.\n///\n/// @see ext_vector_float1_precision extension.\n/// @see ext_vector_double1 extension.\n\n#pragma once\n\n#include \"../detail/type_vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_float1 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_float1\n\t/// @{\n\n\t/// 1 components vector of single-precision floating-point numbers.\n\ttypedef vec<1, float, defaultp>\t\tvec1;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_float1_precision.hpp",
    "content": "/// @ref ext_vector_float1_precision\n/// @file glm/ext/vector_float1_precision.hpp\n///\n/// @defgroup ext_vector_float1_precision GLM_EXT_vector_float1_precision\n/// @ingroup ext\n///\n/// Exposes highp_vec1, mediump_vec1 and lowp_vec1 types.\n///\n/// Include <glm/ext/vector_float1_precision.hpp> to use the features of this extension.\n///\n/// @see ext_vector_float1 extension.\n\n#pragma once\n\n#include \"../detail/type_vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_float1_precision extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_float1_precision\n\t/// @{\n\n\t/// 1 component vector of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, highp>\t\thighp_vec1;\n\n\t/// 1 component vector of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, mediump>\t\tmediump_vec1;\n\n\t/// 1 component vector of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, lowp>\t\t\tlowp_vec1;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_float2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_float2.hpp\n\n#pragma once\n#include \"../detail/type_vec2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 2 components vector of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<2, float, defaultp>\tvec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_float2_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_float2_precision.hpp\n\n#pragma once\n#include \"../detail/type_vec2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 2 components vector of high single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, float, highp>\t\thighp_vec2;\n\n\t/// 2 components vector of medium single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, float, mediump>\t\tmediump_vec2;\n\n\t/// 2 components vector of low single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<2, float, lowp>\t\t\tlowp_vec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_float3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_float3.hpp\n\n#pragma once\n#include \"../detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 3 components vector of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<3, float, defaultp>\t\tvec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_float3_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_float3_precision.hpp\n\n#pragma once\n#include \"../detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 3 components vector of high single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, float, highp>\t\thighp_vec3;\n\n\t/// 3 components vector of medium single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, float, mediump>\t\tmediump_vec3;\n\n\t/// 3 components vector of low single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<3, float, lowp>\t\t\tlowp_vec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_float4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_float4.hpp\n\n#pragma once\n#include \"../detail/type_vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 4 components vector of single-precision floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<4, float, defaultp>\t\tvec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_float4_precision.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_float4_precision.hpp\n\n#pragma once\n#include \"../detail/type_vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector_precision\n\t/// @{\n\n\t/// 4 components vector of high single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, float, highp>\t\thighp_vec4;\n\n\t/// 4 components vector of medium single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, float, mediump>\t\tmediump_vec4;\n\n\t/// 4 components vector of low single-qualifier floating-point numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier</a>\n\ttypedef vec<4, float, lowp>\t\t\tlowp_vec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_int1.hpp",
    "content": "/// @ref ext_vector_int1\n/// @file glm/ext/vector_int1.hpp\n///\n/// @defgroup ext_vector_int1 GLM_EXT_vector_int1\n/// @ingroup ext\n///\n/// Exposes ivec1 vector type.\n///\n/// Include <glm/ext/vector_int1.hpp> to use the features of this extension.\n///\n/// @see ext_vector_uint1 extension.\n/// @see ext_vector_int1_precision extension.\n\n#pragma once\n\n#include \"../detail/type_vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_int1 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_int1\n\t/// @{\n\n\t/// 1 component vector of signed integer numbers.\n\ttypedef vec<1, int, defaultp>\t\t\tivec1;\n\n\t/// @}\n}//namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_int1_sized.hpp",
    "content": "/// @ref ext_vector_int1_sized\n/// @file glm/ext/vector_int1_sized.hpp\n///\n/// @defgroup ext_vector_int1_sized GLM_EXT_vector_int1_sized\n/// @ingroup ext\n///\n/// Exposes sized signed integer vector types.\n///\n/// Include <glm/ext/vector_int1_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_int_sized\n/// @see ext_vector_uint1_sized\n\n#pragma once\n\n#include \"../ext/vector_int1.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_int1_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_int1_sized\n\t/// @{\n\n\t/// 8 bit signed integer vector of 1 component type.\n\t///\n\t/// @see ext_vector_int1_sized\n\ttypedef vec<1, int8, defaultp>\ti8vec1;\n\n\t/// 16 bit signed integer vector of 1 component type.\n\t///\n\t/// @see ext_vector_int1_sized\n\ttypedef vec<1, int16, defaultp>\ti16vec1;\n\n\t/// 32 bit signed integer vector of 1 component type.\n\t///\n\t/// @see ext_vector_int1_sized\n\ttypedef vec<1, int32, defaultp>\ti32vec1;\n\n\t/// 64 bit signed integer vector of 1 component type.\n\t///\n\t/// @see ext_vector_int1_sized\n\ttypedef vec<1, int64, defaultp>\ti64vec1;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_int2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_int2.hpp\n\n#pragma once\n#include \"../detail/type_vec2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 2 components vector of signed integer numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<2, int, defaultp>\t\tivec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_int2_sized.hpp",
    "content": "/// @ref ext_vector_int2_sized\n/// @file glm/ext/vector_int2_sized.hpp\n///\n/// @defgroup ext_vector_int2_sized GLM_EXT_vector_int2_sized\n/// @ingroup ext\n///\n/// Exposes sized signed integer vector of 2 components type.\n///\n/// Include <glm/ext/vector_int2_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_int_sized\n/// @see ext_vector_uint2_sized\n\n#pragma once\n\n#include \"../ext/vector_int2.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_int2_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_int2_sized\n\t/// @{\n\n\t/// 8 bit signed integer vector of 2 components type.\n\t///\n\t/// @see ext_vector_int2_sized\n\ttypedef vec<2, int8, defaultp>\t\ti8vec2;\n\n\t/// 16 bit signed integer vector of 2 components type.\n\t///\n\t/// @see ext_vector_int2_sized\n\ttypedef vec<2, int16, defaultp>\t\ti16vec2;\n\n\t/// 32 bit signed integer vector of 2 components type.\n\t///\n\t/// @see ext_vector_int2_sized\n\ttypedef vec<2, int32, defaultp>\t\ti32vec2;\n\n\t/// 64 bit signed integer vector of 2 components type.\n\t///\n\t/// @see ext_vector_int2_sized\n\ttypedef vec<2, int64, defaultp>\t\ti64vec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_int3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_int3.hpp\n\n#pragma once\n#include \"../detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 3 components vector of signed integer numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<3, int, defaultp>\t\tivec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_int3_sized.hpp",
    "content": "/// @ref ext_vector_int3_sized\n/// @file glm/ext/vector_int3_sized.hpp\n///\n/// @defgroup ext_vector_int3_sized GLM_EXT_vector_int3_sized\n/// @ingroup ext\n///\n/// Exposes sized signed integer vector of 3 components type.\n///\n/// Include <glm/ext/vector_int3_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_int_sized\n/// @see ext_vector_uint3_sized\n\n#pragma once\n\n#include \"../ext/vector_int3.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_int3_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_int3_sized\n\t/// @{\n\n\t/// 8 bit signed integer vector of 3 components type.\n\t///\n\t/// @see ext_vector_int3_sized\n\ttypedef vec<3, int8, defaultp>\t\ti8vec3;\n\n\t/// 16 bit signed integer vector of 3 components type.\n\t///\n\t/// @see ext_vector_int3_sized\n\ttypedef vec<3, int16, defaultp>\t\ti16vec3;\n\n\t/// 32 bit signed integer vector of 3 components type.\n\t///\n\t/// @see ext_vector_int3_sized\n\ttypedef vec<3, int32, defaultp>\t\ti32vec3;\n\n\t/// 64 bit signed integer vector of 3 components type.\n\t///\n\t/// @see ext_vector_int3_sized\n\ttypedef vec<3, int64, defaultp>\t\ti64vec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_int4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_int4.hpp\n\n#pragma once\n#include \"../detail/type_vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 4 components vector of signed integer numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<4, int, defaultp>\t\tivec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_int4_sized.hpp",
    "content": "/// @ref ext_vector_int4_sized\n/// @file glm/ext/vector_int4_sized.hpp\n///\n/// @defgroup ext_vector_int4_sized GLM_EXT_vector_int4_sized\n/// @ingroup ext\n///\n/// Exposes sized signed integer vector of 4 components type.\n///\n/// Include <glm/ext/vector_int4_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_int_sized\n/// @see ext_vector_uint4_sized\n\n#pragma once\n\n#include \"../ext/vector_int4.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_int4_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_int4_sized\n\t/// @{\n\n\t/// 8 bit signed integer vector of 4 components type.\n\t///\n\t/// @see ext_vector_int4_sized\n\ttypedef vec<4, int8, defaultp>\t\ti8vec4;\n\n\t/// 16 bit signed integer vector of 4 components type.\n\t///\n\t/// @see ext_vector_int4_sized\n\ttypedef vec<4, int16, defaultp>\t\ti16vec4;\n\n\t/// 32 bit signed integer vector of 4 components type.\n\t///\n\t/// @see ext_vector_int4_sized\n\ttypedef vec<4, int32, defaultp>\t\ti32vec4;\n\n\t/// 64 bit signed integer vector of 4 components type.\n\t///\n\t/// @see ext_vector_int4_sized\n\ttypedef vec<4, int64, defaultp>\t\ti64vec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_integer.hpp",
    "content": "/// @ref ext_vector_integer\n/// @file glm/ext/vector_integer.hpp\n///\n/// @see core (dependence)\n/// @see ext_vector_integer (dependence)\n///\n/// @defgroup ext_vector_integer GLM_EXT_vector_integer\n/// @ingroup ext\n///\n/// Include <glm/ext/vector_integer.hpp> to use the features of this extension.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/_vectorize.hpp\"\n#include \"../vector_relational.hpp\"\n#include \"../common.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_integer extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_integer\n\t/// @{\n\n\t/// Return true if the value is a power of two number.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> isPowerOfTwo(vec<L, T, Q> const& v);\n\n\t/// Return the power of two number which value is just higher the input value,\n\t/// round up to a power of two.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> nextPowerOfTwo(vec<L, T, Q> const& v);\n\n\t/// Return the power of two number which value is just lower the input value,\n\t/// round down to a power of two.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prevPowerOfTwo(vec<L, T, Q> const& v);\n\n\t/// Return true if the 'Value' is a multiple of 'Multiple'.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> isMultiple(vec<L, T, Q> const& v, T Multiple);\n\n\t/// Return true if the 'Value' is a multiple of 'Multiple'.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> isMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);\n\n\t/// Higher multiple number of Source.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @param v Source values to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> nextMultiple(vec<L, T, Q> const& v, T Multiple);\n\n\t/// Higher multiple number of Source.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @param v Source values to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> nextMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);\n\n\t/// Lower multiple number of Source.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @param v Source values to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prevMultiple(vec<L, T, Q> const& v, T Multiple);\n\n\t/// Lower multiple number of Source.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @param v Source values to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prevMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);\n\n\t/// Returns the bit number of the Nth significant bit set to\n\t/// 1 in the binary representation of value.\n\t/// If value bitcount is less than the Nth significant bit, -1 will be returned.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t///\n\t/// @see ext_vector_integer\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int, Q> findNSB(vec<L, T, Q> const& Source, vec<L, int, Q> SignificantBitCount);\n\n\t/// @}\n} //namespace glm\n\n#include \"vector_integer.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_integer.inl",
    "content": "#include \"scalar_integer.hpp\"\n\nnamespace glm\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> isPowerOfTwo(vec<L, T, Q> const& Value)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'isPowerOfTwo' only accept integer inputs\");\n\n\t\tvec<L, T, Q> const Result(abs(Value));\n\t\treturn equal(Result & (Result - vec<L, T, Q>(1)), vec<L, T, Q>(0));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> nextPowerOfTwo(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'nextPowerOfTwo' only accept integer inputs\");\n\n\t\treturn detail::compute_ceilPowerOfTwo<L, T, Q, std::numeric_limits<T>::is_signed>::call(v);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prevPowerOfTwo(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'prevPowerOfTwo' only accept integer inputs\");\n\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(prevPowerOfTwo, v);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> isMultiple(vec<L, T, Q> const& Value, T Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'isMultiple' only accept integer inputs\");\n\n\t\treturn equal(Value % Multiple, vec<L, T, Q>(0));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> isMultiple(vec<L, T, Q> const& Value, vec<L, T, Q> const& Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'isMultiple' only accept integer inputs\");\n\n\t\treturn equal(Value % Multiple, vec<L, T, Q>(0));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> nextMultiple(vec<L, T, Q> const& Source, T Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'nextMultiple' only accept integer inputs\");\n\n\t\treturn detail::functor2<vec, L, T, Q>::call(nextMultiple, Source, vec<L, T, Q>(Multiple));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> nextMultiple(vec<L, T, Q> const& Source, vec<L, T, Q> const& Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'nextMultiple' only accept integer inputs\");\n\n\t\treturn detail::functor2<vec, L, T, Q>::call(nextMultiple, Source, Multiple);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prevMultiple(vec<L, T, Q> const& Source, T Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'prevMultiple' only accept integer inputs\");\n\n\t\treturn detail::functor2<vec, L, T, Q>::call(prevMultiple, Source, vec<L, T, Q>(Multiple));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prevMultiple(vec<L, T, Q> const& Source, vec<L, T, Q> const& Multiple)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'prevMultiple' only accept integer inputs\");\n\n\t\treturn detail::functor2<vec, L, T, Q>::call(prevMultiple, Source, Multiple);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int, Q> findNSB(vec<L, T, Q> const& Source, vec<L, int, Q> SignificantBitCount)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'findNSB' only accept integer inputs\");\n\n\t\treturn detail::functor2_vec_int<L, T, Q>::call(findNSB, Source, SignificantBitCount);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_packing.hpp",
    "content": "/// @ref ext_vector_packing\n/// @file glm/ext/vector_packing.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_vector_packing GLM_EXT_vector_packing\n/// @ingroup ext\n///\n/// Include <glm/ext/vector_packing.hpp> to use the features of this extension.\n///\n/// This extension provides a set of function to convert vectors to packed\n/// formats.\n\n#pragma once\n\n// Dependency:\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_packing extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_packing\n\t/// @{\n\n\n\t/// @}\n}// namespace glm\n\n#include \"vector_packing.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_packing.inl",
    "content": ""
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_reciprocal.hpp",
    "content": "/// @ref ext_vector_reciprocal\n/// @file glm/ext/vector_reciprocal.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup ext_vector_reciprocal GLM_EXT_vector_reciprocal\n/// @ingroup ext\n///\n/// Include <glm/ext/vector_reciprocal.hpp> to use the features of this extension.\n///\n/// Define secant, cosecant and cotangent functions.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_reciprocal extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_reciprocal\n\t/// @{\n\n\t/// Secant function.\n\t/// hypotenuse / adjacent or 1 / cos(x)\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType sec(genType angle);\n\n\t/// Cosecant function.\n\t/// hypotenuse / opposite or 1 / sin(x)\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType csc(genType angle);\n\n\t/// Cotangent function.\n\t/// adjacent / opposite or 1 / tan(x)\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType cot(genType angle);\n\n\t/// Inverse secant function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType asec(genType x);\n\n\t/// Inverse cosecant function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType acsc(genType x);\n\n\t/// Inverse cotangent function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType acot(genType x);\n\n\t/// Secant hyperbolic function.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType sech(genType angle);\n\n\t/// Cosecant hyperbolic function.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType csch(genType angle);\n\n\t/// Cotangent hyperbolic function.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType coth(genType angle);\n\n\t/// Inverse secant hyperbolic function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType asech(genType x);\n\n\t/// Inverse cosecant hyperbolic function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType acsch(genType x);\n\n\t/// Inverse cotangent hyperbolic function.\n\t///\n\t/// @return Return an angle expressed in radians.\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see ext_vector_reciprocal\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType acoth(genType x);\n\n\t/// @}\n}//namespace glm\n\n#include \"vector_reciprocal.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_reciprocal.inl",
    "content": "/// @ref ext_vector_reciprocal\n\n#include \"../trigonometric.hpp\"\n#include <limits>\n\nnamespace glm\n{\n\t// sec\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> sec(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'sec' only accept floating-point inputs\");\n\t\treturn static_cast<T>(1) / detail::functor1<vec, L, T, T, Q>::call(cos, x);\n\t}\n\n\t// csc\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> csc(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'csc' only accept floating-point inputs\");\n\t\treturn static_cast<T>(1) / detail::functor1<vec, L, T, T, Q>::call(sin, x);\n\t}\n\n\t// cot\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> cot(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'cot' only accept floating-point inputs\");\n\t\tT const pi_over_2 = static_cast<T>(3.1415926535897932384626433832795 / 2.0);\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(tan, pi_over_2 - x);\n\t}\n\n\t// asec\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> asec(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'asec' only accept floating-point inputs\");\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(acos, static_cast<T>(1) / x);\n\t}\n\n\t// acsc\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> acsc(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'acsc' only accept floating-point inputs\");\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(asin, static_cast<T>(1) / x);\n\t}\n\n\t// acot\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> acot(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'acot' only accept floating-point inputs\");\n\t\tT const pi_over_2 = static_cast<T>(3.1415926535897932384626433832795 / 2.0);\n\t\treturn pi_over_2 - detail::functor1<vec, L, T, T, Q>::call(atan, x);\n\t}\n\n\t// sech\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> sech(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'sech' only accept floating-point inputs\");\n\t\treturn static_cast<T>(1) / detail::functor1<vec, L, T, T, Q>::call(cosh, x);\n\t}\n\n\t// csch\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> csch(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'csch' only accept floating-point inputs\");\n\t\treturn static_cast<T>(1) / detail::functor1<vec, L, T, T, Q>::call(sinh, x);\n\t}\n\n\t// coth\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> coth(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'coth' only accept floating-point inputs\");\n\t\treturn glm::cosh(x) / glm::sinh(x);\n\t}\n\n\t// asech\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> asech(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'asech' only accept floating-point inputs\");\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(acosh, static_cast<T>(1) / x);\n\t}\n\n\t// acsch\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> acsch(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'acsch' only accept floating-point inputs\");\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(asinh, static_cast<T>(1) / x);\n\t}\n\n\t// acoth\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> acoth(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'acoth' only accept floating-point inputs\");\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(atanh, static_cast<T>(1) / x);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_relational.hpp",
    "content": "/// @ref ext_vector_relational\n/// @file glm/ext/vector_relational.hpp\n///\n/// @see core (dependence)\n/// @see ext_scalar_integer (dependence)\n///\n/// @defgroup ext_vector_relational GLM_EXT_vector_relational\n/// @ingroup ext\n///\n/// Exposes comparison functions for vector types that take a user defined epsilon values.\n///\n/// Include <glm/ext/vector_relational.hpp> to use the features of this extension.\n///\n/// @see core_vector_relational\n/// @see ext_scalar_relational\n/// @see ext_matrix_relational\n\n#pragma once\n\n// Dependencies\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_relational extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_relational\n\t/// @{\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| >= epsilon.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| >= epsilon.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon);\n\n\t/// Returns the component-wise comparison between two vectors in term of ULPs.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, int ULPs);\n\n\t/// Returns the component-wise comparison between two vectors in term of ULPs.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, int, Q> const& ULPs);\n\n\t/// Returns the component-wise comparison between two vectors in term of ULPs.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, int ULPs);\n\n\t/// Returns the component-wise comparison between two vectors in term of ULPs.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, int, Q> const& ULPs);\n\n\t/// @}\n}//namespace glm\n\n#include \"vector_relational.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_relational.inl",
    "content": "#include \"../vector_relational.hpp\"\n#include \"../common.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/type_float.hpp\"\n\nnamespace glm\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T Epsilon)\n\t{\n\t\treturn equal(x, y, vec<L, T, Q>(Epsilon));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& Epsilon)\n\t{\n\t\treturn lessThanEqual(abs(x - y), Epsilon);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T Epsilon)\n\t{\n\t\treturn notEqual(x, y, vec<L, T, Q>(Epsilon));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& Epsilon)\n\t{\n\t\treturn greaterThan(abs(x - y), Epsilon);\n\t}\n\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, int MaxULPs)\n\t{\n\t\treturn equal(x, y, vec<L, int, Q>(MaxULPs));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, int, Q> const& MaxULPs)\n\t{\n\t\tvec<L, bool, Q> Result(false);\n\t\tfor(length_t i = 0; i < L; ++i)\n\t\t{\n\t\t\tdetail::float_t<T> const a(x[i]);\n\t\t\tdetail::float_t<T> const b(y[i]);\n\n\t\t\t// Different signs means they do not match.\n\t\t\tif(a.negative() != b.negative())\n\t\t\t{\n\t\t\t\t// Check for equality to make sure +0==-0\n\t\t\t\tResult[i] = a.mantissa() == b.mantissa() && a.exponent() == b.exponent();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Find the difference in ULPs.\n\t\t\t\ttypename detail::float_t<T>::int_type const DiffULPs = abs(a.i - b.i);\n\t\t\t\tResult[i] = DiffULPs <= MaxULPs[i];\n\t\t\t}\n\t\t}\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, int MaxULPs)\n\t{\n\t\treturn notEqual(x, y, vec<L, int, Q>(MaxULPs));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, int, Q> const& MaxULPs)\n\t{\n\t\treturn not_(equal(x, y, MaxULPs));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_uint1.hpp",
    "content": "/// @ref ext_vector_uint1\n/// @file glm/ext/vector_uint1.hpp\n///\n/// @defgroup ext_vector_uint1 GLM_EXT_vector_uint1\n/// @ingroup ext\n///\n/// Exposes uvec1 vector type.\n///\n/// Include <glm/ext/vector_uvec1.hpp> to use the features of this extension.\n///\n/// @see ext_vector_int1 extension.\n/// @see ext_vector_uint1_precision extension.\n\n#pragma once\n\n#include \"../detail/type_vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_uint1 extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_uint1\n\t/// @{\n\n\t/// 1 component vector of unsigned integer numbers.\n\ttypedef vec<1, unsigned int, defaultp>\t\t\tuvec1;\n\n\t/// @}\n}//namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_uint1_sized.hpp",
    "content": "/// @ref ext_vector_uint1_sized\n/// @file glm/ext/vector_uint1_sized.hpp\n///\n/// @defgroup ext_vector_uint1_sized GLM_EXT_vector_uint1_sized\n/// @ingroup ext\n///\n/// Exposes sized unsigned integer vector types.\n///\n/// Include <glm/ext/vector_uint1_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_uint_sized\n/// @see ext_vector_int1_sized\n\n#pragma once\n\n#include \"../ext/vector_uint1.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_uint1_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_uint1_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer vector of 1 component type.\n\t///\n\t/// @see ext_vector_uint1_sized\n\ttypedef vec<1, uint8, defaultp>\t\tu8vec1;\n\n\t/// 16 bit unsigned integer vector of 1 component type.\n\t///\n\t/// @see ext_vector_uint1_sized\n\ttypedef vec<1, uint16, defaultp>\tu16vec1;\n\n\t/// 32 bit unsigned integer vector of 1 component type.\n\t///\n\t/// @see ext_vector_uint1_sized\n\ttypedef vec<1, uint32, defaultp>\tu32vec1;\n\n\t/// 64 bit unsigned integer vector of 1 component type.\n\t///\n\t/// @see ext_vector_uint1_sized\n\ttypedef vec<1, uint64, defaultp>\tu64vec1;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_uint2.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_uint2.hpp\n\n#pragma once\n#include \"../detail/type_vec2.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 2 components vector of unsigned integer numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<2, unsigned int, defaultp>\t\tuvec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_uint2_sized.hpp",
    "content": "/// @ref ext_vector_uint2_sized\n/// @file glm/ext/vector_uint2_sized.hpp\n///\n/// @defgroup ext_vector_uint2_sized GLM_EXT_vector_uint2_sized\n/// @ingroup ext\n///\n/// Exposes sized unsigned integer vector of 2 components type.\n///\n/// Include <glm/ext/vector_uint2_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_uint_sized\n/// @see ext_vector_int2_sized\n\n#pragma once\n\n#include \"../ext/vector_uint2.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_uint2_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_uint2_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer vector of 2 components type.\n\t///\n\t/// @see ext_vector_uint2_sized\n\ttypedef vec<2, uint8, defaultp>\t\tu8vec2;\n\n\t/// 16 bit unsigned integer vector of 2 components type.\n\t///\n\t/// @see ext_vector_uint2_sized\n\ttypedef vec<2, uint16, defaultp>\tu16vec2;\n\n\t/// 32 bit unsigned integer vector of 2 components type.\n\t///\n\t/// @see ext_vector_uint2_sized\n\ttypedef vec<2, uint32, defaultp>\tu32vec2;\n\n\t/// 64 bit unsigned integer vector of 2 components type.\n\t///\n\t/// @see ext_vector_uint2_sized\n\ttypedef vec<2, uint64, defaultp>\tu64vec2;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_uint3.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_uint3.hpp\n\n#pragma once\n#include \"../detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 3 components vector of unsigned integer numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<3, unsigned int, defaultp>\t\tuvec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_uint3_sized.hpp",
    "content": "/// @ref ext_vector_uint3_sized\n/// @file glm/ext/vector_uint3_sized.hpp\n///\n/// @defgroup ext_vector_uint3_sized GLM_EXT_vector_uint3_sized\n/// @ingroup ext\n///\n/// Exposes sized unsigned integer vector of 3 components type.\n///\n/// Include <glm/ext/vector_uint3_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_uint_sized\n/// @see ext_vector_int3_sized\n\n#pragma once\n\n#include \"../ext/vector_uint3.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_uint3_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_uint3_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer vector of 3 components type.\n\t///\n\t/// @see ext_vector_uint3_sized\n\ttypedef vec<3, uint8, defaultp>\t\tu8vec3;\n\n\t/// 16 bit unsigned integer vector of 3 components type.\n\t///\n\t/// @see ext_vector_uint3_sized\n\ttypedef vec<3, uint16, defaultp>\tu16vec3;\n\n\t/// 32 bit unsigned integer vector of 3 components type.\n\t///\n\t/// @see ext_vector_uint3_sized\n\ttypedef vec<3, uint32, defaultp>\tu32vec3;\n\n\t/// 64 bit unsigned integer vector of 3 components type.\n\t///\n\t/// @see ext_vector_uint3_sized\n\ttypedef vec<3, uint64, defaultp>\tu64vec3;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_uint4.hpp",
    "content": "/// @ref core\n/// @file glm/ext/vector_uint4.hpp\n\n#pragma once\n#include \"../detail/type_vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_vector\n\t/// @{\n\n\t/// 4 components vector of unsigned integer numbers.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 4.1.5 Vectors</a>\n\ttypedef vec<4, unsigned int, defaultp>\t\tuvec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_uint4_sized.hpp",
    "content": "/// @ref ext_vector_uint4_sized\n/// @file glm/ext/vector_uint4_sized.hpp\n///\n/// @defgroup ext_vector_uint4_sized GLM_EXT_vector_uint4_sized\n/// @ingroup ext\n///\n/// Exposes sized unsigned integer vector of 4 components type.\n///\n/// Include <glm/ext/vector_uint4_sized.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_uint_sized\n/// @see ext_vector_int4_sized\n\n#pragma once\n\n#include \"../ext/vector_uint4.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_uint4_sized extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_uint4_sized\n\t/// @{\n\n\t/// 8 bit unsigned integer vector of 4 components type.\n\t///\n\t/// @see ext_vector_uint4_sized\n\ttypedef vec<4, uint8, defaultp>\t\tu8vec4;\n\n\t/// 16 bit unsigned integer vector of 4 components type.\n\t///\n\t/// @see ext_vector_uint4_sized\n\ttypedef vec<4, uint16, defaultp>\tu16vec4;\n\n\t/// 32 bit unsigned integer vector of 4 components type.\n\t///\n\t/// @see ext_vector_uint4_sized\n\ttypedef vec<4, uint32, defaultp>\tu32vec4;\n\n\t/// 64 bit unsigned integer vector of 4 components type.\n\t///\n\t/// @see ext_vector_uint4_sized\n\ttypedef vec<4, uint64, defaultp>\tu64vec4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_ulp.hpp",
    "content": "/// @ref ext_vector_ulp\n/// @file glm/ext/vector_ulp.hpp\n///\n/// @defgroup ext_vector_ulp GLM_EXT_vector_ulp\n/// @ingroup ext\n///\n/// Allow the measurement of the accuracy of a function against a reference\n/// implementation. This extension works on floating-point data and provide results\n/// in ULP.\n///\n/// Include <glm/ext/vector_ulp.hpp> to use the features of this extension.\n///\n/// @see ext_scalar_ulp\n/// @see ext_scalar_relational\n/// @see ext_vector_relational\n\n#pragma once\n\n// Dependencies\n#include \"../ext/scalar_ulp.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_EXT_vector_ulp extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup ext_vector_ulp\n\t/// @{\n\n\t/// Return the next ULP value(s) after the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> nextFloat(vec<L, T, Q> const& x);\n\n\t/// Return the value(s) ULP distance after the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> nextFloat(vec<L, T, Q> const& x, int ULPs);\n\n\t/// Return the value(s) ULP distance after the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> nextFloat(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs);\n\n\t/// Return the previous ULP value(s) before the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prevFloat(vec<L, T, Q> const& x);\n\n\t/// Return the value(s) ULP distance before the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prevFloat(vec<L, T, Q> const& x, int ULPs);\n\n\t/// Return the value(s) ULP distance before the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prevFloat(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs);\n\n\t/// Return the distance in the number of ULP between 2 single-precision floating-point scalars.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int, Q> floatDistance(vec<L, float, Q> const& x, vec<L, float, Q> const& y);\n\n\t/// Return the distance in the number of ULP between 2 double-precision floating-point scalars.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_scalar_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int64, Q> floatDistance(vec<L, double, Q> const& x, vec<L, double, Q> const& y);\n\n\t/// @}\n}//namespace glm\n\n#include \"vector_ulp.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext/vector_ulp.inl",
    "content": "namespace glm\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> nextFloat(vec<L, T, Q> const& x)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = nextFloat(x[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> nextFloat(vec<L, T, Q> const& x, int ULPs)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = nextFloat(x[i], ULPs);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> nextFloat(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = nextFloat(x[i], ULPs[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prevFloat(vec<L, T, Q> const& x)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = prevFloat(x[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prevFloat(vec<L, T, Q> const& x, int ULPs)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = prevFloat(x[i], ULPs);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prevFloat(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = prevFloat(x[i], ULPs[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int, Q> floatDistance(vec<L, float, Q> const& x, vec<L, float, Q> const& y)\n\t{\n\t\tvec<L, int, Q> Result;\n\t\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = floatDistance(x[i], y[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int64, Q> floatDistance(vec<L, double, Q> const& x, vec<L, double, Q> const& y)\n\t{\n\t\tvec<L, int64, Q> Result;\n\t\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = floatDistance(x[i], y[i]);\n\t\treturn Result;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/ext.hpp",
    "content": "/// @file glm/ext.hpp\n///\n/// @ref core (Dependence)\n\n#include \"detail/setup.hpp\"\n\n#pragma once\n\n#include \"glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED)\n#\tdefine GLM_MESSAGE_EXT_INCLUDED_DISPLAYED\n#\tpragma message(\"GLM: All extensions included (not recommended)\")\n#endif//GLM_MESSAGES\n\n#include \"./ext/matrix_clip_space.hpp\"\n#include \"./ext/matrix_common.hpp\"\n\n#include \"./ext/matrix_double2x2.hpp\"\n#include \"./ext/matrix_double2x2_precision.hpp\"\n#include \"./ext/matrix_double2x3.hpp\"\n#include \"./ext/matrix_double2x3_precision.hpp\"\n#include \"./ext/matrix_double2x4.hpp\"\n#include \"./ext/matrix_double2x4_precision.hpp\"\n#include \"./ext/matrix_double3x2.hpp\"\n#include \"./ext/matrix_double3x2_precision.hpp\"\n#include \"./ext/matrix_double3x3.hpp\"\n#include \"./ext/matrix_double3x3_precision.hpp\"\n#include \"./ext/matrix_double3x4.hpp\"\n#include \"./ext/matrix_double3x4_precision.hpp\"\n#include \"./ext/matrix_double4x2.hpp\"\n#include \"./ext/matrix_double4x2_precision.hpp\"\n#include \"./ext/matrix_double4x3.hpp\"\n#include \"./ext/matrix_double4x3_precision.hpp\"\n#include \"./ext/matrix_double4x4.hpp\"\n#include \"./ext/matrix_double4x4_precision.hpp\"\n\n#include \"./ext/matrix_float2x2.hpp\"\n#include \"./ext/matrix_float2x2_precision.hpp\"\n#include \"./ext/matrix_float2x3.hpp\"\n#include \"./ext/matrix_float2x3_precision.hpp\"\n#include \"./ext/matrix_float2x4.hpp\"\n#include \"./ext/matrix_float2x4_precision.hpp\"\n#include \"./ext/matrix_float3x2.hpp\"\n#include \"./ext/matrix_float3x2_precision.hpp\"\n#include \"./ext/matrix_float3x3.hpp\"\n#include \"./ext/matrix_float3x3_precision.hpp\"\n#include \"./ext/matrix_float3x4.hpp\"\n#include \"./ext/matrix_float3x4_precision.hpp\"\n#include \"./ext/matrix_float4x2.hpp\"\n#include \"./ext/matrix_float4x2_precision.hpp\"\n#include \"./ext/matrix_float4x3.hpp\"\n#include \"./ext/matrix_float4x3_precision.hpp\"\n#include \"./ext/matrix_float4x4.hpp\"\n#include \"./ext/matrix_float4x4_precision.hpp\"\n\n#include \"./ext/matrix_int2x2.hpp\"\n#include \"./ext/matrix_int2x2_sized.hpp\"\n#include \"./ext/matrix_int2x3.hpp\"\n#include \"./ext/matrix_int2x3_sized.hpp\"\n#include \"./ext/matrix_int2x4.hpp\"\n#include \"./ext/matrix_int2x4_sized.hpp\"\n#include \"./ext/matrix_int3x2.hpp\"\n#include \"./ext/matrix_int3x2_sized.hpp\"\n#include \"./ext/matrix_int3x3.hpp\"\n#include \"./ext/matrix_int3x3_sized.hpp\"\n#include \"./ext/matrix_int3x4.hpp\"\n#include \"./ext/matrix_int3x4_sized.hpp\"\n#include \"./ext/matrix_int4x2.hpp\"\n#include \"./ext/matrix_int4x2_sized.hpp\"\n#include \"./ext/matrix_int4x3.hpp\"\n#include \"./ext/matrix_int4x3_sized.hpp\"\n#include \"./ext/matrix_int4x4.hpp\"\n#include \"./ext/matrix_int4x4_sized.hpp\"\n\n#include \"./ext/matrix_uint2x2.hpp\"\n#include \"./ext/matrix_uint2x2_sized.hpp\"\n#include \"./ext/matrix_uint2x3.hpp\"\n#include \"./ext/matrix_uint2x3_sized.hpp\"\n#include \"./ext/matrix_uint2x4.hpp\"\n#include \"./ext/matrix_uint2x4_sized.hpp\"\n#include \"./ext/matrix_uint3x2.hpp\"\n#include \"./ext/matrix_uint3x2_sized.hpp\"\n#include \"./ext/matrix_uint3x3.hpp\"\n#include \"./ext/matrix_uint3x3_sized.hpp\"\n#include \"./ext/matrix_uint3x4.hpp\"\n#include \"./ext/matrix_uint3x4_sized.hpp\"\n#include \"./ext/matrix_uint4x2.hpp\"\n#include \"./ext/matrix_uint4x2_sized.hpp\"\n#include \"./ext/matrix_uint4x3.hpp\"\n#include \"./ext/matrix_uint4x3_sized.hpp\"\n#include \"./ext/matrix_uint4x4.hpp\"\n#include \"./ext/matrix_uint4x4_sized.hpp\"\n\n#include \"./ext/matrix_projection.hpp\"\n#include \"./ext/matrix_relational.hpp\"\n#include \"./ext/matrix_transform.hpp\"\n\n#include \"./ext/quaternion_common.hpp\"\n#include \"./ext/quaternion_double.hpp\"\n#include \"./ext/quaternion_double_precision.hpp\"\n#include \"./ext/quaternion_float.hpp\"\n#include \"./ext/quaternion_float_precision.hpp\"\n#include \"./ext/quaternion_exponential.hpp\"\n#include \"./ext/quaternion_geometric.hpp\"\n#include \"./ext/quaternion_relational.hpp\"\n#include \"./ext/quaternion_transform.hpp\"\n#include \"./ext/quaternion_trigonometric.hpp\"\n\n#include \"./ext/scalar_common.hpp\"\n#include \"./ext/scalar_constants.hpp\"\n#include \"./ext/scalar_integer.hpp\"\n#include \"./ext/scalar_packing.hpp\"\n#include \"./ext/scalar_reciprocal.hpp\"\n#include \"./ext/scalar_relational.hpp\"\n#include \"./ext/scalar_ulp.hpp\"\n\n#include \"./ext/scalar_int_sized.hpp\"\n#include \"./ext/scalar_uint_sized.hpp\"\n\n#include \"./ext/vector_common.hpp\"\n#include \"./ext/vector_integer.hpp\"\n#include \"./ext/vector_packing.hpp\"\n#include \"./ext/vector_reciprocal.hpp\"\n#include \"./ext/vector_relational.hpp\"\n#include \"./ext/vector_ulp.hpp\"\n\n#include \"./ext/vector_bool1.hpp\"\n#include \"./ext/vector_bool1_precision.hpp\"\n#include \"./ext/vector_bool2.hpp\"\n#include \"./ext/vector_bool2_precision.hpp\"\n#include \"./ext/vector_bool3.hpp\"\n#include \"./ext/vector_bool3_precision.hpp\"\n#include \"./ext/vector_bool4.hpp\"\n#include \"./ext/vector_bool4_precision.hpp\"\n\n#include \"./ext/vector_double1.hpp\"\n#include \"./ext/vector_double1_precision.hpp\"\n#include \"./ext/vector_double2.hpp\"\n#include \"./ext/vector_double2_precision.hpp\"\n#include \"./ext/vector_double3.hpp\"\n#include \"./ext/vector_double3_precision.hpp\"\n#include \"./ext/vector_double4.hpp\"\n#include \"./ext/vector_double4_precision.hpp\"\n\n#include \"./ext/vector_float1.hpp\"\n#include \"./ext/vector_float1_precision.hpp\"\n#include \"./ext/vector_float2.hpp\"\n#include \"./ext/vector_float2_precision.hpp\"\n#include \"./ext/vector_float3.hpp\"\n#include \"./ext/vector_float3_precision.hpp\"\n#include \"./ext/vector_float4.hpp\"\n#include \"./ext/vector_float4_precision.hpp\"\n\n#include \"./ext/vector_int1.hpp\"\n#include \"./ext/vector_int1_sized.hpp\"\n#include \"./ext/vector_int2.hpp\"\n#include \"./ext/vector_int2_sized.hpp\"\n#include \"./ext/vector_int3.hpp\"\n#include \"./ext/vector_int3_sized.hpp\"\n#include \"./ext/vector_int4.hpp\"\n#include \"./ext/vector_int4_sized.hpp\"\n\n#include \"./ext/vector_uint1.hpp\"\n#include \"./ext/vector_uint1_sized.hpp\"\n#include \"./ext/vector_uint2.hpp\"\n#include \"./ext/vector_uint2_sized.hpp\"\n#include \"./ext/vector_uint3.hpp\"\n#include \"./ext/vector_uint3_sized.hpp\"\n#include \"./ext/vector_uint4.hpp\"\n#include \"./ext/vector_uint4_sized.hpp\"\n\n#include \"./gtc/bitfield.hpp\"\n#include \"./gtc/color_space.hpp\"\n#include \"./gtc/constants.hpp\"\n#include \"./gtc/epsilon.hpp\"\n#include \"./gtc/integer.hpp\"\n#include \"./gtc/matrix_access.hpp\"\n#include \"./gtc/matrix_integer.hpp\"\n#include \"./gtc/matrix_inverse.hpp\"\n#include \"./gtc/matrix_transform.hpp\"\n#include \"./gtc/noise.hpp\"\n#include \"./gtc/packing.hpp\"\n#include \"./gtc/quaternion.hpp\"\n#include \"./gtc/random.hpp\"\n#include \"./gtc/reciprocal.hpp\"\n#include \"./gtc/round.hpp\"\n#include \"./gtc/type_precision.hpp\"\n#include \"./gtc/type_ptr.hpp\"\n#include \"./gtc/ulp.hpp\"\n#include \"./gtc/vec1.hpp\"\n#if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n#\tinclude \"./gtc/type_aligned.hpp\"\n#endif\n\n#ifdef GLM_ENABLE_EXPERIMENTAL\n#include \"./gtx/associated_min_max.hpp\"\n#include \"./gtx/bit.hpp\"\n#include \"./gtx/closest_point.hpp\"\n#include \"./gtx/color_encoding.hpp\"\n#include \"./gtx/color_space.hpp\"\n#include \"./gtx/color_space_YCoCg.hpp\"\n#include \"./gtx/compatibility.hpp\"\n#include \"./gtx/component_wise.hpp\"\n#include \"./gtx/dual_quaternion.hpp\"\n#include \"./gtx/euler_angles.hpp\"\n#include \"./gtx/extend.hpp\"\n#include \"./gtx/extended_min_max.hpp\"\n#include \"./gtx/fast_exponential.hpp\"\n#include \"./gtx/fast_square_root.hpp\"\n#include \"./gtx/fast_trigonometry.hpp\"\n#include \"./gtx/functions.hpp\"\n#include \"./gtx/gradient_paint.hpp\"\n#include \"./gtx/handed_coordinate_space.hpp\"\n#include \"./gtx/integer.hpp\"\n#include \"./gtx/intersect.hpp\"\n#include \"./gtx/log_base.hpp\"\n#include \"./gtx/matrix_cross_product.hpp\"\n#include \"./gtx/matrix_interpolation.hpp\"\n#include \"./gtx/matrix_major_storage.hpp\"\n#include \"./gtx/matrix_operation.hpp\"\n#include \"./gtx/matrix_query.hpp\"\n#include \"./gtx/mixed_product.hpp\"\n#include \"./gtx/norm.hpp\"\n#include \"./gtx/normal.hpp\"\n#include \"./gtx/normalize_dot.hpp\"\n#include \"./gtx/number_precision.hpp\"\n#include \"./gtx/optimum_pow.hpp\"\n#include \"./gtx/orthonormalize.hpp\"\n#include \"./gtx/perpendicular.hpp\"\n#include \"./gtx/polar_coordinates.hpp\"\n#include \"./gtx/projection.hpp\"\n#include \"./gtx/quaternion.hpp\"\n#include \"./gtx/raw_data.hpp\"\n#include \"./gtx/rotate_vector.hpp\"\n#include \"./gtx/spline.hpp\"\n#include \"./gtx/std_based_type.hpp\"\n#if !((GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP))\n#\tinclude \"./gtx/string_cast.hpp\"\n#endif\n#include \"./gtx/transform.hpp\"\n#include \"./gtx/transform2.hpp\"\n#include \"./gtx/vec_swizzle.hpp\"\n#include \"./gtx/vector_angle.hpp\"\n#include \"./gtx/vector_query.hpp\"\n#include \"./gtx/wrap.hpp\"\n\n#if GLM_HAS_TEMPLATE_ALIASES\n#\tinclude \"./gtx/scalar_multiplication.hpp\"\n#endif\n\n#if GLM_HAS_RANGE_FOR\n#\tinclude \"./gtx/range.hpp\"\n#endif\n#endif//GLM_ENABLE_EXPERIMENTAL\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/fwd.hpp",
    "content": "#pragma once\n\n#include \"detail/qualifier.hpp\"\n\nnamespace glm\n{\n#if GLM_HAS_EXTENDED_INTEGER_TYPE\n\ttypedef std::int8_t\t\t\t\tint8;\n\ttypedef std::int16_t\t\t\tint16;\n\ttypedef std::int32_t\t\t\tint32;\n\ttypedef std::int64_t\t\t\tint64;\n\n\ttypedef std::uint8_t\t\t\tuint8;\n\ttypedef std::uint16_t\t\t\tuint16;\n\ttypedef std::uint32_t\t\t\tuint32;\n\ttypedef std::uint64_t\t\t\tuint64;\n#else\n\ttypedef signed char\t\t\t\tint8;\n\ttypedef signed short\t\t\tint16;\n\ttypedef signed int\t\t\t\tint32;\n\ttypedef detail::int64\t\t\tint64;\n\n\ttypedef unsigned char\t\t\tuint8;\n\ttypedef unsigned short\t\t\tuint16;\n\ttypedef unsigned int\t\t\tuint32;\n\ttypedef detail::uint64\t\t\tuint64;\n#endif\n\n\t// Scalar int\n\n\ttypedef int8\t\t\t\t\tlowp_i8;\n\ttypedef int8\t\t\t\t\tmediump_i8;\n\ttypedef int8\t\t\t\t\thighp_i8;\n\ttypedef int8\t\t\t\t\ti8;\n\n\ttypedef int8\t\t\t\t\tlowp_int8;\n\ttypedef int8\t\t\t\t\tmediump_int8;\n\ttypedef int8\t\t\t\t\thighp_int8;\n\n\ttypedef int8\t\t\t\t\tlowp_int8_t;\n\ttypedef int8\t\t\t\t\tmediump_int8_t;\n\ttypedef int8\t\t\t\t\thighp_int8_t;\n\ttypedef int8\t\t\t\t\tint8_t;\n\n\ttypedef int16\t\t\t\t\tlowp_i16;\n\ttypedef int16\t\t\t\t\tmediump_i16;\n\ttypedef int16\t\t\t\t\thighp_i16;\n\ttypedef int16\t\t\t\t\ti16;\n\n\ttypedef int16\t\t\t\t\tlowp_int16;\n\ttypedef int16\t\t\t\t\tmediump_int16;\n\ttypedef int16\t\t\t\t\thighp_int16;\n\n\ttypedef int16\t\t\t\t\tlowp_int16_t;\n\ttypedef int16\t\t\t\t\tmediump_int16_t;\n\ttypedef int16\t\t\t\t\thighp_int16_t;\n\ttypedef int16\t\t\t\t\tint16_t;\n\n\ttypedef int32\t\t\t\t\tlowp_i32;\n\ttypedef int32\t\t\t\t\tmediump_i32;\n\ttypedef int32\t\t\t\t\thighp_i32;\n\ttypedef int32\t\t\t\t\ti32;\n\n\ttypedef int32\t\t\t\t\tlowp_int32;\n\ttypedef int32\t\t\t\t\tmediump_int32;\n\ttypedef int32\t\t\t\t\thighp_int32;\n\n\ttypedef int32\t\t\t\t\tlowp_int32_t;\n\ttypedef int32\t\t\t\t\tmediump_int32_t;\n\ttypedef int32\t\t\t\t\thighp_int32_t;\n\ttypedef int32\t\t\t\t\tint32_t;\n\n\ttypedef int64\t\t\t\t\tlowp_i64;\n\ttypedef int64\t\t\t\t\tmediump_i64;\n\ttypedef int64\t\t\t\t\thighp_i64;\n\ttypedef int64\t\t\t\t\ti64;\n\n\ttypedef int64\t\t\t\t\tlowp_int64;\n\ttypedef int64\t\t\t\t\tmediump_int64;\n\ttypedef int64\t\t\t\t\thighp_int64;\n\n\ttypedef int64\t\t\t\t\tlowp_int64_t;\n\ttypedef int64\t\t\t\t\tmediump_int64_t;\n\ttypedef int64\t\t\t\t\thighp_int64_t;\n\ttypedef int64\t\t\t\t\tint64_t;\n\n\t// Scalar uint\n\n\ttypedef unsigned int\t\t\tuint;\n\n\ttypedef uint8\t\t\t\t\tlowp_u8;\n\ttypedef uint8\t\t\t\t\tmediump_u8;\n\ttypedef uint8\t\t\t\t\thighp_u8;\n\ttypedef uint8\t\t\t\t\tu8;\n\n\ttypedef uint8\t\t\t\t\tlowp_uint8;\n\ttypedef uint8\t\t\t\t\tmediump_uint8;\n\ttypedef uint8\t\t\t\t\thighp_uint8;\n\n\ttypedef uint8\t\t\t\t\tlowp_uint8_t;\n\ttypedef uint8\t\t\t\t\tmediump_uint8_t;\n\ttypedef uint8\t\t\t\t\thighp_uint8_t;\n\ttypedef uint8\t\t\t\t\tuint8_t;\n\n\ttypedef uint16\t\t\t\t\tlowp_u16;\n\ttypedef uint16\t\t\t\t\tmediump_u16;\n\ttypedef uint16\t\t\t\t\thighp_u16;\n\ttypedef uint16\t\t\t\t\tu16;\n\n\ttypedef uint16\t\t\t\t\tlowp_uint16;\n\ttypedef uint16\t\t\t\t\tmediump_uint16;\n\ttypedef uint16\t\t\t\t\thighp_uint16;\n\n\ttypedef uint16\t\t\t\t\tlowp_uint16_t;\n\ttypedef uint16\t\t\t\t\tmediump_uint16_t;\n\ttypedef uint16\t\t\t\t\thighp_uint16_t;\n\ttypedef uint16\t\t\t\t\tuint16_t;\n\n\ttypedef uint32\t\t\t\t\tlowp_u32;\n\ttypedef uint32\t\t\t\t\tmediump_u32;\n\ttypedef uint32\t\t\t\t\thighp_u32;\n\ttypedef uint32\t\t\t\t\tu32;\n\n\ttypedef uint32\t\t\t\t\tlowp_uint32;\n\ttypedef uint32\t\t\t\t\tmediump_uint32;\n\ttypedef uint32\t\t\t\t\thighp_uint32;\n\n\ttypedef uint32\t\t\t\t\tlowp_uint32_t;\n\ttypedef uint32\t\t\t\t\tmediump_uint32_t;\n\ttypedef uint32\t\t\t\t\thighp_uint32_t;\n\ttypedef uint32\t\t\t\t\tuint32_t;\n\n\ttypedef uint64\t\t\t\t\tlowp_u64;\n\ttypedef uint64\t\t\t\t\tmediump_u64;\n\ttypedef uint64\t\t\t\t\thighp_u64;\n\ttypedef uint64\t\t\t\t\tu64;\n\n\ttypedef uint64\t\t\t\t\tlowp_uint64;\n\ttypedef uint64\t\t\t\t\tmediump_uint64;\n\ttypedef uint64\t\t\t\t\thighp_uint64;\n\n\ttypedef uint64\t\t\t\t\tlowp_uint64_t;\n\ttypedef uint64\t\t\t\t\tmediump_uint64_t;\n\ttypedef uint64\t\t\t\t\thighp_uint64_t;\n\ttypedef uint64\t\t\t\t\tuint64_t;\n\n\t// Scalar float\n\n\ttypedef float\t\t\t\t\tlowp_f32;\n\ttypedef float\t\t\t\t\tmediump_f32;\n\ttypedef float\t\t\t\t\thighp_f32;\n\ttypedef float\t\t\t\t\tf32;\n\n\ttypedef float\t\t\t\t\tlowp_float32;\n\ttypedef float\t\t\t\t\tmediump_float32;\n\ttypedef float\t\t\t\t\thighp_float32;\n\ttypedef float\t\t\t\t\tfloat32;\n\n\ttypedef float\t\t\t\t\tlowp_float32_t;\n\ttypedef float\t\t\t\t\tmediump_float32_t;\n\ttypedef float\t\t\t\t\thighp_float32_t;\n\ttypedef float\t\t\t\t\tfloat32_t;\n\n\n\ttypedef double\t\t\t\t\tlowp_f64;\n\ttypedef double\t\t\t\t\tmediump_f64;\n\ttypedef double\t\t\t\t\thighp_f64;\n\ttypedef double\t\t\t\t\tf64;\n\n\ttypedef double\t\t\t\t\tlowp_float64;\n\ttypedef double\t\t\t\t\tmediump_float64;\n\ttypedef double\t\t\t\t\thighp_float64;\n\ttypedef double\t\t\t\t\tfloat64;\n\n\ttypedef double\t\t\t\t\tlowp_float64_t;\n\ttypedef double\t\t\t\t\tmediump_float64_t;\n\ttypedef double\t\t\t\t\thighp_float64_t;\n\ttypedef double\t\t\t\t\tfloat64_t;\n\n\t// Vector bool\n\n\ttypedef vec<1, bool, lowp>\t\tlowp_bvec1;\n\ttypedef vec<2, bool, lowp>\t\tlowp_bvec2;\n\ttypedef vec<3, bool, lowp>\t\tlowp_bvec3;\n\ttypedef vec<4, bool, lowp>\t\tlowp_bvec4;\n\n\ttypedef vec<1, bool, mediump>\tmediump_bvec1;\n\ttypedef vec<2, bool, mediump>\tmediump_bvec2;\n\ttypedef vec<3, bool, mediump>\tmediump_bvec3;\n\ttypedef vec<4, bool, mediump>\tmediump_bvec4;\n\n\ttypedef vec<1, bool, highp>\t\thighp_bvec1;\n\ttypedef vec<2, bool, highp>\t\thighp_bvec2;\n\ttypedef vec<3, bool, highp>\t\thighp_bvec3;\n\ttypedef vec<4, bool, highp>\t\thighp_bvec4;\n\n\ttypedef vec<1, bool, defaultp>\tbvec1;\n\ttypedef vec<2, bool, defaultp>\tbvec2;\n\ttypedef vec<3, bool, defaultp>\tbvec3;\n\ttypedef vec<4, bool, defaultp>\tbvec4;\n\n\t// Vector int\n\n\ttypedef vec<1, int, lowp>\t\tlowp_ivec1;\n\ttypedef vec<2, int, lowp>\t\tlowp_ivec2;\n\ttypedef vec<3, int, lowp>\t\tlowp_ivec3;\n\ttypedef vec<4, int, lowp>\t\tlowp_ivec4;\n\n\ttypedef vec<1, int, mediump>\tmediump_ivec1;\n\ttypedef vec<2, int, mediump>\tmediump_ivec2;\n\ttypedef vec<3, int, mediump>\tmediump_ivec3;\n\ttypedef vec<4, int, mediump>\tmediump_ivec4;\n\n\ttypedef vec<1, int, highp>\t\thighp_ivec1;\n\ttypedef vec<2, int, highp>\t\thighp_ivec2;\n\ttypedef vec<3, int, highp>\t\thighp_ivec3;\n\ttypedef vec<4, int, highp>\t\thighp_ivec4;\n\n\ttypedef vec<1, int, defaultp>\tivec1;\n\ttypedef vec<2, int, defaultp>\tivec2;\n\ttypedef vec<3, int, defaultp>\tivec3;\n\ttypedef vec<4, int, defaultp>\tivec4;\n\n\ttypedef vec<1, i8, lowp>\t\tlowp_i8vec1;\n\ttypedef vec<2, i8, lowp>\t\tlowp_i8vec2;\n\ttypedef vec<3, i8, lowp>\t\tlowp_i8vec3;\n\ttypedef vec<4, i8, lowp>\t\tlowp_i8vec4;\n\n\ttypedef vec<1, i8, mediump>\t\tmediump_i8vec1;\n\ttypedef vec<2, i8, mediump>\t\tmediump_i8vec2;\n\ttypedef vec<3, i8, mediump>\t\tmediump_i8vec3;\n\ttypedef vec<4, i8, mediump>\t\tmediump_i8vec4;\n\n\ttypedef vec<1, i8, highp>\t\thighp_i8vec1;\n\ttypedef vec<2, i8, highp>\t\thighp_i8vec2;\n\ttypedef vec<3, i8, highp>\t\thighp_i8vec3;\n\ttypedef vec<4, i8, highp>\t\thighp_i8vec4;\n\n\ttypedef vec<1, i8, defaultp>\ti8vec1;\n\ttypedef vec<2, i8, defaultp>\ti8vec2;\n\ttypedef vec<3, i8, defaultp>\ti8vec3;\n\ttypedef vec<4, i8, defaultp>\ti8vec4;\n\n\ttypedef vec<1, i16, lowp>\t\tlowp_i16vec1;\n\ttypedef vec<2, i16, lowp>\t\tlowp_i16vec2;\n\ttypedef vec<3, i16, lowp>\t\tlowp_i16vec3;\n\ttypedef vec<4, i16, lowp>\t\tlowp_i16vec4;\n\n\ttypedef vec<1, i16, mediump>\tmediump_i16vec1;\n\ttypedef vec<2, i16, mediump>\tmediump_i16vec2;\n\ttypedef vec<3, i16, mediump>\tmediump_i16vec3;\n\ttypedef vec<4, i16, mediump>\tmediump_i16vec4;\n\n\ttypedef vec<1, i16, highp>\t\thighp_i16vec1;\n\ttypedef vec<2, i16, highp>\t\thighp_i16vec2;\n\ttypedef vec<3, i16, highp>\t\thighp_i16vec3;\n\ttypedef vec<4, i16, highp>\t\thighp_i16vec4;\n\n\ttypedef vec<1, i16, defaultp>\ti16vec1;\n\ttypedef vec<2, i16, defaultp>\ti16vec2;\n\ttypedef vec<3, i16, defaultp>\ti16vec3;\n\ttypedef vec<4, i16, defaultp>\ti16vec4;\n\n\ttypedef vec<1, i32, lowp>\t\tlowp_i32vec1;\n\ttypedef vec<2, i32, lowp>\t\tlowp_i32vec2;\n\ttypedef vec<3, i32, lowp>\t\tlowp_i32vec3;\n\ttypedef vec<4, i32, lowp>\t\tlowp_i32vec4;\n\n\ttypedef vec<1, i32, mediump>\tmediump_i32vec1;\n\ttypedef vec<2, i32, mediump>\tmediump_i32vec2;\n\ttypedef vec<3, i32, mediump>\tmediump_i32vec3;\n\ttypedef vec<4, i32, mediump>\tmediump_i32vec4;\n\n\ttypedef vec<1, i32, highp>\t\thighp_i32vec1;\n\ttypedef vec<2, i32, highp>\t\thighp_i32vec2;\n\ttypedef vec<3, i32, highp>\t\thighp_i32vec3;\n\ttypedef vec<4, i32, highp>\t\thighp_i32vec4;\n\n\ttypedef vec<1, i32, defaultp>\ti32vec1;\n\ttypedef vec<2, i32, defaultp>\ti32vec2;\n\ttypedef vec<3, i32, defaultp>\ti32vec3;\n\ttypedef vec<4, i32, defaultp>\ti32vec4;\n\n\ttypedef vec<1, i64, lowp>\t\tlowp_i64vec1;\n\ttypedef vec<2, i64, lowp>\t\tlowp_i64vec2;\n\ttypedef vec<3, i64, lowp>\t\tlowp_i64vec3;\n\ttypedef vec<4, i64, lowp>\t\tlowp_i64vec4;\n\n\ttypedef vec<1, i64, mediump>\tmediump_i64vec1;\n\ttypedef vec<2, i64, mediump>\tmediump_i64vec2;\n\ttypedef vec<3, i64, mediump>\tmediump_i64vec3;\n\ttypedef vec<4, i64, mediump>\tmediump_i64vec4;\n\n\ttypedef vec<1, i64, highp>\t\thighp_i64vec1;\n\ttypedef vec<2, i64, highp>\t\thighp_i64vec2;\n\ttypedef vec<3, i64, highp>\t\thighp_i64vec3;\n\ttypedef vec<4, i64, highp>\t\thighp_i64vec4;\n\n\ttypedef vec<1, i64, defaultp>\ti64vec1;\n\ttypedef vec<2, i64, defaultp>\ti64vec2;\n\ttypedef vec<3, i64, defaultp>\ti64vec3;\n\ttypedef vec<4, i64, defaultp>\ti64vec4;\n\n\t// Vector uint\n\n\ttypedef vec<1, uint, lowp>\t\tlowp_uvec1;\n\ttypedef vec<2, uint, lowp>\t\tlowp_uvec2;\n\ttypedef vec<3, uint, lowp>\t\tlowp_uvec3;\n\ttypedef vec<4, uint, lowp>\t\tlowp_uvec4;\n\n\ttypedef vec<1, uint, mediump>\tmediump_uvec1;\n\ttypedef vec<2, uint, mediump>\tmediump_uvec2;\n\ttypedef vec<3, uint, mediump>\tmediump_uvec3;\n\ttypedef vec<4, uint, mediump>\tmediump_uvec4;\n\n\ttypedef vec<1, uint, highp>\t\thighp_uvec1;\n\ttypedef vec<2, uint, highp>\t\thighp_uvec2;\n\ttypedef vec<3, uint, highp>\t\thighp_uvec3;\n\ttypedef vec<4, uint, highp>\t\thighp_uvec4;\n\n\ttypedef vec<1, uint, defaultp>\tuvec1;\n\ttypedef vec<2, uint, defaultp>\tuvec2;\n\ttypedef vec<3, uint, defaultp>\tuvec3;\n\ttypedef vec<4, uint, defaultp>\tuvec4;\n\n\ttypedef vec<1, u8, lowp>\t\tlowp_u8vec1;\n\ttypedef vec<2, u8, lowp>\t\tlowp_u8vec2;\n\ttypedef vec<3, u8, lowp>\t\tlowp_u8vec3;\n\ttypedef vec<4, u8, lowp>\t\tlowp_u8vec4;\n\n\ttypedef vec<1, u8, mediump>\t\tmediump_u8vec1;\n\ttypedef vec<2, u8, mediump>\t\tmediump_u8vec2;\n\ttypedef vec<3, u8, mediump>\t\tmediump_u8vec3;\n\ttypedef vec<4, u8, mediump>\t\tmediump_u8vec4;\n\n\ttypedef vec<1, u8, highp>\t\thighp_u8vec1;\n\ttypedef vec<2, u8, highp>\t\thighp_u8vec2;\n\ttypedef vec<3, u8, highp>\t\thighp_u8vec3;\n\ttypedef vec<4, u8, highp>\t\thighp_u8vec4;\n\n\ttypedef vec<1, u8, defaultp>\tu8vec1;\n\ttypedef vec<2, u8, defaultp>\tu8vec2;\n\ttypedef vec<3, u8, defaultp>\tu8vec3;\n\ttypedef vec<4, u8, defaultp>\tu8vec4;\n\n\ttypedef vec<1, u16, lowp>\t\tlowp_u16vec1;\n\ttypedef vec<2, u16, lowp>\t\tlowp_u16vec2;\n\ttypedef vec<3, u16, lowp>\t\tlowp_u16vec3;\n\ttypedef vec<4, u16, lowp>\t\tlowp_u16vec4;\n\n\ttypedef vec<1, u16, mediump>\tmediump_u16vec1;\n\ttypedef vec<2, u16, mediump>\tmediump_u16vec2;\n\ttypedef vec<3, u16, mediump>\tmediump_u16vec3;\n\ttypedef vec<4, u16, mediump>\tmediump_u16vec4;\n\n\ttypedef vec<1, u16, highp>\t\thighp_u16vec1;\n\ttypedef vec<2, u16, highp>\t\thighp_u16vec2;\n\ttypedef vec<3, u16, highp>\t\thighp_u16vec3;\n\ttypedef vec<4, u16, highp>\t\thighp_u16vec4;\n\n\ttypedef vec<1, u16, defaultp>\tu16vec1;\n\ttypedef vec<2, u16, defaultp>\tu16vec2;\n\ttypedef vec<3, u16, defaultp>\tu16vec3;\n\ttypedef vec<4, u16, defaultp>\tu16vec4;\n\n\ttypedef vec<1, u32, lowp>\t\tlowp_u32vec1;\n\ttypedef vec<2, u32, lowp>\t\tlowp_u32vec2;\n\ttypedef vec<3, u32, lowp>\t\tlowp_u32vec3;\n\ttypedef vec<4, u32, lowp>\t\tlowp_u32vec4;\n\n\ttypedef vec<1, u32, mediump>\tmediump_u32vec1;\n\ttypedef vec<2, u32, mediump>\tmediump_u32vec2;\n\ttypedef vec<3, u32, mediump>\tmediump_u32vec3;\n\ttypedef vec<4, u32, mediump>\tmediump_u32vec4;\n\n\ttypedef vec<1, u32, highp>\t\thighp_u32vec1;\n\ttypedef vec<2, u32, highp>\t\thighp_u32vec2;\n\ttypedef vec<3, u32, highp>\t\thighp_u32vec3;\n\ttypedef vec<4, u32, highp>\t\thighp_u32vec4;\n\n\ttypedef vec<1, u32, defaultp>\tu32vec1;\n\ttypedef vec<2, u32, defaultp>\tu32vec2;\n\ttypedef vec<3, u32, defaultp>\tu32vec3;\n\ttypedef vec<4, u32, defaultp>\tu32vec4;\n\n\ttypedef vec<1, u64, lowp>\t\tlowp_u64vec1;\n\ttypedef vec<2, u64, lowp>\t\tlowp_u64vec2;\n\ttypedef vec<3, u64, lowp>\t\tlowp_u64vec3;\n\ttypedef vec<4, u64, lowp>\t\tlowp_u64vec4;\n\n\ttypedef vec<1, u64, mediump>\tmediump_u64vec1;\n\ttypedef vec<2, u64, mediump>\tmediump_u64vec2;\n\ttypedef vec<3, u64, mediump>\tmediump_u64vec3;\n\ttypedef vec<4, u64, mediump>\tmediump_u64vec4;\n\n\ttypedef vec<1, u64, highp>\t\thighp_u64vec1;\n\ttypedef vec<2, u64, highp>\t\thighp_u64vec2;\n\ttypedef vec<3, u64, highp>\t\thighp_u64vec3;\n\ttypedef vec<4, u64, highp>\t\thighp_u64vec4;\n\n\ttypedef vec<1, u64, defaultp>\tu64vec1;\n\ttypedef vec<2, u64, defaultp>\tu64vec2;\n\ttypedef vec<3, u64, defaultp>\tu64vec3;\n\ttypedef vec<4, u64, defaultp>\tu64vec4;\n\n\t// Vector float\n\n\ttypedef vec<1, float, lowp>\t\t\tlowp_vec1;\n\ttypedef vec<2, float, lowp>\t\t\tlowp_vec2;\n\ttypedef vec<3, float, lowp>\t\t\tlowp_vec3;\n\ttypedef vec<4, float, lowp>\t\t\tlowp_vec4;\n\n\ttypedef vec<1, float, mediump>\t\tmediump_vec1;\n\ttypedef vec<2, float, mediump>\t\tmediump_vec2;\n\ttypedef vec<3, float, mediump>\t\tmediump_vec3;\n\ttypedef vec<4, float, mediump>\t\tmediump_vec4;\n\n\ttypedef vec<1, float, highp>\t\thighp_vec1;\n\ttypedef vec<2, float, highp>\t\thighp_vec2;\n\ttypedef vec<3, float, highp>\t\thighp_vec3;\n\ttypedef vec<4, float, highp>\t\thighp_vec4;\n\n\ttypedef vec<1, float, defaultp>\t\tvec1;\n\ttypedef vec<2, float, defaultp>\t\tvec2;\n\ttypedef vec<3, float, defaultp>\t\tvec3;\n\ttypedef vec<4, float, defaultp>\t\tvec4;\n\n\ttypedef vec<1, float, lowp>\t\t\tlowp_fvec1;\n\ttypedef vec<2, float, lowp>\t\t\tlowp_fvec2;\n\ttypedef vec<3, float, lowp>\t\t\tlowp_fvec3;\n\ttypedef vec<4, float, lowp>\t\t\tlowp_fvec4;\n\n\ttypedef vec<1, float, mediump>\t\tmediump_fvec1;\n\ttypedef vec<2, float, mediump>\t\tmediump_fvec2;\n\ttypedef vec<3, float, mediump>\t\tmediump_fvec3;\n\ttypedef vec<4, float, mediump>\t\tmediump_fvec4;\n\n\ttypedef vec<1, float, highp>\t\thighp_fvec1;\n\ttypedef vec<2, float, highp>\t\thighp_fvec2;\n\ttypedef vec<3, float, highp>\t\thighp_fvec3;\n\ttypedef vec<4, float, highp>\t\thighp_fvec4;\n\n\ttypedef vec<1, f32, defaultp>\t\tfvec1;\n\ttypedef vec<2, f32, defaultp>\t\tfvec2;\n\ttypedef vec<3, f32, defaultp>\t\tfvec3;\n\ttypedef vec<4, f32, defaultp>\t\tfvec4;\n\n\ttypedef vec<1, f32, lowp>\t\t\tlowp_f32vec1;\n\ttypedef vec<2, f32, lowp>\t\t\tlowp_f32vec2;\n\ttypedef vec<3, f32, lowp>\t\t\tlowp_f32vec3;\n\ttypedef vec<4, f32, lowp>\t\t\tlowp_f32vec4;\n\n\ttypedef vec<1, f32, mediump>\t\tmediump_f32vec1;\n\ttypedef vec<2, f32, mediump>\t\tmediump_f32vec2;\n\ttypedef vec<3, f32, mediump>\t\tmediump_f32vec3;\n\ttypedef vec<4, f32, mediump>\t\tmediump_f32vec4;\n\n\ttypedef vec<1, f32, highp>\t\t\thighp_f32vec1;\n\ttypedef vec<2, f32, highp>\t\t\thighp_f32vec2;\n\ttypedef vec<3, f32, highp>\t\t\thighp_f32vec3;\n\ttypedef vec<4, f32, highp>\t\t\thighp_f32vec4;\n\n\ttypedef vec<1, f32, defaultp>\t\tf32vec1;\n\ttypedef vec<2, f32, defaultp>\t\tf32vec2;\n\ttypedef vec<3, f32, defaultp>\t\tf32vec3;\n\ttypedef vec<4, f32, defaultp>\t\tf32vec4;\n\n\ttypedef vec<1, f64, lowp>\t\t\tlowp_dvec1;\n\ttypedef vec<2, f64, lowp>\t\t\tlowp_dvec2;\n\ttypedef vec<3, f64, lowp>\t\t\tlowp_dvec3;\n\ttypedef vec<4, f64, lowp>\t\t\tlowp_dvec4;\n\n\ttypedef vec<1, f64, mediump>\t\tmediump_dvec1;\n\ttypedef vec<2, f64, mediump>\t\tmediump_dvec2;\n\ttypedef vec<3, f64, mediump>\t\tmediump_dvec3;\n\ttypedef vec<4, f64, mediump>\t\tmediump_dvec4;\n\n\ttypedef vec<1, f64, highp>\t\t\thighp_dvec1;\n\ttypedef vec<2, f64, highp>\t\t\thighp_dvec2;\n\ttypedef vec<3, f64, highp>\t\t\thighp_dvec3;\n\ttypedef vec<4, f64, highp>\t\t\thighp_dvec4;\n\n\ttypedef vec<1, f64, defaultp>\t\tdvec1;\n\ttypedef vec<2, f64, defaultp>\t\tdvec2;\n\ttypedef vec<3, f64, defaultp>\t\tdvec3;\n\ttypedef vec<4, f64, defaultp>\t\tdvec4;\n\n\ttypedef vec<1, f64, lowp>\t\t\tlowp_f64vec1;\n\ttypedef vec<2, f64, lowp>\t\t\tlowp_f64vec2;\n\ttypedef vec<3, f64, lowp>\t\t\tlowp_f64vec3;\n\ttypedef vec<4, f64, lowp>\t\t\tlowp_f64vec4;\n\n\ttypedef vec<1, f64, mediump>\t\tmediump_f64vec1;\n\ttypedef vec<2, f64, mediump>\t\tmediump_f64vec2;\n\ttypedef vec<3, f64, mediump>\t\tmediump_f64vec3;\n\ttypedef vec<4, f64, mediump>\t\tmediump_f64vec4;\n\n\ttypedef vec<1, f64, highp>\t\t\thighp_f64vec1;\n\ttypedef vec<2, f64, highp>\t\t\thighp_f64vec2;\n\ttypedef vec<3, f64, highp>\t\t\thighp_f64vec3;\n\ttypedef vec<4, f64, highp>\t\t\thighp_f64vec4;\n\n\ttypedef vec<1, f64, defaultp>\t\tf64vec1;\n\ttypedef vec<2, f64, defaultp>\t\tf64vec2;\n\ttypedef vec<3, f64, defaultp>\t\tf64vec3;\n\ttypedef vec<4, f64, defaultp>\t\tf64vec4;\n\n\t// Matrix NxN\n\n\ttypedef mat<2, 2, f32, lowp>\t\tlowp_mat2;\n\ttypedef mat<3, 3, f32, lowp>\t\tlowp_mat3;\n\ttypedef mat<4, 4, f32, lowp>\t\tlowp_mat4;\n\n\ttypedef mat<2, 2, f32, mediump>\t\tmediump_mat2;\n\ttypedef mat<3, 3, f32, mediump>\t\tmediump_mat3;\n\ttypedef mat<4, 4, f32, mediump>\t\tmediump_mat4;\n\n\ttypedef mat<2, 2, f32, highp>\t\thighp_mat2;\n\ttypedef mat<3, 3, f32, highp>\t\thighp_mat3;\n\ttypedef mat<4, 4, f32, highp>\t\thighp_mat4;\n\n\ttypedef mat<2, 2, f32, defaultp>\tmat2;\n\ttypedef mat<3, 3, f32, defaultp>\tmat3;\n\ttypedef mat<4, 4, f32, defaultp>\tmat4;\n\n\ttypedef mat<2, 2, f32, lowp>\t\tlowp_fmat2;\n\ttypedef mat<3, 3, f32, lowp>\t\tlowp_fmat3;\n\ttypedef mat<4, 4, f32, lowp>\t\tlowp_fmat4;\n\n\ttypedef mat<2, 2, f32, mediump>\t\tmediump_fmat2;\n\ttypedef mat<3, 3, f32, mediump>\t\tmediump_fmat3;\n\ttypedef mat<4, 4, f32, mediump>\t\tmediump_fmat4;\n\n\ttypedef mat<2, 2, f32, highp>\t\thighp_fmat2;\n\ttypedef mat<3, 3, f32, highp>\t\thighp_fmat3;\n\ttypedef mat<4, 4, f32, highp>\t\thighp_fmat4;\n\n\ttypedef mat<2, 2, f32, defaultp>\tfmat2;\n\ttypedef mat<3, 3, f32, defaultp>\tfmat3;\n\ttypedef mat<4, 4, f32, defaultp>\tfmat4;\n\n\ttypedef mat<2, 2, f32, lowp>\t\tlowp_f32mat2;\n\ttypedef mat<3, 3, f32, lowp>\t\tlowp_f32mat3;\n\ttypedef mat<4, 4, f32, lowp>\t\tlowp_f32mat4;\n\n\ttypedef mat<2, 2, f32, mediump>\t\tmediump_f32mat2;\n\ttypedef mat<3, 3, f32, mediump>\t\tmediump_f32mat3;\n\ttypedef mat<4, 4, f32, mediump>\t\tmediump_f32mat4;\n\n\ttypedef mat<2, 2, f32, highp>\t\thighp_f32mat2;\n\ttypedef mat<3, 3, f32, highp>\t\thighp_f32mat3;\n\ttypedef mat<4, 4, f32, highp>\t\thighp_f32mat4;\n\n\ttypedef mat<2, 2, f32, defaultp>\tf32mat2;\n\ttypedef mat<3, 3, f32, defaultp>\tf32mat3;\n\ttypedef mat<4, 4, f32, defaultp>\tf32mat4;\n\n\ttypedef mat<2, 2, f64, lowp>\t\tlowp_dmat2;\n\ttypedef mat<3, 3, f64, lowp>\t\tlowp_dmat3;\n\ttypedef mat<4, 4, f64, lowp>\t\tlowp_dmat4;\n\n\ttypedef mat<2, 2, f64, mediump>\t\tmediump_dmat2;\n\ttypedef mat<3, 3, f64, mediump>\t\tmediump_dmat3;\n\ttypedef mat<4, 4, f64, mediump>\t\tmediump_dmat4;\n\n\ttypedef mat<2, 2, f64, highp>\t\thighp_dmat2;\n\ttypedef mat<3, 3, f64, highp>\t\thighp_dmat3;\n\ttypedef mat<4, 4, f64, highp>\t\thighp_dmat4;\n\n\ttypedef mat<2, 2, f64, defaultp>\tdmat2;\n\ttypedef mat<3, 3, f64, defaultp>\tdmat3;\n\ttypedef mat<4, 4, f64, defaultp>\tdmat4;\n\n\ttypedef mat<2, 2, f64, lowp>\t\tlowp_f64mat2;\n\ttypedef mat<3, 3, f64, lowp>\t\tlowp_f64mat3;\n\ttypedef mat<4, 4, f64, lowp>\t\tlowp_f64mat4;\n\n\ttypedef mat<2, 2, f64, mediump>\t\tmediump_f64mat2;\n\ttypedef mat<3, 3, f64, mediump>\t\tmediump_f64mat3;\n\ttypedef mat<4, 4, f64, mediump>\t\tmediump_f64mat4;\n\n\ttypedef mat<2, 2, f64, highp>\t\thighp_f64mat2;\n\ttypedef mat<3, 3, f64, highp>\t\thighp_f64mat3;\n\ttypedef mat<4, 4, f64, highp>\t\thighp_f64mat4;\n\n\ttypedef mat<2, 2, f64, defaultp>\tf64mat2;\n\ttypedef mat<3, 3, f64, defaultp>\tf64mat3;\n\ttypedef mat<4, 4, f64, defaultp>\tf64mat4;\n\n\t// Matrix MxN\n\n\ttypedef mat<2, 2, f32, lowp>\t\tlowp_mat2x2;\n\ttypedef mat<2, 3, f32, lowp>\t\tlowp_mat2x3;\n\ttypedef mat<2, 4, f32, lowp>\t\tlowp_mat2x4;\n\ttypedef mat<3, 2, f32, lowp>\t\tlowp_mat3x2;\n\ttypedef mat<3, 3, f32, lowp>\t\tlowp_mat3x3;\n\ttypedef mat<3, 4, f32, lowp>\t\tlowp_mat3x4;\n\ttypedef mat<4, 2, f32, lowp>\t\tlowp_mat4x2;\n\ttypedef mat<4, 3, f32, lowp>\t\tlowp_mat4x3;\n\ttypedef mat<4, 4, f32, lowp>\t\tlowp_mat4x4;\n\n\ttypedef mat<2, 2, f32, mediump>\t\tmediump_mat2x2;\n\ttypedef mat<2, 3, f32, mediump>\t\tmediump_mat2x3;\n\ttypedef mat<2, 4, f32, mediump>\t\tmediump_mat2x4;\n\ttypedef mat<3, 2, f32, mediump>\t\tmediump_mat3x2;\n\ttypedef mat<3, 3, f32, mediump>\t\tmediump_mat3x3;\n\ttypedef mat<3, 4, f32, mediump>\t\tmediump_mat3x4;\n\ttypedef mat<4, 2, f32, mediump>\t\tmediump_mat4x2;\n\ttypedef mat<4, 3, f32, mediump>\t\tmediump_mat4x3;\n\ttypedef mat<4, 4, f32, mediump>\t\tmediump_mat4x4;\n\n\ttypedef mat<2, 2, f32, highp>\t\thighp_mat2x2;\n\ttypedef mat<2, 3, f32, highp>\t\thighp_mat2x3;\n\ttypedef mat<2, 4, f32, highp>\t\thighp_mat2x4;\n\ttypedef mat<3, 2, f32, highp>\t\thighp_mat3x2;\n\ttypedef mat<3, 3, f32, highp>\t\thighp_mat3x3;\n\ttypedef mat<3, 4, f32, highp>\t\thighp_mat3x4;\n\ttypedef mat<4, 2, f32, highp>\t\thighp_mat4x2;\n\ttypedef mat<4, 3, f32, highp>\t\thighp_mat4x3;\n\ttypedef mat<4, 4, f32, highp>\t\thighp_mat4x4;\n\n\ttypedef mat<2, 2, f32, defaultp>\tmat2x2;\n\ttypedef mat<2, 3, f32, defaultp>\tmat2x3;\n\ttypedef mat<2, 4, f32, defaultp>\tmat2x4;\n\ttypedef mat<3, 2, f32, defaultp>\tmat3x2;\n\ttypedef mat<3, 3, f32, defaultp>\tmat3x3;\n\ttypedef mat<3, 4, f32, defaultp>\tmat3x4;\n\ttypedef mat<4, 2, f32, defaultp>\tmat4x2;\n\ttypedef mat<4, 3, f32, defaultp>\tmat4x3;\n\ttypedef mat<4, 4, f32, defaultp>\tmat4x4;\n\n\ttypedef mat<2, 2, f32, lowp>\t\tlowp_fmat2x2;\n\ttypedef mat<2, 3, f32, lowp>\t\tlowp_fmat2x3;\n\ttypedef mat<2, 4, f32, lowp>\t\tlowp_fmat2x4;\n\ttypedef mat<3, 2, f32, lowp>\t\tlowp_fmat3x2;\n\ttypedef mat<3, 3, f32, lowp>\t\tlowp_fmat3x3;\n\ttypedef mat<3, 4, f32, lowp>\t\tlowp_fmat3x4;\n\ttypedef mat<4, 2, f32, lowp>\t\tlowp_fmat4x2;\n\ttypedef mat<4, 3, f32, lowp>\t\tlowp_fmat4x3;\n\ttypedef mat<4, 4, f32, lowp>\t\tlowp_fmat4x4;\n\n\ttypedef mat<2, 2, f32, mediump>\t\tmediump_fmat2x2;\n\ttypedef mat<2, 3, f32, mediump>\t\tmediump_fmat2x3;\n\ttypedef mat<2, 4, f32, mediump>\t\tmediump_fmat2x4;\n\ttypedef mat<3, 2, f32, mediump>\t\tmediump_fmat3x2;\n\ttypedef mat<3, 3, f32, mediump>\t\tmediump_fmat3x3;\n\ttypedef mat<3, 4, f32, mediump>\t\tmediump_fmat3x4;\n\ttypedef mat<4, 2, f32, mediump>\t\tmediump_fmat4x2;\n\ttypedef mat<4, 3, f32, mediump>\t\tmediump_fmat4x3;\n\ttypedef mat<4, 4, f32, mediump>\t\tmediump_fmat4x4;\n\n\ttypedef mat<2, 2, f32, highp>\t\thighp_fmat2x2;\n\ttypedef mat<2, 3, f32, highp>\t\thighp_fmat2x3;\n\ttypedef mat<2, 4, f32, highp>\t\thighp_fmat2x4;\n\ttypedef mat<3, 2, f32, highp>\t\thighp_fmat3x2;\n\ttypedef mat<3, 3, f32, highp>\t\thighp_fmat3x3;\n\ttypedef mat<3, 4, f32, highp>\t\thighp_fmat3x4;\n\ttypedef mat<4, 2, f32, highp>\t\thighp_fmat4x2;\n\ttypedef mat<4, 3, f32, highp>\t\thighp_fmat4x3;\n\ttypedef mat<4, 4, f32, highp>\t\thighp_fmat4x4;\n\n\ttypedef mat<2, 2, f32, defaultp>\tfmat2x2;\n\ttypedef mat<2, 3, f32, defaultp>\tfmat2x3;\n\ttypedef mat<2, 4, f32, defaultp>\tfmat2x4;\n\ttypedef mat<3, 2, f32, defaultp>\tfmat3x2;\n\ttypedef mat<3, 3, f32, defaultp>\tfmat3x3;\n\ttypedef mat<3, 4, f32, defaultp>\tfmat3x4;\n\ttypedef mat<4, 2, f32, defaultp>\tfmat4x2;\n\ttypedef mat<4, 3, f32, defaultp>\tfmat4x3;\n\ttypedef mat<4, 4, f32, defaultp>\tfmat4x4;\n\n\ttypedef mat<2, 2, f32, lowp>\t\tlowp_f32mat2x2;\n\ttypedef mat<2, 3, f32, lowp>\t\tlowp_f32mat2x3;\n\ttypedef mat<2, 4, f32, lowp>\t\tlowp_f32mat2x4;\n\ttypedef mat<3, 2, f32, lowp>\t\tlowp_f32mat3x2;\n\ttypedef mat<3, 3, f32, lowp>\t\tlowp_f32mat3x3;\n\ttypedef mat<3, 4, f32, lowp>\t\tlowp_f32mat3x4;\n\ttypedef mat<4, 2, f32, lowp>\t\tlowp_f32mat4x2;\n\ttypedef mat<4, 3, f32, lowp>\t\tlowp_f32mat4x3;\n\ttypedef mat<4, 4, f32, lowp>\t\tlowp_f32mat4x4;\n\t\n\ttypedef mat<2, 2, f32, mediump>\t\tmediump_f32mat2x2;\n\ttypedef mat<2, 3, f32, mediump>\t\tmediump_f32mat2x3;\n\ttypedef mat<2, 4, f32, mediump>\t\tmediump_f32mat2x4;\n\ttypedef mat<3, 2, f32, mediump>\t\tmediump_f32mat3x2;\n\ttypedef mat<3, 3, f32, mediump>\t\tmediump_f32mat3x3;\n\ttypedef mat<3, 4, f32, mediump>\t\tmediump_f32mat3x4;\n\ttypedef mat<4, 2, f32, mediump>\t\tmediump_f32mat4x2;\n\ttypedef mat<4, 3, f32, mediump>\t\tmediump_f32mat4x3;\n\ttypedef mat<4, 4, f32, mediump>\t\tmediump_f32mat4x4;\n\n\ttypedef mat<2, 2, f32, highp>\t\thighp_f32mat2x2;\n\ttypedef mat<2, 3, f32, highp>\t\thighp_f32mat2x3;\n\ttypedef mat<2, 4, f32, highp>\t\thighp_f32mat2x4;\n\ttypedef mat<3, 2, f32, highp>\t\thighp_f32mat3x2;\n\ttypedef mat<3, 3, f32, highp>\t\thighp_f32mat3x3;\n\ttypedef mat<3, 4, f32, highp>\t\thighp_f32mat3x4;\n\ttypedef mat<4, 2, f32, highp>\t\thighp_f32mat4x2;\n\ttypedef mat<4, 3, f32, highp>\t\thighp_f32mat4x3;\n\ttypedef mat<4, 4, f32, highp>\t\thighp_f32mat4x4;\n\n\ttypedef mat<2, 2, f32, defaultp>\tf32mat2x2;\n\ttypedef mat<2, 3, f32, defaultp>\tf32mat2x3;\n\ttypedef mat<2, 4, f32, defaultp>\tf32mat2x4;\n\ttypedef mat<3, 2, f32, defaultp>\tf32mat3x2;\n\ttypedef mat<3, 3, f32, defaultp>\tf32mat3x3;\n\ttypedef mat<3, 4, f32, defaultp>\tf32mat3x4;\n\ttypedef mat<4, 2, f32, defaultp>\tf32mat4x2;\n\ttypedef mat<4, 3, f32, defaultp>\tf32mat4x3;\n\ttypedef mat<4, 4, f32, defaultp>\tf32mat4x4;\n\n\ttypedef mat<2, 2, double, lowp>\t\tlowp_dmat2x2;\n\ttypedef mat<2, 3, double, lowp>\t\tlowp_dmat2x3;\n\ttypedef mat<2, 4, double, lowp>\t\tlowp_dmat2x4;\n\ttypedef mat<3, 2, double, lowp>\t\tlowp_dmat3x2;\n\ttypedef mat<3, 3, double, lowp>\t\tlowp_dmat3x3;\n\ttypedef mat<3, 4, double, lowp>\t\tlowp_dmat3x4;\n\ttypedef mat<4, 2, double, lowp>\t\tlowp_dmat4x2;\n\ttypedef mat<4, 3, double, lowp>\t\tlowp_dmat4x3;\n\ttypedef mat<4, 4, double, lowp>\t\tlowp_dmat4x4;\n\n\ttypedef mat<2, 2, double, mediump>\tmediump_dmat2x2;\n\ttypedef mat<2, 3, double, mediump>\tmediump_dmat2x3;\n\ttypedef mat<2, 4, double, mediump>\tmediump_dmat2x4;\n\ttypedef mat<3, 2, double, mediump>\tmediump_dmat3x2;\n\ttypedef mat<3, 3, double, mediump>\tmediump_dmat3x3;\n\ttypedef mat<3, 4, double, mediump>\tmediump_dmat3x4;\n\ttypedef mat<4, 2, double, mediump>\tmediump_dmat4x2;\n\ttypedef mat<4, 3, double, mediump>\tmediump_dmat4x3;\n\ttypedef mat<4, 4, double, mediump>\tmediump_dmat4x4;\n\n\ttypedef mat<2, 2, double, highp>\thighp_dmat2x2;\n\ttypedef mat<2, 3, double, highp>\thighp_dmat2x3;\n\ttypedef mat<2, 4, double, highp>\thighp_dmat2x4;\n\ttypedef mat<3, 2, double, highp>\thighp_dmat3x2;\n\ttypedef mat<3, 3, double, highp>\thighp_dmat3x3;\n\ttypedef mat<3, 4, double, highp>\thighp_dmat3x4;\n\ttypedef mat<4, 2, double, highp>\thighp_dmat4x2;\n\ttypedef mat<4, 3, double, highp>\thighp_dmat4x3;\n\ttypedef mat<4, 4, double, highp>\thighp_dmat4x4;\n\n\ttypedef mat<2, 2, double, defaultp>\tdmat2x2;\n\ttypedef mat<2, 3, double, defaultp>\tdmat2x3;\n\ttypedef mat<2, 4, double, defaultp>\tdmat2x4;\n\ttypedef mat<3, 2, double, defaultp>\tdmat3x2;\n\ttypedef mat<3, 3, double, defaultp>\tdmat3x3;\n\ttypedef mat<3, 4, double, defaultp>\tdmat3x4;\n\ttypedef mat<4, 2, double, defaultp>\tdmat4x2;\n\ttypedef mat<4, 3, double, defaultp>\tdmat4x3;\n\ttypedef mat<4, 4, double, defaultp>\tdmat4x4;\n\n\ttypedef mat<2, 2, f64, lowp>\t\tlowp_f64mat2x2;\n\ttypedef mat<2, 3, f64, lowp>\t\tlowp_f64mat2x3;\n\ttypedef mat<2, 4, f64, lowp>\t\tlowp_f64mat2x4;\n\ttypedef mat<3, 2, f64, lowp>\t\tlowp_f64mat3x2;\n\ttypedef mat<3, 3, f64, lowp>\t\tlowp_f64mat3x3;\n\ttypedef mat<3, 4, f64, lowp>\t\tlowp_f64mat3x4;\n\ttypedef mat<4, 2, f64, lowp>\t\tlowp_f64mat4x2;\n\ttypedef mat<4, 3, f64, lowp>\t\tlowp_f64mat4x3;\n\ttypedef mat<4, 4, f64, lowp>\t\tlowp_f64mat4x4;\n\n\ttypedef mat<2, 2, f64, mediump>\t\tmediump_f64mat2x2;\n\ttypedef mat<2, 3, f64, mediump>\t\tmediump_f64mat2x3;\n\ttypedef mat<2, 4, f64, mediump>\t\tmediump_f64mat2x4;\n\ttypedef mat<3, 2, f64, mediump>\t\tmediump_f64mat3x2;\n\ttypedef mat<3, 3, f64, mediump>\t\tmediump_f64mat3x3;\n\ttypedef mat<3, 4, f64, mediump>\t\tmediump_f64mat3x4;\n\ttypedef mat<4, 2, f64, mediump>\t\tmediump_f64mat4x2;\n\ttypedef mat<4, 3, f64, mediump>\t\tmediump_f64mat4x3;\n\ttypedef mat<4, 4, f64, mediump>\t\tmediump_f64mat4x4;\n\n\ttypedef mat<2, 2, f64, highp>\t\thighp_f64mat2x2;\n\ttypedef mat<2, 3, f64, highp>\t\thighp_f64mat2x3;\n\ttypedef mat<2, 4, f64, highp>\t\thighp_f64mat2x4;\n\ttypedef mat<3, 2, f64, highp>\t\thighp_f64mat3x2;\n\ttypedef mat<3, 3, f64, highp>\t\thighp_f64mat3x3;\n\ttypedef mat<3, 4, f64, highp>\t\thighp_f64mat3x4;\n\ttypedef mat<4, 2, f64, highp>\t\thighp_f64mat4x2;\n\ttypedef mat<4, 3, f64, highp>\t\thighp_f64mat4x3;\n\ttypedef mat<4, 4, f64, highp>\t\thighp_f64mat4x4;\n\n\ttypedef mat<2, 2, f64, defaultp>\tf64mat2x2;\n\ttypedef mat<2, 3, f64, defaultp>\tf64mat2x3;\n\ttypedef mat<2, 4, f64, defaultp>\tf64mat2x4;\n\ttypedef mat<3, 2, f64, defaultp>\tf64mat3x2;\n\ttypedef mat<3, 3, f64, defaultp>\tf64mat3x3;\n\ttypedef mat<3, 4, f64, defaultp>\tf64mat3x4;\n\ttypedef mat<4, 2, f64, defaultp>\tf64mat4x2;\n\ttypedef mat<4, 3, f64, defaultp>\tf64mat4x3;\n\ttypedef mat<4, 4, f64, defaultp>\tf64mat4x4;\n\n\t// Signed integer matrix MxN\n\n\ttypedef mat<2, 2, int, lowp>\t\tlowp_imat2x2;\n\ttypedef mat<2, 3, int, lowp>\t\tlowp_imat2x3;\n\ttypedef mat<2, 4, int, lowp>\t\tlowp_imat2x4;\n\ttypedef mat<3, 2, int, lowp>\t\tlowp_imat3x2;\n\ttypedef mat<3, 3, int, lowp>\t\tlowp_imat3x3;\n\ttypedef mat<3, 4, int, lowp>\t\tlowp_imat3x4;\n\ttypedef mat<4, 2, int, lowp>\t\tlowp_imat4x2;\n\ttypedef mat<4, 3, int, lowp>\t\tlowp_imat4x3;\n\ttypedef mat<4, 4, int, lowp>\t\tlowp_imat4x4;\n\n\ttypedef mat<2, 2, int, mediump>\t\tmediump_imat2x2;\n\ttypedef mat<2, 3, int, mediump>\t\tmediump_imat2x3;\n\ttypedef mat<2, 4, int, mediump>\t\tmediump_imat2x4;\n\ttypedef mat<3, 2, int, mediump>\t\tmediump_imat3x2;\n\ttypedef mat<3, 3, int, mediump>\t\tmediump_imat3x3;\n\ttypedef mat<3, 4, int, mediump>\t\tmediump_imat3x4;\n\ttypedef mat<4, 2, int, mediump>\t\tmediump_imat4x2;\n\ttypedef mat<4, 3, int, mediump>\t\tmediump_imat4x3;\n\ttypedef mat<4, 4, int, mediump>\t\tmediump_imat4x4;\n\n\ttypedef mat<2, 2, int, highp>\t\thighp_imat2x2;\n\ttypedef mat<2, 3, int, highp>\t\thighp_imat2x3;\n\ttypedef mat<2, 4, int, highp>\t\thighp_imat2x4;\n\ttypedef mat<3, 2, int, highp>\t\thighp_imat3x2;\n\ttypedef mat<3, 3, int, highp>\t\thighp_imat3x3;\n\ttypedef mat<3, 4, int, highp>\t\thighp_imat3x4;\n\ttypedef mat<4, 2, int, highp>\t\thighp_imat4x2;\n\ttypedef mat<4, 3, int, highp>\t\thighp_imat4x3;\n\ttypedef mat<4, 4, int, highp>\t\thighp_imat4x4;\n\n\ttypedef mat<2, 2, int, defaultp>\timat2x2;\n\ttypedef mat<2, 3, int, defaultp>\timat2x3;\n\ttypedef mat<2, 4, int, defaultp>\timat2x4;\n\ttypedef mat<3, 2, int, defaultp>\timat3x2;\n\ttypedef mat<3, 3, int, defaultp>\timat3x3;\n\ttypedef mat<3, 4, int, defaultp>\timat3x4;\n\ttypedef mat<4, 2, int, defaultp>\timat4x2;\n\ttypedef mat<4, 3, int, defaultp>\timat4x3;\n\ttypedef mat<4, 4, int, defaultp>\timat4x4;\n\n\n\ttypedef mat<2, 2, int8, lowp>\t\tlowp_i8mat2x2;\n\ttypedef mat<2, 3, int8, lowp>\t\tlowp_i8mat2x3;\n\ttypedef mat<2, 4, int8, lowp>\t\tlowp_i8mat2x4;\n\ttypedef mat<3, 2, int8, lowp>\t\tlowp_i8mat3x2;\n\ttypedef mat<3, 3, int8, lowp>\t\tlowp_i8mat3x3;\n\ttypedef mat<3, 4, int8, lowp>\t\tlowp_i8mat3x4;\n\ttypedef mat<4, 2, int8, lowp>\t\tlowp_i8mat4x2;\n\ttypedef mat<4, 3, int8, lowp>\t\tlowp_i8mat4x3;\n\ttypedef mat<4, 4, int8, lowp>\t\tlowp_i8mat4x4;\n\n\ttypedef mat<2, 2, int8, mediump>\tmediump_i8mat2x2;\n\ttypedef mat<2, 3, int8, mediump>\tmediump_i8mat2x3;\n\ttypedef mat<2, 4, int8, mediump>\tmediump_i8mat2x4;\n\ttypedef mat<3, 2, int8, mediump>\tmediump_i8mat3x2;\n\ttypedef mat<3, 3, int8, mediump>\tmediump_i8mat3x3;\n\ttypedef mat<3, 4, int8, mediump>\tmediump_i8mat3x4;\n\ttypedef mat<4, 2, int8, mediump>\tmediump_i8mat4x2;\n\ttypedef mat<4, 3, int8, mediump>\tmediump_i8mat4x3;\n\ttypedef mat<4, 4, int8, mediump>\tmediump_i8mat4x4;\n\n\ttypedef mat<2, 2, int8, highp>\t\thighp_i8mat2x2;\n\ttypedef mat<2, 3, int8, highp>\t\thighp_i8mat2x3;\n\ttypedef mat<2, 4, int8, highp>\t\thighp_i8mat2x4;\n\ttypedef mat<3, 2, int8, highp>\t\thighp_i8mat3x2;\n\ttypedef mat<3, 3, int8, highp>\t\thighp_i8mat3x3;\n\ttypedef mat<3, 4, int8, highp>\t\thighp_i8mat3x4;\n\ttypedef mat<4, 2, int8, highp>\t\thighp_i8mat4x2;\n\ttypedef mat<4, 3, int8, highp>\t\thighp_i8mat4x3;\n\ttypedef mat<4, 4, int8, highp>\t\thighp_i8mat4x4;\n\n\ttypedef mat<2, 2, int8, defaultp>\ti8mat2x2;\n\ttypedef mat<2, 3, int8, defaultp>\ti8mat2x3;\n\ttypedef mat<2, 4, int8, defaultp>\ti8mat2x4;\n\ttypedef mat<3, 2, int8, defaultp>\ti8mat3x2;\n\ttypedef mat<3, 3, int8, defaultp>\ti8mat3x3;\n\ttypedef mat<3, 4, int8, defaultp>\ti8mat3x4;\n\ttypedef mat<4, 2, int8, defaultp>\ti8mat4x2;\n\ttypedef mat<4, 3, int8, defaultp>\ti8mat4x3;\n\ttypedef mat<4, 4, int8, defaultp>\ti8mat4x4;\n\n\n\ttypedef mat<2, 2, int16, lowp>\t\tlowp_i16mat2x2;\n\ttypedef mat<2, 3, int16, lowp>\t\tlowp_i16mat2x3;\n\ttypedef mat<2, 4, int16, lowp>\t\tlowp_i16mat2x4;\n\ttypedef mat<3, 2, int16, lowp>\t\tlowp_i16mat3x2;\n\ttypedef mat<3, 3, int16, lowp>\t\tlowp_i16mat3x3;\n\ttypedef mat<3, 4, int16, lowp>\t\tlowp_i16mat3x4;\n\ttypedef mat<4, 2, int16, lowp>\t\tlowp_i16mat4x2;\n\ttypedef mat<4, 3, int16, lowp>\t\tlowp_i16mat4x3;\n\ttypedef mat<4, 4, int16, lowp>\t\tlowp_i16mat4x4;\n\n\ttypedef mat<2, 2, int16, mediump>\tmediump_i16mat2x2;\n\ttypedef mat<2, 3, int16, mediump>\tmediump_i16mat2x3;\n\ttypedef mat<2, 4, int16, mediump>\tmediump_i16mat2x4;\n\ttypedef mat<3, 2, int16, mediump>\tmediump_i16mat3x2;\n\ttypedef mat<3, 3, int16, mediump>\tmediump_i16mat3x3;\n\ttypedef mat<3, 4, int16, mediump>\tmediump_i16mat3x4;\n\ttypedef mat<4, 2, int16, mediump>\tmediump_i16mat4x2;\n\ttypedef mat<4, 3, int16, mediump>\tmediump_i16mat4x3;\n\ttypedef mat<4, 4, int16, mediump>\tmediump_i16mat4x4;\n\n\ttypedef mat<2, 2, int16, highp>\t\thighp_i16mat2x2;\n\ttypedef mat<2, 3, int16, highp>\t\thighp_i16mat2x3;\n\ttypedef mat<2, 4, int16, highp>\t\thighp_i16mat2x4;\n\ttypedef mat<3, 2, int16, highp>\t\thighp_i16mat3x2;\n\ttypedef mat<3, 3, int16, highp>\t\thighp_i16mat3x3;\n\ttypedef mat<3, 4, int16, highp>\t\thighp_i16mat3x4;\n\ttypedef mat<4, 2, int16, highp>\t\thighp_i16mat4x2;\n\ttypedef mat<4, 3, int16, highp>\t\thighp_i16mat4x3;\n\ttypedef mat<4, 4, int16, highp>\t\thighp_i16mat4x4;\n\n\ttypedef mat<2, 2, int16, defaultp>\ti16mat2x2;\n\ttypedef mat<2, 3, int16, defaultp>\ti16mat2x3;\n\ttypedef mat<2, 4, int16, defaultp>\ti16mat2x4;\n\ttypedef mat<3, 2, int16, defaultp>\ti16mat3x2;\n\ttypedef mat<3, 3, int16, defaultp>\ti16mat3x3;\n\ttypedef mat<3, 4, int16, defaultp>\ti16mat3x4;\n\ttypedef mat<4, 2, int16, defaultp>\ti16mat4x2;\n\ttypedef mat<4, 3, int16, defaultp>\ti16mat4x3;\n\ttypedef mat<4, 4, int16, defaultp>\ti16mat4x4;\n\n\n\ttypedef mat<2, 2, int32, lowp>\t\tlowp_i32mat2x2;\n\ttypedef mat<2, 3, int32, lowp>\t\tlowp_i32mat2x3;\n\ttypedef mat<2, 4, int32, lowp>\t\tlowp_i32mat2x4;\n\ttypedef mat<3, 2, int32, lowp>\t\tlowp_i32mat3x2;\n\ttypedef mat<3, 3, int32, lowp>\t\tlowp_i32mat3x3;\n\ttypedef mat<3, 4, int32, lowp>\t\tlowp_i32mat3x4;\n\ttypedef mat<4, 2, int32, lowp>\t\tlowp_i32mat4x2;\n\ttypedef mat<4, 3, int32, lowp>\t\tlowp_i32mat4x3;\n\ttypedef mat<4, 4, int32, lowp>\t\tlowp_i32mat4x4;\n\n\ttypedef mat<2, 2, int32, mediump>\tmediump_i32mat2x2;\n\ttypedef mat<2, 3, int32, mediump>\tmediump_i32mat2x3;\n\ttypedef mat<2, 4, int32, mediump>\tmediump_i32mat2x4;\n\ttypedef mat<3, 2, int32, mediump>\tmediump_i32mat3x2;\n\ttypedef mat<3, 3, int32, mediump>\tmediump_i32mat3x3;\n\ttypedef mat<3, 4, int32, mediump>\tmediump_i32mat3x4;\n\ttypedef mat<4, 2, int32, mediump>\tmediump_i32mat4x2;\n\ttypedef mat<4, 3, int32, mediump>\tmediump_i32mat4x3;\n\ttypedef mat<4, 4, int32, mediump>\tmediump_i32mat4x4;\n\n\ttypedef mat<2, 2, int32, highp>\t\thighp_i32mat2x2;\n\ttypedef mat<2, 3, int32, highp>\t\thighp_i32mat2x3;\n\ttypedef mat<2, 4, int32, highp>\t\thighp_i32mat2x4;\n\ttypedef mat<3, 2, int32, highp>\t\thighp_i32mat3x2;\n\ttypedef mat<3, 3, int32, highp>\t\thighp_i32mat3x3;\n\ttypedef mat<3, 4, int32, highp>\t\thighp_i32mat3x4;\n\ttypedef mat<4, 2, int32, highp>\t\thighp_i32mat4x2;\n\ttypedef mat<4, 3, int32, highp>\t\thighp_i32mat4x3;\n\ttypedef mat<4, 4, int32, highp>\t\thighp_i32mat4x4;\n\n\ttypedef mat<2, 2, int32, defaultp>\ti32mat2x2;\n\ttypedef mat<2, 3, int32, defaultp>\ti32mat2x3;\n\ttypedef mat<2, 4, int32, defaultp>\ti32mat2x4;\n\ttypedef mat<3, 2, int32, defaultp>\ti32mat3x2;\n\ttypedef mat<3, 3, int32, defaultp>\ti32mat3x3;\n\ttypedef mat<3, 4, int32, defaultp>\ti32mat3x4;\n\ttypedef mat<4, 2, int32, defaultp>\ti32mat4x2;\n\ttypedef mat<4, 3, int32, defaultp>\ti32mat4x3;\n\ttypedef mat<4, 4, int32, defaultp>\ti32mat4x4;\n\n\n\ttypedef mat<2, 2, int64, lowp>\t\tlowp_i64mat2x2;\n\ttypedef mat<2, 3, int64, lowp>\t\tlowp_i64mat2x3;\n\ttypedef mat<2, 4, int64, lowp>\t\tlowp_i64mat2x4;\n\ttypedef mat<3, 2, int64, lowp>\t\tlowp_i64mat3x2;\n\ttypedef mat<3, 3, int64, lowp>\t\tlowp_i64mat3x3;\n\ttypedef mat<3, 4, int64, lowp>\t\tlowp_i64mat3x4;\n\ttypedef mat<4, 2, int64, lowp>\t\tlowp_i64mat4x2;\n\ttypedef mat<4, 3, int64, lowp>\t\tlowp_i64mat4x3;\n\ttypedef mat<4, 4, int64, lowp>\t\tlowp_i64mat4x4;\n\n\ttypedef mat<2, 2, int64, mediump>\tmediump_i64mat2x2;\n\ttypedef mat<2, 3, int64, mediump>\tmediump_i64mat2x3;\n\ttypedef mat<2, 4, int64, mediump>\tmediump_i64mat2x4;\n\ttypedef mat<3, 2, int64, mediump>\tmediump_i64mat3x2;\n\ttypedef mat<3, 3, int64, mediump>\tmediump_i64mat3x3;\n\ttypedef mat<3, 4, int64, mediump>\tmediump_i64mat3x4;\n\ttypedef mat<4, 2, int64, mediump>\tmediump_i64mat4x2;\n\ttypedef mat<4, 3, int64, mediump>\tmediump_i64mat4x3;\n\ttypedef mat<4, 4, int64, mediump>\tmediump_i64mat4x4;\n\n\ttypedef mat<2, 2, int64, highp>\t\thighp_i64mat2x2;\n\ttypedef mat<2, 3, int64, highp>\t\thighp_i64mat2x3;\n\ttypedef mat<2, 4, int64, highp>\t\thighp_i64mat2x4;\n\ttypedef mat<3, 2, int64, highp>\t\thighp_i64mat3x2;\n\ttypedef mat<3, 3, int64, highp>\t\thighp_i64mat3x3;\n\ttypedef mat<3, 4, int64, highp>\t\thighp_i64mat3x4;\n\ttypedef mat<4, 2, int64, highp>\t\thighp_i64mat4x2;\n\ttypedef mat<4, 3, int64, highp>\t\thighp_i64mat4x3;\n\ttypedef mat<4, 4, int64, highp>\t\thighp_i64mat4x4;\n\n\ttypedef mat<2, 2, int64, defaultp>\ti64mat2x2;\n\ttypedef mat<2, 3, int64, defaultp>\ti64mat2x3;\n\ttypedef mat<2, 4, int64, defaultp>\ti64mat2x4;\n\ttypedef mat<3, 2, int64, defaultp>\ti64mat3x2;\n\ttypedef mat<3, 3, int64, defaultp>\ti64mat3x3;\n\ttypedef mat<3, 4, int64, defaultp>\ti64mat3x4;\n\ttypedef mat<4, 2, int64, defaultp>\ti64mat4x2;\n\ttypedef mat<4, 3, int64, defaultp>\ti64mat4x3;\n\ttypedef mat<4, 4, int64, defaultp>\ti64mat4x4;\n\n\n\t// Unsigned integer matrix MxN\n\n\ttypedef mat<2, 2, uint, lowp>\t\tlowp_umat2x2;\n\ttypedef mat<2, 3, uint, lowp>\t\tlowp_umat2x3;\n\ttypedef mat<2, 4, uint, lowp>\t\tlowp_umat2x4;\n\ttypedef mat<3, 2, uint, lowp>\t\tlowp_umat3x2;\n\ttypedef mat<3, 3, uint, lowp>\t\tlowp_umat3x3;\n\ttypedef mat<3, 4, uint, lowp>\t\tlowp_umat3x4;\n\ttypedef mat<4, 2, uint, lowp>\t\tlowp_umat4x2;\n\ttypedef mat<4, 3, uint, lowp>\t\tlowp_umat4x3;\n\ttypedef mat<4, 4, uint, lowp>\t\tlowp_umat4x4;\n\n\ttypedef mat<2, 2, uint, mediump>\tmediump_umat2x2;\n\ttypedef mat<2, 3, uint, mediump>\tmediump_umat2x3;\n\ttypedef mat<2, 4, uint, mediump>\tmediump_umat2x4;\n\ttypedef mat<3, 2, uint, mediump>\tmediump_umat3x2;\n\ttypedef mat<3, 3, uint, mediump>\tmediump_umat3x3;\n\ttypedef mat<3, 4, uint, mediump>\tmediump_umat3x4;\n\ttypedef mat<4, 2, uint, mediump>\tmediump_umat4x2;\n\ttypedef mat<4, 3, uint, mediump>\tmediump_umat4x3;\n\ttypedef mat<4, 4, uint, mediump>\tmediump_umat4x4;\n\n\ttypedef mat<2, 2, uint, highp>\t\thighp_umat2x2;\n\ttypedef mat<2, 3, uint, highp>\t\thighp_umat2x3;\n\ttypedef mat<2, 4, uint, highp>\t\thighp_umat2x4;\n\ttypedef mat<3, 2, uint, highp>\t\thighp_umat3x2;\n\ttypedef mat<3, 3, uint, highp>\t\thighp_umat3x3;\n\ttypedef mat<3, 4, uint, highp>\t\thighp_umat3x4;\n\ttypedef mat<4, 2, uint, highp>\t\thighp_umat4x2;\n\ttypedef mat<4, 3, uint, highp>\t\thighp_umat4x3;\n\ttypedef mat<4, 4, uint, highp>\t\thighp_umat4x4;\n\n\ttypedef mat<2, 2, uint, defaultp>\tumat2x2;\n\ttypedef mat<2, 3, uint, defaultp>\tumat2x3;\n\ttypedef mat<2, 4, uint, defaultp>\tumat2x4;\n\ttypedef mat<3, 2, uint, defaultp>\tumat3x2;\n\ttypedef mat<3, 3, uint, defaultp>\tumat3x3;\n\ttypedef mat<3, 4, uint, defaultp>\tumat3x4;\n\ttypedef mat<4, 2, uint, defaultp>\tumat4x2;\n\ttypedef mat<4, 3, uint, defaultp>\tumat4x3;\n\ttypedef mat<4, 4, uint, defaultp>\tumat4x4;\n\n\n\ttypedef mat<2, 2, uint8, lowp>\t\tlowp_u8mat2x2;\n\ttypedef mat<2, 3, uint8, lowp>\t\tlowp_u8mat2x3;\n\ttypedef mat<2, 4, uint8, lowp>\t\tlowp_u8mat2x4;\n\ttypedef mat<3, 2, uint8, lowp>\t\tlowp_u8mat3x2;\n\ttypedef mat<3, 3, uint8, lowp>\t\tlowp_u8mat3x3;\n\ttypedef mat<3, 4, uint8, lowp>\t\tlowp_u8mat3x4;\n\ttypedef mat<4, 2, uint8, lowp>\t\tlowp_u8mat4x2;\n\ttypedef mat<4, 3, uint8, lowp>\t\tlowp_u8mat4x3;\n\ttypedef mat<4, 4, uint8, lowp>\t\tlowp_u8mat4x4;\n\n\ttypedef mat<2, 2, uint8, mediump>\tmediump_u8mat2x2;\n\ttypedef mat<2, 3, uint8, mediump>\tmediump_u8mat2x3;\n\ttypedef mat<2, 4, uint8, mediump>\tmediump_u8mat2x4;\n\ttypedef mat<3, 2, uint8, mediump>\tmediump_u8mat3x2;\n\ttypedef mat<3, 3, uint8, mediump>\tmediump_u8mat3x3;\n\ttypedef mat<3, 4, uint8, mediump>\tmediump_u8mat3x4;\n\ttypedef mat<4, 2, uint8, mediump>\tmediump_u8mat4x2;\n\ttypedef mat<4, 3, uint8, mediump>\tmediump_u8mat4x3;\n\ttypedef mat<4, 4, uint8, mediump>\tmediump_u8mat4x4;\n\n\ttypedef mat<2, 2, uint8, highp>\t\thighp_u8mat2x2;\n\ttypedef mat<2, 3, uint8, highp>\t\thighp_u8mat2x3;\n\ttypedef mat<2, 4, uint8, highp>\t\thighp_u8mat2x4;\n\ttypedef mat<3, 2, uint8, highp>\t\thighp_u8mat3x2;\n\ttypedef mat<3, 3, uint8, highp>\t\thighp_u8mat3x3;\n\ttypedef mat<3, 4, uint8, highp>\t\thighp_u8mat3x4;\n\ttypedef mat<4, 2, uint8, highp>\t\thighp_u8mat4x2;\n\ttypedef mat<4, 3, uint8, highp>\t\thighp_u8mat4x3;\n\ttypedef mat<4, 4, uint8, highp>\t\thighp_u8mat4x4;\n\n\ttypedef mat<2, 2, uint8, defaultp>\tu8mat2x2;\n\ttypedef mat<2, 3, uint8, defaultp>\tu8mat2x3;\n\ttypedef mat<2, 4, uint8, defaultp>\tu8mat2x4;\n\ttypedef mat<3, 2, uint8, defaultp>\tu8mat3x2;\n\ttypedef mat<3, 3, uint8, defaultp>\tu8mat3x3;\n\ttypedef mat<3, 4, uint8, defaultp>\tu8mat3x4;\n\ttypedef mat<4, 2, uint8, defaultp>\tu8mat4x2;\n\ttypedef mat<4, 3, uint8, defaultp>\tu8mat4x3;\n\ttypedef mat<4, 4, uint8, defaultp>\tu8mat4x4;\n\n\n\ttypedef mat<2, 2, uint16, lowp>\t\tlowp_u16mat2x2;\n\ttypedef mat<2, 3, uint16, lowp>\t\tlowp_u16mat2x3;\n\ttypedef mat<2, 4, uint16, lowp>\t\tlowp_u16mat2x4;\n\ttypedef mat<3, 2, uint16, lowp>\t\tlowp_u16mat3x2;\n\ttypedef mat<3, 3, uint16, lowp>\t\tlowp_u16mat3x3;\n\ttypedef mat<3, 4, uint16, lowp>\t\tlowp_u16mat3x4;\n\ttypedef mat<4, 2, uint16, lowp>\t\tlowp_u16mat4x2;\n\ttypedef mat<4, 3, uint16, lowp>\t\tlowp_u16mat4x3;\n\ttypedef mat<4, 4, uint16, lowp>\t\tlowp_u16mat4x4;\n\n\ttypedef mat<2, 2, uint16, mediump>\tmediump_u16mat2x2;\n\ttypedef mat<2, 3, uint16, mediump>\tmediump_u16mat2x3;\n\ttypedef mat<2, 4, uint16, mediump>\tmediump_u16mat2x4;\n\ttypedef mat<3, 2, uint16, mediump>\tmediump_u16mat3x2;\n\ttypedef mat<3, 3, uint16, mediump>\tmediump_u16mat3x3;\n\ttypedef mat<3, 4, uint16, mediump>\tmediump_u16mat3x4;\n\ttypedef mat<4, 2, uint16, mediump>\tmediump_u16mat4x2;\n\ttypedef mat<4, 3, uint16, mediump>\tmediump_u16mat4x3;\n\ttypedef mat<4, 4, uint16, mediump>\tmediump_u16mat4x4;\n\n\ttypedef mat<2, 2, uint16, highp>\thighp_u16mat2x2;\n\ttypedef mat<2, 3, uint16, highp>\thighp_u16mat2x3;\n\ttypedef mat<2, 4, uint16, highp>\thighp_u16mat2x4;\n\ttypedef mat<3, 2, uint16, highp>\thighp_u16mat3x2;\n\ttypedef mat<3, 3, uint16, highp>\thighp_u16mat3x3;\n\ttypedef mat<3, 4, uint16, highp>\thighp_u16mat3x4;\n\ttypedef mat<4, 2, uint16, highp>\thighp_u16mat4x2;\n\ttypedef mat<4, 3, uint16, highp>\thighp_u16mat4x3;\n\ttypedef mat<4, 4, uint16, highp>\thighp_u16mat4x4;\n\n\ttypedef mat<2, 2, uint16, defaultp>\tu16mat2x2;\n\ttypedef mat<2, 3, uint16, defaultp>\tu16mat2x3;\n\ttypedef mat<2, 4, uint16, defaultp>\tu16mat2x4;\n\ttypedef mat<3, 2, uint16, defaultp>\tu16mat3x2;\n\ttypedef mat<3, 3, uint16, defaultp>\tu16mat3x3;\n\ttypedef mat<3, 4, uint16, defaultp>\tu16mat3x4;\n\ttypedef mat<4, 2, uint16, defaultp>\tu16mat4x2;\n\ttypedef mat<4, 3, uint16, defaultp>\tu16mat4x3;\n\ttypedef mat<4, 4, uint16, defaultp>\tu16mat4x4;\n\n\n\ttypedef mat<2, 2, uint32, lowp>\t\tlowp_u32mat2x2;\n\ttypedef mat<2, 3, uint32, lowp>\t\tlowp_u32mat2x3;\n\ttypedef mat<2, 4, uint32, lowp>\t\tlowp_u32mat2x4;\n\ttypedef mat<3, 2, uint32, lowp>\t\tlowp_u32mat3x2;\n\ttypedef mat<3, 3, uint32, lowp>\t\tlowp_u32mat3x3;\n\ttypedef mat<3, 4, uint32, lowp>\t\tlowp_u32mat3x4;\n\ttypedef mat<4, 2, uint32, lowp>\t\tlowp_u32mat4x2;\n\ttypedef mat<4, 3, uint32, lowp>\t\tlowp_u32mat4x3;\n\ttypedef mat<4, 4, uint32, lowp>\t\tlowp_u32mat4x4;\n\n\ttypedef mat<2, 2, uint32, mediump>\tmediump_u32mat2x2;\n\ttypedef mat<2, 3, uint32, mediump>\tmediump_u32mat2x3;\n\ttypedef mat<2, 4, uint32, mediump>\tmediump_u32mat2x4;\n\ttypedef mat<3, 2, uint32, mediump>\tmediump_u32mat3x2;\n\ttypedef mat<3, 3, uint32, mediump>\tmediump_u32mat3x3;\n\ttypedef mat<3, 4, uint32, mediump>\tmediump_u32mat3x4;\n\ttypedef mat<4, 2, uint32, mediump>\tmediump_u32mat4x2;\n\ttypedef mat<4, 3, uint32, mediump>\tmediump_u32mat4x3;\n\ttypedef mat<4, 4, uint32, mediump>\tmediump_u32mat4x4;\n\n\ttypedef mat<2, 2, uint32, highp>\thighp_u32mat2x2;\n\ttypedef mat<2, 3, uint32, highp>\thighp_u32mat2x3;\n\ttypedef mat<2, 4, uint32, highp>\thighp_u32mat2x4;\n\ttypedef mat<3, 2, uint32, highp>\thighp_u32mat3x2;\n\ttypedef mat<3, 3, uint32, highp>\thighp_u32mat3x3;\n\ttypedef mat<3, 4, uint32, highp>\thighp_u32mat3x4;\n\ttypedef mat<4, 2, uint32, highp>\thighp_u32mat4x2;\n\ttypedef mat<4, 3, uint32, highp>\thighp_u32mat4x3;\n\ttypedef mat<4, 4, uint32, highp>\thighp_u32mat4x4;\n\n\ttypedef mat<2, 2, uint32, defaultp>\tu32mat2x2;\n\ttypedef mat<2, 3, uint32, defaultp>\tu32mat2x3;\n\ttypedef mat<2, 4, uint32, defaultp>\tu32mat2x4;\n\ttypedef mat<3, 2, uint32, defaultp>\tu32mat3x2;\n\ttypedef mat<3, 3, uint32, defaultp>\tu32mat3x3;\n\ttypedef mat<3, 4, uint32, defaultp>\tu32mat3x4;\n\ttypedef mat<4, 2, uint32, defaultp>\tu32mat4x2;\n\ttypedef mat<4, 3, uint32, defaultp>\tu32mat4x3;\n\ttypedef mat<4, 4, uint32, defaultp>\tu32mat4x4;\n\n\n\ttypedef mat<2, 2, uint64, lowp>\t\tlowp_u64mat2x2;\n\ttypedef mat<2, 3, uint64, lowp>\t\tlowp_u64mat2x3;\n\ttypedef mat<2, 4, uint64, lowp>\t\tlowp_u64mat2x4;\n\ttypedef mat<3, 2, uint64, lowp>\t\tlowp_u64mat3x2;\n\ttypedef mat<3, 3, uint64, lowp>\t\tlowp_u64mat3x3;\n\ttypedef mat<3, 4, uint64, lowp>\t\tlowp_u64mat3x4;\n\ttypedef mat<4, 2, uint64, lowp>\t\tlowp_u64mat4x2;\n\ttypedef mat<4, 3, uint64, lowp>\t\tlowp_u64mat4x3;\n\ttypedef mat<4, 4, uint64, lowp>\t\tlowp_u64mat4x4;\n\n\ttypedef mat<2, 2, uint64, mediump>\tmediump_u64mat2x2;\n\ttypedef mat<2, 3, uint64, mediump>\tmediump_u64mat2x3;\n\ttypedef mat<2, 4, uint64, mediump>\tmediump_u64mat2x4;\n\ttypedef mat<3, 2, uint64, mediump>\tmediump_u64mat3x2;\n\ttypedef mat<3, 3, uint64, mediump>\tmediump_u64mat3x3;\n\ttypedef mat<3, 4, uint64, mediump>\tmediump_u64mat3x4;\n\ttypedef mat<4, 2, uint64, mediump>\tmediump_u64mat4x2;\n\ttypedef mat<4, 3, uint64, mediump>\tmediump_u64mat4x3;\n\ttypedef mat<4, 4, uint64, mediump>\tmediump_u64mat4x4;\n\n\ttypedef mat<2, 2, uint64, highp>\thighp_u64mat2x2;\n\ttypedef mat<2, 3, uint64, highp>\thighp_u64mat2x3;\n\ttypedef mat<2, 4, uint64, highp>\thighp_u64mat2x4;\n\ttypedef mat<3, 2, uint64, highp>\thighp_u64mat3x2;\n\ttypedef mat<3, 3, uint64, highp>\thighp_u64mat3x3;\n\ttypedef mat<3, 4, uint64, highp>\thighp_u64mat3x4;\n\ttypedef mat<4, 2, uint64, highp>\thighp_u64mat4x2;\n\ttypedef mat<4, 3, uint64, highp>\thighp_u64mat4x3;\n\ttypedef mat<4, 4, uint64, highp>\thighp_u64mat4x4;\n\n\ttypedef mat<2, 2, uint64, defaultp>\tu64mat2x2;\n\ttypedef mat<2, 3, uint64, defaultp>\tu64mat2x3;\n\ttypedef mat<2, 4, uint64, defaultp>\tu64mat2x4;\n\ttypedef mat<3, 2, uint64, defaultp>\tu64mat3x2;\n\ttypedef mat<3, 3, uint64, defaultp>\tu64mat3x3;\n\ttypedef mat<3, 4, uint64, defaultp>\tu64mat3x4;\n\ttypedef mat<4, 2, uint64, defaultp>\tu64mat4x2;\n\ttypedef mat<4, 3, uint64, defaultp>\tu64mat4x3;\n\ttypedef mat<4, 4, uint64, defaultp>\tu64mat4x4;\n\n\t// Quaternion\n\n\ttypedef qua<float, lowp>\t\t\tlowp_quat;\n\ttypedef qua<float, mediump>\t\t\tmediump_quat;\n\ttypedef qua<float, highp>\t\t\thighp_quat;\n\ttypedef qua<float, defaultp>\t\tquat;\n\n\ttypedef qua<float, lowp>\t\t\tlowp_fquat;\n\ttypedef qua<float, mediump>\t\t\tmediump_fquat;\n\ttypedef qua<float, highp>\t\t\thighp_fquat;\n\ttypedef qua<float, defaultp>\t\tfquat;\n\n\ttypedef qua<f32, lowp>\t\t\t\tlowp_f32quat;\n\ttypedef qua<f32, mediump>\t\t\tmediump_f32quat;\n\ttypedef qua<f32, highp>\t\t\t\thighp_f32quat;\n\ttypedef qua<f32, defaultp>\t\t\tf32quat;\n\n\ttypedef qua<double, lowp>\t\t\tlowp_dquat;\n\ttypedef qua<double, mediump>\t\tmediump_dquat;\n\ttypedef qua<double, highp>\t\t\thighp_dquat;\n\ttypedef qua<double, defaultp>\t\tdquat;\n\n\ttypedef qua<f64, lowp>\t\t\t\tlowp_f64quat;\n\ttypedef qua<f64, mediump>\t\t\tmediump_f64quat;\n\ttypedef qua<f64, highp>\t\t\t\thighp_f64quat;\n\ttypedef qua<f64, defaultp>\t\t\tf64quat;\n}//namespace glm\n\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/geometric.hpp",
    "content": "/// @ref core\n/// @file glm/geometric.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n///\n/// @defgroup core_func_geometric Geometric functions\n/// @ingroup core\n///\n/// These operate on vectors as vectors, not component-wise.\n///\n/// Include <glm/geometric.hpp> to use these core features.\n\n#pragma once\n\n#include \"detail/type_vec3.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_func_geometric\n\t/// @{\n\n\t/// Returns the length of x, i.e., sqrt(x * x).\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/length.xml\">GLSL length man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T length(vec<L, T, Q> const& x);\n\n\t/// Returns the distance between p0 and p1, i.e., length(p0 - p1).\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/distance.xml\">GLSL distance man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T distance(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1);\n\n\t/// Returns the dot product of x and y, i.e., result = x * y.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/dot.xml\">GLSL dot man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR T dot(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns the cross product of x and y.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/cross.xml\">GLSL cross man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y);\n\n\t/// Returns a vector in the same direction as x but with length of 1.\n\t/// According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefined and generate an error.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/normalize.xml\">GLSL normalize man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> normalize(vec<L, T, Q> const& x);\n\n\t/// If dot(Nref, I) < 0.0, return N, otherwise, return -N.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/faceforward.xml\">GLSL faceforward man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> faceforward(\n\t\tvec<L, T, Q> const& N,\n\t\tvec<L, T, Q> const& I,\n\t\tvec<L, T, Q> const& Nref);\n\n\t/// For the incident vector I and surface orientation N,\n\t/// returns the reflection direction : result = I - 2.0 * dot(N, I) * N.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/reflect.xml\">GLSL reflect man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> reflect(\n\t\tvec<L, T, Q> const& I,\n\t\tvec<L, T, Q> const& N);\n\n\t/// For the incident vector I and surface normal N,\n\t/// and the ratio of indices of refraction eta,\n\t/// return the refraction vector.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/refract.xml\">GLSL refract man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.5 Geometric Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> refract(\n\t\tvec<L, T, Q> const& I,\n\t\tvec<L, T, Q> const& N,\n\t\tT eta);\n\n\t/// @}\n}//namespace glm\n\n#include \"detail/func_geometric.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/glm.hpp",
    "content": "/// @ref core\n/// @file glm/glm.hpp\n///\n/// @mainpage OpenGL Mathematics (GLM)\n/// - Website: <a href=\"https://glm.g-truc.net\">glm.g-truc.net</a>\n/// - <a href=\"modules.html\">GLM API documentation</a>\n/// - <a href=\"https://github.com/g-truc/glm/blob/master/manual.md\">GLM Manual</a>\n///\n/// @defgroup core Core features\n///\n/// @brief Features that implement in C++ the GLSL specification as closely as possible.\n///\n/// The GLM core consists of C++ types that mirror GLSL types and\n/// C++ functions that mirror the GLSL functions.\n///\n/// The best documentation for GLM Core is the current GLSL specification,\n/// <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.clean.pdf\">version 4.2\n/// (pdf file)</a>.\n///\n/// GLM core functionalities require <glm/glm.hpp> to be included to be used.\n///\n///\n/// @defgroup core_vector Vector types\n///\n/// Vector types of two to four components with an exhaustive set of operators.\n///\n/// @ingroup core\n///\n///\n/// @defgroup core_vector_precision Vector types with precision qualifiers\n///\n/// @brief Vector types with precision qualifiers which may result in various precision in term of ULPs\n///\n/// GLSL allows defining qualifiers for particular variables.\n/// With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility,\n/// with OpenGL ES's GLSL, these qualifiers do have an effect.\n///\n/// C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing:\n/// a number of typedefs that use a particular qualifier.\n///\n/// None of these types make any guarantees about the actual qualifier used.\n///\n/// @ingroup core\n///\n///\n/// @defgroup core_matrix Matrix types\n///\n/// Matrix types of with C columns and R rows where C and R are values between 2 to 4 included.\n/// These types have exhaustive sets of operators.\n///\n/// @ingroup core\n///\n///\n/// @defgroup core_matrix_precision Matrix types with precision qualifiers\n///\n/// @brief Matrix types with precision qualifiers which may result in various precision in term of ULPs\n///\n/// GLSL allows defining qualifiers for particular variables.\n/// With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility,\n/// with OpenGL ES's GLSL, these qualifiers do have an effect.\n///\n/// C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing:\n/// a number of typedefs that use a particular qualifier.\n///\n/// None of these types make any guarantees about the actual qualifier used.\n///\n/// @ingroup core\n///\n///\n/// @defgroup ext Stable extensions\n///\n/// @brief Additional features not specified by GLSL specification.\n///\n/// EXT extensions are fully tested and documented.\n///\n/// Even if it's highly unrecommended, it's possible to include all the extensions at once by\n/// including <glm/ext.hpp>. Otherwise, each extension needs to be included  a specific file.\n///\n///\n/// @defgroup gtc Recommended extensions\n///\n/// @brief Additional features not specified by GLSL specification.\n///\n/// GTC extensions aim to be stable with tests and documentation.\n///\n/// Even if it's highly unrecommended, it's possible to include all the extensions at once by\n/// including <glm/ext.hpp>. Otherwise, each extension needs to be included  a specific file.\n///\n///\n/// @defgroup gtx Experimental extensions\n///\n/// @brief Experimental features not specified by GLSL specification.\n///\n/// Experimental extensions are useful functions and types, but the development of\n/// their API and functionality is not necessarily stable. They can change\n/// substantially between versions. Backwards compatibility is not much of an issue\n/// for them.\n///\n/// Even if it's highly unrecommended, it's possible to include all the extensions\n/// at once by including <glm/ext.hpp>. Otherwise, each extension needs to be\n/// included  a specific file.\n///\n\n#include \"detail/_fixes.hpp\"\n\n#include \"detail/setup.hpp\"\n\n#pragma once\n\n#include <cmath>\n#include <climits>\n#include <cfloat>\n#include <limits>\n#include <cassert>\n#include \"fwd.hpp\"\n\n#include \"vec2.hpp\"\n#include \"vec3.hpp\"\n#include \"vec4.hpp\"\n#include \"mat2x2.hpp\"\n#include \"mat2x3.hpp\"\n#include \"mat2x4.hpp\"\n#include \"mat3x2.hpp\"\n#include \"mat3x3.hpp\"\n#include \"mat3x4.hpp\"\n#include \"mat4x2.hpp\"\n#include \"mat4x3.hpp\"\n#include \"mat4x4.hpp\"\n\n#include \"trigonometric.hpp\"\n#include \"exponential.hpp\"\n#include \"common.hpp\"\n#include \"packing.hpp\"\n#include \"geometric.hpp\"\n#include \"matrix.hpp\"\n#include \"vector_relational.hpp\"\n#include \"integer.hpp\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/bitfield.hpp",
    "content": "/// @ref gtc_bitfield\n/// @file glm/gtc/bitfield.hpp\n///\n/// @see core (dependence)\n/// @see gtc_bitfield (dependence)\n///\n/// @defgroup gtc_bitfield GLM_GTC_bitfield\n/// @ingroup gtc\n///\n/// Include <glm/gtc/bitfield.hpp> to use the features of this extension.\n///\n/// Allow to perform bit operations on integer values\n\n#include \"../detail/setup.hpp\"\n\n#pragma once\n\n// Dependencies\n#include \"../ext/scalar_int_sized.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/_vectorize.hpp\"\n#include \"type_precision.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_bitfield extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_bitfield\n\t/// @{\n\n\t/// Build a mask of 'count' bits\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType mask(genIUType Bits);\n\n\t/// Build a mask of 'count' bits\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed and unsigned integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> mask(vec<L, T, Q> const& v);\n\n\t/// Rotate all bits to the right. All the bits dropped in the right side are inserted back on the left side.\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType bitfieldRotateRight(genIUType In, int Shift);\n\n\t/// Rotate all bits to the right. All the bits dropped in the right side are inserted back on the left side.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed and unsigned integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> bitfieldRotateRight(vec<L, T, Q> const& In, int Shift);\n\n\t/// Rotate all bits to the left. All the bits dropped in the left side are inserted back on the right side.\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType bitfieldRotateLeft(genIUType In, int Shift);\n\n\t/// Rotate all bits to the left. All the bits dropped in the left side are inserted back on the right side.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed and unsigned integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> bitfieldRotateLeft(vec<L, T, Q> const& In, int Shift);\n\n\t/// Set to 1 a range of bits.\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount);\n\n\t/// Set to 1 a range of bits.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed and unsigned integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> bitfieldFillOne(vec<L, T, Q> const& Value, int FirstBit, int BitCount);\n\n\t/// Set to 0 a range of bits.\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount);\n\n\t/// Set to 0 a range of bits.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Signed and unsigned integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_bitfield\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> bitfieldFillZero(vec<L, T, Q> const& Value, int FirstBit, int BitCount);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of x followed by the first bit of y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL int16 bitfieldInterleave(int8 x, int8 y);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of x followed by the first bit of y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint16 bitfieldInterleave(uint8 x, uint8 y);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of v.x followed by the first bit of v.y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint16 bitfieldInterleave(u8vec2 const& v);\n\n\t/// Deinterleaves the bits of x.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL glm::u8vec2 bitfieldDeinterleave(glm::uint16 x);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of x followed by the first bit of y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL int32 bitfieldInterleave(int16 x, int16 y);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of x followed by the first bit of y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint32 bitfieldInterleave(uint16 x, uint16 y);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of v.x followed by the first bit of v.y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint32 bitfieldInterleave(u16vec2 const& v);\n\n\t/// Deinterleaves the bits of x.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL glm::u16vec2 bitfieldDeinterleave(glm::uint32 x);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of x followed by the first bit of y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of x followed by the first bit of y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y);\n\n\t/// Interleaves the bits of x and y.\n\t/// The first bit is the first bit of v.x followed by the first bit of v.y.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint64 bitfieldInterleave(u32vec2 const& v);\n\n\t/// Deinterleaves the bits of x.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL glm::u32vec2 bitfieldDeinterleave(glm::uint64 x);\n\n\t/// Interleaves the bits of x, y and z.\n\t/// The first bit is the first bit of x followed by the first bit of y and the first bit of z.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z);\n\n\t/// Interleaves the bits of x, y and z.\n\t/// The first bit is the first bit of x followed by the first bit of y and the first bit of z.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z);\n\n\t/// Interleaves the bits of x, y and z.\n\t/// The first bit is the first bit of x followed by the first bit of y and the first bit of z.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z);\n\n\t/// Interleaves the bits of x, y and z.\n\t/// The first bit is the first bit of x followed by the first bit of y and the first bit of z.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z);\n\n\t/// Interleaves the bits of x, y and z.\n\t/// The first bit is the first bit of x followed by the first bit of y and the first bit of z.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y, int32 z);\n\n\t/// Interleaves the bits of x, y and z.\n\t/// The first bit is the first bit of x followed by the first bit of y and the first bit of z.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z);\n\n\t/// Interleaves the bits of x, y, z and w.\n\t/// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w);\n\n\t/// Interleaves the bits of x, y, z and w.\n\t/// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w);\n\n\t/// Interleaves the bits of x, y, z and w.\n\t/// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w);\n\n\t/// Interleaves the bits of x, y, z and w.\n\t/// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w.\n\t/// The other bits are interleaved following the previous sequence.\n\t///\n\t/// @see gtc_bitfield\n\tGLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w);\n\n\t/// @}\n} //namespace glm\n\n#include \"bitfield.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/bitfield.inl",
    "content": "/// @ref gtc_bitfield\n\n#include \"../simd/integer.h\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<typename PARAM, typename RET>\n\tGLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y);\n\n\ttemplate<typename PARAM, typename RET>\n\tGLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y, PARAM z);\n\n\ttemplate<typename PARAM, typename RET>\n\tGLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y, PARAM z, PARAM w);\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER glm::uint16 bitfieldInterleave(glm::uint8 x, glm::uint8 y)\n\t{\n\t\tglm::uint16 REG1(x);\n\t\tglm::uint16 REG2(y);\n\n\t\tREG1 = ((REG1 <<  4) | REG1) & static_cast<glm::uint16>(0x0F0F);\n\t\tREG2 = ((REG2 <<  4) | REG2) & static_cast<glm::uint16>(0x0F0F);\n\n\t\tREG1 = ((REG1 <<  2) | REG1) & static_cast<glm::uint16>(0x3333);\n\t\tREG2 = ((REG2 <<  2) | REG2) & static_cast<glm::uint16>(0x3333);\n\n\t\tREG1 = ((REG1 <<  1) | REG1) & static_cast<glm::uint16>(0x5555);\n\t\tREG2 = ((REG2 <<  1) | REG2) & static_cast<glm::uint16>(0x5555);\n\n\t\treturn REG1 | static_cast<glm::uint16>(REG2 << 1);\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint16 x, glm::uint16 y)\n\t{\n\t\tglm::uint32 REG1(x);\n\t\tglm::uint32 REG2(y);\n\n\t\tREG1 = ((REG1 <<  8) | REG1) & static_cast<glm::uint32>(0x00FF00FF);\n\t\tREG2 = ((REG2 <<  8) | REG2) & static_cast<glm::uint32>(0x00FF00FF);\n\n\t\tREG1 = ((REG1 <<  4) | REG1) & static_cast<glm::uint32>(0x0F0F0F0F);\n\t\tREG2 = ((REG2 <<  4) | REG2) & static_cast<glm::uint32>(0x0F0F0F0F);\n\n\t\tREG1 = ((REG1 <<  2) | REG1) & static_cast<glm::uint32>(0x33333333);\n\t\tREG2 = ((REG2 <<  2) | REG2) & static_cast<glm::uint32>(0x33333333);\n\n\t\tREG1 = ((REG1 <<  1) | REG1) & static_cast<glm::uint32>(0x55555555);\n\t\tREG2 = ((REG2 <<  1) | REG2) & static_cast<glm::uint32>(0x55555555);\n\n\t\treturn REG1 | (REG2 << 1);\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint32 x, glm::uint32 y)\n\t{\n\t\tglm::uint64 REG1(x);\n\t\tglm::uint64 REG2(y);\n\n\t\tREG1 = ((REG1 << 16) | REG1) & static_cast<glm::uint64>(0x0000FFFF0000FFFFull);\n\t\tREG2 = ((REG2 << 16) | REG2) & static_cast<glm::uint64>(0x0000FFFF0000FFFFull);\n\n\t\tREG1 = ((REG1 <<  8) | REG1) & static_cast<glm::uint64>(0x00FF00FF00FF00FFull);\n\t\tREG2 = ((REG2 <<  8) | REG2) & static_cast<glm::uint64>(0x00FF00FF00FF00FFull);\n\n\t\tREG1 = ((REG1 <<  4) | REG1) & static_cast<glm::uint64>(0x0F0F0F0F0F0F0F0Full);\n\t\tREG2 = ((REG2 <<  4) | REG2) & static_cast<glm::uint64>(0x0F0F0F0F0F0F0F0Full);\n\n\t\tREG1 = ((REG1 <<  2) | REG1) & static_cast<glm::uint64>(0x3333333333333333ull);\n\t\tREG2 = ((REG2 <<  2) | REG2) & static_cast<glm::uint64>(0x3333333333333333ull);\n\n\t\tREG1 = ((REG1 <<  1) | REG1) & static_cast<glm::uint64>(0x5555555555555555ull);\n\t\tREG2 = ((REG2 <<  1) | REG2) & static_cast<glm::uint64>(0x5555555555555555ull);\n\n\t\treturn REG1 | (REG2 << 1);\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint8 x, glm::uint8 y, glm::uint8 z)\n\t{\n\t\tglm::uint32 REG1(x);\n\t\tglm::uint32 REG2(y);\n\t\tglm::uint32 REG3(z);\n\n\t\tREG1 = ((REG1 << 16) | REG1) & static_cast<glm::uint32>(0xFF0000FFu);\n\t\tREG2 = ((REG2 << 16) | REG2) & static_cast<glm::uint32>(0xFF0000FFu);\n\t\tREG3 = ((REG3 << 16) | REG3) & static_cast<glm::uint32>(0xFF0000FFu);\n\n\t\tREG1 = ((REG1 <<  8) | REG1) & static_cast<glm::uint32>(0x0F00F00Fu);\n\t\tREG2 = ((REG2 <<  8) | REG2) & static_cast<glm::uint32>(0x0F00F00Fu);\n\t\tREG3 = ((REG3 <<  8) | REG3) & static_cast<glm::uint32>(0x0F00F00Fu);\n\n\t\tREG1 = ((REG1 <<  4) | REG1) & static_cast<glm::uint32>(0xC30C30C3u);\n\t\tREG2 = ((REG2 <<  4) | REG2) & static_cast<glm::uint32>(0xC30C30C3u);\n\t\tREG3 = ((REG3 <<  4) | REG3) & static_cast<glm::uint32>(0xC30C30C3u);\n\n\t\tREG1 = ((REG1 <<  2) | REG1) & static_cast<glm::uint32>(0x49249249u);\n\t\tREG2 = ((REG2 <<  2) | REG2) & static_cast<glm::uint32>(0x49249249u);\n\t\tREG3 = ((REG3 <<  2) | REG3) & static_cast<glm::uint32>(0x49249249u);\n\n\t\treturn REG1 | (REG2 << 1) | (REG3 << 2);\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint16 x, glm::uint16 y, glm::uint16 z)\n\t{\n\t\tglm::uint64 REG1(x);\n\t\tglm::uint64 REG2(y);\n\t\tglm::uint64 REG3(z);\n\n\t\tREG1 = ((REG1 << 32) | REG1) & static_cast<glm::uint64>(0xFFFF00000000FFFFull);\n\t\tREG2 = ((REG2 << 32) | REG2) & static_cast<glm::uint64>(0xFFFF00000000FFFFull);\n\t\tREG3 = ((REG3 << 32) | REG3) & static_cast<glm::uint64>(0xFFFF00000000FFFFull);\n\n\t\tREG1 = ((REG1 << 16) | REG1) & static_cast<glm::uint64>(0x00FF0000FF0000FFull);\n\t\tREG2 = ((REG2 << 16) | REG2) & static_cast<glm::uint64>(0x00FF0000FF0000FFull);\n\t\tREG3 = ((REG3 << 16) | REG3) & static_cast<glm::uint64>(0x00FF0000FF0000FFull);\n\n\t\tREG1 = ((REG1 <<  8) | REG1) & static_cast<glm::uint64>(0xF00F00F00F00F00Full);\n\t\tREG2 = ((REG2 <<  8) | REG2) & static_cast<glm::uint64>(0xF00F00F00F00F00Full);\n\t\tREG3 = ((REG3 <<  8) | REG3) & static_cast<glm::uint64>(0xF00F00F00F00F00Full);\n\n\t\tREG1 = ((REG1 <<  4) | REG1) & static_cast<glm::uint64>(0x30C30C30C30C30C3ull);\n\t\tREG2 = ((REG2 <<  4) | REG2) & static_cast<glm::uint64>(0x30C30C30C30C30C3ull);\n\t\tREG3 = ((REG3 <<  4) | REG3) & static_cast<glm::uint64>(0x30C30C30C30C30C3ull);\n\n\t\tREG1 = ((REG1 <<  2) | REG1) & static_cast<glm::uint64>(0x9249249249249249ull);\n\t\tREG2 = ((REG2 <<  2) | REG2) & static_cast<glm::uint64>(0x9249249249249249ull);\n\t\tREG3 = ((REG3 <<  2) | REG3) & static_cast<glm::uint64>(0x9249249249249249ull);\n\n\t\treturn REG1 | (REG2 << 1) | (REG3 << 2);\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint32 x, glm::uint32 y, glm::uint32 z)\n\t{\n\t\tglm::uint64 REG1(x);\n\t\tglm::uint64 REG2(y);\n\t\tglm::uint64 REG3(z);\n\n\t\tREG1 = ((REG1 << 32) | REG1) & static_cast<glm::uint64>(0xFFFF00000000FFFFull);\n\t\tREG2 = ((REG2 << 32) | REG2) & static_cast<glm::uint64>(0xFFFF00000000FFFFull);\n\t\tREG3 = ((REG3 << 32) | REG3) & static_cast<glm::uint64>(0xFFFF00000000FFFFull);\n\n\t\tREG1 = ((REG1 << 16) | REG1) & static_cast<glm::uint64>(0x00FF0000FF0000FFull);\n\t\tREG2 = ((REG2 << 16) | REG2) & static_cast<glm::uint64>(0x00FF0000FF0000FFull);\n\t\tREG3 = ((REG3 << 16) | REG3) & static_cast<glm::uint64>(0x00FF0000FF0000FFull);\n\n\t\tREG1 = ((REG1 <<  8) | REG1) & static_cast<glm::uint64>(0xF00F00F00F00F00Full);\n\t\tREG2 = ((REG2 <<  8) | REG2) & static_cast<glm::uint64>(0xF00F00F00F00F00Full);\n\t\tREG3 = ((REG3 <<  8) | REG3) & static_cast<glm::uint64>(0xF00F00F00F00F00Full);\n\n\t\tREG1 = ((REG1 <<  4) | REG1) & static_cast<glm::uint64>(0x30C30C30C30C30C3ull);\n\t\tREG2 = ((REG2 <<  4) | REG2) & static_cast<glm::uint64>(0x30C30C30C30C30C3ull);\n\t\tREG3 = ((REG3 <<  4) | REG3) & static_cast<glm::uint64>(0x30C30C30C30C30C3ull);\n\n\t\tREG1 = ((REG1 <<  2) | REG1) & static_cast<glm::uint64>(0x9249249249249249ull);\n\t\tREG2 = ((REG2 <<  2) | REG2) & static_cast<glm::uint64>(0x9249249249249249ull);\n\t\tREG3 = ((REG3 <<  2) | REG3) & static_cast<glm::uint64>(0x9249249249249249ull);\n\n\t\treturn REG1 | (REG2 << 1) | (REG3 << 2);\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint8 x, glm::uint8 y, glm::uint8 z, glm::uint8 w)\n\t{\n\t\tglm::uint32 REG1(x);\n\t\tglm::uint32 REG2(y);\n\t\tglm::uint32 REG3(z);\n\t\tglm::uint32 REG4(w);\n\n\t\tREG1 = ((REG1 << 12) | REG1) & static_cast<glm::uint32>(0x000F000Fu);\n\t\tREG2 = ((REG2 << 12) | REG2) & static_cast<glm::uint32>(0x000F000Fu);\n\t\tREG3 = ((REG3 << 12) | REG3) & static_cast<glm::uint32>(0x000F000Fu);\n\t\tREG4 = ((REG4 << 12) | REG4) & static_cast<glm::uint32>(0x000F000Fu);\n\n\t\tREG1 = ((REG1 <<  6) | REG1) & static_cast<glm::uint32>(0x03030303u);\n\t\tREG2 = ((REG2 <<  6) | REG2) & static_cast<glm::uint32>(0x03030303u);\n\t\tREG3 = ((REG3 <<  6) | REG3) & static_cast<glm::uint32>(0x03030303u);\n\t\tREG4 = ((REG4 <<  6) | REG4) & static_cast<glm::uint32>(0x03030303u);\n\n\t\tREG1 = ((REG1 <<  3) | REG1) & static_cast<glm::uint32>(0x11111111u);\n\t\tREG2 = ((REG2 <<  3) | REG2) & static_cast<glm::uint32>(0x11111111u);\n\t\tREG3 = ((REG3 <<  3) | REG3) & static_cast<glm::uint32>(0x11111111u);\n\t\tREG4 = ((REG4 <<  3) | REG4) & static_cast<glm::uint32>(0x11111111u);\n\n\t\treturn REG1 | (REG2 << 1) | (REG3 << 2) | (REG4 << 3);\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint16 x, glm::uint16 y, glm::uint16 z, glm::uint16 w)\n\t{\n\t\tglm::uint64 REG1(x);\n\t\tglm::uint64 REG2(y);\n\t\tglm::uint64 REG3(z);\n\t\tglm::uint64 REG4(w);\n\n\t\tREG1 = ((REG1 << 24) | REG1) & static_cast<glm::uint64>(0x000000FF000000FFull);\n\t\tREG2 = ((REG2 << 24) | REG2) & static_cast<glm::uint64>(0x000000FF000000FFull);\n\t\tREG3 = ((REG3 << 24) | REG3) & static_cast<glm::uint64>(0x000000FF000000FFull);\n\t\tREG4 = ((REG4 << 24) | REG4) & static_cast<glm::uint64>(0x000000FF000000FFull);\n\n\t\tREG1 = ((REG1 << 12) | REG1) & static_cast<glm::uint64>(0x000F000F000F000Full);\n\t\tREG2 = ((REG2 << 12) | REG2) & static_cast<glm::uint64>(0x000F000F000F000Full);\n\t\tREG3 = ((REG3 << 12) | REG3) & static_cast<glm::uint64>(0x000F000F000F000Full);\n\t\tREG4 = ((REG4 << 12) | REG4) & static_cast<glm::uint64>(0x000F000F000F000Full);\n\n\t\tREG1 = ((REG1 <<  6) | REG1) & static_cast<glm::uint64>(0x0303030303030303ull);\n\t\tREG2 = ((REG2 <<  6) | REG2) & static_cast<glm::uint64>(0x0303030303030303ull);\n\t\tREG3 = ((REG3 <<  6) | REG3) & static_cast<glm::uint64>(0x0303030303030303ull);\n\t\tREG4 = ((REG4 <<  6) | REG4) & static_cast<glm::uint64>(0x0303030303030303ull);\n\n\t\tREG1 = ((REG1 <<  3) | REG1) & static_cast<glm::uint64>(0x1111111111111111ull);\n\t\tREG2 = ((REG2 <<  3) | REG2) & static_cast<glm::uint64>(0x1111111111111111ull);\n\t\tREG3 = ((REG3 <<  3) | REG3) & static_cast<glm::uint64>(0x1111111111111111ull);\n\t\tREG4 = ((REG4 <<  3) | REG4) & static_cast<glm::uint64>(0x1111111111111111ull);\n\n\t\treturn REG1 | (REG2 << 1) | (REG3 << 2) | (REG4 << 3);\n\t}\n}//namespace detail\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType mask(genIUType Bits)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'mask' accepts only integer values\");\n\n\t\treturn Bits >= sizeof(genIUType) * 8 ? ~static_cast<genIUType>(0) : (static_cast<genIUType>(1) << Bits) - static_cast<genIUType>(1);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> mask(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'mask' accepts only integer values\");\n\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(mask, v);\n\t}\n\n\ttemplate<typename genIType>\n\tGLM_FUNC_QUALIFIER genIType bitfieldRotateRight(genIType In, int Shift)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIType>::is_integer, \"'bitfieldRotateRight' accepts only integer values\");\n\n\t\tint const BitSize = static_cast<genIType>(sizeof(genIType) * 8);\n\t\treturn (In << static_cast<genIType>(Shift)) | (In >> static_cast<genIType>(BitSize - Shift));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldRotateRight(vec<L, T, Q> const& In, int Shift)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitfieldRotateRight' accepts only integer values\");\n\n\t\tint const BitSize = static_cast<int>(sizeof(T) * 8);\n\t\treturn (In << static_cast<T>(Shift)) | (In >> static_cast<T>(BitSize - Shift));\n\t}\n\n\ttemplate<typename genIType>\n\tGLM_FUNC_QUALIFIER genIType bitfieldRotateLeft(genIType In, int Shift)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIType>::is_integer, \"'bitfieldRotateLeft' accepts only integer values\");\n\n\t\tint const BitSize = static_cast<genIType>(sizeof(genIType) * 8);\n\t\treturn (In >> static_cast<genIType>(Shift)) | (In << static_cast<genIType>(BitSize - Shift));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldRotateLeft(vec<L, T, Q> const& In, int Shift)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitfieldRotateLeft' accepts only integer values\");\n\n\t\tint const BitSize = static_cast<int>(sizeof(T) * 8);\n\t\treturn (In >> static_cast<T>(Shift)) | (In << static_cast<T>(BitSize - Shift));\n\t}\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount)\n\t{\n\t\treturn Value | static_cast<genIUType>(mask(BitCount) << FirstBit);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldFillOne(vec<L, T, Q> const& Value, int FirstBit, int BitCount)\n\t{\n\t\treturn Value | static_cast<T>(mask(BitCount) << FirstBit);\n\t}\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount)\n\t{\n\t\treturn Value & static_cast<genIUType>(~(mask(BitCount) << FirstBit));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> bitfieldFillZero(vec<L, T, Q> const& Value, int FirstBit, int BitCount)\n\t{\n\t\treturn Value & static_cast<T>(~(mask(BitCount) << FirstBit));\n\t}\n\n\tGLM_FUNC_QUALIFIER int16 bitfieldInterleave(int8 x, int8 y)\n\t{\n\t\tunion sign8\n\t\t{\n\t\t\tint8 i;\n\t\t\tuint8 u;\n\t\t} sign_x, sign_y;\n\n\t\tunion sign16\n\t\t{\n\t\t\tint16 i;\n\t\t\tuint16 u;\n\t\t} result;\n\n\t\tsign_x.i = x;\n\t\tsign_y.i = y;\n\t\tresult.u = bitfieldInterleave(sign_x.u, sign_y.u);\n\n\t\treturn result.i;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 bitfieldInterleave(uint8 x, uint8 y)\n\t{\n\t\treturn detail::bitfieldInterleave<uint8, uint16>(x, y);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 bitfieldInterleave(u8vec2 const& v)\n\t{\n\t\treturn detail::bitfieldInterleave<uint8, uint16>(v.x, v.y);\n\t}\n\n\tGLM_FUNC_QUALIFIER u8vec2 bitfieldDeinterleave(glm::uint16 x)\n\t{\n\t\tuint16 REG1(x);\n\t\tuint16 REG2(x >>= 1);\n\n\t\tREG1 = REG1 & static_cast<uint16>(0x5555);\n\t\tREG2 = REG2 & static_cast<uint16>(0x5555);\n\n\t\tREG1 = ((REG1 >> 1) | REG1) & static_cast<uint16>(0x3333);\n\t\tREG2 = ((REG2 >> 1) | REG2) & static_cast<uint16>(0x3333);\n\n\t\tREG1 = ((REG1 >> 2) | REG1) & static_cast<uint16>(0x0F0F);\n\t\tREG2 = ((REG2 >> 2) | REG2) & static_cast<uint16>(0x0F0F);\n\n\t\tREG1 = ((REG1 >> 4) | REG1) & static_cast<uint16>(0x00FF);\n\t\tREG2 = ((REG2 >> 4) | REG2) & static_cast<uint16>(0x00FF);\n\n\t\tREG1 = ((REG1 >> 8) | REG1) & static_cast<uint16>(0xFFFF);\n\t\tREG2 = ((REG2 >> 8) | REG2) & static_cast<uint16>(0xFFFF);\n\n\t\treturn glm::u8vec2(REG1, REG2);\n\t}\n\n\tGLM_FUNC_QUALIFIER int32 bitfieldInterleave(int16 x, int16 y)\n\t{\n\t\tunion sign16\n\t\t{\n\t\t\tint16 i;\n\t\t\tuint16 u;\n\t\t} sign_x, sign_y;\n\n\t\tunion sign32\n\t\t{\n\t\t\tint32 i;\n\t\t\tuint32 u;\n\t\t} result;\n\n\t\tsign_x.i = x;\n\t\tsign_y.i = y;\n\t\tresult.u = bitfieldInterleave(sign_x.u, sign_y.u);\n\n\t\treturn result.i;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint16 x, uint16 y)\n\t{\n\t\treturn detail::bitfieldInterleave<uint16, uint32>(x, y);\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(u16vec2 const& v)\n\t{\n\t\treturn detail::bitfieldInterleave<uint16, uint32>(v.x, v.y);\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::u16vec2 bitfieldDeinterleave(glm::uint32 x)\n\t{\n\t\tglm::uint32 REG1(x);\n\t\tglm::uint32 REG2(x >>= 1);\n\n\t\tREG1 = REG1 & static_cast<glm::uint32>(0x55555555);\n\t\tREG2 = REG2 & static_cast<glm::uint32>(0x55555555);\n\n\t\tREG1 = ((REG1 >> 1) | REG1) & static_cast<glm::uint32>(0x33333333);\n\t\tREG2 = ((REG2 >> 1) | REG2) & static_cast<glm::uint32>(0x33333333);\n\n\t\tREG1 = ((REG1 >> 2) | REG1) & static_cast<glm::uint32>(0x0F0F0F0F);\n\t\tREG2 = ((REG2 >> 2) | REG2) & static_cast<glm::uint32>(0x0F0F0F0F);\n\n\t\tREG1 = ((REG1 >> 4) | REG1) & static_cast<glm::uint32>(0x00FF00FF);\n\t\tREG2 = ((REG2 >> 4) | REG2) & static_cast<glm::uint32>(0x00FF00FF);\n\n\t\tREG1 = ((REG1 >> 8) | REG1) & static_cast<glm::uint32>(0x0000FFFF);\n\t\tREG2 = ((REG2 >> 8) | REG2) & static_cast<glm::uint32>(0x0000FFFF);\n\n\t\treturn glm::u16vec2(REG1, REG2);\n\t}\n\n\tGLM_FUNC_QUALIFIER int64 bitfieldInterleave(int32 x, int32 y)\n\t{\n\t\tunion sign32\n\t\t{\n\t\t\tint32 i;\n\t\t\tuint32 u;\n\t\t} sign_x, sign_y;\n\n\t\tunion sign64\n\t\t{\n\t\t\tint64 i;\n\t\t\tuint64 u;\n\t\t} result;\n\n\t\tsign_x.i = x;\n\t\tsign_y.i = y;\n\t\tresult.u = bitfieldInterleave(sign_x.u, sign_y.u);\n\n\t\treturn result.i;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint32 x, uint32 y)\n\t{\n\t\treturn detail::bitfieldInterleave<uint32, uint64>(x, y);\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(u32vec2 const& v)\n\t{\n\t\treturn detail::bitfieldInterleave<uint32, uint64>(v.x, v.y);\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::u32vec2 bitfieldDeinterleave(glm::uint64 x)\n\t{\n\t\tglm::uint64 REG1(x);\n\t\tglm::uint64 REG2(x >>= 1);\n\n\t\tREG1 = REG1 & static_cast<glm::uint64>(0x5555555555555555ull);\n\t\tREG2 = REG2 & static_cast<glm::uint64>(0x5555555555555555ull);\n\n\t\tREG1 = ((REG1 >> 1) | REG1) & static_cast<glm::uint64>(0x3333333333333333ull);\n\t\tREG2 = ((REG2 >> 1) | REG2) & static_cast<glm::uint64>(0x3333333333333333ull);\n\n\t\tREG1 = ((REG1 >> 2) | REG1) & static_cast<glm::uint64>(0x0F0F0F0F0F0F0F0Full);\n\t\tREG2 = ((REG2 >> 2) | REG2) & static_cast<glm::uint64>(0x0F0F0F0F0F0F0F0Full);\n\n\t\tREG1 = ((REG1 >> 4) | REG1) & static_cast<glm::uint64>(0x00FF00FF00FF00FFull);\n\t\tREG2 = ((REG2 >> 4) | REG2) & static_cast<glm::uint64>(0x00FF00FF00FF00FFull);\n\n\t\tREG1 = ((REG1 >> 8) | REG1) & static_cast<glm::uint64>(0x0000FFFF0000FFFFull);\n\t\tREG2 = ((REG2 >> 8) | REG2) & static_cast<glm::uint64>(0x0000FFFF0000FFFFull);\n\n\t\tREG1 = ((REG1 >> 16) | REG1) & static_cast<glm::uint64>(0x00000000FFFFFFFFull);\n\t\tREG2 = ((REG2 >> 16) | REG2) & static_cast<glm::uint64>(0x00000000FFFFFFFFull);\n\n\t\treturn glm::u32vec2(REG1, REG2);\n\t}\n\n\tGLM_FUNC_QUALIFIER int32 bitfieldInterleave(int8 x, int8 y, int8 z)\n\t{\n\t\tunion sign8\n\t\t{\n\t\t\tint8 i;\n\t\t\tuint8 u;\n\t\t} sign_x, sign_y, sign_z;\n\n\t\tunion sign32\n\t\t{\n\t\t\tint32 i;\n\t\t\tuint32 u;\n\t\t} result;\n\n\t\tsign_x.i = x;\n\t\tsign_y.i = y;\n\t\tsign_z.i = z;\n\t\tresult.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u);\n\n\t\treturn result.i;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z)\n\t{\n\t\treturn detail::bitfieldInterleave<uint8, uint32>(x, y, z);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 bitfieldInterleave(u8vec3 const& v)\n\t{\n\t\treturn detail::bitfieldInterleave<uint8, uint32>(v.x, v.y, v.z);\n\t}\n\n\tGLM_FUNC_QUALIFIER int64 bitfieldInterleave(int16 x, int16 y, int16 z)\n\t{\n\t\tunion sign16\n\t\t{\n\t\t\tint16 i;\n\t\t\tuint16 u;\n\t\t} sign_x, sign_y, sign_z;\n\n\t\tunion sign64\n\t\t{\n\t\t\tint64 i;\n\t\t\tuint64 u;\n\t\t} result;\n\n\t\tsign_x.i = x;\n\t\tsign_y.i = y;\n\t\tsign_z.i = z;\n\t\tresult.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u);\n\n\t\treturn result.i;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z)\n\t{\n\t\treturn detail::bitfieldInterleave<uint32, uint64>(x, y, z);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u16vec3 const& v)\n\t{\n\t\treturn detail::bitfieldInterleave<uint32, uint64>(v.x, v.y, v.z);\n\t}\n\n\tGLM_FUNC_QUALIFIER int64 bitfieldInterleave(int32 x, int32 y, int32 z)\n\t{\n\t\tunion sign16\n\t\t{\n\t\t\tint32 i;\n\t\t\tuint32 u;\n\t\t} sign_x, sign_y, sign_z;\n\n\t\tunion sign64\n\t\t{\n\t\t\tint64 i;\n\t\t\tuint64 u;\n\t\t} result;\n\n\t\tsign_x.i = x;\n\t\tsign_y.i = y;\n\t\tsign_z.i = z;\n\t\tresult.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u);\n\n\t\treturn result.i;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z)\n\t{\n\t\treturn detail::bitfieldInterleave<uint32, uint64>(x, y, z);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u32vec3 const& v)\n\t{\n\t\treturn detail::bitfieldInterleave<uint32, uint64>(v.x, v.y, v.z);\n\t}\n\n\tGLM_FUNC_QUALIFIER int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w)\n\t{\n\t\tunion sign8\n\t\t{\n\t\t\tint8 i;\n\t\t\tuint8 u;\n\t\t} sign_x, sign_y, sign_z, sign_w;\n\n\t\tunion sign32\n\t\t{\n\t\t\tint32 i;\n\t\t\tuint32 u;\n\t\t} result;\n\n\t\tsign_x.i = x;\n\t\tsign_y.i = y;\n\t\tsign_z.i = z;\n\t\tsign_w.i = w;\n\t\tresult.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u, sign_w.u);\n\n\t\treturn result.i;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w)\n\t{\n\t\treturn detail::bitfieldInterleave<uint8, uint32>(x, y, z, w);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 bitfieldInterleave(u8vec4 const& v)\n\t{\n\t\treturn detail::bitfieldInterleave<uint8, uint32>(v.x, v.y, v.z, v.w);\n\t}\n\n\tGLM_FUNC_QUALIFIER int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w)\n\t{\n\t\tunion sign16\n\t\t{\n\t\t\tint16 i;\n\t\t\tuint16 u;\n\t\t} sign_x, sign_y, sign_z, sign_w;\n\n\t\tunion sign64\n\t\t{\n\t\t\tint64 i;\n\t\t\tuint64 u;\n\t\t} result;\n\n\t\tsign_x.i = x;\n\t\tsign_y.i = y;\n\t\tsign_z.i = z;\n\t\tsign_w.i = w;\n\t\tresult.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u, sign_w.u);\n\n\t\treturn result.i;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w)\n\t{\n\t\treturn detail::bitfieldInterleave<uint16, uint64>(x, y, z, w);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u16vec4 const& v)\n\t{\n\t\treturn detail::bitfieldInterleave<uint16, uint64>(v.x, v.y, v.z, v.w);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/color_space.hpp",
    "content": "/// @ref gtc_color_space\n/// @file glm/gtc/color_space.hpp\n///\n/// @see core (dependence)\n/// @see gtc_color_space (dependence)\n///\n/// @defgroup gtc_color_space GLM_GTC_color_space\n/// @ingroup gtc\n///\n/// Include <glm/gtc/color_space.hpp> to use the features of this extension.\n///\n/// Allow to perform bit operations on integer values\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../exponential.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_color_space extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_color_space\n\t/// @{\n\n\t/// Convert a linear color to sRGB color using a standard gamma correction.\n\t/// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> convertLinearToSRGB(vec<L, T, Q> const& ColorLinear);\n\n\t/// Convert a linear color to sRGB color using a custom gamma correction.\n\t/// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> convertLinearToSRGB(vec<L, T, Q> const& ColorLinear, T Gamma);\n\n\t/// Convert a sRGB color to linear color using a standard gamma correction.\n\t/// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> convertSRGBToLinear(vec<L, T, Q> const& ColorSRGB);\n\n\t/// Convert a sRGB color to linear color using a custom gamma correction.\n\t// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> convertSRGBToLinear(vec<L, T, Q> const& ColorSRGB, T Gamma);\n\n\t/// @}\n} //namespace glm\n\n#include \"color_space.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/color_space.inl",
    "content": "/// @ref gtc_color_space\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct compute_rgbToSrgb\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& ColorRGB, T GammaCorrection)\n\t\t{\n\t\t\tvec<L, T, Q> const ClampedColor(clamp(ColorRGB, static_cast<T>(0), static_cast<T>(1)));\n\n\t\t\treturn mix(\n\t\t\t\tpow(ClampedColor, vec<L, T, Q>(GammaCorrection)) * static_cast<T>(1.055) - static_cast<T>(0.055),\n\t\t\t\tClampedColor * static_cast<T>(12.92),\n\t\t\t\tlessThan(ClampedColor, vec<L, T, Q>(static_cast<T>(0.0031308))));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_rgbToSrgb<4, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& ColorRGB, T GammaCorrection)\n\t\t{\n\t\t\treturn vec<4, T, Q>(compute_rgbToSrgb<3, T, Q>::call(vec<3, T, Q>(ColorRGB), GammaCorrection), ColorRGB.w);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct compute_srgbToRgb\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& ColorSRGB, T Gamma)\n\t\t{\n\t\t\treturn mix(\n\t\t\t\tpow((ColorSRGB + static_cast<T>(0.055)) * static_cast<T>(0.94786729857819905213270142180095), vec<L, T, Q>(Gamma)),\n\t\t\t\tColorSRGB * static_cast<T>(0.07739938080495356037151702786378),\n\t\t\t\tlessThanEqual(ColorSRGB, vec<L, T, Q>(static_cast<T>(0.04045))));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_srgbToRgb<4, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& ColorSRGB, T Gamma)\n\t\t{\n\t\t\treturn vec<4, T, Q>(compute_srgbToRgb<3, T, Q>::call(vec<3, T, Q>(ColorSRGB), Gamma), ColorSRGB.w);\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> convertLinearToSRGB(vec<L, T, Q> const& ColorLinear)\n\t{\n\t\treturn detail::compute_rgbToSrgb<L, T, Q>::call(ColorLinear, static_cast<T>(0.41666));\n\t}\n\n\t// Based on Ian Taylor http://chilliant.blogspot.fr/2012/08/srgb-approximations-for-hlsl.html\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER vec<3, float, lowp> convertLinearToSRGB(vec<3, float, lowp> const& ColorLinear)\n\t{\n\t\tvec<3, float, lowp> S1 = sqrt(ColorLinear);\n\t\tvec<3, float, lowp> S2 = sqrt(S1);\n\t\tvec<3, float, lowp> S3 = sqrt(S2);\n\t\treturn 0.662002687f * S1 + 0.684122060f * S2 - 0.323583601f * S3 - 0.0225411470f * ColorLinear;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> convertLinearToSRGB(vec<L, T, Q> const& ColorLinear, T Gamma)\n\t{\n\t\treturn detail::compute_rgbToSrgb<L, T, Q>::call(ColorLinear, static_cast<T>(1) / Gamma);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> convertSRGBToLinear(vec<L, T, Q> const& ColorSRGB)\n\t{\n\t\treturn detail::compute_srgbToRgb<L, T, Q>::call(ColorSRGB, static_cast<T>(2.4));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> convertSRGBToLinear(vec<L, T, Q> const& ColorSRGB, T Gamma)\n\t{\n\t\treturn detail::compute_srgbToRgb<L, T, Q>::call(ColorSRGB, Gamma);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/constants.hpp",
    "content": "/// @ref gtc_constants\n/// @file glm/gtc/constants.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_constants GLM_GTC_constants\n/// @ingroup gtc\n///\n/// Include <glm/gtc/constants.hpp> to use the features of this extension.\n///\n/// Provide a list of constants and precomputed useful values.\n\n#pragma once\n\n// Dependencies\n#include \"../ext/scalar_constants.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_constants extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_constants\n\t/// @{\n\n\t/// Return 0.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType zero();\n\n\t/// Return 1.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType one();\n\n\t/// Return pi * 2.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType two_pi();\n\n\t/// Return square root of pi.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType root_pi();\n\n\t/// Return pi / 2.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType half_pi();\n\n\t/// Return pi / 2 * 3.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType three_over_two_pi();\n\n\t/// Return pi / 4.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType quarter_pi();\n\n\t/// Return 1 / pi.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType one_over_pi();\n\n\t/// Return 1 / (pi * 2).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType one_over_two_pi();\n\n\t/// Return 2 / pi.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType two_over_pi();\n\n\t/// Return 4 / pi.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType four_over_pi();\n\n\t/// Return 2 / sqrt(pi).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType two_over_root_pi();\n\n\t/// Return 1 / sqrt(2).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType one_over_root_two();\n\n\t/// Return sqrt(pi / 2).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType root_half_pi();\n\n\t/// Return sqrt(2 * pi).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType root_two_pi();\n\n\t/// Return sqrt(ln(4)).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType root_ln_four();\n\n\t/// Return e constant.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType e();\n\n\t/// Return Euler's constant.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType euler();\n\n\t/// Return sqrt(2).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType root_two();\n\n\t/// Return sqrt(3).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType root_three();\n\n\t/// Return sqrt(5).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType root_five();\n\n\t/// Return ln(2).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType ln_two();\n\n\t/// Return ln(10).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType ln_ten();\n\n\t/// Return ln(ln(2)).\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType ln_ln_two();\n\n\t/// Return 1 / 3.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType third();\n\n\t/// Return 2 / 3.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType two_thirds();\n\n\t/// Return the golden ratio constant.\n\t/// @see gtc_constants\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL GLM_CONSTEXPR genType golden_ratio();\n\n\t/// @}\n} //namespace glm\n\n#include \"constants.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/constants.inl",
    "content": "/// @ref gtc_constants\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType zero()\n\t{\n\t\treturn genType(0);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one()\n\t{\n\t\treturn genType(1);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_pi()\n\t{\n\t\treturn genType(6.28318530717958647692528676655900576);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_pi()\n\t{\n\t\treturn genType(1.772453850905516027);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType half_pi()\n\t{\n\t\treturn genType(1.57079632679489661923132169163975144);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType three_over_two_pi()\n\t{\n\t\treturn genType(4.71238898038468985769396507491925432);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType quarter_pi()\n\t{\n\t\treturn genType(0.785398163397448309615660845819875721);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_pi()\n\t{\n\t\treturn genType(0.318309886183790671537767526745028724);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_two_pi()\n\t{\n\t\treturn genType(0.159154943091895335768883763372514362);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_pi()\n\t{\n\t\treturn genType(0.636619772367581343075535053490057448);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType four_over_pi()\n\t{\n\t\treturn genType(1.273239544735162686151070106980114898);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_root_pi()\n\t{\n\t\treturn genType(1.12837916709551257389615890312154517);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_root_two()\n\t{\n\t\treturn genType(0.707106781186547524400844362104849039);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_half_pi()\n\t{\n\t\treturn genType(1.253314137315500251);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two_pi()\n\t{\n\t\treturn genType(2.506628274631000502);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_ln_four()\n\t{\n\t\treturn genType(1.17741002251547469);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType e()\n\t{\n\t\treturn genType(2.71828182845904523536);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType euler()\n\t{\n\t\treturn genType(0.577215664901532860606);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two()\n\t{\n\t\treturn genType(1.41421356237309504880168872420969808);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_three()\n\t{\n\t\treturn genType(1.73205080756887729352744634150587236);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_five()\n\t{\n\t\treturn genType(2.23606797749978969640917366873127623);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_two()\n\t{\n\t\treturn genType(0.693147180559945309417232121458176568);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ten()\n\t{\n\t\treturn genType(2.30258509299404568401799145468436421);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ln_two()\n\t{\n\t\treturn genType(-0.3665129205816643);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType third()\n\t{\n\t\treturn genType(0.3333333333333333333333333333333333333333);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_thirds()\n\t{\n\t\treturn genType(0.666666666666666666666666666666666666667);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType golden_ratio()\n\t{\n\t\treturn genType(1.61803398874989484820458683436563811);\n\t}\n\n} //namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/epsilon.hpp",
    "content": "/// @ref gtc_epsilon\n/// @file glm/gtc/epsilon.hpp\n///\n/// @see core (dependence)\n/// @see gtc_quaternion (dependence)\n///\n/// @defgroup gtc_epsilon GLM_GTC_epsilon\n/// @ingroup gtc\n///\n/// Include <glm/gtc/epsilon.hpp> to use the features of this extension.\n///\n/// Comparison functions for a user defined epsilon values.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_epsilon extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_epsilon\n\t/// @{\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @see gtc_epsilon\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> epsilonEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is satisfied.\n\t///\n\t/// @see gtc_epsilon\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL bool epsilonEqual(genType const& x, genType const& y, genType const& epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| < epsilon.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @see gtc_epsilon\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> epsilonNotEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon);\n\n\t/// Returns the component-wise comparison of |x - y| >= epsilon.\n\t/// True if this expression is not satisfied.\n\t///\n\t/// @see gtc_epsilon\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL bool epsilonNotEqual(genType const& x, genType const& y, genType const& epsilon);\n\n\t/// @}\n}//namespace glm\n\n#include \"epsilon.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/epsilon.inl",
    "content": "/// @ref gtc_epsilon\n\n// Dependency:\n#include \"../vector_relational.hpp\"\n#include \"../common.hpp\"\n\nnamespace glm\n{\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER bool epsilonEqual\n\t(\n\t\tfloat const& x,\n\t\tfloat const& y,\n\t\tfloat const& epsilon\n\t)\n\t{\n\t\treturn abs(x - y) < epsilon;\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER bool epsilonEqual\n\t(\n\t\tdouble const& x,\n\t\tdouble const& y,\n\t\tdouble const& epsilon\n\t)\n\t{\n\t\treturn abs(x - y) < epsilon;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> epsilonEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon)\n\t{\n\t\treturn lessThan(abs(x - y), vec<L, T, Q>(epsilon));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> epsilonEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon)\n\t{\n\t\treturn lessThan(abs(x - y), vec<L, T, Q>(epsilon));\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER bool epsilonNotEqual(float const& x, float const& y, float const& epsilon)\n\t{\n\t\treturn abs(x - y) >= epsilon;\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER bool epsilonNotEqual(double const& x, double const& y, double const& epsilon)\n\t{\n\t\treturn abs(x - y) >= epsilon;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> epsilonNotEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, T const& epsilon)\n\t{\n\t\treturn greaterThanEqual(abs(x - y), vec<L, T, Q>(epsilon));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> epsilonNotEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y, vec<L, T, Q> const& epsilon)\n\t{\n\t\treturn greaterThanEqual(abs(x - y), vec<L, T, Q>(epsilon));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> epsilonEqual(qua<T, Q> const& x, qua<T, Q> const& y, T const& epsilon)\n\t{\n\t\tvec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w);\n\t\treturn lessThan(abs(v), vec<4, T, Q>(epsilon));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> epsilonNotEqual(qua<T, Q> const& x, qua<T, Q> const& y, T const& epsilon)\n\t{\n\t\tvec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w);\n\t\treturn greaterThanEqual(abs(v), vec<4, T, Q>(epsilon));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/integer.hpp",
    "content": "/// @ref gtc_integer\n/// @file glm/gtc/integer.hpp\n///\n/// @see core (dependence)\n/// @see gtc_integer (dependence)\n///\n/// @defgroup gtc_integer GLM_GTC_integer\n/// @ingroup gtc\n///\n/// Include <glm/gtc/integer.hpp> to use the features of this extension.\n///\n/// @brief Allow to perform bit operations on integer values\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../common.hpp\"\n#include \"../integer.hpp\"\n#include \"../exponential.hpp\"\n#include \"../ext/scalar_common.hpp\"\n#include \"../ext/vector_common.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_integer extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_integer\n\t/// @{\n\n\t/// Returns the log2 of x for integer values. Useful to compute mipmap count from the texture size.\n\t/// @see gtc_integer\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType log2(genIUType x);\n\n\t/// @}\n} //namespace glm\n\n#include \"integer.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/integer.inl",
    "content": "/// @ref gtc_integer\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_log2<L, T, Q, false, Aligned>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\t//Equivalent to return findMSB(vec); but save one function call in ASM with VC\n\t\t\t//return findMSB(vec);\n\t\t\treturn vec<L, T, Q>(detail::compute_findMSB_vec<L, T, Q, sizeof(T) * 8>::call(v));\n\t\t}\n\t};\n\n#\tif GLM_HAS_BITSCAN_WINDOWS\n\t\ttemplate<qualifier Q, bool Aligned>\n\t\tstruct compute_log2<4, int, Q, false, Aligned>\n\t\t{\n\t\t\tGLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v)\n\t\t\t{\n\t\t\t\tvec<4, int, Q> Result;\n\t\t\t\t_BitScanReverse(reinterpret_cast<unsigned long*>(&Result.x), v.x);\n\t\t\t\t_BitScanReverse(reinterpret_cast<unsigned long*>(&Result.y), v.y);\n\t\t\t\t_BitScanReverse(reinterpret_cast<unsigned long*>(&Result.z), v.z);\n\t\t\t\t_BitScanReverse(reinterpret_cast<unsigned long*>(&Result.w), v.w);\n\t\t\t\treturn Result;\n\t\t\t}\n\t\t};\n#\tendif//GLM_HAS_BITSCAN_WINDOWS\n}//namespace detail\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/matrix_access.hpp",
    "content": "/// @ref gtc_matrix_access\n/// @file glm/gtc/matrix_access.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_matrix_access GLM_GTC_matrix_access\n/// @ingroup gtc\n///\n/// Include <glm/gtc/matrix_access.hpp> to use the features of this extension.\n///\n/// Defines functions to access rows or columns of a matrix easily.\n\n#pragma once\n\n// Dependency:\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_matrix_access extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_matrix_access\n\t/// @{\n\n\t/// Get a specific row of a matrix.\n\t/// @see gtc_matrix_access\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL typename genType::row_type row(\n\t\tgenType const& m,\n\t\tlength_t index);\n\n\t/// Set a specific row to a matrix.\n\t/// @see gtc_matrix_access\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType row(\n\t\tgenType const& m,\n\t\tlength_t index,\n\t\ttypename genType::row_type const& x);\n\n\t/// Get a specific column of a matrix.\n\t/// @see gtc_matrix_access\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL typename genType::col_type column(\n\t\tgenType const& m,\n\t\tlength_t index);\n\n\t/// Set a specific column to a matrix.\n\t/// @see gtc_matrix_access\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType column(\n\t\tgenType const& m,\n\t\tlength_t index,\n\t\ttypename genType::col_type const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_access.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/matrix_access.inl",
    "content": "/// @ref gtc_matrix_access\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType row\n\t(\n\t\tgenType const& m,\n\t\tlength_t index,\n\t\ttypename genType::row_type const& x\n\t)\n\t{\n\t\tassert(index >= 0 && index < m[0].length());\n\n\t\tgenType Result = m;\n\t\tfor(length_t i = 0; i < m.length(); ++i)\n\t\t\tResult[i][index] = x[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER typename genType::row_type row\n\t(\n\t\tgenType const& m,\n\t\tlength_t index\n\t)\n\t{\n\t\tassert(index >= 0 && index < m[0].length());\n\n\t\ttypename genType::row_type Result(0);\n\t\tfor(length_t i = 0; i < m.length(); ++i)\n\t\t\tResult[i] = m[i][index];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType column\n\t(\n\t\tgenType const& m,\n\t\tlength_t index,\n\t\ttypename genType::col_type const& x\n\t)\n\t{\n\t\tassert(index >= 0 && index < m.length());\n\n\t\tgenType Result = m;\n\t\tResult[index] = x;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER typename genType::col_type column\n\t(\n\t\tgenType const& m,\n\t\tlength_t index\n\t)\n\t{\n\t\tassert(index >= 0 && index < m.length());\n\n\t\treturn m[index];\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/matrix_integer.hpp",
    "content": "/// @ref gtc_matrix_integer\n/// @file glm/gtc/matrix_integer.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_matrix_integer GLM_GTC_matrix_integer\n/// @ingroup gtc\n///\n/// Include <glm/gtc/matrix_integer.hpp> to use the features of this extension.\n///\n/// Defines a number of matrices with integer types.\n\n#pragma once\n\n// Dependency:\n#include \"../mat2x2.hpp\"\n#include \"../mat2x3.hpp\"\n#include \"../mat2x4.hpp\"\n#include \"../mat3x2.hpp\"\n#include \"../mat3x3.hpp\"\n#include \"../mat3x4.hpp\"\n#include \"../mat4x2.hpp\"\n#include \"../mat4x3.hpp\"\n#include \"../mat4x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_matrix_integer extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_matrix_integer\n\t/// @{\n\n\t/// High-qualifier signed integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, int, highp>\t\t\t\thighp_imat2;\n\n\t/// High-qualifier signed integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, int, highp>\t\t\t\thighp_imat3;\n\n\t/// High-qualifier signed integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, int, highp>\t\t\t\thighp_imat4;\n\n\t/// High-qualifier signed integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, int, highp>\t\t\t\thighp_imat2x2;\n\n\t/// High-qualifier signed integer 2x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 3, int, highp>\t\t\t\thighp_imat2x3;\n\n\t/// High-qualifier signed integer 2x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 4, int, highp>\t\t\t\thighp_imat2x4;\n\n\t/// High-qualifier signed integer 3x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 2, int, highp>\t\t\t\thighp_imat3x2;\n\n\t/// High-qualifier signed integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, int, highp>\t\t\t\thighp_imat3x3;\n\n\t/// High-qualifier signed integer 3x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 4, int, highp>\t\t\t\thighp_imat3x4;\n\n\t/// High-qualifier signed integer 4x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 2, int, highp>\t\t\t\thighp_imat4x2;\n\n\t/// High-qualifier signed integer 4x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 3, int, highp>\t\t\t\thighp_imat4x3;\n\n\t/// High-qualifier signed integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, int, highp>\t\t\t\thighp_imat4x4;\n\n\n\t/// Medium-qualifier signed integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, int, mediump>\t\t\tmediump_imat2;\n\n\t/// Medium-qualifier signed integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, int, mediump>\t\t\tmediump_imat3;\n\n\t/// Medium-qualifier signed integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, int, mediump>\t\t\tmediump_imat4;\n\n\n\t/// Medium-qualifier signed integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, int, mediump>\t\t\tmediump_imat2x2;\n\n\t/// Medium-qualifier signed integer 2x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 3, int, mediump>\t\t\tmediump_imat2x3;\n\n\t/// Medium-qualifier signed integer 2x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 4, int, mediump>\t\t\tmediump_imat2x4;\n\n\t/// Medium-qualifier signed integer 3x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 2, int, mediump>\t\t\tmediump_imat3x2;\n\n\t/// Medium-qualifier signed integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, int, mediump>\t\t\tmediump_imat3x3;\n\n\t/// Medium-qualifier signed integer 3x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 4, int, mediump>\t\t\tmediump_imat3x4;\n\n\t/// Medium-qualifier signed integer 4x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 2, int, mediump>\t\t\tmediump_imat4x2;\n\n\t/// Medium-qualifier signed integer 4x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 3, int, mediump>\t\t\tmediump_imat4x3;\n\n\t/// Medium-qualifier signed integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, int, mediump>\t\t\tmediump_imat4x4;\n\n\n\t/// Low-qualifier signed integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, int, lowp>\t\t\t\tlowp_imat2;\n\n\t/// Low-qualifier signed integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, int, lowp>\t\t\t\tlowp_imat3;\n\n\t/// Low-qualifier signed integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, int, lowp>\t\t\t\tlowp_imat4;\n\n\n\t/// Low-qualifier signed integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, int, lowp>\t\t\t\tlowp_imat2x2;\n\n\t/// Low-qualifier signed integer 2x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 3, int, lowp>\t\t\t\tlowp_imat2x3;\n\n\t/// Low-qualifier signed integer 2x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 4, int, lowp>\t\t\t\tlowp_imat2x4;\n\n\t/// Low-qualifier signed integer 3x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 2, int, lowp>\t\t\t\tlowp_imat3x2;\n\n\t/// Low-qualifier signed integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, int, lowp>\t\t\t\tlowp_imat3x3;\n\n\t/// Low-qualifier signed integer 3x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 4, int, lowp>\t\t\t\tlowp_imat3x4;\n\n\t/// Low-qualifier signed integer 4x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 2, int, lowp>\t\t\t\tlowp_imat4x2;\n\n\t/// Low-qualifier signed integer 4x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 3, int, lowp>\t\t\t\tlowp_imat4x3;\n\n\t/// Low-qualifier signed integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, int, lowp>\t\t\t\tlowp_imat4x4;\n\n\n\t/// High-qualifier unsigned integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, uint, highp>\t\t\t\thighp_umat2;\n\n\t/// High-qualifier unsigned integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, uint, highp>\t\t\t\thighp_umat3;\n\n\t/// High-qualifier unsigned integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, uint, highp>\t\t\t\thighp_umat4;\n\n\t/// High-qualifier unsigned integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, uint, highp>\t\t\t\thighp_umat2x2;\n\n\t/// High-qualifier unsigned integer 2x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 3, uint, highp>\t\t\t\thighp_umat2x3;\n\n\t/// High-qualifier unsigned integer 2x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 4, uint, highp>\t\t\t\thighp_umat2x4;\n\n\t/// High-qualifier unsigned integer 3x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 2, uint, highp>\t\t\t\thighp_umat3x2;\n\n\t/// High-qualifier unsigned integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, uint, highp>\t\t\t\thighp_umat3x3;\n\n\t/// High-qualifier unsigned integer 3x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 4, uint, highp>\t\t\t\thighp_umat3x4;\n\n\t/// High-qualifier unsigned integer 4x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 2, uint, highp>\t\t\t\thighp_umat4x2;\n\n\t/// High-qualifier unsigned integer 4x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 3, uint, highp>\t\t\t\thighp_umat4x3;\n\n\t/// High-qualifier unsigned integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, uint, highp>\t\t\t\thighp_umat4x4;\n\n\n\t/// Medium-qualifier unsigned integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, uint, mediump>\t\t\tmediump_umat2;\n\n\t/// Medium-qualifier unsigned integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, uint, mediump>\t\t\tmediump_umat3;\n\n\t/// Medium-qualifier unsigned integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, uint, mediump>\t\t\tmediump_umat4;\n\n\n\t/// Medium-qualifier unsigned integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, uint, mediump>\t\t\tmediump_umat2x2;\n\n\t/// Medium-qualifier unsigned integer 2x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 3, uint, mediump>\t\t\tmediump_umat2x3;\n\n\t/// Medium-qualifier unsigned integer 2x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 4, uint, mediump>\t\t\tmediump_umat2x4;\n\n\t/// Medium-qualifier unsigned integer 3x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 2, uint, mediump>\t\t\tmediump_umat3x2;\n\n\t/// Medium-qualifier unsigned integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, uint, mediump>\t\t\tmediump_umat3x3;\n\n\t/// Medium-qualifier unsigned integer 3x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 4, uint, mediump>\t\t\tmediump_umat3x4;\n\n\t/// Medium-qualifier unsigned integer 4x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 2, uint, mediump>\t\t\tmediump_umat4x2;\n\n\t/// Medium-qualifier unsigned integer 4x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 3, uint, mediump>\t\t\tmediump_umat4x3;\n\n\t/// Medium-qualifier unsigned integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, uint, mediump>\t\t\tmediump_umat4x4;\n\n\n\t/// Low-qualifier unsigned integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, uint, lowp>\t\t\t\tlowp_umat2;\n\n\t/// Low-qualifier unsigned integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, uint, lowp>\t\t\t\tlowp_umat3;\n\n\t/// Low-qualifier unsigned integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, uint, lowp>\t\t\t\tlowp_umat4;\n\n\n\t/// Low-qualifier unsigned integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, uint, lowp>\t\t\t\tlowp_umat2x2;\n\n\t/// Low-qualifier unsigned integer 2x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 3, uint, lowp>\t\t\t\tlowp_umat2x3;\n\n\t/// Low-qualifier unsigned integer 2x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 4, uint, lowp>\t\t\t\tlowp_umat2x4;\n\n\t/// Low-qualifier unsigned integer 3x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 2, uint, lowp>\t\t\t\tlowp_umat3x2;\n\n\t/// Low-qualifier unsigned integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, uint, lowp>\t\t\t\tlowp_umat3x3;\n\n\t/// Low-qualifier unsigned integer 3x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 4, uint, lowp>\t\t\t\tlowp_umat3x4;\n\n\t/// Low-qualifier unsigned integer 4x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 2, uint, lowp>\t\t\t\tlowp_umat4x2;\n\n\t/// Low-qualifier unsigned integer 4x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 3, uint, lowp>\t\t\t\tlowp_umat4x3;\n\n\t/// Low-qualifier unsigned integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, uint, lowp>\t\t\t\tlowp_umat4x4;\n\n\n\n\t/// Signed integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, int, defaultp>\t\t\t\timat2;\n\n\t/// Signed integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, int, defaultp>\t\t\t\timat3;\n\n\t/// Signed integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, int, defaultp>\t\t\t\timat4;\n\n\t/// Signed integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, int, defaultp>\t\t\t\timat2x2;\n\n\t/// Signed integer 2x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 3, int, defaultp>\t\t\t\timat2x3;\n\n\t/// Signed integer 2x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 4, int, defaultp>\t\t\t\timat2x4;\n\n\t/// Signed integer 3x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 2, int, defaultp>\t\t\t\timat3x2;\n\n\t/// Signed integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, int, defaultp>\t\t\t\timat3x3;\n\n\t/// Signed integer 3x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 4, int, defaultp>\t\t\t\timat3x4;\n\n\t/// Signed integer 4x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 2, int, defaultp>\t\t\t\timat4x2;\n\n\t/// Signed integer 4x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 3, int, defaultp>\t\t\t\timat4x3;\n\n\t/// Signed integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, int, defaultp>\t\t\t\timat4x4;\n\n\n\n\t/// Unsigned integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, uint, defaultp>\t\t\t\tumat2;\n\n\t/// Unsigned integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, uint, defaultp>\t\t\t\tumat3;\n\n\t/// Unsigned integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, uint, defaultp>\t\t\t\tumat4;\n\n\t/// Unsigned integer 2x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 2, uint, defaultp>\t\t\t\tumat2x2;\n\n\t/// Unsigned integer 2x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 3, uint, defaultp>\t\t\t\tumat2x3;\n\n\t/// Unsigned integer 2x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<2, 4, uint, defaultp>\t\t\t\tumat2x4;\n\n\t/// Unsigned integer 3x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 2, uint, defaultp>\t\t\t\tumat3x2;\n\n\t/// Unsigned integer 3x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 3, uint, defaultp>\t\t\t\tumat3x3;\n\n\t/// Unsigned integer 3x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<3, 4, uint, defaultp>\t\t\t\tumat3x4;\n\n\t/// Unsigned integer 4x2 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 2, uint, defaultp>\t\t\t\tumat4x2;\n\n\t/// Unsigned integer 4x3 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 3, uint, defaultp>\t\t\t\tumat4x3;\n\n\t/// Unsigned integer 4x4 matrix.\n\t/// @see gtc_matrix_integer\n\ttypedef mat<4, 4, uint, defaultp>\t\t\t\tumat4x4;\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/matrix_inverse.hpp",
    "content": "/// @ref gtc_matrix_inverse\n/// @file glm/gtc/matrix_inverse.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_matrix_inverse GLM_GTC_matrix_inverse\n/// @ingroup gtc\n///\n/// Include <glm/gtc/matrix_inverse.hpp> to use the features of this extension.\n///\n/// Defines additional matrix inverting functions.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../matrix.hpp\"\n#include \"../mat2x2.hpp\"\n#include \"../mat3x3.hpp\"\n#include \"../mat4x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_matrix_inverse extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_matrix_inverse\n\t/// @{\n\n\t/// Fast matrix inverse for affine matrix.\n\t///\n\t/// @param m Input matrix to invert.\n\t/// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly inaccurate.\n\t/// @see gtc_matrix_inverse\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType affineInverse(genType const& m);\n\n\t/// Compute the inverse transpose of a matrix.\n\t///\n\t/// @param m Input matrix to invert transpose.\n\t/// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly inaccurate.\n\t/// @see gtc_matrix_inverse\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType inverseTranspose(genType const& m);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_inverse.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/matrix_inverse.inl",
    "content": "/// @ref gtc_matrix_inverse\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> affineInverse(mat<3, 3, T, Q> const& m)\n\t{\n\t\tmat<2, 2, T, Q> const Inv(inverse(mat<2, 2, T, Q>(m)));\n\n\t\treturn mat<3, 3, T, Q>(\n\t\t\tvec<3, T, Q>(Inv[0], static_cast<T>(0)),\n\t\t\tvec<3, T, Q>(Inv[1], static_cast<T>(0)),\n\t\t\tvec<3, T, Q>(-Inv * vec<2, T, Q>(m[2]), static_cast<T>(1)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> affineInverse(mat<4, 4, T, Q> const& m)\n\t{\n\t\tmat<3, 3, T, Q> const Inv(inverse(mat<3, 3, T, Q>(m)));\n\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tvec<4, T, Q>(Inv[0], static_cast<T>(0)),\n\t\t\tvec<4, T, Q>(Inv[1], static_cast<T>(0)),\n\t\t\tvec<4, T, Q>(Inv[2], static_cast<T>(0)),\n\t\t\tvec<4, T, Q>(-Inv * vec<3, T, Q>(m[3]), static_cast<T>(1)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> inverseTranspose(mat<2, 2, T, Q> const& m)\n\t{\n\t\tT Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1];\n\n\t\tmat<2, 2, T, Q> Inverse(\n\t\t\t+ m[1][1] / Determinant,\n\t\t\t- m[0][1] / Determinant,\n\t\t\t- m[1][0] / Determinant,\n\t\t\t+ m[0][0] / Determinant);\n\n\t\treturn Inverse;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> inverseTranspose(mat<3, 3, T, Q> const& m)\n\t{\n\t\tT Determinant =\n\t\t\t+ m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1])\n\t\t\t- m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0])\n\t\t\t+ m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]);\n\n\t\tmat<3, 3, T, Q> Inverse;\n\t\tInverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]);\n\t\tInverse[0][1] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]);\n\t\tInverse[0][2] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]);\n\t\tInverse[1][0] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]);\n\t\tInverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]);\n\t\tInverse[1][2] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]);\n\t\tInverse[2][0] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]);\n\t\tInverse[2][1] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]);\n\t\tInverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]);\n\t\tInverse /= Determinant;\n\n\t\treturn Inverse;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> inverseTranspose(mat<4, 4, T, Q> const& m)\n\t{\n\t\tT SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\tT SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\tT SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\tT SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\tT SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\tT SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\tT SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];\n\t\tT SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];\n\t\tT SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];\n\t\tT SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];\n\t\tT SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];\n\t\tT SubFactor11 = m[1][0] * m[3][1] - m[3][0] * m[1][1];\n\t\tT SubFactor12 = m[1][2] * m[2][3] - m[2][2] * m[1][3];\n\t\tT SubFactor13 = m[1][1] * m[2][3] - m[2][1] * m[1][3];\n\t\tT SubFactor14 = m[1][1] * m[2][2] - m[2][1] * m[1][2];\n\t\tT SubFactor15 = m[1][0] * m[2][3] - m[2][0] * m[1][3];\n\t\tT SubFactor16 = m[1][0] * m[2][2] - m[2][0] * m[1][2];\n\t\tT SubFactor17 = m[1][0] * m[2][1] - m[2][0] * m[1][1];\n\n\t\tmat<4, 4, T, Q> Inverse;\n\t\tInverse[0][0] = + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02);\n\t\tInverse[0][1] = - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04);\n\t\tInverse[0][2] = + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05);\n\t\tInverse[0][3] = - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05);\n\n\t\tInverse[1][0] = - (m[0][1] * SubFactor00 - m[0][2] * SubFactor01 + m[0][3] * SubFactor02);\n\t\tInverse[1][1] = + (m[0][0] * SubFactor00 - m[0][2] * SubFactor03 + m[0][3] * SubFactor04);\n\t\tInverse[1][2] = - (m[0][0] * SubFactor01 - m[0][1] * SubFactor03 + m[0][3] * SubFactor05);\n\t\tInverse[1][3] = + (m[0][0] * SubFactor02 - m[0][1] * SubFactor04 + m[0][2] * SubFactor05);\n\n\t\tInverse[2][0] = + (m[0][1] * SubFactor06 - m[0][2] * SubFactor07 + m[0][3] * SubFactor08);\n\t\tInverse[2][1] = - (m[0][0] * SubFactor06 - m[0][2] * SubFactor09 + m[0][3] * SubFactor10);\n\t\tInverse[2][2] = + (m[0][0] * SubFactor07 - m[0][1] * SubFactor09 + m[0][3] * SubFactor11);\n\t\tInverse[2][3] = - (m[0][0] * SubFactor08 - m[0][1] * SubFactor10 + m[0][2] * SubFactor11);\n\n\t\tInverse[3][0] = - (m[0][1] * SubFactor12 - m[0][2] * SubFactor13 + m[0][3] * SubFactor14);\n\t\tInverse[3][1] = + (m[0][0] * SubFactor12 - m[0][2] * SubFactor15 + m[0][3] * SubFactor16);\n\t\tInverse[3][2] = - (m[0][0] * SubFactor13 - m[0][1] * SubFactor15 + m[0][3] * SubFactor17);\n\t\tInverse[3][3] = + (m[0][0] * SubFactor14 - m[0][1] * SubFactor16 + m[0][2] * SubFactor17);\n\n\t\tT Determinant =\n\t\t\t+ m[0][0] * Inverse[0][0]\n\t\t\t+ m[0][1] * Inverse[0][1]\n\t\t\t+ m[0][2] * Inverse[0][2]\n\t\t\t+ m[0][3] * Inverse[0][3];\n\n\t\tInverse /= Determinant;\n\n\t\treturn Inverse;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/matrix_transform.hpp",
    "content": "/// @ref gtc_matrix_transform\n/// @file glm/gtc/matrix_transform.hpp\n///\n/// @see core (dependence)\n/// @see gtx_transform\n/// @see gtx_transform2\n///\n/// @defgroup gtc_matrix_transform GLM_GTC_matrix_transform\n/// @ingroup gtc\n///\n/// Include <glm/gtc/matrix_transform.hpp> to use the features of this extension.\n///\n/// Defines functions that generate common transformation matrices.\n///\n/// The matrices generated by this extension use standard OpenGL fixed-function\n/// conventions. For example, the lookAt function generates a transform from world\n/// space into the specific eye space that the projective matrix functions\n/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility\n/// specifications defines the particular layout of this eye space.\n\n#pragma once\n\n// Dependencies\n#include \"../mat4x4.hpp\"\n#include \"../vec2.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n#include \"../ext/matrix_projection.hpp\"\n#include \"../ext/matrix_clip_space.hpp\"\n#include \"../ext/matrix_transform.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_matrix_transform extension included\")\n#endif\n\n#include \"matrix_transform.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/matrix_transform.inl",
    "content": "#include \"../geometric.hpp\"\n#include \"../trigonometric.hpp\"\n#include \"../matrix.hpp\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/noise.hpp",
    "content": "/// @ref gtc_noise\n/// @file glm/gtc/noise.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_noise GLM_GTC_noise\n/// @ingroup gtc\n///\n/// Include <glm/gtc/noise.hpp> to use the features of this extension.\n///\n/// Defines 2D, 3D and 4D procedural noise functions\n/// Based on the work of Stefan Gustavson and Ashima Arts on \"webgl-noise\":\n/// https://github.com/ashima/webgl-noise\n/// Following Stefan Gustavson's paper \"Simplex noise demystified\":\n/// http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/_noise.hpp\"\n#include \"../geometric.hpp\"\n#include \"../common.hpp\"\n#include \"../vector_relational.hpp\"\n#include \"../vec2.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_noise extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_noise\n\t/// @{\n\n\t/// Classic perlin noise.\n\t/// @see gtc_noise\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T perlin(\n\t\tvec<L, T, Q> const& p);\n\n\t/// Periodic perlin noise.\n\t/// @see gtc_noise\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T perlin(\n\t\tvec<L, T, Q> const& p,\n\t\tvec<L, T, Q> const& rep);\n\n\t/// Simplex noise.\n\t/// @see gtc_noise\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T simplex(\n\t\tvec<L, T, Q> const& p);\n\n\t/// @}\n}//namespace glm\n\n#include \"noise.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/noise.inl",
    "content": "/// @ref gtc_noise\n///\n// Based on the work of Stefan Gustavson and Ashima Arts on \"webgl-noise\":\n// https://github.com/ashima/webgl-noise\n// Following Stefan Gustavson's paper \"Simplex noise demystified\":\n// http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf\n\nnamespace glm{\nnamespace gtc\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> grad4(T const& j, vec<4, T, Q> const& ip)\n\t{\n\t\tvec<3, T, Q> pXYZ = floor(fract(vec<3, T, Q>(j) * vec<3, T, Q>(ip)) * T(7)) * ip[2] - T(1);\n\t\tT pW = static_cast<T>(1.5) - dot(abs(pXYZ), vec<3, T, Q>(1));\n\t\tvec<4, T, Q> s = vec<4, T, Q>(lessThan(vec<4, T, Q>(pXYZ, pW), vec<4, T, Q>(0.0)));\n\t\tpXYZ = pXYZ + (vec<3, T, Q>(s) * T(2) - T(1)) * s.w;\n\t\treturn vec<4, T, Q>(pXYZ, pW);\n\t}\n}//namespace gtc\n\n\t// Classic Perlin noise\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T perlin(vec<2, T, Q> const& Position)\n\t{\n\t\tvec<4, T, Q> Pi = glm::floor(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) + vec<4, T, Q>(0.0, 0.0, 1.0, 1.0);\n\t\tvec<4, T, Q> Pf = glm::fract(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) - vec<4, T, Q>(0.0, 0.0, 1.0, 1.0);\n\t\tPi = mod(Pi, vec<4, T, Q>(289)); // To avoid truncation effects in permutation\n\t\tvec<4, T, Q> ix(Pi.x, Pi.z, Pi.x, Pi.z);\n\t\tvec<4, T, Q> iy(Pi.y, Pi.y, Pi.w, Pi.w);\n\t\tvec<4, T, Q> fx(Pf.x, Pf.z, Pf.x, Pf.z);\n\t\tvec<4, T, Q> fy(Pf.y, Pf.y, Pf.w, Pf.w);\n\n\t\tvec<4, T, Q> i = detail::permute(detail::permute(ix) + iy);\n\n\t\tvec<4, T, Q> gx = static_cast<T>(2) * glm::fract(i / T(41)) - T(1);\n\t\tvec<4, T, Q> gy = glm::abs(gx) - T(0.5);\n\t\tvec<4, T, Q> tx = glm::floor(gx + T(0.5));\n\t\tgx = gx - tx;\n\n\t\tvec<2, T, Q> g00(gx.x, gy.x);\n\t\tvec<2, T, Q> g10(gx.y, gy.y);\n\t\tvec<2, T, Q> g01(gx.z, gy.z);\n\t\tvec<2, T, Q> g11(gx.w, gy.w);\n\n\t\tvec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11)));\n\t\tg00 *= norm.x;\n\t\tg01 *= norm.y;\n\t\tg10 *= norm.z;\n\t\tg11 *= norm.w;\n\n\t\tT n00 = dot(g00, vec<2, T, Q>(fx.x, fy.x));\n\t\tT n10 = dot(g10, vec<2, T, Q>(fx.y, fy.y));\n\t\tT n01 = dot(g01, vec<2, T, Q>(fx.z, fy.z));\n\t\tT n11 = dot(g11, vec<2, T, Q>(fx.w, fy.w));\n\n\t\tvec<2, T, Q> fade_xy = detail::fade(vec<2, T, Q>(Pf.x, Pf.y));\n\t\tvec<2, T, Q> n_x = mix(vec<2, T, Q>(n00, n01), vec<2, T, Q>(n10, n11), fade_xy.x);\n\t\tT n_xy = mix(n_x.x, n_x.y, fade_xy.y);\n\t\treturn T(2.3) * n_xy;\n\t}\n\n\t// Classic Perlin noise\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& Position)\n\t{\n\t\tvec<3, T, Q> Pi0 = floor(Position); // Integer part for indexing\n\t\tvec<3, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1\n\t\tPi0 = detail::mod289(Pi0);\n\t\tPi1 = detail::mod289(Pi1);\n\t\tvec<3, T, Q> Pf0 = fract(Position); // Fractional part for interpolation\n\t\tvec<3, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0\n\t\tvec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n\t\tvec<4, T, Q> iy = vec<4, T, Q>(vec<2, T, Q>(Pi0.y), vec<2, T, Q>(Pi1.y));\n\t\tvec<4, T, Q> iz0(Pi0.z);\n\t\tvec<4, T, Q> iz1(Pi1.z);\n\n\t\tvec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy);\n\t\tvec<4, T, Q> ixy0 = detail::permute(ixy + iz0);\n\t\tvec<4, T, Q> ixy1 = detail::permute(ixy + iz1);\n\n\t\tvec<4, T, Q> gx0 = ixy0 * T(1.0 / 7.0);\n\t\tvec<4, T, Q> gy0 = fract(floor(gx0) * T(1.0 / 7.0)) - T(0.5);\n\t\tgx0 = fract(gx0);\n\t\tvec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0);\n\t\tvec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0.0));\n\t\tgx0 -= sz0 * (step(T(0), gx0) - T(0.5));\n\t\tgy0 -= sz0 * (step(T(0), gy0) - T(0.5));\n\n\t\tvec<4, T, Q> gx1 = ixy1 * T(1.0 / 7.0);\n\t\tvec<4, T, Q> gy1 = fract(floor(gx1) * T(1.0 / 7.0)) - T(0.5);\n\t\tgx1 = fract(gx1);\n\t\tvec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1);\n\t\tvec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(0.0));\n\t\tgx1 -= sz1 * (step(T(0), gx1) - T(0.5));\n\t\tgy1 -= sz1 * (step(T(0), gy1) - T(0.5));\n\n\t\tvec<3, T, Q> g000(gx0.x, gy0.x, gz0.x);\n\t\tvec<3, T, Q> g100(gx0.y, gy0.y, gz0.y);\n\t\tvec<3, T, Q> g010(gx0.z, gy0.z, gz0.z);\n\t\tvec<3, T, Q> g110(gx0.w, gy0.w, gz0.w);\n\t\tvec<3, T, Q> g001(gx1.x, gy1.x, gz1.x);\n\t\tvec<3, T, Q> g101(gx1.y, gy1.y, gz1.y);\n\t\tvec<3, T, Q> g011(gx1.z, gy1.z, gz1.z);\n\t\tvec<3, T, Q> g111(gx1.w, gy1.w, gz1.w);\n\n\t\tvec<4, T, Q> norm0 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\n\t\tg000 *= norm0.x;\n\t\tg010 *= norm0.y;\n\t\tg100 *= norm0.z;\n\t\tg110 *= norm0.w;\n\t\tvec<4, T, Q> norm1 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\n\t\tg001 *= norm1.x;\n\t\tg011 *= norm1.y;\n\t\tg101 *= norm1.z;\n\t\tg111 *= norm1.w;\n\n\t\tT n000 = dot(g000, Pf0);\n\t\tT n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z));\n\t\tT n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z));\n\t\tT n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z));\n\t\tT n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z));\n\t\tT n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z));\n\t\tT n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z));\n\t\tT n111 = dot(g111, Pf1);\n\n\t\tvec<3, T, Q> fade_xyz = detail::fade(Pf0);\n\t\tvec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z);\n\t\tvec<2, T, Q> n_yz = mix(vec<2, T, Q>(n_z.x, n_z.y), vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y);\n\t\tT n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);\n\t\treturn T(2.2) * n_xyz;\n\t}\n\t/*\n\t// Classic Perlin noise\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& P)\n\t{\n\t\tvec<3, T, Q> Pi0 = floor(P); // Integer part for indexing\n\t\tvec<3, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1\n\t\tPi0 = mod(Pi0, T(289));\n\t\tPi1 = mod(Pi1, T(289));\n\t\tvec<3, T, Q> Pf0 = fract(P); // Fractional part for interpolation\n\t\tvec<3, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0\n\t\tvec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n\t\tvec<4, T, Q> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y);\n\t\tvec<4, T, Q> iz0(Pi0.z);\n\t\tvec<4, T, Q> iz1(Pi1.z);\n\n\t\tvec<4, T, Q> ixy = permute(permute(ix) + iy);\n\t\tvec<4, T, Q> ixy0 = permute(ixy + iz0);\n\t\tvec<4, T, Q> ixy1 = permute(ixy + iz1);\n\n\t\tvec<4, T, Q> gx0 = ixy0 / T(7);\n\t\tvec<4, T, Q> gy0 = fract(floor(gx0) / T(7)) - T(0.5);\n\t\tgx0 = fract(gx0);\n\t\tvec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0);\n\t\tvec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0.0));\n\t\tgx0 -= sz0 * (step(0.0, gx0) - T(0.5));\n\t\tgy0 -= sz0 * (step(0.0, gy0) - T(0.5));\n\n\t\tvec<4, T, Q> gx1 = ixy1 / T(7);\n\t\tvec<4, T, Q> gy1 = fract(floor(gx1) / T(7)) - T(0.5);\n\t\tgx1 = fract(gx1);\n\t\tvec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1);\n\t\tvec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(0.0));\n\t\tgx1 -= sz1 * (step(T(0), gx1) - T(0.5));\n\t\tgy1 -= sz1 * (step(T(0), gy1) - T(0.5));\n\n\t\tvec<3, T, Q> g000(gx0.x, gy0.x, gz0.x);\n\t\tvec<3, T, Q> g100(gx0.y, gy0.y, gz0.y);\n\t\tvec<3, T, Q> g010(gx0.z, gy0.z, gz0.z);\n\t\tvec<3, T, Q> g110(gx0.w, gy0.w, gz0.w);\n\t\tvec<3, T, Q> g001(gx1.x, gy1.x, gz1.x);\n\t\tvec<3, T, Q> g101(gx1.y, gy1.y, gz1.y);\n\t\tvec<3, T, Q> g011(gx1.z, gy1.z, gz1.z);\n\t\tvec<3, T, Q> g111(gx1.w, gy1.w, gz1.w);\n\n\t\tvec<4, T, Q> norm0 = taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\n\t\tg000 *= norm0.x;\n\t\tg010 *= norm0.y;\n\t\tg100 *= norm0.z;\n\t\tg110 *= norm0.w;\n\t\tvec<4, T, Q> norm1 = taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\n\t\tg001 *= norm1.x;\n\t\tg011 *= norm1.y;\n\t\tg101 *= norm1.z;\n\t\tg111 *= norm1.w;\n\n\t\tT n000 = dot(g000, Pf0);\n\t\tT n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z));\n\t\tT n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z));\n\t\tT n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z));\n\t\tT n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z));\n\t\tT n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z));\n\t\tT n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z));\n\t\tT n111 = dot(g111, Pf1);\n\n\t\tvec<3, T, Q> fade_xyz = fade(Pf0);\n\t\tvec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z);\n\t\tvec<2, T, Q> n_yz = mix(\n\t\t\tvec<2, T, Q>(n_z.x, n_z.y),\n\t\t\tvec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y);\n\t\tT n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);\n\t\treturn T(2.2) * n_xyz;\n\t}\n\t*/\n\t// Classic Perlin noise\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T perlin(vec<4, T, Q> const& Position)\n\t{\n\t\tvec<4, T, Q> Pi0 = floor(Position);\t// Integer part for indexing\n\t\tvec<4, T, Q> Pi1 = Pi0 + T(1);\t\t// Integer part + 1\n\t\tPi0 = mod(Pi0, vec<4, T, Q>(289));\n\t\tPi1 = mod(Pi1, vec<4, T, Q>(289));\n\t\tvec<4, T, Q> Pf0 = fract(Position);\t// Fractional part for interpolation\n\t\tvec<4, T, Q> Pf1 = Pf0 - T(1);\t\t// Fractional part - 1.0\n\t\tvec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n\t\tvec<4, T, Q> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y);\n\t\tvec<4, T, Q> iz0(Pi0.z);\n\t\tvec<4, T, Q> iz1(Pi1.z);\n\t\tvec<4, T, Q> iw0(Pi0.w);\n\t\tvec<4, T, Q> iw1(Pi1.w);\n\n\t\tvec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy);\n\t\tvec<4, T, Q> ixy0 = detail::permute(ixy + iz0);\n\t\tvec<4, T, Q> ixy1 = detail::permute(ixy + iz1);\n\t\tvec<4, T, Q> ixy00 = detail::permute(ixy0 + iw0);\n\t\tvec<4, T, Q> ixy01 = detail::permute(ixy0 + iw1);\n\t\tvec<4, T, Q> ixy10 = detail::permute(ixy1 + iw0);\n\t\tvec<4, T, Q> ixy11 = detail::permute(ixy1 + iw1);\n\n\t\tvec<4, T, Q> gx00 = ixy00 / T(7);\n\t\tvec<4, T, Q> gy00 = floor(gx00) / T(7);\n\t\tvec<4, T, Q> gz00 = floor(gy00) / T(6);\n\t\tgx00 = fract(gx00) - T(0.5);\n\t\tgy00 = fract(gy00) - T(0.5);\n\t\tgz00 = fract(gz00) - T(0.5);\n\t\tvec<4, T, Q> gw00 = vec<4, T, Q>(0.75) - abs(gx00) - abs(gy00) - abs(gz00);\n\t\tvec<4, T, Q> sw00 = step(gw00, vec<4, T, Q>(0.0));\n\t\tgx00 -= sw00 * (step(T(0), gx00) - T(0.5));\n\t\tgy00 -= sw00 * (step(T(0), gy00) - T(0.5));\n\n\t\tvec<4, T, Q> gx01 = ixy01 / T(7);\n\t\tvec<4, T, Q> gy01 = floor(gx01) / T(7);\n\t\tvec<4, T, Q> gz01 = floor(gy01) / T(6);\n\t\tgx01 = fract(gx01) - T(0.5);\n\t\tgy01 = fract(gy01) - T(0.5);\n\t\tgz01 = fract(gz01) - T(0.5);\n\t\tvec<4, T, Q> gw01 = vec<4, T, Q>(0.75) - abs(gx01) - abs(gy01) - abs(gz01);\n\t\tvec<4, T, Q> sw01 = step(gw01, vec<4, T, Q>(0.0));\n\t\tgx01 -= sw01 * (step(T(0), gx01) - T(0.5));\n\t\tgy01 -= sw01 * (step(T(0), gy01) - T(0.5));\n\n\t\tvec<4, T, Q> gx10 = ixy10 / T(7);\n\t\tvec<4, T, Q> gy10 = floor(gx10) / T(7);\n\t\tvec<4, T, Q> gz10 = floor(gy10) / T(6);\n\t\tgx10 = fract(gx10) - T(0.5);\n\t\tgy10 = fract(gy10) - T(0.5);\n\t\tgz10 = fract(gz10) - T(0.5);\n\t\tvec<4, T, Q> gw10 = vec<4, T, Q>(0.75) - abs(gx10) - abs(gy10) - abs(gz10);\n\t\tvec<4, T, Q> sw10 = step(gw10, vec<4, T, Q>(0));\n\t\tgx10 -= sw10 * (step(T(0), gx10) - T(0.5));\n\t\tgy10 -= sw10 * (step(T(0), gy10) - T(0.5));\n\n\t\tvec<4, T, Q> gx11 = ixy11 / T(7);\n\t\tvec<4, T, Q> gy11 = floor(gx11) / T(7);\n\t\tvec<4, T, Q> gz11 = floor(gy11) / T(6);\n\t\tgx11 = fract(gx11) - T(0.5);\n\t\tgy11 = fract(gy11) - T(0.5);\n\t\tgz11 = fract(gz11) - T(0.5);\n\t\tvec<4, T, Q> gw11 = vec<4, T, Q>(0.75) - abs(gx11) - abs(gy11) - abs(gz11);\n\t\tvec<4, T, Q> sw11 = step(gw11, vec<4, T, Q>(0.0));\n\t\tgx11 -= sw11 * (step(T(0), gx11) - T(0.5));\n\t\tgy11 -= sw11 * (step(T(0), gy11) - T(0.5));\n\n\t\tvec<4, T, Q> g0000(gx00.x, gy00.x, gz00.x, gw00.x);\n\t\tvec<4, T, Q> g1000(gx00.y, gy00.y, gz00.y, gw00.y);\n\t\tvec<4, T, Q> g0100(gx00.z, gy00.z, gz00.z, gw00.z);\n\t\tvec<4, T, Q> g1100(gx00.w, gy00.w, gz00.w, gw00.w);\n\t\tvec<4, T, Q> g0010(gx10.x, gy10.x, gz10.x, gw10.x);\n\t\tvec<4, T, Q> g1010(gx10.y, gy10.y, gz10.y, gw10.y);\n\t\tvec<4, T, Q> g0110(gx10.z, gy10.z, gz10.z, gw10.z);\n\t\tvec<4, T, Q> g1110(gx10.w, gy10.w, gz10.w, gw10.w);\n\t\tvec<4, T, Q> g0001(gx01.x, gy01.x, gz01.x, gw01.x);\n\t\tvec<4, T, Q> g1001(gx01.y, gy01.y, gz01.y, gw01.y);\n\t\tvec<4, T, Q> g0101(gx01.z, gy01.z, gz01.z, gw01.z);\n\t\tvec<4, T, Q> g1101(gx01.w, gy01.w, gz01.w, gw01.w);\n\t\tvec<4, T, Q> g0011(gx11.x, gy11.x, gz11.x, gw11.x);\n\t\tvec<4, T, Q> g1011(gx11.y, gy11.y, gz11.y, gw11.y);\n\t\tvec<4, T, Q> g0111(gx11.z, gy11.z, gz11.z, gw11.z);\n\t\tvec<4, T, Q> g1111(gx11.w, gy11.w, gz11.w, gw11.w);\n\n\t\tvec<4, T, Q> norm00 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100)));\n\t\tg0000 *= norm00.x;\n\t\tg0100 *= norm00.y;\n\t\tg1000 *= norm00.z;\n\t\tg1100 *= norm00.w;\n\n\t\tvec<4, T, Q> norm01 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101)));\n\t\tg0001 *= norm01.x;\n\t\tg0101 *= norm01.y;\n\t\tg1001 *= norm01.z;\n\t\tg1101 *= norm01.w;\n\n\t\tvec<4, T, Q> norm10 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110)));\n\t\tg0010 *= norm10.x;\n\t\tg0110 *= norm10.y;\n\t\tg1010 *= norm10.z;\n\t\tg1110 *= norm10.w;\n\n\t\tvec<4, T, Q> norm11 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111)));\n\t\tg0011 *= norm11.x;\n\t\tg0111 *= norm11.y;\n\t\tg1011 *= norm11.z;\n\t\tg1111 *= norm11.w;\n\n\t\tT n0000 = dot(g0000, Pf0);\n\t\tT n1000 = dot(g1000, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf0.w));\n\t\tT n0100 = dot(g0100, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf0.w));\n\t\tT n1100 = dot(g1100, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf0.w));\n\t\tT n0010 = dot(g0010, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf0.w));\n\t\tT n1010 = dot(g1010, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf0.w));\n\t\tT n0110 = dot(g0110, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf0.w));\n\t\tT n1110 = dot(g1110, vec<4, T, Q>(Pf1.x, Pf1.y, Pf1.z, Pf0.w));\n\t\tT n0001 = dot(g0001, vec<4, T, Q>(Pf0.x, Pf0.y, Pf0.z, Pf1.w));\n\t\tT n1001 = dot(g1001, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf1.w));\n\t\tT n0101 = dot(g0101, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf1.w));\n\t\tT n1101 = dot(g1101, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf1.w));\n\t\tT n0011 = dot(g0011, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf1.w));\n\t\tT n1011 = dot(g1011, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf1.w));\n\t\tT n0111 = dot(g0111, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf1.w));\n\t\tT n1111 = dot(g1111, Pf1);\n\n\t\tvec<4, T, Q> fade_xyzw = detail::fade(Pf0);\n\t\tvec<4, T, Q> n_0w = mix(vec<4, T, Q>(n0000, n1000, n0100, n1100), vec<4, T, Q>(n0001, n1001, n0101, n1101), fade_xyzw.w);\n\t\tvec<4, T, Q> n_1w = mix(vec<4, T, Q>(n0010, n1010, n0110, n1110), vec<4, T, Q>(n0011, n1011, n0111, n1111), fade_xyzw.w);\n\t\tvec<4, T, Q> n_zw = mix(n_0w, n_1w, fade_xyzw.z);\n\t\tvec<2, T, Q> n_yzw = mix(vec<2, T, Q>(n_zw.x, n_zw.y), vec<2, T, Q>(n_zw.z, n_zw.w), fade_xyzw.y);\n\t\tT n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x);\n\t\treturn T(2.2) * n_xyzw;\n\t}\n\n\t// Classic Perlin noise, periodic variant\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T perlin(vec<2, T, Q> const& Position, vec<2, T, Q> const& rep)\n\t{\n\t\tvec<4, T, Q> Pi = floor(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) + vec<4, T, Q>(0.0, 0.0, 1.0, 1.0);\n\t\tvec<4, T, Q> Pf = fract(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) - vec<4, T, Q>(0.0, 0.0, 1.0, 1.0);\n\t\tPi = mod(Pi, vec<4, T, Q>(rep.x, rep.y, rep.x, rep.y)); // To create noise with explicit period\n\t\tPi = mod(Pi, vec<4, T, Q>(289)); // To avoid truncation effects in permutation\n\t\tvec<4, T, Q> ix(Pi.x, Pi.z, Pi.x, Pi.z);\n\t\tvec<4, T, Q> iy(Pi.y, Pi.y, Pi.w, Pi.w);\n\t\tvec<4, T, Q> fx(Pf.x, Pf.z, Pf.x, Pf.z);\n\t\tvec<4, T, Q> fy(Pf.y, Pf.y, Pf.w, Pf.w);\n\n\t\tvec<4, T, Q> i = detail::permute(detail::permute(ix) + iy);\n\n\t\tvec<4, T, Q> gx = static_cast<T>(2) * fract(i / T(41)) - T(1);\n\t\tvec<4, T, Q> gy = abs(gx) - T(0.5);\n\t\tvec<4, T, Q> tx = floor(gx + T(0.5));\n\t\tgx = gx - tx;\n\n\t\tvec<2, T, Q> g00(gx.x, gy.x);\n\t\tvec<2, T, Q> g10(gx.y, gy.y);\n\t\tvec<2, T, Q> g01(gx.z, gy.z);\n\t\tvec<2, T, Q> g11(gx.w, gy.w);\n\n\t\tvec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11)));\n\t\tg00 *= norm.x;\n\t\tg01 *= norm.y;\n\t\tg10 *= norm.z;\n\t\tg11 *= norm.w;\n\n\t\tT n00 = dot(g00, vec<2, T, Q>(fx.x, fy.x));\n\t\tT n10 = dot(g10, vec<2, T, Q>(fx.y, fy.y));\n\t\tT n01 = dot(g01, vec<2, T, Q>(fx.z, fy.z));\n\t\tT n11 = dot(g11, vec<2, T, Q>(fx.w, fy.w));\n\n\t\tvec<2, T, Q> fade_xy = detail::fade(vec<2, T, Q>(Pf.x, Pf.y));\n\t\tvec<2, T, Q> n_x = mix(vec<2, T, Q>(n00, n01), vec<2, T, Q>(n10, n11), fade_xy.x);\n\t\tT n_xy = mix(n_x.x, n_x.y, fade_xy.y);\n\t\treturn T(2.3) * n_xy;\n\t}\n\n\t// Classic Perlin noise, periodic variant\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& Position, vec<3, T, Q> const& rep)\n\t{\n\t\tvec<3, T, Q> Pi0 = mod(floor(Position), rep); // Integer part, modulo period\n\t\tvec<3, T, Q> Pi1 = mod(Pi0 + vec<3, T, Q>(T(1)), rep); // Integer part + 1, mod period\n\t\tPi0 = mod(Pi0, vec<3, T, Q>(289));\n\t\tPi1 = mod(Pi1, vec<3, T, Q>(289));\n\t\tvec<3, T, Q> Pf0 = fract(Position); // Fractional part for interpolation\n\t\tvec<3, T, Q> Pf1 = Pf0 - vec<3, T, Q>(T(1)); // Fractional part - 1.0\n\t\tvec<4, T, Q> ix = vec<4, T, Q>(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n\t\tvec<4, T, Q> iy = vec<4, T, Q>(Pi0.y, Pi0.y, Pi1.y, Pi1.y);\n\t\tvec<4, T, Q> iz0(Pi0.z);\n\t\tvec<4, T, Q> iz1(Pi1.z);\n\n\t\tvec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy);\n\t\tvec<4, T, Q> ixy0 = detail::permute(ixy + iz0);\n\t\tvec<4, T, Q> ixy1 = detail::permute(ixy + iz1);\n\n\t\tvec<4, T, Q> gx0 = ixy0 / T(7);\n\t\tvec<4, T, Q> gy0 = fract(floor(gx0) / T(7)) - T(0.5);\n\t\tgx0 = fract(gx0);\n\t\tvec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0);\n\t\tvec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0));\n\t\tgx0 -= sz0 * (step(T(0), gx0) - T(0.5));\n\t\tgy0 -= sz0 * (step(T(0), gy0) - T(0.5));\n\n\t\tvec<4, T, Q> gx1 = ixy1 / T(7);\n\t\tvec<4, T, Q> gy1 = fract(floor(gx1) / T(7)) - T(0.5);\n\t\tgx1 = fract(gx1);\n\t\tvec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1);\n\t\tvec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(T(0)));\n\t\tgx1 -= sz1 * (step(T(0), gx1) - T(0.5));\n\t\tgy1 -= sz1 * (step(T(0), gy1) - T(0.5));\n\n\t\tvec<3, T, Q> g000 = vec<3, T, Q>(gx0.x, gy0.x, gz0.x);\n\t\tvec<3, T, Q> g100 = vec<3, T, Q>(gx0.y, gy0.y, gz0.y);\n\t\tvec<3, T, Q> g010 = vec<3, T, Q>(gx0.z, gy0.z, gz0.z);\n\t\tvec<3, T, Q> g110 = vec<3, T, Q>(gx0.w, gy0.w, gz0.w);\n\t\tvec<3, T, Q> g001 = vec<3, T, Q>(gx1.x, gy1.x, gz1.x);\n\t\tvec<3, T, Q> g101 = vec<3, T, Q>(gx1.y, gy1.y, gz1.y);\n\t\tvec<3, T, Q> g011 = vec<3, T, Q>(gx1.z, gy1.z, gz1.z);\n\t\tvec<3, T, Q> g111 = vec<3, T, Q>(gx1.w, gy1.w, gz1.w);\n\n\t\tvec<4, T, Q> norm0 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));\n\t\tg000 *= norm0.x;\n\t\tg010 *= norm0.y;\n\t\tg100 *= norm0.z;\n\t\tg110 *= norm0.w;\n\t\tvec<4, T, Q> norm1 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));\n\t\tg001 *= norm1.x;\n\t\tg011 *= norm1.y;\n\t\tg101 *= norm1.z;\n\t\tg111 *= norm1.w;\n\n\t\tT n000 = dot(g000, Pf0);\n\t\tT n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z));\n\t\tT n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z));\n\t\tT n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z));\n\t\tT n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z));\n\t\tT n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z));\n\t\tT n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z));\n\t\tT n111 = dot(g111, Pf1);\n\n\t\tvec<3, T, Q> fade_xyz = detail::fade(Pf0);\n\t\tvec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z);\n\t\tvec<2, T, Q> n_yz = mix(vec<2, T, Q>(n_z.x, n_z.y), vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y);\n\t\tT n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);\n\t\treturn T(2.2) * n_xyz;\n\t}\n\n\t// Classic Perlin noise, periodic version\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T perlin(vec<4, T, Q> const& Position, vec<4, T, Q> const& rep)\n\t{\n\t\tvec<4, T, Q> Pi0 = mod(floor(Position), rep); // Integer part modulo rep\n\t\tvec<4, T, Q> Pi1 = mod(Pi0 + T(1), rep); // Integer part + 1 mod rep\n\t\tvec<4, T, Q> Pf0 = fract(Position); // Fractional part for interpolation\n\t\tvec<4, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0\n\t\tvec<4, T, Q> ix = vec<4, T, Q>(Pi0.x, Pi1.x, Pi0.x, Pi1.x);\n\t\tvec<4, T, Q> iy = vec<4, T, Q>(Pi0.y, Pi0.y, Pi1.y, Pi1.y);\n\t\tvec<4, T, Q> iz0(Pi0.z);\n\t\tvec<4, T, Q> iz1(Pi1.z);\n\t\tvec<4, T, Q> iw0(Pi0.w);\n\t\tvec<4, T, Q> iw1(Pi1.w);\n\n\t\tvec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy);\n\t\tvec<4, T, Q> ixy0 = detail::permute(ixy + iz0);\n\t\tvec<4, T, Q> ixy1 = detail::permute(ixy + iz1);\n\t\tvec<4, T, Q> ixy00 = detail::permute(ixy0 + iw0);\n\t\tvec<4, T, Q> ixy01 = detail::permute(ixy0 + iw1);\n\t\tvec<4, T, Q> ixy10 = detail::permute(ixy1 + iw0);\n\t\tvec<4, T, Q> ixy11 = detail::permute(ixy1 + iw1);\n\n\t\tvec<4, T, Q> gx00 = ixy00 / T(7);\n\t\tvec<4, T, Q> gy00 = floor(gx00) / T(7);\n\t\tvec<4, T, Q> gz00 = floor(gy00) / T(6);\n\t\tgx00 = fract(gx00) - T(0.5);\n\t\tgy00 = fract(gy00) - T(0.5);\n\t\tgz00 = fract(gz00) - T(0.5);\n\t\tvec<4, T, Q> gw00 = vec<4, T, Q>(0.75) - abs(gx00) - abs(gy00) - abs(gz00);\n\t\tvec<4, T, Q> sw00 = step(gw00, vec<4, T, Q>(0));\n\t\tgx00 -= sw00 * (step(T(0), gx00) - T(0.5));\n\t\tgy00 -= sw00 * (step(T(0), gy00) - T(0.5));\n\n\t\tvec<4, T, Q> gx01 = ixy01 / T(7);\n\t\tvec<4, T, Q> gy01 = floor(gx01) / T(7);\n\t\tvec<4, T, Q> gz01 = floor(gy01) / T(6);\n\t\tgx01 = fract(gx01) - T(0.5);\n\t\tgy01 = fract(gy01) - T(0.5);\n\t\tgz01 = fract(gz01) - T(0.5);\n\t\tvec<4, T, Q> gw01 = vec<4, T, Q>(0.75) - abs(gx01) - abs(gy01) - abs(gz01);\n\t\tvec<4, T, Q> sw01 = step(gw01, vec<4, T, Q>(0.0));\n\t\tgx01 -= sw01 * (step(T(0), gx01) - T(0.5));\n\t\tgy01 -= sw01 * (step(T(0), gy01) - T(0.5));\n\n\t\tvec<4, T, Q> gx10 = ixy10 / T(7);\n\t\tvec<4, T, Q> gy10 = floor(gx10) / T(7);\n\t\tvec<4, T, Q> gz10 = floor(gy10) / T(6);\n\t\tgx10 = fract(gx10) - T(0.5);\n\t\tgy10 = fract(gy10) - T(0.5);\n\t\tgz10 = fract(gz10) - T(0.5);\n\t\tvec<4, T, Q> gw10 = vec<4, T, Q>(0.75) - abs(gx10) - abs(gy10) - abs(gz10);\n\t\tvec<4, T, Q> sw10 = step(gw10, vec<4, T, Q>(0.0));\n\t\tgx10 -= sw10 * (step(T(0), gx10) - T(0.5));\n\t\tgy10 -= sw10 * (step(T(0), gy10) - T(0.5));\n\n\t\tvec<4, T, Q> gx11 = ixy11 / T(7);\n\t\tvec<4, T, Q> gy11 = floor(gx11) / T(7);\n\t\tvec<4, T, Q> gz11 = floor(gy11) / T(6);\n\t\tgx11 = fract(gx11) - T(0.5);\n\t\tgy11 = fract(gy11) - T(0.5);\n\t\tgz11 = fract(gz11) - T(0.5);\n\t\tvec<4, T, Q> gw11 = vec<4, T, Q>(0.75) - abs(gx11) - abs(gy11) - abs(gz11);\n\t\tvec<4, T, Q> sw11 = step(gw11, vec<4, T, Q>(T(0)));\n\t\tgx11 -= sw11 * (step(T(0), gx11) - T(0.5));\n\t\tgy11 -= sw11 * (step(T(0), gy11) - T(0.5));\n\n\t\tvec<4, T, Q> g0000(gx00.x, gy00.x, gz00.x, gw00.x);\n\t\tvec<4, T, Q> g1000(gx00.y, gy00.y, gz00.y, gw00.y);\n\t\tvec<4, T, Q> g0100(gx00.z, gy00.z, gz00.z, gw00.z);\n\t\tvec<4, T, Q> g1100(gx00.w, gy00.w, gz00.w, gw00.w);\n\t\tvec<4, T, Q> g0010(gx10.x, gy10.x, gz10.x, gw10.x);\n\t\tvec<4, T, Q> g1010(gx10.y, gy10.y, gz10.y, gw10.y);\n\t\tvec<4, T, Q> g0110(gx10.z, gy10.z, gz10.z, gw10.z);\n\t\tvec<4, T, Q> g1110(gx10.w, gy10.w, gz10.w, gw10.w);\n\t\tvec<4, T, Q> g0001(gx01.x, gy01.x, gz01.x, gw01.x);\n\t\tvec<4, T, Q> g1001(gx01.y, gy01.y, gz01.y, gw01.y);\n\t\tvec<4, T, Q> g0101(gx01.z, gy01.z, gz01.z, gw01.z);\n\t\tvec<4, T, Q> g1101(gx01.w, gy01.w, gz01.w, gw01.w);\n\t\tvec<4, T, Q> g0011(gx11.x, gy11.x, gz11.x, gw11.x);\n\t\tvec<4, T, Q> g1011(gx11.y, gy11.y, gz11.y, gw11.y);\n\t\tvec<4, T, Q> g0111(gx11.z, gy11.z, gz11.z, gw11.z);\n\t\tvec<4, T, Q> g1111(gx11.w, gy11.w, gz11.w, gw11.w);\n\n\t\tvec<4, T, Q> norm00 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100)));\n\t\tg0000 *= norm00.x;\n\t\tg0100 *= norm00.y;\n\t\tg1000 *= norm00.z;\n\t\tg1100 *= norm00.w;\n\n\t\tvec<4, T, Q> norm01 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101)));\n\t\tg0001 *= norm01.x;\n\t\tg0101 *= norm01.y;\n\t\tg1001 *= norm01.z;\n\t\tg1101 *= norm01.w;\n\n\t\tvec<4, T, Q> norm10 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110)));\n\t\tg0010 *= norm10.x;\n\t\tg0110 *= norm10.y;\n\t\tg1010 *= norm10.z;\n\t\tg1110 *= norm10.w;\n\n\t\tvec<4, T, Q> norm11 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111)));\n\t\tg0011 *= norm11.x;\n\t\tg0111 *= norm11.y;\n\t\tg1011 *= norm11.z;\n\t\tg1111 *= norm11.w;\n\n\t\tT n0000 = dot(g0000, Pf0);\n\t\tT n1000 = dot(g1000, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf0.w));\n\t\tT n0100 = dot(g0100, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf0.w));\n\t\tT n1100 = dot(g1100, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf0.w));\n\t\tT n0010 = dot(g0010, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf0.w));\n\t\tT n1010 = dot(g1010, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf0.w));\n\t\tT n0110 = dot(g0110, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf0.w));\n\t\tT n1110 = dot(g1110, vec<4, T, Q>(Pf1.x, Pf1.y, Pf1.z, Pf0.w));\n\t\tT n0001 = dot(g0001, vec<4, T, Q>(Pf0.x, Pf0.y, Pf0.z, Pf1.w));\n\t\tT n1001 = dot(g1001, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf1.w));\n\t\tT n0101 = dot(g0101, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf1.w));\n\t\tT n1101 = dot(g1101, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf1.w));\n\t\tT n0011 = dot(g0011, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf1.w));\n\t\tT n1011 = dot(g1011, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf1.w));\n\t\tT n0111 = dot(g0111, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf1.w));\n\t\tT n1111 = dot(g1111, Pf1);\n\n\t\tvec<4, T, Q> fade_xyzw = detail::fade(Pf0);\n\t\tvec<4, T, Q> n_0w = mix(vec<4, T, Q>(n0000, n1000, n0100, n1100), vec<4, T, Q>(n0001, n1001, n0101, n1101), fade_xyzw.w);\n\t\tvec<4, T, Q> n_1w = mix(vec<4, T, Q>(n0010, n1010, n0110, n1110), vec<4, T, Q>(n0011, n1011, n0111, n1111), fade_xyzw.w);\n\t\tvec<4, T, Q> n_zw = mix(n_0w, n_1w, fade_xyzw.z);\n\t\tvec<2, T, Q> n_yzw = mix(vec<2, T, Q>(n_zw.x, n_zw.y), vec<2, T, Q>(n_zw.z, n_zw.w), fade_xyzw.y);\n\t\tT n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x);\n\t\treturn T(2.2) * n_xyzw;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T simplex(glm::vec<2, T, Q> const& v)\n\t{\n\t\tvec<4, T, Q> const C = vec<4, T, Q>(\n\t\t\tT( 0.211324865405187),  // (3.0 -  sqrt(3.0)) / 6.0\n\t\t\tT( 0.366025403784439),  //  0.5 * (sqrt(3.0)  - 1.0)\n\t\t\tT(-0.577350269189626),\t// -1.0 + 2.0 * C.x\n\t\t\tT( 0.024390243902439)); //  1.0 / 41.0\n\n\t\t// First corner\n\t\tvec<2, T, Q> i  = floor(v + dot(v, vec<2, T, Q>(C[1])));\n\t\tvec<2, T, Q> x0 = v -   i + dot(i, vec<2, T, Q>(C[0]));\n\n\t\t// Other corners\n\t\t//i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0\n\t\t//i1.y = 1.0 - i1.x;\n\t\tvec<2, T, Q> i1 = (x0.x > x0.y) ? vec<2, T, Q>(1, 0) : vec<2, T, Q>(0, 1);\n\t\t// x0 = x0 - 0.0 + 0.0 * C.xx ;\n\t\t// x1 = x0 - i1 + 1.0 * C.xx ;\n\t\t// x2 = x0 - 1.0 + 2.0 * C.xx ;\n\t\tvec<4, T, Q> x12 = vec<4, T, Q>(x0.x, x0.y, x0.x, x0.y) + vec<4, T, Q>(C.x, C.x, C.z, C.z);\n\t\tx12 = vec<4, T, Q>(vec<2, T, Q>(x12) - i1, x12.z, x12.w);\n\n\t\t// Permutations\n\t\ti = mod(i, vec<2, T, Q>(289)); // Avoid truncation effects in permutation\n\t\tvec<3, T, Q> p = detail::permute(\n\t\t\tdetail::permute(i.y + vec<3, T, Q>(T(0), i1.y, T(1)))\n\t\t\t+ i.x + vec<3, T, Q>(T(0), i1.x, T(1)));\n\n\t\tvec<3, T, Q> m = max(vec<3, T, Q>(0.5) - vec<3, T, Q>(\n\t\t\tdot(x0, x0),\n\t\t\tdot(vec<2, T, Q>(x12.x, x12.y), vec<2, T, Q>(x12.x, x12.y)),\n\t\t\tdot(vec<2, T, Q>(x12.z, x12.w), vec<2, T, Q>(x12.z, x12.w))), vec<3, T, Q>(0));\n\t\tm = m * m ;\n\t\tm = m * m ;\n\n\t\t// Gradients: 41 points uniformly over a line, mapped onto a diamond.\n\t\t// The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287)\n\n\t\tvec<3, T, Q> x = static_cast<T>(2) * fract(p * C.w) - T(1);\n\t\tvec<3, T, Q> h = abs(x) - T(0.5);\n\t\tvec<3, T, Q> ox = floor(x + T(0.5));\n\t\tvec<3, T, Q> a0 = x - ox;\n\n\t\t// Normalise gradients implicitly by scaling m\n\t\t// Inlined for speed: m *= taylorInvSqrt( a0*a0 + h*h );\n\t\tm *= static_cast<T>(1.79284291400159) - T(0.85373472095314) * (a0 * a0 + h * h);\n\n\t\t// Compute final noise value at P\n\t\tvec<3, T, Q> g;\n\t\tg.x  = a0.x  * x0.x  + h.x  * x0.y;\n\t\t//g.yz = a0.yz * x12.xz + h.yz * x12.yw;\n\t\tg.y = a0.y * x12.x + h.y * x12.y;\n\t\tg.z = a0.z * x12.z + h.z * x12.w;\n\t\treturn T(130) * dot(m, g);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T simplex(vec<3, T, Q> const& v)\n\t{\n\t\tvec<2, T, Q> const C(1.0 / 6.0, 1.0 / 3.0);\n\t\tvec<4, T, Q> const D(0.0, 0.5, 1.0, 2.0);\n\n\t\t// First corner\n\t\tvec<3, T, Q> i(floor(v + dot(v, vec<3, T, Q>(C.y))));\n\t\tvec<3, T, Q> x0(v - i + dot(i, vec<3, T, Q>(C.x)));\n\n\t\t// Other corners\n\t\tvec<3, T, Q> g(step(vec<3, T, Q>(x0.y, x0.z, x0.x), x0));\n\t\tvec<3, T, Q> l(T(1) - g);\n\t\tvec<3, T, Q> i1(min(g, vec<3, T, Q>(l.z, l.x, l.y)));\n\t\tvec<3, T, Q> i2(max(g, vec<3, T, Q>(l.z, l.x, l.y)));\n\n\t\t//   x0 = x0 - 0.0 + 0.0 * C.xxx;\n\t\t//   x1 = x0 - i1  + 1.0 * C.xxx;\n\t\t//   x2 = x0 - i2  + 2.0 * C.xxx;\n\t\t//   x3 = x0 - 1.0 + 3.0 * C.xxx;\n\t\tvec<3, T, Q> x1(x0 - i1 + C.x);\n\t\tvec<3, T, Q> x2(x0 - i2 + C.y); // 2.0*C.x = 1/3 = C.y\n\t\tvec<3, T, Q> x3(x0 - D.y);      // -1.0+3.0*C.x = -0.5 = -D.y\n\n\t\t// Permutations\n\t\ti = detail::mod289(i);\n\t\tvec<4, T, Q> p(detail::permute(detail::permute(detail::permute(\n\t\t\ti.z + vec<4, T, Q>(T(0), i1.z, i2.z, T(1))) +\n\t\t\ti.y + vec<4, T, Q>(T(0), i1.y, i2.y, T(1))) +\n\t\t\ti.x + vec<4, T, Q>(T(0), i1.x, i2.x, T(1))));\n\n\t\t// Gradients: 7x7 points over a square, mapped onto an octahedron.\n\t\t// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)\n\t\tT n_ = static_cast<T>(0.142857142857); // 1.0/7.0\n\t\tvec<3, T, Q> ns(n_ * vec<3, T, Q>(D.w, D.y, D.z) - vec<3, T, Q>(D.x, D.z, D.x));\n\n\t\tvec<4, T, Q> j(p - T(49) * floor(p * ns.z * ns.z));  //  mod(p,7*7)\n\n\t\tvec<4, T, Q> x_(floor(j * ns.z));\n\t\tvec<4, T, Q> y_(floor(j - T(7) * x_));    // mod(j,N)\n\n\t\tvec<4, T, Q> x(x_ * ns.x + ns.y);\n\t\tvec<4, T, Q> y(y_ * ns.x + ns.y);\n\t\tvec<4, T, Q> h(T(1) - abs(x) - abs(y));\n\n\t\tvec<4, T, Q> b0(x.x, x.y, y.x, y.y);\n\t\tvec<4, T, Q> b1(x.z, x.w, y.z, y.w);\n\n\t\t// vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;\n\t\t// vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;\n\t\tvec<4, T, Q> s0(floor(b0) * T(2) + T(1));\n\t\tvec<4, T, Q> s1(floor(b1) * T(2) + T(1));\n\t\tvec<4, T, Q> sh(-step(h, vec<4, T, Q>(0.0)));\n\n\t\tvec<4, T, Q> a0 = vec<4, T, Q>(b0.x, b0.z, b0.y, b0.w) + vec<4, T, Q>(s0.x, s0.z, s0.y, s0.w) * vec<4, T, Q>(sh.x, sh.x, sh.y, sh.y);\n\t\tvec<4, T, Q> a1 = vec<4, T, Q>(b1.x, b1.z, b1.y, b1.w) + vec<4, T, Q>(s1.x, s1.z, s1.y, s1.w) * vec<4, T, Q>(sh.z, sh.z, sh.w, sh.w);\n\n\t\tvec<3, T, Q> p0(a0.x, a0.y, h.x);\n\t\tvec<3, T, Q> p1(a0.z, a0.w, h.y);\n\t\tvec<3, T, Q> p2(a1.x, a1.y, h.z);\n\t\tvec<3, T, Q> p3(a1.z, a1.w, h.w);\n\n\t\t// Normalise gradients\n\t\tvec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));\n\t\tp0 *= norm.x;\n\t\tp1 *= norm.y;\n\t\tp2 *= norm.z;\n\t\tp3 *= norm.w;\n\n\t\t// Mix final noise value\n\t\tvec<4, T, Q> m = max(T(0.6) - vec<4, T, Q>(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), vec<4, T, Q>(0));\n\t\tm = m * m;\n\t\treturn T(42) * dot(m * m, vec<4, T, Q>(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T simplex(vec<4, T, Q> const& v)\n\t{\n\t\tvec<4, T, Q> const C(\n\t\t\t0.138196601125011,  // (5 - sqrt(5))/20  G4\n\t\t\t0.276393202250021,  // 2 * G4\n\t\t\t0.414589803375032,  // 3 * G4\n\t\t\t-0.447213595499958); // -1 + 4 * G4\n\n\t\t// (sqrt(5) - 1)/4 = F4, used once below\n\t\tT const F4 = static_cast<T>(0.309016994374947451);\n\n\t\t// First corner\n\t\tvec<4, T, Q> i  = floor(v + dot(v, vec<4, T, Q>(F4)));\n\t\tvec<4, T, Q> x0 = v -   i + dot(i, vec<4, T, Q>(C.x));\n\n\t\t// Other corners\n\n\t\t// Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI)\n\t\tvec<4, T, Q> i0;\n\t\tvec<3, T, Q> isX = step(vec<3, T, Q>(x0.y, x0.z, x0.w), vec<3, T, Q>(x0.x));\n\t\tvec<3, T, Q> isYZ = step(vec<3, T, Q>(x0.z, x0.w, x0.w), vec<3, T, Q>(x0.y, x0.y, x0.z));\n\t\t//  i0.x = dot(isX, vec3(1.0));\n\t\t//i0.x = isX.x + isX.y + isX.z;\n\t\t//i0.yzw = static_cast<T>(1) - isX;\n\t\ti0 = vec<4, T, Q>(isX.x + isX.y + isX.z, T(1) - isX);\n\t\t//  i0.y += dot(isYZ.xy, vec2(1.0));\n\t\ti0.y += isYZ.x + isYZ.y;\n\t\t//i0.zw += 1.0 - vec<2, T, Q>(isYZ.x, isYZ.y);\n\t\ti0.z += static_cast<T>(1) - isYZ.x;\n\t\ti0.w += static_cast<T>(1) - isYZ.y;\n\t\ti0.z += isYZ.z;\n\t\ti0.w += static_cast<T>(1) - isYZ.z;\n\n\t\t// i0 now contains the unique values 0,1,2,3 in each channel\n\t\tvec<4, T, Q> i3 = clamp(i0, T(0), T(1));\n\t\tvec<4, T, Q> i2 = clamp(i0 - T(1), T(0), T(1));\n\t\tvec<4, T, Q> i1 = clamp(i0 - T(2), T(0), T(1));\n\n\t\t//  x0 = x0 - 0.0 + 0.0 * C.xxxx\n\t\t//  x1 = x0 - i1  + 0.0 * C.xxxx\n\t\t//  x2 = x0 - i2  + 0.0 * C.xxxx\n\t\t//  x3 = x0 - i3  + 0.0 * C.xxxx\n\t\t//  x4 = x0 - 1.0 + 4.0 * C.xxxx\n\t\tvec<4, T, Q> x1 = x0 - i1 + C.x;\n\t\tvec<4, T, Q> x2 = x0 - i2 + C.y;\n\t\tvec<4, T, Q> x3 = x0 - i3 + C.z;\n\t\tvec<4, T, Q> x4 = x0 + C.w;\n\n\t\t// Permutations\n\t\ti = mod(i, vec<4, T, Q>(289));\n\t\tT j0 = detail::permute(detail::permute(detail::permute(detail::permute(i.w) + i.z) + i.y) + i.x);\n\t\tvec<4, T, Q> j1 = detail::permute(detail::permute(detail::permute(detail::permute(\n\t\t\ti.w + vec<4, T, Q>(i1.w, i2.w, i3.w, T(1))) +\n\t\t\ti.z + vec<4, T, Q>(i1.z, i2.z, i3.z, T(1))) +\n\t\t\ti.y + vec<4, T, Q>(i1.y, i2.y, i3.y, T(1))) +\n\t\t\ti.x + vec<4, T, Q>(i1.x, i2.x, i3.x, T(1)));\n\n\t\t// Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope\n\t\t// 7*7*6 = 294, which is close to the ring size 17*17 = 289.\n\t\tvec<4, T, Q> ip = vec<4, T, Q>(T(1) / T(294), T(1) / T(49), T(1) / T(7), T(0));\n\n\t\tvec<4, T, Q> p0 = gtc::grad4(j0,   ip);\n\t\tvec<4, T, Q> p1 = gtc::grad4(j1.x, ip);\n\t\tvec<4, T, Q> p2 = gtc::grad4(j1.y, ip);\n\t\tvec<4, T, Q> p3 = gtc::grad4(j1.z, ip);\n\t\tvec<4, T, Q> p4 = gtc::grad4(j1.w, ip);\n\n\t\t// Normalise gradients\n\t\tvec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3)));\n\t\tp0 *= norm.x;\n\t\tp1 *= norm.y;\n\t\tp2 *= norm.z;\n\t\tp3 *= norm.w;\n\t\tp4 *= detail::taylorInvSqrt(dot(p4, p4));\n\n\t\t// Mix contributions from the five corners\n\t\tvec<3, T, Q> m0 = max(T(0.6) - vec<3, T, Q>(dot(x0, x0), dot(x1, x1), dot(x2, x2)), vec<3, T, Q>(0));\n\t\tvec<2, T, Q> m1 = max(T(0.6) - vec<2, T, Q>(dot(x3, x3), dot(x4, x4)             ), vec<2, T, Q>(0));\n\t\tm0 = m0 * m0;\n\t\tm1 = m1 * m1;\n\t\treturn T(49) *\n\t\t\t(dot(m0 * m0, vec<3, T, Q>(dot(p0, x0), dot(p1, x1), dot(p2, x2))) +\n\t\t\tdot(m1 * m1, vec<2, T, Q>(dot(p3, x3), dot(p4, x4))));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/packing.hpp",
    "content": "/// @ref gtc_packing\n/// @file glm/gtc/packing.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_packing GLM_GTC_packing\n/// @ingroup gtc\n///\n/// Include <glm/gtc/packing.hpp> to use the features of this extension.\n///\n/// This extension provides a set of function to convert vertors to packed\n/// formats.\n\n#pragma once\n\n// Dependency:\n#include \"type_precision.hpp\"\n#include \"../ext/vector_packing.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_packing extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_packing\n\t/// @{\n\n\t/// First, converts the normalized floating-point value v into a 8-bit integer value.\n\t/// Then, the results are packed into the returned 8-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packUnorm1x8:\tround(clamp(c, 0, +1) * 255.0)\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packUnorm2x8(vec2 const& v)\n\t/// @see uint32 packUnorm4x8(vec4 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint8 packUnorm1x8(float v);\n\n\t/// Convert a single 8-bit integer to a normalized floating-point value.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackUnorm4x8: f / 255.0\n\t///\n\t/// @see gtc_packing\n\t/// @see vec2 unpackUnorm2x8(uint16 p)\n\t/// @see vec4 unpackUnorm4x8(uint32 p)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml\">GLSL unpackUnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL float unpackUnorm1x8(uint8 p);\n\n\t/// First, converts each component of the normalized floating-point value v into 8-bit integer values.\n\t/// Then, the results are packed into the returned 16-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packUnorm2x8:\tround(clamp(c, 0, +1) * 255.0)\n\t///\n\t/// The first component of the vector will be written to the least significant bits of the output;\n\t/// the last component will be written to the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint8 packUnorm1x8(float const& v)\n\t/// @see uint32 packUnorm4x8(vec4 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint16 packUnorm2x8(vec2 const& v);\n\n\t/// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackUnorm4x8: f / 255.0\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see float unpackUnorm1x8(uint8 v)\n\t/// @see vec4 unpackUnorm4x8(uint32 p)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml\">GLSL unpackUnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 p);\n\n\t/// First, converts the normalized floating-point value v into 8-bit integer value.\n\t/// Then, the results are packed into the returned 8-bit unsigned integer.\n\t///\n\t/// The conversion to fixed point is done as follows:\n\t/// packSnorm1x8:\tround(clamp(s, -1, +1) * 127.0)\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packSnorm2x8(vec2 const& v)\n\t/// @see uint32 packSnorm4x8(vec4 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint8 packSnorm1x8(float s);\n\n\t/// First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers.\n\t/// Then, the value is converted to a normalized floating-point value to generate the returned scalar.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackSnorm1x8: clamp(f / 127.0, -1, +1)\n\t///\n\t/// @see gtc_packing\n\t/// @see vec2 unpackSnorm2x8(uint16 p)\n\t/// @see vec4 unpackSnorm4x8(uint32 p)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml\">GLSL unpackSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL float unpackSnorm1x8(uint8 p);\n\n\t/// First, converts each component of the normalized floating-point value v into 8-bit integer values.\n\t/// Then, the results are packed into the returned 16-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packSnorm2x8:\tround(clamp(c, -1, +1) * 127.0)\n\t///\n\t/// The first component of the vector will be written to the least significant bits of the output;\n\t/// the last component will be written to the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint8 packSnorm1x8(float const& v)\n\t/// @see uint32 packSnorm4x8(vec4 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint16 packSnorm2x8(vec2 const& v);\n\n\t/// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackSnorm2x8: clamp(f / 127.0, -1, +1)\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see float unpackSnorm1x8(uint8 p)\n\t/// @see vec4 unpackSnorm4x8(uint32 p)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml\">GLSL unpackSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 p);\n\n\t/// First, converts the normalized floating-point value v into a 16-bit integer value.\n\t/// Then, the results are packed into the returned 16-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packUnorm1x16:\tround(clamp(c, 0, +1) * 65535.0)\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packSnorm1x16(float const& v)\n\t/// @see uint64 packSnorm4x16(vec4 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint16 packUnorm1x16(float v);\n\n\t/// First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers.\n\t/// Then, the value is converted to a normalized floating-point value to generate the returned scalar.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackUnorm1x16: f / 65535.0\n\t///\n\t/// @see gtc_packing\n\t/// @see vec2 unpackUnorm2x16(uint32 p)\n\t/// @see vec4 unpackUnorm4x16(uint64 p)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml\">GLSL unpackUnorm2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL float unpackUnorm1x16(uint16 p);\n\n\t/// First, converts each component of the normalized floating-point value v into 16-bit integer values.\n\t/// Then, the results are packed into the returned 64-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packUnorm4x16:\tround(clamp(c, 0, +1) * 65535.0)\n\t///\n\t/// The first component of the vector will be written to the least significant bits of the output;\n\t/// the last component will be written to the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packUnorm1x16(float const& v)\n\t/// @see uint32 packUnorm2x16(vec2 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint64 packUnorm4x16(vec4 const& v);\n\n\t/// First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackUnormx4x16: f / 65535.0\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see float unpackUnorm1x16(uint16 p)\n\t/// @see vec2 unpackUnorm2x16(uint32 p)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml\">GLSL unpackUnorm2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 p);\n\n\t/// First, converts the normalized floating-point value v into 16-bit integer value.\n\t/// Then, the results are packed into the returned 16-bit unsigned integer.\n\t///\n\t/// The conversion to fixed point is done as follows:\n\t/// packSnorm1x8:\tround(clamp(s, -1, +1) * 32767.0)\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packSnorm2x16(vec2 const& v)\n\t/// @see uint64 packSnorm4x16(vec4 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint16 packSnorm1x16(float v);\n\n\t/// First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned scalar.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackSnorm1x16: clamp(f / 32767.0, -1, +1)\n\t///\n\t/// @see gtc_packing\n\t/// @see vec2 unpackSnorm2x16(uint32 p)\n\t/// @see vec4 unpackSnorm4x16(uint64 p)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm1x16.xml\">GLSL unpackSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL float unpackSnorm1x16(uint16 p);\n\n\t/// First, converts each component of the normalized floating-point value v into 16-bit integer values.\n\t/// Then, the results are packed into the returned 64-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packSnorm2x8:\tround(clamp(c, -1, +1) * 32767.0)\n\t///\n\t/// The first component of the vector will be written to the least significant bits of the output;\n\t/// the last component will be written to the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packSnorm1x16(float const& v)\n\t/// @see uint32 packSnorm2x16(vec2 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint64 packSnorm4x16(vec4 const& v);\n\n\t/// First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackSnorm4x16: clamp(f / 32767.0, -1, +1)\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see float unpackSnorm1x16(uint16 p)\n\t/// @see vec2 unpackSnorm2x16(uint32 p)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm2x16.xml\">GLSL unpackSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 p);\n\n\t/// Returns an unsigned integer obtained by converting the components of a floating-point scalar\n\t/// to the 16-bit floating-point representation found in the OpenGL Specification,\n\t/// and then packing this 16-bit value into a 16-bit unsigned integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packHalf2x16(vec2 const& v)\n\t/// @see uint64 packHalf4x16(vec4 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml\">GLSL packHalf2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint16 packHalf1x16(float v);\n\n\t/// Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value,\n\t/// interpreted as a 16-bit floating-point number according to the OpenGL Specification,\n\t/// and converting it to 32-bit floating-point values.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec2 unpackHalf2x16(uint32 const& v)\n\t/// @see vec4 unpackHalf4x16(uint64 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml\">GLSL unpackHalf2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL float unpackHalf1x16(uint16 v);\n\n\t/// Returns an unsigned integer obtained by converting the components of a four-component floating-point vector\n\t/// to the 16-bit floating-point representation found in the OpenGL Specification,\n\t/// and then packing these four 16-bit values into a 64-bit unsigned integer.\n\t/// The first vector component specifies the 16 least-significant bits of the result;\n\t/// the forth component specifies the 16 most-significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packHalf1x16(float const& v)\n\t/// @see uint32 packHalf2x16(vec2 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml\">GLSL packHalf2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint64 packHalf4x16(vec4 const& v);\n\n\t/// Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values,\n\t/// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification,\n\t/// and converting them to 32-bit floating-point values.\n\t/// The first component of the vector is obtained from the 16 least-significant bits of v;\n\t/// the forth component is obtained from the 16 most-significant bits of v.\n\t///\n\t/// @see gtc_packing\n\t/// @see float unpackHalf1x16(uint16 const& v)\n\t/// @see vec2 unpackHalf2x16(uint32 const& v)\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml\">GLSL unpackHalf2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec4 unpackHalf4x16(uint64 p);\n\n\t/// Returns an unsigned integer obtained by converting the components of a four-component signed integer vector\n\t/// to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification,\n\t/// and then packing these four values into a 32-bit unsigned integer.\n\t/// The first vector component specifies the 10 least-significant bits of the result;\n\t/// the forth component specifies the 2 most-significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packI3x10_1x2(uvec4 const& v)\n\t/// @see uint32 packSnorm3x10_1x2(vec4 const& v)\n\t/// @see uint32 packUnorm3x10_1x2(vec4 const& v)\n\t/// @see ivec4 unpackI3x10_1x2(uint32 const& p)\n\tGLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const& v);\n\n\t/// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers.\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packU3x10_1x2(uvec4 const& v)\n\t/// @see vec4 unpackSnorm3x10_1x2(uint32 const& p);\n\t/// @see uvec4 unpackI3x10_1x2(uint32 const& p);\n\tGLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 p);\n\n\t/// Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector\n\t/// to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification,\n\t/// and then packing these four values into a 32-bit unsigned integer.\n\t/// The first vector component specifies the 10 least-significant bits of the result;\n\t/// the forth component specifies the 2 most-significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packI3x10_1x2(ivec4 const& v)\n\t/// @see uint32 packSnorm3x10_1x2(vec4 const& v)\n\t/// @see uint32 packUnorm3x10_1x2(vec4 const& v)\n\t/// @see ivec4 unpackU3x10_1x2(uint32 const& p)\n\tGLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const& v);\n\n\t/// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers.\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packU3x10_1x2(uvec4 const& v)\n\t/// @see vec4 unpackSnorm3x10_1x2(uint32 const& p);\n\t/// @see uvec4 unpackI3x10_1x2(uint32 const& p);\n\tGLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 p);\n\n\t/// First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values.\n\t/// Then, converts the forth component of the normalized floating-point value v into 2-bit signed integer values.\n\t/// Then, the results are packed into the returned 32-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packSnorm3x10_1x2(xyz):\tround(clamp(c, -1, +1) * 511.0)\n\t/// packSnorm3x10_1x2(w):\tround(clamp(c, -1, +1) * 1.0)\n\t///\n\t/// The first vector component specifies the 10 least-significant bits of the result;\n\t/// the forth component specifies the 2 most-significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec4 unpackSnorm3x10_1x2(uint32 const& p)\n\t/// @see uint32 packUnorm3x10_1x2(vec4 const& v)\n\t/// @see uint32 packU3x10_1x2(uvec4 const& v)\n\t/// @see uint32 packI3x10_1x2(ivec4 const& v)\n\tGLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const& v);\n\n\t/// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackSnorm3x10_1x2(xyz): clamp(f / 511.0, -1, +1)\n\t/// unpackSnorm3x10_1x2(w): clamp(f / 511.0, -1, +1)\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packSnorm3x10_1x2(vec4 const& v)\n\t/// @see vec4 unpackUnorm3x10_1x2(uint32 const& p))\n\t/// @see uvec4 unpackI3x10_1x2(uint32 const& p)\n\t/// @see uvec4 unpackU3x10_1x2(uint32 const& p)\n\tGLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 p);\n\n\t/// First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values.\n\t/// Then, converts the forth component of the normalized floating-point value v into 2-bit signed uninteger values.\n\t/// Then, the results are packed into the returned 32-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packUnorm3x10_1x2(xyz):\tround(clamp(c, 0, +1) * 1023.0)\n\t/// packUnorm3x10_1x2(w):\tround(clamp(c, 0, +1) * 3.0)\n\t///\n\t/// The first vector component specifies the 10 least-significant bits of the result;\n\t/// the forth component specifies the 2 most-significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec4 unpackUnorm3x10_1x2(uint32 const& p)\n\t/// @see uint32 packUnorm3x10_1x2(vec4 const& v)\n\t/// @see uint32 packU3x10_1x2(uvec4 const& v)\n\t/// @see uint32 packI3x10_1x2(ivec4 const& v)\n\tGLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const& v);\n\n\t/// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackSnorm3x10_1x2(xyz): clamp(f / 1023.0, 0, +1)\n\t/// unpackSnorm3x10_1x2(w): clamp(f / 3.0, 0, +1)\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packSnorm3x10_1x2(vec4 const& v)\n\t/// @see vec4 unpackInorm3x10_1x2(uint32 const& p))\n\t/// @see uvec4 unpackI3x10_1x2(uint32 const& p)\n\t/// @see uvec4 unpackU3x10_1x2(uint32 const& p)\n\tGLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 p);\n\n\t/// First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.\n\t/// Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value.\n\t/// Then, the results are packed into the returned 32-bit unsigned integer.\n\t///\n\t/// The first vector component specifies the 11 least-significant bits of the result;\n\t/// the last component specifies the 10 most-significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec3 unpackF2x11_1x10(uint32 const& p)\n\tGLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const& v);\n\n\t/// First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned three-component vector.\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packF2x11_1x10(vec3 const& v)\n\tGLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 p);\n\n\n\t/// First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values.\n\t/// Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value.\n\t/// Then, the results are packed into the returned 32-bit unsigned integer.\n\t///\n\t/// The first vector component specifies the 11 least-significant bits of the result;\n\t/// the last component specifies the 10 most-significant bits.\n\t///\n\t/// packF3x9_E1x5 allows encoding into RGBE / RGB9E5 format\n\t///\n\t/// @see gtc_packing\n\t/// @see vec3 unpackF3x9_E1x5(uint32 const& p)\n\tGLM_FUNC_DECL uint32 packF3x9_E1x5(vec3 const& v);\n\n\t/// First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value .\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned three-component vector.\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// unpackF3x9_E1x5 allows decoding RGBE / RGB9E5 data\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packF3x9_E1x5(vec3 const& v)\n\tGLM_FUNC_DECL vec3 unpackF3x9_E1x5(uint32 p);\n\n\t/// Returns an unsigned integer vector obtained by converting the components of a floating-point vector\n\t/// to the 16-bit floating-point representation found in the OpenGL Specification.\n\t/// The first vector component specifies the 16 least-significant bits of the result;\n\t/// the forth component specifies the 16 most-significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& p)\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> packRGBM(vec<3, T, Q> const& rgb);\n\n\t/// Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values.\n\t/// The first component of the vector is obtained from the 16 least-significant bits of v;\n\t/// the forth component is obtained from the 16 most-significant bits of v.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec<4, T, Q> packRGBM(vec<3, float, Q> const& v)\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& rgbm);\n\n\t/// Returns an unsigned integer vector obtained by converting the components of a floating-point vector\n\t/// to the 16-bit floating-point representation found in the OpenGL Specification.\n\t/// The first vector component specifies the 16 least-significant bits of the result;\n\t/// the forth component specifies the 16 most-significant bits.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec<L, float, Q> unpackHalf(vec<L, uint16, Q> const& p)\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL vec<L, uint16, Q> packHalf(vec<L, float, Q> const& v);\n\n\t/// Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values.\n\t/// The first component of the vector is obtained from the 16 least-significant bits of v;\n\t/// the forth component is obtained from the 16 most-significant bits of v.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec<L, uint16, Q> packHalf(vec<L, float, Q> const& v)\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL vec<L, float, Q> unpackHalf(vec<L, uint16, Q> const& p);\n\n\t/// Convert each component of the normalized floating-point vector into unsigned integer values.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec<L, floatType, Q> unpackUnorm(vec<L, intType, Q> const& p);\n\ttemplate<typename uintType, length_t L, typename floatType, qualifier Q>\n\tGLM_FUNC_DECL vec<L, uintType, Q> packUnorm(vec<L, floatType, Q> const& v);\n\n\t/// Convert a packed integer to a normalized floating-point vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec<L, intType, Q> packUnorm(vec<L, floatType, Q> const& v)\n\ttemplate<typename floatType, length_t L, typename uintType, qualifier Q>\n\tGLM_FUNC_DECL vec<L, floatType, Q> unpackUnorm(vec<L, uintType, Q> const& v);\n\n\t/// Convert each component of the normalized floating-point vector into signed integer values.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec<L, floatType, Q> unpackSnorm(vec<L, intType, Q> const& p);\n\ttemplate<typename intType, length_t L, typename floatType, qualifier Q>\n\tGLM_FUNC_DECL vec<L, intType, Q> packSnorm(vec<L, floatType, Q> const& v);\n\n\t/// Convert a packed integer to a normalized floating-point vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec<L, intType, Q> packSnorm(vec<L, floatType, Q> const& v)\n\ttemplate<typename floatType, length_t L, typename intType, qualifier Q>\n\tGLM_FUNC_DECL vec<L, floatType, Q> unpackSnorm(vec<L, intType, Q> const& v);\n\n\t/// Convert each component of the normalized floating-point vector into unsigned integer values.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec2 unpackUnorm2x4(uint8 p)\n\tGLM_FUNC_DECL uint8 packUnorm2x4(vec2 const& v);\n\n\t/// Convert a packed integer to a normalized floating-point vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint8 packUnorm2x4(vec2 const& v)\n\tGLM_FUNC_DECL vec2 unpackUnorm2x4(uint8 p);\n\n\t/// Convert each component of the normalized floating-point vector into unsigned integer values.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec4 unpackUnorm4x4(uint16 p)\n\tGLM_FUNC_DECL uint16 packUnorm4x4(vec4 const& v);\n\n\t/// Convert a packed integer to a normalized floating-point vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packUnorm4x4(vec4 const& v)\n\tGLM_FUNC_DECL vec4 unpackUnorm4x4(uint16 p);\n\n\t/// Convert each component of the normalized floating-point vector into unsigned integer values.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec3 unpackUnorm1x5_1x6_1x5(uint16 p)\n\tGLM_FUNC_DECL uint16 packUnorm1x5_1x6_1x5(vec3 const& v);\n\n\t/// Convert a packed integer to a normalized floating-point vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packUnorm1x5_1x6_1x5(vec3 const& v)\n\tGLM_FUNC_DECL vec3 unpackUnorm1x5_1x6_1x5(uint16 p);\n\n\t/// Convert each component of the normalized floating-point vector into unsigned integer values.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec4 unpackUnorm3x5_1x1(uint16 p)\n\tGLM_FUNC_DECL uint16 packUnorm3x5_1x1(vec4 const& v);\n\n\t/// Convert a packed integer to a normalized floating-point vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packUnorm3x5_1x1(vec4 const& v)\n\tGLM_FUNC_DECL vec4 unpackUnorm3x5_1x1(uint16 p);\n\n\t/// Convert each component of the normalized floating-point vector into unsigned integer values.\n\t///\n\t/// @see gtc_packing\n\t/// @see vec3 unpackUnorm2x3_1x2(uint8 p)\n\tGLM_FUNC_DECL uint8 packUnorm2x3_1x2(vec3 const& v);\n\n\t/// Convert a packed integer to a normalized floating-point vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint8 packUnorm2x3_1x2(vec3 const& v)\n\tGLM_FUNC_DECL vec3 unpackUnorm2x3_1x2(uint8 p);\n\n\n\n\t/// Convert each component from an integer vector into a packed integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see i8vec2 unpackInt2x8(int16 p)\n\tGLM_FUNC_DECL int16 packInt2x8(i8vec2 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see int16 packInt2x8(i8vec2 const& v)\n\tGLM_FUNC_DECL i8vec2 unpackInt2x8(int16 p);\n\n\t/// Convert each component from an integer vector into a packed unsigned integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see u8vec2 unpackInt2x8(uint16 p)\n\tGLM_FUNC_DECL uint16 packUint2x8(u8vec2 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint16 packInt2x8(u8vec2 const& v)\n\tGLM_FUNC_DECL u8vec2 unpackUint2x8(uint16 p);\n\n\t/// Convert each component from an integer vector into a packed integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see i8vec4 unpackInt4x8(int32 p)\n\tGLM_FUNC_DECL int32 packInt4x8(i8vec4 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see int32 packInt2x8(i8vec4 const& v)\n\tGLM_FUNC_DECL i8vec4 unpackInt4x8(int32 p);\n\n\t/// Convert each component from an integer vector into a packed unsigned integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see u8vec4 unpackUint4x8(uint32 p)\n\tGLM_FUNC_DECL uint32 packUint4x8(u8vec4 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint32 packUint4x8(u8vec2 const& v)\n\tGLM_FUNC_DECL u8vec4 unpackUint4x8(uint32 p);\n\n\t/// Convert each component from an integer vector into a packed integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see i16vec2 unpackInt2x16(int p)\n\tGLM_FUNC_DECL int packInt2x16(i16vec2 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see int packInt2x16(i16vec2 const& v)\n\tGLM_FUNC_DECL i16vec2 unpackInt2x16(int p);\n\n\t/// Convert each component from an integer vector into a packed integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see i16vec4 unpackInt4x16(int64 p)\n\tGLM_FUNC_DECL int64 packInt4x16(i16vec4 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see int64 packInt4x16(i16vec4 const& v)\n\tGLM_FUNC_DECL i16vec4 unpackInt4x16(int64 p);\n\n\t/// Convert each component from an integer vector into a packed unsigned integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see u16vec2 unpackUint2x16(uint p)\n\tGLM_FUNC_DECL uint packUint2x16(u16vec2 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint packUint2x16(u16vec2 const& v)\n\tGLM_FUNC_DECL u16vec2 unpackUint2x16(uint p);\n\n\t/// Convert each component from an integer vector into a packed unsigned integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see u16vec4 unpackUint4x16(uint64 p)\n\tGLM_FUNC_DECL uint64 packUint4x16(u16vec4 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see uint64 packUint4x16(u16vec4 const& v)\n\tGLM_FUNC_DECL u16vec4 unpackUint4x16(uint64 p);\n\n\t/// Convert each component from an integer vector into a packed integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see i32vec2 unpackInt2x32(int p)\n\tGLM_FUNC_DECL int64 packInt2x32(i32vec2 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see int packInt2x16(i32vec2 const& v)\n\tGLM_FUNC_DECL i32vec2 unpackInt2x32(int64 p);\n\n\t/// Convert each component from an integer vector into a packed unsigned integer.\n\t///\n\t/// @see gtc_packing\n\t/// @see u32vec2 unpackUint2x32(int p)\n\tGLM_FUNC_DECL uint64 packUint2x32(u32vec2 const& v);\n\n\t/// Convert a packed integer into an integer vector.\n\t///\n\t/// @see gtc_packing\n\t/// @see int packUint2x16(u32vec2 const& v)\n\tGLM_FUNC_DECL u32vec2 unpackUint2x32(uint64 p);\n\n\t/// @}\n}// namespace glm\n\n#include \"packing.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/packing.inl",
    "content": "/// @ref gtc_packing\n\n#include \"../ext/scalar_relational.hpp\"\n#include \"../ext/vector_relational.hpp\"\n#include \"../common.hpp\"\n#include \"../vec2.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n#include \"../detail/type_half.hpp\"\n#include <cstring>\n#include <limits>\n\nnamespace glm{\nnamespace detail\n{\n\tGLM_FUNC_QUALIFIER glm::uint16 float2half(glm::uint32 f)\n\t{\n\t\t// 10 bits    =>                         EE EEEFFFFF\n\t\t// 11 bits    =>                        EEE EEFFFFFF\n\t\t// Half bits  =>                   SEEEEEFF FFFFFFFF\n\t\t// Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF\n\n\t\t// 0x00007c00 => 00000000 00000000 01111100 00000000\n\t\t// 0x000003ff => 00000000 00000000 00000011 11111111\n\t\t// 0x38000000 => 00111000 00000000 00000000 00000000\n\t\t// 0x7f800000 => 01111111 10000000 00000000 00000000\n\t\t// 0x00008000 => 00000000 00000000 10000000 00000000\n\t\treturn\n\t\t\t((f >> 16) & 0x8000) | // sign\n\t\t\t((((f & 0x7f800000) - 0x38000000) >> 13) & 0x7c00) | // exponential\n\t\t\t((f >> 13) & 0x03ff); // Mantissa\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint32 float2packed11(glm::uint32 f)\n\t{\n\t\t// 10 bits    =>                         EE EEEFFFFF\n\t\t// 11 bits    =>                        EEE EEFFFFFF\n\t\t// Half bits  =>                   SEEEEEFF FFFFFFFF\n\t\t// Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF\n\n\t\t// 0x000007c0 => 00000000 00000000 00000111 11000000\n\t\t// 0x00007c00 => 00000000 00000000 01111100 00000000\n\t\t// 0x000003ff => 00000000 00000000 00000011 11111111\n\t\t// 0x38000000 => 00111000 00000000 00000000 00000000\n\t\t// 0x7f800000 => 01111111 10000000 00000000 00000000\n\t\t// 0x00008000 => 00000000 00000000 10000000 00000000\n\t\treturn\n\t\t\t((((f & 0x7f800000) - 0x38000000) >> 17) & 0x07c0) | // exponential\n\t\t\t((f >> 17) & 0x003f); // Mantissa\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint32 packed11ToFloat(glm::uint32 p)\n\t{\n\t\t// 10 bits    =>                         EE EEEFFFFF\n\t\t// 11 bits    =>                        EEE EEFFFFFF\n\t\t// Half bits  =>                   SEEEEEFF FFFFFFFF\n\t\t// Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF\n\n\t\t// 0x000007c0 => 00000000 00000000 00000111 11000000\n\t\t// 0x00007c00 => 00000000 00000000 01111100 00000000\n\t\t// 0x000003ff => 00000000 00000000 00000011 11111111\n\t\t// 0x38000000 => 00111000 00000000 00000000 00000000\n\t\t// 0x7f800000 => 01111111 10000000 00000000 00000000\n\t\t// 0x00008000 => 00000000 00000000 10000000 00000000\n\t\treturn\n\t\t\t((((p & 0x07c0) << 17) + 0x38000000) & 0x7f800000) | // exponential\n\t\t\t((p & 0x003f) << 17); // Mantissa\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint32 float2packed10(glm::uint32 f)\n\t{\n\t\t// 10 bits    =>                         EE EEEFFFFF\n\t\t// 11 bits    =>                        EEE EEFFFFFF\n\t\t// Half bits  =>                   SEEEEEFF FFFFFFFF\n\t\t// Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF\n\n\t\t// 0x0000001F => 00000000 00000000 00000000 00011111\n\t\t// 0x0000003F => 00000000 00000000 00000000 00111111\n\t\t// 0x000003E0 => 00000000 00000000 00000011 11100000\n\t\t// 0x000007C0 => 00000000 00000000 00000111 11000000\n\t\t// 0x00007C00 => 00000000 00000000 01111100 00000000\n\t\t// 0x000003FF => 00000000 00000000 00000011 11111111\n\t\t// 0x38000000 => 00111000 00000000 00000000 00000000\n\t\t// 0x7f800000 => 01111111 10000000 00000000 00000000\n\t\t// 0x00008000 => 00000000 00000000 10000000 00000000\n\t\treturn\n\t\t\t((((f & 0x7f800000) - 0x38000000) >> 18) & 0x03E0) | // exponential\n\t\t\t((f >> 18) & 0x001f); // Mantissa\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint32 packed10ToFloat(glm::uint32 p)\n\t{\n\t\t// 10 bits    =>                         EE EEEFFFFF\n\t\t// 11 bits    =>                        EEE EEFFFFFF\n\t\t// Half bits  =>                   SEEEEEFF FFFFFFFF\n\t\t// Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF\n\n\t\t// 0x0000001F => 00000000 00000000 00000000 00011111\n\t\t// 0x0000003F => 00000000 00000000 00000000 00111111\n\t\t// 0x000003E0 => 00000000 00000000 00000011 11100000\n\t\t// 0x000007C0 => 00000000 00000000 00000111 11000000\n\t\t// 0x00007C00 => 00000000 00000000 01111100 00000000\n\t\t// 0x000003FF => 00000000 00000000 00000011 11111111\n\t\t// 0x38000000 => 00111000 00000000 00000000 00000000\n\t\t// 0x7f800000 => 01111111 10000000 00000000 00000000\n\t\t// 0x00008000 => 00000000 00000000 10000000 00000000\n\t\treturn\n\t\t\t((((p & 0x03E0) << 18) + 0x38000000) & 0x7f800000) | // exponential\n\t\t\t((p & 0x001f) << 18); // Mantissa\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint half2float(glm::uint h)\n\t{\n\t\treturn ((h & 0x8000) << 16) | ((( h & 0x7c00) + 0x1C000) << 13) | ((h & 0x03FF) << 13);\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint floatTo11bit(float x)\n\t{\n\t\tif(x == 0.0f)\n\t\t\treturn 0u;\n\t\telse if(glm::isnan(x))\n\t\t\treturn ~0u;\n\t\telse if(glm::isinf(x))\n\t\t\treturn 0x1Fu << 6u;\n\n\t\tuint Pack = 0u;\n\t\tmemcpy(&Pack, &x, sizeof(Pack));\n\t\treturn float2packed11(Pack);\n\t}\n\n\tGLM_FUNC_QUALIFIER float packed11bitToFloat(glm::uint x)\n\t{\n\t\tif(x == 0)\n\t\t\treturn 0.0f;\n\t\telse if(x == ((1 << 11) - 1))\n\t\t\treturn ~0;//NaN\n\t\telse if(x == (0x1f << 6))\n\t\t\treturn ~0;//Inf\n\n\t\tuint Result = packed11ToFloat(x);\n\n\t\tfloat Temp = 0;\n\t\tmemcpy(&Temp, &Result, sizeof(Temp));\n\t\treturn Temp;\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint floatTo10bit(float x)\n\t{\n\t\tif(x == 0.0f)\n\t\t\treturn 0u;\n\t\telse if(glm::isnan(x))\n\t\t\treturn ~0u;\n\t\telse if(glm::isinf(x))\n\t\t\treturn 0x1Fu << 5u;\n\n\t\tuint Pack = 0;\n\t\tmemcpy(&Pack, &x, sizeof(Pack));\n\t\treturn float2packed10(Pack);\n\t}\n\n\tGLM_FUNC_QUALIFIER float packed10bitToFloat(glm::uint x)\n\t{\n\t\tif(x == 0)\n\t\t\treturn 0.0f;\n\t\telse if(x == ((1 << 10) - 1))\n\t\t\treturn ~0;//NaN\n\t\telse if(x == (0x1f << 5))\n\t\t\treturn ~0;//Inf\n\n\t\tuint Result = packed10ToFloat(x);\n\n\t\tfloat Temp = 0;\n\t\tmemcpy(&Temp, &Result, sizeof(Temp));\n\t\treturn Temp;\n\t}\n\n//\tGLM_FUNC_QUALIFIER glm::uint f11_f11_f10(float x, float y, float z)\n//\t{\n//\t\treturn ((floatTo11bit(x) & ((1 << 11) - 1)) << 0) |  ((floatTo11bit(y) & ((1 << 11) - 1)) << 11) | ((floatTo10bit(z) & ((1 << 10) - 1)) << 22);\n//\t}\n\n\tunion u3u3u2\n\t{\n\t\tstruct\n\t\t{\n\t\t\tuint x : 3;\n\t\t\tuint y : 3;\n\t\t\tuint z : 2;\n\t\t} data;\n\t\tuint8 pack;\n\t};\n\n\tunion u4u4\n\t{\n\t\tstruct\n\t\t{\n\t\t\tuint x : 4;\n\t\t\tuint y : 4;\n\t\t} data;\n\t\tuint8 pack;\n\t};\n\n\tunion u4u4u4u4\n\t{\n\t\tstruct\n\t\t{\n\t\t\tuint x : 4;\n\t\t\tuint y : 4;\n\t\t\tuint z : 4;\n\t\t\tuint w : 4;\n\t\t} data;\n\t\tuint16 pack;\n\t};\n\n\tunion u5u6u5\n\t{\n\t\tstruct\n\t\t{\n\t\t\tuint x : 5;\n\t\t\tuint y : 6;\n\t\t\tuint z : 5;\n\t\t} data;\n\t\tuint16 pack;\n\t};\n\n\tunion u5u5u5u1\n\t{\n\t\tstruct\n\t\t{\n\t\t\tuint x : 5;\n\t\t\tuint y : 5;\n\t\t\tuint z : 5;\n\t\t\tuint w : 1;\n\t\t} data;\n\t\tuint16 pack;\n\t};\n\n\tunion u10u10u10u2\n\t{\n\t\tstruct\n\t\t{\n\t\t\tuint x : 10;\n\t\t\tuint y : 10;\n\t\t\tuint z : 10;\n\t\t\tuint w : 2;\n\t\t} data;\n\t\tuint32 pack;\n\t};\n\n\tunion i10i10i10i2\n\t{\n\t\tstruct\n\t\t{\n\t\t\tint x : 10;\n\t\t\tint y : 10;\n\t\t\tint z : 10;\n\t\t\tint w : 2;\n\t\t} data;\n\t\tuint32 pack;\n\t};\n\n\tunion u9u9u9e5\n\t{\n\t\tstruct\n\t\t{\n\t\t\tuint x : 9;\n\t\t\tuint y : 9;\n\t\t\tuint z : 9;\n\t\t\tuint w : 5;\n\t\t} data;\n\t\tuint32 pack;\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_half\n\t{};\n\n\ttemplate<qualifier Q>\n\tstruct compute_half<1, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<1, uint16, Q> pack(vec<1, float, Q> const& v)\n\t\t{\n\t\t\tint16 const Unpack(detail::toFloat16(v.x));\n\t\t\tu16vec1 Packed;\n\t\t\tmemcpy(&Packed, &Unpack, sizeof(Packed));\n\t\t\treturn Packed;\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER static vec<1, float, Q> unpack(vec<1, uint16, Q> const& v)\n\t\t{\n\t\t\ti16vec1 Unpack;\n\t\t\tmemcpy(&Unpack, &v, sizeof(Unpack));\n\t\t\treturn vec<1, float, Q>(detail::toFloat32(v.x));\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_half<2, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<2, uint16, Q> pack(vec<2, float, Q> const& v)\n\t\t{\n\t\t\tvec<2, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y));\n\t\t\tu16vec2 Packed;\n\t\t\tmemcpy(&Packed, &Unpack, sizeof(Packed));\n\t\t\treturn Packed;\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER static vec<2, float, Q> unpack(vec<2, uint16, Q> const& v)\n\t\t{\n\t\t\ti16vec2 Unpack;\n\t\t\tmemcpy(&Unpack, &v, sizeof(Unpack));\n\t\t\treturn vec<2, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y));\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_half<3, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<3, uint16, Q> pack(vec<3, float, Q> const& v)\n\t\t{\n\t\t\tvec<3, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y), detail::toFloat16(v.z));\n\t\t\tu16vec3 Packed;\n\t\t\tmemcpy(&Packed, &Unpack, sizeof(Packed));\n\t\t\treturn Packed;\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER static vec<3, float, Q> unpack(vec<3, uint16, Q> const& v)\n\t\t{\n\t\t\ti16vec3 Unpack;\n\t\t\tmemcpy(&Unpack, &v, sizeof(Unpack));\n\t\t\treturn vec<3, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y), detail::toFloat32(v.z));\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_half<4, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, uint16, Q> pack(vec<4, float, Q> const& v)\n\t\t{\n\t\t\tvec<4, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y), detail::toFloat16(v.z), detail::toFloat16(v.w));\n\t\t\tu16vec4 Packed;\n\t\t\tmemcpy(&Packed, &Unpack, sizeof(Packed));\n\t\t\treturn Packed;\n\t\t}\n\n\t\tGLM_FUNC_QUALIFIER static vec<4, float, Q> unpack(vec<4, uint16, Q> const& v)\n\t\t{\n\t\t\ti16vec4 Unpack;\n\t\t\tmemcpy(&Unpack, &v, sizeof(Unpack));\n\t\t\treturn vec<4, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y), detail::toFloat32(v.z), detail::toFloat32(v.w));\n\t\t}\n\t};\n}//namespace detail\n\n\tGLM_FUNC_QUALIFIER uint8 packUnorm1x8(float v)\n\t{\n\t\treturn static_cast<uint8>(round(clamp(v, 0.0f, 1.0f) * 255.0f));\n\t}\n\n\tGLM_FUNC_QUALIFIER float unpackUnorm1x8(uint8 p)\n\t{\n\t\tfloat const Unpack(p);\n\t\treturn Unpack * static_cast<float>(0.0039215686274509803921568627451); // 1 / 255\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packUnorm2x8(vec2 const& v)\n\t{\n\t\tu8vec2 const Topack(round(clamp(v, 0.0f, 1.0f) * 255.0f));\n\n\t\tuint16 Unpack = 0;\n\t\tmemcpy(&Unpack, &Topack, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec2 unpackUnorm2x8(uint16 p)\n\t{\n\t\tu8vec2 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn vec2(Unpack) * float(0.0039215686274509803921568627451); // 1 / 255\n\t}\n\n\tGLM_FUNC_QUALIFIER uint8 packSnorm1x8(float v)\n\t{\n\t\tint8 const Topack(static_cast<int8>(round(clamp(v ,-1.0f, 1.0f) * 127.0f)));\n\t\tuint8 Packed = 0;\n\t\tmemcpy(&Packed, &Topack, sizeof(Packed));\n\t\treturn Packed;\n\t}\n\n\tGLM_FUNC_QUALIFIER float unpackSnorm1x8(uint8 p)\n\t{\n\t\tint8 Unpack = 0;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn clamp(\n\t\t\tstatic_cast<float>(Unpack) * 0.00787401574803149606299212598425f, // 1.0f / 127.0f\n\t\t\t-1.0f, 1.0f);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packSnorm2x8(vec2 const& v)\n\t{\n\t\ti8vec2 const Topack(round(clamp(v, -1.0f, 1.0f) * 127.0f));\n\t\tuint16 Packed = 0;\n\t\tmemcpy(&Packed, &Topack, sizeof(Packed));\n\t\treturn Packed;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec2 unpackSnorm2x8(uint16 p)\n\t{\n\t\ti8vec2 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn clamp(\n\t\t\tvec2(Unpack) * 0.00787401574803149606299212598425f, // 1.0f / 127.0f\n\t\t\t-1.0f, 1.0f);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packUnorm1x16(float s)\n\t{\n\t\treturn static_cast<uint16>(round(clamp(s, 0.0f, 1.0f) * 65535.0f));\n\t}\n\n\tGLM_FUNC_QUALIFIER float unpackUnorm1x16(uint16 p)\n\t{\n\t\tfloat const Unpack(p);\n\t\treturn Unpack * 1.5259021896696421759365224689097e-5f; // 1.0 / 65535.0\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 packUnorm4x16(vec4 const& v)\n\t{\n\t\tu16vec4 const Topack(round(clamp(v , 0.0f, 1.0f) * 65535.0f));\n\t\tuint64 Packed = 0;\n\t\tmemcpy(&Packed, &Topack, sizeof(Packed));\n\t\treturn Packed;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec4 unpackUnorm4x16(uint64 p)\n\t{\n\t\tu16vec4 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn vec4(Unpack) * 1.5259021896696421759365224689097e-5f; // 1.0 / 65535.0\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packSnorm1x16(float v)\n\t{\n\t\tint16 const Topack = static_cast<int16>(round(clamp(v ,-1.0f, 1.0f) * 32767.0f));\n\t\tuint16 Packed = 0;\n\t\tmemcpy(&Packed, &Topack, sizeof(Packed));\n\t\treturn Packed;\n\t}\n\n\tGLM_FUNC_QUALIFIER float unpackSnorm1x16(uint16 p)\n\t{\n\t\tint16 Unpack = 0;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn clamp(\n\t\t\tstatic_cast<float>(Unpack) * 3.0518509475997192297128208258309e-5f, //1.0f / 32767.0f,\n\t\t\t-1.0f, 1.0f);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 packSnorm4x16(vec4 const& v)\n\t{\n\t\ti16vec4 const Topack(round(clamp(v ,-1.0f, 1.0f) * 32767.0f));\n\t\tuint64 Packed = 0;\n\t\tmemcpy(&Packed, &Topack, sizeof(Packed));\n\t\treturn Packed;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec4 unpackSnorm4x16(uint64 p)\n\t{\n\t\ti16vec4 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn clamp(\n\t\t\tvec4(Unpack) * 3.0518509475997192297128208258309e-5f, //1.0f / 32767.0f,\n\t\t\t-1.0f, 1.0f);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packHalf1x16(float v)\n\t{\n\t\tint16 const Topack(detail::toFloat16(v));\n\t\tuint16 Packed = 0;\n\t\tmemcpy(&Packed, &Topack, sizeof(Packed));\n\t\treturn Packed;\n\t}\n\n\tGLM_FUNC_QUALIFIER float unpackHalf1x16(uint16 v)\n\t{\n\t\tint16 Unpack = 0;\n\t\tmemcpy(&Unpack, &v, sizeof(Unpack));\n\t\treturn detail::toFloat32(Unpack);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 packHalf4x16(glm::vec4 const& v)\n\t{\n\t\ti16vec4 const Unpack(\n\t\t\tdetail::toFloat16(v.x),\n\t\t\tdetail::toFloat16(v.y),\n\t\t\tdetail::toFloat16(v.z),\n\t\t\tdetail::toFloat16(v.w));\n\t\tuint64 Packed = 0;\n\t\tmemcpy(&Packed, &Unpack, sizeof(Packed));\n\t\treturn Packed;\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::vec4 unpackHalf4x16(uint64 v)\n\t{\n\t\ti16vec4 Unpack;\n\t\tmemcpy(&Unpack, &v, sizeof(Unpack));\n\t\treturn vec4(\n\t\t\tdetail::toFloat32(Unpack.x),\n\t\t\tdetail::toFloat32(Unpack.y),\n\t\t\tdetail::toFloat32(Unpack.z),\n\t\t\tdetail::toFloat32(Unpack.w));\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 packI3x10_1x2(ivec4 const& v)\n\t{\n\t\tdetail::i10i10i10i2 Result;\n\t\tResult.data.x = v.x;\n\t\tResult.data.y = v.y;\n\t\tResult.data.z = v.z;\n\t\tResult.data.w = v.w;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER ivec4 unpackI3x10_1x2(uint32 v)\n\t{\n\t\tdetail::i10i10i10i2 Unpack;\n\t\tUnpack.pack = v;\n\t\treturn ivec4(\n\t\t\tUnpack.data.x,\n\t\t\tUnpack.data.y,\n\t\t\tUnpack.data.z,\n\t\t\tUnpack.data.w);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 packU3x10_1x2(uvec4 const& v)\n\t{\n\t\tdetail::u10u10u10u2 Result;\n\t\tResult.data.x = v.x;\n\t\tResult.data.y = v.y;\n\t\tResult.data.z = v.z;\n\t\tResult.data.w = v.w;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER uvec4 unpackU3x10_1x2(uint32 v)\n\t{\n\t\tdetail::u10u10u10u2 Unpack;\n\t\tUnpack.pack = v;\n\t\treturn uvec4(\n\t\t\tUnpack.data.x,\n\t\t\tUnpack.data.y,\n\t\t\tUnpack.data.z,\n\t\t\tUnpack.data.w);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 packSnorm3x10_1x2(vec4 const& v)\n\t{\n\t\tivec4 const Pack(round(clamp(v,-1.0f, 1.0f) * vec4(511.f, 511.f, 511.f, 1.f)));\n\n\t\tdetail::i10i10i10i2 Result;\n\t\tResult.data.x = Pack.x;\n\t\tResult.data.y = Pack.y;\n\t\tResult.data.z = Pack.z;\n\t\tResult.data.w = Pack.w;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec4 unpackSnorm3x10_1x2(uint32 v)\n\t{\n\t\tdetail::i10i10i10i2 Unpack;\n\t\tUnpack.pack = v;\n\n\t\tvec4 const Result(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w);\n\n\t\treturn clamp(Result * vec4(1.f / 511.f, 1.f / 511.f, 1.f / 511.f, 1.f), -1.0f, 1.0f);\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 packUnorm3x10_1x2(vec4 const& v)\n\t{\n\t\tuvec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec4(1023.f, 1023.f, 1023.f, 3.f)));\n\n\t\tdetail::u10u10u10u2 Result;\n\t\tResult.data.x = Unpack.x;\n\t\tResult.data.y = Unpack.y;\n\t\tResult.data.z = Unpack.z;\n\t\tResult.data.w = Unpack.w;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec4 unpackUnorm3x10_1x2(uint32 v)\n\t{\n\t\tvec4 const ScaleFactors(1.0f / 1023.f, 1.0f / 1023.f, 1.0f / 1023.f, 1.0f / 3.f);\n\n\t\tdetail::u10u10u10u2 Unpack;\n\t\tUnpack.pack = v;\n\t\treturn vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactors;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 packF2x11_1x10(vec3 const& v)\n\t{\n\t\treturn\n\t\t\t((detail::floatTo11bit(v.x) & ((1 << 11) - 1)) <<  0) |\n\t\t\t((detail::floatTo11bit(v.y) & ((1 << 11) - 1)) << 11) |\n\t\t\t((detail::floatTo10bit(v.z) & ((1 << 10) - 1)) << 22);\n\t}\n\n\tGLM_FUNC_QUALIFIER vec3 unpackF2x11_1x10(uint32 v)\n\t{\n\t\treturn vec3(\n\t\t\tdetail::packed11bitToFloat(v >> 0),\n\t\t\tdetail::packed11bitToFloat(v >> 11),\n\t\t\tdetail::packed10bitToFloat(v >> 22));\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 packF3x9_E1x5(vec3 const& v)\n\t{\n\t\tfloat const SharedExpMax = (pow(2.0f, 9.0f - 1.0f) / pow(2.0f, 9.0f)) * pow(2.0f, 31.f - 15.f);\n\t\tvec3 const Color = clamp(v, 0.0f, SharedExpMax);\n\t\tfloat const MaxColor = max(Color.x, max(Color.y, Color.z));\n\n\t\tfloat const ExpSharedP = max(-15.f - 1.f, floor(log2(MaxColor))) + 1.0f + 15.f;\n\t\tfloat const MaxShared = floor(MaxColor / pow(2.0f, (ExpSharedP - 15.f - 9.f)) + 0.5f);\n\t\tfloat const ExpShared = equal(MaxShared, pow(2.0f, 9.0f), epsilon<float>()) ? ExpSharedP + 1.0f : ExpSharedP;\n\n\t\tuvec3 const ColorComp(floor(Color / pow(2.f, (ExpShared - 15.f - 9.f)) + 0.5f));\n\n\t\tdetail::u9u9u9e5 Unpack;\n\t\tUnpack.data.x = ColorComp.x;\n\t\tUnpack.data.y = ColorComp.y;\n\t\tUnpack.data.z = ColorComp.z;\n\t\tUnpack.data.w = uint(ExpShared);\n\t\treturn Unpack.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec3 unpackF3x9_E1x5(uint32 v)\n\t{\n\t\tdetail::u9u9u9e5 Unpack;\n\t\tUnpack.pack = v;\n\n\t\treturn vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * pow(2.0f, Unpack.data.w - 15.f - 9.f);\n\t}\n\n\t// Based on Brian Karis http://graphicrants.blogspot.fr/2009/04/rgbm-color-encoding.html\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> packRGBM(vec<3, T, Q> const& rgb)\n\t{\n\t\tvec<3, T, Q> const Color(rgb * static_cast<T>(1.0 / 6.0));\n\t\tT Alpha = clamp(max(max(Color.x, Color.y), max(Color.z, static_cast<T>(1e-6))), static_cast<T>(0), static_cast<T>(1));\n\t\tAlpha = ceil(Alpha * static_cast<T>(255.0)) / static_cast<T>(255.0);\n\t\treturn vec<4, T, Q>(Color / Alpha, Alpha);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& rgbm)\n\t{\n\t\treturn vec<3, T, Q>(rgbm.x, rgbm.y, rgbm.z) * rgbm.w * static_cast<T>(6);\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, uint16, Q> packHalf(vec<L, float, Q> const& v)\n\t{\n\t\treturn detail::compute_half<L, Q>::pack(v);\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, float, Q> unpackHalf(vec<L, uint16, Q> const& v)\n\t{\n\t\treturn detail::compute_half<L, Q>::unpack(v);\n\t}\n\n\ttemplate<typename uintType, length_t L, typename floatType, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, uintType, Q> packUnorm(vec<L, floatType, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<uintType>::is_integer, \"uintType must be an integer type\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, \"floatType must be a floating point type\");\n\n\t\treturn vec<L, uintType, Q>(round(clamp(v, static_cast<floatType>(0), static_cast<floatType>(1)) * static_cast<floatType>(std::numeric_limits<uintType>::max())));\n\t}\n\n\ttemplate<typename floatType, length_t L, typename uintType, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, floatType, Q> unpackUnorm(vec<L, uintType, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<uintType>::is_integer, \"uintType must be an integer type\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, \"floatType must be a floating point type\");\n\n\t\treturn vec<L, floatType, Q>(v) * (static_cast<floatType>(1) / static_cast<floatType>(std::numeric_limits<uintType>::max()));\n\t}\n\n\ttemplate<typename intType, length_t L, typename floatType, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, intType, Q> packSnorm(vec<L, floatType, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<intType>::is_integer, \"uintType must be an integer type\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, \"floatType must be a floating point type\");\n\n\t\treturn vec<L, intType, Q>(round(clamp(v , static_cast<floatType>(-1), static_cast<floatType>(1)) * static_cast<floatType>(std::numeric_limits<intType>::max())));\n\t}\n\n\ttemplate<typename floatType, length_t L, typename intType, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, floatType, Q> unpackSnorm(vec<L, intType, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<intType>::is_integer, \"uintType must be an integer type\");\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, \"floatType must be a floating point type\");\n\n\t\treturn clamp(vec<L, floatType, Q>(v) * (static_cast<floatType>(1) / static_cast<floatType>(std::numeric_limits<intType>::max())), static_cast<floatType>(-1), static_cast<floatType>(1));\n\t}\n\n\tGLM_FUNC_QUALIFIER uint8 packUnorm2x4(vec2 const& v)\n\t{\n\t\tu32vec2 const Unpack(round(clamp(v, 0.0f, 1.0f) * 15.0f));\n\t\tdetail::u4u4 Result;\n\t\tResult.data.x = Unpack.x;\n\t\tResult.data.y = Unpack.y;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec2 unpackUnorm2x4(uint8 v)\n\t{\n\t\tfloat const ScaleFactor(1.f / 15.f);\n\t\tdetail::u4u4 Unpack;\n\t\tUnpack.pack = v;\n\t\treturn vec2(Unpack.data.x, Unpack.data.y) * ScaleFactor;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packUnorm4x4(vec4 const& v)\n\t{\n\t\tu32vec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * 15.0f));\n\t\tdetail::u4u4u4u4 Result;\n\t\tResult.data.x = Unpack.x;\n\t\tResult.data.y = Unpack.y;\n\t\tResult.data.z = Unpack.z;\n\t\tResult.data.w = Unpack.w;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec4 unpackUnorm4x4(uint16 v)\n\t{\n\t\tfloat const ScaleFactor(1.f / 15.f);\n\t\tdetail::u4u4u4u4 Unpack;\n\t\tUnpack.pack = v;\n\t\treturn vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactor;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packUnorm1x5_1x6_1x5(vec3 const& v)\n\t{\n\t\tu32vec3 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec3(31.f, 63.f, 31.f)));\n\t\tdetail::u5u6u5 Result;\n\t\tResult.data.x = Unpack.x;\n\t\tResult.data.y = Unpack.y;\n\t\tResult.data.z = Unpack.z;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec3 unpackUnorm1x5_1x6_1x5(uint16 v)\n\t{\n\t\tvec3 const ScaleFactor(1.f / 31.f, 1.f / 63.f, 1.f / 31.f);\n\t\tdetail::u5u6u5 Unpack;\n\t\tUnpack.pack = v;\n\t\treturn vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * ScaleFactor;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packUnorm3x5_1x1(vec4 const& v)\n\t{\n\t\tu32vec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec4(31.f, 31.f, 31.f, 1.f)));\n\t\tdetail::u5u5u5u1 Result;\n\t\tResult.data.x = Unpack.x;\n\t\tResult.data.y = Unpack.y;\n\t\tResult.data.z = Unpack.z;\n\t\tResult.data.w = Unpack.w;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec4 unpackUnorm3x5_1x1(uint16 v)\n\t{\n\t\tvec4 const ScaleFactor(1.f / 31.f, 1.f / 31.f, 1.f / 31.f, 1.f);\n\t\tdetail::u5u5u5u1 Unpack;\n\t\tUnpack.pack = v;\n\t\treturn vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactor;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint8 packUnorm2x3_1x2(vec3 const& v)\n\t{\n\t\tu32vec3 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec3(7.f, 7.f, 3.f)));\n\t\tdetail::u3u3u2 Result;\n\t\tResult.data.x = Unpack.x;\n\t\tResult.data.y = Unpack.y;\n\t\tResult.data.z = Unpack.z;\n\t\treturn Result.pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER vec3 unpackUnorm2x3_1x2(uint8 v)\n\t{\n\t\tvec3 const ScaleFactor(1.f / 7.f, 1.f / 7.f, 1.f / 3.f);\n\t\tdetail::u3u3u2 Unpack;\n\t\tUnpack.pack = v;\n\t\treturn vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * ScaleFactor;\n\t}\n\n\tGLM_FUNC_QUALIFIER int16 packInt2x8(i8vec2 const& v)\n\t{\n\t\tint16 Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER i8vec2 unpackInt2x8(int16 p)\n\t{\n\t\ti8vec2 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint16 packUint2x8(u8vec2 const& v)\n\t{\n\t\tuint16 Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER u8vec2 unpackUint2x8(uint16 p)\n\t{\n\t\tu8vec2 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER int32 packInt4x8(i8vec4 const& v)\n\t{\n\t\tint32 Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER i8vec4 unpackInt4x8(int32 p)\n\t{\n\t\ti8vec4 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint32 packUint4x8(u8vec4 const& v)\n\t{\n\t\tuint32 Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER u8vec4 unpackUint4x8(uint32 p)\n\t{\n\t\tu8vec4 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER int packInt2x16(i16vec2 const& v)\n\t{\n\t\tint Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER i16vec2 unpackInt2x16(int p)\n\t{\n\t\ti16vec2 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER int64 packInt4x16(i16vec4 const& v)\n\t{\n\t\tint64 Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER i16vec4 unpackInt4x16(int64 p)\n\t{\n\t\ti16vec4 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint packUint2x16(u16vec2 const& v)\n\t{\n\t\tuint Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER u16vec2 unpackUint2x16(uint p)\n\t{\n\t\tu16vec2 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 packUint4x16(u16vec4 const& v)\n\t{\n\t\tuint64 Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER u16vec4 unpackUint4x16(uint64 p)\n\t{\n\t\tu16vec4 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER int64 packInt2x32(i32vec2 const& v)\n\t{\n\t\tint64 Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER i32vec2 unpackInt2x32(int64 p)\n\t{\n\t\ti32vec2 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint64 packUint2x32(u32vec2 const& v)\n\t{\n\t\tuint64 Pack = 0;\n\t\tmemcpy(&Pack, &v, sizeof(Pack));\n\t\treturn Pack;\n\t}\n\n\tGLM_FUNC_QUALIFIER u32vec2 unpackUint2x32(uint64 p)\n\t{\n\t\tu32vec2 Unpack;\n\t\tmemcpy(&Unpack, &p, sizeof(Unpack));\n\t\treturn Unpack;\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/quaternion.hpp",
    "content": "/// @ref gtc_quaternion\n/// @file glm/gtc/quaternion.hpp\n///\n/// @see core (dependence)\n/// @see gtc_constants (dependence)\n///\n/// @defgroup gtc_quaternion GLM_GTC_quaternion\n/// @ingroup gtc\n///\n/// Include <glm/gtc/quaternion.hpp> to use the features of this extension.\n///\n/// Defines a templated quaternion type and several quaternion operations.\n\n#pragma once\n\n// Dependency:\n#include \"../gtc/constants.hpp\"\n#include \"../gtc/matrix_transform.hpp\"\n#include \"../ext/vector_relational.hpp\"\n#include \"../ext/quaternion_common.hpp\"\n#include \"../ext/quaternion_float.hpp\"\n#include \"../ext/quaternion_float_precision.hpp\"\n#include \"../ext/quaternion_double.hpp\"\n#include \"../ext/quaternion_double_precision.hpp\"\n#include \"../ext/quaternion_relational.hpp\"\n#include \"../ext/quaternion_geometric.hpp\"\n#include \"../ext/quaternion_trigonometric.hpp\"\n#include \"../ext/quaternion_transform.hpp\"\n#include \"../detail/type_mat3x3.hpp\"\n#include \"../detail/type_mat4x4.hpp\"\n#include \"../detail/type_vec3.hpp\"\n#include \"../detail/type_vec4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_quaternion extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_quaternion\n\t/// @{\n\n\t/// Returns euler angles, pitch as x, yaw as y, roll as z.\n\t/// The result is expressed in radians.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see gtc_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> eulerAngles(qua<T, Q> const& x);\n\n\t/// Returns roll value of euler angles expressed in radians.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see gtc_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T roll(qua<T, Q> const& x);\n\n\t/// Returns pitch value of euler angles expressed in radians.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see gtc_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T pitch(qua<T, Q> const& x);\n\n\t/// Returns yaw value of euler angles expressed in radians.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see gtc_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T yaw(qua<T, Q> const& x);\n\n\t/// Converts a quaternion to a 3 * 3 matrix.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see gtc_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> mat3_cast(qua<T, Q> const& x);\n\n\t/// Converts a quaternion to a 4 * 4 matrix.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see gtc_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> mat4_cast(qua<T, Q> const& x);\n\n\t/// Converts a pure rotation 3 * 3 matrix to a quaternion.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see gtc_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> quat_cast(mat<3, 3, T, Q> const& x);\n\n\t/// Converts a pure rotation 4 * 4 matrix to a quaternion.\n\t///\n\t/// @tparam T Floating-point scalar types.\n\t///\n\t/// @see gtc_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> quat_cast(mat<4, 4, T, Q> const& x);\n\n\t/// Returns the component-wise comparison result of x < y.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_quaternion_relational\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> lessThan(qua<T, Q> const& x, qua<T, Q> const& y);\n\n\t/// Returns the component-wise comparison of result x <= y.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_quaternion_relational\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> lessThanEqual(qua<T, Q> const& x, qua<T, Q> const& y);\n\n\t/// Returns the component-wise comparison of result x > y.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_quaternion_relational\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> greaterThan(qua<T, Q> const& x, qua<T, Q> const& y);\n\n\t/// Returns the component-wise comparison of result x >= y.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_quaternion_relational\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, bool, Q> greaterThanEqual(qua<T, Q> const& x, qua<T, Q> const& y);\n\n\t/// Build a look at quaternion based on the default handedness.\n\t///\n\t/// @param direction Desired forward direction. Needs to be normalized.\n\t/// @param up Up vector, how the camera is oriented. Typically (0, 1, 0).\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> quatLookAt(\n\t\tvec<3, T, Q> const& direction,\n\t\tvec<3, T, Q> const& up);\n\n\t/// Build a right-handed look at quaternion.\n\t///\n\t/// @param direction Desired forward direction onto which the -z-axis gets mapped. Needs to be normalized.\n\t/// @param up Up vector, how the camera is oriented. Typically (0, 1, 0).\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> quatLookAtRH(\n\t\tvec<3, T, Q> const& direction,\n\t\tvec<3, T, Q> const& up);\n\n\t/// Build a left-handed look at quaternion.\n\t///\n\t/// @param direction Desired forward direction onto which the +z-axis gets mapped. Needs to be normalized.\n\t/// @param up Up vector, how the camera is oriented. Typically (0, 1, 0).\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> quatLookAtLH(\n\t\tvec<3, T, Q> const& direction,\n\t\tvec<3, T, Q> const& up);\n\t/// @}\n} //namespace glm\n\n#include \"quaternion.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/quaternion.inl",
    "content": "#include \"../trigonometric.hpp\"\n#include \"../geometric.hpp\"\n#include \"../exponential.hpp\"\n#include \"epsilon.hpp\"\n#include <limits>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> eulerAngles(qua<T, Q> const& x)\n\t{\n\t\treturn vec<3, T, Q>(pitch(x), yaw(x), roll(x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T roll(qua<T, Q> const& q)\n\t{\n\t\tT const y = static_cast<T>(2) * (q.x * q.y + q.w * q.z);\n\t\tT const x = q.w * q.w + q.x * q.x - q.y * q.y - q.z * q.z;\n\n\t\tif(all(equal(vec<2, T, Q>(x, y), vec<2, T, Q>(0), epsilon<T>()))) //avoid atan2(0,0) - handle singularity - Matiis\n\t\t\treturn static_cast<T>(0);\n\n\t\treturn static_cast<T>(atan(y, x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T pitch(qua<T, Q> const& q)\n\t{\n\t\t//return T(atan(T(2) * (q.y * q.z + q.w * q.x), q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z));\n\t\tT const y = static_cast<T>(2) * (q.y * q.z + q.w * q.x);\n\t\tT const x = q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z;\n\n\t\tif(all(equal(vec<2, T, Q>(x, y), vec<2, T, Q>(0), epsilon<T>()))) //avoid atan2(0,0) - handle singularity - Matiis\n\t\t\treturn static_cast<T>(static_cast<T>(2) * atan(q.x, q.w));\n\n\t\treturn static_cast<T>(atan(y, x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T yaw(qua<T, Q> const& q)\n\t{\n\t\treturn asin(clamp(static_cast<T>(-2) * (q.x * q.z - q.w * q.y), static_cast<T>(-1), static_cast<T>(1)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat3_cast(qua<T, Q> const& q)\n\t{\n\t\tmat<3, 3, T, Q> Result(T(1));\n\t\tT qxx(q.x * q.x);\n\t\tT qyy(q.y * q.y);\n\t\tT qzz(q.z * q.z);\n\t\tT qxz(q.x * q.z);\n\t\tT qxy(q.x * q.y);\n\t\tT qyz(q.y * q.z);\n\t\tT qwx(q.w * q.x);\n\t\tT qwy(q.w * q.y);\n\t\tT qwz(q.w * q.z);\n\n\t\tResult[0][0] = T(1) - T(2) * (qyy +  qzz);\n\t\tResult[0][1] = T(2) * (qxy + qwz);\n\t\tResult[0][2] = T(2) * (qxz - qwy);\n\n\t\tResult[1][0] = T(2) * (qxy - qwz);\n\t\tResult[1][1] = T(1) - T(2) * (qxx +  qzz);\n\t\tResult[1][2] = T(2) * (qyz + qwx);\n\n\t\tResult[2][0] = T(2) * (qxz + qwy);\n\t\tResult[2][1] = T(2) * (qyz - qwx);\n\t\tResult[2][2] = T(1) - T(2) * (qxx +  qyy);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat4_cast(qua<T, Q> const& q)\n\t{\n\t\treturn mat<4, 4, T, Q>(mat3_cast(q));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> quat_cast(mat<3, 3, T, Q> const& m)\n\t{\n\t\tT fourXSquaredMinus1 = m[0][0] - m[1][1] - m[2][2];\n\t\tT fourYSquaredMinus1 = m[1][1] - m[0][0] - m[2][2];\n\t\tT fourZSquaredMinus1 = m[2][2] - m[0][0] - m[1][1];\n\t\tT fourWSquaredMinus1 = m[0][0] + m[1][1] + m[2][2];\n\n\t\tint biggestIndex = 0;\n\t\tT fourBiggestSquaredMinus1 = fourWSquaredMinus1;\n\t\tif(fourXSquaredMinus1 > fourBiggestSquaredMinus1)\n\t\t{\n\t\t\tfourBiggestSquaredMinus1 = fourXSquaredMinus1;\n\t\t\tbiggestIndex = 1;\n\t\t}\n\t\tif(fourYSquaredMinus1 > fourBiggestSquaredMinus1)\n\t\t{\n\t\t\tfourBiggestSquaredMinus1 = fourYSquaredMinus1;\n\t\t\tbiggestIndex = 2;\n\t\t}\n\t\tif(fourZSquaredMinus1 > fourBiggestSquaredMinus1)\n\t\t{\n\t\t\tfourBiggestSquaredMinus1 = fourZSquaredMinus1;\n\t\t\tbiggestIndex = 3;\n\t\t}\n\n\t\tT biggestVal = sqrt(fourBiggestSquaredMinus1 + static_cast<T>(1)) * static_cast<T>(0.5);\n\t\tT mult = static_cast<T>(0.25) / biggestVal;\n\n\t\tswitch(biggestIndex)\n\t\t{\n\t\tcase 0:\n\t\t\treturn qua<T, Q>(biggestVal, (m[1][2] - m[2][1]) * mult, (m[2][0] - m[0][2]) * mult, (m[0][1] - m[1][0]) * mult);\n\t\tcase 1:\n\t\t\treturn qua<T, Q>((m[1][2] - m[2][1]) * mult, biggestVal, (m[0][1] + m[1][0]) * mult, (m[2][0] + m[0][2]) * mult);\n\t\tcase 2:\n\t\t\treturn qua<T, Q>((m[2][0] - m[0][2]) * mult, (m[0][1] + m[1][0]) * mult, biggestVal, (m[1][2] + m[2][1]) * mult);\n\t\tcase 3:\n\t\t\treturn qua<T, Q>((m[0][1] - m[1][0]) * mult, (m[2][0] + m[0][2]) * mult, (m[1][2] + m[2][1]) * mult, biggestVal);\n\t\tdefault: // Silence a -Wswitch-default warning in GCC. Should never actually get here. Assert is just for sanity.\n\t\t\tassert(false);\n\t\t\treturn qua<T, Q>(1, 0, 0, 0);\n\t\t}\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> quat_cast(mat<4, 4, T, Q> const& m4)\n\t{\n\t\treturn quat_cast(mat<3, 3, T, Q>(m4));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> lessThan(qua<T, Q> const& x, qua<T, Q> const& y)\n\t{\n\t\tvec<4, bool, Q> Result;\n\t\tfor(length_t i = 0; i < x.length(); ++i)\n\t\t\tResult[i] = x[i] < y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> lessThanEqual(qua<T, Q> const& x, qua<T, Q> const& y)\n\t{\n\t\tvec<4, bool, Q> Result;\n\t\tfor(length_t i = 0; i < x.length(); ++i)\n\t\t\tResult[i] = x[i] <= y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> greaterThan(qua<T, Q> const& x, qua<T, Q> const& y)\n\t{\n\t\tvec<4, bool, Q> Result;\n\t\tfor(length_t i = 0; i < x.length(); ++i)\n\t\t\tResult[i] = x[i] > y[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> greaterThanEqual(qua<T, Q> const& x, qua<T, Q> const& y)\n\t{\n\t\tvec<4, bool, Q> Result;\n\t\tfor(length_t i = 0; i < x.length(); ++i)\n\t\t\tResult[i] = x[i] >= y[i];\n\t\treturn Result;\n\t}\n\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> quatLookAt(vec<3, T, Q> const& direction, vec<3, T, Q> const& up)\n\t{\n#\t\tif GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT\n\t\t\treturn quatLookAtLH(direction, up);\n#\t\telse\n\t\t\treturn quatLookAtRH(direction, up);\n# \t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> quatLookAtRH(vec<3, T, Q> const& direction, vec<3, T, Q> const& up)\n\t{\n\t\tmat<3, 3, T, Q> Result;\n\n\t\tResult[2] = -direction;\n\t\tvec<3, T, Q> const& Right = cross(up, Result[2]);\n\t\tResult[0] = Right * inversesqrt(max(static_cast<T>(0.00001), dot(Right, Right)));\n\t\tResult[1] = cross(Result[2], Result[0]);\n\n\t\treturn quat_cast(Result);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> quatLookAtLH(vec<3, T, Q> const& direction, vec<3, T, Q> const& up)\n\t{\n\t\tmat<3, 3, T, Q> Result;\n\n\t\tResult[2] = direction;\n\t\tvec<3, T, Q> const& Right = cross(up, Result[2]);\n\t\tResult[0] = Right * inversesqrt(max(static_cast<T>(0.00001), dot(Right, Right)));\n\t\tResult[1] = cross(Result[2], Result[0]);\n\n\t\treturn quat_cast(Result);\n\t}\n}//namespace glm\n\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#\tinclude \"quaternion_simd.inl\"\n#endif\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/quaternion_simd.inl",
    "content": ""
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/random.hpp",
    "content": "/// @ref gtc_random\n/// @file glm/gtc/random.hpp\n///\n/// @see core (dependence)\n/// @see gtx_random (extended)\n///\n/// @defgroup gtc_random GLM_GTC_random\n/// @ingroup gtc\n///\n/// Include <glm/gtc/random.hpp> to use the features of this extension.\n///\n/// Generate random number from various distribution methods.\n\n#pragma once\n\n// Dependency:\n#include \"../ext/scalar_int_sized.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_random extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_random\n\t/// @{\n\n\t/// Generate random numbers in the interval [Min, Max], according a linear distribution\n\t///\n\t/// @param Min Minimum value included in the sampling\n\t/// @param Max Maximum value included in the sampling\n\t/// @tparam genType Value type. Currently supported: float or double scalars.\n\t/// @see gtc_random\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType linearRand(genType Min, genType Max);\n\n\t/// Generate random numbers in the interval [Min, Max], according a linear distribution\n\t///\n\t/// @param Min Minimum value included in the sampling\n\t/// @param Max Maximum value included in the sampling\n\t/// @tparam T Value type. Currently supported: float or double.\n\t///\n\t/// @see gtc_random\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> linearRand(vec<L, T, Q> const& Min, vec<L, T, Q> const& Max);\n\n\t/// Generate random numbers in the interval [Min, Max], according a gaussian distribution\n\t///\n\t/// @see gtc_random\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType gaussRand(genType Mean, genType Deviation);\n\n\t/// Generate a random 2D vector which coordinates are regularly distributed on a circle of a given radius\n\t///\n\t/// @see gtc_random\n\ttemplate<typename T>\n\tGLM_FUNC_DECL vec<2, T, defaultp> circularRand(T Radius);\n\n\t/// Generate a random 3D vector which coordinates are regularly distributed on a sphere of a given radius\n\t///\n\t/// @see gtc_random\n\ttemplate<typename T>\n\tGLM_FUNC_DECL vec<3, T, defaultp> sphericalRand(T Radius);\n\n\t/// Generate a random 2D vector which coordinates are regularly distributed within the area of a disk of a given radius\n\t///\n\t/// @see gtc_random\n\ttemplate<typename T>\n\tGLM_FUNC_DECL vec<2, T, defaultp> diskRand(T Radius);\n\n\t/// Generate a random 3D vector which coordinates are regularly distributed within the volume of a ball of a given radius\n\t///\n\t/// @see gtc_random\n\ttemplate<typename T>\n\tGLM_FUNC_DECL vec<3, T, defaultp> ballRand(T Radius);\n\n\t/// @}\n}//namespace glm\n\n#include \"random.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/random.inl",
    "content": "#include \"../geometric.hpp\"\n#include \"../exponential.hpp\"\n#include \"../trigonometric.hpp\"\n#include \"../detail/type_vec1.hpp\"\n#include <cstdlib>\n#include <ctime>\n#include <cassert>\n#include <cmath>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate <length_t L, typename T, qualifier Q>\n\tstruct compute_rand\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call();\n\t};\n\n\ttemplate <qualifier P>\n\tstruct compute_rand<1, uint8, P>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<1, uint8, P> call()\n\t\t{\n\t\t\treturn vec<1, uint8, P>(\n\t\t\t\tstatic_cast<uint8>(std::rand() % std::numeric_limits<uint8>::max()));\n\t\t}\n\t};\n\n\ttemplate <qualifier P>\n\tstruct compute_rand<2, uint8, P>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<2, uint8, P> call()\n\t\t{\n\t\t\treturn vec<2, uint8, P>(\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max(),\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max());\n\t\t}\n\t};\n\n\ttemplate <qualifier P>\n\tstruct compute_rand<3, uint8, P>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<3, uint8, P> call()\n\t\t{\n\t\t\treturn vec<3, uint8, P>(\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max(),\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max(),\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max());\n\t\t}\n\t};\n\n\ttemplate <qualifier P>\n\tstruct compute_rand<4, uint8, P>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, uint8, P> call()\n\t\t{\n\t\t\treturn vec<4, uint8, P>(\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max(),\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max(),\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max(),\n\t\t\t\tstd::rand() % std::numeric_limits<uint8>::max());\n\t\t}\n\t};\n\n\ttemplate <length_t L, qualifier Q>\n\tstruct compute_rand<L, uint16, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, uint16, Q> call()\n\t\t{\n\t\t\treturn\n\t\t\t\t(vec<L, uint16, Q>(compute_rand<L, uint8, Q>::call()) << static_cast<uint16>(8)) |\n\t\t\t\t(vec<L, uint16, Q>(compute_rand<L, uint8, Q>::call()) << static_cast<uint16>(0));\n\t\t}\n\t};\n\n\ttemplate <length_t L, qualifier Q>\n\tstruct compute_rand<L, uint32, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, uint32, Q> call()\n\t\t{\n\t\t\treturn\n\t\t\t\t(vec<L, uint32, Q>(compute_rand<L, uint16, Q>::call()) << static_cast<uint32>(16)) |\n\t\t\t\t(vec<L, uint32, Q>(compute_rand<L, uint16, Q>::call()) << static_cast<uint32>(0));\n\t\t}\n\t};\n\n\ttemplate <length_t L, qualifier Q>\n\tstruct compute_rand<L, uint64, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, uint64, Q> call()\n\t\t{\n\t\t\treturn\n\t\t\t\t(vec<L, uint64, Q>(compute_rand<L, uint32, Q>::call()) << static_cast<uint64>(32)) |\n\t\t\t\t(vec<L, uint64, Q>(compute_rand<L, uint32, Q>::call()) << static_cast<uint64>(0));\n\t\t}\n\t};\n\n\ttemplate <length_t L, typename T, qualifier Q>\n\tstruct compute_linearRand\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& Min, vec<L, T, Q> const& Max);\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, int8, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, int8, Q> call(vec<L, int8, Q> const& Min, vec<L, int8, Q> const& Max)\n\t\t{\n\t\t\treturn (vec<L, int8, Q>(compute_rand<L, uint8, Q>::call() % vec<L, uint8, Q>(Max + static_cast<int8>(1) - Min))) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, uint8, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, uint8, Q> call(vec<L, uint8, Q> const& Min, vec<L, uint8, Q> const& Max)\n\t\t{\n\t\t\treturn (compute_rand<L, uint8, Q>::call() % (Max + static_cast<uint8>(1) - Min)) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, int16, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, int16, Q> call(vec<L, int16, Q> const& Min, vec<L, int16, Q> const& Max)\n\t\t{\n\t\t\treturn (vec<L, int16, Q>(compute_rand<L, uint16, Q>::call() % vec<L, uint16, Q>(Max + static_cast<int16>(1) - Min))) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, uint16, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, uint16, Q> call(vec<L, uint16, Q> const& Min, vec<L, uint16, Q> const& Max)\n\t\t{\n\t\t\treturn (compute_rand<L, uint16, Q>::call() % (Max + static_cast<uint16>(1) - Min)) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, int32, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, int32, Q> call(vec<L, int32, Q> const& Min, vec<L, int32, Q> const& Max)\n\t\t{\n\t\t\treturn (vec<L, int32, Q>(compute_rand<L, uint32, Q>::call() % vec<L, uint32, Q>(Max + static_cast<int32>(1) - Min))) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, uint32, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, uint32, Q> call(vec<L, uint32, Q> const& Min, vec<L, uint32, Q> const& Max)\n\t\t{\n\t\t\treturn (compute_rand<L, uint32, Q>::call() % (Max + static_cast<uint32>(1) - Min)) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, int64, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, int64, Q> call(vec<L, int64, Q> const& Min, vec<L, int64, Q> const& Max)\n\t\t{\n\t\t\treturn (vec<L, int64, Q>(compute_rand<L, uint64, Q>::call() % vec<L, uint64, Q>(Max + static_cast<int64>(1) - Min))) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, uint64, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, uint64, Q> call(vec<L, uint64, Q> const& Min, vec<L, uint64, Q> const& Max)\n\t\t{\n\t\t\treturn (compute_rand<L, uint64, Q>::call() % (Max + static_cast<uint64>(1) - Min)) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, float, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, float, Q> call(vec<L, float, Q> const& Min, vec<L, float, Q> const& Max)\n\t\t{\n\t\t\treturn vec<L, float, Q>(compute_rand<L, uint32, Q>::call()) / static_cast<float>(std::numeric_limits<uint32>::max()) * (Max - Min) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, double, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, double, Q> call(vec<L, double, Q> const& Min, vec<L, double, Q> const& Max)\n\t\t{\n\t\t\treturn vec<L, double, Q>(compute_rand<L, uint64, Q>::call()) / static_cast<double>(std::numeric_limits<uint64>::max()) * (Max - Min) + Min;\n\t\t}\n\t};\n\n\ttemplate<length_t L, qualifier Q>\n\tstruct compute_linearRand<L, long double, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, long double, Q> call(vec<L, long double, Q> const& Min, vec<L, long double, Q> const& Max)\n\t\t{\n\t\t\treturn vec<L, long double, Q>(compute_rand<L, uint64, Q>::call()) / static_cast<long double>(std::numeric_limits<uint64>::max()) * (Max - Min) + Min;\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType linearRand(genType Min, genType Max)\n\t{\n\t\treturn detail::compute_linearRand<1, genType, highp>::call(\n\t\t\tvec<1, genType, highp>(Min),\n\t\t\tvec<1, genType, highp>(Max)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> linearRand(vec<L, T, Q> const& Min, vec<L, T, Q> const& Max)\n\t{\n\t\treturn detail::compute_linearRand<L, T, Q>::call(Min, Max);\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType gaussRand(genType Mean, genType Deviation)\n\t{\n\t\tgenType w, x1, x2;\n\n\t\tdo\n\t\t{\n\t\t\tx1 = linearRand(genType(-1), genType(1));\n\t\t\tx2 = linearRand(genType(-1), genType(1));\n\n\t\t\tw = x1 * x1 + x2 * x2;\n\t\t} while(w > genType(1));\n\n\t\treturn static_cast<genType>(x2 * Deviation * Deviation * sqrt((genType(-2) * log(w)) / w) + Mean);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> gaussRand(vec<L, T, Q> const& Mean, vec<L, T, Q> const& Deviation)\n\t{\n\t\treturn detail::functor2<vec, L, T, Q>::call(gaussRand, Mean, Deviation);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER vec<2, T, defaultp> diskRand(T Radius)\n\t{\n\t\tassert(Radius > static_cast<T>(0));\n\n\t\tvec<2, T, defaultp> Result(T(0));\n\t\tT LenRadius(T(0));\n\n\t\tdo\n\t\t{\n\t\t\tResult = linearRand(\n\t\t\t\tvec<2, T, defaultp>(-Radius),\n\t\t\t\tvec<2, T, defaultp>(Radius));\n\t\t\tLenRadius = length(Result);\n\t\t}\n\t\twhile(LenRadius > Radius);\n\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER vec<3, T, defaultp> ballRand(T Radius)\n\t{\n\t\tassert(Radius > static_cast<T>(0));\n\n\t\tvec<3, T, defaultp> Result(T(0));\n\t\tT LenRadius(T(0));\n\n\t\tdo\n\t\t{\n\t\t\tResult = linearRand(\n\t\t\t\tvec<3, T, defaultp>(-Radius),\n\t\t\t\tvec<3, T, defaultp>(Radius));\n\t\t\tLenRadius = length(Result);\n\t\t}\n\t\twhile(LenRadius > Radius);\n\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER vec<2, T, defaultp> circularRand(T Radius)\n\t{\n\t\tassert(Radius > static_cast<T>(0));\n\n\t\tT a = linearRand(T(0), static_cast<T>(6.283185307179586476925286766559));\n\t\treturn vec<2, T, defaultp>(glm::cos(a), glm::sin(a)) * Radius;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER vec<3, T, defaultp> sphericalRand(T Radius)\n\t{\n\t\tassert(Radius > static_cast<T>(0));\n\n\t\tT theta = linearRand(T(0), T(6.283185307179586476925286766559f));\n\t\tT phi = std::acos(linearRand(T(-1.0f), T(1.0f)));\n\n\t\tT x = std::sin(phi) * std::cos(theta);\n\t\tT y = std::sin(phi) * std::sin(theta);\n\t\tT z = std::cos(phi);\n\n\t\treturn vec<3, T, defaultp>(x, y, z) * Radius;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/reciprocal.hpp",
    "content": "/// @ref gtc_reciprocal\n/// @file glm/gtc/reciprocal.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_reciprocal GLM_GTC_reciprocal\n/// @ingroup gtc\n///\n/// Include <glm/gtc/reciprocal.hpp> to use the features of this extension.\n///\n/// Define secant, cosecant and cotangent functions.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_reciprocal extension included\")\n#endif\n\n#include \"../ext/scalar_reciprocal.hpp\"\n#include \"../ext/vector_reciprocal.hpp\"\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/round.hpp",
    "content": "/// @ref gtc_round\n/// @file glm/gtc/round.hpp\n///\n/// @see core (dependence)\n/// @see gtc_round (dependence)\n///\n/// @defgroup gtc_round GLM_GTC_round\n/// @ingroup gtc\n///\n/// Include <glm/gtc/round.hpp> to use the features of this extension.\n///\n/// Rounding value to specific boundings\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/_vectorize.hpp\"\n#include \"../vector_relational.hpp\"\n#include \"../common.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_round extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_round\n\t/// @{\n\n\t/// Return the power of two number which value is just higher the input value,\n\t/// round up to a power of two.\n\t///\n\t/// @see gtc_round\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType ceilPowerOfTwo(genIUType v);\n\n\t/// Return the power of two number which value is just higher the input value,\n\t/// round up to a power of two.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_round\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> ceilPowerOfTwo(vec<L, T, Q> const& v);\n\n\t/// Return the power of two number which value is just lower the input value,\n\t/// round down to a power of two.\n\t///\n\t/// @see gtc_round\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType floorPowerOfTwo(genIUType v);\n\n\t/// Return the power of two number which value is just lower the input value,\n\t/// round down to a power of two.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_round\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> floorPowerOfTwo(vec<L, T, Q> const& v);\n\n\t/// Return the power of two number which value is the closet to the input value.\n\t///\n\t/// @see gtc_round\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType roundPowerOfTwo(genIUType v);\n\n\t/// Return the power of two number which value is the closet to the input value.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_round\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> roundPowerOfTwo(vec<L, T, Q> const& v);\n\n\t/// Higher multiple number of Source.\n\t///\n\t/// @tparam genType Floating-point or integer scalar or vector types.\n\t///\n\t/// @param v Source value to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see gtc_round\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType ceilMultiple(genType v, genType Multiple);\n\n\t/// Higher multiple number of Source.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @param v Source values to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see gtc_round\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> ceilMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);\n\n\t/// Lower multiple number of Source.\n\t///\n\t/// @tparam genType Floating-point or integer scalar or vector types.\n\t///\n\t/// @param v Source value to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see gtc_round\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType floorMultiple(genType v, genType Multiple);\n\n\t/// Lower multiple number of Source.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @param v Source values to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see gtc_round\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> floorMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);\n\n\t/// Lower multiple number of Source.\n\t///\n\t/// @tparam genType Floating-point or integer scalar or vector types.\n\t///\n\t/// @param v Source value to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see gtc_round\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType roundMultiple(genType v, genType Multiple);\n\n\t/// Lower multiple number of Source.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @param v Source values to which is applied the function\n\t/// @param Multiple Must be a null or positive value\n\t///\n\t/// @see gtc_round\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> roundMultiple(vec<L, T, Q> const& v, vec<L, T, Q> const& Multiple);\n\n\t/// @}\n} //namespace glm\n\n#include \"round.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/round.inl",
    "content": "/// @ref gtc_round\n\n#include \"../integer.hpp\"\n#include \"../ext/vector_integer.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<bool is_float, bool is_signed>\n\tstruct compute_roundMultiple {};\n\n\ttemplate<>\n\tstruct compute_roundMultiple<true, true>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tif (Source >= genType(0))\n\t\t\t\treturn Source - std::fmod(Source, Multiple);\n\t\t\telse\n\t\t\t{\n\t\t\t\tgenType Tmp = Source + genType(1);\n\t\t\t\treturn Tmp - std::fmod(Tmp, Multiple) - Multiple;\n\t\t\t}\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct compute_roundMultiple<false, false>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tif (Source >= genType(0))\n\t\t\t\treturn Source - Source % Multiple;\n\t\t\telse\n\t\t\t{\n\t\t\t\tgenType Tmp = Source + genType(1);\n\t\t\t\treturn Tmp - Tmp % Multiple - Multiple;\n\t\t\t}\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct compute_roundMultiple<false, true>\n\t{\n\t\ttemplate<typename genType>\n\t\tGLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple)\n\t\t{\n\t\t\tif (Source >= genType(0))\n\t\t\t\treturn Source - Source % Multiple;\n\t\t\telse\n\t\t\t{\n\t\t\t\tgenType Tmp = Source + genType(1);\n\t\t\t\treturn Tmp - Tmp % Multiple - Multiple;\n\t\t\t}\n\t\t}\n\t};\n}//namespace detail\n\n\t//////////////////\n\t// ceilPowerOfTwo\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType ceilPowerOfTwo(genType value)\n\t{\n\t\treturn detail::compute_ceilPowerOfTwo<1, genType, defaultp, std::numeric_limits<genType>::is_signed>::call(vec<1, genType, defaultp>(value)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> ceilPowerOfTwo(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::compute_ceilPowerOfTwo<L, T, Q, std::numeric_limits<T>::is_signed>::call(v);\n\t}\n\n\t///////////////////\n\t// floorPowerOfTwo\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType floorPowerOfTwo(genType value)\n\t{\n\t\treturn isPowerOfTwo(value) ? value : static_cast<genType>(1) << findMSB(value);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> floorPowerOfTwo(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(floorPowerOfTwo, v);\n\t}\n\n\t///////////////////\n\t// roundPowerOfTwo\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType roundPowerOfTwo(genIUType value)\n\t{\n\t\tif(isPowerOfTwo(value))\n\t\t\treturn value;\n\n\t\tgenIUType const prev = static_cast<genIUType>(1) << findMSB(value);\n\t\tgenIUType const next = prev << static_cast<genIUType>(1);\n\t\treturn (next - value) < (value - prev) ? next : prev;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> roundPowerOfTwo(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(roundPowerOfTwo, v);\n\t}\n\n\t//////////////////////\n\t// ceilMultiple\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType ceilMultiple(genType Source, genType Multiple)\n\t{\n\t\treturn detail::compute_ceilMultiple<std::numeric_limits<genType>::is_iec559, std::numeric_limits<genType>::is_signed>::call(Source, Multiple);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> ceilMultiple(vec<L, T, Q> const& Source, vec<L, T, Q> const& Multiple)\n\t{\n\t\treturn detail::functor2<vec, L, T, Q>::call(ceilMultiple, Source, Multiple);\n\t}\n\n\t//////////////////////\n\t// floorMultiple\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType floorMultiple(genType Source, genType Multiple)\n\t{\n\t\treturn detail::compute_floorMultiple<std::numeric_limits<genType>::is_iec559, std::numeric_limits<genType>::is_signed>::call(Source, Multiple);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> floorMultiple(vec<L, T, Q> const& Source, vec<L, T, Q> const& Multiple)\n\t{\n\t\treturn detail::functor2<vec, L, T, Q>::call(floorMultiple, Source, Multiple);\n\t}\n\n\t//////////////////////\n\t// roundMultiple\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType roundMultiple(genType Source, genType Multiple)\n\t{\n\t\treturn detail::compute_roundMultiple<std::numeric_limits<genType>::is_iec559, std::numeric_limits<genType>::is_signed>::call(Source, Multiple);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> roundMultiple(vec<L, T, Q> const& Source, vec<L, T, Q> const& Multiple)\n\t{\n\t\treturn detail::functor2<vec, L, T, Q>::call(roundMultiple, Source, Multiple);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/type_aligned.hpp",
    "content": "/// @ref gtc_type_aligned\n/// @file glm/gtc/type_aligned.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_type_aligned GLM_GTC_type_aligned\n/// @ingroup gtc\n///\n/// Include <glm/gtc/type_aligned.hpp> to use the features of this extension.\n///\n/// Aligned types allowing SIMD optimizations of vectors and matrices types\n\n#pragma once\n\n#if (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE)\n#\terror \"GLM: Aligned gentypes require to enable C++ language extensions. Define GLM_FORCE_ALIGNED_GENTYPES before including GLM headers to use aligned types.\"\n#endif\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n# pragma message(\"GLM: GLM_GTC_type_aligned extension included\")\n#endif\n\n#include \"../mat4x4.hpp\"\n#include \"../mat4x3.hpp\"\n#include \"../mat4x2.hpp\"\n#include \"../mat3x4.hpp\"\n#include \"../mat3x3.hpp\"\n#include \"../mat3x2.hpp\"\n#include \"../mat2x4.hpp\"\n#include \"../mat2x3.hpp\"\n#include \"../mat2x2.hpp\"\n#include \"../gtc/vec1.hpp\"\n#include \"../vec2.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup gtc_type_aligned\n\t/// @{\n\n\t// -- *vec1 --\n\n\t/// 1 component vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, aligned_highp>\taligned_highp_vec1;\n\n\t/// 1 component vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, aligned_mediump>\taligned_mediump_vec1;\n\n\t/// 1 component vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, aligned_lowp>\t\taligned_lowp_vec1;\n\n\t/// 1 component vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, aligned_highp>\taligned_highp_dvec1;\n\n\t/// 1 component vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, aligned_mediump>\taligned_mediump_dvec1;\n\n\t/// 1 component vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, aligned_lowp>\taligned_lowp_dvec1;\n\n\t/// 1 component vector aligned in memory of signed integer numbers.\n\ttypedef vec<1, int, aligned_highp>\t\taligned_highp_ivec1;\n\n\t/// 1 component vector aligned in memory of signed integer numbers.\n\ttypedef vec<1, int, aligned_mediump>\taligned_mediump_ivec1;\n\n\t/// 1 component vector aligned in memory of signed integer numbers.\n\ttypedef vec<1, int, aligned_lowp>\t\taligned_lowp_ivec1;\n\n\t/// 1 component vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<1, uint, aligned_highp>\t\taligned_highp_uvec1;\n\n\t/// 1 component vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<1, uint, aligned_mediump>\taligned_mediump_uvec1;\n\n\t/// 1 component vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<1, uint, aligned_lowp>\t\taligned_lowp_uvec1;\n\n\t/// 1 component vector aligned in memory of bool values.\n\ttypedef vec<1, bool, aligned_highp>\t\taligned_highp_bvec1;\n\n\t/// 1 component vector aligned in memory of bool values.\n\ttypedef vec<1, bool, aligned_mediump>\taligned_mediump_bvec1;\n\n\t/// 1 component vector aligned in memory of bool values.\n\ttypedef vec<1, bool, aligned_lowp>\t\taligned_lowp_bvec1;\n\n\t/// 1 component vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, packed_highp>\t\tpacked_highp_vec1;\n\n\t/// 1 component vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, packed_mediump>\tpacked_mediump_vec1;\n\n\t/// 1 component vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<1, float, packed_lowp>\t\tpacked_lowp_vec1;\n\n\t/// 1 component vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, packed_highp>\tpacked_highp_dvec1;\n\n\t/// 1 component vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, packed_mediump>\tpacked_mediump_dvec1;\n\n\t/// 1 component vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<1, double, packed_lowp>\t\tpacked_lowp_dvec1;\n\n\t/// 1 component vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<1, int, packed_highp>\t\tpacked_highp_ivec1;\n\n\t/// 1 component vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<1, int, packed_mediump>\t\tpacked_mediump_ivec1;\n\n\t/// 1 component vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<1, int, packed_lowp>\t\tpacked_lowp_ivec1;\n\n\t/// 1 component vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<1, uint, packed_highp>\t\tpacked_highp_uvec1;\n\n\t/// 1 component vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<1, uint, packed_mediump>\tpacked_mediump_uvec1;\n\n\t/// 1 component vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<1, uint, packed_lowp>\t\tpacked_lowp_uvec1;\n\n\t/// 1 component vector tightly packed in memory of bool values.\n\ttypedef vec<1, bool, packed_highp>\t\tpacked_highp_bvec1;\n\n\t/// 1 component vector tightly packed in memory of bool values.\n\ttypedef vec<1, bool, packed_mediump>\tpacked_mediump_bvec1;\n\n\t/// 1 component vector tightly packed in memory of bool values.\n\ttypedef vec<1, bool, packed_lowp>\t\tpacked_lowp_bvec1;\n\n\t// -- *vec2 --\n\n\t/// 2 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<2, float, aligned_highp>\taligned_highp_vec2;\n\n\t/// 2 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<2, float, aligned_mediump>\taligned_mediump_vec2;\n\n\t/// 2 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<2, float, aligned_lowp>\t\taligned_lowp_vec2;\n\n\t/// 2 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<2, double, aligned_highp>\taligned_highp_dvec2;\n\n\t/// 2 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<2, double, aligned_mediump>\taligned_mediump_dvec2;\n\n\t/// 2 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<2, double, aligned_lowp>\taligned_lowp_dvec2;\n\n\t/// 2 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<2, int, aligned_highp>\t\taligned_highp_ivec2;\n\n\t/// 2 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<2, int, aligned_mediump>\taligned_mediump_ivec2;\n\n\t/// 2 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<2, int, aligned_lowp>\t\taligned_lowp_ivec2;\n\n\t/// 2 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<2, uint, aligned_highp>\t\taligned_highp_uvec2;\n\n\t/// 2 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<2, uint, aligned_mediump>\taligned_mediump_uvec2;\n\n\t/// 2 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<2, uint, aligned_lowp>\t\taligned_lowp_uvec2;\n\n\t/// 2 components vector aligned in memory of bool values.\n\ttypedef vec<2, bool, aligned_highp>\t\taligned_highp_bvec2;\n\n\t/// 2 components vector aligned in memory of bool values.\n\ttypedef vec<2, bool, aligned_mediump>\taligned_mediump_bvec2;\n\n\t/// 2 components vector aligned in memory of bool values.\n\ttypedef vec<2, bool, aligned_lowp>\t\taligned_lowp_bvec2;\n\n\t/// 2 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<2, float, packed_highp>\t\tpacked_highp_vec2;\n\n\t/// 2 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<2, float, packed_mediump>\tpacked_mediump_vec2;\n\n\t/// 2 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<2, float, packed_lowp>\t\tpacked_lowp_vec2;\n\n\t/// 2 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<2, double, packed_highp>\tpacked_highp_dvec2;\n\n\t/// 2 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<2, double, packed_mediump>\tpacked_mediump_dvec2;\n\n\t/// 2 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<2, double, packed_lowp>\t\tpacked_lowp_dvec2;\n\n\t/// 2 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<2, int, packed_highp>\t\tpacked_highp_ivec2;\n\n\t/// 2 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<2, int, packed_mediump>\t\tpacked_mediump_ivec2;\n\n\t/// 2 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<2, int, packed_lowp>\t\tpacked_lowp_ivec2;\n\n\t/// 2 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<2, uint, packed_highp>\t\tpacked_highp_uvec2;\n\n\t/// 2 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<2, uint, packed_mediump>\tpacked_mediump_uvec2;\n\n\t/// 2 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<2, uint, packed_lowp>\t\tpacked_lowp_uvec2;\n\n\t/// 2 components vector tightly packed in memory of bool values.\n\ttypedef vec<2, bool, packed_highp>\t\tpacked_highp_bvec2;\n\n\t/// 2 components vector tightly packed in memory of bool values.\n\ttypedef vec<2, bool, packed_mediump>\tpacked_mediump_bvec2;\n\n\t/// 2 components vector tightly packed in memory of bool values.\n\ttypedef vec<2, bool, packed_lowp>\t\tpacked_lowp_bvec2;\n\n\t// -- *vec3 --\n\n\t/// 3 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<3, float, aligned_highp>\taligned_highp_vec3;\n\n\t/// 3 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<3, float, aligned_mediump>\taligned_mediump_vec3;\n\n\t/// 3 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<3, float, aligned_lowp>\t\taligned_lowp_vec3;\n\n\t/// 3 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<3, double, aligned_highp>\taligned_highp_dvec3;\n\n\t/// 3 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<3, double, aligned_mediump>\taligned_mediump_dvec3;\n\n\t/// 3 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<3, double, aligned_lowp>\taligned_lowp_dvec3;\n\n\t/// 3 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<3, int, aligned_highp>\t\taligned_highp_ivec3;\n\n\t/// 3 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<3, int, aligned_mediump>\taligned_mediump_ivec3;\n\n\t/// 3 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<3, int, aligned_lowp>\t\taligned_lowp_ivec3;\n\n\t/// 3 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<3, uint, aligned_highp>\t\taligned_highp_uvec3;\n\n\t/// 3 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<3, uint, aligned_mediump>\taligned_mediump_uvec3;\n\n\t/// 3 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<3, uint, aligned_lowp>\t\taligned_lowp_uvec3;\n\n\t/// 3 components vector aligned in memory of bool values.\n\ttypedef vec<3, bool, aligned_highp>\t\taligned_highp_bvec3;\n\n\t/// 3 components vector aligned in memory of bool values.\n\ttypedef vec<3, bool, aligned_mediump>\taligned_mediump_bvec3;\n\n\t/// 3 components vector aligned in memory of bool values.\n\ttypedef vec<3, bool, aligned_lowp>\t\taligned_lowp_bvec3;\n\n\t/// 3 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<3, float, packed_highp>\t\tpacked_highp_vec3;\n\n\t/// 3 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<3, float, packed_mediump>\tpacked_mediump_vec3;\n\n\t/// 3 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<3, float, packed_lowp>\t\tpacked_lowp_vec3;\n\n\t/// 3 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<3, double, packed_highp>\tpacked_highp_dvec3;\n\n\t/// 3 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<3, double, packed_mediump>\tpacked_mediump_dvec3;\n\n\t/// 3 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<3, double, packed_lowp>\t\tpacked_lowp_dvec3;\n\n\t/// 3 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<3, int, packed_highp>\t\tpacked_highp_ivec3;\n\n\t/// 3 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<3, int, packed_mediump>\t\tpacked_mediump_ivec3;\n\n\t/// 3 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<3, int, packed_lowp>\t\tpacked_lowp_ivec3;\n\n\t/// 3 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<3, uint, packed_highp>\t\tpacked_highp_uvec3;\n\n\t/// 3 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<3, uint, packed_mediump>\tpacked_mediump_uvec3;\n\n\t/// 3 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<3, uint, packed_lowp>\t\tpacked_lowp_uvec3;\n\n\t/// 3 components vector tightly packed in memory of bool values.\n\ttypedef vec<3, bool, packed_highp>\t\tpacked_highp_bvec3;\n\n\t/// 3 components vector tightly packed in memory of bool values.\n\ttypedef vec<3, bool, packed_mediump>\tpacked_mediump_bvec3;\n\n\t/// 3 components vector tightly packed in memory of bool values.\n\ttypedef vec<3, bool, packed_lowp>\t\tpacked_lowp_bvec3;\n\n\t// -- *vec4 --\n\n\t/// 4 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<4, float, aligned_highp>\taligned_highp_vec4;\n\n\t/// 4 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<4, float, aligned_mediump>\taligned_mediump_vec4;\n\n\t/// 4 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<4, float, aligned_lowp>\t\taligned_lowp_vec4;\n\n\t/// 4 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<4, double, aligned_highp>\taligned_highp_dvec4;\n\n\t/// 4 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<4, double, aligned_mediump>\taligned_mediump_dvec4;\n\n\t/// 4 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<4, double, aligned_lowp>\taligned_lowp_dvec4;\n\n\t/// 4 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<4, int, aligned_highp>\t\taligned_highp_ivec4;\n\n\t/// 4 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<4, int, aligned_mediump>\taligned_mediump_ivec4;\n\n\t/// 4 components vector aligned in memory of signed integer numbers.\n\ttypedef vec<4, int, aligned_lowp>\t\taligned_lowp_ivec4;\n\n\t/// 4 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<4, uint, aligned_highp>\t\taligned_highp_uvec4;\n\n\t/// 4 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<4, uint, aligned_mediump>\taligned_mediump_uvec4;\n\n\t/// 4 components vector aligned in memory of unsigned integer numbers.\n\ttypedef vec<4, uint, aligned_lowp>\t\taligned_lowp_uvec4;\n\n\t/// 4 components vector aligned in memory of bool values.\n\ttypedef vec<4, bool, aligned_highp>\t\taligned_highp_bvec4;\n\n\t/// 4 components vector aligned in memory of bool values.\n\ttypedef vec<4, bool, aligned_mediump>\taligned_mediump_bvec4;\n\n\t/// 4 components vector aligned in memory of bool values.\n\ttypedef vec<4, bool, aligned_lowp>\t\taligned_lowp_bvec4;\n\n\t/// 4 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<4, float, packed_highp>\t\tpacked_highp_vec4;\n\n\t/// 4 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<4, float, packed_mediump>\tpacked_mediump_vec4;\n\n\t/// 4 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<4, float, packed_lowp>\t\tpacked_lowp_vec4;\n\n\t/// 4 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef vec<4, double, packed_highp>\tpacked_highp_dvec4;\n\n\t/// 4 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef vec<4, double, packed_mediump>\tpacked_mediump_dvec4;\n\n\t/// 4 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef vec<4, double, packed_lowp>\t\tpacked_lowp_dvec4;\n\n\t/// 4 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<4, int, packed_highp>\t\tpacked_highp_ivec4;\n\n\t/// 4 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<4, int, packed_mediump>\t\tpacked_mediump_ivec4;\n\n\t/// 4 components vector tightly packed in memory of signed integer numbers.\n\ttypedef vec<4, int, packed_lowp>\t\tpacked_lowp_ivec4;\n\n\t/// 4 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<4, uint, packed_highp>\t\tpacked_highp_uvec4;\n\n\t/// 4 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<4, uint, packed_mediump>\tpacked_mediump_uvec4;\n\n\t/// 4 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef vec<4, uint, packed_lowp>\t\tpacked_lowp_uvec4;\n\n\t/// 4 components vector tightly packed in memory of bool values.\n\ttypedef vec<4, bool, packed_highp>\t\tpacked_highp_bvec4;\n\n\t/// 4 components vector tightly packed in memory of bool values.\n\ttypedef vec<4, bool, packed_mediump>\tpacked_mediump_bvec4;\n\n\t/// 4 components vector tightly packed in memory of bool values.\n\ttypedef vec<4, bool, packed_lowp>\t\tpacked_lowp_bvec4;\n\n\t// -- *mat2 --\n\n\t/// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, aligned_highp>\t\taligned_highp_mat2;\n\n\t/// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, aligned_mediump>\taligned_mediump_mat2;\n\n\t/// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, aligned_lowp>\t\taligned_lowp_mat2;\n\n\t/// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, aligned_highp>\taligned_highp_dmat2;\n\n\t/// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, aligned_mediump>\taligned_mediump_dmat2;\n\n\t/// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, aligned_lowp>\t\taligned_lowp_dmat2;\n\n\t/// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, packed_highp>\t\tpacked_highp_mat2;\n\n\t/// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, packed_mediump>\tpacked_mediump_mat2;\n\n\t/// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, packed_lowp>\t\tpacked_lowp_mat2;\n\n\t/// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, packed_highp>\t\tpacked_highp_dmat2;\n\n\t/// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, packed_mediump>\tpacked_mediump_dmat2;\n\n\t/// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, packed_lowp>\t\tpacked_lowp_dmat2;\n\n\t// -- *mat3 --\n\n\t/// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, aligned_highp>\t\taligned_highp_mat3;\n\n\t/// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, aligned_mediump>\taligned_mediump_mat3;\n\n\t/// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, aligned_lowp>\t\taligned_lowp_mat3;\n\n\t/// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, aligned_highp>\taligned_highp_dmat3;\n\n\t/// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, aligned_mediump>\taligned_mediump_dmat3;\n\n\t/// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, aligned_lowp>\t\taligned_lowp_dmat3;\n\n\t/// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, packed_highp>\t\tpacked_highp_mat3;\n\n\t/// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, packed_mediump>\tpacked_mediump_mat3;\n\n\t/// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, packed_lowp>\t\tpacked_lowp_mat3;\n\n\t/// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, packed_highp>\t\tpacked_highp_dmat3;\n\n\t/// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, packed_mediump>\tpacked_mediump_dmat3;\n\n\t/// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, packed_lowp>\t\tpacked_lowp_dmat3;\n\n\t// -- *mat4 --\n\n\t/// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, aligned_highp>\t\taligned_highp_mat4;\n\n\t/// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, aligned_mediump>\taligned_mediump_mat4;\n\n\t/// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, aligned_lowp>\t\taligned_lowp_mat4;\n\n\t/// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, aligned_highp>\taligned_highp_dmat4;\n\n\t/// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, aligned_mediump>\taligned_mediump_dmat4;\n\n\t/// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, aligned_lowp>\t\taligned_lowp_dmat4;\n\n\t/// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, packed_highp>\t\tpacked_highp_mat4;\n\n\t/// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, packed_mediump>\tpacked_mediump_mat4;\n\n\t/// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, packed_lowp>\t\tpacked_lowp_mat4;\n\n\t/// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, packed_highp>\t\tpacked_highp_dmat4;\n\n\t/// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, packed_mediump>\tpacked_mediump_dmat4;\n\n\t/// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, packed_lowp>\t\tpacked_lowp_dmat4;\n\n\t// -- *mat2x2 --\n\n\t/// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, aligned_highp>\t\taligned_highp_mat2x2;\n\n\t/// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, aligned_mediump>\taligned_mediump_mat2x2;\n\n\t/// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, aligned_lowp>\t\taligned_lowp_mat2x2;\n\n\t/// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, aligned_highp>\taligned_highp_dmat2x2;\n\n\t/// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, aligned_mediump>\taligned_mediump_dmat2x2;\n\n\t/// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, aligned_lowp>\t\taligned_lowp_dmat2x2;\n\n\t/// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, packed_highp>\t\tpacked_highp_mat2x2;\n\n\t/// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, packed_mediump>\tpacked_mediump_mat2x2;\n\n\t/// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, float, packed_lowp>\t\tpacked_lowp_mat2x2;\n\n\t/// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, packed_highp>\t\tpacked_highp_dmat2x2;\n\n\t/// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, packed_mediump>\tpacked_mediump_dmat2x2;\n\n\t/// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 2, double, packed_lowp>\t\tpacked_lowp_dmat2x2;\n\n\t// -- *mat2x3 --\n\n\t/// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, float, aligned_highp>\t\taligned_highp_mat2x3;\n\n\t/// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, float, aligned_mediump>\taligned_mediump_mat2x3;\n\n\t/// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, float, aligned_lowp>\t\taligned_lowp_mat2x3;\n\n\t/// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, double, aligned_highp>\taligned_highp_dmat2x3;\n\n\t/// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, double, aligned_mediump>\taligned_mediump_dmat2x3;\n\n\t/// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, double, aligned_lowp>\t\taligned_lowp_dmat2x3;\n\n\t/// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, float, packed_highp>\t\tpacked_highp_mat2x3;\n\n\t/// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, float, packed_mediump>\tpacked_mediump_mat2x3;\n\n\t/// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, float, packed_lowp>\t\tpacked_lowp_mat2x3;\n\n\t/// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, double, packed_highp>\t\tpacked_highp_dmat2x3;\n\n\t/// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, double, packed_mediump>\tpacked_mediump_dmat2x3;\n\n\t/// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 3, double, packed_lowp>\t\tpacked_lowp_dmat2x3;\n\n\t// -- *mat2x4 --\n\n\t/// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, float, aligned_highp>\t\taligned_highp_mat2x4;\n\n\t/// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, float, aligned_mediump>\taligned_mediump_mat2x4;\n\n\t/// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, float, aligned_lowp>\t\taligned_lowp_mat2x4;\n\n\t/// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, double, aligned_highp>\taligned_highp_dmat2x4;\n\n\t/// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, double, aligned_mediump>\taligned_mediump_dmat2x4;\n\n\t/// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, double, aligned_lowp>\t\taligned_lowp_dmat2x4;\n\n\t/// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, float, packed_highp>\t\tpacked_highp_mat2x4;\n\n\t/// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, float, packed_mediump>\tpacked_mediump_mat2x4;\n\n\t/// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, float, packed_lowp>\t\tpacked_lowp_mat2x4;\n\n\t/// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, double, packed_highp>\t\tpacked_highp_dmat2x4;\n\n\t/// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, double, packed_mediump>\tpacked_mediump_dmat2x4;\n\n\t/// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<2, 4, double, packed_lowp>\t\tpacked_lowp_dmat2x4;\n\n\t// -- *mat3x2 --\n\n\t/// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, float, aligned_highp>\t\taligned_highp_mat3x2;\n\n\t/// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, float, aligned_mediump>\taligned_mediump_mat3x2;\n\n\t/// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, float, aligned_lowp>\t\taligned_lowp_mat3x2;\n\n\t/// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, double, aligned_highp>\taligned_highp_dmat3x2;\n\n\t/// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, double, aligned_mediump>\taligned_mediump_dmat3x2;\n\n\t/// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, double, aligned_lowp>\t\taligned_lowp_dmat3x2;\n\n\t/// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, float, packed_highp>\t\tpacked_highp_mat3x2;\n\n\t/// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, float, packed_mediump>\tpacked_mediump_mat3x2;\n\n\t/// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, float, packed_lowp>\t\tpacked_lowp_mat3x2;\n\n\t/// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, double, packed_highp>\t\tpacked_highp_dmat3x2;\n\n\t/// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, double, packed_mediump>\tpacked_mediump_dmat3x2;\n\n\t/// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 2, double, packed_lowp>\t\tpacked_lowp_dmat3x2;\n\n\t// -- *mat3x3 --\n\n\t/// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, aligned_highp>\t\taligned_highp_mat3x3;\n\n\t/// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, aligned_mediump>\taligned_mediump_mat3x3;\n\n\t/// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, aligned_lowp>\t\taligned_lowp_mat3x3;\n\n\t/// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, aligned_highp>\taligned_highp_dmat3x3;\n\n\t/// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, aligned_mediump>\taligned_mediump_dmat3x3;\n\n\t/// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, aligned_lowp>\t\taligned_lowp_dmat3x3;\n\n\t/// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, packed_highp>\t\tpacked_highp_mat3x3;\n\n\t/// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, packed_mediump>\tpacked_mediump_mat3x3;\n\n\t/// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, float, packed_lowp>\t\tpacked_lowp_mat3x3;\n\n\t/// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, packed_highp>\t\tpacked_highp_dmat3x3;\n\n\t/// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, packed_mediump>\tpacked_mediump_dmat3x3;\n\n\t/// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 3, double, packed_lowp>\t\tpacked_lowp_dmat3x3;\n\n\t// -- *mat3x4 --\n\n\t/// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, float, aligned_highp>\t\taligned_highp_mat3x4;\n\n\t/// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, float, aligned_mediump>\taligned_mediump_mat3x4;\n\n\t/// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, float, aligned_lowp>\t\taligned_lowp_mat3x4;\n\n\t/// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, double, aligned_highp>\taligned_highp_dmat3x4;\n\n\t/// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, double, aligned_mediump>\taligned_mediump_dmat3x4;\n\n\t/// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, double, aligned_lowp>\t\taligned_lowp_dmat3x4;\n\n\t/// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, float, packed_highp>\t\tpacked_highp_mat3x4;\n\n\t/// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, float, packed_mediump>\tpacked_mediump_mat3x4;\n\n\t/// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, float, packed_lowp>\t\tpacked_lowp_mat3x4;\n\n\t/// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, double, packed_highp>\t\tpacked_highp_dmat3x4;\n\n\t/// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, double, packed_mediump>\tpacked_mediump_dmat3x4;\n\n\t/// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<3, 4, double, packed_lowp>\t\tpacked_lowp_dmat3x4;\n\n\t// -- *mat4x2 --\n\n\t/// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, float, aligned_highp>\t\taligned_highp_mat4x2;\n\n\t/// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, float, aligned_mediump>\taligned_mediump_mat4x2;\n\n\t/// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, float, aligned_lowp>\t\taligned_lowp_mat4x2;\n\n\t/// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, double, aligned_highp>\taligned_highp_dmat4x2;\n\n\t/// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, double, aligned_mediump>\taligned_mediump_dmat4x2;\n\n\t/// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, double, aligned_lowp>\t\taligned_lowp_dmat4x2;\n\n\t/// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, float, packed_highp>\t\tpacked_highp_mat4x2;\n\n\t/// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, float, packed_mediump>\tpacked_mediump_mat4x2;\n\n\t/// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, float, packed_lowp>\t\tpacked_lowp_mat4x2;\n\n\t/// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, double, packed_highp>\t\tpacked_highp_dmat4x2;\n\n\t/// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, double, packed_mediump>\tpacked_mediump_dmat4x2;\n\n\t/// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 2, double, packed_lowp>\t\tpacked_lowp_dmat4x2;\n\n\t// -- *mat4x3 --\n\n\t/// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, float, aligned_highp>\t\taligned_highp_mat4x3;\n\n\t/// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, float, aligned_mediump>\taligned_mediump_mat4x3;\n\n\t/// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, float, aligned_lowp>\t\taligned_lowp_mat4x3;\n\n\t/// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, double, aligned_highp>\taligned_highp_dmat4x3;\n\n\t/// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, double, aligned_mediump>\taligned_mediump_dmat4x3;\n\n\t/// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, double, aligned_lowp>\t\taligned_lowp_dmat4x3;\n\n\t/// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, float, packed_highp>\t\tpacked_highp_mat4x3;\n\n\t/// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, float, packed_mediump>\tpacked_mediump_mat4x3;\n\n\t/// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, float, packed_lowp>\t\tpacked_lowp_mat4x3;\n\n\t/// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, double, packed_highp>\t\tpacked_highp_dmat4x3;\n\n\t/// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, double, packed_mediump>\tpacked_mediump_dmat4x3;\n\n\t/// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 3, double, packed_lowp>\t\tpacked_lowp_dmat4x3;\n\n\t// -- *mat4x4 --\n\n\t/// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, aligned_highp>\t\taligned_highp_mat4x4;\n\n\t/// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, aligned_mediump>\taligned_mediump_mat4x4;\n\n\t/// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, aligned_lowp>\t\taligned_lowp_mat4x4;\n\n\t/// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, aligned_highp>\taligned_highp_dmat4x4;\n\n\t/// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, aligned_mediump>\taligned_mediump_dmat4x4;\n\n\t/// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, aligned_lowp>\t\taligned_lowp_dmat4x4;\n\n\t/// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, packed_highp>\t\tpacked_highp_mat4x4;\n\n\t/// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, packed_mediump>\tpacked_mediump_mat4x4;\n\n\t/// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, float, packed_lowp>\t\tpacked_lowp_mat4x4;\n\n\t/// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, packed_highp>\t\tpacked_highp_dmat4x4;\n\n\t/// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, packed_mediump>\tpacked_mediump_dmat4x4;\n\n\t/// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs.\n\ttypedef mat<4, 4, double, packed_lowp>\t\tpacked_lowp_dmat4x4;\n\n\t// -- default --\n\n#if(defined(GLM_PRECISION_LOWP_FLOAT))\n\ttypedef aligned_lowp_vec1\t\t\taligned_vec1;\n\ttypedef aligned_lowp_vec2\t\t\taligned_vec2;\n\ttypedef aligned_lowp_vec3\t\t\taligned_vec3;\n\ttypedef aligned_lowp_vec4\t\t\taligned_vec4;\n\ttypedef packed_lowp_vec1\t\t\tpacked_vec1;\n\ttypedef packed_lowp_vec2\t\t\tpacked_vec2;\n\ttypedef packed_lowp_vec3\t\t\tpacked_vec3;\n\ttypedef packed_lowp_vec4\t\t\tpacked_vec4;\n\n\ttypedef aligned_lowp_mat2\t\t\taligned_mat2;\n\ttypedef aligned_lowp_mat3\t\t\taligned_mat3;\n\ttypedef aligned_lowp_mat4\t\t\taligned_mat4;\n\ttypedef packed_lowp_mat2\t\t\tpacked_mat2;\n\ttypedef packed_lowp_mat3\t\t\tpacked_mat3;\n\ttypedef packed_lowp_mat4\t\t\tpacked_mat4;\n\n\ttypedef aligned_lowp_mat2x2\t\t\taligned_mat2x2;\n\ttypedef aligned_lowp_mat2x3\t\t\taligned_mat2x3;\n\ttypedef aligned_lowp_mat2x4\t\t\taligned_mat2x4;\n\ttypedef aligned_lowp_mat3x2\t\t\taligned_mat3x2;\n\ttypedef aligned_lowp_mat3x3\t\t\taligned_mat3x3;\n\ttypedef aligned_lowp_mat3x4\t\t\taligned_mat3x4;\n\ttypedef aligned_lowp_mat4x2\t\t\taligned_mat4x2;\n\ttypedef aligned_lowp_mat4x3\t\t\taligned_mat4x3;\n\ttypedef aligned_lowp_mat4x4\t\t\taligned_mat4x4;\n\ttypedef packed_lowp_mat2x2\t\t\tpacked_mat2x2;\n\ttypedef packed_lowp_mat2x3\t\t\tpacked_mat2x3;\n\ttypedef packed_lowp_mat2x4\t\t\tpacked_mat2x4;\n\ttypedef packed_lowp_mat3x2\t\t\tpacked_mat3x2;\n\ttypedef packed_lowp_mat3x3\t\t\tpacked_mat3x3;\n\ttypedef packed_lowp_mat3x4\t\t\tpacked_mat3x4;\n\ttypedef packed_lowp_mat4x2\t\t\tpacked_mat4x2;\n\ttypedef packed_lowp_mat4x3\t\t\tpacked_mat4x3;\n\ttypedef packed_lowp_mat4x4\t\t\tpacked_mat4x4;\n#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))\n\ttypedef aligned_mediump_vec1\t\taligned_vec1;\n\ttypedef aligned_mediump_vec2\t\taligned_vec2;\n\ttypedef aligned_mediump_vec3\t\taligned_vec3;\n\ttypedef aligned_mediump_vec4\t\taligned_vec4;\n\ttypedef packed_mediump_vec1\t\t\tpacked_vec1;\n\ttypedef packed_mediump_vec2\t\t\tpacked_vec2;\n\ttypedef packed_mediump_vec3\t\t\tpacked_vec3;\n\ttypedef packed_mediump_vec4\t\t\tpacked_vec4;\n\n\ttypedef aligned_mediump_mat2\t\taligned_mat2;\n\ttypedef aligned_mediump_mat3\t\taligned_mat3;\n\ttypedef aligned_mediump_mat4\t\taligned_mat4;\n\ttypedef packed_mediump_mat2\t\t\tpacked_mat2;\n\ttypedef packed_mediump_mat3\t\t\tpacked_mat3;\n\ttypedef packed_mediump_mat4\t\t\tpacked_mat4;\n\n\ttypedef aligned_mediump_mat2x2\t\taligned_mat2x2;\n\ttypedef aligned_mediump_mat2x3\t\taligned_mat2x3;\n\ttypedef aligned_mediump_mat2x4\t\taligned_mat2x4;\n\ttypedef aligned_mediump_mat3x2\t\taligned_mat3x2;\n\ttypedef aligned_mediump_mat3x3\t\taligned_mat3x3;\n\ttypedef aligned_mediump_mat3x4\t\taligned_mat3x4;\n\ttypedef aligned_mediump_mat4x2\t\taligned_mat4x2;\n\ttypedef aligned_mediump_mat4x3\t\taligned_mat4x3;\n\ttypedef aligned_mediump_mat4x4\t\taligned_mat4x4;\n\ttypedef packed_mediump_mat2x2\t\tpacked_mat2x2;\n\ttypedef packed_mediump_mat2x3\t\tpacked_mat2x3;\n\ttypedef packed_mediump_mat2x4\t\tpacked_mat2x4;\n\ttypedef packed_mediump_mat3x2\t\tpacked_mat3x2;\n\ttypedef packed_mediump_mat3x3\t\tpacked_mat3x3;\n\ttypedef packed_mediump_mat3x4\t\tpacked_mat3x4;\n\ttypedef packed_mediump_mat4x2\t\tpacked_mat4x2;\n\ttypedef packed_mediump_mat4x3\t\tpacked_mat4x3;\n\ttypedef packed_mediump_mat4x4\t\tpacked_mat4x4;\n#else //defined(GLM_PRECISION_HIGHP_FLOAT)\n\t/// 1 component vector aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_vec1\t\t\taligned_vec1;\n\n\t/// 2 components vector aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_vec2\t\t\taligned_vec2;\n\n\t/// 3 components vector aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_vec3\t\t\taligned_vec3;\n\n\t/// 4 components vector aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_vec4 \t\t\taligned_vec4;\n\n\t/// 1 component vector tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_vec1\t\t\tpacked_vec1;\n\n\t/// 2 components vector tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_vec2\t\t\tpacked_vec2;\n\n\t/// 3 components vector tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_vec3\t\t\tpacked_vec3;\n\n\t/// 4 components vector tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_vec4\t\t\tpacked_vec4;\n\n\t/// 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat2\t\t\taligned_mat2;\n\n\t/// 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat3\t\t\taligned_mat3;\n\n\t/// 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat4\t\t\taligned_mat4;\n\n\t/// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat2\t\t\tpacked_mat2;\n\n\t/// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat3\t\t\tpacked_mat3;\n\n\t/// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat4\t\t\tpacked_mat4;\n\n\t/// 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat2x2\t\taligned_mat2x2;\n\n\t/// 2 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat2x3\t\taligned_mat2x3;\n\n\t/// 2 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat2x4\t\taligned_mat2x4;\n\n\t/// 3 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat3x2\t\taligned_mat3x2;\n\n\t/// 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat3x3\t\taligned_mat3x3;\n\n\t/// 3 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat3x4\t\taligned_mat3x4;\n\n\t/// 4 by 2 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat4x2\t\taligned_mat4x2;\n\n\t/// 4 by 3 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat4x3\t\taligned_mat4x3;\n\n\t/// 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers.\n\ttypedef aligned_highp_mat4x4\t\taligned_mat4x4;\n\n\t/// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat2x2\t\t\tpacked_mat2x2;\n\n\t/// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat2x3\t\t\tpacked_mat2x3;\n\n\t/// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat2x4\t\t\tpacked_mat2x4;\n\n\t/// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat3x2\t\t\tpacked_mat3x2;\n\n\t/// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat3x3\t\t\tpacked_mat3x3;\n\n\t/// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat3x4\t\t\tpacked_mat3x4;\n\n\t/// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat4x2\t\t\tpacked_mat4x2;\n\n\t/// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat4x3\t\t\tpacked_mat4x3;\n\n\t/// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers.\n\ttypedef packed_highp_mat4x4\t\t\tpacked_mat4x4;\n#endif//GLM_PRECISION\n\n#if(defined(GLM_PRECISION_LOWP_DOUBLE))\n\ttypedef aligned_lowp_dvec1\t\t\taligned_dvec1;\n\ttypedef aligned_lowp_dvec2\t\t\taligned_dvec2;\n\ttypedef aligned_lowp_dvec3\t\t\taligned_dvec3;\n\ttypedef aligned_lowp_dvec4\t\t\taligned_dvec4;\n\ttypedef packed_lowp_dvec1\t\t\tpacked_dvec1;\n\ttypedef packed_lowp_dvec2\t\t\tpacked_dvec2;\n\ttypedef packed_lowp_dvec3\t\t\tpacked_dvec3;\n\ttypedef packed_lowp_dvec4\t\t\tpacked_dvec4;\n\n\ttypedef aligned_lowp_dmat2\t\t\taligned_dmat2;\n\ttypedef aligned_lowp_dmat3\t\t\taligned_dmat3;\n\ttypedef aligned_lowp_dmat4\t\t\taligned_dmat4;\n\ttypedef packed_lowp_dmat2\t\t\tpacked_dmat2;\n\ttypedef packed_lowp_dmat3\t\t\tpacked_dmat3;\n\ttypedef packed_lowp_dmat4\t\t\tpacked_dmat4;\n\n\ttypedef aligned_lowp_dmat2x2\t\taligned_dmat2x2;\n\ttypedef aligned_lowp_dmat2x3\t\taligned_dmat2x3;\n\ttypedef aligned_lowp_dmat2x4\t\taligned_dmat2x4;\n\ttypedef aligned_lowp_dmat3x2\t\taligned_dmat3x2;\n\ttypedef aligned_lowp_dmat3x3\t\taligned_dmat3x3;\n\ttypedef aligned_lowp_dmat3x4\t\taligned_dmat3x4;\n\ttypedef aligned_lowp_dmat4x2\t\taligned_dmat4x2;\n\ttypedef aligned_lowp_dmat4x3\t\taligned_dmat4x3;\n\ttypedef aligned_lowp_dmat4x4\t\taligned_dmat4x4;\n\ttypedef packed_lowp_dmat2x2\t\t\tpacked_dmat2x2;\n\ttypedef packed_lowp_dmat2x3\t\t\tpacked_dmat2x3;\n\ttypedef packed_lowp_dmat2x4\t\t\tpacked_dmat2x4;\n\ttypedef packed_lowp_dmat3x2\t\t\tpacked_dmat3x2;\n\ttypedef packed_lowp_dmat3x3\t\t\tpacked_dmat3x3;\n\ttypedef packed_lowp_dmat3x4\t\t\tpacked_dmat3x4;\n\ttypedef packed_lowp_dmat4x2\t\t\tpacked_dmat4x2;\n\ttypedef packed_lowp_dmat4x3\t\t\tpacked_dmat4x3;\n\ttypedef packed_lowp_dmat4x4\t\t\tpacked_dmat4x4;\n#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE))\n\ttypedef aligned_mediump_dvec1\t\taligned_dvec1;\n\ttypedef aligned_mediump_dvec2\t\taligned_dvec2;\n\ttypedef aligned_mediump_dvec3\t\taligned_dvec3;\n\ttypedef aligned_mediump_dvec4\t\taligned_dvec4;\n\ttypedef packed_mediump_dvec1\t\tpacked_dvec1;\n\ttypedef packed_mediump_dvec2\t\tpacked_dvec2;\n\ttypedef packed_mediump_dvec3\t\tpacked_dvec3;\n\ttypedef packed_mediump_dvec4\t\tpacked_dvec4;\n\n\ttypedef aligned_mediump_dmat2\t\taligned_dmat2;\n\ttypedef aligned_mediump_dmat3\t\taligned_dmat3;\n\ttypedef aligned_mediump_dmat4\t\taligned_dmat4;\n\ttypedef packed_mediump_dmat2\t\tpacked_dmat2;\n\ttypedef packed_mediump_dmat3\t\tpacked_dmat3;\n\ttypedef packed_mediump_dmat4\t\tpacked_dmat4;\n\n\ttypedef aligned_mediump_dmat2x2\t\taligned_dmat2x2;\n\ttypedef aligned_mediump_dmat2x3\t\taligned_dmat2x3;\n\ttypedef aligned_mediump_dmat2x4\t\taligned_dmat2x4;\n\ttypedef aligned_mediump_dmat3x2\t\taligned_dmat3x2;\n\ttypedef aligned_mediump_dmat3x3\t\taligned_dmat3x3;\n\ttypedef aligned_mediump_dmat3x4\t\taligned_dmat3x4;\n\ttypedef aligned_mediump_dmat4x2\t\taligned_dmat4x2;\n\ttypedef aligned_mediump_dmat4x3\t\taligned_dmat4x3;\n\ttypedef aligned_mediump_dmat4x4\t\taligned_dmat4x4;\n\ttypedef packed_mediump_dmat2x2\t\tpacked_dmat2x2;\n\ttypedef packed_mediump_dmat2x3\t\tpacked_dmat2x3;\n\ttypedef packed_mediump_dmat2x4\t\tpacked_dmat2x4;\n\ttypedef packed_mediump_dmat3x2\t\tpacked_dmat3x2;\n\ttypedef packed_mediump_dmat3x3\t\tpacked_dmat3x3;\n\ttypedef packed_mediump_dmat3x4\t\tpacked_dmat3x4;\n\ttypedef packed_mediump_dmat4x2\t\tpacked_dmat4x2;\n\ttypedef packed_mediump_dmat4x3\t\tpacked_dmat4x3;\n\ttypedef packed_mediump_dmat4x4\t\tpacked_dmat4x4;\n#else //defined(GLM_PRECISION_HIGHP_DOUBLE)\n\t/// 1 component vector aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dvec1\t\t\taligned_dvec1;\n\n\t/// 2 components vector aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dvec2\t\t\taligned_dvec2;\n\n\t/// 3 components vector aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dvec3\t\t\taligned_dvec3;\n\n\t/// 4 components vector aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dvec4\t\t\taligned_dvec4;\n\n\t/// 1 component vector tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dvec1\t\t\tpacked_dvec1;\n\n\t/// 2 components vector tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dvec2\t\t\tpacked_dvec2;\n\n\t/// 3 components vector tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dvec3\t\t\tpacked_dvec3;\n\n\t/// 4 components vector tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dvec4\t\t\tpacked_dvec4;\n\n\t/// 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat2\t\t\taligned_dmat2;\n\n\t/// 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat3\t\t\taligned_dmat3;\n\n\t/// 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat4\t\t\taligned_dmat4;\n\n\t/// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat2\t\t\tpacked_dmat2;\n\n\t/// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat3\t\t\tpacked_dmat3;\n\n\t/// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat4\t\t\tpacked_dmat4;\n\n\t/// 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat2x2\t\taligned_dmat2x2;\n\n\t/// 2 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat2x3\t\taligned_dmat2x3;\n\n\t/// 2 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat2x4\t\taligned_dmat2x4;\n\n\t/// 3 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat3x2\t\taligned_dmat3x2;\n\n\t/// 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat3x3\t\taligned_dmat3x3;\n\n\t/// 3 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat3x4\t\taligned_dmat3x4;\n\n\t/// 4 by 2 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat4x2\t\taligned_dmat4x2;\n\n\t/// 4 by 3 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat4x3\t\taligned_dmat4x3;\n\n\t/// 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers.\n\ttypedef aligned_highp_dmat4x4\t\taligned_dmat4x4;\n\n\t/// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat2x2\t\tpacked_dmat2x2;\n\n\t/// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat2x3\t\tpacked_dmat2x3;\n\n\t/// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat2x4\t\tpacked_dmat2x4;\n\n\t/// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat3x2\t\tpacked_dmat3x2;\n\n\t/// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat3x3\t\tpacked_dmat3x3;\n\n\t/// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat3x4\t\tpacked_dmat3x4;\n\n\t/// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat4x2\t\tpacked_dmat4x2;\n\n\t/// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat4x3\t\tpacked_dmat4x3;\n\n\t/// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers.\n\ttypedef packed_highp_dmat4x4\t\tpacked_dmat4x4;\n#endif//GLM_PRECISION\n\n#if(defined(GLM_PRECISION_LOWP_INT))\n\ttypedef aligned_lowp_ivec1\t\t\taligned_ivec1;\n\ttypedef aligned_lowp_ivec2\t\t\taligned_ivec2;\n\ttypedef aligned_lowp_ivec3\t\t\taligned_ivec3;\n\ttypedef aligned_lowp_ivec4\t\t\taligned_ivec4;\n#elif(defined(GLM_PRECISION_MEDIUMP_INT))\n\ttypedef aligned_mediump_ivec1\t\taligned_ivec1;\n\ttypedef aligned_mediump_ivec2\t\taligned_ivec2;\n\ttypedef aligned_mediump_ivec3\t\taligned_ivec3;\n\ttypedef aligned_mediump_ivec4\t\taligned_ivec4;\n#else //defined(GLM_PRECISION_HIGHP_INT)\n\t/// 1 component vector aligned in memory of signed integer numbers.\n\ttypedef aligned_highp_ivec1\t\t\taligned_ivec1;\n\n\t/// 2 components vector aligned in memory of signed integer numbers.\n\ttypedef aligned_highp_ivec2\t\t\taligned_ivec2;\n\n\t/// 3 components vector aligned in memory of signed integer numbers.\n\ttypedef aligned_highp_ivec3\t\t\taligned_ivec3;\n\n\t/// 4 components vector aligned in memory of signed integer numbers.\n\ttypedef aligned_highp_ivec4\t\t\taligned_ivec4;\n\n\t/// 1 component vector tightly packed in memory of signed integer numbers.\n\ttypedef packed_highp_ivec1\t\t\tpacked_ivec1;\n\n\t/// 2 components vector tightly packed in memory of signed integer numbers.\n\ttypedef packed_highp_ivec2\t\t\tpacked_ivec2;\n\n\t/// 3 components vector tightly packed in memory of signed integer numbers.\n\ttypedef packed_highp_ivec3\t\t\tpacked_ivec3;\n\n\t/// 4 components vector tightly packed in memory of signed integer numbers.\n\ttypedef packed_highp_ivec4\t\t\tpacked_ivec4;\n#endif//GLM_PRECISION\n\n\t// -- Unsigned integer definition --\n\n#if(defined(GLM_PRECISION_LOWP_UINT))\n\ttypedef aligned_lowp_uvec1\t\t\taligned_uvec1;\n\ttypedef aligned_lowp_uvec2\t\t\taligned_uvec2;\n\ttypedef aligned_lowp_uvec3\t\t\taligned_uvec3;\n\ttypedef aligned_lowp_uvec4\t\t\taligned_uvec4;\n#elif(defined(GLM_PRECISION_MEDIUMP_UINT))\n\ttypedef aligned_mediump_uvec1\t\taligned_uvec1;\n\ttypedef aligned_mediump_uvec2\t\taligned_uvec2;\n\ttypedef aligned_mediump_uvec3\t\taligned_uvec3;\n\ttypedef aligned_mediump_uvec4\t\taligned_uvec4;\n#else //defined(GLM_PRECISION_HIGHP_UINT)\n\t/// 1 component vector aligned in memory of unsigned integer numbers.\n\ttypedef aligned_highp_uvec1\t\t\taligned_uvec1;\n\n\t/// 2 components vector aligned in memory of unsigned integer numbers.\n\ttypedef aligned_highp_uvec2\t\t\taligned_uvec2;\n\n\t/// 3 components vector aligned in memory of unsigned integer numbers.\n\ttypedef aligned_highp_uvec3\t\t\taligned_uvec3;\n\n\t/// 4 components vector aligned in memory of unsigned integer numbers.\n\ttypedef aligned_highp_uvec4\t\t\taligned_uvec4;\n\n\t/// 1 component vector tightly packed in memory of unsigned integer numbers.\n\ttypedef packed_highp_uvec1\t\t\tpacked_uvec1;\n\n\t/// 2 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef packed_highp_uvec2\t\t\tpacked_uvec2;\n\n\t/// 3 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef packed_highp_uvec3\t\t\tpacked_uvec3;\n\n\t/// 4 components vector tightly packed in memory of unsigned integer numbers.\n\ttypedef packed_highp_uvec4\t\t\tpacked_uvec4;\n#endif//GLM_PRECISION\n\n#if(defined(GLM_PRECISION_LOWP_BOOL))\n\ttypedef aligned_lowp_bvec1\t\t\taligned_bvec1;\n\ttypedef aligned_lowp_bvec2\t\t\taligned_bvec2;\n\ttypedef aligned_lowp_bvec3\t\t\taligned_bvec3;\n\ttypedef aligned_lowp_bvec4\t\t\taligned_bvec4;\n#elif(defined(GLM_PRECISION_MEDIUMP_BOOL))\n\ttypedef aligned_mediump_bvec1\t\taligned_bvec1;\n\ttypedef aligned_mediump_bvec2\t\taligned_bvec2;\n\ttypedef aligned_mediump_bvec3\t\taligned_bvec3;\n\ttypedef aligned_mediump_bvec4\t\taligned_bvec4;\n#else //defined(GLM_PRECISION_HIGHP_BOOL)\n\t/// 1 component vector aligned in memory of bool values.\n\ttypedef aligned_highp_bvec1\t\t\taligned_bvec1;\n\n\t/// 2 components vector aligned in memory of bool values.\n\ttypedef aligned_highp_bvec2\t\t\taligned_bvec2;\n\n\t/// 3 components vector aligned in memory of bool values.\n\ttypedef aligned_highp_bvec3\t\t\taligned_bvec3;\n\n\t/// 4 components vector aligned in memory of bool values.\n\ttypedef aligned_highp_bvec4\t\t\taligned_bvec4;\n\n\t/// 1 components vector tightly packed in memory of bool values.\n\ttypedef packed_highp_bvec1\t\t\tpacked_bvec1;\n\n\t/// 2 components vector tightly packed in memory of bool values.\n\ttypedef packed_highp_bvec2\t\t\tpacked_bvec2;\n\n\t/// 3 components vector tightly packed in memory of bool values.\n\ttypedef packed_highp_bvec3\t\t\tpacked_bvec3;\n\n\t/// 4 components vector tightly packed in memory of bool values.\n\ttypedef packed_highp_bvec4\t\t\tpacked_bvec4;\n#endif//GLM_PRECISION\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/type_precision.hpp",
    "content": "/// @ref gtc_type_precision\n/// @file glm/gtc/type_precision.hpp\n///\n/// @see core (dependence)\n/// @see gtc_quaternion (dependence)\n///\n/// @defgroup gtc_type_precision GLM_GTC_type_precision\n/// @ingroup gtc\n///\n/// Include <glm/gtc/type_precision.hpp> to use the features of this extension.\n///\n/// Defines specific C++-based qualifier types.\n\n#pragma once\n\n// Dependency:\n#include \"../gtc/quaternion.hpp\"\n#include \"../gtc/vec1.hpp\"\n#include \"../ext/vector_int1_sized.hpp\"\n#include \"../ext/vector_int2_sized.hpp\"\n#include \"../ext/vector_int3_sized.hpp\"\n#include \"../ext/vector_int4_sized.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n#include \"../ext/vector_uint1_sized.hpp\"\n#include \"../ext/vector_uint2_sized.hpp\"\n#include \"../ext/vector_uint3_sized.hpp\"\n#include \"../ext/vector_uint4_sized.hpp\"\n#include \"../ext/scalar_uint_sized.hpp\"\n#include \"../detail/type_vec2.hpp\"\n#include \"../detail/type_vec3.hpp\"\n#include \"../detail/type_vec4.hpp\"\n#include \"../detail/type_mat2x2.hpp\"\n#include \"../detail/type_mat2x3.hpp\"\n#include \"../detail/type_mat2x4.hpp\"\n#include \"../detail/type_mat3x2.hpp\"\n#include \"../detail/type_mat3x3.hpp\"\n#include \"../detail/type_mat3x4.hpp\"\n#include \"../detail/type_mat4x2.hpp\"\n#include \"../detail/type_mat4x3.hpp\"\n#include \"../detail/type_mat4x4.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_type_precision extension included\")\n#endif\n\nnamespace glm\n{\n\t///////////////////////////\n\t// Signed int vector types\n\n\t/// @addtogroup gtc_type_precision\n\t/// @{\n\n\t/// Low qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 lowp_int8;\n\n\t/// Low qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 lowp_int16;\n\n\t/// Low qualifier 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 lowp_int32;\n\n\t/// Low qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 lowp_int64;\n\n\t/// Low qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 lowp_int8_t;\n\n\t/// Low qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 lowp_int16_t;\n\n\t/// Low qualifier 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 lowp_int32_t;\n\n\t/// Low qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 lowp_int64_t;\n\n\t/// Low qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 lowp_i8;\n\n\t/// Low qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 lowp_i16;\n\n\t/// Low qualifier 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 lowp_i32;\n\n\t/// Low qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 lowp_i64;\n\n\t/// Medium qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 mediump_int8;\n\n\t/// Medium qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 mediump_int16;\n\n\t/// Medium qualifier 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 mediump_int32;\n\n\t/// Medium qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 mediump_int64;\n\n\t/// Medium qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 mediump_int8_t;\n\n\t/// Medium qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 mediump_int16_t;\n\n\t/// Medium qualifier 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 mediump_int32_t;\n\n\t/// Medium qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 mediump_int64_t;\n\n\t/// Medium qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 mediump_i8;\n\n\t/// Medium qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 mediump_i16;\n\n\t/// Medium qualifier 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 mediump_i32;\n\n\t/// Medium qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 mediump_i64;\n\n\t/// High qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 highp_int8;\n\n\t/// High qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 highp_int16;\n\n\t/// High qualifier 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 highp_int32;\n\n\t/// High qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 highp_int64;\n\n\t/// High qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 highp_int8_t;\n\n\t/// High qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 highp_int16_t;\n\n\t/// 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 highp_int32_t;\n\n\t/// High qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 highp_int64_t;\n\n\t/// High qualifier 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 highp_i8;\n\n\t/// High qualifier 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 highp_i16;\n\n\t/// High qualifier 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 highp_i32;\n\n\t/// High qualifier 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 highp_i64;\n\n\n#if GLM_HAS_EXTENDED_INTEGER_TYPE\n\tusing std::int8_t;\n\tusing std::int16_t;\n\tusing std::int32_t;\n\tusing std::int64_t;\n#else\n\t/// 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 int8_t;\n\n\t/// 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 int16_t;\n\n\t/// 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 int32_t;\n\n\t/// 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 int64_t;\n#endif\n\n\t/// 8 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int8 i8;\n\n\t/// 16 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int16 i16;\n\n\t/// 32 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int32 i32;\n\n\t/// 64 bit signed integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::int64 i64;\n\n\t/////////////////////////////\n\t// Unsigned int vector types\n\n\t/// Low qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 lowp_uint8;\n\n\t/// Low qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 lowp_uint16;\n\n\t/// Low qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 lowp_uint32;\n\n\t/// Low qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 lowp_uint64;\n\n\t/// Low qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 lowp_uint8_t;\n\n\t/// Low qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 lowp_uint16_t;\n\n\t/// Low qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 lowp_uint32_t;\n\n\t/// Low qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 lowp_uint64_t;\n\n\t/// Low qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 lowp_u8;\n\n\t/// Low qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 lowp_u16;\n\n\t/// Low qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 lowp_u32;\n\n\t/// Low qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 lowp_u64;\n\n\t/// Medium qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 mediump_uint8;\n\n\t/// Medium qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 mediump_uint16;\n\n\t/// Medium qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 mediump_uint32;\n\n\t/// Medium qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 mediump_uint64;\n\n\t/// Medium qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 mediump_uint8_t;\n\n\t/// Medium qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 mediump_uint16_t;\n\n\t/// Medium qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 mediump_uint32_t;\n\n\t/// Medium qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 mediump_uint64_t;\n\n\t/// Medium qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 mediump_u8;\n\n\t/// Medium qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 mediump_u16;\n\n\t/// Medium qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 mediump_u32;\n\n\t/// Medium qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 mediump_u64;\n\n\t/// High qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 highp_uint8;\n\n\t/// High qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 highp_uint16;\n\n\t/// High qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 highp_uint32;\n\n\t/// High qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 highp_uint64;\n\n\t/// High qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 highp_uint8_t;\n\n\t/// High qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 highp_uint16_t;\n\n\t/// High qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 highp_uint32_t;\n\n\t/// High qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 highp_uint64_t;\n\n\t/// High qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 highp_u8;\n\n\t/// High qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 highp_u16;\n\n\t/// High qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 highp_u32;\n\n\t/// High qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 highp_u64;\n\n#if GLM_HAS_EXTENDED_INTEGER_TYPE\n\tusing std::uint8_t;\n\tusing std::uint16_t;\n\tusing std::uint32_t;\n\tusing std::uint64_t;\n#else\n\t/// Default qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 uint8_t;\n\n\t/// Default qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 uint16_t;\n\n\t/// Default qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 uint32_t;\n\n\t/// Default qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 uint64_t;\n#endif\n\n\t/// Default qualifier 8 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint8 u8;\n\n\t/// Default qualifier 16 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint16 u16;\n\n\t/// Default qualifier 32 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint32 u32;\n\n\t/// Default qualifier 64 bit unsigned integer type.\n\t/// @see gtc_type_precision\n\ttypedef detail::uint64 u64;\n\n\n\n\n\n\t//////////////////////\n\t// Float vector types\n\n\t/// Single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float float32;\n\n\t/// Double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef double float64;\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_float32;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_float64;\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_float32_t;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_float64_t;\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_f32;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_f64;\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_float32;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_float64;\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_float32_t;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_float64_t;\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_f32;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_f64;\n\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_float32;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_float64;\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_float32_t;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_float64_t;\n\n\t/// Low 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 lowp_f32;\n\n\t/// Low 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 lowp_f64;\n\n\n\t/// Medium 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 mediump_float32;\n\n\t/// Medium 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 mediump_float64;\n\n\t/// Medium 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 mediump_float32_t;\n\n\t/// Medium 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 mediump_float64_t;\n\n\t/// Medium 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 mediump_f32;\n\n\t/// Medium 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 mediump_f64;\n\n\n\t/// High 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 highp_float32;\n\n\t/// High 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 highp_float64;\n\n\t/// High 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 highp_float32_t;\n\n\t/// High 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 highp_float64_t;\n\n\t/// High 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 highp_f32;\n\n\t/// High 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float64 highp_f64;\n\n\n#if(defined(GLM_PRECISION_LOWP_FLOAT))\n\t/// Default 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef lowp_float32_t float32_t;\n\n\t/// Default 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef lowp_float64_t float64_t;\n\n\t/// Default 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef lowp_f32 f32;\n\n\t/// Default 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef lowp_f64 f64;\n\n#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))\n\t/// Default 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef mediump_float32 float32_t;\n\n\t/// Default 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef mediump_float64 float64_t;\n\n\t/// Default 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef mediump_float32 f32;\n\n\t/// Default 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef mediump_float64 f64;\n\n#else//(defined(GLM_PRECISION_HIGHP_FLOAT))\n\n\t/// Default 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef highp_float32_t float32_t;\n\n\t/// Default 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef highp_float64_t float64_t;\n\n\t/// Default 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef highp_float32_t f32;\n\n\t/// Default 64 bit double-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef highp_float64_t f64;\n#endif\n\n\n\t/// Low single-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, float, lowp> lowp_fvec1;\n\n\t/// Low single-qualifier floating-point vector of 2 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, float, lowp> lowp_fvec2;\n\n\t/// Low single-qualifier floating-point vector of 3 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, float, lowp> lowp_fvec3;\n\n\t/// Low single-qualifier floating-point vector of 4 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, float, lowp> lowp_fvec4;\n\n\n\t/// Medium single-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, float, mediump> mediump_fvec1;\n\n\t/// Medium Single-qualifier floating-point vector of 2 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, float, mediump> mediump_fvec2;\n\n\t/// Medium Single-qualifier floating-point vector of 3 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, float, mediump> mediump_fvec3;\n\n\t/// Medium Single-qualifier floating-point vector of 4 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, float, mediump> mediump_fvec4;\n\n\n\t/// High single-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, float, highp> highp_fvec1;\n\n\t/// High Single-qualifier floating-point vector of 2 components.\n\t/// @see core_precision\n\ttypedef vec<2, float, highp> highp_fvec2;\n\n\t/// High Single-qualifier floating-point vector of 3 components.\n\t/// @see core_precision\n\ttypedef vec<3, float, highp> highp_fvec3;\n\n\t/// High Single-qualifier floating-point vector of 4 components.\n\t/// @see core_precision\n\ttypedef vec<4, float, highp> highp_fvec4;\n\n\n\t/// Low single-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, f32, lowp> lowp_f32vec1;\n\n\t/// Low single-qualifier floating-point vector of 2 components.\n\t/// @see core_precision\n\ttypedef vec<2, f32, lowp> lowp_f32vec2;\n\n\t/// Low single-qualifier floating-point vector of 3 components.\n\t/// @see core_precision\n\ttypedef vec<3, f32, lowp> lowp_f32vec3;\n\n\t/// Low single-qualifier floating-point vector of 4 components.\n\t/// @see core_precision\n\ttypedef vec<4, f32, lowp> lowp_f32vec4;\n\n\t/// Medium single-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, f32, mediump> mediump_f32vec1;\n\n\t/// Medium single-qualifier floating-point vector of 2 components.\n\t/// @see core_precision\n\ttypedef vec<2, f32, mediump> mediump_f32vec2;\n\n\t/// Medium single-qualifier floating-point vector of 3 components.\n\t/// @see core_precision\n\ttypedef vec<3, f32, mediump> mediump_f32vec3;\n\n\t/// Medium single-qualifier floating-point vector of 4 components.\n\t/// @see core_precision\n\ttypedef vec<4, f32, mediump> mediump_f32vec4;\n\n\t/// High single-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, f32, highp> highp_f32vec1;\n\n\t/// High single-qualifier floating-point vector of 2 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, f32, highp> highp_f32vec2;\n\n\t/// High single-qualifier floating-point vector of 3 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, f32, highp> highp_f32vec3;\n\n\t/// High single-qualifier floating-point vector of 4 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, f32, highp> highp_f32vec4;\n\n\n\t/// Low double-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, f64, lowp> lowp_f64vec1;\n\n\t/// Low double-qualifier floating-point vector of 2 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, f64, lowp> lowp_f64vec2;\n\n\t/// Low double-qualifier floating-point vector of 3 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, f64, lowp> lowp_f64vec3;\n\n\t/// Low double-qualifier floating-point vector of 4 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, f64, lowp> lowp_f64vec4;\n\n\t/// Medium double-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, f64, mediump> mediump_f64vec1;\n\n\t/// Medium double-qualifier floating-point vector of 2 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, f64, mediump> mediump_f64vec2;\n\n\t/// Medium double-qualifier floating-point vector of 3 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, f64, mediump> mediump_f64vec3;\n\n\t/// Medium double-qualifier floating-point vector of 4 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, f64, mediump> mediump_f64vec4;\n\n\t/// High double-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, f64, highp> highp_f64vec1;\n\n\t/// High double-qualifier floating-point vector of 2 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, f64, highp> highp_f64vec2;\n\n\t/// High double-qualifier floating-point vector of 3 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, f64, highp> highp_f64vec3;\n\n\t/// High double-qualifier floating-point vector of 4 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, f64, highp> highp_f64vec4;\n\n\n\n\t//////////////////////\n\t// Float matrix types\n\n\t/// Low single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef lowp_f32 lowp_fmat1x1;\n\n\t/// Low single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, lowp> lowp_fmat2x2;\n\n\t/// Low single-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f32, lowp> lowp_fmat2x3;\n\n\t/// Low single-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f32, lowp> lowp_fmat2x4;\n\n\t/// Low single-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f32, lowp> lowp_fmat3x2;\n\n\t/// Low single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, lowp> lowp_fmat3x3;\n\n\t/// Low single-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f32, lowp> lowp_fmat3x4;\n\n\t/// Low single-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f32, lowp> lowp_fmat4x2;\n\n\t/// Low single-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f32, lowp> lowp_fmat4x3;\n\n\t/// Low single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, lowp> lowp_fmat4x4;\n\n\t/// Low single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef lowp_fmat1x1 lowp_fmat1;\n\n\t/// Low single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_fmat2x2 lowp_fmat2;\n\n\t/// Low single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_fmat3x3 lowp_fmat3;\n\n\t/// Low single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_fmat4x4 lowp_fmat4;\n\n\n\t/// Medium single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef mediump_f32 mediump_fmat1x1;\n\n\t/// Medium single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, mediump> mediump_fmat2x2;\n\n\t/// Medium single-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f32, mediump> mediump_fmat2x3;\n\n\t/// Medium single-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f32, mediump> mediump_fmat2x4;\n\n\t/// Medium single-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f32, mediump> mediump_fmat3x2;\n\n\t/// Medium single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, mediump> mediump_fmat3x3;\n\n\t/// Medium single-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f32, mediump> mediump_fmat3x4;\n\n\t/// Medium single-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f32, mediump> mediump_fmat4x2;\n\n\t/// Medium single-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f32, mediump> mediump_fmat4x3;\n\n\t/// Medium single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, mediump> mediump_fmat4x4;\n\n\t/// Medium single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef mediump_fmat1x1 mediump_fmat1;\n\n\t/// Medium single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_fmat2x2 mediump_fmat2;\n\n\t/// Medium single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_fmat3x3 mediump_fmat3;\n\n\t/// Medium single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_fmat4x4 mediump_fmat4;\n\n\n\t/// High single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef highp_f32 highp_fmat1x1;\n\n\t/// High single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, highp> highp_fmat2x2;\n\n\t/// High single-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f32, highp> highp_fmat2x3;\n\n\t/// High single-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f32, highp> highp_fmat2x4;\n\n\t/// High single-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f32, highp> highp_fmat3x2;\n\n\t/// High single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, highp> highp_fmat3x3;\n\n\t/// High single-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f32, highp> highp_fmat3x4;\n\n\t/// High single-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f32, highp> highp_fmat4x2;\n\n\t/// High single-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f32, highp> highp_fmat4x3;\n\n\t/// High single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, highp> highp_fmat4x4;\n\n\t/// High single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef highp_fmat1x1 highp_fmat1;\n\n\t/// High single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_fmat2x2 highp_fmat2;\n\n\t/// High single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_fmat3x3 highp_fmat3;\n\n\t/// High single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_fmat4x4 highp_fmat4;\n\n\n\t/// Low single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f32 lowp_f32mat1x1;\n\n\t/// Low single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, lowp> lowp_f32mat2x2;\n\n\t/// Low single-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f32, lowp> lowp_f32mat2x3;\n\n\t/// Low single-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f32, lowp> lowp_f32mat2x4;\n\n\t/// Low single-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f32, lowp> lowp_f32mat3x2;\n\n\t/// Low single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, lowp> lowp_f32mat3x3;\n\n\t/// Low single-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f32, lowp> lowp_f32mat3x4;\n\n\t/// Low single-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f32, lowp> lowp_f32mat4x2;\n\n\t/// Low single-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f32, lowp> lowp_f32mat4x3;\n\n\t/// Low single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, lowp> lowp_f32mat4x4;\n\n\t/// Low single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef detail::tmat1x1<f32, lowp> lowp_f32mat1;\n\n\t/// Low single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_f32mat2x2 lowp_f32mat2;\n\n\t/// Low single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_f32mat3x3 lowp_f32mat3;\n\n\t/// Low single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_f32mat4x4 lowp_f32mat4;\n\n\n\t/// High single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f32 mediump_f32mat1x1;\n\n\t/// Low single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, mediump> mediump_f32mat2x2;\n\n\t/// Medium single-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f32, mediump> mediump_f32mat2x3;\n\n\t/// Medium single-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f32, mediump> mediump_f32mat2x4;\n\n\t/// Medium single-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f32, mediump> mediump_f32mat3x2;\n\n\t/// Medium single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, mediump> mediump_f32mat3x3;\n\n\t/// Medium single-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f32, mediump> mediump_f32mat3x4;\n\n\t/// Medium single-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f32, mediump> mediump_f32mat4x2;\n\n\t/// Medium single-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f32, mediump> mediump_f32mat4x3;\n\n\t/// Medium single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, mediump> mediump_f32mat4x4;\n\n\t/// Medium single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef detail::tmat1x1<f32, mediump> f32mat1;\n\n\t/// Medium single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_f32mat2x2 mediump_f32mat2;\n\n\t/// Medium single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_f32mat3x3 mediump_f32mat3;\n\n\t/// Medium single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_f32mat4x4 mediump_f32mat4;\n\n\n\t/// High single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f32 highp_f32mat1x1;\n\n\t/// High single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, highp> highp_f32mat2x2;\n\n\t/// High single-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f32, highp> highp_f32mat2x3;\n\n\t/// High single-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f32, highp> highp_f32mat2x4;\n\n\t/// High single-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f32, highp> highp_f32mat3x2;\n\n\t/// High single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, highp> highp_f32mat3x3;\n\n\t/// High single-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f32, highp> highp_f32mat3x4;\n\n\t/// High single-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f32, highp> highp_f32mat4x2;\n\n\t/// High single-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f32, highp> highp_f32mat4x3;\n\n\t/// High single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, highp> highp_f32mat4x4;\n\n\t/// High single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef detail::tmat1x1<f32, highp> f32mat1;\n\n\t/// High single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_f32mat2x2 highp_f32mat2;\n\n\t/// High single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_f32mat3x3 highp_f32mat3;\n\n\t/// High single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_f32mat4x4 highp_f32mat4;\n\n\n\t/// Low double-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f64 lowp_f64mat1x1;\n\n\t/// Low double-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f64, lowp> lowp_f64mat2x2;\n\n\t/// Low double-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f64, lowp> lowp_f64mat2x3;\n\n\t/// Low double-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f64, lowp> lowp_f64mat2x4;\n\n\t/// Low double-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f64, lowp> lowp_f64mat3x2;\n\n\t/// Low double-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f64, lowp> lowp_f64mat3x3;\n\n\t/// Low double-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f64, lowp> lowp_f64mat3x4;\n\n\t/// Low double-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f64, lowp> lowp_f64mat4x2;\n\n\t/// Low double-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f64, lowp> lowp_f64mat4x3;\n\n\t/// Low double-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f64, lowp> lowp_f64mat4x4;\n\n\t/// Low double-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef lowp_f64mat1x1 lowp_f64mat1;\n\n\t/// Low double-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_f64mat2x2 lowp_f64mat2;\n\n\t/// Low double-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_f64mat3x3 lowp_f64mat3;\n\n\t/// Low double-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef lowp_f64mat4x4 lowp_f64mat4;\n\n\n\t/// Medium double-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f64 Highp_f64mat1x1;\n\n\t/// Medium double-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f64, mediump> mediump_f64mat2x2;\n\n\t/// Medium double-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f64, mediump> mediump_f64mat2x3;\n\n\t/// Medium double-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f64, mediump> mediump_f64mat2x4;\n\n\t/// Medium double-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f64, mediump> mediump_f64mat3x2;\n\n\t/// Medium double-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f64, mediump> mediump_f64mat3x3;\n\n\t/// Medium double-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f64, mediump> mediump_f64mat3x4;\n\n\t/// Medium double-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f64, mediump> mediump_f64mat4x2;\n\n\t/// Medium double-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f64, mediump> mediump_f64mat4x3;\n\n\t/// Medium double-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f64, mediump> mediump_f64mat4x4;\n\n\t/// Medium double-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef mediump_f64mat1x1 mediump_f64mat1;\n\n\t/// Medium double-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_f64mat2x2 mediump_f64mat2;\n\n\t/// Medium double-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_f64mat3x3 mediump_f64mat3;\n\n\t/// Medium double-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mediump_f64mat4x4 mediump_f64mat4;\n\n\t/// High double-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f64 highp_f64mat1x1;\n\n\t/// High double-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f64, highp> highp_f64mat2x2;\n\n\t/// High double-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f64, highp> highp_f64mat2x3;\n\n\t/// High double-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f64, highp> highp_f64mat2x4;\n\n\t/// High double-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f64, highp> highp_f64mat3x2;\n\n\t/// High double-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f64, highp> highp_f64mat3x3;\n\n\t/// High double-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f64, highp> highp_f64mat3x4;\n\n\t/// High double-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f64, highp> highp_f64mat4x2;\n\n\t/// High double-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f64, highp> highp_f64mat4x3;\n\n\t/// High double-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f64, highp> highp_f64mat4x4;\n\n\t/// High double-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef highp_f64mat1x1 highp_f64mat1;\n\n\t/// High double-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_f64mat2x2 highp_f64mat2;\n\n\t/// High double-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_f64mat3x3 highp_f64mat3;\n\n\t/// High double-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef highp_f64mat4x4 highp_f64mat4;\n\n\n\t/////////////////////////////\n\t// Signed int vector types\n\n\t/// Low qualifier signed integer vector of 1 component type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, int, lowp>\t\tlowp_ivec1;\n\n\t/// Low qualifier signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, int, lowp>\t\tlowp_ivec2;\n\n\t/// Low qualifier signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, int, lowp>\t\tlowp_ivec3;\n\n\t/// Low qualifier signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, int, lowp>\t\tlowp_ivec4;\n\n\n\t/// Medium qualifier signed integer vector of 1 component type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, int, mediump>\tmediump_ivec1;\n\n\t/// Medium qualifier signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, int, mediump>\tmediump_ivec2;\n\n\t/// Medium qualifier signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, int, mediump>\tmediump_ivec3;\n\n\t/// Medium qualifier signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, int, mediump>\tmediump_ivec4;\n\n\n\t/// High qualifier signed integer vector of 1 component type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, int, highp>\t\thighp_ivec1;\n\n\t/// High qualifier signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, int, highp>\t\thighp_ivec2;\n\n\t/// High qualifier signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, int, highp>\t\thighp_ivec3;\n\n\t/// High qualifier signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, int, highp>\t\thighp_ivec4;\n\n\n\t/// Low qualifier 8 bit signed integer vector of 1 component type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i8, lowp>\t\tlowp_i8vec1;\n\n\t/// Low qualifier 8 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i8, lowp>\t\tlowp_i8vec2;\n\n\t/// Low qualifier 8 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i8, lowp>\t\tlowp_i8vec3;\n\n\t/// Low qualifier 8 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i8, lowp>\t\tlowp_i8vec4;\n\n\n\t/// Medium qualifier 8 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i8, mediump>\t\tmediump_i8vec1;\n\n\t/// Medium qualifier 8 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i8, mediump>\t\tmediump_i8vec2;\n\n\t/// Medium qualifier 8 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i8, mediump>\t\tmediump_i8vec3;\n\n\t/// Medium qualifier 8 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i8, mediump>\t\tmediump_i8vec4;\n\n\n\t/// High qualifier 8 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i8, highp>\t\thighp_i8vec1;\n\n\t/// High qualifier 8 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i8, highp>\t\thighp_i8vec2;\n\n\t/// High qualifier 8 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i8, highp>\t\thighp_i8vec3;\n\n\t/// High qualifier 8 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i8, highp>\t\thighp_i8vec4;\n\n\n\t/// Low qualifier 16 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i16, lowp>\t\tlowp_i16vec1;\n\n\t/// Low qualifier 16 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i16, lowp>\t\tlowp_i16vec2;\n\n\t/// Low qualifier 16 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i16, lowp>\t\tlowp_i16vec3;\n\n\t/// Low qualifier 16 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i16, lowp>\t\tlowp_i16vec4;\n\n\n\t/// Medium qualifier 16 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i16, mediump>\tmediump_i16vec1;\n\n\t/// Medium qualifier 16 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i16, mediump>\tmediump_i16vec2;\n\n\t/// Medium qualifier 16 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i16, mediump>\tmediump_i16vec3;\n\n\t/// Medium qualifier 16 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i16, mediump>\tmediump_i16vec4;\n\n\n\t/// High qualifier 16 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i16, highp>\t\thighp_i16vec1;\n\n\t/// High qualifier 16 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i16, highp>\t\thighp_i16vec2;\n\n\t/// High qualifier 16 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i16, highp>\t\thighp_i16vec3;\n\n\t/// High qualifier 16 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i16, highp>\t\thighp_i16vec4;\n\n\n\t/// Low qualifier 32 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i32, lowp>\t\tlowp_i32vec1;\n\n\t/// Low qualifier 32 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i32, lowp>\t\tlowp_i32vec2;\n\n\t/// Low qualifier 32 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i32, lowp>\t\tlowp_i32vec3;\n\n\t/// Low qualifier 32 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i32, lowp>\t\tlowp_i32vec4;\n\n\n\t/// Medium qualifier 32 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i32, mediump>\tmediump_i32vec1;\n\n\t/// Medium qualifier 32 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i32, mediump>\tmediump_i32vec2;\n\n\t/// Medium qualifier 32 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i32, mediump>\tmediump_i32vec3;\n\n\t/// Medium qualifier 32 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i32, mediump>\tmediump_i32vec4;\n\n\n\t/// High qualifier 32 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i32, highp>\t\thighp_i32vec1;\n\n\t/// High qualifier 32 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i32, highp>\t\thighp_i32vec2;\n\n\t/// High qualifier 32 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i32, highp>\t\thighp_i32vec3;\n\n\t/// High qualifier 32 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i32, highp>\t\thighp_i32vec4;\n\n\n\t/// Low qualifier 64 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i64, lowp>\t\tlowp_i64vec1;\n\n\t/// Low qualifier 64 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i64, lowp>\t\tlowp_i64vec2;\n\n\t/// Low qualifier 64 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i64, lowp>\t\tlowp_i64vec3;\n\n\t/// Low qualifier 64 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i64, lowp>\t\tlowp_i64vec4;\n\n\n\t/// Medium qualifier 64 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i64, mediump>\tmediump_i64vec1;\n\n\t/// Medium qualifier 64 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i64, mediump>\tmediump_i64vec2;\n\n\t/// Medium qualifier 64 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i64, mediump>\tmediump_i64vec3;\n\n\t/// Medium qualifier 64 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i64, mediump>\tmediump_i64vec4;\n\n\n\t/// High qualifier 64 bit signed integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, i64, highp>\t\thighp_i64vec1;\n\n\t/// High qualifier 64 bit signed integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, i64, highp>\t\thighp_i64vec2;\n\n\t/// High qualifier 64 bit signed integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, i64, highp>\t\thighp_i64vec3;\n\n\t/// High qualifier 64 bit signed integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, i64, highp>\t\thighp_i64vec4;\n\n\n\t/////////////////////////////\n\t// Unsigned int vector types\n\n\t/// Low qualifier unsigned integer vector of 1 component type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, uint, lowp>\t\tlowp_uvec1;\n\n\t/// Low qualifier unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, uint, lowp>\t\tlowp_uvec2;\n\n\t/// Low qualifier unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, uint, lowp>\t\tlowp_uvec3;\n\n\t/// Low qualifier unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, uint, lowp>\t\tlowp_uvec4;\n\n\n\t/// Medium qualifier unsigned integer vector of 1 component type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, uint, mediump>\tmediump_uvec1;\n\n\t/// Medium qualifier unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, uint, mediump>\tmediump_uvec2;\n\n\t/// Medium qualifier unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, uint, mediump>\tmediump_uvec3;\n\n\t/// Medium qualifier unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, uint, mediump>\tmediump_uvec4;\n\n\n\t/// High qualifier unsigned integer vector of 1 component type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, uint, highp>\t\thighp_uvec1;\n\n\t/// High qualifier unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, uint, highp>\t\thighp_uvec2;\n\n\t/// High qualifier unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, uint, highp>\t\thighp_uvec3;\n\n\t/// High qualifier unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, uint, highp>\t\thighp_uvec4;\n\n\n\t/// Low qualifier 8 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u8, lowp>\t\tlowp_u8vec1;\n\n\t/// Low qualifier 8 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u8, lowp>\t\tlowp_u8vec2;\n\n\t/// Low qualifier 8 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u8, lowp>\t\tlowp_u8vec3;\n\n\t/// Low qualifier 8 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u8, lowp>\t\tlowp_u8vec4;\n\n\n\t/// Medium qualifier 8 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u8, mediump>\t\tmediump_u8vec1;\n\n\t/// Medium qualifier 8 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u8, mediump>\t\tmediump_u8vec2;\n\n\t/// Medium qualifier 8 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u8, mediump>\t\tmediump_u8vec3;\n\n\t/// Medium qualifier 8 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u8, mediump>\t\tmediump_u8vec4;\n\n\n\t/// High qualifier 8 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u8, highp>\t\thighp_u8vec1;\n\n\t/// High qualifier 8 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u8, highp>\t\thighp_u8vec2;\n\n\t/// High qualifier 8 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u8, highp>\t\thighp_u8vec3;\n\n\t/// High qualifier 8 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u8, highp>\t\thighp_u8vec4;\n\n\n\t/// Low qualifier 16 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u16, lowp>\t\tlowp_u16vec1;\n\n\t/// Low qualifier 16 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u16, lowp>\t\tlowp_u16vec2;\n\n\t/// Low qualifier 16 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u16, lowp>\t\tlowp_u16vec3;\n\n\t/// Low qualifier 16 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u16, lowp>\t\tlowp_u16vec4;\n\n\n\t/// Medium qualifier 16 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u16, mediump>\tmediump_u16vec1;\n\n\t/// Medium qualifier 16 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u16, mediump>\tmediump_u16vec2;\n\n\t/// Medium qualifier 16 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u16, mediump>\tmediump_u16vec3;\n\n\t/// Medium qualifier 16 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u16, mediump>\tmediump_u16vec4;\n\n\n\t/// High qualifier 16 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u16, highp>\t\thighp_u16vec1;\n\n\t/// High qualifier 16 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u16, highp>\t\thighp_u16vec2;\n\n\t/// High qualifier 16 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u16, highp>\t\thighp_u16vec3;\n\n\t/// High qualifier 16 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u16, highp>\t\thighp_u16vec4;\n\n\n\t/// Low qualifier 32 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u32, lowp>\t\tlowp_u32vec1;\n\n\t/// Low qualifier 32 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u32, lowp>\t\tlowp_u32vec2;\n\n\t/// Low qualifier 32 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u32, lowp>\t\tlowp_u32vec3;\n\n\t/// Low qualifier 32 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u32, lowp>\t\tlowp_u32vec4;\n\n\n\t/// Medium qualifier 32 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u32, mediump>\tmediump_u32vec1;\n\n\t/// Medium qualifier 32 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u32, mediump>\tmediump_u32vec2;\n\n\t/// Medium qualifier 32 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u32, mediump>\tmediump_u32vec3;\n\n\t/// Medium qualifier 32 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u32, mediump>\tmediump_u32vec4;\n\n\n\t/// High qualifier 32 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u32, highp>\t\thighp_u32vec1;\n\n\t/// High qualifier 32 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u32, highp>\t\thighp_u32vec2;\n\n\t/// High qualifier 32 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u32, highp>\t\thighp_u32vec3;\n\n\t/// High qualifier 32 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u32, highp>\t\thighp_u32vec4;\n\n\n\t/// Low qualifier 64 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u64, lowp>\t\tlowp_u64vec1;\n\n\t/// Low qualifier 64 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u64, lowp>\t\tlowp_u64vec2;\n\n\t/// Low qualifier 64 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u64, lowp>\t\tlowp_u64vec3;\n\n\t/// Low qualifier 64 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u64, lowp>\t\tlowp_u64vec4;\n\n\n\t/// Medium qualifier 64 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u64, mediump>\tmediump_u64vec1;\n\n\t/// Medium qualifier 64 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u64, mediump>\tmediump_u64vec2;\n\n\t/// Medium qualifier 64 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u64, mediump>\tmediump_u64vec3;\n\n\t/// Medium qualifier 64 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u64, mediump>\tmediump_u64vec4;\n\n\n\t/// High qualifier 64 bit unsigned integer scalar type.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, u64, highp>\t\thighp_u64vec1;\n\n\t/// High qualifier 64 bit unsigned integer vector of 2 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, u64, highp>\t\thighp_u64vec2;\n\n\t/// High qualifier 64 bit unsigned integer vector of 3 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, u64, highp>\t\thighp_u64vec3;\n\n\t/// High qualifier 64 bit unsigned integer vector of 4 components type.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, u64, highp>\t\thighp_u64vec4;\n\n\n\t//////////////////////\n\t// Float vector types\n\n\t/// 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 float32_t;\n\n\t/// 32 bit single-qualifier floating-point scalar.\n\t/// @see gtc_type_precision\n\ttypedef float32 f32;\n\n#\tifndef GLM_FORCE_SINGLE_ONLY\n\n\t\t/// 64 bit double-qualifier floating-point scalar.\n\t\t/// @see gtc_type_precision\n\t\ttypedef float64 float64_t;\n\n\t\t/// 64 bit double-qualifier floating-point scalar.\n\t\t/// @see gtc_type_precision\n\t\ttypedef float64 f64;\n#\tendif//GLM_FORCE_SINGLE_ONLY\n\n\t/// Single-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, float, defaultp> fvec1;\n\n\t/// Single-qualifier floating-point vector of 2 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, float, defaultp> fvec2;\n\n\t/// Single-qualifier floating-point vector of 3 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, float, defaultp> fvec3;\n\n\t/// Single-qualifier floating-point vector of 4 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, float, defaultp> fvec4;\n\n\n\t/// Single-qualifier floating-point vector of 1 component.\n\t/// @see gtc_type_precision\n\ttypedef vec<1, f32, defaultp> f32vec1;\n\n\t/// Single-qualifier floating-point vector of 2 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<2, f32, defaultp> f32vec2;\n\n\t/// Single-qualifier floating-point vector of 3 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<3, f32, defaultp> f32vec3;\n\n\t/// Single-qualifier floating-point vector of 4 components.\n\t/// @see gtc_type_precision\n\ttypedef vec<4, f32, defaultp> f32vec4;\n\n#\tifndef GLM_FORCE_SINGLE_ONLY\n\t\t/// Double-qualifier floating-point vector of 1 component.\n\t\t/// @see gtc_type_precision\n\t\ttypedef vec<1, f64, defaultp> f64vec1;\n\n\t\t/// Double-qualifier floating-point vector of 2 components.\n\t\t/// @see gtc_type_precision\n\t\ttypedef vec<2, f64, defaultp> f64vec2;\n\n\t\t/// Double-qualifier floating-point vector of 3 components.\n\t\t/// @see gtc_type_precision\n\t\ttypedef vec<3, f64, defaultp> f64vec3;\n\n\t\t/// Double-qualifier floating-point vector of 4 components.\n\t\t/// @see gtc_type_precision\n\t\ttypedef vec<4, f64, defaultp> f64vec4;\n#\tendif//GLM_FORCE_SINGLE_ONLY\n\n\n\t//////////////////////\n\t// Float matrix types\n\n\t/// Single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef detail::tmat1x1<f32> fmat1;\n\n\t/// Single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, defaultp> fmat2;\n\n\t/// Single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, defaultp> fmat3;\n\n\t/// Single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, defaultp> fmat4;\n\n\n\t/// Single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f32 fmat1x1;\n\n\t/// Single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, defaultp> fmat2x2;\n\n\t/// Single-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f32, defaultp> fmat2x3;\n\n\t/// Single-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f32, defaultp> fmat2x4;\n\n\t/// Single-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f32, defaultp> fmat3x2;\n\n\t/// Single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, defaultp> fmat3x3;\n\n\t/// Single-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f32, defaultp> fmat3x4;\n\n\t/// Single-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f32, defaultp> fmat4x2;\n\n\t/// Single-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f32, defaultp> fmat4x3;\n\n\t/// Single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, defaultp> fmat4x4;\n\n\n\t/// Single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef detail::tmat1x1<f32, defaultp> f32mat1;\n\n\t/// Single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, defaultp> f32mat2;\n\n\t/// Single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, defaultp> f32mat3;\n\n\t/// Single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, defaultp> f32mat4;\n\n\n\t/// Single-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f32 f32mat1x1;\n\n\t/// Single-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f32, defaultp> f32mat2x2;\n\n\t/// Single-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f32, defaultp> f32mat2x3;\n\n\t/// Single-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f32, defaultp> f32mat2x4;\n\n\t/// Single-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f32, defaultp> f32mat3x2;\n\n\t/// Single-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f32, defaultp> f32mat3x3;\n\n\t/// Single-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f32, defaultp> f32mat3x4;\n\n\t/// Single-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f32, defaultp> f32mat4x2;\n\n\t/// Single-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f32, defaultp> f32mat4x3;\n\n\t/// Single-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f32, defaultp> f32mat4x4;\n\n\n#\tifndef GLM_FORCE_SINGLE_ONLY\n\n\t/// Double-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef detail::tmat1x1<f64, defaultp> f64mat1;\n\n\t/// Double-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f64, defaultp> f64mat2;\n\n\t/// Double-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f64, defaultp> f64mat3;\n\n\t/// Double-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f64, defaultp> f64mat4;\n\n\n\t/// Double-qualifier floating-point 1x1 matrix.\n\t/// @see gtc_type_precision\n\t//typedef f64 f64mat1x1;\n\n\t/// Double-qualifier floating-point 2x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 2, f64, defaultp> f64mat2x2;\n\n\t/// Double-qualifier floating-point 2x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 3, f64, defaultp> f64mat2x3;\n\n\t/// Double-qualifier floating-point 2x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<2, 4, f64, defaultp> f64mat2x4;\n\n\t/// Double-qualifier floating-point 3x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 2, f64, defaultp> f64mat3x2;\n\n\t/// Double-qualifier floating-point 3x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 3, f64, defaultp> f64mat3x3;\n\n\t/// Double-qualifier floating-point 3x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<3, 4, f64, defaultp> f64mat3x4;\n\n\t/// Double-qualifier floating-point 4x2 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 2, f64, defaultp> f64mat4x2;\n\n\t/// Double-qualifier floating-point 4x3 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 3, f64, defaultp> f64mat4x3;\n\n\t/// Double-qualifier floating-point 4x4 matrix.\n\t/// @see gtc_type_precision\n\ttypedef mat<4, 4, f64, defaultp> f64mat4x4;\n\n#\tendif//GLM_FORCE_SINGLE_ONLY\n\n\t//////////////////////////\n\t// Quaternion types\n\n\t/// Single-qualifier floating-point quaternion.\n\t/// @see gtc_type_precision\n\ttypedef qua<f32, defaultp> f32quat;\n\n\t/// Low single-qualifier floating-point quaternion.\n\t/// @see gtc_type_precision\n\ttypedef qua<f32, lowp> lowp_f32quat;\n\n\t/// Low double-qualifier floating-point quaternion.\n\t/// @see gtc_type_precision\n\ttypedef qua<f64, lowp> lowp_f64quat;\n\n\t/// Medium single-qualifier floating-point quaternion.\n\t/// @see gtc_type_precision\n\ttypedef qua<f32, mediump> mediump_f32quat;\n\n#\tifndef GLM_FORCE_SINGLE_ONLY\n\n\t/// Medium double-qualifier floating-point quaternion.\n\t/// @see gtc_type_precision\n\ttypedef qua<f64, mediump> mediump_f64quat;\n\n\t/// High single-qualifier floating-point quaternion.\n\t/// @see gtc_type_precision\n\ttypedef qua<f32, highp> highp_f32quat;\n\n\t/// High double-qualifier floating-point quaternion.\n\t/// @see gtc_type_precision\n\ttypedef qua<f64, highp> highp_f64quat;\n\n\t/// Double-qualifier floating-point quaternion.\n\t/// @see gtc_type_precision\n\ttypedef qua<f64, defaultp> f64quat;\n\n#\tendif//GLM_FORCE_SINGLE_ONLY\n\n\t/// @}\n}//namespace glm\n\n#include \"type_precision.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/type_precision.inl",
    "content": "/// @ref gtc_precision\n\nnamespace glm\n{\n\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/type_ptr.hpp",
    "content": "/// @ref gtc_type_ptr\n/// @file glm/gtc/type_ptr.hpp\n///\n/// @see core (dependence)\n/// @see gtc_quaternion (dependence)\n///\n/// @defgroup gtc_type_ptr GLM_GTC_type_ptr\n/// @ingroup gtc\n///\n/// Include <glm/gtc/type_ptr.hpp> to use the features of this extension.\n///\n/// Handles the interaction between pointers and vector, matrix types.\n///\n/// This extension defines an overloaded function, glm::value_ptr. It returns\n/// a pointer to the memory layout of the object. Matrix types store their values\n/// in column-major order.\n///\n/// This is useful for uploading data to matrices or copying data to buffer objects.\n///\n/// Example:\n/// @code\n/// #include <glm/glm.hpp>\n/// #include <glm/gtc/type_ptr.hpp>\n///\n/// glm::vec3 aVector(3);\n/// glm::mat4 someMatrix(1.0);\n///\n/// glUniform3fv(uniformLoc, 1, glm::value_ptr(aVector));\n/// glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, glm::value_ptr(someMatrix));\n/// @endcode\n///\n/// <glm/gtc/type_ptr.hpp> need to be included to use the features of this extension.\n\n#pragma once\n\n// Dependency:\n#include \"../gtc/quaternion.hpp\"\n#include \"../gtc/vec1.hpp\"\n#include \"../vec2.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n#include \"../mat2x2.hpp\"\n#include \"../mat2x3.hpp\"\n#include \"../mat2x4.hpp\"\n#include \"../mat3x2.hpp\"\n#include \"../mat3x3.hpp\"\n#include \"../mat3x4.hpp\"\n#include \"../mat4x2.hpp\"\n#include \"../mat4x3.hpp\"\n#include \"../mat4x4.hpp\"\n#include <cstring>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_type_ptr extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_type_ptr\n\t/// @{\n\n\t/// Return the constant address to the data of the input parameter.\n\t/// @see gtc_type_ptr\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL typename genType::value_type const * value_ptr(genType const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<1, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<2, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<3, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<4, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<1, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<2, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<3, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<4, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<1, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<2, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<3, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<4, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<1, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<2, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<3, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<4, T, Q> const& v);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL vec<2, T, defaultp> make_vec2(T const * const ptr);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL vec<3, T, defaultp> make_vec3(T const * const ptr);\n\n\t/// Build a vector from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL vec<4, T, defaultp> make_vec4(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2x2(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<2, 3, T, defaultp> make_mat2x3(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<2, 4, T, defaultp> make_mat2x4(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<3, 2, T, defaultp> make_mat3x2(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3x3(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<3, 4, T, defaultp> make_mat3x4(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 2, T, defaultp> make_mat4x2(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 3, T, defaultp> make_mat4x3(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4x4(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3(T const * const ptr);\n\n\t/// Build a matrix from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4(T const * const ptr);\n\n\t/// Build a quaternion from a pointer.\n\t/// @see gtc_type_ptr\n\ttemplate<typename T>\n\tGLM_FUNC_DECL qua<T, defaultp> make_quat(T const * const ptr);\n\n\t/// @}\n}//namespace glm\n\n#include \"type_ptr.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/type_ptr.inl",
    "content": "/// @ref gtc_type_ptr\n\n#include <cstring>\n\nnamespace glm\n{\n\t/// @addtogroup gtc_type_ptr\n\t/// @{\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(vec<2, T, Q> const& v)\n\t{\n\t\treturn &(v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(vec<2, T, Q>& v)\n\t{\n\t\treturn &(v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const * value_ptr(vec<3, T, Q> const& v)\n\t{\n\t\treturn &(v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(vec<3, T, Q>& v)\n\t{\n\t\treturn &(v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(vec<4, T, Q> const& v)\n\t{\n\t\treturn &(v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(vec<4, T, Q>& v)\n\t{\n\t\treturn &(v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(mat<2, 2, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 3, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(mat<3, 3, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 4, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(mat<4, 4, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 3, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(mat<2, 3, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 2, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(mat<3, 2, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 4, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(mat<2, 4, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 2, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(mat<4, 2, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 4, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(mat<3, 4, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 3, T, Q> const& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T * value_ptr(mat<4, 3, T, Q>& m)\n\t{\n\t\treturn &(m[0].x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T const * value_ptr(qua<T, Q> const& q)\n\t{\n\t\treturn &(q[0]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T* value_ptr(qua<T, Q>& q)\n\t{\n\t\treturn &(q[0]);\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<1, T, Q> const& v)\n\t{\n\t\treturn v;\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(v);\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(v);\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<1, T, Q>(v);\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(v.x, static_cast<T>(0));\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<2, T, Q> const& v)\n\t{\n\t\treturn v;\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(v);\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<2, T, Q>(v);\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(v.x, static_cast<T>(0), static_cast<T>(0));\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(v.x, v.y, static_cast<T>(0));\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<3, T, Q> const& v)\n\t{\n\t\treturn v;\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<3, T, Q>(v);\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<1, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(v.x, static_cast<T>(0), static_cast<T>(0), static_cast<T>(1));\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<2, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(v.x, v.y, static_cast<T>(0), static_cast<T>(1));\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<3, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(v.x, v.y, v.z, static_cast<T>(1));\n\t}\n\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<4, T, Q> const& v)\n\t{\n\t\treturn v;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER vec<2, T, defaultp> make_vec2(T const *const ptr)\n\t{\n\t\tvec<2, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(vec<2, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER vec<3, T, defaultp> make_vec3(T const *const ptr)\n\t{\n\t\tvec<3, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(vec<3, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER vec<4, T, defaultp> make_vec4(T const *const ptr)\n\t{\n\t\tvec<4, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(vec<4, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2x2(T const *const ptr)\n\t{\n\t\tmat<2, 2, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<2, 2, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, defaultp> make_mat2x3(T const *const ptr)\n\t{\n\t\tmat<2, 3, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<2, 3, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, defaultp> make_mat2x4(T const *const ptr)\n\t{\n\t\tmat<2, 4, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<2, 4, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, defaultp> make_mat3x2(T const *const ptr)\n\t{\n\t\tmat<3, 2, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<3, 2, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3x3(T const *const ptr)\n\t{\n\t\tmat<3, 3, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<3, 3, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, defaultp> make_mat3x4(T const *const ptr)\n\t{\n\t\tmat<3, 4, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<3, 4, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, defaultp> make_mat4x2(T const *const ptr)\n\t{\n\t\tmat<4, 2, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<4, 2, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, defaultp> make_mat4x3(T const *const ptr)\n\t{\n\t\tmat<4, 3, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<4, 3, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4x4(T const *const ptr)\n\t{\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(mat<4, 4, T, defaultp>));\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2(T const *const ptr)\n\t{\n\t\treturn make_mat2x2(ptr);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3(T const *const ptr)\n\t{\n\t\treturn make_mat3x3(ptr);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4(T const *const ptr)\n\t{\n\t\treturn make_mat4x4(ptr);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER qua<T, defaultp> make_quat(T const *const ptr)\n\t{\n\t\tqua<T, defaultp> Result;\n\t\tmemcpy(value_ptr(Result), ptr, sizeof(qua<T, defaultp>));\n\t\treturn Result;\n\t}\n\n\t/// @}\n}//namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/ulp.hpp",
    "content": "/// @ref gtc_ulp\n/// @file glm/gtc/ulp.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_ulp GLM_GTC_ulp\n/// @ingroup gtc\n///\n/// Include <glm/gtc/ulp.hpp> to use the features of this extension.\n///\n/// Allow the measurement of the accuracy of a function against a reference\n/// implementation. This extension works on floating-point data and provide results\n/// in ULP.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/_vectorize.hpp\"\n#include \"../ext/scalar_int_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_ulp extension included\")\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtc_ulp\n\t/// @{\n\n\t/// Return the next ULP value(s) after the input value(s).\n\t///\n\t/// @tparam genType A floating-point scalar type.\n\t///\n\t/// @see gtc_ulp\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType next_float(genType x);\n\n\t/// Return the previous ULP value(s) before the input value(s).\n\t///\n\t/// @tparam genType A floating-point scalar type.\n\t///\n\t/// @see gtc_ulp\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType prev_float(genType x);\n\n\t/// Return the value(s) ULP distance after the input value(s).\n\t///\n\t/// @tparam genType A floating-point scalar type.\n\t///\n\t/// @see gtc_ulp\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType next_float(genType x, int ULPs);\n\n\t/// Return the value(s) ULP distance before the input value(s).\n\t///\n\t/// @tparam genType A floating-point scalar type.\n\t///\n\t/// @see gtc_ulp\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType prev_float(genType x, int ULPs);\n\n\t/// Return the distance in the number of ULP between 2 single-precision floating-point scalars.\n\t///\n\t/// @see gtc_ulp\n\tGLM_FUNC_DECL int float_distance(float x, float y);\n\n\t/// Return the distance in the number of ULP between 2 double-precision floating-point scalars.\n\t///\n\t/// @see gtc_ulp\n\tGLM_FUNC_DECL int64 float_distance(double x, double y);\n\n\t/// Return the next ULP value(s) after the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> next_float(vec<L, T, Q> const& x);\n\n\t/// Return the value(s) ULP distance after the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> next_float(vec<L, T, Q> const& x, int ULPs);\n\n\t/// Return the value(s) ULP distance after the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> next_float(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs);\n\n\t/// Return the previous ULP value(s) before the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prev_float(vec<L, T, Q> const& x);\n\n\t/// Return the value(s) ULP distance before the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prev_float(vec<L, T, Q> const& x, int ULPs);\n\n\t/// Return the value(s) ULP distance before the input value(s).\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> prev_float(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs);\n\n\t/// Return the distance in the number of ULP between 2 single-precision floating-point scalars.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int, Q> float_distance(vec<L, float, Q> const& x, vec<L, float, Q> const& y);\n\n\t/// Return the distance in the number of ULP between 2 double-precision floating-point scalars.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see gtc_ulp\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int64, Q> float_distance(vec<L, double, Q> const& x, vec<L, double, Q> const& y);\n\n\t/// @}\n}//namespace glm\n\n#include \"ulp.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/ulp.inl",
    "content": "/// @ref gtc_ulp\n\n#include \"../ext/scalar_ulp.hpp\"\n\nnamespace glm\n{\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER float next_float(float x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\treturn std::nextafter(x, std::numeric_limits<float>::max());\n#\t\telif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))\n\t\treturn detail::nextafterf(x, FLT_MAX);\n#\t\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n\t\treturn __builtin_nextafterf(x, FLT_MAX);\n#\t\telse\n\t\treturn nextafterf(x, FLT_MAX);\n#\t\tendif\n\t}\n\n\ttemplate<>\n\tGLM_FUNC_QUALIFIER double next_float(double x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\treturn std::nextafter(x, std::numeric_limits<double>::max());\n#\t\telif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))\n\t\treturn detail::nextafter(x, std::numeric_limits<double>::max());\n#\t\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n\t\treturn __builtin_nextafter(x, DBL_MAX);\n#\t\telse\n\t\treturn nextafter(x, DBL_MAX);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T next_float(T x, int ULPs)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'next_float' only accept floating-point input\");\n\t\tassert(ULPs >= 0);\n\n\t\tT temp = x;\n\t\tfor (int i = 0; i < ULPs; ++i)\n\t\t\ttemp = next_float(temp);\n\t\treturn temp;\n\t}\n\n\tGLM_FUNC_QUALIFIER float prev_float(float x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\treturn std::nextafter(x, std::numeric_limits<float>::min());\n#\t\telif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))\n\t\treturn detail::nextafterf(x, FLT_MIN);\n#\t\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n\t\treturn __builtin_nextafterf(x, FLT_MIN);\n#\t\telse\n\t\treturn nextafterf(x, FLT_MIN);\n#\t\tendif\n\t}\n\n\tGLM_FUNC_QUALIFIER double prev_float(double x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\treturn std::nextafter(x, std::numeric_limits<double>::min());\n#\t\telif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)))\n\t\treturn _nextafter(x, DBL_MIN);\n#\t\telif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n\t\treturn __builtin_nextafter(x, DBL_MIN);\n#\t\telse\n\t\treturn nextafter(x, DBL_MIN);\n#\t\tendif\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T prev_float(T x, int ULPs)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'prev_float' only accept floating-point input\");\n\t\tassert(ULPs >= 0);\n\n\t\tT temp = x;\n\t\tfor (int i = 0; i < ULPs; ++i)\n\t\t\ttemp = prev_float(temp);\n\t\treturn temp;\n\t}\n\n\tGLM_FUNC_QUALIFIER int float_distance(float x, float y)\n\t{\n\t\tdetail::float_t<float> const a(x);\n\t\tdetail::float_t<float> const b(y);\n\n\t\treturn abs(a.i - b.i);\n\t}\n\n\tGLM_FUNC_QUALIFIER int64 float_distance(double x, double y)\n\t{\n\t\tdetail::float_t<double> const a(x);\n\t\tdetail::float_t<double> const b(y);\n\n\t\treturn abs(a.i - b.i);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> next_float(vec<L, T, Q> const& x)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor (length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = next_float(x[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> next_float(vec<L, T, Q> const& x, int ULPs)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor (length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = next_float(x[i], ULPs);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> next_float(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor (length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = next_float(x[i], ULPs[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prev_float(vec<L, T, Q> const& x)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor (length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = prev_float(x[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prev_float(vec<L, T, Q> const& x, int ULPs)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor (length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = prev_float(x[i], ULPs);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> prev_float(vec<L, T, Q> const& x, vec<L, int, Q> const& ULPs)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor (length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = prev_float(x[i], ULPs[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int, Q> float_distance(vec<L, float, Q> const& x, vec<L, float, Q> const& y)\n\t{\n\t\tvec<L, int, Q> Result;\n\t\tfor (length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = float_distance(x[i], y[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, int64, Q> float_distance(vec<L, double, Q> const& x, vec<L, double, Q> const& y)\n\t{\n\t\tvec<L, int64, Q> Result;\n\t\tfor (length_t i = 0, n = Result.length(); i < n; ++i)\n\t\t\tResult[i] = float_distance(x[i], y[i]);\n\t\treturn Result;\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtc/vec1.hpp",
    "content": "/// @ref gtc_vec1\n/// @file glm/gtc/vec1.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtc_vec1 GLM_GTC_vec1\n/// @ingroup gtc\n///\n/// Include <glm/gtc/vec1.hpp> to use the features of this extension.\n///\n/// Add vec1, ivec1, uvec1 and bvec1 types.\n\n#pragma once\n\n// Dependency:\n#include \"../ext/vector_bool1.hpp\"\n#include \"../ext/vector_bool1_precision.hpp\"\n#include \"../ext/vector_float1.hpp\"\n#include \"../ext/vector_float1_precision.hpp\"\n#include \"../ext/vector_double1.hpp\"\n#include \"../ext/vector_double1_precision.hpp\"\n#include \"../ext/vector_int1.hpp\"\n#include \"../ext/vector_int1_sized.hpp\"\n#include \"../ext/vector_uint1.hpp\"\n#include \"../ext/vector_uint1_sized.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tpragma message(\"GLM: GLM_GTC_vec1 extension included\")\n#endif\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/associated_min_max.hpp",
    "content": "/// @ref gtx_associated_min_max\n/// @file glm/gtx/associated_min_max.hpp\n///\n/// @see core (dependence)\n/// @see gtx_extented_min_max (dependence)\n///\n/// @defgroup gtx_associated_min_max GLM_GTX_associated_min_max\n/// @ingroup gtx\n///\n/// Include <glm/gtx/associated_min_max.hpp> to use the features of this extension.\n///\n/// @brief Min and max functions that return associated values not the compared ones.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_associated_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_associated_min_max extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_associated_min_max\n\t/// @{\n\n\t/// Minimum comparison between 2 variables and returns 2 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<typename T, typename U>\n\tGLM_FUNC_DECL U associatedMin(T x, U a, T y, U b);\n\n\t/// Minimum comparison between 2 variables and returns 2 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMin(\n\t\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\t\tvec<L, T, Q> const& y, vec<L, U, Q> const& b);\n\n\t/// Minimum comparison between 2 variables and returns 2 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMin(\n\t\tT x, const vec<L, U, Q>& a,\n\t\tT y, const vec<L, U, Q>& b);\n\n\t/// Minimum comparison between 2 variables and returns 2 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMin(\n\t\tvec<L, T, Q> const& x, U a,\n\t\tvec<L, T, Q> const& y, U b);\n\n\t/// Minimum comparison between 3 variables and returns 3 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<typename T, typename U>\n\tGLM_FUNC_DECL U associatedMin(\n\t\tT x, U a,\n\t\tT y, U b,\n\t\tT z, U c);\n\n\t/// Minimum comparison between 3 variables and returns 3 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMin(\n\t\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\t\tvec<L, T, Q> const& y, vec<L, U, Q> const& b,\n\t\tvec<L, T, Q> const& z, vec<L, U, Q> const& c);\n\n\t/// Minimum comparison between 4 variables and returns 4 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<typename T, typename U>\n\tGLM_FUNC_DECL U associatedMin(\n\t\tT x, U a,\n\t\tT y, U b,\n\t\tT z, U c,\n\t\tT w, U d);\n\n\t/// Minimum comparison between 4 variables and returns 4 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMin(\n\t\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\t\tvec<L, T, Q> const& y, vec<L, U, Q> const& b,\n\t\tvec<L, T, Q> const& z, vec<L, U, Q> const& c,\n\t\tvec<L, T, Q> const& w, vec<L, U, Q> const& d);\n\n\t/// Minimum comparison between 4 variables and returns 4 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMin(\n\t\tT x, vec<L, U, Q> const& a,\n\t\tT y, vec<L, U, Q> const& b,\n\t\tT z, vec<L, U, Q> const& c,\n\t\tT w, vec<L, U, Q> const& d);\n\n\t/// Minimum comparison between 4 variables and returns 4 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMin(\n\t\tvec<L, T, Q> const& x, U a,\n\t\tvec<L, T, Q> const& y, U b,\n\t\tvec<L, T, Q> const& z, U c,\n\t\tvec<L, T, Q> const& w, U d);\n\n\t/// Maximum comparison between 2 variables and returns 2 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<typename T, typename U>\n\tGLM_FUNC_DECL U associatedMax(T x, U a, T y, U b);\n\n\t/// Maximum comparison between 2 variables and returns 2 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMax(\n\t\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\t\tvec<L, T, Q> const& y, vec<L, U, Q> const& b);\n\n\t/// Maximum comparison between 2 variables and returns 2 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> associatedMax(\n\t\tT x, vec<L, U, Q> const& a,\n\t\tT y, vec<L, U, Q> const& b);\n\n\t/// Maximum comparison between 2 variables and returns 2 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMax(\n\t\tvec<L, T, Q> const& x, U a,\n\t\tvec<L, T, Q> const& y, U b);\n\n\t/// Maximum comparison between 3 variables and returns 3 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<typename T, typename U>\n\tGLM_FUNC_DECL U associatedMax(\n\t\tT x, U a,\n\t\tT y, U b,\n\t\tT z, U c);\n\n\t/// Maximum comparison between 3 variables and returns 3 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMax(\n\t\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\t\tvec<L, T, Q> const& y, vec<L, U, Q> const& b,\n\t\tvec<L, T, Q> const& z, vec<L, U, Q> const& c);\n\n\t/// Maximum comparison between 3 variables and returns 3 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> associatedMax(\n\t\tT x, vec<L, U, Q> const& a,\n\t\tT y, vec<L, U, Q> const& b,\n\t\tT z, vec<L, U, Q> const& c);\n\n\t/// Maximum comparison between 3 variables and returns 3 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMax(\n\t\tvec<L, T, Q> const& x, U a,\n\t\tvec<L, T, Q> const& y, U b,\n\t\tvec<L, T, Q> const& z, U c);\n\n\t/// Maximum comparison between 4 variables and returns 4 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<typename T, typename U>\n\tGLM_FUNC_DECL U associatedMax(\n\t\tT x, U a,\n\t\tT y, U b,\n\t\tT z, U c,\n\t\tT w, U d);\n\n\t/// Maximum comparison between 4 variables and returns 4 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMax(\n\t\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\t\tvec<L, T, Q> const& y, vec<L, U, Q> const& b,\n\t\tvec<L, T, Q> const& z, vec<L, U, Q> const& c,\n\t\tvec<L, T, Q> const& w, vec<L, U, Q> const& d);\n\n\t/// Maximum comparison between 4 variables and returns 4 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMax(\n\t\tT x, vec<L, U, Q> const& a,\n\t\tT y, vec<L, U, Q> const& b,\n\t\tT z, vec<L, U, Q> const& c,\n\t\tT w, vec<L, U, Q> const& d);\n\n\t/// Maximum comparison between 4 variables and returns 4 associated variable values\n\t/// @see gtx_associated_min_max\n\ttemplate<length_t L, typename T, typename U, qualifier Q>\n\tGLM_FUNC_DECL vec<L, U, Q> associatedMax(\n\t\tvec<L, T, Q> const& x, U a,\n\t\tvec<L, T, Q> const& y, U b,\n\t\tvec<L, T, Q> const& z, U c,\n\t\tvec<L, T, Q> const& w, U d);\n\n\t/// @}\n} //namespace glm\n\n#include \"associated_min_max.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/associated_min_max.inl",
    "content": "/// @ref gtx_associated_min_max\n\nnamespace glm{\n\n// Min comparison between 2 variables\ntemplate<typename T, typename U>\nGLM_FUNC_QUALIFIER U associatedMin(T x, U a, T y, U b)\n{\n\treturn x < y ? a : b;\n}\n\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin\n(\n\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\tvec<L, T, Q> const& y, vec<L, U, Q> const& b\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x[i] < y[i] ? a[i] : b[i];\n\treturn Result;\n}\n\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin\n(\n\tT x, const vec<L, U, Q>& a,\n\tT y, const vec<L, U, Q>& b\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x < y ? a[i] : b[i];\n\treturn Result;\n}\n\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin\n(\n\tvec<L, T, Q> const& x, U a,\n\tvec<L, T, Q> const& y, U b\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x[i] < y[i] ? a : b;\n\treturn Result;\n}\n\n// Min comparison between 3 variables\ntemplate<typename T, typename U>\nGLM_FUNC_QUALIFIER U associatedMin\n(\n\tT x, U a,\n\tT y, U b,\n\tT z, U c\n)\n{\n\tU Result = x < y ? (x < z ? a : c) : (y < z ? b : c);\n\treturn Result;\n}\n\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin\n(\n\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\tvec<L, T, Q> const& y, vec<L, U, Q> const& b,\n\tvec<L, T, Q> const& z, vec<L, U, Q> const& c\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x[i] < y[i] ? (x[i] < z[i] ? a[i] : c[i]) : (y[i] < z[i] ? b[i] : c[i]);\n\treturn Result;\n}\n\n// Min comparison between 4 variables\ntemplate<typename T, typename U>\nGLM_FUNC_QUALIFIER U associatedMin\n(\n\tT x, U a,\n\tT y, U b,\n\tT z, U c,\n\tT w, U d\n)\n{\n\tT Test1 = min(x, y);\n\tT Test2 = min(z, w);\n\tU Result1 = x < y ? a : b;\n\tU Result2 = z < w ? c : d;\n\tU Result = Test1 < Test2 ? Result1 : Result2;\n\treturn Result;\n}\n\n// Min comparison between 4 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin\n(\n\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\tvec<L, T, Q> const& y, vec<L, U, Q> const& b,\n\tvec<L, T, Q> const& z, vec<L, U, Q> const& c,\n\tvec<L, T, Q> const& w, vec<L, U, Q> const& d\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t{\n\t\tT Test1 = min(x[i], y[i]);\n\t\tT Test2 = min(z[i], w[i]);\n\t\tU Result1 = x[i] < y[i] ? a[i] : b[i];\n\t\tU Result2 = z[i] < w[i] ? c[i] : d[i];\n\t\tResult[i] = Test1 < Test2 ? Result1 : Result2;\n\t}\n\treturn Result;\n}\n\n// Min comparison between 4 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin\n(\n\tT x, vec<L, U, Q> const& a,\n\tT y, vec<L, U, Q> const& b,\n\tT z, vec<L, U, Q> const& c,\n\tT w, vec<L, U, Q> const& d\n)\n{\n\tT Test1 = min(x, y);\n\tT Test2 = min(z, w);\n\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t{\n\t\tU Result1 = x < y ? a[i] : b[i];\n\t\tU Result2 = z < w ? c[i] : d[i];\n\t\tResult[i] = Test1 < Test2 ? Result1 : Result2;\n\t}\n\treturn Result;\n}\n\n// Min comparison between 4 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMin\n(\n\tvec<L, T, Q> const& x, U a,\n\tvec<L, T, Q> const& y, U b,\n\tvec<L, T, Q> const& z, U c,\n\tvec<L, T, Q> const& w, U d\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t{\n\t\tT Test1 = min(x[i], y[i]);\n\t\tT Test2 = min(z[i], w[i]);\n\t\tU Result1 = x[i] < y[i] ? a : b;\n\t\tU Result2 = z[i] < w[i] ? c : d;\n\t\tResult[i] = Test1 < Test2 ? Result1 : Result2;\n\t}\n\treturn Result;\n}\n\n// Max comparison between 2 variables\ntemplate<typename T, typename U>\nGLM_FUNC_QUALIFIER U associatedMax(T x, U a, T y, U b)\n{\n\treturn x > y ? a : b;\n}\n\n// Max comparison between 2 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax\n(\n\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\tvec<L, T, Q> const& y, vec<L, U, Q> const& b\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x[i] > y[i] ? a[i] : b[i];\n\treturn Result;\n}\n\n// Max comparison between 2 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, T, Q> associatedMax\n(\n\tT x, vec<L, U, Q> const& a,\n\tT y, vec<L, U, Q> const& b\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x > y ? a[i] : b[i];\n\treturn Result;\n}\n\n// Max comparison between 2 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax\n(\n\tvec<L, T, Q> const& x, U a,\n\tvec<L, T, Q> const& y, U b\n)\n{\n\tvec<L, T, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x[i] > y[i] ? a : b;\n\treturn Result;\n}\n\n// Max comparison between 3 variables\ntemplate<typename T, typename U>\nGLM_FUNC_QUALIFIER U associatedMax\n(\n\tT x, U a,\n\tT y, U b,\n\tT z, U c\n)\n{\n\tU Result = x > y ? (x > z ? a : c) : (y > z ? b : c);\n\treturn Result;\n}\n\n// Max comparison between 3 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax\n(\n\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\tvec<L, T, Q> const& y, vec<L, U, Q> const& b,\n\tvec<L, T, Q> const& z, vec<L, U, Q> const& c\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x[i] > y[i] ? (x[i] > z[i] ? a[i] : c[i]) : (y[i] > z[i] ? b[i] : c[i]);\n\treturn Result;\n}\n\n// Max comparison between 3 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, T, Q> associatedMax\n(\n\tT x, vec<L, U, Q> const& a,\n\tT y, vec<L, U, Q> const& b,\n\tT z, vec<L, U, Q> const& c\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x > y ? (x > z ? a[i] : c[i]) : (y > z ? b[i] : c[i]);\n\treturn Result;\n}\n\n// Max comparison between 3 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax\n(\n\tvec<L, T, Q> const& x, U a,\n\tvec<L, T, Q> const& y, U b,\n\tvec<L, T, Q> const& z, U c\n)\n{\n\tvec<L, T, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t\tResult[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c);\n\treturn Result;\n}\n\n// Max comparison between 4 variables\ntemplate<typename T, typename U>\nGLM_FUNC_QUALIFIER U associatedMax\n(\n\tT x, U a,\n\tT y, U b,\n\tT z, U c,\n\tT w, U d\n)\n{\n\tT Test1 = max(x, y);\n\tT Test2 = max(z, w);\n\tU Result1 = x > y ? a : b;\n\tU Result2 = z > w ? c : d;\n\tU Result = Test1 > Test2 ? Result1 : Result2;\n\treturn Result;\n}\n\n// Max comparison between 4 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax\n(\n\tvec<L, T, Q> const& x, vec<L, U, Q> const& a,\n\tvec<L, T, Q> const& y, vec<L, U, Q> const& b,\n\tvec<L, T, Q> const& z, vec<L, U, Q> const& c,\n\tvec<L, T, Q> const& w, vec<L, U, Q> const& d\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t{\n\t\tT Test1 = max(x[i], y[i]);\n\t\tT Test2 = max(z[i], w[i]);\n\t\tU Result1 = x[i] > y[i] ? a[i] : b[i];\n\t\tU Result2 = z[i] > w[i] ? c[i] : d[i];\n\t\tResult[i] = Test1 > Test2 ? Result1 : Result2;\n\t}\n\treturn Result;\n}\n\n// Max comparison between 4 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax\n(\n\tT x, vec<L, U, Q> const& a,\n\tT y, vec<L, U, Q> const& b,\n\tT z, vec<L, U, Q> const& c,\n\tT w, vec<L, U, Q> const& d\n)\n{\n\tT Test1 = max(x, y);\n\tT Test2 = max(z, w);\n\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t{\n\t\tU Result1 = x > y ? a[i] : b[i];\n\t\tU Result2 = z > w ? c[i] : d[i];\n\t\tResult[i] = Test1 > Test2 ? Result1 : Result2;\n\t}\n\treturn Result;\n}\n\n// Max comparison between 4 variables\ntemplate<length_t L, typename T, typename U, qualifier Q>\nGLM_FUNC_QUALIFIER vec<L, U, Q> associatedMax\n(\n\tvec<L, T, Q> const& x, U a,\n\tvec<L, T, Q> const& y, U b,\n\tvec<L, T, Q> const& z, U c,\n\tvec<L, T, Q> const& w, U d\n)\n{\n\tvec<L, U, Q> Result;\n\tfor(length_t i = 0, n = Result.length(); i < n; ++i)\n\t{\n\t\tT Test1 = max(x[i], y[i]);\n\t\tT Test2 = max(z[i], w[i]);\n\t\tU Result1 = x[i] > y[i] ? a : b;\n\t\tU Result2 = z[i] > w[i] ? c : d;\n\t\tResult[i] = Test1 > Test2 ? Result1 : Result2;\n\t}\n\treturn Result;\n}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/bit.hpp",
    "content": "/// @ref gtx_bit\n/// @file glm/gtx/bit.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_bit GLM_GTX_bit\n/// @ingroup gtx\n///\n/// Include <glm/gtx/bit.hpp> to use the features of this extension.\n///\n/// Allow to perform bit operations on integer values\n\n#pragma once\n\n// Dependencies\n#include \"../gtc/bitfield.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_bit is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_bit extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_bit\n\t/// @{\n\n\t/// @see gtx_bit\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType highestBitValue(genIUType Value);\n\n\t/// @see gtx_bit\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL genIUType lowestBitValue(genIUType Value);\n\n\t/// Find the highest bit set to 1 in a integer variable and return its value.\n\t///\n\t/// @see gtx_bit\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> highestBitValue(vec<L, T, Q> const& value);\n\n\t/// Return the power of two number which value is just higher the input value.\n\t/// Deprecated, use ceilPowerOfTwo from GTC_round instead\n\t///\n\t/// @see gtc_round\n\t/// @see gtx_bit\n\ttemplate<typename genIUType>\n\tGLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoAbove(genIUType Value);\n\n\t/// Return the power of two number which value is just higher the input value.\n\t/// Deprecated, use ceilPowerOfTwo from GTC_round instead\n\t///\n\t/// @see gtc_round\n\t/// @see gtx_bit\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> powerOfTwoAbove(vec<L, T, Q> const& value);\n\n\t/// Return the power of two number which value is just lower the input value.\n\t/// Deprecated, use floorPowerOfTwo from GTC_round instead\n\t///\n\t/// @see gtc_round\n\t/// @see gtx_bit\n\ttemplate<typename genIUType>\n\tGLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoBelow(genIUType Value);\n\n\t/// Return the power of two number which value is just lower the input value.\n\t/// Deprecated, use floorPowerOfTwo from GTC_round instead\n\t///\n\t/// @see gtc_round\n\t/// @see gtx_bit\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> powerOfTwoBelow(vec<L, T, Q> const& value);\n\n\t/// Return the power of two number which value is the closet to the input value.\n\t/// Deprecated, use roundPowerOfTwo from GTC_round instead\n\t///\n\t/// @see gtc_round\n\t/// @see gtx_bit\n\ttemplate<typename genIUType>\n\tGLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoNearest(genIUType Value);\n\n\t/// Return the power of two number which value is the closet to the input value.\n\t/// Deprecated, use roundPowerOfTwo from GTC_round instead\n\t///\n\t/// @see gtc_round\n\t/// @see gtx_bit\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_DEPRECATED GLM_FUNC_DECL vec<L, T, Q> powerOfTwoNearest(vec<L, T, Q> const& value);\n\n\t/// @}\n} //namespace glm\n\n\n#include \"bit.inl\"\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/bit.inl",
    "content": "/// @ref gtx_bit\n\nnamespace glm\n{\n\t///////////////////\n\t// highestBitValue\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType highestBitValue(genIUType Value)\n\t{\n\t\tgenIUType tmp = Value;\n\t\tgenIUType result = genIUType(0);\n\t\twhile(tmp)\n\t\t{\n\t\t\tresult = (tmp & (~tmp + 1)); // grab lowest bit\n\t\t\ttmp &= ~result; // clear lowest bit\n\t\t}\n\t\treturn result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> highestBitValue(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(highestBitValue, v);\n\t}\n\n\t///////////////////\n\t// lowestBitValue\n\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType lowestBitValue(genIUType Value)\n\t{\n\t\treturn (Value & (~Value + 1));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> lowestBitValue(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(lowestBitValue, v);\n\t}\n\n\t///////////////////\n\t// powerOfTwoAbove\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType powerOfTwoAbove(genType value)\n\t{\n\t\treturn isPowerOfTwo(value) ? value : highestBitValue(value) << 1;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> powerOfTwoAbove(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(powerOfTwoAbove, v);\n\t}\n\n\t///////////////////\n\t// powerOfTwoBelow\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType powerOfTwoBelow(genType value)\n\t{\n\t\treturn isPowerOfTwo(value) ? value : highestBitValue(value);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> powerOfTwoBelow(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(powerOfTwoBelow, v);\n\t}\n\n\t/////////////////////\n\t// powerOfTwoNearest\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType powerOfTwoNearest(genType value)\n\t{\n\t\tif(isPowerOfTwo(value))\n\t\t\treturn value;\n\n\t\tgenType const prev = highestBitValue(value);\n\t\tgenType const next = prev << 1;\n\t\treturn (next - value) < (value - prev) ? next : prev;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> powerOfTwoNearest(vec<L, T, Q> const& v)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(powerOfTwoNearest, v);\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/closest_point.hpp",
    "content": "/// @ref gtx_closest_point\n/// @file glm/gtx/closest_point.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_closest_point GLM_GTX_closest_point\n/// @ingroup gtx\n///\n/// Include <glm/gtx/closest_point.hpp> to use the features of this extension.\n///\n/// Find the point on a straight line which is the closet of a point.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_closest_point extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_closest_point\n\t/// @{\n\n\t/// Find the point on a straight line which is the closet of a point.\n\t/// @see gtx_closest_point\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> closestPointOnLine(\n\t\tvec<3, T, Q> const& point,\n\t\tvec<3, T, Q> const& a,\n\t\tvec<3, T, Q> const& b);\n\n\t/// 2d lines work as well\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> closestPointOnLine(\n\t\tvec<2, T, Q> const& point,\n\t\tvec<2, T, Q> const& a,\n\t\tvec<2, T, Q> const& b);\n\n\t/// @}\n}// namespace glm\n\n#include \"closest_point.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/closest_point.inl",
    "content": "/// @ref gtx_closest_point\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> closestPointOnLine\n\t(\n\t\tvec<3, T, Q> const& point,\n\t\tvec<3, T, Q> const& a,\n\t\tvec<3, T, Q> const& b\n\t)\n\t{\n\t\tT LineLength = distance(a, b);\n\t\tvec<3, T, Q> Vector = point - a;\n\t\tvec<3, T, Q> LineDirection = (b - a) / LineLength;\n\n\t\t// Project Vector to LineDirection to get the distance of point from a\n\t\tT Distance = dot(Vector, LineDirection);\n\n\t\tif(Distance <= T(0)) return a;\n\t\tif(Distance >= LineLength) return b;\n\t\treturn a + LineDirection * Distance;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, T, Q> closestPointOnLine\n\t(\n\t\tvec<2, T, Q> const& point,\n\t\tvec<2, T, Q> const& a,\n\t\tvec<2, T, Q> const& b\n\t)\n\t{\n\t\tT LineLength = distance(a, b);\n\t\tvec<2, T, Q> Vector = point - a;\n\t\tvec<2, T, Q> LineDirection = (b - a) / LineLength;\n\n\t\t// Project Vector to LineDirection to get the distance of point from a\n\t\tT Distance = dot(Vector, LineDirection);\n\n\t\tif(Distance <= T(0)) return a;\n\t\tif(Distance >= LineLength) return b;\n\t\treturn a + LineDirection * Distance;\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/color_encoding.hpp",
    "content": "/// @ref gtx_color_encoding\n/// @file glm/gtx/color_encoding.hpp\n///\n/// @see core (dependence)\n/// @see gtx_color_encoding (dependence)\n///\n/// @defgroup gtx_color_encoding GLM_GTX_color_encoding\n/// @ingroup gtx\n///\n/// Include <glm/gtx/color_encoding.hpp> to use the features of this extension.\n///\n/// @brief Allow to perform bit operations on integer values\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../vec3.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTC_color_encoding is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTC_color_encoding extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_color_encoding\n\t/// @{\n\n\t/// Convert a linear sRGB color to D65 YUV.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> convertLinearSRGBToD65XYZ(vec<3, T, Q> const& ColorLinearSRGB);\n\n\t/// Convert a linear sRGB color to D50 YUV.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> convertLinearSRGBToD50XYZ(vec<3, T, Q> const& ColorLinearSRGB);\n\n\t/// Convert a D65 YUV color to linear sRGB.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> convertD65XYZToLinearSRGB(vec<3, T, Q> const& ColorD65XYZ);\n\n\t/// Convert a D65 YUV color to D50 YUV.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> convertD65XYZToD50XYZ(vec<3, T, Q> const& ColorD65XYZ);\n\n\t/// @}\n} //namespace glm\n\n#include \"color_encoding.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/color_encoding.inl",
    "content": "/// @ref gtx_color_encoding\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> convertLinearSRGBToD65XYZ(vec<3, T, Q> const& ColorLinearSRGB)\n\t{\n\t\tvec<3, T, Q> const M(0.490f, 0.17697f, 0.2f);\n\t\tvec<3, T, Q> const N(0.31f,  0.8124f, 0.01063f);\n\t\tvec<3, T, Q> const O(0.490f, 0.01f, 0.99f);\n\n\t\treturn (M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB) * static_cast<T>(5.650675255693055f);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> convertLinearSRGBToD50XYZ(vec<3, T, Q> const& ColorLinearSRGB)\n\t{\n\t\tvec<3, T, Q> const M(0.436030342570117f, 0.222438466210245f, 0.013897440074263f);\n\t\tvec<3, T, Q> const N(0.385101860087134f, 0.716942745571917f, 0.097076381494207f);\n\t\tvec<3, T, Q> const O(0.143067806654203f, 0.060618777416563f, 0.713926257896652f);\n\n\t\treturn M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> convertD65XYZToLinearSRGB(vec<3, T, Q> const& ColorD65XYZ)\n\t{\n\t\tvec<3, T, Q> const M(0.41847f, -0.091169f, 0.0009209f);\n\t\tvec<3, T, Q> const N(-0.15866f, 0.25243f, 0.015708f);\n\t\tvec<3, T, Q> const O(0.0009209f, -0.0025498f, 0.1786f);\n\n\t\treturn M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> convertD65XYZToD50XYZ(vec<3, T, Q> const& ColorD65XYZ)\n\t{\n\t\tvec<3, T, Q> const M(+1.047844353856414f, +0.029549007606644f, -0.009250984365223f);\n\t\tvec<3, T, Q> const N(+0.022898981050086f, +0.990508028941971f, +0.015072338237051f);\n\t\tvec<3, T, Q> const O(-0.050206647741605f, -0.017074711360960f, +0.751717835079977f);\n\n\t\treturn M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ;\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/color_space.hpp",
    "content": "/// @ref gtx_color_space\n/// @file glm/gtx/color_space.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_color_space GLM_GTX_color_space\n/// @ingroup gtx\n///\n/// Include <glm/gtx/color_space.hpp> to use the features of this extension.\n///\n/// Related to RGB to HSV conversions and operations.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_color_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_color_space extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_color_space\n\t/// @{\n\n\t/// Converts a color from HSV color space to its color in RGB color space.\n\t/// @see gtx_color_space\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> rgbColor(\n\t\tvec<3, T, Q> const& hsvValue);\n\n\t/// Converts a color from RGB color space to its color in HSV color space.\n\t/// @see gtx_color_space\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> hsvColor(\n\t\tvec<3, T, Q> const& rgbValue);\n\n\t/// Build a saturation matrix.\n\t/// @see gtx_color_space\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> saturation(\n\t\tT const s);\n\n\t/// Modify the saturation of a color.\n\t/// @see gtx_color_space\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> saturation(\n\t\tT const s,\n\t\tvec<3, T, Q> const& color);\n\n\t/// Modify the saturation of a color.\n\t/// @see gtx_color_space\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> saturation(\n\t\tT const s,\n\t\tvec<4, T, Q> const& color);\n\n\t/// Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals.\n\t/// @see gtx_color_space\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T luminosity(\n\t\tvec<3, T, Q> const& color);\n\n\t/// @}\n}//namespace glm\n\n#include \"color_space.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/color_space.inl",
    "content": "/// @ref gtx_color_space\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rgbColor(const vec<3, T, Q>& hsvColor)\n\t{\n\t\tvec<3, T, Q> hsv = hsvColor;\n\t\tvec<3, T, Q> rgbColor;\n\n\t\tif(hsv.y == static_cast<T>(0))\n\t\t\t// achromatic (grey)\n\t\t\trgbColor = vec<3, T, Q>(hsv.z);\n\t\telse\n\t\t{\n\t\t\tT sector = floor(hsv.x * (T(1) / T(60)));\n\t\t\tT frac = (hsv.x * (T(1) / T(60))) - sector;\n\t\t\t// factorial part of h\n\t\t\tT o = hsv.z * (T(1) - hsv.y);\n\t\t\tT p = hsv.z * (T(1) - hsv.y * frac);\n\t\t\tT q = hsv.z * (T(1) - hsv.y * (T(1) - frac));\n\n\t\t\tswitch(int(sector))\n\t\t\t{\n\t\t\tdefault:\n\t\t\tcase 0:\n\t\t\t\trgbColor.r = hsv.z;\n\t\t\t\trgbColor.g = q;\n\t\t\t\trgbColor.b = o;\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\trgbColor.r = p;\n\t\t\t\trgbColor.g = hsv.z;\n\t\t\t\trgbColor.b = o;\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\trgbColor.r = o;\n\t\t\t\trgbColor.g = hsv.z;\n\t\t\t\trgbColor.b = q;\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\trgbColor.r = o;\n\t\t\t\trgbColor.g = p;\n\t\t\t\trgbColor.b = hsv.z;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\trgbColor.r = q;\n\t\t\t\trgbColor.g = o;\n\t\t\t\trgbColor.b = hsv.z;\n\t\t\t\tbreak;\n\t\t\tcase 5:\n\t\t\t\trgbColor.r = hsv.z;\n\t\t\t\trgbColor.g = o;\n\t\t\t\trgbColor.b = p;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn rgbColor;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> hsvColor(const vec<3, T, Q>& rgbColor)\n\t{\n\t\tvec<3, T, Q> hsv = rgbColor;\n\t\tT Min   = min(min(rgbColor.r, rgbColor.g), rgbColor.b);\n\t\tT Max   = max(max(rgbColor.r, rgbColor.g), rgbColor.b);\n\t\tT Delta = Max - Min;\n\n\t\thsv.z = Max;\n\n\t\tif(Max != static_cast<T>(0))\n\t\t{\n\t\t\thsv.y = Delta / hsv.z;\n\t\t\tT h = static_cast<T>(0);\n\n\t\t\tif(rgbColor.r == Max)\n\t\t\t\t// between yellow & magenta\n\t\t\t\th = static_cast<T>(0) + T(60) * (rgbColor.g - rgbColor.b) / Delta;\n\t\t\telse if(rgbColor.g == Max)\n\t\t\t\t// between cyan & yellow\n\t\t\t\th = static_cast<T>(120) + T(60) * (rgbColor.b - rgbColor.r) / Delta;\n\t\t\telse\n\t\t\t\t// between magenta & cyan\n\t\t\t\th = static_cast<T>(240) + T(60) * (rgbColor.r - rgbColor.g) / Delta;\n\n\t\t\tif(h < T(0))\n\t\t\t\thsv.x = h + T(360);\n\t\t\telse\n\t\t\t\thsv.x = h;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// If r = g = b = 0 then s = 0, h is undefined\n\t\t\thsv.y = static_cast<T>(0);\n\t\t\thsv.x = static_cast<T>(0);\n\t\t}\n\n\t\treturn hsv;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> saturation(T const s)\n\t{\n\t\tvec<3, T, defaultp> rgbw = vec<3, T, defaultp>(T(0.2126), T(0.7152), T(0.0722));\n\n\t\tvec<3, T, defaultp> const col((T(1) - s) * rgbw);\n\n\t\tmat<4, 4, T, defaultp> result(T(1));\n\t\tresult[0][0] = col.x + s;\n\t\tresult[0][1] = col.x;\n\t\tresult[0][2] = col.x;\n\t\tresult[1][0] = col.y;\n\t\tresult[1][1] = col.y + s;\n\t\tresult[1][2] = col.y;\n\t\tresult[2][0] = col.z;\n\t\tresult[2][1] = col.z;\n\t\tresult[2][2] = col.z + s;\n\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> saturation(const T s, const vec<3, T, Q>& color)\n\t{\n\t\treturn vec<3, T, Q>(saturation(s) * vec<4, T, Q>(color, T(0)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> saturation(const T s, const vec<4, T, Q>& color)\n\t{\n\t\treturn saturation(s) * color;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T luminosity(const vec<3, T, Q>& color)\n\t{\n\t\tconst vec<3, T, Q> tmp = vec<3, T, Q>(0.33, 0.59, 0.11);\n\t\treturn dot(color, tmp);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/color_space_YCoCg.hpp",
    "content": "/// @ref gtx_color_space_YCoCg\n/// @file glm/gtx/color_space_YCoCg.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_color_space_YCoCg GLM_GTX_color_space_YCoCg\n/// @ingroup gtx\n///\n/// Include <glm/gtx/color_space_YCoCg.hpp> to use the features of this extension.\n///\n/// RGB to YCoCg conversions and operations\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_color_space_YCoCg is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_color_space_YCoCg extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_color_space_YCoCg\n\t/// @{\n\n\t/// Convert a color from RGB color space to YCoCg color space.\n\t/// @see gtx_color_space_YCoCg\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> rgb2YCoCg(\n\t\tvec<3, T, Q> const& rgbColor);\n\n\t/// Convert a color from YCoCg color space to RGB color space.\n\t/// @see gtx_color_space_YCoCg\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> YCoCg2rgb(\n\t\tvec<3, T, Q> const& YCoCgColor);\n\n\t/// Convert a color from RGB color space to YCoCgR color space.\n\t/// @see \"YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range\"\n\t/// @see gtx_color_space_YCoCg\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> rgb2YCoCgR(\n\t\tvec<3, T, Q> const& rgbColor);\n\n\t/// Convert a color from YCoCgR color space to RGB color space.\n\t/// @see \"YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range\"\n\t/// @see gtx_color_space_YCoCg\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> YCoCgR2rgb(\n\t\tvec<3, T, Q> const& YCoCgColor);\n\n\t/// @}\n}//namespace glm\n\n#include \"color_space_YCoCg.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/color_space_YCoCg.inl",
    "content": "/// @ref gtx_color_space_YCoCg\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCg\n\t(\n\t\tvec<3, T, Q> const& rgbColor\n\t)\n\t{\n\t\tvec<3, T, Q> result;\n\t\tresult.x/*Y */ =   rgbColor.r / T(4) + rgbColor.g / T(2) + rgbColor.b / T(4);\n\t\tresult.y/*Co*/ =   rgbColor.r / T(2) + rgbColor.g * T(0) - rgbColor.b / T(2);\n\t\tresult.z/*Cg*/ = - rgbColor.r / T(4) + rgbColor.g / T(2) - rgbColor.b / T(4);\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> YCoCg2rgb\n\t(\n\t\tvec<3, T, Q> const& YCoCgColor\n\t)\n\t{\n\t\tvec<3, T, Q> result;\n\t\tresult.r = YCoCgColor.x + YCoCgColor.y - YCoCgColor.z;\n\t\tresult.g = YCoCgColor.x\t\t\t\t   + YCoCgColor.z;\n\t\tresult.b = YCoCgColor.x - YCoCgColor.y - YCoCgColor.z;\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q, bool isInteger>\n\tclass compute_YCoCgR {\n\tpublic:\n\t\tstatic GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR\n\t\t(\n\t\t\tvec<3, T, Q> const& rgbColor\n\t\t)\n\t\t{\n\t\t\tvec<3, T, Q> result;\n\t\t\tresult.x/*Y */ = rgbColor.g * static_cast<T>(0.5) + (rgbColor.r + rgbColor.b) * static_cast<T>(0.25);\n\t\t\tresult.y/*Co*/ = rgbColor.r - rgbColor.b;\n\t\t\tresult.z/*Cg*/ = rgbColor.g - (rgbColor.r + rgbColor.b) * static_cast<T>(0.5);\n\t\t\treturn result;\n\t\t}\n\n\t\tstatic GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb\n\t\t(\n\t\t\tvec<3, T, Q> const& YCoCgRColor\n\t\t)\n\t\t{\n\t\t\tvec<3, T, Q> result;\n\t\t\tT tmp = YCoCgRColor.x - (YCoCgRColor.z * static_cast<T>(0.5));\n\t\t\tresult.g = YCoCgRColor.z + tmp;\n\t\t\tresult.b = tmp - (YCoCgRColor.y * static_cast<T>(0.5));\n\t\t\tresult.r = result.b + YCoCgRColor.y;\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tclass compute_YCoCgR<T, Q, true> {\n\tpublic:\n\t\tstatic GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR\n\t\t(\n\t\t\tvec<3, T, Q> const& rgbColor\n\t\t)\n\t\t{\n\t\t\tvec<3, T, Q> result;\n\t\t\tresult.y/*Co*/ = rgbColor.r - rgbColor.b;\n\t\t\tT tmp = rgbColor.b + (result.y >> 1);\n\t\t\tresult.z/*Cg*/ = rgbColor.g - tmp;\n\t\t\tresult.x/*Y */ = tmp + (result.z >> 1);\n\t\t\treturn result;\n\t\t}\n\n\t\tstatic GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb\n\t\t(\n\t\t\tvec<3, T, Q> const& YCoCgRColor\n\t\t)\n\t\t{\n\t\t\tvec<3, T, Q> result;\n\t\t\tT tmp = YCoCgRColor.x - (YCoCgRColor.z >> 1);\n\t\t\tresult.g = YCoCgRColor.z + tmp;\n\t\t\tresult.b = tmp - (YCoCgRColor.y >> 1);\n\t\t\tresult.r = result.b + YCoCgRColor.y;\n\t\t\treturn result;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR\n\t(\n\t\tvec<3, T, Q> const& rgbColor\n\t)\n\t{\n\t\treturn compute_YCoCgR<T, Q, std::numeric_limits<T>::is_integer>::rgb2YCoCgR(rgbColor);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb\n\t(\n\t\tvec<3, T, Q> const& YCoCgRColor\n\t)\n\t{\n\t\treturn compute_YCoCgR<T, Q, std::numeric_limits<T>::is_integer>::YCoCgR2rgb(YCoCgRColor);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/common.hpp",
    "content": "/// @ref gtx_common\n/// @file glm/gtx/common.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_common GLM_GTX_common\n/// @ingroup gtx\n///\n/// Include <glm/gtx/common.hpp> to use the features of this extension.\n///\n/// @brief Provide functions to increase the compatibility with Cg and HLSL languages\n\n#pragma once\n\n// Dependencies:\n#include \"../vec2.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n#include \"../gtc/vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_common is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_common extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_common\n\t/// @{\n\n\t/// Returns true if x is a denormalized number\n\t/// Numbers whose absolute value is too small to be represented in the normal format are represented in an alternate, denormalized format.\n\t/// This format is less precise but can represent values closer to zero.\n\t///\n\t/// @tparam genType Floating-point scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml\">GLSL isnan man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.3 Common Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL typename genType::bool_type isdenormal(genType const& x);\n\n\t/// Similar to 'mod' but with a different rounding and integer support.\n\t/// Returns 'x - y * trunc(x/y)' instead of 'x - y * floor(x/y)'\n\t///\n\t/// @see <a href=\"http://stackoverflow.com/questions/7610631/glsl-mod-vs-hlsl-fmod\">GLSL mod vs HLSL fmod</a>\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml\">GLSL mod man page</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fmod(vec<L, T, Q> const& v);\n\n\t/// Returns whether vector components values are within an interval. A open interval excludes its endpoints, and is denoted with square brackets.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_relational\n\ttemplate <length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> openBounded(vec<L, T, Q> const& Value, vec<L, T, Q> const& Min, vec<L, T, Q> const& Max);\n\n\t/// Returns whether vector components values are within an interval. A closed interval includes its endpoints, and is denoted with square brackets.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see ext_vector_relational\n\ttemplate <length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> closeBounded(vec<L, T, Q> const& Value, vec<L, T, Q> const& Min, vec<L, T, Q> const& Max);\n\n\t/// @}\n}//namespace glm\n\n#include \"common.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/common.inl",
    "content": "/// @ref gtx_common\n\n#include <cmath>\n#include \"../gtc/epsilon.hpp\"\n#include \"../gtc/constants.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q, bool isFloat = true>\n\tstruct compute_fmod\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& a, vec<L, T, Q> const& b)\n\t\t{\n\t\t\treturn detail::functor2<vec, L, T, Q>::call(std::fmod, a, b);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct compute_fmod<L, T, Q, false>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, T, Q> const& a, vec<L, T, Q> const& b)\n\t\t{\n\t\t\treturn a % b;\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER bool isdenormal(T const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isdenormal' only accept floating-point inputs\");\n\n#\t\tif GLM_HAS_CXX11_STL\n\t\t\treturn std::fpclassify(x) == FP_SUBNORMAL;\n#\t\telse\n\t\t\treturn epsilonNotEqual(x, static_cast<T>(0), epsilon<T>()) && std::fabs(x) < std::numeric_limits<T>::min();\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename vec<1, T, Q>::bool_type isdenormal\n\t(\n\t\tvec<1, T, Q> const& x\n\t)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isdenormal' only accept floating-point inputs\");\n\n\t\treturn typename vec<1, T, Q>::bool_type(\n\t\t\tisdenormal(x.x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename vec<2, T, Q>::bool_type isdenormal\n\t(\n\t\tvec<2, T, Q> const& x\n\t)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isdenormal' only accept floating-point inputs\");\n\n\t\treturn typename vec<2, T, Q>::bool_type(\n\t\t\tisdenormal(x.x),\n\t\t\tisdenormal(x.y));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename vec<3, T, Q>::bool_type isdenormal\n\t(\n\t\tvec<3, T, Q> const& x\n\t)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isdenormal' only accept floating-point inputs\");\n\n\t\treturn typename vec<3, T, Q>::bool_type(\n\t\t\tisdenormal(x.x),\n\t\t\tisdenormal(x.y),\n\t\t\tisdenormal(x.z));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename vec<4, T, Q>::bool_type isdenormal\n\t(\n\t\tvec<4, T, Q> const& x\n\t)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isdenormal' only accept floating-point inputs\");\n\n\t\treturn typename vec<4, T, Q>::bool_type(\n\t\t\tisdenormal(x.x),\n\t\t\tisdenormal(x.y),\n\t\t\tisdenormal(x.z),\n\t\t\tisdenormal(x.w));\n\t}\n\n\t// fmod\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fmod(genType x, genType y)\n\t{\n\t\treturn fmod(vec<1, genType>(x), y).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmod(vec<L, T, Q> const& x, T y)\n\t{\n\t\treturn detail::compute_fmod<L, T, Q, std::numeric_limits<T>::is_iec559>::call(x, vec<L, T, Q>(y));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fmod(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\treturn detail::compute_fmod<L, T, Q, std::numeric_limits<T>::is_iec559>::call(x, y);\n\t}\n\n\ttemplate <length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> openBounded(vec<L, T, Q> const& Value, vec<L, T, Q> const& Min, vec<L, T, Q> const& Max)\n\t{\n\t\treturn greaterThan(Value, Min) && lessThan(Value, Max);\n\t}\n\n\ttemplate <length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> closeBounded(vec<L, T, Q> const& Value, vec<L, T, Q> const& Min, vec<L, T, Q> const& Max)\n\t{\n\t\treturn greaterThanEqual(Value, Min) && lessThanEqual(Value, Max);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/compatibility.hpp",
    "content": "/// @ref gtx_compatibility\n/// @file glm/gtx/compatibility.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_compatibility GLM_GTX_compatibility\n/// @ingroup gtx\n///\n/// Include <glm/gtx/compatibility.hpp> to use the features of this extension.\n///\n/// Provide functions to increase the compatibility with Cg and HLSL languages\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/quaternion.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_compatibility is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_compatibility extension included\")\n#\tendif\n#endif\n\n#if GLM_COMPILER & GLM_COMPILER_VC\n#\tinclude <cfloat>\n#elif GLM_COMPILER & GLM_COMPILER_GCC\n#\tinclude <cmath>\n#\tif(GLM_PLATFORM & GLM_PLATFORM_ANDROID)\n#\t\tundef isfinite\n#\tendif\n#endif//GLM_COMPILER\n\nnamespace glm\n{\n\t/// @addtogroup gtx_compatibility\n\t/// @{\n\n\ttemplate<typename T> GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//!< \\brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<2, T, Q>& y, T a){return mix(x, y, a);}\t\t\t\t\t\t\t//!< \\brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)\n\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<3, T, Q>& y, T a){return mix(x, y, a);}\t\t\t\t\t\t\t//!< \\brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<4, T, Q>& y, T a){return mix(x, y, a);}\t\t\t\t\t\t\t//!< \\brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<2, T, Q>& y, const vec<2, T, Q>& a){return mix(x, y, a);}\t//!< \\brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<3, T, Q>& y, const vec<3, T, Q>& a){return mix(x, y, a);}\t//!< \\brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<4, T, Q>& y, const vec<4, T, Q>& a){return mix(x, y, a);}\t//!< \\brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility)\n\n\ttemplate<typename T> GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));}\t\t\t\t\t\t\t\t\t\t\t\t\t\t//!< \\brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> saturate(const vec<2, T, Q>& x){return clamp(x, T(0), T(1));}\t\t\t\t\t//!< \\brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> saturate(const vec<3, T, Q>& x){return clamp(x, T(0), T(1));}\t\t\t\t\t//!< \\brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> saturate(const vec<4, T, Q>& x){return clamp(x, T(0), T(1));}\t\t\t\t\t//!< \\brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility)\n\n\ttemplate<typename T> GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);}\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t//!< \\brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<2, T, Q> atan2(const vec<2, T, Q>& x, const vec<2, T, Q>& y){return atan(x, y);}\t//!< \\brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<3, T, Q> atan2(const vec<3, T, Q>& x, const vec<3, T, Q>& y){return atan(x, y);}\t//!< \\brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_QUALIFIER vec<4, T, Q> atan2(const vec<4, T, Q>& x, const vec<4, T, Q>& y){return atan(x, y);}\t//!< \\brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility)\n\n\ttemplate<typename genType> GLM_FUNC_DECL bool isfinite(genType const& x);\t\t\t\t\t\t\t\t\t\t\t//!< \\brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_DECL vec<1, bool, Q> isfinite(const vec<1, T, Q>& x);\t\t\t\t//!< \\brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_DECL vec<2, bool, Q> isfinite(const vec<2, T, Q>& x);\t\t\t\t//!< \\brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_DECL vec<3, bool, Q> isfinite(const vec<3, T, Q>& x);\t\t\t\t//!< \\brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)\n\ttemplate<typename T, qualifier Q> GLM_FUNC_DECL vec<4, bool, Q> isfinite(const vec<4, T, Q>& x);\t\t\t\t//!< \\brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility)\n\n\ttypedef bool\t\t\t\t\t\tbool1;\t\t\t//!< \\brief boolean type with 1 component. (From GLM_GTX_compatibility extension)\n\ttypedef vec<2, bool, highp>\t\t\tbool2;\t\t\t//!< \\brief boolean type with 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef vec<3, bool, highp>\t\t\tbool3;\t\t\t//!< \\brief boolean type with 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef vec<4, bool, highp>\t\t\tbool4;\t\t\t//!< \\brief boolean type with 4 components. (From GLM_GTX_compatibility extension)\n\n\ttypedef bool\t\t\t\t\t\tbool1x1;\t\t//!< \\brief boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 2, bool, highp>\t\tbool2x2;\t\t//!< \\brief boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 3, bool, highp>\t\tbool2x3;\t\t//!< \\brief boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 4, bool, highp>\t\tbool2x4;\t\t//!< \\brief boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 2, bool, highp>\t\tbool3x2;\t\t//!< \\brief boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 3, bool, highp>\t\tbool3x3;\t\t//!< \\brief boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 4, bool, highp>\t\tbool3x4;\t\t//!< \\brief boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 2, bool, highp>\t\tbool4x2;\t\t//!< \\brief boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 3, bool, highp>\t\tbool4x3;\t\t//!< \\brief boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 4, bool, highp>\t\tbool4x4;\t\t//!< \\brief boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)\n\n\ttypedef int\t\t\t\t\t\t\tint1;\t\t\t//!< \\brief integer vector with 1 component. (From GLM_GTX_compatibility extension)\n\ttypedef vec<2, int, highp>\t\t\tint2;\t\t\t//!< \\brief integer vector with 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef vec<3, int, highp>\t\t\tint3;\t\t\t//!< \\brief integer vector with 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef vec<4, int, highp>\t\t\tint4;\t\t\t//!< \\brief integer vector with 4 components. (From GLM_GTX_compatibility extension)\n\n\ttypedef int\t\t\t\t\t\t\tint1x1;\t\t\t//!< \\brief integer matrix with 1 component. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 2, int, highp>\t\tint2x2;\t\t\t//!< \\brief integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 3, int, highp>\t\tint2x3;\t\t\t//!< \\brief integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 4, int, highp>\t\tint2x4;\t\t\t//!< \\brief integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 2, int, highp>\t\tint3x2;\t\t\t//!< \\brief integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 3, int, highp>\t\tint3x3;\t\t\t//!< \\brief integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 4, int, highp>\t\tint3x4;\t\t\t//!< \\brief integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 2, int, highp>\t\tint4x2;\t\t\t//!< \\brief integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 3, int, highp>\t\tint4x3;\t\t\t//!< \\brief integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 4, int, highp>\t\tint4x4;\t\t\t//!< \\brief integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)\n\n\ttypedef float\t\t\t\t\t\tfloat1;\t\t\t//!< \\brief single-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension)\n\ttypedef vec<2, float, highp>\t\tfloat2;\t\t\t//!< \\brief single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef vec<3, float, highp>\t\tfloat3;\t\t\t//!< \\brief single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef vec<4, float, highp>\t\tfloat4;\t\t\t//!< \\brief single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension)\n\n\ttypedef float\t\t\t\t\t\tfloat1x1;\t\t//!< \\brief single-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 2, float, highp>\t\tfloat2x2;\t\t//!< \\brief single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 3, float, highp>\t\tfloat2x3;\t\t//!< \\brief single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 4, float, highp>\t\tfloat2x4;\t\t//!< \\brief single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 2, float, highp>\t\tfloat3x2;\t\t//!< \\brief single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 3, float, highp>\t\tfloat3x3;\t\t//!< \\brief single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 4, float, highp>\t\tfloat3x4;\t\t//!< \\brief single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 2, float, highp>\t\tfloat4x2;\t\t//!< \\brief single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 3, float, highp>\t\tfloat4x3;\t\t//!< \\brief single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 4, float, highp>\t\tfloat4x4;\t\t//!< \\brief single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)\n\n\ttypedef double\t\t\t\t\t\tdouble1;\t\t//!< \\brief double-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension)\n\ttypedef vec<2, double, highp>\t\tdouble2;\t\t//!< \\brief double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef vec<3, double, highp>\t\tdouble3;\t\t//!< \\brief double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef vec<4, double, highp>\t\tdouble4;\t\t//!< \\brief double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension)\n\n\ttypedef double\t\t\t\t\t\tdouble1x1;\t\t//!< \\brief double-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 2, double, highp>\t\tdouble2x2;\t\t//!< \\brief double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 3, double, highp>\t\tdouble2x3;\t\t//!< \\brief double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<2, 4, double, highp>\t\tdouble2x4;\t\t//!< \\brief double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 2, double, highp>\t\tdouble3x2;\t\t//!< \\brief double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 3, double, highp>\t\tdouble3x3;\t\t//!< \\brief double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<3, 4, double, highp>\t\tdouble3x4;\t\t//!< \\brief double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 2, double, highp>\t\tdouble4x2;\t\t//!< \\brief double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 3, double, highp>\t\tdouble4x3;\t\t//!< \\brief double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension)\n\ttypedef mat<4, 4, double, highp>\t\tdouble4x4;\t\t//!< \\brief double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension)\n\n\t/// @}\n}//namespace glm\n\n#include \"compatibility.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/compatibility.inl",
    "content": "#include <limits>\n\nnamespace glm\n{\n\t// isfinite\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER bool isfinite(\n\t\tgenType const& x)\n\t{\n#\t\tif GLM_HAS_CXX11_STL\n\t\t\treturn std::isfinite(x) != 0;\n#\t\telif GLM_COMPILER & GLM_COMPILER_VC\n\t\t\treturn _finite(x) != 0;\n#\t\telif GLM_COMPILER & GLM_COMPILER_GCC && GLM_PLATFORM & GLM_PLATFORM_ANDROID\n\t\t\treturn _isfinite(x) != 0;\n#\t\telse\n\t\t\tif (std::numeric_limits<genType>::is_integer || std::denorm_absent == std::numeric_limits<genType>::has_denorm)\n\t\t\t\treturn std::numeric_limits<genType>::min() <= x && std::numeric_limits<genType>::max() >= x;\n\t\t\telse\n\t\t\t\treturn -std::numeric_limits<genType>::max() <= x && std::numeric_limits<genType>::max() >= x;\n#\t\tendif\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<1, bool, Q> isfinite(\n\t\tvec<1, T, Q> const& x)\n\t{\n\t\treturn vec<1, bool, Q>(\n\t\t\tisfinite(x.x));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, bool, Q> isfinite(\n\t\tvec<2, T, Q> const& x)\n\t{\n\t\treturn vec<2, bool, Q>(\n\t\t\tisfinite(x.x),\n\t\t\tisfinite(x.y));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, bool, Q> isfinite(\n\t\tvec<3, T, Q> const& x)\n\t{\n\t\treturn vec<3, bool, Q>(\n\t\t\tisfinite(x.x),\n\t\t\tisfinite(x.y),\n\t\t\tisfinite(x.z));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> isfinite(\n\t\tvec<4, T, Q> const& x)\n\t{\n\t\treturn vec<4, bool, Q>(\n\t\t\tisfinite(x.x),\n\t\t\tisfinite(x.y),\n\t\t\tisfinite(x.z),\n\t\t\tisfinite(x.w));\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/component_wise.hpp",
    "content": "/// @ref gtx_component_wise\n/// @file glm/gtx/component_wise.hpp\n/// @date 2007-05-21 / 2011-06-07\n/// @author Christophe Riccio\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_component_wise GLM_GTX_component_wise\n/// @ingroup gtx\n///\n/// Include <glm/gtx/component_wise.hpp> to use the features of this extension.\n///\n/// Operations between components of a type\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_component_wise is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_component_wise extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_component_wise\n\t/// @{\n\n\t/// Convert an integer vector to a normalized float vector.\n\t/// If the parameter value type is already a floating qualifier type, the value is passed through.\n\t/// @see gtx_component_wise\n\ttemplate<typename floatType, length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, floatType, Q> compNormalize(vec<L, T, Q> const& v);\n\n\t/// Convert a normalized float vector to an integer vector.\n\t/// If the parameter value type is already a floating qualifier type, the value is passed through.\n\t/// @see gtx_component_wise\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> compScale(vec<L, floatType, Q> const& v);\n\n\t/// Add all vector components together.\n\t/// @see gtx_component_wise\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL typename genType::value_type compAdd(genType const& v);\n\n\t/// Multiply all vector components together.\n\t/// @see gtx_component_wise\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL typename genType::value_type compMul(genType const& v);\n\n\t/// Find the minimum value between single vector components.\n\t/// @see gtx_component_wise\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL typename genType::value_type compMin(genType const& v);\n\n\t/// Find the maximum value between single vector components.\n\t/// @see gtx_component_wise\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL typename genType::value_type compMax(genType const& v);\n\n\t/// @}\n}//namespace glm\n\n#include \"component_wise.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/component_wise.inl",
    "content": "/// @ref gtx_component_wise\n\n#include <limits>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q, bool isInteger, bool signedType>\n\tstruct compute_compNormalize\n\t{};\n\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q>\n\tstruct compute_compNormalize<L, T, floatType, Q, true, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, floatType, Q> call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\tfloatType const Min = static_cast<floatType>(std::numeric_limits<T>::min());\n\t\t\tfloatType const Max = static_cast<floatType>(std::numeric_limits<T>::max());\n\t\t\treturn (vec<L, floatType, Q>(v) - Min) / (Max - Min) * static_cast<floatType>(2) - static_cast<floatType>(1);\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q>\n\tstruct compute_compNormalize<L, T, floatType, Q, true, false>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, floatType, Q> call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\treturn vec<L, floatType, Q>(v) / static_cast<floatType>(std::numeric_limits<T>::max());\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q>\n\tstruct compute_compNormalize<L, T, floatType, Q, false, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, floatType, Q> call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\treturn v;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q, bool isInteger, bool signedType>\n\tstruct compute_compScale\n\t{};\n\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q>\n\tstruct compute_compScale<L, T, floatType, Q, true, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, floatType, Q> const& v)\n\t\t{\n\t\t\tfloatType const Max = static_cast<floatType>(std::numeric_limits<T>::max()) + static_cast<floatType>(0.5);\n\t\t\tvec<L, floatType, Q> const Scaled(v * Max);\n\t\t\tvec<L, T, Q> const Result(Scaled - static_cast<floatType>(0.5));\n\t\t\treturn Result;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q>\n\tstruct compute_compScale<L, T, floatType, Q, true, false>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, floatType, Q> const& v)\n\t\t{\n\t\t\treturn vec<L, T, Q>(vec<L, floatType, Q>(v) * static_cast<floatType>(std::numeric_limits<T>::max()));\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, typename floatType, qualifier Q>\n\tstruct compute_compScale<L, T, floatType, Q, false, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<L, T, Q> call(vec<L, floatType, Q> const& v)\n\t\t{\n\t\t\treturn v;\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<typename floatType, length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, floatType, Q> compNormalize(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, \"'compNormalize' accepts only floating-point types for 'floatType' template parameter\");\n\n\t\treturn detail::compute_compNormalize<L, T, floatType, Q, std::numeric_limits<T>::is_integer, std::numeric_limits<T>::is_signed>::call(v);\n\t}\n\n\ttemplate<typename T, length_t L, typename floatType, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> compScale(vec<L, floatType, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<floatType>::is_iec559, \"'compScale' accepts only floating-point types for 'floatType' template parameter\");\n\n\t\treturn detail::compute_compScale<L, T, floatType, Q, std::numeric_limits<T>::is_integer, std::numeric_limits<T>::is_signed>::call(v);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T compAdd(vec<L, T, Q> const& v)\n\t{\n\t\tT Result(0);\n\t\tfor(length_t i = 0, n = v.length(); i < n; ++i)\n\t\t\tResult += v[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T compMul(vec<L, T, Q> const& v)\n\t{\n\t\tT Result(1);\n\t\tfor(length_t i = 0, n = v.length(); i < n; ++i)\n\t\t\tResult *= v[i];\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T compMin(vec<L, T, Q> const& v)\n\t{\n\t\tT Result(v[0]);\n\t\tfor(length_t i = 1, n = v.length(); i < n; ++i)\n\t\t\tResult = min(Result, v[i]);\n\t\treturn Result;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T compMax(vec<L, T, Q> const& v)\n\t{\n\t\tT Result(v[0]);\n\t\tfor(length_t i = 1, n = v.length(); i < n; ++i)\n\t\t\tResult = max(Result, v[i]);\n\t\treturn Result;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/dual_quaternion.hpp",
    "content": "/// @ref gtx_dual_quaternion\n/// @file glm/gtx/dual_quaternion.hpp\n/// @author Maksim Vorobiev (msomeone@gmail.com)\n///\n/// @see core (dependence)\n/// @see gtc_constants (dependence)\n/// @see gtc_quaternion (dependence)\n///\n/// @defgroup gtx_dual_quaternion GLM_GTX_dual_quaternion\n/// @ingroup gtx\n///\n/// Include <glm/gtx/dual_quaternion.hpp> to use the features of this extension.\n///\n/// Defines a templated dual-quaternion type and several dual-quaternion operations.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/constants.hpp\"\n#include \"../gtc/quaternion.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_dual_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_dual_quaternion extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_dual_quaternion\n\t/// @{\n\n\ttemplate<typename T, qualifier Q = defaultp>\n\tstruct tdualquat\n\t{\n\t\t// -- Implementation detail --\n\n\t\ttypedef T value_type;\n\t\ttypedef qua<T, Q> part_type;\n\n\t\t// -- Data --\n\n\t\tqua<T, Q> real, dual;\n\n\t\t// -- Component accesses --\n\n\t\ttypedef length_t length_type;\n\t\t/// Return the count of components of a dual quaternion\n\t\tGLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;}\n\n\t\tGLM_FUNC_DECL part_type & operator[](length_type i);\n\t\tGLM_FUNC_DECL part_type const& operator[](length_type i) const;\n\n\t\t// -- Implicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR tdualquat() GLM_DEFAULT;\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat<T, Q> const& d) GLM_DEFAULT;\n\t\ttemplate<qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat<T, P> const& d);\n\n\t\t// -- Explicit basic constructors --\n\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua<T, Q> const& real);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua<T, Q> const& orientation, vec<3, T, Q> const& translation);\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua<T, Q> const& real, qua<T, Q> const& dual);\n\n\t\t// -- Conversion constructors --\n\n\t\ttemplate<typename U, qualifier P>\n\t\tGLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tdualquat(tdualquat<U, P> const& q);\n\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<2, 4, T, Q> const& holder_mat);\n\t\tGLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<3, 4, T, Q> const& aug_mat);\n\n\t\t// -- Unary arithmetic operators --\n\n\t\tGLM_FUNC_DECL tdualquat<T, Q> & operator=(tdualquat<T, Q> const& m) GLM_DEFAULT;\n\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL tdualquat<T, Q> & operator=(tdualquat<U, Q> const& m);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL tdualquat<T, Q> & operator*=(U s);\n\t\ttemplate<typename U>\n\t\tGLM_FUNC_DECL tdualquat<T, Q> & operator/=(U s);\n\t};\n\n\t// -- Unary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> operator+(tdualquat<T, Q> const& q);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> operator-(tdualquat<T, Q> const& q);\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> operator+(tdualquat<T, Q> const& q, tdualquat<T, Q> const& p);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> operator*(tdualquat<T, Q> const& q, tdualquat<T, Q> const& p);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> operator*(tdualquat<T, Q> const& q, vec<3, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> operator*(vec<3, T, Q> const& v, tdualquat<T, Q> const& q);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> operator*(tdualquat<T, Q> const& q, vec<4, T, Q> const& v);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> operator*(vec<4, T, Q> const& v, tdualquat<T, Q> const& q);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> operator*(tdualquat<T, Q> const& q, T const& s);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> operator*(T const& s, tdualquat<T, Q> const& q);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> operator/(tdualquat<T, Q> const& q, T const& s);\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator==(tdualquat<T, Q> const& q1, tdualquat<T, Q> const& q2);\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool operator!=(tdualquat<T, Q> const& q1, tdualquat<T, Q> const& q2);\n\n\t/// Creates an identity dual quaternion.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttemplate <typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> dual_quat_identity();\n\n\t/// Returns the normalized quaternion.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> normalize(tdualquat<T, Q> const& q);\n\n\t/// Returns the linear interpolation of two dual quaternion.\n\t///\n\t/// @see gtc_dual_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> lerp(tdualquat<T, Q> const& x, tdualquat<T, Q> const& y, T const& a);\n\n\t/// Returns the q inverse.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> inverse(tdualquat<T, Q> const& q);\n\n\t/// Converts a quaternion to a 2 * 4 matrix.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> mat2x4_cast(tdualquat<T, Q> const& x);\n\n\t/// Converts a quaternion to a 3 * 4 matrix.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> mat3x4_cast(tdualquat<T, Q> const& x);\n\n\t/// Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> dualquat_cast(mat<2, 4, T, Q> const& x);\n\n\t/// Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL tdualquat<T, Q> dualquat_cast(mat<3, 4, T, Q> const& x);\n\n\n\t/// Dual-quaternion of low single-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<float, lowp>\t\tlowp_dualquat;\n\n\t/// Dual-quaternion of medium single-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<float, mediump>\tmediump_dualquat;\n\n\t/// Dual-quaternion of high single-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<float, highp>\t\thighp_dualquat;\n\n\n\t/// Dual-quaternion of low single-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<float, lowp>\t\tlowp_fdualquat;\n\n\t/// Dual-quaternion of medium single-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<float, mediump>\tmediump_fdualquat;\n\n\t/// Dual-quaternion of high single-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<float, highp>\t\thighp_fdualquat;\n\n\n\t/// Dual-quaternion of low double-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<double, lowp>\t\tlowp_ddualquat;\n\n\t/// Dual-quaternion of medium double-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<double, mediump>\tmediump_ddualquat;\n\n\t/// Dual-quaternion of high double-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef tdualquat<double, highp>\thighp_ddualquat;\n\n\n#if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))\n\t/// Dual-quaternion of floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef highp_fdualquat\t\t\tdualquat;\n\n\t/// Dual-quaternion of single-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef highp_fdualquat\t\t\tfdualquat;\n#elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))\n\ttypedef highp_fdualquat\t\t\tdualquat;\n\ttypedef highp_fdualquat\t\t\tfdualquat;\n#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))\n\ttypedef mediump_fdualquat\t\tdualquat;\n\ttypedef mediump_fdualquat\t\tfdualquat;\n#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))\n\ttypedef lowp_fdualquat\t\t\tdualquat;\n\ttypedef lowp_fdualquat\t\t\tfdualquat;\n#else\n#\terror \"GLM error: multiple default precision requested for single-precision floating-point types\"\n#endif\n\n\n#if(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))\n\t/// Dual-quaternion of default double-qualifier floating-point numbers.\n\t///\n\t/// @see gtx_dual_quaternion\n\ttypedef highp_ddualquat\t\t\tddualquat;\n#elif(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))\n\ttypedef highp_ddualquat\t\t\tddualquat;\n#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE))\n\ttypedef mediump_ddualquat\t\tddualquat;\n#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE))\n\ttypedef lowp_ddualquat\t\t\tddualquat;\n#else\n#\terror \"GLM error: Multiple default precision requested for double-precision floating-point types\"\n#endif\n\n\t/// @}\n} //namespace glm\n\n#include \"dual_quaternion.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/dual_quaternion.inl",
    "content": "/// @ref gtx_dual_quaternion\n\n#include \"../geometric.hpp\"\n#include <limits>\n\nnamespace glm\n{\n\t// -- Component accesses --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename tdualquat<T, Q>::part_type & tdualquat<T, Q>::operator[](typename tdualquat<T, Q>::length_type i)\n\t{\n\t\tassert(i >= 0 && i < this->length());\n\t\treturn (&real)[i];\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER typename tdualquat<T, Q>::part_type const& tdualquat<T, Q>::operator[](typename tdualquat<T, Q>::length_type i) const\n\t{\n\t\tassert(i >= 0 && i < this->length());\n\t\treturn (&real)[i];\n\t}\n\n\t// -- Implicit basic constructors --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat()\n#\t\t\tif GLM_CONFIG_DEFAULTED_FUNCTIONS != GLM_DISABLE\n\t\t\t: real(qua<T, Q>())\n\t\t\t, dual(qua<T, Q>(0, 0, 0, 0))\n#\t\t\tendif\n\t\t{}\n\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(tdualquat<T, Q> const& d)\n\t\t\t: real(d.real)\n\t\t\t, dual(d.dual)\n\t\t{}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(tdualquat<T, P> const& d)\n\t\t: real(d.real)\n\t\t, dual(d.dual)\n\t{}\n\n\t// -- Explicit basic constructors --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(qua<T, Q> const& r)\n\t\t: real(r), dual(qua<T, Q>(0, 0, 0, 0))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(qua<T, Q> const& q, vec<3, T, Q> const& p)\n\t\t: real(q), dual(\n\t\t\tT(-0.5) * ( p.x*q.x + p.y*q.y + p.z*q.z),\n\t\t\tT(+0.5) * ( p.x*q.w + p.y*q.z - p.z*q.y),\n\t\t\tT(+0.5) * (-p.x*q.z + p.y*q.w + p.z*q.x),\n\t\t\tT(+0.5) * ( p.x*q.y - p.y*q.x + p.z*q.w))\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(qua<T, Q> const& r, qua<T, Q> const& d)\n\t\t: real(r), dual(d)\n\t{}\n\n\t// -- Conversion constructors --\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U, qualifier P>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(tdualquat<U, P> const& q)\n\t\t: real(q.real)\n\t\t, dual(q.dual)\n\t{}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(mat<2, 4, T, Q> const& m)\n\t{\n\t\t*this = dualquat_cast(m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat<T, Q>::tdualquat(mat<3, 4, T, Q> const& m)\n\t{\n\t\t*this = dualquat_cast(m);\n\t}\n\n\t// -- Unary arithmetic operators --\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE\n\t\ttemplate<typename T, qualifier Q>\n\t\tGLM_FUNC_QUALIFIER tdualquat<T, Q> & tdualquat<T, Q>::operator=(tdualquat<T, Q> const& q)\n\t\t{\n\t\t\tthis->real = q.real;\n\t\t\tthis->dual = q.dual;\n\t\t\treturn *this;\n\t\t}\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> & tdualquat<T, Q>::operator=(tdualquat<U, Q> const& q)\n\t{\n\t\tthis->real = q.real;\n\t\tthis->dual = q.dual;\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> & tdualquat<T, Q>::operator*=(U s)\n\t{\n\t\tthis->real *= static_cast<T>(s);\n\t\tthis->dual *= static_cast<T>(s);\n\t\treturn *this;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\ttemplate<typename U>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> & tdualquat<T, Q>::operator/=(U s)\n\t{\n\t\tthis->real /= static_cast<T>(s);\n\t\tthis->dual /= static_cast<T>(s);\n\t\treturn *this;\n\t}\n\n\t// -- Unary bit operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> operator+(tdualquat<T, Q> const& q)\n\t{\n\t\treturn q;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> operator-(tdualquat<T, Q> const& q)\n\t{\n\t\treturn tdualquat<T, Q>(-q.real, -q.dual);\n\t}\n\n\t// -- Binary operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> operator+(tdualquat<T, Q> const& q, tdualquat<T, Q> const& p)\n\t{\n\t\treturn tdualquat<T, Q>(q.real + p.real,q.dual + p.dual);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> operator*(tdualquat<T, Q> const& p, tdualquat<T, Q> const& o)\n\t{\n\t\treturn tdualquat<T, Q>(p.real * o.real,p.real * o.dual + p.dual * o.real);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> operator*(tdualquat<T, Q> const& q, vec<3, T, Q> const& v)\n\t{\n\t\tvec<3, T, Q> const real_v3(q.real.x,q.real.y,q.real.z);\n\t\tvec<3, T, Q> const dual_v3(q.dual.x,q.dual.y,q.dual.z);\n\t\treturn (cross(real_v3, cross(real_v3,v) + v * q.real.w + dual_v3) + dual_v3 * q.real.w - real_v3 * q.dual.w) * T(2) + v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> operator*(vec<3, T, Q> const& v,\ttdualquat<T, Q> const& q)\n\t{\n\t\treturn glm::inverse(q) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> operator*(tdualquat<T, Q> const& q, vec<4, T, Q> const& v)\n\t{\n\t\treturn vec<4, T, Q>(q * vec<3, T, Q>(v), v.w);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> operator*(vec<4, T, Q> const& v,\ttdualquat<T, Q> const& q)\n\t{\n\t\treturn glm::inverse(q) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> operator*(tdualquat<T, Q> const& q, T const& s)\n\t{\n\t\treturn tdualquat<T, Q>(q.real * s, q.dual * s);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> operator*(T const& s, tdualquat<T, Q> const& q)\n\t{\n\t\treturn q * s;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> operator/(tdualquat<T, Q> const& q,\tT const& s)\n\t{\n\t\treturn tdualquat<T, Q>(q.real / s, q.dual / s);\n\t}\n\n\t// -- Boolean operators --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator==(tdualquat<T, Q> const& q1, tdualquat<T, Q> const& q2)\n\t{\n\t\treturn (q1.real == q2.real) && (q1.dual == q2.dual);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool operator!=(tdualquat<T, Q> const& q1, tdualquat<T, Q> const& q2)\n\t{\n\t\treturn (q1.real != q2.real) || (q1.dual != q2.dual);\n\t}\n\n\t// -- Operations --\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> dual_quat_identity()\n\t{\n\t\treturn tdualquat<T, Q>(\n\t\t\tqua<T, Q>(static_cast<T>(1), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0)),\n\t\t\tqua<T, Q>(static_cast<T>(0), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> normalize(tdualquat<T, Q> const& q)\n\t{\n\t\treturn q / length(q.real);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> lerp(tdualquat<T, Q> const& x, tdualquat<T, Q> const& y, T const& a)\n\t{\n\t\t// Dual Quaternion Linear blend aka DLB:\n\t\t// Lerp is only defined in [0, 1]\n\t\tassert(a >= static_cast<T>(0));\n\t\tassert(a <= static_cast<T>(1));\n\t\tT const k = dot(x.real,y.real) < static_cast<T>(0) ? -a : a;\n\t\tT const one(1);\n\t\treturn tdualquat<T, Q>(x * (one - a) + y * k);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> inverse(tdualquat<T, Q> const& q)\n\t{\n\t\tconst glm::qua<T, Q> real = conjugate(q.real);\n\t\tconst glm::qua<T, Q> dual = conjugate(q.dual);\n\t\treturn tdualquat<T, Q>(real, dual + (real * (-2.0f * dot(real,dual))));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat2x4_cast(tdualquat<T, Q> const& x)\n\t{\n\t\treturn mat<2, 4, T, Q>( x[0].x, x[0].y, x[0].z, x[0].w, x[1].x, x[1].y, x[1].z, x[1].w );\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat3x4_cast(tdualquat<T, Q> const& x)\n\t{\n\t\tqua<T, Q> r = x.real / length2(x.real);\n\n\t\tqua<T, Q> const rr(r.w * x.real.w, r.x * x.real.x, r.y * x.real.y, r.z * x.real.z);\n\t\tr *= static_cast<T>(2);\n\n\t\tT const xy = r.x * x.real.y;\n\t\tT const xz = r.x * x.real.z;\n\t\tT const yz = r.y * x.real.z;\n\t\tT const wx = r.w * x.real.x;\n\t\tT const wy = r.w * x.real.y;\n\t\tT const wz = r.w * x.real.z;\n\n\t\tvec<4, T, Q> const a(\n\t\t\trr.w + rr.x - rr.y - rr.z,\n\t\t\txy - wz,\n\t\t\txz + wy,\n\t\t\t-(x.dual.w * r.x - x.dual.x * r.w + x.dual.y * r.z - x.dual.z * r.y));\n\n\t\tvec<4, T, Q> const b(\n\t\t\txy + wz,\n\t\t\trr.w + rr.y - rr.x - rr.z,\n\t\t\tyz - wx,\n\t\t\t-(x.dual.w * r.y - x.dual.x * r.z - x.dual.y * r.w + x.dual.z * r.x));\n\n\t\tvec<4, T, Q> const c(\n\t\t\txz - wy,\n\t\t\tyz + wx,\n\t\t\trr.w + rr.z - rr.x - rr.y,\n\t\t\t-(x.dual.w * r.z + x.dual.x * r.y - x.dual.y * r.x - x.dual.z * r.w));\n\n\t\treturn mat<3, 4, T, Q>(a, b, c);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> dualquat_cast(mat<2, 4, T, Q> const& x)\n\t{\n\t\treturn tdualquat<T, Q>(\n\t\t\tqua<T, Q>( x[0].w, x[0].x, x[0].y, x[0].z ),\n\t\t\tqua<T, Q>( x[1].w, x[1].x, x[1].y, x[1].z ));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER tdualquat<T, Q> dualquat_cast(mat<3, 4, T, Q> const& x)\n\t{\n\t\tqua<T, Q> real;\n\n\t\tT const trace = x[0].x + x[1].y + x[2].z;\n\t\tif(trace > static_cast<T>(0))\n\t\t{\n\t\t\tT const r = sqrt(T(1) + trace);\n\t\t\tT const invr = static_cast<T>(0.5) / r;\n\t\t\treal.w = static_cast<T>(0.5) * r;\n\t\t\treal.x = (x[2].y - x[1].z) * invr;\n\t\t\treal.y = (x[0].z - x[2].x) * invr;\n\t\t\treal.z = (x[1].x - x[0].y) * invr;\n\t\t}\n\t\telse if(x[0].x > x[1].y && x[0].x > x[2].z)\n\t\t{\n\t\t\tT const r = sqrt(T(1) + x[0].x - x[1].y - x[2].z);\n\t\t\tT const invr = static_cast<T>(0.5) / r;\n\t\t\treal.x = static_cast<T>(0.5)*r;\n\t\t\treal.y = (x[1].x + x[0].y) * invr;\n\t\t\treal.z = (x[0].z + x[2].x) * invr;\n\t\t\treal.w = (x[2].y - x[1].z) * invr;\n\t\t}\n\t\telse if(x[1].y > x[2].z)\n\t\t{\n\t\t\tT const r = sqrt(T(1) + x[1].y - x[0].x - x[2].z);\n\t\t\tT const invr = static_cast<T>(0.5) / r;\n\t\t\treal.x = (x[1].x + x[0].y) * invr;\n\t\t\treal.y = static_cast<T>(0.5) * r;\n\t\t\treal.z = (x[2].y + x[1].z) * invr;\n\t\t\treal.w = (x[0].z - x[2].x) * invr;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tT const r = sqrt(T(1) + x[2].z - x[0].x - x[1].y);\n\t\t\tT const invr = static_cast<T>(0.5) / r;\n\t\t\treal.x = (x[0].z + x[2].x) * invr;\n\t\t\treal.y = (x[2].y + x[1].z) * invr;\n\t\t\treal.z = static_cast<T>(0.5) * r;\n\t\t\treal.w = (x[1].x - x[0].y) * invr;\n\t\t}\n\n\t\tqua<T, Q> dual;\n\t\tdual.x =  static_cast<T>(0.5) * ( x[0].w * real.w + x[1].w * real.z - x[2].w * real.y);\n\t\tdual.y =  static_cast<T>(0.5) * (-x[0].w * real.z + x[1].w * real.w + x[2].w * real.x);\n\t\tdual.z =  static_cast<T>(0.5) * ( x[0].w * real.y - x[1].w * real.x + x[2].w * real.w);\n\t\tdual.w = -static_cast<T>(0.5) * ( x[0].w * real.x + x[1].w * real.y + x[2].w * real.z);\n\t\treturn tdualquat<T, Q>(real, dual);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/easing.hpp",
    "content": "/// @ref gtx_easing\n/// @file glm/gtx/easing.hpp\n/// @author Robert Chisholm\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_easing GLM_GTX_easing\n/// @ingroup gtx\n///\n/// Include <glm/gtx/easing.hpp> to use the features of this extension.\n///\n/// Easing functions for animations and transitions\n/// All functions take a parameter x in the range [0.0,1.0]\n///\n/// Based on the AHEasing project of Warren Moore (https://github.com/warrenm/AHEasing)\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/constants.hpp\"\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_easing is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_easing extension included\")\n#\tendif\n#endif\n\nnamespace glm{\n\t/// @addtogroup gtx_easing\n\t/// @{\n\n\t/// Modelled after the line y = x\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType linearInterpolation(genType const & a);\n\n\t/// Modelled after the parabola y = x^2\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quadraticEaseIn(genType const & a);\n\n\t/// Modelled after the parabola y = -x^2 + 2x\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quadraticEaseOut(genType const & a);\n\n\t/// Modelled after the piecewise quadratic\n\t/// y = (1/2)((2x)^2)\t\t\t\t; [0, 0.5)\n\t/// y = -(1/2)((2x-1)*(2x-3) - 1)\t; [0.5, 1]\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quadraticEaseInOut(genType const & a);\n\n\t/// Modelled after the cubic y = x^3\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType cubicEaseIn(genType const & a);\n\n\t/// Modelled after the cubic y = (x - 1)^3 + 1\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType cubicEaseOut(genType const & a);\n\n\t/// Modelled after the piecewise cubic\n\t/// y = (1/2)((2x)^3)\t\t; [0, 0.5)\n\t/// y = (1/2)((2x-2)^3 + 2)\t; [0.5, 1]\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType cubicEaseInOut(genType const & a);\n\n\t/// Modelled after the quartic x^4\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quarticEaseIn(genType const & a);\n\n\t/// Modelled after the quartic y = 1 - (x - 1)^4\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quarticEaseOut(genType const & a);\n\n\t/// Modelled after the piecewise quartic\n\t/// y = (1/2)((2x)^4)\t\t\t; [0, 0.5)\n\t/// y = -(1/2)((2x-2)^4 - 2)\t; [0.5, 1]\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quarticEaseInOut(genType const & a);\n\n\t/// Modelled after the quintic y = x^5\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quinticEaseIn(genType const & a);\n\n\t/// Modelled after the quintic y = (x - 1)^5 + 1\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quinticEaseOut(genType const & a);\n\n\t/// Modelled after the piecewise quintic\n\t/// y = (1/2)((2x)^5)\t\t; [0, 0.5)\n\t/// y = (1/2)((2x-2)^5 + 2) ; [0.5, 1]\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType quinticEaseInOut(genType const & a);\n\n\t/// Modelled after quarter-cycle of sine wave\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType sineEaseIn(genType const & a);\n\n\t/// Modelled after quarter-cycle of sine wave (different phase)\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType sineEaseOut(genType const & a);\n\n\t/// Modelled after half sine wave\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType sineEaseInOut(genType const & a);\n\n\t/// Modelled after shifted quadrant IV of unit circle\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType circularEaseIn(genType const & a);\n\n\t/// Modelled after shifted quadrant II of unit circle\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType circularEaseOut(genType const & a);\n\n\t/// Modelled after the piecewise circular function\n\t/// y = (1/2)(1 - sqrt(1 - 4x^2))\t\t\t; [0, 0.5)\n\t/// y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1]\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType circularEaseInOut(genType const & a);\n\n\t/// Modelled after the exponential function y = 2^(10(x - 1))\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType exponentialEaseIn(genType const & a);\n\n\t/// Modelled after the exponential function y = -2^(-10x) + 1\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType exponentialEaseOut(genType const & a);\n\n\t/// Modelled after the piecewise exponential\n\t/// y = (1/2)2^(10(2x - 1))\t\t\t; [0,0.5)\n\t/// y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1]\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType exponentialEaseInOut(genType const & a);\n\n\t/// Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1))\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType elasticEaseIn(genType const & a);\n\n\t/// Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType elasticEaseOut(genType const & a);\n\n\t/// Modelled after the piecewise exponentially-damped sine wave:\n\t/// y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1))\t\t; [0,0.5)\n\t/// y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2)\t; [0.5, 1]\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType elasticEaseInOut(genType const & a);\n\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType backEaseIn(genType const& a);\n\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType backEaseOut(genType const& a);\n\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType backEaseInOut(genType const& a);\n\n\t/// @param a parameter\n\t/// @param o Optional overshoot modifier\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType backEaseIn(genType const& a, genType const& o);\n\n\t/// @param a parameter\n\t/// @param o Optional overshoot modifier\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType backEaseOut(genType const& a, genType const& o);\n\n\t/// @param a parameter\n\t/// @param o Optional overshoot modifier\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType backEaseInOut(genType const& a, genType const& o);\n\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType bounceEaseIn(genType const& a);\n\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType bounceEaseOut(genType const& a);\n\n\t/// @see gtx_easing\n\ttemplate <typename genType>\n\tGLM_FUNC_DECL genType bounceEaseInOut(genType const& a);\n\n\t/// @}\n}//namespace glm\n\n#include \"easing.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/easing.inl",
    "content": "/// @ref gtx_easing\n\n#include <cmath>\n\nnamespace glm{\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType linearInterpolation(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn a;\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quadraticEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn a * a;\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quadraticEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn -(a * (a - static_cast<genType>(2)));\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quadraticEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a < static_cast<genType>(0.5))\n\t\t{\n\t\t\treturn static_cast<genType>(2) * a * a;\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn (-static_cast<genType>(2) * a * a) + (4 * a) - one<genType>();\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType cubicEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn a * a * a;\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType cubicEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tgenType const f = a - one<genType>();\n\t\treturn f * f * f + one<genType>();\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType cubicEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif (a < static_cast<genType>(0.5))\n\t\t{\n\t\t\treturn static_cast<genType>(4) * a * a * a;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tgenType const f = ((static_cast<genType>(2) * a) - static_cast<genType>(2));\n\t\t\treturn static_cast<genType>(0.5) * f * f * f + one<genType>();\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quarticEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn a * a * a * a;\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quarticEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tgenType const f = (a - one<genType>());\n\t\treturn f * f * f * (one<genType>() - a) + one<genType>();\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quarticEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a < static_cast<genType>(0.5))\n\t\t{\n\t\t\treturn static_cast<genType>(8) * a * a * a * a;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tgenType const f = (a - one<genType>());\n\t\t\treturn -static_cast<genType>(8) * f * f * f * f + one<genType>();\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quinticEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn a * a * a * a * a;\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quinticEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tgenType const f = (a - one<genType>());\n\t\treturn f * f * f * f * f + one<genType>();\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType quinticEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a < static_cast<genType>(0.5))\n\t\t{\n\t\t\treturn static_cast<genType>(16) * a * a * a * a * a;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tgenType const f = ((static_cast<genType>(2) * a) - static_cast<genType>(2));\n\t\t\treturn static_cast<genType>(0.5) * f * f * f * f * f + one<genType>();\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType sineEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn sin((a - one<genType>()) * half_pi<genType>()) + one<genType>();\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType sineEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn sin(a * half_pi<genType>());\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType sineEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn static_cast<genType>(0.5) * (one<genType>() - cos(a * pi<genType>()));\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType circularEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn one<genType>() - sqrt(one<genType>() - (a * a));\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType circularEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn sqrt((static_cast<genType>(2) - a) * a);\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType circularEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a < static_cast<genType>(0.5))\n\t\t{\n\t\t\treturn static_cast<genType>(0.5) * (one<genType>() - std::sqrt(one<genType>() - static_cast<genType>(4) * (a * a)));\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn static_cast<genType>(0.5) * (std::sqrt(-((static_cast<genType>(2) * a) - static_cast<genType>(3)) * ((static_cast<genType>(2) * a) - one<genType>())) + one<genType>());\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType exponentialEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a <= zero<genType>())\n\t\t\treturn a;\n\t\telse\n\t\t{\n\t\t\tgenType const Complementary = a - one<genType>();\n\t\t\tgenType const Two = static_cast<genType>(2);\n\t\t\t\n\t\t\treturn glm::pow(Two, Complementary * static_cast<genType>(10));\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType exponentialEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a >= one<genType>())\n\t\t\treturn a;\n\t\telse\n\t\t{\n\t\t\treturn one<genType>() - glm::pow(static_cast<genType>(2), -static_cast<genType>(10) * a);\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType exponentialEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a < static_cast<genType>(0.5))\n\t\t\treturn static_cast<genType>(0.5) * glm::pow(static_cast<genType>(2), (static_cast<genType>(20) * a) - static_cast<genType>(10));\n\t\telse\n\t\t\treturn -static_cast<genType>(0.5) * glm::pow(static_cast<genType>(2), (-static_cast<genType>(20) * a) + static_cast<genType>(10)) + one<genType>();\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType elasticEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn std::sin(static_cast<genType>(13) * half_pi<genType>() * a) * glm::pow(static_cast<genType>(2), static_cast<genType>(10) * (a - one<genType>()));\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType elasticEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn std::sin(-static_cast<genType>(13) * half_pi<genType>() * (a + one<genType>())) * glm::pow(static_cast<genType>(2), -static_cast<genType>(10) * a) + one<genType>();\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType elasticEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a < static_cast<genType>(0.5))\n\t\t\treturn static_cast<genType>(0.5) * std::sin(static_cast<genType>(13) * half_pi<genType>() * (static_cast<genType>(2) * a)) * glm::pow(static_cast<genType>(2), static_cast<genType>(10) * ((static_cast<genType>(2) * a) - one<genType>()));\n\t\telse\n\t\t\treturn static_cast<genType>(0.5) * (std::sin(-static_cast<genType>(13) * half_pi<genType>() * ((static_cast<genType>(2) * a - one<genType>()) + one<genType>())) * glm::pow(static_cast<genType>(2), -static_cast<genType>(10) * (static_cast<genType>(2) * a - one<genType>())) + static_cast<genType>(2));\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType backEaseIn(genType const& a, genType const& o)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tgenType z = ((o + one<genType>()) * a) - o;\n\t\treturn (a * a * z);\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType backEaseOut(genType const& a, genType const& o)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tgenType n = a - one<genType>();\n\t\tgenType z = ((o + one<genType>()) * n) + o;\n\t\treturn (n * n * z) + one<genType>();\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType backEaseInOut(genType const& a, genType const& o)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tgenType s = o * static_cast<genType>(1.525);\n\t\tgenType x = static_cast<genType>(0.5);\n\t\tgenType n = a / static_cast<genType>(0.5);\n\n\t\tif (n < static_cast<genType>(1))\n\t\t{\n\t\t\tgenType z = ((s + static_cast<genType>(1)) * n) - s;\n\t\t\tgenType m = n * n * z;\n\t\t\treturn x * m;\n\t\t}\n\t\telse \n\t\t{\n\t\t\tn -= static_cast<genType>(2);\n\t\t\tgenType z = ((s + static_cast<genType>(1)) * n) + s;\n\t\t\tgenType m = (n*n*z) + static_cast<genType>(2);\n\t\t\treturn x * m;\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType backEaseIn(genType const& a)\n\t{\n\t\treturn backEaseIn(a, static_cast<genType>(1.70158));\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType backEaseOut(genType const& a)\n\t{\n\t\treturn backEaseOut(a, static_cast<genType>(1.70158));\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType backEaseInOut(genType const& a)\n\t{\n\t\treturn backEaseInOut(a, static_cast<genType>(1.70158));\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType bounceEaseOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a < static_cast<genType>(4.0 / 11.0))\n\t\t{\n\t\t\treturn (static_cast<genType>(121) * a * a) / static_cast<genType>(16);\n\t\t}\n\t\telse if(a < static_cast<genType>(8.0 / 11.0))\n\t\t{\n\t\t\treturn (static_cast<genType>(363.0 / 40.0) * a * a) - (static_cast<genType>(99.0 / 10.0) * a) + static_cast<genType>(17.0 / 5.0);\n\t\t}\n\t\telse if(a < static_cast<genType>(9.0 / 10.0))\n\t\t{\n\t\t\treturn (static_cast<genType>(4356.0 / 361.0) * a * a) - (static_cast<genType>(35442.0 / 1805.0) * a) + static_cast<genType>(16061.0 / 1805.0);\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn (static_cast<genType>(54.0 / 5.0) * a * a) - (static_cast<genType>(513.0 / 25.0) * a) + static_cast<genType>(268.0 / 25.0);\n\t\t}\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType bounceEaseIn(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\treturn one<genType>() - bounceEaseOut(one<genType>() - a);\n\t}\n\n\ttemplate <typename genType>\n\tGLM_FUNC_QUALIFIER genType bounceEaseInOut(genType const& a)\n\t{\n\t\t// Only defined in [0, 1]\n\t\tassert(a >= zero<genType>());\n\t\tassert(a <= one<genType>());\n\n\t\tif(a < static_cast<genType>(0.5))\n\t\t{\n\t\t\treturn static_cast<genType>(0.5) * (one<genType>() - bounceEaseOut(one<genType>() - a * static_cast<genType>(2)));\n\t\t}\n\t\telse\n\t\t{\n\t\t\treturn static_cast<genType>(0.5) * bounceEaseOut(a * static_cast<genType>(2) - one<genType>()) + static_cast<genType>(0.5);\n\t\t}\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/euler_angles.hpp",
    "content": "/// @ref gtx_euler_angles\n/// @file glm/gtx/euler_angles.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_euler_angles GLM_GTX_euler_angles\n/// @ingroup gtx\n///\n/// Include <glm/gtx/euler_angles.hpp> to use the features of this extension.\n///\n/// Build matrices from Euler angles.\n///\n/// Extraction of Euler angles from rotation matrix.\n/// Based on the original paper 2014 Mike Day - Extracting Euler Angles from a Rotation Matrix.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_euler_angles is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_euler_angles extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_euler_angles\n\t/// @{\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X.\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleX(\n\t\tT const& angleX);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y.\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleY(\n\t\tT const& angleY);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z.\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZ(\n\t\tT const& angleZ);\n\n\t/// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis.\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleX(\n\t\tT const & angleX, T const & angularVelocityX);\n\n\t/// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis.\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleY(\n\t\tT const & angleY, T const & angularVelocityY);\n\n\t/// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis.\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleZ(\n\t\tT const & angleZ, T const & angularVelocityZ);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXY(\n\t\tT const& angleX,\n\t\tT const& angleY);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYX(\n\t\tT const& angleY,\n\t\tT const& angleX);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZ(\n\t\tT const& angleX,\n\t\tT const& angleZ);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZX(\n\t\tT const& angle,\n\t\tT const& angleX);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZ(\n\t\tT const& angleY,\n\t\tT const& angleZ);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZY(\n\t\tT const& angleZ,\n\t\tT const& angleY);\n\n    /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z).\n    /// @see gtx_euler_angles\n    template<typename T>\n    GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYZ(\n        T const& t1,\n        T const& t2,\n        T const& t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXZ(\n\t\tT const& yaw,\n\t\tT const& pitch,\n\t\tT const& roll);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZX(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYX(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXY(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZY(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYZ(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXZ(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZY(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZX(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYX(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y).\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXY(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<4, 4, T, defaultp> yawPitchRoll(\n\t\tT const& yaw,\n\t\tT const& pitch,\n\t\tT const& roll);\n\n\t/// Creates a 2D 2 * 2 rotation matrix from an euler angle.\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<2, 2, T, defaultp> orientate2(T const& angle);\n\n\t/// Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle.\n\t/// @see gtx_euler_angles\n\ttemplate<typename T>\n\tGLM_FUNC_DECL mat<3, 3, T, defaultp> orientate3(T const& angle);\n\n\t/// Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> orientate3(vec<3, T, Q> const& angles);\n\n\t/// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z).\n\t/// @see gtx_euler_angles\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> orientate4(vec<3, T, Q> const& angles);\n\n    /// Extracts the (X * Y * Z) Euler angles from the rotation matrix M\n    /// @see gtx_euler_angles\n    template<typename T>\n    GLM_FUNC_DECL void extractEulerAngleXYZ(mat<4, 4, T, defaultp> const& M,\n                                            T & t1,\n                                            T & t2,\n                                            T & t3);\n\n\t/// Extracts the (Y * X * Z) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleYXZ(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (X * Z * X) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleXZX(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (X * Y * X) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleXYX(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (Y * X * Y) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleYXY(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (Y * Z * Y) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleYZY(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (Z * Y * Z) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleZYZ(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (Z * X * Z) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleZXZ(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (X * Z * Y) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleXZY(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (Y * Z * X) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleYZX(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (Z * Y * X) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleZYX(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// Extracts the (Z * X * Y) Euler angles from the rotation matrix M\n\t/// @see gtx_euler_angles\n\ttemplate <typename T>\n\tGLM_FUNC_DECL void extractEulerAngleZXY(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\tT & t1,\n\t\t\t\t\t\t\t\t\t\t\tT & t2,\n\t\t\t\t\t\t\t\t\t\t\tT & t3);\n\n\t/// @}\n}//namespace glm\n\n#include \"euler_angles.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/euler_angles.inl",
    "content": "/// @ref gtx_euler_angles\n\n#include \"compatibility.hpp\" // glm::atan2\n\nnamespace glm\n{\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleX\n\t(\n\t\tT const& angleX\n\t)\n\t{\n\t\tT cosX = glm::cos(angleX);\n\t\tT sinX = glm::sin(angleX);\n\n\t\treturn mat<4, 4, T, defaultp>(\n\t\t\tT(1), T(0), T(0), T(0),\n\t\t\tT(0), cosX, sinX, T(0),\n\t\t\tT(0),-sinX, cosX, T(0),\n\t\t\tT(0), T(0), T(0), T(1));\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleY\n\t(\n\t\tT const& angleY\n\t)\n\t{\n\t\tT cosY = glm::cos(angleY);\n\t\tT sinY = glm::sin(angleY);\n\n\t\treturn mat<4, 4, T, defaultp>(\n\t\t\tcosY,\tT(0),\t-sinY,\tT(0),\n\t\t\tT(0),\tT(1),\tT(0),\tT(0),\n\t\t\tsinY,\tT(0),\tcosY,\tT(0),\n\t\t\tT(0),\tT(0),\tT(0),\tT(1));\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZ\n\t(\n\t\tT const& angleZ\n\t)\n\t{\n\t\tT cosZ = glm::cos(angleZ);\n\t\tT sinZ = glm::sin(angleZ);\n\n\t\treturn mat<4, 4, T, defaultp>(\n\t\t\tcosZ,\tsinZ,\tT(0), T(0),\n\t\t\t-sinZ,\tcosZ,\tT(0), T(0),\n\t\t\tT(0),\tT(0),\tT(1), T(0),\n\t\t\tT(0),\tT(0),\tT(0), T(1));\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleX\n\t(\n\t\tT const & angleX,\n\t\tT const & angularVelocityX\n\t)\n\t{\n\t\tT cosX = glm::cos(angleX) * angularVelocityX;\n\t\tT sinX = glm::sin(angleX) * angularVelocityX;\n\n\t\treturn mat<4, 4, T, defaultp>(\n\t\t\tT(0), T(0), T(0), T(0),\n\t\t\tT(0),-sinX, cosX, T(0),\n\t\t\tT(0),-cosX,-sinX, T(0),\n\t\t\tT(0), T(0), T(0), T(0));\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleY\n\t(\n\t\tT const & angleY,\n\t\tT const & angularVelocityY\n\t)\n\t{\n\t\tT cosY = glm::cos(angleY) * angularVelocityY;\n\t\tT sinY = glm::sin(angleY) * angularVelocityY;\n\n\t\treturn mat<4, 4, T, defaultp>(\n\t\t\t-sinY, T(0), -cosY, T(0),\n\t\t\t T(0), T(0),  T(0), T(0),\n\t\t\t cosY, T(0), -sinY, T(0),\n\t\t\t T(0), T(0),  T(0), T(0));\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleZ\n\t(\n\t\tT const & angleZ,\n\t\tT const & angularVelocityZ\n\t)\n\t{\n\t\tT cosZ = glm::cos(angleZ) * angularVelocityZ;\n\t\tT sinZ = glm::sin(angleZ) * angularVelocityZ;\n\n\t\treturn mat<4, 4, T, defaultp>(\n\t\t\t-sinZ,  cosZ, T(0), T(0),\n\t\t\t-cosZ, -sinZ, T(0), T(0),\n\t\t\t T(0),  T(0), T(0), T(0),\n\t\t\t T(0),  T(0), T(0), T(0));\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXY\n\t(\n\t\tT const& angleX,\n\t\tT const& angleY\n\t)\n\t{\n\t\tT cosX = glm::cos(angleX);\n\t\tT sinX = glm::sin(angleX);\n\t\tT cosY = glm::cos(angleY);\n\t\tT sinY = glm::sin(angleY);\n\n\t\treturn mat<4, 4, T, defaultp>(\n\t\t\tcosY,   -sinX * -sinY,  cosX * -sinY,   T(0),\n\t\t\tT(0),   cosX,           sinX,           T(0),\n\t\t\tsinY,   -sinX * cosY,   cosX * cosY,    T(0),\n\t\t\tT(0),   T(0),           T(0),           T(1));\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYX\n\t(\n\t\tT const& angleY,\n\t\tT const& angleX\n\t)\n\t{\n\t\tT cosX = glm::cos(angleX);\n\t\tT sinX = glm::sin(angleX);\n\t\tT cosY = glm::cos(angleY);\n\t\tT sinY = glm::sin(angleY);\n\n\t\treturn mat<4, 4, T, defaultp>(\n\t\t\tcosY,          0,      -sinY,    T(0),\n\t\t\tsinY * sinX,  cosX, cosY * sinX, T(0),\n\t\t\tsinY * cosX, -sinX, cosY * cosX, T(0),\n\t\t\tT(0),         T(0),     T(0),    T(1));\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZ\n\t(\n\t\tT const& angleX,\n\t\tT const& angleZ\n\t)\n\t{\n\t\treturn eulerAngleX(angleX) * eulerAngleZ(angleZ);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZX\n\t(\n\t\tT const& angleZ,\n\t\tT const& angleX\n\t)\n\t{\n\t\treturn eulerAngleZ(angleZ) * eulerAngleX(angleX);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZ\n\t(\n\t\tT const& angleY,\n\t\tT const& angleZ\n\t)\n\t{\n\t\treturn eulerAngleY(angleY) * eulerAngleZ(angleZ);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZY\n\t(\n\t\tT const& angleZ,\n\t\tT const& angleY\n\t)\n\t{\n\t\treturn eulerAngleZ(angleZ) * eulerAngleY(angleY);\n\t}\n\n    template<typename T>\n    GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXYZ\n    (\n     T const& t1,\n     T const& t2,\n     T const& t3\n     )\n    {\n        T c1 = glm::cos(-t1);\n        T c2 = glm::cos(-t2);\n        T c3 = glm::cos(-t3);\n        T s1 = glm::sin(-t1);\n        T s2 = glm::sin(-t2);\n        T s3 = glm::sin(-t3);\n\n        mat<4, 4, T, defaultp> Result;\n        Result[0][0] = c2 * c3;\n        Result[0][1] =-c1 * s3 + s1 * s2 * c3;\n        Result[0][2] = s1 * s3 + c1 * s2 * c3;\n        Result[0][3] = static_cast<T>(0);\n        Result[1][0] = c2 * s3;\n        Result[1][1] = c1 * c3 + s1 * s2 * s3;\n        Result[1][2] =-s1 * c3 + c1 * s2 * s3;\n        Result[1][3] = static_cast<T>(0);\n        Result[2][0] =-s2;\n        Result[2][1] = s1 * c2;\n        Result[2][2] = c1 * c2;\n        Result[2][3] = static_cast<T>(0);\n        Result[3][0] = static_cast<T>(0);\n        Result[3][1] = static_cast<T>(0);\n        Result[3][2] = static_cast<T>(0);\n        Result[3][3] = static_cast<T>(1);\n        return Result;\n    }\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYXZ\n\t(\n\t\tT const& yaw,\n\t\tT const& pitch,\n\t\tT const& roll\n\t)\n\t{\n\t\tT tmp_ch = glm::cos(yaw);\n\t\tT tmp_sh = glm::sin(yaw);\n\t\tT tmp_cp = glm::cos(pitch);\n\t\tT tmp_sp = glm::sin(pitch);\n\t\tT tmp_cb = glm::cos(roll);\n\t\tT tmp_sb = glm::sin(roll);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb;\n\t\tResult[0][1] = tmp_sb * tmp_cp;\n\t\tResult[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb;\n\t\tResult[1][1] = tmp_cb * tmp_cp;\n\t\tResult[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = tmp_sh * tmp_cp;\n\t\tResult[2][1] = -tmp_sp;\n\t\tResult[2][2] = tmp_ch * tmp_cp;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZX\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c2;\n\t\tResult[0][1] = c1 * s2;\n\t\tResult[0][2] = s1 * s2;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] =-c3 * s2;\n\t\tResult[1][1] = c1 * c2 * c3 - s1 * s3;\n\t\tResult[1][2] = c1 * s3 + c2 * c3 * s1;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = s2 * s3;\n\t\tResult[2][1] =-c3 * s1 - c1 * c2 * s3;\n\t\tResult[2][2] = c1 * c3 - c2 * s1 * s3;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXYX\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c2;\n\t\tResult[0][1] = s1 * s2;\n\t\tResult[0][2] =-c1 * s2;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] = s2 * s3;\n\t\tResult[1][1] = c1 * c3 - c2 * s1 * s3;\n\t\tResult[1][2] = c3 * s1 + c1 * c2 * s3;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = c3 * s2;\n\t\tResult[2][1] =-c1 * s3 - c2 * c3 * s1;\n\t\tResult[2][2] = c1 * c2 * c3 - s1 * s3;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYXY\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c1 * c3 - c2 * s1 * s3;\n\t\tResult[0][1] = s2* s3;\n\t\tResult[0][2] =-c3 * s1 - c1 * c2 * s3;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] = s1 * s2;\n\t\tResult[1][1] = c2;\n\t\tResult[1][2] = c1 * s2;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = c1 * s3 + c2 * c3 * s1;\n\t\tResult[2][1] =-c3 * s2;\n\t\tResult[2][2] = c1 * c2 * c3 - s1 * s3;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZY\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c1 * c2 * c3 - s1 * s3;\n\t\tResult[0][1] = c3 * s2;\n\t\tResult[0][2] =-c1 * s3 - c2 * c3 * s1;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] =-c1 * s2;\n\t\tResult[1][1] = c2;\n\t\tResult[1][2] = s1 * s2;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = c3 * s1 + c1 * c2 * s3;\n\t\tResult[2][1] = s2 * s3;\n\t\tResult[2][2] = c1 * c3 - c2 * s1 * s3;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZYZ\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c1 * c2 * c3 - s1 * s3;\n\t\tResult[0][1] = c1 * s3 + c2 * c3 * s1;\n\t\tResult[0][2] =-c3 * s2;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] =-c3 * s1 - c1 * c2 * s3;\n\t\tResult[1][1] = c1 * c3 - c2 * s1 * s3;\n\t\tResult[1][2] = s2 * s3;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = c1 * s2;\n\t\tResult[2][1] = s1 * s2;\n\t\tResult[2][2] = c2;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZXZ\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c1 * c3 - c2 * s1 * s3;\n\t\tResult[0][1] = c3 * s1 + c1 * c2 * s3;\n\t\tResult[0][2] = s2 *s3;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] =-c1 * s3 - c2 * c3 * s1;\n\t\tResult[1][1] = c1 * c2 * c3 - s1 * s3;\n\t\tResult[1][2] = c3 * s2;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = s1 * s2;\n\t\tResult[2][1] =-c1 * s2;\n\t\tResult[2][2] = c2;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZY\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c2 * c3;\n\t\tResult[0][1] = s1 * s3 + c1 * c3 * s2;\n\t\tResult[0][2] = c3 * s1 * s2 - c1 * s3;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] =-s2;\n\t\tResult[1][1] = c1 * c2;\n\t\tResult[1][2] = c2 * s1;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = c2 * s3;\n\t\tResult[2][1] = c1 * s2 * s3 - c3 * s1;\n\t\tResult[2][2] = c1 * c3 + s1 * s2 *s3;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZX\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c1 * c2;\n\t\tResult[0][1] = s2;\n\t\tResult[0][2] =-c2 * s1;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] = s1 * s3 - c1 * c3 * s2;\n\t\tResult[1][1] = c2 * c3;\n\t\tResult[1][2] = c1 * s3 + c3 * s1 * s2;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = c3 * s1 + c1 * s2 * s3;\n\t\tResult[2][1] =-c2 * s3;\n\t\tResult[2][2] = c1 * c3 - s1 * s2 * s3;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZYX\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c1 * c2;\n\t\tResult[0][1] = c2 * s1;\n\t\tResult[0][2] =-s2;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] = c1 * s2 * s3 - c3 * s1;\n\t\tResult[1][1] = c1 * c3 + s1 * s2 * s3;\n\t\tResult[1][2] = c2 * s3;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = s1 * s3 + c1 * c3 * s2;\n\t\tResult[2][1] = c3 * s1 * s2 - c1 * s3;\n\t\tResult[2][2] = c2 * c3;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZXY\n\t(\n\t\tT const & t1,\n\t\tT const & t2,\n\t\tT const & t3\n\t)\n\t{\n\t\tT c1 = glm::cos(t1);\n\t\tT s1 = glm::sin(t1);\n\t\tT c2 = glm::cos(t2);\n\t\tT s2 = glm::sin(t2);\n\t\tT c3 = glm::cos(t3);\n\t\tT s3 = glm::sin(t3);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = c1 * c3 - s1 * s2 * s3;\n\t\tResult[0][1] = c3 * s1 + c1 * s2 * s3;\n\t\tResult[0][2] =-c2 * s3;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] =-c2 * s1;\n\t\tResult[1][1] = c1 * c2;\n\t\tResult[1][2] = s2;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = c1 * s3 + c3 * s1 * s2;\n\t\tResult[2][1] = s1 * s3 - c1 * c3 * s2;\n\t\tResult[2][2] = c2 * c3;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> yawPitchRoll\n\t(\n\t\tT const& yaw,\n\t\tT const& pitch,\n\t\tT const& roll\n\t)\n\t{\n\t\tT tmp_ch = glm::cos(yaw);\n\t\tT tmp_sh = glm::sin(yaw);\n\t\tT tmp_cp = glm::cos(pitch);\n\t\tT tmp_sp = glm::sin(pitch);\n\t\tT tmp_cb = glm::cos(roll);\n\t\tT tmp_sb = glm::sin(roll);\n\n\t\tmat<4, 4, T, defaultp> Result;\n\t\tResult[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb;\n\t\tResult[0][1] = tmp_sb * tmp_cp;\n\t\tResult[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb;\n\t\tResult[0][3] = static_cast<T>(0);\n\t\tResult[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb;\n\t\tResult[1][1] = tmp_cb * tmp_cp;\n\t\tResult[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb;\n\t\tResult[1][3] = static_cast<T>(0);\n\t\tResult[2][0] = tmp_sh * tmp_cp;\n\t\tResult[2][1] = -tmp_sp;\n\t\tResult[2][2] = tmp_ch * tmp_cp;\n\t\tResult[2][3] = static_cast<T>(0);\n\t\tResult[3][0] = static_cast<T>(0);\n\t\tResult[3][1] = static_cast<T>(0);\n\t\tResult[3][2] = static_cast<T>(0);\n\t\tResult[3][3] = static_cast<T>(1);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> orientate2\n\t(\n\t\tT const& angle\n\t)\n\t{\n\t\tT c = glm::cos(angle);\n\t\tT s = glm::sin(angle);\n\n\t\tmat<2, 2, T, defaultp> Result;\n\t\tResult[0][0] = c;\n\t\tResult[0][1] = s;\n\t\tResult[1][0] = -s;\n\t\tResult[1][1] = c;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> orientate3\n\t(\n\t\tT const& angle\n\t)\n\t{\n\t\tT c = glm::cos(angle);\n\t\tT s = glm::sin(angle);\n\n\t\tmat<3, 3, T, defaultp> Result;\n\t\tResult[0][0] = c;\n\t\tResult[0][1] = s;\n\t\tResult[0][2] = T(0.0);\n\t\tResult[1][0] = -s;\n\t\tResult[1][1] = c;\n\t\tResult[1][2] = T(0.0);\n\t\tResult[2][0] = T(0.0);\n\t\tResult[2][1] = T(0.0);\n\t\tResult[2][2] = T(1.0);\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> orientate3\n\t(\n\t\tvec<3, T, Q> const& angles\n\t)\n\t{\n\t\treturn mat<3, 3, T, Q>(yawPitchRoll(angles.z, angles.x, angles.y));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> orientate4\n\t(\n\t\tvec<3, T, Q> const& angles\n\t)\n\t{\n\t\treturn yawPitchRoll(angles.z, angles.x, angles.y);\n\t}\n\n    template<typename T>\n    GLM_FUNC_DECL void extractEulerAngleXYZ(mat<4, 4, T, defaultp> const& M,\n                                            T & t1,\n                                            T & t2,\n                                            T & t3)\n    {\n        T T1 = glm::atan2(M[2][1], M[2][2]);\n        T C2 = glm::sqrt(M[0][0]*M[0][0] + M[1][0]*M[1][0]);\n        T T2 = glm::atan2(-M[2][0], C2);\n        T S1 = glm::sin(T1);\n        T C1 = glm::cos(T1);\n        T T3 = glm::atan2(S1*M[0][2] - C1*M[0][1], C1*M[1][1] - S1*M[1][2  ]);\n        t1 = -T1;\n        t2 = -T2;\n        t3 = -T3;\n    }\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleYXZ(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[2][0], M[2][2]);\n\t\tT C2 = glm::sqrt(M[0][1]*M[0][1] + M[1][1]*M[1][1]);\n\t\tT T2 = glm::atan2(-M[2][1], C2);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(S1*M[1][2] - C1*M[1][0], C1*M[0][0] - S1*M[0][2]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleXZX(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[0][2], M[0][1]);\n\t\tT S2 = glm::sqrt(M[1][0]*M[1][0] + M[2][0]*M[2][0]);\n\t\tT T2 = glm::atan2(S2, M[0][0]);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(C1*M[1][2] - S1*M[1][1], C1*M[2][2] - S1*M[2][1]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleXYX(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[0][1], -M[0][2]);\n\t\tT S2 = glm::sqrt(M[1][0]*M[1][0] + M[2][0]*M[2][0]);\n\t\tT T2 = glm::atan2(S2, M[0][0]);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(-C1*M[2][1] - S1*M[2][2], C1*M[1][1] + S1*M[1][2]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleYXY(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[1][0], M[1][2]);\n\t\tT S2 = glm::sqrt(M[0][1]*M[0][1] + M[2][1]*M[2][1]);\n\t\tT T2 = glm::atan2(S2, M[1][1]);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(C1*M[2][0] - S1*M[2][2], C1*M[0][0] - S1*M[0][2]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleYZY(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[1][2], -M[1][0]);\n\t\tT S2 = glm::sqrt(M[0][1]*M[0][1] + M[2][1]*M[2][1]);\n\t\tT T2 = glm::atan2(S2, M[1][1]);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(-S1*M[0][0] - C1*M[0][2], S1*M[2][0] + C1*M[2][2]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleZYZ(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[2][1], M[2][0]);\n\t\tT S2 = glm::sqrt(M[0][2]*M[0][2] + M[1][2]*M[1][2]);\n\t\tT T2 = glm::atan2(S2, M[2][2]);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(C1*M[0][1] - S1*M[0][0], C1*M[1][1] - S1*M[1][0]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleZXZ(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[2][0], -M[2][1]);\n\t\tT S2 = glm::sqrt(M[0][2]*M[0][2] + M[1][2]*M[1][2]);\n\t\tT T2 = glm::atan2(S2, M[2][2]);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(-C1*M[1][0] - S1*M[1][1], C1*M[0][0] + S1*M[0][1]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleXZY(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[1][2], M[1][1]);\n\t\tT C2 = glm::sqrt(M[0][0]*M[0][0] + M[2][0]*M[2][0]);\n\t\tT T2 = glm::atan2(-M[1][0], C2);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(S1*M[0][1] - C1*M[0][2], C1*M[2][2] - S1*M[2][1]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleYZX(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(-M[0][2], M[0][0]);\n\t\tT C2 = glm::sqrt(M[1][1]*M[1][1] + M[2][1]*M[2][1]);\n\t\tT T2 = glm::atan2(M[0][1], C2);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(S1*M[1][0] + C1*M[1][2], S1*M[2][0] + C1*M[2][2]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleZYX(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(M[0][1], M[0][0]);\n\t\tT C2 = glm::sqrt(M[1][2]*M[1][2] + M[2][2]*M[2][2]);\n\t\tT T2 = glm::atan2(-M[0][2], C2);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(S1*M[2][0] - C1*M[2][1], C1*M[1][1] - S1*M[1][0]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER void extractEulerAngleZXY(mat<4, 4, T, defaultp> const & M,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t1,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t2,\n\t\t\t\t\t\t\t\t\t\t\t\t T & t3)\n\t{\n\t\tT T1 = glm::atan2(-M[1][0], M[1][1]);\n\t\tT C2 = glm::sqrt(M[0][2]*M[0][2] + M[2][2]*M[2][2]);\n\t\tT T2 = glm::atan2(M[1][2], C2);\n\t\tT S1 = glm::sin(T1);\n\t\tT C1 = glm::cos(T1);\n\t\tT T3 = glm::atan2(C1*M[2][0] + S1*M[2][1], C1*M[0][0] + S1*M[0][1]);\n\t\tt1 = T1;\n\t\tt2 = T2;\n\t\tt3 = T3;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/extend.hpp",
    "content": "/// @ref gtx_extend\n/// @file glm/gtx/extend.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_extend GLM_GTX_extend\n/// @ingroup gtx\n///\n/// Include <glm/gtx/extend.hpp> to use the features of this extension.\n///\n/// Extend a position from a source to a position at a defined length.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_extend extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_extend\n\t/// @{\n\n\t/// Extends of Length the Origin position using the (Source - Origin) direction.\n\t/// @see gtx_extend\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType extend(\n\t\tgenType const& Origin,\n\t\tgenType const& Source,\n\t\ttypename genType::value_type const Length);\n\n\t/// @}\n}//namespace glm\n\n#include \"extend.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/extend.inl",
    "content": "/// @ref gtx_extend\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType extend\n\t(\n\t\tgenType const& Origin,\n\t\tgenType const& Source,\n\t\tgenType const& Distance\n\t)\n\t{\n\t\treturn Origin + (Source - Origin) * Distance;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, T, Q> extend\n\t(\n\t\tvec<2, T, Q> const& Origin,\n\t\tvec<2, T, Q> const& Source,\n\t\tT const& Distance\n\t)\n\t{\n\t\treturn Origin + (Source - Origin) * Distance;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> extend\n\t(\n\t\tvec<3, T, Q> const& Origin,\n\t\tvec<3, T, Q> const& Source,\n\t\tT const& Distance\n\t)\n\t{\n\t\treturn Origin + (Source - Origin) * Distance;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> extend\n\t(\n\t\tvec<4, T, Q> const& Origin,\n\t\tvec<4, T, Q> const& Source,\n\t\tT const& Distance\n\t)\n\t{\n\t\treturn Origin + (Source - Origin) * Distance;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/extended_min_max.hpp",
    "content": "/// @ref gtx_extended_min_max\n/// @file glm/gtx/extended_min_max.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_extended_min_max GLM_GTX_extended_min_max\n/// @ingroup gtx\n///\n/// Include <glm/gtx/extended_min_max.hpp> to use the features of this extension.\n///\n/// Min and max functions for 3 to 4 parameters.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../ext/vector_common.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_extended_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_extended_min_max extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_extended_min_max\n\t/// @{\n\n\t/// Return the minimum component-wise values of 3 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T min(\n\t\tT const& x,\n\t\tT const& y,\n\t\tT const& z);\n\n\t/// Return the minimum component-wise values of 3 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_DECL C<T> min(\n\t\tC<T> const& x,\n\t\ttypename C<T>::T const& y,\n\t\ttypename C<T>::T const& z);\n\n\t/// Return the minimum component-wise values of 3 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_DECL C<T> min(\n\t\tC<T> const& x,\n\t\tC<T> const& y,\n\t\tC<T> const& z);\n\n\t/// Return the minimum component-wise values of 4 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T min(\n\t\tT const& x,\n\t\tT const& y,\n\t\tT const& z,\n\t\tT const& w);\n\n\t/// Return the minimum component-wise values of 4 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_DECL C<T> min(\n\t\tC<T> const& x,\n\t\ttypename C<T>::T const& y,\n\t\ttypename C<T>::T const& z,\n\t\ttypename C<T>::T const& w);\n\n\t/// Return the minimum component-wise values of 4 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_DECL C<T> min(\n\t\tC<T> const& x,\n\t\tC<T> const& y,\n\t\tC<T> const& z,\n\t\tC<T> const& w);\n\n\t/// Return the maximum component-wise values of 3 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T max(\n\t\tT const& x,\n\t\tT const& y,\n\t\tT const& z);\n\n\t/// Return the maximum component-wise values of 3 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_DECL C<T> max(\n\t\tC<T> const& x,\n\t\ttypename C<T>::T const& y,\n\t\ttypename C<T>::T const& z);\n\n\t/// Return the maximum component-wise values of 3 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_DECL C<T> max(\n\t\tC<T> const& x,\n\t\tC<T> const& y,\n\t\tC<T> const& z);\n\n\t/// Return the maximum component-wise values of 4 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T max(\n\t\tT const& x,\n\t\tT const& y,\n\t\tT const& z,\n\t\tT const& w);\n\n\t/// Return the maximum component-wise values of 4 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_DECL C<T> max(\n\t\tC<T> const& x,\n\t\ttypename C<T>::T const& y,\n\t\ttypename C<T>::T const& z,\n\t\ttypename C<T>::T const& w);\n\n\t/// Return the maximum component-wise values of 4 inputs\n\t/// @see gtx_extented_min_max\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_DECL C<T> max(\n\t\tC<T> const& x,\n\t\tC<T> const& y,\n\t\tC<T> const& z,\n\t\tC<T> const& w);\n\n\t/// @}\n}//namespace glm\n\n#include \"extended_min_max.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/extended_min_max.inl",
    "content": "/// @ref gtx_extended_min_max\n\nnamespace glm\n{\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T min(\n\t\tT const& x,\n\t\tT const& y,\n\t\tT const& z)\n\t{\n\t\treturn glm::min(glm::min(x, y), z);\n\t}\n\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_QUALIFIER C<T> min\n\t(\n\t\tC<T> const& x,\n\t\ttypename C<T>::T const& y,\n\t\ttypename C<T>::T const& z\n\t)\n\t{\n\t\treturn glm::min(glm::min(x, y), z);\n\t}\n\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_QUALIFIER C<T> min\n\t(\n\t\tC<T> const& x,\n\t\tC<T> const& y,\n\t\tC<T> const& z\n\t)\n\t{\n\t\treturn glm::min(glm::min(x, y), z);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T min\n\t(\n\t\tT const& x,\n\t\tT const& y,\n\t\tT const& z,\n\t\tT const& w\n\t)\n\t{\n\t\treturn glm::min(glm::min(x, y), glm::min(z, w));\n\t}\n\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_QUALIFIER C<T> min\n\t(\n\t\tC<T> const& x,\n\t\ttypename C<T>::T const& y,\n\t\ttypename C<T>::T const& z,\n\t\ttypename C<T>::T const& w\n\t)\n\t{\n\t\treturn glm::min(glm::min(x, y), glm::min(z, w));\n\t}\n\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_QUALIFIER C<T> min\n\t(\n\t\tC<T> const& x,\n\t\tC<T> const& y,\n\t\tC<T> const& z,\n\t\tC<T> const& w\n\t)\n\t{\n\t\treturn glm::min(glm::min(x, y), glm::min(z, w));\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T max(\n\t\tT const& x,\n\t\tT const& y,\n\t\tT const& z)\n\t{\n\t\treturn glm::max(glm::max(x, y), z);\n\t}\n\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_QUALIFIER C<T> max\n\t(\n\t\tC<T> const& x,\n\t\ttypename C<T>::T const& y,\n\t\ttypename C<T>::T const& z\n\t)\n\t{\n\t\treturn glm::max(glm::max(x, y), z);\n\t}\n\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_QUALIFIER C<T> max\n\t(\n\t\tC<T> const& x,\n\t\tC<T> const& y,\n\t\tC<T> const& z\n\t)\n\t{\n\t\treturn glm::max(glm::max(x, y), z);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T max\n\t(\n\t\tT const& x,\n\t\tT const& y,\n\t\tT const& z,\n\t\tT const& w\n\t)\n\t{\n\t\treturn glm::max(glm::max(x, y), glm::max(z, w));\n\t}\n\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_QUALIFIER C<T> max\n\t(\n\t\tC<T> const& x,\n\t\ttypename C<T>::T const& y,\n\t\ttypename C<T>::T const& z,\n\t\ttypename C<T>::T const& w\n\t)\n\t{\n\t\treturn glm::max(glm::max(x, y), glm::max(z, w));\n\t}\n\n\ttemplate<typename T, template<typename> class C>\n\tGLM_FUNC_QUALIFIER C<T> max\n\t(\n\t\tC<T> const& x,\n\t\tC<T> const& y,\n\t\tC<T> const& z,\n\t\tC<T> const& w\n\t)\n\t{\n\t\treturn glm::max(glm::max(x, y), glm::max(z, w));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/exterior_product.hpp",
    "content": "/// @ref gtx_exterior_product\n/// @file glm/gtx/exterior_product.hpp\n///\n/// @see core (dependence)\n/// @see gtx_exterior_product (dependence)\n///\n/// @defgroup gtx_exterior_product GLM_GTX_exterior_product\n/// @ingroup gtx\n///\n/// Include <glm/gtx/exterior_product.hpp> to use the features of this extension.\n///\n/// @brief Allow to perform bit operations on integer values\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_exterior_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_exterior_product extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_exterior_product\n\t/// @{\n\n\t/// Returns the cross product of x and y.\n\t///\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"https://en.wikipedia.org/wiki/Exterior_algebra#Cross_and_triple_products\">Exterior product</a>\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T cross(vec<2, T, Q> const& v, vec<2, T, Q> const& u);\n\n\t/// @}\n} //namespace glm\n\n#include \"exterior_product.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/exterior_product.inl",
    "content": "/// @ref gtx_exterior_product\n\n#include <limits>\n\nnamespace glm {\nnamespace detail\n{\n\ttemplate<typename T, qualifier Q, bool Aligned>\n\tstruct compute_cross_vec2\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(vec<2, T, Q> const& v, vec<2, T, Q> const& u)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'cross' accepts only floating-point inputs\");\n\n\t\t\treturn v.x * u.y - u.x * v.y;\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T cross(vec<2, T, Q> const& x, vec<2, T, Q> const& y)\n\t{\n\t\treturn detail::compute_cross_vec2<T, Q, detail::is_aligned<Q>::value>::call(x, y);\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/fast_exponential.hpp",
    "content": "/// @ref gtx_fast_exponential\n/// @file glm/gtx/fast_exponential.hpp\n///\n/// @see core (dependence)\n/// @see gtx_half_float (dependence)\n///\n/// @defgroup gtx_fast_exponential GLM_GTX_fast_exponential\n/// @ingroup gtx\n///\n/// Include <glm/gtx/fast_exponential.hpp> to use the features of this extension.\n///\n/// Fast but less accurate implementations of exponential based functions.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_fast_exponential is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_fast_exponential extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_fast_exponential\n\t/// @{\n\n\t/// Faster than the common pow function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fastPow(genType x, genType y);\n\n\t/// Faster than the common pow function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastPow(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Faster than the common pow function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<typename genTypeT, typename genTypeU>\n\tGLM_FUNC_DECL genTypeT fastPow(genTypeT x, genTypeU y);\n\n\t/// Faster than the common pow function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastPow(vec<L, T, Q> const& x);\n\n\t/// Faster than the common exp function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastExp(T x);\n\n\t/// Faster than the common exp function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastExp(vec<L, T, Q> const& x);\n\n\t/// Faster than the common log function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastLog(T x);\n\n\t/// Faster than the common exp2 function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastLog(vec<L, T, Q> const& x);\n\n\t/// Faster than the common exp2 function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastExp2(T x);\n\n\t/// Faster than the common exp2 function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastExp2(vec<L, T, Q> const& x);\n\n\t/// Faster than the common log2 function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastLog2(T x);\n\n\t/// Faster than the common log2 function but less accurate.\n\t/// @see gtx_fast_exponential\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastLog2(vec<L, T, Q> const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"fast_exponential.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/fast_exponential.inl",
    "content": "/// @ref gtx_fast_exponential\n\nnamespace glm\n{\n\t// fastPow:\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastPow(genType x, genType y)\n\t{\n\t\treturn exp(y * log(x));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastPow(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\treturn exp(y * log(x));\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastPow(T x, int y)\n\t{\n\t\tT f = static_cast<T>(1);\n\t\tfor(int i = 0; i < y; ++i)\n\t\t\tf *= x;\n\t\treturn f;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastPow(vec<L, T, Q> const& x, vec<L, int, Q> const& y)\n\t{\n\t\tvec<L, T, Q> Result;\n\t\tfor(length_t i = 0, n = x.length(); i < n; ++i)\n\t\t\tResult[i] = fastPow(x[i], y[i]);\n\t\treturn Result;\n\t}\n\n\t// fastExp\n\t// Note: This function provides accurate results only for value between -1 and 1, else avoid it.\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastExp(T x)\n\t{\n\t\t// This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower.\n\t\t// return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f))));\n\t\tT x2 = x * x;\n\t\tT x3 = x2 * x;\n\t\tT x4 = x3 * x;\n\t\tT x5 = x4 * x;\n\t\treturn T(1) + x + (x2 * T(0.5)) + (x3 * T(0.1666666667)) + (x4 * T(0.041666667)) + (x5 * T(0.008333333333));\n\t}\n\t/*  // Try to handle all values of float... but often shower than std::exp, glm::floor and the loop kill the performance\n\tGLM_FUNC_QUALIFIER float fastExp(float x)\n\t{\n\t\tconst float e = 2.718281828f;\n\t\tconst float IntegerPart = floor(x);\n\t\tconst float FloatPart = x - IntegerPart;\n\t\tfloat z = 1.f;\n\n\t\tfor(int i = 0; i < int(IntegerPart); ++i)\n\t\t\tz *= e;\n\n\t\tconst float x2 = FloatPart * FloatPart;\n\t\tconst float x3 = x2 * FloatPart;\n\t\tconst float x4 = x3 * FloatPart;\n\t\tconst float x5 = x4 * FloatPart;\n\t\treturn z * (1.0f + FloatPart + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f));\n\t}\n\n\t// Increase accuracy on number bigger that 1 and smaller than -1 but it's not enough for high and negative numbers\n\tGLM_FUNC_QUALIFIER float fastExp(float x)\n\t{\n\t\t// This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower.\n\t\t// return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f))));\n\t\tfloat x2 = x * x;\n\t\tfloat x3 = x2 * x;\n\t\tfloat x4 = x3 * x;\n\t\tfloat x5 = x4 * x;\n\t\tfloat x6 = x5 * x;\n\t\tfloat x7 = x6 * x;\n\t\tfloat x8 = x7 * x;\n\t\treturn 1.0f + x + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f)+ (x6 * 0.00138888888888f) + (x7 * 0.000198412698f) + (x8 * 0.0000248015873f);;\n\t}\n\t*/\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastExp(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastExp, x);\n\t}\n\n\t// fastLog\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastLog(genType x)\n\t{\n\t\treturn std::log(x);\n\t}\n\n\t/* Slower than the VC7.1 function...\n\tGLM_FUNC_QUALIFIER float fastLog(float x)\n\t{\n\t\tfloat y1 = (x - 1.0f) / (x + 1.0f);\n\t\tfloat y2 = y1 * y1;\n\t\treturn 2.0f * y1 * (1.0f + y2 * (0.3333333333f + y2 * (0.2f + y2 * 0.1428571429f)));\n\t}\n\t*/\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastLog(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastLog, x);\n\t}\n\n\t//fastExp2, ln2 = 0.69314718055994530941723212145818f\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastExp2(genType x)\n\t{\n\t\treturn fastExp(static_cast<genType>(0.69314718055994530941723212145818) * x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastExp2(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastExp2, x);\n\t}\n\n\t// fastLog2, ln2 = 0.69314718055994530941723212145818f\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastLog2(genType x)\n\t{\n\t\treturn fastLog(x) / static_cast<genType>(0.69314718055994530941723212145818);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastLog2(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastLog2, x);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/fast_square_root.hpp",
    "content": "/// @ref gtx_fast_square_root\n/// @file glm/gtx/fast_square_root.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_fast_square_root GLM_GTX_fast_square_root\n/// @ingroup gtx\n///\n/// Include <glm/gtx/fast_square_root.hpp> to use the features of this extension.\n///\n/// Fast but less accurate implementations of square root based functions.\n/// - Sqrt optimisation based on Newton's method,\n/// www.gamedev.net/community/forums/topic.asp?topic id=139956\n\n#pragma once\n\n// Dependency:\n#include \"../common.hpp\"\n#include \"../exponential.hpp\"\n#include \"../geometric.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_fast_square_root is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_fast_square_root extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_fast_square_root\n\t/// @{\n\n\t/// Faster than the common sqrt function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fastSqrt(genType x);\n\n\t/// Faster than the common sqrt function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastSqrt(vec<L, T, Q> const& x);\n\n\t/// Faster than the common inversesqrt function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fastInverseSqrt(genType x);\n\n\t/// Faster than the common inversesqrt function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastInverseSqrt(vec<L, T, Q> const& x);\n\n\t/// Faster than the common length function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fastLength(genType x);\n\n\t/// Faster than the common length function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T fastLength(vec<L, T, Q> const& x);\n\n\t/// Faster than the common distance function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fastDistance(genType x, genType y);\n\n\t/// Faster than the common distance function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T fastDistance(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Faster than the common normalize function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType fastNormalize(genType x);\n\n\t/// Faster than the common normalize function but less accurate.\n\t///\n\t/// @see gtx_fast_square_root extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> fastNormalize(vec<L, T, Q> const& x);\n\n\t/// @}\n}// namespace glm\n\n#include \"fast_square_root.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/fast_square_root.inl",
    "content": "/// @ref gtx_fast_square_root\n\nnamespace glm\n{\n\t// fastSqrt\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastSqrt(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'fastSqrt' only accept floating-point input\");\n\n\t\treturn genType(1) / fastInverseSqrt(x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastSqrt(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastSqrt, x);\n\t}\n\n\t// fastInversesqrt\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastInverseSqrt(genType x)\n\t{\n\t\treturn detail::compute_inversesqrt<1, genType, lowp, detail::is_aligned<lowp>::value>::call(vec<1, genType, lowp>(x)).x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastInverseSqrt(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::compute_inversesqrt<L, T, Q, detail::is_aligned<Q>::value>::call(x);\n\t}\n\n\t// fastLength\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastLength(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'fastLength' only accept floating-point inputs\");\n\n\t\treturn abs(x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T fastLength(vec<L, T, Q> const& x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'fastLength' only accept floating-point inputs\");\n\n\t\treturn fastSqrt(dot(x, x));\n\t}\n\n\t// fastDistance\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastDistance(genType x, genType y)\n\t{\n\t\treturn fastLength(y - x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T fastDistance(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\treturn fastLength(y - x);\n\t}\n\n\t// fastNormalize\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType fastNormalize(genType x)\n\t{\n\t\treturn x > genType(0) ? genType(1) : -genType(1);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastNormalize(vec<L, T, Q> const& x)\n\t{\n\t\treturn x * fastInverseSqrt(dot(x, x));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/fast_trigonometry.hpp",
    "content": "/// @ref gtx_fast_trigonometry\n/// @file glm/gtx/fast_trigonometry.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_fast_trigonometry GLM_GTX_fast_trigonometry\n/// @ingroup gtx\n///\n/// Include <glm/gtx/fast_trigonometry.hpp> to use the features of this extension.\n///\n/// Fast but less accurate implementations of trigonometric functions.\n\n#pragma once\n\n// Dependency:\n#include \"../gtc/constants.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_fast_trigonometry is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_fast_trigonometry extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_fast_trigonometry\n\t/// @{\n\n\t/// Wrap an angle to [0 2pi[\n\t/// From GLM_GTX_fast_trigonometry extension.\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T wrapAngle(T angle);\n\n\t/// Faster than the common sin function but less accurate.\n\t/// From GLM_GTX_fast_trigonometry extension.\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastSin(T angle);\n\n\t/// Faster than the common cos function but less accurate.\n\t/// From GLM_GTX_fast_trigonometry extension.\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastCos(T angle);\n\n\t/// Faster than the common tan function but less accurate.\n\t/// Defined between -2pi and 2pi.\n\t/// From GLM_GTX_fast_trigonometry extension.\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastTan(T angle);\n\n\t/// Faster than the common asin function but less accurate.\n\t/// Defined between -2pi and 2pi.\n\t/// From GLM_GTX_fast_trigonometry extension.\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastAsin(T angle);\n\n\t/// Faster than the common acos function but less accurate.\n\t/// Defined between -2pi and 2pi.\n\t/// From GLM_GTX_fast_trigonometry extension.\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastAcos(T angle);\n\n\t/// Faster than the common atan function but less accurate.\n\t/// Defined between -2pi and 2pi.\n\t/// From GLM_GTX_fast_trigonometry extension.\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastAtan(T y, T x);\n\n\t/// Faster than the common atan function but less accurate.\n\t/// Defined between -2pi and 2pi.\n\t/// From GLM_GTX_fast_trigonometry extension.\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T fastAtan(T angle);\n\n\t/// @}\n}//namespace glm\n\n#include \"fast_trigonometry.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/fast_trigonometry.inl",
    "content": "/// @ref gtx_fast_trigonometry\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> taylorCos(vec<L, T, Q> const& x)\n\t{\n\t\treturn static_cast<T>(1)\n\t\t\t- (x * x) * (1.f / 2.f)\n\t\t\t+ ((x * x) * (x * x)) * (1.f / 24.f)\n\t\t\t- (((x * x) * (x * x)) * (x * x)) * (1.f / 720.f)\n\t\t\t+ (((x * x) * (x * x)) * ((x * x) * (x * x))) * (1.f / 40320.f);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T cos_52s(T x)\n\t{\n\t\tT const xx(x * x);\n\t\treturn (T(0.9999932946) + xx * (T(-0.4999124376) + xx * (T(0.0414877472) + xx * T(-0.0012712095))));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> cos_52s(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(cos_52s, x);\n\t}\n}//namespace detail\n\n\t// wrapAngle\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T wrapAngle(T angle)\n\t{\n\t\treturn abs<T>(mod<T>(angle, two_pi<T>()));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> wrapAngle(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(wrapAngle, x);\n\t}\n\n\t// cos\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastCos(T x)\n\t{\n\t\tT const angle(wrapAngle<T>(x));\n\n\t\tif(angle < half_pi<T>())\n\t\t\treturn detail::cos_52s(angle);\n\t\tif(angle < pi<T>())\n\t\t\treturn -detail::cos_52s(pi<T>() - angle);\n\t\tif(angle < (T(3) * half_pi<T>()))\n\t\t\treturn -detail::cos_52s(angle - pi<T>());\n\n\t\treturn detail::cos_52s(two_pi<T>() - angle);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastCos(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastCos, x);\n\t}\n\n\t// sin\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastSin(T x)\n\t{\n\t\treturn fastCos<T>(half_pi<T>() - x);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastSin(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastSin, x);\n\t}\n\n\t// tan\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastTan(T x)\n\t{\n\t\treturn x + (x * x * x * T(0.3333333333)) + (x * x * x * x * x * T(0.1333333333333)) + (x * x * x * x * x * x * x * T(0.0539682539));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastTan(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastTan, x);\n\t}\n\n\t// asin\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastAsin(T x)\n\t{\n\t\treturn x + (x * x * x * T(0.166666667)) + (x * x * x * x * x * T(0.075)) + (x * x * x * x * x * x * x * T(0.0446428571)) + (x * x * x * x * x * x * x * x * x * T(0.0303819444));// + (x * x * x * x * x * x * x * x * x * x * x * T(0.022372159));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastAsin(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastAsin, x);\n\t}\n\n\t// acos\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastAcos(T x)\n\t{\n\t\treturn T(1.5707963267948966192313216916398) - fastAsin(x); //(PI / 2)\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastAcos(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastAcos, x);\n\t}\n\n\t// atan\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastAtan(T y, T x)\n\t{\n\t\tT sgn = sign(y) * sign(x);\n\t\treturn abs(fastAtan(y / x)) * sgn;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastAtan(vec<L, T, Q> const& y, vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor2<vec, L, T, Q>::call(fastAtan, y, x);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T fastAtan(T x)\n\t{\n\t\treturn x - (x * x * x * T(0.333333333333)) + (x * x * x * x * x * T(0.2)) - (x * x * x * x * x * x * x * T(0.1428571429)) + (x * x * x * x * x * x * x * x * x * T(0.111111111111)) - (x * x * x * x * x * x * x * x * x * x * x * T(0.0909090909));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> fastAtan(vec<L, T, Q> const& x)\n\t{\n\t\treturn detail::functor1<vec, L, T, T, Q>::call(fastAtan, x);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/float_notmalize.inl",
    "content": "/// @ref gtx_float_normalize\n\n#include <limits>\n\nnamespace glm\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, float, Q> floatNormalize(vec<L, T, Q> const& v)\n\t{\n\t\treturn vec<L, float, Q>(v) / static_cast<float>(std::numeric_limits<T>::max());\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/functions.hpp",
    "content": "/// @ref gtx_functions\n/// @file glm/gtx/functions.hpp\n///\n/// @see core (dependence)\n/// @see gtc_quaternion (dependence)\n///\n/// @defgroup gtx_functions GLM_GTX_functions\n/// @ingroup gtx\n///\n/// Include <glm/gtx/functions.hpp> to use the features of this extension.\n///\n/// List of useful common functions.\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n#include \"../detail/qualifier.hpp\"\n#include \"../detail/type_vec2.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_functions is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_functions extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_functions\n\t/// @{\n\n\t/// 1D gauss function\n\t///\n\t/// @see gtc_epsilon\n\ttemplate<typename T>\n\tGLM_FUNC_DECL T gauss(\n\t\tT x,\n\t\tT ExpectedValue,\n\t\tT StandardDeviation);\n\n\t/// 2D gauss function\n\t///\n\t/// @see gtc_epsilon\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T gauss(\n\t\tvec<2, T, Q> const& Coord,\n\t\tvec<2, T, Q> const& ExpectedValue,\n\t\tvec<2, T, Q> const& StandardDeviation);\n\n\t/// @}\n}//namespace glm\n\n#include \"functions.inl\"\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/functions.inl",
    "content": "/// @ref gtx_functions\n\n#include \"../exponential.hpp\"\n\nnamespace glm\n{\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T gauss\n\t(\n\t\tT x,\n\t\tT ExpectedValue,\n\t\tT StandardDeviation\n\t)\n\t{\n\t\treturn exp(-((x - ExpectedValue) * (x - ExpectedValue)) / (static_cast<T>(2) * StandardDeviation * StandardDeviation)) / (StandardDeviation * sqrt(static_cast<T>(6.28318530717958647692528676655900576)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T gauss\n\t(\n\t\tvec<2, T, Q> const& Coord,\n\t\tvec<2, T, Q> const& ExpectedValue,\n\t\tvec<2, T, Q> const& StandardDeviation\n\t)\n\t{\n\t\tvec<2, T, Q> const Squared = ((Coord - ExpectedValue) * (Coord - ExpectedValue)) / (static_cast<T>(2) * StandardDeviation * StandardDeviation);\n\t\treturn exp(-(Squared.x + Squared.y));\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/gradient_paint.hpp",
    "content": "/// @ref gtx_gradient_paint\n/// @file glm/gtx/gradient_paint.hpp\n///\n/// @see core (dependence)\n/// @see gtx_optimum_pow (dependence)\n///\n/// @defgroup gtx_gradient_paint GLM_GTX_gradient_paint\n/// @ingroup gtx\n///\n/// Include <glm/gtx/gradient_paint.hpp> to use the features of this extension.\n///\n/// Functions that return the color of procedural gradient for specific coordinates.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtx/optimum_pow.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_gradient_paint is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_gradient_paint extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_gradient_paint\n\t/// @{\n\n\t/// Return a color from a radial gradient.\n\t/// @see - gtx_gradient_paint\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T radialGradient(\n\t\tvec<2, T, Q> const& Center,\n\t\tT const& Radius,\n\t\tvec<2, T, Q> const& Focal,\n\t\tvec<2, T, Q> const& Position);\n\n\t/// Return a color from a linear gradient.\n\t/// @see - gtx_gradient_paint\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T linearGradient(\n\t\tvec<2, T, Q> const& Point0,\n\t\tvec<2, T, Q> const& Point1,\n\t\tvec<2, T, Q> const& Position);\n\n\t/// @}\n}// namespace glm\n\n#include \"gradient_paint.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/gradient_paint.inl",
    "content": "/// @ref gtx_gradient_paint\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T radialGradient\n\t(\n\t\tvec<2, T, Q> const& Center,\n\t\tT const& Radius,\n\t\tvec<2, T, Q> const& Focal,\n\t\tvec<2, T, Q> const& Position\n\t)\n\t{\n\t\tvec<2, T, Q> F = Focal - Center;\n\t\tvec<2, T, Q> D = Position - Focal;\n\t\tT Radius2 = pow2(Radius);\n\t\tT Fx2 = pow2(F.x);\n\t\tT Fy2 = pow2(F.y);\n\n\t\tT Numerator = (D.x * F.x + D.y * F.y) + sqrt(Radius2 * (pow2(D.x) + pow2(D.y)) - pow2(D.x * F.y - D.y * F.x));\n\t\tT Denominator = Radius2 - (Fx2 + Fy2);\n\t\treturn Numerator / Denominator;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T linearGradient\n\t(\n\t\tvec<2, T, Q> const& Point0,\n\t\tvec<2, T, Q> const& Point1,\n\t\tvec<2, T, Q> const& Position\n\t)\n\t{\n\t\tvec<2, T, Q> Dist = Point1 - Point0;\n\t\treturn (Dist.x * (Position.x - Point0.x) + Dist.y * (Position.y - Point0.y)) / glm::dot(Dist, Dist);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/handed_coordinate_space.hpp",
    "content": "/// @ref gtx_handed_coordinate_space\n/// @file glm/gtx/handed_coordinate_space.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_handed_coordinate_space GLM_GTX_handed_coordinate_space\n/// @ingroup gtx\n///\n/// Include <glm/gtx/handed_coordinate_space.hpp> to use the features of this extension.\n///\n/// To know if a set of three basis vectors defines a right or left-handed coordinate system.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_handed_coordinate_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_handed_coordinate_space extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_handed_coordinate_space\n\t/// @{\n\n\t//! Return if a trihedron right handed or not.\n\t//! From GLM_GTX_handed_coordinate_space extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool rightHanded(\n\t\tvec<3, T, Q> const& tangent,\n\t\tvec<3, T, Q> const& binormal,\n\t\tvec<3, T, Q> const& normal);\n\n\t//! Return if a trihedron left handed or not.\n\t//! From GLM_GTX_handed_coordinate_space extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool leftHanded(\n\t\tvec<3, T, Q> const& tangent,\n\t\tvec<3, T, Q> const& binormal,\n\t\tvec<3, T, Q> const& normal);\n\n\t/// @}\n}// namespace glm\n\n#include \"handed_coordinate_space.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/handed_coordinate_space.inl",
    "content": "/// @ref gtx_handed_coordinate_space\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool rightHanded\n\t(\n\t\tvec<3, T, Q> const& tangent,\n\t\tvec<3, T, Q> const& binormal,\n\t\tvec<3, T, Q> const& normal\n\t)\n\t{\n\t\treturn dot(cross(normal, tangent), binormal) > T(0);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool leftHanded\n\t(\n\t\tvec<3, T, Q> const& tangent,\n\t\tvec<3, T, Q> const& binormal,\n\t\tvec<3, T, Q> const& normal\n\t)\n\t{\n\t\treturn dot(cross(normal, tangent), binormal) < T(0);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/hash.hpp",
    "content": "/// @ref gtx_hash\n/// @file glm/gtx/hash.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_hash GLM_GTX_hash\n/// @ingroup gtx\n///\n/// Include <glm/gtx/hash.hpp> to use the features of this extension.\n///\n/// Add std::hash support for glm types\n\n#pragma once\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_hash is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_hash extension included\")\n#\tendif\n#endif\n\n#include <functional>\n\n#include \"../vec2.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n#include \"../gtc/vec1.hpp\"\n\n#include \"../gtc/quaternion.hpp\"\n#include \"../gtx/dual_quaternion.hpp\"\n\n#include \"../mat2x2.hpp\"\n#include \"../mat2x3.hpp\"\n#include \"../mat2x4.hpp\"\n\n#include \"../mat3x2.hpp\"\n#include \"../mat3x3.hpp\"\n#include \"../mat3x4.hpp\"\n\n#include \"../mat4x2.hpp\"\n#include \"../mat4x3.hpp\"\n#include \"../mat4x4.hpp\"\n\n#if !GLM_HAS_CXX11_STL\n#\terror \"GLM_GTX_hash requires C++11 standard library support\"\n#endif\n\nnamespace std\n{\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::vec<1, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::vec<1, T, Q> const& v) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::vec<2, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::vec<2, T, Q> const& v) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::vec<3, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::vec<3, T, Q> const& v) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::vec<4, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::vec<4, T, Q> const& v) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::qua<T,Q>>\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::qua<T, Q> const& q) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::tdualquat<T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::tdualquat<T,Q> const& q) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<2, 2, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<2, 2, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<2, 3, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<2, 3, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<2, 4, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<2, 4, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<3, 2, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<3, 2, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<3, 3, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<3, 3, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<3, 4, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<3, 4, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<4, 2, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<4, 2, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<4, 3, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<4, 3, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n\n\ttemplate<typename T, glm::qualifier Q>\n\tstruct hash<glm::mat<4, 4, T,Q> >\n\t{\n\t\tGLM_FUNC_DECL size_t operator()(glm::mat<4, 4, T,Q> const& m) const GLM_NOEXCEPT;\n\t};\n} // namespace std\n\n#include \"hash.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/hash.inl",
    "content": "/// @ref gtx_hash\n\nnamespace glm {\nnamespace detail\n{\n\tGLM_INLINE void hash_combine(size_t &seed, size_t hash)\n\t{\n\t\thash += 0x9e3779b9 + (seed << 6) + (seed >> 2);\n\t\tseed ^= hash;\n\t}\n}}\n\nnamespace std\n{\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::vec<1, T, Q>>::operator()(glm::vec<1, T, Q> const& v) const GLM_NOEXCEPT\n\t{\n\t\thash<T> hasher;\n\t\treturn hasher(v.x);\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::vec<2, T, Q>>::operator()(glm::vec<2, T, Q> const& v) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<T> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(v.x));\n\t\tglm::detail::hash_combine(seed, hasher(v.y));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::vec<3, T, Q>>::operator()(glm::vec<3, T, Q> const& v) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<T> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(v.x));\n\t\tglm::detail::hash_combine(seed, hasher(v.y));\n\t\tglm::detail::hash_combine(seed, hasher(v.z));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::vec<4, T, Q>>::operator()(glm::vec<4, T, Q> const& v) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<T> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(v.x));\n\t\tglm::detail::hash_combine(seed, hasher(v.y));\n\t\tglm::detail::hash_combine(seed, hasher(v.z));\n\t\tglm::detail::hash_combine(seed, hasher(v.w));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::qua<T, Q>>::operator()(glm::qua<T,Q> const& q) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<T> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(q.x));\n\t\tglm::detail::hash_combine(seed, hasher(q.y));\n\t\tglm::detail::hash_combine(seed, hasher(q.z));\n\t\tglm::detail::hash_combine(seed, hasher(q.w));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::tdualquat<T, Q>>::operator()(glm::tdualquat<T, Q> const& q) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::qua<T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(q.real));\n\t\tglm::detail::hash_combine(seed, hasher(q.dual));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<2, 2, T, Q>>::operator()(glm::mat<2, 2, T, Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<2, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<2, 3, T, Q>>::operator()(glm::mat<2, 3, T, Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<3, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<2, 4, T, Q>>::operator()(glm::mat<2, 4, T, Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<4, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<3, 2, T, Q>>::operator()(glm::mat<3, 2, T, Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<2, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\tglm::detail::hash_combine(seed, hasher(m[2]));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<3, 3, T, Q>>::operator()(glm::mat<3, 3, T, Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<3, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\tglm::detail::hash_combine(seed, hasher(m[2]));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<3, 4, T, Q>>::operator()(glm::mat<3, 4, T, Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<4, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\tglm::detail::hash_combine(seed, hasher(m[2]));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<4, 2, T,Q>>::operator()(glm::mat<4, 2, T,Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<2, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\tglm::detail::hash_combine(seed, hasher(m[2]));\n\t\tglm::detail::hash_combine(seed, hasher(m[3]));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<4, 3, T,Q>>::operator()(glm::mat<4, 3, T,Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<3, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\tglm::detail::hash_combine(seed, hasher(m[2]));\n\t\tglm::detail::hash_combine(seed, hasher(m[3]));\n\t\treturn seed;\n\t}\n\n\ttemplate<typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER size_t hash<glm::mat<4, 4, T,Q>>::operator()(glm::mat<4, 4, T, Q> const& m) const GLM_NOEXCEPT\n\t{\n\t\tsize_t seed = 0;\n\t\thash<glm::vec<4, T, Q>> hasher;\n\t\tglm::detail::hash_combine(seed, hasher(m[0]));\n\t\tglm::detail::hash_combine(seed, hasher(m[1]));\n\t\tglm::detail::hash_combine(seed, hasher(m[2]));\n\t\tglm::detail::hash_combine(seed, hasher(m[3]));\n\t\treturn seed;\n\t}\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/integer.hpp",
    "content": "/// @ref gtx_integer\n/// @file glm/gtx/integer.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_integer GLM_GTX_integer\n/// @ingroup gtx\n///\n/// Include <glm/gtx/integer.hpp> to use the features of this extension.\n///\n/// Add support for integer for core functions\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/integer.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_integer is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_integer extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_integer\n\t/// @{\n\n\t//! Returns x raised to the y power.\n\t//! From GLM_GTX_integer extension.\n\tGLM_FUNC_DECL int pow(int x, uint y);\n\n\t//! Returns the positive square root of x.\n\t//! From GLM_GTX_integer extension.\n\tGLM_FUNC_DECL int sqrt(int x);\n\n\t//! Returns the floor log2 of x.\n\t//! From GLM_GTX_integer extension.\n\tGLM_FUNC_DECL unsigned int floor_log2(unsigned int x);\n\n\t//! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y.\n\t//! From GLM_GTX_integer extension.\n\tGLM_FUNC_DECL int mod(int x, int y);\n\n\t//! Return the factorial value of a number (!12 max, integer only)\n\t//! From GLM_GTX_integer extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType factorial(genType const& x);\n\n\t//! 32bit signed integer.\n\t//! From GLM_GTX_integer extension.\n\ttypedef signed int\t\t\t\t\tsint;\n\n\t//! Returns x raised to the y power.\n\t//! From GLM_GTX_integer extension.\n\tGLM_FUNC_DECL uint pow(uint x, uint y);\n\n\t//! Returns the positive square root of x.\n\t//! From GLM_GTX_integer extension.\n\tGLM_FUNC_DECL uint sqrt(uint x);\n\n\t//! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y.\n\t//! From GLM_GTX_integer extension.\n\tGLM_FUNC_DECL uint mod(uint x, uint y);\n\n\t//! Returns the number of leading zeros.\n\t//! From GLM_GTX_integer extension.\n\tGLM_FUNC_DECL uint nlz(uint x);\n\n\t/// @}\n}//namespace glm\n\n#include \"integer.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/integer.inl",
    "content": "/// @ref gtx_integer\n\nnamespace glm\n{\n\t// pow\n\tGLM_FUNC_QUALIFIER int pow(int x, uint y)\n\t{\n\t\tif(y == 0)\n\t\t\treturn x >= 0 ? 1 : -1;\n\n\t\tint result = x;\n\t\tfor(uint i = 1; i < y; ++i)\n\t\t\tresult *= x;\n\t\treturn result;\n\t}\n\n\t// sqrt: From Christopher J. Musial, An integer square root, Graphics Gems, 1990, page 387\n\tGLM_FUNC_QUALIFIER int sqrt(int x)\n\t{\n\t\tif(x <= 1) return x;\n\n\t\tint NextTrial = x >> 1;\n\t\tint CurrentAnswer;\n\n\t\tdo\n\t\t{\n\t\t\tCurrentAnswer = NextTrial;\n\t\t\tNextTrial = (NextTrial + x / NextTrial) >> 1;\n\t\t} while(NextTrial < CurrentAnswer);\n\n\t\treturn CurrentAnswer;\n\t}\n\n// Henry Gordon Dietz: http://aggregate.org/MAGIC/\nnamespace detail\n{\n\tGLM_FUNC_QUALIFIER unsigned int ones32(unsigned int x)\n\t{\n\t\t/* 32-bit recursive reduction using SWAR...\n\t\tbut first step is mapping 2-bit values\n\t\tinto sum of 2 1-bit values in sneaky way\n\t\t*/\n\t\tx -= ((x >> 1) & 0x55555555);\n\t\tx = (((x >> 2) & 0x33333333) + (x & 0x33333333));\n\t\tx = (((x >> 4) + x) & 0x0f0f0f0f);\n\t\tx += (x >> 8);\n\t\tx += (x >> 16);\n\t\treturn(x & 0x0000003f);\n\t}\n}//namespace detail\n\n\t// Henry Gordon Dietz: http://aggregate.org/MAGIC/\n/*\n\tGLM_FUNC_QUALIFIER unsigned int floor_log2(unsigned int x)\n\t{\n\t\tx |= (x >> 1);\n\t\tx |= (x >> 2);\n\t\tx |= (x >> 4);\n\t\tx |= (x >> 8);\n\t\tx |= (x >> 16);\n\n\t\treturn _detail::ones32(x) >> 1;\n\t}\n*/\n\t// mod\n\tGLM_FUNC_QUALIFIER int mod(int x, int y)\n\t{\n\t\treturn ((x % y) + y) % y;\n\t}\n\n\t// factorial (!12 max, integer only)\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType factorial(genType const& x)\n\t{\n\t\tgenType Temp = x;\n\t\tgenType Result;\n\t\tfor(Result = 1; Temp > 1; --Temp)\n\t\t\tResult *= Temp;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, T, Q> factorial(\n\t\tvec<2, T, Q> const& x)\n\t{\n\t\treturn vec<2, T, Q>(\n\t\t\tfactorial(x.x),\n\t\t\tfactorial(x.y));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> factorial(\n\t\tvec<3, T, Q> const& x)\n\t{\n\t\treturn vec<3, T, Q>(\n\t\t\tfactorial(x.x),\n\t\t\tfactorial(x.y),\n\t\t\tfactorial(x.z));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> factorial(\n\t\tvec<4, T, Q> const& x)\n\t{\n\t\treturn vec<4, T, Q>(\n\t\t\tfactorial(x.x),\n\t\t\tfactorial(x.y),\n\t\t\tfactorial(x.z),\n\t\t\tfactorial(x.w));\n\t}\n\n\tGLM_FUNC_QUALIFIER uint pow(uint x, uint y)\n\t{\n\t\tif (y == 0)\n\t\t\treturn 1u;\n\n\t\tuint result = x;\n\t\tfor(uint i = 1; i < y; ++i)\n\t\t\tresult *= x;\n\t\treturn result;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint sqrt(uint x)\n\t{\n\t\tif(x <= 1) return x;\n\n\t\tuint NextTrial = x >> 1;\n\t\tuint CurrentAnswer;\n\n\t\tdo\n\t\t{\n\t\t\tCurrentAnswer = NextTrial;\n\t\t\tNextTrial = (NextTrial + x / NextTrial) >> 1;\n\t\t} while(NextTrial < CurrentAnswer);\n\n\t\treturn CurrentAnswer;\n\t}\n\n\tGLM_FUNC_QUALIFIER uint mod(uint x, uint y)\n\t{\n\t\treturn x - y * (x / y);\n\t}\n\n#if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_GCC))\n\n\tGLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x)\n\t{\n\t\treturn 31u - findMSB(x);\n\t}\n\n#else\n\n\t// Hackers Delight: http://www.hackersdelight.org/HDcode/nlz.c.txt\n\tGLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x)\n\t{\n\t\tint y, m, n;\n\n\t\ty = -int(x >> 16);      // If left half of x is 0,\n\t\tm = (y >> 16) & 16;  // set n = 16.  If left half\n\t\tn = 16 - m;          // is nonzero, set n = 0 and\n\t\tx = x >> m;          // shift x right 16.\n\t\t\t\t\t\t\t// Now x is of the form 0000xxxx.\n\t\ty = x - 0x100;       // If positions 8-15 are 0,\n\t\tm = (y >> 16) & 8;   // add 8 to n and shift x left 8.\n\t\tn = n + m;\n\t\tx = x << m;\n\n\t\ty = x - 0x1000;      // If positions 12-15 are 0,\n\t\tm = (y >> 16) & 4;   // add 4 to n and shift x left 4.\n\t\tn = n + m;\n\t\tx = x << m;\n\n\t\ty = x - 0x4000;      // If positions 14-15 are 0,\n\t\tm = (y >> 16) & 2;   // add 2 to n and shift x left 2.\n\t\tn = n + m;\n\t\tx = x << m;\n\n\t\ty = x >> 14;         // Set y = 0, 1, 2, or 3.\n\t\tm = y & ~(y >> 1);   // Set m = 0, 1, 2, or 2 resp.\n\t\treturn unsigned(n + 2 - m);\n\t}\n\n#endif//(GLM_COMPILER)\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/intersect.hpp",
    "content": "/// @ref gtx_intersect\n/// @file glm/gtx/intersect.hpp\n///\n/// @see core (dependence)\n/// @see gtx_closest_point (dependence)\n///\n/// @defgroup gtx_intersect GLM_GTX_intersect\n/// @ingroup gtx\n///\n/// Include <glm/gtx/intersect.hpp> to use the features of this extension.\n///\n/// Add intersection functions\n\n#pragma once\n\n// Dependency:\n#include <cfloat>\n#include <limits>\n#include \"../glm.hpp\"\n#include \"../geometric.hpp\"\n#include \"../gtx/closest_point.hpp\"\n#include \"../gtx/vector_query.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_closest_point extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_intersect\n\t/// @{\n\n\t//! Compute the intersection of a ray and a plane.\n\t//! Ray direction and plane normal must be unit length.\n\t//! From GLM_GTX_intersect extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL bool intersectRayPlane(\n\t\tgenType const& orig, genType const& dir,\n\t\tgenType const& planeOrig, genType const& planeNormal,\n\t\ttypename genType::value_type & intersectionDistance);\n\n\t//! Compute the intersection of a ray and a triangle.\n\t/// Based om Tomas Möller implementation http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/raytri/\n\t//! From GLM_GTX_intersect extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool intersectRayTriangle(\n\t\tvec<3, T, Q> const& orig, vec<3, T, Q> const& dir,\n\t\tvec<3, T, Q> const& v0, vec<3, T, Q> const& v1, vec<3, T, Q> const& v2,\n\t\tvec<2, T, Q>& baryPosition, T& distance);\n\n\t//! Compute the intersection of a line and a triangle.\n\t//! From GLM_GTX_intersect extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL bool intersectLineTriangle(\n\t\tgenType const& orig, genType const& dir,\n\t\tgenType const& vert0, genType const& vert1, genType const& vert2,\n\t\tgenType & position);\n\n\t//! Compute the intersection distance of a ray and a sphere.\n\t//! The ray direction vector is unit length.\n\t//! From GLM_GTX_intersect extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL bool intersectRaySphere(\n\t\tgenType const& rayStarting, genType const& rayNormalizedDirection,\n\t\tgenType const& sphereCenter, typename genType::value_type const sphereRadiusSquared,\n\t\ttypename genType::value_type & intersectionDistance);\n\n\t//! Compute the intersection of a ray and a sphere.\n\t//! From GLM_GTX_intersect extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL bool intersectRaySphere(\n\t\tgenType const& rayStarting, genType const& rayNormalizedDirection,\n\t\tgenType const& sphereCenter, const typename genType::value_type sphereRadius,\n\t\tgenType & intersectionPosition, genType & intersectionNormal);\n\n\t//! Compute the intersection of a line and a sphere.\n\t//! From GLM_GTX_intersect extension\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL bool intersectLineSphere(\n\t\tgenType const& point0, genType const& point1,\n\t\tgenType const& sphereCenter, typename genType::value_type sphereRadius,\n\t\tgenType & intersectionPosition1, genType & intersectionNormal1,\n\t\tgenType & intersectionPosition2 = genType(), genType & intersectionNormal2 = genType());\n\n\t/// @}\n}//namespace glm\n\n#include \"intersect.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/intersect.inl",
    "content": "/// @ref gtx_intersect\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER bool intersectRayPlane\n\t(\n\t\tgenType const& orig, genType const& dir,\n\t\tgenType const& planeOrig, genType const& planeNormal,\n\t\ttypename genType::value_type & intersectionDistance\n\t)\n\t{\n\t\ttypename genType::value_type d = glm::dot(dir, planeNormal);\n\t\ttypename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();\n\n\t\tif(glm::abs(d) > Epsilon)  // if dir and planeNormal are not perpendicular\n\t\t{\n\t\t\ttypename genType::value_type const tmp_intersectionDistance = \tglm::dot(planeOrig - orig, planeNormal) / d;\n\t\t\tif (tmp_intersectionDistance > static_cast<typename genType::value_type>(0)) { // allow only intersections\n\t\t\t\tintersectionDistance = tmp_intersectionDistance;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool intersectRayTriangle\n\t(\n\t\tvec<3, T, Q> const& orig, vec<3, T, Q> const& dir,\n\t\tvec<3, T, Q> const& vert0, vec<3, T, Q> const& vert1, vec<3, T, Q> const& vert2,\n\t\tvec<2, T, Q>& baryPosition, T& distance\n\t)\n\t{\n\t\t// find vectors for two edges sharing vert0\n\t\tvec<3, T, Q> const edge1 = vert1 - vert0;\n\t\tvec<3, T, Q> const edge2 = vert2 - vert0;\n\n\t\t// begin calculating determinant - also used to calculate U parameter\n\t\tvec<3, T, Q> const p = glm::cross(dir, edge2);\n\n\t\t// if determinant is near zero, ray lies in plane of triangle\n\t\tT const det = glm::dot(edge1, p);\n\n\t\tvec<3, T, Q> Perpendicular(0);\n\n\t\tif(det > std::numeric_limits<T>::epsilon())\n\t\t{\n\t\t\t// calculate distance from vert0 to ray origin\n\t\t\tvec<3, T, Q> const dist = orig - vert0;\n\n\t\t\t// calculate U parameter and test bounds\n\t\t\tbaryPosition.x = glm::dot(dist, p);\n\t\t\tif(baryPosition.x < static_cast<T>(0) || baryPosition.x > det)\n\t\t\t\treturn false;\n\n\t\t\t// prepare to test V parameter\n\t\t\tPerpendicular = glm::cross(dist, edge1);\n\n\t\t\t// calculate V parameter and test bounds\n\t\t\tbaryPosition.y = glm::dot(dir, Perpendicular);\n\t\t\tif((baryPosition.y < static_cast<T>(0)) || ((baryPosition.x + baryPosition.y) > det))\n\t\t\t\treturn false;\n\t\t}\n\t\telse if(det < -std::numeric_limits<T>::epsilon())\n\t\t{\n\t\t\t// calculate distance from vert0 to ray origin\n\t\t\tvec<3, T, Q> const dist = orig - vert0;\n\n\t\t\t// calculate U parameter and test bounds\n\t\t\tbaryPosition.x = glm::dot(dist, p);\n\t\t\tif((baryPosition.x > static_cast<T>(0)) || (baryPosition.x < det))\n\t\t\t\treturn false;\n\n\t\t\t// prepare to test V parameter\n\t\t\tPerpendicular = glm::cross(dist, edge1);\n\n\t\t\t// calculate V parameter and test bounds\n\t\t\tbaryPosition.y = glm::dot(dir, Perpendicular);\n\t\t\tif((baryPosition.y > static_cast<T>(0)) || (baryPosition.x + baryPosition.y < det))\n\t\t\t\treturn false;\n\t\t}\n\t\telse\n\t\t\treturn false; // ray is parallel to the plane of the triangle\n\n\t\tT inv_det = static_cast<T>(1) / det;\n\n\t\t// calculate distance, ray intersects triangle\n\t\tdistance = glm::dot(edge2, Perpendicular) * inv_det;\n\t\tbaryPosition *= inv_det;\n\n\t\treturn true;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER bool intersectLineTriangle\n\t(\n\t\tgenType const& orig, genType const& dir,\n\t\tgenType const& vert0, genType const& vert1, genType const& vert2,\n\t\tgenType & position\n\t)\n\t{\n\t\ttypename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();\n\n\t\tgenType edge1 = vert1 - vert0;\n\t\tgenType edge2 = vert2 - vert0;\n\n\t\tgenType Perpendicular = cross(dir, edge2);\n\n\t\ttypename genType::value_type det = dot(edge1, Perpendicular);\n\n\t\tif (det > -Epsilon && det < Epsilon)\n\t\t\treturn false;\n\t\ttypename genType::value_type inv_det = typename genType::value_type(1) / det;\n\n\t\tgenType Tangent = orig - vert0;\n\n\t\tposition.y = dot(Tangent, Perpendicular) * inv_det;\n\t\tif (position.y < typename genType::value_type(0) || position.y > typename genType::value_type(1))\n\t\t\treturn false;\n\n\t\tgenType Cotangent = cross(Tangent, edge1);\n\n\t\tposition.z = dot(dir, Cotangent) * inv_det;\n\t\tif (position.z < typename genType::value_type(0) || position.y + position.z > typename genType::value_type(1))\n\t\t\treturn false;\n\n\t\tposition.x = dot(edge2, Cotangent) * inv_det;\n\n\t\treturn true;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER bool intersectRaySphere\n\t(\n\t\tgenType const& rayStarting, genType const& rayNormalizedDirection,\n\t\tgenType const& sphereCenter, const typename genType::value_type sphereRadiusSquared,\n\t\ttypename genType::value_type & intersectionDistance\n\t)\n\t{\n\t\ttypename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();\n\t\tgenType diff = sphereCenter - rayStarting;\n\t\ttypename genType::value_type t0 = dot(diff, rayNormalizedDirection);\n\t\ttypename genType::value_type dSquared = dot(diff, diff) - t0 * t0;\n\t\tif( dSquared > sphereRadiusSquared )\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\ttypename genType::value_type t1 = sqrt( sphereRadiusSquared - dSquared );\n\t\tintersectionDistance = t0 > t1 + Epsilon ? t0 - t1 : t0 + t1;\n\t\treturn intersectionDistance > Epsilon;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER bool intersectRaySphere\n\t(\n\t\tgenType const& rayStarting, genType const& rayNormalizedDirection,\n\t\tgenType const& sphereCenter, const typename genType::value_type sphereRadius,\n\t\tgenType & intersectionPosition, genType & intersectionNormal\n\t)\n\t{\n\t\ttypename genType::value_type distance;\n\t\tif( intersectRaySphere( rayStarting, rayNormalizedDirection, sphereCenter, sphereRadius * sphereRadius, distance ) )\n\t\t{\n\t\t\tintersectionPosition = rayStarting + rayNormalizedDirection * distance;\n\t\t\tintersectionNormal = (intersectionPosition - sphereCenter) / sphereRadius;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER bool intersectLineSphere\n\t(\n\t\tgenType const& point0, genType const& point1,\n\t\tgenType const& sphereCenter, typename genType::value_type sphereRadius,\n\t\tgenType & intersectionPoint1, genType & intersectionNormal1,\n\t\tgenType & intersectionPoint2, genType & intersectionNormal2\n\t)\n\t{\n\t\ttypename genType::value_type Epsilon = std::numeric_limits<typename genType::value_type>::epsilon();\n\t\tgenType dir = normalize(point1 - point0);\n\t\tgenType diff = sphereCenter - point0;\n\t\ttypename genType::value_type t0 = dot(diff, dir);\n\t\ttypename genType::value_type dSquared = dot(diff, diff) - t0 * t0;\n\t\tif( dSquared > sphereRadius * sphereRadius )\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\ttypename genType::value_type t1 = sqrt( sphereRadius * sphereRadius - dSquared );\n\t\tif( t0 < t1 + Epsilon )\n\t\t\tt1 = -t1;\n\t\tintersectionPoint1 = point0 + dir * (t0 - t1);\n\t\tintersectionNormal1 = (intersectionPoint1 - sphereCenter) / sphereRadius;\n\t\tintersectionPoint2 = point0 + dir * (t0 + t1);\n\t\tintersectionNormal2 = (intersectionPoint2 - sphereCenter) / sphereRadius;\n\t\treturn true;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/io.hpp",
    "content": "/// @ref gtx_io\n/// @file glm/gtx/io.hpp\n/// @author Jan P Springer (regnirpsj@gmail.com)\n///\n/// @see core (dependence)\n/// @see gtc_matrix_access (dependence)\n/// @see gtc_quaternion (dependence)\n///\n/// @defgroup gtx_io GLM_GTX_io\n/// @ingroup gtx\n///\n/// Include <glm/gtx/io.hpp> to use the features of this extension.\n///\n/// std::[w]ostream support for glm types\n///\n/// std::[w]ostream support for glm types + qualifier/width/etc. manipulators\n/// based on howard hinnant's std::chrono io proposal\n/// [http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html]\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtx/quaternion.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_io is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_io extension included\")\n#\tendif\n#endif\n\n#include <iosfwd>  // std::basic_ostream<> (fwd)\n#include <locale>  // std::locale, std::locale::facet, std::locale::id\n#include <utility> // std::pair<>\n\nnamespace glm\n{\n\t/// @addtogroup gtx_io\n\t/// @{\n\n\tnamespace io\n\t{\n\t\tenum order_type { column_major, row_major};\n\n\t\ttemplate<typename CTy>\n\t\tclass format_punct : public std::locale::facet\n\t\t{\n\t\t\ttypedef CTy char_type;\n\n\t\tpublic:\n\n\t\t\tstatic std::locale::id id;\n\n\t\t\tbool       formatted;\n\t\t\tunsigned   precision;\n\t\t\tunsigned   width;\n\t\t\tchar_type  separator;\n\t\t\tchar_type  delim_left;\n\t\t\tchar_type  delim_right;\n\t\t\tchar_type  space;\n\t\t\tchar_type  newline;\n\t\t\torder_type order;\n\n\t\t\tGLM_FUNC_DECL explicit format_punct(size_t a = 0);\n\t\t\tGLM_FUNC_DECL explicit format_punct(format_punct const&);\n\t\t};\n\n\t\ttemplate<typename CTy, typename CTr = std::char_traits<CTy> >\n\t\tclass basic_state_saver {\n\n\t\tpublic:\n\n\t\t\tGLM_FUNC_DECL explicit basic_state_saver(std::basic_ios<CTy,CTr>&);\n\t\t\tGLM_FUNC_DECL ~basic_state_saver();\n\n\t\tprivate:\n\n\t\t\ttypedef ::std::basic_ios<CTy,CTr>      state_type;\n\t\t\ttypedef typename state_type::char_type char_type;\n\t\t\ttypedef ::std::ios_base::fmtflags      flags_type;\n\t\t\ttypedef ::std::streamsize              streamsize_type;\n\t\t\ttypedef ::std::locale const            locale_type;\n\n\t\t\tstate_type&     state_;\n\t\t\tflags_type      flags_;\n\t\t\tstreamsize_type precision_;\n\t\t\tstreamsize_type width_;\n\t\t\tchar_type       fill_;\n\t\t\tlocale_type     locale_;\n\n\t\t\tGLM_FUNC_DECL basic_state_saver& operator=(basic_state_saver const&);\n\t\t};\n\n\t\ttypedef basic_state_saver<char>     state_saver;\n\t\ttypedef basic_state_saver<wchar_t> wstate_saver;\n\n\t\ttemplate<typename CTy, typename CTr = std::char_traits<CTy> >\n\t\tclass basic_format_saver\n\t\t{\n\t\tpublic:\n\n\t\t\tGLM_FUNC_DECL explicit basic_format_saver(std::basic_ios<CTy,CTr>&);\n\t\t\tGLM_FUNC_DECL ~basic_format_saver();\n\n\t\tprivate:\n\n\t\t\tbasic_state_saver<CTy> const bss_;\n\n\t\t\tGLM_FUNC_DECL basic_format_saver& operator=(basic_format_saver const&);\n\t\t};\n\n\t\ttypedef basic_format_saver<char>     format_saver;\n\t\ttypedef basic_format_saver<wchar_t> wformat_saver;\n\n\t\tstruct precision\n\t\t{\n\t\t\tunsigned value;\n\n\t\t\tGLM_FUNC_DECL explicit precision(unsigned);\n\t\t};\n\n\t\tstruct width\n\t\t{\n\t\t\tunsigned value;\n\n\t\t\tGLM_FUNC_DECL explicit width(unsigned);\n\t\t};\n\n\t\ttemplate<typename CTy>\n\t\tstruct delimeter\n\t\t{\n\t\t\tCTy value[3];\n\n\t\t\tGLM_FUNC_DECL explicit delimeter(CTy /* left */, CTy /* right */, CTy /* separator */ = ',');\n\t\t};\n\n\t\tstruct order\n\t\t{\n\t\t\torder_type value;\n\n\t\t\tGLM_FUNC_DECL explicit order(order_type);\n\t\t};\n\n\t\t// functions, inlined (inline)\n\n\t\ttemplate<typename FTy, typename CTy, typename CTr>\n\t\tFTy const& get_facet(std::basic_ios<CTy,CTr>&);\n\t\ttemplate<typename FTy, typename CTy, typename CTr>\n\t\tstd::basic_ios<CTy,CTr>& formatted(std::basic_ios<CTy,CTr>&);\n\t\ttemplate<typename FTy, typename CTy, typename CTr>\n\t\tstd::basic_ios<CTy,CTr>& unformatted(std::basic_ios<CTy,CTr>&);\n\n\t\ttemplate<typename CTy, typename CTr>\n\t\tstd::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, precision const&);\n\t\ttemplate<typename CTy, typename CTr>\n\t\tstd::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, width const&);\n\t\ttemplate<typename CTy, typename CTr>\n\t\tstd::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, delimeter<CTy> const&);\n\t\ttemplate<typename CTy, typename CTr>\n\t\tstd::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>&, order const&);\n\t}//namespace io\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, qua<T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, vec<1, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, vec<2, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, vec<3, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, vec<4, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<2, 2, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<2, 3, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<2, 4, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<3, 2, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<3, 3, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<3, 4, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<4, 2, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<4, 3, T, Q> const&);\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>&, mat<4, 4, T, Q> const&);\n\n  template<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_DECL std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr> &,\n                                                         std::pair<mat<4, 4, T, Q> const, mat<4, 4, T, Q> const> const&);\n\n\t/// @}\n}//namespace glm\n\n#include \"io.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/io.inl",
    "content": "/// @ref gtx_io\n/// @author Jan P Springer (regnirpsj@gmail.com)\n\n#include <iomanip>                  // std::fixed, std::setfill<>, std::setprecision, std::right, std::setw\n#include <ostream>                  // std::basic_ostream<>\n#include \"../gtc/matrix_access.hpp\" // glm::col, glm::row\n#include \"../gtx/type_trait.hpp\"    // glm::type<>\n\nnamespace glm{\nnamespace io\n{\n\ttemplate<typename CTy>\n\tGLM_FUNC_QUALIFIER format_punct<CTy>::format_punct(size_t a)\n\t\t: std::locale::facet(a)\n\t\t, formatted(true)\n\t\t, precision(3)\n\t\t, width(1 + 4 + 1 + precision)\n\t\t, separator(',')\n\t\t, delim_left('[')\n\t\t, delim_right(']')\n\t\t, space(' ')\n\t\t, newline('\\n')\n\t\t, order(column_major)\n\t{}\n\n\ttemplate<typename CTy>\n\tGLM_FUNC_QUALIFIER format_punct<CTy>::format_punct(format_punct const& a)\n\t\t: std::locale::facet(0)\n\t\t, formatted(a.formatted)\n\t\t, precision(a.precision)\n\t\t, width(a.width)\n\t\t, separator(a.separator)\n\t\t, delim_left(a.delim_left)\n\t\t, delim_right(a.delim_right)\n\t\t, space(a.space)\n\t\t, newline(a.newline)\n\t\t, order(a.order)\n\t{}\n\n\ttemplate<typename CTy> std::locale::id format_punct<CTy>::id;\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER basic_state_saver<CTy, CTr>::basic_state_saver(std::basic_ios<CTy, CTr>& a)\n\t\t: state_(a)\n\t\t, flags_(a.flags())\n\t\t, precision_(a.precision())\n\t\t, width_(a.width())\n\t\t, fill_(a.fill())\n\t\t, locale_(a.getloc())\n\t{}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER basic_state_saver<CTy, CTr>::~basic_state_saver()\n\t{\n\t\tstate_.imbue(locale_);\n\t\tstate_.fill(fill_);\n\t\tstate_.width(width_);\n\t\tstate_.precision(precision_);\n\t\tstate_.flags(flags_);\n\t}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER basic_format_saver<CTy, CTr>::basic_format_saver(std::basic_ios<CTy, CTr>& a)\n\t\t: bss_(a)\n\t{\n\t\ta.imbue(std::locale(a.getloc(), new format_punct<CTy>(get_facet<format_punct<CTy> >(a))));\n\t}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER\n\tbasic_format_saver<CTy, CTr>::~basic_format_saver()\n\t{}\n\n\tGLM_FUNC_QUALIFIER precision::precision(unsigned a)\n\t\t: value(a)\n\t{}\n\n\tGLM_FUNC_QUALIFIER width::width(unsigned a)\n\t\t: value(a)\n\t{}\n\n\ttemplate<typename CTy>\n\tGLM_FUNC_QUALIFIER delimeter<CTy>::delimeter(CTy a, CTy b, CTy c)\n\t\t: value()\n\t{\n\t\tvalue[0] = a;\n\t\tvalue[1] = b;\n\t\tvalue[2] = c;\n\t}\n\n\tGLM_FUNC_QUALIFIER order::order(order_type a)\n\t\t: value(a)\n\t{}\n\n\ttemplate<typename FTy, typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER FTy const& get_facet(std::basic_ios<CTy, CTr>& ios)\n\t{\n\t\tif(!std::has_facet<FTy>(ios.getloc()))\n\t\t\tios.imbue(std::locale(ios.getloc(), new FTy));\n\n\t\treturn std::use_facet<FTy>(ios.getloc());\n\t}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER std::basic_ios<CTy, CTr>& formatted(std::basic_ios<CTy, CTr>& ios)\n\t{\n\t\tconst_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(ios)).formatted = true;\n\t\treturn ios;\n\t}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER std::basic_ios<CTy, CTr>& unformatted(std::basic_ios<CTy, CTr>& ios)\n\t{\n\t\tconst_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(ios)).formatted = false;\n\t\treturn ios;\n\t}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, precision const& a)\n\t{\n\t\tconst_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(os)).precision = a.value;\n\t\treturn os;\n\t}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, width const& a)\n\t{\n\t\tconst_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(os)).width = a.value;\n\t\treturn os;\n\t}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER  std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, delimeter<CTy> const& a)\n\t{\n\t\tformat_punct<CTy> & fmt(const_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(os)));\n\n\t\tfmt.delim_left  = a.value[0];\n\t\tfmt.delim_right = a.value[1];\n\t\tfmt.separator   = a.value[2];\n\n\t\treturn os;\n\t}\n\n\ttemplate<typename CTy, typename CTr>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(std::basic_ostream<CTy, CTr>& os, order const& a)\n\t{\n\t\tconst_cast<format_punct<CTy>&>(get_facet<format_punct<CTy> >(os)).order = a.value;\n\t\treturn os;\n\t}\n} // namespace io\n\nnamespace detail\n{\n\ttemplate<typename CTy, typename CTr, typename V>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>&\n\tprint_vector_on(std::basic_ostream<CTy, CTr>& os, V const& a)\n\t{\n\t\ttypename std::basic_ostream<CTy, CTr>::sentry const cerberus(os);\n\n\t\tif(cerberus)\n\t\t{\n\t\t\tio::format_punct<CTy> const& fmt(io::get_facet<io::format_punct<CTy> >(os));\n\n\t\t\tlength_t const& components(type<V>::components);\n\n\t\t\tif(fmt.formatted)\n\t\t\t{\n\t\t\t\tio::basic_state_saver<CTy> const bss(os);\n\n\t\t\t\tos << std::fixed << std::right << std::setprecision(fmt.precision) << std::setfill(fmt.space) << fmt.delim_left;\n\n\t\t\t\tfor(length_t i(0); i < components; ++i)\n\t\t\t\t{\n\t\t\t\t\tos << std::setw(fmt.width) << a[i];\n\t\t\t\t\tif(components-1 != i)\n\t\t\t\t\t\tos << fmt.separator;\n\t\t\t\t}\n\n\t\t\t\tos << fmt.delim_right;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tfor(length_t i(0); i < components; ++i)\n\t\t\t\t{\n\t\t\t\t\tos << a[i];\n\n\t\t\t\t\tif(components-1 != i)\n\t\t\t\t\t\tos << fmt.space;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn os;\n\t}\n}//namespace detail\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, qua<T, Q> const& a)\n\t{\n\t\treturn detail::print_vector_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, vec<1, T, Q> const& a)\n\t{\n\t\treturn detail::print_vector_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, vec<2, T, Q> const& a)\n\t{\n\t\treturn detail::print_vector_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, vec<3, T, Q> const& a)\n\t{\n\t\treturn detail::print_vector_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, vec<4, T, Q> const& a)\n\t{\n\t\treturn detail::print_vector_on(os, a);\n\t}\n\nnamespace detail\n{\n\ttemplate<typename CTy, typename CTr, template<length_t, length_t, typename, qualifier> class M, length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& print_matrix_on(std::basic_ostream<CTy, CTr>& os, M<C, R, T, Q> const& a)\n\t{\n\t\ttypename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);\n\n\t\tif(cerberus)\n\t\t{\n\t\t\tio::format_punct<CTy> const& fmt(io::get_facet<io::format_punct<CTy> >(os));\n\n\t\t\tlength_t const& cols(type<M<C, R, T, Q> >::cols);\n\t\t\tlength_t const& rows(type<M<C, R, T, Q> >::rows);\n\n\t\t\tif(fmt.formatted)\n\t\t\t{\n\t\t\t\tos << fmt.newline << fmt.delim_left;\n\n\t\t\t\tswitch(fmt.order)\n\t\t\t\t{\n\t\t\t\t\tcase io::column_major:\n\t\t\t\t\t{\n\t\t\t\t\t\tfor(length_t i(0); i < rows; ++i)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif (0 != i)\n\t\t\t\t\t\t\t\tos << fmt.space;\n\n\t\t\t\t\t\t\tos << row(a, i);\n\n\t\t\t\t\t\t\tif(rows-1 != i)\n\t\t\t\t\t\t\t\tos << fmt.newline;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase io::row_major:\n\t\t\t\t\t{\n\t\t\t\t\t\tfor(length_t i(0); i < cols; ++i)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(0 != i)\n\t\t\t\t\t\t\t\tos << fmt.space;\n\n\t\t\t\t\t\t\tos << column(a, i);\n\n\t\t\t\t\t\t\tif(cols-1 != i)\n\t\t\t\t\t\t\t\tos << fmt.newline;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tos << fmt.delim_right;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tswitch (fmt.order)\n\t\t\t\t{\n\t\t\t\t\tcase io::column_major:\n\t\t\t\t\t{\n\t\t\t\t\t\tfor(length_t i(0); i < cols; ++i)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tos << column(a, i);\n\n\t\t\t\t\t\t\tif(cols - 1 != i)\n\t\t\t\t\t\t\t\tos << fmt.space;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase io::row_major:\n\t\t\t\t\t{\n\t\t\t\t\t\tfor (length_t i(0); i < rows; ++i)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tos << row(a, i);\n\n\t\t\t\t\t\t\tif (rows-1 != i)\n\t\t\t\t\t\t\t\tos << fmt.space;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn os;\n\t}\n}//namespace detail\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<2, 2, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<2, 3, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<2, 4, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<3, 2, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, mat<3, 3, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, mat<3, 4, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, mat<4, 2, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, mat<4, 3, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy,CTr> & operator<<(std::basic_ostream<CTy,CTr>& os, mat<4, 4, T, Q> const& a)\n\t{\n\t\treturn detail::print_matrix_on(os, a);\n\t}\n\nnamespace detail\n{\n\ttemplate<typename CTy, typename CTr, template<length_t, length_t, typename, qualifier> class M, length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& print_matrix_pair_on(std::basic_ostream<CTy, CTr>& os, std::pair<M<C, R, T, Q> const, M<C, R, T, Q> const> const& a)\n\t{\n\t\ttypename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);\n\n\t\tif(cerberus)\n\t\t{\n\t\t\tio::format_punct<CTy> const& fmt(io::get_facet<io::format_punct<CTy> >(os));\n\t\t\tM<C, R, T, Q> const& ml(a.first);\n\t\t\tM<C, R, T, Q> const& mr(a.second);\n\t\t\tlength_t const& cols(type<M<C, R, T, Q> >::cols);\n\t\t\tlength_t const& rows(type<M<C, R, T, Q> >::rows);\n\n\t\t\tif(fmt.formatted)\n\t\t\t{\n\t\t\t\tos << fmt.newline << fmt.delim_left;\n\n\t\t\t\tswitch(fmt.order)\n\t\t\t\t{\n\t\t\t\t\tcase io::column_major:\n\t\t\t\t\t{\n\t\t\t\t\t\tfor(length_t i(0); i < rows; ++i)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(0 != i)\n\t\t\t\t\t\t\t\tos << fmt.space;\n\n\t\t\t\t\t\t\tos << row(ml, i) << ((rows-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << row(mr, i);\n\n\t\t\t\t\t\t\tif(rows-1 != i)\n\t\t\t\t\t\t\t\tos << fmt.newline;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t\tcase io::row_major:\n\t\t\t\t\t{\n\t\t\t\t\t\tfor(length_t i(0); i < cols; ++i)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif(0 != i)\n\t\t\t\t\t\t\t\tos << fmt.space;\n\n\t\t\t\t\t\t\tos << column(ml, i) << ((cols-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << column(mr, i);\n\n\t\t\t\t\t\t\tif(cols-1 != i)\n\t\t\t\t\t\t\t\tos << fmt.newline;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tos << fmt.delim_right;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tos << ml << fmt.space << mr;\n\t\t\t}\n\t\t}\n\n\t\treturn os;\n\t}\n}//namespace detail\n\n\ttemplate<typename CTy, typename CTr, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER std::basic_ostream<CTy, CTr>& operator<<(\n\t\tstd::basic_ostream<CTy, CTr> & os,\n\t\tstd::pair<mat<4, 4, T, Q> const,\n\t\tmat<4, 4, T, Q> const> const& a)\n\t{\n\t\treturn detail::print_matrix_pair_on(os, a);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/log_base.hpp",
    "content": "/// @ref gtx_log_base\n/// @file glm/gtx/log_base.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_log_base GLM_GTX_log_base\n/// @ingroup gtx\n///\n/// Include <glm/gtx/log_base.hpp> to use the features of this extension.\n///\n/// Logarithm for any base. base can be a vector or a scalar.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_log_base is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_log_base extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_log_base\n\t/// @{\n\n\t/// Logarithm for any base.\n\t/// From GLM_GTX_log_base.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType log(\n\t\tgenType const& x,\n\t\tgenType const& base);\n\n\t/// Logarithm for any base.\n\t/// From GLM_GTX_log_base.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> sign(\n\t\tvec<L, T, Q> const& x,\n\t\tvec<L, T, Q> const& base);\n\n\t/// @}\n}//namespace glm\n\n#include \"log_base.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/log_base.inl",
    "content": "/// @ref gtx_log_base\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType log(genType const& x, genType const& base)\n\t{\n\t\treturn glm::log(x) / glm::log(base);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, T, Q> log(vec<L, T, Q> const& x, vec<L, T, Q> const& base)\n\t{\n\t\treturn glm::log(x) / glm::log(base);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/matrix_cross_product.hpp",
    "content": "/// @ref gtx_matrix_cross_product\n/// @file glm/gtx/matrix_cross_product.hpp\n///\n/// @see core (dependence)\n/// @see gtx_extented_min_max (dependence)\n///\n/// @defgroup gtx_matrix_cross_product GLM_GTX_matrix_cross_product\n/// @ingroup gtx\n///\n/// Include <glm/gtx/matrix_cross_product.hpp> to use the features of this extension.\n///\n/// Build cross product matrices\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_cross_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_cross_product extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_matrix_cross_product\n\t/// @{\n\n\t//! Build a cross product matrix.\n\t//! From GLM_GTX_matrix_cross_product extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> matrixCross3(\n\t\tvec<3, T, Q> const& x);\n\n\t//! Build a cross product matrix.\n\t//! From GLM_GTX_matrix_cross_product extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> matrixCross4(\n\t\tvec<3, T, Q> const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_cross_product.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/matrix_cross_product.inl",
    "content": "/// @ref gtx_matrix_cross_product\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> matrixCross3\n\t(\n\t\tvec<3, T, Q> const& x\n\t)\n\t{\n\t\tmat<3, 3, T, Q> Result(T(0));\n\t\tResult[0][1] = x.z;\n\t\tResult[1][0] = -x.z;\n\t\tResult[0][2] = -x.y;\n\t\tResult[2][0] = x.y;\n\t\tResult[1][2] = x.x;\n\t\tResult[2][1] = -x.x;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> matrixCross4\n\t(\n\t\tvec<3, T, Q> const& x\n\t)\n\t{\n\t\tmat<4, 4, T, Q> Result(T(0));\n\t\tResult[0][1] = x.z;\n\t\tResult[1][0] = -x.z;\n\t\tResult[0][2] = -x.y;\n\t\tResult[2][0] = x.y;\n\t\tResult[1][2] = x.x;\n\t\tResult[2][1] = -x.x;\n\t\treturn Result;\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/matrix_decompose.hpp",
    "content": "/// @ref gtx_matrix_decompose\n/// @file glm/gtx/matrix_decompose.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_matrix_decompose GLM_GTX_matrix_decompose\n/// @ingroup gtx\n///\n/// Include <glm/gtx/matrix_decompose.hpp> to use the features of this extension.\n///\n/// Decomposes a model matrix to translations, rotation and scale components\n\n#pragma once\n\n// Dependencies\n#include \"../mat4x4.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n#include \"../geometric.hpp\"\n#include \"../gtc/quaternion.hpp\"\n#include \"../gtc/matrix_transform.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_decompose is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_decompose extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_matrix_decompose\n\t/// @{\n\n\t/// Decomposes a model matrix to translations, rotation and scale components\n\t/// @see gtx_matrix_decompose\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool decompose(\n\t\tmat<4, 4, T, Q> const& modelMatrix,\n\t\tvec<3, T, Q> & scale, qua<T, Q> & orientation, vec<3, T, Q> & translation, vec<3, T, Q> & skew, vec<4, T, Q> & perspective);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_decompose.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/matrix_decompose.inl",
    "content": "/// @ref gtx_matrix_decompose\n\n#include \"../gtc/constants.hpp\"\n#include \"../gtc/epsilon.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\t/// Make a linear combination of two vectors and return the result.\n\t// result = (a * ascl) + (b * bscl)\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> combine(\n\t\tvec<3, T, Q> const& a,\n\t\tvec<3, T, Q> const& b,\n\t\tT ascl, T bscl)\n\t{\n\t\treturn (a * ascl) + (b * bscl);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> scale(vec<3, T, Q> const& v, T desiredLength)\n\t{\n\t\treturn v * desiredLength / length(v);\n\t}\n}//namespace detail\n\n\t// Matrix decompose\n\t// http://www.opensource.apple.com/source/WebCore/WebCore-514/platform/graphics/transforms/TransformationMatrix.cpp\n\t// Decomposes the mode matrix to translations,rotation scale components\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool decompose(mat<4, 4, T, Q> const& ModelMatrix, vec<3, T, Q> & Scale, qua<T, Q> & Orientation, vec<3, T, Q> & Translation, vec<3, T, Q> & Skew, vec<4, T, Q> & Perspective)\n\t{\n\t\tmat<4, 4, T, Q> LocalMatrix(ModelMatrix);\n\n\t\t// Normalize the matrix.\n\t\tif(epsilonEqual(LocalMatrix[3][3], static_cast<T>(0), epsilon<T>()))\n\t\t\treturn false;\n\n\t\tfor(length_t i = 0; i < 4; ++i)\n\t\tfor(length_t j = 0; j < 4; ++j)\n\t\t\tLocalMatrix[i][j] /= LocalMatrix[3][3];\n\n\t\t// perspectiveMatrix is used to solve for perspective, but it also provides\n\t\t// an easy way to test for singularity of the upper 3x3 component.\n\t\tmat<4, 4, T, Q> PerspectiveMatrix(LocalMatrix);\n\n\t\tfor(length_t i = 0; i < 3; i++)\n\t\t\tPerspectiveMatrix[i][3] = static_cast<T>(0);\n\t\tPerspectiveMatrix[3][3] = static_cast<T>(1);\n\n\t\t/// TODO: Fixme!\n\t\tif(epsilonEqual(determinant(PerspectiveMatrix), static_cast<T>(0), epsilon<T>()))\n\t\t\treturn false;\n\n\t\t// First, isolate perspective.  This is the messiest.\n\t\tif(\n\t\t\tepsilonNotEqual(LocalMatrix[0][3], static_cast<T>(0), epsilon<T>()) ||\n\t\t\tepsilonNotEqual(LocalMatrix[1][3], static_cast<T>(0), epsilon<T>()) ||\n\t\t\tepsilonNotEqual(LocalMatrix[2][3], static_cast<T>(0), epsilon<T>()))\n\t\t{\n\t\t\t// rightHandSide is the right hand side of the equation.\n\t\t\tvec<4, T, Q> RightHandSide;\n\t\t\tRightHandSide[0] = LocalMatrix[0][3];\n\t\t\tRightHandSide[1] = LocalMatrix[1][3];\n\t\t\tRightHandSide[2] = LocalMatrix[2][3];\n\t\t\tRightHandSide[3] = LocalMatrix[3][3];\n\n\t\t\t// Solve the equation by inverting PerspectiveMatrix and multiplying\n\t\t\t// rightHandSide by the inverse.  (This is the easiest way, not\n\t\t\t// necessarily the best.)\n\t\t\tmat<4, 4, T, Q> InversePerspectiveMatrix = glm::inverse(PerspectiveMatrix);//   inverse(PerspectiveMatrix, inversePerspectiveMatrix);\n\t\t\tmat<4, 4, T, Q> TransposedInversePerspectiveMatrix = glm::transpose(InversePerspectiveMatrix);//   transposeMatrix4(inversePerspectiveMatrix, transposedInversePerspectiveMatrix);\n\n\t\t\tPerspective = TransposedInversePerspectiveMatrix * RightHandSide;\n\t\t\t//  v4MulPointByMatrix(rightHandSide, transposedInversePerspectiveMatrix, perspectivePoint);\n\n\t\t\t// Clear the perspective partition\n\t\t\tLocalMatrix[0][3] = LocalMatrix[1][3] = LocalMatrix[2][3] = static_cast<T>(0);\n\t\t\tLocalMatrix[3][3] = static_cast<T>(1);\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// No perspective.\n\t\t\tPerspective = vec<4, T, Q>(0, 0, 0, 1);\n\t\t}\n\n\t\t// Next take care of translation (easy).\n\t\tTranslation = vec<3, T, Q>(LocalMatrix[3]);\n\t\tLocalMatrix[3] = vec<4, T, Q>(0, 0, 0, LocalMatrix[3].w);\n\n\t\tvec<3, T, Q> Row[3], Pdum3;\n\n\t\t// Now get scale and shear.\n\t\tfor(length_t i = 0; i < 3; ++i)\n\t\tfor(length_t j = 0; j < 3; ++j)\n\t\t\tRow[i][j] = LocalMatrix[i][j];\n\n\t\t// Compute X scale factor and normalize first row.\n\t\tScale.x = length(Row[0]);// v3Length(Row[0]);\n\n\t\tRow[0] = detail::scale(Row[0], static_cast<T>(1));\n\n\t\t// Compute XY shear factor and make 2nd row orthogonal to 1st.\n\t\tSkew.z = dot(Row[0], Row[1]);\n\t\tRow[1] = detail::combine(Row[1], Row[0], static_cast<T>(1), -Skew.z);\n\n\t\t// Now, compute Y scale and normalize 2nd row.\n\t\tScale.y = length(Row[1]);\n\t\tRow[1] = detail::scale(Row[1], static_cast<T>(1));\n\t\tSkew.z /= Scale.y;\n\n\t\t// Compute XZ and YZ shears, orthogonalize 3rd row.\n\t\tSkew.y = glm::dot(Row[0], Row[2]);\n\t\tRow[2] = detail::combine(Row[2], Row[0], static_cast<T>(1), -Skew.y);\n\t\tSkew.x = glm::dot(Row[1], Row[2]);\n\t\tRow[2] = detail::combine(Row[2], Row[1], static_cast<T>(1), -Skew.x);\n\n\t\t// Next, get Z scale and normalize 3rd row.\n\t\tScale.z = length(Row[2]);\n\t\tRow[2] = detail::scale(Row[2], static_cast<T>(1));\n\t\tSkew.y /= Scale.z;\n\t\tSkew.x /= Scale.z;\n\n\t\t// At this point, the matrix (in rows[]) is orthonormal.\n\t\t// Check for a coordinate system flip.  If the determinant\n\t\t// is -1, then negate the matrix and the scaling factors.\n\t\tPdum3 = cross(Row[1], Row[2]); // v3Cross(row[1], row[2], Pdum3);\n\t\tif(dot(Row[0], Pdum3) < 0)\n\t\t{\n\t\t\tfor(length_t i = 0; i < 3; i++)\n\t\t\t{\n\t\t\t\tScale[i] *= static_cast<T>(-1);\n\t\t\t\tRow[i] *= static_cast<T>(-1);\n\t\t\t}\n\t\t}\n\n\t\t// Now, get the rotations out, as described in the gem.\n\n\t\t// FIXME - Add the ability to return either quaternions (which are\n\t\t// easier to recompose with) or Euler angles (rx, ry, rz), which\n\t\t// are easier for authors to deal with. The latter will only be useful\n\t\t// when we fix https://bugs.webkit.org/show_bug.cgi?id=23799, so I\n\t\t// will leave the Euler angle code here for now.\n\n\t\t// ret.rotateY = asin(-Row[0][2]);\n\t\t// if (cos(ret.rotateY) != 0) {\n\t\t//     ret.rotateX = atan2(Row[1][2], Row[2][2]);\n\t\t//     ret.rotateZ = atan2(Row[0][1], Row[0][0]);\n\t\t// } else {\n\t\t//     ret.rotateX = atan2(-Row[2][0], Row[1][1]);\n\t\t//     ret.rotateZ = 0;\n\t\t// }\n\n\t\tint i, j, k = 0;\n\t\tT root, trace = Row[0].x + Row[1].y + Row[2].z;\n\t\tif(trace > static_cast<T>(0))\n\t\t{\n\t\t\troot = sqrt(trace + static_cast<T>(1.0));\n\t\t\tOrientation.w = static_cast<T>(0.5) * root;\n\t\t\troot = static_cast<T>(0.5) / root;\n\t\t\tOrientation.x = root * (Row[1].z - Row[2].y);\n\t\t\tOrientation.y = root * (Row[2].x - Row[0].z);\n\t\t\tOrientation.z = root * (Row[0].y - Row[1].x);\n\t\t} // End if > 0\n\t\telse\n\t\t{\n\t\t\tstatic int Next[3] = {1, 2, 0};\n\t\t\ti = 0;\n\t\t\tif(Row[1].y > Row[0].x) i = 1;\n\t\t\tif(Row[2].z > Row[i][i]) i = 2;\n\t\t\tj = Next[i];\n\t\t\tk = Next[j];\n\n#           ifdef GLM_FORCE_QUAT_DATA_XYZW\n                int off = 0;\n#           else\n                int off = 1;\n#           endif\n\n\t\t\troot = sqrt(Row[i][i] - Row[j][j] - Row[k][k] + static_cast<T>(1.0));\n\n\t\t\tOrientation[i + off] = static_cast<T>(0.5) * root;\n\t\t\troot = static_cast<T>(0.5) / root;\n\t\t\tOrientation[j + off] = root * (Row[i][j] + Row[j][i]);\n\t\t\tOrientation[k + off] = root * (Row[i][k] + Row[k][i]);\n\t\t\tOrientation.w = root * (Row[j][k] - Row[k][j]);\n\t\t} // End if <= 0\n\n\t\treturn true;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/matrix_factorisation.hpp",
    "content": "/// @ref gtx_matrix_factorisation\n/// @file glm/gtx/matrix_factorisation.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_matrix_factorisation GLM_GTX_matrix_factorisation\n/// @ingroup gtx\n///\n/// Include <glm/gtx/matrix_factorisation.hpp> to use the features of this extension.\n///\n/// Functions to factor matrices in various forms\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_factorisation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_factorisation extension included\")\n#\tendif\n#endif\n\n/*\nSuggestions:\n - Move helper functions flipud and fliplr to another file: They may be helpful in more general circumstances.\n - Implement other types of matrix factorisation, such as: QL and LQ, L(D)U, eigendecompositions, etc...\n*/\n\nnamespace glm\n{\n\t/// @addtogroup gtx_matrix_factorisation\n\t/// @{\n\n\t/// Flips the matrix rows up and down.\n\t///\n\t/// From GLM_GTX_matrix_factorisation extension.\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<C, R, T, Q> flipud(mat<C, R, T, Q> const& in);\n\n\t/// Flips the matrix columns right and left.\n\t///\n\t/// From GLM_GTX_matrix_factorisation extension.\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<C, R, T, Q> fliplr(mat<C, R, T, Q> const& in);\n\n\t/// Performs QR factorisation of a matrix.\n\t/// Returns 2 matrices, q and r, such that the columns of q are orthonormal and span the same subspace than those of the input matrix, r is an upper triangular matrix, and q*r=in.\n\t/// Given an n-by-m input matrix, q has dimensions min(n,m)-by-m, and r has dimensions n-by-min(n,m).\n\t///\n\t/// From GLM_GTX_matrix_factorisation extension.\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL void qr_decompose(mat<C, R, T, Q> const& in, mat<(C < R ? C : R), R, T, Q>& q, mat<C, (C < R ? C : R), T, Q>& r);\n\n\t/// Performs RQ factorisation of a matrix.\n\t/// Returns 2 matrices, r and q, such that r is an upper triangular matrix, the rows of q are orthonormal and span the same subspace than those of the input matrix, and r*q=in.\n\t/// Note that in the context of RQ factorisation, the diagonal is seen as starting in the lower-right corner of the matrix, instead of the usual upper-left.\n\t/// Given an n-by-m input matrix, r has dimensions min(n,m)-by-m, and q has dimensions n-by-min(n,m).\n\t///\n\t/// From GLM_GTX_matrix_factorisation extension.\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL void rq_decompose(mat<C, R, T, Q> const& in, mat<(C < R ? C : R), R, T, Q>& r, mat<C, (C < R ? C : R), T, Q>& q);\n\n\t/// @}\n}\n\n#include \"matrix_factorisation.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/matrix_factorisation.inl",
    "content": "/// @ref gtx_matrix_factorisation\n\nnamespace glm\n{\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<C, R, T, Q> flipud(mat<C, R, T, Q> const& in)\n\t{\n\t\tmat<R, C, T, Q> tin = transpose(in);\n\t\ttin = fliplr(tin);\n\t\tmat<C, R, T, Q> out = transpose(tin);\n\n\t\treturn out;\n\t}\n\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<C, R, T, Q> fliplr(mat<C, R, T, Q> const& in)\n\t{\n\t\tmat<C, R, T, Q> out;\n\t\tfor (length_t i = 0; i < C; i++)\n\t\t{\n\t\t\tout[i] = in[(C - i) - 1];\n\t\t}\n\n\t\treturn out;\n\t}\n\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER void qr_decompose(mat<C, R, T, Q> const& in, mat<(C < R ? C : R), R, T, Q>& q, mat<C, (C < R ? C : R), T, Q>& r)\n\t{\n\t\t// Uses modified Gram-Schmidt method\n\t\t// Source: https://en.wikipedia.org/wiki/GramSchmidt_process\n\t\t// And https://en.wikipedia.org/wiki/QR_decomposition\n\n\t\t//For all the linearly independs columns of the input...\n\t\t// (there can be no more linearly independents columns than there are rows.)\n\t\tfor (length_t i = 0; i < (C < R ? C : R); i++)\n\t\t{\n\t\t\t//Copy in Q the input's i-th column.\n\t\t\tq[i] = in[i];\n\n\t\t\t//j = [0,i[\n\t\t\t// Make that column orthogonal to all the previous ones by substracting to it the non-orthogonal projection of all the previous columns.\n\t\t\t// Also: Fill the zero elements of R\n\t\t\tfor (length_t j = 0; j < i; j++)\n\t\t\t{\n\t\t\t\tq[i] -= dot(q[i], q[j])*q[j];\n\t\t\t\tr[j][i] = 0;\n\t\t\t}\n\n\t\t\t//Now, Q i-th column is orthogonal to all the previous columns. Normalize it.\n\t\t\tq[i] = normalize(q[i]);\n\n\t\t\t//j = [i,C[\n\t\t\t//Finally, compute the corresponding coefficients of R by computing the projection of the resulting column on the other columns of the input.\n\t\t\tfor (length_t j = i; j < C; j++)\n\t\t\t{\n\t\t\t\tr[j][i] = dot(in[j], q[i]);\n\t\t\t}\n\t\t}\n\t}\n\n\ttemplate <length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER void rq_decompose(mat<C, R, T, Q> const& in, mat<(C < R ? C : R), R, T, Q>& r, mat<C, (C < R ? C : R), T, Q>& q)\n\t{\n\t\t// From https://en.wikipedia.org/wiki/QR_decomposition:\n\t\t// The RQ decomposition transforms a matrix A into the product of an upper triangular matrix R (also known as right-triangular) and an orthogonal matrix Q. The only difference from QR decomposition is the order of these matrices.\n\t\t// QR decomposition is GramSchmidt orthogonalization of columns of A, started from the first column.\n\t\t// RQ decomposition is GramSchmidt orthogonalization of rows of A, started from the last row.\n\n\t\tmat<R, C, T, Q> tin = transpose(in);\n\t\ttin = fliplr(tin);\n\n\t\tmat<R, (C < R ? C : R), T, Q> tr;\n\t\tmat<(C < R ? C : R), C, T, Q> tq;\n\t\tqr_decompose(tin, tq, tr);\n\n\t\ttr = fliplr(tr);\n\t\tr = transpose(tr);\n\t\tr = fliplr(r);\n\n\t\ttq = fliplr(tq);\n\t\tq = transpose(tq);\n\t}\n} //namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/matrix_interpolation.hpp",
    "content": "/// @ref gtx_matrix_interpolation\n/// @file glm/gtx/matrix_interpolation.hpp\n/// @author Ghenadii Ursachi (the.asteroth@gmail.com)\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_matrix_interpolation GLM_GTX_matrix_interpolation\n/// @ingroup gtx\n///\n/// Include <glm/gtx/matrix_interpolation.hpp> to use the features of this extension.\n///\n/// Allows to directly interpolate two matrices.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_interpolation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_interpolation extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_matrix_interpolation\n\t/// @{\n\n\t/// Get the axis and angle of the rotation from a matrix.\n\t/// From GLM_GTX_matrix_interpolation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL void axisAngle(\n\t\tmat<4, 4, T, Q> const& Mat, vec<3, T, Q> & Axis, T & Angle);\n\n\t/// Build a matrix from axis and angle.\n\t/// From GLM_GTX_matrix_interpolation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> axisAngleMatrix(\n\t\tvec<3, T, Q> const& Axis, T const Angle);\n\n\t/// Extracts the rotation part of a matrix.\n\t/// From GLM_GTX_matrix_interpolation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> extractMatrixRotation(\n\t\tmat<4, 4, T, Q> const& Mat);\n\n\t/// Build a interpolation of 4 * 4 matrixes.\n\t/// From GLM_GTX_matrix_interpolation extension.\n\t/// Warning! works only with rotation and/or translation matrixes, scale will generate unexpected results.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> interpolate(\n\t\tmat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2, T const Delta);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_interpolation.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/matrix_interpolation.inl",
    "content": "/// @ref gtx_matrix_interpolation\n\n#include \"../ext/scalar_constants.hpp\"\n\n#include <limits>\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER void axisAngle(mat<4, 4, T, Q> const& m, vec<3, T, Q>& axis, T& angle)\n\t{\n\t\tT const epsilon =\n\t\t    std::numeric_limits<T>::epsilon() * static_cast<T>(1e2);\n\n        bool const nearSymmetrical =\n            abs(m[1][0] - m[0][1]) < epsilon &&\n            abs(m[2][0] - m[0][2]) < epsilon &&\n            abs(m[2][1] - m[1][2]) < epsilon;\n\n\t\tif(nearSymmetrical)\n\t\t{\n            bool const nearIdentity =\n                abs(m[1][0] + m[0][1]) < epsilon &&\n                abs(m[2][0] + m[0][2]) < epsilon &&\n                abs(m[2][1] + m[1][2]) < epsilon &&\n                abs(m[0][0] + m[1][1] + m[2][2] - T(3.0)) < epsilon;\n\t\t\tif (nearIdentity)\n\t\t\t{\n\t\t\t\tangle = static_cast<T>(0.0);\n\t\t\t\taxis = vec<3, T, Q>(\n\t\t\t\t    static_cast<T>(1.0), static_cast<T>(0.0), static_cast<T>(0.0));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tangle = pi<T>();\n\t\t\tT xx = (m[0][0] + static_cast<T>(1.0)) * static_cast<T>(0.5);\n\t\t\tT yy = (m[1][1] + static_cast<T>(1.0)) * static_cast<T>(0.5);\n\t\t\tT zz = (m[2][2] + static_cast<T>(1.0)) * static_cast<T>(0.5);\n\t\t\tT xy = (m[1][0] + m[0][1]) * static_cast<T>(0.25);\n\t\t\tT xz = (m[2][0] + m[0][2]) * static_cast<T>(0.25);\n\t\t\tT yz = (m[2][1] + m[1][2]) * static_cast<T>(0.25);\n\t\t\tif((xx > yy) && (xx > zz))\n\t\t\t{\n\t\t\t\tif(xx < epsilon)\n\t\t\t\t{\n\t\t\t\t\taxis.x = static_cast<T>(0.0);\n\t\t\t\t\taxis.y = static_cast<T>(0.7071);\n\t\t\t\t\taxis.z = static_cast<T>(0.7071);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\taxis.x = sqrt(xx);\n\t\t\t\t\taxis.y = xy / axis.x;\n\t\t\t\t\taxis.z = xz / axis.x;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (yy > zz)\n\t\t\t{\n\t\t\t\tif(yy < epsilon)\n\t\t\t\t{\n\t\t\t\t\taxis.x = static_cast<T>(0.7071);\n\t\t\t\t\taxis.y = static_cast<T>(0.0);\n\t\t\t\t\taxis.z = static_cast<T>(0.7071);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\taxis.y = sqrt(yy);\n\t\t\t\t\taxis.x = xy / axis.y;\n\t\t\t\t\taxis.z = yz / axis.y;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif (zz < epsilon)\n\t\t\t\t{\n\t\t\t\t\taxis.x = static_cast<T>(0.7071);\n\t\t\t\t\taxis.y = static_cast<T>(0.7071);\n\t\t\t\t\taxis.z = static_cast<T>(0.0);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\taxis.z = sqrt(zz);\n\t\t\t\t\taxis.x = xz / axis.z;\n\t\t\t\t\taxis.y = yz / axis.z;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tT const angleCos = (m[0][0] + m[1][1] + m[2][2] - static_cast<T>(1)) * static_cast<T>(0.5);\n\t\tif(angleCos >= static_cast<T>(1.0))\n\t\t{\n\t\t\tangle = static_cast<T>(0.0);\n\t\t}\n\t\telse if (angleCos <= static_cast<T>(-1.0))\n\t\t{\n\t\t\tangle = pi<T>();\n\t\t}\n\t\telse\n\t\t{\n\t\t\tangle = acos(angleCos);\n\t\t}\n\n        axis = glm::normalize(glm::vec<3, T, Q>(\n            m[1][2] - m[2][1], m[2][0] - m[0][2], m[0][1] - m[1][0]));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> axisAngleMatrix(vec<3, T, Q> const& axis, T const angle)\n\t{\n\t\tT c = cos(angle);\n\t\tT s = sin(angle);\n\t\tT t = static_cast<T>(1) - c;\n\t\tvec<3, T, Q> n = normalize(axis);\n\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tt * n.x * n.x + c,          t * n.x * n.y + n.z * s,    t * n.x * n.z - n.y * s,    static_cast<T>(0.0),\n\t\t\tt * n.x * n.y - n.z * s,    t * n.y * n.y + c,          t * n.y * n.z + n.x * s,    static_cast<T>(0.0),\n\t\t\tt * n.x * n.z + n.y * s,    t * n.y * n.z - n.x * s,    t * n.z * n.z + c,          static_cast<T>(0.0),\n\t\t\tstatic_cast<T>(0.0),        static_cast<T>(0.0),        static_cast<T>(0.0),        static_cast<T>(1.0));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> extractMatrixRotation(mat<4, 4, T, Q> const& m)\n\t{\n\t\treturn mat<4, 4, T, Q>(\n\t\t\tm[0][0], m[0][1], m[0][2], static_cast<T>(0.0),\n\t\t\tm[1][0], m[1][1], m[1][2], static_cast<T>(0.0),\n\t\t\tm[2][0], m[2][1], m[2][2], static_cast<T>(0.0),\n\t\t\tstatic_cast<T>(0.0), static_cast<T>(0.0), static_cast<T>(0.0), static_cast<T>(1.0));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> interpolate(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2, T const delta)\n\t{\n\t\tmat<4, 4, T, Q> m1rot = extractMatrixRotation(m1);\n\t\tmat<4, 4, T, Q> dltRotation = m2 * transpose(m1rot);\n\t\tvec<3, T, Q> dltAxis;\n\t\tT dltAngle;\n\t\taxisAngle(dltRotation, dltAxis, dltAngle);\n\t\tmat<4, 4, T, Q> out = axisAngleMatrix(dltAxis, dltAngle * delta) * m1rot;\n\t\tout[3][0] = m1[3][0] + delta * (m2[3][0] - m1[3][0]);\n\t\tout[3][1] = m1[3][1] + delta * (m2[3][1] - m1[3][1]);\n\t\tout[3][2] = m1[3][2] + delta * (m2[3][2] - m1[3][2]);\n\t\treturn out;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/matrix_major_storage.hpp",
    "content": "/// @ref gtx_matrix_major_storage\n/// @file glm/gtx/matrix_major_storage.hpp\n///\n/// @see core (dependence)\n/// @see gtx_extented_min_max (dependence)\n///\n/// @defgroup gtx_matrix_major_storage GLM_GTX_matrix_major_storage\n/// @ingroup gtx\n///\n/// Include <glm/gtx/matrix_major_storage.hpp> to use the features of this extension.\n///\n/// Build matrices with specific matrix order, row or column\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_major_storage is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_major_storage extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_matrix_major_storage\n\t/// @{\n\n\t//! Build a row major matrix from row vectors.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> rowMajor2(\n\t\tvec<2, T, Q> const& v1,\n\t\tvec<2, T, Q> const& v2);\n\n\t//! Build a row major matrix from other matrix.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> rowMajor2(\n\t\tmat<2, 2, T, Q> const& m);\n\n\t//! Build a row major matrix from row vectors.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> rowMajor3(\n\t\tvec<3, T, Q> const& v1,\n\t\tvec<3, T, Q> const& v2,\n\t\tvec<3, T, Q> const& v3);\n\n\t//! Build a row major matrix from other matrix.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> rowMajor3(\n\t\tmat<3, 3, T, Q> const& m);\n\n\t//! Build a row major matrix from row vectors.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> rowMajor4(\n\t\tvec<4, T, Q> const& v1,\n\t\tvec<4, T, Q> const& v2,\n\t\tvec<4, T, Q> const& v3,\n\t\tvec<4, T, Q> const& v4);\n\n\t//! Build a row major matrix from other matrix.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> rowMajor4(\n\t\tmat<4, 4, T, Q> const& m);\n\n\t//! Build a column major matrix from column vectors.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> colMajor2(\n\t\tvec<2, T, Q> const& v1,\n\t\tvec<2, T, Q> const& v2);\n\n\t//! Build a column major matrix from other matrix.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> colMajor2(\n\t\tmat<2, 2, T, Q> const& m);\n\n\t//! Build a column major matrix from column vectors.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> colMajor3(\n\t\tvec<3, T, Q> const& v1,\n\t\tvec<3, T, Q> const& v2,\n\t\tvec<3, T, Q> const& v3);\n\n\t//! Build a column major matrix from other matrix.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> colMajor3(\n\t\tmat<3, 3, T, Q> const& m);\n\n\t//! Build a column major matrix from column vectors.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> colMajor4(\n\t\tvec<4, T, Q> const& v1,\n\t\tvec<4, T, Q> const& v2,\n\t\tvec<4, T, Q> const& v3,\n\t\tvec<4, T, Q> const& v4);\n\n\t//! Build a column major matrix from other matrix.\n\t//! From GLM_GTX_matrix_major_storage extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> colMajor4(\n\t\tmat<4, 4, T, Q> const& m);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_major_storage.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/matrix_major_storage.inl",
    "content": "/// @ref gtx_matrix_major_storage\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> rowMajor2\n\t(\n\t\tvec<2, T, Q> const& v1,\n\t\tvec<2, T, Q> const& v2\n\t)\n\t{\n\t\tmat<2, 2, T, Q> Result;\n\t\tResult[0][0] = v1.x;\n\t\tResult[1][0] = v1.y;\n\t\tResult[0][1] = v2.x;\n\t\tResult[1][1] = v2.y;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> rowMajor2(\n\t\tconst mat<2, 2, T, Q>& m)\n\t{\n\t\tmat<2, 2, T, Q> Result;\n\t\tResult[0][0] = m[0][0];\n\t\tResult[0][1] = m[1][0];\n\t\tResult[1][0] = m[0][1];\n\t\tResult[1][1] = m[1][1];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> rowMajor3(\n\t\tconst vec<3, T, Q>& v1,\n\t\tconst vec<3, T, Q>& v2,\n\t\tconst vec<3, T, Q>& v3)\n\t{\n\t\tmat<3, 3, T, Q> Result;\n\t\tResult[0][0] = v1.x;\n\t\tResult[1][0] = v1.y;\n\t\tResult[2][0] = v1.z;\n\t\tResult[0][1] = v2.x;\n\t\tResult[1][1] = v2.y;\n\t\tResult[2][1] = v2.z;\n\t\tResult[0][2] = v3.x;\n\t\tResult[1][2] = v3.y;\n\t\tResult[2][2] = v3.z;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> rowMajor3(\n\t\tconst mat<3, 3, T, Q>& m)\n\t{\n\t\tmat<3, 3, T, Q> Result;\n\t\tResult[0][0] = m[0][0];\n\t\tResult[0][1] = m[1][0];\n\t\tResult[0][2] = m[2][0];\n\t\tResult[1][0] = m[0][1];\n\t\tResult[1][1] = m[1][1];\n\t\tResult[1][2] = m[2][1];\n\t\tResult[2][0] = m[0][2];\n\t\tResult[2][1] = m[1][2];\n\t\tResult[2][2] = m[2][2];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> rowMajor4(\n\t\tconst vec<4, T, Q>& v1,\n\t\tconst vec<4, T, Q>& v2,\n\t\tconst vec<4, T, Q>& v3,\n\t\tconst vec<4, T, Q>& v4)\n\t{\n\t\tmat<4, 4, T, Q> Result;\n\t\tResult[0][0] = v1.x;\n\t\tResult[1][0] = v1.y;\n\t\tResult[2][0] = v1.z;\n\t\tResult[3][0] = v1.w;\n\t\tResult[0][1] = v2.x;\n\t\tResult[1][1] = v2.y;\n\t\tResult[2][1] = v2.z;\n\t\tResult[3][1] = v2.w;\n\t\tResult[0][2] = v3.x;\n\t\tResult[1][2] = v3.y;\n\t\tResult[2][2] = v3.z;\n\t\tResult[3][2] = v3.w;\n\t\tResult[0][3] = v4.x;\n\t\tResult[1][3] = v4.y;\n\t\tResult[2][3] = v4.z;\n\t\tResult[3][3] = v4.w;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> rowMajor4(\n\t\tconst mat<4, 4, T, Q>& m)\n\t{\n\t\tmat<4, 4, T, Q> Result;\n\t\tResult[0][0] = m[0][0];\n\t\tResult[0][1] = m[1][0];\n\t\tResult[0][2] = m[2][0];\n\t\tResult[0][3] = m[3][0];\n\t\tResult[1][0] = m[0][1];\n\t\tResult[1][1] = m[1][1];\n\t\tResult[1][2] = m[2][1];\n\t\tResult[1][3] = m[3][1];\n\t\tResult[2][0] = m[0][2];\n\t\tResult[2][1] = m[1][2];\n\t\tResult[2][2] = m[2][2];\n\t\tResult[2][3] = m[3][2];\n\t\tResult[3][0] = m[0][3];\n\t\tResult[3][1] = m[1][3];\n\t\tResult[3][2] = m[2][3];\n\t\tResult[3][3] = m[3][3];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> colMajor2(\n\t\tconst vec<2, T, Q>& v1,\n\t\tconst vec<2, T, Q>& v2)\n\t{\n\t\treturn mat<2, 2, T, Q>(v1, v2);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> colMajor2(\n\t\tconst mat<2, 2, T, Q>& m)\n\t{\n\t\treturn mat<2, 2, T, Q>(m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> colMajor3(\n\t\tconst vec<3, T, Q>& v1,\n\t\tconst vec<3, T, Q>& v2,\n\t\tconst vec<3, T, Q>& v3)\n\t{\n\t\treturn mat<3, 3, T, Q>(v1, v2, v3);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> colMajor3(\n\t\tconst mat<3, 3, T, Q>& m)\n\t{\n\t\treturn mat<3, 3, T, Q>(m);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> colMajor4(\n\t\tconst vec<4, T, Q>& v1,\n\t\tconst vec<4, T, Q>& v2,\n\t\tconst vec<4, T, Q>& v3,\n\t\tconst vec<4, T, Q>& v4)\n\t{\n\t\treturn mat<4, 4, T, Q>(v1, v2, v3, v4);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> colMajor4(\n\t\tconst mat<4, 4, T, Q>& m)\n\t{\n\t\treturn mat<4, 4, T, Q>(m);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/matrix_operation.hpp",
    "content": "/// @ref gtx_matrix_operation\n/// @file glm/gtx/matrix_operation.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_matrix_operation GLM_GTX_matrix_operation\n/// @ingroup gtx\n///\n/// Include <glm/gtx/matrix_operation.hpp> to use the features of this extension.\n///\n/// Build diagonal matrices from vectors.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_operation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_operation extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_matrix_operation\n\t/// @{\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> diagonal2x2(\n\t\tvec<2, T, Q> const& v);\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 3, T, Q> diagonal2x3(\n\t\tvec<2, T, Q> const& v);\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 4, T, Q> diagonal2x4(\n\t\tvec<2, T, Q> const& v);\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 2, T, Q> diagonal3x2(\n\t\tvec<2, T, Q> const& v);\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> diagonal3x3(\n\t\tvec<3, T, Q> const& v);\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 4, T, Q> diagonal3x4(\n\t\tvec<3, T, Q> const& v);\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 2, T, Q> diagonal4x2(\n\t\tvec<2, T, Q> const& v);\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 3, T, Q> diagonal4x3(\n\t\tvec<3, T, Q> const& v);\n\n\t//! Build a diagonal matrix.\n\t//! From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> diagonal4x4(\n\t\tvec<4, T, Q> const& v);\n\n\t/// Build an adjugate  matrix.\n\t/// From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<2, 2, T, Q> adjugate(mat<2, 2, T, Q> const& m);\n\n\t/// Build an adjugate  matrix.\n\t/// From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> adjugate(mat<3, 3, T, Q> const& m);\n\n\t/// Build an adjugate  matrix.\n\t/// From GLM_GTX_matrix_operation extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> adjugate(mat<4, 4, T, Q> const& m);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_operation.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/matrix_operation.inl",
    "content": "/// @ref gtx_matrix_operation\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> diagonal2x2\n\t(\n\t\tvec<2, T, Q> const& v\n\t)\n\t{\n\t\tmat<2, 2, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 3, T, Q> diagonal2x3\n\t(\n\t\tvec<2, T, Q> const& v\n\t)\n\t{\n\t\tmat<2, 3, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 4, T, Q> diagonal2x4\n\t(\n\t\tvec<2, T, Q> const& v\n\t)\n\t{\n\t\tmat<2, 4, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 2, T, Q> diagonal3x2\n\t(\n\t\tvec<2, T, Q> const& v\n\t)\n\t{\n\t\tmat<3, 2, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> diagonal3x3\n\t(\n\t\tvec<3, T, Q> const& v\n\t)\n\t{\n\t\tmat<3, 3, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\tResult[2][2] = v[2];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 4, T, Q> diagonal3x4\n\t(\n\t\tvec<3, T, Q> const& v\n\t)\n\t{\n\t\tmat<3, 4, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\tResult[2][2] = v[2];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> diagonal4x4\n\t(\n\t\tvec<4, T, Q> const& v\n\t)\n\t{\n\t\tmat<4, 4, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\tResult[2][2] = v[2];\n\t\tResult[3][3] = v[3];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 3, T, Q> diagonal4x3\n\t(\n\t\tvec<3, T, Q> const& v\n\t)\n\t{\n\t\tmat<4, 3, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\tResult[2][2] = v[2];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 2, T, Q> diagonal4x2\n\t(\n\t\tvec<2, T, Q> const& v\n\t)\n\t{\n\t\tmat<4, 2, T, Q> Result(static_cast<T>(1));\n\t\tResult[0][0] = v[0];\n\t\tResult[1][1] = v[1];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<2, 2, T, Q> adjugate(mat<2, 2, T, Q> const& m)\n\t{\n\t\treturn mat<2, 2, T, Q>(\n\t\t\t+m[1][1], -m[0][1],\n\t\t\t-m[1][0], +m[0][0]);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> adjugate(mat<3, 3, T, Q> const& m)\n\t{\n\t\tT const m00 = determinant(mat<2, 2, T, Q>(m[1][1], m[2][1], m[1][2], m[2][2]));\n\t\tT const m01 = determinant(mat<2, 2, T, Q>(m[0][1], m[2][1], m[0][2], m[2][2]));\n\t\tT const m02 = determinant(mat<2, 2, T, Q>(m[0][1], m[1][1], m[0][2], m[1][2]));\n\n\t\tT const m10 = determinant(mat<2, 2, T, Q>(m[1][0], m[2][0], m[1][2], m[2][2]));\n\t\tT const m11 = determinant(mat<2, 2, T, Q>(m[0][0], m[2][0], m[0][2], m[2][2]));\n\t\tT const m12 = determinant(mat<2, 2, T, Q>(m[0][0], m[1][0], m[0][2], m[1][2]));\n\n\t\tT const m20 = determinant(mat<2, 2, T, Q>(m[1][0], m[2][0], m[1][1], m[2][1]));\n\t\tT const m21 = determinant(mat<2, 2, T, Q>(m[0][0], m[2][0], m[0][1], m[2][1]));\n\t\tT const m22 = determinant(mat<2, 2, T, Q>(m[0][0], m[1][0], m[0][1], m[1][1]));\n\n\t\treturn mat<3, 3, T, Q>(\n\t\t\t+m00, -m01, +m02,\n\t\t\t-m10, +m11, -m12,\n\t\t\t+m20, -m21, +m22);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> adjugate(mat<4, 4, T, Q> const& m)\n\t{\n\t\tT const m00 = determinant(mat<3, 3, T, Q>(m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3]));\n\t\tT const m01 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3]));\n\t\tT const m02 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][1], m[1][3], m[2][0], m[2][1], m[2][3], m[3][0], m[3][1], m[3][3]));\n\t\tT const m03 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2]));\n\n\t\tT const m10 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3]));\n\t\tT const m11 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3]));\n\t\tT const m12 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[2][0], m[2][1], m[2][3], m[3][0], m[3][1], m[3][3]));\n\t\tT const m13 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2]));\n\n\t\tT const m20 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[3][1], m[3][2], m[3][3]));\n\t\tT const m21 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[3][0], m[3][2], m[3][3]));\n\t\tT const m22 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[3][0], m[3][1], m[3][3]));\n\t\tT const m23 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[3][0], m[3][1], m[3][2]));\n\n\t\tT const m30 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3]));\n\t\tT const m31 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3]));\n\t\tT const m32 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[2][0], m[2][1], m[2][3]));\n\t\tT const m33 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2]));\n\n\t\treturn mat<4, 4, T, Q>(\n\t\t\t+m00, -m10, +m20, -m30,\n\t\t\t-m01, +m11, -m21, +m31,\n\t\t\t+m02, -m12, +m22, -m32,\n\t\t\t-m03, +m13, -m23, +m33);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/matrix_query.hpp",
    "content": "/// @ref gtx_matrix_query\n/// @file glm/gtx/matrix_query.hpp\n///\n/// @see core (dependence)\n/// @see gtx_vector_query (dependence)\n///\n/// @defgroup gtx_matrix_query GLM_GTX_matrix_query\n/// @ingroup gtx\n///\n/// Include <glm/gtx/matrix_query.hpp> to use the features of this extension.\n///\n/// Query to evaluate matrix properties\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtx/vector_query.hpp\"\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_query extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_matrix_query\n\t/// @{\n\n\t/// Return whether a matrix a null matrix.\n\t/// From GLM_GTX_matrix_query extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool isNull(mat<2, 2, T, Q> const& m, T const& epsilon);\n\n\t/// Return whether a matrix a null matrix.\n\t/// From GLM_GTX_matrix_query extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool isNull(mat<3, 3, T, Q> const& m, T const& epsilon);\n\n\t/// Return whether a matrix is a null matrix.\n\t/// From GLM_GTX_matrix_query extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool isNull(mat<4, 4, T, Q> const& m, T const& epsilon);\n\n\t/// Return whether a matrix is an identity matrix.\n\t/// From GLM_GTX_matrix_query extension.\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, template<length_t, length_t, typename, qualifier> class matType>\n\tGLM_FUNC_DECL bool isIdentity(matType<C, R, T, Q> const& m, T const& epsilon);\n\n\t/// Return whether a matrix is a normalized matrix.\n\t/// From GLM_GTX_matrix_query extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool isNormalized(mat<2, 2, T, Q> const& m, T const& epsilon);\n\n\t/// Return whether a matrix is a normalized matrix.\n\t/// From GLM_GTX_matrix_query extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool isNormalized(mat<3, 3, T, Q> const& m, T const& epsilon);\n\n\t/// Return whether a matrix is a normalized matrix.\n\t/// From GLM_GTX_matrix_query extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL bool isNormalized(mat<4, 4, T, Q> const& m, T const& epsilon);\n\n\t/// Return whether a matrix is an orthonormalized matrix.\n\t/// From GLM_GTX_matrix_query extension.\n\ttemplate<length_t C, length_t R, typename T, qualifier Q, template<length_t, length_t, typename, qualifier> class matType>\n\tGLM_FUNC_DECL bool isOrthogonal(matType<C, R, T, Q> const& m, T const& epsilon);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_query.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/matrix_query.inl",
    "content": "/// @ref gtx_matrix_query\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isNull(mat<2, 2, T, Q> const& m, T const& epsilon)\n\t{\n\t\tbool result = true;\n\t\tfor(length_t i = 0; result && i < m.length() ; ++i)\n\t\t\tresult = isNull(m[i], epsilon);\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isNull(mat<3, 3, T, Q> const& m, T const& epsilon)\n\t{\n\t\tbool result = true;\n\t\tfor(length_t i = 0; result && i < m.length() ; ++i)\n\t\t\tresult = isNull(m[i], epsilon);\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isNull(mat<4, 4, T, Q> const& m, T const& epsilon)\n\t{\n\t\tbool result = true;\n\t\tfor(length_t i = 0; result && i < m.length() ; ++i)\n\t\t\tresult = isNull(m[i], epsilon);\n\t\treturn result;\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isIdentity(mat<C, R, T, Q> const& m, T const& epsilon)\n\t{\n\t\tbool result = true;\n\t\tfor(length_t i = 0; result && i < m.length(); ++i)\n\t\t{\n\t\t\tfor(length_t j = 0; result && j < glm::min(i, m[0].length()); ++j)\n\t\t\t\tresult = abs(m[i][j]) <= epsilon;\n\t\t\tif(result && i < m[0].length())\n\t\t\t\tresult = abs(m[i][i] - 1) <= epsilon;\n\t\t\tfor(length_t j = i + 1; result && j < m[0].length(); ++j)\n\t\t\t\tresult = abs(m[i][j]) <= epsilon;\n\t\t}\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isNormalized(mat<2, 2, T, Q> const& m, T const& epsilon)\n\t{\n\t\tbool result(true);\n\t\tfor(length_t i = 0; result && i < m.length(); ++i)\n\t\t\tresult = isNormalized(m[i], epsilon);\n\t\tfor(length_t i = 0; result && i < m.length(); ++i)\n\t\t{\n\t\t\ttypename mat<2, 2, T, Q>::col_type v;\n\t\t\tfor(length_t j = 0; j < m.length(); ++j)\n\t\t\t\tv[j] = m[j][i];\n\t\t\tresult = isNormalized(v, epsilon);\n\t\t}\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isNormalized(mat<3, 3, T, Q> const& m, T const& epsilon)\n\t{\n\t\tbool result(true);\n\t\tfor(length_t i = 0; result && i < m.length(); ++i)\n\t\t\tresult = isNormalized(m[i], epsilon);\n\t\tfor(length_t i = 0; result && i < m.length(); ++i)\n\t\t{\n\t\t\ttypename mat<3, 3, T, Q>::col_type v;\n\t\t\tfor(length_t j = 0; j < m.length(); ++j)\n\t\t\t\tv[j] = m[j][i];\n\t\t\tresult = isNormalized(v, epsilon);\n\t\t}\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isNormalized(mat<4, 4, T, Q> const& m, T const& epsilon)\n\t{\n\t\tbool result(true);\n\t\tfor(length_t i = 0; result && i < m.length(); ++i)\n\t\t\tresult = isNormalized(m[i], epsilon);\n\t\tfor(length_t i = 0; result && i < m.length(); ++i)\n\t\t{\n\t\t\ttypename mat<4, 4, T, Q>::col_type v;\n\t\t\tfor(length_t j = 0; j < m.length(); ++j)\n\t\t\t\tv[j] = m[j][i];\n\t\t\tresult = isNormalized(v, epsilon);\n\t\t}\n\t\treturn result;\n\t}\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isOrthogonal(mat<C, R, T, Q> const& m, T const& epsilon)\n\t{\n\t\tbool result = true;\n\t\tfor(length_t i(0); result && i < m.length() - 1; ++i)\n\t\tfor(length_t j(i + 1); result && j < m.length(); ++j)\n\t\t\tresult = areOrthogonal(m[i], m[j], epsilon);\n\n\t\tif(result)\n\t\t{\n\t\t\tmat<C, R, T, Q> tmp = transpose(m);\n\t\t\tfor(length_t i(0); result && i < m.length() - 1 ; ++i)\n\t\t\tfor(length_t j(i + 1); result && j < m.length(); ++j)\n\t\t\t\tresult = areOrthogonal(tmp[i], tmp[j], epsilon);\n\t\t}\n\t\treturn result;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/matrix_transform_2d.hpp",
    "content": "/// @ref gtx_matrix_transform_2d\n/// @file glm/gtx/matrix_transform_2d.hpp\n/// @author Miguel Ángel Pérez Martínez\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_matrix_transform_2d GLM_GTX_matrix_transform_2d\n/// @ingroup gtx\n///\n/// Include <glm/gtx/matrix_transform_2d.hpp> to use the features of this extension.\n///\n/// Defines functions that generate common 2d transformation matrices.\n\n#pragma once\n\n// Dependency:\n#include \"../mat3x3.hpp\"\n#include \"../vec2.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_transform_2d is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_matrix_transform_2d extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_matrix_transform_2d\n\t/// @{\n\n\t/// Builds a translation 3 * 3 matrix created from a vector of 2 components.\n\t///\n\t/// @param m Input matrix multiplied by this translation matrix.\n\t/// @param v Coordinates of a translation vector.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> translate(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tvec<2, T, Q> const& v);\n\n\t/// Builds a rotation 3 * 3 matrix created from an angle.\n\t///\n\t/// @param m Input matrix multiplied by this translation matrix.\n\t/// @param angle Rotation angle expressed in radians.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> rotate(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tT angle);\n\n\t/// Builds a scale 3 * 3 matrix created from a vector of 2 components.\n\t///\n\t/// @param m Input matrix multiplied by this translation matrix.\n\t/// @param v Coordinates of a scale vector.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> scale(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tvec<2, T, Q> const& v);\n\n\t/// Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix.\n\t///\n\t/// @param m Input matrix multiplied by this translation matrix.\n\t/// @param y Shear factor.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tT y);\n\n\t/// Builds a vertical (parallel to the y axis) shear 3 * 3 matrix.\n\t///\n\t/// @param m Input matrix multiplied by this translation matrix.\n\t/// @param x Shear factor.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tT x);\n\n\t/// @}\n}//namespace glm\n\n#include \"matrix_transform_2d.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/matrix_transform_2d.inl",
    "content": "/// @ref gtx_matrix_transform_2d\n/// @author Miguel Ángel Pérez Martínez\n\n#include \"../trigonometric.hpp\"\n\nnamespace glm\n{\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> translate(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tvec<2, T, Q> const& v)\n\t{\n\t\tmat<3, 3, T, Q> Result(m);\n\t\tResult[2] = m[0] * v[0] + m[1] * v[1] + m[2];\n\t\treturn Result;\n\t}\n\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> rotate(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tT angle)\n\t{\n\t\tT const a = angle;\n\t\tT const c = cos(a);\n\t\tT const s = sin(a);\n\n\t\tmat<3, 3, T, Q> Result;\n\t\tResult[0] = m[0] * c + m[1] * s;\n\t\tResult[1] = m[0] * -s + m[1] * c;\n\t\tResult[2] = m[2];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> scale(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tvec<2, T, Q> const& v)\n\t{\n\t\tmat<3, 3, T, Q> Result;\n\t\tResult[0] = m[0] * v[0];\n\t\tResult[1] = m[1] * v[1];\n\t\tResult[2] = m[2];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tT y)\n\t{\n\t\tmat<3, 3, T, Q> Result(1);\n\t\tResult[0][1] = y;\n\t\treturn m * Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY(\n\t\tmat<3, 3, T, Q> const& m,\n\t\tT x)\n\t{\n\t\tmat<3, 3, T, Q> Result(1);\n\t\tResult[1][0] = x;\n\t\treturn m * Result;\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/mixed_product.hpp",
    "content": "/// @ref gtx_mixed_product\n/// @file glm/gtx/mixed_product.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_mixed_product GLM_GTX_mixed_producte\n/// @ingroup gtx\n///\n/// Include <glm/gtx/mixed_product.hpp> to use the features of this extension.\n///\n/// Mixed product of 3 vectors.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_mixed_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_mixed_product extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_mixed_product\n\t/// @{\n\n\t/// @brief Mixed product of 3 vectors (from GLM_GTX_mixed_product extension)\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T mixedProduct(\n\t\tvec<3, T, Q> const& v1,\n\t\tvec<3, T, Q> const& v2,\n\t\tvec<3, T, Q> const& v3);\n\n\t/// @}\n}// namespace glm\n\n#include \"mixed_product.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/mixed_product.inl",
    "content": "/// @ref gtx_mixed_product\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T mixedProduct\n\t(\n\t\tvec<3, T, Q> const& v1,\n\t\tvec<3, T, Q> const& v2,\n\t\tvec<3, T, Q> const& v3\n\t)\n\t{\n\t\treturn dot(cross(v1, v2), v3);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/norm.hpp",
    "content": "/// @ref gtx_norm\n/// @file glm/gtx/norm.hpp\n///\n/// @see core (dependence)\n/// @see gtx_quaternion (dependence)\n/// @see gtx_component_wise (dependence)\n///\n/// @defgroup gtx_norm GLM_GTX_norm\n/// @ingroup gtx\n///\n/// Include <glm/gtx/norm.hpp> to use the features of this extension.\n///\n/// Various ways to compute vector norms.\n\n#pragma once\n\n// Dependency:\n#include \"../geometric.hpp\"\n#include \"../gtx/quaternion.hpp\"\n#include \"../gtx/component_wise.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_norm is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_norm extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_norm\n\t/// @{\n\n\t/// Returns the squared length of x.\n\t/// From GLM_GTX_norm extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T length2(vec<L, T, Q> const& x);\n\n\t/// Returns the squared distance between p0 and p1, i.e., length2(p0 - p1).\n\t/// From GLM_GTX_norm extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T distance2(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1);\n\n\t//! Returns the L1 norm between x and y.\n\t//! From GLM_GTX_norm extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T l1Norm(vec<3, T, Q> const& x, vec<3, T, Q> const& y);\n\n\t//! Returns the L1 norm of v.\n\t//! From GLM_GTX_norm extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T l1Norm(vec<3, T, Q> const& v);\n\n\t//! Returns the L2 norm between x and y.\n\t//! From GLM_GTX_norm extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T l2Norm(vec<3, T, Q> const& x, vec<3, T, Q> const& y);\n\n\t//! Returns the L2 norm of v.\n\t//! From GLM_GTX_norm extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T l2Norm(vec<3, T, Q> const& x);\n\n\t//! Returns the L norm between x and y.\n\t//! From GLM_GTX_norm extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T lxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y, unsigned int Depth);\n\n\t//! Returns the L norm of v.\n\t//! From GLM_GTX_norm extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T lxNorm(vec<3, T, Q> const& x, unsigned int Depth);\n\n\t//! Returns the LMax norm between x and y.\n\t//! From GLM_GTX_norm extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T lMaxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y);\n\n\t//! Returns the LMax norm of v.\n\t//! From GLM_GTX_norm extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T lMaxNorm(vec<3, T, Q> const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"norm.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/norm.inl",
    "content": "/// @ref gtx_norm\n\n#include \"../detail/qualifier.hpp\"\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q, bool Aligned>\n\tstruct compute_length2\n\t{\n\t\tGLM_FUNC_QUALIFIER static T call(vec<L, T, Q> const& v)\n\t\t{\n\t\t\treturn dot(v, v);\n\t\t}\n\t};\n}//namespace detail\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType length2(genType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'length2' accepts only floating-point inputs\");\n\t\treturn x * x;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T length2(vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'length2' accepts only floating-point inputs\");\n\t\treturn detail::compute_length2<L, T, Q, detail::is_aligned<Q>::value>::call(v);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T distance2(T p0, T p1)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'distance2' accepts only floating-point inputs\");\n\t\treturn length2(p1 - p0);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T distance2(vec<L, T, Q> const& p0, vec<L, T, Q> const& p1)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'distance2' accepts only floating-point inputs\");\n\t\treturn length2(p1 - p0);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T l1Norm(vec<3, T, Q> const& a, vec<3, T, Q> const& b)\n\t{\n\t\treturn abs(b.x - a.x) + abs(b.y - a.y) + abs(b.z - a.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T l1Norm(vec<3, T, Q> const& v)\n\t{\n\t\treturn abs(v.x) + abs(v.y) + abs(v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T l2Norm(vec<3, T, Q> const& a, vec<3, T, Q> const& b\n\t)\n\t{\n\t\treturn length(b - a);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T l2Norm(vec<3, T, Q> const& v)\n\t{\n\t\treturn length(v);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T lxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y, unsigned int Depth)\n\t{\n\t\treturn pow(pow(abs(y.x - x.x), T(Depth)) + pow(abs(y.y - x.y), T(Depth)) + pow(abs(y.z - x.z), T(Depth)), T(1) / T(Depth));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T lxNorm(vec<3, T, Q> const& v, unsigned int Depth)\n\t{\n\t\treturn pow(pow(abs(v.x), T(Depth)) + pow(abs(v.y), T(Depth)) + pow(abs(v.z), T(Depth)), T(1) / T(Depth));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T lMaxNorm(vec<3, T, Q> const& a, vec<3, T, Q> const& b)\n\t{\n\t\treturn compMax(abs(b - a));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T lMaxNorm(vec<3, T, Q> const& v)\n\t{\n\t\treturn compMax(abs(v));\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/normal.hpp",
    "content": "/// @ref gtx_normal\n/// @file glm/gtx/normal.hpp\n///\n/// @see core (dependence)\n/// @see gtx_extented_min_max (dependence)\n///\n/// @defgroup gtx_normal GLM_GTX_normal\n/// @ingroup gtx\n///\n/// Include <glm/gtx/normal.hpp> to use the features of this extension.\n///\n/// Compute the normal of a triangle.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_normal is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_normal extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_normal\n\t/// @{\n\n\t/// Computes triangle normal from triangle points.\n\t///\n\t/// @see gtx_normal\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> triangleNormal(vec<3, T, Q> const& p1, vec<3, T, Q> const& p2, vec<3, T, Q> const& p3);\n\n\t/// @}\n}//namespace glm\n\n#include \"normal.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/normal.inl",
    "content": "/// @ref gtx_normal\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> triangleNormal\n\t(\n\t\tvec<3, T, Q> const& p1,\n\t\tvec<3, T, Q> const& p2,\n\t\tvec<3, T, Q> const& p3\n\t)\n\t{\n\t\treturn normalize(cross(p1 - p2, p1 - p3));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/normalize_dot.hpp",
    "content": "/// @ref gtx_normalize_dot\n/// @file glm/gtx/normalize_dot.hpp\n///\n/// @see core (dependence)\n/// @see gtx_fast_square_root (dependence)\n///\n/// @defgroup gtx_normalize_dot GLM_GTX_normalize_dot\n/// @ingroup gtx\n///\n/// Include <glm/gtx/normalize_dot.hpp> to use the features of this extension.\n///\n/// Dot product of vectors that need to be normalize with a single square root.\n\n#pragma once\n\n// Dependency:\n#include \"../gtx/fast_square_root.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_normalize_dot is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_normalize_dot extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_normalize_dot\n\t/// @{\n\n\t/// Normalize parameters and returns the dot product of x and y.\n\t/// It's faster that dot(normalize(x), normalize(y)).\n\t///\n\t/// @see gtx_normalize_dot extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T normalizeDot(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Normalize parameters and returns the dot product of x and y.\n\t/// Faster that dot(fastNormalize(x), fastNormalize(y)).\n\t///\n\t/// @see gtx_normalize_dot extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T fastNormalizeDot(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// @}\n}//namespace glm\n\n#include \"normalize_dot.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/normalize_dot.inl",
    "content": "/// @ref gtx_normalize_dot\n\nnamespace glm\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T normalizeDot(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\treturn glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T fastNormalizeDot(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\treturn glm::dot(x, y) * glm::fastInverseSqrt(glm::dot(x, x) * glm::dot(y, y));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/number_precision.hpp",
    "content": "/// @ref gtx_number_precision\n/// @file glm/gtx/number_precision.hpp\n///\n/// @see core (dependence)\n/// @see gtc_type_precision (dependence)\n/// @see gtc_quaternion (dependence)\n///\n/// @defgroup gtx_number_precision GLM_GTX_number_precision\n/// @ingroup gtx\n///\n/// Include <glm/gtx/number_precision.hpp> to use the features of this extension.\n///\n/// Defined size types.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/type_precision.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_number_precision is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_number_precision extension included\")\n#\tendif\n#endif\n\nnamespace glm{\nnamespace gtx\n{\n\t/////////////////////////////\n\t// Unsigned int vector types\n\n\t/// @addtogroup gtx_number_precision\n\t/// @{\n\n\ttypedef u8\t\t\tu8vec1;\t\t//!< \\brief 8bit unsigned integer scalar. (from GLM_GTX_number_precision extension)\n\ttypedef u16\t\t\tu16vec1;    //!< \\brief 16bit unsigned integer scalar. (from GLM_GTX_number_precision extension)\n\ttypedef u32\t\t\tu32vec1;    //!< \\brief 32bit unsigned integer scalar. (from GLM_GTX_number_precision extension)\n\ttypedef u64\t\t\tu64vec1;    //!< \\brief 64bit unsigned integer scalar. (from GLM_GTX_number_precision extension)\n\n\t//////////////////////\n\t// Float vector types\n\n\ttypedef f32\t\t\tf32vec1;    //!< \\brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)\n\ttypedef f64\t\t\tf64vec1;    //!< \\brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)\n\n\t//////////////////////\n\t// Float matrix types\n\n\ttypedef f32\t\t\tf32mat1;\t//!< \\brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)\n\ttypedef f32\t\t\tf32mat1x1;\t//!< \\brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)\n\ttypedef f64\t\t\tf64mat1;\t//!< \\brief Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)\n\ttypedef f64\t\t\tf64mat1x1;\t//!< \\brief Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension)\n\n\t/// @}\n}//namespace gtx\n}//namespace glm\n\n#include \"number_precision.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/number_precision.inl",
    "content": "/// @ref gtx_number_precision\n\nnamespace glm\n{\n\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/optimum_pow.hpp",
    "content": "/// @ref gtx_optimum_pow\n/// @file glm/gtx/optimum_pow.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_optimum_pow GLM_GTX_optimum_pow\n/// @ingroup gtx\n///\n/// Include <glm/gtx/optimum_pow.hpp> to use the features of this extension.\n///\n/// Integer exponentiation of power functions.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_optimum_pow is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_optimum_pow extension included\")\n#\tendif\n#endif\n\nnamespace glm{\nnamespace gtx\n{\n\t/// @addtogroup gtx_optimum_pow\n\t/// @{\n\n\t/// Returns x raised to the power of 2.\n\t///\n\t/// @see gtx_optimum_pow\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType pow2(genType const& x);\n\n\t/// Returns x raised to the power of 3.\n\t///\n\t/// @see gtx_optimum_pow\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType pow3(genType const& x);\n\n\t/// Returns x raised to the power of 4.\n\t///\n\t/// @see gtx_optimum_pow\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType pow4(genType const& x);\n\n\t/// @}\n}//namespace gtx\n}//namespace glm\n\n#include \"optimum_pow.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/optimum_pow.inl",
    "content": "/// @ref gtx_optimum_pow\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType pow2(genType const& x)\n\t{\n\t\treturn x * x;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType pow3(genType const& x)\n\t{\n\t\treturn x * x * x;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType pow4(genType const& x)\n\t{\n\t\treturn (x * x) * (x * x);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/orthonormalize.hpp",
    "content": "/// @ref gtx_orthonormalize\n/// @file glm/gtx/orthonormalize.hpp\n///\n/// @see core (dependence)\n/// @see gtx_extented_min_max (dependence)\n///\n/// @defgroup gtx_orthonormalize GLM_GTX_orthonormalize\n/// @ingroup gtx\n///\n/// Include <glm/gtx/orthonormalize.hpp> to use the features of this extension.\n///\n/// Orthonormalize matrices.\n\n#pragma once\n\n// Dependency:\n#include \"../vec3.hpp\"\n#include \"../mat3x3.hpp\"\n#include \"../geometric.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_orthonormalize is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_orthonormalize extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_orthonormalize\n\t/// @{\n\n\t/// Returns the orthonormalized matrix of m.\n\t///\n\t/// @see gtx_orthonormalize\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> orthonormalize(mat<3, 3, T, Q> const& m);\n\n\t/// Orthonormalizes x according y.\n\t///\n\t/// @see gtx_orthonormalize\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> orthonormalize(vec<3, T, Q> const& x, vec<3, T, Q> const& y);\n\n\t/// @}\n}//namespace glm\n\n#include \"orthonormalize.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/orthonormalize.inl",
    "content": "/// @ref gtx_orthonormalize\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> orthonormalize(mat<3, 3, T, Q> const& m)\n\t{\n\t\tmat<3, 3, T, Q> r = m;\n\n\t\tr[0] = normalize(r[0]);\n\n\t\tT d0 = dot(r[0], r[1]);\n\t\tr[1] -= r[0] * d0;\n\t\tr[1] = normalize(r[1]);\n\n\t\tT d1 = dot(r[1], r[2]);\n\t\td0 = dot(r[0], r[2]);\n\t\tr[2] -= r[0] * d0 + r[1] * d1;\n\t\tr[2] = normalize(r[2]);\n\n\t\treturn r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> orthonormalize(vec<3, T, Q> const& x, vec<3, T, Q> const& y)\n\t{\n\t\treturn normalize(x - y * dot(y, x));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/pca.hpp",
    "content": "/// @ref gtx_pca\n/// @file glm/gtx/pca.hpp\n///\n/// @see core (dependence)\n/// @see ext_scalar_relational (dependence)\n///\n/// @defgroup gtx_pca GLM_GTX_pca\n/// @ingroup gtx\n///\n/// Include <glm/gtx/pca.hpp> to use the features of this extension.\n///\n/// Implements functions required for fundamental 'princple component analysis' in 2D, 3D, and 4D:\n///   1) Computing a covariance matrics from a list of _relative_ position vectors\n///   2) Compute the eigenvalues and eigenvectors of the covariance matrics\n/// This is useful, e.g., to compute an object-aligned bounding box from vertices of an object.\n/// https://en.wikipedia.org/wiki/Principal_component_analysis\n///\n/// Example:\n/// ```\n/// std::vector<glm::dvec3> ptData;\n/// // ... fill ptData with some point data, e.g. vertices\n/// \n/// glm::dvec3 center = computeCenter(ptData);\n/// \n/// glm::dmat3 covarMat = glm::computeCovarianceMatrix(ptData.data(), ptData.size(), center);\n/// \n/// glm::dvec3 evals;\n/// glm::dmat3 evecs;\n/// int evcnt = glm::findEigenvaluesSymReal(covarMat, evals, evecs);\n/// \n/// if(evcnt != 3)\n///     // ... error handling\n/// \n/// glm::sortEigenvalues(evals, evecs);\n/// \n/// // ... now evecs[0] points in the direction (symmetric) of the largest spatial distribution within ptData\n/// ```\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../ext/scalar_relational.hpp\"\n\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_pca is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_pca extension included\")\n#\tendif\n#endif\n\nnamespace glm {\n\t/// @addtogroup gtx_pca\n\t/// @{\n\n\t/// Compute a covariance matrix form an array of relative coordinates `v` (e.g., relative to the center of gravity of the object)\n\t/// @param v Points to a memory holding `n` times vectors\n\t/// @param n Number of points in v\n\ttemplate<length_t D, typename T, qualifier Q>\n\tGLM_INLINE mat<D, D, T, Q> computeCovarianceMatrix(vec<D, T, Q> const* v, size_t n);\n\n\t/// Compute a covariance matrix form an array of absolute coordinates `v` and a precomputed center of gravity `c`\n\t/// @param v Points to a memory holding `n` times vectors\n\t/// @param n Number of points in v\n\t/// @param c Precomputed center of gravity\n\ttemplate<length_t D, typename T, qualifier Q>\n\tGLM_INLINE mat<D, D, T, Q> computeCovarianceMatrix(vec<D, T, Q> const* v, size_t n, vec<D, T, Q> const& c);\n\n\t/// Compute a covariance matrix form a pair of iterators `b` (begin) and `e` (end) of a container with relative coordinates (e.g., relative to the center of gravity of the object)\n\t/// Dereferencing an iterator of type I must yield a `vec&lt;D, T, Q%gt;`\n\ttemplate<length_t D, typename T, qualifier Q, typename I>\n\tGLM_FUNC_DECL mat<D, D, T, Q> computeCovarianceMatrix(I const& b, I const& e);\n\n\t/// Compute a covariance matrix form a pair of iterators `b` (begin) and `e` (end) of a container with absolute coordinates and a precomputed center of gravity `c`\n\t/// Dereferencing an iterator of type I must yield a `vec&lt;D, T, Q%gt;`\n\ttemplate<length_t D, typename T, qualifier Q, typename I>\n\tGLM_FUNC_DECL mat<D, D, T, Q> computeCovarianceMatrix(I const& b, I const& e, vec<D, T, Q> const& c);\n\n\t/// Assuming the provided covariance matrix `covarMat` is symmetric and real-valued, this function find the `D` Eigenvalues of the matrix, and also provides the corresponding Eigenvectors.\n\t/// Note: the data in `outEigenvalues` and `outEigenvectors` are in matching order, i.e. `outEigenvector[i]` is the Eigenvector of the Eigenvalue `outEigenvalue[i]`.\n\t/// This is a numeric implementation to find the Eigenvalues, using 'QL decomposition` (variant of QR decomposition: https://en.wikipedia.org/wiki/QR_decomposition).\n\t///\n\t/// @param[in] covarMat A symmetric, real-valued covariance matrix, e.g. computed from computeCovarianceMatrix\n\t/// @param[out] outEigenvalues Vector to receive the found eigenvalues\n\t/// @param[out] outEigenvectors Matrix to receive the found eigenvectors corresponding to the found eigenvalues, as column vectors\n\t/// @return The number of eigenvalues found, usually D if the precondition of the covariance matrix is met.\n\ttemplate<length_t D, typename T, qualifier Q>\n\tGLM_FUNC_DECL unsigned int findEigenvaluesSymReal\n\t(\n\t\tmat<D, D, T, Q> const& covarMat,\n\t\tvec<D, T, Q>& outEigenvalues,\n\t\tmat<D, D, T, Q>& outEigenvectors\n\t);\n\n\t/// Sorts a group of Eigenvalues&Eigenvectors, for largest Eigenvalue to smallest Eigenvalue.\n\t/// The data in `outEigenvalues` and `outEigenvectors` are assumed to be matching order, i.e. `outEigenvector[i]` is the Eigenvector of the Eigenvalue `outEigenvalue[i]`.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL void sortEigenvalues(vec<2, T, Q>& eigenvalues, mat<2, 2, T, Q>& eigenvectors);\n\n\t/// Sorts a group of Eigenvalues&Eigenvectors, for largest Eigenvalue to smallest Eigenvalue.\n\t/// The data in `outEigenvalues` and `outEigenvectors` are assumed to be matching order, i.e. `outEigenvector[i]` is the Eigenvector of the Eigenvalue `outEigenvalue[i]`.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL void sortEigenvalues(vec<3, T, Q>& eigenvalues, mat<3, 3, T, Q>& eigenvectors);\n\n\t/// Sorts a group of Eigenvalues&Eigenvectors, for largest Eigenvalue to smallest Eigenvalue.\n\t/// The data in `outEigenvalues` and `outEigenvectors` are assumed to be matching order, i.e. `outEigenvector[i]` is the Eigenvector of the Eigenvalue `outEigenvalue[i]`.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL void sortEigenvalues(vec<4, T, Q>& eigenvalues, mat<4, 4, T, Q>& eigenvectors);\n\n\t/// @}\n}//namespace glm\n\n#include \"pca.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/pca.inl",
    "content": "/// @ref gtx_pca\n\n#ifndef GLM_HAS_CXX11_STL\n#include <algorithm>\n#else\n#include <utility>\n#endif\n\nnamespace glm {\n\n\n\ttemplate<length_t D, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<D, D, T, Q> computeCovarianceMatrix(vec<D, T, Q> const* v, size_t n)\n\t{\n\t\treturn computeCovarianceMatrix<D, T, Q, vec<D, T, Q> const*>(v, v + n);\n\t}\n\n\n\ttemplate<length_t D, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<D, D, T, Q> computeCovarianceMatrix(vec<D, T, Q> const* v, size_t n, vec<D, T, Q> const& c)\n\t{\n\t\treturn computeCovarianceMatrix<D, T, Q, vec<D, T, Q> const*>(v, v + n, c);\n\t}\n\n\n\ttemplate<length_t D, typename T, qualifier Q, typename I>\n\tGLM_FUNC_QUALIFIER mat<D, D, T, Q> computeCovarianceMatrix(I const& b, I const& e)\n\t{\n\t\tglm::mat<D, D, T, Q> m(0);\n\n\t\tsize_t cnt = 0;\n\t\tfor(I i = b; i != e; i++)\n\t\t{\n\t\t\tvec<D, T, Q> const& v = *i;\n\t\t\tfor(length_t x = 0; x < D; ++x)\n\t\t\t\tfor(length_t y = 0; y < D; ++y)\n\t\t\t\t\tm[x][y] += static_cast<T>(v[x] * v[y]);\n\t\t\tcnt++;\n\t\t}\n\t\tif(cnt > 0)\n\t\t\tm /= static_cast<T>(cnt);\n\n\t\treturn m;\n\t}\n\n\n\ttemplate<length_t D, typename T, qualifier Q, typename I>\n\tGLM_FUNC_QUALIFIER mat<D, D, T, Q> computeCovarianceMatrix(I const& b, I const& e, vec<D, T, Q> const& c)\n\t{\n\t\tglm::mat<D, D, T, Q> m(0);\n\t\tglm::vec<D, T, Q> v;\n\n\t\tsize_t cnt = 0;\n\t\tfor(I i = b; i != e; i++)\n\t\t{\n\t\t\tv = *i - c;\n\t\t\tfor(length_t x = 0; x < D; ++x)\n\t\t\t\tfor(length_t y = 0; y < D; ++y)\n\t\t\t\t\tm[x][y] += static_cast<T>(v[x] * v[y]);\n\t\t\tcnt++;\n\t\t}\n\t\tif(cnt > 0)\n\t\t\tm /= static_cast<T>(cnt);\n\n\t\treturn m;\n\t}\n\n\tnamespace _internal_\n\t{\n\n\t\ttemplate<typename T>\n\t\tGLM_FUNC_QUALIFIER static T transferSign(T const& v, T const& s)\n\t\t{\n\t\t\treturn ((s) >= 0 ? glm::abs(v) : -glm::abs(v));\n\t\t}\n\n\t\ttemplate<typename T>\n\t\tGLM_FUNC_QUALIFIER static T pythag(T const& a, T const& b) {\n\t\t\tstatic const T epsilon = static_cast<T>(0.0000001);\n\t\t\tT absa = glm::abs(a);\n\t\t\tT absb = glm::abs(b);\n\t\t\tif(absa > absb) {\n\t\t\t\tabsb /= absa;\n\t\t\t\tabsb *= absb;\n\t\t\t\treturn absa * glm::sqrt(static_cast<T>(1) + absb);\n\t\t\t}\n\t\t\tif(glm::equal<T>(absb, 0, epsilon)) return static_cast<T>(0);\n\t\t\tabsa /= absb;\n\t\t\tabsa *= absa;\n\t\t\treturn absb * glm::sqrt(static_cast<T>(1) + absa);\n\t\t}\n\n\t}\n\n\ttemplate<length_t D, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER unsigned int findEigenvaluesSymReal\n\t(\n\t\tmat<D, D, T, Q> const& covarMat,\n\t\tvec<D, T, Q>& outEigenvalues,\n\t\tmat<D, D, T, Q>& outEigenvectors\n\t)\n\t{\n\t\tusing _internal_::transferSign;\n\t\tusing _internal_::pythag;\n\n\t\tT a[D * D]; // matrix -- input and workspace for algorithm (will be changed inplace)\n\t\tT d[D]; // diagonal elements\n\t\tT e[D]; // off-diagonal elements\n\n\t\tfor(length_t r = 0; r < D; r++)\n\t\t\tfor(length_t c = 0; c < D; c++)\n\t\t\t\ta[(r) * D + (c)] = covarMat[c][r];\n\n\t\t// 1. Householder reduction.\n\t\tlength_t l, k, j, i;\n\t\tT scale, hh, h, g, f;\n\t\tstatic const T epsilon = static_cast<T>(0.0000001);\n\n\t\tfor(i = D; i >= 2; i--)\n\t\t{\n\t\t\tl = i - 1;\n\t\t\th = scale = 0;\n\t\t\tif(l > 1)\n\t\t\t{\n\t\t\t\tfor(k = 1; k <= l; k++)\n\t\t\t\t{\n\t\t\t\t\tscale += glm::abs(a[(i - 1) * D + (k - 1)]);\n\t\t\t\t}\n\t\t\t\tif(glm::equal<T>(scale, 0, epsilon))\n\t\t\t\t{\n\t\t\t\t\te[i - 1] = a[(i - 1) * D + (l - 1)];\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfor(k = 1; k <= l; k++)\n\t\t\t\t\t{\n\t\t\t\t\t\ta[(i - 1) * D + (k - 1)] /= scale;\n\t\t\t\t\t\th += a[(i - 1) * D + (k - 1)] * a[(i - 1) * D + (k - 1)];\n\t\t\t\t\t}\n\t\t\t\t\tf = a[(i - 1) * D + (l - 1)];\n\t\t\t\t\tg = ((f >= 0) ? -glm::sqrt(h) : glm::sqrt(h));\n\t\t\t\t\te[i - 1] = scale * g;\n\t\t\t\t\th -= f * g;\n\t\t\t\t\ta[(i - 1) * D + (l - 1)] = f - g;\n\t\t\t\t\tf = 0;\n\t\t\t\t\tfor(j = 1; j <= l; j++)\n\t\t\t\t\t{\n\t\t\t\t\t\ta[(j - 1) * D + (i - 1)] = a[(i - 1) * D + (j - 1)] / h;\n\t\t\t\t\t\tg = 0;\n\t\t\t\t\t\tfor(k = 1; k <= j; k++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tg += a[(j - 1) * D + (k - 1)] * a[(i - 1) * D + (k - 1)];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor(k = j + 1; k <= l; k++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tg += a[(k - 1) * D + (j - 1)] * a[(i - 1) * D + (k - 1)];\n\t\t\t\t\t\t}\n\t\t\t\t\t\te[j - 1] = g / h;\n\t\t\t\t\t\tf += e[j - 1] * a[(i - 1) * D + (j - 1)];\n\t\t\t\t\t}\n\t\t\t\t\thh = f / (h + h);\n\t\t\t\t\tfor(j = 1; j <= l; j++)\n\t\t\t\t\t{\n\t\t\t\t\t\tf = a[(i - 1) * D + (j - 1)];\n\t\t\t\t\t\te[j - 1] = g = e[j - 1] - hh * f;\n\t\t\t\t\t\tfor(k = 1; k <= j; k++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ta[(j - 1) * D + (k - 1)] -= (f * e[k - 1] + g * a[(i - 1) * D + (k - 1)]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\te[i - 1] = a[(i - 1) * D + (l - 1)];\n\t\t\t}\n\t\t\td[i - 1] = h;\n\t\t}\n\t\td[0] = 0;\n\t\te[0] = 0;\n\t\tfor(i = 1; i <= D; i++)\n\t\t{\n\t\t\tl = i - 1;\n\t\t\tif(!glm::equal<T>(d[i - 1], 0, epsilon))\n\t\t\t{\n\t\t\t\tfor(j = 1; j <= l; j++)\n\t\t\t\t{\n\t\t\t\t\tg = 0;\n\t\t\t\t\tfor(k = 1; k <= l; k++)\n\t\t\t\t\t{\n\t\t\t\t\t\tg += a[(i - 1) * D + (k - 1)] * a[(k - 1) * D + (j - 1)];\n\t\t\t\t\t}\n\t\t\t\t\tfor(k = 1; k <= l; k++)\n\t\t\t\t\t{\n\t\t\t\t\t\ta[(k - 1) * D + (j - 1)] -= g * a[(k - 1) * D + (i - 1)];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\td[i - 1] = a[(i - 1) * D + (i - 1)];\n\t\t\ta[(i - 1) * D + (i - 1)] = 1;\n\t\t\tfor(j = 1; j <= l; j++)\n\t\t\t{\n\t\t\t\ta[(j - 1) * D + (i - 1)] = a[(i - 1) * D + (j - 1)] = 0;\n\t\t\t}\n\t\t}\n\n\t\t// 2. Calculation of eigenvalues and eigenvectors (QL algorithm)\n\t\tlength_t m, iter;\n\t\tT s, r, p, dd, c, b;\n\t\tconst length_t MAX_ITER = 30;\n\n\t\tfor(i = 2; i <= D; i++)\n\t\t{\n\t\t\te[i - 2] = e[i - 1];\n\t\t}\n\t\te[D - 1] = 0;\n\n\t\tfor(l = 1; l <= D; l++)\n\t\t{\n\t\t\titer = 0;\n\t\t\tdo\n\t\t\t{\n\t\t\t\tfor(m = l; m <= D - 1; m++)\n\t\t\t\t{\n\t\t\t\t\tdd = glm::abs(d[m - 1]) + glm::abs(d[m - 1 + 1]);\n\t\t\t\t\tif(glm::equal<T>(glm::abs(e[m - 1]) + dd, dd, epsilon))\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(m != l)\n\t\t\t\t{\n\t\t\t\t\tif(iter++ == MAX_ITER)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn 0; // Too many iterations in FindEigenvalues\n\t\t\t\t\t}\n\t\t\t\t\tg = (d[l - 1 + 1] - d[l - 1]) / (2 * e[l - 1]);\n\t\t\t\t\tr = pythag<T>(g, 1);\n\t\t\t\t\tg = d[m - 1] - d[l - 1] + e[l - 1] / (g + transferSign(r, g));\n\t\t\t\t\ts = c = 1;\n\t\t\t\t\tp = 0;\n\t\t\t\t\tfor(i = m - 1; i >= l; i--)\n\t\t\t\t\t{\n\t\t\t\t\t\tf = s * e[i - 1];\n\t\t\t\t\t\tb = c * e[i - 1];\n\t\t\t\t\t\te[i - 1 + 1] = r = pythag(f, g);\n\t\t\t\t\t\tif(glm::equal<T>(r, 0, epsilon))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\td[i - 1 + 1] -= p;\n\t\t\t\t\t\t\te[m - 1] = 0;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ts = f / r;\n\t\t\t\t\t\tc = g / r;\n\t\t\t\t\t\tg = d[i - 1 + 1] - p;\n\t\t\t\t\t\tr = (d[i - 1] - g) * s + 2 * c * b;\n\t\t\t\t\t\td[i - 1 + 1] = g + (p = s * r);\n\t\t\t\t\t\tg = c * r - b;\n\t\t\t\t\t\tfor(k = 1; k <= D; k++)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tf = a[(k - 1) * D + (i - 1 + 1)];\n\t\t\t\t\t\t\ta[(k - 1) * D + (i - 1 + 1)] = s * a[(k - 1) * D + (i - 1)] + c * f;\n\t\t\t\t\t\t\ta[(k - 1) * D + (i - 1)] = c * a[(k - 1) * D + (i - 1)] - s * f;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(glm::equal<T>(r, 0, epsilon) && (i >= l))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\td[l - 1] -= p;\n\t\t\t\t\te[l - 1] = g;\n\t\t\t\t\te[m - 1] = 0;\n\t\t\t\t}\n\t\t\t} while(m != l);\n\t\t}\n\n\t\t// 3. output\n\t\tfor(i = 0; i < D; i++)\n\t\t\toutEigenvalues[i] = d[i];\n\t\tfor(i = 0; i < D; i++)\n\t\t\tfor(j = 0; j < D; j++)\n\t\t\t\toutEigenvectors[i][j] = a[(j) * D + (i)];\n\n\t\treturn D;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER void sortEigenvalues(vec<2, T, Q>& eigenvalues, mat<2, 2, T, Q>& eigenvectors)\n\t{\n\t\tif (eigenvalues[0] < eigenvalues[1])\n\t\t{\n\t\t\tstd::swap(eigenvalues[0], eigenvalues[1]);\n\t\t\tstd::swap(eigenvectors[0], eigenvectors[1]);\n\t\t}\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER void sortEigenvalues(vec<3, T, Q>& eigenvalues, mat<3, 3, T, Q>& eigenvectors)\n\t{\n\t\tif (eigenvalues[0] < eigenvalues[1])\n\t\t{\n\t\t\tstd::swap(eigenvalues[0], eigenvalues[1]);\n\t\t\tstd::swap(eigenvectors[0], eigenvectors[1]);\n\t\t}\n\t\tif (eigenvalues[0] < eigenvalues[2])\n\t\t{\n\t\t\tstd::swap(eigenvalues[0], eigenvalues[2]);\n\t\t\tstd::swap(eigenvectors[0], eigenvectors[2]);\n\t\t}\n\t\tif (eigenvalues[1] < eigenvalues[2])\n\t\t{\n\t\t\tstd::swap(eigenvalues[1], eigenvalues[2]);\n\t\t\tstd::swap(eigenvectors[1], eigenvectors[2]);\n\t\t}\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER void sortEigenvalues(vec<4, T, Q>& eigenvalues, mat<4, 4, T, Q>& eigenvectors)\n\t{\n\t\tif (eigenvalues[0] < eigenvalues[2])\n\t\t{\n\t\t\tstd::swap(eigenvalues[0], eigenvalues[2]);\n\t\t\tstd::swap(eigenvectors[0], eigenvectors[2]);\n\t\t}\n\t\tif (eigenvalues[1] < eigenvalues[3])\n\t\t{\n\t\t\tstd::swap(eigenvalues[1], eigenvalues[3]);\n\t\t\tstd::swap(eigenvectors[1], eigenvectors[3]);\n\t\t}\n\t\tif (eigenvalues[0] < eigenvalues[1])\n\t\t{\n\t\t\tstd::swap(eigenvalues[0], eigenvalues[1]);\n\t\t\tstd::swap(eigenvectors[0], eigenvectors[1]);\n\t\t}\n\t\tif (eigenvalues[2] < eigenvalues[3])\n\t\t{\n\t\t\tstd::swap(eigenvalues[2], eigenvalues[3]);\n\t\t\tstd::swap(eigenvectors[2], eigenvectors[3]);\n\t\t}\n\t\tif (eigenvalues[1] < eigenvalues[2])\n\t\t{\n\t\t\tstd::swap(eigenvalues[1], eigenvalues[2]);\n\t\t\tstd::swap(eigenvectors[1], eigenvectors[2]);\n\t\t}\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/perpendicular.hpp",
    "content": "/// @ref gtx_perpendicular\n/// @file glm/gtx/perpendicular.hpp\n///\n/// @see core (dependence)\n/// @see gtx_projection (dependence)\n///\n/// @defgroup gtx_perpendicular GLM_GTX_perpendicular\n/// @ingroup gtx\n///\n/// Include <glm/gtx/perpendicular.hpp> to use the features of this extension.\n///\n/// Perpendicular of a vector from other one\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtx/projection.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_perpendicular is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_perpendicular extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_perpendicular\n\t/// @{\n\n\t//! Projects x a perpendicular axis of Normal.\n\t//! From GLM_GTX_perpendicular extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType perp(genType const& x, genType const& Normal);\n\n\t/// @}\n}//namespace glm\n\n#include \"perpendicular.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/perpendicular.inl",
    "content": "/// @ref gtx_perpendicular\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType perp(genType const& x, genType const& Normal)\n\t{\n\t\treturn x - proj(x, Normal);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/polar_coordinates.hpp",
    "content": "/// @ref gtx_polar_coordinates\n/// @file glm/gtx/polar_coordinates.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_polar_coordinates GLM_GTX_polar_coordinates\n/// @ingroup gtx\n///\n/// Include <glm/gtx/polar_coordinates.hpp> to use the features of this extension.\n///\n/// Conversion from Euclidean space to polar space and revert.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_polar_coordinates is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_polar_coordinates extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_polar_coordinates\n\t/// @{\n\n\t/// Convert Euclidean to Polar coordinates, x is the latitude, y the longitude and z the xz distance.\n\t///\n\t/// @see gtx_polar_coordinates\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> polar(\n\t\tvec<3, T, Q> const& euclidean);\n\n\t/// Convert Polar to Euclidean coordinates.\n\t///\n\t/// @see gtx_polar_coordinates\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> euclidean(\n\t\tvec<2, T, Q> const& polar);\n\n\t/// @}\n}//namespace glm\n\n#include \"polar_coordinates.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/polar_coordinates.inl",
    "content": "/// @ref gtx_polar_coordinates\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> polar\n\t(\n\t\tvec<3, T, Q> const& euclidean\n\t)\n\t{\n\t\tT const Length(length(euclidean));\n\t\tvec<3, T, Q> const tmp(euclidean / Length);\n\t\tT const xz_dist(sqrt(tmp.x * tmp.x + tmp.z * tmp.z));\n\n\t\treturn vec<3, T, Q>(\n\t\t\tasin(tmp.y),\t// latitude\n\t\t\tatan(tmp.x, tmp.z),\t\t// longitude\n\t\t\txz_dist);\t\t\t\t// xz distance\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> euclidean\n\t(\n\t\tvec<2, T, Q> const& polar\n\t)\n\t{\n\t\tT const latitude(polar.x);\n\t\tT const longitude(polar.y);\n\n\t\treturn vec<3, T, Q>(\n\t\t\tcos(latitude) * sin(longitude),\n\t\t\tsin(latitude),\n\t\t\tcos(latitude) * cos(longitude));\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/projection.hpp",
    "content": "/// @ref gtx_projection\n/// @file glm/gtx/projection.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_projection GLM_GTX_projection\n/// @ingroup gtx\n///\n/// Include <glm/gtx/projection.hpp> to use the features of this extension.\n///\n/// Projection of a vector to other one\n\n#pragma once\n\n// Dependency:\n#include \"../geometric.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_projection is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_projection extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_projection\n\t/// @{\n\n\t/// Projects x on Normal.\n\t///\n\t/// @param[in] x A vector to project\n\t/// @param[in] Normal A normal that doesn't need to be of unit length.\n\t///\n\t/// @see gtx_projection\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType proj(genType const& x, genType const& Normal);\n\n\t/// @}\n}//namespace glm\n\n#include \"projection.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/projection.inl",
    "content": "/// @ref gtx_projection\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType proj(genType const& x, genType const& Normal)\n\t{\n\t\treturn glm::dot(x, Normal) / glm::dot(Normal, Normal) * Normal;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/quaternion.hpp",
    "content": "/// @ref gtx_quaternion\n/// @file glm/gtx/quaternion.hpp\n///\n/// @see core (dependence)\n/// @see gtx_extented_min_max (dependence)\n///\n/// @defgroup gtx_quaternion GLM_GTX_quaternion\n/// @ingroup gtx\n///\n/// Include <glm/gtx/quaternion.hpp> to use the features of this extension.\n///\n/// Extended quaternion types and functions\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/constants.hpp\"\n#include \"../gtc/quaternion.hpp\"\n#include \"../ext/quaternion_exponential.hpp\"\n#include \"../gtx/norm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_quaternion extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_quaternion\n\t/// @{\n\n\t/// Create an identity quaternion.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR qua<T, Q> quat_identity();\n\n\t/// Compute a cross product between a quaternion and a vector.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> cross(\n\t\tqua<T, Q> const& q,\n\t\tvec<3, T, Q> const& v);\n\n\t//! Compute a cross product between a vector and a quaternion.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> cross(\n\t\tvec<3, T, Q> const& v,\n\t\tqua<T, Q> const& q);\n\n\t//! Compute a point on a path according squad equation.\n\t//! q1 and q2 are control points; s1 and s2 are intermediate control points.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> squad(\n\t\tqua<T, Q> const& q1,\n\t\tqua<T, Q> const& q2,\n\t\tqua<T, Q> const& s1,\n\t\tqua<T, Q> const& s2,\n\t\tT const& h);\n\n\t//! Returns an intermediate control point for squad interpolation.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> intermediate(\n\t\tqua<T, Q> const& prev,\n\t\tqua<T, Q> const& curr,\n\t\tqua<T, Q> const& next);\n\n\t//! Returns quarternion square root.\n\t///\n\t/// @see gtx_quaternion\n\t//template<typename T, qualifier Q>\n\t//qua<T, Q> sqrt(\n\t//\tqua<T, Q> const& q);\n\n\t//! Rotates a 3 components vector by a quaternion.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> rotate(\n\t\tqua<T, Q> const& q,\n\t\tvec<3, T, Q> const& v);\n\n\t/// Rotates a 4 components vector by a quaternion.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> rotate(\n\t\tqua<T, Q> const& q,\n\t\tvec<4, T, Q> const& v);\n\n\t/// Extract the real component of a quaternion.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T extractRealComponent(\n\t\tqua<T, Q> const& q);\n\n\t/// Converts a quaternion to a 3 * 3 matrix.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> toMat3(\n\t\tqua<T, Q> const& x){return mat3_cast(x);}\n\n\t/// Converts a quaternion to a 4 * 4 matrix.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> toMat4(\n\t\tqua<T, Q> const& x){return mat4_cast(x);}\n\n\t/// Converts a 3 * 3 matrix to a quaternion.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> toQuat(\n\t\tmat<3, 3, T, Q> const& x){return quat_cast(x);}\n\n\t/// Converts a 4 * 4 matrix to a quaternion.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> toQuat(\n\t\tmat<4, 4, T, Q> const& x){return quat_cast(x);}\n\n\t/// Quaternion interpolation using the rotation short path.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> shortMix(\n\t\tqua<T, Q> const& x,\n\t\tqua<T, Q> const& y,\n\t\tT const& a);\n\n\t/// Quaternion normalized linear interpolation.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> fastMix(\n\t\tqua<T, Q> const& x,\n\t\tqua<T, Q> const& y,\n\t\tT const& a);\n\n\t/// Compute the rotation between two vectors.\n\t/// @param orig vector, needs to be normalized\n\t/// @param dest vector, needs to be normalized\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> rotation(\n\t\tvec<3, T, Q> const& orig,\n\t\tvec<3, T, Q> const& dest);\n\n\t/// Returns the squared length of x.\n\t///\n\t/// @see gtx_quaternion\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR T length2(qua<T, Q> const& q);\n\n\t/// @}\n}//namespace glm\n\n#include \"quaternion.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/quaternion.inl",
    "content": "/// @ref gtx_quaternion\n\n#include <limits>\n#include \"../gtc/constants.hpp\"\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR qua<T, Q> quat_identity()\n\t{\n\t\treturn qua<T, Q>(static_cast<T>(1), static_cast<T>(0), static_cast<T>(0), static_cast<T>(0));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> cross(vec<3, T, Q> const& v, qua<T, Q> const& q)\n\t{\n\t\treturn inverse(q) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> cross(qua<T, Q> const& q, vec<3, T, Q> const& v)\n\t{\n\t\treturn q * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> squad\n\t(\n\t\tqua<T, Q> const& q1,\n\t\tqua<T, Q> const& q2,\n\t\tqua<T, Q> const& s1,\n\t\tqua<T, Q> const& s2,\n\t\tT const& h)\n\t{\n\t\treturn mix(mix(q1, q2, h), mix(s1, s2, h), static_cast<T>(2) * (static_cast<T>(1) - h) * h);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> intermediate\n\t(\n\t\tqua<T, Q> const& prev,\n\t\tqua<T, Q> const& curr,\n\t\tqua<T, Q> const& next\n\t)\n\t{\n\t\tqua<T, Q> invQuat = inverse(curr);\n\t\treturn exp((log(next * invQuat) + log(prev * invQuat)) / static_cast<T>(-4)) * curr;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rotate(qua<T, Q> const& q, vec<3, T, Q> const& v)\n\t{\n\t\treturn q * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> rotate(qua<T, Q> const& q, vec<4, T, Q> const& v)\n\t{\n\t\treturn q * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T extractRealComponent(qua<T, Q> const& q)\n\t{\n\t\tT w = static_cast<T>(1) - q.x * q.x - q.y * q.y - q.z * q.z;\n\t\tif(w < T(0))\n\t\t\treturn T(0);\n\t\telse\n\t\t\treturn -sqrt(w);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR T length2(qua<T, Q> const& q)\n\t{\n\t\treturn q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> shortMix(qua<T, Q> const& x, qua<T, Q> const& y, T const& a)\n\t{\n\t\tif(a <= static_cast<T>(0)) return x;\n\t\tif(a >= static_cast<T>(1)) return y;\n\n\t\tT fCos = dot(x, y);\n\t\tqua<T, Q> y2(y); //BUG!!! qua<T> y2;\n\t\tif(fCos < static_cast<T>(0))\n\t\t{\n\t\t\ty2 = -y;\n\t\t\tfCos = -fCos;\n\t\t}\n\n\t\t//if(fCos > 1.0f) // problem\n\t\tT k0, k1;\n\t\tif(fCos > (static_cast<T>(1) - epsilon<T>()))\n\t\t{\n\t\t\tk0 = static_cast<T>(1) - a;\n\t\t\tk1 = static_cast<T>(0) + a; //BUG!!! 1.0f + a;\n\t\t}\n\t\telse\n\t\t{\n\t\t\tT fSin = sqrt(T(1) - fCos * fCos);\n\t\t\tT fAngle = atan(fSin, fCos);\n\t\t\tT fOneOverSin = static_cast<T>(1) / fSin;\n\t\t\tk0 = sin((static_cast<T>(1) - a) * fAngle) * fOneOverSin;\n\t\t\tk1 = sin((static_cast<T>(0) + a) * fAngle) * fOneOverSin;\n\t\t}\n\n\t\treturn qua<T, Q>(\n\t\t\tk0 * x.w + k1 * y2.w,\n\t\t\tk0 * x.x + k1 * y2.x,\n\t\t\tk0 * x.y + k1 * y2.y,\n\t\t\tk0 * x.z + k1 * y2.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> fastMix(qua<T, Q> const& x, qua<T, Q> const& y, T const& a)\n\t{\n\t\treturn glm::normalize(x * (static_cast<T>(1) - a) + (y * a));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> rotation(vec<3, T, Q> const& orig, vec<3, T, Q> const& dest)\n\t{\n\t\tT cosTheta = dot(orig, dest);\n\t\tvec<3, T, Q> rotationAxis;\n\n\t\tif(cosTheta >= static_cast<T>(1) - epsilon<T>()) {\n\t\t\t// orig and dest point in the same direction\n\t\t\treturn quat_identity<T,Q>();\n\t\t}\n\n\t\tif(cosTheta < static_cast<T>(-1) + epsilon<T>())\n\t\t{\n\t\t\t// special case when vectors in opposite directions :\n\t\t\t// there is no \"ideal\" rotation axis\n\t\t\t// So guess one; any will do as long as it's perpendicular to start\n\t\t\t// This implementation favors a rotation around the Up axis (Y),\n\t\t\t// since it's often what you want to do.\n\t\t\trotationAxis = cross(vec<3, T, Q>(0, 0, 1), orig);\n\t\t\tif(length2(rotationAxis) < epsilon<T>()) // bad luck, they were parallel, try again!\n\t\t\t\trotationAxis = cross(vec<3, T, Q>(1, 0, 0), orig);\n\n\t\t\trotationAxis = normalize(rotationAxis);\n\t\t\treturn angleAxis(pi<T>(), rotationAxis);\n\t\t}\n\n\t\t// Implementation from Stan Melax's Game Programming Gems 1 article\n\t\trotationAxis = cross(orig, dest);\n\n\t\tT s = sqrt((T(1) + cosTheta) * static_cast<T>(2));\n\t\tT invs = static_cast<T>(1) / s;\n\n\t\treturn qua<T, Q>(\n\t\t\ts * static_cast<T>(0.5f),\n\t\t\trotationAxis.x * invs,\n\t\t\trotationAxis.y * invs,\n\t\t\trotationAxis.z * invs);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/range.hpp",
    "content": "/// @ref gtx_range\n/// @file glm/gtx/range.hpp\n/// @author Joshua Moerman\n///\n/// @defgroup gtx_range GLM_GTX_range\n/// @ingroup gtx\n///\n/// Include <glm/gtx/range.hpp> to use the features of this extension.\n///\n/// Defines begin and end for vectors and matrices. Useful for range-based for loop.\n/// The range is defined over the elements, not over columns or rows (e.g. mat4 has 16 elements).\n\n#pragma once\n\n// Dependencies\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_range is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_range extension included\")\n#\tendif\n#endif\n\n#include \"../gtc/type_ptr.hpp\"\n#include \"../gtc/vec1.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup gtx_range\n\t/// @{\n\n#\tif GLM_COMPILER & GLM_COMPILER_VC\n#\t\tpragma warning(push)\n#\t\tpragma warning(disable : 4100) // unreferenced formal parameter\n#\tendif\n\n\ttemplate<typename T, qualifier Q>\n\tinline length_t components(vec<1, T, Q> const& v)\n\t{\n\t\treturn v.length();\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tinline length_t components(vec<2, T, Q> const& v)\n\t{\n\t\treturn v.length();\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tinline length_t components(vec<3, T, Q> const& v)\n\t{\n\t\treturn v.length();\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tinline length_t components(vec<4, T, Q> const& v)\n\t{\n\t\treturn v.length();\n\t}\n\n\ttemplate<typename genType>\n\tinline length_t components(genType const& m)\n\t{\n\t\treturn m.length() * m[0].length();\n\t}\n\n\ttemplate<typename genType>\n\tinline typename genType::value_type const * begin(genType const& v)\n\t{\n\t\treturn value_ptr(v);\n\t}\n\n\ttemplate<typename genType>\n\tinline typename genType::value_type const * end(genType const& v)\n\t{\n\t\treturn begin(v) + components(v);\n\t}\n\n\ttemplate<typename genType>\n\tinline typename genType::value_type * begin(genType& v)\n\t{\n\t\treturn value_ptr(v);\n\t}\n\n\ttemplate<typename genType>\n\tinline typename genType::value_type * end(genType& v)\n\t{\n\t\treturn begin(v) + components(v);\n\t}\n\n#\tif GLM_COMPILER & GLM_COMPILER_VC\n#\t\tpragma warning(pop)\n#\tendif\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/raw_data.hpp",
    "content": "/// @ref gtx_raw_data\n/// @file glm/gtx/raw_data.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_raw_data GLM_GTX_raw_data\n/// @ingroup gtx\n///\n/// Include <glm/gtx/raw_data.hpp> to use the features of this extension.\n///\n/// Projection of a vector to other one\n\n#pragma once\n\n// Dependencies\n#include \"../ext/scalar_uint_sized.hpp\"\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_raw_data is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_raw_data extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_raw_data\n\t/// @{\n\n\t//! Type for byte numbers.\n\t//! From GLM_GTX_raw_data extension.\n\ttypedef detail::uint8\t\tbyte;\n\n\t//! Type for word numbers.\n\t//! From GLM_GTX_raw_data extension.\n\ttypedef detail::uint16\t\tword;\n\n\t//! Type for dword numbers.\n\t//! From GLM_GTX_raw_data extension.\n\ttypedef detail::uint32\t\tdword;\n\n\t//! Type for qword numbers.\n\t//! From GLM_GTX_raw_data extension.\n\ttypedef detail::uint64\t\tqword;\n\n\t/// @}\n}// namespace glm\n\n#include \"raw_data.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/raw_data.inl",
    "content": "/// @ref gtx_raw_data\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/rotate_normalized_axis.hpp",
    "content": "/// @ref gtx_rotate_normalized_axis\n/// @file glm/gtx/rotate_normalized_axis.hpp\n///\n/// @see core (dependence)\n/// @see gtc_matrix_transform\n/// @see gtc_quaternion\n///\n/// @defgroup gtx_rotate_normalized_axis GLM_GTX_rotate_normalized_axis\n/// @ingroup gtx\n///\n/// Include <glm/gtx/rotate_normalized_axis.hpp> to use the features of this extension.\n///\n/// Quaternions and matrices rotations around normalized axis.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/epsilon.hpp\"\n#include \"../gtc/quaternion.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_rotate_normalized_axis is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_rotate_normalized_axis extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_rotate_normalized_axis\n\t/// @{\n\n\t/// Builds a rotation 4 * 4 matrix created from a normalized axis and an angle.\n\t///\n\t/// @param m Input matrix multiplied by this rotation matrix.\n\t/// @param angle Rotation angle expressed in radians.\n\t/// @param axis Rotation axis, must be normalized.\n\t/// @tparam T Value type used to build the matrix. Currently supported: half (not recommended), float or double.\n\t///\n\t/// @see gtx_rotate_normalized_axis\n\t/// @see - rotate(T angle, T x, T y, T z)\n\t/// @see - rotate(mat<4, 4, T, Q> const& m, T angle, T x, T y, T z)\n\t/// @see - rotate(T angle, vec<3, T, Q> const& v)\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> rotateNormalizedAxis(\n\t\tmat<4, 4, T, Q> const& m,\n\t\tT const& angle,\n\t\tvec<3, T, Q> const& axis);\n\n\t/// Rotates a quaternion from a vector of 3 components normalized axis and an angle.\n\t///\n\t/// @param q Source orientation\n\t/// @param angle Angle expressed in radians.\n\t/// @param axis Normalized axis of the rotation, must be normalized.\n\t///\n\t/// @see gtx_rotate_normalized_axis\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL qua<T, Q> rotateNormalizedAxis(\n\t\tqua<T, Q> const& q,\n\t\tT const& angle,\n\t\tvec<3, T, Q> const& axis);\n\n\t/// @}\n}//namespace glm\n\n#include \"rotate_normalized_axis.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/rotate_normalized_axis.inl",
    "content": "/// @ref gtx_rotate_normalized_axis\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotateNormalizedAxis\n\t(\n\t\tmat<4, 4, T, Q> const& m,\n\t\tT const& angle,\n\t\tvec<3, T, Q> const& v\n\t)\n\t{\n\t\tT const a = angle;\n\t\tT const c = cos(a);\n\t\tT const s = sin(a);\n\n\t\tvec<3, T, Q> const axis(v);\n\n\t\tvec<3, T, Q> const temp((static_cast<T>(1) - c) * axis);\n\n\t\tmat<4, 4, T, Q> Rotate;\n\t\tRotate[0][0] = c + temp[0] * axis[0];\n\t\tRotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2];\n\t\tRotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1];\n\n\t\tRotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2];\n\t\tRotate[1][1] = c + temp[1] * axis[1];\n\t\tRotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0];\n\n\t\tRotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1];\n\t\tRotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0];\n\t\tRotate[2][2] = c + temp[2] * axis[2];\n\n\t\tmat<4, 4, T, Q> Result;\n\t\tResult[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2];\n\t\tResult[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2];\n\t\tResult[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2];\n\t\tResult[3] = m[3];\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER qua<T, Q> rotateNormalizedAxis\n\t(\n\t\tqua<T, Q> const& q,\n\t\tT const& angle,\n\t\tvec<3, T, Q> const& v\n\t)\n\t{\n\t\tvec<3, T, Q> const Tmp(v);\n\n\t\tT const AngleRad(angle);\n\t\tT const Sin = sin(AngleRad * T(0.5));\n\n\t\treturn q * qua<T, Q>(cos(AngleRad * static_cast<T>(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin);\n\t\t//return gtc::quaternion::cross(q, tquat<T, Q>(cos(AngleRad * T(0.5)), Tmp.x * fSin, Tmp.y * fSin, Tmp.z * fSin));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/rotate_vector.hpp",
    "content": "/// @ref gtx_rotate_vector\n/// @file glm/gtx/rotate_vector.hpp\n///\n/// @see core (dependence)\n/// @see gtx_transform (dependence)\n///\n/// @defgroup gtx_rotate_vector GLM_GTX_rotate_vector\n/// @ingroup gtx\n///\n/// Include <glm/gtx/rotate_vector.hpp> to use the features of this extension.\n///\n/// Function to directly rotate a vector\n\n#pragma once\n\n// Dependency:\n#include \"../gtx/transform.hpp\"\n#include \"../gtc/epsilon.hpp\"\n#include \"../ext/vector_relational.hpp\"\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_rotate_vector is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_rotate_vector extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_rotate_vector\n\t/// @{\n\n\t/// Returns Spherical interpolation between two vectors\n\t///\n\t/// @param x A first vector\n\t/// @param y A second vector\n\t/// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1].\n\t///\n\t/// @see gtx_rotate_vector\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> slerp(\n\t\tvec<3, T, Q> const& x,\n\t\tvec<3, T, Q> const& y,\n\t\tT const& a);\n\n\t//! Rotate a two dimensional vector.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<2, T, Q> rotate(\n\t\tvec<2, T, Q> const& v,\n\t\tT const& angle);\n\n\t//! Rotate a three dimensional vector around an axis.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> rotate(\n\t\tvec<3, T, Q> const& v,\n\t\tT const& angle,\n\t\tvec<3, T, Q> const& normal);\n\n\t//! Rotate a four dimensional vector around an axis.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> rotate(\n\t\tvec<4, T, Q> const& v,\n\t\tT const& angle,\n\t\tvec<3, T, Q> const& normal);\n\n\t//! Rotate a three dimensional vector around the X axis.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> rotateX(\n\t\tvec<3, T, Q> const& v,\n\t\tT const& angle);\n\n\t//! Rotate a three dimensional vector around the Y axis.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> rotateY(\n\t\tvec<3, T, Q> const& v,\n\t\tT const& angle);\n\n\t//! Rotate a three dimensional vector around the Z axis.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<3, T, Q> rotateZ(\n\t\tvec<3, T, Q> const& v,\n\t\tT const& angle);\n\n\t//! Rotate a four dimensional vector around the X axis.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> rotateX(\n\t\tvec<4, T, Q> const& v,\n\t\tT const& angle);\n\n\t//! Rotate a four dimensional vector around the Y axis.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> rotateY(\n\t\tvec<4, T, Q> const& v,\n\t\tT const& angle);\n\n\t//! Rotate a four dimensional vector around the Z axis.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<4, T, Q> rotateZ(\n\t\tvec<4, T, Q> const& v,\n\t\tT const& angle);\n\n\t//! Build a rotation matrix from a normal and a up vector.\n\t//! From GLM_GTX_rotate_vector extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> orientation(\n\t\tvec<3, T, Q> const& Normal,\n\t\tvec<3, T, Q> const& Up);\n\n\t/// @}\n}//namespace glm\n\n#include \"rotate_vector.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/rotate_vector.inl",
    "content": "/// @ref gtx_rotate_vector\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> slerp\n\t(\n\t\tvec<3, T, Q> const& x,\n\t\tvec<3, T, Q> const& y,\n\t\tT const& a\n\t)\n\t{\n\t\t// get cosine of angle between vectors (-1 -> 1)\n\t\tT CosAlpha = dot(x, y);\n\t\t// get angle (0 -> pi)\n\t\tT Alpha = acos(CosAlpha);\n\t\t// get sine of angle between vectors (0 -> 1)\n\t\tT SinAlpha = sin(Alpha);\n\t\t// this breaks down when SinAlpha = 0, i.e. Alpha = 0 or pi\n\t\tT t1 = sin((static_cast<T>(1) - a) * Alpha) / SinAlpha;\n\t\tT t2 = sin(a * Alpha) / SinAlpha;\n\n\t\t// interpolate src vectors\n\t\treturn x * t1 + y * t2;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, T, Q> rotate\n\t(\n\t\tvec<2, T, Q> const& v,\n\t\tT const& angle\n\t)\n\t{\n\t\tvec<2, T, Q> Result;\n\t\tT const Cos(cos(angle));\n\t\tT const Sin(sin(angle));\n\n\t\tResult.x = v.x * Cos - v.y * Sin;\n\t\tResult.y = v.x * Sin + v.y * Cos;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rotate\n\t(\n\t\tvec<3, T, Q> const& v,\n\t\tT const& angle,\n\t\tvec<3, T, Q> const& normal\n\t)\n\t{\n\t\treturn mat<3, 3, T, Q>(glm::rotate(angle, normal)) * v;\n\t}\n\t/*\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rotateGTX(\n\t\tconst vec<3, T, Q>& x,\n\t\tT angle,\n\t\tconst vec<3, T, Q>& normal)\n\t{\n\t\tconst T Cos = cos(radians(angle));\n\t\tconst T Sin = sin(radians(angle));\n\t\treturn x * Cos + ((x * normal) * (T(1) - Cos)) * normal + cross(x, normal) * Sin;\n\t}\n\t*/\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> rotate\n\t(\n\t\tvec<4, T, Q> const& v,\n\t\tT const& angle,\n\t\tvec<3, T, Q> const& normal\n\t)\n\t{\n\t\treturn rotate(angle, normal) * v;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rotateX\n\t(\n\t\tvec<3, T, Q> const& v,\n\t\tT const& angle\n\t)\n\t{\n\t\tvec<3, T, Q> Result(v);\n\t\tT const Cos(cos(angle));\n\t\tT const Sin(sin(angle));\n\n\t\tResult.y = v.y * Cos - v.z * Sin;\n\t\tResult.z = v.y * Sin + v.z * Cos;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rotateY\n\t(\n\t\tvec<3, T, Q> const& v,\n\t\tT const& angle\n\t)\n\t{\n\t\tvec<3, T, Q> Result = v;\n\t\tT const Cos(cos(angle));\n\t\tT const Sin(sin(angle));\n\n\t\tResult.x =  v.x * Cos + v.z * Sin;\n\t\tResult.z = -v.x * Sin + v.z * Cos;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, T, Q> rotateZ\n\t(\n\t\tvec<3, T, Q> const& v,\n\t\tT const& angle\n\t)\n\t{\n\t\tvec<3, T, Q> Result = v;\n\t\tT const Cos(cos(angle));\n\t\tT const Sin(sin(angle));\n\n\t\tResult.x = v.x * Cos - v.y * Sin;\n\t\tResult.y = v.x * Sin + v.y * Cos;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> rotateX\n\t(\n\t\tvec<4, T, Q> const& v,\n\t\tT const& angle\n\t)\n\t{\n\t\tvec<4, T, Q> Result = v;\n\t\tT const Cos(cos(angle));\n\t\tT const Sin(sin(angle));\n\n\t\tResult.y = v.y * Cos - v.z * Sin;\n\t\tResult.z = v.y * Sin + v.z * Cos;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> rotateY\n\t(\n\t\tvec<4, T, Q> const& v,\n\t\tT const& angle\n\t)\n\t{\n\t\tvec<4, T, Q> Result = v;\n\t\tT const Cos(cos(angle));\n\t\tT const Sin(sin(angle));\n\n\t\tResult.x =  v.x * Cos + v.z * Sin;\n\t\tResult.z = -v.x * Sin + v.z * Cos;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, T, Q> rotateZ\n\t(\n\t\tvec<4, T, Q> const& v,\n\t\tT const& angle\n\t)\n\t{\n\t\tvec<4, T, Q> Result = v;\n\t\tT const Cos(cos(angle));\n\t\tT const Sin(sin(angle));\n\n\t\tResult.x = v.x * Cos - v.y * Sin;\n\t\tResult.y = v.x * Sin + v.y * Cos;\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> orientation\n\t(\n\t\tvec<3, T, Q> const& Normal,\n\t\tvec<3, T, Q> const& Up\n\t)\n\t{\n\t\tif(all(equal(Normal, Up, epsilon<T>())))\n\t\t\treturn mat<4, 4, T, Q>(static_cast<T>(1));\n\n\t\tvec<3, T, Q> RotationAxis = cross(Up, Normal);\n\t\tT Angle = acos(dot(Normal, Up));\n\n\t\treturn rotate(Angle, RotationAxis);\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/scalar_multiplication.hpp",
    "content": "/// @ref gtx_scalar_multiplication\n/// @file glm/gtx/scalar_multiplication.hpp\n/// @author Joshua Moerman\n///\n/// @defgroup gtx_scalar_multiplication GLM_GTX_scalar_multiplication\n/// @ingroup gtx\n///\n/// Include <glm/gtx/scalar_multiplication.hpp> to use the features of this extension.\n///\n/// Enables scalar multiplication for all types\n///\n/// Since GLSL is very strict about types, the following (often used) combinations do not work:\n///    double * vec4\n///    int * vec4\n///    vec4 / int\n/// So we'll fix that! Of course \"float * vec4\" should remain the same (hence the enable_if magic)\n\n#pragma once\n\n#include \"../detail/setup.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_scalar_multiplication is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_scalar_multiplication extension included\")\n#\tendif\n#endif\n\n#include \"../vec2.hpp\"\n#include \"../vec3.hpp\"\n#include \"../vec4.hpp\"\n#include \"../mat2x2.hpp\"\n#include <type_traits>\n\nnamespace glm\n{\n\t/// @addtogroup gtx_scalar_multiplication\n\t/// @{\n\n\ttemplate<typename T, typename Vec>\n\tusing return_type_scalar_multiplication = typename std::enable_if<\n\t\t!std::is_same<T, float>::value       // T may not be a float\n\t\t&& std::is_arithmetic<T>::value, Vec // But it may be an int or double (no vec3 or mat3, ...)\n\t>::type;\n\n#define GLM_IMPLEMENT_SCAL_MULT(Vec) \\\n\ttemplate<typename T> \\\n\treturn_type_scalar_multiplication<T, Vec> \\\n\toperator*(T const& s, Vec rh){ \\\n\t\treturn rh *= static_cast<float>(s); \\\n\t} \\\n\t \\\n\ttemplate<typename T> \\\n\treturn_type_scalar_multiplication<T, Vec> \\\n\toperator*(Vec lh, T const& s){ \\\n\t\treturn lh *= static_cast<float>(s); \\\n\t} \\\n\t \\\n\ttemplate<typename T> \\\n\treturn_type_scalar_multiplication<T, Vec> \\\n\toperator/(Vec lh, T const& s){ \\\n\t\treturn lh *= 1.0f / static_cast<float>(s); \\\n\t}\n\nGLM_IMPLEMENT_SCAL_MULT(vec2)\nGLM_IMPLEMENT_SCAL_MULT(vec3)\nGLM_IMPLEMENT_SCAL_MULT(vec4)\n\nGLM_IMPLEMENT_SCAL_MULT(mat2)\nGLM_IMPLEMENT_SCAL_MULT(mat2x3)\nGLM_IMPLEMENT_SCAL_MULT(mat2x4)\nGLM_IMPLEMENT_SCAL_MULT(mat3x2)\nGLM_IMPLEMENT_SCAL_MULT(mat3)\nGLM_IMPLEMENT_SCAL_MULT(mat3x4)\nGLM_IMPLEMENT_SCAL_MULT(mat4x2)\nGLM_IMPLEMENT_SCAL_MULT(mat4x3)\nGLM_IMPLEMENT_SCAL_MULT(mat4)\n\n#undef GLM_IMPLEMENT_SCAL_MULT\n\t/// @}\n} // namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/scalar_relational.hpp",
    "content": "/// @ref gtx_scalar_relational\n/// @file glm/gtx/scalar_relational.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_scalar_relational GLM_GTX_scalar_relational\n/// @ingroup gtx\n///\n/// Include <glm/gtx/scalar_relational.hpp> to use the features of this extension.\n///\n/// Extend a position from a source to a position at a defined length.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_extend extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_scalar_relational\n\t/// @{\n\n\n\n\t/// @}\n}//namespace glm\n\n#include \"scalar_relational.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/scalar_relational.inl",
    "content": "/// @ref gtx_scalar_relational\n\nnamespace glm\n{\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER bool lessThan\n\t(\n\t\tT const& x,\n\t\tT const& y\n\t)\n\t{\n\t\treturn x < y;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER bool lessThanEqual\n\t(\n\t\tT const& x,\n\t\tT const& y\n\t)\n\t{\n\t\treturn x <= y;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER bool greaterThan\n\t(\n\t\tT const& x,\n\t\tT const& y\n\t)\n\t{\n\t\treturn x > y;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER bool greaterThanEqual\n\t(\n\t\tT const& x,\n\t\tT const& y\n\t)\n\t{\n\t\treturn x >= y;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER bool equal\n\t(\n\t\tT const& x,\n\t\tT const& y\n\t)\n\t{\n\t\treturn detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(x, y);\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER bool notEqual\n\t(\n\t\tT const& x,\n\t\tT const& y\n\t)\n\t{\n\t\treturn !detail::compute_equal<T, std::numeric_limits<T>::is_iec559>::call(x, y);\n\t}\n\n\tGLM_FUNC_QUALIFIER bool any\n\t(\n\t\tbool const& x\n\t)\n\t{\n\t\treturn x;\n\t}\n\n\tGLM_FUNC_QUALIFIER bool all\n\t(\n\t\tbool const& x\n\t)\n\t{\n\t\treturn x;\n\t}\n\n\tGLM_FUNC_QUALIFIER bool not_\n\t(\n\t\tbool const& x\n\t)\n\t{\n\t\treturn !x;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/spline.hpp",
    "content": "/// @ref gtx_spline\n/// @file glm/gtx/spline.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_spline GLM_GTX_spline\n/// @ingroup gtx\n///\n/// Include <glm/gtx/spline.hpp> to use the features of this extension.\n///\n/// Spline functions\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtx/optimum_pow.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_spline is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_spline extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_spline\n\t/// @{\n\n\t/// Return a point from a catmull rom curve.\n\t/// @see gtx_spline extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType catmullRom(\n\t\tgenType const& v1,\n\t\tgenType const& v2,\n\t\tgenType const& v3,\n\t\tgenType const& v4,\n\t\ttypename genType::value_type const& s);\n\n\t/// Return a point from a hermite curve.\n\t/// @see gtx_spline extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType hermite(\n\t\tgenType const& v1,\n\t\tgenType const& t1,\n\t\tgenType const& v2,\n\t\tgenType const& t2,\n\t\ttypename genType::value_type const& s);\n\n\t/// Return a point from a cubic curve.\n\t/// @see gtx_spline extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL genType cubic(\n\t\tgenType const& v1,\n\t\tgenType const& v2,\n\t\tgenType const& v3,\n\t\tgenType const& v4,\n\t\ttypename genType::value_type const& s);\n\n\t/// @}\n}//namespace glm\n\n#include \"spline.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/spline.inl",
    "content": "/// @ref gtx_spline\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType catmullRom\n\t(\n\t\tgenType const& v1,\n\t\tgenType const& v2,\n\t\tgenType const& v3,\n\t\tgenType const& v4,\n\t\ttypename genType::value_type const& s\n\t)\n\t{\n\t\ttypename genType::value_type s2 = pow2(s);\n\t\ttypename genType::value_type s3 = pow3(s);\n\n\t\ttypename genType::value_type f1 = -s3 + typename genType::value_type(2) * s2 - s;\n\t\ttypename genType::value_type f2 = typename genType::value_type(3) * s3 - typename genType::value_type(5) * s2 + typename genType::value_type(2);\n\t\ttypename genType::value_type f3 = typename genType::value_type(-3) * s3 + typename genType::value_type(4) * s2 + s;\n\t\ttypename genType::value_type f4 = s3 - s2;\n\n\t\treturn (f1 * v1 + f2 * v2 + f3 * v3 + f4 * v4) / typename genType::value_type(2);\n\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType hermite\n\t(\n\t\tgenType const& v1,\n\t\tgenType const& t1,\n\t\tgenType const& v2,\n\t\tgenType const& t2,\n\t\ttypename genType::value_type const& s\n\t)\n\t{\n\t\ttypename genType::value_type s2 = pow2(s);\n\t\ttypename genType::value_type s3 = pow3(s);\n\n\t\ttypename genType::value_type f1 = typename genType::value_type(2) * s3 - typename genType::value_type(3) * s2 + typename genType::value_type(1);\n\t\ttypename genType::value_type f2 = typename genType::value_type(-2) * s3 + typename genType::value_type(3) * s2;\n\t\ttypename genType::value_type f3 = s3 - typename genType::value_type(2) * s2 + s;\n\t\ttypename genType::value_type f4 = s3 - s2;\n\n\t\treturn f1 * v1 + f2 * v2 + f3 * t1 + f4 * t2;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType cubic\n\t(\n\t\tgenType const& v1,\n\t\tgenType const& v2,\n\t\tgenType const& v3,\n\t\tgenType const& v4,\n\t\ttypename genType::value_type const& s\n\t)\n\t{\n\t\treturn ((v1 * s + v2) * s + v3) * s + v4;\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/std_based_type.hpp",
    "content": "/// @ref gtx_std_based_type\n/// @file glm/gtx/std_based_type.hpp\n///\n/// @see core (dependence)\n/// @see gtx_extented_min_max (dependence)\n///\n/// @defgroup gtx_std_based_type GLM_GTX_std_based_type\n/// @ingroup gtx\n///\n/// Include <glm/gtx/std_based_type.hpp> to use the features of this extension.\n///\n/// Adds vector types based on STL value types.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include <cstdlib>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_std_based_type is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_std_based_type extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_std_based_type\n\t/// @{\n\n\t/// Vector type based of one std::size_t component.\n\t/// @see GLM_GTX_std_based_type\n\ttypedef vec<1, std::size_t, defaultp>\t\tsize1;\n\n\t/// Vector type based of two std::size_t components.\n\t/// @see GLM_GTX_std_based_type\n\ttypedef vec<2, std::size_t, defaultp>\t\tsize2;\n\n\t/// Vector type based of three std::size_t components.\n\t/// @see GLM_GTX_std_based_type\n\ttypedef vec<3, std::size_t, defaultp>\t\tsize3;\n\n\t/// Vector type based of four std::size_t components.\n\t/// @see GLM_GTX_std_based_type\n\ttypedef vec<4, std::size_t, defaultp>\t\tsize4;\n\n\t/// Vector type based of one std::size_t component.\n\t/// @see GLM_GTX_std_based_type\n\ttypedef vec<1, std::size_t, defaultp>\t\tsize1_t;\n\n\t/// Vector type based of two std::size_t components.\n\t/// @see GLM_GTX_std_based_type\n\ttypedef vec<2, std::size_t, defaultp>\t\tsize2_t;\n\n\t/// Vector type based of three std::size_t components.\n\t/// @see GLM_GTX_std_based_type\n\ttypedef vec<3, std::size_t, defaultp>\t\tsize3_t;\n\n\t/// Vector type based of four std::size_t components.\n\t/// @see GLM_GTX_std_based_type\n\ttypedef vec<4, std::size_t, defaultp>\t\tsize4_t;\n\n\t/// @}\n}//namespace glm\n\n#include \"std_based_type.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/std_based_type.inl",
    "content": "/// @ref gtx_std_based_type\n\nnamespace glm\n{\n\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/string_cast.hpp",
    "content": "/// @ref gtx_string_cast\n/// @file glm/gtx/string_cast.hpp\n///\n/// @see core (dependence)\n/// @see gtx_integer (dependence)\n/// @see gtx_quaternion (dependence)\n///\n/// @defgroup gtx_string_cast GLM_GTX_string_cast\n/// @ingroup gtx\n///\n/// Include <glm/gtx/string_cast.hpp> to use the features of this extension.\n///\n/// Setup strings for GLM type values\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/type_precision.hpp\"\n#include \"../gtc/quaternion.hpp\"\n#include \"../gtx/dual_quaternion.hpp\"\n#include <string>\n#include <cmath>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_string_cast is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_string_cast extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_string_cast\n\t/// @{\n\n\t/// Create a string from a GLM vector or matrix typed variable.\n\t/// @see gtx_string_cast extension.\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL std::string to_string(genType const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"string_cast.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/string_cast.inl",
    "content": "/// @ref gtx_string_cast\n\n#include <cstdarg>\n#include <cstdio>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate <typename T>\n\tstruct cast\n\t{\n\t\ttypedef T value_type;\n\t};\n\n\ttemplate <>\n\tstruct cast<float>\n\t{\n\t\ttypedef double value_type;\n\t};\n\n\tGLM_FUNC_QUALIFIER std::string format(const char* msg, ...)\n\t{\n\t\tstd::size_t const STRING_BUFFER(4096);\n\t\tchar text[STRING_BUFFER];\n\t\tva_list list;\n\n\t\tif(msg == GLM_NULLPTR)\n\t\t\treturn std::string();\n\n\t\tva_start(list, msg);\n#\t\tif (GLM_COMPILER & GLM_COMPILER_VC)\n\t\t\tvsprintf_s(text, STRING_BUFFER, msg, list);\n#\t\telse//\n\t\t\tstd::vsprintf(text, msg, list);\n#\t\tendif//\n\t\tva_end(list);\n\n\t\treturn std::string(text);\n\t}\n\n\tstatic const char* LabelTrue = \"true\";\n\tstatic const char* LabelFalse = \"false\";\n\n\ttemplate<typename T, bool isFloat = false>\n\tstruct literal\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"%d\";}\n\t};\n\n\ttemplate<typename T>\n\tstruct literal<T, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"%f\";}\n\t};\n\n#\tif GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC\n\ttemplate<>\n\tstruct literal<uint64_t, false>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"%lld\";}\n\t};\n\n\ttemplate<>\n\tstruct literal<int64_t, false>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"%lld\";}\n\t};\n#\tendif//GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC\n\n\ttemplate<typename T>\n\tstruct prefix{};\n\n\ttemplate<>\n\tstruct prefix<float>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<double>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"d\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<bool>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"b\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<uint8_t>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"u8\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<int8_t>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"i8\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<uint16_t>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"u16\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<int16_t>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"i16\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<uint32_t>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"u\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<int32_t>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"i\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<uint64_t>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"u64\";}\n\t};\n\n\ttemplate<>\n\tstruct prefix<int64_t>\n\t{\n\t\tGLM_FUNC_QUALIFIER static char const * value() {return \"i64\";}\n\t};\n\n\ttemplate<typename matType>\n\tstruct compute_to_string\n\t{};\n\n\ttemplate<qualifier Q>\n\tstruct compute_to_string<vec<1, bool, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(vec<1, bool, Q> const& x)\n\t\t{\n\t\t\treturn detail::format(\"bvec1(%s)\",\n\t\t\t\tx[0] ? detail::LabelTrue : detail::LabelFalse);\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_to_string<vec<2, bool, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(vec<2, bool, Q> const& x)\n\t\t{\n\t\t\treturn detail::format(\"bvec2(%s, %s)\",\n\t\t\t\tx[0] ? detail::LabelTrue : detail::LabelFalse,\n\t\t\t\tx[1] ? detail::LabelTrue : detail::LabelFalse);\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_to_string<vec<3, bool, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(vec<3, bool, Q> const& x)\n\t\t{\n\t\t\treturn detail::format(\"bvec3(%s, %s, %s)\",\n\t\t\t\tx[0] ? detail::LabelTrue : detail::LabelFalse,\n\t\t\t\tx[1] ? detail::LabelTrue : detail::LabelFalse,\n\t\t\t\tx[2] ? detail::LabelTrue : detail::LabelFalse);\n\t\t}\n\t};\n\n\ttemplate<qualifier Q>\n\tstruct compute_to_string<vec<4, bool, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(vec<4, bool, Q> const& x)\n\t\t{\n\t\t\treturn detail::format(\"bvec4(%s, %s, %s, %s)\",\n\t\t\t\tx[0] ? detail::LabelTrue : detail::LabelFalse,\n\t\t\t\tx[1] ? detail::LabelTrue : detail::LabelFalse,\n\t\t\t\tx[2] ? detail::LabelTrue : detail::LabelFalse,\n\t\t\t\tx[3] ? detail::LabelTrue : detail::LabelFalse);\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<vec<1, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(vec<1, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%svec1(%s)\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<vec<2, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(vec<2, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%svec2(%s, %s)\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<vec<3, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(vec<3, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%svec3(%s, %s, %s)\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[2]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<vec<4, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(vec<4, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%svec4(%s, %s, %s, %s)\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[2]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[3]));\n\t\t}\n\t};\n\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<2, 2, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<2, 2, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat2x2((%s, %s), (%s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<2, 3, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<2, 3, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat2x3((%s, %s, %s), (%s, %s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<2, 4, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<2, 4, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat2x4((%s, %s, %s, %s), (%s, %s, %s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), static_cast<typename cast<T>::value_type>(x[0][3]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]), static_cast<typename cast<T>::value_type>(x[1][3]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<3, 2, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<3, 2, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat3x2((%s, %s), (%s, %s), (%s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<3, 3, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<3, 3, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat3x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), static_cast<typename cast<T>::value_type>(x[2][2]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<3, 4, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<3, 4, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat3x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), static_cast<typename cast<T>::value_type>(x[0][3]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]), static_cast<typename cast<T>::value_type>(x[1][3]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), static_cast<typename cast<T>::value_type>(x[2][2]), static_cast<typename cast<T>::value_type>(x[2][3]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<4, 2, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<4, 2, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat4x2((%s, %s), (%s, %s), (%s, %s), (%s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[3][0]), static_cast<typename cast<T>::value_type>(x[3][1]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<4, 3, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<4, 3, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat4x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s), (%s, %s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), static_cast<typename cast<T>::value_type>(x[2][2]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[3][0]), static_cast<typename cast<T>::value_type>(x[3][1]), static_cast<typename cast<T>::value_type>(x[3][2]));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<mat<4, 4, T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(mat<4, 4, T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%smat4x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[0][0]), static_cast<typename cast<T>::value_type>(x[0][1]), static_cast<typename cast<T>::value_type>(x[0][2]), static_cast<typename cast<T>::value_type>(x[0][3]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[1][0]), static_cast<typename cast<T>::value_type>(x[1][1]), static_cast<typename cast<T>::value_type>(x[1][2]), static_cast<typename cast<T>::value_type>(x[1][3]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[2][0]), static_cast<typename cast<T>::value_type>(x[2][1]), static_cast<typename cast<T>::value_type>(x[2][2]), static_cast<typename cast<T>::value_type>(x[2][3]),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x[3][0]), static_cast<typename cast<T>::value_type>(x[3][1]), static_cast<typename cast<T>::value_type>(x[3][2]), static_cast<typename cast<T>::value_type>(x[3][3]));\n\t\t}\n\t};\n\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<qua<T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(qua<T, Q> const& q)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%squat(%s, {%s, %s, %s})\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(q.w),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(q.x),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(q.y),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(q.z));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_to_string<tdualquat<T, Q> >\n\t{\n\t\tGLM_FUNC_QUALIFIER static std::string call(tdualquat<T, Q> const& x)\n\t\t{\n\t\t\tchar const * PrefixStr = prefix<T>::value();\n\t\t\tchar const * LiteralStr = literal<T, std::numeric_limits<T>::is_iec559>::value();\n\t\t\tstd::string FormatStr(detail::format(\"%sdualquat((%s, {%s, %s, %s}), (%s, {%s, %s, %s}))\",\n\t\t\t\tPrefixStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr,\n\t\t\t\tLiteralStr, LiteralStr, LiteralStr, LiteralStr));\n\n\t\t\treturn detail::format(FormatStr.c_str(),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x.real.w),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x.real.x),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x.real.y),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x.real.z),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x.dual.w),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x.dual.x),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x.dual.y),\n\t\t\t\tstatic_cast<typename cast<T>::value_type>(x.dual.z));\n\t\t}\n\t};\n\n}//namespace detail\n\ntemplate<class matType>\nGLM_FUNC_QUALIFIER std::string to_string(matType const& x)\n{\n\treturn detail::compute_to_string<matType>::call(x);\n}\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/texture.hpp",
    "content": "/// @ref gtx_texture\n/// @file glm/gtx/texture.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_texture GLM_GTX_texture\n/// @ingroup gtx\n///\n/// Include <glm/gtx/texture.hpp> to use the features of this extension.\n///\n/// Wrapping mode of texture coordinates.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/integer.hpp\"\n#include \"../gtx/component_wise.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_texture is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_texture extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_texture\n\t/// @{\n\n\t/// Compute the number of mipmaps levels necessary to create a mipmap complete texture\n\t///\n\t/// @param Extent Extent of the texture base level mipmap\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point or signed integer scalar types\n\t/// @tparam Q Value from qualifier enum\n\ttemplate <length_t L, typename T, qualifier Q>\n\tT levels(vec<L, T, Q> const& Extent);\n\n\t/// @}\n}// namespace glm\n\n#include \"texture.inl\"\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/texture.inl",
    "content": "/// @ref gtx_texture\n\nnamespace glm\n{\n\ttemplate <length_t L, typename T, qualifier Q>\n\tinline T levels(vec<L, T, Q> const& Extent)\n\t{\n\t\treturn glm::log2(compMax(Extent)) + static_cast<T>(1);\n\t}\n\n\ttemplate <typename T>\n\tinline T levels(T Extent)\n\t{\n\t\treturn vec<1, T, defaultp>(Extent).x;\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/transform.hpp",
    "content": "/// @ref gtx_transform\n/// @file glm/gtx/transform.hpp\n///\n/// @see core (dependence)\n/// @see gtc_matrix_transform (dependence)\n/// @see gtx_transform\n/// @see gtx_transform2\n///\n/// @defgroup gtx_transform GLM_GTX_transform\n/// @ingroup gtx\n///\n/// Include <glm/gtx/transform.hpp> to use the features of this extension.\n///\n/// Add transformation matrices\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/matrix_transform.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_transform is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_transform extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_transform\n\t/// @{\n\n\t/// Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars.\n\t/// @see gtc_matrix_transform\n\t/// @see gtx_transform\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> translate(\n\t\tvec<3, T, Q> const& v);\n\n\t/// Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians.\n\t/// @see gtc_matrix_transform\n\t/// @see gtx_transform\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> rotate(\n\t\tT angle,\n\t\tvec<3, T, Q> const& v);\n\n\t/// Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components.\n\t/// @see gtc_matrix_transform\n\t/// @see gtx_transform\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> scale(\n\t\tvec<3, T, Q> const& v);\n\n\t/// @}\n}// namespace glm\n\n#include \"transform.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/transform.inl",
    "content": "/// @ref gtx_transform\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> translate(vec<3, T, Q> const& v)\n\t{\n\t\treturn translate(mat<4, 4, T, Q>(static_cast<T>(1)), v);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate(T angle, vec<3, T, Q> const& v)\n\t{\n\t\treturn rotate(mat<4, 4, T, Q>(static_cast<T>(1)), angle, v);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale(vec<3, T, Q> const& v)\n\t{\n\t\treturn scale(mat<4, 4, T, Q>(static_cast<T>(1)), v);\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/transform2.hpp",
    "content": "/// @ref gtx_transform2\n/// @file glm/gtx/transform2.hpp\n///\n/// @see core (dependence)\n/// @see gtx_transform (dependence)\n///\n/// @defgroup gtx_transform2 GLM_GTX_transform2\n/// @ingroup gtx\n///\n/// Include <glm/gtx/transform2.hpp> to use the features of this extension.\n///\n/// Add extra transformation matrices\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtx/transform.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_transform2 is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_transform2 extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_transform2\n\t/// @{\n\n\t//! Transforms a matrix with a shearing on X axis.\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> shearX2D(mat<3, 3, T, Q> const& m, T y);\n\n\t//! Transforms a matrix with a shearing on Y axis.\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> shearY2D(mat<3, 3, T, Q> const& m, T x);\n\n\t//! Transforms a matrix with a shearing on X axis\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> shearX3D(mat<4, 4, T, Q> const& m, T y, T z);\n\n\t//! Transforms a matrix with a shearing on Y axis.\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> shearY3D(mat<4, 4, T, Q> const& m, T x, T z);\n\n\t//! Transforms a matrix with a shearing on Z axis.\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> shearZ3D(mat<4, 4, T, Q> const& m, T x, T y);\n\n\t//template<typename T> GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shear(const mat<4, 4, T, Q> & m, shearPlane, planePoint, angle)\n\t// Identity + tan(angle) * cross(Normal, OnPlaneVector)     0\n\t// - dot(PointOnPlane, normal) * OnPlaneVector              1\n\n\t// Reflect functions seem to don't work\n\t//template<typename T> mat<3, 3, T, Q> reflect2D(const mat<3, 3, T, Q> & m, const vec<3, T, Q>& normal){return reflect2DGTX(m, normal);}\t\t\t\t\t\t\t\t\t//!< \\brief Build a reflection matrix (from GLM_GTX_transform2 extension)\n\t//template<typename T> mat<4, 4, T, Q> reflect3D(const mat<4, 4, T, Q> & m, const vec<3, T, Q>& normal){return reflect3DGTX(m, normal);}\t\t\t\t\t\t\t\t\t//!< \\brief Build a reflection matrix (from GLM_GTX_transform2 extension)\n\n\t//! Build planar projection matrix along normal axis.\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<3, 3, T, Q> proj2D(mat<3, 3, T, Q> const& m, vec<3, T, Q> const& normal);\n\n\t//! Build planar projection matrix along normal axis.\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> proj3D(mat<4, 4, T, Q> const & m, vec<3, T, Q> const& normal);\n\n\t//! Build a scale bias matrix.\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> scaleBias(T scale, T bias);\n\n\t//! Build a scale bias matrix.\n\t//! From GLM_GTX_transform2 extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<4, 4, T, Q> scaleBias(mat<4, 4, T, Q> const& m, T scale, T bias);\n\n\t/// @}\n}// namespace glm\n\n#include \"transform2.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/transform2.inl",
    "content": "/// @ref gtx_transform2\n\nnamespace glm\n{\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX2D(mat<3, 3, T, Q> const& m, T s)\n\t{\n\t\tmat<3, 3, T, Q> r(1);\n\t\tr[1][0] = s;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY2D(mat<3, 3, T, Q> const& m, T s)\n\t{\n\t\tmat<3, 3, T, Q> r(1);\n\t\tr[0][1] = s;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearX3D(mat<4, 4, T, Q> const& m, T s, T t)\n\t{\n\t\tmat<4, 4, T, Q> r(1);\n\t\tr[0][1] = s;\n\t\tr[0][2] = t;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearY3D(mat<4, 4, T, Q> const& m, T s, T t)\n\t{\n\t\tmat<4, 4, T, Q> r(1);\n\t\tr[1][0] = s;\n\t\tr[1][2] = t;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearZ3D(mat<4, 4, T, Q> const& m, T s, T t)\n\t{\n\t\tmat<4, 4, T, Q> r(1);\n\t\tr[2][0] = s;\n\t\tr[2][1] = t;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> reflect2D(mat<3, 3, T, Q> const& m, vec<3, T, Q> const& normal)\n\t{\n\t\tmat<3, 3, T, Q> r(static_cast<T>(1));\n\t\tr[0][0] = static_cast<T>(1) - static_cast<T>(2) * normal.x * normal.x;\n\t\tr[0][1] = -static_cast<T>(2) * normal.x * normal.y;\n\t\tr[1][0] = -static_cast<T>(2) * normal.x * normal.y;\n\t\tr[1][1] = static_cast<T>(1) - static_cast<T>(2) * normal.y * normal.y;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> reflect3D(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& normal)\n\t{\n\t\tmat<4, 4, T, Q> r(static_cast<T>(1));\n\t\tr[0][0] = static_cast<T>(1) - static_cast<T>(2) * normal.x * normal.x;\n\t\tr[0][1] = -static_cast<T>(2) * normal.x * normal.y;\n\t\tr[0][2] = -static_cast<T>(2) * normal.x * normal.z;\n\n\t\tr[1][0] = -static_cast<T>(2) * normal.x * normal.y;\n\t\tr[1][1] = static_cast<T>(1) - static_cast<T>(2) * normal.y * normal.y;\n\t\tr[1][2] = -static_cast<T>(2) * normal.y * normal.z;\n\n\t\tr[2][0] = -static_cast<T>(2) * normal.x * normal.z;\n\t\tr[2][1] = -static_cast<T>(2) * normal.y * normal.z;\n\t\tr[2][2] = static_cast<T>(1) - static_cast<T>(2) * normal.z * normal.z;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<3, 3, T, Q> proj2D(\n\t\tconst mat<3, 3, T, Q>& m,\n\t\tconst vec<3, T, Q>& normal)\n\t{\n\t\tmat<3, 3, T, Q> r(static_cast<T>(1));\n\t\tr[0][0] = static_cast<T>(1) - normal.x * normal.x;\n\t\tr[0][1] = - normal.x * normal.y;\n\t\tr[1][0] = - normal.x * normal.y;\n\t\tr[1][1] = static_cast<T>(1) - normal.y * normal.y;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> proj3D(\n\t\tconst mat<4, 4, T, Q>& m,\n\t\tconst vec<3, T, Q>& normal)\n\t{\n\t\tmat<4, 4, T, Q> r(static_cast<T>(1));\n\t\tr[0][0] = static_cast<T>(1) - normal.x * normal.x;\n\t\tr[0][1] = - normal.x * normal.y;\n\t\tr[0][2] = - normal.x * normal.z;\n\t\tr[1][0] = - normal.x * normal.y;\n\t\tr[1][1] = static_cast<T>(1) - normal.y * normal.y;\n\t\tr[1][2] = - normal.y * normal.z;\n\t\tr[2][0] = - normal.x * normal.z;\n\t\tr[2][1] = - normal.y * normal.z;\n\t\tr[2][2] = static_cast<T>(1) - normal.z * normal.z;\n\t\treturn m * r;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(T scale, T bias)\n\t{\n\t\tmat<4, 4, T, Q> result;\n\t\tresult[3] = vec<4, T, Q>(vec<3, T, Q>(bias), static_cast<T>(1));\n\t\tresult[0][0] = scale;\n\t\tresult[1][1] = scale;\n\t\tresult[2][2] = scale;\n\t\treturn result;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(mat<4, 4, T, Q> const& m, T scale, T bias)\n\t{\n\t\treturn m * scaleBias<T, Q>(scale, bias);\n\t}\n}//namespace glm\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/type_aligned.hpp",
    "content": "/// @ref gtx_type_aligned\n/// @file glm/gtx/type_aligned.hpp\n///\n/// @see core (dependence)\n/// @see gtc_quaternion (dependence)\n///\n/// @defgroup gtx_type_aligned GLM_GTX_type_aligned\n/// @ingroup gtx\n///\n/// Include <glm/gtx/type_aligned.hpp> to use the features of this extension.\n///\n/// Defines aligned types.\n\n#pragma once\n\n// Dependency:\n#include \"../gtc/type_precision.hpp\"\n#include \"../gtc/quaternion.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_type_aligned is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_type_aligned extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t///////////////////////////\n\t// Signed int vector types\n\n\t/// @addtogroup gtx_type_aligned\n\t/// @{\n\n\t/// Low qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1);\n\n\t/// Low qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2);\n\n\t/// Low qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4);\n\n\t/// Low qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8);\n\n\n\t/// Low qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1);\n\n\t/// Low qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2);\n\n\t/// Low qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4);\n\n\t/// Low qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8);\n\n\n\t/// Low qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1);\n\n\t/// Low qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2);\n\n\t/// Low qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4);\n\n\t/// Low qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8);\n\n\n\t/// Medium qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1);\n\n\t/// Medium qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2);\n\n\t/// Medium qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4);\n\n\t/// Medium qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8);\n\n\n\t/// Medium qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1);\n\n\t/// Medium qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2);\n\n\t/// Medium qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4);\n\n\t/// Medium qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8);\n\n\n\t/// Medium qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1);\n\n\t/// Medium qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2);\n\n\t/// Medium qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4);\n\n\t/// Medium qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8);\n\n\n\t/// High qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1);\n\n\t/// High qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2);\n\n\t/// High qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4);\n\n\t/// High qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8);\n\n\n\t/// High qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1);\n\n\t/// High qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2);\n\n\t/// High qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4);\n\n\t/// High qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8);\n\n\n\t/// High qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1);\n\n\t/// High qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2);\n\n\t/// High qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4);\n\n\t/// High qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8);\n\n\n\t/// Default qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1);\n\n\t/// Default qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2);\n\n\t/// Default qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4);\n\n\t/// Default qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8);\n\n\n\t/// Default qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1);\n\n\t/// Default qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2);\n\n\t/// Default qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4);\n\n\t/// Default qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8);\n\n\n\t/// Default qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1);\n\n\t/// Default qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2);\n\n\t/// Default qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4);\n\n\t/// Default qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8);\n\n\n\t/// Default qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4);\n\n\t/// Default qualifier 32 bit signed integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8);\n\n\t/// Default qualifier 32 bit signed integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16);\n\n\t/// Default qualifier 32 bit signed integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16);\n\n\n\t/// Default qualifier 8 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1);\n\n\t/// Default qualifier 8 bit signed integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2);\n\n\t/// Default qualifier 8 bit signed integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4);\n\n\t/// Default qualifier 8 bit signed integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4);\n\n\n\t/// Default qualifier 16 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2);\n\n\t/// Default qualifier 16 bit signed integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4);\n\n\t/// Default qualifier 16 bit signed integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8);\n\n\t/// Default qualifier 16 bit signed integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8);\n\n\n\t/// Default qualifier 32 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4);\n\n\t/// Default qualifier 32 bit signed integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8);\n\n\t/// Default qualifier 32 bit signed integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16);\n\n\t/// Default qualifier 32 bit signed integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16);\n\n\n\t/// Default qualifier 64 bit signed integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8);\n\n\t/// Default qualifier 64 bit signed integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16);\n\n\t/// Default qualifier 64 bit signed integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32);\n\n\t/// Default qualifier 64 bit signed integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32);\n\n\n\t/////////////////////////////\n\t// Unsigned int vector types\n\n\t/// Low qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1);\n\n\t/// Low qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2);\n\n\t/// Low qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4);\n\n\t/// Low qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8);\n\n\n\t/// Low qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1);\n\n\t/// Low qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2);\n\n\t/// Low qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4);\n\n\t/// Low qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8);\n\n\n\t/// Low qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1);\n\n\t/// Low qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2);\n\n\t/// Low qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4);\n\n\t/// Low qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8);\n\n\n\t/// Medium qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1);\n\n\t/// Medium qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2);\n\n\t/// Medium qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4);\n\n\t/// Medium qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8);\n\n\n\t/// Medium qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1);\n\n\t/// Medium qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2);\n\n\t/// Medium qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4);\n\n\t/// Medium qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8);\n\n\n\t/// Medium qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1);\n\n\t/// Medium qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2);\n\n\t/// Medium qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4);\n\n\t/// Medium qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8);\n\n\n\t/// High qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1);\n\n\t/// High qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2);\n\n\t/// High qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4);\n\n\t/// High qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8);\n\n\n\t/// High qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1);\n\n\t/// High qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2);\n\n\t/// High qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4);\n\n\t/// High qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8);\n\n\n\t/// High qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1);\n\n\t/// High qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2);\n\n\t/// High qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4);\n\n\t/// High qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8);\n\n\n\t/// Default qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1);\n\n\t/// Default qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2);\n\n\t/// Default qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4);\n\n\t/// Default qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8);\n\n\n\t/// Default qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1);\n\n\t/// Default qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2);\n\n\t/// Default qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4);\n\n\t/// Default qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8);\n\n\n\t/// Default qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1);\n\n\t/// Default qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2);\n\n\t/// Default qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4);\n\n\t/// Default qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8);\n\n\n\t/// Default qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4);\n\n\t/// Default qualifier 32 bit unsigned integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8);\n\n\t/// Default qualifier 32 bit unsigned integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16);\n\n\t/// Default qualifier 32 bit unsigned integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16);\n\n\n\t/// Default qualifier 8 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1);\n\n\t/// Default qualifier 8 bit unsigned integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2);\n\n\t/// Default qualifier 8 bit unsigned integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4);\n\n\t/// Default qualifier 8 bit unsigned integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4);\n\n\n\t/// Default qualifier 16 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2);\n\n\t/// Default qualifier 16 bit unsigned integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4);\n\n\t/// Default qualifier 16 bit unsigned integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8);\n\n\t/// Default qualifier 16 bit unsigned integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8);\n\n\n\t/// Default qualifier 32 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4);\n\n\t/// Default qualifier 32 bit unsigned integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8);\n\n\t/// Default qualifier 32 bit unsigned integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16);\n\n\t/// Default qualifier 32 bit unsigned integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16);\n\n\n\t/// Default qualifier 64 bit unsigned integer aligned scalar type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8);\n\n\t/// Default qualifier 64 bit unsigned integer aligned vector of 2 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16);\n\n\t/// Default qualifier 64 bit unsigned integer aligned vector of 3 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32);\n\n\t/// Default qualifier 64 bit unsigned integer aligned vector of 4 components type.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32);\n\n\n\t//////////////////////\n\t// Float vector types\n\n\t/// 32 bit single-qualifier floating-point aligned scalar.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4);\n\n\t/// 32 bit single-qualifier floating-point aligned scalar.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4);\n\n\t/// 32 bit single-qualifier floating-point aligned scalar.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4);\n\n#\tifndef GLM_FORCE_SINGLE_ONLY\n\n\t/// 64 bit double-qualifier floating-point aligned scalar.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8);\n\n\t/// 64 bit double-qualifier floating-point aligned scalar.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8);\n\n\t/// 64 bit double-qualifier floating-point aligned scalar.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8);\n\n#\tendif//GLM_FORCE_SINGLE_ONLY\n\n\n\t/// Single-qualifier floating-point aligned vector of 1 component.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4);\n\n\t/// Single-qualifier floating-point aligned vector of 2 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8);\n\n\t/// Single-qualifier floating-point aligned vector of 3 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16);\n\n\t/// Single-qualifier floating-point aligned vector of 4 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16);\n\n\n\t/// Single-qualifier floating-point aligned vector of 1 component.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4);\n\n\t/// Single-qualifier floating-point aligned vector of 2 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8);\n\n\t/// Single-qualifier floating-point aligned vector of 3 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16);\n\n\t/// Single-qualifier floating-point aligned vector of 4 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16);\n\n\n\t/// Single-qualifier floating-point aligned vector of 1 component.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4);\n\n\t/// Single-qualifier floating-point aligned vector of 2 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8);\n\n\t/// Single-qualifier floating-point aligned vector of 3 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16);\n\n\t/// Single-qualifier floating-point aligned vector of 4 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16);\n\n\n\t/// Double-qualifier floating-point aligned vector of 1 component.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8);\n\n\t/// Double-qualifier floating-point aligned vector of 2 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16);\n\n\t/// Double-qualifier floating-point aligned vector of 3 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32);\n\n\t/// Double-qualifier floating-point aligned vector of 4 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32);\n\n\n#\tifndef GLM_FORCE_SINGLE_ONLY\n\n\t/// Double-qualifier floating-point aligned vector of 1 component.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8);\n\n\t/// Double-qualifier floating-point aligned vector of 2 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16);\n\n\t/// Double-qualifier floating-point aligned vector of 3 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32);\n\n\t/// Double-qualifier floating-point aligned vector of 4 components.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32);\n\n#\tendif//GLM_FORCE_SINGLE_ONLY\n\n\t//////////////////////\n\t// Float matrix types\n\n\t/// Single-qualifier floating-point aligned 1x1 matrix.\n\t/// @see gtx_type_aligned\n\t//typedef detail::tmat1<f32> mat1;\n\n\t/// Single-qualifier floating-point aligned 2x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16);\n\n\t/// Single-qualifier floating-point aligned 3x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16);\n\n\t/// Single-qualifier floating-point aligned 4x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16);\n\n\n\t/// Single-qualifier floating-point aligned 1x1 matrix.\n\t/// @see gtx_type_aligned\n\t//typedef detail::tmat1x1<f32> mat1;\n\n\t/// Single-qualifier floating-point aligned 2x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mat2x2, aligned_mat2x2, 16);\n\n\t/// Single-qualifier floating-point aligned 3x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mat3x3, aligned_mat3x3, 16);\n\n\t/// Single-qualifier floating-point aligned 4x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(mat4x4, aligned_mat4x4, 16);\n\n\n\t/// Single-qualifier floating-point aligned 1x1 matrix.\n\t/// @see gtx_type_aligned\n\t//typedef detail::tmat1x1<f32> fmat1;\n\n\t/// Single-qualifier floating-point aligned 2x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16);\n\n\t/// Single-qualifier floating-point aligned 3x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16);\n\n\t/// Single-qualifier floating-point aligned 4x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16);\n\n\n\t/// Single-qualifier floating-point aligned 1x1 matrix.\n\t/// @see gtx_type_aligned\n\t//typedef f32 fmat1x1;\n\n\t/// Single-qualifier floating-point aligned 2x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16);\n\n\t/// Single-qualifier floating-point aligned 2x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16);\n\n\t/// Single-qualifier floating-point aligned 2x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16);\n\n\t/// Single-qualifier floating-point aligned 3x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16);\n\n\t/// Single-qualifier floating-point aligned 3x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16);\n\n\t/// Single-qualifier floating-point aligned 3x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16);\n\n\t/// Single-qualifier floating-point aligned 4x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16);\n\n\t/// Single-qualifier floating-point aligned 4x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16);\n\n\t/// Single-qualifier floating-point aligned 4x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16);\n\n\n\t/// Single-qualifier floating-point aligned 1x1 matrix.\n\t/// @see gtx_type_aligned\n\t//typedef detail::tmat1x1<f32, defaultp> f32mat1;\n\n\t/// Single-qualifier floating-point aligned 2x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16);\n\n\t/// Single-qualifier floating-point aligned 3x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16);\n\n\t/// Single-qualifier floating-point aligned 4x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16);\n\n\n\t/// Single-qualifier floating-point aligned 1x1 matrix.\n\t/// @see gtx_type_aligned\n\t//typedef f32 f32mat1x1;\n\n\t/// Single-qualifier floating-point aligned 2x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16);\n\n\t/// Single-qualifier floating-point aligned 2x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16);\n\n\t/// Single-qualifier floating-point aligned 2x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16);\n\n\t/// Single-qualifier floating-point aligned 3x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16);\n\n\t/// Single-qualifier floating-point aligned 3x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16);\n\n\t/// Single-qualifier floating-point aligned 3x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16);\n\n\t/// Single-qualifier floating-point aligned 4x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16);\n\n\t/// Single-qualifier floating-point aligned 4x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16);\n\n\t/// Single-qualifier floating-point aligned 4x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16);\n\n\n#\tifndef GLM_FORCE_SINGLE_ONLY\n\n\t/// Double-qualifier floating-point aligned 1x1 matrix.\n\t/// @see gtx_type_aligned\n\t//typedef detail::tmat1x1<f64, defaultp> f64mat1;\n\n\t/// Double-qualifier floating-point aligned 2x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32);\n\n\t/// Double-qualifier floating-point aligned 3x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32);\n\n\t/// Double-qualifier floating-point aligned 4x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32);\n\n\n\t/// Double-qualifier floating-point aligned 1x1 matrix.\n\t/// @see gtx_type_aligned\n\t//typedef f64 f64mat1x1;\n\n\t/// Double-qualifier floating-point aligned 2x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32);\n\n\t/// Double-qualifier floating-point aligned 2x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32);\n\n\t/// Double-qualifier floating-point aligned 2x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32);\n\n\t/// Double-qualifier floating-point aligned 3x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32);\n\n\t/// Double-qualifier floating-point aligned 3x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32);\n\n\t/// Double-qualifier floating-point aligned 3x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32);\n\n\t/// Double-qualifier floating-point aligned 4x2 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32);\n\n\t/// Double-qualifier floating-point aligned 4x3 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32);\n\n\t/// Double-qualifier floating-point aligned 4x4 matrix.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32);\n\n#\tendif//GLM_FORCE_SINGLE_ONLY\n\n\n\t//////////////////////////\n\t// Quaternion types\n\n\t/// Single-qualifier floating-point aligned quaternion.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16);\n\n\t/// Single-qualifier floating-point aligned quaternion.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(quat, aligned_fquat, 16);\n\n\t/// Double-qualifier floating-point aligned quaternion.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32);\n\n\t/// Single-qualifier floating-point aligned quaternion.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16);\n\n#\tifndef GLM_FORCE_SINGLE_ONLY\n\n\t/// Double-qualifier floating-point aligned quaternion.\n\t/// @see gtx_type_aligned\n\tGLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32);\n\n#\tendif//GLM_FORCE_SINGLE_ONLY\n\n\t/// @}\n}//namespace glm\n\n#include \"type_aligned.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/type_aligned.inl",
    "content": "/// @ref gtc_type_aligned\n\nnamespace glm\n{\n\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/type_trait.hpp",
    "content": "/// @ref gtx_type_trait\n/// @file glm/gtx/type_trait.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_type_trait GLM_GTX_type_trait\n/// @ingroup gtx\n///\n/// Include <glm/gtx/type_trait.hpp> to use the features of this extension.\n///\n/// Defines traits for each type.\n\n#pragma once\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_type_trait is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_type_trait extension included\")\n#\tendif\n#endif\n\n// Dependency:\n#include \"../detail/qualifier.hpp\"\n#include \"../gtc/quaternion.hpp\"\n#include \"../gtx/dual_quaternion.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup gtx_type_trait\n\t/// @{\n\n\ttemplate<typename T>\n\tstruct type\n\t{\n\t\tstatic bool const is_vec = false;\n\t\tstatic bool const is_mat = false;\n\t\tstatic bool const is_quat = false;\n\t\tstatic length_t const components = 0;\n\t\tstatic length_t const cols = 0;\n\t\tstatic length_t const rows = 0;\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct type<vec<L, T, Q> >\n\t{\n\t\tstatic bool const is_vec = true;\n\t\tstatic bool const is_mat = false;\n\t\tstatic bool const is_quat = false;\n\t\tstatic length_t const components = L;\n\t};\n\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tstruct type<mat<C, R, T, Q> >\n\t{\n\t\tstatic bool const is_vec = false;\n\t\tstatic bool const is_mat = true;\n\t\tstatic bool const is_quat = false;\n\t\tstatic length_t const components = C;\n\t\tstatic length_t const cols = C;\n\t\tstatic length_t const rows = R;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct type<qua<T, Q> >\n\t{\n\t\tstatic bool const is_vec = false;\n\t\tstatic bool const is_mat = false;\n\t\tstatic bool const is_quat = true;\n\t\tstatic length_t const components = 4;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct type<tdualquat<T, Q> >\n\t{\n\t\tstatic bool const is_vec = false;\n\t\tstatic bool const is_mat = false;\n\t\tstatic bool const is_quat = true;\n\t\tstatic length_t const components = 8;\n\t};\n\n\t/// @}\n}//namespace glm\n\n#include \"type_trait.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/type_trait.inl",
    "content": "/// @ref gtx_type_trait\n\nnamespace glm\n{\n\ttemplate<typename T>\n\tbool const type<T>::is_vec;\n\ttemplate<typename T>\n\tbool const type<T>::is_mat;\n\ttemplate<typename T>\n\tbool const type<T>::is_quat;\n\ttemplate<typename T>\n\tlength_t const type<T>::components;\n\ttemplate<typename T>\n\tlength_t const type<T>::cols;\n\ttemplate<typename T>\n\tlength_t const type<T>::rows;\n\n\t// vec\n\ttemplate<length_t L, typename T, qualifier Q>\n\tbool const type<vec<L, T, Q> >::is_vec;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tbool const type<vec<L, T, Q> >::is_mat;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tbool const type<vec<L, T, Q> >::is_quat;\n\ttemplate<length_t L, typename T, qualifier Q>\n\tlength_t const type<vec<L, T, Q> >::components;\n\n\t// mat\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tbool const type<mat<C, R, T, Q> >::is_vec;\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tbool const type<mat<C, R, T, Q> >::is_mat;\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tbool const type<mat<C, R, T, Q> >::is_quat;\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tlength_t const type<mat<C, R, T, Q> >::components;\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tlength_t const type<mat<C, R, T, Q> >::cols;\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tlength_t const type<mat<C, R, T, Q> >::rows;\n\n\t// tquat\n\ttemplate<typename T, qualifier Q>\n\tbool const type<qua<T, Q> >::is_vec;\n\ttemplate<typename T, qualifier Q>\n\tbool const type<qua<T, Q> >::is_mat;\n\ttemplate<typename T, qualifier Q>\n\tbool const type<qua<T, Q> >::is_quat;\n\ttemplate<typename T, qualifier Q>\n\tlength_t const type<qua<T, Q> >::components;\n\n\t// tdualquat\n\ttemplate<typename T, qualifier Q>\n\tbool const type<tdualquat<T, Q> >::is_vec;\n\ttemplate<typename T, qualifier Q>\n\tbool const type<tdualquat<T, Q> >::is_mat;\n\ttemplate<typename T, qualifier Q>\n\tbool const type<tdualquat<T, Q> >::is_quat;\n\ttemplate<typename T, qualifier Q>\n\tlength_t const type<tdualquat<T, Q> >::components;\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/vec_swizzle.hpp",
    "content": "/// @ref gtx_vec_swizzle\n/// @file glm/gtx/vec_swizzle.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_vec_swizzle GLM_GTX_vec_swizzle\n/// @ingroup gtx\n///\n/// Include <glm/gtx/vec_swizzle.hpp> to use the features of this extension.\n///\n/// Functions to perform swizzle operation.\n\n#pragma once\n\n#include \"../glm.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_vec_swizzle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_vec_swizzle extension included\")\n#\tendif\n#endif\n\nnamespace glm {\n\t/// @addtogroup gtx_vec_swizzle\n\t/// @{\n\n\t// xx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<1, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.x);\n\t}\n\n\t// xy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.y);\n\t}\n\n\t// xz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.z);\n\t}\n\n\t// xw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> xw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.x, v.w);\n\t}\n\n\t// yx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.x);\n\t}\n\n\t// yy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.y);\n\t}\n\n\t// yz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.z);\n\t}\n\n\t// yw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> yw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.y, v.w);\n\t}\n\n\t// zx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.z, v.x);\n\t}\n\n\t// zy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.z, v.y);\n\t}\n\n\t// zz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.z, v.z);\n\t}\n\n\t// zw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> zw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.z, v.w);\n\t}\n\n\t// wx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> wx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.w, v.x);\n\t}\n\n\t// wy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> wy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.w, v.y);\n\t}\n\n\t// wz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> wz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.w, v.z);\n\t}\n\n\t// ww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<2, T, Q> ww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<2, T, Q>(v.w, v.w);\n\t}\n\n\t// xxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<1, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.x);\n\t}\n\n\t// xxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.y);\n\t}\n\n\t// xxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.z);\n\t}\n\n\t// xxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.x, v.w);\n\t}\n\n\t// xyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.x);\n\t}\n\n\t// xyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.y);\n\t}\n\n\t// xyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.z);\n\t}\n\n\t// xyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.y, v.w);\n\t}\n\n\t// xzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.z, v.x);\n\t}\n\n\t// xzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.z, v.y);\n\t}\n\n\t// xzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.z, v.z);\n\t}\n\n\t// xzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.z, v.w);\n\t}\n\n\t// xwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.w, v.x);\n\t}\n\n\t// xwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.w, v.y);\n\t}\n\n\t// xwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.w, v.z);\n\t}\n\n\t// xww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> xww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.x, v.w, v.w);\n\t}\n\n\t// yxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.x);\n\t}\n\n\t// yxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.y);\n\t}\n\n\t// yxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.z);\n\t}\n\n\t// yxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.x, v.w);\n\t}\n\n\t// yyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.x);\n\t}\n\n\t// yyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.y);\n\t}\n\n\t// yyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.z);\n\t}\n\n\t// yyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.y, v.w);\n\t}\n\n\t// yzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.z, v.x);\n\t}\n\n\t// yzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.z, v.y);\n\t}\n\n\t// yzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.z, v.z);\n\t}\n\n\t// yzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.z, v.w);\n\t}\n\n\t// ywx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> ywx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.w, v.x);\n\t}\n\n\t// ywy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> ywy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.w, v.y);\n\t}\n\n\t// ywz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> ywz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.w, v.z);\n\t}\n\n\t// yww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> yww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.y, v.w, v.w);\n\t}\n\n\t// zxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.x, v.x);\n\t}\n\n\t// zxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.x, v.y);\n\t}\n\n\t// zxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.x, v.z);\n\t}\n\n\t// zxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.x, v.w);\n\t}\n\n\t// zyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.y, v.x);\n\t}\n\n\t// zyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.y, v.y);\n\t}\n\n\t// zyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.y, v.z);\n\t}\n\n\t// zyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.y, v.w);\n\t}\n\n\t// zzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.z, v.x);\n\t}\n\n\t// zzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.z, v.y);\n\t}\n\n\t// zzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.z, v.z);\n\t}\n\n\t// zzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.z, v.w);\n\t}\n\n\t// zwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.w, v.x);\n\t}\n\n\t// zwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.w, v.y);\n\t}\n\n\t// zwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.w, v.z);\n\t}\n\n\t// zww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> zww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.z, v.w, v.w);\n\t}\n\n\t// wxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.x, v.x);\n\t}\n\n\t// wxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.x, v.y);\n\t}\n\n\t// wxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.x, v.z);\n\t}\n\n\t// wxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.x, v.w);\n\t}\n\n\t// wyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.y, v.x);\n\t}\n\n\t// wyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.y, v.y);\n\t}\n\n\t// wyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.y, v.z);\n\t}\n\n\t// wyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.y, v.w);\n\t}\n\n\t// wzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.z, v.x);\n\t}\n\n\t// wzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.z, v.y);\n\t}\n\n\t// wzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.z, v.z);\n\t}\n\n\t// wzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.z, v.w);\n\t}\n\n\t// wwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.w, v.x);\n\t}\n\n\t// wwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.w, v.y);\n\t}\n\n\t// wwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> wwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.w, v.z);\n\t}\n\n\t// www\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<3, T, Q> www(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<3, T, Q>(v.w, v.w, v.w);\n\t}\n\n\t// xxxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<1, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.x);\n\t}\n\n\t// xxxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.y);\n\t}\n\n\t// xxxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.z);\n\t}\n\n\t// xxxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.x, v.w);\n\t}\n\n\t// xxyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.x);\n\t}\n\n\t// xxyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.y);\n\t}\n\n\t// xxyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.z);\n\t}\n\n\t// xxyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.y, v.w);\n\t}\n\n\t// xxzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.z, v.x);\n\t}\n\n\t// xxzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.z, v.y);\n\t}\n\n\t// xxzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.z, v.z);\n\t}\n\n\t// xxzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.z, v.w);\n\t}\n\n\t// xxwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.w, v.x);\n\t}\n\n\t// xxwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.w, v.y);\n\t}\n\n\t// xxwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.w, v.z);\n\t}\n\n\t// xxww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xxww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.x, v.w, v.w);\n\t}\n\n\t// xyxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.x);\n\t}\n\n\t// xyxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.y);\n\t}\n\n\t// xyxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.z);\n\t}\n\n\t// xyxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.x, v.w);\n\t}\n\n\t// xyyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.x);\n\t}\n\n\t// xyyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.y);\n\t}\n\n\t// xyyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.z);\n\t}\n\n\t// xyyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.y, v.w);\n\t}\n\n\t// xyzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.z, v.x);\n\t}\n\n\t// xyzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.z, v.y);\n\t}\n\n\t// xyzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.z, v.z);\n\t}\n\n\t// xyzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.z, v.w);\n\t}\n\n\t// xywx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xywx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.w, v.x);\n\t}\n\n\t// xywy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xywy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.w, v.y);\n\t}\n\n\t// xywz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xywz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.w, v.z);\n\t}\n\n\t// xyww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xyww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.y, v.w, v.w);\n\t}\n\n\t// xzxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.x, v.x);\n\t}\n\n\t// xzxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.x, v.y);\n\t}\n\n\t// xzxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.x, v.z);\n\t}\n\n\t// xzxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.x, v.w);\n\t}\n\n\t// xzyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.y, v.x);\n\t}\n\n\t// xzyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.y, v.y);\n\t}\n\n\t// xzyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.y, v.z);\n\t}\n\n\t// xzyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.y, v.w);\n\t}\n\n\t// xzzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.z, v.x);\n\t}\n\n\t// xzzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.z, v.y);\n\t}\n\n\t// xzzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.z, v.z);\n\t}\n\n\t// xzzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.z, v.w);\n\t}\n\n\t// xzwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.w, v.x);\n\t}\n\n\t// xzwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.w, v.y);\n\t}\n\n\t// xzwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.w, v.z);\n\t}\n\n\t// xzww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xzww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.z, v.w, v.w);\n\t}\n\n\t// xwxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.x, v.x);\n\t}\n\n\t// xwxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.x, v.y);\n\t}\n\n\t// xwxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.x, v.z);\n\t}\n\n\t// xwxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.x, v.w);\n\t}\n\n\t// xwyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.y, v.x);\n\t}\n\n\t// xwyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.y, v.y);\n\t}\n\n\t// xwyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.y, v.z);\n\t}\n\n\t// xwyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.y, v.w);\n\t}\n\n\t// xwzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.z, v.x);\n\t}\n\n\t// xwzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.z, v.y);\n\t}\n\n\t// xwzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.z, v.z);\n\t}\n\n\t// xwzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.z, v.w);\n\t}\n\n\t// xwwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.w, v.x);\n\t}\n\n\t// xwwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.w, v.y);\n\t}\n\n\t// xwwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.w, v.z);\n\t}\n\n\t// xwww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> xwww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.x, v.w, v.w, v.w);\n\t}\n\n\t// yxxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.x);\n\t}\n\n\t// yxxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.y);\n\t}\n\n\t// yxxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.z);\n\t}\n\n\t// yxxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.x, v.w);\n\t}\n\n\t// yxyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.x);\n\t}\n\n\t// yxyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.y);\n\t}\n\n\t// yxyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.z);\n\t}\n\n\t// yxyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.y, v.w);\n\t}\n\n\t// yxzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.z, v.x);\n\t}\n\n\t// yxzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.z, v.y);\n\t}\n\n\t// yxzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.z, v.z);\n\t}\n\n\t// yxzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.z, v.w);\n\t}\n\n\t// yxwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.w, v.x);\n\t}\n\n\t// yxwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.w, v.y);\n\t}\n\n\t// yxwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.w, v.z);\n\t}\n\n\t// yxww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yxww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.x, v.w, v.w);\n\t}\n\n\t// yyxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.x);\n\t}\n\n\t// yyxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.y);\n\t}\n\n\t// yyxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.z);\n\t}\n\n\t// yyxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.x, v.w);\n\t}\n\n\t// yyyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.x);\n\t}\n\n\t// yyyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<2, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.y);\n\t}\n\n\t// yyyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.z);\n\t}\n\n\t// yyyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.y, v.w);\n\t}\n\n\t// yyzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.z, v.x);\n\t}\n\n\t// yyzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.z, v.y);\n\t}\n\n\t// yyzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.z, v.z);\n\t}\n\n\t// yyzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.z, v.w);\n\t}\n\n\t// yywx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yywx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.w, v.x);\n\t}\n\n\t// yywy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yywy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.w, v.y);\n\t}\n\n\t// yywz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yywz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.w, v.z);\n\t}\n\n\t// yyww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yyww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.y, v.w, v.w);\n\t}\n\n\t// yzxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.x, v.x);\n\t}\n\n\t// yzxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.x, v.y);\n\t}\n\n\t// yzxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.x, v.z);\n\t}\n\n\t// yzxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.x, v.w);\n\t}\n\n\t// yzyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.y, v.x);\n\t}\n\n\t// yzyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.y, v.y);\n\t}\n\n\t// yzyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.y, v.z);\n\t}\n\n\t// yzyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.y, v.w);\n\t}\n\n\t// yzzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.z, v.x);\n\t}\n\n\t// yzzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.z, v.y);\n\t}\n\n\t// yzzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.z, v.z);\n\t}\n\n\t// yzzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.z, v.w);\n\t}\n\n\t// yzwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.w, v.x);\n\t}\n\n\t// yzwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.w, v.y);\n\t}\n\n\t// yzwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.w, v.z);\n\t}\n\n\t// yzww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> yzww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.z, v.w, v.w);\n\t}\n\n\t// ywxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.x, v.x);\n\t}\n\n\t// ywxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.x, v.y);\n\t}\n\n\t// ywxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.x, v.z);\n\t}\n\n\t// ywxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.x, v.w);\n\t}\n\n\t// ywyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.y, v.x);\n\t}\n\n\t// ywyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.y, v.y);\n\t}\n\n\t// ywyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.y, v.z);\n\t}\n\n\t// ywyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.y, v.w);\n\t}\n\n\t// ywzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.z, v.x);\n\t}\n\n\t// ywzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.z, v.y);\n\t}\n\n\t// ywzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.z, v.z);\n\t}\n\n\t// ywzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.z, v.w);\n\t}\n\n\t// ywwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.w, v.x);\n\t}\n\n\t// ywwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.w, v.y);\n\t}\n\n\t// ywwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.w, v.z);\n\t}\n\n\t// ywww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> ywww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.y, v.w, v.w, v.w);\n\t}\n\n\t// zxxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.x, v.x);\n\t}\n\n\t// zxxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.x, v.y);\n\t}\n\n\t// zxxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.x, v.z);\n\t}\n\n\t// zxxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.x, v.w);\n\t}\n\n\t// zxyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.y, v.x);\n\t}\n\n\t// zxyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.y, v.y);\n\t}\n\n\t// zxyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.y, v.z);\n\t}\n\n\t// zxyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.y, v.w);\n\t}\n\n\t// zxzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.z, v.x);\n\t}\n\n\t// zxzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.z, v.y);\n\t}\n\n\t// zxzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.z, v.z);\n\t}\n\n\t// zxzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.z, v.w);\n\t}\n\n\t// zxwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.w, v.x);\n\t}\n\n\t// zxwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.w, v.y);\n\t}\n\n\t// zxwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.w, v.z);\n\t}\n\n\t// zxww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zxww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.x, v.w, v.w);\n\t}\n\n\t// zyxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.x, v.x);\n\t}\n\n\t// zyxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.x, v.y);\n\t}\n\n\t// zyxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.x, v.z);\n\t}\n\n\t// zyxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.x, v.w);\n\t}\n\n\t// zyyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.y, v.x);\n\t}\n\n\t// zyyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.y, v.y);\n\t}\n\n\t// zyyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.y, v.z);\n\t}\n\n\t// zyyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.y, v.w);\n\t}\n\n\t// zyzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.z, v.x);\n\t}\n\n\t// zyzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.z, v.y);\n\t}\n\n\t// zyzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.z, v.z);\n\t}\n\n\t// zyzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.z, v.w);\n\t}\n\n\t// zywx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zywx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.w, v.x);\n\t}\n\n\t// zywy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zywy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.w, v.y);\n\t}\n\n\t// zywz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zywz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.w, v.z);\n\t}\n\n\t// zyww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zyww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.y, v.w, v.w);\n\t}\n\n\t// zzxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.x, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.x, v.x);\n\t}\n\n\t// zzxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.x, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.x, v.y);\n\t}\n\n\t// zzxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.x, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.x, v.z);\n\t}\n\n\t// zzxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.x, v.w);\n\t}\n\n\t// zzyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.y, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.y, v.x);\n\t}\n\n\t// zzyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.y, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.y, v.y);\n\t}\n\n\t// zzyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.y, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.y, v.z);\n\t}\n\n\t// zzyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.y, v.w);\n\t}\n\n\t// zzzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.z, v.x);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.z, v.x);\n\t}\n\n\t// zzzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.z, v.y);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.z, v.y);\n\t}\n\n\t// zzzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<3, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.z, v.z);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.z, v.z);\n\t}\n\n\t// zzzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.z, v.w);\n\t}\n\n\t// zzwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.w, v.x);\n\t}\n\n\t// zzwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.w, v.y);\n\t}\n\n\t// zzwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.w, v.z);\n\t}\n\n\t// zzww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zzww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.z, v.w, v.w);\n\t}\n\n\t// zwxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.x, v.x);\n\t}\n\n\t// zwxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.x, v.y);\n\t}\n\n\t// zwxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.x, v.z);\n\t}\n\n\t// zwxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.x, v.w);\n\t}\n\n\t// zwyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.y, v.x);\n\t}\n\n\t// zwyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.y, v.y);\n\t}\n\n\t// zwyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.y, v.z);\n\t}\n\n\t// zwyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.y, v.w);\n\t}\n\n\t// zwzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.z, v.x);\n\t}\n\n\t// zwzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.z, v.y);\n\t}\n\n\t// zwzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.z, v.z);\n\t}\n\n\t// zwzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.z, v.w);\n\t}\n\n\t// zwwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.w, v.x);\n\t}\n\n\t// zwwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.w, v.y);\n\t}\n\n\t// zwwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.w, v.z);\n\t}\n\n\t// zwww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> zwww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.z, v.w, v.w, v.w);\n\t}\n\n\t// wxxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.x, v.x);\n\t}\n\n\t// wxxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.x, v.y);\n\t}\n\n\t// wxxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.x, v.z);\n\t}\n\n\t// wxxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.x, v.w);\n\t}\n\n\t// wxyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.y, v.x);\n\t}\n\n\t// wxyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.y, v.y);\n\t}\n\n\t// wxyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.y, v.z);\n\t}\n\n\t// wxyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.y, v.w);\n\t}\n\n\t// wxzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.z, v.x);\n\t}\n\n\t// wxzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.z, v.y);\n\t}\n\n\t// wxzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.z, v.z);\n\t}\n\n\t// wxzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.z, v.w);\n\t}\n\n\t// wxwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.w, v.x);\n\t}\n\n\t// wxwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.w, v.y);\n\t}\n\n\t// wxwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.w, v.z);\n\t}\n\n\t// wxww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wxww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.x, v.w, v.w);\n\t}\n\n\t// wyxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.x, v.x);\n\t}\n\n\t// wyxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.x, v.y);\n\t}\n\n\t// wyxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.x, v.z);\n\t}\n\n\t// wyxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.x, v.w);\n\t}\n\n\t// wyyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.y, v.x);\n\t}\n\n\t// wyyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.y, v.y);\n\t}\n\n\t// wyyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.y, v.z);\n\t}\n\n\t// wyyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.y, v.w);\n\t}\n\n\t// wyzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.z, v.x);\n\t}\n\n\t// wyzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.z, v.y);\n\t}\n\n\t// wyzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.z, v.z);\n\t}\n\n\t// wyzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.z, v.w);\n\t}\n\n\t// wywx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wywx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.w, v.x);\n\t}\n\n\t// wywy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wywy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.w, v.y);\n\t}\n\n\t// wywz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wywz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.w, v.z);\n\t}\n\n\t// wyww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wyww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.y, v.w, v.w);\n\t}\n\n\t// wzxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.x, v.x);\n\t}\n\n\t// wzxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.x, v.y);\n\t}\n\n\t// wzxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.x, v.z);\n\t}\n\n\t// wzxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.x, v.w);\n\t}\n\n\t// wzyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.y, v.x);\n\t}\n\n\t// wzyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.y, v.y);\n\t}\n\n\t// wzyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.y, v.z);\n\t}\n\n\t// wzyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.y, v.w);\n\t}\n\n\t// wzzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.z, v.x);\n\t}\n\n\t// wzzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.z, v.y);\n\t}\n\n\t// wzzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.z, v.z);\n\t}\n\n\t// wzzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.z, v.w);\n\t}\n\n\t// wzwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.w, v.x);\n\t}\n\n\t// wzwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.w, v.y);\n\t}\n\n\t// wzwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.w, v.z);\n\t}\n\n\t// wzww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wzww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.z, v.w, v.w);\n\t}\n\n\t// wwxx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwxx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.x, v.x);\n\t}\n\n\t// wwxy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwxy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.x, v.y);\n\t}\n\n\t// wwxz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwxz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.x, v.z);\n\t}\n\n\t// wwxw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwxw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.x, v.w);\n\t}\n\n\t// wwyx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwyx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.y, v.x);\n\t}\n\n\t// wwyy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwyy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.y, v.y);\n\t}\n\n\t// wwyz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwyz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.y, v.z);\n\t}\n\n\t// wwyw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwyw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.y, v.w);\n\t}\n\n\t// wwzx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwzx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.z, v.x);\n\t}\n\n\t// wwzy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwzy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.z, v.y);\n\t}\n\n\t// wwzz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwzz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.z, v.z);\n\t}\n\n\t// wwzw\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwzw(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.z, v.w);\n\t}\n\n\t// wwwx\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwwx(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.w, v.x);\n\t}\n\n\t// wwwy\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwwy(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.w, v.y);\n\t}\n\n\t// wwwz\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwwz(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.w, v.z);\n\t}\n\n\t// wwww\n\ttemplate<typename T, qualifier Q>\n\tGLM_INLINE glm::vec<4, T, Q> wwww(const glm::vec<4, T, Q> &v) {\n\t\treturn glm::vec<4, T, Q>(v.w, v.w, v.w, v.w);\n\t}\n\n\t/// @}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/vector_angle.hpp",
    "content": "/// @ref gtx_vector_angle\n/// @file glm/gtx/vector_angle.hpp\n///\n/// @see core (dependence)\n/// @see gtx_quaternion (dependence)\n/// @see gtx_epsilon (dependence)\n///\n/// @defgroup gtx_vector_angle GLM_GTX_vector_angle\n/// @ingroup gtx\n///\n/// Include <glm/gtx/vector_angle.hpp> to use the features of this extension.\n///\n/// Compute angle between vectors\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../gtc/epsilon.hpp\"\n#include \"../gtx/quaternion.hpp\"\n#include \"../gtx/rotate_vector.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_vector_angle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_vector_angle extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_vector_angle\n\t/// @{\n\n\t//! Returns the absolute angle between two vectors.\n\t//! Parameters need to be normalized.\n\t/// @see gtx_vector_angle extension.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL T angle(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t//! Returns the oriented angle between two 2d vectors.\n\t//! Parameters need to be normalized.\n\t/// @see gtx_vector_angle extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T orientedAngle(vec<2, T, Q> const& x, vec<2, T, Q> const& y);\n\n\t//! Returns the oriented angle between two 3d vectors based from a reference axis.\n\t//! Parameters need to be normalized.\n\t/// @see gtx_vector_angle extension.\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_DECL T orientedAngle(vec<3, T, Q> const& x, vec<3, T, Q> const& y, vec<3, T, Q> const& ref);\n\n\t/// @}\n}// namespace glm\n\n#include \"vector_angle.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/vector_angle.inl",
    "content": "/// @ref gtx_vector_angle\n\nnamespace glm\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType angle\n\t(\n\t\tgenType const& x,\n\t\tgenType const& y\n\t)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genType>::is_iec559, \"'angle' only accept floating-point inputs\");\n\t\treturn acos(clamp(dot(x, y), genType(-1), genType(1)));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T angle(vec<L, T, Q> const& x, vec<L, T, Q> const& y)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'angle' only accept floating-point inputs\");\n\t\treturn acos(clamp(dot(x, y), T(-1), T(1)));\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T orientedAngle(vec<2, T, Q> const& x, vec<2, T, Q> const& y)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'orientedAngle' only accept floating-point inputs\");\n\t\tT const Angle(acos(clamp(dot(x, y), T(-1), T(1))));\n\n\t\tT const partialCross = x.x * y.y - y.x * x.y;\n\n\t\tif (partialCross > T(0))\n\t\t\treturn Angle;\n\t\telse\n\t\t\treturn -Angle;\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER T orientedAngle(vec<3, T, Q> const& x, vec<3, T, Q> const& y, vec<3, T, Q> const& ref)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'orientedAngle' only accept floating-point inputs\");\n\n\t\tT const Angle(acos(clamp(dot(x, y), T(-1), T(1))));\n\t\treturn mix(Angle, -Angle, dot(ref, cross(x, y)) < T(0));\n\t}\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/vector_query.hpp",
    "content": "/// @ref gtx_vector_query\n/// @file glm/gtx/vector_query.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_vector_query GLM_GTX_vector_query\n/// @ingroup gtx\n///\n/// Include <glm/gtx/vector_query.hpp> to use the features of this extension.\n///\n/// Query information of vector types\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include <cfloat>\n#include <limits>\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_vector_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_vector_query extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_vector_query\n\t/// @{\n\n\t//! Check whether two vectors are collinears.\n\t/// @see gtx_vector_query extensions.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL bool areCollinear(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon);\n\n\t//! Check whether two vectors are orthogonals.\n\t/// @see gtx_vector_query extensions.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL bool areOrthogonal(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon);\n\n\t//! Check whether a vector is normalized.\n\t/// @see gtx_vector_query extensions.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL bool isNormalized(vec<L, T, Q> const& v, T const& epsilon);\n\n\t//! Check whether a vector is null.\n\t/// @see gtx_vector_query extensions.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL bool isNull(vec<L, T, Q> const& v, T const& epsilon);\n\n\t//! Check whether a each component of a vector is null.\n\t/// @see gtx_vector_query extensions.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, bool, Q> isCompNull(vec<L, T, Q> const& v, T const& epsilon);\n\n\t//! Check whether two vectors are orthonormal.\n\t/// @see gtx_vector_query extensions.\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL bool areOrthonormal(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon);\n\n\t/// @}\n}// namespace glm\n\n#include \"vector_query.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/vector_query.inl",
    "content": "/// @ref gtx_vector_query\n\n#include <cassert>\n\nnamespace glm{\nnamespace detail\n{\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct compute_areCollinear{};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_areCollinear<2, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static bool call(vec<2, T, Q> const& v0, vec<2, T, Q> const& v1, T const& epsilon)\n\t\t{\n\t\t\treturn length(cross(vec<3, T, Q>(v0, static_cast<T>(0)), vec<3, T, Q>(v1, static_cast<T>(0)))) < epsilon;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_areCollinear<3, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static bool call(vec<3, T, Q> const& v0, vec<3, T, Q> const& v1, T const& epsilon)\n\t\t{\n\t\t\treturn length(cross(v0, v1)) < epsilon;\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_areCollinear<4, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static bool call(vec<4, T, Q> const& v0, vec<4, T, Q> const& v1, T const& epsilon)\n\t\t{\n\t\t\treturn length(cross(vec<3, T, Q>(v0), vec<3, T, Q>(v1))) < epsilon;\n\t\t}\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tstruct compute_isCompNull{};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_isCompNull<2, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<2, bool, Q> call(vec<2, T, Q> const& v, T const& epsilon)\n\t\t{\n\t\t\treturn vec<2, bool, Q>(\n\t\t\t\t(abs(v.x) < epsilon),\n\t\t\t\t(abs(v.y) < epsilon));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_isCompNull<3, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<3, bool, Q> call(vec<3, T, Q> const& v, T const& epsilon)\n\t\t{\n\t\t\treturn vec<3, bool, Q>(\n\t\t\t\t(abs(v.x) < epsilon),\n\t\t\t\t(abs(v.y) < epsilon),\n\t\t\t\t(abs(v.z) < epsilon));\n\t\t}\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct compute_isCompNull<4, T, Q>\n\t{\n\t\tGLM_FUNC_QUALIFIER static vec<4, bool, Q> call(vec<4, T, Q> const& v, T const& epsilon)\n\t\t{\n\t\t\treturn vec<4, bool, Q>(\n\t\t\t\t(abs(v.x) < epsilon),\n\t\t\t\t(abs(v.y) < epsilon),\n\t\t\t\t(abs(v.z) < epsilon),\n\t\t\t\t(abs(v.w) < epsilon));\n\t\t}\n\t};\n\n}//namespace detail\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool areCollinear(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'areCollinear' only accept floating-point inputs\");\n\n\t\treturn detail::compute_areCollinear<L, T, Q>::call(v0, v1, epsilon);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool areOrthogonal(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'areOrthogonal' only accept floating-point inputs\");\n\n\t\treturn abs(dot(v0, v1)) <= max(\n\t\t\tstatic_cast<T>(1),\n\t\t\tlength(v0)) * max(static_cast<T>(1), length(v1)) * epsilon;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isNormalized(vec<L, T, Q> const& v, T const& epsilon)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isNormalized' only accept floating-point inputs\");\n\n\t\treturn abs(length(v) - static_cast<T>(1)) <= static_cast<T>(2) * epsilon;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool isNull(vec<L, T, Q> const& v, T const& epsilon)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isNull' only accept floating-point inputs\");\n\n\t\treturn length(v) <= epsilon;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<L, bool, Q> isCompNull(vec<L, T, Q> const& v, T const& epsilon)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_iec559, \"'isCompNull' only accept floating-point inputs\");\n\n\t\treturn detail::compute_isCompNull<L, T, Q>::call(v, epsilon);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<2, bool, Q> isCompNull(vec<2, T, Q> const& v, T const& epsilon)\n\t{\n\t\treturn vec<2, bool, Q>(\n\t\t\tabs(v.x) < epsilon,\n\t\t\tabs(v.y) < epsilon);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<3, bool, Q> isCompNull(vec<3, T, Q> const& v, T const& epsilon)\n\t{\n\t\treturn vec<3, bool, Q>(\n\t\t\tabs(v.x) < epsilon,\n\t\t\tabs(v.y) < epsilon,\n\t\t\tabs(v.z) < epsilon);\n\t}\n\n\ttemplate<typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER vec<4, bool, Q> isCompNull(vec<4, T, Q> const& v, T const& epsilon)\n\t{\n\t\treturn vec<4, bool, Q>(\n\t\t\tabs(v.x) < epsilon,\n\t\t\tabs(v.y) < epsilon,\n\t\t\tabs(v.z) < epsilon,\n\t\t\tabs(v.w) < epsilon);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER bool areOrthonormal(vec<L, T, Q> const& v0, vec<L, T, Q> const& v1, T const& epsilon)\n\t{\n\t\treturn isNormalized(v0, epsilon) && isNormalized(v1, epsilon) && (abs(dot(v0, v1)) <= epsilon);\n\t}\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/wrap.hpp",
    "content": "/// @ref gtx_wrap\n/// @file glm/gtx/wrap.hpp\n///\n/// @see core (dependence)\n///\n/// @defgroup gtx_wrap GLM_GTX_wrap\n/// @ingroup gtx\n///\n/// Include <glm/gtx/wrap.hpp> to use the features of this extension.\n///\n/// Wrapping mode of texture coordinates.\n\n#pragma once\n\n// Dependency:\n#include \"../glm.hpp\"\n#include \"../ext/scalar_common.hpp\"\n#include \"../ext/vector_common.hpp\"\n#include \"../gtc/vec1.hpp\"\n\n#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED)\n#\tifndef GLM_ENABLE_EXPERIMENTAL\n#\t\tpragma message(\"GLM: GLM_GTX_wrap is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.\")\n#\telse\n#\t\tpragma message(\"GLM: GLM_GTX_wrap extension included\")\n#\tendif\n#endif\n\nnamespace glm\n{\n\t/// @addtogroup gtx_wrap\n\t/// @{\n\n\t/// @}\n}// namespace glm\n\n#include \"wrap.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/gtx/wrap.inl",
    "content": "/// @ref gtx_wrap\n\nnamespace glm\n{\n\n}//namespace glm\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/integer.hpp",
    "content": "/// @ref core\n/// @file glm/integer.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n///\n/// @defgroup core_func_integer Integer functions\n/// @ingroup core\n///\n/// Provides GLSL functions on integer types\n///\n/// These all operate component-wise. The description is per component.\n/// The notation [a, b] means the set of bits from bit-number a through bit-number\n/// b, inclusive. The lowest-order bit is bit 0.\n///\n/// Include <glm/integer.hpp> to use these core features.\n\n#pragma once\n\n#include \"detail/qualifier.hpp\"\n#include \"common.hpp\"\n#include \"vector_relational.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_func_integer\n\t/// @{\n\n\t/// Adds 32-bit unsigned integer x and y, returning the sum\n\t/// modulo pow(2, 32). The value carry is set to 0 if the sum was\n\t/// less than pow(2, 32), or to 1 otherwise.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/uaddCarry.xml\">GLSL uaddCarry man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL vec<L, uint, Q> uaddCarry(\n\t\tvec<L, uint, Q> const& x,\n\t\tvec<L, uint, Q> const& y,\n\t\tvec<L, uint, Q> & carry);\n\n\t/// Subtracts the 32-bit unsigned integer y from x, returning\n\t/// the difference if non-negative, or pow(2, 32) plus the difference\n\t/// otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/usubBorrow.xml\">GLSL usubBorrow man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL vec<L, uint, Q> usubBorrow(\n\t\tvec<L, uint, Q> const& x,\n\t\tvec<L, uint, Q> const& y,\n\t\tvec<L, uint, Q> & borrow);\n\n\t/// Multiplies 32-bit integers x and y, producing a 64-bit\n\t/// result. The 32 least-significant bits are returned in lsb.\n\t/// The 32 most-significant bits are returned in msb.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/umulExtended.xml\">GLSL umulExtended man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL void umulExtended(\n\t\tvec<L, uint, Q> const& x,\n\t\tvec<L, uint, Q> const& y,\n\t\tvec<L, uint, Q> & msb,\n\t\tvec<L, uint, Q> & lsb);\n\n\t/// Multiplies 32-bit integers x and y, producing a 64-bit\n\t/// result. The 32 least-significant bits are returned in lsb.\n\t/// The 32 most-significant bits are returned in msb.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/imulExtended.xml\">GLSL imulExtended man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL void imulExtended(\n\t\tvec<L, int, Q> const& x,\n\t\tvec<L, int, Q> const& y,\n\t\tvec<L, int, Q> & msb,\n\t\tvec<L, int, Q> & lsb);\n\n\t/// Extracts bits [offset, offset + bits - 1] from value,\n\t/// returning them in the least significant bits of the result.\n\t/// For unsigned data types, the most significant bits of the\n\t/// result will be set to zero. For signed data types, the\n\t/// most significant bits will be set to the value of bit offset + base - 1.\n\t///\n\t/// If bits is zero, the result will be zero. The result will be\n\t/// undefined if offset or bits is negative, or if the sum of\n\t/// offset and bits is greater than the number of bits used\n\t/// to store the operand.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldExtract.xml\">GLSL bitfieldExtract man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> bitfieldExtract(\n\t\tvec<L, T, Q> const& Value,\n\t\tint Offset,\n\t\tint Bits);\n\n\t/// Returns the insertion the bits least-significant bits of insert into base.\n\t///\n\t/// The result will have bits [offset, offset + bits - 1] taken\n\t/// from bits [0, bits - 1] of insert, and all other bits taken\n\t/// directly from the corresponding bits of base. If bits is\n\t/// zero, the result will simply be base. The result will be\n\t/// undefined if offset or bits is negative, or if the sum of\n\t/// offset and bits is greater than the number of bits used to\n\t/// store the operand.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Signed or unsigned integer scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldInsert.xml\">GLSL bitfieldInsert man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> bitfieldInsert(\n\t\tvec<L, T, Q> const& Base,\n\t\tvec<L, T, Q> const& Insert,\n\t\tint Offset,\n\t\tint Bits);\n\n\t/// Returns the reversal of the bits of value.\n\t/// The bit numbered n of the result will be taken from bit (bits - 1) - n of value,\n\t/// where bits is the total number of bits used to represent value.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Signed or unsigned integer scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldReverse.xml\">GLSL bitfieldReverse man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> bitfieldReverse(vec<L, T, Q> const& v);\n\n\t/// Returns the number of bits set to 1 in the binary representation of value.\n\t///\n\t/// @tparam genType Signed or unsigned integer scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml\">GLSL bitCount man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<typename genType>\n\tGLM_FUNC_DECL int bitCount(genType v);\n\n\t/// Returns the number of bits set to 1 in the binary representation of value.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Signed or unsigned integer scalar or vector types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml\">GLSL bitCount man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int, Q> bitCount(vec<L, T, Q> const& v);\n\n\t/// Returns the bit number of the least significant bit set to\n\t/// 1 in the binary representation of value.\n\t/// If value is zero, -1 will be returned.\n\t///\n\t/// @tparam genIUType Signed or unsigned integer scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml\">GLSL findLSB man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL int findLSB(genIUType x);\n\n\t/// Returns the bit number of the least significant bit set to\n\t/// 1 in the binary representation of value.\n\t/// If value is zero, -1 will be returned.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml\">GLSL findLSB man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int, Q> findLSB(vec<L, T, Q> const& v);\n\n\t/// Returns the bit number of the most significant bit in the binary representation of value.\n\t/// For positive integers, the result will be the bit number of the most significant bit set to 1.\n\t/// For negative integers, the result will be the bit number of the most significant\n\t/// bit set to 0. For a value of zero or negative one, -1 will be returned.\n\t///\n\t/// @tparam genIUType Signed or unsigned integer scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml\">GLSL findMSB man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<typename genIUType>\n\tGLM_FUNC_DECL int findMSB(genIUType x);\n\n\t/// Returns the bit number of the most significant bit in the binary representation of value.\n\t/// For positive integers, the result will be the bit number of the most significant bit set to 1.\n\t/// For negative integers, the result will be the bit number of the most significant\n\t/// bit set to 0. For a value of zero or negative one, -1 will be returned.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T Signed or unsigned integer scalar types.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml\">GLSL findMSB man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.8 Integer Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, int, Q> findMSB(vec<L, T, Q> const& v);\n\n\t/// @}\n}//namespace glm\n\n#include \"detail/func_integer.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/mat2x2.hpp",
    "content": "/// @ref core\n/// @file glm/mat2x2.hpp\n\n#pragma once\n#include \"./ext/matrix_double2x2.hpp\"\n#include \"./ext/matrix_double2x2_precision.hpp\"\n#include \"./ext/matrix_float2x2.hpp\"\n#include \"./ext/matrix_float2x2_precision.hpp\"\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/mat2x3.hpp",
    "content": "/// @ref core\n/// @file glm/mat2x3.hpp\n\n#pragma once\n#include \"./ext/matrix_double2x3.hpp\"\n#include \"./ext/matrix_double2x3_precision.hpp\"\n#include \"./ext/matrix_float2x3.hpp\"\n#include \"./ext/matrix_float2x3_precision.hpp\"\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/mat2x4.hpp",
    "content": "/// @ref core\n/// @file glm/mat2x4.hpp\n\n#pragma once\n#include \"./ext/matrix_double2x4.hpp\"\n#include \"./ext/matrix_double2x4_precision.hpp\"\n#include \"./ext/matrix_float2x4.hpp\"\n#include \"./ext/matrix_float2x4_precision.hpp\"\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/mat3x2.hpp",
    "content": "/// @ref core\n/// @file glm/mat3x2.hpp\n\n#pragma once\n#include \"./ext/matrix_double3x2.hpp\"\n#include \"./ext/matrix_double3x2_precision.hpp\"\n#include \"./ext/matrix_float3x2.hpp\"\n#include \"./ext/matrix_float3x2_precision.hpp\"\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/mat3x3.hpp",
    "content": "/// @ref core\n/// @file glm/mat3x3.hpp\n\n#pragma once\n#include \"./ext/matrix_double3x3.hpp\"\n#include \"./ext/matrix_double3x3_precision.hpp\"\n#include \"./ext/matrix_float3x3.hpp\"\n#include \"./ext/matrix_float3x3_precision.hpp\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/mat3x4.hpp",
    "content": "/// @ref core\n/// @file glm/mat3x4.hpp\n\n#pragma once\n#include \"./ext/matrix_double3x4.hpp\"\n#include \"./ext/matrix_double3x4_precision.hpp\"\n#include \"./ext/matrix_float3x4.hpp\"\n#include \"./ext/matrix_float3x4_precision.hpp\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/mat4x2.hpp",
    "content": "/// @ref core\n/// @file glm/mat4x2.hpp\n\n#pragma once\n#include \"./ext/matrix_double4x2.hpp\"\n#include \"./ext/matrix_double4x2_precision.hpp\"\n#include \"./ext/matrix_float4x2.hpp\"\n#include \"./ext/matrix_float4x2_precision.hpp\"\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/mat4x3.hpp",
    "content": "/// @ref core\n/// @file glm/mat4x3.hpp\n\n#pragma once\n#include \"./ext/matrix_double4x3.hpp\"\n#include \"./ext/matrix_double4x3_precision.hpp\"\n#include \"./ext/matrix_float4x3.hpp\"\n#include \"./ext/matrix_float4x3_precision.hpp\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/mat4x4.hpp",
    "content": "/// @ref core\n/// @file glm/mat4x4.hpp\n\n#pragma once\n#include \"./ext/matrix_double4x4.hpp\"\n#include \"./ext/matrix_double4x4_precision.hpp\"\n#include \"./ext/matrix_float4x4.hpp\"\n#include \"./ext/matrix_float4x4_precision.hpp\"\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/matrix.hpp",
    "content": "/// @ref core\n/// @file glm/matrix.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n///\n/// @defgroup core_func_matrix Matrix functions\n/// @ingroup core\n///\n/// Provides GLSL matrix functions.\n///\n/// Include <glm/matrix.hpp> to use these core features.\n\n#pragma once\n\n// Dependencies\n#include \"detail/qualifier.hpp\"\n#include \"detail/setup.hpp\"\n#include \"vec2.hpp\"\n#include \"vec3.hpp\"\n#include \"vec4.hpp\"\n#include \"mat2x2.hpp\"\n#include \"mat2x3.hpp\"\n#include \"mat2x4.hpp\"\n#include \"mat3x2.hpp\"\n#include \"mat3x3.hpp\"\n#include \"mat3x4.hpp\"\n#include \"mat4x2.hpp\"\n#include \"mat4x3.hpp\"\n#include \"mat4x4.hpp\"\n\nnamespace glm {\nnamespace detail\n{\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tstruct outerProduct_trait{};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<2, 2, T, Q>\n\t{\n\t\ttypedef mat<2, 2, T, Q> type;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<2, 3, T, Q>\n\t{\n\t\ttypedef mat<3, 2, T, Q> type;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<2, 4, T, Q>\n\t{\n\t\ttypedef mat<4, 2, T, Q> type;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<3, 2, T, Q>\n\t{\n\t\ttypedef mat<2, 3, T, Q> type;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<3, 3, T, Q>\n\t{\n\t\ttypedef mat<3, 3, T, Q> type;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<3, 4, T, Q>\n\t{\n\t\ttypedef mat<4, 3, T, Q> type;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<4, 2, T, Q>\n\t{\n\t\ttypedef mat<2, 4, T, Q> type;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<4, 3, T, Q>\n\t{\n\t\ttypedef mat<3, 4, T, Q> type;\n\t};\n\n\ttemplate<typename T, qualifier Q>\n\tstruct outerProduct_trait<4, 4, T, Q>\n\t{\n\t\ttypedef mat<4, 4, T, Q> type;\n\t};\n}//namespace detail\n\n\t /// @addtogroup core_func_matrix\n\t /// @{\n\n\t /// Multiply matrix x by matrix y component-wise, i.e.,\n\t /// result[i][j] is the scalar product of x[i][j] and y[i][j].\n\t ///\n\t /// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t /// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t /// @tparam T Floating-point scalar types\n\t /// @tparam Q Value from qualifier enum\n\t ///\n\t /// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/matrixCompMult.xml\">GLSL matrixCompMult man page</a>\n\t /// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<C, R, T, Q> matrixCompMult(mat<C, R, T, Q> const& x, mat<C, R, T, Q> const& y);\n\n\t/// Treats the first parameter c as a column vector\n\t/// and the second parameter r as a row vector\n\t/// and does a linear algebraic matrix multiply c * r.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t/// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/outerProduct.xml\">GLSL outerProduct man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL typename detail::outerProduct_trait<C, R, T, Q>::type outerProduct(vec<C, T, Q> const& c, vec<R, T, Q> const& r);\n\n\t/// Returns the transposed matrix of x\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t/// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/transpose.xml\">GLSL transpose man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL typename mat<C, R, T, Q>::transpose_type transpose(mat<C, R, T, Q> const& x);\n\n\t/// Return the determinant of a squared matrix.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t/// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml\">GLSL determinant man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL T determinant(mat<C, R, T, Q> const& m);\n\n\t/// Return the inverse of a squared matrix.\n\t///\n\t/// @tparam C Integer between 1 and 4 included that qualify the number a column\n\t/// @tparam R Integer between 1 and 4 included that qualify the number a row\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/inverse.xml\">GLSL inverse man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.6 Matrix Functions</a>\n\ttemplate<length_t C, length_t R, typename T, qualifier Q>\n\tGLM_FUNC_DECL mat<C, R, T, Q> inverse(mat<C, R, T, Q> const& m);\n\n\t/// @}\n}//namespace glm\n\n#include \"detail/func_matrix.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/packing.hpp",
    "content": "/// @ref core\n/// @file glm/packing.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n/// @see gtc_packing\n///\n/// @defgroup core_func_packing Floating-Point Pack and Unpack Functions\n/// @ingroup core\n///\n/// Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types.\n///\n/// These functions do not operate component-wise, rather as described in each case.\n///\n/// Include <glm/packing.hpp> to use these core features.\n\n#pragma once\n\n#include \"./ext/vector_uint2.hpp\"\n#include \"./ext/vector_float2.hpp\"\n#include \"./ext/vector_float4.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_func_packing\n\t/// @{\n\n\t/// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.\n\t/// Then, the results are packed into the returned 32-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packUnorm2x16: round(clamp(c, 0, +1) * 65535.0)\n\t///\n\t/// The first component of the vector will be written to the least significant bits of the output;\n\t/// the last component will be written to the most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm2x16.xml\">GLSL packUnorm2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint packUnorm2x16(vec2 const& v);\n\n\t/// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.\n\t/// Then, the results are packed into the returned 32-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packSnorm2x16: round(clamp(v, -1, +1) * 32767.0)\n\t///\n\t/// The first component of the vector will be written to the least significant bits of the output;\n\t/// the last component will be written to the most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm2x16.xml\">GLSL packSnorm2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint packSnorm2x16(vec2 const& v);\n\n\t/// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.\n\t/// Then, the results are packed into the returned 32-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packUnorm4x8:\tround(clamp(c, 0, +1) * 255.0)\n\t///\n\t/// The first component of the vector will be written to the least significant bits of the output;\n\t/// the last component will be written to the most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml\">GLSL packUnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint packUnorm4x8(vec4 const& v);\n\n\t/// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.\n\t/// Then, the results are packed into the returned 32-bit unsigned integer.\n\t///\n\t/// The conversion for component c of v to fixed point is done as follows:\n\t/// packSnorm4x8:\tround(clamp(c, -1, +1) * 127.0)\n\t///\n\t/// The first component of the vector will be written to the least significant bits of the output;\n\t/// the last component will be written to the most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml\">GLSL packSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint packSnorm4x8(vec4 const& v);\n\n\t/// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackUnorm2x16: f / 65535.0\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml\">GLSL unpackUnorm2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec2 unpackUnorm2x16(uint p);\n\n\t/// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackSnorm2x16: clamp(f / 32767.0, -1, +1)\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm2x16.xml\">GLSL unpackSnorm2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec2 unpackSnorm2x16(uint p);\n\n\t/// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackUnorm4x8: f / 255.0\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml\">GLSL unpackUnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec4 unpackUnorm4x8(uint p);\n\n\t/// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.\n\t/// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.\n\t///\n\t/// The conversion for unpacked fixed-point value f to floating point is done as follows:\n\t/// unpackSnorm4x8: clamp(f / 127.0, -1, +1)\n\t///\n\t/// The first component of the returned vector will be extracted from the least significant bits of the input;\n\t/// the last component will be extracted from the most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml\">GLSL unpackSnorm4x8 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec4 unpackSnorm4x8(uint p);\n\n\t/// Returns a double-qualifier value obtained by packing the components of v into a 64-bit value.\n\t/// If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified.\n\t/// Otherwise, the bit- level representation of v is preserved.\n\t/// The first vector component specifies the 32 least significant bits;\n\t/// the second component specifies the 32 most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packDouble2x32.xml\">GLSL packDouble2x32 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL double packDouble2x32(uvec2 const& v);\n\n\t/// Returns a two-component unsigned integer vector representation of v.\n\t/// The bit-level representation of v is preserved.\n\t/// The first component of the vector contains the 32 least significant bits of the double;\n\t/// the second component consists the 32 most significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackDouble2x32.xml\">GLSL unpackDouble2x32 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uvec2 unpackDouble2x32(double v);\n\n\t/// Returns an unsigned integer obtained by converting the components of a two-component floating-point vector\n\t/// to the 16-bit floating-point representation found in the OpenGL Specification,\n\t/// and then packing these two 16- bit integers into a 32-bit unsigned integer.\n\t/// The first vector component specifies the 16 least-significant bits of the result;\n\t/// the second component specifies the 16 most-significant bits.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/packHalf2x16.xml\">GLSL packHalf2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL uint packHalf2x16(vec2 const& v);\n\n\t/// Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values,\n\t/// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification,\n\t/// and converting them to 32-bit floating-point values.\n\t/// The first component of the vector is obtained from the 16 least-significant bits of v;\n\t/// the second component is obtained from the 16 most-significant bits of v.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackHalf2x16.xml\">GLSL unpackHalf2x16 man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions</a>\n\tGLM_FUNC_DECL vec2 unpackHalf2x16(uint v);\n\n\t/// @}\n}//namespace glm\n\n#include \"detail/func_packing.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/simd/common.h",
    "content": "/// @ref simd\n/// @file glm/simd/common.h\n\n#pragma once\n\n#include \"platform.h\"\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_add(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn _mm_add_ps(a, b);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_add(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn _mm_add_ss(a, b);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_sub(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn _mm_sub_ps(a, b);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_sub(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn _mm_sub_ss(a, b);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_mul(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn _mm_mul_ps(a, b);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_mul(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn _mm_mul_ss(a, b);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_div(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn _mm_div_ps(a, b);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_div(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn _mm_div_ss(a, b);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_div_lowp(glm_f32vec4 a, glm_f32vec4 b)\n{\n\treturn glm_vec4_mul(a, _mm_rcp_ps(b));\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_swizzle_xyzw(glm_f32vec4 a)\n{\n#\tif GLM_ARCH & GLM_ARCH_AVX2_BIT\n\t\treturn _mm_permute_ps(a, _MM_SHUFFLE(3, 2, 1, 0));\n#\telse\n\t\treturn _mm_shuffle_ps(a, a, _MM_SHUFFLE(3, 2, 1, 0));\n#\tendif\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_fma(glm_f32vec4 a, glm_f32vec4 b, glm_f32vec4 c)\n{\n#\tif (GLM_ARCH & GLM_ARCH_AVX2_BIT) && !(GLM_COMPILER & GLM_COMPILER_CLANG)\n\t\treturn _mm_fmadd_ss(a, b, c);\n#\telse\n\t\treturn _mm_add_ss(_mm_mul_ss(a, b), c);\n#\tendif\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_fma(glm_f32vec4 a, glm_f32vec4 b, glm_f32vec4 c)\n{\n#\tif (GLM_ARCH & GLM_ARCH_AVX2_BIT) && !(GLM_COMPILER & GLM_COMPILER_CLANG)\n\t\treturn _mm_fmadd_ps(a, b, c);\n#\telse\n\t\treturn glm_vec4_add(glm_vec4_mul(a, b), c);\n#\tendif\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_abs(glm_f32vec4 x)\n{\n\treturn _mm_and_ps(x, _mm_castsi128_ps(_mm_set1_epi32(0x7FFFFFFF)));\n}\n\nGLM_FUNC_QUALIFIER glm_ivec4 glm_ivec4_abs(glm_ivec4 x)\n{\n#\tif GLM_ARCH & GLM_ARCH_SSSE3_BIT\n\t\treturn _mm_sign_epi32(x, x);\n#\telse\n\t\tglm_ivec4 const sgn0 = _mm_srai_epi32(x, 31);\n\t\tglm_ivec4 const inv0 = _mm_xor_si128(x, sgn0);\n\t\tglm_ivec4 const sub0 = _mm_sub_epi32(inv0, sgn0);\n\t\treturn sub0;\n#\tendif\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_sign(glm_vec4 x)\n{\n\tglm_vec4 const zro0 = _mm_setzero_ps();\n\tglm_vec4 const cmp0 = _mm_cmplt_ps(x, zro0);\n\tglm_vec4 const cmp1 = _mm_cmpgt_ps(x, zro0);\n\tglm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(-1.0f));\n\tglm_vec4 const and1 = _mm_and_ps(cmp1, _mm_set1_ps(1.0f));\n\tglm_vec4 const or0 = _mm_or_ps(and0, and1);\n\treturn or0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_round(glm_vec4 x)\n{\n#\tif GLM_ARCH & GLM_ARCH_SSE41_BIT\n\t\treturn _mm_round_ps(x, _MM_FROUND_TO_NEAREST_INT);\n#\telse\n\t\tglm_vec4 const sgn0 = _mm_castsi128_ps(_mm_set1_epi32(int(0x80000000)));\n\t\tglm_vec4 const and0 = _mm_and_ps(sgn0, x);\n\t\tglm_vec4 const or0 = _mm_or_ps(and0, _mm_set_ps1(8388608.0f));\n\t\tglm_vec4 const add0 = glm_vec4_add(x, or0);\n\t\tglm_vec4 const sub0 = glm_vec4_sub(add0, or0);\n\t\treturn sub0;\n#\tendif\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_floor(glm_vec4 x)\n{\n#\tif GLM_ARCH & GLM_ARCH_SSE41_BIT\n\t\treturn _mm_floor_ps(x);\n#\telse\n\t\tglm_vec4 const rnd0 = glm_vec4_round(x);\n\t\tglm_vec4 const cmp0 = _mm_cmplt_ps(x, rnd0);\n\t\tglm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(1.0f));\n\t\tglm_vec4 const sub0 = glm_vec4_sub(rnd0, and0);\n\t\treturn sub0;\n#\tendif\n}\n\n/* trunc TODO\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_trunc(glm_vec4 x)\n{\n\treturn glm_vec4();\n}\n*/\n\n//roundEven\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_roundEven(glm_vec4 x)\n{\n\tglm_vec4 const sgn0 = _mm_castsi128_ps(_mm_set1_epi32(int(0x80000000)));\n\tglm_vec4 const and0 = _mm_and_ps(sgn0, x);\n\tglm_vec4 const or0 = _mm_or_ps(and0, _mm_set_ps1(8388608.0f));\n\tglm_vec4 const add0 = glm_vec4_add(x, or0);\n\tglm_vec4 const sub0 = glm_vec4_sub(add0, or0);\n\treturn sub0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_ceil(glm_vec4 x)\n{\n#\tif GLM_ARCH & GLM_ARCH_SSE41_BIT\n\t\treturn _mm_ceil_ps(x);\n#\telse\n\t\tglm_vec4 const rnd0 = glm_vec4_round(x);\n\t\tglm_vec4 const cmp0 = _mm_cmpgt_ps(x, rnd0);\n\t\tglm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(1.0f));\n\t\tglm_vec4 const add0 = glm_vec4_add(rnd0, and0);\n\t\treturn add0;\n#\tendif\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_fract(glm_vec4 x)\n{\n\tglm_vec4 const flr0 = glm_vec4_floor(x);\n\tglm_vec4 const sub0 = glm_vec4_sub(x, flr0);\n\treturn sub0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mod(glm_vec4 x, glm_vec4 y)\n{\n\tglm_vec4 const div0 = glm_vec4_div(x, y);\n\tglm_vec4 const flr0 = glm_vec4_floor(div0);\n\tglm_vec4 const mul0 = glm_vec4_mul(y, flr0);\n\tglm_vec4 const sub0 = glm_vec4_sub(x, mul0);\n\treturn sub0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_clamp(glm_vec4 v, glm_vec4 minVal, glm_vec4 maxVal)\n{\n\tglm_vec4 const min0 = _mm_min_ps(v, maxVal);\n\tglm_vec4 const max0 = _mm_max_ps(min0, minVal);\n\treturn max0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mix(glm_vec4 v1, glm_vec4 v2, glm_vec4 a)\n{\n\tglm_vec4 const sub0 = glm_vec4_sub(_mm_set1_ps(1.0f), a);\n\tglm_vec4 const mul0 = glm_vec4_mul(v1, sub0);\n\tglm_vec4 const mad0 = glm_vec4_fma(v2, a, mul0);\n\treturn mad0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_step(glm_vec4 edge, glm_vec4 x)\n{\n\tglm_vec4 const cmp = _mm_cmple_ps(x, edge);\n\treturn _mm_movemask_ps(cmp) == 0 ? _mm_set1_ps(1.0f) : _mm_setzero_ps();\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_smoothstep(glm_vec4 edge0, glm_vec4 edge1, glm_vec4 x)\n{\n\tglm_vec4 const sub0 = glm_vec4_sub(x, edge0);\n\tglm_vec4 const sub1 = glm_vec4_sub(edge1, edge0);\n\tglm_vec4 const div0 = glm_vec4_sub(sub0, sub1);\n\tglm_vec4 const clp0 = glm_vec4_clamp(div0, _mm_setzero_ps(), _mm_set1_ps(1.0f));\n\tglm_vec4 const mul0 = glm_vec4_mul(_mm_set1_ps(2.0f), clp0);\n\tglm_vec4 const sub2 = glm_vec4_sub(_mm_set1_ps(3.0f), mul0);\n\tglm_vec4 const mul1 = glm_vec4_mul(clp0, clp0);\n\tglm_vec4 const mul2 = glm_vec4_mul(mul1, sub2);\n\treturn mul2;\n}\n\n// Agner Fog method\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_nan(glm_vec4 x)\n{\n\tglm_ivec4 const t1 = _mm_castps_si128(x);\t\t\t\t\t\t// reinterpret as 32-bit integer\n\tglm_ivec4 const t2 = _mm_sll_epi32(t1, _mm_cvtsi32_si128(1));\t// shift out sign bit\n\tglm_ivec4 const t3 = _mm_set1_epi32(int(0xFF000000));\t\t\t\t// exponent mask\n\tglm_ivec4 const t4 = _mm_and_si128(t2, t3);\t\t\t\t\t\t// exponent\n\tglm_ivec4 const t5 = _mm_andnot_si128(t3, t2);\t\t\t\t\t// fraction\n\tglm_ivec4 const Equal = _mm_cmpeq_epi32(t3, t4);\n\tglm_ivec4 const Nequal = _mm_cmpeq_epi32(t5, _mm_setzero_si128());\n\tglm_ivec4 const And = _mm_and_si128(Equal, Nequal);\n\treturn _mm_castsi128_ps(And);\t\t\t\t\t\t\t\t\t// exponent = all 1s and fraction != 0\n}\n\n// Agner Fog method\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_inf(glm_vec4 x)\n{\n\tglm_ivec4 const t1 = _mm_castps_si128(x);\t\t\t\t\t\t\t\t\t\t// reinterpret as 32-bit integer\n\tglm_ivec4 const t2 = _mm_sll_epi32(t1, _mm_cvtsi32_si128(1));\t\t\t\t\t// shift out sign bit\n\treturn _mm_castsi128_ps(_mm_cmpeq_epi32(t2, _mm_set1_epi32(int(0xFF000000))));\t\t// exponent is all 1s, fraction is 0\n}\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/simd/exponential.h",
    "content": "/// @ref simd\n/// @file glm/simd/experimental.h\n\n#pragma once\n\n#include \"platform.h\"\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_sqrt_lowp(glm_f32vec4 x)\n{\n\treturn _mm_mul_ss(_mm_rsqrt_ss(x), x);\n}\n\nGLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_sqrt_lowp(glm_f32vec4 x)\n{\n\treturn _mm_mul_ps(_mm_rsqrt_ps(x), x);\n}\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/simd/geometric.h",
    "content": "/// @ref simd\n/// @file glm/simd/geometric.h\n\n#pragma once\n\n#include \"common.h\"\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nGLM_FUNC_DECL glm_vec4 glm_vec4_dot(glm_vec4 v1, glm_vec4 v2);\nGLM_FUNC_DECL glm_vec4 glm_vec1_dot(glm_vec4 v1, glm_vec4 v2);\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_length(glm_vec4 x)\n{\n\tglm_vec4 const dot0 = glm_vec4_dot(x, x);\n\tglm_vec4 const sqt0 = _mm_sqrt_ps(dot0);\n\treturn sqt0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_distance(glm_vec4 p0, glm_vec4 p1)\n{\n\tglm_vec4 const sub0 = _mm_sub_ps(p0, p1);\n\tglm_vec4 const len0 = glm_vec4_length(sub0);\n\treturn len0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_dot(glm_vec4 v1, glm_vec4 v2)\n{\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\t\treturn _mm_dp_ps(v1, v2, 0xff);\n#\telif GLM_ARCH & GLM_ARCH_SSE3_BIT\n\t\tglm_vec4 const mul0 = _mm_mul_ps(v1, v2);\n\t\tglm_vec4 const hadd0 = _mm_hadd_ps(mul0, mul0);\n\t\tglm_vec4 const hadd1 = _mm_hadd_ps(hadd0, hadd0);\n\t\treturn hadd1;\n#\telse\n\t\tglm_vec4 const mul0 = _mm_mul_ps(v1, v2);\n\t\tglm_vec4 const swp0 = _mm_shuffle_ps(mul0, mul0, _MM_SHUFFLE(2, 3, 0, 1));\n\t\tglm_vec4 const add0 = _mm_add_ps(mul0, swp0);\n\t\tglm_vec4 const swp1 = _mm_shuffle_ps(add0, add0, _MM_SHUFFLE(0, 1, 2, 3));\n\t\tglm_vec4 const add1 = _mm_add_ps(add0, swp1);\n\t\treturn add1;\n#\tendif\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec1_dot(glm_vec4 v1, glm_vec4 v2)\n{\n#\tif GLM_ARCH & GLM_ARCH_AVX_BIT\n\t\treturn _mm_dp_ps(v1, v2, 0xff);\n#\telif GLM_ARCH & GLM_ARCH_SSE3_BIT\n\t\tglm_vec4 const mul0 = _mm_mul_ps(v1, v2);\n\t\tglm_vec4 const had0 = _mm_hadd_ps(mul0, mul0);\n\t\tglm_vec4 const had1 = _mm_hadd_ps(had0, had0);\n\t\treturn had1;\n#\telse\n\t\tglm_vec4 const mul0 = _mm_mul_ps(v1, v2);\n\t\tglm_vec4 const mov0 = _mm_movehl_ps(mul0, mul0);\n\t\tglm_vec4 const add0 = _mm_add_ps(mov0, mul0);\n\t\tglm_vec4 const swp1 = _mm_shuffle_ps(add0, add0, 1);\n\t\tglm_vec4 const add1 = _mm_add_ss(add0, swp1);\n\t\treturn add1;\n#\tendif\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_cross(glm_vec4 v1, glm_vec4 v2)\n{\n\tglm_vec4 const swp0 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 0, 2, 1));\n\tglm_vec4 const swp1 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 1, 0, 2));\n\tglm_vec4 const swp2 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 0, 2, 1));\n\tglm_vec4 const swp3 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 1, 0, 2));\n\tglm_vec4 const mul0 = _mm_mul_ps(swp0, swp3);\n\tglm_vec4 const mul1 = _mm_mul_ps(swp1, swp2);\n\tglm_vec4 const sub0 = _mm_sub_ps(mul0, mul1);\n\treturn sub0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_normalize(glm_vec4 v)\n{\n\tglm_vec4 const dot0 = glm_vec4_dot(v, v);\n\tglm_vec4 const isr0 = _mm_rsqrt_ps(dot0);\n\tglm_vec4 const mul0 = _mm_mul_ps(v, isr0);\n\treturn mul0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_faceforward(glm_vec4 N, glm_vec4 I, glm_vec4 Nref)\n{\n\tglm_vec4 const dot0 = glm_vec4_dot(Nref, I);\n\tglm_vec4 const sgn0 = glm_vec4_sign(dot0);\n\tglm_vec4 const mul0 = _mm_mul_ps(sgn0, _mm_set1_ps(-1.0f));\n\tglm_vec4 const mul1 = _mm_mul_ps(N, mul0);\n\treturn mul1;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_vec4_reflect(glm_vec4 I, glm_vec4 N)\n{\n\tglm_vec4 const dot0 = glm_vec4_dot(N, I);\n\tglm_vec4 const mul0 = _mm_mul_ps(N, dot0);\n\tglm_vec4 const mul1 = _mm_mul_ps(mul0, _mm_set1_ps(2.0f));\n\tglm_vec4 const sub0 = _mm_sub_ps(I, mul1);\n\treturn sub0;\n}\n\nGLM_FUNC_QUALIFIER __m128 glm_vec4_refract(glm_vec4 I, glm_vec4 N, glm_vec4 eta)\n{\n\tglm_vec4 const dot0 = glm_vec4_dot(N, I);\n\tglm_vec4 const mul0 = _mm_mul_ps(eta, eta);\n\tglm_vec4 const mul1 = _mm_mul_ps(dot0, dot0);\n\tglm_vec4 const sub0 = _mm_sub_ps(_mm_set1_ps(1.0f), mul0);\n\tglm_vec4 const sub1 = _mm_sub_ps(_mm_set1_ps(1.0f), mul1);\n\tglm_vec4 const mul2 = _mm_mul_ps(sub0, sub1);\n\n\tif(_mm_movemask_ps(_mm_cmplt_ss(mul2, _mm_set1_ps(0.0f))) == 0)\n\t\treturn _mm_set1_ps(0.0f);\n\n\tglm_vec4 const sqt0 = _mm_sqrt_ps(mul2);\n\tglm_vec4 const mad0 = glm_vec4_fma(eta, dot0, sqt0);\n\tglm_vec4 const mul4 = _mm_mul_ps(mad0, N);\n\tglm_vec4 const mul5 = _mm_mul_ps(eta, I);\n\tglm_vec4 const sub2 = _mm_sub_ps(mul5, mul4);\n\n\treturn sub2;\n}\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/simd/integer.h",
    "content": "/// @ref simd\n/// @file glm/simd/integer.h\n\n#pragma once\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nGLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave(glm_uvec4 x)\n{\n\tglm_uvec4 const Mask4 = _mm_set1_epi32(0x0000FFFF);\n\tglm_uvec4 const Mask3 = _mm_set1_epi32(0x00FF00FF);\n\tglm_uvec4 const Mask2 = _mm_set1_epi32(0x0F0F0F0F);\n\tglm_uvec4 const Mask1 = _mm_set1_epi32(0x33333333);\n\tglm_uvec4 const Mask0 = _mm_set1_epi32(0x55555555);\n\n\tglm_uvec4 Reg1;\n\tglm_uvec4 Reg2;\n\n\t// REG1 = x;\n\t// REG2 = y;\n\t//Reg1 = _mm_unpacklo_epi64(x, y);\n\tReg1 = x;\n\n\t//REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);\n\t//REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);\n\tReg2 = _mm_slli_si128(Reg1, 2);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask4);\n\n\t//REG1 = ((REG1 <<  8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);\n\t//REG2 = ((REG2 <<  8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);\n\tReg2 = _mm_slli_si128(Reg1, 1);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask3);\n\n\t//REG1 = ((REG1 <<  4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t//REG2 = ((REG2 <<  4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\tReg2 = _mm_slli_epi32(Reg1, 4);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask2);\n\n\t//REG1 = ((REG1 <<  2) | REG1) & glm::uint64(0x3333333333333333);\n\t//REG2 = ((REG2 <<  2) | REG2) & glm::uint64(0x3333333333333333);\n\tReg2 = _mm_slli_epi32(Reg1, 2);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask1);\n\n\t//REG1 = ((REG1 <<  1) | REG1) & glm::uint64(0x5555555555555555);\n\t//REG2 = ((REG2 <<  1) | REG2) & glm::uint64(0x5555555555555555);\n\tReg2 = _mm_slli_epi32(Reg1, 1);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask0);\n\n\t//return REG1 | (REG2 << 1);\n\tReg2 = _mm_slli_epi32(Reg1, 1);\n\tReg2 = _mm_srli_si128(Reg2, 8);\n\tReg1 = _mm_or_si128(Reg1, Reg2);\n\n\treturn Reg1;\n}\n\nGLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave2(glm_uvec4 x, glm_uvec4 y)\n{\n\tglm_uvec4 const Mask4 = _mm_set1_epi32(0x0000FFFF);\n\tglm_uvec4 const Mask3 = _mm_set1_epi32(0x00FF00FF);\n\tglm_uvec4 const Mask2 = _mm_set1_epi32(0x0F0F0F0F);\n\tglm_uvec4 const Mask1 = _mm_set1_epi32(0x33333333);\n\tglm_uvec4 const Mask0 = _mm_set1_epi32(0x55555555);\n\n\tglm_uvec4 Reg1;\n\tglm_uvec4 Reg2;\n\n\t// REG1 = x;\n\t// REG2 = y;\n\tReg1 = _mm_unpacklo_epi64(x, y);\n\n\t//REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);\n\t//REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);\n\tReg2 = _mm_slli_si128(Reg1, 2);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask4);\n\n\t//REG1 = ((REG1 <<  8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);\n\t//REG2 = ((REG2 <<  8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);\n\tReg2 = _mm_slli_si128(Reg1, 1);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask3);\n\n\t//REG1 = ((REG1 <<  4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t//REG2 = ((REG2 <<  4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\tReg2 = _mm_slli_epi32(Reg1, 4);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask2);\n\n\t//REG1 = ((REG1 <<  2) | REG1) & glm::uint64(0x3333333333333333);\n\t//REG2 = ((REG2 <<  2) | REG2) & glm::uint64(0x3333333333333333);\n\tReg2 = _mm_slli_epi32(Reg1, 2);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask1);\n\n\t//REG1 = ((REG1 <<  1) | REG1) & glm::uint64(0x5555555555555555);\n\t//REG2 = ((REG2 <<  1) | REG2) & glm::uint64(0x5555555555555555);\n\tReg2 = _mm_slli_epi32(Reg1, 1);\n\tReg1 = _mm_or_si128(Reg2, Reg1);\n\tReg1 = _mm_and_si128(Reg1, Mask0);\n\n\t//return REG1 | (REG2 << 1);\n\tReg2 = _mm_slli_epi32(Reg1, 1);\n\tReg2 = _mm_srli_si128(Reg2, 8);\n\tReg1 = _mm_or_si128(Reg1, Reg2);\n\n\treturn Reg1;\n}\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/simd/matrix.h",
    "content": "/// @ref simd\n/// @file glm/simd/matrix.h\n\n#pragma once\n\n#include \"geometric.h\"\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\nGLM_FUNC_QUALIFIER void glm_mat4_matrixCompMult(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4])\n{\n\tout[0] = _mm_mul_ps(in1[0], in2[0]);\n\tout[1] = _mm_mul_ps(in1[1], in2[1]);\n\tout[2] = _mm_mul_ps(in1[2], in2[2]);\n\tout[3] = _mm_mul_ps(in1[3], in2[3]);\n}\n\nGLM_FUNC_QUALIFIER void glm_mat4_add(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4])\n{\n\tout[0] = _mm_add_ps(in1[0], in2[0]);\n\tout[1] = _mm_add_ps(in1[1], in2[1]);\n\tout[2] = _mm_add_ps(in1[2], in2[2]);\n\tout[3] = _mm_add_ps(in1[3], in2[3]);\n}\n\nGLM_FUNC_QUALIFIER void glm_mat4_sub(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4])\n{\n\tout[0] = _mm_sub_ps(in1[0], in2[0]);\n\tout[1] = _mm_sub_ps(in1[1], in2[1]);\n\tout[2] = _mm_sub_ps(in1[2], in2[2]);\n\tout[3] = _mm_sub_ps(in1[3], in2[3]);\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_mat4_mul_vec4(glm_vec4 const m[4], glm_vec4 v)\n{\n\t__m128 v0 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 v1 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(1, 1, 1, 1));\n\t__m128 v2 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(2, 2, 2, 2));\n\t__m128 v3 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(3, 3, 3, 3));\n\n\t__m128 m0 = _mm_mul_ps(m[0], v0);\n\t__m128 m1 = _mm_mul_ps(m[1], v1);\n\t__m128 m2 = _mm_mul_ps(m[2], v2);\n\t__m128 m3 = _mm_mul_ps(m[3], v3);\n\n\t__m128 a0 = _mm_add_ps(m0, m1);\n\t__m128 a1 = _mm_add_ps(m2, m3);\n\t__m128 a2 = _mm_add_ps(a0, a1);\n\n\treturn a2;\n}\n\nGLM_FUNC_QUALIFIER __m128 glm_vec4_mul_mat4(glm_vec4 v, glm_vec4 const m[4])\n{\n\t__m128 i0 = m[0];\n\t__m128 i1 = m[1];\n\t__m128 i2 = m[2];\n\t__m128 i3 = m[3];\n\n\t__m128 m0 = _mm_mul_ps(v, i0);\n\t__m128 m1 = _mm_mul_ps(v, i1);\n\t__m128 m2 = _mm_mul_ps(v, i2);\n\t__m128 m3 = _mm_mul_ps(v, i3);\n\n\t__m128 u0 = _mm_unpacklo_ps(m0, m1);\n\t__m128 u1 = _mm_unpackhi_ps(m0, m1);\n\t__m128 a0 = _mm_add_ps(u0, u1);\n\n\t__m128 u2 = _mm_unpacklo_ps(m2, m3);\n\t__m128 u3 = _mm_unpackhi_ps(m2, m3);\n\t__m128 a1 = _mm_add_ps(u2, u3);\n\n\t__m128 f0 = _mm_movelh_ps(a0, a1);\n\t__m128 f1 = _mm_movehl_ps(a1, a0);\n\t__m128 f2 = _mm_add_ps(f0, f1);\n\n\treturn f2;\n}\n\nGLM_FUNC_QUALIFIER void glm_mat4_mul(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4])\n{\n\t{\n\t\t__m128 e0 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 e1 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 e2 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 e3 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 m0 = _mm_mul_ps(in1[0], e0);\n\t\t__m128 m1 = _mm_mul_ps(in1[1], e1);\n\t\t__m128 m2 = _mm_mul_ps(in1[2], e2);\n\t\t__m128 m3 = _mm_mul_ps(in1[3], e3);\n\n\t\t__m128 a0 = _mm_add_ps(m0, m1);\n\t\t__m128 a1 = _mm_add_ps(m2, m3);\n\t\t__m128 a2 = _mm_add_ps(a0, a1);\n\n\t\tout[0] = a2;\n\t}\n\n\t{\n\t\t__m128 e0 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 e1 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 e2 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 e3 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 m0 = _mm_mul_ps(in1[0], e0);\n\t\t__m128 m1 = _mm_mul_ps(in1[1], e1);\n\t\t__m128 m2 = _mm_mul_ps(in1[2], e2);\n\t\t__m128 m3 = _mm_mul_ps(in1[3], e3);\n\n\t\t__m128 a0 = _mm_add_ps(m0, m1);\n\t\t__m128 a1 = _mm_add_ps(m2, m3);\n\t\t__m128 a2 = _mm_add_ps(a0, a1);\n\n\t\tout[1] = a2;\n\t}\n\n\t{\n\t\t__m128 e0 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 e1 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 e2 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 e3 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 m0 = _mm_mul_ps(in1[0], e0);\n\t\t__m128 m1 = _mm_mul_ps(in1[1], e1);\n\t\t__m128 m2 = _mm_mul_ps(in1[2], e2);\n\t\t__m128 m3 = _mm_mul_ps(in1[3], e3);\n\n\t\t__m128 a0 = _mm_add_ps(m0, m1);\n\t\t__m128 a1 = _mm_add_ps(m2, m3);\n\t\t__m128 a2 = _mm_add_ps(a0, a1);\n\n\t\tout[2] = a2;\n\t}\n\n\t{\n\t\t//(__m128&)_mm_shuffle_epi32(__m128i&)in2[0], _MM_SHUFFLE(3, 3, 3, 3))\n\t\t__m128 e0 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 e1 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 e2 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 e3 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 m0 = _mm_mul_ps(in1[0], e0);\n\t\t__m128 m1 = _mm_mul_ps(in1[1], e1);\n\t\t__m128 m2 = _mm_mul_ps(in1[2], e2);\n\t\t__m128 m3 = _mm_mul_ps(in1[3], e3);\n\n\t\t__m128 a0 = _mm_add_ps(m0, m1);\n\t\t__m128 a1 = _mm_add_ps(m2, m3);\n\t\t__m128 a2 = _mm_add_ps(a0, a1);\n\n\t\tout[3] = a2;\n\t}\n}\n\nGLM_FUNC_QUALIFIER void glm_mat4_transpose(glm_vec4 const in[4], glm_vec4 out[4])\n{\n\t__m128 tmp0 = _mm_shuffle_ps(in[0], in[1], 0x44);\n\t__m128 tmp2 = _mm_shuffle_ps(in[0], in[1], 0xEE);\n\t__m128 tmp1 = _mm_shuffle_ps(in[2], in[3], 0x44);\n\t__m128 tmp3 = _mm_shuffle_ps(in[2], in[3], 0xEE);\n\n\tout[0] = _mm_shuffle_ps(tmp0, tmp1, 0x88);\n\tout[1] = _mm_shuffle_ps(tmp0, tmp1, 0xDD);\n\tout[2] = _mm_shuffle_ps(tmp2, tmp3, 0x88);\n\tout[3] = _mm_shuffle_ps(tmp2, tmp3, 0xDD);\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_highp(glm_vec4 const in[4])\n{\n\t__m128 Fac0;\n\t{\n\t\t//\tvalType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t//\tvalType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t//\tvalType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];\n\t\t//\tvalType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac0 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac1;\n\t{\n\t\t//\tvalType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t//\tvalType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t//\tvalType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];\n\t\t//\tvalType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac1 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\n\t__m128 Fac2;\n\t{\n\t\t//\tvalType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t//\tvalType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t//\tvalType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];\n\t\t//\tvalType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac2 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac3;\n\t{\n\t\t//\tvalType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t//\tvalType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t//\tvalType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];\n\t\t//\tvalType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac3 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac4;\n\t{\n\t\t//\tvalType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t//\tvalType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t//\tvalType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];\n\t\t//\tvalType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac4 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac5;\n\t{\n\t\t//\tvalType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t//\tvalType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t//\tvalType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1];\n\t\t//\tvalType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac5 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f);\n\t__m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f);\n\n\t// m[1][0]\n\t// m[0][0]\n\t// m[0][0]\n\t// m[0][0]\n\t__m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][1]\n\t// m[0][1]\n\t// m[0][1]\n\t// m[0][1]\n\t__m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1));\n\t__m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][2]\n\t// m[0][2]\n\t// m[0][2]\n\t// m[0][2]\n\t__m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2));\n\t__m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][3]\n\t// m[0][3]\n\t// m[0][3]\n\t// m[0][3]\n\t__m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3));\n\t__m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// col0\n\t// + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]),\n\t// - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]),\n\t// + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]),\n\t// - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]),\n\t__m128 Mul00 = _mm_mul_ps(Vec1, Fac0);\n\t__m128 Mul01 = _mm_mul_ps(Vec2, Fac1);\n\t__m128 Mul02 = _mm_mul_ps(Vec3, Fac2);\n\t__m128 Sub00 = _mm_sub_ps(Mul00, Mul01);\n\t__m128 Add00 = _mm_add_ps(Sub00, Mul02);\n\t__m128 Inv0 = _mm_mul_ps(SignB, Add00);\n\n\t// col1\n\t// - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]),\n\t// + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]),\n\t// - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]),\n\t// + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]),\n\t__m128 Mul03 = _mm_mul_ps(Vec0, Fac0);\n\t__m128 Mul04 = _mm_mul_ps(Vec2, Fac3);\n\t__m128 Mul05 = _mm_mul_ps(Vec3, Fac4);\n\t__m128 Sub01 = _mm_sub_ps(Mul03, Mul04);\n\t__m128 Add01 = _mm_add_ps(Sub01, Mul05);\n\t__m128 Inv1 = _mm_mul_ps(SignA, Add01);\n\n\t// col2\n\t// + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]),\n\t// - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]),\n\t// + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]),\n\t// - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]),\n\t__m128 Mul06 = _mm_mul_ps(Vec0, Fac1);\n\t__m128 Mul07 = _mm_mul_ps(Vec1, Fac3);\n\t__m128 Mul08 = _mm_mul_ps(Vec3, Fac5);\n\t__m128 Sub02 = _mm_sub_ps(Mul06, Mul07);\n\t__m128 Add02 = _mm_add_ps(Sub02, Mul08);\n\t__m128 Inv2 = _mm_mul_ps(SignB, Add02);\n\n\t// col3\n\t// - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]),\n\t// + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]),\n\t// - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]),\n\t// + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3]));\n\t__m128 Mul09 = _mm_mul_ps(Vec0, Fac2);\n\t__m128 Mul10 = _mm_mul_ps(Vec1, Fac4);\n\t__m128 Mul11 = _mm_mul_ps(Vec2, Fac5);\n\t__m128 Sub03 = _mm_sub_ps(Mul09, Mul10);\n\t__m128 Add03 = _mm_add_ps(Sub03, Mul11);\n\t__m128 Inv3 = _mm_mul_ps(SignA, Add03);\n\n\t__m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0));\n\n\t//\tvalType Determinant = m[0][0] * Inverse[0][0]\n\t//\t\t\t\t\t\t+ m[0][1] * Inverse[1][0]\n\t//\t\t\t\t\t\t+ m[0][2] * Inverse[2][0]\n\t//\t\t\t\t\t\t+ m[0][3] * Inverse[3][0];\n\t__m128 Det0 = glm_vec4_dot(in[0], Row2);\n\treturn Det0;\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_lowp(glm_vec4 const m[4])\n{\n\t// _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(\n\n\t//T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t//T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t//T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t//T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t//T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t//T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\n\t// First 2 columns\n \t__m128 Swp2A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 1, 1, 2)));\n \t__m128 Swp3A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(3, 2, 3, 3)));\n\t__m128 MulA = _mm_mul_ps(Swp2A, Swp3A);\n\n\t// Second 2 columns\n\t__m128 Swp2B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(3, 2, 3, 3)));\n\t__m128 Swp3B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(0, 1, 1, 2)));\n\t__m128 MulB = _mm_mul_ps(Swp2B, Swp3B);\n\n\t// Columns subtraction\n\t__m128 SubE = _mm_sub_ps(MulA, MulB);\n\n\t// Last 2 rows\n\t__m128 Swp2C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 0, 1, 2)));\n\t__m128 Swp3C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(1, 2, 0, 0)));\n\t__m128 MulC = _mm_mul_ps(Swp2C, Swp3C);\n\t__m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC);\n\n\t//vec<4, T, Q> DetCof(\n\t//\t+ (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02),\n\t//\t- (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04),\n\t//\t+ (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05),\n\t//\t- (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05));\n\n\t__m128 SubFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubE), _MM_SHUFFLE(2, 1, 0, 0)));\n\t__m128 SwpFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(0, 0, 0, 1)));\n\t__m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA);\n\n\t__m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1));\n\t__m128 SubFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpB), _MM_SHUFFLE(3, 1, 1, 0)));//SubF[0], SubE[3], SubE[3], SubE[1];\n\t__m128 SwpFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(1, 1, 2, 2)));\n\t__m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB);\n\n\t__m128 SubRes = _mm_sub_ps(MulFacA, MulFacB);\n\n\t__m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2));\n\t__m128 SubFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpC), _MM_SHUFFLE(3, 3, 2, 0)));\n\t__m128 SwpFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(2, 3, 3, 3)));\n\t__m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC);\n\n\t__m128 AddRes = _mm_add_ps(SubRes, MulFacC);\n\t__m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f));\n\n\t//return m[0][0] * DetCof[0]\n\t//\t + m[0][1] * DetCof[1]\n\t//\t + m[0][2] * DetCof[2]\n\t//\t + m[0][3] * DetCof[3];\n\n\treturn glm_vec4_dot(m[0], DetCof);\n}\n\nGLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant(glm_vec4 const m[4])\n{\n\t// _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(add)\n\n\t//T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t//T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t//T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t//T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t//T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t//T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\n\t// First 2 columns\n \t__m128 Swp2A = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 1, 1, 2));\n \t__m128 Swp3A = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(3, 2, 3, 3));\n\t__m128 MulA = _mm_mul_ps(Swp2A, Swp3A);\n\n\t// Second 2 columns\n\t__m128 Swp2B = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(3, 2, 3, 3));\n\t__m128 Swp3B = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(0, 1, 1, 2));\n\t__m128 MulB = _mm_mul_ps(Swp2B, Swp3B);\n\n\t// Columns subtraction\n\t__m128 SubE = _mm_sub_ps(MulA, MulB);\n\n\t// Last 2 rows\n\t__m128 Swp2C = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 0, 1, 2));\n\t__m128 Swp3C = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(1, 2, 0, 0));\n\t__m128 MulC = _mm_mul_ps(Swp2C, Swp3C);\n\t__m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC);\n\n\t//vec<4, T, Q> DetCof(\n\t//\t+ (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02),\n\t//\t- (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04),\n\t//\t+ (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05),\n\t//\t- (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05));\n\n\t__m128 SubFacA = _mm_shuffle_ps(SubE, SubE, _MM_SHUFFLE(2, 1, 0, 0));\n\t__m128 SwpFacA = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(0, 0, 0, 1));\n\t__m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA);\n\n\t__m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1));\n\t__m128 SubFacB = _mm_shuffle_ps(SubTmpB, SubTmpB, _MM_SHUFFLE(3, 1, 1, 0));//SubF[0], SubE[3], SubE[3], SubE[1];\n\t__m128 SwpFacB = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(1, 1, 2, 2));\n\t__m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB);\n\n\t__m128 SubRes = _mm_sub_ps(MulFacA, MulFacB);\n\n\t__m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2));\n\t__m128 SubFacC = _mm_shuffle_ps(SubTmpC, SubTmpC, _MM_SHUFFLE(3, 3, 2, 0));\n\t__m128 SwpFacC = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(2, 3, 3, 3));\n\t__m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC);\n\n\t__m128 AddRes = _mm_add_ps(SubRes, MulFacC);\n\t__m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f));\n\n\t//return m[0][0] * DetCof[0]\n\t//\t + m[0][1] * DetCof[1]\n\t//\t + m[0][2] * DetCof[2]\n\t//\t + m[0][3] * DetCof[3];\n\n\treturn glm_vec4_dot(m[0], DetCof);\n}\n\nGLM_FUNC_QUALIFIER void glm_mat4_inverse(glm_vec4 const in[4], glm_vec4 out[4])\n{\n\t__m128 Fac0;\n\t{\n\t\t//\tvalType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t//\tvalType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t//\tvalType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];\n\t\t//\tvalType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac0 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac1;\n\t{\n\t\t//\tvalType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t//\tvalType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t//\tvalType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];\n\t\t//\tvalType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac1 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\n\t__m128 Fac2;\n\t{\n\t\t//\tvalType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t//\tvalType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t//\tvalType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];\n\t\t//\tvalType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac2 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac3;\n\t{\n\t\t//\tvalType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t//\tvalType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t//\tvalType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];\n\t\t//\tvalType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac3 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac4;\n\t{\n\t\t//\tvalType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t//\tvalType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t//\tvalType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];\n\t\t//\tvalType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac4 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac5;\n\t{\n\t\t//\tvalType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t//\tvalType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t//\tvalType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1];\n\t\t//\tvalType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac5 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f);\n\t__m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f);\n\n\t// m[1][0]\n\t// m[0][0]\n\t// m[0][0]\n\t// m[0][0]\n\t__m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][1]\n\t// m[0][1]\n\t// m[0][1]\n\t// m[0][1]\n\t__m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1));\n\t__m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][2]\n\t// m[0][2]\n\t// m[0][2]\n\t// m[0][2]\n\t__m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2));\n\t__m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][3]\n\t// m[0][3]\n\t// m[0][3]\n\t// m[0][3]\n\t__m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3));\n\t__m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// col0\n\t// + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]),\n\t// - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]),\n\t// + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]),\n\t// - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]),\n\t__m128 Mul00 = _mm_mul_ps(Vec1, Fac0);\n\t__m128 Mul01 = _mm_mul_ps(Vec2, Fac1);\n\t__m128 Mul02 = _mm_mul_ps(Vec3, Fac2);\n\t__m128 Sub00 = _mm_sub_ps(Mul00, Mul01);\n\t__m128 Add00 = _mm_add_ps(Sub00, Mul02);\n\t__m128 Inv0 = _mm_mul_ps(SignB, Add00);\n\n\t// col1\n\t// - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]),\n\t// + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]),\n\t// - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]),\n\t// + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]),\n\t__m128 Mul03 = _mm_mul_ps(Vec0, Fac0);\n\t__m128 Mul04 = _mm_mul_ps(Vec2, Fac3);\n\t__m128 Mul05 = _mm_mul_ps(Vec3, Fac4);\n\t__m128 Sub01 = _mm_sub_ps(Mul03, Mul04);\n\t__m128 Add01 = _mm_add_ps(Sub01, Mul05);\n\t__m128 Inv1 = _mm_mul_ps(SignA, Add01);\n\n\t// col2\n\t// + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]),\n\t// - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]),\n\t// + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]),\n\t// - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]),\n\t__m128 Mul06 = _mm_mul_ps(Vec0, Fac1);\n\t__m128 Mul07 = _mm_mul_ps(Vec1, Fac3);\n\t__m128 Mul08 = _mm_mul_ps(Vec3, Fac5);\n\t__m128 Sub02 = _mm_sub_ps(Mul06, Mul07);\n\t__m128 Add02 = _mm_add_ps(Sub02, Mul08);\n\t__m128 Inv2 = _mm_mul_ps(SignB, Add02);\n\n\t// col3\n\t// - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]),\n\t// + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]),\n\t// - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]),\n\t// + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3]));\n\t__m128 Mul09 = _mm_mul_ps(Vec0, Fac2);\n\t__m128 Mul10 = _mm_mul_ps(Vec1, Fac4);\n\t__m128 Mul11 = _mm_mul_ps(Vec2, Fac5);\n\t__m128 Sub03 = _mm_sub_ps(Mul09, Mul10);\n\t__m128 Add03 = _mm_add_ps(Sub03, Mul11);\n\t__m128 Inv3 = _mm_mul_ps(SignA, Add03);\n\n\t__m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0));\n\n\t//\tvalType Determinant = m[0][0] * Inverse[0][0]\n\t//\t\t\t\t\t\t+ m[0][1] * Inverse[1][0]\n\t//\t\t\t\t\t\t+ m[0][2] * Inverse[2][0]\n\t//\t\t\t\t\t\t+ m[0][3] * Inverse[3][0];\n\t__m128 Det0 = glm_vec4_dot(in[0], Row2);\n\t__m128 Rcp0 = _mm_div_ps(_mm_set1_ps(1.0f), Det0);\n\t//__m128 Rcp0 = _mm_rcp_ps(Det0);\n\n\t//\tInverse /= Determinant;\n\tout[0] = _mm_mul_ps(Inv0, Rcp0);\n\tout[1] = _mm_mul_ps(Inv1, Rcp0);\n\tout[2] = _mm_mul_ps(Inv2, Rcp0);\n\tout[3] = _mm_mul_ps(Inv3, Rcp0);\n}\n\nGLM_FUNC_QUALIFIER void glm_mat4_inverse_lowp(glm_vec4 const in[4], glm_vec4 out[4])\n{\n\t__m128 Fac0;\n\t{\n\t\t//\tvalType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t//\tvalType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];\n\t\t//\tvalType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3];\n\t\t//\tvalType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac0 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac1;\n\t{\n\t\t//\tvalType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t//\tvalType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];\n\t\t//\tvalType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3];\n\t\t//\tvalType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac1 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\n\t__m128 Fac2;\n\t{\n\t\t//\tvalType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t//\tvalType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];\n\t\t//\tvalType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2];\n\t\t//\tvalType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac2 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac3;\n\t{\n\t\t//\tvalType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t//\tvalType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];\n\t\t//\tvalType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3];\n\t\t//\tvalType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac3 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac4;\n\t{\n\t\t//\tvalType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t//\tvalType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];\n\t\t//\tvalType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2];\n\t\t//\tvalType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac4 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 Fac5;\n\t{\n\t\t//\tvalType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t//\tvalType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];\n\t\t//\tvalType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1];\n\t\t//\tvalType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1];\n\n\t\t__m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1));\n\t\t__m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0));\n\n\t\t__m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0));\n\t\t__m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0));\n\t\t__m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1));\n\n\t\t__m128 Mul00 = _mm_mul_ps(Swp00, Swp01);\n\t\t__m128 Mul01 = _mm_mul_ps(Swp02, Swp03);\n\t\tFac5 = _mm_sub_ps(Mul00, Mul01);\n\t}\n\n\t__m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f);\n\t__m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f);\n\n\t// m[1][0]\n\t// m[0][0]\n\t// m[0][0]\n\t// m[0][0]\n\t__m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][1]\n\t// m[0][1]\n\t// m[0][1]\n\t// m[0][1]\n\t__m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1));\n\t__m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][2]\n\t// m[0][2]\n\t// m[0][2]\n\t// m[0][2]\n\t__m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2));\n\t__m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// m[1][3]\n\t// m[0][3]\n\t// m[0][3]\n\t// m[0][3]\n\t__m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3));\n\t__m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0));\n\n\t// col0\n\t// + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]),\n\t// - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]),\n\t// + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]),\n\t// - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]),\n\t__m128 Mul00 = _mm_mul_ps(Vec1, Fac0);\n\t__m128 Mul01 = _mm_mul_ps(Vec2, Fac1);\n\t__m128 Mul02 = _mm_mul_ps(Vec3, Fac2);\n\t__m128 Sub00 = _mm_sub_ps(Mul00, Mul01);\n\t__m128 Add00 = _mm_add_ps(Sub00, Mul02);\n\t__m128 Inv0 = _mm_mul_ps(SignB, Add00);\n\n\t// col1\n\t// - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]),\n\t// + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]),\n\t// - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]),\n\t// + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]),\n\t__m128 Mul03 = _mm_mul_ps(Vec0, Fac0);\n\t__m128 Mul04 = _mm_mul_ps(Vec2, Fac3);\n\t__m128 Mul05 = _mm_mul_ps(Vec3, Fac4);\n\t__m128 Sub01 = _mm_sub_ps(Mul03, Mul04);\n\t__m128 Add01 = _mm_add_ps(Sub01, Mul05);\n\t__m128 Inv1 = _mm_mul_ps(SignA, Add01);\n\n\t// col2\n\t// + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]),\n\t// - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]),\n\t// + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]),\n\t// - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]),\n\t__m128 Mul06 = _mm_mul_ps(Vec0, Fac1);\n\t__m128 Mul07 = _mm_mul_ps(Vec1, Fac3);\n\t__m128 Mul08 = _mm_mul_ps(Vec3, Fac5);\n\t__m128 Sub02 = _mm_sub_ps(Mul06, Mul07);\n\t__m128 Add02 = _mm_add_ps(Sub02, Mul08);\n\t__m128 Inv2 = _mm_mul_ps(SignB, Add02);\n\n\t// col3\n\t// - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]),\n\t// + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]),\n\t// - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]),\n\t// + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3]));\n\t__m128 Mul09 = _mm_mul_ps(Vec0, Fac2);\n\t__m128 Mul10 = _mm_mul_ps(Vec1, Fac4);\n\t__m128 Mul11 = _mm_mul_ps(Vec2, Fac5);\n\t__m128 Sub03 = _mm_sub_ps(Mul09, Mul10);\n\t__m128 Add03 = _mm_add_ps(Sub03, Mul11);\n\t__m128 Inv3 = _mm_mul_ps(SignA, Add03);\n\n\t__m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0));\n\n\t//\tvalType Determinant = m[0][0] * Inverse[0][0]\n\t//\t\t\t\t\t\t+ m[0][1] * Inverse[1][0]\n\t//\t\t\t\t\t\t+ m[0][2] * Inverse[2][0]\n\t//\t\t\t\t\t\t+ m[0][3] * Inverse[3][0];\n\t__m128 Det0 = glm_vec4_dot(in[0], Row2);\n\t__m128 Rcp0 = _mm_rcp_ps(Det0);\n\t//__m128 Rcp0 = _mm_div_ps(one, Det0);\n\t//\tInverse /= Determinant;\n\tout[0] = _mm_mul_ps(Inv0, Rcp0);\n\tout[1] = _mm_mul_ps(Inv1, Rcp0);\n\tout[2] = _mm_mul_ps(Inv2, Rcp0);\n\tout[3] = _mm_mul_ps(Inv3, Rcp0);\n}\n/*\nGLM_FUNC_QUALIFIER void glm_mat4_rotate(__m128 const in[4], float Angle, float const v[3], __m128 out[4])\n{\n\tfloat a = glm::radians(Angle);\n\tfloat c = cos(a);\n\tfloat s = sin(a);\n\n\tglm::vec4 AxisA(v[0], v[1], v[2], float(0));\n\t__m128 AxisB = _mm_set_ps(AxisA.w, AxisA.z, AxisA.y, AxisA.x);\n\t__m128 AxisC = detail::sse_nrm_ps(AxisB);\n\n\t__m128 Cos0 = _mm_set_ss(c);\n\t__m128 CosA = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 Sin0 = _mm_set_ss(s);\n\t__m128 SinA = _mm_shuffle_ps(Sin0, Sin0, _MM_SHUFFLE(0, 0, 0, 0));\n\n\t// vec<3, T, Q> temp = (valType(1) - c) * axis;\n\t__m128 Temp0 = _mm_sub_ps(one, CosA);\n\t__m128 Temp1 = _mm_mul_ps(Temp0, AxisC);\n\n\t//Rotate[0][0] = c + temp[0] * axis[0];\n\t//Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2];\n\t//Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1];\n\t__m128 Axis0 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(0, 0, 0, 0));\n\t__m128 TmpA0 = _mm_mul_ps(Axis0, AxisC);\n\t__m128 CosA0 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 1, 0));\n\t__m128 TmpA1 = _mm_add_ps(CosA0, TmpA0);\n\t__m128 SinA0 = SinA;//_mm_set_ps(0.0f, s, -s, 0.0f);\n\t__m128 TmpA2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 1, 2, 3));\n\t__m128 TmpA3 = _mm_mul_ps(SinA0, TmpA2);\n\t__m128 TmpA4 = _mm_add_ps(TmpA1, TmpA3);\n\n\t//Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2];\n\t//Rotate[1][1] = c + temp[1] * axis[1];\n\t//Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0];\n\t__m128 Axis1 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(1, 1, 1, 1));\n\t__m128 TmpB0 = _mm_mul_ps(Axis1, AxisC);\n\t__m128 CosA1 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 0, 1));\n\t__m128 TmpB1 = _mm_add_ps(CosA1, TmpB0);\n\t__m128 SinB0 = SinA;//_mm_set_ps(-s, 0.0f, s, 0.0f);\n\t__m128 TmpB2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 0, 3, 2));\n\t__m128 TmpB3 = _mm_mul_ps(SinA0, TmpB2);\n\t__m128 TmpB4 = _mm_add_ps(TmpB1, TmpB3);\n\n\t//Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1];\n\t//Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0];\n\t//Rotate[2][2] = c + temp[2] * axis[2];\n\t__m128 Axis2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(2, 2, 2, 2));\n\t__m128 TmpC0 = _mm_mul_ps(Axis2, AxisC);\n\t__m128 CosA2 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 0, 1, 1));\n\t__m128 TmpC1 = _mm_add_ps(CosA2, TmpC0);\n\t__m128 SinC0 = SinA;//_mm_set_ps(s, -s, 0.0f, 0.0f);\n\t__m128 TmpC2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 3, 0, 1));\n\t__m128 TmpC3 = _mm_mul_ps(SinA0, TmpC2);\n\t__m128 TmpC4 = _mm_add_ps(TmpC1, TmpC3);\n\n\t__m128 Result[4];\n\tResult[0] = TmpA4;\n\tResult[1] = TmpB4;\n\tResult[2] = TmpC4;\n\tResult[3] = _mm_set_ps(1, 0, 0, 0);\n\n\t//mat<4, 4, valType> Result;\n\t//Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2];\n\t//Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2];\n\t//Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2];\n\t//Result[3] = m[3];\n\t//return Result;\n\tsse_mul_ps(in, Result, out);\n}\n*/\nGLM_FUNC_QUALIFIER void glm_mat4_outerProduct(__m128 const& c, __m128 const& r, __m128 out[4])\n{\n\tout[0] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(0, 0, 0, 0)));\n\tout[1] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(1, 1, 1, 1)));\n\tout[2] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(2, 2, 2, 2)));\n\tout[3] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(3, 3, 3, 3)));\n}\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/simd/neon.h",
    "content": "/// @ref simd_neon\n/// @file glm/simd/neon.h\n\n#pragma once\n\n#if GLM_ARCH & GLM_ARCH_NEON_BIT\n#include <arm_neon.h>\n\nnamespace glm {\n\tnamespace neon {\n\t\tstatic inline float32x4_t dupq_lane(float32x4_t vsrc, int lane) {\n\t\t\tswitch(lane) {\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\t\tcase 0: return vdupq_laneq_f32(vsrc, 0);\n\t\t\t\tcase 1: return vdupq_laneq_f32(vsrc, 1);\n\t\t\t\tcase 2: return vdupq_laneq_f32(vsrc, 2);\n\t\t\t\tcase 3: return vdupq_laneq_f32(vsrc, 3);\n#else\n\t\t\t\tcase 0: return vdupq_n_f32(vgetq_lane_f32(vsrc, 0));\n\t\t\t\tcase 1: return vdupq_n_f32(vgetq_lane_f32(vsrc, 1));\n\t\t\t\tcase 2: return vdupq_n_f32(vgetq_lane_f32(vsrc, 2));\n\t\t\t\tcase 3: return vdupq_n_f32(vgetq_lane_f32(vsrc, 3));\n#endif\n\t\t\t}\n\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\treturn vdupq_n_f32(0.0f);\n\t\t}\n\n\t\tstatic inline float32x2_t dup_lane(float32x4_t vsrc, int lane) {\n\t\t\tswitch(lane) {\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\t\tcase 0: return vdup_laneq_f32(vsrc, 0);\n\t\t\t\tcase 1: return vdup_laneq_f32(vsrc, 1);\n\t\t\t\tcase 2: return vdup_laneq_f32(vsrc, 2);\n\t\t\t\tcase 3: return vdup_laneq_f32(vsrc, 3);\n#else\n\t\t\t\tcase 0: return vdup_n_f32(vgetq_lane_f32(vsrc, 0));\n\t\t\t\tcase 1: return vdup_n_f32(vgetq_lane_f32(vsrc, 1));\n\t\t\t\tcase 2: return vdup_n_f32(vgetq_lane_f32(vsrc, 2));\n\t\t\t\tcase 3: return vdup_n_f32(vgetq_lane_f32(vsrc, 3));\n#endif\n\t\t\t}\n\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\treturn vdup_n_f32(0.0f);\n\t\t}\n\n\t\tstatic inline float32x4_t copy_lane(float32x4_t vdst, int dlane, float32x4_t vsrc, int slane) {\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\tswitch(dlane) {\n\t\t\t\tcase 0:\n\t\t\t\t\tswitch(slane) {\n\t\t\t\t\t\tcase 0: return vcopyq_laneq_f32(vdst, 0, vsrc, 0);\n\t\t\t\t\t\tcase 1: return vcopyq_laneq_f32(vdst, 0, vsrc, 1);\n\t\t\t\t\t\tcase 2: return vcopyq_laneq_f32(vdst, 0, vsrc, 2);\n\t\t\t\t\t\tcase 3: return vcopyq_laneq_f32(vdst, 0, vsrc, 3);\n\t\t\t\t\t}\n\t\t\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\t\tcase 1:\n\t\t\t\t\tswitch(slane) {\n\t\t\t\t\t\tcase 0: return vcopyq_laneq_f32(vdst, 1, vsrc, 0);\n\t\t\t\t\t\tcase 1: return vcopyq_laneq_f32(vdst, 1, vsrc, 1);\n\t\t\t\t\t\tcase 2: return vcopyq_laneq_f32(vdst, 1, vsrc, 2);\n\t\t\t\t\t\tcase 3: return vcopyq_laneq_f32(vdst, 1, vsrc, 3);\n\t\t\t\t\t}\n\t\t\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\t\tcase 2:\n\t\t\t\t\tswitch(slane) {\n\t\t\t\t\t\tcase 0: return vcopyq_laneq_f32(vdst, 2, vsrc, 0);\n\t\t\t\t\t\tcase 1: return vcopyq_laneq_f32(vdst, 2, vsrc, 1);\n\t\t\t\t\t\tcase 2: return vcopyq_laneq_f32(vdst, 2, vsrc, 2);\n\t\t\t\t\t\tcase 3: return vcopyq_laneq_f32(vdst, 2, vsrc, 3);\n\t\t\t\t\t}\n\t\t\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\t\tcase 3:\n\t\t\t\t\tswitch(slane) {\n\t\t\t\t\t\tcase 0: return vcopyq_laneq_f32(vdst, 3, vsrc, 0);\n\t\t\t\t\t\tcase 1: return vcopyq_laneq_f32(vdst, 3, vsrc, 1);\n\t\t\t\t\t\tcase 2: return vcopyq_laneq_f32(vdst, 3, vsrc, 2);\n\t\t\t\t\t\tcase 3: return vcopyq_laneq_f32(vdst, 3, vsrc, 3);\n\t\t\t\t\t}\n\t\t\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\t}\n#else\n\n\t\t\tfloat l;\n\t\t\tswitch(slane) {\n\t\t\t\tcase 0: l = vgetq_lane_f32(vsrc, 0); break;\n\t\t\t\tcase 1: l = vgetq_lane_f32(vsrc, 1); break;\n\t\t\t\tcase 2: l = vgetq_lane_f32(vsrc, 2); break;\n\t\t\t\tcase 3: l = vgetq_lane_f32(vsrc, 3); break;\n\t\t\t\tdefault: \n\t\t\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\t}\n\t\t\tswitch(dlane) {\n\t\t\t\tcase 0: return vsetq_lane_f32(l, vdst, 0);\n\t\t\t\tcase 1: return vsetq_lane_f32(l, vdst, 1);\n\t\t\t\tcase 2: return vsetq_lane_f32(l, vdst, 2);\n\t\t\t\tcase 3: return vsetq_lane_f32(l, vdst, 3);\n\t\t\t}\n#endif\n\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\treturn vdupq_n_f32(0.0f);\n\t\t}\n\n\t\tstatic inline float32x4_t mul_lane(float32x4_t v, float32x4_t vlane, int lane) {\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n\t\t\tswitch(lane) { \n\t\t\t\tcase 0: return vmulq_laneq_f32(v, vlane, 0); break;\n\t\t\t\tcase 1: return vmulq_laneq_f32(v, vlane, 1); break;\n\t\t\t\tcase 2: return vmulq_laneq_f32(v, vlane, 2); break;\n\t\t\t\tcase 3: return vmulq_laneq_f32(v, vlane, 3); break;\n\t\t\t\tdefault: \n\t\t\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\t}\n\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\treturn vdupq_n_f32(0.0f);\n#else\n\t\t\treturn vmulq_f32(v, dupq_lane(vlane, lane));\n#endif\n\t\t}\n\n\t\tstatic inline float32x4_t madd_lane(float32x4_t acc, float32x4_t v, float32x4_t vlane, int lane) {\n#if GLM_ARCH & GLM_ARCH_ARMV8_BIT\n#ifdef GLM_CONFIG_FORCE_FMA\n#\tdefine FMADD_LANE(acc, x, y, L) do { asm volatile (\"fmla %0.4s, %1.4s, %2.4s\" : \"+w\"(acc) : \"w\"(x), \"w\"(dup_lane(y, L))); } while(0)\n#else\n#\tdefine FMADD_LANE(acc, x, y, L) do { acc = vmlaq_laneq_f32(acc, x, y, L); } while(0)\n#endif\n\n\t\t\tswitch(lane) { \n\t\t\t\tcase 0: \n\t\t\t\t\tFMADD_LANE(acc, v, vlane, 0);\n\t\t\t\t\treturn acc;\n\t\t\t\tcase 1:\n\t\t\t\t\tFMADD_LANE(acc, v, vlane, 1);\n\t\t\t\t\treturn acc;\n\t\t\t\tcase 2:\n\t\t\t\t\tFMADD_LANE(acc, v, vlane, 2);\n\t\t\t\t\treturn acc;\n\t\t\t\tcase 3:\n\t\t\t\t\tFMADD_LANE(acc, v, vlane, 3);\n\t\t\t\t\treturn acc;\n\t\t\t\tdefault: \n\t\t\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\t}\n\t\t\tassert(!\"Unreachable code executed!\");\n\t\t\treturn vdupq_n_f32(0.0f);\n#\tundef FMADD_LANE\n#else\n\t\t\treturn vaddq_f32(acc, vmulq_f32(v, dupq_lane(vlane, lane)));\n#endif\n\t\t}\n\t} //namespace neon\n} // namespace glm\n#endif // GLM_ARCH & GLM_ARCH_NEON_BIT\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/simd/packing.h",
    "content": "/// @ref simd\n/// @file glm/simd/packing.h\n\n#pragma once\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/simd/platform.h",
    "content": "#pragma once\n\n///////////////////////////////////////////////////////////////////////////////////\n// Platform\n\n#define GLM_PLATFORM_UNKNOWN\t\t0x00000000\n#define GLM_PLATFORM_WINDOWS\t\t0x00010000\n#define GLM_PLATFORM_LINUX\t\t\t0x00020000\n#define GLM_PLATFORM_APPLE\t\t\t0x00040000\n//#define GLM_PLATFORM_IOS\t\t\t0x00080000\n#define GLM_PLATFORM_ANDROID\t\t0x00100000\n#define GLM_PLATFORM_CHROME_NACL\t0x00200000\n#define GLM_PLATFORM_UNIX\t\t\t0x00400000\n#define GLM_PLATFORM_QNXNTO\t\t\t0x00800000\n#define GLM_PLATFORM_WINCE\t\t\t0x01000000\n#define GLM_PLATFORM_CYGWIN\t\t\t0x02000000\n\n#ifdef GLM_FORCE_PLATFORM_UNKNOWN\n#\tdefine GLM_PLATFORM GLM_PLATFORM_UNKNOWN\n#elif defined(__CYGWIN__)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_CYGWIN\n#elif defined(__QNXNTO__)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_QNXNTO\n#elif defined(__APPLE__)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_APPLE\n#elif defined(WINCE)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_WINCE\n#elif defined(_WIN32)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_WINDOWS\n#elif defined(__native_client__)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_CHROME_NACL\n#elif defined(__ANDROID__)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_ANDROID\n#elif defined(__linux)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_LINUX\n#elif defined(__unix)\n#\tdefine GLM_PLATFORM GLM_PLATFORM_UNIX\n#else\n#\tdefine GLM_PLATFORM GLM_PLATFORM_UNKNOWN\n#endif//\n\n///////////////////////////////////////////////////////////////////////////////////\n// Compiler\n\n#define GLM_COMPILER_UNKNOWN\t\t0x00000000\n\n// Intel\n#define GLM_COMPILER_INTEL\t\t\t0x00100000\n#define GLM_COMPILER_INTEL14\t\t0x00100040\n#define GLM_COMPILER_INTEL15\t\t0x00100050\n#define GLM_COMPILER_INTEL16\t\t0x00100060\n#define GLM_COMPILER_INTEL17\t\t0x00100070\n\n// Visual C++ defines\n#define GLM_COMPILER_VC\t\t\t\t0x01000000\n#define GLM_COMPILER_VC12\t\t\t0x01000001\n#define GLM_COMPILER_VC14\t\t\t0x01000002\n#define GLM_COMPILER_VC15\t\t\t0x01000003\n#define GLM_COMPILER_VC15_3\t\t\t0x01000004\n#define GLM_COMPILER_VC15_5\t\t\t0x01000005\n#define GLM_COMPILER_VC15_6\t\t\t0x01000006\n#define GLM_COMPILER_VC15_7\t\t\t0x01000007\n#define GLM_COMPILER_VC15_8\t\t\t0x01000008\n#define GLM_COMPILER_VC15_9\t\t\t0x01000009\n#define GLM_COMPILER_VC16\t\t\t0x0100000A\n\n// GCC defines\n#define GLM_COMPILER_GCC\t\t\t0x02000000\n#define GLM_COMPILER_GCC46\t\t\t0x020000D0\n#define GLM_COMPILER_GCC47\t\t\t0x020000E0\n#define GLM_COMPILER_GCC48\t\t\t0x020000F0\n#define GLM_COMPILER_GCC49\t\t\t0x02000100\n#define GLM_COMPILER_GCC5\t\t\t0x02000200\n#define GLM_COMPILER_GCC6\t\t\t0x02000300\n#define GLM_COMPILER_GCC61\t\t\t0x02000800\n#define GLM_COMPILER_GCC7\t\t\t0x02000400\n#define GLM_COMPILER_GCC8\t\t\t0x02000500\n\n// CUDA\n#define GLM_COMPILER_CUDA\t\t\t0x10000000\n#define GLM_COMPILER_CUDA75\t\t\t0x10000001\n#define GLM_COMPILER_CUDA80\t\t\t0x10000002\n#define GLM_COMPILER_CUDA90\t\t\t0x10000004\n#define GLM_COMPILER_CUDA_RTC\t\t\t0x10000100\n\n// SYCL\n#define GLM_COMPILER_SYCL\t\t\t0x00300000\n\n// Clang\n#define GLM_COMPILER_CLANG\t\t\t0x20000000\n#define GLM_COMPILER_CLANG34\t\t0x20000050\n#define GLM_COMPILER_CLANG35\t\t0x20000060\n#define GLM_COMPILER_CLANG36\t\t0x20000070\n#define GLM_COMPILER_CLANG37\t\t0x20000080\n#define GLM_COMPILER_CLANG38\t\t0x20000090\n#define GLM_COMPILER_CLANG39\t\t0x200000A0\n#define GLM_COMPILER_CLANG40\t\t0x200000B0\n#define GLM_COMPILER_CLANG41\t\t0x200000C0\n#define GLM_COMPILER_CLANG42\t\t0x200000D0\n\n// HIP\n#define GLM_COMPILER_HIP\t\t\t0x40000000\n\n// Build model\n#define GLM_MODEL_32\t\t\t\t0x00000010\n#define GLM_MODEL_64\t\t\t\t0x00000020\n\n// Force generic C++ compiler\n#ifdef GLM_FORCE_COMPILER_UNKNOWN\n#\tdefine GLM_COMPILER GLM_COMPILER_UNKNOWN\n\n#elif defined(__INTEL_COMPILER)\n#\tif __INTEL_COMPILER >= 1700\n#\t\tdefine GLM_COMPILER GLM_COMPILER_INTEL17\n#\telif __INTEL_COMPILER >= 1600\n#\t\tdefine GLM_COMPILER GLM_COMPILER_INTEL16\n#\telif __INTEL_COMPILER >= 1500\n#\t\tdefine GLM_COMPILER GLM_COMPILER_INTEL15\n#\telif __INTEL_COMPILER >= 1400\n#\t\tdefine GLM_COMPILER GLM_COMPILER_INTEL14\n#\telif __INTEL_COMPILER < 1400\n#\t\terror \"GLM requires ICC 2013 SP1 or newer\"\n#\tendif\n\n// CUDA\n#elif defined(__CUDACC__)\n#\tif !defined(CUDA_VERSION) && !defined(GLM_FORCE_CUDA)\n#\t\tinclude <cuda.h>  // make sure version is defined since nvcc does not define it itself!\n#\tendif\n#\tif defined(__CUDACC_RTC__)\n#\t\tdefine GLM_COMPILER GLM_COMPILER_CUDA_RTC\n#\telif CUDA_VERSION >= 8000\n#\t\tdefine GLM_COMPILER GLM_COMPILER_CUDA80\n#\telif CUDA_VERSION >= 7500\n#\t\tdefine GLM_COMPILER GLM_COMPILER_CUDA75\n#\telif CUDA_VERSION >= 7000\n#\t\tdefine GLM_COMPILER GLM_COMPILER_CUDA70\n#\telif CUDA_VERSION < 7000\n#\t\terror \"GLM requires CUDA 7.0 or higher\"\n#\tendif\n\n// HIP\n#elif defined(__HIP__)\n#\tdefine GLM_COMPILER GLM_COMPILER_HIP\n\n// SYCL\n#elif defined(__SYCL_DEVICE_ONLY__)\n#\tdefine GLM_COMPILER GLM_COMPILER_SYCL\n\n// Clang\n#elif defined(__clang__)\n#\tif defined(__apple_build_version__)\n#\t\tif (__clang_major__ < 6)\n#\t\t\terror \"GLM requires Clang 3.4 / Apple Clang 6.0 or higher\"\n#\t\telif __clang_major__ == 6 && __clang_minor__ == 0\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG35\n#\t\telif __clang_major__ == 6 && __clang_minor__ >= 1\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG36\n#\t\telif __clang_major__ >= 7\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG37\n#\t\tendif\n#\telse\n#\t\tif ((__clang_major__ == 3) && (__clang_minor__ < 4)) || (__clang_major__ < 3)\n#\t\t\terror \"GLM requires Clang 3.4 or higher\"\n#\t\telif __clang_major__ == 3 && __clang_minor__ == 4\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG34\n#\t\telif __clang_major__ == 3 && __clang_minor__ == 5\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG35\n#\t\telif __clang_major__ == 3 && __clang_minor__ == 6\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG36\n#\t\telif __clang_major__ == 3 && __clang_minor__ == 7\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG37\n#\t\telif __clang_major__ == 3 && __clang_minor__ == 8\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG38\n#\t\telif __clang_major__ == 3 && __clang_minor__ >= 9\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG39\n#\t\telif __clang_major__ == 4 && __clang_minor__ == 0\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG40\n#\t\telif __clang_major__ == 4 && __clang_minor__ == 1\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG41\n#\t\telif __clang_major__ == 4 && __clang_minor__ >= 2\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG42\n#\t\telif __clang_major__ >= 4\n#\t\t\tdefine GLM_COMPILER GLM_COMPILER_CLANG42\n#\t\tendif\n#\tendif\n\n// Visual C++\n#elif defined(_MSC_VER)\n#\tif _MSC_VER >= 1920\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC16\n#\telif _MSC_VER >= 1916\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC15_9\n#\telif _MSC_VER >= 1915\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC15_8\n#\telif _MSC_VER >= 1914\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC15_7\n#\telif _MSC_VER >= 1913\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC15_6\n#\telif _MSC_VER >= 1912\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC15_5\n#\telif _MSC_VER >= 1911\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC15_3\n#\telif _MSC_VER >= 1910\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC15\n#\telif _MSC_VER >= 1900\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC14\n#\telif _MSC_VER >= 1800\n#\t\tdefine GLM_COMPILER GLM_COMPILER_VC12\n#\telif _MSC_VER < 1800\n#\t\terror \"GLM requires Visual C++ 12 - 2013 or higher\"\n#\tendif//_MSC_VER\n\n// G++\n#elif defined(__GNUC__) || defined(__MINGW32__)\n#\tif __GNUC__ >= 8\n#\t\tdefine GLM_COMPILER GLM_COMPILER_GCC8\n#\telif __GNUC__ >= 7\n#\t\tdefine GLM_COMPILER GLM_COMPILER_GCC7\n#\telif __GNUC__ >= 6\n#\t\tdefine GLM_COMPILER GLM_COMPILER_GCC6\n#\telif __GNUC__ >= 5\n#\t\tdefine GLM_COMPILER GLM_COMPILER_GCC5\n#\telif __GNUC__ == 4 && __GNUC_MINOR__ >= 9\n#\t\tdefine GLM_COMPILER GLM_COMPILER_GCC49\n#\telif __GNUC__ == 4 && __GNUC_MINOR__ >= 8\n#\t\tdefine GLM_COMPILER GLM_COMPILER_GCC48\n#\telif __GNUC__ == 4 && __GNUC_MINOR__ >= 7\n#\t\tdefine GLM_COMPILER GLM_COMPILER_GCC47\n#\telif __GNUC__ == 4 && __GNUC_MINOR__ >= 6\n#\t\tdefine GLM_COMPILER GLM_COMPILER_GCC46\n#\telif ((__GNUC__ == 4) && (__GNUC_MINOR__ < 6)) || (__GNUC__ < 4)\n#\t\terror \"GLM requires GCC 4.6 or higher\"\n#\tendif\n\n#else\n#\tdefine GLM_COMPILER GLM_COMPILER_UNKNOWN\n#endif\n\n#ifndef GLM_COMPILER\n#\terror \"GLM_COMPILER undefined, your compiler may not be supported by GLM. Add #define GLM_COMPILER 0 to ignore this message.\"\n#endif//GLM_COMPILER\n\n///////////////////////////////////////////////////////////////////////////////////\n// Instruction sets\n\n// User defines: GLM_FORCE_PURE GLM_FORCE_INTRINSICS GLM_FORCE_SSE2 GLM_FORCE_SSE3 GLM_FORCE_AVX GLM_FORCE_AVX2 GLM_FORCE_AVX2\n\n#define GLM_ARCH_MIPS_BIT\t  (0x10000000)\n#define GLM_ARCH_PPC_BIT\t  (0x20000000)\n#define GLM_ARCH_ARM_BIT\t  (0x40000000)\n#define GLM_ARCH_ARMV8_BIT  (0x01000000)\n#define GLM_ARCH_X86_BIT\t  (0x80000000)\n\n#define GLM_ARCH_SIMD_BIT\t(0x00001000)\n\n#define GLM_ARCH_NEON_BIT\t(0x00000001)\n#define GLM_ARCH_SSE_BIT\t(0x00000002)\n#define GLM_ARCH_SSE2_BIT\t(0x00000004)\n#define GLM_ARCH_SSE3_BIT\t(0x00000008)\n#define GLM_ARCH_SSSE3_BIT\t(0x00000010)\n#define GLM_ARCH_SSE41_BIT\t(0x00000020)\n#define GLM_ARCH_SSE42_BIT\t(0x00000040)\n#define GLM_ARCH_AVX_BIT\t(0x00000080)\n#define GLM_ARCH_AVX2_BIT\t(0x00000100)\n\n#define GLM_ARCH_UNKNOWN\t(0)\n#define GLM_ARCH_X86\t\t(GLM_ARCH_X86_BIT)\n#define GLM_ARCH_SSE\t\t(GLM_ARCH_SSE_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_X86)\n#define GLM_ARCH_SSE2\t\t(GLM_ARCH_SSE2_BIT | GLM_ARCH_SSE)\n#define GLM_ARCH_SSE3\t\t(GLM_ARCH_SSE3_BIT | GLM_ARCH_SSE2)\n#define GLM_ARCH_SSSE3\t\t(GLM_ARCH_SSSE3_BIT | GLM_ARCH_SSE3)\n#define GLM_ARCH_SSE41\t\t(GLM_ARCH_SSE41_BIT | GLM_ARCH_SSSE3)\n#define GLM_ARCH_SSE42\t\t(GLM_ARCH_SSE42_BIT | GLM_ARCH_SSE41)\n#define GLM_ARCH_AVX\t\t(GLM_ARCH_AVX_BIT | GLM_ARCH_SSE42)\n#define GLM_ARCH_AVX2\t\t(GLM_ARCH_AVX2_BIT | GLM_ARCH_AVX)\n#define GLM_ARCH_ARM\t\t(GLM_ARCH_ARM_BIT)\n#define GLM_ARCH_ARMV8\t\t(GLM_ARCH_NEON_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_ARM | GLM_ARCH_ARMV8_BIT)\n#define GLM_ARCH_NEON\t\t(GLM_ARCH_NEON_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_ARM)\n#define GLM_ARCH_MIPS\t\t(GLM_ARCH_MIPS_BIT)\n#define GLM_ARCH_PPC\t\t(GLM_ARCH_PPC_BIT)\n\n#if defined(GLM_FORCE_ARCH_UNKNOWN) || defined(GLM_FORCE_PURE)\n#\tdefine GLM_ARCH GLM_ARCH_UNKNOWN\n#elif defined(GLM_FORCE_NEON)\n#\tif __ARM_ARCH >= 8\n#\t\tdefine GLM_ARCH (GLM_ARCH_ARMV8)\n#\telse\n#\t\tdefine GLM_ARCH (GLM_ARCH_NEON)\n#\tendif\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_AVX2)\n#\tdefine GLM_ARCH (GLM_ARCH_AVX2)\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_AVX)\n#\tdefine GLM_ARCH (GLM_ARCH_AVX)\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_SSE42)\n#\tdefine GLM_ARCH (GLM_ARCH_SSE42)\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_SSE41)\n#\tdefine GLM_ARCH (GLM_ARCH_SSE41)\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_SSSE3)\n#\tdefine GLM_ARCH (GLM_ARCH_SSSE3)\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_SSE3)\n#\tdefine GLM_ARCH (GLM_ARCH_SSE3)\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_SSE2)\n#\tdefine GLM_ARCH (GLM_ARCH_SSE2)\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_SSE)\n#\tdefine GLM_ARCH (GLM_ARCH_SSE)\n#\tdefine GLM_FORCE_INTRINSICS\n#elif defined(GLM_FORCE_INTRINSICS) && !defined(GLM_FORCE_XYZW_ONLY)\n#\tif defined(__AVX2__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_AVX2)\n#\telif defined(__AVX__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_AVX)\n#\telif defined(__SSE4_2__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_SSE42)\n#\telif defined(__SSE4_1__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_SSE41)\n#\telif defined(__SSSE3__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_SSSE3)\n#\telif defined(__SSE3__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_SSE3)\n#\telif defined(__SSE2__) || defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86_FP)\n#\t\tdefine GLM_ARCH (GLM_ARCH_SSE2)\n#\telif defined(__i386__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_X86)\n#\telif defined(__ARM_ARCH) && (__ARM_ARCH >= 8)\n#\t\tdefine GLM_ARCH (GLM_ARCH_ARMV8)\n#\telif defined(__ARM_NEON)\n#\t\tdefine GLM_ARCH (GLM_ARCH_ARM | GLM_ARCH_NEON)\n#\telif defined(__arm__ ) || defined(_M_ARM)\n#\t\tdefine GLM_ARCH (GLM_ARCH_ARM)\n#\telif defined(__mips__ )\n#\t\tdefine GLM_ARCH (GLM_ARCH_MIPS)\n#\telif defined(__powerpc__ ) || defined(_M_PPC)\n#\t\tdefine GLM_ARCH (GLM_ARCH_PPC)\n#\telse\n#\t\tdefine GLM_ARCH (GLM_ARCH_UNKNOWN)\n#\tendif\n#else\n#\tif defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86) || defined(__i386__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_X86)\n#\telif defined(__arm__) || defined(_M_ARM)\n#\t\tdefine GLM_ARCH (GLM_ARCH_ARM)\n#\telif defined(__powerpc__) || defined(_M_PPC)\n#\t\tdefine GLM_ARCH (GLM_ARCH_PPC)\n#\telif defined(__mips__)\n#\t\tdefine GLM_ARCH (GLM_ARCH_MIPS)\n#\telse\n#\t\tdefine GLM_ARCH (GLM_ARCH_UNKNOWN)\n#\tendif\n#endif\n\n#if GLM_ARCH & GLM_ARCH_AVX2_BIT\n#\tinclude <immintrin.h>\n#elif GLM_ARCH & GLM_ARCH_AVX_BIT\n#\tinclude <immintrin.h>\n#elif GLM_ARCH & GLM_ARCH_SSE42_BIT\n#\tif GLM_COMPILER & GLM_COMPILER_CLANG\n#\t\tinclude <popcntintrin.h>\n#\tendif\n#\tinclude <nmmintrin.h>\n#elif GLM_ARCH & GLM_ARCH_SSE41_BIT\n#\tinclude <smmintrin.h>\n#elif GLM_ARCH & GLM_ARCH_SSSE3_BIT\n#\tinclude <tmmintrin.h>\n#elif GLM_ARCH & GLM_ARCH_SSE3_BIT\n#\tinclude <pmmintrin.h>\n#elif GLM_ARCH & GLM_ARCH_SSE2_BIT\n#\tinclude <emmintrin.h>\n#elif GLM_ARCH & GLM_ARCH_NEON_BIT\n#\tinclude \"neon.h\"\n#endif//GLM_ARCH\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\ttypedef __m128\t\t\tglm_f32vec4;\n\ttypedef __m128i\t\t\tglm_i32vec4;\n\ttypedef __m128i\t\t\tglm_u32vec4;\n\ttypedef __m128d\t\t\tglm_f64vec2;\n\ttypedef __m128i\t\t\tglm_i64vec2;\n\ttypedef __m128i\t\t\tglm_u64vec2;\n\n\ttypedef glm_f32vec4\t\tglm_vec4;\n\ttypedef glm_i32vec4\t\tglm_ivec4;\n\ttypedef glm_u32vec4\t\tglm_uvec4;\n\ttypedef glm_f64vec2\t\tglm_dvec2;\n#endif\n\n#if GLM_ARCH & GLM_ARCH_AVX_BIT\n\ttypedef __m256d\t\t\tglm_f64vec4;\n\ttypedef glm_f64vec4\t\tglm_dvec4;\n#endif\n\n#if GLM_ARCH & GLM_ARCH_AVX2_BIT\n\ttypedef __m256i\t\t\tglm_i64vec4;\n\ttypedef __m256i\t\t\tglm_u64vec4;\n#endif\n\n#if GLM_ARCH & GLM_ARCH_NEON_BIT\n\ttypedef float32x4_t\t\t\tglm_f32vec4;\n\ttypedef int32x4_t\t\t\tglm_i32vec4;\n\ttypedef uint32x4_t\t\t\tglm_u32vec4;\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/simd/trigonometric.h",
    "content": "/// @ref simd\n/// @file glm/simd/trigonometric.h\n\n#pragma once\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/simd/vector_relational.h",
    "content": "/// @ref simd\n/// @file glm/simd/vector_relational.h\n\n#pragma once\n\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/trigonometric.hpp",
    "content": "/// @ref core\n/// @file glm/trigonometric.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n///\n/// @defgroup core_func_trigonometric Angle and Trigonometry Functions\n/// @ingroup core\n///\n/// Function parameters specified as angle are assumed to be in units of radians.\n/// In no case will any of these functions result in a divide by zero error. If\n/// the divisor of a ratio is 0, then results will be undefined.\n///\n/// These all operate component-wise. The description is per component.\n///\n/// Include <glm/trigonometric.hpp> to use these core features.\n///\n/// @see ext_vector_trigonometric\n\n#pragma once\n\n#include \"detail/setup.hpp\"\n#include \"detail/qualifier.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_func_trigonometric\n\t/// @{\n\n\t/// Converts degrees to radians and returns the result.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/radians.xml\">GLSL radians man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> radians(vec<L, T, Q> const& degrees);\n\n\t/// Converts radians to degrees and returns the result.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/degrees.xml\">GLSL degrees man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, T, Q> degrees(vec<L, T, Q> const& radians);\n\n\t/// The standard trigonometric sine function.\n\t/// The values returned by this function will range from [-1, 1].\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/sin.xml\">GLSL sin man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> sin(vec<L, T, Q> const& angle);\n\n\t/// The standard trigonometric cosine function.\n\t/// The values returned by this function will range from [-1, 1].\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/cos.xml\">GLSL cos man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> cos(vec<L, T, Q> const& angle);\n\n\t/// The standard trigonometric tangent function.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/tan.xml\">GLSL tan man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> tan(vec<L, T, Q> const& angle);\n\n\t/// Arc sine. Returns an angle whose sine is x.\n\t/// The range of values returned by this function is [-PI/2, PI/2].\n\t/// Results are undefined if |x| > 1.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/asin.xml\">GLSL asin man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> asin(vec<L, T, Q> const& x);\n\n\t/// Arc cosine. Returns an angle whose cosine is x.\n\t/// The range of values returned by this function is [0, PI].\n\t/// Results are undefined if |x| > 1.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/acos.xml\">GLSL acos man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> acos(vec<L, T, Q> const& x);\n\n\t/// Arc tangent. Returns an angle whose tangent is y/x.\n\t/// The signs of x and y are used to determine what\n\t/// quadrant the angle is in. The range of values returned\n\t/// by this function is [-PI, PI]. Results are undefined\n\t/// if x and y are both 0.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml\">GLSL atan man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> atan(vec<L, T, Q> const& y, vec<L, T, Q> const& x);\n\n\t/// Arc tangent. Returns an angle whose tangent is y_over_x.\n\t/// The range of values returned by this function is [-PI/2, PI/2].\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml\">GLSL atan man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> atan(vec<L, T, Q> const& y_over_x);\n\n\t/// Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/sinh.xml\">GLSL sinh man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> sinh(vec<L, T, Q> const& angle);\n\n\t/// Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/cosh.xml\">GLSL cosh man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> cosh(vec<L, T, Q> const& angle);\n\n\t/// Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/tanh.xml\">GLSL tanh man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> tanh(vec<L, T, Q> const& angle);\n\n\t/// Arc hyperbolic sine; returns the inverse of sinh.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/asinh.xml\">GLSL asinh man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> asinh(vec<L, T, Q> const& x);\n\n\t/// Arc hyperbolic cosine; returns the non-negative inverse\n\t/// of cosh. Results are undefined if x < 1.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/acosh.xml\">GLSL acosh man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> acosh(vec<L, T, Q> const& x);\n\n\t/// Arc hyperbolic tangent; returns the inverse of tanh.\n\t/// Results are undefined if abs(x) >= 1.\n\t///\n\t/// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector\n\t/// @tparam T Floating-point scalar types\n\t/// @tparam Q Value from qualifier enum\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/atanh.xml\">GLSL atanh man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL vec<L, T, Q> atanh(vec<L, T, Q> const& x);\n\n\t/// @}\n}//namespace glm\n\n#include \"detail/func_trigonometric.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/vec2.hpp",
    "content": "/// @ref core\n/// @file glm/vec2.hpp\n\n#pragma once\n#include \"./ext/vector_bool2.hpp\"\n#include \"./ext/vector_bool2_precision.hpp\"\n#include \"./ext/vector_float2.hpp\"\n#include \"./ext/vector_float2_precision.hpp\"\n#include \"./ext/vector_double2.hpp\"\n#include \"./ext/vector_double2_precision.hpp\"\n#include \"./ext/vector_int2.hpp\"\n#include \"./ext/vector_int2_sized.hpp\"\n#include \"./ext/vector_uint2.hpp\"\n#include \"./ext/vector_uint2_sized.hpp\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/vec3.hpp",
    "content": "/// @ref core\n/// @file glm/vec3.hpp\n\n#pragma once\n#include \"./ext/vector_bool3.hpp\"\n#include \"./ext/vector_bool3_precision.hpp\"\n#include \"./ext/vector_float3.hpp\"\n#include \"./ext/vector_float3_precision.hpp\"\n#include \"./ext/vector_double3.hpp\"\n#include \"./ext/vector_double3_precision.hpp\"\n#include \"./ext/vector_int3.hpp\"\n#include \"./ext/vector_int3_sized.hpp\"\n#include \"./ext/vector_uint3.hpp\"\n#include \"./ext/vector_uint3_sized.hpp\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/vec4.hpp",
    "content": "/// @ref core\n/// @file glm/vec4.hpp\n\n#pragma once\n#include \"./ext/vector_bool4.hpp\"\n#include \"./ext/vector_bool4_precision.hpp\"\n#include \"./ext/vector_float4.hpp\"\n#include \"./ext/vector_float4_precision.hpp\"\n#include \"./ext/vector_double4.hpp\"\n#include \"./ext/vector_double4_precision.hpp\"\n#include \"./ext/vector_int4.hpp\"\n#include \"./ext/vector_int4_sized.hpp\"\n#include \"./ext/vector_uint4.hpp\"\n#include \"./ext/vector_uint4_sized.hpp\"\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/glm/vector_relational.hpp",
    "content": "/// @ref core\n/// @file glm/vector_relational.hpp\n///\n/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n///\n/// @defgroup core_func_vector_relational Vector Relational Functions\n/// @ingroup core\n///\n/// Relational and equality operators (<, <=, >, >=, ==, !=) are defined to\n/// operate on scalars and produce scalar Boolean results. For vector results,\n/// use the following built-in functions.\n///\n/// In all cases, the sizes of all the input and return vectors for any particular\n/// call must match.\n///\n/// Include <glm/vector_relational.hpp> to use these core features.\n///\n/// @see ext_vector_relational\n\n#pragma once\n\n#include \"detail/qualifier.hpp\"\n#include \"detail/setup.hpp\"\n\nnamespace glm\n{\n\t/// @addtogroup core_func_vector_relational\n\t/// @{\n\n\t/// Returns the component-wise comparison result of x < y.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T A floating-point or integer scalar type.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThan.xml\">GLSL lessThan man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> lessThan(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns the component-wise comparison of result x <= y.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T A floating-point or integer scalar type.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThanEqual.xml\">GLSL lessThanEqual man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> lessThanEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns the component-wise comparison of result x > y.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T A floating-point or integer scalar type.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThan.xml\">GLSL greaterThan man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> greaterThan(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns the component-wise comparison of result x >= y.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T A floating-point or integer scalar type.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThanEqual.xml\">GLSL greaterThanEqual man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> greaterThanEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns the component-wise comparison of result x == y.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T A floating-point, integer or bool scalar type.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/equal.xml\">GLSL equal man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> equal(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns the component-wise comparison of result x != y.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t/// @tparam T A floating-point, integer or bool scalar type.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/notEqual.xml\">GLSL notEqual man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> notEqual(vec<L, T, Q> const& x, vec<L, T, Q> const& y);\n\n\t/// Returns true if any component of x is true.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/any.xml\">GLSL any man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool any(vec<L, bool, Q> const& v);\n\n\t/// Returns true if all components of x are true.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/all.xml\">GLSL all man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR bool all(vec<L, bool, Q> const& v);\n\n\t/// Returns the component-wise logical complement of x.\n\t/// /!\\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead.\n\t///\n\t/// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector.\n\t///\n\t/// @see <a href=\"http://www.opengl.org/sdk/docs/manglsl/xhtml/not.xml\">GLSL not man page</a>\n\t/// @see <a href=\"http://www.opengl.org/registry/doc/GLSLangSpec.4.20.8.pdf\">GLSL 4.20.8 specification, section 8.7 Vector Relational Functions</a>\n\ttemplate<length_t L, qualifier Q>\n\tGLM_FUNC_DECL GLM_CONSTEXPR vec<L, bool, Q> not_(vec<L, bool, Q> const& v);\n\n\t/// @}\n}//namespace glm\n\n#include \"detail/func_vector_relational.inl\"\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/manual.md",
    "content": "![Alt](./doc/manual/logo-mini.png \"GLM Logo\")\n\n# GLM 0.9.9 Manual\n\n![Alt](./doc/manual/g-truc.png \"G-Truc Logo\")\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## Table of Contents\n\n+ [0. Licenses](#section0)\n+ [1. Getting started](#section1)\n+ [1.1. Using global headers](#section1_1)\n+ [1.2. Using separated headers](#section1_2)\n+ [1.3. Using extension headers](#section1_3)\n+ [1.4. Dependencies](#section1_4)\n+ [1.5. Finding GLM with CMake](#section1_5)\n+ [2. Preprocessor configurations](#section2)\n+ [2.1. GLM\\_FORCE\\_MESSAGES: Platform auto detection and default configuration](#section2_1)\n+ [2.2. GLM\\_FORCE\\_PLATFORM\\_UNKNOWN: Force GLM to no detect the build platform](#section2_2)\n+ [2.3. GLM\\_FORCE\\_COMPILER\\_UNKNOWN: Force GLM to no detect the C++ compiler](#section2_3)\n+ [2.4. GLM\\_FORCE\\_ARCH\\_UNKNOWN: Force GLM to no detect the build architecture](#section2_4)\n+ [2.5. GLM\\_FORCE\\_CXX\\_UNKNOWN: Force GLM to no detect the C++ standard](#section2_5)\n+ [2.6. GLM\\_FORCE\\_CXX**: C++ language detection](#section2_6)\n+ [2.7. GLM\\_FORCE\\_EXPLICIT\\_CTOR: Requiring explicit conversions](#section2_7)\n+ [2.8. GLM\\_FORCE\\_INLINE: Force inline](#section2_8)\n+ [2.9. GLM\\_FORCE\\_ALIGNED\\_GENTYPES: Force GLM to enable aligned types](#section2_9)\n+ [2.10. GLM\\_FORCE\\_DEFAULT\\_ALIGNED\\_GENTYPES: Force GLM to use aligned types by default](#section2_10)\n+ [2.11. GLM\\_FORCE\\_INTRINSICS: Using SIMD optimizations](#section2_11)\n+ [2.12. GLM\\_FORCE\\_PRECISION\\_**: Default precision](#section2_12)\n+ [2.13. GLM\\_FORCE\\_SINGLE\\_ONLY: Removed explicit 64-bits floating point types](#section2_13)\n+ [2.14. GLM\\_FORCE\\_SWIZZLE: Enable swizzle operators](#section2_14)\n+ [2.15. GLM\\_FORCE\\_XYZW\\_ONLY: Only exposes x, y, z and w components](#section2_15)\n+ [2.16. GLM\\_FORCE\\_LEFT\\_HANDED: Force left handed coordinate system](#section2_16)\n+ [2.17. GLM\\_FORCE\\_DEPTH\\_ZERO\\_TO\\_ONE: Force the use of a clip space between 0 to 1](#section2_17)\n+ [2.18. GLM\\_FORCE\\_SIZE\\_T\\_LENGTH: Vector and matrix static size type](#section2_18)\n+ [2.19. GLM\\_FORCE\\_UNRESTRICTED\\_GENTYPE: Removing genType restriction](#section2_19)\n+ [2.20. GLM\\_FORCE\\_SILENT\\_WARNINGS: Silent C++ warnings from language extensions](#section2_20)\n+ [2.21. GLM\\_FORCE\\_QUAT\\_DATA\\_WXYZ: Force GLM to store quat data as w,x,y,z instead of x,y,z,w](#section2_21)\n+ [3. Stable extensions](#section3)\n+ [3.1. Scalar types](#section3_1)\n+ [3.2. Scalar functions](#section3_2)\n+ [3.3. Vector types](#section3_3)\n+ [3.4. Vector types with precision qualifiers](#section3_4)\n+ [3.5. Vector functions](#section3_5)\n+ [3.6. Matrix types](#section3_6)\n+ [3.7. Matrix types with precision qualifiers](#section3_7)\n+ [3.8. Matrix functions](#section3_8)\n+ [3.9. Quaternion types](#section3_9)\n+ [3.10. Quaternion types with precision qualifiers](#section3_10)\n+ [3.11. Quaternion functions](#section3_11)\n+ [4. Recommended extensions](#section4)\n+ [4.1. GLM_GTC_bitfield](#section4_1)\n+ [4.2. GLM_GTC_color_space](#section4_2)\n+ [4.3. GLM_GTC_constants](#section4_3)\n+ [4.4. GLM_GTC_epsilon](#section4_4)\n+ [4.5. GLM_GTC_integer](#section4_5)\n+ [4.6. GLM_GTC_matrix_access](#section4_6)\n+ [4.7. GLM_GTC_matrix_integer](#section4_7)\n+ [4.8. GLM_GTC_matrix_inverse](#section4_8)\n+ [4.9. GLM_GTC_matrix_transform](#section4_9)\n+ [4.10. GLM_GTC_noise](#section4_10)\n+ [4.11. GLM_GTC_packing](#section4_11)\n+ [4.12. GLM_GTC_quaternion](#section4_12)\n+ [4.13. GLM_GTC_random](#section4_13)\n+ [4.14. GLM_GTC_reciprocal](#section4_14)\n+ [4.15. GLM_GTC_round](#section4_15)\n+ [4.16. GLM_GTC_type_alignment](#section4_16)\n+ [4.17. GLM_GTC_type_precision](#section4_17)\n+ [4.18. GLM_GTC_type_ptr](#section4_18)\n+ [4.19. GLM_GTC_ulp](#section4_19)\n+ [4.20. GLM_GTC_vec1](#section4_20)\n+ [5. OpenGL interoperability](#section5)\n+ [5.1. GLM Replacements for deprecated OpenGL functions](#section5_1)\n+ [5.2. GLM Replacements for GLU functions](#section5_2)\n+ [6. Known issues](#section6)\n+ [6.1. Not function](#section6_1)\n+ [6.2. Precision qualifiers support](#section6_2)\n+ [7. FAQ](#section7)\n+ [7.1 Why GLM follows GLSL specification and conventions?](#section7_1)\n+ [7.2. Does GLM run GLSL programs?](#section7_2)\n+ [7.3. Does a GLSL compiler build GLM codes?](#section7_3)\n+ [7.4. Should I use ‘GTX’ extensions?](#section7_4)\n+ [7.5. Where can I ask my questions?](#section7_5)\n+ [7.6. Where can I find the documentation of extensions?](#section7_6)\n+ [7.7. Should I use 'using namespace glm;'?](#section7_7)\n+ [7.8. Is GLM fast?](#section7_8)\n+ [7.9. When I build with Visual C++ with /w4 warning level, I have warnings...](#section7_9)\n+ [7.10. Why some GLM functions can crash because of division by zero?](#section7_10)\n+ [7.11. What unit for angles us used in GLM?](#section7_11)\n+ [7.12. Windows headers cause build errors...](#section7_12)\n+ [7.13. Constant expressions support](#section7_13)\n+ [8. Code samples](#section8)\n+ [8.1. Compute a triangle normal](#section8_1)\n+ [8.2. Matrix transform](#section8_2)\n+ [8.3. Vector types](#section8_3)\n+ [8.4. Lighting](#section8_4)\n+ [9. Contributing to GLM](#section9)\n+ [9.1. Submitting bug reports](#section9_1)\n+ [9.2. Contributing to GLM with pull request](#section9_2)\n+ [9.3. Coding style](#section9_3)\n+ [10. References](#section10)\n+ [10.1. OpenGL specifications](#section10_1)\n+ [10.2. External links](#section10_2)\n+ [10.3. Projects using GLM](#section10_3)\n+ [10.4. Tutorials using GLM](#section10_4)\n+ [10.5. Equivalent for other languages](#section10_5)\n+ [10.6. Alternatives to GLM](#section10_6)\n+ [10.7. Acknowledgements](#section10_7)\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section0\"></a> Licenses\n\n### The Happy Bunny License (Modified MIT License)\n\nCopyright (c) 2005 - G-Truc Creation\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nRestrictions: By making use of the Software for military purposes, you\nchoose to make a Bunny unhappy.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n![](./doc/manual/frontpage1.png)\n\n### The MIT License\n\nCopyright (c) 2005 - G-Truc Creation\n\nPermission is hereby granted, free of charge, to any person obtaining a\ncopy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be included\nin all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n![](./doc/manual/frontpage2.png)\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section1\"></a> 1. Getting started\n\n### <a name=\"section1_1\"></a> 1.1. Using global headers\n\nGLM is a header-only library, and thus does not need to be compiled. We can use GLM's implementation of GLSL's mathematics functionality by including the `<glm/glm.hpp>` header:\n\n```cpp\n#include <glm/glm.hpp>\n```\n\nTo extend the feature set supported by GLM and keeping the library as close to GLSL as possible, new features are implemented as extensions that can be included thought a separated header:\n\n```cpp\n// Include all GLM core / GLSL features\n#include <glm/glm.hpp> // vec2, vec3, mat4, radians\n\n// Include all GLM extensions\n#include <glm/ext.hpp> // perspective, translate, rotate\n\nglm::mat4 transform(glm::vec2 const& Orientation, glm::vec3 const& Translate, glm::vec3 const& Up)\n{\n    glm::mat4 Proj = glm::perspective(glm::radians(45.f), 1.33f, 0.1f, 10.f);\n    glm::mat4 ViewTranslate = glm::translate(glm::mat4(1.f), Translate);\n    glm::mat4 ViewRotateX = glm::rotate(ViewTranslate, Orientation.y, Up);\n    glm::mat4 View = glm::rotate(ViewRotateX, Orientation.x, Up);\n    glm::mat4 Model = glm::mat4(1.0f);\n    return Proj * View * Model;\n}\n```\n\n*Note: Including `<glm/glm.hpp>` and `<glm/ext.hpp>` is convenient but pull a lot of code which will significantly increase build time, particularly if these files are included in all source files. We may prefer to use the approaches describe in the two following sections to keep the project build fast.*\n\n### <a name=\"section1_2\"></a> 1.2. Using separated headers\n\nGLM relies on C++ templates heavily, and may significantly increase compilation times for projects that use it. Hence, user projects could only include the features they actually use. Following is the list of all the core features, based on GLSL specification, headers:\n\n```cpp\n#include <glm/vec2.hpp>               // vec2, bvec2, dvec2, ivec2 and uvec2\n#include <glm/vec3.hpp>               // vec3, bvec3, dvec3, ivec3 and uvec3\n#include <glm/vec4.hpp>               // vec4, bvec4, dvec4, ivec4 and uvec4\n#include <glm/mat2x2.hpp>             // mat2, dmat2\n#include <glm/mat2x3.hpp>             // mat2x3, dmat2x3\n#include <glm/mat2x4.hpp>             // mat2x4, dmat2x4\n#include <glm/mat3x2.hpp>             // mat3x2, dmat3x2\n#include <glm/mat3x3.hpp>             // mat3, dmat3\n#include <glm/mat3x4.hpp>             // mat3x4, dmat2\n#include <glm/mat4x2.hpp>             // mat4x2, dmat4x2\n#include <glm/mat4x3.hpp>             // mat4x3, dmat4x3\n#include <glm/mat4x4.hpp>             // mat4, dmat4\n#include <glm/common.hpp>             // all the GLSL common functions: abs, min, mix, isnan, fma, etc.\n#include <glm/exponential.hpp>        // all the GLSL exponential functions: pow, log, exp2, sqrt, etc.\n#include <glm/geometric.hpp>          // all the GLSL geometry functions: dot, cross, reflect, etc.\n#include <glm/integer.hpp>            // all the GLSL integer functions: findMSB, bitfieldExtract, etc.\n#include <glm/matrix.hpp>             // all the GLSL matrix functions: transpose, inverse, etc.\n#include <glm/packing.hpp>            // all the GLSL packing functions: packUnorm4x8, unpackHalf2x16, etc.\n#include <glm/trigonometric.hpp>      // all the GLSL trigonometric functions: radians, cos, asin, etc.\n#include <glm/vector_relational.hpp>  // all the GLSL vector relational functions: equal, less, etc.\n```\n\nThe following is a code sample using separated core headers and an extension:\n\n```cpp\n// Include GLM core features\n#include <glm/vec2.hpp>           // vec2\n#include <glm/vec3.hpp>           // vec3\n#include <glm/mat4x4.hpp>         // mat4\n#include <glm/trigonometric.hpp>  //radians\n\n// Include GLM extension\n#include <glm/ext/matrix_transform.hpp> // perspective, translate, rotate\n\nglm::mat4 transform(glm::vec2 const& Orientation, glm::vec3 const& Translate, glm::vec3 const& Up)\n{\n    glm::mat4 Proj = glm::perspective(glm::radians(45.f), 1.33f, 0.1f, 10.f);\n    glm::mat4 ViewTranslate = glm::translate(glm::mat4(1.f), Translate);\n    glm::mat4 ViewRotateX = glm::rotate(ViewTranslate, Orientation.y, Up);\n    glm::mat4 View = glm::rotate(ViewRotateX, Orientation.x, Up);\n    glm::mat4 Model = glm::mat4(1.0f);\n    return Proj * View * Model;\n}\n```\n\n### <a name=\"section1_3\"></a> 1.3. Using extension headers\n\nUsing GLM through split headers to minimize the project build time:\n\n```cpp\n// Include GLM vector extensions:\n#include <glm/ext/vector_float2.hpp>                // vec2\n#include <glm/ext/vector_float3.hpp>                // vec3\n#include <glm/ext/vector_trigonometric.hpp>         // radians\n\n// Include GLM matrix extensions:\n#include <glm/ext/matrix_float4x4.hpp>              // mat4\n#include <glm/ext/matrix_transform.hpp>             // perspective, translate, rotate\n\nglm::mat4 transform(glm::vec2 const& Orientation, glm::vec3 const& Translate, glm::vec3 const& Up)\n{\n    glm::mat4 Proj = glm::perspective(glm::radians(45.f), 1.33f, 0.1f, 10.f);\n    glm::mat4 ViewTranslate = glm::translate(glm::mat4(1.f), Translate);\n    glm::mat4 ViewRotateX = glm::rotate(ViewTranslate, Orientation.y, Up);\n    glm::mat4 View = glm::rotate(ViewRotateX, Orientation.x, Up);\n    glm::mat4 Model = glm::mat4(1.0f);\n    return Proj * View * Model;\n}\n```\n\n### <a name=\"section1_4\"></a> 1.4. Dependencies\n\nGLM does not depend on external libraries or headers such as `<GL/gl.h>`, [`<GL/glcorearb.h>`](http://www.opengl.org/registry/api/GL/glcorearb.h), `<GLES3/gl3.h>`, `<GL/glu.h>`, or `<windows.h>`.\n\n### <a name=\"section1_5\"></a> 1.5. Finding GLM with CMake\n\nWhen installed, GLM provides the CMake package configuration files `glmConfig.cmake` and `glmConfigVersion.cmake`.\n\nTo use these configurations files, you may need to set the `glm_DIR` variable to the directory containing the configuration files `<installation prefix>/lib/cmake/glm/`.\n\nUse the `find_package` CMake command to load the configurations into your project. Lastly, either link your executable against the `glm::glm` target or add `${GLM_INCLUDE_DIRS}` to your target's include directories:\n\n```cmake\nset(glm_DIR <installation prefix>/lib/cmake/glm) # if necessary\nfind_package(glm REQUIRED)\ntarget_link_libraries(<your executable> glm::glm)\n```\n\nTo use GLM as a submodule in a project instead, use `add_subdirectory` to expose the same target, or add the directory to your target's\n\n```cmake\nadd_subdirectory(glm)\ntarget_link_libraries(<your executable> glm::glm)\n# or\ntarget_include_directories(<your executable> glm)\n```\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section2\"></a> 2. Preprocessor configurations\n\n### <a name=\"section2_1\"></a> 2.1. GLM\\_FORCE\\_MESSAGES: Platform auto detection and default configuration\n\nWhen included, GLM will first automatically detect the compiler used, the C++ standard supported, the compiler arguments used to configure itself matching the build environment.\n\nFor example, if the compiler arguments request AVX code generation, GLM will rely on its code path providing AVX optimizations when available.\n\nWe can change GLM configuration using specific C++ preprocessor defines that must be declared before including any GLM headers.\n\nUsing `GLM_FORCE_MESSAGES`, GLM will report the configuration as part of the build log.\n\n```cpp\n#define GLM_FORCE_MESSAGES // Or defined when building (e.g. -DGLM_FORCE_SWIZZLE)\n#include <glm/glm.hpp>\n```\n\nExample of configuration log generated by `GLM_FORCE_MESSAGES`:\n\n```plaintext\nGLM: version 0.9.9.1\nGLM: C++ 17 with extensions\nGLM: Clang compiler detected\nGLM: x86 64 bits with AVX instruction set build target\nGLM: Linux platform detected\nGLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled.\nGLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL.\nGLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes.\nGLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space.\nGLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system.\n```\n\nThe following subsections describe each configurations and defines.\n\n### <a name=\"section2_2\"></a> 2.2. GLM\\_FORCE\\_PLATFORM\\_UNKNOWN: Force GLM to no detect the build platform\n\n`GLM_FORCE_PLATFORM_UNKNOWN` prevents GLM from detecting the build platform.\n\n### <a name=\"section2_3\"></a> 2.3. GLM\\_FORCE\\_COMPILER\\_UNKNOWN: Force GLM to no detect the C++ compiler\n\n`GLM_FORCE_COMPILER_UNKNOWN` prevents GLM from detecting the C++ compiler.\n\n### <a name=\"section2_4\"></a> 2.4. GLM\\_FORCE\\_ARCH\\_UNKNOWN: Force GLM to no detect the build architecture\n\n`GLM_FORCE_ARCH_UNKNOWN` prevents GLM from detecting the build target architecture.\n\n### <a name=\"section2_5\"></a> 2.5. GLM\\_FORCE\\_CXX\\_UNKNOWN: Force GLM to no detect the C++ standard\n\n`GLM_FORCE_CSS_UNKNOWN` prevents GLM from detecting the C++ compiler standard support.\n\n### <a name=\"section2_6\"></a> 2.6. GLM\\_FORCE\\_CXX**: C++ language detection\n\nGLM will automatically take advantage of compilers’ language extensions when enabled. To increase cross platform compatibility and to avoid compiler extensions, a programmer can define `GLM_FORCE_CXX98` before\nany inclusion of `<glm/glm.hpp>` to restrict the language feature set C++98:\n\n```cpp\n#define GLM_FORCE_CXX98\n#include <glm/glm.hpp>\n```\n\nFor C++11, C++14, and C++17 equivalent defines are available:\n\n* `GLM_FORCE_CXX11`\n* `GLM_FORCE_CXX14`\n* `GLM_FORCE_CXX17`\n\n```cpp\n#define GLM_FORCE_CXX11\n#include <glm/glm.hpp>\n\n// If the compiler doesn’t support C++11, compiler errors will happen.\n```\n\n`GLM_FORCE_CXX17` overrides `GLM_FORCE_CXX14`; `GLM_FORCE_CXX14` overrides `GLM_FORCE_CXX11`; and `GLM_FORCE_CXX11` overrides `GLM_FORCE_CXX98` defines.\n\n### <a name=\"section2_7\"></a> 2.7. GLM\\_FORCE\\_EXPLICIT\\_CTOR: Requiring explicit conversions\n\nGLSL supports implicit conversions of vector and matrix types. For example, an ivec4 can be implicitly converted into `vec4`.\n\nOften, this behaviour is not desirable but following the spirit of the library, this is the default behavior in GLM. However, GLM 0.9.6 introduced the define `GLM_FORCE_EXPLICIT_CTOR` to require explicit conversion for GLM types.\n\n```cpp\n#include <glm/glm.hpp>\n\nvoid foo()\n{\n    glm::ivec4 a;\n    ...\n\n    glm::vec4 b(a); // Explicit conversion, OK\n    glm::vec4 c = a; // Implicit conversion, OK\n    ...\n}\n```\n\nWith `GLM_FORCE_EXPLICIT_CTOR` define, implicit conversions are not allowed:\n\n```cpp\n#define GLM_FORCE_EXPLICIT_CTOR\n#include <glm/glm.hpp>\n\nvoid foo()\n{\n    glm::ivec4 a;\n    {\n        glm::vec4 b(a); // Explicit conversion, OK\n        glm::vec4 c = a; // Implicit conversion, ERROR\n        ...\n}\n```\n\n### <a name=\"section2_8\"></a> 2.8. GLM\\_FORCE\\_INLINE: Force inline\n\nTo push further the software performance, a programmer can define `GLM_FORCE_INLINE` before any inclusion of `<glm/glm.hpp>` to force the compiler to inline GLM code.\n\n```cpp\n#define GLM_FORCE_INLINE\n#include <glm/glm.hpp>\n```\n\n### <a name=\"section2_9\"></a> 2.9. GLM\\_FORCE\\_ALIGNED\\_GENTYPES: Force GLM to enable aligned types\n\nEvery object type has the property called alignment requirement, which is an integer value (of type `std::size_t`, always a power of 2) representing the number of bytes between successive addresses at which objects of this type can be allocated. The alignment requirement of a type can be queried with alignof or `std::alignment_of`. The pointer alignment function `std::align` can be used to obtain a suitably-aligned pointer within some buffer, and `std::aligned_storage` can be used to obtain suitably-aligned storage.\n\nEach object type imposes its alignment requirement on every object of that type; stricter alignment (with larger alignment requirement) can be requested using C++11 `alignas`.\n\nIn order to satisfy alignment requirements of all non-static members of a class, padding may be inserted after some of its members.\n\nGLM supports both packed and aligned types. Packed types allow filling data structure without inserting extra padding. Aligned GLM types align addresses based on the size of the value type of a GLM type.\n\n```cpp\n#define GLM_FORCE_ALIGNED_GENTYPES\n#include <glm/glm.hpp>\n#include <glm/gtc/type_aligned.hpp>\n\ntypedef glm::aligned_vec4 vec4a;\ntypedef glm::packed_vec4 vec4p;\n```\n\n### <a name=\"section2_10\"></a> 2.10. GLM\\_FORCE\\_DEFAULT\\_ALIGNED\\_GENTYPES: Force GLM to use aligned types by default\n\nGLM allows using aligned types by default for vector types using `GLM_FORCE_DEFAULT_ALIGNED_GENTYPES`:\n\n```cpp\n#define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES\n#include <glm/glm.hpp>\n\nstruct MyStruct\n{\n    glm::vec4 a;\n    float b;\n    glm::vec3 c;\n};\n\nvoid foo()\n{\n    printf(\"MyStruct requires memory padding: %d bytes\\n\", sizeof(MyStruct));\n}\n\n>>> MyStruct requires memory padding: 48 bytes\n```\n\n```cpp\n#include <glm/glm.hpp>\n\nstruct MyStruct\n{\n    glm::vec4 a;\n    float b;\n    glm::vec3 c;\n};\n\nvoid foo()\n{\n    printf(\"MyStruct is tightly packed: %d bytes\\n\", sizeof(MyStruct));\n}\n\n>>> MyStruct is tightly packed: 32 bytes\n```\n\n*Note: GLM SIMD optimizations require the use of aligned types*\n\n### <a name=\"section2_11\"></a> 2.11. GLM\\_FORCE\\_INTRINSICS: Using SIMD optimizations\n\nGLM provides some SIMD optimizations based on [compiler intrinsics](https://msdn.microsoft.com/en-us/library/26td21ds.aspx).\nThese optimizations will be automatically thanks to compiler arguments when `GLM_FORCE_INTRINSICS` is defined before including GLM files.\nFor example, if a program is compiled with Visual Studio using `/arch:AVX`, GLM will detect this argument and generate code using AVX instructions automatically when available.\n\nIt’s possible to avoid the instruction set detection by forcing the use of a specific instruction set with one of the fallowing define:\n`GLM_FORCE_SSE2`, `GLM_FORCE_SSE3`, `GLM_FORCE_SSSE3`, `GLM_FORCE_SSE41`, `GLM_FORCE_SSE42`, `GLM_FORCE_AVX`, `GLM_FORCE_AVX2` or `GLM_FORCE_AVX512`.\n\nThe use of intrinsic functions by GLM implementation can be avoided using the define `GLM_FORCE_PURE` before any inclusion of GLM headers. This can be particularly useful if we want to rely on C++14 `constexpr`.\n\n```cpp\n#define GLM_FORCE_PURE\n#include <glm/glm.hpp>\n\nstatic_assert(glm::vec4::length() == 4, \"Using GLM C++ 14 constexpr support for compile time tests\");\n\n// GLM code will be compiled using pure C++ code without any intrinsics\n```\n\n```cpp\n#define GLM_FORCE_SIMD_AVX2\n#include <glm/glm.hpp>\n\n// If the compiler doesn’t support AVX2 instrinsics, compiler errors will happen.\n```\n\nAdditionally, GLM provides a low level SIMD API in glm/simd directory for users who are really interested in writing fast algorithms.\n\n### <a name=\"section2_12\"></a> 2.12. GLM\\_FORCE\\_PRECISION\\_**: Default precision\n\nC++ does not provide a way to implement GLSL default precision selection (as defined in GLSL 4.10 specification section 4.5.3) with GLSL-like syntax.\n\n```glsl\nprecision mediump int;\nprecision highp float;\n```\n\nTo use the default precision functionality, GLM provides some defines that need to added before any include of `glm.hpp`:\n\n```cpp\n#define GLM_FORCE_PRECISION_MEDIUMP_INT\n#define GLM_FORCE_PRECISION_HIGHP_FLOAT\n#include <glm/glm.hpp>\n```\n\nAvailable defines for floating point types (`glm::vec\\*`, `glm::mat\\*`):\n\n* `GLM_FORCE_PRECISION_LOWP_FLOAT`: Low precision\n* `GLM_FORCE_PRECISION_MEDIUMP_FLOAT`: Medium precision\n* `GLM_FORCE_PRECISION_HIGHP_FLOAT`: High precision (default)\n\nAvailable defines for floating point types (`glm::dvec\\*`, `glm::dmat\\*`):\n\n* `GLM_FORCE_PRECISION_LOWP_DOUBLE`: Low precision\n* `GLM_FORCE_PRECISION_MEDIUMP_DOUBLE`: Medium precision\n* `GLM_FORCE_PRECISION_HIGHP_DOUBLE`: High precision (default)\n\nAvailable defines for signed integer types (`glm::ivec\\*`):\n\n* `GLM_FORCE_PRECISION_LOWP_INT`: Low precision\n* `GLM_FORCE_PRECISION_MEDIUMP_INT`: Medium precision\n* `GLM_FORCE_PRECISION_HIGHP_INT`: High precision (default)\n\nAvailable defines for unsigned integer types (`glm::uvec\\*`):\n\n* `GLM_FORCE_PRECISION_LOWP_UINT`: Low precision\n* `GLM_FORCE_PRECISION_MEDIUMP_UINT`: Medium precision\n* `GLM_FORCE_PRECISION_HIGHP_UINT`: High precision (default)\n\n### <a name=\"section2_13\"></a> 2.13. GLM\\_FORCE\\_SINGLE\\_ONLY: Removed explicit 64-bits floating point types\n\nSome platforms (Dreamcast) doesn't support double precision floating point values. To compile on such platforms, GCC has the `--m4-single-only` build argument. When defining `GLM_FORCE_SINGLE_ONLY` before including GLM headers, GLM releases the requirement of double precision floating point values support. Effectivement, all the float64 types are no longer defined and double behaves like float.\n\n### <a name=\"section2_14\"></a> 2.14. GLM\\_FORCE\\_SWIZZLE: Enable swizzle operators\n\nShader languages like GLSL often feature so-called swizzle expressions, which may be used to freely select and arrange a vector's components. For example, `variable.x`, `variable.xzy` and `variable.zxyy` respectively form a scalar, a 3D vector and a 4D vector.  The result of a swizzle expression in GLSL can be either an R-value or an L-value. Swizzle expressions can be written with characters from exactly one of `xyzw` (usually for positions), `rgba` (usually for colors), and `stpq` (usually for texture coordinates).\n\n```glsl\nvec4 A;\nvec2 B;\n\nB.yx = A.wy;\nB = A.xx;\nvec3 C = A.bgr;\nvec3 D = B.rsz; // Invalid, won't compile\n```\n\nGLM supports some of this functionality. Swizzling can be enabled by defining `GLM_FORCE_SWIZZLE`.\n\n*Note: Enabling swizzle expressions will massively increase the size of your binaries and the time it takes to compile them!*\n\nGLM has two levels of swizzling support described in the following subsections.\n\n#### 2.14.1. Swizzle functions for standard C++ 98\n\nWhen compiling GLM as C++98, R-value swizzle expressions are simulated through member functions of each vector type.\n\n```cpp\n#define GLM_FORCE_SWIZZLE // Or defined when building (e.g. -DGLM_FORCE_SWIZZLE)\n#include <glm/glm.hpp>\n\nvoid foo()\n{\n    glm::vec4 const ColorRGBA = glm::vec4(1.0f, 0.5f, 0.0f, 1.0f);\n    glm::vec3 const ColorBGR = ColorRGBA.bgr();\n\n    glm::vec3 const PositionA = glm::vec3(1.0f, 0.5f, 0.0f);\n    glm::vec3 const PositionB = PositionXYZ.xyz() * 2.0f;\n\n    glm::vec2 const TexcoordST = glm::vec2(1.0f, 0.5f);\n    glm::vec4 const TexcoordSTPQ = TexcoordST.stst();\n}\n```\n\nSwizzle operators return a **copy** of the component values, and thus *can't* be used as L-values to change a vector's values.\n\n```cpp\n#define GLM_FORCE_SWIZZLE\n#include <glm/glm.hpp>\n\nvoid foo()\n{\n  glm::vec3 const A = glm::vec3(1.0f, 0.5f, 0.0f);\n\n  // No compiler error, but A is not modified.\n  // An anonymous copy is being modified (and then discarded).\n  A.bgr() = glm::vec3(2.0f, 1.5f, 1.0f); // A is not modified!\n}\n```\n\n#### 2.14.2. Swizzle operations for C++ 98 with language extensions\n\nVisual C++, GCC and Clang support, as a _non-standard language extension_, anonymous `struct`s as `union` members. This permits a powerful swizzling implementation that both allows L-value swizzle expressions and GLSL-like syntax. To use this feature, the language extension must be enabled by a supporting compiler and `GLM_FORCE_SWIZZLE` must be `#define`d.\n\n```cpp\n#define GLM_FORCE_SWIZZLE\n#include <glm/glm.hpp>\n\n// Only guaranteed to work with Visual C++!\n// Some compilers that support Microsoft extensions may compile this.\nvoid foo()\n{\n  glm::vec4 ColorRGBA = glm::vec4(1.0f, 0.5f, 0.0f, 1.0f);\n\n  // l-value:\n  glm::vec4 ColorBGRA = ColorRGBA.bgra;\n\n  // r-value:\n  ColorRGBA.bgra = ColorRGBA;\n\n  // Both l-value and r-value\n  ColorRGBA.bgra = ColorRGBA.rgba;\n}\n```\n\nThis version returns implementation-specific objects that _implicitly convert_ to their respective vector types.  As a consequence of this design, these extra types **can't be directly used** as C++ function arguments; they must be converted through constructors or `operator()`.\n\n```cpp\n#define GLM_FORCE_SWIZZLE\n#include <glm/glm.hpp>\n\nusing namespace glm;\n\nvoid foo()\n{\n  vec4 Color = vec4(1.0f, 0.5f, 0.0f, 1.0f);\n\n  // Generates compiler errors. Color.rgba is not a vector type.\n  vec4 ClampedA = clamp(Color.rgba, 0.f, 1.f); // ERROR\n\n  // Explicit conversion through a constructor\n  vec4 ClampedB = clamp(vec4(Color.rgba), 0.f, 1.f); // OK\n\n  // Explicit conversion through operator()\n  vec4 ClampedC = clamp(Color.rgba(), 0.f, 1.f); // OK\n}\n```\n\n*Note: The implementation has a caveat: Swizzle operator types must be different on both size of the equal operator or the operation will fail. There is no known fix for this issue to date*\n\n### <a name=\"section2_15\"></a> 2.15. GLM\\_FORCE\\_XYZW\\_ONLY: Only exposes x, y, z and w components\n\nFollowing GLSL specifications, GLM supports three sets of components to access vector types member: x, y, z, w; r, g, b, a; and s, t, p, q.\nAlso, this is making vector component very expressive in the code, it may make debugging vector types a little cubersom as the debuggers will typically display three time the values for each compoenents due to the existence of the three sets.\n\nTo simplify vector types, GLM allows exposing only x, y, z and w components thanks to `GLM_FORCE_XYZW_ONLY` define.\n\n### <a name=\"section2_16\"></a> 2.16. GLM\\_FORCE\\_LEFT\\_HANDED: Force left handed coordinate system\n\nBy default, OpenGL is using a right handed coordinate system. However, others APIs such as Direct3D have done different choice and relies on the left handed coordinate system.\n\nGLM allows switching the coordinate system to left handed by defining `GLM_FORCE_LEFT_HANDED`.\n\n### <a name=\"section2_17\"></a> 2.17. GLM\\_FORCE\\_DEPTH\\_ZERO\\_TO\\_ONE: Force the use of a clip space between 0 to 1\n\nBy default, OpenGL is using a -1 to 1 clip space in Z-axis. However, others APIs such as Direct3D relies on a clip space between 0 to 1 in Z-axis.\n\nGLM allows switching the clip space in Z-axis to 0 to 1 by defining `GLM_FORCE_DEPTH_ZERO_TO_ONE`.\n\n### <a name=\"section2_18\"></a> 2.18. GLM\\_FORCE\\_SIZE\\_T\\_LENGTH: Vector and matrix static size\n\nGLSL supports the member function .length() for all vector and matrix types.\n\n```cpp\n#include <glm/glm.hpp>\n\nvoid foo(vec4 const& v)\n{\n    int Length = v.length();\n    ...\n}\n```\n\nThis function returns an `int` however this function typically interacts with STL `size_t` based code. GLM provides `GLM_FORCE_SIZE_T_LENGTH` pre-processor configuration so that member functions `length()` return a `size_t`.\n\nAdditionally, GLM defines the type `glm::length_t` to identify `length()` returned type, independently from `GLM_FORCE_SIZE_T_LENGTH`.\n\n```cpp\n#define GLM_FORCE_SIZE_T_LENGTH\n#include <glm/glm.hpp>\n\nvoid foo(vec4 const& v)\n{\n    glm::length_t Length = v.length();\n    ...\n}\n```\n\n### <a name=\"section2_19\"></a> 2.19. GLM\\_FORCE\\_UNRESTRICTED\\_GENTYPE: Removing genType restriction\n\nGLSL has restrictions on types supported by certain functions that may appear excessive.\nBy default, GLM follows the GLSL specification as accurately as possible however it's possible to relax these rules using `GLM_FORCE_UNRESTRICTED_GENTYPE` define.\n\n```cpp\n#include <glm/glm.hpp>\n\nfloat average(float const A, float const B)\n{\n    return glm::mix(A, B, 0.5f); // By default glm::mix only supports floating-point types\n}\n```\n\nBy defining GLM\\_FORCE\\_UNRESTRICTED\\_GENTYPE, we allow using integer types:\n\n```cpp\n#define GLM_FORCE_UNRESTRICTED_GENTYPE\n#include <glm/glm.hpp>\n\nint average(int const A, int const B)\n{\n    return glm::mix(A, B, 0.5f); // integers are ok thanks to GLM_FORCE_UNRESTRICTED_GENTYPE\n}\n```\n\n### <a name=\"section2_20\"></a> 2.20. GLM\\_FORCE\\_SILENT\\_WARNINGS: Silent C++ warnings from language extensions\n\nWhen using /W4 on Visual C++ or -Wpedantic on GCC, for example, the compilers will generate warnings for using C++ language extensions (/Za with Visual C++) such as anonymous struct.\nGLM relies on anonymous structs for swizzle operators and aligned vector types. To silent those warnings define `GLM_FORCE_SILENT_WARNINGS` before including GLM headers.\n\n### <a name=\"section2_21\"></a> 2.21. GLM\\_FORCE\\_QUAT\\_DATA\\_WXYZ: Force GLM to store quat data as w,x,y,z instead of x,y,z,w\n\nBy default GLM store quaternion components with the x, y, z, w order. `GLM_FORCE_QUAT_DATA_WXYZ` allows switching the quaternion data storage to the w, x, y, z order.\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section3\"></a> 3. Stable extensions\n\n### <a name=\"section3_1\"></a> 3.1. Scalar types\n\n#### 3.1.1. GLM_EXT_scalar_int_sized\n\nThis extension exposes sized and signed integer types.\n\nInclude `<glm/ext/scalar_int_sized.hpp>` to use these features.\n\n#### 3.1.2. GLM_EXT_scalar_uint_sized\n\nThis extension exposes sized and unsigned integer types.\n\n```cpp\n#include <glm/ext/scalar_common.hpp>\n\nglm::uint64 pack(glm::uint32 A, glm::uint16 B, glm::uint8 C, glm::uint8 D)\n{\n\tglm::uint64 ShiftA = 0;\n\tglm::uint64 ShiftB = sizeof(glm::uint32) * 8;\n\tglm::uint64 ShiftC = (sizeof(glm::uint32) + sizeof(glm::uint16)) * 8;\n\tglm::uint64 ShiftD = (sizeof(glm::uint32) + sizeof(glm::uint16) + sizeof(glm::uint8)) * 8;\n\treturn (glm::uint64(A) << ShiftA) | (glm::uint64(B) << ShiftB) | (glm::uint64(C) << ShiftC) | (glm::uint64(D) << ShiftD);\n}\n```\n\nInclude `<glm/ext/scalar_uint_sized.hpp>` to use these features.\n\n### <a name=\"section3_2\"></a> 3.2. Scalar functions\n\n#### 3.2.1. GLM_EXT_scalar_common\n\nThis extension exposes support for `min` and `max` functions taking more than two scalar arguments. Also, it adds `fmin` and `fmax` variants which prevents `NaN` propagation.\n\n```cpp\n#include <glm/ext/scalar_common.hpp>\n\nfloat positiveMax(float const a, float const b)\n{\n    return glm::fmax(a, b, 0.0f);\n}\n```\n\nInclude `<glm/ext/scalar_common.hpp>` to use these features.\n\n#### 3.2.2. GLM_EXT_scalar_relational\n\nThis extension exposes `equal` and `notEqual` scalar variants which takes an epsilon argument.\n\n```cpp\n#include <glm/ext/scalar_relational.hpp>\n\nbool epsilonEqual(float const a, float const b)\n{\n    float const CustomEpsilon = 0.0001f;\n    return glm::equal(a, b, CustomEpsilon);\n}\n```\n\nInclude `<glm/ext/scalar_relational.hpp>` to use these features.\n\n#### 3.2.3. GLM_EXT_scalar_constants\n\nThis extension exposes useful constants such as `epsilon` and `pi`.\n\n```cpp\n#include <glm/ext/scalar_constants.hpp>\n\nfloat circumference(float const Diameter)\n{\n    return glm::pi<float>() * Diameter;\n}\n```\n\n```cpp\n#include <glm/common.hpp> // abs\n#include <glm/ext/scalar_constants.hpp> // epsilon\n\nbool equalULP1(float const a, float const b)\n{\n    return glm::abs(a - b) <= glm::epsilon<float>();\n}\n```\n\nInclude `<glm/ext/scalar_constants.hpp>` to use these features.\n\n#### 3.2.4. GLM_EXT_scalar_ulp\n\nThis extension exposes function that measure of accuracy in numeric calculations.\n\n```cpp\n#include <glm/ext/scalar_ulp.hpp>\n\nbool test_ulp(float x)\n{\n    float const a = glm::next_float(x); // return a float a ULP away from the float argument.\n    return float_distance(a, x) == 1; // check both float are a single ULP away.\n}\n```\n\nInclude `<glm/ext/scalar_ulp.hpp>` to use these features.\n\n### <a name=\"section3_3\"></a> 3.3. Vector types\n\n#### 3.3.1. GLM_EXT_vector_float1\n\nThis extension exposes single-precision floating point vector with 1 component: `vec1`.\n\nInclude `<glm/ext/vector_float1.hpp>` to use these features.\n\n#### 3.3.2. GLM_EXT_vector_float2\n\nThis extension exposes single-precision floating point vector with 2 components: `vec2`.\n\nInclude `<glm/ext/vector_float2.hpp>` to use these features.\n\n#### 3.3.3. GLM_EXT_vector_float3\n\nThis extension exposes single-precision floating point vector with 3 components: `vec3`.\n\nInclude `<glm/ext/vector_float3.hpp>` to use these features.\n\n#### 3.3.4. GLM_EXT_vector_float4\n\nThis extension exposes single-precision floating point vector with 4 components: `vec4`.\n\nInclude `<glm/ext/vector_float4.hpp>` to use these features.\n\n#### 3.3.5. GLM_EXT_vector_double1\n\nThis extension exposes double-precision floating point vector with 1 component: `dvec1`.\n\nInclude `<glm/ext/vector_double1.hpp>` to use these features.\n\n#### 3.3.6. GLM_EXT_vector_double2\n\nThis extension exposes double-precision floating point vector with 2 components: `dvec2`.\n\nInclude `<glm/ext/vector_double2.hpp>` to use these features.\n\n#### 3.3.7. GLM_EXT_vector_double3\n\nThis extension exposes double-precision floating point vector with 3 components: `dvec3`.\n\nInclude `<glm/ext/vector_double3.hpp>` to use these features.\n\n#### 3.3.8. GLM_EXT_vector_double4\n\nThis extension exposes double-precision floating point vector with 4 components: `dvec4`.\n\nInclude `<glm/ext/vector_double4.hpp>` to use these features.\n\n#### 3.3.9. GLM_EXT_vector_int1\n\nThis extension exposes signed integer vector with 1 component: `ivec1`.\n\nInclude `<glm/ext/vector_int1.hpp>` to use these features.\n\n#### 3.3.10. GLM_EXT_vector_int2\n\nThis extension exposes signed integer vector with 2 components: `ivec2`.\n\nInclude `<glm/ext/vector_int2.hpp>` to use these features.\n\n#### 3.3.11. GLM_EXT_vector_int3\n\nThis extension exposes signed integer vector with 3 components: `ivec3`.\n\nInclude `<glm/ext/vector_int3.hpp>` to use these features.\n\n#### 3.3.12. GLM_EXT_vector_int4\n\nThis extension exposes signed integer vector with 4 components: `ivec4`.\n\nInclude `<glm/ext/vector_int4.hpp>` to use these features.\n\n#### 3.3.13. GLM_EXT_vector_int1\n\nThis extension exposes unsigned integer vector with 1 component: `uvec1`.\n\nInclude `<glm/ext/vector_uint1.hpp>` to use these features.\n\n#### 3.3.14. GLM_EXT_vector_uint2\n\nThis extension exposes unsigned integer vector with 2 components: `uvec2`.\n\nInclude `<glm/ext/vector_uint2.hpp>` to use these features.\n\n#### 3.3.15. GLM_EXT_vector_uint3\n\nThis extension exposes unsigned integer vector with 3 components: `uvec3`.\n\nInclude `<glm/ext/vector_uint3.hpp>` to use these features.\n\n#### 3.3.16. GLM_EXT_vector_uint4\n\nThis extension exposes unsigned integer vector with 4 components: `uvec4`.\n\nInclude `<glm/ext/vector_uint4.hpp>` to use these features.\n\n#### 3.3.17. GLM_EXT_vector_bool1\n\nThis extension exposes boolean vector with 1 component: `bvec1`.\n\nInclude `<glm/ext/vector_bool1.hpp>` to use these features.\n\n#### 3.3.18. GLM_EXT_vector_bool2\n\nThis extension exposes boolean vector with 2 components: `bvec2`.\n\nInclude `<glm/ext/vector_bool2.hpp>` to use these features.\n\n#### 3.3.19. GLM_EXT_vector_bool3\n\nThis extension exposes boolean vector with 3 components: `bvec3`.\n\nInclude `<glm/ext/vector_bool3.hpp>` to use these features.\n\n#### 3.3.20. GLM_EXT_vector_bool4\n\nThis extension exposes boolean vector with 4 components: `bvec4`.\n\nInclude `<glm/ext/vector_bool4.hpp>` to use these features.\n\n### <a name=\"section3_4\"></a> 3.4. Vector types with precision qualifiers\n\n#### 3.4.1. GLM_EXT_vector_float1_precision\n\nThis extension exposes single-precision floating point vector with 1 component using various precision in term of ULPs: `lowp_vec1`, `mediump_vec1` and `highp_vec1`.\n\nInclude `<glm/ext/vector_float1_precision.hpp>` to use these features.\n\n#### 3.4.2. GLM_EXT_vector_float2_precision\n\nThis extension exposes single-precision floating point vector with 2 components using various precision in term of ULPs: `lowp_vec2`, `mediump_vec2` and `highp_vec2`.\n\nInclude `<glm/ext/vector_float2_precision.hpp>` to use these features.\n\n#### 3.4.3. GLM_EXT_vector_float3_precision\n\nThis extension exposes single-precision floating point vector with 3 components using various precision in term of ULPs: `lowp_vec3`, `mediump_vec3` and `highp_vec3`.\n\nInclude `<glm/ext/vector_float3_precision.hpp>` to use these features.\n\n#### 3.4.4. GLM_EXT_vector_float4_precision\n\nThis extension exposes single-precision floating point vector with 4 components using various precision in term of ULPs: `lowp_vec4`, `mediump_vec4` and `highp_vec4`.\n\nInclude `<glm/ext/vector_float4_precision.hpp>` to use these features.\n\n#### 3.4.5. GLM_EXT_vector_double1_precision\n\nThis extension exposes double-precision floating point vector with 1 component using various precision in term of ULPs: `lowp_dvec1`, `mediump_dvec1` and `highp_dvec1`.\n\nInclude `<glm/ext/vector_double1_precision.hpp>` to use these features.\n\n#### 3.4.6. GLM_EXT_vector_double2_precision\n\nThis extension exposes double-precision floating point vector with 2 components using various precision in term of ULPs: `lowp_dvec2`, `mediump_dvec2` and `highp_dvec2`.\n\nInclude `<glm/ext/vector_double2_precision.hpp>` to use these features.\n\n#### 3.4.7. GLM_EXT_vector_double3_precision\n\nThis extension exposes double-precision floating point vector with 3 components using various precision in term of ULPs: `lowp_dvec3`, `mediump_dvec3` and `highp_dvec3`.\n\nInclude `<glm/ext/vector_double3_precision.hpp>` to use these features.\n\n#### 3.4.8. GLM_EXT_vector_double4_precision\n\nThis extension exposes double-precision floating point vector with 4 components using various precision in term of ULPs: `lowp_dvec4`, `mediump_dvec4` and `highp_dvec4`.\n\nInclude `<glm/ext/vector_double4_precision.hpp>` to use these features.\n\n### <a name=\"section3_5\"></a> 3.5. Vector functions\n\n#### 3.5.1. GLM_EXT_vector_common\n\nThis extension exposes support for `min` and `max` functions taking more than two vector arguments. Also, it adds `fmin` and `fmax` variants which prevents `NaN` propagation.\n\n```cpp\n#include <glm/ext/vector_float2.hpp> // vec2\n#include <glm/ext/vector_common.hpp> // fmax\n\nfloat positiveMax(float const a, float const b)\n{\n    return glm::fmax(a, b, 0.0f);\n}\n```\n\nInclude `<glm/ext/vector_common.hpp>` to use these features.\n\n#### 3.5.2. GLM_EXT_vector_relational\n\nThis extension exposes `equal` and `notEqual` vector variants which takes an epsilon argument.\n\n```cpp\n#include <glm/ext/vector_float2.hpp> // vec2\n#include <glm/ext/vector_relational.hpp> // equal, all\n\nbool epsilonEqual(glm::vec2 const& A, glm::vec2 const& B)\n{\n    float const CustomEpsilon = 0.0001f;\n    return glm::all(glm::equal(A, B, CustomEpsilon));\n}\n```\n\nInclude `<glm/ext/vector_relational.hpp>` to use these features.\n\n#### 3.5.3. GLM_EXT_vector_ulp\n\nThis extension exposes function that measure of accuracy in numeric calculations.\n\n```cpp\n#include <glm/ext/vector_ulp.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/vector_int4.hpp>\n\nbool test_ulp(glm::vec4 const& x)\n{\n    glm::vec4 const a = glm::next_float(x); // return a float a ULP away from the float argument.\n    return glm::all(float_distance(a, x) == glm::ivec4(1)); // check both float are a single ULP away.\n}\n```\n\nInclude `<glm/ext/vector_ulp.hpp>` to use these features.\n\n### <a name=\"section3_6\"></a> 3.6. Matrix types\n\n#### 3.6.1. GLM_EXT_matrix_float2x2\n\nThis extension exposes single-precision floating point vector with 2 columns by 2 rows: `mat2x2`.\n\nInclude `<glm/ext/matrix_float2x2.hpp>` to use these features.\n\n#### 3.6.2. GLM_EXT_matrix_float2x3\n\nThis extension exposes single-precision floating point vector with 2 columns by 3 rows: `mat2x3`.\n\nInclude `<glm/ext/matrix_float2x3.hpp>` to use these features.\n\n#### 3.6.3. GLM_EXT_matrix_float2x4\n\nThis extension exposes single-precision floating point vector with 2 columns by 4 rows: `mat2x4`.\n\nInclude `<glm/ext/matrix_float2x4.hpp>` to use these features.\n\n#### 3.6.4. GLM_EXT_matrix_float3x2\n\nThis extension exposes single-precision floating point vector with 3 columns by 2 rows: `mat3x2`.\n\nInclude `<glm/ext/matrix_float3x2.hpp>` to use these features.\n\n#### 3.6.5. GLM_EXT_matrix_float3x3\n\nThis extension exposes single-precision floating point vector with 3 columns by 3 rows: `mat3x3`.\n\nInclude `<glm/ext/matrix_float3x3.hpp>` to use these features.\n\n#### 3.6.6. GLM_EXT_matrix_float3x4\n\nThis extension exposes single-precision floating point vector with 3 columns by 4 rows: `mat3x4`.\n\nInclude `<glm/ext/matrix_float3x4.hpp>` to use these features.\n\n#### 3.6.7. GLM_EXT_matrix_float4x2\n\nThis extension exposes single-precision floating point vector with 4 columns by 2 rows: `mat4x2`.\n\nInclude `<glm/ext/matrix_float4x2.hpp>` to use these features.\n\n#### 3.6.8. GLM_EXT_matrix_float4x3\n\nThis extension exposes single-precision floating point vector with 4 columns by 3 rows: `mat4x3`.\n\nInclude `<glm/ext/matrix_float4x3.hpp>` to use these features.\n\n#### 3.6.9. GLM_EXT_matrix_float4x4\n\nThis extension exposes single-precision floating point vector with 4 columns by 4 rows: `mat4x4`.\n\nInclude `<glm/ext/matrix_float4x4.hpp>` to use these features.\n\n#### 3.6.10. GLM_EXT_matrix_double2x2\n\nThis extension exposes double-precision floating point vector with 2 columns by 2 rows: `dmat2x2`.\n\nInclude `<glm/ext/matrix_double2x2.hpp>` to use these features.\n\n#### 3.6.11. GLM_EXT_matrix_double2x3\n\nThis extension exposes double-precision floating point vector with 2 columns by 3 rows: `dmat2x3`.\n\nInclude `<glm/ext/matrix_double2x3.hpp>` to use these features.\n\n#### 3.6.12. GLM_EXT_matrix_double2x4\n\nThis extension exposes double-precision floating point vector with 2 columns by 4 rows: `dmat2x4`.\n\nInclude `<glm/ext/matrix_double2x4.hpp>` to use these features.\n\n#### 3.6.13. GLM_EXT_matrix_double3x2\n\nThis extension exposes double-precision floating point vector with 3 columns by 2 rows: `dmat3x2`.\n\nInclude `<glm/ext/matrix_double3x2.hpp>` to use these features.\n\n#### 3.6.14. GLM_EXT_matrix_double3x3\n\nThis extension exposes double-precision floating point vector with 3 columns by 3 rows: `dmat3x3`.\n\nInclude `<glm/ext/matrix_double3x3.hpp>` to use these features.\n\n#### 3.6.15. GLM_EXT_matrix_double3x4\n\nThis extension exposes double-precision floating point vector with 3 columns by 4 rows: `dmat3x4`.\n\nInclude `<glm/ext/matrix_double3x4.hpp>` to use these features.\n\n#### 3.6.16. GLM_EXT_matrix_double4x2\n\nThis extension exposes double-precision floating point vector with 4 columns by 2 rows: `dmat4x2`.\n\nInclude `<glm/ext/matrix_double4x2.hpp>` to use these features.\n\n#### 3.6.17. GLM_EXT_matrix_double4x3\n\nThis extension exposes double-precision floating point vector with 4 columns by 3 rows: `dmat4x3`.\n\nInclude `<glm/ext/matrix_double4x3.hpp>` to use these features.\n\n#### 3.6.18. GLM_EXT_matrix_double4x4\n\nThis extension exposes double-precision floating point vector with 4 columns by 4 rows: `dmat4x4`.\n\nInclude `<glm/ext/matrix_double4x4.hpp>` to use these features.\n\n### <a name=\"section3_7\"></a> 3.7. Matrix types with precision qualifiers\n\n#### 3.7.1. GLM_EXT_matrix_float2x2_precision\n\nThis extension exposes single-precision floating point vector with 2 columns by 2 rows using various precision in term of ULPs: `lowp_mat2x2`, `mediump_mat2x2` and `highp_mat2x2`.\n\nInclude `<glm/ext/matrix_float2x2_precision.hpp>` to use these features.\n\n#### 3.7.2. GLM_EXT_matrix_float2x3_precision\n\nThis extension exposes single-precision floating point vector with 2 columns by 3 rows using various precision in term of ULPs: `lowp_mat2x3`, `mediump_mat2x3` and `highp_mat2x3`.\n\nInclude `<glm/ext/matrix_float2x3_precision.hpp>` to use these features.\n\n#### 3.7.3. GLM_EXT_matrix_float2x4_precision\n\nThis extension exposes single-precision floating point vector with 2 columns by 4 rows using various precision in term of ULPs: `lowp_mat2x4`, `mediump_mat2x4` and `highp_mat2x4`.\n\nInclude `<glm/ext/matrix_float2x4_precision.hpp>` to use these features.\n\n#### 3.7.4. GLM_EXT_matrix_float3x2_precision\n\nThis extension exposes single-precision floating point vector with 3 columns by 2 rows using various precision in term of ULPs: `lowp_mat3x2`, `mediump_mat3x2` and `highp_mat3x2`.\n\nInclude `<glm/ext/matrix_float3x2_precision.hpp>` to use these features.\n\n#### 3.7.5. GLM_EXT_matrix_float3x3_precision\n\nThis extension exposes single-precision floating point vector with 3 columns by 3 rows using various precision in term of ULPs: `lowp_mat3x3`, `mediump_mat3x3` and `highp_mat3x3`.\n\nInclude `<glm/ext/matrix_float3x3_precision.hpp>` to use these features.\n\n#### 3.7.6. GLM_EXT_matrix_float3x4_precision\n\nThis extension exposes single-precision floating point vector with 3 columns by 4 rows using various precision in term of ULPs: `lowp_mat3x4`, `mediump_mat3x4` and `highp_mat3x4`.\n\nInclude `<glm/ext/matrix_float3x4_precision.hpp>` to use these features.\n\n#### 3.7.7. GLM_EXT_matrix_float4x2_precision\n\nThis extension exposes single-precision floating point vector with 4 columns by 2 rows using various precision in term of ULPs: `lowp_mat4x2`, `mediump_mat4x2` and `highp_mat4x2`.\n\nInclude `<glm/ext/matrix_float4x2_precision.hpp>` to use these features.\n\n#### 3.7.8. GLM_EXT_matrix_float4x3_precision\n\nThis extension exposes single-precision floating point vector with 4 columns by 3 rows using various precision in term of ULPs: `lowp_mat4x3`, `mediump_mat4x3` and `highp_mat4x3`.\n\nInclude `<glm/ext/matrix_float4x3_precision.hpp>` to use these features.\n\n#### 3.7.9. GLM_EXT_matrix_float4x4_precision\n\nThis extension exposes single-precision floating point vector with 4 columns by 4 rows using various precision in term of ULPs: `lowp_mat4x4`, `mediump_mat4x4` and `highp_mat4x4`.\n\nInclude `<glm/ext/matrix_float4x4_precision.hpp>` to use these features.\n\n#### 3.7.10. GLM_EXT_matrix_double2x2_precision\n\nThis extension exposes double-precision floating point vector with 2 columns by 2 rows using various precision in term of ULPs: `lowp_dmat2x2`, `mediump_dmat2x2` and `highp_dmat2x2`.\n\nInclude `<glm/ext/matrix_double2x2_precision.hpp>` to use these features.\n\n#### 3.7.11. GLM_EXT_matrix_double2x3_precision\n\nThis extension exposes double-precision floating point vector with 2 columns by 3 rows using various precision in term of ULPs: `lowp_dmat2x3`, `mediump_dmat2x3` and `highp_dmat2x3`.\n\nInclude `<glm/ext/matrix_double2x3_precision.hpp>` to use these features.\n\n#### 3.7.12. GLM_EXT_matrix_double2x4_precision\n\nThis extension exposes double-precision floating point vector with 2 columns by 4 rows using various precision in term of ULPs: `lowp_dmat2x4`, `mediump_dmat2x4` and `highp_dmat2x4`.\n\nInclude `<glm/ext/matrix_double2x4_precision.hpp>` to use these features.\n\n#### 3.7.13. GLM_EXT_matrix_double3x2_precision\n\nThis extension exposes double-precision floating point vector with 3 columns by 2 rows using various precision in term of ULPs: `lowp_dmat3x2`, `mediump_dmat3x2` and `highp_dmat3x2`.\n\nInclude `<glm/ext/matrix_double3x2_precision.hpp>` to use these features.\n\n#### 3.7.14. GLM_EXT_matrix_double3x3_precision\n\nThis extension exposes double-precision floating point vector with 3 columns by 3 rows using various precision in term of ULPs: `lowp_dmat3x3`, `mediump_dmat3x3` and `highp_dmat3x3`.\n\nInclude `<glm/ext/matrix_double3x3_precision.hpp>` to use these features.\n\n#### 3.7.15. GLM_EXT_matrix_double3x4_precision\n\nThis extension exposes double-precision floating point vector with 3 columns by 4 rows using various precision in term of ULPs: `lowp_dmat3x4`, `mediump_dmat3x4` and `highp_dmat3x4`.\n\nInclude `<glm/ext/matrix_double3x4_precision.hpp>` to use these features.\n\n#### 3.7.16. GLM_EXT_matrix_double4x2_precision\n\nThis extension exposes double-precision floating point vector with 4 columns by 2 rows using various precision in term of ULPs: `lowp_dmat4x2`, `mediump_dmat4x2` and `highp_dmat4x2`.\n\nInclude `<glm/ext/matrix_double4x2_precision.hpp>` to use these features.\n\n#### 3.7.17. GLM_EXT_matrix_double4x3_precision\n\nThis extension exposes double-precision floating point vector with 4 columns by 3 rows using various precision in term of ULPs: `lowp_dmat4x3`, `mediump_dmat4x3` and `highp_dmat4x3`.\n\nInclude `<glm/ext/matrix_double4x3_precision.hpp>` to use these features.\n\n#### 3.7.18. GLM_EXT_matrix_double4x4_precision\n\nThis extension exposes double-precision floating point vector with 4 columns by 4 rows using various precision in term of ULPs: `lowp_dmat4x4`, `mediump_dmat4x4` and `highp_dmat4x4`.\n\nInclude `<glm/ext/matrix_double4x4_precision.hpp>` to use these features.\n\n### <a name=\"section3_8\"></a> 3.8. Matrix functions\n\n#### 3.8.1. GLM_EXT_matrix_relational\n\nThis extension exposes `equal` and `notEqual` matrix variants which takes an optional epsilon argument.\n\n```cpp\n#include <glm/ext/vector_bool4.hpp> // bvec4\n#include <glm/ext/matrix_float4x4.hpp> // mat4\n#include <glm/ext/matrix_relational.hpp> // equal, all\n\nbool epsilonEqual(glm::mat4 const& A, glm::mat4 const& B)\n{\n    float const CustomEpsilon = 0.0001f;\n    glm::bvec4 const ColumnEqual = glm::equal(A, B, CustomEpsilon); // Evaluation per column\n    return glm::all(ColumnEqual);\n}\n```\n\nInclude `<glm/ext/matrix_relational.hpp>` to use these features.\n\n#### 3.8.2. GLM_EXT_matrix_transform\n\nThis extension exposes matrix transformation functions: `translate`, `rotate` and `scale`.\n\n```cpp\n#include <glm/ext/vector_float2.hpp> // vec2\n#include <glm/ext/vector_float3.hpp> // vec3\n#include <glm/ext/matrix_float4x4.hpp> // mat4x4\n#include <glm/ext/matrix_transform.hpp> // translate, rotate, scale, identity\n\nglm::mat4 computeModelViewMatrix(float Translate, glm::vec2 const & Rotate)\n{\n\tglm::mat4 View = glm::translate(glm::identity(), glm::vec3(0.0f, 0.0f, -Translate));\n\tView = glm::rotate(View, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f));\n\tView = glm::rotate(View, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f));\n\tglm::mat4 Model = glm::scale(glm::identity(), glm::vec3(0.5f));\n\treturn View * Model;\n}\n```\n\nInclude `<glm/ext/matrix_transform.hpp>` to use these features.\n\n#### 3.8.3. GLM_EXT_matrix_clip_space\n\nThis extension exposes functions to transform scenes into the clip space.\n\n```cpp\n#include <glm/ext/matrix_float4x4.hpp> // mat4x4\n#include <glm/ext/matrix_clip_space.hpp> // perspective\n#include <glm/trigonometric.hpp> // radians\n\nglm::mat4 computeProjection(float Width, float Height)\n{\n\treturn glm::perspective(glm::radians(45.0f), Width / Height, 0.1f, 100.f);\n}\n```\n\nInclude `<glm/ext/matrix_clip_space.hpp>` to use these features.\n\n#### 3.8.4. GLM_EXT_matrix_projection\n\nThis extension exposes functions to map object coordinates into window coordinates and reverse\n\nInclude `<glm/ext/matrix_projection.hpp>` to use these features.\n\n### <a name=\"section3_9\"></a> 3.9. Quaternion types\n\n#### 3.9.1. GLM_EXT_quaternion_float\n\nThis extension exposes single-precision floating point quaternion: `quat`.\n\nInclude `<glm/ext/quaternion_float.hpp>` to use these features.\n\n#### 3.9.2. GLM_EXT_quaternion_double\n\nThis extension exposes double-precision floating point quaternion: `dquat`.\n\nInclude `<glm/ext/quaternion_double.hpp>` to use these features.\n\n### <a name=\"section3_10\"></a> 3.10. Quaternion types with precision qualifiers\n\n#### 3.10.1. GLM_EXT_quaternion_float_precision\n\nThis extension exposes single-precision floating point quaternion using various precision in term of ULPs: `lowp_quat`, `mediump_quat` and `highp_quat`.\n\nInclude `<glm/ext/quaternion_float_precision.hpp>` to use these features.\n\n#### 3.10.2. GLM_EXT_quaternion_double_precision\n\nThis extension exposes double-precision floating point quaternion using various precision in term of ULPs: `lowp_dquat`, `mediump_dquat` and `highp_dquat`.\n\nInclude `<glm/ext/quaternion_double_precision.hpp>` to use these features.\n\n### <a name=\"section3_11\"></a> 3.11. Quaternion functions\n\n#### 3.11.1. GLM_EXT_quaternion_common\n\nThis extension exposes common quaternion functions such as `slerp`, `conjugate` and `inverse`.\n\nInclude `<glm/ext/quaternion_common.hpp>` to use these features.\n\n#### 3.11.2. GLM_EXT_quaternion_geometric\n\nThis extension exposes geometric quaternion functions such as `length`, `normalize`, `dot` and `cross`.\n\nInclude `<glm/ext/quaternion_geometric.hpp>` to use these features.\n\n#### 3.11.3. GLM_EXT_quaternion_trigonometric\n\nThis extension exposes trigonometric quaternion functions such as `angle` and `axis`.\n\nInclude `<glm/ext/quaternion_trigonometric.hpp>` to use these features.\n\n#### 3.11.4. GLM_EXT_quaternion_exponential\n\nThis extensions expose exponential functions for quaternions such as `exp`, `log`, `pow` and `sqrt`.\n\nInclude `<glm/ext/quaternion_exponential.hpp>` to use these features.\n\n#### 3.11.5. GLM_EXT_quaternion_relational\n\nThis extension exposes relational functions to compare quaternions.\n\nInclude `<glm/ext/quaternion_relational.hpp>` to use these features.\n\n#### 3.11.6. GLM_EXT_quaternion_transform\n\nThis extension exposes functions to transform objects.\n\nInclude `<glm/ext/quaternion_transform.hpp>` to use these features.\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section4\"></a> 4. Recommended extensions\n\nGLM extends the core GLSL feature set with extensions. These extensions include: quaternion, transformation, spline, matrix inverse, color spaces, etc.\n\nTo include an extension, we only need to include the dedicated header file. Once included, the features are added to the GLM namespace.\n\n```cpp\n#include <glm/glm.hpp>\n#include <glm/gtc/matrix_transform.hpp>\n\nint foo()\n{\n    glm::vec4 Position = glm::vec4(glm:: vec3(0.0f), 1.0f);\n    glm::mat4 Model = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f));\n\n    glm::vec4 Transformed = Model * Position;\n    ...\n\n    return 0;\n}\n```\n\nWhen an extension is included, all the dependent core functionalities and extensions will be included as well.\n\n### <a name=\"section4_1\"></a> 4.1. GLM_GTC_bitfield\n\nFast bitfield operations on scalar and vector variables.\n\n`<glm/gtc/bitfield.hpp>` need to be included to use these features.\n\n### <a name=\"section4_2\"></a> 4.2. GLM_GTC_color_space\n\nConversion between linear RGB and sRGB color spaces.\n\n`<glm/gtc/color_space.hpp>` need to be included to use these features.\n\n### <a name=\"section4_3\"></a> 4.3. GLM_GTC_constants\n\nProvide a list of built-in constants.\n\n`<glm/gtc/constants.hpp>` need to be included to use these features.\n\n### <a name=\"section4_4\"></a> 4.4. GLM\\_GTC\\_epsilon\n\nApproximate equality comparisons for floating-point numbers, possibly with a user-defined epsilon.\n\n`<glm/gtc/epsilon.hpp>` need to be included to use these features.\n\n### <a name=\"section4_5\"></a> 4.5. GLM\\_GTC\\_integer\n\nInteger variants of core GLM functions.\n\n`<glm/gtc/integer.hpp>` need to be included to use these features.\n\n### <a name=\"section4_6\"></a> 4.6. GLM\\_GTC\\_matrix\\_access\n\nFunctions to conveniently access the individual rows or columns of a matrix.\n\n`<glm/gtc/matrix_access.hpp>` need to be included to use these features.\n\n### <a name=\"section4_7\"></a> 4.7. GLM\\_GTC\\_matrix\\_integer\n\nInteger matrix types similar to the core floating-point matrices.  Some operations (such as inverse and determinant) are not supported.\n\n`<glm/gtc/matrix_integer.hpp>` need to be included to use these features.\n\n### <a name=\"section4_8\"></a> 4.8. GLM\\_GTC\\_matrix\\_inverse\n\nAdditional matrix inverse functions.\n\n`<glm/gtc/matrix_inverse.hpp>` need to be included to use these features.\n\n### <a name=\"section4_9\"></a> 4.9. GLM\\_GTC\\_matrix\\_transform\n\nMatrix transformation functions that follow the OpenGL fixed-function conventions.\n\nFor example, the `lookAt` function generates a transformation matrix that projects world coordinates into eye coordinates suitable for projection matrices (e.g. `perspective`, `ortho`). See the OpenGL compatibility specifications for more information about the layout of these generated matrices.\n\nThe matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the `lookAt` function generates a transform from world space into the specific eye space that the\nprojective matrix functions (`perspective`, `ortho`, etc) are designed to expect. The OpenGL compatibility specifications define the particular layout of this eye space.\n\n`<glm/gtc/matrix_transform.hpp>` need to be included to use these features.\n\n### <a name=\"section4_10\"></a> 4.10. GLM\\_GTC\\_noise\n\nDefine 2D, 3D and 4D procedural noise functions.\n\n`<glm/gtc/noise.hpp>` need to be included to use these features.\n\n![](./doc/manual/noise-simplex1.jpg)\n\nFigure 4.10.1: glm::simplex(glm::vec2(x / 16.f, y / 16.f));\n\n![](./doc/manual/noise-simplex2.jpg)\n\nFigure 4.10.2: glm::simplex(glm::vec3(x / 16.f, y / 16.f, 0.5f));\n\n![](./doc/manual/noise-simplex3.jpg)\n\nFigure 4.10.3: glm::simplex(glm::vec4(x / 16.f, y / 16.f, 0.5f, 0.5f));\n\n![](./doc/manual/noise-perlin1.jpg)\n\nFigure 4.10.4: glm::perlin(glm::vec2(x / 16.f, y / 16.f));\n\n![](./doc/manual/noise-perlin2.jpg)\n\nFigure 4.10.5: glm::perlin(glm::vec3(x / 16.f, y / 16.f, 0.5f));\n\n![](./doc/manual/noise-perlin3.jpg)\n\nFigure 4.10.6: glm::perlin(glm::vec4(x / 16.f, y / 16.f, 0.5f, 0.5f)));\n\n![](./doc/manual/noise-perlin4.png)\n\nFigure 4.10.7: glm::perlin(glm::vec2(x / 16.f, y / 16.f), glm::vec2(2.0f));\n\n![](./doc/manual/noise-perlin5.png)\n\nFigure 4.10.8: glm::perlin(glm::vec3(x / 16.f, y / 16.f, 0.5f), glm::vec3(2.0f));\n\n![](./doc/manual/noise-perlin6.png)\n\nFigure 4.10.9: glm::perlin(glm::vec4(x / 16.f, y / 16.f, glm::vec2(0.5f)), glm::vec4(2.0f));\n\n### <a name=\"section4_11\"></a> 4.11. GLM\\_GTC\\_packing\n\nConvert scalar and vector types to and from packed formats, saving space at the cost of precision. However, packing a value into a format that it was previously unpacked from is guaranteed to be lossless.\n\n`<glm/gtc/packing.hpp>` need to be included to use these features.\n\n### <a name=\"section4_12\"></a> 4.12. GLM\\_GTC\\_quaternion\n\nQuaternions and operations upon thereof.\n\n`<glm/gtc/quaternion.hpp>` need to be included to use these features.\n\n### <a name=\"section4_13\"></a> 4.13. GLM\\_GTC\\_random\n\nProbability distributions in up to four dimensions.\n\n`<glm/gtc/random.hpp>` need to be included to use these features.\n\n![](./doc/manual/random-linearrand.png)\n\nFigure 4.13.1: glm::vec4(glm::linearRand(glm::vec2(-1), glm::vec2(1)), 0, 1);\n\n![](./doc/manual/random-circularrand.png)\n\nFigure 4.13.2: glm::vec4(glm::circularRand(1.0f), 0, 1);\n\n![](./doc/manual/random-sphericalrand.png)\n\nFigure 4.13.3: glm::vec4(glm::sphericalRand(1.0f), 1);\n\n![](./doc/manual/random-diskrand.png)\n\nFigure 4.13.4: glm::vec4(glm::diskRand(1.0f), 0, 1);\n\n![](./doc/manual/random-ballrand.png)\n\nFigure 4.13.5: glm::vec4(glm::ballRand(1.0f), 1);\n\n![](./doc/manual/random-gaussrand.png)\n\nFigure 4.13.6: glm::vec4(glm::gaussRand(glm::vec3(0), glm::vec3(1)), 1);\n\n### <a name=\"section4_14\"></a> 4.14. GLM\\_GTC\\_reciprocal\n\nReciprocal trigonometric functions (e.g. secant, cosecant, tangent).\n\n`<glm/gtc/reciprocal.hpp>` need to be included to use the features of this extension.\n\n### <a name=\"section4_15\"></a> 4.15. GLM\\_GTC\\_round\n\nVarious rounding operations and common special cases thereof.\n\n`<glm/gtc/round.hpp>` need to be included to use the features of this extension.\n\n### <a name=\"section4_16\"></a> 4.16. GLM\\_GTC\\_type\\_aligned\n\nAligned vector types.\n\n`<glm/gtc/type_aligned.hpp>` need to be included to use the features of this extension.\n\n### <a name=\"section4_17\"></a> 4.17. GLM\\_GTC\\_type\\_precision\n\nVector and matrix types with defined precisions, e.g. `i8vec4`, which is a 4D vector of signed 8-bit integers.\n\n`<glm/gtc/type\\_precision.hpp>` need to be included to use the features of this extension.\n\n### <a name=\"section4_18\"></a> 4.18. GLM\\_GTC\\_type\\_ptr\n\nFacilitate interactions between pointers to basic types (e.g. `float*`) and GLM types (e.g. `mat4`).\n\nThis extension defines an overloaded function, `glm::value_ptr`, which returns a pointer to the memory layout of any GLM vector or matrix (`vec3`, `mat4`, etc.). Matrix types store their values in column-major order. This is useful for uploading data to matrices or for copying data to buffer objects.\n\n```cpp\n// GLM_GTC_type_ptr provides a safe solution:\n#include <glm/glm.hpp>\n#include <glm/gtc/type_ptr.hpp>\n\nvoid foo()\n{\n    glm::vec4 v(0.0f);\n    glm::mat4 m(1.0f);\n    ...\n    glVertex3fv(glm::value_ptr(v))\n    glLoadMatrixfv(glm::value_ptr(m));\n}\n\n// Another solution, this one inspired by the STL:\n#include <glm/glm.hpp>\n\nvoid foo()\n{\n    glm::vec4 v(0.0f);\n    glm::mat4 m(1.0f);\n    ...\n    glVertex3fv(&v[0]);\n    glLoadMatrixfv(&m[0][0]);\n}\n```\n\n*Note: It would be possible to implement [`glVertex3fv`](http://www.opengl.org/sdk/docs/man2/xhtml/glVertex.xml)(glm::vec3(0)) in C++ with the appropriate cast operator that would result as an\nimplicit cast in this example. However cast operators may produce programs running with unexpected behaviours without build error or any form of notification.*\n\n`<glm/gtc/type_ptr.hpp>` need to be included to use these features.\n\n### <a name=\"section4_19\"></a> 4.19. GLM\\_GTC\\_ulp\n\nMeasure a function's accuracy given a reference implementation of it. This extension works on floating-point data and provides results in [ULP](http://ljk.imag.fr/membres/Carine.Lucas/TPScilab/JMMuller/ulp-toms.pdf).\n\n`<glm/gtc/ulp.hpp>` need to be included to use these features.\n\n### <a name=\"section4_20\"></a> 4.20. GLM\\_GTC\\_vec1\n\nAdd \\*vec1 types.\n\n`<glm/gtc/vec1.hpp>` need to be included to use these features.\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section5\"></a> 5. OpenGL interoperability\n\n### <a name=\"section5_1\"></a> 5.1. GLM replacements for deprecated OpenGL functions\n\nOpenGL 3.1 specification has deprecated some features that have been removed from OpenGL 3.2 core profile specification. GLM provides some replacement functions.\n\n[***glRotate{f, d}:***](https://www.opengl.org/sdk/docs/man2/xhtml/glRotate.xml)\n\n```cpp\nglm::mat4 glm::rotate(glm::mat4 const& m, float angle, glm::vec3 const& axis);\nglm::dmat4 glm::rotate(glm::dmat4 const& m, double angle, glm::dvec3 const& axis);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: &lt;glm/gtc/matrix\\_transform.hpp&gt;\n\n[***glScale{f, d}:***](http://www.opengl.org/sdk/docs/man2/xhtml/glScale.xml)\n\n```cpp\nglm::mat4 glm::scale(glm::mat4 const& m, glm::vec3 const& factors);\nglm::dmat4 glm::scale(glm::dmat4 const& m, glm::dvec3 const& factors);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: &lt;glm/gtc/matrix\\_transform.hpp&gt;\n\n[***glTranslate{f, d}:***](https://www.opengl.org/sdk/docs/man2/xhtml/glTranslate.xml)\n\n```cpp\nglm::mat4 glm::translate(glm::mat4 const& m, glm::vec3 const& translation);\nglm::dmat4 glm::translate(glm::dmat4 const& m, glm::dvec3 const& translation);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: &lt;glm/gtc/matrix\\_transform.hpp&gt;\n\n[***glLoadIdentity:***](https://www.opengl.org/sdk/docs/man2/xhtml/glLoadIdentity.xml)\n\n```cpp\nglm::mat4(1.0) or glm::mat4();\nglm::dmat4(1.0) or glm::dmat4();\n```\n\nFrom GLM core library: `<glm/glm.hpp>`\n\n[***glMultMatrix{f, d}:***](https://www.opengl.org/sdk/docs/man2/xhtml/glMultMatrix.xml)\n\n```cpp\nglm::mat4() * glm::mat4();\nglm::dmat4() * glm::dmat4();\n```\n\nFrom GLM core library: `<glm/glm.hpp>`\n\n[***glLoadTransposeMatrix{f, d}:***](https://www.opengl.org/sdk/docs/man2/xhtml/glLoadTransposeMatrix.xml)\n\n```cpp\nglm::transpose(glm::mat4());\nglm::transpose(glm::dmat4());\n```\n\nFrom GLM core library: `<glm/glm.hpp>`\n\n[***glMultTransposeMatrix{f, d}:***](https://www.opengl.org/sdk/docs/man2/xhtml/glMultTransposeMatrix.xml)\n\n```cpp\nglm::mat4() * glm::transpose(glm::mat4());\nglm::dmat4() * glm::transpose(glm::dmat4());\n```\n\nFrom GLM core library: `<glm/glm.hpp>`\n\n[***glFrustum:***](http://www.opengl.org/sdk/docs/man2/xhtml/glFrustum.xml)\n\n```cpp\nglm::mat4 glm::frustum(float left, float right, float bottom, float top, float zNear, float zFar);\nglm::dmat4 glm::frustum(double left, double right, double bottom, double top, double zNear, double zFar);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: `<glm/gtc/matrix_transform.hpp>`\n\n[***glOrtho:***](https://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml)\n\n```cpp\nglm::mat4 glm::ortho(float left, float right, float bottom, float top, float zNear, float zFar);\nglm::dmat4 glm::ortho(double left, double right, double bottom, double top, double zNear, double zFar);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: `<glm/gtc/matrix_transform.hpp>`\n\n### <a name=\"section5_2\"></a> 5.2. GLM replacements for GLU functions\n\n[***gluLookAt:***](https://www.opengl.org/sdk/docs/man2/xhtml/gluLookAt.xml)\n\n```cpp\nglm::mat4 glm::lookAt(glm::vec3 const& eye, glm::vec3 const& center, glm::vec3 const& up);\nglm::dmat4 glm::lookAt(glm::dvec3 const& eye, glm::dvec3 const& center, glm::dvec3 const& up);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: `<glm/gtc/matrix_transform.hpp>`\n\n[***gluOrtho2D:***](https://www.opengl.org/sdk/docs/man2/xhtml/gluOrtho2D.xml)\n\n```cpp\nglm::mat4 glm::ortho(float left, float right, float bottom, float top);\nglm::dmat4 glm::ortho(double left, double right, double bottom, double top);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: `<glm/gtc/matrix_transform.hpp>`\n\n[***gluPerspective:***](https://www.opengl.org/sdk/docs/man2/xhtml/gluPerspective.xml)\n\n```cpp\nglm::mat4 perspective(float fovy, float aspect, float zNear, float zFar);\nglm::dmat4 perspective(double fovy, double aspect, double zNear, double zFar);\n```\n\nNote that in GLM, fovy is expressed in radians, not degrees.\n\nFrom `GLM_GTC_matrix_transform` extension: `<glm/gtc/matrix_transform.hpp>`\n\n[***gluPickMatrix:***](https://www.opengl.org/sdk/docs/man2/xhtml/gluPickMatrix.xml)\n\n```cpp\nglm::mat4 pickMatrix(glm::vec2 const& center, glm::vec2 const& delta, glm::ivec4 const& viewport);\nglm::dmat4 pickMatrix(glm::dvec2 const& center, glm::dvec2 const& delta, glm::ivec4 const& viewport);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: `<glm/gtc/matrix_transform.hpp>`\n\n[***gluProject:***](http://www.opengl.org/sdk/docs/man2/xhtml/gluProject.xml)\n\n```cpp\nglm::vec3 project(glm::vec3 const& obj, glm::mat4 const& model, glm::mat4 const& proj, glm::ivec4 const& viewport);\nglm::dvec3 project(glm::dvec3 const& obj, glm::dmat4 const& model, glm::dmat4 const& proj, glm::ivec4 const& viewport);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: `<glm/gtc/matrix_transform.hpp>`\n\n[***gluUnProject:***](https://www.opengl.org/sdk/docs/man2/xhtml/gluUnProject.xml)\n\n```cpp\nglm::vec3 unProject(glm::vec3 const& win, glm::mat4 const& model, glm::mat4 const& proj, glm::ivec4 const& viewport);\nglm::dvec3 unProject(glm::dvec3 const& win, glm::dmat4 const& model, glm::dmat4 const& proj, glm::ivec4 const& viewport);\n```\n\nFrom `GLM_GTC_matrix_transform` extension: `<glm/gtc/matrix_transform.hpp>`\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section6\"></a> 6. Known issues\n\nThis section reports GLSL features that GLM can't accurately emulate due to language restrictions.\n\n### <a name=\"section6_1\"></a> 6.1. not function\n\nThe GLSL function 'not' is a keyword in C++. To prevent name collisions and ensure a consistent API, the name `not\\_` (note the underscore) is used instead.\n\n### <a name=\"section6_2\"></a> 6.2. Precision qualifiers support\n\nGLM supports GLSL precision qualifiers through prefixes instead of qualifiers. For example, GLM exposes \\verb|lowp_vec4|, \\verb|mediump_vec4| and \\verb|highp_vec4| as variations of \\verb|vec4|.\n\nSimilarly to GLSL, GLM precision qualifiers are used to trade precision of operations in term of [ULPs](http://en.wikipedia.org/wiki/Unit_in_the_last_place) for better performance. By default, all the types use high precision.\n\n```cpp\n// Using precision qualifier in GLSL:\n\nivec3 foo(in vec4 v)\n{\n    highp vec4 a = v;\n    mediump vec4 b = a;\n    lowp ivec3 c = ivec3(b);\n    return c;\n}\n\n// Using precision qualifier in GLM:\n\n#include <glm/glm.hpp>\n\nivec3 foo(const vec4 & v)\n{\n    highp_vec4 a = v;\n    medium_vec4 b = a;\n    lowp_ivec3 c = glm::ivec3(b);\n    return c;\n}\n```\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section7\"></a> 7. FAQ\n\n### <a name=\"section7_1\"></a> 7.1 Why GLM follows GLSL specification and conventions?\n\nFollowing GLSL conventions is a really strict policy of GLM. It has been designed following the idea that everyone does its own math library with his own conventions. The idea is that brilliant developers (the OpenGL ARB) worked together and agreed to make GLSL. Following GLSL conventions\nis a way to find consensus. Moreover, basically when a developer knows GLSL, he knows GLM.\n\n### <a name=\"section7_2\"></a> 7.2. Does GLM run GLSL program?\n\nNo, GLM is a C++ implementation of a subset of GLSL.\n\n### <a name=\"section7_3\"></a> 7.3. Does a GLSL compiler build GLM codes?\n\nNo, this is not what GLM attends to do.\n\n### <a name=\"section7_4\"></a> 7.4. Should I use ‘GTX’ extensions?\n\nGTX extensions are qualified to be experimental extensions. In GLM this means that these extensions might change from version to version without any restriction. In practice, it doesn’t really change except time to\ntime. GTC extensions are stabled, tested and perfectly reliable in time. Many GTX extensions extend GTC extensions and provide a way to explore features and implementations and APIs and then are promoted to GTC\nextensions. This is fairly the way OpenGL features are developed; through extensions.\n\nStating with GLM 0.9.9, to use experimental extensions, an application must define GLM_ENABLE_EXPERIMENTAL.\n\n### <a name=\"section7_5\"></a> 7.5. Where can I ask my questions?\n\nA good place is [stackoverflow](http://stackoverflow.com/search?q=GLM) using the GLM tag.\n\n### <a name=\"section7_6\"></a> 7.6. Where can I find the documentation of extensions?\n\nThe Doxygen generated documentation includes a complete list of all extensions available. Explore this [*API documentation*](http://glm.g-truc.net/html/index.html) to get a complete\nview of all GLM capabilities!\n\n### <a name=\"section7_7\"></a> 7.7. Should I use ‘using namespace glm;’?\n\nNO! Chances are that if using namespace glm; is called, especially in a header file, name collisions will happen as GLM is based on GLSL which uses common tokens for types and functions. Avoiding using namespace\nglm; will a higher compatibility with third party library and SDKs.\n\n### <a name=\"section7_8\"></a> 7.8. Is GLM fast?\n\nGLM is mainly designed to be convenient and that's why it is written against the GLSL specification.\n\nFollowing the Pareto principle where 20% of the code consumes 80% of the execution time, GLM operates perfectly on the 80% of the code that consumes 20% of the performances. Furthermore, thanks to the lowp,\nmediump and highp qualifiers, GLM provides approximations which trade precision for performance. Finally, GLM can automatically produce SIMD optimized code for functions of its implementation.\n\nHowever, on performance critical code paths, we should expect that dedicated algorithms should be written to reach peak performance.\n\n### <a name=\"section7_9\"></a> 7.9. When I build with Visual C++ with /W4 warning level, I have warnings...\n\nYou should not have any warnings even in `/W4` mode. However, if you expect such level for your code, then you should ask for the same level to the compiler by at least disabling the Visual C++ language extensions\n(`/Za`) which generates warnings when used. If these extensions are enabled, then GLM will take advantage of them and the compiler will generate warnings.\n\n### <a name=\"section7_10\"></a> 7.10. Why some GLM functions can crash because of division by zero?\n\nGLM functions crashing is the result of a domain error. Such behavior follows the precedent set by C and C++'s standard library. For example, it’s a domain error to pass a null vector (all zeroes) to glm::normalize function, or to pass a negative number into std::sqrt.\n\n### <a name=\"section7_11\"></a> 7.11. What unit for angles is used in GLM?\n\nGLSL is using radians but GLU is using degrees to express angles. This has caused GLM to use inconsistent units for angles. Starting with GLM 0.9.6, all GLM functions are using radians. For more information, follow\nthe [link](http://www.g-truc.net/post-0693.html#menu).\n\n### <a name=\"section7_12\"></a> 7.12. Windows headers cause build errors...\n\nSome Windows headers define min and max as macros which may cause compatibility with third party libraries such as GLM.\nIt is highly recommended to [`define NOMINMAX`](http://stackoverflow.com/questions/4913922/possible-problems-with-nominmax-on-visual-c) before including Windows headers to workaround this issue.\nTo workaround the incompatibility with these macros, GLM will systematically undef these macros if they are defined.\n\n### <a name=\"section7_13\"></a> 7.13. Constant expressions support\n\nGLM has some C++ [constant expressions](http://en.cppreference.com/w/cpp/language/constexpr) support. However, GLM automatically detects the use of SIMD instruction sets through compiler arguments to populate its implementation with SIMD intrinsics.\nUnfortunately, GCC and Clang doesn't support SIMD instrinsics as constant expressions. To allow constant expressions on all vectors and matrices types, define `GLM_FORCE_PURE` before including GLM headers.\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section8\"></a> 8. Code samples\n\nThis series of samples only shows various GLM features without consideration of any sort.\n\n### <a name=\"section8_1\"></a> 8.1. Compute a triangle normal\n\n```cpp\n#include <glm/glm.hpp> // vec3 normalize cross\n\nglm::vec3 computeNormal(glm::vec3 const& a, glm::vec3 const& b, glm::vec3 const& c)\n{\n    return glm::normalize(glm::cross(c - a, b - a));\n}\n\n// A much faster but less accurate alternative:\n#include <glm/glm.hpp> // vec3 cross\n#include <glm/gtx/fast_square_root.hpp> // fastNormalize\n\nglm::vec3 computeNormal(glm::vec3 const& a, glm::vec3 const& b, glm::vec3 const& c)\n{\n    return glm::fastNormalize(glm::cross(c - a, b - a));\n}\n```\n\n### <a name=\"section8_2\"></a> 8.2. Matrix transform\n\n```cpp\n#include <glm/glm.hpp> // vec3, vec4, ivec4, mat4\n#include <glm/gtc/matrix_transform.hpp> // translate, rotate, scale, perspective\n#include <glm/gtc/type_ptr.hpp> // value_ptr\n\nvoid setUniformMVP(GLuint Location, glm::vec3 const& Translate, glm::vec3 const& Rotate)\n{\n    glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.f);\n    glm::mat4 ViewTranslate = glm::translate(\n        glm::mat4(1.0f), Translate);\n    glm::mat4 ViewRotateX = glm::rotate(\n        ViewTranslate, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f));\n    glm::mat4 View = glm::rotate(ViewRotateX,\n        Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f));\n    glm::mat4 Model = glm::scale(\n        glm::mat4(1.0f), glm::vec3(0.5f));\n    glm::mat4 MVP = Projection * View * Model;\n    glUniformMatrix4fv(Location, 1, GL_FALSE, glm::value_ptr(MVP));\n}\n```\n\n### <a name=\"section8_3\"></a> 8.3. Vector types\n\n```cpp\n#include <glm/glm.hpp> // vec2\n#include <glm/gtc/type_precision.hpp> // hvec2, i8vec2, i32vec2\n\nstd::size_t const VertexCount = 4;\n\n// Float quad geometry\nstd::size_t const PositionSizeF32 = VertexCount * sizeof(glm::vec2);\nglm::vec2 const PositionDataF32[VertexCount] =\n{\n    glm::vec2(-1.0f,-1.0f),\n    glm::vec2( 1.0f,-1.0f),\n    glm::vec2( 1.0f, 1.0f),\n    glm::vec2(-1.0f, 1.0f)\n};\n\n// Half-float quad geometry\nstd::size_t const PositionSizeF16 = VertexCount * sizeof(glm::hvec2);\nglm::hvec2 const PositionDataF16[VertexCount] =\n{\n    glm::hvec2(-1.0f, -1.0f),\n    glm::hvec2( 1.0f, -1.0f),\n    glm::hvec2( 1.0f, 1.0f),\n    glm::hvec2(-1.0f, 1.0f)\n};\n\n// 8 bits signed integer quad geometry\nstd::size_t const PositionSizeI8 = VertexCount * sizeof(glm::i8vec2);\nglm::i8vec2 const PositionDataI8[VertexCount] =\n{\n    glm::i8vec2(-1,-1),\n    glm::i8vec2( 1,-1),\n    glm::i8vec2( 1, 1),\n    glm::i8vec2(-1, 1)\n};\n\n// 32 bits signed integer quad geometry\nstd::size_t const PositionSizeI32 = VertexCount * sizeof(glm::i32vec2);\nglm::i32vec2 const PositionDataI32[VertexCount] =\n{\n    glm::i32vec2(-1,-1),\n    glm::i32vec2( 1,-1),\n    glm::i32vec2( 1, 1),\n    glm::i32vec2(-1, 1)\n};\n```\n\n### <a name=\"section8_4\"></a> 8.4. Lighting\n\n```cpp\n#include <glm/glm.hpp> // vec3 normalize reflect dot pow\n#include <glm/gtc/random.hpp> // ballRand\n\n// vecRand3, generate a random and equiprobable normalized vec3\nglm::vec3 lighting(intersection const& Intersection, material const& Material, light const& Light, glm::vec3 const& View)\n{\n    glm::vec3 Color = glm::vec3(0.0f);\n    glm::vec3 LightVertor = glm::normalize(\n        Light.position() - Intersection.globalPosition() +\n        glm::ballRand(0.0f, Light.inaccuracy());\n\n    if(!shadow(Intersection.globalPosition(), Light.position(), LightVertor))\n    {\n        float Diffuse = glm::dot(Intersection.normal(), LightVector);\n        if(Diffuse &lt;= 0.0f)\n            return Color;\n\n        if(Material.isDiffuse())\n            Color += Light.color() * Material.diffuse() * Diffuse;\n\n        if(Material.isSpecular())\n        {\n            glm::vec3 Reflect = glm::reflect(-LightVector, Intersection.normal());\n            float Dot = glm::dot(Reflect, View);\n            float Base = Dot &gt; 0.0f ? Dot : 0.0f;\n            float Specular = glm::pow(Base, Material.exponent());\n            Color += Material.specular() \\* Specular;\n        }\n    }\n\n    return Color;\n}\n```\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section9\"></a> 9. Contributing to GLM\n\n### <a name=\"section9_1\"></a> 9.1. Submitting bug reports\n\nBug should be reported on Github using the [issue page](https://github.com/g-truc/glm/issues).\n\nA minimal code to reproduce the issue will help.\n\nAdditional, bugs can be configuration specific. We can report the configuration by defining `GLM_FORCE_MESSAGES` before including GLM headers then build and copy paste the build messages GLM will output.\n\n```cpp\n#define GLM_FORCE_MESSAGES\n#include <glm/glm.hpp>\n```\n\nAn example of build messages generated by GLM:\n\n```plaintext\nGLM: 0.9.9.1\nGLM: C++ 17 with extensions\nGLM: GCC compiler detected\"\nGLM: x86 64 bits with AVX instruction set build target\nGLM: Linux platform detected\nGLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled.\nGLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL.\nGLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes.\nGLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space.\nGLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system.\n```\n\n### <a name=\"section9_2\"></a> 9.2. Contributing to GLM with pull request\n\nThis tutorial will show us how to successfully contribute a bug-fix to GLM using GitHub's Pull Request workflow.\n\nWe will be typing git commands in the Terminal. Mac and Linux users may have git pre-installed. You can download git from [here](http://git-scm.com/downloads).\n\nThe tutorial assumes you have some basic understanding of git concepts - repositories, branches, commits, etc. Explaining it all from scratch is beyond the scope of this tutorial. Some good links to learn git basics are: [Link 1](http://git-scm.com/book/en/Getting-Started-Git-Basics), [Link 2](https://www.atlassian.com/git/tutorial/git-basics)\n\n#### Step 1: Setup our GLM Fork\n\nWe will make our changes in our own copy of the GLM sitory. On the GLM GitHub repo and we press the Fork button.\nWe need to download a copy of our fork to our local machine. In the terminal, type:\n\n```plaintext\n>>> git clone <our-repository-fork-git-url>\n```\n\nThis will clone our fork repository into the current folder.\n\nWe can find our repository git url on the Github reposotory page. The url looks like this: `https://github.com/<our-username>/<repository-name>.git`\n\n#### Step 2: Synchronizing our fork\n\nWe can use the following command to add `upstream` (original project repository) as a remote repository so that we can fetch the latest GLM commits into our branch and keep our forked copy is synchronized.\n\n```plaintext\n>>> git remote add upstream https://github.com/processing/processing.git\n```\n\nTo synchronize our fork to the latest commit in the GLM repository, we can use the following command:\n\n```plaintext\n>>> git fetch upstream\n```\n\nThen, we can merge the remote master branch to our current branch:\n\n```plaintext\n>>> git merge upstream/master\n```\n\nNow our local copy of our fork has been synchronized. However, the fork's copy is not updated on GitHub's servers yet. To do that, use:\n\n```plaintext\n>>> git push origin master\n```\n\n#### Step 3: Modifying our GLM Fork\n\nOur fork is now setup and we are ready to modify GLM to fix a bug.\n\nIt's a good practice to make changes in our fork in a separate branch than the master branch because we can submit only one pull request per branch.\n\nBefore creating a new branch, it's best to synchronize our fork and then create a new branch from the latest master branch.\n\nIf we are not on the master branch, we should switch to it using:\n\n```plaintext\n>>> git checkout master\n```\n\nTo create a new branch called `bugifx`, we use:\n\n```plaintext\ngit branch bugfix\n```\n\nOnce the code changes for the fix is done, we need to commit the changes:\n\n```plaintext\n>>> git commit -m \"Resolve the issue that caused problem with a specific fix #432\"\n```\n\nThe commit message should be as specific as possible and finished by the bug number in the [GLM GitHub issue page](https://github.com/g-truc/glm/issues)\n\nFinally, we need to push our changes in our branch to our GitHub fork using:\n\n```plaintext\n>>> git push origin bugfix\n```\n\nSome things to keep in mind for a pull request:\n\n* Keep it minimal: Try to make the minimum required changes to fix the issue. If we have added any debugging code, we should remove it.\n* A fix at a time: The pull request should deal with one issue at a time only, unless two issue are so interlinked they must be fixed together.\n* Write a test: GLM is largely unit tests. Unit tests are in `glm/test` directory. We should also add tests for the fixes we provide to ensure future regression doesn't happen.\n* No whitespace changes: Avoid unnecessary formatting or whitespace changes in other parts of the code. Be careful with auto-format options in the code editor which can cause wide scale formatting changes.\n* Follow [GLM Code Style](#section9_3) for consistency.\n* Tests passes: Make sure GLM build and tests don't fail because of the changes.\n\n#### Step 4: Submitting a Pull Request\n\nWe need to submit a pull request from the `bugfix` branch to GLM's master branch.\n\nOn the fork github page, we can click on the *Pull Request* button. Then we can describe our pull request. Finally we press *Send Pull Request*.\n\nPlease be patient and give them some time to go through it.\n\nThe pull request review may suggest additional changes. So we can make those changes in our branch, and push those changes to our fork repository. Our pull request will always include the latest changes in our branch on GitHub, so we don't need to resubmit the pull request.\n\nOnce your changes have been accepted, a project maintainer will merge our pull request.\n\nWe are grateful to the users for their time and effort in contributing fixes.\n\n### <a name=\"section9_3\"></a> 9.3. Coding style\n\n#### Indentation\n\nAlways tabs. Never spaces.\n\n#### Spacing\n\nNo space after if. Use if(blah) not if (blah). Example if/else block:\n\n```cpp\nif(blah)\n{\n    // yes like this\n}\nelse\n{\n    // something besides\n}\n```\n\nSingle line if blocks:\n\n```cpp\nif(blah)\n    // yes like this\nelse\n    // something besides\n```\n\nNo spaces inside parens:\n\n```cpp\nif (blah)    // No\nif( blah )   // No\nif ( blah )  // No\nif(blah)     // Yes\n```\n\nUse spaces before/after commas:\n\n```cpp\nsomeFunction(apple,bear,cat);     // No\nsomeFunction(apple, bear, cat);   // Yes\n```\n\nUse spaces before/after use of `+, -, *, /, %, >>, <<, |, &, ^, ||, &&` operators:\n\n```cpp\nvec4 v = a + b;\n```\n\n#### Blank lines\n\nOne blank line after the function blocks.\n\n#### Comments\n\nAlways one space after the // in single line comments\n\nOne space before // at the end of a line (that has code as well)\n\nTry to use // comments inside functions, to make it easier to remove a whole block via /\\* \\*/\n\n#### Cases\n\n```cpp\n#define GLM_MY_DEFINE 76\n\nclass myClass\n{};\n\nmyClass const MyClass;\n\nnamespace glm{ // glm namespace is for public code\nnamespace detail // glm::detail namespace is for implementation detail\n{\n    float myFunction(vec2 const& V)\n    {\n        return V.x + V.y;\n    }\n\n    float myFunction(vec2 const* const V)\n    {\n        return V->x + V->y;\n    }\n}//namespace detail\n}//namespace glm\n```\n\n---\n<div style=\"page-break-after: always;\"> </div>\n\n## <a name=\"section10\"></a> 10. References\n\n### <a name=\"section10_1\"></a> 10.1. OpenGL specifications\n\n* OpenGL 4.3 core specification\n* [GLSL 4.30 specification](http://www.opengl.org/registry/doc/GLSLangSpec.4.30.7.diff.pdf)\n![](media/image21.png){width=\"2.859722222222222in\" height=\"1.6083333333333334in\"}- [*GLU 1.3 specification*](http://www.opengl.org/documentation/specs/glu/glu1_3.pdf)\n\n### <a name=\"section10_2\"></a> 10.2. External links\n\n* [GLM on stackoverflow](http://stackoverflow.com/search?q=GLM)\n\n### <a name=\"section10_3\"></a> 10.3. Projects using GLM\n\n***[Leo’s Fortune](http://www.leosfortune.com/)***\n\nLeo’s Fortune is a platform adventure game where you hunt down the cunning and mysterious thief that stole your gold. Available on PS4, Xbox One, PC, Mac, iOS and Android.\n\nBeautifully hand-crafted levels bring the story of Leo to life in this epic adventure.\n\n“I just returned home to find all my gold has been stolen! For some devious purpose, the thief has dropped pieces of my gold like breadcrumbs through the woods.”\n\n“Despite this pickle of a trap, I am left with no choice but to follow the trail.”\n\n“Whatever lies ahead, I must recover my fortune.” -Leopold\n\n![](./doc/manual/references-leosfortune.jpeg)\n\n![](./doc/manual/references-leosfortune2.jpg)\n\n[***OpenGL 4.0 Shading Language Cookbook***](http://www.packtpub.com/opengl-4-0-shading-language-cookbook/book?tag=rk/opengl4-abr1/0811)\n\nA set of recipes that demonstrates a wide of techniques for producing high-quality, real-time 3D graphics with GLSL 4.0, such as:\n\n* Using GLSL 4.0 to implement lighting and shading techniques.\n* Using the new features of GLSL 4.0 including tessellation and geometry shaders.\n* Using textures in GLSL as part of a wide variety of techniques from basic texture mapping to deferred shading.\n\nSimple, easy-to-follow examples with GLSL source code are provided, as well as a basic description of the theory behind each technique.\n\n![](./doc/manual/references-glsl4book.jpg)\n\n[***Outerra***](http://outerra.com/)\n\nA 3D planetary engine for seamless planet rendering from space down to the surface. Can use arbitrary resolution of elevation data, refining it to centimetre resolution using fractal algorithms.\n\n![](./doc/manual/references-outerra1.jpg)\n\n![](./doc/manual/references-outerra2.jpg)\n\n![](./doc/manual/references-outerra3.jpg)\n\n![](./doc/manual/references-outerra4.jpg)\n\n[***Falcor***](https://github.com/NVIDIA/Falcor)\n\nReal-time rendering research framework by NVIDIA.\n\n[***Cinder***](https://libcinder.org/)\n\nCinder is a free and open source library for professional-quality creative coding in C++.\n\nCinder is a C++ library for programming with aesthetic intent - the sort of development often called creative coding. This includes domains like graphics, audio, video, and computational geometry. Cinder is cross-platform, with official support for OS X, Windows, iOS, and WinRT.\n\nCinder is production-proven, powerful enough to be the primary tool for professionals, but still suitable for learning and experimentation. Cinder is released under the [2-Clause BSD License](http://opensource.org/licenses/BSD-2-Clause).\n\n![](./doc/manual/references-cinder.png)\n\n[***opencloth***](https://github.com/mmmovania/opencloth/)\n\nA collection of source codes implementing cloth simulation algorithms in OpenGL.\n\nSimple, easy-to-follow examples with GLSL source code, as well as a basic description of the theory behind each technique.\n\n![](./doc/manual/references-opencloth1.png)\n\n![](./doc/manual/references-opencloth3.png)\n\n[***LibreOffice***](https://www.libreoffice.org/)\n\nLibreOffice includes several applications that make it the most powerful Free and Open Source office suite on the market.\n\n[***Are you using GLM in a project?***](mailto:glm@g-truc.net)\n\n### <a name=\"section10_4\"></a> 10.4. Tutorials using GLM\n\n* [Sascha Willems' Vulkan examples](https://github.com/SaschaWillems/Vulkan), Examples and demos for the new Vulkan API\n* [VKTS](https://github.com/McNopper/Vulkan) Vulkan examples using VulKan ToolS (VKTS)\n* [*The OpenGL Samples Pack*](http://www.g-truc.net/project-0026.html#menu), samples that show how to set up all the different new features\n* [*Learning Modern 3D Graphics programming*](http://www.arcsynthesis.org/gltut/), a great OpenGL tutorial using GLM by Jason L. McKesson\n* [*Morten Nobel-Jørgensen’s*](http://blog.nobel-joergensen.com/2011/04/02/glm-brilliant-math-library-for-opengl/) review and use an [*OpenGL renderer*](https://github.com/mortennobel/RenderE)\n* [*Swiftless’ OpenGL tutorial*](http://www.swiftless.com/opengltuts.html) using GLM by Donald Urquhart\n* [*Rastergrid*](http://rastergrid.com/blog/), many technical articles with companion programs using GLM by Daniel Rákos\\\n* [*OpenGL Tutorial*](http://www.opengl-tutorial.org), tutorials for OpenGL 3.1 and later\n* [*OpenGL Programming on Wikibooks*](http://en.wikibooks.org/wiki/OpenGL_Programming): For beginners who are discovering OpenGL.\n* [*3D Game Engine Programming*](http://3dgep.com/): Learning the latest 3D Game Engine Programming techniques.\n* [Game Tutorials](http://www.gametutorials.com/opengl-4-matrices-and-glm/), graphics and game programming.\n* [open.gl](https://open.gl/), OpenGL tutorial\n* [c-jump](http://www.c-jump.com/bcc/common/Talk3/Math/GLM/GLM.html), GLM tutorial\n* [Learn OpenGL](http://learnopengl.com/), OpenGL tutorial\n* [***Are you using GLM in a tutorial?***](mailto:glm@g-truc.net)\n\n### <a name=\"section10_5\"></a> 10.5. Equivalent for other languages\n\n* [*cglm*](https://github.com/recp/cglm): OpenGL Mathematics (glm) for C.\n* [*GlmSharp*](https://github.com/Philip-Trettner/GlmSharp): Open-source semi-generated GLM-flavored math library for .NET/C\\#.\n* [glm-js](https://github.com/humbletim/glm-js): JavaScript adaptation of the OpenGL Mathematics (GLM) C++ library interfaces\n* [JVM OpenGL Mathematics (GLM)](https://github.com/kotlin-graphics/glm): written in Kotlin, Java compatible\n* [JGLM](https://github.com/jroyalty/jglm) - Java OpenGL Mathematics Library\n* [SwiftGL Math Library](https://github.com/SwiftGL/Math/blob/master/Sources/glm.swift) GLM for Swift\n* [glm-go](https://github.com/jbowtie/glm-go): Simple linear algebra library similar in spirit to GLM\n* [openll](https://github.com/Polkm/openll): Lua bindings for OpenGL, GLM, GLFW, OpenAL, SOIL and PhysicsFS\n* [glm-rs](https://github.com/dche/glm-rs): GLSL mathematics for Rust programming language\n* [glmpython](https://github.com/Queatz/glmpython): GLM math library for Python\n\n### <a name=\"section10_6\"></a> 10.6. Alternatives to GLM\n\n* [*CML*](http://cmldev.net/): The CML (Configurable Math Library) is a free C++ math library for games and graphics.\n* [*Eigen*](http://eigen.tuxfamily.org/): A more heavy weight math library for general linear algebra in C++.\n* [*glhlib*](http://glhlib.sourceforge.net/): A much more than glu C library.\n* Are you using or developing an alternative library to GLM?\n\n### <a name=\"section10_7\"></a> 10.7. Acknowledgements\n\nGLM is developed and maintained by [*Christophe Riccio*](http://www.g-truc.net) but many contributors have made this project what it is.\n\nSpecial thanks to:\n\n* Ashima Arts and Stefan Gustavson for their work on [*webgl-noise*](https://github.com/ashima/webgl-noise) which has been used for GLM noises implementation.\n* [*Arthur Winters*](http://athile.net/library/wiki/index.php?title=Athile_Technologies) for the C++11 and Visual C++ swizzle operators implementation and tests.\n* Joshua Smith and Christoph Schied for the discussions and the experiments around the swizzle operators implementation issues.\n* Guillaume Chevallereau for providing and maintaining the [*nightlight build system*](http://my.cdash.org/index.php?project=GLM).\n* Ghenadii Ursachi for GLM\\_GTX\\_matrix\\_interpolation implementation.\n* Mathieu Roumillac for providing some implementation ideas.\n* [*Grant James*](http://www.zeuscmd.com/) for the implementation of all combination of none-squared matrix products.\n* Jesse Talavera-Greenberg for his work on the manual amount other things.\n* All the GLM users that have report bugs and hence help GLM to become a great library!\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/readme.md",
    "content": "![glm](/doc/manual/logo-mini.png)\n\n[OpenGL Mathematics](http://glm.g-truc.net/) (*GLM*) is a header only C++ mathematics library for graphics software based on the [OpenGL Shading Language (GLSL) specifications](https://www.opengl.org/registry/doc/GLSLangSpec.4.50.diff.pdf).\n\n*GLM* provides classes and functions designed and implemented with the same naming conventions and functionality than *GLSL* so that anyone who knows *GLSL*, can use *GLM* as well in C++.\n\nThis project isn't limited to *GLSL* features. An extension system, based on the *GLSL* extension conventions, provides extended capabilities: matrix transformations, quaternions, data packing, random numbers, noise, etc...\n\nThis library works perfectly with *[OpenGL](https://www.opengl.org)* but it also ensures interoperability with other third party libraries and SDK. It is a good candidate for software rendering (raytracing / rasterisation), image processing, physics simulations and any development context that requires a simple and convenient mathematics library.\n\n*GLM* is written in C++98 but can take advantage of C++11 when supported by the compiler. It is a platform independent library with no dependence and it officially supports the following compilers:\n- [*GCC*](http://gcc.gnu.org/) 4.7 and higher\n- [*Intel C++ Compose*](https://software.intel.com/en-us/intel-compilers) XE 2013 and higher\n- [*Clang*](http://llvm.org/) 3.4 and higher\n- [*Apple Clang 6.0*](https://developer.apple.com/library/mac/documentation/CompilerTools/Conceptual/LLVMCompilerOverview/index.html) and higher\n- [*Visual C++*](http://www.visualstudio.com/) 2013 and higher\n- [*CUDA*](https://developer.nvidia.com/about-cuda) 9.0 and higher (experimental)\n- [*SYCL*](https://www.khronos.org/sycl/) (experimental: only [ComputeCpp](https://codeplay.com/products/computesuite/computecpp) implementation has been tested).\n- Any C++11 compiler\n\nFor more information about *GLM*, please have a look at the [manual](manual.md) and the [API reference documentation](http://glm.g-truc.net/0.9.8/api/index.html).\nThe source code and the documentation are licensed under either the [Happy Bunny License (Modified MIT) or the MIT License](manual.md#section0).\n\nThanks for contributing to the project by [submitting pull requests](https://github.com/g-truc/glm/pulls).\n\n```cpp\n#include <glm/vec3.hpp> // glm::vec3\n#include <glm/vec4.hpp> // glm::vec4\n#include <glm/mat4x4.hpp> // glm::mat4\n#include <glm/ext/matrix_transform.hpp> // glm::translate, glm::rotate, glm::scale\n#include <glm/ext/matrix_clip_space.hpp> // glm::perspective\n#include <glm/ext/scalar_constants.hpp> // glm::pi\n\nglm::mat4 camera(float Translate, glm::vec2 const& Rotate)\n{\n\tglm::mat4 Projection = glm::perspective(glm::pi<float>() * 0.25f, 4.0f / 3.0f, 0.1f, 100.f);\n\tglm::mat4 View = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -Translate));\n\tView = glm::rotate(View, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f));\n\tView = glm::rotate(View, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f));\n\tglm::mat4 Model = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));\n\treturn Projection * View * Model;\n}\n```\n\n## [Lastest release](https://github.com/g-truc/glm/releases/latest)\n\n## Project Health\n\n| Service | System | Compiler | Status |\n| ------- | ------ | -------- | ------ |\n| [Travis CI](https://travis-ci.org/g-truc/glm)| MacOSX, Linux 64 bits | Clang 3.6, Clang 5.0, GCC 4.9, GCC 7.3 | [![Travis CI](https://travis-ci.org/g-truc/glm.svg?branch=master)](https://travis-ci.org/g-truc/glm)\n| [AppVeyor](https://ci.appveyor.com/project/Groovounet/glm)| Windows 32 and 64 | Visual Studio 2013, Visual Studio 2015, Visual Studio 2017 | [![AppVeyor](https://ci.appveyor.com/api/projects/status/32r7s2skrgm9ubva?svg=true)](https://ci.appveyor.com/project/Groovounet/glm)\n\n## Release notes\n\n### [GLM 0.9.9.9](https://github.com/g-truc/glm/releases/tag/0.9.9.9) - 2020-XX-XX\n#### Features:\n- Added *GLM_EXT_scalar_reciprocal* with tests\n- Added *GLM_EXT_vector_reciprocal* with tests\n- Added `glm::iround` and `glm::uround` to *GLM_EXT_scalar_common* and *GLM_EXT_vector_common*\n- Added *GLM_EXT_matrix_integer* with tests\n\n#### Improvements:\n- Added `constexpr` qualifier for `cross` product #1040\n- Added `constexpr` qualifier for `dot` product #1040\n\n#### Fixes:\n- Fixed incorrect assertion for `glm::min` and `glm::max` #1009\n- Fixed quaternion orientation in `glm::decompose` #1012\n- Fixed singularity in quaternion to euler angle roll conversion #1019\n- Fixed `quat` `glm::pow` handling of small magnitude quaternions #1022\n- Fixed `glm::fastNormalize` build error #1033\n- Fixed `glm::isMultiple` build error #1034\n- Fixed `glm::adjugate` calculation #1035\n- Fixed `glm::angle` discards the sign of result for angles in range (2*pi-1, 2*pi) #1038\n- Removed ban on using `glm::string_cast` with *CUDA* host code #1041\n\n### [GLM 0.9.9.8](https://github.com/g-truc/glm/releases/tag/0.9.9.8) - 2020-04-13\n#### Features:\n- Added *GLM_EXT_vector_intX* and *GLM_EXT_vector_uintX* extensions\n- Added *GLM_EXT_matrix_intX* and *GLM_EXT_matrix_uintX* extensions\n\n#### Improvements:\n- Added `glm::clamp`, `glm::repeat`, `glm::mirrorClamp` and `glm::mirrorRepeat` function to `GLM_EXT_scalar_commond` and `GLM_EXT_vector_commond` extensions with tests\n\n#### Fixes:\n- Fixed unnecessary warnings from `matrix_projection.inl` #995\n- Fixed quaternion `glm::slerp` overload which interpolates with extra spins #996\n- Fixed for `glm::length` using arch64 #992\n- Fixed singularity check for `glm::quatLookAt` #770\n\n### [GLM 0.9.9.7](https://github.com/g-truc/glm/releases/tag/0.9.9.7) - 2020-01-05\n#### Improvements:\n- Improved *Neon* support with more functions optimized #950\n- Added *CMake* *GLM* interface #963\n- Added `glm::fma` implementation based on `std::fma` #969\n- Added missing quat constexpr #955\n- Added `GLM_FORCE_QUAT_DATA_WXYZ` to store quat data as w,x,y,z instead of x,y,z,w #983\n\n#### Fixes:\n- Fixed equal *ULP* variation when using negative sign #965\n- Fixed for intersection ray/plane and added related tests #953\n- Fixed ARM 64bit detection #949\n- Fixed *GLM_EXT_matrix_clip_space* warnings #980\n- Fixed Wimplicit-int-float-conversion warnings with clang 10+ #986\n- Fixed *GLM_EXT_matrix_clip_space* `perspectiveFov`\n\n### [GLM 0.9.9.6](https://github.com/g-truc/glm/releases/tag/0.9.9.6) - 2019-09-08\n#### Features:\n- Added *Neon* support #945\n- Added *SYCL* support #914\n- Added *GLM_EXT_scalar_integer* extension with power of two and multiple scalar functions\n- Added *GLM_EXT_vector_integer* extension with power of two and multiple vector functions\n\n#### Improvements:\n- Added *Visual C++ 2019* detection\n- Added *Visual C++ 2017* 15.8 and 15.9 detection\n- Added missing genType check for `glm::bitCount` and `glm::bitfieldReverse` #893\n\n#### Fixes:\n- Fixed for g++6 where -std=c++1z sets __cplusplus to 201500 instead of 201402 #921\n- Fixed hash hashes qua instead of tquat #919\n- Fixed `.natvis` as structs renamed #915\n- Fixed `glm::ldexp` and `glm::frexp` declaration #895\n- Fixed missing const to quaternion conversion operators #890\n- Fixed *GLM_EXT_scalar_ulp* and *GLM_EXT_vector_ulp* API coding style\n- Fixed quaternion componant order: `w, {x, y, z}` #916\n- Fixed `GLM_HAS_CXX11_STL` broken on Clang with Linux #926\n- Fixed *Clang* or *GCC* build due to wrong `GLM_HAS_IF_CONSTEXPR` definition #907\n- Fixed *CUDA* 9 build #910\n\n#### Deprecation:\n - Removed CMake install and uninstall scripts\n\n### [GLM 0.9.9.5](https://github.com/g-truc/glm/releases/tag/0.9.9.5) - 2019-04-01\n#### Fixes:\n- Fixed build errors when defining `GLM_ENABLE_EXPERIMENTAL` #884 #883\n- Fixed `if constexpr` warning #887\n- Fixed missing declarations for `glm::frexp` and `glm::ldexp` #886\n\n### [GLM 0.9.9.4](https://github.com/g-truc/glm/releases/tag/0.9.9.4) - 2019-03-19\n#### Features:\n- Added `glm::mix` implementation for matrices in *GLM_EXT_matrix_common/ #842\n- Added *CMake* `BUILD_SHARED_LIBS` and `BUILD_STATIC_LIBS` build options #871\n\n#### Improvements:\n- Added GLM_FORCE_INTRINSICS to enable SIMD instruction code path. By default, it's disabled allowing constexpr support by default. #865\n- Optimized inverseTransform #867\n\n#### Fixes:\n- Fixed in `glm::mat4x3` conversion #829\n- Fixed `constexpr` issue on GCC #832 #865\n- Fixed `glm::mix` implementation to improve GLSL conformance #866\n- Fixed `glm::int8` being defined as unsigned char with some compiler #839\n- Fixed `glm::vec1` include #856\n- Ignore `.vscode` #848\n\n### [GLM 0.9.9.3](https://github.com/g-truc/glm/releases/tag/0.9.9.3) - 2018-10-31\n#### Features:\n- Added `glm::equal` and `glm::notEqual` overload with max ULPs parameters for scalar numbers #121\n- Added `GLM_FORCE_SILENT_WARNINGS` to silent *GLM* warnings when using language extensions but using W4 or Wpedantic warnings #814 #775\n- Added adjugate functions to `GLM_GTX_matrix_operation` #151\n- Added `GLM_FORCE_ALIGNED_GENTYPES` to enable aligned types and SIMD instruction are not enabled. This disable `constexpr` #816\n\n#### Improvements:\n- Added constant time ULP distance between float #121\n- Added `GLM_FORCE_SILENT_WARNINGS` to suppress *GLM* warnings #822\n\n#### Fixes:\n- Fixed `glm::simplex` noise build with double #734\n- Fixed `glm::bitfieldInsert` according to GLSL spec #818\n- Fixed `glm::refract` for negative 'k' #808\n\n### [GLM 0.9.9.2](https://github.com/g-truc/glm/releases/tag/0.9.9.2) - 2018-09-14\n#### Fixes:\n- Fixed `GLM_FORCE_CXX**` section in the manual\n- Fixed default initialization with vector and quaternion types using `GLM_FORCE_CTOR_INIT` #812\n\n### [GLM 0.9.9.1](https://github.com/g-truc/glm/releases/tag/0.9.9.1) - 2018-09-03\n#### Features:\n- Added `bitfieldDeinterleave` to *GLM_GTC_bitfield*\n- Added missing `glm::equal` and `glm::notEqual` with epsilon for quaternion types to *GLM_GTC_quaternion*\n- Added *GLM_EXT_matrix_relational*: `glm::equal` and `glm::notEqual` with epsilon for matrix types\n- Added missing aligned matrix types to *GLM_GTC_type_aligned*\n- Added C++17 detection\n- Added *Visual C++* language standard version detection\n- Added PDF manual build from markdown\n\n#### Improvements:\n- Added a section to the manual for contributing to *GLM*\n- Refactor manual, lists all configuration defines\n- Added missing `glm::vec1` based constructors\n- Redesigned constexpr support which excludes both SIMD and `constexpr` #783\n- Added detection of *Visual C++ 2017* toolsets\n- Added identity functions #765\n- Splitted headers into EXT extensions to improve compilation time #670\n- Added separated performance tests\n- Clarified refract valid range of the indices of refraction, between -1 and 1 inclusively #806\n\n#### Fixes:\n- Fixed SIMD detection on *Clang* and *GCC*\n- Fixed build problems due to `std::printf` and `std::clock_t` #778\n- Fixed int mod\n- Anonymous unions require C++ language extensions\n- Fixed `glm::ortho` #790\n- Fixed *Visual C++* 2013 warnings in vector relational code #782\n- Fixed *ICC* build errors with constexpr #704\n- Fixed defaulted operator= and constructors #791\n- Fixed invalid conversion from int scalar with vec4 constructor when using SSE instruction\n- Fixed infinite loop in random functions when using negative radius values using an assert #739\n\n### [GLM 0.9.9.0](https://github.com/g-truc/glm/releases/tag/0.9.9.0) - 2018-05-22\n#### Features:\n- Added *RGBM* encoding in *GLM_GTC_packing* #420\n- Added *GLM_GTX_color_encoding* extension\n- Added *GLM_GTX_vec_swizzle*, faster compile time swizzling then swizzle operator #558\n- Added *GLM_GTX_exterior_product* with a `vec2` `glm::cross` implementation #621\n- Added *GLM_GTX_matrix_factorisation* to factor matrices in various forms #654\n- Added [`GLM_ENABLE_EXPERIMENTAL`](manual.md#section7_4) to enable experimental features.\n- Added packing functions for integer vectors #639\n- Added conan packaging configuration #643 #641\n- Added `glm::quatLookAt` to *GLM_GTX_quaternion* #659\n- Added `glm::fmin`, `glm::fmax` and `glm::fclamp` to *GLM_GTX_extended_min_max* #372\n- Added *GLM_EXT_vector_relational*: extend `glm::equal` and `glm::notEqual` to take an epsilon argument\n- Added *GLM_EXT_vector_relational*: `glm::openBounded` and `glm::closeBounded`\n- Added *GLM_EXT_vec1*: `*vec1` types\n- Added *GLM_GTX_texture*: `levels` function\n- Added spearate functions to use both nagative one and zero near clip plans #680\n- Added `GLM_FORCE_SINGLE_ONLY` to use *GLM* on platforms that don't support double #627\n- Added *GLM_GTX_easing* for interpolation functions #761\n\n#### Improvements:\n- No more default initialization of vector, matrix and quaternion types\n- Added lowp variant of GTC_color_space convertLinearToSRGB #419\n- Replaced the manual by a markdown version #458\n- Improved API documentation #668\n- Optimized GTC_packing implementation\n- Optimized GTC_noise functions\n- Optimized GTC_color_space HSV to RGB conversions\n- Optimised GTX_color_space_YCoCg YCoCgR conversions\n- Optimized GTX_matrix_interpolation axisAngle function\n- Added FAQ 12: Windows headers cause build errors... #557\n- Removed GCC shadow warnings #595\n- Added error for including of different versions of GLM #619\n- Added GLM_FORCE_IGNORE_VERSION to ignore error caused by including different version of GLM #619\n- Reduced warnings when using very strict compilation flags #646\n- length() member functions are constexpr #657\n- Added support of -Weverything with Clang #646\n- Improved exponential function test coverage\n- Enabled warnings as error with Clang unit tests\n- Conan package is an external repository: https://github.com/bincrafters/conan-glm\n- Clarify quat_cast documentation, applying on pure rotation matrices #759\n\n#### Fixes:\n- Removed doxygen references to *GLM_GTC_half_float* which was removed in 0.9.4\n- Fixed `glm::decompose` #448\n- Fixed `glm::intersectRayTriangle` #6\n- Fixed dual quaternion != operator #629\n- Fixed usused variable warning in *GLM_GTX_spline* #618\n- Fixed references to `GLM_FORCE_RADIANS` which was removed #642\n- Fixed `glm::fastInverseSqrt` to use fast inverse square #640\n- Fixed `glm::axisAngle` NaN #638\n- Fixed integer pow from *GLM_GTX_integer* with null exponent #658\n- Fixed `quat` `normalize` build error #656\n- Fixed *Visual C++ 2017.2* warning regarding `__has_feature` definision #655\n- Fixed documentation warnings\n- Fixed `GLM_HAS_OPENMP` when *OpenMP* is not enabled\n- Fixed Better follow GLSL `min` and `max` specification #372\n- Fixed quaternion constructor from two vectors special cases #469\n- Fixed `glm::to_string` on quaternions wrong components order #681\n- Fixed `glm::acsch` #698\n- Fixed `glm::isnan` on *CUDA* #727\n\n#### Deprecation:\n- Requires *Visual Studio 2013*, *GCC 4.7*, *Clang 3.4*, *Cuda 7*, *ICC 2013* or a C++11 compiler\n- Removed *GLM_GTX_simd_vec4* extension\n- Removed *GLM_GTX_simd_mat4* extension\n- Removed *GLM_GTX_simd_quat* extension\n- Removed `GLM_SWIZZLE`, use `GLM_FORCE_SWIZZLE` instead\n- Removed `GLM_MESSAGES`, use `GLM_FORCE_MESSAGES` instead\n- Removed `GLM_DEPTH_ZERO_TO_ONE`, use `GLM_FORCE_DEPTH_ZERO_TO_ONE` instead\n- Removed `GLM_LEFT_HANDED`, use `GLM_FORCE_LEFT_HANDED` instead\n- Removed `GLM_FORCE_NO_CTOR_INIT`\n- Removed `glm::uninitialize`\n\n---\n### [GLM 0.9.8.5](https://github.com/g-truc/glm/releases/tag/0.9.8.5) - 2017-08-16\n#### Features:\n- Added *Conan* package support #647\n\n#### Fixes:\n- Fixed *Clang* version detection from source #608\n- Fixed `glm::packF3x9_E1x5` exponent packing #614\n- Fixed build error `min` and `max` specializations with integer #616\n- Fixed `simd_mat4` build error #652\n\n---\n### [GLM 0.9.8.4](https://github.com/g-truc/glm/releases/tag/0.9.8.4) - 2017-01-22\n#### Fixes:\n- Fixed *GLM_GTC_packing* test failing on *GCC* x86 due to denorms #212 #577\n- Fixed `POPCNT` optimization build in *Clang* #512\n- Fixed `glm::intersectRayPlane` returns true in parallel case #578\n- Fixed *GCC* 6.2 compiler warnings #580\n- Fixed *GLM_GTX_matrix_decompose* `glm::decompose` #582 #448\n- Fixed *GCC* 4.5 and older build #566\n- Fixed *Visual C++* internal error when declaring a global vec type with siwzzle expression enabled #594\n- Fixed `GLM_FORCE_CXX11` with Clang and libstlc++ which wasn't using C++11 STL features. #604\n\n---\n### [GLM 0.9.8.3](https://github.com/g-truc/glm/releases/tag/0.9.8.3) - 2016-11-12\n#### Improvements:\n- Broader support of `GLM_FORCE_UNRESTRICTED_GENTYPE` #378\n\n#### Fixes:\n- Fixed Android build error with C++11 compiler but C++98 STL #284 #564\n- Fixed *GLM_GTX_transform2* shear* functions #403\n- Fixed interaction between `GLM_FORCE_UNRESTRICTED_GENTYPE` and `glm::ortho` function #568\n- Fixed `glm::bitCount` with AVX on 32 bit builds #567\n- Fixed *CMake* `find_package` with version specification #572 #573\n\n---\n### [GLM 0.9.8.2](https://github.com/g-truc/glm/releases/tag/0.9.8.2) - 2016-11-01\n#### Improvements:\n- Added *Visual C++* 15 detection\n- Added *Clang* 4.0 detection\n- Added warning messages when using `GLM_FORCE_CXX**` but the compiler\n  is known to not fully support the requested C++ version #555\n- Refactored `GLM_COMPILER_VC` values\n- Made quat, vec, mat type component `length()` static #565\n\n#### Fixes:\n- Fixed *Visual C++* `constexpr` build error #555, #556\n\n---\n### [GLM 0.9.8.1](https://github.com/g-truc/glm/releases/tag/0.9.8.1) - 2016-09-25\n#### Improvements:\n- Optimized quaternion `glm::log` function #554\n\n#### Fixes:\n- Fixed *GCC* warning filtering, replaced -pedantic by -Wpedantic\n- Fixed SIMD faceforward bug. #549\n- Fixed *GCC* 4.8 with C++11 compilation option #550\n- Fixed *Visual Studio* aligned type W4 warning #548\n- Fixed packing/unpacking function fixed for 5_6_5 and 5_5_5_1 #552\n\n---\n### [GLM 0.9.8.0](https://github.com/g-truc/glm/releases/tag/0.9.8.0) - 2016-09-11\n#### Features:\n- Added right and left handed projection and clip control support #447 #415 #119\n- Added `glm::compNormalize` and `glm::compScale` functions to *GLM_GTX_component_wise*\n- Added `glm::packF3x9_E1x5` and `glm::unpackF3x9_E1x5` to *GLM_GTC_packing* for RGB9E5 #416\n- Added `(un)packHalf` to *GLM_GTC_packing*\n- Added `(un)packUnorm` and `(un)packSnorm` to *GLM_GTC_packing*\n- Added 16bit pack and unpack to *GLM_GTC_packing*\n- Added 8bit pack and unpack to *GLM_GTC_packing*\n- Added missing `bvec*` && and || operators\n- Added `glm::iround` and `glm::uround` to *GLM_GTC_integer*, fast round on positive values\n- Added raw SIMD API\n- Added 'aligned' qualifiers\n- Added *GLM_GTC_type_aligned* with aligned *vec* types\n- Added *GLM_GTC_functions* extension\n- Added quaternion version of `glm::isnan` and `glm::isinf` #521\n- Added `glm::lowestBitValue` to *GLM_GTX_bit* #536\n- Added `GLM_FORCE_UNRESTRICTED_GENTYPE` allowing non basic `genType` #543\n\n#### Improvements:\n- Improved SIMD and swizzle operators interactions with *GCC* and *Clang* #474\n- Improved *GLM_GTC_random* `linearRand` documentation\n- Improved *GLM_GTC_reciprocal* documentation\n- Improved `GLM_FORCE_EXPLICIT_CTOR` coverage #481\n- Improved *OpenMP* support detection for *Clang*, *GCC*, *ICC* and *VC*\n- Improved *GLM_GTX_wrap* for SIMD friendliness\n- Added `constexpr` for `*vec*`, `*mat*`, `*quat*` and `*dual_quat*` types #493\n- Added *NEON* instruction set detection\n- Added *MIPS* CPUs detection\n- Added *PowerPC* CPUs detection\n- Use *Cuda* built-in function for abs function implementation with Cuda compiler\n- Factorized `GLM_COMPILER_LLVM` and `GLM_COMPILER_APPLE_CLANG` into `GLM_COMPILER_CLANG`\n- No more warnings for use of long long\n- Added more information to build messages\n\n#### Fixes:\n- Fixed *GLM_GTX_extended_min_max* filename typo #386\n- Fixed `glm::intersectRayTriangle` to not do any unintentional backface culling\n- Fixed long long warnings when using C++98 on *GCC* and *Clang* #482\n- Fixed sign with signed integer function on non-x86 architecture\n- Fixed strict aliasing warnings #473\n- Fixed missing `glm::vec1` overload to `glm::length2` and `glm::distance2` functions #431\n- Fixed *GLM* test '/fp:fast' and '/Za' command-line options are incompatible\n- Fixed quaterion to mat3 cast function `glm::mat3_cast` from *GLM_GTC_quaternion* #542\n- Fixed *GLM_GTX_io* for *Cuda* #547 #546\n\n#### Deprecation:\n- Removed `GLM_FORCE_SIZE_FUNC` define\n- Deprecated *GLM_GTX_simd_vec4* extension\n- Deprecated *GLM_GTX_simd_mat4* extension\n- Deprecated *GLM_GTX_simd_quat* extension\n- Deprecated `GLM_SWIZZLE`, use `GLM_FORCE_SWIZZLE` instead\n- Deprecated `GLM_MESSAGES`, use `GLM_FORCE_MESSAGES` instead\n\n---\n### [GLM 0.9.7.6](https://github.com/g-truc/glm/releases/tag/0.9.7.6) - 2016-07-16\n#### Improvements:\n- Added pkg-config file #509\n- Updated list of compiler versions detected\n- Improved C++ 11 STL detection #523\n\n#### Fixes:\n- Fixed STL for C++11 detection on ICC #510\n- Fixed missing vec1 overload to length2 and distance2 functions #431\n- Fixed long long warnings when using C++98 on GCC and Clang #482\n- Fixed scalar reciprocal functions (GTC_reciprocal) #520\n\n---\n### [GLM 0.9.7.5](https://github.com/g-truc/glm/releases/tag/0.9.7.5) - 2016-05-24\n#### Improvements:\n- Added Visual C++ Clang toolset detection\n\n#### Fixes:\n- Fixed uaddCarry warning #497\n- Fixed roundPowerOfTwo and floorPowerOfTwo #503\n- Fixed Visual C++ SIMD instruction set automatic detection in 64 bits\n- Fixed to_string when used with GLM_FORCE_INLINE #506\n- Fixed GLM_FORCE_INLINE with binary vec4 operators\n- Fixed GTX_extended_min_max filename typo #386\n- Fixed intersectRayTriangle to not do any unintentional backface culling\n\n---\n### [GLM 0.9.7.4](https://github.com/g-truc/glm/releases/tag/0.9.7.4) - 2016-03-19\n#### Fixes:\n- Fixed asinh and atanh warning with C++98 STL #484\n- Fixed polar coordinates function latitude #485\n- Fixed outerProduct defintions and operator signatures for mat2x4 and vec4 #475\n- Fixed eulerAngles precision error, returns NaN  #451\n- Fixed undefined reference errors #489\n- Fixed missing GLM_PLATFORM_CYGWIN declaration #495\n- Fixed various undefined reference errors #490\n\n---\n### [GLM 0.9.7.3](https://github.com/g-truc/glm/releases/tag/0.9.7.3) - 2016-02-21\n#### Improvements:\n- Added AVX512 detection\n\n#### Fixes:\n- Fixed CMake policy warning\n- Fixed GCC 6.0 detection #477\n- Fixed Clang build on Windows #479\n- Fixed 64 bits constants warnings on GCC #463\n\n---\n### [GLM 0.9.7.2](https://github.com/g-truc/glm/releases/tag/0.9.7.2) - 2016-01-03\n#### Fixes:\n- Fixed GTC_round floorMultiple/ceilMultiple #412\n- Fixed GTC_packing unpackUnorm3x10_1x2 #414\n- Fixed GTC_matrix_inverse affineInverse #192\n- Fixed ICC on Linux build errors #449\n- Fixed ldexp and frexp compilation errors\n- Fixed \"Declaration shadows a field\" warning #468\n- Fixed 'GLM_COMPILER_VC2005 is not defined' warning #468\n- Fixed various 'X is not defined' warnings #468\n- Fixed missing unary + operator #435\n- Fixed Cygwin build errors when using C++11 #405\n\n---\n### [GLM 0.9.7.1](https://github.com/g-truc/glm/releases/tag/0.9.7.1) - 2015-09-07\n#### Improvements:\n- Improved constexpr for constant functions coverage #198\n- Added to_string for quat and dual_quat in GTX_string_cast #375\n- Improved overall execution time of unit tests #396\n\n#### Fixes:\n- Fixed strict alignment warnings #235 #370\n- Fixed link errors on compilers not supported default function #377\n- Fixed compilation warnings in vec4\n- Fixed non-identity quaternions for equal vectors #234\n- Fixed excessive GTX_fast_trigonometry execution time #396\n- Fixed Visual Studio 2015 'hides class member' warnings #394\n- Fixed builtin bitscan never being used #392\n- Removed unused func_noise.* files #398\n\n---\n### [GLM 0.9.7.0](https://github.com/g-truc/glm/releases/tag/0.9.7.0) - 2015-08-02\n#### Features:\n- Added GTC_color_space: convertLinearToSRGB and convertSRGBToLinear functions\n- Added 'fmod' overload to GTX_common with tests #308\n- Left handed perspective and lookAt functions #314\n- Added functions eulerAngleXYZ and extractEulerAngleXYZ #311\n- Added <glm/gtx/hash.hpp> to perform std::hash on GLM types #320 #367\n- Added <glm/gtx/wrap.hpp> for texcoord wrapping\n- Added static components and precision members to all vector and quat types #350\n- Added .gitignore #349\n- Added support of defaulted functions to GLM types, to use them in unions #366\n\n#### Improvements:\n- Changed usage of __has_include to support Intel compiler #307\n- Specialized integer implementation of YCoCg-R #310\n- Don't show status message in 'FindGLM' if 'QUIET' option is set. #317\n- Added master branch continuous integration service on Linux 64 #332\n- Clarified manual regarding angle unit in GLM, added FAQ 11 #326\n- Updated list of compiler versions\n\n#### Fixes:\n- Fixed default precision for quat and dual_quat type #312\n- Fixed (u)int64 MSB/LSB handling on BE archs #306\n- Fixed multi-line comment warning in g++. #315\n- Fixed specifier removal by 'std::make_pair<>' #333\n- Fixed perspective fovy argument documentation #327\n- Removed -m64 causing build issues on Linux 32 #331\n- Fixed isfinite with C++98 compilers #343\n- Fixed Intel compiler build error on Linux #354\n- Fixed use of libstdc++ with Clang #351\n- Fixed quaternion pow #346\n- Fixed decompose warnings #373\n- Fixed matrix conversions #371\n\n#### Deprecation:\n- Removed integer specification for 'mod' in GTC_integer #308\n- Removed GTX_multiple, replaced by GTC_round\n\n---\n### [GLM 0.9.6.3](https://github.com/g-truc/glm/releases/tag/0.9.6.3) - 2015-02-15\n- Fixed Android doesn't have C++ 11 STL #284\n\n---\n### [GLM 0.9.6.2](https://github.com/g-truc/glm/releases/tag/0.9.6.2) - 2015-02-15\n#### Features:\n- Added display of GLM version with other GLM_MESSAGES\n- Added ARM instruction set detection\n\n#### Improvements:\n- Removed assert for perspective with zFar < zNear #298\n- Added Visual Studio natvis support for vec1, quat and dualqual types\n- Cleaned up C++11 feature detections\n- Clarify GLM licensing\n\n#### Fixes:\n- Fixed faceforward build #289\n- Fixed conflict with Xlib #define True 1 #293\n- Fixed decompose function VS2010 templating issues #294\n- Fixed mat4x3 = mat2x3 * mat4x2 operator #297\n- Fixed warnings in F2x11_1x10 packing function in GTC_packing #295\n- Fixed Visual Studio natvis support for vec4 #288\n- Fixed GTC_packing *pack*norm*x* build and added tests #292\n- Disabled GTX_scalar_multiplication for GCC, failing to build tests #242\n- Fixed Visual C++ 2015 constexpr errors: Disabled only partial support\n- Fixed functions not inlined with Clang #302\n- Fixed memory corruption (undefined behaviour) #303\n\n---\n### [GLM 0.9.6.1](https://github.com/g-truc/glm/releases/tag/0.9.6.1) - 2014-12-10\n#### Features:\n- Added GLM_LANG_CXX14_FLAG and GLM_LANG_CXX1Z_FLAG language feature flags\n- Added C++14 detection\n\n#### Improvements:\n- Clean up GLM_MESSAGES compilation log to report only detected capabilities\n\n#### Fixes:\n- Fixed scalar uaddCarry build error with Cuda #276\n- Fixed C++11 explicit conversion operators detection #282\n- Fixed missing explicit conversion when using integer log2 with *vec1 types\n- Fixed 64 bits integer GTX_string_cast to_string on VC 32 bit compiler\n- Fixed Android build issue, STL C++11 is not supported by the NDK #284\n- Fixed unsupported _BitScanForward64 and _BitScanReverse64 in VC10\n- Fixed Visual C++ 32 bit build #283\n- Fixed GLM_FORCE_SIZE_FUNC pragma message\n- Fixed C++98 only build\n- Fixed conflict between GTX_compatibility and GTC_quaternion #286\n- Fixed C++ language restriction using GLM_FORCE_CXX**\n\n---\n### [GLM 0.9.6.0](https://github.com/g-truc/glm/releases/tag/0.9.6.0) - 2014-11-30\n#### Features:\n- Exposed template vector and matrix types in 'glm' namespace #239, #244\n- Added GTX_scalar_multiplication for C++ 11 compiler only #242\n- Added GTX_range for C++ 11 compiler only #240\n- Added closestPointOnLine function for tvec2 to GTX_closest_point #238\n- Added GTC_vec1 extension, *vec1 support to *vec* types\n- Updated GTX_associated_min_max with vec1 support\n- Added support of precision and integers to linearRand #230\n- Added Integer types support to GTX_string_cast #249\n- Added vec3 slerp #237\n- Added GTX_common with isdenomal #223\n- Added GLM_FORCE_SIZE_FUNC to replace .length() by .size() #245\n- Added GLM_FORCE_NO_CTOR_INIT\n- Added 'uninitialize' to explicitly not initialize a GLM type\n- Added GTC_bitfield extension, promoted GTX_bit\n- Added GTC_integer extension, promoted GTX_bit and GTX_integer\n- Added GTC_round extension, promoted GTX_bit\n- Added GLM_FORCE_EXPLICIT_CTOR to require explicit type conversions #269\n- Added GTX_type_aligned for aligned vector, matrix and quaternion types\n\n#### Improvements:\n- Rely on C++11 to implement isinf and isnan\n- Removed GLM_FORCE_CUDA, Cuda is implicitly detected\n- Separated Apple Clang and LLVM compiler detection\n- Used pragma once\n- Undetected C++ compiler automatically compile with GLM_FORCE_CXX98 and \n  GLM_FORCE_PURE\n- Added not function (from GLSL specification) on VC12\n- Optimized bitfieldReverse and bitCount functions\n- Optimized findLSB and findMSB functions.\n- Optimized matrix-vector multiple performance with Cuda #257, #258\n- Reduced integer type redifinitions #233\n- Rewrited of GTX_fast_trigonometry #264 #265\n- Made types trivially copyable #263\n- Removed <iostream> in GLM tests\n- Used std features within GLM without redeclaring\n- Optimized cot function #272\n- Optimized sign function #272\n- Added explicit cast from quat to mat3 and mat4 #275\n\n#### Fixes:\n- Fixed std::nextafter not supported with C++11 on Android #217\n- Fixed missing value_type for dual quaternion\n- Fixed return type of dual quaternion length\n- Fixed infinite loop in isfinite function with GCC #221\n- Fixed Visual Studio 14 compiler warnings\n- Fixed implicit conversion from another tvec2 type to another tvec2 #241\n- Fixed lack of consistency of quat and dualquat constructors\n- Fixed uaddCarray #253\n- Fixed float comparison warnings #270\n\n#### Deprecation:\n- Requires Visual Studio 2010, GCC 4.2, Apple Clang 4.0, LLVM 3.0, Cuda 4, ICC 2013 or a C++98 compiler\n- Removed degrees for function parameters\n- Removed GLM_FORCE_RADIANS, active by default\n- Removed VC 2005 / 8 and 2008 / 9 support\n- Removed GCC 3.4 to 4.3 support\n- Removed LLVM GCC support\n- Removed LLVM 2.6 to 3.1 support\n- Removed CUDA 3.0 to 3.2 support\n\n---\n### [GLM 0.9.5.4 - 2014-06-21](https://github.com/g-truc/glm/releases/tag/0.9.5.4)\n- Fixed non-utf8 character #196\n- Added FindGLM install for CMake #189\n- Fixed GTX_color_space - saturation #195\n- Fixed glm::isinf and glm::isnan for with Android NDK 9d #191\n- Fixed builtin GLM_ARCH_SSE4 #204\n- Optimized Quaternion vector rotation #205\n- Fixed missing doxygen @endcond tag #211\n- Fixed instruction set detection with Clang #158\n- Fixed orientate3 function #207\n- Fixed lerp when cosTheta is close to 1 in quaternion slerp #210\n- Added GTX_io for io with <iostream> #144\n- Fixed fastDistance ambiguity #215\n- Fixed tweakedInfinitePerspective #208 and added user-defined epsilon to\n  tweakedInfinitePerspective\n- Fixed std::copy and std::vector with GLM types #214\n- Fixed strict aliasing issues #212, #152\n- Fixed std::nextafter not supported with C++11 on Android #213\n- Fixed corner cases in exp and log functions for quaternions #199\n\n---\n### GLM 0.9.5.3 - 2014-04-02\n- Added instruction set auto detection with Visual C++ using _M_IX86_FP - /arch\n  compiler argument\n- Fixed GTX_raw_data code dependency\n- Fixed GCC instruction set detection\n- Added GLM_GTX_matrix_transform_2d extension (#178, #176)\n- Fixed CUDA issues (#169, #168, #183, #182)\n- Added support for all extensions but GTX_string_cast to CUDA\n- Fixed strict aliasing warnings in GCC 4.8.1 / Android NDK 9c (#152)\n- Fixed missing bitfieldInterleave definisions\n- Fixed usubBorrow (#171)\n- Fixed eulerAngle*** not consistent for right-handed coordinate system (#173)\n- Added full tests for eulerAngle*** functions (#173)\n- Added workaround for a CUDA compiler bug (#186, #185)\n\n---\n### GLM 0.9.5.2 - 2014-02-08\n- Fixed initializer list ambiguity (#159, #160)\n- Fixed warnings with the Android NDK 9c\n- Fixed non power of two matrix products\n- Fixed mix function link error\n- Fixed SSE code included in GLM tests on \"pure\" platforms\n- Fixed undefined reference to fastInverseSqrt (#161)\n- Fixed GLM_FORCE_RADIANS with <glm/ext.hpp> build error (#165)\n- Fix dot product clamp range for vector angle functions. (#163)\n- Tentative fix for strict aliasing warning in GCC 4.8.1 / Android NDK 9c (#152)\n- Fixed GLM_GTC_constants description brief (#162)\n\n---\n### GLM 0.9.5.1 - 2014-01-11\n- Fixed angle and orientedAngle that sometimes return NaN values (#145)\n- Deprecated degrees for function parameters and display a message\n- Added possible static_cast conversion of GLM types (#72)\n- Fixed error 'inverse' is not a member of 'glm' from glm::unProject (#146)\n- Fixed mismatch between some declarations and definitions\n- Fixed inverse link error when using namespace glm; (#147)\n- Optimized matrix inverse and division code (#149)\n- Added intersectRayPlane function (#153)\n- Fixed outerProduct return type (#155)\n\n---\n### GLM 0.9.5.0 - 2013-12-25\n- Added forward declarations (glm/fwd.hpp) for faster compilations\n- Added per feature headers\n- Minimized GLM internal dependencies\n- Improved Intel Compiler detection\n- Added bitfieldInterleave and _mm_bit_interleave_si128 functions\n- Added GTX_scalar_relational\n- Added GTX_dual_quaternion\n- Added rotation function to GTX_quaternion (#22)\n- Added precision variation of each type\n- Added quaternion comparison functions\n- Fixed GTX_multiple for negative value\n- Removed GTX_ocl_type extension\n- Fixed post increment and decrement operators\n- Fixed perspective with zNear == 0 (#71)\n- Removed l-value swizzle operators\n- Cleaned up compiler detection code for unsupported compilers\n- Replaced C cast by C++ casts\n- Fixed .length() that should return a int and not a size_t\n- Added GLM_FORCE_SIZE_T_LENGTH and glm::length_t\n- Removed unnecessary conversions\n- Optimized packing and unpacking functions\n- Removed the normalization of the up argument of lookAt function (#114)\n- Added low precision specializations of inversesqrt\n- Fixed ldexp and frexp implementations\n- Increased assert coverage\n- Increased static_assert coverage\n- Replaced GLM traits by STL traits when possible\n- Allowed including individual core feature\n- Increased unit tests completeness\n- Added creating of a quaternion from two vectors\n- Added C++11 initializer lists\n- Fixed umulExtended and imulExtended implementations for vector types (#76)\n- Fixed CUDA coverage for GTC extensions\n- Added GTX_io extension\n- Improved GLM messages enabled when defining GLM_MESSAGES\n- Hidden matrix_inverse function implementation detail into private section\n\n---\n### [GLM 0.9.4.6](https://github.com/g-truc/glm/releases/tag/0.9.4.6) - 2013-09-20\n- Fixed detection to select the last known compiler if newer version #106\n- Fixed is_int and is_uint code duplication with GCC and C++11 #107 \n- Fixed test suite build while using Clang in C++11 mode\n- Added c++1y mode support in CMake test suite\n- Removed ms extension mode to CMake when no using Visual C++\n- Added pedantic mode to CMake test suite for Clang and GCC\n- Added use of GCC frontend on Unix for ICC and Visual C++ fronted on Windows\n  for ICC\n- Added compilation errors for unsupported compiler versions\n- Fixed glm::orientation with GLM_FORCE_RADIANS defined #112\n- Fixed const ref issue on assignment operator taking a scalar parameter #116\n- Fixed glm::eulerAngleY implementation #117\n\n---\n### GLM 0.9.4.5 - 2013-08-12\n- Fixed CUDA support\n- Fixed inclusion of intrinsics in \"pure\" mode #92\n- Fixed language detection on GCC when the C++0x mode isn't enabled #95\n- Fixed issue #97: register is deprecated in C++11\n- Fixed issue #96: CUDA issues\n- Added Windows CE detection #92\n- Added missing value_ptr for quaternions #99\n\n---\n### GLM 0.9.4.4 - 2013-05-29\n- Fixed slerp when costheta is close to 1 #65\n- Fixed mat4x2 value_type constructor #70\n- Fixed glm.natvis for Visual C++ 12 #82\n- Added assert in inversesqrt to detect division by zero #61\n- Fixed missing swizzle operators #86\n- Fixed CUDA warnings #86\n- Fixed GLM natvis for VC11 #82\n- Fixed GLM_GTX_multiple with negative values #79\n- Fixed glm::perspective when zNear is zero #71\n\n---\n### GLM 0.9.4.3 - 2013-03-20\n- Detected qualifier for Clang\n- Fixed C++11 mode for GCC, couldn't be enabled without MS extensions\n- Fixed squad, intermediate and exp quaternion functions\n- Fixed GTX_polar_coordinates euclidean function, takes a vec2 instead of a vec3\n- Clarify the license applying on the manual\n- Added a docx copy of the manual\n- Fixed GLM_GTX_matrix_interpolation\n- Fixed isnan and isinf on Android with Clang\n- Autodetected C++ version using __cplusplus value\n- Fixed mix for bool and bvec* third parameter\n\n---\n### GLM 0.9.4.2 - 2013-02-14\n- Fixed compAdd from GTX_component_wise\n- Fixed SIMD support for Intel compiler on Windows\n- Fixed isnan and isinf for CUDA compiler\n- Fixed GLM_FORCE_RADIANS on glm::perspective\n- Fixed GCC warnings\n- Fixed packDouble2x32 on Xcode\n- Fixed mix for vec4 SSE implementation\n- Fixed 0x2013 dash character in comments that cause issue in Windows \n  Japanese mode\n- Fixed documentation warnings\n- Fixed CUDA warnings\n\n---\n### GLM 0.9.4.1 - 2012-12-22\n- Improved half support: -0.0 case and implicit conversions\n- Fixed Intel Composer Compiler support on Linux\n- Fixed interaction between quaternion and euler angles\n- Fixed GTC_constants build\n- Fixed GTX_multiple\n- Fixed quat slerp using mix function when cosTheta close to 1\n- Improved fvec4SIMD and fmat4x4SIMD implementations\n- Fixed assert messages\n- Added slerp and lerp quaternion functions and tests\n\n---\n### GLM 0.9.4.0 - 2012-11-18\n- Added Intel Composer Compiler support\n- Promoted GTC_espilon extension\n- Promoted GTC_ulp extension\n- Removed GLM website from the source repository\n- Added GLM_FORCE_RADIANS so that all functions takes radians for arguments\n- Fixed detection of Clang and LLVM GCC on MacOS X\n- Added debugger visualizers for Visual C++ 2012\n- Requires Visual Studio 2005, GCC 4.2, Clang 2.6, Cuda 3, ICC 2013 or a C++98 compiler\n\n---\n### [GLM 0.9.3.4](https://github.com/g-truc/glm/releases/tag/0.9.3.4) - 2012-06-30\n- Added SSE4 and AVX2 detection.\n- Removed VIRTREV_xstream and the incompatibility generated with GCC\n- Fixed C++11 compiler option for GCC\n- Removed MS language extension option for GCC (not fonctionnal)\n- Fixed bitfieldExtract for vector types\n- Fixed warnings\n- Fixed SSE includes\n\n---\n### GLM 0.9.3.3 - 2012-05-10\n- Fixed isinf and isnan\n- Improved compatibility with Intel compiler\n- Added CMake test build options: SIMD, C++11, fast math and MS land ext\n- Fixed SIMD mat4 test on GCC\n- Fixed perspectiveFov implementation\n- Fixed matrixCompMult for none-square matrices\n- Fixed namespace issue on stream operators\n- Fixed various warnings\n- Added VC11 support\n\n---\n### GLM 0.9.3.2 - 2012-03-15\n- Fixed doxygen documentation\n- Fixed Clang version detection\n- Fixed simd mat4 /= operator\n\n---\n### GLM 0.9.3.1 - 2012-01-25\n- Fixed platform detection\n- Fixed warnings\n- Removed detail code from Doxygen doc\n\n---\n### GLM 0.9.3.0 - 2012-01-09\n- Added CPP Check project\n- Fixed conflict with Windows headers\n- Fixed isinf implementation\n- Fixed Boost conflict\n- Fixed warnings\n\n---\n### GLM 0.9.3.B - 2011-12-12\n- Added support for Chrone Native Client\n- Added epsilon constant\n- Removed value_size function from vector types\n- Fixed roundEven on GCC\n- Improved API documentation\n- Fixed modf implementation\n- Fixed step function accuracy\n- Fixed outerProduct\n\n---\n### GLM 0.9.3.A - 2011-11-11\n- Improved doxygen documentation\n- Added new swizzle operators for C++11 compilers\n- Added new swizzle operators declared as functions\n- Added GLSL 4.20 length for vector and matrix types\n- Promoted GLM_GTC_noise extension: simplex, perlin, periodic noise functions\n- Promoted GLM_GTC_random extension: linear, gaussian and various random number \ngeneration distribution\n- Added GLM_GTX_constants: provides useful constants\n- Added extension versioning\n- Removed many unused namespaces\n- Fixed half based type contructors\n- Added GLSL core noise functions\n\n---\n### [GLM 0.9.2.7](https://github.com/g-truc/glm/releases/tag/0.9.2.7) - 2011-10-24\n- Added more swizzling constructors\n- Added missing non-squared matrix products\n\n---\n### [GLM 0.9.2.6](https://github.com/g-truc/glm/releases/tag/0.9.2.6) - 2011-10-01\n- Fixed half based type build on old GCC\n- Fixed /W4 warnings on Visual C++\n- Fixed some missing l-value swizzle operators\n\n---\n### GLM 0.9.2.5 - 2011-09-20\n- Fixed floatBitToXint functions\n- Fixed pack and unpack functions\n- Fixed round functions\n\n---\n### GLM 0.9.2.4 - 2011-09-03\n- Fixed extensions bugs\n\n---\n### GLM 0.9.2.3 - 2011-06-08\n- Fixed build issues\n\n---\n### GLM 0.9.2.2 - 2011-06-02\n- Expend matrix constructors flexibility\n- Improved quaternion implementation\n- Fixed many warnings across platforms and compilers\n\n---\n### GLM 0.9.2.1 - 2011-05-24\n- Automatically detect CUDA support\n- Improved compiler detection\n- Fixed errors and warnings in VC with C++ extensions disabled\n- Fixed and tested GLM_GTX_vector_angle\n- Fixed and tested GLM_GTX_rotate_vector\n\n---\n### GLM 0.9.2.0 - 2011-05-09\n- Added CUDA support\n- Added CTest test suite\n- Added GLM_GTX_ulp extension\n- Added GLM_GTX_noise extension\n- Added GLM_GTX_matrix_interpolation extension\n- Updated quaternion slerp interpolation\n\n---\n### [GLM 0.9.1.3](https://github.com/g-truc/glm/releases/tag/0.9.1.3) - 2011-05-07\n- Fixed bugs\n\n---\n### GLM 0.9.1.2 - 2011-04-15\n- Fixed bugs\n\n---\n### GLM 0.9.1.1 - 2011-03-17\n- Fixed bugs\n\n---\n### GLM 0.9.1.0 - 2011-03-03\n- Fixed bugs\n\n---\n### GLM 0.9.1.B - 2011-02-13\n- Updated API documentation\n- Improved SIMD implementation\n- Fixed Linux build\n\n---\n### [GLM 0.9.0.8](https://github.com/g-truc/glm/releases/tag/0.9.0.8) - 2011-02-13\n- Added quaternion product operator.\n- Clarify that GLM is a header only library.\n\n---\n### GLM 0.9.1.A - 2011-01-31\n- Added SIMD support\n- Added new swizzle functions\n- Improved static assert error message with C++0x static_assert\n- New setup system\n- Reduced branching\n- Fixed trunc implementation\n\n---\n### [GLM 0.9.0.7](https://github.com/g-truc/glm/releases/tag/0.9.0.7) - 2011-01-30\n- Added GLSL 4.10 packing functions\n- Added == and != operators for every types.\n\n---\n### GLM 0.9.0.6 - 2010-12-21\n- Many matrices bugs fixed\n\n---\n### GLM 0.9.0.5 - 2010-11-01\n- Improved Clang support\n- Fixed bugs\n\n---\n### GLM 0.9.0.4 - 2010-10-04\n- Added autoexp for GLM\n- Fixed bugs\n\n---\n### GLM 0.9.0.3 - 2010-08-26\n- Fixed non-squared matrix operators\n\n---\n### GLM 0.9.0.2 - 2010-07-08\n- Added GLM_GTX_int_10_10_10_2\n- Fixed bugs\n\n---\n### GLM 0.9.0.1 - 2010-06-21\n- Fixed extensions errors\n\n---\n### GLM 0.9.0.0 - 2010-05-25\n- Objective-C support\n- Fixed warnings\n- Updated documentation\n\n---\n### GLM 0.9.B.2 - 2010-04-30\n- Git transition\n- Removed experimental code from releases\n- Fixed bugs\n\n---\n### GLM 0.9.B.1 - 2010-04-03\n- Based on GLSL 4.00 specification\n- Added the new core functions\n- Added some implicit conversion support\n\n---\n### GLM 0.9.A.2 - 2010-02-20\n- Improved some possible errors messages\n- Improved declarations and definitions match\n\n---\n### GLM 0.9.A.1 - 2010-02-09\n- Removed deprecated features\n- Internal redesign\n\n---\n### GLM 0.8.4.4 final - 2010-01-25\n- Fixed warnings\n\n---\n### GLM 0.8.4.3 final - 2009-11-16\n- Fixed Half float arithmetic\n- Fixed setup defines\n\n---\n### GLM 0.8.4.2 final - 2009-10-19\n- Fixed Half float adds\n\n---\n### GLM 0.8.4.1 final - 2009-10-05\n- Updated documentation\n- Fixed MacOS X build\n\n---\n### GLM 0.8.4.0 final - 2009-09-16\n- Added GCC 4.4 and VC2010 support\n- Added matrix optimizations\n\n---\n### GLM 0.8.3.5 final - 2009-08-11\n- Fixed bugs\n\n---\n### GLM 0.8.3.4 final - 2009-08-10\n- Updated GLM according GLSL 1.5 spec\n- Fixed bugs\n\n---\n### GLM 0.8.3.3 final - 2009-06-25\n- Fixed bugs\n\n---\n### GLM 0.8.3.2 final - 2009-06-04\n- Added GLM_GTC_quaternion\n- Added GLM_GTC_type_precision\n\n---\n### GLM 0.8.3.1 final - 2009-05-21\n- Fixed old extension system.\n\n---\n### GLM 0.8.3.0 final - 2009-05-06\n- Added stable extensions.\n- Added new extension system.\n\n---\n### GLM 0.8.2.3 final - 2009-04-01\n- Fixed bugs.\n\n---\n### GLM 0.8.2.2 final - 2009-02-24\n- Fixed bugs.\n\n---\n### GLM 0.8.2.1 final - 2009-02-13\n- Fixed bugs.\n\n---\n### GLM 0.8.2 final - 2009-01-21\n- Fixed bugs.\n\n---\n### GLM 0.8.1 final - 2008-10-30\n- Fixed bugs.\n\n---\n### GLM 0.8.0 final - 2008-10-23\n- New method to use extension.\n\n---\n### GLM 0.8.0 beta3 - 2008-10-10\n- Added CMake support for GLM tests.\n\n---\n### GLM 0.8.0 beta2 - 2008-10-04\n- Improved half scalars and vectors support.\n\n---\n### GLM 0.8.0 beta1 - 2008-09-26\n- Improved GLSL conformance\n- Added GLSL 1.30 support\n- Improved API documentation\n\n---\n### GLM 0.7.6 final - 2008-08-08\n- Improved C++ standard comformance\n- Added Static assert for types checking\n\n---\n### GLM 0.7.5 final - 2008-07-05\n- Added build message system with Visual Studio\n- Pedantic build with GCC\n\n---\n### GLM 0.7.4 final - 2008-06-01\n- Added external dependencies system.\n\n---\n### GLM 0.7.3 final - 2008-05-24\n- Fixed bugs\n- Added new extension group\n\n---\n### GLM 0.7.2 final - 2008-04-27\n- Updated documentation\n- Added preprocessor options\n\n---\n### GLM 0.7.1 final - 2008-03-24\n- Disabled half on GCC\n- Fixed extensions\n\n---\n### GLM 0.7.0 final - 2008-03-22\n- Changed to MIT license\n- Added new documentation\n\n---\n### GLM 0.6.4 - 2007-12-10\n- Fixed swizzle operators\n\n---\n### GLM 0.6.3 - 2007-11-05\n- Fixed type data accesses\n- Fixed 3DSMax sdk conflict\n\n---\n### GLM 0.6.2 - 2007-10-08\n- Fixed extension\n\n---\n### GLM 0.6.1 - 2007-10-07\n- Fixed a namespace error\n- Added extensions\n\n---\n### GLM 0.6.0 : 2007-09-16\n- Added new extension namespace mecanium\n- Added Automatic compiler detection\n\n---\n### GLM 0.5.1 - 2007-02-19\n- Fixed swizzle operators\n\n---\n### GLM 0.5.0 - 2007-01-06\n- Upgrated to GLSL 1.2\n- Added swizzle operators\n- Added setup settings\n\n---\n### GLM 0.4.1 - 2006-05-22\n- Added OpenGL examples\n\n---\n### GLM 0.4.0 - 2006-05-17\n- Added missing operators to vec* and mat*\n- Added first GLSL 1.2 features\n- Fixed windows.h before glm.h when windows.h required\n\n---\n### GLM 0.3.2 - 2006-04-21\n- Fixed texcoord components access.\n- Fixed mat4 and imat4 division operators.\n\n---\n### GLM 0.3.1 - 2006-03-28\n- Added GCC 4.0 support under MacOS X.\n- Added GCC 4.0 and 4.1 support under Linux.\n- Added code optimisations.\n\n---\n### GLM 0.3 - 2006-02-19\n- Improved GLSL type conversion and construction compliance.\n- Added experimental extensions.\n- Added Doxygen Documentation.\n- Added code optimisations.\n- Fixed bugs.\n\n---\n### GLM 0.2 - 2005-05-05\n- Improve adaptative from GLSL.\n- Add experimental extensions based on OpenGL extension process.\n- Fixed bugs.\n\n---\n### GLM 0.1 - 2005-02-21\n- Add vec2, vec3, vec4 GLSL types\n- Add ivec2, ivec3, ivec4 GLSL types\n- Add bvec2, bvec3, bvec4 GLSL types\n- Add mat2, mat3, mat4 GLSL types\n- Add almost all functions\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/bug/bug_ms_vec_static.cpp",
    "content": "#include <glm/glm.hpp>\n\n#if GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE\nstruct vec2;\n\nstruct _swizzle\n{\n\tchar _buffer[1];\n};\n\nstruct vec2\n{\n\tGLM_CONSTEXPR vec2() :\n\t\tx(0), y(0)\n\t{}\n\n\tunion\n\t{\n\t\tstruct { float x, y; };\n\t\tstruct { _swizzle xx; };\n\t};\n};\n#endif\n\n// Visual C++ has a bug generating the error: fatal error C1001: An internal error has occurred in the compiler.\n// vec2 Bar;\n\nint main()\n{\n\treturn 0;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/cmake/CMakeLists.txt",
    "content": "cmake_minimum_required(VERSION 3.2 FATAL_ERROR)\nproject(test_find_glm)\n\nfind_package(glm REQUIRED)\n\nadd_executable(test_find_glm test_find_glm.cpp)\ntarget_link_libraries(test_find_glm glm::glm)\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/cmake/test_find_glm.cpp",
    "content": "#include <iostream>\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nglm::mat4 camera(float Translate, glm::vec2 const& Rotate)\n{\n\tglm::mat4 Projection = glm::perspective(glm::pi<float>() * 0.25f, 4.0f / 3.0f, 0.1f, 100.f);\n\tglm::mat4 View = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -Translate));\n\tView = glm::rotate(View, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f));\n\tView = glm::rotate(View, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f));\n\tglm::mat4 Model = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f));\n\treturn Projection * View * Model;\n}\n\nint main()\n{\n    const glm::mat4 m = camera(1.f, glm::vec2(1.f, 0.5f));\n    std::cout << \"matrix diagonal: \" << m[0][0] << \", \"\n              << m[1][1] << \", \" << m[2][2] << \", \" << m[3][3] << \"\\n\";\n    return 0;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/CMakeLists.txt",
    "content": "glmCreateTestGTC(core_cpp_constexpr)\nglmCreateTestGTC(core_cpp_defaulted_ctor)\nglmCreateTestGTC(core_force_aligned_gentypes)\nglmCreateTestGTC(core_force_ctor_init)\nglmCreateTestGTC(core_force_cxx03)\nglmCreateTestGTC(core_force_cxx98)\nglmCreateTestGTC(core_force_arch_unknown)\nglmCreateTestGTC(core_force_compiler_unknown)\nglmCreateTestGTC(core_force_cxx_unknown)\nglmCreateTestGTC(core_force_explicit_ctor)\nglmCreateTestGTC(core_force_inline)\nglmCreateTestGTC(core_force_platform_unknown)\nglmCreateTestGTC(core_force_pure)\nglmCreateTestGTC(core_force_unrestricted_gentype)\nglmCreateTestGTC(core_force_xyzw_only)\nglmCreateTestGTC(core_force_quat_xyzw)\nglmCreateTestGTC(core_type_aligned)\nglmCreateTestGTC(core_type_cast)\nglmCreateTestGTC(core_type_ctor)\nglmCreateTestGTC(core_type_int)\nglmCreateTestGTC(core_type_length)\nglmCreateTestGTC(core_type_mat2x2)\nglmCreateTestGTC(core_type_mat2x3)\nglmCreateTestGTC(core_type_mat2x4)\nglmCreateTestGTC(core_type_mat3x2)\nglmCreateTestGTC(core_type_mat3x3)\nglmCreateTestGTC(core_type_mat3x4)\nglmCreateTestGTC(core_type_mat4x2)\nglmCreateTestGTC(core_type_mat4x3)\nglmCreateTestGTC(core_type_mat4x4)\nglmCreateTestGTC(core_type_vec1)\nglmCreateTestGTC(core_type_vec2)\nglmCreateTestGTC(core_type_vec3)\nglmCreateTestGTC(core_type_vec4)\nglmCreateTestGTC(core_func_common)\nglmCreateTestGTC(core_func_exponential)\nglmCreateTestGTC(core_func_geometric)\nglmCreateTestGTC(core_func_integer)\nglmCreateTestGTC(core_func_integer_bit_count)\nglmCreateTestGTC(core_func_integer_find_lsb)\nglmCreateTestGTC(core_func_integer_find_msb)\nglmCreateTestGTC(core_func_matrix)\nglmCreateTestGTC(core_func_noise)\nglmCreateTestGTC(core_func_packing)\nglmCreateTestGTC(core_func_trigonometric)\nglmCreateTestGTC(core_func_vector_relational)\nglmCreateTestGTC(core_func_swizzle)\nglmCreateTestGTC(core_setup_force_cxx98)\nglmCreateTestGTC(core_setup_force_size_t_length)\nglmCreateTestGTC(core_setup_message)\nglmCreateTestGTC(core_setup_platform_unknown)\nglmCreateTestGTC(core_setup_precision)\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_cpp_constexpr.cpp",
    "content": "#include <glm/glm.hpp>\n\n#if GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/quaternion.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_int1.hpp>\n#include <glm/ext/vector_bool1.hpp>\n#include <glm/ext/vector_bool4.hpp>\n#include <glm/ext/vector_float1.hpp>\n#include <glm/vector_relational.hpp>\n\nstatic int test_vec1()\n{\n\tint Error = 0;\n\n\t{\n\t\tconstexpr glm::bvec1 B(true);\n\t\tconstexpr bool A = glm::all(B);\n\t\tstatic_assert(A, \"GLM: Failed constexpr\");\n\t\t\n\t\tconstexpr glm::bvec1 D(true);\n\t\tconstexpr bool C = glm::any(D);\n\t\tstatic_assert(C, \"GLM: Failed constexpr\");\n\t}\n\t\n\t{\n\t\tconstexpr glm::bvec2 C(true);\n\t\tconstexpr glm::bvec2 B(true);\n\t\tstatic_assert(glm::any(glm::equal(C, B)), \"GLM: Failed constexpr\");\n\t}\n\t\n\t{\n\t\tconstexpr glm::ivec1 O(glm::ivec1(1));\n\t\tstatic_assert(glm::ivec1(1) == O, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 P(1);\n\t\tstatic_assert(glm::ivec1(1) == P, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 L(glm::ivec2(1, 2));\n\t\tstatic_assert(glm::ivec1(1) == L, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 M(glm::ivec3(1, 2, 3));\n\t\tstatic_assert(glm::ivec1(1) == M, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 N(glm::ivec4(1, 2, 3, 4));\n\t\tstatic_assert(glm::ivec1(1) == N, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(1);\n\t\tstatic_assert(A[0] == 1, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec1(1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec1::length() == 1, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::bvec1 A1(true);\n\t\tconstexpr glm::bvec1 A2(true);\n\t\tconstexpr glm::bvec1 B1(false);\n\t\tconstexpr glm::bvec1 B2(false);\n\t\tstatic_assert(A1 == A2 && B1 == B2, \"GLM: Failed constexpr\");\n\t\tstatic_assert(A1 == A2 || B1 == B2, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(1);\n\t\tconstexpr glm::ivec1 B = A + 1;\n\t\tconstexpr glm::ivec1 C(3);\n\t\tstatic_assert(A + B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 D = +A;\n\t\tstatic_assert(D == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(3);\n\t\tconstexpr glm::ivec1 B = A - 1;\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A - B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 D = -A;\n\t\tstatic_assert(-D == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(3);\n\t\tconstexpr glm::ivec1 B = A * 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B * C == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(3);\n\t\tconstexpr glm::ivec1 B = A / 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B / C == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(3);\n\t\tconstexpr glm::ivec1 B = A % 2;\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 D(2);\n\t\tstatic_assert(A % D == C, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(1);\n\t\tconstexpr glm::ivec1 B = A & 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A == (A & C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(1);\n\t\tconstexpr glm::ivec1 B = A | 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A == (A | C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(1);\n\t\tconstexpr glm::ivec1 B = A ^ 0;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(0);\n\t\tstatic_assert(A == (A ^ C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(1);\n\t\tconstexpr glm::ivec1 B = A << 1;\n\t\tstatic_assert(B == glm::ivec1(2), \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == (A << C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(2);\n\t\tconstexpr glm::ivec1 B = A >> 1;\n\t\tstatic_assert(B == glm::ivec1(1), \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == A >> C, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec1 A(~0);\n\t\tconstexpr glm::ivec1 B = ~A;\n\t\tstatic_assert(A == ~B, \"GLM: Failed constexpr\");\n\t}\n\n\treturn Error;\n}\n\nstatic int test_vec2()\n{\n\tint Error = 0;\n\n\t{\n\t\tconstexpr glm::bvec2 B(true);\n\t\tconstexpr bool A = glm::all(B);\n\t\tstatic_assert(A, \"GLM: Failed constexpr\");\n\t\t\n\t\tconstexpr glm::bvec2 D(true, false);\n\t\tconstexpr bool C = glm::any(D);\n\t\tstatic_assert(C, \"GLM: Failed constexpr\");\n\t}\n\t\n\t{\n\t\tconstexpr glm::bvec2 C(true);\n\t\tconstexpr glm::bvec2 B(true, false);\n\t\tstatic_assert(glm::any(glm::equal(C, B)), \"GLM: Failed constexpr\");\n\t}\n\t\n\t{\n\t\tconstexpr glm::ivec2 O(glm::ivec1(1));\n\t\tstatic_assert(glm::ivec2(1) == O, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 A(1);\n\t\tstatic_assert(glm::ivec2(1) == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 F(glm::ivec1(1), glm::ivec1(2));\n\t\tstatic_assert(glm::ivec2(1, 2) == F, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 G(1, glm::ivec1(2));\n\t\tstatic_assert(glm::ivec2(1, 2) == G, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 H(glm::ivec1(1), 2);\n\t\tstatic_assert(glm::ivec2(1, 2) == H, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 I(1, 2);\n\t\tstatic_assert(glm::ivec2(1, 2) == I, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 L(glm::ivec2(1, 2));\n\t\tstatic_assert(glm::ivec2(1, 2) == L, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 M(glm::ivec3(1, 2, 3));\n\t\tstatic_assert(glm::ivec2(1, 2) == M, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 N(glm::ivec4(1, 2, 3, 4));\n\t\tstatic_assert(glm::ivec2(1, 2) == N, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(1);\n\t\tstatic_assert(A[0] == 1, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec2(1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec2(1.0f, -1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec2(1.0f, -1.0f).y < 0.0f, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec2::length() == 2, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::bvec2 A1(true);\n\t\tconstexpr glm::bvec2 A2(true);\n\t\tconstexpr glm::bvec2 B1(false);\n\t\tconstexpr glm::bvec2 B2(false);\n\t\tstatic_assert(A1 == A2 && B1 == B2, \"GLM: Failed constexpr\");\n\t\tstatic_assert(A1 == A2 || B1 == B2, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(1);\n\t\tconstexpr glm::ivec2 B = A + 1;\n\t\tconstexpr glm::ivec2 C(3);\n\t\tstatic_assert(A + B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 D = +A;\n\t\tstatic_assert(D == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(3);\n\t\tconstexpr glm::ivec2 B = A - 1;\n\t\tconstexpr glm::ivec2 C(1);\n\t\tstatic_assert(A - B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 D = -A;\n\t\tstatic_assert(-D == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(3);\n\t\tconstexpr glm::ivec2 B = A * 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 C(1);\n\t\tstatic_assert(B * C == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(3);\n\t\tconstexpr glm::ivec2 B = A / 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec2 C(1);\n\t\tstatic_assert(B / C == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(3);\n\t\tconstexpr glm::ivec2 B = A % 2;\n\t\tconstexpr glm::ivec2 C(1);\n\t\tstatic_assert(B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 D(2);\n\t\tstatic_assert(A % D == C, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(1);\n\t\tconstexpr glm::ivec2 B = A & 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A == (A & C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(1);\n\t\tconstexpr glm::ivec2 B = A | 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A == (A | C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(1);\n\t\tconstexpr glm::ivec2 B = A ^ 0;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(0);\n\t\tstatic_assert(A == (A ^ C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(1);\n\t\tconstexpr glm::ivec2 B = A << 1;\n\t\tstatic_assert(B == glm::ivec2(2), \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == (A << C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(2);\n\t\tconstexpr glm::ivec2 B = A >> 1;\n\t\tstatic_assert(B == glm::ivec2(1), \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == A >> C, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec2 A(~0);\n\t\tconstexpr glm::ivec2 B = ~A;\n\t\tstatic_assert(A == ~B, \"GLM: Failed constexpr\");\n\t}\n\n\treturn Error;\n}\n\nstatic int test_vec3()\n{\n\tint Error = 0;\n\n\t{\n\t\tconstexpr glm::bvec3 B(true);\n\t\tconstexpr bool A = glm::all(B);\n\t\tstatic_assert(A, \"GLM: Failed constexpr\");\n\t\t\n\t\tconstexpr glm::bvec3 D(true, false, true);\n\t\tconstexpr bool C = glm::any(D);\n\t\tstatic_assert(C, \"GLM: Failed constexpr\");\n\t}\n\t\n\t{\n\t\tconstexpr glm::bvec3 C(true);\n\t\tconstexpr glm::bvec3 B(true, false, true);\n\t\tstatic_assert(glm::any(glm::equal(C, B)), \"GLM: Failed constexpr\");\n\t}\n\t\n\t{\n\t\tconstexpr glm::ivec3 O(glm::ivec1(1));\n\t\tstatic_assert(glm::ivec3(1) == O, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 A(1);\n\t\tstatic_assert(glm::ivec3(1) == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 B(glm::ivec2(1, 2), 3);\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 C(1, glm::ivec2(2, 3));\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 D(glm::ivec1(1), glm::ivec2(2, 3));\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == D, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 E(glm::ivec2(1, 2), glm::ivec1(3));\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == E, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 F(glm::ivec1(1), glm::ivec1(2), glm::ivec1(3));\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == F, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 G(1, glm::ivec1(2), glm::ivec1(3));\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == G, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 H(glm::ivec1(1), 2, glm::ivec1(3));\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == H, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 I(1, 2, glm::ivec1(3));\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == I, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 J(glm::ivec1(1), glm::ivec1(2), 3);\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == J, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 K(1, glm::ivec1(2), 3);\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == K, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 L(glm::ivec1(1), 2, 3);\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == L, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 M(1, 2, 3);\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == M, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 N(glm::ivec4(1, 2, 3, 4));\n\t\tstatic_assert(glm::ivec3(1, 2, 3) == N, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 const A(1);\n\t\tstatic_assert(A[0] == 1, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec3(1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec3(1.0f, -1.0f, -1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec3(1.0f, -1.0f, -1.0f).y < 0.0f, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::vec3::length() == 3, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::bvec3 A1(true);\n\t\tconstexpr glm::bvec3 A2(true);\n\t\tconstexpr glm::bvec3 B1(false);\n\t\tconstexpr glm::bvec3 B2(false);\n\t\tstatic_assert(A1 == A2 && B1 == B2, \"GLM: Failed constexpr\");\n\t\tstatic_assert(A1 == A2 || B1 == B2, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(1);\n\t\tconstexpr glm::ivec3 B = A + 1;\n\t\tconstexpr glm::ivec3 C(3);\n\t\tstatic_assert(A + B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 D = +A;\n\t\tstatic_assert(D == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(3);\n\t\tconstexpr glm::ivec3 B = A - 1;\n\t\tconstexpr glm::ivec3 C(1);\n\t\tstatic_assert(A - B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 D = -A;\n\t\tstatic_assert(-D == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(3);\n\t\tconstexpr glm::ivec3 B = A * 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 C(1);\n\t\tstatic_assert(B * C == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(3);\n\t\tconstexpr glm::ivec3 B = A / 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec3 C(1);\n\t\tstatic_assert(B / C == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(3);\n\t\tconstexpr glm::ivec3 B = A % 2;\n\t\tconstexpr glm::ivec3 C(1);\n\t\tstatic_assert(B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 D(2);\n\t\tstatic_assert(A % D == C, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(1);\n\t\tconstexpr glm::ivec3 B = A & 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A == (A & C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(1);\n\t\tconstexpr glm::ivec3 B = A | 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A == (A | C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(1);\n\t\tconstexpr glm::ivec3 B = A ^ 0;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(0);\n\t\tstatic_assert(A == (A ^ C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(1);\n\t\tconstexpr glm::ivec3 B = A << 1;\n\t\tstatic_assert(B == glm::ivec3(2), \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == (A << C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(2);\n\t\tconstexpr glm::ivec3 B = A >> 1;\n\t\tstatic_assert(B == glm::ivec3(1), \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == A >> C, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec3 A(~0);\n\t\tconstexpr glm::ivec3 B = ~A;\n\t\tstatic_assert(A == ~B, \"GLM: Failed constexpr\");\n\t}\n\n\treturn Error;\n}\n\nstatic int test_vec4()\n{\n\tint Error = 0;\n\t\n\t{\n\t\tconstexpr glm::bvec4 B(true);\n\t\tconstexpr bool A = glm::all(B);\n\t\tstatic_assert(A, \"GLM: Failed constexpr\");\n\t\t\n\t\tconstexpr glm::bvec4 D(true, false, true, false);\n\t\tconstexpr bool C = glm::any(D);\n\t\tstatic_assert(C, \"GLM: Failed constexpr\");\n\t}\n\t\n\t{\n\t\tconstexpr glm::bvec4 C(true);\n\t\tconstexpr glm::bvec4 B(true, false, true, false);\n\t\tstatic_assert(glm::any(glm::equal(C, B)), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 O(glm::ivec4(1));\n\t\tstatic_assert(glm::ivec4(1) == O, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 A(1);\n\t\tstatic_assert(glm::ivec4(1) == A, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 N(glm::ivec4(1, 2, 3, 4));\n\t\tstatic_assert(glm::ivec4(1, 2, 3, 4) == N, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(glm::ivec3(1, 2, 3), 4);\n\t\tstatic_assert(glm::ivec4(1, 2, 3, 4) == A, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 B(glm::ivec2(1, 2), glm::ivec2(3, 4));\n\t\tstatic_assert(glm::ivec4(1, 2, 3, 4) == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 C(1, glm::ivec3(2, 3, 4));\n\t\tstatic_assert(glm::ivec4(1, 2, 3, 4) == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 D(glm::ivec1(1), glm::ivec2(2, 3), glm::ivec1(4));\n\t\tstatic_assert(glm::ivec4(1, 2, 3, 4) == D, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 E(glm::ivec2(1, 2), glm::ivec1(3), glm::ivec1(4));\n\t\tstatic_assert(glm::ivec4(1, 2, 3, 4) == E, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 F(glm::ivec1(1), glm::ivec1(2), glm::ivec2(3, 4));\n\t\tstatic_assert(glm::ivec4(1, 2, 3, 4) == F, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(1);\n\t\tstatic_assert(A[0] == 1, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::ivec4(1).x > 0, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::ivec4(1.0f, -1.0f, -1.0f, 1.0f).x > 0, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::ivec4(1.0f, -1.0f, -1.0f, 1.0f).y < 0, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::ivec4::length() == 4, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::bvec4 A1(true);\n\t\tconstexpr glm::bvec4 A2(true);\n\t\tconstexpr glm::bvec4 B1(false);\n\t\tconstexpr glm::bvec4 B2(false);\n\t\tstatic_assert(A1 == A2 && B1 == B2, \"GLM: Failed constexpr\");\n\t\tstatic_assert(A1 == A2 || B1 == B2, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(1);\n\t\tconstexpr glm::ivec4 B = A + 1;\n\t\tconstexpr glm::ivec4 C(3);\n\t\tstatic_assert(A + B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 D = +A;\n\t\tstatic_assert(D == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(3);\n\t\tconstexpr glm::ivec4 B = A - 1;\n\t\tconstexpr glm::ivec4 C(1);\n\t\tstatic_assert(A - B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 D = -A;\n\t\tstatic_assert(-D == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(3);\n\t\tconstexpr glm::ivec4 B = A * 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 C(1);\n\t\tstatic_assert(B * C == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(3);\n\t\tconstexpr glm::ivec4 B = A / 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec4 C(1);\n\t\tstatic_assert(B / C == A, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(3);\n\t\tconstexpr glm::ivec4 B = A % 2;\n\t\tconstexpr glm::ivec4 C(1);\n\t\tstatic_assert(B == C, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 D(2);\n\t\tstatic_assert(A % D == C, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(1);\n\t\tconstexpr glm::ivec4 B = A & 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A == (A & C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(1);\n\t\tconstexpr glm::ivec4 B = A | 1;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(A == (A | C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(1);\n\t\tconstexpr glm::ivec4 B = A ^ 0;\n\t\tstatic_assert(A == B, \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(0);\n\t\tstatic_assert(A == (A ^ C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(1);\n\t\tconstexpr glm::ivec4 B = A << 1;\n\t\tstatic_assert(B == glm::ivec4(2), \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == (A << C), \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(2);\n\t\tconstexpr glm::ivec4 B = A >> 1;\n\t\tstatic_assert(B == glm::ivec4(1), \"GLM: Failed constexpr\");\n\n\t\tconstexpr glm::ivec1 C(1);\n\t\tstatic_assert(B == A >> C, \"GLM: Failed constexpr\");\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 A(~0);\n\t\tconstexpr glm::ivec4 B = ~A;\n\t\tstatic_assert(A == ~B, \"GLM: Failed constexpr\");\n\t}\n\n\treturn Error;\n}\n\nstatic int test_quat()\n{\n\tint Error = 0;\n\n\t{\n\t\tstatic_assert(glm::quat::length() == 4, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::quat(1.0f, glm::vec3(0.0f)).w > 0.0f, \"GLM: Failed constexpr\");\n\t\tstatic_assert(glm::quat(1.0f, 0.0f, 0.0f, 0.0f).w > 0.0f, \"GLM: Failed constexpr\");\n\n\t\tglm::quat constexpr Q = glm::identity<glm::quat>();\n\t\tstatic_assert(Q.x - glm::quat(1.0f, glm::vec3(0.0f)).x <= glm::epsilon<float>(), \"GLM: Failed constexpr\");\n\t}\n\n\treturn Error;\n}\n\nstatic int test_mat2x2()\n{\n\tint Error = 0;\n\n\tstatic_assert(glm::mat2x2::length() == 2, \"GLM: Failed constexpr\");\n\n\treturn Error;\n}\n\n#endif//GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\nint main()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\t\tError += test_vec1();\n\t\tError += test_vec2();\n\t\tError += test_vec3();\n\t\tError += test_vec4();\n\t\tError += test_quat();\n\t\tError += test_mat2x2();\n#\tendif//GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_cpp_defaulted_ctor.cpp",
    "content": "#include <glm/glm.hpp>\n\n#if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/quaternion.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <cstring>\n\nstatic int test_vec_memcpy()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::ivec1 const A = glm::ivec1(76);\n\t\tglm::ivec1 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::ivec1));\n\t\tError += B == A ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec2 const A = glm::ivec2(76);\n\t\tglm::ivec2 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::ivec2));\n\t\tError += B == A ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 const A = glm::ivec3(76);\n\t\tglm::ivec3 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::ivec3));\n\t\tError += B == A ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 const A = glm::ivec4(76);\n\t\tglm::ivec4 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::ivec4));\n\t\tError += B == A ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_mat_memcpy()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::mat2x2 const A = glm::mat2x2(76);\n\t\tglm::mat2x2 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat2x2));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat2x3 const A = glm::mat2x3(76);\n\t\tglm::mat2x3 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat2x3));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat2x4 const A = glm::mat2x4(76);\n\t\tglm::mat2x4 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat2x4));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat3x2 const A = glm::mat3x2(76);\n\t\tglm::mat3x2 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat3x2));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat3x3 const A = glm::mat3x3(76);\n\t\tglm::mat3x3 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat3x3));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat3x4 const A = glm::mat3x4(76);\n\t\tglm::mat3x4 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat3x4));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat4x2 const A = glm::mat4x2(76);\n\t\tglm::mat4x2 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat4x2));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat4x3 const A = glm::mat4x3(76);\n\t\tglm::mat4x3 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat4x3));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat4x4 const A = glm::mat4x4(76);\n\t\tglm::mat4x4 B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::mat4x4));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_quat_memcpy()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::quat const A = glm::quat(1, 0, 0, 0);\n\t\tglm::quat B;\n\t\tstd::memcpy(&B, &A, sizeof(glm::quat));\n\t\tError += glm::all(glm::equal(B, A, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\n#endif//GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\nint main()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\t\tError += test_vec_memcpy();\n\t\tError += test_mat_memcpy();\n\t\tError += test_quat_memcpy();\n#\tendif//GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_force_aligned_gentypes.cpp",
    "content": "#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_force_arch_unknown.cpp",
    "content": "#ifndef GLM_FORCE_ARCH_UNKNOWN\n#\tdefine GLM_FORCE_ARCH_UNKNOWN\n#endif\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_force_compiler_unknown.cpp",
    "content": "#ifndef GLM_FORCE_COMPILER_UNKNOWN\n#\tdefine GLM_FORCE_COMPILER_UNKNOWN\n#endif\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_force_ctor_init.cpp",
    "content": "#define GLM_FORCE_CTOR_INIT\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nstatic int test_vec()\n{\n\tint Error = 0;\n\n\tglm::vec1 V1;\n\tError += glm::all(glm::equal(V1, glm::vec1(0), glm::epsilon<float>())) ? 0 : 1;\n\n\tglm::dvec1 U1;\n\tError += glm::all(glm::equal(U1, glm::dvec1(0), glm::epsilon<double>())) ? 0 : 1;\n\n\tglm::vec2 V2;\n\tError += glm::all(glm::equal(V2, glm::vec2(0, 0), glm::epsilon<float>())) ? 0 : 1;\n\n\tglm::dvec2 U2;\n\tError += glm::all(glm::equal(U2, glm::dvec2(0, 0), glm::epsilon<double>())) ? 0 : 1;\n\n\tglm::vec3 V3;\n\tError += glm::all(glm::equal(V3, glm::vec3(0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\n\tglm::dvec3 U3;\n\tError += glm::all(glm::equal(U3, glm::dvec3(0, 0, 0), glm::epsilon<double>())) ? 0 : 1;\n\n\tglm::vec4 V4;\n\tError += glm::all(glm::equal(V4, glm::vec4(0, 0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\n\tglm::dvec4 U4;\n\tError += glm::all(glm::equal(U4, glm::dvec4(0, 0, 0, 0), glm::epsilon<double>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_mat()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::mat2x2 F;\n\t\tError += glm::all(glm::equal(F, glm::mat2x2(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat2x2 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat2x2(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat2x3 F;\n\t\tError += glm::all(glm::equal(F, glm::mat2x3(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat2x3 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat2x3(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat2x4 F;\n\t\tError += glm::all(glm::equal(F, glm::mat2x4(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat2x4 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat2x4(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat3x2 F;\n\t\tError += glm::all(glm::equal(F, glm::mat3x2(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat3x2 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat3x2(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat3x3 F;\n\t\tError += glm::all(glm::equal(F, glm::mat3x3(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat3x3 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat3x3(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat3x4 F;\n\t\tError += glm::all(glm::equal(F, glm::mat3x4(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat3x4 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat3x4(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat4x2 F;\n\t\tError += glm::all(glm::equal(F, glm::mat4x2(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat4x2 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat4x2(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat4x3 F;\n\t\tError += glm::all(glm::equal(F, glm::mat4x3(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat4x3 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat4x3(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat4x4 F;\n\t\tError += glm::all(glm::equal(F, glm::mat4x4(1), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::dmat4x4 D;\n\t\tError += glm::all(glm::equal(D, glm::dmat4x4(1), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_qua()\n{\n\tint Error = 0;\n\n\tglm::quat F;\n\tError += glm::all(glm::equal(F, glm::quat(1, 0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\n\tglm::dquat D;\n\tError += glm::all(glm::equal(D, glm::dquat(1, 0, 0, 0), glm::epsilon<double>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_vec();\n\tError += test_mat();\n\tError += test_qua();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_force_cxx03.cpp",
    "content": "#ifndef GLM_FORCE_CXX03\n#\tdefine GLM_FORCE_CXX03\n#endif\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_force_cxx98.cpp",
    "content": "#ifndef GLM_FORCE_CXX98\n#\tdefine GLM_FORCE_CXX98\n#endif\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_force_cxx_unknown.cpp",
    "content": "#ifndef GLM_FORCE_CXX_UNKNOWN\n#\tdefine GLM_FORCE_CXX_UNKNOWN\n#endif\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_force_depth_zero_to_one.cpp",
    "content": "#define GLM_FORCE_DEPTH_ZERO_TO_ONE\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_force_explicit_ctor.cpp",
    "content": "#define GLM_FORCE_EXPLICIT_CTOR\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\tglm::ivec4 B(1);\n\tError += B == glm::ivec4(1) ? 0 : 1;\n\n\t//glm::vec4 A = B;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_force_inline.cpp",
    "content": "#define GLM_FORCE_INLINE\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_force_left_handed.cpp",
    "content": "#define GLM_FORCE_LEFT_HANDED\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_force_platform_unknown.cpp",
    "content": "#ifndef GLM_FORCE_PLATFORM_UNKNOWN\n#\tdefine GLM_FORCE_PLATFORM_UNKNOWN\n#endif\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_force_pure.cpp",
    "content": "#ifndef GLM_FORCE_PURE\n#\tdefine GLM_FORCE_PURE\n#endif//GLM_FORCE_PURE\n#define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES\n#define GLM_FORCE_SWIZZLE\n#include <glm/ext/vector_relational.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/vec2.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec4.hpp>\n#include <ctime>\n#include <vector>\n\nstatic int test_vec4_ctor()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::ivec4 A(1, 2, 3, 4);\n\t\tglm::ivec4 B(A);\n\t\tError += glm::all(glm::equal(A, B)) ? 0 : 1;\n\t}\n\n#\tif GLM_HAS_TRIVIAL_QUERIES\n\t//\tError += std::is_trivially_default_constructible<glm::vec4>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::vec4>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::vec4>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::dvec4>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::ivec4>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::uvec4>::value ? 0 : 1;\n\n\t\tError += std::is_copy_constructible<glm::vec4>::value ? 0 : 1;\n#\tendif\n\n#if GLM_HAS_INITIALIZER_LISTS\n\t{\n\t\tglm::vec4 a{ 0, 1, 2, 3 };\n\t\tstd::vector<glm::vec4> v = {\n\t\t\t{0, 1, 2, 3},\n\t\t\t{4, 5, 6, 7},\n\t\t\t{8, 9, 0, 1}};\n\t}\n\n\t{\n\t\tglm::dvec4 a{ 0, 1, 2, 3 };\n\t\tstd::vector<glm::dvec4> v = {\n\t\t\t{0, 1, 2, 3},\n\t\t\t{4, 5, 6, 7},\n\t\t\t{8, 9, 0, 1}};\n\t}\n#endif\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::ivec4 A = glm::vec4(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = A.xyzw;\n\t\tglm::ivec4 C(A.xyzw);\n\t\tglm::ivec4 D(A.xyzw());\n\t\tglm::ivec4 E(A.x, A.yzw);\n\t\tglm::ivec4 F(A.x, A.yzw());\n\t\tglm::ivec4 G(A.xyz, A.w);\n\t\tglm::ivec4 H(A.xyz(), A.w);\n\t\tglm::ivec4 I(A.xy, A.zw);\n\t\tglm::ivec4 J(A.xy(), A.zw());\n\t\tglm::ivec4 K(A.x, A.y, A.zw);\n\t\tglm::ivec4 L(A.x, A.yz, A.w);\n\t\tglm::ivec4 M(A.xy, A.z, A.w);\n\n\t\tError += glm::all(glm::equal(A, B)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, D)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, E)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, F)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, G)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, H)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, I)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, J)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, K)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, L)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, M)) ? 0 : 1;\n\t}\n#\tendif\n\n#\tif GLM_CONFIG_SWIZZLE\n\t{\n\t\tglm::ivec4 A = glm::vec4(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = A.xyzw();\n\t\tglm::ivec4 C(A.xyzw());\n\t\tglm::ivec4 D(A.xyzw());\n\t\tglm::ivec4 E(A.x, A.yzw());\n\t\tglm::ivec4 F(A.x, A.yzw());\n\t\tglm::ivec4 G(A.xyz(), A.w);\n\t\tglm::ivec4 H(A.xyz(), A.w);\n\t\tglm::ivec4 I(A.xy(), A.zw());\n\t\tglm::ivec4 J(A.xy(), A.zw());\n\t\tglm::ivec4 K(A.x, A.y, A.zw());\n\t\tglm::ivec4 L(A.x, A.yz(), A.w);\n\t\tglm::ivec4 M(A.xy(), A.z, A.w);\n\n\t\tError += glm::all(glm::equal(A, B)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, D)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, E)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, F)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, G)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, H)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, I)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, J)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, K)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, L)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, M)) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE\n\n\t{\n\t\tglm::ivec4 A(1);\n\t\tglm::ivec4 B(1, 1, 1, 1);\n\t\t\n\t\tError += A == B ? 0 : 1;\n\t}\n\t\n\t{\n\t\tstd::vector<glm::ivec4> Tests;\n\t\tTests.push_back(glm::ivec4(glm::ivec2(1, 2), 3, 4));\n\t\tTests.push_back(glm::ivec4(1, glm::ivec2(2, 3), 4));\n\t\tTests.push_back(glm::ivec4(1, 2, glm::ivec2(3, 4)));\n\t\tTests.push_back(glm::ivec4(glm::ivec3(1, 2, 3), 4));\n\t\tTests.push_back(glm::ivec4(1, glm::ivec3(2, 3, 4)));\n\t\tTests.push_back(glm::ivec4(glm::ivec2(1, 2), glm::ivec2(3, 4)));\n\t\tTests.push_back(glm::ivec4(1, 2, 3, 4));\n\t\tTests.push_back(glm::ivec4(glm::ivec4(1, 2, 3, 4)));\n\t\t\n\t\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t\t\tError += Tests[i] == glm::ivec4(1, 2, 3, 4) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nstatic int test_bvec4_ctor()\n{\n\tint Error = 0;\n\n\tglm::bvec4 const A(true);\n\tglm::bvec4 const B(true);\n\tglm::bvec4 const C(false);\n\tglm::bvec4 const D = A && B;\n\tglm::bvec4 const E = A && C;\n\tglm::bvec4 const F = A || C;\n\n\tError += D == glm::bvec4(true) ? 0 : 1;\n\tError += E == glm::bvec4(false) ? 0 : 1;\n\tError += F == glm::bvec4(true) ? 0 : 1;\n\n\tbool const G = A == C;\n\tbool const H = A != C;\n\n\tError += !G ? 0 : 1;\n\tError += H ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_vec4_operators()\n{\n\tint Error = 0;\n\t\n\t{\n\t\tglm::ivec4 A(1);\n\t\tglm::ivec4 B(1);\n\t\tbool R = A != B;\n\t\tbool S = A == B;\n\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec4 const A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::vec4 const B(4.0f, 5.0f, 6.0f, 7.0f);\n\n\t\tglm::vec4 const C = A + B;\n\t\tError += glm::all(glm::equal(C, glm::vec4(5, 7, 9, 11), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 D = B - A;\n\t\tError += glm::all(glm::equal(D, glm::vec4(3, 3, 3, 3), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 E = A * B;\n\t\tError += glm::all(glm::equal(E, glm::vec4(4, 10, 18, 28), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 F = B / A;\n\t\tError += glm::all(glm::equal(F, glm::vec4(4, 2.5, 2, 7.0f / 4.0f), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 G = A + 1.0f;\n\t\tError += glm::all(glm::equal(G, glm::vec4(2, 3, 4, 5), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 H = B - 1.0f;\n\t\tError += glm::all(glm::equal(H, glm::vec4(3, 4, 5, 6), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 I = A * 2.0f;\n\t\tError += glm::all(glm::equal(I, glm::vec4(2, 4, 6, 8), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 J = B / 2.0f;\n\t\tError += glm::all(glm::equal(J, glm::vec4(2, 2.5, 3, 3.5), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 K = 1.0f + A;\n\t\tError += glm::all(glm::equal(K, glm::vec4(2, 3, 4, 5), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 L = 1.0f - B;\n\t\tError += glm::all(glm::equal(L, glm::vec4(-3, -4, -5, -6), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 M = 2.0f * A;\n\t\tError += glm::all(glm::equal(M, glm::vec4(2, 4, 6, 8), 0.001f)) ? 0 : 1;\n\n\t\tglm::vec4 const N = 2.0f / B;\n\t\tError += glm::all(glm::equal(N, glm::vec4(0.5, 2.0 / 5.0, 2.0 / 6.0, 2.0 / 7.0), 0.0001f)) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B(4.0f, 5.0f, 6.0f, 7.0f);\n\n\t\tA += B;\n\t\tError += A == glm::ivec4(5, 7, 9, 11) ? 0 : 1;\n\n\t\tA += 1;\n\t\tError += A == glm::ivec4(6, 8, 10, 12) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B(4.0f, 5.0f, 6.0f, 7.0f);\n\n\t\tB -= A;\n\t\tError += B == glm::ivec4(3, 3, 3, 3) ? 0 : 1;\n\n\t\tB -= 1;\n\t\tError += B == glm::ivec4(2, 2, 2, 2) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B(4.0f, 5.0f, 6.0f, 7.0f);\n\n\t\tA *= B;\n\t\tError += A == glm::ivec4(4, 10, 18, 28) ? 0 : 1;\n\n\t\tA *= 2;\n\t\tError += A == glm::ivec4(8, 20, 36, 56) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B(4.0f, 4.0f, 6.0f, 8.0f);\n\n\t\tB /= A;\n\t\tError += B == glm::ivec4(4, 2, 2, 2) ? 0 : 1;\n\n\t\tB /= 2;\n\t\tError += B == glm::ivec4(2, 1, 1, 1) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 B(2);\n\n\t\tB /= B.y;\n\t\tError += B == glm::ivec4(1) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = -A;\n\t\tError += B == glm::ivec4(-1.0f, -2.0f, -3.0f, -4.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = --A;\n\t\tError += B == glm::ivec4(0.0f, 1.0f, 2.0f, 3.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = A--;\n\t\tError += B == glm::ivec4(1.0f, 2.0f, 3.0f, 4.0f) ? 0 : 1;\n\t\tError += A == glm::ivec4(0.0f, 1.0f, 2.0f, 3.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = ++A;\n\t\tError += B == glm::ivec4(2.0f, 3.0f, 4.0f, 5.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = A++;\n\t\tError += B == glm::ivec4(1.0f, 2.0f, 3.0f, 4.0f) ? 0 : 1;\n\t\tError += A == glm::ivec4(2.0f, 3.0f, 4.0f, 5.0f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_vec4_equal()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::uvec4 const A(1, 2, 3, 4);\n\t\tglm::uvec4 const B(1, 2, 3, 4);\n\t\tError += A == B ? 0 : 1;\n\t\tError += A != B ? 1 : 0;\n\t}\n\n\t{\n\t\tglm::ivec4 const A(1, 2, 3, 4);\n\t\tglm::ivec4 const B(1, 2, 3, 4);\n\t\tError += A == B ? 0 : 1;\n\t\tError += A != B ? 1 : 0;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_vec4_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::vec4) == sizeof(glm::lowp_vec4) ? 0 : 1;\n\tError += sizeof(glm::vec4) == sizeof(glm::mediump_vec4) ? 0 : 1;\n\tError += sizeof(glm::vec4) == sizeof(glm::highp_vec4) ? 0 : 1;\n\tError += 16 == sizeof(glm::mediump_vec4) ? 0 : 1;\n\tError += sizeof(glm::dvec4) == sizeof(glm::lowp_dvec4) ? 0 : 1;\n\tError += sizeof(glm::dvec4) == sizeof(glm::mediump_dvec4) ? 0 : 1;\n\tError += sizeof(glm::dvec4) == sizeof(glm::highp_dvec4) ? 0 : 1;\n\tError += 32 == sizeof(glm::highp_dvec4) ? 0 : 1;\n\tError += glm::vec4().length() == 4 ? 0 : 1;\n\tError += glm::dvec4().length() == 4 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_vec4_swizzle_partial()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n\tglm::ivec4 A(1, 2, 3, 4);\n\n\t{\n\t\tglm::ivec4 B(A.xy, A.zw);\n\t\tError += A == B ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 B(A.xy, 3, 4);\n\t\tError += A == B ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 B(1, A.yz, 4);\n\t\tError += A == B ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 B(1, 2, A.zw);\n\t\tError += A == B ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 B(A.xyz, 4);\n\t\tError += A == B ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 B(1, A.yzw);\n\t\tError += A == B ? 0 : 1;\n\t}\n#\tendif\n\n\treturn Error;\n}\n\nstatic int test_operator_increment()\n{\n\tint Error(0);\n\n\tglm::ivec4 v0(1);\n\tglm::ivec4 v1(v0);\n\tglm::ivec4 v2(v0);\n\tglm::ivec4 v3 = ++v1;\n\tglm::ivec4 v4 = v2++;\n\n\tError += glm::all(glm::equal(v0, v4)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v2)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v3)) ? 0 : 1;\n\n\tint i0(1);\n\tint i1(i0);\n\tint i2(i0);\n\tint i3 = ++i1;\n\tint i4 = i2++;\n\n\tError += i0 == i4 ? 0 : 1;\n\tError += i1 == i2 ? 0 : 1;\n\tError += i1 == i3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_vec4_simd()\n{\n\tint Error = 0;\n\n\tglm::vec4 const a(std::clock(), std::clock(), std::clock(), std::clock());\n\tglm::vec4 const b(std::clock(), std::clock(), std::clock(), std::clock());\n\n\tglm::vec4 const c(b * a);\n\tglm::vec4 const d(a + c);\n\n\tError += glm::all(glm::greaterThanEqual(d, glm::vec4(0))) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_vec4_ctor();\n\tError += test_bvec4_ctor();\n\tError += test_vec4_size();\n\tError += test_vec4_operators();\n\tError += test_vec4_equal();\n\tError += test_vec4_swizzle_partial();\n\tError += test_vec4_simd();\n\tError += test_operator_increment();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_force_quat_xyzw.cpp",
    "content": "#define GLM_FORCE_QUAT_DATA_XYZW\n#define GLM_FORCE_INLINE\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_force_size_t_length.cpp",
    "content": "#define GLM_FORCE_SIZE_T_LENGTH\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_force_unrestricted_gentype.cpp",
    "content": "#define GLM_FORCE_UNRESTRICTED_GENTYPE\n\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_force_xyzw_only.cpp",
    "content": "#define GLM_FORCE_XYZW_ONLY\n\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/vec2.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec4.hpp>\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::ivec1 const A(1);\n\t\tError += A.x == 1 ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec2 const A(1, 2);\n\t\tError += A.x == 1 ? 0 : 1;\n\t\tError += A.y == 2 ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 const A(1, 2, 3);\n\t\tError += A.x == 1 ? 0 : 1;\n\t\tError += A.y == 2 ? 0 : 1;\n\t\tError += A.z == 3 ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 const A(1, 2, 3, 4);\n\t\tError += A.x == 1 ? 0 : 1;\n\t\tError += A.y == 2 ? 0 : 1;\n\t\tError += A.z == 3 ? 0 : 1;\n\t\tError += A.w == 4 ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_func_common.cpp",
    "content": "#define GLM_FORCE_EXPLICIT_CTOR\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/random.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_float1.hpp>\n#include <glm/common.hpp>\n#include <glm/vec4.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec2.hpp>\n#include <vector>\n#include <cstdio>\n#include <cmath>\n#include <ctime>\n\n// This file has divisions by zero to test isnan\n#if GLM_COMPILER & GLM_COMPILER_VC\n#\tpragma warning(disable : 4723)\n#endif\n\nnamespace floor_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tfloat A = 1.1f;\n\t\t\tfloat B = glm::floor(A);\n\t\t\tError += glm::equal(B, 1.f, 0.0001f) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tdouble A = 1.1;\n\t\t\tdouble B = glm::floor(A);\n\t\t\tError += glm::equal(B, 1.0, 0.0001) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec1 A(1.1f);\n\t\t\tglm::vec1 B = glm::floor(A);\n\n\t\t\tError += glm::all(glm::equal(B, glm::vec1(1.0), 0.0001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::dvec1 A(1.1);\n\t\t\tglm::dvec1 B = glm::floor(A);\n\n\t\t\tError += glm::all(glm::equal(B, glm::dvec1(1.0), 0.0001)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec2 A(1.1f);\n\t\t\tglm::vec2 B = glm::floor(A);\n\n\t\t\tError += glm::all(glm::equal(B, glm::vec2(1.0), 0.0001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::dvec2 A(1.1);\n\t\t\tglm::dvec2 B = glm::floor(A);\n\n\t\t\tError += glm::all(glm::equal(B, glm::dvec2(1.0), 0.0001)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec3 A(1.1f);\n\t\t\tglm::vec3 B = glm::floor(A);\n\n\t\t\tError += glm::all(glm::equal(B, glm::vec3(1.0), 0.0001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::dvec3 A(1.1);\n\t\t\tglm::dvec3 B = glm::floor(A);\n\n\t\t\tError += glm::all(glm::equal(B, glm::dvec3(1.0), 0.0001)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 A(1.1f);\n\t\t\tglm::vec4 B = glm::floor(A);\n\n\t\t\tError += glm::all(glm::equal(B, glm::vec4(1.0), 0.0001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::dvec4 A(1.1);\n\t\t\tglm::dvec4 B = glm::floor(A);\n\n\t\t\tError += glm::all(glm::equal(B, glm::dvec4(1.0), 0.0001)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace floor\n\nnamespace modf_\n{\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\n\t\t{\n\t\t\tfloat X(1.5f);\n\t\t\tfloat I(0.0f);\n\t\t\tfloat A = glm::modf(X, I);\n\n\t\t\tError += glm::equal(I, 1.0f, 0.0001f) ? 0 : 1;\n\t\t\tError += glm::equal(A, 0.5f, 0.0001f) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 X(1.1f, 1.2f, 1.5f, 1.7f);\n\t\t\tglm::vec4 I(0.0f);\n\t\t\tglm::vec4 A = glm::modf(X, I);\n\n\t\t\tError += glm::ivec4(I) == glm::ivec4(1) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(A, glm::vec4(0.1f, 0.2f, 0.5f, 0.7f), 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::dvec4 X(1.1, 1.2, 1.5, 1.7);\n\t\t\tglm::dvec4 I(0.0);\n\t\t\tglm::dvec4 A = glm::modf(X, I);\n\n\t\t\tError += glm::ivec4(I) == glm::ivec4(1) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(A, glm::dvec4(0.1, 0.2, 0.5, 0.7), 0.000000001)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tdouble X(1.5);\n\t\t\tdouble I(0.0);\n\t\t\tdouble A = glm::modf(X, I);\n\n\t\t\tError += glm::equal(I, 1.0, 0.0001) ? 0 : 1;\n\t\t\tError += glm::equal(A, 0.5, 0.0001) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace modf\n\nnamespace mod_\n{\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\n\t\t{\n\t\t\tfloat A(1.5f);\n\t\t\tfloat B(1.0f);\n\t\t\tfloat C = glm::mod(A, B);\n\n\t\t\tError += glm::equal(C, 0.5f, 0.00001f) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tfloat A(-0.2f);\n\t\t\tfloat B(1.0f);\n\t\t\tfloat C = glm::mod(A, B);\n\n\t\t\tError += glm::equal(C, 0.8f, 0.00001f) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tfloat A(3.0);\n\t\t\tfloat B(2.0f);\n\t\t\tfloat C = glm::mod(A, B);\n\n\t\t\tError += glm::equal(C, 1.0f, 0.00001f) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 A(3.0);\n\t\t\tfloat B(2.0f);\n\t\t\tglm::vec4 C = glm::mod(A, B);\n\n\t\t\tError += glm::all(glm::equal(C, glm::vec4(1.0f), 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 A(3.0);\n\t\t\tglm::vec4 B(2.0f);\n\t\t\tglm::vec4 C = glm::mod(A, B);\n\n\t\t\tError += glm::all(glm::equal(C, glm::vec4(1.0f), 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace mod_\n\nnamespace floatBitsToInt\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\t\n\t\t{\n\t\t\tfloat A = 1.0f;\n\t\t\tint B = glm::floatBitsToInt(A);\n\t\t\tfloat C = glm::intBitsToFloat(B);\n\t\t\tError += glm::equal(A, C, 0.0001f) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec2 A(1.0f, 2.0f);\n\t\t\tglm::ivec2 B = glm::floatBitsToInt(A);\n\t\t\tglm::vec2 C = glm::intBitsToFloat(B);\n\t\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec3 A(1.0f, 2.0f, 3.0f);\n\t\t\tglm::ivec3 B = glm::floatBitsToInt(A);\n\t\t\tglm::vec3 C = glm::intBitsToFloat(B);\n\t\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\t\t}\n\t\n\t\t{\n\t\t\tglm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\t\tglm::ivec4 B = glm::floatBitsToInt(A);\n\t\t\tglm::vec4 C = glm::intBitsToFloat(B);\n\t\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\t\t}\n\t\n\t\treturn Error;\n\t}\n}//namespace floatBitsToInt\n\nnamespace floatBitsToUint\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\t\n\t\t{\n\t\t\tfloat A = 1.0f;\n\t\t\tglm::uint B = glm::floatBitsToUint(A);\n\t\t\tfloat C = glm::uintBitsToFloat(B);\n\t\t\tError += glm::equal(A, C, 0.0001f) ? 0 : 1;\n\t\t}\n\t\n\t\t{\n\t\t\tglm::vec2 A(1.0f, 2.0f);\n\t\t\tglm::uvec2 B = glm::floatBitsToUint(A);\n\t\t\tglm::vec2 C = glm::uintBitsToFloat(B);\n\t\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\t\t}\n\t\n\t\t{\n\t\t\tglm::vec3 A(1.0f, 2.0f, 3.0f);\n\t\t\tglm::uvec3 B = glm::floatBitsToUint(A);\n\t\t\tglm::vec3 C = glm::uintBitsToFloat(B);\n\t\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\t\t}\n\t\n\t\t{\n\t\t\tglm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\t\tglm::uvec4 B = glm::floatBitsToUint(A);\n\t\t\tglm::vec4 C = glm::uintBitsToFloat(B);\n\t\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\t\t}\n\t\n\t\treturn Error;\n\t}\n}//namespace floatBitsToUint\n\nnamespace min_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec1 A0 = glm::min(glm::vec1(1), glm::vec1(1));\n\t\tbool A1 = glm::all(glm::equal(A0, glm::vec1(1), glm::epsilon<float>()));\n\t\tError += A1 ? 0 : 1;\n\n\t\tglm::vec2 B0 = glm::min(glm::vec2(1), glm::vec2(1));\n\t\tglm::vec2 B1 = glm::min(glm::vec2(1), 1.0f);\n\t\tbool B2 = glm::all(glm::equal(B0, B1, glm::epsilon<float>()));\n\t\tError += B2 ? 0 : 1;\n\n\t\tglm::vec3 C0 = glm::min(glm::vec3(1), glm::vec3(1));\n\t\tglm::vec3 C1 = glm::min(glm::vec3(1), 1.0f);\n\t\tbool C2 = glm::all(glm::equal(C0, C1, glm::epsilon<float>()));\n\t\tError += C2 ? 0 : 1;\n\n\t\tglm::vec4 D0 = glm::min(glm::vec4(1), glm::vec4(1));\n\t\tglm::vec4 D1 = glm::min(glm::vec4(1), 1.0f);\n\t\tbool D2 = glm::all(glm::equal(D0, D1, glm::epsilon<float>()));\n\t\tError += D2 ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint min_tern(int a, int b)\n\t{\n\t\treturn a < b ? a : b;\n\t}\n\n\tint min_int(int x, int y)\n\t{\n\t\treturn y ^ ((x ^ y) & -(x < y)); \n\t}\n\n\tstatic int perf(std::size_t Count)\n\t{\n\t\tstd::vector<int> A(Count);\n\t\tstd::vector<int> B(Count);\n\n\t\tstd::size_t const InternalCount = 200000;\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tA[i] = glm::linearRand(-1000, 1000);\n\t\t\tB[i] = glm::linearRand(-1000, 1000);\n\t\t}\n\n\t\tint Error = 0;\n\n\t\tglm::int32 SumA = 0;\n\t\t{\n\t\t\tstd::clock_t Timestamp0 = std::clock();\n\n\t\t\tfor (std::size_t j = 0; j < InternalCount; ++j)\n\t\t\tfor (std::size_t i = 0; i < Count; ++i)\n\t\t\t\tSumA += min_tern(A[i], B[i]);\n\n\t\t\tstd::clock_t Timestamp1 = std::clock();\n\n\t\t\tstd::printf(\"min_tern Time %d clocks\\n\", static_cast<int>(Timestamp1 - Timestamp0));\n\t\t}\n\n\t\tglm::int32 SumB = 0;\n\t\t{\n\t\t\tstd::clock_t Timestamp0 = std::clock();\n\n\t\t\tfor (std::size_t j = 0; j < InternalCount; ++j)\n\t\t\tfor (std::size_t i = 0; i < Count; ++i)\n\t\t\t\tSumB += min_int(A[i], B[i]);\n\n\t\t\tstd::clock_t Timestamp1 = std::clock();\n\n\t\t\tstd::printf(\"min_int Time %d clocks\\n\", static_cast<int>(Timestamp1 - Timestamp0));\n\t\t}\n\n\t\tError += SumA == SumB ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace min_\n\nnamespace max_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec1 A0 = glm::max(glm::vec1(1), glm::vec1(1));\n\t\tbool A1 = glm::all(glm::equal(A0, glm::vec1(1), glm::epsilon<float>()));\n\t\tError += A1 ? 0 : 1;\n\n\n\t\tglm::vec2 B0 = glm::max(glm::vec2(1), glm::vec2(1));\n\t\tglm::vec2 B1 = glm::max(glm::vec2(1), 1.0f);\n\t\tbool B2 = glm::all(glm::equal(B0, B1, glm::epsilon<float>()));\n\t\tError += B2 ? 0 : 1;\n\n\t\tglm::vec3 C0 = glm::max(glm::vec3(1), glm::vec3(1));\n\t\tglm::vec3 C1 = glm::max(glm::vec3(1), 1.0f);\n\t\tbool C2 = glm::all(glm::equal(C0, C1, glm::epsilon<float>()));\n\t\tError += C2 ? 0 : 1;\n\n\t\tglm::vec4 D0 = glm::max(glm::vec4(1), glm::vec4(1));\n\t\tglm::vec4 D1 = glm::max(glm::vec4(1), 1.0f);\n\t\tbool D2 = glm::all(glm::equal(D0, D1, glm::epsilon<float>()));\n\t\tError += D2 ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace max_\n\nnamespace clamp_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\treturn Error;\n\t}\n}//namespace clamp_\n\nnamespace mix_\n{\n\ttemplate<typename T, typename B>\n\tstruct entry\n\t{\n\t\tT x;\n\t\tT y;\n\t\tB a;\n\t\tT Result;\n\t};\n\n\tentry<float, bool> const TestBool[] =\n\t{\n\t\t{0.0f, 1.0f, false, 0.0f},\n\t\t{0.0f, 1.0f, true, 1.0f},\n\t\t{-1.0f, 1.0f, false, -1.0f},\n\t\t{-1.0f, 1.0f, true, 1.0f}\n\t};\n\n\tentry<float, float> const TestFloat[] =\n\t{\n\t\t{0.0f, 1.0f, 0.0f, 0.0f},\n\t\t{0.0f, 1.0f, 1.0f, 1.0f},\n\t\t{-1.0f, 1.0f, 0.0f, -1.0f},\n\t\t{-1.0f, 1.0f, 1.0f, 1.0f}\n\t};\n\n\tentry<glm::vec2, bool> const TestVec2Bool[] =\n\t{\n\t\t{glm::vec2(0.0f), glm::vec2(1.0f), false, glm::vec2(0.0f)},\n\t\t{glm::vec2(0.0f), glm::vec2(1.0f), true, glm::vec2(1.0f)},\n\t\t{glm::vec2(-1.0f), glm::vec2(1.0f), false, glm::vec2(-1.0f)},\n\t\t{glm::vec2(-1.0f), glm::vec2(1.0f), true, glm::vec2(1.0f)}\n\t};\n\n\tentry<glm::vec2, glm::bvec2> const TestBVec2[] =\n\t{\n\t\t{glm::vec2(0.0f), glm::vec2(1.0f), glm::bvec2(false), glm::vec2(0.0f)},\n\t\t{glm::vec2(0.0f), glm::vec2(1.0f), glm::bvec2(true), glm::vec2(1.0f)},\n\t\t{glm::vec2(-1.0f), glm::vec2(1.0f), glm::bvec2(false), glm::vec2(-1.0f)},\n\t\t{glm::vec2(-1.0f), glm::vec2(1.0f), glm::bvec2(true), glm::vec2(1.0f)},\n\t\t{glm::vec2(-1.0f), glm::vec2(1.0f), glm::bvec2(true, false), glm::vec2(1.0f, -1.0f)}\n\t};\n\n\tentry<glm::vec3, bool> const TestVec3Bool[] =\n\t{\n\t\t{glm::vec3(0.0f), glm::vec3(1.0f), false, glm::vec3(0.0f)},\n\t\t{glm::vec3(0.0f), glm::vec3(1.0f), true, glm::vec3(1.0f)},\n\t\t{glm::vec3(-1.0f), glm::vec3(1.0f), false, glm::vec3(-1.0f)},\n\t\t{glm::vec3(-1.0f), glm::vec3(1.0f), true, glm::vec3(1.0f)}\n\t};\n\n\tentry<glm::vec3, glm::bvec3> const TestBVec3[] =\n\t{\n\t\t{glm::vec3(0.0f), glm::vec3(1.0f), glm::bvec3(false), glm::vec3(0.0f)},\n\t\t{glm::vec3(0.0f), glm::vec3(1.0f), glm::bvec3(true), glm::vec3(1.0f)},\n\t\t{glm::vec3(-1.0f), glm::vec3(1.0f), glm::bvec3(false), glm::vec3(-1.0f)},\n\t\t{glm::vec3(-1.0f), glm::vec3(1.0f), glm::bvec3(true), glm::vec3(1.0f)},\n\t\t{glm::vec3(1.0f, 2.0f, 3.0f), glm::vec3(4.0f, 5.0f, 6.0f), glm::bvec3(true, false, true), glm::vec3(4.0f, 2.0f, 6.0f)}\n\t};\n\n\tentry<glm::vec4, bool> const TestVec4Bool[] = \n\t{\n\t\t{glm::vec4(0.0f), glm::vec4(1.0f), false, glm::vec4(0.0f)},\n\t\t{glm::vec4(0.0f), glm::vec4(1.0f), true, glm::vec4(1.0f)},\n\t\t{glm::vec4(-1.0f), glm::vec4(1.0f), false, glm::vec4(-1.0f)},\n\t\t{glm::vec4(-1.0f), glm::vec4(1.0f), true, glm::vec4(1.0f)}\n\t};\n\n\tentry<glm::vec4, glm::bvec4> const TestBVec4[] = \n\t{\n\t\t{glm::vec4(0.0f, 0.0f, 1.0f, 1.0f), glm::vec4(2.0f, 2.0f, 3.0f, 3.0f), glm::bvec4(false, true, false, true), glm::vec4(0.0f, 2.0f, 1.0f, 3.0f)},\n\t\t{glm::vec4(0.0f), glm::vec4(1.0f), glm::bvec4(true), glm::vec4(1.0f)},\n\t\t{glm::vec4(-1.0f), glm::vec4(1.0f), glm::bvec4(false), glm::vec4(-1.0f)},\n\t\t{glm::vec4(-1.0f), glm::vec4(1.0f), glm::bvec4(true), glm::vec4(1.0f)},\n\t\t{glm::vec4(1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(5.0f, 6.0f, 7.0f, 8.0f), glm::bvec4(true, false, true, false), glm::vec4(5.0f, 2.0f, 7.0f, 4.0f)}\n\t};\n\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\t// Float with bool\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < sizeof(TestBool) / sizeof(entry<float, bool>); ++i)\n\t\t\t{\n\t\t\t\tfloat Result = glm::mix(TestBool[i].x, TestBool[i].y, TestBool[i].a);\n\t\t\t\tError += glm::equal(Result, TestBool[i].Result, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t// Float with float\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < sizeof(TestFloat) / sizeof(entry<float, float>); ++i)\n\t\t\t{\n\t\t\t\tfloat Result = glm::mix(TestFloat[i].x, TestFloat[i].y, TestFloat[i].a);\n\t\t\t\tError += glm::equal(Result, TestFloat[i].Result, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t// vec2 with bool\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < sizeof(TestVec2Bool) / sizeof(entry<glm::vec2, bool>); ++i)\n\t\t\t{\n\t\t\t\tglm::vec2 Result = glm::mix(TestVec2Bool[i].x, TestVec2Bool[i].y, TestVec2Bool[i].a);\n\t\t\t\tError += glm::equal(Result.x, TestVec2Bool[i].Result.x, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.y, TestVec2Bool[i].Result.y, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t// vec2 with bvec2\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < sizeof(TestBVec2) / sizeof(entry<glm::vec2, glm::bvec2>); ++i)\n\t\t\t{\n\t\t\t\tglm::vec2 Result = glm::mix(TestBVec2[i].x, TestBVec2[i].y, TestBVec2[i].a);\n\t\t\t\tError += glm::equal(Result.x, TestBVec2[i].Result.x, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.y, TestBVec2[i].Result.y, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t// vec3 with bool\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < sizeof(TestVec3Bool) / sizeof(entry<glm::vec3, bool>); ++i)\n\t\t\t{\n\t\t\t\tglm::vec3 Result = glm::mix(TestVec3Bool[i].x, TestVec3Bool[i].y, TestVec3Bool[i].a);\n\t\t\t\tError += glm::equal(Result.x, TestVec3Bool[i].Result.x, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.y, TestVec3Bool[i].Result.y, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.z, TestVec3Bool[i].Result.z, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t// vec3 with bvec3\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < sizeof(TestBVec3) / sizeof(entry<glm::vec3, glm::bvec3>); ++i)\n\t\t\t{\n\t\t\t\tglm::vec3 Result = glm::mix(TestBVec3[i].x, TestBVec3[i].y, TestBVec3[i].a);\n\t\t\t\tError += glm::equal(Result.x, TestBVec3[i].Result.x, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.y, TestBVec3[i].Result.y, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.z, TestBVec3[i].Result.z, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t// vec4 with bool\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < sizeof(TestVec4Bool) / sizeof(entry<glm::vec4, bool>); ++i)\n\t\t\t{\n\t\t\t\tglm::vec4 Result = glm::mix(TestVec4Bool[i].x, TestVec4Bool[i].y, TestVec4Bool[i].a);\n\t\t\t\tError += glm::equal(Result.x, TestVec4Bool[i].Result.x, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.y, TestVec4Bool[i].Result.y, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.z, TestVec4Bool[i].Result.z, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.w, TestVec4Bool[i].Result.w, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t// vec4 with bvec4\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < sizeof(TestBVec4) / sizeof(entry<glm::vec4, glm::bvec4>); ++i)\n\t\t\t{\n\t\t\t\tglm::vec4 Result = glm::mix(TestBVec4[i].x, TestBVec4[i].y, TestBVec4[i].a);\n\t\t\t\tError += glm::equal(Result.x, TestBVec4[i].Result.x, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.y, TestBVec4[i].Result.y, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.z, TestBVec4[i].Result.z, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t\tError += glm::equal(Result.w, TestBVec4[i].Result.w, glm::epsilon<float>()) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace mix_\n\nnamespace step_\n{\n\ttemplate<typename EDGE, typename VEC>\n\tstruct entry\n\t{\n\t\tEDGE edge;\n\t\tVEC x;\n\t\tVEC result;\n\t};\n\n\tentry<float, glm::vec4> TestVec4Scalar [] =\n\t{\n\t\t{ 1.0f, glm::vec4(1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(1.0f) },\n\t\t{ 0.0f, glm::vec4(1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(1.0f) },\n\t\t{ 0.0f, glm::vec4(-1.0f, -2.0f, -3.0f, -4.0f), glm::vec4(0.0f) }\n\t};\n\n\tentry<glm::vec4, glm::vec4> TestVec4Vector [] =\n\t{\n\t\t{ glm::vec4(-1.0f, -2.0f, -3.0f, -4.0f), glm::vec4(-2.0f, -3.0f, -4.0f, -5.0f), glm::vec4(0.0f) },\n\t\t{ glm::vec4( 0.0f, 1.0f, 2.0f, 3.0f), glm::vec4( 1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(1.0f) },\n\t\t{ glm::vec4( 2.0f, 3.0f, 4.0f, 5.0f), glm::vec4( 1.0f, 2.0f, 3.0f, 4.0f), glm::vec4(0.0f) },\n\t\t{ glm::vec4( 0.0f, 1.0f, 2.0f, 3.0f), glm::vec4(-1.0f,-2.0f,-3.0f,-4.0f), glm::vec4(0.0f) }\n\t};\n\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\t// scalar\n\t\t{\n\t\t\tfloat const Edge = 2.0f;\n\n\t\t\tfloat const A = glm::step(Edge, 1.0f);\n\t\t\tError += glm::equal(A, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\n\t\t\tfloat const B = glm::step(Edge, 3.0f);\n\t\t\tError += glm::equal(B, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\n\t\t\tfloat const C = glm::step(Edge, 2.0f);\n\t\t\tError += glm::equal(C, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\n\t\t// vec4 and float\n\t\t{\n\t\t\tfor (std::size_t i = 0; i < sizeof(TestVec4Scalar) / sizeof(entry<float, glm::vec4>); ++i)\n\t\t\t{\n\t\t\t\tglm::vec4 Result = glm::step(TestVec4Scalar[i].edge, TestVec4Scalar[i].x);\n\t\t\t\tError += glm::all(glm::equal(Result, TestVec4Scalar[i].result, glm::epsilon<float>())) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t// vec4 and vec4\n\t\t{\n\t\t\tfor (std::size_t i = 0; i < sizeof(TestVec4Vector) / sizeof(entry<glm::vec4, glm::vec4>); ++i)\n\t\t\t{\n\t\t\t\tglm::vec4 Result = glm::step(TestVec4Vector[i].edge, TestVec4Vector[i].x);\n\t\t\t\tError += glm::all(glm::equal(Result, TestVec4Vector[i].result, glm::epsilon<float>())) ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace step_\n\nnamespace round_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tfloat A = glm::round(0.0f);\n\t\t\tError += glm::equal(A, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat B = glm::round(0.5f);\n\t\t\tError += (glm::equal(B, 1.0f, glm::epsilon<float>()) || glm::equal(B, 0.0f, glm::epsilon<float>())) ? 0 : 1;\n\t\t\tfloat C = glm::round(1.0f);\n\t\t\tError += glm::equal(C, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat D = glm::round(0.1f);\n\t\t\tError += glm::equal(D, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat E = glm::round(0.9f);\n\t\t\tError += glm::equal(E, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat F = glm::round(1.5f);\n\t\t\tError += glm::equal(F, 2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat G = glm::round(1.9f);\n\t\t\tError += glm::equal(G, 2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\t\n\t\t{\n\t\t\tfloat A = glm::round(-0.0f);\n\t\t\tError += glm::equal(A, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat B = glm::round(-0.5f);\n\t\t\tError += (glm::equal(B, -1.0f, glm::epsilon<float>()) || glm::equal(B, 0.0f, glm::epsilon<float>())) ? 0 : 1;\n\t\t\tfloat C = glm::round(-1.0f);\n\t\t\tError += glm::equal(C, -1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat D = glm::round(-0.1f);\n\t\t\tError += glm::equal(D, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat E = glm::round(-0.9f);\n\t\t\tError += glm::equal(E, -1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat F = glm::round(-1.5f);\n\t\t\tError += glm::equal(F, -2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat G = glm::round(-1.9f);\n\t\t\tError += glm::equal(G, -2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\t\n\t\treturn Error;\n\t}\n}//namespace round_\n\nnamespace roundEven\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tfloat A1 = glm::roundEven(-1.5f);\n\t\t\tError += glm::equal(A1, -2.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat A2 = glm::roundEven(1.5f);\n\t\t\tError += glm::equal(A2, 2.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat A5 = glm::roundEven(-2.5f);\n\t\t\tError += glm::equal(A5, -2.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat A6 = glm::roundEven(2.5f);\n\t\t\tError += glm::equal(A6, 2.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat A3 = glm::roundEven(-3.5f);\n\t\t\tError += glm::equal(A3, -4.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat A4 = glm::roundEven(3.5f);\n\t\t\tError += glm::equal(A4, 4.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat C7 = glm::roundEven(-4.5f);\n\t\t\tError += glm::equal(C7, -4.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat C8 = glm::roundEven(4.5f);\n\t\t\tError += glm::equal(C8, 4.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat C1 = glm::roundEven(-5.5f);\n\t\t\tError += glm::equal(C1, -6.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat C2 = glm::roundEven(5.5f);\n\t\t\tError += glm::equal(C2, 6.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat C3 = glm::roundEven(-6.5f);\n\t\t\tError += glm::equal(C3, -6.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat C4 = glm::roundEven(6.5f);\n\t\t\tError += glm::equal(C4, 6.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat C5 = glm::roundEven(-7.5f);\n\t\t\tError += glm::equal(C5, -8.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat C6 = glm::roundEven(7.5f);\n\t\t\tError += glm::equal(C6, 8.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tError += 0;\n\t\t}\n\n\t\t{\n\t\t\tfloat A7 = glm::roundEven(-2.4f);\n\t\t\tError += glm::equal(A7, -2.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat A8 = glm::roundEven(2.4f);\n\t\t\tError += glm::equal(A8, 2.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat B1 = glm::roundEven(-2.6f);\n\t\t\tError += glm::equal(B1, -3.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat B2 = glm::roundEven(2.6f);\n\t\t\tError += glm::equal(B2, 3.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat B3 = glm::roundEven(-2.0f);\n\t\t\tError += glm::equal(B3, -2.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tfloat B4 = glm::roundEven(2.0f);\n\t\t\tError += glm::equal(B4, 2.0f, 0.0001f) ? 0 : 1;\n\n\t\t\tError += 0;\n\t\t}\n\n\t\t{\n\t\t\tfloat A = glm::roundEven(0.0f);\n\t\t\tError += glm::equal(A, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat B = glm::roundEven(0.5f);\n\t\t\tError += glm::equal(B, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat C = glm::roundEven(1.0f);\n\t\t\tError += glm::equal(C, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat D = glm::roundEven(0.1f);\n\t\t\tError += glm::equal(D, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat E = glm::roundEven(0.9f);\n\t\t\tError += glm::equal(E, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat F = glm::roundEven(1.5f);\n\t\t\tError += glm::equal(F, 2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat G = glm::roundEven(1.9f);\n\t\t\tError += glm::equal(G, 2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tfloat A = glm::roundEven(-0.0f);\n\t\t\tError += glm::equal(A,  0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat B = glm::roundEven(-0.5f);\n\t\t\tError += glm::equal(B, -0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat C = glm::roundEven(-1.0f);\n\t\t\tError += glm::equal(C, -1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat D = glm::roundEven(-0.1f);\n\t\t\tError += glm::equal(D,  0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat E = glm::roundEven(-0.9f);\n\t\t\tError += glm::equal(E, -1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat F = glm::roundEven(-1.5f);\n\t\t\tError += glm::equal(F, -2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat G = glm::roundEven(-1.9f);\n\t\t\tError += glm::equal(G, -2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tfloat A = glm::roundEven(1.5f);\n\t\t\tError += glm::equal(A, 2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat B = glm::roundEven(2.5f);\n\t\t\tError += glm::equal(B, 2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat C = glm::roundEven(3.5f);\n\t\t\tError += glm::equal(C, 4.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat D = glm::roundEven(4.5f);\n\t\t\tError += glm::equal(D, 4.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat E = glm::roundEven(5.5f);\n\t\t\tError += glm::equal(E, 6.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat F = glm::roundEven(6.5f);\n\t\t\tError += glm::equal(F, 6.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat G = glm::roundEven(7.5f);\n\t\t\tError += glm::equal(G, 8.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\t\n\t\t{\n\t\t\tfloat A = glm::roundEven(-1.5f);\n\t\t\tError += glm::equal(A, -2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat B = glm::roundEven(-2.5f);\n\t\t\tError += glm::equal(B, -2.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat C = glm::roundEven(-3.5f);\n\t\t\tError += glm::equal(C, -4.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat D = glm::roundEven(-4.5f);\n\t\t\tError += glm::equal(D, -4.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat E = glm::roundEven(-5.5f);\n\t\t\tError += glm::equal(E, -6.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat F = glm::roundEven(-6.5f);\n\t\t\tError += glm::equal(F, -6.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tfloat G = glm::roundEven(-7.5f);\n\t\t\tError += glm::equal(G, -8.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace roundEven\n\nnamespace isnan_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tfloat Zero_f = 0.0;\n\t\tdouble Zero_d = 0.0;\n\n\t\t{\n\t\t\tError += true == glm::isnan(0.0/Zero_d) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isnan(glm::dvec2(0.0 / Zero_d))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isnan(glm::dvec3(0.0 / Zero_d))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isnan(glm::dvec4(0.0 / Zero_d))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tError += true == glm::isnan(0.0f/Zero_f) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isnan(glm::vec2(0.0f/Zero_f))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isnan(glm::vec3(0.0f/Zero_f))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isnan(glm::vec4(0.0f/Zero_f))) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace isnan_\n\nnamespace isinf_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tfloat Zero_f = 0.0;\n\t\tdouble Zero_d = 0.0;\n\n\t\t{\n\t\t\tError += true == glm::isinf( 1.0/Zero_d) ? 0 : 1;\n\t\t\tError += true == glm::isinf(-1.0/Zero_d) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::dvec2( 1.0/Zero_d))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::dvec2(-1.0/Zero_d))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::dvec3( 1.0/Zero_d))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::dvec3(-1.0/Zero_d))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::dvec4( 1.0/Zero_d))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::dvec4(-1.0/Zero_d))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tError += true == glm::isinf( 1.0f/Zero_f) ? 0 : 1;\n\t\t\tError += true == glm::isinf(-1.0f/Zero_f) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::vec2( 1.0f/Zero_f))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::vec2(-1.0f/Zero_f))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::vec3( 1.0f/Zero_f))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::vec3(-1.0f/Zero_f))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::vec4( 1.0f/Zero_f))) ? 0 : 1;\n\t\t\tError += true == glm::any(glm::isinf(glm::vec4(-1.0f/Zero_f))) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace isinf_\n\nnamespace sign\n{\n\ttemplate<typename genFIType> \n\tGLM_FUNC_QUALIFIER genFIType sign_if(genFIType x)\n\t{\n\t\tGLM_STATIC_ASSERT(\n\t\t\tstd::numeric_limits<genFIType>::is_iec559 ||\n\t\t\t(std::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer), \"'sign' only accept signed inputs\");\n\n\t\tgenFIType result;\n\t\tif(x > genFIType(0))\n\t\t\tresult = genFIType(1);\n\t\telse if(x < genFIType(0))\n\t\t\tresult = genFIType(-1);\n\t\telse\n\t\t\tresult = genFIType(0);\n\t\treturn result;\n\t}\n\n\ttemplate<typename genFIType> \n\tGLM_FUNC_QUALIFIER genFIType sign_alu1(genFIType x)\n\t{\n\t\tGLM_STATIC_ASSERT(\n\t\t\tstd::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer, \n\t\t\t\"'sign' only accept integer inputs\");\n\n\t\treturn (x >> 31) | (static_cast<unsigned>(-x) >> 31);\n\t}\n\n\tGLM_FUNC_QUALIFIER int sign_alu2(int x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<int>::is_signed && std::numeric_limits<int>::is_integer, \"'sign' only accept integer inputs\");\n\n#\t\tif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\tpragma warning(push)\n#\t\t\tpragma warning(disable : 4146) //cast truncates constant value\n#\t\tendif\n\n\t\treturn -(static_cast<unsigned>(x) >> 31) | (-static_cast<unsigned>(x) >> 31);\n\n#\t\tif GLM_COMPILER & GLM_COMPILER_VC\n#\t\t\tpragma warning(pop)\n#\t\tendif\n\t}\n\n\ttemplate<typename genFIType> \n\tGLM_FUNC_QUALIFIER genFIType sign_sub(genFIType x)\n\t{\n\t\tGLM_STATIC_ASSERT(\n\t\t\tstd::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer, \n\t\t\t\"'sign' only accept integer inputs\");\n\n\t\treturn (static_cast<unsigned>(-x) >> 31) - (static_cast<unsigned>(x) >> 31);\n\t}\n\n\ttemplate<typename genFIType> \n\tGLM_FUNC_QUALIFIER genFIType sign_cmp(genFIType x)\n\t{\n\t\tGLM_STATIC_ASSERT(\n\t\t\tstd::numeric_limits<genFIType>::is_signed && std::numeric_limits<genFIType>::is_integer, \n\t\t\t\"'sign' only accept integer inputs\");\n\n\t\treturn (x > 0) - (x < 0);\n\t}\n\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tgenType\t\tReturn;\n\t};\n\n\tint test_int32()\n\t{\n\t\ttype<glm::int32> const Data[] =\n\t\t{\n\t\t\t{ std::numeric_limits<glm::int32>::max(),  1},\n\t\t\t{ std::numeric_limits<glm::int32>::min(), -1},\n\t\t\t{ 0, 0},\n\t\t\t{ 1, 1},\n\t\t\t{ 2, 1},\n\t\t\t{ 3, 1},\n\t\t\t{-1,-1},\n\t\t\t{-2,-1},\n\t\t\t{-3,-1}\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::int32>); ++i)\n\t\t{\n\t\t\tglm::int32 Result = glm::sign(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::int32>); ++i)\n\t\t{\n\t\t\tglm::int32 Result = sign_cmp(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::int32>); ++i)\n\t\t{\n\t\t\tglm::int32 Result = sign_if(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::int32>); ++i)\n\t\t{\n\t\t\tglm::int32 Result = sign_alu1(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::int32>); ++i)\n\t\t{\n\t\t\tglm::int32 Result = sign_alu2(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_i32vec4()\n\t{\n\t\ttype<glm::ivec4> const Data[] =\n\t\t{\n\t\t\t{glm::ivec4( 1), glm::ivec4( 1)},\n\t\t\t{glm::ivec4( 0), glm::ivec4( 0)},\n\t\t\t{glm::ivec4( 2), glm::ivec4( 1)},\n\t\t\t{glm::ivec4( 3), glm::ivec4( 1)},\n\t\t\t{glm::ivec4(-1), glm::ivec4(-1)},\n\t\t\t{glm::ivec4(-2), glm::ivec4(-1)},\n\t\t\t{glm::ivec4(-3), glm::ivec4(-1)}\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::ivec4>); ++i)\n\t\t{\n\t\t\tglm::ivec4 Result = glm::sign(Data[i].Value);\n\t\t\tError += glm::all(glm::equal(Data[i].Return, Result)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_f32vec4()\n\t{\n\t\ttype<glm::vec4> const Data[] =\n\t\t{\n\t\t\t{glm::vec4( 1), glm::vec4( 1)},\n\t\t\t{glm::vec4( 0), glm::vec4( 0)},\n\t\t\t{glm::vec4( 2), glm::vec4( 1)},\n\t\t\t{glm::vec4( 3), glm::vec4( 1)},\n\t\t\t{glm::vec4(-1), glm::vec4(-1)},\n\t\t\t{glm::vec4(-2), glm::vec4(-1)},\n\t\t\t{glm::vec4(-3), glm::vec4(-1)}\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::vec4>); ++i)\n\t\t{\n\t\t\tglm::vec4 Result = glm::sign(Data[i].Value);\n\t\t\tError += glm::all(glm::equal(Data[i].Return, Result, glm::epsilon<float>())) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += test_int32();\n\t\tError += test_i32vec4();\n\t\tError += test_f32vec4();\n\n\t\treturn Error;\n\t}\n\n\tint perf_rand(std::size_t Samples)\n\t{\n\t\tint Error = 0;\n\n\t\tstd::size_t const Count = Samples;\n\t\tstd::vector<glm::int32> Input, Output;\n\t\tInput.resize(Count);\n\t\tOutput.resize(Count);\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tInput[i] = static_cast<glm::int32>(glm::linearRand(-65536.f, 65536.f));\n\n\t\tstd::clock_t Timestamp0 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_cmp(Input[i]);\n\n\t\tstd::clock_t Timestamp1 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_if(Input[i]);\n\n\t\tstd::clock_t Timestamp2 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_alu1(Input[i]);\n\n\t\tstd::clock_t Timestamp3 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_alu2(Input[i]);\n\n\t\tstd::clock_t Timestamp4 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_sub(Input[i]);\n\n\t\tstd::clock_t Timestamp5 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = glm::sign(Input[i]);\n\n\t\tstd::clock_t Timestamp6 = std::clock();\n\n\t\tstd::printf(\"sign_cmp(rand) Time %d clocks\\n\", static_cast<int>(Timestamp1 - Timestamp0));\n\t\tstd::printf(\"sign_if(rand) Time %d clocks\\n\", static_cast<int>(Timestamp2 - Timestamp1));\n\t\tstd::printf(\"sign_alu1(rand) Time %d clocks\\n\", static_cast<int>(Timestamp3 - Timestamp2));\n\t\tstd::printf(\"sign_alu2(rand) Time %d clocks\\n\", static_cast<int>(Timestamp4 - Timestamp3));\n\t\tstd::printf(\"sign_sub(rand) Time %d clocks\\n\", static_cast<int>(Timestamp5 - Timestamp4));\n\t\tstd::printf(\"glm::sign(rand) Time %d clocks\\n\", static_cast<int>(Timestamp6 - Timestamp5));\n\n\t\treturn Error;\n\t}\n\n\tint perf_linear(std::size_t Samples)\n\t{\n\t\tint Error = 0;\n\n\t\tstd::size_t const Count = Samples;\n\t\tstd::vector<glm::int32> Input, Output;\n\t\tInput.resize(Count);\n\t\tOutput.resize(Count);\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tInput[i] = static_cast<glm::int32>(i);\n\n\t\tstd::clock_t Timestamp0 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_cmp(Input[i]);\n\n\t\tstd::clock_t Timestamp1 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_if(Input[i]);\n\n\t\tstd::clock_t Timestamp2 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_alu1(Input[i]);\n\n\t\tstd::clock_t Timestamp3 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_alu2(Input[i]);\n\n\t\tstd::clock_t Timestamp4 = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\tOutput[i] = sign_sub(Input[i]);\n\n\t\tstd::clock_t Timestamp5 = std::clock();\n\n\t\tstd::printf(\"sign_cmp(linear) Time %d clocks\\n\", static_cast<int>(Timestamp1 - Timestamp0));\n\t\tstd::printf(\"sign_if(linear) Time %d clocks\\n\", static_cast<int>(Timestamp2 - Timestamp1));\n\t\tstd::printf(\"sign_alu1(linear) Time %d clocks\\n\", static_cast<int>(Timestamp3 - Timestamp2));\n\t\tstd::printf(\"sign_alu2(linear) Time %d clocks\\n\", static_cast<int>(Timestamp4 - Timestamp3));\n\t\tstd::printf(\"sign_sub(linear) Time %d clocks\\n\", static_cast<int>(Timestamp5 - Timestamp4));\n\n\t\treturn Error;\n\t}\n\n\tint perf_linear_cal(std::size_t Samples)\n\t{\n\t\tint Error = 0;\n\n\t\tglm::int32 const Count = static_cast<glm::int32>(Samples);\n\n\t\tstd::clock_t Timestamp0 = std::clock();\n\t\tglm::int32 Sum = 0;\n\n\t\tfor(glm::int32 i = 1; i < Count; ++i)\n\t\t\tSum += sign_cmp(i);\n\n\t\tstd::clock_t Timestamp1 = std::clock();\n\n\t\tfor(glm::int32 i = 1; i < Count; ++i)\n\t\t\tSum += sign_if(i);\n\n\t\tstd::clock_t Timestamp2 = std::clock();\n\n\t\tfor(glm::int32 i = 1; i < Count; ++i)\n\t\t\tSum += sign_alu1(i);\n\n\t\tstd::clock_t Timestamp3 = std::clock();\n\n\t\tfor(glm::int32 i = 1; i < Count; ++i)\n\t\t\tSum += sign_alu2(i);\n\n\t\tstd::clock_t Timestamp4 = std::clock();\n\n\t\tfor(glm::int32 i = 1; i < Count; ++i)\n\t\t\tSum += sign_sub(i);\n\n\t\tstd::clock_t Timestamp5 = std::clock();\n\n\t\tstd::printf(\"Sum %d\\n\", static_cast<int>(Sum));\n\n\t\tstd::printf(\"sign_cmp(linear_cal) Time %d clocks\\n\", static_cast<int>(Timestamp1 - Timestamp0));\n\t\tstd::printf(\"sign_if(linear_cal) Time %d clocks\\n\", static_cast<int>(Timestamp2 - Timestamp1));\n\t\tstd::printf(\"sign_alu1(linear_cal) Time %d clocks\\n\", static_cast<int>(Timestamp3 - Timestamp2));\n\t\tstd::printf(\"sign_alu2(linear_cal) Time %d clocks\\n\", static_cast<int>(Timestamp4 - Timestamp3));\n\t\tstd::printf(\"sign_sub(linear_cal) Time %d clocks\\n\", static_cast<int>(Timestamp5 - Timestamp4));\n\n\t\treturn Error;\n\t}\n\n\tstatic int perf(std::size_t Samples)\n\t{\n\t\tint Error(0);\n\n\t\tError += perf_linear_cal(Samples);\n\t\tError += perf_linear(Samples);\n\t\tError += perf_rand(Samples);\n\n\t\treturn Error;\n\t}\n}//namespace sign\n\nnamespace frexp_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tglm::vec1 const x(1024);\n\t\t\tglm::ivec1 exp;\n\t\t\tglm::vec1 A = glm::frexp(x, exp);\n\t\t\tError += glm::all(glm::equal(A, glm::vec1(0.5), glm::epsilon<float>())) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(exp, glm::ivec1(11))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec2 const x(1024, 0.24);\n\t\t\tglm::ivec2 exp;\n\t\t\tglm::vec2 A = glm::frexp(x, exp);\n\t\t\tError += glm::all(glm::equal(A, glm::vec2(0.5, 0.96), glm::epsilon<float>())) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(exp, glm::ivec2(11, -2))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec3 const x(1024, 0.24, 0);\n\t\t\tglm::ivec3 exp;\n\t\t\tglm::vec3 A = glm::frexp(x, exp);\n\t\t\tError += glm::all(glm::equal(A, glm::vec3(0.5, 0.96, 0.0), glm::epsilon<float>())) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(exp, glm::ivec3(11, -2, 0))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 const x(1024, 0.24, 0, -1.33);\n\t\t\tglm::ivec4 exp;\n\t\t\tglm::vec4 A = glm::frexp(x, exp);\n\t\t\tError += glm::all(glm::equal(A, glm::vec4(0.5, 0.96, 0.0, -0.665), glm::epsilon<float>())) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(exp, glm::ivec4(11, -2, 0, 1))) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace frexp_\n\nnamespace ldexp_\n{\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\n\t\t{\n\t\t\tglm::vec1 A = glm::vec1(0.5);\n\t\t\tglm::ivec1 exp = glm::ivec1(11);\n\t\t\tglm::vec1 x = glm::ldexp(A, exp);\n\t\t\tError += glm::all(glm::equal(x, glm::vec1(1024),0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec2 A = glm::vec2(0.5, 0.96);\n\t\t\tglm::ivec2 exp = glm::ivec2(11, -2);\n\t\t\tglm::vec2 x = glm::ldexp(A, exp);\n\t\t\tError += glm::all(glm::equal(x, glm::vec2(1024, .24),0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec3 A = glm::vec3(0.5, 0.96, 0.0);\n\t\t\tglm::ivec3 exp = glm::ivec3(11, -2, 0);\n\t\t\tglm::vec3 x = glm::ldexp(A, exp);\n\t\t\tError += glm::all(glm::equal(x, glm::vec3(1024, .24, 0),0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 A = glm::vec4(0.5, 0.96, 0.0, -0.665);\n\t\t\tglm::ivec4 exp = glm::ivec4(11, -2, 0, 1);\n\t\t\tglm::vec4 x = glm::ldexp(A, exp);\n\t\t\tError += glm::all(glm::equal(x, glm::vec4(1024, .24, 0, -1.33),0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace ldexp_\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::abs(1.0f) > 0.0f, \"GLM: Failed constexpr\");\n\tconstexpr glm::vec1 const A = glm::abs(glm::vec1(1.0f));\n\tconstexpr glm::vec2 const B = glm::abs(glm::vec2(1.0f));\n\tconstexpr glm::vec3 const C = glm::abs(glm::vec3(1.0f));\n\tconstexpr glm::vec4 const D = glm::abs(glm::vec4(1.0f));\n#endif // GLM_HAS_CONSTEXPR\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_constexpr();\n\tError += sign::test();\n\tError += floor_::test();\n\tError += mod_::test();\n\tError += modf_::test();\n\tError += floatBitsToInt::test();\n\tError += floatBitsToUint::test();\n\tError += mix_::test();\n\tError += step_::test();\n\tError += max_::test();\n\tError += min_::test();\n\tError += clamp_::test();\n\tError += round_::test();\n\tError += roundEven::test();\n\tError += isnan_::test();\n\tError += isinf_::test();\n\tError += frexp_::test();\n\tError += ldexp_::test();\n\n#\tifdef NDEBUG\n\t\tstd::size_t Samples = 1000;\n#\telse\n\t\tstd::size_t Samples = 1;\n#\tendif\n\tError += sign::perf(Samples);\n\n\tError += min_::perf(Samples);\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_func_exponential.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_float1.hpp>\n#include <glm/ext/vector_float2.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/common.hpp>\n#include <glm/exponential.hpp>\n\nstatic int test_pow()\n{\n\tint Error(0);\n\n\tfloat A = glm::pow(2.f, 2.f);\n\tError += glm::equal(A, 4.f, 0.01f) ? 0 : 1;\n\n\tglm::vec1 B = glm::pow(glm::vec1(2.f), glm::vec1(2.f));\n\tError += glm::all(glm::equal(B, glm::vec1(4.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec2 C = glm::pow(glm::vec2(2.f), glm::vec2(2.f));\n\tError += glm::all(glm::equal(C, glm::vec2(4.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec3 D = glm::pow(glm::vec3(2.f), glm::vec3(2.f));\n\tError += glm::all(glm::equal(D, glm::vec3(4.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec4 E = glm::pow(glm::vec4(2.f), glm::vec4(2.f));\n\tError += glm::all(glm::equal(E, glm::vec4(4.f), 0.01f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_sqrt()\n{\n\tint Error = 0;\n\n\tfloat A = glm::sqrt(4.f);\n\tError += glm::equal(A, 2.f, 0.01f) ? 0 : 1;\n\n\tglm::vec1 B = glm::sqrt(glm::vec1(4.f));\n\tError += glm::all(glm::equal(B, glm::vec1(2.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec2 C = glm::sqrt(glm::vec2(4.f));\n\tError += glm::all(glm::equal(C, glm::vec2(2.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec3 D = glm::sqrt(glm::vec3(4.f));\n\tError += glm::all(glm::equal(D, glm::vec3(2.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec4 E = glm::sqrt(glm::vec4(4.f));\n\tError += glm::all(glm::equal(E, glm::vec4(2.f), 0.01f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_exp()\n{\n\tint Error = 0;\n\n\tfloat A = glm::exp(1.f);\n\tError += glm::equal(A, glm::e<float>(), 0.01f) ? 0 : 1;\n\n\tglm::vec1 B = glm::exp(glm::vec1(1.f));\n\tError += glm::all(glm::equal(B, glm::vec1(glm::e<float>()), 0.01f)) ? 0 : 1;\n\n\tglm::vec2 C = glm::exp(glm::vec2(1.f));\n\tError += glm::all(glm::equal(C, glm::vec2(glm::e<float>()), 0.01f)) ? 0 : 1;\n\n\tglm::vec3 D = glm::exp(glm::vec3(1.f));\n\tError += glm::all(glm::equal(D, glm::vec3(glm::e<float>()), 0.01f)) ? 0 : 1;\n\n\tglm::vec4 E = glm::exp(glm::vec4(1.f));\n\tError += glm::all(glm::equal(E, glm::vec4(glm::e<float>()), 0.01f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_log()\n{\n\tint Error = 0;\n\n\tfloat const A = glm::log(glm::e<float>());\n\tError += glm::equal(A, 1.f, 0.01f) ? 0 : 1;\n\n\tglm::vec1 const B = glm::log(glm::vec1(glm::e<float>()));\n\tError += glm::all(glm::equal(B, glm::vec1(1.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec2 const C = glm::log(glm::vec2(glm::e<float>()));\n\tError += glm::all(glm::equal(C, glm::vec2(1.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec3 const D = glm::log(glm::vec3(glm::e<float>()));\n\tError += glm::all(glm::equal(D, glm::vec3(1.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec4 const E = glm::log(glm::vec4(glm::e<float>()));\n\tError += glm::all(glm::equal(E, glm::vec4(1.f), 0.01f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_exp2()\n{\n\tint Error = 0;\n\n\tfloat A = glm::exp2(4.f);\n\tError += glm::equal(A, 16.f, 0.01f) ? 0 : 1;\n\n\tglm::vec1 B = glm::exp2(glm::vec1(4.f));\n\tError += glm::all(glm::equal(B, glm::vec1(16.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec2 C = glm::exp2(glm::vec2(4.f, 3.f));\n\tError += glm::all(glm::equal(C, glm::vec2(16.f, 8.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec3 D = glm::exp2(glm::vec3(4.f, 3.f, 2.f));\n\tError += glm::all(glm::equal(D, glm::vec3(16.f, 8.f, 4.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec4 E = glm::exp2(glm::vec4(4.f, 3.f, 2.f, 1.f));\n\tError += glm::all(glm::equal(E, glm::vec4(16.f, 8.f, 4.f, 2.f), 0.01f)) ? 0 : 1;\n\n#   if GLM_HAS_CXX11_STL\n\t//large exponent\n\tfloat F = glm::exp2(23.f);\n\tError += glm::equal(F, 8388608.f, 0.01f) ? 0 : 1;\n#   endif\n\n\treturn Error;\n}\n\nstatic int test_log2()\n{\n\tint Error = 0;\n\n\tfloat A = glm::log2(16.f);\n\tError += glm::equal(A, 4.f, 0.01f) ? 0 : 1;\n\n\tglm::vec1 B = glm::log2(glm::vec1(16.f));\n\tError += glm::all(glm::equal(B, glm::vec1(4.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec2 C = glm::log2(glm::vec2(16.f, 8.f));\n\tError += glm::all(glm::equal(C, glm::vec2(4.f, 3.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec3 D = glm::log2(glm::vec3(16.f, 8.f, 4.f));\n\tError += glm::all(glm::equal(D, glm::vec3(4.f, 3.f, 2.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec4 E = glm::log2(glm::vec4(16.f, 8.f, 4.f, 2.f));\n\tError += glm::all(glm::equal(E, glm::vec4(4.f, 3.f, 2.f, 1.f), 0.01f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_inversesqrt()\n{\n\tint Error = 0;\n\n\tfloat A = glm::inversesqrt(16.f) * glm::sqrt(16.f);\n\tError += glm::equal(A, 1.f, 0.01f) ? 0 : 1;\n\n\tglm::vec1 B = glm::inversesqrt(glm::vec1(16.f)) * glm::sqrt(16.f);\n\tError += glm::all(glm::equal(B, glm::vec1(1.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec2 C = glm::inversesqrt(glm::vec2(16.f)) * glm::sqrt(16.f);\n\tError += glm::all(glm::equal(C, glm::vec2(1.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec3 D = glm::inversesqrt(glm::vec3(16.f)) * glm::sqrt(16.f);\n\tError += glm::all(glm::equal(D, glm::vec3(1.f), 0.01f)) ? 0 : 1;\n\n\tglm::vec4 E = glm::inversesqrt(glm::vec4(16.f)) * glm::sqrt(16.f);\n\tError += glm::all(glm::equal(E, glm::vec4(1.f), 0.01f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_pow();\n\tError += test_sqrt();\n\tError += test_exp();\n\tError += test_log();\n\tError += test_exp2();\n\tError += test_log2();\n\tError += test_inversesqrt();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_func_geometric.cpp",
    "content": "#include <glm/geometric.hpp>\n#include <glm/trigonometric.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_float1.hpp>\n#include <glm/ext/vector_float2.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/vector_double2.hpp>\n#include <glm/ext/vector_double3.hpp>\n#include <glm/ext/vector_double4.hpp>\n#include <limits>\n\nnamespace length\n{\n\tint test()\n\t{\n\t\tfloat Length1 = glm::length(glm::vec1(1));\n\t\tfloat Length2 = glm::length(glm::vec2(1, 0));\n\t\tfloat Length3 = glm::length(glm::vec3(1, 0, 0));\n\t\tfloat Length4 = glm::length(glm::vec4(1, 0, 0, 0));\n\n\t\tint Error = 0;\n\n\t\tError += glm::abs(Length1 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Length2 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Length3 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Length4 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace length\n\nnamespace distance\n{\n\tint test()\n\t{\n\t\tfloat Distance1 = glm::distance(glm::vec1(1), glm::vec1(1));\n\t\tfloat Distance2 = glm::distance(glm::vec2(1, 0), glm::vec2(1, 0));\n\t\tfloat Distance3 = glm::distance(glm::vec3(1, 0, 0), glm::vec3(1, 0, 0));\n\t\tfloat Distance4 = glm::distance(glm::vec4(1, 0, 0, 0), glm::vec4(1, 0, 0, 0));\n\n\t\tint Error = 0;\n\n\t\tError += glm::abs(Distance1) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Distance2) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Distance3) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Distance4) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace distance\n\nnamespace dot\n{\n\tint test()\n\t{\n\t\tfloat Dot1 = glm::dot(glm::vec1(1), glm::vec1(1));\n\t\tfloat Dot2 = glm::dot(glm::vec2(1), glm::vec2(1));\n\t\tfloat Dot3 = glm::dot(glm::vec3(1), glm::vec3(1));\n\t\tfloat Dot4 = glm::dot(glm::vec4(1), glm::vec4(1));\n\n\t\tint Error = 0;\n\n\t\tError += glm::abs(Dot1 - 1.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Dot2 - 2.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Dot3 - 3.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += glm::abs(Dot4 - 4.0f) < std::numeric_limits<float>::epsilon() ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace dot\n\nnamespace cross\n{\n\tint test()\n\t{\n\t\tglm::vec3 Cross1 = glm::cross(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0));\n\t\tglm::vec3 Cross2 = glm::cross(glm::vec3(0, 1, 0), glm::vec3(1, 0, 0));\n\n\t\tint Error = 0;\n\n\t\tError += glm::all(glm::lessThan(glm::abs(Cross1 - glm::vec3(0, 0, 1)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;\n\t\tError += glm::all(glm::lessThan(glm::abs(Cross2 - glm::vec3(0, 0,-1)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace cross\n\nnamespace normalize\n{\n\tint test()\n\t{\n\t\tglm::vec3 Normalize1 = glm::normalize(glm::vec3(1, 0, 0));\n\t\tglm::vec3 Normalize2 = glm::normalize(glm::vec3(2, 0, 0));\n\n\t\tglm::vec3 Normalize3 = glm::normalize(glm::vec3(-0.6, 0.7, -0.5));\n\n\t\tglm::vec3 ro = glm::vec3(glm::cos(5.f) * 3.f, 2.f, glm::sin(5.f) * 3.f);\n\t\tglm::vec3 w = glm::normalize(glm::vec3(0, -0.2f, 0) - ro);\n\t\tglm::vec3 u = glm::normalize(glm::cross(w, glm::vec3(0, 1, 0)));\n\t\tglm::vec3 v = glm::cross(u, w);\n\n\t\tint Error = 0;\n\n\t\tError += glm::all(glm::lessThan(glm::abs(Normalize1 - glm::vec3(1, 0, 0)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;\n\t\tError += glm::all(glm::lessThan(glm::abs(Normalize2 - glm::vec3(1, 0, 0)), glm::vec3(std::numeric_limits<float>::epsilon()))) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace normalize\n\nnamespace faceforward\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tglm::vec3 N(0.0f, 0.0f, 1.0f);\n\t\t\tglm::vec3 I(1.0f, 0.0f, 1.0f);\n\t\t\tglm::vec3 Nref(0.0f, 0.0f, 1.0f);\n\t\t\tglm::vec3 F = glm::faceforward(N, I, Nref);\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace faceforward\n\nnamespace reflect\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tglm::vec2 A(1.0f,-1.0f);\n\t\t\tglm::vec2 B(0.0f, 1.0f);\n\t\t\tglm::vec2 C = glm::reflect(A, B);\n\t\t\tError += glm::all(glm::equal(C, glm::vec2(1.0, 1.0), 0.0001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::dvec2 A(1.0f,-1.0f);\n\t\t\tglm::dvec2 B(0.0f, 1.0f);\n\t\t\tglm::dvec2 C = glm::reflect(A, B);\n\t\t\tError += glm::all(glm::equal(C, glm::dvec2(1.0, 1.0), 0.0001)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace reflect\n\nnamespace refract\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tfloat A(-1.0f);\n\t\t\tfloat B(1.0f);\n\t\t\tfloat C = glm::refract(A, B, 0.5f);\n\t\t\tError += glm::equal(C, -1.0f, 0.0001f) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec2 A(0.0f,-1.0f);\n\t\t\tglm::vec2 B(0.0f, 1.0f);\n\t\t\tglm::vec2 C = glm::refract(A, B, 0.5f);\n\t\t\tError += glm::all(glm::equal(C, glm::vec2(0.0, -1.0), 0.0001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::dvec2 A(0.0f,-1.0f);\n\t\t\tglm::dvec2 B(0.0f, 1.0f);\n\t\t\tglm::dvec2 C = glm::refract(A, B, 0.5);\n\t\t\tError += glm::all(glm::equal(C, glm::dvec2(0.0, -1.0), 0.0001)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace refract\n\nint main()\n{\n\tint Error(0);\n\n\tError += length::test();\n\tError += distance::test();\n\tError += dot::test();\n\tError += cross::test();\n\tError += normalize::test();\n\tError += faceforward::test();\n\tError += reflect::test();\n\tError += refract::test();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_func_integer.cpp",
    "content": "#include <glm/integer.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/ext/vector_int1.hpp>\n#include <glm/ext/vector_int2.hpp>\n#include <glm/ext/vector_int3.hpp>\n#include <glm/ext/vector_int4.hpp>\n#include <glm/ext/vector_uint1.hpp>\n#include <glm/ext/vector_uint2.hpp>\n#include <glm/ext/vector_uint3.hpp>\n#include <glm/ext/vector_uint4.hpp>\n#include <glm/ext/scalar_int_sized.hpp>\n#include <glm/ext/scalar_uint_sized.hpp>\n#include <vector>\n#include <ctime>\n#include <cstdio>\n\nenum result\n{\n\tSUCCESS,\n\tFAIL,\n\tASSERT,\n\tSTATIC_ASSERT\n};\n\nnamespace bitfieldInsert\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tBase;\n\t\tgenType\t\tInsert;\n\t\tint\t\t\tOffset;\n\t\tint\t\t\tBits;\n\t\tgenType\t\tReturn;\n\t};\n\n\ttypedef type<glm::uint> typeU32;\n\n\ttypeU32 const Data32[] =\n\t{\n\t\t{0x00000000, 0xffffffff,  0, 32, 0xffffffff},\n\t\t{0x00000000, 0xffffffff,  0, 31, 0x7fffffff},\n\t\t{0x00000000, 0xffffffff,  0,  0, 0x00000000},\n\t\t{0xff000000, 0x000000ff,  8,  8, 0xff00ff00},\n\t\t{0xffff0000, 0xffff0000, 16, 16, 0x00000000},\n\t\t{0x0000ffff, 0x0000ffff, 16, 16, 0xffffffff}\n\t};\n\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\t\tglm::uint count = sizeof(Data32) / sizeof(typeU32);\n\t\t\n\t\tfor(glm::uint i = 0; i < count; ++i)\n\t\t{\n\t\t\tglm::uint Return = glm::bitfieldInsert(\n\t\t\t\tData32[i].Base,\n\t\t\t\tData32[i].Insert,\n\t\t\t\tData32[i].Offset,\n\t\t\t\tData32[i].Bits);\n\n\t\t\tError += Data32[i].Return == Return ? 0 : 1;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n}//bitfieldInsert\n\nnamespace bitfieldExtract\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tint\t\t\tOffset;\n\t\tint\t\t\tBits;\n\t\tgenType\t\tReturn;\n\t\tresult\t\tResult;\n\t};\n\n\ttypedef type<glm::uint> typeU32;\n\n\ttypeU32 const Data32[] =\n\t{\n\t\t{0xffffffff, 0,32, 0xffffffff, SUCCESS},\n\t\t{0xffffffff, 8, 0, 0x00000000, SUCCESS},\n\t\t{0x00000000, 0,32, 0x00000000, SUCCESS},\n\t\t{0x0f0f0f0f, 0,32, 0x0f0f0f0f, SUCCESS},\n\t\t{0x00000000, 8, 0, 0x00000000, SUCCESS},\n\t\t{0x80000000,31, 1, 0x00000001, SUCCESS},\n\t\t{0x7fffffff,31, 1, 0x00000000, SUCCESS},\n\t\t{0x00000300, 8, 8, 0x00000003, SUCCESS},\n\t\t{0x0000ff00, 8, 8, 0x000000ff, SUCCESS},\n\t\t{0xfffffff0, 0, 5, 0x00000010, SUCCESS},\n\t\t{0x000000ff, 1, 3, 0x00000007, SUCCESS},\n\t\t{0x000000ff, 0, 3, 0x00000007, SUCCESS},\n\t\t{0x00000000, 0, 2, 0x00000000, SUCCESS},\n\t\t{0xffffffff, 0, 8, 0x000000ff, SUCCESS},\n\t\t{0xffff0000,16,16, 0x0000ffff, SUCCESS},\n\t\t{0xfffffff0, 0, 8, 0x00000000, FAIL},\n\t\t{0xffffffff,16,16, 0x00000000, FAIL},\n\t\t//{0xffffffff,32, 1, 0x00000000, ASSERT}, // Throw an assert \n\t\t//{0xffffffff, 0,33, 0x00000000, ASSERT}, // Throw an assert \n\t\t//{0xffffffff,16,16, 0x00000000, ASSERT}, // Throw an assert \n\t};\n\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::uint count = sizeof(Data32) / sizeof(typeU32);\n\n\t\tfor(glm::uint i = 0; i < count; ++i)\n\t\t{\n\t\t\tglm::uint Return = glm::bitfieldExtract(\n\t\t\t\tData32[i].Value, \n\t\t\t\tData32[i].Offset, \n\t\t\t\tData32[i].Bits);\n\t\t\t\n\t\t\tbool Compare = Data32[i].Return == Return;\n\n\t\t\tif(Data32[i].Result == SUCCESS && Compare)\n\t\t\t\tcontinue;\n\t\t\telse if(Data32[i].Result == FAIL && !Compare)\n\t\t\t\tcontinue;\n\n\t\t\tError += 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//extractField\n\nnamespace bitfieldReverse\n{\n/*\n\tGLM_FUNC_QUALIFIER unsigned int bitfieldReverseLoop(unsigned int v)\n\t{\n\t\tunsigned int Result(0);\n\t\tunsigned int const BitSize = static_cast<unsigned int>(sizeof(unsigned int) * 8);\n\t\tfor(unsigned int i = 0; i < BitSize; ++i)\n\t\t{\n\t\t\tunsigned int const BitSet(v & (static_cast<unsigned int>(1) << i));\n\t\t\tunsigned int const BitFirst(BitSet >> i);\n\t\t\tResult |= BitFirst << (BitSize - 1 - i);\n\t\t}\n\t\treturn Result;\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint64_t bitfieldReverseLoop(glm::uint64_t v)\n\t{\n\t\tglm::uint64_t Result(0);\n\t\tglm::uint64_t const BitSize = static_cast<glm::uint64_t>(sizeof(unsigned int) * 8);\n\t\tfor(glm::uint64_t i = 0; i < BitSize; ++i)\n\t\t{\n\t\t\tglm::uint64_t const BitSet(v & (static_cast<glm::uint64_t>(1) << i));\n\t\t\tglm::uint64_t const BitFirst(BitSet >> i);\n\t\t\tResult |= BitFirst << (BitSize - 1 - i);\n\t\t}\n\t\treturn Result;\n\t}\n*/\n\ttemplate<glm::length_t L, typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> bitfieldReverseLoop(glm::vec<L, T, Q> const& v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitfieldReverse' only accept integer values\");\n\n\t\tglm::vec<L, T, Q> Result(0);\n\t\tT const BitSize = static_cast<T>(sizeof(T) * 8);\n\t\tfor(T i = 0; i < BitSize; ++i)\n\t\t{\n\t\t\tglm::vec<L, T, Q> const BitSet(v & (static_cast<T>(1) << i));\n\t\t\tglm::vec<L, T, Q> const BitFirst(BitSet >> i);\n\t\t\tResult |= BitFirst << (BitSize - 1 - i);\n\t\t}\n\t\treturn Result;\n\t}\n\n\ttemplate<typename T>\n\tGLM_FUNC_QUALIFIER T bitfieldReverseLoop(T v)\n\t{\n\t\treturn bitfieldReverseLoop(glm::vec<1, T>(v)).x;\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint32 bitfieldReverseUint32(glm::uint32 x)\n\t{\n\t\tx = (x & 0x55555555) <<  1 | (x & 0xAAAAAAAA) >>  1;\n\t\tx = (x & 0x33333333) <<  2 | (x & 0xCCCCCCCC) >>  2;\n\t\tx = (x & 0x0F0F0F0F) <<  4 | (x & 0xF0F0F0F0) >>  4;\n\t\tx = (x & 0x00FF00FF) <<  8 | (x & 0xFF00FF00) >>  8;\n\t\tx = (x & 0x0000FFFF) << 16 | (x & 0xFFFF0000) >> 16;\n\t\treturn x;\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint64 bitfieldReverseUint64(glm::uint64 x)\n\t{\n\t\tx = (x & 0x5555555555555555) <<  1 | (x & 0xAAAAAAAAAAAAAAAA) >>  1;\n\t\tx = (x & 0x3333333333333333) <<  2 | (x & 0xCCCCCCCCCCCCCCCC) >>  2;\n\t\tx = (x & 0x0F0F0F0F0F0F0F0F) <<  4 | (x & 0xF0F0F0F0F0F0F0F0) >>  4;\n\t\tx = (x & 0x00FF00FF00FF00FF) <<  8 | (x & 0xFF00FF00FF00FF00) >>  8;\n\t\tx = (x & 0x0000FFFF0000FFFF) << 16 | (x & 0xFFFF0000FFFF0000) >> 16;\n\t\tx = (x & 0x00000000FFFFFFFF) << 32 | (x & 0xFFFFFFFF00000000) >> 32;\n\t\treturn x;\n\t}\n\n\ttemplate<bool EXEC = false>\n\tstruct compute_bitfieldReverseStep\n\t{\n\t\ttemplate<glm::length_t L, typename T, glm::qualifier Q>\n\t\tGLM_FUNC_QUALIFIER static glm::vec<L, T, Q> call(glm::vec<L, T, Q> const& v, T, T)\n\t\t{\n\t\t\treturn v;\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct compute_bitfieldReverseStep<true>\n\t{\n\t\ttemplate<glm::length_t L, typename T, glm::qualifier Q>\n\t\tGLM_FUNC_QUALIFIER static glm::vec<L, T, Q> call(glm::vec<L, T, Q> const& v, T Mask, T Shift)\n\t\t{\n\t\t\treturn (v & Mask) << Shift | (v & (~Mask)) >> Shift;\n\t\t}\n\t};\n\n\ttemplate<glm::length_t L, typename T, glm::qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> bitfieldReverseOps(glm::vec<L, T, Q> const& v)\n\t{\n\t\tglm::vec<L, T, Q> x(v);\n\t\tx = compute_bitfieldReverseStep<sizeof(T) * 8 >=  2>::call(x, static_cast<T>(0x5555555555555555ull), static_cast<T>( 1));\n\t\tx = compute_bitfieldReverseStep<sizeof(T) * 8 >=  4>::call(x, static_cast<T>(0x3333333333333333ull), static_cast<T>( 2));\n\t\tx = compute_bitfieldReverseStep<sizeof(T) * 8 >=  8>::call(x, static_cast<T>(0x0F0F0F0F0F0F0F0Full), static_cast<T>( 4));\n\t\tx = compute_bitfieldReverseStep<sizeof(T) * 8 >= 16>::call(x, static_cast<T>(0x00FF00FF00FF00FFull), static_cast<T>( 8));\n\t\tx = compute_bitfieldReverseStep<sizeof(T) * 8 >= 32>::call(x, static_cast<T>(0x0000FFFF0000FFFFull), static_cast<T>(16));\n\t\tx = compute_bitfieldReverseStep<sizeof(T) * 8 >= 64>::call(x, static_cast<T>(0x00000000FFFFFFFFull), static_cast<T>(32));\n\t\treturn x;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType bitfieldReverseOps(genType x)\n\t{\n\t\treturn bitfieldReverseOps(glm::vec<1, genType, glm::defaultp>(x)).x;\n\t}\n\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tgenType\t\tReturn;\n\t\tresult\t\tResult;\n\t};\n\n\ttypedef type<glm::uint> typeU32;\n\n\ttypeU32 const Data32[] =\n\t{\n\t\t{0x00000001, 0x80000000, SUCCESS},\n\t\t{0x0000000f, 0xf0000000, SUCCESS},\n\t\t{0x000000ff, 0xff000000, SUCCESS},\n\t\t{0xf0000000, 0x0000000f, SUCCESS},\n\t\t{0xff000000, 0x000000ff, SUCCESS},\n\t\t{0xffffffff, 0xffffffff, SUCCESS},\n\t\t{0x00000000, 0x00000000, SUCCESS}\n\t};\n\n\ttypedef type<glm::uint64> typeU64;\n\n\ttypeU64 const Data64[] =\n\t{\n\t\t{0x00000000000000ff, 0xff00000000000000, SUCCESS},\n\t\t{0x000000000000000f, 0xf000000000000000, SUCCESS},\n\t\t{0xf000000000000000, 0x000000000000000f, SUCCESS},\n\t\t{0xffffffffffffffff, 0xffffffffffffffff, SUCCESS},\n\t\t{0x0000000000000000, 0x0000000000000000, SUCCESS}\n\t};\n\n\tstatic int test32_bitfieldReverse()\n\t{\n\t\tint Error = 0;\n\t\tstd::size_t const Count = sizeof(Data32) / sizeof(typeU32);\n\t\t\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tglm::uint Return = glm::bitfieldReverse(Data32[i].Value);\n\t\t\t\n\t\t\tbool Compare = Data32[i].Return == Return;\n\t\t\t\n\t\t\tif(Data32[i].Result == SUCCESS)\n\t\t\t\tError += Compare ? 0 : 1;\n\t\t\telse\n\t\t\t\tError += Compare ? 1 : 0;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n\n\tstatic int test32_bitfieldReverseLoop()\n\t{\n\t\tint Error = 0;\n\t\tstd::size_t const Count = sizeof(Data32) / sizeof(typeU32);\n\t\t\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tglm::uint Return = bitfieldReverseLoop(Data32[i].Value);\n\t\t\t\n\t\t\tbool Compare = Data32[i].Return == Return;\n\t\t\t\n\t\t\tif(Data32[i].Result == SUCCESS)\n\t\t\t\tError += Compare ? 0 : 1;\n\t\t\telse\n\t\t\t\tError += Compare ? 1 : 0;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n\n\tstatic int test32_bitfieldReverseUint32()\n\t{\n\t\tint Error = 0;\n\t\tstd::size_t const Count = sizeof(Data32) / sizeof(typeU32);\n\t\t\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tglm::uint Return = bitfieldReverseUint32(Data32[i].Value);\n\t\t\t\n\t\t\tbool Compare = Data32[i].Return == Return;\n\t\t\t\n\t\t\tif(Data32[i].Result == SUCCESS)\n\t\t\t\tError += Compare ? 0 : 1;\n\t\t\telse\n\t\t\t\tError += Compare ? 1 : 0;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n\n\tstatic int test32_bitfieldReverseOps()\n\t{\n\t\tint Error = 0;\n\t\tstd::size_t const Count = sizeof(Data32) / sizeof(typeU32);\n\t\t\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tglm::uint Return = bitfieldReverseOps(Data32[i].Value);\n\t\t\t\n\t\t\tbool Compare = Data32[i].Return == Return;\n\t\t\t\n\t\t\tif(Data32[i].Result == SUCCESS)\n\t\t\t\tError += Compare ? 0 : 1;\n\t\t\telse\n\t\t\t\tError += Compare ? 1 : 0;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n\n\tstatic int test64_bitfieldReverse()\n\t{\n\t\tint Error = 0;\n\t\tstd::size_t const Count = sizeof(Data64) / sizeof(typeU64);\n\t\t\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tglm::uint64 Return = glm::bitfieldReverse(Data64[i].Value);\n\t\t\t\n\t\t\tbool Compare = Data64[i].Return == Return;\n\t\t\t\n\t\t\tif(Data64[i].Result == SUCCESS)\n\t\t\t\tError += Compare ? 0 : 1;\n\t\t\telse\n\t\t\t\tError += Compare ? 1 : 0;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n\n\tstatic int test64_bitfieldReverseLoop()\n\t{\n\t\tint Error = 0;\n\t\tstd::size_t const Count = sizeof(Data64) / sizeof(typeU64);\n\t\t\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tglm::uint64 Return = bitfieldReverseLoop(Data64[i].Value);\n\t\t\t\n\t\t\tbool Compare = Data64[i].Return == Return;\n\t\t\t\n\t\t\tif(Data32[i].Result == SUCCESS)\n\t\t\t\tError += Compare ? 0 : 1;\n\t\t\telse\n\t\t\t\tError += Compare ? 1 : 0;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n\n\tstatic int test64_bitfieldReverseUint64()\n\t{\n\t\tint Error = 0;\n\t\tstd::size_t const Count = sizeof(Data64) / sizeof(typeU64);\n\t\t\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tglm::uint64 Return = bitfieldReverseUint64(Data64[i].Value);\n\t\t\t\n\t\t\tbool Compare = Data64[i].Return == Return;\n\t\t\t\n\t\t\tif(Data64[i].Result == SUCCESS)\n\t\t\t\tError += Compare ? 0 : 1;\n\t\t\telse\n\t\t\t\tError += Compare ? 1 : 0;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n\n\tstatic int test64_bitfieldReverseOps()\n\t{\n\t\tint Error = 0;\n\t\tstd::size_t const Count = sizeof(Data64) / sizeof(typeU64);\n\t\t\n\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t{\n\t\t\tglm::uint64 Return = bitfieldReverseOps(Data64[i].Value);\n\t\t\t\n\t\t\tbool Compare = Data64[i].Return == Return;\n\t\t\t\n\t\t\tif(Data64[i].Result == SUCCESS)\n\t\t\t\tError += Compare ? 0 : 1;\n\t\t\telse\n\t\t\t\tError += Compare ? 1 : 0;\n\t\t}\n\t\t\n\t\treturn Error;\n\t}\n\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += test32_bitfieldReverse();\n\t\tError += test32_bitfieldReverseLoop();\n\t\tError += test32_bitfieldReverseUint32();\n\t\tError += test32_bitfieldReverseOps();\n\n\t\tError += test64_bitfieldReverse();\n\t\tError += test64_bitfieldReverseLoop();\n\t\tError += test64_bitfieldReverseUint64();\n\t\tError += test64_bitfieldReverseOps();\n\n\t\treturn Error;\n\t}\n\n\tstatic int perf32(glm::uint32 Count)\n\t{\n\t\tint Error = 0;\n\n\t\tstd::vector<glm::uint32> Data;\n\t\tData.resize(static_cast<std::size_t>(Count));\n\n\t\tstd::clock_t Timestamps0 = std::clock();\n\n\t\tfor(glm::uint32 k = 0; k < Count; ++k)\n\t\t\tData[k] = glm::bitfieldReverse(k);\n\n\t\tstd::clock_t Timestamps1 = std::clock();\n\n\t\tfor(glm::uint32 k = 0; k < Count; ++k)\n\t\t\tData[k] = bitfieldReverseLoop(k);\n\n\t\tstd::clock_t Timestamps2 = std::clock();\n\n\t\tfor(glm::uint32 k = 0; k < Count; ++k)\n\t\t\tData[k] = bitfieldReverseUint32(k);\n\n\t\tstd::clock_t Timestamps3 = std::clock();\n\n\t\tfor(glm::uint32 k = 0; k < Count; ++k)\n\t\t\tData[k] = bitfieldReverseOps(k);\n\n\t\tstd::clock_t Timestamps4 = std::clock();\n\n\t\tstd::printf(\"glm::bitfieldReverse: %d clocks\\n\", static_cast<int>(Timestamps1 - Timestamps0));\n\t\tstd::printf(\"bitfieldReverseLoop: %d clocks\\n\", static_cast<int>(Timestamps2 - Timestamps1));\n\t\tstd::printf(\"bitfieldReverseUint32: %d clocks\\n\", static_cast<int>(Timestamps3 - Timestamps2));\n\t\tstd::printf(\"bitfieldReverseOps: %d clocks\\n\", static_cast<int>(Timestamps4 - Timestamps3));\n\n\t\treturn Error;\n\t}\n\n\tstatic int perf64(glm::uint64 Count)\n\t{\n\t\tint Error = 0;\n\n\t\tstd::vector<glm::uint64> Data;\n\t\tData.resize(static_cast<std::size_t>(Count));\n\n\t\tstd::clock_t Timestamps0 = std::clock();\n\n\t\tfor(glm::uint64 k = 0; k < Count; ++k)\n\t\t\tData[static_cast<std::size_t>(k)] = glm::bitfieldReverse(k);\n\n\t\tstd::clock_t Timestamps1 = std::clock();\n\n\t\tfor(glm::uint64 k = 0; k < Count; ++k)\n\t\t\tData[static_cast<std::size_t>(k)] = bitfieldReverseLoop<glm::uint64>(k);\n\n\t\tstd::clock_t Timestamps2 = std::clock();\n\n\t\tfor(glm::uint64 k = 0; k < Count; ++k)\n\t\t\tData[static_cast<std::size_t>(k)] = bitfieldReverseUint64(k);\n\n\t\tstd::clock_t Timestamps3 = std::clock();\n\n\t\tfor(glm::uint64 k = 0; k < Count; ++k)\n\t\t\tData[static_cast<std::size_t>(k)] = bitfieldReverseOps(k);\n\n\t\tstd::clock_t Timestamps4 = std::clock();\n\n\t\tstd::printf(\"glm::bitfieldReverse - 64: %d clocks\\n\", static_cast<int>(Timestamps1 - Timestamps0));\n\t\tstd::printf(\"bitfieldReverseLoop - 64: %d clocks\\n\", static_cast<int>(Timestamps2 - Timestamps1));\n\t\tstd::printf(\"bitfieldReverseUint - 64: %d clocks\\n\", static_cast<int>(Timestamps3 - Timestamps2));\n\t\tstd::printf(\"bitfieldReverseOps - 64: %d clocks\\n\", static_cast<int>(Timestamps4 - Timestamps3));\n\n\t\treturn Error;\n\t}\n\n\tstatic int perf(std::size_t Samples)\n\t{\n\t\tint Error = 0;\n\n\t\tError += perf32(static_cast<glm::uint32>(Samples));\n\t\tError += perf64(static_cast<glm::uint64>(Samples));\n\n\t\treturn Error;\n\t}\n}//bitfieldReverse\n\nnamespace findMSB\n{\n\ttemplate<typename genType, typename retType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tretType\t\tReturn;\n\t};\n\n#\tif GLM_HAS_BITSCAN_WINDOWS\n\t\ttemplate<typename genIUType>\n\t\tstatic int findMSB_intrinsic(genIUType Value)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findMSB' only accept integer values\");\n\n\t\t\tif(Value == 0)\n\t\t\t\treturn -1;\n\n\t\t\tunsigned long Result(0);\n\t\t\t_BitScanReverse(&Result, Value);\n\t\t\treturn int(Result);\n\t\t}\n#\tendif//GLM_HAS_BITSCAN_WINDOWS\n\n#\tif GLM_ARCH & GLM_ARCH_AVX && GLM_COMPILER & GLM_COMPILER_VC\n\t\ttemplate<typename genIUType>\n\t\tstatic int findMSB_avx(genIUType Value)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findMSB' only accept integer values\");\n\n\t\t\tif(Value == 0)\n\t\t\t\treturn -1;\n\n\t\t\treturn int(_tzcnt_u32(Value));\n\t\t}\n#\tendif//GLM_ARCH & GLM_ARCH_AVX && GLM_PLATFORM & GLM_PLATFORM_WINDOWS\n\n\ttemplate<typename genIUType>\n\tstatic int findMSB_095(genIUType Value)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findMSB' only accept integer values\");\n\t\t\n\t\tif(Value == genIUType(0) || Value == genIUType(-1))\n\t\t\treturn -1;\n\t\telse if(Value > 0)\n\t\t{\n\t\t\tgenIUType Bit = genIUType(-1);\n\t\t\tfor(genIUType tmp = Value; tmp > 0; tmp >>= 1, ++Bit){}\n\t\t\treturn static_cast<int>(Bit);\n\t\t}\n\t\telse //if(Value < 0)\n\t\t{\n\t\t\tint const BitCount(sizeof(genIUType) * 8);\n\t\t\tint MostSignificantBit(-1);\n\t\t\tfor(int BitIndex(0); BitIndex < BitCount; ++BitIndex)\n\t\t\t\tMostSignificantBit = (Value & (1 << BitIndex)) ? MostSignificantBit : BitIndex;\n\t\t\tassert(MostSignificantBit >= 0);\n\t\t\treturn MostSignificantBit;\n\t\t}\n\t}\n\n\ttemplate<typename genIUType>\n\tstatic int findMSB_nlz1(genIUType x)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findMSB' only accept integer values\");\n\n\t\tif (x == 0)\n\t\t\treturn -1;\n\n\t\tint n = 0;\n\t\tif (x <= 0x0000FFFF) {n = n +16; x = x <<16;}\n\t\tif (x <= 0x00FFFFFF) {n = n + 8; x = x << 8;}\n\t\tif (x <= 0x0FFFFFFF) {n = n + 4; x = x << 4;}\n\t\tif (x <= 0x3FFFFFFF) {n = n + 2; x = x << 2;}\n\t\tif (x <= 0x7FFFFFFF) {n = n + 1;}\n\t\treturn 31 - n;\n\t}\n\n\tstatic int findMSB_nlz2(unsigned int x)\n\t{\n\t\tunsigned int y;\n\t\tint n = 32;\n\n\t\ty = x >>16;  if (y != 0) {n = n -16;  x = y;}\n\t\ty = x >> 8;  if (y != 0) {n = n - 8;  x = y;}\n\t\ty = x >> 4;  if (y != 0) {n = n - 4;  x = y;}\n\t\ty = x >> 2;  if (y != 0) {n = n - 2;  x = y;}\n\t\ty = x >> 1;  if (y != 0) return n - 2;\n\t\treturn 32 - (n - static_cast<int>(x));\n\t}\n\n\tstatic int findMSB_pop(unsigned int x)\n\t{\n\t\tx = x | (x >> 1);\n\t\tx = x | (x >> 2);\n\t\tx = x | (x >> 4);\n\t\tx = x | (x >> 8);\n\t\tx = x | (x >>16);\n\t\treturn 31 - glm::bitCount(~x);\n\t}\n\n\tstatic int perf_int(std::size_t Count)\n\t{\n\t\ttype<int, int> const Data[] =\n\t\t{\n\t\t\t{0x00000000, -1},\n\t\t\t{0x00000001,  0},\n\t\t\t{0x00000002,  1},\n\t\t\t{0x00000003,  1},\n\t\t\t{0x00000004,  2},\n\t\t\t{0x00000005,  2},\n\t\t\t{0x00000007,  2},\n\t\t\t{0x00000008,  3},\n\t\t\t{0x00000010,  4},\n\t\t\t{0x00000020,  5},\n\t\t\t{0x00000040,  6},\n\t\t\t{0x00000080,  7},\n\t\t\t{0x00000100,  8},\n\t\t\t{0x00000200,  9},\n\t\t\t{0x00000400, 10},\n\t\t\t{0x00000800, 11},\n\t\t\t{0x00001000, 12},\n\t\t\t{0x00002000, 13},\n\t\t\t{0x00004000, 14},\n\t\t\t{0x00008000, 15},\n\t\t\t{0x00010000, 16},\n\t\t\t{0x00020000, 17},\n\t\t\t{0x00040000, 18},\n\t\t\t{0x00080000, 19},\n\t\t\t{0x00100000, 20},\n\t\t\t{0x00200000, 21},\n\t\t\t{0x00400000, 22},\n\t\t\t{0x00800000, 23},\n\t\t\t{0x01000000, 24},\n\t\t\t{0x02000000, 25},\n\t\t\t{0x04000000, 26},\n\t\t\t{0x08000000, 27},\n\t\t\t{0x10000000, 28},\n\t\t\t{0x20000000, 29},\n\t\t\t{0x40000000, 30}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tstd::clock_t Timestamps0 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)\n\t\t{\n\t\t\tint Result = glm::findMSB(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps1 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)\n\t\t{\n\t\t\tint Result = findMSB_nlz1(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps2 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)\n\t\t{\n\t\t\tint Result = findMSB_nlz2(static_cast<unsigned int>(Data[i].Value));\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps3 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)\n\t\t{\n\t\t\tint Result = findMSB_095(static_cast<unsigned int>(Data[i].Value));\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps4 = std::clock();\n\n#\t\tif GLM_HAS_BITSCAN_WINDOWS\n\t\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)\n\t\t\t{\n\t\t\t\tint Result = findMSB_intrinsic(Data[i].Value);\n\t\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t\t}\n#\t\tendif//GLM_HAS_BITSCAN_WINDOWS\n\n\t\tstd::clock_t Timestamps5 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)\n\t\t{\n\t\t\tint Result = findMSB_pop(static_cast<unsigned int>(Data[i].Value));\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps6 = std::clock();\n\n#\t\tif GLM_ARCH & GLM_ARCH_AVX && GLM_COMPILER & GLM_COMPILER_VC\n\t\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int, int>); ++i)\n\t\t\t{\n\t\t\t\tint Result = findMSB_avx(Data[i].Value);\n\t\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t\t}\n\n\t\t\tstd::clock_t Timestamps7 = std::clock();\n#\t\tendif\n\n\t\tstd::printf(\"glm::findMSB: %d clocks\\n\", static_cast<int>(Timestamps1 - Timestamps0));\n\t\tstd::printf(\"findMSB - nlz1: %d clocks\\n\", static_cast<int>(Timestamps2 - Timestamps1));\n\t\tstd::printf(\"findMSB - nlz2: %d clocks\\n\", static_cast<int>(Timestamps3 - Timestamps2));\n\t\tstd::printf(\"findMSB - 0.9.5: %d clocks\\n\", static_cast<int>(Timestamps4 - Timestamps3));\n\n#\t\tif GLM_HAS_BITSCAN_WINDOWS\n\t\t\tstd::printf(\"findMSB - intrinsics: %d clocks\\n\", static_cast<int>(Timestamps5 - Timestamps4));\n#\t\tendif//GLM_HAS_BITSCAN_WINDOWS\n\t\tstd::printf(\"findMSB - pop: %d clocks\\n\", static_cast<int>(Timestamps6 - Timestamps5));\n\n#\t\tif GLM_ARCH & GLM_ARCH_AVX && GLM_COMPILER & GLM_COMPILER_VC\n\t\t\tstd::printf(\"findMSB - avx tzcnt: %d clocks\\n\", static_cast<int>(Timestamps7 - Timestamps6));\n#\t\tendif//GLM_ARCH & GLM_ARCH_AVX && GLM_PLATFORM & GLM_PLATFORM_WINDOWS\n\n\t\treturn Error;\n\t}\n\n\tstatic int test_ivec4()\n\t{\n\t\ttype<glm::ivec4, glm::ivec4> const Data[] =\n\t\t{\n\t\t\t{glm::ivec4(0x00000000), glm::ivec4(-1)},\n\t\t\t{glm::ivec4(0x00000001), glm::ivec4( 0)},\n\t\t\t{glm::ivec4(0x00000002), glm::ivec4( 1)},\n\t\t\t{glm::ivec4(0x00000003), glm::ivec4( 1)},\n\t\t\t{glm::ivec4(0x00000004), glm::ivec4( 2)},\n\t\t\t{glm::ivec4(0x00000005), glm::ivec4( 2)},\n\t\t\t{glm::ivec4(0x00000007), glm::ivec4( 2)},\n\t\t\t{glm::ivec4(0x00000008), glm::ivec4( 3)},\n\t\t\t{glm::ivec4(0x00000010), glm::ivec4( 4)},\n\t\t\t{glm::ivec4(0x00000020), glm::ivec4( 5)},\n\t\t\t{glm::ivec4(0x00000040), glm::ivec4( 6)},\n\t\t\t{glm::ivec4(0x00000080), glm::ivec4( 7)},\n\t\t\t{glm::ivec4(0x00000100), glm::ivec4( 8)},\n\t\t\t{glm::ivec4(0x00000200), glm::ivec4( 9)},\n\t\t\t{glm::ivec4(0x00000400), glm::ivec4(10)},\n\t\t\t{glm::ivec4(0x00000800), glm::ivec4(11)},\n\t\t\t{glm::ivec4(0x00001000), glm::ivec4(12)},\n\t\t\t{glm::ivec4(0x00002000), glm::ivec4(13)},\n\t\t\t{glm::ivec4(0x00004000), glm::ivec4(14)},\n\t\t\t{glm::ivec4(0x00008000), glm::ivec4(15)},\n\t\t\t{glm::ivec4(0x00010000), glm::ivec4(16)},\n\t\t\t{glm::ivec4(0x00020000), glm::ivec4(17)},\n\t\t\t{glm::ivec4(0x00040000), glm::ivec4(18)},\n\t\t\t{glm::ivec4(0x00080000), glm::ivec4(19)},\n\t\t\t{glm::ivec4(0x00100000), glm::ivec4(20)},\n\t\t\t{glm::ivec4(0x00200000), glm::ivec4(21)},\n\t\t\t{glm::ivec4(0x00400000), glm::ivec4(22)},\n\t\t\t{glm::ivec4(0x00800000), glm::ivec4(23)},\n\t\t\t{glm::ivec4(0x01000000), glm::ivec4(24)},\n\t\t\t{glm::ivec4(0x02000000), glm::ivec4(25)},\n\t\t\t{glm::ivec4(0x04000000), glm::ivec4(26)},\n\t\t\t{glm::ivec4(0x08000000), glm::ivec4(27)},\n\t\t\t{glm::ivec4(0x10000000), glm::ivec4(28)},\n\t\t\t{glm::ivec4(0x20000000), glm::ivec4(29)},\n\t\t\t{glm::ivec4(0x40000000), glm::ivec4(30)}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<glm::ivec4, glm::ivec4>); ++i)\n\t\t{\n\t\t\tglm::ivec4 Result0 = glm::findMSB(Data[i].Value);\n\t\t\tError += glm::all(glm::equal(Data[i].Return, Result0)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tstatic int test_int()\n\t{\n\t\ttypedef type<glm::uint, int> entry;\n\n\t\tentry const Data[] =\n\t\t{\n\t\t\t{0x00000000, -1},\n\t\t\t{0x00000001,  0},\n\t\t\t{0x00000002,  1},\n\t\t\t{0x00000003,  1},\n\t\t\t{0x00000004,  2},\n\t\t\t{0x00000005,  2},\n\t\t\t{0x00000007,  2},\n\t\t\t{0x00000008,  3},\n\t\t\t{0x00000010,  4},\n\t\t\t{0x00000020,  5},\n\t\t\t{0x00000040,  6},\n\t\t\t{0x00000080,  7},\n\t\t\t{0x00000100,  8},\n\t\t\t{0x00000200,  9},\n\t\t\t{0x00000400, 10},\n\t\t\t{0x00000800, 11},\n\t\t\t{0x00001000, 12},\n\t\t\t{0x00002000, 13},\n\t\t\t{0x00004000, 14},\n\t\t\t{0x00008000, 15},\n\t\t\t{0x00010000, 16},\n\t\t\t{0x00020000, 17},\n\t\t\t{0x00040000, 18},\n\t\t\t{0x00080000, 19},\n\t\t\t{0x00100000, 20},\n\t\t\t{0x00200000, 21},\n\t\t\t{0x00400000, 22},\n\t\t\t{0x00800000, 23},\n\t\t\t{0x01000000, 24},\n\t\t\t{0x02000000, 25},\n\t\t\t{0x04000000, 26},\n\t\t\t{0x08000000, 27},\n\t\t\t{0x10000000, 28},\n\t\t\t{0x20000000, 29},\n\t\t\t{0x40000000, 30}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result0 = glm::findMSB(Data[i].Value);\n\t\t\tError += Data[i].Return == Result0 ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result0 = findMSB_nlz1(Data[i].Value);\n\t\t\tError += Data[i].Return == Result0 ? 0 : 1;\n\t\t}\n/*\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result0 = findMSB_nlz2(Data[i].Value);\n\t\t\tError += Data[i].Return == Result0 ? 0 : 1;\n\t\t}\n*/\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result0 = findMSB_095(Data[i].Value);\n\t\t\tError += Data[i].Return == Result0 ? 0 : 1;\n\t\t}\n\n#\t\tif GLM_HAS_BITSCAN_WINDOWS\n\t\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)\n\t\t\t{\n\t\t\t\tint Result0 = findMSB_intrinsic(Data[i].Value);\n\t\t\t\tError += Data[i].Return == Result0 ? 0 : 1;\n\t\t\t}\n#\t\tendif//GLM_HAS_BITSCAN_WINDOWS\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result0 = findMSB_pop(Data[i].Value);\n\t\t\tError += Data[i].Return == Result0 ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\n\t\tError += test_ivec4();\n\t\tError += test_int();\n\n\t\treturn Error;\n\t}\n\n\tstatic int perf(std::size_t Samples)\n\t{\n\t\tint Error(0);\n\n\t\tError += perf_int(Samples);\n\n\t\treturn Error;\n\t}\n}//findMSB\n\nnamespace findLSB\n{\n\ttemplate<typename genType, typename retType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tretType\t\tReturn;\n\t};\n\n\ttypedef type<int, int> entry;\n\n\tentry const DataI32[] =\n\t{\n\t\t{0x00000001,  0},\n\t\t{0x00000003,  0},\n\t\t{0x00000002,  1},\n\t\t// {0x80000000, 31}, // Clang generates an error with this\n\t\t{0x00010000, 16},\n\t\t{0x7FFF0000, 16},\n\t\t{0x7F000000, 24},\n\t\t{0x7F00FF00,  8},\n\t\t{0x00000000, -1}\n\t};\n\n#\tif GLM_HAS_BITSCAN_WINDOWS\n\t\ttemplate<typename genIUType>\n\t\tstatic int findLSB_intrinsic(genIUType Value)\n\t\t{\n\t\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findLSB' only accept integer values\");\n\n\t\t\tif(Value == 0)\n\t\t\t\treturn -1;\n\n\t\t\tunsigned long Result(0);\n\t\t\t_BitScanForward(&Result, Value);\n\t\t\treturn int(Result);\n\t\t}\n#\tendif\n\n\ttemplate<typename genIUType>\n\tstatic int findLSB_095(genIUType Value)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, \"'findLSB' only accept integer values\");\n\t\tif(Value == 0)\n\t\t\treturn -1;\n\n\t\tgenIUType Bit;\n\t\tfor(Bit = genIUType(0); !(Value & (1 << Bit)); ++Bit){}\n\t\treturn Bit;\n\t}\n\n\ttemplate<typename genIUType>\n\tstatic int findLSB_ntz2(genIUType x)\n\t{\n\t\tif(x == 0)\n\t\t\treturn -1;\n\n\t\treturn glm::bitCount(~x & (x - static_cast<genIUType>(1)));\n\t}\n\n\ttemplate<typename genIUType>\n\tstatic int findLSB_branchfree(genIUType x)\n\t{\n\t\tbool IsNull(x == 0);\n\t\tint const Keep(!IsNull);\n\t\tint const Discard(IsNull);\n\n\t\treturn static_cast<int>(glm::bitCount(~x & (x - static_cast<genIUType>(1)))) * Keep + Discard * -1;\n\t}\n\n\tstatic int test_int()\n\t{\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result = glm::findLSB(DataI32[i].Value);\n\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result = findLSB_095(DataI32[i].Value);\n\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t}\n\n#\t\tif GLM_HAS_BITSCAN_WINDOWS\n\t\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t\t{\n\t\t\t\tint Result = findLSB_intrinsic(DataI32[i].Value);\n\t\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t\t}\n#\t\tendif\n\n\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result = findLSB_ntz2(DataI32[i].Value);\n\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result = findLSB_branchfree(DataI32[i].Value);\n\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\n\t\tError += test_int();\n\n\t\treturn Error;\n\t}\n\n\tstatic int perf_int(std::size_t Count)\n\t{\n\t\tint Error(0);\n\n\t\tstd::clock_t Timestamps0 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result = glm::findLSB(DataI32[i].Value);\n\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps1 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result = findLSB_095(DataI32[i].Value);\n\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps2 = std::clock();\n\n#\t\tif GLM_HAS_BITSCAN_WINDOWS\n\t\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t\t{\n\t\t\t\tint Result = findLSB_intrinsic(DataI32[i].Value);\n\t\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t\t}\n#\t\tendif\n\n\t\tstd::clock_t Timestamps3 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result = findLSB_ntz2(DataI32[i].Value);\n\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps4 = std::clock();\n\n\t\tfor(std::size_t k = 0; k < Count; ++k)\n\t\tfor(std::size_t i = 0; i < sizeof(DataI32) / sizeof(entry); ++i)\n\t\t{\n\t\t\tint Result = findLSB_branchfree(DataI32[i].Value);\n\t\t\tError += DataI32[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tstd::clock_t Timestamps5 = std::clock();\n\n\t\tstd::printf(\"glm::findLSB: %d clocks\\n\", static_cast<int>(Timestamps1 - Timestamps0));\n\t\tstd::printf(\"findLSB - 0.9.5: %d clocks\\n\", static_cast<int>(Timestamps2 - Timestamps1));\n\n#\t\tif GLM_HAS_BITSCAN_WINDOWS\n\t\t\tstd::printf(\"findLSB - intrinsics: %d clocks\\n\", static_cast<int>(Timestamps3 - Timestamps2));\n#\t\tendif\n\n\t\tstd::printf(\"findLSB - ntz2: %d clocks\\n\", static_cast<int>(Timestamps4 - Timestamps3));\n\t\tstd::printf(\"findLSB - branchfree: %d clocks\\n\", static_cast<int>(Timestamps5 - Timestamps4));\n\n\t\treturn Error;\n\t}\n\n\tstatic int perf(std::size_t Samples)\n\t{\n\t\tint Error(0);\n\n\t\tError += perf_int(Samples);\n\n\t\treturn Error;\n\t}\n}//findLSB\n\nnamespace uaddCarry\n{\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\t\t\n\t\t{\n\t\t\tglm::uint x = std::numeric_limits<glm::uint>::max();\n\t\t\tglm::uint y = 0;\n\t\t\tglm::uint Carry = 0;\n\t\t\tglm::uint Result = glm::uaddCarry(x, y, Carry);\n\n\t\t\tError += Carry == 0 ? 0 : 1;\n\t\t\tError += Result == std::numeric_limits<glm::uint>::max() ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uint x = std::numeric_limits<glm::uint>::max();\n\t\t\tglm::uint y = 1;\n\t\t\tglm::uint Carry = 0;\n\t\t\tglm::uint Result = glm::uaddCarry(x, y, Carry);\n\n\t\t\tError += Carry == 1 ? 0 : 1;\n\t\t\tError += Result == 0 ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec1 x(std::numeric_limits<glm::uint>::max());\n\t\t\tglm::uvec1 y(0);\n\t\t\tglm::uvec1 Carry(0);\n\t\t\tglm::uvec1 Result(glm::uaddCarry(x, y, Carry));\n\n\t\t\tError += glm::all(glm::equal(Carry, glm::uvec1(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(Result, glm::uvec1(std::numeric_limits<glm::uint>::max()))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec1 x(std::numeric_limits<glm::uint>::max());\n\t\t\tglm::uvec1 y(1);\n\t\t\tglm::uvec1 Carry(0);\n\t\t\tglm::uvec1 Result(glm::uaddCarry(x, y, Carry));\n\n\t\t\tError += glm::all(glm::equal(Carry, glm::uvec1(1))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(Result, glm::uvec1(0))) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace uaddCarry\n\nnamespace usubBorrow\n{\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\t\t\n\t\t{\n\t\t\tglm::uint x = 16;\n\t\t\tglm::uint y = 17;\n\t\t\tglm::uint Borrow = 0;\n\t\t\tglm::uint Result = glm::usubBorrow(x, y, Borrow);\n\n\t\t\tError += Borrow == 1 ? 0 : 1;\n\t\t\tError += Result == 1 ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec1 x(16);\n\t\t\tglm::uvec1 y(17);\n\t\t\tglm::uvec1 Borrow(0);\n\t\t\tglm::uvec1 Result(glm::usubBorrow(x, y, Borrow));\n\n\t\t\tError += glm::all(glm::equal(Borrow, glm::uvec1(1))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(Result, glm::uvec1(1))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec2 x(16);\n\t\t\tglm::uvec2 y(17);\n\t\t\tglm::uvec2 Borrow(0);\n\t\t\tglm::uvec2 Result(glm::usubBorrow(x, y, Borrow));\n\n\t\t\tError += glm::all(glm::equal(Borrow, glm::uvec2(1))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(Result, glm::uvec2(1))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec3 x(16);\n\t\t\tglm::uvec3 y(17);\n\t\t\tglm::uvec3 Borrow(0);\n\t\t\tglm::uvec3 Result(glm::usubBorrow(x, y, Borrow));\n\n\t\t\tError += glm::all(glm::equal(Borrow, glm::uvec3(1))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(Result, glm::uvec3(1))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec4 x(16);\n\t\t\tglm::uvec4 y(17);\n\t\t\tglm::uvec4 Borrow(0);\n\t\t\tglm::uvec4 Result(glm::usubBorrow(x, y, Borrow));\n\n\t\t\tError += glm::all(glm::equal(Borrow, glm::uvec4(1))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(Result, glm::uvec4(1))) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace usubBorrow\n\nnamespace umulExtended\n{\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\t\t\n\t\t{\n\t\t\tglm::uint x = 2;\n\t\t\tglm::uint y = 3;\n\t\t\tglm::uint msb = 0;\n\t\t\tglm::uint lsb = 0;\n\t\t\tglm::umulExtended(x, y, msb, lsb);\n\n\t\t\tError += msb == 0 ? 0 : 1;\n\t\t\tError += lsb == 6 ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec1 x(2);\n\t\t\tglm::uvec1 y(3);\n\t\t\tglm::uvec1 msb(0);\n\t\t\tglm::uvec1 lsb(0);\n\t\t\tglm::umulExtended(x, y, msb, lsb);\n\n\t\t\tError += glm::all(glm::equal(msb, glm::uvec1(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(lsb, glm::uvec1(6))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec2 x(2);\n\t\t\tglm::uvec2 y(3);\n\t\t\tglm::uvec2 msb(0);\n\t\t\tglm::uvec2 lsb(0);\n\t\t\tglm::umulExtended(x, y, msb, lsb);\n\n\t\t\tError += glm::all(glm::equal(msb, glm::uvec2(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(lsb, glm::uvec2(6))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec3 x(2);\n\t\t\tglm::uvec3 y(3);\n\t\t\tglm::uvec3 msb(0);\n\t\t\tglm::uvec3 lsb(0);\n\t\t\tglm::umulExtended(x, y, msb, lsb);\n\n\t\t\tError += glm::all(glm::equal(msb, glm::uvec3(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(lsb, glm::uvec3(6))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::uvec4 x(2);\n\t\t\tglm::uvec4 y(3);\n\t\t\tglm::uvec4 msb(0);\n\t\t\tglm::uvec4 lsb(0);\n\t\t\tglm::umulExtended(x, y, msb, lsb);\n\n\t\t\tError += glm::all(glm::equal(msb, glm::uvec4(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(lsb, glm::uvec4(6))) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace umulExtended\n\nnamespace imulExtended\n{\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\t\t\n\t\t{\n\t\t\tint x = 2;\n\t\t\tint y = 3;\n\t\t\tint msb = 0;\n\t\t\tint lsb = 0;\n\t\t\tglm::imulExtended(x, y, msb, lsb);\n\n\t\t\tError += msb == 0 ? 0 : 1;\n\t\t\tError += lsb == 6 ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::ivec1 x(2);\n\t\t\tglm::ivec1 y(3);\n\t\t\tglm::ivec1 msb(0);\n\t\t\tglm::ivec1 lsb(0);\n\t\t\tglm::imulExtended(x, y, msb, lsb);\n\n\t\t\tError += glm::all(glm::equal(msb, glm::ivec1(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(lsb, glm::ivec1(6))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::ivec2 x(2);\n\t\t\tglm::ivec2 y(3);\n\t\t\tglm::ivec2 msb(0);\n\t\t\tglm::ivec2 lsb(0);\n\t\t\tglm::imulExtended(x, y, msb, lsb);\n\n\t\t\tError += glm::all(glm::equal(msb, glm::ivec2(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(lsb, glm::ivec2(6))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::ivec3 x(2);\n\t\t\tglm::ivec3 y(3);\n\t\t\tglm::ivec3 msb(0);\n\t\t\tglm::ivec3 lsb(0);\n\t\t\tglm::imulExtended(x, y, msb, lsb);\n\n\t\t\tError += glm::all(glm::equal(msb, glm::ivec3(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(lsb, glm::ivec3(6))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::ivec4 x(2);\n\t\t\tglm::ivec4 y(3);\n\t\t\tglm::ivec4 msb(0);\n\t\t\tglm::ivec4 lsb(0);\n\t\t\tglm::imulExtended(x, y, msb, lsb);\n\n\t\t\tError += glm::all(glm::equal(msb, glm::ivec4(0))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(lsb, glm::ivec4(6))) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace imulExtended\n\nnamespace bitCount\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tgenType\t\tReturn;\n\t};\n\n\ttype<int> const DataI32[] =\n\t{\n\t\t{0x00000001,  1},\n\t\t{0x00000003,  2},\n\t\t{0x00000002,  1},\n\t\t{0x7fffffff, 31},\n\t\t{0x00000000,  0}\n\t};\n\n\ttemplate<typename T>\n\tinline int bitCount_if(T v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitCount' only accept integer values\");\n\n\t\tint Count(0);\n\t\tfor(T i = 0, n = static_cast<T>(sizeof(T) * 8); i < n; ++i)\n\t\t{\n\t\t\tif(v & static_cast<T>(1 << i))\n\t\t\t\t++Count;\n\t\t}\n\t\treturn Count;\n\t}\n\n\ttemplate<typename T>\n\tinline int bitCount_vec(T v)\n\t{\n\t\tGLM_STATIC_ASSERT(std::numeric_limits<T>::is_integer, \"'bitCount' only accept integer values\");\n\n\t\tint Count(0);\n\t\tfor(T i = 0, n = static_cast<T>(sizeof(T) * 8); i < n; ++i)\n\t\t{\n\t\t\tCount += static_cast<int>((v >> i) & static_cast<T>(1));\n\t\t}\n\t\treturn Count;\n\t}\n\n\ttemplate<bool EXEC = false>\n\tstruct compute_bitfieldBitCountStep\n\t{\n\t\ttemplate<glm::length_t L, typename T, glm::qualifier Q>\n\t\tGLM_FUNC_QUALIFIER static glm::vec<L, T, Q> call(glm::vec<L, T, Q> const& v, T, T)\n\t\t{\n\t\t\treturn v;\n\t\t}\n\t};\n\n\ttemplate<>\n\tstruct compute_bitfieldBitCountStep<true>\n\t{\n\t\ttemplate<glm::length_t L, typename T, glm::qualifier Q>\n\t\tGLM_FUNC_QUALIFIER static glm::vec<L, T, Q> call(glm::vec<L, T, Q> const& v, T Mask, T Shift)\n\t\t{\n\t\t\treturn (v & Mask) + ((v >> Shift) & Mask);\n\t\t}\n\t};\n\n\ttemplate<glm::length_t L, typename T, glm::qualifier Q>\n\tstatic glm::vec<L, int, Q> bitCount_bitfield(glm::vec<L, T, Q> const& v)\n\t{\n\t\tglm::vec<L, typename glm::detail::make_unsigned<T>::type, Q> x(*reinterpret_cast<glm::vec<L, typename glm::detail::make_unsigned<T>::type, Q> const *>(&v));\n\t\tx = compute_bitfieldBitCountStep<sizeof(T) * 8 >=  2>::call(x, static_cast<typename glm::detail::make_unsigned<T>::type>(0x5555555555555555ull), static_cast<typename glm::detail::make_unsigned<T>::type>( 1));\n\t\tx = compute_bitfieldBitCountStep<sizeof(T) * 8 >=  4>::call(x, static_cast<typename glm::detail::make_unsigned<T>::type>(0x3333333333333333ull), static_cast<typename glm::detail::make_unsigned<T>::type>( 2));\n\t\tx = compute_bitfieldBitCountStep<sizeof(T) * 8 >=  8>::call(x, static_cast<typename glm::detail::make_unsigned<T>::type>(0x0F0F0F0F0F0F0F0Full), static_cast<typename glm::detail::make_unsigned<T>::type>( 4));\n\t\tx = compute_bitfieldBitCountStep<sizeof(T) * 8 >= 16>::call(x, static_cast<typename glm::detail::make_unsigned<T>::type>(0x00FF00FF00FF00FFull), static_cast<typename glm::detail::make_unsigned<T>::type>( 8));\n\t\tx = compute_bitfieldBitCountStep<sizeof(T) * 8 >= 32>::call(x, static_cast<typename glm::detail::make_unsigned<T>::type>(0x0000FFFF0000FFFFull), static_cast<typename glm::detail::make_unsigned<T>::type>(16));\n\t\tx = compute_bitfieldBitCountStep<sizeof(T) * 8 >= 64>::call(x, static_cast<typename glm::detail::make_unsigned<T>::type>(0x00000000FFFFFFFFull), static_cast<typename glm::detail::make_unsigned<T>::type>(32));\n\t\treturn glm::vec<L, int, Q>(x);\n\t}\n\n\ttemplate<typename genType>\n\tstatic int bitCount_bitfield(genType x)\n\t{\n\t\treturn bitCount_bitfield(glm::vec<1, genType, glm::defaultp>(x)).x;\n\t}\n\n\tstatic int perf(std::size_t Size)\n\t{\n\t\tint Error(0);\n\n\t\tstd::vector<int> v;\n\t\tv.resize(Size);\n\n\t\tstd::vector<glm::ivec4> w;\n\t\tw.resize(Size);\n\n\n\t\tstd::clock_t TimestampsA = std::clock();\n\n\t\t// bitCount - TimeIf\n\t\t{\n\t\t\tfor(std::size_t i = 0, n = v.size(); i < n; ++i)\n\t\t\t\tv[i] = bitCount_if(static_cast<int>(i));\n\t\t}\n\n\t\tstd::clock_t TimestampsB = std::clock();\n\n\t\t// bitCount - TimeVec\n\t\t{\n\t\t\tfor(std::size_t i = 0, n = v.size(); i < n; ++i)\n\t\t\t\tv[i] = bitCount_vec(i);\n\t\t}\n\n\t\tstd::clock_t TimestampsC = std::clock();\n\n\t\t// bitCount - TimeDefault\n\t\t{\n\t\t\tfor(std::size_t i = 0, n = v.size(); i < n; ++i)\n\t\t\t\tv[i] = glm::bitCount(i);\n\t\t}\n\n\t\tstd::clock_t TimestampsD = std::clock();\n\n\t\t// bitCount - TimeVec4\n\t\t{\n\t\t\tfor(std::size_t i = 0, n = v.size(); i < n; ++i)\n\t\t\t\tw[i] = glm::bitCount(glm::ivec4(static_cast<int>(i)));\n\t\t}\n\n\t\tstd::clock_t TimestampsE = std::clock();\n\n\t\t{\n\t\t\tfor(std::size_t i = 0, n = v.size(); i < n; ++i)\n\t\t\t\tv[i] = bitCount_bitfield(static_cast<int>(i));\n\t\t}\n\n\t\tstd::clock_t TimestampsF = std::clock();\n\n\t\tstd::printf(\"bitCount - TimeIf %d\\n\", static_cast<int>(TimestampsB - TimestampsA));\n\t\tstd::printf(\"bitCount - TimeVec %d\\n\", static_cast<int>(TimestampsC - TimestampsB));\n\t\tstd::printf(\"bitCount - TimeDefault %d\\n\", static_cast<int>(TimestampsD - TimestampsC));\n\t\tstd::printf(\"bitCount - TimeVec4 %d\\n\", static_cast<int>(TimestampsE - TimestampsD));\n\t\tstd::printf(\"bitCount - bitfield %d\\n\", static_cast<int>(TimestampsF - TimestampsE));\n\n\t\treturn Error;\n\t}\n\n\tstatic int test()\n\t{\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(DataI32) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tint ResultA = glm::bitCount(DataI32[i].Value);\n\t\t\tint ResultB = bitCount_if(DataI32[i].Value);\n\t\t\tint ResultC = bitCount_vec(DataI32[i].Value);\n\t\t\tint ResultE = bitCount_bitfield(DataI32[i].Value);\n\n\t\t\tError += DataI32[i].Return == ResultA ? 0 : 1;\n\t\t\tError += DataI32[i].Return == ResultB ? 0 : 1;\n\t\t\tError += DataI32[i].Return == ResultC ? 0 : 1;\n\t\t\tError += DataI32[i].Return == ResultE ? 0 : 1;\n\n\t\t\tassert(!Error);\n\t\t}\n\n\t\treturn Error;\n\t}\n}//bitCount\n\nint main()\n{\n\tint Error = 0;\n\n\tError += ::bitCount::test();\n\tError += ::bitfieldReverse::test();\n\tError += ::findMSB::test();\n\tError += ::findLSB::test();\n\tError += ::umulExtended::test();\n\tError += ::imulExtended::test();\n\tError += ::uaddCarry::test();\n\tError += ::usubBorrow::test();\n\tError += ::bitfieldInsert::test();\n\tError += ::bitfieldExtract::test();\n\n#\tifdef NDEBUG\n\t\tstd::size_t const Samples = 1000;\n#\telse\n\t\tstd::size_t const Samples = 1;\n#\tendif\n\n\t::bitCount::perf(Samples);\n\t::bitfieldReverse::perf(Samples);\n\t::findMSB::perf(Samples);\n\t::findLSB::perf(Samples);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_func_integer_bit_count.cpp",
    "content": "// This has the programs for computing the number of 1-bits\n// in a word, or byte, etc.\n// Max line length is 57, to fit in hacker.book.\n#include <cstdio>\n#include <cstdlib>     //To define \"exit\", req'd by XLC.\n#include <ctime>\n\nunsigned rotatel(unsigned x, int n)\n{\n\tif (static_cast<unsigned>(n) > 63) { std::printf(\"rotatel, n out of range.\\n\"); std::exit(1);}\n\treturn (x << n) | (x >> (32 - n));\n}\n\nint pop0(unsigned x)\n{\n\tx = (x & 0x55555555) + ((x >> 1) & 0x55555555);\n\tx = (x & 0x33333333) + ((x >> 2) & 0x33333333);\n\tx = (x & 0x0F0F0F0F) + ((x >> 4) & 0x0F0F0F0F);\n\tx = (x & 0x00FF00FF) + ((x >> 8) & 0x00FF00FF);\n\tx = (x & 0x0000FFFF) + ((x >>16) & 0x0000FFFF);\n\treturn x;\n}\n\nint pop1(unsigned x)\n{\n\tx = x - ((x >> 1) & 0x55555555);\n\tx = (x & 0x33333333) + ((x >> 2) & 0x33333333);\n\tx = (x + (x >> 4)) & 0x0F0F0F0F;\n\tx = x + (x >> 8);\n\tx = x + (x >> 16);\n\treturn x & 0x0000003F;\n}\n/* Note: an alternative to the last three executable lines above is:\n   return x*0x01010101 >> 24;\nif your machine has a fast multiplier (suggested by Jari Kirma). */\n\nint pop2(unsigned x)\n{\n\tunsigned n;\n\n\tn = (x >> 1) & 033333333333;       // Count bits in\n\tx = x - n;                         // each 3-bit\n\tn = (n >> 1) & 033333333333;       // field.\n\tx = x - n;\n\tx = (x + (x >> 3)) & 030707070707; // 6-bit sums.\n\treturn x%63;                       // Add 6-bit sums.\n}\n\n/* An alternative to the \"return\" statement above is:\n   return ((x * 0404040404) >> 26) +  // Add 6-bit sums.\n           (x >> 30);\nwhich runs faster on most machines (suggested by Norbert Juffa). */\n\nint pop3(unsigned x)\n{\n\tunsigned n;\n\n\tn = (x >> 1) & 0x77777777;        // Count bits in\n\tx = x - n;                        // each 4-bit\n\tn = (n >> 1) & 0x77777777;        // field.\n\tx = x - n;\n\tn = (n >> 1) & 0x77777777;\n\tx = x - n;\n\tx = (x + (x >> 4)) & 0x0F0F0F0F;  // Get byte sums.\n\tx = x*0x01010101;                 // Add the bytes.\n\treturn x >> 24;\n}\n\nint pop4(unsigned x)\n{\n\tint n;\n\n\tn = 0;\n\twhile (x != 0) {\n\t\tn = n + 1;\n\t\tx = x & (x - 1);\n\t}\n\treturn n;\n}\n\nint pop5(unsigned x)\n{\n\tint i, sum;\n\n\t// Rotate and sum method        // Shift right & subtract\n\n\tsum = x;                     // sum = x;\n\tfor (i = 1; i <= 31; i++) {  // while (x != 0) {\n\t\tx = rotatel(x, 1);        //    x = x >> 1;\n\t\tsum = sum + x;            //    sum = sum - x;\n\t}                            // }\n\treturn -sum;                 // return sum;\n}\n\nint pop5a(unsigned x)\n{\n\tint sum;\n\n\t// Shift right & subtract\n\n\tsum = x;\n\twhile (x != 0) {\n\t\tx = x >> 1;\n\t\tsum = sum - x;\n\t}\n\treturn sum;\n}\n\nint pop6(unsigned x)\n{ // Table lookup.\n\tstatic char table[256] = {\n\t\t0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,\n\t\t1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,\n\t\t1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,\n\t\t2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n\n\t\t1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,\n\t\t2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n\t\t2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n\t\t3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n\n\t\t1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,\n\t\t2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n\t\t2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n\t\t3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n\n\t\t2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,\n\t\t3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n\t\t3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,\n\t\t4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8};\n\n\treturn table[x         & 0xFF] +\n\t\t\ttable[(x >>  8) & 0xFF] +\n\t\t\ttable[(x >> 16) & 0xFF] +\n\t\t\ttable[(x >> 24)];\n}\n\n// The following works only for 8-bit quantities.\nint pop7(unsigned x)\n{\n\tx = x*0x08040201;    // Make 4 copies.\n\tx = x >> 3;          // So next step hits proper bits.\n\tx = x & 0x11111111;  // Every 4th bit.\n\tx = x*0x11111111;    // Sum the digits (each 0 or 1).\n\tx = x >> 28;         // Position the result.\n\treturn x;\n}\n\n// The following works only for 7-bit quantities.\nint pop8(unsigned x)\n{\n\tx = x*0x02040810;    // Make 4 copies, left-adjusted.\n\tx = x & 0x11111111;  // Every 4th bit.\n\tx = x*0x11111111;    // Sum the digits (each 0 or 1).\n\tx = x >> 28;         // Position the result.\n\treturn x;\n}\n\n// The following works only for 15-bit quantities.\nint pop9(unsigned x)\n{\n\tunsigned long long y;\n\ty = x * 0x0002000400080010ULL;\n\ty = y & 0x1111111111111111ULL;\n\ty = y * 0x1111111111111111ULL;\n\ty = y >> 60;\n\treturn static_cast<int>(y);\n}\n\nint errors;\nvoid error(int x, int y)\n{\n\terrors = errors + 1;\n\tstd::printf(\"Error for x = %08x, got %08x\\n\", x, y);\n}\n\nint main()\n{\n#\tifdef NDEBUG\n\n\tint i, n;\n\tstatic unsigned test[] = {0,0, 1,1, 2,1, 3,2, 4,1, 5,2, 6,2, 7,3,\n\t\t8,1, 9,2, 10,2, 11,3, 12,2, 13,3, 14,3, 15,4, 16,1, 17,2,\n\t\t0x3F,6, 0x40,1, 0x41,2, 0x7f,7, 0x80,1, 0x81,2, 0xfe,7, 0xff,8,\n\t\t0x4000,1, 0x4001,2, 0x7000,3, 0x7fff,15,\n\t\t0x55555555,16, 0xAAAAAAAA, 16, 0xFF000000,8, 0xC0C0C0C0,8,\n\t\t0x0FFFFFF0,24, 0x80000000,1, 0xFFFFFFFF,32};\n\n\tstd::size_t const Count = 1000000;\n\n\tn = sizeof(test)/4;\n\n\tstd::clock_t TimestampBeg = 0;\n\tstd::clock_t TimestampEnd = 0;\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (pop0(test[i]) != test[i+1]) error(test[i], pop0(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop0: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (pop1(test[i]) != test[i+1]) error(test[i], pop1(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop1: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (pop2(test[i]) != test[i+1]) error(test[i], pop2(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop2: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (pop3(test[i]) != test[i+1]) error(test[i], pop3(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop3: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (pop4(test[i]) != test[i+1]) error(test[i], pop4(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop4: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (pop5(test[i]) != test[i+1]) error(test[i], pop5(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop5: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (pop5a(test[i]) != test[i+1]) error(test[i], pop5a(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop5a: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (pop6(test[i]) != test[i+1]) error(test[i], pop6(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop6: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif ((test[i] & 0xffffff00) == 0)\n\t\tif (pop7(test[i]) != test[i+1]) error(test[i], pop7(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop7: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif ((test[i] & 0xffffff80) == 0)\n\t\tif (pop8(test[i]) != test[i+1]) error(test[i], pop8(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop8: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif ((test[i] & 0xffff8000) == 0)\n\t\tif (pop9(test[i]) != test[i+1]) error(test[i], pop9(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"pop9: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tif (errors == 0)\n\t\tstd::printf(\"Passed all %d cases.\\n\", static_cast<int>(sizeof(test)/8));\n\n#\tendif//NDEBUG\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_func_integer_find_lsb.cpp",
    "content": "#include <glm/glm.hpp>\n#include <cstdio>\n#include <cstdlib>     //To define \"exit\", req'd by XLC.\n#include <ctime>\n\nint nlz(unsigned x)\n{\n\tint pop(unsigned x);\n\n\tx = x | (x >> 1);\n\tx = x | (x >> 2);\n\tx = x | (x >> 4);\n\tx = x | (x >> 8);\n\tx = x | (x >>16);\n\treturn pop(~x);\n}\n\nint pop(unsigned x)\n{\n\tx = x - ((x >> 1) & 0x55555555);\n\tx = (x & 0x33333333) + ((x >> 2) & 0x33333333);\n\tx = (x + (x >> 4)) & 0x0F0F0F0F;\n\tx = x + (x << 8);\n\tx = x + (x << 16);\n\treturn x >> 24;\n}\n\nint ntz1(unsigned x)\n{\n\treturn 32 - nlz(~x & (x-1));\n}\n\nint ntz2(unsigned x)\n{\n\treturn pop(~x & (x - 1));\n}\n\nint ntz3(unsigned x)\n{\n\tint n;\n\n\tif (x == 0) return(32);\n\tn = 1;\n\tif ((x & 0x0000FFFF) == 0) {n = n +16; x = x >>16;}\n\tif ((x & 0x000000FF) == 0) {n = n + 8; x = x >> 8;}\n\tif ((x & 0x0000000F) == 0) {n = n + 4; x = x >> 4;}\n\tif ((x & 0x00000003) == 0) {n = n + 2; x = x >> 2;}\n\treturn n - (x & 1);\n}\n\nint ntz4(unsigned x)\n{\n\tunsigned y;\n\tint n;\n\n\tif (x == 0) return 32;\n\tn = 31;\n\ty = x <<16;  if (y != 0) {n = n -16;  x = y;}\n\ty = x << 8;  if (y != 0) {n = n - 8;  x = y;}\n\ty = x << 4;  if (y != 0) {n = n - 4;  x = y;}\n\ty = x << 2;  if (y != 0) {n = n - 2;  x = y;}\n\ty = x << 1;  if (y != 0) {n = n - 1;}\n\treturn n;\n}\n\nint ntz4a(unsigned x)\n{\n\tunsigned y;\n\tint n;\n\n\tif (x == 0) return 32;\n\tn = 31;\n\ty = x <<16;  if (y != 0) {n = n -16;  x = y;}\n\ty = x << 8;  if (y != 0) {n = n - 8;  x = y;}\n\ty = x << 4;  if (y != 0) {n = n - 4;  x = y;}\n\ty = x << 2;  if (y != 0) {n = n - 2;  x = y;}\n\tn = n - ((x << 1) >> 31);\n\treturn n;\n}\n\nint ntz5(char x)\n{\n\tif (x & 15) {\n\t\tif (x & 3) {\n\t\t\tif (x & 1) return 0;\n\t\t\telse return 1;\n\t\t}\n\t\telse if (x & 4) return 2;\n\t\telse return 3;\n\t}\n\telse if (x & 0x30) {\n\t\tif (x & 0x10) return 4;\n\t\telse return 5;\n\t}\n\telse if (x & 0x40) return 6;\n\telse if (x) return 7;\n\telse return 8;\n}\n\nint ntz6(unsigned x)\n{\n\tint n;\n\n\tx = ~x & (x - 1);\n\tn = 0;\t\t\t\t// n = 32;\n\twhile(x != 0)\n\t{\t\t\t\t\t// while (x != 0) {\n\t\tn = n + 1;\t\t//    n = n - 1;\n\t\tx = x >> 1;\t\t//    x = x + x;\n\t}\t\t\t\t\t// }\n\treturn n;\t\t\t// return n;\n}\n\nint ntz6a(unsigned x)\n{\n\tint n = 32;\n\n\twhile (x != 0) {\n\t\tn = n - 1;\n\t\tx = x + x;\n\t}\n\treturn n;\n}\n\n/* Dean Gaudet's algorithm. To be most useful there must be a good way\nto evaluate the C \"conditional expression\" (a?b:c construction) without\nbranching. The result of a?b:c is b if a is true (nonzero), and c if a\nis false (0).\n   For example, a compare to zero op that sets a target GPR to 1 if the\noperand is 0, and to 0 if the operand is nonzero, will do it. With this\ninstruction, the algorithm is entirely branch-free. But the most\ninteresting thing about it is the high degree of parallelism. All six\nlines with conditional expressions can be executed in parallel (on a\nmachine with sufficient computational units).\n   Although the instruction count is 30 measured statically, it could\nexecute in only 10 cycles on a machine with sufficient parallelism.\n   The first two uses of y can instead be x, which would increase the\nuseful parallelism on most machines (the assignments to y, bz, and b4\ncould then all run in parallel). */\n\nint ntz7(unsigned x)\n{\n\tunsigned y, bz, b4, b3, b2, b1, b0;\n\n\ty = x & -x;               // Isolate rightmost 1-bit.\n\tbz = y ? 0 : 1;           // 1 if y = 0.\n\tb4 = (y & 0x0000FFFF) ? 0 : 16;\n\tb3 = (y & 0x00FF00FF) ? 0 : 8;\n\tb2 = (y & 0x0F0F0F0F) ? 0 : 4;\n\tb1 = (y & 0x33333333) ? 0 : 2;\n\tb0 = (y & 0x55555555) ? 0 : 1;\n\treturn bz + b4 + b3 + b2 + b1 + b0;\n}\n\n// This file has divisions by zero to test isnan\n#if GLM_COMPILER & GLM_COMPILER_VC\n#\tpragma warning(disable : 4800)\n#endif\n\nint ntz7_christophe(unsigned x)\n{\n\tunsigned y, bz, b4, b3, b2, b1, b0;\n\n\ty = x & -x;               // Isolate rightmost 1-bit.\n\tbz = unsigned(!bool(y));           // 1 if y = 0.\n\tb4 = unsigned(!bool(y & 0x0000FFFF)) * 16;\n\tb3 = unsigned(!bool(y & 0x00FF00FF)) * 8;\n\tb2 = unsigned(!bool(y & 0x0F0F0F0F)) * 4;\n\tb1 = unsigned(!bool(y & 0x33333333)) * 2;\n\tb0 = unsigned(!bool(y & 0x55555555)) * 1;\n\treturn bz + b4 + b3 + b2 + b1 + b0;\n}\n\n/* Below is David Seal's algorithm, found at\nhttp://www.ciphersbyritter.com/NEWS4/BITCT.HTM Table\nentries marked \"u\" are unused. 6 ops including a\nmultiply, plus an indexed load. */\n\n#define u 99\nint ntz8(unsigned x)\n{\n\tstatic char table[64] =\n\t\t{32, 0, 1,12, 2, 6, u,13,   3, u, 7, u, u, u, u,14,\n\t\t10, 4, u, u, 8, u, u,25,   u, u, u, u, u,21,27,15,\n\t\t31,11, 5, u, u, u, u, u,   9, u, u,24, u, u,20,26,\n\t\t30, u, u, u, u,23, u,19,  29, u,22,18,28,17,16, u};\n\n\tx = (x & -x)*0x0450FBAF;\n\treturn table[x >> 26];\n}\n\n/* Seal's algorithm with multiply expanded.\n9 elementary ops plus an indexed load. */\n\nint ntz8a(unsigned x)\n{\n\tstatic char table[64] =\n\t\t{32, 0, 1,12, 2, 6, u,13,   3, u, 7, u, u, u, u,14,\n\t\t10, 4, u, u, 8, u, u,25,   u, u, u, u, u,21,27,15,\n\t\t31,11, 5, u, u, u, u, u,   9, u, u,24, u, u,20,26,\n\t\t30, u, u, u, u,23, u,19,  29, u,22,18,28,17,16, u};\n\n\tx = (x & -x);\n\tx = (x << 4) + x;    // x = x*17.\n\tx = (x << 6) + x;    // x = x*65.\n\tx = (x << 16) - x;   // x = x*65535.\n\treturn table[x >> 26];\n}\n\n/* Reiser's algorithm. Three ops including a \"remainder,\"\nplus an indexed load. */\n\nint ntz9(unsigned x)\n{\n\tstatic char table[37] = {\n\t\t32,  0,  1, 26,  2, 23, 27,\n\t\tu,  3, 16, 24, 30, 28, 11,  u, 13,  4,\n\t\t7, 17,  u, 25, 22, 31, 15, 29, 10, 12,\n\t\t6,  u, 21, 14,  9,  5, 20,  8, 19, 18};\n\n\tx = (x & -x)%37;\n\treturn table[x];\n}\n\n/* Using a de Bruijn sequence. This is a table lookup with a 32-entry\ntable. The de Bruijn sequence used here is\n                0000 0100 1101 0111 0110 0101 0001 1111,\nobtained from Danny Dube's October 3, 1997, posting in\ncomp.compression.research. Thanks to Norbert Juffa for this reference. */\n\nint ntz10(unsigned x) {\n\n   static char table[32] =\n     { 0, 1, 2,24, 3,19, 6,25,  22, 4,20,10,16, 7,12,26,\n      31,23,18, 5,21, 9,15,11,  30,17, 8,14,29,13,28,27};\n\n   if (x == 0) return 32;\n   x = (x & -x)*0x04D7651F;\n   return table[x >> 27];\n}\n\n/* Norbert Juffa's code, answer to exercise 1 of Chapter 5 (2nd ed). */\n\n#define SLOW_MUL\nint ntz11 (unsigned int n) {\n\n   static unsigned char tab[32] =\n   {   0,  1,  2, 24,  3, 19, 6,  25,\n      22,  4, 20, 10, 16,  7, 12, 26,\n      31, 23, 18,  5, 21,  9, 15, 11,\n      30, 17,  8, 14, 29, 13, 28, 27\n   };\n   unsigned int k;\n   n = n & (-n);        /* isolate lsb */\n   printf(\"n = %d\\n\", n);\n#if defined(SLOW_MUL)\n   k = (n << 11) - n;\n   k = (k <<  2) + k;\n   k = (k <<  8) + n;\n   k = (k <<  5) - k;\n#else\n   k = n * 0x4d7651f;\n#endif\n   return n ? tab[k>>27] : 32;\n}\n\nint errors;\nvoid error(int x, int y) {\n   errors = errors + 1;\n   std::printf(\"Error for x = %08x, got %d\\n\", x, y);\n}\n\nint main()\n{\n#\tifdef NDEBUG\n\n\tint i, m, n;\n\tstatic unsigned test[] = {0,32, 1,0, 2,1, 3,0, 4,2, 5,0, 6,1,  7,0,\n\t\t8,3, 9,0, 16,4, 32,5, 64,6, 128,7, 255,0, 256,8, 512,9, 1024,10,\n\t\t2048,11, 4096,12, 8192,13, 16384,14, 32768,15, 65536,16,\n\t\t0x20000,17, 0x40000,18, 0x80000,19, 0x100000,20, 0x200000,21,\n\t\t0x400000,22, 0x800000,23, 0x1000000,24, 0x2000000,25,\n\t\t0x4000000,26, 0x8000000,27, 0x10000000,28, 0x20000000,29,\n\t\t0x40000000,30, 0x80000000,31, 0xFFFFFFF0,4, 0x3000FF00,8,\n\t\t0xC0000000,30, 0x60000000,29, 0x00011000, 12};\n\n\tstd::size_t const Count = 1000;\n\n\tn = sizeof(test)/4;\n\n\tstd::clock_t TimestampBeg = 0;\n\tstd::clock_t TimestampEnd = 0;\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz1(test[i]) != test[i+1]) error(test[i], ntz1(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz1: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz2(test[i]) != test[i+1]) error(test[i], ntz2(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz2: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz3(test[i]) != test[i+1]) error(test[i], ntz3(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz3: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz4(test[i]) != test[i+1]) error(test[i], ntz4(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz4: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz4a(test[i]) != test[i+1]) error(test[i], ntz4a(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz4a: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor(std::size_t k = 0; k < Count; ++k)\n\tfor(i = 0; i < n; i += 2)\n\t{\n\t\tm = test[i+1];\n\t\tif(m > 8)\n\t\t\tm = 8;\n\t\tif(ntz5(static_cast<char>(test[i])) != m)\n\t\t\terror(test[i], ntz5(static_cast<char>(test[i])));\n\t}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz5: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz6(test[i]) != test[i+1]) error(test[i], ntz6(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz6: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz6a(test[i]) != test[i+1]) error(test[i], ntz6a(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz6a: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz7(test[i]) != test[i+1]) error(test[i], ntz7(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz7: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz7_christophe(test[i]) != test[i+1]) error(test[i], ntz7(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz7_christophe: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz8(test[i]) != test[i+1]) error(test[i], ntz8(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz8: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz8a(test[i]) != test[i+1]) error(test[i], ntz8a(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz8a: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz9(test[i]) != test[i+1]) error(test[i], ntz9(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz9: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (ntz10(test[i]) != test[i+1]) error(test[i], ntz10(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"ntz10: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tif (errors == 0)\n\t\tstd::printf(\"Passed all %d cases.\\n\", static_cast<int>(sizeof(test)/8));\n\n#\tendif//NDEBUG\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_func_integer_find_msb.cpp",
    "content": "#include <glm/glm.hpp>\n#include <cstdio>\n#include <cstdlib>     // To define \"exit\", req'd by XLC.\n#include <ctime>\n\n#define LE 1            // 1 for little-endian, 0 for big-endian.\n\nint pop(unsigned x) {\n   x = x - ((x >> 1) & 0x55555555);\n   x = (x & 0x33333333) + ((x >> 2) & 0x33333333);\n   x = (x + (x >> 4)) & 0x0F0F0F0F;\n   x = x + (x << 8);\n   x = x + (x << 16);\n   return x >> 24;\n}\n\nint nlz1(unsigned x) {\n   int n;\n\n   if (x == 0) return(32);\n   n = 0;\n   if (x <= 0x0000FFFF) {n = n +16; x = x <<16;}\n   if (x <= 0x00FFFFFF) {n = n + 8; x = x << 8;}\n   if (x <= 0x0FFFFFFF) {n = n + 4; x = x << 4;}\n   if (x <= 0x3FFFFFFF) {n = n + 2; x = x << 2;}\n   if (x <= 0x7FFFFFFF) {n = n + 1;}\n   return n;\n}\n\nint nlz1a(unsigned x) {\n   int n;\n\n/* if (x == 0) return(32); */\n   if (static_cast<int>(x) <= 0) return (~x >> 26) & 32;\n   n = 1;\n   if ((x >> 16) == 0) {n = n +16; x = x <<16;}\n   if ((x >> 24) == 0) {n = n + 8; x = x << 8;}\n   if ((x >> 28) == 0) {n = n + 4; x = x << 4;}\n   if ((x >> 30) == 0) {n = n + 2; x = x << 2;}\n   n = n - (x >> 31);\n   return n;\n}\n// On basic Risc, 12 to 20 instructions.\n\nint nlz2(unsigned x) {\n   unsigned y;\n   int n;\n\n   n = 32;\n   y = x >>16;  if (y != 0) {n = n -16;  x = y;}\n   y = x >> 8;  if (y != 0) {n = n - 8;  x = y;}\n   y = x >> 4;  if (y != 0) {n = n - 4;  x = y;}\n   y = x >> 2;  if (y != 0) {n = n - 2;  x = y;}\n   y = x >> 1;  if (y != 0) return n - 2;\n   return n - x;\n}\n\n// As above but coded as a loop for compactness:\n// 23 to 33 basic Risc instructions.\nint nlz2a(unsigned x) {\n   unsigned y;\n   int n, c;\n\n   n = 32;\n   c = 16;\n   do {\n      y = x >> c;  if (y != 0) {n = n - c;  x = y;}\n      c = c >> 1;\n   } while (c != 0);\n   return n - x;\n}\n\nint nlz3(int x) {\n   int y, n;\n\n   n = 0;\n   y = x;\nL: if (x < 0) return n;\n   if (y == 0) return 32 - n;\n   n = n + 1;\n   x = x << 1;\n   y = y >> 1;\n   goto L;\n}\n\nint nlz4(unsigned x) {\n   int y, m, n;\n\n   y = -(x >> 16);      // If left half of x is 0,\n   m = (y >> 16) & 16;  // set n = 16.  If left half\n   n = 16 - m;          // is nonzero, set n = 0 and\n   x = x >> m;          // shift x right 16.\n                        // Now x is of the form 0000xxxx.\n   y = x - 0x100;       // If positions 8-15 are 0,\n   m = (y >> 16) & 8;   // add 8 to n and shift x left 8.\n   n = n + m;\n   x = x << m;\n\n   y = x - 0x1000;      // If positions 12-15 are 0,\n   m = (y >> 16) & 4;   // add 4 to n and shift x left 4.\n   n = n + m;\n   x = x << m;\n\n   y = x - 0x4000;      // If positions 14-15 are 0,\n   m = (y >> 16) & 2;   // add 2 to n and shift x left 2.\n   n = n + m;\n   x = x << m;\n\n   y = x >> 14;         // Set y = 0, 1, 2, or 3.\n   m = y & ~(y >> 1);   // Set m = 0, 1, 2, or 2 resp.\n   return n + 2 - m;\n}\n\nint nlz5(unsigned x) {\n   int pop(unsigned x);\n\n   x = x | (x >> 1);\n   x = x | (x >> 2);\n   x = x | (x >> 4);\n   x = x | (x >> 8);\n   x = x | (x >>16);\n   return pop(~x);\n}\n\n/* The four programs below are not valid ANSI C programs.  This is\nbecause they refer to the same storage locations as two different types.\nHowever, they work with xlc/AIX, gcc/AIX, and gcc/NT.  If you try to\ncode them more compactly by declaring a variable xx to be \"double,\" and\nthen using\n\n   n = 1054 - (*((unsigned *)&xx + LE) >> 20);\n\nthen you are violating not only the rule above, but also the ANSI C\nrule that pointer arithmetic can be performed only on pointers to\narray elements.\n   When coded with the above statement, the program fails with xlc,\ngcc/AIX, and gcc/NT, at some optimization levels.\n   BTW, these programs use the \"anonymous union\" feature of C++, not\navailable in C. */\n\nint nlz6(unsigned k)\n{\n\tunion {\n\t\tunsigned asInt[2];\n\t\tdouble asDouble;\n\t};\n\tint n;\n\n\tasDouble = static_cast<double>(k) + 0.5;\n\tn = 1054 - (asInt[LE] >> 20);\n\treturn n;\n}\n\nint nlz7(unsigned k)\n{\n\tunion {\n\t\tunsigned asInt[2];\n\t\tdouble asDouble;\n\t};\n\tint n;\n\n\tasDouble = static_cast<double>(k);\n\tn = 1054 - (asInt[LE] >> 20);\n\tn = (n & 31) + (n >> 9);\n\treturn n;\n}\n\n   /* In single qualifier, round-to-nearest mode, the basic method fails for:\n   k = 0, k = 01FFFFFF, 03FFFFFE <= k <= 03FFFFFF,\n                        07FFFFFC <= k <= 07FFFFFF,\n                        0FFFFFF8 <= k <= 0FFFFFFF,\n                                   ...\n                        7FFFFFC0 <= k <= 7FFFFFFF.\n                        FFFFFF80 <= k <= FFFFFFFF.\n   For k = 0 it gives 158, and for the other values it is too low by 1. */\n\nint nlz8(unsigned k)\n{\n\tunion {\n\t\tunsigned asInt;\n\t\tfloat asFloat;\n\t};\n\tint n;\n\n\tk = k & ~(k >> 1);           /* Fix problem with rounding. */\n\tasFloat = static_cast<float>(k) + 0.5f;\n\tn = 158 - (asInt >> 23);\n\treturn n;\n}\n\n/* The example below shows how to make a macro for nlz.  It uses an\nextension to the C and C++ languages that is provided by the GNU C/C++\ncompiler, namely, that of allowing statements and declarations in\nexpressions (see \"Using and Porting GNU CC\", by Richard M. Stallman\n(1998).  The underscores are necessary to protect against the\npossibility that the macro argument will conflict with one of its local\nvariables, e.g., NLZ(k). */\n\nint nlz9(unsigned k)\n{\n\tunion {\n\t\tunsigned asInt;\n\t\tfloat asFloat;\n\t};\n\tint n;\n\n\tk = k & ~(k >> 1);           /* Fix problem with rounding. */\n\tasFloat = static_cast<float>(k);\n\tn = 158 - (asInt >> 23);\n\tn = (n & 31) + (n >> 6);     /* Fix problem with k = 0. */\n\treturn n;\n}\n\n/* Below are three nearly equivalent programs for computing the number\nof leading zeros in a word. This material is not in HD, but may be in a\nfuture edition.\n   Immediately below is Robert Harley's algorithm, found at the\ncomp.arch newsgroup entry dated 7/12/96, pointed out to me by Norbert\nJuffa.\n   Table entries marked \"u\" are unused. 14 ops including a multiply,\nplus an indexed load.\n   The smallest multiplier that works is 0x045BCED1 = 17*65*129*513 (all\nof form 2**k + 1). There are no multipliers of three terms of the form\n2**k +- 1 that work, with a table size of 64 or 128. There are some,\nwith a table size of 64, if you precede the multiplication with x = x -\n(x >> 1), but that seems less elegant. There are also some if you use a\ntable size of 256, the smallest is 0x01033CBF = 65*255*1025 (this would\nsave two instructions in the form of this algorithm with the\nmultiplication expanded into shifts and adds, but the table size is\ngetting a bit large). */\n\n#define u 99\nint nlz10(unsigned x)\n{\n\tstatic char table[64] =\n\t\t{32,31, u,16, u,30, 3, u,  15, u, u, u,29,10, 2, u,\n\t\tu, u,12,14,21, u,19, u,   u,28, u,25, u, 9, 1, u,\n\t\t17, u, 4, u, u, u,11, u,  13,22,20, u,26, u, u,18,\n\t\t5, u, u,23, u,27, u, 6,   u,24, 7, u, 8, u, 0, u};\n\n\tx = x | (x >> 1);\t\t// Propagate leftmost\n\tx = x | (x >> 2);\t\t// 1-bit to the right.\n\tx = x | (x >> 4);\n\tx = x | (x >> 8);\n\tx = x | (x >>16);\n\tx = x*0x06EB14F9;\t\t// Multiplier is 7*255**3.\n\treturn table[x >> 26];\n}\n\n/* Harley's algorithm with multiply expanded.\n19 elementary ops plus an indexed load. */\n\nint nlz10a(unsigned x)\n{\n\tstatic char table[64] =\n\t\t{32,31, u,16, u,30, 3, u,  15, u, u, u,29,10, 2, u,\n\t\tu, u,12,14,21, u,19, u,   u,28, u,25, u, 9, 1, u,\n\t\t17, u, 4, u, u, u,11, u,  13,22,20, u,26, u, u,18,\n\t\t5, u, u,23, u,27, u, 6,   u,24, 7, u, 8, u, 0, u};\n\n\tx = x | (x >> 1);    // Propagate leftmost\n\tx = x | (x >> 2);    // 1-bit to the right.\n\tx = x | (x >> 4);\n\tx = x | (x >> 8);\n\tx = x | (x >> 16);\n\tx = (x << 3) - x;    // Multiply by 7.\n\tx = (x << 8) - x;    // Multiply by 255.\n\tx = (x << 8) - x;    // Again.\n\tx = (x << 8) - x;    // Again.\n\treturn table[x >> 26];\n}\n\n/* Julius Goryavsky's version of Harley's algorithm.\n17 elementary ops plus an indexed load, if the machine\nhas \"and not.\" */\n\nint nlz10b(unsigned x)\n{\n\tstatic char table[64] =\n\t\t{32,20,19, u, u,18, u, 7,  10,17, u, u,14, u, 6, u,\n\t\tu, 9, u,16, u, u, 1,26,   u,13, u, u,24, 5, u, u,\n\t\tu,21, u, 8,11, u,15, u,   u, u, u, 2,27, 0,25, u,\n\t\t22, u,12, u, u, 3,28, u,  23, u, 4,29, u, u,30,31};\n\n\tx = x | (x >> 1);    // Propagate leftmost\n\tx = x | (x >> 2);    // 1-bit to the right.\n\tx = x | (x >> 4);\n\tx = x | (x >> 8);\n\tx = x & ~(x >> 16);\n\tx = x*0xFD7049FF;    // Activate this line or the following 3.\n\t// x = (x << 9) - x;    // Multiply by 511.\n\t// x = (x << 11) - x;   // Multiply by 2047.\n\t// x = (x << 14) - x;   // Multiply by 16383.\n\treturn table[x >> 26];\n}\n\nint errors;\nvoid error(int x, int y)\n{\n\terrors = errors + 1;\n\tstd::printf(\"Error for x = %08x, got %d\\n\", x, y);\n}\n\nint main()\n{\n#\tifdef NDEBUG\n\n\tint i, n;\n\tstatic unsigned test[] = {0,32, 1,31, 2,30, 3,30, 4,29, 5,29, 6,29,\n\t\t7,29, 8,28, 9,28, 16,27, 32,26, 64,25, 128,24, 255,24, 256,23,\n\t\t512,22, 1024,21, 2048,20, 4096,19, 8192,18, 16384,17, 32768,16,\n\t\t65536,15, 0x20000,14, 0x40000,13, 0x80000,12, 0x100000,11,\n\t\t0x200000,10, 0x400000,9, 0x800000,8, 0x1000000,7, 0x2000000,6,\n\t\t0x4000000,5, 0x8000000,4, 0x0FFFFFFF,4, 0x10000000,3,\n\t\t0x3000FFFF,2, 0x50003333,1, 0x7FFFFFFF,1, 0x80000000,0,\n\t\t0xFFFFFFFF,0};\n\tstd::size_t const Count = 1000;\n\n\tn = sizeof(test)/4;\n\n\tstd::clock_t TimestampBeg = 0;\n\tstd::clock_t TimestampEnd = 0;\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz1(test[i]) != test[i+1]) error(test[i], nlz1(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz1: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz1a(test[i]) != test[i+1]) error(test[i], nlz1a(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz1a: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz2(test[i]) != test[i+1]) error(test[i], nlz2(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz2: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz2a(test[i]) != test[i+1]) error(test[i], nlz2a(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz2a: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz3(test[i]) != test[i+1]) error(test[i], nlz3(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz3: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz4(test[i]) != test[i+1]) error(test[i], nlz4(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz4: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz5(test[i]) != test[i+1]) error(test[i], nlz5(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz5: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz6(test[i]) != test[i+1]) error(test[i], nlz6(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz6: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz7(test[i]) != test[i+1]) error(test[i], nlz7(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz7: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz8(test[i]) != test[i+1]) error(test[i], nlz8(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz8: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz9(test[i]) != test[i+1]) error(test[i], nlz9(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz9: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz10(test[i]) != test[i+1]) error(test[i], nlz10(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz10: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz10a(test[i]) != test[i+1]) error(test[i], nlz10a(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz10a: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tTimestampBeg = std::clock();\n\tfor (std::size_t k = 0; k < Count; ++k)\n\tfor (i = 0; i < n; i += 2) {\n\t\tif (nlz10b(test[i]) != test[i+1]) error(test[i], nlz10b(test[i]));}\n\tTimestampEnd = std::clock();\n\n\tstd::printf(\"nlz10b: %d clocks\\n\", static_cast<int>(TimestampEnd - TimestampBeg));\n\n\tif (errors == 0)\n\t\tstd::printf(\"Passed all %d cases.\\n\", static_cast<int>(sizeof(test)/8));\n\n#\tendif//NDEBUG\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_func_matrix.cpp",
    "content": "#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/matrix_transform.hpp>\n#include <glm/ext/scalar_constants.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n#include <ctime>\n#include <cstdio>\n\nusing namespace glm;\n\nint test_matrixCompMult()\n{\n\tint Error(0);\n\n\t{\n\t\tmat2 m(0, 1, 2, 3);\n\t\tmat2 n = matrixCompMult(m, m);\n\t\tmat2 expected = mat2(0, 1, 4, 9);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat2x3 m(0, 1, 2, 3, 4, 5);\n\t\tmat2x3 n = matrixCompMult(m, m);\n\t\tmat2x3 expected = mat2x3(0, 1, 4, 9, 16, 25);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat2x4 m(0, 1, 2, 3, 4, 5, 6, 7);\n\t\tmat2x4 n = matrixCompMult(m, m);\n\t\tmat2x4 expected = mat2x4(0, 1, 4, 9, 16, 25, 36, 49);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat3 m(0, 1, 2, 3, 4, 5, 6, 7, 8);\n\t\tmat3 n = matrixCompMult(m, m);\n\t\tmat3 expected = mat3(0, 1, 4, 9, 16, 25, 36, 49, 64);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat3x2 m(0, 1, 2, 3, 4, 5);\n\t\tmat3x2 n = matrixCompMult(m, m);\n\t\tmat3x2 expected = mat3x2(0, 1, 4, 9, 16, 25);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat3x4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\n\t\tmat3x4 n = matrixCompMult(m, m);\n\t\tmat3x4 expected = mat3x4(0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\n\t\tmat4 n = matrixCompMult(m, m);\n\t\tmat4 expected = mat4(0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat4x2 m(0, 1, 2, 3, 4, 5, 6, 7);\n\t\tmat4x2 n = matrixCompMult(m, m);\n\t\tmat4x2 expected = mat4x2(0, 1, 4, 9, 16, 25, 36, 49);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat4x3 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\n\t\tmat4x3 n = matrixCompMult(m, m);\n\t\tmat4x3 expected = mat4x3(0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121);\n\t\tError += all(equal(n, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_outerProduct()\n{\n\t{ glm::mat2 m = glm::outerProduct(glm::vec2(1.0f), glm::vec2(1.0f)); }\n\t{ glm::mat3 m = glm::outerProduct(glm::vec3(1.0f), glm::vec3(1.0f)); }\n\t{ glm::mat4 m = glm::outerProduct(glm::vec4(1.0f), glm::vec4(1.0f)); }\n\n\t{ glm::mat2x3 m = glm::outerProduct(glm::vec3(1.0f), glm::vec2(1.0f)); }\n\t{ glm::mat2x4 m = glm::outerProduct(glm::vec4(1.0f), glm::vec2(1.0f)); }\n\n\t{ glm::mat3x2 m = glm::outerProduct(glm::vec2(1.0f), glm::vec3(1.0f)); }\n\t{ glm::mat3x4 m = glm::outerProduct(glm::vec4(1.0f), glm::vec3(1.0f)); }\n  \n\t{ glm::mat4x2 m = glm::outerProduct(glm::vec2(1.0f), glm::vec4(1.0f)); }\n\t{ glm::mat4x3 m = glm::outerProduct(glm::vec3(1.0f), glm::vec4(1.0f)); }\n\n\treturn 0;\n}\n\nint test_transpose()\n{\n\tint Error(0);\n\n\t{\n\t\tmat2 const m(0, 1, 2, 3);\n\t\tmat2 const t = transpose(m);\n\t\tmat2 const expected = mat2(0, 2, 1, 3);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat2x3 m(0, 1, 2, 3, 4, 5);\n\t\tmat3x2 t = transpose(m);\n\t\tmat3x2 const expected = mat3x2(0, 3, 1, 4, 2, 5);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat2x4 m(0, 1, 2, 3, 4, 5, 6, 7);\n\t\tmat4x2 t = transpose(m);\n\t\tmat4x2 const expected = mat4x2(0, 4, 1, 5, 2, 6, 3, 7);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat3 m(0, 1, 2, 3, 4, 5, 6, 7, 8);\n\t\tmat3 t = transpose(m);\n\t\tmat3 const expected = mat3(0, 3, 6, 1, 4, 7, 2, 5, 8);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat3x2 m(0, 1, 2, 3, 4, 5);\n\t\tmat2x3 t = transpose(m);\n\t\tmat2x3 const expected = mat2x3(0, 2, 4, 1, 3, 5);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat3x4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\n\t\tmat4x3 t = transpose(m);\n\t\tmat4x3 const expected = mat4x3(0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\n\t\tmat4 t = transpose(m);\n\t\tmat4 const expected = mat4(0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat4x2 m(0, 1, 2, 3, 4, 5, 6, 7);\n\t\tmat2x4 t = transpose(m);\n\t\tmat2x4 const expected = mat2x4(0, 2, 4, 6, 1, 3, 5, 7);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tmat4x3 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\n\t\tmat3x4 t = transpose(m);\n\t\tmat3x4 const expected = mat3x4(0, 3, 6, 9, 1, 4, 7, 10, 2, 5, 8, 11);\n\t\tError += all(equal(t, expected, epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_determinant()\n{\n\n\n\treturn 0;\n}\n\nint test_inverse()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::mat4x4 A4x4(\n\t\t\tglm::vec4(1, 0, 1, 0), \n\t\t\tglm::vec4(0, 1, 0, 0), \n\t\t\tglm::vec4(0, 0, 1, 0), \n\t\t\tglm::vec4(0, 0, 0, 1));\n\t\tglm::mat4x4 B4x4 = inverse(A4x4);\n\t\tglm::mat4x4 I4x4 = A4x4 * B4x4;\n\t\tglm::mat4x4 Identity(1);\n\t\tError += all(equal(I4x4, Identity, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat3x3 A3x3(\n\t\t\tglm::vec3(1, 0, 1), \n\t\t\tglm::vec3(0, 1, 0), \n\t\t\tglm::vec3(0, 0, 1));\n\t\tglm::mat3x3 B3x3 = glm::inverse(A3x3);\n\t\tglm::mat3x3 I3x3 = A3x3 * B3x3;\n\t\tglm::mat3x3 Identity(1);\n\t\tError += all(equal(I3x3, Identity, epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat2x2 A2x2(\n\t\t\tglm::vec2(1, 1), \n\t\t\tglm::vec2(0, 1));\n\t\tglm::mat2x2 B2x2 = glm::inverse(A2x2);\n\t\tglm::mat2x2 I2x2 = A2x2 * B2x2;\n\t\tglm::mat2x2 Identity(1);\n\t\tError += all(equal(I2x2, Identity, epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_inverse_simd()\n{\n\tint Error = 0;\n\n\tglm::mat4x4 const Identity(1);\n\n\tglm::mat4x4 const A4x4(\n\t\tglm::vec4(1, 0, 1, 0),\n\t\tglm::vec4(0, 1, 0, 0),\n\t\tglm::vec4(0, 0, 1, 0),\n\t\tglm::vec4(0, 0, 0, 1));\n\tglm::mat4x4 const B4x4 = glm::inverse(A4x4);\n\tglm::mat4x4 const I4x4 = A4x4 * B4x4;\n\n\tError += glm::all(glm::equal(I4x4, Identity, 0.001f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_shearing()\n{\n    int Error = 0;\n\n    {\n        glm::vec3 const center(0, 0, 0);\n        glm::vec2 const l_x(2, 0);\n        glm::vec2 const l_y(0, 0);\n        glm::vec2 const l_z(0, 0);\n        glm::mat4x4 const A4x4(\n                glm::vec4(0, 0, 1, 1),\n                glm::vec4(0, 1, 1, 0),\n                glm::vec4(1, 1, 1, 0),\n                glm::vec4(1, 1, 0, 1));\n        glm::mat4x4 const B4x4 = glm::shear(A4x4, center, l_x, l_y, l_z);\n        glm::mat4x4 const expected(\n                glm::vec4(0, 0, 1, 1),\n                glm::vec4(2, 1, 1, 0),\n                glm::vec4(3, 1, 1, 0),\n                glm::vec4(3, 1, 0, 1));\n        Error += all(equal(B4x4, expected, epsilon<float>())) ? 0 : 1;\n    }\n\n    {\n        glm::vec3 const center(0, 0, 0);\n        glm::vec2 const l_x(1, 0);\n        glm::vec2 const l_y(0, 1);\n        glm::vec2 const l_z(1, 0);\n        glm::mat4x4 const A4x4(\n                glm::vec4(0, 0, 1, 0),\n                glm::vec4(0, 1, 1, 0),\n                glm::vec4(1, 1, 1, 0),\n                glm::vec4(1, 0, 0, 0));\n        glm::mat4x4 const B4x4 = glm::shear(A4x4, center, l_x, l_y, l_z);\n        glm::mat4x4 const expected(\n                glm::vec4(0, 1, 1, 0),\n                glm::vec4(1, 2, 1, 0),\n                glm::vec4(2, 2, 2, 0),\n                glm::vec4(1, 0, 1, 0));\n        Error += all(equal(B4x4, expected, epsilon<float>())) ? 0 : 1;\n    }\n\n    {\n        glm::vec3 const center(3, 2, 1);\n        glm::vec2 const l_x(1, 2);\n        glm::vec2 const l_y(3, 1);\n        glm::vec2 const l_z(4, 5);\n        glm::mat4x4 const A4x4(1);\n        glm::mat4x4 const B4x4 = glm::shear(A4x4, center, l_x, l_y, l_z);\n        glm::mat4x4 const expected(\n                glm::vec4(1, 3, 4, 0),\n                glm::vec4(1, 1, 5, 0),\n                glm::vec4(2, 1, 1, 0),\n                glm::vec4(-9, -8, -9, 1));\n        Error += all(equal(B4x4, expected, epsilon<float>())) ? 0 : 1;\n    }\n\n    {\n        glm::vec3 const center(3, 2, 1);\n        glm::vec2 const l_x(1, 2);\n        glm::vec2 const l_y(3, 1);\n        glm::vec2 const l_z(4, 5);\n        glm::mat4x4 const A4x4(\n                glm::vec4(-3, 2, 1, 0),\n                glm::vec4(3, 2, 1, 0),\n                glm::vec4(4, -8, 0, 0),\n                glm::vec4(7, 1, -2, 0));\n        glm::mat4x4 const B4x4 = glm::shear(A4x4, center, l_x, l_y, l_z);\n        glm::mat4x4 const expected(\n                glm::vec4(1, -6, -1, 0),\n                glm::vec4(7, 12, 23, 0),\n                glm::vec4(-4, 4, -24, 0),\n                glm::vec4(4, 20, 31, 0));\n        Error += all(equal(B4x4, expected, epsilon<float>())) ? 0 : 1;\n    }\n\n    return Error;\n}\n\ntemplate<typename VEC3, typename MAT4>\nint test_inverse_perf(std::size_t Count, std::size_t Instance, char const * Message)\n{\n\tstd::vector<MAT4> TestInputs;\n\tTestInputs.resize(Count);\n\tstd::vector<MAT4> TestOutputs;\n\tTestOutputs.resize(TestInputs.size());\n\n\tVEC3 Axis(glm::normalize(VEC3(1.0f, 2.0f, 3.0f)));\n\n\tfor(std::size_t i = 0; i < TestInputs.size(); ++i)\n\t{\n\t\ttypename MAT4::value_type f = static_cast<typename MAT4::value_type>(i + Instance) * typename MAT4::value_type(0.1) + typename MAT4::value_type(0.1);\n\t\tTestInputs[i] = glm::rotate(glm::translate(MAT4(1), Axis * f), f, Axis);\n\t\t//TestInputs[i] = glm::translate(MAT4(1), Axis * f);\n\t}\n\n\tstd::clock_t StartTime = std::clock();\n\n\tfor(std::size_t i = 0; i < TestInputs.size(); ++i)\n\t\tTestOutputs[i] = glm::inverse(TestInputs[i]);\n\n\tstd::clock_t EndTime = std::clock();\n\n\tfor(std::size_t i = 0; i < TestInputs.size(); ++i)\n\t\tTestOutputs[i] = TestOutputs[i] * TestInputs[i];\n\n\ttypename MAT4::value_type Diff(0);\n\tfor(std::size_t Entry = 0; Entry < TestOutputs.size(); ++Entry)\n\t{\n\t\tMAT4 i(1.0);\n\t\tMAT4 m(TestOutputs[Entry]);\n\t\tfor(glm::length_t y = 0; y < m.length(); ++y)\n\t\tfor(glm::length_t x = 0; x < m[y].length(); ++x)\n\t\t\tDiff = glm::max(m[y][x], i[y][x]);\n\t}\n\n\t//glm::uint Ulp = 0;\n\t//Ulp = glm::max(glm::float_distance(*Dst, *Src), Ulp);\n\n\tstd::printf(\"inverse<%s>(%f): %lu\\n\", Message, static_cast<double>(Diff), EndTime - StartTime);\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\tError += test_matrixCompMult();\n\tError += test_outerProduct();\n\tError += test_transpose();\n\tError += test_determinant();\n\tError += test_inverse();\n    Error += test_inverse_simd();\n    Error += test_shearing();\n\n#\tifdef NDEBUG\n\tstd::size_t const Samples = 1000;\n#\telse\n\tstd::size_t const Samples = 1;\n#\tendif//NDEBUG\n\n\tfor(std::size_t i = 0; i < 1; ++i)\n\t{\n\t\tError += test_inverse_perf<glm::vec3, glm::mat4>(Samples, i, \"mat4\");\n\t\tError += test_inverse_perf<glm::dvec3, glm::dmat4>(Samples, i, \"dmat4\");\n\t}\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_func_noise.cpp",
    "content": "int main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_func_packing.cpp",
    "content": "#include <glm/gtc/type_precision.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/packing.hpp>\n#include <vector>\n\nint test_packUnorm2x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2(1.0f, 0.0f));\n\tA.push_back(glm::vec2(0.5f, 0.7f));\n\tA.push_back(glm::vec2(0.1f, 0.2f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::uint32 C = glm::packUnorm2x16(B);\n\t\tglm::vec2 D = glm::unpackUnorm2x16(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 65535.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packSnorm2x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2( 1.0f, 0.0f));\n\tA.push_back(glm::vec2(-0.5f,-0.7f));\n\tA.push_back(glm::vec2(-0.1f, 0.1f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::uint32 C = glm::packSnorm2x16(B);\n\t\tglm::vec2 D = glm::unpackSnorm2x16(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 32767.0f * 2.0f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packUnorm4x8()\n{\n\tint Error = 0;\n\n\tglm::uint32 Packed = glm::packUnorm4x8(glm::vec4(1.0f, 0.5f, 0.0f, 1.0f));\n\tglm::u8vec4 Vec(255, 128, 0, 255);\n\tglm::uint32 & Ref = *reinterpret_cast<glm::uint32*>(&Vec[0]);\n\n\tError += Packed == Ref ? 0 : 1;\n\n\tstd::vector<glm::vec4> A;\n\tA.push_back(glm::vec4(1.0f, 0.7f, 0.3f, 0.0f));\n\tA.push_back(glm::vec4(0.5f, 0.1f, 0.2f, 0.3f));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec4 B(A[i]);\n\t\tglm::uint32 C = glm::packUnorm4x8(B);\n\t\tglm::vec4 D = glm::unpackUnorm4x8(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 255.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packSnorm4x8()\n{\n\tint Error = 0;\n\t\n\tstd::vector<glm::vec4> A;\n\tA.push_back(glm::vec4( 1.0f, 0.0f,-0.5f,-1.0f));\n\tA.push_back(glm::vec4(-0.7f,-0.1f, 0.1f, 0.7f));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec4 B(A[i]);\n\t\tglm::uint32 C = glm::packSnorm4x8(B);\n\t\tglm::vec4 D = glm::unpackSnorm4x8(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 127.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packHalf2x16()\n{\n\tint Error = 0;\n/*\n\tstd::vector<glm::hvec2> A;\n\tA.push_back(glm::hvec2(glm::half( 1.0f), glm::half( 2.0f)));\n\tA.push_back(glm::hvec2(glm::half(-1.0f), glm::half(-2.0f)));\n\tA.push_back(glm::hvec2(glm::half(-1.1f), glm::half( 1.1f)));\n*/\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2( 1.0f, 2.0f));\n\tA.push_back(glm::vec2(-1.0f,-2.0f));\n\tA.push_back(glm::vec2(-1.1f, 1.1f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::uint C = glm::packHalf2x16(B);\n\t\tglm::vec2 D = glm::unpackHalf2x16(C);\n\t\t//Error += B == D ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 127.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packDouble2x32()\n{\n\tint Error = 0;\n\t\n\tstd::vector<glm::uvec2> A;\n\tA.push_back(glm::uvec2( 1, 2));\n\tA.push_back(glm::uvec2(-1,-2));\n\tA.push_back(glm::uvec2(-1000, 1100));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::uvec2 B(A[i]);\n\t\tdouble C = glm::packDouble2x32(B);\n\t\tglm::uvec2 D = glm::unpackDouble2x32(C);\n\t\tError += B == D ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\t\n\tError += test_packSnorm4x8();\n\tError += test_packUnorm4x8();\n\tError += test_packSnorm2x16();\n\tError += test_packUnorm2x16();\n\tError += test_packHalf2x16();\n\tError += test_packDouble2x32();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_func_swizzle.cpp",
    "content": "#define GLM_FORCE_SWIZZLE\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/glm.hpp>\n\nstatic int test_ivec2_swizzle()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t{\n\t\tglm::ivec2 A(1, 2);\n\t\tglm::ivec2 B = A.yx();\n\t\tglm::ivec2 C = B.yx();\n\n\t\tError += A != B ? 0 : 1;\n\t\tError += A == C ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::ivec2 A(1, 2);\n\t\tglm::ivec2 B = A.yx;\n\t\tglm::ivec2 C = A.yx;\n\n\t\tError += A != B ? 0 : 1;\n\t\tError += B == C ? 0 : 1;\n\n\t\tB.xy = B.yx;\n\t\tC.xy = C.yx;\n\n\t\tError += B == C ? 0 : 1;\n\n\t\tglm::ivec2 D(0, 0);\n\t\tD.yx = A.xy;\n\t\tError += A.yx() == D ? 0 : 1;\n\n\t\tglm::ivec2 E = A.yx;\n\t\tError += E == D ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE\n\n\treturn Error;\n}\n\nint test_ivec3_swizzle()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t{\n\t\tglm::ivec3 A(1, 2, 3);\n\t\tglm::ivec3 B = A.zyx();\n\t\tglm::ivec3 C = B.zyx();\n\n\t\tError += A != B ? 0 : 1;\n\t\tError += A == C ? 0 : 1;\n\t}\n#\tendif\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::ivec3 const A(1, 2, 3);\n\t\tglm::ivec2 B = A.yx;\n\t\tglm::ivec2 C = A.yx;\n\n\t\tError += A.yx() == B ? 0 : 1;\n\t\tError += B == C ? 0 : 1;\n\n\t\tB.xy = B.yx;\n\t\tC.xy = C.yx;\n\n\t\tError += B == C ? 0 : 1;\n\n\t\tglm::ivec2 D(0, 0);\n\t\tD.yx = A.xy;\n\n\t\tError += A.yx() == D ? 0 : 1;\n\n\t\tglm::ivec2 E(0, 0);\n\t\tE.xy = A.xy();\n\n\t\tError += E == A.xy() ? 0 : 1;\n\t\tError += E.xy() == A.xy() ? 0 : 1;\n\n\t\tglm::ivec3 const F = A.xxx + A.xxx;\n\t\tError += F == glm::ivec3(2) ? 0 : 1;\n\n\t\tglm::ivec3 const G = A.xxx - A.xxx;\n\t\tError += G == glm::ivec3(0) ? 0 : 1;\n\n\t\tglm::ivec3 const H = A.xxx * A.xxx;\n\t\tError += H == glm::ivec3(1) ? 0 : 1;\n\n\t\tglm::ivec3 const I = A.xxx / A.xxx;\n\t\tError += I == glm::ivec3(1) ? 0 : 1;\n\n\t\tglm::ivec3 J(1, 2, 3);\n\t\tJ.xyz += glm::ivec3(1);\n\t\tError += J == glm::ivec3(2, 3, 4) ? 0 : 1;\n\n\t\tglm::ivec3 K(1, 2, 3);\n\t\tK.xyz += A.xyz;\n\t\tError += K == glm::ivec3(2, 4, 6) ? 0 : 1;\n\t}\n#\tendif\n\n\treturn Error;\n}\n\nint test_ivec4_swizzle()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t{\n\t\tglm::ivec4 A(1, 2, 3, 4);\n\t\tglm::ivec4 B = A.wzyx();\n\t\tglm::ivec4 C = B.wzyx();\n\n\t\tError += A != B ? 0 : 1;\n\t\tError += A == C ? 0 : 1;\n\t}\n#\tendif\n\n\treturn Error;\n}\n\nint test_vec4_swizzle()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t{\n\t\tglm::vec4 A(1, 2, 3, 4);\n\t\tglm::vec4 B = A.wzyx();\n\t\tglm::vec4 C = B.wzyx();\n\n\t\tError += glm::any(glm::notEqual(A, B, 0.0001f)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\n\t\tfloat D = glm::dot(C.wzyx(), C.xyzw());\n\t\tError += glm::equal(D, 20.f, 0.001f) ? 0 : 1;\n\t}\n#\tendif\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_ivec2_swizzle();\n\tError += test_ivec3_swizzle();\n\tError += test_ivec4_swizzle();\n\tError += test_vec4_swizzle();\n\n\treturn Error;\n}\n\n\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_func_trigonometric.cpp",
    "content": "#include <glm/trigonometric.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_func_vector_relational.cpp",
    "content": "#include <glm/vec2.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec4.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/gtc/vec1.hpp>\n\nstatic int test_not()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::bvec1 v(false);\n\t\tError += glm::all(glm::not_(v)) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::bvec2 v(false);\n\t\tError += glm::all(glm::not_(v)) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::bvec3 v(false);\n\t\tError += glm::all(glm::not_(v)) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tglm::bvec4 v(false);\n\t\tError += glm::all(glm::not_(v)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_less()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::vec2 const A(1, 2);\n\t\tglm::vec2 const B(2, 3);\n\t\tError += glm::all(glm::lessThan(A, B)) ? 0: 1;\n\t\tError += glm::all(glm::lessThanEqual(A, B)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::vec3 const A(1, 2, 3);\n\t\tglm::vec3 const B(2, 3, 4);\n\t\tError += glm::all(glm::lessThan(A, B)) ? 0: 1;\n\t\tError += glm::all(glm::lessThanEqual(A, B)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::vec4 const A(1, 2, 3, 4);\n\t\tglm::vec4 const B(2, 3, 4, 5);\n\t\tError += glm::all(glm::lessThan(A, B)) ? 0: 1;\n\t\tError += glm::all(glm::lessThanEqual(A, B)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::ivec2 const A(1, 2);\n\t\tglm::ivec2 const B(2, 3);\n\t\tError += glm::all(glm::lessThan(A, B)) ? 0: 1;\n\n\t\tglm::ivec2 const C(1, 3);\n\t\tError += glm::all(glm::lessThanEqual(A, C)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::ivec3 const A(1, 2, 3);\n\t\tglm::ivec3 const B(2, 3, 4);\n\t\tError += glm::all(glm::lessThan(A, B)) ? 0: 1;\n\n\t\tglm::ivec3 const C(1, 3, 4);\n\t\tError += glm::all(glm::lessThanEqual(A, C)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::ivec4 const A(1, 2, 3, 4);\n\t\tglm::ivec4 const B(2, 3, 4, 5);\n\t\tError += glm::all(glm::lessThan(A, B)) ? 0: 1;\n\n\t\tglm::ivec4 const C(1, 3, 4, 5);\n\t\tError += glm::all(glm::lessThanEqual(A, C)) ? 0: 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_greater()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::vec2 const A(1, 2);\n\t\tglm::vec2 const B(2, 3);\n\t\tError += glm::all(glm::greaterThan(B, A)) ? 0: 1;\n\t\tError += glm::all(glm::greaterThanEqual(B, A)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::vec3 const A(1, 2, 3);\n\t\tglm::vec3 const B(2, 3, 4);\n\t\tError += glm::all(glm::greaterThan(B, A)) ? 0: 1;\n\t\tError += glm::all(glm::greaterThanEqual(B, A)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::vec4 const A(1, 2, 3, 4);\n\t\tglm::vec4 const B(2, 3, 4, 5);\n\t\tError += glm::all(glm::greaterThan(B, A)) ? 0: 1;\n\t\tError += glm::all(glm::greaterThanEqual(B, A)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::ivec2 const A(1, 2);\n\t\tglm::ivec2 const B(2, 3);\n\t\tError += glm::all(glm::greaterThan(B, A)) ? 0: 1;\n\n\t\tglm::ivec2 const C(1, 3);\n\t\tError += glm::all(glm::greaterThanEqual(C, A)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::ivec3 const A(1, 2, 3);\n\t\tglm::ivec3 const B(2, 3, 4);\n\t\tError += glm::all(glm::greaterThan(B, A)) ? 0: 1;\n\n\t\tglm::ivec3 const C(1, 3, 4);\n\t\tError += glm::all(glm::greaterThanEqual(C, A)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::ivec4 const A(1, 2, 3, 4);\n\t\tglm::ivec4 const B(2, 3, 4, 5);\n\t\tError += glm::all(glm::greaterThan(B, A)) ? 0: 1;\n\n\t\tglm::ivec4 const C(1, 3, 4, 5);\n\t\tError += glm::all(glm::greaterThanEqual(C, A)) ? 0: 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_equal()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::ivec2 const A(1, 2);\n\t\tglm::ivec2 const B(1, 2);\n\t\tError += glm::all(glm::equal(B, A)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::ivec3 const A(1, 2, 3);\n\t\tglm::ivec3 const B(1, 2, 3);\n\t\tError += glm::all(glm::equal(B, A)) ? 0: 1;\n\t}\n\n\t{\n\t\tglm::ivec4 const A(1, 2, 3, 4);\n\t\tglm::ivec4 const B(1, 2, 3, 4);\n\t\tError += glm::all(glm::equal(B, A)) ? 0: 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_not();\n\tError += test_less();\n\tError += test_greater();\n\tError += test_equal();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_setup_force_cxx98.cpp",
    "content": "#ifndef GLM_FORCE_CXX98\n#\tdefine GLM_FORCE_CXX98\n#endif\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_setup_force_size_t_length.cpp",
    "content": "#define GLM_FORCE_SIZE_T_LENGTH\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\ntemplate <typename genType>\ngenType add(genType const& a, genType const& b)\n{\n\tgenType result(0);\n\tfor(glm::length_t i = 0; i < a.length(); ++i)\n\t\tresult[i] = a[i] + b[i];\n\treturn result;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tglm::ivec4 v(1);\n\tError += add(v, v) == glm::ivec4(2) ? 0 : 1;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_setup_message.cpp",
    "content": "#define GLM_FORCE_MESSAGES\n#include <glm/vec3.hpp>\n#include <cstdio>\n\nint test_compiler()\n{\n\tint Error(0);\n\t\n\tif(GLM_COMPILER & GLM_COMPILER_VC)\n\t{\n\t\tswitch(GLM_COMPILER)\n\t\t{\n\t\tcase GLM_COMPILER_VC12:\n\t\t\tstd::printf(\"Visual C++ 12 - 2013\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC14:\n\t\t\tstd::printf(\"Visual C++ 14 - 2015\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC15:\n\t\t\tstd::printf(\"Visual C++ 15 - 2017\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC15_3:\n\t\t\tstd::printf(\"Visual C++ 15.3 - 2017\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC15_5:\n\t\t\tstd::printf(\"Visual C++ 15.5 - 2017\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC15_6:\n\t\t\tstd::printf(\"Visual C++ 15.6 - 2017\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC15_7:\n\t\t\tstd::printf(\"Visual C++ 15.7 - 2017\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC15_8:\n\t\t\tstd::printf(\"Visual C++ 15.8 - 2017\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC15_9:\n\t\t\tstd::printf(\"Visual C++ 15.9 - 2017\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_VC16:\n\t\t\tstd::printf(\"Visual C++ 16 - 2019\\n\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tstd::printf(\"Visual C++ version not detected\\n\");\n\t\t\tError += 1;\n\t\t\tbreak;\n\t\t}\n\t}\n\telse if(GLM_COMPILER & GLM_COMPILER_GCC)\n\t{\n\t\tswitch(GLM_COMPILER)\n\t\t{\n\t\tcase GLM_COMPILER_GCC46:\n\t\t\tstd::printf(\"GCC 4.6\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_GCC47:\n\t\t\tstd::printf(\"GCC 4.7\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_GCC48:\n\t\t\tstd::printf(\"GCC 4.8\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_GCC49:\n\t\t\tstd::printf(\"GCC 4.9\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_GCC5:\n\t\t\tstd::printf(\"GCC 5\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_GCC6:\n\t\t\tstd::printf(\"GCC 6\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_GCC7:\n\t\t\tstd::printf(\"GCC 7\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_GCC8:\n\t\t\tstd::printf(\"GCC 8\\n\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tstd::printf(\"GCC version not detected\\n\");\n\t\t\tError += 1;\n\t\t\tbreak;\n\t\t}\n\t}\n\telse if(GLM_COMPILER & GLM_COMPILER_CUDA)\n\t{\n\t\tstd::printf(\"CUDA\\n\");\n\t}\n\telse if(GLM_COMPILER & GLM_COMPILER_CLANG)\n\t{\n\t\tswitch(GLM_COMPILER)\n\t\t{\n\t\tcase GLM_COMPILER_CLANG34:\n\t\t\tstd::printf(\"Clang 3.4\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_CLANG35:\n\t\t\tstd::printf(\"Clang 3.5\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_CLANG36:\n\t\t\tstd::printf(\"Clang 3.6\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_CLANG37:\n\t\t\tstd::printf(\"Clang 3.7\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_CLANG38:\n\t\t\tstd::printf(\"Clang 3.8\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_CLANG39:\n\t\t\tstd::printf(\"Clang 3.9\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_CLANG40:\n\t\t\tstd::printf(\"Clang 4.0\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_CLANG41:\n\t\t\tstd::printf(\"Clang 4.1\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_CLANG42:\n\t\t\tstd::printf(\"Clang 4.2\\n\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tstd::printf(\"LLVM version not detected\\n\");\n\t\t\tbreak;\n\t\t}\n\t}\n\telse if(GLM_COMPILER & GLM_COMPILER_INTEL)\n\t{\n\t\tswitch(GLM_COMPILER)\n\t\t{\n\t\tcase GLM_COMPILER_INTEL14:\n\t\t\tstd::printf(\"ICC 14 - 2013 SP1\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_INTEL15:\n\t\t\tstd::printf(\"ICC 15 - 2015\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_INTEL16:\n\t\t\tstd::printf(\"ICC 16 - 2017\\n\");\n\t\t\tbreak;\n\t\tcase GLM_COMPILER_INTEL17:\n\t\t\tstd::printf(\"ICC 17 - 20XX\\n\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tstd::printf(\"Intel compiler version not detected\\n\");\n\t\t\tError += 1;\n\t\t\tbreak;\n\t\t}\n\t}\n\telse\n\t{\n\t\tstd::printf(\"Undetected compiler\\n\");\n\t\tError += 1;\n\t}\n\t\n\treturn Error;\n}\n\nint test_model()\n{\n\tint Error = 0;\n\t\n\tError += ((sizeof(void*) == 4) && (GLM_MODEL == GLM_MODEL_32)) || ((sizeof(void*) == 8) && (GLM_MODEL == GLM_MODEL_64)) ? 0 : 1;\n\t\n\tif(GLM_MODEL == GLM_MODEL_32)\n\t\tstd::printf(\"GLM_MODEL_32\\n\");\n\telse if(GLM_MODEL == GLM_MODEL_64)\n\t\tstd::printf(\"GLM_MODEL_64\\n\");\n\t\n\treturn Error;\n}\n\nint test_instruction_set()\n{\n\tint Error = 0;\n\n\tstd::printf(\"GLM_ARCH: \");\n\n\tif(GLM_ARCH & GLM_ARCH_ARM_BIT)\n\t\tstd::printf(\"ARM \");\n\tif(GLM_ARCH & GLM_ARCH_NEON_BIT)\n\t\tstd::printf(\"NEON \");\n\tif(GLM_ARCH & GLM_ARCH_AVX2_BIT)\n\t\tstd::printf(\"AVX2 \");\n\tif(GLM_ARCH & GLM_ARCH_AVX_BIT)\n\t\tstd::printf(\"AVX \");\n\tif(GLM_ARCH & GLM_ARCH_SSE42_BIT)\n\t\tstd::printf(\"SSE4.2 \");\n\tif(GLM_ARCH & GLM_ARCH_SSE41_BIT)\n\t\tstd::printf(\"SSE4.1 \");\n\tif(GLM_ARCH & GLM_ARCH_SSSE3_BIT)\n\t\tstd::printf(\"SSSE3 \");\n\tif(GLM_ARCH & GLM_ARCH_SSE3_BIT)\n\t\tstd::printf(\"SSE3 \");\n\tif(GLM_ARCH & GLM_ARCH_SSE2_BIT)\n\t\tstd::printf(\"SSE2 \");\n\n\tstd::printf(\"\\n\");\n\n\treturn Error;\n}\n\nint test_cpp_version()\n{\n\tstd::printf(\"__cplusplus: %d\\n\", static_cast<int>(__cplusplus));\n\t\n\treturn 0;\n}\n\nint test_operators()\n{\n\tglm::ivec3 A(1);\n\tglm::ivec3 B(1);\n\tbool R = A != B;\n\tbool S = A == B;\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nint main()\n{\n\tint Error = 0;\n\n#\tif !defined(GLM_FORCE_PLATFORM_UNKNOWN) && !defined(GLM_FORCE_COMPILER_UNKNOWN) && !defined(GLM_FORCE_ARCH_UNKNOWN) && !defined(GLM_FORCE_CXX_UNKNOWN)\n\t\t\n\t\tError += test_cpp_version();\n\t\tError += test_compiler();\n\t\tError += test_model();\n\t\tError += test_instruction_set();\n\t\tError += test_operators();\n\n#\tendif\n\t\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_setup_platform_unknown.cpp",
    "content": "#ifndef GLM_FORCE_PLATFORM_UNKNOWN\n#\tdefine GLM_FORCE_PLATFORM_UNKNOWN\n#endif\n#ifndef GLM_FORCE_COMPILER_UNKNOWN\n#\tdefine GLM_FORCE_COMPILER_UNKNOWN\n#endif\n#ifndef GLM_FORCE_ARCH_UNKNOWN\n#\tdefine GLM_FORCE_ARCH_UNKNOWN\n#endif\n#ifndef GLM_FORCE_CXX_UNKNOWN\n#\tdefine GLM_FORCE_CXX_UNKNOWN\n#endif\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_setup_precision.cpp",
    "content": "#define GLM_FORCE_INLINE\n#define GLM_PRECISION_HIGHP_FLOAT\n#include <glm/glm.hpp>\n#include <glm/ext.hpp>\n\nstatic int test_mat()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::mat2) == sizeof(glm::highp_mat2) ? 0 : 1;\n\tError += sizeof(glm::mat3) == sizeof(glm::highp_mat3) ? 0 : 1;\n\tError += sizeof(glm::mat4) == sizeof(glm::highp_mat4) ? 0 : 1;\n\n\tError += sizeof(glm::mat2x2) == sizeof(glm::highp_mat2x2) ? 0 : 1;\n\tError += sizeof(glm::mat2x3) == sizeof(glm::highp_mat2x3) ? 0 : 1;\n\tError += sizeof(glm::mat2x4) == sizeof(glm::highp_mat2x4) ? 0 : 1;\n\tError += sizeof(glm::mat3x2) == sizeof(glm::highp_mat3x2) ? 0 : 1;\n\tError += sizeof(glm::mat3x3) == sizeof(glm::highp_mat3x3) ? 0 : 1;\n\tError += sizeof(glm::mat3x4) == sizeof(glm::highp_mat3x4) ? 0 : 1;\n\tError += sizeof(glm::mat4x2) == sizeof(glm::highp_mat4x2) ? 0 : 1;\n\tError += sizeof(glm::mat4x3) == sizeof(glm::highp_mat4x3) ? 0 : 1;\n\tError += sizeof(glm::mat4x4) == sizeof(glm::highp_mat4x4) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_vec()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::vec2) == sizeof(glm::highp_vec2) ? 0 : 1;\n\tError += sizeof(glm::vec3) == sizeof(glm::highp_vec3) ? 0 : 1;\n\tError += sizeof(glm::vec4) == sizeof(glm::highp_vec4) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_dvec()\n{\n\tint Error = 0;\n\t\n\tError += sizeof(glm::dvec2) == sizeof(glm::highp_dvec2) ? 0 : 1;\n\tError += sizeof(glm::dvec3) == sizeof(glm::highp_dvec3) ? 0 : 1;\n\tError += sizeof(glm::dvec4) == sizeof(glm::highp_dvec4) ? 0 : 1;\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_mat();\n\tError += test_vec();\n\tError += test_dvec();\n\t\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_aligned.cpp",
    "content": "#define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES\n#include <glm/glm.hpp>\n\n#if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n#include <type_traits>\n\nstatic_assert(sizeof(glm::bvec4) > sizeof(glm::bvec2), \"Invalid sizeof\");\nstatic_assert(sizeof(glm::ivec4) > sizeof(glm::uvec2), \"Invalid sizeof\");\nstatic_assert(sizeof(glm::dvec4) > sizeof(glm::dvec2), \"Invalid sizeof\");\n\nstatic_assert(sizeof(glm::bvec4) == sizeof(glm::bvec3), \"Invalid sizeof\");\nstatic_assert(sizeof(glm::uvec4) == sizeof(glm::uvec3), \"Invalid sizeof\");\nstatic_assert(sizeof(glm::dvec4) == sizeof(glm::dvec3), \"Invalid sizeof\");\n\nstatic int test_storage_aligned()\n{\n\tint Error = 0;\n\n\tsize_t size1_aligned = sizeof(glm::detail::storage<1, int, true>::type);\n\tError += size1_aligned == sizeof(int) * 1 ? 0 : 1;\n\tsize_t size2_aligned = sizeof(glm::detail::storage<2, int, true>::type);\n\tError += size2_aligned == sizeof(int) * 2 ? 0 : 1;\n\tsize_t size4_aligned = sizeof(glm::detail::storage<4, int, true>::type);\n\tError += size4_aligned == sizeof(int) * 4 ? 0 : 1;\n\n\tsize_t align1_aligned = alignof(glm::detail::storage<1, int, true>::type);\n\tError += align1_aligned == 4 ? 0 : 1;\n\tsize_t align2_aligned = alignof(glm::detail::storage<2, int, true>::type);\n\tError += align2_aligned == 8 ? 0 : 1;\n\tsize_t align4_aligned = alignof(glm::detail::storage<4, int, true>::type);\n\tError += align4_aligned == 16 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_storage_unaligned()\n{\n\tint Error = 0;\n\n\tsize_t align1_unaligned = alignof(glm::detail::storage<1, int, false>::type);\n\tError += align1_unaligned == sizeof(int) ? 0 : 1;\n\tsize_t align2_unaligned = alignof(glm::detail::storage<2, int, false>::type);\n\tError += align2_unaligned == sizeof(int) ? 0 : 1;\n\tsize_t align3_unaligned = alignof(glm::detail::storage<3, int, false>::type);\n\tError += align3_unaligned == sizeof(int) ? 0 : 1;\n\tsize_t align4_unaligned = alignof(glm::detail::storage<4, int, false>::type);\n\tError += align4_unaligned == sizeof(int) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_vec3_aligned()\n{\n\tint Error = 0;\n\n\tstruct Struct1\n\t{\n\t\tglm::vec4 A;\n\t\tfloat B;\n\t\tglm::vec3 C;\n\t};\n\n\tstd::size_t const Size1 = sizeof(Struct1);\n\tError += Size1 == 48 ? 0 : 1;\n\n\tstruct Struct2\n\t{\n\t\tglm::vec4 A;\n\t\tglm::vec3 B;\n\t\tfloat C;\n\t};\n\n\tstd::size_t const Size2 = sizeof(Struct2);\n\tError += Size2 == 48 ? 0 : 1;\n\n\treturn Error;\n}\n\n#endif\n\nint main()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n\t\tError += test_storage_aligned();\n\t\tError += test_storage_unaligned();\n\t\tError += test_vec3_aligned();\n#\tendif\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_cast.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/glm.hpp>\n#include <algorithm>\n#include <vector>\n#include <iterator>\n\nstruct my_vec2\n{\n\toperator glm::vec2() { return glm::vec2(x, y); }\n\tfloat x, y;\n};\n\nint test_vec2_cast()\n{\n\tglm::vec2 A(1.0f, 2.0f);\n\tglm::lowp_vec2 B(A);\n\tglm::mediump_vec2 C(A);\n\tglm::highp_vec2 D(A);\n\t\n\tglm::vec2 E = static_cast<glm::vec2>(A);\n\tglm::lowp_vec2 F = static_cast<glm::lowp_vec2>(A);\n\tglm::mediump_vec2 G = static_cast<glm::mediump_vec2>(A);\n\tglm::highp_vec2 H = static_cast<glm::highp_vec2>(A);\n\t\n\tmy_vec2 I;\n\tglm::vec2 J = static_cast<glm::vec2>(I);\n\tglm::vec2 K(7.8f);\n\n\tint Error(0);\n\t\n\tError += glm::all(glm::equal(A, E, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(B, F, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(C, G, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(D, H, glm::epsilon<float>())) ? 0 : 1;\n\t\n\treturn Error;\n}\n\nint test_vec3_cast()\n{\n\tglm::vec3 A(1.0f, 2.0f, 3.0f);\n\tglm::lowp_vec3 B(A);\n\tglm::mediump_vec3 C(A);\n\tglm::highp_vec3 D(A);\n\t\n\tglm::vec3 E = static_cast<glm::vec3>(A);\n\tglm::lowp_vec3 F = static_cast<glm::lowp_vec3>(A);\n\tglm::mediump_vec3 G = static_cast<glm::mediump_vec3>(A);\n\tglm::highp_vec3 H = static_cast<glm::highp_vec3>(A);\n\t\n\tint Error(0);\n\t\n\tError += glm::all(glm::equal(A, E, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(B, F, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(C, G, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(D, H, glm::epsilon<float>())) ? 0 : 1;\n\t\n\treturn Error;\n}\n\nint test_vec4_cast()\n{\n\tglm::vec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\tglm::lowp_vec4 B(A);\n\tglm::mediump_vec4 C(A);\n\tglm::highp_vec4 D(A);\n\t\n\tglm::vec4 E = static_cast<glm::vec4>(A);\n\tglm::lowp_vec4 F = static_cast<glm::lowp_vec4>(A);\n\tglm::mediump_vec4 G = static_cast<glm::mediump_vec4>(A);\n\tglm::highp_vec4 H = static_cast<glm::highp_vec4>(A);\n\t\n\tint Error(0);\n\t\n\tError += glm::all(glm::equal(A, E, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(B, F, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(C, G, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(D, H, glm::epsilon<float>())) ? 0 : 1;\n\t\n\treturn Error;\n}\n\nint test_std_copy()\n{\n\tint Error = 0;\n\n\t{\n\t\tstd::vector<int> High;\n\t\tHigh.resize(64);\n\t\tstd::vector<int> Medium(High.size());\n\t\t\n\t\tstd::copy(High.begin(), High.end(), Medium.begin());\n\n\t\t*Medium.begin() = *High.begin();\n\t}\n\n\t{\n\t\tstd::vector<glm::dvec4> High4;\n\t\tHigh4.resize(64);\n\t\tstd::vector<glm::vec4> Medium4(High4.size());\n\t\t\n\t\tstd::copy(High4.begin(), High4.end(), Medium4.begin());\n\n\t\t*Medium4.begin() = *High4.begin();\n\t}\n\n\t{\n\t\tstd::vector<glm::dvec3> High3;\n\t\tHigh3.resize(64);\n\t\tstd::vector<glm::vec3> Medium3(High3.size());\n\n\t\tstd::copy(High3.begin(), High3.end(), Medium3.begin());\n\n\t\t*Medium3.begin() = *High3.begin();\n\t}\n\n\t{\n\t\tstd::vector<glm::dvec2> High2;\n\t\tHigh2.resize(64);\n\t\tstd::vector<glm::vec2> Medium2(High2.size());\n\n\t\tstd::copy(High2.begin(), High2.end(), Medium2.begin());\n\n\t\t*Medium2.begin() = *High2.begin();\n\t}\n\n\tglm::dvec4 v1;\n\tglm::vec4 v2;\n\n\tv2 = v1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_std_copy();\n\tError += test_vec2_cast();\n\tError += test_vec3_cast();\n\tError += test_vec4_cast();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_ctor.cpp",
    "content": "#include <glm/gtc/vec1.hpp>\n#include <glm/gtc/quaternion.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/glm.hpp>\n\nstatic int test_vec1_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::vec1 f;\n\t\t\tglm::ivec1 i;\n\t\t} A, B;\n\n\t\tA.f = glm::vec1(0);\n\t\tError += glm::all(glm::equal(A.i, glm::ivec1(0))) ? 0 : 1;\n\n\t\tB.f = glm::vec1(1);\n\t\tError += glm::all(glm::equal(B.i, glm::ivec1(1065353216))) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\n\treturn Error;\n}\n\nstatic int test_vec2_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::vec2 f;\n\t\t\tglm::ivec2 i;\n\t\t} A, B;\n\n\t\tA.f = glm::vec2(0);\n\t\tError += glm::all(glm::equal(A.i, glm::ivec2(0))) ? 0 : 1;\n\n\t\tB.f = glm::vec2(1);\n\t\tError += glm::all(glm::equal(B.i, glm::ivec2(1065353216))) ? 0 : 1;\n\t}\n#\tendif\n\n\treturn Error;\n}\n\nstatic int test_vec3_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::vec3 f;\n\t\t\tglm::ivec3 i;\n\t\t} A, B;\n\n\t\tA.f = glm::vec3(0);\n\t\tError += glm::all(glm::equal(A.i, glm::ivec3(0))) ? 0 : 1;\n\n\t\tB.f = glm::vec3(1);\n\t\tError += glm::all(glm::equal(B.i, glm::ivec3(1065353216))) ? 0 : 1;\n\t}\n#\tendif\n\n\treturn Error;\n}\n\nstatic int test_vec4_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::vec4 f;\n\t\t\tglm::ivec4 i;\n\t\t} A, B;\n\n\t\tA.f = glm::vec4(0);\n\t\tError += glm::all(glm::equal(A.i, glm::ivec4(0))) ? 0 : 1;\n\n\t\tB.f = glm::vec4(1);\n\t\tError += glm::all(glm::equal(B.i, glm::ivec4(1065353216))) ? 0 : 1;\n\t}\n#\tendif\n\n\treturn Error;\n}\n\nstatic int test_mat2x2_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat2x2 f;\n\t\t\tglm::mat2x2 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat2x2(0);\n\t\tError += glm::all(glm::equal(A.i[0], glm::vec2(0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat2x2(1);\n\t\tError += glm::all(glm::equal(B.i[0], glm::vec2(1, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_mat2x3_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat2x3 f;\n\t\t\tglm::mat2x3 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat2x3(0);\n\t\tError += glm::all(glm::equal(A.i[0], glm::vec3(0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat2x3(1);\n\t\tError += glm::all(glm::equal(B.i[0], glm::vec3(1, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_mat2x4_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat2x4 f;\n\t\t\tglm::mat2x4 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat2x4(0);\n\t\tglm::vec4 const C(0, 0, 0, 0);\n\t\tError += glm::all(glm::equal(A.i[0], C, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat2x4(1);\n\t\tglm::vec4 const D(1, 0, 0, 0);\n\t\tError += glm::all(glm::equal(B.i[0], D, glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_mat3x2_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat3x2 f;\n\t\t\tglm::mat3x2 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat3x2(0);\n\t\tError += glm::all(glm::equal(A.i[0], glm::vec2(0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat3x2(1);\n\t\tError += glm::all(glm::equal(B.i[0], glm::vec2(1, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_mat3x3_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat3x3 f;\n\t\t\tglm::mat3x3 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat3x3(0);\n\t\tError += glm::all(glm::equal(A.i[0], glm::vec3(0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat3x3(1);\n\t\tError += glm::all(glm::equal(B.i[0], glm::vec3(1, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_mat3x4_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat3x4 f;\n\t\t\tglm::mat3x4 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat3x4(0);\n\t\tError += glm::all(glm::equal(A.i[0], glm::vec4(0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat3x4(1);\n\t\tError += glm::all(glm::equal(B.i[0], glm::vec4(1, 0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_mat4x2_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat4x2 f;\n\t\t\tglm::mat4x2 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat4x2(0);\n\t\tError += glm::all(glm::equal(A.i[0], glm::vec2(0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat4x2(1);\n\t\tError += glm::all(glm::equal(B.i[0], glm::vec2(1, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_mat4x3_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat4x3 f;\n\t\t\tglm::mat4x3 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat4x3(0);\n\t\tError += glm::all(glm::equal(A.i[0], glm::vec3(0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat4x3(1);\n\t\tError += glm::all(glm::equal(B.i[0], glm::vec3(1, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_mat4x4_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::mat4 f;\n\t\t\tglm::mat4 i;\n\t\t} A, B;\n\n\t\tA.f = glm::mat4(0);\n\t\tError += glm::all(glm::equal(A.i[0], glm::vec4(0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::mat4(1);\n\t\tError += glm::all(glm::equal(B.i[0], glm::vec4(1, 0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nstatic int test_quat_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_LANG & GLM_LANG_CXX11_FLAG\n\t{\n\t\tunion pack\n\t\t{\n\t\t\tglm::quat f;\n\t\t\tglm::quat i;\n\t\t} A, B;\n\n\t\tA.f = glm::quat(0, 0, 0, 0);\n\t\tError += glm::all(glm::equal(A.i, glm::quat(0, 0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tB.f = glm::quat(1, 1, 1, 1);\n\t\tError += glm::all(glm::equal(B.i, glm::quat(1, 1, 1, 1), glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG & GLM_LANG_CXX11_FLAG\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_vec1_ctor();\n\tError += test_vec2_ctor();\n\tError += test_vec3_ctor();\n\tError += test_vec4_ctor();\n\tError += test_mat2x2_ctor();\n\tError += test_mat2x3_ctor();\n\tError += test_mat2x4_ctor();\n\tError += test_mat3x2_ctor();\n\tError += test_mat3x3_ctor();\n\tError += test_mat3x4_ctor();\n\tError += test_mat4x2_ctor();\n\tError += test_mat4x3_ctor();\n\tError += test_mat4x4_ctor();\n\tError += test_quat_ctor();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_int.cpp",
    "content": "#include <glm/glm.hpp>\n#include <glm/ext/scalar_int_sized.hpp>\n\nstatic int test_bit_operator()\n{\n\tint Error = 0;\n\n\tglm::ivec4 const a(1);\n\tglm::ivec4 const b = ~a;\n\tError += glm::all(glm::equal(b, glm::ivec4(-2))) ? 0 : 1;\n\n\tglm::int32 const c(1);\n\tglm::int32 const d = ~c;\n\tError += d == -2 ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_bit_operator();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_length.cpp",
    "content": "#include <glm/glm.hpp>\n\nstatic int test_length_mat_non_squared()\n{\n\tint Error = 0;\n\n\tError += glm::mat2x3().length() == 2 ? 0 : 1;\n\tError += glm::mat2x4().length() == 2 ? 0 : 1;\n\tError += glm::mat3x2().length() == 3 ? 0 : 1;\n\tError += glm::mat3x4().length() == 3 ? 0 : 1;\n\tError += glm::mat4x2().length() == 4 ? 0 : 1;\n\tError += glm::mat4x3().length() == 4 ? 0 : 1;\n\t\n\tError += glm::dmat2x3().length() == 2 ? 0 : 1;\n\tError += glm::dmat2x4().length() == 2 ? 0 : 1;\n\tError += glm::dmat3x2().length() == 3 ? 0 : 1;\n\tError += glm::dmat3x4().length() == 3 ? 0 : 1;\n\tError += glm::dmat4x2().length() == 4 ? 0 : 1;\n\tError += glm::dmat4x3().length() == 4 ? 0 : 1;\n\t\n\treturn Error;\n}\n\nstatic int test_length_mat()\n{\n\tint Error = 0;\n\t\n\tError += glm::mat2().length() == 2 ? 0 : 1;\n\tError += glm::mat3().length() == 3 ? 0 : 1;\n\tError += glm::mat4().length() == 4 ? 0 : 1;\n\tError += glm::mat2x2().length() == 2 ? 0 : 1;\n\tError += glm::mat3x3().length() == 3 ? 0 : 1;\n\tError += glm::mat4x4().length() == 4 ? 0 : 1;\n\t\n\tError += glm::dmat2().length() == 2 ? 0 : 1;\n\tError += glm::dmat3().length() == 3 ? 0 : 1;\n\tError += glm::dmat4().length() == 4 ? 0 : 1;\n\tError += glm::dmat2x2().length() == 2 ? 0 : 1;\n\tError += glm::dmat3x3().length() == 3 ? 0 : 1;\n\tError += glm::dmat4x4().length() == 4 ? 0 : 1;\n\t\n\treturn Error;\n}\n\nstatic int test_length_vec()\n{\n\tint Error = 0;\n\t\n\tError += glm::vec2().length() == 2 ? 0 : 1;\n\tError += glm::vec3().length() == 3 ? 0 : 1;\n\tError += glm::vec4().length() == 4 ? 0 : 1;\n\n\tError += glm::ivec2().length() == 2 ? 0 : 1;\n\tError += glm::ivec3().length() == 3 ? 0 : 1;\n\tError += glm::ivec4().length() == 4 ? 0 : 1;\n\n\tError += glm::uvec2().length() == 2 ? 0 : 1;\n\tError += glm::uvec3().length() == 3 ? 0 : 1;\n\tError += glm::uvec4().length() == 4 ? 0 : 1;\t\n\t\n\tError += glm::dvec2().length() == 2 ? 0 : 1;\n\tError += glm::dvec3().length() == 3 ? 0 : 1;\n\tError += glm::dvec4().length() == 4 ? 0 : 1;\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\t\n\tError += test_length_vec();\n\tError += test_length_mat();\n\tError += test_length_mat_non_squared();\n\t\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_mat2x2.cpp",
    "content": "#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/matrix.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n\nint test_operators()\n{\n\tglm::mat2x2 l(1.0f);\n\tglm::mat2x2 m(1.0f);\n\tglm::vec2 u(1.0f);\n\tglm::vec2 v(1.0f);\n\tfloat x = 1.0f;\n\tglm::vec2 a = m * u;\n\tglm::vec2 b = v * m;\n\tglm::mat2x2 n = x / m;\n\tglm::mat2x2 o = m / x;\n\tglm::mat2x2 p = x * m;\n\tglm::mat2x2 q = m * x;\n\tbool R = glm::any(glm::notEqual(m, q, glm::epsilon<float>()));\n\tbool S = glm::all(glm::equal(m, l, glm::epsilon<float>()));\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nint test_inverse()\n{\n\tint Error(0);\n\n\t{\n\t\tglm::mat2 const Matrix(1, 2, 3, 4);\n\t\tglm::mat2 const Inverse = glm::inverse(Matrix);\n\t\tglm::mat2 const Identity = Matrix * Inverse;\n\n\t\tError += glm::all(glm::equal(Identity[0], glm::vec2(1.0f, 0.0f), glm::vec2(0.01f))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(Identity[1], glm::vec2(0.0f, 1.0f), glm::vec2(0.01f))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat2 const Matrix(1, 2, 3, 4);\n\t\tglm::mat2 const Identity = Matrix / Matrix;\n\n\t\tError += glm::all(glm::equal(Identity[0], glm::vec2(1.0f, 0.0f), glm::vec2(0.01f))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(Identity[1], glm::vec2(0.0f, 1.0f), glm::vec2(0.01f))) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_ctr()\n{\n\tint Error = 0;\n\t\n\t{\n\t\tglm::mediump_mat2x2 const A(1.0f);\n\t\tglm::highp_mat2x2 const B(A);\n\t\tglm::mediump_mat2x2 const C(B);\n\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n#if GLM_HAS_INITIALIZER_LISTS\n\tglm::mat2x2 m0(\n\t\tglm::vec2(0, 1),\n\t\tglm::vec2(2, 3));\n\n\tglm::mat2x2 m1{0, 1, 2, 3};\n\n\tglm::mat2x2 m2{\n\t\t{0, 1},\n\t\t{2, 3}};\n\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\n\tstd::vector<glm::mat2x2> v1{\n\t\t{0, 1, 2, 3},\n\t\t{0, 1, 2, 3}\n\t};\n\n\tstd::vector<glm::mat2x2> v2{\n\t\t{\n\t\t\t{ 0, 1},\n\t\t\t{ 4, 5}\n\t\t},\n\t\t{\n\t\t\t{ 0, 1},\n\t\t\t{ 4, 5}\n\t\t}\n\t};\n\n#endif//GLM_HAS_INITIALIZER_LISTS\n\n\treturn Error;\n}\n\nnamespace cast\n{\n\ttemplate<typename genType>\n\tint entry()\n\t{\n\t\tint Error = 0;\n\n\t\tgenType A(1.0f);\n\t\tglm::mat2 B(A);\n\t\tglm::mat2 Identity(1.0f);\n\n\t\tError += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tError += entry<glm::mat2x2>();\n\t\tError += entry<glm::mat2x3>();\n\t\tError += entry<glm::mat2x4>();\n\t\tError += entry<glm::mat3x2>();\n\t\tError += entry<glm::mat3x3>();\n\t\tError += entry<glm::mat3x4>();\n\t\tError += entry<glm::mat4x2>();\n\t\tError += entry<glm::mat4x3>();\n\t\tError += entry<glm::mat4x4>();\n\n\t\treturn Error;\n\t}\n}//namespace cast\n\nint test_size()\n{\n\tint Error = 0;\n\n\tError += 16 == sizeof(glm::mat2x2) ? 0 : 1;\n\tError += 32 == sizeof(glm::dmat2x2) ? 0 : 1;\n\tError += glm::mat2x2().length() == 2 ? 0 : 1;\n\tError += glm::dmat2x2().length() == 2 ? 0 : 1;\n\tError += glm::mat2x2::length() == 2 ? 0 : 1;\n\tError += glm::dmat2x2::length() == 2 ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat2x2::length() == 2, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += cast::test();\n\tError += test_ctr();\n\tError += test_operators();\n\tError += test_inverse();\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_mat2x3.cpp",
    "content": "#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n\nstatic int test_operators()\n{\n\tglm::mat2x3 l(1.0f);\n\tglm::mat2x3 m(1.0f);\n\tglm::vec2 u(1.0f);\n\tglm::vec3 v(1.0f);\n\tfloat x = 1.0f;\n\tglm::vec3 a = m * u;\n\tglm::vec2 b = v * m;\n\tglm::mat2x3 n = x / m;\n\tglm::mat2x3 o = m / x;\n\tglm::mat2x3 p = x * m;\n\tglm::mat2x3 q = m * x;\n\tbool R = glm::any(glm::notEqual(m, q, glm::epsilon<float>()));\n\tbool S = glm::all(glm::equal(m, l, glm::epsilon<float>()));\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nint test_ctr()\n{\n\tint Error(0);\n\n#if GLM_HAS_INITIALIZER_LISTS\n\tglm::mat2x3 m0(\n\t\tglm::vec3(0, 1, 2),\n\t\tglm::vec3(3, 4, 5));\n\t\n\tglm::mat2x3 m1{0, 1, 2, 3, 4, 5};\n\t\n\tglm::mat2x3 m2{\n\t\t{0, 1, 2},\n\t\t{3, 4, 5}};\n\t\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\t\n\tstd::vector<glm::mat2x3> v1{\n\t\t{0, 1, 2, 3, 4, 5},\n\t\t{0, 1, 2, 3, 4, 5}\n\t};\n\t\n\tstd::vector<glm::mat2x3> v2{\n\t\t{\n\t\t\t{ 0, 1, 2},\n\t\t\t{ 4, 5, 6}\n\t\t},\n\t\t{\n\t\t\t{ 0, 1, 2},\n\t\t\t{ 4, 5, 6}\n\t\t}\n\t};\n\t\n#endif//GLM_HAS_INITIALIZER_LISTS\n\t\n\treturn Error;\n}\n\nnamespace cast\n{\n\ttemplate<typename genType>\n\tint entry()\n\t{\n\t\tint Error = 0;\n\n\t\tgenType A(1.0f);\n\t\tglm::mat2x3 B(A);\n\t\tglm::mat2x3 Identity(1.0f);\n\n\t\tError += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tError += entry<glm::mat2x2>();\n\t\tError += entry<glm::mat2x3>();\n\t\tError += entry<glm::mat2x4>();\n\t\tError += entry<glm::mat3x2>();\n\t\tError += entry<glm::mat3x3>();\n\t\tError += entry<glm::mat3x4>();\n\t\tError += entry<glm::mat4x2>();\n\t\tError += entry<glm::mat4x3>();\n\t\tError += entry<glm::mat4x4>();\n\n\t\treturn Error;\n\t}\n}//namespace cast\n\nint test_size()\n{\n\tint Error = 0;\n\n\tError += 24 == sizeof(glm::mat2x3) ? 0 : 1;\n\tError += 48 == sizeof(glm::dmat2x3) ? 0 : 1;\n\tError += glm::mat2x3().length() == 2 ? 0 : 1;\n\tError += glm::dmat2x3().length() == 2 ? 0 : 1;\n\tError += glm::mat2x3::length() == 2 ? 0 : 1;\n\tError += glm::dmat2x3::length() == 2 ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat2x3::length() == 2, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += cast::test();\n\tError += test_ctr();\n\tError += test_operators();\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_mat2x4.cpp",
    "content": "#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n\nstatic int test_operators()\n{\n\tglm::mat2x4 l(1.0f);\n\tglm::mat2x4 m(1.0f);\n\tglm::vec2 u(1.0f);\n\tglm::vec4 v(1.0f);\n\tfloat x = 1.0f;\n\tglm::vec4 a = m * u;\n\tglm::vec2 b = v * m;\n\tglm::mat2x4 n = x / m;\n\tglm::mat2x4 o = m / x;\n\tglm::mat2x4 p = x * m;\n\tglm::mat2x4 q = m * x;\n\tbool R = glm::any(glm::notEqual(m, q, glm::epsilon<float>()));\n\tbool S = glm::all(glm::equal(m, l, glm::epsilon<float>()));\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nint test_ctr()\n{\n\tint Error(0);\n\n#if(GLM_HAS_INITIALIZER_LISTS)\n\tglm::mat2x4 m0(\n\t\tglm::vec4(0, 1, 2, 3),\n\t\tglm::vec4(4, 5, 6, 7));\n\n\tglm::mat2x4 m1{0, 1, 2, 3, 4, 5, 6, 7};\n\n\tglm::mat2x4 m2{\n\t\t{0, 1, 2, 3},\n\t\t{4, 5, 6, 7}};\n\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\n\tstd::vector<glm::mat2x4> v1{\n\t\t{0, 1, 2, 3, 4, 5, 6, 7},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7}\n\t};\n\t\n\tstd::vector<glm::mat2x4> v2{\n\t\t{\n\t\t\t{ 0, 1, 2, 3},\n\t\t\t{ 4, 5, 6, 7}\n\t\t},\n\t\t{\n\t\t\t{ 0, 1, 2, 3},\n\t\t\t{ 4, 5, 6, 7}\n\t\t}\n\t};\n\t\n#endif//GLM_HAS_INITIALIZER_LISTS\n\n\treturn Error;\n}\n\nnamespace cast\n{\n\ttemplate<typename genType>\n\tint entry()\n\t{\n\t\tint Error = 0;\n\n\t\tgenType A(1.0f);\n\t\tglm::mat2x4 B(A);\n\t\tglm::mat2x4 Identity(1.0f);\n\n\t\tfor(glm::length_t i = 0, length = B.length(); i < length; ++i)\n\t\t\tError += glm::all(glm::epsilonEqual(B[i], Identity[i], glm::epsilon<float>())) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tError += entry<glm::mat2x2>();\n\t\tError += entry<glm::mat2x3>();\n\t\tError += entry<glm::mat2x4>();\n\t\tError += entry<glm::mat3x2>();\n\t\tError += entry<glm::mat3x3>();\n\t\tError += entry<glm::mat3x4>();\n\t\tError += entry<glm::mat4x2>();\n\t\tError += entry<glm::mat4x3>();\n\t\tError += entry<glm::mat4x4>();\n\n\t\treturn Error;\n\t}\n}//namespace cast\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += 32 == sizeof(glm::mat2x4) ? 0 : 1;\n\tError += 64 == sizeof(glm::dmat2x4) ? 0 : 1;\n\tError += glm::mat2x4().length() == 2 ? 0 : 1;\n\tError += glm::dmat2x4().length() == 2 ? 0 : 1;\n\tError += glm::mat2x4::length() == 2 ? 0 : 1;\n\tError += glm::dmat2x4::length() == 2 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat2x4::length() == 2, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += cast::test();\n\tError += test_ctr();\n\tError += test_operators();\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n\n\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_mat3x2.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n\nstatic bool test_operators()\n{\n\tglm::mat3x2 l(1.0f);\n\tglm::mat3x2 m(1.0f);\n\tglm::vec3 u(1.0f);\n\tglm::vec2 v(1.0f);\n\tfloat x = 1.0f;\n\tglm::vec2 a = m * u;\n\tglm::vec3 b = v * m;\n\tglm::mat3x2 n = x / m;\n\tglm::mat3x2 o = m / x;\n\tglm::mat3x2 p = x * m;\n\tglm::mat3x2 q = m * x;\n\tbool R = glm::any(glm::notEqual(m, q, glm::epsilon<float>()));\n\tbool S = glm::all(glm::equal(m, l, glm::epsilon<float>()));\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nint test_ctr()\n{\n\tint Error(0);\n\n#if(GLM_HAS_INITIALIZER_LISTS)\n\tglm::mat3x2 m0(\n\t\tglm::vec2(0, 1),\n\t\tglm::vec2(2, 3),\n\t\tglm::vec2(4, 5));\n\t\n\tglm::mat3x2 m1{0, 1, 2, 3, 4, 5};\n\t\n\tglm::mat3x2 m2{\n\t\t{0, 1},\n\t\t{2, 3},\n\t\t{4, 5}};\n\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\n\tstd::vector<glm::mat3x2> v1{\n\t\t{0, 1, 2, 3, 4, 5},\n\t\t{0, 1, 2, 3, 4, 5}\n\t};\n\t\n\tstd::vector<glm::mat3x2> v2{\n\t\t{\n\t\t\t{ 0, 1},\n\t\t\t{ 2, 3},\n\t\t\t{ 4, 5}\n\t\t},\n\t\t{\n\t\t\t{ 0, 1},\n\t\t\t{ 2, 3},\n\t\t\t{ 4, 5}\n\t\t}\n\t};\n\t\n#endif//GLM_HAS_INITIALIZER_LISTS\n\t\n\treturn Error;\n}\n\nnamespace cast\n{\n\ttemplate<typename genType>\n\tint entry()\n\t{\n\t\tint Error = 0;\n\n\t\tgenType A(1.0f);\n\t\tglm::mat3x2 B(A);\n\t\tglm::mat3x2 Identity(1.0f);\n\n\t\tError += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tError += entry<glm::mat2x2>();\n\t\tError += entry<glm::mat2x3>();\n\t\tError += entry<glm::mat2x4>();\n\t\tError += entry<glm::mat3x2>();\n\t\tError += entry<glm::mat3x3>();\n\t\tError += entry<glm::mat3x4>();\n\t\tError += entry<glm::mat4x2>();\n\t\tError += entry<glm::mat4x3>();\n\t\tError += entry<glm::mat4x4>();\n\n\t\treturn Error;\n\t}\n}//namespace cast\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += 24 == sizeof(glm::mat3x2) ? 0 : 1;\n\tError += 48 == sizeof(glm::dmat3x2) ? 0 : 1;\n\tError += glm::mat3x2().length() == 3 ? 0 : 1;\n\tError += glm::dmat3x2().length() == 3 ? 0 : 1;\n\tError += glm::mat3x2::length() == 3 ? 0 : 1;\n\tError += glm::dmat3x2::length() == 3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat3x2::length() == 3, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += cast::test();\n\tError += test_ctr();\n\tError += test_operators();\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_mat3x3.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/matrix.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n\nstatic int test_mat3x3()\n{\n\tglm::dmat3 Mat0(\n\t\tglm::dvec3(0.6f, 0.2f, 0.3f),\n\t\tglm::dvec3(0.2f, 0.7f, 0.5f),\n\t\tglm::dvec3(0.3f, 0.5f, 0.7f));\n\tglm::dmat3 Inv0 = glm::inverse(Mat0);\n\tglm::dmat3 Res0 = Mat0 * Inv0;\n\n\treturn glm::all(glm::equal(Res0, glm::dmat3(1.0), 0.01)) ? 0 : 1;\n}\n\nstatic int test_operators()\n{\n\tglm::mat3x3 l(1.0f);\n\tglm::mat3x3 m(1.0f);\n\tglm::vec3 u(1.0f);\n\tglm::vec3 v(1.0f);\n\tfloat x = 1.0f;\n\tglm::vec3 a = m * u;\n\tglm::vec3 b = v * m;\n\tglm::mat3x3 n = x / m;\n\tglm::mat3x3 o = m / x;\n\tglm::mat3x3 p = x * m;\n\tglm::mat3x3 q = m * x;\n\tbool R = glm::any(glm::notEqual(m, q, glm::epsilon<float>()));\n\tbool S = glm::all(glm::equal(m, l, glm::epsilon<float>()));\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nstatic int test_inverse()\n{\n\tint Error(0);\n\n\t{\n\t\tglm::mat3 const Matrix(\n\t\t\tglm::vec3(0.6f, 0.2f, 0.3f), \n\t\t\tglm::vec3(0.2f, 0.7f, 0.5f), \n\t\t\tglm::vec3(0.3f, 0.5f, 0.7f));\n\t\tglm::mat3 const Inverse = glm::inverse(Matrix);\n\t\tglm::mat3 const Identity = Matrix * Inverse;\n\n\t\tError += glm::all(glm::equal(Identity[0], glm::vec3(1.0f, 0.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(Identity[1], glm::vec3(0.0f, 1.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(Identity[2], glm::vec3(0.0f, 0.0f, 1.0f), glm::vec3(0.01f))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat3 const Matrix(\n\t\t\tglm::vec3(0.6f, 0.2f, 0.3f), \n\t\t\tglm::vec3(0.2f, 0.7f, 0.5f), \n\t\t\tglm::vec3(0.3f, 0.5f, 0.7f));\n\t\tglm::mat3 const Identity = Matrix / Matrix;\n\n\t\tError += glm::all(glm::equal(Identity[0], glm::vec3(1.0f, 0.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(Identity[1], glm::vec3(0.0f, 1.0f, 0.0f), glm::vec3(0.01f))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(Identity[2], glm::vec3(0.0f, 0.0f, 1.0f), glm::vec3(0.01f))) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_ctr()\n{\n\tint Error(0);\n\n#if(GLM_HAS_INITIALIZER_LISTS)\n\tglm::mat3x3 m0(\n\t\tglm::vec3(0, 1, 2),\n\t\tglm::vec3(3, 4, 5),\n\t\tglm::vec3(6, 7, 8));\n\t\n\tglm::mat3x3 m1{0, 1, 2, 3, 4, 5, 6, 7, 8};\n\t\n\tglm::mat3x3 m2{\n\t\t{0, 1, 2},\n\t\t{3, 4, 5},\n\t\t{6, 7, 8}};\n\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\n\tstd::vector<glm::mat3x3> v1{\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8}\n\t};\n\t\n\tstd::vector<glm::mat3x3> v2{\n\t\t{\n\t\t\t{ 0, 1, 2},\n\t\t\t{ 3, 4, 5},\n\t\t\t{ 6, 7, 8}\n\t\t},\n\t\t{\n\t\t\t{ 0, 1, 2},\n\t\t\t{ 3, 4, 5},\n\t\t\t{ 6, 7, 8}\n\t\t}\n\t};\n\t\n#endif//GLM_HAS_INITIALIZER_LISTS\n\t\n\treturn Error;\n}\n\nnamespace cast\n{\n\ttemplate<typename genType>\n\tint entry()\n\t{\n\t\tint Error = 0;\n\n\t\tgenType A(1.0f);\n\t\tglm::mat3x3 B(A);\n\t\tglm::mat3x3 Identity(1.0f);\n\n\t\tError += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tError += entry<glm::mat2x2>();\n\t\tError += entry<glm::mat2x3>();\n\t\tError += entry<glm::mat2x4>();\n\t\tError += entry<glm::mat3x2>();\n\t\tError += entry<glm::mat3x3>();\n\t\tError += entry<glm::mat3x4>();\n\t\tError += entry<glm::mat4x2>();\n\t\tError += entry<glm::mat4x3>();\n\t\tError += entry<glm::mat4x4>();\n\n\t\treturn Error;\n\t}\n}//namespace cast\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += 36 == sizeof(glm::mat3x3) ? 0 : 1;\n\tError += 72 == sizeof(glm::dmat3x3) ? 0 : 1;\n\tError += glm::mat3x3().length() == 3 ? 0 : 1;\n\tError += glm::dmat3x3().length() == 3 ? 0 : 1;\n\tError += glm::mat3x3::length() == 3 ? 0 : 1;\n\tError += glm::dmat3x3::length() == 3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat3x3::length() == 3, \"GLM: Failed constexpr\");\n\n\tconstexpr glm::mat3x3 const Z(0.0f);\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += cast::test();\n\tError += test_ctr();\n\tError += test_mat3x3();\n\tError += test_operators();\n\tError += test_inverse();\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_mat3x4.cpp",
    "content": "#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n\nstatic bool test_operators()\n{\n\tglm::mat3x4 l(1.0f);\n\tglm::mat3x4 m(1.0f);\n\tglm::vec3 u(1.0f);\n\tglm::vec4 v(1.0f);\n\tfloat x = 1.0f;\n\tglm::vec4 a = m * u;\n\tglm::vec3 b = v * m;\n\tglm::mat3x4 n = x / m;\n\tglm::mat3x4 o = m / x;\n\tglm::mat3x4 p = x * m;\n\tglm::mat3x4 q = m * x;\n\tbool R = glm::any(glm::notEqual(m, q, glm::epsilon<float>()));\n\tbool S = glm::all(glm::equal(m, l, glm::epsilon<float>()));\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nint test_ctr()\n{\n\tint Error(0);\n\n#if(GLM_HAS_INITIALIZER_LISTS)\n\tglm::mat3x4 m0(\n\t\tglm::vec4(0, 1, 2, 3),\n\t\tglm::vec4(4, 5, 6, 7),\n\t\tglm::vec4(8, 9, 10, 11));\n\n\tglm::mat3x4 m1{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};\n\n\tglm::mat3x4 m2{\n\t\t{0, 1, 2, 3},\n\t\t{4, 5, 6, 7},\n\t\t{8, 9, 10, 11}};\n\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\n\tstd::vector<glm::mat3x4> v1{\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}\n\t};\n\t\n\tstd::vector<glm::mat3x4> v2{\n\t\t{\n\t\t\t{ 0, 1, 2, 3},\n\t\t\t{ 4, 5, 6, 7},\n\t\t\t{ 8, 9, 10, 11}\n\t\t},\n\t\t{\n\t\t\t{ 0, 1, 2, 3},\n\t\t\t{ 4, 5, 6, 7},\n\t\t\t{ 8, 9, 10, 11}\n\t\t}\n\t};\n\t\n#endif//GLM_HAS_INITIALIZER_LISTS\n\t\n\treturn Error;\n}\n\nnamespace cast\n{\n\ttemplate<typename genType>\n\tint entry()\n\t{\n\t\tint Error = 0;\n\n\t\tgenType A(1.0f);\n\t\tglm::mat3x4 B(A);\n\t\tglm::mat3x4 Identity(1.0f);\n\n\t\tfor(glm::length_t i = 0, length = B.length(); i < length; ++i)\n\t\t\tError += glm::all(glm::epsilonEqual(B[i], Identity[i], glm::epsilon<float>())) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tError += entry<glm::mat2x2>();\n\t\tError += entry<glm::mat2x3>();\n\t\tError += entry<glm::mat2x4>();\n\t\tError += entry<glm::mat3x2>();\n\t\tError += entry<glm::mat3x3>();\n\t\tError += entry<glm::mat3x4>();\n\t\tError += entry<glm::mat4x2>();\n\t\tError += entry<glm::mat4x3>();\n\t\tError += entry<glm::mat4x4>();\n\n\t\treturn Error;\n\t}\n}//namespace cast\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += 48 == sizeof(glm::mat3x4) ? 0 : 1;\n\tError += 96 == sizeof(glm::dmat3x4) ? 0 : 1;\n\tError += glm::mat3x4().length() == 3 ? 0 : 1;\n\tError += glm::dmat3x4().length() == 3 ? 0 : 1;\n\tError += glm::mat3x4::length() == 3 ? 0 : 1;\n\tError += glm::dmat3x4::length() == 3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat3x4::length() == 3, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += cast::test();\n\tError += test_ctr();\n\tError += test_operators();\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_mat4x2.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n\nstatic int test_operators()\n{\n\tglm::mat4x2 l(1.0f);\n\tglm::mat4x2 m(1.0f);\n\tglm::vec4 u(1.0f);\n\tglm::vec2 v(1.0f);\n\tfloat x = 1.0f;\n\tglm::vec2 a = m * u;\n\tglm::vec4 b = v * m;\n\tglm::mat4x2 n = x / m;\n\tglm::mat4x2 o = m / x;\n\tglm::mat4x2 p = x * m;\n\tglm::mat4x2 q = m * x;\n\tbool R = glm::any(glm::notEqual(m, q, glm::epsilon<float>()));\n\tbool S = glm::all(glm::equal(m, l, glm::epsilon<float>()));\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nint test_ctr()\n{\n\tint Error(0);\n\n#if(GLM_HAS_INITIALIZER_LISTS)\n\tglm::mat4x2 m0(\n\t\tglm::vec2(0, 1), \n\t\tglm::vec2(2, 3),\n\t\tglm::vec2(4, 5),\n\t\tglm::vec2(6, 7));\n\n\tglm::mat4x2 m1{0, 1, 2, 3, 4, 5, 6, 7};\n\n\tglm::mat4x2 m2{\n\t\t{0, 1},\n\t\t{2, 3},\n\t\t{4, 5},\n\t\t{6, 7}};\n\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\n\tstd::vector<glm::mat4x2> v1{\n\t\t{0, 1, 2, 3, 4, 5, 6, 7},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7}\n\t};\n\n\tstd::vector<glm::mat4x2> v2{\n\t\t{\n\t\t\t{ 0, 1},\n\t\t\t{ 4, 5},\n\t\t\t{ 8, 9},\n\t\t\t{ 12, 13}\n\t\t},\n\t\t{\n\t\t\t{ 0, 1},\n\t\t\t{ 4, 5},\n\t\t\t{ 8, 9},\n\t\t\t{ 12, 13}\n\t\t}\n\t};\n\n#endif//GLM_HAS_INITIALIZER_LISTS\n\n\treturn Error;\n}\n\nnamespace cast\n{\n\ttemplate<typename genType>\n\tint entry()\n\t{\n\t\tint Error = 0;\n\n\t\tgenType A(1.0f);\n\t\tglm::mat4x2 B(A);\n\t\tglm::mat4x2 Identity(1.0f);\n\n\t\tError += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tError += entry<glm::mat2x2>();\n\t\tError += entry<glm::mat2x3>();\n\t\tError += entry<glm::mat2x4>();\n\t\tError += entry<glm::mat3x2>();\n\t\tError += entry<glm::mat3x3>();\n\t\tError += entry<glm::mat3x4>();\n\t\tError += entry<glm::mat4x2>();\n\t\tError += entry<glm::mat4x3>();\n\t\tError += entry<glm::mat4x4>();\n\n\t\treturn Error;\n\t}\n}//namespace cast\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += 32 == sizeof(glm::mat4x2) ? 0 : 1;\n\tError += 64 == sizeof(glm::dmat4x2) ? 0 : 1;\n\tError += glm::mat4x2().length() == 4 ? 0 : 1;\n\tError += glm::dmat4x2().length() == 4 ? 0 : 1;\n\tError += glm::mat4x2::length() == 4 ? 0 : 1;\n\tError += glm::dmat4x2::length() == 4 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat4x2::length() == 4, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += cast::test();\n\tError += test_ctr();\n\tError += test_operators();\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_mat4x3.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n#include <vector>\n\nstatic int test_operators()\n{\n\tglm::mat4x3 l(1.0f);\n\tglm::mat4x3 m(1.0f);\n\tglm::vec4 u(1.0f);\n\tglm::vec3 v(1.0f);\n\tfloat x = 1.0f;\n\tglm::vec3 a = m * u;\n\tglm::vec4 b = v * m;\n\tglm::mat4x3 n = x / m;\n\tglm::mat4x3 o = m / x;\n\tglm::mat4x3 p = x * m;\n\tglm::mat4x3 q = m * x;\n\tbool R = glm::any(glm::notEqual(m, q, glm::epsilon<float>()));\n\tbool S = glm::all(glm::equal(m, l, glm::epsilon<float>()));\n\n\treturn (S && !R) ? 0 : 1;\n}\n\nint test_ctr()\n{\n\tint Error(0);\n\n#if(GLM_HAS_INITIALIZER_LISTS)\n\tglm::mat4x3 m0(\n\t\tglm::vec3(0, 1, 2), \n\t\tglm::vec3(3, 4, 5),\n\t\tglm::vec3(6, 7, 8),\n\t\tglm::vec3(9, 10, 11));\n\n\tglm::mat4x3 m1{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};\n\n\tglm::mat4x3 m2{\n\t\t{0, 1, 2},\n\t\t{3, 4, 5},\n\t\t{6, 7, 8},\n\t\t{9, 10, 11}};\n\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\n\tstd::vector<glm::mat4x3> v1{\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}\n\t};\n\n\tstd::vector<glm::mat4x3> v2{\n\t\t{\n\t\t\t{ 0, 1, 2 },\n\t\t\t{ 4, 5, 6 },\n\t\t\t{ 8, 9, 10 },\n\t\t\t{ 12, 13, 14 }\n\t\t},\n\t\t{\n\t\t\t{ 0, 1, 2 },\n\t\t\t{ 4, 5, 6 },\n\t\t\t{ 8, 9, 10 },\n\t\t\t{ 12, 13, 14 }\n\t\t}\n\t};\n\n#endif//GLM_HAS_INITIALIZER_LISTS\n\n\treturn Error;\n}\n\nnamespace cast\n{\n\ttemplate<typename genType>\n\tint entry()\n\t{\n\t\tint Error = 0;\n\n\t\tgenType A(1.0f);\n\t\tglm::mat4x3 B(A);\n\t\tglm::mat4x3 Identity(1.0f);\n\n\t\tError += glm::all(glm::equal(B, Identity, glm::epsilon<float>())) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tError += entry<glm::mat2x2>();\n\t\tError += entry<glm::mat2x3>();\n\t\tError += entry<glm::mat2x4>();\n\t\tError += entry<glm::mat3x2>();\n\t\tError += entry<glm::mat3x3>();\n\t\tError += entry<glm::mat3x4>();\n\t\tError += entry<glm::mat4x2>();\n\t\tError += entry<glm::mat4x3>();\n\t\tError += entry<glm::mat4x4>();\n\n\t\treturn Error;\n\t}\n}//namespace cast\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += 48 == sizeof(glm::mat4x3) ? 0 : 1;\n\tError += 96 == sizeof(glm::dmat4x3) ? 0 : 1;\n\tError += glm::mat4x3().length() == 4 ? 0 : 1;\n\tError += glm::dmat4x3().length() == 4 ? 0 : 1;\n\tError += glm::mat4x3::length() == 4 ? 0 : 1;\n\tError += glm::dmat4x3::length() == 4 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat4x3::length() == 4, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += cast::test();\n\tError += test_ctr();\n\tError += test_operators();\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_mat4x4.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/matrix.hpp>\n#include <glm/mat4x4.hpp>\n#include <glm/vec4.hpp>\n#include <vector>\n\ntemplate <typename matType, typename vecType>\nstatic int test_operators()\n{\n\ttypedef typename matType::value_type value_type;\n\n\tvalue_type const Epsilon = static_cast<value_type>(0.001);\n\n\tint Error = 0;\n\n\tmatType const M(static_cast<value_type>(2.0f));\n\tmatType const N(static_cast<value_type>(1.0f));\n\tvecType const U(static_cast<value_type>(2.0f));\n\n\t{\n\t\tmatType const P = N * static_cast<value_type>(2.0f);\n\t\tError += glm::all(glm::equal(P, M, Epsilon)) ? 0 : 1;\n\t\t\n\t\tmatType const Q = M / static_cast<value_type>(2.0f);\n\t\tError += glm::all(glm::equal(Q, N, Epsilon)) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tvecType const V = M * U;\n\t\tError += glm::all(glm::equal(V, vecType(static_cast<value_type>(4.f)), Epsilon)) ? 0 : 1;\n\t\t\n\t\tvecType const W = U / M;\n\t\tError += glm::all(glm::equal(W, vecType(static_cast<value_type>(1.f)), Epsilon)) ? 0 : 1;\n\t}\n\n\t{\n\t\tmatType const O = M * N;\n\t\tError += glm::all(glm::equal(O, matType(static_cast<value_type>(2.f)), Epsilon)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\ntemplate <typename matType>\nstatic int test_inverse()\n{\n\ttypedef typename matType::value_type value_type;\n\n\tvalue_type const Epsilon = static_cast<value_type>(0.001);\n\t\n\tint Error = 0;\n\n\tmatType const Identity(static_cast<value_type>(1.0f));\n\tmatType const Matrix(\n\t\tglm::vec4(0.6f, 0.2f, 0.3f, 0.4f),\n\t\tglm::vec4(0.2f, 0.7f, 0.5f, 0.3f),\n\t\tglm::vec4(0.3f, 0.5f, 0.7f, 0.2f),\n\t\tglm::vec4(0.4f, 0.3f, 0.2f, 0.6f));\n\tmatType const Inverse = Identity / Matrix;\n\tmatType const Result = Matrix * Inverse;\n\n\tError += glm::all(glm::equal(Identity, Result, Epsilon)) ? 0 : 1;\n\t\n\treturn Error;\n}\n\nstatic int test_ctr()\n{\n\tint Error = 0;\n\n#if GLM_HAS_TRIVIAL_QUERIES\n\t//Error += std::is_trivially_default_constructible<glm::mat4>::value ? 0 : 1;\n\t//Error += std::is_trivially_copy_assignable<glm::mat4>::value ? 0 : 1;\n\tError += std::is_trivially_copyable<glm::mat4>::value ? 0 : 1;\n\t//Error += std::is_copy_constructible<glm::mat4>::value ? 0 : 1;\n\t//Error += std::has_trivial_copy_constructor<glm::mat4>::value ? 0 : 1;\n#endif\n\n#if GLM_HAS_INITIALIZER_LISTS\n\tglm::mat4 const m0(\n\t\tglm::vec4(0, 1, 2, 3),\n\t\tglm::vec4(4, 5, 6, 7),\n\t\tglm::vec4(8, 9, 10, 11),\n\t\tglm::vec4(12, 13, 14, 15));\n\n\tassert(sizeof(m0) == 4 * 4 * 4);\n\n\tglm::vec4 const V{0, 1, 2, 3};\n\n\tglm::mat4 const m1{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};\n\n\tglm::mat4 const m2{\n\t\t{0, 1, 2, 3},\n\t\t{4, 5, 6, 7},\n\t\t{8, 9, 10, 11},\n\t\t{12, 13, 14, 15}};\n\n\tError += glm::all(glm::equal(m0, m2, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m1, m2, glm::epsilon<float>())) ? 0 : 1;\n\n\n\tstd::vector<glm::mat4> const m3{\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}};\n\n\tglm::mat4 const m4{\n\t\t{1, 0, 0, 0},\n\t\t{0, 1, 0, 0},\n\t\t{0, 0, 1, 0},\n\t\t{0, 0, 0, 1} };\n\n\tError += glm::equal(m4[0][0], 1.0f, 0.0001f) ? 0 : 1;\n\tError += glm::equal(m4[3][3], 1.0f, 0.0001f) ? 0 : 1;\n\n\tstd::vector<glm::mat4> const v1{\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15},\n\t\t{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}};\n\n\tstd::vector<glm::mat4> const v2{\n\t\t{\n\t\t\t{ 0, 1, 2, 3 },\n\t\t\t{ 4, 5, 6, 7 },\n\t\t\t{ 8, 9, 10, 11 },\n\t\t\t{ 12, 13, 14, 15 }\n\t\t},\n\t\t{\n\t\t\t{ 0, 1, 2, 3 },\n\t\t\t{ 4, 5, 6, 7 },\n\t\t\t{ 8, 9, 10, 11 },\n\t\t\t{ 12, 13, 14, 15 }\n\t\t}};\n\n#endif//GLM_HAS_INITIALIZER_LISTS\n\n\treturn Error;\n}\n\nstatic int test_member_alloc_bug()\n{\n\tint Error = 0;\n\t\n\tstruct repro\n\t{\n\t\trepro(){ this->matrix = new glm::mat4(); }\n\t\t~repro(){delete this->matrix;}\n\t\t\n\t\tglm::mat4* matrix;\n\t};\n\t\n\trepro Repro;\n\t\n\treturn Error;\n}\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += 64 == sizeof(glm::mat4) ? 0 : 1;\n\tError += 128 == sizeof(glm::dmat4) ? 0 : 1;\n\tError += glm::mat4().length() == 4 ? 0 : 1;\n\tError += glm::dmat4().length() == 4 ? 0 : 1;\n\tError += glm::mat4::length() == 4 ? 0 : 1;\n\tError += glm::dmat4::length() == 4 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::mat4::length() == 4, \"GLM: Failed constexpr\");\n\tconstexpr glm::mat4 A(1.f);\n\tconstexpr glm::mat4 B(1.f);\n\tconstexpr glm::bvec4 C = glm::equal(A, B, 0.01f);\n\tstatic_assert(glm::all(C), \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_member_alloc_bug();\n\tError += test_ctr();\n\n\tError += test_operators<glm::mat4, glm::vec4>();\n\tError += test_operators<glm::lowp_mat4, glm::lowp_vec4>();\n\tError += test_operators<glm::mediump_mat4, glm::mediump_vec4>();\n\tError += test_operators<glm::highp_mat4, glm::highp_vec4>();\n\n\tError += test_operators<glm::dmat4, glm::dvec4>();\n\tError += test_operators<glm::lowp_dmat4, glm::lowp_dvec4>();\n\tError += test_operators<glm::mediump_dmat4, glm::mediump_dvec4>();\n\tError += test_operators<glm::highp_dmat4, glm::highp_dvec4>();\n\n\tError += test_inverse<glm::mat4>();\n\tError += test_inverse<glm::lowp_mat4>();\n\tError += test_inverse<glm::mediump_mat4>();\n\tError += test_inverse<glm::highp_mat4>();\n\n\tError += test_inverse<glm::dmat4>();\n\tError += test_inverse<glm::lowp_dmat4>();\n\tError += test_inverse<glm::mediump_dmat4>();\n\tError += test_inverse<glm::highp_dmat4>();\n\n\tError += test_size();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_vec1.cpp",
    "content": "#define GLM_FORCE_SWIZZLE\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/vec2.hpp>\n#include <vector>\n\nstatic glm::vec1 g1;\nstatic glm::vec1 g2(1);\n\nint test_vec1_operators()\n{\n\tint Error = 0;\n\n\tglm::ivec1 A(1);\n\tglm::ivec1 B(1);\n\t{\n\t\tbool R = A != B;\n\t\tbool S = A == B;\n\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\t{\n\t\tA *= 1;\n\t\tB *= 1;\n\t\tA += 1;\n\t\tB += 1;\n\n\t\tbool R = A != B;\n\t\tbool S = A == B;\n\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_vec1_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_HAS_TRIVIAL_QUERIES\n\t//\tError += std::is_trivially_default_constructible<glm::vec1>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::vec1>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::vec1>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::dvec1>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::ivec1>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::uvec1>::value ? 0 : 1;\n\n\t\tError += std::is_copy_constructible<glm::vec1>::value ? 0 : 1;\n#\tendif\n\n/*\n#if GLM_HAS_INITIALIZER_LISTS\n\t{\n\t\tglm::vec1 a{ 0 };\n\t\tstd::vector<glm::vec1> v = {\n\t\t\t{0.f},\n\t\t\t{4.f},\n\t\t\t{8.f}};\n\t}\n\n\t{\n\t\tglm::dvec2 a{ 0 };\n\t\tstd::vector<glm::dvec1> v = {\n\t\t\t{0.0},\n\t\t\t{4.0},\n\t\t\t{8.0}};\n\t}\n#endif\n*/\n\n\t{\n\t\tglm::vec2 A = glm::vec2(2.0f);\n\t\tglm::vec2 B = glm::vec2(2.0f, 3.0f);\n\t\tglm::vec2 C = glm::vec2(2.0f, 3.0);\n\t\t//glm::vec2 D = glm::dvec2(2.0); // Build error TODO: What does the specification says?\n\t\tglm::vec2 E(glm::dvec2(2.0));\n\t\tglm::vec2 F(glm::ivec2(2));\n\t}\n\n\treturn Error;\n}\n\nstatic int test_vec1_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::vec1) == sizeof(glm::mediump_vec1) ? 0 : 1;\n\tError += 4 == sizeof(glm::mediump_vec1) ? 0 : 1;\n\tError += sizeof(glm::dvec1) == sizeof(glm::highp_dvec1) ? 0 : 1;\n\tError += 8 == sizeof(glm::highp_dvec1) ? 0 : 1;\n\tError += glm::vec1().length() == 1 ? 0 : 1;\n\tError += glm::dvec1().length() == 1 ? 0 : 1;\n\tError += glm::vec1::length() == 1 ? 0 : 1;\n\tError += glm::dvec1::length() == 1 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_vec1_operator_increment()\n{\n\tint Error(0);\n\n\tglm::ivec1 v0(1);\n\tglm::ivec1 v1(v0);\n\tglm::ivec1 v2(v0);\n\tglm::ivec1 v3 = ++v1;\n\tglm::ivec1 v4 = v2++;\n\n\tError += glm::all(glm::equal(v0, v4)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v2)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v3)) ? 0 : 1;\n\n\tint i0(1);\n\tint i1(i0);\n\tint i2(i0);\n\tint i3 = ++i1;\n\tint i4 = i2++;\n\n\tError += i0 == i4 ? 0 : 1;\n\tError += i1 == i2 ? 0 : 1;\n\tError += i1 == i3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_swizzle()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::vec1 A = glm::vec1(1.0f);\n\t\t//glm::vec1 B = A.x;\n\t\tglm::vec1 C(A.x);\n\n\t\t//Error += glm::all(glm::equal(A, B)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::vec1::length() == 1, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec1(1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_vec1_size();\n\tError += test_vec1_ctor();\n\tError += test_vec1_operators();\n\tError += test_vec1_operator_increment();\n\tError += test_swizzle();\n\tError += test_constexpr();\n\t\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_vec2.cpp",
    "content": "#define GLM_FORCE_SWIZZLE\n#include <glm/gtc/vec1.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/vector_float1.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/vec2.hpp>\n#include <vector>\n#if GLM_HAS_TRIVIAL_QUERIES\n#\tinclude <type_traits>\n#endif\n\nstatic glm::ivec2 g1;\nstatic glm::ivec2 g2(1);\nstatic glm::ivec2 g3(1, 1);\n\nstatic int test_operators()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::ivec2 A(1);\n\t\tglm::ivec2 B(1);\n\t\tError += A != B ? 1 : 0;\n\t\tError += A == B ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec2 A(1.0f);\n\t\tglm::vec2 C = A + 1.0f;\n\t\tA += 1.0f;\n\t\tError += glm::all(glm::equal(A, glm::vec2(2.0f), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec2 A(1.0f);\n\t\tglm::vec2 B(2.0f,-1.0f);\n\t\tglm::vec2 C = A + B;\n\t\tA += B;\n\t\tError += glm::all(glm::equal(A, glm::vec2(3.0f, 0.0f), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec2 A(1.0f);\n\t\tglm::vec2 C = A - 1.0f;\n\t\tA -= 1.0f;\n\t\tError += glm::all(glm::equal(A, glm::vec2(0.0f), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec2 A(1.0f);\n\t\tglm::vec2 B(2.0f,-1.0f);\n\t\tglm::vec2 C = A - B;\n\t\tA -= B;\n\t\tError += glm::all(glm::equal(A, glm::vec2(-1.0f, 2.0f), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec2 A(1.0f);\n\t\tglm::vec2 C = A * 2.0f;\n\t\tA *= 2.0f;\n\t\tError += glm::all(glm::equal(A, glm::vec2(2.0f), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec2 A(2.0f);\n\t\tglm::vec2 B(2.0f);\n\t\tglm::vec2 C = A / B;\n\t\tA /= B;\n\t\tError += glm::all(glm::equal(A, glm::vec2(1.0f), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec2 A(1.0f, 2.0f);\n\t\tglm::vec2 B(4.0f, 5.0f);\n\n\t\tglm::vec2 C = A + B;\n\t\tError += glm::all(glm::equal(C, glm::vec2(5, 7), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 D = B - A;\n\t\tError += glm::all(glm::equal(D, glm::vec2(3, 3), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 E = A * B;\n\t\tError += glm::all(glm::equal(E, glm::vec2(4, 10), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 F = B / A;\n\t\tError += glm::all(glm::equal(F, glm::vec2(4, 2.5), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 G = A + 1.0f;\n\t\tError += glm::all(glm::equal(G, glm::vec2(2, 3), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 H = B - 1.0f;\n\t\tError += glm::all(glm::equal(H, glm::vec2(3, 4), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 I = A * 2.0f;\n\t\tError += glm::all(glm::equal(I, glm::vec2(2, 4), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 J = B / 2.0f;\n\t\tError += glm::all(glm::equal(J, glm::vec2(2, 2.5), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 K = 1.0f + A;\n\t\tError += glm::all(glm::equal(K, glm::vec2(2, 3), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 L = 1.0f - B;\n\t\tError += glm::all(glm::equal(L, glm::vec2(-3, -4), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 M = 2.0f * A;\n\t\tError += glm::all(glm::equal(M, glm::vec2(2, 4), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec2 N = 2.0f / B;\n\t\tError += glm::all(glm::equal(N, glm::vec2(0.5, 2.0 / 5.0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec2 A(1.0f, 2.0f);\n\t\tglm::vec2 B(4.0f, 5.0f);\n\n\t\tA += B;\n\t\tError += glm::all(glm::equal(A, glm::vec2(5, 7), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tA += 1.0f;\n\t\tError += glm::all(glm::equal(A, glm::vec2(6, 8), glm::epsilon<float>())) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec2 A(1.0f, 2.0f);\n\t\tglm::ivec2 B(4.0f, 5.0f);\n\n\t\tB -= A;\n\t\tError += B == glm::ivec2(3, 3) ? 0 : 1;\n\n\t\tB -= 1.0f;\n\t\tError += B == glm::ivec2(2, 2) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec2 A(1.0f, 2.0f);\n\t\tglm::ivec2 B(4.0f, 5.0f);\n\n\t\tA *= B;\n\t\tError += A == glm::ivec2(4, 10) ? 0 : 1;\n\n\t\tA *= 2;\n\t\tError += A == glm::ivec2(8, 20) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec2 A(1.0f, 2.0f);\n\t\tglm::ivec2 B(4.0f, 16.0f);\n\n\t\tB /= A;\n\t\tError += B == glm::ivec2(4, 8) ? 0 : 1;\n\n\t\tB /= 2.0f;\n\t\tError += B == glm::ivec2(2, 4) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec2 B(2);\n\n\t\tB /= B.y;\n\t\tError += B == glm::ivec2(1) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec2 A(1.0f, 2.0f);\n\t\tglm::ivec2 B = -A;\n\t\tError += B == glm::ivec2(-1.0f, -2.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec2 A(1.0f, 2.0f);\n\t\tglm::ivec2 B = --A;\n\t\tError += B == glm::ivec2(0.0f, 1.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec2 A(1.0f, 2.0f);\n\t\tglm::ivec2 B = A--;\n\t\tError += B == glm::ivec2(1.0f, 2.0f) ? 0 : 1;\n\t\tError += A == glm::ivec2(0.0f, 1.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec2 A(1.0f, 2.0f);\n\t\tglm::ivec2 B = ++A;\n\t\tError += B == glm::ivec2(2.0f, 3.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec2 A(1.0f, 2.0f);\n\t\tglm::ivec2 B = A++;\n\t\tError += B == glm::ivec2(1.0f, 2.0f) ? 0 : 1;\n\t\tError += A == glm::ivec2(2.0f, 3.0f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_ctor()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::ivec2 A(1);\n\t\tglm::ivec2 B(A);\n\t\tError += A == B ? 0 : 1;\n\t}\n\n#\tif GLM_HAS_TRIVIAL_QUERIES\n\t//\tError += std::is_trivially_default_constructible<glm::vec2>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::vec2>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::vec2>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::dvec2>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::ivec2>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::uvec2>::value ? 0 : 1;\n\n\t\tError += std::is_copy_constructible<glm::vec2>::value ? 0 : 1;\n#\tendif\n\n#if GLM_HAS_INITIALIZER_LISTS\n\t{\n\t\tglm::vec2 a{ 0, 1 };\n\t\tstd::vector<glm::vec2> v = {\n\t\t\t{0, 1},\n\t\t\t{4, 5},\n\t\t\t{8, 9}};\n\t}\n\n\t{\n\t\tglm::dvec2 a{ 0, 1 };\n\t\tstd::vector<glm::dvec2> v = {\n\t\t\t{0, 1},\n\t\t\t{4, 5},\n\t\t\t{8, 9}};\n\t}\n#endif\n\n\t{\n\t\tglm::vec2 A = glm::vec2(2.0f);\n\t\tglm::vec2 B = glm::vec2(2.0f, 3.0f);\n\t\tglm::vec2 C = glm::vec2(2.0f, 3.0);\n\t\t//glm::vec2 D = glm::dvec2(2.0); // Build error TODO: What does the specification says?\n\t\tglm::vec2 E(glm::dvec2(2.0));\n\t\tglm::vec2 F(glm::ivec2(2));\n\t}\n\n\t{\n\t\tglm::vec1 const R(1.0f);\n\t\tglm::vec1 const S(2.0f);\n\t\tglm::vec2 const O(1.0f, 2.0f);\n\n\t\tglm::vec2 const A(R);\n\t\tglm::vec2 const B(1.0f);\n\t\tError += glm::all(glm::equal(A, B, 0.0001f)) ? 0 : 1;\n\n\t\tglm::vec2 const C(R, S);\n\t\tError += glm::all(glm::equal(C, O, 0.0001f)) ? 0 : 1;\n\n\t\tglm::vec2 const D(R, 2.0f);\n\t\tError += glm::all(glm::equal(D, O, 0.0001f)) ? 0 : 1;\n\n\t\tglm::vec2 const E(1.0f, S);\n\t\tError += glm::all(glm::equal(E, O, 0.0001f)) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec1 const R(1.0f);\n\t\tglm::dvec1 const S(2.0);\n\t\tglm::vec2 const O(1.0, 2.0);\n\n\t\tglm::vec2 const A(R);\n\t\tglm::vec2 const B(1.0);\n\t\tError += glm::all(glm::equal(A, B, 0.0001f)) ? 0 : 1;\n\n\t\tglm::vec2 const C(R, S);\n\t\tError += glm::all(glm::equal(C, O, 0.0001f)) ? 0 : 1;\n\n\t\tglm::vec2 const D(R, 2.0);\n\t\tError += glm::all(glm::equal(D, O, 0.0001f)) ? 0 : 1;\n\n\t\tglm::vec2 const E(1.0, S);\n\t\tError += glm::all(glm::equal(E, O, 0.0001f)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::vec2) == sizeof(glm::mediump_vec2) ? 0 : 1;\n\tError += 8 == sizeof(glm::mediump_vec2) ? 0 : 1;\n\tError += sizeof(glm::dvec2) == sizeof(glm::highp_dvec2) ? 0 : 1;\n\tError += 16 == sizeof(glm::highp_dvec2) ? 0 : 1;\n\tError += glm::vec2().length() == 2 ? 0 : 1;\n\tError += glm::dvec2().length() == 2 ? 0 : 1;\n\tError += glm::vec2::length() == 2 ? 0 : 1;\n\tError += glm::dvec2::length() == 2 ? 0 : 1;\n\n\tGLM_CONSTEXPR std::size_t Length = glm::vec2::length();\n\tError += Length == 2 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_operator_increment()\n{\n\tint Error = 0;\n\n\tglm::ivec2 v0(1);\n\tglm::ivec2 v1(v0);\n\tglm::ivec2 v2(v0);\n\tglm::ivec2 v3 = ++v1;\n\tglm::ivec2 v4 = v2++;\n\n\tError += glm::all(glm::equal(v0, v4)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v2)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v3)) ? 0 : 1;\n\n\tint i0(1);\n\tint i1(i0);\n\tint i2(i0);\n\tint i3 = ++i1;\n\tint i4 = i2++;\n\n\tError += i0 == i4 ? 0 : 1;\n\tError += i1 == i2 ? 0 : 1;\n\tError += i1 == i3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::vec2::length() == 2, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec2(1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec2(1.0f, -1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec2(1.0f, -1.0f).y < 0.0f, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nstatic int test_swizzle()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::vec2 A = glm::vec2(1.0f, 2.0f);\n\t\tglm::vec2 B = A.xy;\n\t\tglm::vec2 C(A.xy);\n\t\tglm::vec2 D(A.xy());\n\n\t\tError += glm::all(glm::equal(A, B, 0.0001f)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, D, 0.0001f)) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t{\n\t\tglm::vec2 A = glm::vec2(1.0f, 2.0f);\n\t\tglm::vec2 B = A.xy();\n\t\tglm::vec2 C(A.xy());\n\n\t\tError += glm::all(glm::equal(A, B, 0.0001f)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, 0.0001f)) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_ctor();\n\tError += test_operators();\n\tError += test_operator_increment();\n\tError += test_swizzle();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_vec3.cpp",
    "content": "#define GLM_FORCE_SWIZZLE\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/geometric.hpp>\n#include <glm/vec2.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec4.hpp>\n#include <vector>\n\nstatic glm::vec3 g1;\nstatic glm::vec3 g2(1);\nstatic glm::vec3 g3(1, 1, 1);\n\nint test_vec3_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_HAS_TRIVIAL_QUERIES\n\t//\tError += std::is_trivially_default_constructible<glm::vec3>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::vec3>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::vec3>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::dvec3>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::ivec3>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::uvec3>::value ? 0 : 1;\n\n\t\tError += std::is_copy_constructible<glm::vec3>::value ? 0 : 1;\n#\tendif\n\n#\tif GLM_HAS_INITIALIZER_LISTS\n\t{\n\t\tglm::vec3 a{ 0, 1, 2 };\n\t\tstd::vector<glm::vec3> v = {\n\t\t\t{0, 1, 2},\n\t\t\t{4, 5, 6},\n\t\t\t{8, 9, 0}};\n\t}\n\n\t{\n\t\tglm::dvec3 a{ 0, 1, 2 };\n\t\tstd::vector<glm::dvec3> v = {\n\t\t\t{0, 1, 2},\n\t\t\t{4, 5, 6},\n\t\t\t{8, 9, 0}};\n\t}\n#\tendif\n\n\t{\n\t\tglm::ivec3 A(1);\n\t\tglm::ivec3 B(1, 1, 1);\n\t\t\n\t\tError += A == B ? 0 : 1;\n\t}\n\n\t{\n\t\tstd::vector<glm::ivec3> Tests;\n\t\tTests.push_back(glm::ivec3(glm::ivec2(1, 2), 3));\n\t\tTests.push_back(glm::ivec3(1, glm::ivec2(2, 3)));\n\t\tTests.push_back(glm::ivec3(1, 2, 3));\n\t\tTests.push_back(glm::ivec3(glm::ivec4(1, 2, 3, 4)));\n\n\t\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t\t\tError += Tests[i] == glm::ivec3(1, 2, 3) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec1 const R(1.0f);\n\t\tglm::vec1 const S(2.0f);\n\t\tglm::vec1 const T(3.0f);\n\t\tglm::vec3 const O(1.0f, 2.0f, 3.0f);\n\n\t\tglm::vec3 const A(R);\n\t\tglm::vec3 const B(1.0f);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const C(R, S, T);\n\t\tError += glm::all(glm::equal(C, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const D(R, 2.0f, 3.0f);\n\t\tError += glm::all(glm::equal(D, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const E(1.0f, S, 3.0f);\n\t\tError += glm::all(glm::equal(E, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const F(1.0f, S, T);\n\t\tError += glm::all(glm::equal(F, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const G(R, 2.0f, T);\n\t\tError += glm::all(glm::equal(G, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const H(R, S, 3.0f);\n\t\tError += glm::all(glm::equal(H, O, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec1 const R(1.0);\n\t\tglm::dvec1 const S(2.0);\n\t\tglm::vec1 const T(3.0);\n\t\tglm::vec3 const O(1.0f, 2.0f, 3.0f);\n\n\t\tglm::vec3 const A(R);\n\t\tglm::vec3 const B(1.0);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const C(R, S, T);\n\t\tError += glm::all(glm::equal(C, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const D(R, 2.0, 3.0);\n\t\tError += glm::all(glm::equal(D, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const E(1.0f, S, 3.0);\n\t\tError += glm::all(glm::equal(E, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const F(1.0, S, T);\n\t\tError += glm::all(glm::equal(F, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const G(R, 2.0, T);\n\t\tError += glm::all(glm::equal(G, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const H(R, S, 3.0);\n\t\tError += glm::all(glm::equal(H, O, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nfloat foo()\n{\n\tglm::vec3 bar = glm::vec3(0.0f, 1.0f, 1.0f);\n\n\treturn glm::length(bar);\n}\n\nstatic int test_bvec3_ctor()\n{\n\tint Error = 0;\n\n\tglm::bvec3 const A(true);\n\tglm::bvec3 const B(true);\n\tglm::bvec3 const C(false);\n\tglm::bvec3 const D = A && B;\n\tglm::bvec3 const E = A && C;\n\tglm::bvec3 const F = A || C;\n\n\tError += D == glm::bvec3(true) ? 0 : 1;\n\tError += E == glm::bvec3(false) ? 0 : 1;\n\tError += F == glm::bvec3(true) ? 0 : 1;\n\n\tbool const G = A == C;\n\tbool const H = A != C;\n\tError += !G ? 0 : 1;\n\tError += H ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_vec3_operators()\n{\n\tint Error = 0;\n\t\n\t{\n\t\tglm::ivec3 A(1);\n\t\tglm::ivec3 B(1);\n\t\tbool R = A != B;\n\t\tbool S = A == B;\n\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec3 const A(1.0f, 2.0f, 3.0f);\n\t\tglm::vec3 const B(4.0f, 5.0f, 6.0f);\n\n\t\tglm::vec3 const C = A + B;\n\t\tError += glm::all(glm::equal(C, glm::vec3(5, 7, 9), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const D = B - A;\n\t\tError += glm::all(glm::equal(D, glm::vec3(3, 3, 3), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const E = A * B;\n\t\tError += glm::all(glm::equal(E, glm::vec3(4, 10, 18), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const F = B / A;\n\t\tError += glm::all(glm::equal(F, glm::vec3(4, 2.5, 2), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const G = A + 1.0f;\n\t\tError += glm::all(glm::equal(G, glm::vec3(2, 3, 4), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const H = B - 1.0f;\n\t\tError += glm::all(glm::equal(H, glm::vec3(3, 4, 5), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const I = A * 2.0f;\n\t\tError += glm::all(glm::equal(I, glm::vec3(2, 4, 6), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const J = B / 2.0f;\n\t\tError += glm::all(glm::equal(J, glm::vec3(2, 2.5, 3), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const K = 1.0f + A;\n\t\tError += glm::all(glm::equal(K, glm::vec3(2, 3, 4), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const L = 1.0f - B;\n\t\tError += glm::all(glm::equal(L, glm::vec3(-3, -4, -5), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const M = 2.0f * A;\n\t\tError += glm::all(glm::equal(M, glm::vec3(2, 4, 6), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec3 const N = 2.0f / B;\n\t\tError += glm::all(glm::equal(N, glm::vec3(0.5, 2.0 / 5.0, 2.0 / 6.0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B(4.0f, 5.0f, 6.0f);\n\n\t\tA += B;\n\t\tError += A == glm::ivec3(5, 7, 9) ? 0 : 1;\n\n\t\tA += 1;\n\t\tError += A == glm::ivec3(6, 8, 10) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B(4.0f, 5.0f, 6.0f);\n\n\t\tB -= A;\n\t\tError += B == glm::ivec3(3, 3, 3) ? 0 : 1;\n\n\t\tB -= 1;\n\t\tError += B == glm::ivec3(2, 2, 2) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B(4.0f, 5.0f, 6.0f);\n\n\t\tA *= B;\n\t\tError += A == glm::ivec3(4, 10, 18) ? 0 : 1;\n\n\t\tA *= 2;\n\t\tError += A == glm::ivec3(8, 20, 36) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B(4.0f, 4.0f, 6.0f);\n\n\t\tB /= A;\n\t\tError += B == glm::ivec3(4, 2, 2) ? 0 : 1;\n\n\t\tB /= 2;\n\t\tError += B == glm::ivec3(2, 1, 1) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec3 B(2);\n\n\t\tB /= B.y;\n\t\tError += B == glm::ivec3(1) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B = -A;\n\t\tError += B == glm::ivec3(-1.0f, -2.0f, -3.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B = --A;\n\t\tError += B == glm::ivec3(0.0f, 1.0f, 2.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B = A--;\n\t\tError += B == glm::ivec3(1.0f, 2.0f, 3.0f) ? 0 : 1;\n\t\tError += A == glm::ivec3(0.0f, 1.0f, 2.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B = ++A;\n\t\tError += B == glm::ivec3(2.0f, 3.0f, 4.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 A(1.0f, 2.0f, 3.0f);\n\t\tglm::ivec3 B = A++;\n\t\tError += B == glm::ivec3(1.0f, 2.0f, 3.0f) ? 0 : 1;\n\t\tError += A == glm::ivec3(2.0f, 3.0f, 4.0f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_vec3_size()\n{\n\tint Error = 0;\n\t\n\tError += sizeof(glm::vec3) == sizeof(glm::lowp_vec3) ? 0 : 1;\n\tError += sizeof(glm::vec3) == sizeof(glm::mediump_vec3) ? 0 : 1;\n\tError += sizeof(glm::vec3) == sizeof(glm::highp_vec3) ? 0 : 1;\n\tError += 12 == sizeof(glm::mediump_vec3) ? 0 : 1;\n\tError += sizeof(glm::dvec3) == sizeof(glm::lowp_dvec3) ? 0 : 1;\n\tError += sizeof(glm::dvec3) == sizeof(glm::mediump_dvec3) ? 0 : 1;\n\tError += sizeof(glm::dvec3) == sizeof(glm::highp_dvec3) ? 0 : 1;\n\tError += 24 == sizeof(glm::highp_dvec3) ? 0 : 1;\n\tError += glm::vec3().length() == 3 ? 0 : 1;\n\tError += glm::dvec3().length() == 3 ? 0 : 1;\n\tError += glm::vec3::length() == 3 ? 0 : 1;\n\tError += glm::dvec3::length() == 3 ? 0 : 1;\n\n\tGLM_CONSTEXPR std::size_t Length = glm::vec3::length();\n\tError += Length == 3 ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_vec3_swizzle3_2()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::ivec3 v(1, 2, 3);\n\t\tglm::ivec2 u;\n\n\t\t// Can not assign a vec3 swizzle to a vec2\n\t\t//u = v.xyz;    //Illegal\n\t\t//u = v.rgb;    //Illegal\n\t\t//u = v.stp;    //Illegal\n\n\t\tu = v.xx;       Error += (u.x == 1 && u.y == 1) ? 0 : 1;\n\t\tu = v.xy;       Error += (u.x == 1 && u.y == 2) ? 0 : 1;\n\t\tu = v.xz;       Error += (u.x == 1 && u.y == 3) ? 0 : 1;\n\t\tu = v.yx;       Error += (u.x == 2 && u.y == 1) ? 0 : 1;\n\t\tu = v.yy;       Error += (u.x == 2 && u.y == 2) ? 0 : 1;\n\t\tu = v.yz;       Error += (u.x == 2 && u.y == 3) ? 0 : 1;\n\t\tu = v.zx;       Error += (u.x == 3 && u.y == 1) ? 0 : 1;\n\t\tu = v.zy;       Error += (u.x == 3 && u.y == 2) ? 0 : 1;\n\t\tu = v.zz;       Error += (u.x == 3 && u.y == 3) ? 0 : 1;\n\n\t\tu = v.rr;       Error += (u.r == 1 && u.g == 1) ? 0 : 1;\n\t\tu = v.rg;       Error += (u.r == 1 && u.g == 2) ? 0 : 1;\n\t\tu = v.rb;       Error += (u.r == 1 && u.g == 3) ? 0 : 1;\n\t\tu = v.gr;       Error += (u.r == 2 && u.g == 1) ? 0 : 1;\n\t\tu = v.gg;       Error += (u.r == 2 && u.g == 2) ? 0 : 1;\n\t\tu = v.gb;       Error += (u.r == 2 && u.g == 3) ? 0 : 1;\n\t\tu = v.br;       Error += (u.r == 3 && u.g == 1) ? 0 : 1;\n\t\tu = v.bg;       Error += (u.r == 3 && u.g == 2) ? 0 : 1;\n\t\tu = v.bb;       Error += (u.r == 3 && u.g == 3) ? 0 : 1;\n\n\t\tu = v.ss;       Error += (u.s == 1 && u.t == 1) ? 0 : 1;\n\t\tu = v.st;       Error += (u.s == 1 && u.t == 2) ? 0 : 1;\n\t\tu = v.sp;       Error += (u.s == 1 && u.t == 3) ? 0 : 1;\n\t\tu = v.ts;       Error += (u.s == 2 && u.t == 1) ? 0 : 1;\n\t\tu = v.tt;       Error += (u.s == 2 && u.t == 2) ? 0 : 1;\n\t\tu = v.tp;       Error += (u.s == 2 && u.t == 3) ? 0 : 1;\n\t\tu = v.ps;       Error += (u.s == 3 && u.t == 1) ? 0 : 1;\n\t\tu = v.pt;       Error += (u.s == 3 && u.t == 2) ? 0 : 1;\n\t\tu = v.pp;       Error += (u.s == 3 && u.t == 3) ? 0 : 1;\n\t\t// Mixed member aliases are not valid\n\t\t//u = v.rx;     //Illegal\n\t\t//u = v.sy;     //Illegal\n\n\t\tu = glm::ivec2(1, 2);\n\t\tv = glm::ivec3(1, 2, 3);\n\t\t//v.xx = u;     //Illegal\n\t\tv.xy = u;       Error += (v.x == 1 && v.y == 2 && v.z == 3) ? 0 : 1;\n\t\tv.xz = u;       Error += (v.x == 1 && v.y == 2 && v.z == 2) ? 0 : 1;\n\t\tv.yx = u;       Error += (v.x == 2 && v.y == 1 && v.z == 2) ? 0 : 1;\n\t\t//v.yy = u;     //Illegal\n\t\tv.yz = u;       Error += (v.x == 2 && v.y == 1 && v.z == 2) ? 0 : 1;\n\t\tv.zx = u;       Error += (v.x == 2 && v.y == 1 && v.z == 1) ? 0 : 1;\n\t\tv.zy = u;       Error += (v.x == 2 && v.y == 2 && v.z == 1) ? 0 : 1;\n\t\t//v.zz = u;     //Illegal\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n\treturn Error;\n}\n\nint test_vec3_swizzle3_3()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::ivec3 v(1, 2, 3);\n\t\tglm::ivec3 u;\n\n\t\tu = v;          Error += (u.x == 1 && u.y == 2 && u.z == 3) ? 0 : 1;\n\n\t\tu = v.xyz;      Error += (u.x == 1 && u.y == 2 && u.z == 3) ? 0 : 1;\n\t\tu = v.zyx;      Error += (u.x == 3 && u.y == 2 && u.z == 1) ? 0 : 1;\n\t\tu.zyx = v;      Error += (u.x == 3 && u.y == 2 && u.z == 1) ? 0 : 1;\n\n\t\tu = v.rgb;      Error += (u.x == 1 && u.y == 2 && u.z == 3) ? 0 : 1;\n\t\tu = v.bgr;      Error += (u.x == 3 && u.y == 2 && u.z == 1) ? 0 : 1;\n\t\tu.bgr = v;      Error += (u.x == 3 && u.y == 2 && u.z == 1) ? 0 : 1;\n\n\t\tu = v.stp;      Error += (u.x == 1 && u.y == 2 && u.z == 3) ? 0 : 1;\n\t\tu = v.pts;      Error += (u.x == 3 && u.y == 2 && u.z == 1) ? 0 : 1;\n\t\tu.pts = v;      Error += (u.x == 3 && u.y == 2 && u.z == 1) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG\n\n\treturn Error;\n}\n\nint test_vec3_swizzle_operators()\n{\n\tint Error = 0;\n\n\tglm::ivec3 const u = glm::ivec3(1, 2, 3);\n\tglm::ivec3 const v = glm::ivec3(10, 20, 30);\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::ivec3 q;\n\n\t\t// Swizzle, swizzle binary operators\n\t\tq = u.xyz + v.xyz;          Error += (q == (u + v)) ? 0 : 1;\n\t\tq = (u.zyx + v.zyx).zyx;    Error += (q == (u + v)) ? 0 : 1;\n\t\tq = (u.xyz - v.xyz);        Error += (q == (u - v)) ? 0 : 1;\n\t\tq = (u.xyz * v.xyz);        Error += (q == (u * v)) ? 0 : 1;\n\t\tq = (u.xxx * v.xxx);        Error += (q == glm::ivec3(u.x * v.x)) ? 0 : 1;\n\t\tq = (u.xyz / v.xyz);        Error += (q == (u / v)) ? 0 : 1;\n\n\t\t// vec, swizzle binary operators\n\t\tq = u + v.xyz;              Error += (q == (u + v)) ? 0 : 1;\n\t\tq = (u - v.xyz);            Error += (q == (u - v)) ? 0 : 1;\n\t\tq = (u * v.xyz);            Error += (q == (u * v)) ? 0 : 1;\n\t\tq = (u * v.xxx);            Error += (q == v.x * u) ? 0 : 1;\n\t\tq = (u / v.xyz);            Error += (q == (u / v)) ? 0 : 1;\n\n\t\t// swizzle,vec binary operators\n\t\tq = u.xyz + v;              Error += (q == (u + v)) ? 0 : 1;\n\t\tq = (u.xyz - v);            Error += (q == (u - v)) ? 0 : 1;\n\t\tq = (u.xyz * v);            Error += (q == (u * v)) ? 0 : 1;\n\t\tq = (u.xxx * v);            Error += (q == u.x * v) ? 0 : 1;\n\t\tq = (u.xyz / v);            Error += (q == (u / v)) ? 0 : 1;\n\t}\n#\tendif//GLM_LANG\n\n\t// Compile errors\n\t//q = (u.yz * v.xyz);\n\t//q = (u * v.xy);\n\n\treturn Error;\n}\n\nint test_vec3_swizzle_functions()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t{\n\t\t// NOTE: template functions cannot pick up the implicit conversion from\n\t\t// a swizzle to the unswizzled type, therefore the operator() must be \n\t\t// used.  E.g.:\n\t\t//\n\t\t// glm::dot(u.xy, v.xy);        <--- Compile error\n\t\t// glm::dot(u.xy(), v.xy());    <--- Compiles correctly\n\n\t\tfloat r;\n\n\t\t// vec2\n\t\tglm::vec2 a(1, 2);\n\t\tglm::vec2 b(10, 20);\n\t\tr = glm::dot(a, b);                 Error += (int(r) == 50) ? 0 : 1;\n\t\tr = glm::dot(glm::vec2(a.xy()), glm::vec2(b.xy()));       Error += (int(r) == 50) ? 0 : 1;\n\t\tr = glm::dot(glm::vec2(a.xy()), glm::vec2(b.yy()));       Error += (int(r) == 60) ? 0 : 1;\n\n\t\t// vec3\n\t\tglm::vec3 u = glm::vec3(1, 2, 3);\n\t\tglm::vec3 v = glm::vec3(10, 20, 30);\n\t\tr = glm::dot(u, v);                 Error += (int(r) == 140) ? 0 : 1;\n\t\tr = glm::dot(u.xyz(), v.zyz());     Error += (int(r) == 160) ? 0 : 1;\n\t\tr = glm::dot(u, v.zyx());           Error += (int(r) == 100) ? 0 : 1;\n\t\tr = glm::dot(u.xyz(), v);           Error += (int(r) == 140) ? 0 : 1;\n\t\tr = glm::dot(u.xy(), v.xy());       Error += (int(r) == 50) ? 0 : 1;\n\n\t\t// vec4\n\t\tglm::vec4 s = glm::vec4(1, 2, 3, 4);\n\t\tglm::vec4 t = glm::vec4(10, 20, 30, 40);\n\t\tr = glm::dot(s, t);                 Error += (int(r) == 300) ? 0 : 1;\n\t\tr = glm::dot(s.xyzw(), t.xyzw());   Error += (int(r) == 300) ? 0 : 1;\n\t\tr = glm::dot(s.xyz(), t.xyz());     Error += (int(r) == 140) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\n\treturn Error;\n}\n\nint test_vec3_swizzle_partial()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::vec3 const A(1, 2, 3);\n\t\tglm::vec3 B(A.xy, 3);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 const A(1, 2, 3);\n\t\tglm::ivec3 const B(1, A.yz);\n\t\tError += A == B ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 const A(1, 2, 3);\n\t\tglm::ivec3 const B(A.xyz);\n\t\tError += A == B ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n\treturn Error;\n}\n\nstatic int test_operator_increment()\n{\n\tint Error = 0;\n\n\tglm::ivec3 v0(1);\n\tglm::ivec3 v1(v0);\n\tglm::ivec3 v2(v0);\n\tglm::ivec3 v3 = ++v1;\n\tglm::ivec3 v4 = v2++;\n\n\tError += glm::all(glm::equal(v0, v4)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v2)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v3)) ? 0 : 1;\n\n\tint i0(1);\n\tint i1(i0);\n\tint i2(i0);\n\tint i3 = ++i1;\n\tint i4 = i2++;\n\n\tError += i0 == i4 ? 0 : 1;\n\tError += i1 == i2 ? 0 : 1;\n\tError += i1 == i3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_swizzle()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::vec3 A = glm::vec3(1.0f, 2.0f, 3.0f);\n\t\tglm::vec3 B = A.xyz;\n\t\tglm::vec3 C(A.xyz);\n\t\tglm::vec3 D(A.xyz());\n\t\tglm::vec3 E(A.x, A.yz);\n\t\tglm::vec3 F(A.x, A.yz());\n\t\tglm::vec3 G(A.xy, A.z);\n\t\tglm::vec3 H(A.xy(), A.z);\n\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, D, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, E, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, F, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, G, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, H, glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t{\n\t\tglm::vec3 A = glm::vec3(1.0f, 2.0f, 3.0f);\n\t\tglm::vec3 B = A.xyz();\n\t\tglm::vec3 C(A.xyz());\n\t\tglm::vec3 D(A.xyz());\n\t\tglm::vec3 E(A.x, A.yz());\n\t\tglm::vec3 F(A.x, A.yz());\n\t\tglm::vec3 G(A.xy(), A.z);\n\t\tglm::vec3 H(A.xy(), A.z);\n\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, D, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, E, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, F, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, G, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, H, glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::vec3::length() == 3, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec3(1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec3(1.0f, -1.0f, -1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec3(1.0f, -1.0f, -1.0f).y < 0.0f, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_vec3_ctor();\n\tError += test_bvec3_ctor();\n\tError += test_vec3_operators();\n\tError += test_vec3_size();\n\tError += test_operator_increment();\n\tError += test_constexpr();\n\n\tError += test_swizzle();\n\tError += test_vec3_swizzle3_2();\n\tError += test_vec3_swizzle3_3();\n\tError += test_vec3_swizzle_partial();\n\tError += test_vec3_swizzle_operators();\n\tError += test_vec3_swizzle_functions();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/core/core_type_vec4.cpp",
    "content": "#define GLM_FORCE_SWIZZLE\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/vec2.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec4.hpp>\n#include <cstdio>\n#include <ctime>\n#include <vector>\n\nstatic glm::vec4 g1;\nstatic glm::vec4 g2(1);\nstatic glm::vec4 g3(1, 1, 1, 1);\n\ntemplate <int Value>\nstruct mask\n{\n\tenum{value = Value};\n};\n\nenum comp\n{\n\tX,\n\tY,\n\tZ,\n\tW\n};\n\n//template<comp X, comp Y, comp Z, comp W>\n//__m128 swizzle(glm::vec4 const& v)\n//{\n//\t__m128 Src = _mm_set_ps(v.w, v.z, v.y, v.x);\n//\treturn _mm_shuffle_ps(Src, Src, mask<(int(W) << 6) | (int(Z) << 4) | (int(Y) << 2) | (int(X) << 0)>::value);\n//}\n\nstatic int test_vec4_ctor()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::ivec4 A(1, 2, 3, 4);\n\t\tglm::ivec4 B(A);\n\t\tError += glm::all(glm::equal(A, B)) ? 0 : 1;\n\t}\n\n#\tif GLM_HAS_TRIVIAL_QUERIES\n\t//\tError += std::is_trivially_default_constructible<glm::vec4>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::vec4>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::vec4>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::dvec4>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::ivec4>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::uvec4>::value ? 0 : 1;\n\n\t\tError += std::is_copy_constructible<glm::vec4>::value ? 0 : 1;\n#\tendif\n\n#if GLM_HAS_INITIALIZER_LISTS\n\t{\n\t\tglm::vec4 a{ 0, 1, 2, 3 };\n\t\tstd::vector<glm::vec4> v = {\n\t\t\t{0, 1, 2, 3},\n\t\t\t{4, 5, 6, 7},\n\t\t\t{8, 9, 0, 1}};\n\t}\n\n\t{\n\t\tglm::dvec4 a{ 0, 1, 2, 3 };\n\t\tstd::vector<glm::dvec4> v = {\n\t\t\t{0, 1, 2, 3},\n\t\t\t{4, 5, 6, 7},\n\t\t\t{8, 9, 0, 1}};\n\t}\n#endif\n\n\t{\n\t\tglm::ivec4 const A(1);\n\t\tglm::ivec4 const B(1, 1, 1, 1);\n\t\t\n\t\tError += A == B ? 0 : 1;\n\t}\n\t\n\t{\n\t\tstd::vector<glm::ivec4> Tests;\n\t\tTests.push_back(glm::ivec4(glm::ivec2(1, 2), 3, 4));\n\t\tTests.push_back(glm::ivec4(1, glm::ivec2(2, 3), 4));\n\t\tTests.push_back(glm::ivec4(1, 2, glm::ivec2(3, 4)));\n\t\tTests.push_back(glm::ivec4(glm::ivec3(1, 2, 3), 4));\n\t\tTests.push_back(glm::ivec4(1, glm::ivec3(2, 3, 4)));\n\t\tTests.push_back(glm::ivec4(glm::ivec2(1, 2), glm::ivec2(3, 4)));\n\t\tTests.push_back(glm::ivec4(1, 2, 3, 4));\n\t\tTests.push_back(glm::ivec4(glm::ivec4(1, 2, 3, 4)));\n\t\t\n\t\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t\t\tError += Tests[i] == glm::ivec4(1, 2, 3, 4) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec1 const R(1.0f);\n\t\tglm::vec1 const S(2.0f);\n\t\tglm::vec1 const T(3.0f);\n\t\tglm::vec1 const U(4.0f);\n\t\tglm::vec4 const O(1.0f, 2.0f, 3.0f, 4.0f);\n\n\t\tglm::vec4 const A(R);\n\t\tglm::vec4 const B(1.0f);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const C(R, S, T, U);\n\t\tError += glm::all(glm::equal(C, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const D(R, 2.0f, 3.0f, 4.0f);\n\t\tError += glm::all(glm::equal(D, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const E(1.0f, S, 3.0f, 4.0f);\n\t\tError += glm::all(glm::equal(E, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const F(R, S, 3.0f, 4.0f);\n\t\tError += glm::all(glm::equal(F, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const G(1.0f, 2.0f, T, 4.0f);\n\t\tError += glm::all(glm::equal(G, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const H(R, 2.0f, T, 4.0f);\n\t\tError += glm::all(glm::equal(H, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const I(1.0f, S, T, 4.0f);\n\t\tError += glm::all(glm::equal(I, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const J(R, S, T, 4.0f);\n\t\tError += glm::all(glm::equal(J, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const K(R, 2.0f, 3.0f, U);\n\t\tError += glm::all(glm::equal(K, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const L(1.0f, S, 3.0f, U);\n\t\tError += glm::all(glm::equal(L, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const M(R, S, 3.0f, U);\n\t\tError += glm::all(glm::equal(M, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const N(1.0f, 2.0f, T, U);\n\t\tError += glm::all(glm::equal(N, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const P(R, 2.0f, T, U);\n\t\tError += glm::all(glm::equal(P, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const Q(1.0f, S, T, U);\n\t\tError += glm::all(glm::equal(Q, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const V(R, S, T, U);\n\t\tError += glm::all(glm::equal(V, O, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec1 const R(1.0f);\n\t\tglm::dvec1 const S(2.0);\n\t\tglm::vec1 const T(3.0);\n\t\tglm::dvec1 const U(4.0);\n\t\tglm::vec4 const O(1.0f, 2.0, 3.0f, 4.0);\n\n\t\tglm::vec4 const A(R);\n\t\tglm::vec4 const B(1.0);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const C(R, S, T, U);\n\t\tError += glm::all(glm::equal(C, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const D(R, 2.0f, 3.0, 4.0f);\n\t\tError += glm::all(glm::equal(D, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const E(1.0, S, 3.0f, 4.0);\n\t\tError += glm::all(glm::equal(E, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const F(R, S, 3.0, 4.0f);\n\t\tError += glm::all(glm::equal(F, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const G(1.0f, 2.0, T, 4.0);\n\t\tError += glm::all(glm::equal(G, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const H(R, 2.0, T, 4.0);\n\t\tError += glm::all(glm::equal(H, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const I(1.0, S, T, 4.0f);\n\t\tError += glm::all(glm::equal(I, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const J(R, S, T, 4.0f);\n\t\tError += glm::all(glm::equal(J, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const K(R, 2.0f, 3.0, U);\n\t\tError += glm::all(glm::equal(K, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const L(1.0f, S, 3.0, U);\n\t\tError += glm::all(glm::equal(L, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const M(R, S, 3.0, U);\n\t\tError += glm::all(glm::equal(M, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const N(1.0f, 2.0, T, U);\n\t\tError += glm::all(glm::equal(N, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const P(R, 2.0, T, U);\n\t\tError += glm::all(glm::equal(P, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const Q(1.0f, S, T, U);\n\t\tError += glm::all(glm::equal(Q, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const V(R, S, T, U);\n\t\tError += glm::all(glm::equal(V, O, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec1 const v1_0(1.0f);\n\t\tglm::vec1 const v1_1(2.0f);\n\t\tglm::vec1 const v1_2(3.0f);\n\t\tglm::vec1 const v1_3(4.0f);\n\n\t\tglm::vec2 const v2_0(1.0f, 2.0f);\n\t\tglm::vec2 const v2_1(2.0f, 3.0f);\n\t\tglm::vec2 const v2_2(3.0f, 4.0f);\n\n\t\tglm::vec3 const v3_0(1.0f, 2.0f, 3.0f);\n\t\tglm::vec3 const v3_1(2.0f, 3.0f, 4.0f);\n\n\t\tglm::vec4 const O(1.0f, 2.0, 3.0f, 4.0);\n\n\t\tglm::vec4 const A(v1_0, v1_1, v2_2);\n\t\tError += glm::all(glm::equal(A, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const B(1.0f, 2.0f, v2_2);\n\t\tError += glm::all(glm::equal(B, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const C(v1_0, 2.0f, v2_2);\n\t\tError += glm::all(glm::equal(C, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const D(1.0f, v1_1, v2_2);\n\t\tError += glm::all(glm::equal(D, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const E(v2_0, v1_2, v1_3);\n\t\tError += glm::all(glm::equal(E, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const F(v2_0, 3.0, v1_3);\n\t\tError += glm::all(glm::equal(F, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const G(v2_0, v1_2, 4.0);\n\t\tError += glm::all(glm::equal(G, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const H(v2_0, 3.0f, 4.0);\n\t\tError += glm::all(glm::equal(H, O, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec1 const v1_0(1.0f);\n\t\tglm::vec1 const v1_1(2.0f);\n\t\tglm::vec1 const v1_2(3.0f);\n\t\tglm::vec1 const v1_3(4.0f);\n\n\t\tglm::vec2 const v2(2.0f, 3.0f);\n\n\t\tglm::vec4 const O(1.0f, 2.0, 3.0f, 4.0);\n\n\t\tglm::vec4 const A(v1_0, v2, v1_3);\n\t\tError += glm::all(glm::equal(A, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const B(v1_0, v2, 4.0);\n\t\tError += glm::all(glm::equal(B, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const C(1.0, v2, v1_3);\n\t\tError += glm::all(glm::equal(C, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const D(1.0f, v2, 4.0);\n\t\tError += glm::all(glm::equal(D, O, glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const E(1.0, v2, 4.0f);\n\t\tError += glm::all(glm::equal(E, O, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_bvec4_ctor()\n{\n\tint Error = 0;\n\n\tglm::bvec4 const A(true);\n\tglm::bvec4 const B(true);\n\tglm::bvec4 const C(false);\n\tglm::bvec4 const D = A && B;\n\tglm::bvec4 const E = A && C;\n\tglm::bvec4 const F = A || C;\n\n\tError += D == glm::bvec4(true) ? 0 : 1;\n\tError += E == glm::bvec4(false) ? 0 : 1;\n\tError += F == glm::bvec4(true) ? 0 : 1;\n\n\tbool const G = A == C;\n\tbool const H = A != C;\n\tError += !G ? 0 : 1;\n\tError += H ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_operators()\n{\n\tint Error = 0;\n\t\n\t{\n\t\tglm::ivec4 A(1);\n\t\tglm::ivec4 B(1);\n\t\tbool R = A != B;\n\t\tbool S = A == B;\n\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec4 const A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::vec4 const B(4.0f, 5.0f, 6.0f, 7.0f);\n\n\t\tglm::vec4 const C = A + B;\n\t\tError += glm::all(glm::equal(C, glm::vec4(5, 7, 9, 11), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const D = B - A;\n\t\tError += glm::all(glm::equal(D, glm::vec4(3, 3, 3, 3), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const E = A * B;\n\t\tError += glm::all(glm::equal(E, glm::vec4(4, 10, 18, 28), glm::epsilon<float>()) )? 0 : 1;\n\n\t\tglm::vec4 const F = B / A;\n\t\tError += glm::all(glm::equal(F, glm::vec4(4, 2.5, 2, 7.0f / 4.0f), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const G = A + 1.0f;\n\t\tError += glm::all(glm::equal(G, glm::vec4(2, 3, 4, 5), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const H = B - 1.0f;\n\t\tError += glm::all(glm::equal(H, glm::vec4(3, 4, 5, 6), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const I = A * 2.0f;\n\t\tError += glm::all(glm::equal(I, glm::vec4(2, 4, 6, 8), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const J = B / 2.0f;\n\t\tError += glm::all(glm::equal(J, glm::vec4(2, 2.5, 3, 3.5), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const K = 1.0f + A;\n\t\tError += glm::all(glm::equal(K, glm::vec4(2, 3, 4, 5), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const L = 1.0f - B;\n\t\tError += glm::all(glm::equal(L, glm::vec4(-3, -4, -5, -6), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const M = 2.0f * A;\n\t\tError += glm::all(glm::equal(M, glm::vec4(2, 4, 6, 8), glm::epsilon<float>())) ? 0 : 1;\n\n\t\tglm::vec4 const N = 2.0f / B;\n\t\tError += glm::all(glm::equal(N, glm::vec4(0.5, 2.0 / 5.0, 2.0 / 6.0, 2.0 / 7.0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B(4.0f, 5.0f, 6.0f, 7.0f);\n\n\t\tA += B;\n\t\tError += A == glm::ivec4(5, 7, 9, 11) ? 0 : 1;\n\n\t\tA += 1;\n\t\tError += A == glm::ivec4(6, 8, 10, 12) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B(4.0f, 5.0f, 6.0f, 7.0f);\n\n\t\tB -= A;\n\t\tError += B == glm::ivec4(3, 3, 3, 3) ? 0 : 1;\n\n\t\tB -= 1;\n\t\tError += B == glm::ivec4(2, 2, 2, 2) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B(4.0f, 5.0f, 6.0f, 7.0f);\n\n\t\tA *= B;\n\t\tError += A == glm::ivec4(4, 10, 18, 28) ? 0 : 1;\n\n\t\tA *= 2;\n\t\tError += A == glm::ivec4(8, 20, 36, 56) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 2.0f, 4.0f);\n\t\tglm::ivec4 B(4.0f, 4.0f, 8.0f, 8.0f);\n\n\t\tB /= A;\n\t\tError += B == glm::ivec4(4, 2, 4, 2) ? 0 : 1;\n\n\t\tB /= 2;\n\t\tError += B == glm::ivec4(2, 1, 2, 1) ? 0 : 1;\n\t}\n\t{\n\t\tglm::ivec4 B(2);\n\n\t\tB /= B.y;\n\t\tError += B == glm::ivec4(1) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = -A;\n\t\tError += B == glm::ivec4(-1.0f, -2.0f, -3.0f, -4.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = --A;\n\t\tError += B == glm::ivec4(0.0f, 1.0f, 2.0f, 3.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = A--;\n\t\tError += B == glm::ivec4(1.0f, 2.0f, 3.0f, 4.0f) ? 0 : 1;\n\t\tError += A == glm::ivec4(0.0f, 1.0f, 2.0f, 3.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = ++A;\n\t\tError += B == glm::ivec4(2.0f, 3.0f, 4.0f, 5.0f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = A++;\n\t\tError += B == glm::ivec4(1.0f, 2.0f, 3.0f, 4.0f) ? 0 : 1;\n\t\tError += A == glm::ivec4(2.0f, 3.0f, 4.0f, 5.0f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_equal()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::uvec4 const A(1, 2, 3, 4);\n\t\tglm::uvec4 const B(1, 2, 3, 4);\n\t\tError += A == B ? 0 : 1;\n\t\tError += A != B ? 1 : 0;\n\t}\n\n\t{\n\t\tglm::ivec4 const A(1, 2, 3, 4);\n\t\tglm::ivec4 const B(1, 2, 3, 4);\n\t\tError += A == B ? 0 : 1;\n\t\tError += A != B ? 1 : 0;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::vec4) == sizeof(glm::lowp_vec4) ? 0 : 1;\n\tError += sizeof(glm::vec4) == sizeof(glm::mediump_vec4) ? 0 : 1;\n\tError += sizeof(glm::vec4) == sizeof(glm::highp_vec4) ? 0 : 1;\n\tError += 16 == sizeof(glm::mediump_vec4) ? 0 : 1;\n\tError += sizeof(glm::dvec4) == sizeof(glm::lowp_dvec4) ? 0 : 1;\n\tError += sizeof(glm::dvec4) == sizeof(glm::mediump_dvec4) ? 0 : 1;\n\tError += sizeof(glm::dvec4) == sizeof(glm::highp_dvec4) ? 0 : 1;\n\tError += 32 == sizeof(glm::highp_dvec4) ? 0 : 1;\n\tError += glm::vec4().length() == 4 ? 0 : 1;\n\tError += glm::dvec4().length() == 4 ? 0 : 1;\n\tError += glm::vec4::length() == 4 ? 0 : 1;\n\tError += glm::dvec4::length() == 4 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_swizzle_partial()\n{\n\tint Error = 0;\n\n\tglm::vec4 const A(1, 2, 3, 4);\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::vec4 B(A.xy, A.zw);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\t{\n\t\tglm::vec4 B(A.xy, 3.0f, 4.0f);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\t{\n\t\tglm::vec4 B(1.0f, A.yz, 4.0f);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\t{\n\t\tglm::vec4 B(1.0f, 2.0f, A.zw);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::vec4 B(A.xyz, 4.0f);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\t{\n\t\tglm::vec4 B(1.0f, A.yzw);\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\n\treturn Error;\n}\n\nstatic int test_swizzle()\n{\n\tint Error = 0;\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\t{\n\t\tglm::ivec4 A = glm::ivec4(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::ivec4 B = A.xyzw;\n\t\tglm::ivec4 C(A.xyzw);\n\t\tglm::ivec4 D(A.xyzw());\n\t\tglm::ivec4 E(A.x, A.yzw);\n\t\tglm::ivec4 F(A.x, A.yzw());\n\t\tglm::ivec4 G(A.xyz, A.w);\n\t\tglm::ivec4 H(A.xyz(), A.w);\n\t\tglm::ivec4 I(A.xy, A.zw);\n\t\tglm::ivec4 J(A.xy(), A.zw());\n\t\tglm::ivec4 K(A.x, A.y, A.zw);\n\t\tglm::ivec4 L(A.x, A.yz, A.w);\n\t\tglm::ivec4 M(A.xy, A.z, A.w);\n\n\t\tError += glm::all(glm::equal(A, B)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, D)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, E)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, F)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, G)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, H)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, I)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, J)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, K)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, L)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, M)) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR\n\n#\tif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\t{\n\t\tglm::vec4 A = glm::vec4(1.0f, 2.0f, 3.0f, 4.0f);\n\t\tglm::vec4 B = A.xyzw();\n\t\tglm::vec4 C(A.xyzw());\n\t\tglm::vec4 D(A.xyzw());\n\t\tglm::vec4 E(A.x, A.yzw());\n\t\tglm::vec4 F(A.x, A.yzw());\n\t\tglm::vec4 G(A.xyz(), A.w);\n\t\tglm::vec4 H(A.xyz(), A.w);\n\t\tglm::vec4 I(A.xy(), A.zw());\n\t\tglm::vec4 J(A.xy(), A.zw());\n\t\tglm::vec4 K(A.x, A.y, A.zw());\n\t\tglm::vec4 L(A.x, A.yz(), A.w);\n\t\tglm::vec4 M(A.xy(), A.z, A.w);\n\n\t\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, C, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, D, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, E, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, F, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, G, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, H, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, I, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, J, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, K, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, L, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(A, M, glm::epsilon<float>())) ? 0 : 1;\n\t}\n#\tendif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR || GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION\n\n\treturn Error;\n}\n\nstatic int test_operator_increment()\n{\n\tint Error = 0;\n\n\tglm::ivec4 v0(1);\n\tglm::ivec4 v1(v0);\n\tglm::ivec4 v2(v0);\n\tglm::ivec4 v3 = ++v1;\n\tglm::ivec4 v4 = v2++;\n\n\tError += glm::all(glm::equal(v0, v4)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v2)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v3)) ? 0 : 1;\n\n\tint i0(1);\n\tint i1(i0);\n\tint i2(i0);\n\tint i3 = ++i1;\n\tint i4 = i2++;\n\n\tError += i0 == i4 ? 0 : 1;\n\tError += i1 == i2 ? 0 : 1;\n\tError += i1 == i3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstruct AoS\n{\n\tglm::vec4 A;\n\tglm::vec3 B;\n\tglm::vec3 C;\n\tglm::vec2 D;\n};\n\nstatic int test_perf_AoS(std::size_t Size)\n{\n\tint Error = 0;\n\n\tstd::vector<AoS> In;\n\tstd::vector<AoS> Out;\n\tIn.resize(Size);\n\tOut.resize(Size);\n\n\tstd::clock_t StartTime = std::clock();\n\n\tfor(std::size_t i = 0; i < In.size(); ++i)\n\t\tOut[i] = In[i];\n\n\tstd::clock_t EndTime = std::clock();\n\n\tstd::printf(\"AoS: %d\\n\", static_cast<int>(EndTime - StartTime));\n\n\treturn Error;\n}\n\nstatic int test_perf_SoA(std::size_t Size)\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec4> InA;\n\tstd::vector<glm::vec3> InB;\n\tstd::vector<glm::vec3> InC;\n\tstd::vector<glm::vec2> InD;\n\tstd::vector<glm::vec4> OutA;\n\tstd::vector<glm::vec3> OutB;\n\tstd::vector<glm::vec3> OutC;\n\tstd::vector<glm::vec2> OutD;\n\n\tInA.resize(Size);\n\tInB.resize(Size);\n\tInC.resize(Size);\n\tInD.resize(Size);\n\tOutA.resize(Size);\n\tOutB.resize(Size);\n\tOutC.resize(Size);\n\tOutD.resize(Size);\n\n\tstd::clock_t StartTime = std::clock();\n\n\tfor(std::size_t i = 0; i < InA.size(); ++i)\n\t{\n\t\tOutA[i] = InA[i];\n\t\tOutB[i] = InB[i];\n\t\tOutC[i] = InC[i];\n\t\tOutD[i] = InD[i];\n\t}\n\n\tstd::clock_t EndTime = std::clock();\n\n\tstd::printf(\"SoA: %d\\n\", static_cast<int>(EndTime - StartTime));\n\n\treturn Error;\n}\n\nnamespace heap\n{\n\tstruct A\n\t{\n\t\tfloat f;\n\t};\n\n\tstruct B : public A\n\t{\n\t\tfloat g;\n\t\tglm::vec4 v;\n\t};\n\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tA* p = new B;\n\t\tp->f = 0.0f;\n\t\tdelete p;\n\n\t\tError += sizeof(B) == sizeof(glm::vec4) + sizeof(float) * 2 ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace heap\n\nstatic int test_simd()\n{\n\tint Error = 0;\n\n\tglm::vec4 const a(std::clock(), std::clock(), std::clock(), std::clock());\n\tglm::vec4 const b(std::clock(), std::clock(), std::clock(), std::clock());\n\n\tglm::vec4 const c(b * a);\n\tglm::vec4 const d(a + c);\n\n\tError += glm::all(glm::greaterThanEqual(d, glm::vec4(0))) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_inheritance()\n{\n\tstruct my_vec4 : public glm::vec4\n\t{\n\t\tmy_vec4()\n\t\t\t: glm::vec4(76.f, 75.f, 74.f, 73.f)\n\t\t\t, member(82)\n\t\t{}\n\n\t\tint member;\n\t};\n\n\tint Error = 0;\n\n\tmy_vec4 v;\n\n\tError += v.member == 82 ? 0 : 1;\n\tError += glm::equal(v.x, 76.f, glm::epsilon<float>()) ? 0 : 1;\n\tError += glm::equal(v.y, 75.f, glm::epsilon<float>()) ? 0 : 1;\n\tError += glm::equal(v.z, 74.f, glm::epsilon<float>()) ? 0 : 1;\n\tError += glm::equal(v.w, 73.f, glm::epsilon<float>()) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::vec4::length() == 4, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec4(1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec4(1.0f, -1.0f, -1.0f, -1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec4(1.0f, -1.0f, -1.0f, -1.0f).y < 0.0f, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n/*\nstatic int test_simd_gen()\n{\n\tint Error = 0;\n\n\tint const C = static_cast<int>(std::clock());\n\tint const D = static_cast<int>(std::clock());\n\n\tglm::ivec4 const A(C);\n\tglm::ivec4 const B(D);\n\n\tError += A != B ? 0 : 1;\n\n\treturn Error;\n}\n*/\nint main()\n{\n\tint Error = 0;\n\n\t//Error += test_simd_gen();\n\n/*\n\t{\n\t\tglm::ivec4 const a1(2);\n\t\tglm::ivec4 const b1 = a1 >> 1;\n\n\t\t__m128i const e1 = _mm_set1_epi32(2);\n\t\t__m128i const f1 = _mm_srli_epi32(e1, 1);\n\n\t\tglm::ivec4 const g1 = *reinterpret_cast<glm::ivec4 const* const>(&f1);\n\n\t\tglm::ivec4 const a2(-2);\n\t\tglm::ivec4 const b2 = a2 >> 1;\n\n\t\t__m128i const e2 = _mm_set1_epi32(-1);\n\t\t__m128i const f2 = _mm_srli_epi32(e2, 1);\n\n\t\tglm::ivec4 const g2 = *reinterpret_cast<glm::ivec4 const* const>(&f2);\n\n\t\tstd::printf(\"GNI\\n\");\n\t}\n\n\t{\n\t\tglm::uvec4 const a1(2);\n\t\tglm::uvec4 const b1 = a1 >> 1u;\n\n\t\t__m128i const e1 = _mm_set1_epi32(2);\n\t\t__m128i const f1 = _mm_srli_epi32(e1, 1);\n\n\t\tglm::uvec4 const g1 = *reinterpret_cast<glm::uvec4 const* const>(&f1);\n\n\t\tglm::uvec4 const a2(-1);\n\t\tglm::uvec4 const b2 = a2 >> 1u;\n\n\t\t__m128i const e2 = _mm_set1_epi32(-1);\n\t\t__m128i const f2 = _mm_srli_epi32(e2, 1);\n\n\t\tglm::uvec4 const g2 = *reinterpret_cast<glm::uvec4 const* const>(&f2);\n\n\t\tstd::printf(\"GNI\\n\");\n\t}\n*/\n\n#\tifdef NDEBUG\n\tstd::size_t const Size(1000000);\n#\telse\n\tstd::size_t const Size(1);\n#\tendif//NDEBUG\n\n\tError += test_perf_AoS(Size);\n\tError += test_perf_SoA(Size);\n\n\tError += test_vec4_ctor();\n\tError += test_bvec4_ctor();\n\tError += test_size();\n\tError += test_operators();\n\tError += test_equal();\n\tError += test_swizzle();\n\tError += test_swizzle_partial();\n\tError += test_simd();\n\tError += test_operator_increment();\n\tError += heap::test();\n\tError += test_inheritance();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/CMakeLists.txt",
    "content": "glmCreateTestGTC(ext_matrix_relational)\nglmCreateTestGTC(ext_matrix_transform)\nglmCreateTestGTC(ext_matrix_common)\nglmCreateTestGTC(ext_matrix_integer)\nglmCreateTestGTC(ext_matrix_int2x2_sized)\nglmCreateTestGTC(ext_matrix_int2x3_sized)\nglmCreateTestGTC(ext_matrix_int2x4_sized)\nglmCreateTestGTC(ext_matrix_int3x2_sized)\nglmCreateTestGTC(ext_matrix_int3x3_sized)\nglmCreateTestGTC(ext_matrix_int3x4_sized)\nglmCreateTestGTC(ext_matrix_int4x2_sized)\nglmCreateTestGTC(ext_matrix_int4x3_sized)\nglmCreateTestGTC(ext_matrix_int4x4_sized)\nglmCreateTestGTC(ext_matrix_uint2x2_sized)\nglmCreateTestGTC(ext_matrix_uint2x3_sized)\nglmCreateTestGTC(ext_matrix_uint2x4_sized)\nglmCreateTestGTC(ext_matrix_uint3x2_sized)\nglmCreateTestGTC(ext_matrix_uint3x3_sized)\nglmCreateTestGTC(ext_matrix_uint3x4_sized)\nglmCreateTestGTC(ext_matrix_uint4x2_sized)\nglmCreateTestGTC(ext_matrix_uint4x3_sized)\nglmCreateTestGTC(ext_matrix_uint4x4_sized)\nglmCreateTestGTC(ext_quaternion_common)\nglmCreateTestGTC(ext_quaternion_exponential)\nglmCreateTestGTC(ext_quaternion_geometric)\nglmCreateTestGTC(ext_quaternion_relational)\nglmCreateTestGTC(ext_quaternion_transform)\nglmCreateTestGTC(ext_quaternion_trigonometric)\nglmCreateTestGTC(ext_quaternion_type)\nglmCreateTestGTC(ext_scalar_common)\nglmCreateTestGTC(ext_scalar_constants)\nglmCreateTestGTC(ext_scalar_int_sized)\nglmCreateTestGTC(ext_scalar_uint_sized)\nglmCreateTestGTC(ext_scalar_integer)\nglmCreateTestGTC(ext_scalar_ulp)\nglmCreateTestGTC(ext_scalar_reciprocal)\nglmCreateTestGTC(ext_scalar_relational)\nglmCreateTestGTC(ext_vec1)\nglmCreateTestGTC(ext_vector_bool1)\nglmCreateTestGTC(ext_vector_common)\nglmCreateTestGTC(ext_vector_iec559)\nglmCreateTestGTC(ext_vector_int1_sized)\nglmCreateTestGTC(ext_vector_int2_sized)\nglmCreateTestGTC(ext_vector_int3_sized)\nglmCreateTestGTC(ext_vector_int4_sized)\nglmCreateTestGTC(ext_vector_integer)\nglmCreateTestGTC(ext_vector_integer_sized)\nglmCreateTestGTC(ext_vector_uint1_sized)\nglmCreateTestGTC(ext_vector_uint2_sized)\nglmCreateTestGTC(ext_vector_uint3_sized)\nglmCreateTestGTC(ext_vector_uint4_sized)\nglmCreateTestGTC(ext_vector_reciprocal)\nglmCreateTestGTC(ext_vector_relational)\nglmCreateTestGTC(ext_vector_ulp)\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_clip_space.cpp",
    "content": "#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/matrix_clip_space.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/vector_float3.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_common.cpp",
    "content": "#include <glm/ext/matrix_common.hpp>\n#include <glm/ext/matrix_double4x4.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_bool4.hpp>\n#include <glm/ext/matrix_float4x3.hpp>\n\nstatic int test_mix()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::mat4 A(2);\n\t\tglm::mat4 B(4);\n\t\tglm::mat4 C = glm::mix(A, B, 0.5f);\n\t\tglm::bvec4 const D = glm::equal(C, glm::mat4(3), 1);\n\t\tError += glm::all(D) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat4 A(2);\n\t\tglm::mat4 B(4);\n\t\tglm::mat4 C = glm::mix(A, B, 0.5);\n\t\tglm::bvec4 const D = glm::equal(C, glm::mat4(3), 1);\n\t\tError += glm::all(D) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::dmat4 A(2);\n\t\tglm::dmat4 B(4);\n\t\tglm::dmat4 C = glm::mix(A, B, 0.5);\n\t\tglm::bvec4 const D = glm::equal(C, glm::dmat4(3), 1);\n\t\tError += glm::all(D) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::dmat4 A(2);\n\t\tglm::dmat4 B(4);\n\t\tglm::dmat4 C = glm::mix(A, B, 0.5f);\n\t\tglm::bvec4 const D = glm::equal(C, glm::dmat4(3), 1);\n\t\tError += glm::all(D) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_abs()\n{\n\tint Error = 0;\n\n\t// -------------------- //\n\t// glm::mat4 variants : //\n\t// -------------------- //\n\t{\n\t\tglm::mat4 A(\n\t\t\t3.0f, 1.0f, 5.2f, 4.9f,\n\t\t\t1.4f, 0.5f, 9.3f, 3.7f,\n\t\t\t6.8f, 8.4f, 4.3f, 3.9f,\n\t\t\t5.6f, 7.2f, 1.1f, 4.4f\n\t\t);\n\t\tglm::mat4 B(\n\t\t\t 1.0,-1.0, 1.0, 1.0,\n\t\t\t-1.0, 1.0, 1.0,-1.0,\n\t\t\t 1.0,-1.0,-1.0,-1.0,\n\t\t\t-1.0,-1.0, 1.0, 1.0\n\t\t);\n\t\tglm::mat4 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat4 D = glm::abs(C);\n\t\tglm::bvec4 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec4 const col2 = glm::equal(D[1], A[1]);\n\t\tglm::bvec4 const col3 = glm::equal(D[2], A[2]);\n\t\tglm::bvec4 const col4 = glm::equal(D[3], A[3]);\n\t\tError += glm::all(glm::bvec4{glm::all(col1), glm::all(col2), glm::all(col3), glm::all(col4)}) ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat4x3 A(\n\t\t\t3.0f, 1.0f, 5.2f,\n\t\t\t4.9f, 1.4f, 0.5f,\n\t\t\t9.3f, 3.7f, 6.8f,\n\t\t\t8.4f, 4.3f, 3.9f\n\t\t);\n\t\tglm::mat4x3 B(\n\t\t\t 1.0,-1.0, 1.0,\n\t\t\t 1.0,-1.0, 1.0,\n\t\t\t 1.0,-1.0, 1.0,\n\t\t\t-1.0,-1.0,-1.0\n\t\t);\n\t\tglm::mat4x3 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat4x3 D = glm::abs(C);\n\t\tglm::bvec3 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec3 const col2 = glm::equal(D[1], A[1]);\n\t\tglm::bvec3 const col3 = glm::equal(D[2], A[2]);\n\t\tglm::bvec3 const col4 = glm::equal(D[3], A[3]);\n\t\tError += glm::all(glm::bvec4{glm::all(col1), glm::all(col2), glm::all(col3), glm::all(col4)}) ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat4x2 A(\n\t\t\t3.0f, 1.0f,\n\t\t\t1.4f, 0.5f,\n\t\t\t6.8f, 8.4f,\n\t\t\t5.6f, 7.2f\n\t\t);\n\t\tglm::mat4x2 B(\n\t\t\t 1.0,-1.0,\n\t\t\t-1.0, 1.0,\n\t\t\t 1.0,-1.0,\n\t\t\t-1.0,-1.0\n\t\t);\n\t\tglm::mat4x2 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat4x2 D = glm::abs(C);\n\t\tglm::bvec2 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec2 const col2 = glm::equal(D[1], A[1]);\n\t\tglm::bvec2 const col3 = glm::equal(D[2], A[2]);\n\t\tglm::bvec2 const col4 = glm::equal(D[3], A[3]);\n\t\tError += glm::all(glm::bvec4{glm::all(col1), glm::all(col2), glm::all(col3), glm::all(col4)}) ? 0 : 1;\n\t}\n\n\t// -------------------- //\n\t// glm::mat3 variants : //\n\t// -------------------- //\n\t{\n\t\tglm::mat3x4 A(\n\t\t\t3.0f, 1.0f, 5.2f, 4.9f,\n\t\t\t1.4f, 0.5f, 9.3f, 3.7f,\n\t\t\t6.8f, 8.4f, 4.3f, 3.9f\n\t\t);\n\t\tglm::mat3x4 B(\n\t\t\t 1.0,-1.0, 1.0, 1.0,\n\t\t\t-1.0, 1.0, 1.0,-1.0,\n\t\t\t 1.0,-1.0,-1.0,-1.0\n\t\t);\n\t\tglm::mat3x4 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat3x4 D = glm::abs(C);\n\t\tglm::bvec4 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec4 const col2 = glm::equal(D[1], A[1]);\n\t\tglm::bvec4 const col3 = glm::equal(D[2], A[2]);\n\t\tError += glm::all(glm::bvec3{glm::all(col1), glm::all(col2), glm::all(col3)}) ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat3 A(\n\t\t\t3.0f, 1.0f, 5.2f,\n\t\t\t1.4f, 0.5f, 9.3f,\n\t\t\t6.8f, 8.4f, 4.3f\n\t\t);\n\t\tglm::mat3 B(\n\t\t\t1.0,-1.0, 1.0,\n\t\t\t-1.0, 1.0, 1.0,\n\t\t\t1.0,-1.0,-1.0\n\t\t);\n\t\tglm::mat3 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat3 D = glm::abs(C);\n\t\tglm::bvec3 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec3 const col2 = glm::equal(D[1], A[1]);\n\t\tglm::bvec3 const col3 = glm::equal(D[2], A[2]);\n\t\tError += glm::all(glm::bvec3{glm::all(col1), glm::all(col2), glm::all(col3)}) ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat3x2 A(\n\t\t\t5.2f, 4.9f,\n\t\t\t9.3f, 3.7f,\n\t\t\t4.3f, 3.9f\n\t\t);\n\t\tglm::mat3x2 B(\n\t\t\t 1.0, 1.0,\n\t\t\t 1.0,-1.0,\n\t\t\t-1.0,-1.0\n\t\t);\n\t\tglm::mat3x2 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat3x2 D = glm::abs(C);\n\t\tglm::bvec2 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec2 const col2 = glm::equal(D[1], A[1]);\n\t\tglm::bvec2 const col3 = glm::equal(D[2], A[2]);\n\t\tError += glm::all(glm::bvec3{glm::all(col1), glm::all(col2), glm::all(col3)}) ? 0 : 1;\n\t}\n\n\t// -------------------- //\n\t// glm::mat2 variants : //\n\t// -------------------- //\n\t{\n\t\tglm::mat2x4 A(\n\t\t\t3.0f, 1.0f, 5.2f, 4.9f,\n\t\t\t5.6f, 7.2f, 1.1f, 4.4f\n\t\t);\n\t\tglm::mat2x4 B(\n\t\t\t 1.0,-1.0, 1.0, 1.0,\n\t\t\t-1.0,-1.0, 1.0, 1.0\n\t\t);\n\t\tglm::mat2x4 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat2x4 D = glm::abs(C);\n\t\tglm::bvec4 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec4 const col2 = glm::equal(D[1], A[1]);\n\t\tError += glm::all(glm::bvec2{glm::all(col1), glm::all(col2)}) ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat2x3 A(\n\t\t\t3.0f, 1.0f, 5.2f,\n\t\t\t8.4f, 4.3f, 3.9f\n\t\t);\n\t\tglm::mat2x3 B(\n\t\t\t 1.0,-1.0, 1.0,\n\t\t\t-1.0,-1.0,-1.0\n\t\t);\n\t\tglm::mat2x3 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat2x3 D = glm::abs(C);\n\t\tglm::bvec3 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec3 const col2 = glm::equal(D[1], A[1]);\n\t\tError += glm::all(glm::bvec2{glm::all(col1), glm::all(col2)}) ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat2 A(\n\t\t\t3.0f, 1.0f,\n\t\t\t5.6f, 7.2f\n\t\t);\n\t\tglm::mat2 B(\n\t\t\t 1.0,-1.0,\n\t\t\t-1.0,-1.0\n\t\t);\n\t\tglm::mat2 C = glm::matrixCompMult(A, B); // Not * to avoid matrix product.\n\t\tglm::mat2 D = glm::abs(C);\n\t\tglm::bvec2 const col1 = glm::equal(D[0], A[0]);\n\t\tglm::bvec2 const col2 = glm::equal(D[1], A[1]);\n\t\tError += glm::all(glm::bvec2{glm::all(col1), glm::all(col2)}) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_mix();\n\tError += test_abs();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_int2x2_sized.cpp",
    "content": "#include <glm/ext/matrix_int2x2_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\n\tstatic_assert(sizeof(glm::i8mat2x2) == 4, \"int8 size isn't 1 byte on this platform\");\n\tstatic_assert(sizeof(glm::i16mat2x2) == 8, \"int16 size isn't 2 bytes on this platform\");\n\tstatic_assert(sizeof(glm::i32mat2x2) == 16, \"int32 size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::i64mat2x2) == 32, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat2x2) < sizeof(glm::i16mat2x2) ? 0 : 1;\n\tError += sizeof(glm::i16mat2x2) < sizeof(glm::i32mat2x2) ? 0 : 1;\n\tError += sizeof(glm::i32mat2x2) < sizeof(glm::i64mat2x2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_int2x3_sized.cpp",
    "content": "#include <glm/ext/matrix_int2x3_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8mat2x3) == 6, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16mat2x3) == 12, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32mat2x3) == 24, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64mat2x3) == 48, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat2x3) < sizeof(glm::i16mat2x3) ? 0 : 1;\n\tError += sizeof(glm::i16mat2x3) < sizeof(glm::i32mat2x3) ? 0 : 1;\n\tError += sizeof(glm::i32mat2x3) < sizeof(glm::i64mat2x3) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_int2x4_sized.cpp",
    "content": "#include <glm/ext/matrix_int2x4_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8mat2x4) == 8, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16mat2x4) == 16, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32mat2x4) == 32, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64mat2x4) == 64, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat2x4) < sizeof(glm::i16mat2x4) ? 0 : 1;\n\tError += sizeof(glm::i16mat2x4) < sizeof(glm::i32mat2x4) ? 0 : 1;\n\tError += sizeof(glm::i32mat2x4) < sizeof(glm::i64mat2x4) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_int3x2_sized.cpp",
    "content": "#include <glm/ext/matrix_int3x2_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8mat3x2) == 6, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16mat3x2) == 12, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32mat3x2) == 24, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64mat3x2) == 48, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat3x2) < sizeof(glm::i16mat3x2) ? 0 : 1;\n\tError += sizeof(glm::i16mat3x2) < sizeof(glm::i32mat3x2) ? 0 : 1;\n\tError += sizeof(glm::i32mat3x2) < sizeof(glm::i64mat3x2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_int3x3_sized.cpp",
    "content": "#include <glm/ext/matrix_int3x3_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8mat3x3) == 9, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16mat3x3) == 18, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32mat3x3) == 36, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64mat3x3) == 72, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat3x3) < sizeof(glm::i16mat3x3) ? 0 : 1;\n\tError += sizeof(glm::i16mat3x3) < sizeof(glm::i32mat3x3) ? 0 : 1;\n\tError += sizeof(glm::i32mat3x3) < sizeof(glm::i64mat3x3) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_int3x4_sized.cpp",
    "content": "#include <glm/ext/matrix_int3x4_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8mat3x4) == 12, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16mat3x4) == 24, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32mat3x4) == 48, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64mat3x4) == 96, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat3x4) < sizeof(glm::i16mat3x4) ? 0 : 1;\n\tError += sizeof(glm::i16mat3x4) < sizeof(glm::i32mat3x4) ? 0 : 1;\n\tError += sizeof(glm::i32mat3x4) < sizeof(glm::i64mat3x4) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_int4x2_sized.cpp",
    "content": "#include <glm/ext/matrix_int4x2_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8mat4x2) == 8, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16mat4x2) == 16, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32mat4x2) == 32, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64mat4x2) == 64, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat4x2) < sizeof(glm::i16mat4x2) ? 0 : 1;\n\tError += sizeof(glm::i16mat4x2) < sizeof(glm::i32mat4x2) ? 0 : 1;\n\tError += sizeof(glm::i32mat4x2) < sizeof(glm::i64mat4x2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_int4x3_sized.cpp",
    "content": "#include <glm/ext/matrix_int4x3_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8mat4x3) == 12, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16mat4x3) == 24, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32mat4x3) == 48, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64mat4x3) == 96, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat4x3) < sizeof(glm::i16mat4x3) ? 0 : 1;\n\tError += sizeof(glm::i16mat4x3) < sizeof(glm::i32mat4x3) ? 0 : 1;\n\tError += sizeof(glm::i32mat4x3) < sizeof(glm::i64mat4x3) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_int4x4_sized.cpp",
    "content": "#include <glm/ext/matrix_int4x4_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8mat4x4) == 16, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16mat4x4) == 32, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32mat4x4) == 64, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64mat4x4) == 128, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8mat4x4) < sizeof(glm::i16mat4x4) ? 0 : 1;\n\tError += sizeof(glm::i16mat4x4) < sizeof(glm::i32mat4x4) ? 0 : 1;\n\tError += sizeof(glm::i32mat4x4) < sizeof(glm::i64mat4x4) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_integer.cpp",
    "content": "#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/matrix_integer.hpp>\n#include <glm/ext/matrix_int2x2.hpp>\n#include <glm/ext/matrix_int2x3.hpp>\n#include <glm/ext/matrix_int2x4.hpp>\n#include <glm/ext/matrix_int3x2.hpp>\n#include <glm/ext/matrix_int3x3.hpp>\n#include <glm/ext/matrix_int3x4.hpp>\n#include <glm/ext/matrix_int4x2.hpp>\n#include <glm/ext/matrix_int4x3.hpp>\n#include <glm/ext/matrix_int4x4.hpp>\n\nusing namespace glm;\n\nint test_matrixCompMult()\n{\n\tint Error = 0;\n\n\t{\n\t\timat2 m(0, 1, 2, 3);\n\t\timat2 n = matrixCompMult(m, m);\n\t\timat2 expected = imat2(0, 1, 4, 9);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat2x3 m(0, 1, 2, 3, 4, 5);\n\t\timat2x3 n = matrixCompMult(m, m);\n\t\timat2x3 expected = imat2x3(0, 1, 4, 9, 16, 25);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat2x4 m(0, 1, 2, 3, 4, 5, 6, 7);\n\t\timat2x4 n = matrixCompMult(m, m);\n\t\timat2x4 expected = imat2x4(0, 1, 4, 9, 16, 25, 36, 49);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat3 m(0, 1, 2, 3, 4, 5, 6, 7, 8);\n\t\timat3 n = matrixCompMult(m, m);\n\t\timat3 expected = imat3(0, 1, 4, 9, 16, 25, 36, 49, 64);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat3x2 m(0, 1, 2, 3, 4, 5);\n\t\timat3x2 n = matrixCompMult(m, m);\n\t\timat3x2 expected = imat3x2(0, 1, 4, 9, 16, 25);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat3x4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\n\t\timat3x4 n = matrixCompMult(m, m);\n\t\timat3x4 expected = imat3x4(0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\n\t\timat4 n = matrixCompMult(m, m);\n\t\timat4 expected = imat4(0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat4x2 m(0, 1, 2, 3, 4, 5, 6, 7);\n\t\timat4x2 n = matrixCompMult(m, m);\n\t\timat4x2 expected = imat4x2(0, 1, 4, 9, 16, 25, 36, 49);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat4x3 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\n\t\timat4x3 n = matrixCompMult(m, m);\n\t\timat4x3 expected = imat4x3(0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121);\n\t\tError += all(equal(n, expected)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_outerProduct()\n{\n\tint Error = 0;\n\n\t{ \n\t\tglm::imat2x2 const m = glm::outerProduct(glm::ivec2(1), glm::ivec2(1));\n\t\tError += all(equal(m, glm::imat2x2(1, 1, 1, 1))) ? 0 : 1;\n\t}\n\t{ \n\t\tglm::imat2x3 const m = glm::outerProduct(glm::ivec3(1), glm::ivec2(1)); \n\t\tError += all(equal(m, glm::imat2x3(1, 1, 1, 1, 1, 1))) ? 0 : 1;\n\t}\n\t{ \n\t\tglm::imat2x4 const m = glm::outerProduct(glm::ivec4(1), glm::ivec2(1)); \n\t\tError += all(equal(m, glm::imat2x4(1, 1, 1, 1, 1, 1, 1, 1))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::imat3x2 const m = glm::outerProduct(glm::ivec2(1), glm::ivec3(1));\n\t\tError += all(equal(m, glm::imat3x2(1, 1, 1, 1, 1, 1))) ? 0 : 1;\n\t}\n\t{ \n\t\tglm::imat3x3 const m = glm::outerProduct(glm::ivec3(1), glm::ivec3(1)); \n\t\tError += all(equal(m, glm::imat3x3(1, 1, 1, 1, 1, 1, 1, 1, 1))) ? 0 : 1;\n\t}\n\t{\n\t\tglm::imat3x4 const m = glm::outerProduct(glm::ivec4(1), glm::ivec3(1));\n\t\tError += all(equal(m, glm::imat3x4(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1))) ? 0 : 1;\n\t}\n\n  \n\t{ \n\t\tglm::imat4x2 const m = glm::outerProduct(glm::ivec2(1), glm::ivec4(1)); \n\t\tError += all(equal(m, glm::imat4x2(1, 1, 1, 1, 1, 1, 1, 1))) ? 0 : 1;\n\t}\n\t{ \n\t\tglm::imat4x3 const m = glm::outerProduct(glm::ivec3(1), glm::ivec4(1));\n\t\tError += all(equal(m, glm::imat4x3(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1))) ? 0 : 1;\n\t}\n\t{ \n\t\tglm::imat4x4 const m = glm::outerProduct(glm::ivec4(1), glm::ivec4(1)); \n\t\tError += all(equal(m, glm::imat4x4(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1))) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_transpose()\n{\n\tint Error = 0;\n\n\t{\n\t\timat2 const m(0, 1, 2, 3);\n\t\timat2 const t = transpose(m);\n\t\timat2 const expected = imat2(0, 2, 1, 3);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat2x3 m(0, 1, 2, 3, 4, 5);\n\t\timat3x2 t = transpose(m);\n\t\timat3x2 const expected = imat3x2(0, 3, 1, 4, 2, 5);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat2x4 m(0, 1, 2, 3, 4, 5, 6, 7);\n\t\timat4x2 t = transpose(m);\n\t\timat4x2 const expected = imat4x2(0, 4, 1, 5, 2, 6, 3, 7);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat3 m(0, 1, 2, 3, 4, 5, 6, 7, 8);\n\t\timat3 t = transpose(m);\n\t\timat3 const expected = imat3(0, 3, 6, 1, 4, 7, 2, 5, 8);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat3x2 m(0, 1, 2, 3, 4, 5);\n\t\timat2x3 t = transpose(m);\n\t\timat2x3 const expected = imat2x3(0, 2, 4, 1, 3, 5);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat3x4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\n\t\timat4x3 t = transpose(m);\n\t\timat4x3 const expected = imat4x3(0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat4 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\n\t\timat4 t = transpose(m);\n\t\timat4 const expected = imat4(0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat4x2 m(0, 1, 2, 3, 4, 5, 6, 7);\n\t\timat2x4 t = transpose(m);\n\t\timat2x4 const expected = imat2x4(0, 2, 4, 6, 1, 3, 5, 7);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\t{\n\t\timat4x3 m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);\n\t\timat3x4 t = transpose(m);\n\t\timat3x4 const expected = imat3x4(0, 3, 6, 9, 1, 4, 7, 10, 2, 5, 8, 11);\n\t\tError += all(equal(t, expected)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_determinant()\n{\n\tint Error = 0;\n\n\t{\n\t\timat2 const m(1, 1, 1, 1);\n\t\tint const t = determinant(m);\n\t\tError += t == 0 ? 0 : 1;\n\t}\n\n\t{\n\t\timat3 m(1, 1, 1, 1, 1, 1, 1, 1, 1);\n\t\tint t = determinant(m);\n\t\tError += t == 0 ? 0 : 1;\n\t}\n\n\t{\n\t\timat4 m(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1);\n\t\tint t = determinant(m);\n\t\tError += t == 0 ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_matrixCompMult();\n\tError += test_outerProduct();\n\tError += test_transpose();\n\tError += test_determinant();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_projection.cpp",
    "content": "#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/matrix_projection.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/vector_float3.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_relational.cpp",
    "content": "#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/matrix_double2x2.hpp>\n#include <glm/ext/matrix_double2x3.hpp>\n#include <glm/ext/matrix_double2x4.hpp>\n#include <glm/ext/matrix_double3x2.hpp>\n#include <glm/ext/matrix_double3x3.hpp>\n#include <glm/ext/matrix_double3x4.hpp>\n#include <glm/ext/matrix_double4x2.hpp>\n#include <glm/ext/matrix_double4x3.hpp>\n#include <glm/ext/matrix_double4x4.hpp>\n#include <glm/ext/vector_double2.hpp>\n#include <glm/ext/vector_double3.hpp>\n#include <glm/ext/vector_double4.hpp>\n#include <glm/ext/matrix_float2x2.hpp>\n#include <glm/ext/matrix_float2x3.hpp>\n#include <glm/ext/matrix_float2x4.hpp>\n#include <glm/ext/matrix_float3x2.hpp>\n#include <glm/ext/matrix_float3x3.hpp>\n#include <glm/ext/matrix_float3x4.hpp>\n#include <glm/ext/matrix_float4x2.hpp>\n#include <glm/ext/matrix_float4x3.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/vector_float2.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/scalar_ulp.hpp>\n\ntemplate <typename matType, typename vecType>\nstatic int test_equal()\n{\n\ttypedef typename matType::value_type valType;\n\n\tvalType const Epsilon = static_cast<valType>(0.001f);\n\tvalType const One = static_cast<valType>(1);\n\tvalType const Two = static_cast<valType>(2);\n\n\tint Error = 0;\n\n\tError += glm::all(glm::equal(matType(One), matType(One), Epsilon)) ? 0 : 1;\n\tError += glm::all(glm::equal(matType(One), matType(Two), vecType(Epsilon))) ? 1 : 0;\n\n\treturn Error;\n}\n\ntemplate <typename matType, typename vecType>\nstatic int test_notEqual()\n{\n\ttypedef typename matType::value_type valType;\n\n\tvalType const Epsilon = static_cast<valType>(0.001f);\n\tvalType const One = static_cast<valType>(1);\n\tvalType const Two = static_cast<valType>(2);\n\n\tint Error = 0;\n\n\tError += !glm::any(glm::notEqual(matType(One), matType(One), Epsilon)) ? 0 : 1;\n\tError += !glm::any(glm::notEqual(matType(One), matType(Two), vecType(Epsilon))) ? 1 : 0;\n\n\treturn Error;\n}\n\n\ntemplate <typename T>\nstatic int test_equal_ulps()\n{\n\ttypedef glm::mat<4, 4, T, glm::defaultp> mat4;\n\n\tT const One(1);\n\tmat4 const Ones(1);\n\n\tint Error = 0;\n\n\tT const ULP1Plus = glm::nextFloat(One);\n\tError += glm::all(glm::equal(Ones, mat4(ULP1Plus), 1)) ? 0 : 1;\n\n\tT const ULP2Plus = glm::nextFloat(ULP1Plus);\n\tError += !glm::all(glm::equal(Ones, mat4(ULP2Plus), 1)) ? 0 : 1;\n\n\tT const ULP1Minus = glm::prevFloat(One);\n\tError += glm::all(glm::equal(Ones, mat4(ULP1Minus), 1)) ? 0 : 1;\n\n\tT const ULP2Minus = glm::prevFloat(ULP1Minus);\n\tError += !glm::all(glm::equal(Ones, mat4(ULP2Minus), 1)) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename T>\nstatic int test_notEqual_ulps()\n{\n\ttypedef glm::mat<4, 4, T, glm::defaultp> mat4;\n\n\tT const One(1);\n\tmat4 const Ones(1);\n\n\tint Error = 0;\n\n\tT const ULP1Plus = glm::nextFloat(One);\n\tError += !glm::all(glm::notEqual(Ones, mat4(ULP1Plus), 1)) ? 0 : 1;\n\n\tT const ULP2Plus = glm::nextFloat(ULP1Plus);\n\tError += glm::all(glm::notEqual(Ones, mat4(ULP2Plus), 1)) ? 0 : 1;\n\n\tT const ULP1Minus = glm::prevFloat(One);\n\tError += !glm::all(glm::notEqual(Ones, mat4(ULP1Minus), 1)) ? 0 : 1;\n\n\tT const ULP2Minus = glm::prevFloat(ULP1Minus);\n\tError += glm::all(glm::notEqual(Ones, mat4(ULP2Minus), 1)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_equal_ulps<float>();\n\tError += test_equal_ulps<double>();\n\tError += test_notEqual_ulps<float>();\n\tError += test_notEqual_ulps<double>();\n\n\tError += test_equal<glm::mat2x2, glm::vec2>();\n\tError += test_equal<glm::mat2x3, glm::vec2>();\n\tError += test_equal<glm::mat2x4, glm::vec2>();\n\tError += test_equal<glm::mat3x2, glm::vec3>();\n\tError += test_equal<glm::mat3x3, glm::vec3>();\n\tError += test_equal<glm::mat3x4, glm::vec3>();\n\tError += test_equal<glm::mat4x2, glm::vec4>();\n\tError += test_equal<glm::mat4x3, glm::vec4>();\n\tError += test_equal<glm::mat4x4, glm::vec4>();\n\n\tError += test_equal<glm::dmat2x2, glm::dvec2>();\n\tError += test_equal<glm::dmat2x3, glm::dvec2>();\n\tError += test_equal<glm::dmat2x4, glm::dvec2>();\n\tError += test_equal<glm::dmat3x2, glm::dvec3>();\n\tError += test_equal<glm::dmat3x3, glm::dvec3>();\n\tError += test_equal<glm::dmat3x4, glm::dvec3>();\n\tError += test_equal<glm::dmat4x2, glm::dvec4>();\n\tError += test_equal<glm::dmat4x3, glm::dvec4>();\n\tError += test_equal<glm::dmat4x4, glm::dvec4>();\n\n\tError += test_notEqual<glm::mat2x2, glm::vec2>();\n\tError += test_notEqual<glm::mat2x3, glm::vec2>();\n\tError += test_notEqual<glm::mat2x4, glm::vec2>();\n\tError += test_notEqual<glm::mat3x2, glm::vec3>();\n\tError += test_notEqual<glm::mat3x3, glm::vec3>();\n\tError += test_notEqual<glm::mat3x4, glm::vec3>();\n\tError += test_notEqual<glm::mat4x2, glm::vec4>();\n\tError += test_notEqual<glm::mat4x3, glm::vec4>();\n\tError += test_notEqual<glm::mat4x4, glm::vec4>();\n\n\tError += test_notEqual<glm::dmat2x2, glm::dvec2>();\n\tError += test_notEqual<glm::dmat2x3, glm::dvec2>();\n\tError += test_notEqual<glm::dmat2x4, glm::dvec2>();\n\tError += test_notEqual<glm::dmat3x2, glm::dvec3>();\n\tError += test_notEqual<glm::dmat3x3, glm::dvec3>();\n\tError += test_notEqual<glm::dmat3x4, glm::dvec3>();\n\tError += test_notEqual<glm::dmat4x2, glm::dvec4>();\n\tError += test_notEqual<glm::dmat4x3, glm::dvec4>();\n\tError += test_notEqual<glm::dmat4x4, glm::dvec4>();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_transform.cpp",
    "content": "#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/matrix_transform.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/vector_float3.hpp>\n\nstatic int test_translate()\n{\n\tint Error = 0;\n\n\tglm::mat4 const M(1.0f);\n\tglm::vec3 const V(1.0f);\n\n\tglm::mat4 const T = glm::translate(M, V);\n\tError += glm::all(glm::equal(T[3], glm::vec4(1.0f), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_scale()\n{\n\tint Error = 0;\n\n\tglm::mat4 const M(1.0f);\n\tglm::vec3 const V(2.0f);\n\n\tglm::mat4 const S = glm::scale(M, V);\n\tglm::mat4 const R = glm::mat4(\n\t\tglm::vec4(2, 0, 0, 0),\n\t\tglm::vec4(0, 2, 0, 0),\n\t\tglm::vec4(0, 0, 2, 0),\n\t\tglm::vec4(0, 0, 0, 1));\n\tError += glm::all(glm::equal(S, R, glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_rotate()\n{\n\tint Error = 0;\n\n\tglm::vec4 const A(1.0f, 0.0f, 0.0f, 1.0f);\n\n\tglm::mat4 const R = glm::rotate(glm::mat4(1.0f), glm::radians(90.f), glm::vec3(0, 0, 1));\n\tglm::vec4 const B = R * A;\n\tError += glm::all(glm::equal(B, glm::vec4(0.0f, 1.0f, 0.0f, 1.0f), 0.0001f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_translate();\n\tError += test_scale();\n\tError += test_rotate();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_uint2x2_sized.cpp",
    "content": "#include <glm/ext/matrix_uint2x2_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\n\tstatic_assert(sizeof(glm::u8mat2x2) == 4, \"uint8 size isn't 1 byte on this platform\");\n\tstatic_assert(sizeof(glm::u16mat2x2) == 8, \"uint16 size isn't 2 bytes on this platform\");\n\tstatic_assert(sizeof(glm::u32mat2x2) == 16, \"uint32 size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::u64mat2x2) == 32, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat2x2) < sizeof(glm::u16mat2x2) ? 0 : 1;\n\tError += sizeof(glm::u16mat2x2) < sizeof(glm::u32mat2x2) ? 0 : 1;\n\tError += sizeof(glm::u32mat2x2) < sizeof(glm::u64mat2x2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_uint2x3_sized.cpp",
    "content": "#include <glm/ext/matrix_uint2x3_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8mat2x3) == 6, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16mat2x3) == 12, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32mat2x3) == 24, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64mat2x3) == 48, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat2x3) < sizeof(glm::u16mat2x3) ? 0 : 1;\n\tError += sizeof(glm::u16mat2x3) < sizeof(glm::u32mat2x3) ? 0 : 1;\n\tError += sizeof(glm::u32mat2x3) < sizeof(glm::u64mat2x3) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_uint2x4_sized.cpp",
    "content": "#include <glm/ext/matrix_uint2x4_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8mat2x4) == 8, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16mat2x4) == 16, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32mat2x4) == 32, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64mat2x4) == 64, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat2x4) < sizeof(glm::u16mat2x4) ? 0 : 1;\n\tError += sizeof(glm::u16mat2x4) < sizeof(glm::u32mat2x4) ? 0 : 1;\n\tError += sizeof(glm::u32mat2x4) < sizeof(glm::u64mat2x4) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_uint3x2_sized.cpp",
    "content": "#include <glm/ext/matrix_uint3x2_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8mat3x2) == 6, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16mat3x2) == 12, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32mat3x2) == 24, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64mat3x2) == 48, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat3x2) < sizeof(glm::u16mat3x2) ? 0 : 1;\n\tError += sizeof(glm::u16mat3x2) < sizeof(glm::u32mat3x2) ? 0 : 1;\n\tError += sizeof(glm::u32mat3x2) < sizeof(glm::u64mat3x2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_uint3x3_sized.cpp",
    "content": "#include <glm/ext/matrix_uint3x3_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8mat3x3) == 9, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16mat3x3) == 18, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32mat3x3) == 36, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64mat3x3) == 72, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat3x3) < sizeof(glm::u16mat3x3) ? 0 : 1;\n\tError += sizeof(glm::u16mat3x3) < sizeof(glm::u32mat3x3) ? 0 : 1;\n\tError += sizeof(glm::u32mat3x3) < sizeof(glm::u64mat3x3) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_uint3x4_sized.cpp",
    "content": "#include <glm/ext/matrix_uint3x4_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8mat3x4) == 12, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16mat3x4) == 24, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32mat3x4) == 48, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64mat3x4) == 96, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat3x4) < sizeof(glm::u16mat3x4) ? 0 : 1;\n\tError += sizeof(glm::u16mat3x4) < sizeof(glm::u32mat3x4) ? 0 : 1;\n\tError += sizeof(glm::u32mat3x4) < sizeof(glm::u64mat3x4) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_uint4x2_sized.cpp",
    "content": "#include <glm/ext/matrix_uint4x2_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8mat4x2) == 8, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16mat4x2) == 16, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32mat4x2) == 32, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64mat4x2) == 64, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat4x2) < sizeof(glm::u16mat4x2) ? 0 : 1;\n\tError += sizeof(glm::u16mat4x2) < sizeof(glm::u32mat4x2) ? 0 : 1;\n\tError += sizeof(glm::u32mat4x2) < sizeof(glm::u64mat4x2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_uint4x3_sized.cpp",
    "content": "#include <glm/ext/matrix_uint4x3_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8mat4x3) == 12, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16mat4x3) == 24, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32mat4x3) == 48, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64mat4x3) == 96, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat4x3) < sizeof(glm::u16mat4x3) ? 0 : 1;\n\tError += sizeof(glm::u16mat4x3) < sizeof(glm::u32mat4x3) ? 0 : 1;\n\tError += sizeof(glm::u32mat4x3) < sizeof(glm::u64mat4x3) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_matrix_uint4x4_sized.cpp",
    "content": "#include <glm/ext/matrix_uint4x4_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8mat4x4) == 16, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16mat4x4) == 32, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32mat4x4) == 64, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64mat4x4) == 128, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8mat4x4) < sizeof(glm::u16mat4x4) ? 0 : 1;\n\tError += sizeof(glm::u16mat4x4) < sizeof(glm::u32mat4x4) ? 0 : 1;\n\tError += sizeof(glm::u32mat4x4) < sizeof(glm::u64mat4x4) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_quaternion_common.cpp",
    "content": "#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/quaternion_common.hpp>\n#include <glm/ext/quaternion_float.hpp>\n#include <glm/ext/quaternion_relational.hpp>\n#include <glm/ext/quaternion_trigonometric.hpp>\n#include <glm/ext/scalar_constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n\nstatic int test_conjugate()\n{\n\tint Error = 0;\n\n\tglm::quat const A(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0));\n\tglm::quat const C = glm::conjugate(A);\n\tError += glm::any(glm::notEqual(A, C, glm::epsilon<float>())) ? 0 : 1;\n\n\tglm::quat const B = glm::conjugate(C);\n\tError += glm::all(glm::equal(A, B, glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_mix()\n{\n\tint Error = 0;\n\n\tglm::quat const Q1(glm::vec3(1, 0, 0), glm::vec3(1, 0, 0));\n\tglm::quat const Q2(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0));\n\n\t{\n\t\tglm::quat const Q3 = glm::mix(Q1, Q2, 0.5f);\n\t\tfloat const F3 = glm::degrees(glm::angle(Q3));\n\t\tError += glm::equal(F3, 45.0f, 0.001f) ? 0 : 1;\n\n\t\tglm::quat const Q4 = glm::mix(Q2, Q1, 0.5f);\n\t\tfloat const F4 = glm::degrees(glm::angle(Q4));\n\t\tError += glm::equal(F4, 45.0f, 0.001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::quat const Q3 = glm::slerp(Q1, Q2, 0.5f);\n\t\tfloat const F3 = glm::degrees(glm::angle(Q3));\n\t\tError += glm::equal(F3, 45.0f, 0.001f) ? 0 : 1;\n\n\t\tglm::quat const Q4 = glm::slerp(Q2, Q1, 0.5f);\n\t\tfloat const F4 = glm::degrees(glm::angle(Q4));\n\t\tError += glm::equal(F4, 45.0f, 0.001f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_conjugate();\n\tError += test_mix();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_quaternion_exponential.cpp",
    "content": "#include <glm/ext/quaternion_exponential.hpp>\n#include <glm/ext/quaternion_float.hpp>\n#include <glm/ext/quaternion_float_precision.hpp>\n#include <glm/ext/quaternion_double.hpp>\n#include <glm/ext/quaternion_double_precision.hpp>\n#include <glm/ext/quaternion_relational.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float3_precision.hpp>\n#include <glm/ext/vector_double3.hpp>\n#include <glm/ext/vector_double3_precision.hpp>\n#include <glm/ext/scalar_constants.hpp>\n\ntemplate <typename quaType, typename vecType>\nint test_log()\n{\n\ttypedef typename quaType::value_type T;\n\t\n\tT const Epsilon = static_cast<T>(0.001f);\n\t\n\tint Error = 0;\n\t\n\tquaType const Q(vecType(1, 0, 0), vecType(0, 1, 0));\n\tquaType const P = glm::log(Q);\n\tError += glm::any(glm::notEqual(Q, P, Epsilon)) ? 0 : 1;\n\t\n\tquaType const R = glm::exp(P);\n\tError += glm::all(glm::equal(Q, R, Epsilon)) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename quaType, typename vecType>\nint test_pow()\n{\n\ttypedef typename quaType::value_type T;\n\t\n\tT const Epsilon = static_cast<T>(0.001f);\n\t\n\tint Error = 0;\n\t\n\tquaType const Q(vecType(1, 0, 0), vecType(0, 1, 0));\n\t\n\t{\n\t\tT const One = static_cast<T>(1.0f);\n\t\tquaType const P = glm::pow(Q, One);\n\t\tError += glm::all(glm::equal(Q, P, Epsilon)) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tT const Two = static_cast<T>(2.0f);\n\t\tquaType const P = glm::pow(Q, Two);\n\t\tquaType const R = Q * Q;\n\t\tError += glm::all(glm::equal(P, R, Epsilon)) ? 0 : 1;\n\n\t\tquaType const U = glm::sqrt(P);\n\t\tError += glm::all(glm::equal(Q, U, Epsilon)) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_log<glm::quat, glm::vec3>();\n\tError += test_log<glm::lowp_quat, glm::lowp_vec3>();\n\tError += test_log<glm::mediump_quat, glm::mediump_vec3>();\n\tError += test_log<glm::highp_quat, glm::highp_vec3>();\n\t\n\tError += test_log<glm::dquat, glm::dvec3>();\n\tError += test_log<glm::lowp_dquat, glm::lowp_dvec3>();\n\tError += test_log<glm::mediump_dquat, glm::mediump_dvec3>();\n\tError += test_log<glm::highp_dquat, glm::highp_dvec3>();\n\n\tError += test_pow<glm::quat, glm::vec3>();\n\tError += test_pow<glm::lowp_quat, glm::lowp_vec3>();\n\tError += test_pow<glm::mediump_quat, glm::mediump_vec3>();\n\tError += test_pow<glm::highp_quat, glm::highp_vec3>();\n\t\n\tError += test_pow<glm::dquat, glm::dvec3>();\n\tError += test_pow<glm::lowp_dquat, glm::lowp_dvec3>();\n\tError += test_pow<glm::mediump_dquat, glm::mediump_dvec3>();\n\tError += test_pow<glm::highp_dquat, glm::highp_dvec3>();\n\t\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_quaternion_geometric.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/quaternion_geometric.hpp>\n#include <glm/ext/quaternion_float.hpp>\n#include <glm/ext/quaternion_trigonometric.hpp>\n#include <glm/ext/quaternion_float_precision.hpp>\n#include <glm/ext/quaternion_double.hpp>\n#include <glm/ext/quaternion_double_precision.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float3_precision.hpp>\n#include <glm/ext/vector_double3.hpp>\n#include <glm/ext/vector_double3_precision.hpp>\n#include <glm/ext/scalar_relational.hpp>\n\nfloat const Epsilon = 0.001f;\n\nstatic int test_length()\n{\n\tint Error = 0;\n\n\t{\n\t\tfloat const A = glm::length(glm::quat(1, 0, 0, 0));\n\t\tError += glm::equal(A, 1.0f, Epsilon) ? 0 : 1;\n\t}\n\n\t{\n\t\tfloat const A = glm::length(glm::quat(1, glm::vec3(0)));\n\t\tError += glm::equal(A, 1.0f, Epsilon) ? 0 : 1;\n\t}\n\n\t{\n\t\tfloat const A = glm::length(glm::quat(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0)));\n\t\tError += glm::equal(A, 1.0f, Epsilon) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_normalize()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::quat const A = glm::quat(1, 0, 0, 0);\n\t\tglm::quat const N = glm::normalize(A);\n\t\tError += glm::all(glm::equal(A, N, Epsilon)) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::quat const A = glm::quat(1, glm::vec3(0));\n\t\tglm::quat const N = glm::normalize(A);\n\t\tError += glm::all(glm::equal(A, N, Epsilon)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_dot()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::quat const A = glm::quat(1, 0, 0, 0);\n\t\tglm::quat const B = glm::quat(1, 0, 0, 0);\n\t\tfloat const C = glm::dot(A, B);\n\t\tError += glm::equal(C, 1.0f, Epsilon) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_cross()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_length();\n\tError += test_normalize();\n\tError += test_dot();\n\tError += test_cross();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_quaternion_relational.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/quaternion_relational.hpp>\n#include <glm/ext/quaternion_float.hpp>\n#include <glm/ext/quaternion_float_precision.hpp>\n#include <glm/ext/quaternion_double.hpp>\n#include <glm/ext/quaternion_double_precision.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float3_precision.hpp>\n#include <glm/ext/vector_double3.hpp>\n#include <glm/ext/vector_double3_precision.hpp>\n\ntemplate <typename quaType>\nstatic int test_equal()\n{\n\tint Error = 0;\n\n\tquaType const Q(1, 0, 0, 0);\n\tquaType const P(1, 0, 0, 0);\n\tError += glm::all(glm::equal(Q, P, glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename quaType>\nstatic int test_notEqual()\n{\n\tint Error = 0;\n\n\tquaType const Q(1, 0, 0, 0);\n\tquaType const P(1, 0, 0, 0);\n\tError += glm::any(glm::notEqual(Q, P, glm::epsilon<float>())) ? 1 : 0;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_equal<glm::quat>();\n\tError += test_equal<glm::lowp_quat>();\n\tError += test_equal<glm::mediump_quat>();\n\tError += test_equal<glm::highp_quat>();\n\n\tError += test_notEqual<glm::quat>();\n\tError += test_notEqual<glm::lowp_quat>();\n\tError += test_notEqual<glm::mediump_quat>();\n\tError += test_notEqual<glm::highp_quat>();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_quaternion_transform.cpp",
    "content": "#include <glm/ext/quaternion_transform.hpp>\n#include <glm/ext/quaternion_float.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/scalar_constants.hpp>\n\n#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/quaternion.hpp>\n\nstatic int test_lookAt()\n{\n\tint Error(0);\n\n\tglm::vec3 eye(0.0f);\n\tglm::vec3 center(1.1f, -2.0f, 3.1416f);\n\tglm::vec3 up(-0.17f, 7.23f, -1.744f);\n\n\tglm::quat test_quat = glm::quatLookAt(glm::normalize(center - eye), up);\n\tglm::quat test_mat = glm::conjugate(glm::quat_cast(glm::lookAt(eye, center, up)));\n\n\tError += static_cast<int>(glm::abs(glm::length(test_quat) - 1.0f) > glm::epsilon<float>());\n\tError += static_cast<int>(glm::min(glm::length(test_quat + (-test_mat)), glm::length(test_quat + test_mat)) > glm::epsilon<float>());\n\n\t// Test left-handed implementation\n\tglm::quat test_quatLH = glm::quatLookAtLH(glm::normalize(center - eye), up);\n\tglm::quat test_matLH = glm::conjugate(glm::quat_cast(glm::lookAtLH(eye, center, up)));\n\tError += static_cast<int>(glm::abs(glm::length(test_quatLH) - 1.0f) > glm::epsilon<float>());\n\tError += static_cast<int>(glm::min(glm::length(test_quatLH - test_matLH), glm::length(test_quatLH + test_matLH)) > glm::epsilon<float>());\n \n\t// Test right-handed implementation\n\tglm::quat test_quatRH = glm::quatLookAtRH(glm::normalize(center - eye), up);\n\tglm::quat test_matRH = glm::conjugate(glm::quat_cast(glm::lookAtRH(eye, center, up)));\n\tError += static_cast<int>(glm::abs(glm::length(test_quatRH) - 1.0f) > glm::epsilon<float>());\n\tError += static_cast<int>(glm::min(glm::length(test_quatRH - test_matRH), glm::length(test_quatRH + test_matRH)) > glm::epsilon<float>());\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_lookAt();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_quaternion_trigonometric.cpp",
    "content": "#include <glm/ext/quaternion_trigonometric.hpp>\n#include <glm/ext/quaternion_float.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/scalar_relational.hpp>\n\nfloat const Epsilon = 0.001f;\n\nstatic int test_angle()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::quat const Q = glm::quat(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0));\n\t\tfloat const A = glm::degrees(glm::angle(Q));\n\t\tError += glm::equal(A, 90.0f, Epsilon) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::quat const Q = glm::quat(glm::vec3(0, 1, 0), glm::vec3(1, 0, 0));\n\t\tfloat const A = glm::degrees(glm::angle(Q));\n\t\tError += glm::equal(A, 90.0f, Epsilon) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::quat const Q = glm::angleAxis(glm::two_pi<float>() - 1.0f, glm::vec3(1, 0, 0));\n\t\tfloat const A = glm::angle(Q);\n\t\tError += glm::equal(A, 1.0f, Epsilon) ? 1 : 0;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_angle();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_quaternion_type.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/quaternion_relational.hpp>\n#include <glm/ext/quaternion_float.hpp>\n#include <glm/ext/quaternion_float_precision.hpp>\n#include <glm/ext/quaternion_double.hpp>\n#include <glm/ext/quaternion_double_precision.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <vector>\n\nstatic int test_ctr()\n{\n\tint Error(0);\n\n#\tif GLM_HAS_TRIVIAL_QUERIES\n\t//\tError += std::is_trivially_default_constructible<glm::quat>::value ? 0 : 1;\n\t//\tError += std::is_trivially_default_constructible<glm::dquat>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::quat>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::dquat>::value ? 0 : 1;\n\tError += std::is_trivially_copyable<glm::quat>::value ? 0 : 1;\n\tError += std::is_trivially_copyable<glm::dquat>::value ? 0 : 1;\n\n\tError += std::is_copy_constructible<glm::quat>::value ? 0 : 1;\n\tError += std::is_copy_constructible<glm::dquat>::value ? 0 : 1;\n#\tendif\n\n#\tif GLM_HAS_INITIALIZER_LISTS\n\t{\n\t\tglm::quat A{0, 1, 2, 3};\n\n\t\tstd::vector<glm::quat> B{\n\t\t\t{0, 1, 2, 3},\n\t\t{0, 1, 2, 3}};\n\t}\n#\tendif//GLM_HAS_INITIALIZER_LISTS\n\n\treturn Error;\n}\n\nstatic int test_two_axis_ctr()\n{\n\tint Error = 0;\n\n\tglm::quat const q1(glm::vec3(1, 0, 0), glm::vec3(0, 1, 0));\n\tglm::vec3 const v1 = q1 * glm::vec3(1, 0, 0);\n\tError += glm::all(glm::equal(v1, glm::vec3(0, 1, 0), 0.0001f)) ? 0 : 1;\n\n\tglm::quat const q2 = q1 * q1;\n\tglm::vec3 const v2 = q2 * glm::vec3(1, 0, 0);\n\tError += glm::all(glm::equal(v2, glm::vec3(-1, 0, 0), 0.0001f)) ? 0 : 1;\n\n\tglm::quat const q3(glm::vec3(1, 0, 0), glm::vec3(-1, 0, 0));\n\tglm::vec3 const v3 = q3 * glm::vec3(1, 0, 0);\n\tError += glm::all(glm::equal(v3, glm::vec3(-1, 0, 0), 0.0001f)) ? 0 : 1;\n\n\tglm::quat const q4(glm::vec3(0, 1, 0), glm::vec3(0, -1, 0));\n\tglm::vec3 const v4 = q4 * glm::vec3(0, 1, 0);\n\tError += glm::all(glm::equal(v4, glm::vec3(0, -1, 0), 0.0001f)) ? 0 : 1;\n\n\tglm::quat const q5(glm::vec3(0, 0, 1), glm::vec3(0, 0, -1));\n\tglm::vec3 const v5 = q5 * glm::vec3(0, 0, 1);\n\tError += glm::all(glm::equal(v5, glm::vec3(0, 0, -1), 0.0001f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tstd::size_t const A = sizeof(glm::quat);\n\tError += 16 == A ? 0 : 1;\n\tstd::size_t const B = sizeof(glm::dquat);\n\tError += 32 == B ? 0 : 1;\n\tError += glm::quat().length() == 4 ? 0 : 1;\n\tError += glm::dquat().length() == 4 ? 0 : 1;\n\tError += glm::quat::length() == 4 ? 0 : 1;\n\tError += glm::dquat::length() == 4 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_precision()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::lowp_quat) <= sizeof(glm::mediump_quat) ? 0 : 1;\n\tError += sizeof(glm::mediump_quat) <= sizeof(glm::highp_quat) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::quat::length() == 4, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::quat(1.0f, glm::vec3(0.0f)).w > 0.0f, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_ctr();\n\tError += test_two_axis_ctr();\n\tError += test_size();\n\tError += test_precision();\n\tError += test_constexpr();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_scalar_common.cpp",
    "content": "#include <glm/ext/scalar_common.hpp>\n#include <glm/ext/scalar_constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/common.hpp>\n\n#if ((GLM_LANG & GLM_LANG_CXX11_FLAG) || (GLM_COMPILER & GLM_COMPILER_VC))\n#\tdefine GLM_NAN(T) NAN\n#else\n#\tdefine GLM_NAN(T) (static_cast<T>(0.0f) / static_cast<T>(0.0f))\n#endif\n\ntemplate <typename T>\nstatic int test_min()\n{\n\tint Error = 0;\n\n\tT const N = static_cast<T>(0);\n\tT const B = static_cast<T>(1);\n\tError += glm::equal(glm::min(N, B), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(B, N), N, glm::epsilon<T>()) ? 0 : 1;\n\n\tT const C = static_cast<T>(2);\n\tError += glm::equal(glm::min(N, B, C), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(B, N, C), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(C, N, B), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(C, B, N), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(B, C, N), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(N, C, B), N, glm::epsilon<T>()) ? 0 : 1;\n\n\tT const D = static_cast<T>(3);\n\tError += glm::equal(glm::min(D, N, B, C), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(B, D, N, C), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(C, N, D, B), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(C, B, D, N), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(B, C, N, D), N, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::min(N, C, B, D), N, glm::epsilon<T>()) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename T>\nstatic int test_min_nan()\n{\n\tint Error = 0;\n\n\tT const B = static_cast<T>(1);\n\tT const N = static_cast<T>(GLM_NAN(T));\n\tError += glm::isnan(glm::min(N, B)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(B, N)) ? 0 : 1;\n\n\tT const C = static_cast<T>(2);\n\tError += glm::isnan(glm::min(N, B, C)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(B, N, C)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(C, N, B)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(C, B, N)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(B, C, N)) ? 0 : 1;\n\tError += glm::isnan(glm::min(N, C, B)) ? 0 : 1;\n\n\tT const D = static_cast<T>(3);\n\tError += !glm::isnan(glm::min(D, N, B, C)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(B, D, N, C)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(C, N, D, B)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(C, B, D, N)) ? 0 : 1;\n\tError += !glm::isnan(glm::min(B, C, N, D)) ? 0 : 1;\n\tError += glm::isnan(glm::min(N, C, B, D)) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename T>\nstatic int test_max()\n{\n\tint Error = 0;\n\n\tT const N = static_cast<T>(0);\n\tT const B = static_cast<T>(1);\n\tError += glm::equal(glm::max(N, B), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(B, N), B, glm::epsilon<T>()) ? 0 : 1;\n\n\tT const C = static_cast<T>(2);\n\tError += glm::equal(glm::max(N, B, C), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(B, N, C), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(C, N, B), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(C, B, N), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(B, C, N), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(N, C, B), C, glm::epsilon<T>()) ? 0 : 1;\n\n\tT const D = static_cast<T>(3);\n\tError += glm::equal(glm::max(D, N, B, C), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(B, D, N, C), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(C, N, D, B), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(C, B, D, N), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(B, C, N, D), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::max(N, C, B, D), D, glm::epsilon<T>()) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename T>\nstatic int test_max_nan()\n{\n\tint Error = 0;\n\n\tT const B = static_cast<T>(1);\n\tT const N = static_cast<T>(GLM_NAN(T));\n\tError += glm::isnan(glm::max(N, B)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(B, N)) ? 0 : 1;\n\n\tT const C = static_cast<T>(2);\n\tError += glm::isnan(glm::max(N, B, C)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(B, N, C)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(C, N, B)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(C, B, N)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(B, C, N)) ? 0 : 1;\n\tError += glm::isnan(glm::max(N, C, B)) ? 0 : 1;\n\n\tT const D = static_cast<T>(3);\n\tError += !glm::isnan(glm::max(D, N, B, C)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(B, D, N, C)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(C, N, D, B)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(C, B, D, N)) ? 0 : 1;\n\tError += !glm::isnan(glm::max(B, C, N, D)) ? 0 : 1;\n\tError += glm::isnan(glm::max(N, C, B, D)) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename T>\nstatic int test_fmin()\n{\n\tint Error = 0;\n\n\tT const B = static_cast<T>(1);\n\tT const N = static_cast<T>(GLM_NAN(T));\n\tError += glm::equal(glm::fmin(N, B), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(B, N), B, glm::epsilon<T>()) ? 0 : 1;\n\n\tT const C = static_cast<T>(2);\n\tError += glm::equal(glm::fmin(N, B, C), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(B, N, C), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(C, N, B), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(C, B, N), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(B, C, N), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(N, C, B), B, glm::epsilon<T>()) ? 0 : 1;\n\n\tT const D = static_cast<T>(3);\n\tError += glm::equal(glm::fmin(D, N, B, C), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(B, D, N, C), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(C, N, D, B), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(C, B, D, N), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(B, C, N, D), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmin(N, C, B, D), B, glm::epsilon<T>()) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename T>\nstatic int test_fmax()\n{\n\tint Error = 0;\n\n\tT const B = static_cast<T>(1);\n\tT const N = static_cast<T>(GLM_NAN(T));\n\tError += glm::equal(glm::fmax(N, B), B, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(B, N), B, glm::epsilon<T>()) ? 0 : 1;\n\n\tT const C = static_cast<T>(2);\n\tError += glm::equal(glm::fmax(N, B, C), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(B, N, C), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(C, N, B), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(C, B, N), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(B, C, N), C, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(N, C, B), C, glm::epsilon<T>()) ? 0 : 1;\n\n\tT const D = static_cast<T>(3);\n\tError += glm::equal(glm::fmax(D, N, B, C), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(B, D, N, C), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(C, N, D, B), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(C, B, D, N), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(B, C, N, D), D, glm::epsilon<T>()) ? 0 : 1;\n\tError += glm::equal(glm::fmax(N, C, B, D), D, glm::epsilon<T>()) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_clamp()\n{\n\tint Error = 0;\n\n\tfloat A = glm::clamp(0.5f);\n\tError += glm::equal(A, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat B = glm::clamp(0.0f);\n\tError += glm::equal(B, 0.0f, 0.00001f) ? 0 : 1;\n\n\tfloat C = glm::clamp(1.0f);\n\tError += glm::equal(C, 1.0f, 0.00001f) ? 0 : 1;\n\n\tfloat D = glm::clamp(-0.5f);\n\tError += glm::equal(D, 0.0f, 0.00001f) ? 0 : 1;\n\n\tfloat E = glm::clamp(1.5f);\n\tError += glm::equal(E, 1.0f, 0.00001f) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_repeat()\n{\n\tint Error = 0;\n\n\tfloat A = glm::repeat(0.5f);\n\tError += glm::equal(A, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat B = glm::repeat(0.0f);\n\tError += glm::equal(B, 0.0f, 0.00001f) ? 0 : 1;\n\n\tfloat C = glm::repeat(1.0f);\n\tError += glm::equal(C, 0.0f, 0.00001f) ? 0 : 1;\n\n\tfloat D = glm::repeat(-0.5f);\n\tError += glm::equal(D, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat E = glm::repeat(1.5f);\n\tError += glm::equal(E, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat F = glm::repeat(0.9f);\n\tError += glm::equal(F, 0.9f, 0.00001f) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_mirrorClamp()\n{\n\tint Error = 0;\n\n\tfloat A = glm::mirrorClamp(0.5f);\n\tError += glm::equal(A, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat B = glm::mirrorClamp(0.0f);\n\tError += glm::equal(B, 0.0f, 0.00001f) ? 0 : 1;\n\n\tfloat C = glm::mirrorClamp(1.1f);\n\tError += glm::equal(C, 0.1f, 0.00001f) ? 0 : 1;\n\n\tfloat D = glm::mirrorClamp(-0.5f);\n\tError += glm::equal(D, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat E = glm::mirrorClamp(1.5f);\n\tError += glm::equal(E, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat F = glm::mirrorClamp(0.9f);\n\tError += glm::equal(F, 0.9f, 0.00001f) ? 0 : 1;\n\n\tfloat G = glm::mirrorClamp(3.1f);\n\tError += glm::equal(G, 0.1f, 0.00001f) ? 0 : 1;\n\n\tfloat H = glm::mirrorClamp(-3.1f);\n\tError += glm::equal(H, 0.1f, 0.00001f) ? 0 : 1;\n\n\tfloat I = glm::mirrorClamp(-0.9f);\n\tError += glm::equal(I, 0.9f, 0.00001f) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_mirrorRepeat()\n{\n\tint Error = 0;\n\n\tfloat A = glm::mirrorRepeat(0.5f);\n\tError += glm::equal(A, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat B = glm::mirrorRepeat(0.0f);\n\tError += glm::equal(B, 0.0f, 0.00001f) ? 0 : 1;\n\n\tfloat C = glm::mirrorRepeat(1.0f);\n\tError += glm::equal(C, 1.0f, 0.00001f) ? 0 : 1;\n\n\tfloat D = glm::mirrorRepeat(-0.5f);\n\tError += glm::equal(D, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat E = glm::mirrorRepeat(1.5f);\n\tError += glm::equal(E, 0.5f, 0.00001f) ? 0 : 1;\n\n\tfloat F = glm::mirrorRepeat(0.9f);\n\tError += glm::equal(F, 0.9f, 0.00001f) ? 0 : 1;\n\n\tfloat G = glm::mirrorRepeat(3.0f);\n\tError += glm::equal(G, 1.0f, 0.00001f) ? 0 : 1;\n\n\tfloat H = glm::mirrorRepeat(-3.0f);\n\tError += glm::equal(H, 1.0f, 0.00001f) ? 0 : 1;\n\n\tfloat I = glm::mirrorRepeat(-1.0f);\n\tError += glm::equal(I, 1.0f, 0.00001f) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_iround()\n{\n\tint Error = 0;\n\n\tfor(float f = 0.0f; f < 3.1f; f += 0.05f)\n\t{\n\t\tint RoundFast = static_cast<int>(glm::iround(f));\n\t\tint RoundSTD = static_cast<int>(glm::round(f));\n\t\tError += RoundFast == RoundSTD ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nstatic int test_uround()\n{\n\tint Error = 0;\n\n\tfor(float f = 0.0f; f < 3.1f; f += 0.05f)\n\t{\n\t\tint RoundFast = static_cast<int>(glm::uround(f));\n\t\tint RoundSTD = static_cast<int>(glm::round(f));\n\t\tError += RoundFast == RoundSTD ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_min<float>();\n\tError += test_min<double>();\n\tError += test_min_nan<float>();\n\tError += test_min_nan<double>();\n\n\tError += test_max<float>();\n\tError += test_max<double>();\n\tError += test_max_nan<float>();\n\tError += test_max_nan<double>();\n\n\tError += test_fmin<float>();\n\tError += test_fmin<double>();\n\n\tError += test_fmax<float>();\n\tError += test_fmax<double>();\n\n\tError += test_clamp();\n\tError += test_repeat();\n\tError += test_mirrorClamp();\n\tError += test_mirrorRepeat();\n\n\tError += test_iround();\n\tError += test_uround();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_scalar_constants.cpp",
    "content": "#include <glm/ext/scalar_constants.hpp>\n\ntemplate <typename valType>\nstatic int test_epsilon()\n{\n\tint Error = 0;\n\n\tvalType const Test = glm::epsilon<valType>();\n\tError += Test > static_cast<valType>(0) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename valType>\nstatic int test_pi()\n{\n\tint Error = 0;\n\n\tvalType const Test = glm::pi<valType>();\n\tError += Test > static_cast<valType>(3.14) ? 0 : 1;\n\tError += Test < static_cast<valType>(3.15) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_epsilon<float>();\n\tError += test_epsilon<double>();\n\tError += test_pi<float>();\n\tError += test_pi<double>();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_scalar_int_sized.cpp",
    "content": "#include <glm/ext/scalar_int_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\n\tstatic_assert(sizeof(glm::int8) == 1, \"int8 size isn't 1 byte on this platform\");\n\tstatic_assert(sizeof(glm::int16) == 2, \"int16 size isn't 2 bytes on this platform\");\n\tstatic_assert(sizeof(glm::int32) == 4, \"int32 size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::int64) == 8, \"int64 size isn't 8 bytes on this platform\");\n\tstatic_assert(sizeof(glm::int16) == sizeof(short), \"signed short size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::int32) == sizeof(int), \"signed int size isn't 4 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::int8) == 1 ? 0 : 1;\n\tError += sizeof(glm::int16) == 2 ? 0 : 1;\n\tError += sizeof(glm::int32) == 4 ? 0 : 1;\n\tError += sizeof(glm::int64) == 8 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::int8) < sizeof(glm::int16) ? 0 : 1;\n\tError += sizeof(glm::int16) < sizeof(glm::int32) ? 0 : 1;\n\tError += sizeof(glm::int32) < sizeof(glm::int64) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_scalar_integer.cpp",
    "content": "#include <glm/ext/scalar_integer.hpp>\n#include <glm/ext/scalar_int_sized.hpp>\n#include <glm/ext/scalar_uint_sized.hpp>\n#include <vector>\n#include <ctime>\n#include <cstdio>\n\n#if GLM_LANG & GLM_LANG_CXX11_FLAG\n#include <chrono>\n\nnamespace isPowerOfTwo\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tbool\t\tReturn;\n\t};\n\n\tint test_int16()\n\t{\n\t\ttype<glm::int16> const Data[] =\n\t\t{\n\t\t\t{0x0001, true},\n\t\t\t{0x0002, true},\n\t\t\t{0x0004, true},\n\t\t\t{0x0080, true},\n\t\t\t{0x0000, true},\n\t\t\t{0x0003, false}\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::int16>); i < n; ++i)\n\t\t{\n\t\t\tbool Result = glm::isPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_uint16()\n\t{\n\t\ttype<glm::uint16> const Data[] =\n\t\t{\n\t\t\t{0x0001, true},\n\t\t\t{0x0002, true},\n\t\t\t{0x0004, true},\n\t\t\t{0x0000, true},\n\t\t\t{0x0000, true},\n\t\t\t{0x0003, false}\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint16>); i < n; ++i)\n\t\t{\n\t\t\tbool Result = glm::isPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_int32()\n\t{\n\t\ttype<int> const Data[] =\n\t\t{\n\t\t\t{0x00000001, true},\n\t\t\t{0x00000002, true},\n\t\t\t{0x00000004, true},\n\t\t\t{0x0000000f, false},\n\t\t\t{0x00000000, true},\n\t\t\t{0x00000003, false}\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tbool Result = glm::isPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_uint32()\n\t{\n\t\ttype<glm::uint> const Data[] =\n\t\t{\n\t\t\t{0x00000001, true},\n\t\t\t{0x00000002, true},\n\t\t\t{0x00000004, true},\n\t\t\t{0x80000000, true},\n\t\t\t{0x00000000, true},\n\t\t\t{0x00000003, false}\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint>); i < n; ++i)\n\t\t{\n\t\t\tbool Result = glm::isPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += test_int16();\n\t\tError += test_uint16();\n\t\tError += test_int32();\n\t\tError += test_uint32();\n\n\t\treturn Error;\n\t}\n}//isPowerOfTwo\n\nnamespace nextPowerOfTwo_advanced\n{\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType highestBitValue(genIUType Value)\n\t{\n\t\tgenIUType tmp = Value;\n\t\tgenIUType result = genIUType(0);\n\t\twhile(tmp)\n\t\t{\n\t\t\tresult = (tmp & (~tmp + 1)); // grab lowest bit\n\t\t\ttmp &= ~result; // clear lowest bit\n\t\t}\n\t\treturn result;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType nextPowerOfTwo_loop(genType value)\n\t{\n\t\treturn glm::isPowerOfTwo(value) ? value : highestBitValue(value) << 1;\n\t}\n\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tgenType\t\tReturn;\n\t};\n\n\tint test_int32()\n\t{\n\t\ttype<glm::int32> const Data[] =\n\t\t{\n\t\t\t{0x0000ffff, 0x00010000},\n\t\t\t{-3, -4},\n\t\t\t{-8, -8},\n\t\t\t{0x00000001, 0x00000001},\n\t\t\t{0x00000002, 0x00000002},\n\t\t\t{0x00000004, 0x00000004},\n\t\t\t{0x00000007, 0x00000008},\n\t\t\t{0x0000fff0, 0x00010000},\n\t\t\t{0x0000f000, 0x00010000},\n\t\t\t{0x08000000, 0x08000000},\n\t\t\t{0x00000000, 0x00000000},\n\t\t\t{0x00000003, 0x00000004}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::int32>); i < n; ++i)\n\t\t{\n\t\t\tglm::int32 Result = glm::nextPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_uint32()\n\t{\n\t\ttype<glm::uint32> const Data[] =\n\t\t{\n\t\t\t{0x00000001, 0x00000001},\n\t\t\t{0x00000002, 0x00000002},\n\t\t\t{0x00000004, 0x00000004},\n\t\t\t{0x00000007, 0x00000008},\n\t\t\t{0x0000ffff, 0x00010000},\n\t\t\t{0x0000fff0, 0x00010000},\n\t\t\t{0x0000f000, 0x00010000},\n\t\t\t{0x80000000, 0x80000000},\n\t\t\t{0x00000000, 0x00000000},\n\t\t\t{0x00000003, 0x00000004}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint32>); i < n; ++i)\n\t\t{\n\t\t\tglm::uint32 Result = glm::nextPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint perf()\n\t{\n\t\tint Error(0);\n\n\t\tstd::vector<glm::uint> v;\n\t\tv.resize(100000000);\n\n\t\tstd::clock_t Timestramp0 = std::clock();\n\n\t\tfor(glm::uint32 i = 0, n = static_cast<glm::uint>(v.size()); i < n; ++i)\n\t\t\tv[i] = nextPowerOfTwo_loop(i);\n\n\t\tstd::clock_t Timestramp1 = std::clock();\n\n\t\tfor(glm::uint32 i = 0, n = static_cast<glm::uint>(v.size()); i < n; ++i)\n\t\t\tv[i] = glm::nextPowerOfTwo(i);\n\n\t\tstd::clock_t Timestramp2 = std::clock();\n\n\t\tstd::printf(\"nextPowerOfTwo_loop: %d clocks\\n\", static_cast<int>(Timestramp1 - Timestramp0));\n\t\tstd::printf(\"glm::nextPowerOfTwo: %d clocks\\n\", static_cast<int>(Timestramp2 - Timestramp1));\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tError += test_int32();\n\t\tError += test_uint32();\n\n\t\treturn Error;\n\t}\n}//namespace nextPowerOfTwo_advanced\n\nnamespace prevPowerOfTwo\n{\n\ttemplate <typename T>\n\tint run()\n\t{\n\t\tint Error = 0;\n\n\t\tT const A = glm::prevPowerOfTwo(static_cast<T>(7));\n\t\tError += A == static_cast<T>(4) ? 0 : 1;\n\n\t\tT const B = glm::prevPowerOfTwo(static_cast<T>(15));\n\t\tError += B == static_cast<T>(8) ? 0 : 1;\n\n\t\tT const C = glm::prevPowerOfTwo(static_cast<T>(31));\n\t\tError += C == static_cast<T>(16) ? 0 : 1;\n\n\t\tT const D = glm::prevPowerOfTwo(static_cast<T>(32));\n\t\tError += D == static_cast<T>(32) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<glm::int8>();\n\t\tError += run<glm::int16>();\n\t\tError += run<glm::int32>();\n\t\tError += run<glm::int64>();\n\n\t\tError += run<glm::uint8>();\n\t\tError += run<glm::uint16>();\n\t\tError += run<glm::uint32>();\n\t\tError += run<glm::uint64>();\n\n\t\treturn Error;\n\t}\n}//namespace prevPowerOfTwo\n\nnamespace nextPowerOfTwo\n{\n\ttemplate <typename T>\n\tint run()\n\t{\n\t\tint Error = 0;\n\n\t\tT const A = glm::nextPowerOfTwo(static_cast<T>(7));\n\t\tError += A == static_cast<T>(8) ? 0 : 1;\n\n\t\tT const B = glm::nextPowerOfTwo(static_cast<T>(15));\n\t\tError += B == static_cast<T>(16) ? 0 : 1;\n\n\t\tT const C = glm::nextPowerOfTwo(static_cast<T>(31));\n\t\tError += C == static_cast<T>(32) ? 0 : 1;\n\n\t\tT const D = glm::nextPowerOfTwo(static_cast<T>(32));\n\t\tError += D == static_cast<T>(32) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<glm::int8>();\n\t\tError += run<glm::int16>();\n\t\tError += run<glm::int32>();\n\t\tError += run<glm::int64>();\n\n\t\tError += run<glm::uint8>();\n\t\tError += run<glm::uint16>();\n\t\tError += run<glm::uint32>();\n\t\tError += run<glm::uint64>();\n\n\t\treturn Error;\n\t}\n}//namespace nextPowerOfTwo\n\nnamespace prevMultiple\n{\n\ttemplate<typename genIUType>\n\tstruct type\n\t{\n\t\tgenIUType Source;\n\t\tgenIUType Multiple;\n\t\tgenIUType Return;\n\t};\n\n\ttemplate <typename T>\n\tint run()\n\t{\n\t\ttype<T> const Data[] =\n\t\t{\n\t\t\t{8, 3, 6},\n\t\t\t{7, 7, 7}\n\t\t};\n\n\t\tint Error = 0;\n\t\t\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<T>); i < n; ++i)\n\t\t{\n\t\t\tT const Result = glm::prevMultiple(Data[i].Source, Data[i].Multiple);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<glm::int8>();\n\t\tError += run<glm::int16>();\n\t\tError += run<glm::int32>();\n\t\tError += run<glm::int64>();\n\n\t\tError += run<glm::uint8>();\n\t\tError += run<glm::uint16>();\n\t\tError += run<glm::uint32>();\n\t\tError += run<glm::uint64>();\n\n\t\treturn Error;\n\t}\n}//namespace prevMultiple\n\nnamespace nextMultiple\n{\n\tstatic glm::uint const Multiples = 128;\n\n\tint perf_nextMultiple(glm::uint Samples)\n\t{\n\t\tstd::vector<glm::uint> Results(Samples * Multiples);\n\n\t\tstd::chrono::high_resolution_clock::time_point t0 = std::chrono::high_resolution_clock::now();\n\n\t\tfor(glm::uint Source = 0; Source < Samples; ++Source)\n\t\tfor(glm::uint Multiple = 0; Multiple < Multiples; ++Multiple)\n\t\t{\n\t\t\tResults[Source * Multiples + Multiple] = glm::nextMultiple(Source, Multiples);\n\t\t}\n\n\t\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\n\t\tstd::printf(\"- glm::nextMultiple Time %d microseconds\\n\", static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t1 - t0).count()));\n\n\t\tglm::uint Result = 0;\n\t\tfor(std::size_t i = 0, n = Results.size(); i < n; ++i)\n\t\t\tResult += Results[i];\n\n\t\treturn Result > 0 ? 0 : 1;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER T nextMultipleMod(T Source, T Multiple)\n\t{\n\t\tT const Tmp = Source - static_cast<T>(1);\n\t\treturn Tmp + (Multiple - (Tmp % Multiple));\n\t}\n\n\tint perf_nextMultipleMod(glm::uint Samples)\n\t{\n\t\tstd::vector<glm::uint> Results(Samples * Multiples);\n\n\t\tstd::chrono::high_resolution_clock::time_point t0 = std::chrono::high_resolution_clock::now();\n\n\t\tfor(glm::uint Multiple = 0; Multiple < Multiples; ++Multiple)\n\t\t\tfor (glm::uint Source = 0; Source < Samples; ++Source)\n\t\t{\n\t\t\tResults[Source * Multiples + Multiple] = nextMultipleMod(Source, Multiples);\n\t\t}\n\n\t\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\n\t\tstd::printf(\"- nextMultipleMod Time %d microseconds\\n\", static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t1 - t0).count()));\n\n\t\tglm::uint Result = 0;\n\t\tfor(std::size_t i = 0, n = Results.size(); i < n; ++i)\n\t\t\tResult += Results[i];\n\n\t\treturn Result > 0 ? 0 : 1;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER T nextMultipleNeg(T Source, T Multiple)\n\t{\n\t\tif(Source > static_cast<T>(0))\n\t\t{\n\t\t\tT const Tmp = Source - static_cast<T>(1);\n\t\t\treturn Tmp + (Multiple - (Tmp % Multiple));\n\t\t}\n\t\telse\n\t\t\treturn Source + (-Source % Multiple);\n\t}\n\n\tint perf_nextMultipleNeg(glm::uint Samples)\n\t{\n\t\tstd::vector<glm::uint> Results(Samples * Multiples);\n\n\t\tstd::chrono::high_resolution_clock::time_point t0 = std::chrono::high_resolution_clock::now();\n\n\t\tfor(glm::uint Source = 0; Source < Samples; ++Source)\n\t\tfor(glm::uint Multiple = 0; Multiple < Multiples; ++Multiple)\n\t\t{\n\t\t\tResults[Source * Multiples + Multiple] = nextMultipleNeg(Source, Multiples);\n\t\t}\n\n\t\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\n\t\tstd::printf(\"- nextMultipleNeg Time %d microseconds\\n\", static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t1 - t0).count()));\n\n\t\tglm::uint Result = 0;\n\t\tfor (std::size_t i = 0, n = Results.size(); i < n; ++i)\n\t\t\tResult += Results[i];\n\n\t\treturn Result > 0 ? 0 : 1;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER T nextMultipleUFloat(T Source, T Multiple)\n\t{\n\t\treturn Source + (Multiple - std::fmod(Source, Multiple));\n\t}\n\n\tint perf_nextMultipleUFloat(glm::uint Samples)\n\t{\n\t\tstd::vector<float> Results(Samples * Multiples);\n\n\t\tstd::chrono::high_resolution_clock::time_point t0 = std::chrono::high_resolution_clock::now();\n\n\t\tfor(glm::uint Source = 0; Source < Samples; ++Source)\n\t\tfor(glm::uint Multiple = 0; Multiple < Multiples; ++Multiple)\n\t\t{\n\t\t\tResults[Source * Multiples + Multiple] = nextMultipleUFloat(static_cast<float>(Source), static_cast<float>(Multiples));\n\t\t}\n\n\t\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\n\t\tstd::printf(\"- nextMultipleUFloat Time %d microseconds\\n\", static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t1 - t0).count()));\n\n\t\tfloat Result = 0;\n\t\tfor (std::size_t i = 0, n = Results.size(); i < n; ++i)\n\t\t\tResult += Results[i];\n\n\t\treturn Result > 0.0f ? 0 : 1;\n\t}\n\n\ttemplate <typename T>\n\tGLM_FUNC_QUALIFIER T nextMultipleFloat(T Source, T Multiple)\n\t{\n\t\tif(Source > static_cast<float>(0))\n\t\t\treturn Source + (Multiple - std::fmod(Source, Multiple));\n\t\telse\n\t\t\treturn Source + std::fmod(-Source, Multiple);\n\t}\n\n\tint perf_nextMultipleFloat(glm::uint Samples)\n\t{\n\t\tstd::vector<float> Results(Samples * Multiples);\n\n\t\tstd::chrono::high_resolution_clock::time_point t0 = std::chrono::high_resolution_clock::now();\n\n\t\tfor(glm::uint Source = 0; Source < Samples; ++Source)\n\t\tfor(glm::uint Multiple = 0; Multiple < Multiples; ++Multiple)\n\t\t{\n\t\t\tResults[Source * Multiples + Multiple] = nextMultipleFloat(static_cast<float>(Source), static_cast<float>(Multiples));\n\t\t}\n\n\t\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\n\t\tstd::printf(\"- nextMultipleFloat Time %d microseconds\\n\", static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t1 - t0).count()));\n\n\t\tfloat Result = 0;\n\t\tfor (std::size_t i = 0, n = Results.size(); i < n; ++i)\n\t\t\tResult += Results[i];\n\n\t\treturn Result > 0.0f ? 0 : 1;\n\t}\n\n\ttemplate<typename genIUType>\n\tstruct type\n\t{\n\t\tgenIUType Source;\n\t\tgenIUType Multiple;\n\t\tgenIUType Return;\n\t};\n\n\ttemplate <typename T>\n\tint test_uint()\n\t{\n\t\ttype<T> const Data[] =\n\t\t{\n\t\t\t{ 3, 4, 4 },\n\t\t\t{ 6, 3, 6 },\n\t\t\t{ 5, 3, 6 },\n\t\t\t{ 7, 7, 7 },\n\t\t\t{ 0, 1, 0 },\n\t\t\t{ 8, 3, 9 }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<T>); i < n; ++i)\n\t\t{\n\t\t\tT const Result0 = glm::nextMultiple(Data[i].Source, Data[i].Multiple);\n\t\t\tError += Data[i].Return == Result0 ? 0 : 1;\n\t\t\tassert(!Error);\n\n\t\t\tT const Result1 = nextMultipleMod(Data[i].Source, Data[i].Multiple);\n\t\t\tError += Data[i].Return == Result1 ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint perf()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::uint const Samples = 10000;\n\n\t\tfor(int i = 0; i < 4; ++i)\n\t\t{\n\t\t\tstd::printf(\"Run %d :\\n\", i);\n\t\t\tError += perf_nextMultiple(Samples);\n\t\t\tError += perf_nextMultipleMod(Samples);\n\t\t\tError += perf_nextMultipleNeg(Samples);\n\t\t\tError += perf_nextMultipleUFloat(Samples);\n\t\t\tError += perf_nextMultipleFloat(Samples);\n\t\t\tstd::printf(\"\\n\");\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += test_uint<glm::int8>();\n\t\tError += test_uint<glm::int16>();\n\t\tError += test_uint<glm::int32>();\n\t\tError += test_uint<glm::int64>();\n\n\t\tError += test_uint<glm::uint8>();\n\t\tError += test_uint<glm::uint16>();\n\t\tError += test_uint<glm::uint32>();\n\t\tError += test_uint<glm::uint64>();\n\n\t\treturn Error;\n\t}\n}//namespace nextMultiple\n\nnamespace findNSB\n{\n\ttemplate<typename T>\n\tstruct type\n\t{\n\t\tT Source;\n\t\tint SignificantBitCount;\n\t\tint Return;\n\t};\n\n\ttemplate <typename T>\n\tint run()\n\t{\n\t\ttype<T> const Data[] =\n\t\t{\n\t\t\t{ 0x00, 1,-1 },\n\t\t\t{ 0x01, 2,-1 },\n\t\t\t{ 0x02, 2,-1 },\n\t\t\t{ 0x06, 3,-1 },\n\t\t\t{ 0x01, 1, 0 },\n\t\t\t{ 0x03, 1, 0 },\n\t\t\t{ 0x03, 2, 1 },\n\t\t\t{ 0x07, 2, 1 },\n\t\t\t{ 0x05, 2, 2 },\n\t\t\t{ 0x0D, 2, 2 }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor (std::size_t i = 0, n = sizeof(Data) / sizeof(type<T>); i < n; ++i)\n\t\t{\n\t\t\tint const Result0 = glm::findNSB(Data[i].Source, Data[i].SignificantBitCount);\n\t\t\tError += Data[i].Return == Result0 ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<glm::uint8>();\n\t\tError += run<glm::uint16>();\n\t\tError += run<glm::uint32>();\n\t\tError += run<glm::uint64>();\n\n\t\tError += run<glm::int8>();\n\t\tError += run<glm::int16>();\n\t\tError += run<glm::int32>();\n\t\tError += run<glm::int64>();\n\n\t\treturn Error;\n\t}\n}//namespace findNSB\n\nint main()\n{\n\tint Error = 0;\n\n\tError += findNSB::test();\n\n\tError += isPowerOfTwo::test();\n\tError += prevPowerOfTwo::test();\n\tError += nextPowerOfTwo::test();\n\tError += nextPowerOfTwo_advanced::test();\n\tError += prevMultiple::test();\n\tError += nextMultiple::test();\n\n#\tifdef NDEBUG\n\t\tError += nextPowerOfTwo_advanced::perf();\n\t\tError += nextMultiple::perf();\n#\tendif//NDEBUG\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_scalar_packing.cpp",
    "content": "#include <glm/ext/scalar_packing.hpp>\n#include <glm/ext/scalar_relational.hpp>\n\nint test_packUnorm()\n{\n\tint Error = 0;\n\n\n\treturn Error;\n}\n\nint test_packSnorm()\n{\n\tint Error = 0;\n\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_packUnorm();\n\tError += test_packSnorm();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_scalar_reciprocal.cpp",
    "content": "#include <glm/ext/scalar_reciprocal.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/scalar_constants.hpp>\n\nstatic int test_sec()\n{\n\tint Error = 0;\n\t\n\tError += glm::equal(glm::sec(0.0), 1.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::sec(glm::pi<double>() * 2.0), 1.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::sec(glm::pi<double>() * -2.0), 1.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::sec(glm::pi<double>() * 1.0), -1.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::sec(glm::pi<double>() * -1.0), -1.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_csc()\n{\n\tint Error = 0;\n\t\n\tdouble const a = glm::csc(glm::pi<double>() * 0.5);\n\tError += glm::equal(a, 1.0, 0.01) ? 0 : 1;\n\tdouble const b = glm::csc(glm::pi<double>() * -0.5);\n\tError += glm::equal(b, -1.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_cot()\n{\n\tint Error = 0;\n\t\n\tdouble const a = glm::cot(glm::pi<double>() * 0.5);\n\tError += glm::equal(a, 0.0, 0.01) ? 0 : 1;\n\tdouble const b = glm::cot(glm::pi<double>() * -0.5);\n\tError += glm::equal(b, 0.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_asec()\n{\n\tint Error = 0;\n\t\n\tError += glm::equal(glm::asec(100000.0), glm::pi<double>() * 0.5, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::asec(-100000.0), glm::pi<double>() * 0.5, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_acsc()\n{\n\tint Error = 0;\n\t\n\tError += glm::equal(glm::acsc(100000.0), 0.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::acsc(-100000.0), 0.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_acot()\n{\n\tint Error = 0;\n\t\n\tError += glm::equal(glm::acot(100000.0), 0.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::acot(-100000.0), glm::pi<double>(), 0.01) ? 0 : 1;\n\tError += glm::equal(glm::acot(0.0), glm::pi<double>() * 0.5, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_sech()\n{\n\tint Error = 0;\n\t\n\tError += glm::equal(glm::sech(100000.0), 0.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::sech(-100000.0), 0.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::sech(0.0), 1.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_csch()\n{\n\tint Error = 0;\n\t\n\tError += glm::equal(glm::csch(100000.0), 0.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::csch(-100000.0), 0.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_coth()\n{\n\tint Error = 0;\n\t\n\tdouble const a = glm::coth(100.0);\n\tError += glm::equal(a, 1.0, 0.01) ? 0 : 1;\n\t\n\tdouble const b = glm::coth(-100.0);\n\tError += glm::equal(b, -1.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_asech()\n{\n\tint Error = 0;\n\t\n\tdouble const a = glm::asech(1.0);\n\tError += glm::equal(a, 0.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_acsch()\n{\n\tint Error = 0;\n\t\n\tError += glm::acsch(0.01) > 1.0 ? 0 : 1;\n\tError += glm::acsch(-0.01) < -1.0 ? 0 : 1;\n\n\tError += glm::equal(glm::acsch(100.0), 0.0, 0.01) ? 0 : 1;\n\tError += glm::equal(glm::acsch(-100.0), 0.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_acoth()\n{\n\tint Error = 0;\n\t\n\tdouble const a = glm::acoth(1.00001);\n\tError += a > 6.0 ? 0 : 1;\n\t\n\tdouble const b = glm::acoth(-1.00001);\n\tError += b < -6.0 ? 0 : 1;\n\n\tdouble const c = glm::acoth(10000.0);\n\tError += glm::equal(c, 0.0, 0.01) ? 0 : 1;\n\t\n\tdouble const d = glm::acoth(-10000.0);\n\tError += glm::equal(d, 0.0, 0.01) ? 0 : 1;\n\n\treturn Error;\n}\n\n\nint main()\n{\n\tint Error = 0;\n\t\n\tError += test_sec();\n\tError += test_csc();\n\tError += test_cot();\n\n\tError += test_asec();\n\tError += test_acsc();\n\tError += test_acot();\n\n\tError += test_sech();\n\tError += test_csch();\n\tError += test_coth();\n\n\tError += test_asech();\n\tError += test_acsch();\n\tError += test_acoth();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_scalar_relational.cpp",
    "content": "#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/scalar_integer.hpp>\n#include <glm/ext/scalar_ulp.hpp>\n#include <cmath>\n\nstatic int test_equal_epsilon()\n{\n#\tif GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\t\tstatic_assert(glm::equal(1.01f, 1.02f, 0.1f), \"GLM: Failed constexpr\");\n\t\tstatic_assert(!glm::equal(1.01f, 1.02f, 0.001f), \"GLM: Failed constexpr\");\n#\tendif\n\t\n\tint Error = 0;\n\n\tError += glm::equal(1.01f, 1.02f, 0.1f) ? 0 : 1;\n\tError += !glm::equal(1.01f, 1.02f, 0.001f) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_notEqual_epsilon()\n{\n#\tif GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\t\tstatic_assert(glm::notEqual(1.01f, 1.02f, 0.001f), \"GLM: Failed constexpr\");\n\t\tstatic_assert(!glm::notEqual(1.01f, 1.02f, 0.1f), \"GLM: Failed constexpr\");\n#\tendif\n\t\n\tint Error = 0;\n\n\tError += glm::notEqual(1.01f, 1.02f, 0.001f) ? 0 : 1;\n\tError += !glm::notEqual(1.01f, 1.02f, 0.1f) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_equal_ulps()\n{\n\tint Error = 0;\n\t\n\tfloat const ULP1Plus = glm::nextFloat(1.0f);\n\tError += glm::equal(1.0f, ULP1Plus, 1) ? 0 : 1;\n\n\tfloat const ULP2Plus = glm::nextFloat(ULP1Plus);\n\tError += !glm::equal(1.0f, ULP2Plus, 1) ? 0 : 1;\n\t\n\tfloat const ULP1Minus = glm::prevFloat(1.0f);\n\tError += glm::equal(1.0f, ULP1Minus, 1) ? 0 : 1;\n\n\tfloat const ULP2Minus = glm::prevFloat(ULP1Minus);\n\tError += !glm::equal(1.0f, ULP2Minus, 1) ? 0 : 1;\n\t\n\treturn Error;\n}\n\nstatic int test_notEqual_ulps()\n{\n\tint Error = 0;\n\t\n\tfloat const ULP1Plus = glm::nextFloat(1.0f);\n\tError += !glm::notEqual(1.0f, ULP1Plus, 1) ? 0 : 1;\n\t\n\tfloat const ULP2Plus = glm::nextFloat(ULP1Plus);\n\tError += glm::notEqual(1.0f, ULP2Plus, 1) ? 0 : 1;\n\t\n\tfloat const ULP1Minus = glm::prevFloat(1.0f);\n\tError += !glm::notEqual(1.0f, ULP1Minus, 1) ? 0 : 1;\n\t\n\tfloat const ULP2Minus = glm::prevFloat(ULP1Minus);\n\tError += glm::notEqual(1.0f, ULP2Minus, 1) ? 0 : 1;\n\t\n\treturn Error;\n}\n\nstatic int test_equal_sign()\n{\n\tint Error = 0;\n\n\tError += !glm::equal(-0.0f, 0.0f, 2) ? 0 : 1;\n\tError += !glm::equal(-0.0, 0.0, 2) ? 0 : 1;\n\n\tError += !glm::equal(-1.0f, 2.0f, 2) ? 0 : 1;\n\tError += !glm::equal(-1.0, 2.0, 2) ? 0 : 1;\n\n\tError += !glm::equal(-0.00001f, 1.00000f, 2) ? 0 : 1;\n\tError += !glm::equal(-0.00001, 1.00000, 2) ? 0 : 1;\n\n\tError += !glm::equal(-1.0f, 1.0f, 2) ? 0 : 1;\n\tError += !glm::equal(-1.0, 1.0, 2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_equal_epsilon();\n\tError += test_notEqual_epsilon();\n\n\tError += test_equal_ulps();\n\tError += test_notEqual_ulps();\n\n\tError += test_equal_sign();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_scalar_uint_sized.cpp",
    "content": "#include <glm/ext/scalar_uint_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\n\tstatic_assert(sizeof(glm::uint8) == 1, \"uint8 size isn't 1 byte on this platform\");\n\tstatic_assert(sizeof(glm::uint16) == 2, \"uint16 size isn't 2 bytes on this platform\");\n\tstatic_assert(sizeof(glm::uint32) == 4, \"uint32 size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::uint64) == 8, \"uint64 size isn't 8 bytes on this platform\");\n\tstatic_assert(sizeof(glm::uint16) == sizeof(unsigned short), \"unsigned short size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::uint32) == sizeof(unsigned int), \"unsigned int size isn't 4 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::uint8) == 1 ? 0 : 1;\n\tError += sizeof(glm::uint16) == 2 ? 0 : 1;\n\tError += sizeof(glm::uint32) == 4 ? 0 : 1;\n\tError += sizeof(glm::uint64) == 8 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::uint8) < sizeof(glm::uint16) ? 0 : 1;\n\tError += sizeof(glm::uint16) < sizeof(glm::uint32) ? 0 : 1;\n\tError += sizeof(glm::uint32) < sizeof(glm::uint64) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_scalar_ulp.cpp",
    "content": "#include <glm/ext/scalar_ulp.hpp>\n#include <glm/ext/scalar_relational.hpp>\n\nstatic int test_ulp_float_dist()\n{\n\tint Error = 0;\n\n\tfloat A = 1.0f;\n\n\tfloat B = glm::nextFloat(A);\n\tError += glm::notEqual(A, B, 0) ? 0 : 1;\n\tfloat C = glm::prevFloat(B);\n\tError += glm::equal(A, C, 0) ? 0 : 1;\n\n\tint D = glm::floatDistance(A, B);\n\tError += D == 1 ? 0 : 1;\n\tint E = glm::floatDistance(A, C);\n\tError += E == 0 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_ulp_float_step()\n{\n\tint Error = 0;\n\n\tfloat A = 1.0f;\n\n\tfor(int i = 10; i < 1000; i *= 10)\n\t{\n\t\tfloat B = glm::nextFloat(A, i);\n\t\tError += glm::notEqual(A, B, 0) ? 0 : 1;\n\t\tfloat C = glm::prevFloat(B, i);\n\t\tError += glm::equal(A, C, 0) ? 0 : 1;\n\n\t\tint D = glm::floatDistance(A, B);\n\t\tError += D == i ? 0 : 1;\n\t\tint E = glm::floatDistance(A, C);\n\t\tError += E == 0 ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_ulp_double_dist()\n{\n\tint Error = 0;\n\n\tdouble A = 1.0;\n\n\tdouble B = glm::nextFloat(A);\n\tError += glm::notEqual(A, B, 0) ? 0 : 1;\n\tdouble C = glm::prevFloat(B);\n\tError += glm::equal(A, C, 0) ? 0 : 1;\n\n\tglm::int64 const D = glm::floatDistance(A, B);\n\tError += D == 1 ? 0 : 1;\n\tglm::int64 const E = glm::floatDistance(A, C);\n\tError += E == 0 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_ulp_double_step()\n{\n\tint Error = 0;\n\n\tdouble A = 1.0;\n\n\tfor(int i = 10; i < 1000; i *= 10)\n\t{\n\t\tdouble B = glm::nextFloat(A, i);\n\t\tError += glm::notEqual(A, B, 0) ? 0 : 1;\n\t\tdouble C = glm::prevFloat(B, i);\n\t\tError += glm::equal(A, C, 0) ? 0 : 1;\n\n\t\tglm::int64 const D = glm::floatDistance(A, B);\n\t\tError += D == i ? 0 : 1;\n\t\tglm::int64 const E = glm::floatDistance(A, C);\n\t\tError += E == 0 ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_ulp_float_dist();\n\tError += test_ulp_float_step();\n\tError += test_ulp_double_dist();\n\tError += test_ulp_double_step();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vec1.cpp",
    "content": "#define GLM_FORCE_SWIZZLE\n#include <glm/vector_relational.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <vector>\n\nstatic glm::vec1 g1;\nstatic glm::vec1 g2(1);\n\nstatic int test_vec1_operators()\n{\n\tint Error(0);\n\n\tglm::ivec1 A(1);\n\tglm::ivec1 B(1);\n\t{\n\t\tbool R = A != B;\n\t\tbool S = A == B;\n\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\t{\n\t\tA *= 1;\n\t\tB *= 1;\n\t\tA += 1;\n\t\tB += 1;\n\n\t\tbool R = A != B;\n\t\tbool S = A == B;\n\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_vec1_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_HAS_TRIVIAL_QUERIES\n\t//\tError += std::is_trivially_default_constructible<glm::vec1>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::vec1>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::vec1>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::dvec1>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::ivec1>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::uvec1>::value ? 0 : 1;\n\n\t\tError += std::is_copy_constructible<glm::vec1>::value ? 0 : 1;\n#\tendif\n\n\n\t{\n\t\tglm::ivec1 A = glm::vec1(2.0f);\n\n\t\tglm::ivec1 E(glm::dvec1(2.0));\n\t\tError += A == E ? 0 : 1;\n\n\t\tglm::ivec1 F(glm::ivec1(2));\n\t\tError += A == F ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_vec1_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::vec1) == sizeof(glm::mediump_vec1) ? 0 : 1;\n\tError += 4 == sizeof(glm::mediump_vec1) ? 0 : 1;\n\tError += sizeof(glm::dvec1) == sizeof(glm::highp_dvec1) ? 0 : 1;\n\tError += 8 == sizeof(glm::highp_dvec1) ? 0 : 1;\n\tError += glm::vec1().length() == 1 ? 0 : 1;\n\tError += glm::dvec1().length() == 1 ? 0 : 1;\n\tError += glm::vec1::length() == 1 ? 0 : 1;\n\tError += glm::dvec1::length() == 1 ? 0 : 1;\n\n\tGLM_CONSTEXPR std::size_t Length = glm::vec1::length();\n\tError += Length == 1 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_vec1_operator_increment()\n{\n\tint Error(0);\n\n\tglm::ivec1 v0(1);\n\tglm::ivec1 v1(v0);\n\tglm::ivec1 v2(v0);\n\tglm::ivec1 v3 = ++v1;\n\tglm::ivec1 v4 = v2++;\n\n\tError += glm::all(glm::equal(v0, v4)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v2)) ? 0 : 1;\n\tError += glm::all(glm::equal(v1, v3)) ? 0 : 1;\n\n\tint i0(1);\n\tint i1(i0);\n\tint i2(i0);\n\tint i3 = ++i1;\n\tint i4 = i2++;\n\n\tError += i0 == i4 ? 0 : 1;\n\tError += i1 == i2 ? 0 : 1;\n\tError += i1 == i3 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_bvec1_ctor()\n{\n\tint Error = 0;\n\n\tglm::bvec1 const A(true);\n\tglm::bvec1 const B(true);\n\tglm::bvec1 const C(false);\n\tglm::bvec1 const D = A && B;\n\tglm::bvec1 const E = A && C;\n\tglm::bvec1 const F = A || C;\n\n\tError += D == glm::bvec1(true) ? 0 : 1;\n\tError += E == glm::bvec1(false) ? 0 : 1;\n\tError += F == glm::bvec1(true) ? 0 : 1;\n\n\tbool const G = A == C;\n\tbool const H = A != C;\n\tError += !G ? 0 : 1;\n\tError += H ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_constexpr()\n{\n#if GLM_HAS_CONSTEXPR\n\tstatic_assert(glm::vec1::length() == 1, \"GLM: Failed constexpr\");\n\tstatic_assert(glm::vec1(1.0f).x > 0.0f, \"GLM: Failed constexpr\");\n#endif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_vec1_size();\n\tError += test_vec1_ctor();\n\tError += test_bvec1_ctor();\n\tError += test_vec1_operators();\n\tError += test_vec1_operator_increment();\n\tError += test_constexpr();\n\t\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vector_bool1.cpp",
    "content": "#include <glm/ext/vector_bool1.hpp>\n#include <glm/ext/vector_bool1_precision.hpp>\n\ntemplate <typename genType>\nstatic int test_operators()\n{\n\tint Error = 0;\n\n\tgenType const A(true);\n\tgenType const B(true);\n\t{\n\t\tbool const R = A != B;\n\t\tbool const S = A == B;\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_ctor()\n{\n\tint Error = 0;\n\n\tglm::bvec1 const A = genType(true);\n\n\tglm::bvec1 const E(genType(true));\n\tError += A == E ? 0 : 1;\n\n\tglm::bvec1 const F(E);\n\tError += A == F ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::bvec1) == sizeof(genType) ? 0 : 1;\n\tError += genType().length() == 1 ? 0 : 1;\n\tError += genType::length() == 1 ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_relational()\n{\n\tint Error = 0;\n\n\tgenType const A(true);\n\tgenType const B(true);\n\tgenType const C(false);\n\n\tError += A == B ? 0 : 1;\n\tError += (A && B) == A ? 0 : 1;\n\tError += (A || C) == A ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_constexpr()\n{\n#\tif GLM_HAS_CONSTEXPR\n\t\tstatic_assert(genType::length() == 1, \"GLM: Failed constexpr\");\n#\tendif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_operators<glm::bvec1>();\n\tError += test_operators<glm::lowp_bvec1>();\n\tError += test_operators<glm::mediump_bvec1>();\n\tError += test_operators<glm::highp_bvec1>();\n\n\tError += test_ctor<glm::bvec1>();\n\tError += test_ctor<glm::lowp_bvec1>();\n\tError += test_ctor<glm::mediump_bvec1>();\n\tError += test_ctor<glm::highp_bvec1>();\n\n\tError += test_size<glm::bvec1>();\n\tError += test_size<glm::lowp_bvec1>();\n\tError += test_size<glm::mediump_bvec1>();\n\tError += test_size<glm::highp_bvec1>();\n\n\tError += test_relational<glm::bvec1>();\n\tError += test_relational<glm::lowp_bvec1>();\n\tError += test_relational<glm::mediump_bvec1>();\n\tError += test_relational<glm::highp_bvec1>();\n\n\tError += test_constexpr<glm::bvec1>();\n\tError += test_constexpr<glm::lowp_bvec1>();\n\tError += test_constexpr<glm::mediump_bvec1>();\n\tError += test_constexpr<glm::highp_bvec1>();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vector_common.cpp",
    "content": "#include <glm/ext/vector_common.hpp>\n\n#include <glm/ext/vector_bool1.hpp>\n#include <glm/ext/vector_bool1_precision.hpp>\n#include <glm/ext/vector_bool2.hpp>\n#include <glm/ext/vector_bool2_precision.hpp>\n#include <glm/ext/vector_bool3.hpp>\n#include <glm/ext/vector_bool3_precision.hpp>\n#include <glm/ext/vector_bool4.hpp>\n#include <glm/ext/vector_bool4_precision.hpp>\n\n#include <glm/ext/vector_float1.hpp>\n#include <glm/ext/vector_float1_precision.hpp>\n#include <glm/ext/vector_float2.hpp>\n#include <glm/ext/vector_float2_precision.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float3_precision.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/vector_float4_precision.hpp>\n#include <glm/ext/vector_double1.hpp>\n#include <glm/ext/vector_double1_precision.hpp>\n#include <glm/ext/vector_double2.hpp>\n#include <glm/ext/vector_double2_precision.hpp>\n#include <glm/ext/vector_double3.hpp>\n#include <glm/ext/vector_double3_precision.hpp>\n#include <glm/ext/vector_double4.hpp>\n#include <glm/ext/vector_double4_precision.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/scalar_constants.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/common.hpp>\n\n#if ((GLM_LANG & GLM_LANG_CXX11_FLAG) || (GLM_COMPILER & GLM_COMPILER_VC))\n#\tdefine GLM_NAN(T) NAN\n#else\n#\tdefine GLM_NAN(T) (static_cast<T>(0.0f) / static_cast<T>(0.0f))\n#endif\n\ntemplate <typename vecType>\nstatic int test_min()\n{\n\ttypedef typename vecType::value_type T;\n\n\tint Error = 0;\n\n\tvecType const N(static_cast<T>(0));\n\tvecType const B(static_cast<T>(1));\n\n\tError += glm::all(glm::equal(glm::min(N, B), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(B, N), N, glm::epsilon<T>())) ? 0 : 1;\n\n\tvecType const C(static_cast<T>(2));\n\tError += glm::all(glm::equal(glm::min(N, B, C), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(B, N, C), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(C, N, B), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(C, B, N), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(B, C, N), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(N, C, B), N, glm::epsilon<T>())) ? 0 : 1;\n\n\tvecType const D(static_cast<T>(3));\n\tError += glm::all(glm::equal(glm::min(D, N, B, C), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(B, D, N, C), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(C, N, D, B), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(C, B, D, N), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(B, C, N, D), N, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::min(N, C, B, D), N, glm::epsilon<T>())) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename vecType>\nstatic int test_min_nan()\n{\n\ttypedef typename vecType::value_type T;\n\n\tint Error = 0;\n\n\tvecType const B(static_cast<T>(1));\n\tvecType const N(GLM_NAN(T));\n\n\tError += glm::all(glm::isnan(glm::min(N, B))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(B, N))) ? 0 : 1;\n\n\tvecType const C(static_cast<T>(2));\n\tError += glm::all(glm::isnan(glm::min(N, B, C))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(B, N, C))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(C, N, B))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(C, B, N))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(B, C, N))) ? 0 : 1;\n\tError += glm::all(glm::isnan(glm::min(N, C, B))) ? 0 : 1;\n\n\tvecType const D(static_cast<T>(3));\n\tError += !glm::all(glm::isnan(glm::min(D, N, B, C))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(B, D, N, C))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(C, N, D, B))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(C, B, D, N))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::min(B, C, N, D))) ? 0 : 1;\n\tError += glm::all(glm::isnan(glm::min(N, C, B, D))) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename vecType>\nstatic int test_max()\n{\n\ttypedef typename vecType::value_type T;\n\n\tint Error = 0;\n\n\tvecType const N(static_cast<T>(0));\n\tvecType const B(static_cast<T>(1));\n\tError += glm::all(glm::equal(glm::max(N, B), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(B, N), B, glm::epsilon<T>())) ? 0 : 1;\n\n\tvecType const C(static_cast<T>(2));\n\tError += glm::all(glm::equal(glm::max(N, B, C), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(B, N, C), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(C, N, B), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(C, B, N), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(B, C, N), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(N, C, B), C, glm::epsilon<T>())) ? 0 : 1;\n\n\tvecType const D(static_cast<T>(3));\n\tError += glm::all(glm::equal(glm::max(D, N, B, C), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(B, D, N, C), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(C, N, D, B), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(C, B, D, N), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(B, C, N, D), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::max(N, C, B, D), D, glm::epsilon<T>())) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename vecType>\nstatic int test_max_nan()\n{\n\ttypedef typename vecType::value_type T;\n\n\tint Error = 0;\n\n\tvecType const B(static_cast<T>(1));\n\tvecType const N(GLM_NAN(T));\n\n\tError += glm::all(glm::isnan(glm::max(N, B))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(B, N))) ? 0 : 1;\n\n\tvecType const C(static_cast<T>(2));\n\tError += glm::all(glm::isnan(glm::max(N, B, C))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(B, N, C))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(C, N, B))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(C, B, N))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(B, C, N))) ? 0 : 1;\n\tError += glm::all(glm::isnan(glm::max(N, C, B))) ? 0 : 1;\n\n\tvecType const D(static_cast<T>(3));\n\tError += !glm::all(glm::isnan(glm::max(D, N, B, C))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(B, D, N, C))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(C, N, D, B))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(C, B, D, N))) ? 0 : 1;\n\tError += !glm::all(glm::isnan(glm::max(B, C, N, D))) ? 0 : 1;\n\tError += glm::all(glm::isnan(glm::max(N, C, B, D))) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename vecType>\nstatic int test_fmin()\n{\n\ttypedef typename vecType::value_type T;\n\n\tint Error = 0;\n\n\tvecType const B(static_cast<T>(1));\n\tvecType const N(GLM_NAN(T));\n\n\tError += glm::all(glm::equal(glm::fmin(N, B), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(B, N), B, glm::epsilon<T>())) ? 0 : 1;\n\n\tvecType const C(static_cast<T>(2));\n\tError += glm::all(glm::equal(glm::fmin(N, B, C), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(B, N, C), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(C, N, B), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(C, B, N), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(B, C, N), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(N, C, B), B, glm::epsilon<T>())) ? 0 : 1;\n\n\tvecType const D(static_cast<T>(3));\n\tError += glm::all(glm::equal(glm::fmin(D, N, B, C), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(B, D, N, C), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(C, N, D, B), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(C, B, D, N), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(B, C, N, D), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmin(N, C, B, D), B, glm::epsilon<T>())) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename vecType>\nstatic int test_fmax()\n{\n\ttypedef typename vecType::value_type T;\n\n\tint Error = 0;\n\n\tvecType const B(static_cast<T>(1));\n\tvecType const N(GLM_NAN(T));\n\n\tError += glm::all(glm::equal(glm::fmax(N, B), B, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(B, N), B, glm::epsilon<T>())) ? 0 : 1;\n\n\tvecType const C(static_cast<T>(2));\n\tError += glm::all(glm::equal(glm::fmax(N, B, C), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(B, N, C), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(C, N, B), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(C, B, N), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(B, C, N), C, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(N, C, B), C, glm::epsilon<T>())) ? 0 : 1;\n\n\tvecType const D(static_cast<T>(3));\n\tError += glm::all(glm::equal(glm::fmax(D, N, B, C), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(B, D, N, C), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(C, N, D, B), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(C, B, D, N), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(B, C, N, D), D, glm::epsilon<T>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::fmax(N, C, B, D), D, glm::epsilon<T>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_clamp()\n{\n\tint Error = 0;\n\n\tglm::vec2 K = glm::clamp(glm::vec2(0.5f));\n\tError += glm::all(glm::equal(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;\n\n\tglm::vec3 L = glm::clamp(glm::vec3(0.5f));\n\tError += glm::all(glm::equal(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;\n\n\tglm::vec4 M = glm::clamp(glm::vec4(0.5f));\n\tError += glm::all(glm::equal(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;\n\n\tglm::vec1 N = glm::clamp(glm::vec1(0.5f));\n\tError += glm::all(glm::equal(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_repeat()\n{\n\tint Error = 0;\n\n\tglm::vec2 K = glm::repeat(glm::vec2(0.5f));\n\tError += glm::all(glm::equal(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;\n\n\tglm::vec3 L = glm::repeat(glm::vec3(0.5f));\n\tError += glm::all(glm::equal(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;\n\n\tglm::vec4 M = glm::repeat(glm::vec4(0.5f));\n\tError += glm::all(glm::equal(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;\n\n\tglm::vec1 N = glm::repeat(glm::vec1(0.5f));\n\tError += glm::all(glm::equal(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_mirrorClamp()\n{\n\tint Error = 0;\n\n\tglm::vec2 K = glm::mirrorClamp(glm::vec2(0.5f));\n\tError += glm::all(glm::equal(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;\n\n\tglm::vec3 L = glm::mirrorClamp(glm::vec3(0.5f));\n\tError += glm::all(glm::equal(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;\n\n\tglm::vec4 M = glm::mirrorClamp(glm::vec4(0.5f));\n\tError += glm::all(glm::equal(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;\n\n\tglm::vec1 N = glm::mirrorClamp(glm::vec1(0.5f));\n\tError += glm::all(glm::equal(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_mirrorRepeat()\n{\n\tint Error = 0;\n\n\tglm::vec2 K = glm::mirrorRepeat(glm::vec2(0.5f));\n\tError += glm::all(glm::equal(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;\n\n\tglm::vec3 L = glm::mirrorRepeat(glm::vec3(0.5f));\n\tError += glm::all(glm::equal(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;\n\n\tglm::vec4 M = glm::mirrorRepeat(glm::vec4(0.5f));\n\tError += glm::all(glm::equal(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;\n\n\tglm::vec1 N = glm::mirrorRepeat(glm::vec1(0.5f));\n\tError += glm::all(glm::equal(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_iround()\n{\n\tint Error = 0;\n\n\tfor(float f = 0.0f; f < 3.1f; f += 0.05f)\n\t{\n\t\tint RoundFast = static_cast<int>(glm::iround(f));\n\t\tint RoundSTD = static_cast<int>(glm::round(f));\n\t\tError += RoundFast == RoundSTD ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nstatic int test_uround()\n{\n\tint Error = 0;\n\n\tfor(float f = 0.0f; f < 3.1f; f += 0.05f)\n\t{\n\t\tint RoundFast = static_cast<int>(glm::uround(f));\n\t\tint RoundSTD = static_cast<int>(glm::round(f));\n\t\tError += RoundFast == RoundSTD ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_min<glm::vec3>();\n\tError += test_min<glm::vec2>();\n\tError += test_min_nan<glm::vec3>();\n\tError += test_min_nan<glm::vec2>();\n\n\tError += test_max<glm::vec3>();\n\tError += test_max<glm::vec2>();\n\tError += test_max_nan<glm::vec3>();\n\tError += test_max_nan<glm::vec2>();\n\n\tError += test_fmin<glm::vec3>();\n\tError += test_fmin<glm::vec2>();\n\n\tError += test_fmax<glm::vec3>();\n\tError += test_fmax<glm::vec2>();\n\n\tError += test_clamp();\n\tError += test_repeat();\n\tError += test_mirrorClamp();\n\tError += test_mirrorRepeat();\n\n\tError += test_iround();\n\tError += test_uround();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vector_iec559.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_double1.hpp>\n#include <glm/ext/vector_double1_precision.hpp>\n#include <glm/ext/vector_double2.hpp>\n#include <glm/ext/vector_double3.hpp>\n#include <glm/ext/vector_double4.hpp>\n#include <glm/ext/vector_float1.hpp>\n#include <glm/ext/vector_float1_precision.hpp>\n#include <glm/ext/vector_float2.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float4.hpp>\n\ntemplate <typename genType>\nstatic int test_operators()\n{\n\ttypedef typename genType::value_type valType;\n\t\n\tint Error = 0;\n\n\t{\n\t\tgenType const A(1);\n\t\tgenType const B(1);\n\n\t\tgenType const C = A + B;\n\t\tError += glm::all(glm::equal(C, genType(2), glm::epsilon<valType>())) ? 0 : 1;\n\n\t\tgenType const D = A - B;\n\t\tError += glm::all(glm::equal(D, genType(0), glm::epsilon<valType>())) ? 0 : 1;\n\n\t\tgenType const E = A * B;\n\t\tError += glm::all(glm::equal(E, genType(1), glm::epsilon<valType>())) ? 0 : 1;\n\n\t\tgenType const F = A / B;\n\t\tError += glm::all(glm::equal(F, genType(1), glm::epsilon<valType>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_ctor()\n{\n\ttypedef typename genType::value_type T;\n\t\n\tint Error = 0;\n\n\tglm::vec<1, T> const A = genType(1);\n\n\tglm::vec<1, T> const E(genType(1));\n\tError += glm::all(glm::equal(A, E, glm::epsilon<T>())) ? 0 : 1;\n\n\tglm::vec<1, T> const F(E);\n\tError += glm::all(glm::equal(A, F, glm::epsilon<T>())) ? 0 : 1;\n\n\tgenType const B = genType(1);\n\tgenType const G(glm::vec<2, T>(1));\n\tError += glm::all(glm::equal(B, G, glm::epsilon<T>())) ? 0 : 1;\n\n\tgenType const H(glm::vec<3, T>(1));\n\tError += glm::all(glm::equal(B, H, glm::epsilon<T>())) ? 0 : 1;\n\n\tgenType const I(glm::vec<4, T>(1));\n\tError += glm::all(glm::equal(B, I, glm::epsilon<T>())) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_size()\n{\n\ttypedef typename genType::value_type T;\n\t\n\tint Error = 0;\n\n\tError += sizeof(glm::vec<1, T>) == sizeof(genType) ? 0 : 1;\n\tError += genType().length() == 1 ? 0 : 1;\n\tError += genType::length() == 1 ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_relational()\n{\n\ttypedef typename genType::value_type valType;\n\t\n\tint Error = 0;\n\n\tgenType const A(1);\n\tgenType const B(1);\n\tgenType const C(0);\n\n\tError += all(equal(A, B, glm::epsilon<valType>())) ? 0 : 1;\n\tError += any(notEqual(A, C, glm::epsilon<valType>())) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_constexpr()\n{\n#\tif GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\t\tstatic_assert(genType::length() == 1, \"GLM: Failed constexpr\");\n#\tendif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_operators<glm::dvec1>();\n\tError += test_operators<glm::lowp_dvec1>();\n\tError += test_operators<glm::mediump_dvec1>();\n\tError += test_operators<glm::highp_dvec1>();\n\n\tError += test_ctor<glm::dvec1>();\n\tError += test_ctor<glm::lowp_dvec1>();\n\tError += test_ctor<glm::mediump_dvec1>();\n\tError += test_ctor<glm::highp_dvec1>();\n\n\tError += test_size<glm::dvec1>();\n\tError += test_size<glm::lowp_dvec1>();\n\tError += test_size<glm::mediump_dvec1>();\n\tError += test_size<glm::highp_dvec1>();\n\n\tError += test_relational<glm::dvec1>();\n\tError += test_relational<glm::lowp_dvec1>();\n\tError += test_relational<glm::mediump_dvec1>();\n\tError += test_relational<glm::highp_dvec1>();\n\n\tError += test_constexpr<glm::dvec1>();\n\tError += test_constexpr<glm::lowp_dvec1>();\n\tError += test_constexpr<glm::mediump_dvec1>();\n\tError += test_constexpr<glm::highp_dvec1>();\n\n\tError += test_operators<glm::vec1>();\n\tError += test_operators<glm::lowp_vec1>();\n\tError += test_operators<glm::mediump_vec1>();\n\tError += test_operators<glm::highp_vec1>();\n\t\n\tError += test_ctor<glm::vec1>();\n\tError += test_ctor<glm::lowp_vec1>();\n\tError += test_ctor<glm::mediump_vec1>();\n\tError += test_ctor<glm::highp_vec1>();\n\t\n\tError += test_size<glm::vec1>();\n\tError += test_size<glm::lowp_vec1>();\n\tError += test_size<glm::mediump_vec1>();\n\tError += test_size<glm::highp_vec1>();\n\t\n\tError += test_relational<glm::vec1>();\n\tError += test_relational<glm::lowp_vec1>();\n\tError += test_relational<glm::mediump_vec1>();\n\tError += test_relational<glm::highp_vec1>();\n\t\n\tError += test_constexpr<glm::vec1>();\n\tError += test_constexpr<glm::lowp_vec1>();\n\tError += test_constexpr<glm::mediump_vec1>();\n\tError += test_constexpr<glm::highp_vec1>();\n\t\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vector_int1_sized.cpp",
    "content": "#include <glm/ext/vector_int1_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\n\tstatic_assert(sizeof(glm::i8vec1) == 1, \"int8 size isn't 1 byte on this platform\");\n\tstatic_assert(sizeof(glm::i16vec1) == 2, \"int16 size isn't 2 bytes on this platform\");\n\tstatic_assert(sizeof(glm::i32vec1) == 4, \"int32 size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::i64vec1) == 8, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec1) == 1 ? 0 : 1;\n\tError += sizeof(glm::i16vec1) == 2 ? 0 : 1;\n\tError += sizeof(glm::i32vec1) == 4 ? 0 : 1;\n\tError += sizeof(glm::i64vec1) == 8 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec1) < sizeof(glm::i16vec1) ? 0 : 1;\n\tError += sizeof(glm::i16vec1) < sizeof(glm::i32vec1) ? 0 : 1;\n\tError += sizeof(glm::i32vec1) < sizeof(glm::i64vec1) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vector_int2_sized.cpp",
    "content": "#include <glm/ext/vector_int2_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\n\tstatic_assert(sizeof(glm::i8vec2) == 2, \"int8 size isn't 1 byte on this platform\");\n\tstatic_assert(sizeof(glm::i16vec2) == 4, \"int16 size isn't 2 bytes on this platform\");\n\tstatic_assert(sizeof(glm::i32vec2) == 8, \"int32 size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::i64vec2) == 16, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec2) == 2 ? 0 : 1;\n\tError += sizeof(glm::i16vec2) == 4 ? 0 : 1;\n\tError += sizeof(glm::i32vec2) == 8 ? 0 : 1;\n\tError += sizeof(glm::i64vec2) == 16 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec2) < sizeof(glm::i16vec2) ? 0 : 1;\n\tError += sizeof(glm::i16vec2) < sizeof(glm::i32vec2) ? 0 : 1;\n\tError += sizeof(glm::i32vec2) < sizeof(glm::i64vec2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vector_int3_sized.cpp",
    "content": "#include <glm/ext/vector_int3_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\n\tstatic_assert(sizeof(glm::i8vec3) == 3, \"int8 size isn't 1 byte on this platform\");\n\tstatic_assert(sizeof(glm::i16vec3) == 6, \"int16 size isn't 2 bytes on this platform\");\n\tstatic_assert(sizeof(glm::i32vec3) == 12, \"int32 size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::i64vec3) == 24, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec3) == 3 ? 0 : 1;\n\tError += sizeof(glm::i16vec3) == 6 ? 0 : 1;\n\tError += sizeof(glm::i32vec3) == 12 ? 0 : 1;\n\tError += sizeof(glm::i64vec3) == 24 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec3) < sizeof(glm::i16vec3) ? 0 : 1;\n\tError += sizeof(glm::i16vec3) < sizeof(glm::i32vec3) ? 0 : 1;\n\tError += sizeof(glm::i32vec3) < sizeof(glm::i64vec3) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vector_int4_sized.cpp",
    "content": "#include <glm/ext/vector_int4_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::i8vec4) == 4, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::i16vec4) == 8, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::i32vec4) == 16, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::i64vec4) == 32, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec4) == 4 ? 0 : 1;\n\tError += sizeof(glm::i16vec4) == 8 ? 0 : 1;\n\tError += sizeof(glm::i32vec4) == 16 ? 0 : 1;\n\tError += sizeof(glm::i64vec4) == 32 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec4) < sizeof(glm::i16vec4) ? 0 : 1;\n\tError += sizeof(glm::i16vec4) < sizeof(glm::i32vec4) ? 0 : 1;\n\tError += sizeof(glm::i32vec4) < sizeof(glm::i64vec4) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vector_integer.cpp",
    "content": "#include <glm/ext/vector_integer.hpp>\n#include <glm/ext/scalar_int_sized.hpp>\n#include <glm/ext/scalar_uint_sized.hpp>\n#include <vector>\n#include <ctime>\n#include <cstdio>\n\nnamespace isPowerOfTwo\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tbool\t\tReturn;\n\t};\n\n\ttemplate <glm::length_t L>\n\tint test_int16()\n\t{\n\t\ttype<glm::int16> const Data[] =\n\t\t{\n\t\t\t{ 0x0001, true },\n\t\t\t{ 0x0002, true },\n\t\t\t{ 0x0004, true },\n\t\t\t{ 0x0080, true },\n\t\t\t{ 0x0000, true },\n\t\t\t{ 0x0003, false }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor (std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::int16>); i < n; ++i)\n\t\t{\n\t\t\tglm::vec<L, bool> const Result = glm::isPowerOfTwo(glm::vec<L, glm::int16>(Data[i].Value));\n\t\t\tError += glm::vec<L, bool>(Data[i].Return) == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\ttemplate <glm::length_t L>\n\tint test_uint16()\n\t{\n\t\ttype<glm::uint16> const Data[] =\n\t\t{\n\t\t\t{ 0x0001, true },\n\t\t\t{ 0x0002, true },\n\t\t\t{ 0x0004, true },\n\t\t\t{ 0x0000, true },\n\t\t\t{ 0x0000, true },\n\t\t\t{ 0x0003, false }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor (std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint16>); i < n; ++i)\n\t\t{\n\t\t\tglm::vec<L, bool> const Result = glm::isPowerOfTwo(glm::vec<L, glm::uint16>(Data[i].Value));\n\t\t\tError += glm::vec<L, bool>(Data[i].Return) == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\ttemplate <glm::length_t L>\n\tint test_int32()\n\t{\n\t\ttype<int> const Data[] =\n\t\t{\n\t\t\t{ 0x00000001, true },\n\t\t\t{ 0x00000002, true },\n\t\t\t{ 0x00000004, true },\n\t\t\t{ 0x0000000f, false },\n\t\t\t{ 0x00000000, true },\n\t\t\t{ 0x00000003, false }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor (std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tglm::vec<L, bool> const Result = glm::isPowerOfTwo(glm::vec<L, glm::int32>(Data[i].Value));\n\t\t\tError += glm::vec<L, bool>(Data[i].Return) == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\ttemplate <glm::length_t L>\n\tint test_uint32()\n\t{\n\t\ttype<glm::uint> const Data[] =\n\t\t{\n\t\t\t{ 0x00000001, true },\n\t\t\t{ 0x00000002, true },\n\t\t\t{ 0x00000004, true },\n\t\t\t{ 0x80000000, true },\n\t\t\t{ 0x00000000, true },\n\t\t\t{ 0x00000003, false }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor (std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint>); i < n; ++i)\n\t\t{\n\t\t\tglm::vec<L, bool> const Result = glm::isPowerOfTwo(glm::vec<L, glm::uint32>(Data[i].Value));\n\t\t\tError += glm::vec<L, bool>(Data[i].Return) == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += test_int16<1>();\n\t\tError += test_int16<2>();\n\t\tError += test_int16<3>();\n\t\tError += test_int16<4>();\n\n\t\tError += test_uint16<1>();\n\t\tError += test_uint16<2>();\n\t\tError += test_uint16<3>();\n\t\tError += test_uint16<4>();\n\n\t\tError += test_int32<1>();\n\t\tError += test_int32<2>();\n\t\tError += test_int32<3>();\n\t\tError += test_int32<4>();\n\n\t\tError += test_uint32<1>();\n\t\tError += test_uint32<2>();\n\t\tError += test_uint32<3>();\n\t\tError += test_uint32<4>();\n\n\t\treturn Error;\n\t}\n}//isPowerOfTwo\n\nnamespace prevPowerOfTwo\n{\n\ttemplate <glm::length_t L, typename T>\n\tint run()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec<L, T> const A = glm::prevPowerOfTwo(glm::vec<L, T>(7));\n\t\tError += A == glm::vec<L, T>(4) ? 0 : 1;\n\n\t\tglm::vec<L, T> const B = glm::prevPowerOfTwo(glm::vec<L, T>(15));\n\t\tError += B == glm::vec<L, T>(8) ? 0 : 1;\n\n\t\tglm::vec<L, T> const C = glm::prevPowerOfTwo(glm::vec<L, T>(31));\n\t\tError += C == glm::vec<L, T>(16) ? 0 : 1;\n\n\t\tglm::vec<L, T> const D = glm::prevPowerOfTwo(glm::vec<L, T>(32));\n\t\tError += D == glm::vec<L, T>(32) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<1, glm::int8>();\n\t\tError += run<2, glm::int8>();\n\t\tError += run<3, glm::int8>();\n\t\tError += run<4, glm::int8>();\n\n\t\tError += run<1, glm::int16>();\n\t\tError += run<2, glm::int16>();\n\t\tError += run<3, glm::int16>();\n\t\tError += run<4, glm::int16>();\n\n\t\tError += run<1, glm::int32>();\n\t\tError += run<2, glm::int32>();\n\t\tError += run<3, glm::int32>();\n\t\tError += run<4, glm::int32>();\n\n\t\tError += run<1, glm::int64>();\n\t\tError += run<2, glm::int64>();\n\t\tError += run<3, glm::int64>();\n\t\tError += run<4, glm::int64>();\n\n\t\tError += run<1, glm::uint8>();\n\t\tError += run<2, glm::uint8>();\n\t\tError += run<3, glm::uint8>();\n\t\tError += run<4, glm::uint8>();\n\n\t\tError += run<1, glm::uint16>();\n\t\tError += run<2, glm::uint16>();\n\t\tError += run<3, glm::uint16>();\n\t\tError += run<4, glm::uint16>();\n\n\t\tError += run<1, glm::uint32>();\n\t\tError += run<2, glm::uint32>();\n\t\tError += run<3, glm::uint32>();\n\t\tError += run<4, glm::uint32>();\n\n\t\tError += run<1, glm::uint64>();\n\t\tError += run<2, glm::uint64>();\n\t\tError += run<3, glm::uint64>();\n\t\tError += run<4, glm::uint64>();\n\n\t\treturn Error;\n\t}\n}//namespace prevPowerOfTwo\n\nnamespace nextPowerOfTwo\n{\n\ttemplate <glm::length_t L, typename T>\n\tint run()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec<L, T> const A = glm::nextPowerOfTwo(glm::vec<L, T>(7));\n\t\tError += A == glm::vec<L, T>(8) ? 0 : 1;\n\n\t\tglm::vec<L, T> const B = glm::nextPowerOfTwo(glm::vec<L, T>(15));\n\t\tError += B == glm::vec<L, T>(16) ? 0 : 1;\n\n\t\tglm::vec<L, T> const C = glm::nextPowerOfTwo(glm::vec<L, T>(31));\n\t\tError += C == glm::vec<L, T>(32) ? 0 : 1;\n\n\t\tglm::vec<L, T> const D = glm::nextPowerOfTwo(glm::vec<L, T>(32));\n\t\tError += D == glm::vec<L, T>(32) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<1, glm::int8>();\n\t\tError += run<2, glm::int8>();\n\t\tError += run<3, glm::int8>();\n\t\tError += run<4, glm::int8>();\n\n\t\tError += run<1, glm::int16>();\n\t\tError += run<2, glm::int16>();\n\t\tError += run<3, glm::int16>();\n\t\tError += run<4, glm::int16>();\n\n\t\tError += run<1, glm::int32>();\n\t\tError += run<2, glm::int32>();\n\t\tError += run<3, glm::int32>();\n\t\tError += run<4, glm::int32>();\n\n\t\tError += run<1, glm::int64>();\n\t\tError += run<2, glm::int64>();\n\t\tError += run<3, glm::int64>();\n\t\tError += run<4, glm::int64>();\n\n\t\tError += run<1, glm::uint8>();\n\t\tError += run<2, glm::uint8>();\n\t\tError += run<3, glm::uint8>();\n\t\tError += run<4, glm::uint8>();\n\n\t\tError += run<1, glm::uint16>();\n\t\tError += run<2, glm::uint16>();\n\t\tError += run<3, glm::uint16>();\n\t\tError += run<4, glm::uint16>();\n\n\t\tError += run<1, glm::uint32>();\n\t\tError += run<2, glm::uint32>();\n\t\tError += run<3, glm::uint32>();\n\t\tError += run<4, glm::uint32>();\n\n\t\tError += run<1, glm::uint64>();\n\t\tError += run<2, glm::uint64>();\n\t\tError += run<3, glm::uint64>();\n\t\tError += run<4, glm::uint64>();\n\n\t\treturn Error;\n\t}\n}//namespace nextPowerOfTwo\n\nnamespace prevMultiple\n{\n\ttemplate<typename genIUType>\n\tstruct type\n\t{\n\t\tgenIUType Source;\n\t\tgenIUType Multiple;\n\t\tgenIUType Return;\n\t};\n\n\ttemplate <glm::length_t L, typename T>\n\tint run()\n\t{\n\t\ttype<T> const Data[] =\n\t\t{\n\t\t\t{ 8, 3, 6 },\n\t\t\t{ 7, 7, 7 }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor (std::size_t i = 0, n = sizeof(Data) / sizeof(type<T>); i < n; ++i)\n\t\t{\n\t\t\tglm::vec<L, T> const Result0 = glm::prevMultiple(glm::vec<L, T>(Data[i].Source), Data[i].Multiple);\n\t\t\tError += glm::vec<L, T>(Data[i].Return) == Result0 ? 0 : 1;\n\n\t\t\tglm::vec<L, T> const Result1 = glm::prevMultiple(glm::vec<L, T>(Data[i].Source), glm::vec<L, T>(Data[i].Multiple));\n\t\t\tError += glm::vec<L, T>(Data[i].Return) == Result1 ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<1, glm::int8>();\n\t\tError += run<2, glm::int8>();\n\t\tError += run<3, glm::int8>();\n\t\tError += run<4, glm::int8>();\n\n\t\tError += run<1, glm::int16>();\n\t\tError += run<2, glm::int16>();\n\t\tError += run<3, glm::int16>();\n\t\tError += run<4, glm::int16>();\n\n\t\tError += run<1, glm::int32>();\n\t\tError += run<2, glm::int32>();\n\t\tError += run<3, glm::int32>();\n\t\tError += run<4, glm::int32>();\n\n\t\tError += run<1, glm::int64>();\n\t\tError += run<2, glm::int64>();\n\t\tError += run<3, glm::int64>();\n\t\tError += run<4, glm::int64>();\n\n\t\tError += run<1, glm::uint8>();\n\t\tError += run<2, glm::uint8>();\n\t\tError += run<3, glm::uint8>();\n\t\tError += run<4, glm::uint8>();\n\n\t\tError += run<1, glm::uint16>();\n\t\tError += run<2, glm::uint16>();\n\t\tError += run<3, glm::uint16>();\n\t\tError += run<4, glm::uint16>();\n\n\t\tError += run<1, glm::uint32>();\n\t\tError += run<2, glm::uint32>();\n\t\tError += run<3, glm::uint32>();\n\t\tError += run<4, glm::uint32>();\n\n\t\tError += run<1, glm::uint64>();\n\t\tError += run<2, glm::uint64>();\n\t\tError += run<3, glm::uint64>();\n\t\tError += run<4, glm::uint64>();\n\n\t\treturn Error;\n\t}\n}//namespace prevMultiple\n\nnamespace nextMultiple\n{\n\ttemplate<typename genIUType>\n\tstruct type\n\t{\n\t\tgenIUType Source;\n\t\tgenIUType Multiple;\n\t\tgenIUType Return;\n\t};\n\n\ttemplate <glm::length_t L, typename T>\n\tint run()\n\t{\n\t\ttype<T> const Data[] =\n\t\t{\n\t\t\t{ 3, 4, 4 },\n\t\t\t{ 6, 3, 6 },\n\t\t\t{ 5, 3, 6 },\n\t\t\t{ 7, 7, 7 },\n\t\t\t{ 0, 1, 0 },\n\t\t\t{ 8, 3, 9 }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor (std::size_t i = 0, n = sizeof(Data) / sizeof(type<T>); i < n; ++i)\n\t\t{\n\t\t\tglm::vec<L, T> const Result0 = glm::nextMultiple(glm::vec<L, T>(Data[i].Source), glm::vec<L, T>(Data[i].Multiple));\n\t\t\tError += glm::vec<L, T>(Data[i].Return) == Result0 ? 0 : 1;\n\n\t\t\tglm::vec<L, T> const Result1 = glm::nextMultiple(glm::vec<L, T>(Data[i].Source), Data[i].Multiple);\n\t\t\tError += glm::vec<L, T>(Data[i].Return) == Result1 ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<1, glm::int8>();\n\t\tError += run<2, glm::int8>();\n\t\tError += run<3, glm::int8>();\n\t\tError += run<4, glm::int8>();\n\n\t\tError += run<1, glm::int16>();\n\t\tError += run<2, glm::int16>();\n\t\tError += run<3, glm::int16>();\n\t\tError += run<4, glm::int16>();\n\n\t\tError += run<1, glm::int32>();\n\t\tError += run<2, glm::int32>();\n\t\tError += run<3, glm::int32>();\n\t\tError += run<4, glm::int32>();\n\n\t\tError += run<1, glm::int64>();\n\t\tError += run<2, glm::int64>();\n\t\tError += run<3, glm::int64>();\n\t\tError += run<4, glm::int64>();\n\n\t\tError += run<1, glm::uint8>();\n\t\tError += run<2, glm::uint8>();\n\t\tError += run<3, glm::uint8>();\n\t\tError += run<4, glm::uint8>();\n\n\t\tError += run<1, glm::uint16>();\n\t\tError += run<2, glm::uint16>();\n\t\tError += run<3, glm::uint16>();\n\t\tError += run<4, glm::uint16>();\n\n\t\tError += run<1, glm::uint32>();\n\t\tError += run<2, glm::uint32>();\n\t\tError += run<3, glm::uint32>();\n\t\tError += run<4, glm::uint32>();\n\n\t\tError += run<1, glm::uint64>();\n\t\tError += run<2, glm::uint64>();\n\t\tError += run<3, glm::uint64>();\n\t\tError += run<4, glm::uint64>();\n\n\t\treturn Error;\n\t}\n}//namespace nextMultiple\n\nnamespace findNSB\n{\n\ttemplate<typename T>\n\tstruct type\n\t{\n\t\tT Source;\n\t\tint SignificantBitCount;\n\t\tint Return;\n\t};\n\n\ttemplate <glm::length_t L, typename T>\n\tint run()\n\t{\n\t\ttype<T> const Data[] =\n\t\t{\n\t\t\t{ 0x00, 1,-1 },\n\t\t\t{ 0x01, 2,-1 },\n\t\t\t{ 0x02, 2,-1 },\n\t\t\t{ 0x06, 3,-1 },\n\t\t\t{ 0x01, 1, 0 },\n\t\t\t{ 0x03, 1, 0 },\n\t\t\t{ 0x03, 2, 1 },\n\t\t\t{ 0x07, 2, 1 },\n\t\t\t{ 0x05, 2, 2 },\n\t\t\t{ 0x0D, 2, 2 }\n\t\t};\n\n\t\tint Error = 0;\n\n\t\tfor (std::size_t i = 0, n = sizeof(Data) / sizeof(type<T>); i < n; ++i)\n\t\t{\n\t\t\tglm::vec<L, int> const Result0 = glm::findNSB<L, T, glm::defaultp>(glm::vec<L, T>(Data[i].Source), glm::vec<L, int>(Data[i].SignificantBitCount));\n\t\t\tError += glm::vec<L, int>(Data[i].Return) == Result0 ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tError += run<1, glm::uint8>();\n\t\tError += run<2, glm::uint8>();\n\t\tError += run<3, glm::uint8>();\n\t\tError += run<4, glm::uint8>();\n\n\t\tError += run<1, glm::uint16>();\n\t\tError += run<2, glm::uint16>();\n\t\tError += run<3, glm::uint16>();\n\t\tError += run<4, glm::uint16>();\n\n\t\tError += run<1, glm::uint32>();\n\t\tError += run<2, glm::uint32>();\n\t\tError += run<3, glm::uint32>();\n\t\tError += run<4, glm::uint32>();\n\n\t\tError += run<1, glm::uint64>();\n\t\tError += run<2, glm::uint64>();\n\t\tError += run<3, glm::uint64>();\n\t\tError += run<4, glm::uint64>();\n\n\t\tError += run<1, glm::int8>();\n\t\tError += run<2, glm::int8>();\n\t\tError += run<3, glm::int8>();\n\t\tError += run<4, glm::int8>();\n\n\t\tError += run<1, glm::int16>();\n\t\tError += run<2, glm::int16>();\n\t\tError += run<3, glm::int16>();\n\t\tError += run<4, glm::int16>();\n\n\t\tError += run<1, glm::int32>();\n\t\tError += run<2, glm::int32>();\n\t\tError += run<3, glm::int32>();\n\t\tError += run<4, glm::int32>();\n\n\t\tError += run<1, glm::int64>();\n\t\tError += run<2, glm::int64>();\n\t\tError += run<3, glm::int64>();\n\t\tError += run<4, glm::int64>();\n\n\n\t\treturn Error;\n\t}\n}//namespace findNSB\n\nint main()\n{\n\tint Error = 0;\n\n\tError += isPowerOfTwo::test();\n\tError += prevPowerOfTwo::test();\n\tError += nextPowerOfTwo::test();\n\tError += prevMultiple::test();\n\tError += nextMultiple::test();\n\tError += findNSB::test();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vector_integer_sized.cpp",
    "content": "#include <glm/ext/vector_integer.hpp>\n#include <glm/ext/vector_int1.hpp>\n#include <glm/ext/vector_int1_sized.hpp>\n#include <glm/ext/vector_uint1.hpp>\n#include <glm/ext/vector_uint1_sized.hpp>\n\ntemplate <typename genType>\nstatic int test_operators()\n{\n\tint Error = 0;\n\n\t{\n\t\tgenType const A(1);\n\t\tgenType const B(1);\n\n\t\tbool const R = A != B;\n\t\tbool const S = A == B;\n\t\tError += (S && !R) ? 0 : 1;\n\t}\n\n\t{\n\t\tgenType const A(1);\n\t\tgenType const B(1);\n\n\t\tgenType const C = A + B;\n\t\tError += C == genType(2) ? 0 : 1;\n\n\t\tgenType const D = A - B;\n\t\tError += D == genType(0) ? 0 : 1;\n\n\t\tgenType const E = A * B;\n\t\tError += E == genType(1) ? 0 : 1;\n\n\t\tgenType const F = A / B;\n\t\tError += F == genType(1) ? 0 : 1;\n\t}\n\n\t{\n\t\tgenType const A(3);\n\t\tgenType const B(2);\n\n\t\tgenType const C = A % B;\n\t\tError += C == genType(1) ? 0 : 1;\n\t}\n\n\t{\n\t\tgenType const A(1);\n\t\tgenType const B(1);\n\t\tgenType const C(0);\n\n\t\tgenType const I = A & B;\n\t\tError += I == genType(1) ? 0 : 1;\n\t\tgenType const D = A & C;\n\t\tError += D == genType(0) ? 0 : 1;\n\n\t\tgenType const E = A | B;\n\t\tError += E == genType(1) ? 0 : 1;\n\t\tgenType const F = A | C;\n\t\tError += F == genType(1) ? 0 : 1;\n\n\t\tgenType const G = A ^ B;\n\t\tError += G == genType(0) ? 0 : 1;\n\t\tgenType const H = A ^ C;\n\t\tError += H == genType(1) ? 0 : 1;\n\t}\n\n\t{\n\t\tgenType const A(0);\n\t\tgenType const B(1);\n\t\tgenType const C(2);\n\n\t\tgenType const D = B << B;\n\t\tError += D == genType(2) ? 0 : 1;\n\t\tgenType const E = C >> B;\n\t\tError += E == genType(1) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_ctor()\n{\n\ttypedef typename genType::value_type T;\n\t\n\tint Error = 0;\n\n\tgenType const A = genType(1);\n\n\tgenType const E(genType(1));\n\tError += A == E ? 0 : 1;\n\n\tgenType const F(E);\n\tError += A == F ? 0 : 1;\n\n\tgenType const B = genType(1);\n\tgenType const G(glm::vec<2, T>(1));\n\tError += B == G ? 0 : 1;\n\n\tgenType const H(glm::vec<3, T>(1));\n\tError += B == H ? 0 : 1;\n\n\tgenType const I(glm::vec<4, T>(1));\n\tError += B == I ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(typename genType::value_type) == sizeof(genType) ? 0 : 1;\n\tError += genType().length() == 1 ? 0 : 1;\n\tError += genType::length() == 1 ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_relational()\n{\n\tint Error = 0;\n\n\tgenType const A(1);\n\tgenType const B(1);\n\tgenType const C(0);\n\n\tError += A == B ? 0 : 1;\n\tError += A != C ? 0 : 1;\n\tError += all(equal(A, B)) ? 0 : 1;\n\tError += any(notEqual(A, C)) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType>\nstatic int test_constexpr()\n{\n#\tif GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\t\tstatic_assert(genType::length() == 1, \"GLM: Failed constexpr\");\n\t\tstatic_assert(genType(1)[0] == 1, \"GLM: Failed constexpr\");\n\t\tstatic_assert(genType(1) == genType(1), \"GLM: Failed constexpr\");\n\t\tstatic_assert(genType(1) != genType(0), \"GLM: Failed constexpr\");\n#\tendif\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_operators<glm::ivec1>();\n\tError += test_operators<glm::i8vec1>();\n\tError += test_operators<glm::i16vec1>();\n\tError += test_operators<glm::i32vec1>();\n\tError += test_operators<glm::i64vec1>();\n\n\tError += test_ctor<glm::ivec1>();\n\tError += test_ctor<glm::i8vec1>();\n\tError += test_ctor<glm::i16vec1>();\n\tError += test_ctor<glm::i32vec1>();\n\tError += test_ctor<glm::i64vec1>();\n\n\tError += test_size<glm::ivec1>();\n\tError += test_size<glm::i8vec1>();\n\tError += test_size<glm::i16vec1>();\n\tError += test_size<glm::i32vec1>();\n\tError += test_size<glm::i64vec1>();\n\n\tError += test_relational<glm::ivec1>();\n\tError += test_relational<glm::i8vec1>();\n\tError += test_relational<glm::i16vec1>();\n\tError += test_relational<glm::i32vec1>();\n\tError += test_relational<glm::i64vec1>();\n\n\tError += test_constexpr<glm::ivec1>();\n\tError += test_constexpr<glm::i8vec1>();\n\tError += test_constexpr<glm::i16vec1>();\n\tError += test_constexpr<glm::i32vec1>();\n\tError += test_constexpr<glm::i64vec1>();\n\n\tError += test_operators<glm::uvec1>();\n\tError += test_operators<glm::u8vec1>();\n\tError += test_operators<glm::u16vec1>();\n\tError += test_operators<glm::u32vec1>();\n\tError += test_operators<glm::u64vec1>();\n\t\n\tError += test_ctor<glm::uvec1>();\n\tError += test_ctor<glm::u8vec1>();\n\tError += test_ctor<glm::u16vec1>();\n\tError += test_ctor<glm::u32vec1>();\n\tError += test_ctor<glm::u64vec1>();\n\t\n\tError += test_size<glm::uvec1>();\n\tError += test_size<glm::u8vec1>();\n\tError += test_size<glm::u16vec1>();\n\tError += test_size<glm::u32vec1>();\n\tError += test_size<glm::u64vec1>();\n\t\n\tError += test_relational<glm::uvec1>();\n\tError += test_relational<glm::u8vec1>();\n\tError += test_relational<glm::u16vec1>();\n\tError += test_relational<glm::u32vec1>();\n\tError += test_relational<glm::u64vec1>();\n\t\n\tError += test_constexpr<glm::uvec1>();\n\tError += test_constexpr<glm::u8vec1>();\n\tError += test_constexpr<glm::u16vec1>();\n\tError += test_constexpr<glm::u32vec1>();\n\tError += test_constexpr<glm::u64vec1>();\n\t\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vector_packing.cpp",
    "content": "#include <glm/ext/vector_packing.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_uint2_sized.hpp>\n#include <glm/ext/vector_int2_sized.hpp>\n#include <glm/gtc/packing.hpp>\n#include <glm/vec2.hpp>\n#include <vector>\n\nint test_packUnorm()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2(1.0f, 0.7f));\n\tA.push_back(glm::vec2(0.5f, 0.1f));\n\n\tfor (std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::u16vec2 C = glm::packUnorm<glm::uint16>(B);\n\t\tglm::vec2 D = glm::unpackUnorm<float>(C);\n\t\tError += glm::all(glm::equal(B, D, 1.0f / 255.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_packSnorm()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2(1.0f, 0.0f));\n\tA.push_back(glm::vec2(-0.5f, -0.7f));\n\tA.push_back(glm::vec2(-0.1f, 0.1f));\n\n\tfor (std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::i16vec2 C = glm::packSnorm<glm::int16>(B);\n\t\tglm::vec2 D = glm::unpackSnorm<float>(C);\n\t\tError += glm::all(glm::equal(B, D, 1.0f / 32767.0f * 2.0f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_packUnorm();\n\tError += test_packSnorm();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vector_reciprocal.cpp",
    "content": "#include <glm/ext/vector_reciprocal.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/scalar_constants.hpp>\n#include <glm/ext/vector_double1.hpp>\n\nstatic int test_sec()\n{\n\tint Error = 0;\n\t\n\tglm::dvec1 const a = glm::sec(glm::dvec1(0.0));\n\tError += glm::all(glm::equal(a, glm::dvec1(1.0), 0.01)) ? 0 : 1;\n\n\tglm::dvec1 const b = glm::sec(glm::dvec1(glm::pi<double>() * 2.0));\n\tError += glm::all(glm::equal(b, glm::dvec1(1.0), 0.01)) ? 0 : 1;\n\n\tglm::dvec1 const c = glm::sec(glm::dvec1(glm::pi<double>() * -2.0));\n\tError += glm::all(glm::equal(c, glm::dvec1(1.0), 0.01)) ? 0 : 1;\n\n\tglm::dvec1 const d = glm::sec(glm::dvec1(glm::pi<double>() * 1.0));\n\tError += glm::all(glm::equal(d, -glm::dvec1(1.0), 0.01)) ? 0 : 1;\n\n\tglm::dvec1 const e = glm::sec(glm::dvec1(glm::pi<double>() * -1.0));\n\tError += glm::all(glm::equal(e, -glm::dvec1(1.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_csc()\n{\n\tint Error = 0;\n\t\n\tglm::dvec1 const a = glm::csc(glm::dvec1(glm::pi<double>() * 0.5));\n\tError += glm::all(glm::equal(a, glm::dvec1(1.0), 0.01)) ? 0 : 1;\n\n\tglm::dvec1 const b = glm::csc(glm::dvec1(glm::pi<double>() * -0.5));\n\tError += glm::all(glm::equal(b, glm::dvec1(-1.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_cot()\n{\n\tint Error = 0;\n\t\n\tglm::dvec1 const a = glm::cot(glm::dvec1(glm::pi<double>() * 0.5));\n\tError += glm::all(glm::equal(a, glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\n\tglm::dvec1 const b = glm::cot(glm::dvec1(glm::pi<double>() * -0.5));\n\tError += glm::all(glm::equal(b, glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_asec()\n{\n\tint Error = 0;\n\t\n\tError += glm::all(glm::equal(glm::asec(glm::dvec1(100000.0)), glm::dvec1(glm::pi<double>() * 0.5), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::asec(glm::dvec1(-100000.0)), glm::dvec1(glm::pi<double>() * 0.5), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_acsc()\n{\n\tint Error = 0;\n\t\n\tError += glm::all(glm::equal(glm::acsc(glm::dvec1(100000.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::acsc(glm::dvec1(-100000.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_acot()\n{\n\tint Error = 0;\n\t\n\tError += glm::all(glm::equal(glm::acot(glm::dvec1(100000.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::acot(glm::dvec1(-100000.0)), glm::dvec1(glm::pi<double>()), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::acot(glm::dvec1(0.0)), glm::dvec1(glm::pi<double>() * 0.5), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_sech()\n{\n\tint Error = 0;\n\t\n\tError += glm::all(glm::equal(glm::sech(glm::dvec1(100000.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::sech(glm::dvec1(-100000.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::sech(glm::dvec1(0.0)), glm::dvec1(1.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_csch()\n{\n\tint Error = 0;\n\t\n\tError += glm::all(glm::equal(glm::csch(glm::dvec1(100000.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::csch(glm::dvec1(-100000.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_coth()\n{\n\tint Error = 0;\n\t\n\tglm::dvec1 const a = glm::coth(glm::dvec1(100.0));\n\tError += glm::all(glm::equal(a, glm::dvec1(1.0), 0.01)) ? 0 : 1;\n\t\n\tglm::dvec1 const b = glm::coth(glm::dvec1(-100.0));\n\tError += glm::all(glm::equal(b, glm::dvec1(-1.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_asech()\n{\n\tint Error = 0;\n\t\n\tglm::dvec1 const a = glm::asech(glm::dvec1(1.0));\n\tError += glm::all(glm::equal(a, glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_acsch()\n{\n\tint Error = 0;\n\t\n\tglm::dvec1 const a(glm::acsch(glm::dvec1(0.01)));\n\tError += a.x > 1.0 ? 0 : 1;\n\n\tglm::dvec1 const b(glm::acsch(glm::dvec1(-0.01)));\n\tError += b.x < -1.0 ? 0 : 1;\n\n\tError += glm::all(glm::equal(glm::acsch(glm::dvec1(100.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::acsch(glm::dvec1(-100.0)), glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_acoth()\n{\n\tint Error = 0;\n\t\n\tglm::dvec1 const a = glm::acoth(glm::dvec1(1.00001));\n\tError += a.x > 6.0 ? 0 : 1;\n\t\n\tglm::dvec1 const b = glm::acoth(glm::dvec1(-1.00001));\n\tError += b.x < -6.0 ? 0 : 1;\n\n\tglm::dvec1 const c = glm::acoth(glm::dvec1(10000.0));\n\tError += glm::all(glm::equal(c, glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\t\n\tglm::dvec1 const d = glm::acoth(glm::dvec1(-10000.0));\n\tError += glm::all(glm::equal(d, glm::dvec1(0.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\n\nint main()\n{\n\tint Error = 0;\n\t\n\tError += test_sec();\n\tError += test_csc();\n\tError += test_cot();\n\n\tError += test_asec();\n\tError += test_acsc();\n\tError += test_acot();\n\n\tError += test_sech();\n\tError += test_csch();\n\tError += test_coth();\n\n\tError += test_asech();\n\tError += test_acsch();\n\tError += test_acoth();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vector_relational.cpp",
    "content": "#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_float1.hpp>\n#include <glm/ext/vector_float1_precision.hpp>\n#include <glm/ext/vector_float2.hpp>\n#include <glm/ext/vector_float2_precision.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float3_precision.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/vector_float4_precision.hpp>\n#include <glm/ext/vector_double1.hpp>\n#include <glm/ext/vector_double1_precision.hpp>\n#include <glm/ext/vector_double2.hpp>\n#include <glm/ext/vector_double2_precision.hpp>\n#include <glm/ext/vector_double3.hpp>\n#include <glm/ext/vector_double3_precision.hpp>\n#include <glm/ext/vector_double4.hpp>\n#include <glm/ext/vector_double4_precision.hpp>\n#include <glm/ext/vector_ulp.hpp>\n\ntemplate <typename vecType>\nstatic int test_equal()\n{\n\ttypedef typename vecType::value_type valType;\n\n\tvalType const A = static_cast<valType>(1.01f);\n\tvalType const B = static_cast<valType>(1.02f);\n\tvalType const Epsilon1 = static_cast<valType>(0.1f);\n\tvalType const Epsilon2 = static_cast<valType>(0.001f);\n\n\tint Error = 0;\n\n\tError += glm::all(glm::equal(vecType(A), vecType(B), Epsilon1)) ? 0 : 1;\n\tError += glm::all(glm::equal(vecType(A), vecType(B), vecType(Epsilon1))) ? 0 : 1;\n\n\tError += !glm::any(glm::equal(vecType(A), vecType(B), Epsilon2)) ? 0 : 1;\n\tError += !glm::any(glm::equal(vecType(A), vecType(B), vecType(Epsilon2))) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename vecType>\nstatic int test_notEqual()\n{\n\ttypedef typename vecType::value_type valType;\n\n\tvalType const A = static_cast<valType>(1.01f);\n\tvalType const B = static_cast<valType>(1.02f);\n\tvalType const Epsilon1 = static_cast<valType>(0.1f);\n\tvalType const Epsilon2 = static_cast<valType>(0.001f);\n\n\tint Error = 0;\n\n\tError += glm::all(glm::notEqual(vecType(A), vecType(B), Epsilon2)) ? 0 : 1;\n\tError += glm::all(glm::notEqual(vecType(A), vecType(B), vecType(Epsilon2))) ? 0 : 1;\n\n\tError += !glm::any(glm::notEqual(vecType(A), vecType(B), Epsilon1)) ? 0 : 1;\n\tError += !glm::any(glm::notEqual(vecType(A), vecType(B), vecType(Epsilon1))) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename genType, typename valType>\nstatic int test_constexpr()\n{\n#\tif GLM_CONFIG_CONSTEXP == GLM_ENABLE\n\t\tstatic_assert(glm::all(glm::equal(genType(static_cast<valType>(1.01f)), genType(static_cast<valType>(1.02f)), static_cast<valType>(0.1f))), \"GLM: Failed constexpr\");\n#\tendif\n\n\treturn 0;\n}\n\ntemplate <typename T>\nstatic int test_equal_ulps()\n{\n\ttypedef glm::vec<4, T, glm::defaultp> vec4;\n\n\tT const One(1);\n\tvec4 const Ones(1);\n\n\tint Error = 0;\n\n\tT const ULP1Plus = glm::nextFloat(One);\n\tError += glm::all(glm::equal(Ones, vec4(ULP1Plus), 1)) ? 0 : 1;\n\n\tT const ULP2Plus = glm::nextFloat(ULP1Plus);\n\tError += !glm::all(glm::equal(Ones, vec4(ULP2Plus), 1)) ? 0 : 1;\n\n\tT const ULP1Minus = glm::prevFloat(One);\n\tError += glm::all(glm::equal(Ones, vec4(ULP1Minus), 1)) ? 0 : 1;\n\n\tT const ULP2Minus = glm::prevFloat(ULP1Minus);\n\tError += !glm::all(glm::equal(Ones, vec4(ULP2Minus), 1)) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <typename T>\nstatic int test_notEqual_ulps()\n{\n\ttypedef glm::vec<4, T, glm::defaultp> vec4;\n\n\tT const One(1);\n\tvec4 const Ones(1);\n\n\tint Error = 0;\n\n\tT const ULP1Plus = glm::nextFloat(One);\n\tError += !glm::all(glm::notEqual(Ones, vec4(ULP1Plus), 1)) ? 0 : 1;\n\n\tT const ULP2Plus = glm::nextFloat(ULP1Plus);\n\tError += glm::all(glm::notEqual(Ones, vec4(ULP2Plus), 1)) ? 0 : 1;\n\n\tT const ULP1Minus = glm::prevFloat(One);\n\tError += !glm::all(glm::notEqual(Ones, vec4(ULP1Minus), 1)) ? 0 : 1;\n\n\tT const ULP2Minus = glm::prevFloat(ULP1Minus);\n\tError += glm::all(glm::notEqual(Ones, vec4(ULP2Minus), 1)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_equal_ulps<float>();\n\tError += test_equal_ulps<double>();\n\tError += test_notEqual_ulps<float>();\n\tError += test_notEqual_ulps<double>();\n\n\tError += test_equal<glm::vec1>();\n\tError += test_equal<glm::lowp_vec1>();\n\tError += test_equal<glm::mediump_vec1>();\n\tError += test_equal<glm::highp_vec1>();\n\tError += test_equal<glm::vec2>();\n\tError += test_equal<glm::lowp_vec2>();\n\tError += test_equal<glm::mediump_vec2>();\n\tError += test_equal<glm::highp_vec2>();\n\tError += test_equal<glm::vec3>();\n\tError += test_equal<glm::lowp_vec3>();\n\tError += test_equal<glm::mediump_vec3>();\n\tError += test_equal<glm::highp_vec3>();\n\tError += test_equal<glm::vec4>();\n\tError += test_equal<glm::lowp_vec4>();\n\tError += test_equal<glm::mediump_vec4>();\n\tError += test_equal<glm::highp_vec4>();\n\n\tError += test_equal<glm::dvec1>();\n\tError += test_equal<glm::lowp_dvec1>();\n\tError += test_equal<glm::mediump_dvec1>();\n\tError += test_equal<glm::highp_dvec1>();\n\tError += test_equal<glm::dvec2>();\n\tError += test_equal<glm::lowp_dvec2>();\n\tError += test_equal<glm::mediump_dvec2>();\n\tError += test_equal<glm::highp_dvec2>();\n\tError += test_equal<glm::dvec3>();\n\tError += test_equal<glm::lowp_dvec3>();\n\tError += test_equal<glm::mediump_dvec3>();\n\tError += test_equal<glm::highp_dvec3>();\n\tError += test_equal<glm::dvec4>();\n\tError += test_equal<glm::lowp_dvec4>();\n\tError += test_equal<glm::mediump_dvec4>();\n\tError += test_equal<glm::highp_dvec4>();\n\n\tError += test_notEqual<glm::vec1>();\n\tError += test_notEqual<glm::lowp_vec1>();\n\tError += test_notEqual<glm::mediump_vec1>();\n\tError += test_notEqual<glm::highp_vec1>();\n\tError += test_notEqual<glm::vec2>();\n\tError += test_notEqual<glm::lowp_vec2>();\n\tError += test_notEqual<glm::mediump_vec2>();\n\tError += test_notEqual<glm::highp_vec2>();\n\tError += test_notEqual<glm::vec3>();\n\tError += test_notEqual<glm::lowp_vec3>();\n\tError += test_notEqual<glm::mediump_vec3>();\n\tError += test_notEqual<glm::highp_vec3>();\n\tError += test_notEqual<glm::vec4>();\n\tError += test_notEqual<glm::lowp_vec4>();\n\tError += test_notEqual<glm::mediump_vec4>();\n\tError += test_notEqual<glm::highp_vec4>();\n\n\tError += test_notEqual<glm::dvec1>();\n\tError += test_notEqual<glm::lowp_dvec1>();\n\tError += test_notEqual<glm::mediump_dvec1>();\n\tError += test_notEqual<glm::highp_dvec1>();\n\tError += test_notEqual<glm::dvec2>();\n\tError += test_notEqual<glm::lowp_dvec2>();\n\tError += test_notEqual<glm::mediump_dvec2>();\n\tError += test_notEqual<glm::highp_dvec2>();\n\tError += test_notEqual<glm::dvec3>();\n\tError += test_notEqual<glm::lowp_dvec3>();\n\tError += test_notEqual<glm::mediump_dvec3>();\n\tError += test_notEqual<glm::highp_dvec3>();\n\tError += test_notEqual<glm::dvec4>();\n\tError += test_notEqual<glm::lowp_dvec4>();\n\tError += test_notEqual<glm::mediump_dvec4>();\n\tError += test_notEqual<glm::highp_dvec4>();\n\n\tError += test_constexpr<glm::vec1, float>();\n\tError += test_constexpr<glm::vec2, float>();\n\tError += test_constexpr<glm::vec3, float>();\n\tError += test_constexpr<glm::vec4, float>();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vector_uint1_sized.cpp",
    "content": "#include <glm/ext/vector_uint1_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\n\tstatic_assert(sizeof(glm::u8vec1) == 1, \"uint8 size isn't 1 byte on this platform\");\n\tstatic_assert(sizeof(glm::u16vec1) == 2, \"uint16 size isn't 2 bytes on this platform\");\n\tstatic_assert(sizeof(glm::u32vec1) == 4, \"uint32 size isn't 4 bytes on this platform\");\n\tstatic_assert(sizeof(glm::u64vec1) == 8, \"uint64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec1) == 1 ? 0 : 1;\n\tError += sizeof(glm::u16vec1) == 2 ? 0 : 1;\n\tError += sizeof(glm::u32vec1) == 4 ? 0 : 1;\n\tError += sizeof(glm::u64vec1) == 8 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec1) < sizeof(glm::u16vec1) ? 0 : 1;\n\tError += sizeof(glm::u16vec1) < sizeof(glm::u32vec1) ? 0 : 1;\n\tError += sizeof(glm::u32vec1) < sizeof(glm::u64vec1) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vector_uint2_sized.cpp",
    "content": "#include <glm/ext/vector_uint2_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8vec2) == 2, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16vec2) == 4, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32vec2) == 8, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64vec2) == 16, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec2) == 2 ? 0 : 1;\n\tError += sizeof(glm::u16vec2) == 4 ? 0 : 1;\n\tError += sizeof(glm::u32vec2) == 8 ? 0 : 1;\n\tError += sizeof(glm::u64vec2) == 16 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec2) < sizeof(glm::u16vec2) ? 0 : 1;\n\tError += sizeof(glm::u16vec2) < sizeof(glm::u32vec2) ? 0 : 1;\n\tError += sizeof(glm::u32vec2) < sizeof(glm::u64vec2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vector_uint3_sized.cpp",
    "content": "#include <glm/ext/vector_uint3_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8vec3) == 3, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16vec3) == 6, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32vec3) == 12, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64vec3) == 24, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec3) == 3 ? 0 : 1;\n\tError += sizeof(glm::u16vec3) == 6 ? 0 : 1;\n\tError += sizeof(glm::u32vec3) == 12 ? 0 : 1;\n\tError += sizeof(glm::u64vec3) == 24 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec3) < sizeof(glm::u16vec3) ? 0 : 1;\n\tError += sizeof(glm::u16vec3) < sizeof(glm::u32vec3) ? 0 : 1;\n\tError += sizeof(glm::u32vec3) < sizeof(glm::u64vec3) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vector_uint4_sized.cpp",
    "content": "#include <glm/ext/vector_uint4_sized.hpp>\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::u8vec4) == 4, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::u16vec4) == 8, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::u32vec4) == 16, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::u64vec4) == 32, \"int64 size isn't 8 bytes on this platform\");\n#endif\n\nstatic int test_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec4) == 4 ? 0 : 1;\n\tError += sizeof(glm::u16vec4) == 8 ? 0 : 1;\n\tError += sizeof(glm::u32vec4) == 16 ? 0 : 1;\n\tError += sizeof(glm::u64vec4) == 32 ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_comp()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec4) < sizeof(glm::u16vec4) ? 0 : 1;\n\tError += sizeof(glm::u16vec4) < sizeof(glm::u32vec4) ? 0 : 1;\n\tError += sizeof(glm::u32vec4) < sizeof(glm::u64vec4) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_size();\n\tError += test_comp();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/ext/ext_vector_ulp.cpp",
    "content": "#include <glm/ext/vector_ulp.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <glm/ext/vector_double4.hpp>\n#include <glm/ext/vector_int4.hpp>\n\nstatic int test_ulp_float_dist()\n{\n\tint Error = 0;\n\n\tglm::vec4 const A(1.0f);\n\n\tglm::vec4 const B = glm::nextFloat(A);\n\tError += glm::any(glm::notEqual(A, B, 0)) ? 0 : 1;\n\tglm::vec4 const C = glm::prevFloat(B);\n\tError += glm::all(glm::equal(A, C, 0)) ? 0 : 1;\n\n\tglm::ivec4 const D = glm::floatDistance(A, B);\n\tError += D == glm::ivec4(1) ? 0 : 1;\n\tglm::ivec4 const E = glm::floatDistance(A, C);\n\tError += E == glm::ivec4(0) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_ulp_float_step()\n{\n\tint Error = 0;\n\n\tglm::vec4 const A(1.0f);\n\n\tfor(int i = 10; i < 1000; i *= 10)\n\t{\n\t\tglm::vec4 const B = glm::nextFloat(A, i);\n\t\tError += glm::any(glm::notEqual(A, B, 0)) ? 0 : 1;\n\t\tglm::vec4 const C = glm::prevFloat(B, i);\n\t\tError += glm::all(glm::equal(A, C, 0)) ? 0 : 1;\n\n\t\tglm::ivec4 const D = glm::floatDistance(A, B);\n\t\tError += D == glm::ivec4(i) ? 0 : 1;\n\t\tglm::ivec4 const E = glm::floatDistance(A, C);\n\t\tError += E == glm::ivec4(0) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_ulp_double_dist()\n{\n\tint Error = 0;\n\n\tglm::dvec4 const A(1.0);\n\n\tglm::dvec4 const B = glm::nextFloat(A);\n\tError += glm::any(glm::notEqual(A, B, 0)) ? 0 : 1;\n\tglm::dvec4 const C = glm::prevFloat(B);\n\tError += glm::all(glm::equal(A, C, 0)) ? 0 : 1;\n\n\tglm::ivec4 const D(glm::floatDistance(A, B));\n\tError += D == glm::ivec4(1) ? 0 : 1;\n\tglm::ivec4 const E = glm::floatDistance(A, C);\n\tError += E == glm::ivec4(0) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_ulp_double_step()\n{\n\tint Error = 0;\n\n\tglm::dvec4 const A(1.0);\n\n\tfor(int i = 10; i < 1000; i *= 10)\n\t{\n\t\tglm::dvec4 const B = glm::nextFloat(A, i);\n\t\tError += glm::any(glm::notEqual(A, B, 0)) ? 0 : 1;\n\t\tglm::dvec4 const C = glm::prevFloat(B, i);\n\t\tError += glm::all(glm::equal(A, C, 0)) ? 0 : 1;\n\n\t\tglm::ivec4 const D(glm::floatDistance(A, B));\n\t\tError += D == glm::ivec4(i) ? 0 : 1;\n\t\tglm::ivec4 const E(glm::floatDistance(A, C));\n\t\tError += E == glm::ivec4(0) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_ulp_float_dist();\n\tError += test_ulp_float_step();\n\tError += test_ulp_double_dist();\n\tError += test_ulp_double_step();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/CMakeLists.txt",
    "content": "glmCreateTestGTC(gtc_bitfield)\nglmCreateTestGTC(gtc_color_space)\nglmCreateTestGTC(gtc_constants)\nglmCreateTestGTC(gtc_epsilon)\nglmCreateTestGTC(gtc_integer)\nglmCreateTestGTC(gtc_matrix_access)\nglmCreateTestGTC(gtc_matrix_integer)\nglmCreateTestGTC(gtc_matrix_inverse)\nglmCreateTestGTC(gtc_matrix_transform)\nglmCreateTestGTC(gtc_noise)\nglmCreateTestGTC(gtc_packing)\nglmCreateTestGTC(gtc_quaternion)\nglmCreateTestGTC(gtc_random)\nglmCreateTestGTC(gtc_round)\nglmCreateTestGTC(gtc_reciprocal)\nglmCreateTestGTC(gtc_type_aligned)\nglmCreateTestGTC(gtc_type_precision)\nglmCreateTestGTC(gtc_type_ptr)\nglmCreateTestGTC(gtc_ulp)\nglmCreateTestGTC(gtc_vec1)\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_bitfield.cpp",
    "content": "#include <glm/gtc/bitfield.hpp>\n#include <glm/gtc/type_precision.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/integer.hpp>\n#include <ctime>\n#include <cstdio>\n#include <vector>\n\nnamespace mask\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tgenType\t\tReturn;\n\t};\n\n\tinline int mask_zero(int Bits)\n\t{\n\t\treturn ~((~0) << Bits);\n\t}\n\n\tinline int mask_mix(int Bits)\n\t{\n\t\treturn Bits >= sizeof(int) * 8 ? 0xffffffff : (static_cast<int>(1) << Bits) - static_cast<int>(1);\n\t}\n\n\tinline int mask_half(int Bits)\n\t{\n\t\t// We do the shift in two steps because 1 << 32 on an int is undefined.\n\n\t\tint const Half = Bits >> 1;\n\t\tint const Fill = ~0;\n\t\tint const ShiftHaft = (Fill << Half);\n\t\tint const Rest = Bits - Half;\n\t\tint const Reversed = ShiftHaft << Rest;\n\n\t\treturn ~Reversed;\n\t}\n\n\tinline int mask_loop(int Bits)\n\t{\n\t\tint Mask = 0;\n\t\tfor(int Bit = 0; Bit < Bits; ++Bit)\n\t\t\tMask |= (static_cast<int>(1) << Bit);\n\t\treturn Mask;\n\t}\n\n\tint perf()\n\t{\n\t\tint const Count = 100000000;\n\n\t\tstd::clock_t Timestamp1 = std::clock();\n\n\t\t{\n\t\t\tstd::vector<int> Mask;\n\t\t\tMask.resize(Count);\n\t\t\tfor(int i = 0; i < Count; ++i)\n\t\t\t\tMask[i] = mask_mix(i % 32);\n\t\t}\n\n\t\tstd::clock_t Timestamp2 = std::clock();\n\n\t\t{\n\t\t\tstd::vector<int> Mask;\n\t\t\tMask.resize(Count);\n\t\t\tfor(int i = 0; i < Count; ++i)\n\t\t\t\tMask[i] = mask_loop(i % 32);\n\t\t}\n\n\t\tstd::clock_t Timestamp3 = std::clock();\n\n\t\t{\n\t\t\tstd::vector<int> Mask;\n\t\t\tMask.resize(Count);\n\t\t\tfor(int i = 0; i < Count; ++i)\n\t\t\t\tMask[i] = glm::mask(i % 32);\n\t\t}\n\n\t\tstd::clock_t Timestamp4 = std::clock();\n\n\t\t{\n\t\t\tstd::vector<int> Mask;\n\t\t\tMask.resize(Count);\n\t\t\tfor(int i = 0; i < Count; ++i)\n\t\t\t\tMask[i] = mask_zero(i % 32);\n\t\t}\n\n\t\tstd::clock_t Timestamp5 = std::clock();\n\n\t\t{\n\t\t\tstd::vector<int> Mask;\n\t\t\tMask.resize(Count);\n\t\t\tfor(int i = 0; i < Count; ++i)\n\t\t\t\tMask[i] = mask_half(i % 32);\n\t\t}\n\n\t\tstd::clock_t Timestamp6 = std::clock();\n\n\t\tstd::clock_t TimeMix = Timestamp2 - Timestamp1;\n\t\tstd::clock_t TimeLoop = Timestamp3 - Timestamp2;\n\t\tstd::clock_t TimeDefault = Timestamp4 - Timestamp3;\n\t\tstd::clock_t TimeZero = Timestamp5 - Timestamp4;\n\t\tstd::clock_t TimeHalf = Timestamp6 - Timestamp5;\n\n\t\tstd::printf(\"mask[mix]: %d\\n\", static_cast<unsigned int>(TimeMix));\n\t\tstd::printf(\"mask[loop]: %d\\n\", static_cast<unsigned int>(TimeLoop));\n\t\tstd::printf(\"mask[default]: %d\\n\", static_cast<unsigned int>(TimeDefault));\n\t\tstd::printf(\"mask[zero]: %d\\n\", static_cast<unsigned int>(TimeZero));\n\t\tstd::printf(\"mask[half]: %d\\n\", static_cast<unsigned int>(TimeHalf));\n\n\t\treturn TimeDefault < TimeLoop ? 0 : 1;\n\t}\n\n\tint test_uint()\n\t{\n\t\ttype<glm::uint> const Data[] =\n\t\t{\n\t\t\t{ 0, 0x00000000},\n\t\t\t{ 1, 0x00000001},\n\t\t\t{ 2, 0x00000003},\n\t\t\t{ 3, 0x00000007},\n\t\t\t{31, 0x7fffffff},\n\t\t\t{32, 0xffffffff}\n\t\t};\n\n\t\tint Error = 0;\n/* mask_zero is sadly not a correct code\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int>); ++i)\n\t\t{\n\t\t\tint Result = mask_zero(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n*/\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int>); ++i)\n\t\t{\n\t\t\tint Result = mask_mix(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int>); ++i)\n\t\t{\n\t\t\tint Result = mask_half(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int>); ++i)\n\t\t{\n\t\t\tint Result = mask_loop(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0; i < sizeof(Data) / sizeof(type<int>); ++i)\n\t\t{\n\t\t\tint Result = glm::mask(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_uvec4()\n\t{\n\t\ttype<glm::ivec4> const Data[] =\n\t\t{\n\t\t\t{glm::ivec4( 0), glm::ivec4(0x00000000)},\n\t\t\t{glm::ivec4( 1), glm::ivec4(0x00000001)},\n\t\t\t{glm::ivec4( 2), glm::ivec4(0x00000003)},\n\t\t\t{glm::ivec4( 3), glm::ivec4(0x00000007)},\n\t\t\t{glm::ivec4(31), glm::ivec4(0x7fffffff)},\n\t\t\t{glm::ivec4(32), glm::ivec4(0xffffffff)}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::ivec4>); i < n; ++i)\n\t\t{\n\t\t\tglm::ivec4 Result = glm::mask(Data[i].Value);\n\t\t\tError += glm::all(glm::equal(Data[i].Return, Result)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tError += test_uint();\n\t\tError += test_uvec4();\n\n\t\treturn Error;\n\t}\n}//namespace mask\n\nnamespace bitfieldInterleave3\n{\n\ttemplate<typename PARAM, typename RET>\n\tinline RET refBitfieldInterleave(PARAM x, PARAM y, PARAM z)\n\t{\n\t\tRET Result = 0; \n\t\tfor(RET i = 0; i < sizeof(PARAM) * 8; ++i)\n\t\t{\n\t\t\tResult |= ((RET(x) & (RET(1U) << i)) << ((i << 1) + 0));\n\t\t\tResult |= ((RET(y) & (RET(1U) << i)) << ((i << 1) + 1));\n\t\t\tResult |= ((RET(z) & (RET(1U) << i)) << ((i << 1) + 2));\n\t\t}\n\t\treturn Result;\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tglm::uint16 x_max = 1 << 11;\n\t\tglm::uint16 y_max = 1 << 11;\n\t\tglm::uint16 z_max = 1 << 11;\n\n\t\tfor(glm::uint16 z = 0; z < z_max; z += 27)\n\t\tfor(glm::uint16 y = 0; y < y_max; y += 27)\n\t\tfor(glm::uint16 x = 0; x < x_max; x += 27)\n\t\t{\n\t\t\tglm::uint64 ResultA = refBitfieldInterleave<glm::uint16, glm::uint64>(x, y, z);\n\t\t\tglm::uint64 ResultB = glm::bitfieldInterleave(x, y, z);\n\t\t\tError += ResultA == ResultB ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}\n\nnamespace bitfieldInterleave4\n{\n\ttemplate<typename PARAM, typename RET>\n\tinline RET loopBitfieldInterleave(PARAM x, PARAM y, PARAM z, PARAM w)\n\t{\n\t\tRET const v[4] = {x, y, z, w};\n\t\tRET Result = 0; \n\t\tfor(RET i = 0; i < sizeof(PARAM) * 8; i++)\n\t\t{\n\t\t\tResult |= ((((v[0] >> i) & 1U)) << ((i << 2) + 0));\n\t\t\tResult |= ((((v[1] >> i) & 1U)) << ((i << 2) + 1));\n\t\t\tResult |= ((((v[2] >> i) & 1U)) << ((i << 2) + 2));\n\t\t\tResult |= ((((v[3] >> i) & 1U)) << ((i << 2) + 3));\n\t\t}\n\t\treturn Result;\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tglm::uint16 x_max = 1 << 11;\n\t\tglm::uint16 y_max = 1 << 11;\n\t\tglm::uint16 z_max = 1 << 11;\n\t\tglm::uint16 w_max = 1 << 11;\n\n\t\tfor(glm::uint16 w = 0; w < w_max; w += 27)\n\t\tfor(glm::uint16 z = 0; z < z_max; z += 27)\n\t\tfor(glm::uint16 y = 0; y < y_max; y += 27)\n\t\tfor(glm::uint16 x = 0; x < x_max; x += 27)\n\t\t{\n\t\t\tglm::uint64 ResultA = loopBitfieldInterleave<glm::uint16, glm::uint64>(x, y, z, w);\n\t\t\tglm::uint64 ResultB = glm::bitfieldInterleave(x, y, z, w);\n\t\t\tError += ResultA == ResultB ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}\n\nnamespace bitfieldInterleave\n{\n\tinline glm::uint64 fastBitfieldInterleave(glm::uint32 x, glm::uint32 y)\n\t{\n\t\tglm::uint64 REG1;\n\t\tglm::uint64 REG2;\n\n\t\tREG1 = x;\n\t\tREG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);\n\t\tREG1 = ((REG1 <<  8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);\n\t\tREG1 = ((REG1 <<  4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t\tREG1 = ((REG1 <<  2) | REG1) & glm::uint64(0x3333333333333333);\n\t\tREG1 = ((REG1 <<  1) | REG1) & glm::uint64(0x5555555555555555);\n\n\t\tREG2 = y;\n\t\tREG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);\n\t\tREG2 = ((REG2 <<  8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);\n\t\tREG2 = ((REG2 <<  4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t\tREG2 = ((REG2 <<  2) | REG2) & glm::uint64(0x3333333333333333);\n\t\tREG2 = ((REG2 <<  1) | REG2) & glm::uint64(0x5555555555555555);\n\n\t\treturn REG1 | (REG2 << 1);\n\t}\n\n\tinline glm::uint64 interleaveBitfieldInterleave(glm::uint32 x, glm::uint32 y)\n\t{\n\t\tglm::uint64 REG1;\n\t\tglm::uint64 REG2;\n\n\t\tREG1 = x;\n\t\tREG2 = y;\n\n\t\tREG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);\n\t\tREG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);\n\n\t\tREG1 = ((REG1 <<  8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);\n\t\tREG2 = ((REG2 <<  8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);\n\n\t\tREG1 = ((REG1 <<  4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t\tREG2 = ((REG2 <<  4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\n\t\tREG1 = ((REG1 <<  2) | REG1) & glm::uint64(0x3333333333333333);\n\t\tREG2 = ((REG2 <<  2) | REG2) & glm::uint64(0x3333333333333333);\n\n\t\tREG1 = ((REG1 <<  1) | REG1) & glm::uint64(0x5555555555555555);\n\t\tREG2 = ((REG2 <<  1) | REG2) & glm::uint64(0x5555555555555555);\n\n\t\treturn REG1 | (REG2 << 1);\n\t}\n/*\n\tinline glm::uint64 loopBitfieldInterleave(glm::uint32 x, glm::uint32 y)\n\t{\n\t\tstatic glm::uint64 const Mask[5] = \n\t\t{\n\t\t\t0x5555555555555555,\n\t\t\t0x3333333333333333,\n\t\t\t0x0F0F0F0F0F0F0F0F,\n\t\t\t0x00FF00FF00FF00FF,\n\t\t\t0x0000FFFF0000FFFF\n\t\t};\n\n\t\tglm::uint64 REG1 = x;\n\t\tglm::uint64 REG2 = y;\n\t\tfor(int i = 4; i >= 0; --i)\n\t\t{\n\t\t\tREG1 = ((REG1 << (1 << i)) | REG1) & Mask[i];\n\t\t\tREG2 = ((REG2 << (1 << i)) | REG2) & Mask[i];\n\t\t}\n\n\t\treturn REG1 | (REG2 << 1);\n\t}\n*/\n#if GLM_ARCH & GLM_ARCH_SSE2_BIT\n\tinline glm::uint64 sseBitfieldInterleave(glm::uint32 x, glm::uint32 y)\n\t{\n\t\t__m128i const Array = _mm_set_epi32(0, y, 0, x);\n\n\t\t__m128i const Mask4 = _mm_set1_epi32(0x0000FFFF);\n\t\t__m128i const Mask3 = _mm_set1_epi32(0x00FF00FF);\n\t\t__m128i const Mask2 = _mm_set1_epi32(0x0F0F0F0F);\n\t\t__m128i const Mask1 = _mm_set1_epi32(0x33333333);\n\t\t__m128i const Mask0 = _mm_set1_epi32(0x55555555);\n\n\t\t__m128i Reg1;\n\t\t__m128i Reg2;\n\n\t\t// REG1 = x;\n\t\t// REG2 = y;\n\t\tReg1 = _mm_load_si128(&Array);\n\n\t\t//REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);\n\t\t//REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);\n\t\tReg2 = _mm_slli_si128(Reg1, 2);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask4);\n\n\t\t//REG1 = ((REG1 <<  8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);\n\t\t//REG2 = ((REG2 <<  8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);\n\t\tReg2 = _mm_slli_si128(Reg1, 1);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask3);\n\n\t\t//REG1 = ((REG1 <<  4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t\t//REG2 = ((REG2 <<  4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t\tReg2 = _mm_slli_epi32(Reg1, 4);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask2);\n\n\t\t//REG1 = ((REG1 <<  2) | REG1) & glm::uint64(0x3333333333333333);\n\t\t//REG2 = ((REG2 <<  2) | REG2) & glm::uint64(0x3333333333333333);\n\t\tReg2 = _mm_slli_epi32(Reg1, 2);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask1);\n\n\t\t//REG1 = ((REG1 <<  1) | REG1) & glm::uint64(0x5555555555555555);\n\t\t//REG2 = ((REG2 <<  1) | REG2) & glm::uint64(0x5555555555555555);\n\t\tReg2 = _mm_slli_epi32(Reg1, 1);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask0);\n\n\t\t//return REG1 | (REG2 << 1);\n\t\tReg2 = _mm_slli_epi32(Reg1, 1);\n\t\tReg2 = _mm_srli_si128(Reg2, 8);\n\t\tReg1 = _mm_or_si128(Reg1, Reg2);\n\t\n\t\t__m128i Result;\n\t\t_mm_store_si128(&Result, Reg1);\n\t\treturn *reinterpret_cast<glm::uint64*>(&Result);\n\t}\n\n\tinline glm::uint64 sseUnalignedBitfieldInterleave(glm::uint32 x, glm::uint32 y)\n\t{\n\t\t__m128i const Array = _mm_set_epi32(0, y, 0, x);\n\n\t\t__m128i const Mask4 = _mm_set1_epi32(0x0000FFFF);\n\t\t__m128i const Mask3 = _mm_set1_epi32(0x00FF00FF);\n\t\t__m128i const Mask2 = _mm_set1_epi32(0x0F0F0F0F);\n\t\t__m128i const Mask1 = _mm_set1_epi32(0x33333333);\n\t\t__m128i const Mask0 = _mm_set1_epi32(0x55555555);\n\n\t\t__m128i Reg1;\n\t\t__m128i Reg2;\n\n\t\t// REG1 = x;\n\t\t// REG2 = y;\n\t\tReg1 = _mm_loadu_si128(&Array);\n\n\t\t//REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF);\n\t\t//REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF);\n\t\tReg2 = _mm_slli_si128(Reg1, 2);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask4);\n\n\t\t//REG1 = ((REG1 <<  8) | REG1) & glm::uint64(0x00FF00FF00FF00FF);\n\t\t//REG2 = ((REG2 <<  8) | REG2) & glm::uint64(0x00FF00FF00FF00FF);\n\t\tReg2 = _mm_slli_si128(Reg1, 1);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask3);\n\n\t\t//REG1 = ((REG1 <<  4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t\t//REG2 = ((REG2 <<  4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F);\n\t\tReg2 = _mm_slli_epi32(Reg1, 4);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask2);\n\n\t\t//REG1 = ((REG1 <<  2) | REG1) & glm::uint64(0x3333333333333333);\n\t\t//REG2 = ((REG2 <<  2) | REG2) & glm::uint64(0x3333333333333333);\n\t\tReg2 = _mm_slli_epi32(Reg1, 2);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask1);\n\n\t\t//REG1 = ((REG1 <<  1) | REG1) & glm::uint64(0x5555555555555555);\n\t\t//REG2 = ((REG2 <<  1) | REG2) & glm::uint64(0x5555555555555555);\n\t\tReg2 = _mm_slli_epi32(Reg1, 1);\n\t\tReg1 = _mm_or_si128(Reg2, Reg1);\n\t\tReg1 = _mm_and_si128(Reg1, Mask0);\n\n\t\t//return REG1 | (REG2 << 1);\n\t\tReg2 = _mm_slli_epi32(Reg1, 1);\n\t\tReg2 = _mm_srli_si128(Reg2, 8);\n\t\tReg1 = _mm_or_si128(Reg1, Reg2);\n\n\t\t__m128i Result;\n\t\t_mm_store_si128(&Result, Reg1);\n\t\treturn *reinterpret_cast<glm::uint64*>(&Result);\n\t}\n#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n/*\n\t\t{\n\t\t\tfor(glm::uint32 y = 0; y < (1 << 10); ++y)\n\t\t\tfor(glm::uint32 x = 0; x < (1 << 10); ++x)\n\t\t\t{\n\t\t\t\tglm::uint64 A = glm::bitfieldInterleave(x, y);\n\t\t\t\tglm::uint64 B = fastBitfieldInterleave(x, y);\n\t\t\t\t//glm::uint64 C = loopBitfieldInterleave(x, y);\n\t\t\t\tglm::uint64 D = interleaveBitfieldInterleave(x, y);\n\n\t\t\t\tassert(A == B);\n\t\t\t\t//assert(A == C);\n\t\t\t\tassert(A == D);\n\n#\t\t\t\tif GLM_ARCH & GLM_ARCH_SSE2_BIT\n\t\t\t\t\tglm::uint64 E = sseBitfieldInterleave(x, y);\n\t\t\t\t\tglm::uint64 F = sseUnalignedBitfieldInterleave(x, y);\n\t\t\t\t\tassert(A == E);\n\t\t\t\t\tassert(A == F);\n\n\t\t\t\t\t__m128i G = glm_i128_interleave(_mm_set_epi32(0, y, 0, x));\n\t\t\t\t\tglm::uint64 Result[2];\n\t\t\t\t\t_mm_storeu_si128((__m128i*)Result, G);\n\t\t\t\t\tassert(A == Result[0]);\n#\t\t\t\tendif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n\t\t\t}\n\t\t}\n*/\n\t\t{\n\t\t\tfor(glm::uint8 y = 0; y < 127; ++y)\n\t\t\tfor(glm::uint8 x = 0; x < 127; ++x)\n\t\t\t{\n\t\t\t\tglm::uint64 A(glm::bitfieldInterleave(glm::u8vec2(x, y)));\n\t\t\t\tglm::uint64 B(glm::bitfieldInterleave(glm::u16vec2(x, y)));\n\t\t\t\tglm::uint64 C(glm::bitfieldInterleave(glm::u32vec2(x, y)));\n\n\t\t\t\tError += A == B ? 0 : 1;\n\t\t\t\tError += A == C ? 0 : 1;\n\n\t\t\t\tglm::u32vec2 const& D = glm::bitfieldDeinterleave(C);\n\t\t\t\tError += D.x == x ? 0 : 1;\n\t\t\t\tError += D.y == y ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\t{\n\t\t\tfor(glm::uint8 y = 0; y < 127; ++y)\n\t\t\tfor(glm::uint8 x = 0; x < 127; ++x)\n\t\t\t{\n\t\t\t\tglm::int64 A(glm::bitfieldInterleave(glm::int8(x), glm::int8(y)));\n\t\t\t\tglm::int64 B(glm::bitfieldInterleave(glm::int16(x), glm::int16(y)));\n\t\t\t\tglm::int64 C(glm::bitfieldInterleave(glm::int32(x), glm::int32(y)));\n\n\t\t\t\tError += A == B ? 0 : 1;\n\t\t\t\tError += A == C ? 0 : 1;\n\t\t\t}\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint perf()\n\t{\n\t\tglm::uint32 x_max = 1 << 11;\n\t\tglm::uint32 y_max = 1 << 10;\n\n\t\t// ALU\n\t\tstd::vector<glm::uint64> Data(x_max * y_max);\n\t\tstd::vector<glm::u32vec2> Param(x_max * y_max);\n\t\tfor(glm::uint32 i = 0; i < Param.size(); ++i)\n\t\t\tParam[i] = glm::u32vec2(i % x_max, i / y_max);\n\n\t\t{\n\t\t\tstd::clock_t LastTime = std::clock();\n\n\t\t\tfor(std::size_t i = 0; i < Data.size(); ++i)\n\t\t\t\tData[i] = glm::bitfieldInterleave(Param[i].x, Param[i].y);\n\n\t\t\tstd::clock_t Time = std::clock() - LastTime;\n\n\t\t\tstd::printf(\"glm::bitfieldInterleave Time %d clocks\\n\", static_cast<int>(Time));\n\t\t}\n\n\t\t{\n\t\t\tstd::clock_t LastTime = std::clock();\n\n\t\t\tfor(std::size_t i = 0; i < Data.size(); ++i)\n\t\t\t\tData[i] = fastBitfieldInterleave(Param[i].x, Param[i].y);\n\n\t\t\tstd::clock_t Time = std::clock() - LastTime;\n\n\t\t\tstd::printf(\"fastBitfieldInterleave Time %d clocks\\n\", static_cast<int>(Time));\n\t\t}\n/*\n\t\t{\n\t\t\tstd::clock_t LastTime = std::clock();\n\n\t\t\tfor(std::size_t i = 0; i < Data.size(); ++i)\n\t\t\t\tData[i] = loopBitfieldInterleave(Param[i].x, Param[i].y);\n\n\t\t\tstd::clock_t Time = std::clock() - LastTime;\n\n\t\t\tstd::printf(\"loopBitfieldInterleave Time %d clocks\\n\", static_cast<int>(Time));\n\t\t}\n*/\n\t\t{\n\t\t\tstd::clock_t LastTime = std::clock();\n\n\t\t\tfor(std::size_t i = 0; i < Data.size(); ++i)\n\t\t\t\tData[i] = interleaveBitfieldInterleave(Param[i].x, Param[i].y);\n\n\t\t\tstd::clock_t Time = std::clock() - LastTime;\n\n\t\t\tstd::printf(\"interleaveBitfieldInterleave Time %d clocks\\n\", static_cast<int>(Time));\n\t\t}\n\n#\t\tif GLM_ARCH & GLM_ARCH_SSE2_BIT\n\t\t{\n\t\t\tstd::clock_t LastTime = std::clock();\n\n\t\t\tfor(std::size_t i = 0; i < Data.size(); ++i)\n\t\t\t\tData[i] = sseBitfieldInterleave(Param[i].x, Param[i].y);\n\n\t\t\tstd::clock_t Time = std::clock() - LastTime;\n\n\t\t\tstd::printf(\"sseBitfieldInterleave Time %d clocks\\n\", static_cast<int>(Time));\n\t\t}\n\n\t\t{\n\t\t\tstd::clock_t LastTime = std::clock();\n\n\t\t\tfor(std::size_t i = 0; i < Data.size(); ++i)\n\t\t\t\tData[i] = sseUnalignedBitfieldInterleave(Param[i].x, Param[i].y);\n\n\t\t\tstd::clock_t Time = std::clock() - LastTime;\n\n\t\t\tstd::printf(\"sseUnalignedBitfieldInterleave Time %d clocks\\n\", static_cast<int>(Time));\n\t\t}\n#\t\tendif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n\t\t{\n\t\t\tstd::clock_t LastTime = std::clock();\n\n\t\t\tfor(std::size_t i = 0; i < Data.size(); ++i)\n\t\t\t\tData[i] = glm::bitfieldInterleave(Param[i].x, Param[i].y, Param[i].x);\n\n\t\t\tstd::clock_t Time = std::clock() - LastTime;\n\n\t\t\tstd::printf(\"glm::detail::bitfieldInterleave Time %d clocks\\n\", static_cast<int>(Time));\n\t\t}\n\n#\t\tif(GLM_ARCH & GLM_ARCH_SSE2_BIT && !(GLM_COMPILER & GLM_COMPILER_GCC))\n\t\t{\n\t\t\t// SIMD\n\t\t\tstd::vector<__m128i> SimdData;\n\t\t\tSimdData.resize(static_cast<std::size_t>(x_max * y_max));\n\t\t\tstd::vector<__m128i> SimdParam;\n\t\t\tSimdParam.resize(static_cast<std::size_t>(x_max * y_max));\n\t\t\tfor(std::size_t i = 0; i < SimdParam.size(); ++i)\n\t\t\t\tSimdParam[i] = _mm_set_epi32(static_cast<int>(i % static_cast<std::size_t>(x_max)), 0, static_cast<int>(i / static_cast<std::size_t>(y_max)), 0);\n\n\t\t\tstd::clock_t LastTime = std::clock();\n\n\t\t\tfor(std::size_t i = 0; i < SimdData.size(); ++i)\n\t\t\t\tSimdData[i] = glm_i128_interleave(SimdParam[i]);\n\n\t\t\tstd::clock_t Time = std::clock() - LastTime;\n\n\t\t\tstd::printf(\"_mm_bit_interleave_si128 Time %d clocks\\n\", static_cast<int>(Time));\n\t\t}\n#\t\tendif//GLM_ARCH & GLM_ARCH_SSE2_BIT\n\n\t\treturn 0;\n\t}\n}//namespace bitfieldInterleave\n\nnamespace bitfieldInterleave5\n{\n\tGLM_FUNC_QUALIFIER glm::uint16 bitfieldInterleave_u8vec2(glm::uint8 x, glm::uint8 y)\n\t{\n\t\tglm::uint32 Result = (glm::uint32(y) << 16) | glm::uint32(x);\n\t\tResult = ((Result <<  4) | Result) & 0x0F0F0F0F;\n\t\tResult = ((Result <<  2) | Result) & 0x33333333;\n\t\tResult = ((Result <<  1) | Result) & 0x55555555;\n\t\treturn static_cast<glm::uint16>((Result & 0x0000FFFF) | (Result >> 15));\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::u8vec2 bitfieldDeinterleave_u8vec2(glm::uint16 InterleavedBitfield)\n\t{\n\t\tglm::uint32 Result(InterleavedBitfield);\n\t\tResult = ((Result << 15) | Result) & 0x55555555;\n\t\tResult = ((Result >>  1) | Result) & 0x33333333;\n\t\tResult = ((Result >>  2) | Result) & 0x0F0F0F0F;\n\t\tResult = ((Result >>  4) | Result) & 0x00FF00FF;\n\t\treturn glm::u8vec2(Result & 0x0000FFFF, Result >> 16);\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave_u8vec4(glm::uint8 x, glm::uint8 y, glm::uint8 z, glm::uint8 w)\n\t{\n\t\tglm::uint64 Result = (glm::uint64(w) << 48) | (glm::uint64(z) << 32) | (glm::uint64(y) << 16) | glm::uint64(x);\n\t\tResult = ((Result << 12) | Result) & 0x000F000F000F000Full;\n\t\tResult = ((Result <<  6) | Result) & 0x0303030303030303ull;\n\t\tResult = ((Result <<  3) | Result) & 0x1111111111111111ull;\n\n\t\tconst glm::uint32 a = static_cast<glm::uint32>((Result & 0x000000000000FFFF) >> ( 0 - 0));\n\t\tconst glm::uint32 b = static_cast<glm::uint32>((Result & 0x00000000FFFF0000) >> (16 - 3));\n\t\tconst glm::uint32 c = static_cast<glm::uint32>((Result & 0x0000FFFF00000000) >> (32 - 6));\n\t\tconst glm::uint32 d = static_cast<glm::uint32>((Result & 0xFFFF000000000000) >> (48 - 12));\n\n\t\treturn a | b | c | d;\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::u8vec4 bitfieldDeinterleave_u8vec4(glm::uint32 InterleavedBitfield)\n\t{\n\t\tglm::uint64 Result(InterleavedBitfield);\n\t\tResult = ((Result << 15) | Result) & 0x9249249249249249ull;\n\t\tResult = ((Result >>  1) | Result) & 0x30C30C30C30C30C3ull;\n\t\tResult = ((Result >>  2) | Result) & 0xF00F00F00F00F00Full;\n\t\tResult = ((Result >>  4) | Result) & 0x00FF0000FF0000FFull;\n\t\treturn glm::u8vec4(\n\t\t\t(Result >> 0) & 0x000000000000FFFFull,\n\t\t\t(Result >> 16) & 0x00000000FFFF0000ull,\n\t\t\t(Result >> 32) & 0x0000FFFF00000000ull,\n\t\t\t(Result >> 48) & 0xFFFF000000000000ull);\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave_u16vec2(glm::uint16 x, glm::uint16 y)\n\t{\n\t\tglm::uint64 Result = (glm::uint64(y) << 32) | glm::uint64(x);\n\t\tResult = ((Result <<  8) | Result) & static_cast<glm::uint32>(0x00FF00FF00FF00FFull);\n\t\tResult = ((Result <<  4) | Result) & static_cast<glm::uint32>(0x0F0F0F0F0F0F0F0Full);\n\t\tResult = ((Result <<  2) | Result) & static_cast<glm::uint32>(0x3333333333333333ull);\n\t\tResult = ((Result <<  1) | Result) & static_cast<glm::uint32>(0x5555555555555555ull);\n\t\treturn static_cast<glm::uint32>((Result & 0x00000000FFFFFFFFull) | (Result >> 31));\n\t}\n\n\tGLM_FUNC_QUALIFIER glm::u16vec2 bitfieldDeinterleave_u16vec2(glm::uint32 InterleavedBitfield)\n\t{\n\t\tglm::uint64 Result(InterleavedBitfield);\n\t\tResult = ((Result << 31) | Result) & 0x5555555555555555ull;\n\t\tResult = ((Result >>  1) | Result) & 0x3333333333333333ull;\n\t\tResult = ((Result >>  2) | Result) & 0x0F0F0F0F0F0F0F0Full;\n\t\tResult = ((Result >>  4) | Result) & 0x00FF00FF00FF00FFull;\n\t\tResult = ((Result >>  8) | Result) & 0x0000FFFF0000FFFFull;\n\t\treturn glm::u16vec2(Result & 0x00000000FFFFFFFFull, Result >> 32);\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t{\n\t\t\tglm::uint16 A = bitfieldInterleave_u8vec2(glm::uint8(i), glm::uint8(j));\n\t\t\tglm::uint16 B = glm::bitfieldInterleave(glm::uint8(i), glm::uint8(j));\n\t\t\tError += A == B ? 0 : 1;\n\n\t\t\tglm::u8vec2 C = bitfieldDeinterleave_u8vec2(A);\n\t\t\tError += C.x == glm::uint8(i) ? 0 : 1;\n\t\t\tError += C.y == glm::uint8(j) ? 0 : 1;\n\t\t}\n\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t{\n\t\t\tglm::uint32 A = bitfieldInterleave_u8vec4(glm::uint8(i), glm::uint8(j), glm::uint8(i), glm::uint8(j));\n\t\t\tglm::uint32 B = glm::bitfieldInterleave(glm::uint8(i), glm::uint8(j), glm::uint8(i), glm::uint8(j));\n\t\t\tError += A == B ? 0 : 1;\n/*\n\t\t\tglm::u8vec4 C = bitfieldDeinterleave_u8vec4(A);\n\t\t\tError += C.x == glm::uint8(i) ? 0 : 1;\n\t\t\tError += C.y == glm::uint8(j) ? 0 : 1;\n\t\t\tError += C.z == glm::uint8(i) ? 0 : 1;\n\t\t\tError += C.w == glm::uint8(j) ? 0 : 1;\n*/\n\t\t}\n\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t{\n\t\t\tglm::uint32 A = bitfieldInterleave_u16vec2(glm::uint16(i), glm::uint16(j));\n\t\t\tglm::uint32 B = glm::bitfieldInterleave(glm::uint16(i), glm::uint16(j));\n\t\t\tError += A == B ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint perf_old_u8vec2(std::vector<glm::uint16>& Result)\n\t{\n\t\tint Error = 0;\n\n\t\tconst std::clock_t BeginTime = std::clock();\n\t\t\n\t\tfor(glm::size_t k = 0; k < 10000; ++k)\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tError += Result[j * 256 + i] == glm::bitfieldInterleave(glm::uint8(i), glm::uint8(j)) ? 0 : 1;\n\n\t\tconst std::clock_t EndTime = std::clock();\n\n\t\tstd::printf(\"glm::bitfieldInterleave<u8vec2> Time %d clocks\\n\", static_cast<int>(EndTime - BeginTime));\n\n\t\treturn Error;\n\t}\n\n\tint perf_new_u8vec2(std::vector<glm::uint16>& Result)\n\t{\n\t\tint Error = 0;\n\n\t\tconst std::clock_t BeginTime = std::clock();\n\n\t\tfor(glm::size_t k = 0; k < 10000; ++k)\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tError += Result[j * 256 + i] == bitfieldInterleave_u8vec2(glm::uint8(i), glm::uint8(j)) ? 0 : 1;\n\n\t\tconst std::clock_t EndTime = std::clock();\n\n\t\tstd::printf(\"bitfieldInterleave_u8vec2 Time %d clocks\\n\", static_cast<int>(EndTime - BeginTime));\n\n\t\treturn Error;\n\t}\n\n\tint perf_old_u8vec4(std::vector<glm::uint32>& Result)\n\t{\n\t\tint Error = 0;\n\n\t\tconst std::clock_t BeginTime = std::clock();\n\n\t\tfor(glm::size_t k = 0; k < 10000; ++k)\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tError += Result[j * 256 + i] == glm::bitfieldInterleave(glm::uint8(i), glm::uint8(j), glm::uint8(i), glm::uint8(j)) ? 0 : 1;\n\n\t\tconst std::clock_t EndTime = std::clock();\n\n\t\tstd::printf(\"glm::bitfieldInterleave<u8vec4> Time %d clocks\\n\", static_cast<int>(EndTime - BeginTime));\n\n\t\treturn Error;\n\t}\n\n\tint perf_new_u8vec4(std::vector<glm::uint32>& Result)\n\t{\n\t\tint Error = 0;\n\n\t\tconst std::clock_t BeginTime = std::clock();\n\n\t\tfor(glm::size_t k = 0; k < 10000; ++k)\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tError += Result[j * 256 + i] == bitfieldInterleave_u8vec4(glm::uint8(i), glm::uint8(j), glm::uint8(i), glm::uint8(j)) ? 0 : 1;\n\n\t\tconst std::clock_t EndTime = std::clock();\n\n\t\tstd::printf(\"bitfieldInterleave_u8vec4 Time %d clocks\\n\", static_cast<int>(EndTime - BeginTime));\n\n\t\treturn Error;\n\t}\n\n\tint perf_old_u16vec2(std::vector<glm::uint32>& Result)\n\t{\n\t\tint Error = 0;\n\n\t\tconst std::clock_t BeginTime = std::clock();\n\n\t\tfor(glm::size_t k = 0; k < 10000; ++k)\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tError += Result[j * 256 + i] == glm::bitfieldInterleave(glm::uint16(i), glm::uint16(j)) ? 0 : 1;\n\n\t\tconst std::clock_t EndTime = std::clock();\n\n\t\tstd::printf(\"glm::bitfieldInterleave<u16vec2> Time %d clocks\\n\", static_cast<int>(EndTime - BeginTime));\n\n\t\treturn Error;\n\t}\n\n\tint perf_new_u16vec2(std::vector<glm::uint32>& Result)\n\t{\n\t\tint Error = 0;\n\n\t\tconst std::clock_t BeginTime = std::clock();\n\n\t\tfor(glm::size_t k = 0; k < 10000; ++k)\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tError += Result[j * 256 + i] == bitfieldInterleave_u16vec2(glm::uint16(i), glm::uint16(j)) ? 0 : 1;\n\n\t\tconst std::clock_t EndTime = std::clock();\n\n\t\tstd::printf(\"bitfieldInterleave_u16vec2 Time %d clocks\\n\", static_cast<int>(EndTime - BeginTime));\n\n\t\treturn Error;\n\t}\n\n\tint perf()\n\t{\n\t\tint Error = 0;\n\n\t\tstd::printf(\"bitfieldInterleave perf: init\\r\");\n\n\t\tstd::vector<glm::uint16> Result_u8vec2(256 * 256, 0);\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tResult_u8vec2[j * 256 + i] = glm::bitfieldInterleave(glm::uint8(i), glm::uint8(j));\n\n\t\tError += perf_old_u8vec2(Result_u8vec2);\n\t\tError += perf_new_u8vec2(Result_u8vec2);\n\n\t\tstd::vector<glm::uint32> Result_u8vec4(256 * 256, 0);\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tResult_u8vec4[j * 256 + i] = glm::bitfieldInterleave(glm::uint8(i), glm::uint8(j), glm::uint8(i), glm::uint8(j));\n\t\t\n\t\tError += perf_old_u8vec4(Result_u8vec4);\n\t\tError += perf_new_u8vec4(Result_u8vec4);\n\n\t\tstd::vector<glm::uint32> Result_u16vec2(256 * 256, 0);\n\t\tfor(glm::size_t j = 0; j < 256; ++j)\n\t\tfor(glm::size_t i = 0; i < 256; ++i)\n\t\t\tResult_u16vec2[j * 256 + i] = glm::bitfieldInterleave(glm::uint16(i), glm::uint16(j));\n\n\t\tError += perf_old_u16vec2(Result_u16vec2);\n\t\tError += perf_new_u16vec2(Result_u16vec2);\n\n\t\tstd::printf(\"bitfieldInterleave perf: %d Errors\\n\", Error);\n\n\t\treturn Error;\n\t}\n\n}//namespace bitfieldInterleave5\n\nstatic int test_bitfieldRotateRight()\n{\n\tglm::ivec4 const A = glm::bitfieldRotateRight(glm::ivec4(2), 1);\n\tglm::ivec4 const B = glm::ivec4(2) >> 1;\n\n\treturn A == B;\n}\n\nstatic int test_bitfieldRotateLeft()\n{\n\tglm::ivec4 const A = glm::bitfieldRotateLeft(glm::ivec4(2), 1);\n\tglm::ivec4 const B = glm::ivec4(2) << 1;\n\n\treturn A == B;\n}\n\nint main()\n{\n\tint Error = 0;\n\n/* Tests for a faster and to reserve bitfieldInterleave\n\tError += ::bitfieldInterleave5::test();\n\tError += ::bitfieldInterleave5::perf();\n*/\n\tError += ::mask::test();\n\tError += ::bitfieldInterleave3::test();\n\tError += ::bitfieldInterleave4::test();\n\tError += ::bitfieldInterleave::test();\n\n\tError += test_bitfieldRotateRight();\n\tError += test_bitfieldRotateLeft();\n\n#\tifdef NDEBUG\n\t\tError += ::mask::perf();\n\t\tError += ::bitfieldInterleave::perf();\n#\tendif//NDEBUG\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_color_space.cpp",
    "content": "#include <glm/gtc/color_space.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/constants.hpp>\n\nnamespace srgb\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tglm::vec3 const ColorSourceRGB(1.0, 0.5, 0.0);\n\n\t\t{\n\t\t\tglm::vec3 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGB);\n\t\t\tglm::vec3 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceRGB, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec3 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGB, 2.8f);\n\t\t\tglm::vec3 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB, 2.8f);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceRGB, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\tglm::vec4 const ColorSourceRGBA(1.0, 0.5, 0.0, 1.0);\n\n\t\t{\n\t\t\tglm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGBA);\n\t\t\tglm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceRGBA, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGBA, 2.8f);\n\t\t\tglm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB, 2.8f);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceRGBA, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\tglm::vec4 const ColorSourceGNI = glm::vec4(107, 107, 104, 131) / glm::vec4(255);\n\n\t\t{\n\t\t\tglm::vec4 const ColorGNA = glm::convertSRGBToLinear(ColorSourceGNI) * glm::vec4(255);\n\t\t\tglm::vec4 const ColorGNE = glm::convertLinearToSRGB(ColorSourceGNI) * glm::vec4(255);\n\t\t\tglm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceGNI);\n\t\t\tglm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceGNI, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace srgb\n\nnamespace srgb_lowp\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tfor(float Color = 0.0f; Color < 1.0f; Color += 0.01f)\n\t\t{\n\t\t\tglm::highp_vec3 const HighpSRGB = glm::convertLinearToSRGB(glm::highp_vec3(Color));\n\t\t\tglm::lowp_vec3 const LowpSRGB = glm::convertLinearToSRGB(glm::lowp_vec3(Color));\n\t\t\tError += glm::all(glm::epsilonEqual(glm::abs(HighpSRGB - glm::highp_vec3(LowpSRGB)), glm::highp_vec3(0), 0.1f)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace srgb_lowp\n\nint main()\n{\n\tint Error(0);\n\n\tError += srgb::test();\n\tError += srgb_lowp::test();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_constants.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n\nint test_epsilon()\n{\n\tint Error = 0;\n\n\t{\n\t\tfloat Test = glm::epsilon<float>();\n\t\tError += Test > 0.0f ? 0 : 1;\n\t}\n\n\t{\n\t\tdouble Test = glm::epsilon<double>();\n\t\tError += Test > 0.0 ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error(0);\n\n\t//float MinHalf = 0.0f;\n\t//while (glm::half(MinHalf) == glm::half(0.0f))\n\t//\tMinHalf += std::numeric_limits<float>::epsilon();\n\tError += test_epsilon();\n\t\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_epsilon.cpp",
    "content": "#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/quaternion.hpp>\n#include <glm/vector_relational.hpp>\n\nint test_defined()\n{\n\tglm::epsilonEqual(glm::vec2(), glm::vec2(), glm::vec2());\n\tglm::epsilonEqual(glm::vec3(), glm::vec3(), glm::vec3());\n\tglm::epsilonEqual(glm::vec4(), glm::vec4(), glm::vec4());\n\n\tglm::epsilonNotEqual(glm::vec2(), glm::vec2(), glm::vec2());\n\tglm::epsilonNotEqual(glm::vec3(), glm::vec3(), glm::vec3());\n\tglm::epsilonNotEqual(glm::vec4(), glm::vec4(), glm::vec4());\n\t\n\tglm::epsilonEqual(glm::vec2(), glm::vec2(), 0.0f);\n\tglm::epsilonEqual(glm::vec3(), glm::vec3(), 0.0f);\n\tglm::epsilonEqual(glm::vec4(), glm::vec4(), 0.0f);\n\tglm::epsilonEqual(glm::quat(), glm::quat(), 0.0f);\n\n\tglm::epsilonNotEqual(glm::vec2(), glm::vec2(), 0.0f);\n\tglm::epsilonNotEqual(glm::vec3(), glm::vec3(), 0.0f);\n\tglm::epsilonNotEqual(glm::vec4(), glm::vec4(), 0.0f);\n\tglm::epsilonNotEqual(glm::quat(), glm::quat(), 0.0f);\n\n\treturn 0;\n}\n\ntemplate<typename T>\nint test_equal()\n{\n\tint Error(0);\n\t\n\t{\n\t\tT A = glm::epsilon<T>();\n\t\tT B = glm::epsilon<T>();\n\t\tError += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;\n\t}\n\n\t{\n\t\tT A(0);\n\t\tT B = static_cast<T>(0) + glm::epsilon<T>();\n\t\tError += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;\n\t}\n\n\t{\n\t\tT A(0);\n\t\tT B = static_cast<T>(0) - glm::epsilon<T>();\n\t\tError += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;\n\t}\n\n\t{\n\t\tT A = static_cast<T>(0) + glm::epsilon<T>();\n\t\tT B = static_cast<T>(0);\n\t\tError += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;\n\t}\n\n\t{\n\t\tT A = static_cast<T>(0) - glm::epsilon<T>();\n\t\tT B = static_cast<T>(0);\n\t\tError += glm::epsilonEqual(A, B, glm::epsilon<T>() * T(2)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error(0);\n\n\tError += test_defined();\n\tError += test_equal<float>();\n\tError += test_equal<double>();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_integer.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#define GLM_FORCE_INLINE\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/integer.hpp>\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/gtx/type_aligned.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/vec2.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec4.hpp>\n#include <ctime>\n#include <cstdio>\n#include <vector>\n#include <cmath>\n\nnamespace log2_\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tint A0 = static_cast<int>(glm::log2(16.f));\n\t\tglm::ivec1 B0(glm::log2(glm::vec1(16.f)));\n\t\tglm::ivec2 C0(glm::log2(glm::vec2(16.f)));\n\t\tglm::ivec3 D0(glm::log2(glm::vec3(16.f)));\n\t\tglm::ivec4 E0(glm::log2(glm::vec4(16.f)));\n\n\t\tint A1 = glm::log2(int(16));\n\t\tglm::ivec1 B1 = glm::log2(glm::ivec1(16));\n\t\tglm::ivec2 C1 = glm::log2(glm::ivec2(16));\n\t\tglm::ivec3 D1 = glm::log2(glm::ivec3(16));\n\t\tglm::ivec4 E1 = glm::log2(glm::ivec4(16));\n\n\t\tError += A0 == A1 ? 0 : 1;\n\t\tError += glm::all(glm::equal(B0, B1)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(C0, C1)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(D0, D1)) ? 0 : 1;\n\t\tError += glm::all(glm::equal(E0, E1)) ? 0 : 1;\n\n\t\tglm::uint64 A2 = glm::log2(glm::uint64(16));\n\t\tglm::u64vec1 B2 = glm::log2(glm::u64vec1(16));\n\t\tglm::u64vec2 C2 = glm::log2(glm::u64vec2(16));\n\t\tglm::u64vec3 D2 = glm::log2(glm::u64vec3(16));\n\t\tglm::u64vec4 E2 = glm::log2(glm::u64vec4(16));\n\n\t\tError += A2 == glm::uint64(4) ? 0 : 1;\n\t\tError += glm::all(glm::equal(B2, glm::u64vec1(4))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(C2, glm::u64vec2(4))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(D2, glm::u64vec3(4))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(E2, glm::u64vec4(4))) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n\n\tint perf(std::size_t Count)\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tstd::vector<int> Result;\n\t\t\tResult.resize(Count);\n\n\t\t\tstd::clock_t Begin = clock();\n\n\t\t\tfor(int i = 0; i < static_cast<int>(Count); ++i)\n\t\t\t\tResult[i] = glm::log2(static_cast<int>(i));\n\n\t\t\tstd::clock_t End = clock();\n\n\t\t\tstd::printf(\"glm::log2<int>: %d clocks\\n\", static_cast<int>(End - Begin));\n\t\t}\n\n\t\t{\n\t\t\tstd::vector<glm::ivec4> Result;\n\t\t\tResult.resize(Count);\n\n\t\t\tstd::clock_t Begin = clock();\n\n\t\t\tfor(int i = 0; i < static_cast<int>(Count); ++i)\n\t\t\t\tResult[i] = glm::log2(glm::ivec4(i));\n\n\t\t\tstd::clock_t End = clock();\n\n\t\t\tstd::printf(\"glm::log2<ivec4>: %d clocks\\n\", static_cast<int>(End - Begin));\n\t\t}\n\n#\t\tif GLM_HAS_BITSCAN_WINDOWS\n\t\t{\n\t\t\tstd::vector<glm::ivec4> Result;\n\t\t\tResult.resize(Count);\n\n\t\t\tstd::clock_t Begin = clock();\n\n\t\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\t{\n\t\t\t\tglm::vec<4, unsigned long, glm::defaultp> Tmp;\n\t\t\t\t_BitScanReverse(&Tmp.x, i);\n\t\t\t\t_BitScanReverse(&Tmp.y, i);\n\t\t\t\t_BitScanReverse(&Tmp.z, i);\n\t\t\t\t_BitScanReverse(&Tmp.w, i);\n\t\t\t\tResult[i] = glm::ivec4(Tmp);\n\t\t\t}\n\n\t\t\tstd::clock_t End = clock();\n\n\t\t\tstd::printf(\"glm::log2<ivec4> inlined: %d clocks\\n\", static_cast<int>(End - Begin));\n\t\t}\n\n\n\t\t{\n\t\t\tstd::vector<glm::vec<4, unsigned long, glm::defaultp> > Result;\n\t\t\tResult.resize(Count);\n\n\t\t\tstd::clock_t Begin = clock();\n\n\t\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\t{\n\t\t\t\t_BitScanReverse(&Result[i].x, i);\n\t\t\t\t_BitScanReverse(&Result[i].y, i);\n\t\t\t\t_BitScanReverse(&Result[i].z, i);\n\t\t\t\t_BitScanReverse(&Result[i].w, i);\n\t\t\t}\n\n\t\t\tstd::clock_t End = clock();\n\n\t\t\tstd::printf(\"glm::log2<ivec4> inlined no cast: %d clocks\\n\", static_cast<int>(End - Begin));\n\t\t}\n\n\n\t\t{\n\t\t\tstd::vector<glm::ivec4> Result;\n\t\t\tResult.resize(Count);\n\n\t\t\tstd::clock_t Begin = clock();\n\n\t\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\t{\n\t\t\t\t_BitScanReverse(reinterpret_cast<unsigned long*>(&Result[i].x), i);\n\t\t\t\t_BitScanReverse(reinterpret_cast<unsigned long*>(&Result[i].y), i);\n\t\t\t\t_BitScanReverse(reinterpret_cast<unsigned long*>(&Result[i].z), i);\n\t\t\t\t_BitScanReverse(reinterpret_cast<unsigned long*>(&Result[i].w), i);\n\t\t\t}\n\n\t\t\tstd::clock_t End = clock();\n\n\t\t\tstd::printf(\"glm::log2<ivec4> reinterpret: %d clocks\\n\", static_cast<int>(End - Begin));\n\t\t}\n#\t\tendif//GLM_HAS_BITSCAN_WINDOWS\n\n\t\t{\n\t\t\tstd::vector<float> Result;\n\t\t\tResult.resize(Count);\n\n\t\t\tstd::clock_t Begin = clock();\n\n\t\t\tfor(std::size_t i = 0; i < Count; ++i)\n\t\t\t\tResult[i] = glm::log2(static_cast<float>(i));\n\n\t\t\tstd::clock_t End = clock();\n\n\t\t\tstd::printf(\"glm::log2<float>: %d clocks\\n\", static_cast<int>(End - Begin));\n\t\t}\n\n\t\t{\n\t\t\tstd::vector<glm::vec4> Result;\n\t\t\tResult.resize(Count);\n\n\t\t\tstd::clock_t Begin = clock();\n\n\t\t\tfor(int i = 0; i < static_cast<int>(Count); ++i)\n\t\t\t\tResult[i] = glm::log2(glm::vec4(static_cast<float>(i)));\n\n\t\t\tstd::clock_t End = clock();\n\n\t\t\tstd::printf(\"glm::log2<vec4>: %d clocks\\n\", static_cast<int>(End - Begin));\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace log2_\n\nnamespace iround\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tfor(float f = 0.0f; f < 3.1f; f += 0.05f)\n\t\t{\n\t\t\tint RoundFast = static_cast<int>(glm::iround(f));\n\t\t\tint RoundSTD = static_cast<int>(glm::round(f));\n\t\t\tError += RoundFast == RoundSTD ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace iround\n\nnamespace uround\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tfor(float f = 0.0f; f < 3.1f; f += 0.05f)\n\t\t{\n\t\t\tint RoundFast = static_cast<int>(glm::uround(f));\n\t\t\tint RoundSTD = static_cast<int>(glm::round(f));\n\t\t\tError += RoundFast == RoundSTD ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace uround\n\nint main()\n{\n\tint Error(0);\n\n\tError += ::log2_::test();\n\tError += ::iround::test();\n\tError += ::uround::test();\n\n#\tifdef NDEBUG\n\t\tstd::size_t const Samples(1000);\n\t\tError += ::log2_::perf(Samples);\n#\tendif//NDEBUG\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_matrix_access.cpp",
    "content": "#include <glm/ext/vector_relational.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/matrix_access.hpp>\n#include <glm/mat2x2.hpp>\n#include <glm/mat2x3.hpp>\n#include <glm/mat2x4.hpp>\n#include <glm/mat3x2.hpp>\n#include <glm/mat3x3.hpp>\n#include <glm/mat3x4.hpp>\n#include <glm/mat4x2.hpp>\n#include <glm/mat4x3.hpp>\n#include <glm/mat4x4.hpp>\n\nint test_mat2x2_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat2x2 m(1);\n\n\tm = glm::row(m, 0, glm::vec2( 0,  1));\n\tm = glm::row(m, 1, glm::vec2( 4,  5));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec2( 0,  1), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec2( 4,  5), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat2x2_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat2x2 m(1);\n\n\tm = glm::column(m, 0, glm::vec2( 0,  1));\n\tm = glm::column(m, 1, glm::vec2( 4,  5));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec2( 0,  1), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec2( 4,  5), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat2x3_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat2x3 m(1);\n\n\tm = glm::row(m, 0, glm::vec2( 0,  1));\n\tm = glm::row(m, 1, glm::vec2( 4,  5));\n\tm = glm::row(m, 2, glm::vec2( 8,  9));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec2( 0,  1), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec2( 4,  5), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 2), glm::vec2( 8,  9), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat2x3_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat2x3 m(1);\n\n\tm = glm::column(m, 0, glm::vec3( 0,  1,  2));\n\tm = glm::column(m, 1, glm::vec3( 4,  5,  6));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec3( 0,  1,  2), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec3( 4,  5,  6), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat2x4_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat2x4 m(1);\n\n\tm = glm::row(m, 0, glm::vec2( 0,  1));\n\tm = glm::row(m, 1, glm::vec2( 4,  5));\n\tm = glm::row(m, 2, glm::vec2( 8,  9));\n\tm = glm::row(m, 3, glm::vec2(12, 13));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec2( 0,  1), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec2( 4,  5), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 2), glm::vec2( 8,  9), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 3), glm::vec2(12, 13), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat2x4_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat2x4 m(1);\n\n\tm = glm::column(m, 0, glm::vec4( 0,  1,  2, 3));\n\tm = glm::column(m, 1, glm::vec4( 4,  5,  6, 7));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec4( 0,  1,  2, 3), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec4( 4,  5,  6, 7), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat3x2_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat3x2 m(1);\n\n\tm = glm::row(m, 0, glm::vec3( 0,  1,  2));\n\tm = glm::row(m, 1, glm::vec3( 4,  5,  6));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec3( 0,  1,  2), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec3( 4,  5,  6), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat3x2_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat3x2 m(1);\n\n\tm = glm::column(m, 0, glm::vec2( 0,  1));\n\tm = glm::column(m, 1, glm::vec2( 4,  5));\n\tm = glm::column(m, 2, glm::vec2( 8,  9));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec2( 0,  1), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec2( 4,  5), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 2), glm::vec2( 8,  9), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat3x3_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat3x3 m(1);\n\n\tm = glm::row(m, 0, glm::vec3( 0,  1,  2));\n\tm = glm::row(m, 1, glm::vec3( 4,  5,  6));\n\tm = glm::row(m, 2, glm::vec3( 8,  9, 10));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec3( 0,  1,  2), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec3( 4,  5,  6), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 2), glm::vec3( 8,  9, 10), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat3x3_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat3x3 m(1);\n\n\tm = glm::column(m, 0, glm::vec3( 0,  1,  2));\n\tm = glm::column(m, 1, glm::vec3( 4,  5,  6));\n\tm = glm::column(m, 2, glm::vec3( 8,  9, 10));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec3( 0,  1,  2), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec3( 4,  5,  6), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 2), glm::vec3( 8,  9, 10), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat3x4_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat3x4 m(1);\n\n\tm = glm::row(m, 0, glm::vec3( 0,  1,  2));\n\tm = glm::row(m, 1, glm::vec3( 4,  5,  6));\n\tm = glm::row(m, 2, glm::vec3( 8,  9, 10));\n\tm = glm::row(m, 3, glm::vec3(12, 13, 14));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec3( 0,  1,  2), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec3( 4,  5,  6), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 2), glm::vec3( 8,  9, 10), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 3), glm::vec3(12, 13, 14), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat3x4_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat3x4 m(1);\n\n\tm = glm::column(m, 0, glm::vec4( 0,  1,  2, 3));\n\tm = glm::column(m, 1, glm::vec4( 4,  5,  6, 7));\n\tm = glm::column(m, 2, glm::vec4( 8,  9, 10, 11));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec4( 0,  1,  2, 3), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec4( 4,  5,  6, 7), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 2), glm::vec4( 8,  9, 10, 11), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat4x2_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat4x2 m(1);\n\n\tm = glm::row(m, 0, glm::vec4( 0,  1,  2,  3));\n\tm = glm::row(m, 1, glm::vec4( 4,  5,  6,  7));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec4( 0,  1,  2,  3), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec4( 4,  5,  6,  7), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat4x2_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat4x2 m(1);\n\n\tm = glm::column(m, 0, glm::vec2( 0,  1));\n\tm = glm::column(m, 1, glm::vec2( 4,  5));\n\tm = glm::column(m, 2, glm::vec2( 8,  9));\n\tm = glm::column(m, 3, glm::vec2(12, 13));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec2( 0,  1), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec2( 4,  5), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 2), glm::vec2( 8,  9), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 3), glm::vec2(12, 13), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat4x3_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat4x3 m(1);\n\n\tm = glm::row(m, 0, glm::vec4( 0,  1,  2,  3));\n\tm = glm::row(m, 1, glm::vec4( 4,  5,  6,  7));\n\tm = glm::row(m, 2, glm::vec4( 8,  9, 10, 11));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec4( 0,  1,  2,  3), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec4( 4,  5,  6,  7), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 2), glm::vec4( 8,  9, 10, 11), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat4x3_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat4x3 m(1);\n\n\tm = glm::column(m, 0, glm::vec3( 0,  1,  2));\n\tm = glm::column(m, 1, glm::vec3( 4,  5,  6));\n\tm = glm::column(m, 2, glm::vec3( 8,  9, 10));\n\tm = glm::column(m, 3, glm::vec3(12, 13, 14));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec3( 0,  1,  2), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec3( 4,  5,  6), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 2), glm::vec3( 8,  9, 10), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 3), glm::vec3(12, 13, 14), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat4x4_row_set()\n{\n\tint Error = 0;\n\n\tglm::mat4 m(1);\n\n\tm = glm::row(m, 0, glm::vec4( 0,  1,  2,  3));\n\tm = glm::row(m, 1, glm::vec4( 4,  5,  6,  7));\n\tm = glm::row(m, 2, glm::vec4( 8,  9, 10, 11));\n\tm = glm::row(m, 3, glm::vec4(12, 13, 14, 15));\n\n\tError += glm::all(glm::equal(glm::row(m, 0), glm::vec4( 0,  1,  2,  3), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 1), glm::vec4( 4,  5,  6,  7), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 2), glm::vec4( 8,  9, 10, 11), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::row(m, 3), glm::vec4(12, 13, 14, 15), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat4x4_col_set()\n{\n\tint Error = 0;\n\n\tglm::mat4 m(1);\n\n\tm = glm::column(m, 0, glm::vec4( 0,  1,  2,  3));\n\tm = glm::column(m, 1, glm::vec4( 4,  5,  6,  7));\n\tm = glm::column(m, 2, glm::vec4( 8,  9, 10, 11));\n\tm = glm::column(m, 3, glm::vec4(12, 13, 14, 15));\n\n\tError += glm::all(glm::equal(glm::column(m, 0), glm::vec4( 0,  1,  2,  3), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 1), glm::vec4( 4,  5,  6,  7), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 2), glm::vec4( 8,  9, 10, 11), glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(glm::column(m, 3), glm::vec4(12, 13, 14, 15), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat4x4_row_get()\n{\n\tint Error = 0;\n\n\tglm::mat4 m(1);\n\n\tglm::vec4 A = glm::row(m, 0);\n\tError += glm::all(glm::equal(A, glm::vec4(1, 0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\tglm::vec4 B = glm::row(m, 1);\n\tError += glm::all(glm::equal(B, glm::vec4(0, 1, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\tglm::vec4 C = glm::row(m, 2);\n\tError += glm::all(glm::equal(C, glm::vec4(0, 0, 1, 0), glm::epsilon<float>())) ? 0 : 1;\n\tglm::vec4 D = glm::row(m, 3);\n\tError += glm::all(glm::equal(D, glm::vec4(0, 0, 0, 1), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_mat4x4_col_get()\n{\n\tint Error = 0;\n\n\tglm::mat4 m(1);\n\n\tglm::vec4 A = glm::column(m, 0);\n\tError += glm::all(glm::equal(A, glm::vec4(1, 0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\tglm::vec4 B = glm::column(m, 1);\n\tError += glm::all(glm::equal(B, glm::vec4(0, 1, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\tglm::vec4 C = glm::column(m, 2);\n\tError += glm::all(glm::equal(C, glm::vec4(0, 0, 1, 0), glm::epsilon<float>())) ? 0 : 1;\n\tglm::vec4 D = glm::column(m, 3);\n\tError += glm::all(glm::equal(D, glm::vec4(0, 0, 0, 1), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_mat2x2_row_set();\n\tError += test_mat2x2_col_set();\n\tError += test_mat2x3_row_set();\n\tError += test_mat2x3_col_set();\n\tError += test_mat2x4_row_set();\n\tError += test_mat2x4_col_set();\n\tError += test_mat3x2_row_set();\n\tError += test_mat3x2_col_set();\n\tError += test_mat3x3_row_set();\n\tError += test_mat3x3_col_set();\n\tError += test_mat3x4_row_set();\n\tError += test_mat3x4_col_set();\n\tError += test_mat4x2_row_set();\n\tError += test_mat4x2_col_set();\n\tError += test_mat4x3_row_set();\n\tError += test_mat4x3_col_set();\n\tError += test_mat4x4_row_set();\n\tError += test_mat4x4_col_set();\n\n\tError += test_mat4x4_row_get();\n\tError += test_mat4x4_col_get();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_matrix_inverse.cpp",
    "content": "#include <glm/gtc/matrix_inverse.hpp>\n#include <glm/gtc/epsilon.hpp>\n\nint test_affine()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::mat3 const M(\n\t\t\t2.f, 0.f, 0.f,\n\t\t\t0.f, 2.f, 0.f,\n\t\t\t0.f, 0.f, 1.f);\n\t\tglm::mat3 const A = glm::affineInverse(M);\n\t\tglm::mat3 const I = glm::inverse(M);\n\t\tglm::mat3 const R = glm::affineInverse(A);\n\n\t\tfor(glm::length_t i = 0; i < A.length(); ++i)\n\t\t{\n\t\t\tError += glm::all(glm::epsilonEqual(M[i], R[i], 0.01f)) ? 0 : 1;\n\t\t\tError += glm::all(glm::epsilonEqual(A[i], I[i], 0.01f)) ? 0 : 1;\n\t\t}\n\t}\n\n\t{\n\t\tglm::mat4 const M(\n\t\t\t2.f, 0.f, 0.f, 0.f,\n\t\t\t0.f, 2.f, 0.f, 0.f,\n\t\t\t0.f, 0.f, 2.f, 0.f,\n\t\t\t0.f, 0.f, 0.f, 1.f);\n\t\tglm::mat4 const A = glm::affineInverse(M);\n\t\tglm::mat4 const I = glm::inverse(M);\n\t\tglm::mat4 const R = glm::affineInverse(A);\n\n\t\tfor(glm::length_t i = 0; i < A.length(); ++i)\n\t\t{\n\t\t\tError += glm::all(glm::epsilonEqual(M[i], R[i], 0.01f)) ? 0 : 1;\n\t\t\tError += glm::all(glm::epsilonEqual(A[i], I[i], 0.01f)) ? 0 : 1;\n\t\t}\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_affine();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_matrix_transform.cpp",
    "content": "#include <glm/gtc/matrix_transform.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/matrix_relational.hpp>\n\nint test_perspective()\n{\n\tint Error = 0;\n\n\tglm::mat4 Projection = glm::perspective(glm::pi<float>() * 0.25f, 4.0f / 3.0f, 0.1f, 100.0f);\n\n\treturn Error;\n}\n\nint test_pick()\n{\n\tint Error = 0;\n\n\tglm::mat4 Pick = glm::pickMatrix(glm::vec2(1, 2), glm::vec2(3, 4), glm::ivec4(0, 0, 320, 240));\n\n\treturn Error;\n}\n\nint test_tweakedInfinitePerspective()\n{\n\tint Error = 0;\n\n\tglm::mat4 ProjectionA = glm::tweakedInfinitePerspective(45.f, 640.f/480.f, 1.0f);\n\tglm::mat4 ProjectionB = glm::tweakedInfinitePerspective(45.f, 640.f/480.f, 1.0f, 0.001f);\n\n\n\treturn Error;\n}\n\nint test_translate()\n{\n\tint Error = 0;\n\n\tglm::lowp_vec3 v(1.0);\n\tglm::lowp_mat4 m(0);\n\tglm::lowp_mat4 t = glm::translate(m, v);\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_translate();\n\tError += test_tweakedInfinitePerspective();\n\tError += test_pick();\n\tError += test_perspective();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_noise.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/noise.hpp>\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtx/raw_data.hpp>\n\nstatic int test_simplex_float()\n{\n\tint Error = 0;\n\n\tglm::u8vec4 const PixelSimplex2D(glm::byte(glm::abs(glm::simplex(glm::vec2(0.f, 0.f))) * 255.f));\n\tglm::u8vec4 const PixelSimplex3D(glm::byte(glm::abs(glm::simplex(glm::vec3(0.f, 0.f, 0.f))) * 255.f));\n\tglm::u8vec4 const PixelSimplex4D(glm::byte(glm::abs(glm::simplex(glm::vec4(0.f, 0.f, 0.f, 0.f))) * 255.f));\n\n\treturn Error;\n}\n\nstatic int test_simplex_double()\n{\n\tint Error = 0;\n\n\tglm::u8vec4 const PixelSimplex2D(glm::byte(glm::abs(glm::simplex(glm::dvec2(0.f, 0.f))) * 255.));\n\tglm::u8vec4 const PixelSimplex3D(glm::byte(glm::abs(glm::simplex(glm::dvec3(0.f, 0.f, 0.f))) * 255.));\n\tglm::u8vec4 const PixelSimplex4D(glm::byte(glm::abs(glm::simplex(glm::dvec4(0.f, 0.f, 0.f, 0.f))) * 255.));\n\n\treturn Error;\n}\n\nstatic int test_perlin_float()\n{\n\tint Error = 0;\n\n\tglm::u8vec4 const PixelPerlin2D(glm::byte(glm::abs(glm::perlin(glm::vec2(0.f, 0.f))) * 255.f));\n\tglm::u8vec4 const PixelPerlin3D(glm::byte(glm::abs(glm::perlin(glm::vec3(0.f, 0.f, 0.f))) * 255.f));\n\tglm::u8vec4 const PixelPerlin4D(glm::byte(glm::abs(glm::perlin(glm::vec4(0.f, 0.f, 0.f, 0.f))) * 255.f));\n\n\treturn Error;\n}\n\nstatic int test_perlin_double()\n{\n\tint Error = 0;\n\n\tglm::u8vec4 const PixelPerlin2D(glm::byte(glm::abs(glm::perlin(glm::dvec2(0.f, 0.f))) * 255.));\n\tglm::u8vec4 const PixelPerlin3D(glm::byte(glm::abs(glm::perlin(glm::dvec3(0.f, 0.f, 0.f))) * 255.));\n\tglm::u8vec4 const PixelPerlin4D(glm::byte(glm::abs(glm::perlin(glm::dvec4(0.f, 0.f, 0.f, 0.f))) * 255.));\n\n\treturn Error;\n}\n\nstatic int test_perlin_pedioric_float()\n{\n\tint Error = 0;\n\n\tglm::u8vec4 const PixelPeriodic2D(glm::byte(glm::abs(glm::perlin(glm::vec2(0.f, 0.f), glm::vec2(2.0f))) * 255.f));\n\tglm::u8vec4 const PixelPeriodic3D(glm::byte(glm::abs(glm::perlin(glm::vec3(0.f, 0.f, 0.f), glm::vec3(2.0f))) * 255.f));\n\tglm::u8vec4 const PixelPeriodic4D(glm::byte(glm::abs(glm::perlin(glm::vec4(0.f, 0.f, 0.f, 0.f), glm::vec4(2.0f))) * 255.f));\n\n\treturn Error;\n}\n\nstatic int test_perlin_pedioric_double()\n{\n\tint Error = 0;\n\n\tglm::u8vec4 const PixelPeriodic2D(glm::byte(glm::abs(glm::perlin(glm::dvec2(0.f, 0.f), glm::dvec2(2.0))) * 255.));\n\tglm::u8vec4 const PixelPeriodic3D(glm::byte(glm::abs(glm::perlin(glm::dvec3(0.f, 0.f, 0.f), glm::dvec3(2.0))) * 255.));\n\tglm::u8vec4 const PixelPeriodic4D(glm::byte(glm::abs(glm::perlin(glm::dvec4(0.f, 0.f, 0.f, 0.f), glm::dvec4(2.0))) * 255.));\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_simplex_float();\n\tError += test_simplex_double();\n\n\tError += test_perlin_float();\n\tError += test_perlin_double();\n\n\tError += test_perlin_pedioric_float();\n\tError += test_perlin_pedioric_double();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_packing.cpp",
    "content": "#include <glm/packing.hpp>\n#include <glm/gtc/packing.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <cstdio>\n#include <vector>\n\nvoid print_bits(float const& s)\n{\n\tunion\n\t{\n\t\tfloat f;\n\t\tunsigned int i;\n\t} uif;\n\n\tuif.f = s;\n\n\tstd::printf(\"f32: \");\n\tfor(std::size_t j = sizeof(s) * 8; j > 0; --j)\n\t{\n\t\tif(j == 23 || j == 31)\n\t\t\tstd::printf(\" \");\n\t\tstd::printf(\"%d\", (uif.i & (1 << (j - 1))) ? 1 : 0);\n\t}\n}\n\nvoid print_10bits(glm::uint const& s)\n{\n\tstd::printf(\"10b: \");\n\tfor(std::size_t j = 10; j > 0; --j)\n\t{\n\t\tif(j == 5)\n\t\t\tstd::printf(\" \");\n\t\tstd::printf(\"%d\", (s & (1 << (j - 1))) ? 1 : 0);\n\t}\n}\n\nvoid print_11bits(glm::uint const& s)\n{\n\tstd::printf(\"11b: \");\n\tfor(std::size_t j = 11; j > 0; --j)\n\t{\n\t\tif(j == 6)\n\t\t\tstd::printf(\" \");\n\t\tstd::printf(\"%d\", (s & (1 << (j - 1))) ? 1 : 0);\n\t}\n}\n\nvoid print_value(float const& s)\n{\n\tstd::printf(\"%2.5f, \", static_cast<double>(s));\n\tprint_bits(s);\n\tstd::printf(\", \");\n//\tprint_11bits(detail::floatTo11bit(s));\n//\tstd::printf(\", \");\n//\tprint_10bits(detail::floatTo10bit(s));\n\tstd::printf(\"\\n\");\n}\n\nint test_Half1x16()\n{\n\tint Error = 0;\n\n\tstd::vector<float> Tests;\n\tTests.push_back(0.0f);\n\tTests.push_back(1.0f);\n\tTests.push_back(-1.0f);\n\tTests.push_back(2.0f);\n\tTests.push_back(-2.0f);\n\tTests.push_back(1.9f);\n\n\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t{\n\t\tglm::uint16 p0 = glm::packHalf1x16(Tests[i]);\n\t\tfloat v0 = glm::unpackHalf1x16(p0);\n\t\tglm::uint16 p1 = glm::packHalf1x16(v0);\n\t\tfloat v1 = glm::unpackHalf1x16(p1);\n\t\tError += glm::epsilonEqual(v0, v1, glm::epsilon<float>()) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_Half4x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec4> Tests;\n\tTests.push_back(glm::vec4(1.0f));\n\tTests.push_back(glm::vec4(0.0f));\n\tTests.push_back(glm::vec4(2.0f));\n\tTests.push_back(glm::vec4(0.1f));\n\tTests.push_back(glm::vec4(0.5f));\n\tTests.push_back(glm::vec4(-0.9f));\n\n\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t{\n\t\tglm::uint64 p0 = glm::packHalf4x16(Tests[i]);\n\t\tglm::vec4 v0 = glm::unpackHalf4x16(p0);\n\t\tglm::uint64 p1 = glm::packHalf4x16(v0);\n\t\tglm::vec4 v1 = glm::unpackHalf4x16(p1);\n\t\tglm::u16vec4 p2 = glm::packHalf(v0);\n\t\tglm::vec4 v2 = glm::unpackHalf(p2);\n\n\t\tError += glm::all(glm::equal(v0, v1, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v0, v2, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_I3x10_1x2()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::ivec4> Tests;\n\tTests.push_back(glm::ivec4(0));\n\tTests.push_back(glm::ivec4(1));\n\tTests.push_back(glm::ivec4(-1));\n\tTests.push_back(glm::ivec4(2));\n\tTests.push_back(glm::ivec4(-2));\n\tTests.push_back(glm::ivec4(3));\n\n\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t{\n\t\tglm::uint32 p0 = glm::packI3x10_1x2(Tests[i]);\n\t\tglm::ivec4 v0 = glm::unpackI3x10_1x2(p0);\n\t\tglm::uint32 p1 = glm::packI3x10_1x2(v0);\n\t\tglm::ivec4 v1 = glm::unpackI3x10_1x2(p1);\n\t\tError += glm::all(glm::equal(v0, v1)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_U3x10_1x2()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::uvec4> Tests;\n\tTests.push_back(glm::uvec4(0));\n\tTests.push_back(glm::uvec4(1));\n\tTests.push_back(glm::uvec4(2));\n\tTests.push_back(glm::uvec4(3));\n\tTests.push_back(glm::uvec4(4));\n\tTests.push_back(glm::uvec4(5));\n\n\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t{\n\t\tglm::uint32 p0 = glm::packU3x10_1x2(Tests[i]);\n\t\tglm::uvec4 v0 = glm::unpackU3x10_1x2(p0);\n\t\tglm::uint32 p1 = glm::packU3x10_1x2(v0);\n\t\tglm::uvec4 v1 = glm::unpackU3x10_1x2(p1);\n\t\tError += glm::all(glm::equal(v0, v1)) ? 0 : 1;\n\t}\n\n\tglm::u8vec4 const v0(0xff, 0x77, 0x0, 0x33);\n\tglm::uint32 const p0 = *reinterpret_cast<glm::uint32 const*>(&v0[0]);\n\tglm::uint32 const r0 = 0x330077ff;\n\n\tError += p0 == r0 ? 0 : 1;\n\n\tglm::uvec4 const v1(0xff, 0x77, 0x0, 0x33);\n\tglm::uint32 const p1 = glm::packU3x10_1x2(v1);\n\tglm::uint32 const r1 = 0xc001dcff;\n\n\tError += p1 == r1 ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_Snorm3x10_1x2()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec4> Tests;\n\tTests.push_back(glm::vec4(1.0f));\n\tTests.push_back(glm::vec4(0.0f));\n\tTests.push_back(glm::vec4(2.0f));\n\tTests.push_back(glm::vec4(0.1f));\n\tTests.push_back(glm::vec4(0.5f));\n\tTests.push_back(glm::vec4(0.9f));\n\n\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t{\n\t\tglm::uint32 p0 = glm::packSnorm3x10_1x2(Tests[i]);\n\t\tglm::vec4 v0 = glm::unpackSnorm3x10_1x2(p0);\n\t\tglm::uint32 p1 = glm::packSnorm3x10_1x2(v0);\n\t\tglm::vec4 v1 = glm::unpackSnorm3x10_1x2(p1);\n\n\t\tError += glm::all(glm::epsilonEqual(v0, v1, 0.01f)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_Unorm3x10_1x2()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec4> Tests;\n\tTests.push_back(glm::vec4(1.0f));\n\tTests.push_back(glm::vec4(0.0f));\n\tTests.push_back(glm::vec4(2.0f));\n\tTests.push_back(glm::vec4(0.1f));\n\tTests.push_back(glm::vec4(0.5f));\n\tTests.push_back(glm::vec4(0.9f));\n\n\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t{\n\t\tglm::uint32 p0 = glm::packUnorm3x10_1x2(Tests[i]);\n\t\tglm::vec4 v0 = glm::unpackUnorm3x10_1x2(p0);\n\t\tglm::uint32 p1 = glm::packUnorm3x10_1x2(v0);\n\t\tglm::vec4 v1 = glm::unpackUnorm3x10_1x2(p1);\n\n\t\tError += glm::all(glm::epsilonEqual(v0, v1, 0.001f)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_F2x11_1x10()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec3> Tests;\n\tTests.push_back(glm::vec3(1.0f));\n\tTests.push_back(glm::vec3(0.0f));\n\tTests.push_back(glm::vec3(2.0f));\n\tTests.push_back(glm::vec3(0.1f));\n\tTests.push_back(glm::vec3(0.5f));\n\tTests.push_back(glm::vec3(0.9f));\n\n\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t{\n\t\tglm::uint32 p0 = glm::packF2x11_1x10(Tests[i]);\n\t\tglm::vec3 v0 = glm::unpackF2x11_1x10(p0);\n\t\tglm::uint32 p1 = glm::packF2x11_1x10(v0);\n\t\tglm::vec3 v1 = glm::unpackF2x11_1x10(p1);\n\t\tError += glm::all(glm::equal(v0, v1, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_F3x9_E1x5()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec3> Tests;\n\tTests.push_back(glm::vec3(1.0f));\n\tTests.push_back(glm::vec3(0.0f));\n\tTests.push_back(glm::vec3(2.0f));\n\tTests.push_back(glm::vec3(0.1f));\n\tTests.push_back(glm::vec3(0.5f));\n\tTests.push_back(glm::vec3(0.9f));\n\n\tfor(std::size_t i = 0; i < Tests.size(); ++i)\n\t{\n\t\tglm::uint32 p0 = glm::packF3x9_E1x5(Tests[i]);\n\t\tglm::vec3 v0 = glm::unpackF3x9_E1x5(p0);\n\t\tglm::uint32 p1 = glm::packF3x9_E1x5(v0);\n\t\tglm::vec3 v1 = glm::unpackF3x9_E1x5(p1);\n\t\tError += glm::all(glm::equal(v0, v1, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_RGBM()\n{\n\tint Error = 0;\n\n\tfor(std::size_t i = 0; i < 1024; ++i)\n\t{\n\t\tglm::vec3 const Color(static_cast<float>(i));\n\t\tglm::vec4 const RGBM = glm::packRGBM(Color);\n\t\tglm::vec3 const Result= glm::unpackRGBM(RGBM);\n\n\t\tError += glm::all(glm::equal(Color, Result, 0.01f)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_packUnorm1x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec1> A;\n\tA.push_back(glm::vec1(1.0f));\n\tA.push_back(glm::vec1(0.5f));\n\tA.push_back(glm::vec1(0.1f));\n\tA.push_back(glm::vec1(0.0f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec1 B(A[i]);\n\t\tglm::uint16 C = glm::packUnorm1x16(B.x);\n\t\tglm::vec1 D(glm::unpackUnorm1x16(C));\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 65535.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packSnorm1x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec1> A;\n\tA.push_back(glm::vec1( 1.0f));\n\tA.push_back(glm::vec1( 0.0f));\n\tA.push_back(glm::vec1(-0.5f));\n\tA.push_back(glm::vec1(-0.1f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec1 B(A[i]);\n\t\tglm::uint16 C = glm::packSnorm1x16(B.x);\n\t\tglm::vec1 D(glm::unpackSnorm1x16(C));\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 32767.0f * 2.0f)) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nint test_packUnorm2x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2(1.0f, 0.0f));\n\tA.push_back(glm::vec2(0.5f, 0.7f));\n\tA.push_back(glm::vec2(0.1f, 0.2f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::uint32 C = glm::packUnorm2x16(B);\n\t\tglm::vec2 D = glm::unpackUnorm2x16(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 65535.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packSnorm2x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2( 1.0f, 0.0f));\n\tA.push_back(glm::vec2(-0.5f,-0.7f));\n\tA.push_back(glm::vec2(-0.1f, 0.1f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::uint32 C = glm::packSnorm2x16(B);\n\t\tglm::vec2 D = glm::unpackSnorm2x16(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 32767.0f * 2.0f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packUnorm4x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec4> A;\n\tA.push_back(glm::vec4(1.0f));\n\tA.push_back(glm::vec4(0.5f));\n\tA.push_back(glm::vec4(0.1f));\n\tA.push_back(glm::vec4(0.0f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec4 B(A[i]);\n\t\tglm::uint64 C = glm::packUnorm4x16(B);\n\t\tglm::vec4 D(glm::unpackUnorm4x16(C));\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 65535.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packSnorm4x16()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec4> A;\n\tA.push_back(glm::vec4( 1.0f, 0.0f, -0.5f, 0.5f));\n\tA.push_back(glm::vec4(-0.3f,-0.7f,  0.3f, 0.7f));\n\tA.push_back(glm::vec4(-0.1f, 0.1f, -0.2f, 0.2f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec4 B(A[i]);\n\t\tglm::uint64 C = glm::packSnorm4x16(B);\n\t\tglm::vec4 D(glm::unpackSnorm4x16(C));\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 32767.0f * 2.0f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packUnorm1x8()\n{\n\tint Error = 0;\n\t\n\tstd::vector<glm::vec1> A;\n\tA.push_back(glm::vec1(1.0f));\n\tA.push_back(glm::vec1(0.5f));\n\tA.push_back(glm::vec1(0.0f));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec1 B(A[i]);\n\t\tglm::uint8 C = glm::packUnorm1x8(B.x);\n\t\tglm::vec1 D(glm::unpackUnorm1x8(C));\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 255.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packSnorm1x8()\n{\n\tint Error = 0;\n\t\n\tstd::vector<glm::vec1> A;\n\tA.push_back(glm::vec1( 1.0f));\n\tA.push_back(glm::vec1(-0.7f));\n\tA.push_back(glm::vec1(-1.0f));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec1 B(A[i]);\n\t\tglm::uint8 C = glm::packSnorm1x8(B.x);\n\t\tglm::vec1 D(glm::unpackSnorm1x8(C));\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 127.f)) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nint test_packUnorm2x8()\n{\n\tint Error = 0;\n\t\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2(1.0f, 0.7f));\n\tA.push_back(glm::vec2(0.5f, 0.1f));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::uint16 C = glm::packUnorm2x8(B);\n\t\tglm::vec2 D = glm::unpackUnorm2x8(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 255.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packSnorm2x8()\n{\n\tint Error = 0;\n\t\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2( 1.0f, 0.0f));\n\tA.push_back(glm::vec2(-0.7f,-0.1f));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::uint16 C = glm::packSnorm2x8(B);\n\t\tglm::vec2 D = glm::unpackSnorm2x8(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 127.f)) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nint test_packUnorm4x8()\n{\n\tint Error = 0;\n\t\n\tstd::vector<glm::vec4> A;\n\tA.push_back(glm::vec4(1.0f, 0.7f, 0.3f, 0.0f));\n\tA.push_back(glm::vec4(0.5f, 0.1f, 0.2f, 0.3f));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec4 B(A[i]);\n\t\tglm::uint32 C = glm::packUnorm4x8(B);\n\t\tglm::vec4 D = glm::unpackUnorm4x8(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 255.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packSnorm4x8()\n{\n\tint Error = 0;\n\t\n\tstd::vector<glm::vec4> A;\n\tA.push_back(glm::vec4( 1.0f, 0.0f,-0.5f,-1.0f));\n\tA.push_back(glm::vec4(-0.7f,-0.1f, 0.1f, 0.7f));\n\t\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec4 B(A[i]);\n\t\tglm::uint32 C = glm::packSnorm4x8(B);\n\t\tglm::vec4 D = glm::unpackSnorm4x8(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 127.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint test_packUnorm()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2(1.0f, 0.7f));\n\tA.push_back(glm::vec2(0.5f, 0.1f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::u16vec2 C = glm::packUnorm<glm::uint16>(B);\n\t\tglm::vec2 D = glm::unpackUnorm<float>(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 255.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_packSnorm()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2( 1.0f, 0.0f));\n\tA.push_back(glm::vec2(-0.5f,-0.7f));\n\tA.push_back(glm::vec2(-0.1f, 0.1f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::i16vec2 C = glm::packSnorm<glm::int16>(B);\n\t\tglm::vec2 D = glm::unpackSnorm<float>(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 32767.0f * 2.0f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_packUnorm2x4()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec2> A;\n\tA.push_back(glm::vec2(1.0f, 0.7f));\n\tA.push_back(glm::vec2(0.5f, 0.0f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec2 B(A[i]);\n\t\tglm::uint8 C = glm::packUnorm2x4(B);\n\t\tglm::vec2 D = glm::unpackUnorm2x4(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 15.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_packUnorm4x4()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec4> A;\n\tA.push_back(glm::vec4(1.0f, 0.7f, 0.5f, 0.0f));\n\tA.push_back(glm::vec4(0.5f, 0.1f, 0.0f, 1.0f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec4 B(A[i]);\n\t\tglm::uint16 C = glm::packUnorm4x4(B);\n\t\tglm::vec4 D = glm::unpackUnorm4x4(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 15.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_packUnorm3x5_1x1()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec4> A;\n\tA.push_back(glm::vec4(1.0f, 0.7f, 0.5f, 0.0f));\n\tA.push_back(glm::vec4(0.5f, 0.1f, 0.0f, 1.0f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec4 B(A[i]);\n\t\tglm::uint16 C = glm::packUnorm3x5_1x1(B);\n\t\tglm::vec4 D = glm::unpackUnorm3x5_1x1(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 15.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_packUnorm1x5_1x6_1x5()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec3> A;\n\tA.push_back(glm::vec3(1.0f, 0.7f, 0.5f));\n\tA.push_back(glm::vec3(0.5f, 0.1f, 0.0f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec3 B(A[i]);\n\t\tglm::uint16 C = glm::packUnorm1x5_1x6_1x5(B);\n\t\tglm::vec3 D = glm::unpackUnorm1x5_1x6_1x5(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 15.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_packUnorm2x3_1x2()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::vec3> A;\n\tA.push_back(glm::vec3(1.0f, 0.7f, 0.5f));\n\tA.push_back(glm::vec3(0.5f, 0.1f, 0.0f));\n\n\tfor(std::size_t i = 0; i < A.size(); ++i)\n\t{\n\t\tglm::vec3 B(A[i]);\n\t\tglm::uint8 C = glm::packUnorm2x3_1x2(B);\n\t\tglm::vec3 D = glm::unpackUnorm2x3_1x2(C);\n\t\tError += glm::all(glm::epsilonEqual(B, D, 1.0f / 3.f)) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_packUint2x8()\n{\n\tint Error = 0;\n\n\tglm::u8vec2 const Source(1, 2);\n\n\tglm::uint16 const Packed = glm::packUint2x8(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::u8vec2 const Unpacked = glm::unpackUint2x8(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packUint4x8()\n{\n\tint Error = 0;\n\n\tglm::u8vec4 const Source(1, 2, 3, 4);\n\n\tglm::uint32 const Packed = glm::packUint4x8(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::u8vec4 const Unpacked = glm::unpackUint4x8(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packUint2x16()\n{\n\tint Error = 0;\n\n\tglm::u16vec2 const Source(1, 2);\n\n\tglm::uint32 const Packed = glm::packUint2x16(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::u16vec2 const Unpacked = glm::unpackUint2x16(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packUint4x16()\n{\n\tint Error = 0;\n\n\tglm::u16vec4 const Source(1, 2, 3, 4);\n\n\tglm::uint64 const Packed = glm::packUint4x16(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::u16vec4 const Unpacked = glm::unpackUint4x16(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packUint2x32()\n{\n\tint Error = 0;\n\n\tglm::u32vec2 const Source(1, 2);\n\n\tglm::uint64 const Packed = glm::packUint2x32(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::u32vec2 const Unpacked = glm::unpackUint2x32(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packInt2x8()\n{\n\tint Error = 0;\n\n\tglm::i8vec2 const Source(1, 2);\n\n\tglm::int16 const Packed = glm::packInt2x8(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::i8vec2 const Unpacked = glm::unpackInt2x8(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packInt4x8()\n{\n\tint Error = 0;\n\n\tglm::i8vec4 const Source(1, 2, 3, 4);\n\n\tglm::int32 const Packed = glm::packInt4x8(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::i8vec4 const Unpacked = glm::unpackInt4x8(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packInt2x16()\n{\n\tint Error = 0;\n\n\tglm::i16vec2 const Source(1, 2);\n\n\tglm::int32 const Packed = glm::packInt2x16(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::i16vec2 const Unpacked = glm::unpackInt2x16(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packInt4x16()\n{\n\tint Error = 0;\n\n\tglm::i16vec4 const Source(1, 2, 3, 4);\n\n\tglm::int64 const Packed = glm::packInt4x16(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::i16vec4 const Unpacked = glm::unpackInt4x16(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_packInt2x32()\n{\n\tint Error = 0;\n\n\tglm::i32vec2 const Source(1, 2);\n\n\tglm::int64 const Packed = glm::packInt2x32(Source);\n\tError += Packed != 0 ? 0 : 1;\n\n\tglm::i32vec2 const Unpacked = glm::unpackInt2x32(Packed);\n\tError += Source == Unpacked ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_packUnorm();\n\tError += test_packSnorm();\n\n\tError += test_packSnorm1x16();\n\tError += test_packSnorm2x16();\n\tError += test_packSnorm4x16();\n\n\tError += test_packSnorm1x8();\n\tError += test_packSnorm2x8();\n\tError += test_packSnorm4x8();\n\n\tError += test_packUnorm1x16();\n\tError += test_packUnorm2x16();\n\tError += test_packUnorm4x16();\n\n\tError += test_packUnorm1x8();\n\tError += test_packUnorm2x8();\n\tError += test_packUnorm4x8();\n\n\tError += test_packUnorm2x4();\n\tError += test_packUnorm4x4();\n\tError += test_packUnorm3x5_1x1();\n\tError += test_packUnorm1x5_1x6_1x5();\n\tError += test_packUnorm2x3_1x2();\n\n\tError += test_packUint2x8();\n\tError += test_packUint4x8();\n\tError += test_packUint2x16();\n\tError += test_packUint4x16();\n\tError += test_packUint2x32();\n\n\tError += test_packInt2x8();\n\tError += test_packInt4x8();\n\tError += test_packInt2x16();\n\tError += test_packInt4x16();\n\tError += test_packInt2x32();\n\n\tError += test_F2x11_1x10();\n\tError += test_F3x9_E1x5();\n\tError += test_RGBM();\n\tError += test_Unorm3x10_1x2();\n\tError += test_Snorm3x10_1x2();\n\n\tError += test_I3x10_1x2();\n\tError += test_U3x10_1x2();\n\tError += test_Half1x16();\n\tError += test_Half4x16();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_quaternion.cpp",
    "content": "#include <glm/gtc/constants.hpp>\n#include <glm/gtc/quaternion.hpp>\n#include <glm/gtc/matrix_transform.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/glm.hpp>\n#include <vector>\n\nint test_quat_angle()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));\n\t\tglm::quat N = glm::normalize(Q);\n\t\tfloat L = glm::length(N);\n\t\tError += glm::equal(L, 1.0f, 0.01f) ? 0 : 1;\n\t\tfloat A = glm::angle(N);\n\t\tError += glm::equal(A, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\t}\n\t{\n\t\tglm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::normalize(glm::vec3(0, 1, 1)));\n\t\tglm::quat N = glm::normalize(Q);\n\t\tfloat L = glm::length(N);\n\t\tError += glm::equal(L, 1.0f, 0.01f) ? 0 : 1;\n\t\tfloat A = glm::angle(N);\n\t\tError += glm::equal(A, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\t}\n\t{\n\t\tglm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::normalize(glm::vec3(1, 2, 3)));\n\t\tglm::quat N = glm::normalize(Q);\n\t\tfloat L = glm::length(N);\n\t\tError += glm::equal(L, 1.0f, 0.01f) ? 0 : 1;\n\t\tfloat A = glm::angle(N);\n\t\tError += glm::equal(A, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_quat_angleAxis()\n{\n\tint Error = 0;\n\n\tglm::quat A = glm::angleAxis(0.f, glm::vec3(0.f, 0.f, 1.f));\n\tglm::quat B = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));\n\tglm::quat C = glm::mix(A, B, 0.5f);\n\tglm::quat D = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));\n\n\tError += glm::equal(C.x, D.x, 0.01f) ? 0 : 1;\n\tError += glm::equal(C.y, D.y, 0.01f) ? 0 : 1;\n\tError += glm::equal(C.z, D.z, 0.01f) ? 0 : 1;\n\tError += glm::equal(C.w, D.w, 0.01f) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_quat_mix()\n{\n\tint Error = 0;\n\n\tglm::quat A = glm::angleAxis(0.f, glm::vec3(0.f, 0.f, 1.f));\n\tglm::quat B = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));\n\tglm::quat C = glm::mix(A, B, 0.5f);\n\tglm::quat D = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));\n\n\tError += glm::equal(C.x, D.x, 0.01f) ? 0 : 1;\n\tError += glm::equal(C.y, D.y, 0.01f) ? 0 : 1;\n\tError += glm::equal(C.z, D.z, 0.01f) ? 0 : 1;\n\tError += glm::equal(C.w, D.w, 0.01f) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_quat_normalize()\n{\n\tint Error(0);\n\n\t{\n\t\tglm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));\n\t\tglm::quat N = glm::normalize(Q);\n\t\tfloat L = glm::length(N);\n\t\tError += glm::equal(L, 1.0f, 0.000001f) ? 0 : 1;\n\t}\n\t{\n\t\tglm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 2));\n\t\tglm::quat N = glm::normalize(Q);\n\t\tfloat L = glm::length(N);\n\t\tError += glm::equal(L, 1.0f, 0.000001f) ? 0 : 1;\n\t}\n\t{\n\t\tglm::quat Q = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(1, 2, 3));\n\t\tglm::quat N = glm::normalize(Q);\n\t\tfloat L = glm::length(N);\n\t\tError += glm::equal(L, 1.0f, 0.000001f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_quat_euler()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::quat q(1.0f, 0.0f, 0.0f, 1.0f);\n\t\tfloat Roll = glm::roll(q);\n\t\tfloat Pitch = glm::pitch(q);\n\t\tfloat Yaw = glm::yaw(q);\n\t\tglm::vec3 Angles = glm::eulerAngles(q);\n\t\tError += glm::all(glm::equal(Angles, glm::vec3(Pitch, Yaw, Roll), 0.000001f)) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::dquat q(1.0, 0.0, 0.0, 1.0);\n\t\tdouble Roll = glm::roll(q);\n\t\tdouble Pitch = glm::pitch(q);\n\t\tdouble Yaw = glm::yaw(q);\n\t\tglm::dvec3 Angles = glm::eulerAngles(q);\n\t\tError += glm::all(glm::equal(Angles, glm::dvec3(Pitch, Yaw, Roll), 0.000001)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_quat_slerp()\n{\n\tint Error = 0;\n\n\tfloat const Epsilon = 0.0001f;//glm::epsilon<float>();\n\n\tfloat sqrt2 = std::sqrt(2.0f)/2.0f;\n\tglm::quat id(static_cast<float>(1), static_cast<float>(0), static_cast<float>(0), static_cast<float>(0));\n\tglm::quat Y90rot(sqrt2, 0.0f, sqrt2, 0.0f);\n\tglm::quat Y180rot(0.0f, 0.0f, 1.0f, 0.0f);\n\n\t// Testing a == 0\n\t// Must be id\n\tglm::quat id2 = glm::slerp(id, Y90rot, 0.0f);\n\tError += glm::all(glm::equal(id, id2, Epsilon)) ? 0 : 1;\n\n\t// Testing a == 1\n\t// Must be 90 rotation on Y : 0 0.7 0 0.7\n\tglm::quat Y90rot2 = glm::slerp(id, Y90rot, 1.0f);\n\tError += glm::all(glm::equal(Y90rot, Y90rot2, Epsilon)) ? 0 : 1;\n\n\t// Testing standard, easy case\n\t// Must be 45 rotation on Y : 0 0.38 0 0.92\n\tglm::quat Y45rot1 = glm::slerp(id, Y90rot, 0.5f);\n\n\t// Testing reverse case\n\t// Must be 45 rotation on Y : 0 0.38 0 0.92\n\tglm::quat Ym45rot2 = glm::slerp(Y90rot, id, 0.5f);\n\n\t// Testing against full circle around the sphere instead of shortest path\n\t// Must be 45 rotation on Y\n\t// certainly not a 135 rotation\n\tglm::quat Y45rot3 = glm::slerp(id , -Y90rot, 0.5f);\n\tfloat Y45angle3 = glm::angle(Y45rot3);\n\tError += glm::equal(Y45angle3, glm::pi<float>() * 0.25f, Epsilon) ? 0 : 1;\n\tError += glm::all(glm::equal(Ym45rot2, Y45rot3, Epsilon)) ? 0 : 1;\n\n\t// Same, but inverted\n\t// Must also be 45 rotation on Y :  0 0.38 0 0.92\n\t// -0 -0.38 -0 -0.92 is ok too\n\tglm::quat Y45rot4 = glm::slerp(-Y90rot, id, 0.5f);\n\tError += glm::all(glm::equal(Ym45rot2, -Y45rot4, Epsilon)) ? 0 : 1;\n\n\t// Testing q1 = q2\n\t// Must be 90 rotation on Y : 0 0.7 0 0.7\n\tglm::quat Y90rot3 = glm::slerp(Y90rot, Y90rot, 0.5f);\n\tError += glm::all(glm::equal(Y90rot, Y90rot3, Epsilon)) ? 0 : 1;\n\n\t// Testing 180 rotation\n\t// Must be 90 rotation on almost any axis that is on the XZ plane\n\tglm::quat XZ90rot = glm::slerp(id, -Y90rot, 0.5f);\n\tfloat XZ90angle = glm::angle(XZ90rot); // Must be PI/4 = 0.78;\n\tError += glm::equal(XZ90angle, glm::pi<float>() * 0.25f, Epsilon) ? 0 : 1;\n\n\t// Testing almost equal quaternions (this test should pass through the linear interpolation)\n\t// Must be 0 0.00X 0 0.99999\n\tglm::quat almostid = glm::slerp(id, glm::angleAxis(0.1f, glm::vec3(0.0f, 1.0f, 0.0f)), 0.5f);\n\n\t// Testing quaternions with opposite sign\n\t{\n\t\tglm::quat a(-1, 0, 0, 0);\n\n\t\tglm::quat result = glm::slerp(a, id, 0.5f);\n\n\t\tError += glm::equal(glm::pow(glm::dot(id, result), 2.f), 1.f, 0.01f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_quat_slerp_spins()\n{\n    int Error = 0;\n\n    float const Epsilon = 0.0001f;//glm::epsilon<float>();\n\n    float sqrt2 = std::sqrt(2.0f) / 2.0f;\n    glm::quat id(static_cast<float>(1), static_cast<float>(0), static_cast<float>(0), static_cast<float>(0));\n    glm::quat Y90rot(sqrt2, 0.0f, sqrt2, 0.0f);\n    glm::quat Y180rot(0.0f, 0.0f, 1.0f, 0.0f);\n\n    // Testing a == 0, k == 1\n    // Must be id\n    glm::quat id2 = glm::slerp(id, id, 1.0f, 1);\n    Error += glm::all(glm::equal(id, id2, Epsilon)) ? 0 : 1;\n\n    // Testing a == 1, k == 2\n    // Must be id\n    glm::quat id3 = glm::slerp(id, id, 1.0f, 2);\n    Error += glm::all(glm::equal(id, id3, Epsilon)) ? 0 : 1;\n\n    // Testing a == 1, k == 1\n    // Must be 90 rotation on Y : 0 0.7 0 0.7\n    // Negative quaternion is representing same orientation\n    glm::quat Y90rot2 = glm::slerp(id, Y90rot, 1.0f, 1);\n    Error += glm::all(glm::equal(Y90rot, -Y90rot2, Epsilon)) ? 0 : 1;\n\n    // Testing a == 1, k == 2\n    // Must be id\n    glm::quat Y90rot3 = glm::slerp(id, Y90rot, 8.0f / 9.0f, 2);\n    Error += glm::all(glm::equal(id, Y90rot3, Epsilon)) ? 0 : 1;\n\n    // Testing a == 1, k == 1\n    // Must be 90 rotation on Y : 0 0.7 0 0.7\n    glm::quat Y90rot4 = glm::slerp(id, Y90rot, 0.2f, 1);\n    Error += glm::all(glm::equal(Y90rot, Y90rot4, Epsilon)) ? 0 : 1;\n\n    // Testing reverse case\n    // Must be 45 rotation on Y : 0 0.38 0 0.92\n    // Negative quaternion is representing same orientation\n    glm::quat Ym45rot2 = glm::slerp(Y90rot, id, 0.9f, 1);\n    glm::quat Ym45rot3 = glm::slerp(Y90rot, id, 0.5f);\n    Error += glm::all(glm::equal(-Ym45rot2, Ym45rot3, Epsilon)) ? 0 : 1;\n\n    // Testing against full circle around the sphere instead of shortest path\n    // Must be 45 rotation on Y\n    // certainly not a 135 rotation\n    glm::quat Y45rot3 = glm::slerp(id, -Y90rot, 0.5f, 0);\n    float Y45angle3 = glm::angle(Y45rot3);\n    Error += glm::equal(Y45angle3, glm::pi<float>() * 0.25f, Epsilon) ? 0 : 1;\n    Error += glm::all(glm::equal(Ym45rot3, Y45rot3, Epsilon)) ? 0 : 1;\n\n    // Same, but inverted\n    // Must also be 45 rotation on Y :  0 0.38 0 0.92\n    // -0 -0.38 -0 -0.92 is ok too\n    glm::quat Y45rot4 = glm::slerp(-Y90rot, id, 0.5f, 0);\n    Error += glm::all(glm::equal(Ym45rot2, Y45rot4, Epsilon)) ? 0 : 1;\n\n    // Testing q1 = q2 k == 2\n    // Must be 90 rotation on Y : 0 0.7 0 0.7\n    glm::quat Y90rot5 = glm::slerp(Y90rot, Y90rot, 0.5f, 2);\n    Error += glm::all(glm::equal(Y90rot, Y90rot5, Epsilon)) ? 0 : 1;\n\n    // Testing 180 rotation\n    // Must be 90 rotation on almost any axis that is on the XZ plane\n    glm::quat XZ90rot = glm::slerp(id, -Y90rot, 0.5f, 1);\n    float XZ90angle = glm::angle(XZ90rot); // Must be PI/4 = 0.78;\n    Error += glm::equal(XZ90angle, glm::pi<float>() * 1.25f, Epsilon) ? 0 : 1;\n\n    // Testing rotation over long arc\n    // Distance from id to 90 is 270, so 2/3 of it should be 180\n    // Negative quaternion is representing same orientation\n    glm::quat Neg90rot = glm::slerp(id, Y90rot, 2.0f / 3.0f, -1);\n    Error += glm::all(glm::equal(Y180rot, -Neg90rot, Epsilon)) ? 0 : 1;\n\n    return Error;\n}\n\nstatic int test_quat_mul_vec()\n{\n\tint Error(0);\n\n\tglm::quat q = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));\n\tglm::vec3 v(1, 0, 0);\n\tglm::vec3 u(q * v);\n\tglm::vec3 w(u * q);\n\n\tError += glm::all(glm::equal(v, w, 0.01f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_mul()\n{\n\tint Error = 0;\n\n\tglm::quat temp1 = glm::normalize(glm::quat(1.0f, glm::vec3(0.0, 1.0, 0.0)));\n\tglm::quat temp2 = glm::normalize(glm::quat(0.5f, glm::vec3(1.0, 0.0, 0.0)));\n\n\tglm::vec3 transformed0 = (temp1 * glm::vec3(0.0, 1.0, 0.0) * glm::inverse(temp1));\n\tglm::vec3 temp4 = temp2 * transformed0 * glm::inverse(temp2);\n\n\tglm::quat temp5 = glm::normalize(temp1 * temp2);\n\tglm::vec3 temp6 = temp5 * glm::vec3(0.0, 1.0, 0.0) * glm::inverse(temp5);\n\n\tglm::quat temp7(1.0f, glm::vec3(0.0, 1.0, 0.0));\n\n\ttemp7 *= temp5;\n\ttemp7 *= glm::inverse(temp5);\n\n\tError += glm::any(glm::notEqual(temp7, glm::quat(1.0f, glm::vec3(0.0, 1.0, 0.0)), glm::epsilon<float>())) ? 1 : 0;\n\n\treturn Error;\n}\n\nint test_identity()\n{\n\tint Error = 0;\n\n\tglm::quat const Q = glm::identity<glm::quat>();\n\n\tError += glm::all(glm::equal(Q, glm::quat(1, 0, 0, 0), 0.0001f)) ? 0 : 1;\n\tError += glm::any(glm::notEqual(Q, glm::quat(1, 0, 0, 0), 0.0001f)) ? 1 : 0;\n\n\tglm::mat4 const M = glm::identity<glm::mat4x4>();\n\tglm::mat4 const N(1.0f);\n\n\tError += glm::all(glm::equal(M, N, 0.0001f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_mul();\n\tError += test_quat_mul_vec();\n\tError += test_quat_angle();\n\tError += test_quat_angleAxis();\n\tError += test_quat_mix();\n\tError += test_quat_normalize();\n\tError += test_quat_euler();\n\tError += test_quat_slerp();\n    Error += test_quat_slerp_spins();\n\tError += test_identity();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_random.cpp",
    "content": "#define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES\n#include <glm/gtc/random.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/type_precision.hpp>\n#if GLM_LANG & GLM_LANG_CXX0X_FLAG\n#\tinclude <array>\n#endif\n\nstd::size_t const TestSamples = 10000;\n\nint test_linearRand()\n{\n\tint Error = 0;\n\n\tglm::int32 const Min = 16;\n\tglm::int32 const Max = 32;\n\n\t{\n\t\tglm::u8vec2 AMin(std::numeric_limits<glm::u8>::max());\n\t\tglm::u8vec2 AMax(std::numeric_limits<glm::u8>::min());\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t\t{\n\t\t\t\tglm::u8vec2 A = glm::linearRand(glm::u8vec2(Min), glm::u8vec2(Max));\n\t\t\t\tAMin = glm::min(AMin, A);\n\t\t\t\tAMax = glm::max(AMax, A);\n\n\t\t\t\tif(!glm::all(glm::lessThanEqual(A, glm::u8vec2(Max))))\n\t\t\t\t\t++Error;\n\t\t\t\tif(!glm::all(glm::greaterThanEqual(A, glm::u8vec2(Min))))\n\t\t\t\t\t++Error;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\n\t\t\tError += glm::all(glm::equal(AMin, glm::u8vec2(Min))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(AMax, glm::u8vec2(Max))) ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\tglm::u16vec2 BMin(std::numeric_limits<glm::u16>::max());\n\t\tglm::u16vec2 BMax(std::numeric_limits<glm::u16>::min());\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t\t{\n\t\t\t\tglm::u16vec2 B = glm::linearRand(glm::u16vec2(Min), glm::u16vec2(Max));\n\t\t\t\tBMin = glm::min(BMin, B);\n\t\t\t\tBMax = glm::max(BMax, B);\n\n\t\t\t\tif(!glm::all(glm::lessThanEqual(B, glm::u16vec2(Max))))\n\t\t\t\t\t++Error;\n\t\t\t\tif(!glm::all(glm::greaterThanEqual(B, glm::u16vec2(Min))))\n\t\t\t\t\t++Error;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\n\t\t\tError += glm::all(glm::equal(BMin, glm::u16vec2(Min))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(BMax, glm::u16vec2(Max))) ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\tglm::u32vec2 CMin(std::numeric_limits<glm::u32>::max());\n\t\tglm::u32vec2 CMax(std::numeric_limits<glm::u32>::min());\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t\t{\n\t\t\t\tglm::u32vec2 C = glm::linearRand(glm::u32vec2(Min), glm::u32vec2(Max));\n\t\t\t\tCMin = glm::min(CMin, C);\n\t\t\t\tCMax = glm::max(CMax, C);\n\n\t\t\t\tif(!glm::all(glm::lessThanEqual(C, glm::u32vec2(Max))))\n\t\t\t\t\t++Error;\n\t\t\t\tif(!glm::all(glm::greaterThanEqual(C, glm::u32vec2(Min))))\n\t\t\t\t\t++Error;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\n\t\t\tError += glm::all(glm::equal(CMin, glm::u32vec2(Min))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(CMax, glm::u32vec2(Max))) ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\tglm::u64vec2 DMin(std::numeric_limits<glm::u64>::max());\n\t\tglm::u64vec2 DMax(std::numeric_limits<glm::u64>::min());\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t\t{\n\t\t\t\tglm::u64vec2 D = glm::linearRand(glm::u64vec2(Min), glm::u64vec2(Max));\n\t\t\t\tDMin = glm::min(DMin, D);\n\t\t\t\tDMax = glm::max(DMax, D);\n\n\t\t\t\tif(!glm::all(glm::lessThanEqual(D, glm::u64vec2(Max))))\n\t\t\t\t\t++Error;\n\t\t\t\tif(!glm::all(glm::greaterThanEqual(D, glm::u64vec2(Min))))\n\t\t\t\t\t++Error;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\n\t\t\tError += glm::all(glm::equal(DMin, glm::u64vec2(Min))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(DMax, glm::u64vec2(Max))) ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\t}\n\n\t{\n\t\tglm::i8vec2 AMin(std::numeric_limits<glm::i8>::max());\n\t\tglm::i8vec2 AMax(std::numeric_limits<glm::i8>::min());\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t\t{\n\t\t\t\tglm::i8vec2 A = glm::linearRand(glm::i8vec2(Min), glm::i8vec2(Max));\n\t\t\t\tAMin = glm::min(AMin, A);\n\t\t\t\tAMax = glm::max(AMax, A);\n\n\t\t\t\tif(!glm::all(glm::lessThanEqual(A, glm::i8vec2(Max))))\n\t\t\t\t\t++Error;\n\t\t\t\tif(!glm::all(glm::greaterThanEqual(A, glm::i8vec2(Min))))\n\t\t\t\t\t++Error;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\n\t\t\tError += glm::all(glm::equal(AMin, glm::i8vec2(Min))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(AMax, glm::i8vec2(Max))) ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\tglm::i16vec2 BMin(std::numeric_limits<glm::i16>::max());\n\t\tglm::i16vec2 BMax(std::numeric_limits<glm::i16>::min());\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t\t{\n\t\t\t\tglm::i16vec2 B = glm::linearRand(glm::i16vec2(Min), glm::i16vec2(Max));\n\t\t\t\tBMin = glm::min(BMin, B);\n\t\t\t\tBMax = glm::max(BMax, B);\n\n\t\t\t\tif(!glm::all(glm::lessThanEqual(B, glm::i16vec2(Max))))\n\t\t\t\t\t++Error;\n\t\t\t\tif(!glm::all(glm::greaterThanEqual(B, glm::i16vec2(Min))))\n\t\t\t\t\t++Error;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\n\t\t\tError += glm::all(glm::equal(BMin, glm::i16vec2(Min))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(BMax, glm::i16vec2(Max))) ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\tglm::i32vec2 CMin(std::numeric_limits<glm::i32>::max());\n\t\tglm::i32vec2 CMax(std::numeric_limits<glm::i32>::min());\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t\t{\n\t\t\t\tglm::i32vec2 C = glm::linearRand(glm::i32vec2(Min), glm::i32vec2(Max));\n\t\t\t\tCMin = glm::min(CMin, C);\n\t\t\t\tCMax = glm::max(CMax, C);\n\n\t\t\t\tif(!glm::all(glm::lessThanEqual(C, glm::i32vec2(Max))))\n\t\t\t\t\t++Error;\n\t\t\t\tif(!glm::all(glm::greaterThanEqual(C, glm::i32vec2(Min))))\n\t\t\t\t\t++Error;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\n\t\t\tError += glm::all(glm::equal(CMin, glm::i32vec2(Min))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(CMax, glm::i32vec2(Max))) ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\n\t\tglm::i64vec2 DMin(std::numeric_limits<glm::i64>::max());\n\t\tglm::i64vec2 DMax(std::numeric_limits<glm::i64>::min());\n\t\t{\n\t\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t\t{\n\t\t\t\tglm::i64vec2 D = glm::linearRand(glm::i64vec2(Min), glm::i64vec2(Max));\n\t\t\t\tDMin = glm::min(DMin, D);\n\t\t\t\tDMax = glm::max(DMax, D);\n\n\t\t\t\tif(!glm::all(glm::lessThanEqual(D, glm::i64vec2(Max))))\n\t\t\t\t\t++Error;\n\t\t\t\tif(!glm::all(glm::greaterThanEqual(D, glm::i64vec2(Min))))\n\t\t\t\t\t++Error;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\n\t\t\tError += glm::all(glm::equal(DMin, glm::i64vec2(Min))) ? 0 : 1;\n\t\t\tError += glm::all(glm::equal(DMax, glm::i64vec2(Max))) ? 0 : 1;\n\t\t\tassert(!Error);\n\t\t}\n\t}\n\n\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t{\n\t\tglm::f32vec2 const A(glm::linearRand(glm::f32vec2(static_cast<float>(Min)), glm::f32vec2(static_cast<float>(Max))));\n\t\tif(!glm::all(glm::lessThanEqual(A, glm::f32vec2(static_cast<float>(Max)))))\n\t\t\t++Error;\n\t\tif(!glm::all(glm::greaterThanEqual(A, glm::f32vec2(static_cast<float>(Min)))))\n\t\t\t++Error;\n\n\t\tglm::f64vec2 const B(glm::linearRand(glm::f64vec2(Min), glm::f64vec2(Max)));\n\t\tif(!glm::all(glm::lessThanEqual(B, glm::f64vec2(Max))))\n\t\t\t++Error;\n\t\tif(!glm::all(glm::greaterThanEqual(B, glm::f64vec2(Min))))\n\t\t\t++Error;\n\t\tassert(!Error);\n\t}\n\n\t{\n\t\tfloat ResultFloat = 0.0f;\n\t\tdouble ResultDouble = 0.0;\n\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t{\n\t\t\tResultFloat += glm::linearRand(-1.0f, 1.0f);\n\t\t\tResultDouble += glm::linearRand(-1.0, 1.0);\n\t\t}\n\n\t\tError += glm::epsilonEqual(ResultFloat, 0.0f, 0.0001f);\n\t\tError += glm::epsilonEqual(ResultDouble, 0.0, 0.0001);\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_circularRand()\n{\n\tint Error = 0;\n\n\t{\n\t\tstd::size_t Max = TestSamples;\n\t\tfloat ResultFloat = 0.0f;\n\t\tdouble ResultDouble = 0.0;\n\t\tdouble Radius = 2.0;\n\n\t\tfor(std::size_t i = 0; i < Max; ++i)\n\t\t{\n\t\t\tResultFloat += glm::length(glm::circularRand(1.0f));\n\t\t\tResultDouble += glm::length(glm::circularRand(Radius));\n\t\t}\n\n\t\tError += glm::epsilonEqual(ResultFloat, float(Max), 0.01f) ? 0 : 1;\n\t\tError += glm::epsilonEqual(ResultDouble, double(Max) * double(Radius), 0.01) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_sphericalRand()\n{\n\tint Error = 0;\n\n\t{\n\t\tstd::size_t Max = TestSamples;\n\t\tfloat ResultFloatA = 0.0f;\n\t\tfloat ResultFloatB = 0.0f;\n\t\tfloat ResultFloatC = 0.0f;\n\t\tdouble ResultDoubleA = 0.0;\n\t\tdouble ResultDoubleB = 0.0;\n\t\tdouble ResultDoubleC = 0.0;\n\n\t\tfor(std::size_t i = 0; i < Max; ++i)\n\t\t{\n\t\t\tResultFloatA += glm::length(glm::sphericalRand(1.0f));\n\t\t\tResultDoubleA += glm::length(glm::sphericalRand(1.0));\n\t\t\tResultFloatB += glm::length(glm::sphericalRand(2.0f));\n\t\t\tResultDoubleB += glm::length(glm::sphericalRand(2.0));\n\t\t\tResultFloatC += glm::length(glm::sphericalRand(3.0f));\n\t\t\tResultDoubleC += glm::length(glm::sphericalRand(3.0));\n\t\t}\n\n\t\tError += glm::epsilonEqual(ResultFloatA, float(Max), 0.01f) ? 0 : 1;\n\t\tError += glm::epsilonEqual(ResultDoubleA, double(Max), 0.0001) ? 0 : 1;\n\t\tError += glm::epsilonEqual(ResultFloatB, float(Max * 2), 0.01f) ? 0 : 1;\n\t\tError += glm::epsilonEqual(ResultDoubleB, double(Max * 2), 0.0001) ? 0 : 1;\n\t\tError += glm::epsilonEqual(ResultFloatC, float(Max * 3), 0.01f) ? 0 : 1;\n\t\tError += glm::epsilonEqual(ResultDoubleC, double(Max * 3), 0.01) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_diskRand()\n{\n\tint Error = 0;\n\n\t{\n\t\tfloat ResultFloat = 0.0f;\n\t\tdouble ResultDouble = 0.0;\n\n\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t{\n\t\t\tResultFloat += glm::length(glm::diskRand(2.0f));\n\t\t\tResultDouble += glm::length(glm::diskRand(2.0));\n\t\t}\n\n\t\tError += ResultFloat < float(TestSamples) * 2.f ? 0 : 1;\n\t\tError += ResultDouble < double(TestSamples) * 2.0 ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_ballRand()\n{\n\tint Error = 0;\n\n\t{\n\t\tfloat ResultFloat = 0.0f;\n\t\tdouble ResultDouble = 0.0;\n\n\t\tfor(std::size_t i = 0; i < TestSamples; ++i)\n\t\t{\n\t\t\tResultFloat += glm::length(glm::ballRand(2.0f));\n\t\t\tResultDouble += glm::length(glm::ballRand(2.0));\n\t\t}\n\n\t\tError += ResultFloat < float(TestSamples) * 2.f ? 0 : 1;\n\t\tError += ResultDouble < double(TestSamples) * 2.0 ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n/*\n#if(GLM_LANG & GLM_LANG_CXX0X_FLAG)\nint test_grid()\n{\n\tint Error = 0;\n\n\ttypedef std::array<int, 8> colors;\n\ttypedef std::array<int, 8 * 8> grid;\n\n\tgrid Grid;\n\tcolors Colors;\n\n\tgrid GridBest;\n\tcolors ColorsBest;\n\n\twhile(true)\n\t{\n\t\tfor(std::size_t i = 0; i < Grid.size(); ++i)\n\t\t\tGrid[i] = int(glm::linearRand(0.0, 8.0 * 8.0 * 8.0 - 1.0) / 64.0);\n\n\t\tfor(std::size_t i = 0; i < Grid.size(); ++i)\n\t\t\t++Colors[Grid[i]];\n\n\t\tbool Exit = true;\n\t\tfor(std::size_t i = 0; i < Colors.size(); ++i)\n\t\t{\n\t\t\tif(Colors[i] == 8)\n\t\t\t\tcontinue;\n\n\t\t\tExit = false;\n\t\t\tbreak;\n\t\t}\n\n\t\tif(Exit == true)\n\t\t\tbreak;\n\t}\n\n\treturn Error;\n}\n#endif\n*/\nint main()\n{\n\tint Error = 0;\n\n\tError += test_linearRand();\n\tError += test_circularRand();\n\tError += test_sphericalRand();\n\tError += test_diskRand();\n\tError += test_ballRand();\n/*\n#if(GLM_LANG & GLM_LANG_CXX0X_FLAG)\n\tError += test_grid();\n#endif\n*/\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_reciprocal.cpp",
    "content": "#include <glm/gtc/reciprocal.hpp>\n#include <ctime>\n\nint main()\n{\n\treturn 0;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_round.cpp",
    "content": "#include <glm/gtc/round.hpp>\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <vector>\n#include <ctime>\n#include <cstdio>\n\nnamespace isPowerOfTwo\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tbool\t\tReturn;\n\t};\n\n\tint test_int16()\n\t{\n\t\ttype<glm::int16> const Data[] =\n\t\t{\n\t\t\t{0x0001, true},\n\t\t\t{0x0002, true},\n\t\t\t{0x0004, true},\n\t\t\t{0x0080, true},\n\t\t\t{0x0000, true},\n\t\t\t{0x0003, false}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::int16>); i < n; ++i)\n\t\t{\n\t\t\tbool Result = glm::isPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_uint16()\n\t{\n\t\ttype<glm::uint16> const Data[] =\n\t\t{\n\t\t\t{0x0001, true},\n\t\t\t{0x0002, true},\n\t\t\t{0x0004, true},\n\t\t\t{0x0000, true},\n\t\t\t{0x0000, true},\n\t\t\t{0x0003, false}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint16>); i < n; ++i)\n\t\t{\n\t\t\tbool Result = glm::isPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_int32()\n\t{\n\t\ttype<int> const Data[] =\n\t\t{\n\t\t\t{0x00000001, true},\n\t\t\t{0x00000002, true},\n\t\t\t{0x00000004, true},\n\t\t\t{0x0000000f, false},\n\t\t\t{0x00000000, true},\n\t\t\t{0x00000003, false}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tbool Result = glm::isPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tglm::bvec1 Result = glm::isPowerOfTwo(glm::ivec1(Data[i].Value));\n\t\t\tError += glm::all(glm::equal(glm::bvec1(Data[i].Return), Result)) ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tglm::bvec2 Result = glm::isPowerOfTwo(glm::ivec2(Data[i].Value));\n\t\t\tError += glm::all(glm::equal(glm::bvec2(Data[i].Return), Result)) ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tglm::bvec3 Result = glm::isPowerOfTwo(glm::ivec3(Data[i].Value));\n\t\t\tError += glm::all(glm::equal(glm::bvec3(Data[i].Return), Result)) ? 0 : 1;\n\t\t}\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tglm::bvec4 Result = glm::isPowerOfTwo(glm::ivec4(Data[i].Value));\n\t\t\tError += glm::all(glm::equal(glm::bvec4(Data[i].Return), Result)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_uint32()\n\t{\n\t\ttype<glm::uint> const Data[] =\n\t\t{\n\t\t\t{0x00000001, true},\n\t\t\t{0x00000002, true},\n\t\t\t{0x00000004, true},\n\t\t\t{0x80000000, true},\n\t\t\t{0x00000000, true},\n\t\t\t{0x00000003, false}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint>); i < n; ++i)\n\t\t{\n\t\t\tbool Result = glm::isPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tError += test_int16();\n\t\tError += test_uint16();\n\t\tError += test_int32();\n\t\tError += test_uint32();\n\n\t\treturn Error;\n\t}\n}//isPowerOfTwo\n\nnamespace ceilPowerOfTwo_advanced\n{\n\ttemplate<typename genIUType>\n\tGLM_FUNC_QUALIFIER genIUType highestBitValue(genIUType Value)\n\t{\n\t\tgenIUType tmp = Value;\n\t\tgenIUType result = genIUType(0);\n\t\twhile(tmp)\n\t\t{\n\t\t\tresult = (tmp & (~tmp + 1)); // grab lowest bit\n\t\t\ttmp &= ~result; // clear lowest bit\n\t\t}\n\t\treturn result;\n\t}\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType ceilPowerOfTwo_loop(genType value)\n\t{\n\t\treturn glm::isPowerOfTwo(value) ? value : highestBitValue(value) << 1;\n\t}\n\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tValue;\n\t\tgenType\t\tReturn;\n\t};\n\n\tint test_int32()\n\t{\n\t\ttype<glm::int32> const Data[] =\n\t\t{\n\t\t\t{0x0000ffff, 0x00010000},\n\t\t\t{-3, -4},\n\t\t\t{-8, -8},\n\t\t\t{0x00000001, 0x00000001},\n\t\t\t{0x00000002, 0x00000002},\n\t\t\t{0x00000004, 0x00000004},\n\t\t\t{0x00000007, 0x00000008},\n\t\t\t{0x0000fff0, 0x00010000},\n\t\t\t{0x0000f000, 0x00010000},\n\t\t\t{0x08000000, 0x08000000},\n\t\t\t{0x00000000, 0x00000000},\n\t\t\t{0x00000003, 0x00000004}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::int32>); i < n; ++i)\n\t\t{\n\t\t\tglm::int32 Result = glm::ceilPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_uint32()\n\t{\n\t\ttype<glm::uint32> const Data[] =\n\t\t{\n\t\t\t{0x00000001, 0x00000001},\n\t\t\t{0x00000002, 0x00000002},\n\t\t\t{0x00000004, 0x00000004},\n\t\t\t{0x00000007, 0x00000008},\n\t\t\t{0x0000ffff, 0x00010000},\n\t\t\t{0x0000fff0, 0x00010000},\n\t\t\t{0x0000f000, 0x00010000},\n\t\t\t{0x80000000, 0x80000000},\n\t\t\t{0x00000000, 0x00000000},\n\t\t\t{0x00000003, 0x00000004}\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::uint32>); i < n; ++i)\n\t\t{\n\t\t\tglm::uint32 Result = glm::ceilPowerOfTwo(Data[i].Value);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint perf()\n\t{\n\t\tint Error(0);\n\n\t\tstd::vector<glm::uint> v;\n\t\tv.resize(100000000);\n\n\t\tstd::clock_t Timestramp0 = std::clock();\n\n\t\tfor(glm::uint32 i = 0, n = static_cast<glm::uint>(v.size()); i < n; ++i)\n\t\t\tv[i] = ceilPowerOfTwo_loop(i);\n\n\t\tstd::clock_t Timestramp1 = std::clock();\n\n\t\tfor(glm::uint32 i = 0, n = static_cast<glm::uint>(v.size()); i < n; ++i)\n\t\t\tv[i] = glm::ceilPowerOfTwo(i);\n\n\t\tstd::clock_t Timestramp2 = std::clock();\n\n\t\tstd::printf(\"ceilPowerOfTwo_loop: %d clocks\\n\", static_cast<int>(Timestramp1 - Timestramp0));\n\t\tstd::printf(\"glm::ceilPowerOfTwo: %d clocks\\n\", static_cast<int>(Timestramp2 - Timestramp1));\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tError += test_int32();\n\t\tError += test_uint32();\n\n\t\treturn Error;\n\t}\n}//namespace ceilPowerOfTwo_advanced\n\nnamespace roundPowerOfTwo\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tglm::uint32 const A = glm::roundPowerOfTwo(7u);\n\t\tError += A == 8u ? 0 : 1;\n\t\t\n\t\tglm::uint32 const B = glm::roundPowerOfTwo(15u);\n\t\tError += B == 16u ? 0 : 1;\n\n\t\tglm::uint32 const C = glm::roundPowerOfTwo(31u);\n\t\tError += C == 32u ? 0 : 1;\n\t\t\n\t\tglm::uint32 const D = glm::roundPowerOfTwo(9u);\n\t\tError += D == 8u ? 0 : 1;\n\t\t\n\t\tglm::uint32 const E = glm::roundPowerOfTwo(17u);\n\t\tError += E == 16u ? 0 : 1;\n\t\t\n\t\tglm::uint32 const F = glm::roundPowerOfTwo(33u);\n\t\tError += F == 32u ? 0 : 1;\n\t\t\n\t\treturn Error;\n\t}\n}//namespace roundPowerOfTwo\n\nnamespace floorPowerOfTwo\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tglm::uint32 const A = glm::floorPowerOfTwo(7u);\n\t\tError += A == 4u ? 0 : 1;\n\t\t\n\t\tglm::uint32 const B = glm::floorPowerOfTwo(15u);\n\t\tError += B == 8u ? 0 : 1;\n\t\t\n\t\tglm::uint32 const C = glm::floorPowerOfTwo(31u);\n\t\tError += C == 16u ? 0 : 1;\n\t\t\n\t\treturn Error;\n\t}\n}//namespace floorPowerOfTwo\n\nnamespace ceilPowerOfTwo\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\t\t\n\t\tglm::uint32 const A = glm::ceilPowerOfTwo(7u);\n\t\tError += A == 8u ? 0 : 1;\n\t\t\n\t\tglm::uint32 const B = glm::ceilPowerOfTwo(15u);\n\t\tError += B == 16u ? 0 : 1;\n\t\t\n\t\tglm::uint32 const C = glm::ceilPowerOfTwo(31u);\n\t\tError += C == 32u ? 0 : 1;\n\t\t\n\t\treturn Error;\n\t}\n}//namespace ceilPowerOfTwo\n\nnamespace floorMultiple\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tSource;\n\t\tgenType\t\tMultiple;\n\t\tgenType\t\tReturn;\n\t\tgenType\t\tEpsilon;\n\t};\n\n\tint test_float()\n\t{\n\t\ttype<glm::float64> const Data[] = \n\t\t{\n\t\t\t{3.4, 0.3, 3.3, 0.0001},\n\t\t\t{-1.4, 0.3, -1.5, 0.0001},\n\t\t};\n\n\t\tint Error(0);\n\t\t\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::float64>); i < n; ++i)\n\t\t{\n\t\t\tglm::float64 Result = glm::floorMultiple(Data[i].Source, Data[i].Multiple);\n\t\t\tError += glm::epsilonEqual(Data[i].Return, Result, Data[i].Epsilon) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tError += test_float();\n\n\t\treturn Error;\n\t}\n}//namespace floorMultiple\n\nnamespace ceilMultiple\n{\n\ttemplate<typename genType>\n\tstruct type\n\t{\n\t\tgenType\t\tSource;\n\t\tgenType\t\tMultiple;\n\t\tgenType\t\tReturn;\n\t\tgenType\t\tEpsilon;\n\t};\n\n\tint test_float()\n\t{\n\t\ttype<glm::float64> const Data[] = \n\t\t{\n\t\t\t{3.4, 0.3, 3.6, 0.0001},\n\t\t\t{-1.4, 0.3, -1.2, 0.0001},\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<glm::float64>); i < n; ++i)\n\t\t{\n\t\t\tglm::float64 Result = glm::ceilMultiple(Data[i].Source, Data[i].Multiple);\n\t\t\tError += glm::epsilonEqual(Data[i].Return, Result, Data[i].Epsilon) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test_int()\n\t{\n\t\ttype<int> const Data[] = \n\t\t{\n\t\t\t{3, 4, 4, 0},\n\t\t\t{7, 4, 8, 0},\n\t\t\t{5, 4, 8, 0},\n\t\t\t{1, 4, 4, 0},\n\t\t\t{1, 3, 3, 0},\n\t\t\t{4, 3, 6, 0},\n\t\t\t{4, 1, 4, 0},\n\t\t\t{1, 1, 1, 0},\n\t\t\t{7, 1, 7, 0},\n\t\t};\n\n\t\tint Error(0);\n\n\t\tfor(std::size_t i = 0, n = sizeof(Data) / sizeof(type<int>); i < n; ++i)\n\t\t{\n\t\t\tint Result = glm::ceilMultiple(Data[i].Source, Data[i].Multiple);\n\t\t\tError += Data[i].Return == Result ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tError += test_int();\n\t\tError += test_float();\n\n\t\treturn Error;\n\t}\n}//namespace ceilMultiple\n\nint main()\n{\n\tint Error(0);\n\n\tError += isPowerOfTwo::test();\n\tError += floorPowerOfTwo::test();\n\tError += roundPowerOfTwo::test();\n\tError += ceilPowerOfTwo::test();\n\tError += ceilPowerOfTwo_advanced::test();\n\t\n#\tifdef NDEBUG\n\t\tError += ceilPowerOfTwo_advanced::perf();\n#\tendif//NDEBUG\n\n\tError += floorMultiple::test();\n\tError += ceilMultiple::test();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_type_aligned.cpp",
    "content": "#include <glm/glm.hpp>\n\n#if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n#include <glm/gtc/type_aligned.hpp>\n#include <glm/gtc/type_precision.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n\nGLM_STATIC_ASSERT(glm::detail::is_aligned<glm::aligned_lowp>::value, \"aligned_lowp is not aligned\");\nGLM_STATIC_ASSERT(glm::detail::is_aligned<glm::aligned_mediump>::value, \"aligned_mediump is not aligned\");\nGLM_STATIC_ASSERT(glm::detail::is_aligned<glm::aligned_highp>::value, \"aligned_highp is not aligned\");\nGLM_STATIC_ASSERT(!glm::detail::is_aligned<glm::packed_highp>::value, \"packed_highp is aligned\");\nGLM_STATIC_ASSERT(!glm::detail::is_aligned<glm::packed_mediump>::value, \"packed_mediump is aligned\");\nGLM_STATIC_ASSERT(!glm::detail::is_aligned<glm::packed_lowp>::value, \"packed_lowp is aligned\");\n\nstruct my_vec4_packed\n{\n\tglm::uint32 a;\n\tglm::vec4 b;\n};\nGLM_STATIC_ASSERT(sizeof(my_vec4_packed) == sizeof(glm::uint32) + sizeof(glm::vec4), \"glm::vec4 packed is not correct\");\n\nstruct my_vec4_aligned\n{\n\tglm::uint32 a;\n\tglm::aligned_vec4 b;\n};\nGLM_STATIC_ASSERT(sizeof(my_vec4_aligned) == sizeof(glm::aligned_vec4) * 2, \"glm::vec4 aligned is not correct\");\n\nstruct my_dvec4_packed\n{\n\tglm::uint64 a;\n\tglm::dvec4 b;\n};\nGLM_STATIC_ASSERT(sizeof(my_dvec4_packed) == sizeof(glm::uint64) + sizeof(glm::dvec4), \"glm::dvec4 packed is not correct\");\n\nstruct my_dvec4_aligned\n{\n\tglm::uint64 a;\n\tglm::aligned_dvec4 b;\n};\n//GLM_STATIC_ASSERT(sizeof(my_dvec4_aligned) == sizeof(glm::aligned_dvec4) * 2, \"glm::dvec4 aligned is not correct\");\n\nstruct my_ivec4_packed\n{\n\tglm::uint32 a;\n\tglm::ivec4 b;\n};\nGLM_STATIC_ASSERT(sizeof(my_ivec4_packed) == sizeof(glm::uint32) + sizeof(glm::ivec4), \"glm::ivec4 packed is not correct\");\n\nstruct my_ivec4_aligned\n{\n\tglm::uint32 a;\n\tglm::aligned_ivec4 b;\n};\nGLM_STATIC_ASSERT(sizeof(my_ivec4_aligned) == sizeof(glm::aligned_ivec4) * 2, \"glm::ivec4 aligned is not correct\");\n\nstruct my_u8vec4_packed\n{\n\tglm::uint32 a;\n\tglm::u8vec4 b;\n};\nGLM_STATIC_ASSERT(sizeof(my_u8vec4_packed) == sizeof(glm::uint32) + sizeof(glm::u8vec4), \"glm::u8vec4 packed is not correct\");\n\nstatic int test_copy()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::aligned_ivec4 const a(1, 2, 3, 4);\n\t\tglm::ivec4 const u(a);\n\n\t\tError += a.x == u.x ? 0 : 1;\n\t\tError += a.y == u.y ? 0 : 1;\n\t\tError += a.z == u.z ? 0 : 1;\n\t\tError += a.w == u.w ? 0 : 1;\n\t}\n\n\t{\n\t\tmy_ivec4_aligned a;\n\t\ta.b = glm::ivec4(1, 2, 3, 4);\n\n\t\tmy_ivec4_packed u;\n\t\tu.b = a.b;\n\n\t\tError += a.b.x == u.b.x ? 0 : 1;\n\t\tError += a.b.y == u.b.y ? 0 : 1;\n\t\tError += a.b.z == u.b.z ? 0 : 1;\n\t\tError += a.b.w == u.b.w ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_ctor()\n{\n\tint Error = 0;\n\n#\tif GLM_HAS_CONSTEXPR\n\t{\n\t\tconstexpr glm::aligned_ivec4 v(1);\n\n\t\tError += v.x == 1 ? 0 : 1;\n\t\tError += v.y == 1 ? 0 : 1;\n\t\tError += v.z == 1 ? 0 : 1;\n\t\tError += v.w == 1 ? 0 : 1;\n\t}\n\n\t{\n\t\tconstexpr glm::packed_ivec4 v(1);\n\n\t\tError += v.x == 1 ? 0 : 1;\n\t\tError += v.y == 1 ? 0 : 1;\n\t\tError += v.z == 1 ? 0 : 1;\n\t\tError += v.w == 1 ? 0 : 1;\n\t}\n\n\t{\n\t\tconstexpr glm::ivec4 v(1);\n\n\t\tError += v.x == 1 ? 0 : 1;\n\t\tError += v.y == 1 ? 0 : 1;\n\t\tError += v.z == 1 ? 0 : 1;\n\t\tError += v.w == 1 ? 0 : 1;\n\t}\n#\tendif//GLM_HAS_CONSTEXPR\n\n\treturn Error;\n}\n\nstatic int test_aligned_ivec4()\n{\n\tint Error = 0;\n\n\tglm::aligned_ivec4 const v(1, 2, 3, 4);\n\tError += glm::all(glm::equal(v, glm::aligned_ivec4(1, 2, 3, 4))) ? 0 : 1;\n\n\tglm::aligned_ivec4 const u = v * 2;\n\tError += glm::all(glm::equal(u, glm::aligned_ivec4(2, 4, 6, 8))) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_aligned_mat4()\n{\n\tint Error = 0;\n\n\tglm::aligned_vec4 const u(1.f, 2.f, 3.f, 4.f);\n\tError += glm::all(glm::equal(u, glm::aligned_vec4(1.f, 2.f, 3.f, 4.f), 0.0001f)) ? 0 : 1;\n\n\tglm::aligned_vec4 const v(1, 2, 3, 4);\n\tError += glm::all(glm::equal(v, glm::aligned_vec4(1.f, 2.f, 3.f, 4.f), 0.0001f)) ? 0 : 1;\n\n\tglm::aligned_mat4 const m(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15);\n\tglm::aligned_mat4 const t = glm::transpose(m);\n\tglm::aligned_mat4 const expected = glm::mat4(0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15);\n\tError += glm::all(glm::equal(t, expected, 0.0001f)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_ctor();\n\tError += test_copy();\n\tError += test_aligned_ivec4();\n\tError += test_aligned_mat4();\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_type_precision.cpp",
    "content": "#include <glm/gtc/type_precision.hpp>\n#include <glm/gtc/quaternion.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <vector>\n#if GLM_HAS_OPENMP\n#\tinclude <omp.h>\n#endif\n\n#if GLM_HAS_STATIC_ASSERT\nstatic_assert(sizeof(glm::lowp_u8vec1) == 1, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::mediump_u8vec1) == 1, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::highp_u8vec1) == 1, \"uint8 size isn't 1 byte on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u16vec1) == 2, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u16vec1) == 2, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u16vec1) == 2, \"uint16 size isn't 2 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u32vec1) == 4, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u32vec1) == 4, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u32vec1) == 4, \"uint32 size isn't 4 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u64vec1) == 8, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u64vec1) == 8, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u64vec1) == 8, \"uint64 size isn't 8 bytes on this platform\");\n\n\nstatic_assert(sizeof(glm::lowp_u8vec2) == 2, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::mediump_u8vec2) == 2, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::highp_u8vec2) == 2, \"uint8 size isn't 1 byte on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u16vec2) == 4, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u16vec2) == 4, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u16vec2) == 4, \"uint16 size isn't 2 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u32vec2) == 8, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u32vec2) == 8, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u32vec2) == 8, \"uint32 size isn't 4 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u64vec2) == 16, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u64vec2) == 16, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u64vec2) == 16, \"uint64 size isn't 8 bytes on this platform\");\n\n\nstatic_assert(sizeof(glm::lowp_u8vec3) == 3, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::mediump_u8vec3) == 3, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::highp_u8vec3) == 3, \"uint8 size isn't 1 byte on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u16vec3) == 6, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u16vec3) == 6, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u16vec3) == 6, \"uint16 size isn't 2 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u32vec3) == 12, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u32vec3) == 12, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u32vec3) == 12, \"uint32 size isn't 4 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u64vec3) == 24, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u64vec3) == 24, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u64vec3) == 24, \"uint64 size isn't 8 bytes on this platform\");\n\n\nstatic_assert(sizeof(glm::lowp_u8vec4) == 4, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::mediump_u8vec4) == 4, \"int8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::highp_u8vec4) == 4, \"int8 size isn't 1 byte on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u16vec4) == 8, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u16vec4) == 8, \"int16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u16vec4) == 8, \"int16 size isn't 2 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u32vec4) == 16, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u32vec4) == 16, \"int32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u32vec4) == 16, \"int32 size isn't 4 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u64vec4) == 32, \"int64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u64vec4) == 32, \"int64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u64vec4) == 32, \"int64 size isn't 8 bytes on this platform\");\n\n\nstatic_assert(sizeof(glm::lowp_u8vec1) == 1, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::mediump_u8vec1) == 1, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::highp_u8vec1) == 1, \"uint8 size isn't 1 byte on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u16vec1) == 2, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u16vec1) == 2, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u16vec1) == 2, \"uint16 size isn't 2 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u32vec1) == 4, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u32vec1) == 4, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u32vec1) == 4, \"uint32 size isn't 4 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u64vec1) == 8, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u64vec1) == 8, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u64vec1) == 8, \"uint64 size isn't 8 bytes on this platform\");\n\n\nstatic_assert(sizeof(glm::lowp_u8vec2) == 2, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::mediump_u8vec2) == 2, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::highp_u8vec2) == 2, \"uint8 size isn't 1 byte on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u16vec2) == 4, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u16vec2) == 4, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u16vec2) == 4, \"uint16 size isn't 2 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u32vec2) == 8, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u32vec2) == 8, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u32vec2) == 8, \"uint32 size isn't 4 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u64vec2) == 16, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u64vec2) == 16, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u64vec2) == 16, \"uint64 size isn't 8 bytes on this platform\");\n\n\nstatic_assert(sizeof(glm::lowp_u8vec3) == 3, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::mediump_u8vec3) == 3, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::highp_u8vec3) == 3, \"uint8 size isn't 1 byte on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u16vec3) == 6, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u16vec3) == 6, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u16vec3) == 6, \"uint16 size isn't 2 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u32vec3) == 12, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u32vec3) == 12, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u32vec3) == 12, \"uint32 size isn't 4 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u64vec3) == 24, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u64vec3) == 24, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u64vec3) == 24, \"uint64 size isn't 8 bytes on this platform\");\n\n\nstatic_assert(sizeof(glm::lowp_u8vec4) == 4, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::mediump_u8vec4) == 4, \"uint8 size isn't 1 byte on this platform\");\nstatic_assert(sizeof(glm::highp_u8vec4) == 4, \"uint8 size isn't 1 byte on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u16vec4) == 8, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u16vec4) == 8, \"uint16 size isn't 2 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u16vec4) == 8, \"uint16 size isn't 2 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u32vec4) == 16, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u32vec4) == 16, \"uint32 size isn't 4 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u32vec4) == 16, \"uint32 size isn't 4 bytes on this platform\");\n\nstatic_assert(sizeof(glm::lowp_u64vec4) == 32, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::mediump_u64vec4) == 32, \"uint64 size isn't 8 bytes on this platform\");\nstatic_assert(sizeof(glm::highp_u64vec4) == 32, \"uint64 size isn't 8 bytes on this platform\");\n\n#endif\n\nstatic int test_scalar_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::int8) != 1;\n\tError += sizeof(glm::int16) != 2;\n\tError += sizeof(glm::int32) != 4;\n\tError += sizeof(glm::int64) != 8;\n\tError += sizeof(glm::uint8) != 1;\n\tError += sizeof(glm::uint16) != 2;\n\tError += sizeof(glm::uint32) != 4;\n\tError += sizeof(glm::uint64) != 8;\n\tError += sizeof(glm::float32) != 4;\n\tError += sizeof(glm::float64) != 8;\n\n\tError += sizeof(glm::lowp_int8) != 1;\n\tError += sizeof(glm::lowp_int16) != 2;\n\tError += sizeof(glm::lowp_int32) != 4;\n\tError += sizeof(glm::lowp_int64) != 8;\n\tError += sizeof(glm::lowp_uint8) != 1;\n\tError += sizeof(glm::lowp_uint16) != 2;\n\tError += sizeof(glm::lowp_uint32) != 4;\n\tError += sizeof(glm::lowp_uint64) != 8;\n\tError += sizeof(glm::lowp_float32) != 4;\n\tError += sizeof(glm::lowp_float64) != 8;\n\n\tError += sizeof(glm::mediump_int8) != 1;\n\tError += sizeof(glm::mediump_int16) != 2;\n\tError += sizeof(glm::mediump_int32) != 4;\n\tError += sizeof(glm::mediump_int64) != 8;\n\tError += sizeof(glm::mediump_uint8) != 1;\n\tError += sizeof(glm::mediump_uint16) != 2;\n\tError += sizeof(glm::mediump_uint32) != 4;\n\tError += sizeof(glm::mediump_uint64) != 8;\n\tError += sizeof(glm::mediump_float32) != 4;\n\tError += sizeof(glm::mediump_float64) != 8;\n\n\tError += sizeof(glm::highp_int8) != 1;\n\tError += sizeof(glm::highp_int16) != 2;\n\tError += sizeof(glm::highp_int32) != 4;\n\tError += sizeof(glm::highp_int64) != 8;\n\tError += sizeof(glm::highp_uint8) != 1;\n\tError += sizeof(glm::highp_uint16) != 2;\n\tError += sizeof(glm::highp_uint32) != 4;\n\tError += sizeof(glm::highp_uint64) != 8;\n\tError += sizeof(glm::highp_float32) != 4;\n\tError += sizeof(glm::highp_float64) != 8;\n\n\treturn Error;\n}\n\nstatic int test_fvec_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::f32vec2) != 8;\n\tError += sizeof(glm::f32vec3) != 12;\n\tError += sizeof(glm::f32vec4) != 16;\n\tError += sizeof(glm::f64vec2) != 16;\n\tError += sizeof(glm::f64vec3) != 24;\n\tError += sizeof(glm::f64vec4) != 32;\n\n\tError += sizeof(glm::lowp_f32vec2) != 8;\n\tError += sizeof(glm::lowp_f32vec3) != 12;\n\tError += sizeof(glm::lowp_f32vec4) != 16;\n\tError += sizeof(glm::lowp_f64vec2) != 16;\n\tError += sizeof(glm::lowp_f64vec3) != 24;\n\tError += sizeof(glm::lowp_f64vec4) != 32;\n\n\tError += sizeof(glm::mediump_f32vec2) != 8;\n\tError += sizeof(glm::mediump_f32vec3) != 12;\n\tError += sizeof(glm::mediump_f32vec4) != 16;\n\tError += sizeof(glm::mediump_f64vec2) != 16;\n\tError += sizeof(glm::mediump_f64vec3) != 24;\n\tError += sizeof(glm::mediump_f64vec4) != 32;\n\n\tError += sizeof(glm::highp_f32vec2) != 8;\n\tError += sizeof(glm::highp_f32vec3) != 12;\n\tError += sizeof(glm::highp_f32vec4) != 16;\n\tError += sizeof(glm::highp_f64vec2) != 16;\n\tError += sizeof(glm::highp_f64vec3) != 24;\n\tError += sizeof(glm::highp_f64vec4) != 32;\n\n\treturn Error;\n}\n\nstatic int test_fvec_precision()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::f32vec2 v1(1.f);\n\t\tglm::lowp_f32vec2 v2(v1);\n\t\tglm::mediump_f32vec2 v3(v1);\n\t\tglm::highp_f32vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::f32vec2(v2), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f32vec2(v3), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f32vec2(v4), glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::f32vec3 v1(1.f);\n\t\tglm::lowp_f32vec3 v2(v1);\n\t\tglm::mediump_f32vec3 v3(v1);\n\t\tglm::highp_f32vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::f32vec3(v2), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f32vec3(v3), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f32vec3(v4), glm::epsilon<float>())) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tglm::f32vec4 v1(1.f);\n\t\tglm::lowp_f32vec4 v2(v1);\n\t\tglm::mediump_f32vec4 v3(v1);\n\t\tglm::highp_f32vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::f32vec4(v2), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f32vec4(v3), glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f32vec4(v4), glm::epsilon<float>())) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nstatic int test_dvec_precision()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::f64vec2 v1(1.0);\n\t\tglm::lowp_f64vec2 v2(v1);\n\t\tglm::mediump_f64vec2 v3(v1);\n\t\tglm::highp_f64vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::f64vec2(v2), glm::epsilon<double>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f64vec2(v3), glm::epsilon<double>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f64vec2(v4), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::f64vec3 v1(1.0);\n\t\tglm::lowp_f64vec3 v2(v1);\n\t\tglm::mediump_f64vec3 v3(v1);\n\t\tglm::highp_f64vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::f64vec3(v2), glm::epsilon<double>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f64vec3(v3), glm::epsilon<double>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f64vec3(v4), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::f64vec4 v1(1.0);\n\t\tglm::lowp_f64vec4 v2(v1);\n\t\tglm::mediump_f64vec4 v3(v1);\n\t\tglm::highp_f64vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::f64vec4(v2), glm::epsilon<double>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f64vec4(v3), glm::epsilon<double>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::f64vec4(v4), glm::epsilon<double>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_ivec_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::i8vec2) != 2;\n\tError += sizeof(glm::i8vec3) != 3;\n\tError += sizeof(glm::i8vec4) != 4;\n\tError += sizeof(glm::i16vec2) != 4;\n\tError += sizeof(glm::i16vec3) != 6;\n\tError += sizeof(glm::i16vec4) != 8;\n\tError += sizeof(glm::i32vec2) != 8;\n\tError += sizeof(glm::i32vec3) != 12;\n\tError += sizeof(glm::i32vec4) != 16;\n\tError += sizeof(glm::i64vec2) != 16;\n\tError += sizeof(glm::i64vec3) != 24;\n\tError += sizeof(glm::i64vec4) != 32;\n\n\tError += sizeof(glm::lowp_i8vec2) != 2;\n\tError += sizeof(glm::lowp_i8vec3) != 3;\n\tError += sizeof(glm::lowp_i8vec4) != 4;\n\tError += sizeof(glm::lowp_i16vec2) != 4;\n\tError += sizeof(glm::lowp_i16vec3) != 6;\n\tError += sizeof(glm::lowp_i16vec4) != 8;\n\tError += sizeof(glm::lowp_i32vec2) != 8;\n\tError += sizeof(glm::lowp_i32vec3) != 12;\n\tError += sizeof(glm::lowp_i32vec4) != 16;\n\tError += sizeof(glm::lowp_i64vec2) != 16;\n\tError += sizeof(glm::lowp_i64vec3) != 24;\n\tError += sizeof(glm::lowp_i64vec4) != 32;\n\n\tError += sizeof(glm::mediump_i8vec2) != 2;\n\tError += sizeof(glm::mediump_i8vec3) != 3;\n\tError += sizeof(glm::mediump_i8vec4) != 4;\n\tError += sizeof(glm::mediump_i16vec2) != 4;\n\tError += sizeof(glm::mediump_i16vec3) != 6;\n\tError += sizeof(glm::mediump_i16vec4) != 8;\n\tError += sizeof(glm::mediump_i32vec2) != 8;\n\tError += sizeof(glm::mediump_i32vec3) != 12;\n\tError += sizeof(glm::mediump_i32vec4) != 16;\n\tError += sizeof(glm::mediump_i64vec2) != 16;\n\tError += sizeof(glm::mediump_i64vec3) != 24;\n\tError += sizeof(glm::mediump_i64vec4) != 32;\n\n\tError += sizeof(glm::highp_i8vec2) != 2;\n\tError += sizeof(glm::highp_i8vec3) != 3;\n\tError += sizeof(glm::highp_i8vec4) != 4;\n\tError += sizeof(glm::highp_i16vec2) != 4;\n\tError += sizeof(glm::highp_i16vec3) != 6;\n\tError += sizeof(glm::highp_i16vec4) != 8;\n\tError += sizeof(glm::highp_i32vec2) != 8;\n\tError += sizeof(glm::highp_i32vec3) != 12;\n\tError += sizeof(glm::highp_i32vec4) != 16;\n\tError += sizeof(glm::highp_i64vec2) != 16;\n\tError += sizeof(glm::highp_i64vec3) != 24;\n\tError += sizeof(glm::highp_i64vec4) != 32;\n\n\treturn Error;\n}\n\nstatic int test_ivec_precision()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::i8vec2 v1(0);\n\t\tglm::lowp_i8vec2 v2(v1);\n\t\tglm::mediump_i8vec2 v3(v1);\n\t\tglm::highp_i8vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i8vec2(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i8vec2(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i8vec2(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i8vec3 v1(0);\n\t\tglm::lowp_i8vec3 v2(v1);\n\t\tglm::mediump_i8vec3 v3(v1);\n\t\tglm::highp_i8vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i8vec3(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i8vec3(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i8vec3(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i8vec4 v1(0);\n\t\tglm::lowp_i8vec4 v2(v1);\n\t\tglm::mediump_i8vec4 v3(v1);\n\t\tglm::highp_i8vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i8vec4(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i8vec4(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i8vec4(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i16vec2 v1(0);\n\t\tglm::lowp_i16vec2 v2(v1);\n\t\tglm::mediump_i16vec2 v3(v1);\n\t\tglm::highp_i16vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i16vec2(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i16vec2(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i16vec2(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i16vec3 v1(0);\n\t\tglm::lowp_i16vec3 v2(v1);\n\t\tglm::mediump_i16vec3 v3(v1);\n\t\tglm::highp_i16vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i16vec3(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i16vec3(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i16vec3(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i16vec4 v1(0);\n\t\tglm::lowp_i16vec4 v2(v1);\n\t\tglm::mediump_i16vec4 v3(v1);\n\t\tglm::highp_i16vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i16vec4(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i16vec4(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i16vec4(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i32vec2 v1(0);\n\t\tglm::lowp_i32vec2 v2(v1);\n\t\tglm::mediump_i32vec2 v3(v1);\n\t\tglm::highp_i32vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i32vec2(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i32vec2(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i32vec2(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i32vec3 v1(0);\n\t\tglm::lowp_i32vec3 v2(v1);\n\t\tglm::mediump_i32vec3 v3(v1);\n\t\tglm::highp_i32vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i32vec3(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i32vec3(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i32vec3(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i32vec4 v1(0);\n\t\tglm::lowp_i32vec4 v2(v1);\n\t\tglm::mediump_i32vec4 v3(v1);\n\t\tglm::highp_i32vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i32vec4(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i32vec4(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i32vec4(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i64vec2 v1(0);\n\t\tglm::lowp_i64vec2 v2(v1);\n\t\tglm::mediump_i64vec2 v3(v1);\n\t\tglm::highp_i64vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i64vec2(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i64vec2(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i64vec2(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i64vec3 v1(0);\n\t\tglm::lowp_i64vec3 v2(v1);\n\t\tglm::mediump_i64vec3 v3(v1);\n\t\tglm::highp_i64vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i64vec3(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i64vec3(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i64vec3(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::i64vec4 v1(0);\n\t\tglm::lowp_i64vec4 v2(v1);\n\t\tglm::mediump_i64vec4 v3(v1);\n\t\tglm::highp_i64vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::i64vec4(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i64vec4(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::i64vec4(v4))) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_uvec_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::u8vec2) != 2;\n\tError += sizeof(glm::u8vec3) != 3;\n\tError += sizeof(glm::u8vec4) != 4;\n\tError += sizeof(glm::u16vec2) != 4;\n\tError += sizeof(glm::u16vec3) != 6;\n\tError += sizeof(glm::u16vec4) != 8;\n\tError += sizeof(glm::u32vec2) != 8;\n\tError += sizeof(glm::u32vec3) != 12;\n\tError += sizeof(glm::u32vec4) != 16;\n\tError += sizeof(glm::u64vec2) != 16;\n\tError += sizeof(glm::u64vec3) != 24;\n\tError += sizeof(glm::u64vec4) != 32;\n\n\tError += sizeof(glm::lowp_u8vec2) != 2;\n\tError += sizeof(glm::lowp_u8vec3) != 3;\n\tError += sizeof(glm::lowp_u8vec4) != 4;\n\tError += sizeof(glm::lowp_u16vec2) != 4;\n\tError += sizeof(glm::lowp_u16vec3) != 6;\n\tError += sizeof(glm::lowp_u16vec4) != 8;\n\tError += sizeof(glm::lowp_u32vec2) != 8;\n\tError += sizeof(glm::lowp_u32vec3) != 12;\n\tError += sizeof(glm::lowp_u32vec4) != 16;\n\tError += sizeof(glm::lowp_u64vec2) != 16;\n\tError += sizeof(glm::lowp_u64vec3) != 24;\n\tError += sizeof(glm::lowp_u64vec4) != 32;\n\n\tError += sizeof(glm::mediump_u8vec2) != 2;\n\tError += sizeof(glm::mediump_u8vec3) != 3;\n\tError += sizeof(glm::mediump_u8vec4) != 4;\n\tError += sizeof(glm::mediump_u16vec2) != 4;\n\tError += sizeof(glm::mediump_u16vec3) != 6;\n\tError += sizeof(glm::mediump_u16vec4) != 8;\n\tError += sizeof(glm::mediump_u32vec2) != 8;\n\tError += sizeof(glm::mediump_u32vec3) != 12;\n\tError += sizeof(glm::mediump_u32vec4) != 16;\n\tError += sizeof(glm::mediump_u64vec2) != 16;\n\tError += sizeof(glm::mediump_u64vec3) != 24;\n\tError += sizeof(glm::mediump_u64vec4) != 32;\n\n\tError += sizeof(glm::highp_u8vec2) != 2;\n\tError += sizeof(glm::highp_u8vec3) != 3;\n\tError += sizeof(glm::highp_u8vec4) != 4;\n\tError += sizeof(glm::highp_u16vec2) != 4;\n\tError += sizeof(glm::highp_u16vec3) != 6;\n\tError += sizeof(glm::highp_u16vec4) != 8;\n\tError += sizeof(glm::highp_u32vec2) != 8;\n\tError += sizeof(glm::highp_u32vec3) != 12;\n\tError += sizeof(glm::highp_u32vec4) != 16;\n\tError += sizeof(glm::highp_u64vec2) != 16;\n\tError += sizeof(glm::highp_u64vec3) != 24;\n\tError += sizeof(glm::highp_u64vec4) != 32;\n\n\treturn Error;\n}\n\nstatic int test_uvec_precision()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::u8vec2 v1(0);\n\t\tglm::lowp_u8vec2 v2(v1);\n\t\tglm::mediump_u8vec2 v3(v1);\n\t\tglm::highp_u8vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u8vec2(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u8vec2(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u8vec2(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::u8vec3 v1(0);\n\t\tglm::lowp_u8vec3 v2(v1);\n\t\tglm::mediump_u8vec3 v3(v1);\n\t\tglm::highp_u8vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u8vec3(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u8vec3(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u8vec3(v4))) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tglm::u8vec4 v1(0);\n\t\tglm::lowp_u8vec4 v2(v1);\n\t\tglm::mediump_u8vec4 v3(v1);\n\t\tglm::highp_u8vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u8vec4(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u8vec4(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u8vec4(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::u16vec2 v1(0);\n\t\tglm::lowp_u16vec2 v2(v1);\n\t\tglm::mediump_u16vec2 v3(v1);\n\t\tglm::highp_u16vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u16vec2(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u16vec2(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u16vec2(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::u16vec3 v1(0);\n\t\tglm::lowp_u16vec3 v2(v1);\n\t\tglm::mediump_u16vec3 v3(v1);\n\t\tglm::highp_u16vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u16vec3(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u16vec3(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u16vec3(v4))) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tglm::u16vec4 v1(0);\n\t\tglm::lowp_u16vec4 v2(v1);\n\t\tglm::mediump_u16vec4 v3(v1);\n\t\tglm::highp_u16vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u16vec4(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u16vec4(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u16vec4(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::u32vec2 v1(0);\n\t\tglm::lowp_u32vec2 v2(v1);\n\t\tglm::mediump_u32vec2 v3(v1);\n\t\tglm::highp_u32vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u32vec2(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u32vec2(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u32vec2(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::u32vec3 v1(0);\n\t\tglm::lowp_u32vec3 v2(v1);\n\t\tglm::mediump_u32vec3 v3(v1);\n\t\tglm::highp_u32vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u32vec3(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u32vec3(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u32vec3(v4))) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tglm::u32vec4 v1(0);\n\t\tglm::lowp_u32vec4 v2(v1);\n\t\tglm::mediump_u32vec4 v3(v1);\n\t\tglm::highp_u32vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u32vec4(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u32vec4(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u32vec4(v4))) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tglm::u64vec2 v1(0);\n\t\tglm::lowp_u64vec2 v2(v1);\n\t\tglm::mediump_u64vec2 v3(v1);\n\t\tglm::highp_u64vec2 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u64vec2(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u64vec2(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u64vec2(v4))) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::u64vec3 v1(0);\n\t\tglm::lowp_u64vec3 v2(v1);\n\t\tglm::mediump_u64vec3 v3(v1);\n\t\tglm::highp_u64vec3 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u64vec3(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u64vec3(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u64vec3(v4))) ? 0 : 1;\n\t}\n\t\n\t{\n\t\tglm::u64vec4 v1(0);\n\t\tglm::lowp_u64vec4 v2(v1);\n\t\tglm::mediump_u64vec4 v3(v1);\n\t\tglm::highp_u64vec4 v4(v1);\n\n\t\tError += glm::all(glm::equal(v1, glm::u64vec4(v2))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u64vec4(v3))) ? 0 : 1;\n\t\tError += glm::all(glm::equal(v1, glm::u64vec4(v4))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nstatic int test_fmat_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::mat2) != 16;\n\tError += sizeof(glm::mat3) != 36;\n\tError += sizeof(glm::mat4) != 64;\n\tError += sizeof(glm::mat2x2) != 16;\n\tError += sizeof(glm::mat2x3) != 24;\n\tError += sizeof(glm::mat2x4) != 32;\n\tError += sizeof(glm::mat3x2) != 24;\n\tError += sizeof(glm::mat3x3) != 36;\n\tError += sizeof(glm::mat3x4) != 48;\n\tError += sizeof(glm::mat4x2) != 32;\n\tError += sizeof(glm::mat4x3) != 48;\n\tError += sizeof(glm::mat4x4) != 64;\n\n\tError += sizeof(glm::fmat2) != 16;\n\tError += sizeof(glm::fmat3) != 36;\n\tError += sizeof(glm::fmat4) != 64;\n\tError += sizeof(glm::fmat2x2) != 16;\n\tError += sizeof(glm::fmat2x3) != 24;\n\tError += sizeof(glm::fmat2x4) != 32;\n\tError += sizeof(glm::fmat3x2) != 24;\n\tError += sizeof(glm::fmat3x3) != 36;\n\tError += sizeof(glm::fmat3x4) != 48;\n\tError += sizeof(glm::fmat4x2) != 32;\n\tError += sizeof(glm::fmat4x3) != 48;\n\tError += sizeof(glm::fmat4x4) != 64;\n\n\tError += sizeof(glm::f32mat2) != 16;\n\tError += sizeof(glm::f32mat3) != 36;\n\tError += sizeof(glm::f32mat4) != 64;\n\tError += sizeof(glm::f32mat2x2) != 16;\n\tError += sizeof(glm::f32mat2x3) != 24;\n\tError += sizeof(glm::f32mat2x4) != 32;\n\tError += sizeof(glm::f32mat3x2) != 24;\n\tError += sizeof(glm::f32mat3x3) != 36;\n\tError += sizeof(glm::f32mat3x4) != 48;\n\tError += sizeof(glm::f32mat4x2) != 32;\n\tError += sizeof(glm::f32mat4x3) != 48;\n\tError += sizeof(glm::f32mat4x4) != 64;\n\n\n\tError += sizeof(glm::lowp_mat2) != 16;\n\tError += sizeof(glm::lowp_mat3) != 36;\n\tError += sizeof(glm::lowp_mat4) != 64;\n\tError += sizeof(glm::lowp_mat2x2) != 16;\n\tError += sizeof(glm::lowp_mat2x3) != 24;\n\tError += sizeof(glm::lowp_mat2x4) != 32;\n\tError += sizeof(glm::lowp_mat3x2) != 24;\n\tError += sizeof(glm::lowp_mat3x3) != 36;\n\tError += sizeof(glm::lowp_mat3x4) != 48;\n\tError += sizeof(glm::lowp_mat4x2) != 32;\n\tError += sizeof(glm::lowp_mat4x3) != 48;\n\tError += sizeof(glm::lowp_mat4x4) != 64;\n\n\tError += sizeof(glm::lowp_fmat2) != 16;\n\tError += sizeof(glm::lowp_fmat3) != 36;\n\tError += sizeof(glm::lowp_fmat4) != 64;\n\tError += sizeof(glm::lowp_fmat2x2) != 16;\n\tError += sizeof(glm::lowp_fmat2x3) != 24;\n\tError += sizeof(glm::lowp_fmat2x4) != 32;\n\tError += sizeof(glm::lowp_fmat3x2) != 24;\n\tError += sizeof(glm::lowp_fmat3x3) != 36;\n\tError += sizeof(glm::lowp_fmat3x4) != 48;\n\tError += sizeof(glm::lowp_fmat4x2) != 32;\n\tError += sizeof(glm::lowp_fmat4x3) != 48;\n\tError += sizeof(glm::lowp_fmat4x4) != 64;\n\n\tError += sizeof(glm::lowp_f32mat2) != 16;\n\tError += sizeof(glm::lowp_f32mat3) != 36;\n\tError += sizeof(glm::lowp_f32mat4) != 64;\n\tError += sizeof(glm::lowp_f32mat2x2) != 16;\n\tError += sizeof(glm::lowp_f32mat2x3) != 24;\n\tError += sizeof(glm::lowp_f32mat2x4) != 32;\n\tError += sizeof(glm::lowp_f32mat3x2) != 24;\n\tError += sizeof(glm::lowp_f32mat3x3) != 36;\n\tError += sizeof(glm::lowp_f32mat3x4) != 48;\n\tError += sizeof(glm::lowp_f32mat4x2) != 32;\n\tError += sizeof(glm::lowp_f32mat4x3) != 48;\n\tError += sizeof(glm::lowp_f32mat4x4) != 64;\n\n\tError += sizeof(glm::mediump_mat2) != 16;\n\tError += sizeof(glm::mediump_mat3) != 36;\n\tError += sizeof(glm::mediump_mat4) != 64;\n\tError += sizeof(glm::mediump_mat2x2) != 16;\n\tError += sizeof(glm::mediump_mat2x3) != 24;\n\tError += sizeof(glm::mediump_mat2x4) != 32;\n\tError += sizeof(glm::mediump_mat3x2) != 24;\n\tError += sizeof(glm::mediump_mat3x3) != 36;\n\tError += sizeof(glm::mediump_mat3x4) != 48;\n\tError += sizeof(glm::mediump_mat4x2) != 32;\n\tError += sizeof(glm::mediump_mat4x3) != 48;\n\tError += sizeof(glm::mediump_mat4x4) != 64;\n\n\tError += sizeof(glm::mediump_fmat2) != 16;\n\tError += sizeof(glm::mediump_fmat3) != 36;\n\tError += sizeof(glm::mediump_fmat4) != 64;\n\tError += sizeof(glm::mediump_fmat2x2) != 16;\n\tError += sizeof(glm::mediump_fmat2x3) != 24;\n\tError += sizeof(glm::mediump_fmat2x4) != 32;\n\tError += sizeof(glm::mediump_fmat3x2) != 24;\n\tError += sizeof(glm::mediump_fmat3x3) != 36;\n\tError += sizeof(glm::mediump_fmat3x4) != 48;\n\tError += sizeof(glm::mediump_fmat4x2) != 32;\n\tError += sizeof(glm::mediump_fmat4x3) != 48;\n\tError += sizeof(glm::mediump_fmat4x4) != 64;\n\n\tError += sizeof(glm::mediump_f32mat2) != 16;\n\tError += sizeof(glm::mediump_f32mat3) != 36;\n\tError += sizeof(glm::mediump_f32mat4) != 64;\n\tError += sizeof(glm::mediump_f32mat2x2) != 16;\n\tError += sizeof(glm::mediump_f32mat2x3) != 24;\n\tError += sizeof(glm::mediump_f32mat2x4) != 32;\n\tError += sizeof(glm::mediump_f32mat3x2) != 24;\n\tError += sizeof(glm::mediump_f32mat3x3) != 36;\n\tError += sizeof(glm::mediump_f32mat3x4) != 48;\n\tError += sizeof(glm::mediump_f32mat4x2) != 32;\n\tError += sizeof(glm::mediump_f32mat4x3) != 48;\n\tError += sizeof(glm::mediump_f32mat4x4) != 64;\n\n\tError += sizeof(glm::highp_mat2) != 16;\n\tError += sizeof(glm::highp_mat3) != 36;\n\tError += sizeof(glm::highp_mat4) != 64;\n\tError += sizeof(glm::highp_mat2x2) != 16;\n\tError += sizeof(glm::highp_mat2x3) != 24;\n\tError += sizeof(glm::highp_mat2x4) != 32;\n\tError += sizeof(glm::highp_mat3x2) != 24;\n\tError += sizeof(glm::highp_mat3x3) != 36;\n\tError += sizeof(glm::highp_mat3x4) != 48;\n\tError += sizeof(glm::highp_mat4x2) != 32;\n\tError += sizeof(glm::highp_mat4x3) != 48;\n\tError += sizeof(glm::highp_mat4x4) != 64;\n\n\tError += sizeof(glm::highp_fmat2) != 16;\n\tError += sizeof(glm::highp_fmat3) != 36;\n\tError += sizeof(glm::highp_fmat4) != 64;\n\tError += sizeof(glm::highp_fmat2x2) != 16;\n\tError += sizeof(glm::highp_fmat2x3) != 24;\n\tError += sizeof(glm::highp_fmat2x4) != 32;\n\tError += sizeof(glm::highp_fmat3x2) != 24;\n\tError += sizeof(glm::highp_fmat3x3) != 36;\n\tError += sizeof(glm::highp_fmat3x4) != 48;\n\tError += sizeof(glm::highp_fmat4x2) != 32;\n\tError += sizeof(glm::highp_fmat4x3) != 48;\n\tError += sizeof(glm::highp_fmat4x4) != 64;\n\n\tError += sizeof(glm::highp_f32mat2) != 16;\n\tError += sizeof(glm::highp_f32mat3) != 36;\n\tError += sizeof(glm::highp_f32mat4) != 64;\n\tError += sizeof(glm::highp_f32mat2x2) != 16;\n\tError += sizeof(glm::highp_f32mat2x3) != 24;\n\tError += sizeof(glm::highp_f32mat2x4) != 32;\n\tError += sizeof(glm::highp_f32mat3x2) != 24;\n\tError += sizeof(glm::highp_f32mat3x3) != 36;\n\tError += sizeof(glm::highp_f32mat3x4) != 48;\n\tError += sizeof(glm::highp_f32mat4x2) != 32;\n\tError += sizeof(glm::highp_f32mat4x3) != 48;\n\tError += sizeof(glm::highp_f32mat4x4) != 64;\n\n\treturn Error;\n}\n\nstatic int test_dmat_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::f64mat2) != 32;\n\tError += sizeof(glm::f64mat3) != 72;\n\tError += sizeof(glm::f64mat4) != 128;\n\tError += sizeof(glm::f64mat2x2) != 32;\n\tError += sizeof(glm::f64mat2x3) != 48;\n\tError += sizeof(glm::f64mat2x4) != 64;\n\tError += sizeof(glm::f64mat3x2) != 48;\n\tError += sizeof(glm::f64mat3x3) != 72;\n\tError += sizeof(glm::f64mat3x4) != 96;\n\tError += sizeof(glm::f64mat4x2) != 64;\n\tError += sizeof(glm::f64mat4x3) != 96;\n\tError += sizeof(glm::f64mat4x4) != 128;\n\n\tError += sizeof(glm::lowp_f64mat2) != 32;\n\tError += sizeof(glm::lowp_f64mat3) != 72;\n\tError += sizeof(glm::lowp_f64mat4) != 128;\n\tError += sizeof(glm::lowp_f64mat2x2) != 32;\n\tError += sizeof(glm::lowp_f64mat2x3) != 48;\n\tError += sizeof(glm::lowp_f64mat2x4) != 64;\n\tError += sizeof(glm::lowp_f64mat3x2) != 48;\n\tError += sizeof(glm::lowp_f64mat3x3) != 72;\n\tError += sizeof(glm::lowp_f64mat3x4) != 96;\n\tError += sizeof(glm::lowp_f64mat4x2) != 64;\n\tError += sizeof(glm::lowp_f64mat4x3) != 96;\n\tError += sizeof(glm::lowp_f64mat4x4) != 128;\n\n\tError += sizeof(glm::mediump_f64mat2) != 32;\n\tError += sizeof(glm::mediump_f64mat3) != 72;\n\tError += sizeof(glm::mediump_f64mat4) != 128;\n\tError += sizeof(glm::mediump_f64mat2x2) != 32;\n\tError += sizeof(glm::mediump_f64mat2x3) != 48;\n\tError += sizeof(glm::mediump_f64mat2x4) != 64;\n\tError += sizeof(glm::mediump_f64mat3x2) != 48;\n\tError += sizeof(glm::mediump_f64mat3x3) != 72;\n\tError += sizeof(glm::mediump_f64mat3x4) != 96;\n\tError += sizeof(glm::mediump_f64mat4x2) != 64;\n\tError += sizeof(glm::mediump_f64mat4x3) != 96;\n\tError += sizeof(glm::mediump_f64mat4x4) != 128;\n\n\tError += sizeof(glm::highp_f64mat2) != 32;\n\tError += sizeof(glm::highp_f64mat3) != 72;\n\tError += sizeof(glm::highp_f64mat4) != 128;\n\tError += sizeof(glm::highp_f64mat2x2) != 32;\n\tError += sizeof(glm::highp_f64mat2x3) != 48;\n\tError += sizeof(glm::highp_f64mat2x4) != 64;\n\tError += sizeof(glm::highp_f64mat3x2) != 48;\n\tError += sizeof(glm::highp_f64mat3x3) != 72;\n\tError += sizeof(glm::highp_f64mat3x4) != 96;\n\tError += sizeof(glm::highp_f64mat4x2) != 64;\n\tError += sizeof(glm::highp_f64mat4x3) != 96;\n\tError += sizeof(glm::highp_f64mat4x4) != 128;\n\n\treturn Error;\n}\n\nstatic int test_quat_size()\n{\n\tint Error = 0;\n\n\tError += sizeof(glm::f32quat) != 16;\n\tError += sizeof(glm::f64quat) != 32;\n\n\tError += sizeof(glm::lowp_f32quat) != 16;\n\tError += sizeof(glm::lowp_f64quat) != 32;\n\n\tError += sizeof(glm::mediump_f32quat) != 16;\n\tError += sizeof(glm::mediump_f64quat) != 32;\n\n\tError += sizeof(glm::highp_f32quat) != 16;\n\tError += sizeof(glm::highp_f64quat) != 32;\n\n\treturn Error;\n}\n\nstatic int test_quat_precision()\n{\n\tint Error = 0;\n\t\n\t{\n\t\tglm::f32quat q1(0.f, glm::vec3(0.f, 0.f, 1.f));\n\t\tglm::lowp_f32quat qA(q1);\n\t\tglm::mediump_f32quat qB(q1);\n\t\tglm::highp_f32quat qC(q1);\n\t\tglm::f32quat q2(qA);\n\t\tglm::f32quat q3(qB);\n\t\tglm::f32quat q4(qC);\n\t\t\n\t\tError += glm::all(glm::equal(q1, q2, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(q1, q3, glm::epsilon<float>())) ? 0 : 1;\n\t\tError += glm::all(glm::equal(q1, q4, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nstatic int test_fvec_conversion()\n{\n\tint Error(0);\n\n\t{\n\t\tglm::highp_vec4 a = glm::vec4(1, 2, 3, 4);\n\t\tglm::mediump_vec4 b = glm::vec4(1, 2, 3, 4);\n\t\tglm::lowp_vec4 c = b;\n\t\tglm::mediump_vec4 d = c;\n\t\tglm::lowp_ivec4 e = glm::ivec4(d);\n\t\tglm::lowp_ivec3 f = glm::ivec3(e);\n\n\t\tError += glm::all(glm::equal(b, d, glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\n#if GLM_HAS_OPENMP\nstatic int test_openmp()\n{\n\tstd::vector<glm::u8vec3> VectorA(1000);\n\tstd::vector<glm::u8vec3> VectorB(1000);\n\tstd::vector<glm::u8vec3> VectorC(1000);\n\n\tfor (std::size_t i = 0; i < VectorA.size(); ++i)\n\t{\n\t\tVectorA[i] = glm::u8vec3(1, 1, 1);\n\t\tVectorB[i] = glm::u8vec3(1, 1, 1);\n\t}\n\n\t#pragma omp parallel for default(none) shared(VectorA, VectorB, VectorC)\n\tfor (int i = 0; i < static_cast<int>(VectorC.size()); ++i)\n\t{\n\t\tVectorC[i] = VectorA[i] + VectorB[i];\n\t}\n\n\treturn 0;\n}\n#endif//GLM_HAS_OPENMP\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_scalar_size();\n\tError += test_fvec_size();\n\n\tError += test_fvec_precision();\n\tError += test_fvec_conversion();\n\n\tError += test_dvec_precision();\n\n\tError += test_uvec_size();\n\tError += test_uvec_precision();\n\tError += test_ivec_size();\n\tError += test_ivec_precision();\n\n\tError += test_fmat_size();\n\tError += test_dmat_size();\n\tError += test_quat_size();\n\tError += test_quat_precision();\n\n#\tif GLM_HAS_OPENMP\n\t\tError += test_openmp();\n#\tendif//\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_type_ptr.cpp",
    "content": "#include <glm/gtc/type_ptr.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/vector_relational.hpp>\n\nint test_value_ptr_vec()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::vec2 v(1.0);\n\t\tfloat * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::vec3 v(1.0);\n\t\tfloat * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::vec4 v(1.0);\n\t\tfloat * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::dvec2 v(1.0);\n\t\tdouble * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::dvec3 v(1.0);\n\t\tdouble * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::dvec4 v(1.0);\n\t\tdouble * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_value_ptr_vec_const()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::vec2 const v(1.0);\n\t\tfloat const * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::vec3 const v(1.0);\n\t\tfloat const * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::vec4 const v(1.0);\n\t\tfloat const * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::dvec2 const v(1.0);\n\t\tdouble const * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::dvec3 const v(1.0);\n\t\tdouble const * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::dvec4 const v(1.0);\n\t\tdouble const * p = glm::value_ptr(v);\n\t\tError += p == &v[0] ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_value_ptr_mat()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::mat2x2 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat2x3 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat2x4 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat3x2 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat3x3 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat3x4 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat4x2 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat4x3 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat4x4 m(1.0);\n\t\tfloat * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_value_ptr_mat_const()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::mat2x2 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat2x3 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat2x4 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat3x2 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat3x3 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat3x4 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat4x2 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat4x3 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\t{\n\t\tglm::mat4x4 const m(1.0);\n\t\tfloat const * p = glm::value_ptr(m);\n\t\tError += p == &m[0][0] ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_make_pointer_mat()\n{\n\tint Error = 0;\n\n\tfloat ArrayA[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};\n\tdouble ArrayB[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};\n\n\tglm::mat2x2 Mat2x2A = glm::make_mat2x2(ArrayA);\n\tglm::mat2x3 Mat2x3A = glm::make_mat2x3(ArrayA);\n\tglm::mat2x4 Mat2x4A = glm::make_mat2x4(ArrayA);\n\tglm::mat3x2 Mat3x2A = glm::make_mat3x2(ArrayA);\n\tglm::mat3x3 Mat3x3A = glm::make_mat3x3(ArrayA);\n\tglm::mat3x4 Mat3x4A = glm::make_mat3x4(ArrayA);\n\tglm::mat4x2 Mat4x2A = glm::make_mat4x2(ArrayA);\n\tglm::mat4x3 Mat4x3A = glm::make_mat4x3(ArrayA);\n\tglm::mat4x4 Mat4x4A = glm::make_mat4x4(ArrayA);\n\n\tglm::dmat2x2 Mat2x2B = glm::make_mat2x2(ArrayB);\n\tglm::dmat2x3 Mat2x3B = glm::make_mat2x3(ArrayB);\n\tglm::dmat2x4 Mat2x4B = glm::make_mat2x4(ArrayB);\n\tglm::dmat3x2 Mat3x2B = glm::make_mat3x2(ArrayB);\n\tglm::dmat3x3 Mat3x3B = glm::make_mat3x3(ArrayB);\n\tglm::dmat3x4 Mat3x4B = glm::make_mat3x4(ArrayB);\n\tglm::dmat4x2 Mat4x2B = glm::make_mat4x2(ArrayB);\n\tglm::dmat4x3 Mat4x3B = glm::make_mat4x3(ArrayB);\n\tglm::dmat4x4 Mat4x4B = glm::make_mat4x4(ArrayB);\n\n\treturn Error;\n}\n\nint test_make_pointer_vec()\n{\n\tint Error = 0;\n\n\tfloat ArrayA[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};\n\tint ArrayB[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};\n\tbool ArrayC[] = {true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false};\n\n\tglm::vec2 Vec2A = glm::make_vec2(ArrayA);\n\tglm::vec3 Vec3A = glm::make_vec3(ArrayA);\n\tglm::vec4 Vec4A = glm::make_vec4(ArrayA);\n\n\tglm::ivec2 Vec2B = glm::make_vec2(ArrayB);\n\tglm::ivec3 Vec3B = glm::make_vec3(ArrayB);\n\tglm::ivec4 Vec4B = glm::make_vec4(ArrayB);\n\n\tglm::bvec2 Vec2C = glm::make_vec2(ArrayC);\n\tglm::bvec3 Vec3C = glm::make_vec3(ArrayC);\n\tglm::bvec4 Vec4C = glm::make_vec4(ArrayC);\n\n\treturn Error;\n}\n\nint test_make_vec1()\n{\n\tint Error = 0;\n\n\tglm::ivec1 const v1 = glm::make_vec1(glm::ivec1(2));\n\tError += v1 == glm::ivec1(2) ? 0 : 1;\n\n\tglm::ivec1 const v2 = glm::make_vec1(glm::ivec2(2));\n\tError += v2 == glm::ivec1(2) ? 0 : 1;\n\n\tglm::ivec1 const v3 = glm::make_vec1(glm::ivec3(2));\n\tError += v3 == glm::ivec1(2) ? 0 : 1;\n\n\tglm::ivec1 const v4 = glm::make_vec1(glm::ivec4(2));\n\tError += v3 == glm::ivec1(2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_make_vec2()\n{\n\tint Error = 0;\n\n\tglm::ivec2 const v1 = glm::make_vec2(glm::ivec1(2));\n\tError += v1 == glm::ivec2(2, 0) ? 0 : 1;\n\n\tglm::ivec2 const v2 = glm::make_vec2(glm::ivec2(2));\n\tError += v2 == glm::ivec2(2, 2) ? 0 : 1;\n\n\tglm::ivec2 const v3 = glm::make_vec2(glm::ivec3(2));\n\tError += v3 == glm::ivec2(2, 2) ? 0 : 1;\n\n\tglm::ivec2 const v4 = glm::make_vec2(glm::ivec4(2));\n\tError += v3 == glm::ivec2(2, 2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_make_vec3()\n{\n\tint Error = 0;\n\n\tglm::ivec3 const v1 = glm::make_vec3(glm::ivec1(2));\n\tError += v1 == glm::ivec3(2, 0, 0) ? 0 : 1;\n\n\tglm::ivec3 const v2 = glm::make_vec3(glm::ivec2(2));\n\tError += v2 == glm::ivec3(2, 2, 0) ? 0 : 1;\n\n\tglm::ivec3 const v3 = glm::make_vec3(glm::ivec3(2));\n\tError += v3 == glm::ivec3(2, 2, 2) ? 0 : 1;\n\n\tglm::ivec3 const v4 = glm::make_vec3(glm::ivec4(2));\n\tError += v3 == glm::ivec3(2, 2, 2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_make_vec4()\n{\n\tint Error = 0;\n\n\tglm::ivec4 const v1 = glm::make_vec4(glm::ivec1(2));\n\tError += v1 == glm::ivec4(2, 0, 0, 1) ? 0 : 1;\n\n\tglm::ivec4 const v2 = glm::make_vec4(glm::ivec2(2));\n\tError += v2 == glm::ivec4(2, 2, 0, 1) ? 0 : 1;\n\n\tglm::ivec4 const v3 = glm::make_vec4(glm::ivec3(2));\n\tError += v3 == glm::ivec4(2, 2, 2, 1) ? 0 : 1;\n\n\tglm::ivec4 const v4 = glm::make_vec4(glm::ivec4(2));\n\tError += v4 == glm::ivec4(2, 2, 2, 2) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_make_vec1();\n\tError += test_make_vec2();\n\tError += test_make_vec3();\n\tError += test_make_vec4();\n\tError += test_make_pointer_vec();\n\tError += test_make_pointer_mat();\n\tError += test_value_ptr_vec();\n\tError += test_value_ptr_vec_const();\n\tError += test_value_ptr_mat();\n\tError += test_value_ptr_mat_const();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_ulp.cpp",
    "content": "#include <glm/gtc/ulp.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <limits>\n\nint test_ulp_float_dist()\n{\n\tint Error = 0;\n\n\tfloat A = 1.0f;\n\n\tfloat B = glm::next_float(A);\n\tError += glm::notEqual(A, B, 0) ? 0 : 1;\n\tfloat C = glm::prev_float(B);\n\tError += glm::equal(A, C, 0) ? 0 : 1;\n\n\tint D = glm::float_distance(A, B);\n\tError += D == 1 ? 0 : 1;\n\tint E = glm::float_distance(A, C);\n\tError += E == 0 ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_ulp_float_step()\n{\n\tint Error = 0;\n\n\tfloat A = 1.0f;\n\n\tfor(int i = 10; i < 1000; i *= 10)\n\t{\n\t\tfloat B = glm::next_float(A, i);\n\t\tError += glm::notEqual(A, B, 0) ? 0 : 1;\n\t\tfloat C = glm::prev_float(B, i);\n\t\tError += glm::equal(A, C, 0) ? 0 : 1;\n\n\t\tint D = glm::float_distance(A, B);\n\t\tError += D == i ? 0 : 1;\n\t\tint E = glm::float_distance(A, C);\n\t\tError += E == 0 ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_ulp_double_dist()\n{\n\tint Error = 0;\n\n\tdouble A = 1.0;\n\n\tdouble B = glm::next_float(A);\n\tError += glm::notEqual(A, B, 0) ? 0 : 1;\n\tdouble C = glm::prev_float(B);\n\tError += glm::equal(A, C, 0) ? 0 : 1;\n\n\tglm::int64 const D = glm::float_distance(A, B);\n\tError += D == 1 ? 0 : 1;\n\tglm::int64 const E = glm::float_distance(A, C);\n\tError += E == 0 ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_ulp_double_step()\n{\n\tint Error = 0;\n\n\tdouble A = 1.0;\n\n\tfor(int i = 10; i < 1000; i *= 10)\n\t{\n\t\tdouble B = glm::next_float(A, i);\n\t\tError += glm::notEqual(A, B, 0) ? 0 : 1;\n\t\tdouble C = glm::prev_float(B, i);\n\t\tError += glm::equal(A, C, 0) ? 0 : 1;\n\n\t\tglm::int64 const D = glm::float_distance(A, B);\n\t\tError += D == i ? 0 : 1;\n\t\tglm::int64 const E = glm::float_distance(A, C);\n\t\tError += E == 0 ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_ulp_float_dist();\n\tError += test_ulp_float_step();\n\tError += test_ulp_double_dist();\n\tError += test_ulp_double_step();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtc/gtc_user_defined_types.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////////////////////////\n// OpenGL Mathematics Copyright (c) 2005 - 2014 G-Truc Creation (www.g-truc.net)\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Created : 2010-09-16\n// Updated : 2011-05-27\n// Licence : This source is under MIT licence\n// File    : test/gtc/type_ptr.cpp\n///////////////////////////////////////////////////////////////////////////////////////////////////\n\n#define GLM_FORCE_RADIANS\n#include <glm/gtc/user_defined_type.hpp>\n\nint test_make_pointer_vec()\n{\n\tint Error = 0;\n\n\tglm::func();\n\t//func();\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_make_pointer_vec();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/CMakeLists.txt",
    "content": "glmCreateTestGTC(gtx)\nglmCreateTestGTC(gtx_associated_min_max)\nglmCreateTestGTC(gtx_closest_point)\nglmCreateTestGTC(gtx_color_encoding)\nglmCreateTestGTC(gtx_color_space_YCoCg)\nglmCreateTestGTC(gtx_color_space)\nglmCreateTestGTC(gtx_common)\nglmCreateTestGTC(gtx_compatibility)\nglmCreateTestGTC(gtx_component_wise)\nglmCreateTestGTC(gtx_easing)\nglmCreateTestGTC(gtx_euler_angle)\nglmCreateTestGTC(gtx_extend)\nglmCreateTestGTC(gtx_extended_min_max)\nglmCreateTestGTC(gtx_exterior_product)\nglmCreateTestGTC(gtx_fast_exponential)\nglmCreateTestGTC(gtx_fast_square_root)\nglmCreateTestGTC(gtx_fast_trigonometry)\nglmCreateTestGTC(gtx_functions)\nglmCreateTestGTC(gtx_gradient_paint)\nglmCreateTestGTC(gtx_handed_coordinate_space)\nglmCreateTestGTC(gtx_hash)\nglmCreateTestGTC(gtx_integer)\nglmCreateTestGTC(gtx_intersect)\nglmCreateTestGTC(gtx_io)\nglmCreateTestGTC(gtx_load)\nglmCreateTestGTC(gtx_log_base)\nglmCreateTestGTC(gtx_matrix_cross_product)\nglmCreateTestGTC(gtx_matrix_decompose)\nglmCreateTestGTC(gtx_matrix_factorisation)\nglmCreateTestGTC(gtx_matrix_interpolation)\nglmCreateTestGTC(gtx_matrix_major_storage)\nglmCreateTestGTC(gtx_matrix_operation)\nglmCreateTestGTC(gtx_matrix_query)\nglmCreateTestGTC(gtx_matrix_transform_2d)\nglmCreateTestGTC(gtx_norm)\nglmCreateTestGTC(gtx_normal)\nglmCreateTestGTC(gtx_normalize_dot)\nglmCreateTestGTC(gtx_number_precision)\nglmCreateTestGTC(gtx_orthonormalize)\nglmCreateTestGTC(gtx_optimum_pow)\nglmCreateTestGTC(gtx_pca)\nglmCreateTestGTC(gtx_perpendicular)\nglmCreateTestGTC(gtx_polar_coordinates)\nglmCreateTestGTC(gtx_projection)\nglmCreateTestGTC(gtx_quaternion)\nglmCreateTestGTC(gtx_dual_quaternion)\nglmCreateTestGTC(gtx_range)\nglmCreateTestGTC(gtx_rotate_normalized_axis)\nglmCreateTestGTC(gtx_rotate_vector)\nglmCreateTestGTC(gtx_scalar_multiplication)\nglmCreateTestGTC(gtx_scalar_relational)\nglmCreateTestGTC(gtx_spline)\nglmCreateTestGTC(gtx_string_cast)\nglmCreateTestGTC(gtx_texture)\nglmCreateTestGTC(gtx_type_aligned)\nglmCreateTestGTC(gtx_type_trait)\nglmCreateTestGTC(gtx_vec_swizzle)\nglmCreateTestGTC(gtx_vector_angle)\nglmCreateTestGTC(gtx_vector_query)\nglmCreateTestGTC(gtx_wrap)\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx.cpp",
    "content": "#include <glm/ext.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_associated_min_max.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtx/associated_min_max.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_closest_point.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/closest_point.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_color_encoding.cpp",
    "content": "#include <glm/gtx/color_encoding.hpp>\n#include <glm/gtc/color_space.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/constants.hpp>\n\nnamespace srgb\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tglm::vec3 const ColorSourceRGB(1.0, 0.5, 0.0);\n/*\n\t\t{\n\t\t\tglm::vec3 const ColorSRGB = glm::convertLinearSRGBToD65XYZ(ColorSourceRGB);\n\t\t\tglm::vec3 const ColorRGB = glm::convertD65XYZToLinearSRGB(ColorSRGB);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceRGB, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n*/\n\t\t{\n\t\t\tglm::vec3 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGB, 2.8f);\n\t\t\tglm::vec3 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB, 2.8f);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceRGB, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\tglm::vec4 const ColorSourceRGBA(1.0, 0.5, 0.0, 1.0);\n\n\t\t{\n\t\t\tglm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGBA);\n\t\t\tglm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceRGBA, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 const ColorSRGB = glm::convertLinearToSRGB(ColorSourceRGBA, 2.8f);\n\t\t\tglm::vec4 const ColorRGB = glm::convertSRGBToLinear(ColorSRGB, 2.8f);\n\t\t\tError += glm::all(glm::epsilonEqual(ColorSourceRGBA, ColorRGB, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace srgb\n\nint main()\n{\n\tint Error(0);\n\n\tError += srgb::test();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_color_space.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/color_space.hpp>\n\nint test_saturation()\n{\n\tint Error(0);\n\t\n\tglm::vec4 Color = glm::saturation(1.0f, glm::vec4(1.0, 0.5, 0.0, 1.0));\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error(0);\n\n\tError += test_saturation();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_color_space_YCoCg.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/color_space_YCoCg.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_common.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/common.hpp>\n#include <glm/gtc/integer.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/vector_relational.hpp>\n#include <glm/common.hpp>\n\nnamespace fmod_\n{\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER genType modTrunc(genType a, genType b)\n\t{\n\t\treturn a - b * glm::trunc(a / b);\n\t}\n\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\t{\n\t\t\tfloat A0(3.0);\n\t\t\tfloat B0(2.0f);\n\t\t\tfloat C0 = glm::fmod(A0, B0);\n\n\t\t\tError += glm::abs(C0 - 1.0f) < 0.00001f ? 0 : 1;\n\n\t\t\tglm::vec4 A1(3.0);\n\t\t\tfloat B1(2.0f);\n\t\t\tglm::vec4 C1 = glm::fmod(A1, B1);\n\n\t\t\tError += glm::all(glm::epsilonEqual(C1, glm::vec4(1.0f), 0.00001f)) ? 0 : 1;\n\n\t\t\tglm::vec4 A2(3.0);\n\t\t\tglm::vec4 B2(2.0f);\n\t\t\tglm::vec4 C2 = glm::fmod(A2, B2);\n\n\t\t\tError += glm::all(glm::epsilonEqual(C2, glm::vec4(1.0f), 0.00001f)) ? 0 : 1;\n\n\t\t\tglm::ivec4 A3(3);\n\t\t\tint B3(2);\n\t\t\tglm::ivec4 C3 = glm::fmod(A3, B3);\n\n\t\t\tError += glm::all(glm::equal(C3, glm::ivec4(1))) ? 0 : 1;\n\n\t\t\tglm::ivec4 A4(3);\n\t\t\tglm::ivec4 B4(2);\n\t\t\tglm::ivec4 C4 = glm::fmod(A4, B4);\n\n\t\t\tError += glm::all(glm::equal(C4, glm::ivec4(1))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tfloat A0(22.0);\n\t\t\tfloat B0(-10.0f);\n\t\t\tfloat C0 = glm::fmod(A0, B0);\n\n\t\t\tError += glm::abs(C0 - 2.0f) < 0.00001f ? 0 : 1;\n\n\t\t\tglm::vec4 A1(22.0);\n\t\t\tfloat B1(-10.0f);\n\t\t\tglm::vec4 C1 = glm::fmod(A1, B1);\n\n\t\t\tError += glm::all(glm::epsilonEqual(C1, glm::vec4(2.0f), 0.00001f)) ? 0 : 1;\n\n\t\t\tglm::vec4 A2(22.0);\n\t\t\tglm::vec4 B2(-10.0f);\n\t\t\tglm::vec4 C2 = glm::fmod(A2, B2);\n\n\t\t\tError += glm::all(glm::epsilonEqual(C2, glm::vec4(2.0f), 0.00001f)) ? 0 : 1;\n\n\t\t\tglm::ivec4 A3(22);\n\t\t\tint B3(-10);\n\t\t\tglm::ivec4 C3 = glm::fmod(A3, B3);\n\n\t\t\tError += glm::all(glm::equal(C3, glm::ivec4(2))) ? 0 : 1;\n\n\t\t\tglm::ivec4 A4(22);\n\t\t\tglm::ivec4 B4(-10);\n\t\t\tglm::ivec4 C4 = glm::fmod(A4, B4);\n\n\t\t\tError += glm::all(glm::equal(C4, glm::ivec4(2))) ? 0 : 1;\n\t\t}\n\n\t\t// http://stackoverflow.com/questions/7610631/glsl-mod-vs-hlsl-fmod\n\t\t{\n\t\t\tfor (float y = -10.0f; y < 10.0f; y += 0.1f)\n\t\t\tfor (float x = -10.0f; x < 10.0f; x += 0.1f)\n\t\t\t{\n\t\t\t\tfloat const A(std::fmod(x, y));\n\t\t\t\t//float const B(std::remainder(x, y));\n\t\t\t\tfloat const C(glm::fmod(x, y));\n\t\t\t\tfloat const D(modTrunc(x, y));\n\n\t\t\t\t//Error += glm::epsilonEqual(A, B, 0.0001f) ? 0 : 1;\n\t\t\t\t//assert(!Error);\n\t\t\t\tError += glm::epsilonEqual(A, C, 0.0001f) ? 0 : 1;\n\t\t\t\tassert(!Error);\n\t\t\t\tError += glm::epsilonEqual(A, D, 0.00001f) ? 0 : 1;\n\t\t\t\tassert(!Error);\n\t\t\t}\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace fmod_\n\nint test_isdenormal()\n{\n\tint Error = 0;\n\n\tbool A = glm::isdenormal(1.0f);\n\tError += !A ? 0 : 1;\n\n\tglm::bvec1 B = glm::isdenormal(glm::vec1(1.0f));\n\tError += !glm::any(B) ? 0 : 1;\n\n\tglm::bvec2 C = glm::isdenormal(glm::vec2(1.0f));\n\tError += !glm::any(C) ? 0 : 1;\n\n\tglm::bvec3 D = glm::isdenormal(glm::vec3(1.0f));\n\tError += !glm::any(D) ? 0 : 1;\n\n\tglm::bvec4 E = glm::isdenormal(glm::vec4(1.0f));\n\tError += !glm::any(E) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_openBounded()\n{\n\tint Error = 0;\n\n\tError += glm::all(glm::openBounded(glm::ivec2(2), glm::ivec2(1), glm::ivec2(3))) ? 0 : 1;\n\tError += !glm::all(glm::openBounded(glm::ivec2(1), glm::ivec2(1), glm::ivec2(3))) ? 0 : 1;\n\tError += !glm::all(glm::openBounded(glm::ivec2(3), glm::ivec2(1), glm::ivec2(3))) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_closeBounded()\n{\n\tint Error = 0;\n\n\tError += glm::all(glm::closeBounded(glm::ivec2(2), glm::ivec2(1), glm::ivec2(3))) ? 0 : 1;\n\tError += glm::all(glm::closeBounded(glm::ivec2(1), glm::ivec2(1), glm::ivec2(3))) ? 0 : 1;\n\tError += glm::all(glm::closeBounded(glm::ivec2(3), glm::ivec2(1), glm::ivec2(3))) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_isdenormal();\n\tError += ::fmod_::test();\n\tError += test_openBounded();\n\tError += test_closeBounded();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_compatibility.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/compatibility.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\tError += glm::isfinite(1.0f) ? 0 : 1;\n\tError += glm::isfinite(1.0) ? 0 : 1;\n\tError += glm::isfinite(-1.0f) ? 0 : 1;\n\tError += glm::isfinite(-1.0) ? 0 : 1;\n\n\tError += glm::all(glm::isfinite(glm::vec4(1.0f))) ? 0 : 1;\n\tError += glm::all(glm::isfinite(glm::dvec4(1.0))) ? 0 : 1;\n\tError += glm::all(glm::isfinite(glm::vec4(-1.0f))) ? 0 : 1;\n\tError += glm::all(glm::isfinite(glm::dvec4(-1.0))) ? 0 : 1;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_component_wise.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/component_wise.hpp>\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/constants.hpp>\n#include <limits>\n\nnamespace compNormalize\n{\n\tint run()\n\t{\n\t\tint Error(0);\n\n\t\t{\n\t\t\tglm::vec4 const A = glm::compNormalize<float>(glm::u8vec4(0, 127, 128, 255));\n\n\t\t\tError += glm::epsilonEqual(A.x, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tError += A.y < 0.5f ? 0 : 1;\n\t\t\tError += A.z > 0.5f ? 0 : 1;\n\t\t\tError += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 const A = glm::compNormalize<float>(glm::i8vec4(-128, -1, 0, 127));\n\n\t\t\tError += glm::epsilonEqual(A.x,-1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tError += A.y < 0.0f ? 0 : 1;\n\t\t\tError += A.z > 0.0f ? 0 : 1;\n\t\t\tError += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 const A = glm::compNormalize<float>(glm::u16vec4(\n\t\t\t\tstd::numeric_limits<glm::u16>::min(),\n\t\t\t\t(std::numeric_limits<glm::u16>::max() >> 1) + 0,\n\t\t\t\t(std::numeric_limits<glm::u16>::max() >> 1) + 1,\n\t\t\t\tstd::numeric_limits<glm::u16>::max()));\n\n\t\t\tError += glm::epsilonEqual(A.x, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tError += A.y < 0.5f ? 0 : 1;\n\t\t\tError += A.z > 0.5f ? 0 : 1;\n\t\t\tError += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 const A = glm::compNormalize<float>(glm::i16vec4(\n\t\t\t\tstd::numeric_limits<glm::i16>::min(),\n\t\t\t\tstatic_cast<glm::i16>(-1),\n\t\t\t\tstatic_cast<glm::i16>(0),\n\t\t\t\tstd::numeric_limits<glm::i16>::max()));\n\n\t\t\tError += glm::epsilonEqual(A.x,-1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t\tError += A.y < 0.0f ? 0 : 1;\n\t\t\tError += A.z > 0.0f ? 0 : 1;\n\t\t\tError += glm::epsilonEqual(A.w, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace compNormalize\n\nnamespace compScale\n{\n\tint run()\n\t{\n\t\tint Error(0);\n\n\t\t{\n\t\t\tglm::u8vec4 const A = glm::compScale<glm::u8>(glm::vec4(0.0f, 0.2f, 0.5f, 1.0f));\n\n\t\t\tError += A.x == std::numeric_limits<glm::u8>::min() ? 0 : 1;\n\t\t\tError += A.y < (std::numeric_limits<glm::u8>::max() >> 2) ? 0 : 1;\n\t\t\tError += A.z == 127 ? 0 : 1;\n\t\t\tError += A.w == 255 ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::i8vec4 const A = glm::compScale<glm::i8>(glm::vec4(0.0f,-1.0f, 0.5f, 1.0f));\n\n\t\t\tError += A.x == 0 ? 0 : 1;\n\t\t\tError += A.y == -128 ? 0 : 1;\n\t\t\tError += A.z == 63 ? 0 : 1;\n\t\t\tError += A.w == 127 ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::u16vec4 const A = glm::compScale<glm::u16>(glm::vec4(0.0f, 0.2f, 0.5f, 1.0f));\n\n\t\t\tError += A.x == std::numeric_limits<glm::u16>::min() ? 0 : 1;\n\t\t\tError += A.y < (std::numeric_limits<glm::u16>::max() >> 2) ? 0 : 1;\n\t\t\tError += A.z == 32767 ? 0 : 1;\n\t\t\tError += A.w == 65535 ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::i16vec4 const A = glm::compScale<glm::i16>(glm::vec4(0.0f,-1.0f, 0.5f, 1.0f));\n\n\t\t\tError += A.x == 0 ? 0 : 1;\n\t\t\tError += A.y == -32768 ? 0 : 1;\n\t\t\tError += A.z == 16383 ? 0 : 1;\n\t\t\tError += A.w == 32767 ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}// compScale\n\nint main()\n{\n\tint Error(0);\n\n\tError += compNormalize::run();\n\tError += compScale::run();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_dual_quaternion.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#define GLM_FORCE_CTOR_INIT\n#include <glm/gtx/dual_quaternion.hpp>\n#include <glm/gtc/matrix_transform.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtx/euler_angles.hpp>\n#include <glm/vector_relational.hpp>\n#if GLM_HAS_TRIVIAL_QUERIES\n#\tinclude <type_traits>\n#endif\n\nint myrand()\n{\n\tstatic int holdrand = 1;\n\treturn (((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);\n}\n\nfloat myfrand() // returns values from -1 to 1 inclusive\n{\n\treturn float(double(myrand()) / double( 0x7ffff )) * 2.0f - 1.0f;\n}\n\nint test_dquat_type()\n{\n\tglm::dvec3 vA;\n\tglm::dquat dqA, dqB;\n\tglm::ddualquat C(dqA, dqB);\n\tglm::ddualquat B(dqA);\n\tglm::ddualquat D(dqA, vA);\n\treturn 0;\n}\n\nint test_scalars()\n{\n\tfloat const Epsilon = 0.0001f;\n\n\tint Error(0);\n\n\tglm::quat src_q1 = glm::quat(1.0f,2.0f,3.0f,4.0f);\n\tglm::quat src_q2 = glm::quat(5.0f,6.0f,7.0f,8.0f);\n\tglm::dualquat src1(src_q1,src_q2);\n\n\t{\n\t\tglm::dualquat dst1 = src1 * 2.0f;\n\t\tglm::dualquat dst2 = 2.0f * src1;\n\t\tglm::dualquat dst3 = src1;\n\t\tdst3 *= 2.0f;\n\t\tglm::dualquat dstCmp(src_q1 * 2.0f,src_q2 * 2.0f);\n\t\tError += glm::all(glm::epsilonEqual(dst1.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst1.dual,dstCmp.dual, Epsilon)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(dst2.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst2.dual,dstCmp.dual, Epsilon)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(dst3.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst3.dual,dstCmp.dual, Epsilon)) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::dualquat dst1 = src1 / 2.0f;\n\t\tglm::dualquat dst2 = src1;\n\t\tdst2 /= 2.0f;\n\t\tglm::dualquat dstCmp(src_q1 / 2.0f,src_q2 / 2.0f);\n\t\tError += glm::all(glm::epsilonEqual(dst1.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst1.dual,dstCmp.dual, Epsilon)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(dst2.real,dstCmp.real, Epsilon)) && glm::all(glm::epsilonEqual(dst2.dual,dstCmp.dual, Epsilon)) ? 0 : 1;\n\t}\n\treturn Error;\n}\n\nint test_inverse() \n{\n\tint Error(0);\n\n\tfloat const Epsilon = 0.0001f;\n\n\tglm::dualquat dqid = glm::dual_quat_identity<float, glm::defaultp>();\n\tglm::mat4x4 mid(1.0f);\n\n\tfor (int j = 0; j < 100; ++j)\n\t{\n\t\tglm::mat4x4 rot = glm::yawPitchRoll(myfrand() * 360.0f, myfrand() * 360.0f, myfrand() * 360.0f);\n\t\tglm::vec3 vt = glm::vec3(myfrand() * 10.0f, myfrand() * 10.0f, myfrand() * 10.0f);\n\n\t\tglm::mat4x4 m = glm::translate(mid, vt) * rot;\n\n\t\tglm::quat qr = glm::quat_cast(m);\n\n\t\tglm::dualquat dq(qr);\n\n\t\tglm::dualquat invdq = glm::inverse(dq);\n\n\t\tglm::dualquat r1 = invdq * dq;\n\t\tglm::dualquat r2 = dq * invdq;\n\n\t\tError += glm::all(glm::epsilonEqual(r1.real, dqid.real, Epsilon)) && glm::all(glm::epsilonEqual(r1.dual, dqid.dual, Epsilon)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(r2.real, dqid.real, Epsilon)) && glm::all(glm::epsilonEqual(r2.dual, dqid.dual, Epsilon)) ? 0 : 1;\n\n\t\t// testing commutative property\n\t\tglm::dualquat r (   glm::quat( myfrand() * glm::pi<float>() * 2.0f, myfrand(), myfrand(), myfrand() ),\n\t\t\t\t\t\t\tglm::vec3(myfrand() * 10.0f, myfrand() * 10.0f, myfrand() * 10.0f) );\n\t\tglm::dualquat riq = (r * invdq) * dq;\n\t\tglm::dualquat rqi = (r * dq) * invdq;\n\n\t\tError += glm::all(glm::epsilonEqual(riq.real, rqi.real, Epsilon)) && glm::all(glm::epsilonEqual(riq.dual, rqi.dual, Epsilon)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_mul() \n{\n\tint Error(0);\n\n\tfloat const Epsilon = 0.0001f;\n\n\tglm::mat4x4 mid(1.0f);\n\n\tfor (int j = 0; j < 100; ++j)\n\t{\n\t\t// generate random rotations and translations and compare transformed by matrix and dualquats random points \n\t\tglm::vec3 vt1 = glm::vec3(myfrand() * 10.0f, myfrand() * 10.0f, myfrand() * 10.0f);\n\t\tglm::vec3 vt2 = glm::vec3(myfrand() * 10.0f, myfrand() * 10.0f, myfrand() * 10.0f);\n\n\t\tglm::mat4x4 rot1 = glm::yawPitchRoll(myfrand() * 360.0f, myfrand() * 360.0f, myfrand() * 360.0f);\n\t\tglm::mat4x4 rot2 = glm::yawPitchRoll(myfrand() * 360.0f, myfrand() * 360.0f, myfrand() * 360.0f);\n\t\tglm::mat4x4 m1 = glm::translate(mid, vt1) * rot1;\n\t\tglm::mat4x4 m2 = glm::translate(mid, vt2) * rot2;\n\t\tglm::mat4x4 m3 = m2 * m1;\n\t\tglm::mat4x4 m4 = m1 * m2;\n\n\t\tglm::quat qrot1 = glm::quat_cast(rot1);\n\t\tglm::quat qrot2 = glm::quat_cast(rot2);\n\n\t\tglm::dualquat dq1 = glm::dualquat(qrot1,vt1);\n\t\tglm::dualquat dq2 = glm::dualquat(qrot2,vt2);\n\t\tglm::dualquat dq3 = dq2 * dq1;\n\t\tglm::dualquat dq4 = dq1 * dq2;\n\n\t\tfor (int i = 0; i < 100; ++i)\n\t\t{\n\t\t\tglm::vec4 src_pt = glm::vec4(myfrand() * 4.0f, myfrand() * 5.0f, myfrand() * 3.0f,1.0f);\n\t\t\t// test both multiplication orders        \n\t\t\tglm::vec4 dst_pt_m3  = m3 * src_pt; \n\t\t\tglm::vec4 dst_pt_dq3 = dq3 * src_pt;\n\n\t\t\tglm::vec4 dst_pt_m3_i  = glm::inverse(m3) * src_pt;\n\t\t\tglm::vec4 dst_pt_dq3_i = src_pt * dq3;\n\n\t\t\tglm::vec4 dst_pt_m4  = m4 * src_pt;\n\t\t\tglm::vec4 dst_pt_dq4 = dq4 * src_pt;\n\n\t\t\tglm::vec4 dst_pt_m4_i  = glm::inverse(m4) * src_pt;\n\t\t\tglm::vec4 dst_pt_dq4_i = src_pt * dq4;\n\n\t\t\tError += glm::all(glm::epsilonEqual(dst_pt_m3, dst_pt_dq3, Epsilon)) ? 0 : 1;\n\t\t\tError += glm::all(glm::epsilonEqual(dst_pt_m4, dst_pt_dq4, Epsilon)) ? 0 : 1;\n\t\t\tError += glm::all(glm::epsilonEqual(dst_pt_m3_i, dst_pt_dq3_i, Epsilon)) ? 0 : 1;\n\t\t\tError += glm::all(glm::epsilonEqual(dst_pt_m4_i, dst_pt_dq4_i, Epsilon)) ? 0 : 1;\n\t\t}\n\t} \n\n\treturn Error;\n}\n\nint test_dual_quat_ctr()\n{\n\tint Error(0);\n\n#\tif GLM_HAS_TRIVIAL_QUERIES\n\t//\tError += std::is_trivially_default_constructible<glm::dualquat>::value ? 0 : 1;\n\t//\tError += std::is_trivially_default_constructible<glm::ddualquat>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::dualquat>::value ? 0 : 1;\n\t//\tError += std::is_trivially_copy_assignable<glm::ddualquat>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::dualquat>::value ? 0 : 1;\n\t\tError += std::is_trivially_copyable<glm::ddualquat>::value ? 0 : 1;\n\n\t\tError += std::is_copy_constructible<glm::dualquat>::value ? 0 : 1;\n\t\tError += std::is_copy_constructible<glm::ddualquat>::value ? 0 : 1;\n#\tendif\n\n\treturn Error;\n}\n\nint test_size()\n{\n\tint Error = 0;\n\n\tError += 32 == sizeof(glm::dualquat) ? 0 : 1;\n\tError += 64 == sizeof(glm::ddualquat) ? 0 : 1;\n\tError += glm::dualquat().length() == 2 ? 0 : 1;\n\tError += glm::ddualquat().length() == 2 ? 0 : 1;\n\tError += glm::dualquat::length() == 2 ? 0 : 1;\n\tError += glm::ddualquat::length() == 2 ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_dual_quat_ctr();\n\tError += test_dquat_type();\n\tError += test_scalars();\n\tError += test_inverse();\n\tError += test_mul();\n\tError += test_size();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_easing.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/glm.hpp>\n#include <glm/gtx/quaternion.hpp>\n#include <glm/gtx/easing.hpp>\n\nnamespace\n{\n\n\ttemplate<typename T>\n\tvoid _test_easing()\n\t{\n\t\tT a = static_cast<T>(0.5);\n\t\tT r;\n\n\t\tr = glm::linearInterpolation(a);\n\n\t\tr = glm::quadraticEaseIn(a);\n\t\tr = glm::quadraticEaseOut(a);\n\t\tr = glm::quadraticEaseInOut(a);\n\n\t\tr = glm::cubicEaseIn(a);\n\t\tr = glm::cubicEaseOut(a);\n\t\tr = glm::cubicEaseInOut(a);\n\n\t\tr = glm::quarticEaseIn(a);\n\t\tr = glm::quarticEaseOut(a);\n\t\tr = glm::quinticEaseInOut(a);\n\n\t\tr = glm::sineEaseIn(a);\n\t\tr = glm::sineEaseOut(a);\n\t\tr = glm::sineEaseInOut(a);\n\n\t\tr = glm::circularEaseIn(a);\n\t\tr = glm::circularEaseOut(a);\n\t\tr = glm::circularEaseInOut(a);\n\n\t\tr = glm::exponentialEaseIn(a);\n\t\tr = glm::exponentialEaseOut(a);\n\t\tr = glm::exponentialEaseInOut(a);\n\n\t\tr = glm::elasticEaseIn(a);\n\t\tr = glm::elasticEaseOut(a);\n\t\tr = glm::elasticEaseInOut(a);\n\n\t\tr = glm::backEaseIn(a);\n\t\tr = glm::backEaseOut(a);\n\t\tr = glm::backEaseInOut(a);\n\n\t\tr = glm::bounceEaseIn(a);\n\t\tr = glm::bounceEaseOut(a);\n\t\tr = glm::bounceEaseInOut(a);\n\t}\n\n}\n\nint main()\n{\n\tint Error = 0;\n\n\t_test_easing<float>();\n\t_test_easing<double>();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_euler_angle.cpp",
    "content": "// Code sample from Filippo Ramaciotti\n\n#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/matrix_transform.hpp>\n#include <glm/gtx/matrix_cross_product.hpp>\n#include <glm/gtx/matrix_operation.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtx/string_cast.hpp>\n#include <glm/gtx/euler_angles.hpp>\n#include <cstdio>\n#include <vector>\n#include <utility>\n\nnamespace test_eulerAngleX\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tfloat const Angle(glm::pi<float>() * 0.5f);\n\t\tglm::vec3 const X(1.0f, 0.0f, 0.0f);\n\n\t\tglm::vec4 const Y(0.0f, 1.0f, 0.0f, 1.0f);\n\t\tglm::vec4 const Y1 = glm::rotate(glm::mat4(1.0f), Angle, X) * Y;\n\t\tglm::vec4 const Y2 = glm::eulerAngleX(Angle) * Y;\n\t\tglm::vec4 const Y3 = glm::eulerAngleXY(Angle, 0.0f) * Y;\n\t\tglm::vec4 const Y4 = glm::eulerAngleYX(0.0f, Angle) * Y;\n\t\tglm::vec4 const Y5 = glm::eulerAngleXZ(Angle, 0.0f) * Y;\n\t\tglm::vec4 const Y6 = glm::eulerAngleZX(0.0f, Angle) * Y;\n\t\tglm::vec4 const Y7 = glm::eulerAngleYXZ(0.0f, Angle, 0.0f) * Y;\n\t\tError += glm::all(glm::epsilonEqual(Y1, Y2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Y1, Y3, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Y1, Y4, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Y1, Y5, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Y1, Y6, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Y1, Y7, 0.00001f)) ? 0 : 1;\n\n\t\tglm::vec4 const Z(0.0f, 0.0f, 1.0f, 1.0f);\n\t\tglm::vec4 const Z1 = glm::rotate(glm::mat4(1.0f), Angle, X) * Z;\n\t\tglm::vec4 const Z2 = glm::eulerAngleX(Angle) * Z;\n\t\tglm::vec4 const Z3 = glm::eulerAngleXY(Angle, 0.0f) * Z;\n\t\tglm::vec4 const Z4 = glm::eulerAngleYX(0.0f, Angle) * Z;\n\t\tglm::vec4 const Z5 = glm::eulerAngleXZ(Angle, 0.0f) * Z;\n\t\tglm::vec4 const Z6 = glm::eulerAngleZX(0.0f, Angle) * Z;\n\t\tglm::vec4 const Z7 = glm::eulerAngleYXZ(0.0f, Angle, 0.0f) * Z;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z3, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z4, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z5, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z6, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z7, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleX\n\nnamespace test_eulerAngleY\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tfloat const Angle(glm::pi<float>() * 0.5f);\n\t\tglm::vec3 const Y(0.0f, 1.0f, 0.0f);\n\n\t\tglm::vec4 const X(1.0f, 0.0f, 0.0f, 1.0f);\n\t\tglm::vec4 const X1 = glm::rotate(glm::mat4(1.0f), Angle, Y) * X;\n\t\tglm::vec4 const X2 = glm::eulerAngleY(Angle) * X;\n\t\tglm::vec4 const X3 = glm::eulerAngleYX(Angle, 0.0f) * X;\n\t\tglm::vec4 const X4 = glm::eulerAngleXY(0.0f, Angle) * X;\n\t\tglm::vec4 const X5 = glm::eulerAngleYZ(Angle, 0.0f) * X;\n\t\tglm::vec4 const X6 = glm::eulerAngleZY(0.0f, Angle) * X;\n\t\tglm::vec4 const X7 = glm::eulerAngleYXZ(Angle, 0.0f, 0.0f) * X;\n\t\tError += glm::all(glm::epsilonEqual(X1, X2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X3, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X4, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X5, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X6, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X7, 0.00001f)) ? 0 : 1;\n\n\t\tglm::vec4 const Z(0.0f, 0.0f, 1.0f, 1.0f);\n\t\tglm::vec4 const Z1 = glm::eulerAngleY(Angle) * Z;\n\t\tglm::vec4 const Z2 = glm::rotate(glm::mat4(1.0f), Angle, Y) * Z;\n\t\tglm::vec4 const Z3 = glm::eulerAngleYX(Angle, 0.0f) * Z;\n\t\tglm::vec4 const Z4 = glm::eulerAngleXY(0.0f, Angle) * Z;\n\t\tglm::vec4 const Z5 = glm::eulerAngleYZ(Angle, 0.0f) * Z;\n\t\tglm::vec4 const Z6 = glm::eulerAngleZY(0.0f, Angle) * Z;\n\t\tglm::vec4 const Z7 = glm::eulerAngleYXZ(Angle, 0.0f, 0.0f) * Z;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z3, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z4, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z5, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z6, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z7, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleY\n\nnamespace test_eulerAngleZ\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tfloat const Angle(glm::pi<float>() * 0.5f);\n\t\tglm::vec3 const Z(0.0f, 0.0f, 1.0f);\n\n\t\tglm::vec4 const X(1.0f, 0.0f, 0.0f, 1.0f);\n\t\tglm::vec4 const X1 = glm::rotate(glm::mat4(1.0f), Angle, Z) * X;\n\t\tglm::vec4 const X2 = glm::eulerAngleZ(Angle) * X;\n\t\tglm::vec4 const X3 = glm::eulerAngleZX(Angle, 0.0f) * X;\n\t\tglm::vec4 const X4 = glm::eulerAngleXZ(0.0f, Angle) * X;\n\t\tglm::vec4 const X5 = glm::eulerAngleZY(Angle, 0.0f) * X;\n\t\tglm::vec4 const X6 = glm::eulerAngleYZ(0.0f, Angle) * X;\n\t\tglm::vec4 const X7 = glm::eulerAngleYXZ(0.0f, 0.0f, Angle) * X;\n\t\tError += glm::all(glm::epsilonEqual(X1, X2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X3, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X4, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X5, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X6, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(X1, X7, 0.00001f)) ? 0 : 1;\n\n\t\tglm::vec4 const Y(1.0f, 0.0f, 0.0f, 1.0f);\n\t\tglm::vec4 const Z1 = glm::rotate(glm::mat4(1.0f), Angle, Z) * Y;\n\t\tglm::vec4 const Z2 = glm::eulerAngleZ(Angle) * Y;\n\t\tglm::vec4 const Z3 = glm::eulerAngleZX(Angle, 0.0f) * Y;\n\t\tglm::vec4 const Z4 = glm::eulerAngleXZ(0.0f, Angle) * Y;\n\t\tglm::vec4 const Z5 = glm::eulerAngleZY(Angle, 0.0f) * Y;\n\t\tglm::vec4 const Z6 = glm::eulerAngleYZ(0.0f, Angle) * Y;\n\t\tglm::vec4 const Z7 = glm::eulerAngleYXZ(0.0f, 0.0f, Angle) * Y;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z3, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z4, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z5, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z6, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(Z1, Z7, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleZ\n\nnamespace test_derivedEulerAngles\n{\n\tbool epsilonEqual(glm::mat4 const& mat1, glm::mat4 const& mat2, glm::mat4::value_type const& epsilon)\n\t{\n\t\treturn glm::all(glm::epsilonEqual(mat1[0], mat2[0], epsilon)) ?\n\t\t\t\t(\n\t\t\t\t\tglm::all(glm::epsilonEqual(mat1[1], mat2[1], epsilon)) ?\n\t\t\t\t\t(\n\t\t\t\t\t\tglm::all(glm::epsilonEqual(mat1[2], mat2[2], epsilon)) ?\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tglm::all(glm::epsilonEqual(mat1[3], mat2[3], epsilon)) ? true : false\n\t\t\t\t\t\t) : false\n\t\t\t\t\t) : false\n\t\t\t\t) : false;\n\t}\n\n\ttemplate<typename RotationFunc, typename TestDerivedFunc>\n\tint test(RotationFunc rotationFunc, TestDerivedFunc testDerivedFunc, const glm::vec3& basis)\n\t{\n\t\tint Error = 0;\n\n\t\ttypedef glm::vec3::value_type value;\n\t\tvalue const zeroAngle(0.0f);\n\t\tvalue const Angle(glm::pi<float>() * 0.75f);\n\t\tvalue const negativeAngle(-Angle);\n\t\tvalue const zeroAngleVelocity(0.0f);\n\t\tvalue const AngleVelocity(glm::pi<float>() * 0.27f);\n\t\tvalue const negativeAngleVelocity(-AngleVelocity);\n\n\t\ttypedef std::pair<value,value> AngleAndAngleVelocity;\n\t\tstd::vector<AngleAndAngleVelocity> testPairs;\n\t\ttestPairs.push_back(AngleAndAngleVelocity(zeroAngle, zeroAngleVelocity));\n\t\ttestPairs.push_back(AngleAndAngleVelocity(zeroAngle, AngleVelocity));\n\t\ttestPairs.push_back(AngleAndAngleVelocity(zeroAngle, negativeAngleVelocity));\n\t\ttestPairs.push_back(AngleAndAngleVelocity(Angle, zeroAngleVelocity));\n\t\ttestPairs.push_back(AngleAndAngleVelocity(Angle, AngleVelocity));\n\t\ttestPairs.push_back(AngleAndAngleVelocity(Angle, negativeAngleVelocity));\n\t\ttestPairs.push_back(AngleAndAngleVelocity(negativeAngle, zeroAngleVelocity));\n\t\ttestPairs.push_back(AngleAndAngleVelocity(negativeAngle, AngleVelocity));\n\t\ttestPairs.push_back(AngleAndAngleVelocity(negativeAngle, negativeAngleVelocity));\n\n\t\tfor (size_t i = 0, size = testPairs.size(); i < size; ++i)\n\t\t{\n\t\t\tAngleAndAngleVelocity const& pair = testPairs.at(i);\n\n\t\t\tglm::mat4 const W = glm::matrixCross4(basis * pair.second);\n\t\t\tglm::mat4 const rotMt = glm::transpose(rotationFunc(pair.first));\n\t\t\tglm::mat4 const derivedRotM = testDerivedFunc(pair.first, pair.second);\n\n\t\t\tError += epsilonEqual(W, derivedRotM * rotMt, 0.00001f) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace test_derivedEulerAngles\n\nnamespace test_eulerAngleXY\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec4 const V(1.0f);\n\n\t\tfloat const AngleX(glm::pi<float>() * 0.5f);\n\t\tfloat const AngleY(glm::pi<float>() * 0.25f);\n\n\t\tglm::vec3 const axisX(1.0f, 0.0f, 0.0f);\n\t\tglm::vec3 const axisY(0.0f, 1.0f, 0.0f);\n\n\t\tglm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleX, axisX) * glm::rotate(glm::mat4(1.0f), AngleY, axisY)) * V;\n\t\tglm::vec4 const V2 = glm::eulerAngleXY(AngleX, AngleY) * V;\n\t\tglm::vec4 const V3 = glm::eulerAngleX(AngleX) * glm::eulerAngleY(AngleY) * V;\n\t\tError += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleXY\n\nnamespace test_eulerAngleYX\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec4 const V(1.0f);\n\n\t\tfloat const AngleX(glm::pi<float>() * 0.5f);\n\t\tfloat const AngleY(glm::pi<float>() * 0.25f);\n\n\t\tglm::vec3 const axisX(1.0f, 0.0f, 0.0f);\n\t\tglm::vec3 const axisY(0.0f, 1.0f, 0.0f);\n\n\t\tglm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleY, axisY) * glm::rotate(glm::mat4(1.0f), AngleX, axisX)) * V;\n\t\tglm::vec4 const V2 = glm::eulerAngleYX(AngleY, AngleX) * V;\n\t\tglm::vec4 const V3 = glm::eulerAngleY(AngleY) * glm::eulerAngleX(AngleX) * V;\n\t\tError += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleYX\n\nnamespace test_eulerAngleXZ\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec4 const V(1.0f);\n\n\t\tfloat const AngleX(glm::pi<float>() * 0.5f);\n\t\tfloat const AngleZ(glm::pi<float>() * 0.25f);\n\n\t\tglm::vec3 const axisX(1.0f, 0.0f, 0.0f);\n\t\tglm::vec3 const axisZ(0.0f, 0.0f, 1.0f);\n\n\t\tglm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleX, axisX) * glm::rotate(glm::mat4(1.0f), AngleZ, axisZ)) * V;\n\t\tglm::vec4 const V2 = glm::eulerAngleXZ(AngleX, AngleZ) * V;\n\t\tglm::vec4 const V3 = glm::eulerAngleX(AngleX) * glm::eulerAngleZ(AngleZ) * V;\n\t\tError += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleXZ\n\nnamespace test_eulerAngleZX\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec4 const V(1.0f);\n\n\t\tfloat const AngleX(glm::pi<float>() * 0.5f);\n\t\tfloat const AngleZ(glm::pi<float>() * 0.25f);\n\n\t\tglm::vec3 const axisX(1.0f, 0.0f, 0.0f);\n\t\tglm::vec3 const axisZ(0.0f, 0.0f, 1.0f);\n\n\t\tglm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleZ, axisZ) * glm::rotate(glm::mat4(1.0f), AngleX, axisX)) * V;\n\t\tglm::vec4 const V2 = glm::eulerAngleZX(AngleZ, AngleX) * V;\n\t\tglm::vec4 const V3 = glm::eulerAngleZ(AngleZ) * glm::eulerAngleX(AngleX) * V;\n\t\tError += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleZX\n\nnamespace test_eulerAngleYZ\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec4 const V(1.0f);\n\n\t\tfloat const AngleY(glm::pi<float>() * 0.5f);\n\t\tfloat const AngleZ(glm::pi<float>() * 0.25f);\n\n\t\tglm::vec3 const axisX(1.0f, 0.0f, 0.0f);\n\t\tglm::vec3 const axisY(0.0f, 1.0f, 0.0f);\n\t\tglm::vec3 const axisZ(0.0f, 0.0f, 1.0f);\n\n\t\tglm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleY, axisY) * glm::rotate(glm::mat4(1.0f), AngleZ, axisZ)) * V;\n\t\tglm::vec4 const V2 = glm::eulerAngleYZ(AngleY, AngleZ) * V;\n\t\tglm::vec4 const V3 = glm::eulerAngleY(AngleY) * glm::eulerAngleZ(AngleZ) * V;\n\t\tError += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleYZ\n\nnamespace test_eulerAngleZY\n{\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\tglm::vec4 const V(1.0f);\n\n\t\tfloat const AngleY(glm::pi<float>() * 0.5f);\n\t\tfloat const AngleZ(glm::pi<float>() * 0.25f);\n\n\t\tglm::vec3 const axisX(1.0f, 0.0f, 0.0f);\n\t\tglm::vec3 const axisY(0.0f, 1.0f, 0.0f);\n\t\tglm::vec3 const axisZ(0.0f, 0.0f, 1.0f);\n\n\t\tglm::vec4 const V1 = (glm::rotate(glm::mat4(1.0f), AngleZ, axisZ) * glm::rotate(glm::mat4(1.0f), AngleY, axisY)) * V;\n\t\tglm::vec4 const V2 = glm::eulerAngleZY(AngleZ, AngleY) * V;\n\t\tglm::vec4 const V3 = glm::eulerAngleZ(AngleZ) * glm::eulerAngleY(AngleY) * V;\n\t\tError += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;\n\t\tError += glm::all(glm::epsilonEqual(V1, V3, 0.00001f)) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace test_eulerAngleZY\n\nnamespace test_eulerAngleYXZ\n{\n\tint test()\n\t{\n\t\tglm::f32 first =  1.046f;\n\t\tglm::f32 second = 0.52f;\n\t\tglm::f32 third = -0.785f;\n\n\t\tglm::fmat4 rotationEuler = glm::eulerAngleYXZ(first, second, third); \n\n\t\tglm::fmat4 rotationInvertedY  = glm::eulerAngleY(-1.f*first) * glm::eulerAngleX(second) * glm::eulerAngleZ(third); \n\t\tglm::fmat4 rotationDumb = glm::fmat4(); \n\t\trotationDumb = glm::rotate(rotationDumb, first, glm::fvec3(0,1,0));\n\t\trotationDumb = glm::rotate(rotationDumb, second, glm::fvec3(1,0,0));\n\t\trotationDumb = glm::rotate(rotationDumb, third, glm::fvec3(0,0,1));\n\n\t\tstd::printf(\"%s\\n\", glm::to_string(glm::fmat3(rotationEuler)).c_str());\n\t\tstd::printf(\"%s\\n\", glm::to_string(glm::fmat3(rotationDumb)).c_str());\n\t\tstd::printf(\"%s\\n\", glm::to_string(glm::fmat3(rotationInvertedY)).c_str());\n\n\t\tstd::printf(\"\\nRESIDUAL\\n\");\n\t\tstd::printf(\"%s\\n\", glm::to_string(glm::fmat3(rotationEuler-(rotationDumb))).c_str());\n\t\tstd::printf(\"%s\\n\", glm::to_string(glm::fmat3(rotationEuler-(rotationInvertedY))).c_str());\n\n\t\treturn 0;\n\t}\n}//namespace eulerAngleYXZ\n\nnamespace test_eulerAngles\n{\n\ttemplate<typename TestRotationFunc>\n\tint test(TestRotationFunc testRotationFunc, glm::vec3 const& I, glm::vec3 const& J, glm::vec3 const& K)\n\t{\n\t\tint Error = 0;\n\n\t\ttypedef glm::mat4::value_type value;\n\t\tvalue const minAngle(-glm::pi<value>());\n\t\tvalue const maxAngle(glm::pi<value>());\n\t\tvalue const maxAngleWithDelta(maxAngle - 0.0000001f);\n\t\tvalue const minMidAngle(-glm::pi<value>() * 0.5f);\n\t\tvalue const maxMidAngle(glm::pi<value>() * 0.5f);\n\n\t\tstd::vector<glm::vec3> testEulerAngles;\n\t\ttestEulerAngles.push_back(glm::vec3(1.046f, 0.52f, -0.785f));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, minMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, minMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, minMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, maxMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, maxMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, maxMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, minMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, minMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, minMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, minMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, minMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, maxMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, maxMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, maxMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, 0.0f, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, 0.0f, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxAngle, maxAngle));\n\n\t\tfor (size_t i = 0, size = testEulerAngles.size(); i < size; ++i)\n\t\t{\n\t\t\tglm::vec3 const& angles = testEulerAngles.at(i);\n\t\t\tglm::mat4 const rotationEuler = testRotationFunc(angles.x, angles.y, angles.z);\n\n\t\t\tglm::mat4 rotationDumb = glm::diagonal4x4(glm::mat4::col_type(1.0f));\n\t\t\trotationDumb = glm::rotate(rotationDumb, angles.x, I);\n\t\t\trotationDumb = glm::rotate(rotationDumb, angles.y, J);\n\t\t\trotationDumb = glm::rotate(rotationDumb, angles.z, K);\n\n\t\t\tglm::vec4 const V(1.0f,1.0f,1.0f,1.0f);\n\t\t\tglm::vec4 const V1 = rotationEuler * V;\n\t\t\tglm::vec4 const V2 = rotationDumb * V;\n\n\t\t\tError += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace test_extractsEulerAngles\n\nnamespace test_extractsEulerAngles\n{\n\ttemplate<typename RotationFunc, typename TestExtractionFunc>\n\tint test(RotationFunc rotationFunc, TestExtractionFunc testExtractionFunc)\n\t{\n\t\tint Error = 0;\n\n\t\ttypedef glm::mat4::value_type value;\n\t\tvalue const minAngle(-glm::pi<value>());\n\t\tvalue const maxAngle(glm::pi<value>());\n\t\tvalue const maxAngleWithDelta(maxAngle - 0.0000001f);\n\t\tvalue const minMidAngle(-glm::pi<value>() * 0.5f);\n\t\tvalue const maxMidAngle(glm::pi<value>() * 0.5f);\n\n\t\tstd::vector<glm::vec3> testEulerAngles;\n\t\ttestEulerAngles.push_back(glm::vec3(1.046f, 0.52f, -0.785f));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, minMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, minMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, minMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, maxMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, maxMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, maxMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, minMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, minMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, minMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, minMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, minMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, maxMidAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, maxMidAngle, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngleWithDelta, maxMidAngle, maxAngleWithDelta));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, 0.0f, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(minAngle, 0.0f, maxAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxAngle, minAngle));\n\t\ttestEulerAngles.push_back(glm::vec3(maxAngle, maxAngle, maxAngle));\n\n\t\tfor (size_t i = 0, size = testEulerAngles.size(); i < size; ++i)\n\t\t{\n\t\t\tglm::vec3 const& angles = testEulerAngles.at(i);\n\t\t\tglm::mat4 const rotation = rotationFunc(angles.x, angles.y, angles.z);\n\n\t\t\tglm::vec3 extractedEulerAngles(0.0f);\n\t\t\ttestExtractionFunc(rotation, extractedEulerAngles.x, extractedEulerAngles.y, extractedEulerAngles.z);\n\t\t\tglm::mat4 const extractedRotation = rotationFunc(extractedEulerAngles.x, extractedEulerAngles.y, extractedEulerAngles.z);\n\n\t\t\tglm::vec4 const V(1.0f,1.0f,1.0f,1.0f);\n\t\t\tglm::vec4 const V1 = rotation * V;\n\t\t\tglm::vec4 const V2 = extractedRotation * V;\n\n\t\t\tError += glm::all(glm::epsilonEqual(V1, V2, 0.00001f)) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace test_extractsEulerAngles\n\nint main()\n{ \n\tint Error = 0;\n\n\ttypedef glm::mat4::value_type value;\n\tglm::vec3 const X(1.0f, 0.0f, 0.0f);\n\tglm::vec3 const Y(0.0f, 1.0f, 0.0f);\n\tglm::vec3 const Z(0.0f, 0.0f, 1.0f);\n\n\tError += test_eulerAngleX::test();\n\tError += test_eulerAngleY::test();\n\tError += test_eulerAngleZ::test();\n\n\tError += test_derivedEulerAngles::test(glm::eulerAngleX<value>, glm::derivedEulerAngleX<value>, X);\n\tError += test_derivedEulerAngles::test(glm::eulerAngleY<value>, glm::derivedEulerAngleY<value>, Y);\n\tError += test_derivedEulerAngles::test(glm::eulerAngleZ<value>, glm::derivedEulerAngleZ<value>, Z);\n\n\tError += test_eulerAngleXY::test();\n\tError += test_eulerAngleYX::test();\n\tError += test_eulerAngleXZ::test();\n\tError += test_eulerAngleZX::test();\n\tError += test_eulerAngleYZ::test();\n\tError += test_eulerAngleZY::test();\n\tError += test_eulerAngleYXZ::test();\n\n\tError += test_eulerAngles::test(glm::eulerAngleXZX<value>, X, Z, X);\n\tError += test_eulerAngles::test(glm::eulerAngleXYX<value>, X, Y, X);\n\tError += test_eulerAngles::test(glm::eulerAngleYXY<value>, Y, X, Y);\n\tError += test_eulerAngles::test(glm::eulerAngleYZY<value>, Y, Z, Y);\n\tError += test_eulerAngles::test(glm::eulerAngleZYZ<value>, Z, Y, Z);\n\tError += test_eulerAngles::test(glm::eulerAngleZXZ<value>, Z, X, Z);\n\tError += test_eulerAngles::test(glm::eulerAngleXZY<value>, X, Z, Y);\n\tError += test_eulerAngles::test(glm::eulerAngleYZX<value>, Y, Z, X);\n\tError += test_eulerAngles::test(glm::eulerAngleZYX<value>, Z, Y, X);\n\tError += test_eulerAngles::test(glm::eulerAngleZXY<value>, Z, X, Y);\n\n\tError += test_extractsEulerAngles::test(glm::eulerAngleYXZ<value>, glm::extractEulerAngleYXZ<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleXZX<value>, glm::extractEulerAngleXZX<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleXYX<value>, glm::extractEulerAngleXYX<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleYXY<value>, glm::extractEulerAngleYXY<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleYZY<value>, glm::extractEulerAngleYZY<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleZYZ<value>, glm::extractEulerAngleZYZ<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleZXZ<value>, glm::extractEulerAngleZXZ<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleXZY<value>, glm::extractEulerAngleXZY<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleYZX<value>, glm::extractEulerAngleYZX<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleZYX<value>, glm::extractEulerAngleZYX<value>);\n\tError += test_extractsEulerAngles::test(glm::eulerAngleZXY<value>, glm::extractEulerAngleZXY<value>);\n\n\treturn Error; \n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_extend.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/extend.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_extended_min_max.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n\n#include <glm/gtx/extended_min_max.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n\n// This file has divisions by zero to test isnan\n#if GLM_COMPILER & GLM_COMPILER_VC\n#\tpragma warning(disable : 4723)\n#endif\n\nnamespace fmin_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tfloat Zero_f = 0.0f;\n\t\tglm::vec1 A0 = glm::fmin(glm::vec1(1), glm::vec1(Zero_f / 0.0f));\n\t\tError += glm::equal(A0.x, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\n\t\tglm::vec1 A1 = glm::fmin(glm::vec1(Zero_f / 0.0f), glm::vec1(1));\n\t\tError += glm::equal(A1.x, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\n\t\tglm::vec2 B0 = glm::fmin(glm::vec2(1), glm::vec2(1));\n\t\tglm::vec2 B1 = glm::fmin(glm::vec2(1), 1.0f);\n\t\tbool B2 = glm::all(glm::equal(B0, B1, glm::epsilon<float>()));\n\t\tError += B2 ? 0 : 1;\n\n\t\tglm::vec3 C0 = glm::fmin(glm::vec3(1), glm::vec3(1));\n\t\tglm::vec3 C1 = glm::fmin(glm::vec3(1), 1.0f);\n\t\tbool C2 = glm::all(glm::equal(C0, C1, glm::epsilon<float>()));\n\t\tError += C2 ? 0 : 1;\n\n\t\tglm::vec4 D0 = glm::fmin(glm::vec4(1), glm::vec4(1));\n\t\tglm::vec4 D1 = glm::fmin(glm::vec4(1), 1.0f);\n\t\tbool D2 = glm::all(glm::equal(D0, D1, glm::epsilon<float>()));\n\t\tError += D2 ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace fmin_\n\nnamespace fmax_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tfloat Zero_f = 0.0f;\n\t\tglm::vec1 A0 = glm::fmax(glm::vec1(1), glm::vec1(Zero_f / 0.0f));\n\t\tError += glm::equal(A0.x, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\n\t\tglm::vec1 A1 = glm::fmax(glm::vec1(Zero_f / 0.0f), glm::vec1(1));\n\t\tError += glm::equal(A0.x, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\n\t\tglm::vec2 B0 = glm::fmax(glm::vec2(1), glm::vec2(1));\n\t\tglm::vec2 B1 = glm::fmax(glm::vec2(1), 1.0f);\n\t\tbool B2 = glm::all(glm::equal(B0, B1, glm::epsilon<float>()));\n\t\tError += B2 ? 0 : 1;\n\n\t\tglm::vec3 C0 = glm::fmax(glm::vec3(1), glm::vec3(1));\n\t\tglm::vec3 C1 = glm::fmax(glm::vec3(1), 1.0f);\n\t\tbool C2 = glm::all(glm::equal(C0, C1, glm::epsilon<float>()));\n\t\tError += C2 ? 0 : 1;\n\n\t\tglm::vec4 D0 = glm::fmax(glm::vec4(1), glm::vec4(1));\n\t\tglm::vec4 D1 = glm::fmax(glm::vec4(1), 1.0f);\n\t\tbool D2 = glm::all(glm::equal(D0, D1, glm::epsilon<float>()));\n\t\tError += D2 ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace fmax_\n\nnamespace fclamp_\n{\n\tstatic int test()\n\t{\n\t\tint Error = 0;\n\n\t\tfloat Zero_f = 0.0f;\n\t\tglm::vec1 A0 = glm::fclamp(glm::vec1(1), glm::vec1(Zero_f / 0.0f), glm::vec1(2.0f));\n\t\tError += glm::equal(A0.x, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace fclamp_\n\nint main()\n{\n\tint Error = 0;\n\n\tError += fmin_::test();\n\tError += fmax_::test();\n\tError += fclamp_::test();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_extented_min_max.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////////\n/// OpenGL Mathematics (glm.g-truc.net)\n///\n/// Copyright (c) 2005 - 2015 G-Truc Creation (www.g-truc.net)\n/// Permission is hereby granted, free of charge, to any person obtaining a copy\n/// of this software and associated documentation files (the \"Software\"), to deal\n/// in the Software without restriction, including without limitation the rights\n/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n/// copies of the Software, and to permit persons to whom the Software is\n/// furnished to do so, subject to the following conditions:\n/// \n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n/// \n/// Restrictions:\n///\t\tBy making use of the Software for military purposes, you choose to make\n///\t\ta Bunny unhappy.\n/// \n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n/// THE SOFTWARE.\n///\n/// @file test/gtx/gtx_extented_min_max.cpp\n/// @date 2013-10-25 / 2014-11-25\n/// @author Christophe Riccio\n///////////////////////////////////////////////////////////////////////////////////\n\n#include <glm/gtx/extended_min_max.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_exterior_product.cpp",
    "content": "#include <glm/gtx/exterior_product.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/vec2.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\tfloat const f = glm::cross(glm::vec2(1.0f, 1.0f), glm::vec2(1.0f, 1.0f));\n\tError += glm::epsilonEqual(f, 0.0f, 0.001f) ? 0 : 1;\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_fast_exponential.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/fast_exponential.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_fast_square_root.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/fast_square_root.hpp>\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/vector_relational.hpp>\n\nint test_fastInverseSqrt()\n{\n\tint Error = 0;\n\n\tError += glm::epsilonEqual(glm::fastInverseSqrt(1.0f), 1.0f, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(glm::fastInverseSqrt(1.0), 1.0, 0.01) ? 0 : 1;\n\tError += glm::all(glm::epsilonEqual(glm::fastInverseSqrt(glm::vec2(1.0f)), glm::vec2(1.0f), 0.01f)) ? 0 : 1;\n\tError += glm::all(glm::epsilonEqual(glm::fastInverseSqrt(glm::dvec3(1.0)), glm::dvec3(1.0), 0.01)) ? 0 : 1;\n\tError += glm::all(glm::epsilonEqual(glm::fastInverseSqrt(glm::dvec4(1.0)), glm::dvec4(1.0), 0.01)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_fastDistance()\n{\n\tint Error = 0;\n\n\tfloat const A = glm::fastDistance(0.0f, 1.0f);\n\tfloat const B = glm::fastDistance(glm::vec2(0.0f), glm::vec2(1.0f, 0.0f));\n\tfloat const C = glm::fastDistance(glm::vec3(0.0f), glm::vec3(1.0f, 0.0f, 0.0f));\n\tfloat const D = glm::fastDistance(glm::vec4(0.0f), glm::vec4(1.0f, 0.0f, 0.0f, 0.0f));\n\n\tError += glm::epsilonEqual(A, 1.0f, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(B, 1.0f, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(C, 1.0f, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(D, 1.0f, 0.01f) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_fastInverseSqrt();\n\tError += test_fastDistance();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_fast_trigonometry.cpp",
    "content": "#include <glm/ext/scalar_ulp.hpp>\n\n#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtx/fast_trigonometry.hpp>\n#include <glm/gtx/integer.hpp>\n#include <glm/gtx/common.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/trigonometric.hpp>\n#include <cmath>\n#include <ctime>\n#include <cstdio>\n#include <vector>\n\nnamespace fastCos\n{\n\tint perf(bool NextFloat)\n\t{\n\t\tconst float begin = -glm::pi<float>();\n\t\tconst float end = glm::pi<float>();\n\t\tfloat result = 0.f;\n\n\t\tconst std::clock_t timestamp1 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::fastCos(i);\n\n\t\tconst std::clock_t timestamp2 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::cos(i);\n\n\t\tconst std::clock_t timestamp3 = std::clock();\n\t\tconst std::clock_t time_fast = timestamp2 - timestamp1;\n\t\tconst std::clock_t time_default = timestamp3 - timestamp2;\n\t\tstd::printf(\"fastCos Time %d clocks\\n\", static_cast<int>(time_fast));\n\t\tstd::printf(\"cos Time %d clocks\\n\", static_cast<int>(time_default));\n\n\t\treturn time_fast <= time_default ? 0 : 1;\n\t}\n}//namespace fastCos\n\nnamespace fastSin\n{\n\t/*\n\tfloat sin(float x) {\n\tfloat temp;\n\ttemp = (x + M_PI) / ((2 * M_PI) - M_PI);\n\treturn limited_sin((x + M_PI) - ((2 * M_PI) - M_PI) * temp));\n\t}\n\t*/\n\n\tint perf(bool NextFloat)\n\t{\n\t\tconst float begin = -glm::pi<float>();\n\t\tconst float end = glm::pi<float>();\n\t\tfloat result = 0.f;\n\n\t\tconst std::clock_t timestamp1 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::fastSin(i);\n\n\t\tconst std::clock_t timestamp2 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::sin(i);\n\n\t\tconst std::clock_t timestamp3 = std::clock();\n\t\tconst std::clock_t time_fast = timestamp2 - timestamp1;\n\t\tconst std::clock_t time_default = timestamp3 - timestamp2;\n\t\tstd::printf(\"fastSin Time %d clocks\\n\", static_cast<int>(time_fast));\n\t\tstd::printf(\"sin Time %d clocks\\n\", static_cast<int>(time_default));\n\n\t\treturn time_fast <= time_default ? 0 : 1;\n\t}\n}//namespace fastSin\n\nnamespace fastTan\n{\n\tint perf(bool NextFloat)\n\t{\n\t\tconst float begin = -glm::pi<float>();\n\t\tconst float end = glm::pi<float>();\n\t\tfloat result = 0.f;\n\n\t\tconst std::clock_t timestamp1 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::fastTan(i);\n\n\t\tconst std::clock_t timestamp2 = std::clock();\n\t\tfor (float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::tan(i);\n\n\t\tconst std::clock_t timestamp3 = std::clock();\n\t\tconst std::clock_t time_fast = timestamp2 - timestamp1;\n\t\tconst std::clock_t time_default = timestamp3 - timestamp2;\n\t\tstd::printf(\"fastTan Time %d clocks\\n\", static_cast<int>(time_fast));\n\t\tstd::printf(\"tan Time %d clocks\\n\", static_cast<int>(time_default));\n\n\t\treturn time_fast <= time_default ? 0 : 1;\n\t}\n}//namespace fastTan\n\nnamespace fastAcos\n{\n\tint perf(bool NextFloat)\n\t{\n\t\tconst float begin = -glm::pi<float>();\n\t\tconst float end = glm::pi<float>();\n\t\tfloat result = 0.f;\n\n\t\tconst std::clock_t timestamp1 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::fastAcos(i);\n\n\t\tconst std::clock_t timestamp2 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::acos(i);\n\n\t\tconst std::clock_t timestamp3 = std::clock();\n\t\tconst std::clock_t time_fast = timestamp2 - timestamp1;\n\t\tconst std::clock_t time_default = timestamp3 - timestamp2;\n\n\t\tstd::printf(\"fastAcos Time %d clocks\\n\", static_cast<int>(time_fast));\n\t\tstd::printf(\"acos Time %d clocks\\n\", static_cast<int>(time_default));\n\n\t\treturn time_fast <= time_default ? 0 : 1;\n\t}\n}//namespace fastAcos\n\nnamespace fastAsin\n{\n\tint perf(bool NextFloat)\n\t{\n\t\tconst float begin = -glm::pi<float>();\n\t\tconst float end = glm::pi<float>();\n\t\tfloat result = 0.f;\n\t\tconst std::clock_t timestamp1 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::fastAsin(i);\n\t\tconst std::clock_t timestamp2 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::asin(i);\n\t\tconst std::clock_t timestamp3 = std::clock();\n\t\tconst std::clock_t time_fast = timestamp2 - timestamp1;\n\t\tconst std::clock_t time_default = timestamp3 - timestamp2;\n\t\tstd::printf(\"fastAsin Time %d clocks\\n\", static_cast<int>(time_fast));\n\t\tstd::printf(\"asin Time %d clocks\\n\", static_cast<int>(time_default));\n\n\t\treturn time_fast <= time_default ? 0 : 1;\n\t}\n}//namespace fastAsin\n\nnamespace fastAtan\n{\n\tint perf(bool NextFloat)\n\t{\n\t\tconst float begin = -glm::pi<float>();\n\t\tconst float end = glm::pi<float>();\n\t\tfloat result = 0.f;\n\t\tconst std::clock_t timestamp1 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::fastAtan(i);\n\t\tconst std::clock_t timestamp2 = std::clock();\n\t\tfor(float i = begin; i < end; i = NextFloat ? glm::nextFloat(i) : i += 0.1f)\n\t\t\tresult = glm::atan(i);\n\t\tconst std::clock_t timestamp3 = std::clock();\n\t\tconst std::clock_t time_fast = timestamp2 - timestamp1;\n\t\tconst std::clock_t time_default = timestamp3 - timestamp2;\n\t\tstd::printf(\"fastAtan Time %d clocks\\n\", static_cast<int>(time_fast));\n\t\tstd::printf(\"atan Time %d clocks\\n\", static_cast<int>(time_default));\n\n\t\treturn time_fast <= time_default ? 0 : 1;\n\t}\n}//namespace fastAtan\n\nnamespace taylorCos\n{\n\tusing glm::qualifier;\n\tusing glm::length_t;\n\t\n\tglm::vec4 const AngleShift(0.0f, glm::half_pi<float>(), glm::pi<float>(), glm::three_over_two_pi<float>());\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> taylorSeriesNewCos(glm::vec<L, T, Q> const& x)\n\t{\n\t\tglm::vec<L, T, Q> const Powed2(x * x);\n\t\tglm::vec<L, T, Q> const Powed4(Powed2 * Powed2);\n\t\tglm::vec<L, T, Q> const Powed6(Powed4 * Powed2);\n\t\tglm::vec<L, T, Q> const Powed8(Powed4 * Powed4);\n\n\t\treturn static_cast<T>(1)\n\t\t\t- Powed2 * static_cast<T>(0.5)\n\t\t\t+ Powed4 * static_cast<T>(0.04166666666666666666666666666667)\n\t\t\t- Powed6 * static_cast<T>(0.00138888888888888888888888888889)\n\t\t\t+ Powed8 * static_cast<T>(2.4801587301587301587301587301587e-5);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> taylorSeriesNewCos6(glm::vec<L, T, Q> const& x)\n\t{\n\t\tglm::vec<L, T, Q> const Powed2(x * x);\n\t\tglm::vec<L, T, Q> const Powed4(Powed2 * Powed2);\n\t\tglm::vec<L, T, Q> const Powed6(Powed4 * Powed2);\n\n\t\treturn static_cast<T>(1)\n\t\t\t- Powed2 * static_cast<T>(0.5)\n\t\t\t+ Powed4 * static_cast<T>(0.04166666666666666666666666666667)\n\t\t\t- Powed6 * static_cast<T>(0.00138888888888888888888888888889);\n\t}\n\n\ttemplate<glm::length_t L, qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, float, Q> fastAbs(glm::vec<L, float, Q> x)\n\t{\n\t\tint* Pointer = reinterpret_cast<int*>(&x[0]);\n\t\tPointer[0] &= 0x7fffffff;\n\t\tPointer[1] &= 0x7fffffff;\n\t\tPointer[2] &= 0x7fffffff;\n\t\tPointer[3] &= 0x7fffffff;\n\t\treturn x;\n\t}\n\n\ttemplate<glm::length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> fastCosNew(glm::vec<L, T, Q> const& x)\n\t{\n\t\tglm::vec<L, T, Q> const Angle0_PI(fastAbs(fmod(x + glm::pi<T>(), glm::two_pi<T>()) - glm::pi<T>()));\n\t\treturn taylorSeriesNewCos6(x);\n/*\n\t\tvec<L, bool, Q> const FirstQuarterPi(lessThanEqual(Angle0_PI, vec<L, T, Q>(glm::half_pi<T>())));\n\n\t\tvec<L, T, Q> const RevertAngle(mix(vec<L, T, Q>(glm::pi<T>()), vec<L, T, Q>(0), FirstQuarterPi));\n\t\tvec<L, T, Q> const ReturnSign(mix(vec<L, T, Q>(-1), vec<L, T, Q>(1), FirstQuarterPi));\n\t\tvec<L, T, Q> const SectionAngle(RevertAngle - Angle0_PI);\n\n\t\treturn ReturnSign * taylorSeriesNewCos(SectionAngle);\n*/\n\t}\n\n\tint perf_fastCosNew(float Begin, float End, std::size_t Samples)\n\t{\n\t\tstd::vector<glm::vec4> Results;\n\t\tResults.resize(Samples);\n\n\t\tfloat const Steps = (End - Begin) / static_cast<float>(Samples);\n\n\t\tstd::clock_t const TimeStampBegin = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tResults[i] = fastCosNew(AngleShift + glm::vec4(Begin + Steps * static_cast<float>(i)));\n\n\t\tstd::clock_t const TimeStampEnd = std::clock();\n\n\t\tstd::printf(\"fastCosNew %d clocks\\n\", static_cast<int>(TimeStampEnd - TimeStampBegin));\n\n\t\tint Error = 0;\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tError += Results[i].x >= -1.0f && Results[i].x <= 1.0f ? 0 : 1;\n\t\treturn Error;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> deterministic_fmod(glm::vec<L, T, Q> const& x, T y)\n\t{\n\t\treturn x - y * trunc(x / y);\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> fastCosDeterminisctic(glm::vec<L, T, Q> const& x)\n\t{\n\t\tglm::vec<L, T, Q> const Angle0_PI(abs(deterministic_fmod(x + glm::pi<T>(), glm::two_pi<T>()) - glm::pi<T>()));\n\t\tglm::vec<L, bool, Q> const FirstQuarterPi(lessThanEqual(Angle0_PI, glm::vec<L, T, Q>(glm::half_pi<T>())));\n\n\t\tglm::vec<L, T, Q> const RevertAngle(mix(glm::vec<L, T, Q>(glm::pi<T>()), glm::vec<L, T, Q>(0), FirstQuarterPi));\n\t\tglm::vec<L, T, Q> const ReturnSign(mix(glm::vec<L, T, Q>(-1), glm::vec<L, T, Q>(1), FirstQuarterPi));\n\t\tglm::vec<L, T, Q> const SectionAngle(RevertAngle - Angle0_PI);\n\n\t\treturn ReturnSign * taylorSeriesNewCos(SectionAngle);\n\t}\n\n\tint perf_fastCosDeterminisctic(float Begin, float End, std::size_t Samples)\n\t{\n\t\tstd::vector<glm::vec4> Results;\n\t\tResults.resize(Samples);\n\n\t\tfloat const Steps = (End - Begin) / static_cast<float>(Samples);\n\n\t\tstd::clock_t const TimeStampBegin = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tResults[i] = taylorCos::fastCosDeterminisctic(AngleShift + glm::vec4(Begin + Steps * static_cast<float>(i)));\n\n\t\tstd::clock_t const TimeStampEnd = std::clock();\n\n\t\tstd::printf(\"fastCosDeterminisctic %d clocks\\n\", static_cast<int>(TimeStampEnd - TimeStampBegin));\n\n\t\tint Error = 0;\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tError += Results[i].x >= -1.0f && Results[i].x <= 1.0f ? 0 : 1;\n\t\treturn Error;\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> taylorSeriesRefCos(glm::vec<L, T, Q> const& x)\n\t{\n\t\treturn static_cast<T>(1)\n\t\t\t- (x * x) / glm::factorial(static_cast<T>(2))\n\t\t\t+ (x * x * x * x) / glm::factorial(static_cast<T>(4))\n\t\t\t- (x * x * x * x * x * x) / glm::factorial(static_cast<T>(6))\n\t\t\t+ (x * x * x * x * x * x * x * x) / glm::factorial(static_cast<T>(8));\n\t}\n\n\ttemplate<length_t L, typename T, qualifier Q>\n\tGLM_FUNC_QUALIFIER glm::vec<L, T, Q> fastRefCos(glm::vec<L, T, Q> const& x)\n\t{\n\t\tglm::vec<L, T, Q> const Angle0_PI(glm::abs(fmod(x + glm::pi<T>(), glm::two_pi<T>()) - glm::pi<T>()));\n//\t\treturn taylorSeriesRefCos(Angle0_PI);\n\n\t\tglm::vec<L, bool, Q> const FirstQuarterPi(lessThanEqual(Angle0_PI, glm::vec<L, T, Q>(glm::half_pi<T>())));\n\n\t\tglm::vec<L, T, Q> const RevertAngle(mix(glm::vec<L, T, Q>(glm::pi<T>()), glm::vec<L, T, Q>(0), FirstQuarterPi));\n\t\tglm::vec<L, T, Q> const ReturnSign(mix(glm::vec<L, T, Q>(-1), glm::vec<L, T, Q>(1), FirstQuarterPi));\n\t\tglm::vec<L, T, Q> const SectionAngle(RevertAngle - Angle0_PI);\n\n\t\treturn ReturnSign * taylorSeriesRefCos(SectionAngle);\n\t}\n\n\tint perf_fastCosRef(float Begin, float End, std::size_t Samples)\n\t{\n\t\tstd::vector<glm::vec4> Results;\n\t\tResults.resize(Samples);\n\n\t\tfloat const Steps = (End - Begin) / static_cast<float>(Samples);\n\n\t\tstd::clock_t const TimeStampBegin = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tResults[i] = taylorCos::fastRefCos(AngleShift + glm::vec4(Begin + Steps * static_cast<float>(i)));\n\n\t\tstd::clock_t const TimeStampEnd = std::clock();\n\n\t\tstd::printf(\"fastCosRef %d clocks\\n\", static_cast<int>(TimeStampEnd - TimeStampBegin));\n\n\t\tint Error = 0;\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tError += Results[i].x >= -1.0f && Results[i].x <= 1.0f ? 0 : 1;\n\t\treturn Error;\n\t}\n\n\tint perf_fastCosOld(float Begin, float End, std::size_t Samples)\n\t{\n\t\tstd::vector<glm::vec4> Results;\n\t\tResults.resize(Samples);\n\n\t\tfloat const Steps = (End - Begin) / static_cast<float>(Samples);\n\n\t\tstd::clock_t const TimeStampBegin = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tResults[i] = glm::fastCos(AngleShift + glm::vec4(Begin + Steps * static_cast<float>(i)));\n\n\t\tstd::clock_t const TimeStampEnd = std::clock();\n\n\t\tstd::printf(\"fastCosOld %d clocks\\n\", static_cast<int>(TimeStampEnd - TimeStampBegin));\n\n\t\tint Error = 0;\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tError += Results[i].x >= -1.0f && Results[i].x <= 1.0f ? 0 : 1;\n\t\treturn Error;\n\t}\n\n\tint perf_cos(float Begin, float End, std::size_t Samples)\n\t{\n\t\tstd::vector<glm::vec4> Results;\n\t\tResults.resize(Samples);\n\n\t\tfloat const Steps = (End - Begin) / static_cast<float>(Samples);\n\n\t\tstd::clock_t const TimeStampBegin = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tResults[i] = glm::cos(AngleShift + glm::vec4(Begin + Steps * static_cast<float>(i)));\n\n\t\tstd::clock_t const TimeStampEnd = std::clock();\n\n\t\tstd::printf(\"cos %d clocks\\n\", static_cast<int>(TimeStampEnd - TimeStampBegin));\n\n\t\tint Error = 0;\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tError += Results[i].x >= -1.0f && Results[i].x <= 1.0f ? 0 : 1;\n\t\treturn Error;\n\t}\n\n\tint perf(std::size_t const Samples)\n\t{\n\t\tint Error = 0;\n\n\t\tfloat const Begin = -glm::pi<float>();\n\t\tfloat const End = glm::pi<float>();\n\n\t\tError += perf_cos(Begin, End, Samples);\n\t\tError += perf_fastCosOld(Begin, End, Samples);\n\t\tError += perf_fastCosRef(Begin, End, Samples);\n\t\t//Error += perf_fastCosNew(Begin, End, Samples);\n\t\tError += perf_fastCosDeterminisctic(Begin, End, Samples);\n\n\t\treturn Error;\n\t}\n\n\tint test()\n\t{\n\t\tint Error = 0;\n\n\t\t//for(float Angle = -4.0f * glm::pi<float>(); Angle < 4.0f * glm::pi<float>(); Angle += 0.1f)\n\t\t//for(float Angle = -720.0f; Angle < 720.0f; Angle += 0.1f)\n\t\tfor(float Angle = 0.0f; Angle < 180.0f; Angle += 0.1f)\n\t\t{\n\t\t\tfloat const modAngle = std::fmod(glm::abs(Angle), 360.f);\n\t\t\tassert(modAngle >= 0.0f && modAngle <= 360.f);\n\t\t\tfloat const radAngle = glm::radians(modAngle);\n\t\t\tfloat const Cos0 = std::cos(radAngle);\n\n\t\t\tfloat const Cos1 = taylorCos::fastRefCos(glm::fvec1(radAngle)).x;\n\t\t\tError += glm::abs(Cos1 - Cos0) < 0.1f ? 0 : 1;\n\n\t\t\t//float const Cos2 = taylorCos::fastCosNew(glm::fvec1(radAngle)).x;\n\t\t\t//Error += glm::abs(Cos2 - Cos0) < 0.1f ? 0 : 1;\n\n\t\t\tassert(!Error);\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace taylorCos\n\nnamespace taylor2\n{\n\tglm::vec4 const AngleShift(0.0f, glm::pi<float>() * 0.5f, glm::pi<float>() * 1.0f, glm::pi<float>() * 1.5f);\n\n\tfloat taylorCosA(float x)\n\t{\n\t\treturn 1.f\n\t\t\t- (x * x) * (1.f / 2.f)\n\t\t\t+ (x * x * x * x) * (1.f / 24.f)\n\t\t\t- (x * x * x * x * x * x) * (1.f / 720.f)\n\t\t\t+ (x * x * x * x * x * x * x * x) * (1.f / 40320.f);\n\t}\n\n\tfloat taylorCosB(float x)\n\t{\n\t\treturn 1.f\n\t\t\t- (x * x) * (1.f / 2.f)\n\t\t\t+ (x * x * x * x) * (1.f / 24.f)\n\t\t\t- (x * x * x * x * x * x) * (1.f / 720.f)\n\t\t\t+ (x * x * x * x * x * x * x * x) * (1.f / 40320.f);\n\t}\n\n\tfloat taylorCosC(float x)\n\t{\n\t\treturn 1.f\n\t\t\t- (x * x) * (1.f / 2.f)\n\t\t\t+ ((x * x) * (x * x)) * (1.f / 24.f)\n\t\t\t- (((x * x) * (x * x)) * (x * x)) * (1.f / 720.f)\n\t\t\t+ (((x * x) * (x * x)) * ((x * x) * (x * x))) * (1.f / 40320.f);\n\t}\n\n\tint perf_taylorCosA(float Begin, float End, std::size_t Samples)\n\t{\n\t\tstd::vector<float> Results;\n\t\tResults.resize(Samples);\n\n\t\tfloat const Steps = (End - Begin) / static_cast<float>(Samples);\n\n\t\tstd::clock_t const TimeStampBegin = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tResults[i] = taylorCosA(AngleShift.x + Begin + Steps * static_cast<float>(i));\n\n\t\tstd::clock_t const TimeStampEnd = std::clock();\n\n\t\tstd::printf(\"taylorCosA %d clocks\\n\", static_cast<int>(TimeStampEnd - TimeStampBegin));\n\n\t\tint Error = 0;\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tError += Results[i] >= -1.0f && Results[i] <= 1.0f ? 0 : 1;\n\t\treturn Error;\n\t}\n\n\tint perf_taylorCosB(float Begin, float End, std::size_t Samples)\n\t{\n\t\tstd::vector<float> Results;\n\t\tResults.resize(Samples);\n\n\t\tfloat const Steps = (End - Begin) / static_cast<float>(Samples);\n\n\t\tstd::clock_t const TimeStampBegin = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tResults[i] = taylorCosB(AngleShift.x + Begin + Steps * static_cast<float>(i));\n\n\t\tstd::clock_t const TimeStampEnd = std::clock();\n\n\t\tstd::printf(\"taylorCosB %d clocks\\n\", static_cast<int>(TimeStampEnd - TimeStampBegin));\n\n\t\tint Error = 0;\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tError += Results[i] >= -1.0f && Results[i] <= 1.0f ? 0 : 1;\n\t\treturn Error;\n\t}\n\n\tint perf_taylorCosC(float Begin, float End, std::size_t Samples)\n\t{\n\t\tstd::vector<float> Results;\n\t\tResults.resize(Samples);\n\n\t\tfloat const Steps = (End - Begin) / static_cast<float>(Samples);\n\n\t\tstd::clock_t const TimeStampBegin = std::clock();\n\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tResults[i] = taylorCosC(AngleShift.x + Begin + Steps * static_cast<float>(i));\n\n\t\tstd::clock_t const TimeStampEnd = std::clock();\n\n\t\tstd::printf(\"taylorCosC %d clocks\\n\", static_cast<int>(TimeStampEnd - TimeStampBegin));\n\n\t\tint Error = 0;\n\t\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\t\tError += Results[i] >= -1.0f && Results[i] <= 1.0f ? 0 : 1;\n\t\treturn Error;\n\t}\n\n\tint perf(std::size_t Samples)\n\t{\n\t\tint Error = 0;\n\n\t\tfloat const Begin = -glm::pi<float>();\n\t\tfloat const End = glm::pi<float>();\n\n\t\tError += perf_taylorCosA(Begin, End, Samples);\n\t\tError += perf_taylorCosB(Begin, End, Samples);\n\t\tError += perf_taylorCosC(Begin, End, Samples);\n\n\t\treturn Error;\n\t}\n\n}//namespace taylor2\n\nint main()\n{\n\tint Error(0);\n\n\tError += ::taylor2::perf(1000);\n\tError += ::taylorCos::test();\n\tError += ::taylorCos::perf(1000);\n\n#\tifdef NDEBUG\n\t\t::fastCos::perf(false);\n\t\t::fastSin::perf(false);\n\t\t::fastTan::perf(false);\n\t\t::fastAcos::perf(false);\n\t\t::fastAsin::perf(false);\n\t\t::fastAtan::perf(false);\n#\tendif//NDEBUG\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_functions.cpp",
    "content": "#include <glm/gtx/functions.hpp>\n#include <glm/ext/vector_float2.hpp>\n#include <vector>\n\nint test_gauss_1d()\n{\n\tint Error = 0;\n\n\tstd::vector<float> Result(20);\n\tfor(std::size_t i = 0, n = Result.size(); i < n; ++i)\n\t\tResult[i] = glm::gauss(static_cast<float>(i) * 0.1f, 0.0f, 1.0f);\n\n\treturn Error;\n}\n\nint test_gauss_2d()\n{\n\tint Error = 0;\n\n\tstd::vector<float> Result(20);\n\tfor(std::size_t i = 0, n = Result.size(); i < n; ++i)\n\t\tResult[i] = glm::gauss(glm::vec2(static_cast<float>(i)) * 0.1f, glm::vec2(0.0f), glm::vec2(1.0f));\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_gauss_1d();\n\tError += test_gauss_2d();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_gradient_paint.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/gradient_paint.hpp>\n\nint test_radialGradient()\n{\n\tint Error = 0;\n\t\n\tfloat Gradient = glm::radialGradient(glm::vec2(0), 1.0f, glm::vec2(1), glm::vec2(0.5));\n\tError += Gradient != 0.0f ? 0 : 1;\n\t\n\treturn Error;\n}\n\nint test_linearGradient()\n{\n\tint Error = 0;\n\n\tfloat Gradient = glm::linearGradient(glm::vec2(0), glm::vec2(1), glm::vec2(0.5));\n\tError += Gradient != 0.0f ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n    Error += test_radialGradient();\n    Error += test_linearGradient();\n    \n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_handed_coordinate_space.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/handed_coordinate_space.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_hash.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/hash.hpp>\n#include <unordered_map>\n\nint test_compile()\n{\n\tint Error = 0;\n\n    // Vector types\n    std::unordered_map<glm::vec1, int> map_vec1;\n    Error += ++map_vec1[glm::vec1(0.0f)];\n    std::unordered_map<glm::vec2, int> map_vec2;\n    Error += ++map_vec2[glm::vec2(0.0f)];\n    std::unordered_map<glm::vec3, int> map_vec3;\n    Error += ++map_vec3[glm::vec3(0.0f)];\n    std::unordered_map<glm::vec4, int> map_vec4;\n    Error += ++map_vec4[glm::vec4(0.0f)];\n\n    // Quaternion types\n    std::unordered_map<glm::quat, int> map_quat;\n    Error += ++map_quat[glm::quat(0.0f, glm::vec3(0.0f))];\n    std::unordered_map<glm::dualquat, int> map_dualquat;\n    Error += ++map_dualquat[glm::dualquat(glm::vec3(0.0f))];\n\n    // Matrix types\n    std::unordered_map<glm::mat2x2, int> map_mat2x2;\n    Error += ++map_mat2x2[glm::mat2x2(0.0f)];\n    std::unordered_map<glm::mat2x3, int> map_mat2x3;\n    Error += ++map_mat2x3[glm::mat2x3(0.0f)];\n    std::unordered_map<glm::mat2x4, int> map_mat2x4;\n    Error += ++map_mat2x4[glm::mat2x4(0.0f)];\n    std::unordered_map<glm::mat3x2, int> map_mat3x2;\n    Error += ++map_mat3x2[glm::mat3x2(0.0f)];\n    std::unordered_map<glm::mat3x3, int> map_mat3x3;\n    Error += ++map_mat3x3[glm::mat3x3(0.0f)];\n    std::unordered_map<glm::mat3x4, int> map_mat3x4;\n    Error += ++map_mat3x4[glm::mat3x4(0.0f)];\n    std::unordered_map<glm::mat4x2, int> map_mat4x2;\n    Error += ++map_mat4x2[glm::mat4x2(0.0f)];\n    std::unordered_map<glm::mat4x3, int> map_mat4x3;\n    Error += ++map_mat4x3[glm::mat4x3(0.0f)];\n    std::unordered_map<glm::mat4x4, int> map_mat4x4;\n    Error += ++map_mat4x4[glm::mat4x4(0.0f)];\n\n\treturn Error > 0 ? 0 : 1;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_compile();\n\n\treturn Error;\n}"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_int_10_10_10_2.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////////////////////////\n// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Created : 2013-10-25\n// Updated : 2013-10-25\n// Licence : This source is under MIT licence\n// File    : test/gtx/associated_min_max.cpp\n///////////////////////////////////////////////////////////////////////////////////////////////////\n\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtx/associated_min_max.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_integer.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/exponential.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtx/integer.hpp>\n#include <cstdio>\n/*\nint test_floor_log2()\n{\n\tint Error = 0;\n\n\tfor(std::size_t i = 1; i < 1000000; ++i)\n\t{\n\t\tglm::uint A = glm::floor_log2(glm::uint(i));\n\t\tglm::uint B = glm::uint(glm::floor(glm::log2(double(i)))); // Will fail with float, lack of accuracy\n\n\t\tError += A == B ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n*/\nint test_log2()\n{\n\tint Error = 0;\n\n\tfor(std::size_t i = 1; i < 24; ++i)\n\t{\n\t\tglm::uint A = glm::log2(glm::uint(1 << i));\n\t\tglm::uint B = glm::uint(glm::log2(double(1 << i)));\n\n\t\t//Error += glm::equalEpsilon(double(A), B, 1.0) ? 0 : 1;\n\t\tError += glm::abs(double(A) - B) <= 24 ? 0 : 1;\n\t\tassert(!Error);\n\n\t\tstd::printf(\"Log2(%d) error A=%d, B=%d\\n\", 1 << i, A, B);\n\t}\n\n\tstd::printf(\"log2 error=%d\\n\", Error);\n\n\treturn Error;\n}\n\nint test_nlz()\n{\n\tint Error = 0;\n\n\tfor(glm::uint i = 1; i < glm::uint(33); ++i)\n\t\tError += glm::nlz(i) == glm::uint(31u) - glm::findMSB(i) ? 0 : 1;\n\t\t//printf(\"%d, %d\\n\", glm::nlz(i), 31u - glm::findMSB(i));\n\n\treturn Error;\n}\n\nint test_pow_uint()\n{\n\tint Error = 0;\n\n\tglm::uint const p0 = glm::pow(2u, 0u);\n\tError += p0 == 1u ? 0 : 1;\n\n\tglm::uint const p1 = glm::pow(2u, 1u);\n\tError += p1 == 2u ? 0 : 1;\n\n\tglm::uint const p2 = glm::pow(2u, 2u);\n\tError += p2 == 4u ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_pow_int()\n{\n\tint Error = 0;\n\n\tint const p0 = glm::pow(2, 0u);\n\tError += p0 == 1 ? 0 : 1;\n\n\tint const p1 = glm::pow(2, 1u);\n\tError += p1 == 2 ? 0 : 1;\n\n\tint const p2 = glm::pow(2, 2u);\n\tError += p2 == 4 ? 0 : 1;\n\n\tint const p0n = glm::pow(-2, 0u);\n\tError += p0n == -1 ? 0 : 1;\n\n\tint const p1n = glm::pow(-2, 1u);\n\tError += p1n == -2 ? 0 : 1;\n\n\tint const p2n = glm::pow(-2, 2u);\n\tError += p2n == 4 ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_nlz();\n//\tError += test_floor_log2();\n\tError += test_log2();\n\tError += test_pow_uint();\n\tError += test_pow_int();\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_intersect.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/glm.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtx/intersect.hpp>\n\nint test_intersectRayPlane()\n{\n\tint Error = 0;\n\tglm::vec3 const PlaneOrigin(0, 0, 1);\n\tglm::vec3 const PlaneNormal(0, 0, -1);\n\tglm::vec3 const RayOrigin(0, 0, 0);\n\tglm::vec3 const RayDir(0, 0, 1);\n\n\t// check that inversion of the plane normal has no effect\n\t{\n\t\tfloat Distance = 0;\n\t\tbool const Result = glm::intersectRayPlane(RayOrigin, RayDir, PlaneOrigin, PlaneNormal, Distance);\n\t\tError += glm::abs(Distance - 1.f) <= std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += Result ? 0 : 1;\n\t}\n\t{\n\t\tfloat Distance = 0;\n\t\tbool const Result = glm::intersectRayPlane(RayOrigin, RayDir, PlaneOrigin, -1.f * PlaneNormal, Distance);\n\t\tError += glm::abs(Distance - 1.f) <= std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += Result ? 0 : 1;\n\t}\n\n\t// check if plane is before of behind the ray origin\n\t{\n\t\tfloat Distance = 9.9999f; // value should not be changed\n\t\tbool const Result = glm::intersectRayPlane(RayOrigin, RayDir, -1.f * PlaneOrigin, PlaneNormal, Distance);\n\t\tError += glm::abs(Distance - 9.9999f) <= std::numeric_limits<float>::epsilon() ? 0 : 1;\n\t\tError += Result ? 1 : 0; // there is no intersection in front of the ray origin, only behind\n\t}\n\n\treturn Error;\n}\n\nint test_intersectRayTriangle()\n{\n\tint Error = 0;\n\n\tglm::vec3 const Orig(0, 0, 2);\n\tglm::vec3 const Dir(0, 0, -1);\n\tglm::vec3 const Vert0(0, 0, 0);\n\tglm::vec3 const Vert1(-1, -1, 0);\n\tglm::vec3 const Vert2(1, -1, 0);\n\tglm::vec2 BaryPosition(0);\n\tfloat Distance = 0;\n\n\tbool const Result = glm::intersectRayTriangle(Orig, Dir, Vert0, Vert1, Vert2, BaryPosition, Distance);\n\n\tError += glm::all(glm::epsilonEqual(BaryPosition, glm::vec2(0), std::numeric_limits<float>::epsilon())) ? 0 : 1;\n\tError += glm::abs(Distance - 2.f) <= std::numeric_limits<float>::epsilon() ? 0 : 1;\n\tError += Result ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_intersectLineTriangle()\n{\n\tint Error = 0;\n\n\tglm::vec3 const Orig(0, 0, 2);\n\tglm::vec3 const Dir(0, 0, -1);\n\tglm::vec3 const Vert0(0, 0, 0);\n\tglm::vec3 const Vert1(-1, -1, 0);\n\tglm::vec3 const Vert2(1, -1, 0);\n\tglm::vec3 Position(2.0f, 0.0f, 0.0f);\n\n\tbool const Result = glm::intersectLineTriangle(Orig, Dir, Vert0, Vert1, Vert2, Position);\n\n\tError += glm::all(glm::epsilonEqual(Position, glm::vec3(2.0f, 0.0f, 0.0f), std::numeric_limits<float>::epsilon())) ? 0 : 1;\n\tError += Result ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_intersectRayPlane();\n\tError += test_intersectRayTriangle();\n\tError += test_intersectLineTriangle();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_io.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/glm.hpp>\n#if GLM_LANG & GLM_LANG_CXXMS_FLAG\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtx/io.hpp>\n#include <iostream>\n#include <sstream>\n#include <typeinfo>\n\nnamespace\n{\n\ttemplate<typename CTy, typename CTr>\n\tstd::basic_ostream<CTy,CTr>& operator<<(std::basic_ostream<CTy,CTr>& os, glm::qualifier const& a)\n\t{\n\t\ttypename std::basic_ostream<CTy,CTr>::sentry const cerberus(os);\n\n\t\tif (cerberus)\n\t\t{\n\t\t\tswitch (a) {\n\t\t\tcase glm::highp:\t\t\tos << \"uhi\"; break;\n\t\t\tcase glm::mediump:\t\t\tos << \"umd\"; break;\n\t\t\tcase glm::lowp:\t\t\t\tos << \"ulo\"; break;\n#\t\t\tif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE\n\t\t\t\tcase glm::aligned_highp:\tos << \"ahi\"; break;\n\t\t\t\tcase glm::aligned_mediump:\tos << \"amd\"; break;\n\t\t\t\tcase glm::aligned_lowp:\t\tos << \"alo\"; break;\n#\t\t\tendif\n\t\t\t}\n\t\t}\n\n\t\treturn os;\n\t}\n\n\ttemplate<typename U, glm::qualifier P, typename T, typename CTy, typename CTr>\n\tstd::basic_string<CTy> type_name(std::basic_ostream<CTy,CTr>&, T const&)\n\t{\n\t\tstd::basic_ostringstream<CTy,CTr> ostr;\n\n\t\tif      (typeid(T) == typeid(glm::qua<U,P>))   { ostr << \"quat\"; }\n\t\telse if (typeid(T) == typeid(glm::vec<2, U,P>))   { ostr << \"vec2\"; }\n\t\telse if (typeid(T) == typeid(glm::vec<3, U,P>))   { ostr << \"vec3\"; }\n\t\telse if (typeid(T) == typeid(glm::vec<4, U,P>))   { ostr << \"vec4\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<2, 2, U,P>)) { ostr << \"mat2x2\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<2, 3, U,P>)) { ostr << \"mat2x3\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<2, 4, U,P>)) { ostr << \"mat2x4\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<3, 2, U,P>)) { ostr << \"mat3x2\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<3, 3, U,P>)) { ostr << \"mat3x3\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<3, 4, U,P>)) { ostr << \"mat3x4\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<4, 2, U,P>)) { ostr << \"mat4x2\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<4, 3, U,P>)) { ostr << \"mat4x3\"; }\n\t\telse if (typeid(T) == typeid(glm::mat<4, 4, U,P>)) { ostr << \"mat4x4\"; }\n\t\telse                                             { ostr << \"unknown\"; }\n\n\t\tostr << '<' << typeid(U).name() << ',' << P << '>';\n\n\t\treturn ostr.str();\n\t}\n} // namespace {\n\ntemplate<typename T, glm::qualifier P, typename OS>\nint test_io_quat(OS& os)\n{\n\tos << '\\n' << typeid(OS).name() << '\\n';\n\n\tglm::qua<T, P> const q(1, 0, 0, 0);\n\n\t{\n\t\tglm::io::basic_format_saver<typename OS::char_type> const iofs(os);\n\n\t\tos << glm::io::precision(2) << glm::io::width(1 + 2 + 1 + 2)\n\t\t\t<< type_name<T, P>(os, q) << \": \" << q << '\\n';\n\t}\n\n\t{\n\t\tglm::io::basic_format_saver<typename OS::char_type> const iofs(os);\n\n\t\tos << glm::io::unformatted\n\t\t\t<< type_name<T, P>(os, q) << \": \" << q << '\\n';\n\t}\n\n\treturn 0;\n}\n\ntemplate<typename T, glm::qualifier P, typename OS>\nint test_io_vec(OS& os)\n{\n\tos << '\\n' << typeid(OS).name() << '\\n';\n\n\tglm::vec<2, T,P> const v2(0, 1);\n\tglm::vec<3, T,P> const v3(2, 3, 4);\n\tglm::vec<4, T,P> const v4(5, 6, 7, 8);\n\n\tos << type_name<T,P>(os, v2) << \": \" << v2 << '\\n'\n\t\t<< type_name<T,P>(os, v3) << \": \" << v3 << '\\n'\n\t\t<< type_name<T,P>(os, v4) << \": \" << v4 << '\\n';\n\n\tglm::io::basic_format_saver<typename OS::char_type> const iofs(os);\n\n\tos << glm::io::precision(2) << glm::io::width(1 + 2 + 1 + 2)\n\t\t<< type_name<T,P>(os, v2) << \": \" << v2 << '\\n'\n\t\t<< type_name<T,P>(os, v3) << \": \" << v3 << '\\n'\n\t\t<< type_name<T,P>(os, v4) << \": \" << v4 << '\\n';\n\n\treturn 0;\n}\n\ntemplate<typename T, glm::qualifier P, typename OS>\nint test_io_mat(OS& os, glm::io::order_type otype)\n{\n\tos << '\\n' << typeid(OS).name() << '\\n';\n\n\tglm::vec<2, T,P> const v2_1( 0,  1);\n\tglm::vec<2, T,P> const v2_2( 2,  3);\n\tglm::vec<2, T,P> const v2_3( 4,  5);\n\tglm::vec<2, T,P> const v2_4( 6,  7);\n\tglm::vec<3, T,P> const v3_1( 8,  9, 10);\n\tglm::vec<3, T,P> const v3_2(11, 12, 13);\n\tglm::vec<3, T,P> const v3_3(14, 15, 16);\n\tglm::vec<3, T,P> const v3_4(17, 18, 19);\n\tglm::vec<4, T,P> const v4_1(20, 21, 22, 23);\n\tglm::vec<4, T,P> const v4_2(24, 25, 26, 27);\n\tglm::vec<4, T,P> const v4_3(28, 29, 30, 31);\n\tglm::vec<4, T,P> const v4_4(32, 33, 34, 35);\n\n\tglm::io::basic_format_saver<typename OS::char_type> const iofs(os);\n\n\tos << glm::io::precision(2) << glm::io::width(1 + 2 + 1 + 2)\n\t\t<< glm::io::order(otype)\n\t\t<< \"mat2x2<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<2, 2, T,P>(v2_1, v2_2) << '\\n'\n\t\t<< \"mat2x3<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<2, 3, T,P>(v3_1, v3_2) << '\\n'\n\t\t<< \"mat2x4<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<2, 4, T,P>(v4_1, v4_2) << '\\n'\n\t\t<< \"mat3x2<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<3, 2, T,P>(v2_1, v2_2, v2_3) << '\\n'\n\t\t<< \"mat3x3<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<3, 3, T,P>(v3_1, v3_2, v3_3) << '\\n'\n\t\t<< \"mat3x4<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<3, 4, T,P>(v4_1, v4_2, v4_3) << '\\n'\n\t\t<< \"mat4x2<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<4, 2, T,P>(v2_1, v2_2, v2_3, v2_4) << '\\n'\n\t\t<< \"mat4x3<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<4, 3, T,P>(v3_1, v3_2, v3_3, v3_4) << '\\n'\n\t\t<< \"mat4x4<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<4, 4, T,P>(v4_1, v4_2, v4_3, v4_4) << '\\n';\n\n\tos << glm::io::unformatted\n\t\t<< glm::io::order(otype)\n\t\t<< \"mat2x2<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<2, 2, T,P>(v2_1, v2_2) << '\\n'\n\t\t<< \"mat2x3<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<2, 3, T,P>(v3_1, v3_2) << '\\n'\n\t\t<< \"mat2x4<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<2, 4, T,P>(v4_1, v4_2) << '\\n'\n\t\t<< \"mat3x2<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<3, 2, T,P>(v2_1, v2_2, v2_3) << '\\n'\n\t\t<< \"mat3x3<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<3, 3, T,P>(v3_1, v3_2, v3_3) << '\\n'\n\t\t<< \"mat3x4<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<3, 4, T,P>(v4_1, v4_2, v4_3) << '\\n'\n\t\t<< \"mat4x2<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<4, 2, T,P>(v2_1, v2_2, v2_3, v2_4) << '\\n'\n\t\t<< \"mat4x3<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<4, 3, T,P>(v3_1, v3_2, v3_3, v3_4) << '\\n'\n\t\t<< \"mat4x4<\" << typeid(T).name() << ',' << P << \">: \" << glm::mat<4, 4, T,P>(v4_1, v4_2, v4_3, v4_4) << '\\n';\n  \n\treturn 0;\n}\n\nint main()\n{\n\tint Error(0);\n\n\tError += test_io_quat<float, glm::highp>(std::cout);\n\tError += test_io_quat<float, glm::highp>(std::wcout);\n\tError += test_io_quat<int, glm::mediump>(std::cout);\n\tError += test_io_quat<int, glm::mediump>(std::wcout);\n\tError += test_io_quat<glm::uint, glm::lowp>(std::cout);\n\tError += test_io_quat<glm::uint, glm::lowp>(std::wcout);\n\n\tError += test_io_vec<float, glm::highp>(std::cout);\n\tError += test_io_vec<float, glm::highp>(std::wcout);\n\tError += test_io_vec<int, glm::mediump>(std::cout);\n\tError += test_io_vec<int, glm::mediump>(std::wcout);\n\tError += test_io_vec<glm::uint, glm::lowp>(std::cout);\n\tError += test_io_vec<glm::uint, glm::lowp>(std::wcout);\n\n\tError += test_io_mat<float, glm::highp>(std::cout, glm::io::column_major);\n\tError += test_io_mat<float, glm::lowp>(std::wcout, glm::io::column_major);\n\tError += test_io_mat<float, glm::highp>(std::cout, glm::io::row_major);\n        Error += test_io_mat<float, glm::lowp>(std::wcout, glm::io::row_major);\n\n\treturn Error;\n}\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif// GLM_LANG & GLM_LANG_CXXMS_FLAG\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_load.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/glm.hpp>\n/*\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n\n#include <glm/gtx/common.hpp>\n#include <glm/gtc/integer.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/type_aligned.hpp>\n#include <glm/ext/vector_relational.hpp>\n\nnamespace glm\n{\n\tenum genTypeEnum\n\t{\n\t\tQUALIFIER_HIGHP,\n\t\tQUALIFIER_MEDIUMP,\n\t\tQUALIFIER_LOWP\n\t};\n\n\ttemplate <typename genType>\n\tstruct genTypeTrait\n\t{};\n\n\ttemplate <length_t L, typename T>\n\tstruct genTypeTrait<vec<L, T, aligned_highp> >\n\t{\n\t\tstatic const genTypeEnum GENTYPE = QUALIFIER_HIGHP;\n\t};\n\n\ttemplate <length_t L, typename T>\n\tstruct genTypeTrait<vec<L, T, aligned_mediump> >\n\t{\n\t\tstatic const genTypeEnum GENTYPE = QUALIFIER_MEDIUMP;\n\t};\n\n\ttemplate <length_t L, typename T>\n\tstruct genTypeTrait<vec<L, T, aligned_lowp> >\n\t{\n\t\tstatic const genTypeEnum GENTYPE = QUALIFIER_LOWP;\n\t};\n\n\ttemplate<length_t L, typename T, qualifier Q, bool isAligned>\n\tstruct load_gentype\n\t{\n\t\n\t};\n\n#\tif GLM_ARCH & GLM_ARCH_SSE_BIT\n\ttemplate<qualifier Q>\n\tstruct load_gentype<4, float, Q, true>\n\t{\n\t\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, float, Q> load(float const* Mem)\n\t\t{\n\t\t\tvec<4, float, Q> Result;\n\t\t\tResult.data = _mm_loadu_ps(Mem);\n\t\t\treturn Result;\n\t\t}\n\t};\n#\tendif//GLM_ARCH & GLM_ARCH_SSE_BIT\n\n\ttemplate<typename genType>\n\tGLM_FUNC_QUALIFIER GLM_CONSTEXPR genType example_identity()\n\t{\n\t\treturn detail::init_gentype<genType, detail::genTypeTrait<genType>::GENTYPE>::identity();\n\t}\n\n\ttemplate <typename genType, typename valType>\n\tgenType load(valType const* Mem)\n\t{\n\t\t\n\t}\n\n\taligned_vec4 loadu(float const* Mem)\n\t{\n\t\taligned_vec4 Result;\n#\t\tif GLM_ARCH & GLM_ARCH_SSE_BIT\n\t\t\tResult.data = _mm_loadu_ps(Mem);\n#\t\telse\n\t\t\tResult[0] = *(Mem + 0);\n\t\t\tResult[1] = *(Mem + 1);\n\t\t\tResult[2] = *(Mem + 2);\n\t\t\tResult[3] = *(Mem + 3);\n#\t\tendif//GLM_ARCH & GLM_ARCH_SSE_BIT\n\t\treturn Result;\n\t}\n\n\taligned_vec4 loada(float const* Mem)\n\t{\n\t\taligned_vec4 Result;\n#\t\tif GLM_ARCH & GLM_ARCH_SSE_BIT\n\t\t\tResult.data = _mm_load_ps(Mem);\n#\t\telse\n\t\t\tResult[0] = *(Mem + 0);\n\t\t\tResult[1] = *(Mem + 1);\n\t\t\tResult[2] = *(Mem + 2);\n\t\t\tResult[3] = *(Mem + 3);\n#\t\tendif//GLM_ARCH & GLM_ARCH_SSE_BIT\n\t\treturn Result;\n\t}\n}//namespace glm\n\nint test_vec4_load()\n{\n\tint Error = 0;\n\n\tfloat Data[] = {1.f, 2.f, 3.f, 4.f};\n\tglm::aligned_vec4 const V = glm::loadu(Data);\n\tError += glm::all(glm::equal(V, glm::aligned_vec4(1.f, 2.f, 3.f, 4.f), glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n#endif\n*/\nint main()\n{\n\tint Error = 0;\n/*\n#\tif GLM_CONFIG_SIMD == GLM_ENABLE\n\t\tError += test_vec4_load();\n#\tendif\n*/\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_log_base.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/log_base.hpp>\n#include <glm/gtc/vec1.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/exponential.hpp>\n\nnamespace test_log\n{\n\tint run()\n\t{\n\t\tint Error = 0;\n\n\t\t{\n\t\t\tfloat A = glm::log(10.f, 2.0f);\n\t\t\tfloat B = glm::log2(10.f);\n\t\t\tError += glm::epsilonEqual(A, B, 0.00001f) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec1 A = glm::log(glm::vec1(10.f), glm::vec1(2.0f));\n\t\t\tglm::vec1 B = glm::log2(glm::vec1(10.f));\n\t\t\tError += glm::all(glm::epsilonEqual(A, B, glm::vec1(0.00001f))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec2 A = glm::log(glm::vec2(10.f), glm::vec2(2.0f));\n\t\t\tglm::vec2 B = glm::log2(glm::vec2(10.f));\n\t\t\tError += glm::all(glm::epsilonEqual(A, B, glm::vec2(0.00001f))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec3 A = glm::log(glm::vec3(10.f), glm::vec3(2.0f));\n\t\t\tglm::vec3 B = glm::log2(glm::vec3(10.f));\n\t\t\tError += glm::all(glm::epsilonEqual(A, B, glm::vec3(0.00001f))) ? 0 : 1;\n\t\t}\n\n\t\t{\n\t\t\tglm::vec4 A = glm::log(glm::vec4(10.f), glm::vec4(2.0f));\n\t\t\tglm::vec4 B = glm::log2(glm::vec4(10.f));\n\t\t\tError += glm::all(glm::epsilonEqual(A, B, glm::vec4(0.00001f))) ? 0 : 1;\n\t\t}\n\n\t\treturn Error;\n\t}\n}//namespace test_log\n\nint main()\n{\n\tint Error(0);\n\n\tError += test_log::run();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_matrix_cross_product.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/matrix_cross_product.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_matrix_decompose.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/matrix_decompose.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\tglm::mat4 Matrix(1);\n\n\tglm::vec3 Scale;\n\tglm::quat Orientation;\n\tglm::vec3 Translation;\n\tglm::vec3 Skew(1);\n\tglm::vec4 Perspective(1);\n\n\tglm::decompose(Matrix, Scale, Orientation, Translation, Skew, Perspective);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_matrix_factorisation.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/matrix_factorisation.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/gtc/epsilon.hpp>\n\ntemplate <glm::length_t C, glm::length_t R, typename T, glm::qualifier Q>\nint test_qr(glm::mat<C, R, T, Q> m)\n{\n\tint Error = 0;\n\n\tT const epsilon = static_cast<T>(1e-10);\n\n\tglm::mat<(C < R ? C : R), R, T, Q> q(-999);\n\tglm::mat<C, (C < R ? C : R), T, Q> r(-999);\n\n\tglm::qr_decompose(m, q, r);\n\n\t//Test if q*r really equals the input matrix\n\tglm::mat<C, R, T, Q> tm = q*r;\n\tglm::mat<C, R, T, Q> err = tm - m;\n\n\tfor (glm::length_t i = 0; i < C; i++)\n\tfor (glm::length_t j = 0; j < R; j++)\n\t\tError += glm::abs(err[i][j]) > epsilon ? 1 : 0;\n\n\t//Test if the columns of q are orthonormal\n\tfor (glm::length_t i = 0; i < (C < R ? C : R); i++)\n\t{\n\t\tError += (length(q[i]) - 1) > epsilon ? 1 : 0;\n\n\t\tfor (glm::length_t j = 0; j<i; j++)\n\t\t\tError += glm::abs(dot(q[i], q[j])) > epsilon ? 1 : 0;\n\t}\n\n\t//Test if the matrix r is upper triangular\n\tfor (glm::length_t i = 0; i < C; i++)\n\tfor (glm::length_t j = i + 1; j < (C < R ? C : R); j++)\n\t\tError += glm::epsilonEqual(r[i][j], static_cast<T>(0), glm::epsilon<T>()) ? 0 : 1;\n\n\treturn Error;\n}\n\ntemplate <glm::length_t C, glm::length_t R, typename T, glm::qualifier Q>\nint test_rq(glm::mat<C, R, T, Q> m)\n{\n\tint Error = 0;\n\n\tT const epsilon = static_cast<T>(1e-10);\n\n\tglm::mat<C, (C < R ? C : R), T, Q> q(-999);\n\tglm::mat<(C < R ? C : R), R, T, Q> r(-999);\n\n\tglm::rq_decompose(m, r, q);\n\n\t//Test if q*r really equals the input matrix\n\tglm::mat<C, R, T, Q> tm = r*q;\n\tglm::mat<C, R, T, Q> err = tm - m;\n\n\tfor (glm::length_t i = 0; i < C; i++)\n\tfor (glm::length_t j = 0; j < R; j++)\n\t\tError += glm::abs(err[i][j]) > epsilon ? 1 : 0;\n\n\t//Test if the rows of q are orthonormal\n\tglm::mat<(C < R ? C : R), C, T, Q> tq = transpose(q);\n\n\tfor (glm::length_t i = 0; i < (C < R ? C : R); i++)\n\t{\n\t\tError += (length(tq[i]) - 1) > epsilon ? 1 : 0;\n\n\t\tfor (glm::length_t j = 0; j<i; j++)\n\t\t\tError += glm::abs(dot(tq[i], tq[j])) > epsilon ? 1 : 0;\n\t}\n\n\t//Test if the matrix r is upper triangular\n\tfor (glm::length_t i = 0; i < (C < R ? C : R); i++)\n\tfor (glm::length_t j = R - (C < R ? C : R) + i + 1; j < R; j++)\n\t\tError += glm::epsilonEqual(r[i][j], static_cast<T>(0), glm::epsilon<T>()) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\t//Test QR square\n\tError += test_qr(glm::dmat3(12.0, 6.0, -4.0, -51.0, 167.0, 24.0, 4.0, -68.0, -41.0)) ? 1 : 0;\n\n\t//Test RQ square\n\tError += test_rq(glm::dmat3(12.0, 6.0, -4.0, -51.0, 167.0, 24.0, 4.0, -68.0, -41.0)) ? 1 : 0;\n\n\t//Test QR triangular 1\n\tError += test_qr(glm::dmat3x4(12.0, 6.0, -4.0, -51.0, 167.0, 24.0, 4.0, -68.0, -41.0, 7.0, 2.0, 15.0)) ? 1 : 0;\n\n\t//Test QR triangular 2\n\tError += test_qr(glm::dmat4x3(12.0, 6.0, -4.0, -51.0, 167.0, 24.0, 4.0, -68.0, -41.0, 7.0, 2.0, 15.0)) ? 1 : 0;\n\n\t//Test RQ triangular 1 : Fails at the triangular test\n\tError += test_rq(glm::dmat3x4(12.0, 6.0, -4.0, -51.0, 167.0, 24.0, 4.0, -68.0, -41.0, 7.0, 2.0, 15.0)) ? 1 : 0;\n\n\t//Test QR triangular 2\n\tError += test_rq(glm::dmat4x3(12.0, 6.0, -4.0, -51.0, 167.0, 24.0, 4.0, -68.0, -41.0, 7.0, 2.0, 15.0)) ? 1 : 0;\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_matrix_interpolation.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/quaternion.hpp>\n#include <glm/gtx/component_wise.hpp>\n#include <glm/gtx/matrix_interpolation.hpp>\n\n#include <iostream>\n#include <limits>\n#include <math.h>\n\n\nstatic int test_axisAngle()\n{\n\tint Error = 0;\n\n\tglm::mat4 m1(-0.9946f, 0.0f, -0.104531f, 0.0f,\n\t\t0.0f, 1.0f, 0.0f, 0.0f,\n\t\t0.104531f, 0.0f, -0.9946f, 0.0f,\n\t\t0.0f, 0.0f, 0.0f, 1.0f);\n\tglm::mat4 m2(-0.992624f, 0.0f, -0.121874f, 0.0f,\n\t\t0.0f, 1.0f, 0.0f, 0.0f,\n\t\t0.121874f, 0.0f, -0.992624f, 0.0f,\n\t\t0.0f, 0.0f, 0.0f, 1.0f);\n\n\tglm::mat4 const m1rot = glm::extractMatrixRotation(m1);\n\tglm::mat4 const dltRotation = m2 * glm::transpose(m1rot);\n\n\tglm::vec3 dltAxis(0.0f);\n\tfloat dltAngle = 0.0f;\n\tglm::axisAngle(dltRotation, dltAxis, dltAngle);\n\n\tstd::cout << \"dltAxis: (\" << dltAxis.x << \", \" << dltAxis.y << \", \" << dltAxis.z << \"), dltAngle: \" << dltAngle << std::endl;\n\n\tglm::quat q = glm::quat_cast(dltRotation);\n\tstd::cout << \"q: (\" << q.x << \", \" << q.y << \", \" << q.z << \", \" << q.w << \")\" << std::endl;\n\tfloat yaw = glm::yaw(q);\n\tstd::cout << \"Yaw: \" << yaw << std::endl;\n\n\treturn Error;\n}\n\ntemplate <class T>\nint testForAxisAngle(glm::vec<3, T, glm::defaultp> const axisTrue, T const angleTrue)\n{\n    T const eps = std::sqrt(std::numeric_limits<T>::epsilon());\n\n    glm::mat<4, 4, T, glm::defaultp> const matTrue = glm::axisAngleMatrix(axisTrue, angleTrue);\n\n    glm::vec<3, T, glm::defaultp> axis;\n    T angle;\n    glm::axisAngle(matTrue, axis, angle);\n    glm::mat<4, 4, T, glm::defaultp> const matRebuilt = glm::axisAngleMatrix(axis, angle);\n\n    glm::mat<4, 4, T, glm::defaultp> const errMat = matTrue - matRebuilt;\n    T const maxErr = glm::compMax(glm::vec<4, T, glm::defaultp>(\n            glm::compMax(glm::abs(errMat[0])),\n            glm::compMax(glm::abs(errMat[1])),\n            glm::compMax(glm::abs(errMat[2])),\n            glm::compMax(glm::abs(errMat[3]))\n        ));\n    \n    return maxErr < eps ? 0 : 1;\n}\n\nstatic int test_axisAngle2()\n{\n\tint Error = 0;\n    \n    Error += testForAxisAngle(glm::vec3(0.0f, 1.0f, 0.0f), 0.0f);\n    Error += testForAxisAngle(glm::vec3(0.358f, 0.0716f, 0.9309f), 0.00001f);\n    Error += testForAxisAngle(glm::vec3(1.0f, 0.0f, 0.0f), 0.0001f);\n    Error += testForAxisAngle(glm::vec3(0.0f, 0.0f, 1.0f), 0.001f);\n    Error += testForAxisAngle(glm::vec3(0.0f, 0.0f, 1.0f), 0.001f);\n    Error += testForAxisAngle(glm::vec3(0.0f, 1.0f, 0.0f), 0.005f);\n    Error += testForAxisAngle(glm::vec3(0.0f, 0.0f, 1.0f), 0.005f);\n    Error += testForAxisAngle(glm::vec3(0.358f, 0.0716f, 0.9309f), 0.03f);\n    Error += testForAxisAngle(glm::vec3(0.358f, 0.0716f, 0.9309f), 0.0003f);\n    Error += testForAxisAngle(glm::vec3(0.0f, 0.0f, 1.0f), 0.01f);\n    Error += testForAxisAngle(glm::dvec3(0.0f, 1.0f, 0.0f), 0.00005);\n    Error += testForAxisAngle(glm::dvec3(-1.0f, 0.0f, 0.0f), 0.000001);\n    Error += testForAxisAngle(glm::dvec3(0.7071f, 0.7071f, 0.0f), 0.5);\n    Error += testForAxisAngle(glm::dvec3(0.7071f, 0.0f, 0.7071f), 0.0002);\n    Error += testForAxisAngle(glm::dvec3(0.7071f, 0.0f, 0.7071f), 0.00002);\n    Error += testForAxisAngle(glm::dvec3(0.7071f, 0.0f, 0.7071f), 0.000002);\n    Error += testForAxisAngle(glm::dvec3(0.7071f, 0.0f, 0.7071f), 0.0000002);\n    Error += testForAxisAngle(glm::vec3(0.0f, 0.7071f, 0.7071f), 1.3f);\n    Error += testForAxisAngle(glm::vec3(0.0f, 0.7071f, 0.7071f), 6.3f);\n    Error += testForAxisAngle(glm::vec3(1.0f, 0.0f, 0.0f), -0.23456f);\n    Error += testForAxisAngle(glm::vec3(1.0f, 0.0f, 0.0f), glm::pi<float>());\n    Error += testForAxisAngle(glm::vec3(0.0f, 1.0f, 0.0f), -glm::pi<float>());\n    Error += testForAxisAngle(glm::vec3(0.358f, 0.0716f, 0.9309f), -glm::pi<float>());\n    Error += testForAxisAngle(glm::vec3(1.0f, 0.0f, 0.0f), glm::pi<float>() + 2e-6f);\n    Error += testForAxisAngle(glm::vec3(1.0f, 0.0f, 0.0f), glm::pi<float>() + 1e-4f);\n    Error += testForAxisAngle(glm::vec3(0.0f, 1.0f, 0.0f), -glm::pi<float>() + 1e-3f);\n    Error += testForAxisAngle(glm::vec3(0.358f, 0.0716f, 0.9309f), -glm::pi<float>() + 5e-3f);\n\n\treturn Error;\n}\n\nstatic int test_rotate()\n{\n\tglm::mat4 m2(1.0);\n\tfloat myAngle = 1.0f;\n\tm2 = glm::rotate(m2, myAngle, glm::vec3(1.0f, 0.0f, 0.0f));\n\tglm::vec3 m2Axis;\n\tfloat m2Angle;\n\tglm::axisAngle(m2, m2Axis, m2Angle);\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_axisAngle();\n\tError += test_axisAngle2();\n\tError += test_rotate();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_matrix_major_storage.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/matrix_major_storage.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_matrix_operation.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/glm.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtx/matrix_operation.hpp>\n#include <limits>\n\nint test_adjugate()\n{\n\tint Error = 0;\n\n\tconst float epsilon = std::numeric_limits<float>::epsilon();\n\n\t// mat2\n\tconst glm::mat2 m2(\n\t\t2, 3,\n\t\t1, 5\n\t);\n\n\tconst glm::mat2 eam2(\n\t\t5, -3,\n\t\t-1, 2\n\t);\n\n\tconst glm::mat2 am2 = glm::adjugate(m2);\n\n\tError += glm::all(glm::bvec2(\n\t\tglm::all(glm::epsilonEqual(am2[0], eam2[0], epsilon)),\n\t\tglm::all(glm::epsilonEqual(am2[1], eam2[1], epsilon))\n\t)) ? 0 : 1;\n\n\t// mat3\n\tconst glm::mat3 m3(\n\t\t2, 3, 3,\n\t\t1, 5, 4,\n\t\t4, 6, 8\n\t);\n\n\tconst glm::mat3 eam3(\n\t\t16, -6, -3,\n\t\t8, 4, -5,\n\t\t-14, 0, 7\n\t);\n\n\tconst glm::mat3 am3 = glm::adjugate(m3);\n\n\tError += glm::all(glm::bvec3(\n\t\tglm::all(glm::epsilonEqual(am3[0], eam3[0], epsilon)),\n\t\tglm::all(glm::epsilonEqual(am3[1], eam3[1], epsilon)),\n\t\tglm::all(glm::epsilonEqual(am3[2], eam3[2], epsilon))\n\t)) ? 0 : 1;\n\n\t// mat4\n\tconst glm::mat4 m4(\n\t\t2, 3, 3, 1,\n\t\t1, 5, 4, 3,\n\t\t4, 6, 8, 5,\n\t\t-2, -3, -3, 4\n\t);\n\n\tconst glm::mat4 eam4(\n\t\t97, -30, -15, 17,\n\t\t45, 20, -25, 5,\n\t\t-91, 0, 35, -21,\n\t\t14, 0, 0, 14\n\t);\n\n\tconst glm::mat4 am4 = glm::adjugate(m4);\n\n\tError += glm::all(glm::bvec4(\n\t\tglm::all(glm::epsilonEqual(am4[0], eam4[0], epsilon)),\n\t\tglm::all(glm::epsilonEqual(am4[1], eam4[1], epsilon)),\n\t\tglm::all(glm::epsilonEqual(am4[2], eam4[2], epsilon)),\n\t\tglm::all(glm::epsilonEqual(am4[3], eam4[3], epsilon))\n\t)) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_adjugate();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_matrix_query.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/matrix_query.hpp>\n\nint test_isNull()\n{\n\tint Error(0);\n\t\n\tbool TestA = glm::isNull(glm::mat4(0), 0.00001f);\n\tError += TestA ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_isIdentity()\n{\n\tint Error(0);\n\t\n\t{\n\t\tbool TestA = glm::isIdentity(glm::mat2(1), 0.00001f);\n\t\tError += TestA ? 0 : 1;\n\t}\n\t{\n\t\tbool TestA = glm::isIdentity(glm::mat3(1), 0.00001f);\n\t\tError += TestA ? 0 : 1;\n\t}\n\t{\n\t\tbool TestA = glm::isIdentity(glm::mat4(1), 0.00001f);\n\t\tError += TestA ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_isNormalized()\n{\n\tint Error(0);\n\n\tbool TestA = glm::isNormalized(glm::mat4(1), 0.00001f);\n\tError += TestA ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_isOrthogonal()\n{\n\tint Error(0);\n\n\tbool TestA = glm::isOrthogonal(glm::mat4(1), 0.00001f);\n\tError += TestA ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error(0);\n\n\tError += test_isNull();\n\tError += test_isIdentity();\n\tError += test_isNormalized();\n\tError += test_isOrthogonal();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_matrix_transform_2d.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/matrix_transform_2d.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_mixed_product.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////////////////////////\n// OpenGL Mathematics Copyright (c) 2005 - 2013 G-Truc Creation (www.g-truc.net)\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Created : 2013-10-25\n// Updated : 2013-10-25\n// Licence : This source is under MIT licence\n// File    : test/gtx/associated_min_max.cpp\n///////////////////////////////////////////////////////////////////////////////////////////////////\n\n#include <glm/gtc/type_precision.hpp>\n#include <glm/gtx/associated_min_max.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_norm.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/norm.hpp>\n\n\nint test_lMaxNorm()\n{\n\tint Error(0);\n\t\n\t{\n\t\tfloat norm = glm::lMaxNorm(glm::vec3(-1, -2, -3));\n\t\tError += glm::epsilonEqual(norm, 3.f, 0.00001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tfloat norm = glm::lMaxNorm(glm::vec3(2, 3, 1));\n\t\tError += glm::epsilonEqual(norm, 3.f, 0.00001f) ? 0 : 1;\n\t}\n  \n\treturn Error;\n}\n\nint test_lxNorm()\n{\n\tint Error(0);\n\n\t{\n\t\tunsigned int depth_1 = 1;\n\t\tfloat normA = glm::lxNorm(glm::vec3(2, 3, 1), depth_1);\n\t\tfloat normB = glm::l1Norm(glm::vec3(2, 3, 1));\n\t\tError += glm::epsilonEqual(normA, normB, 0.00001f) ? 0 : 1;\n\t\tError += glm::epsilonEqual(normA, 6.f, 0.00001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tunsigned int depth_1 = 1;\n\t\tfloat normA = glm::lxNorm(glm::vec3(-1, -2, -3), depth_1);\n\t\tfloat normB = glm::l1Norm(glm::vec3(-1, -2, -3));\n\t\tError += glm::epsilonEqual(normA, normB, 0.00001f) ? 0 : 1;\n\t\tError += glm::epsilonEqual(normA, 6.f, 0.00001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tunsigned int depth_2 = 2;\n\t\tfloat normA = glm::lxNorm(glm::vec3(2, 3, 1), depth_2);\n\t\tfloat normB = glm::l2Norm(glm::vec3(2, 3, 1));\n\t\tError += glm::epsilonEqual(normA, normB, 0.00001f) ? 0 : 1;\n\t\tError += glm::epsilonEqual(normA, 3.741657387f, 0.00001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tunsigned int depth_2 = 2;\n\t\tfloat normA = glm::lxNorm(glm::vec3(-1, -2, -3), depth_2);\n\t\tfloat normB = glm::l2Norm(glm::vec3(-1, -2, -3));\n\t\tError += glm::epsilonEqual(normA, normB, 0.00001f) ? 0 : 1;\n\t\tError += glm::epsilonEqual(normA, 3.741657387f, 0.00001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tunsigned int oddDepth = 3;\n\t\tfloat norm = glm::lxNorm(glm::vec3(2, 3, 1), oddDepth);\n\t\tError += glm::epsilonEqual(norm, 3.301927249f, 0.00001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tunsigned int oddDepth = 3;\n\t\tfloat norm = glm::lxNorm(glm::vec3(-1, -2, -3), oddDepth);\n\t\tError += glm::epsilonEqual(norm, 3.301927249f, 0.00001f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error(0);\n\n\tError += test_lMaxNorm();\n\tError += test_lxNorm();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_normal.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/normal.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_normalize_dot.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/normalize_dot.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_number_precision.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/number_precision.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_optimum_pow.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/optimum_pow.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_orthonormalize.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/orthonormalize.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_pca.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/glm.hpp>\n#include <glm/gtx/pca.hpp>\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtx/string_cast.hpp>\n\n#include <cstdio>\n#include <vector>\n#if GLM_HAS_CXX11_STL == 1\n#include <random>\n#endif\n\ntemplate<typename T>\nT myEpsilon();\ntemplate<>\nGLM_INLINE GLM_CONSTEXPR float myEpsilon<float>() { return 0.00001f; }\ntemplate<>\nGLM_INLINE GLM_CONSTEXPR double myEpsilon<double>() { return 0.000001; }\n\ntemplate<glm::length_t D, typename T, glm::qualifier Q>\nbool vectorEpsilonEqual(glm::vec<D, T, Q> const& a, glm::vec<D, T, Q> const& b, T epsilon)\n{\n\tfor (int c = 0; c < D; ++c)\n\t\tif (!glm::epsilonEqual(a[c], b[c], epsilon))\n\t\t{\n\t\t\tfprintf(stderr, \"failing vectorEpsilonEqual: [%d] %lf != %lf (~%lf)\\n\",\n\t\t\t\tc,\n\t\t\t\tstatic_cast<double>(a[c]),\n\t\t\t\tstatic_cast<double>(b[c]),\n\t\t\t\tstatic_cast<double>(epsilon)\n\t\t\t);\n\t\t\treturn false;\n\t\t}\n\treturn true;\n}\n\ntemplate<glm::length_t D, typename T, glm::qualifier Q>\nbool matrixEpsilonEqual(glm::mat<D, D, T, Q> const& a, glm::mat<D, D, T, Q> const& b, T epsilon)\n{\n\tfor (int c = 0; c < D; ++c)\n\t\tfor (int r = 0; r < D; ++r)\n\t\t\tif (!glm::epsilonEqual(a[c][r], b[c][r], epsilon))\n\t\t\t{\n\t\t\t\tfprintf(stderr, \"failing vectorEpsilonEqual: [%d][%d] %lf != %lf (~%lf)\\n\",\n\t\t\t\t\tc, r,\n\t\t\t\t\tstatic_cast<double>(a[c][r]),\n\t\t\t\t\tstatic_cast<double>(b[c][r]),\n\t\t\t\t\tstatic_cast<double>(epsilon)\n\t\t\t\t);\n\t\t\t\treturn false;\n\t\t\t}\n\treturn true;\n}\n\ntemplate<typename T>\nGLM_INLINE bool sameSign(T const& a, T const& b)\n{\n\treturn ((a >= 0) && (b >= 0)) || ((a < 0) && (b < 0));\n}\n\ntemplate<typename T>\nT failReport(T line)\n{\n\tfprintf(stderr, \"Failed in line %d\\n\", static_cast<int>(line));\n\treturn line;\n}\n\n// Test data: 1AGA 'agarose double helix'\n// https://www.rcsb.org/structure/1aga\n// The fourth coordinate is randomized\nnamespace _1aga\n{\n\n\t// Fills `outTestData` with hard-coded atom positions from 1AGA\n\t// The fourth coordinate is randomized\n\ttemplate<typename vec>\n\tvoid fillTestData(std::vector<vec>& outTestData)\n\t{\n\t\t// x,y,z coordinates copied from RCSB PDB file of 1AGA\n\t\t// w coordinate randomized with standard normal distribution\n\t\tstatic const double _1aga[] = {\n\t\t\t3.219, -0.637, 19.462, 2.286,\n\t\t\t4.519, 0.024, 18.980, -0.828,\n\t\t\t4.163, 1.425, 18.481, -0.810,\n\t\t\t3.190, 1.341, 17.330, -0.170,\n\t\t\t1.962, 0.991, 18.165, 0.816,\n\t\t\t2.093, 1.952, 19.331, 0.276,\n\t\t\t5.119, -0.701, 17.908, -0.490,\n\t\t\t3.517, 2.147, 19.514, -0.207,\n\t\t\t2.970, 2.609, 16.719, 0.552,\n\t\t\t2.107, -0.398, 18.564, 0.403,\n\t\t\t2.847, 2.618, 15.335, 0.315,\n\t\t\t1.457, 3.124, 14.979, 0.683,\n\t\t\t1.316, 3.291, 13.473, 0.446,\n\t\t\t2.447, 4.155, 12.931, 1.324,\n\t\t\t3.795, 3.614, 13.394, 0.112,\n\t\t\t4.956, 4.494, 12.982, 0.253,\n\t\t\t0.483, 2.217, 15.479, 1.316,\n\t\t\t0.021, 3.962, 13.166, 1.522,\n\t\t\t2.311, 5.497, 13.395, 0.248,\n\t\t\t3.830, 3.522, 14.827, 0.591,\n\t\t\t5.150, 4.461, 11.576, 0.635,\n\t\t\t-1.057, 3.106, 13.132, 0.191,\n\t\t\t-2.280, 3.902, 12.650, 1.135,\n\t\t\t-3.316, 2.893, 12.151, 0.794,\n\t\t\t-2.756, 2.092, 11.000, 0.720,\n\t\t\t-1.839, 1.204, 11.835, -1.172,\n\t\t\t-2.737, 0.837, 13.001, -0.313,\n\t\t\t-1.952, 4.784, 11.578, 2.082,\n\t\t\t-3.617, 1.972, 13.184, 0.653,\n\t\t\t-3.744, 1.267, 10.389, -0.413,\n\t\t\t-0.709, 2.024, 12.234, -1.747,\n\t\t\t-3.690, 1.156, 9.005, -1.275,\n\t\t\t-3.434, -0.300, 8.649, 0.441,\n\t\t\t-3.508, -0.506, 7.143, 0.237,\n\t\t\t-4.822, 0.042, 6.601, -2.856,\n\t\t\t-5.027, 1.480, 7.064, 0.985,\n\t\t\t-6.370, 2.045, 6.652, 0.915,\n\t\t\t-2.162, -0.690, 9.149, 1.100,\n\t\t\t-3.442, -1.963, 6.836, -0.081,\n\t\t\t-5.916, -0.747, 7.065, -2.345,\n\t\t\t-4.965, 1.556, 8.497, 0.504,\n\t\t\t-6.439, 2.230, 5.246, 1.451,\n\t\t\t-2.161, -2.469, 6.802, -1.171,\n\t\t\t-2.239, -3.925, 6.320, -1.434,\n\t\t\t-0.847, -4.318, 5.821, 0.098,\n\t\t\t-0.434, -3.433, 4.670, -1.446,\n\t\t\t-0.123, -2.195, 5.505, 0.182,\n\t\t\t0.644, -2.789, 6.671, 0.865,\n\t\t\t-3.167, -4.083, 5.248, -0.098,\n\t\t\t0.101, -4.119, 6.854, -0.001,\n\t\t\t0.775, -3.876, 4.059, 1.061,\n\t\t\t-1.398, -1.625, 5.904, 0.230,\n\t\t\t0.844, -3.774, 2.675, 1.313,\n\t\t\t1.977, -2.824, 2.319, -0.112,\n\t\t\t2.192, -2.785, 0.813, -0.981,\n\t\t\t2.375, -4.197, 0.271, -0.355,\n\t\t\t1.232, -5.093, 0.734, 0.632,\n\t\t\t1.414, -6.539, 0.322, 0.576,\n\t\t\t1.678, -1.527, 2.819, -1.187,\n\t\t\t3.421, -1.999, 0.496, -1.770,\n\t\t\t3.605, -4.750, 0.735, 1.099,\n\t\t\t1.135, -5.078, 2.167, 0.854,\n\t\t\t1.289, -6.691, -1.084, -0.487,\n\t\t\t-1.057, 3.106, 22.602, -1.297,\n\t\t\t-2.280, 3.902, 22.120, 0.376,\n\t\t\t-3.316, 2.893, 21.621, 0.932,\n\t\t\t-2.756, 2.092, 20.470, 1.680,\n\t\t\t-1.839, 1.204, 21.305, 0.615,\n\t\t\t-2.737, 0.837, 22.471, 0.899,\n\t\t\t-1.952, 4.784, 21.048, -0.521,\n\t\t\t-3.617, 1.972, 22.654, 0.133,\n\t\t\t-3.744, 1.267, 19.859, 0.081,\n\t\t\t-0.709, 2.024, 21.704, 1.420,\n\t\t\t-3.690, 1.156, 18.475, -0.850,\n\t\t\t-3.434, -0.300, 18.119, -0.249,\n\t\t\t-3.508, -0.506, 16.613, 1.434,\n\t\t\t-4.822, 0.042, 16.071, -2.466,\n\t\t\t-5.027, 1.480, 16.534, -1.045,\n\t\t\t-6.370, 2.045, 16.122, 1.707,\n\t\t\t-2.162, -0.690, 18.619, -2.023,\n\t\t\t-3.442, -1.963, 16.336, -0.304,\n\t\t\t-5.916, -0.747, 16.535, 0.979,\n\t\t\t-4.965, 1.556, 17.967, -1.165,\n\t\t\t-6.439, 2.230, 14.716, 0.929,\n\t\t\t-2.161, -2.469, 16.302, -0.234,\n\t\t\t-2.239, -3.925, 15.820, -0.228,\n\t\t\t-0.847, -4.318, 15.321, 1.844,\n\t\t\t-0.434, -3.433, 14.170, 1.132,\n\t\t\t-0.123, -2.195, 15.005, 0.211,\n\t\t\t0.644, -2.789, 16.171, -0.632,\n\t\t\t-3.167, -4.083, 14.748, -0.519,\n\t\t\t0.101, -4.119, 16.354, 0.173,\n\t\t\t0.775, -3.876, 13.559, 1.243,\n\t\t\t-1.398, -1.625, 15.404, -0.187,\n\t\t\t0.844, -3.774, 12.175, -1.332,\n\t\t\t1.977, -2.824, 11.819, -1.616,\n\t\t\t2.192, -2.785, 10.313, 1.320,\n\t\t\t2.375, -4.197, 9.771, 0.237,\n\t\t\t1.232, -5.093, 10.234, 0.851,\n\t\t\t1.414, -6.539, 9.822, 1.816,\n\t\t\t1.678, -1.527, 12.319, -1.657,\n\t\t\t3.421, -1.999, 10.036, 1.559,\n\t\t\t3.605, -4.750, 10.235, 0.831,\n\t\t\t1.135, -5.078, 11.667, 0.060,\n\t\t\t1.289, -6.691, 8.416, 1.066,\n\t\t\t3.219, -0.637, 10.002, 2.111,\n\t\t\t4.519, 0.024, 9.520, -0.874,\n\t\t\t4.163, 1.425, 9.021, -1.012,\n\t\t\t3.190, 1.341, 7.870, -0.250,\n\t\t\t1.962, 0.991, 8.705, -1.359,\n\t\t\t2.093, 1.952, 9.871, -0.126,\n\t\t\t5.119, -0.701, 8.448, 0.995,\n\t\t\t3.517, 2.147, 10.054, 0.941,\n\t\t\t2.970, 2.609, 7.259, -0.562,\n\t\t\t2.107, -0.398, 9.104, -0.038,\n\t\t\t2.847, 2.618, 5.875, 0.398,\n\t\t\t1.457, 3.124, 5.519, 0.481,\n\t\t\t1.316, 3.291, 4.013, -0.187,\n\t\t\t2.447, 4.155, 3.471, -0.429,\n\t\t\t3.795, 3.614, 3.934, -0.432,\n\t\t\t4.956, 4.494, 3.522, -0.788,\n\t\t\t0.483, 2.217, 6.019, -0.923,\n\t\t\t0.021, 3.962, 3.636, -0.316,\n\t\t\t2.311, 5.497, 3.935, -1.917,\n\t\t\t3.830, 3.522, 5.367, -0.302,\n\t\t\t5.150, 4.461, 2.116, -1.615\n\t\t};\n\t\tstatic const glm::length_t _1agaSize = sizeof(_1aga) / (4 * sizeof(double));\n\n\t\toutTestData.resize(_1agaSize);\n\t\tfor(glm::length_t i = 0; i < _1agaSize; ++i)\n\t\t\tfor(glm::length_t d = 0; d < static_cast<glm::length_t>(vec::length()); ++d)\n\t\t\t\toutTestData[i][d] = static_cast<typename vec::value_type>(_1aga[i * 4 + d]);\n\t}\n\n\t// All reference values computed separately using symbolic precision\n\t// https://github.com/sgrottel/exp-pca-precision\n\t// This applies to all functions named: `_1aga::expected*()`\n\n\tGLM_INLINE glm::dmat4 const& expectedCovarData()\n\t{\n\t\tstatic const glm::dmat4 covar4x4d(\n\t\t\t9.62434068027210898322, -0.00006657369614512471, -4.29321376568405099761, 0.01879374187452758846,\n\t\t\t-0.00006657369614512471, 9.62443937868480681175, 5.35113872637944076871, -0.11569259145880574080,\n\t\t\t-4.29321376568405099761, 5.35113872637944076871, 35.62848549634668415820, 0.90874239254220201545,\n\t\t\t0.01879374187452758846, -0.11569259145880574080, 0.90874239254220201545, 1.09705971856890904803\n\t\t);\n\t\treturn covar4x4d;\n\t}\n\n\ttemplate<glm::length_t D>\n\tGLM_INLINE glm::vec<D, double, glm::defaultp> const& expectedEigenvalues();\n\ttemplate<>\n\tGLM_INLINE glm::dvec2 const& expectedEigenvalues<2>()\n\t{\n\t\tstatic const glm::dvec2 evals2(\n\t\t\t9.62447289926297399961763301774251330057894539467032275382255,\n\t\t\t9.62430715969394210015560961264297422776572580714373620309355\n\t\t);\n\t\treturn evals2;\n\t}\n\ttemplate<>\n\tGLM_INLINE glm::dvec3 const& expectedEigenvalues<3>()\n\t{\n\t\tstatic const glm::dvec3 evals3(\n\t\t\t\t37.3274494274683425233695502581182052836449738530676689472257,\n\t\t\t\t9.62431434161498823505729817436585077939509766554969096873168,\n\t\t\t\t7.92550178622027216422369326567668971675332732240052872097887\n\t\t\t);\n\t\treturn evals3;\n\t}\n\ttemplate<>\n\tGLM_INLINE glm::dvec4 const& expectedEigenvalues<4>()\n\t{\n\t\tstatic const glm::dvec4 evals4(\n\t\t\t\t37.3477389918792213596879452204499702406947817221901007885630,\n\t\t\t\t9.62470688921105696017807313860277172063600080413412567999700,\n\t\t\t\t7.94017075281634999342344275928070533134615133171969063657713,\n\t\t\t\t1.06170863996588365446060186982477896078741484440002343404155\n\t\t\t);\n\t\treturn evals4;\n\t}\n\n\ttemplate<glm::length_t D>\n\tGLM_INLINE glm::mat<D, D, double, glm::defaultp> const& expectedEigenvectors();\n\ttemplate<>\n\tGLM_INLINE glm::dmat2 const& expectedEigenvectors<2>()\n\t{\n\t\tstatic const glm::dmat2 evecs2(\n\t\t\tglm::dvec2(\n\t\t\t\t-0.503510847492551904906870957742619139443409162857537237123308,\n\t\t\t\t1\n\t\t\t),\n\t\t\tglm::dvec2(\n\t\t\t\t1.98605453086051402895741763848787613048533838388005162794043,\n\t\t\t\t1\n\t\t\t)\n\t\t);\n\t\treturn evecs2;\n\t}\n\ttemplate<>\n\tGLM_INLINE glm::dmat3 const& expectedEigenvectors<3>()\n\t{\n\t\tstatic const glm::dmat3 evecs3(\n\t\t\tglm::dvec3(\n\t\t\t\t-0.154972738414395866005286433008304444294405085038689821864654,\n\t\t\t\t0.193161285869815165989799191097521722568079378840201629578695,\n\t\t\t\t1\n\t\t\t),\n\t\t\tglm::dvec3(\n\t\t\t\t-158565.112775416943154745839952575022429933119522746586149868,\n\t\t\t\t-127221.506282351944358932458687410410814983610301927832439675,\n\t\t\t\t1\n\t\t\t),\n\t\t\tglm::dvec3(\n\t\t\t\t2.52702248596556806145700361724323960543858113426446460406536,\n\t\t\t\t-3.14959802931313870497377546974185300816008580801457419079412,\n\t\t\t\t1\n\t\t\t)\n\t\t);\n\t\treturn evecs3;\n\t}\n\ttemplate<>\n\tGLM_INLINE glm::dmat4 const& expectedEigenvectors<4>()\n\t{\n\t\tstatic const glm::dmat4 evecs4(\n\t\t\tglm::dvec4(\n\t\t\t\t-6.35322390281037045217295803597357821705371650876122113027264,\n\t\t\t\t7.91546394153385394517767054617789939529794642646629201212056,\n\t\t\t\t41.0301543819240679808549819457450130787045236815736490549663,\n\t\t\t\t1\n\t\t\t),\n\t\t\tglm::dvec4(\n\t\t\t\t-114.622418941087829756565311692197154422302604224781253861297,\n\t\t\t\t-92.2070185807065289900871215218752013659402949497379896153118,\n\t\t\t\t0.0155846091025912430932734548933329458404665760587569100867246,\n\t\t\t\t1\n\t\t\t),\n\t\t\tglm::dvec4(\n\t\t\t\t13.1771887761559019483954743159026938257325190511642952175789,\n\t\t\t\t-16.3688257459634877666638419310116970616615816436949741766895,\n\t\t\t\t5.17386502341472097227408249233288958059579189051394773143190,\n\t\t\t\t1\n\t\t\t),\n\t\t\tglm::dvec4(\n\t\t\t\t-0.0192777078948229800494895064532553117703859768210647632969276,\n\t\t\t\t0.0348034950916108873629241563077465542944938906271231198634442,\n\t\t\t\t-0.0340715609308469289267379681032545422644143611273049912226126,\n\t\t\t\t1\n\t\t\t)\n\t\t);\n\t\treturn evecs4;\n\t}\n\n} // namespace _1aga\n\n// Compute center of gravity\ntemplate<typename vec>\nvec computeCenter(const std::vector<vec>& testData)\n{\n\tdouble c[4];\n\tstd::fill(c, c + vec::length(), 0.0);\n\n\ttypename std::vector<vec>::const_iterator e = testData.end();\n\tfor(typename std::vector<vec>::const_iterator i = testData.begin(); i != e; ++i)\n\t\tfor(glm::length_t d = 0; d < static_cast<glm::length_t>(vec::length()); ++d)\n\t\t\tc[d] += static_cast<double>((*i)[d]);\n\n\tvec cVec(0);\n\tfor(glm::length_t d = 0; d < static_cast<glm::length_t>(vec::length()); ++d)\n\t\tcVec[d] = static_cast<typename vec::value_type>(c[d] / static_cast<double>(testData.size()));\n\treturn cVec;\n}\n\n// Test sorting of Eigenvalue&Eigenvector lists. Use exhaustive search.\ntemplate<glm::length_t D, typename T, glm::qualifier Q>\nint testEigenvalueSort()\n{\n\t// Test input data: four arbitrary values\n\tstatic const glm::vec<D, T, Q> refVal(\n\t\tglm::vec<4, T, Q>(\n\t\t\t10, 8, 6, 4\n\t\t)\n\t);\n\t// Test input data: four arbitrary vectors, which can be matched to the above values\n\tstatic const glm::mat<D, D, T, Q> refVec(\n\t\tglm::mat<4, 4, T, Q>(\n\t\t\t10, 20, 5, 40,\n\t\t\t8, 16, 4, 32,\n\t\t\t6, 12, 3, 24,\n\t\t\t4, 8, 2, 16\n\t\t)\n\t);\n\t// Permutations of test input data for exhaustive check, based on `D` (1 <= D <= 4)\n\tstatic const int permutationCount[] = {\n\t\t0,\n\t\t1,\n\t\t2,\n\t\t6,\n\t\t24\n\t};\n\t// The permutations t perform, based on `D` (1 <= D <= 4)\n\tstatic const glm::ivec4 permutation[] = {\n\t\tglm::ivec4(0, 1, 2, 3),\n\t\tglm::ivec4(1, 0, 2, 3), // last for D = 2\n\t\tglm::ivec4(0, 2, 1, 3),\n\t\tglm::ivec4(1, 2, 0, 3),\n\t\tglm::ivec4(2, 0, 1, 3),\n\t\tglm::ivec4(2, 1, 0, 3), // last for D = 3\n\t\tglm::ivec4(0, 1, 3, 2),\n\t\tglm::ivec4(1, 0, 3, 2),\n\t\tglm::ivec4(0, 2, 3, 1),\n\t\tglm::ivec4(1, 2, 3, 0),\n\t\tglm::ivec4(2, 0, 3, 1),\n\t\tglm::ivec4(2, 1, 3, 0),\n\t\tglm::ivec4(0, 3, 1, 2),\n\t\tglm::ivec4(1, 3, 0, 2),\n\t\tglm::ivec4(0, 3, 2, 1),\n\t\tglm::ivec4(1, 3, 2, 0),\n\t\tglm::ivec4(2, 3, 0, 1),\n\t\tglm::ivec4(2, 3, 1, 0),\n\t\tglm::ivec4(3, 0, 1, 2),\n\t\tglm::ivec4(3, 1, 0, 2),\n\t\tglm::ivec4(3, 0, 2, 1),\n\t\tglm::ivec4(3, 1, 2, 0),\n\t\tglm::ivec4(3, 2, 0, 1),\n\t\tglm::ivec4(3, 2, 1, 0)  // last for D = 4\n\t};\n\n\t// initial sanity check\n\tif(!vectorEpsilonEqual(refVal, refVal, myEpsilon<T>()))\n\t\treturn failReport(__LINE__);\n\tif(!matrixEpsilonEqual(refVec, refVec, myEpsilon<T>()))\n\t\treturn failReport(__LINE__);\n\n\t// Exhaustive search through all permutations\n\tfor(int p = 0; p < permutationCount[D]; ++p)\n\t{\n\t\tglm::vec<D, T, Q> testVal;\n\t\tglm::mat<D, D, T, Q> testVec;\n\t\tfor(int i = 0; i < D; ++i)\n\t\t{\n\t\t\ttestVal[i] = refVal[permutation[p][i]];\n\t\t\ttestVec[i] = refVec[permutation[p][i]];\n\t\t}\n\n\t\tglm::sortEigenvalues(testVal, testVec);\n\n\t\tif (!vectorEpsilonEqual(testVal, refVal, myEpsilon<T>()))\n\t\t\treturn failReport(__LINE__);\n\t\tif (!matrixEpsilonEqual(testVec, refVec, myEpsilon<T>()))\n\t\t\treturn failReport(__LINE__);\n\t}\n\n\treturn 0;\n}\n\n// Test covariance matrix creation functions\ntemplate<glm::length_t D, typename T, glm::qualifier Q>\nint testCovar(\n#if GLM_HAS_CXX11_STL == 1\n\tglm::length_t dataSize, unsigned int randomEngineSeed\n#else // GLM_HAS_CXX11_STL == 1\n\tglm::length_t, unsigned int\n#endif // GLM_HAS_CXX11_STL == 1\n)\n{\n\ttypedef glm::vec<D, T, Q> vec;\n\ttypedef glm::mat<D, D, T, Q> mat;\n\n\t// #1: test expected result with fixed data set\n\tstd::vector<vec> testData;\n\t_1aga::fillTestData(testData);\n\n\t// compute center of gravity\n\tvec center = computeCenter(testData);\n\n\tmat covarMat = glm::computeCovarianceMatrix(testData.data(), testData.size(), center);\n\tif(!matrixEpsilonEqual(covarMat, mat(_1aga::expectedCovarData()), myEpsilon<T>()))\n\t{\n\t\tfprintf(stderr, \"Reconstructed covarMat:\\n%s\\n\", glm::to_string(covarMat).c_str());\n\t\treturn failReport(__LINE__);\n\t}\n\n\t// #2: test function variant consitency with random data\n#if GLM_HAS_CXX11_STL == 1\n\tstd::default_random_engine rndEng(randomEngineSeed);\n\tstd::normal_distribution<T> normalDist;\n\ttestData.resize(dataSize);\n\t// some common offset of all data\n\tT offset[D];\n\tfor(glm::length_t d = 0; d < D; ++d)\n\t\toffset[d] = normalDist(rndEng);\n\t// init data\n\tfor(glm::length_t i = 0; i < dataSize; ++i)\n\t\tfor(glm::length_t d = 0; d < D; ++d)\n\t\t\ttestData[i][d] = offset[d] + normalDist(rndEng);\n\tcenter = computeCenter(testData);\n\n\tstd::vector<vec> centeredTestData;\n\tcenteredTestData.reserve(testData.size());\n\ttypename std::vector<vec>::const_iterator e = testData.end();\n\tfor(typename std::vector<vec>::const_iterator i = testData.begin(); i != e; ++i)\n\t\tcenteredTestData.push_back((*i) - center);\n\n\tmat c1 = glm::computeCovarianceMatrix(centeredTestData.data(), centeredTestData.size());\n\tmat c2 = glm::computeCovarianceMatrix<D, T, Q>(centeredTestData.begin(), centeredTestData.end());\n\tmat c3 = glm::computeCovarianceMatrix(testData.data(), testData.size(), center);\n\tmat c4 = glm::computeCovarianceMatrix<D, T, Q>(testData.rbegin(), testData.rend(), center);\n\n\tif(!matrixEpsilonEqual(c1, c2, myEpsilon<T>()))\n\t\treturn failReport(__LINE__);\n\tif(!matrixEpsilonEqual(c1, c3, myEpsilon<T>()))\n\t\treturn failReport(__LINE__);\n\tif(!matrixEpsilonEqual(c1, c4, myEpsilon<T>()))\n\t\treturn failReport(__LINE__);\n#endif // GLM_HAS_CXX11_STL == 1\n\treturn 0;\n}\n\n// Computes eigenvalues and eigenvectors from well-known covariance matrix\ntemplate<glm::length_t D, typename T, glm::qualifier Q>\nint testEigenvectors(T epsilon)\n{\n\ttypedef glm::vec<D, T, Q> vec;\n\ttypedef glm::mat<D, D, T, Q> mat;\n\n\t// test expected result with fixed data set\n\tstd::vector<vec> testData;\n\tmat covarMat(_1aga::expectedCovarData());\n\n\tvec eigenvalues;\n\tmat eigenvectors;\n\tunsigned int c = glm::findEigenvaluesSymReal(covarMat, eigenvalues, eigenvectors);\n\tif(c != D)\n\t\treturn failReport(__LINE__);\n\tglm::sortEigenvalues(eigenvalues, eigenvectors);\n\n\tif (!vectorEpsilonEqual(eigenvalues, vec(_1aga::expectedEigenvalues<D>()), epsilon))\n\t\treturn failReport(__LINE__);\n\n\tfor (int i = 0; i < D; ++i)\n\t{\n\t\tvec act = glm::normalize(eigenvectors[i]);\n\t\tvec exp = glm::normalize(_1aga::expectedEigenvectors<D>()[i]);\n\t\tif (!sameSign(act[0], exp[0])) exp = -exp;\n\t\tif (!vectorEpsilonEqual(act, exp, epsilon))\n\t\t\treturn failReport(__LINE__);\n\t}\n\n\treturn 0;\n}\n\n// A simple small smoke test:\n// - a uniformly sampled block\n// - reconstruct main axes\n// - check order of eigenvalues equals order of extends of block in direction of main axes\nint smokeTest()\n{\n\tusing glm::vec3;\n\tusing glm::mat3;\n\tstd::vector<vec3> pts;\n\tpts.reserve(11 * 15 * 7);\n\n\tfor(int x = -5; x <= 5; ++x)\n\t\tfor(int y = -7; y <= 7; ++y)\n\t\t\tfor(int z = -3; z <= 3; ++z)\n\t\t\t\tpts.push_back(vec3(x, y, z));\n\n\tmat3 covar = glm::computeCovarianceMatrix(pts.data(), pts.size());\n\tmat3 eVec;\n\tvec3 eVal;\n\tint eCnt = glm::findEigenvaluesSymReal(covar, eVal, eVec);\n\tif(eCnt != 3)\n\t\treturn failReport(__LINE__);\n\n\t// sort eVec by decending eVal\n\tif(eVal[0] < eVal[1])\n\t{\n\t\tstd::swap(eVal[0], eVal[1]);\n\t\tstd::swap(eVec[0], eVec[1]);\n\t}\n\tif(eVal[0] < eVal[2])\n\t{\n\t\tstd::swap(eVal[0], eVal[2]);\n\t\tstd::swap(eVec[0], eVec[2]);\n\t}\n\tif(eVal[1] < eVal[2])\n\t{\n\t\tstd::swap(eVal[1], eVal[2]);\n\t\tstd::swap(eVec[1], eVec[2]);\n\t}\n\n\tif(!vectorEpsilonEqual(glm::abs(eVec[0]), vec3(0, 1, 0), myEpsilon<float>()))\n\t\treturn failReport(__LINE__);\n\tif(!vectorEpsilonEqual(glm::abs(eVec[1]), vec3(1, 0, 0), myEpsilon<float>()))\n\t\treturn failReport(__LINE__);\n\tif(!vectorEpsilonEqual(glm::abs(eVec[2]), vec3(0, 0, 1), myEpsilon<float>()))\n\t\treturn failReport(__LINE__);\n\n\treturn 0;\n}\n\n#if GLM_HAS_CXX11_STL == 1\nint rndTest(unsigned int randomEngineSeed)\n{\n\tstd::default_random_engine rndEng(randomEngineSeed);\n\tstd::normal_distribution<double> normalDist;\n\n\t// construct orthonormal system\n\tglm::dvec3 x(normalDist(rndEng), normalDist(rndEng), normalDist(rndEng));\n\tdouble l = glm::length(x);\n\twhile(l < myEpsilon<double>())\n\t\tx = glm::dvec3(normalDist(rndEng), normalDist(rndEng), normalDist(rndEng));\n\tx = glm::normalize(x);\n\tglm::dvec3 y(normalDist(rndEng), normalDist(rndEng), normalDist(rndEng));\n\tl = glm::length(y);\n\twhile(l < myEpsilon<double>())\n\t\ty = glm::dvec3(normalDist(rndEng), normalDist(rndEng), normalDist(rndEng));\n\twhile(glm::abs(glm::dot(x, y)) < myEpsilon<double>())\n\t{\n\t\ty = glm::dvec3(normalDist(rndEng), normalDist(rndEng), normalDist(rndEng));\n\t\twhile(l < myEpsilon<double>())\n\t\t\ty = glm::dvec3(normalDist(rndEng), normalDist(rndEng), normalDist(rndEng));\n\t}\n\ty = glm::normalize(y);\n\tglm::dvec3 z = glm::normalize(glm::cross(x, y));\n\ty = glm::normalize(glm::cross(z, x));\n\n\t// generate input point data\n\tstd::vector<glm::dvec3> ptData;\n\tstatic const int pattern[] = {\n\t\t8, 0, 0,\n\t\t4, 1, 2,\n\t\t0, 2, 0,\n\t\t0, 0, 4\n\t};\n\tglm::dvec3 offset(normalDist(rndEng), normalDist(rndEng), normalDist(rndEng));\n\tfor(int p = 0; p < 4; ++p)\n\t\tfor(int xs = 1; xs >= -1; xs -= 2)\n\t\t\tfor(int ys = 1; ys >= -1; ys -= 2)\n\t\t\t\tfor(int zs = 1; zs >= -1; zs -= 2)\n\t\t\t\t\tptData.push_back(\n\t\t\t\t\t\toffset\n\t\t\t\t\t\t+ x * static_cast<double>(pattern[p * 3 + 0] * xs)\n\t\t\t\t\t\t+ y * static_cast<double>(pattern[p * 3 + 1] * ys)\n\t\t\t\t\t\t+ z * static_cast<double>(pattern[p * 3 + 2] * zs));\n\n\t// perform PCA:\n\tglm::dvec3 center = computeCenter(ptData);\n\tglm::dmat3 covarMat = glm::computeCovarianceMatrix(ptData.data(), ptData.size(), center);\n\tglm::dvec3 evals;\n\tglm::dmat3 evecs;\n\tint evcnt = glm::findEigenvaluesSymReal(covarMat, evals, evecs);\n\tif(evcnt != 3)\n\t\treturn failReport(__LINE__);\n\tglm::sortEigenvalues(evals, evecs);\n\n\tif (!sameSign(evecs[0][0], x[0])) evecs[0] = -evecs[0];\n\tif(!vectorEpsilonEqual(x, evecs[0], myEpsilon<double>()))\n\t\treturn failReport(__LINE__);\n\tif (!sameSign(evecs[2][0], y[0])) evecs[2] = -evecs[2];\n\tif (!vectorEpsilonEqual(y, evecs[2], myEpsilon<double>()))\n\t\treturn failReport(__LINE__);\n\tif (!sameSign(evecs[1][0], z[0])) evecs[1] = -evecs[1];\n\tif (!vectorEpsilonEqual(z, evecs[1], myEpsilon<double>()))\n\t\treturn failReport(__LINE__);\n\n\treturn 0;\n}\n#endif // GLM_HAS_CXX11_STL == 1\n\nint main()\n{\n\tint error(0);\n\n\t// A small smoke test to fail early with most problems\n\tif(smokeTest())\n\t\treturn failReport(__LINE__);\n\n\t// test sorting utility.\n\tif(testEigenvalueSort<2, float, glm::defaultp>() != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvalueSort<2, double, glm::defaultp>() != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvalueSort<3, float, glm::defaultp>() != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvalueSort<3, double, glm::defaultp>() != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvalueSort<4, float, glm::defaultp>() != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvalueSort<4, double, glm::defaultp>() != 0)\n\t\terror = failReport(__LINE__);\n\tif (error != 0)\n\t\treturn error;\n\n\t// Note: the random engine uses a fixed seed to create consistent and reproducible test data\n\t// test covariance matrix computation from different data sources\n\tif(testCovar<2, float, glm::defaultp>(100, 12345) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testCovar<2, double, glm::defaultp>(100, 42) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testCovar<3, float, glm::defaultp>(100, 2021) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testCovar<3, double, glm::defaultp>(100, 815) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testCovar<4, float, glm::defaultp>(100, 3141) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testCovar<4, double, glm::defaultp>(100, 174) != 0)\n\t\terror = failReport(__LINE__);\n\tif (error != 0)\n\t\treturn error;\n\n\t// test PCA eigen vector reconstruction\n\t// Expected epsilon precision evaluated separately:\n\t// https://github.com/sgrottel/exp-pca-precision\n\tif(testEigenvectors<2, float, glm::defaultp>(0.002f) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvectors<2, double, glm::defaultp>(0.00000000001) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvectors<3, float, glm::defaultp>(0.00001f) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvectors<3, double, glm::defaultp>(0.0000000001) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvectors<4, float, glm::defaultp>(0.0001f) != 0)\n\t\terror = failReport(__LINE__);\n\tif(testEigenvectors<4, double, glm::defaultp>(0.0000001) != 0)\n\t\terror = failReport(__LINE__);\n\tif(error != 0)\n\t\treturn error;\n\n\t// Final tests with randomized data\n#if GLM_HAS_CXX11_STL == 1\n\tif(rndTest(12345) != 0)\n\t\terror = failReport(__LINE__);\n\tif(rndTest(42) != 0)\n\t\terror = failReport(__LINE__);\n\tif (error != 0)\n\t\treturn error;\n#endif // GLM_HAS_CXX11_STL == 1\n\n\treturn error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_perpendicular.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/perpendicular.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_polar_coordinates.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/polar_coordinates.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_projection.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/projection.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_quaternion.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/epsilon.hpp>\n#include <glm/gtc/type_ptr.hpp>\n#include <glm/gtc/matrix_transform.hpp>\n#include <glm/gtx/transform.hpp>\n#include <glm/gtx/quaternion.hpp>\n#include <glm/gtx/compatibility.hpp>\n#include <glm/ext.hpp>\n\nint test_quat_fastMix()\n{\n\tint Error = 0;\n\n\tglm::quat A = glm::angleAxis(0.0f, glm::vec3(0, 0, 1));\n\tglm::quat B = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));\n\tglm::quat C = glm::fastMix(A, B, 0.5f);\n\tglm::quat D = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));\n\n\tError += glm::epsilonEqual(C.x, D.x, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(C.y, D.y, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(C.z, D.z, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(C.w, D.w, 0.01f) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_quat_shortMix()\n{\n\tint Error(0);\n\n\tglm::quat A = glm::angleAxis(0.0f, glm::vec3(0, 0, 1));\n\tglm::quat B = glm::angleAxis(glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));\n\tglm::quat C = glm::shortMix(A, B, 0.5f);\n\tglm::quat D = glm::angleAxis(glm::pi<float>() * 0.25f, glm::vec3(0, 0, 1));\n\n\tError += glm::epsilonEqual(C.x, D.x, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(C.y, D.y, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(C.z, D.z, 0.01f) ? 0 : 1;\n\tError += glm::epsilonEqual(C.w, D.w, 0.01f) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_orientation()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::quat q(1.0f, 0.0f, 0.0f, 1.0f);\n\t\tfloat p = glm::roll(q);\n\t\tError += glm::epsilonEqual(p, glm::pi<float>() * 0.5f, 0.0001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::quat q(1.0f, 0.0f, 0.0f, 1.0f);\n\t\tfloat p = glm::pitch(q);\n\t\tError += glm::epsilonEqual(p, 0.f, 0.0001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::quat q(1.0f, 0.0f, 0.0f, 1.0f);\n\t\tfloat p = glm::yaw(q);\n\t\tError += glm::epsilonEqual(p, 0.f, 0.0001f) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_rotation()\n{\n\tint Error(0);\n\n\tglm::vec3 v(1, 0, 0);\n\tglm::vec3 u(0, 1, 0);\n\n\tglm::quat Rotation = glm::rotation(v, u);\n\n\tfloat Angle = glm::angle(Rotation);\n\n\tError += glm::abs(Angle - glm::pi<float>() * 0.5f) < glm::epsilon<float>() ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_log()\n{\n\tint Error(0);\n\t\n\tglm::quat q;\n\tglm::quat p = glm::log(q);\n\tglm::quat r = glm::exp(p);\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_log();\n\tError += test_rotation();\n\tError += test_orientation();\n\tError += test_quat_fastMix();\n\tError += test_quat_shortMix();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_random.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////////////////////////\n// OpenGL Mathematics Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net)\n///////////////////////////////////////////////////////////////////////////////////////////////////\n// Created : 2011-05-31\n// Updated : 2011-05-31\n// Licence : This source is under MIT licence\n// File    : test/gtx/random.cpp\n///////////////////////////////////////////////////////////////////////////////////////////////////\n\n#include <glm/glm.hpp>\n#include <glm/gtx/random.hpp>\n#include <glm/gtx/epsilon.hpp>\n#include <iostream>\n\nint test_signedRand1()\n{\n\tint Error = 0;\n\n\t{\n\t\tfloat ResultFloat = 0.0f;\n\t\tdouble ResultDouble = 0.0f;\n\t\tfor(std::size_t i = 0; i < 100000; ++i)\n\t\t{\n\t\t\tResultFloat += glm::signedRand1<float>();\n\t\t\tResultDouble += glm::signedRand1<double>();\n\t\t}\n\n\t\tError += glm::equalEpsilon(ResultFloat, 0.0f, 0.0001f);\n\t\tError += glm::equalEpsilon(ResultDouble, 0.0, 0.0001);\n\t}\n\n\treturn Error;\n}\n\nint test_normalizedRand2()\n{\n\tint Error = 0;\n\n\t{\n\t\tstd::size_t Max = 100000;\n\t\tfloat ResultFloat = 0.0f;\n\t\tdouble ResultDouble = 0.0f;\n\t\tfor(std::size_t i = 0; i < Max; ++i)\n\t\t{\n\t\t\tResultFloat += glm::length(glm::normalizedRand2<float>());\n\t\t\tResultDouble += glm::length(glm::normalizedRand2<double>());\n\t\t}\n\n\t\tError += glm::equalEpsilon(ResultFloat, float(Max), 0.000001f) ? 0 : 1;\n\t\tError += glm::equalEpsilon(ResultDouble, double(Max), 0.000001) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\n\treturn Error;\n}\n\nint test_normalizedRand3()\n{\n\tint Error = 0;\n\n\t{\n\t\tstd::size_t Max = 100000;\n\t\tfloat ResultFloatA = 0.0f;\n\t\tfloat ResultFloatB = 0.0f;\n\t\tfloat ResultFloatC = 0.0f;\n\t\tdouble ResultDoubleA = 0.0f;\n\t\tdouble ResultDoubleB = 0.0f;\n\t\tdouble ResultDoubleC = 0.0f;\n\t\tfor(std::size_t i = 0; i < Max; ++i)\n\t\t{\n\t\t\tResultFloatA += glm::length(glm::normalizedRand3<float>());\n\t\t\tResultDoubleA += glm::length(glm::normalizedRand3<double>());\n\t\t\tResultFloatB += glm::length(glm::normalizedRand3(2.0f, 2.0f));\n\t\t\tResultDoubleB += glm::length(glm::normalizedRand3(2.0, 2.0));\n\t\t\tResultFloatC += glm::length(glm::normalizedRand3(1.0f, 3.0f));\n\t\t\tResultDoubleC += glm::length(glm::normalizedRand3(1.0, 3.0));\n\t\t}\n\n\t\tError += glm::equalEpsilon(ResultFloatA, float(Max), 0.0001f) ? 0 : 1;\n\t\tError += glm::equalEpsilon(ResultDoubleA, double(Max), 0.0001) ? 0 : 1;\n\t\tError += glm::equalEpsilon(ResultFloatB, float(Max * 2), 0.0001f) ? 0 : 1;\n\t\tError += glm::equalEpsilon(ResultDoubleB, double(Max * 2), 0.0001) ? 0 : 1;\n\t\tError += (ResultFloatC >= float(Max) && ResultFloatC <= float(Max * 3)) ? 0 : 1;\n\t\tError += (ResultDoubleC >= double(Max) && ResultDoubleC <= double(Max * 3)) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_signedRand1();\n\tError += test_normalizedRand2();\n\tError += test_normalizedRand3();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_range.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/glm.hpp>\n\n#if GLM_HAS_RANGE_FOR\n\n#include <glm/gtx/range.hpp>\n\nint test_vec()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::ivec3 const v(1, 2, 3);\n\n\t\tint count = 0;\n\t\tglm::ivec3 Result(0);\n\t\tfor(int x : v)\n\t\t{\n\t\t\tResult[count] = x;\n\t\t\tcount++;\n\t\t}\n\t\tError += count == 3 ? 0 : 1;\n\t\tError += v == Result ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::ivec3 v(1, 2, 3);\n\t\tfor(int& x : v)\n\t\t\tx = 0;\n\t\tError += glm::all(glm::equal(v, glm::ivec3(0))) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_mat()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::mat4x3 m(1.0f);\n\n\t\tint count = 0;\n\t\tfloat Sum = 0.0f;\n\t\tfor(float x : m)\n\t\t{\n\t\t\tcount++;\n\t\t\tSum += x;\n\t\t}\n\t\tError += count == 12 ? 0 : 1;\n\t\tError += glm::equal(Sum, 3.0f, 0.001f) ? 0 : 1;\n\t}\n\n\t{\n\t\tglm::mat4x3 m(1.0f);\n\n\t\tfor (float& x : m) { x = 0; }\n\t\tglm::vec4 v(1, 1, 1, 1);\n\t\tError += glm::all(glm::equal(m*v, glm::vec3(0, 0, 0), glm::epsilon<float>())) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\tError += test_vec();\n\tError += test_mat();\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif//GLM_HAS_RANGE_FOR\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_rotate_normalized_axis.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/rotate_normalized_axis.hpp>\n\nint main()\n{\n\tint Error(0);\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_rotate_vector.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/rotate_vector.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/vector_relational.hpp>\n\nint test_rotate()\n{\n\tint Error = 0;\n\n\tglm::vec2 A = glm::rotate(glm::vec2(1, 0), glm::pi<float>() * 0.5f);\n\tglm::vec3 B = glm::rotate(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));\n\tglm::vec4 C = glm::rotate(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f, glm::vec3(0, 0, 1));\n\tglm::vec3 D = glm::rotateX(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);\n\tglm::vec4 E = glm::rotateX(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f);\n\tglm::vec3 F = glm::rotateY(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);\n\tglm::vec4 G = glm::rotateY(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f);\n\tglm::vec3 H = glm::rotateZ(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);\n\tglm::vec4 I = glm::rotateZ(glm::vec4(1, 0, 0,1 ), glm::pi<float>() * 0.5f);\n\tglm::mat4 O = glm::orientation(glm::normalize(glm::vec3(1)), glm::vec3(0, 0, 1));\n\n\treturn Error;\n}\n\nint test_rotateX()\n{\n\tint Error = 0;\n\n\tglm::vec3 D = glm::rotateX(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);\n\tglm::vec4 E = glm::rotateX(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f);\n\n\treturn Error;\n}\n\nint test_rotateY()\n{\n\tint Error = 0;\n\n\tglm::vec3 F = glm::rotateY(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);\n\tglm::vec4 G = glm::rotateY(glm::vec4(1, 0, 0, 1), glm::pi<float>() * 0.5f);\n\n\treturn Error;\n}\n\n\nint test_rotateZ()\n{\n\tint Error = 0;\n\n\tglm::vec3 H = glm::rotateZ(glm::vec3(1, 0, 0), glm::pi<float>() * 0.5f);\n\tglm::vec4 I = glm::rotateZ(glm::vec4(1, 0, 0,1 ), glm::pi<float>() * 0.5f);\n\n\treturn Error;\n}\n\nint test_orientation()\n{\n\tint Error = 0;\n\n\tglm::mat4 O = glm::orientation(glm::normalize(glm::vec3(1)), glm::vec3(0, 0, 1));\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_rotate();\n\tError += test_rotateX();\n\tError += test_rotateY();\n\tError += test_rotateZ();\n\tError += test_orientation();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_scalar_multiplication.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/glm.hpp>\n\n#if GLM_HAS_TEMPLATE_ALIASES && !(GLM_COMPILER & GLM_COMPILER_GCC)\n#include <glm/gtx/scalar_multiplication.hpp>\n\nint main()\n{\n\tint Error(0);\n\tglm::vec3 v(0.5, 3.1, -9.1);\n\n\tError += glm::all(glm::equal(v, 1.0 * v, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(v, 1 * v, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(v, 1u * v, glm::epsilon<float>())) ? 0 : 1;\n\n\tglm::mat3 m(1, 2, 3, 4, 5, 6, 7, 8, 9);\n\tglm::vec3 w = 0.5f * m * v;\n\n\tError += glm::all(glm::equal((m*v)/2, w, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(m*(v/2), w, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal((m/2)*v, w, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal((0.5*m)*v, w, glm::epsilon<float>())) ? 0 : 1;\n\tError += glm::all(glm::equal(0.5*(m*v), w, glm::epsilon<float>())) ? 0 : 1;\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_scalar_relational.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/scalar_relational.hpp>\n#include <glm/gtc/constants.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/glm.hpp>\n\nstatic int test_lessThan()\n{\n\tint Error = 0;\n\n\tError += glm::lessThan(0, 1) ? 0 : 1;\n\tError += glm::lessThan(1, 0) ? 1 : 0;\n\tError += glm::lessThan(0, 0) ? 1 : 0;\n\tError += glm::lessThan(1, 1) ? 1 : 0;\n\tError += glm::lessThan(0.0f, 1.0f) ? 0 : 1;\n\tError += glm::lessThan(1.0f, 0.0f) ? 1 : 0;\n\tError += glm::lessThan(0.0f, 0.0f) ? 1 : 0;\n\tError += glm::lessThan(1.0f, 1.0f) ? 1 : 0;\n\tError += glm::lessThan(0.0, 1.0) ? 0 : 1;\n\tError += glm::lessThan(1.0, 0.0) ? 1 : 0;\n\tError += glm::lessThan(0.0, 0.0) ? 1 : 0;\n\tError += glm::lessThan(1.0, 1.0) ? 1 : 0;\n\n\treturn Error;\n}\n\nstatic int test_lessThanEqual()\n{\n\tint Error = 0;\n\n\tError += glm::lessThanEqual(0, 1) ? 0 : 1;\n\tError += glm::lessThanEqual(1, 0) ? 1 : 0;\n\tError += glm::lessThanEqual(0, 0) ? 0 : 1;\n\tError += glm::lessThanEqual(1, 1) ? 0 : 1;\n\tError += glm::lessThanEqual(0.0f, 1.0f) ? 0 : 1;\n\tError += glm::lessThanEqual(1.0f, 0.0f) ? 1 : 0;\n\tError += glm::lessThanEqual(0.0f, 0.0f) ? 0 : 1;\n\tError += glm::lessThanEqual(1.0f, 1.0f) ? 0 : 1;\n\tError += glm::lessThanEqual(0.0, 1.0) ? 0 : 1;\n\tError += glm::lessThanEqual(1.0, 0.0) ? 1 : 0;\n\tError += glm::lessThanEqual(0.0, 0.0) ? 0 : 1;\n\tError += glm::lessThanEqual(1.0, 1.0) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_greaterThan()\n{\n\tint Error = 0;\n\n\tError += glm::greaterThan(0, 1) ? 1 : 0;\n\tError += glm::greaterThan(1, 0) ? 0 : 1;\n\tError += glm::greaterThan(0, 0) ? 1 : 0;\n\tError += glm::greaterThan(1, 1) ? 1 : 0;\n\tError += glm::greaterThan(0.0f, 1.0f) ? 1 : 0;\n\tError += glm::greaterThan(1.0f, 0.0f) ? 0 : 1;\n\tError += glm::greaterThan(0.0f, 0.0f) ? 1 : 0;\n\tError += glm::greaterThan(1.0f, 1.0f) ? 1 : 0;\n\tError += glm::greaterThan(0.0, 1.0) ? 1 : 0;\n\tError += glm::greaterThan(1.0, 0.0) ? 0 : 1;\n\tError += glm::greaterThan(0.0, 0.0) ? 1 : 0;\n\tError += glm::greaterThan(1.0, 1.0) ? 1 : 0;\n\n\treturn Error;\n}\n\nstatic int test_greaterThanEqual()\n{\n\tint Error = 0;\n\n\tError += glm::greaterThanEqual(0, 1) ? 1 : 0;\n\tError += glm::greaterThanEqual(1, 0) ? 0 : 1;\n\tError += glm::greaterThanEqual(0, 0) ? 0 : 1;\n\tError += glm::greaterThanEqual(1, 1) ? 0 : 1;\n\tError += glm::greaterThanEqual(0.0f, 1.0f) ? 1 : 0;\n\tError += glm::greaterThanEqual(1.0f, 0.0f) ? 0 : 1;\n\tError += glm::greaterThanEqual(0.0f, 0.0f) ? 0 : 1;\n\tError += glm::greaterThanEqual(1.0f, 1.0f) ? 0 : 1;\n\tError += glm::greaterThanEqual(0.0, 1.0) ? 1 : 0;\n\tError += glm::greaterThanEqual(1.0, 0.0) ? 0 : 1;\n\tError += glm::greaterThanEqual(0.0, 0.0) ? 0 : 1;\n\tError += glm::greaterThanEqual(1.0, 1.0) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_equal()\n{\n\tint Error = 0;\n\n\tError += glm::equal(0, 1) ? 1 : 0;\n\tError += glm::equal(1, 0) ? 1 : 0;\n\tError += glm::equal(0, 0) ? 0 : 1;\n\tError += glm::equal(1, 1) ? 0 : 1;\n\tError += glm::equal(0.0f, 1.0f, glm::epsilon<float>()) ? 1 : 0;\n\tError += glm::equal(1.0f, 0.0f, glm::epsilon<float>()) ? 1 : 0;\n\tError += glm::equal(0.0f, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\tError += glm::equal(1.0f, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\tError += glm::equal(0.0, 1.0, glm::epsilon<double>()) ? 1 : 0;\n\tError += glm::equal(1.0, 0.0, glm::epsilon<double>()) ? 1 : 0;\n\tError += glm::equal(0.0, 0.0, glm::epsilon<double>()) ? 0 : 1;\n\tError += glm::equal(1.0, 1.0, glm::epsilon<double>()) ? 0 : 1;\n\n\treturn Error;\n}\n\nstatic int test_notEqual()\n{\n\tint Error = 0;\n\n\tError += glm::notEqual(0, 1) ? 0 : 1;\n\tError += glm::notEqual(1, 0) ? 0 : 1;\n\tError += glm::notEqual(0, 0) ? 1 : 0;\n\tError += glm::notEqual(1, 1) ? 1 : 0;\n\tError += glm::notEqual(0.0f, 1.0f, glm::epsilon<float>()) ? 0 : 1;\n\tError += glm::notEqual(1.0f, 0.0f, glm::epsilon<float>()) ? 0 : 1;\n\tError += glm::notEqual(0.0f, 0.0f, glm::epsilon<float>()) ? 1 : 0;\n\tError += glm::notEqual(1.0f, 1.0f, glm::epsilon<float>()) ? 1 : 0;\n\tError += glm::notEqual(0.0, 1.0, glm::epsilon<double>()) ? 0 : 1;\n\tError += glm::notEqual(1.0, 0.0, glm::epsilon<double>()) ? 0 : 1;\n\tError += glm::notEqual(0.0, 0.0, glm::epsilon<double>()) ? 1 : 0;\n\tError += glm::notEqual(1.0, 1.0, glm::epsilon<double>()) ? 1 : 0;\n\n\treturn Error;\n}\n\nstatic int test_any()\n{\n\tint Error = 0;\n\n\tError += glm::any(true) ? 0 : 1;\n\tError += glm::any(false) ? 1 : 0;\n\n\treturn Error;\n}\n\nstatic int test_all()\n{\n\tint Error = 0;\n\n\tError += glm::all(true) ? 0 : 1;\n\tError += glm::all(false) ? 1 : 0;\n\n\treturn Error;\n}\n\nstatic int test_not()\n{\n\tint Error = 0;\n\n\tError += glm::not_(true) ? 1 : 0;\n\tError += glm::not_(false) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_lessThan();\n\tError += test_lessThanEqual();\n\tError += test_greaterThan();\n\tError += test_greaterThanEqual();\n\tError += test_equal();\n\tError += test_notEqual();\n\tError += test_any();\n\tError += test_all();\n\tError += test_not();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_simd_mat4.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////////\n/// OpenGL Mathematics (glm.g-truc.net)\n///\n/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net)\n/// Permission is hereby granted, free of charge, to any person obtaining a copy\n/// of this software and associated documentation files (the \"Software\"), to deal\n/// in the Software without restriction, including without limitation the rights\n/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n/// copies of the Software, and to permit persons to whom the Software is\n/// furnished to do so, subject to the following conditions:\n/// \n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n/// \n/// Restrictions:\n///\t\tBy making use of the Software for military purposes, you choose to make\n///\t\ta Bunny unhappy.\n/// \n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n/// THE SOFTWARE.\n///\n/// @file test/gtx/gtx_simd_mat4.cpp\n/// @date 2010-09-16 / 2014-11-25\n/// @author Christophe Riccio\n///////////////////////////////////////////////////////////////////////////////////\n\n#include <glm/glm.hpp>\n#include <glm/gtc/matrix_transform.hpp>\n#include <glm/gtc/quaternion.hpp>\n#include <glm/gtc/random.hpp>\n#include <glm/gtx/simd_vec4.hpp>\n#include <glm/gtx/simd_mat4.hpp>\n#include <cstdio>\n#include <ctime>\n#include <vector>\n\n#if(GLM_ARCH != GLM_ARCH_PURE)\n\nstd::vector<float> test_detA(std::vector<glm::mat4> const & Data)\n{\n\tstd::vector<float> Test(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Test.size() - 1; ++i)\n\t\tTest[i] = glm::determinant(Data[i]);\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Det A: %ld\\n\", TimeEnd - TimeStart);\n\n\treturn Test;\n}\n\nstd::vector<float> test_detB(std::vector<glm::mat4> const & Data)\n{\n\tstd::vector<float> Test(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Test.size() - 1; ++i)\n\t{\n\t\t_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);\n\t\tglm::simdMat4 m(Data[i]);\n\t\tglm::simdVec4 d(glm::detail::sse_slow_det_ps((__m128 const * const)&m)); \n\t\tglm::vec4 v;//(d);\n\t\tTest[i] = v.x;\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Det B: %ld\\n\", TimeEnd - TimeStart);\n\n\treturn Test;\n}\n\nstd::vector<float> test_detC(std::vector<glm::mat4> const & Data)\n{\n\tstd::vector<float> Test(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Test.size() - 1; ++i)\n\t{\n\t\t_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);\n\t\tglm::simdMat4 m(Data[i]);\n\t\tglm::simdVec4 d(glm::detail::sse_det_ps((__m128 const * const)&m));\n\t\tglm::vec4 v;//(d);\n\t\tTest[i] = v.x;\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Det C: %ld\\n\", TimeEnd - TimeStart);\n\n\treturn Test;\n}\n\nstd::vector<float> test_detD(std::vector<glm::mat4> const & Data)\n{\n\tstd::vector<float> Test(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Test.size() - 1; ++i)\n\t{\n\t\t_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);\n\t\tglm::simdMat4 m(Data[i]);\n\t\tglm::simdVec4 d(glm::detail::sse_detd_ps((__m128 const * const)&m));\n\t\tglm::vec4 v;//(d); \n\t\tTest[i] = v.x;\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Det D: %ld\\n\", TimeEnd - TimeStart);\n\n\treturn Test;\n}\n\nvoid test_invA(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)\n{\n\t//std::vector<float> Test(Data.size());\n\tOut.resize(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Out.size() - 1; ++i)\n\t{\n\t\tOut[i] = glm::inverse(Data[i]);\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Inv A: %ld\\n\", TimeEnd - TimeStart);\n}\n\nvoid test_invC(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)\n{\n\t//std::vector<float> Test(Data.size());\n\tOut.resize(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Out.size() - 1; ++i)\n\t{\n\t\t_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);\n\t\tglm::simdMat4 m(Data[i]);\n\t\tglm::simdMat4 o;\n\t\tglm::detail::sse_inverse_fast_ps((__m128 const * const)&m, (__m128 *)&o);\n\t\tOut[i] = *(glm::mat4*)&o;\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Inv C: %ld\\n\", TimeEnd - TimeStart);\n}\n\nvoid test_invD(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)\n{\n\t//std::vector<float> Test(Data.size());\n\tOut.resize(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Out.size() - 1; ++i)\n\t{\n\t\t_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);\n\t\tglm::simdMat4 m(Data[i]);\n\t\tglm::simdMat4 o;\n\t\tglm::detail::sse_inverse_ps((__m128 const * const)&m, (__m128 *)&o);\n\t\tOut[i] = *(glm::mat4*)&o;\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Inv D: %ld\\n\", TimeEnd - TimeStart);\n}\n\nvoid test_mulA(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)\n{\n\t//std::vector<float> Test(Data.size());\n\tOut.resize(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Out.size() - 1; ++i)\n\t{\n\t\tOut[i] = Data[i] * Data[i];\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Mul A: %ld\\n\", TimeEnd - TimeStart);\n}\n\nvoid test_mulD(std::vector<glm::mat4> const & Data, std::vector<glm::mat4> & Out)\n{\n\t//std::vector<float> Test(Data.size());\n\tOut.resize(Data.size());\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t i = 0; i < Out.size() - 1; ++i)\n\t{\n\t\t_mm_prefetch((char*)&Data[i + 1], _MM_HINT_T0);\n\t\tglm::simdMat4 m(Data[i]);\n\t\tglm::simdMat4 o;\n\t\tglm::detail::sse_mul_ps((__m128 const * const)&m, (__m128 const * const)&m, (__m128*)&o);\n\t\tOut[i] = *(glm::mat4*)&o;\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"Mul D: %ld\\n\", TimeEnd - TimeStart);\n}\n\nint test_compute_glm()\n{\n\treturn 0;\n}\n\nint test_compute_gtx()\n{\n\tstd::vector<glm::vec4> Output(1000000);\n\n\tstd::clock_t TimeStart = clock();\n\n\tfor(std::size_t k = 0; k < Output.size(); ++k)\n\t{\n\t\tfloat i = float(k) / 1000.f + 0.001f;\n\t\tglm::vec3 A = glm::normalize(glm::vec3(i));\n\t\tglm::vec3 B = glm::cross(A, glm::normalize(glm::vec3(1, 1, 2)));\n\t\tglm::mat4 C = glm::rotate(glm::mat4(1.0f), i, B);\n\t\tglm::mat4 D = glm::scale(C, glm::vec3(0.8f, 1.0f, 1.2f));\n\t\tglm::mat4 E = glm::translate(D, glm::vec3(1.4f, 1.2f, 1.1f));\n\t\tglm::mat4 F = glm::perspective(i, 1.5f, 0.1f, 1000.f);\n\t\tglm::mat4 G = glm::inverse(F * E);\n\t\tglm::vec3 H = glm::unProject(glm::vec3(i), G, F, E[3]);\n\t\tglm::vec3 I = glm::any(glm::isnan(glm::project(H, G, F, E[3]))) ? glm::vec3(2) : glm::vec3(1);\n\t\tglm::mat4 J = glm::lookAt(glm::normalize(glm::max(B, glm::vec3(0.001f))), H, I);\n\t\tglm::mat4 K = glm::transpose(J);\n\t\tglm::quat L = glm::normalize(glm::quat_cast(K));\n\t\tglm::vec4 M = L * glm::smoothstep(K[3], J[3], glm::vec4(i));\n\t\tglm::mat4 N = glm::mat4(glm::normalize(glm::max(M, glm::vec4(0.001f))), K[3], J[3], glm::vec4(i));\n\t\tglm::mat4 O = N * glm::inverse(N);\n\t\tglm::vec4 P = O * glm::reflect(N[3], glm::vec4(A, 1.0f));\n\t\tglm::vec4 Q = glm::vec4(glm::dot(M, P));\n\t\tglm::vec4 R = glm::quat(Q.w, glm::vec3(Q)) * P;\n\t\tOutput[k] = R;\n\t}\n\n\tstd::clock_t TimeEnd = clock();\n\tprintf(\"test_compute_gtx: %ld\\n\", TimeEnd - TimeStart);\n\n\treturn 0;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tstd::vector<glm::mat4> Data(64 * 64 * 1);\n\tfor(std::size_t i = 0; i < Data.size(); ++i)\n\t\tData[i] = glm::mat4(\n\t\t\tglm::vec4(glm::linearRand(glm::vec4(-2.0f), glm::vec4(2.0f))),\n\t\t\tglm::vec4(glm::linearRand(glm::vec4(-2.0f), glm::vec4(2.0f))),\n\t\t\tglm::vec4(glm::linearRand(glm::vec4(-2.0f), glm::vec4(2.0f))),\n\t\t\tglm::vec4(glm::linearRand(glm::vec4(-2.0f), glm::vec4(2.0f))));\n\n\t{\n\t\tstd::vector<glm::mat4> TestInvA;\n\t\ttest_invA(Data, TestInvA);\n\t}\n\t{\n\t\tstd::vector<glm::mat4> TestInvC;\n\t\ttest_invC(Data, TestInvC);\n\t}\n\t{\n\t\tstd::vector<glm::mat4> TestInvD;\n\t\ttest_invD(Data, TestInvD);\n\t}\n\n\t{\n\t\tstd::vector<glm::mat4> TestA;\n\t\ttest_mulA(Data, TestA);\n\t}\n\t{\n\t\tstd::vector<glm::mat4> TestD;\n\t\ttest_mulD(Data, TestD);\n\t}\n\n\t{\n\t\tstd::vector<float> TestDetA = test_detA(Data);\n\t\tstd::vector<float> TestDetB = test_detB(Data);\n\t\tstd::vector<float> TestDetD = test_detD(Data);\n\t\tstd::vector<float> TestDetC = test_detC(Data);\n\n\t\tfor(std::size_t i = 0; i < TestDetA.size(); ++i)\n\t\t\tif(TestDetA[i] != TestDetB[i] && TestDetC[i] != TestDetB[i] && TestDetC[i] != TestDetD[i])\n\t\t\t\treturn 1;\n\t}\n\n\t// shuffle test\n\tglm::simdVec4 A(1.0f, 2.0f, 3.0f, 4.0f);\n\tglm::simdVec4 B(5.0f, 6.0f, 7.0f, 8.0f);\n\t//__m128 C = _mm_shuffle_ps(A.Data, B.Data, _MM_SHUFFLE(1, 0, 1, 0));\n\n\tError += test_compute_glm();\n\tError += test_compute_gtx();\n\tfloat Det = glm::determinant(glm::simdMat4(1.0));\n\tError += Det == 1.0f ? 0 : 1;\n\t\n\tglm::simdMat4 D = glm::matrixCompMult(glm::simdMat4(1.0), glm::simdMat4(1.0));\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n#endif//(GLM_ARCH != GLM_ARCH_PURE)\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_simd_vec4.cpp",
    "content": "///////////////////////////////////////////////////////////////////////////////////\n/// OpenGL Mathematics (glm.g-truc.net)\n///\n/// Copyright (c) 2005 - 2012 G-Truc Creation (www.g-truc.net)\n/// Permission is hereby granted, free of charge, to any person obtaining a copy\n/// of this software and associated documentation files (the \"Software\"), to deal\n/// in the Software without restriction, including without limitation the rights\n/// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n/// copies of the Software, and to permit persons to whom the Software is\n/// furnished to do so, subject to the following conditions:\n/// \n/// The above copyright notice and this permission notice shall be included in\n/// all copies or substantial portions of the Software.\n/// \n/// Restrictions:\n///\t\tBy making use of the Software for military purposes, you choose to make\n///\t\ta Bunny unhappy.\n/// \n/// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n/// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n/// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n/// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n/// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n/// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n/// THE SOFTWARE.\n///\n/// @file test/gtx/gtx_simd_vec4.cpp\n/// @date 2010-09-16 / 2014-11-25\n/// @author Christophe Riccio\n///////////////////////////////////////////////////////////////////////////////////\n\n#include <glm/glm.hpp>\n#include <glm/gtx/simd_vec4.hpp>\n#include <cstdio>\n\n#if(GLM_ARCH != GLM_ARCH_PURE)\n\nint main()\n{\n\tglm::simdVec4 A1(0.0f, 0.1f, 0.2f, 0.3f);\n\tglm::simdVec4 B1(0.4f, 0.5f, 0.6f, 0.7f);\n\tglm::simdVec4 C1 = A1 + B1;\n\tglm::simdVec4 D1 = A1.swizzle<glm::X, glm::Z, glm::Y, glm::W>();\n\tglm::simdVec4 E1(glm::vec4(1.0f));\n\tglm::vec4 F1 = glm::vec4_cast(E1);\n\t//glm::vec4 G1(E1);\n\n\t//printf(\"A1(%2.3f, %2.3f, %2.3f, %2.3f)\\n\", A1.x, A1.y, A1.z, A1.w);\n\t//printf(\"B1(%2.3f, %2.3f, %2.3f, %2.3f)\\n\", B1.x, B1.y, B1.z, B1.w);\n\t//printf(\"C1(%2.3f, %2.3f, %2.3f, %2.3f)\\n\", C1.x, C1.y, C1.z, C1.w);\n\t//printf(\"D1(%2.3f, %2.3f, %2.3f, %2.3f)\\n\", D1.x, D1.y, D1.z, D1.w);\n\n\t__m128 value = _mm_set1_ps(0.0f);\n\t__m128 data = _mm_cmpeq_ps(value, value);\n\t__m128 add0 = _mm_add_ps(data, data);\n\n\tglm::simdVec4 GNI(add0);\n\n\treturn 0;\n}\n\n#else\n\nint main()\n{\n\tint Error = 0;\n\n\treturn Error;\n}\n\n#endif//(GLM_ARCH != GLM_ARCH_PURE)\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_spline.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/vec2.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec4.hpp>\n#include <glm/gtx/spline.hpp>\n\nnamespace catmullRom\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tglm::vec2 Result2 = glm::catmullRom(\n\t\t\tglm::vec2(0.0f, 0.0f),\n\t\t\tglm::vec2(1.0f, 0.0f),\n\t\t\tglm::vec2(1.0f, 1.0f),\n\t\t\tglm::vec2(0.0f, 1.0f), 0.5f);\n\n\t\tglm::vec3 Result3 = glm::catmullRom(\n\t\t\tglm::vec3(0.0f, 0.0f, 0.0f), \n\t\t\tglm::vec3(1.0f, 0.0f, 0.0f), \n\t\t\tglm::vec3(1.0f, 1.0f, 0.0f), \n\t\t\tglm::vec3(0.0f, 1.0f, 0.0f), 0.5f);\n\n\t\tglm::vec4 Result4 = glm::catmullRom(\n\t\t\tglm::vec4(0.0f, 0.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(1.0f, 0.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(1.0f, 1.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(0.0f, 1.0f, 0.0f, 1.0f), 0.5f);\n\n\t\treturn Error;\n\t}\n}//catmullRom\n\nnamespace hermite\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tglm::vec2 Result2 = glm::hermite(\n\t\t\tglm::vec2(0.0f, 0.0f),\n\t\t\tglm::vec2(1.0f, 0.0f),\n\t\t\tglm::vec2(1.0f, 1.0f),\n\t\t\tglm::vec2(0.0f, 1.0f), 0.5f);\n\n\t\tglm::vec3 Result3 = glm::hermite(\n\t\t\tglm::vec3(0.0f, 0.0f, 0.0f), \n\t\t\tglm::vec3(1.0f, 0.0f, 0.0f), \n\t\t\tglm::vec3(1.0f, 1.0f, 0.0f), \n\t\t\tglm::vec3(0.0f, 1.0f, 0.0f), 0.5f);\n\n\t\tglm::vec4 Result4 = glm::hermite(\n\t\t\tglm::vec4(0.0f, 0.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(1.0f, 0.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(1.0f, 1.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(0.0f, 1.0f, 0.0f, 1.0f), 0.5f);\n\n\t\treturn Error;\n\t}\n}//catmullRom\n\nnamespace cubic\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tglm::vec2 Result2 = glm::cubic(\n\t\t\tglm::vec2(0.0f, 0.0f),\n\t\t\tglm::vec2(1.0f, 0.0f),\n\t\t\tglm::vec2(1.0f, 1.0f),\n\t\t\tglm::vec2(0.0f, 1.0f), 0.5f);\n\n\t\tglm::vec3 Result3 = glm::cubic(\n\t\t\tglm::vec3(0.0f, 0.0f, 0.0f), \n\t\t\tglm::vec3(1.0f, 0.0f, 0.0f), \n\t\t\tglm::vec3(1.0f, 1.0f, 0.0f), \n\t\t\tglm::vec3(0.0f, 1.0f, 0.0f), 0.5f);\n\n\t\tglm::vec4 Result = glm::cubic(\n\t\t\tglm::vec4(0.0f, 0.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(1.0f, 0.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(1.0f, 1.0f, 0.0f, 1.0f), \n\t\t\tglm::vec4(0.0f, 1.0f, 0.0f, 1.0f), 0.5f);\n\n\t\treturn Error;\n\t}\n}//catmullRom\n\nint main()\n{\n\tint Error(0);\n\n\tError += catmullRom::test();\n\tError += hermite::test();\n\tError += cubic::test();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_string_cast.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/glm.hpp>\n#include <glm/gtx/string_cast.hpp>\n#include <limits>\n\nint test_string_cast_vector()\n{\n\tint Error = 0;\n\n\t{\n\t\tglm::vec2 A1(1, 2);\n\t\tstd::string A2 = glm::to_string(A1);\n\t\tError += A2 != std::string(\"vec2(1.000000, 2.000000)\") ? 1 : 0;\n\t\n\t\tglm::vec3 B1(1, 2, 3);\n\t\tstd::string B2 = glm::to_string(B1);\n\t\tError += B2 != std::string(\"vec3(1.000000, 2.000000, 3.000000)\") ? 1 : 0;\n\n\t\tglm::vec4 C1(1, 2, 3, 4);\n\t\tstd::string C2 = glm::to_string(C1);\n\t\tError += C2 != std::string(\"vec4(1.000000, 2.000000, 3.000000, 4.000000)\") ? 1 : 0;\n\t\n\t\tglm::dvec2 J1(1, 2);\n\t\tstd::string J2 = glm::to_string(J1);\n\t\tError += J2 != std::string(\"dvec2(1.000000, 2.000000)\") ? 1 : 0;\n\t\n\t\tglm::dvec3 K1(1, 2, 3);\n\t\tstd::string K2 = glm::to_string(K1);\n\t\tError += K2 != std::string(\"dvec3(1.000000, 2.000000, 3.000000)\") ? 1 : 0;\n\t\n\t\tglm::dvec4 L1(1, 2, 3, 4);\n\t\tstd::string L2 = glm::to_string(L1);\n\t\tError += L2 != std::string(\"dvec4(1.000000, 2.000000, 3.000000, 4.000000)\") ? 1 : 0;\n\t}\n\n\t{\n\t\tglm::bvec2 M1(false, true);\n\t\tstd::string M2 = glm::to_string(M1);\n\t\tError += M2 != std::string(\"bvec2(false, true)\") ? 1 : 0;\n\t\n\t\tglm::bvec3 O1(false, true, false);\n\t\tstd::string O2 = glm::to_string(O1);\n\t\tError += O2 != std::string(\"bvec3(false, true, false)\") ? 1 : 0;\n\n\t\tglm::bvec4 P1(false, true, false, true);\n\t\tstd::string P2 = glm::to_string(P1);\n\t\tError += P2 != std::string(\"bvec4(false, true, false, true)\") ? 1 : 0;\n\t}\n\n\t{\n\t\tglm::ivec2 D1(1, 2);\n\t\tstd::string D2 = glm::to_string(D1);\n\t\tError += D2 != std::string(\"ivec2(1, 2)\") ? 1 : 0;\n\t\n\t\tglm::ivec3 E1(1, 2, 3);\n\t\tstd::string E2 = glm::to_string(E1);\n\t\tError += E2 != std::string(\"ivec3(1, 2, 3)\") ? 1 : 0;\n\t\n\t\tglm::ivec4 F1(1, 2, 3, 4);\n\t\tstd::string F2 = glm::to_string(F1);\n\t\tError += F2 != std::string(\"ivec4(1, 2, 3, 4)\") ? 1 : 0;\n\t}\n\n\t{\n\t\tglm::i8vec2 D1(1, 2);\n\t\tstd::string D2 = glm::to_string(D1);\n\t\tError += D2 != std::string(\"i8vec2(1, 2)\") ? 1 : 0;\n\t\n\t\tglm::i8vec3 E1(1, 2, 3);\n\t\tstd::string E2 = glm::to_string(E1);\n\t\tError += E2 != std::string(\"i8vec3(1, 2, 3)\") ? 1 : 0;\n\t\n\t\tglm::i8vec4 F1(1, 2, 3, 4);\n\t\tstd::string F2 = glm::to_string(F1);\n\t\tError += F2 != std::string(\"i8vec4(1, 2, 3, 4)\") ? 1 : 0;\n\t}\n\n\t{\n\t\tglm::i16vec2 D1(1, 2);\n\t\tstd::string D2 = glm::to_string(D1);\n\t\tError += D2 != std::string(\"i16vec2(1, 2)\") ? 1 : 0;\n\t\n\t\tglm::i16vec3 E1(1, 2, 3);\n\t\tstd::string E2 = glm::to_string(E1);\n\t\tError += E2 != std::string(\"i16vec3(1, 2, 3)\") ? 1 : 0;\n\t\n\t\tglm::i16vec4 F1(1, 2, 3, 4);\n\t\tstd::string F2 = glm::to_string(F1);\n\t\tError += F2 != std::string(\"i16vec4(1, 2, 3, 4)\") ? 1 : 0;\n\t}\n\n\t{\n\t\tglm::i64vec2 D1(1, 2);\n\t\tstd::string D2 = glm::to_string(D1);\n\t\tError += D2 != std::string(\"i64vec2(1, 2)\") ? 1 : 0;\n\t\n\t\tglm::i64vec3 E1(1, 2, 3);\n\t\tstd::string E2 = glm::to_string(E1);\n\t\tError += E2 != std::string(\"i64vec3(1, 2, 3)\") ? 1 : 0;\n\t\n\t\tglm::i64vec4 F1(1, 2, 3, 4);\n\t\tstd::string F2 = glm::to_string(F1);\n\t\tError += F2 != std::string(\"i64vec4(1, 2, 3, 4)\") ? 1 : 0;\n\t}\n\n\treturn Error;\n}\n\nint test_string_cast_matrix()\n{\n\tint Error = 0;\n\t\n\tglm::mat2x2 A1(1.000000, 2.000000, 3.000000, 4.000000);\n\tstd::string A2 = glm::to_string(A1);\n\tError += A2 != std::string(\"mat2x2((1.000000, 2.000000), (3.000000, 4.000000))\") ? 1 : 0;\n\n\treturn Error;\n}\n\nint test_string_cast_quaternion()\n{\n\tint Error = 0;\n\n\tglm::quat Q0 = glm::quat(1.0f, 2.0f, 3.0f, 4.0f);\n\tstd::string S0 = glm::to_string(Q0);\n\tError += S0 != std::string(\"quat(1.000000, {2.000000, 3.000000, 4.000000})\") ? 1 : 0;\n\n\treturn Error;\n\n}\n\nint test_string_cast_dual_quaternion()\n{\n\tint Error = 0;\n\n\tglm::dualquat Q0 = glm::dualquat(glm::quat(1.0f, 2.0f, 3.0f, 4.0f), glm::quat(5.0f, 6.0f, 7.0f, 8.0f));\n\tstd::string S0 = glm::to_string(Q0);\n\tError += S0 != std::string(\"dualquat((1.000000, {2.000000, 3.000000, 4.000000}), (5.000000, {6.000000, 7.000000, 8.000000}))\") ? 1 : 0;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_string_cast_vector();\n\tError += test_string_cast_matrix();\n\tError += test_string_cast_quaternion();\n\tError += test_string_cast_dual_quaternion();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_texture.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/vec2.hpp>\n#include <glm/gtx/texture.hpp>\n\nint test_levels()\n{\n\tint Error = 0;\n\n\tint const Levels = glm::levels(glm::ivec2(3, 2));\n\tError += Levels == 2 ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error = 0;\n\n\tError += test_levels();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_type_aligned.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/type_aligned.hpp>\n#include <cstdio>\n\nint test_decl()\n{\n\tint Error(0);\n\n\t{\n\t\tstruct S1\n\t\t{\n\t\t\tglm::aligned_vec4 B;\n\t\t};\n\n\t\tstruct S2\n\t\t{\n\t\t\tglm::vec4 B;\n\t\t};\n\n\t\tstd::printf(\"vec4 - Aligned: %d, unaligned: %d\\n\", static_cast<int>(sizeof(S1)), static_cast<int>(sizeof(S2)));\n\n\t\tError += sizeof(S1) >= sizeof(S2) ? 0 : 1;\n\t}\n\n\t{\n\t\tstruct S1\n\t\t{\n\t\t\tbool A;\n\t\t\tglm::vec3 B;\n\t\t};\n\n\t\tstruct S2\n\t\t{\n\t\t\tbool A;\n\t\t\tglm::aligned_vec3 B;\n\t\t};\n\n\t\tstd::printf(\"vec3 - Aligned: %d, unaligned: %d\\n\", static_cast<int>(sizeof(S1)), static_cast<int>(sizeof(S2)));\n\n\t\tError += sizeof(S1) <= sizeof(S2) ? 0 : 1;\n\t}\n\n\t{\n\t\tstruct S1\n\t\t{\n\t\t\tbool A;\n\t\t\tglm::aligned_vec4 B;\n\t\t};\n\n\t\tstruct S2\n\t\t{\n\t\t\tbool A;\n\t\t\tglm::vec4 B;\n\t\t};\n\n\t\tstd::printf(\"vec4 - Aligned: %d, unaligned: %d\\n\", static_cast<int>(sizeof(S1)), static_cast<int>(sizeof(S2)));\n\n\t\tError += sizeof(S1) >= sizeof(S2) ? 0 : 1;\n\t}\n\n\t{\n\t\tstruct S1\n\t\t{\n\t\t\tbool A;\n\t\t\tglm::aligned_dvec4 B;\n\t\t};\n\n\t\tstruct S2\n\t\t{\n\t\t\tbool A;\n\t\t\tglm::dvec4 B;\n\t\t};\n\n\t\tstd::printf(\"dvec4 - Aligned: %d, unaligned: %d\\n\", static_cast<int>(sizeof(S1)), static_cast<int>(sizeof(S2)));\n\n\t\tError += sizeof(S1) >= sizeof(S2) ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\ntemplate<typename genType>\nvoid print(genType const& Mat0)\n{\n\tstd::printf(\"mat4(\\n\");\n\tstd::printf(\"\\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\\n\", static_cast<double>(Mat0[0][0]), static_cast<double>(Mat0[0][1]), static_cast<double>(Mat0[0][2]), static_cast<double>(Mat0[0][3]));\n\tstd::printf(\"\\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\\n\", static_cast<double>(Mat0[1][0]), static_cast<double>(Mat0[1][1]), static_cast<double>(Mat0[1][2]), static_cast<double>(Mat0[1][3]));\n\tstd::printf(\"\\tvec4(%2.9f, %2.9f, %2.9f, %2.9f)\\n\", static_cast<double>(Mat0[2][0]), static_cast<double>(Mat0[2][1]), static_cast<double>(Mat0[2][2]), static_cast<double>(Mat0[2][3]));\n\tstd::printf(\"\\tvec4(%2.9f, %2.9f, %2.9f, %2.9f))\\n\\n\", static_cast<double>(Mat0[3][0]), static_cast<double>(Mat0[3][1]), static_cast<double>(Mat0[3][2]), static_cast<double>(Mat0[3][3]));\n}\n\nint perf_mul()\n{\n\tint Error = 0;\n\n\tglm::mat4 A(1.0f);\n\tglm::mat4 B(1.0f);\n\n\tglm::mat4 C = A * B;\n\n\tprint(C);\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error(0);\n\n\tError += test_decl();\n\tError += perf_mul();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_type_trait.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/vec4.hpp>\n#include <glm/gtx/type_trait.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\t\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_vec_swizzle.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/vec_swizzle.hpp>\n\nint main()\n{\n\tint Error = 0;\n\n\n\treturn Error;\n}\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_vector_angle.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtc/constants.hpp>\n#include <glm/gtx/vector_angle.hpp>\n#include <limits>\n\nint test_angle()\n{\n\tint Error = 0;\n\t\n\tfloat AngleA = glm::angle(glm::vec2(1, 0), glm::normalize(glm::vec2(1, 1)));\n\tError += glm::epsilonEqual(AngleA, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\tfloat AngleB = glm::angle(glm::vec3(1, 0, 0), glm::normalize(glm::vec3(1, 1, 0)));\n\tError += glm::epsilonEqual(AngleB, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\tfloat AngleC = glm::angle(glm::vec4(1, 0, 0, 0), glm::normalize(glm::vec4(1, 1, 0, 0)));\n\tError += glm::epsilonEqual(AngleC, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_orientedAngle_vec2()\n{\n\tint Error = 0;\n\t\n\tfloat AngleA = glm::orientedAngle(glm::vec2(1, 0), glm::normalize(glm::vec2(1, 1)));\n\tError += glm::epsilonEqual(AngleA, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\tfloat AngleB = glm::orientedAngle(glm::vec2(0, 1), glm::normalize(glm::vec2(1, 1)));\n\tError += glm::epsilonEqual(AngleB, -glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\tfloat AngleC = glm::orientedAngle(glm::normalize(glm::vec2(1, 1)), glm::vec2(0, 1));\n\tError += glm::epsilonEqual(AngleC, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_orientedAngle_vec3()\n{\n\tint Error = 0;\n\t\n\tfloat AngleA = glm::orientedAngle(glm::vec3(1, 0, 0), glm::normalize(glm::vec3(1, 1, 0)), glm::vec3(0, 0, 1));\n\tError += glm::epsilonEqual(AngleA, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\tfloat AngleB = glm::orientedAngle(glm::vec3(0, 1, 0), glm::normalize(glm::vec3(1, 1, 0)), glm::vec3(0, 0, 1));\n\tError += glm::epsilonEqual(AngleB, -glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\tfloat AngleC = glm::orientedAngle(glm::normalize(glm::vec3(1, 1, 0)), glm::vec3(0, 1, 0), glm::vec3(0, 0, 1));\n\tError += glm::epsilonEqual(AngleC, glm::pi<float>() * 0.25f, 0.01f) ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error(0);\n\t\n\tError += test_angle();\n\tError += test_orientedAngle_vec2();\n\tError += test_orientedAngle_vec3();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_vector_query.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/vec2.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec4.hpp>\n#include <glm/gtx/vector_query.hpp>\n\nint test_areCollinear()\n{\n\tint Error(0);\n\n\t{\n\t\tbool TestA = glm::areCollinear(glm::vec2(-1), glm::vec2(1), 0.00001f);\n\t\tError += TestA ? 0 : 1;\n\t}\n\n\t{\n\t\tbool TestA = glm::areCollinear(glm::vec3(-1), glm::vec3(1), 0.00001f);\n\t\tError += TestA ? 0 : 1;\n\t}\n\n\t{\n\t\tbool TestA = glm::areCollinear(glm::vec4(-1), glm::vec4(1), 0.00001f);\n\t\tError += TestA ? 0 : 1;\n\t}\n\n\treturn Error;\n}\n\nint test_areOrthogonal()\n{\n\tint Error(0);\n\t\n\tbool TestA = glm::areOrthogonal(glm::vec2(1, 0), glm::vec2(0, 1), 0.00001f);\n\tError += TestA ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_isNormalized()\n{\n\tint Error(0);\n\t\n\tbool TestA = glm::isNormalized(glm::vec4(1, 0, 0, 0), 0.00001f);\n\tError += TestA ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_isNull()\n{\n\tint Error(0);\n\t\n\tbool TestA = glm::isNull(glm::vec4(0), 0.00001f);\n\tError += TestA ? 0 : 1;\n\n\treturn Error;\n}\n\nint test_areOrthonormal()\n{\n\tint Error(0);\n\n\tbool TestA = glm::areOrthonormal(glm::vec2(1, 0), glm::vec2(0, 1), 0.00001f);\n\tError += TestA ? 0 : 1;\n\n\treturn Error;\n}\n\nint main()\n{\n\tint Error(0);\n\n\tError += test_areCollinear();\n\tError += test_areOrthogonal();\n\tError += test_isNormalized();\n\tError += test_isNull();\n\tError += test_areOrthonormal();\n\n\treturn Error;\n}\n\n\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/gtx/gtx_wrap.cpp",
    "content": "#define GLM_ENABLE_EXPERIMENTAL\n#include <glm/gtx/wrap.hpp>\n#include <glm/ext/scalar_relational.hpp>\n#include <glm/ext/vector_relational.hpp>\n\nnamespace clamp\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tfloat A = glm::clamp(0.5f);\n\t\tError += glm::equal(A, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat B = glm::clamp(0.0f);\n\t\tError += glm::equal(B, 0.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat C = glm::clamp(1.0f);\n\t\tError += glm::equal(C, 1.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat D = glm::clamp(-0.5f);\n\t\tError += glm::equal(D, 0.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat E = glm::clamp(1.5f);\n\t\tError += glm::equal(E, 1.0f, 0.00001f) ? 0 : 1;\n\n\t\tglm::vec2 K = glm::clamp(glm::vec2(0.5f));\n\t\tError += glm::all(glm::equal(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec3 L = glm::clamp(glm::vec3(0.5f));\n\t\tError += glm::all(glm::equal(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec4 M = glm::clamp(glm::vec4(0.5f));\n\t\tError += glm::all(glm::equal(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec1 N = glm::clamp(glm::vec1(0.5f));\n\t\tError += glm::all(glm::equal(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace clamp\n\nnamespace repeat\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tfloat A = glm::repeat(0.5f);\n\t\tError += glm::equal(A, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat B = glm::repeat(0.0f);\n\t\tError += glm::equal(B, 0.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat C = glm::repeat(1.0f);\n\t\tError += glm::equal(C, 0.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat D = glm::repeat(-0.5f);\n\t\tError += glm::equal(D, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat E = glm::repeat(1.5f);\n\t\tError += glm::equal(E, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat F = glm::repeat(0.9f);\n\t\tError += glm::equal(F, 0.9f, 0.00001f) ? 0 : 1;\n\n\t\tglm::vec2 K = glm::repeat(glm::vec2(0.5f));\n\t\tError += glm::all(glm::equal(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec3 L = glm::repeat(glm::vec3(0.5f));\n\t\tError += glm::all(glm::equal(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec4 M = glm::repeat(glm::vec4(0.5f));\n\t\tError += glm::all(glm::equal(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec1 N = glm::repeat(glm::vec1(0.5f));\n\t\tError += glm::all(glm::equal(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace repeat\n\nnamespace mirrorClamp\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tfloat A = glm::mirrorClamp(0.5f);\n\t\tError += glm::equal(A, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat B = glm::mirrorClamp(0.0f);\n\t\tError += glm::equal(B, 0.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat C = glm::mirrorClamp(1.1f);\n\t\tError += glm::equal(C, 0.1f, 0.00001f) ? 0 : 1;\n\n\t\tfloat D = glm::mirrorClamp(-0.5f);\n\t\tError += glm::equal(D, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat E = glm::mirrorClamp(1.5f);\n\t\tError += glm::equal(E, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat F = glm::mirrorClamp(0.9f);\n\t\tError += glm::equal(F, 0.9f, 0.00001f) ? 0 : 1;\n\n\t\tfloat G = glm::mirrorClamp(3.1f);\n\t\tError += glm::equal(G, 0.1f, 0.00001f) ? 0 : 1;\n\n\t\tfloat H = glm::mirrorClamp(-3.1f);\n\t\tError += glm::equal(H, 0.1f, 0.00001f) ? 0 : 1;\n\n\t\tfloat I = glm::mirrorClamp(-0.9f);\n\t\tError += glm::equal(I, 0.9f, 0.00001f) ? 0 : 1;\n\n\t\tglm::vec2 K = glm::mirrorClamp(glm::vec2(0.5f));\n\t\tError += glm::all(glm::equal(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec3 L = glm::mirrorClamp(glm::vec3(0.5f));\n\t\tError += glm::all(glm::equal(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec4 M = glm::mirrorClamp(glm::vec4(0.5f));\n\t\tError += glm::all(glm::equal(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec1 N = glm::mirrorClamp(glm::vec1(0.5f));\n\t\tError += glm::all(glm::equal(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace mirrorClamp\n\nnamespace mirrorRepeat\n{\n\tint test()\n\t{\n\t\tint Error(0);\n\n\t\tfloat A = glm::mirrorRepeat(0.5f);\n\t\tError += glm::equal(A, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat B = glm::mirrorRepeat(0.0f);\n\t\tError += glm::equal(B, 0.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat C = glm::mirrorRepeat(1.0f);\n\t\tError += glm::equal(C, 1.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat D = glm::mirrorRepeat(-0.5f);\n\t\tError += glm::equal(D, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat E = glm::mirrorRepeat(1.5f);\n\t\tError += glm::equal(E, 0.5f, 0.00001f) ? 0 : 1;\n\n\t\tfloat F = glm::mirrorRepeat(0.9f);\n\t\tError += glm::equal(F, 0.9f, 0.00001f) ? 0 : 1;\n\n\t\tfloat G = glm::mirrorRepeat(3.0f);\n\t\tError += glm::equal(G, 1.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat H = glm::mirrorRepeat(-3.0f);\n\t\tError += glm::equal(H, 1.0f, 0.00001f) ? 0 : 1;\n\n\t\tfloat I = glm::mirrorRepeat(-1.0f);\n\t\tError += glm::equal(I, 1.0f, 0.00001f) ? 0 : 1;\n\n\t\tglm::vec2 K = glm::mirrorRepeat(glm::vec2(0.5f));\n\t\tError += glm::all(glm::equal(K, glm::vec2(0.5f), glm::vec2(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec3 L = glm::mirrorRepeat(glm::vec3(0.5f));\n\t\tError += glm::all(glm::equal(L, glm::vec3(0.5f), glm::vec3(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec4 M = glm::mirrorRepeat(glm::vec4(0.5f));\n\t\tError += glm::all(glm::equal(M, glm::vec4(0.5f), glm::vec4(0.00001f))) ? 0 : 1;\n\n\t\tglm::vec1 N = glm::mirrorRepeat(glm::vec1(0.5f));\n\t\tError += glm::all(glm::equal(N, glm::vec1(0.5f), glm::vec1(0.00001f))) ? 0 : 1;\n\n\t\treturn Error;\n\t}\n}//namespace mirrorRepeat\n\nint main()\n{\n\tint Error(0);\n\n\tError += clamp::test();\n\tError += repeat::test();\n\tError += mirrorClamp::test();\n\tError += mirrorRepeat::test();\n\n\treturn Error;\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/perf/CMakeLists.txt",
    "content": "glmCreateTestGTC(perf_matrix_div)\nglmCreateTestGTC(perf_matrix_inverse)\nglmCreateTestGTC(perf_matrix_mul)\nglmCreateTestGTC(perf_matrix_mul_vector)\nglmCreateTestGTC(perf_matrix_transpose)\nglmCreateTestGTC(perf_vector_mul_matrix)\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/perf/perf_matrix_div.cpp",
    "content": "#define GLM_FORCE_INLINE\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/matrix_double4x4.hpp>\n#include <glm/ext/matrix_transform.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#include <glm/gtc/type_aligned.hpp>\n#include <vector>\n#include <chrono>\n#include <cstdio>\n\ntemplate <typename matType>\nstatic void test_mat_div_mat(matType const& M, std::vector<matType> const& I, std::vector<matType>& O)\n{\n\tfor (std::size_t i = 0, n = I.size(); i < n; ++i)\n\t\tO[i] = M / I[i];\n}\n\ntemplate <typename matType>\nstatic int launch_mat_div_mat(std::vector<matType>& O, matType const& Transform, matType const& Scale, std::size_t Samples)\n{\n\ttypedef typename matType::value_type T;\n\n\tstd::vector<matType> I(Samples);\n\tO.resize(Samples);\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\tI[i] = Scale * static_cast<T>(i) + Scale;\n\n\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\ttest_mat_div_mat<matType>(Transform, I, O);\n\tstd::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();\n\n\treturn static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count());\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat2_div_mat2(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4);\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_div_mat<packedMatType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_div_mat<alignedMatType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat3_div_mat3(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4, 5, 6, 7, 8, 9);\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05, 0.01, 0.02, 0.03, 0.05, 0.01);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_div_mat<packedMatType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_div_mat<alignedMatType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat4_div_mat4(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);\n\tpackedMatType const Scale(0.01, 0.02, 0.05, 0.04, 0.02, 0.08, 0.05, 0.01, 0.08, 0.03, 0.05, 0.06, 0.02, 0.03, 0.07, 0.05);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_div_mat<packedMatType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_div_mat<alignedMatType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tstd::size_t const Samples = 100000;\n\n\tint Error = 0;\n\n\tstd::printf(\"mat2 / mat2:\\n\");\n\tError += comp_mat2_div_mat2<glm::mat2, glm::aligned_mat2>(Samples);\n\t\n\tstd::printf(\"dmat2 / dmat2:\\n\");\n\tError += comp_mat2_div_mat2<glm::dmat2, glm::aligned_dmat2>(Samples);\n\n\tstd::printf(\"mat3 / mat3:\\n\");\n\tError += comp_mat3_div_mat3<glm::mat3, glm::aligned_mat3>(Samples);\n\t\n\tstd::printf(\"dmat3 / dmat3:\\n\");\n\tError += comp_mat3_div_mat3<glm::dmat3, glm::aligned_dmat3>(Samples);\n\n\tstd::printf(\"mat4 / mat4:\\n\");\n\tError += comp_mat4_div_mat4<glm::mat4, glm::aligned_mat4>(Samples);\n\t\n\tstd::printf(\"dmat4 / dmat4:\\n\");\n\tError += comp_mat4_div_mat4<glm::dmat4, glm::aligned_dmat4>(Samples);\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/perf/perf_matrix_inverse.cpp",
    "content": "#define GLM_FORCE_INLINE\n#include <glm/matrix.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/matrix_double4x4.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#include <glm/gtc/type_aligned.hpp>\n#include <vector>\n#include <chrono>\n#include <cstdio>\n\ntemplate <typename matType>\nstatic void test_mat_inverse(std::vector<matType> const& I, std::vector<matType>& O)\n{\n\tfor (std::size_t i = 0, n = I.size(); i < n; ++i)\n\t\tO[i] = glm::inverse(I[i]);\n}\n\ntemplate <typename matType>\nstatic int launch_mat_inverse(std::vector<matType>& O, matType const& Scale, std::size_t Samples)\n{\n\ttypedef typename matType::value_type T;\n\n\tstd::vector<matType> I(Samples);\n\tO.resize(Samples);\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\tI[i] = Scale * static_cast<T>(i) + Scale;\n\n\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\ttest_mat_inverse<matType>(I, O);\n\tstd::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();\n\n\treturn static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count());\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat2_inverse(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_inverse<packedMatType>(SISD, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_inverse<alignedMatType>(SIMD, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat3_inverse(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05, 0.01, 0.02, 0.03, 0.05, 0.01);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_inverse<packedMatType>(SISD, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_inverse<alignedMatType>(SIMD, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat4_inverse(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Scale(0.01, 0.02, 0.05, 0.04, 0.02, 0.08, 0.05, 0.01, 0.08, 0.03, 0.05, 0.06, 0.02, 0.03, 0.07, 0.05);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_inverse<packedMatType>(SISD, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_inverse<alignedMatType>(SIMD, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tstd::size_t const Samples = 100000;\n\n\tint Error = 0;\n\n\tstd::printf(\"glm::inverse(mat2):\\n\");\n\tError += comp_mat2_inverse<glm::mat2, glm::aligned_mat2>(Samples);\n\t\n\tstd::printf(\"glm::inverse(dmat2):\\n\");\n\tError += comp_mat2_inverse<glm::dmat2, glm::aligned_dmat2>(Samples);\n\n\tstd::printf(\"glm::inverse(mat3):\\n\");\n\tError += comp_mat3_inverse<glm::mat3, glm::aligned_mat3>(Samples);\n\t\n\tstd::printf(\"glm::inverse(dmat3):\\n\");\n\tError += comp_mat3_inverse<glm::dmat3, glm::aligned_dmat3>(Samples);\n\n\tstd::printf(\"glm::inverse(mat4):\\n\");\n\tError += comp_mat4_inverse<glm::mat4, glm::aligned_mat4>(Samples);\n\t\n\tstd::printf(\"glm::inverse(dmat4):\\n\");\n\tError += comp_mat4_inverse<glm::dmat4, glm::aligned_dmat4>(Samples);\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/perf/perf_matrix_mul.cpp",
    "content": "#define GLM_FORCE_INLINE\n#include <glm/ext/matrix_float2x2.hpp>\n#include <glm/ext/matrix_double2x2.hpp>\n#include <glm/ext/matrix_float3x3.hpp>\n#include <glm/ext/matrix_double3x3.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/matrix_double4x4.hpp>\n#include <glm/ext/matrix_transform.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#include <glm/gtc/type_aligned.hpp>\n#include <vector>\n#include <chrono>\n#include <cstdio>\n\ntemplate <typename matType>\nstatic void test_mat_mul_mat(matType const& M, std::vector<matType> const& I, std::vector<matType>& O)\n{\n\tfor (std::size_t i = 0, n = I.size(); i < n; ++i)\n\t\tO[i] = M * I[i];\n}\n\ntemplate <typename matType>\nstatic int launch_mat_mul_mat(std::vector<matType>& O, matType const& Transform, matType const& Scale, std::size_t Samples)\n{\n\ttypedef typename matType::value_type T;\n\n\tstd::vector<matType> I(Samples);\n\tO.resize(Samples);\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\tI[i] = Scale * static_cast<T>(i);\n\n\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\ttest_mat_mul_mat<matType>(Transform, I, O);\n\tstd::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();\n\n\treturn static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count());\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat2_mul_mat2(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4);\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_mul_mat<packedMatType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_mul_mat<alignedMatType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat3_mul_mat3(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4, 5, 6, 7, 8, 9);\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05, 0.01, 0.02, 0.03, 0.05, 0.01);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_mul_mat<packedMatType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_mul_mat<alignedMatType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat4_mul_mat4(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05, 0.01, 0.02, 0.03, 0.05, 0.01, 0.02, 0.03, 0.05, 0.01, 0.02, 0.03, 0.05);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_mul_mat<packedMatType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_mul_mat<alignedMatType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tstd::size_t const Samples = 100000;\n\n\tint Error = 0;\n\n\tstd::printf(\"mat2 * mat2:\\n\");\n\tError += comp_mat2_mul_mat2<glm::mat2, glm::aligned_mat2>(Samples);\n\t\n\tstd::printf(\"dmat2 * dmat2:\\n\");\n\tError += comp_mat2_mul_mat2<glm::dmat2, glm::aligned_dmat2>(Samples);\n\n\tstd::printf(\"mat3 * mat3:\\n\");\n\tError += comp_mat3_mul_mat3<glm::mat3, glm::aligned_mat3>(Samples);\n\t\n\tstd::printf(\"dmat3 * dmat3:\\n\");\n\tError += comp_mat3_mul_mat3<glm::dmat3, glm::aligned_dmat3>(Samples);\n\n\tstd::printf(\"mat4 * mat4:\\n\");\n\tError += comp_mat4_mul_mat4<glm::mat4, glm::aligned_mat4>(Samples);\n\t\n\tstd::printf(\"dmat4 * dmat4:\\n\");\n\tError += comp_mat4_mul_mat4<glm::dmat4, glm::aligned_dmat4>(Samples);\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/perf/perf_matrix_mul_vector.cpp",
    "content": "#define GLM_FORCE_INLINE\n#include <glm/ext/matrix_float2x2.hpp>\n#include <glm/ext/matrix_double2x2.hpp>\n#include <glm/ext/matrix_float3x3.hpp>\n#include <glm/ext/matrix_double3x3.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/matrix_double4x4.hpp>\n#include <glm/ext/matrix_transform.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#include <glm/gtc/type_aligned.hpp>\n#include <vector>\n#include <chrono>\n#include <cstdio>\n\ntemplate <typename matType, typename vecType>\nstatic void test_mat_mul_vec(matType const& M, std::vector<vecType> const& I, std::vector<vecType>& O)\n{\n\tfor (std::size_t i = 0, n = I.size(); i < n; ++i)\n\t\tO[i] = M * I[i];\n}\n\ntemplate <typename matType, typename vecType>\nstatic int launch_mat_mul_vec(std::vector<vecType>& O, matType const& Transform, vecType const& Scale, std::size_t Samples)\n{\n\ttypedef typename matType::value_type T;\n\n\tstd::vector<vecType> I(Samples);\n\tO.resize(Samples);\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\tI[i] = Scale * static_cast<T>(i);\n\n\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\ttest_mat_mul_vec<matType, vecType>(Transform, I, O);\n\tstd::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();\n\n\treturn static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count());\n}\n\ntemplate <typename packedMatType, typename packedVecType, typename alignedMatType, typename alignedVecType>\nstatic int comp_mat2_mul_vec2(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4);\n\tpackedVecType const Scale(0.01, 0.02);\n\n\tstd::vector<packedVecType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_mul_vec<packedMatType, packedVecType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedVecType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_mul_vec<alignedMatType, alignedVecType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedVecType const A = SISD[i];\n\t\tpackedVecType const B = packedVecType(SIMD[i]);\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename packedVecType, typename alignedMatType, typename alignedVecType>\nstatic int comp_mat3_mul_vec3(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4, 5, 6, 7, 8, 9);\n\tpackedVecType const Scale(0.01, 0.02, 0.05);\n\n\tstd::vector<packedVecType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_mul_vec<packedMatType, packedVecType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedVecType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_mul_vec<alignedMatType, alignedVecType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedVecType const A = SISD[i];\n\t\tpackedVecType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename packedVecType, typename alignedMatType, typename alignedVecType>\nstatic int comp_mat4_mul_vec4(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);\n\tpackedVecType const Scale(0.01, 0.02, 0.03, 0.05);\n\n\tstd::vector<packedVecType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_mul_vec<packedMatType, packedVecType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedVecType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_mul_vec<alignedMatType, alignedVecType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedVecType const A = SISD[i];\n\t\tpackedVecType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tstd::size_t const Samples = 100000;\n\t\n\tint Error = 0;\n\n\tstd::printf(\"mat2 * vec2:\\n\");\n\tError += comp_mat2_mul_vec2<glm::mat2, glm::vec2, glm::aligned_mat2, glm::aligned_vec2>(Samples);\n\t\n\tstd::printf(\"dmat2 * dvec2:\\n\");\n\tError += comp_mat2_mul_vec2<glm::dmat2, glm::dvec2,glm::aligned_dmat2, glm::aligned_dvec2>(Samples);\n\n\tstd::printf(\"mat3 * vec3:\\n\");\n\tError += comp_mat3_mul_vec3<glm::mat3, glm::vec3, glm::aligned_mat3, glm::aligned_vec3>(Samples);\n\t\n\tstd::printf(\"dmat3 * dvec3:\\n\");\n\tError += comp_mat3_mul_vec3<glm::dmat3, glm::dvec3, glm::aligned_dmat3, glm::aligned_dvec3>(Samples);\n\n\tstd::printf(\"mat4 * vec4:\\n\");\n\tError += comp_mat4_mul_vec4<glm::mat4, glm::vec4, glm::aligned_mat4, glm::aligned_vec4>(Samples);\n\t\n\tstd::printf(\"dmat4 * dvec4:\\n\");\n\tError += comp_mat4_mul_vec4<glm::dmat4, glm::dvec4, glm::aligned_dmat4, glm::aligned_dvec4>(Samples);\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/perf/perf_matrix_transpose.cpp",
    "content": "#define GLM_FORCE_INLINE\n#include <glm/matrix.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/matrix_double4x4.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#include <glm/gtc/type_aligned.hpp>\n#include <vector>\n#include <chrono>\n#include <cstdio>\n\ntemplate <typename matType>\nstatic void test_mat_transpose(std::vector<matType> const& I, std::vector<matType>& O)\n{\n\tfor (std::size_t i = 0, n = I.size(); i < n; ++i)\n\t\tO[i] = glm::transpose(I[i]);\n}\n\ntemplate <typename matType>\nstatic int launch_mat_transpose(std::vector<matType>& O, matType const& Scale, std::size_t Samples)\n{\n\ttypedef typename matType::value_type T;\n\n\tstd::vector<matType> I(Samples);\n\tO.resize(Samples);\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\tI[i] = Scale * static_cast<T>(i) + Scale;\n\n\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\ttest_mat_transpose<matType>(I, O);\n\tstd::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();\n\n\treturn static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count());\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat2_transpose(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_transpose<packedMatType>(SISD, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_transpose<alignedMatType>(SIMD, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat3_transpose(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Scale(0.01, 0.02, 0.03, 0.05, 0.01, 0.02, 0.03, 0.05, 0.01);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_transpose<packedMatType>(SISD, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_transpose<alignedMatType>(SIMD, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename alignedMatType>\nstatic int comp_mat4_transpose(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Scale(0.01, 0.02, 0.05, 0.04, 0.02, 0.08, 0.05, 0.01, 0.08, 0.03, 0.05, 0.06, 0.02, 0.03, 0.07, 0.05);\n\n\tstd::vector<packedMatType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_mat_transpose<packedMatType>(SISD, Scale, Samples));\n\n\tstd::vector<alignedMatType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_mat_transpose<alignedMatType>(SIMD, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedMatType const A = SISD[i];\n\t\tpackedMatType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t\tassert(!Error);\n\t}\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tstd::size_t const Samples = 100000;\n\n\tint Error = 0;\n\n\tstd::printf(\"glm::transpose(mat2):\\n\");\n\tError += comp_mat2_transpose<glm::mat2, glm::aligned_mat2>(Samples);\n\t\n\tstd::printf(\"glm::transpose(dmat2):\\n\");\n\tError += comp_mat2_transpose<glm::dmat2, glm::aligned_dmat2>(Samples);\n\n\tstd::printf(\"glm::transpose(mat3):\\n\");\n\tError += comp_mat3_transpose<glm::mat3, glm::aligned_mat3>(Samples);\n\t\n\tstd::printf(\"glm::transpose(dmat3):\\n\");\n\tError += comp_mat3_transpose<glm::dmat3, glm::aligned_dmat3>(Samples);\n\n\tstd::printf(\"glm::transpose(mat4):\\n\");\n\tError += comp_mat4_transpose<glm::mat4, glm::aligned_mat4>(Samples);\n\t\n\tstd::printf(\"glm::transpose(dmat4):\\n\");\n\tError += comp_mat4_transpose<glm::dmat4, glm::aligned_dmat4>(Samples);\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/test/perf/perf_vector_mul_matrix.cpp",
    "content": "#define GLM_FORCE_INLINE\n#include <glm/ext/matrix_float2x2.hpp>\n#include <glm/ext/matrix_double2x2.hpp>\n#include <glm/ext/matrix_float3x3.hpp>\n#include <glm/ext/matrix_double3x3.hpp>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/matrix_double4x4.hpp>\n#include <glm/ext/matrix_transform.hpp>\n#include <glm/ext/matrix_relational.hpp>\n#include <glm/ext/vector_float4.hpp>\n#if GLM_CONFIG_SIMD == GLM_ENABLE\n#include <glm/gtc/type_aligned.hpp>\n#include <vector>\n#include <chrono>\n#include <cstdio>\n\ntemplate <typename matType, typename vecType>\nstatic void test_vec_mul_mat(matType const& M, std::vector<vecType> const& I, std::vector<vecType>& O)\n{\n\tfor (std::size_t i = 0, n = I.size(); i < n; ++i)\n\t\tO[i] = I[i] * M;\n}\n\ntemplate <typename matType, typename vecType>\nstatic int launch_vec_mul_mat(std::vector<vecType>& O, matType const& Transform, vecType const& Scale, std::size_t Samples)\n{\n\ttypedef typename matType::value_type T;\n\n\tstd::vector<vecType> I(Samples);\n\tO.resize(Samples);\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t\tI[i] = Scale * static_cast<T>(i);\n\n\tstd::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();\n\ttest_vec_mul_mat<matType, vecType>(Transform, I, O);\n\tstd::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();\n\n\treturn static_cast<int>(std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count());\n}\n\ntemplate <typename packedMatType, typename packedVecType, typename alignedMatType, typename alignedVecType>\nstatic int comp_vec2_mul_mat2(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4);\n\tpackedVecType const Scale(0.01, 0.02);\n\n\tstd::vector<packedVecType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_vec_mul_mat<packedMatType, packedVecType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedVecType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_vec_mul_mat<alignedMatType, alignedVecType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedVecType const A = SISD[i];\n\t\tpackedVecType const B = packedVecType(SIMD[i]);\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename packedVecType, typename alignedMatType, typename alignedVecType>\nstatic int comp_vec3_mul_mat3(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4, 5, 6, 7, 8, 9);\n\tpackedVecType const Scale(0.01, 0.02, 0.05);\n\n\tstd::vector<packedVecType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_vec_mul_mat<packedMatType, packedVecType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedVecType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_vec_mul_mat<alignedMatType, alignedVecType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedVecType const A = SISD[i];\n\t\tpackedVecType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\ntemplate <typename packedMatType, typename packedVecType, typename alignedMatType, typename alignedVecType>\nstatic int comp_vec4_mul_mat4(std::size_t Samples)\n{\n\ttypedef typename packedMatType::value_type T;\n\t\n\tint Error = 0;\n\n\tpackedMatType const Transform(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);\n\tpackedVecType const Scale(0.01, 0.02, 0.03, 0.05);\n\n\tstd::vector<packedVecType> SISD;\n\tstd::printf(\"- SISD: %d us\\n\", launch_vec_mul_mat<packedMatType, packedVecType>(SISD, Transform, Scale, Samples));\n\n\tstd::vector<alignedVecType> SIMD;\n\tstd::printf(\"- SIMD: %d us\\n\", launch_vec_mul_mat<alignedMatType, alignedVecType>(SIMD, Transform, Scale, Samples));\n\n\tfor(std::size_t i = 0; i < Samples; ++i)\n\t{\n\t\tpackedVecType const A = SISD[i];\n\t\tpackedVecType const B = SIMD[i];\n\t\tError += glm::all(glm::equal(A, B, static_cast<T>(0.001))) ? 0 : 1;\n\t}\n\t\n\treturn Error;\n}\n\nint main()\n{\n\tstd::size_t const Samples = 100000;\n\t\n\tint Error = 0;\n\n\tstd::printf(\"vec2 * mat2:\\n\");\n\tError += comp_vec2_mul_mat2<glm::mat2, glm::vec2, glm::aligned_mat2, glm::aligned_vec2>(Samples);\n\t\n\tstd::printf(\"dvec2 * dmat2:\\n\");\n\tError += comp_vec2_mul_mat2<glm::dmat2, glm::dvec2,glm::aligned_dmat2, glm::aligned_dvec2>(Samples);\n\n\tstd::printf(\"vec3 * mat3:\\n\");\n\tError += comp_vec3_mul_mat3<glm::mat3, glm::vec3, glm::aligned_mat3, glm::aligned_vec3>(Samples);\n\t\n\tstd::printf(\"dvec3 * dmat3:\\n\");\n\tError += comp_vec3_mul_mat3<glm::dmat3, glm::dvec3, glm::aligned_dmat3, glm::aligned_dvec3>(Samples);\n\n\tstd::printf(\"vec4 * mat4:\\n\");\n\tError += comp_vec4_mul_mat4<glm::mat4, glm::vec4, glm::aligned_mat4, glm::aligned_vec4>(Samples);\n\t\n\tstd::printf(\"dvec4 * dmat4:\\n\");\n\tError += comp_vec4_mul_mat4<glm::dmat4, glm::dvec4, glm::aligned_dmat4, glm::aligned_dvec4>(Samples);\n\n\treturn Error;\n}\n\n#else\n\nint main()\n{\n\treturn 0;\n}\n\n#endif\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/util/autoexp.txt",
    "content": "[Visualizer]\n\nglm::detail::tvec2<*>{\n    preview (\n        #(#($c.x,$c.y))\n    )\n    children (\n            #([x]: $c.x,[y]: $c.y)\n    )\n}\n\nglm::detail::tvec3<*>{\n    preview (\n        #($e.x,$e.y,$e.z)\n    )\n    children (\n            #([x]: $e.x,[y]: $e.y,[z]: $e.z)\n    )\n}\n\nglm::detail::tvec4<*>{\n    preview (\n        #($c.x,$c.y,$c.z,$c.w)\n    )\n    children (\n            #([x]: $e.x,[y]: $e.y,[z]: $e.z, #([w]: $e.w))\n    )\n}\n"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/glm/util/glm.natvis",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n<!-- \n  GLM debugger visualizers for Visual Studio\n  \n  Makes debugging code using GLM easier by making data more easily accessible\n  from the debugger watch windows. \n  \n  For example, a variable declared like this: \n  \n  glm::vec4 v = glm::vec4(1, 2, 3, 4);\n  \n  Will show up like this in the default debugger windows:\n  \n   Name    Value\n  ..............................................................\n    v      {x=1.000000 r=1.000000 s=1.000000 y=2.000000 ...}\n  \n  But if you use this file, it will show up like this:\n  \n   Name   Value\n  ..................\n    v     [1 2 3 4]\n  \n  === How to Use ===\n  \n  Copy this file to the project directory of each project using GLM, or just copy it to\n  \n  %USERPROFILE%\\Douments\\Visual Studio 2019\\Visualizers\\ (replace '2019' when necessary)\n  or\n  %VSINSTALLDIR%\\Common7\\Packages\\Debugger\\Visualizers\\ (requires admin access)\n  \n  if you want to use this from every project.\n  See also https://docs.microsoft.com/en-us/visualstudio/debugger/create-custom-views-of-native-objects \n-->\n\n<AutoVisualizer xmlns=\"http://schemas.microsoft.com/vstudio/debugger/natvis/2010\">\n\n  <Type Name=\"glm::vec&lt;1,*,*&gt;\">\n    <DisplayString>[{x,g}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <Item Name=\"x\">x,g</Item>\n    </Expand>\n  </Type>\n  \n  <Type Name=\"glm::vec&lt;2,*,*&gt;\">\n    <DisplayString>[{x,g} {y,g}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <Item Name=\"x\">x,g</Item>\n      <Item Name=\"y\">y,g</Item>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::vec&lt;3,*,*&gt;\">\n    <DisplayString>[{x,g} {y,g} {z,g}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <Item Name=\"x\">x,g</Item>\n      <Item Name=\"y\">y,g</Item>\n      <Item Name=\"z\">z,g</Item>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::vec&lt;4,*,*&gt;\">\n    <DisplayString>[{x,g} {y,g} {z,g} {w,g}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <Item Name=\"x\">x,g</Item>\n      <Item Name=\"y\">y,g</Item>\n      <Item Name=\"z\">z,g</Item>\n      <Item Name=\"w\">w,g</Item>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::vec&lt;1,bool,*&gt;\" Priority=\"High\">\n    <DisplayString>[{(int)x}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <Item Name=\"x\">x</Item>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::vec&lt;2,bool,*&gt;\" Priority=\"High\">\n    <DisplayString>[{(int)x} {(int)y}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <Item Name=\"x\">x</Item>\n      <Item Name=\"y\">y</Item>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::vec&lt;3,bool,*&gt;\" Priority=\"High\">\n    <DisplayString>[{(int)x,g} {(int)y,g} {(int)z,g}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <Item Name=\"x\">x</Item>\n      <Item Name=\"y\">y</Item>\n      <Item Name=\"z\">z</Item>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::vec&lt;4,bool,*&gt;\" Priority=\"High\">\n    <DisplayString>[{(int)x,g} {(int)y,g} {(int)z,g} {(int)w,g}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <Item Name=\"x\">x</Item>\n      <Item Name=\"y\">y</Item>\n      <Item Name=\"z\">z</Item>\n      <Item Name=\"w\">w</Item>\n    </Expand>\n  </Type>\n  \n  <Type Name=\"glm::vec&lt;2,float,*&gt;\" Priority=\"High\">\n    <DisplayString>[{x,g} {y,g}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <CustomListItems MaxItemsPerView=\"1\">\n        <!-- calculate length using fast inverse sqrt -->\n        <Variable Name=\"k\" InitialValue=\"x*x+y*y\"/>\n        <Variable Name=\"n\" InitialValue=\"k/2\"/>\n        <Variable Name=\"i\" InitialValue=\"0x5F3759DF - ((*(int *)&amp;k) &gt;&gt; 1)\"/>\n        <If Condition=\"k != 0\">\n          <Exec>k = *(float *)&amp;i</Exec>\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\n          <Item Name=\"[len]\">1/k,g</Item>\n        </If>\n        <If Condition=\"k == 0\">\n          <Item Name=\"[len]\">0.0f,g</Item>\n        </If>\n      </CustomListItems>\n      <Item Name=\"x\">x,g</Item>\n      <Item Name=\"y\">y,g</Item>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::vec&lt;3,float,*&gt;\" Priority=\"High\">\n    <DisplayString>[{x,g} {y,g} {z,g}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <CustomListItems MaxItemsPerView=\"1\">\n        <!-- calculate length using fast inverse sqrt -->\n        <Variable Name=\"k\" InitialValue=\"x*x+y*y+z*z\"/>\n        <Variable Name=\"n\" InitialValue=\"k/2\"/>\n        <Variable Name=\"i\" InitialValue=\"0x5F3759DF - ((*(int *)&amp;k) &gt;&gt; 1)\"/>\n        <If Condition=\"k != 0\">\n          <Exec>k = *(float *)&amp;i</Exec>\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\n          <Item Name=\"[len]\">1/k,g</Item>\n        </If>\n        <If Condition=\"k == 0\">\n          <Item Name=\"[len]\">0.0f,g</Item>\n        </If>\n      </CustomListItems>\n      <Synthetic Name=\"[rgba]\">\n        <DisplayString>\n          <!-- hex RGBA color - alpha is assumed to be 255 -->\n          #{\n          (unsigned((x&lt;0?0:(x&gt;1?1:x))*255.5f) &lt;&lt; 24) |\n          (unsigned((y&lt;0?0:(y&gt;1?1:y))*255.5f) &lt;&lt; 16) |\n          (unsigned((z&lt;0?0:(z&gt;1?1:z))*255.5f) &lt;&lt; 8) | 0xFF,Xb\n          }\n        </DisplayString>\n      </Synthetic>\n      <Item Name=\"x\">x,g</Item>\n      <Item Name=\"y\">y,g</Item>\n      <Item Name=\"z\">z,g</Item>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::vec&lt;4,float,*&gt;\" Priority=\"High\">\n    <DisplayString>[{x,g} {y,g} {z,g} {w,g}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <CustomListItems MaxItemsPerView=\"1\">\n        <!-- calculate length using fast inverse sqrt -->\n        <Variable Name=\"k\" InitialValue=\"x*x+y*y+z*z+w*w\"/>\n        <Variable Name=\"n\" InitialValue=\"k/2\"/>\n        <Variable Name=\"i\" InitialValue=\"0x5F3759DF - ((*(int *)&amp;k) &gt;&gt; 1)\"/>\n        <If Condition=\"k != 0\">\n          <Exec>k = *(float *)&amp;i</Exec>\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\n          <Item Name=\"[len]\">1/k,g</Item>\n        </If>\n        <If Condition=\"k == 0\">\n          <Item Name=\"[len]\">0.0f,g</Item>\n        </If>\n      </CustomListItems>\n      <Synthetic Name=\"[rgba]\">\n        <DisplayString>\n          <!-- hex RGBA color -->\n          #{\n          (unsigned((x&lt;0?0:(x&gt;1?1:x))*255.5f) &lt;&lt; 24) |\n          (unsigned((y&lt;0?0:(y&gt;1?1:y))*255.5f) &lt;&lt; 16) |\n          (unsigned((z&lt;0?0:(z&gt;1?1:z))*255.5f) &lt;&lt; 8) |\n          (unsigned((w&lt;0?0:(w&gt;1?1:w))*255.5f) &lt;&lt; 0),Xb\n          }\n        </DisplayString>\n      </Synthetic>\n      <Item Name=\"x\">x,g</Item>\n      <Item Name=\"y\">y,g</Item>\n      <Item Name=\"z\">z,g</Item>\n      <Item Name=\"w\">w,g</Item>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::vec&lt;2,double,*&gt;\" Priority=\"High\">\n    <DisplayString>[{x,g} {y,g}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <CustomListItems MaxItemsPerView=\"1\">\n        <!-- calculate length using fast inverse sqrt -->\n        <Variable Name=\"k\" InitialValue=\"x*x+y*y\"/>\n        <Variable Name=\"n\" InitialValue=\"k/2\"/>\n        <Variable Name=\"i\" InitialValue=\"0x5FE6EB50C7B537A9 - ((*(long long *)&amp;k) &gt;&gt; 1)\"/>\n        <If Condition=\"k != 0\">\n          <Exec>k = *(double *)&amp;i</Exec>\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\n          <Item Name=\"[len]\">1/k,g</Item>\n        </If>\n        <If Condition=\"k == 0\">\n          <Item Name=\"[len]\">0.0,g</Item>\n        </If>\n      </CustomListItems>\n      <Item Name=\"x\">x,g</Item>\n      <Item Name=\"y\">y,g</Item>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::vec&lt;3,double,*&gt;\" Priority=\"High\">\n    <DisplayString>[{x,g} {y,g} {z,g}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <CustomListItems MaxItemsPerView=\"1\">\n        <!-- calculate length using fast inverse sqrt -->\n        <Variable Name=\"k\" InitialValue=\"x*x+y*y+z*z\"/>\n        <Variable Name=\"n\" InitialValue=\"k/2\"/>\n        <Variable Name=\"i\" InitialValue=\"0x5FE6EB50C7B537A9 - ((*(long long *)&amp;k) &gt;&gt; 1)\"/>\n        <If Condition=\"k != 0\">\n          <Exec>k = *(double *)&amp;i</Exec>\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\n          <Item Name=\"[len]\">1/k,g</Item>\n        </If>\n        <If Condition=\"k == 0\">\n          <Item Name=\"[len]\">0.0,g</Item>\n        </If>\n      </CustomListItems>\n      <Item Name=\"x\">x,g</Item>\n      <Item Name=\"y\">y,g</Item>\n      <Item Name=\"z\">z,g</Item>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::vec&lt;4,double,*&gt;\" Priority=\"High\">\n    <DisplayString>[{x,g} {y,g} {z,g} {w,g}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <CustomListItems MaxItemsPerView=\"1\">\n        <!-- calculate length using fast inverse sqrt -->\n        <Variable Name=\"k\" InitialValue=\"x*x+y*y+z*z+w*w\"/>\n        <Variable Name=\"n\" InitialValue=\"k/2\"/>\n        <Variable Name=\"i\" InitialValue=\"0x5FE6EB50C7B537A9 - ((*(long long *)&amp;k) &gt;&gt; 1)\"/>\n        <If Condition=\"k != 0\">\n          <Exec>k = *(double *)&amp;i</Exec>\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\n          <Item Name=\"[len]\">1/k,g</Item>\n        </If>\n        <If Condition=\"k == 0\">\n          <Item Name=\"[len]\">0.0,g</Item>\n        </If>\n      </CustomListItems>\n      <Item Name=\"x\">x,g</Item>\n      <Item Name=\"y\">y,g</Item>\n      <Item Name=\"z\">z,g</Item>\n      <Item Name=\"w\">w,g</Item>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::qua&lt;*,*&gt;\">\n    <DisplayString>{w,g} + {x,g}i + {y,g}j + {z,g}k</DisplayString>\n    <Expand HideRawView=\"1\">\n      <Item Name=\"x\">x,g</Item>\n      <Item Name=\"y\">y,g</Item>\n      <Item Name=\"z\">z,g</Item>\n      <Item Name=\"w\">w,g</Item>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::qua&lt;float,*&gt;\" Priority=\"High\">\n    <DisplayString>{w,g} + {x,g}i + {y,g}j + {z,g}k</DisplayString>\n    <Expand HideRawView=\"1\">\n      <CustomListItems MaxItemsPerView=\"1\">\n        <!-- calculate length using fast inverse sqrt -->\n        <Variable Name=\"k\" InitialValue=\"x*x+y*y+z*z+w*w\"/>\n        <Variable Name=\"n\" InitialValue=\"k/2\"/>\n        <Variable Name=\"i\" InitialValue=\"0x5F3759DF - ((*(int *)&amp;k) &gt;&gt; 1)\"/>\n        <If Condition=\"k != 0\">\n          <Exec>k = *(float *)&amp;i</Exec>\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\n          <Exec>k = k * (1.5f - (n * k * k))</Exec>\n          <Item Name=\"[len]\">1/k,g</Item>\n        </If>\n        <If Condition=\"k == 0\">\n          <Item Name=\"[len]\">0.0f,g</Item>\n        </If>\n      </CustomListItems>\n      <Item Name=\"x\">x,g</Item>\n      <Item Name=\"y\">y,g</Item>\n      <Item Name=\"z\">z,g</Item>\n      <Item Name=\"w\">w,g</Item>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::qua&lt;double,*&gt;\" Priority=\"High\">\n    <DisplayString>{w,g} + {x,g}i + {y,g}j + {z,g}k</DisplayString>\n    <Expand HideRawView=\"1\">\n      <CustomListItems MaxItemsPerView=\"1\">\n        <!-- calculate length using fast inverse sqrt -->\n        <Variable Name=\"k\" InitialValue=\"x*x+y*y+z*z+w*w\"/>\n        <Variable Name=\"n\" InitialValue=\"k/2\"/>\n        <Variable Name=\"i\" InitialValue=\"0x5FE6EB50C7B537A9 - ((*(long long *)&amp;k) &gt;&gt; 1)\"/>\n        <If Condition=\"k != 0\">\n          <Exec>k = *(double *)&amp;i</Exec>\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\n          <Exec>k = k * (1.5 - (n * k * k))</Exec>\n          <Item Name=\"[len]\">1/k,g</Item>\n        </If>\n        <If Condition=\"k == 0\">\n          <Item Name=\"[len]\">0.0,g</Item>\n        </If>\n      </CustomListItems>\n      <Item Name=\"x\">x,g</Item>\n      <Item Name=\"y\">y,g</Item>\n      <Item Name=\"z\">z,g</Item>\n      <Item Name=\"w\">w,g</Item>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::mat&lt;2,2,*,*&gt;\">\n    <DisplayString>[{value[0]} {value[1]}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <!-- display matrix in row major order - it makes more sense -->\n      <Synthetic Name=\"row 1\">\n        <DisplayString>[{value[0].x,g} {value[1].x,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 2\">\n        <DisplayString>[{value[0].y,g} {value[1].y,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"columns\">\n        <Expand>\n          <Item Name=\"col 1\">value[0]</Item>\n          <Item Name=\"col 2\">value[1]</Item>\n        </Expand>\n      </Synthetic>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::mat&lt;2,3,*,*&gt;\">\n    <DisplayString>[{value[0]} {value[1]}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <!-- display matrix in row major order - it makes more sense -->\n      <Synthetic Name=\"row 1\">\n        <DisplayString>[{value[0].x,g} {value[1].x,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 2\">\n        <DisplayString>[{value[0].y,g} {value[1].y,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 3\">\n        <DisplayString>[{value[0].z,g} {value[1].z,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"columns\">\n        <Expand>\n          <Item Name=\"col 1\">value[0]</Item>\n          <Item Name=\"col 2\">value[1]</Item>\n        </Expand>\n      </Synthetic>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::mat&lt;2,4,*,*&gt;\">\n    <DisplayString>[{value[0]} {value[1]}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <!-- display matrix in row major order - it makes more sense -->\n      <Synthetic Name=\"row 1\">\n        <DisplayString>[{value[0].x,g} {value[1].x,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 2\">\n        <DisplayString>[{value[0].y,g} {value[1].y,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 3\">\n        <DisplayString>[{value[0].z,g} {value[1].z,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 4\">\n        <DisplayString>[{value[0].w,g} {value[1].w,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"columns\">\n        <Expand>\n          <Item Name=\"col 1\">value[0]</Item>\n          <Item Name=\"col 2\">value[1]</Item>\n        </Expand>\n      </Synthetic>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::mat&lt;3,2*,*&gt;\">\n    <DisplayString>[{value[0]} {value[1]} {value[2]}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <!-- display matrix in row major order - it makes more sense -->\n      <Synthetic Name=\"row 1\">\n        <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 2\">\n        <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"columns\">\n        <Expand>\n          <Item Name=\"col 1\">value[0]</Item>\n          <Item Name=\"col 2\">value[1]</Item>\n          <Item Name=\"col 3\">value[2]</Item>\n        </Expand>\n      </Synthetic>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::mat&lt;3,3,*,*&gt;\">\n    <DisplayString>[{value[0]} {value[1]} {value[2]}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <!-- display matrix in row major order - it makes more sense -->\n      <Synthetic Name=\"row 1\">\n        <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 2\">\n        <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 3\">\n        <DisplayString>[{value[0].z,g} {value[1].z,g} {value[2].z,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"columns\">\n        <Expand>\n          <Item Name=\"col 1\">value[0]</Item>\n          <Item Name=\"col 2\">value[1]</Item>\n          <Item Name=\"col 3\">value[2]</Item>\n        </Expand>\n      </Synthetic>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::mat&lt;3,4,*,*&gt;\">\n    <DisplayString>[{value[0]} {value[1]} {value[2]}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <!-- display matrix in row major order - it makes more sense -->\n      <Synthetic Name=\"row 1\">\n        <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 2\">\n        <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 3\">\n        <DisplayString>[{value[0].z,g} {value[1].z,g} {value[2].z,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 4\">\n        <DisplayString>[{value[0].w,g} {value[1].w,g} {value[2].w,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"columns\">\n        <Expand>\n          <Item Name=\"col 1\">value[0]</Item>\n          <Item Name=\"col 2\">value[1]</Item>\n          <Item Name=\"col 3\">value[2]</Item>\n        </Expand>\n      </Synthetic>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::mat4x2&lt;4,2,*,*&gt;\">\n    <DisplayString>[{value[0]} {value[1]} {value[2]} {value[3]}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <!-- display matrix in row major order - it makes more sense -->\n      <Synthetic Name=\"row 1\">\n        <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g} {value[3].x,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 2\">\n        <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g} {value[3].y,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"columns\">\n        <Expand>\n          <Item Name=\"col 1\">value[0]</Item>\n          <Item Name=\"col 2\">value[1]</Item>\n          <Item Name=\"col 3\">value[2]</Item>\n          <Item Name=\"col 4\">value[3]</Item>\n        </Expand>\n      </Synthetic>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::mat4x3&lt;4,3,*,*&gt;\">\n    <DisplayString>[{value[0]} {value[1]} {value[2]} {value[3]}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <!-- display matrix in row major order - it makes more sense -->\n      <Synthetic Name=\"row 1\">\n        <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g} {value[3].x,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 2\">\n        <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g} {value[3].y,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 3\">\n        <DisplayString>[{value[0].z,g} {value[1].z,g} {value[2].z,g} {value[3].z,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"columns\">\n        <Expand>\n          <Item Name=\"col 1\">value[0]</Item>\n          <Item Name=\"col 2\">value[1]</Item>\n          <Item Name=\"col 3\">value[2]</Item>\n          <Item Name=\"col 4\">value[3]</Item>\n        </Expand>\n      </Synthetic>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::mat&lt;4,4,*,*&gt;\">\n    <DisplayString>[{value[0]} {value[1]} {value[2]} {value[3]}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <!-- display matrix in row major order - it makes more sense -->\n      <Synthetic Name=\"row 1\">\n        <DisplayString>[{value[0].x,g} {value[1].x,g} {value[2].x,g} {value[3].x,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 2\">\n        <DisplayString>[{value[0].y,g} {value[1].y,g} {value[2].y,g} {value[3].y,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 3\">\n        <DisplayString>[{value[0].z,g} {value[1].z,g} {value[2].z,g} {value[3].z,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"row 4\">\n        <DisplayString>[{value[0].w,g} {value[1].w,g} {value[2].w,g} {value[3].w,g}]</DisplayString>\n      </Synthetic>\n      <Synthetic Name=\"columns\">\n        <Expand>\n          <Item Name=\"col 1\">value[0]</Item>\n          <Item Name=\"col 2\">value[1]</Item>\n          <Item Name=\"col 3\">value[2]</Item>\n          <Item Name=\"col 4\">value[3]</Item>\n        </Expand>\n      </Synthetic>\n    </Expand>\n  </Type>\n\n  <Type Name=\"glm::tdualquat&lt;*&gt;\">\n    <DisplayString>[r: {real}] [d: {dual}]</DisplayString>\n    <Expand HideRawView=\"1\">\n      <Item Name=\"real\">real</Item>\n      <Item Name=\"dual\">dual</Item>\n    </Expand>\n  </Type>\n\n</AutoVisualizer>"
  },
  {
    "path": "field_construction/submodules/diff-langsurf-rasterizer/third_party/stbi_image_write.h",
    "content": "/* stb_image_write - v1.16 - public domain - http://nothings.org/stb\n   writes out PNG/BMP/TGA/JPEG/HDR images to C stdio - Sean Barrett 2010-2015\n                                     no warranty implied; use at your own risk\n\n   Before #including,\n\n       #define STB_IMAGE_WRITE_IMPLEMENTATION\n\n   in the file that you want to have the implementation.\n\n   Will probably not work correctly with strict-aliasing optimizations.\n\nABOUT:\n\n   This header file is a library for writing images to C stdio or a callback.\n\n   The PNG output is not optimal; it is 20-50% larger than the file\n   written by a decent optimizing implementation; though providing a custom\n   zlib compress function (see STBIW_ZLIB_COMPRESS) can mitigate that.\n   This library is designed for source code compactness and simplicity,\n   not optimal image file size or run-time performance.\n\nBUILDING:\n\n   You can #define STBIW_ASSERT(x) before the #include to avoid using assert.h.\n   You can #define STBIW_MALLOC(), STBIW_REALLOC(), and STBIW_FREE() to replace\n   malloc,realloc,free.\n   You can #define STBIW_MEMMOVE() to replace memmove()\n   You can #define STBIW_ZLIB_COMPRESS to use a custom zlib-style compress function\n   for PNG compression (instead of the builtin one), it must have the following signature:\n   unsigned char * my_compress(unsigned char *data, int data_len, int *out_len, int quality);\n   The returned data will be freed with STBIW_FREE() (free() by default),\n   so it must be heap allocated with STBIW_MALLOC() (malloc() by default),\n\nUNICODE:\n\n   If compiling for Windows and you wish to use Unicode filenames, compile\n   with\n       #define STBIW_WINDOWS_UTF8\n   and pass utf8-encoded filenames. Call stbiw_convert_wchar_to_utf8 to convert\n   Windows wchar_t filenames to utf8.\n\nUSAGE:\n\n   There are five functions, one for each image file format:\n\n     int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes);\n     int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data);\n     int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data);\n     int stbi_write_jpg(char const *filename, int w, int h, int comp, const void *data, int quality);\n     int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data);\n\n     void stbi_flip_vertically_on_write(int flag); // flag is non-zero to flip data vertically\n\n   There are also five equivalent functions that use an arbitrary write function. You are\n   expected to open/close your file-equivalent before and after calling these:\n\n     int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data, int stride_in_bytes);\n     int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data);\n     int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data);\n     int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data);\n     int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality);\n\n   where the callback is:\n      void stbi_write_func(void *context, void *data, int size);\n\n   You can configure it with these global variables:\n      int stbi_write_tga_with_rle;             // defaults to true; set to 0 to disable RLE\n      int stbi_write_png_compression_level;    // defaults to 8; set to higher for more compression\n      int stbi_write_force_png_filter;         // defaults to -1; set to 0..5 to force a filter mode\n\n\n   You can define STBI_WRITE_NO_STDIO to disable the file variant of these\n   functions, so the library will not use stdio.h at all. However, this will\n   also disable HDR writing, because it requires stdio for formatted output.\n\n   Each function returns 0 on failure and non-0 on success.\n\n   The functions create an image file defined by the parameters. The image\n   is a rectangle of pixels stored from left-to-right, top-to-bottom.\n   Each pixel contains 'comp' channels of data stored interleaved with 8-bits\n   per channel, in the following order: 1=Y, 2=YA, 3=RGB, 4=RGBA. (Y is\n   monochrome color.) The rectangle is 'w' pixels wide and 'h' pixels tall.\n   The *data pointer points to the first byte of the top-left-most pixel.\n   For PNG, \"stride_in_bytes\" is the distance in bytes from the first byte of\n   a row of pixels to the first byte of the next row of pixels.\n\n   PNG creates output files with the same number of components as the input.\n   The BMP format expands Y to RGB in the file format and does not\n   output alpha.\n\n   PNG supports writing rectangles of data even when the bytes storing rows of\n   data are not consecutive in memory (e.g. sub-rectangles of a larger image),\n   by supplying the stride between the beginning of adjacent rows. The other\n   formats do not. (Thus you cannot write a native-format BMP through the BMP\n   writer, both because it is in BGR order and because it may have padding\n   at the end of the line.)\n\n   PNG allows you to set the deflate compression level by setting the global\n   variable 'stbi_write_png_compression_level' (it defaults to 8).\n\n   HDR expects linear float data. Since the format is always 32-bit rgb(e)\n   data, alpha (if provided) is discarded, and for monochrome data it is\n   replicated across all three channels.\n\n   TGA supports RLE or non-RLE compressed data. To use non-RLE-compressed\n   data, set the global variable 'stbi_write_tga_with_rle' to 0.\n\n   JPEG does ignore alpha channels in input data; quality is between 1 and 100.\n   Higher quality looks better but results in a bigger image.\n   JPEG baseline (no JPEG progressive).\n\nCREDITS:\n\n\n   Sean Barrett           -    PNG/BMP/TGA\n   Baldur Karlsson        -    HDR\n   Jean-Sebastien Guay    -    TGA monochrome\n   Tim Kelsey             -    misc enhancements\n   Alan Hickman           -    TGA RLE\n   Emmanuel Julien        -    initial file IO callback implementation\n   Jon Olick              -    original jo_jpeg.cpp code\n   Daniel Gibson          -    integrate JPEG, allow external zlib\n   Aarni Koskela          -    allow choosing PNG filter\n\n   bugfixes:\n      github:Chribba\n      Guillaume Chereau\n      github:jry2\n      github:romigrou\n      Sergio Gonzalez\n      Jonas Karlsson\n      Filip Wasil\n      Thatcher Ulrich\n      github:poppolopoppo\n      Patrick Boettcher\n      github:xeekworx\n      Cap Petschulat\n      Simon Rodriguez\n      Ivan Tikhonov\n      github:ignotion\n      Adam Schackart\n      Andrew Kensler\n\nLICENSE\n\n  See end of file for license information.\n\n*/\n\n#ifndef INCLUDE_STB_IMAGE_WRITE_H\n#define INCLUDE_STB_IMAGE_WRITE_H\n\n#include <stdlib.h>\n\n// if STB_IMAGE_WRITE_STATIC causes problems, try defining STBIWDEF to 'inline' or 'static inline'\n#ifndef STBIWDEF\n#ifdef STB_IMAGE_WRITE_STATIC\n#define STBIWDEF  static\n#else\n#ifdef __cplusplus\n#define STBIWDEF  extern \"C\"\n#else\n#define STBIWDEF  extern\n#endif\n#endif\n#endif\n\n#ifndef STB_IMAGE_WRITE_STATIC  // C++ forbids static forward declarations\nSTBIWDEF int stbi_write_tga_with_rle;\nSTBIWDEF int stbi_write_png_compression_level;\nSTBIWDEF int stbi_write_force_png_filter;\n#endif\n\n#ifndef STBI_WRITE_NO_STDIO\nSTBIWDEF int stbi_write_png(char const *filename, int w, int h, int comp, const void  *data, int stride_in_bytes);\nSTBIWDEF int stbi_write_bmp(char const *filename, int w, int h, int comp, const void  *data);\nSTBIWDEF int stbi_write_tga(char const *filename, int w, int h, int comp, const void  *data);\nSTBIWDEF int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data);\nSTBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const void  *data, int quality);\n\n#ifdef STBIW_WINDOWS_UTF8\nSTBIWDEF int stbiw_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input);\n#endif\n#endif\n\ntypedef void stbi_write_func(void *context, void *data, int size);\n\nSTBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data, int stride_in_bytes);\nSTBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data);\nSTBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void  *data);\nSTBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data);\nSTBIWDEF int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void  *data, int quality);\n\nSTBIWDEF void stbi_flip_vertically_on_write(int flip_boolean);\n\n#endif//INCLUDE_STB_IMAGE_WRITE_H\n\n#ifdef STB_IMAGE_WRITE_IMPLEMENTATION\n\n#ifdef _WIN32\n   #ifndef _CRT_SECURE_NO_WARNINGS\n   #define _CRT_SECURE_NO_WARNINGS\n   #endif\n   #ifndef _CRT_NONSTDC_NO_DEPRECATE\n   #define _CRT_NONSTDC_NO_DEPRECATE\n   #endif\n#endif\n\n#ifndef STBI_WRITE_NO_STDIO\n#include <stdio.h>\n#endif // STBI_WRITE_NO_STDIO\n\n#include <stdarg.h>\n#include <stdlib.h>\n#include <string.h>\n#include <math.h>\n\n#if defined(STBIW_MALLOC) && defined(STBIW_FREE) && (defined(STBIW_REALLOC) || defined(STBIW_REALLOC_SIZED))\n// ok\n#elif !defined(STBIW_MALLOC) && !defined(STBIW_FREE) && !defined(STBIW_REALLOC) && !defined(STBIW_REALLOC_SIZED)\n// ok\n#else\n#error \"Must define all or none of STBIW_MALLOC, STBIW_FREE, and STBIW_REALLOC (or STBIW_REALLOC_SIZED).\"\n#endif\n\n#ifndef STBIW_MALLOC\n#define STBIW_MALLOC(sz)        malloc(sz)\n#define STBIW_REALLOC(p,newsz)  realloc(p,newsz)\n#define STBIW_FREE(p)           free(p)\n#endif\n\n#ifndef STBIW_REALLOC_SIZED\n#define STBIW_REALLOC_SIZED(p,oldsz,newsz) STBIW_REALLOC(p,newsz)\n#endif\n\n\n#ifndef STBIW_MEMMOVE\n#define STBIW_MEMMOVE(a,b,sz) memmove(a,b,sz)\n#endif\n\n\n#ifndef STBIW_ASSERT\n#include <assert.h>\n#define STBIW_ASSERT(x) assert(x)\n#endif\n\n#define STBIW_UCHAR(x) (unsigned char) ((x) & 0xff)\n\n#ifdef STB_IMAGE_WRITE_STATIC\nstatic int stbi_write_png_compression_level = 8;\nstatic int stbi_write_tga_with_rle = 1;\nstatic int stbi_write_force_png_filter = -1;\n#else\nint stbi_write_png_compression_level = 8;\nint stbi_write_tga_with_rle = 1;\nint stbi_write_force_png_filter = -1;\n#endif\n\nstatic int stbi__flip_vertically_on_write = 0;\n\nSTBIWDEF void stbi_flip_vertically_on_write(int flag)\n{\n   stbi__flip_vertically_on_write = flag;\n}\n\ntypedef struct\n{\n   stbi_write_func *func;\n   void *context;\n   unsigned char buffer[64];\n   int buf_used;\n} stbi__write_context;\n\n// initialize a callback-based context\nstatic void stbi__start_write_callbacks(stbi__write_context *s, stbi_write_func *c, void *context)\n{\n   s->func    = c;\n   s->context = context;\n}\n\n#ifndef STBI_WRITE_NO_STDIO\n\nstatic void stbi__stdio_write(void *context, void *data, int size)\n{\n   fwrite(data,1,size,(FILE*) context);\n}\n\n#if defined(_WIN32) && defined(STBIW_WINDOWS_UTF8)\n#ifdef __cplusplus\n#define STBIW_EXTERN extern \"C\"\n#else\n#define STBIW_EXTERN extern\n#endif\nSTBIW_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide);\nSTBIW_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default);\n\nSTBIWDEF int stbiw_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input)\n{\n   return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int) bufferlen, NULL, NULL);\n}\n#endif\n\nstatic FILE *stbiw__fopen(char const *filename, char const *mode)\n{\n   FILE *f;\n#if defined(_WIN32) && defined(STBIW_WINDOWS_UTF8)\n   wchar_t wMode[64];\n   wchar_t wFilename[1024];\n   if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename)/sizeof(*wFilename)))\n      return 0;\n\n   if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode)/sizeof(*wMode)))\n      return 0;\n\n#if defined(_MSC_VER) && _MSC_VER >= 1400\n   if (0 != _wfopen_s(&f, wFilename, wMode))\n      f = 0;\n#else\n   f = _wfopen(wFilename, wMode);\n#endif\n\n#elif defined(_MSC_VER) && _MSC_VER >= 1400\n   if (0 != fopen_s(&f, filename, mode))\n      f=0;\n#else\n   f = fopen(filename, mode);\n#endif\n   return f;\n}\n\nstatic int stbi__start_write_file(stbi__write_context *s, const char *filename)\n{\n   FILE *f = stbiw__fopen(filename, \"wb\");\n   stbi__start_write_callbacks(s, stbi__stdio_write, (void *) f);\n   return f != NULL;\n}\n\nstatic void stbi__end_write_file(stbi__write_context *s)\n{\n   fclose((FILE *)s->context);\n}\n\n#endif // !STBI_WRITE_NO_STDIO\n\ntypedef unsigned int stbiw_uint32;\ntypedef int stb_image_write_test[sizeof(stbiw_uint32)==4 ? 1 : -1];\n\nstatic void stbiw__writefv(stbi__write_context *s, const char *fmt, va_list v)\n{\n   while (*fmt) {\n      switch (*fmt++) {\n         case ' ': break;\n         case '1': { unsigned char x = STBIW_UCHAR(va_arg(v, int));\n                     s->func(s->context,&x,1);\n                     break; }\n         case '2': { int x = va_arg(v,int);\n                     unsigned char b[2];\n                     b[0] = STBIW_UCHAR(x);\n                     b[1] = STBIW_UCHAR(x>>8);\n                     s->func(s->context,b,2);\n                     break; }\n         case '4': { stbiw_uint32 x = va_arg(v,int);\n                     unsigned char b[4];\n                     b[0]=STBIW_UCHAR(x);\n                     b[1]=STBIW_UCHAR(x>>8);\n                     b[2]=STBIW_UCHAR(x>>16);\n                     b[3]=STBIW_UCHAR(x>>24);\n                     s->func(s->context,b,4);\n                     break; }\n         default:\n            STBIW_ASSERT(0);\n            return;\n      }\n   }\n}\n\nstatic void stbiw__writef(stbi__write_context *s, const char *fmt, ...)\n{\n   va_list v;\n   va_start(v, fmt);\n   stbiw__writefv(s, fmt, v);\n   va_end(v);\n}\n\nstatic void stbiw__write_flush(stbi__write_context *s)\n{\n   if (s->buf_used) {\n      s->func(s->context, &s->buffer, s->buf_used);\n      s->buf_used = 0;\n   }\n}\n\nstatic void stbiw__putc(stbi__write_context *s, unsigned char c)\n{\n   s->func(s->context, &c, 1);\n}\n\nstatic void stbiw__write1(stbi__write_context *s, unsigned char a)\n{\n   if ((size_t)s->buf_used + 1 > sizeof(s->buffer))\n      stbiw__write_flush(s);\n   s->buffer[s->buf_used++] = a;\n}\n\nstatic void stbiw__write3(stbi__write_context *s, unsigned char a, unsigned char b, unsigned char c)\n{\n   int n;\n   if ((size_t)s->buf_used + 3 > sizeof(s->buffer))\n      stbiw__write_flush(s);\n   n = s->buf_used;\n   s->buf_used = n+3;\n   s->buffer[n+0] = a;\n   s->buffer[n+1] = b;\n   s->buffer[n+2] = c;\n}\n\nstatic void stbiw__write_pixel(stbi__write_context *s, int rgb_dir, int comp, int write_alpha, int expand_mono, unsigned char *d)\n{\n   unsigned char bg[3] = { 255, 0, 255}, px[3];\n   int k;\n\n   if (write_alpha < 0)\n      stbiw__write1(s, d[comp - 1]);\n\n   switch (comp) {\n      case 2: // 2 pixels = mono + alpha, alpha is written separately, so same as 1-channel case\n      case 1:\n         if (expand_mono)\n            stbiw__write3(s, d[0], d[0], d[0]); // monochrome bmp\n         else\n            stbiw__write1(s, d[0]);  // monochrome TGA\n         break;\n      case 4:\n         if (!write_alpha) {\n            // composite against pink background\n            for (k = 0; k < 3; ++k)\n               px[k] = bg[k] + ((d[k] - bg[k]) * d[3]) / 255;\n            stbiw__write3(s, px[1 - rgb_dir], px[1], px[1 + rgb_dir]);\n            break;\n         }\n         /* FALLTHROUGH */\n      case 3:\n         stbiw__write3(s, d[1 - rgb_dir], d[1], d[1 + rgb_dir]);\n         break;\n   }\n   if (write_alpha > 0)\n      stbiw__write1(s, d[comp - 1]);\n}\n\nstatic void stbiw__write_pixels(stbi__write_context *s, int rgb_dir, int vdir, int x, int y, int comp, void *data, int write_alpha, int scanline_pad, int expand_mono)\n{\n   stbiw_uint32 zero = 0;\n   int i,j, j_end;\n\n   if (y <= 0)\n      return;\n\n   if (stbi__flip_vertically_on_write)\n      vdir *= -1;\n\n   if (vdir < 0) {\n      j_end = -1; j = y-1;\n   } else {\n      j_end =  y; j = 0;\n   }\n\n   for (; j != j_end; j += vdir) {\n      for (i=0; i < x; ++i) {\n         unsigned char *d = (unsigned char *) data + (j*x+i)*comp;\n         stbiw__write_pixel(s, rgb_dir, comp, write_alpha, expand_mono, d);\n      }\n      stbiw__write_flush(s);\n      s->func(s->context, &zero, scanline_pad);\n   }\n}\n\nstatic int stbiw__outfile(stbi__write_context *s, int rgb_dir, int vdir, int x, int y, int comp, int expand_mono, void *data, int alpha, int pad, const char *fmt, ...)\n{\n   if (y < 0 || x < 0) {\n      return 0;\n   } else {\n      va_list v;\n      va_start(v, fmt);\n      stbiw__writefv(s, fmt, v);\n      va_end(v);\n      stbiw__write_pixels(s,rgb_dir,vdir,x,y,comp,data,alpha,pad, expand_mono);\n      return 1;\n   }\n}\n\nstatic int stbi_write_bmp_core(stbi__write_context *s, int x, int y, int comp, const void *data)\n{\n   if (comp != 4) {\n      // write RGB bitmap\n      int pad = (-x*3) & 3;\n      return stbiw__outfile(s,-1,-1,x,y,comp,1,(void *) data,0,pad,\n              \"11 4 22 4\" \"4 44 22 444444\",\n              'B', 'M', 14+40+(x*3+pad)*y, 0,0, 14+40,  // file header\n               40, x,y, 1,24, 0,0,0,0,0,0);             // bitmap header\n   } else {\n      // RGBA bitmaps need a v4 header\n      // use BI_BITFIELDS mode with 32bpp and alpha mask\n      // (straight BI_RGB with alpha mask doesn't work in most readers)\n      return stbiw__outfile(s,-1,-1,x,y,comp,1,(void *)data,1,0,\n         \"11 4 22 4\" \"4 44 22 444444 4444 4 444 444 444 444\",\n         'B', 'M', 14+108+x*y*4, 0, 0, 14+108, // file header\n         108, x,y, 1,32, 3,0,0,0,0,0, 0xff0000,0xff00,0xff,0xff000000u, 0, 0,0,0, 0,0,0, 0,0,0, 0,0,0); // bitmap V4 header\n   }\n}\n\nSTBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data)\n{\n   stbi__write_context s = { 0 };\n   stbi__start_write_callbacks(&s, func, context);\n   return stbi_write_bmp_core(&s, x, y, comp, data);\n}\n\n#ifndef STBI_WRITE_NO_STDIO\nSTBIWDEF int stbi_write_bmp(char const *filename, int x, int y, int comp, const void *data)\n{\n   stbi__write_context s = { 0 };\n   if (stbi__start_write_file(&s,filename)) {\n      int r = stbi_write_bmp_core(&s, x, y, comp, data);\n      stbi__end_write_file(&s);\n      return r;\n   } else\n      return 0;\n}\n#endif //!STBI_WRITE_NO_STDIO\n\nstatic int stbi_write_tga_core(stbi__write_context *s, int x, int y, int comp, void *data)\n{\n   int has_alpha = (comp == 2 || comp == 4);\n   int colorbytes = has_alpha ? comp-1 : comp;\n   int format = colorbytes < 2 ? 3 : 2; // 3 color channels (RGB/RGBA) = 2, 1 color channel (Y/YA) = 3\n\n   if (y < 0 || x < 0)\n      return 0;\n\n   if (!stbi_write_tga_with_rle) {\n      return stbiw__outfile(s, -1, -1, x, y, comp, 0, (void *) data, has_alpha, 0,\n         \"111 221 2222 11\", 0, 0, format, 0, 0, 0, 0, 0, x, y, (colorbytes + has_alpha) * 8, has_alpha * 8);\n   } else {\n      int i,j,k;\n      int jend, jdir;\n\n      stbiw__writef(s, \"111 221 2222 11\", 0,0,format+8, 0,0,0, 0,0,x,y, (colorbytes + has_alpha) * 8, has_alpha * 8);\n\n      if (stbi__flip_vertically_on_write) {\n         j = 0;\n         jend = y;\n         jdir = 1;\n      } else {\n         j = y-1;\n         jend = -1;\n         jdir = -1;\n      }\n      for (; j != jend; j += jdir) {\n         unsigned char *row = (unsigned char *) data + j * x * comp;\n         int len;\n\n         for (i = 0; i < x; i += len) {\n            unsigned char *begin = row + i * comp;\n            int diff = 1;\n            len = 1;\n\n            if (i < x - 1) {\n               ++len;\n               diff = memcmp(begin, row + (i + 1) * comp, comp);\n               if (diff) {\n                  const unsigned char *prev = begin;\n                  for (k = i + 2; k < x && len < 128; ++k) {\n                     if (memcmp(prev, row + k * comp, comp)) {\n                        prev += comp;\n                        ++len;\n                     } else {\n                        --len;\n                        break;\n                     }\n                  }\n               } else {\n                  for (k = i + 2; k < x && len < 128; ++k) {\n                     if (!memcmp(begin, row + k * comp, comp)) {\n                        ++len;\n                     } else {\n                        break;\n                     }\n                  }\n               }\n            }\n\n            if (diff) {\n               unsigned char header = STBIW_UCHAR(len - 1);\n               stbiw__write1(s, header);\n               for (k = 0; k < len; ++k) {\n                  stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin + k * comp);\n               }\n            } else {\n               unsigned char header = STBIW_UCHAR(len - 129);\n               stbiw__write1(s, header);\n               stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin);\n            }\n         }\n      }\n      stbiw__write_flush(s);\n   }\n   return 1;\n}\n\nSTBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data)\n{\n   stbi__write_context s = { 0 };\n   stbi__start_write_callbacks(&s, func, context);\n   return stbi_write_tga_core(&s, x, y, comp, (void *) data);\n}\n\n#ifndef STBI_WRITE_NO_STDIO\nSTBIWDEF int stbi_write_tga(char const *filename, int x, int y, int comp, const void *data)\n{\n   stbi__write_context s = { 0 };\n   if (stbi__start_write_file(&s,filename)) {\n      int r = stbi_write_tga_core(&s, x, y, comp, (void *) data);\n      stbi__end_write_file(&s);\n      return r;\n   } else\n      return 0;\n}\n#endif\n\n// *************************************************************************************************\n// Radiance RGBE HDR writer\n// by Baldur Karlsson\n\n#define stbiw__max(a, b)  ((a) > (b) ? (a) : (b))\n\n#ifndef STBI_WRITE_NO_STDIO\n\nstatic void stbiw__linear_to_rgbe(unsigned char *rgbe, float *linear)\n{\n   int exponent;\n   float maxcomp = stbiw__max(linear[0], stbiw__max(linear[1], linear[2]));\n\n   if (maxcomp < 1e-32f) {\n      rgbe[0] = rgbe[1] = rgbe[2] = rgbe[3] = 0;\n   } else {\n      float normalize = (float) frexp(maxcomp, &exponent) * 256.0f/maxcomp;\n\n      rgbe[0] = (unsigned char)(linear[0] * normalize);\n      rgbe[1] = (unsigned char)(linear[1] * normalize);\n      rgbe[2] = (unsigned char)(linear[2] * normalize);\n      rgbe[3] = (unsigned char)(exponent + 128);\n   }\n}\n\nstatic void stbiw__write_run_data(stbi__write_context *s, int length, unsigned char databyte)\n{\n   unsigned char lengthbyte = STBIW_UCHAR(length+128);\n   STBIW_ASSERT(length+128 <= 255);\n   s->func(s->context, &lengthbyte, 1);\n   s->func(s->context, &databyte, 1);\n}\n\nstatic void stbiw__write_dump_data(stbi__write_context *s, int length, unsigned char *data)\n{\n   unsigned char lengthbyte = STBIW_UCHAR(length);\n   STBIW_ASSERT(length <= 128); // inconsistent with spec but consistent with official code\n   s->func(s->context, &lengthbyte, 1);\n   s->func(s->context, data, length);\n}\n\nstatic void stbiw__write_hdr_scanline(stbi__write_context *s, int width, int ncomp, unsigned char *scratch, float *scanline)\n{\n   unsigned char scanlineheader[4] = { 2, 2, 0, 0 };\n   unsigned char rgbe[4];\n   float linear[3];\n   int x;\n\n   scanlineheader[2] = (width&0xff00)>>8;\n   scanlineheader[3] = (width&0x00ff);\n\n   /* skip RLE for images too small or large */\n   if (width < 8 || width >= 32768) {\n      for (x=0; x < width; x++) {\n         switch (ncomp) {\n            case 4: /* fallthrough */\n            case 3: linear[2] = scanline[x*ncomp + 2];\n                    linear[1] = scanline[x*ncomp + 1];\n                    linear[0] = scanline[x*ncomp + 0];\n                    break;\n            default:\n                    linear[0] = linear[1] = linear[2] = scanline[x*ncomp + 0];\n                    break;\n         }\n         stbiw__linear_to_rgbe(rgbe, linear);\n         s->func(s->context, rgbe, 4);\n      }\n   } else {\n      int c,r;\n      /* encode into scratch buffer */\n      for (x=0; x < width; x++) {\n         switch(ncomp) {\n            case 4: /* fallthrough */\n            case 3: linear[2] = scanline[x*ncomp + 2];\n                    linear[1] = scanline[x*ncomp + 1];\n                    linear[0] = scanline[x*ncomp + 0];\n                    break;\n            default:\n                    linear[0] = linear[1] = linear[2] = scanline[x*ncomp + 0];\n                    break;\n         }\n         stbiw__linear_to_rgbe(rgbe, linear);\n         scratch[x + width*0] = rgbe[0];\n         scratch[x + width*1] = rgbe[1];\n         scratch[x + width*2] = rgbe[2];\n         scratch[x + width*3] = rgbe[3];\n      }\n\n      s->func(s->context, scanlineheader, 4);\n\n      /* RLE each component separately */\n      for (c=0; c < 4; c++) {\n         unsigned char *comp = &scratch[width*c];\n\n         x = 0;\n         while (x < width) {\n            // find first run\n            r = x;\n            while (r+2 < width) {\n               if (comp[r] == comp[r+1] && comp[r] == comp[r+2])\n                  break;\n               ++r;\n            }\n            if (r+2 >= width)\n               r = width;\n            // dump up to first run\n            while (x < r) {\n               int len = r-x;\n               if (len > 128) len = 128;\n               stbiw__write_dump_data(s, len, &comp[x]);\n               x += len;\n            }\n            // if there's a run, output it\n            if (r+2 < width) { // same test as what we break out of in search loop, so only true if we break'd\n               // find next byte after run\n               while (r < width && comp[r] == comp[x])\n                  ++r;\n               // output run up to r\n               while (x < r) {\n                  int len = r-x;\n                  if (len > 127) len = 127;\n                  stbiw__write_run_data(s, len, comp[x]);\n                  x += len;\n               }\n            }\n         }\n      }\n   }\n}\n\nstatic int stbi_write_hdr_core(stbi__write_context *s, int x, int y, int comp, float *data)\n{\n   if (y <= 0 || x <= 0 || data == NULL)\n      return 0;\n   else {\n      // Each component is stored separately. Allocate scratch space for full output scanline.\n      unsigned char *scratch = (unsigned char *) STBIW_MALLOC(x*4);\n      int i, len;\n      char buffer[128];\n      char header[] = \"#?RADIANCE\\n# Written by stb_image_write.h\\nFORMAT=32-bit_rle_rgbe\\n\";\n      s->func(s->context, header, sizeof(header)-1);\n\n#ifdef __STDC_LIB_EXT1__\n      len = sprintf_s(buffer, sizeof(buffer), \"EXPOSURE=          1.0000000000000\\n\\n-Y %d +X %d\\n\", y, x);\n#else\n      len = sprintf(buffer, \"EXPOSURE=          1.0000000000000\\n\\n-Y %d +X %d\\n\", y, x);\n#endif\n      s->func(s->context, buffer, len);\n\n      for(i=0; i < y; i++)\n         stbiw__write_hdr_scanline(s, x, comp, scratch, data + comp*x*(stbi__flip_vertically_on_write ? y-1-i : i));\n      STBIW_FREE(scratch);\n      return 1;\n   }\n}\n\nSTBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const float *data)\n{\n   stbi__write_context s = { 0 };\n   stbi__start_write_callbacks(&s, func, context);\n   return stbi_write_hdr_core(&s, x, y, comp, (float *) data);\n}\n\nSTBIWDEF int stbi_write_hdr(char const *filename, int x, int y, int comp, const float *data)\n{\n   stbi__write_context s = { 0 };\n   if (stbi__start_write_file(&s,filename)) {\n      int r = stbi_write_hdr_core(&s, x, y, comp, (float *) data);\n      stbi__end_write_file(&s);\n      return r;\n   } else\n      return 0;\n}\n#endif // STBI_WRITE_NO_STDIO\n\n\n//////////////////////////////////////////////////////////////////////////////\n//\n// PNG writer\n//\n\n#ifndef STBIW_ZLIB_COMPRESS\n// stretchy buffer; stbiw__sbpush() == vector<>::push_back() -- stbiw__sbcount() == vector<>::size()\n#define stbiw__sbraw(a) ((int *) (void *) (a) - 2)\n#define stbiw__sbm(a)   stbiw__sbraw(a)[0]\n#define stbiw__sbn(a)   stbiw__sbraw(a)[1]\n\n#define stbiw__sbneedgrow(a,n)  ((a)==0 || stbiw__sbn(a)+n >= stbiw__sbm(a))\n#define stbiw__sbmaybegrow(a,n) (stbiw__sbneedgrow(a,(n)) ? stbiw__sbgrow(a,n) : 0)\n#define stbiw__sbgrow(a,n)  stbiw__sbgrowf((void **) &(a), (n), sizeof(*(a)))\n\n#define stbiw__sbpush(a, v)      (stbiw__sbmaybegrow(a,1), (a)[stbiw__sbn(a)++] = (v))\n#define stbiw__sbcount(a)        ((a) ? stbiw__sbn(a) : 0)\n#define stbiw__sbfree(a)         ((a) ? STBIW_FREE(stbiw__sbraw(a)),0 : 0)\n\nstatic void *stbiw__sbgrowf(void **arr, int increment, int itemsize)\n{\n   int m = *arr ? 2*stbiw__sbm(*arr)+increment : increment+1;\n   void *p = STBIW_REALLOC_SIZED(*arr ? stbiw__sbraw(*arr) : 0, *arr ? (stbiw__sbm(*arr)*itemsize + sizeof(int)*2) : 0, itemsize * m + sizeof(int)*2);\n   STBIW_ASSERT(p);\n   if (p) {\n      if (!*arr) ((int *) p)[1] = 0;\n      *arr = (void *) ((int *) p + 2);\n      stbiw__sbm(*arr) = m;\n   }\n   return *arr;\n}\n\nstatic unsigned char *stbiw__zlib_flushf(unsigned char *data, unsigned int *bitbuffer, int *bitcount)\n{\n   while (*bitcount >= 8) {\n      stbiw__sbpush(data, STBIW_UCHAR(*bitbuffer));\n      *bitbuffer >>= 8;\n      *bitcount -= 8;\n   }\n   return data;\n}\n\nstatic int stbiw__zlib_bitrev(int code, int codebits)\n{\n   int res=0;\n   while (codebits--) {\n      res = (res << 1) | (code & 1);\n      code >>= 1;\n   }\n   return res;\n}\n\nstatic unsigned int stbiw__zlib_countm(unsigned char *a, unsigned char *b, int limit)\n{\n   int i;\n   for (i=0; i < limit && i < 258; ++i)\n      if (a[i] != b[i]) break;\n   return i;\n}\n\nstatic unsigned int stbiw__zhash(unsigned char *data)\n{\n   stbiw_uint32 hash = data[0] + (data[1] << 8) + (data[2] << 16);\n   hash ^= hash << 3;\n   hash += hash >> 5;\n   hash ^= hash << 4;\n   hash += hash >> 17;\n   hash ^= hash << 25;\n   hash += hash >> 6;\n   return hash;\n}\n\n#define stbiw__zlib_flush() (out = stbiw__zlib_flushf(out, &bitbuf, &bitcount))\n#define stbiw__zlib_add(code,codebits) \\\n      (bitbuf |= (code) << bitcount, bitcount += (codebits), stbiw__zlib_flush())\n#define stbiw__zlib_huffa(b,c)  stbiw__zlib_add(stbiw__zlib_bitrev(b,c),c)\n// default huffman tables\n#define stbiw__zlib_huff1(n)  stbiw__zlib_huffa(0x30 + (n), 8)\n#define stbiw__zlib_huff2(n)  stbiw__zlib_huffa(0x190 + (n)-144, 9)\n#define stbiw__zlib_huff3(n)  stbiw__zlib_huffa(0 + (n)-256,7)\n#define stbiw__zlib_huff4(n)  stbiw__zlib_huffa(0xc0 + (n)-280,8)\n#define stbiw__zlib_huff(n)  ((n) <= 143 ? stbiw__zlib_huff1(n) : (n) <= 255 ? stbiw__zlib_huff2(n) : (n) <= 279 ? stbiw__zlib_huff3(n) : stbiw__zlib_huff4(n))\n#define stbiw__zlib_huffb(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : stbiw__zlib_huff2(n))\n\n#define stbiw__ZHASH   16384\n\n#endif // STBIW_ZLIB_COMPRESS\n\nSTBIWDEF unsigned char * stbi_zlib_compress(unsigned char *data, int data_len, int *out_len, int quality)\n{\n#ifdef STBIW_ZLIB_COMPRESS\n   // user provided a zlib compress implementation, use that\n   return STBIW_ZLIB_COMPRESS(data, data_len, out_len, quality);\n#else // use builtin\n   static unsigned short lengthc[] = { 3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258, 259 };\n   static unsigned char  lengtheb[]= { 0,0,0,0,0,0,0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4,  4,  5,  5,  5,  5,  0 };\n   static unsigned short distc[]   = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577, 32768 };\n   static unsigned char  disteb[]  = { 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13 };\n   unsigned int bitbuf=0;\n   int i,j, bitcount=0;\n   unsigned char *out = NULL;\n   unsigned char ***hash_table = (unsigned char***) STBIW_MALLOC(stbiw__ZHASH * sizeof(unsigned char**));\n   if (hash_table == NULL)\n      return NULL;\n   if (quality < 5) quality = 5;\n\n   stbiw__sbpush(out, 0x78);   // DEFLATE 32K window\n   stbiw__sbpush(out, 0x5e);   // FLEVEL = 1\n   stbiw__zlib_add(1,1);  // BFINAL = 1\n   stbiw__zlib_add(1,2);  // BTYPE = 1 -- fixed huffman\n\n   for (i=0; i < stbiw__ZHASH; ++i)\n      hash_table[i] = NULL;\n\n   i=0;\n   while (i < data_len-3) {\n      // hash next 3 bytes of data to be compressed\n      int h = stbiw__zhash(data+i)&(stbiw__ZHASH-1), best=3;\n      unsigned char *bestloc = 0;\n      unsigned char **hlist = hash_table[h];\n      int n = stbiw__sbcount(hlist);\n      for (j=0; j < n; ++j) {\n         if (hlist[j]-data > i-32768) { // if entry lies within window\n            int d = stbiw__zlib_countm(hlist[j], data+i, data_len-i);\n            if (d >= best) { best=d; bestloc=hlist[j]; }\n         }\n      }\n      // when hash table entry is too long, delete half the entries\n      if (hash_table[h] && stbiw__sbn(hash_table[h]) == 2*quality) {\n         STBIW_MEMMOVE(hash_table[h], hash_table[h]+quality, sizeof(hash_table[h][0])*quality);\n         stbiw__sbn(hash_table[h]) = quality;\n      }\n      stbiw__sbpush(hash_table[h],data+i);\n\n      if (bestloc) {\n         // \"lazy matching\" - check match at *next* byte, and if it's better, do cur byte as literal\n         h = stbiw__zhash(data+i+1)&(stbiw__ZHASH-1);\n         hlist = hash_table[h];\n         n = stbiw__sbcount(hlist);\n         for (j=0; j < n; ++j) {\n            if (hlist[j]-data > i-32767) {\n               int e = stbiw__zlib_countm(hlist[j], data+i+1, data_len-i-1);\n               if (e > best) { // if next match is better, bail on current match\n                  bestloc = NULL;\n                  break;\n               }\n            }\n         }\n      }\n\n      if (bestloc) {\n         int d = (int) (data+i - bestloc); // distance back\n         STBIW_ASSERT(d <= 32767 && best <= 258);\n         for (j=0; best > lengthc[j+1]-1; ++j);\n         stbiw__zlib_huff(j+257);\n         if (lengtheb[j]) stbiw__zlib_add(best - lengthc[j], lengtheb[j]);\n         for (j=0; d > distc[j+1]-1; ++j);\n         stbiw__zlib_add(stbiw__zlib_bitrev(j,5),5);\n         if (disteb[j]) stbiw__zlib_add(d - distc[j], disteb[j]);\n         i += best;\n      } else {\n         stbiw__zlib_huffb(data[i]);\n         ++i;\n      }\n   }\n   // write out final bytes\n   for (;i < data_len; ++i)\n      stbiw__zlib_huffb(data[i]);\n   stbiw__zlib_huff(256); // end of block\n   // pad with 0 bits to byte boundary\n   while (bitcount)\n      stbiw__zlib_add(0,1);\n\n   for (i=0; i < stbiw__ZHASH; ++i)\n      (void) stbiw__sbfree(hash_table[i]);\n   STBIW_FREE(hash_table);\n\n   // store uncompressed instead if compression was worse\n   if (stbiw__sbn(out) > data_len + 2 + ((data_len+32766)/32767)*5) {\n      stbiw__sbn(out) = 2;  // truncate to DEFLATE 32K window and FLEVEL = 1\n      for (j = 0; j < data_len;) {\n         int blocklen = data_len - j;\n         if (blocklen > 32767) blocklen = 32767;\n         stbiw__sbpush(out, data_len - j == blocklen); // BFINAL = ?, BTYPE = 0 -- no compression\n         stbiw__sbpush(out, STBIW_UCHAR(blocklen)); // LEN\n         stbiw__sbpush(out, STBIW_UCHAR(blocklen >> 8));\n         stbiw__sbpush(out, STBIW_UCHAR(~blocklen)); // NLEN\n         stbiw__sbpush(out, STBIW_UCHAR(~blocklen >> 8));\n         memcpy(out+stbiw__sbn(out), data+j, blocklen);\n         stbiw__sbn(out) += blocklen;\n         j += blocklen;\n      }\n   }\n\n   {\n      // compute adler32 on input\n      unsigned int s1=1, s2=0;\n      int blocklen = (int) (data_len % 5552);\n      j=0;\n      while (j < data_len) {\n         for (i=0; i < blocklen; ++i) { s1 += data[j+i]; s2 += s1; }\n         s1 %= 65521; s2 %= 65521;\n         j += blocklen;\n         blocklen = 5552;\n      }\n      stbiw__sbpush(out, STBIW_UCHAR(s2 >> 8));\n      stbiw__sbpush(out, STBIW_UCHAR(s2));\n      stbiw__sbpush(out, STBIW_UCHAR(s1 >> 8));\n      stbiw__sbpush(out, STBIW_UCHAR(s1));\n   }\n   *out_len = stbiw__sbn(out);\n   // make returned pointer freeable\n   STBIW_MEMMOVE(stbiw__sbraw(out), out, *out_len);\n   return (unsigned char *) stbiw__sbraw(out);\n#endif // STBIW_ZLIB_COMPRESS\n}\n\nstatic unsigned int stbiw__crc32(unsigned char *buffer, int len)\n{\n#ifdef STBIW_CRC32\n    return STBIW_CRC32(buffer, len);\n#else\n   static unsigned int crc_table[256] =\n   {\n      0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,\n      0x0eDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,\n      0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,\n      0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,\n      0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,\n      0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,\n      0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,\n      0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,\n      0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,\n      0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,\n      0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,\n      0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,\n      0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,\n      0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,\n      0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n      0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,\n      0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,\n      0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,\n      0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,\n      0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,\n      0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,\n      0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,\n      0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,\n      0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,\n      0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,\n      0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,\n      0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,\n      0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,\n      0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,\n      0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n      0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,\n      0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D\n   };\n\n   unsigned int crc = ~0u;\n   int i;\n   for (i=0; i < len; ++i)\n      crc = (crc >> 8) ^ crc_table[buffer[i] ^ (crc & 0xff)];\n   return ~crc;\n#endif\n}\n\n#define stbiw__wpng4(o,a,b,c,d) ((o)[0]=STBIW_UCHAR(a),(o)[1]=STBIW_UCHAR(b),(o)[2]=STBIW_UCHAR(c),(o)[3]=STBIW_UCHAR(d),(o)+=4)\n#define stbiw__wp32(data,v) stbiw__wpng4(data, (v)>>24,(v)>>16,(v)>>8,(v));\n#define stbiw__wptag(data,s) stbiw__wpng4(data, s[0],s[1],s[2],s[3])\n\nstatic void stbiw__wpcrc(unsigned char **data, int len)\n{\n   unsigned int crc = stbiw__crc32(*data - len - 4, len+4);\n   stbiw__wp32(*data, crc);\n}\n\nstatic unsigned char stbiw__paeth(int a, int b, int c)\n{\n   int p = a + b - c, pa = abs(p-a), pb = abs(p-b), pc = abs(p-c);\n   if (pa <= pb && pa <= pc) return STBIW_UCHAR(a);\n   if (pb <= pc) return STBIW_UCHAR(b);\n   return STBIW_UCHAR(c);\n}\n\n// @OPTIMIZE: provide an option that always forces left-predict or paeth predict\nstatic void stbiw__encode_png_line(unsigned char *pixels, int stride_bytes, int width, int height, int y, int n, int filter_type, signed char *line_buffer)\n{\n   static int mapping[] = { 0,1,2,3,4 };\n   static int firstmap[] = { 0,1,0,5,6 };\n   int *mymap = (y != 0) ? mapping : firstmap;\n   int i;\n   int type = mymap[filter_type];\n   unsigned char *z = pixels + stride_bytes * (stbi__flip_vertically_on_write ? height-1-y : y);\n   int signed_stride = stbi__flip_vertically_on_write ? -stride_bytes : stride_bytes;\n\n   if (type==0) {\n      memcpy(line_buffer, z, width*n);\n      return;\n   }\n\n   // first loop isn't optimized since it's just one pixel\n   for (i = 0; i < n; ++i) {\n      switch (type) {\n         case 1: line_buffer[i] = z[i]; break;\n         case 2: line_buffer[i] = z[i] - z[i-signed_stride]; break;\n         case 3: line_buffer[i] = z[i] - (z[i-signed_stride]>>1); break;\n         case 4: line_buffer[i] = (signed char) (z[i] - stbiw__paeth(0,z[i-signed_stride],0)); break;\n         case 5: line_buffer[i] = z[i]; break;\n         case 6: line_buffer[i] = z[i]; break;\n      }\n   }\n   switch (type) {\n      case 1: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-n]; break;\n      case 2: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-signed_stride]; break;\n      case 3: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - ((z[i-n] + z[i-signed_stride])>>1); break;\n      case 4: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], z[i-signed_stride], z[i-signed_stride-n]); break;\n      case 5: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - (z[i-n]>>1); break;\n      case 6: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], 0,0); break;\n   }\n}\n\nSTBIWDEF unsigned char *stbi_write_png_to_mem(const unsigned char *pixels, int stride_bytes, int x, int y, int n, int *out_len)\n{\n   int force_filter = stbi_write_force_png_filter;\n   int ctype[5] = { -1, 0, 4, 2, 6 };\n   unsigned char sig[8] = { 137,80,78,71,13,10,26,10 };\n   unsigned char *out,*o, *filt, *zlib;\n   signed char *line_buffer;\n   int j,zlen;\n\n   if (stride_bytes == 0)\n      stride_bytes = x * n;\n\n   if (force_filter >= 5) {\n      force_filter = -1;\n   }\n\n   filt = (unsigned char *) STBIW_MALLOC((x*n+1) * y); if (!filt) return 0;\n   line_buffer = (signed char *) STBIW_MALLOC(x * n); if (!line_buffer) { STBIW_FREE(filt); return 0; }\n   for (j=0; j < y; ++j) {\n      int filter_type;\n      if (force_filter > -1) {\n         filter_type = force_filter;\n         stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, force_filter, line_buffer);\n      } else { // Estimate the best filter by running through all of them:\n         int best_filter = 0, best_filter_val = 0x7fffffff, est, i;\n         for (filter_type = 0; filter_type < 5; filter_type++) {\n            stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, filter_type, line_buffer);\n\n            // Estimate the entropy of the line using this filter; the less, the better.\n            est = 0;\n            for (i = 0; i < x*n; ++i) {\n               est += abs((signed char) line_buffer[i]);\n            }\n            if (est < best_filter_val) {\n               best_filter_val = est;\n               best_filter = filter_type;\n            }\n         }\n         if (filter_type != best_filter) {  // If the last iteration already got us the best filter, don't redo it\n            stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, best_filter, line_buffer);\n            filter_type = best_filter;\n         }\n      }\n      // when we get here, filter_type contains the filter type, and line_buffer contains the data\n      filt[j*(x*n+1)] = (unsigned char) filter_type;\n      STBIW_MEMMOVE(filt+j*(x*n+1)+1, line_buffer, x*n);\n   }\n   STBIW_FREE(line_buffer);\n   zlib = stbi_zlib_compress(filt, y*( x*n+1), &zlen, stbi_write_png_compression_level);\n   STBIW_FREE(filt);\n   if (!zlib) return 0;\n\n   // each tag requires 12 bytes of overhead\n   out = (unsigned char *) STBIW_MALLOC(8 + 12+13 + 12+zlen + 12);\n   if (!out) return 0;\n   *out_len = 8 + 12+13 + 12+zlen + 12;\n\n   o=out;\n   STBIW_MEMMOVE(o,sig,8); o+= 8;\n   stbiw__wp32(o, 13); // header length\n   stbiw__wptag(o, \"IHDR\");\n   stbiw__wp32(o, x);\n   stbiw__wp32(o, y);\n   *o++ = 8;\n   *o++ = STBIW_UCHAR(ctype[n]);\n   *o++ = 0;\n   *o++ = 0;\n   *o++ = 0;\n   stbiw__wpcrc(&o,13);\n\n   stbiw__wp32(o, zlen);\n   stbiw__wptag(o, \"IDAT\");\n   STBIW_MEMMOVE(o, zlib, zlen);\n   o += zlen;\n   STBIW_FREE(zlib);\n   stbiw__wpcrc(&o, zlen);\n\n   stbiw__wp32(o,0);\n   stbiw__wptag(o, \"IEND\");\n   stbiw__wpcrc(&o,0);\n\n   STBIW_ASSERT(o == out + *out_len);\n\n   return out;\n}\n\n#ifndef STBI_WRITE_NO_STDIO\nSTBIWDEF int stbi_write_png(char const *filename, int x, int y, int comp, const void *data, int stride_bytes)\n{\n   FILE *f;\n   int len;\n   unsigned char *png = stbi_write_png_to_mem((const unsigned char *) data, stride_bytes, x, y, comp, &len);\n   if (png == NULL) return 0;\n\n   f = stbiw__fopen(filename, \"wb\");\n   if (!f) { STBIW_FREE(png); return 0; }\n   fwrite(png, 1, len, f);\n   fclose(f);\n   STBIW_FREE(png);\n   return 1;\n}\n#endif\n\nSTBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int stride_bytes)\n{\n   int len;\n   unsigned char *png = stbi_write_png_to_mem((const unsigned char *) data, stride_bytes, x, y, comp, &len);\n   if (png == NULL) return 0;\n   func(context, png, len);\n   STBIW_FREE(png);\n   return 1;\n}\n\n\n/* ***************************************************************************\n *\n * JPEG writer\n *\n * This is based on Jon Olick's jo_jpeg.cpp:\n * public domain Simple, Minimalistic JPEG writer - http://www.jonolick.com/code.html\n */\n\nstatic const unsigned char stbiw__jpg_ZigZag[] = { 0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,\n      24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63 };\n\nstatic void stbiw__jpg_writeBits(stbi__write_context *s, int *bitBufP, int *bitCntP, const unsigned short *bs) {\n   int bitBuf = *bitBufP, bitCnt = *bitCntP;\n   bitCnt += bs[1];\n   bitBuf |= bs[0] << (24 - bitCnt);\n   while(bitCnt >= 8) {\n      unsigned char c = (bitBuf >> 16) & 255;\n      stbiw__putc(s, c);\n      if(c == 255) {\n         stbiw__putc(s, 0);\n      }\n      bitBuf <<= 8;\n      bitCnt -= 8;\n   }\n   *bitBufP = bitBuf;\n   *bitCntP = bitCnt;\n}\n\nstatic void stbiw__jpg_DCT(float *d0p, float *d1p, float *d2p, float *d3p, float *d4p, float *d5p, float *d6p, float *d7p) {\n   float d0 = *d0p, d1 = *d1p, d2 = *d2p, d3 = *d3p, d4 = *d4p, d5 = *d5p, d6 = *d6p, d7 = *d7p;\n   float z1, z2, z3, z4, z5, z11, z13;\n\n   float tmp0 = d0 + d7;\n   float tmp7 = d0 - d7;\n   float tmp1 = d1 + d6;\n   float tmp6 = d1 - d6;\n   float tmp2 = d2 + d5;\n   float tmp5 = d2 - d5;\n   float tmp3 = d3 + d4;\n   float tmp4 = d3 - d4;\n\n   // Even part\n   float tmp10 = tmp0 + tmp3;   // phase 2\n   float tmp13 = tmp0 - tmp3;\n   float tmp11 = tmp1 + tmp2;\n   float tmp12 = tmp1 - tmp2;\n\n   d0 = tmp10 + tmp11;       // phase 3\n   d4 = tmp10 - tmp11;\n\n   z1 = (tmp12 + tmp13) * 0.707106781f; // c4\n   d2 = tmp13 + z1;       // phase 5\n   d6 = tmp13 - z1;\n\n   // Odd part\n   tmp10 = tmp4 + tmp5;       // phase 2\n   tmp11 = tmp5 + tmp6;\n   tmp12 = tmp6 + tmp7;\n\n   // The rotator is modified from fig 4-8 to avoid extra negations.\n   z5 = (tmp10 - tmp12) * 0.382683433f; // c6\n   z2 = tmp10 * 0.541196100f + z5; // c2-c6\n   z4 = tmp12 * 1.306562965f + z5; // c2+c6\n   z3 = tmp11 * 0.707106781f; // c4\n\n   z11 = tmp7 + z3;      // phase 5\n   z13 = tmp7 - z3;\n\n   *d5p = z13 + z2;         // phase 6\n   *d3p = z13 - z2;\n   *d1p = z11 + z4;\n   *d7p = z11 - z4;\n\n   *d0p = d0;  *d2p = d2;  *d4p = d4;  *d6p = d6;\n}\n\nstatic void stbiw__jpg_calcBits(int val, unsigned short bits[2]) {\n   int tmp1 = val < 0 ? -val : val;\n   val = val < 0 ? val-1 : val;\n   bits[1] = 1;\n   while(tmp1 >>= 1) {\n      ++bits[1];\n   }\n   bits[0] = val & ((1<<bits[1])-1);\n}\n\nstatic int stbiw__jpg_processDU(stbi__write_context *s, int *bitBuf, int *bitCnt, float *CDU, int du_stride, float *fdtbl, int DC, const unsigned short HTDC[256][2], const unsigned short HTAC[256][2]) {\n   const unsigned short EOB[2] = { HTAC[0x00][0], HTAC[0x00][1] };\n   const unsigned short M16zeroes[2] = { HTAC[0xF0][0], HTAC[0xF0][1] };\n   int dataOff, i, j, n, diff, end0pos, x, y;\n   int DU[64];\n\n   // DCT rows\n   for(dataOff=0, n=du_stride*8; dataOff<n; dataOff+=du_stride) {\n      stbiw__jpg_DCT(&CDU[dataOff], &CDU[dataOff+1], &CDU[dataOff+2], &CDU[dataOff+3], &CDU[dataOff+4], &CDU[dataOff+5], &CDU[dataOff+6], &CDU[dataOff+7]);\n   }\n   // DCT columns\n   for(dataOff=0; dataOff<8; ++dataOff) {\n      stbiw__jpg_DCT(&CDU[dataOff], &CDU[dataOff+du_stride], &CDU[dataOff+du_stride*2], &CDU[dataOff+du_stride*3], &CDU[dataOff+du_stride*4],\n                     &CDU[dataOff+du_stride*5], &CDU[dataOff+du_stride*6], &CDU[dataOff+du_stride*7]);\n   }\n   // Quantize/descale/zigzag the coefficients\n   for(y = 0, j=0; y < 8; ++y) {\n      for(x = 0; x < 8; ++x,++j) {\n         float v;\n         i = y*du_stride+x;\n         v = CDU[i]*fdtbl[j];\n         // DU[stbiw__jpg_ZigZag[j]] = (int)(v < 0 ? ceilf(v - 0.5f) : floorf(v + 0.5f));\n         // ceilf() and floorf() are C99, not C89, but I /think/ they're not needed here anyway?\n         DU[stbiw__jpg_ZigZag[j]] = (int)(v < 0 ? v - 0.5f : v + 0.5f);\n      }\n   }\n\n   // Encode DC\n   diff = DU[0] - DC;\n   if (diff == 0) {\n      stbiw__jpg_writeBits(s, bitBuf, bitCnt, HTDC[0]);\n   } else {\n      unsigned short bits[2];\n      stbiw__jpg_calcBits(diff, bits);\n      stbiw__jpg_writeBits(s, bitBuf, bitCnt, HTDC[bits[1]]);\n      stbiw__jpg_writeBits(s, bitBuf, bitCnt, bits);\n   }\n   // Encode ACs\n   end0pos = 63;\n   for(; (end0pos>0)&&(DU[end0pos]==0); --end0pos) {\n   }\n   // end0pos = first element in reverse order !=0\n   if(end0pos == 0) {\n      stbiw__jpg_writeBits(s, bitBuf, bitCnt, EOB);\n      return DU[0];\n   }\n   for(i = 1; i <= end0pos; ++i) {\n      int startpos = i;\n      int nrzeroes;\n      unsigned short bits[2];\n      for (; DU[i]==0 && i<=end0pos; ++i) {\n      }\n      nrzeroes = i-startpos;\n      if ( nrzeroes >= 16 ) {\n         int lng = nrzeroes>>4;\n         int nrmarker;\n         for (nrmarker=1; nrmarker <= lng; ++nrmarker)\n            stbiw__jpg_writeBits(s, bitBuf, bitCnt, M16zeroes);\n         nrzeroes &= 15;\n      }\n      stbiw__jpg_calcBits(DU[i], bits);\n      stbiw__jpg_writeBits(s, bitBuf, bitCnt, HTAC[(nrzeroes<<4)+bits[1]]);\n      stbiw__jpg_writeBits(s, bitBuf, bitCnt, bits);\n   }\n   if(end0pos != 63) {\n      stbiw__jpg_writeBits(s, bitBuf, bitCnt, EOB);\n   }\n   return DU[0];\n}\n\nstatic int stbi_write_jpg_core(stbi__write_context *s, int width, int height, int comp, const void* data, int quality) {\n   // Constants that don't pollute global namespace\n   static const unsigned char std_dc_luminance_nrcodes[] = {0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0};\n   static const unsigned char std_dc_luminance_values[] = {0,1,2,3,4,5,6,7,8,9,10,11};\n   static const unsigned char std_ac_luminance_nrcodes[] = {0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d};\n   static const unsigned char std_ac_luminance_values[] = {\n      0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,\n      0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,\n      0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,\n      0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,\n      0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,\n      0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,\n      0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa\n   };\n   static const unsigned char std_dc_chrominance_nrcodes[] = {0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0};\n   static const unsigned char std_dc_chrominance_values[] = {0,1,2,3,4,5,6,7,8,9,10,11};\n   static const unsigned char std_ac_chrominance_nrcodes[] = {0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77};\n   static const unsigned char std_ac_chrominance_values[] = {\n      0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,\n      0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,\n      0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,\n      0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,\n      0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,\n      0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,\n      0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa\n   };\n   // Huffman tables\n   static const unsigned short YDC_HT[256][2] = { {0,2},{2,3},{3,3},{4,3},{5,3},{6,3},{14,4},{30,5},{62,6},{126,7},{254,8},{510,9}};\n   static const unsigned short UVDC_HT[256][2] = { {0,2},{1,2},{2,2},{6,3},{14,4},{30,5},{62,6},{126,7},{254,8},{510,9},{1022,10},{2046,11}};\n   static const unsigned short YAC_HT[256][2] = {\n      {10,4},{0,2},{1,2},{4,3},{11,4},{26,5},{120,7},{248,8},{1014,10},{65410,16},{65411,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {12,4},{27,5},{121,7},{502,9},{2038,11},{65412,16},{65413,16},{65414,16},{65415,16},{65416,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {28,5},{249,8},{1015,10},{4084,12},{65417,16},{65418,16},{65419,16},{65420,16},{65421,16},{65422,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {58,6},{503,9},{4085,12},{65423,16},{65424,16},{65425,16},{65426,16},{65427,16},{65428,16},{65429,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {59,6},{1016,10},{65430,16},{65431,16},{65432,16},{65433,16},{65434,16},{65435,16},{65436,16},{65437,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {122,7},{2039,11},{65438,16},{65439,16},{65440,16},{65441,16},{65442,16},{65443,16},{65444,16},{65445,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {123,7},{4086,12},{65446,16},{65447,16},{65448,16},{65449,16},{65450,16},{65451,16},{65452,16},{65453,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {250,8},{4087,12},{65454,16},{65455,16},{65456,16},{65457,16},{65458,16},{65459,16},{65460,16},{65461,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {504,9},{32704,15},{65462,16},{65463,16},{65464,16},{65465,16},{65466,16},{65467,16},{65468,16},{65469,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {505,9},{65470,16},{65471,16},{65472,16},{65473,16},{65474,16},{65475,16},{65476,16},{65477,16},{65478,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {506,9},{65479,16},{65480,16},{65481,16},{65482,16},{65483,16},{65484,16},{65485,16},{65486,16},{65487,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {1017,10},{65488,16},{65489,16},{65490,16},{65491,16},{65492,16},{65493,16},{65494,16},{65495,16},{65496,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {1018,10},{65497,16},{65498,16},{65499,16},{65500,16},{65501,16},{65502,16},{65503,16},{65504,16},{65505,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {2040,11},{65506,16},{65507,16},{65508,16},{65509,16},{65510,16},{65511,16},{65512,16},{65513,16},{65514,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {65515,16},{65516,16},{65517,16},{65518,16},{65519,16},{65520,16},{65521,16},{65522,16},{65523,16},{65524,16},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {2041,11},{65525,16},{65526,16},{65527,16},{65528,16},{65529,16},{65530,16},{65531,16},{65532,16},{65533,16},{65534,16},{0,0},{0,0},{0,0},{0,0},{0,0}\n   };\n   static const unsigned short UVAC_HT[256][2] = {\n      {0,2},{1,2},{4,3},{10,4},{24,5},{25,5},{56,6},{120,7},{500,9},{1014,10},{4084,12},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {11,4},{57,6},{246,8},{501,9},{2038,11},{4085,12},{65416,16},{65417,16},{65418,16},{65419,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {26,5},{247,8},{1015,10},{4086,12},{32706,15},{65420,16},{65421,16},{65422,16},{65423,16},{65424,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {27,5},{248,8},{1016,10},{4087,12},{65425,16},{65426,16},{65427,16},{65428,16},{65429,16},{65430,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {58,6},{502,9},{65431,16},{65432,16},{65433,16},{65434,16},{65435,16},{65436,16},{65437,16},{65438,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {59,6},{1017,10},{65439,16},{65440,16},{65441,16},{65442,16},{65443,16},{65444,16},{65445,16},{65446,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {121,7},{2039,11},{65447,16},{65448,16},{65449,16},{65450,16},{65451,16},{65452,16},{65453,16},{65454,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {122,7},{2040,11},{65455,16},{65456,16},{65457,16},{65458,16},{65459,16},{65460,16},{65461,16},{65462,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {249,8},{65463,16},{65464,16},{65465,16},{65466,16},{65467,16},{65468,16},{65469,16},{65470,16},{65471,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {503,9},{65472,16},{65473,16},{65474,16},{65475,16},{65476,16},{65477,16},{65478,16},{65479,16},{65480,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {504,9},{65481,16},{65482,16},{65483,16},{65484,16},{65485,16},{65486,16},{65487,16},{65488,16},{65489,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {505,9},{65490,16},{65491,16},{65492,16},{65493,16},{65494,16},{65495,16},{65496,16},{65497,16},{65498,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {506,9},{65499,16},{65500,16},{65501,16},{65502,16},{65503,16},{65504,16},{65505,16},{65506,16},{65507,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {2041,11},{65508,16},{65509,16},{65510,16},{65511,16},{65512,16},{65513,16},{65514,16},{65515,16},{65516,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {16352,14},{65517,16},{65518,16},{65519,16},{65520,16},{65521,16},{65522,16},{65523,16},{65524,16},{65525,16},{0,0},{0,0},{0,0},{0,0},{0,0},\n      {1018,10},{32707,15},{65526,16},{65527,16},{65528,16},{65529,16},{65530,16},{65531,16},{65532,16},{65533,16},{65534,16},{0,0},{0,0},{0,0},{0,0},{0,0}\n   };\n   static const int YQT[] = {16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,\n                             37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99};\n   static const int UVQT[] = {17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,\n                              99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99};\n   static const float aasf[] = { 1.0f * 2.828427125f, 1.387039845f * 2.828427125f, 1.306562965f * 2.828427125f, 1.175875602f * 2.828427125f,\n                                 1.0f * 2.828427125f, 0.785694958f * 2.828427125f, 0.541196100f * 2.828427125f, 0.275899379f * 2.828427125f };\n\n   int row, col, i, k, subsample;\n   float fdtbl_Y[64], fdtbl_UV[64];\n   unsigned char YTable[64], UVTable[64];\n\n   if(!data || !width || !height || comp > 4 || comp < 1) {\n      return 0;\n   }\n\n   quality = quality ? quality : 90;\n   subsample = quality <= 90 ? 1 : 0;\n   quality = quality < 1 ? 1 : quality > 100 ? 100 : quality;\n   quality = quality < 50 ? 5000 / quality : 200 - quality * 2;\n\n   for(i = 0; i < 64; ++i) {\n      int uvti, yti = (YQT[i]*quality+50)/100;\n      YTable[stbiw__jpg_ZigZag[i]] = (unsigned char) (yti < 1 ? 1 : yti > 255 ? 255 : yti);\n      uvti = (UVQT[i]*quality+50)/100;\n      UVTable[stbiw__jpg_ZigZag[i]] = (unsigned char) (uvti < 1 ? 1 : uvti > 255 ? 255 : uvti);\n   }\n\n   for(row = 0, k = 0; row < 8; ++row) {\n      for(col = 0; col < 8; ++col, ++k) {\n         fdtbl_Y[k]  = 1 / (YTable [stbiw__jpg_ZigZag[k]] * aasf[row] * aasf[col]);\n         fdtbl_UV[k] = 1 / (UVTable[stbiw__jpg_ZigZag[k]] * aasf[row] * aasf[col]);\n      }\n   }\n\n   // Write Headers\n   {\n      static const unsigned char head0[] = { 0xFF,0xD8,0xFF,0xE0,0,0x10,'J','F','I','F',0,1,1,0,0,1,0,1,0,0,0xFF,0xDB,0,0x84,0 };\n      static const unsigned char head2[] = { 0xFF,0xDA,0,0xC,3,1,0,2,0x11,3,0x11,0,0x3F,0 };\n      const unsigned char head1[] = { 0xFF,0xC0,0,0x11,8,(unsigned char)(height>>8),STBIW_UCHAR(height),(unsigned char)(width>>8),STBIW_UCHAR(width),\n                                      3,1,(unsigned char)(subsample?0x22:0x11),0,2,0x11,1,3,0x11,1,0xFF,0xC4,0x01,0xA2,0 };\n      s->func(s->context, (void*)head0, sizeof(head0));\n      s->func(s->context, (void*)YTable, sizeof(YTable));\n      stbiw__putc(s, 1);\n      s->func(s->context, UVTable, sizeof(UVTable));\n      s->func(s->context, (void*)head1, sizeof(head1));\n      s->func(s->context, (void*)(std_dc_luminance_nrcodes+1), sizeof(std_dc_luminance_nrcodes)-1);\n      s->func(s->context, (void*)std_dc_luminance_values, sizeof(std_dc_luminance_values));\n      stbiw__putc(s, 0x10); // HTYACinfo\n      s->func(s->context, (void*)(std_ac_luminance_nrcodes+1), sizeof(std_ac_luminance_nrcodes)-1);\n      s->func(s->context, (void*)std_ac_luminance_values, sizeof(std_ac_luminance_values));\n      stbiw__putc(s, 1); // HTUDCinfo\n      s->func(s->context, (void*)(std_dc_chrominance_nrcodes+1), sizeof(std_dc_chrominance_nrcodes)-1);\n      s->func(s->context, (void*)std_dc_chrominance_values, sizeof(std_dc_chrominance_values));\n      stbiw__putc(s, 0x11); // HTUACinfo\n      s->func(s->context, (void*)(std_ac_chrominance_nrcodes+1), sizeof(std_ac_chrominance_nrcodes)-1);\n      s->func(s->context, (void*)std_ac_chrominance_values, sizeof(std_ac_chrominance_values));\n      s->func(s->context, (void*)head2, sizeof(head2));\n   }\n\n   // Encode 8x8 macroblocks\n   {\n      static const unsigned short fillBits[] = {0x7F, 7};\n      int DCY=0, DCU=0, DCV=0;\n      int bitBuf=0, bitCnt=0;\n      // comp == 2 is grey+alpha (alpha is ignored)\n      int ofsG = comp > 2 ? 1 : 0, ofsB = comp > 2 ? 2 : 0;\n      const unsigned char *dataR = (const unsigned char *)data;\n      const unsigned char *dataG = dataR + ofsG;\n      const unsigned char *dataB = dataR + ofsB;\n      int x, y, pos;\n      if(subsample) {\n         for(y = 0; y < height; y += 16) {\n            for(x = 0; x < width; x += 16) {\n               float Y[256], U[256], V[256];\n               for(row = y, pos = 0; row < y+16; ++row) {\n                  // row >= height => use last input row\n                  int clamped_row = (row < height) ? row : height - 1;\n                  int base_p = (stbi__flip_vertically_on_write ? (height-1-clamped_row) : clamped_row)*width*comp;\n                  for(col = x; col < x+16; ++col, ++pos) {\n                     // if col >= width => use pixel from last input column\n                     int p = base_p + ((col < width) ? col : (width-1))*comp;\n                     float r = dataR[p], g = dataG[p], b = dataB[p];\n                     Y[pos]= +0.29900f*r + 0.58700f*g + 0.11400f*b - 128;\n                     U[pos]= -0.16874f*r - 0.33126f*g + 0.50000f*b;\n                     V[pos]= +0.50000f*r - 0.41869f*g - 0.08131f*b;\n                  }\n               }\n               DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+0,   16, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n               DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+8,   16, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n               DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+128, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n               DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+136, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n\n               // subsample U,V\n               {\n                  float subU[64], subV[64];\n                  int yy, xx;\n                  for(yy = 0, pos = 0; yy < 8; ++yy) {\n                     for(xx = 0; xx < 8; ++xx, ++pos) {\n                        int j = yy*32+xx*2;\n                        subU[pos] = (U[j+0] + U[j+1] + U[j+16] + U[j+17]) * 0.25f;\n                        subV[pos] = (V[j+0] + V[j+1] + V[j+16] + V[j+17]) * 0.25f;\n                     }\n                  }\n                  DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subU, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n                  DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subV, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n               }\n            }\n         }\n      } else {\n         for(y = 0; y < height; y += 8) {\n            for(x = 0; x < width; x += 8) {\n               float Y[64], U[64], V[64];\n               for(row = y, pos = 0; row < y+8; ++row) {\n                  // row >= height => use last input row\n                  int clamped_row = (row < height) ? row : height - 1;\n                  int base_p = (stbi__flip_vertically_on_write ? (height-1-clamped_row) : clamped_row)*width*comp;\n                  for(col = x; col < x+8; ++col, ++pos) {\n                     // if col >= width => use pixel from last input column\n                     int p = base_p + ((col < width) ? col : (width-1))*comp;\n                     float r = dataR[p], g = dataG[p], b = dataB[p];\n                     Y[pos]= +0.29900f*r + 0.58700f*g + 0.11400f*b - 128;\n                     U[pos]= -0.16874f*r - 0.33126f*g + 0.50000f*b;\n                     V[pos]= +0.50000f*r - 0.41869f*g - 0.08131f*b;\n                  }\n               }\n\n               DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y, 8, fdtbl_Y,  DCY, YDC_HT, YAC_HT);\n               DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, U, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n               DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, V, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n            }\n         }\n      }\n\n      // Do the bit alignment of the EOI marker\n      stbiw__jpg_writeBits(s, &bitBuf, &bitCnt, fillBits);\n   }\n\n   // EOI\n   stbiw__putc(s, 0xFF);\n   stbiw__putc(s, 0xD9);\n\n   return 1;\n}\n\nSTBIWDEF int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality)\n{\n   stbi__write_context s = { 0 };\n   stbi__start_write_callbacks(&s, func, context);\n   return stbi_write_jpg_core(&s, x, y, comp, (void *) data, quality);\n}\n\n\n#ifndef STBI_WRITE_NO_STDIO\nSTBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const void *data, int quality)\n{\n   stbi__write_context s = { 0 };\n   if (stbi__start_write_file(&s,filename)) {\n      int r = stbi_write_jpg_core(&s, x, y, comp, data, quality);\n      stbi__end_write_file(&s);\n      return r;\n   } else\n      return 0;\n}\n#endif\n\n#endif // STB_IMAGE_WRITE_IMPLEMENTATION\n\n/* Revision history\n      1.16  (2021-07-11)\n             make Deflate code emit uncompressed blocks when it would otherwise expand\n             support writing BMPs with alpha channel\n      1.15  (2020-07-13) unknown\n      1.14  (2020-02-02) updated JPEG writer to downsample chroma channels\n      1.13\n      1.12\n      1.11  (2019-08-11)\n\n      1.10  (2019-02-07)\n             support utf8 filenames in Windows; fix warnings and platform ifdefs\n      1.09  (2018-02-11)\n             fix typo in zlib quality API, improve STB_I_W_STATIC in C++\n      1.08  (2018-01-29)\n             add stbi__flip_vertically_on_write, external zlib, zlib quality, choose PNG filter\n      1.07  (2017-07-24)\n             doc fix\n      1.06 (2017-07-23)\n             writing JPEG (using Jon Olick's code)\n      1.05   ???\n      1.04 (2017-03-03)\n             monochrome BMP expansion\n      1.03   ???\n      1.02 (2016-04-02)\n             avoid allocating large structures on the stack\n      1.01 (2016-01-16)\n             STBIW_REALLOC_SIZED: support allocators with no realloc support\n             avoid race-condition in crc initialization\n             minor compile issues\n      1.00 (2015-09-14)\n             installable file IO function\n      0.99 (2015-09-13)\n             warning fixes; TGA rle support\n      0.98 (2015-04-08)\n             added STBIW_MALLOC, STBIW_ASSERT etc\n      0.97 (2015-01-18)\n             fixed HDR asserts, rewrote HDR rle logic\n      0.96 (2015-01-17)\n             add HDR output\n             fix monochrome BMP\n      0.95 (2014-08-17)\n             add monochrome TGA output\n      0.94 (2014-05-31)\n             rename private functions to avoid conflicts with stb_image.h\n      0.93 (2014-05-27)\n             warning fixes\n      0.92 (2010-08-01)\n             casts to unsigned char to fix warnings\n      0.91 (2010-07-17)\n             first public release\n      0.90   first internal release\n*/\n\n/*\n------------------------------------------------------------------------------\nThis software is available under 2 licenses -- choose whichever you prefer.\n------------------------------------------------------------------------------\nALTERNATIVE A - MIT License\nCopyright (c) 2017 Sean Barrett\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n------------------------------------------------------------------------------\nALTERNATIVE B - Public Domain (www.unlicense.org)\nThis is free and unencumbered software released into the public domain.\nAnyone is free to copy, modify, publish, use, compile, sell, or distribute this\nsoftware, either in source code form or as a compiled binary, for any purpose,\ncommercial or non-commercial, and by any means.\nIn jurisdictions that recognize copyright laws, the author or authors of this\nsoftware dedicate any and all copyright interest in the software to the public\ndomain. We make this dedication for the benefit of the public at large and to\nthe detriment of our heirs and successors. We intend this dedication to be an\novert act of relinquishment in perpetuity of all present and future rights to\nthis software under copyright law.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\nACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n------------------------------------------------------------------------------\n*/"
  },
  {
    "path": "field_construction/submodules/simple-knn/build/temp.linux-x86_64-cpython-310/.ninja_log",
    "content": "# ninja log v5\n0\t12297\t1738928421634260698\t/home/lff/data1/cjw/langsurf/submodules/simple-knn/build/temp.linux-x86_64-cpython-310/simple_knn.o\td46cb6c1fa2743be\n0\t15674\t1738928425022258801\t/home/lff/data1/cjw/langsurf/submodules/simple-knn/build/temp.linux-x86_64-cpython-310/ext.o\tcf97e4655b947383\n1\t55844\t1738928465166236101\t/home/lff/data1/cjw/langsurf/submodules/simple-knn/build/temp.linux-x86_64-cpython-310/spatial.o\t254885e516e13077\n12\t16383\t1738952012556225773\t/home/lff/data1/cjw/langsurf/submodules/simple-knn/build/temp.linux-x86_64-cpython-310/ext.o\tcf97e4655b947383\n13\t51114\t1738952047264286700\t/home/lff/data1/cjw/langsurf/submodules/simple-knn/build/temp.linux-x86_64-cpython-310/spatial.o\t254885e516e13077\n"
  },
  {
    "path": "field_construction/submodules/simple-knn/build/temp.linux-x86_64-cpython-310/build.ninja",
    "content": "ninja_required_version = 1.3\ncxx = c++\nnvcc = /usr/local/cuda-12.2/bin/nvcc\n\ncflags = -pthread -B /home/lff/miniconda3/envs/langsurf/compiler_compat -Wno-unused-result -Wsign-compare -DNDEBUG -fwrapv -O2 -Wall -fPIC -O2 -isystem /home/lff/miniconda3/envs/langsurf/include -fPIC -O2 -isystem /home/lff/miniconda3/envs/langsurf/include -fPIC -I/home/lff/miniconda3/envs/langsurf/lib/python3.10/site-packages/torch/include -I/home/lff/miniconda3/envs/langsurf/lib/python3.10/site-packages/torch/include/torch/csrc/api/include -I/home/lff/miniconda3/envs/langsurf/lib/python3.10/site-packages/torch/include/TH -I/home/lff/miniconda3/envs/langsurf/lib/python3.10/site-packages/torch/include/THC -I/usr/local/cuda-12.2/include -I/home/lff/miniconda3/envs/langsurf/include/python3.10 -c\npost_cflags = -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE=\"_gcc\"' '-DPYBIND11_STDLIB=\"_libstdcpp\"' '-DPYBIND11_BUILD_ABI=\"_cxxabi1011\"' -DTORCH_EXTENSION_NAME=_C -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++17\ncuda_cflags = -I/home/lff/miniconda3/envs/langsurf/lib/python3.10/site-packages/torch/include -I/home/lff/miniconda3/envs/langsurf/lib/python3.10/site-packages/torch/include/torch/csrc/api/include -I/home/lff/miniconda3/envs/langsurf/lib/python3.10/site-packages/torch/include/TH -I/home/lff/miniconda3/envs/langsurf/lib/python3.10/site-packages/torch/include/THC -I/usr/local/cuda-12.2/include -I/home/lff/miniconda3/envs/langsurf/include/python3.10 -c\ncuda_post_cflags = -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_BFLOAT16_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ --expt-relaxed-constexpr --compiler-options ''\"'\"'-fPIC'\"'\"'' -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE=\"_gcc\"' '-DPYBIND11_STDLIB=\"_libstdcpp\"' '-DPYBIND11_BUILD_ABI=\"_cxxabi1011\"' -DTORCH_EXTENSION_NAME=_C -D_GLIBCXX_USE_CXX11_ABI=0 -gencode=arch=compute_86,code=compute_86 -gencode=arch=compute_86,code=sm_86 -std=c++17\ncuda_dlink_post_cflags = \nldflags = \n\nrule compile\n  command = $cxx -MMD -MF $out.d $cflags -c $in -o $out $post_cflags\n  depfile = $out.d\n  deps = gcc\n\nrule cuda_compile\n  depfile = $out.d\n  deps = gcc\n  command = $nvcc --generate-dependencies-with-compile --dependency-output $out.d $cuda_cflags -c $in -o $out $cuda_post_cflags\n\n\n\n\n\nbuild /home/lff/data1/cjw/langsurf/submodules/simple-knn/build/temp.linux-x86_64-cpython-310/ext.o: compile /home/lff/data1/cjw/langsurf/submodules/simple-knn/ext.cpp\nbuild /home/lff/data1/cjw/langsurf/submodules/simple-knn/build/temp.linux-x86_64-cpython-310/simple_knn.o: cuda_compile /home/lff/data1/cjw/langsurf/submodules/simple-knn/simple_knn.cu\nbuild /home/lff/data1/cjw/langsurf/submodules/simple-knn/build/temp.linux-x86_64-cpython-310/spatial.o: cuda_compile /home/lff/data1/cjw/langsurf/submodules/simple-knn/spatial.cu\n\n\n\n\n\n\n"
  },
  {
    "path": "field_construction/submodules/simple-knn/ext.cpp",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#include <torch/extension.h>\n#include \"spatial.h\"\n\nPYBIND11_MODULE(TORCH_EXTENSION_NAME, m) {\n  m.def(\"distCUDA2\", &distCUDA2);\n}\n"
  },
  {
    "path": "field_construction/submodules/simple-knn/setup.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nfrom setuptools import setup\nfrom torch.utils.cpp_extension import CUDAExtension, BuildExtension\nimport os\n\ncxx_compiler_flags = []\n\nif os.name == 'nt':\n    cxx_compiler_flags.append(\"/wd4624\")\n\nsetup(\n    name=\"simple_knn\",\n    ext_modules=[\n        CUDAExtension(\n            name=\"simple_knn._C\",\n            sources=[\n            \"spatial.cu\", \n            \"simple_knn.cu\",\n            \"ext.cpp\"],\n            extra_compile_args={\"nvcc\": [], \"cxx\": cxx_compiler_flags})\n        ],\n    cmdclass={\n        'build_ext': BuildExtension\n    }\n)\n"
  },
  {
    "path": "field_construction/submodules/simple-knn/simple_knn/.gitkeep",
    "content": ""
  },
  {
    "path": "field_construction/submodules/simple-knn/simple_knn.cu",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#define BOX_SIZE 1024\n\n#include \"cuda_runtime.h\"\n#include \"device_launch_parameters.h\"\n#include \"simple_knn.h\"\n#include <cub/cub.cuh>\n#include <cub/device/device_radix_sort.cuh>\n#include <vector>\n#include <cuda_runtime_api.h>\n#include <thrust/device_vector.h>\n#include <thrust/sequence.h>\n#define __CUDACC__\n#include <cooperative_groups.h>\n#include <cooperative_groups/reduce.h>\n\nnamespace cg = cooperative_groups;\n\nstruct CustomMin\n{\n\t__device__ __forceinline__\n\t\tfloat3 operator()(const float3& a, const float3& b) const {\n\t\treturn { min(a.x, b.x), min(a.y, b.y), min(a.z, b.z) };\n\t}\n};\n\nstruct CustomMax\n{\n\t__device__ __forceinline__\n\t\tfloat3 operator()(const float3& a, const float3& b) const {\n\t\treturn { max(a.x, b.x), max(a.y, b.y), max(a.z, b.z) };\n\t}\n};\n\n__host__ __device__ uint32_t prepMorton(uint32_t x)\n{\n\tx = (x | (x << 16)) & 0x030000FF;\n\tx = (x | (x << 8)) & 0x0300F00F;\n\tx = (x | (x << 4)) & 0x030C30C3;\n\tx = (x | (x << 2)) & 0x09249249;\n\treturn x;\n}\n\n__host__ __device__ uint32_t coord2Morton(float3 coord, float3 minn, float3 maxx)\n{\n\tuint32_t x = prepMorton(((coord.x - minn.x) / (maxx.x - minn.x)) * ((1 << 10) - 1));\n\tuint32_t y = prepMorton(((coord.y - minn.y) / (maxx.y - minn.y)) * ((1 << 10) - 1));\n\tuint32_t z = prepMorton(((coord.z - minn.z) / (maxx.z - minn.z)) * ((1 << 10) - 1));\n\n\treturn x | (y << 1) | (z << 2);\n}\n\n__global__ void coord2Morton(int P, const float3* points, float3 minn, float3 maxx, uint32_t* codes)\n{\n\tauto idx = cg::this_grid().thread_rank();\n\tif (idx >= P)\n\t\treturn;\n\n\tcodes[idx] = coord2Morton(points[idx], minn, maxx);\n}\n\nstruct MinMax\n{\n\tfloat3 minn;\n\tfloat3 maxx;\n};\n\n__global__ void boxMinMax(uint32_t P, float3* points, uint32_t* indices, MinMax* boxes)\n{\n\tauto idx = cg::this_grid().thread_rank();\n\n\tMinMax me;\n\tif (idx < P)\n\t{\n\t\tme.minn = points[indices[idx]];\n\t\tme.maxx = points[indices[idx]];\n\t}\n\telse\n\t{\n\t\tme.minn = { FLT_MAX, FLT_MAX, FLT_MAX };\n\t\tme.maxx = { -FLT_MAX,-FLT_MAX,-FLT_MAX };\n\t}\n\n\t__shared__ MinMax redResult[BOX_SIZE];\n\n\tfor (int off = BOX_SIZE / 2; off >= 1; off /= 2)\n\t{\n\t\tif (threadIdx.x < 2 * off)\n\t\t\tredResult[threadIdx.x] = me;\n\t\t__syncthreads();\n\n\t\tif (threadIdx.x < off)\n\t\t{\n\t\t\tMinMax other = redResult[threadIdx.x + off];\n\t\t\tme.minn.x = min(me.minn.x, other.minn.x);\n\t\t\tme.minn.y = min(me.minn.y, other.minn.y);\n\t\t\tme.minn.z = min(me.minn.z, other.minn.z);\n\t\t\tme.maxx.x = max(me.maxx.x, other.maxx.x);\n\t\t\tme.maxx.y = max(me.maxx.y, other.maxx.y);\n\t\t\tme.maxx.z = max(me.maxx.z, other.maxx.z);\n\t\t}\n\t\t__syncthreads();\n\t}\n\n\tif (threadIdx.x == 0)\n\t\tboxes[blockIdx.x] = me;\n}\n\n__device__ __host__ float distBoxPoint(const MinMax& box, const float3& p)\n{\n\tfloat3 diff = { 0, 0, 0 };\n\tif (p.x < box.minn.x || p.x > box.maxx.x)\n\t\tdiff.x = min(abs(p.x - box.minn.x), abs(p.x - box.maxx.x));\n\tif (p.y < box.minn.y || p.y > box.maxx.y)\n\t\tdiff.y = min(abs(p.y - box.minn.y), abs(p.y - box.maxx.y));\n\tif (p.z < box.minn.z || p.z > box.maxx.z)\n\t\tdiff.z = min(abs(p.z - box.minn.z), abs(p.z - box.maxx.z));\n\treturn diff.x * diff.x + diff.y * diff.y + diff.z * diff.z;\n}\n\ntemplate<int K>\n__device__ void updateKBest(const float3& ref, const float3& point, float* knn)\n{\n\tfloat3 d = { point.x - ref.x, point.y - ref.y, point.z - ref.z };\n\tfloat dist = d.x * d.x + d.y * d.y + d.z * d.z;\n\tfor (int j = 0; j < K; j++)\n\t{\n\t\tif (knn[j] > dist)\n\t\t{\n\t\t\tfloat t = knn[j];\n\t\t\tknn[j] = dist;\n\t\t\tdist = t;\n\t\t}\n\t}\n}\n\n__global__ void boxMeanDist(uint32_t P, float3* points, uint32_t* indices, MinMax* boxes, float* dists)\n{\n\tint idx = cg::this_grid().thread_rank();\n\tif (idx >= P)\n\t\treturn;\n\n\tfloat3 point = points[indices[idx]];\n\tfloat best[3] = { FLT_MAX, FLT_MAX, FLT_MAX };\n\n\tfor (int i = max(0, idx - 3); i <= min(P - 1, idx + 3); i++)\n\t{\n\t\tif (i == idx)\n\t\t\tcontinue;\n\t\tupdateKBest<3>(point, points[indices[i]], best);\n\t}\n\n\tfloat reject = best[2];\n\tbest[0] = FLT_MAX;\n\tbest[1] = FLT_MAX;\n\tbest[2] = FLT_MAX;\n\n\tfor (int b = 0; b < (P + BOX_SIZE - 1) / BOX_SIZE; b++)\n\t{\n\t\tMinMax box = boxes[b];\n\t\tfloat dist = distBoxPoint(box, point);\n\t\tif (dist > reject || dist > best[2])\n\t\t\tcontinue;\n\n\t\tfor (int i = b * BOX_SIZE; i < min(P, (b + 1) * BOX_SIZE); i++)\n\t\t{\n\t\t\tif (i == idx)\n\t\t\t\tcontinue;\n\t\t\tupdateKBest<3>(point, points[indices[i]], best);\n\t\t}\n\t}\n\tdists[indices[idx]] = (best[0] + best[1] + best[2]) / 3.0f;\n}\n\nvoid SimpleKNN::knn(int P, float3* points, float* meanDists)\n{\n\tfloat3* result;\n\tcudaMalloc(&result, sizeof(float3));\n\tsize_t temp_storage_bytes;\n\n\tfloat3 init = { 0, 0, 0 }, minn, maxx;\n\n\tcub::DeviceReduce::Reduce(nullptr, temp_storage_bytes, points, result, P, CustomMin(), init);\n\tthrust::device_vector<char> temp_storage(temp_storage_bytes);\n\n\tcub::DeviceReduce::Reduce(temp_storage.data().get(), temp_storage_bytes, points, result, P, CustomMin(), init);\n\tcudaMemcpy(&minn, result, sizeof(float3), cudaMemcpyDeviceToHost);\n\n\tcub::DeviceReduce::Reduce(temp_storage.data().get(), temp_storage_bytes, points, result, P, CustomMax(), init);\n\tcudaMemcpy(&maxx, result, sizeof(float3), cudaMemcpyDeviceToHost);\n\n\tthrust::device_vector<uint32_t> morton(P);\n\tthrust::device_vector<uint32_t> morton_sorted(P);\n\tcoord2Morton << <(P + 255) / 256, 256 >> > (P, points, minn, maxx, morton.data().get());\n\n\tthrust::device_vector<uint32_t> indices(P);\n\tthrust::sequence(indices.begin(), indices.end());\n\tthrust::device_vector<uint32_t> indices_sorted(P);\n\n\tcub::DeviceRadixSort::SortPairs(nullptr, temp_storage_bytes, morton.data().get(), morton_sorted.data().get(), indices.data().get(), indices_sorted.data().get(), P);\n\ttemp_storage.resize(temp_storage_bytes);\n\n\tcub::DeviceRadixSort::SortPairs(temp_storage.data().get(), temp_storage_bytes, morton.data().get(), morton_sorted.data().get(), indices.data().get(), indices_sorted.data().get(), P);\n\n\tuint32_t num_boxes = (P + BOX_SIZE - 1) / BOX_SIZE;\n\tthrust::device_vector<MinMax> boxes(num_boxes);\n\tboxMinMax << <num_boxes, BOX_SIZE >> > (P, points, indices_sorted.data().get(), boxes.data().get());\n\tboxMeanDist << <num_boxes, BOX_SIZE >> > (P, points, indices_sorted.data().get(), boxes.data().get(), meanDists);\n\n\tcudaFree(result);\n}"
  },
  {
    "path": "field_construction/submodules/simple-knn/simple_knn.egg-info/PKG-INFO",
    "content": "Metadata-Version: 2.2\nName: simple_knn\nVersion: 0.0.0\n"
  },
  {
    "path": "field_construction/submodules/simple-knn/simple_knn.egg-info/SOURCES.txt",
    "content": "ext.cpp\nsetup.py\nsimple_knn.cu\nspatial.cu\nsimple_knn.egg-info/PKG-INFO\nsimple_knn.egg-info/SOURCES.txt\nsimple_knn.egg-info/dependency_links.txt\nsimple_knn.egg-info/top_level.txt"
  },
  {
    "path": "field_construction/submodules/simple-knn/simple_knn.egg-info/dependency_links.txt",
    "content": "\n"
  },
  {
    "path": "field_construction/submodules/simple-knn/simple_knn.egg-info/top_level.txt",
    "content": "simple_knn\n"
  },
  {
    "path": "field_construction/submodules/simple-knn/simple_knn.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#ifndef SIMPLEKNN_H_INCLUDED\n#define SIMPLEKNN_H_INCLUDED\n\nclass SimpleKNN\n{\npublic:\n\tstatic void knn(int P, float3* points, float* meanDists);\n};\n\n#endif"
  },
  {
    "path": "field_construction/submodules/simple-knn/spatial.cu",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#include \"spatial.h\"\n#include \"simple_knn.h\"\n\ntorch::Tensor\ndistCUDA2(const torch::Tensor& points)\n{\n  const int P = points.size(0);\n\n  auto float_opts = points.options().dtype(torch::kFloat32);\n  torch::Tensor means = torch::full({P}, 0.0, float_opts);\n  \n  SimpleKNN::knn(P, (float3*)points.contiguous().data<float>(), means.contiguous().data<float>());\n\n  return means;\n}"
  },
  {
    "path": "field_construction/submodules/simple-knn/spatial.h",
    "content": "/*\n * Copyright (C) 2023, Inria\n * GRAPHDECO research group, https://team.inria.fr/graphdeco\n * All rights reserved.\n *\n * This software is free for non-commercial, research and evaluation use \n * under the terms of the LICENSE.md file.\n *\n * For inquiries contact  george.drettakis@inria.fr\n */\n\n#include <torch/extension.h>\n\ntorch::Tensor distCUDA2(const torch::Tensor& points);"
  },
  {
    "path": "field_construction/utils/camera_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use\n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport sys\n\nimport numpy as np\n\nfrom field_construction.scene.cameras import Camera\nfrom field_construction.utils.graphics_utils import fov2focal\n\nWARNED = False\n\ndef loadCam(args, id, cam_info, resolution_scale):\n    orig_w, orig_h = cam_info.width, cam_info.height\n    if args.resolution in [1, 2, 4, 8]:\n        resolution = round(orig_w/(resolution_scale * args.resolution)), round(orig_h/(resolution_scale * args.resolution))\n    else:  # should be a type that converts to float\n        if args.resolution == -1:\n            if orig_h > 1080:\n                global WARNED\n                if not WARNED:\n                    print(\"[ INFO ] Encountered quite large input images (>1080P), rescaling to 1080P.\\n \"\n                        \"If this is not desired, please explicitly specify '--resolution/-r' as 1\")\n                    WARNED = True\n                global_down = orig_h / 1080\n            else:\n                global_down = 1\n        else:\n            global_down = orig_w / args.resolution\n\n        scale = float(global_down) * float(resolution_scale)\n        resolution = (int(orig_w / scale), int(orig_h / scale))\n\n    sys.stdout.write('\\r')\n    sys.stdout.write(\"load camera {}\".format(id))\n    sys.stdout.write('\\r')\n    sys.stdout.flush()\n\n    return Camera(colmap_id=cam_info.uid, R=cam_info.R, T=cam_info.T, \n                  FoVx=cam_info.FovX, FoVy=cam_info.FovY,\n                  image_width=resolution[0], image_height=resolution[1],\n                  image_path=cam_info.image_path,\n                  image_name=cam_info.image_name, uid=cam_info.global_id, \n                  preload_img=args.preload_img, \n                  ncc_scale=args.ncc_scale,\n                  data_device=args.data_device)\n\ndef cameraList_from_camInfos(cam_infos, resolution_scale, args):\n    camera_list = []\n\n    for id, c in enumerate(cam_infos):\n        camera_list.append(loadCam(args, id, c, resolution_scale))\n\n    return camera_list\n\ndef camera_to_JSON(id, camera : Camera):\n    Rt = np.zeros((4, 4))\n    Rt[:3, :3] = camera.R.transpose()\n    Rt[:3, 3] = camera.T\n    Rt[3, 3] = 1.0\n\n    W2C = np.linalg.inv(Rt)\n    pos = W2C[:3, 3]\n    rot = W2C[:3, :3]\n    serializable_array_2d = [x.tolist() for x in rot]\n    camera_entry = {\n        'id' : id,\n        'img_name' : camera.image_name,\n        'width' : camera.width,\n        'height' : camera.height,\n        'position': pos.tolist(),\n        'rotation': serializable_array_2d,\n        'fy' : fov2focal(camera.FovY, camera.height),\n        'fx' : fov2focal(camera.FovX, camera.width)\n    }\n    return camera_entry\n\ndef gen_virtul_cam(cam, trans_noise=1.0, deg_noise=15.0, device=\"cuda\"):\n    Rt = np.zeros((4, 4))\n    Rt[:3, :3] = cam.R.transpose()\n    Rt[:3, 3] = cam.T\n    Rt[3, 3] = 1.0\n    C2W = np.linalg.inv(Rt)\n\n    translation_perturbation = np.random.uniform(-trans_noise, trans_noise, 3)\n    rotation_perturbation = np.random.uniform(-deg_noise, deg_noise, 3)\n    rx, ry, rz = np.deg2rad(rotation_perturbation)\n    Rx = np.array([[1, 0, 0],\n                   [0, np.cos(rx), -np.sin(rx)],\n                   [0, np.sin(rx), np.cos(rx)]])\n\n    Ry = np.array([[np.cos(ry), 0, np.sin(ry)],\n                   [0, 1, 0],\n                   [-np.sin(ry), 0, np.cos(ry)]])\n\n    Rz = np.array([[np.cos(rz), -np.sin(rz), 0],\n                   [np.sin(rz), np.cos(rz), 0],\n                   [0, 0, 1]])\n    R_perturbation = Rz @ Ry @ Rx\n\n    C2W[:3, :3] = C2W[:3, :3] @ R_perturbation\n    C2W[:3, 3] = C2W[:3, 3] + translation_perturbation\n    Rt = np.linalg.inv(C2W)\n    virtul_cam = Camera(100000, Rt[:3, :3].transpose(), Rt[:3, 3], cam.FoVx, cam.FoVy,\n                        cam.image_width, cam.image_height,\n                        cam.image_path, cam.image_name, 100000,\n                        trans=np.array([0.0, 0.0, 0.0]), scale=1.0,\n                        preload_img=False, data_device=device)\n    return virtul_cam\n\n"
  },
  {
    "path": "field_construction/utils/edit_utils.py",
    "content": "import numpy as np\nimport torch\nimport cv2\nfrom torchvision.transforms import Resize, InterpolationMode, ToTensor, Compose, CenterCrop\nfrom einops import rearrange\nimport glob\nfrom diffusers.utils import USE_PEFT_BACKEND\nfrom diffusers.utils import load_image\nfrom natsort import natsorted\n\n\ndef read_mask(mask_dir):\n    transform = Compose([\n        Resize((512, 512), interpolation=InterpolationMode.BILINEAR, antialias=True),\n        # CenterCrop((512, 512)),\n        ToTensor()])\n    mask_paths = glob.glob(mask_dir + '/*.png')\n    mask_paths = natsorted(mask_paths)\n    mask_list = []\n    for mask_path in mask_paths:\n        mask = load_image(mask_path)\n        mask_torch = transform(mask).bool().unsqueeze(0)  # torch.Size([1, 3, 512, 512]) -1~1\n        mask_list.append(mask_torch)\n    return mask_list\n\n\ndef read_rgb(rgb_dir):\n    transform = Compose([\n        Resize((512, 512), interpolation=InterpolationMode.BILINEAR, antialias=True),\n        # CenterCrop((512, 512)),\n        ToTensor()])\n    rgb_paths = sorted(glob.glob(rgb_dir + '/*.jpg'))\n    rgb_list = []\n    rgb_frame = []\n    for rgb_path in rgb_paths:\n        rgb = load_image(rgb_path);\n        width, height = rgb.size\n        file_name = rgb_path.split('/')[-1]\n        frame_number = int(file_name.split('_')[1].split('.')[0].lstrip('0') or '0')\n        rgb_frame.append(frame_number)\n        rgb_torch = transform(rgb).unsqueeze(0)  # torch.Size([1, 3, 512, 512])\n        rgb_list.append(rgb_torch)\n    return rgb_list, (width, height), rgb_frame\n\n\ndef read_depth2disparity(depth_dir):\n    depth_paths = sorted(glob.glob(depth_dir + '/*.npy'))\n    disparity_list = []\n    for depth_path in depth_paths:\n        depth = np.load(depth_path)\n        depth = cv2.resize(depth, (512, 512)).reshape((512, 512, 1))  # [512,512,1]\n        # depth = CenterCrop((512, 512))(torch.from_numpy(depth))[..., None].numpy() # [512,512,1]\n\n        disparity = 1 / (depth + 1e-5)\n        disparity_map = disparity / np.max(disparity)  # 0.00233~1\n        # disparity_map = disparity_map.astype(np.uint8)[:,:,0]\n        disparity_map = np.concatenate([disparity_map, disparity_map, disparity_map], axis=2)\n        disparity_list.append(torch.from_numpy(disparity_map[None]).permute(0, 3, 1, 2).float())  # [1,512,512,3]\n    return disparity_list\n\n\ndef compute_attn(attn, query, key, value, video_length, ref_frame_index, attention_mask):\n    key_ref_cross = rearrange(key, \"(b f) d c -> b f d c\", f=video_length)\n    key_ref_cross = key_ref_cross[:, ref_frame_index]\n    key_ref_cross = rearrange(key_ref_cross, \"b f d c -> (b f) d c\")\n    value_ref_cross = rearrange(value, \"(b f) d c -> b f d c\", f=video_length)\n    value_ref_cross = value_ref_cross[:, ref_frame_index]\n    value_ref_cross = rearrange(value_ref_cross, \"b f d c -> (b f) d c\")\n\n    key_ref_cross = attn.head_to_batch_dim(key_ref_cross)\n    value_ref_cross = attn.head_to_batch_dim(value_ref_cross)\n    attention_probs = attn.get_attention_scores(query, key_ref_cross, attention_mask)\n    hidden_states_ref_cross = torch.bmm(attention_probs, value_ref_cross)\n    return hidden_states_ref_cross\n\n\nclass CrossViewAttnProcessor:\n    def __init__(self, self_attn_coeff, unet_chunk_size=2):\n        self.unet_chunk_size = unet_chunk_size\n        self.self_attn_coeff = self_attn_coeff\n\n    def __call__(\n            self,\n            attn,\n            hidden_states,\n            encoder_hidden_states=None,\n            attention_mask=None,\n            temb=None,\n            scale=1.0, ):\n\n        residual = hidden_states\n\n        args = () if USE_PEFT_BACKEND else (scale,)\n\n        if attn.spatial_norm is not None:\n            hidden_states = attn.spatial_norm(hidden_states, temb)\n\n        input_ndim = hidden_states.ndim\n\n        if input_ndim == 4:\n            batch_size, channel, height, width = hidden_states.shape\n            hidden_states = hidden_states.view(batch_size, channel, height * width).transpose(1, 2)\n\n        batch_size, sequence_length, _ = (\n            hidden_states.shape if encoder_hidden_states is None else encoder_hidden_states.shape\n        )\n        attention_mask = attn.prepare_attention_mask(attention_mask, sequence_length, batch_size)\n\n        if attn.group_norm is not None:\n            hidden_states = attn.group_norm(hidden_states.transpose(1, 2)).transpose(1, 2)\n\n        query = attn.to_q(hidden_states, *args)\n\n        is_cross_attention = encoder_hidden_states is not None\n        if encoder_hidden_states is None:\n            encoder_hidden_states = hidden_states\n        elif attn.norm_cross:\n            encoder_hidden_states = attn.norm_encoder_hidden_states(encoder_hidden_states)\n\n        key = attn.to_k(encoder_hidden_states, *args)\n        value = attn.to_v(encoder_hidden_states, *args)\n        query = attn.head_to_batch_dim(query)\n        # Sparse Attention\n        if not is_cross_attention:\n            ################## Perform self attention\n            key_self = attn.head_to_batch_dim(key)\n            value_self = attn.head_to_batch_dim(value)\n            attention_probs = attn.get_attention_scores(query, key_self, attention_mask)\n            hidden_states_self = torch.bmm(attention_probs, value_self)\n            #######################################\n\n            video_length = key.size()[0] // self.unet_chunk_size\n            ref0_frame_index = [0] * video_length\n            ref1_frame_index = [1] * video_length\n            ref2_frame_index = [2] * video_length\n            ref3_frame_index = [3] * video_length\n\n            hidden_states_ref0 = compute_attn(attn, query, key, value, video_length, ref0_frame_index, attention_mask)\n            hidden_states_ref1 = compute_attn(attn, query, key, value, video_length, ref1_frame_index, attention_mask)\n            hidden_states_ref2 = compute_attn(attn, query, key, value, video_length, ref2_frame_index, attention_mask)\n\n            key = rearrange(key, \"(b f) d c -> b f d c\", f=video_length)\n            key = key[:, ref3_frame_index]\n            key = rearrange(key, \"b f d c -> (b f) d c\")\n            value = rearrange(value, \"(b f) d c -> b f d c\", f=video_length)\n            value = value[:, ref3_frame_index]\n            value = rearrange(value, \"b f d c -> (b f) d c\")\n\n        key = attn.head_to_batch_dim(key)\n        value = attn.head_to_batch_dim(value)\n\n        attention_probs = attn.get_attention_scores(query, key, attention_mask)\n        hidden_states_ref3 = torch.bmm(attention_probs, value)\n\n        hidden_states = self.self_attn_coeff * hidden_states_self + (1 - self.self_attn_coeff) * torch.mean(\n            torch.stack([hidden_states_ref0, hidden_states_ref1, hidden_states_ref2, hidden_states_ref3]),\n            dim=0) if not is_cross_attention else hidden_states_ref3\n        hidden_states = attn.batch_to_head_dim(hidden_states)\n\n        # linear proj\n        hidden_states = attn.to_out[0](hidden_states, *args)\n        # dropout\n        hidden_states = attn.to_out[1](hidden_states)\n\n        if input_ndim == 4:\n            hidden_states = hidden_states.transpose(-1, -2).reshape(batch_size, channel, height, width)\n\n        if attn.residual_connection:\n            hidden_states = hidden_states + residual\n\n        hidden_states = hidden_states / attn.rescale_output_factor\n\n        return hidden_states\n"
  },
  {
    "path": "field_construction/utils/fusion_util.py",
    "content": "import os\nimport torch\nimport glob\nimport math\nimport numpy as np\nfrom tensorflow import io\nimport tensorflow._api.v2.compat.v1 as tf\n\n\ndef read_bytes(path):\n    '''Read bytes for OpenSeg model running.'''\n\n    with io.gfile.GFile(path, 'rb') as f:\n        file_bytes = f.read()\n    return file_bytes\n\n\ndef make_intrinsic(fx, fy, mx, my):\n    '''Create camera intrinsics.'''\n\n    intrinsic = np.eye(4)\n    intrinsic[0][0] = fx\n    intrinsic[1][1] = fy\n    intrinsic[0][2] = mx\n    intrinsic[1][2] = my\n    return intrinsic\n\ndef adjust_intrinsic(intrinsic, intrinsic_image_dim, image_dim):\n    '''Adjust camera intrinsics.'''\n\n    if intrinsic_image_dim == image_dim:\n        return intrinsic\n    resize_width = int(math.floor(image_dim[1] * float(\n                    intrinsic_image_dim[0]) / float(intrinsic_image_dim[1])))\n    intrinsic[0, 0] *= float(resize_width) / float(intrinsic_image_dim[0])\n    intrinsic[1, 1] *= float(image_dim[1]) / float(intrinsic_image_dim[1])\n    # account for cropping here\n    intrinsic[0, 2] *= float(image_dim[0] - 1) / float(intrinsic_image_dim[0] - 1)\n    intrinsic[1, 2] *= float(image_dim[1] - 1) / float(intrinsic_image_dim[1] - 1)\n    return intrinsic\n\n\ndef extract_openseg_img_feature(aug_img, np_image_string, openseg_model, text_emb, img_size=None, regional_pool=False):\n    '''Extract per-pixel OpenSeg features.'''\n\n    # run OpenSeg\n    results = openseg_model.signatures['serving_default'](\n            inp_image_bytes=tf.convert_to_tensor(np_image_string[0]),\n            inp_text_emb=text_emb)\n    img_info = results['image_info']\n    crop_sz = [\n        int(img_info[0, 0] * img_info[2, 0]),\n        int(img_info[0, 1] * img_info[2, 1])\n    ]\n    if regional_pool:\n        image_embedding_feat = results['ppixel_ave_feat'][:, :crop_sz[0], :crop_sz[1]]\n    else:\n        image_embedding_feat = results['image_embedding_feat'][:, :crop_sz[0], :crop_sz[1]]\n    if img_size is not None:\n        feat_2d = tf.cast(tf.image.resize_nearest_neighbor(\n            image_embedding_feat, img_size, align_corners=True)[0], dtype=tf.float16).numpy()\n    else:\n        feat_2d = tf.cast(image_embedding_feat[[0]], dtype=tf.float16).numpy()\n\n    feat_2d = torch.from_numpy(feat_2d).permute(2, 0, 1)\n\n    return feat_2d\n\ndef save_fused_feature(feat_bank, point_ids, n_points, out_dir, scene_id, args):\n    '''Save features.'''\n\n    for n in range(args.num_rand_file_per_scene):\n        if n_points < args.n_split_points:\n            n_points_cur = n_points # to handle point cloud numbers less than n_split_points\n        else:\n            n_points_cur = args.n_split_points\n\n        rand_ind = np.random.choice(range(n_points), n_points_cur, replace=False)\n\n        mask_entire = torch.zeros(n_points, dtype=torch.bool)\n        mask_entire[rand_ind] = True\n        mask = torch.zeros(n_points, dtype=torch.bool)\n        mask[point_ids] = True\n        mask_entire = mask_entire & mask\n\n        torch.save({\"feat\": feat_bank[mask_entire].half().cpu(),\n                    \"mask_full\": mask_entire\n        },  os.path.join(out_dir, scene_id +'_%d.pt'%(n)))\n        print(os.path.join(out_dir, scene_id +'_%d.pt'%(n)) + ' is saved!')\n\n\nclass PointCloudToImageMapper(object):\n    def __init__(self, image_dim,\n            visibility_threshold=0.25, cut_bound=0, intrinsics=None):\n        \n        self.image_dim = image_dim\n        self.vis_thres = visibility_threshold\n        self.cut_bound = cut_bound\n        self.intrinsics = intrinsics\n\n    def compute_mapping(self, camera_to_world, coords, depth=None, intrinsic=None):\n        \"\"\"\n        :param camera_to_world: 4 x 4\n        :param coords: N x 3 format\n        :param depth: H x W format\n        :param intrinsic: 3x3 format\n        :return: mapping, N x 3 format, (H,W,mask)\n        \"\"\"\n        if self.intrinsics is not None: # global intrinsics\n            intrinsic = self.intrinsics\n\n        mapping = np.zeros((3, coords.shape[0]), dtype=int)\n        coords_new = np.concatenate([coords, np.ones([coords.shape[0], 1])], axis=1).T\n        assert coords_new.shape[0] == 4, \"[!] Shape error\"\n\n        world_to_camera = np.linalg.inv(camera_to_world)\n        p = np.matmul(world_to_camera, coords_new)\n        p[0] = (p[0] * intrinsic[0][0]) / p[2] + intrinsic[0][2]\n        p[1] = (p[1] * intrinsic[1][1]) / p[2] + intrinsic[1][2]\n        pi = np.round(p).astype(int) # simply round the projected coordinates\n        inside_mask = (pi[0] >= self.cut_bound) * (pi[1] >= self.cut_bound) \\\n                    * (pi[0] < self.image_dim[0]-self.cut_bound) \\\n                    * (pi[1] < self.image_dim[1]-self.cut_bound)\n        if depth is not None:\n            depth_cur = depth[pi[1][inside_mask], pi[0][inside_mask]]\n            occlusion_mask = np.abs(depth[pi[1][inside_mask], pi[0][inside_mask]]\n                                    - p[2][inside_mask]) <= \\\n                                    self.vis_thres * depth_cur\n\n            inside_mask[inside_mask == True] = occlusion_mask\n        else:\n            front_mask = p[2]>0 # make sure the depth is in front\n            inside_mask = front_mask*inside_mask\n        mapping[0][inside_mask] = pi[1][inside_mask]\n        mapping[1][inside_mask] = pi[0][inside_mask]\n        mapping[2][inside_mask] = 1\n\n        return mapping.T\n\n\ndef obtain_intr_extr_matterport(scene):\n    '''Obtain the intrinsic and extrinsic parameters of Matterport3D.'''\n\n    img_dir = os.path.join(scene, 'color')\n    pose_dir = os.path.join(scene, 'pose')\n    intr_dir = os.path.join(scene, 'intrinsic')\n    img_names = sorted(glob.glob(img_dir+'/*.jpg'))\n\n    intrinsics = []\n    extrinsics = []\n    for img_name in img_names:\n        name = img_name.split('/')[-1][:-4]\n\n        extrinsics.append(np.loadtxt(os.path.join(pose_dir, name+'.txt')))\n        intrinsics.append(np.loadtxt(os.path.join(intr_dir, name+'.txt')))\n\n    intrinsics = np.stack(intrinsics, axis=0)\n    extrinsics = np.stack(extrinsics, axis=0)\n    img_names = np.asarray(img_names)\n\n    return img_names, intrinsics, extrinsics\n\ndef get_matterport_camera_data(data_path, locs_in, args):\n    '''Get all camera view related infomation of Matterport3D.'''\n\n    # find bounding box of the current region\n    bbox_l = locs_in.min(axis=0)\n    bbox_h = locs_in.max(axis=0)\n\n    building_name = data_path.split('/')[-1].split('_')[0]\n    scene_id = data_path.split('/')[-1].split('.')[0]\n\n    scene = os.path.join(args.data_root_2d, building_name)\n    img_names, intrinsics, extrinsics = obtain_intr_extr_matterport(scene)\n\n    cam_loc = extrinsics[:, :3, -1]\n    ind_in_scene = (cam_loc[:, 0] > bbox_l[0]) & (cam_loc[:, 0] < bbox_h[0]) & \\\n                    (cam_loc[:, 1] > bbox_l[1]) & (cam_loc[:, 1] < bbox_h[1]) & \\\n                    (cam_loc[:, 2] > bbox_l[2]) & (cam_loc[:, 2] < bbox_h[2])\n\n    img_names_in = img_names[ind_in_scene]\n    intrinsics_in = intrinsics[ind_in_scene]\n    extrinsics_in = extrinsics[ind_in_scene]\n    num_img = len(img_names_in)\n\n    # some regions have no views inside, we consider it differently for test and train/val\n    if args.split == 'test' and num_img == 0:\n        print('no views inside {}, take the nearest 100 images to fuse'.format(scene_id))\n        #! take the nearest 100 views for feature fusion of regions without inside views\n        centroid = (bbox_l+bbox_h)/2\n        dist_centroid = np.linalg.norm(cam_loc-centroid, axis=-1)\n        ind_in_scene = np.argsort(dist_centroid)[:100]\n        img_names_in = img_names[ind_in_scene]\n        intrinsics_in = intrinsics[ind_in_scene]\n        extrinsics_in = extrinsics[ind_in_scene]\n        num_img = 100\n\n    img_names_in = img_names_in.tolist()\n\n    return intrinsics_in, extrinsics_in, img_names_in, scene_id, num_img"
  },
  {
    "path": "field_construction/utils/general_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use\n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport torch\nimport sys\nfrom datetime import datetime\nimport numpy as np\nimport random\n\ndef inverse_sigmoid(x):\n    return torch.log(x/(1-x))\n\ndef PILtoTorch(pil_image, resolution=None):\n    if resolution is None:\n        resized_image_PIL = pil_image\n    else:\n        resized_image_PIL = pil_image.resize(resolution)\n    resized_image = torch.from_numpy(np.array(resized_image_PIL)) / 255.0\n    if len(resized_image.shape) == 3:\n        return resized_image.permute(2, 0, 1)\n    else:\n        return resized_image.unsqueeze(dim=-1).permute(2, 0, 1)\n    \ndef get_expon_lr_func(\n    lr_init, lr_final, lr_delay_steps=0, lr_delay_mult=1.0, max_steps=1000000\n):\n    \"\"\"\n    Copied from Plenoxels\n\n    Continuous learning rate decay function. Adapted from JaxNeRF\n    The returned rate is lr_init when step=0 and lr_final when step=max_steps, and\n    is log-linearly interpolated elsewhere (equivalent to exponential decay).\n    If lr_delay_steps>0 then the learning rate will be scaled by some smooth\n    function of lr_delay_mult, such that the initial learning rate is\n    lr_init*lr_delay_mult at the beginning of optimization but will be eased back\n    to the normal learning rate when steps>lr_delay_steps.\n    :param conf: config subtree 'lr' or similar\n    :param max_steps: int, the number of steps during optimization.\n    :return HoF which takes step as input\n    \"\"\"\n\n    def helper(step):\n        if step < 0 or (lr_init == 0.0 and lr_final == 0.0):\n            # Disable this parameter\n            return 0.0\n        if lr_delay_steps > 0:\n            # A kind of reverse cosine decay.\n            delay_rate = lr_delay_mult + (1 - lr_delay_mult) * np.sin(\n                0.5 * np.pi * np.clip(step / lr_delay_steps, 0, 1)\n            )\n        else:\n            delay_rate = 1.0\n        t = np.clip(step / max_steps, 0, 1)\n        log_lerp = np.exp(np.log(lr_init) * (1 - t) + np.log(lr_final) * t)\n        return delay_rate * log_lerp\n    return helper\n\ndef strip_lowerdiag(L):\n    uncertainty = torch.zeros((L.shape[0], 6), dtype=torch.float, device=\"cuda\")\n\n    uncertainty[:, 0] = L[:, 0, 0]\n    uncertainty[:, 1] = L[:, 0, 1]\n    uncertainty[:, 2] = L[:, 0, 2]\n    uncertainty[:, 3] = L[:, 1, 1]\n    uncertainty[:, 4] = L[:, 1, 2]\n    uncertainty[:, 5] = L[:, 2, 2]\n    return uncertainty\n\ndef strip_symmetric(sym):\n    return strip_lowerdiag(sym)\n\ndef build_rotation(r):\n    norm = torch.sqrt(r[:,0]*r[:,0] + r[:,1]*r[:,1] + r[:,2]*r[:,2] + r[:,3]*r[:,3])\n\n    q = r / norm[:, None]\n\n    R = torch.zeros((q.size(0), 3, 3), device='cuda')\n\n    r = q[:, 0]\n    x = q[:, 1]\n    y = q[:, 2]\n    z = q[:, 3]\n\n    R[:, 0, 0] = 1 - 2 * (y*y + z*z)\n    R[:, 0, 1] = 2 * (x*y - r*z)\n    R[:, 0, 2] = 2 * (x*z + r*y)\n    R[:, 1, 0] = 2 * (x*y + r*z)\n    R[:, 1, 1] = 1 - 2 * (x*x + z*z)\n    R[:, 1, 2] = 2 * (y*z - r*x)\n    R[:, 2, 0] = 2 * (x*z - r*y)\n    R[:, 2, 1] = 2 * (y*z + r*x)\n    R[:, 2, 2] = 1 - 2 * (x*x + y*y)\n    return R\n\ndef build_scaling(s):\n    L = torch.zeros((s.shape[0], 3, 3), dtype=torch.float, device=\"cuda\")\n    L[:,0,0] = s[:,0]\n    L[:,1,1] = s[:,1]\n    L[:,2,2] = s[:,2]\n    return L\n\ndef build_scaling_rotation(s, r):\n    L = torch.zeros((s.shape[0], 3, 3), dtype=torch.float, device=\"cuda\")\n    R = build_rotation(r)\n\n    L[:,0,0] = s[:,0]\n    L[:,1,1] = s[:,1]\n    L[:,2,2] = s[:,2]\n\n    L = R @ L\n    return L\n\ndef safe_state(silent):\n    old_f = sys.stdout\n    class F:\n        def __init__(self, silent):\n            self.silent = silent\n\n        def write(self, x):\n            if not self.silent:\n                if x.endswith(\"\\n\"):\n                    old_f.write(x.replace(\"\\n\", \" [{}]\\n\".format(str(datetime.now().strftime(\"%d/%m %H:%M:%S\")))))\n                else:\n                    old_f.write(x)\n\n        def flush(self):\n            old_f.flush()\n\n    sys.stdout = F(silent)\n\n    random.seed(0)\n    np.random.seed(0)\n    torch.manual_seed(0)\n    torch.cuda.set_device(torch.device(\"cuda:0\"))\n"
  },
  {
    "path": "field_construction/utils/graphics_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport torch\nimport math\nimport numpy as np\nfrom typing import NamedTuple\n\ndef ndc_2_cam(ndc_xyz, intrinsic, W, H):\n    inv_scale = torch.tensor([[W - 1, H - 1]], device=ndc_xyz.device)\n    cam_z = ndc_xyz[..., 2:3]\n    cam_xy = ndc_xyz[..., :2] * inv_scale * cam_z\n    cam_xyz = torch.cat([cam_xy, cam_z], dim=-1)\n    cam_xyz = cam_xyz @ torch.inverse(intrinsic[0, ...].t())\n    return cam_xyz\n\ndef depth2point_cam(sampled_depth, ref_intrinsic):\n    B, N, C, H, W = sampled_depth.shape\n    valid_z = sampled_depth\n    valid_x = torch.arange(W, dtype=torch.float32, device=sampled_depth.device) / (W - 1)\n    valid_y = torch.arange(H, dtype=torch.float32, device=sampled_depth.device) / (H - 1)\n    valid_x, valid_y = torch.meshgrid(valid_x, valid_y, indexing='xy')\n    # B,N,H,W\n    valid_x = valid_x[None, None, None, ...].expand(B, N, C, -1, -1)\n    valid_y = valid_y[None, None, None, ...].expand(B, N, C, -1, -1)\n    ndc_xyz = torch.stack([valid_x, valid_y, valid_z], dim=-1).view(B, N, C, H, W, 3)  # 1, 1, 5, 512, 640, 3\n    cam_xyz = ndc_2_cam(ndc_xyz, ref_intrinsic, W, H) # 1, 1, 5, 512, 640, 3\n    return ndc_xyz, cam_xyz\n\ndef depth2point_world(depth_image, intrinsic_matrix, extrinsic_matrix):\n    # depth_image: (H, W), intrinsic_matrix: (3, 3), extrinsic_matrix: (4, 4)\n    _, xyz_cam = depth2point_cam(depth_image[None,None,None,...], intrinsic_matrix[None,...])\n    xyz_cam = xyz_cam.reshape(-1,3)\n    # xyz_world = torch.cat([xyz_cam, torch.ones_like(xyz_cam[...,0:1])], axis=-1) @ torch.inverse(extrinsic_matrix).transpose(0,1)\n    # xyz_world = xyz_world[...,:3]\n\n    return xyz_cam\n\ndef depth_pcd2normal(xyz, offset=None, gt_image=None):\n    hd, wd, _ = xyz.shape \n    if offset is not None:\n        ix, iy = torch.meshgrid(\n            torch.arange(wd), torch.arange(hd), indexing='xy')\n        xy = (torch.stack((ix, iy), dim=-1)[1:-1,1:-1]).to(xyz.device)\n        p_offset = torch.tensor([[0,1],[0,-1],[1,0],[-1,0]]).float().to(xyz.device)\n        new_offset = p_offset[None,None] + offset.reshape(hd, wd, 4, 2)[1:-1,1:-1]\n        xys = xy[:,:,None] + new_offset\n        xys[..., 0] = 2 * xys[..., 0] / (wd - 1) - 1.0\n        xys[..., 1] = 2 * xys[..., 1] / (hd - 1) - 1.0\n        sampled_xyzs = torch.nn.functional.grid_sample(xyz.permute(2,0,1)[None], xys.reshape(1, -1, 1, 2))\n        sampled_xyzs = sampled_xyzs.permute(0,2,3,1).reshape(hd-2,wd-2,4,3)\n        bottom_point = sampled_xyzs[:,:,0]\n        top_point = sampled_xyzs[:,:,1]\n        right_point = sampled_xyzs[:,:,2]\n        left_point = sampled_xyzs[:,:,3]\n    else:\n        bottom_point = xyz[..., 2:hd,   1:wd-1, :]\n        top_point    = xyz[..., 0:hd-2, 1:wd-1, :]\n        right_point  = xyz[..., 1:hd-1, 2:wd,   :]\n        left_point   = xyz[..., 1:hd-1, 0:wd-2, :]\n    left_to_right = right_point - left_point\n    bottom_to_top = top_point - bottom_point \n    xyz_normal = torch.cross(left_to_right, bottom_to_top, dim=-1)\n    xyz_normal = torch.nn.functional.normalize(xyz_normal, p=2, dim=-1)\n    xyz_normal = torch.nn.functional.pad(xyz_normal.permute(2,0,1), (1,1,1,1), mode='constant').permute(1,2,0)\n    return xyz_normal\n\ndef normal_from_depth_image(depth, intrinsic_matrix, extrinsic_matrix, offset=None, gt_image=None):\n    # depth: (H, W), intrinsic_matrix: (3, 3), extrinsic_matrix: (4, 4)\n    # xyz_normal: (H, W, 3)\n    xyz_world = depth2point_world(depth, intrinsic_matrix, extrinsic_matrix) # (HxW, 3)        \n    xyz_world = xyz_world.reshape(*depth.shape, 3)\n    xyz_normal = depth_pcd2normal(xyz_world, offset, gt_image)\n\n    return xyz_normal\n\ndef normal_from_neareast(normal, offset):\n    _, hd, wd = normal.shape \n    left_top_point = normal[..., 0:hd-2, 0:wd-2]\n    top_point      = normal[..., 0:hd-2, 1:wd-1]\n    right_top_point= normal[..., 0:hd-2, 2:wd]\n    left_point   = normal[..., 1:hd-1, 0:wd-2]\n    right_point  = normal[..., 1:hd-1, 2:wd]\n    left_bottom_point   = normal[..., 2:hd, 0:wd-2]\n    bottom_point = normal[..., 2:hd,   1:wd-1]\n    right_bottom_point   = normal[..., 2:hd, 2:wd]\n    normals = torch.stack((left_top_point,top_point,right_top_point,left_point,right_point,left_bottom_point,bottom_point,right_bottom_point),dim=0)\n    new_normal = (normals * offset[:,None,1:-1,1:-1]).sum(0)\n    new_normal = torch.nn.functional.normalize(new_normal, p=2, dim=0)\n    new_normal = torch.nn.functional.pad(new_normal, (1,1,1,1), mode='constant').permute(1,2,0)\n    return new_normal\n\nclass BasicPointCloud(NamedTuple):\n    points : np.array\n    colors : np.array\n    normals : np.array\n\ndef geom_transform_points(points, transf_matrix):\n    P, _ = points.shape\n    ones = torch.ones(P, 1, dtype=points.dtype, device=points.device)\n    points_hom = torch.cat([points, ones], dim=1)\n    points_out = torch.matmul(points_hom, transf_matrix.unsqueeze(0))\n\n    denom = points_out[..., 3:] + 0.0000001\n    return (points_out[..., :3] / denom).squeeze(dim=0)\n\ndef getWorld2View(R, t):\n    Rt = np.zeros((4, 4))\n    Rt[:3, :3] = R.transpose()\n    Rt[:3, 3] = t\n    Rt[3, 3] = 1.0\n    return np.float32(Rt)\n\ndef getWorld2View2(R, t, translate=np.array([.0, .0, .0]), scale=1.0):\n    Rt = np.zeros((4, 4))\n    Rt[:3, :3] = R.transpose()\n    Rt[:3, 3] = t\n    Rt[3, 3] = 1.0\n\n    C2W = np.linalg.inv(Rt)\n    cam_center = C2W[:3, 3]\n    cam_center = (cam_center + translate) * scale\n    C2W[:3, 3] = cam_center\n    Rt = np.linalg.inv(C2W)\n    return np.float32(Rt)\n\ndef getProjectionMatrix(znear, zfar, fovX, fovY):\n    tanHalfFovY = math.tan((fovY / 2))\n    tanHalfFovX = math.tan((fovX / 2))\n\n    top = tanHalfFovY * znear\n    bottom = -top\n    right = tanHalfFovX * znear\n    left = -right\n\n    P = torch.zeros(4, 4)\n\n    z_sign = 1.0\n\n    P[0, 0] = 2.0 * znear / (right - left)\n    P[1, 1] = 2.0 * znear / (top - bottom)\n    P[0, 2] = (right + left) / (right - left)\n    P[1, 2] = (top + bottom) / (top - bottom)\n    P[3, 2] = z_sign\n    P[2, 2] = z_sign * zfar / (zfar - znear)\n    P[2, 3] = -(zfar * znear) / (zfar - znear)\n    return P\n\ndef getProjectionMatrixCenterShift(znear, zfar, cx, cy, fl_x, fl_y, w, h):\n    top = cy / fl_y * znear\n    bottom = -(h - cy) / fl_y * znear\n\n    left = -(w - cx) / fl_x * znear\n    right = cx / fl_x * znear\n\n    P = torch.zeros(4, 4)\n\n    z_sign = 1.0\n\n    P[0, 0] = 2.0 * znear / (right - left)\n    P[1, 1] = 2.0 * znear / (top - bottom)\n    P[0, 2] = (right + left) / (right - left)\n    P[1, 2] = (top + bottom) / (top - bottom)\n    P[3, 2] = z_sign\n    P[2, 2] = z_sign * zfar / (zfar - znear)\n    P[2, 3] = -(zfar * znear) / (zfar - znear)\n    return P\n\ndef fov2focal(fov, pixels):\n    return pixels / (2 * math.tan(fov / 2))\n\ndef focal2fov(focal, pixels):\n    return 2*math.atan(pixels/(2*focal))\n\ndef patch_offsets(h_patch_size, device):\n    offsets = torch.arange(-h_patch_size, h_patch_size + 1, device=device)\n    return torch.stack(torch.meshgrid(offsets, offsets, indexing='xy')[::-1], dim=-1).view(1, -1, 2)\n\ndef patch_warp(H, uv):\n    B, P = uv.shape[:2]\n    H = H.view(B, 3, 3)\n    ones = torch.ones((B,P,1), device=uv.device)\n    homo_uv = torch.cat((uv, ones), dim=-1)\n\n    grid_tmp = torch.einsum(\"bik,bpk->bpi\", H, homo_uv)\n    grid_tmp = grid_tmp.reshape(B, P, 3)\n    grid = grid_tmp[..., :2] / (grid_tmp[..., 2:] + 1e-10)\n    return grid\n"
  },
  {
    "path": "field_construction/utils/image_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use\n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport torch\nimport torch.nn.functional as F\n\ndef mse(img1, img2):\n    return (((img1 - img2)) ** 2).view(img1.shape[0], -1).mean(1, keepdim=True)\n\ndef psnr(img1, img2):\n    mse = (((img1 - img2)) ** 2).view(img1.shape[0], -1).mean(1, keepdim=True)\n    return 20 * torch.log10(1.0 / torch.sqrt(mse))\n\ndef dilate(bin_img, ksize=5):\n    pad = (ksize - 1) // 2\n    bin_img = F.pad(bin_img, pad=[pad, pad, pad, pad], mode='reflect')\n    out = F.max_pool2d(bin_img, kernel_size=ksize, stride=1, padding=0)\n    return out\n\ndef erode(bin_img, ksize=5):\n    out = 1 - dilate(1 - bin_img, ksize)\n    return out\n"
  },
  {
    "path": "field_construction/utils/loss_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nfrom math import exp\n\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nfrom torch.autograd import Variable\n\n\ndef l1_loss(network_output, gt):\n    return torch.abs((network_output - gt)).mean()\n\n\ndef l2_loss(network_output, gt):\n    return ((network_output - gt) ** 2).mean()\n\n\ndef cos_loss(network_output, gt):\n    return 1 - F.cosine_similarity(network_output, gt, dim=0).mean()\n\n\ndef gaussian(window_size, sigma):\n    gauss = torch.Tensor([exp(-(x - window_size // 2) ** 2 / float(2 * sigma ** 2)) for x in range(window_size)])\n    return gauss / gauss.sum()\n\n\ndef create_window(window_size, channel):\n    _1D_window = gaussian(window_size, 1.5).unsqueeze(1)\n    _2D_window = _1D_window.mm(_1D_window.t()).float().unsqueeze(0).unsqueeze(0)\n    window = Variable(_2D_window.expand(channel, 1, window_size, window_size).contiguous())\n    return window\n\n\ndef ssim(img1, img2, window_size=11, size_average=True):\n    channel = img1.size(-3)\n    window = create_window(window_size, channel)\n\n    if img1.is_cuda:\n        window = window.cuda(img1.get_device())\n    window = window.type_as(img1)\n\n    return _ssim(img1, img2, window, window_size, channel, size_average)\n\n\ndef _ssim(img1, img2, window, window_size, channel, size_average=True):\n    mu1 = F.conv2d(img1, window, padding=window_size // 2, groups=channel)\n    mu2 = F.conv2d(img2, window, padding=window_size // 2, groups=channel)\n\n    mu1_sq = mu1.pow(2)\n    mu2_sq = mu2.pow(2)\n    mu1_mu2 = mu1 * mu2\n\n    sigma1_sq = F.conv2d(img1 * img1, window, padding=window_size // 2, groups=channel) - mu1_sq\n    sigma2_sq = F.conv2d(img2 * img2, window, padding=window_size // 2, groups=channel) - mu2_sq\n    sigma12 = F.conv2d(img1 * img2, window, padding=window_size // 2, groups=channel) - mu1_mu2\n\n    C1 = 0.01 ** 2\n    C2 = 0.03 ** 2\n\n    ssim_map = ((2 * mu1_mu2 + C1) * (2 * sigma12 + C2)) / ((mu1_sq + mu2_sq + C1) * (sigma1_sq + sigma2_sq + C2))\n\n    if size_average:\n        return ssim_map.mean()\n    else:\n        return ssim_map.mean(1).mean(1).mean(1)\n\n\ndef ssim2(img1, img2, window_size=11):\n    channel = img1.size(-3)\n    window = create_window(window_size, channel)\n\n    if img1.is_cuda:\n        window = window.cuda(img1.get_device())\n    window = window.type_as(img1)\n\n    mu1 = F.conv2d(img1, window, padding=window_size // 2, groups=channel)\n    mu2 = F.conv2d(img2, window, padding=window_size // 2, groups=channel)\n\n    mu1_sq = mu1.pow(2)\n    mu2_sq = mu2.pow(2)\n    mu1_mu2 = mu1 * mu2\n\n    sigma1_sq = F.conv2d(img1 * img1, window, padding=window_size // 2, groups=channel) - mu1_sq\n    sigma2_sq = F.conv2d(img2 * img2, window, padding=window_size // 2, groups=channel) - mu2_sq\n    sigma12 = F.conv2d(img1 * img2, window, padding=window_size // 2, groups=channel) - mu1_mu2\n\n    C1 = 0.01 ** 2\n    C2 = 0.03 ** 2\n\n    ssim_map = ((2 * mu1_mu2 + C1) * (2 * sigma12 + C2)) / ((mu1_sq + mu2_sq + C1) * (sigma1_sq + sigma2_sq + C2))\n\n    return ssim_map.mean(0)\n\n\ndef get_img_grad_weight(img, beta=2.0):\n    _, hd, wd = img.shape\n    bottom_point = img[..., 2:hd, 1:wd - 1]\n    top_point = img[..., 0:hd - 2, 1:wd - 1]\n    right_point = img[..., 1:hd - 1, 2:wd]\n    left_point = img[..., 1:hd - 1, 0:wd - 2]\n    grad_img_x = torch.mean(torch.abs(right_point - left_point), 0, keepdim=True)\n    grad_img_y = torch.mean(torch.abs(top_point - bottom_point), 0, keepdim=True)\n    grad_img = torch.cat((grad_img_x, grad_img_y), dim=0)\n    grad_img, _ = torch.max(grad_img, dim=0)\n    grad_img = (grad_img - grad_img.min()) / (grad_img.max() - grad_img.min())\n    grad_img = torch.nn.functional.pad(grad_img[None, None], (1, 1, 1, 1), mode='constant', value=1.0).squeeze()\n    return grad_img\n\n\ndef lncc(ref, nea):\n    # ref_gray: [batch_size, total_patch_size]\n    # nea_grays: [batch_size, total_patch_size]\n    bs, tps = nea.shape\n    patch_size = int(np.sqrt(tps))\n\n    ref_nea = ref * nea\n    ref_nea = ref_nea.view(bs, 1, patch_size, patch_size)\n    ref = ref.view(bs, 1, patch_size, patch_size)\n    nea = nea.view(bs, 1, patch_size, patch_size)\n    ref2 = ref.pow(2)\n    nea2 = nea.pow(2)\n\n    # sum over kernel\n    filters = torch.ones(1, 1, patch_size, patch_size, device=ref.device)\n    padding = patch_size // 2\n    ref_sum = F.conv2d(ref, filters, stride=1, padding=padding)[:, :, padding, padding]\n    nea_sum = F.conv2d(nea, filters, stride=1, padding=padding)[:, :, padding, padding]\n    ref2_sum = F.conv2d(ref2, filters, stride=1, padding=padding)[:, :, padding, padding]\n    nea2_sum = F.conv2d(nea2, filters, stride=1, padding=padding)[:, :, padding, padding]\n    ref_nea_sum = F.conv2d(ref_nea, filters, stride=1, padding=padding)[:, :, padding, padding]\n\n    # average over kernel\n    ref_avg = ref_sum / tps\n    nea_avg = nea_sum / tps\n\n    cross = ref_nea_sum - nea_avg * ref_sum\n    ref_var = ref2_sum - ref_avg * ref_sum\n    nea_var = nea2_sum - nea_avg * nea_sum\n\n    cc = cross * cross / (ref_var * nea_var + 1e-8)\n    ncc = 1 - cc\n    ncc = torch.clamp(ncc, 0.0, 2.0)\n    ncc = torch.mean(ncc, dim=1, keepdim=True)\n    mask = (ncc < 0.9)\n    return ncc, mask\n\n\ndef loss_cls_3d(features, predictions, k=5, lambda_val=2.0, max_points=200000, sample_size=800):\n    # Randomly downsample\n    if features.size(0) > max_points:\n        indices = torch.randperm(features.size(0))[:max_points]\n        features = features[indices]\n        predictions = predictions[indices]\n    # Normalize predictions to [0, 1] range\n    min_value = predictions.min()\n    max_value = predictions.max()\n    if max_value > min_value:\n        predictions = (predictions - min_value) / (max_value - min_value)\n\n    # Randomly sample points for which we'll compute the loss\n    indices = torch.randperm(features.size(0))[:sample_size]\n    sample_features = features[indices]\n    sample_preds = predictions[indices]\n\n    # Compute top-k nearest neighbors directly in PyTorch\n    dists = torch.cdist(sample_features, features)  # Compute pairwise distances\n    _, neighbor_indices_tensor = dists.topk(k, largest=False)  # Get top-k smallest distances\n\n    # Fetch neighbor predictions using indexing\n    neighbor_preds = predictions[neighbor_indices_tensor]\n\n    # Compute KL divergence\n    kl = sample_preds.unsqueeze(1) * (torch.log(sample_preds.unsqueeze(1) + 1e-10) - torch.log(neighbor_preds + 1e-10))\n    loss = torch.abs(kl).mean()\n\n    return lambda_val * loss\n\n\ndef get_loss_semantic_group(gt_seg, language_feature, num=10000):\n    # Randomly select num indices from gt_seg\n    if gt_seg.size(0) < num:\n        indices = torch.randperm(gt_seg.size(0))\n        num = gt_seg.size(0)\n    else:\n        indices = torch.randperm(gt_seg.size(0))[:num]\n    input_id1 = input_id2 = gt_seg[indices]\n    language_feature = language_feature[indices]\n\n    # Expand labels, create masks for valid positive pairs, excluding self-pairs.\n    labels1_expanded = input_id1.unsqueeze(1).expand(-1, input_id1.shape[0])\n    labels2_expanded = input_id2.unsqueeze(0).expand(input_id2.shape[0], -1)\n    mask_full_positive = labels1_expanded == labels2_expanded\n    block_mask = torch.ones(num, num, dtype=torch.bool, device=gt_seg.device)\n    block_mask = torch.triu(block_mask, diagonal=0)\n    diag_mask = torch.eye(block_mask.shape[0], device=gt_seg.device, dtype=torch.bool)\n    # Compute semantic loss for positive pairs\n    total_loss = 0\n    mask = torch.where(mask_full_positive * block_mask * (~diag_mask))\n    semantic_loss = torch.norm(\n        language_feature[mask[0]] - language_feature[mask[1]], p=2, dim=-1\n    ).nansum()\n    total_loss += semantic_loss\n    total_loss = total_loss / torch.sum(block_mask).float()\n    return 2 * total_loss\n\n\ndef get_loss_instance_group(sam_seg, instance_feature, language_feature, num=1000):\n    # Randomly select num indices from gt_seg\n    margin = 1.0\n    if sam_seg.size(0) < num:\n        indices = torch.randperm(sam_seg.size(0))\n        num = sam_seg.size(0)\n    else:\n        indices = torch.randperm(sam_seg.size(0))[:num]\n    instance_feature = instance_feature[indices]\n    input_id1 = input_id2 = sam_seg[indices]\n    language_feature = language_feature[indices]\n\n    # Expand labels, create masks for valid positive pairs, excluding self-pairs.\n    labels1_expanded = input_id1.unsqueeze(1).expand(-1, input_id1.shape[0])\n    labels2_expanded = input_id2.unsqueeze(0).expand(input_id2.shape[0], -1)\n    mask_full_positive = labels1_expanded == labels2_expanded\n    mask_full_negative = ~mask_full_positive\n    block_mask = torch.ones(num, num, dtype=torch.bool, device=sam_seg.device)\n    block_mask = torch.triu(block_mask, diagonal=0)\n    diag_mask = torch.eye(block_mask.shape[0], device=sam_seg.device, dtype=torch.bool)\n\n    # Compute instance loss for positive pairs\n    total_loss = 0\n    mask = torch.where(mask_full_positive * block_mask * (~diag_mask))\n    instance_loss_1 = torch.norm(\n        instance_feature[mask[0]] - instance_feature[mask[1]], p=2, dim=-1\n    ).nansum()\n    total_loss += instance_loss_1\n\n    # Create mask for negative pairs and compute language similarity using cosine similarity\n    mask = torch.where(mask_full_negative * block_mask)\n    language_similarity = torch.nn.functional.cosine_similarity(\n        language_feature[mask[0]], language_feature[mask[1]], dim=-1\n    )\n\n    # Compute instance loss for negative pairs with margin and language similarity\n    instance_loss_2 = (\n            torch.relu(\n                margin - torch.norm(instance_feature[mask[0]] - instance_feature[mask[1]], p=2, dim=-1)\n            ) * (1 + language_similarity)\n    ).nansum()\n    total_loss += instance_loss_2\n    total_loss = total_loss / torch.sum(block_mask).float()\n    return 2 * total_loss\n\ndef ranking_loss(error, penalize_ratio=1.0, type=\"mean\"):\n    sorted_error, _ = torch.sort(error.flatten(), descending=True)\n    k = int(penalize_ratio * len(sorted_error))\n    if k == 0:\n        return torch.tensor(0.0, device=error.device)\n    selected_error = sorted_error[:k]\n    if type == \"mean\":\n        return torch.mean(selected_error)\n    elif type == \"sum\":\n        return torch.sum(selected_error)\n    else:\n        raise ValueError(f\"Unsupported type: {type}\")\n"
  },
  {
    "path": "field_construction/utils/pose_utils.py",
    "content": "import math\nimport os\nfrom typing import Tuple\n\nimport numpy as np\nimport scipy\nimport torch\nimport torch.nn.functional as F\n\nfrom utils.stepfun import sample, sample_np\n\n\ndef quad2rotation(q):\n    \"\"\"\n    Convert quaternion to rotation in batch. Since all operation in pytorch, support gradient passing.\n\n    Args:\n        quad (tensor, batch_size*4): quaternion.\n\n    Returns:\n        rot_mat (tensor, batch_size*3*3): rotation.\n    \"\"\"\n    # bs = quad.shape[0]\n    # qr, qi, qj, qk = quad[:, 0], quad[:, 1], quad[:, 2], quad[:, 3]\n    # two_s = 2.0 / (quad * quad).sum(-1)\n    # rot_mat = torch.zeros(bs, 3, 3).to(quad.get_device())\n    # rot_mat[:, 0, 0] = 1 - two_s * (qj**2 + qk**2)\n    # rot_mat[:, 0, 1] = two_s * (qi * qj - qk * qr)\n    # rot_mat[:, 0, 2] = two_s * (qi * qk + qj * qr)\n    # rot_mat[:, 1, 0] = two_s * (qi * qj + qk * qr)\n    # rot_mat[:, 1, 1] = 1 - two_s * (qi**2 + qk**2)\n    # rot_mat[:, 1, 2] = two_s * (qj * qk - qi * qr)\n    # rot_mat[:, 2, 0] = two_s * (qi * qk - qj * qr)\n    # rot_mat[:, 2, 1] = two_s * (qj * qk + qi * qr)\n    # rot_mat[:, 2, 2] = 1 - two_s * (qi**2 + qj**2)\n    # return rot_mat\n    if not isinstance(q, torch.Tensor):\n        q = torch.tensor(q).cuda()\n\n    norm = torch.sqrt(\n        q[:, 0] * q[:, 0] + q[:, 1] * q[:, 1] + q[:, 2] * q[:, 2] + q[:, 3] * q[:, 3]\n    )\n    q = q / norm[:, None]\n    rot = torch.zeros((q.size(0), 3, 3)).to(q)\n    r = q[:, 0]\n    x = q[:, 1]\n    y = q[:, 2]\n    z = q[:, 3]\n    rot[:, 0, 0] = 1 - 2 * (y * y + z * z)\n    rot[:, 0, 1] = 2 * (x * y - r * z)\n    rot[:, 0, 2] = 2 * (x * z + r * y)\n    rot[:, 1, 0] = 2 * (x * y + r * z)\n    rot[:, 1, 1] = 1 - 2 * (x * x + z * z)\n    rot[:, 1, 2] = 2 * (y * z - r * x)\n    rot[:, 2, 0] = 2 * (x * z - r * y)\n    rot[:, 2, 1] = 2 * (y * z + r * x)\n    rot[:, 2, 2] = 1 - 2 * (x * x + y * y)\n    return rot\n\ndef get_camera_from_tensor(inputs):\n    \"\"\"\n    Convert quaternion and translation to transformation matrix.\n\n    \"\"\"\n    if not isinstance(inputs, torch.Tensor):\n        inputs = torch.tensor(inputs).cuda()\n\n    N = len(inputs.shape)\n    if N == 1:\n        inputs = inputs.unsqueeze(0)\n    # quad, T = inputs[:, :4], inputs[:, 4:]\n    # # normalize quad\n    # quad = F.normalize(quad)\n    # R = quad2rotation(quad)\n    # RT = torch.cat([R, T[:, :, None]], 2)\n    # # Add homogenous row\n    # homogenous_row = torch.tensor([0, 0, 0, 1]).cuda()\n    # RT = torch.cat([RT, homogenous_row[None, None, :].repeat(N, 1, 1)], 1)\n    # if N == 1:\n    #     RT = RT[0]\n    # return RT\n\n    quad, T = inputs[:, :4], inputs[:, 4:]\n    w2c = torch.eye(4).to(inputs).float()\n    w2c[:3, :3] = quad2rotation(quad)\n    w2c[:3, 3] = T\n    return w2c\n\ndef quadmultiply(q1, q2):\n    \"\"\"\n    Multiply two quaternions together using quaternion arithmetic\n    \"\"\"\n    # Extract scalar and vector parts of the quaternions\n    w1, x1, y1, z1 = q1.unbind(dim=-1)\n    w2, x2, y2, z2 = q2.unbind(dim=-1)\n    # Calculate the quaternion product\n    result_quaternion = torch.stack(\n        [\n            w1 * w2 - x1 * x2 - y1 * y2 - z1 * z2,\n            w1 * x2 + x1 * w2 + y1 * z2 - z1 * y2,\n            w1 * y2 - x1 * z2 + y1 * w2 + z1 * x2,\n            w1 * z2 + x1 * y2 - y1 * x2 + z1 * w2,\n        ],\n        dim=-1,\n    )\n\n    return result_quaternion\n\ndef _sqrt_positive_part(x: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Returns torch.sqrt(torch.max(0, x))\n    but with a zero subgradient where x is 0.\n    Source: https://pytorch3d.readthedocs.io/en/latest/_modules/pytorch3d/transforms/rotation_conversions.html#matrix_to_quaternion\n    \"\"\"\n    ret = torch.zeros_like(x)\n    positive_mask = x > 0\n    ret[positive_mask] = torch.sqrt(x[positive_mask])\n    return ret\n\ndef rotation2quad(matrix: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Convert rotations given as rotation matrices to quaternions.\n\n    Args:\n        matrix: Rotation matrices as tensor of shape (..., 3, 3).\n\n    Returns:\n        quaternions with real part first, as tensor of shape (..., 4).\n    Source: https://pytorch3d.readthedocs.io/en/latest/_modules/pytorch3d/transforms/rotation_conversions.html#matrix_to_quaternion\n    \"\"\"\n    if matrix.size(-1) != 3 or matrix.size(-2) != 3:\n        raise ValueError(f\"Invalid rotation matrix shape {matrix.shape}.\")\n\n    if not isinstance(matrix, torch.Tensor):\n        matrix = torch.tensor(matrix).cuda()\n\n    batch_dim = matrix.shape[:-2]\n    m00, m01, m02, m10, m11, m12, m20, m21, m22 = torch.unbind(\n        matrix.reshape(batch_dim + (9,)), dim=-1\n    )\n\n    q_abs = _sqrt_positive_part(\n        torch.stack(\n            [\n                1.0 + m00 + m11 + m22,\n                1.0 + m00 - m11 - m22,\n                1.0 - m00 + m11 - m22,\n                1.0 - m00 - m11 + m22,\n            ],\n            dim=-1,\n        )\n    )\n\n    # we produce the desired quaternion multiplied by each of r, i, j, k\n    quat_by_rijk = torch.stack(\n        [\n            # pyre-fixme[58]: `**` is not supported for operand types `Tensor` and\n            #  `int`.\n            torch.stack([q_abs[..., 0] ** 2, m21 - m12, m02 - m20, m10 - m01], dim=-1),\n            # pyre-fixme[58]: `**` is not supported for operand types `Tensor` and\n            #  `int`.\n            torch.stack([m21 - m12, q_abs[..., 1] ** 2, m10 + m01, m02 + m20], dim=-1),\n            # pyre-fixme[58]: `**` is not supported for operand types `Tensor` and\n            #  `int`.\n            torch.stack([m02 - m20, m10 + m01, q_abs[..., 2] ** 2, m12 + m21], dim=-1),\n            # pyre-fixme[58]: `**` is not supported for operand types `Tensor` and\n            #  `int`.\n            torch.stack([m10 - m01, m20 + m02, m21 + m12, q_abs[..., 3] ** 2], dim=-1),\n        ],\n        dim=-2,\n    )\n\n    # We floor here at 0.1 but the exact level is not important; if q_abs is small,\n    # the candidate won't be picked.\n    flr = torch.tensor(0.1).to(dtype=q_abs.dtype, device=q_abs.device)\n    quat_candidates = quat_by_rijk / (2.0 * q_abs[..., None].max(flr))\n\n    # if not for numerical problems, quat_candidates[i] should be same (up to a sign),\n    # forall i; we pick the best-conditioned one (with the largest denominator)\n\n    return quat_candidates[\n        F.one_hot(q_abs.argmax(dim=-1), num_classes=4) > 0.5, :\n    ].reshape(batch_dim + (4,))\n\n\ndef get_tensor_from_camera(RT, Tquad=False):\n    \"\"\"\n    Convert transformation matrix to quaternion and translation.\n\n    \"\"\"\n    # gpu_id = -1\n    # if type(RT) == torch.Tensor:\n    #     if RT.get_device() != -1:\n    #         gpu_id = RT.get_device()\n    #         RT = RT.detach().cpu()\n    #     RT = RT.numpy()\n    # from mathutils import Matrix\n    #\n    # R, T = RT[:3, :3], RT[:3, 3]\n    # rot = Matrix(R)\n    # quad = rot.to_quaternion()\n    # if Tquad:\n    #     tensor = np.concatenate([T, quad], 0)\n    # else:\n    #     tensor = np.concatenate([quad, T], 0)\n    # tensor = torch.from_numpy(tensor).float()\n    # if gpu_id != -1:\n    #     tensor = tensor.to(gpu_id)\n    # return tensor\n\n    if not isinstance(RT, torch.Tensor):\n        RT = torch.tensor(RT).cuda()\n\n    rot = RT[:3, :3].unsqueeze(0).detach()\n    quat = rotation2quad(rot).squeeze()\n    tran = RT[:3, 3].detach()\n\n    return torch.cat([quat, tran])\n\ndef normalize(x):\n    return x / np.linalg.norm(x)\n\n\ndef viewmatrix(lookdir, up, position, subtract_position=False):\n  \"\"\"Construct lookat view matrix.\"\"\"\n  vec2 = normalize((lookdir - position) if subtract_position else lookdir)\n  vec0 = normalize(np.cross(up, vec2))\n  vec1 = normalize(np.cross(vec2, vec0))\n  m = np.stack([vec0, vec1, vec2, position], axis=1)\n  return m\n\n\ndef poses_avg(poses):\n  \"\"\"New pose using average position, z-axis, and up vector of input poses.\"\"\"\n  position = poses[:, :3, 3].mean(0)\n  z_axis = poses[:, :3, 2].mean(0)\n  up = poses[:, :3, 1].mean(0)\n  cam2world = viewmatrix(z_axis, up, position)\n  return cam2world\n\n\ndef focus_point_fn(poses):\n    \"\"\"Calculate nearest point to all focal axes in poses.\"\"\"\n    directions, origins = poses[:, :3, 2:3], poses[:, :3, 3:4]\n    m = np.eye(3) - directions * np.transpose(directions, [0, 2, 1])\n    mt_m = np.transpose(m, [0, 2, 1]) @ m\n    focus_pt = np.linalg.inv(mt_m.mean(0)) @ (mt_m @ origins).mean(0)[:, 0]\n    return focus_pt\n\n\ndef pad_poses(p):\n    \"\"\"Pad [..., 3, 4] pose matrices with a homogeneous bottom row [0,0,0,1].\"\"\"\n    bottom = np.broadcast_to([0, 0, 0, 1.], p[..., :1, :4].shape)\n    return np.concatenate([p[..., :3, :4], bottom], axis=-2)\n\ndef unpad_poses(p):\n    \"\"\"Remove the homogeneous bottom row from [..., 4, 4] pose matrices.\"\"\"\n    return p[..., :3, :4]\n\ndef transform_poses_pca(poses):\n    \"\"\"Transforms poses so principal components lie on XYZ axes.\n\n  Args:\n    poses: a (N, 3, 4) array containing the cameras' camera to world transforms.\n\n  Returns:\n    A tuple (poses, transform), with the transformed poses and the applied\n    camera_to_world transforms.\n  \"\"\"\n    t = poses[:, :3, 3]\n    t_mean = t.mean(axis=0)\n    t = t - t_mean\n\n    eigval, eigvec = np.linalg.eig(t.T @ t)\n    # Sort eigenvectors in order of largest to smallest eigenvalue.\n    inds = np.argsort(eigval)[::-1]\n    eigvec = eigvec[:, inds]\n    rot = eigvec.T\n    if np.linalg.det(rot) < 0:\n        rot = np.diag(np.array([1, 1, -1])) @ rot\n\n    transform = np.concatenate([rot, rot @ -t_mean[:, None]], -1)\n    poses_recentered = unpad_poses(transform @ pad_poses(poses))\n    transform = np.concatenate([transform, np.eye(4)[3:]], axis=0)\n\n    # Flip coordinate system if z component of y-axis is negative\n    if poses_recentered.mean(axis=0)[2, 1] < 0:\n        poses_recentered = np.diag(np.array([1, -1, -1])) @ poses_recentered\n        transform = np.diag(np.array([1, -1, -1, 1])) @ transform\n\n    # Just make sure it's it in the [-1, 1]^3 cube\n    scale_factor = 1. / np.max(np.abs(poses_recentered[:, :3, 3]))\n    poses_recentered[:, :3, 3] *= scale_factor\n    transform = np.diag(np.array([scale_factor] * 3 + [1])) @ transform\n    return poses_recentered, transform\n\n\ndef recenter_poses(poses: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:\n  \"\"\"Recenter poses around the origin.\"\"\"\n  cam2world = poses_avg(poses)\n  transform = np.linalg.inv(pad_poses(cam2world))\n  poses = transform @ pad_poses(poses)\n  return unpad_poses(poses), transform\n\ndef generate_ellipse_path(views, n_frames=600, const_speed=True, z_variation=0., z_phase=0.):\n    poses = []\n    for view in views:\n        tmp_view = np.eye(4)\n        tmp_view[:3] = np.concatenate([view.R.T, view.T[:, None]], 1)\n        tmp_view = np.linalg.inv(tmp_view)\n        tmp_view[:, 1:3] *= -1\n        poses.append(tmp_view)\n    poses = np.stack(poses, 0)\n    poses, transform = transform_poses_pca(poses)\n\n\n    # Calculate the focal point for the path (cameras point toward this).\n    center = focus_point_fn(poses)\n    # Path height sits at z=0 (in middle of zero-mean capture pattern).\n    offset = np.array([center[0] , center[1],  0 ])\n    # Calculate scaling for ellipse axes based on input camera positions.\n    sc = np.percentile(np.abs(poses[:, :3, 3] - offset), 90, axis=0)\n\n    # Use ellipse that is symmetric about the focal point in xy.\n    low = -sc + offset\n    high = sc + offset\n    # Optional height variation need not be symmetric\n    z_low = np.percentile((poses[:, :3, 3]), 10, axis=0)\n    z_high = np.percentile((poses[:, :3, 3]), 90, axis=0)\n\n\n    def get_positions(theta):\n        # Interpolate between bounds with trig functions to get ellipse in x-y.\n        # Optionally also interpolate in z to change camera height along path.\n        return np.stack([\n            (low[0] + (high - low)[0] * (np.cos(theta) * .5 + .5)),\n            (low[1] + (high - low)[1] * (np.sin(theta) * .5 + .5)),\n            z_variation * (z_low[2] + (z_high - z_low)[2] *\n                           (np.cos(theta + 2 * np.pi * z_phase) * .5 + .5)),\n        ], -1)\n\n    theta = np.linspace(0, 2. * np.pi, n_frames + 1, endpoint=True)\n    positions = get_positions(theta)\n\n    if const_speed:\n        # Resample theta angles so that the velocity is closer to constant.\n        lengths = np.linalg.norm(positions[1:] - positions[:-1], axis=-1)\n        theta = sample_np(None, theta, np.log(lengths), n_frames + 1)\n        positions = get_positions(theta)\n\n    # Throw away duplicated last position.\n    positions = positions[:-1]\n\n    # Set path's up vector to axis closest to average of input pose up vectors.\n    avg_up = poses[:, :3, 1].mean(0)\n    avg_up = avg_up / np.linalg.norm(avg_up)\n    ind_up = np.argmax(np.abs(avg_up))\n    up = np.eye(3)[ind_up] * np.sign(avg_up[ind_up])\n    # up = normalize(poses[:, :3, 1].sum(0))\n\n    render_poses = []\n    for p in positions:\n        render_pose = np.eye(4)\n        render_pose[:3] = viewmatrix(p - center, up, p)\n        render_pose = np.linalg.inv(transform) @ render_pose\n        render_pose[:3, 1:3] *= -1\n        render_poses.append(np.linalg.inv(render_pose))\n    return render_poses\n\n\n\ndef generate_spiral_path(poses_arr,\n                         n_frames: int = 180,\n                         n_rots: int = 2,\n                         zrate: float = .5) -> np.ndarray:\n  \"\"\"Calculates a forward facing spiral path for rendering.\"\"\"\n  poses = poses_arr[:, :-2].reshape([-1, 3, 5])\n  bounds = poses_arr[:, -2:]\n  fix_rotation = np.array([\n      [0, -1, 0, 0],\n      [1, 0, 0, 0],\n      [0, 0, 1, 0],\n      [0, 0, 0, 1],\n  ], dtype=np.float32)\n  poses = poses[:, :3, :4] @ fix_rotation\n\n  scale = 1. / (bounds.min() * .75)\n  poses[:, :3, 3] *= scale\n  bounds *= scale\n  poses, transform = recenter_poses(poses)\n\n  close_depth, inf_depth = bounds.min() * .9, bounds.max() * 5.\n  dt = .75\n  focal = 1 / (((1 - dt) / close_depth + dt / inf_depth))\n\n  # Get radii for spiral path using 90th percentile of camera positions.\n  positions = poses[:, :3, 3]\n  radii = np.percentile(np.abs(positions), 90, 0)\n  radii = np.concatenate([radii, [1.]])\n\n  # Generate poses for spiral path.\n  render_poses = []\n  cam2world = poses_avg(poses)\n  up = poses[:, :3, 1].mean(0)\n  for theta in np.linspace(0., 2. * np.pi * n_rots, n_frames, endpoint=False):\n    t = radii * [np.cos(theta), -np.sin(theta), -np.sin(theta * zrate), 1.]\n    position = cam2world @ t\n    lookat = cam2world @ [0, 0, -focal, 1.]\n    z_axis = position - lookat\n    render_pose = np.eye(4)\n    render_pose[:3] = viewmatrix(z_axis, up, position)\n    render_pose = np.linalg.inv(transform) @ render_pose\n    render_pose[:3, 1:3] *= -1\n    render_pose[:3, 3] /= scale\n    render_poses.append(np.linalg.inv(render_pose))\n  render_poses = np.stack(render_poses, axis=0)\n  return render_poses\n\n\n\ndef generate_interpolated_path(\n    views,\n    n_interp,\n    spline_degree = 5,\n    smoothness = 0.03,\n    rot_weight = 0.1,\n    lock_up = False,\n    fixed_up_vector = None,\n    lookahead_i = None,\n    frames_per_colmap = None,\n    const_speed = False,\n    n_buffer = None,\n    periodic = False,\n    n_interp_as_total = False,\n):\n  \"\"\"Creates a smooth spline path between input keyframe camera poses.\n\n  Spline is calculated with poses in format (position, lookat-point, up-point).\n  Args:\n    poses: (n, 3, 4) array of input pose keyframes.\n    n_interp: returned path will have n_interp * (n - 1) total poses.\n    spline_degree: polynomial degree of B-spline.\n    smoothness: parameter for spline smoothing, 0 forces exact interpolation.\n    rot_weight: relative weighting of rotation/translation in spline solve.\n    lock_up: if True, forced to use given Up and allow Lookat to vary.\n    fixed_up_vector: replace the interpolated `up` with a fixed vector.\n    lookahead_i: force the look direction to look at the pose `i` frames ahead.\n    frames_per_colmap: conversion factor for the desired average velocity.\n    const_speed: renormalize spline to have constant delta between each pose.\n    n_buffer: Number of buffer frames to insert at the start and end of the\n      path. Helps keep the ends of a spline path straight.\n    periodic: make the spline path periodic (perfect loop).\n    n_interp_as_total: use n_interp as total number of poses in path rather than\n      the number of poses to interpolate between each input.\n\n  Returns:\n    Array of new camera poses with shape (n_interp * (n - 1), 3, 4), or\n    (n_interp, 3, 4) if n_interp_as_total is set.\n  \"\"\"\n  poses = []\n  for view in views:\n    tmp_view = np.eye(4)\n    tmp_view[:3] = np.concatenate([view.R.T, view.T[:, None]], 1)\n    tmp_view = np.linalg.inv(tmp_view)\n    tmp_view[:, 1:3] *= -1\n    poses.append(tmp_view)\n  poses = np.stack(poses, 0)\n\n  def poses_to_points(poses, dist):\n    \"\"\"Converts from pose matrices to (position, lookat, up) format.\"\"\"\n    pos = poses[:, :3, -1]\n    lookat = poses[:, :3, -1] - dist * poses[:, :3, 2]\n    up = poses[:, :3, -1] + dist * poses[:, :3, 1]\n    return np.stack([pos, lookat, up], 1)\n\n  def points_to_poses(points):\n    \"\"\"Converts from (position, lookat, up) format to pose matrices.\"\"\"\n    poses = []\n    for i in range(len(points)):\n      pos, lookat_point, up_point = points[i]\n      if lookahead_i is not None:\n        if i + lookahead_i < len(points):\n          lookat = pos - points[i + lookahead_i][0]\n      else:\n        lookat = pos - lookat_point\n      up = (up_point - pos) if fixed_up_vector is None else fixed_up_vector\n      poses.append(viewmatrix(lookat, up, pos))\n    return np.array(poses)\n\n  def insert_buffer_poses(poses, n_buffer):\n    \"\"\"Insert extra poses at the start and end of the path.\"\"\"\n\n    def average_distance(points):\n      distances = np.linalg.norm(points[1:] - points[0:-1], axis=-1)\n      return np.mean(distances)\n\n    def shift(pose, dz):\n      result = np.copy(pose)\n      z = result[:3, 2]\n      z /= np.linalg.norm(z)\n      # Move along forward-backward axis. -z is forward.\n      result[:3, 3] += z * dz\n      return result\n\n    dz = average_distance(poses[:, :3, 3])\n    prefix = np.stack([shift(poses[0], (i + 1) * dz) for i in range(n_buffer)])\n    prefix = prefix[::-1]  # reverse order\n    suffix = np.stack(\n        [shift(poses[-1], -(i + 1) * dz) for i in range(n_buffer)]\n    )\n    result = np.concatenate([prefix, poses, suffix])\n    return result\n\n  def remove_buffer_poses(poses, u, n_frames, u_keyframes, n_buffer):\n    u_keyframes = u_keyframes[n_buffer:-n_buffer]\n    mask = (u >= u_keyframes[0]) & (u <= u_keyframes[-1])\n    poses = poses[mask]\n    u = u[mask]\n    n_frames = len(poses)\n    return poses, u, n_frames, u_keyframes\n\n  def interp(points, u, k, s):\n    \"\"\"Runs multidimensional B-spline interpolation on the input points.\"\"\"\n    sh = points.shape\n    pts = np.reshape(points, (sh[0], -1))\n    k = min(k, sh[0] - 1)\n    tck, u_keyframes = scipy.interpolate.splprep(pts.T, k=k, s=s, per=periodic)\n    new_points = np.array(scipy.interpolate.splev(u, tck))\n    new_points = np.reshape(new_points.T, (len(u), sh[1], sh[2]))\n    return new_points, u_keyframes\n\n  \n  if n_buffer is not None:\n    poses = insert_buffer_poses(poses, n_buffer)\n  points = poses_to_points(poses, dist=rot_weight)\n  if n_interp_as_total:\n    n_frames = n_interp + 1  # Add extra since final pose is discarded.\n  else:\n    n_frames = n_interp * (points.shape[0] - 1)\n  u = np.linspace(0, 1, n_frames, endpoint=True)\n  new_points, u_keyframes = interp(points, u=u, k=spline_degree, s=smoothness)\n  poses = points_to_poses(new_points)\n  if n_buffer is not None:\n    poses, u, n_frames, u_keyframes = remove_buffer_poses(\n        poses, u, n_frames, u_keyframes, n_buffer\n    )\n    # poses, transform = transform_poses_pca(poses)\n  if frames_per_colmap is not None:\n    # Recalculate the number of frames to achieve desired average velocity.\n    positions = poses[:, :3, -1]\n    lengths = np.linalg.norm(positions[1:] - positions[:-1], axis=-1)\n    total_length_colmap = lengths.sum()\n    print('old n_frames:', n_frames)\n    print('total_length_colmap:', total_length_colmap)\n    n_frames = int(total_length_colmap * frames_per_colmap)\n    print('new n_frames:', n_frames)\n    u = np.linspace(\n        np.min(u_keyframes), np.max(u_keyframes), n_frames, endpoint=True\n    )\n    new_points, _ = interp(points, u=u, k=spline_degree, s=smoothness)\n    poses = points_to_poses(new_points)\n\n  if const_speed:\n    # Resample timesteps so that the velocity is nearly constant.\n    positions = poses[:, :3, -1]\n    lengths = np.linalg.norm(positions[1:] - positions[:-1], axis=-1)\n    u = sample(None, u, np.log(lengths), n_frames + 1)\n    new_points, _ = interp(points, u=u, k=spline_degree, s=smoothness)\n    poses = points_to_poses(new_points)\n\n#   return poses[:-1], u[:-1], u_keyframes\n  return poses[:-1]\n\ndef post_pose_process(orig_data_path, eg_data_path, target_data_path):\n  poses = np.load(orig_data_path)\n  intrinsics = np.load(eg_data_path)[\"intrinsics\"]\n  target_path = target_data_path\n  os.makedirs(target_path, exist_ok=True)\n\n  for idx, pose in enumerate(poses):\n      inv_pose = np.linalg.inv(pose)\n      np.savez(\n          os.path.join(target_path, f\"{idx+1:04d}.npz\"),\n          pose=inv_pose,\n          intrinsics=intrinsics\n      )"
  },
  {
    "path": "field_construction/utils/sh_utils.py",
    "content": "#  Copyright 2021 The PlenOctree Authors.\n#  Redistribution and use in source and binary forms, with or without\n#  modification, are permitted provided that the following conditions are met:\n#\n#  1. Redistributions of source code must retain the above copyright notice,\n#  this list of conditions and the following disclaimer.\n#\n#  2. Redistributions in binary form must reproduce the above copyright notice,\n#  this list of conditions and the following disclaimer in the documentation\n#  and/or other materials provided with the distribution.\n#\n#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n#  POSSIBILITY OF SUCH DAMAGE.\n\nimport torch\n\nC0 = 0.28209479177387814\nC1 = 0.4886025119029199\nC2 = [\n    1.0925484305920792,\n    -1.0925484305920792,\n    0.31539156525252005,\n    -1.0925484305920792,\n    0.5462742152960396\n]\nC3 = [\n    -0.5900435899266435,\n    2.890611442640554,\n    -0.4570457994644658,\n    0.3731763325901154,\n    -0.4570457994644658,\n    1.445305721320277,\n    -0.5900435899266435\n]\nC4 = [\n    2.5033429417967046,\n    -1.7701307697799304,\n    0.9461746957575601,\n    -0.6690465435572892,\n    0.10578554691520431,\n    -0.6690465435572892,\n    0.47308734787878004,\n    -1.7701307697799304,\n    0.6258357354491761,\n]   \n\n\ndef eval_sh(deg, sh, dirs):\n    \"\"\"\n    Evaluate spherical harmonics at unit directions\n    using hardcoded SH polynomials.\n    Works with torch/np/jnp.\n    ... Can be 0 or more batch dimensions.\n    Args:\n        deg: int SH deg. Currently, 0-3 supported\n        sh: jnp.ndarray SH coeffs [..., C, (deg + 1) ** 2]\n        dirs: jnp.ndarray unit directions [..., 3]\n    Returns:\n        [..., C]\n    \"\"\"\n    assert deg <= 4 and deg >= 0\n    coeff = (deg + 1) ** 2\n    assert sh.shape[-1] >= coeff\n\n    result = C0 * sh[..., 0]\n    if deg > 0:\n        x, y, z = dirs[..., 0:1], dirs[..., 1:2], dirs[..., 2:3]\n        result = (result -\n                C1 * y * sh[..., 1] +\n                C1 * z * sh[..., 2] -\n                C1 * x * sh[..., 3])\n\n        if deg > 1:\n            xx, yy, zz = x * x, y * y, z * z\n            xy, yz, xz = x * y, y * z, x * z\n            result = (result +\n                    C2[0] * xy * sh[..., 4] +\n                    C2[1] * yz * sh[..., 5] +\n                    C2[2] * (2.0 * zz - xx - yy) * sh[..., 6] +\n                    C2[3] * xz * sh[..., 7] +\n                    C2[4] * (xx - yy) * sh[..., 8])\n\n            if deg > 2:\n                result = (result +\n                C3[0] * y * (3 * xx - yy) * sh[..., 9] +\n                C3[1] * xy * z * sh[..., 10] +\n                C3[2] * y * (4 * zz - xx - yy)* sh[..., 11] +\n                C3[3] * z * (2 * zz - 3 * xx - 3 * yy) * sh[..., 12] +\n                C3[4] * x * (4 * zz - xx - yy) * sh[..., 13] +\n                C3[5] * z * (xx - yy) * sh[..., 14] +\n                C3[6] * x * (xx - 3 * yy) * sh[..., 15])\n\n                if deg > 3:\n                    result = (result + C4[0] * xy * (xx - yy) * sh[..., 16] +\n                            C4[1] * yz * (3 * xx - yy) * sh[..., 17] +\n                            C4[2] * xy * (7 * zz - 1) * sh[..., 18] +\n                            C4[3] * yz * (7 * zz - 3) * sh[..., 19] +\n                            C4[4] * (zz * (35 * zz - 30) + 3) * sh[..., 20] +\n                            C4[5] * xz * (7 * zz - 3) * sh[..., 21] +\n                            C4[6] * (xx - yy) * (7 * zz - 1) * sh[..., 22] +\n                            C4[7] * xz * (xx - 3 * yy) * sh[..., 23] +\n                            C4[8] * (xx * (xx - 3 * yy) - yy * (3 * xx - yy)) * sh[..., 24])\n    return result\n\ndef RGB2SH(rgb):\n    return (rgb - 0.5) / C0\n\ndef SH2RGB(sh):\n    return sh * C0 + 0.5"
  },
  {
    "path": "field_construction/utils/step_track.py",
    "content": "from field_construction.arguments import OptimizationParams\n\n\nclass StepTracker:\n\n    def __init__(self, opt: OptimizationParams) -> None:\n        self.opt = opt\n\n    \n    "
  },
  {
    "path": "field_construction/utils/system_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use\n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nfrom errno import EEXIST\nfrom os import makedirs, path\nimport os\n\ndef mkdir_p(folder_path):\n    # Creates a directory. equivalent to using mkdir -p on the command line\n    try:\n        makedirs(folder_path)\n    except OSError as exc: # Python >2.5\n        if exc.errno == EEXIST and path.isdir(folder_path):\n            pass\n        else:\n            raise\n\ndef searchForMaxIteration(folder):\n    saved_iters = [int(fname.split(\"_\")[-1]) for fname in os.listdir(folder) if not fname.startswith('.')]\n    return max(saved_iters)\n"
  },
  {
    "path": "field_construction/video_preprocessor/__init__.py",
    "content": "import logging\nimport os\n\nimport cv2\nimport ffmpeg\nimport numpy as np\nimport torch\n\n\nclass VideoPreprocessor:\n    def __init__(self, cfg):\n        self.cfg = cfg\n\n    def video_process(self):\n        '''\n        assuming the video is saved on somewhere. Need modified if video are given \n        as a obj directly.\n        '''\n        self.extract_frames(self.cfg.pipeline.rgb_video_path, \"input\")\n        self.extract_frames(self.cfg.pipeline.normal_video_path, \"normal\")\n        if self.cfg.feature_extractor.type == \"open-seg\":\n            self.extract_masks(\"lang_features_dim3\")\n        elif self.cfg.feature_extractor.type == \"lseg\":\n            self.extract_masks(\"lang_features_dim4\")\n        \n    def extract_frames(self, video_path, file_name):\n        img_save_path = os.path.join(self.cfg.pipeline.data_path, file_name)\n        format = self.cfg.video_processor.img_format\n        logging.info(f\"Extracting frames from {video_path}...\")\n        os.makedirs(img_save_path, exist_ok=True)\n        ffmpeg.input(video_path).output(os.path.join(img_save_path, f\"%04d.{format}\")).run(quiet=True)\n            \n    def extract_masks(self, save_dir_name):\n        colors = np.load(os.path.join(self.cfg.pipeline.data_path, \"colors.npy\"))\n        colors = torch.from_numpy(colors).to(dtype=torch.float32, device=\"cuda\") # [n_masks, 3]\n        colors /= 255 \n\n        seg_video_path = self.cfg.pipeline.seg_video_path\n        logging.info(f\"Loading mask video from {seg_video_path}\")\n        seg_video = torch.from_numpy(self.load_from_video(seg_video_path)).to(dtype=torch.float32, device=\"cuda\")\n        seg_video /= 255\n\n        for idx, frame in enumerate(seg_video):\n            dist = ((frame.unsqueeze(-2) - colors[None, None, :, :]) ** 2).sum(dim=-1)\n            mask = torch.argmin(dist, dim=-1) - 1 # -1 : background\n            save_path = os.path.join(self.cfg.pipeline.data_path, save_dir_name)\n            os.makedirs(save_path, exist_ok=True)\n            np.save(os.path.join(save_path, str(idx+1).zfill(4) + \"_s.npy\"), mask.cpu().numpy())\n        \n    def load_from_frames(self, frame_path):\n        frame_list = os.listdir(frame_path)\n        frame_list = sorted(filter(lambda x: x.split(\".\")[-1] in [\"jpg\", \"png\", \"jpeg\"], frame_list))\n        all_frames = []\n        for frame_name in frame_list:\n            frame = cv2.imread(os.path.join(frame_path, frame_name))\n            all_frames.append(frame)\n        all_frames = np.array(all_frames)\n        return all_frames\n    \n    def load_from_video(self, video_path):\n        out, _ = (\n            ffmpeg.input(video_path)\n            .output(\"pipe:\", format=\"rawvideo\", pix_fmt=\"rgb24\")\n            .run(capture_stdout=True)\n        )\n        probe = ffmpeg.probe(video_path)\n        video_info = next(stream for stream in probe[\"streams\"] if stream[\"codec_type\"] == \"video\")\n        width = int(video_info[\"width\"])\n        height = int(video_info[\"height\"])\n\n        video_array = np.frombuffer(out, dtype=np.uint8)\n        video_array = video_array.reshape((-1, height, width, 3))\n        return video_array\n"
  },
  {
    "path": "get_normal.py",
    "content": "import os\nfrom argparse import ArgumentParser\n\nimport torch\nimport torchvision.io as io\nfrom PIL import Image\nfrom tqdm import tqdm\n\ndef parse_args():\n    parser = ArgumentParser()\n    parser.add_argument(\"--base_path\", type=str)\n    parser.add_argument(\"--video_process\", action=\"store_true\")\n    return parser.parse_args()\n\ndef main():\n    torch.manual_seed(42)\n    args = parse_args()\n    predictor = torch.hub.load(\n        \"Stable-X/StableNormal\",\n        \"StableNormal\",\n        trust_repo=True,\n        local_cache_dir=\"/home/lff/bigdata1/cjw/model_cache\"\n    )\n    if not args.video_process:\n        base_path = args.base_path\n        img_names = os.listdir(os.path.join(base_path, \"rgb\"))\n        for img_name in img_names:\n            img = Image.open(os.path.join(base_path, \"rgb\", img_name))\n            normal_img = predictor(img)\n            normal_path = os.path.join(base_path, \"normal\")\n            os.makedirs(normal_path, exist_ok=True)\n            normal_img.save(os.path.join(normal_path, img_name))\n    else:\n        video_tensor, _, _ = io.read_video(args.base_path, pts_unit=\"sec\")\n        for frame_ind, frame in enumerate(tqdm(video_tensor)):\n            normal_frame = predictor(Image.fromarray(frame.numpy()))\n            normal_frame.save(os.path.join(args.normal_save_path, f\"{frame_ind:04d}.png\"))\n\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "quick_start.sh",
    "content": "#!/bin/bash\n\nfirst_image=$1\nlast_image=$2\n\nsam_model_path=\"./sam_vit_h_4b8939.pth\"\nsam2_model_path=\"./sam2_hiera_large.pt\"\nmodel_path=\"./CogVideo-X\"\n\nmkdir -p demo/rgb\ncp $first_image demo/rgb/0001.png\ncp $last_image demo/rgb/0002.png\n\n# get segmentation maps\npython auto-seg/auto-mask-align.py \\\n    --sam1_checkpoint $sam_model_path \\\n    --sam2_checkpoint $sam2_model_path \\\n    --video_path demo/rgb \\\n    --output_dir demo/seg \\\n    --level \"default\"\n\n# get normal maps\npython get_normal.py --base_path demo\n\nRGB video interpolation\npython video_inference.py \\\n    --model_path $model_path \\\n    --output_dir demo/video/rgb \\\n    --first_image demo/rgb/0001.png \\\n    --last_image demo/rgb/0002.png\n# Segmentation map video interpolation\npython video_inference.py \\\n    --model_path $model_path \\\n    --output_dir demo/video/seg \\\n    --first_image demo/seg/0001.png \\\n    --last_image demo/seg/0002.png\n# Normal map video interpolation\npython video_inference.py \\\n    --model_path $model_path \\\n    --output_dir demo/video/normal \\\n    --first_image demo/normal/0001.png \\\n    --last_image demo/normal/0002.png\n\n# 3DGS field construction\nmkdir -p demo/data\ncp demo/seg/colors.npy demo/data\n\npython entry_point.py \\\n    pipeline.rgb_video_path=\"demo/video/rgb/video_ckpt_800.mp4\" \\\n    pipeline.normal_video_path=\"demo/video/normal/video_ckpt_800.mp4\" \\\n    pipeline.seg_video_path=\"demo/video/seg/video_ckpt_800.mp4\" \\\n    pipeline.data_path=\"demo/data\" \\\n    gaussian.dataset.source_path=\"demo/data\" \\\n    gaussian.dataset.model_path=\"demo/output\" \\\n    pipeline.selection=False \\\n    gaussian.opt.max_geo_iter=1500 \\\n    gaussian.opt.normal_optim=True \\\n    gaussian.opt.optim_pose=False \\\n    pipeline.skip_video_process=False \\\n    pipeline.skip_pose_estimate=False \\\n    pipeline.skip_lang_feature_extraction=False"
  },
  {
    "path": "requirements.txt",
    "content": "# install the following packages\n\nopencv-python==4.10.0\npytorch3d\nopen3d\ntensorflow==2.15.0\nplyfile\nopencv-python\nlpips\ntrimesh\ntorch-kmeans\ntqdm\ndiffusers>=0.32.1\naccelerate>=1.1.1\ntransformers>=4.46.2\nimageio>=2.35.1\nimageio-ffmpeg>=0.5.1\nopenai>=1.54.0\nmoviepy>=2.0.0\nscikit-video>=1.1.11\npydantic>=2.10.3\ngit+https://github.com/diqihe666/diff-langsurf-rasterizer.git\ngit+https://github.com/openai/CLIP.git"
  },
  {
    "path": "train_all.sh",
    "content": "#!bin/bash\n\nscenes=(\"kitchen\" \"ramen\" \"teatime\" \"0085\" \"0114\" \"0616\" \"0617\")\n\nbase_video_path=\"outputs\"\nbase_data_path=\"field_construction/data\"\nbase_out_path=\"field_construction/outputs\"\n\nfor scene in \"${scenes[@]}\"; do\n    scene_video_path=\"${base_video_path}/${scene}\"\n    python entry_point.py \\\n    pipeline.rgb_video_path=\"${scene_video_path}/rgb/video_ckpt.mp4\" \\\n    pipeline.normal_video_path=\"${scene_video_path}/normal/video_ckpt.mp4\" \\\n    pipeline.seg_video_path=\"${scene_video_path}/seg/video_ckpt.mp4\" \\\n    pipeline.data_path=\"${base_data_path}/${scene}\" \\\n    gaussian.dataset.source_path=\"${base_data_path}/${scene}\" \\\n    gaussian.dataset.model_path=\"${base_out_path}/${scene}\" \\\n    pipeline.selection=False \\\n    gaussian.opt.max_geo_iter=1500 \\\n    gaussian.opt.normal_optim=True \\\n    gaussian.opt.optim_pose=False \\\n    pipeline.skip_video_process=False \\\n    pipeline.skip_lang_feature_extraction=False \n    \n    # pipeline.mode=\"render\"\ndone\n"
  },
  {
    "path": "utils/align_traj.py",
    "content": "import numpy as np\nimport torch\n\nfrom utils.utils_poses.ATE.align_utils import alignTrajectory\nfrom utils.utils_poses.lie_group_helper import SO3_to_quat, convert3x4_4x4\n\n\ndef pts_dist_max(pts):\n    \"\"\"\n    :param pts:  (N, 3) torch or np\n    :return:     scalar\n    \"\"\"\n    if torch.is_tensor(pts):\n        dist = pts.unsqueeze(0) - pts.unsqueeze(1)  # (1, N, 3) - (N, 1, 3) -> (N, N, 3)\n        dist = dist[0]  # (N, 3)\n        dist = dist.norm(dim=1)  # (N, )\n        max_dist = dist.max()\n    else:\n        dist = pts[None, :, :] - pts[:, None, :]  # (1, N, 3) - (N, 1, 3) -> (N, N, 3)\n        dist = dist[0]  # (N, 3)\n        dist = np.linalg.norm(dist, axis=1)  # (N, )\n        max_dist = dist.max()\n    return max_dist\n\n\ndef align_ate_c2b_use_a2b(traj_a, traj_b, traj_c=None):\n    \"\"\"Align c to b using the sim3 from a to b.\n    :param traj_a:  (N0, 3/4, 4) torch tensor\n    :param traj_b:  (N0, 3/4, 4) torch tensor\n    :param traj_c:  None or (N1, 3/4, 4) torch tensor\n    :return:        (N1, 4,   4) torch tensor\n    \"\"\"\n    device = traj_a.device\n    if traj_c is None:\n        traj_c = traj_a.clone()\n\n    traj_a = traj_a.float().cpu().numpy()\n    traj_b = traj_b.float().cpu().numpy()\n    traj_c = traj_c.float().cpu().numpy()\n\n    R_a = traj_a[:, :3, :3]  # (N0, 3, 3)\n    t_a = traj_a[:, :3, 3]  # (N0, 3)\n    quat_a = SO3_to_quat(R_a)  # (N0, 4)\n\n    R_b = traj_b[:, :3, :3]  # (N0, 3, 3)\n    t_b = traj_b[:, :3, 3]  # (N0, 3)\n    quat_b = SO3_to_quat(R_b)  # (N0, 4)\n\n    # This function works in quaternion.\n    # scalar, (3, 3), (3, ) gt = R * s * est + t.\n    # s, R, t = alignTrajectory(t_a, t_b, quat_a, quat_b, method='sim3')\n    s, R, t = alignTrajectory(t_a, t_b, quat_a, quat_b, method='se3')\n\n    # reshape tensors\n    R = R[None, :, :].astype(np.float32)  # (1, 3, 3)\n    t = t[None, :, None].astype(np.float32)  # (1, 3, 1)\n    s = float(s)\n\n    R_c = traj_c[:, :3, :3]  # (N1, 3, 3)\n    t_c = traj_c[:, :3, 3:4]  # (N1, 3, 1)\n\n    R_c_aligned = R @ R_c  # (N1, 3, 3)\n    t_c_aligned = s * (R @ t_c) + t  # (N1, 3, 1)\n    traj_c_aligned = np.concatenate([R_c_aligned, t_c_aligned], axis=2)  # (N1, 3, 4)\n\n    # append the last row\n    traj_c_aligned = convert3x4_4x4(traj_c_aligned)  # (N1, 4, 4)\n\n    traj_c_aligned = torch.from_numpy(traj_c_aligned).to(device)\n    return traj_c_aligned  # (N1, 4, 4)\n\n\n\ndef align_scale_c2b_use_a2b(traj_a, traj_b, traj_c=None):\n    '''Scale c to b using the scale from a to b.\n    :param traj_a:      (N0, 3/4, 4) torch tensor\n    :param traj_b:      (N0, 3/4, 4) torch tensor\n    :param traj_c:      None or (N1, 3/4, 4) torch tensor\n    :return:\n        scaled_traj_c   (N1, 4, 4)   torch tensor\n        scale           scalar\n    '''\n    if traj_c is None:\n        traj_c = traj_a.clone()\n\n    t_a = traj_a[:, :3, 3]  # (N, 3)\n    t_b = traj_b[:, :3, 3]  # (N, 3)\n\n    # scale estimated poses to colmap scale\n    # s_a2b: a*s ~ b\n    scale_a2b = pts_dist_max(t_b) / pts_dist_max(t_a)\n\n    traj_c[:, :3, 3] *= scale_a2b\n\n    if traj_c.shape[1] == 3:\n        traj_c = convert3x4_4x4(traj_c)  # (N, 4, 4)\n\n    return traj_c, scale_a2b  # (N, 4, 4)"
  },
  {
    "path": "utils/camera_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nfrom scene.cameras import Camera\nimport numpy as np\nfrom utils.general_utils import PILtoTorch\nfrom utils.graphics_utils import fov2focal\nimport scipy\nimport matplotlib.pyplot as plt\n\nWARNED = False\n\ndef loadCam(args, id, cam_info, resolution_scale):\n    orig_w, orig_h = cam_info.image.size\n\n    if args.resolution in [1, 2, 4, 8]:\n        resolution = round(orig_w/(resolution_scale * args.resolution)), round(orig_h/(resolution_scale * args.resolution))\n    else:  # should be a type that converts to float\n        if args.resolution == -1:\n            if orig_w > 1600:\n                global WARNED\n                if not WARNED:\n                    print(\"[ INFO ] Encountered quite large input images (>1.6K pixels width), rescaling to 1.6K.\\n \"\n                        \"If this is not desired, please explicitly specify '--resolution/-r' as 1\")\n                    WARNED = True\n                global_down = orig_w / 1600\n            else:\n                global_down = 1\n        else:\n            global_down = orig_w / args.resolution\n\n        scale = float(global_down) * float(resolution_scale)\n        resolution = (int(orig_w / scale), int(orig_h / scale))\n\n    resized_image_rgb = PILtoTorch(cam_info.image, resolution)\n\n    gt_image = resized_image_rgb[:3, ...]\n    loaded_mask = None\n\n    if resized_image_rgb.shape[1] == 4:\n        loaded_mask = resized_image_rgb[3:4, ...]\n\n    return Camera(colmap_id=cam_info.uid, R=cam_info.R, T=cam_info.T, \n                  FoVx=cam_info.FovX, FoVy=cam_info.FovY, \n                  image=gt_image, gt_alpha_mask=loaded_mask,\n                  image_name=cam_info.image_name, uid=id, data_device=args.data_device)\n\n\ndef cameraList_from_camInfos(cam_infos, resolution_scale, args):\n    camera_list = []\n\n    for id, c in enumerate(cam_infos):\n        camera_list.append(loadCam(args, id, c, resolution_scale))\n\n    return camera_list\n\n\ndef camera_to_JSON(id, camera : Camera):\n    Rt = np.zeros((4, 4))\n    Rt[:3, :3] = camera.R.transpose()\n    Rt[:3, 3] = camera.T\n    Rt[3, 3] = 1.0\n\n    W2C = np.linalg.inv(Rt)\n    pos = W2C[:3, 3]\n    rot = W2C[:3, :3]\n    serializable_array_2d = [x.tolist() for x in rot]\n    camera_entry = {\n        'id' : id,\n        'img_name' : camera.image_name,\n        'width' : camera.width,\n        'height' : camera.height,\n        'position': pos.tolist(),\n        'rotation': serializable_array_2d,\n        'fy' : fov2focal(camera.FovY, camera.height),\n        'fx' : fov2focal(camera.FovX, camera.width)\n    }\n    return camera_entry\n\n\ndef transform_poses_pca(poses):\n    \"\"\"Transforms poses so principal components lie on XYZ axes.\n\n  Args:\n    poses: a (N, 3, 4) array containing the cameras' camera to world transforms.\n\n  Returns:\n    A tuple (poses, transform), with the transformed poses and the applied\n    camera_to_world transforms.\n  \"\"\"\n    t = poses[:, :3, 3]\n    t_mean = t.mean(axis=0)\n    t = t - t_mean\n\n    eigval, eigvec = np.linalg.eig(t.T @ t)\n    # Sort eigenvectors in order of largest to smallest eigenvalue.\n    inds = np.argsort(eigval)[::-1]\n    eigvec = eigvec[:, inds]\n    rot = eigvec.T\n    if np.linalg.det(rot) < 0:\n        rot = np.diag(np.array([1, 1, -1])) @ rot\n\n    transform = np.concatenate([rot, rot @ -t_mean[:, None]], -1)\n    poses_recentered = unpad_poses(transform @ pad_poses(poses))\n    transform = np.concatenate([transform, np.eye(4)[3:]], axis=0)\n\n    # Flip coordinate system if z component of y-axis is negative\n    if poses_recentered.mean(axis=0)[2, 1] < 0:\n        poses_recentered = np.diag(np.array([1, -1, -1])) @ poses_recentered\n        transform = np.diag(np.array([1, -1, -1, 1])) @ transform\n\n    # Just make sure it's it in the [-1, 1]^3 cube\n    scale_factor = 1. / np.max(np.abs(poses_recentered[:, :3, 3]))\n    poses_recentered[:, :3, 3] *= scale_factor\n    transform = np.diag(np.array([scale_factor] * 3 + [1])) @ transform\n\n    return poses_recentered, transform\n\ndef generate_interpolated_path(poses, n_interp, spline_degree=5,\n                               smoothness=.03, rot_weight=.1):\n    \"\"\"Creates a smooth spline path between input keyframe camera poses.\n\n  Spline is calculated with poses in format (position, lookat-point, up-point).\n\n  Args:\n    poses: (n, 3, 4) array of input pose keyframes.\n    n_interp: returned path will have n_interp * (n - 1) total poses.\n    spline_degree: polynomial degree of B-spline.\n    smoothness: parameter for spline smoothing, 0 forces exact interpolation.\n    rot_weight: relative weighting of rotation/translation in spline solve.\n\n  Returns:\n    Array of new camera poses with shape (n_interp * (n - 1), 3, 4).\n  \"\"\"\n\n    def poses_to_points(poses, dist):\n        \"\"\"Converts from pose matrices to (position, lookat, up) format.\"\"\"\n        pos = poses[:, :3, -1]\n        lookat = poses[:, :3, -1] - dist * poses[:, :3, 2]\n        up = poses[:, :3, -1] + dist * poses[:, :3, 1]\n        return np.stack([pos, lookat, up], 1)\n\n    def points_to_poses(points):\n        \"\"\"Converts from (position, lookat, up) format to pose matrices.\"\"\"\n        return np.array([viewmatrix(p - l, u - p, p) for p, l, u in points])\n\n    def interp(points, n, k, s):\n        \"\"\"Runs multidimensional B-spline interpolation on the input points.\"\"\"\n        sh = points.shape\n        pts = np.reshape(points, (sh[0], -1))\n        k = min(k, sh[0] - 1)\n        tck, _ = scipy.interpolate.splprep(pts.T, k=k, s=s)\n        u = np.linspace(0, 1, n, endpoint=False)\n        new_points = np.array(scipy.interpolate.splev(u, tck))\n        new_points = np.reshape(new_points.T, (n, sh[1], sh[2]))\n        return new_points\n    \n    ###  Additional operation\n    # inter_poses = []\n    # for pose in poses:\n    #     tmp_pose = np.eye(4)\n    #     tmp_pose[:3] = np.concatenate([pose.R.T, pose.T[:, None]], 1)\n    #     tmp_pose = np.linalg.inv(tmp_pose)\n    #     tmp_pose[:, 1:3] *= -1\n    #     inter_poses.append(tmp_pose)\n    # inter_poses = np.stack(inter_poses, 0)\n    # poses, transform = transform_poses_pca(inter_poses)\n\n    points = poses_to_points(poses, dist=rot_weight)\n    new_points = interp(points,\n                        n_interp * (points.shape[0] - 1),\n                        k=spline_degree,\n                        s=smoothness)\n    return points_to_poses(new_points) \n\n\ndef viewmatrix(lookdir, up, position):\n    \"\"\"Construct lookat view matrix.\"\"\"\n    vec2 = normalize(lookdir)\n    vec0 = normalize(np.cross(up, vec2))\n    vec1 = normalize(np.cross(vec2, vec0))\n    m = np.stack([vec0, vec1, vec2, position], axis=1)\n    return m\n\ndef normalize(x):\n    \"\"\"Normalization helper function.\"\"\"\n    return x / np.linalg.norm(x)\n\ndef pad_poses(p):\n    \"\"\"Pad [..., 3, 4] pose matrices with a homogeneous bottom row [0,0,0,1].\"\"\"\n    bottom = np.broadcast_to([0, 0, 0, 1.], p[..., :1, :4].shape)\n    return np.concatenate([p[..., :3, :4], bottom], axis=-2)\n\n\ndef unpad_poses(p):\n    \"\"\"Remove the homogeneous bottom row from [..., 4, 4] pose matrices.\"\"\"\n    return p[..., :3, :4]\n\n\ndef visualizer(camera_poses, colors, save_path=\"/mnt/data/1.png\"):\n    fig = plt.figure()\n    ax = fig.add_subplot(111, projection=\"3d\")\n\n    for pose, color in zip(camera_poses, colors):\n        rotation = pose[:3, :3]\n        translation = pose[:3, 3]  # Corrected to use 3D translation component\n        camera_positions = np.einsum(\n            \"...ij,...j->...i\", np.linalg.inv(rotation), -translation\n        )\n\n        ax.scatter(\n            camera_positions[0],\n            camera_positions[1],\n            camera_positions[2],\n            c=color,\n            marker=\"o\",\n        )\n\n    ax.set_xlabel(\"X\")\n    ax.set_ylabel(\"Y\")\n    ax.set_zlabel(\"Z\")\n    ax.set_title(\"Camera Poses\")\n\n    plt.savefig(save_path)\n    plt.close()\n\n    return save_path"
  },
  {
    "path": "utils/general_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport torch\nimport sys\nfrom datetime import datetime\nimport numpy as np\nimport random\n\ndef inverse_sigmoid(x):\n    return torch.log(x/(1-x))\n\ndef PILtoTorch(pil_image, resolution):\n    resized_image_PIL = pil_image.resize(resolution)\n    resized_image = torch.from_numpy(np.array(resized_image_PIL)) / 255.0\n    if len(resized_image.shape) == 3:\n        return resized_image.permute(2, 0, 1)\n    else:\n        return resized_image.unsqueeze(dim=-1).permute(2, 0, 1)\n\ndef get_expon_lr_func(\n    lr_init, lr_final, lr_delay_steps=0, lr_delay_mult=1.0, max_steps=1000000\n):\n    \"\"\"\n    Copied from Plenoxels\n\n    Continuous learning rate decay function. Adapted from JaxNeRF\n    The returned rate is lr_init when step=0 and lr_final when step=max_steps, and\n    is log-linearly interpolated elsewhere (equivalent to exponential decay).\n    If lr_delay_steps>0 then the learning rate will be scaled by some smooth\n    function of lr_delay_mult, such that the initial learning rate is\n    lr_init*lr_delay_mult at the beginning of optimization but will be eased back\n    to the normal learning rate when steps>lr_delay_steps.\n    :param conf: config subtree 'lr' or similar\n    :param max_steps: int, the number of steps during optimization.\n    :return HoF which takes step as input\n    \"\"\"\n\n    def helper(step):\n        if step < 0 or (lr_init == 0.0 and lr_final == 0.0):\n            # Disable this parameter\n            return 0.0\n        if lr_delay_steps > 0:\n            # A kind of reverse cosine decay.\n            delay_rate = lr_delay_mult + (1 - lr_delay_mult) * np.sin(\n                0.5 * np.pi * np.clip(step / lr_delay_steps, 0, 1)\n            )\n        else:\n            delay_rate = 1.0\n        t = np.clip(step / max_steps, 0, 1)\n        log_lerp = np.exp(np.log(lr_init) * (1 - t) + np.log(lr_final) * t)\n        return delay_rate * log_lerp\n\n    return helper\n\ndef strip_lowerdiag(L):\n    uncertainty = torch.zeros((L.shape[0], 6), dtype=torch.float, device=\"cuda\")\n\n    uncertainty[:, 0] = L[:, 0, 0]\n    uncertainty[:, 1] = L[:, 0, 1]\n    uncertainty[:, 2] = L[:, 0, 2]\n    uncertainty[:, 3] = L[:, 1, 1]\n    uncertainty[:, 4] = L[:, 1, 2]\n    uncertainty[:, 5] = L[:, 2, 2]\n    return uncertainty\n\ndef strip_symmetric(sym):\n    return strip_lowerdiag(sym)\n\ndef build_rotation(r):\n    norm = torch.sqrt(r[:,0]*r[:,0] + r[:,1]*r[:,1] + r[:,2]*r[:,2] + r[:,3]*r[:,3])\n\n    q = r / norm[:, None]\n\n    R = torch.zeros((q.size(0), 3, 3), device='cuda')\n\n    r = q[:, 0]\n    x = q[:, 1]\n    y = q[:, 2]\n    z = q[:, 3]\n\n    R[:, 0, 0] = 1 - 2 * (y*y + z*z)\n    R[:, 0, 1] = 2 * (x*y - r*z)\n    R[:, 0, 2] = 2 * (x*z + r*y)\n    R[:, 1, 0] = 2 * (x*y + r*z)\n    R[:, 1, 1] = 1 - 2 * (x*x + z*z)\n    R[:, 1, 2] = 2 * (y*z - r*x)\n    R[:, 2, 0] = 2 * (x*z - r*y)\n    R[:, 2, 1] = 2 * (y*z + r*x)\n    R[:, 2, 2] = 1 - 2 * (x*x + y*y)\n    return R\n\ndef build_scaling_rotation(s, r):\n    L = torch.zeros((s.shape[0], 3, 3), dtype=torch.float, device=\"cuda\")\n    R = build_rotation(r)\n\n    L[:,0,0] = s[:,0]\n    L[:,1,1] = s[:,1]\n    L[:,2,2] = s[:,2]\n\n    L = R @ L\n    return L\n\ndef safe_state(silent):\n    old_f = sys.stdout\n    class F:\n        def __init__(self, silent):\n            self.silent = silent\n\n        def write(self, x):\n            if not self.silent:\n                if x.endswith(\"\\n\"):\n                    old_f.write(x.replace(\"\\n\", \" [{}]\\n\".format(str(datetime.now().strftime(\"%d/%m %H:%M:%S\")))))\n                else:\n                    old_f.write(x)\n\n        def flush(self):\n            old_f.flush()\n\n    sys.stdout = F(silent)\n\n    random.seed(0)\n    np.random.seed(0)\n    torch.manual_seed(0)\n    torch.cuda.set_device(torch.device(\"cuda:0\"))\n"
  },
  {
    "path": "utils/graphics_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport torch\nimport math\nimport numpy as np\nfrom typing import NamedTuple\n\nclass BasicPointCloud(NamedTuple):\n    points : np.array\n    colors : np.array\n    normals : np.array\n\ndef geom_transform_points(points, transf_matrix):\n    P, _ = points.shape\n    ones = torch.ones(P, 1, dtype=points.dtype, device=points.device)\n    points_hom = torch.cat([points, ones], dim=1)\n    points_out = torch.matmul(points_hom, transf_matrix.unsqueeze(0))\n\n    denom = points_out[..., 3:] + 0.0000001\n    return (points_out[..., :3] / denom).squeeze(dim=0)\n\ndef getWorld2View(R, t):\n    Rt = np.zeros((4, 4))\n    Rt[:3, :3] = R.transpose()\n    Rt[:3, 3] = t\n    Rt[3, 3] = 1.0\n    return np.float32(Rt)\n\ndef getWorld2View2(R, t, translate=np.array([.0, .0, .0]), scale=1.0):\n    Rt = np.zeros((4, 4))\n    Rt[:3, :3] = R.transpose()\n    Rt[:3, 3] = t\n    Rt[3, 3] = 1.0\n\n    C2W = np.linalg.inv(Rt)\n    cam_center = C2W[:3, 3]\n    cam_center = (cam_center + translate) * scale\n    C2W[:3, 3] = cam_center\n    Rt = np.linalg.inv(C2W)\n    return np.float32(Rt)\n\ndef getWorld2View2_torch(R, t, translate=torch.tensor([0.0, 0.0, 0.0]), scale=1.0):\n    translate = torch.tensor(translate, dtype=torch.float32)\n    \n    # Initialize the transformation matrix\n    Rt = torch.zeros((4, 4), dtype=torch.float32)\n    Rt[:3, :3] = R.t()  # Transpose of R\n    Rt[:3, 3] = t\n    Rt[3, 3] = 1.0\n\n    # Compute the inverse to get the camera-to-world transformation\n    C2W = torch.linalg.inv(Rt)\n    cam_center = C2W[:3, 3]\n    cam_center = (cam_center + translate) * scale\n    C2W[:3, 3] = cam_center\n    \n    # Invert again to get the world-to-view transformation\n    Rt = torch.linalg.inv(C2W)\n    \n    return Rt\n\ndef getProjectionMatrix(znear, zfar, fovX, fovY):\n    tanHalfFovY = math.tan((fovY / 2))\n    tanHalfFovX = math.tan((fovX / 2))\n\n    top = tanHalfFovY * znear\n    bottom = -top\n    right = tanHalfFovX * znear\n    left = -right\n\n    P = torch.zeros(4, 4)\n\n    z_sign = 1.0\n\n    P[0, 0] = 2.0 * znear / (right - left)\n    P[1, 1] = 2.0 * znear / (top - bottom)\n    P[0, 2] = (right + left) / (right - left)\n    P[1, 2] = (top + bottom) / (top - bottom)\n    P[3, 2] = z_sign\n    P[2, 2] = z_sign * zfar / (zfar - znear)\n    P[2, 3] = -(zfar * znear) / (zfar - znear)\n    return P\n\ndef fov2focal(fov, pixels):\n    return pixels / (2 * math.tan(fov / 2))\n\ndef focal2fov(focal, pixels):\n    return 2*math.atan(pixels/(2*focal))"
  },
  {
    "path": "utils/image_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport torch\n\ndef mse(img1, img2):\n    return (((img1 - img2)) ** 2).view(img1.shape[0], -1).mean(1, keepdim=True)\n\ndef psnr(img1, img2):\n    mse = (((img1 - img2)) ** 2).view(img1.shape[0], -1).mean(1, keepdim=True)\n    return 20 * torch.log10(1.0 / torch.sqrt(mse))\n"
  },
  {
    "path": "utils/interp_utils.py",
    "content": "import numpy as np\nimport scipy\n\n\ndef generate_interpolated_path(poses, n_interp, spline_degree=5,\n                               smoothness=.03, rot_weight=.1):\n    \"\"\"Creates a smooth spline path between input keyframe camera poses.\n\n  Spline is calculated with poses in format (position, lookat-point, up-point).\n\n  Args:\n    poses: (n, 3, 4) array of input pose keyframes.\n    n_interp: returned path will have n_interp * (n - 1) total poses.\n    spline_degree: polynomial degree of B-spline.\n    smoothness: parameter for spline smoothing, 0 forces exact interpolation.\n    rot_weight: relative weighting of rotation/translation in spline solve.\n\n  Returns:\n    Array of new camera poses with shape (n_interp * (n - 1), 3, 4).\n  \"\"\"\n\n    def poses_to_points(poses, dist):\n        \"\"\"Converts from pose matrices to (position, lookat, up) format.\"\"\"\n        pos = poses[:, :3, -1]\n        lookat = poses[:, :3, -1] - dist * poses[:, :3, 2]\n        up = poses[:, :3, -1] + dist * poses[:, :3, 1]\n        return np.stack([pos, lookat, up], 1)\n\n    def points_to_poses(points):\n        \"\"\"Converts from (position, lookat, up) format to pose matrices.\"\"\"\n        return np.array([viewmatrix(p - l, u - p, p) for p, l, u in points])\n\n    def interp(points, n, k, s):\n        \"\"\"Runs multidimensional B-spline interpolation on the input points.\"\"\"\n        sh = points.shape\n        pts = np.reshape(points, (sh[0], -1))\n        k = min(k, sh[0] - 1)\n        tck, _ = scipy.interpolate.splprep(pts.T, k=k, s=s)\n        u = np.linspace(0, 1, n, endpoint=False)\n        new_points = np.array(scipy.interpolate.splev(u, tck))\n        new_points = np.reshape(new_points.T, (n, sh[1], sh[2]))\n        return new_points\n    \n    ###  Additional operation\n    # inter_poses = []\n    # for pose in poses:\n    #     tmp_pose = np.eye(4)\n    #     tmp_pose[:3] = np.concatenate([pose.R.T, pose.T[:, None]], 1)\n    #     tmp_pose = np.linalg.inv(tmp_pose)\n    #     tmp_pose[:, 1:3] *= -1\n    #     inter_poses.append(tmp_pose)\n    # inter_poses = np.stack(inter_poses, 0)\n    # poses, transform = transform_poses_pca(inter_poses)\n\n    points = poses_to_points(poses, dist=rot_weight)\n    new_points = interp(points,\n                        n_interp * (points.shape[0] - 1),\n                        k=spline_degree,\n                        s=smoothness)\n    return points_to_poses(new_points) \n\ndef viewmatrix(lookdir, up, position):\n    \"\"\"Construct lookat view matrix.\"\"\"\n    vec2 = normalize(lookdir)\n    vec0 = normalize(np.cross(up, vec2))\n    vec1 = normalize(np.cross(vec2, vec0))\n    m = np.stack([vec0, vec1, vec2, position], axis=1)\n    return m\n\ndef normalize(x):\n    \"\"\"Normalization helper function.\"\"\"\n    return x / np.linalg.norm(x)"
  },
  {
    "path": "utils/loss_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\n#\n\nimport torch\nimport torch.nn.functional as F\nfrom torch.autograd import Variable\nfrom math import exp\n\ndef l1_loss_mask(network_output, gt, mask):\n    # Calculate the absolute difference\n    diff = torch.abs(network_output - gt)\n    # Apply the mask\n    masked_diff = diff * mask\n    # Calculate the mean over the non-zero mask elements\n    return masked_diff.sum() / mask.sum()\n\ndef ssim_loss_mask(img1, img2, mask, window_size=11, size_average=True):\n    channel = img1.size(-3)\n    window = create_window(window_size, channel)\n\n    if img1.is_cuda:\n        window = window.cuda(img1.get_device())\n    window = window.type_as(img1)\n\n    # Apply the mask to both images\n    img1_masked = img1 * mask\n    img2_masked = img2 * mask\n\n    return _ssim(img1_masked, img2_masked, window, window_size, channel, size_average)\n\ndef l1_loss(network_output, gt):\n    return torch.abs((network_output - gt)).mean()\n\ndef l2_loss(network_output, gt):\n    return ((network_output - gt) ** 2).mean()\n\ndef gaussian(window_size, sigma):\n    gauss = torch.Tensor([exp(-(x - window_size // 2) ** 2 / float(2 * sigma ** 2)) for x in range(window_size)])\n    return gauss / gauss.sum()\n\ndef create_window(window_size, channel):\n    _1D_window = gaussian(window_size, 1.5).unsqueeze(1)\n    _2D_window = _1D_window.mm(_1D_window.t()).float().unsqueeze(0).unsqueeze(0)\n    window = Variable(_2D_window.expand(channel, 1, window_size, window_size).contiguous())\n    return window\n\ndef ssim(img1, img2, window_size=11, size_average=True):\n    channel = img1.size(-3)\n    window = create_window(window_size, channel)\n\n    if img1.is_cuda:\n        window = window.cuda(img1.get_device())\n    window = window.type_as(img1)\n\n    return _ssim(img1, img2, window, window_size, channel, size_average)\n\ndef _ssim(img1, img2, window, window_size, channel, size_average=True):\n    mu1 = F.conv2d(img1, window, padding=window_size // 2, groups=channel)\n    mu2 = F.conv2d(img2, window, padding=window_size // 2, groups=channel)\n\n    mu1_sq = mu1.pow(2)\n    mu2_sq = mu2.pow(2)\n    mu1_mu2 = mu1 * mu2\n\n    sigma1_sq = F.conv2d(img1 * img1, window, padding=window_size // 2, groups=channel) - mu1_sq\n    sigma2_sq = F.conv2d(img2 * img2, window, padding=window_size // 2, groups=channel) - mu2_sq\n    sigma12 = F.conv2d(img1 * img2, window, padding=window_size // 2, groups=channel) - mu1_mu2\n\n    C1 = 0.01 ** 2\n    C2 = 0.03 ** 2\n\n    ssim_map = ((2 * mu1_mu2 + C1) * (2 * sigma12 + C2)) / ((mu1_sq + mu2_sq + C1) * (sigma1_sq + sigma2_sq + C2))\n\n    if size_average:\n        return ssim_map.mean()\n    else:\n        return ssim_map.mean(1).mean(1).mean(1)\n\n"
  },
  {
    "path": "utils/pose_utils.py",
    "content": "import math\nimport numpy as np\nimport torch\nimport torch.nn.functional as F\nfrom typing import Tuple\nfrom utils.stepfun import sample_np, sample\nimport scipy\n\n\ndef quad2rotation(q):\n    \"\"\"\n    Convert quaternion to rotation in batch. Since all operation in pytorch, support gradient passing.\n\n    Args:\n        quad (tensor, batch_size*4): quaternion.\n\n    Returns:\n        rot_mat (tensor, batch_size*3*3): rotation.\n    \"\"\"\n    # bs = quad.shape[0]\n    # qr, qi, qj, qk = quad[:, 0], quad[:, 1], quad[:, 2], quad[:, 3]\n    # two_s = 2.0 / (quad * quad).sum(-1)\n    # rot_mat = torch.zeros(bs, 3, 3).to(quad.get_device())\n    # rot_mat[:, 0, 0] = 1 - two_s * (qj**2 + qk**2)\n    # rot_mat[:, 0, 1] = two_s * (qi * qj - qk * qr)\n    # rot_mat[:, 0, 2] = two_s * (qi * qk + qj * qr)\n    # rot_mat[:, 1, 0] = two_s * (qi * qj + qk * qr)\n    # rot_mat[:, 1, 1] = 1 - two_s * (qi**2 + qk**2)\n    # rot_mat[:, 1, 2] = two_s * (qj * qk - qi * qr)\n    # rot_mat[:, 2, 0] = two_s * (qi * qk - qj * qr)\n    # rot_mat[:, 2, 1] = two_s * (qj * qk + qi * qr)\n    # rot_mat[:, 2, 2] = 1 - two_s * (qi**2 + qj**2)\n    # return rot_mat\n    if not isinstance(q, torch.Tensor):\n        q = torch.tensor(q).cuda()\n\n    norm = torch.sqrt(\n        q[:, 0] * q[:, 0] + q[:, 1] * q[:, 1] + q[:, 2] * q[:, 2] + q[:, 3] * q[:, 3]\n    )\n    q = q / norm[:, None]\n    rot = torch.zeros((q.size(0), 3, 3)).to(q)\n    r = q[:, 0]\n    x = q[:, 1]\n    y = q[:, 2]\n    z = q[:, 3]\n    rot[:, 0, 0] = 1 - 2 * (y * y + z * z)\n    rot[:, 0, 1] = 2 * (x * y - r * z)\n    rot[:, 0, 2] = 2 * (x * z + r * y)\n    rot[:, 1, 0] = 2 * (x * y + r * z)\n    rot[:, 1, 1] = 1 - 2 * (x * x + z * z)\n    rot[:, 1, 2] = 2 * (y * z - r * x)\n    rot[:, 2, 0] = 2 * (x * z - r * y)\n    rot[:, 2, 1] = 2 * (y * z + r * x)\n    rot[:, 2, 2] = 1 - 2 * (x * x + y * y)\n    return rot\n\ndef get_camera_from_tensor(inputs):\n    \"\"\"\n    Convert quaternion and translation to transformation matrix.\n\n    \"\"\"\n    if not isinstance(inputs, torch.Tensor):\n        inputs = torch.tensor(inputs).cuda()\n\n    N = len(inputs.shape)\n    if N == 1:\n        inputs = inputs.unsqueeze(0)\n    # quad, T = inputs[:, :4], inputs[:, 4:]\n    # # normalize quad\n    # quad = F.normalize(quad)\n    # R = quad2rotation(quad)\n    # RT = torch.cat([R, T[:, :, None]], 2)\n    # # Add homogenous row\n    # homogenous_row = torch.tensor([0, 0, 0, 1]).cuda()\n    # RT = torch.cat([RT, homogenous_row[None, None, :].repeat(N, 1, 1)], 1)\n    # if N == 1:\n    #     RT = RT[0]\n    # return RT\n\n    quad, T = inputs[:, :4], inputs[:, 4:]\n    w2c = torch.eye(4).to(inputs).float()\n    w2c[:3, :3] = quad2rotation(quad)\n    w2c[:3, 3] = T\n    return w2c\n\ndef quadmultiply(q1, q2):\n    \"\"\"\n    Multiply two quaternions together using quaternion arithmetic\n    \"\"\"\n    # Extract scalar and vector parts of the quaternions\n    w1, x1, y1, z1 = q1.unbind(dim=-1)\n    w2, x2, y2, z2 = q2.unbind(dim=-1)\n    # Calculate the quaternion product\n    result_quaternion = torch.stack(\n        [\n            w1 * w2 - x1 * x2 - y1 * y2 - z1 * z2,\n            w1 * x2 + x1 * w2 + y1 * z2 - z1 * y2,\n            w1 * y2 - x1 * z2 + y1 * w2 + z1 * x2,\n            w1 * z2 + x1 * y2 - y1 * x2 + z1 * w2,\n        ],\n        dim=-1,\n    )\n\n    return result_quaternion\n\ndef _sqrt_positive_part(x: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Returns torch.sqrt(torch.max(0, x))\n    but with a zero subgradient where x is 0.\n    Source: https://pytorch3d.readthedocs.io/en/latest/_modules/pytorch3d/transforms/rotation_conversions.html#matrix_to_quaternion\n    \"\"\"\n    ret = torch.zeros_like(x)\n    positive_mask = x > 0\n    ret[positive_mask] = torch.sqrt(x[positive_mask])\n    return ret\n\ndef rotation2quad(matrix: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Convert rotations given as rotation matrices to quaternions.\n\n    Args:\n        matrix: Rotation matrices as tensor of shape (..., 3, 3).\n\n    Returns:\n        quaternions with real part first, as tensor of shape (..., 4).\n    Source: https://pytorch3d.readthedocs.io/en/latest/_modules/pytorch3d/transforms/rotation_conversions.html#matrix_to_quaternion\n    \"\"\"\n    if matrix.size(-1) != 3 or matrix.size(-2) != 3:\n        raise ValueError(f\"Invalid rotation matrix shape {matrix.shape}.\")\n\n    if not isinstance(matrix, torch.Tensor):\n        matrix = torch.tensor(matrix).cuda()\n\n    batch_dim = matrix.shape[:-2]\n    m00, m01, m02, m10, m11, m12, m20, m21, m22 = torch.unbind(\n        matrix.reshape(batch_dim + (9,)), dim=-1\n    )\n\n    q_abs = _sqrt_positive_part(\n        torch.stack(\n            [\n                1.0 + m00 + m11 + m22,\n                1.0 + m00 - m11 - m22,\n                1.0 - m00 + m11 - m22,\n                1.0 - m00 - m11 + m22,\n            ],\n            dim=-1,\n        )\n    )\n\n    # we produce the desired quaternion multiplied by each of r, i, j, k\n    quat_by_rijk = torch.stack(\n        [\n            # pyre-fixme[58]: `**` is not supported for operand types `Tensor` and\n            #  `int`.\n            torch.stack([q_abs[..., 0] ** 2, m21 - m12, m02 - m20, m10 - m01], dim=-1),\n            # pyre-fixme[58]: `**` is not supported for operand types `Tensor` and\n            #  `int`.\n            torch.stack([m21 - m12, q_abs[..., 1] ** 2, m10 + m01, m02 + m20], dim=-1),\n            # pyre-fixme[58]: `**` is not supported for operand types `Tensor` and\n            #  `int`.\n            torch.stack([m02 - m20, m10 + m01, q_abs[..., 2] ** 2, m12 + m21], dim=-1),\n            # pyre-fixme[58]: `**` is not supported for operand types `Tensor` and\n            #  `int`.\n            torch.stack([m10 - m01, m20 + m02, m21 + m12, q_abs[..., 3] ** 2], dim=-1),\n        ],\n        dim=-2,\n    )\n\n    # We floor here at 0.1 but the exact level is not important; if q_abs is small,\n    # the candidate won't be picked.\n    flr = torch.tensor(0.1).to(dtype=q_abs.dtype, device=q_abs.device)\n    quat_candidates = quat_by_rijk / (2.0 * q_abs[..., None].max(flr))\n\n    # if not for numerical problems, quat_candidates[i] should be same (up to a sign),\n    # forall i; we pick the best-conditioned one (with the largest denominator)\n\n    return quat_candidates[\n        F.one_hot(q_abs.argmax(dim=-1), num_classes=4) > 0.5, :\n    ].reshape(batch_dim + (4,))\n\n\ndef get_tensor_from_camera(RT, Tquad=False):\n    \"\"\"\n    Convert transformation matrix to quaternion and translation.\n\n    \"\"\"\n    # gpu_id = -1\n    # if type(RT) == torch.Tensor:\n    #     if RT.get_device() != -1:\n    #         gpu_id = RT.get_device()\n    #         RT = RT.detach().cpu()\n    #     RT = RT.numpy()\n    # from mathutils import Matrix\n    #\n    # R, T = RT[:3, :3], RT[:3, 3]\n    # rot = Matrix(R)\n    # quad = rot.to_quaternion()\n    # if Tquad:\n    #     tensor = np.concatenate([T, quad], 0)\n    # else:\n    #     tensor = np.concatenate([quad, T], 0)\n    # tensor = torch.from_numpy(tensor).float()\n    # if gpu_id != -1:\n    #     tensor = tensor.to(gpu_id)\n    # return tensor\n\n    if not isinstance(RT, torch.Tensor):\n        RT = torch.tensor(RT).cuda()\n\n    rot = RT[:3, :3].unsqueeze(0).detach()\n    quat = rotation2quad(rot).squeeze()\n    tran = RT[:3, 3].detach()\n\n    return torch.cat([quat, tran])\n\ndef normalize(x):\n    return x / np.linalg.norm(x)\n\n\ndef viewmatrix(lookdir, up, position, subtract_position=False):\n  \"\"\"Construct lookat view matrix.\"\"\"\n  vec2 = normalize((lookdir - position) if subtract_position else lookdir)\n  vec0 = normalize(np.cross(up, vec2))\n  vec1 = normalize(np.cross(vec2, vec0))\n  m = np.stack([vec0, vec1, vec2, position], axis=1)\n  return m\n\n\ndef poses_avg(poses):\n  \"\"\"New pose using average position, z-axis, and up vector of input poses.\"\"\"\n  position = poses[:, :3, 3].mean(0)\n  z_axis = poses[:, :3, 2].mean(0)\n  up = poses[:, :3, 1].mean(0)\n  cam2world = viewmatrix(z_axis, up, position)\n  return cam2world\n\n\ndef focus_point_fn(poses):\n    \"\"\"Calculate nearest point to all focal axes in poses.\"\"\"\n    directions, origins = poses[:, :3, 2:3], poses[:, :3, 3:4]\n    m = np.eye(3) - directions * np.transpose(directions, [0, 2, 1])\n    mt_m = np.transpose(m, [0, 2, 1]) @ m\n    focus_pt = np.linalg.inv(mt_m.mean(0)) @ (mt_m @ origins).mean(0)[:, 0]\n    return focus_pt\n\n\ndef pad_poses(p):\n    \"\"\"Pad [..., 3, 4] pose matrices with a homogeneous bottom row [0,0,0,1].\"\"\"\n    bottom = np.broadcast_to([0, 0, 0, 1.], p[..., :1, :4].shape)\n    return np.concatenate([p[..., :3, :4], bottom], axis=-2)\n\ndef unpad_poses(p):\n    \"\"\"Remove the homogeneous bottom row from [..., 4, 4] pose matrices.\"\"\"\n    return p[..., :3, :4]\n\ndef transform_poses_pca(poses):\n    \"\"\"Transforms poses so principal components lie on XYZ axes.\n\n  Args:\n    poses: a (N, 3, 4) array containing the cameras' camera to world transforms.\n\n  Returns:\n    A tuple (poses, transform), with the transformed poses and the applied\n    camera_to_world transforms.\n  \"\"\"\n    t = poses[:, :3, 3]\n    t_mean = t.mean(axis=0)\n    t = t - t_mean\n\n    eigval, eigvec = np.linalg.eig(t.T @ t)\n    # Sort eigenvectors in order of largest to smallest eigenvalue.\n    inds = np.argsort(eigval)[::-1]\n    eigvec = eigvec[:, inds]\n    rot = eigvec.T\n    if np.linalg.det(rot) < 0:\n        rot = np.diag(np.array([1, 1, -1])) @ rot\n\n    transform = np.concatenate([rot, rot @ -t_mean[:, None]], -1)\n    poses_recentered = unpad_poses(transform @ pad_poses(poses))\n    transform = np.concatenate([transform, np.eye(4)[3:]], axis=0)\n\n    # Flip coordinate system if z component of y-axis is negative\n    if poses_recentered.mean(axis=0)[2, 1] < 0:\n        poses_recentered = np.diag(np.array([1, -1, -1])) @ poses_recentered\n        transform = np.diag(np.array([1, -1, -1, 1])) @ transform\n\n    # Just make sure it's it in the [-1, 1]^3 cube\n    scale_factor = 1. / np.max(np.abs(poses_recentered[:, :3, 3]))\n    poses_recentered[:, :3, 3] *= scale_factor\n    transform = np.diag(np.array([scale_factor] * 3 + [1])) @ transform\n    return poses_recentered, transform\n\n\ndef recenter_poses(poses: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:\n  \"\"\"Recenter poses around the origin.\"\"\"\n  cam2world = poses_avg(poses)\n  transform = np.linalg.inv(pad_poses(cam2world))\n  poses = transform @ pad_poses(poses)\n  return unpad_poses(poses), transform\n\ndef generate_ellipse_path(views, n_frames=600, const_speed=True, z_variation=0., z_phase=0.):\n    poses = []\n    for view in views:\n        tmp_view = np.eye(4)\n        tmp_view[:3] = np.concatenate([view.R.T, view.T[:, None]], 1)\n        tmp_view = np.linalg.inv(tmp_view)\n        tmp_view[:, 1:3] *= -1\n        poses.append(tmp_view)\n    poses = np.stack(poses, 0)\n    poses, transform = transform_poses_pca(poses)\n\n\n    # Calculate the focal point for the path (cameras point toward this).\n    center = focus_point_fn(poses)\n    # Path height sits at z=0 (in middle of zero-mean capture pattern).\n    offset = np.array([center[0] , center[1],  0 ])\n    # Calculate scaling for ellipse axes based on input camera positions.\n    sc = np.percentile(np.abs(poses[:, :3, 3] - offset), 90, axis=0)\n\n    # Use ellipse that is symmetric about the focal point in xy.\n    low = -sc + offset\n    high = sc + offset\n    # Optional height variation need not be symmetric\n    z_low = np.percentile((poses[:, :3, 3]), 10, axis=0)\n    z_high = np.percentile((poses[:, :3, 3]), 90, axis=0)\n\n\n    def get_positions(theta):\n        # Interpolate between bounds with trig functions to get ellipse in x-y.\n        # Optionally also interpolate in z to change camera height along path.\n        return np.stack([\n            (low[0] + (high - low)[0] * (np.cos(theta) * .5 + .5)),\n            (low[1] + (high - low)[1] * (np.sin(theta) * .5 + .5)),\n            z_variation * (z_low[2] + (z_high - z_low)[2] *\n                           (np.cos(theta + 2 * np.pi * z_phase) * .5 + .5)),\n        ], -1)\n\n    theta = np.linspace(0, 2. * np.pi, n_frames + 1, endpoint=True)\n    positions = get_positions(theta)\n\n    if const_speed:\n        # Resample theta angles so that the velocity is closer to constant.\n        lengths = np.linalg.norm(positions[1:] - positions[:-1], axis=-1)\n        theta = sample_np(None, theta, np.log(lengths), n_frames + 1)\n        positions = get_positions(theta)\n\n    # Throw away duplicated last position.\n    positions = positions[:-1]\n\n    # Set path's up vector to axis closest to average of input pose up vectors.\n    avg_up = poses[:, :3, 1].mean(0)\n    avg_up = avg_up / np.linalg.norm(avg_up)\n    ind_up = np.argmax(np.abs(avg_up))\n    up = np.eye(3)[ind_up] * np.sign(avg_up[ind_up])\n    # up = normalize(poses[:, :3, 1].sum(0))\n\n    render_poses = []\n    for p in positions:\n        render_pose = np.eye(4)\n        render_pose[:3] = viewmatrix(p - center, up, p)\n        render_pose = np.linalg.inv(transform) @ render_pose\n        render_pose[:3, 1:3] *= -1\n        render_poses.append(np.linalg.inv(render_pose))\n    return render_poses\n\n\n\ndef generate_spiral_path(poses_arr,\n                         n_frames: int = 180,\n                         n_rots: int = 2,\n                         zrate: float = .5) -> np.ndarray:\n  \"\"\"Calculates a forward facing spiral path for rendering.\"\"\"\n  poses = poses_arr[:, :-2].reshape([-1, 3, 5])\n  bounds = poses_arr[:, -2:]\n  fix_rotation = np.array([\n      [0, -1, 0, 0],\n      [1, 0, 0, 0],\n      [0, 0, 1, 0],\n      [0, 0, 0, 1],\n  ], dtype=np.float32)\n  poses = poses[:, :3, :4] @ fix_rotation\n\n  scale = 1. / (bounds.min() * .75)\n  poses[:, :3, 3] *= scale\n  bounds *= scale\n  poses, transform = recenter_poses(poses)\n\n  close_depth, inf_depth = bounds.min() * .9, bounds.max() * 5.\n  dt = .75\n  focal = 1 / (((1 - dt) / close_depth + dt / inf_depth))\n\n  # Get radii for spiral path using 90th percentile of camera positions.\n  positions = poses[:, :3, 3]\n  radii = np.percentile(np.abs(positions), 90, 0)\n  radii = np.concatenate([radii, [1.]])\n\n  # Generate poses for spiral path.\n  render_poses = []\n  cam2world = poses_avg(poses)\n  up = poses[:, :3, 1].mean(0)\n  for theta in np.linspace(0., 2. * np.pi * n_rots, n_frames, endpoint=False):\n    t = radii * [np.cos(theta), -np.sin(theta), -np.sin(theta * zrate), 1.]\n    position = cam2world @ t\n    lookat = cam2world @ [0, 0, -focal, 1.]\n    z_axis = position - lookat\n    render_pose = np.eye(4)\n    render_pose[:3] = viewmatrix(z_axis, up, position)\n    render_pose = np.linalg.inv(transform) @ render_pose\n    render_pose[:3, 1:3] *= -1\n    render_pose[:3, 3] /= scale\n    render_poses.append(np.linalg.inv(render_pose))\n  render_poses = np.stack(render_poses, axis=0)\n  return render_poses\n\n\n\ndef generate_interpolated_path(\n    views,\n    n_interp,\n    spline_degree = 5,\n    smoothness = 0.03,\n    rot_weight = 0.1,\n    lock_up = False,\n    fixed_up_vector = None,\n    lookahead_i = None,\n    frames_per_colmap = None,\n    const_speed = False,\n    n_buffer = None,\n    periodic = False,\n    n_interp_as_total = False,\n):\n  \"\"\"Creates a smooth spline path between input keyframe camera poses.\n\n  Spline is calculated with poses in format (position, lookat-point, up-point).\n  Args:\n    poses: (n, 3, 4) array of input pose keyframes.\n    n_interp: returned path will have n_interp * (n - 1) total poses.\n    spline_degree: polynomial degree of B-spline.\n    smoothness: parameter for spline smoothing, 0 forces exact interpolation.\n    rot_weight: relative weighting of rotation/translation in spline solve.\n    lock_up: if True, forced to use given Up and allow Lookat to vary.\n    fixed_up_vector: replace the interpolated `up` with a fixed vector.\n    lookahead_i: force the look direction to look at the pose `i` frames ahead.\n    frames_per_colmap: conversion factor for the desired average velocity.\n    const_speed: renormalize spline to have constant delta between each pose.\n    n_buffer: Number of buffer frames to insert at the start and end of the\n      path. Helps keep the ends of a spline path straight.\n    periodic: make the spline path periodic (perfect loop).\n    n_interp_as_total: use n_interp as total number of poses in path rather than\n      the number of poses to interpolate between each input.\n\n  Returns:\n    Array of new camera poses with shape (n_interp * (n - 1), 3, 4), or\n    (n_interp, 3, 4) if n_interp_as_total is set.\n  \"\"\"\n  poses = []\n  for view in views:\n    tmp_view = np.eye(4)\n    tmp_view[:3] = np.concatenate([view.R.T, view.T[:, None]], 1)\n    tmp_view = np.linalg.inv(tmp_view)\n    tmp_view[:, 1:3] *= -1\n    poses.append(tmp_view)\n  poses = np.stack(poses, 0)\n\n  def poses_to_points(poses, dist):\n    \"\"\"Converts from pose matrices to (position, lookat, up) format.\"\"\"\n    pos = poses[:, :3, -1]\n    lookat = poses[:, :3, -1] - dist * poses[:, :3, 2]\n    up = poses[:, :3, -1] + dist * poses[:, :3, 1]\n    return np.stack([pos, lookat, up], 1)\n\n  def points_to_poses(points):\n    \"\"\"Converts from (position, lookat, up) format to pose matrices.\"\"\"\n    poses = []\n    for i in range(len(points)):\n      pos, lookat_point, up_point = points[i]\n      if lookahead_i is not None:\n        if i + lookahead_i < len(points):\n          lookat = pos - points[i + lookahead_i][0]\n      else:\n        lookat = pos - lookat_point\n      up = (up_point - pos) if fixed_up_vector is None else fixed_up_vector\n      poses.append(viewmatrix(lookat, up, pos))\n    return np.array(poses)\n\n  def insert_buffer_poses(poses, n_buffer):\n    \"\"\"Insert extra poses at the start and end of the path.\"\"\"\n\n    def average_distance(points):\n      distances = np.linalg.norm(points[1:] - points[0:-1], axis=-1)\n      return np.mean(distances)\n\n    def shift(pose, dz):\n      result = np.copy(pose)\n      z = result[:3, 2]\n      z /= np.linalg.norm(z)\n      # Move along forward-backward axis. -z is forward.\n      result[:3, 3] += z * dz\n      return result\n\n    dz = average_distance(poses[:, :3, 3])\n    prefix = np.stack([shift(poses[0], (i + 1) * dz) for i in range(n_buffer)])\n    prefix = prefix[::-1]  # reverse order\n    suffix = np.stack(\n        [shift(poses[-1], -(i + 1) * dz) for i in range(n_buffer)]\n    )\n    result = np.concatenate([prefix, poses, suffix])\n    return result\n\n  def remove_buffer_poses(poses, u, n_frames, u_keyframes, n_buffer):\n    u_keyframes = u_keyframes[n_buffer:-n_buffer]\n    mask = (u >= u_keyframes[0]) & (u <= u_keyframes[-1])\n    poses = poses[mask]\n    u = u[mask]\n    n_frames = len(poses)\n    return poses, u, n_frames, u_keyframes\n\n  def interp(points, u, k, s):\n    \"\"\"Runs multidimensional B-spline interpolation on the input points.\"\"\"\n    sh = points.shape\n    pts = np.reshape(points, (sh[0], -1))\n    k = min(k, sh[0] - 1)\n    tck, u_keyframes = scipy.interpolate.splprep(pts.T, k=k, s=s, per=periodic)\n    new_points = np.array(scipy.interpolate.splev(u, tck))\n    new_points = np.reshape(new_points.T, (len(u), sh[1], sh[2]))\n    return new_points, u_keyframes\n\n  \n  if n_buffer is not None:\n    poses = insert_buffer_poses(poses, n_buffer)\n  points = poses_to_points(poses, dist=rot_weight)\n  if n_interp_as_total:\n    n_frames = n_interp + 1  # Add extra since final pose is discarded.\n  else:\n    n_frames = n_interp * (points.shape[0] - 1)\n  u = np.linspace(0, 1, n_frames, endpoint=True)\n  new_points, u_keyframes = interp(points, u=u, k=spline_degree, s=smoothness)\n  poses = points_to_poses(new_points)\n  if n_buffer is not None:\n    poses, u, n_frames, u_keyframes = remove_buffer_poses(\n        poses, u, n_frames, u_keyframes, n_buffer\n    )\n    # poses, transform = transform_poses_pca(poses)\n  if frames_per_colmap is not None:\n    # Recalculate the number of frames to achieve desired average velocity.\n    positions = poses[:, :3, -1]\n    lengths = np.linalg.norm(positions[1:] - positions[:-1], axis=-1)\n    total_length_colmap = lengths.sum()\n    print('old n_frames:', n_frames)\n    print('total_length_colmap:', total_length_colmap)\n    n_frames = int(total_length_colmap * frames_per_colmap)\n    print('new n_frames:', n_frames)\n    u = np.linspace(\n        np.min(u_keyframes), np.max(u_keyframes), n_frames, endpoint=True\n    )\n    new_points, _ = interp(points, u=u, k=spline_degree, s=smoothness)\n    poses = points_to_poses(new_points)\n\n  if const_speed:\n    # Resample timesteps so that the velocity is nearly constant.\n    positions = poses[:, :3, -1]\n    lengths = np.linalg.norm(positions[1:] - positions[:-1], axis=-1)\n    u = sample(None, u, np.log(lengths), n_frames + 1)\n    new_points, _ = interp(points, u=u, k=spline_degree, s=smoothness)\n    poses = points_to_poses(new_points)\n\n#   return poses[:-1], u[:-1], u_keyframes\n  return poses[:-1]\n\n"
  },
  {
    "path": "utils/sfm_utils.py",
    "content": "import collections\nimport math\nimport os\nimport re\nimport time\nfrom pathlib import Path\nfrom typing import List, NamedTuple, Tuple\n\nimport cv2\nimport numpy as np\nimport open3d as o3d\nimport PIL.Image\nimport roma\nimport scipy\nimport torch\nimport torchvision.transforms as tvf\nimport torchvision.transforms.functional as tf\nfrom PIL.ImageOps import exif_transpose\nfrom plyfile import PlyData, PlyElement\nfrom tqdm import tqdm\n\nfrom dust3r.utils.device import to_numpy\nfrom dust3r.utils.image import _resize_pil_image\nfrom field_construction.scene.colmap_loader import (qvec2rotmat,\n                                                    read_extrinsics_binary,\n                                                    rotmat2qvec,\n                                                    write_cameras_binary,\n                                                    write_cameras_text,\n                                                    write_images_binary,\n                                                    write_images_text)\n\ntry:\n    from pillow_heif import register_heif_opener\n    register_heif_opener()\n    heif_support_enabled = True\nexcept ImportError:\n    heif_support_enabled = False\n\nImgNorm = tvf.Compose([\n    tvf.ToTensor(), \n    tvf.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))\n])\n\n\ndef save_time(time_dir, process_name, sub_time):\n    if isinstance(time_dir, str):\n        time_dir = Path(time_dir)\n    time_dir.mkdir(parents=True, exist_ok=True)\n    minutes, seconds = divmod(sub_time, 60)\n    formatted_time = f\"{int(minutes)} min {int(seconds)} sec\"  \n    with open(time_dir / f'train_time.txt', 'a') as f:\n        f.write(f'{process_name}: {formatted_time}\\n')\n\n\ndef split_train_test(image_files, llffhold=8, n_views=None, verbose=True):\n    test_idx  = np.linspace(1, len(image_files) - 2, num=12, dtype=int)\n    train_idx = [i for i in range(len(image_files)) if i not in test_idx]\n\n    sparse_idx = np.linspace(0, len(train_idx) - 1, num=n_views, dtype=int)\n    train_idx = [train_idx[i] for i in sparse_idx]\n\n    if verbose:\n        print(\">> Spliting Train-Test Set: \")\n        # print(\" - sparse_idx:         \", sparse_idx)\n        print(\" - train_set_indices:  \", train_idx)\n        print(\" - test_set_indices:   \", test_idx)\n    train_img_files = [image_files[i] for i in train_idx]\n    test_img_files = [image_files[i] for i in test_idx]\n\n    return train_img_files, test_img_files\n\n\ndef get_sorted_image_files(image_dir: str) -> Tuple[List[str], List[str]]:\n    \"\"\"\n    Get sorted image files from the given directory.\n\n    Args:\n        image_dir (str): Path to the directory containing images.\n\n    Returns:\n        Tuple[List[str], List[str]]: A tuple containing two lists:\n            - List of sorted image file paths\n            - List of corresponding file suffixes\n    \"\"\"\n    allowed_extensions = {'.png', '.jpg', '.jpeg', '.bmp', '.tiff', '.JPG', '.PNG'}\n    image_path = Path(image_dir)\n    \n    def extract_number(filename):\n        match = re.search(r'\\d+', filename.stem)\n        return int(match.group()) if match else float('inf')\n    \n    image_files = [\n        str(f) for f in image_path.iterdir()\n        if f.is_file() and f.suffix.lower() in allowed_extensions\n    ]\n    \n    sorted_files = sorted(image_files, key=lambda x: extract_number(Path(x)))\n    suffixes = [Path(file).suffix for file in sorted_files]\n    \n    return sorted_files, suffixes[0]    \n\n\ndef rigid_points_registration(pts1, pts2, conf=None):\n    R, T, s = roma.rigid_points_registration(\n        pts1.reshape(-1, 3), pts2.reshape(-1, 3), weights=conf, compute_scaling=True)\n    return s, R, T  # return un-scaled (R, T)\n\n\ndef init_filestructure(save_path, n_views=None):\n    if n_views is not None and n_views != 0:        \n        sparse_0_path = save_path / f'sparse_{n_views}/0'    \n        sparse_1_path = save_path / f'sparse_{n_views}/1'       \n        print(f'>> Doing {n_views} views reconstrution!')\n    elif n_views is None or n_views == 0:\n        sparse_0_path = save_path / 'sparse_0/0'    \n        sparse_1_path = save_path / 'sparse_0/1'\n        print(f'>> Doing full views reconstrution!')\n\n    save_path.mkdir(exist_ok=True, parents=True)\n    sparse_0_path.mkdir(exist_ok=True, parents=True)    \n    sparse_1_path.mkdir(exist_ok=True, parents=True)\n    return save_path, sparse_0_path, sparse_1_path\n\n\ndef load_images(folder_or_list, size=512, square_ok=False, verbose=True):\n    \"\"\" open and convert all images in a list or folder to proper input format for DUSt3R\n    \"\"\"\n    if isinstance(folder_or_list, str):\n        if verbose:\n            print(f'>> Loading images from {folder_or_list}')\n        root, folder_content = folder_or_list, sorted(os.listdir(folder_or_list))\n\n    elif isinstance(folder_or_list, list):\n        if verbose:\n            print(f'>> Loading a list of {len(folder_or_list)} images')\n        root, folder_content = '', folder_or_list\n\n    else:\n        raise ValueError(f'bad {folder_or_list=} ({type(folder_or_list)})')\n\n    supported_images_extensions = ['.jpg', '.jpeg', '.png', '.JPG', 'PNG']\n    if heif_support_enabled:\n        supported_images_extensions += ['.heic', '.heif']\n    supported_images_extensions = tuple(supported_images_extensions)\n\n    imgs = []\n    for path in folder_content:\n        if not path.lower().endswith(supported_images_extensions):\n            continue\n        img = exif_transpose(PIL.Image.open(os.path.join(root, path))).convert('RGB')\n        W1, H1 = img.size\n        if size == 224:\n            # resize short side to 224 (then crop)\n            img = _resize_pil_image(img, round(size * max(W1/H1, H1/W1)))\n        else:\n            # resize long side to 512\n            img = _resize_pil_image(img, size)\n        W, H = img.size\n        cx, cy = W//2, H//2\n        if size == 224:\n            half = min(cx, cy)\n            img = img.crop((cx-half, cy-half, cx+half, cy+half))\n        else:\n            halfw, halfh = ((2*cx)//16)*8, ((2*cy)//16)*8\n            if not (square_ok) and W == H:\n                halfh = 3*halfw/4\n            img = img.crop((cx-halfw, cy-halfh, cx+halfw, cy+halfh))\n\n        W2, H2 = img.size\n        if verbose:\n            print(f' - adding {path} with resolution {W1}x{H1} --> {W2}x{H2}')\n        imgs.append(dict(img=ImgNorm(img)[None], true_shape=np.int32(\n            [img.size[::-1]]), idx=len(imgs), instance=str(len(imgs))))\n\n    assert imgs, 'no images foud at '+root\n    if verbose:\n        print(f' (Found {len(imgs)} images)')\n    return imgs, (W1,H1)\n\n\nimport collections\n\nCameraModel = collections.namedtuple(\"CameraModel\", [\"model_id\", \"model_name\", \"num_params\"])\nCamera = collections.namedtuple(\"Camera\", [\"id\", \"model\", \"width\", \"height\", \"params\"])\nBaseImage = collections.namedtuple(\"Image\", [\"id\", \"qvec\", \"tvec\", \"camera_id\", \"name\", \"xys\", \"point3D_ids\"])\nPoint3D = collections.namedtuple(\"Point3D\", [\"id\", \"xyz\", \"rgb\", \"error\", \"image_ids\", \"point2D_idxs\"])\nCAMERA_MODELS = {\n    CameraModel(model_id=0, model_name=\"SIMPLE_PINHOLE\", num_params=3),\n    CameraModel(model_id=1, model_name=\"PINHOLE\", num_params=4),\n    CameraModel(model_id=2, model_name=\"SIMPLE_RADIAL\", num_params=4),\n    CameraModel(model_id=3, model_name=\"RADIAL\", num_params=5),\n    CameraModel(model_id=4, model_name=\"OPENCV\", num_params=8),\n    CameraModel(model_id=5, model_name=\"OPENCV_FISHEYE\", num_params=8),\n    CameraModel(model_id=6, model_name=\"FULL_OPENCV\", num_params=12),\n    CameraModel(model_id=7, model_name=\"FOV\", num_params=5),\n    CameraModel(model_id=8, model_name=\"SIMPLE_RADIAL_FISHEYE\", num_params=4),\n    CameraModel(model_id=9, model_name=\"RADIAL_FISHEYE\", num_params=5),\n    CameraModel(model_id=10, model_name=\"THIN_PRISM_FISHEYE\", num_params=12)\n}\nCAMERA_MODEL_IDS = dict([(camera_model.model_id, camera_model)\n                         for camera_model in CAMERA_MODELS])\nCAMERA_MODEL_NAMES = dict([(camera_model.model_name, camera_model)\n                           for camera_model in CAMERA_MODELS])\n      \ndef save_extrinsic(sparse_path, extrinsics_w2c, img_files, image_suffix):\n    images_bin_file = sparse_path / 'images.bin'\n    images_txt_file = sparse_path / 'images.txt'\n    images = {}\n    \n    for i, (w2c, img_file) in enumerate(zip(extrinsics_w2c, img_files), start=1):  # Start enumeration from 1\n        name = Path(img_file).stem + image_suffix\n        rotation_matrix = w2c[:3, :3]\n        qvec = rotmat2qvec(rotation_matrix)\n        tvec = w2c[:3, 3]\n        \n        images[i] = BaseImage(\n            id=i,\n            qvec=qvec,\n            tvec=tvec,\n            camera_id=i,\n            name=name,\n            xys=[],  # Empty list as we don't have 2D point information\n            point3D_ids=[]  # Empty list as we don't have 3D point IDs\n        )\n    \n    write_images_binary(images, images_bin_file)\n    write_images_text(images, images_txt_file)\n\n\ndef save_intrinsics(sparse_path, focals, org_imgs_shape, imgs_shape, save_focals=False):\n    org_width, org_height = org_imgs_shape\n    scale_factor_x = org_width / imgs_shape[2]\n    scale_factor_y = org_height / imgs_shape[1]\n    cameras_bin_file = sparse_path / 'cameras.bin'\n    cameras_txt_file = sparse_path / 'cameras.txt'\n\n    cameras = {}\n    for i, focal in enumerate(focals, start=1):  # Start enumeration from 1\n        cameras[i] = Camera(\n            id=i,\n            model=\"PINHOLE\",\n            width=org_width,\n            height=org_height,\n            params=[focal*scale_factor_x, focal*scale_factor_y, org_width/2, org_height/2]\n        )    \n    print(f' - scaling focal: ({focal}, {focal}) --> ({focal*scale_factor_x}, {focal*scale_factor_y})' )\n    write_cameras_binary(cameras, cameras_bin_file)\n    write_cameras_text(cameras, cameras_txt_file)\n    if save_focals:\n        np.save(sparse_path / 'non_scaled_focals.npy', focals)\n\n\ndef save_points3D(sparse_path, imgs, pts3d, confs, masks=None, use_masks=True, save_all_pts=False, save_txt_path=None, depth_threshold=0.1, max_pts_num=150 * 10**10):\n    \n    points3D_bin_file = sparse_path / 'points3D.bin'\n    points3D_txt_file = sparse_path / 'points3D.txt'\n    points3D_ply_file = sparse_path / 'points3D.ply'\n\n    # Convert inputs to numpy arrays\n    imgs = to_numpy(imgs)\n    pts3d = to_numpy(pts3d)\n    confs = to_numpy(confs)\n    if confs is not None:\n        np.save(sparse_path / 'confidence.npy', confs)\n\n    # Process points and colors\n    if use_masks:\n        masks = to_numpy(masks)\n        pts = np.concatenate([p[m] for p, m in zip(pts3d, masks)])\n        # pts = np.concatenate([p[m] for p, m in zip(pts3d, masks.reshape(masks.shape[0], -1))])\n        col = np.concatenate([p[m] for p, m in zip(imgs, masks)])\n        confs = np.concatenate([p[m] for p, m in zip(confs, masks.reshape(masks.shape[0], -1))])\n    else:\n        pts = np.array(pts3d)\n        col = np.array(imgs)\n        confs = np.array(confs)\n\n    pts = pts.reshape(-1, 3)\n    col = col.reshape(-1, 3) * 255.\n    confs = confs.reshape(-1, 1)\n\n    co_mask_dsp_pts_num = pts.shape[0]\n    if pts.shape[0] > max_pts_num:\n        print(f'Downsampling points from {pts.shape[0]} to {max_pts_num}')\n        # Normalize confidences to range (0, 1)\n        confs_min = np.min(confs)\n        confs_max = np.max(confs)\n        confs = (confs - confs_min) / (confs_max - confs_min)\n        confs = confs + 1\n        weights = confs.reshape(-1) / np.sum(confs)        \n        indices = np.random.choice(pts.shape[0], max_pts_num, replace=False, p=weights)\n        pts = pts[indices]\n        col = col[indices]\n        confs = confs[indices]\n        conf_dsp_pts_num = pts.shape[0]\n    if confs is not None:\n        np.save(sparse_path / 'confidence_dsp.npy', confs)\n\n    storePly(points3D_ply_file, pts, col)\n    if save_all_pts:\n        np.save(sparse_path / 'points3D_all.npy', pts3d)\n        np.save(sparse_path / 'pointsColor_all.npy', imgs)\n    \n    # Write pts_num.txt\n    if isinstance(save_txt_path, str):\n        save_txt_path = Path(save_txt_path)\n    pts_num_file = save_txt_path / f'pts_num.txt'  # New file for pts_num\n    with open(pts_num_file, 'a') as f:\n        f.write(f\"Depth threshold: {depth_threshold}\\n\")\n        f.write(f\"Vanilla points num: {pts3d.reshape(-1, 3).shape[0]}\\n\")\n        f.write(f\"Co_Mask DSP points num: {co_mask_dsp_pts_num}\\n\")\n        f.write(f\"Co_Mask DSP ratio: {co_mask_dsp_pts_num / pts3d.reshape(-1, 3).shape[0]}\\n\")\n        if co_mask_dsp_pts_num > max_pts_num:\n            f.write(f\"Conf_Mask DSP points num: {conf_dsp_pts_num}\\n\")\n            f.write(f\"Conf_Mask DSP ratio: {conf_dsp_pts_num / pts3d.reshape(-1, 3).shape[0]}\\n\")\n        f.write(\"\\n\")\n    \n    return pts.shape[0]\n\n\n# Save images and masks\ndef save_images_and_masks(sparse_0_path, n_views, imgs, overlapping_masks, image_files, image_suffix):\n\n    images_path = sparse_0_path / f'imgs_{n_views}'\n    overlapping_masks_path = sparse_0_path / f'overlapping_masks_{n_views}'\n\n    images_path.mkdir(exist_ok=True, parents=True)\n    overlapping_masks_path.mkdir(exist_ok=True, parents=True)\n\n    for i, (image, name, overlapping_mask) in enumerate(zip(imgs, image_files, overlapping_masks)):\n        imgname = Path(name).stem\n        image_save_path = images_path / f\"{imgname}{image_suffix}\"\n        overlapping_mask_save_path = overlapping_masks_path / f\"{imgname}{image_suffix}\"\n        overlapping_mask_save_path = overlapping_masks_path / f\"{imgname}{image_suffix}\"\n\n        # Save overlapping masks\n        overlapping_mask = np.repeat(np.expand_dims(overlapping_mask, -1), 3, axis=2) * 255\n        PIL.Image.fromarray(overlapping_mask.astype(np.uint8)).save(overlapping_mask_save_path)\n\n        # Save images   \n        rgb_image = cv2.cvtColor(image * 255, cv2.COLOR_BGR2RGB)\n        cv2.imwrite(str(image_save_path), rgb_image)\n\n\ndef cal_co_vis_mask(points, depths, curr_depth_map, depth_threshold, camera_intrinsics, extrinsics_w2c):\n\n    h, w = curr_depth_map.shape\n    overlapping_mask = np.zeros((h, w), dtype=bool)\n    # Project 3D points to image j\n    points_2d, _ = project_points(points, camera_intrinsics, extrinsics_w2c)\n    \n    # Check if points are within image bounds\n    valid_points = (points_2d[:, 0] >= 0) & (points_2d[:, 0] < w) & \\\n                   (points_2d[:, 1] >= 0) & (points_2d[:, 1] < h)\n        \n    # Check depth consistency using vectorized operations\n    valid_points_2d = points_2d[valid_points].astype(int)\n    valid_depths = depths[valid_points]\n\n    # Extract x and y coordinates\n    x_coords, y_coords = valid_points_2d[:, 0], valid_points_2d[:, 1]\n\n    # Compute depth differences\n    depth_differences = np.abs(valid_depths - curr_depth_map[y_coords, x_coords])\n\n    # Create a mask for points where the depth difference is below the threshold\n    consistent_depth_mask = depth_differences < depth_threshold\n\n    # Update the overlapping masks using the consistent depth mask\n    overlapping_mask[y_coords[consistent_depth_mask], x_coords[consistent_depth_mask]] = True\n\n    return overlapping_mask\n\ndef normalize_depth(depth_map):\n    \"\"\"Normalize the depth map to a range between 0 and 1.\"\"\"\n    return (depth_map - np.min(depth_map)) / (np.max(depth_map) - np.min(depth_map))\n\ndef compute_co_vis_masks(sorted_conf_indices, depthmaps, pointmaps, camera_intrinsics, extrinsics_w2c, image_sizes, depth_threshold=0.1):\n\n    num_images, h, w, _ = image_sizes\n    pointmaps = pointmaps.reshape(num_images, h, w, 3)\n    overlapping_masks = np.zeros((num_images, h, w), dtype=bool)\n    \n    for i, curr_map_idx in tqdm(enumerate(sorted_conf_indices), total=len(sorted_conf_indices)):\n\n        # if frame_idx is 0, set its occ_mask to be all False\n        if i == 0:\n            continue\n\n        # get before and after curr_frame's indices\n        idx_before = sorted_conf_indices[:i]\n        \n        # idx_after = sorted_conf_indices[i+1:]\n\n        # get partial pointmaps and depthmaps\n        points_before = pointmaps[idx_before].reshape(-1, 3)\n        depths_before = depthmaps[idx_before].reshape(-1)    \n        # points_after = pointmaps[idx_after].reshape(-1, 3)        \n        # depths_after = depthmaps[idx_after].reshape(-1)\n        # get current frame's depth map\n        curr_depth_map = depthmaps[curr_map_idx].reshape(h, w)\n\n        # normalize depth for comparison\n        depths_before = normalize_depth(depths_before)\n        # depths_after = normalize_depth(depths_after)\n        curr_depth_map = normalize_depth(curr_depth_map)\n\n        # before_mask = overlapping_masks[idx_before]\n        # after_mask = overlapping_masks[idx_after]\n        # curr_mask = before_mask & after_mask\n\n        before_mask = cal_co_vis_mask(points_before, depths_before, curr_depth_map, depth_threshold, camera_intrinsics[curr_map_idx], extrinsics_w2c[curr_map_idx])\n        # after_mask = cal_co_vis_mask(points_after, depths_after, camera_intrinsics[i], extrinsics_w2c[i], curr_depth_map, depth_threshold)\n        \n        # white/True means co-visible redundant area: we need to remove\n        overlapping_masks[curr_map_idx] = before_mask# & after_mask\n        \n    return overlapping_masks\n\n\ndef project_points(points_3d, intrinsics, extrinsics):\n    # Convert to homogeneous coordinates\n    points_3d_homogeneous = np.hstack((points_3d, np.ones((points_3d.shape[0], 1))))\n    \n    # Apply extrinsic matrix\n    points_camera = np.dot(extrinsics, points_3d_homogeneous.T).T\n    \n    # Apply intrinsic matrix\n    points_2d_homogeneous = np.dot(intrinsics, points_camera[:, :3].T).T\n    \n    # Convert to 2D coordinates\n    points_2d = points_2d_homogeneous[:, :2] / points_2d_homogeneous[:, 2:]\n    depths = points_camera[:, 2]\n    \n    return points_2d, depths\n\ndef read_colmap_gt_pose(gt_pose_path, llffhold=8):\n    colmap_cam_extrinsics = read_extrinsics_binary(gt_pose_path + '/sparse/0/images.bin')\n    colmap_cam_extrinsics = {k: v for k, v in sorted(colmap_cam_extrinsics.items(), key=lambda item: item[1].name)}\n    all_pose=[]\n    for idx, key in enumerate(colmap_cam_extrinsics):\n        extr = colmap_cam_extrinsics[key]\n        # print(idx, extr.name)\n        R = np.transpose(qvec2rotmat(extr.qvec))\n        # R = np.array(qvec2rotmat(extr.qvec))\n        T = np.array(extr.tvec)\n        pose = np.eye(4,4)\n        pose[:3, :3] = R\n        pose[:3, 3] = T\n        all_pose.append(pose)\n    colmap_pose = np.array(all_pose)\n    return colmap_pose\n\n\ndef readImages(renders_dir, gt_dir):\n    renders = []\n    gts = []\n    image_names = []\n    for fname in os.listdir(renders_dir):\n        render = PIL.Image.open(renders_dir / fname)\n        gt = PIL.Image.open(gt_dir / fname)\n        renders.append(tf.to_tensor(render).unsqueeze(0)[:, :3, :, :].cuda())\n        gts.append(tf.to_tensor(gt).unsqueeze(0)[:, :3, :, :].cuda())\n        image_names.append(fname)\n    return renders, gts, image_names\n\ndef align_pose(pose1, pose2):\n    mtx1 = np.array(pose1, dtype=np.double, copy=True)\n    mtx2 = np.array(pose2, dtype=np.double, copy=True)\n\n    if mtx1.ndim != 2 or mtx2.ndim != 2:\n        raise ValueError(\"Input matrices must be two-dimensional\")\n    if mtx1.shape != mtx2.shape:\n        raise ValueError(\"Input matrices must be of same shape\")\n    if mtx1.size == 0:\n        raise ValueError(\"Input matrices must be >0 rows and >0 cols\")\n\n    # translate all the data to the origin\n    mtx1 -= np.mean(mtx1, 0)\n    mtx2 -= np.mean(mtx2, 0)\n\n    norm1 = np.linalg.norm(mtx1)\n    norm2 = np.linalg.norm(mtx2)\n\n    if norm1 == 0 or norm2 == 0:\n        raise ValueError(\"Input matrices must contain >1 unique points\")\n\n    # change scaling of data (in rows) such that trace(mtx*mtx') = 1\n    mtx1 /= norm1\n    mtx2 /= norm2\n\n    # transform mtx2 to minimize disparity\n    R, s = scipy.linalg.orthogonal_procrustes(mtx1, mtx2)\n    mtx2 = mtx2 * s\n\n    return mtx1, mtx2, R\n\ndef storePly(path, xyz, rgb):\n    # Define the dtype for the structured array\n    dtype = [('x', 'f4'), ('y', 'f4'), ('z', 'f4'),\n            ('nx', 'f4'), ('ny', 'f4'), ('nz', 'f4'),\n            ('red', 'u1'), ('green', 'u1'), ('blue', 'u1')]\n\n    normals = np.zeros_like(xyz)\n\n    elements = np.empty(xyz.shape[0], dtype=dtype)\n    attributes = np.concatenate((xyz, normals, rgb), axis=1)\n    elements[:] = list(map(tuple, attributes))\n\n    # Create the PlyData object and write to file\n    vertex_element = PlyElement.describe(elements, 'vertex')\n    ply_data = PlyData([vertex_element])\n    ply_data.write(path)"
  },
  {
    "path": "utils/sh_utils.py",
    "content": "#  Copyright 2021 The PlenOctree Authors.\n#  Redistribution and use in source and binary forms, with or without\n#  modification, are permitted provided that the following conditions are met:\n#\n#  1. Redistributions of source code must retain the above copyright notice,\n#  this list of conditions and the following disclaimer.\n#\n#  2. Redistributions in binary form must reproduce the above copyright notice,\n#  this list of conditions and the following disclaimer in the documentation\n#  and/or other materials provided with the distribution.\n#\n#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE\n#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n#  POSSIBILITY OF SUCH DAMAGE.\n\nimport torch\n\nC0 = 0.28209479177387814\nC1 = 0.4886025119029199\nC2 = [\n    1.0925484305920792,\n    -1.0925484305920792,\n    0.31539156525252005,\n    -1.0925484305920792,\n    0.5462742152960396\n]\nC3 = [\n    -0.5900435899266435,\n    2.890611442640554,\n    -0.4570457994644658,\n    0.3731763325901154,\n    -0.4570457994644658,\n    1.445305721320277,\n    -0.5900435899266435\n]\nC4 = [\n    2.5033429417967046,\n    -1.7701307697799304,\n    0.9461746957575601,\n    -0.6690465435572892,\n    0.10578554691520431,\n    -0.6690465435572892,\n    0.47308734787878004,\n    -1.7701307697799304,\n    0.6258357354491761,\n]   \n\n\ndef eval_sh(deg, sh, dirs):\n    \"\"\"\n    Evaluate spherical harmonics at unit directions\n    using hardcoded SH polynomials.\n    Works with torch/np/jnp.\n    ... Can be 0 or more batch dimensions.\n    Args:\n        deg: int SH deg. Currently, 0-3 supported\n        sh: jnp.ndarray SH coeffs [..., C, (deg + 1) ** 2]\n        dirs: jnp.ndarray unit directions [..., 3]\n    Returns:\n        [..., C]\n    \"\"\"\n    assert deg <= 4 and deg >= 0\n    coeff = (deg + 1) ** 2\n    assert sh.shape[-1] >= coeff\n\n    result = C0 * sh[..., 0]\n    if deg > 0:\n        x, y, z = dirs[..., 0:1], dirs[..., 1:2], dirs[..., 2:3]\n        result = (result -\n                C1 * y * sh[..., 1] +\n                C1 * z * sh[..., 2] -\n                C1 * x * sh[..., 3])\n\n        if deg > 1:\n            xx, yy, zz = x * x, y * y, z * z\n            xy, yz, xz = x * y, y * z, x * z\n            result = (result +\n                    C2[0] * xy * sh[..., 4] +\n                    C2[1] * yz * sh[..., 5] +\n                    C2[2] * (2.0 * zz - xx - yy) * sh[..., 6] +\n                    C2[3] * xz * sh[..., 7] +\n                    C2[4] * (xx - yy) * sh[..., 8])\n\n            if deg > 2:\n                result = (result +\n                C3[0] * y * (3 * xx - yy) * sh[..., 9] +\n                C3[1] * xy * z * sh[..., 10] +\n                C3[2] * y * (4 * zz - xx - yy)* sh[..., 11] +\n                C3[3] * z * (2 * zz - 3 * xx - 3 * yy) * sh[..., 12] +\n                C3[4] * x * (4 * zz - xx - yy) * sh[..., 13] +\n                C3[5] * z * (xx - yy) * sh[..., 14] +\n                C3[6] * x * (xx - 3 * yy) * sh[..., 15])\n\n                if deg > 3:\n                    result = (result + C4[0] * xy * (xx - yy) * sh[..., 16] +\n                            C4[1] * yz * (3 * xx - yy) * sh[..., 17] +\n                            C4[2] * xy * (7 * zz - 1) * sh[..., 18] +\n                            C4[3] * yz * (7 * zz - 3) * sh[..., 19] +\n                            C4[4] * (zz * (35 * zz - 30) + 3) * sh[..., 20] +\n                            C4[5] * xz * (7 * zz - 3) * sh[..., 21] +\n                            C4[6] * (xx - yy) * (7 * zz - 1) * sh[..., 22] +\n                            C4[7] * xz * (xx - 3 * yy) * sh[..., 23] +\n                            C4[8] * (xx * (xx - 3 * yy) - yy * (3 * xx - yy)) * sh[..., 24])\n    return result\n\ndef RGB2SH(rgb):\n    return (rgb - 0.5) / C0\n\ndef SH2RGB(sh):\n    return sh * C0 + 0.5"
  },
  {
    "path": "utils/stepfun.py",
    "content": "# from internal import math\nimport numpy as np\nimport torch\n\n\ndef searchsorted(a, v):\n    \"\"\"Find indices where v should be inserted into a to maintain order.\n\n  Args:\n    a: tensor, the sorted reference points that we are scanning to see where v\n      should lie.\n    v: tensor, the query points that we are pretending to insert into a. Does\n      not need to be sorted. All but the last dimensions should match or expand\n      to those of a, the last dimension can differ.\n\n  Returns:\n    (idx_lo, idx_hi), where a[idx_lo] <= v < a[idx_hi], unless v is out of the\n    range [a[0], a[-1]] in which case idx_lo and idx_hi are both the first or\n    last index of a.\n  \"\"\"\n    i = torch.arange(a.shape[-1], device=a.device)\n    v_ge_a = v[..., None, :] >= a[..., :, None]\n    idx_lo = torch.max(torch.where(v_ge_a, i[..., :, None], i[..., :1, None]), -2).values\n    idx_hi = torch.min(torch.where(~v_ge_a, i[..., :, None], i[..., -1:, None]), -2).values\n    return idx_lo, idx_hi\n\n\ndef query(tq, t, y, outside_value=0):\n    \"\"\"Look up the values of the step function (t, y) at locations tq.\"\"\"\n    idx_lo, idx_hi = searchsorted(t, tq)\n    yq = torch.where(idx_lo == idx_hi, torch.full_like(idx_hi, outside_value),\n                     torch.take_along_dim(y, idx_lo, dim=-1))\n    return yq\n\n\ndef inner_outer(t0, t1, y1):\n    \"\"\"Construct inner and outer measures on (t1, y1) for t0.\"\"\"\n    cy1 = torch.cat([torch.zeros_like(y1[..., :1]),\n                     torch.cumsum(y1, dim=-1)],\n                    dim=-1)\n    idx_lo, idx_hi = searchsorted(t1, t0)\n\n    cy1_lo = torch.take_along_dim(cy1, idx_lo, dim=-1)\n    cy1_hi = torch.take_along_dim(cy1, idx_hi, dim=-1)\n\n    y0_outer = cy1_hi[..., 1:] - cy1_lo[..., :-1]\n    y0_inner = torch.where(idx_hi[..., :-1] <= idx_lo[..., 1:],\n                           cy1_lo[..., 1:] - cy1_hi[..., :-1], torch.zeros_like(idx_lo[..., 1:]))\n    return y0_inner, y0_outer\n\n\ndef lossfun_outer(t, w, t_env, w_env):\n    \"\"\"The proposal weight should be an upper envelope on the nerf weight.\"\"\"\n    eps = torch.finfo(t.dtype).eps\n    # eps = 1e-3\n\n    _, w_outer = inner_outer(t, t_env, w_env)\n    # We assume w_inner <= w <= w_outer. We don't penalize w_inner because it's\n    # more effective to pull w_outer up than it is to push w_inner down.\n    # Scaled half-quadratic loss that gives a constant gradient at w_outer = 0.\n    return (w - w_outer).clamp_min(0) ** 2 / (w + eps)\n\n\ndef weight_to_pdf(t, w):\n    \"\"\"Turn a vector of weights that sums to 1 into a PDF that integrates to 1.\"\"\"\n    eps = torch.finfo(t.dtype).eps\n    return w / (t[..., 1:] - t[..., :-1]).clamp_min(eps)\n\n\ndef pdf_to_weight(t, p):\n    \"\"\"Turn a PDF that integrates to 1 into a vector of weights that sums to 1.\"\"\"\n    return p * (t[..., 1:] - t[..., :-1])\n\n\ndef max_dilate(t, w, dilation, domain=(-torch.inf, torch.inf)):\n    \"\"\"Dilate (via max-pooling) a non-negative step function.\"\"\"\n    t0 = t[..., :-1] - dilation\n    t1 = t[..., 1:] + dilation\n    t_dilate, _ = torch.sort(torch.cat([t, t0, t1], dim=-1), dim=-1)\n    t_dilate = torch.clip(t_dilate, *domain)\n    w_dilate = torch.max(\n        torch.where(\n            (t0[..., None, :] <= t_dilate[..., None])\n            & (t1[..., None, :] > t_dilate[..., None]),\n            w[..., None, :],\n            torch.zeros_like(w[..., None, :]),\n        ), dim=-1).values[..., :-1]\n    return t_dilate, w_dilate\n\n\ndef max_dilate_weights(t,\n                       w,\n                       dilation,\n                       domain=(-torch.inf, torch.inf),\n                       renormalize=False):\n    \"\"\"Dilate (via max-pooling) a set of weights.\"\"\"\n    eps = torch.finfo(w.dtype).eps\n    # eps = 1e-3\n\n    p = weight_to_pdf(t, w)\n    t_dilate, p_dilate = max_dilate(t, p, dilation, domain=domain)\n    w_dilate = pdf_to_weight(t_dilate, p_dilate)\n    if renormalize:\n        w_dilate /= torch.sum(w_dilate, dim=-1, keepdim=True).clamp_min(eps)\n    return t_dilate, w_dilate\n\n\ndef integrate_weights(w):\n    \"\"\"Compute the cumulative sum of w, assuming all weight vectors sum to 1.\n\n  The output's size on the last dimension is one greater than that of the input,\n  because we're computing the integral corresponding to the endpoints of a step\n  function, not the integral of the interior/bin values.\n\n  Args:\n    w: Tensor, which will be integrated along the last axis. This is assumed to\n      sum to 1 along the last axis, and this function will (silently) break if\n      that is not the case.\n\n  Returns:\n    cw0: Tensor, the integral of w, where cw0[..., 0] = 0 and cw0[..., -1] = 1\n  \"\"\"\n    cw = torch.cumsum(w[..., :-1], dim=-1).clamp_max(1)\n    shape = cw.shape[:-1] + (1,)\n    # Ensure that the CDF starts with exactly 0 and ends with exactly 1.\n    cw0 = torch.cat([torch.zeros(shape, device=cw.device), cw,\n                     torch.ones(shape, device=cw.device)], dim=-1)\n    return cw0\n\n\ndef integrate_weights_np(w):\n    \"\"\"Compute the cumulative sum of w, assuming all weight vectors sum to 1.\n\n  The output's size on the last dimension is one greater than that of the input,\n  because we're computing the integral corresponding to the endpoints of a step\n  function, not the integral of the interior/bin values.\n\n  Args:\n    w: Tensor, which will be integrated along the last axis. This is assumed to\n      sum to 1 along the last axis, and this function will (silently) break if\n      that is not the case.\n\n  Returns:\n    cw0: Tensor, the integral of w, where cw0[..., 0] = 0 and cw0[..., -1] = 1\n  \"\"\"\n    cw = np.minimum(1, np.cumsum(w[..., :-1], axis=-1))\n    shape = cw.shape[:-1] + (1,)\n    # Ensure that the CDF starts with exactly 0 and ends with exactly 1.\n    cw0 = np.concatenate([np.zeros(shape), cw,\n                          np.ones(shape)], axis=-1)\n    return cw0\n\n\ndef invert_cdf(u, t, w_logits):\n    \"\"\"Invert the CDF defined by (t, w) at the points specified by u in [0, 1).\"\"\"\n    # Compute the PDF and CDF for each weight vector.\n    w = torch.softmax(w_logits, dim=-1)\n    cw = integrate_weights(w)\n    # Interpolate into the inverse CDF.\n    t_new = math.sorted_interp(u, cw, t)\n    return t_new\n\n\ndef invert_cdf_np(u, t, w_logits):\n    \"\"\"Invert the CDF defined by (t, w) at the points specified by u in [0, 1).\"\"\"\n    # Compute the PDF and CDF for each weight vector.\n    w = np.exp(w_logits) / np.exp(w_logits).sum(axis=-1, keepdims=True)\n    cw = integrate_weights_np(w)\n    # Interpolate into the inverse CDF.\n    interp_fn = np.interp\n    t_new = interp_fn(u, cw, t)\n    return t_new\n\n\ndef sample(rand,\n           t,\n           w_logits,\n           num_samples,\n           single_jitter=False,\n           deterministic_center=False):\n    \"\"\"Piecewise-Constant PDF sampling from a step function.\n\n  Args:\n    rand: random number generator (or None for `linspace` sampling).\n    t: [..., num_bins + 1], bin endpoint coordinates (must be sorted)\n    w_logits: [..., num_bins], logits corresponding to bin weights\n    num_samples: int, the number of samples.\n    single_jitter: bool, if True, jitter every sample along each ray by the same\n      amount in the inverse CDF. Otherwise, jitter each sample independently.\n    deterministic_center: bool, if False, when `rand` is None return samples that\n      linspace the entire PDF. If True, skip the front and back of the linspace\n      so that the centers of each PDF interval are returned.\n\n  Returns:\n    t_samples: [batch_size, num_samples].\n  \"\"\"\n    eps = torch.finfo(t.dtype).eps\n    # eps = 1e-3\n\n    device = t.device\n\n    # Draw uniform samples.\n    if not rand:\n        if deterministic_center:\n            pad = 1 / (2 * num_samples)\n            u = torch.linspace(pad, 1. - pad - eps, num_samples, device=device)\n        else:\n            u = torch.linspace(0, 1. - eps, num_samples, device=device)\n        u = torch.broadcast_to(u, t.shape[:-1] + (num_samples,))\n    else:\n        # `u` is in [0, 1) --- it can be zero, but it can never be 1.\n        u_max = eps + (1 - eps) / num_samples\n        max_jitter = (1 - u_max) / (num_samples - 1) - eps\n        d = 1 if single_jitter else num_samples\n        u = torch.linspace(0, 1 - u_max, num_samples, device=device) + \\\n            torch.rand(t.shape[:-1] + (d,), device=device) * max_jitter\n\n    return invert_cdf(u, t, w_logits)\n\n\ndef sample_np(rand,\n              t,\n              w_logits,\n              num_samples,\n              single_jitter=False,\n              deterministic_center=False):\n    \"\"\"\n    numpy version of sample()\n  \"\"\"\n    eps = np.finfo(np.float32).eps\n\n    # Draw uniform samples.\n    if not rand:\n        if deterministic_center:\n            pad = 1 / (2 * num_samples)\n            u = np.linspace(pad, 1. - pad - eps, num_samples)\n        else:\n            u = np.linspace(0, 1. - eps, num_samples)\n        u = np.broadcast_to(u, t.shape[:-1] + (num_samples,))\n    else:\n        # `u` is in [0, 1) --- it can be zero, but it can never be 1.\n        u_max = eps + (1 - eps) / num_samples\n        max_jitter = (1 - u_max) / (num_samples - 1) - eps\n        d = 1 if single_jitter else num_samples\n        u = np.linspace(0, 1 - u_max, num_samples) + \\\n            np.random.rand(*t.shape[:-1], d) * max_jitter\n\n    return invert_cdf_np(u, t, w_logits)\n\n\ndef sample_intervals(rand,\n                     t,\n                     w_logits,\n                     num_samples,\n                     single_jitter=False,\n                     domain=(-torch.inf, torch.inf)):\n    \"\"\"Sample *intervals* (rather than points) from a step function.\n\n  Args:\n    rand: random number generator (or None for `linspace` sampling).\n    t: [..., num_bins + 1], bin endpoint coordinates (must be sorted)\n    w_logits: [..., num_bins], logits corresponding to bin weights\n    num_samples: int, the number of intervals to sample.\n    single_jitter: bool, if True, jitter every sample along each ray by the same\n      amount in the inverse CDF. Otherwise, jitter each sample independently.\n    domain: (minval, maxval), the range of valid values for `t`.\n\n  Returns:\n    t_samples: [batch_size, num_samples].\n  \"\"\"\n    if num_samples <= 1:\n        raise ValueError(f'num_samples must be > 1, is {num_samples}.')\n\n    # Sample a set of points from the step function.\n    centers = sample(\n        rand,\n        t,\n        w_logits,\n        num_samples,\n        single_jitter,\n        deterministic_center=True)\n\n    # The intervals we return will span the midpoints of each adjacent sample.\n    mid = (centers[..., 1:] + centers[..., :-1]) / 2\n\n    # Each first/last fencepost is the reflection of the first/last midpoint\n    # around the first/last sampled center. We clamp to the limits of the input\n    # domain, provided by the caller.\n    minval, maxval = domain\n    first = (2 * centers[..., :1] - mid[..., :1]).clamp_min(minval)\n    last = (2 * centers[..., -1:] - mid[..., -1:]).clamp_max(maxval)\n\n    t_samples = torch.cat([first, mid, last], dim=-1)\n    return t_samples\n\n\ndef lossfun_distortion(t, w):\n    \"\"\"Compute iint w[i] w[j] |t[i] - t[j]| di dj.\"\"\"\n    # The loss incurred between all pairs of intervals.\n    ut = (t[..., 1:] + t[..., :-1]) / 2\n    dut = torch.abs(ut[..., :, None] - ut[..., None, :])\n    loss_inter = torch.sum(w * torch.sum(w[..., None, :] * dut, dim=-1), dim=-1)\n\n    # The loss incurred within each individual interval with itself.\n    loss_intra = torch.sum(w ** 2 * (t[..., 1:] - t[..., :-1]), dim=-1) / 3\n\n    return loss_inter + loss_intra\n\n\ndef interval_distortion(t0_lo, t0_hi, t1_lo, t1_hi):\n    \"\"\"Compute mean(abs(x-y); x in [t0_lo, t0_hi], y in [t1_lo, t1_hi]).\"\"\"\n    # Distortion when the intervals do not overlap.\n    d_disjoint = torch.abs((t1_lo + t1_hi) / 2 - (t0_lo + t0_hi) / 2)\n\n    # Distortion when the intervals overlap.\n    d_overlap = (2 *\n                 (torch.minimum(t0_hi, t1_hi) ** 3 - torch.maximum(t0_lo, t1_lo) ** 3) +\n                 3 * (t1_hi * t0_hi * torch.abs(t1_hi - t0_hi) +\n                      t1_lo * t0_lo * torch.abs(t1_lo - t0_lo) + t1_hi * t0_lo *\n                      (t0_lo - t1_hi) + t1_lo * t0_hi *\n                      (t1_lo - t0_hi))) / (6 * (t0_hi - t0_lo) * (t1_hi - t1_lo))\n\n    # Are the two intervals not overlapping?\n    are_disjoint = (t0_lo > t1_hi) | (t1_lo > t0_hi)\n\n    return torch.where(are_disjoint, d_disjoint, d_overlap)\n\n\ndef weighted_percentile(t, w, ps):\n    \"\"\"Compute the weighted percentiles of a step function. w's must sum to 1.\"\"\"\n    cw = integrate_weights(w)\n    # We want to interpolate into the integrated weights according to `ps`.\n    fn = lambda cw_i, t_i: math.sorted_interp(torch.tensor(ps, device=t.device) / 100, cw_i, t_i)\n    # Vmap fn to an arbitrary number of leading dimensions.\n    cw_mat = cw.reshape([-1, cw.shape[-1]])\n    t_mat = t.reshape([-1, t.shape[-1]])\n    wprctile_mat = fn(cw_mat, t_mat)  # TODO\n    wprctile = wprctile_mat.reshape(cw.shape[:-1] + (len(ps),))\n    return wprctile\n\n\ndef resample(t, tp, vp, use_avg=False):\n    \"\"\"Resample a step function defined by (tp, vp) into intervals t.\n\n  Args:\n    t: tensor with shape (..., n+1), the endpoints to resample into.\n    tp: tensor with shape (..., m+1), the endpoints of the step function being\n      resampled.\n    vp: tensor with shape (..., m), the values of the step function being\n      resampled.\n    use_avg: bool, if False, return the sum of the step function for each\n      interval in `t`. If True, return the average, weighted by the width of\n      each interval in `t`.\n    eps: float, a small value to prevent division by zero when use_avg=True.\n\n  Returns:\n    v: tensor with shape (..., n), the values of the resampled step function.\n  \"\"\"\n    eps = torch.finfo(t.dtype).eps\n    # eps = 1e-3\n\n    if use_avg:\n        wp = torch.diff(tp, dim=-1)\n        v_numer = resample(t, tp, vp * wp, use_avg=False)\n        v_denom = resample(t, tp, wp, use_avg=False)\n        v = v_numer / v_denom.clamp_min(eps)\n        return v\n\n    acc = torch.cumsum(vp, dim=-1)\n    acc0 = torch.cat([torch.zeros(acc.shape[:-1] + (1,), device=acc.device), acc], dim=-1)\n    acc0_resampled = math.sorted_interp(t, tp, acc0)  # TODO\n    v = torch.diff(acc0_resampled, dim=-1)\n    return v\n\n\ndef resample_np(t, tp, vp, use_avg=False):\n    \"\"\"\n    numpy version of resample\n  \"\"\"\n    eps = np.finfo(t.dtype).eps\n    if use_avg:\n        wp = np.diff(tp, axis=-1)\n        v_numer = resample_np(t, tp, vp * wp, use_avg=False)\n        v_denom = resample_np(t, tp, wp, use_avg=False)\n        v = v_numer / np.maximum(eps, v_denom)\n        return v\n\n    acc = np.cumsum(vp, axis=-1)\n    acc0 = np.concatenate([np.zeros(acc.shape[:-1] + (1,)), acc], axis=-1)\n    acc0_resampled = np.vectorize(np.interp, signature='(n),(m),(m)->(n)')(t, tp, acc0)\n    v = np.diff(acc0_resampled, axis=-1)\n    return v\n\n\ndef blur_stepfun(x, y, r):\n    xr, xr_idx = torch.sort(torch.cat([x - r, x + r], dim=-1))\n    y1 = (torch.cat([y, torch.zeros_like(y[..., :1])], dim=-1) -\n          torch.cat([torch.zeros_like(y[..., :1]), y], dim=-1)) / (2 * r)\n    y2 = torch.cat([y1, -y1], dim=-1).take_along_dim(xr_idx[..., :-1], dim=-1)\n    yr = torch.cumsum((xr[..., 1:] - xr[..., :-1]) *\n                      torch.cumsum(y2, dim=-1), dim=-1).clamp_min(0)\n    yr = torch.cat([torch.zeros_like(yr[..., :1]), yr], dim=-1)\n    return xr, yr"
  },
  {
    "path": "utils/system_utils.py",
    "content": "#\n# Copyright (C) 2023, Inria\n# GRAPHDECO research group, https://team.inria.fr/graphdeco\n# All rights reserved.\n#\n# This software is free for non-commercial, research and evaluation use \n# under the terms of the LICENSE.md file.\n#\n# For inquiries contact  george.drettakis@inria.fr\nfrom errno import EEXIST\nfrom os import makedirs, path\nimport os\n\ndef mkdir_p(folder_path):\n    # Creates a directory. equivalent to using mkdir -p on the command line\n    try:\n        makedirs(folder_path)\n    except OSError as exc: # Python >2.5\n        if exc.errno == EEXIST and path.isdir(folder_path):\n            pass\n        else:\n            raise\n\ndef searchForMaxIteration(folder):\n    saved_iters = [int(fname.split(\"_\")[-1]) for fname in os.listdir(folder)]\n    return max(saved_iters)\n"
  },
  {
    "path": "utils/utils_poses/ATE/align_trajectory.py",
    "content": "# Copyright (c) 2024, NVIDIA CORPORATION.  All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intellectual property\n# and proprietary rights in and to this software, related documentation\n# and any modifications thereto.  Any use, reproduction, disclosure or\n# distribution of this software and related documentation without an express\n# license agreement from NVIDIA CORPORATION is strictly prohibited.\n\n\n#!/usr/bin/env python2\n# -*- coding: utf-8 -*-\n\nimport numpy as np\nimport utils.utils_poses.ATE.transformations as tfs\n\n\ndef get_best_yaw(C):\n    '''\n    maximize trace(Rz(theta) * C)\n    '''\n    assert C.shape == (3, 3)\n\n    A = C[0, 1] - C[1, 0]\n    B = C[0, 0] + C[1, 1]\n    theta = np.pi / 2 - np.arctan2(B, A)\n\n    return theta\n\n\ndef rot_z(theta):\n    R = tfs.rotation_matrix(theta, [0, 0, 1])\n    R = R[0:3, 0:3]\n\n    return R\n\n\ndef align_umeyama(model, data, known_scale=False, yaw_only=False):\n    \"\"\"Implementation of the paper: S. Umeyama, Least-Squares Estimation\n    of Transformation Parameters Between Two Point Patterns,\n    IEEE Trans. Pattern Anal. Mach. Intell., vol. 13, no. 4, 1991.\n\n    model = s * R * data + t\n\n    Input:\n    model -- first trajectory (nx3), numpy array type\n    data -- second trajectory (nx3), numpy array type\n\n    Output:\n    s -- scale factor (scalar)\n    R -- rotation matrix (3x3)\n    t -- translation vector (3x1)\n    t_error -- translational error per point (1xn)\n\n    \"\"\"\n\n    # substract mean\n    mu_M = model.mean(0)\n    mu_D = data.mean(0)\n    model_zerocentered = model - mu_M\n    data_zerocentered = data - mu_D\n    n = np.shape(model)[0]\n\n    # correlation\n    C = 1.0/n*np.dot(model_zerocentered.transpose(), data_zerocentered)\n    sigma2 = 1.0/n*np.multiply(data_zerocentered, data_zerocentered).sum()\n    U_svd, D_svd, V_svd = np.linalg.linalg.svd(C)\n\n    D_svd = np.diag(D_svd)\n    V_svd = np.transpose(V_svd)\n\n    S = np.eye(3)\n    if(np.linalg.det(U_svd)*np.linalg.det(V_svd) < 0):\n        S[2, 2] = -1\n\n    if yaw_only:\n        rot_C = np.dot(data_zerocentered.transpose(), model_zerocentered)\n        theta = get_best_yaw(rot_C)\n        R = rot_z(theta)\n    else:\n        R = np.dot(U_svd, np.dot(S, np.transpose(V_svd)))\n\n    if known_scale:\n        s = 1\n    else:\n        s = 1.0/sigma2*np.trace(np.dot(D_svd, S))\n\n    t = mu_M-s*np.dot(R, mu_D)\n\n    return s, R, t\n"
  },
  {
    "path": "utils/utils_poses/ATE/align_utils.py",
    "content": "# Copyright (c) 2024, NVIDIA CORPORATION.  All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intellectual property\n# and proprietary rights in and to this software, related documentation\n# and any modifications thereto.  Any use, reproduction, disclosure or\n# distribution of this software and related documentation without an express\n# license agreement from NVIDIA CORPORATION is strictly prohibited.\n\n#!/usr/bin/env python2\n# -*- coding: utf-8 -*-\n\nimport numpy as np\n\nimport utils.utils_poses.ATE.transformations as tfs\nimport utils.utils_poses.ATE.align_trajectory as align\n\n\ndef _getIndices(n_aligned, total_n):\n    if n_aligned == -1:\n        idxs = np.arange(0, total_n)\n    else:\n        assert n_aligned <= total_n and n_aligned >= 1\n        idxs = np.arange(0, n_aligned)\n    return idxs\n\n\ndef alignPositionYawSingle(p_es, p_gt, q_es, q_gt):\n    '''\n    calcualte the 4DOF transformation: yaw R and translation t so that:\n        gt = R * est + t\n    '''\n\n    p_es_0, q_es_0 = p_es[0, :], q_es[0, :]\n    p_gt_0, q_gt_0 = p_gt[0, :], q_gt[0, :]\n    g_rot = tfs.quaternion_matrix(q_gt_0)\n    g_rot = g_rot[0:3, 0:3]\n    est_rot = tfs.quaternion_matrix(q_es_0)\n    est_rot = est_rot[0:3, 0:3]\n\n    C_R = np.dot(est_rot, g_rot.transpose())\n    theta = align.get_best_yaw(C_R)\n    R = align.rot_z(theta)\n    t = p_gt_0 - np.dot(R, p_es_0)\n\n    return R, t\n\n\ndef alignPositionYaw(p_es, p_gt, q_es, q_gt, n_aligned=1):\n    if n_aligned == 1:\n        R, t = alignPositionYawSingle(p_es, p_gt, q_es, q_gt)\n        return R, t\n    else:\n        idxs = _getIndices(n_aligned, p_es.shape[0])\n        est_pos = p_es[idxs, 0:3]\n        gt_pos = p_gt[idxs, 0:3]\n        _, R, t = align.align_umeyama(gt_pos, est_pos, known_scale=True,\n                                      yaw_only=True)  # note the order\n        t = np.array(t)\n        t = t.reshape((3, ))\n        R = np.array(R)\n        return R, t\n\n\n# align by a SE3 transformation\ndef alignSE3Single(p_es, p_gt, q_es, q_gt):\n    '''\n    Calculate SE3 transformation R and t so that:\n        gt = R * est + t\n    Using only the first poses of est and gt\n    '''\n\n    p_es_0, q_es_0 = p_es[0, :], q_es[0, :]\n    p_gt_0, q_gt_0 = p_gt[0, :], q_gt[0, :]\n\n    g_rot = tfs.quaternion_matrix(q_gt_0)\n    g_rot = g_rot[0:3, 0:3]\n    est_rot = tfs.quaternion_matrix(q_es_0)\n    est_rot = est_rot[0:3, 0:3]\n\n    R = np.dot(g_rot, np.transpose(est_rot))\n    t = p_gt_0 - np.dot(R, p_es_0)\n\n    return R, t\n\n\ndef alignSE3(p_es, p_gt, q_es, q_gt, n_aligned=-1):\n    '''\n    Calculate SE3 transformation R and t so that:\n        gt = R * est + t\n    '''\n    if n_aligned == 1:\n        R, t = alignSE3Single(p_es, p_gt, q_es, q_gt)\n        return R, t\n    else:\n        idxs = _getIndices(n_aligned, p_es.shape[0])\n        est_pos = p_es[idxs, 0:3]\n        gt_pos = p_gt[idxs, 0:3]\n        s, R, t = align.align_umeyama(gt_pos, est_pos,\n                                      known_scale=True)  # note the order\n        t = np.array(t)\n        t = t.reshape((3, ))\n        R = np.array(R)\n        return R, t\n\n\n# align by similarity transformation\ndef alignSIM3(p_es, p_gt, q_es, q_gt, n_aligned=-1):\n    '''\n    calculate s, R, t so that:\n        gt = R * s * est + t\n    '''\n    idxs = _getIndices(n_aligned, p_es.shape[0])\n    est_pos = p_es[idxs, 0:3]\n    gt_pos = p_gt[idxs, 0:3]\n    s, R, t = align.align_umeyama(gt_pos, est_pos)  # note the order\n    return s, R, t\n\n\n# a general interface\ndef alignTrajectory(p_es, p_gt, q_es, q_gt, method, n_aligned=-1):\n    '''\n    calculate s, R, t so that:\n        gt = R * s * est + t\n    method can be: sim3, se3, posyaw, none;\n    n_aligned: -1 means using all the frames\n    '''\n    assert p_es.shape[1] == 3\n    assert p_gt.shape[1] == 3\n    assert q_es.shape[1] == 4\n    assert q_gt.shape[1] == 4\n\n    s = 1\n    R = None\n    t = None\n    if method == 'sim3':\n        assert n_aligned >= 2 or n_aligned == -1, \"sim3 uses at least 2 frames\"\n        s, R, t = alignSIM3(p_es, p_gt, q_es, q_gt, n_aligned)\n    elif method == 'se3':\n        R, t = alignSE3(p_es, p_gt, q_es, q_gt, n_aligned)\n    elif method == 'posyaw':\n        R, t = alignPositionYaw(p_es, p_gt, q_es, q_gt, n_aligned)\n    elif method == 'none':\n        R = np.identity(3)\n        t = np.zeros((3, ))\n    else:\n        assert False, 'unknown alignment method'\n\n    return s, R, t\n\n\nif __name__ == '__main__':\n    pass\n"
  },
  {
    "path": "utils/utils_poses/ATE/compute_trajectory_errors.py",
    "content": "# Copyright (c) 2024, NVIDIA CORPORATION.  All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intellectual property\n# and proprietary rights in and to this software, related documentation\n# and any modifications thereto.  Any use, reproduction, disclosure or\n# distribution of this software and related documentation without an express\n# license agreement from NVIDIA CORPORATION is strictly prohibited.\n\n#!/usr/bin/env python2\n\nimport os\nimport numpy as np\n\nimport utils.utils_poses.ATE.trajectory_utils as tu\nimport utils.utils_poses.ATE.transformations as tf\n\n\ndef compute_relative_error(p_es, q_es, p_gt, q_gt, T_cm, dist, max_dist_diff,\n                           accum_distances=[],\n                           scale=1.0):\n\n    if len(accum_distances) == 0:\n        accum_distances = tu.get_distance_from_start(p_gt)\n    comparisons = tu.compute_comparison_indices_length(\n        accum_distances, dist, max_dist_diff)\n\n    n_samples = len(comparisons)\n    print('number of samples = {0} '.format(n_samples))\n    if n_samples < 2:\n        print(\"Too few samples! Will not compute.\")\n        return np.array([]), np.array([]), np.array([]), np.array([]), np.array([]),\\\n            np.array([]), np.array([])\n\n    T_mc = np.linalg.inv(T_cm)\n    errors = []\n    for idx, c in enumerate(comparisons):\n        if not c == -1:\n            T_c1 = tu.get_rigid_body_trafo(q_es[idx, :], p_es[idx, :])\n            T_c2 = tu.get_rigid_body_trafo(q_es[c, :], p_es[c, :])\n            T_c1_c2 = np.dot(np.linalg.inv(T_c1), T_c2)\n            T_c1_c2[:3, 3] *= scale\n\n            T_m1 = tu.get_rigid_body_trafo(q_gt[idx, :], p_gt[idx, :])\n            T_m2 = tu.get_rigid_body_trafo(q_gt[c, :], p_gt[c, :])\n            T_m1_m2 = np.dot(np.linalg.inv(T_m1), T_m2)\n\n            T_m1_m2_in_c1 = np.dot(T_cm, np.dot(T_m1_m2, T_mc))\n            T_error_in_c2 = np.dot(np.linalg.inv(T_m1_m2_in_c1), T_c1_c2)\n            T_c2_rot = np.eye(4)\n            T_c2_rot[0:3, 0:3] = T_c2[0:3, 0:3]\n            T_error_in_w = np.dot(T_c2_rot, np.dot(\n                T_error_in_c2, np.linalg.inv(T_c2_rot)))\n            errors.append(T_error_in_w)\n\n    error_trans_norm = []\n    error_trans_perc = []\n    error_yaw = []\n    error_gravity = []\n    e_rot = []\n    e_rot_deg_per_m = []\n    for e in errors:\n        tn = np.linalg.norm(e[0:3, 3])\n        error_trans_norm.append(tn)\n        error_trans_perc.append(tn / dist * 100)\n        ypr_angles = tf.euler_from_matrix(e, 'rzyx')\n        e_rot.append(tu.compute_angle(e))\n        error_yaw.append(abs(ypr_angles[0])*180.0/np.pi)\n        error_gravity.append(\n            np.sqrt(ypr_angles[1]**2+ypr_angles[2]**2)*180.0/np.pi)\n        e_rot_deg_per_m.append(e_rot[-1] / dist)\n    return errors, np.array(error_trans_norm), np.array(error_trans_perc),\\\n        np.array(error_yaw), np.array(error_gravity), np.array(e_rot),\\\n        np.array(e_rot_deg_per_m)\n\n\ndef compute_absolute_error(p_es_aligned, q_es_aligned, p_gt, q_gt):\n    e_trans_vec = (p_gt-p_es_aligned)\n    e_trans = np.sqrt(np.sum(e_trans_vec**2, 1))\n    \n\n    # orientation error\n    e_rot = np.zeros((len(e_trans,)))\n    e_ypr = np.zeros(np.shape(p_es_aligned))\n    for i in range(np.shape(p_es_aligned)[0]):\n        R_we = tf.matrix_from_quaternion(q_es_aligned[i, :])\n        R_wg = tf.matrix_from_quaternion(q_gt[i, :])\n        e_R = np.dot(R_we, np.linalg.inv(R_wg))\n        e_ypr[i, :] = tf.euler_from_matrix(e_R, 'rzyx')\n        e_rot[i] = np.rad2deg(np.linalg.norm(tf.logmap_so3(e_R[:3, :3])))\n    # scale drift\n    motion_gt = np.diff(p_gt, 0)\n    motion_es = np.diff(p_es_aligned, 0)\n    dist_gt = np.sqrt(np.sum(np.multiply(motion_gt, motion_gt), 1))\n    dist_es = np.sqrt(np.sum(np.multiply(motion_es, motion_es), 1))\n    e_scale_perc = np.abs((np.divide(dist_es, dist_gt)-1.0) * 100)\n    # ate = np.sqrt(np.mean(np.asarray(e_trans) ** 2)) \n    return e_trans, e_trans_vec, e_rot, e_ypr, e_scale_perc\n"
  },
  {
    "path": "utils/utils_poses/ATE/results_writer.py",
    "content": "# Copyright (c) 2024, NVIDIA CORPORATION.  All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intellectual property\n# and proprietary rights in and to this software, related documentation\n# and any modifications thereto.  Any use, reproduction, disclosure or\n# distribution of this software and related documentation without an express\n# license agreement from NVIDIA CORPORATION is strictly prohibited.\n\n#!/usr/bin/env python2\nimport os\n# import yaml\nimport numpy as np\n\n\ndef compute_statistics(data_vec):\n    stats = dict()\n    if len(data_vec) > 0:\n        stats['rmse'] = float(\n            np.sqrt(np.dot(data_vec, data_vec) / len(data_vec)))\n        stats['mean'] = float(np.mean(data_vec))\n        stats['median'] = float(np.median(data_vec))\n        stats['std'] = float(np.std(data_vec))\n        stats['min'] = float(np.min(data_vec))\n        stats['max'] = float(np.max(data_vec))\n        stats['num_samples'] = int(len(data_vec))\n    else:\n        stats['rmse'] = 0\n        stats['mean'] = 0\n        stats['median'] = 0\n        stats['std'] = 0\n        stats['min'] = 0\n        stats['max'] = 0\n        stats['num_samples'] = 0\n\n    return stats\n\n\n# def update_and_save_stats(new_stats, label, yaml_filename):\n#     stats = dict()\n#     if os.path.exists(yaml_filename):\n#         stats = yaml.load(open(yaml_filename, 'r'), Loader=yaml.FullLoader)\n#     stats[label] = new_stats\n#\n#     with open(yaml_filename, 'w') as outfile:\n#         outfile.write(yaml.dump(stats, default_flow_style=False))\n#\n#     return\n#\n#\n# def compute_and_save_statistics(data_vec, label, yaml_filename):\n#     new_stats = compute_statistics(data_vec)\n#     update_and_save_stats(new_stats, label, yaml_filename)\n#\n#     return new_stats\n#\n#\n# def write_tex_table(list_values, rows, cols, outfn):\n#     '''\n#     write list_values[row_idx][col_idx] to a table that is ready to be pasted\n#     into latex source\n#\n#     list_values is a list of row values\n#\n#     The value should be string of desired format\n#     '''\n#\n#     assert len(rows) >= 1\n#     assert len(cols) >= 1\n#\n#     with open(outfn, 'w') as f:\n#         # write header\n#         f.write('      &      ')\n#         for col_i in cols[:-1]:\n#             f.write(col_i + ' & ')\n#         f.write(' ' + cols[-1]+'\\n')\n#\n#         # write each row\n#         for row_idx, row_i in enumerate(list_values):\n#             f.write(rows[row_idx] + ' &     ')\n#             row_values = list_values[row_idx]\n#             for col_idx in range(len(row_values) - 1):\n#                 f.write(row_values[col_idx] + ' & ')\n#             f.write(' ' + row_values[-1]+' \\n')\n"
  },
  {
    "path": "utils/utils_poses/ATE/trajectory_utils.py",
    "content": "# Copyright (c) 2024, NVIDIA CORPORATION.  All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intellectual property\n# and proprietary rights in and to this software, related documentation\n# and any modifications thereto.  Any use, reproduction, disclosure or\n# distribution of this software and related documentation without an express\n# license agreement from NVIDIA CORPORATION is strictly prohibited.\n\n#!/usr/bin/env python2\n\"\"\"\n@author: Christian Forster\n\"\"\"\n\nimport os\nimport numpy as np\nimport utils.utils_poses.ATE.transformations as tf\n\n\ndef get_rigid_body_trafo(quat, trans):\n    T = tf.quaternion_matrix(quat)\n    T[0:3, 3] = trans\n    return T\n\n\ndef get_distance_from_start(gt_translation):\n    distances = np.diff(gt_translation[:, 0:3], axis=0)\n    distances = np.sqrt(np.sum(np.multiply(distances, distances), 1))\n    distances = np.cumsum(distances)\n    distances = np.concatenate(([0], distances))\n    return distances\n\n\ndef compute_comparison_indices_length(distances, dist, max_dist_diff):\n    max_idx = len(distances)\n    comparisons = []\n    for idx, d in enumerate(distances):\n        best_idx = -1\n        error = max_dist_diff\n        for i in range(idx, max_idx):\n            if np.abs(distances[i]-(d+dist)) < error:\n                best_idx = i\n                error = np.abs(distances[i] - (d+dist))\n        if best_idx != -1:\n            comparisons.append(best_idx)\n    return comparisons\n\n\ndef compute_angle(transform):\n    \"\"\"\n    Compute the rotation angle from a 4x4 homogeneous matrix.\n    \"\"\"\n    # an invitation to 3-d vision, p 27\n    return np.arccos(\n        min(1, max(-1, (np.trace(transform[0:3, 0:3]) - 1)/2)))*180.0/np.pi\n"
  },
  {
    "path": "utils/utils_poses/ATE/transformations.py",
    "content": "# -*- coding: utf-8 -*-\n# transformations.py\n\n# Copyright (c) 2006, Christoph Gohlke\n# Copyright (c) 2006-2009, The Regents of the University of California\n# All rights reserved.\n#\n# Redistribution and use in source and binary forms, with or without\n# modification, are permitted provided that the following conditions are met:\n#\n# * Redistributions of source code must retain the above copyright\n#   notice, this list of conditions and the following disclaimer.\n# * Redistributions in binary form must reproduce the above copyright\n#   notice, this list of conditions and the following disclaimer in the\n#   documentation and/or other materials provided with the distribution.\n# * Neither the name of the copyright holders nor the names of any\n#   contributors may be used to endorse or promote products derived\n#   from this software without specific prior written permission.\n#\n# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n# ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n# POSSIBILITY OF SUCH DAMAGE.\n\n\"\"\"Homogeneous Transformation Matrices and Quaternions.\n\nA library for calculating 4x4 matrices for translating, rotating, reflecting,\nscaling, shearing, projecting, orthogonalizing, and superimposing arrays of\n3D homogeneous coordinates as well as for converting between rotation matrices,\nEuler angles, and quaternions. Also includes an Arcball control object and\nfunctions to decompose transformation matrices.\n\n:Authors:\n  `Christoph Gohlke <http://www.lfd.uci.edu/~gohlke/>`__,\n  Laboratory for Fluorescence Dynamics, University of California, Irvine\n\n:Version: 20090418\n\nRequirements\n------------\n\n* `Python 2.6 <http://www.python.org>`__\n* `Numpy 1.3 <http://numpy.scipy.org>`__\n* `transformations.c 20090418 <http://www.lfd.uci.edu/~gohlke/>`__\n  (optional implementation of some functions in C)\n\nNotes\n-----\n\nMatrices (M) can be inverted using numpy.linalg.inv(M), concatenated using\nnumpy.dot(M0, M1), or used to transform homogeneous coordinates (v) using\nnumpy.dot(M, v) for shape (4, \\*) \"point of arrays\", respectively\nnumpy.dot(v, M.T) for shape (\\*, 4) \"array of points\".\n\nCalculations are carried out with numpy.float64 precision.\n\nThis Python implementation is not optimized for speed.\n\nVector, point, quaternion, and matrix function arguments are expected to be\n\"array like\", i.e. tuple, list, or numpy arrays.\n\nReturn types are numpy arrays unless specified otherwise.\n\nAngles are in radians unless specified otherwise.\n\nQuaternions ix+jy+kz+w are represented as [x, y, z, w].\n\nUse the transpose of transformation matrices for OpenGL glMultMatrixd().\n\nA triple of Euler angles can be applied/interpreted in 24 ways, which can\nbe specified using a 4 character string or encoded 4-tuple:\n\n  *Axes 4-string*: e.g. 'sxyz' or 'ryxy'\n\n  - first character : rotations are applied to 's'tatic or 'r'otating frame\n  - remaining characters : successive rotation axis 'x', 'y', or 'z'\n\n  *Axes 4-tuple*: e.g. (0, 0, 0, 0) or (1, 1, 1, 1)\n\n  - inner axis: code of axis ('x':0, 'y':1, 'z':2) of rightmost matrix.\n  - parity : even (0) if inner axis 'x' is followed by 'y', 'y' is followed\n    by 'z', or 'z' is followed by 'x'. Otherwise odd (1).\n  - repetition : first and last axis are same (1) or different (0).\n  - frame : rotations are applied to static (0) or rotating (1) frame.\n\nReferences\n----------\n\n(1)  Matrices and transformations. Ronald Goldman.\n     In \"Graphics Gems I\", pp 472-475. Morgan Kaufmann, 1990.\n(2)  More matrices and transformations: shear and pseudo-perspective.\n     Ronald Goldman. In \"Graphics Gems II\", pp 320-323. Morgan Kaufmann, 1991.\n(3)  Decomposing a matrix into simple transformations. Spencer Thomas.\n     In \"Graphics Gems II\", pp 320-323. Morgan Kaufmann, 1991.\n(4)  Recovering the data from the transformation matrix. Ronald Goldman.\n     In \"Graphics Gems II\", pp 324-331. Morgan Kaufmann, 1991.\n(5)  Euler angle conversion. Ken Shoemake.\n     In \"Graphics Gems IV\", pp 222-229. Morgan Kaufmann, 1994.\n(6)  Arcball rotation control. Ken Shoemake.\n     In \"Graphics Gems IV\", pp 175-192. Morgan Kaufmann, 1994.\n(7)  Representing attitude: Euler angles, unit quaternions, and rotation\n     vectors. James Diebel. 2006.\n(8)  A discussion of the solution for the best rotation to relate two sets\n     of vectors. W Kabsch. Acta Cryst. 1978. A34, 827-828.\n(9)  Closed-form solution of absolute orientation using unit quaternions.\n     BKP Horn. J Opt Soc Am A. 1987. 4(4), 629-642.\n(10) Quaternions. Ken Shoemake.\n     http://www.sfu.ca/~jwa3/cmpt461/files/quatut.pdf\n(11) From quaternion to matrix and back. JMP van Waveren. 2005.\n     http://www.intel.com/cd/ids/developer/asmo-na/eng/293748.htm\n(12) Uniform random rotations. Ken Shoemake.\n     In \"Graphics Gems III\", pp 124-132. Morgan Kaufmann, 1992.\n\n\nExamples\n--------\n\n>>> alpha, beta, gamma = 0.123, -1.234, 2.345\n>>> origin, xaxis, yaxis, zaxis = (0, 0, 0), (1, 0, 0), (0, 1, 0), (0, 0, 1)\n>>> I = identity_matrix()\n>>> Rx = rotation_matrix(alpha, xaxis)\n>>> Ry = rotation_matrix(beta, yaxis)\n>>> Rz = rotation_matrix(gamma, zaxis)\n>>> R = concatenate_matrices(Rx, Ry, Rz)\n>>> euler = euler_from_matrix(R, 'rxyz')\n>>> numpy.allclose([alpha, beta, gamma], euler)\nTrue\n>>> Re = euler_matrix(alpha, beta, gamma, 'rxyz')\n>>> is_same_transform(R, Re)\nTrue\n>>> al, be, ga = euler_from_matrix(Re, 'rxyz')\n>>> is_same_transform(Re, euler_matrix(al, be, ga, 'rxyz'))\nTrue\n>>> qx = quaternion_about_axis(alpha, xaxis)\n>>> qy = quaternion_about_axis(beta, yaxis)\n>>> qz = quaternion_about_axis(gamma, zaxis)\n>>> q = quaternion_multiply(qx, qy)\n>>> q = quaternion_multiply(q, qz)\n>>> Rq = quaternion_matrix(q)\n>>> is_same_transform(R, Rq)\nTrue\n>>> S = scale_matrix(1.23, origin)\n>>> T = translation_matrix((1, 2, 3))\n>>> Z = shear_matrix(beta, xaxis, origin, zaxis)\n>>> R = random_rotation_matrix(numpy.random.rand(3))\n>>> M = concatenate_matrices(T, R, Z, S)\n>>> scale, shear, angles, trans, persp = decompose_matrix(M)\n>>> numpy.allclose(scale, 1.23)\nTrue\n>>> numpy.allclose(trans, (1, 2, 3))\nTrue\n>>> numpy.allclose(shear, (0, math.tan(beta), 0))\nTrue\n>>> is_same_transform(R, euler_matrix(axes='sxyz', *angles))\nTrue\n>>> M1 = compose_matrix(scale, shear, angles, trans, persp)\n>>> is_same_transform(M, M1)\nTrue\n\n\"\"\"\n\nfrom __future__ import division\n\nimport warnings\nimport math\n\nimport numpy\n\n# Documentation in HTML format can be generated with Epydoc\n__docformat__ = \"restructuredtext en\"\n\n\ndef skew(v):\n    \"\"\"Returns the skew-symmetric matrix of a vector\n    cfo, 2015/08/13\n\n    \"\"\"\n    return numpy.array([[0, -v[2], v[1]],\n                        [v[2], 0, -v[0]],\n                        [-v[1], v[0], 0]], dtype=numpy.float64)\n\n\ndef unskew(R):\n    \"\"\"Returns the coordinates of a skew-symmetric matrix\n    cfo, 2015/08/13\n\n    \"\"\"\n    return numpy.array([R[2, 1], R[0, 2], R[1, 0]], dtype=numpy.float64)\n\n\ndef first_order_rotation(rotvec):\n    \"\"\"First order approximation of a rotation: I + skew(rotvec)\n    cfo, 2015/08/13\n\n    \"\"\"\n    R = numpy.zeros((3, 3), dtype=numpy.float64)\n    R[0, 0] = 1.0\n    R[1, 0] = rotvec[2]\n    R[2, 0] = -rotvec[1]\n    R[0, 1] = -rotvec[2]\n    R[1, 1] = 1.0\n    R[2, 1] = rotvec[0]\n    R[0, 2] = rotvec[1]\n    R[1, 2] = -rotvec[0]\n    R[2, 2] = 1.0\n    return R\n\n\ndef axis_angle(axis, theta):\n    \"\"\"Compute a rotation matrix from an axis and an angle.\n    Returns 3x3 Matrix.\n    Is the same as transformations.rotation_matrix(theta, axis).\n    cfo, 2015/08/13\n\n    \"\"\"\n    if theta*theta > _EPS:\n        wx = axis[0]\n        wy = axis[1]\n        wz = axis[2]\n        costheta = numpy.cos(theta)\n        sintheta = numpy.sin(theta)\n        c_1 = 1.0 - costheta\n        wx_sintheta = wx * sintheta\n        wy_sintheta = wy * sintheta\n        wz_sintheta = wz * sintheta\n        C00 = c_1 * wx * wx\n        C01 = c_1 * wx * wy\n        C02 = c_1 * wx * wz\n        C11 = c_1 * wy * wy\n        C12 = c_1 * wy * wz\n        C22 = c_1 * wz * wz\n        R = numpy.zeros((3, 3), dtype=numpy.float64)\n        R[0, 0] = costheta + C00\n        R[1, 0] = wz_sintheta + C01\n        R[2, 0] = -wy_sintheta + C02\n        R[0, 1] = -wz_sintheta + C01\n        R[1, 1] = costheta + C11\n        R[2, 1] = wx_sintheta + C12\n        R[0, 2] = wy_sintheta + C02\n        R[1, 2] = -wx_sintheta + C12\n        R[2, 2] = costheta + C22\n        return R\n    else:\n        return first_order_rotation(axis*theta)\n\n\ndef expmap_so3(rotvec):\n    \"\"\"Exponential map at identity.\n    Create a rotation from canonical coordinates using Rodrigues' formula.\n    cfo, 2015/08/13\n\n    \"\"\"\n    theta = numpy.linalg.norm(rotvec)\n    axis = rotvec/theta\n    return axis_angle(axis, theta)\n\n\ndef logmap_so3(R):\n    \"\"\"Logmap at the identity.\n    Returns canonical coordinates of rotation.\n    cfo, 2015/08/13\n\n    \"\"\"\n    R11 = R[0, 0]\n    R12 = R[0, 1]\n    R13 = R[0, 2]\n    R21 = R[1, 0]\n    R22 = R[1, 1]\n    R23 = R[1, 2]\n    R31 = R[2, 0]\n    R32 = R[2, 1]\n    R33 = R[2, 2]\n    tr = numpy.trace(R)\n    omega = numpy.empty((3,), dtype=numpy.float64)\n\n    # when trace == -1, i.e., when theta = +-pi, +-3pi, +-5pi, we do something\n    # special\n    if(numpy.abs(tr + 1.0) < 1e-10):\n        if(numpy.abs(R33 + 1.0) > 1e-10):\n            omega = (numpy.pi / numpy.sqrt(2.0 + 2.0 * R33)) * \\\n                numpy.array([R13, R23, 1.0+R33])\n        elif(numpy.abs(R22 + 1.0) > 1e-10):\n            omega = (numpy.pi / numpy.sqrt(2.0 + 2.0 * R22)) * \\\n                numpy.array([R12, 1.0+R22, R32])\n        else:\n            omega = (numpy.pi / numpy.sqrt(2.0 + 2.0 * R11)) * \\\n                numpy.array([1.0+R11, R21, R31])\n    else:\n        magnitude = 1.0\n        tr_3 = tr - 3.0\n        if tr_3 < -1e-7:\n            theta = numpy.arccos((tr - 1.0) / 2.0)\n            magnitude = theta / (2.0 * numpy.sin(theta))\n        else:\n            # when theta near 0, +-2pi, +-4pi, etc. (trace near 3.0)\n            # use Taylor expansion: theta \\approx 1/2-(t-3)/12 + O((t-3)^2)\n            magnitude = 0.5 - tr_3 * tr_3 / 12.0\n\n        omega = magnitude * numpy.array([R32 - R23, R13 - R31, R21 - R12])\n\n    return omega\n\n\n\ndef right_jacobian_so3(rotvec):\n    \"\"\"Right Jacobian for Exponential map in SO(3)\n    Equation (10.86) and following equations in G.S. Chirikjian, \"Stochastic\n    Models, Information Theory, and Lie Groups\", Volume 2, 2008.\n\n    > expmap_so3(thetahat + omega) \\approx expmap_so3(thetahat) * expmap_so3(Jr * omega)\n    where Jr = right_jacobian_so3(thetahat);\n    This maps a perturbation in the tangent space (omega) to a perturbation\n    on the manifold (expmap_so3(Jr * omega))\n    cfo, 2015/08/13\n\n    \"\"\"\n\n    theta2 = numpy.dot(rotvec, rotvec)\n    if theta2 <= _EPS:\n        return numpy.identity(3, dtype=numpy.float64)\n    else:\n        theta = numpy.sqrt(theta2)\n        Y = skew(rotvec) / theta\n        I_3x3 = numpy.identity(3, dtype=numpy.float64)\n        J_r = I_3x3 - ((1.0 - numpy.cos(theta)) / theta) * Y + \\\n            (1.0 - numpy.sin(theta) / theta) * numpy.dot(Y, Y)\n        return J_r\n\n\ndef S_inv_eulerZYX_body(euler_coordinates):\n    \"\"\" Relates angular rates w to changes in eulerZYX coordinates.\n    dot(euler) = S^-1(euler_coordinates) * omega\n    Also called: rotation-rate matrix. (E in Lupton paper)\n    cfo, 2015/08/13\n\n    \"\"\"\n    y = euler_coordinates[1]\n    z = euler_coordinates[2]\n    E = numpy.zeros((3, 3))\n    E[0, 1] = numpy.sin(z)/numpy.cos(y)\n    E[0, 2] = numpy.cos(z)/numpy.cos(y)\n    E[1, 1] = numpy.cos(z)\n    E[1, 2] = -numpy.sin(z)\n    E[2, 0] = 1.0\n    E[2, 1] = numpy.sin(z)*numpy.sin(y)/numpy.cos(y)\n    E[2, 2] = numpy.cos(z)*numpy.sin(y)/numpy.cos(y)\n    return E\n\n\ndef S_inv_eulerZYX_body_deriv(euler_coordinates, omega):\n    \"\"\" Compute dE(euler_coordinates)*omega/deuler_coordinates\n        cfo, 2015/08/13 \n\n    \"\"\"\n\n    y = euler_coordinates[1]\n    z = euler_coordinates[2]\n\n    \"\"\"\n    w1 = omega[0]; w2 = omega[1]; w3 = omega[2]\n    J = numpy.zeros((3,3))\n    J[0,0] = 0\n    J[0,1] = math.tan(y) / math.cos(y) * (math.sin(z) * w2 + math.cos(z) * w3)\n    J[0,2] = w2/math.cos(y)*math.cos(z) - w3/math.cos(y)*math.sin(z)\n    J[1,0] = 0\n    J[1,1] = 0\n    J[1,2] = -w2*math.sin(z) - w3*math.cos(z)\n    J[2,0] = w1\n    J[2,1] = 1.0/math.cos(y)**2 * (w2 * math.sin(z) + w3 * math.cos(z))\n    J[2,2] = w2*math.tan(y)*math.cos(z) - w3*math.tan(y)*math.sin(z)\n   \n    \"\"\"\n\n    # second version, x = psi, y = theta, z = phi\n    # J_x = numpy.zeros((3,3))\n    J_y = numpy.zeros((3, 3))\n    J_z = numpy.zeros((3, 3))\n\n    # dE^-1/dtheta\n    J_y[0, 1] = math.tan(y)/math.cos(y)*math.sin(z)\n    J_y[0, 2] = math.tan(y)/math.cos(y)*math.cos(z)\n    J_y[2, 1] = math.sin(z)/(math.cos(y))**2\n    J_y[2, 2] = math.cos(z)/(math.cos(y))**2\n\n    # dE^-1/dphi\n    J_z[0, 1] = math.cos(z)/math.cos(y)\n    J_z[0, 2] = -math.sin(z)/math.cos(y)\n    J_z[1, 1] = -math.sin(z)\n    J_z[1, 2] = -math.cos(z)\n    J_z[2, 1] = math.cos(z)*math.tan(y)\n    J_z[2, 2] = -math.sin(z)*math.tan(y)\n\n    J = numpy.zeros((3, 3))\n    J[:, 1] = numpy.dot(J_y, omega)\n    J[:, 2] = numpy.dot(J_z, omega)\n\n    return J\n\n\ndef identity_matrix():\n    \"\"\"Return 4x4 identity/unit matrix.\n\n    >>> I = identity_matrix()\n    >>> numpy.allclose(I, numpy.dot(I, I))\n    True\n    >>> numpy.sum(I), numpy.trace(I)\n    (4.0, 4.0)\n    >>> numpy.allclose(I, numpy.identity(4, dtype=numpy.float64))\n    True\n\n    \"\"\"\n    return numpy.identity(4, dtype=numpy.float64)\n\n\ndef translation_matrix(direction):\n    \"\"\"Return matrix to translate by direction vector.\n\n    >>> v = numpy.random.random(3) - 0.5\n    >>> numpy.allclose(v, translation_matrix(v)[:3, 3])\n    True\n\n    \"\"\"\n    M = numpy.identity(4)\n    M[:3, 3] = direction[:3]\n    return M\n\n\ndef translation_from_matrix(matrix):\n    \"\"\"Return translation vector from translation matrix.\n\n    >>> v0 = numpy.random.random(3) - 0.5\n    >>> v1 = translation_from_matrix(translation_matrix(v0))\n    >>> numpy.allclose(v0, v1)\n    True\n\n    \"\"\"\n    return numpy.array(matrix, copy=False)[:3, 3].copy()\n\n\ndef convert_3x3_to_4x4(matrix_3x3):\n    M = numpy.identity(4)\n    M[:3, :3] = matrix_3x3\n    return M\n\n\ndef reflection_matrix(point, normal):\n    \"\"\"Return matrix to mirror at plane defined by point and normal vector.\n\n    >>> v0 = numpy.random.random(4) - 0.5\n    >>> v0[3] = 1.0\n    >>> v1 = numpy.random.random(3) - 0.5\n    >>> R = reflection_matrix(v0, v1)\n    >>> numpy.allclose(2., numpy.trace(R))\n    True\n    >>> numpy.allclose(v0, numpy.dot(R, v0))\n    True\n    >>> v2 = v0.copy()\n    >>> v2[:3] += v1\n    >>> v3 = v0.copy()\n    >>> v2[:3] -= v1\n    >>> numpy.allclose(v2, numpy.dot(R, v3))\n    True\n\n    \"\"\"\n    normal = unit_vector(normal[:3])\n    M = numpy.identity(4)\n    M[:3, :3] -= 2.0 * numpy.outer(normal, normal)\n    M[:3, 3] = (2.0 * numpy.dot(point[:3], normal)) * normal\n    return M\n\n\ndef reflection_from_matrix(matrix):\n    \"\"\"Return mirror plane point and normal vector from reflection matrix.\n\n    >>> v0 = numpy.random.random(3) - 0.5\n    >>> v1 = numpy.random.random(3) - 0.5\n    >>> M0 = reflection_matrix(v0, v1)\n    >>> point, normal = reflection_from_matrix(M0)\n    >>> M1 = reflection_matrix(point, normal)\n    >>> is_same_transform(M0, M1)\n    True\n\n    \"\"\"\n    M = numpy.array(matrix, dtype=numpy.float64, copy=False)\n    # normal: unit eigenvector corresponding to eigenvalue -1\n    l, V = numpy.linalg.eig(M[:3, :3])\n    i = numpy.where(abs(numpy.real(l) + 1.0) < 1e-8)[0]\n    if not len(i):\n        raise ValueError(\"no unit eigenvector corresponding to eigenvalue -1\")\n    normal = numpy.real(V[:, i[0]]).squeeze()\n    # point: any unit eigenvector corresponding to eigenvalue 1\n    l, V = numpy.linalg.eig(M)\n    i = numpy.where(abs(numpy.real(l) - 1.0) < 1e-8)[0]\n    if not len(i):\n        raise ValueError(\"no unit eigenvector corresponding to eigenvalue 1\")\n    point = numpy.real(V[:, i[-1]]).squeeze()\n    point /= point[3]\n    return point, normal\n\n\ndef rotation_matrix(angle, direction, point=None):\n    \"\"\"Return matrix to rotate about axis defined by point and direction.\n\n    >>> angle = (random.random() - 0.5) * (2*math.pi)\n    >>> direc = numpy.random.random(3) - 0.5\n    >>> point = numpy.random.random(3) - 0.5\n    >>> R0 = rotation_matrix(angle, direc, point)\n    >>> R1 = rotation_matrix(angle-2*math.pi, direc, point)\n    >>> is_same_transform(R0, R1)\n    True\n    >>> R0 = rotation_matrix(angle, direc, point)\n    >>> R1 = rotation_matrix(-angle, -direc, point)\n    >>> is_same_transform(R0, R1)\n    True\n    >>> I = numpy.identity(4, numpy.float64)\n    >>> numpy.allclose(I, rotation_matrix(math.pi*2, direc))\n    True\n    >>> numpy.allclose(2., numpy.trace(rotation_matrix(math.pi/2,\n    ...                                                direc, point)))\n    True\n\n    \"\"\"\n    sina = math.sin(angle)\n    cosa = math.cos(angle)\n    direction = unit_vector(direction[:3])\n    # rotation matrix around unit vector\n    R = numpy.array(((cosa, 0.0,  0.0),\n                     (0.0,  cosa, 0.0),\n                     (0.0,  0.0,  cosa)), dtype=numpy.float64)\n    R += numpy.outer(direction, direction) * (1.0 - cosa)\n    direction *= sina\n    R += numpy.array(((0.0,         -direction[2],  direction[1]),\n                      (direction[2], 0.0,          -direction[0]),\n                      (-direction[1], direction[0],  0.0)),\n                     dtype=numpy.float64)\n    M = numpy.identity(4)\n    M[:3, :3] = R\n    if point is not None:\n        # rotation not around origin\n        point = numpy.array(point[:3], dtype=numpy.float64, copy=False)\n        M[:3, 3] = point - numpy.dot(R, point)\n    return M\n\n\ndef rotation_from_matrix(matrix):\n    \"\"\"Return rotation angle and axis from rotation matrix.\n\n    >>> angle = (random.random() - 0.5) * (2*math.pi)\n    >>> direc = numpy.random.random(3) - 0.5\n    >>> point = numpy.random.random(3) - 0.5\n    >>> R0 = rotation_matrix(angle, direc, point)\n    >>> angle, direc, point = rotation_from_matrix(R0)\n    >>> R1 = rotation_matrix(angle, direc, point)\n    >>> is_same_transform(R0, R1)\n    True\n\n    \"\"\"\n    R = numpy.array(matrix, dtype=numpy.float64, copy=False)\n    R33 = R[:3, :3]\n    # direction: unit eigenvector of R33 corresponding to eigenvalue of 1\n    l, W = numpy.linalg.eig(R33.T)\n    i = numpy.where(abs(numpy.real(l) - 1.0) < 1e-8)[0]\n    if not len(i):\n        raise ValueError(\"no unit eigenvector corresponding to eigenvalue 1\")\n    direction = numpy.real(W[:, i[-1]]).squeeze()\n    # point: unit eigenvector of R33 corresponding to eigenvalue of 1\n    l, Q = numpy.linalg.eig(R)\n    i = numpy.where(abs(numpy.real(l) - 1.0) < 1e-8)[0]\n    if not len(i):\n        raise ValueError(\"no unit eigenvector corresponding to eigenvalue 1\")\n    point = numpy.real(Q[:, i[-1]]).squeeze()\n    point /= point[3]\n    # rotation angle depending on direction\n    cosa = (numpy.trace(R33) - 1.0) / 2.0\n    if abs(direction[2]) > 1e-8:\n        sina = (R[1, 0] + (cosa-1.0)*direction[0]*direction[1]) / direction[2]\n    elif abs(direction[1]) > 1e-8:\n        sina = (R[0, 2] + (cosa-1.0)*direction[0]*direction[2]) / direction[1]\n    else:\n        sina = (R[2, 1] + (cosa-1.0)*direction[1]*direction[2]) / direction[0]\n    angle = math.atan2(sina, cosa)\n    return angle, direction, point\n\n\ndef scale_matrix(factor, origin=None, direction=None):\n    \"\"\"Return matrix to scale by factor around origin in direction.\n\n    Use factor -1 for point symmetry.\n\n    >>> v = (numpy.random.rand(4, 5) - 0.5) * 20.0\n    >>> v[3] = 1.0\n    >>> S = scale_matrix(-1.234)\n    >>> numpy.allclose(numpy.dot(S, v)[:3], -1.234*v[:3])\n    True\n    >>> factor = random.random() * 10 - 5\n    >>> origin = numpy.random.random(3) - 0.5\n    >>> direct = numpy.random.random(3) - 0.5\n    >>> S = scale_matrix(factor, origin)\n    >>> S = scale_matrix(factor, origin, direct)\n\n    \"\"\"\n    if direction is None:\n        # uniform scaling\n        M = numpy.array(((factor, 0.0,    0.0,    0.0),\n                         (0.0,    factor, 0.0,    0.0),\n                         (0.0,    0.0,    factor, 0.0),\n                         (0.0,    0.0,    0.0,    1.0)), dtype=numpy.float64)\n        if origin is not None:\n            M[:3, 3] = origin[:3]\n            M[:3, 3] *= 1.0 - factor\n    else:\n        # nonuniform scaling\n        direction = unit_vector(direction[:3])\n        factor = 1.0 - factor\n        M = numpy.identity(4)\n        M[:3, :3] -= factor * numpy.outer(direction, direction)\n        if origin is not None:\n            M[:3, 3] = (factor * numpy.dot(origin[:3], direction)) * direction\n    return M\n\n\ndef scale_from_matrix(matrix):\n    \"\"\"Return scaling factor, origin and direction from scaling matrix.\n\n    >>> factor = random.random() * 10 - 5\n    >>> origin = numpy.random.random(3) - 0.5\n    >>> direct = numpy.random.random(3) - 0.5\n    >>> S0 = scale_matrix(factor, origin)\n    >>> factor, origin, direction = scale_from_matrix(S0)\n    >>> S1 = scale_matrix(factor, origin, direction)\n    >>> is_same_transform(S0, S1)\n    True\n    >>> S0 = scale_matrix(factor, origin, direct)\n    >>> factor, origin, direction = scale_from_matrix(S0)\n    >>> S1 = scale_matrix(factor, origin, direction)\n    >>> is_same_transform(S0, S1)\n    True\n\n    \"\"\"\n    M = numpy.array(matrix, dtype=numpy.float64, copy=False)\n    M33 = M[:3, :3]\n    factor = numpy.trace(M33) - 2.0\n    try:\n        # direction: unit eigenvector corresponding to eigenvalue factor\n        l, V = numpy.linalg.eig(M33)\n        i = numpy.where(abs(numpy.real(l) - factor) < 1e-8)[0][0]\n        direction = numpy.real(V[:, i]).squeeze()\n        direction /= vector_norm(direction)\n    except IndexError:\n        # uniform scaling\n        factor = (factor + 2.0) / 3.0\n        direction = None\n    # origin: any eigenvector corresponding to eigenvalue 1\n    l, V = numpy.linalg.eig(M)\n    i = numpy.where(abs(numpy.real(l) - 1.0) < 1e-8)[0]\n    if not len(i):\n        raise ValueError(\"no eigenvector corresponding to eigenvalue 1\")\n    origin = numpy.real(V[:, i[-1]]).squeeze()\n    origin /= origin[3]\n    return factor, origin, direction\n\n\ndef projection_matrix(point, normal, direction=None,\n                      perspective=None, pseudo=False):\n    \"\"\"Return matrix to project onto plane defined by point and normal.\n\n    Using either perspective point, projection direction, or none of both.\n\n    If pseudo is True, perspective projections will preserve relative depth\n    such that Perspective = dot(Orthogonal, PseudoPerspective).\n\n    >>> P = projection_matrix((0, 0, 0), (1, 0, 0))\n    >>> numpy.allclose(P[1:, 1:], numpy.identity(4)[1:, 1:])\n    True\n    >>> point = numpy.random.random(3) - 0.5\n    >>> normal = numpy.random.random(3) - 0.5\n    >>> direct = numpy.random.random(3) - 0.5\n    >>> persp = numpy.random.random(3) - 0.5\n    >>> P0 = projection_matrix(point, normal)\n    >>> P1 = projection_matrix(point, normal, direction=direct)\n    >>> P2 = projection_matrix(point, normal, perspective=persp)\n    >>> P3 = projection_matrix(point, normal, perspective=persp, pseudo=True)\n    >>> is_same_transform(P2, numpy.dot(P0, P3))\n    True\n    >>> P = projection_matrix((3, 0, 0), (1, 1, 0), (1, 0, 0))\n    >>> v0 = (numpy.random.rand(4, 5) - 0.5) * 20.0\n    >>> v0[3] = 1.0\n    >>> v1 = numpy.dot(P, v0)\n    >>> numpy.allclose(v1[1], v0[1])\n    True\n    >>> numpy.allclose(v1[0], 3.0-v1[1])\n    True\n\n    \"\"\"\n    M = numpy.identity(4)\n    point = numpy.array(point[:3], dtype=numpy.float64, copy=False)\n    normal = unit_vector(normal[:3])\n    if perspective is not None:\n        # perspective projection\n        perspective = numpy.array(perspective[:3], dtype=numpy.float64,\n                                  copy=False)\n        M[0, 0] = M[1, 1] = M[2, 2] = numpy.dot(perspective-point, normal)\n        M[:3, :3] -= numpy.outer(perspective, normal)\n        if pseudo:\n            # preserve relative depth\n            M[:3, :3] -= numpy.outer(normal, normal)\n            M[:3, 3] = numpy.dot(point, normal) * (perspective+normal)\n        else:\n            M[:3, 3] = numpy.dot(point, normal) * perspective\n        M[3, :3] = -normal\n        M[3, 3] = numpy.dot(perspective, normal)\n    elif direction is not None:\n        # parallel projection\n        direction = numpy.array(direction[:3], dtype=numpy.float64, copy=False)\n        scale = numpy.dot(direction, normal)\n        M[:3, :3] -= numpy.outer(direction, normal) / scale\n        M[:3, 3] = direction * (numpy.dot(point, normal) / scale)\n    else:\n        # orthogonal projection\n        M[:3, :3] -= numpy.outer(normal, normal)\n        M[:3, 3] = numpy.dot(point, normal) * normal\n    return M\n\n\ndef projection_from_matrix(matrix, pseudo=False):\n    \"\"\"Return projection plane and perspective point from projection matrix.\n\n    Return values are same as arguments for projection_matrix function:\n    point, normal, direction, perspective, and pseudo.\n\n    >>> point = numpy.random.random(3) - 0.5\n    >>> normal = numpy.random.random(3) - 0.5\n    >>> direct = numpy.random.random(3) - 0.5\n    >>> persp = numpy.random.random(3) - 0.5\n    >>> P0 = projection_matrix(point, normal)\n    >>> result = projection_from_matrix(P0)\n    >>> P1 = projection_matrix(*result)\n    >>> is_same_transform(P0, P1)\n    True\n    >>> P0 = projection_matrix(point, normal, direct)\n    >>> result = projection_from_matrix(P0)\n    >>> P1 = projection_matrix(*result)\n    >>> is_same_transform(P0, P1)\n    True\n    >>> P0 = projection_matrix(point, normal, perspective=persp, pseudo=False)\n    >>> result = projection_from_matrix(P0, pseudo=False)\n    >>> P1 = projection_matrix(*result)\n    >>> is_same_transform(P0, P1)\n    True\n    >>> P0 = projection_matrix(point, normal, perspective=persp, pseudo=True)\n    >>> result = projection_from_matrix(P0, pseudo=True)\n    >>> P1 = projection_matrix(*result)\n    >>> is_same_transform(P0, P1)\n    True\n\n    \"\"\"\n    M = numpy.array(matrix, dtype=numpy.float64, copy=False)\n    M33 = M[:3, :3]\n    l, V = numpy.linalg.eig(M)\n    i = numpy.where(abs(numpy.real(l) - 1.0) < 1e-8)[0]\n    if not pseudo and len(i):\n        # point: any eigenvector corresponding to eigenvalue 1\n        point = numpy.real(V[:, i[-1]]).squeeze()\n        point /= point[3]\n        # direction: unit eigenvector corresponding to eigenvalue 0\n        l, V = numpy.linalg.eig(M33)\n        i = numpy.where(abs(numpy.real(l)) < 1e-8)[0]\n        if not len(i):\n            raise ValueError(\"no eigenvector corresponding to eigenvalue 0\")\n        direction = numpy.real(V[:, i[0]]).squeeze()\n        direction /= vector_norm(direction)\n        # normal: unit eigenvector of M33.T corresponding to eigenvalue 0\n        l, V = numpy.linalg.eig(M33.T)\n        i = numpy.where(abs(numpy.real(l)) < 1e-8)[0]\n        if len(i):\n            # parallel projection\n            normal = numpy.real(V[:, i[0]]).squeeze()\n            normal /= vector_norm(normal)\n            return point, normal, direction, None, False\n        else:\n            # orthogonal projection, where normal equals direction vector\n            return point, direction, None, None, False\n    else:\n        # perspective projection\n        i = numpy.where(abs(numpy.real(l)) > 1e-8)[0]\n        if not len(i):\n            raise ValueError(\n                \"no eigenvector not corresponding to eigenvalue 0\")\n        point = numpy.real(V[:, i[-1]]).squeeze()\n        point /= point[3]\n        normal = - M[3, :3]\n        perspective = M[:3, 3] / numpy.dot(point[:3], normal)\n        if pseudo:\n            perspective -= normal\n        return point, normal, None, perspective, pseudo\n\n\ndef clip_matrix(left, right, bottom, top, near, far, perspective=False):\n    \"\"\"Return matrix to obtain normalized device coordinates from frustrum.\n\n    The frustrum bounds are axis-aligned along x (left, right),\n    y (bottom, top) and z (near, far).\n\n    Normalized device coordinates are in range [-1, 1] if coordinates are\n    inside the frustrum.\n\n    If perspective is True the frustrum is a truncated pyramid with the\n    perspective point at origin and direction along z axis, otherwise an\n    orthographic canonical view volume (a box).\n\n    Homogeneous coordinates transformed by the perspective clip matrix\n    need to be dehomogenized (devided by w coordinate).\n\n    >>> frustrum = numpy.random.rand(6)\n    >>> frustrum[1] += frustrum[0]\n    >>> frustrum[3] += frustrum[2]\n    >>> frustrum[5] += frustrum[4]\n    >>> M = clip_matrix(*frustrum, perspective=False)\n    >>> numpy.dot(M, [frustrum[0], frustrum[2], frustrum[4], 1.0])\n    array([-1., -1., -1.,  1.])\n    >>> numpy.dot(M, [frustrum[1], frustrum[3], frustrum[5], 1.0])\n    array([ 1.,  1.,  1.,  1.])\n    >>> M = clip_matrix(*frustrum, perspective=True)\n    >>> v = numpy.dot(M, [frustrum[0], frustrum[2], frustrum[4], 1.0])\n    >>> v / v[3]\n    array([-1., -1., -1.,  1.])\n    >>> v = numpy.dot(M, [frustrum[1], frustrum[3], frustrum[4], 1.0])\n    >>> v / v[3]\n    array([ 1.,  1., -1.,  1.])\n\n    \"\"\"\n    if left >= right or bottom >= top or near >= far:\n        raise ValueError(\"invalid frustrum\")\n    if perspective:\n        if near <= _EPS:\n            raise ValueError(\"invalid frustrum: near <= 0\")\n        t = 2.0 * near\n        M = ((-t/(right-left), 0.0, (right+left)/(right-left), 0.0),\n             (0.0, -t/(top-bottom), (top+bottom)/(top-bottom), 0.0),\n             (0.0, 0.0, -(far+near)/(far-near), t*far/(far-near)),\n             (0.0, 0.0, -1.0, 0.0))\n    else:\n        M = ((2.0/(right-left), 0.0, 0.0, (right+left)/(left-right)),\n             (0.0, 2.0/(top-bottom), 0.0, (top+bottom)/(bottom-top)),\n             (0.0, 0.0, 2.0/(far-near), (far+near)/(near-far)),\n             (0.0, 0.0, 0.0, 1.0))\n    return numpy.array(M, dtype=numpy.float64)\n\n\ndef shear_matrix(angle, direction, point, normal):\n    \"\"\"Return matrix to shear by angle along direction vector on shear plane.\n\n    The shear plane is defined by a point and normal vector. The direction\n    vector must be orthogonal to the plane's normal vector.\n\n    A point P is transformed by the shear matrix into P\" such that\n    the vector P-P\" is parallel to the direction vector and its extent is\n    given by the angle of P-P'-P\", where P' is the orthogonal projection\n    of P onto the shear plane.\n\n    >>> angle = (random.random() - 0.5) * 4*math.pi\n    >>> direct = numpy.random.random(3) - 0.5\n    >>> point = numpy.random.random(3) - 0.5\n    >>> normal = numpy.cross(direct, numpy.random.random(3))\n    >>> S = shear_matrix(angle, direct, point, normal)\n    >>> numpy.allclose(1.0, numpy.linalg.det(S))\n    True\n\n    \"\"\"\n    normal = unit_vector(normal[:3])\n    direction = unit_vector(direction[:3])\n    if abs(numpy.dot(normal, direction)) > 1e-6:\n        raise ValueError(\"direction and normal vectors are not orthogonal\")\n    angle = math.tan(angle)\n    M = numpy.identity(4)\n    M[:3, :3] += angle * numpy.outer(direction, normal)\n    M[:3, 3] = -angle * numpy.dot(point[:3], normal) * direction\n    return M\n\n\ndef shear_from_matrix(matrix):\n    \"\"\"Return shear angle, direction and plane from shear matrix.\n\n    >>> angle = (random.random() - 0.5) * 4*math.pi\n    >>> direct = numpy.random.random(3) - 0.5\n    >>> point = numpy.random.random(3) - 0.5\n    >>> normal = numpy.cross(direct, numpy.random.random(3))\n    >>> S0 = shear_matrix(angle, direct, point, normal)\n    >>> angle, direct, point, normal = shear_from_matrix(S0)\n    >>> S1 = shear_matrix(angle, direct, point, normal)\n    >>> is_same_transform(S0, S1)\n    True\n\n    \"\"\"\n    M = numpy.array(matrix, dtype=numpy.float64, copy=False)\n    M33 = M[:3, :3]\n    # normal: cross independent eigenvectors corresponding to the eigenvalue 1\n    l, V = numpy.linalg.eig(M33)\n    i = numpy.where(abs(numpy.real(l) - 1.0) < 1e-4)[0]\n    if len(i) < 2:\n        raise ValueError(\"No two linear independent eigenvectors found %s\" % l)\n    V = numpy.real(V[:, i]).squeeze().T\n    lenorm = -1.0\n    for i0, i1 in ((0, 1), (0, 2), (1, 2)):\n        n = numpy.cross(V[i0], V[i1])\n        l = vector_norm(n)\n        if l > lenorm:\n            lenorm = l\n            normal = n\n    normal /= lenorm\n    # direction and angle\n    direction = numpy.dot(M33 - numpy.identity(3), normal)\n    angle = vector_norm(direction)\n    direction /= angle\n    angle = math.atan(angle)\n    # point: eigenvector corresponding to eigenvalue 1\n    l, V = numpy.linalg.eig(M)\n    i = numpy.where(abs(numpy.real(l) - 1.0) < 1e-8)[0]\n    if not len(i):\n        raise ValueError(\"no eigenvector corresponding to eigenvalue 1\")\n    point = numpy.real(V[:, i[-1]]).squeeze()\n    point /= point[3]\n    return angle, direction, point, normal\n\n\ndef decompose_matrix(matrix):\n    \"\"\"Return sequence of transformations from transformation matrix.\n\n    matrix : array_like\n        Non-degenerative homogeneous transformation matrix\n\n    Return tuple of:\n        scale : vector of 3 scaling factors\n        shear : list of shear factors for x-y, x-z, y-z axes\n        angles : list of Euler angles about static x, y, z axes\n        translate : translation vector along x, y, z axes\n        perspective : perspective partition of matrix\n\n    Raise ValueError if matrix is of wrong type or degenerative.\n\n    >>> T0 = translation_matrix((1, 2, 3))\n    >>> scale, shear, angles, trans, persp = decompose_matrix(T0)\n    >>> T1 = translation_matrix(trans)\n    >>> numpy.allclose(T0, T1)\n    True\n    >>> S = scale_matrix(0.123)\n    >>> scale, shear, angles, trans, persp = decompose_matrix(S)\n    >>> scale[0]\n    0.123\n    >>> R0 = euler_matrix(1, 2, 3)\n    >>> scale, shear, angles, trans, persp = decompose_matrix(R0)\n    >>> R1 = euler_matrix(*angles)\n    >>> numpy.allclose(R0, R1)\n    True\n\n    \"\"\"\n    M = numpy.array(matrix, dtype=numpy.float64, copy=True).T\n    if abs(M[3, 3]) < _EPS:\n        raise ValueError(\"M[3, 3] is zero\")\n    M /= M[3, 3]\n    P = M.copy()\n    P[:, 3] = 0, 0, 0, 1\n    if not numpy.linalg.det(P):\n        raise ValueError(\"Matrix is singular\")\n\n    scale = numpy.zeros((3, ), dtype=numpy.float64)\n    shear = [0, 0, 0]\n    angles = [0, 0, 0]\n\n    if any(abs(M[:3, 3]) > _EPS):\n        perspective = numpy.dot(M[:, 3], numpy.linalg.inv(P.T))\n        M[:, 3] = 0, 0, 0, 1\n    else:\n        perspective = numpy.array((0, 0, 0, 1), dtype=numpy.float64)\n\n    translate = M[3, :3].copy()\n    M[3, :3] = 0\n\n    row = M[:3, :3].copy()\n    scale[0] = vector_norm(row[0])\n    row[0] /= scale[0]\n    shear[0] = numpy.dot(row[0], row[1])\n    row[1] -= row[0] * shear[0]\n    scale[1] = vector_norm(row[1])\n    row[1] /= scale[1]\n    shear[0] /= scale[1]\n    shear[1] = numpy.dot(row[0], row[2])\n    row[2] -= row[0] * shear[1]\n    shear[2] = numpy.dot(row[1], row[2])\n    row[2] -= row[1] * shear[2]\n    scale[2] = vector_norm(row[2])\n    row[2] /= scale[2]\n    shear[1:] /= scale[2]\n\n    if numpy.dot(row[0], numpy.cross(row[1], row[2])) < 0:\n        scale *= -1\n        row *= -1\n\n    angles[1] = math.asin(-row[0, 2])\n    if math.cos(angles[1]):\n        angles[0] = math.atan2(row[1, 2], row[2, 2])\n        angles[2] = math.atan2(row[0, 1], row[0, 0])\n    else:\n        #angles[0] = math.atan2(row[1, 0], row[1, 1])\n        angles[0] = math.atan2(-row[2, 1], row[1, 1])\n        angles[2] = 0.0\n\n    return scale, shear, angles, translate, perspective\n\n\ndef compose_matrix(scale=None, shear=None, angles=None, translate=None,\n                   perspective=None):\n    \"\"\"Return transformation matrix from sequence of transformations.\n\n    This is the inverse of the decompose_matrix function.\n\n    Sequence of transformations:\n        scale : vector of 3 scaling factors\n        shear : list of shear factors for x-y, x-z, y-z axes\n        angles : list of Euler angles about static x, y, z axes\n        translate : translation vector along x, y, z axes\n        perspective : perspective partition of matrix\n\n    >>> scale = numpy.random.random(3) - 0.5\n    >>> shear = numpy.random.random(3) - 0.5\n    >>> angles = (numpy.random.random(3) - 0.5) * (2*math.pi)\n    >>> trans = numpy.random.random(3) - 0.5\n    >>> persp = numpy.random.random(4) - 0.5\n    >>> M0 = compose_matrix(scale, shear, angles, trans, persp)\n    >>> result = decompose_matrix(M0)\n    >>> M1 = compose_matrix(*result)\n    >>> is_same_transform(M0, M1)\n    True\n\n    \"\"\"\n    M = numpy.identity(4)\n    if perspective is not None:\n        P = numpy.identity(4)\n        P[3, :] = perspective[:4]\n        M = numpy.dot(M, P)\n    if translate is not None:\n        T = numpy.identity(4)\n        T[:3, 3] = translate[:3]\n        M = numpy.dot(M, T)\n    if angles is not None:\n        R = euler_matrix(angles[0], angles[1], angles[2], 'sxyz')\n        M = numpy.dot(M, R)\n    if shear is not None:\n        Z = numpy.identity(4)\n        Z[1, 2] = shear[2]\n        Z[0, 2] = shear[1]\n        Z[0, 1] = shear[0]\n        M = numpy.dot(M, Z)\n    if scale is not None:\n        S = numpy.identity(4)\n        S[0, 0] = scale[0]\n        S[1, 1] = scale[1]\n        S[2, 2] = scale[2]\n        M = numpy.dot(M, S)\n    M /= M[3, 3]\n    return M\n\n\ndef orthogonalization_matrix(lengths, angles):\n    \"\"\"Return orthogonalization matrix for crystallographic cell coordinates.\n\n    Angles are expected in degrees.\n\n    The de-orthogonalization matrix is the inverse.\n\n    >>> O = orthogonalization_matrix((10., 10., 10.), (90., 90., 90.))\n    >>> numpy.allclose(O[:3, :3], numpy.identity(3, float) * 10)\n    True\n    >>> O = orthogonalization_matrix([9.8, 12.0, 15.5], [87.2, 80.7, 69.7])\n    >>> numpy.allclose(numpy.sum(O), 43.063229)\n    True\n\n    \"\"\"\n    a, b, c = lengths\n    angles = numpy.radians(angles)\n    sina, sinb, _ = numpy.sin(angles)\n    cosa, cosb, cosg = numpy.cos(angles)\n    co = (cosa * cosb - cosg) / (sina * sinb)\n    return numpy.array((\n        (a*sinb*math.sqrt(1.0-co*co),  0.0,    0.0, 0.0),\n        (-a*sinb*co,                    b*sina, 0.0, 0.0),\n        (a*cosb,                       b*cosa, c,   0.0),\n        (0.0,                          0.0,    0.0, 1.0)),\n        dtype=numpy.float64)\n\n\ndef superimposition_matrix(v0, v1, scaling=False, usesvd=True):\n    \"\"\"Return matrix to transform given vector set into second vector set.\n\n    v0 and v1 are shape (3, \\*) or (4, \\*) arrays of at least 3 vectors.\n\n    If usesvd is True, the weighted sum of squared deviations (RMSD) is\n    minimized according to the algorithm by W. Kabsch [8]. Otherwise the\n    quaternion based algorithm by B. Horn [9] is used (slower when using\n    this Python implementation).\n\n    The returned matrix performs rotation, translation and uniform scaling\n    (if specified).\n\n    >>> v0 = numpy.random.rand(3, 10)\n    >>> M = superimposition_matrix(v0, v0)\n    >>> numpy.allclose(M, numpy.identity(4))\n    True\n    >>> R = random_rotation_matrix(numpy.random.random(3))\n    >>> v0 = ((1,0,0), (0,1,0), (0,0,1), (1,1,1))\n    >>> v1 = numpy.dot(R, v0)\n    >>> M = superimposition_matrix(v0, v1)\n    >>> numpy.allclose(v1, numpy.dot(M, v0))\n    True\n    >>> v0 = (numpy.random.rand(4, 100) - 0.5) * 20.0\n    >>> v0[3] = 1.0\n    >>> v1 = numpy.dot(R, v0)\n    >>> M = superimposition_matrix(v0, v1)\n    >>> numpy.allclose(v1, numpy.dot(M, v0))\n    True\n    >>> S = scale_matrix(random.random())\n    >>> T = translation_matrix(numpy.random.random(3)-0.5)\n    >>> M = concatenate_matrices(T, R, S)\n    >>> v1 = numpy.dot(M, v0)\n    >>> v0[:3] += numpy.random.normal(0.0, 1e-9, 300).reshape(3, -1)\n    >>> M = superimposition_matrix(v0, v1, scaling=True)\n    >>> numpy.allclose(v1, numpy.dot(M, v0))\n    True\n    >>> M = superimposition_matrix(v0, v1, scaling=True, usesvd=False)\n    >>> numpy.allclose(v1, numpy.dot(M, v0))\n    True\n    >>> v = numpy.empty((4, 100, 3), dtype=numpy.float64)\n    >>> v[:, :, 0] = v0\n    >>> M = superimposition_matrix(v0, v1, scaling=True, usesvd=False)\n    >>> numpy.allclose(v1, numpy.dot(M, v[:, :, 0]))\n    True\n\n    \"\"\"\n    v0 = numpy.array(v0, dtype=numpy.float64, copy=False)[:3]\n    v1 = numpy.array(v1, dtype=numpy.float64, copy=False)[:3]\n\n    if v0.shape != v1.shape or v0.shape[1] < 3:\n        raise ValueError(\"Vector sets are of wrong shape or type.\")\n\n    # move centroids to origin\n    t0 = numpy.mean(v0, axis=1)\n    t1 = numpy.mean(v1, axis=1)\n    v0 = v0 - t0.reshape(3, 1)\n    v1 = v1 - t1.reshape(3, 1)\n\n    if usesvd:\n        # Singular Value Decomposition of covariance matrix\n        u, s, vh = numpy.linalg.svd(numpy.dot(v1, v0.T))\n        # rotation matrix from SVD orthonormal bases\n        R = numpy.dot(u, vh)\n        if numpy.linalg.det(R) < 0.0:\n            # R does not constitute right handed system\n            R -= numpy.outer(u[:, 2], vh[2, :]*2.0)\n            s[-1] *= -1.0\n        # homogeneous transformation matrix\n        M = numpy.identity(4)\n        M[:3, :3] = R\n    else:\n        # compute symmetric matrix N\n        xx, yy, zz = numpy.sum(v0 * v1, axis=1)\n        xy, yz, zx = numpy.sum(v0 * numpy.roll(v1, -1, axis=0), axis=1)\n        xz, yx, zy = numpy.sum(v0 * numpy.roll(v1, -2, axis=0), axis=1)\n        N = ((xx+yy+zz, yz-zy,    zx-xz,    xy-yx),\n             (yz-zy,    xx-yy-zz, xy+yx,    zx+xz),\n             (zx-xz,    xy+yx,   -xx+yy-zz, yz+zy),\n             (xy-yx,    zx+xz,    yz+zy,   -xx-yy+zz))\n        # quaternion: eigenvector corresponding to most positive eigenvalue\n        l, V = numpy.linalg.eig(N)\n        q = V[:, numpy.argmax(l)]\n        q /= vector_norm(q)  # unit quaternion\n        q = numpy.roll(q, -1)  # move w component to end\n        # homogeneous transformation matrix\n        M = quaternion_matrix(q)\n\n    # scale: ratio of rms deviations from centroid\n    if scaling:\n        v0 *= v0\n        v1 *= v1\n        M[:3, :3] *= math.sqrt(numpy.sum(v1) / numpy.sum(v0))\n\n    # translation\n    M[:3, 3] = t1\n    T = numpy.identity(4)\n    T[:3, 3] = -t0\n    M = numpy.dot(M, T)\n    return M\n\n\ndef euler_matrix(ai, aj, ak, axes='sxyz'):\n    \"\"\"Return homogeneous rotation matrix from Euler angles and axis sequence.\n\n    ai, aj, ak : Euler's roll, pitch and yaw angles\n    axes : One of 24 axis sequences as string or encoded tuple\n\n    >>> R = euler_matrix(1, 2, 3, 'syxz')\n    >>> numpy.allclose(numpy.sum(R[0]), -1.34786452)\n    True\n    >>> R = euler_matrix(1, 2, 3, (0, 1, 0, 1))\n    >>> numpy.allclose(numpy.sum(R[0]), -0.383436184)\n    True\n    >>> ai, aj, ak = (4.0*math.pi) * (numpy.random.random(3) - 0.5)\n    >>> for axes in _AXES2TUPLE.keys():\n    ...    R = euler_matrix(ai, aj, ak, axes)\n    >>> for axes in _TUPLE2AXES.keys():\n    ...    R = euler_matrix(ai, aj, ak, axes)\n\n    \"\"\"\n    try:\n        firstaxis, parity, repetition, frame = _AXES2TUPLE[axes]\n    except (AttributeError, KeyError):\n        _ = _TUPLE2AXES[axes]\n        firstaxis, parity, repetition, frame = axes\n\n    i = firstaxis\n    j = _NEXT_AXIS[i+parity]\n    k = _NEXT_AXIS[i-parity+1]\n\n    if frame:\n        ai, ak = ak, ai\n    if parity:\n        ai, aj, ak = -ai, -aj, -ak\n\n    si, sj, sk = math.sin(ai), math.sin(aj), math.sin(ak)\n    ci, cj, ck = math.cos(ai), math.cos(aj), math.cos(ak)\n    cc, cs = ci*ck, ci*sk\n    sc, ss = si*ck, si*sk\n\n    M = numpy.identity(4)\n    if repetition:\n        M[i, i] = cj\n        M[i, j] = sj*si\n        M[i, k] = sj*ci\n        M[j, i] = sj*sk\n        M[j, j] = -cj*ss+cc\n        M[j, k] = -cj*cs-sc\n        M[k, i] = -sj*ck\n        M[k, j] = cj*sc+cs\n        M[k, k] = cj*cc-ss\n    else:\n        M[i, i] = cj*ck\n        M[i, j] = sj*sc-cs\n        M[i, k] = sj*cc+ss\n        M[j, i] = cj*sk\n        M[j, j] = sj*ss+cc\n        M[j, k] = sj*cs-sc\n        M[k, i] = -sj\n        M[k, j] = cj*si\n        M[k, k] = cj*ci\n    return M\n\n\ndef euler_from_matrix(matrix, axes='sxyz'):\n    \"\"\"Return Euler angles from rotation matrix for specified axis sequence.\n\n    axes : One of 24 axis sequences as string or encoded tuple\n\n    Note that many Euler angle triplets can describe one matrix.\n\n    >>> R0 = euler_matrix(1, 2, 3, 'syxz')\n    >>> al, be, ga = euler_from_matrix(R0, 'syxz')\n    >>> R1 = euler_matrix(al, be, ga, 'syxz')\n    >>> numpy.allclose(R0, R1)\n    True\n    >>> angles = (4.0*math.pi) * (numpy.random.random(3) - 0.5)\n    >>> for axes in _AXES2TUPLE.keys():\n    ...    R0 = euler_matrix(axes=axes, *angles)\n    ...    R1 = euler_matrix(axes=axes, *euler_from_matrix(R0, axes))\n    ...    if not numpy.allclose(R0, R1): print axes, \"failed\"\n\n    \"\"\"\n    try:\n        firstaxis, parity, repetition, frame = _AXES2TUPLE[axes.lower()]\n    except (AttributeError, KeyError):\n        _ = _TUPLE2AXES[axes]\n        firstaxis, parity, repetition, frame = axes\n\n    i = firstaxis\n    j = _NEXT_AXIS[i+parity]\n    k = _NEXT_AXIS[i-parity+1]\n\n    M = numpy.array(matrix, dtype=numpy.float64, copy=False)[:3, :3]\n    if repetition:\n        sy = math.sqrt(M[i, j]*M[i, j] + M[i, k]*M[i, k])\n        if sy > _EPS:\n            ax = math.atan2(M[i, j],  M[i, k])\n            ay = math.atan2(sy,       M[i, i])\n            az = math.atan2(M[j, i], -M[k, i])\n        else:\n            ax = math.atan2(-M[j, k],  M[j, j])\n            ay = math.atan2(sy,       M[i, i])\n            az = 0.0\n    else:\n        cy = math.sqrt(M[i, i]*M[i, i] + M[j, i]*M[j, i])\n        if cy > _EPS:\n            ax = math.atan2(M[k, j],  M[k, k])\n            ay = math.atan2(-M[k, i],  cy)\n            az = math.atan2(M[j, i],  M[i, i])\n        else:\n            ax = math.atan2(-M[j, k],  M[j, j])\n            ay = math.atan2(-M[k, i],  cy)\n            az = 0.0\n\n    if parity:\n        ax, ay, az = -ax, -ay, -az\n    if frame:\n        ax, az = az, ax\n    return ax, ay, az\n\n\ndef euler_from_quaternion(quaternion, axes='sxyz'):\n    \"\"\"Return Euler angles from quaternion for specified axis sequence.\n\n    >>> angles = euler_from_quaternion([0.06146124, 0, 0, 0.99810947])\n    >>> numpy.allclose(angles, [0.123, 0, 0])\n    True\n\n    \"\"\"\n    return euler_from_matrix(quaternion_matrix(quaternion), axes)\n\n\ndef quaternion_from_euler(ai, aj, ak, axes='sxyz'):\n    \"\"\"Return quaternion from Euler angles and axis sequence.\n\n    ai, aj, ak : Euler's roll, pitch and yaw angles\n    axes : One of 24 axis sequences as string or encoded tuple\n\n    >>> q = quaternion_from_euler(1, 2, 3, 'ryxz')\n    >>> numpy.allclose(q, [0.310622, -0.718287, 0.444435, 0.435953])\n    True\n\n    \"\"\"\n    try:\n        firstaxis, parity, repetition, frame = _AXES2TUPLE[axes.lower()]\n    except (AttributeError, KeyError):\n        _ = _TUPLE2AXES[axes]\n        firstaxis, parity, repetition, frame = axes\n\n    i = firstaxis\n    j = _NEXT_AXIS[i+parity]\n    k = _NEXT_AXIS[i-parity+1]\n\n    if frame:\n        ai, ak = ak, ai\n    if parity:\n        aj = -aj\n\n    ai /= 2.0\n    aj /= 2.0\n    ak /= 2.0\n    ci = math.cos(ai)\n    si = math.sin(ai)\n    cj = math.cos(aj)\n    sj = math.sin(aj)\n    ck = math.cos(ak)\n    sk = math.sin(ak)\n    cc = ci*ck\n    cs = ci*sk\n    sc = si*ck\n    ss = si*sk\n\n    quaternion = numpy.empty((4, ), dtype=numpy.float64)\n    if repetition:\n        quaternion[i] = cj*(cs + sc)\n        quaternion[j] = sj*(cc + ss)\n        quaternion[k] = sj*(cs - sc)\n        quaternion[3] = cj*(cc - ss)\n    else:\n        quaternion[i] = cj*sc - sj*cs\n        quaternion[j] = cj*ss + sj*cc\n        quaternion[k] = cj*cs - sj*sc\n        quaternion[3] = cj*cc + sj*ss\n    if parity:\n        quaternion[j] *= -1\n\n    return quaternion\n\n\ndef quaternion_about_axis(angle, axis):\n    \"\"\"Return quaternion for rotation about axis.\n\n    >>> q = quaternion_about_axis(0.123, (1, 0, 0))\n    >>> numpy.allclose(q, [0.06146124, 0, 0, 0.99810947])\n    True\n\n    \"\"\"\n    quaternion = numpy.zeros((4, ), dtype=numpy.float64)\n    quaternion[:3] = axis[:3]\n    qlen = vector_norm(quaternion)\n    if qlen > _EPS:\n        quaternion *= math.sin(angle/2.0) / qlen\n    quaternion[3] = math.cos(angle/2.0)\n    return quaternion\n\n\ndef matrix_from_quaternion(quaternion):\n    return quaternion_matrix(quaternion)\n\n\ndef quaternion_matrix(quaternion):\n    \"\"\"Return homogeneous rotation matrix from quaternion.\n\n    >>> R = quaternion_matrix([0.06146124, 0, 0, 0.99810947])\n    >>> numpy.allclose(R, rotation_matrix(0.123, (1, 0, 0)))\n    True\n\n    \"\"\"\n    q = numpy.array(quaternion[:4], dtype=numpy.float64, copy=True)\n    nq = numpy.dot(q, q)\n    if nq < _EPS:\n        return numpy.identity(4)\n    q *= math.sqrt(2.0 / nq)\n    q = numpy.outer(q, q)\n    return numpy.array((\n        (1.0-q[1, 1]-q[2, 2],     q[0, 1]-q[2, 3],     q[0, 2]+q[1, 3], 0.0),\n        (q[0, 1]+q[2, 3], 1.0-q[0, 0]-q[2, 2],     q[1, 2]-q[0, 3], 0.0),\n        (q[0, 2]-q[1, 3],     q[1, 2]+q[0, 3], 1.0-q[0, 0]-q[1, 1], 0.0),\n        (0.0,                 0.0,                 0.0, 1.0)\n    ), dtype=numpy.float64)\n\n\ndef quaternionJPL_matrix(quaternion):\n    \"\"\"Return homogeneous rotation matrix from quaternion in JPL notation.\n       quaternion = [x y z w]\n    \"\"\"\n    q0 = quaternion[0]\n    q1 = quaternion[1]\n    q2 = quaternion[2]\n    q3 = quaternion[3]\n    return numpy.array([\n        [q0**2 - q1**2 - q2**2 + q3**2, 2.0*q0*q1 +\n            2.0*q2*q3, 2.0*q0*q2 - 2.0*q1*q3, 0],\n        [2.0*q0*q1 - 2.0*q2*q3, - q0**2 + q1**2 -\n            q2**2 + q3**2, 2.0*q0*q3 + 2.0*q1*q2, 0],\n        [2.0*q0*q2 + 2.0*q1*q3, 2.0*q1*q2 - 2.0*q0 *\n            q3, - q0**2 - q1**2 + q2**2 + q3**2, 0],\n        [0, 0, 0, 1.0]], dtype=numpy.float64)\n\n\ndef quaternion_from_matrix(matrix):\n    \"\"\"Return quaternion from rotation matrix.\n\n    >>> R = rotation_matrix(0.123, (1, 2, 3))\n    >>> q = quaternion_from_matrix(R)\n    >>> numpy.allclose(q, [0.0164262, 0.0328524, 0.0492786, 0.9981095])\n    True\n\n    \"\"\"\n    q = numpy.empty((4, ), dtype=numpy.float64)\n    M = numpy.array(matrix, dtype=numpy.float64, copy=False)[:4, :4]\n    t = numpy.trace(M)\n    if t > M[3, 3]:\n        q[3] = t\n        q[2] = M[1, 0] - M[0, 1]\n        q[1] = M[0, 2] - M[2, 0]\n        q[0] = M[2, 1] - M[1, 2]\n    else:\n        i, j, k = 0, 1, 2\n        if M[1, 1] > M[0, 0]:\n            i, j, k = 1, 2, 0\n        if M[2, 2] > M[i, i]:\n            i, j, k = 2, 0, 1\n        t = M[i, i] - (M[j, j] + M[k, k]) + M[3, 3]\n        q[i] = t\n        q[j] = M[i, j] + M[j, i]\n        q[k] = M[k, i] + M[i, k]\n        q[3] = M[k, j] - M[j, k]\n    q *= 0.5 / math.sqrt(t * M[3, 3])\n    return q\n\n\ndef quaternion_multiply(quaternion1, quaternion0):\n    \"\"\"Return multiplication of two quaternions.\n\n    >>> q = quaternion_multiply([1, -2, 3, 4], [-5, 6, 7, 8])\n    >>> numpy.allclose(q, [-44, -14, 48, 28])\n    True\n\n    \"\"\"\n    x0, y0, z0, w0 = quaternion0\n    x1, y1, z1, w1 = quaternion1\n    return numpy.array((\n        x1*w0 + y1*z0 - z1*y0 + w1*x0,\n        -x1*z0 + y1*w0 + z1*x0 + w1*y0,\n        x1*y0 - y1*x0 + z1*w0 + w1*z0,\n        -x1*x0 - y1*y0 - z1*z0 + w1*w0), dtype=numpy.float64)\n\n\ndef quaternion_conjugate(quaternion):\n    \"\"\"Return conjugate of quaternion.\n\n    >>> q0 = random_quaternion()\n    >>> q1 = quaternion_conjugate(q0)\n    >>> q1[3] == q0[3] and all(q1[:3] == -q0[:3])\n    True\n\n    \"\"\"\n    return numpy.array((-quaternion[0], -quaternion[1],\n                        -quaternion[2], quaternion[3]), dtype=numpy.float64)\n\n\ndef quaternion_inverse(quaternion):\n    \"\"\"Return inverse of quaternion.\n\n    >>> q0 = random_quaternion()\n    >>> q1 = quaternion_inverse(q0)\n    >>> numpy.allclose(quaternion_multiply(q0, q1), [0, 0, 0, 1])\n    True\n\n    \"\"\"\n    return quaternion_conjugate(quaternion) / numpy.dot(quaternion, quaternion)\n\n\ndef quaternion_slerp(quat0, quat1, fraction, spin=0, shortestpath=True):\n    \"\"\"Return spherical linear interpolation between two quaternions.\n\n    >>> q0 = random_quaternion()\n    >>> q1 = random_quaternion()\n    >>> q = quaternion_slerp(q0, q1, 0.0)\n    >>> numpy.allclose(q, q0)\n    True\n    >>> q = quaternion_slerp(q0, q1, 1.0, 1)\n    >>> numpy.allclose(q, q1)\n    True\n    >>> q = quaternion_slerp(q0, q1, 0.5)\n    >>> angle = math.acos(numpy.dot(q0, q))\n    >>> numpy.allclose(2.0, math.acos(numpy.dot(q0, q1)) / angle) or \\\n        numpy.allclose(2.0, math.acos(-numpy.dot(q0, q1)) / angle)\n    True\n\n    \"\"\"\n    q0 = unit_vector(quat0[:4])\n    q1 = unit_vector(quat1[:4])\n    if fraction == 0.0:\n        return q0\n    elif fraction == 1.0:\n        return q1\n    d = numpy.dot(q0, q1)\n    if abs(abs(d) - 1.0) < _EPS:\n        return q0\n    if shortestpath and d < 0.0:\n        # invert rotation\n        d = -d\n        q1 *= -1.0\n    angle = math.acos(d) + spin * math.pi\n    if abs(angle) < _EPS:\n        return q0\n    isin = 1.0 / math.sin(angle)\n    q0 *= math.sin((1.0 - fraction) * angle) * isin\n    q1 *= math.sin(fraction * angle) * isin\n    q0 += q1\n    return q0\n\n\ndef random_quaternion(rand=None):\n    \"\"\"Return uniform random unit quaternion.\n\n    rand: array like or None\n        Three independent random variables that are uniformly distributed\n        between 0 and 1.\n\n    >>> q = random_quaternion()\n    >>> numpy.allclose(1.0, vector_norm(q))\n    True\n    >>> q = random_quaternion(numpy.random.random(3))\n    >>> q.shape\n    (4,)\n\n    \"\"\"\n    if rand is None:\n        rand = numpy.random.rand(3)\n    else:\n        assert len(rand) == 3\n    r1 = numpy.sqrt(1.0 - rand[0])\n    r2 = numpy.sqrt(rand[0])\n    pi2 = math.pi * 2.0\n    t1 = pi2 * rand[1]\n    t2 = pi2 * rand[2]\n    return numpy.array((numpy.sin(t1)*r1,\n                        numpy.cos(t1)*r1,\n                        numpy.sin(t2)*r2,\n                        numpy.cos(t2)*r2), dtype=numpy.float64)\n\n\ndef random_rotation_matrix(rand=None):\n    \"\"\"Return uniform random rotation matrix.\n\n    rnd: array like\n        Three independent random variables that are uniformly distributed\n        between 0 and 1 for each returned quaternion.\n\n    >>> R = random_rotation_matrix()\n    >>> numpy.allclose(numpy.dot(R.T, R), numpy.identity(4))\n    True\n\n    \"\"\"\n    return quaternion_matrix(random_quaternion(rand))\n\n\ndef random_direction_3d():\n    \"\"\" equal-area projection according to:\n        https://math.stackexchange.com/questions/44689/how-to-find-a-random-axis-or-unit-vector-in-3d\n        cfo, 2015/10/16\n    \"\"\"\n    z = numpy.random.rand() * 2.0 - 1.0\n    t = numpy.random.rand() * 2.0 * numpy.pi\n    r = numpy.sqrt(1.0 - z*z)\n    x = r * numpy.cos(t)\n    y = r * numpy.sin(t)\n    return numpy.array([x, y, z], dtype=numpy.float64)\n\n\nclass Arcball(object):\n    \"\"\"Virtual Trackball Control.\n\n    >>> ball = Arcball()\n    >>> ball = Arcball(initial=numpy.identity(4))\n    >>> ball.place([320, 320], 320)\n    >>> ball.down([500, 250])\n    >>> ball.drag([475, 275])\n    >>> R = ball.matrix()\n    >>> numpy.allclose(numpy.sum(R), 3.90583455)\n    True\n    >>> ball = Arcball(initial=[0, 0, 0, 1])\n    >>> ball.place([320, 320], 320)\n    >>> ball.setaxes([1,1,0], [-1, 1, 0])\n    >>> ball.setconstrain(True)\n    >>> ball.down([400, 200])\n    >>> ball.drag([200, 400])\n    >>> R = ball.matrix()\n    >>> numpy.allclose(numpy.sum(R), 0.2055924)\n    True\n    >>> ball.next()\n\n    \"\"\"\n\n    def __init__(self, initial=None):\n        \"\"\"Initialize virtual trackball control.\n\n        initial : quaternion or rotation matrix\n\n        \"\"\"\n        self._axis = None\n        self._axes = None\n        self._radius = 1.0\n        self._center = [0.0, 0.0]\n        self._vdown = numpy.array([0, 0, 1], dtype=numpy.float64)\n        self._constrain = False\n\n        if initial is None:\n            self._qdown = numpy.array([0, 0, 0, 1], dtype=numpy.float64)\n        else:\n            initial = numpy.array(initial, dtype=numpy.float64)\n            if initial.shape == (4, 4):\n                self._qdown = quaternion_from_matrix(initial)\n            elif initial.shape == (4, ):\n                initial /= vector_norm(initial)\n                self._qdown = initial\n            else:\n                raise ValueError(\"initial not a quaternion or matrix.\")\n\n        self._qnow = self._qpre = self._qdown\n\n    def place(self, center, radius):\n        \"\"\"Place Arcball, e.g. when window size changes.\n\n        center : sequence[2]\n            Window coordinates of trackball center.\n        radius : float\n            Radius of trackball in window coordinates.\n\n        \"\"\"\n        self._radius = float(radius)\n        self._center[0] = center[0]\n        self._center[1] = center[1]\n\n    def setaxes(self, *axes):\n        \"\"\"Set axes to constrain rotations.\"\"\"\n        if axes is None:\n            self._axes = None\n        else:\n            self._axes = [unit_vector(axis) for axis in axes]\n\n    def setconstrain(self, constrain):\n        \"\"\"Set state of constrain to axis mode.\"\"\"\n        self._constrain = constrain == True\n\n    def getconstrain(self):\n        \"\"\"Return state of constrain to axis mode.\"\"\"\n        return self._constrain\n\n    def down(self, point):\n        \"\"\"Set initial cursor window coordinates and pick constrain-axis.\"\"\"\n        self._vdown = arcball_map_to_sphere(point, self._center, self._radius)\n        self._qdown = self._qpre = self._qnow\n\n        if self._constrain and self._axes is not None:\n            self._axis = arcball_nearest_axis(self._vdown, self._axes)\n            self._vdown = arcball_constrain_to_axis(self._vdown, self._axis)\n        else:\n            self._axis = None\n\n    def drag(self, point):\n        \"\"\"Update current cursor window coordinates.\"\"\"\n        vnow = arcball_map_to_sphere(point, self._center, self._radius)\n\n        if self._axis is not None:\n            vnow = arcball_constrain_to_axis(vnow, self._axis)\n\n        self._qpre = self._qnow\n\n        t = numpy.cross(self._vdown, vnow)\n        if numpy.dot(t, t) < _EPS:\n            self._qnow = self._qdown\n        else:\n            q = [t[0], t[1], t[2], numpy.dot(self._vdown, vnow)]\n            self._qnow = quaternion_multiply(q, self._qdown)\n\n    def next(self, acceleration=0.0):\n        \"\"\"Continue rotation in direction of last drag.\"\"\"\n        q = quaternion_slerp(self._qpre, self._qnow, 2.0+acceleration, False)\n        self._qpre, self._qnow = self._qnow, q\n\n    def matrix(self):\n        \"\"\"Return homogeneous rotation matrix.\"\"\"\n        return quaternion_matrix(self._qnow)\n\n\ndef arcball_map_to_sphere(point, center, radius):\n    \"\"\"Return unit sphere coordinates from window coordinates.\"\"\"\n    v = numpy.array(((point[0] - center[0]) / radius,\n                     (center[1] - point[1]) / radius,\n                     0.0), dtype=numpy.float64)\n    n = v[0]*v[0] + v[1]*v[1]\n    if n > 1.0:\n        v /= math.sqrt(n)  # position outside of sphere\n    else:\n        v[2] = math.sqrt(1.0 - n)\n    return v\n\n\ndef arcball_constrain_to_axis(point, axis):\n    \"\"\"Return sphere point perpendicular to axis.\"\"\"\n    v = numpy.array(point, dtype=numpy.float64, copy=True)\n    a = numpy.array(axis, dtype=numpy.float64, copy=True)\n    v -= a * numpy.dot(a, v)  # on plane\n    n = vector_norm(v)\n    if n > _EPS:\n        if v[2] < 0.0:\n            v *= -1.0\n        v /= n\n        return v\n    if a[2] == 1.0:\n        return numpy.array([1, 0, 0], dtype=numpy.float64)\n    return unit_vector([-a[1], a[0], 0])\n\n\ndef arcball_nearest_axis(point, axes):\n    \"\"\"Return axis, which arc is nearest to point.\"\"\"\n    point = numpy.array(point, dtype=numpy.float64, copy=False)\n    nearest = None\n    mx = -1.0\n    for axis in axes:\n        t = numpy.dot(arcball_constrain_to_axis(point, axis), point)\n        if t > mx:\n            nearest = axis\n            mx = t\n    return nearest\n\n\n# epsilon for testing whether a number is close to zero\n_EPS = numpy.finfo(float).eps * 4.0\n\n# axis sequences for Euler angles\n_NEXT_AXIS = [1, 2, 0, 1]\n\n# map axes strings to/from tuples of inner axis, parity, repetition, frame\n_AXES2TUPLE = {\n    'sxyz': (0, 0, 0, 0), 'sxyx': (0, 0, 1, 0), 'sxzy': (0, 1, 0, 0),\n    'sxzx': (0, 1, 1, 0), 'syzx': (1, 0, 0, 0), 'syzy': (1, 0, 1, 0),\n    'syxz': (1, 1, 0, 0), 'syxy': (1, 1, 1, 0), 'szxy': (2, 0, 0, 0),\n    'szxz': (2, 0, 1, 0), 'szyx': (2, 1, 0, 0), 'szyz': (2, 1, 1, 0),\n    'rzyx': (0, 0, 0, 1), 'rxyx': (0, 0, 1, 1), 'ryzx': (0, 1, 0, 1),\n    'rxzx': (0, 1, 1, 1), 'rxzy': (1, 0, 0, 1), 'ryzy': (1, 0, 1, 1),\n    'rzxy': (1, 1, 0, 1), 'ryxy': (1, 1, 1, 1), 'ryxz': (2, 0, 0, 1),\n    'rzxz': (2, 0, 1, 1), 'rxyz': (2, 1, 0, 1), 'rzyz': (2, 1, 1, 1)}\n\n_TUPLE2AXES = dict((v, k) for k, v in _AXES2TUPLE.items())\n\n# helper functions\n\n\ndef vector_norm(data, axis=None, out=None):\n    \"\"\"Return length, i.e. eucledian norm, of ndarray along axis.\n\n    >>> v = numpy.random.random(3)\n    >>> n = vector_norm(v)\n    >>> numpy.allclose(n, numpy.linalg.norm(v))\n    True\n    >>> v = numpy.random.rand(6, 5, 3)\n    >>> n = vector_norm(v, axis=-1)\n    >>> numpy.allclose(n, numpy.sqrt(numpy.sum(v*v, axis=2)))\n    True\n    >>> n = vector_norm(v, axis=1)\n    >>> numpy.allclose(n, numpy.sqrt(numpy.sum(v*v, axis=1)))\n    True\n    >>> v = numpy.random.rand(5, 4, 3)\n    >>> n = numpy.empty((5, 3), dtype=numpy.float64)\n    >>> vector_norm(v, axis=1, out=n)\n    >>> numpy.allclose(n, numpy.sqrt(numpy.sum(v*v, axis=1)))\n    True\n    >>> vector_norm([])\n    0.0\n    >>> vector_norm([1.0])\n    1.0\n\n    \"\"\"\n    data = numpy.array(data, dtype=numpy.float64, copy=True)\n    if out is None:\n        if data.ndim == 1:\n            return math.sqrt(numpy.dot(data, data))\n        data *= data\n        out = numpy.atleast_1d(numpy.sum(data, axis=axis))\n        numpy.sqrt(out, out)\n        return out\n    else:\n        data *= data\n        numpy.sum(data, axis=axis, out=out)\n        numpy.sqrt(out, out)\n\n\ndef unit_vector(data, axis=None, out=None):\n    \"\"\"Return ndarray normalized by length, i.e. eucledian norm, along axis.\n\n    >>> v0 = numpy.random.random(3)\n    >>> v1 = unit_vector(v0)\n    >>> numpy.allclose(v1, v0 / numpy.linalg.norm(v0))\n    True\n    >>> v0 = numpy.random.rand(5, 4, 3)\n    >>> v1 = unit_vector(v0, axis=-1)\n    >>> v2 = v0 / numpy.expand_dims(numpy.sqrt(numpy.sum(v0*v0, axis=2)), 2)\n    >>> numpy.allclose(v1, v2)\n    True\n    >>> v1 = unit_vector(v0, axis=1)\n    >>> v2 = v0 / numpy.expand_dims(numpy.sqrt(numpy.sum(v0*v0, axis=1)), 1)\n    >>> numpy.allclose(v1, v2)\n    True\n    >>> v1 = numpy.empty((5, 4, 3), dtype=numpy.float64)\n    >>> unit_vector(v0, axis=1, out=v1)\n    >>> numpy.allclose(v1, v2)\n    True\n    >>> list(unit_vector([]))\n    []\n    >>> list(unit_vector([1.0]))\n    [1.0]\n\n    \"\"\"\n    if out is None:\n        data = numpy.array(data, dtype=numpy.float64, copy=True)\n        if data.ndim == 1:\n            data /= math.sqrt(numpy.dot(data, data))\n            return data\n    else:\n        if out is not data:\n            out[:] = numpy.array(data, copy=False)\n        data = out\n    length = numpy.atleast_1d(numpy.sum(data*data, axis))\n    numpy.sqrt(length, length)\n    if axis is not None:\n        length = numpy.expand_dims(length, axis)\n    data /= length\n    if out is None:\n        return data\n\n\ndef random_vector(size):\n    \"\"\"Return array of random doubles in the half-open interval [0.0, 1.0).\n\n    >>> v = random_vector(10000)\n    >>> numpy.all(v >= 0.0) and numpy.all(v < 1.0)\n    True\n    >>> v0 = random_vector(10)\n    >>> v1 = random_vector(10)\n    >>> numpy.any(v0 == v1)\n    False\n\n    \"\"\"\n    return numpy.random.random(size)\n\n\ndef inverse_matrix(matrix):\n    \"\"\"Return inverse of square transformation matrix.\n\n    >>> M0 = random_rotation_matrix()\n    >>> M1 = inverse_matrix(M0.T)\n    >>> numpy.allclose(M1, numpy.linalg.inv(M0.T))\n    True\n    >>> for size in range(1, 7):\n    ...     M0 = numpy.random.rand(size, size)\n    ...     M1 = inverse_matrix(M0)\n    ...     if not numpy.allclose(M1, numpy.linalg.inv(M0)): print size\n\n    \"\"\"\n    return numpy.linalg.inv(matrix)\n\n\ndef concatenate_matrices(*matrices):\n    \"\"\"Return concatenation of series of transformation matrices.\n\n    >>> M = numpy.random.rand(16).reshape((4, 4)) - 0.5\n    >>> numpy.allclose(M, concatenate_matrices(M))\n    True\n    >>> numpy.allclose(numpy.dot(M, M.T), concatenate_matrices(M, M.T))\n    True\n\n    \"\"\"\n    M = numpy.identity(4)\n    for i in matrices:\n        M = numpy.dot(M, i)\n    return M\n\n\ndef is_same_transform(matrix0, matrix1):\n    \"\"\"Return True if two matrices perform same transformation.\n\n    >>> is_same_transform(numpy.identity(4), numpy.identity(4))\n    True\n    >>> is_same_transform(numpy.identity(4), random_rotation_matrix())\n    False\n\n    \"\"\"\n    matrix0 = numpy.array(matrix0, dtype=numpy.float64, copy=True)\n    matrix0 /= matrix0[3, 3]\n    matrix1 = numpy.array(matrix1, dtype=numpy.float64, copy=True)\n    matrix1 /= matrix1[3, 3]\n    return numpy.allclose(matrix0, matrix1)\n\n\ndef _import_module(module_name, warn=True, prefix='_py_', ignore='_'):\n    \"\"\"Try import all public attributes from module into global namespace.\n\n    Existing attributes with name clashes are renamed with prefix.\n    Attributes starting with underscore are ignored by default.\n\n    Return True on successful import.\n\n    \"\"\"\n    try:\n        module = __import__(module_name)\n    except ImportError:\n        if warn:\n            warnings.warn(\"Failed to import module \" + module_name)\n    else:\n        for attr in dir(module):\n            if ignore and attr.startswith(ignore):\n                continue\n            if prefix:\n                if attr in globals():\n                    globals()[prefix + attr] = globals()[attr]\n                elif warn:\n                    warnings.warn(\"No Python implementation of \" + attr)\n            globals()[attr] = getattr(module, attr)\n        return True\n"
  },
  {
    "path": "utils/utils_poses/align_traj.py",
    "content": "# Copyright (c) 2024, NVIDIA CORPORATION.  All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intellectual property\n# and proprietary rights in and to this software, related documentation\n# and any modifications thereto.  Any use, reproduction, disclosure or\n# distribution of this software and related documentation without an express\n# license agreement from NVIDIA CORPORATION is strictly prohibited.\n\nimport numpy as np\nimport torch\n\nfrom utils.utils_poses.ATE.align_utils import alignTrajectory\nfrom utils.utils_poses.lie_group_helper import SO3_to_quat, convert3x4_4x4\n\n\ndef pts_dist_max(pts):\n    \"\"\"\n    :param pts:  (N, 3) torch or np\n    :return:     scalar\n    \"\"\"\n    if torch.is_tensor(pts):\n        dist = pts.unsqueeze(0) - pts.unsqueeze(1)  # (1, N, 3) - (N, 1, 3) -> (N, N, 3)\n        dist = dist[0]  # (N, 3)\n        dist = dist.norm(dim=1)  # (N, )\n        max_dist = dist.max()\n    else:\n        dist = pts[None, :, :] - pts[:, None, :]  # (1, N, 3) - (N, 1, 3) -> (N, N, 3)\n        dist = dist[0]  # (N, 3)\n        dist = np.linalg.norm(dist, axis=1)  # (N, )\n        max_dist = dist.max()\n    return max_dist\n\n\ndef align_ate_c2b_use_a2b(traj_a, traj_b, traj_c=None, method='sim3'):\n    \"\"\"Align c to b using the sim3 from a to b.\n    :param traj_a:  (N0, 3/4, 4) torch tensor\n    :param traj_b:  (N0, 3/4, 4) torch tensor\n    :param traj_c:  None or (N1, 3/4, 4) torch tensor\n    :return:        (N1, 4,   4) torch tensor\n    \"\"\"\n    device = traj_a.device\n    if traj_c is None:\n        traj_c = traj_a.clone()\n\n    traj_a = traj_a.float().cpu().numpy()\n    traj_b = traj_b.float().cpu().numpy()\n    traj_c = traj_c.float().cpu().numpy()\n\n    R_a = traj_a[:, :3, :3]  # (N0, 3, 3)\n    t_a = traj_a[:, :3, 3]  # (N0, 3)\n    quat_a = SO3_to_quat(R_a)  # (N0, 4)\n\n    R_b = traj_b[:, :3, :3]  # (N0, 3, 3)\n    t_b = traj_b[:, :3, 3]  # (N0, 3)\n    quat_b = SO3_to_quat(R_b)  # (N0, 4)\n\n    # This function works in quaternion.\n    # scalar, (3, 3), (3, ) gt = R * s * est + t.\n    s, R, t = alignTrajectory(t_a, t_b, quat_a, quat_b, method=method)\n\n    # reshape tensors\n    R = R[None, :, :].astype(np.float32)  # (1, 3, 3)\n    t = t[None, :, None].astype(np.float32)  # (1, 3, 1)\n    s = float(s)\n\n    R_c = traj_c[:, :3, :3]  # (N1, 3, 3)\n    t_c = traj_c[:, :3, 3:4]  # (N1, 3, 1)\n\n    R_c_aligned = R @ R_c  # (N1, 3, 3)\n    t_c_aligned = s * (R @ t_c) + t  # (N1, 3, 1)\n    traj_c_aligned = np.concatenate([R_c_aligned, t_c_aligned], axis=2)  # (N1, 3, 4)\n\n    # append the last row\n    traj_c_aligned = convert3x4_4x4(traj_c_aligned)  # (N1, 4, 4)\n\n    traj_c_aligned = torch.from_numpy(traj_c_aligned).to(device)\n    return traj_c_aligned  # (N1, 4, 4)\n\n\n\ndef align_scale_c2b_use_a2b(traj_a, traj_b, traj_c=None):\n    '''Scale c to b using the scale from a to b.\n    :param traj_a:      (N0, 3/4, 4) torch tensor\n    :param traj_b:      (N0, 3/4, 4) torch tensor\n    :param traj_c:      None or (N1, 3/4, 4) torch tensor\n    :return:\n        scaled_traj_c   (N1, 4, 4)   torch tensor\n        scale           scalar\n    '''\n    if traj_c is None:\n        traj_c = traj_a.clone()\n\n    t_a = traj_a[:, :3, 3]  # (N, 3)\n    t_b = traj_b[:, :3, 3]  # (N, 3)\n\n    # scale estimated poses to colmap scale\n    # s_a2b: a*s ~ b\n    scale_a2b = pts_dist_max(t_b) / pts_dist_max(t_a)\n\n    traj_c[:, :3, 3] *= scale_a2b\n\n    if traj_c.shape[1] == 3:\n        traj_c = convert3x4_4x4(traj_c)  # (N, 4, 4)\n\n    return traj_c, scale_a2b  # (N, 4, 4)\n"
  },
  {
    "path": "utils/utils_poses/comp_ate.py",
    "content": "# Copyright (c) 2024, NVIDIA CORPORATION.  All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intellectual property\n# and proprietary rights in and to this software, related documentation\n# and any modifications thereto.  Any use, reproduction, disclosure or\n# distribution of this software and related documentation without an express\n# license agreement from NVIDIA CORPORATION is strictly prohibited.\n\nimport numpy as np\n\nimport utils.utils_poses.ATE.trajectory_utils as tu\nimport utils.utils_poses.ATE.transformations as tf\ndef rotation_error(pose_error):\n    \"\"\"Compute rotation error\n    Args:\n        pose_error (4x4 array): relative pose error\n    Returns:\n        rot_error (float): rotation error\n    \"\"\"\n    a = pose_error[0, 0]\n    b = pose_error[1, 1]\n    c = pose_error[2, 2]\n    d = 0.5*(a+b+c-1.0)\n    rot_error = np.arccos(max(min(d, 1.0), -1.0))\n    return rot_error\n\ndef translation_error(pose_error):\n    \"\"\"Compute translation error\n    Args:\n        pose_error (4x4 array): relative pose error\n    Returns:\n        trans_error (float): translation error\n    \"\"\"\n    dx = pose_error[0, 3]\n    dy = pose_error[1, 3]\n    dz = pose_error[2, 3]\n    trans_error = np.sqrt(dx**2+dy**2+dz**2)\n    return trans_error\n\ndef compute_rpe(gt, pred):\n    trans_errors = []\n    rot_errors = []\n    for i in range(len(gt)-1):\n        gt1 = gt[i]\n        gt2 = gt[i+1]\n        gt_rel = np.linalg.inv(gt1) @ gt2\n\n        pred1 = pred[i]\n        pred2 = pred[i+1]\n        pred_rel = np.linalg.inv(pred1) @ pred2\n        rel_err = np.linalg.inv(gt_rel) @ pred_rel\n        \n        trans_errors.append(translation_error(rel_err))\n        rot_errors.append(rotation_error(rel_err))\n    rpe_trans = np.mean(np.asarray(trans_errors))\n    rpe_rot = np.mean(np.asarray(rot_errors))\n    return rpe_trans, rpe_rot\n\ndef compute_ATE(gt, pred):\n    \"\"\"Compute RMSE of ATE\n    Args:\n        gt: ground-truth poses\n        pred: predicted poses\n    \"\"\"\n    errors = []\n\n    for i in range(len(pred)):\n        # cur_gt = np.linalg.inv(gt_0) @ gt[i]\n        cur_gt = gt[i]\n        gt_xyz = cur_gt[:3, 3] \n\n        # cur_pred = np.linalg.inv(pred_0) @ pred[i]\n        cur_pred = pred[i]\n        pred_xyz = cur_pred[:3, 3]\n\n        align_err = gt_xyz - pred_xyz\n\n        errors.append(np.sqrt(np.sum(align_err ** 2)))\n    ate = np.sqrt(np.mean(np.asarray(errors) ** 2)) \n    return ate\n\n"
  },
  {
    "path": "utils/utils_poses/lie_group_helper.py",
    "content": "# Copyright (c) 2024, NVIDIA CORPORATION.  All rights reserved.\n#\n# NVIDIA CORPORATION and its licensors retain all intellectual property\n# and proprietary rights in and to this software, related documentation\n# and any modifications thereto.  Any use, reproduction, disclosure or\n# distribution of this software and related documentation without an express\n# license agreement from NVIDIA CORPORATION is strictly prohibited.\n\nimport numpy as np\nimport torch\nfrom scipy.spatial.transform import Rotation as RotLib\n\n\ndef SO3_to_quat(R):\n    \"\"\"\n    :param R:  (N, 3, 3) or (3, 3) np\n    :return:   (N, 4, ) or (4, ) np\n    \"\"\"\n    x = RotLib.from_matrix(R)\n    quat = x.as_quat()\n    return quat\n\n\ndef quat_to_SO3(quat):\n    \"\"\"\n    :param quat:    (N, 4, ) or (4, ) np\n    :return:        (N, 3, 3) or (3, 3) np\n    \"\"\"\n    x = RotLib.from_quat(quat)\n    R = x.as_matrix()\n    return R\n\n\ndef convert3x4_4x4(input):\n    \"\"\"\n    :param input:  (N, 3, 4) or (3, 4) torch or np\n    :return:       (N, 4, 4) or (4, 4) torch or np\n    \"\"\"\n    if torch.is_tensor(input):\n        if len(input.shape) == 3:\n            output = torch.cat([input, torch.zeros_like(input[:, 0:1])], dim=1)  # (N, 4, 4)\n            output[:, 3, 3] = 1.0\n        else:\n            output = torch.cat([input, torch.tensor([[0,0,0,1]], dtype=input.dtype, device=input.device)], dim=0)  # (4, 4)\n    else:\n        if len(input.shape) == 3:\n            output = np.concatenate([input, np.zeros_like(input[:, 0:1])], axis=1)  # (N, 4, 4)\n            output[:, 3, 3] = 1.0\n        else:\n            output = np.concatenate([input, np.array([[0,0,0,1]], dtype=input.dtype)], axis=0)  # (4, 4)\n            output[3, 3] = 1.0\n    return output\n\n\ndef vec2skew(v):\n    \"\"\"\n    :param v:  (3, ) torch tensor\n    :return:   (3, 3)\n    \"\"\"\n    zero = torch.zeros(1, dtype=torch.float32, device=v.device)\n    skew_v0 = torch.cat([ zero,    -v[2:3],   v[1:2]])  # (3, 1)\n    skew_v1 = torch.cat([ v[2:3],   zero,    -v[0:1]])\n    skew_v2 = torch.cat([-v[1:2],   v[0:1],   zero])\n    skew_v = torch.stack([skew_v0, skew_v1, skew_v2], dim=0)  # (3, 3)\n    return skew_v  # (3, 3)\n\n\ndef Exp(r):\n    \"\"\"so(3) vector to SO(3) matrix\n    :param r: (3, ) axis-angle, torch tensor\n    :return:  (3, 3)\n    \"\"\"\n    skew_r = vec2skew(r)  # (3, 3)\n    norm_r = r.norm() + 1e-15\n    eye = torch.eye(3, dtype=torch.float32, device=r.device)\n    R = eye + (torch.sin(norm_r) / norm_r) * skew_r + ((1 - torch.cos(norm_r)) / norm_r**2) * (skew_r @ skew_r)\n    return R\n\n\ndef make_c2w(r, t):\n    \"\"\"\n    :param r:  (3, ) axis-angle             torch tensor\n    :param t:  (3, ) translation vector     torch tensor\n    :return:   (4, 4)\n    \"\"\"\n    R = Exp(r)  # (3, 3)\n    c2w = torch.cat([R, t.unsqueeze(1)], dim=1)  # (3, 4)\n    c2w = convert3x4_4x4(c2w)  # (4, 4)\n    return c2w\n"
  },
  {
    "path": "utils/utils_poses/relative_pose.py",
    "content": "import torch\nimport numpy as np\n\n\ndef compute_relative_world_to_camera(R1, t1, R2, t2):\n    zero_row = torch.tensor([[0, 0, 0, 1]], dtype=torch.float32, device=\"cuda\") #, requires_grad=True\n    E1_inv = torch.cat([torch.transpose(R1, 0, 1), -torch.transpose(R1, 0, 1) @ t1.reshape(-1, 1)], dim=1)\n    E1_inv = torch.cat([E1_inv, zero_row], dim=0)\n    E2 = torch.cat([R2, -R2 @ t2.reshape(-1, 1)], dim=1)\n    E2 = torch.cat([E2, zero_row], dim=0)\n\n    # Compute relative transformation\n    E_rel = E2 @ E1_inv\n\n    # # Extract rotation and translation\n    # R_rel = E_rel[:3, :3]\n    # t_rel = E_rel[:3, 3]\n    # E_rel = torch.cat([E_rel, zero_row], dim=0)\n\n    return E_rel"
  },
  {
    "path": "utils/utils_poses/vis_cam_traj.py",
    "content": "'''\nBSD 2-Clause License\n\nCopyright (c) 2020, the NeRF++ authors\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n'''\n\nimport numpy as np\n\ntry:\n    import open3d as o3d\nexcept ImportError:\n    pass\n\n\ndef frustums2lineset(frustums):\n    N = len(frustums)\n    merged_points = np.zeros((N*5, 3))      # 5 vertices per frustum\n    merged_lines = np.zeros((N*8, 2))       # 8 lines per frustum\n    merged_colors = np.zeros((N*8, 3))      # each line gets a color\n\n    for i, (frustum_points, frustum_lines, frustum_colors) in enumerate(frustums):\n        merged_points[i*5:(i+1)*5, :] = frustum_points\n        merged_lines[i*8:(i+1)*8, :] = frustum_lines + i*5\n        merged_colors[i*8:(i+1)*8, :] = frustum_colors\n\n    lineset = o3d.geometry.LineSet()\n    lineset.points = o3d.utility.Vector3dVector(merged_points)\n    lineset.lines = o3d.utility.Vector2iVector(merged_lines)\n    lineset.colors = o3d.utility.Vector3dVector(merged_colors)\n\n    return lineset\n\n\ndef get_camera_frustum_opengl_coord(H, W, fx, fy, W2C, frustum_length=0.5, color=np.array([0., 1., 0.])):\n    '''X right, Y up, Z backward to the observer.\n    :param H, W:\n    :param fx, fy:\n    :param W2C:             (4, 4)  matrix\n    :param frustum_length:  scalar: scale the frustum\n    :param color:           (3,)    list, frustum line color\n    :return:\n        frustum_points:     (5, 3)  frustum points in world coordinate\n        frustum_lines:      (8, 2)  8 lines connect 5 frustum points, specified in line start/end index.\n        frustum_colors:     (8, 3)  colors for 8 lines.\n    '''\n    hfov = np.rad2deg(np.arctan(W / 2. / fx) * 2.)\n    vfov = np.rad2deg(np.arctan(H / 2. / fy) * 2.)\n    half_w = frustum_length * np.tan(np.deg2rad(hfov / 2.))\n    half_h = frustum_length * np.tan(np.deg2rad(vfov / 2.))\n\n    # build view frustum in camera space in homogenous coordinate (5, 4)\n    frustum_points = np.array([[0., 0., 0., 1.0],                          # frustum origin\n                               [-half_w, half_h,  -frustum_length, 1.0],   # top-left image corner\n                               [half_w, half_h,   -frustum_length, 1.0],   # top-right image corner\n                               [half_w, -half_h,  -frustum_length, 1.0],   # bottom-right image corner\n                               [-half_w, -half_h, -frustum_length, 1.0]])  # bottom-left image corner\n    frustum_lines = np.array([[0, i] for i in range(1, 5)] + [[i, (i+1)] for i in range(1, 4)] + [[4, 1]])  # (8, 2)\n    frustum_colors = np.tile(color.reshape((1, 3)), (frustum_lines.shape[0], 1))  # (8, 3)\n\n    # transform view frustum from camera space to world space\n    C2W = np.linalg.inv(W2C)\n    frustum_points = np.matmul(C2W, frustum_points.T).T  # (5, 4)\n    frustum_points = frustum_points[:, :3] / frustum_points[:, 3:4]  # (5, 3)  remove homogenous coordinate\n    return frustum_points, frustum_lines, frustum_colors\n\ndef get_camera_frustum_opencv_coord(H, W, fx, fy, W2C, frustum_length=0.5, color=np.array([0., 1., 0.])):\n    '''X right, Y up, Z backward to the observer.\n    :param H, W:\n    :param fx, fy:\n    :param W2C:             (4, 4)  matrix\n    :param frustum_length:  scalar: scale the frustum\n    :param color:           (3,)    list, frustum line color\n    :return:\n        frustum_points:     (5, 3)  frustum points in world coordinate\n        frustum_lines:      (8, 2)  8 lines connect 5 frustum points, specified in line start/end index.\n        frustum_colors:     (8, 3)  colors for 8 lines.\n    '''\n    hfov = np.rad2deg(np.arctan(W / 2. / fx) * 2.)\n    vfov = np.rad2deg(np.arctan(H / 2. / fy) * 2.)\n    half_w = frustum_length * np.tan(np.deg2rad(hfov / 2.))\n    half_h = frustum_length * np.tan(np.deg2rad(vfov / 2.))\n\n    # build view frustum in camera space in homogenous coordinate (5, 4)\n    frustum_points = np.array([[0., 0., 0., 1.0],                          # frustum origin\n                               [-half_w, -half_h, frustum_length, 1.0],   # top-left image corner\n                               [ half_w, -half_h, frustum_length, 1.0],   # top-right image corner\n                               [ half_w,  half_h, frustum_length, 1.0],   # bottom-right image corner\n                               [-half_w, +half_h, frustum_length, 1.0]])  # bottom-left image corner\n    frustum_lines = np.array([[0, i] for i in range(1, 5)] + [[i, (i+1)] for i in range(1, 4)] + [[4, 1]])  # (8, 2)\n    frustum_colors = np.tile(color.reshape((1, 3)), (frustum_lines.shape[0], 1))  # (8, 3)\n\n    # transform view frustum from camera space to world space\n    C2W = np.linalg.inv(W2C)\n    frustum_points = np.matmul(C2W, frustum_points.T).T  # (5, 4)\n    frustum_points = frustum_points[:, :3] / frustum_points[:, 3:4]  # (5, 3)  remove homogenous coordinate\n    return frustum_points, frustum_lines, frustum_colors\n\n\n\ndef draw_camera_frustum_geometry(c2ws, H, W, fx=600.0, fy=600.0, frustum_length=0.5,\n                                 color=np.array([29.0, 53.0, 87.0])/255.0, draw_now=False, coord='opengl'):\n    '''\n    :param c2ws:            (N, 4, 4)  np.array\n    :param H:               scalar\n    :param W:               scalar\n    :param fx:              scalar\n    :param fy:              scalar\n    :param frustum_length:  scalar\n    :param color:           None or (N, 3) or (3, ) or (1, 3) or (3, 1) np array\n    :param draw_now:        True/False call o3d vis now\n    :return:\n    '''\n    N = c2ws.shape[0]\n\n    num_ele = color.flatten().shape[0]\n    if num_ele == 3:\n        color = color.reshape(1, 3)\n        color = np.tile(color, (N, 1))\n\n    frustum_list = []\n    if coord == 'opengl':\n        for i in range(N):\n            frustum_list.append(get_camera_frustum_opengl_coord(H, W, fx, fy,\n                                                                W2C=np.linalg.inv(c2ws[i]),\n                                                                frustum_length=frustum_length,\n                                                                color=color[i]))\n    elif coord == 'opencv':\n        for i in range(N):\n            frustum_list.append(get_camera_frustum_opencv_coord(H, W, fx, fy,\n                                                                W2C=np.linalg.inv(c2ws[i]),\n                                                                frustum_length=frustum_length,\n                                                                color=color[i]))\n    else:\n        print('Undefined coordinate system. Exit')\n        exit()\n\n    frustums_geometry = frustums2lineset(frustum_list)\n\n    if draw_now:\n        o3d.visualization.draw_geometries([frustums_geometry])\n\n    return frustums_geometry  # this is an o3d geometry object.\n"
  },
  {
    "path": "utils/utils_poses/vis_pose_utils.py",
    "content": "import os\nimport matplotlib\nimport matplotlib.pyplot as plt\nimport copy\nfrom evo.core.trajectory import PosePath3D, PoseTrajectory3D\nfrom evo.main_ape import ape\nfrom evo.tools import plot\nfrom evo.core import sync\nfrom evo.tools import file_interface\nfrom evo.core import metrics\nimport evo\nimport torch\nimport numpy as np\nfrom scipy.spatial.transform import Slerp\nfrom scipy.spatial.transform import Rotation as R\nimport scipy.interpolate as si\n\n\ndef interp_poses(c2ws, N_views):\n    N_inputs = c2ws.shape[0]\n    trans = c2ws[:, :3, 3:].permute(2, 1, 0)\n    rots = c2ws[:, :3, :3]\n    render_poses = []\n    rots = R.from_matrix(rots)\n    slerp = Slerp(np.linspace(0, 1, N_inputs), rots)\n    interp_rots = torch.tensor(\n        slerp(np.linspace(0, 1, N_views)).as_matrix().astype(np.float32))\n    interp_trans = torch.nn.functional.interpolate(\n        trans, size=N_views, mode='linear').permute(2, 1, 0)\n    render_poses = torch.cat([interp_rots, interp_trans], dim=2)\n    render_poses = convert3x4_4x4(render_poses)\n    return render_poses\n\n\ndef interp_poses_bspline(c2ws, N_novel_imgs, input_times, degree):\n    target_trans = torch.tensor(scipy_bspline(\n        c2ws[:, :3, 3], n=N_novel_imgs, degree=degree, periodic=False).astype(np.float32)).unsqueeze(2)\n    rots = R.from_matrix(c2ws[:, :3, :3])\n    slerp = Slerp(input_times, rots)\n    target_times = np.linspace(input_times[0], input_times[-1], N_novel_imgs)\n    target_rots = torch.tensor(\n        slerp(target_times).as_matrix().astype(np.float32))\n    target_poses = torch.cat([target_rots, target_trans], dim=2)\n    target_poses = convert3x4_4x4(target_poses)\n    return target_poses\n\n\ndef poses_avg(poses):\n\n    hwf = poses[0, :3, -1:]\n\n    center = poses[:, :3, 3].mean(0)\n    vec2 = normalize(poses[:, :3, 2].sum(0))\n    up = poses[:, :3, 1].sum(0)\n    c2w = np.concatenate([viewmatrix(vec2, up, center), hwf], 1)\n\n    return c2w\n\n\ndef normalize(v):\n    \"\"\"Normalize a vector.\"\"\"\n    return v / np.linalg.norm(v)\n\n\ndef viewmatrix(z, up, pos):\n    vec2 = normalize(z)\n    vec1_avg = up\n    vec0 = normalize(np.cross(vec1_avg, vec2))\n    vec1 = normalize(np.cross(vec2, vec0))\n    m = np.stack([vec0, vec1, vec2, pos], 1)\n    return m\n\n\ndef render_path_spiral(c2w, up, rads, focal, zdelta, zrate, rots, N):\n    render_poses = []\n    rads = np.array(list(rads) + [1.])\n    hwf = c2w[:, 4:5]\n\n    for theta in np.linspace(0., 2. * np.pi * rots, N+1)[:-1]:\n        # c = np.dot(c2w[:3,:4], np.array([0.7*np.cos(theta) , -0.3*np.sin(theta) , -np.sin(theta*zrate) *0.1, 1.]) * rads)\n        # c = np.dot(c2w[:3,:4], np.array([0.3*np.cos(theta) , -0.3*np.sin(theta) , -np.sin(theta*zrate) *0.01, 1.]) * rads)\n        c = np.dot(c2w[:3, :4], np.array(\n            [0.2*np.cos(theta), -0.2*np.sin(theta), -np.sin(theta*zrate) * 0.1, 1.]) * rads)\n        z = normalize(c - np.dot(c2w[:3, :4], np.array([0, 0, -focal, 1.])))\n        render_poses.append(np.concatenate([viewmatrix(z, up, c), hwf], 1))\n    return render_poses\n\n\ndef scipy_bspline(cv, n=100, degree=3, periodic=False):\n    \"\"\" Calculate n samples on a bspline\n\n        cv :      Array ov control vertices\n        n  :      Number of samples to return\n        degree:   Curve degree\n        periodic: True - Curve is closed\n    \"\"\"\n    cv = np.asarray(cv)\n    count = cv.shape[0]\n\n    # Closed curve\n    if periodic:\n        kv = np.arange(-degree, count+degree+1)\n        factor, fraction = divmod(count+degree+1, count)\n        cv = np.roll(np.concatenate(\n            (cv,) * factor + (cv[:fraction],)), -1, axis=0)\n        degree = np.clip(degree, 1, degree)\n\n    # Opened curve\n    else:\n        degree = np.clip(degree, 1, count-1)\n        kv = np.clip(np.arange(count+degree+1)-degree, 0, count-degree)\n\n    # Return samples\n    max_param = count - (degree * (1-periodic))\n    spl = si.BSpline(kv, cv, degree)\n    return spl(np.linspace(0, max_param, n))\n\n\ndef generate_spiral_nerf(learned_poses, bds, N_novel_views, hwf):\n    learned_poses_ = np.concatenate((learned_poses[:, :3, :4].detach(\n    ).cpu().numpy(), hwf[:len(learned_poses)]), axis=-1)\n    c2w = poses_avg(learned_poses_)\n    print('recentered', c2w.shape)\n    # Get spiral\n    # Get average pose\n    up = normalize(learned_poses_[:, :3, 1].sum(0))\n    # Find a reasonable \"focus depth\" for this dataset\n\n    close_depth, inf_depth = bds.min()*.9, bds.max()*5.\n    dt = .75\n    mean_dz = 1./(((1.-dt)/close_depth + dt/inf_depth))\n    focal = mean_dz\n\n    # Get radii for spiral path\n    shrink_factor = .8\n    zdelta = close_depth * .2\n    tt = learned_poses_[:, :3, 3]  # ptstocam(poses[:3,3,:].T, c2w).T\n    rads = np.percentile(np.abs(tt), 90, 0)\n    c2w_path = c2w\n    N_rots = 2\n    c2ws = render_path_spiral(\n        c2w_path, up, rads, focal, zdelta, zrate=.5, rots=N_rots, N=N_novel_views)\n    c2ws = torch.tensor(np.stack(c2ws).astype(np.float32))\n    c2ws = c2ws[:, :3, :4]\n    c2ws = convert3x4_4x4(c2ws)\n    return c2ws\n\n\ndef convert3x4_4x4(input):\n    \"\"\"\n    :param input:  (N, 3, 4) or (3, 4) torch or np\n    :return:       (N, 4, 4) or (4, 4) torch or np\n    \"\"\"\n    if torch.is_tensor(input):\n        if len(input.shape) == 3:\n            output = torch.cat([input, torch.zeros_like(\n                input[:, 0:1])], dim=1)  # (N, 4, 4)\n            output[:, 3, 3] = 1.0\n        else:\n            output = torch.cat([input, torch.tensor(\n                [[0, 0, 0, 1]], dtype=input.dtype, device=input.device)], dim=0)  # (4, 4)\n    else:\n        if len(input.shape) == 3:\n            output = np.concatenate(\n                [input, np.zeros_like(input[:, 0:1])], axis=1)  # (N, 4, 4)\n            output[:, 3, 3] = 1.0\n        else:\n            output = np.concatenate(\n                [input, np.array([[0, 0, 0, 1]], dtype=input.dtype)], axis=0)  # (4, 4)\n            output[3, 3] = 1.0\n    return output\n\n\nplt.rc('legend', fontsize=20)  # using a named size\n\n\ndef plot_pose(ref_poses, est_poses, output_path, args, vid=False):\n    ref_poses = [pose for pose in ref_poses]\n    if isinstance(est_poses, dict):\n        est_poses = [pose for k, pose in est_poses.items()]\n    else:\n        est_poses = [pose for pose in est_poses]\n    traj_ref = PosePath3D(poses_se3=ref_poses)\n    traj_est = PosePath3D(poses_se3=est_poses)\n    traj_est_aligned = copy.deepcopy(traj_est)\n    traj_est_aligned.align(traj_ref, correct_scale=True,\n                           correct_only_scale=False)\n    if vid:\n        for p_idx in range(len(ref_poses)):\n            fig = plt.figure()\n            current_est_aligned = traj_est_aligned.poses_se3[:p_idx+1]\n            current_ref = traj_ref.poses_se3[:p_idx+1]\n            current_est_aligned = PosePath3D(poses_se3=current_est_aligned)\n            current_ref = PosePath3D(poses_se3=current_ref)\n            traj_by_label = {\n                # \"estimate (not aligned)\": traj_est,\n                \"Ours (aligned)\": current_est_aligned,\n                \"Ground-truth\": current_ref\n            }\n            plot_mode = plot.PlotMode.xyz\n            # ax = plot.prepare_axis(fig, plot_mode, 111)\n            ax = fig.add_subplot(111, projection=\"3d\")\n            ax.xaxis.set_tick_params(labelbottom=False)\n            ax.yaxis.set_tick_params(labelleft=False)\n            ax.zaxis.set_tick_params(labelleft=False)\n            colors = ['r', 'b']\n            styles = ['-', '--']\n\n            for idx, (label, traj) in enumerate(traj_by_label.items()):\n                plot.traj(ax, plot_mode, traj,\n                          styles[idx], colors[idx], label)\n                # break\n            # plot.trajectories(fig, traj_by_label, plot.PlotMode.xyz)\n            ax.view_init(elev=10., azim=45)\n            plt.tight_layout()\n            os.makedirs(os.path.join(os.path.dirname(\n                output_path), 'pose_vid'), exist_ok=True)\n            pose_vis_path = os.path.join(os.path.dirname(\n                output_path), 'pose_vid', 'pose_vis_{:03d}.png'.format(p_idx))\n            print(pose_vis_path)\n            fig.savefig(pose_vis_path)\n\n\n    fig = plt.figure()\n    fig.patch.set_facecolor('white')                   # Set background to pure white\n    traj_by_label = {\n        # \"estimate (not aligned)\": traj_est,\n        \"Ours (aligned)\": traj_est_aligned,\n        \"COLMAP (GT)\": traj_ref\n    }\n    plot_mode = plot.PlotMode.xyz\n    # ax = plot.prepare_axis(fig, plot_mode, 111)\n    ax = fig.add_subplot(111, projection=\"3d\")\n    ax.set_facecolor('white')                           # Set subplot to pure white\n    ax.xaxis.set_tick_params(labelbottom=True)\n    ax.yaxis.set_tick_params(labelleft=True)\n    ax.zaxis.set_tick_params(labelleft=True)\n    colors = ['#2c9e38', '#d12920']\n    styles = ['s-', 's-.']\n\n    for idx, (label, traj) in enumerate(traj_by_label.items()):\n        plot.traj(ax, plot_mode, traj,\n                  styles[idx], colors[idx], label)\n    # plot.trajectories(fig, traj_by_label, plot.PlotMode.xyz)\n    ax.legend(loc='upper center', bbox_to_anchor=(0.5, 1.1), ncol=1)\n    ax.view_init(elev=30., azim=45)\n    plt.tight_layout()\n    pose_vis_path = output_path / f'pose_vis.png'\n    fig.savefig(pose_vis_path , transparent=False)\n\n"
  },
  {
    "path": "vggt/heads/camera_head.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport math\nimport numpy as np\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom vggt.layers import Mlp\nfrom vggt.layers.block import Block\nfrom vggt.heads.head_act import activate_pose\n\n\nclass CameraHead(nn.Module):\n    \"\"\"\n    CameraHead predicts camera parameters from token representations using iterative refinement.\n\n    It applies a series of transformer blocks (the \"trunk\") to dedicated camera tokens.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim_in: int = 2048,\n        trunk_depth: int = 4,\n        pose_encoding_type: str = \"absT_quaR_FoV\",\n        num_heads: int = 16,\n        mlp_ratio: int = 4,\n        init_values: float = 0.01,\n        trans_act: str = \"linear\",\n        quat_act: str = \"linear\",\n        fl_act: str = \"relu\",  # Field of view activations: ensures FOV values are positive.\n    ):\n        super().__init__()\n\n        if pose_encoding_type == \"absT_quaR_FoV\":\n            self.target_dim = 9\n        else:\n            raise ValueError(f\"Unsupported camera encoding type: {pose_encoding_type}\")\n\n        self.trans_act = trans_act\n        self.quat_act = quat_act\n        self.fl_act = fl_act\n        self.trunk_depth = trunk_depth\n\n        # Build the trunk using a sequence of transformer blocks.\n        self.trunk = nn.Sequential(\n            *[\n                Block(\n                    dim=dim_in,\n                    num_heads=num_heads,\n                    mlp_ratio=mlp_ratio,\n                    init_values=init_values,\n                )\n                for _ in range(trunk_depth)\n            ]\n        )\n\n        # Normalizations for camera token and trunk output.\n        self.token_norm = nn.LayerNorm(dim_in)\n        self.trunk_norm = nn.LayerNorm(dim_in)\n\n        # Learnable empty camera pose token.\n        self.empty_pose_tokens = nn.Parameter(torch.zeros(1, 1, self.target_dim))\n        self.embed_pose = nn.Linear(self.target_dim, dim_in)\n\n        # Module for producing modulation parameters: shift, scale, and a gate.\n        self.poseLN_modulation = nn.Sequential(nn.SiLU(), nn.Linear(dim_in, 3 * dim_in, bias=True))\n\n        # Adaptive layer normalization without affine parameters.\n        self.adaln_norm = nn.LayerNorm(dim_in, elementwise_affine=False, eps=1e-6)\n        self.pose_branch = Mlp(\n            in_features=dim_in,\n            hidden_features=dim_in // 2,\n            out_features=self.target_dim,\n            drop=0,\n        )\n\n    def forward(self, aggregated_tokens_list: list, num_iterations: int = 4) -> list:\n        \"\"\"\n        Forward pass to predict camera parameters.\n\n        Args:\n            aggregated_tokens_list (list): List of token tensors from the network;\n                the last tensor is used for prediction.\n            num_iterations (int, optional): Number of iterative refinement steps. Defaults to 4.\n\n        Returns:\n            list: A list of predicted camera encodings (post-activation) from each iteration.\n        \"\"\"\n        # Use tokens from the last block for camera prediction.\n        tokens = aggregated_tokens_list[-1]\n\n        # Extract the camera tokens\n        pose_tokens = tokens[:, :, 0]\n        pose_tokens = self.token_norm(pose_tokens)\n\n        pred_pose_enc_list = self.trunk_fn(pose_tokens, num_iterations)\n        return pred_pose_enc_list\n\n    def trunk_fn(self, pose_tokens: torch.Tensor, num_iterations: int) -> list:\n        \"\"\"\n        Iteratively refine camera pose predictions.\n\n        Args:\n            pose_tokens (torch.Tensor): Normalized camera tokens with shape [B, 1, C].\n            num_iterations (int): Number of refinement iterations.\n\n        Returns:\n            list: List of activated camera encodings from each iteration.\n        \"\"\"\n        B, S, C = pose_tokens.shape  # S is expected to be 1.\n        pred_pose_enc = None\n        pred_pose_enc_list = []\n\n        for _ in range(num_iterations):\n            # Use a learned empty pose for the first iteration.\n            if pred_pose_enc is None:\n                module_input = self.embed_pose(self.empty_pose_tokens.expand(B, S, -1))\n            else:\n                # Detach the previous prediction to avoid backprop through time.\n                pred_pose_enc = pred_pose_enc.detach()\n                module_input = self.embed_pose(pred_pose_enc)\n\n            # Generate modulation parameters and split them into shift, scale, and gate components.\n            shift_msa, scale_msa, gate_msa = self.poseLN_modulation(module_input).chunk(3, dim=-1)\n\n            # Adaptive layer normalization and modulation.\n            pose_tokens_modulated = gate_msa * modulate(self.adaln_norm(pose_tokens), shift_msa, scale_msa)\n            pose_tokens_modulated = pose_tokens_modulated + pose_tokens\n\n            pose_tokens_modulated = self.trunk(pose_tokens_modulated)\n            # Compute the delta update for the pose encoding.\n            pred_pose_enc_delta = self.pose_branch(self.trunk_norm(pose_tokens_modulated))\n\n            if pred_pose_enc is None:\n                pred_pose_enc = pred_pose_enc_delta\n            else:\n                pred_pose_enc = pred_pose_enc + pred_pose_enc_delta\n\n            # Apply final activation functions for translation, quaternion, and field-of-view.\n            activated_pose = activate_pose(\n                pred_pose_enc,\n                trans_act=self.trans_act,\n                quat_act=self.quat_act,\n                fl_act=self.fl_act,\n            )\n            pred_pose_enc_list.append(activated_pose)\n\n        return pred_pose_enc_list\n\n\ndef modulate(x: torch.Tensor, shift: torch.Tensor, scale: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Modulate the input tensor using scaling and shifting parameters.\n    \"\"\"\n    # modified from https://github.com/facebookresearch/DiT/blob/796c29e532f47bba17c5b9c5eb39b9354b8b7c64/models.py#L19\n    return x * (1 + scale) + shift\n"
  },
  {
    "path": "vggt/heads/dpt_head.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\n# Inspired by https://github.com/DepthAnything/Depth-Anything-V2\n\n\nimport os\nfrom typing import List, Dict, Tuple, Union\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom .head_act import activate_head\nfrom .utils import create_uv_grid, position_grid_to_embed\n\n\nclass DPTHead(nn.Module):\n    \"\"\"\n    DPT  Head for dense prediction tasks.\n\n    This implementation follows the architecture described in \"Vision Transformers for Dense Prediction\"\n    (https://arxiv.org/abs/2103.13413). The DPT head processes features from a vision transformer\n    backbone and produces dense predictions by fusing multi-scale features.\n\n    Args:\n        dim_in (int): Input dimension (channels).\n        patch_size (int, optional): Patch size. Default is 14.\n        output_dim (int, optional): Number of output channels. Default is 4.\n        activation (str, optional): Activation type. Default is \"inv_log\".\n        conf_activation (str, optional): Confidence activation type. Default is \"expp1\".\n        features (int, optional): Feature channels for intermediate representations. Default is 256.\n        out_channels (List[int], optional): Output channels for each intermediate layer.\n        intermediate_layer_idx (List[int], optional): Indices of layers from aggregated tokens used for DPT.\n        pos_embed (bool, optional): Whether to use positional embedding. Default is True.\n        feature_only (bool, optional): If True, return features only without the last several layers and activation head. Default is False.\n        down_ratio (int, optional): Downscaling factor for the output resolution. Default is 1.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim_in: int,\n        patch_size: int = 14,\n        output_dim: int = 4,\n        activation: str = \"inv_log\",\n        conf_activation: str = \"expp1\",\n        features: int = 256,\n        out_channels: List[int] = [256, 512, 1024, 1024],\n        intermediate_layer_idx: List[int] = [4, 11, 17, 23],\n        pos_embed: bool = True,\n        feature_only: bool = False,\n        down_ratio: int = 1,\n    ) -> None:\n        super(DPTHead, self).__init__()\n        self.patch_size = patch_size\n        self.activation = activation\n        self.conf_activation = conf_activation\n        self.pos_embed = pos_embed\n        self.feature_only = feature_only\n        self.down_ratio = down_ratio\n        self.intermediate_layer_idx = intermediate_layer_idx\n\n        self.norm = nn.LayerNorm(dim_in)\n\n        # Projection layers for each output channel from tokens.\n        self.projects = nn.ModuleList(\n            [\n                nn.Conv2d(\n                    in_channels=dim_in,\n                    out_channels=oc,\n                    kernel_size=1,\n                    stride=1,\n                    padding=0,\n                )\n                for oc in out_channels\n            ]\n        )\n\n        # Resize layers for upsampling feature maps.\n        self.resize_layers = nn.ModuleList(\n            [\n                nn.ConvTranspose2d(\n                    in_channels=out_channels[0], out_channels=out_channels[0], kernel_size=4, stride=4, padding=0\n                ),\n                nn.ConvTranspose2d(\n                    in_channels=out_channels[1], out_channels=out_channels[1], kernel_size=2, stride=2, padding=0\n                ),\n                nn.Identity(),\n                nn.Conv2d(\n                    in_channels=out_channels[3], out_channels=out_channels[3], kernel_size=3, stride=2, padding=1\n                ),\n            ]\n        )\n\n        self.scratch = _make_scratch(\n            out_channels,\n            features,\n            expand=False,\n        )\n\n        # Attach additional modules to scratch.\n        self.scratch.stem_transpose = None\n        self.scratch.refinenet1 = _make_fusion_block(features)\n        self.scratch.refinenet2 = _make_fusion_block(features)\n        self.scratch.refinenet3 = _make_fusion_block(features)\n        self.scratch.refinenet4 = _make_fusion_block(features, has_residual=False)\n\n        head_features_1 = features\n        head_features_2 = 32\n\n        if feature_only:\n            self.scratch.output_conv1 = nn.Conv2d(head_features_1, head_features_1, kernel_size=3, stride=1, padding=1)\n        else:\n            self.scratch.output_conv1 = nn.Conv2d(\n                head_features_1, head_features_1 // 2, kernel_size=3, stride=1, padding=1\n            )\n            conv2_in_channels = head_features_1 // 2\n\n            self.scratch.output_conv2 = nn.Sequential(\n                nn.Conv2d(conv2_in_channels, head_features_2, kernel_size=3, stride=1, padding=1),\n                nn.ReLU(inplace=True),\n                nn.Conv2d(head_features_2, output_dim, kernel_size=1, stride=1, padding=0),\n            )\n\n    def forward(\n        self,\n        aggregated_tokens_list: List[torch.Tensor],\n        images: torch.Tensor,\n        patch_start_idx: int,\n        frames_chunk_size: int = 8,\n    ) -> Union[torch.Tensor, Tuple[torch.Tensor, torch.Tensor]]:\n        \"\"\"\n        Forward pass through the DPT head, supports processing by chunking frames.\n        Args:\n            aggregated_tokens_list (List[Tensor]): List of token tensors from different transformer layers.\n            images (Tensor): Input images with shape [B, S, 3, H, W], in range [0, 1].\n            patch_start_idx (int): Starting index for patch tokens in the token sequence.\n                Used to separate patch tokens from other tokens (e.g., camera or register tokens).\n            frames_chunk_size (int, optional): Number of frames to process in each chunk.\n                If None or larger than S, all frames are processed at once. Default: 8.\n\n        Returns:\n            Tensor or Tuple[Tensor, Tensor]:\n                - If feature_only=True: Feature maps with shape [B, S, C, H, W]\n                - Otherwise: Tuple of (predictions, confidence) both with shape [B, S, 1, H, W]\n        \"\"\"\n        B, S, _, H, W = images.shape\n\n        # If frames_chunk_size is not specified or greater than S, process all frames at once\n        if frames_chunk_size is None or frames_chunk_size >= S:\n            return self._forward_impl(aggregated_tokens_list, images, patch_start_idx)\n\n        # Otherwise, process frames in chunks to manage memory usage\n        assert frames_chunk_size > 0\n\n        # Process frames in batches\n        all_preds = []\n        all_conf = []\n\n        for frames_start_idx in range(0, S, frames_chunk_size):\n            frames_end_idx = min(frames_start_idx + frames_chunk_size, S)\n\n            # Process batch of frames\n            if self.feature_only:\n                chunk_output = self._forward_impl(\n                    aggregated_tokens_list, images, patch_start_idx, frames_start_idx, frames_end_idx\n                )\n                all_preds.append(chunk_output)\n            else:\n                chunk_preds, chunk_conf = self._forward_impl(\n                    aggregated_tokens_list, images, patch_start_idx, frames_start_idx, frames_end_idx\n                )\n                all_preds.append(chunk_preds)\n                all_conf.append(chunk_conf)\n\n        # Concatenate results along the sequence dimension\n        if self.feature_only:\n            return torch.cat(all_preds, dim=1)\n        else:\n            return torch.cat(all_preds, dim=1), torch.cat(all_conf, dim=1)\n\n    def _forward_impl(\n        self,\n        aggregated_tokens_list: List[torch.Tensor],\n        images: torch.Tensor,\n        patch_start_idx: int,\n        frames_start_idx: int = None,\n        frames_end_idx: int = None,\n    ) -> Union[torch.Tensor, Tuple[torch.Tensor, torch.Tensor]]:\n        \"\"\"\n        Implementation of the forward pass through the DPT head.\n\n        This method processes a specific chunk of frames from the sequence.\n\n        Args:\n            aggregated_tokens_list (List[Tensor]): List of token tensors from different transformer layers.\n            images (Tensor): Input images with shape [B, S, 3, H, W].\n            patch_start_idx (int): Starting index for patch tokens.\n            frames_start_idx (int, optional): Starting index for frames to process.\n            frames_end_idx (int, optional): Ending index for frames to process.\n\n        Returns:\n            Tensor or Tuple[Tensor, Tensor]: Feature maps or (predictions, confidence).\n        \"\"\"\n        if frames_start_idx is not None and frames_end_idx is not None:\n            images = images[:, frames_start_idx:frames_end_idx]\n\n        B, S, _, H, W = images.shape\n\n        patch_h, patch_w = H // self.patch_size, W // self.patch_size\n\n        out = []\n        dpt_idx = 0\n\n        for layer_idx in self.intermediate_layer_idx:\n            x = aggregated_tokens_list[layer_idx][:, :, patch_start_idx:]\n\n            # Select frames if processing a chunk\n            if frames_start_idx is not None and frames_end_idx is not None:\n                x = x[:, frames_start_idx:frames_end_idx]\n\n            x = x.view(B * S, -1, x.shape[-1])\n\n            x = self.norm(x)\n\n            x = x.permute(0, 2, 1).reshape((x.shape[0], x.shape[-1], patch_h, patch_w))\n\n            x = self.projects[dpt_idx](x)\n            if self.pos_embed:\n                x = self._apply_pos_embed(x, W, H)\n            x = self.resize_layers[dpt_idx](x)\n\n            out.append(x)\n            dpt_idx += 1\n\n        # Fuse features from multiple layers.\n        out = self.scratch_forward(out)\n        # Interpolate fused output to match target image resolution.\n        out = custom_interpolate(\n            out,\n            (int(patch_h * self.patch_size / self.down_ratio), int(patch_w * self.patch_size / self.down_ratio)),\n            mode=\"bilinear\",\n            align_corners=True,\n        )\n\n        if self.pos_embed:\n            out = self._apply_pos_embed(out, W, H)\n\n        if self.feature_only:\n            return out.view(B, S, *out.shape[1:])\n\n        out = self.scratch.output_conv2(out)\n        preds, conf = activate_head(out, activation=self.activation, conf_activation=self.conf_activation)\n\n        preds = preds.view(B, S, *preds.shape[1:])\n        conf = conf.view(B, S, *conf.shape[1:])\n        return preds, conf\n\n    def _apply_pos_embed(self, x: torch.Tensor, W: int, H: int, ratio: float = 0.1) -> torch.Tensor:\n        \"\"\"\n        Apply positional embedding to tensor x.\n        \"\"\"\n        patch_w = x.shape[-1]\n        patch_h = x.shape[-2]\n        pos_embed = create_uv_grid(patch_w, patch_h, aspect_ratio=W / H, dtype=x.dtype, device=x.device)\n        pos_embed = position_grid_to_embed(pos_embed, x.shape[1])\n        pos_embed = pos_embed * ratio\n        pos_embed = pos_embed.permute(2, 0, 1)[None].expand(x.shape[0], -1, -1, -1)\n        return x + pos_embed\n\n    def scratch_forward(self, features: List[torch.Tensor]) -> torch.Tensor:\n        \"\"\"\n        Forward pass through the fusion blocks.\n\n        Args:\n            features (List[Tensor]): List of feature maps from different layers.\n\n        Returns:\n            Tensor: Fused feature map.\n        \"\"\"\n        layer_1, layer_2, layer_3, layer_4 = features\n\n        layer_1_rn = self.scratch.layer1_rn(layer_1)\n        layer_2_rn = self.scratch.layer2_rn(layer_2)\n        layer_3_rn = self.scratch.layer3_rn(layer_3)\n        layer_4_rn = self.scratch.layer4_rn(layer_4)\n\n        out = self.scratch.refinenet4(layer_4_rn, size=layer_3_rn.shape[2:])\n        del layer_4_rn, layer_4\n\n        out = self.scratch.refinenet3(out, layer_3_rn, size=layer_2_rn.shape[2:])\n        del layer_3_rn, layer_3\n\n        out = self.scratch.refinenet2(out, layer_2_rn, size=layer_1_rn.shape[2:])\n        del layer_2_rn, layer_2\n\n        out = self.scratch.refinenet1(out, layer_1_rn)\n        del layer_1_rn, layer_1\n\n        out = self.scratch.output_conv1(out)\n        return out\n\n\n################################################################################\n# Modules\n################################################################################\n\n\ndef _make_fusion_block(features: int, size: int = None, has_residual: bool = True, groups: int = 1) -> nn.Module:\n    return FeatureFusionBlock(\n        features,\n        nn.ReLU(inplace=True),\n        deconv=False,\n        bn=False,\n        expand=False,\n        align_corners=True,\n        size=size,\n        has_residual=has_residual,\n        groups=groups,\n    )\n\n\ndef _make_scratch(in_shape: List[int], out_shape: int, groups: int = 1, expand: bool = False) -> nn.Module:\n    scratch = nn.Module()\n    out_shape1 = out_shape\n    out_shape2 = out_shape\n    out_shape3 = out_shape\n    if len(in_shape) >= 4:\n        out_shape4 = out_shape\n\n    if expand:\n        out_shape1 = out_shape\n        out_shape2 = out_shape * 2\n        out_shape3 = out_shape * 4\n        if len(in_shape) >= 4:\n            out_shape4 = out_shape * 8\n\n    scratch.layer1_rn = nn.Conv2d(\n        in_shape[0], out_shape1, kernel_size=3, stride=1, padding=1, bias=False, groups=groups\n    )\n    scratch.layer2_rn = nn.Conv2d(\n        in_shape[1], out_shape2, kernel_size=3, stride=1, padding=1, bias=False, groups=groups\n    )\n    scratch.layer3_rn = nn.Conv2d(\n        in_shape[2], out_shape3, kernel_size=3, stride=1, padding=1, bias=False, groups=groups\n    )\n    if len(in_shape) >= 4:\n        scratch.layer4_rn = nn.Conv2d(\n            in_shape[3], out_shape4, kernel_size=3, stride=1, padding=1, bias=False, groups=groups\n        )\n    return scratch\n\n\nclass ResidualConvUnit(nn.Module):\n    \"\"\"Residual convolution module.\"\"\"\n\n    def __init__(self, features, activation, bn, groups=1):\n        \"\"\"Init.\n\n        Args:\n            features (int): number of features\n        \"\"\"\n        super().__init__()\n\n        self.bn = bn\n        self.groups = groups\n        self.conv1 = nn.Conv2d(features, features, kernel_size=3, stride=1, padding=1, bias=True, groups=self.groups)\n        self.conv2 = nn.Conv2d(features, features, kernel_size=3, stride=1, padding=1, bias=True, groups=self.groups)\n\n        self.norm1 = None\n        self.norm2 = None\n\n        self.activation = activation\n        self.skip_add = nn.quantized.FloatFunctional()\n\n    def forward(self, x):\n        \"\"\"Forward pass.\n\n        Args:\n            x (tensor): input\n\n        Returns:\n            tensor: output\n        \"\"\"\n\n        out = self.activation(x)\n        out = self.conv1(out)\n        if self.norm1 is not None:\n            out = self.norm1(out)\n\n        out = self.activation(out)\n        out = self.conv2(out)\n        if self.norm2 is not None:\n            out = self.norm2(out)\n\n        return self.skip_add.add(out, x)\n\n\nclass FeatureFusionBlock(nn.Module):\n    \"\"\"Feature fusion block.\"\"\"\n\n    def __init__(\n        self,\n        features,\n        activation,\n        deconv=False,\n        bn=False,\n        expand=False,\n        align_corners=True,\n        size=None,\n        has_residual=True,\n        groups=1,\n    ):\n        \"\"\"Init.\n\n        Args:\n            features (int): number of features\n        \"\"\"\n        super(FeatureFusionBlock, self).__init__()\n\n        self.deconv = deconv\n        self.align_corners = align_corners\n        self.groups = groups\n        self.expand = expand\n        out_features = features\n        if self.expand == True:\n            out_features = features // 2\n\n        self.out_conv = nn.Conv2d(\n            features, out_features, kernel_size=1, stride=1, padding=0, bias=True, groups=self.groups\n        )\n\n        if has_residual:\n            self.resConfUnit1 = ResidualConvUnit(features, activation, bn, groups=self.groups)\n\n        self.has_residual = has_residual\n        self.resConfUnit2 = ResidualConvUnit(features, activation, bn, groups=self.groups)\n\n        self.skip_add = nn.quantized.FloatFunctional()\n        self.size = size\n\n    def forward(self, *xs, size=None):\n        \"\"\"Forward pass.\n\n        Returns:\n            tensor: output\n        \"\"\"\n        output = xs[0]\n\n        if self.has_residual:\n            res = self.resConfUnit1(xs[1])\n            output = self.skip_add.add(output, res)\n\n        output = self.resConfUnit2(output)\n\n        if (size is None) and (self.size is None):\n            modifier = {\"scale_factor\": 2}\n        elif size is None:\n            modifier = {\"size\": self.size}\n        else:\n            modifier = {\"size\": size}\n\n        output = custom_interpolate(output, **modifier, mode=\"bilinear\", align_corners=self.align_corners)\n        output = self.out_conv(output)\n\n        return output\n\n\ndef custom_interpolate(\n    x: torch.Tensor,\n    size: Tuple[int, int] = None,\n    scale_factor: float = None,\n    mode: str = \"bilinear\",\n    align_corners: bool = True,\n) -> torch.Tensor:\n    \"\"\"\n    Custom interpolate to avoid INT_MAX issues in nn.functional.interpolate.\n    \"\"\"\n    if size is None:\n        size = (int(x.shape[-2] * scale_factor), int(x.shape[-1] * scale_factor))\n\n    INT_MAX = 1610612736\n\n    input_elements = size[0] * size[1] * x.shape[0] * x.shape[1]\n\n    if input_elements > INT_MAX:\n        chunks = torch.chunk(x, chunks=(input_elements // INT_MAX) + 1, dim=0)\n        interpolated_chunks = [\n            nn.functional.interpolate(chunk, size=size, mode=mode, align_corners=align_corners) for chunk in chunks\n        ]\n        x = torch.cat(interpolated_chunks, dim=0)\n        return x.contiguous()\n    else:\n        return nn.functional.interpolate(x, size=size, mode=mode, align_corners=align_corners)\n"
  },
  {
    "path": "vggt/heads/head_act.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\nimport torch\nimport torch.nn.functional as F\n\n\ndef activate_pose(pred_pose_enc, trans_act=\"linear\", quat_act=\"linear\", fl_act=\"linear\"):\n    \"\"\"\n    Activate pose parameters with specified activation functions.\n\n    Args:\n        pred_pose_enc: Tensor containing encoded pose parameters [translation, quaternion, focal length]\n        trans_act: Activation type for translation component\n        quat_act: Activation type for quaternion component\n        fl_act: Activation type for focal length component\n\n    Returns:\n        Activated pose parameters tensor\n    \"\"\"\n    T = pred_pose_enc[..., :3]\n    quat = pred_pose_enc[..., 3:7]\n    fl = pred_pose_enc[..., 7:]  # or fov\n\n    T = base_pose_act(T, trans_act)\n    quat = base_pose_act(quat, quat_act)\n    fl = base_pose_act(fl, fl_act)  # or fov\n\n    pred_pose_enc = torch.cat([T, quat, fl], dim=-1)\n\n    return pred_pose_enc\n\n\ndef base_pose_act(pose_enc, act_type=\"linear\"):\n    \"\"\"\n    Apply basic activation function to pose parameters.\n\n    Args:\n        pose_enc: Tensor containing encoded pose parameters\n        act_type: Activation type (\"linear\", \"inv_log\", \"exp\", \"relu\")\n\n    Returns:\n        Activated pose parameters\n    \"\"\"\n    if act_type == \"linear\":\n        return pose_enc\n    elif act_type == \"inv_log\":\n        return inverse_log_transform(pose_enc)\n    elif act_type == \"exp\":\n        return torch.exp(pose_enc)\n    elif act_type == \"relu\":\n        return F.relu(pose_enc)\n    else:\n        raise ValueError(f\"Unknown act_type: {act_type}\")\n\n\ndef activate_head(out, activation=\"norm_exp\", conf_activation=\"expp1\"):\n    \"\"\"\n    Process network output to extract 3D points and confidence values.\n\n    Args:\n        out: Network output tensor (B, C, H, W)\n        activation: Activation type for 3D points\n        conf_activation: Activation type for confidence values\n\n    Returns:\n        Tuple of (3D points tensor, confidence tensor)\n    \"\"\"\n    # Move channels from last dim to the 4th dimension => (B, H, W, C)\n    fmap = out.permute(0, 2, 3, 1)  # B,H,W,C expected\n\n    # Split into xyz (first C-1 channels) and confidence (last channel)\n    xyz = fmap[:, :, :, :-1]\n    conf = fmap[:, :, :, -1]\n\n    if activation == \"norm_exp\":\n        d = xyz.norm(dim=-1, keepdim=True).clamp(min=1e-8)\n        xyz_normed = xyz / d\n        pts3d = xyz_normed * torch.expm1(d)\n    elif activation == \"norm\":\n        pts3d = xyz / xyz.norm(dim=-1, keepdim=True)\n    elif activation == \"exp\":\n        pts3d = torch.exp(xyz)\n    elif activation == \"relu\":\n        pts3d = F.relu(xyz)\n    elif activation == \"inv_log\":\n        pts3d = inverse_log_transform(xyz)\n    elif activation == \"xy_inv_log\":\n        xy, z = xyz.split([2, 1], dim=-1)\n        z = inverse_log_transform(z)\n        pts3d = torch.cat([xy * z, z], dim=-1)\n    elif activation == \"sigmoid\":\n        pts3d = torch.sigmoid(xyz)\n    elif activation == \"linear\":\n        pts3d = xyz\n    else:\n        raise ValueError(f\"Unknown activation: {activation}\")\n\n    if conf_activation == \"expp1\":\n        conf_out = 1 + conf.exp()\n    elif conf_activation == \"expp0\":\n        conf_out = conf.exp()\n    elif conf_activation == \"sigmoid\":\n        conf_out = torch.sigmoid(conf)\n    else:\n        raise ValueError(f\"Unknown conf_activation: {conf_activation}\")\n\n    return pts3d, conf_out\n\n\ndef inverse_log_transform(y):\n    \"\"\"\n    Apply inverse log transform: sign(y) * (exp(|y|) - 1)\n\n    Args:\n        y: Input tensor\n\n    Returns:\n        Transformed tensor\n    \"\"\"\n    return torch.sign(y) * (torch.expm1(torch.abs(y)))\n"
  },
  {
    "path": "vggt/heads/track_head.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch.nn as nn\nfrom .dpt_head import DPTHead\nfrom .track_modules.base_track_predictor import BaseTrackerPredictor\n\n\nclass TrackHead(nn.Module):\n    \"\"\"\n    Track head that uses DPT head to process tokens and BaseTrackerPredictor for tracking.\n    The tracking is performed iteratively, refining predictions over multiple iterations.\n    \"\"\"\n\n    def __init__(\n        self,\n        dim_in,\n        patch_size=14,\n        features=128,\n        iters=4,\n        predict_conf=True,\n        stride=2,\n        corr_levels=7,\n        corr_radius=4,\n        hidden_size=384,\n    ):\n        \"\"\"\n        Initialize the TrackHead module.\n\n        Args:\n            dim_in (int): Input dimension of tokens from the backbone.\n            patch_size (int): Size of image patches used in the vision transformer.\n            features (int): Number of feature channels in the feature extractor output.\n            iters (int): Number of refinement iterations for tracking predictions.\n            predict_conf (bool): Whether to predict confidence scores for tracked points.\n            stride (int): Stride value for the tracker predictor.\n            corr_levels (int): Number of correlation pyramid levels\n            corr_radius (int): Radius for correlation computation, controlling the search area.\n            hidden_size (int): Size of hidden layers in the tracker network.\n        \"\"\"\n        super().__init__()\n\n        self.patch_size = patch_size\n\n        # Feature extractor based on DPT architecture\n        # Processes tokens into feature maps for tracking\n        self.feature_extractor = DPTHead(\n            dim_in=dim_in,\n            patch_size=patch_size,\n            features=features,\n            feature_only=True,  # Only output features, no activation\n            down_ratio=2,  # Reduces spatial dimensions by factor of 2\n            pos_embed=False,\n        )\n\n        # Tracker module that predicts point trajectories\n        # Takes feature maps and predicts coordinates and visibility\n        self.tracker = BaseTrackerPredictor(\n            latent_dim=features,  # Match the output_dim of feature extractor\n            predict_conf=predict_conf,\n            stride=stride,\n            corr_levels=corr_levels,\n            corr_radius=corr_radius,\n            hidden_size=hidden_size,\n        )\n\n        self.iters = iters\n\n    def forward(self, aggregated_tokens_list, images, patch_start_idx, query_points=None, iters=None):\n        \"\"\"\n        Forward pass of the TrackHead.\n\n        Args:\n            aggregated_tokens_list (list): List of aggregated tokens from the backbone.\n            images (torch.Tensor): Input images of shape (B, S, C, H, W) where:\n                                   B = batch size, S = sequence length.\n            patch_start_idx (int): Starting index for patch tokens.\n            query_points (torch.Tensor, optional): Initial query points to track.\n                                                  If None, points are initialized by the tracker.\n            iters (int, optional): Number of refinement iterations. If None, uses self.iters.\n\n        Returns:\n            tuple:\n                - coord_preds (torch.Tensor): Predicted coordinates for tracked points.\n                - vis_scores (torch.Tensor): Visibility scores for tracked points.\n                - conf_scores (torch.Tensor): Confidence scores for tracked points (if predict_conf=True).\n        \"\"\"\n        B, S, _, H, W = images.shape\n\n        # Extract features from tokens\n        # feature_maps has shape (B, S, C, H//2, W//2) due to down_ratio=2\n        feature_maps = self.feature_extractor(aggregated_tokens_list, images, patch_start_idx)\n\n        # Use default iterations if not specified\n        if iters is None:\n            iters = self.iters\n\n        # Perform tracking using the extracted features\n        coord_preds, vis_scores, conf_scores = self.tracker(\n            query_points=query_points,\n            fmaps=feature_maps,\n            iters=iters,\n        )\n\n        return coord_preds, vis_scores, conf_scores\n"
  },
  {
    "path": "vggt/heads/track_modules/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n"
  },
  {
    "path": "vggt/heads/track_modules/base_track_predictor.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch\nimport torch.nn as nn\nfrom einops import rearrange, repeat\n\n\nfrom .blocks import EfficientUpdateFormer, CorrBlock\nfrom .utils import sample_features4d, get_2d_embedding, get_2d_sincos_pos_embed\nfrom .modules import Mlp\n\n\nclass BaseTrackerPredictor(nn.Module):\n    def __init__(\n        self,\n        stride=1,\n        corr_levels=5,\n        corr_radius=4,\n        latent_dim=128,\n        hidden_size=384,\n        use_spaceatt=True,\n        depth=6,\n        max_scale=518,\n        predict_conf=True,\n    ):\n        super(BaseTrackerPredictor, self).__init__()\n        \"\"\"\n        The base template to create a track predictor\n        \n        Modified from https://github.com/facebookresearch/co-tracker/\n        and https://github.com/facebookresearch/vggsfm\n        \"\"\"\n\n        self.stride = stride\n        self.latent_dim = latent_dim\n        self.corr_levels = corr_levels\n        self.corr_radius = corr_radius\n        self.hidden_size = hidden_size\n        self.max_scale = max_scale\n        self.predict_conf = predict_conf\n\n        self.flows_emb_dim = latent_dim // 2\n\n        self.corr_mlp = Mlp(\n            in_features=self.corr_levels * (self.corr_radius * 2 + 1) ** 2,\n            hidden_features=self.hidden_size,\n            out_features=self.latent_dim,\n        )\n\n        self.transformer_dim = self.latent_dim + self.latent_dim + self.latent_dim + 4\n\n        self.query_ref_token = nn.Parameter(torch.randn(1, 2, self.transformer_dim))\n\n        space_depth = depth if use_spaceatt else 0\n        time_depth = depth\n\n        self.updateformer = EfficientUpdateFormer(\n            space_depth=space_depth,\n            time_depth=time_depth,\n            input_dim=self.transformer_dim,\n            hidden_size=self.hidden_size,\n            output_dim=self.latent_dim + 2,\n            mlp_ratio=4.0,\n            add_space_attn=use_spaceatt,\n        )\n\n        self.fmap_norm = nn.LayerNorm(self.latent_dim)\n        self.ffeat_norm = nn.GroupNorm(1, self.latent_dim)\n\n        # A linear layer to update track feats at each iteration\n        self.ffeat_updater = nn.Sequential(nn.Linear(self.latent_dim, self.latent_dim), nn.GELU())\n\n        self.vis_predictor = nn.Sequential(nn.Linear(self.latent_dim, 1))\n\n        if predict_conf:\n            self.conf_predictor = nn.Sequential(nn.Linear(self.latent_dim, 1))\n\n    def forward(self, query_points, fmaps=None, iters=6, return_feat=False, down_ratio=1, apply_sigmoid=True):\n        \"\"\"\n        query_points: B x N x 2, the number of batches, tracks, and xy\n        fmaps: B x S x C x HH x WW, the number of batches, frames, and feature dimension.\n                note HH and WW is the size of feature maps instead of original images\n        \"\"\"\n        B, N, D = query_points.shape\n        B, S, C, HH, WW = fmaps.shape\n\n        assert D == 2, \"Input points must be 2D coordinates\"\n\n        # apply a layernorm to fmaps here\n        fmaps = self.fmap_norm(fmaps.permute(0, 1, 3, 4, 2))\n        fmaps = fmaps.permute(0, 1, 4, 2, 3)\n\n        # Scale the input query_points because we may downsample the images\n        # by down_ratio or self.stride\n        # e.g., if a 3x1024x1024 image is processed to a 128x256x256 feature map\n        # its query_points should be query_points/4\n        if down_ratio > 1:\n            query_points = query_points / float(down_ratio)\n\n        query_points = query_points / float(self.stride)\n\n        # Init with coords as the query points\n        # It means the search will start from the position of query points at the reference frames\n        coords = query_points.clone().reshape(B, 1, N, 2).repeat(1, S, 1, 1)\n\n        # Sample/extract the features of the query points in the query frame\n        query_track_feat = sample_features4d(fmaps[:, 0], coords[:, 0])\n\n        # init track feats by query feats\n        track_feats = query_track_feat.unsqueeze(1).repeat(1, S, 1, 1)  # B, S, N, C\n        # back up the init coords\n        coords_backup = coords.clone()\n\n        fcorr_fn = CorrBlock(fmaps, num_levels=self.corr_levels, radius=self.corr_radius)\n\n        coord_preds = []\n\n        # Iterative Refinement\n        for _ in range(iters):\n            # Detach the gradients from the last iteration\n            # (in my experience, not very important for performance)\n            coords = coords.detach()\n\n            fcorrs = fcorr_fn.corr_sample(track_feats, coords)\n\n            corr_dim = fcorrs.shape[3]\n            fcorrs_ = fcorrs.permute(0, 2, 1, 3).reshape(B * N, S, corr_dim)\n            fcorrs_ = self.corr_mlp(fcorrs_)\n\n            # Movement of current coords relative to query points\n            flows = (coords - coords[:, 0:1]).permute(0, 2, 1, 3).reshape(B * N, S, 2)\n\n            flows_emb = get_2d_embedding(flows, self.flows_emb_dim, cat_coords=False)\n\n            # (In my trials, it is also okay to just add the flows_emb instead of concat)\n            flows_emb = torch.cat([flows_emb, flows / self.max_scale, flows / self.max_scale], dim=-1)\n\n            track_feats_ = track_feats.permute(0, 2, 1, 3).reshape(B * N, S, self.latent_dim)\n\n            # Concatenate them as the input for the transformers\n            transformer_input = torch.cat([flows_emb, fcorrs_, track_feats_], dim=2)\n\n            # 2D positional embed\n            # TODO: this can be much simplified\n            pos_embed = get_2d_sincos_pos_embed(self.transformer_dim, grid_size=(HH, WW)).to(query_points.device)\n            sampled_pos_emb = sample_features4d(pos_embed.expand(B, -1, -1, -1), coords[:, 0])\n\n            sampled_pos_emb = rearrange(sampled_pos_emb, \"b n c -> (b n) c\").unsqueeze(1)\n\n            x = transformer_input + sampled_pos_emb\n\n            # Add the query ref token to the track feats\n            query_ref_token = torch.cat(\n                [self.query_ref_token[:, 0:1], self.query_ref_token[:, 1:2].expand(-1, S - 1, -1)], dim=1\n            )\n            x = x + query_ref_token.to(x.device).to(x.dtype)\n\n            # B, N, S, C\n            x = rearrange(x, \"(b n) s d -> b n s d\", b=B)\n\n            # Compute the delta coordinates and delta track features\n            delta, _ = self.updateformer(x)\n\n            # BN, S, C\n            delta = rearrange(delta, \" b n s d -> (b n) s d\", b=B)\n            delta_coords_ = delta[:, :, :2]\n            delta_feats_ = delta[:, :, 2:]\n\n            track_feats_ = track_feats_.reshape(B * N * S, self.latent_dim)\n            delta_feats_ = delta_feats_.reshape(B * N * S, self.latent_dim)\n\n            # Update the track features\n            track_feats_ = self.ffeat_updater(self.ffeat_norm(delta_feats_)) + track_feats_\n\n            track_feats = track_feats_.reshape(B, N, S, self.latent_dim).permute(0, 2, 1, 3)  # BxSxNxC\n\n            # B x S x N x 2\n            coords = coords + delta_coords_.reshape(B, N, S, 2).permute(0, 2, 1, 3)\n\n            # Force coord0 as query\n            # because we assume the query points should not be changed\n            coords[:, 0] = coords_backup[:, 0]\n\n            # The predicted tracks are in the original image scale\n            if down_ratio > 1:\n                coord_preds.append(coords * self.stride * down_ratio)\n            else:\n                coord_preds.append(coords * self.stride)\n\n        # B, S, N\n        vis_e = self.vis_predictor(track_feats.reshape(B * S * N, self.latent_dim)).reshape(B, S, N)\n        if apply_sigmoid:\n            vis_e = torch.sigmoid(vis_e)\n\n        if self.predict_conf:\n            conf_e = self.conf_predictor(track_feats.reshape(B * S * N, self.latent_dim)).reshape(B, S, N)\n            if apply_sigmoid:\n                conf_e = torch.sigmoid(conf_e)\n        else:\n            conf_e = None\n\n        if return_feat:\n            return coord_preds, vis_e, track_feats, query_track_feat, conf_e\n        else:\n            return coord_preds, vis_e, conf_e\n"
  },
  {
    "path": "vggt/heads/track_modules/blocks.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\n# Modified from https://github.com/facebookresearch/co-tracker/\n\nimport math\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom .utils import bilinear_sampler\nfrom .modules import Mlp, AttnBlock, CrossAttnBlock, ResidualBlock\n\n\nclass EfficientUpdateFormer(nn.Module):\n    \"\"\"\n    Transformer model that updates track estimates.\n    \"\"\"\n\n    def __init__(\n        self,\n        space_depth=6,\n        time_depth=6,\n        input_dim=320,\n        hidden_size=384,\n        num_heads=8,\n        output_dim=130,\n        mlp_ratio=4.0,\n        add_space_attn=True,\n        num_virtual_tracks=64,\n    ):\n        super().__init__()\n\n        self.out_channels = 2\n        self.num_heads = num_heads\n        self.hidden_size = hidden_size\n        self.add_space_attn = add_space_attn\n\n        # Add input LayerNorm before linear projection\n        self.input_norm = nn.LayerNorm(input_dim)\n        self.input_transform = torch.nn.Linear(input_dim, hidden_size, bias=True)\n\n        # Add output LayerNorm before final projection\n        self.output_norm = nn.LayerNorm(hidden_size)\n        self.flow_head = torch.nn.Linear(hidden_size, output_dim, bias=True)\n        self.num_virtual_tracks = num_virtual_tracks\n\n        if self.add_space_attn:\n            self.virual_tracks = nn.Parameter(torch.randn(1, num_virtual_tracks, 1, hidden_size))\n        else:\n            self.virual_tracks = None\n\n        self.time_blocks = nn.ModuleList(\n            [\n                AttnBlock(\n                    hidden_size,\n                    num_heads,\n                    mlp_ratio=mlp_ratio,\n                    attn_class=nn.MultiheadAttention,\n                )\n                for _ in range(time_depth)\n            ]\n        )\n\n        if add_space_attn:\n            self.space_virtual_blocks = nn.ModuleList(\n                [\n                    AttnBlock(\n                        hidden_size,\n                        num_heads,\n                        mlp_ratio=mlp_ratio,\n                        attn_class=nn.MultiheadAttention,\n                    )\n                    for _ in range(space_depth)\n                ]\n            )\n            self.space_point2virtual_blocks = nn.ModuleList(\n                [CrossAttnBlock(hidden_size, hidden_size, num_heads, mlp_ratio=mlp_ratio) for _ in range(space_depth)]\n            )\n            self.space_virtual2point_blocks = nn.ModuleList(\n                [CrossAttnBlock(hidden_size, hidden_size, num_heads, mlp_ratio=mlp_ratio) for _ in range(space_depth)]\n            )\n            assert len(self.time_blocks) >= len(self.space_virtual2point_blocks)\n        self.initialize_weights()\n\n    def initialize_weights(self):\n        def _basic_init(module):\n            if isinstance(module, nn.Linear):\n                torch.nn.init.xavier_uniform_(module.weight)\n                if module.bias is not None:\n                    nn.init.constant_(module.bias, 0)\n            torch.nn.init.trunc_normal_(self.flow_head.weight, std=0.001)\n\n        self.apply(_basic_init)\n\n    def forward(self, input_tensor, mask=None):\n        # Apply input LayerNorm\n        input_tensor = self.input_norm(input_tensor)\n        tokens = self.input_transform(input_tensor)\n\n        init_tokens = tokens\n\n        B, _, T, _ = tokens.shape\n\n        if self.add_space_attn:\n            virtual_tokens = self.virual_tracks.repeat(B, 1, T, 1)\n            tokens = torch.cat([tokens, virtual_tokens], dim=1)\n\n        _, N, _, _ = tokens.shape\n\n        j = 0\n        for i in range(len(self.time_blocks)):\n            time_tokens = tokens.contiguous().view(B * N, T, -1)  # B N T C -> (B N) T C\n\n            time_tokens = self.time_blocks[i](time_tokens)\n\n            tokens = time_tokens.view(B, N, T, -1)  # (B N) T C -> B N T C\n            if self.add_space_attn and (i % (len(self.time_blocks) // len(self.space_virtual_blocks)) == 0):\n                space_tokens = tokens.permute(0, 2, 1, 3).contiguous().view(B * T, N, -1)  # B N T C -> (B T) N C\n                point_tokens = space_tokens[:, : N - self.num_virtual_tracks]\n                virtual_tokens = space_tokens[:, N - self.num_virtual_tracks :]\n\n                virtual_tokens = self.space_virtual2point_blocks[j](virtual_tokens, point_tokens, mask=mask)\n                virtual_tokens = self.space_virtual_blocks[j](virtual_tokens)\n                point_tokens = self.space_point2virtual_blocks[j](point_tokens, virtual_tokens, mask=mask)\n\n                space_tokens = torch.cat([point_tokens, virtual_tokens], dim=1)\n                tokens = space_tokens.view(B, T, N, -1).permute(0, 2, 1, 3)  # (B T) N C -> B N T C\n                j += 1\n\n        if self.add_space_attn:\n            tokens = tokens[:, : N - self.num_virtual_tracks]\n\n        tokens = tokens + init_tokens\n\n        # Apply output LayerNorm before final projection\n        tokens = self.output_norm(tokens)\n        flow = self.flow_head(tokens)\n\n        return flow, None\n\n\nclass CorrBlock:\n    def __init__(self, fmaps, num_levels=4, radius=4, multiple_track_feats=False, padding_mode=\"zeros\"):\n        \"\"\"\n        Build a pyramid of feature maps from the input.\n\n        fmaps: Tensor (B, S, C, H, W)\n        num_levels: number of pyramid levels (each downsampled by factor 2)\n        radius: search radius for sampling correlation\n        multiple_track_feats: if True, split the target features per pyramid level\n        padding_mode: passed to grid_sample / bilinear_sampler\n        \"\"\"\n        B, S, C, H, W = fmaps.shape\n        self.S, self.C, self.H, self.W = S, C, H, W\n        self.num_levels = num_levels\n        self.radius = radius\n        self.padding_mode = padding_mode\n        self.multiple_track_feats = multiple_track_feats\n\n        # Build pyramid: each level is half the spatial resolution of the previous\n        self.fmaps_pyramid = [fmaps]  # level 0 is full resolution\n        current_fmaps = fmaps\n        for i in range(num_levels - 1):\n            B, S, C, H, W = current_fmaps.shape\n            # Merge batch & sequence dimensions\n            current_fmaps = current_fmaps.reshape(B * S, C, H, W)\n            # Avg pool down by factor 2\n            current_fmaps = F.avg_pool2d(current_fmaps, kernel_size=2, stride=2)\n            _, _, H_new, W_new = current_fmaps.shape\n            current_fmaps = current_fmaps.reshape(B, S, C, H_new, W_new)\n            self.fmaps_pyramid.append(current_fmaps)\n\n        # Precompute a delta grid (of shape (2r+1, 2r+1, 2)) for sampling.\n        # This grid is added to the (scaled) coordinate centroids.\n        r = self.radius\n        dx = torch.linspace(-r, r, 2 * r + 1, device=fmaps.device, dtype=fmaps.dtype)\n        dy = torch.linspace(-r, r, 2 * r + 1, device=fmaps.device, dtype=fmaps.dtype)\n        # delta: for every (dy,dx) displacement (i.e. Δx, Δy)\n        self.delta = torch.stack(torch.meshgrid(dy, dx, indexing=\"ij\"), dim=-1)  # shape: (2r+1, 2r+1, 2)\n\n    def corr_sample(self, targets, coords):\n        \"\"\"\n        Instead of storing the entire correlation pyramid, we compute each level's correlation\n        volume, sample it immediately, then discard it. This saves GPU memory.\n\n        Args:\n          targets: Tensor (B, S, N, C) — features for the current targets.\n          coords: Tensor (B, S, N, 2) — coordinates at full resolution.\n\n        Returns:\n          Tensor (B, S, N, L) where L = num_levels * (2*radius+1)**2 (concatenated sampled correlations)\n        \"\"\"\n        B, S, N, C = targets.shape\n\n        # If you have multiple track features, split them per level.\n        if self.multiple_track_feats:\n            targets_split = torch.split(targets, C // self.num_levels, dim=-1)\n\n        out_pyramid = []\n        for i, fmaps in enumerate(self.fmaps_pyramid):\n            # Get current spatial resolution H, W for this pyramid level.\n            B, S, C, H, W = fmaps.shape\n            # Reshape feature maps for correlation computation:\n            # fmap2s: (B, S, C, H*W)\n            fmap2s = fmaps.view(B, S, C, H * W)\n            # Choose appropriate target features.\n            fmap1 = targets_split[i] if self.multiple_track_feats else targets  # shape: (B, S, N, C)\n\n            # Compute correlation directly\n            corrs = compute_corr_level(fmap1, fmap2s, C)\n            corrs = corrs.view(B, S, N, H, W)\n\n            # Prepare sampling grid:\n            # Scale down the coordinates for the current level.\n            centroid_lvl = coords.reshape(B * S * N, 1, 1, 2) / (2**i)\n            # Make sure our precomputed delta grid is on the same device/dtype.\n            delta_lvl = self.delta.to(coords.device).to(coords.dtype)\n            # Now the grid for grid_sample is:\n            # coords_lvl = centroid_lvl + delta_lvl   (broadcasted over grid)\n            coords_lvl = centroid_lvl + delta_lvl.view(1, 2 * self.radius + 1, 2 * self.radius + 1, 2)\n\n            # Sample from the correlation volume using bilinear interpolation.\n            # We reshape corrs to (B * S * N, 1, H, W) so grid_sample acts over each target.\n            corrs_sampled = bilinear_sampler(\n                corrs.reshape(B * S * N, 1, H, W), coords_lvl, padding_mode=self.padding_mode\n            )\n            # The sampled output is (B * S * N, 1, 2r+1, 2r+1). Flatten the last two dims.\n            corrs_sampled = corrs_sampled.view(B, S, N, -1)  # Now shape: (B, S, N, (2r+1)^2)\n            out_pyramid.append(corrs_sampled)\n\n        # Concatenate all levels along the last dimension.\n        out = torch.cat(out_pyramid, dim=-1).contiguous()\n        return out\n\n\ndef compute_corr_level(fmap1, fmap2s, C):\n    # fmap1: (B, S, N, C)\n    # fmap2s: (B, S, C, H*W)\n    corrs = torch.matmul(fmap1, fmap2s)  # (B, S, N, H*W)\n    corrs = corrs.view(fmap1.shape[0], fmap1.shape[1], fmap1.shape[2], -1)  # (B, S, N, H*W)\n    return corrs / math.sqrt(C)\n"
  },
  {
    "path": "vggt/heads/track_modules/modules.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom functools import partial\nfrom typing import Callable\nimport collections\nfrom torch import Tensor\nfrom itertools import repeat\n\n\n# From PyTorch internals\ndef _ntuple(n):\n    def parse(x):\n        if isinstance(x, collections.abc.Iterable) and not isinstance(x, str):\n            return tuple(x)\n        return tuple(repeat(x, n))\n\n    return parse\n\n\ndef exists(val):\n    return val is not None\n\n\ndef default(val, d):\n    return val if exists(val) else d\n\n\nto_2tuple = _ntuple(2)\n\n\nclass ResidualBlock(nn.Module):\n    \"\"\"\n    ResidualBlock: construct a block of two conv layers with residual connections\n    \"\"\"\n\n    def __init__(self, in_planes, planes, norm_fn=\"group\", stride=1, kernel_size=3):\n        super(ResidualBlock, self).__init__()\n\n        self.conv1 = nn.Conv2d(\n            in_planes,\n            planes,\n            kernel_size=kernel_size,\n            padding=1,\n            stride=stride,\n            padding_mode=\"zeros\",\n        )\n        self.conv2 = nn.Conv2d(\n            planes,\n            planes,\n            kernel_size=kernel_size,\n            padding=1,\n            padding_mode=\"zeros\",\n        )\n        self.relu = nn.ReLU(inplace=True)\n\n        num_groups = planes // 8\n\n        if norm_fn == \"group\":\n            self.norm1 = nn.GroupNorm(num_groups=num_groups, num_channels=planes)\n            self.norm2 = nn.GroupNorm(num_groups=num_groups, num_channels=planes)\n            if not stride == 1:\n                self.norm3 = nn.GroupNorm(num_groups=num_groups, num_channels=planes)\n\n        elif norm_fn == \"batch\":\n            self.norm1 = nn.BatchNorm2d(planes)\n            self.norm2 = nn.BatchNorm2d(planes)\n            if not stride == 1:\n                self.norm3 = nn.BatchNorm2d(planes)\n\n        elif norm_fn == \"instance\":\n            self.norm1 = nn.InstanceNorm2d(planes)\n            self.norm2 = nn.InstanceNorm2d(planes)\n            if not stride == 1:\n                self.norm3 = nn.InstanceNorm2d(planes)\n\n        elif norm_fn == \"none\":\n            self.norm1 = nn.Sequential()\n            self.norm2 = nn.Sequential()\n            if not stride == 1:\n                self.norm3 = nn.Sequential()\n        else:\n            raise NotImplementedError\n\n        if stride == 1:\n            self.downsample = None\n        else:\n            self.downsample = nn.Sequential(\n                nn.Conv2d(in_planes, planes, kernel_size=1, stride=stride),\n                self.norm3,\n            )\n\n    def forward(self, x):\n        y = x\n        y = self.relu(self.norm1(self.conv1(y)))\n        y = self.relu(self.norm2(self.conv2(y)))\n\n        if self.downsample is not None:\n            x = self.downsample(x)\n\n        return self.relu(x + y)\n\n\nclass Mlp(nn.Module):\n    \"\"\"MLP as used in Vision Transformer, MLP-Mixer and related networks\"\"\"\n\n    def __init__(\n        self,\n        in_features,\n        hidden_features=None,\n        out_features=None,\n        act_layer=nn.GELU,\n        norm_layer=None,\n        bias=True,\n        drop=0.0,\n        use_conv=False,\n    ):\n        super().__init__()\n        out_features = out_features or in_features\n        hidden_features = hidden_features or in_features\n        bias = to_2tuple(bias)\n        drop_probs = to_2tuple(drop)\n        linear_layer = partial(nn.Conv2d, kernel_size=1) if use_conv else nn.Linear\n\n        self.fc1 = linear_layer(in_features, hidden_features, bias=bias[0])\n        self.act = act_layer()\n        self.drop1 = nn.Dropout(drop_probs[0])\n        self.fc2 = linear_layer(hidden_features, out_features, bias=bias[1])\n        self.drop2 = nn.Dropout(drop_probs[1])\n\n    def forward(self, x):\n        x = self.fc1(x)\n        x = self.act(x)\n        x = self.drop1(x)\n        x = self.fc2(x)\n        x = self.drop2(x)\n        return x\n\n\nclass AttnBlock(nn.Module):\n    def __init__(\n        self,\n        hidden_size,\n        num_heads,\n        attn_class: Callable[..., nn.Module] = nn.MultiheadAttention,\n        mlp_ratio=4.0,\n        **block_kwargs\n    ):\n        \"\"\"\n        Self attention block\n        \"\"\"\n        super().__init__()\n\n        self.norm1 = nn.LayerNorm(hidden_size)\n        self.norm2 = nn.LayerNorm(hidden_size)\n\n        self.attn = attn_class(embed_dim=hidden_size, num_heads=num_heads, batch_first=True, **block_kwargs)\n\n        mlp_hidden_dim = int(hidden_size * mlp_ratio)\n\n        self.mlp = Mlp(in_features=hidden_size, hidden_features=mlp_hidden_dim, drop=0)\n\n    def forward(self, x, mask=None):\n        # Prepare the mask for PyTorch's attention (it expects a different format)\n        # attn_mask = mask if mask is not None else None\n        # Normalize before attention\n        x = self.norm1(x)\n\n        # PyTorch's MultiheadAttention returns attn_output, attn_output_weights\n        # attn_output, _ = self.attn(x, x, x, attn_mask=attn_mask)\n\n        attn_output, _ = self.attn(x, x, x)\n\n        # Add & Norm\n        x = x + attn_output\n        x = x + self.mlp(self.norm2(x))\n        return x\n\n\nclass CrossAttnBlock(nn.Module):\n    def __init__(self, hidden_size, context_dim, num_heads=1, mlp_ratio=4.0, **block_kwargs):\n        \"\"\"\n        Cross attention block\n        \"\"\"\n        super().__init__()\n\n        self.norm1 = nn.LayerNorm(hidden_size)\n        self.norm_context = nn.LayerNorm(hidden_size)\n        self.norm2 = nn.LayerNorm(hidden_size)\n\n        self.cross_attn = nn.MultiheadAttention(\n            embed_dim=hidden_size, num_heads=num_heads, batch_first=True, **block_kwargs\n        )\n\n        mlp_hidden_dim = int(hidden_size * mlp_ratio)\n\n        self.mlp = Mlp(in_features=hidden_size, hidden_features=mlp_hidden_dim, drop=0)\n\n    def forward(self, x, context, mask=None):\n        # Normalize inputs\n        x = self.norm1(x)\n        context = self.norm_context(context)\n\n        # Apply cross attention\n        # Note: nn.MultiheadAttention returns attn_output, attn_output_weights\n        attn_output, _ = self.cross_attn(x, context, context, attn_mask=mask)\n\n        # Add & Norm\n        x = x + attn_output\n        x = x + self.mlp(self.norm2(x))\n        return x\n"
  },
  {
    "path": "vggt/heads/track_modules/utils.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n# Modified from https://github.com/facebookresearch/vggsfm\n# and https://github.com/facebookresearch/co-tracker/tree/main\n\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\n\nfrom typing import Optional, Tuple, Union\n\n\ndef get_2d_sincos_pos_embed(embed_dim: int, grid_size: Union[int, Tuple[int, int]], return_grid=False) -> torch.Tensor:\n    \"\"\"\n    This function initializes a grid and generates a 2D positional embedding using sine and cosine functions.\n    It is a wrapper of get_2d_sincos_pos_embed_from_grid.\n    Args:\n    - embed_dim: The embedding dimension.\n    - grid_size: The grid size.\n    Returns:\n    - pos_embed: The generated 2D positional embedding.\n    \"\"\"\n    if isinstance(grid_size, tuple):\n        grid_size_h, grid_size_w = grid_size\n    else:\n        grid_size_h = grid_size_w = grid_size\n    grid_h = torch.arange(grid_size_h, dtype=torch.float)\n    grid_w = torch.arange(grid_size_w, dtype=torch.float)\n    grid = torch.meshgrid(grid_w, grid_h, indexing=\"xy\")\n    grid = torch.stack(grid, dim=0)\n    grid = grid.reshape([2, 1, grid_size_h, grid_size_w])\n    pos_embed = get_2d_sincos_pos_embed_from_grid(embed_dim, grid)\n    if return_grid:\n        return (\n            pos_embed.reshape(1, grid_size_h, grid_size_w, -1).permute(0, 3, 1, 2),\n            grid,\n        )\n    return pos_embed.reshape(1, grid_size_h, grid_size_w, -1).permute(0, 3, 1, 2)\n\n\ndef get_2d_sincos_pos_embed_from_grid(embed_dim: int, grid: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    This function generates a 2D positional embedding from a given grid using sine and cosine functions.\n\n    Args:\n    - embed_dim: The embedding dimension.\n    - grid: The grid to generate the embedding from.\n\n    Returns:\n    - emb: The generated 2D positional embedding.\n    \"\"\"\n    assert embed_dim % 2 == 0\n\n    # use half of dimensions to encode grid_h\n    emb_h = get_1d_sincos_pos_embed_from_grid(embed_dim // 2, grid[0])  # (H*W, D/2)\n    emb_w = get_1d_sincos_pos_embed_from_grid(embed_dim // 2, grid[1])  # (H*W, D/2)\n\n    emb = torch.cat([emb_h, emb_w], dim=2)  # (H*W, D)\n    return emb\n\n\ndef get_1d_sincos_pos_embed_from_grid(embed_dim: int, pos: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    This function generates a 1D positional embedding from a given grid using sine and cosine functions.\n\n    Args:\n    - embed_dim: The embedding dimension.\n    - pos: The position to generate the embedding from.\n\n    Returns:\n    - emb: The generated 1D positional embedding.\n    \"\"\"\n    assert embed_dim % 2 == 0\n    omega = torch.arange(embed_dim // 2, dtype=torch.double)\n    omega /= embed_dim / 2.0\n    omega = 1.0 / 10000**omega  # (D/2,)\n\n    pos = pos.reshape(-1)  # (M,)\n    out = torch.einsum(\"m,d->md\", pos, omega)  # (M, D/2), outer product\n\n    emb_sin = torch.sin(out)  # (M, D/2)\n    emb_cos = torch.cos(out)  # (M, D/2)\n\n    emb = torch.cat([emb_sin, emb_cos], dim=1)  # (M, D)\n    return emb[None].float()\n\n\ndef get_2d_embedding(xy: torch.Tensor, C: int, cat_coords: bool = True) -> torch.Tensor:\n    \"\"\"\n    This function generates a 2D positional embedding from given coordinates using sine and cosine functions.\n\n    Args:\n    - xy: The coordinates to generate the embedding from.\n    - C: The size of the embedding.\n    - cat_coords: A flag to indicate whether to concatenate the original coordinates to the embedding.\n\n    Returns:\n    - pe: The generated 2D positional embedding.\n    \"\"\"\n    B, N, D = xy.shape\n    assert D == 2\n\n    x = xy[:, :, 0:1]\n    y = xy[:, :, 1:2]\n    div_term = (torch.arange(0, C, 2, device=xy.device, dtype=torch.float32) * (1000.0 / C)).reshape(1, 1, int(C / 2))\n\n    pe_x = torch.zeros(B, N, C, device=xy.device, dtype=torch.float32)\n    pe_y = torch.zeros(B, N, C, device=xy.device, dtype=torch.float32)\n\n    pe_x[:, :, 0::2] = torch.sin(x * div_term)\n    pe_x[:, :, 1::2] = torch.cos(x * div_term)\n\n    pe_y[:, :, 0::2] = torch.sin(y * div_term)\n    pe_y[:, :, 1::2] = torch.cos(y * div_term)\n\n    pe = torch.cat([pe_x, pe_y], dim=2)  # (B, N, C*3)\n    if cat_coords:\n        pe = torch.cat([xy, pe], dim=2)  # (B, N, C*3+3)\n    return pe\n\n\ndef bilinear_sampler(input, coords, align_corners=True, padding_mode=\"border\"):\n    r\"\"\"Sample a tensor using bilinear interpolation\n\n    `bilinear_sampler(input, coords)` samples a tensor :attr:`input` at\n    coordinates :attr:`coords` using bilinear interpolation. It is the same\n    as `torch.nn.functional.grid_sample()` but with a different coordinate\n    convention.\n\n    The input tensor is assumed to be of shape :math:`(B, C, H, W)`, where\n    :math:`B` is the batch size, :math:`C` is the number of channels,\n    :math:`H` is the height of the image, and :math:`W` is the width of the\n    image. The tensor :attr:`coords` of shape :math:`(B, H_o, W_o, 2)` is\n    interpreted as an array of 2D point coordinates :math:`(x_i,y_i)`.\n\n    Alternatively, the input tensor can be of size :math:`(B, C, T, H, W)`,\n    in which case sample points are triplets :math:`(t_i,x_i,y_i)`. Note\n    that in this case the order of the components is slightly different\n    from `grid_sample()`, which would expect :math:`(x_i,y_i,t_i)`.\n\n    If `align_corners` is `True`, the coordinate :math:`x` is assumed to be\n    in the range :math:`[0,W-1]`, with 0 corresponding to the center of the\n    left-most image pixel :math:`W-1` to the center of the right-most\n    pixel.\n\n    If `align_corners` is `False`, the coordinate :math:`x` is assumed to\n    be in the range :math:`[0,W]`, with 0 corresponding to the left edge of\n    the left-most pixel :math:`W` to the right edge of the right-most\n    pixel.\n\n    Similar conventions apply to the :math:`y` for the range\n    :math:`[0,H-1]` and :math:`[0,H]` and to :math:`t` for the range\n    :math:`[0,T-1]` and :math:`[0,T]`.\n\n    Args:\n        input (Tensor): batch of input images.\n        coords (Tensor): batch of coordinates.\n        align_corners (bool, optional): Coordinate convention. Defaults to `True`.\n        padding_mode (str, optional): Padding mode. Defaults to `\"border\"`.\n\n    Returns:\n        Tensor: sampled points.\n    \"\"\"\n    coords = coords.detach().clone()\n    ############################################################\n    # IMPORTANT:\n    coords = coords.to(input.device).to(input.dtype)\n    ############################################################\n\n    sizes = input.shape[2:]\n\n    assert len(sizes) in [2, 3]\n\n    if len(sizes) == 3:\n        # t x y -> x y t to match dimensions T H W in grid_sample\n        coords = coords[..., [1, 2, 0]]\n\n    if align_corners:\n        scale = torch.tensor(\n            [2 / max(size - 1, 1) for size in reversed(sizes)], device=coords.device, dtype=coords.dtype\n        )\n    else:\n        scale = torch.tensor([2 / size for size in reversed(sizes)], device=coords.device, dtype=coords.dtype)\n\n    coords.mul_(scale)  # coords = coords * scale\n    coords.sub_(1)  # coords = coords - 1\n\n    return F.grid_sample(input, coords, align_corners=align_corners, padding_mode=padding_mode)\n\n\ndef sample_features4d(input, coords):\n    r\"\"\"Sample spatial features\n\n    `sample_features4d(input, coords)` samples the spatial features\n    :attr:`input` represented by a 4D tensor :math:`(B, C, H, W)`.\n\n    The field is sampled at coordinates :attr:`coords` using bilinear\n    interpolation. :attr:`coords` is assumed to be of shape :math:`(B, R,\n    2)`, where each sample has the format :math:`(x_i, y_i)`. This uses the\n    same convention as :func:`bilinear_sampler` with `align_corners=True`.\n\n    The output tensor has one feature per point, and has shape :math:`(B,\n    R, C)`.\n\n    Args:\n        input (Tensor): spatial features.\n        coords (Tensor): points.\n\n    Returns:\n        Tensor: sampled features.\n    \"\"\"\n\n    B, _, _, _ = input.shape\n\n    # B R 2 -> B R 1 2\n    coords = coords.unsqueeze(2)\n\n    # B C R 1\n    feats = bilinear_sampler(input, coords)\n\n    return feats.permute(0, 2, 1, 3).view(B, -1, feats.shape[1] * feats.shape[3])  # B C R 1 -> B R C\n"
  },
  {
    "path": "vggt/heads/utils.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch\nimport torch.nn as nn\n\n\ndef position_grid_to_embed(pos_grid: torch.Tensor, embed_dim: int, omega_0: float = 100) -> torch.Tensor:\n    \"\"\"\n    Convert 2D position grid (HxWx2) to sinusoidal embeddings (HxWxC)\n\n    Args:\n        pos_grid: Tensor of shape (H, W, 2) containing 2D coordinates\n        embed_dim: Output channel dimension for embeddings\n\n    Returns:\n        Tensor of shape (H, W, embed_dim) with positional embeddings\n    \"\"\"\n    H, W, grid_dim = pos_grid.shape\n    assert grid_dim == 2\n    pos_flat = pos_grid.reshape(-1, grid_dim)  # Flatten to (H*W, 2)\n\n    # Process x and y coordinates separately\n    emb_x = make_sincos_pos_embed(embed_dim // 2, pos_flat[:, 0], omega_0=omega_0)  # [1, H*W, D/2]\n    emb_y = make_sincos_pos_embed(embed_dim // 2, pos_flat[:, 1], omega_0=omega_0)  # [1, H*W, D/2]\n\n    # Combine and reshape\n    emb = torch.cat([emb_x, emb_y], dim=-1)  # [1, H*W, D]\n\n    return emb.view(H, W, embed_dim)  # [H, W, D]\n\n\ndef make_sincos_pos_embed(embed_dim: int, pos: torch.Tensor, omega_0: float = 100) -> torch.Tensor:\n    \"\"\"\n    This function generates a 1D positional embedding from a given grid using sine and cosine functions.\n\n    Args:\n    - embed_dim: The embedding dimension.\n    - pos: The position to generate the embedding from.\n\n    Returns:\n    - emb: The generated 1D positional embedding.\n    \"\"\"\n    assert embed_dim % 2 == 0\n    omega = torch.arange(embed_dim // 2, dtype=torch.double, device=pos.device)\n    omega /= embed_dim / 2.0\n    omega = 1.0 / omega_0**omega  # (D/2,)\n\n    pos = pos.reshape(-1)  # (M,)\n    out = torch.einsum(\"m,d->md\", pos, omega)  # (M, D/2), outer product\n\n    emb_sin = torch.sin(out)  # (M, D/2)\n    emb_cos = torch.cos(out)  # (M, D/2)\n\n    emb = torch.cat([emb_sin, emb_cos], dim=1)  # (M, D)\n    return emb.float()\n\n\n# Inspired by https://github.com/microsoft/moge\n\n\ndef create_uv_grid(\n    width: int, height: int, aspect_ratio: float = None, dtype: torch.dtype = None, device: torch.device = None\n) -> torch.Tensor:\n    \"\"\"\n    Create a normalized UV grid of shape (width, height, 2).\n\n    The grid spans horizontally and vertically according to an aspect ratio,\n    ensuring the top-left corner is at (-x_span, -y_span) and the bottom-right\n    corner is at (x_span, y_span), normalized by the diagonal of the plane.\n\n    Args:\n        width (int): Number of points horizontally.\n        height (int): Number of points vertically.\n        aspect_ratio (float, optional): Width-to-height ratio. Defaults to width/height.\n        dtype (torch.dtype, optional): Data type of the resulting tensor.\n        device (torch.device, optional): Device on which the tensor is created.\n\n    Returns:\n        torch.Tensor: A (width, height, 2) tensor of UV coordinates.\n    \"\"\"\n    # Derive aspect ratio if not explicitly provided\n    if aspect_ratio is None:\n        aspect_ratio = float(width) / float(height)\n\n    # Compute normalized spans for X and Y\n    diag_factor = (aspect_ratio**2 + 1.0) ** 0.5\n    span_x = aspect_ratio / diag_factor\n    span_y = 1.0 / diag_factor\n\n    # Establish the linspace boundaries\n    left_x = -span_x * (width - 1) / width\n    right_x = span_x * (width - 1) / width\n    top_y = -span_y * (height - 1) / height\n    bottom_y = span_y * (height - 1) / height\n\n    # Generate 1D coordinates\n    x_coords = torch.linspace(left_x, right_x, steps=width, dtype=dtype, device=device)\n    y_coords = torch.linspace(top_y, bottom_y, steps=height, dtype=dtype, device=device)\n\n    # Create 2D meshgrid (width x height) and stack into UV\n    uu, vv = torch.meshgrid(x_coords, y_coords, indexing=\"xy\")\n    uv_grid = torch.stack((uu, vv), dim=-1)\n\n    return uv_grid\n"
  },
  {
    "path": "vggt/layers/__init__.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nfrom .mlp import Mlp\nfrom .patch_embed import PatchEmbed\nfrom .swiglu_ffn import SwiGLUFFN, SwiGLUFFNFused\nfrom .block import NestedTensorBlock\nfrom .attention import MemEffAttention\n"
  },
  {
    "path": "vggt/layers/attention.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the Apache License, Version 2.0\n# found in the LICENSE file in the root directory of this source tree.\n\n# References:\n#   https://github.com/facebookresearch/dino/blob/master/vision_transformer.py\n#   https://github.com/rwightman/pytorch-image-models/tree/master/timm/models/vision_transformer.py\n\nimport logging\nimport os\nimport warnings\n\nfrom torch import Tensor\nfrom torch import nn\nimport torch.nn.functional as F\n\nXFORMERS_AVAILABLE = False\n\n\nclass Attention(nn.Module):\n    def __init__(\n        self,\n        dim: int,\n        num_heads: int = 8,\n        qkv_bias: bool = True,\n        proj_bias: bool = True,\n        attn_drop: float = 0.0,\n        proj_drop: float = 0.0,\n        norm_layer: nn.Module = nn.LayerNorm,\n        qk_norm: bool = False,\n        fused_attn: bool = True,  # use F.scaled_dot_product_attention or not\n        rope=None,\n    ) -> None:\n        super().__init__()\n        assert dim % num_heads == 0, \"dim should be divisible by num_heads\"\n        self.num_heads = num_heads\n        self.head_dim = dim // num_heads\n        self.scale = self.head_dim**-0.5\n        self.fused_attn = fused_attn\n\n        self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias)\n        self.q_norm = norm_layer(self.head_dim) if qk_norm else nn.Identity()\n        self.k_norm = norm_layer(self.head_dim) if qk_norm else nn.Identity()\n        self.attn_drop = nn.Dropout(attn_drop)\n        self.proj = nn.Linear(dim, dim, bias=proj_bias)\n        self.proj_drop = nn.Dropout(proj_drop)\n        self.rope = rope\n\n    def forward(self, x: Tensor, pos=None) -> Tensor:\n        B, N, C = x.shape\n        qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, self.head_dim).permute(2, 0, 3, 1, 4)\n        q, k, v = qkv.unbind(0)\n        q, k = self.q_norm(q), self.k_norm(k)\n\n        if self.rope is not None:\n            q = self.rope(q, pos)\n            k = self.rope(k, pos)\n\n        if self.fused_attn:\n            x = F.scaled_dot_product_attention(\n                q,\n                k,\n                v,\n                dropout_p=self.attn_drop.p if self.training else 0.0,\n            )\n        else:\n            q = q * self.scale\n            attn = q @ k.transpose(-2, -1)\n            attn = attn.softmax(dim=-1)\n            attn = self.attn_drop(attn)\n            x = attn @ v\n\n        x = x.transpose(1, 2).reshape(B, N, C)\n        x = self.proj(x)\n        x = self.proj_drop(x)\n        return x\n\n\nclass MemEffAttention(Attention):\n    def forward(self, x: Tensor, attn_bias=None, pos=None) -> Tensor:\n        assert pos is None\n        if not XFORMERS_AVAILABLE:\n            if attn_bias is not None:\n                raise AssertionError(\"xFormers is required for using nested tensors\")\n            return super().forward(x)\n\n        B, N, C = x.shape\n        qkv = self.qkv(x).reshape(B, N, 3, self.num_heads, C // self.num_heads)\n\n        q, k, v = unbind(qkv, 2)\n\n        x = memory_efficient_attention(q, k, v, attn_bias=attn_bias)\n        x = x.reshape([B, N, C])\n\n        x = self.proj(x)\n        x = self.proj_drop(x)\n        return x\n"
  },
  {
    "path": "vggt/layers/block.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the Apache License, Version 2.0\n# found in the LICENSE file in the root directory of this source tree.\n\n# References:\n#   https://github.com/facebookresearch/dino/blob/master/vision_transformer.py\n#   https://github.com/rwightman/pytorch-image-models/tree/master/timm/layers/patch_embed.py\n\nimport logging\nimport os\nfrom typing import Callable, List, Any, Tuple, Dict\nimport warnings\n\nimport torch\nfrom torch import nn, Tensor\n\nfrom .attention import Attention\nfrom .drop_path import DropPath\nfrom .layer_scale import LayerScale\nfrom .mlp import Mlp\n\n\nXFORMERS_AVAILABLE = False\n\n\nclass Block(nn.Module):\n    def __init__(\n        self,\n        dim: int,\n        num_heads: int,\n        mlp_ratio: float = 4.0,\n        qkv_bias: bool = True,\n        proj_bias: bool = True,\n        ffn_bias: bool = True,\n        drop: float = 0.0,\n        attn_drop: float = 0.0,\n        init_values=None,\n        drop_path: float = 0.0,\n        act_layer: Callable[..., nn.Module] = nn.GELU,\n        norm_layer: Callable[..., nn.Module] = nn.LayerNorm,\n        attn_class: Callable[..., nn.Module] = Attention,\n        ffn_layer: Callable[..., nn.Module] = Mlp,\n        qk_norm: bool = False,\n        fused_attn: bool = True,  # use F.scaled_dot_product_attention or not\n        rope=None,\n    ) -> None:\n        super().__init__()\n\n        self.norm1 = norm_layer(dim)\n\n        self.attn = attn_class(\n            dim,\n            num_heads=num_heads,\n            qkv_bias=qkv_bias,\n            proj_bias=proj_bias,\n            attn_drop=attn_drop,\n            proj_drop=drop,\n            qk_norm=qk_norm,\n            fused_attn=fused_attn,\n            rope=rope,\n        )\n\n        self.ls1 = LayerScale(dim, init_values=init_values) if init_values else nn.Identity()\n        self.drop_path1 = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()\n\n        self.norm2 = norm_layer(dim)\n        mlp_hidden_dim = int(dim * mlp_ratio)\n        self.mlp = ffn_layer(\n            in_features=dim,\n            hidden_features=mlp_hidden_dim,\n            act_layer=act_layer,\n            drop=drop,\n            bias=ffn_bias,\n        )\n        self.ls2 = LayerScale(dim, init_values=init_values) if init_values else nn.Identity()\n        self.drop_path2 = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()\n\n        self.sample_drop_ratio = drop_path\n\n    def forward(self, x: Tensor, pos=None) -> Tensor:\n        def attn_residual_func(x: Tensor, pos=None) -> Tensor:\n            return self.ls1(self.attn(self.norm1(x), pos=pos))\n\n        def ffn_residual_func(x: Tensor) -> Tensor:\n            return self.ls2(self.mlp(self.norm2(x)))\n\n        if self.training and self.sample_drop_ratio > 0.1:\n            # the overhead is compensated only for a drop path rate larger than 0.1\n            x = drop_add_residual_stochastic_depth(\n                x,\n                pos=pos,\n                residual_func=attn_residual_func,\n                sample_drop_ratio=self.sample_drop_ratio,\n            )\n            x = drop_add_residual_stochastic_depth(\n                x,\n                residual_func=ffn_residual_func,\n                sample_drop_ratio=self.sample_drop_ratio,\n            )\n        elif self.training and self.sample_drop_ratio > 0.0:\n            x = x + self.drop_path1(attn_residual_func(x, pos=pos))\n            x = x + self.drop_path1(ffn_residual_func(x))  # FIXME: drop_path2\n        else:\n            x = x + attn_residual_func(x, pos=pos)\n            x = x + ffn_residual_func(x)\n        return x\n\n\ndef drop_add_residual_stochastic_depth(\n    x: Tensor,\n    residual_func: Callable[[Tensor], Tensor],\n    sample_drop_ratio: float = 0.0,\n    pos=None,\n) -> Tensor:\n    # 1) extract subset using permutation\n    b, n, d = x.shape\n    sample_subset_size = max(int(b * (1 - sample_drop_ratio)), 1)\n    brange = (torch.randperm(b, device=x.device))[:sample_subset_size]\n    x_subset = x[brange]\n\n    # 2) apply residual_func to get residual\n    if pos is not None:\n        # if necessary, apply rope to the subset\n        pos = pos[brange]\n        residual = residual_func(x_subset, pos=pos)\n    else:\n        residual = residual_func(x_subset)\n\n    x_flat = x.flatten(1)\n    residual = residual.flatten(1)\n\n    residual_scale_factor = b / sample_subset_size\n\n    # 3) add the residual\n    x_plus_residual = torch.index_add(x_flat, 0, brange, residual.to(dtype=x.dtype), alpha=residual_scale_factor)\n    return x_plus_residual.view_as(x)\n\n\ndef get_branges_scales(x, sample_drop_ratio=0.0):\n    b, n, d = x.shape\n    sample_subset_size = max(int(b * (1 - sample_drop_ratio)), 1)\n    brange = (torch.randperm(b, device=x.device))[:sample_subset_size]\n    residual_scale_factor = b / sample_subset_size\n    return brange, residual_scale_factor\n\n\ndef add_residual(x, brange, residual, residual_scale_factor, scaling_vector=None):\n    if scaling_vector is None:\n        x_flat = x.flatten(1)\n        residual = residual.flatten(1)\n        x_plus_residual = torch.index_add(x_flat, 0, brange, residual.to(dtype=x.dtype), alpha=residual_scale_factor)\n    else:\n        x_plus_residual = scaled_index_add(\n            x, brange, residual.to(dtype=x.dtype), scaling=scaling_vector, alpha=residual_scale_factor\n        )\n    return x_plus_residual\n\n\nattn_bias_cache: Dict[Tuple, Any] = {}\n\n\ndef get_attn_bias_and_cat(x_list, branges=None):\n    \"\"\"\n    this will perform the index select, cat the tensors, and provide the attn_bias from cache\n    \"\"\"\n    batch_sizes = [b.shape[0] for b in branges] if branges is not None else [x.shape[0] for x in x_list]\n    all_shapes = tuple((b, x.shape[1]) for b, x in zip(batch_sizes, x_list))\n    if all_shapes not in attn_bias_cache.keys():\n        seqlens = []\n        for b, x in zip(batch_sizes, x_list):\n            for _ in range(b):\n                seqlens.append(x.shape[1])\n        attn_bias = fmha.BlockDiagonalMask.from_seqlens(seqlens)\n        attn_bias._batch_sizes = batch_sizes\n        attn_bias_cache[all_shapes] = attn_bias\n\n    if branges is not None:\n        cat_tensors = index_select_cat([x.flatten(1) for x in x_list], branges).view(1, -1, x_list[0].shape[-1])\n    else:\n        tensors_bs1 = tuple(x.reshape([1, -1, *x.shape[2:]]) for x in x_list)\n        cat_tensors = torch.cat(tensors_bs1, dim=1)\n\n    return attn_bias_cache[all_shapes], cat_tensors\n\n\ndef drop_add_residual_stochastic_depth_list(\n    x_list: List[Tensor],\n    residual_func: Callable[[Tensor, Any], Tensor],\n    sample_drop_ratio: float = 0.0,\n    scaling_vector=None,\n) -> Tensor:\n    # 1) generate random set of indices for dropping samples in the batch\n    branges_scales = [get_branges_scales(x, sample_drop_ratio=sample_drop_ratio) for x in x_list]\n    branges = [s[0] for s in branges_scales]\n    residual_scale_factors = [s[1] for s in branges_scales]\n\n    # 2) get attention bias and index+concat the tensors\n    attn_bias, x_cat = get_attn_bias_and_cat(x_list, branges)\n\n    # 3) apply residual_func to get residual, and split the result\n    residual_list = attn_bias.split(residual_func(x_cat, attn_bias=attn_bias))  # type: ignore\n\n    outputs = []\n    for x, brange, residual, residual_scale_factor in zip(x_list, branges, residual_list, residual_scale_factors):\n        outputs.append(add_residual(x, brange, residual, residual_scale_factor, scaling_vector).view_as(x))\n    return outputs\n\n\nclass NestedTensorBlock(Block):\n    def forward_nested(self, x_list: List[Tensor]) -> List[Tensor]:\n        \"\"\"\n        x_list contains a list of tensors to nest together and run\n        \"\"\"\n        assert isinstance(self.attn, MemEffAttention)\n\n        if self.training and self.sample_drop_ratio > 0.0:\n\n            def attn_residual_func(x: Tensor, attn_bias=None) -> Tensor:\n                return self.attn(self.norm1(x), attn_bias=attn_bias)\n\n            def ffn_residual_func(x: Tensor, attn_bias=None) -> Tensor:\n                return self.mlp(self.norm2(x))\n\n            x_list = drop_add_residual_stochastic_depth_list(\n                x_list,\n                residual_func=attn_residual_func,\n                sample_drop_ratio=self.sample_drop_ratio,\n                scaling_vector=self.ls1.gamma if isinstance(self.ls1, LayerScale) else None,\n            )\n            x_list = drop_add_residual_stochastic_depth_list(\n                x_list,\n                residual_func=ffn_residual_func,\n                sample_drop_ratio=self.sample_drop_ratio,\n                scaling_vector=self.ls2.gamma if isinstance(self.ls1, LayerScale) else None,\n            )\n            return x_list\n        else:\n\n            def attn_residual_func(x: Tensor, attn_bias=None) -> Tensor:\n                return self.ls1(self.attn(self.norm1(x), attn_bias=attn_bias))\n\n            def ffn_residual_func(x: Tensor, attn_bias=None) -> Tensor:\n                return self.ls2(self.mlp(self.norm2(x)))\n\n            attn_bias, x = get_attn_bias_and_cat(x_list)\n            x = x + attn_residual_func(x, attn_bias=attn_bias)\n            x = x + ffn_residual_func(x)\n            return attn_bias.split(x)\n\n    def forward(self, x_or_x_list):\n        if isinstance(x_or_x_list, Tensor):\n            return super().forward(x_or_x_list)\n        elif isinstance(x_or_x_list, list):\n            if not XFORMERS_AVAILABLE:\n                raise AssertionError(\"xFormers is required for using nested tensors\")\n            return self.forward_nested(x_or_x_list)\n        else:\n            raise AssertionError\n"
  },
  {
    "path": "vggt/layers/drop_path.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the Apache License, Version 2.0\n# found in the LICENSE file in the root directory of this source tree.\n\n# References:\n#   https://github.com/facebookresearch/dino/blob/master/vision_transformer.py\n#   https://github.com/rwightman/pytorch-image-models/tree/master/timm/layers/drop.py\n\n\nfrom torch import nn\n\n\ndef drop_path(x, drop_prob: float = 0.0, training: bool = False):\n    if drop_prob == 0.0 or not training:\n        return x\n    keep_prob = 1 - drop_prob\n    shape = (x.shape[0],) + (1,) * (x.ndim - 1)  # work with diff dim tensors, not just 2D ConvNets\n    random_tensor = x.new_empty(shape).bernoulli_(keep_prob)\n    if keep_prob > 0.0:\n        random_tensor.div_(keep_prob)\n    output = x * random_tensor\n    return output\n\n\nclass DropPath(nn.Module):\n    \"\"\"Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).\"\"\"\n\n    def __init__(self, drop_prob=None):\n        super(DropPath, self).__init__()\n        self.drop_prob = drop_prob\n\n    def forward(self, x):\n        return drop_path(x, self.drop_prob, self.training)\n"
  },
  {
    "path": "vggt/layers/layer_scale.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the Apache License, Version 2.0\n# found in the LICENSE file in the root directory of this source tree.\n\n# Modified from: https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/vision_transformer.py#L103-L110\n\nfrom typing import Union\n\nimport torch\nfrom torch import Tensor\nfrom torch import nn\n\n\nclass LayerScale(nn.Module):\n    def __init__(\n        self,\n        dim: int,\n        init_values: Union[float, Tensor] = 1e-5,\n        inplace: bool = False,\n    ) -> None:\n        super().__init__()\n        self.inplace = inplace\n        self.gamma = nn.Parameter(init_values * torch.ones(dim))\n\n    def forward(self, x: Tensor) -> Tensor:\n        return x.mul_(self.gamma) if self.inplace else x * self.gamma\n"
  },
  {
    "path": "vggt/layers/mlp.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the Apache License, Version 2.0\n# found in the LICENSE file in the root directory of this source tree.\n\n# References:\n#   https://github.com/facebookresearch/dino/blob/master/vision_transformer.py\n#   https://github.com/rwightman/pytorch-image-models/tree/master/timm/layers/mlp.py\n\n\nfrom typing import Callable, Optional\n\nfrom torch import Tensor, nn\n\n\nclass Mlp(nn.Module):\n    def __init__(\n        self,\n        in_features: int,\n        hidden_features: Optional[int] = None,\n        out_features: Optional[int] = None,\n        act_layer: Callable[..., nn.Module] = nn.GELU,\n        drop: float = 0.0,\n        bias: bool = True,\n    ) -> None:\n        super().__init__()\n        out_features = out_features or in_features\n        hidden_features = hidden_features or in_features\n        self.fc1 = nn.Linear(in_features, hidden_features, bias=bias)\n        self.act = act_layer()\n        self.fc2 = nn.Linear(hidden_features, out_features, bias=bias)\n        self.drop = nn.Dropout(drop)\n\n    def forward(self, x: Tensor) -> Tensor:\n        x = self.fc1(x)\n        x = self.act(x)\n        x = self.drop(x)\n        x = self.fc2(x)\n        x = self.drop(x)\n        return x\n"
  },
  {
    "path": "vggt/layers/patch_embed.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the Apache License, Version 2.0\n# found in the LICENSE file in the root directory of this source tree.\n\n# References:\n#   https://github.com/facebookresearch/dino/blob/master/vision_transformer.py\n#   https://github.com/rwightman/pytorch-image-models/tree/master/timm/layers/patch_embed.py\n\nfrom typing import Callable, Optional, Tuple, Union\n\nfrom torch import Tensor\nimport torch.nn as nn\n\n\ndef make_2tuple(x):\n    if isinstance(x, tuple):\n        assert len(x) == 2\n        return x\n\n    assert isinstance(x, int)\n    return (x, x)\n\n\nclass PatchEmbed(nn.Module):\n    \"\"\"\n    2D image to patch embedding: (B,C,H,W) -> (B,N,D)\n\n    Args:\n        img_size: Image size.\n        patch_size: Patch token size.\n        in_chans: Number of input image channels.\n        embed_dim: Number of linear projection output channels.\n        norm_layer: Normalization layer.\n    \"\"\"\n\n    def __init__(\n        self,\n        img_size: Union[int, Tuple[int, int]] = 224,\n        patch_size: Union[int, Tuple[int, int]] = 16,\n        in_chans: int = 3,\n        embed_dim: int = 768,\n        norm_layer: Optional[Callable] = None,\n        flatten_embedding: bool = True,\n    ) -> None:\n        super().__init__()\n\n        image_HW = make_2tuple(img_size)\n        patch_HW = make_2tuple(patch_size)\n        patch_grid_size = (\n            image_HW[0] // patch_HW[0],\n            image_HW[1] // patch_HW[1],\n        )\n\n        self.img_size = image_HW\n        self.patch_size = patch_HW\n        self.patches_resolution = patch_grid_size\n        self.num_patches = patch_grid_size[0] * patch_grid_size[1]\n\n        self.in_chans = in_chans\n        self.embed_dim = embed_dim\n\n        self.flatten_embedding = flatten_embedding\n\n        self.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_HW, stride=patch_HW)\n        self.norm = norm_layer(embed_dim) if norm_layer else nn.Identity()\n\n    def forward(self, x: Tensor) -> Tensor:\n        _, _, H, W = x.shape\n        patch_H, patch_W = self.patch_size\n\n        assert H % patch_H == 0, f\"Input image height {H} is not a multiple of patch height {patch_H}\"\n        assert W % patch_W == 0, f\"Input image width {W} is not a multiple of patch width: {patch_W}\"\n\n        x = self.proj(x)  # B C H W\n        H, W = x.size(2), x.size(3)\n        x = x.flatten(2).transpose(1, 2)  # B HW C\n        x = self.norm(x)\n        if not self.flatten_embedding:\n            x = x.reshape(-1, H, W, self.embed_dim)  # B H W C\n        return x\n\n    def flops(self) -> float:\n        Ho, Wo = self.patches_resolution\n        flops = Ho * Wo * self.embed_dim * self.in_chans * (self.patch_size[0] * self.patch_size[1])\n        if self.norm is not None:\n            flops += Ho * Wo * self.embed_dim\n        return flops\n"
  },
  {
    "path": "vggt/layers/rope.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the Apache License, Version 2.0\n# found in the LICENSE file in the root directory of this source tree.\n\n\n# Implementation of 2D Rotary Position Embeddings (RoPE).\n\n# This module provides a clean implementation of 2D Rotary Position Embeddings,\n# which extends the original RoPE concept to handle 2D spatial positions.\n\n# Inspired by:\n#         https://github.com/meta-llama/codellama/blob/main/llama/model.py\n#         https://github.com/naver-ai/rope-vit\n\n\nimport numpy as np\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom typing import Dict, Tuple\n\n\nclass PositionGetter:\n    \"\"\"Generates and caches 2D spatial positions for patches in a grid.\n\n    This class efficiently manages the generation of spatial coordinates for patches\n    in a 2D grid, caching results to avoid redundant computations.\n\n    Attributes:\n        position_cache: Dictionary storing precomputed position tensors for different\n            grid dimensions.\n    \"\"\"\n\n    def __init__(self):\n        \"\"\"Initializes the position generator with an empty cache.\"\"\"\n        self.position_cache: Dict[Tuple[int, int], torch.Tensor] = {}\n\n    def __call__(self, batch_size: int, height: int, width: int, device: torch.device) -> torch.Tensor:\n        \"\"\"Generates spatial positions for a batch of patches.\n\n        Args:\n            batch_size: Number of samples in the batch.\n            height: Height of the grid in patches.\n            width: Width of the grid in patches.\n            device: Target device for the position tensor.\n\n        Returns:\n            Tensor of shape (batch_size, height*width, 2) containing y,x coordinates\n            for each position in the grid, repeated for each batch item.\n        \"\"\"\n        if (height, width) not in self.position_cache:\n            y_coords = torch.arange(height, device=device)\n            x_coords = torch.arange(width, device=device)\n            positions = torch.cartesian_prod(y_coords, x_coords)\n            self.position_cache[height, width] = positions\n\n        cached_positions = self.position_cache[height, width]\n        return cached_positions.view(1, height * width, 2).expand(batch_size, -1, -1).clone()\n\n\nclass RotaryPositionEmbedding2D(nn.Module):\n    \"\"\"2D Rotary Position Embedding implementation.\n\n    This module applies rotary position embeddings to input tokens based on their\n    2D spatial positions. It handles the position-dependent rotation of features\n    separately for vertical and horizontal dimensions.\n\n    Args:\n        frequency: Base frequency for the position embeddings. Default: 100.0\n        scaling_factor: Scaling factor for frequency computation. Default: 1.0\n\n    Attributes:\n        base_frequency: Base frequency for computing position embeddings.\n        scaling_factor: Factor to scale the computed frequencies.\n        frequency_cache: Cache for storing precomputed frequency components.\n    \"\"\"\n\n    def __init__(self, frequency: float = 100.0, scaling_factor: float = 1.0):\n        \"\"\"Initializes the 2D RoPE module.\"\"\"\n        super().__init__()\n        self.base_frequency = frequency\n        self.scaling_factor = scaling_factor\n        self.frequency_cache: Dict[Tuple, Tuple[torch.Tensor, torch.Tensor]] = {}\n\n    def _compute_frequency_components(\n        self, dim: int, seq_len: int, device: torch.device, dtype: torch.dtype\n    ) -> Tuple[torch.Tensor, torch.Tensor]:\n        \"\"\"Computes frequency components for rotary embeddings.\n\n        Args:\n            dim: Feature dimension (must be even).\n            seq_len: Maximum sequence length.\n            device: Target device for computations.\n            dtype: Data type for the computed tensors.\n\n        Returns:\n            Tuple of (cosine, sine) tensors for frequency components.\n        \"\"\"\n        cache_key = (dim, seq_len, device, dtype)\n        if cache_key not in self.frequency_cache:\n            # Compute frequency bands\n            exponents = torch.arange(0, dim, 2, device=device).float() / dim\n            inv_freq = 1.0 / (self.base_frequency**exponents)\n\n            # Generate position-dependent frequencies\n            positions = torch.arange(seq_len, device=device, dtype=inv_freq.dtype)\n            angles = torch.einsum(\"i,j->ij\", positions, inv_freq)\n\n            # Compute and cache frequency components\n            angles = angles.to(dtype)\n            angles = torch.cat((angles, angles), dim=-1)\n            cos_components = angles.cos().to(dtype)\n            sin_components = angles.sin().to(dtype)\n            self.frequency_cache[cache_key] = (cos_components, sin_components)\n\n        return self.frequency_cache[cache_key]\n\n    @staticmethod\n    def _rotate_features(x: torch.Tensor) -> torch.Tensor:\n        \"\"\"Performs feature rotation by splitting and recombining feature dimensions.\n\n        Args:\n            x: Input tensor to rotate.\n\n        Returns:\n            Rotated feature tensor.\n        \"\"\"\n        feature_dim = x.shape[-1]\n        x1, x2 = x[..., : feature_dim // 2], x[..., feature_dim // 2 :]\n        return torch.cat((-x2, x1), dim=-1)\n\n    def _apply_1d_rope(\n        self, tokens: torch.Tensor, positions: torch.Tensor, cos_comp: torch.Tensor, sin_comp: torch.Tensor\n    ) -> torch.Tensor:\n        \"\"\"Applies 1D rotary position embeddings along one dimension.\n\n        Args:\n            tokens: Input token features.\n            positions: Position indices.\n            cos_comp: Cosine components for rotation.\n            sin_comp: Sine components for rotation.\n\n        Returns:\n            Tokens with applied rotary position embeddings.\n        \"\"\"\n        # Embed positions with frequency components\n        cos = F.embedding(positions, cos_comp)[:, None, :, :]\n        sin = F.embedding(positions, sin_comp)[:, None, :, :]\n\n        # Apply rotation\n        return (tokens * cos) + (self._rotate_features(tokens) * sin)\n\n    def forward(self, tokens: torch.Tensor, positions: torch.Tensor) -> torch.Tensor:\n        \"\"\"Applies 2D rotary position embeddings to input tokens.\n\n        Args:\n            tokens: Input tensor of shape (batch_size, n_heads, n_tokens, dim).\n                   The feature dimension (dim) must be divisible by 4.\n            positions: Position tensor of shape (batch_size, n_tokens, 2) containing\n                      the y and x coordinates for each token.\n\n        Returns:\n            Tensor of same shape as input with applied 2D rotary position embeddings.\n\n        Raises:\n            AssertionError: If input dimensions are invalid or positions are malformed.\n        \"\"\"\n        # Validate inputs\n        assert tokens.size(-1) % 2 == 0, \"Feature dimension must be even\"\n        assert positions.ndim == 3 and positions.shape[-1] == 2, \"Positions must have shape (batch_size, n_tokens, 2)\"\n\n        # Compute feature dimension for each spatial direction\n        feature_dim = tokens.size(-1) // 2\n\n        # Get frequency components\n        max_position = int(positions.max()) + 1\n        cos_comp, sin_comp = self._compute_frequency_components(feature_dim, max_position, tokens.device, tokens.dtype)\n\n        # Split features for vertical and horizontal processing\n        vertical_features, horizontal_features = tokens.chunk(2, dim=-1)\n\n        # Apply RoPE separately for each dimension\n        vertical_features = self._apply_1d_rope(vertical_features, positions[..., 0], cos_comp, sin_comp)\n        horizontal_features = self._apply_1d_rope(horizontal_features, positions[..., 1], cos_comp, sin_comp)\n\n        # Combine processed features\n        return torch.cat((vertical_features, horizontal_features), dim=-1)\n"
  },
  {
    "path": "vggt/layers/swiglu_ffn.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the Apache License, Version 2.0\n# found in the LICENSE file in the root directory of this source tree.\n\nimport os\nfrom typing import Callable, Optional\nimport warnings\n\nfrom torch import Tensor, nn\nimport torch.nn.functional as F\n\n\nclass SwiGLUFFN(nn.Module):\n    def __init__(\n        self,\n        in_features: int,\n        hidden_features: Optional[int] = None,\n        out_features: Optional[int] = None,\n        act_layer: Callable[..., nn.Module] = None,\n        drop: float = 0.0,\n        bias: bool = True,\n    ) -> None:\n        super().__init__()\n        out_features = out_features or in_features\n        hidden_features = hidden_features or in_features\n        self.w12 = nn.Linear(in_features, 2 * hidden_features, bias=bias)\n        self.w3 = nn.Linear(hidden_features, out_features, bias=bias)\n\n    def forward(self, x: Tensor) -> Tensor:\n        x12 = self.w12(x)\n        x1, x2 = x12.chunk(2, dim=-1)\n        hidden = F.silu(x1) * x2\n        return self.w3(hidden)\n\n\nXFORMERS_ENABLED = os.environ.get(\"XFORMERS_DISABLED\") is None\n# try:\n#     if XFORMERS_ENABLED:\n#         from xformers.ops import SwiGLU\n\n#         XFORMERS_AVAILABLE = True\n#         warnings.warn(\"xFormers is available (SwiGLU)\")\n#     else:\n#         warnings.warn(\"xFormers is disabled (SwiGLU)\")\n#         raise ImportError\n# except ImportError:\nSwiGLU = SwiGLUFFN\nXFORMERS_AVAILABLE = False\n\n# warnings.warn(\"xFormers is not available (SwiGLU)\")\n\n\nclass SwiGLUFFNFused(SwiGLU):\n    def __init__(\n        self,\n        in_features: int,\n        hidden_features: Optional[int] = None,\n        out_features: Optional[int] = None,\n        act_layer: Callable[..., nn.Module] = None,\n        drop: float = 0.0,\n        bias: bool = True,\n    ) -> None:\n        out_features = out_features or in_features\n        hidden_features = hidden_features or in_features\n        hidden_features = (int(hidden_features * 2 / 3) + 7) // 8 * 8\n        super().__init__(\n            in_features=in_features,\n            hidden_features=hidden_features,\n            out_features=out_features,\n            bias=bias,\n        )\n"
  },
  {
    "path": "vggt/layers/vision_transformer.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n#\n# This source code is licensed under the Apache License, Version 2.0\n# found in the LICENSE file in the root directory of this source tree.\n\n# References:\n#   https://github.com/facebookresearch/dino/blob/main/vision_transformer.py\n#   https://github.com/rwightman/pytorch-image-models/tree/master/timm/models/vision_transformer.py\n\nfrom functools import partial\nimport math\nimport logging\nfrom typing import Sequence, Tuple, Union, Callable\n\nimport torch\nimport torch.nn as nn\nfrom torch.utils.checkpoint import checkpoint\nfrom torch.nn.init import trunc_normal_\nfrom . import Mlp, PatchEmbed, SwiGLUFFNFused, MemEffAttention, NestedTensorBlock as Block\n\nlogger = logging.getLogger(\"dinov2\")\n\n\ndef named_apply(fn: Callable, module: nn.Module, name=\"\", depth_first=True, include_root=False) -> nn.Module:\n    if not depth_first and include_root:\n        fn(module=module, name=name)\n    for child_name, child_module in module.named_children():\n        child_name = \".\".join((name, child_name)) if name else child_name\n        named_apply(fn=fn, module=child_module, name=child_name, depth_first=depth_first, include_root=True)\n    if depth_first and include_root:\n        fn(module=module, name=name)\n    return module\n\n\nclass BlockChunk(nn.ModuleList):\n    def forward(self, x):\n        for b in self:\n            x = b(x)\n        return x\n\n\nclass DinoVisionTransformer(nn.Module):\n    def __init__(\n        self,\n        img_size=224,\n        patch_size=16,\n        in_chans=3,\n        embed_dim=768,\n        depth=12,\n        num_heads=12,\n        mlp_ratio=4.0,\n        qkv_bias=True,\n        ffn_bias=True,\n        proj_bias=True,\n        drop_path_rate=0.0,\n        drop_path_uniform=False,\n        init_values=None,  # for layerscale: None or 0 => no layerscale\n        embed_layer=PatchEmbed,\n        act_layer=nn.GELU,\n        block_fn=Block,\n        ffn_layer=\"mlp\",\n        block_chunks=1,\n        num_register_tokens=0,\n        interpolate_antialias=False,\n        interpolate_offset=0.1,\n        qk_norm=False,\n    ):\n        \"\"\"\n        Args:\n            img_size (int, tuple): input image size\n            patch_size (int, tuple): patch size\n            in_chans (int): number of input channels\n            embed_dim (int): embedding dimension\n            depth (int): depth of transformer\n            num_heads (int): number of attention heads\n            mlp_ratio (int): ratio of mlp hidden dim to embedding dim\n            qkv_bias (bool): enable bias for qkv if True\n            proj_bias (bool): enable bias for proj in attn if True\n            ffn_bias (bool): enable bias for ffn if True\n            drop_path_rate (float): stochastic depth rate\n            drop_path_uniform (bool): apply uniform drop rate across blocks\n            weight_init (str): weight init scheme\n            init_values (float): layer-scale init values\n            embed_layer (nn.Module): patch embedding layer\n            act_layer (nn.Module): MLP activation layer\n            block_fn (nn.Module): transformer block class\n            ffn_layer (str): \"mlp\", \"swiglu\", \"swiglufused\" or \"identity\"\n            block_chunks: (int) split block sequence into block_chunks units for FSDP wrap\n            num_register_tokens: (int) number of extra cls tokens (so-called \"registers\")\n            interpolate_antialias: (str) flag to apply anti-aliasing when interpolating positional embeddings\n            interpolate_offset: (float) work-around offset to apply when interpolating positional embeddings\n        \"\"\"\n        super().__init__()\n        norm_layer = partial(nn.LayerNorm, eps=1e-6)\n\n        # tricky but makes it work\n        self.use_checkpoint = False\n        #\n\n        self.num_features = self.embed_dim = embed_dim  # num_features for consistency with other models\n        self.num_tokens = 1\n        self.n_blocks = depth\n        self.num_heads = num_heads\n        self.patch_size = patch_size\n        self.num_register_tokens = num_register_tokens\n        self.interpolate_antialias = interpolate_antialias\n        self.interpolate_offset = interpolate_offset\n\n        self.patch_embed = embed_layer(img_size=img_size, patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim)\n        num_patches = self.patch_embed.num_patches\n\n        self.cls_token = nn.Parameter(torch.zeros(1, 1, embed_dim))\n        self.pos_embed = nn.Parameter(torch.zeros(1, num_patches + self.num_tokens, embed_dim))\n        assert num_register_tokens >= 0\n        self.register_tokens = (\n            nn.Parameter(torch.zeros(1, num_register_tokens, embed_dim)) if num_register_tokens else None\n        )\n\n        if drop_path_uniform is True:\n            dpr = [drop_path_rate] * depth\n        else:\n            dpr = [x.item() for x in torch.linspace(0, drop_path_rate, depth)]  # stochastic depth decay rule\n\n        if ffn_layer == \"mlp\":\n            logger.info(\"using MLP layer as FFN\")\n            ffn_layer = Mlp\n        elif ffn_layer == \"swiglufused\" or ffn_layer == \"swiglu\":\n            logger.info(\"using SwiGLU layer as FFN\")\n            ffn_layer = SwiGLUFFNFused\n        elif ffn_layer == \"identity\":\n            logger.info(\"using Identity layer as FFN\")\n\n            def f(*args, **kwargs):\n                return nn.Identity()\n\n            ffn_layer = f\n        else:\n            raise NotImplementedError\n\n        blocks_list = [\n            block_fn(\n                dim=embed_dim,\n                num_heads=num_heads,\n                mlp_ratio=mlp_ratio,\n                qkv_bias=qkv_bias,\n                proj_bias=proj_bias,\n                ffn_bias=ffn_bias,\n                drop_path=dpr[i],\n                norm_layer=norm_layer,\n                act_layer=act_layer,\n                ffn_layer=ffn_layer,\n                init_values=init_values,\n                qk_norm=qk_norm,\n            )\n            for i in range(depth)\n        ]\n        if block_chunks > 0:\n            self.chunked_blocks = True\n            chunked_blocks = []\n            chunksize = depth // block_chunks\n            for i in range(0, depth, chunksize):\n                # this is to keep the block index consistent if we chunk the block list\n                chunked_blocks.append([nn.Identity()] * i + blocks_list[i : i + chunksize])\n            self.blocks = nn.ModuleList([BlockChunk(p) for p in chunked_blocks])\n        else:\n            self.chunked_blocks = False\n            self.blocks = nn.ModuleList(blocks_list)\n\n        self.norm = norm_layer(embed_dim)\n        self.head = nn.Identity()\n\n        self.mask_token = nn.Parameter(torch.zeros(1, embed_dim))\n\n        self.init_weights()\n\n    def init_weights(self):\n        trunc_normal_(self.pos_embed, std=0.02)\n        nn.init.normal_(self.cls_token, std=1e-6)\n        if self.register_tokens is not None:\n            nn.init.normal_(self.register_tokens, std=1e-6)\n        named_apply(init_weights_vit_timm, self)\n\n    def interpolate_pos_encoding(self, x, w, h):\n        previous_dtype = x.dtype\n        npatch = x.shape[1] - 1\n        N = self.pos_embed.shape[1] - 1\n        if npatch == N and w == h:\n            return self.pos_embed\n        pos_embed = self.pos_embed.float()\n        class_pos_embed = pos_embed[:, 0]\n        patch_pos_embed = pos_embed[:, 1:]\n        dim = x.shape[-1]\n        w0 = w // self.patch_size\n        h0 = h // self.patch_size\n        M = int(math.sqrt(N))  # Recover the number of patches in each dimension\n        assert N == M * M\n        kwargs = {}\n        if self.interpolate_offset:\n            # Historical kludge: add a small number to avoid floating point error in the interpolation, see https://github.com/facebookresearch/dino/issues/8\n            # Note: still needed for backward-compatibility, the underlying operators are using both output size and scale factors\n            sx = float(w0 + self.interpolate_offset) / M\n            sy = float(h0 + self.interpolate_offset) / M\n            kwargs[\"scale_factor\"] = (sx, sy)\n        else:\n            # Simply specify an output size instead of a scale factor\n            kwargs[\"size\"] = (w0, h0)\n        patch_pos_embed = nn.functional.interpolate(\n            patch_pos_embed.reshape(1, M, M, dim).permute(0, 3, 1, 2),\n            mode=\"bicubic\",\n            antialias=self.interpolate_antialias,\n            **kwargs,\n        )\n        assert (w0, h0) == patch_pos_embed.shape[-2:]\n        patch_pos_embed = patch_pos_embed.permute(0, 2, 3, 1).view(1, -1, dim)\n        return torch.cat((class_pos_embed.unsqueeze(0), patch_pos_embed), dim=1).to(previous_dtype)\n\n    def prepare_tokens_with_masks(self, x, masks=None):\n        B, nc, w, h = x.shape\n        x = self.patch_embed(x)\n        if masks is not None:\n            x = torch.where(masks.unsqueeze(-1), self.mask_token.to(x.dtype).unsqueeze(0), x)\n\n        x = torch.cat((self.cls_token.expand(x.shape[0], -1, -1), x), dim=1)\n        x = x + self.interpolate_pos_encoding(x, w, h)\n\n        if self.register_tokens is not None:\n            x = torch.cat(\n                (\n                    x[:, :1],\n                    self.register_tokens.expand(x.shape[0], -1, -1),\n                    x[:, 1:],\n                ),\n                dim=1,\n            )\n\n        return x\n\n    def forward_features_list(self, x_list, masks_list):\n        x = [self.prepare_tokens_with_masks(x, masks) for x, masks in zip(x_list, masks_list)]\n\n        for blk in self.blocks:\n            if self.use_checkpoint:\n                x = checkpoint(blk, x, use_reentrant=self.use_reentrant)\n            else:\n                x = blk(x)\n\n        all_x = x\n        output = []\n        for x, masks in zip(all_x, masks_list):\n            x_norm = self.norm(x)\n            output.append(\n                {\n                    \"x_norm_clstoken\": x_norm[:, 0],\n                    \"x_norm_regtokens\": x_norm[:, 1 : self.num_register_tokens + 1],\n                    \"x_norm_patchtokens\": x_norm[:, self.num_register_tokens + 1 :],\n                    \"x_prenorm\": x,\n                    \"masks\": masks,\n                }\n            )\n        return output\n\n    def forward_features(self, x, masks=None):\n        if isinstance(x, list):\n            return self.forward_features_list(x, masks)\n\n        x = self.prepare_tokens_with_masks(x, masks)\n\n        for blk in self.blocks:\n            if self.use_checkpoint:\n                x = checkpoint(blk, x, use_reentrant=self.use_reentrant)\n            else:\n                x = blk(x)\n\n        x_norm = self.norm(x)\n        return {\n            \"x_norm_clstoken\": x_norm[:, 0],\n            \"x_norm_regtokens\": x_norm[:, 1 : self.num_register_tokens + 1],\n            \"x_norm_patchtokens\": x_norm[:, self.num_register_tokens + 1 :],\n            \"x_prenorm\": x,\n            \"masks\": masks,\n        }\n\n    def _get_intermediate_layers_not_chunked(self, x, n=1):\n        x = self.prepare_tokens_with_masks(x)\n        # If n is an int, take the n last blocks. If it's a list, take them\n        output, total_block_len = [], len(self.blocks)\n        blocks_to_take = range(total_block_len - n, total_block_len) if isinstance(n, int) else n\n        for i, blk in enumerate(self.blocks):\n            x = blk(x)\n            if i in blocks_to_take:\n                output.append(x)\n        assert len(output) == len(blocks_to_take), f\"only {len(output)} / {len(blocks_to_take)} blocks found\"\n        return output\n\n    def _get_intermediate_layers_chunked(self, x, n=1):\n        x = self.prepare_tokens_with_masks(x)\n        output, i, total_block_len = [], 0, len(self.blocks[-1])\n        # If n is an int, take the n last blocks. If it's a list, take them\n        blocks_to_take = range(total_block_len - n, total_block_len) if isinstance(n, int) else n\n        for block_chunk in self.blocks:\n            for blk in block_chunk[i:]:  # Passing the nn.Identity()\n                x = blk(x)\n                if i in blocks_to_take:\n                    output.append(x)\n                i += 1\n        assert len(output) == len(blocks_to_take), f\"only {len(output)} / {len(blocks_to_take)} blocks found\"\n        return output\n\n    def get_intermediate_layers(\n        self,\n        x: torch.Tensor,\n        n: Union[int, Sequence] = 1,  # Layers or n last layers to take\n        reshape: bool = False,\n        return_class_token: bool = False,\n        norm=True,\n    ) -> Tuple[Union[torch.Tensor, Tuple[torch.Tensor]]]:\n        if self.chunked_blocks:\n            outputs = self._get_intermediate_layers_chunked(x, n)\n        else:\n            outputs = self._get_intermediate_layers_not_chunked(x, n)\n        if norm:\n            outputs = [self.norm(out) for out in outputs]\n        class_tokens = [out[:, 0] for out in outputs]\n        outputs = [out[:, 1 + self.num_register_tokens :] for out in outputs]\n        if reshape:\n            B, _, w, h = x.shape\n            outputs = [\n                out.reshape(B, w // self.patch_size, h // self.patch_size, -1).permute(0, 3, 1, 2).contiguous()\n                for out in outputs\n            ]\n        if return_class_token:\n            return tuple(zip(outputs, class_tokens))\n        return tuple(outputs)\n\n    def forward(self, *args, is_training=True, **kwargs):\n        ret = self.forward_features(*args, **kwargs)\n        if is_training:\n            return ret\n        else:\n            return self.head(ret[\"x_norm_clstoken\"])\n\n\ndef init_weights_vit_timm(module: nn.Module, name: str = \"\"):\n    \"\"\"ViT weight initialization, original timm impl (for reproducibility)\"\"\"\n    if isinstance(module, nn.Linear):\n        trunc_normal_(module.weight, std=0.02)\n        if module.bias is not None:\n            nn.init.zeros_(module.bias)\n\n\ndef vit_small(patch_size=16, num_register_tokens=0, **kwargs):\n    model = DinoVisionTransformer(\n        patch_size=patch_size,\n        embed_dim=384,\n        depth=12,\n        num_heads=6,\n        mlp_ratio=4,\n        block_fn=partial(Block, attn_class=MemEffAttention),\n        num_register_tokens=num_register_tokens,\n        **kwargs,\n    )\n    return model\n\n\ndef vit_base(patch_size=16, num_register_tokens=0, **kwargs):\n    model = DinoVisionTransformer(\n        patch_size=patch_size,\n        embed_dim=768,\n        depth=12,\n        num_heads=12,\n        mlp_ratio=4,\n        block_fn=partial(Block, attn_class=MemEffAttention),\n        num_register_tokens=num_register_tokens,\n        **kwargs,\n    )\n    return model\n\n\ndef vit_large(patch_size=16, num_register_tokens=0, **kwargs):\n    model = DinoVisionTransformer(\n        patch_size=patch_size,\n        embed_dim=1024,\n        depth=24,\n        num_heads=16,\n        mlp_ratio=4,\n        block_fn=partial(Block, attn_class=MemEffAttention),\n        num_register_tokens=num_register_tokens,\n        **kwargs,\n    )\n    return model\n\n\ndef vit_giant2(patch_size=16, num_register_tokens=0, **kwargs):\n    \"\"\"\n    Close to ViT-giant, with embed-dim 1536 and 24 heads => embed-dim per head 64\n    \"\"\"\n    model = DinoVisionTransformer(\n        patch_size=patch_size,\n        embed_dim=1536,\n        depth=40,\n        num_heads=24,\n        mlp_ratio=4,\n        block_fn=partial(Block, attn_class=MemEffAttention),\n        num_register_tokens=num_register_tokens,\n        **kwargs,\n    )\n    return model\n"
  },
  {
    "path": "vggt/models/aggregator.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport logging\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom typing import Optional, Tuple, Union, List, Dict, Any\n\nfrom vggt.layers import PatchEmbed\nfrom vggt.layers.block import Block\nfrom vggt.layers.rope import RotaryPositionEmbedding2D, PositionGetter\nfrom vggt.layers.vision_transformer import vit_small, vit_base, vit_large, vit_giant2\n\nlogger = logging.getLogger(__name__)\n\n_RESNET_MEAN = [0.485, 0.456, 0.406]\n_RESNET_STD = [0.229, 0.224, 0.225]\n\n\nclass Aggregator(nn.Module):\n    \"\"\"\n    The Aggregator applies alternating-attention over input frames,\n    as described in VGGT: Visual Geometry Grounded Transformer.\n\n\n    Args:\n        img_size (int): Image size in pixels.\n        patch_size (int): Size of each patch for PatchEmbed.\n        embed_dim (int): Dimension of the token embeddings.\n        depth (int): Number of blocks.\n        num_heads (int): Number of attention heads.\n        mlp_ratio (float): Ratio of MLP hidden dim to embedding dim.\n        num_register_tokens (int): Number of register tokens.\n        block_fn (nn.Module): The block type used for attention (Block by default).\n        qkv_bias (bool): Whether to include bias in QKV projections.\n        proj_bias (bool): Whether to include bias in the output projection.\n        ffn_bias (bool): Whether to include bias in MLP layers.\n        patch_embed (str): Type of patch embed. e.g., \"conv\" or \"dinov2_vitl14_reg\".\n        aa_order (list[str]): The order of alternating attention, e.g. [\"frame\", \"global\"].\n        aa_block_size (int): How many blocks to group under each attention type before switching. If not necessary, set to 1.\n        qk_norm (bool): Whether to apply QK normalization.\n        rope_freq (int): Base frequency for rotary embedding. -1 to disable.\n        init_values (float): Init scale for layer scale.\n    \"\"\"\n\n    def __init__(\n        self,\n        img_size=518,\n        patch_size=14,\n        embed_dim=1024,\n        depth=24,\n        num_heads=16,\n        mlp_ratio=4.0,\n        num_register_tokens=4,\n        block_fn=Block,\n        qkv_bias=True,\n        proj_bias=True,\n        ffn_bias=True,\n        patch_embed=\"dinov2_vitl14_reg\",\n        aa_order=[\"frame\", \"global\"],\n        aa_block_size=1,\n        qk_norm=True,\n        rope_freq=100,\n        init_values=0.01,\n    ):\n        super().__init__()\n\n        self.__build_patch_embed__(patch_embed, img_size, patch_size, num_register_tokens, embed_dim=embed_dim)\n\n        # Initialize rotary position embedding if frequency > 0\n        self.rope = RotaryPositionEmbedding2D(frequency=rope_freq) if rope_freq > 0 else None\n        self.position_getter = PositionGetter() if self.rope is not None else None\n\n        self.frame_blocks = nn.ModuleList(\n            [\n                block_fn(\n                    dim=embed_dim,\n                    num_heads=num_heads,\n                    mlp_ratio=mlp_ratio,\n                    qkv_bias=qkv_bias,\n                    proj_bias=proj_bias,\n                    ffn_bias=ffn_bias,\n                    init_values=init_values,\n                    qk_norm=qk_norm,\n                    rope=self.rope,\n                )\n                for _ in range(depth)\n            ]\n        )\n\n        self.global_blocks = nn.ModuleList(\n            [\n                block_fn(\n                    dim=embed_dim,\n                    num_heads=num_heads,\n                    mlp_ratio=mlp_ratio,\n                    qkv_bias=qkv_bias,\n                    proj_bias=proj_bias,\n                    ffn_bias=ffn_bias,\n                    init_values=init_values,\n                    qk_norm=qk_norm,\n                    rope=self.rope,\n                )\n                for _ in range(depth)\n            ]\n        )\n\n        self.depth = depth\n        self.aa_order = aa_order\n        self.patch_size = patch_size\n        self.aa_block_size = aa_block_size\n\n        # Validate that depth is divisible by aa_block_size\n        if self.depth % self.aa_block_size != 0:\n            raise ValueError(f\"depth ({depth}) must be divisible by aa_block_size ({aa_block_size})\")\n\n        self.aa_block_num = self.depth // self.aa_block_size\n\n        # Note: We have two camera tokens, one for the first frame and one for the rest\n        # The same applies for register tokens\n        self.camera_token = nn.Parameter(torch.randn(1, 2, 1, embed_dim))\n        self.register_token = nn.Parameter(torch.randn(1, 2, num_register_tokens, embed_dim))\n\n        # The patch tokens start after the camera and register tokens\n        self.patch_start_idx = 1 + num_register_tokens\n\n        # Initialize parameters with small values\n        nn.init.normal_(self.camera_token, std=1e-6)\n        nn.init.normal_(self.register_token, std=1e-6)\n\n        # Register normalization constants as buffers\n        for name, value in (\n            (\"_resnet_mean\", _RESNET_MEAN),\n            (\"_resnet_std\", _RESNET_STD),\n        ):\n            self.register_buffer(\n                name,\n                torch.FloatTensor(value).view(1, 1, 3, 1, 1),\n                persistent=False,\n            )\n\n    def __build_patch_embed__(\n        self,\n        patch_embed,\n        img_size,\n        patch_size,\n        num_register_tokens,\n        interpolate_antialias=True,\n        interpolate_offset=0.0,\n        block_chunks=0,\n        init_values=1.0,\n        embed_dim=1024,\n    ):\n        \"\"\"\n        Build the patch embed layer. If 'conv', we use a\n        simple PatchEmbed conv layer. Otherwise, we use a vision transformer.\n        \"\"\"\n\n        if \"conv\" in patch_embed:\n            self.patch_embed = PatchEmbed(img_size=img_size, patch_size=patch_size, in_chans=3, embed_dim=embed_dim)\n        else:\n            vit_models = {\n                \"dinov2_vitl14_reg\": vit_large,\n                \"dinov2_vitb14_reg\": vit_base,\n                \"dinov2_vits14_reg\": vit_small,\n                \"dinov2_vitg2_reg\": vit_giant2,\n            }\n\n            self.patch_embed = vit_models[patch_embed](\n                img_size=img_size,\n                patch_size=patch_size,\n                num_register_tokens=num_register_tokens,\n                interpolate_antialias=interpolate_antialias,\n                interpolate_offset=interpolate_offset,\n                block_chunks=block_chunks,\n                init_values=init_values,\n            )\n\n            # Disable gradient updates for mask token\n            if hasattr(self.patch_embed, \"mask_token\"):\n                self.patch_embed.mask_token.requires_grad_(False)\n\n    def forward(\n        self,\n        images: torch.Tensor,\n    ) -> Tuple[List[torch.Tensor], int]:\n        \"\"\"\n        Args:\n            images (torch.Tensor): Input images with shape [B, S, 3, H, W], in range [0, 1].\n                B: batch size, S: sequence length, 3: RGB channels, H: height, W: width\n\n        Returns:\n            (list[torch.Tensor], int):\n                The list of outputs from the attention blocks,\n                and the patch_start_idx indicating where patch tokens begin.\n        \"\"\"\n        B, S, C_in, H, W = images.shape\n\n        if C_in != 3:\n            raise ValueError(f\"Expected 3 input channels, got {C_in}\")\n\n        # Normalize images and reshape for patch embed\n        images = (images - self._resnet_mean) / self._resnet_std\n\n        # Reshape to [B*S, C, H, W] for patch embedding\n        images = images.view(B * S, C_in, H, W)\n        patch_tokens = self.patch_embed(images)\n\n        if isinstance(patch_tokens, dict):\n            patch_tokens = patch_tokens[\"x_norm_patchtokens\"]\n\n        _, P, C = patch_tokens.shape\n\n        # Expand camera and register tokens to match batch size and sequence length\n        camera_token = slice_expand_and_flatten(self.camera_token, B, S)\n        register_token = slice_expand_and_flatten(self.register_token, B, S)\n\n        # Concatenate special tokens with patch tokens\n        tokens = torch.cat([camera_token, register_token, patch_tokens], dim=1)\n\n        pos = None\n        if self.rope is not None:\n            pos = self.position_getter(B * S, H // self.patch_size, W // self.patch_size, device=images.device)\n\n        if self.patch_start_idx > 0:\n            # do not use position embedding for special tokens (camera and register tokens)\n            # so set pos to 0 for the special tokens\n            pos = pos + 1\n            pos_special = torch.zeros(B * S, self.patch_start_idx, 2).to(images.device).to(pos.dtype)\n            pos = torch.cat([pos_special, pos], dim=1)\n\n        # update P because we added special tokens\n        _, P, C = tokens.shape\n\n        frame_idx = 0\n        global_idx = 0\n        output_list = []\n\n        for _ in range(self.aa_block_num):\n            for attn_type in self.aa_order:\n                if attn_type == \"frame\":\n                    tokens, frame_idx, frame_intermediates = self._process_frame_attention(\n                        tokens, B, S, P, C, frame_idx, pos=pos\n                    )\n                elif attn_type == \"global\":\n                    tokens, global_idx, global_intermediates = self._process_global_attention(\n                        tokens, B, S, P, C, global_idx, pos=pos\n                    )\n                else:\n                    raise ValueError(f\"Unknown attention type: {attn_type}\")\n\n            for i in range(len(frame_intermediates)):\n                # concat frame and global intermediates, [B x S x P x 2C]\n                concat_inter = torch.cat([frame_intermediates[i], global_intermediates[i]], dim=-1)\n                output_list.append(concat_inter)\n\n        del concat_inter\n        del frame_intermediates\n        del global_intermediates\n        return output_list, self.patch_start_idx\n\n    def _process_frame_attention(self, tokens, B, S, P, C, frame_idx, pos=None):\n        \"\"\"\n        Process frame attention blocks. We keep tokens in shape (B*S, P, C).\n        \"\"\"\n        # If needed, reshape tokens or positions:\n        if tokens.shape != (B * S, P, C):\n            tokens = tokens.view(B, S, P, C).view(B * S, P, C)\n\n        if pos is not None and pos.shape != (B * S, P, 2):\n            pos = pos.view(B, S, P, 2).view(B * S, P, 2)\n\n        intermediates = []\n\n        # by default, self.aa_block_size=1, which processes one block at a time\n        for _ in range(self.aa_block_size):\n            tokens = self.frame_blocks[frame_idx](tokens, pos=pos)\n            frame_idx += 1\n            intermediates.append(tokens.view(B, S, P, C))\n\n        return tokens, frame_idx, intermediates\n\n    def _process_global_attention(self, tokens, B, S, P, C, global_idx, pos=None):\n        \"\"\"\n        Process global attention blocks. We keep tokens in shape (B, S*P, C).\n        \"\"\"\n        if tokens.shape != (B, S * P, C):\n            tokens = tokens.view(B, S, P, C).view(B, S * P, C)\n\n        if pos is not None and pos.shape != (B, S * P, 2):\n            pos = pos.view(B, S, P, 2).view(B, S * P, 2)\n\n        intermediates = []\n\n        # by default, self.aa_block_size=1, which processes one block at a time\n        for _ in range(self.aa_block_size):\n            tokens = self.global_blocks[global_idx](tokens, pos=pos)\n            global_idx += 1\n            intermediates.append(tokens.view(B, S, P, C))\n\n        return tokens, global_idx, intermediates\n\n\ndef slice_expand_and_flatten(token_tensor, B, S):\n    \"\"\"\n    Processes specialized tokens with shape (1, 2, X, C) for multi-frame processing:\n    1) Uses the first position (index=0) for the first frame only\n    2) Uses the second position (index=1) for all remaining frames (S-1 frames)\n    3) Expands both to match batch size B\n    4) Concatenates to form (B, S, X, C) where each sequence has 1 first-position token\n       followed by (S-1) second-position tokens\n    5) Flattens to (B*S, X, C) for processing\n\n    Returns:\n        torch.Tensor: Processed tokens with shape (B*S, X, C)\n    \"\"\"\n\n    # Slice out the \"query\" tokens => shape (1, 1, ...)\n    query = token_tensor[:, 0:1, ...].expand(B, 1, *token_tensor.shape[2:])\n    # Slice out the \"other\" tokens => shape (1, S-1, ...)\n    others = token_tensor[:, 1:, ...].expand(B, S - 1, *token_tensor.shape[2:])\n    # Concatenate => shape (B, S, ...)\n    combined = torch.cat([query, others], dim=1)\n\n    # Finally flatten => shape (B*S, ...)\n    combined = combined.view(B * S, *combined.shape[2:])\n    return combined\n"
  },
  {
    "path": "vggt/models/vggt.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n\nimport torch\nimport torch.nn as nn\nfrom huggingface_hub import PyTorchModelHubMixin  # used for model hub\n\nfrom vggt.models.aggregator import Aggregator\nfrom vggt.heads.camera_head import CameraHead\nfrom vggt.heads.dpt_head import DPTHead\nfrom vggt.heads.track_head import TrackHead\n\n\nclass VGGT(nn.Module, PyTorchModelHubMixin):\n    def __init__(self, img_size=518, patch_size=14, embed_dim=1024):\n        super().__init__()\n\n        self.aggregator = Aggregator(img_size=img_size, patch_size=patch_size, embed_dim=embed_dim)\n        self.camera_head = CameraHead(dim_in=2 * embed_dim)\n        self.point_head = DPTHead(dim_in=2 * embed_dim, output_dim=4, activation=\"inv_log\", conf_activation=\"expp1\")\n        self.depth_head = DPTHead(dim_in=2 * embed_dim, output_dim=2, activation=\"exp\", conf_activation=\"expp1\")\n        self.track_head = TrackHead(dim_in=2 * embed_dim, patch_size=patch_size)\n\n    def forward(\n        self,\n        images: torch.Tensor,\n        query_points: torch.Tensor = None,\n    ):\n        \"\"\"\n        Forward pass of the VGGT model.\n\n        Args:\n            images (torch.Tensor): Input images with shape [S, 3, H, W] or [B, S, 3, H, W], in range [0, 1].\n                B: batch size, S: sequence length, 3: RGB channels, H: height, W: width\n            query_points (torch.Tensor, optional): Query points for tracking, in pixel coordinates.\n                Shape: [N, 2] or [B, N, 2], where N is the number of query points.\n                Default: None\n\n        Returns:\n            dict: A dictionary containing the following predictions:\n                - pose_enc (torch.Tensor): Camera pose encoding with shape [B, S, 9] (from the last iteration)\n                - depth (torch.Tensor): Predicted depth maps with shape [B, S, H, W, 1]\n                - depth_conf (torch.Tensor): Confidence scores for depth predictions with shape [B, S, H, W]\n                - world_points (torch.Tensor): 3D world coordinates for each pixel with shape [B, S, H, W, 3]\n                - world_points_conf (torch.Tensor): Confidence scores for world points with shape [B, S, H, W]\n                - images (torch.Tensor): Original input images, preserved for visualization\n\n                If query_points is provided, also includes:\n                - track (torch.Tensor): Point tracks with shape [B, S, N, 2] (from the last iteration), in pixel coordinates\n                - vis (torch.Tensor): Visibility scores for tracked points with shape [B, S, N]\n                - conf (torch.Tensor): Confidence scores for tracked points with shape [B, S, N]\n        \"\"\"\n\n        # If without batch dimension, add it\n        if len(images.shape) == 4:\n            images = images.unsqueeze(0)\n        if query_points is not None and len(query_points.shape) == 2:\n            query_points = query_points.unsqueeze(0)\n\n        aggregated_tokens_list, patch_start_idx = self.aggregator(images)\n\n        predictions = {}\n\n        with torch.cuda.amp.autocast(enabled=False):\n            if self.camera_head is not None:\n                pose_enc_list = self.camera_head(aggregated_tokens_list)\n                predictions[\"pose_enc\"] = pose_enc_list[-1]  # pose encoding of the last iteration\n\n            if self.depth_head is not None:\n                depth, depth_conf = self.depth_head(\n                    aggregated_tokens_list, images=images, patch_start_idx=patch_start_idx\n                )\n                predictions[\"depth\"] = depth\n                predictions[\"depth_conf\"] = depth_conf\n\n            if self.point_head is not None:\n                pts3d, pts3d_conf = self.point_head(\n                    aggregated_tokens_list, images=images, patch_start_idx=patch_start_idx\n                )\n                predictions[\"world_points\"] = pts3d\n                predictions[\"world_points_conf\"] = pts3d_conf\n\n        if self.track_head is not None and query_points is not None:\n            track_list, vis, conf = self.track_head(\n                aggregated_tokens_list, images=images, patch_start_idx=patch_start_idx, query_points=query_points\n            )\n            predictions[\"track\"] = track_list[-1]  # track of the last iteration\n            predictions[\"vis\"] = vis\n            predictions[\"conf\"] = conf\n\n        predictions[\"images\"] = images\n\n        return predictions\n"
  },
  {
    "path": "vggt/utils/geometry.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport os\nimport torch\nimport numpy as np\n\n\ndef unproject_depth_map_to_point_map(\n    depth_map: np.ndarray, extrinsics_cam: np.ndarray, intrinsics_cam: np.ndarray\n) -> np.ndarray:\n    \"\"\"\n    Unproject a batch of depth maps to 3D world coordinates.\n\n    Args:\n        depth_map (np.ndarray): Batch of depth maps of shape (S, H, W, 1) or (S, H, W)\n        extrinsics_cam (np.ndarray): Batch of camera extrinsic matrices of shape (S, 3, 4)\n        intrinsics_cam (np.ndarray): Batch of camera intrinsic matrices of shape (S, 3, 3)\n\n    Returns:\n        np.ndarray: Batch of 3D world coordinates of shape (S, H, W, 3)\n    \"\"\"\n    if isinstance(depth_map, torch.Tensor):\n        depth_map = depth_map.cpu().numpy()\n    if isinstance(extrinsics_cam, torch.Tensor):\n        extrinsics_cam = extrinsics_cam.cpu().numpy()\n    if isinstance(intrinsics_cam, torch.Tensor):\n        intrinsics_cam = intrinsics_cam.cpu().numpy()\n\n    world_points_list = []\n    for frame_idx in range(depth_map.shape[0]):\n        cur_world_points, _, _ = depth_to_world_coords_points(\n            depth_map[frame_idx].squeeze(-1), extrinsics_cam[frame_idx], intrinsics_cam[frame_idx]\n        )\n        world_points_list.append(cur_world_points)\n    world_points_array = np.stack(world_points_list, axis=0)\n\n    return world_points_array\n\n\ndef depth_to_world_coords_points(\n    depth_map: np.ndarray,\n    extrinsic: np.ndarray,\n    intrinsic: np.ndarray,\n    eps=1e-8,\n) -> tuple[np.ndarray, np.ndarray, np.ndarray]:\n    \"\"\"\n    Convert a depth map to world coordinates.\n\n    Args:\n        depth_map (np.ndarray): Depth map of shape (H, W).\n        intrinsic (np.ndarray): Camera intrinsic matrix of shape (3, 3).\n        extrinsic (np.ndarray): Camera extrinsic matrix of shape (3, 4). OpenCV camera coordinate convention, cam from world.\n\n    Returns:\n        tuple[np.ndarray, np.ndarray]: World coordinates (H, W, 3) and valid depth mask (H, W).\n    \"\"\"\n    if depth_map is None:\n        return None, None, None\n\n    # Valid depth mask\n    point_mask = depth_map > eps\n\n    # Convert depth map to camera coordinates\n    cam_coords_points = depth_to_cam_coords_points(depth_map, intrinsic)\n\n    # Multiply with the inverse of extrinsic matrix to transform to world coordinates\n    # extrinsic_inv is 4x4 (note closed_form_inverse_OpenCV is batched, the output is (N, 4, 4))\n    cam_to_world_extrinsic = closed_form_inverse_se3(extrinsic[None])[0]\n\n    R_cam_to_world = cam_to_world_extrinsic[:3, :3]\n    t_cam_to_world = cam_to_world_extrinsic[:3, 3]\n\n    # Apply the rotation and translation to the camera coordinates\n    world_coords_points = np.dot(cam_coords_points, R_cam_to_world.T) + t_cam_to_world  # HxWx3, 3x3 -> HxWx3\n    # world_coords_points = np.einsum(\"ij,hwj->hwi\", R_cam_to_world, cam_coords_points) + t_cam_to_world\n\n    return world_coords_points, cam_coords_points, point_mask\n\n\ndef depth_to_cam_coords_points(depth_map: np.ndarray, intrinsic: np.ndarray) -> tuple[np.ndarray, np.ndarray]:\n    \"\"\"\n    Convert a depth map to camera coordinates.\n\n    Args:\n        depth_map (np.ndarray): Depth map of shape (H, W).\n        intrinsic (np.ndarray): Camera intrinsic matrix of shape (3, 3).\n\n    Returns:\n        tuple[np.ndarray, np.ndarray]: Camera coordinates (H, W, 3)\n    \"\"\"\n    H, W = depth_map.shape\n    assert intrinsic.shape == (3, 3), \"Intrinsic matrix must be 3x3\"\n    assert intrinsic[0, 1] == 0 and intrinsic[1, 0] == 0, \"Intrinsic matrix must have zero skew\"\n\n    # Intrinsic parameters\n    fu, fv = intrinsic[0, 0], intrinsic[1, 1]\n    cu, cv = intrinsic[0, 2], intrinsic[1, 2]\n\n    # Generate grid of pixel coordinates\n    u, v = np.meshgrid(np.arange(W), np.arange(H))\n\n    # Unproject to camera coordinates\n    x_cam = (u - cu) * depth_map / fu\n    y_cam = (v - cv) * depth_map / fv\n    z_cam = depth_map\n\n    # Stack to form camera coordinates\n    cam_coords = np.stack((x_cam, y_cam, z_cam), axis=-1).astype(np.float32)\n\n    return cam_coords\n\n\ndef closed_form_inverse_se3(se3, R=None, T=None):\n    \"\"\"\n    Compute the inverse of each 4x4 (or 3x4) SE3 matrix in a batch.\n\n    If `R` and `T` are provided, they must correspond to the rotation and translation\n    components of `se3`. Otherwise, they will be extracted from `se3`.\n\n    Args:\n        se3: Nx4x4 or Nx3x4 array or tensor of SE3 matrices.\n        R (optional): Nx3x3 array or tensor of rotation matrices.\n        T (optional): Nx3x1 array or tensor of translation vectors.\n\n    Returns:\n        Inverted SE3 matrices with the same type and device as `se3`.\n\n    Shapes:\n        se3: (N, 4, 4)\n        R: (N, 3, 3)\n        T: (N, 3, 1)\n    \"\"\"\n    # Check if se3 is a numpy array or a torch tensor\n    is_numpy = isinstance(se3, np.ndarray)\n\n    # Validate shapes\n    if se3.shape[-2:] != (4, 4) and se3.shape[-2:] != (3, 4):\n        raise ValueError(f\"se3 must be of shape (N,4,4), got {se3.shape}.\")\n\n    # Extract R and T if not provided\n    if R is None:\n        R = se3[:, :3, :3]  # (N,3,3)\n    if T is None:\n        T = se3[:, :3, 3:]  # (N,3,1)\n\n    # Transpose R\n    if is_numpy:\n        # Compute the transpose of the rotation for NumPy\n        R_transposed = np.transpose(R, (0, 2, 1))\n        # -R^T t for NumPy\n        top_right = -np.matmul(R_transposed, T)\n        inverted_matrix = np.tile(np.eye(4), (len(R), 1, 1))\n    else:\n        R_transposed = R.transpose(1, 2)  # (N,3,3)\n        top_right = -torch.bmm(R_transposed, T)  # (N,3,1)\n        inverted_matrix = torch.eye(4, 4)[None].repeat(len(R), 1, 1)\n        inverted_matrix = inverted_matrix.to(R.dtype).to(R.device)\n\n    inverted_matrix[:, :3, :3] = R_transposed\n    inverted_matrix[:, :3, 3:] = top_right\n\n    return inverted_matrix\n"
  },
  {
    "path": "vggt/utils/load_fn.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch\nfrom PIL import Image\nfrom torchvision import transforms as TF\n\n\ndef load_and_preprocess_images(image_path_list):\n    \"\"\"\n    A quick start function to load and preprocess images for model input.\n    This assumes the images should have the same shape for easier batching, but our model can also work well with different shapes.\n\n    Args:\n        image_path_list (list): List of paths to image files\n\n    Returns:\n        torch.Tensor: Batched tensor of preprocessed images with shape (N, 3, H, W)\n\n    Raises:\n        ValueError: If the input list is empty\n\n    Notes:\n        - Images with different dimensions will be padded with white (value=1.0)\n        - A warning is printed when images have different shapes\n        - The function ensures width=518px while maintaining aspect ratio\n        - Height is adjusted to be divisible by 14 for compatibility with model requirements\n    \"\"\"\n    # Check for empty list\n    if len(image_path_list) == 0:\n        raise ValueError(\"At least 1 image is required\")\n\n    images = []\n    shapes = set()\n    to_tensor = TF.ToTensor()\n\n    # First process all images and collect their shapes\n    for image_path in image_path_list:\n\n        # Open image\n        img = Image.open(image_path)\n\n        # If there's an alpha channel, blend onto white background:\n        if img.mode == \"RGBA\":\n            # Create white background\n            background = Image.new(\"RGBA\", img.size, (255, 255, 255, 255))\n            # Alpha composite onto the white background\n            img = Image.alpha_composite(background, img)\n\n        # Now convert to \"RGB\" (this step assigns white for transparent areas)\n        img = img.convert(\"RGB\")\n\n        width, height = img.size\n        new_width = 518\n\n        # Calculate height maintaining aspect ratio, divisible by 14\n        new_height = round(height * (new_width / width) / 14) * 14\n\n        # Resize with new dimensions (width, height)\n\n        img = img.resize((new_width, new_height), Image.Resampling.BICUBIC)\n        img = to_tensor(img)  # Convert to tensor (0, 1)\n\n        # Center crop height if it's larger than 518\n\n        if new_height > 518:\n            start_y = (new_height - 518) // 2\n            img = img[:, start_y : start_y + 518, :]\n\n        shapes.add((img.shape[1], img.shape[2]))\n        images.append(img)\n\n    # Check if we have different shapes\n    # In theory our model can also work well with different shapes\n\n    if len(shapes) > 1:\n        print(f\"Warning: Found images with different shapes: {shapes}\")\n        # Find maximum dimensions\n        max_height = max(shape[0] for shape in shapes)\n        max_width = max(shape[1] for shape in shapes)\n\n        # Pad images if necessary\n        padded_images = []\n        for img in images:\n            h_padding = max_height - img.shape[1]\n            w_padding = max_width - img.shape[2]\n\n            if h_padding > 0 or w_padding > 0:\n                pad_top = h_padding // 2\n                pad_bottom = h_padding - pad_top\n                pad_left = w_padding // 2\n                pad_right = w_padding - pad_left\n\n                img = torch.nn.functional.pad(\n                    img, (pad_left, pad_right, pad_top, pad_bottom), mode=\"constant\", value=1.0\n                )\n            padded_images.append(img)\n        images = padded_images\n\n    images = torch.stack(images)  # concatenate images\n\n    # Ensure correct shape when single image\n    if len(image_path_list) == 1:\n        # Verify shape is (1, C, H, W)\n        if images.dim() == 3:\n            images = images.unsqueeze(0)\n\n    return images\n"
  },
  {
    "path": "vggt/utils/pose_enc.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\nimport torch\nfrom .rotation import quat_to_mat, mat_to_quat\n\n\ndef extri_intri_to_pose_encoding(\n    extrinsics,\n    intrinsics,\n    image_size_hw=None,  # e.g., (256, 512)\n    pose_encoding_type=\"absT_quaR_FoV\",\n):\n    \"\"\"Convert camera extrinsics and intrinsics to a compact pose encoding.\n\n    This function transforms camera parameters into a unified pose encoding format,\n    which can be used for various downstream tasks like pose prediction or representation.\n\n    Args:\n        extrinsics (torch.Tensor): Camera extrinsic parameters with shape BxSx3x4,\n            where B is batch size and S is sequence length.\n            In OpenCV coordinate system (x-right, y-down, z-forward), representing camera from world transformation.\n            The format is [R|t] where R is a 3x3 rotation matrix and t is a 3x1 translation vector.\n        intrinsics (torch.Tensor): Camera intrinsic parameters with shape BxSx3x3.\n            Defined in pixels, with format:\n            [[fx, 0, cx],\n             [0, fy, cy],\n             [0,  0,  1]]\n            where fx, fy are focal lengths and (cx, cy) is the principal point\n        image_size_hw (tuple): Tuple of (height, width) of the image in pixels.\n            Required for computing field of view values. For example: (256, 512).\n        pose_encoding_type (str): Type of pose encoding to use. Currently only\n            supports \"absT_quaR_FoV\" (absolute translation, quaternion rotation, field of view).\n\n    Returns:\n        torch.Tensor: Encoded camera pose parameters with shape BxSx9.\n            For \"absT_quaR_FoV\" type, the 9 dimensions are:\n            - [:3] = absolute translation vector T (3D)\n            - [3:7] = rotation as quaternion quat (4D)\n            - [7:] = field of view (2D)\n    \"\"\"\n\n    # extrinsics: BxSx3x4\n    # intrinsics: BxSx3x3\n\n    if pose_encoding_type == \"absT_quaR_FoV\":\n        R = extrinsics[:, :, :3, :3]  # BxSx3x3\n        T = extrinsics[:, :, :3, 3]  # BxSx3\n\n        quat = mat_to_quat(R)\n        # Note the order of h and w here\n        H, W = image_size_hw\n        fov_h = 2 * torch.atan((H / 2) / intrinsics[..., 1, 1])\n        fov_w = 2 * torch.atan((W / 2) / intrinsics[..., 0, 0])\n        pose_encoding = torch.cat([T, quat, fov_h[..., None], fov_w[..., None]], dim=-1).float()\n    else:\n        raise NotImplementedError\n\n    return pose_encoding\n\n\ndef pose_encoding_to_extri_intri(\n    pose_encoding,\n    image_size_hw=None,  # e.g., (256, 512)\n    pose_encoding_type=\"absT_quaR_FoV\",\n    build_intrinsics=True,\n):\n    \"\"\"Convert a pose encoding back to camera extrinsics and intrinsics.\n\n    This function performs the inverse operation of extri_intri_to_pose_encoding,\n    reconstructing the full camera parameters from the compact encoding.\n\n    Args:\n        pose_encoding (torch.Tensor): Encoded camera pose parameters with shape BxSx9,\n            where B is batch size and S is sequence length.\n            For \"absT_quaR_FoV\" type, the 9 dimensions are:\n            - [:3] = absolute translation vector T (3D)\n            - [3:7] = rotation as quaternion quat (4D)\n            - [7:] = field of view (2D)\n        image_size_hw (tuple): Tuple of (height, width) of the image in pixels.\n            Required for reconstructing intrinsics from field of view values.\n            For example: (256, 512).\n        pose_encoding_type (str): Type of pose encoding used. Currently only\n            supports \"absT_quaR_FoV\" (absolute translation, quaternion rotation, field of view).\n        build_intrinsics (bool): Whether to reconstruct the intrinsics matrix.\n            If False, only extrinsics are returned and intrinsics will be None.\n\n    Returns:\n        tuple: (extrinsics, intrinsics)\n            - extrinsics (torch.Tensor): Camera extrinsic parameters with shape BxSx3x4.\n              In OpenCV coordinate system (x-right, y-down, z-forward), representing camera from world\n              transformation. The format is [R|t] where R is a 3x3 rotation matrix and t is\n              a 3x1 translation vector.\n            - intrinsics (torch.Tensor or None): Camera intrinsic parameters with shape BxSx3x3,\n              or None if build_intrinsics is False. Defined in pixels, with format:\n              [[fx, 0, cx],\n               [0, fy, cy],\n               [0,  0,  1]]\n              where fx, fy are focal lengths and (cx, cy) is the principal point,\n              assumed to be at the center of the image (W/2, H/2).\n    \"\"\"\n\n    intrinsics = None\n\n    if pose_encoding_type == \"absT_quaR_FoV\":\n        T = pose_encoding[..., :3]\n        quat = pose_encoding[..., 3:7]\n        fov_h = pose_encoding[..., 7]\n        fov_w = pose_encoding[..., 8]\n\n        R = quat_to_mat(quat)\n        extrinsics = torch.cat([R, T[..., None]], dim=-1)\n\n        if build_intrinsics:\n            H, W = image_size_hw\n            fy = (H / 2.0) / torch.tan(fov_h / 2.0)\n            fx = (W / 2.0) / torch.tan(fov_w / 2.0)\n            intrinsics = torch.zeros(pose_encoding.shape[:2] + (3, 3), device=pose_encoding.device)\n            intrinsics[..., 0, 0] = fx\n            intrinsics[..., 1, 1] = fy\n            intrinsics[..., 0, 2] = W / 2\n            intrinsics[..., 1, 2] = H / 2\n            intrinsics[..., 2, 2] = 1.0  # Set the homogeneous coordinate to 1\n    else:\n        raise NotImplementedError\n\n    return extrinsics, intrinsics\n"
  },
  {
    "path": "vggt/utils/rotation.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\n\n# Modified from PyTorch3D, https://github.com/facebookresearch/pytorch3d\n\nimport torch\nimport numpy as np\nimport torch.nn.functional as F\n\n\ndef quat_to_mat(quaternions: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Quaternion Order: XYZW or say ijkr, scalar-last\n\n    Convert rotations given as quaternions to rotation matrices.\n    Args:\n        quaternions: quaternions with real part last,\n            as tensor of shape (..., 4).\n\n    Returns:\n        Rotation matrices as tensor of shape (..., 3, 3).\n    \"\"\"\n    i, j, k, r = torch.unbind(quaternions, -1)\n    # pyre-fixme[58]: `/` is not supported for operand types `float` and `Tensor`.\n    two_s = 2.0 / (quaternions * quaternions).sum(-1)\n\n    o = torch.stack(\n        (\n            1 - two_s * (j * j + k * k),\n            two_s * (i * j - k * r),\n            two_s * (i * k + j * r),\n            two_s * (i * j + k * r),\n            1 - two_s * (i * i + k * k),\n            two_s * (j * k - i * r),\n            two_s * (i * k - j * r),\n            two_s * (j * k + i * r),\n            1 - two_s * (i * i + j * j),\n        ),\n        -1,\n    )\n    return o.reshape(quaternions.shape[:-1] + (3, 3))\n\n\ndef mat_to_quat(matrix: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Convert rotations given as rotation matrices to quaternions.\n\n    Args:\n        matrix: Rotation matrices as tensor of shape (..., 3, 3).\n\n    Returns:\n        quaternions with real part last, as tensor of shape (..., 4).\n        Quaternion Order: XYZW or say ijkr, scalar-last\n    \"\"\"\n    if matrix.size(-1) != 3 or matrix.size(-2) != 3:\n        raise ValueError(f\"Invalid rotation matrix shape {matrix.shape}.\")\n\n    batch_dim = matrix.shape[:-2]\n    m00, m01, m02, m10, m11, m12, m20, m21, m22 = torch.unbind(matrix.reshape(batch_dim + (9,)), dim=-1)\n\n    q_abs = _sqrt_positive_part(\n        torch.stack(\n            [\n                1.0 + m00 + m11 + m22,\n                1.0 + m00 - m11 - m22,\n                1.0 - m00 + m11 - m22,\n                1.0 - m00 - m11 + m22,\n            ],\n            dim=-1,\n        )\n    )\n\n    # we produce the desired quaternion multiplied by each of r, i, j, k\n    quat_by_rijk = torch.stack(\n        [\n            # pyre-fixme[58]: `**` is not supported for operand types `Tensor` and\n            #  `int`.\n            torch.stack([q_abs[..., 0] ** 2, m21 - m12, m02 - m20, m10 - m01], dim=-1),\n            # pyre-fixme[58]: `**` is not supported for operand types `Tensor` and\n            #  `int`.\n            torch.stack([m21 - m12, q_abs[..., 1] ** 2, m10 + m01, m02 + m20], dim=-1),\n            # pyre-fixme[58]: `**` is not supported for operand types `Tensor` and\n            #  `int`.\n            torch.stack([m02 - m20, m10 + m01, q_abs[..., 2] ** 2, m12 + m21], dim=-1),\n            # pyre-fixme[58]: `**` is not supported for operand types `Tensor` and\n            #  `int`.\n            torch.stack([m10 - m01, m20 + m02, m21 + m12, q_abs[..., 3] ** 2], dim=-1),\n        ],\n        dim=-2,\n    )\n\n    # We floor here at 0.1 but the exact level is not important; if q_abs is small,\n    # the candidate won't be picked.\n    flr = torch.tensor(0.1).to(dtype=q_abs.dtype, device=q_abs.device)\n    quat_candidates = quat_by_rijk / (2.0 * q_abs[..., None].max(flr))\n\n    # if not for numerical problems, quat_candidates[i] should be same (up to a sign),\n    # forall i; we pick the best-conditioned one (with the largest denominator)\n    out = quat_candidates[F.one_hot(q_abs.argmax(dim=-1), num_classes=4) > 0.5, :].reshape(batch_dim + (4,))\n\n    # Convert from rijk to ijkr\n    out = out[..., [1, 2, 3, 0]]\n\n    out = standardize_quaternion(out)\n\n    return out\n\n\ndef _sqrt_positive_part(x: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Returns torch.sqrt(torch.max(0, x))\n    but with a zero subgradient where x is 0.\n    \"\"\"\n    ret = torch.zeros_like(x)\n    positive_mask = x > 0\n    if torch.is_grad_enabled():\n        ret[positive_mask] = torch.sqrt(x[positive_mask])\n    else:\n        ret = torch.where(positive_mask, torch.sqrt(x), ret)\n    return ret\n\n\ndef standardize_quaternion(quaternions: torch.Tensor) -> torch.Tensor:\n    \"\"\"\n    Convert a unit quaternion to a standard form: one in which the real\n    part is non negative.\n\n    Args:\n        quaternions: Quaternions with real part last,\n            as tensor of shape (..., 4).\n\n    Returns:\n        Standardized quaternions as tensor of shape (..., 4).\n    \"\"\"\n    return torch.where(quaternions[..., 3:4] < 0, -quaternions, quaternions)\n"
  },
  {
    "path": "vggt/utils/visual_track.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\n# All rights reserved.\n#\n# This source code is licensed under the license found in the\n# LICENSE file in the root directory of this source tree.\nimport cv2\nimport torch\nimport numpy as np\nimport os\n\n\ndef color_from_xy(x, y, W, H, cmap_name=\"hsv\"):\n    \"\"\"\n    Map (x, y) -> color in (R, G, B).\n    1) Normalize x,y to [0,1].\n    2) Combine them into a single scalar c in [0,1].\n    3) Use matplotlib's colormap to convert c -> (R,G,B).\n\n    You can customize step 2, e.g., c = (x + y)/2, or some function of (x, y).\n    \"\"\"\n    import matplotlib.cm\n    import matplotlib.colors\n\n    x_norm = x / max(W - 1, 1)\n    y_norm = y / max(H - 1, 1)\n    # Simple combination:\n    c = (x_norm + y_norm) / 2.0\n\n    cmap = matplotlib.cm.get_cmap(cmap_name)\n    # cmap(c) -> (r,g,b,a) in [0,1]\n    rgba = cmap(c)\n    r, g, b = rgba[0], rgba[1], rgba[2]\n    return (r, g, b)  # in [0,1], RGB order\n\n\ndef get_track_colors_by_position(tracks_b, vis_mask_b=None, image_width=None, image_height=None, cmap_name=\"hsv\"):\n    \"\"\"\n    Given all tracks in one sample (b), compute a (N,3) array of RGB color values\n    in [0,255]. The color is determined by the (x,y) position in the first\n    visible frame for each track.\n\n    Args:\n        tracks_b: Tensor of shape (S, N, 2). (x,y) for each track in each frame.\n        vis_mask_b: (S, N) boolean mask; if None, assume all are visible.\n        image_width, image_height: used for normalizing (x, y).\n        cmap_name: for matplotlib (e.g., 'hsv', 'rainbow', 'jet').\n\n    Returns:\n        track_colors: np.ndarray of shape (N, 3), each row is (R,G,B) in [0,255].\n    \"\"\"\n    S, N, _ = tracks_b.shape\n    track_colors = np.zeros((N, 3), dtype=np.uint8)\n\n    if vis_mask_b is None:\n        # treat all as visible\n        vis_mask_b = torch.ones(S, N, dtype=torch.bool, device=tracks_b.device)\n\n    for i in range(N):\n        # Find first visible frame for track i\n        visible_frames = torch.where(vis_mask_b[:, i])[0]\n        if len(visible_frames) == 0:\n            # track is never visible; just assign black or something\n            track_colors[i] = (0, 0, 0)\n            continue\n\n        first_s = int(visible_frames[0].item())\n        # use that frame's (x,y)\n        x, y = tracks_b[first_s, i].tolist()\n\n        # map (x,y) -> (R,G,B) in [0,1]\n        r, g, b = color_from_xy(x, y, W=image_width, H=image_height, cmap_name=cmap_name)\n        # scale to [0,255]\n        r, g, b = int(r * 255), int(g * 255), int(b * 255)\n        track_colors[i] = (r, g, b)\n\n    return track_colors\n\n\ndef visualize_tracks_on_images(\n    images,\n    tracks,\n    track_vis_mask=None,\n    out_dir=\"track_visuals_concat_by_xy\",\n    image_format=\"CHW\",  # \"CHW\" or \"HWC\"\n    normalize_mode=\"[0,1]\",\n    cmap_name=\"hsv\",  # e.g. \"hsv\", \"rainbow\", \"jet\"\n    frames_per_row=4,  # New parameter for grid layout\n    save_grid=True,  # Flag to control whether to save the grid image\n):\n    \"\"\"\n    Visualizes frames in a grid layout with specified frames per row.\n    Each track's color is determined by its (x,y) position\n    in the first visible frame (or frame 0 if always visible).\n    Finally convert the BGR result to RGB before saving.\n    Also saves each individual frame as a separate PNG file.\n\n    Args:\n        images: torch.Tensor (S, 3, H, W) if CHW or (S, H, W, 3) if HWC.\n        tracks: torch.Tensor (S, N, 2), last dim = (x, y).\n        track_vis_mask: torch.Tensor (S, N) or None.\n        out_dir: folder to save visualizations.\n        image_format: \"CHW\" or \"HWC\".\n        normalize_mode: \"[0,1]\", \"[-1,1]\", or None for direct raw -> 0..255\n        cmap_name: a matplotlib colormap name for color_from_xy.\n        frames_per_row: number of frames to display in each row of the grid.\n        save_grid: whether to save all frames in one grid image.\n\n    Returns:\n        None (saves images in out_dir).\n    \"\"\"\n\n    if len(tracks.shape) == 4:\n        tracks = tracks.squeeze(0)\n        images = images.squeeze(0)\n        if track_vis_mask is not None:\n            track_vis_mask = track_vis_mask.squeeze(0)\n\n    import matplotlib\n\n    matplotlib.use(\"Agg\")  # for non-interactive (optional)\n\n    os.makedirs(out_dir, exist_ok=True)\n\n    S = images.shape[0]\n    _, N, _ = tracks.shape  # (S, N, 2)\n\n    # Move to CPU\n    images = images.cpu().clone()\n    tracks = tracks.cpu().clone()\n    if track_vis_mask is not None:\n        track_vis_mask = track_vis_mask.cpu().clone()\n\n    # Infer H, W from images shape\n    if image_format == \"CHW\":\n        # e.g. images[s].shape = (3, H, W)\n        H, W = images.shape[2], images.shape[3]\n    else:\n        # e.g. images[s].shape = (H, W, 3)\n        H, W = images.shape[1], images.shape[2]\n\n    # Pre-compute the color for each track i based on first visible position\n    track_colors_rgb = get_track_colors_by_position(\n        tracks,  # shape (S, N, 2)\n        vis_mask_b=track_vis_mask if track_vis_mask is not None else None,\n        image_width=W,\n        image_height=H,\n        cmap_name=cmap_name,\n    )\n\n    # We'll accumulate each frame's drawn image in a list\n    frame_images = []\n\n    for s in range(S):\n        # shape => either (3, H, W) or (H, W, 3)\n        img = images[s]\n\n        # Convert to (H, W, 3)\n        if image_format == \"CHW\":\n            img = img.permute(1, 2, 0)  # (H, W, 3)\n        # else \"HWC\", do nothing\n\n        img = img.numpy().astype(np.float32)\n\n        # Scale to [0,255] if needed\n        if normalize_mode == \"[0,1]\":\n            img = np.clip(img, 0, 1) * 255.0\n        elif normalize_mode == \"[-1,1]\":\n            img = (img + 1.0) * 0.5 * 255.0\n            img = np.clip(img, 0, 255.0)\n        # else no normalization\n\n        # Convert to uint8\n        img = img.astype(np.uint8)\n\n        # For drawing in OpenCV, convert to BGR\n        img_bgr = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)\n\n        # Draw each visible track\n        cur_tracks = tracks[s]  # shape (N, 2)\n        if track_vis_mask is not None:\n            valid_indices = torch.where(track_vis_mask[s])[0]\n        else:\n            valid_indices = range(N)\n\n        cur_tracks_np = cur_tracks.numpy()\n        for i in valid_indices:\n            x, y = cur_tracks_np[i]\n            pt = (int(round(x)), int(round(y)))\n\n            # track_colors_rgb[i] is (R,G,B). For OpenCV circle, we need BGR\n            R, G, B = track_colors_rgb[i]\n            color_bgr = (int(B), int(G), int(R))\n            cv2.circle(img_bgr, pt, radius=3, color=color_bgr, thickness=-1)\n\n        # Convert back to RGB for consistent final saving:\n        img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)\n\n        # Save individual frame\n        frame_path = os.path.join(out_dir, f\"frame_{s:04d}.png\")\n        # Convert to BGR for OpenCV imwrite\n        frame_bgr = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2BGR)\n        cv2.imwrite(frame_path, frame_bgr)\n\n        frame_images.append(img_rgb)\n\n    # Only create and save the grid image if save_grid is True\n    if save_grid:\n        # Calculate grid dimensions\n        num_rows = (S + frames_per_row - 1) // frames_per_row  # Ceiling division\n\n        # Create a grid of images\n        grid_img = None\n        for row in range(num_rows):\n            start_idx = row * frames_per_row\n            end_idx = min(start_idx + frames_per_row, S)\n\n            # Concatenate this row horizontally\n            row_img = np.concatenate(frame_images[start_idx:end_idx], axis=1)\n\n            # If this row has fewer than frames_per_row images, pad with black\n            if end_idx - start_idx < frames_per_row:\n                padding_width = (frames_per_row - (end_idx - start_idx)) * W\n                padding = np.zeros((H, padding_width, 3), dtype=np.uint8)\n                row_img = np.concatenate([row_img, padding], axis=1)\n\n            # Add this row to the grid\n            if grid_img is None:\n                grid_img = row_img\n            else:\n                grid_img = np.concatenate([grid_img, row_img], axis=0)\n\n        out_path = os.path.join(out_dir, \"tracks_grid.png\")\n        # Convert back to BGR for OpenCV imwrite\n        grid_img_bgr = cv2.cvtColor(grid_img, cv2.COLOR_RGB2BGR)\n        cv2.imwrite(out_path, grid_img_bgr)\n        print(f\"[INFO] Saved color-by-XY track visualization grid -> {out_path}\")\n\n    print(f\"[INFO] Saved {S} individual frames to {out_dir}/frame_*.png\")\n"
  },
  {
    "path": "video_inference.py",
    "content": "import argparse\nimport os\n\nimport safetensors\nimport torch\nfrom diffusers.utils import export_to_video, load_image\n\nfrom cogvideox_interpolation.pipeline import CogVideoXInterpolationPipeline\n\n\ndef parse_args():\n    parser = argparse.ArgumentParser(description='Video interpolation with different checkpoints')\n    parser.add_argument('--model_path', type=str, help='Path to the base model')\n    parser.add_argument('--base_ckpt_path', type=str, default=None, help='Base path for checkpoints')\n    parser.add_argument('--output_dir', type=str, help='Directory for output videos')\n    parser.add_argument('--first_image', type=str, help='Path to the first image')\n    parser.add_argument('--last_image', type=str, help='Path to the last image')\n    return parser.parse_args()\n\ndef main():\n    args = parse_args()\n    \n    pipe = CogVideoXInterpolationPipeline.from_pretrained(\n        args.model_path,\n        torch_dtype=torch.bfloat16\n    )\n\n    pipe.enable_sequential_cpu_offload()\n    pipe.vae.enable_tiling()\n    pipe.vae.enable_slicing()\n    prompt = 'a 3D consistent video scene'\n\n    # checkpoints = ['ori', 800] \n    checkpoints = [800]\n    \n    os.makedirs(args.output_dir, exist_ok=True)\n\n    for ckpt_num in checkpoints:\n        print(f\"Processing checkpoint-{ckpt_num}\")\n        \n        pipe = CogVideoXInterpolationPipeline.from_pretrained(\n            args.model_path,\n            torch_dtype=torch.bfloat16\n        )\n        \n        if args.base_ckpt_path is not None:\n            # ckpt_path = os.path.join(args.base_ckpt_path, f\"checkpoint-{ckpt_num}\")\n            ckpt_path = args.base_ckpt_path\n            \n            state_dict = safetensors.torch.load_file(os.path.join(ckpt_path, \"model.safetensors\"))\n            pipe.transformer.load_state_dict(state_dict)\n        \n        pipe.enable_sequential_cpu_offload()\n        pipe.vae.enable_tiling()\n        pipe.vae.enable_slicing()\n\n        first_image = load_image(args.first_image)\n        last_image = load_image(args.last_image)\n        \n        videos = pipe(\n            prompt=prompt,\n            first_image=first_image,\n            last_image=last_image,\n            num_videos_per_prompt=50,\n            num_inference_steps=50,\n            num_frames=49,\n            guidance_scale=6,\n            generator=torch.Generator(device=\"cuda\").manual_seed(42),\n        )\n        video = videos[0]\n        \n        prefix = \"ori\" if ckpt_num == 'ori' else \"video\"\n        output_path = os.path.join(args.output_dir, f\"{prefix}_ckpt_{ckpt_num}.mp4\")\n        export_to_video(video[0], output_path, fps=8)\n        print(f\"{prefix}_ckpt_{ckpt_num}.mp4 saved\")\n        \n        del pipe\n        torch.cuda.empty_cache()\n\n\n    print(\"All checkpoints processing completed!\")\n\nif __name__ == \"__main__\":\n    main()"
  }
]